diff --git a/.clang-tidy b/.clang-tidy index e516426d03..6ccf3b98db 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -12,7 +12,8 @@ Checks: > -fuchsia-overloaded-operator, -cppcoreguidelines-avoid-capturing-lambda-coroutines, -llvm-header-guard, - -bugprone-easily-swappable-parameters + -bugprone-easily-swappable-parameters, + -*-default-arguments-declarations WarningsAsErrors: '-*' HeaderFilterRegex: '' FormatStyle: none @@ -52,4 +53,4 @@ CheckOptions: - key: readability-identifier-length.IgnoredVariableNames value: '_p|p0|p1|i|j|k|x|X|y|Y|z|Z|a|A|b|B|c|C|d|D|ab|AB|ba|BA|bc|BC|cb|CB|cd|CD|dc|DC|ad|AD|da|DA|ip|os' - key: readability-identifier-length.IgnoredLoopCounterNames - value: '_p|p0|p1|i|j|k|x|X|y|Y|z|Z|a|A|b|B|c|C|d|D|ab|AB|ba|BA|bc|BC|cb|CB|cd|CD|dc|DC|ad|AD|da|DA|ip|os' \ No newline at end of file + value: '_p|p0|p1|i|j|k|x|X|y|Y|z|Z|a|A|b|B|c|C|d|D|ab|AB|ba|BA|bc|BC|cb|CB|cd|CD|dc|DC|ad|AD|da|DA|ip|os' diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index 30ce6205c6..91943e6dcc 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -21,6 +21,7 @@ on: - main - 'CURA-*' - 'PP-*' + - 'NP-*' - '[0-9]+.[0-9]+' permissions: @@ -55,6 +56,6 @@ jobs: output_file_path: "build/Release/benchmark_result.json" data_dir: "dev/bench" tool: "googlecpp" - alert_threshold: "125%" + alert_threshold: "150%" alert_comment_cc_users: "@nallath, @jellespijker, @wawanbreton, @casperlamboo, @saumyaj3, @HellAholic" secrets: inherit diff --git a/.github/workflows/conan-package.yml b/.github/workflows/conan-package.yml index 76060d3063..eb5829a6a7 100644 --- a/.github/workflows/conan-package.yml +++ b/.github/workflows/conan-package.yml @@ -14,11 +14,29 @@ on: - main - 'CURA-*' - 'PP-*' + - 'NP-*' - '[0-9].[0-9]*' - '[0-9].[0-9][0-9]*' tags: - '[0-9]+.[0-9]+.[0-9]*' - '[0-9]+.[0-9]+.[0-9]' + pull_request: + types: [opened, reopened, synchronize] + paths: + - 'include/**' + - 'src/**' + - 'test_package/**' + - 'conanfile.py' + - 'conandata.yml' + - 'CMakeLists.txt' + - '.github/workflows/conan-package.yml' + branches: + - main + - 'CURA-*' + - 'PP-*' + - 'NP-*' + - '[0-9].[0-9]*' + - '[0-9].[0-9][0-9]*' jobs: conan-recipe-version: @@ -36,7 +54,7 @@ jobs: conan-package-create-macos: needs: [ conan-recipe-version, conan-package-export ] - if: ${{ (github.event_name == 'push' && (github.ref_name == 'main' || github.ref_name == 'master' || needs.conan-recipe-version.outputs.is_release_branch == 'true')) }} + if: ${{ ((github.event_name == 'push' && (github.ref_name == 'main' || needs.conan-recipe-version.outputs.is_release_branch == 'true')) || github.event_name == 'pull_request') }} uses: ultimaker/cura-workflows/.github/workflows/conan-package-create-macos.yml@main with: recipe_id_full: ${{ needs.conan-recipe-version.outputs.recipe_id_full }} @@ -44,7 +62,7 @@ jobs: conan-package-create-windows: needs: [ conan-recipe-version, conan-package-export ] - if: ${{ (github.event_name == 'push' && (github.ref_name == 'main' || github.ref_name == 'master' || needs.conan-recipe-version.outputs.is_release_branch == 'true')) }} + if: ${{ ((github.event_name == 'push' && (github.ref_name == 'main' || needs.conan-recipe-version.outputs.is_release_branch == 'true')) || github.event_name == 'pull_request') }} uses: ultimaker/cura-workflows/.github/workflows/conan-package-create-windows.yml@main with: recipe_id_full: ${{ needs.conan-recipe-version.outputs.recipe_id_full }} @@ -52,8 +70,16 @@ jobs: conan-package-create-linux: needs: [ conan-recipe-version, conan-package-export ] - if: ${{ (github.event_name == 'push' && (github.ref_name == 'main' || github.ref_name == 'master' || needs.conan-recipe-version.outputs.is_release_branch == 'true')) }} + if: ${{ ((github.event_name == 'push' && (github.ref_name == 'main' || needs.conan-recipe-version.outputs.is_release_branch == 'true')) || github.event_name == 'pull_request') }} uses: ultimaker/cura-workflows/.github/workflows/conan-package-create-linux.yml@main with: recipe_id_full: ${{ needs.conan-recipe-version.outputs.recipe_id_full }} secrets: inherit + + conan-package-create-wasm: + needs: [ conan-recipe-version, conan-package-export ] + if: ${{ (github.event_name == 'push' && (github.ref_name == 'main' || needs.conan-recipe-version.outputs.is_release_branch == 'true')) }} + uses: ultimaker/cura-workflows/.github/workflows/conan-package-create-wasm.yml@main + with: + recipe_id_full: ${{ needs.conan-recipe-version.outputs.recipe_id_full }} + secrets: inherit diff --git a/.github/workflows/gcodeanalyzer.yml b/.github/workflows/gcodeanalyzer.yml index 116937507c..aa45e74bc2 100644 --- a/.github/workflows/gcodeanalyzer.yml +++ b/.github/workflows/gcodeanalyzer.yml @@ -17,6 +17,7 @@ on: - main - 'CURA-*' - 'PP-*' + - 'NP-*' - '[0-9]+.[0-9]+' permissions: @@ -80,28 +81,6 @@ jobs: fetch-depth: 1 token: ${{ secrets.GITHUB_TOKEN }} - - name: Determine the corresponding Cura branch - id: curabranch - run: | - status_code=$(curl -s -o /dev/null -w "%{http_code}" "https://api.github.com/repos/ultimaker/cura/branches/${{ github.head_ref }}") - if [ "$status_code" -eq 200 ]; then - echo "The branch exists in Cura" - echo "branch=${{ github.head_ref }}" >> $GITHUB_OUTPUT - else - echo "branch=main" >> $GITHUB_OUTPUT - fi - - - name: Checkout Cura - uses: actions/checkout@v3 - with: - repository: 'Ultimaker/Cura' - ref: ${{ steps.curabranch.outputs.branch}} - path: 'Cura' - fetch-depth: 1 - sparse-checkout: | - resources/definitions - resources/extruders - - name: Sync pip requirements run: curl -O https://raw.githubusercontent.com/Ultimaker/cura-workflows/main/.github/workflows/requirements-runner.txt working-directory: CuraEngine/.github/workflows @@ -158,7 +137,7 @@ jobs: ${{ runner.os }}-conan-downloads- - name: Install dependencies - run: conan install . ${{ needs.conan-recipe-version.outputs.recipe_id_full }} -s build_type=Release --build=missing --update -g GitHubActionsRunEnv -g GitHubActionsBuildEnv -c tools.build:skip_test=True + run: conan install . ${{ needs.conan-recipe-version.outputs.recipe_id_full }} -s build_type=Release --build=missing --update -g GitHubActionsRunEnv -g GitHubActionsBuildEnv -c tools.build:skip_test=True -o with_cura_resources=True working-directory: CuraEngine - name: Set Environment variables from Conan install (bash) @@ -166,7 +145,6 @@ jobs: run: | . ./activate_github_actions_runenv.sh . ./activate_github_actions_buildenv.sh - echo "CURA_ENGINE_SEARCH_PATH=$GITHUB_WORKSPACE/Cura/resources/definitions:$GITHUB_WORKSPACE/Cura/resources/extruders" >> $GITHUB_ENV working-directory: CuraEngine/build/Release/generators - name: Build CuraEngine and tests @@ -179,7 +157,7 @@ jobs: run: | for file in `ls ../NightlyTestModels/*.stl`; do - ( time ./build/Release/CuraEngine slice --force-read-parent --force-read-nondefault -v -p -j ../Cura/resources/definitions/ultimaker_s3.def.json -l $file -o ../`basename $file .stl`.gcode ) 2> $file.time + ( time ./build/Release/CuraEngine slice --force-read-parent --force-read-nondefault -v -p -j $CURA_RESOURCES/definitions/ultimaker_s3.def.json -l $file -o ../`basename $file .stl`.gcode ) 2> ../`basename $file .stl`.time done working-directory: CuraEngine @@ -205,9 +183,14 @@ jobs: if ext.lower() != ".gcode": continue infilename = os.path.join(folder_path, filename) - with open(infilename + ".time", "r") as f: - timer = float(re.match(r"^.*?cpu (\d+\.\d+)", f.read())[1]) - + with open(infilename.rsplit(".", 1)[0] + ".time", "r") as f: + content = f.read() + match = re.search(r"^real\s+(\d+)m(\d+\.\d+)s", content, re.MULTILINE) + if match: + timer = float(match.group(1)) * 60 + float(match.group(2)) + else: + timer = 0 + frame = GCodeAnalyzer.DataFrame(infilename) line_lengths = frame.gc.extrusions['length'].describe() diff --git a/.github/workflows/lint-poster.yml b/.github/workflows/lint-poster.yml index a016599fec..3ea00c6572 100644 --- a/.github/workflows/lint-poster.yml +++ b/.github/workflows/lint-poster.yml @@ -10,72 +10,88 @@ jobs: # Trigger the job only if the previous (insecure) workflow completed successfully if: ${{ github.event.workflow_run.conclusion == 'success' }} runs-on: ubuntu-latest + permissions: + pull-requests: write steps: - name: Download analysis results - uses: actions/github-script@v3.1.0 + uses: actions/github-script@v7 with: script: | - let artifacts = await github.actions.listWorkflowRunArtifacts({ + const artifacts = await github.rest.actions.listWorkflowRunArtifacts({ owner: context.repo.owner, repo: context.repo.repo, run_id: ${{github.event.workflow_run.id }}, }); - let matchArtifact = artifacts.data.artifacts.filter((artifact) => { + const matchArtifact = artifacts.data.artifacts.filter((artifact) => { return artifact.name == "linter-result" })[0]; - let download = await github.actions.downloadArtifact({ + const download = await github.rest.actions.downloadArtifact({ owner: context.repo.owner, repo: context.repo.repo, artifact_id: matchArtifact.id, archive_format: "zip", }); - let fs = require("fs"); + const fs = require("fs"); fs.writeFileSync("${{github.workspace}}/linter-result.zip", Buffer.from(download.data)); - - name: Set environment variables + - name: Extract analysis results run: | mkdir linter-result - unzip linter-result.zip -d linter-result - echo "pr_id=$(cat linter-result/pr-id.txt)" >> $GITHUB_ENV - echo "pr_head_repo=$(cat linter-result/pr-head-repo.txt)" >> $GITHUB_ENV - echo "pr_head_ref=$(cat linter-result/pr-head-ref.txt)" >> $GITHUB_ENV + unzip -j linter-result.zip -d linter-result + + - name: Set PR details environment variables + uses: actions/github-script@v7 + with: + script: | + const assert = require("node:assert").strict; + const fs = require("fs"); + function exportVar(varName, fileName, regEx) { + const val = fs.readFileSync("${{ github.workspace }}/linter-result/" + fileName, { + encoding: "ascii" + }).trimEnd(); + assert.ok(regEx.test(val), "Invalid value format for " + varName); + core.exportVariable(varName, val); + } + exportVar("PR_ID", "pr-id.txt", /^[0-9]+$/); + exportVar("PR_HEAD_REPO", "pr-head-repo.txt", /^[-./0-9A-Z_a-z]+$/); + exportVar("PR_HEAD_SHA", "pr-head-sha.txt", /^[0-9A-Fa-f]+$/); - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: - repository: ${{ env.pr_head_repo }} - ref: ${{ env.pr_head_ref }} + repository: ${{ env.PR_HEAD_REPO }} + ref: ${{ env.PR_HEAD_SHA }} persist-credentials: false - name: Redownload analysis results - uses: actions/github-script@v3.1.0 + uses: actions/github-script@v7 with: script: | - let artifacts = await github.actions.listWorkflowRunArtifacts({ + const artifacts = await github.rest.actions.listWorkflowRunArtifacts({ owner: context.repo.owner, repo: context.repo.repo, run_id: ${{github.event.workflow_run.id }}, }); - let matchArtifact = artifacts.data.artifacts.filter((artifact) => { + const matchArtifact = artifacts.data.artifacts.filter((artifact) => { return artifact.name == "linter-result" })[0]; - let download = await github.actions.downloadArtifact({ + const download = await github.rest.actions.downloadArtifact({ owner: context.repo.owner, repo: context.repo.repo, artifact_id: matchArtifact.id, archive_format: "zip", }); - let fs = require("fs"); + const fs = require("fs"); fs.writeFileSync("${{github.workspace}}/linter-result.zip", Buffer.from(download.data)); - name: Extract analysis results run: | mkdir linter-result - unzip linter-result.zip -d linter-result + unzip -j linter-result.zip -d linter-result - name: Run clang-tidy-pr-comments action - uses: platisd/clang-tidy-pr-comments + uses: platisd/clang-tidy-pr-comments@v1 with: github_token: ${{ secrets.GITHUB_TOKEN }} clang_tidy_fixes: linter-result/fixes.yml - pull_request_id: ${{ env.pr_id }} + pull_request_id: ${{ env.PR_ID }} request_changes: true diff --git a/.github/workflows/lint-tidier.yml b/.github/workflows/lint-tidier.yml index d178f52f3a..a4bdf1b9d6 100644 --- a/.github/workflows/lint-tidier.yml +++ b/.github/workflows/lint-tidier.yml @@ -91,7 +91,7 @@ jobs: run: | echo ${{ github.event.number }} > linter-result/pr-id.txt echo ${{ github.event.pull_request.head.repo.full_name }} > linter-result/pr-head-repo.txt - echo ${{ github.event.pull_request.head.ref }} > linter-result/pr-head-ref.txt + echo ${{ github.event.pull_request.head.sha }} > linter-result/pr-head-sha.txt - uses: actions/upload-artifact@v2 with: diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 507c1487d0..ebb9b2caf1 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -1,5 +1,5 @@ # NOTE: Best to keep all of these remarks in, they might prove useful in the future. -# This is basically just the standard one that is sugested on 'new workflow'. +# This is basically just the standard one that is suggested on 'new workflow'. name: Scorecard supply-chain security on: @@ -21,51 +21,42 @@ jobs: name: Scorecard analysis runs-on: ubuntu-latest permissions: - # Needed to upload the results to code-scanning dashboard. + # Needed for Code scanning upload security-events: write - # Needed to publish results and get a badge (see publish_results below). + # Needed for GitHub OIDC token if publish_results is true id-token: write - # Uncomment the permissions below if installing in a private repository. - # contents: read - # actions: read steps: - name: "Checkout code" - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 with: persist-credentials: false - name: "Run analysis" - uses: ossf/scorecard-action@e38b1902ae4f44df626f11ba0734b14fb91f8f86 # v2.1.2 + uses: ossf/scorecard-action@0864cf19026789058feabb7e87baa5f140aac736 # v2.3.1 with: results_file: results.sarif results_format: sarif - # (Optional) "write" PAT token. Uncomment the `repo_token` line below if: - # - you want to enable the Branch-Protection check on a *public* repository, or - # - you are installing Scorecard on a *private* repository - # To create the PAT, follow the steps in https://github.com/ossf/scorecard-action#authentication-with-pat. - # repo_token: ${{ secrets.SCORECARD_TOKEN }} - - # Public repositories: - # - Publish results to OpenSSF REST API for easy access by consumers - # - Allows the repository to include the Scorecard badge. - # - See https://github.com/ossf/scorecard-action#publishing-results. - # For private repositories: - # - `publish_results` will always be set to `false`, regardless - # of the value entered here. + # Scorecard team runs a weekly scan of public GitHub repos, + # see https://github.com/ossf/scorecard#public-data. + # Setting `publish_results: true` helps us scale by leveraging your workflow to + # extract the results instead of relying on our own infrastructure to run scans. + # And it's free for you! publish_results: true - # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF - # format to the repository Actions tab. + # Upload the results as artifacts (optional). Commenting out will disable + # uploads of run results in SARIF format to the repository Actions tab. + # https://docs.github.com/en/actions/advanced-guides/storing-workflow-data-as-artifacts - name: "Upload artifact" - uses: actions/upload-artifact@3cea5372237819ed00197afe530f5a7ea3e805c8 # v3.1.0 + uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 with: name: SARIF file path: results.sarif retention-days: 5 - # Upload the results to GitHub's code scanning dashboard. + # Upload the results to GitHub's code scanning dashboard (optional). + # Commenting out will disable upload of results to your repo's Code Scanning dashboard - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@17573ee1cc1b9d061760f3a006fc4aac4f944fd5 # v2.2.4 + uses: github/codeql-action/upload-sarif@83a02f7883b12e0e4e1a146174f5e2292a01e601 # v2.16.4 with: sarif_file: results.sarif diff --git a/.github/workflows/stress_benchmark.yml b/.github/workflows/stress_benchmark.yml index 3911302b5d..f09bb61a8b 100644 --- a/.github/workflows/stress_benchmark.yml +++ b/.github/workflows/stress_benchmark.yml @@ -20,6 +20,7 @@ on: - main - 'CURA-*' - 'PP-*' + - 'NP-*' - '[0-9]+.[0-9]+' permissions: diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index 66e7bc0f82..b8c85c284d 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -15,6 +15,7 @@ on: - main - 'CURA-*' - 'PP-*' + - 'NP-*' - '[0-9]+.[0-9]+' pull_request: diff --git a/CMakeLists.txt b/CMakeLists.txt index 9ae99709be..2287e8f92d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,21 +17,23 @@ option(ENABLE_SENTRY "Send crash data via Sentry" OFF) option(ENABLE_MORE_COMPILER_OPTIMIZATION_FLAGS "Enable more optimization flags" ON) option(USE_SYSTEM_LIBS "Use the system libraries if available" OFF) option(OLDER_APPLE_CLANG "Apple Clang <= 13 used" OFF) +option(ENABLE_THREADING "Enable threading support" ON) -# Generate the plugin types -find_package(protobuf REQUIRED) -find_package(asio-grpc REQUIRED) -find_package(gRPC REQUIRED) -find_package(curaengine_grpc_definitions REQUIRED) -option(OLDER_APPLE_CLANG "Apple Clang <= 13 used" OFF) +if (${ENABLE_ARCUS} OR ${ENABLE_PLUGINS}) + find_package(protobuf REQUIRED) +endif () -MESSAGE(STATUS "Compiling with plugins support: ${ENABLE_PLUGINS}") +MESSAGE(STATUS "Building with plugins support: ${ENABLE_PLUGINS}") if (${ENABLE_PLUGINS}) + find_package(asio-grpc REQUIRED) + find_package(gRPC REQUIRED) + find_package(curaengine_grpc_definitions REQUIRED) + find_package(semver REQUIRED) MESSAGE(STATUS "Plugin secure remotes allowed: ${ENABLE_REMOTE_PLUGINS}") endif () -if (ENABLE_ARCUS) - message(STATUS "Building with Arcus") +message(STATUS "Building with Arcus: ${ENABLE_ARCUS}") +if (${ENABLE_ARCUS}) find_package(arcus REQUIRED) protobuf_generate_cpp(engine_PB_SRCS engine_PB_HEADERS Cura.proto) endif () @@ -60,9 +62,11 @@ set(engine_SRCS # Except main.cpp. src/MeshGroup.cpp src/Mold.cpp src/multiVolumes.cpp - src/PathOrderPath.cpp + src/path_ordering.cpp src/Preheat.cpp - src/PrimeTower.cpp + src/PrimeTower/PrimeTower.cpp + src/PrimeTower/PrimeTowerNormal.cpp + src/PrimeTower/PrimeTowerInterleaved.cpp src/raft.cpp src/Scene.cpp src/SkeletalTrapezoidation.cpp @@ -133,7 +137,7 @@ set(engine_SRCS # Except main.cpp. src/utils/ExtrusionLine.cpp src/utils/ExtrusionSegment.cpp src/utils/gettime.cpp - src/utils/LinearAlg2D.cpp + src/utils/linearAlg2D.cpp src/utils/ListPolyIt.cpp src/utils/Matrix4x3D.cpp src/utils/MinimumSpanningTree.cpp @@ -142,7 +146,6 @@ set(engine_SRCS # Except main.cpp. src/utils/PolygonsPointIndex.cpp src/utils/PolygonsSegmentIndex.cpp src/utils/polygonUtils.cpp - src/utils/polygon.cpp src/utils/PolylineStitcher.cpp src/utils/Simplify.cpp src/utils/SVG.cpp @@ -151,10 +154,23 @@ set(engine_SRCS # Except main.cpp. src/utils/ToolpathVisualizer.cpp src/utils/VoronoiUtils.cpp src/utils/VoxelUtils.cpp - ) + src/utils/MixedPolylineStitcher.cpp + + src/geometry/Polygon.cpp + src/geometry/Shape.cpp + src/geometry/PointsSet.cpp + src/geometry/SingleShape.cpp + src/geometry/PartsView.cpp + src/geometry/LinesSet.cpp + src/geometry/Polyline.cpp + src/geometry/ClosedPolyline.cpp + src/geometry/MixedLinesSet.cpp +) add_library(_CuraEngine STATIC ${engine_SRCS} ${engine_PB_SRCS}) -use_threads(_CuraEngine) +if (ENABLE_THREADING) + use_threads(_CuraEngine) +endif () target_include_directories(_CuraEngine PUBLIC @@ -162,7 +178,7 @@ target_include_directories(_CuraEngine $ PRIVATE $ # Include Cura.pb.h - ) +) target_compile_definitions(_CuraEngine PUBLIC @@ -177,10 +193,7 @@ target_compile_definitions(_CuraEngine $<$:ASSERT_INSANE_OUTPUT> $<$:USE_CPU_TIME> $<$:DEBUG> - $<$:ASSERT_INSANE_OUTPUT> - $<$:USE_CPU_TIME> - $<$:DEBUG> - ) +) enable_sanitizers(_CuraEngine) @@ -189,9 +202,10 @@ if (${EXTENSIVE_WARNINGS}) endif () if (ENABLE_ARCUS) - target_link_libraries(_CuraEngine PUBLIC arcus::arcus ) + target_link_libraries(_CuraEngine PUBLIC arcus::arcus) endif () +find_package(mapbox-wagyu REQUIRED) find_package(clipper REQUIRED) find_package(RapidJSON REQUIRED) find_package(stb REQUIRED) @@ -200,7 +214,6 @@ find_package(spdlog REQUIRED) find_package(fmt REQUIRED) find_package(range-v3 REQUIRED) find_package(scripta REQUIRED) -find_package(semver REQUIRED) if (ENABLE_SENTRY) find_package(sentry REQUIRED) @@ -216,17 +229,18 @@ target_link_libraries(_CuraEngine range-v3::range-v3 fmt::fmt clipper::clipper + mapbox-wagyu::mapbox-wagyu rapidjson stb::stb boost::boost scripta::scripta - semver::semver - curaengine_grpc_definitions::curaengine_grpc_definitions - asio-grpc::asio-grpc - grpc::grpc - protobuf::libprotobuf - $<$:sentry::sentry> - $<$:GTest::gtest>) + $<$:semver::semver> + $<$:curaengine_grpc_definitions::curaengine_grpc_definitions> + $<$:asio-grpc::asio-grpc> + $<$:grpc::grpc> + $<$:protobuf::libprotobuf> + $<$:sentry::sentry> + $<$:GTest::gtest>) target_compile_definitions(_CuraEngine PRIVATE $<$:SENTRY_URL=\"${SENTRY_URL}\"> @@ -242,15 +256,26 @@ else () SET(CMAKE_RC_COMPILER_INIT windres) SET(CMAKE_RC_COMPILE_OBJECT " -O coff -i -o " - ) + ) endif () add_executable(CuraEngine src/main.cpp ${RES_FILES}) # ..., but don't forget the glitter! + if (ENABLE_SENTRY) + set_target_properties(CuraEngine PROPERTIES LINK_FLAGS "/DEBUG:FULL") + endif () endif (NOT WIN32) -use_threads(CuraEngine) +if (ENABLE_THREADING) + use_threads(CuraEngine) +endif () + +if (CMAKE_CXX_PLATFORM_ID STREQUAL "emscripten") + message(STATUS "Building for Emscripten") + target_link_options(_CuraEngine PUBLIC -Wno-unused-command-line-argument -sINVOKE_RUN=0 -sEXPORT_NAME=CuraEngine -sEXPORTED_RUNTIME_METHODS=[callMain,FS] -sFORCE_FILESYSTEM=1 -sALLOW_MEMORY_GROWTH=1 -sEXPORT_ES6=1 -sMODULARIZE=1 -sSINGLE_FILE=1 -sENVIRONMENT=worker -sERROR_ON_UNDEFINED_SYMBOLS=0 -lembind --embind-emit-tsd CuraEngine.d.ts) +endif () + target_link_libraries(CuraEngine PRIVATE _CuraEngine - $<$:sentry::sentry> + $<$:sentry::sentry> ) target_compile_definitions(CuraEngine PRIVATE $<$:SENTRY_URL=\"${SENTRY_URL}\"> @@ -277,10 +302,11 @@ if (ENABLE_TESTING OR ENABLE_BENCHMARKS) GTest::gtest GTest::gmock clipper::clipper - curaengine_grpc_definitions::curaengine_grpc_definitions - asio-grpc::asio-grpc - grpc::grpc - protobuf::libprotobuf) + mapbox-wagyu::mapbox-wagyu + $<$:curaengine_grpc_definitions::curaengine_grpc_definitions> + $<$:asio-grpc::asio-grpc> + $<$:grpc::grpc> + $<$:protobuf::libprotobuf>) if (ENABLE_ARCUS) target_link_libraries(test_helpers PUBLIC arcus::arcus) endif () @@ -290,7 +316,7 @@ if (ENABLE_BENCHMARKS) add_subdirectory(benchmark) if (NOT WIN32) add_subdirectory(stress_benchmark) - endif() + endif () endif () if (ENABLE_TESTING) diff --git a/Cura.proto b/Cura.proto index 32e09769ac..3fc57b7385 100644 --- a/Cura.proto +++ b/Cura.proto @@ -12,6 +12,7 @@ message ObjectList // 0 ... 99: Broadcasts // 100 ... 199: Modify // 200 ... 299: Generate +// IMPORTANT: If you add a slot ID also update the SlotID enum in include/plugins/slots.h enum SlotID { SETTINGS_BROADCAST = 0; SIMPLIFY_MODIFY = 100; @@ -39,6 +40,8 @@ message Slice repeated EnginePlugin engine_plugins = 5; string sentry_id = 6; // The anonymized Sentry user id that requested the slice string cura_version = 7; // The version of Cura that requested the slice + optional string project_name = 8; // The name of the project that requested the slice + optional string user_name = 9; // The Digital Factory account name of the user that requested the slice } message Extruder diff --git a/benchmark/holes.wkt b/benchmark/holes.wkt new file mode 100644 index 0000000000..10ff92a97c --- /dev/null +++ b/benchmark/holes.wkt @@ -0,0 +1 @@ +POLYGON((95494 126805, 96503 133622, 98177 140305, 100476 146724, 103404 152913, 106933 158804, 111015 164309, 115613 169380, 120688 173982, 126196 178066, 132082 181592, 138275 184523, 144689 186820, 151369 188494, 158160 189502, 165000 189839, 171805 189505, 178630 188494, 185310 186820, 191724 184524, 197917 181592, 203803 178066, 209312 173982, 214386 169380, 218984 164310, 223066 158803, 226595 152913, 229523 146724, 231822 140305, 233496 133622, 234502 126839, 234839 119992, 234505 113189, 233494 106367, 231822 99694, 229523 93273, 226591 87078, 223066 81196, 218982 75688, 214380 70613, 209312 66017, 203803 61933, 197913 58404, 191724 55476, 185310 53179, 178630 51505, 171839 50497, 165000 50161, 158194 50494, 151369 51505, 144689 53179, 138275 55475, 132086 58404, 126196 61933, 120688 66017, 115613 70619, 111017 75688, 106933 81196, 103404 87086, 100477 93273, 98177 99694, 96503 106375, 95497 113155, 95161 120009, 95494 126805), (96691 120789, 96887 120703, 98972 120702, 99166 120992, 99166 124114, 98876 124308, 96967 124308, 96763 124059, 96609 120962, 96691 120789), (96759 115930, 96854 115769, 97010 115697, 98972 115692, 99166 115982, 99166 119104, 98876 119298, 96750 119298, 96613 119018, 96759 115930), (96932 125803, 97122 125714, 98972 125712, 99166 126002, 99166 129124, 98876 129318, 97454 129315, 97247 129098, 96890 126714, 96854 125972, 96932 125803), (96858 114008, 96890 113284, 97244 110899, 97354 110749, 97488 110687, 98972 110682, 99166 110972, 99166 114094, 98876 114288, 97090 114288, 96970 114241, 96858 114008), (97589 130826, 97798 130725, 98971 130722, 99166 130980, 99166 134134, 98907 134324, 98230 134286, 98073 134133, 97876 133350, 97527 131003, 97589 130826), (97877 106641, 98062 105900, 98230 105714, 99005 105700, 99107 105754, 99166 105897, 99166 109084, 98876 109278, 97718 109272, 97626 109219, 97534 108970, 97877 106641), (100570 98955, 100578 97146, 101040 95847, 101280 95650, 103981 95650, 104176 95908, 104176 99064, 103886 99258, 100761 99258, 100655 99173, 100570 98955), (100575 100863, 100636 100762, 100849 100663, 103982 100662, 104176 100952, 104176 104074, 103886 104268, 100760 104268, 100576 104019, 100575 100863), (100570 105916, 100633 105775, 100849 105673, 103982 105672, 104176 105962, 104176 109084, 103886 109278, 100764 109278, 100571 108999, 100570 105916), (100570 110876, 100849 110683, 103982 110682, 104176 110972, 104176 114094, 103886 114288, 100764 114288, 100571 114009, 100570 110876), (100570 115886, 100849 115693, 103982 115692, 104176 115982, 104176 119104, 103886 119298, 100764 119298, 100571 119019, 100570 115886), (100570 120896, 100849 120703, 103982 120702, 104176 120992, 104176 124114, 103886 124308, 100764 124308, 100571 124029, 100570 120896), (100570 125906, 100849 125713, 103982 125712, 104176 126002, 104176 129124, 103886 129318, 100764 129318, 100571 129039, 100570 125906), (100574 130928, 100632 130826, 100849 130723, 103981 130722, 104176 130980, 104176 134134, 103886 134328, 100764 134328, 100571 134049, 100574 130928), (100632 135836, 100849 135733, 103982 135732, 104176 136022, 104176 139144, 103886 139338, 100760 139338, 100575 139085, 100573 135945, 100632 135836), (100570 140891, 100849 140743, 103982 140742, 104176 141032, 104176 144155, 103883 144349, 101284 144349, 101055 144183, 100576 142857, 100570 140891), (101762 94096, 101717 93926, 103187 90811, 103352 90670, 104018 90669, 104117 90722, 104176 90865, 104176 94052, 103886 94246, 102040 94246, 101762 94096), (101768 146186, 101773 145954, 101866 145779, 103980 145751, 104176 146014, 104176 149172, 104052 149295, 103479 149359, 103204 149218, 101768 146186), (105580 86169, 105913 85710, 106074 85630, 108992 85630, 109186 85920, 109186 89042, 108896 89236, 105770 89236, 105587 88990, 105580 86169), (105580 90884, 105643 90743, 105859 90641, 108992 90640, 109186 90930, 109186 94052, 108896 94246, 105774 94246, 105581 93967, 105580 90884), (105584 95856, 105642 95754, 105859 95651, 108991 95650, 109186 95908, 109186 99064, 108896 99258, 105774 99258, 105581 98979, 105584 95856), (105580 100856, 105859 100663, 108992 100662, 109186 100952, 109186 104074, 108896 104268, 105774 104268, 105581 103989, 105580 100856), (105580 105866, 105859 105673, 108992 105672, 109186 105962, 109186 109084, 108896 109278, 105774 109278, 105581 108999, 105580 105866), (105580 110876, 105859 110683, 108992 110682, 109186 110972, 109186 114094, 108896 114288, 105774 114288, 105581 114009, 105580 110876), (105580 115886, 105859 115693, 108992 115692, 109186 115982, 109186 119104, 108896 119298, 105774 119298, 105581 119019, 105580 115886), (105580 120896, 105859 120703, 108992 120702, 109186 120992, 109186 124114, 108896 124308, 105774 124308, 105581 124029, 105580 120896), (105580 125906, 105859 125713, 108992 125712, 109186 126002, 109186 129124, 108896 129318, 105774 129318, 105581 129039, 105580 125906), (105642 130826, 105859 130723, 108991 130722, 109186 130980, 109186 134134, 108896 134328, 105774 134328, 105581 134049, 105584 130928, 105642 130826), (105580 135926, 105859 135733, 108992 135732, 109186 136022, 109186 139144, 108896 139338, 105774 139338, 105581 139059, 105580 135926), (105580 140936, 105859 140743, 108992 140742, 109186 141032, 109186 144155, 108896 144349, 105774 144349, 105581 144070, 105580 140936), (105584 145960, 105663 145840, 105859 145754, 108991 145753, 109186 146011, 109186 149165, 108896 149359, 105774 149359, 105581 149080, 105584 145960), (105582 150983, 105663 150850, 105859 150764, 108992 150763, 109186 151053, 109186 154175, 108896 154369, 106074 154369, 105922 154300, 105580 153841, 105582 150983), (106981 84045, 106964 83867, 108096 81974, 108677 81190, 108885 81115, 109106 81184, 109186 81345, 109186 84032, 108896 84226, 107276 84226, 106981 84045), (107023 155881, 107166 155776, 108992 155773, 109186 156063, 109184 158675, 109136 158774, 108814 158900, 108710 158847, 108090 158016, 107018 156228, 107023 155881), (110590 78898, 110631 78562, 112103 76572, 112917 75675, 113065 75610, 114007 75610, 114196 75900, 114196 79022, 113906 79216, 110828 79216, 110699 79159, 110590 78898), (110869 80621, 114002 80620, 114196 80910, 114196 84032, 113906 84226, 110784 84226, 110591 83947, 110590 80811, 110869 80621), (110590 85824, 110869 85631, 114002 85630, 114196 85920, 114196 89042, 113906 89236, 110784 89236, 110591 88957, 110590 85824), (110590 90834, 110869 90641, 114002 90640, 114196 90930, 114196 94052, 113906 94246, 110784 94246, 110591 93967, 110590 90834), (110652 95754, 110869 95651, 114001 95650, 114196 95908, 114196 99064, 113906 99258, 110784 99258, 110591 98979, 110594 95856, 110652 95754), (110590 100856, 110869 100663, 114002 100662, 114196 100952, 114196 104074, 113906 104268, 110784 104268, 110591 103989, 110590 100856), (110590 105866, 110869 105673, 114002 105672, 114196 105962, 114196 109084, 113906 109278, 110784 109278, 110591 108999, 110590 105866), (110590 110876, 110869 110683, 114002 110682, 114196 110972, 114196 114094, 113906 114288, 110784 114288, 110591 114009, 110590 110876), (110590 115886, 110869 115693, 114002 115692, 114196 115982, 114196 119104, 113906 119298, 110784 119298, 110591 119019, 110590 115886), (110590 120896, 110869 120703, 114002 120702, 114196 120992, 114196 124114, 113906 124308, 110784 124308, 110591 124029, 110590 120896), (110590 125906, 110869 125713, 114002 125712, 114196 126002, 114196 129124, 113906 129318, 110784 129318, 110591 129039, 110590 125906), (110594 130928, 110652 130826, 110869 130723, 114001 130722, 114196 130980, 114196 134134, 113906 134328, 110784 134328, 110591 134049, 110594 130928), (110590 135926, 110869 135733, 114002 135732, 114196 136022, 114196 139144, 113906 139338, 110784 139338, 110591 139059, 110590 135926), (110590 140936, 110869 140743, 114002 140742, 114196 141032, 114196 144155, 113906 144349, 110784 144349, 110591 144070, 110590 140936), (110594 145959, 110652 145857, 110869 145754, 114001 145753, 114196 146011, 114196 149165, 113906 149359, 110784 149359, 110591 149080, 110594 145959), (110590 150957, 110869 150764, 114002 150763, 114196 151053, 114196 154175, 113906 154369, 110784 154369, 110591 154090, 110590 150957), (110590 155967, 110869 155774, 114002 155773, 114196 156063, 114196 159185, 113906 159379, 110744 159379, 110596 159128, 110590 155967), (110652 160863, 110813 160783, 114002 160783, 114196 161073, 114196 164195, 113939 164389, 112980 164389, 112090 163412, 110649 161467, 110652 160863), (115600 72719, 116607 71604, 117658 70651, 117793 70600, 119017 70600, 119206 70890, 119206 74012, 118916 74206, 115794 74206, 115600 73949, 115600 72719), (115600 75804, 115879 75611, 119012 75610, 119206 75900, 119206 79022, 118916 79216, 115794 79216, 115601 78937, 115600 75804), (115600 80814, 115879 80621, 119012 80620, 119206 80910, 119206 84032, 118916 84226, 115794 84226, 115601 83947, 115600 80814), (115600 85824, 115879 85631, 119012 85630, 119206 85920, 119206 89042, 118916 89236, 115794 89236, 115601 88957, 115600 85824), (115600 90834, 115879 90641, 119012 90640, 119206 90930, 119206 94052, 118916 94246, 115794 94246, 115601 93967, 115600 90834), (115604 95856, 115662 95754, 115879 95651, 119011 95650, 119206 95908, 119206 99064, 118916 99258, 115794 99258, 115601 98979, 115604 95856), (115600 100856, 115879 100663, 119012 100662, 119206 100952, 119206 104074, 118916 104268, 115794 104268, 115601 103989, 115600 100856), (115600 105866, 115879 105673, 119012 105672, 119206 105962, 119206 109084, 118916 109278, 115794 109278, 115601 108999, 115600 105866), (115600 110876, 115879 110683, 119012 110682, 119206 110972, 119206 114094, 118916 114288, 115794 114288, 115601 114009, 115600 110876), (115879 115693, 119012 115692, 119206 115982, 119206 119104, 118916 119298, 115794 119298, 115601 119019, 115600 115886, 115879 115693), (115600 120896, 115879 120703, 119012 120702, 119206 120992, 119206 124114, 118916 124308, 115794 124308, 115601 124029, 115600 120896), (115600 125906, 115879 125713, 119012 125712, 119206 126002, 119206 129124, 118916 129318, 115794 129318, 115601 129039, 115600 125906), (115604 130928, 115662 130826, 115879 130723, 119011 130722, 119206 130980, 119206 134134, 118916 134328, 115794 134328, 115601 134049, 115604 130928), (115600 135926, 115879 135733, 119012 135732, 119206 136022, 119206 139144, 118916 139338, 115794 139338, 115601 139059, 115600 135926), (115600 140936, 115879 140743, 119012 140742, 119206 141032, 119206 144155, 118916 144349, 115794 144349, 115601 144070, 115600 140936), (115604 145959, 115662 145857, 115879 145754, 119011 145753, 119206 146011, 119206 149165, 118916 149359, 115794 149359, 115601 149080, 115604 145959), (115600 150957, 115879 150764, 119012 150763, 119206 151053, 119206 154175, 118916 154369, 115794 154369, 115601 154090, 115600 150957), (115600 155967, 115879 155774, 119012 155773, 119206 156063, 119206 159185, 118916 159379, 115794 159379, 115601 159100, 115600 155967), (115600 160977, 115879 160784, 119012 160783, 119206 161073, 119206 164195, 118916 164389, 115794 164389, 115601 164110, 115600 160977), (115600 165982, 115879 165794, 119012 165793, 119206 166083, 119206 169205, 118949 169399, 117719 169399, 116604 168392, 115651 167341, 115600 167206, 115600 165982), (120610 67980, 121588 67089, 123592 65605, 124136 65652, 124216 65813, 124216 69002, 123926 69196, 120804 69196, 120610 68939, 120610 67980), (120610 70794, 120889 70601, 124022 70600, 124216 70890, 124216 74012, 123926 74206, 120804 74206, 120611 73927, 120610 70794), (120610 75804, 120889 75611, 124022 75610, 124216 75900, 124216 79022, 123926 79216, 120804 79216, 120611 78937, 120610 75804), (120610 80814, 120889 80621, 124022 80620, 124216 80910, 124216 84032, 123926 84226, 120804 84226, 120611 83947, 120610 80814), (120610 85824, 120889 85631, 124022 85630, 124216 85920, 124216 89042, 123926 89236, 120804 89236, 120611 88957, 120610 85824), (120610 90834, 120889 90641, 124022 90640, 124216 90930, 124216 94052, 123926 94246, 120804 94246, 120611 93967, 120610 90834), (120614 95856, 120672 95754, 120889 95651, 124021 95650, 124216 95908, 124216 99064, 123926 99258, 120804 99258, 120611 98979, 120614 95856), (120610 100856, 120889 100663, 124022 100662, 124216 100952, 124216 104074, 123926 104268, 120804 104268, 120611 103989, 120610 100856), (120610 105866, 120889 105673, 124022 105672, 124216 105962, 124216 109084, 123926 109278, 120804 109278, 120611 108999, 120610 105866), (120610 110876, 120889 110683, 124022 110682, 124216 110972, 124216 114094, 123926 114288, 120804 114288, 120611 114009, 120610 110876), (120610 115886, 120889 115693, 124022 115692, 124216 115982, 124216 119104, 123926 119298, 120804 119298, 120611 119019, 120610 115886), (120610 120896, 120889 120703, 124022 120702, 124216 120992, 124216 124114, 123926 124308, 120804 124308, 120611 124029, 120610 120896), (120610 125906, 120889 125713, 124022 125712, 124216 126002, 124216 129124, 123926 129318, 120804 129318, 120611 129039, 120610 125906), (120614 130928, 120672 130826, 120889 130723, 124021 130722, 124216 130980, 124216 134134, 123926 134328, 120804 134328, 120611 134049, 120614 130928), (120610 135926, 120889 135733, 124022 135732, 124216 136022, 124216 139144, 123926 139338, 120804 139338, 120611 139059, 120610 135926), (120610 140936, 120889 140743, 124022 140742, 124216 141032, 124216 144155, 123926 144349, 120804 144349, 120611 144070, 120610 140936), (120614 145959, 120672 145857, 120889 145754, 124021 145753, 124216 146011, 124216 149165, 123926 149359, 120804 149359, 120611 149080, 120614 145959), (120610 150957, 120889 150764, 124022 150763, 124216 151053, 124216 154175, 123926 154369, 120804 154369, 120611 154090, 120610 150957), (120610 155967, 120889 155774, 124022 155773, 124216 156063, 124216 159185, 123926 159379, 120804 159379, 120611 159100, 120610 155967), (120610 160977, 120889 160784, 124022 160783, 124216 161073, 124216 164195, 123926 164389, 120804 164389, 120611 164110, 120610 160977), (120610 165987, 120889 165794, 124022 165793, 124216 166083, 124216 169205, 123926 169399, 120804 169399, 120611 169120, 120610 165987), (120610 170992, 120889 170804, 124022 170803, 124216 171093, 124216 174171, 124159 174300, 123898 174409, 123562 174368, 121571 172895, 120675 172082, 120610 171934, 120610 170992), (125620 65744, 125871 65596, 129032 65590, 129226 65880, 129226 69002, 128936 69196, 125814 69196, 125621 68917, 125620 65744), (125899 70601, 129032 70600, 129226 70890, 129226 74012, 128936 74206, 125814 74206, 125621 73927, 125620 70794, 125899 70601), (125620 75804, 125899 75611, 129032 75610, 129226 75900, 129226 79022, 128936 79216, 125814 79216, 125621 78937, 125620 75804), (125620 80814, 125899 80621, 129032 80620, 129226 80910, 129226 84032, 128936 84226, 125814 84226, 125621 83947, 125620 80814), (125620 85824, 125899 85631, 129032 85630, 129226 85920, 129226 89042, 128936 89236, 125814 89236, 125621 88957, 125620 85824), (125620 90834, 125899 90641, 129032 90640, 129226 90930, 129226 94052, 128936 94246, 125814 94246, 125621 93967, 125620 90834), (125624 95856, 125682 95754, 125899 95651, 129031 95650, 129226 95908, 129226 99064, 128936 99258, 125814 99258, 125621 98979, 125624 95856), (125620 100856, 125899 100663, 129032 100662, 129226 100952, 129226 104074, 128936 104268, 125814 104268, 125621 103989, 125620 100856), (125620 105866, 125899 105673, 129032 105672, 129226 105962, 129226 109084, 128936 109278, 125814 109278, 125621 108999, 125620 105866), (125620 110876, 125899 110683, 129032 110682, 129226 110972, 129226 114094, 128936 114288, 125814 114288, 125621 114009, 125620 110876), (125620 115886, 125899 115693, 129032 115692, 129226 115982, 129226 119104, 128936 119298, 125814 119298, 125621 119019, 125620 115886), (125620 120896, 125899 120703, 129032 120702, 129226 120992, 129226 124114, 128936 124308, 125814 124308, 125621 124029, 125620 120896), (125620 125906, 125899 125713, 129032 125712, 129226 126002, 129226 129124, 128936 129318, 125814 129318, 125621 129039, 125620 125906), (125624 130928, 125682 130826, 125899 130723, 129031 130722, 129226 130980, 129226 134134, 128936 134328, 125814 134328, 125621 134049, 125624 130928), (125620 135926, 125899 135733, 129032 135732, 129226 136022, 129226 139144, 128936 139338, 125814 139338, 125621 139059, 125620 135926), (125899 140743, 129032 140742, 129226 141032, 129226 144155, 128936 144349, 125814 144349, 125621 144070, 125620 140936, 125899 140743), (125624 145959, 125682 145857, 125899 145754, 129031 145753, 129226 146011, 129226 149165, 128936 149359, 125814 149359, 125621 149080, 125624 145959), (125620 150957, 125899 150764, 129032 150763, 129226 151053, 129226 154175, 128936 154369, 125814 154369, 125621 154090, 125620 150957), (125620 155967, 125899 155774, 129032 155773, 129226 156063, 129226 159185, 128936 159379, 125814 159379, 125621 159100, 125620 155967), (125620 160977, 125899 160784, 129032 160783, 129226 161073, 129226 164195, 128936 164389, 125814 164389, 125621 164110, 125620 160977), (125899 165794, 129032 165793, 129226 166083, 129226 169205, 128936 169399, 125814 169399, 125621 169120, 125620 165987, 125899 165794), (125620 170997, 125899 170804, 129032 170803, 129226 171093, 129226 174215, 128936 174409, 125870 174410, 125745 174367, 125621 174130, 125620 170997), (126099 63814, 126152 63710, 126983 63090, 128771 62018, 129118 62023, 129226 62201, 129226 63992, 128936 64186, 126291 64186, 126188 64091, 126099 63814), (126115 176114, 126184 175893, 126310 175816, 129032 175813, 129226 176103, 129224 177758, 129045 178018, 128867 178035, 126972 176902, 126190 176322, 126115 176114), (130699 60922, 131158 60580, 134016 60582, 134132 60642, 134236 60870, 134236 63992, 133946 64186, 130824 64186, 130631 63907, 130630 61074, 130699 60922), (130630 65784, 130909 65591, 134042 65590, 134236 65880, 134236 69002, 133946 69196, 130824 69196, 130631 68917, 130630 65784), (130630 70794, 130909 70601, 134042 70600, 134236 70890, 134236 74012, 133946 74206, 130824 74206, 130631 73927, 130630 70794), (130630 75804, 130909 75611, 134042 75610, 134236 75900, 134236 79022, 133946 79216, 130824 79216, 130631 78937, 130630 75804), (130630 80814, 130909 80621, 134042 80620, 134236 80910, 134236 84032, 133946 84226, 130824 84226, 130631 83947, 130630 80814), (130630 85824, 130909 85631, 134042 85630, 134236 85920, 134236 89042, 133946 89236, 130824 89236, 130631 88957, 130630 85824), (130630 90834, 130909 90641, 134042 90640, 134236 90930, 134236 94052, 133946 94246, 130824 94246, 130631 93967, 130630 90834), (130634 95856, 130692 95754, 130909 95651, 134041 95650, 134236 95908, 134236 99064, 133946 99258, 130824 99258, 130631 98979, 130634 95856), (130630 100856, 130909 100663, 134042 100662, 134236 100952, 134236 104074, 133946 104268, 130824 104268, 130631 103989, 130630 100856), (130630 105866, 130909 105673, 134042 105672, 134236 105962, 134236 109084, 133946 109278, 130824 109278, 130631 108999, 130630 105866), (130630 110876, 130909 110683, 134042 110682, 134236 110972, 134236 114094, 133946 114288, 130824 114288, 130631 114009, 130630 110876), (130630 115886, 130909 115693, 134042 115692, 134236 115982, 134236 119104, 133946 119298, 130824 119298, 130631 119019, 130630 115886), (130630 120896, 130909 120703, 134042 120702, 134236 120992, 134236 124114, 133946 124308, 130824 124308, 130631 124029, 130630 120896), (130909 125713, 134042 125712, 134236 126002, 134236 129124, 133946 129318, 130824 129318, 130631 129039, 130630 125906, 130909 125713), (130634 130928, 130692 130826, 130909 130723, 134041 130722, 134236 130980, 134236 134134, 133946 134328, 130824 134328, 130631 134049, 130634 130928), (130630 135926, 130909 135733, 134042 135732, 134236 136022, 134236 139144, 133946 139338, 130824 139338, 130631 139059, 130630 135926), (130630 140936, 130909 140743, 134042 140742, 134236 141032, 134236 144155, 133946 144349, 130824 144349, 130631 144070, 130630 140936), (130634 145959, 130692 145857, 130909 145754, 134041 145753, 134236 146011, 134236 149165, 133946 149359, 130824 149359, 130631 149080, 130634 145959), (130630 150957, 130909 150764, 134042 150763, 134236 151053, 134236 154175, 133946 154369, 130824 154369, 130631 154090, 130630 150957), (130630 155967, 130909 155774, 134042 155773, 134236 156063, 134236 159185, 133946 159379, 130824 159379, 130631 159100, 130630 155967), (130630 160977, 130909 160784, 134042 160783, 134236 161073, 134236 164195, 133946 164389, 130824 164389, 130631 164110, 130630 160977), (130630 165987, 130909 165794, 134042 165793, 134236 166083, 134236 169205, 133946 169399, 130824 169399, 130631 169120, 130630 165987), (130630 170997, 130909 170804, 134042 170803, 134236 171093, 134236 174215, 133946 174409, 130824 174409, 130631 174130, 130630 170997), (130630 176007, 130909 175814, 134042 175813, 134236 176103, 134236 179229, 133990 179412, 131169 179419, 130710 179086, 130630 178925, 130630 176007), (135781 58204, 138834 56761, 139067 56766, 139202 56838, 139246 56965, 139246 58982, 138956 59176, 135834 59176, 135704 59052, 135640 58479, 135781 58204), (135640 60774, 135919 60581, 139052 60580, 139246 60870, 139246 63992, 138956 64186, 135834 64186, 135641 63907, 135640 60774), (135640 65784, 135919 65591, 139052 65590, 139246 65880, 139246 69002, 138956 69196, 135834 69196, 135641 68917, 135640 65784), (135640 70794, 135919 70601, 139052 70600, 139246 70890, 139246 74012, 138956 74206, 135834 74206, 135641 73927, 135640 70794), (135640 75804, 135919 75611, 139052 75610, 139246 75900, 139246 79022, 138956 79216, 135834 79216, 135641 78937, 135640 75804), (135640 80814, 135919 80621, 139052 80620, 139246 80910, 139246 84032, 138956 84226, 135834 84226, 135641 83947, 135640 80814), (135640 85824, 135919 85631, 139052 85630, 139246 85920, 139246 89042, 138956 89236, 135834 89236, 135641 88957, 135640 85824), (135640 90834, 135919 90641, 139052 90640, 139246 90930, 139246 94052, 138956 94246, 135834 94246, 135641 93967, 135640 90834), (135644 95856, 135702 95754, 135919 95651, 139051 95650, 139246 95908, 139246 99064, 138956 99258, 135834 99258, 135641 98979, 135644 95856), (135640 100856, 135919 100663, 139052 100662, 139246 100952, 139246 104074, 138956 104268, 135834 104268, 135641 103989, 135640 100856), (135640 105866, 135919 105673, 139052 105672, 139246 105962, 139246 109084, 138956 109278, 135834 109278, 135641 108999, 135640 105866), (135640 110876, 135919 110683, 139052 110682, 139246 110972, 139246 114094, 138956 114288, 135834 114288, 135641 114009, 135640 110876), (135640 115886, 135919 115693, 139052 115692, 139246 115982, 139246 119104, 138956 119298, 135834 119298, 135641 119019, 135640 115886), (135640 120896, 135919 120703, 139052 120702, 139246 120992, 139246 124114, 138956 124308, 135834 124308, 135641 124029, 135640 120896), (135640 125906, 135919 125713, 139052 125712, 139246 126002, 139246 129124, 138956 129318, 135834 129318, 135641 129039, 135640 125906), (135702 130826, 135919 130723, 139051 130722, 139246 130980, 139246 134134, 138956 134328, 135834 134328, 135641 134049, 135644 130928, 135702 130826), (135640 135926, 135919 135733, 139052 135732, 139246 136022, 139246 139144, 138956 139338, 135834 139338, 135641 139059, 135640 135926), (135640 140936, 135919 140743, 139052 140742, 139246 141032, 139246 144155, 138956 144349, 135834 144349, 135641 144070, 135640 140936), (135644 145959, 135702 145857, 135919 145754, 139051 145753, 139246 146011, 139246 149165, 138956 149359, 135834 149359, 135641 149080, 135644 145959), (135640 150957, 135919 150764, 139052 150763, 139246 151053, 139246 154175, 138956 154369, 135834 154369, 135641 154090, 135640 150957), (135640 155967, 135919 155774, 139052 155773, 139246 156063, 139246 159185, 138956 159379, 135834 159379, 135641 159100, 135640 155967), (135640 160977, 135919 160784, 139052 160783, 139246 161073, 139246 164195, 138956 164389, 135834 164389, 135641 164110, 135640 160977), (135640 165987, 135919 165794, 139052 165793, 139246 166083, 139246 169205, 138956 169399, 135834 169399, 135641 169120, 135640 165987), (135640 170997, 135919 170804, 139052 170803, 139246 171093, 139246 174215, 138956 174409, 135834 174409, 135641 174130, 135640 170997), (135919 175814, 139052 175813, 139246 176103, 139246 179225, 138956 179419, 135884 179419, 135743 179356, 135641 179140, 135640 176007, 135919 175814), (135669 180980, 135722 180882, 135865 180823, 139052 180823, 139246 181113, 139244 182994, 139096 183237, 138926 183282, 135811 181812, 135670 181647, 135669 180980), (140650 56278, 140816 56055, 142142 55576, 144110 55570, 144258 55860, 144258 58982, 143968 59176, 140844 59176, 140651 58897, 140650 56278), (140650 60774, 140929 60581, 144064 60580, 144258 60870, 144258 63992, 143968 64186, 140844 64186, 140651 63907, 140650 60774), (140650 65784, 140929 65591, 144064 65590, 144258 65880, 144258 69002, 143968 69196, 140844 69196, 140651 68917, 140650 65784), (140650 70794, 140929 70601, 144064 70600, 144258 70890, 144258 74012, 143968 74206, 140844 74206, 140651 73927, 140650 70794), (140650 75804, 140929 75611, 144064 75610, 144258 75900, 144258 79022, 143968 79216, 140844 79216, 140651 78937, 140650 75804), (140650 80814, 140929 80621, 144064 80620, 144258 80910, 144258 84032, 143968 84226, 140844 84226, 140651 83947, 140650 80814), (140650 85824, 140929 85631, 144064 85630, 144258 85920, 144258 89042, 143968 89236, 140844 89236, 140651 88957, 140650 85824), (140650 90834, 140929 90641, 144064 90640, 144258 90930, 144258 94052, 143968 94246, 140844 94246, 140651 93967, 140650 90834), (140654 95856, 140712 95754, 140929 95651, 144063 95650, 144258 95908, 144258 99064, 143968 99258, 140844 99258, 140651 98979, 140654 95856), (140650 100856, 140929 100663, 144064 100662, 144258 100952, 144258 104074, 143968 104268, 140844 104268, 140651 103989, 140650 100856), (140650 105866, 140929 105673, 144064 105672, 144258 105962, 144258 109084, 143968 109278, 140844 109278, 140651 108999, 140650 105866), (140650 110876, 140929 110683, 144064 110682, 144258 110972, 144258 114094, 143968 114288, 140844 114288, 140651 114009, 140650 110876), (140650 115886, 140929 115693, 144064 115692, 144258 115982, 144258 119104, 143968 119298, 140844 119298, 140651 119019, 140650 115886), (140650 120896, 140929 120703, 144064 120702, 144258 120992, 144258 124114, 143968 124308, 140844 124308, 140651 124029, 140650 120896), (140650 125906, 140929 125713, 144064 125712, 144258 126002, 144258 129124, 143968 129318, 140844 129318, 140651 129039, 140650 125906), (140712 130826, 140929 130723, 144063 130722, 144258 130980, 144258 134134, 143968 134328, 140844 134328, 140651 134049, 140654 130928, 140712 130826), (140650 135926, 140929 135733, 144064 135732, 144258 136022, 144258 139144, 143968 139338, 140844 139338, 140651 139059, 140650 135926), (140650 140936, 140929 140743, 144064 140742, 144258 141032, 144258 144155, 143968 144349, 140844 144349, 140651 144070, 140650 140936), (140654 145959, 140712 145857, 140929 145754, 144063 145753, 144258 146011, 144258 149165, 143968 149359, 140844 149359, 140651 149080, 140654 145959), (140929 150764, 144064 150763, 144258 151053, 144258 154175, 143968 154369, 140844 154369, 140651 154090, 140650 150957, 140929 150764), (140650 155967, 140929 155774, 144064 155773, 144258 156063, 144258 159185, 143968 159379, 140844 159379, 140651 159100, 140650 155967), (140650 160977, 140929 160784, 144064 160783, 144258 161073, 144258 164195, 143968 164389, 140844 164389, 140651 164110, 140650 160977), (140650 165987, 140929 165794, 144064 165793, 144258 166083, 144258 169205, 143968 169399, 140844 169399, 140651 169120, 140650 165987), (140650 170997, 140929 170804, 144064 170803, 144258 171093, 144258 174215, 143968 174409, 140844 174409, 140651 174130, 140650 170997), (140650 176007, 140929 175814, 144064 175813, 144258 176103, 144258 179225, 143968 179419, 140844 179419, 140651 179140, 140650 176007), (140650 181017, 140929 180824, 144064 180823, 144258 181113, 144258 184191, 144201 184321, 143955 184429, 142146 184421, 140847 183959, 140650 183719, 140650 181017), (145662 55764, 145915 55575, 149055 55573, 149164 55632, 149268 55860, 149268 58982, 148978 59176, 145856 59176, 145663 58897, 145662 55764), (145662 60774, 145941 60581, 149074 60580, 149268 60870, 149268 63992, 148978 64186, 145856 64186, 145663 63907, 145662 60774), (145662 65784, 145941 65591, 149074 65590, 149268 65880, 149268 69002, 148978 69196, 145856 69196, 145663 68917, 145662 65784), (145662 70794, 145941 70601, 149074 70600, 149268 70890, 149268 74012, 148978 74206, 145856 74206, 145663 73927, 145662 70794), (145941 75611, 149074 75610, 149268 75900, 149268 79022, 148978 79216, 145856 79216, 145663 78937, 145662 75804, 145941 75611), (145662 80814, 145941 80621, 149074 80620, 149268 80910, 149268 84032, 148978 84226, 145856 84226, 145663 83947, 145662 80814), (145941 85631, 149074 85630, 149268 85920, 149268 89042, 148978 89236, 145856 89236, 145663 88957, 145662 85824, 145941 85631), (145662 90834, 145941 90641, 149074 90640, 149268 90930, 149268 94052, 148978 94246, 145856 94246, 145663 93967, 145662 90834), (145666 95856, 145724 95754, 145941 95651, 149073 95650, 149268 95908, 149268 99064, 148978 99258, 145856 99258, 145663 98979, 145666 95856), (145662 100856, 145941 100663, 149074 100662, 149268 100952, 149268 104074, 148978 104268, 145856 104268, 145663 103989, 145662 100856), (145662 105866, 145941 105673, 149074 105672, 149268 105962, 149268 109084, 148978 109278, 145856 109278, 145663 108999, 145662 105866), (145662 110876, 145941 110683, 149074 110682, 149268 110972, 149268 114094, 148978 114288, 145856 114288, 145663 114009, 145662 110876), (145662 115886, 145941 115693, 149074 115692, 149268 115982, 149268 119104, 148978 119298, 145856 119298, 145663 119019, 145662 115886), (145662 120896, 145941 120703, 149074 120702, 149268 120992, 149268 124114, 148978 124308, 145856 124308, 145663 124029, 145662 120896), (145662 125906, 145941 125713, 149074 125712, 149268 126002, 149268 129124, 148978 129318, 145856 129318, 145663 129039, 145662 125906), (145666 130928, 145724 130826, 145941 130723, 149073 130722, 149268 130980, 149268 134134, 148978 134328, 145856 134328, 145663 134049, 145666 130928), (145662 135926, 145941 135733, 149074 135732, 149268 136022, 149268 139144, 148978 139338, 145856 139338, 145663 139059, 145662 135926), (145662 140936, 145941 140743, 149074 140742, 149268 141032, 149268 144155, 148978 144349, 145856 144349, 145663 144070, 145662 140936), (145666 145959, 145724 145857, 145941 145754, 149073 145753, 149268 146011, 149268 149165, 148978 149359, 145856 149359, 145663 149080, 145666 145959), (145662 150957, 145941 150764, 149074 150763, 149268 151053, 149268 154175, 148978 154369, 145856 154369, 145663 154090, 145662 150957), (145662 155967, 145941 155774, 149074 155773, 149268 156063, 149268 159185, 148978 159379, 145856 159379, 145663 159100, 145662 155967), (145662 160977, 145941 160784, 149074 160783, 149268 161073, 149268 164195, 148978 164389, 145856 164389, 145663 164110, 145662 160977), (145662 165987, 145941 165794, 149074 165793, 149268 166083, 149268 169205, 148978 169399, 145856 169399, 145663 169120, 145662 165987), (145662 170997, 145941 170804, 149074 170803, 149268 171093, 149268 174215, 148978 174409, 145856 174409, 145663 174130, 145662 170997), (145662 176007, 145941 175814, 149074 175813, 149268 176103, 149268 179225, 148978 179419, 145856 179419, 145663 179140, 145662 176007), (145662 181017, 145941 180824, 149074 180823, 149268 181113, 149268 184239, 149004 184430, 145863 184424, 145762 184363, 145663 184150, 145662 181017), (150714 53230, 150867 53073, 151640 52877, 153997 52527, 154174 52589, 154278 52784, 154278 53972, 153988 54166, 150866 54166, 150676 53907, 150714 53230), (150672 55764, 150951 55571, 154084 55570, 154278 55860, 154278 58982, 153988 59176, 150866 59176, 150673 58897, 150672 55764), (150672 60774, 150951 60581, 154084 60580, 154278 60870, 154278 63992, 153988 64186, 150866 64186, 150673 63907, 150672 60774), (150672 65784, 150951 65591, 154084 65590, 154278 65880, 154278 69002, 153988 69196, 150866 69196, 150673 68917, 150672 65784), (150672 70794, 150951 70601, 154084 70600, 154278 70890, 154278 74012, 153988 74206, 150866 74206, 150673 73927, 150672 70794), (150672 75804, 150951 75611, 154084 75610, 154278 75900, 154278 79022, 153988 79216, 150866 79216, 150673 78937, 150672 75804), (150672 80814, 150951 80621, 154084 80620, 154278 80910, 154278 84032, 153988 84226, 150866 84226, 150673 83947, 150672 80814), (150672 85824, 150951 85631, 154084 85630, 154278 85920, 154278 89042, 153988 89236, 150866 89236, 150673 88957, 150672 85824), (150672 90834, 150951 90641, 154084 90640, 154278 90930, 154278 94052, 153988 94246, 150866 94246, 150673 93967, 150672 90834), (150676 95856, 150734 95754, 150951 95651, 154083 95650, 154278 95908, 154278 99064, 153988 99258, 150866 99258, 150673 98979, 150676 95856), (150672 100856, 150951 100663, 154084 100662, 154278 100952, 154278 104074, 153988 104268, 150866 104268, 150673 103989, 150672 100856), (150672 105866, 150951 105673, 154084 105672, 154278 105962, 154278 109084, 153988 109278, 150866 109278, 150673 108999, 150672 105866), (150672 110876, 150951 110683, 154084 110682, 154278 110972, 154278 114094, 153988 114288, 150866 114288, 150673 114009, 150672 110876), (150672 115886, 150951 115693, 154084 115692, 154278 115982, 154278 119104, 153988 119298, 150866 119298, 150673 119019, 150672 115886), (150672 120896, 150951 120703, 154084 120702, 154278 120992, 154278 124114, 153988 124308, 150866 124308, 150673 124029, 150672 120896), (150672 125906, 150951 125713, 154084 125712, 154278 126002, 154278 129124, 153988 129318, 150866 129318, 150673 129039, 150672 125906), (150676 130928, 150734 130826, 150951 130723, 154083 130722, 154278 130980, 154278 134134, 153988 134328, 150866 134328, 150673 134049, 150676 130928), (150672 135926, 150951 135733, 154084 135732, 154278 136022, 154278 139144, 153988 139338, 150866 139338, 150673 139059, 150672 135926), (150672 140936, 150951 140743, 154084 140742, 154278 141032, 154278 144155, 153988 144349, 150866 144349, 150673 144070, 150672 140936), (150734 145857, 150951 145754, 154083 145753, 154278 146011, 154278 149165, 153988 149359, 150866 149359, 150673 149080, 150676 145959, 150734 145857), (150672 150957, 150951 150764, 154084 150763, 154278 151053, 154278 154175, 153988 154369, 150866 154369, 150673 154090, 150672 150957), (150672 155967, 150951 155774, 154084 155773, 154278 156063, 154278 159185, 153988 159379, 150866 159379, 150673 159100, 150672 155967), (150672 160977, 150951 160784, 154084 160783, 154278 161073, 154278 164195, 153988 164389, 150866 164389, 150673 164110, 150672 160977), (150672 165987, 150951 165794, 154084 165793, 154278 166083, 154278 169205, 153988 169399, 150866 169399, 150673 169120, 150672 165987), (150672 170997, 150951 170804, 154084 170803, 154278 171093, 154278 174215, 153988 174409, 150866 174409, 150673 174130, 150672 170997), (150951 175814, 154084 175813, 154278 176103, 154278 179225, 153988 179419, 150866 179419, 150673 179140, 150672 176007, 150951 175814), (150672 181017, 150951 180824, 154084 180823, 154278 181113, 154278 184235, 153988 184429, 150916 184429, 150775 184366, 150673 184150, 150672 181017), (150700 185994, 150754 185892, 150897 185833, 154084 185833, 154278 186123, 154276 187265, 154219 187373, 153970 187465, 151640 187122, 150900 186937, 150714 186769, 150700 185994), (155685 52454, 155902 52247, 158285 51890, 159028 51854, 159197 51932, 159286 52123, 159288 53972, 158998 54166, 155876 54166, 155683 53887, 155685 52454), (155682 55764, 155961 55571, 159094 55570, 159288 55860, 159288 58982, 158998 59176, 155876 59176, 155683 58897, 155682 55764), (155682 60774, 155961 60581, 159094 60580, 159288 60870, 159288 63992, 158998 64186, 155876 64186, 155683 63907, 155682 60774), (155682 65784, 155961 65591, 159094 65590, 159288 65880, 159288 69002, 158998 69196, 155876 69196, 155683 68917, 155682 65784), (155682 70794, 155961 70601, 159094 70600, 159288 70890, 159288 74012, 158998 74206, 155876 74206, 155683 73927, 155682 70794), (155682 75804, 155961 75611, 159094 75610, 159288 75900, 159288 79022, 158998 79216, 155876 79216, 155683 78937, 155682 75804), (155682 80814, 155961 80621, 159094 80620, 159288 80910, 159288 84032, 158998 84226, 155876 84226, 155683 83947, 155682 80814), (155682 85824, 155961 85631, 159094 85630, 159288 85920, 159288 89042, 158998 89236, 155876 89236, 155683 88957, 155682 85824), (155961 90641, 159094 90640, 159288 90930, 159288 94052, 158998 94246, 155876 94246, 155683 93967, 155682 90834, 155961 90641), (155686 95856, 155744 95754, 155961 95651, 159093 95650, 159288 95908, 159288 99064, 158998 99258, 155876 99258, 155683 98979, 155686 95856), (155961 100663, 159094 100662, 159288 100952, 159288 104074, 158998 104268, 155876 104268, 155683 103989, 155682 100856, 155961 100663), (155682 105866, 155961 105673, 159094 105672, 159288 105962, 159288 109084, 158998 109278, 155876 109278, 155683 108999, 155682 105866), (155682 110876, 155961 110683, 159094 110682, 159288 110972, 159288 114094, 158998 114288, 155876 114288, 155683 114009, 155682 110876), (155682 115886, 155961 115693, 159094 115692, 159288 115982, 159288 119104, 158998 119298, 155876 119298, 155683 119019, 155682 115886), (155682 120896, 155961 120703, 159094 120702, 159288 120992, 159288 124114, 158998 124308, 155876 124308, 155683 124029, 155682 120896), (155682 125906, 155961 125713, 159094 125712, 159288 126002, 159288 129124, 158998 129318, 155876 129318, 155683 129039, 155682 125906), (155686 130928, 155744 130826, 155961 130723, 159093 130722, 159288 130980, 159288 134134, 158998 134328, 155876 134328, 155683 134049, 155686 130928), (155682 135926, 155961 135733, 159094 135732, 159288 136022, 159288 139144, 158998 139338, 155876 139338, 155683 139059, 155682 135926), (155682 140936, 155961 140743, 159094 140742, 159288 141032, 159288 144155, 158998 144349, 155876 144349, 155683 144070, 155682 140936), (155686 145959, 155744 145857, 155961 145754, 159093 145753, 159288 146011, 159288 149165, 158998 149359, 155876 149359, 155683 149080, 155686 145959), (155682 150957, 155961 150764, 159094 150763, 159288 151053, 159288 154175, 158998 154369, 155876 154369, 155683 154090, 155682 150957), (155682 155967, 155961 155774, 159094 155773, 159288 156063, 159288 159185, 158998 159379, 155876 159379, 155683 159100, 155682 155967), (155682 160977, 155961 160784, 159094 160783, 159288 161073, 159288 164195, 158998 164389, 155876 164389, 155683 164110, 155682 160977), (155682 165987, 155961 165794, 159094 165793, 159288 166083, 159288 169205, 158998 169399, 155876 169399, 155683 169120, 155682 165987), (155682 170997, 155961 170804, 159094 170803, 159288 171093, 159288 174215, 158998 174409, 155876 174409, 155683 174130, 155682 170997), (155682 176007, 155961 175814, 159094 175813, 159288 176103, 159288 179225, 158998 179419, 155876 179419, 155683 179140, 155682 176007), (155682 181017, 155961 180824, 159094 180823, 159288 181113, 159288 184235, 158998 184429, 155876 184429, 155683 184150, 155682 181017), (155682 186027, 155961 185834, 159094 185833, 159288 186123, 159288 187943, 159241 188029, 159008 188141, 158285 188109, 155899 187755, 155749 187645, 155688 187510, 155682 186027), (160692 51969, 160941 51763, 164038 51608, 164211 51690, 164298 51897, 164298 53972, 164008 54166, 160886 54166, 160693 53887, 160692 51969), (160692 55764, 160971 55571, 164104 55570, 164298 55860, 164298 58982, 164008 59176, 160886 59176, 160693 58897, 160692 55764), (160692 60774, 160971 60581, 164104 60580, 164298 60870, 164298 63992, 164008 64186, 160886 64186, 160693 63907, 160692 60774), (160692 65784, 160971 65591, 164104 65590, 164298 65880, 164298 69002, 164008 69196, 160886 69196, 160693 68917, 160692 65784), (160692 70794, 160971 70601, 164104 70600, 164298 70890, 164298 74012, 164008 74206, 160886 74206, 160693 73927, 160692 70794), (160692 75804, 160971 75611, 164104 75610, 164298 75900, 164298 79022, 164008 79216, 160886 79216, 160693 78937, 160692 75804), (160692 80814, 160971 80621, 164104 80620, 164298 80910, 164298 84032, 164008 84226, 160886 84226, 160693 83947, 160692 80814), (160692 85824, 160971 85631, 164104 85630, 164298 85920, 164298 89042, 164008 89236, 160886 89236, 160693 88957, 160692 85824), (160692 90834, 160971 90641, 164104 90640, 164298 90930, 164298 94052, 164008 94246, 160886 94246, 160693 93967, 160692 90834), (160754 95754, 160971 95651, 164103 95650, 164298 95908, 164298 99064, 164008 99258, 160886 99258, 160693 98979, 160696 95856, 160754 95754), (160692 100856, 160971 100663, 164104 100662, 164298 100952, 164298 104074, 164008 104268, 160886 104268, 160693 103989, 160692 100856), (160692 105866, 160971 105673, 164104 105672, 164298 105962, 164298 109084, 164008 109278, 160886 109278, 160693 108999, 160692 105866), (160692 110876, 160971 110683, 164104 110682, 164298 110972, 164298 114094, 164008 114288, 160886 114288, 160693 114009, 160692 110876), (160692 115886, 160971 115693, 164104 115692, 164298 115982, 164298 119104, 164008 119298, 160886 119298, 160693 119019, 160692 115886), (160692 120896, 160971 120703, 164104 120702, 164298 120992, 164298 124114, 164008 124308, 160886 124308, 160693 124029, 160692 120896), (160692 125906, 160971 125713, 164104 125712, 164298 126002, 164298 129124, 164008 129318, 160886 129318, 160693 129039, 160692 125906), (160696 130928, 160754 130826, 160971 130723, 164103 130722, 164298 130980, 164298 134134, 164008 134328, 160886 134328, 160693 134049, 160696 130928), (160692 135926, 160971 135733, 164104 135732, 164298 136022, 164298 139144, 164008 139338, 160886 139338, 160693 139059, 160692 135926), (160692 140936, 160971 140743, 164104 140742, 164298 141032, 164298 144155, 164008 144349, 160886 144349, 160693 144070, 160692 140936), (160754 145857, 160971 145754, 164103 145753, 164298 146011, 164298 149165, 164008 149359, 160886 149359, 160693 149080, 160696 145959, 160754 145857), (160692 150957, 160971 150764, 164104 150763, 164298 151053, 164298 154175, 164008 154369, 160886 154369, 160693 154090, 160692 150957), (160692 155967, 160971 155774, 164104 155773, 164298 156063, 164298 159185, 164008 159379, 160886 159379, 160693 159100, 160692 155967), (160692 160977, 160971 160784, 164104 160783, 164298 161073, 164298 164195, 164008 164389, 160886 164389, 160693 164110, 160692 160977), (160692 165987, 160971 165794, 164104 165793, 164298 166083, 164298 169205, 164008 169399, 160886 169399, 160693 169120, 160692 165987), (160692 170997, 160971 170804, 164104 170803, 164298 171093, 164298 174215, 164008 174409, 160886 174409, 160693 174130, 160692 170997), (160692 176007, 160971 175814, 164104 175813, 164298 176103, 164298 179225, 164008 179419, 160886 179419, 160693 179140, 160692 176007), (160692 181017, 160971 180824, 164104 180823, 164298 181113, 164298 184235, 164008 184429, 160886 184429, 160693 184150, 160692 181017), (160692 186027, 160971 185834, 164104 185833, 164298 186123, 164298 188156, 164254 188271, 164018 188387, 160930 188240, 160769 188145, 160697 187989, 160692 186027), (165746 51728, 165982 51612, 169070 51759, 169231 51854, 169303 52010, 169308 53972, 169018 54166, 165896 54166, 165703 53887, 165702 51854, 165746 51728), (165702 55764, 165981 55571, 169114 55570, 169308 55860, 169308 58982, 169018 59176, 165896 59176, 165703 58897, 165702 55764), (165702 60774, 165981 60581, 169114 60580, 169308 60870, 169308 63992, 169018 64186, 165896 64186, 165703 63907, 165702 60774), (165702 65784, 165981 65591, 169114 65590, 169308 65880, 169308 69002, 169018 69196, 165896 69196, 165703 68917, 165702 65784), (165702 70794, 165981 70601, 169114 70600, 169308 70890, 169308 74012, 169018 74206, 165896 74206, 165703 73927, 165702 70794), (165702 75804, 165981 75611, 169114 75610, 169308 75900, 169308 79022, 169018 79216, 165896 79216, 165703 78937, 165702 75804), (165702 80814, 165981 80621, 169114 80620, 169308 80910, 169308 84032, 169018 84226, 165896 84226, 165703 83947, 165702 80814), (165981 85631, 169114 85630, 169308 85920, 169308 89042, 169018 89236, 165896 89236, 165703 88957, 165702 85824, 165981 85631), (165702 90834, 165981 90641, 169114 90640, 169308 90930, 169308 94052, 169018 94246, 165896 94246, 165703 93967, 165702 90834), (165706 95856, 165764 95754, 165981 95651, 169113 95650, 169308 95908, 169308 99064, 169018 99258, 165896 99258, 165703 98979, 165706 95856), (165702 100856, 165981 100663, 169114 100662, 169308 100952, 169308 104074, 169018 104268, 165896 104268, 165703 103989, 165702 100856), (165702 105866, 165981 105673, 169114 105672, 169308 105962, 169308 109084, 169018 109278, 165896 109278, 165703 108999, 165702 105866), (165702 110876, 165981 110683, 169114 110682, 169308 110972, 169308 114094, 169018 114288, 165896 114288, 165703 114009, 165702 110876), (165702 115886, 165981 115693, 169114 115692, 169308 115982, 169308 119104, 169018 119298, 165896 119298, 165703 119019, 165702 115886), (165702 120896, 165981 120703, 169114 120702, 169308 120992, 169308 124114, 169018 124308, 165896 124308, 165703 124029, 165702 120896), (165702 125906, 165981 125713, 169114 125712, 169308 126002, 169308 129124, 169018 129318, 165896 129318, 165703 129039, 165702 125906), (165706 130928, 165764 130826, 165981 130723, 169113 130722, 169308 130980, 169308 134134, 169018 134328, 165896 134328, 165703 134049, 165706 130928), (165702 135926, 165981 135733, 169114 135732, 169308 136022, 169308 139144, 169018 139338, 165896 139338, 165703 139059, 165702 135926), (165702 140936, 165981 140743, 169114 140742, 169308 141032, 169308 144155, 169018 144349, 165896 144349, 165703 144070, 165702 140936), (165706 145959, 165764 145857, 165981 145754, 169113 145753, 169308 146011, 169308 149165, 169018 149359, 165896 149359, 165703 149080, 165706 145959), (165981 150764, 169114 150763, 169308 151053, 169308 154175, 169018 154369, 165896 154369, 165703 154090, 165702 150957, 165981 150764), (165702 155967, 165981 155774, 169114 155773, 169308 156063, 169308 159185, 169018 159379, 165896 159379, 165703 159100, 165702 155967), (165702 160977, 165981 160784, 169114 160783, 169308 161073, 169308 164195, 169018 164389, 165896 164389, 165703 164110, 165702 160977), (165702 165987, 165981 165794, 169114 165793, 169308 166083, 169308 169205, 169018 169399, 165896 169399, 165703 169120, 165702 165987), (165981 170804, 169114 170803, 169308 171093, 169308 174215, 169018 174409, 165896 174409, 165703 174130, 165702 170997, 165981 170804), (165702 176007, 165981 175814, 169114 175813, 169308 176103, 169308 179225, 169018 179419, 165896 179419, 165703 179140, 165702 176007), (165702 181017, 165981 180824, 169114 180823, 169308 181113, 169308 184235, 169018 184429, 165896 184429, 165703 184150, 165702 181017), (165702 186027, 165981 185834, 169114 185833, 169308 186123, 169308 188030, 169059 188235, 165962 188391, 165789 188309, 165703 188113, 165702 186027), (170712 52090, 170759 51970, 170992 51858, 171714 51890, 174101 52244, 174251 52354, 174313 52488, 174318 53972, 174028 54166, 170906 54166, 170713 53887, 170712 52090), (170712 55764, 170991 55571, 174124 55570, 174318 55860, 174318 58982, 174028 59176, 170906 59176, 170713 58897, 170712 55764), (170712 60774, 170991 60581, 174124 60580, 174318 60870, 174318 63992, 174028 64186, 170906 64186, 170713 63907, 170712 60774), (170712 65784, 170991 65591, 174124 65590, 174318 65880, 174318 69002, 174028 69196, 170906 69196, 170713 68917, 170712 65784), (170712 70794, 170991 70601, 174124 70600, 174318 70890, 174318 74012, 174028 74206, 170906 74206, 170713 73927, 170712 70794), (170712 75804, 170991 75611, 174124 75610, 174318 75900, 174318 79022, 174028 79216, 170906 79216, 170713 78937, 170712 75804), (170712 80814, 170991 80621, 174124 80620, 174318 80910, 174318 84032, 174028 84226, 170906 84226, 170713 83947, 170712 80814), (170712 85824, 170991 85631, 174124 85630, 174318 85920, 174318 89042, 174028 89236, 170906 89236, 170713 88957, 170712 85824), (170712 90834, 170991 90641, 174124 90640, 174318 90930, 174318 94052, 174028 94246, 170906 94246, 170713 93967, 170712 90834), (170716 95856, 170774 95754, 170991 95651, 174123 95650, 174318 95908, 174318 99064, 174028 99258, 170906 99258, 170713 98979, 170716 95856), (170712 100856, 170991 100663, 174124 100662, 174318 100952, 174318 104074, 174028 104268, 170906 104268, 170713 103989, 170712 100856), (170712 105866, 170991 105673, 174124 105672, 174318 105962, 174318 109084, 174028 109278, 170906 109278, 170713 108999, 170712 105866), (170712 110876, 170991 110683, 174124 110682, 174318 110972, 174318 114094, 174028 114288, 170906 114288, 170713 114009, 170712 110876), (170712 115886, 170991 115693, 174124 115692, 174318 115982, 174318 119104, 174028 119298, 170906 119298, 170713 119019, 170712 115886), (170712 120896, 170991 120703, 174124 120702, 174318 120992, 174318 124114, 174028 124308, 170906 124308, 170713 124029, 170712 120896), (170712 125906, 170991 125713, 174124 125712, 174318 126002, 174318 129124, 174028 129318, 170906 129318, 170713 129039, 170712 125906), (170716 130928, 170774 130826, 170991 130723, 174123 130722, 174318 130980, 174318 134134, 174028 134328, 170906 134328, 170713 134049, 170716 130928), (170712 135926, 170991 135733, 174124 135732, 174318 136022, 174318 139144, 174028 139338, 170906 139338, 170713 139059, 170712 135926), (170712 140936, 170991 140743, 174124 140742, 174318 141032, 174318 144155, 174028 144349, 170906 144349, 170713 144070, 170712 140936), (170716 145959, 170774 145857, 170991 145754, 174123 145753, 174318 146011, 174318 149165, 174028 149359, 170906 149359, 170713 149080, 170716 145959), (170712 150957, 170991 150764, 174124 150763, 174318 151053, 174318 154175, 174028 154369, 170906 154369, 170713 154090, 170712 150957), (170712 155967, 170991 155774, 174124 155773, 174318 156063, 174318 159185, 174028 159379, 170906 159379, 170713 159100, 170712 155967), (170712 160977, 170991 160784, 174124 160783, 174318 161073, 174318 164195, 174028 164389, 170906 164389, 170713 164110, 170712 160977), (170991 165794, 174124 165793, 174318 166083, 174318 169205, 174028 169399, 170906 169399, 170713 169120, 170712 165987, 170991 165794), (170712 170997, 170991 170804, 174124 170803, 174318 171093, 174318 174215, 174028 174409, 170906 174409, 170713 174130, 170712 170997), (170991 175814, 174124 175813, 174318 176103, 174318 179225, 174028 179419, 170906 179419, 170713 179140, 170712 176007, 170991 175814), (170712 181017, 170991 180824, 174124 180823, 174318 181113, 174318 184235, 174028 184429, 170906 184429, 170713 184150, 170712 181017), (170712 186027, 170991 185834, 174124 185833, 174318 186123, 174315 187545, 174098 187752, 171714 188109, 170972 188145, 170803 188067, 170714 187877, 170712 186027), (175728 52718, 175781 52626, 176030 52534, 178359 52877, 179100 53062, 179286 53230, 179300 54005, 179118 54166, 175916 54166, 175723 53887, 175728 52718), (175722 55764, 176001 55571, 179098 55570, 179225 55633, 179328 55860, 179328 58982, 179038 59176, 175916 59176, 175723 58897, 175722 55764), (175722 60774, 176001 60581, 179134 60580, 179328 60870, 179328 63992, 179038 64186, 175916 64186, 175723 63907, 175722 60774), (175722 65784, 176001 65591, 179134 65590, 179328 65880, 179328 69002, 179038 69196, 175916 69196, 175723 68917, 175722 65784), (175722 70794, 176001 70601, 179134 70600, 179328 70890, 179328 74012, 179038 74206, 175916 74206, 175723 73927, 175722 70794), (175722 75804, 176001 75611, 179134 75610, 179328 75900, 179328 79022, 179038 79216, 175916 79216, 175723 78937, 175722 75804), (175722 80814, 176001 80621, 179134 80620, 179328 80910, 179328 84032, 179038 84226, 175916 84226, 175723 83947, 175722 80814), (175722 85824, 176001 85631, 179134 85630, 179328 85920, 179328 89042, 179038 89236, 175916 89236, 175723 88957, 175722 85824), (175722 90834, 176001 90641, 179134 90640, 179328 90930, 179328 94052, 179038 94246, 175916 94246, 175723 93967, 175722 90834), (175726 95856, 175784 95754, 176001 95651, 179133 95650, 179328 95908, 179328 99064, 179038 99258, 175916 99258, 175723 98979, 175726 95856), (175722 100856, 176001 100663, 179134 100662, 179328 100952, 179328 104074, 179038 104268, 175916 104268, 175723 103989, 175722 100856), (175722 105866, 176001 105673, 179134 105672, 179328 105962, 179328 109084, 179038 109278, 175916 109278, 175723 108999, 175722 105866), (175722 110876, 176001 110683, 179134 110682, 179328 110972, 179328 114094, 179038 114288, 175916 114288, 175723 114009, 175722 110876), (175722 115886, 176001 115693, 179134 115692, 179328 115982, 179328 119104, 179038 119298, 175916 119298, 175723 119019, 175722 115886), (175722 120896, 176001 120703, 179134 120702, 179328 120992, 179328 124114, 179038 124308, 175916 124308, 175723 124029, 175722 120896), (175722 125906, 176001 125713, 179134 125712, 179328 126002, 179328 129124, 179038 129318, 175916 129318, 175723 129039, 175722 125906), (175726 130928, 175784 130826, 176001 130723, 179133 130722, 179328 130980, 179328 134134, 179038 134328, 175916 134328, 175723 134049, 175726 130928), (175722 135926, 176001 135733, 179134 135732, 179328 136022, 179328 139144, 179038 139338, 175916 139338, 175723 139059, 175722 135926), (175722 140936, 176001 140743, 179134 140742, 179328 141032, 179328 144155, 179038 144349, 175916 144349, 175723 144070, 175722 140936), (175726 145959, 175784 145857, 176001 145754, 179133 145753, 179328 146011, 179328 149165, 179038 149359, 175916 149359, 175723 149080, 175726 145959), (175722 150957, 176001 150764, 179134 150763, 179328 151053, 179328 154175, 179038 154369, 175916 154369, 175723 154090, 175722 150957), (175722 155967, 176001 155774, 179134 155773, 179328 156063, 179328 159185, 179038 159379, 175916 159379, 175723 159100, 175722 155967), (175722 160977, 176001 160784, 179134 160783, 179328 161073, 179328 164195, 179038 164389, 175916 164389, 175723 164110, 175722 160977), (175722 165987, 176001 165794, 179134 165793, 179328 166083, 179328 169205, 179038 169399, 175916 169399, 175723 169120, 175722 165987), (175722 170997, 176001 170804, 179134 170803, 179328 171093, 179328 174215, 179038 174409, 175916 174409, 175723 174130, 175722 170997), (175722 176007, 176001 175814, 179134 175813, 179328 176103, 179328 179225, 179038 179419, 175916 179419, 175723 179140, 175722 176007), (175722 181017, 176001 180824, 179134 180823, 179328 181113, 179328 184235, 179038 184429, 175916 184429, 175723 184150, 175722 181017), (175722 186027, 176001 185834, 179134 185833, 179324 186092, 179286 186769, 179133 186926, 178359 187122, 176003 187472, 175826 187410, 175725 187201, 175722 186027), (180732 55760, 180981 55576, 184137 55575, 184238 55636, 184338 55860, 184338 58982, 184048 59176, 180926 59176, 180733 58897, 180732 55760), (180732 60774, 181011 60581, 184144 60580, 184338 60870, 184338 63992, 184048 64186, 180926 64186, 180733 63907, 180732 60774), (180732 65784, 181011 65591, 184144 65590, 184338 65880, 184338 69002, 184048 69196, 180926 69196, 180733 68917, 180732 65784), (180732 70794, 181011 70601, 184144 70600, 184338 70890, 184338 74012, 184048 74206, 180926 74206, 180733 73927, 180732 70794), (180732 75804, 181011 75611, 184144 75610, 184338 75900, 184338 79022, 184048 79216, 180926 79216, 180733 78937, 180732 75804), (180732 80814, 181011 80621, 184144 80620, 184338 80910, 184338 84032, 184048 84226, 180926 84226, 180733 83947, 180732 80814), (180732 85824, 181011 85631, 184144 85630, 184338 85920, 184338 89042, 184048 89236, 180926 89236, 180733 88957, 180732 85824), (180732 90834, 181011 90641, 184144 90640, 184338 90930, 184338 94052, 184048 94246, 180926 94246, 180733 93967, 180732 90834), (180736 95856, 180794 95754, 181011 95651, 184143 95650, 184338 95908, 184338 99064, 184048 99258, 180926 99258, 180733 98979, 180736 95856), (180732 100856, 181011 100663, 184144 100662, 184338 100952, 184338 104074, 184048 104268, 180926 104268, 180733 103989, 180732 100856), (180732 105866, 181011 105673, 184144 105672, 184338 105962, 184338 109084, 184048 109278, 180926 109278, 180733 108999, 180732 105866), (180732 110876, 181011 110683, 184144 110682, 184338 110972, 184338 114094, 184048 114288, 180926 114288, 180733 114009, 180732 110876), (180732 115886, 181011 115693, 184144 115692, 184338 115982, 184338 119104, 184048 119298, 180926 119298, 180733 119019, 180732 115886), (180732 120896, 181011 120703, 184144 120702, 184338 120992, 184338 124114, 184048 124308, 180926 124308, 180733 124029, 180732 120896), (180732 125906, 181011 125713, 184144 125712, 184338 126002, 184338 129124, 184048 129318, 180926 129318, 180733 129039, 180732 125906), (180736 130928, 180794 130826, 181011 130723, 184143 130722, 184338 130980, 184338 134134, 184048 134328, 180926 134328, 180733 134049, 180736 130928), (180732 135926, 181011 135733, 184144 135732, 184338 136022, 184338 139144, 184048 139338, 180926 139338, 180733 139059, 180732 135926), (180732 140936, 181011 140743, 184144 140742, 184338 141032, 184338 144155, 184048 144349, 180926 144349, 180733 144070, 180732 140936), (180736 145959, 180794 145857, 181011 145754, 184143 145753, 184338 146011, 184338 149165, 184048 149359, 180926 149359, 180733 149080, 180736 145959), (180732 150957, 181011 150764, 184144 150763, 184338 151053, 184338 154175, 184048 154369, 180926 154369, 180733 154090, 180732 150957), (180732 155967, 181011 155774, 184144 155773, 184338 156063, 184338 159185, 184048 159379, 180926 159379, 180733 159100, 180732 155967), (180732 160977, 181011 160784, 184144 160783, 184338 161073, 184338 164195, 184048 164389, 180926 164389, 180733 164110, 180732 160977), (180732 165987, 181011 165794, 184144 165793, 184338 166083, 184338 169205, 184048 169399, 180926 169399, 180733 169120, 180732 165987), (180732 170997, 181011 170804, 184144 170803, 184338 171093, 184338 174215, 184048 174409, 180926 174409, 180733 174130, 180732 170997), (180732 176007, 181011 175814, 184144 175813, 184338 176103, 184338 179225, 184048 179419, 180926 179419, 180733 179140, 180732 176007), (180732 181017, 181011 180824, 184144 180823, 184338 181113, 184338 184191, 184280 184321, 184085 184424, 180945 184426, 180836 184367, 180733 184150, 180732 181017), (185742 55761, 185827 55655, 186045 55570, 187853 55578, 189152 56040, 189350 56283, 189349 58980, 189287 59072, 189059 59176, 185936 59176, 185743 58897, 185742 55761), (185742 60774, 186021 60581, 189155 60580, 189349 60870, 189349 63992, 189059 64186, 185936 64186, 185743 63907, 185742 60774), (185742 65784, 186021 65591, 189155 65590, 189349 65880, 189349 69002, 189059 69196, 185936 69196, 185743 68917, 185742 65784), (185742 70794, 186021 70601, 189155 70600, 189349 70890, 189349 74012, 189059 74206, 185936 74206, 185743 73927, 185742 70794), (185742 75804, 186021 75611, 189155 75610, 189349 75900, 189349 79022, 189059 79216, 185936 79216, 185743 78937, 185742 75804), (185742 80814, 186021 80621, 189155 80620, 189349 80910, 189349 84032, 189059 84226, 185936 84226, 185743 83947, 185742 80814), (185742 85824, 186021 85631, 189155 85630, 189349 85920, 189349 89042, 189059 89236, 185936 89236, 185743 88957, 185742 85824), (185742 90834, 186021 90641, 189155 90640, 189349 90930, 189349 94052, 189059 94246, 185936 94246, 185743 93967, 185742 90834), (185746 95856, 185804 95754, 186021 95651, 189154 95650, 189349 95908, 189349 99064, 189059 99258, 185936 99258, 185743 98979, 185746 95856), (185742 100856, 186021 100663, 189155 100662, 189349 100952, 189349 104074, 189059 104268, 185936 104268, 185743 103989, 185742 100856), (185742 105866, 186021 105673, 189155 105672, 189349 105962, 189349 109084, 189059 109278, 185936 109278, 185743 108999, 185742 105866), (185742 110876, 186021 110683, 189155 110682, 189349 110972, 189349 114094, 189059 114288, 185936 114288, 185743 114009, 185742 110876), (185742 115886, 186021 115693, 189155 115692, 189349 115982, 189349 119104, 189059 119298, 185936 119298, 185743 119019, 185742 115886), (185742 120896, 186021 120703, 189155 120702, 189349 120992, 189349 124114, 189059 124308, 185936 124308, 185743 124029, 185742 120896), (185742 125906, 186021 125713, 189155 125712, 189349 126002, 189349 129124, 189059 129318, 185936 129318, 185743 129039, 185742 125906), (185746 130928, 185804 130826, 186021 130723, 189154 130722, 189349 130980, 189349 134134, 189059 134328, 185936 134328, 185743 134049, 185746 130928), (185742 135926, 186021 135733, 189155 135732, 189349 136022, 189349 139144, 189059 139338, 185936 139338, 185743 139059, 185742 135926), (185742 140936, 186021 140743, 189155 140742, 189349 141032, 189349 144155, 189059 144349, 185936 144349, 185743 144070, 185742 140936), (185746 145959, 185804 145857, 186021 145754, 189154 145753, 189349 146011, 189349 149165, 189059 149359, 185936 149359, 185743 149080, 185746 145959), (185742 150957, 186021 150764, 189155 150763, 189349 151053, 189349 154175, 189059 154369, 185936 154369, 185743 154090, 185742 150957), (185742 155967, 186021 155774, 189155 155773, 189349 156063, 189349 159185, 189059 159379, 185936 159379, 185743 159100, 185742 155967), (185742 160977, 186021 160784, 189155 160783, 189349 161073, 189349 164195, 189059 164389, 185936 164389, 185743 164110, 185742 160977), (185742 165987, 186021 165794, 189155 165793, 189349 166083, 189349 169205, 189059 169399, 185936 169399, 185743 169120, 185742 165987), (185742 170997, 186021 170804, 189155 170803, 189349 171093, 189349 174215, 189059 174409, 185936 174409, 185743 174130, 185742 170997), (185742 176007, 186021 175814, 189155 175813, 189349 176103, 189349 179225, 189059 179419, 185936 179419, 185743 179140, 185742 176007), (185742 181017, 186021 180824, 189155 180823, 189349 181116, 189349 183715, 189183 183944, 187857 184423, 185891 184429, 185743 184150, 185742 181017), (190751 181016, 191032 180824, 194172 180823, 194295 180947, 194359 181520, 194218 181795, 191186 183231, 190954 183227, 190779 183132, 190751 181016), (190775 57044, 190923 56771, 191095 56725, 194188 58187, 194329 58352, 194330 59018, 194149 59176, 190942 59176, 190754 58898, 190775 57044), (190753 60771, 191031 60581, 194129 60580, 194256 60643, 194359 60870, 194359 63992, 194069 64186, 190947 64186, 190754 63907, 190753 60771), (190753 65784, 191032 65591, 194165 65590, 194359 65880, 194359 69002, 194069 69196, 190947 69196, 190754 68917, 190753 65784), (190753 70794, 191032 70601, 194165 70600, 194359 70890, 194359 74012, 194069 74206, 190947 74206, 190754 73927, 190753 70794), (190753 75804, 191032 75611, 194165 75610, 194359 75900, 194359 79022, 194069 79216, 190947 79216, 190754 78937, 190753 75804), (190753 80814, 191032 80621, 194165 80620, 194359 80910, 194359 84032, 194069 84226, 190947 84226, 190754 83947, 190753 80814), (190753 85824, 191032 85631, 194165 85630, 194359 85920, 194359 89042, 194069 89236, 190947 89236, 190754 88957, 190753 85824), (190753 90834, 191032 90641, 194165 90640, 194359 90930, 194359 94052, 194069 94246, 190947 94246, 190754 93967, 190753 90834), (190757 95856, 190815 95754, 191032 95651, 194164 95650, 194359 95908, 194359 99064, 194069 99258, 190947 99258, 190754 98979, 190757 95856), (191032 100663, 194165 100662, 194359 100952, 194359 104074, 194069 104268, 190947 104268, 190754 103989, 190753 100856, 191032 100663), (190753 105866, 191032 105673, 194165 105672, 194359 105962, 194359 109084, 194069 109278, 190947 109278, 190754 108999, 190753 105866), (190753 110876, 191032 110683, 194165 110682, 194359 110972, 194359 114094, 194069 114288, 190947 114288, 190754 114009, 190753 110876), (190753 115886, 191032 115693, 194165 115692, 194359 115982, 194359 119104, 194069 119298, 190947 119298, 190754 119019, 190753 115886), (190753 120896, 191032 120703, 194165 120702, 194359 120992, 194359 124114, 194069 124308, 190947 124308, 190754 124029, 190753 120896), (190753 125906, 191032 125713, 194165 125712, 194359 126002, 194359 129124, 194069 129318, 190947 129318, 190754 129039, 190753 125906), (190757 130928, 190815 130826, 191032 130723, 194164 130722, 194359 130980, 194359 134134, 194069 134328, 190947 134328, 190754 134049, 190757 130928), (190753 135926, 191032 135733, 194165 135732, 194359 136022, 194359 139144, 194069 139338, 190947 139338, 190754 139059, 190753 135926), (190753 140936, 191032 140743, 194165 140742, 194359 141032, 194359 144155, 194069 144349, 190947 144349, 190754 144070, 190753 140936), (190757 145959, 190815 145857, 191032 145754, 194164 145753, 194359 146011, 194359 149165, 194069 149359, 190947 149359, 190754 149080, 190757 145959), (190753 150957, 191032 150764, 194165 150763, 194359 151053, 194359 154175, 194069 154369, 190947 154369, 190754 154090, 190753 150957), (190753 155967, 191032 155774, 194165 155773, 194359 156063, 194359 159185, 194069 159379, 190947 159379, 190754 159100, 190753 155967), (190753 160977, 191032 160784, 194165 160783, 194359 161073, 194359 164195, 194069 164389, 190947 164389, 190754 164110, 190753 160977), (190753 165987, 191032 165794, 194165 165793, 194359 166083, 194359 169205, 194069 169399, 190947 169399, 190754 169120, 190753 165987), (190753 170997, 191032 170804, 194165 170803, 194359 171093, 194359 174215, 194069 174409, 190947 174409, 190754 174130, 190753 170997), (190753 176007, 191032 175814, 194165 175813, 194359 176103, 194359 179225, 194069 179419, 190945 179419, 190754 179140, 190753 176007), (195763 60770, 196009 60587, 198830 60580, 199289 60913, 199369 61074, 199369 63992, 199079 64186, 195957 64186, 195764 63907, 195763 60770), (195763 65784, 196042 65591, 199175 65590, 199369 65880, 199369 69002, 199079 69196, 195957 69196, 195764 68917, 195763 65784), (195763 70794, 196042 70601, 199175 70600, 199369 70890, 199369 74012, 199079 74206, 195957 74206, 195764 73927, 195763 70794), (195763 75804, 196042 75611, 199175 75610, 199369 75900, 199369 79022, 199079 79216, 195957 79216, 195764 78937, 195763 75804), (195763 80814, 196042 80621, 199175 80620, 199369 80910, 199369 84032, 199079 84226, 195957 84226, 195764 83947, 195763 80814), (195763 85824, 196042 85631, 199175 85630, 199369 85920, 199369 89042, 199079 89236, 195957 89236, 195764 88957, 195763 85824), (195763 90834, 196042 90641, 199175 90640, 199369 90930, 199369 94052, 199079 94246, 195957 94246, 195764 93967, 195763 90834), (195767 95856, 195825 95754, 196042 95651, 199174 95650, 199369 95908, 199369 99064, 199079 99258, 195957 99258, 195764 98979, 195767 95856), (195763 100856, 196042 100663, 199175 100662, 199369 100952, 199369 104074, 199079 104268, 195957 104268, 195764 103989, 195763 100856), (195763 105866, 196042 105673, 199175 105672, 199369 105962, 199369 109084, 199079 109278, 195957 109278, 195764 108999, 195763 105866), (195763 110876, 196042 110683, 199175 110682, 199369 110972, 199369 114094, 199079 114288, 195957 114288, 195764 114009, 195763 110876), (195763 115886, 196042 115693, 199175 115692, 199369 115982, 199369 119104, 199079 119298, 195957 119298, 195764 119019, 195763 115886), (195763 120896, 196042 120703, 199175 120702, 199369 120992, 199369 124114, 199079 124308, 195957 124308, 195764 124029, 195763 120896), (195763 125906, 196042 125713, 199175 125712, 199369 126002, 199369 129124, 199079 129318, 195957 129318, 195764 129039, 195763 125906), (195767 130928, 195825 130826, 196042 130723, 199174 130722, 199369 130980, 199369 134134, 199079 134328, 195957 134328, 195764 134049, 195767 130928), (195763 135926, 196042 135733, 199175 135732, 199369 136022, 199369 139144, 199079 139338, 195957 139338, 195764 139059, 195763 135926), (195763 140936, 196042 140743, 199175 140742, 199369 141032, 199369 144155, 199079 144349, 195957 144349, 195764 144070, 195763 140936), (195767 145959, 195825 145857, 196042 145754, 199174 145753, 199369 146011, 199369 149165, 199079 149359, 195957 149359, 195764 149080, 195767 145959), (195763 150957, 196042 150764, 199175 150763, 199369 151053, 199369 154175, 199079 154369, 195957 154369, 195764 154090, 195763 150957), (195763 155967, 196042 155774, 199175 155773, 199369 156063, 199369 159185, 199079 159379, 195957 159379, 195764 159100, 195763 155967), (195763 160977, 196042 160784, 199175 160783, 199369 161073, 199369 164195, 199079 164389, 195957 164389, 195764 164110, 195763 160977), (195763 165987, 196042 165794, 199175 165793, 199369 166083, 199369 169205, 199079 169399, 195957 169399, 195764 169120, 195763 165987), (195763 170997, 196042 170804, 199175 170803, 199369 171093, 199369 174215, 199079 174409, 195957 174409, 195764 174130, 195763 170997), (195763 176007, 196042 175814, 199175 175813, 199369 176103, 199369 178925, 199300 179077, 198841 179419, 195983 179417, 195850 179336, 195764 179140, 195763 176007), (200954 61981, 201132 61964, 203025 63096, 203835 63699, 203884 63885, 203815 64106, 203689 64183, 200967 64186, 200774 63907, 200773 62276, 200954 61981), (200773 65784, 201052 65591, 204188 65590, 204379 65880, 204379 69002, 204089 69196, 200967 69196, 200774 68917, 200773 65784), (200773 70794, 201052 70601, 204185 70600, 204379 70890, 204379 74012, 204089 74206, 200967 74206, 200774 73927, 200773 70794), (200773 75804, 201052 75611, 204185 75610, 204379 75900, 204379 79022, 204089 79216, 200967 79216, 200774 78937, 200773 75804), (200773 80814, 201052 80621, 204185 80620, 204379 80910, 204379 84032, 204089 84226, 200967 84226, 200774 83947, 200773 80814), (200773 85824, 201052 85631, 204185 85630, 204379 85920, 204379 89042, 204089 89236, 200967 89236, 200774 88957, 200773 85824), (200773 90834, 201052 90641, 204185 90640, 204379 90930, 204379 94052, 204089 94246, 200967 94246, 200774 93967, 200773 90834), (200777 95856, 200835 95754, 201052 95651, 204184 95650, 204379 95908, 204379 99064, 204089 99258, 200967 99258, 200774 98979, 200777 95856), (200773 100856, 201052 100663, 204185 100662, 204379 100952, 204379 104074, 204089 104268, 200967 104268, 200774 103989, 200773 100856), (200773 105866, 201052 105673, 204185 105672, 204379 105962, 204379 109084, 204089 109278, 200967 109278, 200774 108999, 200773 105866), (200773 110876, 201052 110683, 204185 110682, 204379 110972, 204379 114094, 204089 114288, 200967 114288, 200774 114009, 200773 110876), (200773 115886, 201052 115693, 204185 115692, 204379 115982, 204379 119104, 204089 119298, 200967 119298, 200774 119019, 200773 115886), (200773 120896, 201052 120703, 204185 120702, 204379 120992, 204379 124114, 204089 124308, 200967 124308, 200774 124029, 200773 120896), (200773 125906, 201052 125713, 204185 125712, 204379 126002, 204379 129124, 204089 129318, 200967 129318, 200774 129039, 200773 125906), (200777 130928, 200835 130826, 201052 130723, 204184 130722, 204379 130980, 204379 134134, 204089 134328, 200967 134328, 200774 134049, 200777 130928), (200773 135926, 201052 135733, 204185 135732, 204379 136022, 204379 139144, 204089 139338, 200967 139338, 200774 139059, 200773 135926), (200773 140936, 201052 140743, 204185 140742, 204379 141032, 204379 144155, 204089 144349, 200967 144349, 200774 144070, 200773 140936), (200777 145959, 200835 145857, 201052 145754, 204184 145753, 204379 146011, 204379 149165, 204089 149359, 200967 149359, 200774 149080, 200777 145959), (200773 150957, 201052 150764, 204185 150763, 204379 151053, 204379 154175, 204089 154369, 200967 154369, 200774 154090, 200773 150957), (200773 155967, 201052 155774, 204185 155773, 204379 156063, 204379 159185, 204089 159379, 200967 159379, 200774 159100, 200773 155967), (200773 160977, 201052 160784, 204185 160783, 204379 161073, 204379 164195, 204089 164389, 200967 164389, 200774 164110, 200773 160977), (200773 165987, 201052 165794, 204185 165793, 204379 166083, 204379 169205, 204089 169399, 200967 169399, 200774 169120, 200773 165987), (200773 170997, 201052 170804, 204185 170803, 204379 171093, 204379 174255, 204128 174403, 200967 174409, 200774 174130, 200773 170997), (200773 176007, 201052 175814, 203708 175813, 203811 175908, 203900 176185, 203822 176312, 203018 176908, 201228 177981, 200881 177976, 200776 177833, 200773 176007), (205783 65785, 205840 65699, 206101 65590, 206437 65631, 208427 67103, 209390 67980, 209389 69007, 209099 69196, 205977 69196, 205784 68917, 205783 65785), (205783 70794, 206062 70601, 209195 70600, 209389 70890, 209389 74012, 209099 74206, 205977 74206, 205784 73927, 205783 70794), (205783 75804, 206062 75611, 209195 75610, 209389 75900, 209389 79022, 209099 79216, 205977 79216, 205784 78937, 205783 75804), (205783 80814, 206062 80621, 209195 80620, 209389 80910, 209389 84032, 209099 84226, 205977 84226, 205784 83947, 205783 80814), (205783 85824, 206062 85631, 209195 85630, 209389 85920, 209389 89042, 209099 89236, 205977 89236, 205784 88957, 205783 85824), (205783 90834, 206062 90641, 209195 90640, 209389 90930, 209389 94052, 209099 94246, 205977 94246, 205784 93967, 205783 90834), (205787 95856, 205845 95754, 206062 95651, 209194 95650, 209389 95908, 209389 99064, 209099 99258, 205977 99258, 205784 98979, 205787 95856), (205783 100856, 206062 100663, 209195 100662, 209389 100952, 209389 104074, 209099 104268, 205977 104268, 205784 103989, 205783 100856), (205783 105866, 206062 105673, 209195 105672, 209389 105962, 209389 109084, 209099 109278, 205977 109278, 205784 108999, 205783 105866), (205783 110876, 206062 110683, 209195 110682, 209389 110972, 209389 114094, 209099 114288, 205977 114288, 205784 114009, 205783 110876), (205783 115886, 206062 115693, 209195 115692, 209389 115982, 209389 119104, 209099 119298, 205977 119298, 205784 119019, 205783 115886), (206062 120703, 209195 120702, 209389 120992, 209389 124114, 209099 124308, 205977 124308, 205784 124029, 205783 120896, 206062 120703), (205783 125906, 206062 125713, 209195 125712, 209389 126002, 209389 129124, 209099 129318, 205977 129318, 205784 129039, 205783 125906), (205787 130928, 205845 130826, 206062 130723, 209194 130722, 209389 130980, 209389 134134, 209099 134328, 205977 134328, 205784 134049, 205787 130928), (205783 135926, 206062 135733, 209195 135732, 209389 136022, 209389 139144, 209099 139338, 205977 139338, 205784 139059, 205783 135926), (205783 140936, 206062 140743, 209195 140742, 209389 141032, 209389 144155, 209099 144349, 205977 144349, 205784 144070, 205783 140936), (205787 145959, 205845 145857, 206062 145754, 209194 145753, 209389 146011, 209389 149165, 209099 149359, 205977 149359, 205784 149080, 205787 145959), (205783 150957, 206062 150764, 209195 150763, 209389 151053, 209389 154175, 209099 154369, 205977 154369, 205784 154090, 205783 150957), (205783 155967, 206062 155774, 209195 155773, 209389 156063, 209389 159185, 209099 159379, 205977 159379, 205784 159100, 205783 155967), (205783 160977, 206062 160784, 209195 160783, 209389 161073, 209389 164195, 209099 164389, 205977 164389, 205784 164110, 205783 160977), (205783 165987, 206062 165794, 209195 165793, 209389 166083, 209389 169205, 209099 169399, 205977 169399, 205784 169120, 205783 165987), (205783 170997, 206062 170804, 209195 170803, 209389 171060, 209390 171934, 209324 172082, 208413 172908, 206467 174350, 205863 174347, 205783 174201, 205783 170997), (210793 70794, 211050 70600, 212280 70600, 213381 71593, 214400 72719, 214399 74017, 214109 74206, 210987 74206, 210794 73927, 210793 70794), (210793 75804, 211072 75611, 214205 75610, 214399 75900, 214399 79022, 214109 79216, 210987 79216, 210794 78937, 210793 75804), (210793 80814, 211072 80621, 214205 80620, 214399 80910, 214399 84032, 214109 84226, 210987 84226, 210794 83947, 210793 80814), (210793 85824, 211072 85631, 214205 85630, 214399 85920, 214399 89042, 214109 89236, 210987 89236, 210794 88957, 210793 85824), (210793 90834, 211072 90641, 214205 90640, 214399 90930, 214399 94052, 214109 94246, 210987 94246, 210794 93967, 210793 90834), (210797 95856, 210855 95754, 211072 95651, 214204 95650, 214399 95908, 214399 99064, 214109 99258, 210987 99258, 210794 98979, 210797 95856), (210793 100856, 211072 100663, 214205 100662, 214399 100952, 214399 104074, 214109 104268, 210987 104268, 210794 103989, 210793 100856), (210793 105866, 211072 105673, 214205 105672, 214399 105962, 214399 109084, 214109 109278, 210987 109278, 210794 108999, 210793 105866), (210793 110876, 211072 110683, 214205 110682, 214399 110972, 214399 114094, 214109 114288, 210987 114288, 210794 114009, 210793 110876), (210793 115886, 211072 115693, 214205 115692, 214399 115982, 214399 119104, 214109 119298, 210987 119298, 210794 119019, 210793 115886), (210793 120896, 211072 120703, 214205 120702, 214399 120992, 214399 124114, 214109 124308, 210987 124308, 210794 124029, 210793 120896), (210793 125906, 211072 125713, 214205 125712, 214399 126002, 214399 129124, 214109 129318, 210987 129318, 210794 129039, 210793 125906), (210797 130928, 210855 130826, 211072 130723, 214204 130722, 214399 130980, 214399 134134, 214109 134328, 210987 134328, 210794 134049, 210797 130928), (210793 135926, 211072 135733, 214205 135732, 214399 136022, 214399 139144, 214109 139338, 210987 139338, 210794 139059, 210793 135926), (210793 140936, 211072 140743, 214205 140742, 214399 141032, 214399 144155, 214109 144349, 210987 144349, 210794 144070, 210793 140936), (210797 145959, 210855 145857, 211072 145754, 214204 145753, 214399 146011, 214399 149165, 214109 149359, 210987 149359, 210794 149080, 210797 145959), (210793 150957, 211072 150764, 214205 150763, 214399 151053, 214399 154175, 214109 154369, 210987 154369, 210794 154090, 210793 150957), (210793 155967, 211072 155774, 214205 155773, 214399 156063, 214399 159185, 214109 159379, 210987 159379, 210794 159100, 210793 155967), (210793 160977, 211072 160784, 214205 160783, 214399 161073, 214399 164195, 214109 164389, 210987 164389, 210794 164110, 210793 160977), (210793 165987, 211072 165794, 214205 165793, 214399 166050, 214399 167206, 214348 167341, 213392 168395, 212341 169348, 212206 169399, 210982 169399, 210794 169120, 210793 165987), (215803 75804, 216060 75610, 217019 75610, 217910 76588, 219350 78532, 219347 79136, 219201 79216, 215997 79216, 215804 78937, 215803 75804), (215803 80814, 216082 80621, 219255 80620, 219403 80871, 219409 84032, 219119 84226, 215997 84226, 215804 83947, 215803 80814), (215803 85824, 216082 85631, 219215 85630, 219409 85920, 219409 89042, 219119 89236, 215997 89236, 215804 88957, 215803 85824), (215803 90834, 216082 90641, 219215 90640, 219409 90930, 219409 94052, 219119 94246, 215997 94246, 215804 93967, 215803 90834), (215807 95856, 215865 95754, 216082 95651, 219214 95650, 219409 95908, 219409 99064, 219119 99258, 215997 99258, 215804 98979, 215807 95856), (215803 100856, 216082 100663, 219215 100662, 219409 100952, 219409 104074, 219119 104268, 215997 104268, 215804 103989, 215803 100856), (215803 105866, 216082 105673, 219215 105672, 219409 105962, 219409 109084, 219119 109278, 215997 109278, 215804 108999, 215803 105866), (215803 110876, 216082 110683, 219215 110682, 219409 110972, 219409 114094, 219119 114288, 215997 114288, 215804 114009, 215803 110876), (215803 115886, 216082 115693, 219215 115692, 219409 115982, 219409 119104, 219119 119298, 215997 119298, 215804 119019, 215803 115886), (215803 120896, 216082 120703, 219215 120702, 219409 120992, 219409 124114, 219119 124308, 215997 124308, 215804 124029, 215803 120896), (215803 125906, 216082 125713, 219215 125712, 219409 126002, 219409 129124, 219119 129318, 215997 129318, 215804 129039, 215803 125906), (215807 130928, 215865 130826, 216082 130723, 219214 130722, 219409 130980, 219409 134134, 219119 134328, 215997 134328, 215804 134049, 215807 130928), (215803 135926, 216082 135733, 219215 135732, 219409 136022, 219409 139144, 219119 139338, 215997 139338, 215804 139059, 215803 135926), (215803 140936, 216082 140743, 219215 140742, 219409 141032, 219409 144155, 219119 144349, 215997 144349, 215804 144070, 215803 140936), (215807 145959, 215865 145857, 216082 145754, 219214 145753, 219409 146011, 219409 149165, 219119 149359, 215997 149359, 215804 149080, 215807 145959), (215803 150957, 216082 150764, 219215 150763, 219409 151053, 219409 154175, 219119 154369, 215997 154369, 215804 154090, 215803 150957), (215803 155967, 216082 155774, 219215 155773, 219409 156063, 219410 159129, 219367 159254, 219119 159379, 215997 159379, 215804 159100, 215803 155967), (215803 160977, 216082 160784, 219214 160783, 219300 160840, 219409 161101, 219368 161437, 217903 163420, 217082 164324, 216934 164389, 215992 164389, 215804 164110, 215803 160977), (220813 81291, 220908 81188, 221185 81099, 221289 81152, 221905 81976, 222996 83801, 222976 84118, 222833 84223, 221007 84226, 220814 83947, 220813 81291), (220813 85824, 221092 85631, 223925 85630, 224077 85699, 224419 86158, 224417 89016, 224357 89132, 224129 89236, 221007 89236, 220814 88957, 220813 85824), (220813 90834, 221092 90641, 224225 90640, 224419 90930, 224419 94008, 224357 94142, 224129 94246, 221007 94246, 220814 93967, 220813 90834), (220817 95856, 220875 95754, 221092 95651, 224224 95650, 224419 95908, 224419 99064, 224129 99258, 221007 99258, 220814 98979, 220817 95856), (220813 100856, 221092 100663, 224225 100662, 224419 100952, 224419 104074, 224129 104268, 221007 104268, 220814 103989, 220813 100856), (220813 105866, 221092 105673, 224225 105672, 224419 105962, 224419 109084, 224129 109278, 221007 109278, 220814 108999, 220813 105866), (220813 110876, 221092 110683, 224225 110682, 224419 110972, 224419 114094, 224129 114288, 221007 114288, 220814 114009, 220813 110876), (220813 115886, 221092 115693, 224225 115692, 224419 115982, 224419 119104, 224129 119298, 221007 119298, 220814 119019, 220813 115886), (220813 120896, 221092 120703, 224225 120702, 224419 120992, 224419 124114, 224129 124308, 221007 124308, 220814 124029, 220813 120896), (220813 125906, 221092 125713, 224225 125712, 224419 126002, 224419 129124, 224129 129318, 221007 129318, 220814 129039, 220813 125906), (220817 130928, 220875 130826, 221092 130723, 224224 130722, 224419 130980, 224419 134134, 224129 134328, 221007 134328, 220814 134049, 220817 130928), (220813 135926, 221092 135733, 224225 135732, 224419 136022, 224419 139144, 224129 139338, 221007 139338, 220814 139059, 220813 135926), (220813 140936, 221092 140743, 224225 140742, 224419 141032, 224419 144155, 224129 144349, 221007 144349, 220814 144070, 220813 140936), (220817 145959, 220875 145857, 221092 145754, 224224 145753, 224419 146011, 224419 149129, 224356 149256, 224129 149359, 221007 149359, 220814 149080, 220817 145959), (220813 150957, 221092 150764, 224229 150763, 224420 151025, 224419 153830, 224086 154289, 223925 154369, 221007 154369, 220814 154090, 220813 150957), (220813 155967, 221092 155774, 222723 155773, 223018 155953, 223020 156163, 221903 158025, 221322 158809, 221114 158884, 220893 158815, 220816 158689, 220813 155967), (225823 90834, 225947 90704, 226647 90670, 226812 90811, 228240 93846, 228144 94220, 226062 94247, 225928 94185, 225824 93967, 225823 90834), (225827 95856, 225885 95754, 226102 95651, 228715 95650, 228959 95847, 229421 97145, 229429 99110, 229139 99258, 226017 99258, 225824 98979, 225827 95856), (225823 100856, 226102 100663, 229235 100662, 229429 100949, 229426 104055, 229367 104164, 229139 104268, 226017 104268, 225824 103989, 225823 100856), (225823 105866, 226102 105673, 229235 105672, 229429 105962, 229429 109084, 229139 109278, 226017 109278, 225824 108999, 225823 105866), (225823 110876, 226102 110683, 229235 110682, 229429 110972, 229429 114094, 229139 114288, 226017 114288, 225824 114009, 225823 110876), (225823 115886, 226102 115693, 229235 115692, 229429 115982, 229429 119104, 229139 119298, 226017 119298, 225824 119019, 225823 115886), (225823 120896, 226102 120703, 229235 120702, 229429 120992, 229429 124114, 229139 124308, 226017 124308, 225824 124029, 225823 120896), (225823 125906, 226102 125713, 229235 125712, 229429 126002, 229429 129124, 229139 129318, 226017 129318, 225824 129039, 225823 125906), (225827 130928, 225885 130826, 226102 130723, 229234 130722, 229429 130980, 229429 134098, 229366 134225, 229139 134328, 226017 134328, 225824 134049, 225827 130928), (225823 135926, 226102 135733, 229239 135732, 229423 135981, 229430 139145, 229139 139338, 226017 139338, 225824 139059, 225823 135926), (225823 140936, 226102 140743, 229234 140742, 229321 140799, 229430 141045, 229424 142854, 228945 144184, 228719 144349, 226017 144349, 225824 144070, 225823 140936), (225827 145959, 225885 145857, 226102 145754, 227959 145753, 228237 145902, 228270 146097, 226795 149218, 226530 149359, 225980 149330, 225823 149149, 225827 145959), (230833 105866, 231092 105676, 231645 105672, 231916 105817, 232120 106630, 232474 109033, 232410 109174, 232201 109275, 231027 109278, 230834 108999, 230833 105866), (230833 110876, 231112 110683, 232545 110685, 232673 110771, 232760 110936, 233109 113291, 233145 114063, 233067 114197, 232876 114286, 231027 114288, 230834 114009, 230833 110876), (230833 115886, 231112 115693, 233030 115692, 233165 115796, 233240 115976, 233390 119073, 233309 119211, 233102 119298, 231027 119298, 230834 119019, 230833 115886), (230833 120896, 231112 120703, 233251 120702, 233388 121017, 233236 124105, 233145 124231, 232989 124303, 231027 124308, 230834 124029, 230833 120896), (230833 125906, 231112 125713, 232943 125712, 233085 125836, 233142 126027, 233109 126714, 232748 129135, 232510 129312, 231027 129318, 230834 129039, 230833 125906), (230837 130928, 230895 130826, 231112 130723, 232281 130728, 232373 130781, 232463 131066, 232122 133357, 231927 134133, 231636 134328, 230994 134300, 230833 134118, 230837 130928), (95562 120036, 95660 121007, 95821 124226, 95776 124749, 95907 126017, 95946 126807, 96326 129356, 96337 129890, 96589 131141, 96947 133546, 97184 134481, 97245 134937, 98560 140189, 98926 141211, 99601 142910, 99694 143206, 100202 144618, 100294 145033, 100690 146135, 102400 149732, 102513 150088, 103757 152724, 104500 153963, 105131 154921, 105724 156050, 106205 156715, 107314 158564, 108020 159510, 108315 159997, 109487 161577, 109886 162031, 111364 164023, 112320 165075, 112712 165586, 114445 167497, 114948 167977, 115940 169069, 117139 170154, 117502 170553, 119413 172286, 120037 172785, 120983 173640, 123094 175204, 123358 175458, 124644 176418, 125625 177083, 126446 177692, 128484 178910, 129267 179440, 130141 179891, 130770 180281, 131038 180492, 132271 181239, 134909 182488, 135406 182669, 138448 184107, 138732 184210, 139778 184655, 140528 184852, 141941 185355, 142078 185426, 143739 186055, 144805 186437, 150062 187753, 150672 187857, 151457 188053, 153951 188422, 154465 188567, 155761 188692, 158216 189055, 159083 189095, 159601 189190, 160884 189186, 164094 189343, 165000 189439, 166007 189340, 169227 189178, 169749 189223, 171017 189092, 171807 189053, 174356 188672, 174880 188663, 176141 188410, 178542 188053, 179480 187816, 179937 187754, 185194 186437, 186211 186073, 187910 185398, 188205 185305, 189618 184797, 190033 184705, 191135 184309, 194734 182600, 195087 182486, 197729 181239, 198963 180499, 199921 179868, 201050 179275, 201715 178794, 203554 177692, 204386 177074, 204998 176683, 206577 175512, 207031 175112, 209026 173634, 209962 172786, 210585 172287, 212496 170554, 212977 170050, 214075 169053, 215051 167978, 215554 167497, 217286 165586, 217785 164962, 218636 164024, 220204 161905, 220458 161642, 221418 160355, 222084 159373, 222692 158553, 223832 156650, 224455 155706, 224891 154858, 225281 154229, 225492 153961, 226242 152724, 227486 150089, 227599 149733, 229107 146551, 229676 145157, 229797 144617, 230305 143206, 230397 142910, 231055 141261, 231439 140189, 232753 134938, 232815 134480, 233056 133522, 233401 131204, 233568 130587, 233667 129393, 234055 126795, 234090 126073, 234195 125463, 234175 124272, 234336 121063, 234405 120666, 234438 119965, 234344 119148, 234189 115930, 234233 115303, 234098 114138, 234053 113187, 233698 110798, 233683 110175, 233430 109014, 233053 106454, 232857 105672, 232755 105062, 231439 99810, 231073 98789, 230427 97079, 230356 96941, 229853 95528, 229705 94966, 229319 93893, 227670 90407, 227489 89910, 226238 87267, 225500 86035, 224869 85078, 224248 83900, 223872 83419, 222692 81446, 221979 80489, 221683 80001, 220512 78422, 220112 77968, 218600 75936, 217678 74924, 217287 74414, 215554 72503, 215153 72139, 214053 70923, 212861 69846, 212497 69445, 210585 67713, 210074 67320, 209026 66365, 206905 64795, 206642 64541, 205355 63581, 204497 63010, 203553 62307, 201515 61089, 200732 60559, 199858 60108, 199229 59718, 198961 59507, 197724 58757, 195090 57511, 194593 57330, 191551 55891, 191289 55799, 190228 55346, 189471 55147, 188058 54644, 187921 54572, 186261 53944, 185194 53562, 179938 52246, 179328 52142, 178530 51944, 176049 51577, 175535 51432, 174239 51307, 171795 50944, 170916 50904, 170394 50809, 169116 50812, 165906 50658, 164965 50562, 163993 50660, 160774 50821, 160253 50776, 158983 50906, 158192 50946, 155644 51327, 155113 51336, 153859 51589, 151457 51946, 150520 52183, 150063 52245, 144805 53562, 143789 53926, 142089 54601, 141794 54694, 140381 55202, 139966 55294, 138897 55677, 135267 57400, 134911 57513, 132275 58757, 131036 59500, 130078 60131, 128949 60724, 128284 61205, 126446 62307, 125489 63020, 125002 63315, 123422 64487, 122968 64887, 120936 66399, 119924 67321, 119414 67712, 117503 69445, 117022 69949, 115923 70946, 114846 72138, 114445 72502, 112713 74413, 112214 75037, 111359 75983, 109795 78094, 109541 78357, 108581 79644, 107915 80626, 107307 81446, 106089 83484, 105559 84267, 105108 85141, 104718 85770, 104507 86038, 103757 87275, 102511 89909, 102330 90406, 100893 93446, 100791 93732, 100346 94774, 100147 95528, 99644 96941, 99572 97078, 98944 98740, 98560 99810, 97245 105061, 97142 105672, 96943 106475, 96577 108951, 96429 109470, 96306 110761, 95944 113211, 95904 114084, 95809 114606, 95812 115885, 95659 119094, 95562 120036), (96456 120465, 96835 120253, 98916 120251, 99293 120434, 99616 120966, 99618 124095, 99434 124435, 98902 124758, 97006 124762, 96668 124602, 96314 124147, 96160 120984, 96456 120465), (96310 115908, 96644 115429, 97058 115241, 98916 115241, 99293 115424, 99616 115956, 99618 119085, 99434 119425, 98902 119748, 96819 119750, 96479 119568, 96157 119063, 96310 115908), (96689 125485, 97047 125267, 98916 125261, 99293 125444, 99616 125976, 99618 129105, 99434 129445, 98901 129768, 97676 129772, 97206 129646, 96817 129240, 96442 126751, 96405 125994, 96689 125485), (96408 114065, 96443 113244, 96800 110833, 97178 110390, 97538 110224, 98916 110231, 99293 110414, 99616 110946, 99618 114075, 99434 114415, 98902 114738, 97069 114739, 96711 114546, 96408 114065), (97317 130532, 97719 130277, 98915 130271, 99209 130398, 99400 130568, 99616 130985, 99618 134115, 99434 134455, 98991 134715, 98354 134728, 97983 134601, 97659 134317, 97435 133440, 97082 131069, 97317 130532), (97435 106557, 97626 105792, 97983 105400, 98379 105272, 99083 105308, 99388 105469, 99617 105897, 99618 109065, 99434 109405, 98902 109728, 97624 109729, 97341 109499, 97081 108982, 97435 106557), (100170 98954, 100142 97041, 100617 95696, 100887 95421, 101159 95272, 102040 95199, 103925 95199, 104219 95326, 104410 95496, 104626 95913, 104628 99045, 104444 99385, 103912 99708, 100783 99710, 100396 99484, 100231 99221, 100170 98954), (100171 100803, 100370 100464, 100797 100213, 103926 100211, 104303 100394, 104626 100926, 104628 104055, 104444 104395, 103912 104718, 100783 104720, 100445 104537, 100173 104087, 100171 100803), (100119 105903, 100360 105483, 100797 105223, 103926 105221, 104303 105404, 104626 105936, 104628 109065, 104444 109405, 103912 109728, 100783 109730, 100443 109546, 100121 109051, 100119 105903), (100302 110555, 100797 110233, 103926 110231, 104303 110414, 104626 110946, 104628 114075, 104444 114415, 103912 114738, 100783 114740, 100443 114556, 100121 114061, 100119 110932, 100302 110555), (100302 115565, 100797 115243, 103926 115241, 104303 115424, 104626 115956, 104628 119085, 104444 119425, 103912 119748, 100783 119750, 100443 119566, 100121 119071, 100119 115942, 100302 115565), (100302 120575, 100797 120253, 103926 120251, 104303 120434, 104626 120966, 104628 124095, 104444 124435, 103912 124758, 100783 124760, 100443 124576, 100121 124081, 100119 120952, 100302 120575), (100302 125585, 100797 125263, 103926 125261, 104303 125444, 104626 125976, 104628 129105, 104444 129445, 103911 129768, 100783 129770, 100443 129586, 100121 129091, 100119 125962, 100302 125585), (100305 130592, 100797 130273, 103925 130271, 104219 130398, 104410 130568, 104626 130985, 104628 134115, 104444 134455, 103912 134778, 100783 134780, 100443 134596, 100121 134101, 100119 130972, 100305 130592), (100295 135615, 100797 135283, 103926 135281, 104303 135464, 104626 135996, 104628 139125, 104444 139465, 103912 139788, 100783 139790, 100326 139480, 100170 139147, 100170 135903, 100295 135615), (100295 140624, 100797 140293, 103926 140291, 104303 140474, 104626 141006, 104628 144136, 104444 144476, 103903 144800, 101814 144808, 101162 144728, 100660 144408, 100111 142891, 100170 140994, 100295 140624), (101452 94348, 101264 93829, 102781 90619, 103140 90331, 103489 90240, 104102 90278, 104398 90437, 104627 90865, 104628 94033, 104444 94373, 103911 94696, 102040 94697, 101722 94556, 101452 94348), (101345 146338, 101375 145912, 101482 145627, 101858 145325, 103917 145301, 104362 145539, 104626 146016, 104628 149146, 104444 149486, 104203 149665, 103517 149757, 103140 149668, 102834 149479, 101345 146338), (105170 85989, 105543 85433, 106074 85230, 107276 85179, 108936 85179, 109313 85362, 109636 85894, 109638 89023, 109454 89363, 108922 89686, 105793 89688, 105337 89378, 105185 89015, 105180 87631, 105170 85989), (105129 90871, 105370 90451, 105807 90191, 108936 90189, 109313 90372, 109636 90904, 109638 94033, 109454 94373, 108921 94696, 105793 94698, 105453 94514, 105131 94019, 105129 90871), (105315 95520, 105807 95201, 108935 95199, 109229 95326, 109420 95496, 109636 95913, 109638 99045, 109454 99385, 108922 99708, 105793 99710, 105453 99526, 105131 99031, 105129 95900, 105315 95520), (105312 100535, 105807 100213, 108936 100211, 109313 100394, 109636 100926, 109638 104055, 109454 104395, 108922 104718, 105793 104720, 105453 104536, 105131 104041, 105129 100912, 105312 100535), (105312 105545, 105807 105223, 108936 105221, 109313 105404, 109636 105936, 109638 109065, 109454 109405, 108922 109728, 105793 109730, 105453 109546, 105131 109051, 105129 105922, 105312 105545), (105312 110555, 105807 110233, 108936 110231, 109313 110414, 109636 110946, 109638 114075, 109454 114415, 108922 114738, 105793 114740, 105453 114556, 105131 114061, 105129 110932, 105312 110555), (105312 115565, 105807 115243, 108936 115241, 109313 115424, 109636 115956, 109638 119085, 109454 119425, 108922 119748, 105793 119750, 105453 119566, 105131 119071, 105129 115942, 105312 115565), (105312 120575, 105807 120253, 108936 120251, 109313 120434, 109636 120966, 109638 124095, 109454 124435, 108922 124758, 105793 124760, 105453 124576, 105131 124081, 105129 120952, 105312 120575), (105312 125585, 105807 125263, 108936 125261, 109313 125444, 109636 125976, 109638 129105, 109454 129445, 108921 129768, 105793 129770, 105453 129586, 105131 129091, 105129 125962, 105312 125585), (105315 130592, 105807 130273, 108935 130271, 109229 130398, 109420 130568, 109636 130985, 109638 134115, 109454 134455, 108922 134778, 105793 134780, 105453 134596, 105131 134101, 105129 130972, 105315 130592), (105312 135605, 105807 135283, 108936 135281, 109313 135464, 109636 135996, 109638 139125, 109454 139465, 108922 139788, 105793 139790, 105453 139606, 105131 139111, 105129 135982, 105312 135605), (105312 140615, 105807 140293, 108936 140291, 109313 140474, 109636 141006, 109638 144136, 109454 144476, 108921 144799, 105793 144801, 105453 144617, 105131 144122, 105129 140992, 105312 140615), (105314 145624, 105807 145304, 108935 145302, 109229 145429, 109420 145599, 109636 146016, 109638 149146, 109454 149486, 108922 149809, 105793 149811, 105453 149627, 105131 149132, 105129 146003, 105314 145624), (105186 150923, 105237 150756, 105429 150526, 105807 150314, 108936 150312, 109313 150495, 109636 151027, 109638 154156, 109454 154496, 108922 154819, 107044 154823, 106074 154769, 105543 154566, 105179 154048, 105186 150923), (106642 84257, 106541 83704, 107721 81725, 108315 80922, 108977 80726, 109345 80863, 109508 81049, 109637 81345, 109638 84013, 109454 84353, 108922 84676, 107276 84677, 106933 84519, 106642 84257), (106602 155929, 106668 155697, 107087 155328, 108936 155322, 109313 155505, 109636 156037, 109632 158754, 109434 159040, 109094 159250, 108747 159294, 108386 159172, 107740 158300, 106633 156459, 106602 155929), (110191 78868, 110225 78358, 111751 76291, 112584 75373, 113065 75210, 114024 75210, 114313 75334, 114646 75874, 114648 79003, 114464 79343, 113932 79666, 110803 79668, 110419 79444, 110251 79178, 110191 78868), (110392 80419, 110817 80171, 113946 80169, 114323 80352, 114646 80884, 114648 84013, 114464 84353, 113932 84676, 110803 84678, 110463 84494, 110141 83999, 110139 81345, 110240 80627, 110392 80419), (110322 85503, 110817 85181, 113946 85179, 114323 85362, 114646 85894, 114648 89023, 114464 89363, 113932 89686, 110803 89688, 110463 89504, 110141 89009, 110139 85880, 110322 85503), (110322 90513, 110817 90191, 113946 90189, 114323 90372, 114646 90904, 114648 94033, 114464 94373, 113931 94696, 110803 94698, 110463 94514, 110141 94019, 110139 90890, 110322 90513), (110325 95520, 110817 95201, 113945 95199, 114239 95326, 114430 95496, 114646 95913, 114648 99045, 114464 99385, 113932 99708, 110803 99710, 110463 99526, 110141 99031, 110139 95900, 110325 95520), (110322 100535, 110817 100213, 113946 100211, 114323 100394, 114646 100926, 114648 104055, 114464 104395, 113932 104718, 110803 104720, 110463 104536, 110141 104041, 110139 100912, 110322 100535), (110322 105545, 110817 105223, 113946 105221, 114323 105404, 114646 105936, 114648 109065, 114464 109405, 113932 109728, 110803 109730, 110463 109546, 110141 109051, 110139 105922, 110322 105545), (110322 110555, 110817 110233, 113946 110231, 114323 110414, 114646 110946, 114648 114075, 114464 114415, 113932 114738, 110803 114740, 110463 114556, 110141 114061, 110139 110932, 110322 110555), (110322 115565, 110817 115243, 113946 115241, 114323 115424, 114646 115956, 114648 119085, 114464 119425, 113932 119748, 110803 119750, 110463 119566, 110141 119071, 110139 115942, 110322 115565), (110322 120575, 110817 120253, 113946 120251, 114323 120434, 114646 120966, 114648 124095, 114464 124435, 113932 124758, 110803 124760, 110463 124576, 110141 124081, 110139 120952, 110322 120575), (110322 125585, 110817 125263, 113946 125261, 114323 125444, 114646 125976, 114648 129105, 114464 129445, 113931 129768, 110803 129770, 110463 129586, 110141 129091, 110139 125962, 110322 125585), (110325 130592, 110817 130273, 113945 130271, 114239 130398, 114430 130568, 114646 130985, 114648 134115, 114464 134455, 113932 134778, 110803 134780, 110463 134596, 110141 134101, 110139 130972, 110325 130592), (110322 135605, 110817 135283, 113946 135281, 114323 135464, 114646 135996, 114648 139125, 114464 139465, 113932 139788, 110803 139790, 110463 139606, 110141 139111, 110139 135982, 110322 135605), (110322 140615, 110817 140293, 113946 140291, 114323 140474, 114646 141006, 114648 144136, 114464 144476, 113931 144799, 110803 144801, 110463 144617, 110141 144122, 110139 140992, 110322 140615), (110325 145623, 110817 145304, 113945 145302, 114239 145429, 114430 145599, 114646 146016, 114648 149146, 114464 149486, 113932 149809, 110803 149811, 110463 149627, 110141 149132, 110139 146003, 110325 145623), (110322 150636, 110817 150314, 113946 150312, 114323 150495, 114646 151027, 114648 154156, 114464 154496, 113932 154819, 110803 154821, 110463 154637, 110141 154142, 110139 151013, 110322 150636), (110322 155646, 110817 155324, 113946 155322, 114323 155505, 114646 156037, 114648 159166, 114464 159506, 113932 159829, 110820 159830, 110488 159666, 110348 159524, 110209 159228, 110136 158797, 110139 156023, 110322 155646), (110213 160978, 110331 160624, 110476 160485, 110813 160332, 113946 160332, 114323 160515, 114646 161047, 114648 164176, 114464 164516, 114022 164789, 113065 164789, 112663 164705, 111728 163680, 110287 161735, 110213 160978), (115200 72495, 116284 71291, 117356 70319, 117793 70200, 119034 70200, 119323 70324, 119656 70864, 119658 73993, 119474 74333, 118942 74656, 115813 74658, 115473 74474, 115200 74035, 115200 72495), (115332 75483, 115827 75161, 118956 75159, 119333 75342, 119656 75874, 119658 79003, 119474 79343, 118942 79666, 115813 79668, 115473 79484, 115151 78989, 115149 75860, 115332 75483), (115332 80493, 115827 80171, 118956 80169, 119333 80352, 119656 80884, 119658 84013, 119474 84353, 118942 84676, 115813 84678, 115473 84494, 115151 83999, 115149 80870, 115332 80493), (115332 85503, 115827 85181, 118956 85179, 119333 85362, 119656 85894, 119658 89023, 119474 89363, 118942 89686, 115813 89688, 115473 89504, 115151 89009, 115149 85880, 115332 85503), (115332 90513, 115827 90191, 118956 90189, 119333 90372, 119656 90904, 119658 94033, 119474 94373, 118941 94696, 115813 94698, 115473 94514, 115151 94019, 115149 90890, 115332 90513), (115335 95520, 115827 95201, 118955 95199, 119249 95326, 119440 95496, 119656 95913, 119658 99045, 119474 99385, 118942 99708, 115813 99710, 115473 99526, 115151 99031, 115149 95900, 115335 95520), (115332 100535, 115827 100213, 118956 100211, 119333 100394, 119656 100926, 119658 104055, 119474 104395, 118942 104718, 115813 104720, 115473 104536, 115151 104041, 115149 100912, 115332 100535), (115332 105545, 115827 105223, 118956 105221, 119333 105404, 119656 105936, 119658 109065, 119474 109405, 118942 109728, 115813 109730, 115473 109546, 115151 109051, 115149 105922, 115332 105545), (115332 110555, 115827 110233, 118956 110231, 119333 110414, 119656 110946, 119658 114075, 119474 114415, 118942 114738, 115813 114740, 115473 114556, 115151 114061, 115149 110932, 115332 110555), (115332 115565, 115827 115243, 118956 115241, 119333 115424, 119656 115956, 119658 119085, 119474 119425, 118942 119748, 115813 119750, 115473 119566, 115151 119071, 115149 115942, 115332 115565), (115332 120575, 115827 120253, 118956 120251, 119333 120434, 119656 120966, 119658 124095, 119474 124435, 118942 124758, 115813 124760, 115473 124576, 115151 124081, 115149 120952, 115332 120575), (115332 125585, 115827 125263, 118956 125261, 119333 125444, 119656 125976, 119658 129105, 119474 129445, 118941 129768, 115813 129770, 115473 129586, 115151 129091, 115149 125962, 115332 125585), (115335 130592, 115827 130273, 118955 130271, 119249 130398, 119440 130568, 119656 130985, 119658 134115, 119474 134455, 118942 134778, 115813 134780, 115473 134596, 115151 134101, 115149 130972, 115335 130592), (115332 135605, 115827 135283, 118956 135281, 119333 135464, 119656 135996, 119658 139125, 119474 139465, 118942 139788, 115813 139790, 115473 139606, 115151 139111, 115149 135982, 115332 135605), (115332 140615, 115827 140293, 118956 140291, 119333 140474, 119656 141006, 119658 144136, 119474 144476, 118941 144799, 115813 144801, 115473 144617, 115151 144122, 115149 140992, 115332 140615), (115335 145623, 115827 145304, 118955 145302, 119249 145429, 119440 145599, 119656 146016, 119658 149146, 119474 149486, 118942 149809, 115813 149811, 115473 149627, 115151 149132, 115149 146003, 115335 145623), (115332 150636, 115827 150314, 118956 150312, 119333 150495, 119656 151027, 119658 154156, 119474 154496, 118942 154819, 115813 154821, 115473 154637, 115151 154142, 115149 151013, 115332 150636), (115332 155646, 115827 155324, 118956 155322, 119333 155505, 119656 156037, 119658 159166, 119474 159506, 118942 159829, 115813 159831, 115473 159647, 115151 159152, 115149 156023, 115332 155646), (115332 160656, 115827 160334, 118956 160332, 119333 160515, 119656 161047, 119658 164176, 119474 164516, 118942 164839, 115813 164841, 115473 164657, 115151 164162, 115149 161033, 115332 160656), (115200 165965, 115325 165676, 115827 165344, 118956 165342, 119333 165525, 119656 166057, 119658 169186, 119474 169526, 119032 169799, 117495 169799, 116287 168711, 115318 167643, 115200 167206, 115200 165965), (120293 67663, 121292 66750, 123264 65287, 124021 65213, 124367 65325, 124514 65476, 124667 65813, 124668 68983, 124484 69323, 123952 69646, 120823 69648, 120483 69464, 120210 69025, 120210 68065, 120293 67663), (120342 70473, 120837 70151, 123966 70149, 124343 70332, 124666 70864, 124668 73993, 124484 74333, 123952 74656, 120823 74658, 120483 74474, 120161 73979, 120159 70850, 120342 70473), (120342 75483, 120837 75161, 123966 75159, 124343 75342, 124666 75874, 124668 79003, 124484 79343, 123952 79666, 120823 79668, 120483 79484, 120161 78989, 120159 75860, 120342 75483), (120342 80493, 120837 80171, 123966 80169, 124343 80352, 124666 80884, 124668 84013, 124484 84353, 123952 84676, 120823 84678, 120483 84494, 120161 83999, 120159 80870, 120342 80493), (120342 85503, 120837 85181, 123966 85179, 124343 85362, 124666 85894, 124668 89023, 124484 89363, 123952 89686, 120823 89688, 120483 89504, 120161 89009, 120159 85880, 120342 85503), (120342 90513, 120837 90191, 123966 90189, 124343 90372, 124666 90904, 124668 94033, 124484 94373, 123951 94696, 120823 94698, 120483 94514, 120161 94019, 120159 90890, 120342 90513), (120345 95520, 120837 95201, 123965 95199, 124259 95326, 124450 95496, 124666 95913, 124668 99045, 124484 99385, 123952 99708, 120823 99710, 120483 99526, 120161 99031, 120159 95900, 120345 95520), (120342 100535, 120837 100213, 123966 100211, 124343 100394, 124666 100926, 124668 104055, 124484 104395, 123952 104718, 120823 104720, 120483 104536, 120161 104041, 120159 100912, 120342 100535), (120342 105545, 120837 105223, 123966 105221, 124343 105404, 124666 105936, 124668 109065, 124484 109405, 123952 109728, 120823 109730, 120483 109546, 120161 109051, 120159 105922, 120342 105545), (120342 110555, 120837 110233, 123966 110231, 124343 110414, 124666 110946, 124668 114075, 124484 114415, 123952 114738, 120823 114740, 120483 114556, 120161 114061, 120159 110932, 120342 110555), (120342 115565, 120837 115243, 123966 115241, 124343 115424, 124666 115956, 124668 119085, 124484 119425, 123952 119748, 120823 119750, 120483 119566, 120161 119071, 120159 115942, 120342 115565), (120342 120575, 120837 120253, 123966 120251, 124343 120434, 124666 120966, 124668 124095, 124484 124435, 123952 124758, 120823 124760, 120483 124576, 120161 124081, 120159 120952, 120342 120575), (120342 125585, 120837 125263, 123966 125261, 124343 125444, 124666 125976, 124668 129105, 124484 129445, 123951 129768, 120823 129770, 120483 129586, 120161 129091, 120159 125962, 120342 125585), (120345 130592, 120837 130273, 123965 130271, 124259 130398, 124450 130568, 124666 130985, 124668 134115, 124484 134455, 123952 134778, 120823 134780, 120483 134596, 120161 134101, 120159 130972, 120345 130592), (120342 135605, 120837 135283, 123966 135281, 124343 135464, 124666 135996, 124668 139125, 124484 139465, 123952 139788, 120823 139790, 120483 139606, 120161 139111, 120159 135982, 120342 135605), (120342 140615, 120837 140293, 123966 140291, 124343 140474, 124666 141006, 124668 144136, 124484 144476, 123951 144799, 120823 144801, 120483 144617, 120161 144122, 120159 140992, 120342 140615), (120345 145623, 120837 145304, 123965 145302, 124259 145429, 124450 145599, 124666 146016, 124668 149146, 124484 149486, 123952 149809, 120823 149811, 120483 149627, 120161 149132, 120159 146003, 120345 145623), (120342 150636, 120837 150314, 123966 150312, 124343 150495, 124666 151027, 124668 154156, 124484 154496, 123952 154819, 120823 154821, 120483 154637, 120161 154142, 120159 151013, 120342 150636), (120342 155646, 120837 155324, 123966 155322, 124343 155505, 124666 156037, 124668 159166, 124484 159506, 123952 159829, 120823 159831, 120483 159647, 120161 159152, 120159 156023, 120342 155646), (120342 160656, 120837 160334, 123966 160332, 124343 160515, 124666 161047, 124668 164176, 124484 164516, 123952 164839, 120823 164841, 120483 164657, 120161 164162, 120159 161033, 120342 160656), (120342 165666, 120837 165344, 123966 165342, 124343 165525, 124666 166057, 124668 169186, 124484 169526, 123952 169849, 120823 169851, 120483 169667, 120161 169172, 120159 166043, 120342 165666), (120210 170975, 120335 170686, 120837 170354, 123966 170352, 124343 170535, 124666 171067, 124668 174196, 124445 174580, 124178 174748, 123868 174808, 123358 174774, 121318 173270, 120373 172415, 120210 171934, 120210 170975), (125169 65820, 125333 65488, 125475 65348, 125770 65208, 126359 65139, 128976 65139, 129353 65322, 129676 65854, 129678 68983, 129494 69323, 128962 69646, 125833 69648, 125493 69464, 125171 68969, 125169 65820), (125352 70473, 125847 70151, 128976 70149, 129353 70332, 129676 70864, 129678 73993, 129494 74333, 128962 74656, 125833 74658, 125493 74474, 125171 73979, 125169 70850, 125352 70473), (125352 75483, 125847 75161, 128976 75159, 129353 75342, 129676 75874, 129678 79003, 129494 79343, 128962 79666, 125833 79668, 125493 79484, 125171 78989, 125169 75860, 125352 75483), (125352 80493, 125847 80171, 128976 80169, 129353 80352, 129676 80884, 129678 84013, 129494 84353, 128962 84676, 125833 84678, 125493 84494, 125171 83999, 125169 80870, 125352 80493), (125352 85503, 125847 85181, 128976 85179, 129353 85362, 129676 85894, 129678 89023, 129494 89363, 128962 89686, 125833 89688, 125493 89504, 125171 89009, 125169 85880, 125352 85503), (125352 90513, 125847 90191, 128976 90189, 129353 90372, 129676 90904, 129678 94033, 129494 94373, 128961 94696, 125833 94698, 125493 94514, 125171 94019, 125169 90890, 125352 90513), (125355 95520, 125847 95201, 128975 95199, 129269 95326, 129460 95496, 129676 95913, 129678 99045, 129494 99385, 128962 99708, 125833 99710, 125493 99526, 125171 99031, 125169 95900, 125355 95520), (125352 100535, 125847 100213, 128976 100211, 129353 100394, 129676 100926, 129678 104055, 129494 104395, 128962 104718, 125833 104720, 125493 104536, 125171 104041, 125169 100912, 125352 100535), (125352 105545, 125847 105223, 128976 105221, 129353 105404, 129676 105936, 129678 109065, 129494 109405, 128962 109728, 125833 109730, 125493 109546, 125171 109051, 125169 105922, 125352 105545), (125352 110555, 125847 110233, 128976 110231, 129353 110414, 129676 110946, 129678 114075, 129494 114415, 128962 114738, 125833 114740, 125493 114556, 125171 114061, 125169 110932, 125352 110555), (125352 115565, 125847 115243, 128976 115241, 129353 115424, 129676 115956, 129678 119085, 129494 119425, 128962 119748, 125833 119750, 125493 119566, 125171 119071, 125169 115942, 125352 115565), (125352 120575, 125847 120253, 128976 120251, 129353 120434, 129676 120966, 129678 124095, 129494 124435, 128962 124758, 125833 124760, 125493 124576, 125171 124081, 125169 120952, 125352 120575), (125352 125585, 125847 125263, 128976 125261, 129353 125444, 129676 125976, 129678 129105, 129494 129445, 128961 129768, 125833 129770, 125493 129586, 125171 129091, 125169 125962, 125352 125585), (125355 130592, 125847 130273, 128975 130271, 129269 130398, 129460 130568, 129676 130985, 129678 134115, 129494 134455, 128962 134778, 125833 134780, 125493 134596, 125171 134101, 125169 130972, 125355 130592), (125352 135605, 125847 135283, 128976 135281, 129353 135464, 129676 135996, 129678 139125, 129494 139465, 128962 139788, 125833 139790, 125493 139606, 125171 139111, 125169 135982, 125352 135605), (125352 140615, 125847 140293, 128976 140291, 129353 140474, 129676 141006, 129678 144136, 129494 144476, 128961 144799, 125833 144801, 125493 144617, 125171 144122, 125169 140992, 125352 140615), (125355 145623, 125847 145304, 128975 145302, 129269 145429, 129460 145599, 129676 146016, 129678 149146, 129494 149486, 128962 149809, 125833 149811, 125493 149627, 125171 149132, 125169 146003, 125355 145623), (125352 150636, 125847 150314, 128976 150312, 129353 150495, 129676 151027, 129678 154156, 129494 154496, 128962 154819, 125833 154821, 125493 154637, 125171 154142, 125169 151013, 125352 150636), (125352 155646, 125847 155324, 128976 155322, 129353 155505, 129676 156037, 129678 159166, 129494 159506, 128962 159829, 125833 159831, 125493 159647, 125171 159152, 125169 156023, 125352 155646), (125352 160656, 125847 160334, 128976 160332, 129353 160515, 129676 161047, 129678 164176, 129494 164516, 128962 164839, 125833 164841, 125493 164657, 125171 164162, 125169 161033, 125352 160656), (125352 165666, 125847 165344, 128976 165342, 129353 165525, 129676 166057, 129678 169186, 129494 169526, 128962 169849, 125833 169851, 125493 169667, 125171 169172, 125169 166043, 125352 165666), (125352 170676, 125847 170354, 128976 170352, 129353 170535, 129676 171067, 129678 174196, 129494 174536, 128962 174859, 126188 174863, 125628 174759, 125420 174607, 125171 174182, 125169 171053, 125352 170676), (125705 63747, 125823 63397, 126723 62722, 128540 61633, 129070 61602, 129302 61668, 129677 62201, 129678 63973, 129494 64313, 128962 64636, 126359 64637, 126084 64520, 125877 64345, 125749 64094, 125705 63747), (125726 176022, 125864 175654, 126231 175368, 128976 175362, 129353 175545, 129676 176077, 129672 177837, 129257 178357, 128704 178458, 126725 177278, 125923 176683, 125726 176022), (130433 60543, 130951 60179, 134076 60186, 134422 60367, 134686 60844, 134688 63973, 134504 64313, 133972 64636, 130843 64638, 130503 64454, 130181 63959, 130179 62201, 130230 61074, 130433 60543), (130362 65463, 130857 65141, 133986 65139, 134363 65322, 134686 65854, 134688 68983, 134504 69323, 133972 69646, 130843 69648, 130503 69464, 130181 68969, 130179 65840, 130362 65463), (130362 70473, 130857 70151, 133986 70149, 134363 70332, 134686 70864, 134688 73993, 134504 74333, 133972 74656, 130843 74658, 130503 74474, 130181 73979, 130179 70850, 130362 70473), (130362 75483, 130857 75161, 133986 75159, 134363 75342, 134686 75874, 134688 79003, 134504 79343, 133972 79666, 130843 79668, 130503 79484, 130181 78989, 130179 75860, 130362 75483), (130362 80493, 130857 80171, 133986 80169, 134363 80352, 134686 80884, 134688 84013, 134504 84353, 133972 84676, 130843 84678, 130503 84494, 130181 83999, 130179 80870, 130362 80493), (130362 85503, 130857 85181, 133986 85179, 134363 85362, 134686 85894, 134688 89023, 134504 89363, 133972 89686, 130843 89688, 130503 89504, 130181 89009, 130179 85880, 130362 85503), (130362 90513, 130857 90191, 133986 90189, 134363 90372, 134686 90904, 134688 94033, 134504 94373, 133971 94696, 130843 94698, 130503 94514, 130181 94019, 130179 90890, 130362 90513), (130365 95520, 130857 95201, 133985 95199, 134279 95326, 134470 95496, 134686 95913, 134688 99045, 134504 99385, 133972 99708, 130843 99710, 130503 99526, 130181 99031, 130179 95900, 130365 95520), (130362 100535, 130857 100213, 133986 100211, 134363 100394, 134686 100926, 134688 104055, 134504 104395, 133972 104718, 130843 104720, 130503 104536, 130181 104041, 130179 100912, 130362 100535), (130362 105545, 130857 105223, 133986 105221, 134363 105404, 134686 105936, 134688 109065, 134504 109405, 133972 109728, 130843 109730, 130503 109546, 130181 109051, 130179 105922, 130362 105545), (130362 110555, 130857 110233, 133986 110231, 134363 110414, 134686 110946, 134688 114075, 134504 114415, 133972 114738, 130843 114740, 130503 114556, 130181 114061, 130179 110932, 130362 110555), (130362 115565, 130857 115243, 133986 115241, 134363 115424, 134686 115956, 134688 119085, 134504 119425, 133972 119748, 130843 119750, 130503 119566, 130181 119071, 130179 115942, 130362 115565), (130362 120575, 130857 120253, 133986 120251, 134363 120434, 134686 120966, 134688 124095, 134504 124435, 133972 124758, 130843 124760, 130503 124576, 130181 124081, 130179 120952, 130362 120575), (130362 125585, 130857 125263, 133986 125261, 134363 125444, 134686 125976, 134688 129105, 134504 129445, 133971 129768, 130843 129770, 130503 129586, 130181 129091, 130179 125962, 130362 125585), (130365 130592, 130857 130273, 133985 130271, 134279 130398, 134470 130568, 134686 130985, 134688 134115, 134504 134455, 133972 134778, 130843 134780, 130503 134596, 130181 134101, 130179 130972, 130365 130592), (130362 135605, 130857 135283, 133986 135281, 134363 135464, 134686 135996, 134688 139125, 134504 139465, 133972 139788, 130843 139790, 130503 139606, 130181 139111, 130179 135982, 130362 135605), (130362 140615, 130857 140293, 133986 140291, 134363 140474, 134686 141006, 134688 144136, 134504 144476, 133971 144799, 130843 144801, 130503 144617, 130181 144122, 130179 140992, 130362 140615), (130365 145623, 130857 145304, 133985 145302, 134279 145429, 134470 145599, 134686 146016, 134688 149146, 134504 149486, 133972 149809, 130843 149811, 130503 149627, 130181 149132, 130179 146003, 130365 145623), (130362 150636, 130857 150314, 133986 150312, 134363 150495, 134686 151027, 134688 154156, 134504 154496, 133972 154819, 130843 154821, 130503 154637, 130181 154142, 130179 151013, 130362 150636), (130362 155646, 130857 155324, 133986 155322, 134363 155505, 134686 156037, 134688 159166, 134504 159506, 133972 159829, 130843 159831, 130503 159647, 130181 159152, 130179 156023, 130362 155646), (130362 160656, 130857 160334, 133986 160332, 134363 160515, 134686 161047, 134688 164176, 134504 164516, 133972 164839, 130843 164841, 130503 164657, 130181 164162, 130179 161033, 130362 160656), (130362 165666, 130857 165344, 133986 165342, 134363 165525, 134686 166057, 134688 169186, 134504 169526, 133972 169849, 130843 169851, 130503 169667, 130181 169172, 130179 166043, 130362 165666), (130362 170676, 130857 170354, 133986 170352, 134363 170535, 134686 171067, 134688 174196, 134504 174536, 133972 174859, 130843 174861, 130503 174677, 130181 174182, 130179 171053, 130362 170676), (130362 175686, 130857 175364, 133986 175362, 134363 175545, 134686 176077, 134688 179206, 134378 179662, 134015 179814, 132626 179819, 130989 179829, 130433 179456, 130230 178925, 130176 177880, 130179 176063, 130362 175686), (135331 58140, 135520 57834, 138682 56338, 139108 56368, 139389 56471, 139512 56585, 139697 56965, 139698 58963, 139514 59303, 138982 59626, 135853 59628, 135454 59389, 135334 59203, 135242 58517, 135331 58140), (135372 60453, 135867 60131, 138996 60129, 139373 60312, 139696 60844, 139698 63973, 139514 64313, 138982 64636, 135853 64638, 135513 64454, 135191 63959, 135189 60830, 135372 60453), (135372 65463, 135867 65141, 138996 65139, 139373 65322, 139696 65854, 139698 68983, 139514 69323, 138982 69646, 135853 69648, 135513 69464, 135191 68969, 135189 65840, 135372 65463), (135372 70473, 135867 70151, 138996 70149, 139373 70332, 139696 70864, 139698 73993, 139514 74333, 138982 74656, 135853 74658, 135513 74474, 135191 73979, 135189 70850, 135372 70473), (135372 75483, 135867 75161, 138996 75159, 139373 75342, 139696 75874, 139698 79003, 139514 79343, 138982 79666, 135853 79668, 135513 79484, 135191 78989, 135189 75860, 135372 75483), (135372 80493, 135867 80171, 138996 80169, 139373 80352, 139696 80884, 139698 84013, 139514 84353, 138982 84676, 135853 84678, 135513 84494, 135191 83999, 135189 80870, 135372 80493), (135372 85503, 135867 85181, 138996 85179, 139373 85362, 139696 85894, 139698 89023, 139514 89363, 138982 89686, 135853 89688, 135513 89504, 135191 89009, 135189 85880, 135372 85503), (135372 90513, 135867 90191, 138996 90189, 139373 90372, 139696 90904, 139698 94033, 139514 94373, 138981 94696, 135853 94698, 135513 94514, 135191 94019, 135189 90890, 135372 90513), (135375 95520, 135867 95201, 138995 95199, 139289 95326, 139480 95496, 139696 95913, 139698 99045, 139514 99385, 138982 99708, 135853 99710, 135513 99526, 135191 99031, 135189 95900, 135375 95520), (135372 100535, 135867 100213, 138996 100211, 139373 100394, 139696 100926, 139698 104055, 139514 104395, 138982 104718, 135853 104720, 135513 104536, 135191 104041, 135189 100912, 135372 100535), (135372 105545, 135867 105223, 138996 105221, 139373 105404, 139696 105936, 139698 109065, 139514 109405, 138982 109728, 135853 109730, 135513 109546, 135191 109051, 135189 105922, 135372 105545), (135372 110555, 135867 110233, 138996 110231, 139373 110414, 139696 110946, 139698 114075, 139514 114415, 138982 114738, 135853 114740, 135513 114556, 135191 114061, 135189 110932, 135372 110555), (135372 115565, 135867 115243, 138996 115241, 139373 115424, 139696 115956, 139698 119085, 139514 119425, 138982 119748, 135853 119750, 135513 119566, 135191 119071, 135189 115942, 135372 115565), (135372 120575, 135867 120253, 138996 120251, 139373 120434, 139696 120966, 139698 124095, 139514 124435, 138982 124758, 135853 124760, 135513 124576, 135191 124081, 135189 120952, 135372 120575), (135372 125585, 135867 125263, 138996 125261, 139373 125444, 139696 125976, 139698 129105, 139514 129445, 138981 129768, 135853 129770, 135513 129586, 135191 129091, 135189 125962, 135372 125585), (135375 130592, 135867 130273, 138995 130271, 139289 130398, 139480 130568, 139696 130985, 139698 134115, 139514 134455, 138982 134778, 135853 134780, 135513 134596, 135191 134101, 135189 130972, 135375 130592), (135372 135605, 135867 135283, 138996 135281, 139373 135464, 139696 135996, 139698 139125, 139514 139465, 138982 139788, 135853 139790, 135513 139606, 135191 139111, 135189 135982, 135372 135605), (135372 140615, 135867 140293, 138996 140291, 139373 140474, 139696 141006, 139698 144136, 139514 144476, 138981 144799, 135853 144801, 135513 144617, 135191 144122, 135189 140992, 135372 140615), (135375 145623, 135867 145304, 138995 145302, 139289 145429, 139480 145599, 139696 146016, 139698 149146, 139514 149486, 138982 149809, 135853 149811, 135513 149627, 135191 149132, 135189 146003, 135375 145623), (135372 150636, 135867 150314, 138996 150312, 139373 150495, 139696 151027, 139698 154156, 139514 154496, 138982 154819, 135853 154821, 135513 154637, 135191 154142, 135189 151013, 135372 150636), (135372 155646, 135867 155324, 138996 155322, 139373 155505, 139696 156037, 139698 159166, 139514 159506, 138982 159829, 135853 159831, 135513 159647, 135191 159152, 135189 156023, 135372 155646), (135372 160656, 135867 160334, 138996 160332, 139373 160515, 139696 161047, 139698 164176, 139514 164516, 138982 164839, 135853 164841, 135513 164657, 135191 164162, 135189 161033, 135372 160656), (135372 165666, 135867 165344, 138996 165342, 139373 165525, 139696 166057, 139698 169186, 139514 169526, 138982 169849, 135853 169851, 135513 169667, 135191 169172, 135189 166043, 135372 165666), (135372 170676, 135867 170354, 138996 170352, 139373 170535, 139696 171067, 139698 174196, 139514 174536, 138982 174859, 135853 174861, 135513 174677, 135191 174182, 135189 171053, 135372 170676), (135372 175686, 135867 175364, 138996 175362, 139373 175545, 139696 176077, 139698 179206, 139514 179546, 138982 179869, 135871 179870, 135451 179629, 135191 179192, 135189 176063, 135372 175686), (135240 181510, 135278 180896, 135438 180601, 135865 180372, 138996 180372, 139373 180555, 139696 181087, 139692 183073, 139348 183547, 138829 183735, 135619 182218, 135331 181859, 135240 181510), (140273 56156, 140591 55660, 142108 55111, 144006 55170, 144376 55295, 144708 55834, 144710 58963, 144526 59303, 143994 59626, 140863 59628, 140523 59444, 140201 58949, 140199 56965, 140273 56156), (140382 60453, 140877 60131, 144008 60129, 144385 60312, 144708 60844, 144710 63973, 144526 64313, 143994 64636, 140863 64638, 140523 64454, 140201 63959, 140199 60830, 140382 60453), (140382 65463, 140877 65141, 144008 65139, 144385 65322, 144708 65854, 144710 68983, 144526 69323, 143994 69646, 140863 69648, 140523 69464, 140201 68969, 140199 65840, 140382 65463), (140382 70473, 140877 70151, 144008 70149, 144385 70332, 144708 70864, 144710 73993, 144526 74333, 143994 74656, 140863 74658, 140523 74474, 140201 73979, 140199 70850, 140382 70473), (140382 75483, 140877 75161, 144008 75159, 144385 75342, 144708 75874, 144710 79003, 144526 79343, 143994 79666, 140863 79668, 140523 79484, 140201 78989, 140199 75860, 140382 75483), (140382 80493, 140877 80171, 144008 80169, 144385 80352, 144708 80884, 144710 84013, 144526 84353, 143994 84676, 140863 84678, 140523 84494, 140201 83999, 140199 80870, 140382 80493), (140382 85503, 140877 85181, 144008 85179, 144385 85362, 144708 85894, 144710 89023, 144526 89363, 143994 89686, 140863 89688, 140523 89504, 140201 89009, 140199 85880, 140382 85503), (140382 90513, 140877 90191, 144008 90189, 144385 90372, 144708 90904, 144710 94033, 144526 94373, 143993 94696, 140863 94698, 140523 94514, 140201 94019, 140199 90890, 140382 90513), (140385 95520, 140877 95201, 144007 95199, 144301 95326, 144492 95496, 144708 95913, 144710 99045, 144526 99385, 143994 99708, 140863 99710, 140523 99526, 140201 99031, 140199 95900, 140385 95520), (140382 100535, 140877 100213, 144008 100211, 144385 100394, 144708 100926, 144710 104055, 144526 104395, 143994 104718, 140863 104720, 140523 104536, 140201 104041, 140199 100912, 140382 100535), (140382 105545, 140877 105223, 144008 105221, 144385 105404, 144708 105936, 144710 109065, 144526 109405, 143994 109728, 140863 109730, 140523 109546, 140201 109051, 140199 105922, 140382 105545), (140382 110555, 140877 110233, 144008 110231, 144385 110414, 144708 110946, 144710 114075, 144526 114415, 143994 114738, 140863 114740, 140523 114556, 140201 114061, 140199 110932, 140382 110555), (140382 115565, 140877 115243, 144008 115241, 144385 115424, 144708 115956, 144710 119085, 144526 119425, 143994 119748, 140863 119750, 140523 119566, 140201 119071, 140199 115942, 140382 115565), (140382 120575, 140877 120253, 144008 120251, 144385 120434, 144708 120966, 144710 124095, 144526 124435, 143994 124758, 140863 124760, 140523 124576, 140201 124081, 140199 120952, 140382 120575), (140382 125585, 140877 125263, 144008 125261, 144385 125444, 144708 125976, 144710 129105, 144526 129445, 143993 129768, 140863 129770, 140523 129586, 140201 129091, 140199 125962, 140382 125585), (140385 130592, 140877 130273, 144007 130271, 144301 130398, 144492 130568, 144708 130985, 144710 134115, 144526 134455, 143994 134778, 140863 134780, 140523 134596, 140201 134101, 140199 130972, 140385 130592), (140382 135605, 140877 135283, 144008 135281, 144385 135464, 144708 135996, 144710 139125, 144526 139465, 143994 139788, 140863 139790, 140523 139606, 140201 139111, 140199 135982, 140382 135605), (140382 140615, 140877 140293, 144008 140291, 144385 140474, 144708 141006, 144710 144136, 144526 144476, 143993 144799, 140863 144801, 140523 144617, 140201 144122, 140199 140992, 140382 140615), (140385 145623, 140877 145304, 144007 145302, 144301 145429, 144492 145599, 144708 146016, 144710 149146, 144526 149486, 143994 149809, 140863 149811, 140523 149627, 140201 149132, 140199 146003, 140385 145623), (140382 150636, 140877 150314, 144008 150312, 144385 150495, 144708 151027, 144710 154156, 144526 154496, 143994 154819, 140863 154821, 140523 154637, 140201 154142, 140199 151013, 140382 150636), (140382 155646, 140877 155324, 144008 155322, 144385 155505, 144708 156037, 144710 159166, 144526 159506, 143994 159829, 140863 159831, 140523 159647, 140201 159152, 140199 156023, 140382 155646), (140382 160656, 140877 160334, 144008 160332, 144385 160515, 144708 161047, 144710 164176, 144526 164516, 143994 164839, 140863 164841, 140523 164657, 140201 164162, 140199 161033, 140382 160656), (140382 165666, 140877 165344, 144008 165342, 144385 165525, 144708 166057, 144710 169186, 144526 169526, 143994 169849, 140863 169851, 140523 169667, 140201 169172, 140199 166043, 140382 165666), (140382 170676, 140877 170354, 144008 170352, 144385 170535, 144708 171067, 144710 174196, 144526 174536, 143994 174859, 140863 174861, 140523 174677, 140201 174182, 140199 171053, 140382 170676), (140382 175686, 140877 175364, 144008 175362, 144385 175545, 144708 176077, 144710 179206, 144526 179546, 143994 179869, 140863 179871, 140523 179687, 140201 179192, 140199 176063, 140382 175686), (140382 180696, 140877 180374, 144008 180372, 144385 180555, 144708 181087, 144710 184216, 144485 184603, 144221 184768, 143954 184829, 142044 184858, 140696 184382, 140421 184112, 140272 183840, 140196 183116, 140199 181073, 140382 180696), (145338 55527, 145520 55326, 145853 55170, 149097 55170, 149385 55294, 149718 55834, 149720 58963, 149536 59303, 149004 59626, 145875 59628, 145535 59444, 145213 58949, 145211 55820, 145338 55527), (145394 60453, 145889 60131, 149018 60129, 149395 60312, 149718 60844, 149720 63973, 149536 64313, 149004 64636, 145875 64638, 145535 64454, 145213 63959, 145211 60830, 145394 60453), (145394 65463, 145889 65141, 149018 65139, 149395 65322, 149718 65854, 149720 68983, 149536 69323, 149004 69646, 145875 69648, 145535 69464, 145213 68969, 145211 65840, 145394 65463), (145394 70473, 145889 70151, 149018 70149, 149395 70332, 149718 70864, 149720 73993, 149536 74333, 149004 74656, 145875 74658, 145535 74474, 145213 73979, 145211 70850, 145394 70473), (145394 75483, 145889 75161, 149018 75159, 149395 75342, 149718 75874, 149720 79003, 149536 79343, 149004 79666, 145875 79668, 145535 79484, 145213 78989, 145211 75860, 145394 75483), (145394 80493, 145889 80171, 149018 80169, 149395 80352, 149718 80884, 149720 84013, 149536 84353, 149004 84676, 145875 84678, 145535 84494, 145213 83999, 145211 80870, 145394 80493), (145394 85503, 145889 85181, 149018 85179, 149395 85362, 149718 85894, 149720 89023, 149536 89363, 149004 89686, 145875 89688, 145535 89504, 145213 89009, 145211 85880, 145394 85503), (145394 90513, 145889 90191, 149018 90189, 149395 90372, 149718 90904, 149720 94033, 149536 94373, 149003 94696, 145875 94698, 145535 94514, 145213 94019, 145211 90890, 145394 90513), (145397 95520, 145889 95201, 149017 95199, 149311 95326, 149502 95496, 149718 95913, 149720 99045, 149536 99385, 149004 99708, 145875 99710, 145535 99526, 145213 99031, 145211 95900, 145397 95520), (145394 100535, 145889 100213, 149018 100211, 149395 100394, 149718 100926, 149720 104055, 149536 104395, 149004 104718, 145875 104720, 145535 104536, 145213 104041, 145211 100912, 145394 100535), (145394 105545, 145889 105223, 149018 105221, 149395 105404, 149718 105936, 149720 109065, 149536 109405, 149004 109728, 145875 109730, 145535 109546, 145213 109051, 145211 105922, 145394 105545), (145394 110555, 145889 110233, 149018 110231, 149395 110414, 149718 110946, 149720 114075, 149536 114415, 149004 114738, 145875 114740, 145535 114556, 145213 114061, 145211 110932, 145394 110555), (145394 115565, 145889 115243, 149018 115241, 149395 115424, 149718 115956, 149720 119085, 149536 119425, 149004 119748, 145875 119750, 145535 119566, 145213 119071, 145211 115942, 145394 115565), (145394 120575, 145889 120253, 149018 120251, 149395 120434, 149718 120966, 149720 124095, 149536 124435, 149004 124758, 145875 124760, 145535 124576, 145213 124081, 145211 120952, 145394 120575), (145394 125585, 145889 125263, 149018 125261, 149395 125444, 149718 125976, 149720 129105, 149536 129445, 149003 129768, 145875 129770, 145535 129586, 145213 129091, 145211 125962, 145394 125585), (145397 130592, 145889 130273, 149017 130271, 149311 130398, 149502 130568, 149718 130985, 149720 134115, 149536 134455, 149004 134778, 145875 134780, 145535 134596, 145213 134101, 145211 130972, 145397 130592), (145394 135605, 145889 135283, 149018 135281, 149395 135464, 149718 135996, 149720 139125, 149536 139465, 149004 139788, 145875 139790, 145535 139606, 145213 139111, 145211 135982, 145394 135605), (145394 140615, 145889 140293, 149018 140291, 149395 140474, 149718 141006, 149720 144136, 149536 144476, 149003 144799, 145875 144801, 145535 144617, 145213 144122, 145211 140992, 145394 140615), (145397 145623, 145889 145304, 149017 145302, 149311 145429, 149502 145599, 149718 146016, 149720 149146, 149536 149486, 149004 149809, 145875 149811, 145535 149627, 145213 149132, 145211 146003, 145397 145623), (145394 150636, 145889 150314, 149018 150312, 149395 150495, 149718 151027, 149720 154156, 149536 154496, 149004 154819, 145875 154821, 145535 154637, 145213 154142, 145211 151013, 145394 150636), (145394 155646, 145889 155324, 149018 155322, 149395 155505, 149718 156037, 149720 159166, 149536 159506, 149004 159829, 145875 159831, 145535 159647, 145213 159152, 145211 156023, 145394 155646), (145394 160656, 145889 160334, 149018 160332, 149395 160515, 149718 161047, 149720 164176, 149536 164516, 149004 164839, 145875 164841, 145535 164657, 145213 164162, 145211 161033, 145394 160656), (145394 165666, 145889 165344, 149018 165342, 149395 165525, 149718 166057, 149720 169186, 149536 169526, 149004 169849, 145875 169851, 145535 169667, 145213 169172, 145211 166043, 145394 165666), (145394 170676, 145889 170354, 149018 170352, 149395 170535, 149718 171067, 149720 174196, 149536 174536, 149004 174859, 145875 174861, 145535 174677, 145213 174182, 145211 171053, 145394 170676), (145394 175686, 145889 175364, 149018 175362, 149395 175545, 149718 176077, 149720 179206, 149536 179546, 149004 179869, 145875 179871, 145535 179687, 145213 179192, 145211 176063, 145394 175686), (145394 180696, 145889 180374, 149018 180372, 149395 180555, 149718 181087, 149720 184216, 149537 184554, 149087 184826, 145803 184828, 145464 184629, 145213 184202, 145211 181073, 145394 180696), (150399 52983, 150683 52659, 151553 52436, 153931 52083, 154468 52318, 154729 52833, 154730 53953, 154546 54293, 154014 54616, 150885 54618, 150545 54434, 150285 53991, 150272 53354, 150399 52983), (150404 55443, 150899 55121, 154028 55119, 154405 55302, 154728 55834, 154730 58963, 154546 59303, 154014 59626, 150885 59628, 150545 59444, 150223 58949, 150221 55820, 150404 55443), (150404 60453, 150899 60131, 154028 60129, 154405 60312, 154728 60844, 154730 63973, 154546 64313, 154014 64636, 150885 64638, 150545 64454, 150223 63959, 150221 60830, 150404 60453), (150404 65463, 150899 65141, 154028 65139, 154405 65322, 154728 65854, 154730 68983, 154546 69323, 154014 69646, 150885 69648, 150545 69464, 150223 68969, 150221 65840, 150404 65463), (150404 70473, 150899 70151, 154028 70149, 154405 70332, 154728 70864, 154730 73993, 154546 74333, 154014 74656, 150885 74658, 150545 74474, 150223 73979, 150221 70850, 150404 70473), (150404 75483, 150899 75161, 154028 75159, 154405 75342, 154728 75874, 154730 79003, 154546 79343, 154014 79666, 150885 79668, 150545 79484, 150223 78989, 150221 75860, 150404 75483), (150404 80493, 150899 80171, 154028 80169, 154405 80352, 154728 80884, 154730 84013, 154546 84353, 154014 84676, 150885 84678, 150545 84494, 150223 83999, 150221 80870, 150404 80493), (150404 85503, 150899 85181, 154028 85179, 154405 85362, 154728 85894, 154730 89023, 154546 89363, 154014 89686, 150885 89688, 150545 89504, 150223 89009, 150221 85880, 150404 85503), (150404 90513, 150899 90191, 154028 90189, 154405 90372, 154728 90904, 154730 94033, 154546 94373, 154013 94696, 150885 94698, 150545 94514, 150223 94019, 150221 90890, 150404 90513), (150407 95520, 150899 95201, 154027 95199, 154321 95326, 154512 95496, 154728 95913, 154730 99045, 154546 99385, 154014 99708, 150885 99710, 150545 99526, 150223 99031, 150221 95900, 150407 95520), (150404 100535, 150899 100213, 154028 100211, 154405 100394, 154728 100926, 154730 104055, 154546 104395, 154014 104718, 150885 104720, 150545 104536, 150223 104041, 150221 100912, 150404 100535), (150404 105545, 150899 105223, 154028 105221, 154405 105404, 154728 105936, 154730 109065, 154546 109405, 154014 109728, 150885 109730, 150545 109546, 150223 109051, 150221 105922, 150404 105545), (150404 110555, 150899 110233, 154028 110231, 154405 110414, 154728 110946, 154730 114075, 154546 114415, 154014 114738, 150885 114740, 150545 114556, 150223 114061, 150221 110932, 150404 110555), (150404 115565, 150899 115243, 154028 115241, 154405 115424, 154728 115956, 154730 119085, 154546 119425, 154014 119748, 150885 119750, 150545 119566, 150223 119071, 150221 115942, 150404 115565), (150404 120575, 150899 120253, 154028 120251, 154405 120434, 154728 120966, 154730 124095, 154546 124435, 154014 124758, 150885 124760, 150545 124576, 150223 124081, 150221 120952, 150404 120575), (150404 125585, 150899 125263, 154028 125261, 154405 125444, 154728 125976, 154730 129105, 154546 129445, 154013 129768, 150885 129770, 150545 129586, 150223 129091, 150221 125962, 150404 125585), (150407 130592, 150899 130273, 154027 130271, 154321 130398, 154512 130568, 154728 130985, 154730 134115, 154546 134455, 154014 134778, 150885 134780, 150545 134596, 150223 134101, 150221 130972, 150407 130592), (150404 135605, 150899 135283, 154028 135281, 154405 135464, 154728 135996, 154730 139125, 154546 139465, 154014 139788, 150885 139790, 150545 139606, 150223 139111, 150221 135982, 150404 135605), (150404 140615, 150899 140293, 154028 140291, 154405 140474, 154728 141006, 154730 144136, 154546 144476, 154013 144799, 150885 144801, 150545 144617, 150223 144122, 150221 140992, 150404 140615), (150407 145623, 150899 145304, 154027 145302, 154321 145429, 154512 145599, 154728 146016, 154730 149146, 154546 149486, 154014 149809, 150885 149811, 150545 149627, 150223 149132, 150221 146003, 150407 145623), (150404 150636, 150899 150314, 154028 150312, 154405 150495, 154728 151027, 154730 154156, 154546 154496, 154014 154819, 150885 154821, 150545 154637, 150223 154142, 150221 151013, 150404 150636), (150404 155646, 150899 155324, 154028 155322, 154405 155505, 154728 156037, 154730 159166, 154546 159506, 154014 159829, 150885 159831, 150545 159647, 150223 159152, 150221 156023, 150404 155646), (150404 160656, 150899 160334, 154028 160332, 154405 160515, 154728 161047, 154730 164176, 154546 164516, 154014 164839, 150885 164841, 150545 164657, 150223 164162, 150221 161033, 150404 160656), (150404 165666, 150899 165344, 154028 165342, 154405 165525, 154728 166057, 154730 169186, 154546 169526, 154014 169849, 150885 169851, 150545 169667, 150223 169172, 150221 166043, 150404 165666), (150404 170676, 150899 170354, 154028 170352, 154405 170535, 154728 171067, 154730 174196, 154546 174536, 154014 174859, 150885 174861, 150545 174677, 150223 174182, 150221 171053, 150404 170676), (150404 175686, 150899 175364, 154028 175362, 154405 175545, 154728 176077, 154730 179206, 154546 179546, 154014 179869, 150885 179871, 150545 179687, 150223 179192, 150221 176063, 150404 175686), (150404 180696, 150899 180374, 154028 180372, 154405 180555, 154728 181087, 154730 184216, 154546 184556, 154014 184879, 150903 184880, 150483 184639, 150223 184202, 150221 181073, 150404 180696), (150272 186620, 150308 185916, 150470 185611, 150897 185382, 154028 185382, 154405 185565, 154728 186097, 154724 187344, 154499 187658, 153982 187918, 151553 187563, 150792 187373, 150399 187016, 150272 186620), (155354 52207, 155759 51817, 158248 51442, 159006 51405, 159515 51689, 159734 52050, 159740 53953, 159556 54293, 159024 54616, 155895 54618, 155555 54434, 155233 53939, 155231 52833, 155354 52207), (155414 55443, 155909 55121, 159038 55119, 159415 55302, 159738 55834, 159740 58963, 159556 59303, 159024 59626, 155895 59628, 155555 59444, 155233 58949, 155231 55820, 155414 55443), (155414 60453, 155909 60131, 159038 60129, 159415 60312, 159738 60844, 159740 63973, 159556 64313, 159024 64636, 155895 64638, 155555 64454, 155233 63959, 155231 60830, 155414 60453), (155414 65463, 155909 65141, 159038 65139, 159415 65322, 159738 65854, 159740 68983, 159556 69323, 159024 69646, 155895 69648, 155555 69464, 155233 68969, 155231 65840, 155414 65463), (155414 70473, 155909 70151, 159038 70149, 159415 70332, 159738 70864, 159740 73993, 159556 74333, 159024 74656, 155895 74658, 155555 74474, 155233 73979, 155231 70850, 155414 70473), (155414 75483, 155909 75161, 159038 75159, 159415 75342, 159738 75874, 159740 79003, 159556 79343, 159024 79666, 155895 79668, 155555 79484, 155233 78989, 155231 75860, 155414 75483), (155414 80493, 155909 80171, 159038 80169, 159415 80352, 159738 80884, 159740 84013, 159556 84353, 159024 84676, 155895 84678, 155555 84494, 155233 83999, 155231 80870, 155414 80493), (155414 85503, 155909 85181, 159038 85179, 159415 85362, 159738 85894, 159740 89023, 159556 89363, 159024 89686, 155895 89688, 155555 89504, 155233 89009, 155231 85880, 155414 85503), (155414 90513, 155909 90191, 159038 90189, 159415 90372, 159738 90904, 159740 94033, 159556 94373, 159023 94696, 155895 94698, 155555 94514, 155233 94019, 155231 90890, 155414 90513), (155417 95520, 155909 95201, 159037 95199, 159331 95326, 159522 95496, 159738 95913, 159740 99045, 159556 99385, 159024 99708, 155895 99710, 155555 99526, 155233 99031, 155231 95900, 155417 95520), (155414 100535, 155909 100213, 159038 100211, 159415 100394, 159738 100926, 159740 104055, 159556 104395, 159024 104718, 155895 104720, 155555 104536, 155233 104041, 155231 100912, 155414 100535), (155414 105545, 155909 105223, 159038 105221, 159415 105404, 159738 105936, 159740 109065, 159556 109405, 159024 109728, 155895 109730, 155555 109546, 155233 109051, 155231 105922, 155414 105545), (155414 110555, 155909 110233, 159038 110231, 159415 110414, 159738 110946, 159740 114075, 159556 114415, 159024 114738, 155895 114740, 155555 114556, 155233 114061, 155231 110932, 155414 110555), (155414 115565, 155909 115243, 159038 115241, 159415 115424, 159738 115956, 159740 119085, 159556 119425, 159024 119748, 155895 119750, 155555 119566, 155233 119071, 155231 115942, 155414 115565), (155414 120575, 155909 120253, 159038 120251, 159415 120434, 159738 120966, 159740 124095, 159556 124435, 159024 124758, 155895 124760, 155555 124576, 155233 124081, 155231 120952, 155414 120575), (155414 125585, 155909 125263, 159038 125261, 159415 125444, 159738 125976, 159740 129105, 159556 129445, 159023 129768, 155895 129770, 155555 129586, 155233 129091, 155231 125962, 155414 125585), (155417 130592, 155909 130273, 159037 130271, 159331 130398, 159522 130568, 159738 130985, 159740 134115, 159556 134455, 159024 134778, 155895 134780, 155555 134596, 155233 134101, 155231 130972, 155417 130592), (155414 135605, 155909 135283, 159038 135281, 159415 135464, 159738 135996, 159740 139125, 159556 139465, 159024 139788, 155895 139790, 155555 139606, 155233 139111, 155231 135982, 155414 135605), (155414 140615, 155909 140293, 159038 140291, 159415 140474, 159738 141006, 159740 144136, 159556 144476, 159023 144799, 155895 144801, 155555 144617, 155233 144122, 155231 140992, 155414 140615), (155417 145623, 155909 145304, 159037 145302, 159331 145429, 159522 145599, 159738 146016, 159740 149146, 159556 149486, 159024 149809, 155895 149811, 155555 149627, 155233 149132, 155231 146003, 155417 145623), (155414 150636, 155909 150314, 159038 150312, 159415 150495, 159738 151027, 159740 154156, 159556 154496, 159024 154819, 155895 154821, 155555 154637, 155233 154142, 155231 151013, 155414 150636), (155414 155646, 155909 155324, 159038 155322, 159415 155505, 159738 156037, 159740 159166, 159556 159506, 159024 159829, 155895 159831, 155555 159647, 155233 159152, 155231 156023, 155414 155646), (155414 160656, 155909 160334, 159038 160332, 159415 160515, 159738 161047, 159740 164176, 159556 164516, 159024 164839, 155895 164841, 155555 164657, 155233 164162, 155231 161033, 155414 160656), (155414 165666, 155909 165344, 159038 165342, 159415 165525, 159738 166057, 159740 169186, 159556 169526, 159024 169849, 155895 169851, 155555 169667, 155233 169172, 155231 166043, 155414 165666), (155414 170676, 155909 170354, 159038 170352, 159415 170535, 159738 171067, 159740 174196, 159556 174536, 159024 174859, 155895 174861, 155555 174677, 155233 174182, 155231 171053, 155414 170676), (155414 175686, 155909 175364, 159038 175362, 159415 175545, 159738 176077, 159740 179206, 159556 179546, 159024 179869, 155895 179871, 155555 179687, 155233 179192, 155231 176063, 155414 175686), (155414 180696, 155909 180374, 159038 180372, 159415 180555, 159738 181087, 159740 184216, 159556 184556, 159024 184879, 155895 184881, 155555 184697, 155233 184202, 155231 181073, 155414 180696), (155414 185706, 155909 185384, 159038 185382, 159415 185565, 159738 186097, 159738 187971, 159546 188288, 159064 188591, 158248 188557, 155833 188199, 155390 187821, 155228 187387, 155231 186083, 155414 185706), (160398 51668, 160853 51314, 164016 51159, 164535 51456, 164748 51869, 164750 53953, 164566 54293, 164034 54616, 160905 54618, 160565 54434, 160243 53939, 160238 52010, 160398 51668), (160424 55443, 160919 55121, 164048 55119, 164425 55302, 164748 55834, 164750 58963, 164566 59303, 164034 59626, 160905 59628, 160565 59444, 160243 58949, 160241 55820, 160424 55443), (160424 60453, 160919 60131, 164048 60129, 164425 60312, 164748 60844, 164750 63973, 164566 64313, 164034 64636, 160905 64638, 160565 64454, 160243 63959, 160241 60830, 160424 60453), (160424 65463, 160919 65141, 164048 65139, 164425 65322, 164748 65854, 164750 68983, 164566 69323, 164034 69646, 160905 69648, 160565 69464, 160243 68969, 160241 65840, 160424 65463), (160424 70473, 160919 70151, 164048 70149, 164425 70332, 164748 70864, 164750 73993, 164566 74333, 164034 74656, 160905 74658, 160565 74474, 160243 73979, 160241 70850, 160424 70473), (160424 75483, 160919 75161, 164048 75159, 164425 75342, 164748 75874, 164750 79003, 164566 79343, 164034 79666, 160905 79668, 160565 79484, 160243 78989, 160241 75860, 160424 75483), (160424 80493, 160919 80171, 164048 80169, 164425 80352, 164748 80884, 164750 84013, 164566 84353, 164034 84676, 160905 84678, 160565 84494, 160243 83999, 160241 80870, 160424 80493), (160424 85503, 160919 85181, 164048 85179, 164425 85362, 164748 85894, 164750 89023, 164566 89363, 164034 89686, 160905 89688, 160565 89504, 160243 89009, 160241 85880, 160424 85503), (160424 90513, 160919 90191, 164048 90189, 164425 90372, 164748 90904, 164750 94033, 164566 94373, 164033 94696, 160905 94698, 160565 94514, 160243 94019, 160241 90890, 160424 90513), (160427 95520, 160919 95201, 164047 95199, 164341 95326, 164532 95496, 164748 95913, 164750 99045, 164566 99385, 164034 99708, 160905 99710, 160565 99526, 160243 99031, 160241 95900, 160427 95520), (160424 100535, 160919 100213, 164048 100211, 164425 100394, 164748 100926, 164750 104055, 164566 104395, 164034 104718, 160905 104720, 160565 104536, 160243 104041, 160241 100912, 160424 100535), (160424 105545, 160919 105223, 164048 105221, 164425 105404, 164748 105936, 164750 109065, 164566 109405, 164034 109728, 160905 109730, 160565 109546, 160243 109051, 160241 105922, 160424 105545), (160424 110555, 160919 110233, 164048 110231, 164425 110414, 164748 110946, 164750 114075, 164566 114415, 164034 114738, 160905 114740, 160565 114556, 160243 114061, 160241 110932, 160424 110555), (160424 115565, 160919 115243, 164048 115241, 164425 115424, 164748 115956, 164750 119085, 164566 119425, 164034 119748, 160905 119750, 160565 119566, 160243 119071, 160241 115942, 160424 115565), (160424 120575, 160919 120253, 164048 120251, 164425 120434, 164748 120966, 164750 124095, 164566 124435, 164034 124758, 160905 124760, 160565 124576, 160243 124081, 160241 120952, 160424 120575), (160424 125585, 160919 125263, 164048 125261, 164425 125444, 164748 125976, 164750 129105, 164566 129445, 164033 129768, 160905 129770, 160565 129586, 160243 129091, 160241 125962, 160424 125585), (160427 130592, 160919 130273, 164047 130271, 164341 130398, 164532 130568, 164748 130985, 164750 134115, 164566 134455, 164034 134778, 160905 134780, 160565 134596, 160243 134101, 160241 130972, 160427 130592), (160424 135605, 160919 135283, 164048 135281, 164425 135464, 164748 135996, 164750 139125, 164566 139465, 164034 139788, 160905 139790, 160565 139606, 160243 139111, 160241 135982, 160424 135605), (160424 140615, 160919 140293, 164048 140291, 164425 140474, 164748 141006, 164750 144136, 164566 144476, 164033 144799, 160905 144801, 160565 144617, 160243 144122, 160241 140992, 160424 140615), (160427 145623, 160919 145304, 164047 145302, 164341 145429, 164532 145599, 164748 146016, 164750 149146, 164566 149486, 164034 149809, 160905 149811, 160565 149627, 160243 149132, 160241 146003, 160427 145623), (160424 150636, 160919 150314, 164048 150312, 164425 150495, 164748 151027, 164750 154156, 164566 154496, 164034 154819, 160905 154821, 160565 154637, 160243 154142, 160241 151013, 160424 150636), (160424 155646, 160919 155324, 164048 155322, 164425 155505, 164748 156037, 164750 159166, 164566 159506, 164034 159829, 160905 159831, 160565 159647, 160243 159152, 160241 156023, 160424 155646), (160424 160656, 160919 160334, 164048 160332, 164425 160515, 164748 161047, 164750 164176, 164566 164516, 164034 164839, 160905 164841, 160565 164657, 160243 164162, 160241 161033, 160424 160656), (160424 165666, 160919 165344, 164048 165342, 164425 165525, 164748 166057, 164750 169186, 164566 169526, 164034 169849, 160905 169851, 160565 169667, 160243 169172, 160241 166043, 160424 165666), (160424 170676, 160919 170354, 164048 170352, 164425 170535, 164748 171067, 164750 174196, 164566 174536, 164034 174859, 160905 174861, 160565 174677, 160243 174182, 160241 171053, 160424 170676), (160424 175686, 160919 175364, 164048 175362, 164425 175545, 164748 176077, 164750 179206, 164566 179546, 164034 179869, 160905 179871, 160565 179687, 160243 179192, 160241 176063, 160424 175686), (160424 180696, 160919 180374, 164048 180372, 164425 180555, 164748 181087, 164750 184216, 164566 184556, 164034 184879, 160905 184881, 160565 184697, 160243 184202, 160241 181073, 160424 180696), (160424 185706, 160919 185384, 164048 185382, 164425 185565, 164748 186097, 164750 188181, 164564 188523, 164063 188843, 160908 188689, 160429 188355, 160241 187983, 160241 186083, 160424 185706), (165435 51476, 165937 51156, 169092 51310, 169571 51644, 169759 52058, 169760 53953, 169576 54293, 169044 54616, 165915 54618, 165575 54434, 165253 53939, 165251 51854, 165435 51476), (165434 55443, 165929 55121, 169058 55119, 169435 55302, 169758 55834, 169760 58963, 169576 59303, 169044 59626, 165915 59628, 165575 59444, 165253 58949, 165251 55820, 165434 55443), (165434 60453, 165929 60131, 169058 60129, 169435 60312, 169758 60844, 169760 63973, 169576 64313, 169044 64636, 165915 64638, 165575 64454, 165253 63959, 165251 60830, 165434 60453), (165434 65463, 165929 65141, 169058 65139, 169435 65322, 169758 65854, 169760 68983, 169576 69323, 169044 69646, 165915 69648, 165575 69464, 165253 68969, 165251 65840, 165434 65463), (165434 70473, 165929 70151, 169058 70149, 169435 70332, 169758 70864, 169760 73993, 169576 74333, 169044 74656, 165915 74658, 165575 74474, 165253 73979, 165251 70850, 165434 70473), (165434 75483, 165929 75161, 169058 75159, 169435 75342, 169758 75874, 169760 79003, 169576 79343, 169044 79666, 165915 79668, 165575 79484, 165253 78989, 165251 75860, 165434 75483), (165434 80493, 165929 80171, 169058 80169, 169435 80352, 169758 80884, 169760 84013, 169576 84353, 169044 84676, 165915 84678, 165575 84494, 165253 83999, 165251 80870, 165434 80493), (165434 85503, 165929 85181, 169058 85179, 169435 85362, 169758 85894, 169760 89023, 169576 89363, 169044 89686, 165915 89688, 165575 89504, 165253 89009, 165251 85880, 165434 85503), (165434 90513, 165929 90191, 169058 90189, 169435 90372, 169758 90904, 169760 94033, 169576 94373, 169043 94696, 165915 94698, 165575 94514, 165253 94019, 165251 90890, 165434 90513), (165437 95520, 165929 95201, 169057 95199, 169351 95326, 169542 95496, 169758 95913, 169760 99045, 169576 99385, 169044 99708, 165915 99710, 165575 99526, 165253 99031, 165251 95900, 165437 95520), (165434 100535, 165929 100213, 169058 100211, 169435 100394, 169758 100926, 169760 104055, 169576 104395, 169044 104718, 165915 104720, 165575 104536, 165253 104041, 165251 100912, 165434 100535), (165434 105545, 165929 105223, 169058 105221, 169435 105404, 169758 105936, 169760 109065, 169576 109405, 169044 109728, 165915 109730, 165575 109546, 165253 109051, 165251 105922, 165434 105545), (165434 110555, 165929 110233, 169058 110231, 169435 110414, 169758 110946, 169760 114075, 169576 114415, 169044 114738, 165915 114740, 165575 114556, 165253 114061, 165251 110932, 165434 110555), (165434 115565, 165929 115243, 169058 115241, 169435 115424, 169758 115956, 169760 119085, 169576 119425, 169044 119748, 165915 119750, 165575 119566, 165253 119071, 165251 115942, 165434 115565), (165434 120575, 165929 120253, 169058 120251, 169435 120434, 169758 120966, 169760 124095, 169576 124435, 169044 124758, 165915 124760, 165575 124576, 165253 124081, 165251 120952, 165434 120575), (165434 125585, 165929 125263, 169058 125261, 169435 125444, 169758 125976, 169760 129105, 169576 129445, 169043 129768, 165915 129770, 165575 129586, 165253 129091, 165251 125962, 165434 125585), (165437 130592, 165929 130273, 169057 130271, 169351 130398, 169542 130568, 169758 130985, 169760 134115, 169576 134455, 169044 134778, 165915 134780, 165575 134596, 165253 134101, 165251 130972, 165437 130592), (165434 135605, 165929 135283, 169058 135281, 169435 135464, 169758 135996, 169760 139125, 169576 139465, 169044 139788, 165915 139790, 165575 139606, 165253 139111, 165251 135982, 165434 135605), (165434 140615, 165929 140293, 169058 140291, 169435 140474, 169758 141006, 169760 144136, 169576 144476, 169043 144799, 165915 144801, 165575 144617, 165253 144122, 165251 140992, 165434 140615), (165437 145623, 165929 145304, 169057 145302, 169351 145429, 169542 145599, 169758 146016, 169760 149146, 169576 149486, 169044 149809, 165915 149811, 165575 149627, 165253 149132, 165251 146003, 165437 145623), (165434 150636, 165929 150314, 169058 150312, 169435 150495, 169758 151027, 169760 154156, 169576 154496, 169044 154819, 165915 154821, 165575 154637, 165253 154142, 165251 151013, 165434 150636), (165434 155646, 165929 155324, 169058 155322, 169435 155505, 169758 156037, 169760 159166, 169576 159506, 169044 159829, 165915 159831, 165575 159647, 165253 159152, 165251 156023, 165434 155646), (165434 160656, 165929 160334, 169058 160332, 169435 160515, 169758 161047, 169760 164176, 169576 164516, 169044 164839, 165915 164841, 165575 164657, 165253 164162, 165251 161033, 165434 160656), (165434 165666, 165929 165344, 169058 165342, 169435 165525, 169758 166057, 169760 169186, 169576 169526, 169044 169849, 165915 169851, 165575 169667, 165253 169172, 165251 166043, 165434 165666), (165434 170676, 165929 170354, 169058 170352, 169435 170535, 169758 171067, 169760 174196, 169576 174536, 169044 174859, 165915 174861, 165575 174677, 165253 174182, 165251 171053, 165434 170676), (165434 175686, 165929 175364, 169058 175362, 169435 175545, 169758 176077, 169760 179206, 169576 179546, 169044 179869, 165915 179871, 165575 179687, 165253 179192, 165251 176063, 165434 175686), (165434 180696, 165929 180374, 169058 180372, 169435 180555, 169758 181087, 169760 184216, 169576 184556, 169044 184879, 165915 184881, 165575 184697, 165253 184202, 165251 181073, 165434 180696), (165434 185706, 165929 185384, 169058 185382, 169435 185565, 169758 186097, 169762 187993, 169602 188331, 169148 188685, 165984 188840, 165465 188543, 165253 188165, 165251 186083, 165434 185706), (170261 52069, 170454 51711, 170935 51408, 171751 51442, 174167 51800, 174610 52178, 174769 52518, 174770 53953, 174586 54293, 174054 54616, 170925 54618, 170585 54434, 170263 53939, 170261 52069), (170444 55443, 170939 55121, 174068 55119, 174445 55302, 174768 55834, 174770 58963, 174586 59303, 174054 59626, 170925 59628, 170585 59444, 170263 58949, 170261 55820, 170444 55443), (170444 60453, 170939 60131, 174068 60129, 174445 60312, 174768 60844, 174770 63973, 174586 64313, 174054 64636, 170925 64638, 170585 64454, 170263 63959, 170261 60830, 170444 60453), (170444 65463, 170939 65141, 174068 65139, 174445 65322, 174768 65854, 174770 68983, 174586 69323, 174054 69646, 170925 69648, 170585 69464, 170263 68969, 170261 65840, 170444 65463), (170444 70473, 170939 70151, 174068 70149, 174445 70332, 174768 70864, 174770 73993, 174586 74333, 174054 74656, 170925 74658, 170585 74474, 170263 73979, 170261 70850, 170444 70473), (170444 75483, 170939 75161, 174068 75159, 174445 75342, 174768 75874, 174770 79003, 174586 79343, 174054 79666, 170925 79668, 170585 79484, 170263 78989, 170261 75860, 170444 75483), (170444 80493, 170939 80171, 174068 80169, 174445 80352, 174768 80884, 174770 84013, 174586 84353, 174054 84676, 170925 84678, 170585 84494, 170263 83999, 170261 80870, 170444 80493), (170444 85503, 170939 85181, 174068 85179, 174445 85362, 174768 85894, 174770 89023, 174586 89363, 174054 89686, 170925 89688, 170585 89504, 170263 89009, 170261 85880, 170444 85503), (170444 90513, 170939 90191, 174068 90189, 174445 90372, 174768 90904, 174770 94033, 174586 94373, 174053 94696, 170925 94698, 170585 94514, 170263 94019, 170261 90890, 170444 90513), (170447 95520, 170939 95201, 174067 95199, 174361 95326, 174552 95496, 174768 95913, 174770 99045, 174586 99385, 174054 99708, 170925 99710, 170585 99526, 170263 99031, 170261 95900, 170447 95520), (170444 100535, 170939 100213, 174068 100211, 174445 100394, 174768 100926, 174770 104055, 174586 104395, 174054 104718, 170925 104720, 170585 104536, 170263 104041, 170261 100912, 170444 100535), (170444 105545, 170939 105223, 174068 105221, 174445 105404, 174768 105936, 174770 109065, 174586 109405, 174054 109728, 170925 109730, 170585 109546, 170263 109051, 170261 105922, 170444 105545), (170444 110555, 170939 110233, 174068 110231, 174445 110414, 174768 110946, 174770 114075, 174586 114415, 174054 114738, 170925 114740, 170585 114556, 170263 114061, 170261 110932, 170444 110555), (170444 115565, 170939 115243, 174068 115241, 174445 115424, 174768 115956, 174770 119085, 174586 119425, 174054 119748, 170925 119750, 170585 119566, 170263 119071, 170261 115942, 170444 115565), (170444 120575, 170939 120253, 174068 120251, 174445 120434, 174768 120966, 174770 124095, 174586 124435, 174054 124758, 170925 124760, 170585 124576, 170263 124081, 170261 120952, 170444 120575), (170444 125585, 170939 125263, 174068 125261, 174445 125444, 174768 125976, 174770 129105, 174586 129445, 174053 129768, 170925 129770, 170585 129586, 170263 129091, 170261 125962, 170444 125585), (170447 130592, 170939 130273, 174067 130271, 174361 130398, 174552 130568, 174768 130985, 174770 134115, 174586 134455, 174054 134778, 170925 134780, 170585 134596, 170263 134101, 170261 130972, 170447 130592), (170444 135605, 170939 135283, 174068 135281, 174445 135464, 174768 135996, 174770 139125, 174586 139465, 174054 139788, 170925 139790, 170585 139606, 170263 139111, 170261 135982, 170444 135605), (170444 140615, 170939 140293, 174068 140291, 174445 140474, 174768 141006, 174770 144136, 174586 144476, 174053 144799, 170925 144801, 170585 144617, 170263 144122, 170261 140992, 170444 140615), (170447 145623, 170939 145304, 174067 145302, 174361 145429, 174552 145599, 174768 146016, 174770 149146, 174586 149486, 174054 149809, 170925 149811, 170585 149627, 170263 149132, 170261 146003, 170447 145623), (170444 150636, 170939 150314, 174068 150312, 174445 150495, 174768 151027, 174770 154156, 174586 154496, 174054 154819, 170925 154821, 170585 154637, 170263 154142, 170261 151013, 170444 150636), (170444 155646, 170939 155324, 174068 155322, 174445 155505, 174768 156037, 174770 159166, 174586 159506, 174054 159829, 170925 159831, 170585 159647, 170263 159152, 170261 156023, 170444 155646), (170444 160656, 170939 160334, 174068 160332, 174445 160515, 174768 161047, 174770 164176, 174586 164516, 174054 164839, 170925 164841, 170585 164657, 170263 164162, 170261 161033, 170444 160656), (170444 165666, 170939 165344, 174068 165342, 174445 165525, 174768 166057, 174770 169186, 174586 169526, 174054 169849, 170925 169851, 170585 169667, 170263 169172, 170261 166043, 170444 165666), (170444 170676, 170939 170354, 174068 170352, 174445 170535, 174768 171067, 174770 174196, 174586 174536, 174054 174859, 170925 174861, 170585 174677, 170263 174182, 170261 171053, 170444 170676), (170444 175686, 170939 175364, 174068 175362, 174445 175545, 174768 176077, 174770 179206, 174586 179546, 174054 179869, 170925 179871, 170585 179687, 170263 179192, 170261 176063, 170444 175686), (170444 180696, 170939 180374, 174068 180372, 174445 180555, 174768 181087, 174770 184216, 174586 184556, 174054 184879, 170925 184881, 170585 184697, 170263 184202, 170261 181073, 170444 180696), (170444 185706, 170939 185384, 174068 185382, 174445 185565, 174768 186097, 174772 187323, 174646 187793, 174241 188182, 171751 188557, 170994 188594, 170485 188310, 170267 187952, 170261 186083, 170444 185706), (175271 52624, 175501 52341, 176018 52081, 178446 52436, 179208 52626, 179601 52983, 179728 53379, 179692 54083, 179531 54388, 179150 54617, 175935 54618, 175595 54434, 175273 53939, 175271 52624), (175454 55443, 175949 55121, 179143 55120, 179517 55360, 179778 55834, 179780 58963, 179596 59303, 179064 59626, 175935 59628, 175595 59444, 175273 58949, 175271 55820, 175454 55443), (175454 60453, 175949 60131, 179078 60129, 179455 60312, 179778 60844, 179780 63973, 179596 64313, 179064 64636, 175935 64638, 175595 64454, 175273 63959, 175271 60830, 175454 60453), (175454 65463, 175949 65141, 179078 65139, 179455 65322, 179778 65854, 179780 68983, 179596 69323, 179064 69646, 175935 69648, 175595 69464, 175273 68969, 175271 65840, 175454 65463), (175454 70473, 175949 70151, 179078 70149, 179455 70332, 179778 70864, 179780 73993, 179596 74333, 179064 74656, 175935 74658, 175595 74474, 175273 73979, 175271 70850, 175454 70473), (175454 75483, 175949 75161, 179078 75159, 179455 75342, 179778 75874, 179780 79003, 179596 79343, 179064 79666, 175935 79668, 175595 79484, 175273 78989, 175271 75860, 175454 75483), (175454 80493, 175949 80171, 179078 80169, 179455 80352, 179778 80884, 179780 84013, 179596 84353, 179064 84676, 175935 84678, 175595 84494, 175273 83999, 175271 80870, 175454 80493), (175454 85503, 175949 85181, 179078 85179, 179455 85362, 179778 85894, 179780 89023, 179596 89363, 179064 89686, 175935 89688, 175595 89504, 175273 89009, 175271 85880, 175454 85503), (175454 90513, 175949 90191, 179078 90189, 179455 90372, 179778 90904, 179780 94033, 179596 94373, 179063 94696, 175935 94698, 175595 94514, 175273 94019, 175271 90890, 175454 90513), (175457 95520, 175949 95201, 179077 95199, 179371 95326, 179562 95496, 179778 95913, 179780 99045, 179596 99385, 179064 99708, 175935 99710, 175595 99526, 175273 99031, 175271 95900, 175457 95520), (175454 100535, 175949 100213, 179078 100211, 179455 100394, 179778 100926, 179780 104055, 179596 104395, 179064 104718, 175935 104720, 175595 104536, 175273 104041, 175271 100912, 175454 100535), (175454 105545, 175949 105223, 179078 105221, 179455 105404, 179778 105936, 179780 109065, 179596 109405, 179064 109728, 175935 109730, 175595 109546, 175273 109051, 175271 105922, 175454 105545), (175454 110555, 175949 110233, 179078 110231, 179455 110414, 179778 110946, 179780 114075, 179596 114415, 179064 114738, 175935 114740, 175595 114556, 175273 114061, 175271 110932, 175454 110555), (175454 115565, 175949 115243, 179078 115241, 179455 115424, 179778 115956, 179780 119085, 179596 119425, 179064 119748, 175935 119750, 175595 119566, 175273 119071, 175271 115942, 175454 115565), (175454 120575, 175949 120253, 179078 120251, 179455 120434, 179778 120966, 179780 124095, 179596 124435, 179064 124758, 175935 124760, 175595 124576, 175273 124081, 175271 120952, 175454 120575), (175454 125585, 175949 125263, 179078 125261, 179455 125444, 179778 125976, 179780 129105, 179596 129445, 179063 129768, 175935 129770, 175595 129586, 175273 129091, 175271 125962, 175454 125585), (175457 130592, 175949 130273, 179077 130271, 179371 130398, 179562 130568, 179778 130985, 179780 134115, 179596 134455, 179064 134778, 175935 134780, 175595 134596, 175273 134101, 175271 130972, 175457 130592), (175454 135605, 175949 135283, 179078 135281, 179455 135464, 179778 135996, 179780 139125, 179596 139465, 179064 139788, 175935 139790, 175595 139606, 175273 139111, 175271 135982, 175454 135605), (175454 140615, 175949 140293, 179078 140291, 179455 140474, 179778 141006, 179780 144136, 179596 144476, 179063 144799, 175935 144801, 175595 144617, 175273 144122, 175271 140992, 175454 140615), (175457 145623, 175949 145304, 179077 145302, 179371 145429, 179562 145599, 179778 146016, 179780 149146, 179596 149486, 179064 149809, 175935 149811, 175595 149627, 175273 149132, 175271 146003, 175457 145623), (175454 150636, 175949 150314, 179078 150312, 179455 150495, 179778 151027, 179780 154156, 179596 154496, 179064 154819, 175935 154821, 175595 154637, 175273 154142, 175271 151013, 175454 150636), (175454 155646, 175949 155324, 179078 155322, 179455 155505, 179778 156037, 179780 159166, 179596 159506, 179064 159829, 175935 159831, 175595 159647, 175273 159152, 175271 156023, 175454 155646), (175454 160656, 175949 160334, 179078 160332, 179455 160515, 179778 161047, 179780 164176, 179596 164516, 179064 164839, 175935 164841, 175595 164657, 175273 164162, 175271 161033, 175454 160656), (175454 165666, 175949 165344, 179078 165342, 179455 165525, 179778 166057, 179780 169186, 179596 169526, 179064 169849, 175935 169851, 175595 169667, 175273 169172, 175271 166043, 175454 165666), (175454 170676, 175949 170354, 179078 170352, 179455 170535, 179778 171067, 179780 174196, 179596 174536, 179064 174859, 175935 174861, 175595 174677, 175273 174182, 175271 171053, 175454 170676), (175454 175686, 175949 175364, 179078 175362, 179455 175545, 179778 176077, 179780 179206, 179596 179546, 179064 179869, 175935 179871, 175595 179687, 175273 179192, 175271 176063, 175454 175686), (175454 180696, 175949 180374, 179078 180372, 179455 180555, 179778 181087, 179780 184216, 179596 184556, 179064 184879, 175935 184881, 175595 184697, 175273 184202, 175271 181073, 175454 180696), (175454 185706, 175949 185384, 179078 185382, 179455 185565, 179715 186008, 179728 186645, 179601 187016, 179317 187340, 178446 187563, 176069 187917, 175532 187682, 175277 187280, 175271 186083, 175454 185706), (180463 55445, 180913 55173, 184197 55171, 184536 55370, 184788 55834, 184790 58963, 184606 59303, 184074 59626, 180945 59628, 180605 59444, 180283 58949, 180281 55820, 180463 55445), (180464 60453, 180959 60131, 184088 60129, 184465 60312, 184788 60844, 184790 63973, 184606 64313, 184074 64636, 180945 64638, 180605 64454, 180283 63959, 180281 60830, 180464 60453), (180464 65463, 180959 65141, 184088 65139, 184465 65322, 184788 65854, 184790 68983, 184606 69323, 184074 69646, 180945 69648, 180605 69464, 180283 68969, 180281 65840, 180464 65463), (180464 70473, 180959 70151, 184088 70149, 184465 70332, 184788 70864, 184790 73993, 184606 74333, 184074 74656, 180945 74658, 180605 74474, 180283 73979, 180281 70850, 180464 70473), (180464 75483, 180959 75161, 184088 75159, 184465 75342, 184788 75874, 184790 79003, 184606 79343, 184074 79666, 180945 79668, 180605 79484, 180283 78989, 180281 75860, 180464 75483), (180464 80493, 180959 80171, 184088 80169, 184465 80352, 184788 80884, 184790 84013, 184606 84353, 184074 84676, 180945 84678, 180605 84494, 180283 83999, 180281 80870, 180464 80493), (180464 85503, 180959 85181, 184088 85179, 184465 85362, 184788 85894, 184790 89023, 184606 89363, 184074 89686, 180945 89688, 180605 89504, 180283 89009, 180281 85880, 180464 85503), (180464 90513, 180959 90191, 184088 90189, 184465 90372, 184788 90904, 184790 94033, 184606 94373, 184073 94696, 180945 94698, 180605 94514, 180283 94019, 180281 90890, 180464 90513), (180467 95520, 180959 95201, 184087 95199, 184381 95326, 184572 95496, 184788 95913, 184790 99045, 184606 99385, 184074 99708, 180945 99710, 180605 99526, 180283 99031, 180281 95900, 180467 95520), (180464 100535, 180959 100213, 184088 100211, 184465 100394, 184788 100926, 184790 104055, 184606 104395, 184074 104718, 180945 104720, 180605 104536, 180283 104041, 180281 100912, 180464 100535), (180464 105545, 180959 105223, 184088 105221, 184465 105404, 184788 105936, 184790 109065, 184606 109405, 184074 109728, 180945 109730, 180605 109546, 180283 109051, 180281 105922, 180464 105545), (180464 110555, 180959 110233, 184088 110231, 184465 110414, 184788 110946, 184790 114075, 184606 114415, 184074 114738, 180945 114740, 180605 114556, 180283 114061, 180281 110932, 180464 110555), (180464 115565, 180959 115243, 184088 115241, 184465 115424, 184788 115956, 184790 119085, 184606 119425, 184074 119748, 180945 119750, 180605 119566, 180283 119071, 180281 115942, 180464 115565), (180464 120575, 180959 120253, 184088 120251, 184465 120434, 184788 120966, 184790 124095, 184606 124435, 184074 124758, 180945 124760, 180605 124576, 180283 124081, 180281 120952, 180464 120575), (180464 125585, 180959 125263, 184088 125261, 184465 125444, 184788 125976, 184790 129105, 184606 129445, 184073 129768, 180945 129770, 180605 129586, 180283 129091, 180281 125962, 180464 125585), (180467 130592, 180959 130273, 184087 130271, 184381 130398, 184572 130568, 184788 130985, 184790 134115, 184606 134455, 184074 134778, 180945 134780, 180605 134596, 180283 134101, 180281 130972, 180467 130592), (180464 135605, 180959 135283, 184088 135281, 184465 135464, 184788 135996, 184790 139125, 184606 139465, 184074 139788, 180945 139790, 180605 139606, 180283 139111, 180281 135982, 180464 135605), (180464 140615, 180959 140293, 184088 140291, 184465 140474, 184788 141006, 184790 144136, 184606 144476, 184073 144799, 180945 144801, 180605 144617, 180283 144122, 180281 140992, 180464 140615), (180467 145623, 180959 145304, 184087 145302, 184381 145429, 184572 145599, 184788 146016, 184790 149146, 184606 149486, 184074 149809, 180945 149811, 180605 149627, 180283 149132, 180281 146003, 180467 145623), (180464 150636, 180959 150314, 184088 150312, 184465 150495, 184788 151027, 184790 154156, 184606 154496, 184074 154819, 180945 154821, 180605 154637, 180283 154142, 180281 151013, 180464 150636), (180464 155646, 180959 155324, 184088 155322, 184465 155505, 184788 156037, 184790 159166, 184606 159506, 184074 159829, 180945 159831, 180605 159647, 180283 159152, 180281 156023, 180464 155646), (180464 160656, 180959 160334, 184088 160332, 184465 160515, 184788 161047, 184790 164176, 184606 164516, 184074 164839, 180945 164841, 180605 164657, 180283 164162, 180281 161033, 180464 160656), (180464 165666, 180959 165344, 184088 165342, 184465 165525, 184788 166057, 184790 169186, 184606 169526, 184074 169849, 180945 169851, 180605 169667, 180283 169172, 180281 166043, 180464 165666), (180464 170676, 180959 170354, 184088 170352, 184465 170535, 184788 171067, 184790 174196, 184606 174536, 184074 174859, 180945 174861, 180605 174677, 180283 174182, 180281 171053, 180464 170676), (180464 175686, 180959 175364, 184088 175362, 184465 175545, 184788 176077, 184790 179206, 184606 179546, 184074 179869, 180945 179871, 180605 179687, 180283 179192, 180281 176063, 180464 175686), (180464 180696, 180959 180374, 184088 180372, 184465 180555, 184788 181087, 184790 184216, 184480 184673, 184147 184829, 180903 184829, 180615 184704, 180283 184202, 180281 181073, 180464 180696), (185418 55527, 185599 55327, 186046 55170, 187958 55142, 189303 55617, 189578 55887, 189728 56165, 189805 57036, 189801 58963, 189500 59414, 189085 59626, 185955 59628, 185615 59444, 185293 58949, 185291 55820, 185418 55527), (185474 60453, 185969 60131, 189099 60129, 189475 60312, 189799 60844, 189801 63973, 189617 64313, 189085 64636, 185955 64638, 185615 64454, 185293 63959, 185291 60830, 185474 60453), (185474 65463, 185969 65141, 189099 65139, 189476 65322, 189799 65854, 189801 68983, 189617 69323, 189085 69646, 185955 69648, 185615 69464, 185293 68969, 185291 65840, 185474 65463), (185474 70473, 185969 70151, 189099 70149, 189476 70332, 189799 70864, 189801 73993, 189617 74333, 189085 74656, 185955 74658, 185615 74474, 185293 73979, 185291 70850, 185474 70473), (185474 75483, 185969 75161, 189099 75159, 189476 75342, 189799 75874, 189801 79003, 189617 79343, 189085 79666, 185955 79668, 185615 79484, 185293 78989, 185291 75860, 185474 75483), (185474 80493, 185969 80171, 189099 80169, 189476 80352, 189799 80884, 189801 84013, 189617 84353, 189085 84676, 185955 84678, 185615 84494, 185293 83999, 185291 80870, 185474 80493), (185474 85503, 185969 85181, 189099 85179, 189476 85362, 189799 85894, 189801 89023, 189617 89363, 189085 89686, 185955 89688, 185615 89504, 185293 89009, 185291 85880, 185474 85503), (185474 90513, 185969 90191, 189099 90189, 189476 90372, 189799 90904, 189801 94033, 189617 94373, 189084 94696, 185955 94698, 185615 94514, 185293 94019, 185291 90890, 185474 90513), (185477 95520, 185969 95201, 189098 95199, 189392 95326, 189583 95496, 189799 95913, 189801 99045, 189617 99385, 189085 99708, 185955 99710, 185615 99526, 185293 99031, 185291 95900, 185477 95520), (185474 100535, 185969 100213, 189099 100211, 189476 100394, 189799 100926, 189801 104055, 189617 104395, 189085 104718, 185955 104720, 185615 104536, 185293 104041, 185291 100912, 185474 100535), (185474 105545, 185969 105223, 189099 105221, 189476 105404, 189799 105936, 189801 109065, 189617 109405, 189085 109728, 185955 109730, 185615 109546, 185293 109051, 185291 105922, 185474 105545), (185474 110555, 185969 110233, 189099 110231, 189476 110414, 189799 110946, 189801 114075, 189617 114415, 189085 114738, 185955 114740, 185615 114556, 185293 114061, 185291 110932, 185474 110555), (185474 115565, 185969 115243, 189099 115241, 189476 115424, 189799 115956, 189801 119085, 189617 119425, 189085 119748, 185955 119750, 185615 119566, 185293 119071, 185291 115942, 185474 115565), (185474 120575, 185969 120253, 189099 120251, 189476 120434, 189799 120966, 189801 124095, 189617 124435, 189085 124758, 185955 124760, 185615 124576, 185293 124081, 185291 120952, 185474 120575), (185474 125585, 185969 125263, 189099 125261, 189476 125444, 189799 125976, 189801 129105, 189617 129445, 189084 129768, 185955 129770, 185615 129586, 185293 129091, 185291 125962, 185474 125585), (185477 130592, 185969 130273, 189098 130271, 189392 130398, 189583 130568, 189799 130985, 189801 134115, 189617 134455, 189085 134778, 185955 134780, 185615 134596, 185293 134101, 185291 130972, 185477 130592), (185474 135605, 185969 135283, 189099 135281, 189476 135464, 189799 135996, 189801 139125, 189617 139465, 189085 139788, 185955 139790, 185615 139606, 185293 139111, 185291 135982, 185474 135605), (185474 140615, 185969 140293, 189099 140291, 189476 140474, 189799 141006, 189801 144136, 189617 144476, 189084 144799, 185955 144801, 185615 144617, 185293 144122, 185291 140992, 185474 140615), (185477 145623, 185969 145304, 189098 145302, 189392 145429, 189583 145599, 189799 146016, 189801 149146, 189617 149486, 189085 149809, 185955 149811, 185615 149627, 185293 149132, 185291 146003, 185477 145623), (185474 150636, 185969 150314, 189099 150312, 189476 150495, 189799 151027, 189801 154156, 189617 154496, 189085 154819, 185955 154821, 185615 154637, 185293 154142, 185291 151013, 185474 150636), (185474 155646, 185969 155324, 189099 155322, 189476 155505, 189799 156037, 189801 159166, 189617 159506, 189085 159829, 185955 159831, 185615 159647, 185293 159152, 185291 156023, 185474 155646), (185474 160656, 185969 160334, 189099 160332, 189476 160515, 189799 161047, 189801 164176, 189617 164516, 189085 164839, 185955 164841, 185615 164657, 185293 164162, 185291 161033, 185474 160656), (185474 165666, 185969 165344, 189099 165342, 189476 165525, 189799 166057, 189801 169186, 189617 169526, 189085 169849, 185955 169851, 185615 169667, 185293 169172, 185291 166043, 185474 165666), (185474 170676, 185969 170354, 189099 170352, 189476 170535, 189799 171067, 189801 174196, 189617 174536, 189085 174859, 185955 174861, 185615 174677, 185293 174182, 185291 171053, 185474 170676), (185474 175686, 185969 175364, 189099 175362, 189476 175545, 189799 176077, 189801 179206, 189617 179546, 189085 179869, 185955 179871, 185615 179687, 185293 179192, 185291 176063, 185474 175686), (185474 180696, 185969 180374, 189099 180372, 189476 180555, 189799 181096, 189808 183185, 189728 183837, 189408 184339, 187891 184888, 185994 184829, 185624 184704, 185293 184202, 185291 181073, 185474 180696), (190428 180780, 190600 180587, 190980 180374, 194109 180372, 194486 180555, 194665 180796, 194757 181482, 194668 181859, 194480 182164, 191338 183654, 190912 183625, 190627 183517, 190325 183141, 190301 181082, 190428 180780), (190319 57039, 190668 56463, 191185 56275, 194380 57781, 194668 58140, 194759 58489, 194721 59102, 194562 59398, 194181 59627, 190963 59628, 190625 59445, 190304 58949, 190319 57039), (190485 60453, 190979 60131, 194174 60130, 194548 60370, 194809 60844, 194811 63973, 194627 64313, 194095 64636, 190966 64638, 190626 64454, 190304 63959, 190302 60830, 190485 60453), (190485 65463, 190980 65141, 194109 65139, 194486 65322, 194809 65854, 194811 68983, 194627 69323, 194095 69646, 190966 69648, 190626 69464, 190304 68969, 190302 65840, 190485 65463), (190485 70473, 190980 70151, 194109 70149, 194486 70332, 194809 70864, 194811 73993, 194627 74333, 194095 74656, 190966 74658, 190626 74474, 190304 73979, 190302 70850, 190485 70473), (190485 75483, 190980 75161, 194109 75159, 194486 75342, 194809 75874, 194811 79003, 194627 79343, 194095 79666, 190966 79668, 190626 79484, 190304 78989, 190302 75860, 190485 75483), (190485 80493, 190980 80171, 194109 80169, 194486 80352, 194809 80884, 194811 84013, 194627 84353, 194095 84676, 190966 84678, 190626 84494, 190304 83999, 190302 80870, 190485 80493), (190485 85503, 190980 85181, 194109 85179, 194486 85362, 194809 85894, 194811 89023, 194627 89363, 194095 89686, 190966 89688, 190626 89504, 190304 89009, 190302 85880, 190485 85503), (190485 90513, 190980 90191, 194109 90189, 194486 90372, 194809 90904, 194811 94033, 194627 94373, 194094 94696, 190966 94698, 190626 94514, 190304 94019, 190302 90890, 190485 90513), (190488 95520, 190980 95201, 194108 95199, 194402 95326, 194593 95496, 194809 95913, 194811 99045, 194627 99385, 194095 99708, 190966 99710, 190626 99526, 190304 99031, 190302 95900, 190488 95520), (190485 100535, 190980 100213, 194109 100211, 194486 100394, 194809 100926, 194811 104055, 194627 104395, 194095 104718, 190966 104720, 190626 104536, 190304 104041, 190302 100912, 190485 100535), (190485 105545, 190980 105223, 194109 105221, 194486 105404, 194809 105936, 194811 109065, 194627 109405, 194095 109728, 190966 109730, 190626 109546, 190304 109051, 190302 105922, 190485 105545), (190485 110555, 190980 110233, 194109 110231, 194486 110414, 194809 110946, 194811 114075, 194627 114415, 194095 114738, 190966 114740, 190626 114556, 190304 114061, 190302 110932, 190485 110555), (190485 115565, 190980 115243, 194109 115241, 194486 115424, 194809 115956, 194811 119085, 194627 119425, 194095 119748, 190966 119750, 190626 119566, 190304 119071, 190302 115942, 190485 115565), (190485 120575, 190980 120253, 194109 120251, 194486 120434, 194809 120966, 194811 124095, 194627 124435, 194095 124758, 190966 124760, 190626 124576, 190304 124081, 190302 120952, 190485 120575), (190485 125585, 190980 125263, 194109 125261, 194486 125444, 194809 125976, 194811 129105, 194627 129445, 194094 129768, 190966 129770, 190626 129586, 190304 129091, 190302 125962, 190485 125585), (190488 130592, 190980 130273, 194108 130271, 194402 130398, 194593 130568, 194809 130985, 194811 134115, 194627 134455, 194095 134778, 190966 134780, 190626 134596, 190304 134101, 190302 130972, 190488 130592), (190485 135605, 190980 135283, 194109 135281, 194486 135464, 194809 135996, 194811 139125, 194627 139465, 194095 139788, 190966 139790, 190626 139606, 190304 139111, 190302 135982, 190485 135605), (190485 140615, 190980 140293, 194109 140291, 194486 140474, 194809 141006, 194811 144136, 194627 144476, 194094 144799, 190966 144801, 190626 144617, 190304 144122, 190302 140992, 190485 140615), (190488 145623, 190980 145304, 194108 145302, 194402 145429, 194593 145599, 194809 146016, 194811 149146, 194627 149486, 194095 149809, 190966 149811, 190626 149627, 190304 149132, 190302 146003, 190488 145623), (190485 150636, 190980 150314, 194109 150312, 194486 150495, 194809 151027, 194811 154156, 194627 154496, 194095 154819, 190966 154821, 190626 154637, 190304 154142, 190302 151013, 190485 150636), (190485 155646, 190980 155324, 194109 155322, 194486 155505, 194809 156037, 194811 159166, 194627 159506, 194095 159829, 190966 159831, 190626 159647, 190304 159152, 190302 156023, 190485 155646), (190485 160656, 190980 160334, 194109 160332, 194486 160515, 194809 161047, 194811 164176, 194627 164516, 194095 164839, 190966 164841, 190626 164657, 190304 164162, 190302 161033, 190485 160656), (190485 165666, 190980 165344, 194109 165342, 194486 165525, 194809 166057, 194811 169186, 194627 169526, 194095 169849, 190966 169851, 190626 169667, 190304 169172, 190302 166043, 190485 165666), (190485 170676, 190980 170354, 194109 170352, 194486 170535, 194809 171067, 194811 174196, 194627 174536, 194095 174859, 190966 174861, 190626 174677, 190304 174182, 190302 171053, 190485 170676), (190485 175686, 190980 175364, 194109 175362, 194486 175545, 194809 176077, 194811 179206, 194627 179546, 194095 179869, 190966 179871, 190625 179686, 190304 179192, 190302 176063, 190485 175686), (195494 60455, 195621 60337, 195984 60185, 197368 60180, 199010 60170, 199566 60543, 199769 61074, 199820 62276, 199821 63973, 199637 64313, 199105 64636, 195976 64638, 195636 64454, 195314 63959, 195312 60830, 195494 60455), (195495 65463, 195990 65141, 199119 65139, 199496 65322, 199819 65854, 199821 68983, 199637 69323, 199105 69646, 195976 69648, 195636 69464, 195314 68969, 195312 65840, 195495 65463), (195495 70473, 195990 70151, 199119 70149, 199496 70332, 199819 70864, 199821 73993, 199637 74333, 199105 74656, 195976 74658, 195636 74474, 195314 73979, 195312 70850, 195495 70473), (195495 75483, 195990 75161, 199119 75159, 199496 75342, 199819 75874, 199821 79003, 199637 79343, 199105 79666, 195976 79668, 195636 79484, 195314 78989, 195312 75860, 195495 75483), (195495 80493, 195990 80171, 199119 80169, 199496 80352, 199819 80884, 199821 84013, 199637 84353, 199105 84676, 195976 84678, 195636 84494, 195314 83999, 195312 80870, 195495 80493), (195495 85503, 195990 85181, 199119 85179, 199496 85362, 199819 85894, 199821 89023, 199637 89363, 199105 89686, 195976 89688, 195636 89504, 195314 89009, 195312 85880, 195495 85503), (195495 90513, 195990 90191, 199119 90189, 199496 90372, 199819 90904, 199821 94033, 199637 94373, 199104 94696, 195976 94698, 195636 94514, 195314 94019, 195312 90890, 195495 90513), (195498 95520, 195990 95201, 199118 95199, 199412 95326, 199603 95496, 199819 95913, 199821 99045, 199637 99385, 199105 99708, 195976 99710, 195636 99526, 195314 99031, 195312 95900, 195498 95520), (195495 100535, 195990 100213, 199119 100211, 199496 100394, 199819 100926, 199821 104055, 199637 104395, 199105 104718, 195976 104720, 195636 104536, 195314 104041, 195312 100912, 195495 100535), (195495 105545, 195990 105223, 199119 105221, 199496 105404, 199819 105936, 199821 109065, 199637 109405, 199105 109728, 195976 109730, 195636 109546, 195314 109051, 195312 105922, 195495 105545), (195495 110555, 195990 110233, 199119 110231, 199496 110414, 199819 110946, 199821 114075, 199637 114415, 199105 114738, 195976 114740, 195636 114556, 195314 114061, 195312 110932, 195495 110555), (195495 115565, 195990 115243, 199119 115241, 199496 115424, 199819 115956, 199821 119085, 199637 119425, 199105 119748, 195976 119750, 195636 119566, 195314 119071, 195312 115942, 195495 115565), (195495 120575, 195990 120253, 199119 120251, 199496 120434, 199819 120966, 199821 124095, 199637 124435, 199105 124758, 195976 124760, 195636 124576, 195314 124081, 195312 120952, 195495 120575), (195495 125585, 195990 125263, 199119 125261, 199496 125444, 199819 125976, 199821 129105, 199637 129445, 199104 129768, 195976 129770, 195636 129586, 195314 129091, 195312 125962, 195495 125585), (195498 130592, 195990 130273, 199118 130271, 199412 130398, 199603 130568, 199819 130985, 199821 134115, 199637 134455, 199105 134778, 195976 134780, 195636 134596, 195314 134101, 195312 130972, 195498 130592), (195495 135605, 195990 135283, 199119 135281, 199496 135464, 199819 135996, 199821 139125, 199637 139465, 199105 139788, 195976 139790, 195636 139606, 195314 139111, 195312 135982, 195495 135605), (195495 140615, 195990 140293, 199119 140291, 199496 140474, 199819 141006, 199821 144136, 199637 144476, 199104 144799, 195976 144801, 195636 144617, 195314 144122, 195312 140992, 195495 140615), (195498 145623, 195990 145304, 199118 145302, 199412 145429, 199603 145599, 199819 146016, 199821 149146, 199637 149486, 199105 149809, 195976 149811, 195636 149627, 195314 149132, 195312 146003, 195498 145623), (195495 150636, 195990 150314, 199119 150312, 199496 150495, 199819 151027, 199821 154156, 199637 154496, 199105 154819, 195976 154821, 195636 154637, 195314 154142, 195312 151013, 195495 150636), (195495 155646, 195990 155324, 199119 155322, 199496 155505, 199819 156037, 199821 159166, 199637 159506, 199105 159829, 195976 159831, 195636 159647, 195314 159152, 195312 156023, 195495 155646), (195495 160656, 195990 160334, 199119 160332, 199496 160515, 199819 161047, 199821 164176, 199637 164516, 199105 164839, 195976 164841, 195636 164657, 195314 164162, 195312 161033, 195495 160656), (195495 165666, 195990 165344, 199119 165342, 199496 165525, 199819 166057, 199821 169186, 199637 169526, 199105 169849, 195976 169851, 195636 169667, 195314 169172, 195312 166043, 195495 165666), (195495 170676, 195990 170354, 199119 170352, 199496 170535, 199819 171067, 199821 174196, 199637 174536, 199105 174859, 195976 174861, 195636 174677, 195314 174182, 195312 171053, 195495 170676), (195495 175686, 195990 175364, 199119 175362, 199496 175545, 199819 176077, 199823 177955, 199769 178925, 199566 179456, 199048 179820, 195923 179813, 195756 179762, 195526 179570, 195314 179192, 195312 176063, 195495 175686), (200480 61933, 200742 61642, 201295 61541, 203274 62721, 204164 63386, 204273 63977, 204136 64345, 203768 64631, 200986 64638, 200646 64454, 200324 63959, 200322 62276, 200480 61933), (200505 65463, 201000 65141, 203811 65136, 204372 65240, 204580 65392, 204829 65854, 204831 68983, 204647 69323, 204115 69646, 200986 69648, 200646 69464, 200324 68969, 200322 65840, 200505 65463), (200505 70473, 201000 70151, 204129 70149, 204506 70332, 204829 70864, 204831 73993, 204647 74333, 204115 74656, 200986 74658, 200646 74474, 200324 73979, 200322 70850, 200505 70473), (200505 75483, 201000 75161, 204129 75159, 204506 75342, 204829 75874, 204831 79003, 204647 79343, 204115 79666, 200986 79668, 200646 79484, 200324 78989, 200322 75860, 200505 75483), (200505 80493, 201000 80171, 204129 80169, 204506 80352, 204829 80884, 204831 84013, 204647 84353, 204115 84676, 200986 84678, 200646 84494, 200324 83999, 200322 80870, 200505 80493), (200505 85503, 201000 85181, 204129 85179, 204506 85362, 204829 85894, 204831 89023, 204647 89363, 204115 89686, 200986 89688, 200646 89504, 200324 89009, 200322 85880, 200505 85503), (200505 90513, 201000 90191, 204129 90189, 204506 90372, 204829 90904, 204831 94033, 204647 94373, 204114 94696, 200986 94698, 200646 94514, 200324 94019, 200322 90890, 200505 90513), (200508 95520, 201000 95201, 204128 95199, 204422 95326, 204613 95496, 204829 95913, 204831 99045, 204647 99385, 204115 99708, 200986 99710, 200646 99526, 200324 99031, 200322 95900, 200508 95520), (200505 100535, 201000 100213, 204129 100211, 204506 100394, 204829 100926, 204831 104055, 204647 104395, 204115 104718, 200986 104720, 200646 104536, 200324 104041, 200322 100912, 200505 100535), (200505 105545, 201000 105223, 204129 105221, 204506 105404, 204829 105936, 204831 109065, 204647 109405, 204115 109728, 200986 109730, 200646 109546, 200324 109051, 200322 105922, 200505 105545), (200505 110555, 201000 110233, 204129 110231, 204506 110414, 204829 110946, 204831 114075, 204647 114415, 204115 114738, 200986 114740, 200646 114556, 200324 114061, 200322 110932, 200505 110555), (200505 115565, 201000 115243, 204129 115241, 204506 115424, 204829 115956, 204831 119085, 204647 119425, 204115 119748, 200986 119750, 200646 119566, 200324 119071, 200322 115942, 200505 115565), (200505 120575, 201000 120253, 204129 120251, 204506 120434, 204829 120966, 204831 124095, 204647 124435, 204115 124758, 200986 124760, 200646 124576, 200324 124081, 200322 120952, 200505 120575), (200505 125585, 201000 125263, 204129 125261, 204506 125444, 204829 125976, 204831 129105, 204647 129445, 204114 129768, 200986 129770, 200646 129586, 200324 129091, 200322 125962, 200505 125585), (200508 130592, 201000 130273, 204128 130271, 204422 130398, 204613 130568, 204829 130985, 204831 134115, 204647 134455, 204115 134778, 200986 134780, 200646 134596, 200324 134101, 200322 130972, 200508 130592), (200505 135605, 201000 135283, 204129 135281, 204506 135464, 204829 135996, 204831 139125, 204647 139465, 204115 139788, 200986 139790, 200646 139606, 200324 139111, 200322 135982, 200505 135605), (200505 140615, 201000 140293, 204129 140291, 204506 140474, 204829 141006, 204831 144136, 204647 144476, 204114 144799, 200986 144801, 200646 144617, 200324 144122, 200322 140992, 200505 140615), (200508 145623, 201000 145304, 204128 145302, 204422 145429, 204613 145599, 204829 146016, 204831 149146, 204647 149486, 204115 149809, 200986 149811, 200646 149627, 200324 149132, 200322 146003, 200508 145623), (200505 150636, 201000 150314, 204129 150312, 204506 150495, 204829 151027, 204831 154156, 204647 154496, 204115 154819, 200986 154821, 200646 154637, 200324 154142, 200322 151013, 200505 150636), (200505 155646, 201000 155324, 204129 155322, 204506 155505, 204829 156037, 204831 159166, 204647 159506, 204115 159829, 200986 159831, 200646 159647, 200324 159152, 200322 156023, 200505 155646), (200505 160656, 201000 160334, 204129 160332, 204506 160515, 204829 161047, 204831 164176, 204647 164516, 204115 164839, 200986 164841, 200646 164657, 200324 164162, 200322 161033, 200505 160656), (200505 165666, 201000 165344, 204129 165342, 204506 165525, 204829 166057, 204831 169186, 204647 169526, 204115 169849, 200986 169851, 200646 169667, 200324 169172, 200322 166043, 200505 165666), (200505 170676, 201000 170354, 204129 170352, 204506 170535, 204829 171067, 204829 174225, 204523 174651, 204228 174790, 203640 174860, 200986 174861, 200646 174677, 200324 174182, 200322 171053, 200505 170676), (200505 175686, 201000 175364, 203640 175362, 204040 175565, 204250 175905, 204294 176251, 204090 176673, 203276 177276, 201459 178366, 200929 178397, 200697 178331, 200328 177912, 200322 176063, 200505 175686), (205459 65547, 205637 65349, 206131 65191, 206641 65225, 208707 66751, 209705 67662, 209790 68065, 209789 69024, 209665 69313, 209125 69646, 205996 69648, 205656 69464, 205334 68969, 205332 65840, 205459 65547), (205515 70473, 206010 70151, 209139 70149, 209516 70332, 209839 70864, 209841 73993, 209657 74333, 209125 74656, 205996 74658, 205656 74474, 205334 73979, 205332 70850, 205515 70473), (205515 75483, 206010 75161, 209139 75159, 209516 75342, 209839 75874, 209841 79003, 209657 79343, 209125 79666, 205996 79668, 205656 79484, 205334 78989, 205332 75860, 205515 75483), (205515 80493, 206010 80171, 209139 80169, 209516 80352, 209839 80884, 209841 84013, 209657 84353, 209125 84676, 205996 84678, 205656 84494, 205334 83999, 205332 80870, 205515 80493), (205515 85503, 206010 85181, 209139 85179, 209516 85362, 209839 85894, 209841 89023, 209657 89363, 209125 89686, 205996 89688, 205656 89504, 205334 89009, 205332 85880, 205515 85503), (205515 90513, 206010 90191, 209139 90189, 209516 90372, 209839 90904, 209841 94033, 209657 94373, 209124 94696, 205996 94698, 205656 94514, 205334 94019, 205332 90890, 205515 90513), (205518 95520, 206010 95201, 209138 95199, 209432 95326, 209623 95496, 209839 95913, 209841 99045, 209657 99385, 209125 99708, 205996 99710, 205656 99526, 205334 99031, 205332 95900, 205518 95520), (205515 100535, 206010 100213, 209139 100211, 209516 100394, 209839 100926, 209841 104055, 209657 104395, 209125 104718, 205996 104720, 205656 104536, 205334 104041, 205332 100912, 205515 100535), (205515 105545, 206010 105223, 209139 105221, 209516 105404, 209839 105936, 209841 109065, 209657 109405, 209125 109728, 205996 109730, 205656 109546, 205334 109051, 205332 105922, 205515 105545), (205515 110555, 206010 110233, 209139 110231, 209516 110414, 209839 110946, 209841 114075, 209657 114415, 209125 114738, 205996 114740, 205656 114556, 205334 114061, 205332 110932, 205515 110555), (205515 115565, 206010 115243, 209139 115241, 209516 115424, 209839 115956, 209841 119085, 209657 119425, 209125 119748, 205996 119750, 205656 119566, 205334 119071, 205332 115942, 205515 115565), (205515 120575, 206010 120253, 209139 120251, 209516 120434, 209839 120966, 209841 124095, 209657 124435, 209125 124758, 205996 124760, 205656 124576, 205334 124081, 205332 120952, 205515 120575), (205515 125585, 206010 125263, 209139 125261, 209516 125444, 209839 125976, 209841 129105, 209657 129445, 209124 129768, 205996 129770, 205656 129586, 205334 129091, 205332 125962, 205515 125585), (205518 130592, 206010 130273, 209138 130271, 209432 130398, 209623 130568, 209839 130985, 209841 134115, 209657 134455, 209125 134778, 205996 134780, 205656 134596, 205334 134101, 205332 130972, 205518 130592), (205515 135605, 206010 135283, 209139 135281, 209516 135464, 209839 135996, 209841 139125, 209657 139465, 209125 139788, 205996 139790, 205656 139606, 205334 139111, 205332 135982, 205515 135605), (205515 140615, 206010 140293, 209139 140291, 209516 140474, 209839 141006, 209841 144136, 209657 144476, 209124 144799, 205996 144801, 205656 144617, 205334 144122, 205332 140992, 205515 140615), (205518 145623, 206010 145304, 209138 145302, 209432 145429, 209623 145599, 209839 146016, 209841 149146, 209657 149486, 209125 149809, 205996 149811, 205656 149627, 205334 149132, 205332 146003, 205518 145623), (205515 150636, 206010 150314, 209139 150312, 209516 150495, 209839 151027, 209841 154156, 209657 154496, 209125 154819, 205996 154821, 205656 154637, 205334 154142, 205332 151013, 205515 150636), (205515 155646, 206010 155324, 209139 155322, 209516 155505, 209839 156037, 209841 159166, 209657 159506, 209125 159829, 205996 159831, 205656 159647, 205334 159152, 205332 156023, 205515 155646), (205515 160656, 206010 160334, 209139 160332, 209516 160515, 209839 161047, 209841 164176, 209657 164516, 209125 164839, 205996 164841, 205656 164657, 205334 164162, 205332 161033, 205515 160656), (205515 165666, 206010 165344, 209139 165342, 209516 165525, 209839 166057, 209841 169186, 209657 169526, 209125 169849, 205996 169851, 205656 169667, 205334 169172, 205332 166043, 205515 165666), (205515 170676, 206010 170354, 209139 170352, 209516 170535, 209789 170977, 209790 171934, 209626 172415, 208681 173270, 206735 174712, 205978 174787, 205633 174674, 205332 174233, 205332 171053, 205515 170676), (210525 70473, 210964 70200, 212504 70200, 213708 71284, 214752 72443, 214800 72793, 214799 74034, 214675 74323, 214135 74656, 211006 74658, 210666 74474, 210344 73979, 210342 70850, 210525 70473), (210525 75483, 211020 75161, 214149 75159, 214526 75342, 214849 75874, 214851 79003, 214667 79343, 214135 79666, 211006 79668, 210666 79484, 210344 78989, 210342 75860, 210525 75483), (210525 80493, 211020 80171, 214149 80169, 214526 80352, 214849 80884, 214851 84013, 214667 84353, 214135 84676, 211006 84678, 210666 84494, 210344 83999, 210342 80870, 210525 80493), (210525 85503, 211020 85181, 214149 85179, 214526 85362, 214849 85894, 214851 89023, 214667 89363, 214135 89686, 211006 89688, 210666 89504, 210344 89009, 210342 85880, 210525 85503), (210525 90513, 211020 90191, 214149 90189, 214526 90372, 214849 90904, 214851 94033, 214667 94373, 214134 94696, 211006 94698, 210666 94514, 210344 94019, 210342 90890, 210525 90513), (210528 95520, 211020 95201, 214148 95199, 214442 95326, 214633 95496, 214849 95913, 214851 99045, 214667 99385, 214135 99708, 211006 99710, 210666 99526, 210344 99031, 210342 95900, 210528 95520), (210525 100535, 211020 100213, 214149 100211, 214526 100394, 214849 100926, 214851 104055, 214667 104395, 214135 104718, 211006 104720, 210666 104536, 210344 104041, 210342 100912, 210525 100535), (210525 105545, 211020 105223, 214149 105221, 214526 105404, 214849 105936, 214851 109065, 214667 109405, 214135 109728, 211006 109730, 210666 109546, 210344 109051, 210342 105922, 210525 105545), (210525 110555, 211020 110233, 214149 110231, 214526 110414, 214849 110946, 214851 114075, 214667 114415, 214135 114738, 211006 114740, 210666 114556, 210344 114061, 210342 110932, 210525 110555), (210525 115565, 211020 115243, 214149 115241, 214526 115424, 214849 115956, 214851 119085, 214667 119425, 214135 119748, 211006 119750, 210666 119566, 210344 119071, 210342 115942, 210525 115565), (210525 120575, 211020 120253, 214149 120251, 214526 120434, 214849 120966, 214851 124095, 214667 124435, 214135 124758, 211006 124760, 210666 124576, 210344 124081, 210342 120952, 210525 120575), (210525 125585, 211020 125263, 214149 125261, 214526 125444, 214849 125976, 214851 129105, 214667 129445, 214134 129768, 211006 129770, 210666 129586, 210344 129091, 210342 125962, 210525 125585), (210528 130592, 211020 130273, 214148 130271, 214442 130398, 214633 130568, 214849 130985, 214851 134115, 214667 134455, 214135 134778, 211006 134780, 210666 134596, 210344 134101, 210342 130972, 210528 130592), (210525 135605, 211020 135283, 214149 135281, 214526 135464, 214849 135996, 214851 139125, 214667 139465, 214135 139788, 211006 139790, 210666 139606, 210344 139111, 210342 135982, 210525 135605), (210525 140615, 211020 140293, 214149 140291, 214526 140474, 214849 141006, 214851 144136, 214667 144476, 214134 144799, 211006 144801, 210666 144617, 210344 144122, 210342 140992, 210525 140615), (210528 145623, 211020 145304, 214148 145302, 214442 145429, 214633 145599, 214849 146016, 214851 149146, 214667 149486, 214135 149809, 211006 149811, 210666 149627, 210344 149132, 210342 146003, 210528 145623), (210525 150636, 211020 150314, 214149 150312, 214526 150495, 214849 151027, 214851 154156, 214667 154496, 214135 154819, 211006 154821, 210666 154637, 210344 154142, 210342 151013, 210525 150636), (210525 155646, 211020 155324, 214149 155322, 214526 155505, 214849 156037, 214851 159166, 214667 159506, 214135 159829, 211006 159831, 210666 159647, 210344 159152, 210342 156023, 210525 155646), (210525 160656, 211020 160334, 214149 160332, 214526 160515, 214849 161047, 214851 164176, 214667 164516, 214135 164839, 211006 164841, 210666 164657, 210344 164162, 210342 161033, 210525 160656), (210525 165666, 211020 165344, 214149 165342, 214526 165525, 214799 165964, 214799 167206, 214681 167643, 213740 168683, 212643 169680, 212206 169799, 210965 169799, 210676 169674, 210344 169172, 210342 166043, 210525 165666), (215535 75483, 215974 75210, 216934 75210, 217336 75293, 218249 76292, 219712 78264, 219787 79021, 219674 79367, 219233 79667, 216016 79668, 215676 79484, 215354 78989, 215352 75860, 215535 75483), (215535 80493, 216030 80171, 219225 80170, 219651 80475, 219791 80770, 219860 81359, 219861 84013, 219677 84353, 219145 84676, 216016 84678, 215676 84494, 215354 83999, 215352 80870, 215535 80493), (215535 85503, 216030 85181, 219159 85179, 219536 85362, 219859 85894, 219861 89023, 219677 89363, 219145 89686, 216016 89688, 215676 89504, 215354 89009, 215352 85880, 215535 85503), (215535 90513, 216030 90191, 219159 90189, 219536 90372, 219859 90904, 219861 94033, 219677 94373, 219144 94696, 216016 94698, 215676 94514, 215354 94019, 215352 90890, 215535 90513), (215538 95520, 216030 95201, 219158 95199, 219452 95326, 219643 95496, 219859 95913, 219861 99045, 219677 99385, 219145 99708, 216016 99710, 215676 99526, 215354 99031, 215352 95900, 215538 95520), (215535 100535, 216030 100213, 219159 100211, 219536 100394, 219859 100926, 219861 104055, 219677 104395, 219145 104718, 216016 104720, 215676 104536, 215354 104041, 215352 100912, 215535 100535), (215535 105545, 216030 105223, 219159 105221, 219536 105404, 219859 105936, 219861 109065, 219677 109405, 219145 109728, 216016 109730, 215676 109546, 215354 109051, 215352 105922, 215535 105545), (215535 110555, 216030 110233, 219159 110231, 219536 110414, 219859 110946, 219861 114075, 219677 114415, 219145 114738, 216016 114740, 215676 114556, 215354 114061, 215352 110932, 215535 110555), (215535 115565, 216030 115243, 219159 115241, 219536 115424, 219859 115956, 219861 119085, 219677 119425, 219145 119748, 216016 119750, 215676 119566, 215354 119071, 215352 115942, 215535 115565), (215535 120575, 216030 120253, 219159 120251, 219536 120434, 219859 120966, 219861 124095, 219677 124435, 219145 124758, 216016 124760, 215676 124576, 215354 124081, 215352 120952, 215535 120575), (215535 125585, 216030 125263, 219159 125261, 219536 125444, 219859 125976, 219861 129105, 219677 129445, 219144 129768, 216016 129770, 215676 129586, 215354 129091, 215352 125962, 215535 125585), (215538 130592, 216030 130273, 219158 130271, 219452 130398, 219643 130568, 219859 130985, 219861 134115, 219677 134455, 219145 134778, 216016 134780, 215676 134596, 215354 134101, 215352 130972, 215538 130592), (215535 135605, 216030 135283, 219159 135281, 219536 135464, 219859 135996, 219861 139125, 219677 139465, 219145 139788, 216016 139790, 215676 139606, 215354 139111, 215352 135982, 215535 135605), (215535 140615, 216030 140293, 219159 140291, 219536 140474, 219859 141006, 219861 144136, 219677 144476, 219144 144799, 216016 144801, 215676 144617, 215354 144122, 215352 140992, 215535 140615), (215538 145623, 216030 145304, 219158 145302, 219452 145429, 219643 145599, 219859 146016, 219861 149146, 219677 149486, 219145 149809, 216016 149811, 215676 149627, 215354 149132, 215352 146003, 215538 145623), (215535 150636, 216030 150314, 219159 150312, 219536 150495, 219859 151027, 219861 154156, 219677 154496, 219145 154819, 216016 154821, 215676 154637, 215354 154142, 215352 151013, 215535 150636), (215535 155646, 216030 155324, 219159 155322, 219536 155505, 219859 156037, 219863 158811, 219759 159371, 219681 159502, 219145 159829, 216016 159831, 215676 159647, 215354 159152, 215352 156023, 215535 155646), (215535 160656, 216030 160334, 219159 160332, 219580 160554, 219748 160821, 219808 161131, 219774 161641, 218249 163706, 217415 164626, 216934 164789, 215975 164789, 215686 164664, 215354 164162, 215352 161033, 215535 160656), (220479 81084, 220654 80877, 220905 80749, 221251 80705, 221602 80823, 222276 81721, 223419 83639, 223332 84302, 222912 84671, 221026 84678, 220686 84494, 220364 83999, 220362 81359, 220479 81084), (220545 85503, 221040 85181, 222955 85176, 223925 85230, 224456 85433, 224820 85951, 224813 89076, 224632 89422, 224155 89686, 221026 89688, 220686 89504, 220364 89009, 220362 85880, 220545 85503), (220545 90513, 221040 90191, 224169 90189, 224546 90372, 224869 90904, 224871 94033, 224686 94374, 224154 94696, 221026 94698, 220686 94514, 220364 94019, 220362 90890, 220545 90513), (220548 95520, 221040 95201, 224168 95199, 224462 95326, 224653 95496, 224869 95913, 224871 99045, 224687 99385, 224155 99708, 221026 99710, 220686 99526, 220364 99031, 220362 95900, 220548 95520), (220545 100535, 221040 100213, 224169 100211, 224546 100394, 224869 100926, 224871 104055, 224687 104395, 224155 104718, 221026 104720, 220686 104536, 220364 104041, 220362 100912, 220545 100535), (220545 105545, 221040 105223, 224169 105221, 224546 105404, 224869 105936, 224871 109065, 224687 109405, 224155 109728, 221026 109730, 220686 109546, 220364 109051, 220362 105922, 220545 105545), (220545 110555, 221040 110233, 224169 110231, 224546 110414, 224869 110946, 224871 114075, 224687 114415, 224155 114738, 221026 114740, 220686 114556, 220364 114061, 220362 110932, 220545 110555), (220545 115565, 221040 115243, 224169 115241, 224546 115424, 224869 115956, 224871 119085, 224687 119425, 224155 119748, 221026 119750, 220686 119566, 220364 119071, 220362 115942, 220545 115565), (220545 120575, 221040 120253, 224169 120251, 224546 120434, 224869 120966, 224871 124095, 224687 124435, 224155 124758, 221026 124760, 220686 124576, 220364 124081, 220362 120952, 220545 120575), (220545 125585, 221040 125263, 224169 125261, 224546 125444, 224869 125976, 224871 129105, 224687 129445, 224154 129768, 221026 129770, 220686 129586, 220364 129091, 220362 125962, 220545 125585), (220548 130592, 221040 130273, 224168 130271, 224462 130398, 224653 130568, 224869 130985, 224871 134115, 224687 134455, 224155 134778, 221026 134780, 220686 134596, 220364 134101, 220362 130972, 220548 130592), (220545 135605, 221040 135283, 224169 135281, 224546 135464, 224869 135996, 224871 139125, 224687 139465, 224155 139788, 221026 139790, 220686 139606, 220364 139111, 220362 135982, 220545 135605), (220545 140615, 221040 140293, 224169 140291, 224546 140474, 224869 141006, 224871 144136, 224687 144476, 224154 144799, 221026 144801, 220686 144617, 220364 144122, 220362 140992, 220545 140615), (220548 145623, 221040 145304, 224168 145302, 224462 145429, 224653 145599, 224869 146016, 224869 149174, 224629 149548, 224155 149809, 221026 149811, 220686 149627, 220364 149132, 220362 146003, 220548 145623), (220545 150636, 221040 150314, 224169 150312, 224544 150494, 224708 150699, 224815 150984, 224819 152368, 224829 154010, 224456 154566, 223925 154769, 222723 154820, 221026 154821, 220686 154637, 220364 154142, 220362 151013, 220545 150636), (220545 155646, 221040 155324, 222723 155322, 223066 155480, 223358 155741, 223406 156394, 222278 158274, 221684 159077, 221022 159273, 220654 159135, 220368 158768, 220362 156023, 220545 155646), (225610 90454, 225796 90334, 226482 90242, 226859 90331, 227218 90619, 228692 93742, 228517 94372, 228141 94674, 226036 94698, 225696 94514, 225374 94019, 225372 90890, 225610 90454), (225558 95520, 226050 95201, 228185 95191, 228837 95271, 229112 95421, 229382 95696, 229857 97034, 229829 99006, 229704 99376, 229165 99708, 226036 99710, 225696 99526, 225374 99031, 225372 95900, 225558 95520), (225555 100535, 226050 100213, 229179 100211, 229472 100338, 229700 100562, 229828 100857, 229829 104097, 229705 104385, 229165 104718, 226036 104720, 225696 104536, 225374 104041, 225372 100912, 225555 100535), (225555 105545, 226050 105223, 229179 105221, 229556 105404, 229879 105936, 229881 109065, 229697 109405, 229165 109728, 226036 109730, 225696 109546, 225374 109051, 225372 105922, 225555 105545), (225555 110555, 226050 110233, 229179 110231, 229556 110414, 229879 110946, 229881 114075, 229697 114415, 229165 114738, 226036 114740, 225696 114556, 225374 114061, 225372 110932, 225555 110555), (225555 115565, 226050 115243, 229179 115241, 229556 115424, 229879 115956, 229881 119085, 229697 119425, 229165 119748, 226036 119750, 225696 119566, 225374 119071, 225372 115942, 225555 115565), (225555 120575, 226050 120253, 229179 120251, 229556 120434, 229879 120966, 229881 124095, 229697 124435, 229165 124758, 226036 124760, 225696 124576, 225374 124081, 225372 120952, 225555 120575), (225555 125585, 226050 125263, 229179 125261, 229556 125444, 229879 125976, 229881 129105, 229697 129445, 229164 129768, 226036 129770, 225696 129586, 225374 129091, 225372 125962, 225555 125585), (225558 130592, 226050 130273, 229178 130271, 229472 130398, 229663 130568, 229879 130985, 229879 134143, 229639 134517, 229165 134778, 226036 134780, 225696 134596, 225374 134101, 225372 130972, 225558 130592), (225555 135605, 226050 135283, 229179 135281, 229554 135463, 229718 135668, 229826 135968, 229830 139088, 229778 139333, 229629 139536, 229165 139788, 226036 139790, 225696 139606, 225374 139111, 225372 135982, 225555 135605), (225555 140615, 226050 140293, 229179 140291, 229603 140515, 229768 140779, 229830 141046, 229889 142889, 229339 144407, 228840 144727, 227959 144800, 226036 144801, 225696 144617, 225374 144122, 225372 140992, 225555 140615), (225558 145623, 226050 145304, 227959 145302, 228548 145650, 228693 146258, 227166 149480, 226860 149669, 226510 149759, 225896 149721, 225601 149561, 225372 149181, 225372 146003, 225558 145623), (230565 105545, 231008 105285, 231645 105272, 232016 105400, 232373 105792, 232556 106521, 232927 109044, 232682 109468, 232280 109723, 231046 109730, 230706 109546, 230384 109051, 230382 105922, 230565 105545), (230565 110555, 231060 110233, 232323 110228, 232793 110354, 233005 110549, 233205 110870, 233552 113205, 233595 114119, 233311 114515, 232949 114734, 231046 114740, 230706 114556, 230384 114061, 230382 110932, 230565 110555), (230565 115565, 231060 115243, 232989 115238, 233332 115398, 233517 115605, 233689 115954, 233841 119129, 233543 119535, 233130 119748, 231046 119750, 230706 119566, 230384 119071, 230382 115942, 230565 115565), (230565 120575, 231060 120253, 233145 120251, 233520 120433, 233701 120674, 233837 121039, 233678 124205, 233355 124572, 232983 124759, 231046 124760, 230706 124576, 230384 124081, 230382 120952, 230565 120575), (230565 125585, 231060 125263, 232971 125262, 233288 125454, 233455 125684, 233591 126049, 233557 126751, 233178 129277, 232821 129610, 232481 129769, 231046 129770, 230706 129586, 230384 129091, 230382 125962, 230565 125585), (230568 130592, 231060 130273, 232375 130271, 232658 130501, 232804 130746, 232907 131132, 232564 133440, 232341 134317, 232016 134600, 231620 134728, 230916 134692, 230611 134530, 230382 134150, 230382 130972, 230568 130592)) \ No newline at end of file diff --git a/benchmark/infill_benchmark.h b/benchmark/infill_benchmark.h index 459174eecc..29423a1b70 100644 --- a/benchmark/infill_benchmark.h +++ b/benchmark/infill_benchmark.h @@ -1,4 +1,4 @@ -// Copyright (c) 2023 UltiMaker +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher #ifndef CURAENGINE_INFILL_BENCHMARK_H @@ -6,6 +6,9 @@ #include +#include "geometry/OpenLinesSet.h" +#include "geometry/OpenPolyline.h" +#include "geometry/LinesSet.h" #include "infill.h" namespace cura @@ -14,14 +17,14 @@ class InfillTest : public benchmark::Fixture { public: Settings settings{}; - Polygons square_shape; - Polygons ff_holes; + Shape square_shape; + Shape ff_holes; std::vector all_paths; - Polygons outline_polygons; + Shape outline_polygons; EFillMethod pattern{ EFillMethod::LINES }; bool zig_zagify{ true }; bool connect_polygons{ true }; @@ -58,8 +61,8 @@ class InfillTest : public benchmark::Fixture ff_holes.back().emplace_back(MM2INT(60), MM2INT(40)); ff_holes.back().emplace_back(MM2INT(90), MM2INT(25)); - outline_polygons.add(square_shape); - outline_polygons.add(ff_holes); + outline_polygons.push_back(square_shape); + outline_polygons.push_back(ff_holes); settings.add("fill_outline_gaps", "false"); settings.add("meshfix_maximum_deviation", "0.1"); @@ -93,29 +96,30 @@ class InfillTest : public benchmark::Fixture BENCHMARK_DEFINE_F(InfillTest, Infill_generate_connect)(benchmark::State& st) { - Infill infill(pattern, - zig_zagify, - connect_polygons, - outline_polygons, - INFILL_LINE_WIDTH, - line_distance, - INFILL_OVERLAP, - INFILL_MULTIPLIER, - FILL_ANGLE, - Z, - SHIFT, - MAX_RESOLUTION, - MAX_DEVIATION); // There are some optional parameters, but these will do for now (future improvement?). + Infill infill( + pattern, + zig_zagify, + connect_polygons, + outline_polygons, + INFILL_LINE_WIDTH, + line_distance, + INFILL_OVERLAP, + INFILL_MULTIPLIER, + FILL_ANGLE, + Z, + SHIFT, + MAX_RESOLUTION, + MAX_DEVIATION); // There are some optional parameters, but these will do for now (future improvement?). for (auto _ : st) { std::vector result_paths; - Polygons result_polygons; - Polygons result_lines; + Shape result_polygons; + OpenLinesSet result_lines; infill.generate(result_paths, result_polygons, result_lines, settings, 0, SectionType::INFILL, nullptr, nullptr); } } -BENCHMARK_REGISTER_F(InfillTest, Infill_generate_connect)->ArgsProduct({{true, false}, {400, 800, 1200}})->Unit(benchmark::kMillisecond); +BENCHMARK_REGISTER_F(InfillTest, Infill_generate_connect)->ArgsProduct({ { true, false }, { 400, 800, 1200 } })->Unit(benchmark::kMillisecond); } // namespace cura #endif // CURAENGINE_INFILL_BENCHMARK_H diff --git a/benchmark/simplify_benchmark.h b/benchmark/simplify_benchmark.h index d3726bce65..9e65c62f0b 100644 --- a/benchmark/simplify_benchmark.h +++ b/benchmark/simplify_benchmark.h @@ -1,11 +1,10 @@ -// Copyright (c) 2023 UltiMaker +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher #ifndef CURAENGINE_BENCHMARK_SIMPLIFY_BENCHMARK_H #define CURAENGINE_BENCHMARK_SIMPLIFY_BENCHMARK_H #include "../tests/ReadTestPolygons.h" -#include "plugins/slots.h" #include "utils/Simplify.h" #include "utils/channel.h" @@ -13,7 +12,11 @@ #include #include + +#ifdef ENABLE_PLUGINS +#include "plugins/slots.h" #include +#endif namespace cura { @@ -31,7 +34,7 @@ class SimplifyTestFixture : public benchmark::Fixture std::filesystem::path(__FILE__).parent_path().append("tests/resources/slice_polygon_3.txt").string(), std::filesystem::path(__FILE__).parent_path().append("tests/resources/slice_polygon_4.txt").string() }; - std::vector shapes; + std::vector shapes; void SetUp(const ::benchmark::State& state) { @@ -48,7 +51,7 @@ BENCHMARK_DEFINE_F(SimplifyTestFixture, simplify_local)(benchmark::State& st) Simplify simplify(MM2INT(0.25), MM2INT(0.025), 50000); for (auto _ : st) { - Polygons simplified; + Shape simplified; for (const auto& polys : shapes) { benchmark::DoNotOptimize(simplified = simplify.polygon(polys)); @@ -58,11 +61,12 @@ BENCHMARK_DEFINE_F(SimplifyTestFixture, simplify_local)(benchmark::State& st) BENCHMARK_REGISTER_F(SimplifyTestFixture, simplify_local); +#ifdef ENABLE_PLUGINS BENCHMARK_DEFINE_F(SimplifyTestFixture, simplify_slot_noplugin)(benchmark::State& st) { for (auto _ : st) { - Polygons simplified; + Shape simplified; for (const auto& polys : shapes) { benchmark::DoNotOptimize(simplified = slots::instance().modify(polys, MM2INT(0.25), MM2INT(0.025), 50000)); @@ -71,6 +75,7 @@ BENCHMARK_DEFINE_F(SimplifyTestFixture, simplify_slot_noplugin)(benchmark::State } BENCHMARK_REGISTER_F(SimplifyTestFixture, simplify_slot_noplugin); +#endif } // namespace cura #endif // CURAENGINE_BENCHMARK_SIMPLIFY_BENCHMARK_H diff --git a/benchmark/wall_benchmark.h b/benchmark/wall_benchmark.h index 314377c911..089524cf9c 100644 --- a/benchmark/wall_benchmark.h +++ b/benchmark/wall_benchmark.h @@ -1,19 +1,23 @@ -// Copyright (c) 2023 UltiMaker +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher #ifndef CURAENGINE_WALL_BENCHMARK_H #define CURAENGINE_WALL_BENCHMARK_H +#include +#include +#include +#include #include -#include #include +#include #include "InsetOrderOptimizer.h" #include "WallsComputation.h" +#include "geometry/Polygon.h" #include "settings/Settings.h" #include "sliceDataStorage.h" -#include "utils/polygon.h" namespace cura { @@ -22,8 +26,8 @@ class WallTestFixture : public benchmark::Fixture public: Settings settings{}; WallsComputation walls_computation{ settings, LayerIndex(100) }; - Polygons square_shape; - Polygons ff_holes; + Shape square_shape; + Shape ff_holes; bool outer_to_inner; SliceLayer layer; @@ -80,7 +84,68 @@ class WallTestFixture : public benchmark::Fixture layer.parts.emplace_back(); SliceLayerPart& part = layer.parts.back(); - part.outline.add(ff_holes); + part.outline.push_back(ff_holes); + } + + void TearDown(const ::benchmark::State& state) + { + } +}; + +class HolesWallTestFixture : public benchmark::Fixture +{ +public: + Settings settings{}; + WallsComputation walls_computation{ settings, LayerIndex(100) }; + Shape shape; + Shape ff_holes; + bool outer_to_inner; + SliceLayer layer; + + + void SetUp(const ::benchmark::State& state) + { + auto wkt_file = std::filesystem::path(__FILE__).parent_path().append("holes.wkt"); + std::ifstream file{ wkt_file }; + + std::stringstream buffer; + buffer << file.rdbuf(); + const auto wkt = buffer.str(); + + const auto shape = Shape::fromWkt(buffer.str()); + + // Settings for a simple 2 walls, about as basic as possible. + settings.add("alternate_extra_perimeter", "false"); + settings.add("fill_outline_gaps", "false"); + settings.add("initial_layer_line_width_factor", "100"); + settings.add("magic_spiralize", "false"); + settings.add("meshfix_maximum_deviation", "0.1"); + settings.add("meshfix_maximum_extrusion_area_deviation", "0.01"); + settings.add("meshfix_maximum_resolution", "0.01"); + settings.add("meshfix_fluid_motion_enabled", "false"); + settings.add("min_wall_line_width", "0.3"); + settings.add("min_bead_width", "0"); + settings.add("min_feature_size", "0"); + settings.add("wall_0_extruder_nr", "0"); + settings.add("wall_0_inset", "0"); + settings.add("wall_line_count", "2"); + settings.add("wall_line_width_0", "0.4"); + settings.add("wall_line_width_x", "0.4"); + settings.add("min_even_wall_line_width", "0.34"); + settings.add("min_odd_wall_line_width", "0.34"); + settings.add("wall_transition_angle", "10"); + settings.add("wall_transition_filter_distance", "1"); + settings.add("wall_transition_filter_deviation", ".2"); + settings.add("wall_transition_length", "1"); + settings.add("wall_x_extruder_nr", "0"); + settings.add("wall_distribution_count", "2"); + settings.add("wall_line_count", std::to_string(state.range(0))); + outer_to_inner = false; + layer.parts.emplace_back(); + + SliceLayerPart& part = layer.parts.back(); + part.outline.push_back(shape.front()); + part.print_outline = shape; } void TearDown(const ::benchmark::State& state) @@ -102,7 +167,7 @@ BENCHMARK_DEFINE_F(WallTestFixture, InsetOrderOptimizer_getRegionOrder)(benchmar { walls_computation.generateWalls(&layer, SectionType::WALL); std::vector all_paths; - for (auto& line : layer.parts.back().wall_toolpaths | ranges::views::join ) + for (auto& line : layer.parts.back().wall_toolpaths | ranges::views::join) { all_paths.emplace_back(line); } @@ -118,7 +183,7 @@ BENCHMARK_DEFINE_F(WallTestFixture, InsetOrderOptimizer_getInsetOrder)(benchmark { walls_computation.generateWalls(&layer, SectionType::WALL); std::vector all_paths; - for (auto& line : layer.parts.back().wall_toolpaths | ranges::views::join ) + for (auto& line : layer.parts.back().wall_toolpaths | ranges::views::join) { all_paths.emplace_back(line); } @@ -130,5 +195,47 @@ BENCHMARK_DEFINE_F(WallTestFixture, InsetOrderOptimizer_getInsetOrder)(benchmark BENCHMARK_REGISTER_F(WallTestFixture, InsetOrderOptimizer_getInsetOrder)->Arg(3)->Arg(15)->Arg(9999)->Unit(benchmark::kMillisecond); +BENCHMARK_DEFINE_F(HolesWallTestFixture, generateWalls)(benchmark::State& st) +{ + for (auto _ : st) + { + walls_computation.generateWalls(&layer, SectionType::WALL); + } +} + +BENCHMARK_REGISTER_F(HolesWallTestFixture, generateWalls)->Arg(3)->Arg(15)->Arg(9999)->Unit(benchmark::kMillisecond); + +BENCHMARK_DEFINE_F(HolesWallTestFixture, InsetOrderOptimizer_getRegionOrder)(benchmark::State& st) +{ + walls_computation.generateWalls(&layer, SectionType::WALL); + std::vector all_paths; + for (auto& line : layer.parts.back().wall_toolpaths | ranges::views::join) + { + all_paths.emplace_back(line); + } + for (auto _ : st) + { + auto order = InsetOrderOptimizer::getRegionOrder(all_paths, outer_to_inner); + } +} + +BENCHMARK_REGISTER_F(HolesWallTestFixture, InsetOrderOptimizer_getRegionOrder)->Arg(3)->Arg(15)->Arg(9999)->Unit(benchmark::kMillisecond); + +BENCHMARK_DEFINE_F(HolesWallTestFixture, InsetOrderOptimizer_getInsetOrder)(benchmark::State& st) +{ + walls_computation.generateWalls(&layer, SectionType::WALL); + std::vector all_paths; + for (auto& line : layer.parts.back().wall_toolpaths | ranges::views::join) + { + all_paths.emplace_back(line); + } + for (auto _ : st) + { + auto order = InsetOrderOptimizer::getInsetOrder(all_paths, outer_to_inner); + } +} + +BENCHMARK_REGISTER_F(HolesWallTestFixture, InsetOrderOptimizer_getInsetOrder)->Arg(3)->Arg(15)->Arg(9999)->Unit(benchmark::kMillisecond); + } // namespace cura #endif // CURAENGINE_WALL_BENCHMARK_H diff --git a/conandata.yml b/conandata.yml index 63534b7175..f5da580fcb 100644 --- a/conandata.yml +++ b/conandata.yml @@ -1,5 +1,9 @@ -version: "5.7.0-alpha.0" +version: "5.9.0-alpha.0" requirements: - - "arcus/5.3.0" - - "curaengine_grpc_definitions/(latest)@ultimaker/testing" - - "scripta/0.1.0@ultimaker/testing" \ No newline at end of file + - "scripta/0.1.0@ultimaker/testing" +requirements_arcus: + - "arcus/5.3.1" +requirements_plugins: + - "curaengine_grpc_definitions/0.2.1" +requirements_cura_resources: + - "cura_resources/(latest)@ultimaker/testing" diff --git a/conanfile.py b/conanfile.py index 0747a81d19..d40e9c70c4 100644 --- a/conanfile.py +++ b/conanfile.py @@ -1,14 +1,16 @@ -# Copyright (c) 2023 UltiMaker +# Copyright (c) 2024 UltiMaker # CuraEngine is released under the terms of the AGPLv3 or higher - +from shutil import which from os import path +import os from conan import ConanFile from conan.errors import ConanInvalidConfiguration from conan.tools.files import copy, mkdir, update_conandata from conan.tools.cmake import CMakeToolchain, CMakeDeps, CMake, cmake_layout from conan.tools.build import check_min_cppstd -from conan.tools.scm import Version +from conan.tools.scm import Version, Git +from conans.tools import which required_conan_version = ">=1.58.0 <2.0.0" @@ -30,6 +32,7 @@ class CuraEngineConan(ConanFile): "enable_plugins": [True, False], "enable_sentry": [True, False], "enable_remote_plugins": [True, False], + "with_cura_resources": [True, False], } default_options = { "enable_arcus": True, @@ -38,14 +41,17 @@ class CuraEngineConan(ConanFile): "enable_plugins": True, "enable_sentry": False, "enable_remote_plugins": False, + "with_cura_resources": False, } def set_version(self): if not self.version: - self.version = self.conan_data["version"] + build_meta = "" if self.develop else "+source" + self.version = self.conan_data["version"] + build_meta def export(self): - update_conandata(self, {"version": self.version}) + git = Git(self) + update_conandata(self, {"version": self.version, "commit": git.get_commit()}) def export_sources(self): copy(self, "CMakeLists.txt", self.recipe_folder, self.export_sources_folder) @@ -62,19 +68,24 @@ def export_sources(self): def config_options(self): if not self.options.enable_plugins: del self.options.enable_remote_plugins - if self.conf.get("user.curaengine:sentry_url", "", check_type=str) == "": + sentry_project = self.conf.get("user.curaengine:sentry_project", "", check_type=str) + sentry_org = self.conf.get("user.curaengine:sentry_org", "", check_type=str) + if os.environ.get('SENTRY_TOKEN', None) is None or sentry_project == "" or sentry_org == "": del self.options.enable_sentry def configure(self): self.options["boost"].header_only = True self.options["clipper"].shared = True - self.options["protobuf"].shared = False + if self.options.enable_arcus or self.options.enable_plugins: + self.options["protobuf"].shared = False if self.options.enable_arcus: self.options["arcus"].shared = True if self.settings.os == "Linux": self.options["openssl"].shared = True if self.options.get_safe("enable_sentry", False): self.options["sentry-native"].backend = "breakpad" + self.options["arcus"].enable_sentry = True + self.options["clipper"].enable_sentry = True def validate(self): if self.settings.compiler.get_safe("cppstd"): @@ -85,7 +96,8 @@ def validate(self): def build_requirements(self): self.test_requires("standardprojectsettings/[>=0.1.0]@ultimaker/stable") - self.test_requires("protobuf/3.21.9") + if self.options.enable_arcus or self.options.enable_plugins: + self.tool_requires("protobuf/3.21.9") if not self.conf.get("tools.build:skip_test", False, check_type=bool): self.test_requires("gtest/1.12.1") if self.options.enable_benchmarks: @@ -94,24 +106,33 @@ def build_requirements(self): def requirements(self): for req in self.conan_data["requirements"]: - if "arcus" in req and not self.options.enable_arcus: - continue self.requires(req) + if self.options.enable_arcus: + for req in self.conan_data["requirements_arcus"]: + self.requires(req) if self.options.get_safe("enable_sentry", False): self.requires("sentry-native/0.6.5") - self.requires("asio-grpc/2.6.0") - self.requires("grpc/1.50.1") - self.requires("clipper/6.4.2") + if self.options.enable_plugins: + self.requires("neargye-semver/0.3.0") + self.requires("asio-grpc/2.6.0") + self.requires("grpc/1.50.1") + for req in self.conan_data["requirements_plugins"]: + self.requires(req) + if self.options.with_cura_resources: + for req in self.conan_data["requirements_cura_resources"]: + self.requires(req) + if self.options.enable_arcus or self.options.enable_plugins: + self.requires("protobuf/3.21.12") + self.requires("clipper/6.4.2@ultimaker/stable") self.requires("boost/1.82.0") - self.requires("rapidjson/1.1.0") + self.requires("rapidjson/cci.20230929") self.requires("stb/20200203") self.requires("spdlog/1.12.0") self.requires("fmt/10.1.1") self.requires("range-v3/0.12.0") - self.requires("neargye-semver/0.3.0") - self.requires("protobuf/3.21.9") self.requires("zlib/1.2.12") self.requires("openssl/3.2.0") + self.requires("mapbox-wagyu/0.5.0@ultimaker/stable") def generate(self): deps = CMakeDeps(self) @@ -124,6 +145,7 @@ def generate(self): tc.variables["ENABLE_BENCHMARKS"] = self.options.enable_benchmarks tc.variables["EXTENSIVE_WARNINGS"] = self.options.enable_extensive_warnings tc.variables["OLDER_APPLE_CLANG"] = self.settings.compiler == "apple-clang" and Version(self.settings.compiler.version) < "14" + tc.variables["ENABLE_THREADING"] = not (self.settings.arch == "wasm" and self.settings.os == "Emscripten") if self.options.get_safe("enable_sentry", False): tc.variables["ENABLE_SENTRY"] = True tc.variables["SENTRY_URL"] = self.conf.get("user.curaengine:sentry_url", "", check_type=str) @@ -140,15 +162,23 @@ def generate(self): copy(self, "*.dll", dep.cpp_info.libdirs[0], self.build_folder) if len(dep.cpp_info.bindirs) > 0: copy(self, "*.dll", dep.cpp_info.bindirs[0], self.build_folder) + + folder_dists = [] if not self.conf.get("tools.build:skip_test", False, check_type=bool): - test_path = path.join(self.build_folder, "tests") - if not path.exists(test_path): - mkdir(self, test_path) + folder_dists.append("tests") + if self.options.enable_benchmarks: + folder_dists.append("benchmark") + folder_dists.append("stress_benchmark") + + for dist_folder in folder_dists: + dist_path = path.join(self.build_folder, dist_folder) + if not path.exists(dist_path): + mkdir(self, dist_path) if len(dep.cpp_info.libdirs) > 0: - copy(self, "*.dylib", dep.cpp_info.libdirs[0], path.join(self.build_folder, "tests")) - copy(self, "*.dll", dep.cpp_info.libdirs[0], path.join(self.build_folder, "tests")) + copy(self, "*.dylib", dep.cpp_info.libdirs[0], path.join(self.build_folder, dist_folder)) + copy(self, "*.dll", dep.cpp_info.libdirs[0], path.join(self.build_folder, dist_folder)) if len(dep.cpp_info.bindirs) > 0: - copy(self, "*.dll", dep.cpp_info.bindirs[0], path.join(self.build_folder, "tests")) + copy(self, "*.dll", dep.cpp_info.bindirs[0], path.join(self.build_folder, dist_folder)) def layout(self): cmake_layout(self) @@ -160,13 +190,50 @@ def build(self): cmake.configure() cmake.build() + if self.options.get_safe("enable_sentry", False): + # Upload debug symbols to sentry + sentry_project = self.conf.get("user.curaengine:sentry_project", "", check_type=str) + sentry_org = self.conf.get("user.curaengine:sentry_org", "", check_type=str) + if sentry_project == "" or sentry_org == "": + raise ConanInvalidConfiguration("sentry_project or sentry_org is not set") + + if which("sentry-cli") is None: + self.output.warn("sentry-cli is not installed, skipping uploading debug symbols") + self.output.warn("sentry-cli is not installed, skipping release creation") + else: + if self.settings.os == "Linux": + self.output.info("Stripping debug symbols from binary") + self.run("objcopy --only-keep-debug --compress-debug-sections=zlib CuraEngine CuraEngine.debug") + self.run("objcopy --strip-debug --strip-unneeded CuraEngine") + self.run("objcopy --add-gnu-debuglink=CuraEngine.debug CuraEngine") + elif self.settings.os == "Macos": + self.run("dsymutil CuraEngine") + + self.output.info("Uploading debug symbols to sentry") + build_source_dir = self.build_path.parent.parent.as_posix() + self.run(f"sentry-cli --auth-token {os.environ['SENTRY_TOKEN']} debug-files upload --include-sources -o {sentry_org} -p {sentry_project} {build_source_dir}") + + # create a sentry release and link it to the commit this is based upon + self.output.info(f"Creating a new release {self.version} in Sentry and linking it to the current commit {self.conan_data['commit']}") + self.run(f"sentry-cli --auth-token {os.environ['SENTRY_TOKEN']} releases new -o {sentry_org} -p {sentry_project} {self.version}") + self.run(f"sentry-cli --auth-token {os.environ['SENTRY_TOKEN']} releases set-commits -o {sentry_org} -p {sentry_project} --commit \"Ultimaker/CuraEngine@{self.conan_data['commit']}\" {self.version}") + self.run(f"sentry-cli --auth-token {os.environ['SENTRY_TOKEN']} releases finalize -o {sentry_org} -p {sentry_project} {self.version}") + + def deploy(self): + copy(self, "CuraEngine*", src=os.path.join(self.package_folder, "bin"), dst=self.install_folder) + def package(self): - ext = ".exe" if self.settings.os == "Windows" else "" + match self.settings.os: + case "Windows": + ext = ".exe" + case "Emscripten": + ext = ".js" + case other: + ext = "" copy(self, f"CuraEngine{ext}", src=self.build_folder, dst=path.join(self.package_folder, "bin")) + copy(self, f"*.d.ts", src=self.build_folder, dst=path.join(self.package_folder, "bin")) copy(self, f"_CuraEngine.*", src=self.build_folder, dst=path.join(self.package_folder, "lib")) copy(self, "LICENSE*", src=self.source_folder, dst=path.join(self.package_folder, "license")) - if self.settings.os == "Windows" and self.settings.build_type == "RelWithDebInfo": - copy(self, "CuraEngine.pdb", src=self.build_folder, dst=path.join(self.package_folder, "bin")) def package_info(self): ext = ".exe" if self.settings.os == "Windows" else "" diff --git a/include/Application.h b/include/Application.h index a301f3565b..205766f62f 100644 --- a/include/Application.h +++ b/include/Application.h @@ -105,7 +105,12 @@ class Application : NoCopy #endif // ARCUS /*! - * \brief Print the header and license to the stderr channel. + * \brief Print the header to the stderr channel. + */ + void printHeader() const; + + /*! + * \brief Print the license to the stderr channel. */ void printLicense() const; diff --git a/include/BeadingStrategy/BeadingStrategy.h b/include/BeadingStrategy/BeadingStrategy.h index d72645592f..0a4b1d32f2 100644 --- a/include/BeadingStrategy/BeadingStrategy.h +++ b/include/BeadingStrategy/BeadingStrategy.h @@ -1,14 +1,15 @@ -// Copyright (c) 2022 Ultimaker B.V. +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher #ifndef BEADING_STRATEGY_H #define BEADING_STRATEGY_H #include +#include -#include "../settings/types/Angle.h" -#include "../settings/types/Ratio.h" //For the wall transition threshold. -#include "../utils/Point2LL.h" +#include "geometry/Point2LL.h" +#include "settings/types/Angle.h" +#include "settings/types/Ratio.h" //For the wall transition threshold. namespace cura { @@ -45,9 +46,7 @@ class BeadingStrategy BeadingStrategy(const BeadingStrategy& other); - virtual ~BeadingStrategy() - { - } + virtual ~BeadingStrategy() = default; /*! * Retrieve the bead widths with which to cover a given thickness. diff --git a/include/BeadingStrategy/BeadingStrategyFactory.h b/include/BeadingStrategy/BeadingStrategyFactory.h index 2789fa4657..a2b5c1bd51 100644 --- a/include/BeadingStrategy/BeadingStrategyFactory.h +++ b/include/BeadingStrategy/BeadingStrategyFactory.h @@ -1,11 +1,13 @@ -// Copyright (c) 2022 Ultimaker B.V. +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef BEADING_STRATEGY_FACTORY_H #define BEADING_STRATEGY_FACTORY_H -#include "../settings/types/Ratio.h" +#include + #include "BeadingStrategy.h" +#include "settings/types/Ratio.h" namespace cura { diff --git a/include/BeadingStrategy/LimitedBeadingStrategy.h b/include/BeadingStrategy/LimitedBeadingStrategy.h index 42d34f86a4..3e15eefec2 100644 --- a/include/BeadingStrategy/LimitedBeadingStrategy.h +++ b/include/BeadingStrategy/LimitedBeadingStrategy.h @@ -35,7 +35,7 @@ class LimitedBeadingStrategy : public BeadingStrategy coord_t getOptimalThickness(coord_t bead_count) const override; coord_t getTransitionThickness(coord_t lower_bead_count) const override; coord_t getOptimalBeadCount(coord_t thickness) const override; - virtual std::string toString() const override; + std::string toString() const override; coord_t getTransitioningLength(coord_t lower_bead_count) const override; diff --git a/include/BeadingStrategy/OuterWallInsetBeadingStrategy.h b/include/BeadingStrategy/OuterWallInsetBeadingStrategy.h index c8c6eae31d..840c04f888 100644 --- a/include/BeadingStrategy/OuterWallInsetBeadingStrategy.h +++ b/include/BeadingStrategy/OuterWallInsetBeadingStrategy.h @@ -25,7 +25,7 @@ class OuterWallInsetBeadingStrategy : public BeadingStrategy coord_t getOptimalBeadCount(coord_t thickness) const override; coord_t getTransitioningLength(coord_t lower_bead_count) const override; - virtual std::string toString() const; + std::string toString() const override; private: BeadingStrategyPtr parent_; diff --git a/include/BeadingStrategy/RedistributeBeadingStrategy.h b/include/BeadingStrategy/RedistributeBeadingStrategy.h index 2f8304bf39..52d41e1a93 100644 --- a/include/BeadingStrategy/RedistributeBeadingStrategy.h +++ b/include/BeadingStrategy/RedistributeBeadingStrategy.h @@ -45,7 +45,7 @@ class RedistributeBeadingStrategy : public BeadingStrategy coord_t getTransitioningLength(coord_t lower_bead_count) const override; double getTransitionAnchorPos(coord_t lower_bead_count) const override; - virtual std::string toString() const; + std::string toString() const override; protected: /*! diff --git a/include/BeadingStrategy/WideningBeadingStrategy.h b/include/BeadingStrategy/WideningBeadingStrategy.h index bda69f345d..cd0f00c406 100644 --- a/include/BeadingStrategy/WideningBeadingStrategy.h +++ b/include/BeadingStrategy/WideningBeadingStrategy.h @@ -27,14 +27,14 @@ class WideningBeadingStrategy : public BeadingStrategy virtual ~WideningBeadingStrategy() override = default; - virtual Beading compute(coord_t thickness, coord_t bead_count) const override; - virtual coord_t getOptimalThickness(coord_t bead_count) const override; - virtual coord_t getTransitionThickness(coord_t lower_bead_count) const override; - virtual coord_t getOptimalBeadCount(coord_t thickness) const override; - virtual coord_t getTransitioningLength(coord_t lower_bead_count) const override; - virtual double getTransitionAnchorPos(coord_t lower_bead_count) const override; - virtual std::vector getNonlinearThicknesses(coord_t lower_bead_count) const override; - virtual std::string toString() const override; + Beading compute(coord_t thickness, coord_t bead_count) const override; + coord_t getOptimalThickness(coord_t bead_count) const override; + coord_t getTransitionThickness(coord_t lower_bead_count) const override; + coord_t getOptimalBeadCount(coord_t thickness) const override; + coord_t getTransitioningLength(coord_t lower_bead_count) const override; + double getTransitionAnchorPos(coord_t lower_bead_count) const override; + std::vector getNonlinearThicknesses(coord_t lower_bead_count) const override; + std::string toString() const override; protected: BeadingStrategyPtr parent_; diff --git a/include/BoostInterface.hpp b/include/BoostInterface.hpp index a294450a11..b7a305dd54 100644 --- a/include/BoostInterface.hpp +++ b/include/BoostInterface.hpp @@ -7,9 +7,9 @@ #include #include -#include "utils/Point2LL.h" +#include "geometry/Point2LL.h" +#include "geometry/Polygon.h" #include "utils/PolygonsSegmentIndex.h" -#include "utils/polygon.h" using CSegment = cura::PolygonsSegmentIndex; diff --git a/include/ExtruderPlan.h b/include/ExtruderPlan.h index e5fc1dd11d..338dfba115 100644 --- a/include/ExtruderPlan.h +++ b/include/ExtruderPlan.h @@ -7,12 +7,12 @@ #include "FanSpeedLayerTime.h" #include "RetractionConfig.h" #include "gcodeExport.h" +#include "geometry/Point2LL.h" #include "pathPlanning/GCodePath.h" #include "pathPlanning/NozzleTempInsert.h" #include "pathPlanning/TimeMaterialEstimates.h" #include "settings/types/LayerIndex.h" #include "settings/types/Ratio.h" -#include "utils/Point2LL.h" #ifdef BUILD_TESTS #include //Friend tests, so that they can inspect the privates. @@ -180,7 +180,7 @@ class ExtruderPlan * \param maximum_cool_min_layer_time Maximum minimum layer time for all extruders in this layer * \param time_other_extr_plans Time spend on other extruders in this layer */ - void forceMinimalLayerTime(double maximum_cool_min_layer_time, double time_other_extr_plans); + bool forceMinimalLayerTime(double maximum_cool_min_layer_time, double time_other_extr_plans); /*! * @return The time needed for (un)retract the path diff --git a/include/ExtruderPrime.h b/include/ExtruderPrime.h new file mode 100644 index 0000000000..e6cb89b3c4 --- /dev/null +++ b/include/ExtruderPrime.h @@ -0,0 +1,18 @@ +// Copyright (c) 2023 UltiMaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. + +#ifndef EXTRUDERPRIME_H +#define EXTRUDERPRIME_H + +namespace cura +{ + +enum class ExtruderPrime +{ + None, // Do not prime at all for this extruder on this layer + Support, // Just extrude a sparse pattern which purpose is to support the upper parts of the prime tower + Prime, // Do an actual prime +}; + +} // namespace cura +#endif // EXTRUDERPRIME_H diff --git a/include/ExtruderUse.h b/include/ExtruderUse.h new file mode 100644 index 0000000000..9333adf1d4 --- /dev/null +++ b/include/ExtruderUse.h @@ -0,0 +1,21 @@ +// Copyright (c) 2023 UltiMaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. + +#ifndef EXTRUDERUSE_H +#define EXTRUDERUSE_H + +#include + +#include "ExtruderPrime.h" + +namespace cura +{ + +struct ExtruderUse +{ + size_t extruder_nr; + ExtruderPrime prime; +}; + +} // namespace cura +#endif // EXTRUDERUSE_H diff --git a/include/FffGcodeWriter.h b/include/FffGcodeWriter.h index 46b9657968..f2337823f0 100644 --- a/include/FffGcodeWriter.h +++ b/include/FffGcodeWriter.h @@ -7,12 +7,12 @@ #include #include +#include "ExtruderUse.h" #include "FanSpeedLayerTime.h" +#include "GCodePathConfig.h" #include "LayerPlanBuffer.h" #include "gcodeExport.h" -#include "settings/MeshPathConfigs.h" -#include "settings/PathConfigStorage.h" //For the MeshPathConfigs subclass. -#include "utils/ExtrusionLine.h" //Processing variable-width paths. +#include "utils/LayerVector.h" #include "utils/NoCopy.h" #include "utils/gettime.h" @@ -20,12 +20,13 @@ namespace cura { class AngleDegrees; -class Polygons; +class Shape; class SkinPart; class SliceDataStorage; class SliceMeshStorage; class SliceLayer; class SliceLayerPart; +struct MeshPathConfigs; /*! * Secondary stage in Fused Filament Fabrication processing: The generated polygons are used in the gcode generation. @@ -60,13 +61,8 @@ class FffGcodeWriter : public NoCopy */ std::ofstream output_file; - /*! - * For each raft/filler layer, the extruders to be used in that layer in the order in which they are going to be used. - * The first number is the first raft layer. Indexing is shifted compared to normal negative layer numbers for raft/filler layers. - */ - std::vector> extruder_order_per_layer_negative_layers; - - std::vector> extruder_order_per_layer; //!< For each layer, the extruders to be used in that layer in the order in which they are going to be used + //!< For each layer, the extruders to be used in that layer in the order in which they are going to be used + LayerVector> extruder_order_per_layer; std::vector> mesh_order_per_extruder; //!< For each extruder, the order of the meshes (first element is first mesh to be printed) @@ -169,7 +165,7 @@ class FffGcodeWriter : public NoCopy * * \param[in] storage where to get settings from. */ - size_t getStartExtruder(const SliceDataStorage& storage); + size_t getStartExtruder(const SliceDataStorage& storage) const; /*! * Set the infill angles and skin angles in the SliceDataStorage. @@ -206,6 +202,10 @@ class FffGcodeWriter : public NoCopy */ void processRaft(const SliceDataStorage& storage); + void startRaftLayer(const SliceDataStorage& storage, LayerPlan& gcode_layer, const LayerIndex layer_nr, size_t layer_extruder, size_t& current_extruder); + + void endRaftLayer(const SliceDataStorage& storage, LayerPlan& gcode_layer, const LayerIndex layer_nr, size_t& current_extruder, const bool append_to_prime_tower = true); + /*! * Convert the polygon data of a layer into a layer plan on the FffGcodeWriter::layer_plan_buffer * @@ -286,7 +286,7 @@ class FffGcodeWriter : public NoCopy void calculatePrimeLayerPerExtruder(const SliceDataStorage& storage); /*! - * Gets a list of extruders that are used on the given layer, but excluding the given starting extruder. + * Gets a list of extruders that are used on the given layer. * When it's on the first layer, the prime blob will also be taken into account. * * \note At the planning stage we only have information on areas, not how those are filled. @@ -294,9 +294,11 @@ class FffGcodeWriter : public NoCopy * * \param[in] storage where the slice data is stored. * \param current_extruder The current extruder with which we last printed + * \param global_extruders_used The extruders that are at some point used for the print job * \return The order of extruders for a layer beginning with \p current_extruder */ - std::vector getUsedExtrudersOnLayerExcludingStartingExtruder(const SliceDataStorage& storage, const size_t start_extruder, const LayerIndex& layer_nr) const; + std::vector + getUsedExtrudersOnLayer(const SliceDataStorage& storage, const size_t start_extruder, const LayerIndex& layer_nr, const std::vector& global_extruders_used) const; /*! * Calculate in which order to plan the meshes of a specific extruder @@ -560,7 +562,7 @@ class FffGcodeWriter : public NoCopy LayerPlan& gcode_layer, const SliceMeshStorage& mesh, const size_t extruder_nr, - const Polygons& area, + const Shape& area, const GCodePathConfig& config, EFillMethod pattern, const AngleDegrees skin_angle, @@ -593,7 +595,7 @@ class FffGcodeWriter : public NoCopy * \param last_position The position the print head is in before going to fill the part * \return The location near where to start filling the part */ - std::optional getSeamAvoidingLocation(const Polygons& filling_part, int filling_angle, Point2LL last_position) const; + std::optional getSeamAvoidingLocation(const Shape& filling_part, int filling_angle, Point2LL last_position) const; /*! * Add the g-code for ironing the top surface. @@ -633,12 +635,12 @@ class FffGcodeWriter : public NoCopy * layer. * * \param[in] storage Where the slice data is stored. - * \param[in] support_roof_outlines which polygons to generate roofs for -- originally split-up because of fractional (layer-height) layers - * \param[in] current_roof_config config to be used -- most importantly, support has slightly different configs for fractional (layer-height) layers + * \param[in] support_roof_outlines which polygons to generate roofs for. + * \param[in] current_roof_config config to be used. * \param gcodeLayer The initial planning of the g-code of the layer. * \return Whether any support skin was added to the layer plan. */ - bool addSupportRoofsToGCode(const SliceDataStorage& storage, const Polygons& support_roof_outlines, const GCodePathConfig& current_roof_config, LayerPlan& gcode_layer) const; + bool addSupportRoofsToGCode(const SliceDataStorage& storage, const Shape& support_roof_outlines, const GCodePathConfig& current_roof_config, LayerPlan& gcode_layer) const; /*! * Add the support bottoms to the layer plan \p gcodeLayer of the current @@ -658,8 +660,11 @@ class FffGcodeWriter : public NoCopy * \param[in] storage where the slice data is stored. * \param gcode_layer The initial planning of the gcode of the layer. * \param extruder_nr The extruder to switch to. + * \param append_to_prime_tower Indicates whether we should actually prime the extruder on the prime tower (normal + * case before actually using the extruder) or just do the basic priming (i.e. on first + * layer before starting the print */ - void setExtruder_addPrime(const SliceDataStorage& storage, LayerPlan& gcode_layer, const size_t extruder_nr) const; + void setExtruder_addPrime(const SliceDataStorage& storage, LayerPlan& gcode_layer, const size_t extruder_nr, const bool append_to_prime_tower = true) const; /*! * Add the prime tower gcode for the current layer. @@ -708,12 +713,24 @@ class FffGcodeWriter : public NoCopy * \return true if there needs to be a skin edge support wall in this layer, otherwise false */ static bool partitionInfillBySkinAbove( - Polygons& infill_below_skin, - Polygons& infill_not_below_skin, + Shape& infill_below_skin, + Shape& infill_not_below_skin, const LayerPlan& gcode_layer, const SliceMeshStorage& mesh, const SliceLayerPart& part, coord_t infill_line_width); + + /*! + * Find the first or last extruder used at the given layer. This may loop to lower layers if + * there is no extryder on the one that has been asked. If no extruder can be found at all, the + * very first used extruder will be returned. + * + * \param storage where the slice data is stored + * \param layer_nr The layer for which we want the extruder index + * \param last Indicates whether we want to retrieve the last or the first extruder being used + * \return The first or last exruder used at the given index + */ + size_t findUsedExtruderIndex(const SliceDataStorage& storage, const LayerIndex& layer_nr, bool last) const; }; } // namespace cura diff --git a/include/GCodePathConfig.h b/include/GCodePathConfig.h index 4531b650aa..82a2ea78dd 100644 --- a/include/GCodePathConfig.h +++ b/include/GCodePathConfig.h @@ -18,6 +18,8 @@ namespace cura */ struct GCodePathConfig { + static constexpr double FAN_SPEED_DEFAULT = -1.0; + coord_t z_offset{}; //(const GCodePathConfig& other) const = default; diff --git a/include/InsetOrderOptimizer.h b/include/InsetOrderOptimizer.h index e813a134af..3a28040376 100644 --- a/include/InsetOrderOptimizer.h +++ b/include/InsetOrderOptimizer.h @@ -1,4 +1,4 @@ -// Copyright (c) 2022 Ultimaker B.V. +// Copyright (c) 2024 Ultimaker B.V. // CuraEngine is released under the terms of the AGPLv3 or higher #ifndef INSET_ORDER_OPTIMIZER_H @@ -43,8 +43,10 @@ class InsetOrderOptimizer LayerPlan& gcode_layer, const Settings& settings, const int extruder_nr, - const GCodePathConfig& inset_0_non_bridge_config, - const GCodePathConfig& inset_X_non_bridge_config, + const GCodePathConfig& inset_0_default_config, + const GCodePathConfig& inset_X_default_config, + const GCodePathConfig& inset_0_roofing_config, + const GCodePathConfig& inset_X_roofing_config, const GCodePathConfig& inset_0_bridge_config, const GCodePathConfig& inset_X_bridge_config, const bool retract_before_outer_wall, @@ -53,7 +55,9 @@ class InsetOrderOptimizer const size_t wall_0_extruder_nr, const size_t wall_x_extruder_nr, const ZSeamConfig& z_seam_config, - const std::vector& paths); + const std::vector& paths, + const Point2LL& model_center_point, + const Shape& disallowed_areas_for_seams = {}); /*! * Adds the insets to the given layer plan. @@ -90,8 +94,10 @@ class InsetOrderOptimizer LayerPlan& gcode_layer_; const Settings& settings_; const size_t extruder_nr_; - const GCodePathConfig& inset_0_non_bridge_config_; - const GCodePathConfig& inset_X_non_bridge_config_; + const GCodePathConfig& inset_0_default_config_; + const GCodePathConfig& inset_X_default_config_; + const GCodePathConfig& inset_0_roofing_config_; + const GCodePathConfig& inset_X_roofing_config_; const GCodePathConfig& inset_0_bridge_config_; const GCodePathConfig& inset_X_bridge_config_; const bool retract_before_outer_wall_; @@ -102,10 +108,25 @@ class InsetOrderOptimizer const ZSeamConfig& z_seam_config_; const std::vector& paths_; const LayerIndex layer_nr_; + const Point2LL model_center_point_; // Center of the model (= all meshes) axis-aligned bounding-box. + Shape disallowed_areas_for_seams_; - std::vector> inset_polys_; // vector of vectors holding the inset polygons - Polygons retraction_region_; // After printing an outer wall, move into this region so that retractions do not leave visible blobs. Calculated lazily if needed (see - // retraction_region_calculated). + std::vector> inset_polys_; // vector of vectors holding the inset polygons + Shape retraction_region_; // After printing an outer wall, move into this region so that retractions do not leave visible blobs. Calculated lazily if needed (see + // retraction_region_calculated). + + /*! + * Given a closed polygon, insert a seam point at the point where the seam should be placed. + * This should result in the seam-finding algorithm finding that exact point, instead of the + * 'best' vertex on that polygon. Under certain circumstances, the seam-placing algorithm can + * however still deviate from this, for example when the seam-point placed here isn't suppored + * by the layer below. + * + * \param closed_line The polygon to insert the seam point in. (It's assumed to be closed at least.) + * + * \return The index of the inserted seam point, or std::nullopt if no seam point was inserted. + */ + std::optional insertSeamPoint(ExtrusionLine& closed_line); /*! * Determine if the paths should be reversed diff --git a/include/InterlockingGenerator.h b/include/InterlockingGenerator.h index da37b66e53..3ab4e27335 100644 --- a/include/InterlockingGenerator.h +++ b/include/InterlockingGenerator.h @@ -8,8 +8,9 @@ #include #include +#include "geometry/PointMatrix.h" +#include "geometry/Polygon.h" #include "utils/VoxelUtils.h" -#include "utils/polygon.h" namespace cura { @@ -106,7 +107,7 @@ class InterlockingGenerator * \param detec The expand distance. (Not equal to offset, but a series of small offsets and differences). * \return A pair of polygons that repressent the 'borders' of a and b, but expanded 'perpendicularly'. */ - std::pair growBorderAreasPerpendicular(const Polygons& a, const Polygons& b, const coord_t& detect) const; + std::pair growBorderAreasPerpendicular(const Shape& a, const Shape& b, const coord_t& detect) const; /*! Special handling for thin strips of material. * @@ -132,7 +133,7 @@ class InterlockingGenerator * \param kernel The dilation kernel to give the returned voxel shell more thickness * \param[out] cells The output cells which elong to the shell */ - void addBoundaryCells(const std::vector& layers, const DilationKernel& kernel, std::unordered_set& cells) const; + void addBoundaryCells(const std::vector& layers, const DilationKernel& kernel, std::unordered_set& cells) const; /*! * Compute the regions occupied by both models. @@ -140,13 +141,13 @@ class InterlockingGenerator * A morphological close is performed so that we don't register small gaps between the two models as being separate. * \return layer_regions The computed layer regions */ - std::vector computeUnionedVolumeRegions() const; + std::vector computeUnionedVolumeRegions() const; /*! * Generate the polygons for the beams of a single cell * \return cell_area_per_mesh_per_layer The output polygons for each beam */ - std::vector> generateMicrostructure() const; + std::vector> generateMicrostructure() const; /*! * Change the outlines of the meshes with the computed interlocking structure. @@ -154,7 +155,7 @@ class InterlockingGenerator * \param cells The cells where we want to apply the interlocking structure. * \param layer_regions The total volume of the two meshes combined (and small gaps closed) */ - void applyMicrostructureToOutlines(const std::unordered_set& cells, const std::vector& layer_regions) const; + void applyMicrostructureToOutlines(const std::unordered_set& cells, const std::vector& layer_regions) const; static const coord_t ignored_gap_ = 100u; //!< Distance between models to be considered next to each other so that an interlocking structure will be generated there diff --git a/include/LayerPlan.h b/include/LayerPlan.h index 1d3b3628a3..d81bb9c437 100644 --- a/include/LayerPlan.h +++ b/include/LayerPlan.h @@ -1,4 +1,4 @@ -// Copyright (c) 2023 UltiMaker +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher #ifndef LAYER_PLAN_H @@ -10,6 +10,9 @@ #include "PathOrderOptimizer.h" #include "SpaceFillType.h" #include "gcodeExport.h" +#include "geometry/LinesSet.h" +#include "geometry/OpenLinesSet.h" +#include "geometry/Polygon.h" #include "pathPlanning/GCodePath.h" #include "pathPlanning/NozzleTempInsert.h" #include "pathPlanning/TimeMaterialEstimates.h" @@ -17,7 +20,6 @@ #include "settings/PathConfigStorage.h" #include "settings/types/LayerIndex.h" #include "utils/ExtrusionJunction.h" -#include "utils/polygon.h" #ifdef BUILD_TESTS #include //Friend tests, so that they can inspect the privates. @@ -36,7 +38,6 @@ class Comb; class SliceDataStorage; class LayerPlanBuffer; - /*! * The LayerPlan class stores multiple moves that are planned. * @@ -56,7 +57,7 @@ class LayerPlan : public NoCopy public: const PathConfigStorage configs_storage_; //!< The line configs for this layer for each feature type - coord_t z_; + const coord_t z_; coord_t final_travel_z_; bool mode_skip_agressive_merge_; //!< Whether to give every new path the 'skip_agressive_merge_hint' property (see GCodePath); default is false. @@ -90,12 +91,16 @@ class LayerPlan : public NoCopy std::optional> next_layer_acc_jerk_; //!< If there is a next layer, the first acceleration and jerk it starts with. bool was_inside_; //!< Whether the last planned (extrusion) move was inside a layer part bool is_inside_; //!< Whether the destination of the next planned travel move is inside a layer part - Polygons comb_boundary_minimum_; //!< The minimum boundary within which to comb, or to move into when performing a retraction. - Polygons comb_boundary_preferred_; //!< The boundary preferably within which to comb, or to move into when performing a retraction. + Shape comb_boundary_minimum_; //!< The minimum boundary within which to comb, or to move into when performing a retraction. + Shape comb_boundary_preferred_; //!< The boundary preferably within which to comb, or to move into when performing a retraction. Comb* comb_; coord_t comb_move_inside_distance_; //!< Whenever using the minimum boundary for combing it tries to move the coordinates inside by this distance after calculating the combing. - Polygons bridge_wall_mask_; //!< The regions of a layer part that are not supported, used for bridging - Polygons overhang_mask_; //!< The regions of a layer part where the walls overhang + Shape bridge_wall_mask_; //!< The regions of a layer part that are not supported, used for bridging + Shape overhang_mask_; //!< The regions of a layer part where the walls overhang + Shape seam_overhang_mask_; //!< The regions of a layer part where the walls overhang, specifically as defined for the seam + Shape roofing_mask_; //!< The regions of a layer part where the walls are exposed to the air + + bool min_layer_time_used = false; //!< Wether or not the minimum layer time (cool_min_layer_time) was actually used in this layerplan. const std::vector fan_speed_layer_time_settings_per_extruder_; @@ -175,7 +180,7 @@ class LayerPlan : public NoCopy */ ExtruderTrain* getLastPlannedExtruderTrain(); - const Polygons* getCombBoundaryInside() const; + const Shape* getCombBoundaryInside() const; LayerIndex getLayerNr() const; @@ -195,14 +200,34 @@ class LayerPlan : public NoCopy * Whether the prime tower is already planned for the specified extruder. * \param extruder_nr The extruder to check. */ - bool getPrimeTowerIsPlanned(unsigned int extruder_nr) const; + bool getPrimeTowerIsPlanned(size_t extruder_nr) const; /*! * Mark the prime tower as planned for the specified extruder. * \param extruder_nr The extruder to mark as having its prime tower * planned. */ - void setPrimeTowerIsPlanned(unsigned int extruder_nr); + void setPrimeTowerIsPlanned(size_t extruder_nr); + + /*! + * Whether the prime tower extra base is already planned. + */ + bool getPrimeTowerBaseIsPlanned() const; + + /*! + * Mark the prime tower extra base as planned. + */ + void setPrimeTowerBaseIsPlanned(); + + /*! + * Whether the prime tower extra inset is already planned. + */ + bool getPrimeTowerInsetIsPlanned() const; + + /*! + * Mark the prime tower extra inset as planned. + */ + void setPrimeTowerInsetIsPlanned(); bool getSkirtBrimIsPlanned(unsigned int extruder_nr) const; @@ -248,14 +273,28 @@ class LayerPlan : public NoCopy * * \param polys The unsupported areas of the part currently being processed that will require bridges. */ - void setBridgeWallMask(const Polygons& polys); + void setBridgeWallMask(const Shape& polys); /*! * Set overhang_mask. * * \param polys The overhung areas of the part currently being processed that will require modified print settings */ - void setOverhangMask(const Polygons& polys); + void setOverhangMask(const Shape& polys); + + /*! + * Set seam_overhang_mask. + * + * \param polys The overhung areas of the part currently being processed that will require modified print settings w.r.t. seams + */ + void setSeamOverhangMask(const Shape& polys); + + /*! + * Set roofing_mask. + * + * \param polys The areas of the part currently being processed that will require roofing. + */ + void setRoofingMask(const Shape& polys); /*! * Travel to a certain point, with all of the procedures necessary to do so. @@ -341,7 +380,7 @@ class LayerPlan : public NoCopy * \param always_retract Whether to force a retraction when moving to the start of the polygon (used for outer walls) */ void addPolygon( - ConstPolygonRef polygon, + const Polygon& polygon, int startIdx, const bool reverse, const GCodePathConfig& config, @@ -379,7 +418,7 @@ class LayerPlan : public NoCopy * If unset, this causes it to start near the last planned location. */ void addPolygonsByOptimizer( - const Polygons& polygons, + const Shape& polygons, const GCodePathConfig& config, const ZSeamConfig& z_seam_config = ZSeamConfig(), coord_t wall_0_wipe_dist = 0, @@ -395,8 +434,10 @@ class LayerPlan : public NoCopy * \param p1 The end vertex of the line. * \param settings The settings which should apply to this line added to the * layer plan. - * \param non_bridge_config The config with which to print the wall lines - * that are not spanning a bridge. + * \param default_config The config with which to print the wall lines + * that are not spanning a bridge or are exposed to air. + * \param roofing_config The config with which to print the wall lines + * that are exposed to air. * \param bridge_config The config with which to print the wall lines that * are spanning a bridge. * \param flow The ratio with which to multiply the extrusion amount. @@ -413,7 +454,8 @@ class LayerPlan : public NoCopy const Point2LL& p0, const Point2LL& p1, const Settings& settings, - const GCodePathConfig& non_bridge_config, + const GCodePathConfig& default_config, + const GCodePathConfig& roofing_config, const GCodePathConfig& bridge_config, double flow, const Ratio width_factor, @@ -426,10 +468,10 @@ class LayerPlan : public NoCopy * \param wall The vertices of the wall to add. * \param start_idx The index of the starting vertex to start at. * \param settings The settings which should apply to this wall added to the layer plan. - * \param non_bridge_config The config with which to print the wall lines - * that are not spanning a bridge. - * \param bridge_config The config with which to print the wall lines that - * are spanning a bridge. + * \param default_config The config with which to print the wall lines + * that are not spanning a bridge or are exposed to air. + * \param roofing_config The config with which to print the wall lines + * that are exposed to air. * \param wall_0_wipe_dist The distance to travel along the wall after it * has been laid down, in order to wipe the start and end of the wall * \param flow_ratio The ratio with which to multiply the extrusion amount. @@ -437,10 +479,11 @@ class LayerPlan : public NoCopy * start of the wall (used for outer walls). */ void addWall( - ConstPolygonRef wall, + const Polygon& wall, int start_idx, const Settings& settings, - const GCodePathConfig& non_bridge_config, + const GCodePathConfig& default_config, + const GCodePathConfig& roofing_config, const GCodePathConfig& bridge_config, coord_t wall_0_wipe_dist, double flow_ratio, @@ -451,8 +494,10 @@ class LayerPlan : public NoCopy * \param wall The wall of type ExtrusionJunctions * \param start_idx The index of the starting vertex to start at. * \param mesh The current mesh being added to the layer plan. - * \param non_bridge_config The config with which to print the wall lines - * that are not spanning a bridge. + * \param default_config The config with which to print the wall lines + * that are not spanning a bridge or are exposed to air. + * \param roofing_config The config with which to print the wall lines + * that are exposed to air. * \param bridge_config The config with which to print the wall lines that * are spanning a bridge * \param wall_0_wipe_dist The distance to travel along the wall after it @@ -469,7 +514,8 @@ class LayerPlan : public NoCopy const ExtrusionLine& wall, int start_idx, const Settings& settings, - const GCodePathConfig& non_bridge_config, + const GCodePathConfig& default_config, + const GCodePathConfig& roofing_config, const GCodePathConfig& bridge_config, coord_t wall_0_wipe_dist, double flow_ratio, @@ -490,7 +536,10 @@ class LayerPlan : public NoCopy * Add walls (polygons) to the gcode with optimized order. * \param walls The walls * \param settings The settings which should apply to these walls added to the layer plan. - * \param non_bridge_config The config with which to print the wall lines that are not spanning a bridge + * \param default_config The config with which to print the wall lines + * that are not spanning a bridge or are exposed to air. + * \param roofing_config The config with which to print the wall lines + * that are exposed to air. * \param bridge_config The config with which to print the wall lines that are spanning a bridge * \param z_seam_config Optional configuration for z-seam * \param wall_0_wipe_dist The distance to travel along each wall after it has been laid down, in order to wipe the start and end of the wall together @@ -499,9 +548,10 @@ class LayerPlan : public NoCopy * \param alternate_inset_direction_modifier Whether to alternate the direction of the walls for each inset. */ void addWalls( - const Polygons& walls, + const Shape& walls, const Settings& settings, - const GCodePathConfig& non_bridge_config, + const GCodePathConfig& default_config, + const GCodePathConfig& roofing_config, const GCodePathConfig& bridge_config, const ZSeamConfig& z_seam_config = ZSeamConfig(), coord_t wall_0_wipe_dist = 0, @@ -510,7 +560,33 @@ class LayerPlan : public NoCopy /*! * Add lines to the gcode with optimized order. - * \param polygons The lines + * \param lines The lines + * \param config The config of the lines + * \param space_fill_type The type of space filling used to generate the line segments (should be either Lines or PolyLines!) + * \param enable_travel_optimization Whether to enable some potentially time consuming optimization of order the lines are printed to reduce the travel time required. + * \param wipe_dist (optional) the distance wiped without extruding after laying down a line. + * \param flow_ratio The ratio with which to multiply the extrusion amount + * \param near_start_location Optional: Location near where to add the first line. If not provided the last position is used. + * \param fan_speed optional fan speed override for this path + * \param reverse_print_direction Whether to reverse the optimized order and their printing direction. + * \param order_requirements Pairs where first needs to be printed before second. Pointers are pointing to elements of \p lines + */ + template + void addLinesByOptimizer( + const LinesSet& lines, + const GCodePathConfig& config, + const SpaceFillType space_fill_type, + const bool enable_travel_optimization = false, + const coord_t wipe_dist = 0, + const Ratio flow_ratio = 1.0, + const std::optional near_start_location = std::optional(), + const double fan_speed = GCodePathConfig::FAN_SPEED_DEFAULT, + const bool reverse_print_direction = false, + const std::unordered_multimap& order_requirements = PathOrderOptimizer::no_order_requirements_); + + /*! + * Add lines to the gcode with optimized order. + * \param lines The lines * \param config The config of the lines * \param space_fill_type The type of space filling used to generate the line segments (should be either Lines or PolyLines!) * \param enable_travel_optimization Whether to enable some potentially time consuming optimization of order the lines are printed to reduce the travel time required. @@ -519,10 +595,10 @@ class LayerPlan : public NoCopy * \param near_start_location Optional: Location near where to add the first line. If not provided the last position is used. * \param fan_speed optional fan speed override for this path * \param reverse_print_direction Whether to reverse the optimized order and their printing direction. - * \param order_requirements Pairs where first needs to be printed before second. Pointers are pointing to elements of \p polygons + * \param order_requirements Pairs where first needs to be printed before second. Pointers are pointing to elements of \p lines */ void addLinesByOptimizer( - const Polygons& polygons, + const MixedLinesSet& lines, const GCodePathConfig& config, const SpaceFillType space_fill_type, const bool enable_travel_optimization = false, @@ -531,11 +607,11 @@ class LayerPlan : public NoCopy const std::optional near_start_location = std::optional(), const double fan_speed = GCodePathConfig::FAN_SPEED_DEFAULT, const bool reverse_print_direction = false, - const std::unordered_multimap& order_requirements = PathOrderOptimizer::no_order_requirements_); + const std::unordered_multimap& order_requirements = PathOrderOptimizer::no_order_requirements_); /*! - * Add polygons to the g-code with monotonic order. - * \param polygons The lines to add. + * Add lines to the g-code with monotonic order. + * \param lines The lines to add. * \param config The settings to print those lines with. * \param space_fill_type The type of space filling used to generate the * line segments (should be either Lines or PolyLines!) @@ -555,8 +631,8 @@ class LayerPlan : public NoCopy * \param fan_speed Fan speed override for this path. */ void addLinesMonotonic( - const Polygons& area, - const Polygons& polygons, + const Shape& area, + const OpenLinesSet& lines, const GCodePathConfig& config, const SpaceFillType space_fill_type, const AngleRadians monotonic_direction, @@ -566,25 +642,6 @@ class LayerPlan : public NoCopy const Ratio flow_ratio = 1.0_r, const double fan_speed = GCodePathConfig::FAN_SPEED_DEFAULT); -protected: - /*! - * Add order optimized lines to the gcode. - * \param paths The paths in order - * \param config The config of the lines - * \param space_fill_type The type of space filling used to generate the line segments (should be either Lines or PolyLines!) - * \param wipe_dist (optional) the distance wiped without extruding after laying down a line. - * \param flow_ratio The ratio with which to multiply the extrusion amount - * \param fan_speed optional fan speed override for this path - */ - void addLinesInGivenOrder( - const std::vector>& paths, - const GCodePathConfig& config, - const SpaceFillType space_fill_type, - const coord_t wipe_dist, - const Ratio flow_ratio, - const double fan_speed); - -public: /*! * Add a spiralized slice of wall that is interpolated in X/Y between \p last_wall and \p wall. * @@ -600,8 +657,8 @@ class LayerPlan : public NoCopy */ void spiralizeWallSlice( const GCodePathConfig& config, - ConstPolygonRef wall, - ConstPolygonRef last_wall, + const Polygon& wall, + const Polygon& last_wall, int seam_vertex_idx, int last_seam_vertex_idx, const bool is_top_layer, @@ -620,12 +677,12 @@ class LayerPlan : public NoCopy template unsigned locateFirstSupportedVertex(const T& wall, const unsigned start_idx) const { - if (bridge_wall_mask_.empty() && overhang_mask_.empty()) + if (bridge_wall_mask_.empty() && seam_overhang_mask_.empty()) { return start_idx; } - Polygons air_below(bridge_wall_mask_.unionPolygons(overhang_mask_)); + const auto air_below = bridge_wall_mask_.unionPolygons(seam_overhang_mask_); unsigned curr_idx = start_idx; @@ -705,7 +762,7 @@ class LayerPlan : public NoCopy * it. * \param part If given, stay within the boundary of this part. */ - void moveInsideCombBoundary(const coord_t distance, const std::optional& part = std::nullopt); + void moveInsideCombBoundary(const coord_t distance, const std::optional& part = std::nullopt, GCodePath* path = nullptr); /*! * If enabled, apply the modify plugin to the layer-plan. @@ -736,9 +793,26 @@ class LayerPlan : public NoCopy * - If CombingMode::INFILL: Add the infill (infill only). * * \param boundary_type The boundary type to compute. - * \return the combing boundary or an empty Polygons if no combing is required + * \return the combing boundary or an empty Shape if no combing is required */ - Polygons computeCombBoundary(const CombBoundary boundary_type); + Shape computeCombBoundary(const CombBoundary boundary_type); + + /*! + * Add order optimized lines to the gcode. + * \param lines The lines in order + * \param config The config of the lines + * \param space_fill_type The type of space filling used to generate the line segments (should be either Lines or PolyLines!) + * \param wipe_dist (optional) the distance wiped without extruding after laying down a line. + * \param flow_ratio The ratio with which to multiply the extrusion amount + * \param fan_speed optional fan speed override for this path + */ + void addLinesInGivenOrder( + const std::vector>& lines, + const GCodePathConfig& config, + const SpaceFillType space_fill_type, + const coord_t wipe_dist, + const Ratio flow_ratio, + const double fan_speed); }; } // namespace cura diff --git a/include/LayerPlanBuffer.h b/include/LayerPlanBuffer.h index 14a97219a6..3916321729 100644 --- a/include/LayerPlanBuffer.h +++ b/include/LayerPlanBuffer.h @@ -7,17 +7,15 @@ #include #include -#include "ExtruderPlan.h" -#include "LayerPlan.h" #include "Preheat.h" -#include "gcodeExport.h" #include "settings/Settings.h" #include "settings/types/Duration.h" namespace cura { - +class LayerPlan; +class ExtruderPlan; class GCodeExport; /*! @@ -212,7 +210,6 @@ class LayerPlanBuffer void handleStandbyTemp(std::vector& extruder_plans, unsigned int extruder_plan_idx, double standby_temp); }; - } // namespace cura #endif // LAYER_PLAN_BUFFER_H diff --git a/include/MeshGroup.h b/include/MeshGroup.h index 232bf08662..6f20523f4a 100644 --- a/include/MeshGroup.h +++ b/include/MeshGroup.h @@ -18,9 +18,21 @@ class Matrix4x3D; * One MeshGroup is a whole which is printed at once. * Generally there is one single MeshGroup, though when using one-at-a-time printing, multiple MeshGroups are processed consecutively. */ -class MeshGroup : public NoCopy +class MeshGroup { public: + MeshGroup() = default; + + ~MeshGroup() = default; + + MeshGroup(MeshGroup&& other) noexcept = default; + + MeshGroup& operator=(MeshGroup&& other) noexcept = default; + + /* Copying a MeshGroup is not allowed */ + MeshGroup(const MeshGroup& other) = delete; + MeshGroup& operator=(const MeshGroup& other) = delete; + std::vector meshes; Settings settings; diff --git a/include/PathOrder.h b/include/PathOrder.h index bd95594ee7..d1c826990f 100644 --- a/include/PathOrder.h +++ b/include/PathOrder.h @@ -4,7 +4,7 @@ #ifndef PATHORDER_H #define PATHORDER_H -#include "PathOrdering.h" +#include "path_ordering.h" #include "settings/ZSeamConfig.h" //To get the seam settings. #include "utils/polygonUtils.h" @@ -42,7 +42,7 @@ class PathOrder * The location where the nozzle is assumed to start from before printing * these parts. */ - Point2LL start_point_; + const Point2LL start_point_; /*! * Seam settings. @@ -97,6 +97,15 @@ class PathOrder */ constexpr static coord_t coincident_point_distance_ = 10; + /*! + * \brief Basic constructor with a given start point + * \param start_point The location where the nozzle is assumed to start + * from before printing these parts. + */ + PathOrder(const Point2LL& start_point) + : start_point_(start_point) + { + } /*! * In the current set of paths, detect all loops and mark them as such. diff --git a/include/PathOrderMonotonic.h b/include/PathOrderMonotonic.h index 356eb248f5..b2334e7a9e 100644 --- a/include/PathOrderMonotonic.h +++ b/include/PathOrderMonotonic.h @@ -9,7 +9,7 @@ #include //To track starting points of monotonic sequences. #include "PathOrder.h" -#include "PathOrdering.h" +#include "path_ordering.h" namespace cura { @@ -45,11 +45,11 @@ class PathOrderMonotonic : public PathOrder using PathOrder::coincident_point_distance_; PathOrderMonotonic(const AngleRadians monotonic_direction, const coord_t max_adjacent_distance, const Point2LL start_point) + : PathOrder(start_point) // The monotonic vector needs to rotate clockwise instead of counter-clockwise, the same as how the infill patterns are generated. - : monotonic_vector_(-std::cos(monotonic_direction) * monotonic_vector_resolution_, std::sin(monotonic_direction) * monotonic_vector_resolution_) + , monotonic_vector_(-std::cos(monotonic_direction) * monotonic_vector_resolution_, std::sin(monotonic_direction) * monotonic_vector_resolution_) , max_adjacent_distance_(max_adjacent_distance) { - this->start_point_ = start_point; } void optimize() @@ -62,7 +62,7 @@ class PathOrderMonotonic : public PathOrder // Get the vertex data and store it in the paths. for (Path& path : this->paths_) { - path.converted_ = path.getVertexData(); + path.converted_ = &path.getVertexData(); } std::vector reordered; // To store the result in. At the end, we'll std::swap with the real paths. diff --git a/include/PathOrderOptimizer.h b/include/PathOrderOptimizer.h index 9bd8288a95..be8e61873b 100644 --- a/include/PathOrderOptimizer.h +++ b/include/PathOrderOptimizer.h @@ -1,9 +1,10 @@ -// Copyright (c) 2023 UltiMaker +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher #ifndef PATHORDEROPTIMIZER_H #define PATHORDEROPTIMIZER_H +#include #include #include @@ -15,10 +16,9 @@ #include #include -#include "InsetOrderOptimizer.h" // for makeOrderIncludeTransitive -#include "PathOrdering.h" #include "pathPlanning/CombPath.h" //To calculate the combing distance if we want to use combing. #include "pathPlanning/LinePolygonsCrossings.h" //To prevent calculating combing distances if we don't cross the combing borders. +#include "path_ordering.h" #include "settings/EnumSettings.h" //To get the seam settings. #include "settings/ZSeamConfig.h" //To read the seam configuration. #include "utils/linearAlg2D.h" //To find the angle of corners to hide seams. @@ -61,6 +61,8 @@ class PathOrderOptimizer { public: using OrderablePath = PathOrdering; + /* Areas defined here are not allowed to have the start the prints */ + Shape disallowed_area_for_seams; /*! * After optimizing, this contains the paths that need to be printed in the * correct order. @@ -107,10 +109,11 @@ class PathOrderOptimizer const Point2LL& start_point, const ZSeamConfig seam_config = ZSeamConfig(), const bool detect_loops = false, - const Polygons* combing_boundary = nullptr, + const Shape* combing_boundary = nullptr, const bool reverse_direction = false, const std::unordered_multimap& order_requirements = no_order_requirements_, - const bool group_outer_walls = false) + const bool group_outer_walls = false, + const Shape& disallowed_areas_for_seams = {}) : start_point_(start_point) , seam_config_(seam_config) , combing_boundary_((combing_boundary != nullptr && ! combing_boundary->empty()) ? combing_boundary : nullptr) @@ -118,6 +121,8 @@ class PathOrderOptimizer , reverse_direction_(reverse_direction) , _group_outer_walls(group_outer_walls) , order_requirements_(&order_requirements) + , disallowed_area_for_seams{ disallowed_areas_for_seams } + { } @@ -125,10 +130,11 @@ class PathOrderOptimizer * Add a new polygon to be optimized. * \param polygon The polygon to optimize. */ - void addPolygon(const Path& polygon) + void addPolygon(const Path& polygon, std::optional force_start_index = std::nullopt) { constexpr bool is_closed = true; paths_.emplace_back(polygon, is_closed); + paths_.back().force_start_index_ = force_start_index; } /*! @@ -157,7 +163,7 @@ class PathOrderOptimizer // Get the vertex data and store it in the paths. for (auto& path : paths_) { - path.converted_ = path.getVertexData(); + path.converted_ = &path.getVertexData(); vertices_to_paths_.emplace(path.vertices_, &path); } @@ -257,7 +263,7 @@ class PathOrderOptimizer /*! * Boundary to avoid when making travel moves. */ - const Polygons* combing_boundary_; + const Shape* combing_boundary_; /*! * Whether to check polylines to see if they are closed, before optimizing. @@ -359,10 +365,12 @@ class PathOrderOptimizer // initialize the roots set with all possible nodes std::unordered_set roots; std::unordered_set leaves; + std::unordered_map num_incoming_edges; for (const auto& path : paths_) { roots.insert(path.vertices_); leaves.insert(path.vertices_); + num_incoming_edges.emplace(path.vertices_, 0); } // remove all edges from roots with an incoming edge @@ -371,6 +379,7 @@ class PathOrderOptimizer { roots.erase(v); leaves.erase(u); + num_incoming_edges.find(v)->second++; } // We used a shared visited set between runs of dfs. This is for the case when we reverse the ordering tree. @@ -379,20 +388,27 @@ class PathOrderOptimizer Point2LL current_position = start_point_; std::function(const Path, const std::unordered_multimap&)> get_neighbours - = [current_position, this](const Path current_node, const std::unordered_multimap& graph) + = [¤t_position, &num_incoming_edges, this](const Path current_node, const std::unordered_multimap& graph) { std::vector order; // Output order to traverse neighbors const auto& [neighbour_begin, neighbour_end] = graph.equal_range(current_node); - auto candidates_iterator = ranges::make_subrange(neighbour_begin, neighbour_end); std::unordered_set candidates; - for (const auto& [_, neighbour] : candidates_iterator) + for (const auto& [_, neighbour] : ranges::make_subrange(neighbour_begin, neighbour_end)) { - candidates.insert(neighbour); + // we only want to visit nodes that have no incoming edges, this is for the situation where we + // are printing paths from inner to outer. As the ordering tree is reversed, and we start traversing + // from an arbitrary leaf we might encounter a junction. All paths from the other leaf-side(s) of the junction + // should be printed before continuing the junctions. Only once every branch of the junction has been ordered + // we can continue with the junction itself. + if (num_incoming_edges.at(neighbour) == 0) + { + candidates.insert(neighbour); + } } auto local_current_position = current_position; - while (candidates.size() != 0) + while (! candidates.empty()) { Path best_candidate = findClosestPathVertices(local_current_position, candidates); @@ -417,10 +433,10 @@ class PathOrderOptimizer }; const std::function handle_node - = [¤t_position, &optimized_order, this](const Path current_node, [[maybe_unused]] const std::nullptr_t state) + = [¤t_position, &optimized_order, &order_requirements, &num_incoming_edges, this](const Path current_node, [[maybe_unused]] const std::nullptr_t state) { // We should make map from node <-> path for this stuff - for (auto& path : paths_) + for (const auto& path : paths_) { if (path.vertices_ == current_node) { @@ -437,6 +453,13 @@ class PathOrderOptimizer // Add to optimized order optimized_order.push_back(path); + // update incoming edges of neighbours since this path is handled + const auto& [neighbour_begin, neighbour_end] = order_requirements.equal_range(path.vertices_); + for (const auto& [_, neighbour] : ranges::make_subrange(neighbour_begin, neighbour_end)) + { + num_incoming_edges.find(neighbour)->second--; + } + break; } } @@ -587,6 +610,52 @@ class PathOrderOptimizer return best_candidate; } + /** + * @brief Analyze the positions in a path and determine the next optimal position based on a proximity criterion. + * + * This function iteratively examines positions along the given path, checking if the position is close to 3D model. + * Each position is specified by an index, starting with `best_pos`. If the position is close to the model according to + * `isVertexCloseToPolygonPath` function, the function recursively calls itself with the next position. This process is + * repeated until all positions have been checked or `number_of_paths_analysed` becomes equal to `path_size`. + * If `number_of_paths_analysed` becomes equal to `path_size`, it logs a warning and returns the current best position. + * + * @param best_pos The index of the initial position for analysis in the path. + * @param path An OrderablePath instance containing the path to be examined. + * @param number_of_paths_analysed Optionally, the initial index of paths analysed. Defaults to 0. + * @return The index of the next optimal position in the path sequence. May be the same as the input `best_pos`, + * or may be incremented to a different location based on the proximity criterion. + * + * @note This function uses recursion to evaluate each position in the path. + * @note The process stops prematurely if no start path is found for the support z seam distance. + * This typically happens when the distance of the support seam from the model is bigger than all the support wall points. + */ + + size_t pathIfZseamIsInDisallowedArea(size_t best_pos, const OrderablePath& path, size_t number_of_paths_analysed) + { + size_t path_size = path.converted_->size(); + if (path_size > number_of_paths_analysed) + { + if (! disallowed_area_for_seams.empty()) + { + Point2LL current_candidate = (path.converted_)->at(best_pos); + if (disallowed_area_for_seams.inside(current_candidate, true)) + { + size_t next_best_position = (path_size > best_pos + 1) ? best_pos + 1 : 0; + number_of_paths_analysed += 1; + best_pos = pathIfZseamIsInDisallowedArea(next_best_position, path, number_of_paths_analysed); + } + } + } + else + { + spdlog::warn("No start path found for support z seam distance"); + // We can also calculate the best point to start at this point. + // This usually happens when the distance of support seam from model is bigger than the whole support wall points. + } + return best_pos; + } + + /*! * Find the vertex which will be the starting point of printing a polygon or * polyline. @@ -616,10 +685,7 @@ class PathOrderOptimizer { return path.converted_->size() - 1; // Back end is closer. } - else - { - return 0; // Front end is closer. - } + return 0; // Front end is closer. } // Rest of the function only deals with (closed) polygons. We need to be able to find the seam location of those polygons. @@ -630,6 +696,12 @@ class PathOrderOptimizer return vert; } + if (path.force_start_index_.has_value()) + { + // Start index already known, since we forced it, return. + return path.force_start_index_.value(); + } + // Precompute segments lengths because we are going to need them multiple times std::vector segments_sizes(path.converted_->size()); coord_t total_length = 0; @@ -644,7 +716,7 @@ class PathOrderOptimizer size_t best_i; double best_score = std::numeric_limits::infinity(); - for (const auto& [i, here] : **path.converted_ | ranges::views::drop_last(1) | ranges::views::enumerate) + for (const auto& [i, here] : *path.converted_ | ranges::views::drop_last(1) | ranges::views::enumerate) { // For most seam types, the shortest distance matters. Not for SHARPEST_CORNER though. // For SHARPEST_CORNER, use a fixed starting score of 0. @@ -657,6 +729,7 @@ class PathOrderOptimizer // angles > 0 are convex (right turning) double corner_shift; + if (seam_config_.type_ == EZSeamType::SHORTEST) { // the more a corner satisfies our criteria, the closer it appears to be @@ -723,6 +796,10 @@ class PathOrderOptimizer } } + if (! disallowed_area_for_seams.empty()) + { + best_i = pathIfZseamIsInDisallowedArea(best_i, path, 0); + } return best_i; } @@ -867,7 +944,7 @@ class PathOrderOptimizer * \param polygon A polygon to get a random vertex of. * \return A random index in that polygon. */ - size_t getRandomPointInPolygon(ConstPolygonRef const& polygon) const + size_t getRandomPointInPolygon(const PointsSet& polygon) const { return rand() % polygon.size(); } diff --git a/include/PrimeTower.h b/include/PrimeTower.h index a4a31a26b9..4de22dfa57 100644 --- a/include/PrimeTower.h +++ b/include/PrimeTower.h @@ -4,13 +4,15 @@ #ifndef PRIME_TOWER_H #define PRIME_TOWER_H +#include #include +#include "ExtruderUse.h" +#include "geometry/Polygon.h" +#include "settings/EnumSettings.h" #include "settings/types/LayerIndex.h" -#include "utils/polygon.h" // Polygons #include "utils/polygonUtils.h" - namespace cura { @@ -26,8 +28,8 @@ class LayerPlan; class PrimeTower { private: - using MovesByExtruder = std::vector; - using MovesByLayer = std::vector; + using MovesByExtruder = std::map; + using MovesByLayer = std::map>; size_t extruder_count_; //!< Number of extruders @@ -36,19 +38,27 @@ class PrimeTower Point2LL post_wipe_point_; //!< Location to post-wipe the unused nozzle off on - std::vector prime_tower_start_locations_; //!< The differernt locations where to pre-wipe the active nozzle + std::vector prime_tower_start_locations_; //!< The differernt locations where to pre-wipe the active nozzle const unsigned int number_of_prime_tower_start_locations_ = 21; //!< The required size of \ref PrimeTower::wipe_locations MovesByExtruder prime_moves_; //!< For each extruder, the moves to be processed for actual priming. + + /* + * The first index is a bitmask representing an extruder combination, e.g. 0x05 for extruders 1+3. + * The second index is the used extruder index, e.g. 1 + * The polygons represent the sparse pattern to be printed when all the given extruders are unused for this layer + * and the given extruder is currently in use + */ + std::map> sparse_pattern_per_extruders_; + MovesByLayer base_extra_moves_; //!< For each layer and each extruder, the extra moves to be processed for better adhesion/strength + MovesByExtruder inset_extra_moves_; //!< For each extruder, the extra inset moves to be processed for better adhesion on initial layer - Polygons outer_poly_; //!< The outline of the outermost prime tower. - std::vector outer_poly_base_; //!< The outline of the layers having extra width for the base + Shape outer_poly_; //!< The outline of the outermost prime tower. + std::vector outer_poly_base_; //!< The outline of the layers having extra width for the base public: bool enabled_; //!< Whether the prime tower is enabled. - bool would_have_actual_tower_; //!< Whether there is an actual tower. - bool multiple_extruders_on_first_layer_; //!< Whether multiple extruders are allowed on the first layer of the prime tower (e.g. when a raft is there) /* * In which order, from outside to inside, will we be printing the prime @@ -67,10 +77,12 @@ class PrimeTower */ PrimeTower(); + void initializeExtruders(const std::vector& used_extruders); + /*! * Check whether we actually use the prime tower. */ - void checkUsed(const SliceDataStorage& storage); + void checkUsed(); /*! * Generate the prime tower area to be used on each layer @@ -89,10 +101,16 @@ class PrimeTower * * \param storage where to get settings from; where to get the maximum height of the prime tower from * \param[in,out] gcode_layer Where to get the current extruder from; where to store the generated layer paths - * \param prev_extruder The previous extruder with which paths were planned; from which extruder a switch was made - * \param new_extruder The switched to extruder with which the prime tower paths should be generated. + * \param required_extruder_prime the extruders which actually required to be primed at this layer + * \param prev_extruder_nr The previous extruder with which paths were planned; from which extruder a switch was made + * \param new_extruder_nr The switched to extruder with which the prime tower paths should be generated. */ - void addToGcode(const SliceDataStorage& storage, LayerPlan& gcode_layer, const size_t prev_extruder, const size_t new_extruder) const; + void addToGcode( + const SliceDataStorage& storage, + LayerPlan& gcode_layer, + const std::vector& required_extruder_prime, + const size_t prev_extruder_nr, + const size_t new_extruder_nr) const; /*! * \brief Subtract the prime tower from the support areas in storage. @@ -108,12 +126,12 @@ class PrimeTower * \param[in] layer_nr The index of the layer * \return The outer polygon for the prime tower at the given layer */ - const Polygons& getOuterPoly(const LayerIndex& layer_nr) const; + const Shape& getOuterPoly(const LayerIndex& layer_nr) const; /*! * Get the outer polygon for the very first layer, which may be the priming polygon only, or a larger polygon if there is a base */ - const Polygons& getGroundPoly() const; + const Shape& getGroundPoly() const; private: /*! @@ -121,8 +139,33 @@ class PrimeTower * * Generate the extrude paths for each extruder on even and odd layers * Fill the ground poly with dense infill. + * \param cumulative_insets [in, out] The insets added to each extruder to compute the radius of its ring + */ + void generatePaths_denseInfill(std::vector& cumulative_insets); + + /*! + * \see WipeTower::generatePaths + * + * \brief Generate the sparse extrude paths for each extruders combination + * \param cumulative_insets The insets added to each extruder to compute the radius of its ring + */ + void generatePaths_sparseInfill(const std::vector& cumulative_insets); + + /*! + * \brief Generate the sparse extrude paths for an extruders combination + * + * \param first_extruder_nr The index of the first extruder to be pseudo-primed + * \param last_extruder_nr The index of the last extruder to be pseudo-primed + * \param rings_radii The external radii of each extruder ring, plus the internal radius of the internal ring + * \param line_width The actual line width of the extruder + * \param actual_extruder_nr The number of the actual extruder to be used */ - void generatePaths_denseInfill(); + Shape generatePath_sparseInfill( + const size_t first_extruder_idx, + const size_t last_extruder_idx, + const std::vector& rings_radii, + const coord_t line_width, + const size_t actual_extruder_nr); /*! * Generate start locations on the prime tower. The locations are evenly spread around the prime tower's perimeter. @@ -143,6 +186,49 @@ class PrimeTower */ void addToGcode_denseInfill(LayerPlan& gcode_layer, const size_t extruder) const; + /*! + * \brief Add path plans for the prime tower extra outer rings to make the stronger base + * \param gcode_layer The gcode export to add the paths plans to + * \param extruder_nr The current extruder number + * \return True if something has actually been added, according to the extruder number + * and current layer. + */ + bool addToGcode_base(LayerPlan& gcode_layer, const size_t extruder_nr) const; + + /*! + * \brief Add path plans for the prime tower extra inner rings to increase bed adhesion + * \param gcode_layer The gcode export to add the paths plans to + * \param extruder_nr The current extruder number + * \return True if something has actually been added, according to the extruder number + * and current layer. + */ + bool addToGcode_inset(LayerPlan& gcode_layer, const size_t extruder_nr) const; + + /*! + * \brief Add path plans in the case an extruder is not to be actually primed, but we still + * want to print something to make the prime tower consistent. + * \param gcode_layer The gcode export to add the paths plans to + * \param extruders_to_prime_idx The indexes of the extra extruders which also don't require being primed on this layer + * \param current_extruder_nr The extruder currently being used + */ + void addToGcode_sparseInfill(LayerPlan& gcode_layer, const std::vector& extruders_to_prime_idx, const size_t current_extruder_nr) const; + + /*! + * \brief Find the list of extruders that don't actually need to be primed during this layer, and for which + * we want to print only the sparse infill to keep the prime tower consistent. + * \param gcode_layer The current gcode export + * \param required_extruder_prime The pre-computed list of extruders uses during this layer + * \param method The current prime tower strategy + * \param initial_list_idx A list potentially containing extruders that we already know can be used for + * sparse infill + * \return The indexes of extruders to be used for sparse infill + */ + std::vector findExtrudersSparseInfill( + LayerPlan& gcode_layer, + const std::vector& required_extruder_prime, + cura::PrimeTowerMethod method, + const std::vector& initial_list_idx = {}) const; + /*! * For an extruder switch that happens not on the first layer, the extruder needs to be primed on the prime tower. * This function picks a start location for this extruder on the prime tower's perimeter and travels there to avoid diff --git a/include/PrimeTower/PrimeTower.h b/include/PrimeTower/PrimeTower.h new file mode 100644 index 0000000000..e28a6e88bd --- /dev/null +++ b/include/PrimeTower/PrimeTower.h @@ -0,0 +1,234 @@ +// Copyright (c) 2022 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. + +#ifndef PRIME_TOWER_H +#define PRIME_TOWER_H + +#include +#include + +#include "ExtruderUse.h" +#include "geometry/ClosedLinesSet.h" +#include "geometry/Polygon.h" +#include "settings/EnumSettings.h" +#include "settings/types/LayerIndex.h" +#include "utils/LayerVector.h" +#include "utils/polygonUtils.h" + +namespace cura +{ + +class SliceDataStorage; +class LayerPlan; + +/*! + * Abstract class for everything to do with the prime tower: + * - Generating the occupation areas. + * - Checking up untill which height the prime tower has to be printed. + * - Inserting priming commands in extruders uses + * - Generating priming paths and adding them to the layer plan. + * + * We may adopt different strategies to generate the prime tower, thus this class is abstract and different + * implementations may co-exist. The common behavior implemented in the main class is: + * - Generate occupation areas as a cylinder with a flared base + * - Generate the base extra extrusion discs around the base cylinder + * - Generate the first layer extra inset inside the base cylinder + * Then it is the job of the specific implementation to handle the generation of extrusion paths for the base cylinder + */ +class PrimeTower +{ +protected: + struct OccupiedOutline + { + Polygon outline; + coord_t outer_radius; + }; + + struct ExtruderToolPaths + { + size_t extruder_nr; + ClosedLinesSet toolpaths; + coord_t outer_radius; + coord_t inner_radius; + }; + +private: + bool wipe_from_middle_; //!< Whether to wipe on the inside of the hollow prime tower + Point2LL middle_; //!< The middle of the prime tower + + Point2LL post_wipe_point_; //!< Location to post-wipe the unused nozzle off on + + static constexpr size_t number_of_prime_tower_start_locations_ = 21; //!< The required size of \ref PrimeTower::wipe_locations + inline static const AngleRadians start_locations_step_ = (std::numbers::pi * 2.0) / number_of_prime_tower_start_locations_; + + /* + * The map index is the layer number + * For each layer, the list contains the extruders moves to be processed. This list is sorted from outer annuli to inner + * annuli, which is not the printing chronological order, but the physical arrangement. + */ + std::map> toolpaths_; + + OccupiedOutline outer_poly_; //!< The outline of the prime tower, not including the base + + //!< This is the exact outline of the extrusions lines of each layer, for layers having extra width for the base + LayerVector base_extrusion_outline_; + //!< This is the approximate outline of the area filled at each layer, for layers having extra width for the base + LayerVector base_occupied_outline_; + + static constexpr size_t circle_definition_{ 32 }; // The number of vertices in each circle. + static constexpr size_t arc_definition_{ 4 }; // The number of segments in each arc of a wheel + +public: + /*! \brief Creates a prime tower instance that will determine where and how the prime tower gets printed. */ + PrimeTower(); + + virtual ~PrimeTower() = default; + + /*! + * Add path plans for the prime tower to the \p gcode_layer + * + * \param storage where to get settings from; where to get the maximum height of the prime tower from + * \param[in,out] gcode_layer Where to get the current extruder from; where to store the generated layer paths + * \param required_extruder_prime the extruders which actually required to be primed at this layer + * \param prev_extruder_nr The previous extruder with which paths were planned; from which extruder a switch was made + * \param new_extruder_nr The switched to extruder with which the prime tower paths should be generated. + */ + void addToGcode( + const SliceDataStorage& storage, + LayerPlan& gcode_layer, + const std::vector& required_extruder_prime, + const size_t prev_extruder_nr, + const size_t new_extruder_nr) const; + + /*! + * Get the occupied outline of the prime tower at the given layer + * + * \param[in] layer_nr The index of the layer + * \return The outer polygon for the prime tower at the given layer + * \note The returned outline is a close approximation of the actual toolpaths. The actual extrusion area may be slightly smaller. + * Use this method only if you need to get the exclusion area of the prime tower. Otherwise use getExtrusionOutline(). + * This method exists because this approximate area can be calculated as soon as the prime tower is initialized. + */ + const Polygon& getOccupiedOutline(const LayerIndex& layer_nr) const; + + /*! + * Get the occupied outline of the prime tower at the first layer + * + * \note @sa getOccupiedOutline() + */ + const Polygon& getOccupiedGroundOutline() const; + + /*! + * Get the extrusion outline of the prime tower at the given layer + * + * \param[in] layer_nr The index of the layer + * \return The extrusion outline for the prime tower at the given layer + * \note The returned outline is the exact outline of the extrusion path, which is useful if you need to generate a toolpath + * touching the prime tower. Otherwise use getExtrusionOutline(). This method will return the valid result only after + * processExtrudersUse() has been called, which is "late" is the global slicing operation. + */ + const Polygon& getExtrusionOutline(const LayerIndex& layer_nr) const; + + /*! + * \brief Get the required priming for the given extruder at the given layer + * \param extruder_is_used_on_this_layer A list indicating which extruders are used at this layer + * \param extruder_nr The extruder for which we want the priming information + * \param last_extruder The extruder that was in use just before using the new one + * \param storage The storage containing all the slice data + * \param layer_nr The layer at which we want to use the extruder + * \return An enumeration indication how the extruder will be used by the prime tower at this layer + */ + virtual ExtruderPrime getExtruderPrime( + const std::vector& extruder_is_used_on_this_layer, + size_t extruder_nr, + size_t last_extruder, + const SliceDataStorage& storage, + const LayerIndex& layer_nr) const = 0; + + /*! + * \brief This method has to be called once the extruders use for each layer have been calculated. From this point, + * we can start generating the prime tower, and also polish the given extruders uses. + * \param extruders_use The calculated extruders uses at each layer. This may be slightly changed to make sure that + * the prime tower can be properly printed. + * \param start_extruder The very first used extruder + */ + void processExtrudersUse(LayerVector>& extruders_use, const size_t start_extruder); + + /*! + * \brief Create the proper prime tower object according to the current settings + * \param storage The storage containing all the slice data + * \return The proper prime tower object, which may be null if prime tower is actually disabled or not required + */ + static PrimeTower* createPrimeTower(SliceDataStorage& storage); + +protected: + /*! + * \brief Once all the extruders uses have been calculated for each layer, this method makes a global pass to make + * sure that the prime tower can be properly printed. This is required because we sometimes need to know what + * a layer above is made of to fix a layer below. + * \param extruders_use The calculated extruders uses at each layer + * \param start_extruder The very first used extruder + */ + virtual void polishExtrudersUses(LayerVector>& /*extruders_use*/, const size_t /*start_extruder*/) + { + // Default behavior is to keep the extruders uses as they were calculated + } + + /*! + * \brief Generated the extruders toolpaths for each layer of the prime tower + * \param extruders_use The calculated extruders uses at each layer + * \return A map of extruders toolpaths per layer. The inner list is sorted from outer annuli to inner + * annuli, which is not the printing chronological order, but the physical arrangement. @sa toolpaths_ + */ + virtual std::map> generateToolPaths(const LayerVector>& extruders_use) = 0; + + /*! + * \brief Generate the actual priming toolpaths for the given extruder, starting at the given outer circle radius + * \param extruder_nr The extruder for which we want the priming toolpath + * \param outer_radius The radius of the starting outer circle + * \return A tuple containing the newly generated toolpaths, and the inner radius of the newly generated annulus + */ + std::tuple generatePrimeToolpaths(const size_t extruder_nr, const coord_t outer_radius); + + /*! + * \brief Generate support toolpaths using the wheel pattern applied on an annulus + * \param extruder_nr The extruder for which we want the support toolpath + * \param outer_radius The annulus outer radius + * \param inner_radius The annulis inner radius + * \return + */ + ClosedLinesSet generateSupportToolpaths(const size_t extruder_nr, const coord_t outer_radius, const coord_t inner_radius); + + /*! + * \brief Calculates whether an extruder requires priming at a specific layer + * \param extruder_is_used_on_this_layer The list of used extruders at this layer + * \param extruder_nr The extruder we now want to use + * \param last_extruder The extruder that was in use before switching to the new one + * \return True if the extruder needs to be primed, false otherwise + */ + static bool extruderRequiresPrime(const std::vector& extruder_is_used_on_this_layer, size_t extruder_nr, size_t last_extruder); + +private: + /*! \brief Generates the extra inset used for better adhesion at the first layer */ + void generateFirtLayerInset(); + + /*! \brief Generates the extra annuli around the first layers of the prime tower which help make it stronger */ + void generateBase(); + + /*! + * For an extruder switch that happens not on the first layer, the extruder needs to be primed on the prime tower. + * This function picks a start location for this extruder on the prime tower's perimeter and travels there to avoid + * starting at the location everytime which can result in z-seam blobs. + */ + void gotoStartLocation(LayerPlan& gcode_layer, const size_t extruder) const; + + /*! + * \brief Subtract the prime tower from the support areas in storage. + * \param storage The storage where to find the support from which to subtract a prime tower. + */ + void subtractFromSupport(SliceDataStorage& storage); +}; + +} // namespace cura + +#endif // PRIME_TOWER_H diff --git a/include/PrimeTower/PrimeTowerInterleaved.h b/include/PrimeTower/PrimeTowerInterleaved.h new file mode 100644 index 0000000000..d9d743ca4c --- /dev/null +++ b/include/PrimeTower/PrimeTowerInterleaved.h @@ -0,0 +1,40 @@ +// Copyright (c) 2024 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. + +#ifndef PRIME_TOWER_INTERLEAVED_H +#define PRIME_TOWER_INTERLEAVED_H + +#include "PrimeTower/PrimeTower.h" + +namespace cura +{ + +/*! + * Specific prime tower implementation that generates interleaved priming paths. It is optimized to waste as few + * filament as possible, while ensuring that the prime tower is still robust even if it gets very high. + * When there is no actual priming required for extruders, it will create a kind of circular zigzag pattern that acts as + * a sparse support. Otherwise it will create priming annuli, stacked on top of each other. + * This is very effective when doing multi-color printing, however it can be used only if all the filaments properly + * adhere to each other. Otherwise there is a high risk that the tower will collapse during the print. + */ +class PrimeTowerInterleaved : public PrimeTower +{ +public: + PrimeTowerInterleaved(); + + virtual ExtruderPrime getExtruderPrime( + const std::vector& extruder_is_used_on_this_layer, + size_t extruder_nr, + size_t last_extruder, + const SliceDataStorage& storage, + const LayerIndex& layer_nr) const override; + +protected: + virtual void polishExtrudersUses(LayerVector>& extruders_use, const size_t start_extruder) override; + + virtual std::map> generateToolPaths(const LayerVector>& extruders_use) override; +}; + +} // namespace cura + +#endif // PRIME_TOWER_INTERLEAVED_H diff --git a/include/PrimeTower/PrimeTowerNormal.h b/include/PrimeTower/PrimeTowerNormal.h new file mode 100644 index 0000000000..009ca24599 --- /dev/null +++ b/include/PrimeTower/PrimeTowerNormal.h @@ -0,0 +1,40 @@ +// Copyright (c) 2024 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. + +#ifndef PRIME_TOWER_NORMAL_H +#define PRIME_TOWER_NORMAL_H + +#include "PrimeTower/PrimeTower.h" + +namespace cura +{ + +/*! + * Specific prime tower implementation that generates nested cylinders. Each layer, all the extruders will be used to + * contribute to the prime tower, even if they don't actually need priming. In this case, a circular zigzag pattern will + * be used to act as support for upper priming extrusions. + * Although this method is not very efficient, it is required when using different materials that don't properly adhere + * to each other. By nesting the cylinders, you make sure that the tower remains consistent and strong along the print. + */ +class PrimeTowerNormal : public PrimeTower +{ +private: + const std::vector used_extruders_; + +public: + PrimeTowerNormal(const std::vector& used_extruders); + + virtual ExtruderPrime getExtruderPrime( + const std::vector& extruder_is_used_on_this_layer, + size_t extruder_nr, + size_t last_extruder, + const SliceDataStorage& storage, + const LayerIndex& layer_nr) const override; + +protected: + virtual std::map> generateToolPaths(const LayerVector>& extruders_use) override; +}; + +} // namespace cura + +#endif // PRIME_TOWER_NORMAL_H diff --git a/include/SkeletalTrapezoidation.h b/include/SkeletalTrapezoidation.h index 86f13f2782..fafb69a002 100644 --- a/include/SkeletalTrapezoidation.h +++ b/include/SkeletalTrapezoidation.h @@ -14,12 +14,12 @@ #include "SkeletalTrapezoidationEdge.h" #include "SkeletalTrapezoidationGraph.h" #include "SkeletalTrapezoidationJoint.h" +#include "geometry/Polygon.h" #include "settings/types/Ratio.h" #include "utils/ExtrusionJunction.h" #include "utils/ExtrusionLine.h" #include "utils/HalfEdgeGraph.h" #include "utils/PolygonsSegmentIndex.h" -#include "utils/polygon.h" #include "utils/section_type.h" namespace cura @@ -110,7 +110,7 @@ class SkeletalTrapezoidation * distance. */ SkeletalTrapezoidation( - const Polygons& polys, + const Shape& polys, const BeadingStrategy& beading_strategy, AngleRadians transitioning_angle, coord_t discretization_step_size, @@ -165,7 +165,7 @@ class SkeletalTrapezoidation * Another complication arises because the VD uses floating logic, which can result in zero-length segments after rounding to integers. * We therefore collapse edges and their whole cells afterwards. */ - void constructFromPolygons(const Polygons& polys); + void constructFromPolygons(const Shape& polys); node_t& makeNode(vd_t::vertex_type& vd_node, Point2LL p); //!< Get the node which the VD node maps to, or create a new mapping if there wasn't any yet. diff --git a/include/SkeletalTrapezoidationJoint.h b/include/SkeletalTrapezoidationJoint.h index daa9087cdf..3aa2ff88e3 100644 --- a/include/SkeletalTrapezoidationJoint.h +++ b/include/SkeletalTrapezoidationJoint.h @@ -7,7 +7,7 @@ #include // smart pointers #include "BeadingStrategy/BeadingStrategy.h" -#include "utils/Point2LL.h" +#include "geometry/Point2LL.h" namespace cura { @@ -51,7 +51,7 @@ class SkeletalTrapezoidationJoint { beading_ = storage; } - std::shared_ptr getBeading() + std::shared_ptr getBeading() const { return beading_.lock(); } diff --git a/include/SkirtBrim.h b/include/SkirtBrim.h index af8cbe9f6e..696ecf94aa 100644 --- a/include/SkirtBrim.h +++ b/include/SkirtBrim.h @@ -14,7 +14,7 @@ namespace cura { -class Polygons; +class Shape; class SliceDataStorage; constexpr coord_t min_brim_line_length = 3000u; //!< open polyline brim lines smaller than this will be removed @@ -28,15 +28,17 @@ class SkirtBrim struct Offset { Offset( - const std::variant& reference_outline_or_index, - const bool external_only, + const std::variant& reference_outline_or_index, + const bool outside, + const bool inside, const coord_t offset_value, const coord_t total_offset, const size_t inset_idx, - const int extruder_nr, + const size_t extruder_nr, const bool is_last) : reference_outline_or_index_(reference_outline_or_index) - , external_only_(external_only) + , outside_(outside) + , inside_(inside) , offset_value_(offset_value) , total_offset_(total_offset) , inset_idx_(inset_idx) @@ -45,15 +47,30 @@ class SkirtBrim { } - std::variant reference_outline_or_index_; - bool external_only_; //!< Wether to only offset outward from the reference polygons + std::variant reference_outline_or_index_; + bool outside_; //!< Wether to offset outward from the reference polygons + bool inside_; //!< Wether to offset inward from the reference polygons coord_t offset_value_; //!< Distance by which to offset from the reference coord_t total_offset_; //!< Total distance from the model int inset_idx_; //!< The outset index of this brimline - int extruder_nr_; //!< The extruder by which to print this brim line + size_t extruder_nr_; //!< The extruder by which to print this brim line bool is_last_; //!< Whether this is the last planned offset for this extruder. }; + /*! + * Container to store the pre-extracted settings of an extruder + */ + struct ExtruderConfig + { + bool extruder_is_used_; //!< Whether the extruder is actually used in this print + bool outside_polys_; //!< Whether to generate brim on the outside + bool inside_polys_; //!< Whether to generate brim on the inside + coord_t line_width_; //!< The skirt/brim line width + coord_t skirt_brim_minimal_length_; //!< The minimal brim length + int line_count_; //!< The (minimal) number of brim lines to generate + coord_t gap_; //!< The gap between the part and the first brim/skirt line + }; + /*! * Defines an order on offsets (potentially from different extruders) based on how far the offset is from the original outline. */ @@ -68,15 +85,10 @@ class SkirtBrim const bool has_ooze_shield_; //!< Whether the meshgroup has an ooze shield const bool has_draft_shield_; //!< Whether the meshgroup has a draft shield const std::vector& extruders_; //!< The extruders of the current slice - const int extruder_count_; //!< The total number of extruders - const std::vector extruder_is_used_; //!< For each extruder whether it is actually used in this print - int first_used_extruder_nr_; //!< The first extruder which is used + size_t extruder_count_; //!< The total number of extruders + size_t first_used_extruder_nr_; //!< The first extruder which is used int skirt_brim_extruder_nr_; //!< The extruder with which the skirt/brim is printed or -1 if printed with both - std::vector external_polys_only_; //!< For each extruder whether to only generate brim on the outside - std::vector line_widths_; //!< For each extruder the skirt/brim line width - std::vector skirt_brim_minimal_length_; //!< For each extruder the minimal brim length - std::vector line_count_; //!< For each extruder the (minimal) number of brim lines to generate - std::vector gap_; //!< For each extruder the gap between the part and the first brim/skirt line + std::vector extruders_configs_; //!< The brim setup for each extruder public: /*! @@ -112,7 +124,7 @@ class SkirtBrim * \param[out] starting_outlines The first layer outlines from which to compute the offsets. Returned as output parameter because pointers need to stay valid. * \return An ordered list of offsets to perform in the order in which they are to be performed. */ - std::vector generateBrimOffsetPlan(std::vector& starting_outlines); + std::vector generateBrimOffsetPlan(std::vector& starting_outlines); /*! * Generate the primary skirt/brim of the one skirt_brim_extruder or of all extruders simultaneously. @@ -122,7 +134,7 @@ class SkirtBrim * \param[in,out] allowed_areas_per_extruder The difference between the machine bed area (offsetted by the nozzle offset) and the covered_area. * \return The total length of the brim lines added by this method per extruder. */ - std::vector generatePrimaryBrim(std::vector& all_brim_offsets, Polygons& covered_area, std::vector& allowed_areas_per_extruder); + std::vector generatePrimaryBrim(std::vector& all_brim_offsets, Shape& covered_area, std::vector& allowed_areas_per_extruder); /*! * Generate the brim inside the ooze shield and draft shield @@ -133,7 +145,7 @@ class SkirtBrim * \param[in,out] brim_covered_area The area that was covered with brim before (in) and after (out) adding the shield brims * \param[in,out] allowed_areas_per_extruder The difference between the machine areas and the \p covered_area */ - void generateShieldBrim(Polygons& brim_covered_area, std::vector& allowed_areas_per_extruder); + void generateShieldBrim(Shape& brim_covered_area, std::vector& allowed_areas_per_extruder); /*! * \brief Get the reference outline of the first layer around which to @@ -146,7 +158,7 @@ class SkirtBrim * \param extruder_nr The extruder for which to get the outlines. -1 to include outliens for all extruders * \return The resulting reference polygons */ - Polygons getFirstLayerOutline(const int extruder_nr = -1); + Shape getFirstLayerOutline(const int extruder_nr = -1); /*! * The disallowed area around the internal holes of parts with other parts inside which would get an external brim. @@ -158,7 +170,7 @@ class SkirtBrim * \param extruder_nr The extruder for which to compute disallowed areas * \return The disallowed areas */ - Polygons getInternalHoleExclusionArea(const Polygons& outline, const int extruder_nr); + Shape getInternalHoleExclusionArea(const Shape& outline, const int extruder_nr) const; /*! * Generate a brim line with offset parameters given by \p offset from the \p starting_outlines and store it in the \ref storage. @@ -171,7 +183,7 @@ class SkirtBrim * \param[out] result Where to store the resulting brim line * \return The length of the added lines */ - coord_t generateOffset(const Offset& offset, Polygons& covered_area, std::vector& allowed_areas_per_extruder, SkirtBrimLine& result); + coord_t generateOffset(const Offset& offset, Shape& covered_area, std::vector& allowed_areas_per_extruder, MixedLinesSet& result); /*! * Generate a skirt of extruders which don't yet comply with the minimum length requirement. @@ -184,7 +196,17 @@ class SkirtBrim * \param[in,out] allowed_areas_per_extruder The difference between the machine areas and the \p covered_area * \param[in,out] total_length The total length of the brim lines for each extruder. */ - void generateSecondarySkirtBrim(Polygons& covered_area, std::vector& allowed_areas_per_extruder, std::vector& total_length); + void generateSecondarySkirtBrim(Shape& covered_area, std::vector& allowed_areas_per_extruder, std::vector& total_length); + + /*! + * Generate the allowed areas for each extruder. Allowed areas represent where the brim/skirt is allowed to grow + * while adding new outset lines. This is basically the whole build plate, removing the areas where models are + * located, offsetted with some specific margins. + * + * \param[in] starting_outlines The previously generated starting outlines for each extruder + * \return The list of allowed areas for each extruder + */ + std::vector generateAllowedAreas(const std::vector& starting_outlines) const; public: /*! diff --git a/include/SupportInfillPart.h b/include/SupportInfillPart.h index 23a983276a..c864a67be6 100644 --- a/include/SupportInfillPart.h +++ b/include/SupportInfillPart.h @@ -6,9 +6,10 @@ #include +#include "geometry/Polygon.h" +#include "geometry/SingleShape.h" #include "utils/AABB.h" #include "utils/ExtrusionLine.h" -#include "utils/polygon.h" namespace cura @@ -25,23 +26,23 @@ namespace cura class SupportInfillPart { public: - PolygonsPart outline_; //!< The outline of the support infill area + SingleShape outline_; //!< The outline of the support infill area AABB outline_boundary_box_; //!< The boundary box for the infill area coord_t support_line_width_; //!< The support line width int inset_count_to_generate_; //!< The number of insets need to be generated from the outline. This is not the actual insets that will be generated. - std::vector> infill_area_per_combine_per_density_; //!< a list of separated sub-areas which requires different infill densities and combined thicknesses - // for infill_areas[x][n], x means the density level and n means the thickness + std::vector> infill_area_per_combine_per_density_; //!< a list of separated sub-areas which requires different infill densities and combined thicknesses + // for infill_areas[x][n], x means the density level and n means the thickness std::vector wall_toolpaths_; //!< Any walls go here, not in the areas, where they could be combined vertically (don't combine walls). Binned by inset_idx. coord_t custom_line_distance_; //!< The distance between support infill lines. 0 means use the default line distance instead. bool use_fractional_config_; //!< Request to use the configuration used to fill a partial layer height here, instead of the normal full layer height configuration. - SupportInfillPart(const PolygonsPart& outline, coord_t support_line_width, bool use_fractional_config, int inset_count_to_generate = 0, coord_t custom_line_distance = 0); + SupportInfillPart(const SingleShape& outline, coord_t support_line_width, bool use_fractional_config, int inset_count_to_generate = 0, coord_t custom_line_distance = 0); - const Polygons& getInfillArea() const; + const Shape& getInfillArea() const; }; -inline const Polygons& SupportInfillPart::getInfillArea() const +inline const Shape& SupportInfillPart::getInfillArea() const { // if there is no wall, we use the original outline as the infill area return outline_; diff --git a/include/TopSurface.h b/include/TopSurface.h index 77505bfa94..e54438904b 100644 --- a/include/TopSurface.h +++ b/include/TopSurface.h @@ -5,7 +5,7 @@ #define TOPSURFACE_H #include "GCodePathConfig.h" -#include "utils/polygon.h" //For the polygon areas. +#include "geometry/Shape.h" namespace cura { @@ -58,7 +58,7 @@ class TopSurface /*! * \brief The areas of top surface, for each layer. */ - Polygons areas; + Shape areas; }; } // namespace cura diff --git a/include/TreeModelVolumes.h b/include/TreeModelVolumes.h index 9c9013888d..1774b24fdf 100644 --- a/include/TreeModelVolumes.h +++ b/include/TreeModelVolumes.h @@ -6,15 +6,16 @@ #include #include +#include #include #include -#include "TreeSupportSettings.h" +#include "TreeSupportEnums.h" +#include "geometry/Shape.h" #include "settings/EnumSettings.h" //To store whether X/Y or Z distance gets priority. #include "settings/types/LayerIndex.h" //Part of the RadiusLayerPair. -#include "sliceDataStorage.h" +#include "utils/PairHash.h" #include "utils/Simplify.h" -#include "utils/polygon.h" //For polygon parameters. namespace cura { @@ -22,6 +23,7 @@ constexpr coord_t EPSILON = 5; constexpr coord_t FUDGE_LENGTH = 50; class SliceDataStorage; +class SliceMeshStorage; class LayerIndex; class Settings; @@ -41,7 +43,7 @@ class TreeModelVolumes size_t current_mesh_idx, double progress_multiplier, double progress_offset, - const std::vector& additional_excluded_areas = std::vector()); + const std::vector& additional_excluded_areas = std::vector()); TreeModelVolumes(TreeModelVolumes&&) = default; TreeModelVolumes& operator=(TreeModelVolumes&&) = default; @@ -66,9 +68,9 @@ class TreeModelVolumes * \param radius The radius of the node of interest * \param layer_idx The layer of interest * \param min_xy_dist Is the minimum xy distance used. - * \return Polygons object + * \return Shape object */ - const Polygons& getCollision(coord_t radius, LayerIndex layer_idx, bool min_xy_dist = false); + const Shape& getCollision(coord_t radius, LayerIndex layer_idx, bool min_xy_dist = false); /*! * \brief Provides the areas that have to be avoided by the tree's branches to prevent collision with the model on this layer. Holes are removed. @@ -79,9 +81,9 @@ class TreeModelVolumes * \param radius The radius of the node of interest * \param layer_idx The layer of interest * \param min_xy_dist Is the minimum xy distance used. - * \return Polygons object + * \return Shape object */ - const Polygons& getCollisionHolefree(coord_t radius, LayerIndex layer_idx, bool min_xy_dist = false); + const Shape& getCollisionHolefree(coord_t radius, LayerIndex layer_idx, bool min_xy_dist = false); /*! @@ -89,9 +91,9 @@ class TreeModelVolumes * * The result is a 2D area that represents where if support were to be placed in and just dropped down it would not rest on support blocker. * \param layer_idx The layer of interest - * \return Polygons object + * \return Shape object */ - const Polygons& getAccumulatedPlaceable0(LayerIndex layer_idx); + const Shape& getAccumulatedPlaceable0(LayerIndex layer_idx); /*! * \brief Provides the areas that have to be avoided by the tree's branches @@ -108,24 +110,24 @@ class TreeModelVolumes * \param slow Is the propagation with the maximum move distance slow required. * \param to_model Does the avoidance allow good connections with the model. * \param min_xy_dist is the minimum xy distance used. - * \return Polygons object + * \return Shape object */ - const Polygons& getAvoidance(coord_t radius, LayerIndex layer_idx, AvoidanceType type, bool to_model = false, bool min_xy_dist = false); + const Shape& getAvoidance(coord_t radius, LayerIndex layer_idx, AvoidanceType type, bool to_model = false, bool min_xy_dist = false); /*! * \brief Provides the area represents all areas on the model where the branch does completely fit on the given layer. * \param radius The radius of the node of interest * \param layer_idx The layer of interest - * \return Polygons object + * \return Shape object */ - const Polygons& getPlaceableAreas(coord_t radius, LayerIndex layer_idx); + const Shape& getPlaceableAreas(coord_t radius, LayerIndex layer_idx); /*! * \brief Provides the area that represents the walls, as in the printed area, of the model. This is an abstract representation not equal with the outline. See * calculateWallRestrictions for better description. \param radius The radius of the node of interest. \param layer_idx The layer of interest. \param min_xy_dist is the minimum - * xy distance used. \return Polygons object + * xy distance used. \return Shape object */ - const Polygons& getWallRestriction(coord_t radius, LayerIndex layer_idx, bool min_xy_dist); + const Shape& getWallRestriction(coord_t radius, LayerIndex layer_idx, bool min_xy_dist); /*! * \brief Round \p radius upwards to either a multiple of radius_sample_resolution_ or a exponentially increasing value @@ -165,10 +167,9 @@ class TreeModelVolumes * \brief Extracts the relevant outline from a mesh * \param[in] mesh The mesh which outline will be extracted * \param layer_idx The layer which should be extracted from the mesh - * \return Polygons object representing the outline + * \return Shape object representing the outline */ - Polygons extractOutlineFromMesh(const SliceMeshStorage& mesh, LayerIndex layer_idx) const; - + Shape extractOutlineFromMesh(const SliceMeshStorage& mesh, LayerIndex layer_idx) const; /*! * \brief Creates the areas that have to be avoided by the tree's branches to prevent collision with the model on this layer. @@ -243,7 +244,7 @@ class TreeModelVolumes calculateCollisionHolefree(std::deque{ RadiusLayerPair(key) }); } - Polygons safeOffset(const Polygons& me, coord_t distance, ClipperLib::JoinType jt, coord_t max_safe_step_distance, const Polygons& collision) const; + Shape safeOffset(const Shape& me, coord_t distance, ClipperLib::JoinType jt, coord_t max_safe_step_distance, const Shape& collision) const; /*! * \brief Creates the areas that have to be avoided by the tree's branches to prevent collision with the model. @@ -337,7 +338,7 @@ class TreeModelVolumes * \return A wrapped optional reference of the requested area (if it was found, an empty optional if nothing was found) */ template - const std::optional> getArea(const std::unordered_map& cache, const KEY key) const; + const std::optional> getArea(const std::unordered_map& cache, const KEY key) const; bool checkSettingsEquality(const Settings& me, const Settings& other) const; @@ -348,9 +349,9 @@ class TreeModelVolumes * * \return A wrapped optional reference of the requested area (if it was found, an empty optional if nothing was found) */ - LayerIndex getMaxCalculatedLayer(coord_t radius, const std::unordered_map& map) const; + LayerIndex getMaxCalculatedLayer(coord_t radius, const std::unordered_map& map) const; - static Polygons calculateMachineBorderCollision(const Polygons&& machine_border); + static Shape calculateMachineBorderCollision(const Shape&& machine_border); /*! * \brief The maximum distance that the center point of a tree branch may move in consecutive layers if it has to avoid the model. @@ -427,25 +428,25 @@ class TreeModelVolumes coord_t increase_until_radius_; /*! - * \brief Polygons representing the limits of the printable area of the + * \brief Shape representing the limits of the printable area of the * machine */ - Polygons machine_border_; + Shape machine_border_; /*! - * \brief Polygons representing the printable area of the machine + * \brief Shape representing the printable area of the machine */ - Polygons machine_area_; + Shape machine_area_; /*! * \brief Storage for layer outlines and the corresponding settings of the meshes grouped by meshes with identical setting. */ - std::vector>> layer_outlines_; + std::vector>> layer_outlines_; /*! * \brief Storage for areas that should be avoided, like support blocker or previous generated trees. */ - std::vector anti_overhang_; + std::vector anti_overhang_; /*! * \brief Radii that can be ignored by ceilRadius as they will never be requested. @@ -471,52 +472,52 @@ class TreeModelVolumes * (ie there is no difference in behaviour for the user between * calculating the values each time vs caching the results). */ - mutable std::unordered_map collision_cache_; + mutable std::unordered_map collision_cache_; std::unique_ptr critical_collision_cache_ = std::make_unique(); - mutable std::unordered_map collision_cache_holefree_; + mutable std::unordered_map collision_cache_holefree_; std::unique_ptr critical_collision_cache_holefree_ = std::make_unique(); - mutable std::unordered_map accumulated_placeables_cache_radius_0_; + mutable std::unordered_map accumulated_placeables_cache_radius_0_; std::unique_ptr critical_accumulated_placeables_cache_radius_0_ = std::make_unique(); - mutable std::unordered_map avoidance_cache_collision_; + mutable std::unordered_map avoidance_cache_collision_; std::unique_ptr critical_avoidance_cache_collision_ = std::make_unique(); - mutable std::unordered_map avoidance_cache_; + mutable std::unordered_map avoidance_cache_; std::unique_ptr critical_avoidance_cache_ = std::make_unique(); - mutable std::unordered_map avoidance_cache_slow_; + mutable std::unordered_map avoidance_cache_slow_; std::unique_ptr critical_avoidance_cache_slow_ = std::make_unique(); - mutable std::unordered_map avoidance_cache_to_model_; + mutable std::unordered_map avoidance_cache_to_model_; std::unique_ptr critical_avoidance_cache_to_model_ = std::make_unique(); - mutable std::unordered_map avoidance_cache_to_model_slow_; + mutable std::unordered_map avoidance_cache_to_model_slow_; std::unique_ptr critical_avoidance_cache_to_model_slow_ = std::make_unique(); - mutable std::unordered_map placeable_areas_cache_; + mutable std::unordered_map placeable_areas_cache_; std::unique_ptr critical_placeable_areas_cache_ = std::make_unique(); /*! * \brief Caches to avoid holes smaller than the radius until which the radius is always increased, as they are free of holes. Also called safe avoidances, as they are safe * regarding not running into holes. */ - mutable std::unordered_map avoidance_cache_hole_; + mutable std::unordered_map avoidance_cache_hole_; std::unique_ptr critical_avoidance_cache_holefree_ = std::make_unique(); - mutable std::unordered_map avoidance_cache_hole_to_model_; + mutable std::unordered_map avoidance_cache_hole_to_model_; std::unique_ptr critical_avoidance_cache_holefree_to_model_ = std::make_unique(); /*! * \brief Caches to represent walls not allowed to be passed over. */ - mutable std::unordered_map wall_restrictions_cache_; + mutable std::unordered_map wall_restrictions_cache_; std::unique_ptr critical_wall_restrictions_cache_ = std::make_unique(); // A different cache for min_xy_dist as the maximal safe distance an influence area can be increased(guaranteed overlap of two walls in consecutive layer) is much smaller when // min_xy_dist is used. This causes the area of the wall restriction to be thinner and as such just using the min_xy_dist wall restriction would be slower. - mutable std::unordered_map wall_restrictions_cache_min_; + mutable std::unordered_map wall_restrictions_cache_min_; std::unique_ptr critical_wall_restrictions_cache_min_ = std::make_unique(); std::unique_ptr critical_progress_ = std::make_unique(); diff --git a/include/TreeSupport.h b/include/TreeSupport.h index 6ad2a5fac4..a4f1be756a 100644 --- a/include/TreeSupport.h +++ b/include/TreeSupport.h @@ -10,11 +10,11 @@ #include "TreeSupportEnums.h" #include "TreeSupportSettings.h" #include "boost/functional/hash.hpp" // For combining hashes +#include "geometry/Polygon.h" #include "polyclipping/clipper.hpp" #include "settings/EnumSettings.h" #include "sliceDataStorage.h" #include "utils/Coord_t.h" -#include "utils/polygon.h" namespace cura { @@ -42,8 +42,33 @@ constexpr auto SUPPORT_TREE_EXPONENTIAL_FACTOR = 1.5; constexpr size_t SUPPORT_TREE_PRE_EXPONENTIAL_STEPS = 1; constexpr coord_t SUPPORT_TREE_COLLISION_RESOLUTION = 500; // Only has an effect if SUPPORT_TREE_USE_EXPONENTIAL_COLLISION_RESOLUTION is false -using PropertyAreasUnordered = std::unordered_map; -using PropertyAreas = std::map; +using PropertyAreasUnordered = std::unordered_map; +using PropertyAreas = std::map; + +struct FakeRoofArea +{ + FakeRoofArea(Shape area, coord_t line_distance, bool fractional) + : area_(area) + , line_distance_(line_distance) + , fractional_(fractional) + { + } + /*! + * \brief Area that should be a fake roof. + */ + Shape area_; + + /*! + * \brief Distance between support lines + */ + coord_t line_distance_; + + /*! + * \brief If the area should be added as a fractional support area. + */ + bool fractional_; +}; + /*! * \brief Generates a tree structure to support your models. @@ -74,8 +99,9 @@ class TreeSupport * * \param storage[in] Background storage to access meshes. * \param currently_processing_meshes[in] Indexes of all meshes that are processed in this iteration + * \return Uppermost layer precalculated. -1 if no layer were precalculated as no overhang is present. */ - void precalculate(const SliceDataStorage& storage, std::vector currently_processing_meshes); + LayerIndex precalculate(const SliceDataStorage& storage, std::vector currently_processing_meshes); /*! @@ -159,10 +185,10 @@ class TreeSupport AreaIncreaseSettings settings, LayerIndex layer_idx, TreeSupportElement* parent, - const Polygons& relevant_offset, - Polygons& to_bp_data, - Polygons& to_model_data, - Polygons& increased, + const Shape& relevant_offset, + Shape& to_bp_data, + Shape& to_model_data, + Shape& increased, const coord_t overspeed, const bool mergelayer); @@ -236,7 +262,7 @@ class TreeSupport */ void generateBranchAreas( std::vector>& linear_data, - std::vector>& layer_tree_polygons, + std::vector>& layer_tree_polygons, const std::map& inverse_tree_order); /*! @@ -244,7 +270,7 @@ class TreeSupport * * \param layer_tree_polygons[in,out] Resulting branch areas with the layerindex they appear on. */ - void smoothBranchAreas(std::vector>& layer_tree_polygons); + void smoothBranchAreas(std::vector>& layer_tree_polygons); /*! * \brief Drop down areas that do rest non-gracefully on the model to ensure the branch actually rests on something. @@ -255,13 +281,13 @@ class TreeSupport * \param inverse_tree_order[in] A mapping that returns the child of every influence area. */ void dropNonGraciousAreas( - std::vector>& layer_tree_polygons, + std::vector>& layer_tree_polygons, const std::vector>& linear_data, - std::vector>>& dropped_down_areas, + std::vector>>& dropped_down_areas, const std::map& inverse_tree_order); - void filterFloatingLines(std::vector& support_layer_storage); + void filterFloatingLines(std::vector& support_layer_storage); /*! * \brief Generates Support Floor, ensures Support Roof can not cut of branches, and saves the branches as support to storage @@ -270,7 +296,11 @@ class TreeSupport * \param support_roof_storage[in] Areas where support was replaced with roof. * \param storage[in,out] The storage where the support should be stored. */ - void finalizeInterfaceAndSupportAreas(std::vector& support_layer_storage, std::vector& support_roof_storage, SliceDataStorage& storage); + void finalizeInterfaceAndSupportAreas( + std::vector& support_layer_storage, + std::vector& support_roof_storage, + std::vector& support_layer_storage_fractional, + SliceDataStorage& storage); /*! * \brief Draws circles around result_on_layer points of the influence areas and applies some post processing. @@ -288,12 +318,12 @@ class TreeSupport /*! * \brief Areas that should have been support roof, but where the roof settings would not allow any lines to be generated. */ - std::vector additional_required_support_area; + std::vector additional_required_support_area; /*! - * \brief A representation of already placed lines. Required for subtracting from new support areas. + * \brief Areas that use a higher density pattern of regular support to support the model (fake_roof). */ - std::vector placed_support_lines_support_areas; + std::vector> fake_roof_areas; /*! * \brief Generator for model collision, avoidance and internal guide volumes. diff --git a/include/TreeSupportBaseCircle.h b/include/TreeSupportBaseCircle.h index ac9410bfbd..9010e066b3 100644 --- a/include/TreeSupportBaseCircle.h +++ b/include/TreeSupportBaseCircle.h @@ -1,14 +1,16 @@ -//CuraEngine is released under the terms of the AGPLv3 or higher. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef TREESUPPORTCIRCLE_H #define TREESUPPORTCIRCLE_H -#include "utils/Coord_t.h" -#include "utils/polygon.h" - #include + #include +#include "geometry/Polygon.h" +#include "settings/types/Angle.h" +#include "utils/Coord_t.h" + namespace cura { diff --git a/include/TreeSupportElement.h b/include/TreeSupportElement.h index 3c160b1042..b633aa863c 100644 --- a/include/TreeSupportElement.h +++ b/include/TreeSupportElement.h @@ -10,9 +10,9 @@ #include "TreeModelVolumes.h" #include "TreeSupportBaseCircle.h" #include "TreeSupportEnums.h" +#include "geometry/Shape.h" #include "settings/types/LayerIndex.h" #include "utils/Coord_t.h" -#include "utils/polygon.h" namespace cura { @@ -95,7 +95,7 @@ struct TreeSupportElement RecreateInfluenceLimitArea(); } - TreeSupportElement(const TreeSupportElement& elem, Polygons* newArea = nullptr) + TreeSupportElement(const TreeSupportElement& elem, Shape* newArea = nullptr) : // copy constructor with possibility to set a new area target_height_(elem.target_height_) , target_position_(elem.target_position_) @@ -277,7 +277,7 @@ struct TreeSupportElement * \brief The resulting influence area. * Will only be set in the results of createLayerPathing, and will be nullptr inside! */ - Polygons* area_; + Shape* area_; /*! * \brief The resulting center point around which a circle will be drawn later. @@ -351,7 +351,7 @@ struct TreeSupportElement /*! * \brief Area that influence area has to be inside to conform to influence_area_limit_range. */ - Polygons influence_area_limit_area_; + Shape influence_area_limit_area_; /*! * \brief Additional locations that the tip should reach @@ -402,7 +402,7 @@ struct TreeSupportElement Polygon circle; for (Point2LL corner : TreeSupportBaseCircle::getBaseCircle()) { - circle.add(p + corner * influence_area_limit_range_ / double(TreeSupportBaseCircle::base_radius)); + circle.push_back(p + corner * influence_area_limit_range_ / double(TreeSupportBaseCircle::base_radius)); } if (influence_area_limit_area_.empty()) { @@ -415,9 +415,11 @@ struct TreeSupportElement } } } + void setToBuildplateForAllParents(bool new_value) { to_buildplate_ = new_value; + to_model_gracious_ |= new_value; std::vector grandparents{ parents_ }; while (! grandparents.empty()) { @@ -426,6 +428,7 @@ struct TreeSupportElement { next_parents.insert(next_parents.end(), grandparent->parents_.begin(), grandparent->parents_.end()); grandparent->to_buildplate_ = new_value; + grandparent->to_model_gracious_ |= new_value; // If we set to_buildplate to true, update to_model_gracious } grandparents = next_parents; } diff --git a/include/TreeSupportEnums.h b/include/TreeSupportEnums.h index 4c2238f9cd..f3c959c8dd 100644 --- a/include/TreeSupportEnums.h +++ b/include/TreeSupportEnums.h @@ -1,4 +1,4 @@ -//CuraEngine is released under the terms of the AGPLv3 or higher. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef CURAENGINE_TREESUPPORTENUMS_H #define CURAENGINE_TREESUPPORTENUMS_H @@ -28,6 +28,6 @@ enum class AvoidanceType COLLISION }; -}//end namespace +} // namespace cura #endif // CURAENGINE_TREESUPPORTENUMS_H diff --git a/include/TreeSupportSettings.h b/include/TreeSupportSettings.h index 78be092694..f74b9cffe3 100644 --- a/include/TreeSupportSettings.h +++ b/include/TreeSupportSettings.h @@ -1,3 +1,4 @@ +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef TREESUPPORTSETTINGS_H @@ -10,8 +11,11 @@ #include "settings/EnumSettings.h" #include "settings/Settings.h" #include "settings/types/Angle.h" +#include "settings/types/Ratio.h" #include "utils/Coord_t.h" #include "utils/Simplify.h" +#include "utils/math.h" + namespace cura { @@ -50,13 +54,13 @@ struct TreeSupportSettings : RestPreference::BUILDPLATE) , xy_distance(mesh_group_settings.get("support_xy_distance")) , bp_radius(mesh_group_settings.get("support_tree_bp_diameter") / 2) - , diameter_scale_bp_radius(std::min(sin(0.7) * static_cast(layer_height / branch_radius), 1.0 / (branch_radius / (support_line_width / 2.0)))) + , diameter_scale_bp_radius(std::min(sin(0.7) * static_cast(layer_height) / static_cast(branch_radius), 1.0 / (branch_radius / (support_line_width / 2.0)))) , // Either 40° or as much as possible so that 2 lines will overlap by at least 50%, whichever is smaller. support_overrides(mesh_group_settings.get("support_xy_overrides_z")) , xy_min_distance(support_overrides == SupportDistPriority::Z_OVERRIDES_XY ? mesh_group_settings.get("support_xy_distance_overhang") : xy_distance) - , z_distance_top_layers(round_up_divide(mesh_group_settings.get("support_top_distance"), layer_height)) + , z_distance_top(mesh_group_settings.get("support_top_distance")) + , z_distance_top_layers(round_up_divide(z_distance_top, layer_height)) , z_distance_bottom_layers(round_up_divide(mesh_group_settings.get("support_bottom_distance"), layer_height)) - , performance_interface_skip_layers(round_up_divide(mesh_group_settings.get("support_interface_skip_height"), layer_height)) , support_infill_angles(mesh_group_settings.get>("support_infill_angles")) , support_roof_angles(mesh_group_settings.get>("support_roof_angles")) , roof_pattern(mesh_group_settings.get("support_roof_pattern")) @@ -258,6 +262,11 @@ struct TreeSupportSettings */ coord_t xy_min_distance; + /*! + * \brief Distance required the top of the support to the model + */ + coord_t z_distance_top; + /*! * \brief Amount of layers distance required the top of the support to the model */ @@ -268,11 +277,6 @@ struct TreeSupportSettings */ size_t z_distance_bottom_layers; - /*! - * \brief used for performance optimization at the support floor. Should have no impact on the resulting tree. - */ - size_t performance_interface_skip_layers; - /*! * \brief User specified angles for the support infill. */ @@ -403,7 +407,7 @@ struct TreeSupportSettings && // can not be set on a per-mesh basis currently, so code to enable processing different roof patterns in the same iteration seems useless. support_roof_angles == other.support_roof_angles && support_infill_angles == other.support_infill_angles && increase_radius_until_radius == other.increase_radius_until_radius && support_bottom_layers == other.support_bottom_layers && layer_height == other.layer_height - && z_distance_top_layers == other.z_distance_top_layers && maximum_deviation == other.maximum_deviation && // Infill generation depends on deviation and resolution. + && z_distance_top == other.z_distance_top && maximum_deviation == other.maximum_deviation && // Infill generation depends on deviation and resolution. maximum_resolution == other.maximum_resolution && support_roof_line_distance == other.support_roof_line_distance && skip_some_zags == other.skip_some_zags && zag_skip_count == other.zag_skip_count && connect_zigzags == other.connect_zigzags && interface_preference == other.interface_preference && min_feature_size == other.min_feature_size && // interface_preference should be identical to ensure the tree will correctly interact with the roof. diff --git a/include/TreeSupportTipGenerator.h b/include/TreeSupportTipGenerator.h index a6e04b0a1b..e483500ea0 100644 --- a/include/TreeSupportTipGenerator.h +++ b/include/TreeSupportTipGenerator.h @@ -11,11 +11,13 @@ #include "TreeSupportEnums.h" #include "TreeSupportSettings.h" #include "boost/functional/hash.hpp" // For combining hashes +#include "geometry/LinesSet.h" +#include "geometry/OpenLinesSet.h" +#include "geometry/Polygon.h" #include "polyclipping/clipper.hpp" #include "settings/EnumSettings.h" #include "sliceDataStorage.h" #include "utils/Coord_t.h" -#include "utils/polygon.h" namespace cura { @@ -33,15 +35,15 @@ class TreeSupportTipGenerator * \param mesh[in] The mesh that is currently processed. Contains the overhangs. * \param move_bounds[out] The storage for the tips. * \param additional_support_areas[out] Areas that should have been roofs, but are now support, as they would not generate any lines as roof. Should already be initialised. - + * \param placed_fake_roof_areas[out] Areas where fake roof has to be placed. * \return All lines of the \p polylines object, with information for each point regarding in which avoidance it is currently valid in. */ void generateTips( SliceDataStorage& storage, const SliceMeshStorage& mesh, std::vector>& move_bounds, - std::vector& additional_support_areas, - std::vector& placed_support_lines_support_areas); + std::vector& additional_support_areas, + std::vector>& placed_fake_roof_areas); private: enum class LineStatus @@ -63,7 +65,7 @@ class TreeSupportTipGenerator * \param layer_idx[in] The current layer. * \return All lines of the \p polylines object, with information for each point regarding in which avoidance it is currently valid in. */ - std::vector convertLinesToInternal(Polygons polylines, LayerIndex layer_idx); + std::vector convertLinesToInternal(const OpenLinesSet& polylines, LayerIndex layer_idx); /*! * \brief Converts lines in internal format into a Polygons object representing these lines. @@ -71,7 +73,7 @@ class TreeSupportTipGenerator * \param lines[in] The lines that will be converted. * \return All lines of the \p lines object as a Polygons object. */ - Polygons convertInternalToLines(std::vector lines); + OpenLinesSet convertInternalToLines(std::vector lines); /*! * \brief Returns a function, evaluating if a point has to be added now. Required for a splitLines call in generateInitialAreas. @@ -102,7 +104,7 @@ class TreeSupportTipGenerator * \param enforce_distance[in] If points should not be added if they are closer than distance to other points. * \return A Polygons object containing the evenly spaced points. Does not represent an area, more a collection of points on lines. */ - Polygons ensureMaximumDistancePolyline(const Polygons& input, coord_t distance, size_t min_points, bool enforce_distance) const; + OpenLinesSet ensureMaximumDistancePolyline(const OpenLinesSet& input, coord_t distance, size_t min_points, bool enforce_distance) const; /*! * \brief Creates a valid CrossInfillProvider @@ -121,7 +123,7 @@ class TreeSupportTipGenerator * \param result[out] The dropped overhang ares * \param roof[in] Whether the result is for roof generation. */ - void dropOverhangAreas(const SliceMeshStorage& mesh, std::vector& result, bool roof); + void dropOverhangAreas(const SliceMeshStorage& mesh, std::vector& result, bool roof); /*! * \brief Calculates which areas should be supported with roof, and saves these in roof support_roof_drawn @@ -174,7 +176,7 @@ class TreeSupportTipGenerator * \param storage[in] Background storage, required for adding roofs. * \param additional_support_areas[in] Areas that should have been roofs, but are now support, as they would not generate any lines as roof. */ - void removeUselessAddedPoints(std::vector>& move_bounds, SliceDataStorage& storage, std::vector& additional_support_areas); + void removeUselessAddedPoints(std::vector>& move_bounds, SliceDataStorage& storage, std::vector& additional_support_areas); /*! * \brief Contains config settings to avoid loading them in every function. This was done to improve readability of the code. @@ -296,12 +298,17 @@ class TreeSupportTipGenerator /*! * \brief Areas that will be saved as support roof */ - std::vector support_roof_drawn_; + std::vector support_roof_drawn_; + + /*! + * \brief Areas that require fractional roof above it. + */ + std::vector support_roof_drawn_fractional_; /*! * \brief Areas that will be saved as support roof, originating from tips being replaced with roof areas. */ - std::vector roof_tips_drawn_; + std::vector roof_tips_drawn_; std::mutex critical_move_bounds_; std::mutex critical_roof_tips_; diff --git a/include/TreeSupportUtils.h b/include/TreeSupportUtils.h index ca301b6ad4..d11364fd2d 100644 --- a/include/TreeSupportUtils.h +++ b/include/TreeSupportUtils.h @@ -12,12 +12,15 @@ #include "TreeSupportEnums.h" #include "TreeSupportSettings.h" #include "boost/functional/hash.hpp" // For combining hashes +#include "geometry/LinesSet.h" +#include "geometry/OpenLinesSet.h" +#include "geometry/OpenPolyline.h" +#include "geometry/Polygon.h" #include "infill.h" #include "polyclipping/clipper.hpp" #include "settings/EnumSettings.h" #include "sliceDataStorage.h" #include "utils/Coord_t.h" -#include "utils/polygon.h" namespace cura { @@ -29,20 +32,14 @@ class TreeSupportUtils * \brief Adds the implicit line from the last vertex of a Polygon to the first one. * * \param poly[in] The Polygons object, of which its lines should be extended. - * \return A Polygons object with implicit line from the last vertex of a Polygon to the first one added. + * \return A Polygons object with explicit line from the last vertex of a Polygon to the first one added. */ - static Polygons toPolylines(const Polygons& poly) + static OpenLinesSet toPolylines(const Shape& poly) { - Polygons result; + OpenLinesSet result; for (const auto& path : poly) { - Polygon part; - for (const auto& p : path) - { - part.add(p); - } - part.add(path[0]); - result.add(part); + result.push_back(path.toPseudoOpenPolyline()); } return result; } @@ -54,29 +51,30 @@ class TreeSupportUtils * \param toolpaths[in] The toolpaths. * \return A Polygons object. */ - [[nodiscard]] static Polygons toPolylines(const std::vector toolpaths) + [[nodiscard]] static OpenLinesSet toPolylines(const std::vector toolpaths) { - Polygons result; - for (VariableWidthLines lines : toolpaths) + OpenLinesSet result; + for (const VariableWidthLines& lines : toolpaths) { - for (ExtrusionLine line : lines) + for (const ExtrusionLine& line : lines) { - if (line.size() == 0) + if (line.empty()) { continue; } - Polygon result_line; - for (ExtrusionJunction junction : line) + + OpenPolyline result_line; + for (const ExtrusionJunction& junction : line) { - result_line.add(junction.p_); + result_line.push_back(junction.p_); } if (line.is_closed_) { - result_line.add(line[0].p_); + result_line.push_back(line[0].p_); } - result.add(result_line); + result.push_back(result_line); } } return result; @@ -96,8 +94,8 @@ class TreeSupportUtils * todo doku * \return A Polygons object that represents the resulting infill lines. */ - [[nodiscard]] static Polygons generateSupportInfillLines( - const Polygons& area, + [[nodiscard]] static OpenLinesSet generateSupportInfillLines( + const Shape& area, const TreeSupportSettings& config, bool roof, LayerIndex layer_idx, @@ -106,7 +104,7 @@ class TreeSupportUtils bool include_walls, bool generate_support_supporting = false) { - Polygons gaps; + Shape gaps; // As we effectivly use lines to place our supportPoints we may use the Infill class for it, while not made for it, it works perfectly. const EFillMethod pattern = generate_support_supporting ? EFillMethod::GRID : roof ? config.roof_pattern : config.support_pattern; @@ -158,21 +156,21 @@ class TreeSupportUtils zag_skip_count, pocket_size); - Polygons areas; - Polygons lines; + Shape areas; + OpenLinesSet lines; roof_computation.generate(toolpaths, areas, lines, config.settings, layer_idx, SectionType::SUPPORT, cross_fill_provider); - lines.add(toPolylines(areas)); - lines.add(toPolylines(toolpaths)); + lines.push_back(toPolylines(areas)); + lines.push_back(toPolylines(toolpaths)); return lines; } /*! - * \brief Unions two Polygons. Ensures that if the input is non empty that the output also will be non empty. + * \brief Unions two Shape. Ensures that if the input is non empty that the output also will be non empty. * \param first[in] The first Polygon. * \param second[in] The second Polygon. - * \return The union of both Polygons + * \return The union of both Shape */ - [[nodiscard]] static Polygons safeUnion(const Polygons& first, const Polygons& second = Polygons()) + [[nodiscard]] static Shape safeUnion(const Shape& first, const Shape& second = Shape()) { // The unionPolygons function can slowly remove Polygons under certain circumstances, because of rounding issues (Polygons that have a thin area). // This does not cause a problem when actually using it on large areas, but as influence areas (representing centerpoints) can be very thin, this does occur so this ugly @@ -187,33 +185,33 @@ class TreeSupportUtils */ const bool was_empty = first.empty() && second.empty(); - Polygons result = first.unionPolygons(second); + Shape result = first.unionPolygons(second); if (result.empty() && ! was_empty) // Some error occurred. { spdlog::warn("Caught an area destroying union, enlarging areas a bit."); // Just take the few lines we have, and offset them a tiny bit. Needs to be offsetPolylines, as offset may already have problems with the area. - return toPolylines(first).offsetPolyLine(2).unionPolygons(toPolylines(second).offsetPolyLine(2)); + return toPolylines(first).offset(2).unionPolygons(toPolylines(second).offset(2)); } return result; } /*! * \brief Offsets (increases the area of) a polygons object in multiple steps to ensure that it does not lag through over a given obstacle. - * \param me[in] Polygons object that has to be offset. + * \param me[in] Shape object that has to be offset. * \param distance[in] The distance by which me should be offset. Expects values >=0. * \param collision[in] The area representing obstacles. * \param last_step_offset_without_check[in] The most it is allowed to offset in one step. - * \param min_amount_offset[in] How many steps have to be done at least. As this uses round offset this increases the amount of vertices, which may be required if Polygons get + * \param min_amount_offset[in] How many steps have to be done at least. As this uses round offset this increases the amount of vertices, which may be required if Shape get * very small. Required as arcTolerance is not exposed in offset, which should result with a similar result, benefit may be eliminated by simplifying. \param * min_offset_per_step Don't get below this amount of offset per step taken. Fine-tune tradeoff between speed and accuracy. \param simplifier[in] Pointer to Simplify object if - * the offset operation also simplify the Polygon. Improves performance. \return The resulting Polygons object. + * the offset operation also simplify the Polygon. Improves performance. \return The resulting Shape object. */ - [[nodiscard]] static Polygons safeOffsetInc( - const Polygons& me, + [[nodiscard]] static Shape safeOffsetInc( + const Shape& me, coord_t distance, - const Polygons& collision, + const Shape& collision, coord_t safe_step_size, coord_t last_step_offset_without_check, size_t min_amount_offset, @@ -221,7 +219,7 @@ class TreeSupportUtils Simplify* simplifier) { bool do_final_difference = last_step_offset_without_check == 0; - Polygons ret = safeUnion(me); // Ensure sane input. + Shape ret = safeUnion(me); // Ensure sane input. if (distance == 0) { return (do_final_difference ? ret.difference(collision) : ret).unionPolygons(); @@ -291,14 +289,14 @@ class TreeSupportUtils * \param max_allowed_distance[in] The maximum distance a point may be moved. If not possible the point will be moved as far as possible in the direction of the outside of the * provided area. \return A Polyline object containing the moved points. */ - [[nodiscard]] static Polygons movePointsOutside(const Polygons& polylines, const Polygons& area, coord_t max_allowed_distance) + [[nodiscard]] static OpenLinesSet movePointsOutside(const OpenLinesSet& polylines, const Shape& area, coord_t max_allowed_distance) { - Polygons result; + OpenLinesSet result; - for (auto line : polylines) + for (const OpenPolyline& line : polylines) { - Polygon next_line; - for (Point2LL p : line) + OpenPolyline next_line; + for (const Point2LL& p : line) { if (area.inside(p)) { @@ -306,30 +304,30 @@ class TreeSupportUtils PolygonUtils::moveOutside(area, next_outside); if (vSize2(p - next_outside) < max_allowed_distance * max_allowed_distance) { - next_line.add(next_outside); + next_line.push_back(next_outside); } else // move point as far as allowed. { double max_partial_move_proportion = double(max_allowed_distance) / double(vSize(p - next_outside)); next_outside = p + (next_outside - p) * max_partial_move_proportion; - next_line.add(next_outside); + next_line.push_back(next_outside); } } else { - next_line.add(p); + next_line.push_back(p); } } if (next_line.size() > 0) { - result.add(next_line); + result.push_back(next_line); } } return result; } - [[nodiscard]] static VariableWidthLines polyLineToVWL(const Polygons& polylines, coord_t line_width) + [[nodiscard]] static VariableWidthLines polyLineToVWL(const Shape& polylines, coord_t line_width) { VariableWidthLines result; for (auto path : polylines) diff --git a/include/WallToolPaths.h b/include/WallToolPaths.h index 07b67ebfcd..1ef9db161b 100644 --- a/include/WallToolPaths.h +++ b/include/WallToolPaths.h @@ -7,9 +7,9 @@ #include #include "BeadingStrategy/BeadingStrategyFactory.h" +#include "geometry/Polygon.h" #include "settings/Settings.h" #include "utils/ExtrusionLine.h" -#include "utils/polygon.h" #include "utils/section_type.h" namespace cura @@ -26,7 +26,7 @@ class WallToolPaths * \param settings The settings as provided by the user */ WallToolPaths( - const Polygons& outline, + const Shape& outline, const coord_t nominal_bead_width, const size_t inset_count, const coord_t wall_0_inset, @@ -44,7 +44,7 @@ class WallToolPaths * \param settings The settings as provided by the user */ WallToolPaths( - const Polygons& outline, + const Shape& outline, const coord_t bead_width_0, const coord_t bead_width_x, const size_t inset_count, @@ -90,7 +90,7 @@ class WallToolPaths * If there are no walls, the outline will be returned. * \return The inner contour of the generated walls. */ - const Polygons& getInnerContour(); + const Shape& getInnerContour(); /*! * Removes empty paths from the toolpaths @@ -110,9 +110,9 @@ class WallToolPaths static void stitchToolPaths(std::vector& toolpaths, const Settings& settings); /*! - * Remove polylines shorter than half the smallest line width along that polyline. + * Remove polylines shorter than half the smallest line width along that polyline, if that polyline isn't part of an outer wall. */ - static void removeSmallLines(std::vector& toolpaths); + static void removeSmallFillLines(std::vector& toolpaths); /*! * Simplifies the variable-width toolpaths by calling the simplify on every line in the toolpath using the provided @@ -122,7 +122,7 @@ class WallToolPaths static void simplifyToolPaths(std::vector& toolpaths, const Settings& settings); private: - const Polygons& outline_; // toolpaths_; // +#include #include //Loading JSON documents to get settings from them. #include //To store the command line arguments. -#include +#include #include //To store the command line arguments. #include "Communication.h" //The class we're implementing. @@ -15,6 +17,9 @@ namespace cura { class Settings; +using setting_map = std::unordered_map; +using container_setting_map = std::unordered_map; + /* * \brief When slicing via the command line, interprets the command line * arguments to initiate a slice. @@ -107,14 +112,14 @@ class CommandLine : public Communication * * The command line doesn't show any layer view so this is ignored. */ - void sendPolygon(const PrintFeatureType&, const ConstPolygonRef&, const coord_t&, const coord_t&, const Velocity&) override; + void sendPolygon(const PrintFeatureType&, const Polygon&, const coord_t&, const coord_t&, const Velocity&) override; /* * \brief Send a polygon to show it in layer view. * * The command line doesn't show any layer view so this is ignored. */ - void sendPolygons(const PrintFeatureType&, const Polygons&, const coord_t&, const coord_t&, const Velocity&) override; + void sendPolygons(const PrintFeatureType&, const Shape&, const coord_t&, const coord_t&, const Velocity&) override; /* * \brief Show an estimate of how long the print would take and how much @@ -151,6 +156,12 @@ class CommandLine : public Communication void sliceNext() override; private: +#ifdef __EMSCRIPTEN__ + std::string progressHandler; +#endif + + std::vector search_directories_; + /* * \brief The command line arguments that the application was called with. */ @@ -161,12 +172,6 @@ class CommandLine : public Communication */ unsigned int last_shown_progress_; - /* - * \brief Get the default search directories to search for definition files. - * \return The default search directories to search for definition files. - */ - std::unordered_set defaultSearchDirectories(); - /* * \brief Load a JSON file and store the settings inside it. * \param json_filename The location of the JSON file to load settings from. @@ -177,7 +182,7 @@ class CommandLine : public Communication * 1, the file could not be opened. If it's 2, there was a syntax error in * the file. */ - int loadJSON(const std::string& json_filename, Settings& settings, bool force_read_parent = false, bool force_read_nondefault = false); + int loadJSON(const std::filesystem::path& json_filename, Settings& settings, bool force_read_parent = false, bool force_read_nondefault = false); /* * \brief Load a JSON document and store the settings inside it. @@ -190,7 +195,7 @@ class CommandLine : public Communication */ int loadJSON( const rapidjson::Document& document, - const std::unordered_set& search_directories, + const std::vector& search_directories, Settings& settings, bool force_read_parent = false, bool force_read_nondefault = false); @@ -211,7 +216,21 @@ class CommandLine : public Communication * \param search_directories The directories to search in. * \return The first definition file that matches the definition ID. */ - const std::string findDefinitionFile(const std::string& definition_id, const std::unordered_set& search_directories); + static std::string findDefinitionFile(const std::string& definition_id, const std::vector& search_directories); + + /* + * \brief Read the resolved JSON values from a file. + * \param element The path to the file to read the JSON values from. + * \return The resolved JSON values. + */ + static std::optional readResolvedJsonValues(const std::filesystem::path& json_filename); + + /* + * \brief Read the resolved JSON values from a document. + * \param document The document to read the JSON values from. + * \return The resolved JSON values. + */ + static std::optional readResolvedJsonValues(const rapidjson::Document& document); }; } // namespace cura diff --git a/include/communication/Communication.h b/include/communication/Communication.h index 0b8a509a5b..9bc990c11e 100644 --- a/include/communication/Communication.h +++ b/include/communication/Communication.h @@ -4,16 +4,16 @@ #ifndef COMMUNICATION_H #define COMMUNICATION_H +#include "geometry/Point2LL.h" #include "settings/types/LayerIndex.h" #include "settings/types/Velocity.h" -#include "utils/Point2LL.h" namespace cura { // Some forward declarations to increase compilation speed. enum class PrintFeatureType : unsigned char; -class Polygons; -class ConstPolygonRef; +class Shape; +class Polygon; class ExtruderTrain; /* @@ -76,7 +76,7 @@ class Communication * \param line_thickness The thickness (in the Z direction) of the polygons. * \param velocity The velocity of printing these polygons. */ - virtual void sendPolygons(const PrintFeatureType& type, const Polygons& polygons, const coord_t& line_width, const coord_t& line_thickness, const Velocity& velocity) = 0; + virtual void sendPolygons(const PrintFeatureType& type, const Shape& polygons, const coord_t& line_width, const coord_t& line_thickness, const Velocity& velocity) = 0; /* * \brief Send a polygon to the user to visualise. @@ -90,7 +90,7 @@ class Communication * \param line_thickness The thickness (in the Z direction) of the polygon. * \param velocity The velocity of printing this polygon. */ - virtual void sendPolygon(const PrintFeatureType& type, const ConstPolygonRef& polygon, const coord_t& line_width, const coord_t& line_thickness, const Velocity& velocity) = 0; + virtual void sendPolygon(const PrintFeatureType& type, const Polygon& polygon, const coord_t& line_width, const coord_t& line_thickness, const Velocity& velocity) = 0; /* * \brief Send a line to the user to visualise. diff --git a/include/gcodeExport.h b/include/gcodeExport.h index 950fe50824..7b211f8516 100644 --- a/include/gcodeExport.h +++ b/include/gcodeExport.h @@ -8,24 +8,25 @@ #ifdef BUILD_TESTS #include //To allow tests to use protected members. #endif +#include #include // for stream.str() #include +#include "geometry/Point2LL.h" #include "settings/EnumSettings.h" #include "settings/Settings.h" //For MAX_EXTRUDERS. #include "settings/types/LayerIndex.h" #include "settings/types/Temperature.h" //Bed temperature. #include "settings/types/Velocity.h" -#include "sliceDataStorage.h" #include "timeEstimate.h" #include "utils/AABB3D.h" //To track the used build volume for the Griffin header. #include "utils/NoCopy.h" -#include "utils/Point2LL.h" namespace cura { class RetractionConfig; +class SliceDataStorage; struct WipeScriptConfig; // The GCodeExport class writes the actual GCode. This is the only class that knows how GCode looks and feels. @@ -89,7 +90,7 @@ class GCodeExport : public NoCopy double last_e_value_after_wipe_; //!< The current material amount extruded since last wipe - unsigned fan_number_; // nozzle print cooling fan number + size_t fan_number_; // nozzle print cooling fan number Point2LL nozzle_offset_; //!< Cache of setting machine_nozzle_offset_[xy] bool machine_firmware_retract_; //!< Cache of setting machine_firmware_retract @@ -150,8 +151,8 @@ class GCodeExport : public NoCopy //!< other layer parts) size_t current_extruder_; - double current_fan_speed_; - unsigned fan_number_; // current print cooling fan number + std::map current_fans_speeds_; //!< Current fan speed, by fan index. No value means the speed has never been set yet. + size_t fans_count_{ 0 }; EGCodeFlavor flavor_; std::vector total_print_times_; //!< The total estimated print time in seconds for each feature @@ -266,7 +267,7 @@ class GCodeExport : public NoCopy */ void addExtraPrimeAmount(double extra_prime_volume); - Point3LL getPosition() const; + const Point3LL& getPosition() const; Point2LL getPositionXY() const; @@ -470,6 +471,15 @@ class GCodeExport : public NoCopy */ void processInitialLayerBedTemperature(); + /*! + * Set extruders temperatures for the initial layer. Called by 'processInitialLayerTemperatures'. + * + * \param storage The slice data storage + * \param wait_start_extruder Indicates whether we should always wait for the start extruder temperature to be reached + * \param start_extruder_nr The index of the start extruder + */ + void processInitialLayerExtrudersTemperatures(const SliceDataStorage& storage, const bool wait_start_extruder, const size_t start_extruder_nr); + public: /*! * Get ready for extrusion moves: @@ -533,15 +543,37 @@ class GCodeExport : public NoCopy void writePrimeTrain(const Velocity& travel_speed); /*! - * Set the print cooling fan number (used as P parameter to M10[67]) for the specified extruder - * - * \param extruder The current extruder + * \brief Write a set fan speed command, if different from the actual speed + * \param speed The new fan speed, which should be [0.0, 100.0] + * \param extruder The extruder for which we want to set the cooling fan speed, or nullopt to use the current extruder */ - void setExtruderFanNumber(int extruder); + void writeFanCommand(double speed, std::optional extruder = std::nullopt); - void writeFanCommand(double speed); + /*! + * \brief Write a set fan speed command for the given fan, if different from the actual speed + * \param speed The new fan speed, which should be [0.0, 100.0] + * \param fan_number The fan for which we want to set the speed + */ + void writeSpecificFanCommand(double speed, size_t fan_number); - void writeTemperatureCommand(const size_t extruder, const Temperature& temperature, const bool wait = false); + /*! Write cooling fan speeds before proceeding an extruder switch */ + void writePrepareFansForNozzleSwitch(); + + /*! + * \brief Write the cooling fan speeds before starting an actual extrusion + * \param current_extruder_new_speed The new speed for the currently active extruder + * \note All other cooling fans but the active one will be deactivaed + */ + void writePrepareFansForExtrusion(double current_extruder_new_speed); + + /*! + * \brief Write a GCode temperature command + * \param extruder The extruder number + * \param temperature The temperature to bo set + * \param wait Indicates whether we should just set the temperature and keep going, or wait for the temperature to be reach before going further + * \param force_write_on_equal When true, we should write the temperature command even if the actual set temperature is the same + */ + void writeTemperatureCommand(const size_t extruder, const Temperature& temperature, const bool wait = false, const bool force_write_on_equal = false); void writeBedTemperatureCommand(const Temperature& temperature, const bool wait = false); void writeBuildVolumeTemperatureCommand(const Temperature& temperature, const bool wait = false); diff --git a/include/geometry/ClosedLinesSet.h b/include/geometry/ClosedLinesSet.h new file mode 100644 index 0000000000..381628f767 --- /dev/null +++ b/include/geometry/ClosedLinesSet.h @@ -0,0 +1,22 @@ +// Copyright (c) 2024 UltiMaker +// CuraEngine is released under the terms of the AGPLv3 or higher + +#ifndef GEOMETRY_CLOSED_LINES_SET_H +#define GEOMETRY_CLOSED_LINES_SET_H + +namespace cura +{ + +template +class LinesSet; +class ClosedPolyline; + +/*! + * \brief Convenience definition for a container that can hold only closed polylines. This makes it + * explicit what the lines actually represent. + */ +using ClosedLinesSet = LinesSet; + +} // namespace cura + +#endif // GEOMETRY_CLOSED_LINES_SET_H diff --git a/include/geometry/ClosedPolyline.h b/include/geometry/ClosedPolyline.h new file mode 100644 index 0000000000..979ed6f29c --- /dev/null +++ b/include/geometry/ClosedPolyline.h @@ -0,0 +1,143 @@ +// Copyright (c) 2023 UltiMaker +// CuraEngine is released under the terms of the AGPLv3 or higher + +#ifndef GEOMETRY_CLOSED_POLYLINE_H +#define GEOMETRY_CLOSED_POLYLINE_H + +#include "geometry/Polyline.h" + +namespace cura +{ + +class OpenPolyline; + +/*! @brief This describes a polyline which forms a closed path. + * @sa https://github.com/Ultimaker/CuraEngine/wiki/Geometric-Base-Types#closedpolyline + * + * The path may be closed: + * * Explicitely, which means the last point is at the same position as the first point. + * In this case, in order to iterate over the segments, you just have to iterate over + * the actual points. + * * Implicitely, which means the last and first point are at different positions. In this + * case, to iterate over the segments, you have to consider an additional segment + * between the last and first point + * + * The difference is made because it is easier to iterate over segments when the path is + * explicitely closed, but ClipperLib uses implicitely closed paths. It is also a bit healthier + * to use implicitely closed because there is no risk that the first and last point become different + */ +class ClosedPolyline : public Polyline +{ +private: + bool explicitely_closed_{ false }; + +public: + /*! + * \brief Builds an empty closed polyline + * \warning By default, the line is tagged as non explicitely closed. We need this default + * constructor in various places, but be careful that the interpretation of the points + * added later will depend on this. + */ + ClosedPolyline() = default; + + /*! + * \brief Builds an empty closed polyline + * \param explicitely_closed Indicates whether the line will be explicitely closed + */ + explicit ClosedPolyline(const bool explicitely_closed) + : explicitely_closed_{ explicitely_closed } + { + } + + /*! \brief Creates a copy of the given polyline */ + ClosedPolyline(const ClosedPolyline& other) = default; + + /*! \brief Constructor that takes ownership of the inner points list from the given polyline */ + ClosedPolyline(ClosedPolyline&& other) = default; + + /*! + * \brief Constructor with a points initializer list, provided for convenience + * \param explicitely_closed Specify whether the given points form an explicitely closed line + */ + ClosedPolyline(const std::initializer_list& initializer, bool explicitely_closed) + : Polyline{ initializer } + , explicitely_closed_{ explicitely_closed } + { + } + + /*! + * \brief Constructor with an existing list of points + * \param explicitely_closed Specify whether the given points form an explicitely closed line + */ + explicit ClosedPolyline(const ClipperLib::Path& points, bool explicitely_closed) + : Polyline{ points } + , explicitely_closed_{ explicitely_closed } + { + } + + /*! + * \brief Constructor that takes ownership of the given list of points + * \param explicitely_closed Specify whether the given points form an explicitely closed line + */ + explicit ClosedPolyline(ClipperLib::Path&& points, bool explicitely_closed) + : Polyline{ std::move(points) } + , explicitely_closed_{ explicitely_closed } + { + } + + ~ClosedPolyline() override = default; + + /*! @see Polyline::hasClosingSegment() */ + [[nodiscard]] bool hasClosingSegment() const override + { + return ! explicitely_closed_; + } + + /*! @see Polyline::addClosingSegment() */ + [[nodiscard]] size_t segmentsCount() const override; + + /*! @see Polyline::isValid() */ + [[nodiscard]] bool isValid() const override; + + ClosedPolyline& operator=(const ClosedPolyline& other) = default; + + ClosedPolyline& operator=(ClosedPolyline&& other) = default; + + [[nodiscard]] bool isExplicitelyClosed() const + { + return explicitely_closed_; + } + + /*! + * \brief Sets whether the points set is to be treated as explicitely or implicitely closed + * \warning This does not actually changes the points set, only the interpretation of it will + * change. So use this method only if you really know what you are doing. + */ + void setExplicitelyClosed(bool explicitely_closed) + { + explicitely_closed_ = explicitely_closed; + } + + /*! + * Clipper function. + * Returns false if outside, true if inside; if the point lies exactly on the border, will return 'border_result'. + * + * http://www.angusj.com/delphi/clipper/documentation/Docs/Units/ClipperLib/Functions/PointInPolygon.htm + */ + [[nodiscard]] bool inside(const Point2LL& p, bool border_result = false) const; + + [[nodiscard]] bool inside(const ClipperLib::Path& polygon) const; + + /*! + * \brief Converts the closed polyline to an open polyline which happens to have its end and start points at the same + * position, making it a pseudo-closed polyline. Although this should never be required in practice, there + * are many places in the code where this is done because historically we wouldn't make a clear difference + * between open and closed polylines + * \return An open polyline instance, with the end point at the same position of the start point + */ + [[nodiscard]] OpenPolyline toPseudoOpenPolyline() const; +}; + +} // namespace cura + +#endif // GEOMETRY_CLOSED_POLYLINE_H diff --git a/include/geometry/LinesSet.h b/include/geometry/LinesSet.h new file mode 100644 index 0000000000..7834b821eb --- /dev/null +++ b/include/geometry/LinesSet.h @@ -0,0 +1,312 @@ +// Copyright (c) 2024 UltiMaker +// CuraEngine is released under the terms of the AGPLv3 or higher + +#ifndef GEOMETRY_LINES_SET_H +#define GEOMETRY_LINES_SET_H + +#include + +#include + +#include "geometry/OpenLinesSet.h" +#include "geometry/Point2LL.h" + +namespace cura +{ + +class Shape; +template +class LinesSet; +class OpenPolyline; + +enum class CheckNonEmptyParam +{ + OnlyIfValid, + OnlyIfNotEmpty, + EvenIfEmpty +}; + +/*! + * \brief Base class for all geometry containers representing a set of polylines. + * \sa https://github.com/Ultimaker/CuraEngine/wiki/Geometric-Base-Types#linesset + */ +template +class LinesSet +{ +private: + std::vector lines_; + +public: + // Required for some std calls as a container + using value_type = LineType; + using iterator = typename std::vector::iterator; + using const_iterator = typename std::vector::const_iterator; + + /*! \brief Builds an empty set */ + LinesSet() noexcept = default; + + virtual ~LinesSet() = default; + + /*! \brief Creates a copy of the given lines set */ + LinesSet(const LinesSet& other) = default; + + /*! \brief Constructor that takes the inner lines list from the given set */ + LinesSet(LinesSet&& other) = default; + + /*! \brief Constructor with an existing set of lines */ + explicit LinesSet(const std::vector& lines) + : lines_(lines) + { + } + + /*! \brief Constructor that takes ownership of the data from the given set of lines */ + explicit LinesSet(std::vector&& lines) + : lines_(std::move(lines)) + { + } + + /*! \brief Constructor with a single existing line */ + explicit LinesSet(const LineType& line) + : lines_({ line }) + { + } + + /*! + * \brief Constructor that takes ownership of the data from the given set of lines + * \warning This constructor is actually only defined for a LinesSet containing OpenPolyline + * objects, because closed ones require an additional argument + */ + template + requires std::is_same_v + explicit LinesSet(ClipperLib::Paths&& paths) + { + reserve(paths.size()); + for (ClipperLib::Path& path : paths) + { + lines_.emplace_back(std::move(path)); + } + } + + const std::vector& getLines() const + { + return lines_; + } + + std::vector& getLines() + { + return lines_; + } + + void setLines(std::vector&& lines) + { + lines_ = lines; + } + + const_iterator begin() const + { + return lines_.begin(); + } + + iterator begin() + { + return lines_.begin(); + } + + const_iterator end() const + { + return lines_.end(); + } + + iterator end() + { + return lines_.end(); + } + + const LineType& back() const + { + return lines_.back(); + } + + LineType& back() + { + return lines_.back(); + } + + const LineType& front() const + { + return lines_.front(); + } + + LineType& front() + { + return lines_.front(); + } + + /*! + * \brief Pushes the given line at the end of the set + * \param check_non_empty Indicates whether we should check for the line to be non-empty before adding it + */ + void push_back(const LineType& line, CheckNonEmptyParam check_non_empty = CheckNonEmptyParam::EvenIfEmpty); + + /*! + * \brief Pushes the given line at the end of the set and takes ownership of the inner data + * \param check_non_empty Indicates whether we should check for the line to be non-empty before adding it + */ + void push_back(LineType&& line, CheckNonEmptyParam check_non_empty = CheckNonEmptyParam::EvenIfEmpty); + + /*! \brief Pushes an entier set at the end and takes ownership of the inner data */ + template + void push_back(LinesSet&& lines_set); + + /*! \brief Pushes an entier set at the end */ + void push_back(const LinesSet& other) + { + lines_.insert(lines_.end(), other.lines_.begin(), other.lines_.end()); + } + + void pop_back() + { + lines_.pop_back(); + } + + [[nodiscard]] size_t size() const + { + return lines_.size(); + } + + [[nodiscard]] bool empty() const + { + return lines_.empty(); + } + + void reserve(size_t size) + { + lines_.reserve(size); + } + + void resize(size_t size) + { + lines_.resize(size); + } + + void clear() + { + lines_.clear(); + } + + void emplace_back(auto&&... args) + { + lines_.emplace_back(std::forward(args)...); + } + + iterator erase(const_iterator first, const_iterator last) + { + return lines_.erase(first, last); + } + + LinesSet& operator=(const LinesSet& other) = default; + + LinesSet& operator=(LinesSet&& other) noexcept = default; + + LineType& operator[](size_t index) + { + return lines_[index]; + } + + const LineType& operator[](size_t index) const + { + return lines_[index]; + } + + LineType& newLine() + { + lines_.emplace_back(); + return lines_.back(); + } + + /*! \brief Return the amount of points in all lines */ + [[nodiscard]] size_t pointCount() const; + + /*! + * Remove a line from the list and move the last line to its place + * \warning changes the order of the lines! + */ + void removeAt(size_t index); + + /*! \brief Add a simple line consisting of two points */ + void addSegment(const Point2LL& from, const Point2LL& to); + + /*! \brief Get the total length of all the lines */ + [[nodiscard]] coord_t length() const; + + void splitIntoSegments(OpenLinesSet& result) const; + [[nodiscard]] OpenLinesSet splitIntoSegments() const; + + /*! \brief Removes overlapping consecutive line segments which don't delimit a positive area */ + void removeDegenerateVerts(); + + [[nodiscard]] Shape offset(coord_t distance, ClipperLib::JoinType join_type = ClipperLib::jtMiter, double miter_limit = 1.2) const; + + /*! + * Utility method for creating the tube (or 'donut') of a shape. + * + * \param inner_offset Offset relative to the original shape-outline towards the inside of the + * shape. Sort-of like a negative normal offset, except it's the offset part that's kept, + * not the shape. + * \param outer_offset Offset relative to the original shape-outline towards the outside of the + * shape. Comparable to normal offset. + * \return The resulting polygons. + */ + [[nodiscard]] Shape createTubeShape(const coord_t inner_offset, const coord_t outer_offset) const; + + void translate(const Point2LL& delta); + + /*! + * \brief Utility method to add all the lines to a ClipperLib::Clipper object + * \note This method needs to be public but you shouldn't need to use it from outside + */ + void addPaths(ClipperLib::Clipper& clipper, ClipperLib::PolyType poly_typ) const; + + /*! + * \brief Utility method to add a line to a ClipperLib::Clipper object + * \note This method needs to be public but you shouldn't need to use it from outside + */ + template + void addPath(ClipperLib::Clipper& clipper, const OtherLineLine& line, ClipperLib::PolyType poly_typ) const; + + /*! + * \brief Utility method to add all the lines to a ClipperLib::ClipperOffset object + * \note This method needs to be public but you shouldn't need to use it from outside + */ + void addPaths(ClipperLib::ClipperOffset& clipper, ClipperLib::JoinType joint_type, ClipperLib::EndType end_type) const; + + /*! + * \brief Display operator, useful for debugging/testing + */ + template + friend std::basic_ostream& operator<<(std::basic_ostream& os, const LinesSet& lines) + { + os << "LinesSet["; + + for (const LineType& line : lines | ranges::views::drop(1)) + { + os << line; + os << ", "; + } + + if (lines.size() > 1) + { + os << lines.back(); + } + + os << "]"; + return os; + } + +private: + bool checkAdd(const LineType& line, CheckNonEmptyParam check_non_empty); +}; + +} // namespace cura + +#endif // GEOMETRY_LINES_SET_H diff --git a/include/geometry/MixedLinesSet.h b/include/geometry/MixedLinesSet.h new file mode 100644 index 0000000000..f692f47661 --- /dev/null +++ b/include/geometry/MixedLinesSet.h @@ -0,0 +1,80 @@ +// Copyright (c) 2024 UltiMaker +// CuraEngine is released under the terms of the AGPLv3 or higher + +#ifndef GEOMETRY_MIXED_LINES_SET_H +#define GEOMETRY_MIXED_LINES_SET_H + +#include + +#include "geometry/ClosedLinesSet.h" +#include "geometry/OpenLinesSet.h" +#include "utils/Coord_t.h" + +namespace cura +{ + +class Polyline; +class ClosedPolyline; +class Polygon; +class Shape; + +using PolylinePtr = std::shared_ptr; +using OpenPolylinePtr = std::shared_ptr; + +/*! + * \brief Convenience definition for a container that can hold any type of polyline. + * \sa https://github.com/Ultimaker/CuraEngine/wiki/Geometric-Base-Types#mixedlinesset + */ +class MixedLinesSet : public std::vector +{ +public: + /*! + * \brief Computes the offset of all the polylines contained in the set. The polylines may + * be of different types, and polylines are polygons are treated differently. + * \param distance The distance to increase the polylines from, or decrase if negative + * \param join_type The type of tip joint to be used (for open polylines only) + * \return A shape containing the offsetted polylines. This may contain many unjoined polygons, + * but no overlapping ones. + */ + [[nodiscard]] Shape offset(coord_t distance, ClipperLib::JoinType join_type = ClipperLib::jtMiter, double miter_limit = 1.2) const; + + /*! @brief Adds a copy of the given polyline to the set */ + void push_back(const OpenPolyline& line); + + /*! @brief Adds a copy of the given polyline to the set */ + void push_back(const Polygon& line); + + /*! @brief Adds a copy of the given polyline to the set */ + void push_back(OpenPolyline&& line); + + /*! @brief Adds a copy of the given polyline to the set */ + void push_back(ClosedPolyline&& line); + + /*! @brief Adds the given shared pointer to the set. The pointer reference count will be incremeted but no data is actually copied. */ + void push_back(const OpenPolylinePtr& line); + + /*! @brief Adds the given shared pointer to the set. The pointer reference count will be incremeted but no data is actually copied. */ + void push_back(const PolylinePtr& line); + + /*! @brief Adds a copy of all the polygons contained in the shape */ + void push_back(const Shape& shape); + + /*! @brief Adds a copy of all the polygons contained in the set */ + void push_back(const LinesSet& lines_set); + + /*! @brief Adds a copy of all the polylines contained in the set */ + void push_back(const OpenLinesSet& lines_set); + + /*! @brief Adds a copy of all the polylines contained in the set */ + void push_back(OpenLinesSet&& lines_set); + + /*! @brief Adds a copy of all the polylines contained in the set */ + void push_back(ClosedLinesSet&& lines_set); + + /*! \brief Computes the total lenght of all the polylines in the set */ + [[nodiscard]] coord_t length() const; +}; + +} // namespace cura + +#endif // GEOMETRY_MIXED_LINES_SET_H diff --git a/include/geometry/OpenLinesSet.h b/include/geometry/OpenLinesSet.h new file mode 100644 index 0000000000..d3e18902f5 --- /dev/null +++ b/include/geometry/OpenLinesSet.h @@ -0,0 +1,22 @@ +// Copyright (c) 2024 UltiMaker +// CuraEngine is released under the terms of the AGPLv3 or higher + +#ifndef GEOMETRY_OPEN_LINES_SET_H +#define GEOMETRY_OPEN_LINES_SET_H + +namespace cura +{ + +template +class LinesSet; +class OpenPolyline; + +/*! + * \brief Convenience definition for a container that can hold only open polylines. This makes it + * explicit what the lines actually represent. + */ +using OpenLinesSet = LinesSet; + +} // namespace cura + +#endif // GEOMETRY_OPEN_LINES_SET_H diff --git a/include/geometry/OpenPolyline.h b/include/geometry/OpenPolyline.h new file mode 100644 index 0000000000..2a6b0faef2 --- /dev/null +++ b/include/geometry/OpenPolyline.h @@ -0,0 +1,94 @@ +// Copyright (c) 2024 UltiMaker +// CuraEngine is released under the terms of the AGPLv3 or higher + +#ifndef GEOMETRY_OPEN_POLYLINE_H +#define GEOMETRY_OPEN_POLYLINE_H + +#include "geometry/Polyline.h" + +namespace cura +{ + +/*! + * @brief Represents a polyline that is explicitely not closed + * @sa https://github.com/Ultimaker/CuraEngine/wiki/Geometric-Base-Types#openpolyline + * @note Open polylines are sometimes used to represent actually closed polylines. In this case + * the first and last point are at the very same position. This should not be done, but + * it exists all around the engine for historical reasons. The behavior is however deprecated + * and should not be used in the future + */ +class OpenPolyline : public Polyline +{ +public: + /*! @brief Builds an empty polyline */ + OpenPolyline() = default; + + /*! + * \brief Creates a copy of the given polyline + * \warning A copy of the points list is made, so this constructor is somehow "slow" + */ + OpenPolyline(const OpenPolyline& other) = default; + + /*! + * \brief Constructor that takes ownership of the inner points list from the given polyline + * \warning This constructor is fast because it does not allocate data, but it will clear + * the source object + */ + OpenPolyline(OpenPolyline&& other) = default; + + /*! + * \brief Constructor with a points initializer list, provided for convenience + * \warning A copy of the points list is made, so this constructor is somehow "slow" + */ + OpenPolyline(const std::initializer_list& initializer) + : Polyline{ initializer } + { + } + + /*! + * \brief Constructor with an existing list of points + * \warning A copy of the points list is made, so this constructor is somehow "slow" + */ + explicit OpenPolyline(const ClipperLib::Path& points) + : Polyline{ points } + { + } + + /*! + * \brief Constructor that takes ownership of the given list of points + * \warning This constructor is fast because it does not allocate data, but it will clear + * the source object + */ + explicit OpenPolyline(ClipperLib::Path&& points) + : Polyline{ std::move(points) } + { + } + + ~OpenPolyline() override = default; + + /*! @see Polyline::hasClosingSegment() */ + [[nodiscard]] bool hasClosingSegment() const override + { + return false; // Definitely not + } + + /*! @see Polyline::segmentsCount() */ + [[nodiscard]] size_t segmentsCount() const override + { + return size() > 1 ? size() - 1 : 0; + } + + /*! @see Polyline::isValid() */ + [[nodiscard]] bool isValid() const override + { + return size() >= 2; + } + + OpenPolyline& operator=(OpenPolyline&& other) noexcept = default; + + OpenPolyline& operator=(const OpenPolyline& other) = default; +}; + +} // namespace cura + +#endif // GEOMETRY_OPEN_POLYLINE_H diff --git a/include/geometry/PartsView.h b/include/geometry/PartsView.h new file mode 100644 index 0000000000..6cfb9bf4c6 --- /dev/null +++ b/include/geometry/PartsView.h @@ -0,0 +1,68 @@ +// Copyright (c) 2024 UltiMaker +// CuraEngine is released under the terms of the AGPLv3 or higher + +#ifndef GEOMETRY_PARTS_VIEW_H +#define GEOMETRY_PARTS_VIEW_H + +#include + +namespace cura +{ + +class Shape; +class SingleShape; + +/*! + * Extension of vector> which is similar to a vector of PolygonParts, except the base of the container is indices to polygons into the original Polygons, + * instead of the polygons themselves + */ +class PartsView : public std::vector> +{ +public: + Shape& polygons_; + + PartsView() = delete; + + explicit PartsView(Shape& polygons) + : polygons_{ polygons } + { + } + + PartsView(PartsView&& parts_view) = default; + PartsView(const PartsView& parts_view) = default; + + ~PartsView() = default; + + PartsView& operator=(PartsView&& parts_view) = delete; + PartsView& operator=(const PartsView& parts_view) = delete; + + /*! + * Get the index of the SingleShape of which the polygon with index \p poly_idx is part. + * + * \param poly_idx The index of the polygon in \p polygons + * \param boundary_poly_idx Optional output parameter: The index of the boundary polygon of the part in \p polygons + * \return The SingleShape containing the polygon with index \p poly_idx + */ + size_t getPartContaining(size_t poly_idx, size_t* boundary_poly_idx = nullptr) const; + + /*! + * Assemble the SingleShape of which the polygon with index \p poly_idx is part. + * + * \param poly_idx The index of the polygon in \p polygons + * \param boundary_poly_idx Optional output parameter: The index of the boundary polygon of the part in \p polygons + * \return The SingleShape containing the polygon with index \p poly_idx + */ + SingleShape assemblePartContaining(size_t poly_idx, size_t* boundary_poly_idx = nullptr) const; + + /*! + * Assemble the SingleShape of which the polygon with index \p poly_idx is part. + * + * \param part_idx The index of the part + * \return The SingleShape with index \p poly_idx + */ + [[nodiscard]] SingleShape assemblePart(size_t part_idx) const; +}; + +} // namespace cura + +#endif // GEOMETRY_PARTS_VIEW_H diff --git a/include/geometry/Point2LL.h b/include/geometry/Point2LL.h new file mode 100644 index 0000000000..08a556a961 --- /dev/null +++ b/include/geometry/Point2LL.h @@ -0,0 +1,262 @@ +// Copyright (c) 2024 UltiMaker +// CuraEngine is released under the terms of the AGPLv3 or higher. + +#ifndef UTILS_INT_POINT_H +#define UTILS_INT_POINT_H + +/** +The integer point classes are used as soon as possible and represent microns in 2D or 3D space. +Integer points are used to avoid floating point rounding errors, and because ClipperLib uses them. +*/ +#define INLINE static inline + +#include +#include +#include + +#include "geometry/Point3LL.h" +#include "utils/types/generic.h" + +#ifdef __GNUC__ +#define DEPRECATED(func) func __attribute__((deprecated)) +#elif defined(_MSC_VER) +#define DEPRECATED(func) __declspec(deprecated) func +#else +#pragma message("WARNING: You need to implement DEPRECATED for this compiler") +#define DEPRECATED(func) func +#endif + + +namespace cura +{ + +/* 64bit Points are used mostly throughout the code, these are the 2D points from ClipperLib */ +using Point2LL = ClipperLib::IntPoint; + +#define POINT_MIN std::numeric_limits::min() +#define POINT_MAX std::numeric_limits::max() + +static Point2LL no_point(std::numeric_limits::min(), std::numeric_limits::min()); + +/* Extra operators to make it easier to do math with the 64bit Point objects */ +INLINE Point2LL operator-(const Point2LL& p0) +{ + return { -p0.X, -p0.Y }; +} + +INLINE Point2LL operator+(const Point2LL& p0, const Point2LL& p1) +{ + return { p0.X + p1.X, p0.Y + p1.Y }; +} + +INLINE Point2LL operator-(const Point2LL& p0, const Point2LL& p1) +{ + return { p0.X - p1.X, p0.Y - p1.Y }; +} + +INLINE Point2LL operator*(const Point2LL& p0, const coord_t i) +{ + return { p0.X * i, p0.Y * i }; +} + +template // Use only for numeric types. +INLINE Point2LL operator*(const Point2LL& p0, const T i) +{ + return { std::llrint(static_cast(p0.X) * i), std::llrint(static_cast(p0.Y) * i) }; +} + +template +INLINE Point2LL operator*(const T i, const Point2LL& p0) +{ + return p0 * i; +} + +INLINE Point2LL operator/(const Point2LL& p0, const coord_t i) +{ + return { p0.X / i, p0.Y / i }; +} + +INLINE Point2LL operator/(const Point2LL& p0, const Point2LL& p1) +{ + return { p0.X / p1.X, p0.Y / p1.Y }; +} + +INLINE Point2LL operator%(const Point2LL& p0, const coord_t i) +{ + return { p0.X % i, p0.Y % i }; +} + +INLINE Point2LL& operator+=(Point2LL& p0, const Point2LL& p1) +{ + p0.X += p1.X; + p0.Y += p1.Y; + return p0; +} + +INLINE Point2LL& operator-=(Point2LL& p0, const Point2LL& p1) +{ + p0.X -= p1.X; + p0.Y -= p1.Y; + return p0; +} + +INLINE bool operator<(const Point2LL& p0, const Point2LL& p1) +{ + return p0.X < p1.X || (p0.X == p1.X && p0.Y < p1.Y); +} + +/* ***** NOTE ***** + TL;DR: DO NOT implement operators *= and /= because of the default values in ClipperLib::IntPoint's constructor. + + We DO NOT implement operators *= and /= because the class Point is essentially a ClipperLib::IntPoint and it has a + constructor IntPoint(int x = 0, int y = 0), and this causes problems. If you implement *= as *=(int) and when you + do "Point a = a * 5", you probably intend to do "a.x *= 5" and "a.y *= 5", but with that constructor, it will create + an IntPoint(5, y = 0) and you end up with wrong results. + */ + +// INLINE bool operator==(const Point& p0, const Point& p1) { return p0.X==p1.X&&p0.Y==p1.Y; } +// INLINE bool operator!=(const Point& p0, const Point& p1) { return p0.X!=p1.X||p0.Y!=p1.Y; } + +INLINE coord_t vSize2(const Point2LL& p0) +{ + return p0.X * p0.X + p0.Y * p0.Y; +} + +INLINE double vSize2f(const Point2LL& p0) +{ + return static_cast(p0.X) * static_cast(p0.X) + static_cast(p0.Y) * static_cast(p0.Y); +} + +INLINE bool shorterThen(const Point2LL& p0, const coord_t len) +{ + if (p0.X > len || p0.X < -len) + { + return false; + } + if (p0.Y > len || p0.Y < -len) + { + return false; + } + return vSize2(p0) <= len * len; +} + +INLINE bool shorterThan(const Point2LL& p0, const coord_t len) +{ + return shorterThen(p0, len); +} + +INLINE coord_t vSize(const Point2LL& p0) +{ + return std::llrint(sqrt(static_cast(vSize2(p0)))); +} + +INLINE double vSizeMM(const Point2LL& p0) +{ + double fx = INT2MM(p0.X); + double fy = INT2MM(p0.Y); + return std::sqrt(fx * fx + fy * fy); +} + +INLINE Point2LL normal(const Point2LL& p0, coord_t length) +{ + const coord_t len{ vSize(p0) }; + if (len < 1) + { + return { length, 0 }; + } + return p0 * length / len; +} + +INLINE Point2LL turn90CCW(const Point2LL& p0) +{ + return { -p0.Y, p0.X }; +} + +INLINE Point2LL rotate(const Point2LL& p0, double angle) +{ + const double cos_component = std::cos(angle); + const double sin_component = std::sin(angle); + const auto x = static_cast(p0.X); + const auto y = static_cast(p0.Y); + return { std::llrint(cos_component * x - sin_component * y), std::llrint(sin_component * x + cos_component * y) }; +} + +INLINE coord_t dot(const Point2LL& p0, const Point2LL& p1) +{ + return p0.X * p1.X + p0.Y * p1.Y; +} + +INLINE coord_t cross(const Point2LL& p0, const Point2LL& p1) +{ + return p0.X * p1.Y - p0.Y * p1.X; +} + +INLINE double angle(const Point2LL& p) +{ + double angle = std::atan2(p.X, p.Y) / std::numbers::pi * 180.0; + if (angle < 0.0) + { + angle += 360.0; + } + return angle; +} + +// Identity function, used to be able to make templated algorithms where the input is sometimes points, sometimes things that contain or can be converted to points. +INLINE const Point2LL& make_point(const Point2LL& p) +{ + return p; +} + +inline Point3LL operator+(const Point3LL& p3, const Point2LL& p2) +{ + return { p3.x_ + p2.X, p3.y_ + p2.Y, p3.z_ }; +} + +inline Point3LL& operator+=(Point3LL& p3, const Point2LL& p2) +{ + p3.x_ += p2.X; + p3.y_ += p2.Y; + return p3; +} + +inline Point2LL operator+(const Point2LL& p2, const Point3LL& p3) +{ + return { p3.x_ + p2.X, p3.y_ + p2.Y }; +} + +inline Point3LL operator-(const Point3LL& p3, const Point2LL& p2) +{ + return { p3.x_ - p2.X, p3.y_ - p2.Y, p3.z_ }; +} + +inline Point3LL& operator-=(Point3LL& p3, const Point2LL& p2) +{ + p3.x_ -= p2.X; + p3.y_ -= p2.Y; + return p3; +} + +inline Point2LL operator-(const Point2LL& p2, const Point3LL& p3) +{ + return { p2.X - p3.x_, p2.Y - p3.y_ }; +} + +} // namespace cura + +namespace std +{ +template<> +struct hash +{ + size_t operator()(const cura::Point2LL& pp) const noexcept + { + static int prime = 31; + int result = 89; + result = static_cast(result * prime + pp.X); + result = static_cast(result * prime + pp.Y); + return static_cast(result); + } +}; +} // namespace std + +#endif // UTILS_INT_POINT_H diff --git a/include/utils/Point3LL.h b/include/geometry/Point3LL.h similarity index 64% rename from include/utils/Point3LL.h rename to include/geometry/Point3LL.h index c992bcb3d5..fd220b05ef 100644 --- a/include/utils/Point3LL.h +++ b/include/geometry/Point3LL.h @@ -1,17 +1,17 @@ // Copyright (c) 2018 Ultimaker B.V. // CuraEngine is released under the terms of the AGPLv3 or higher. -#ifndef UTILS_POINT3_H -#define UTILS_POINT3_H +#ifndef GEOMETRY_POINT3LL_H +#define GEOMETRY_POINT3LL_H #include #include //For sqrt. #include //Auto-serialization. #include //For numeric_limits::min and max. -#include //For int32_t and int64_t. #include // for operations on any arithmetic number type -#include "Coord_t.h" +#include "utils/Coord_t.h" +#include "utils/types/generic.h" namespace cura @@ -20,10 +20,12 @@ namespace cura class Point3LL { public: - coord_t x_, y_, z_; - Point3LL() - { - } + coord_t x_{}; + coord_t y_{}; + coord_t z_{}; + + Point3LL() = default; + Point3LL(const coord_t x, const coord_t y, const coord_t z) : x_(x) , y_(y) @@ -31,41 +33,53 @@ class Point3LL { } + Point3LL(Point3LL&& point) = default; + Point3LL(const Point3LL& point) = default; + Point3LL& operator=(const Point3LL& point) = default; + Point3LL& operator=(Point3LL&& point) = default; + + virtual ~Point3LL() = default; + Point3LL operator+(const Point3LL& p) const; Point3LL operator-() const; Point3LL operator-(const Point3LL& p) const; Point3LL operator*(const Point3LL& p) const; //!< Element-wise multiplication. For dot product, use .dot()! Point3LL operator/(const Point3LL& p) const; - template::value, num_t>::type> - Point3LL operator*(const num_t i) const + + template + Point3LL operator*(const T& i) const { - return Point3LL(std::llround(static_cast(x_) * i), std::llround(static_cast(y_) * i), std::llround(static_cast(z_) * i)); + return { std::llround(static_cast(x_) * i), std::llround(static_cast(y_) * i), std::llround(static_cast(z_) * i) }; } - template::value, num_t>::type> - Point3LL operator/(const num_t i) const + + template + Point3LL operator/(const T& i) const { - return Point3LL(x_ / i, y_ / i, z_ / i); + return { x_ / i, y_ / i, z_ / i }; } - template::value, num_t>::type> - Point3LL operator%(const num_t i) const + + template + Point3LL operator%(const T& i) const { - return Point3LL(x_ % i, y_ % i, z_ % i); + return { x_ % i, y_ % i, z_ % i }; } Point3LL& operator+=(const Point3LL& p); Point3LL& operator-=(const Point3LL& p); Point3LL& operator*=(const Point3LL& p); Point3LL& operator/=(const Point3LL& p); - template::value, num_t>::type> - Point3LL& operator*=(const num_t i) + + template + Point3LL& operator*=(const T i) { x_ *= i; y_ *= i; z_ *= i; return *this; } - template::value, num_t>::type> - Point3LL& operator/=(const num_t i) + + template + Point3LL& operator/=(const T i) { x_ /= i; y_ /= i; @@ -73,9 +87,7 @@ class Point3LL return *this; } - bool operator==(const Point3LL& p) const; - bool operator!=(const Point3LL& p) const; - + auto operator<=>(const Point3LL&) const = default; template friend std::basic_ostream& operator<<(std::basic_ostream& os, const Point3LL& p) @@ -83,38 +95,47 @@ class Point3LL return os << "(" << p.x_ << ", " << p.y_ << ", " << p.z_ << ")"; } - - coord_t max() const + [[nodiscard]] coord_t max() const { if (x_ > y_ && x_ > z_) + { return x_; + } if (y_ > z_) + { return y_; + } return z_; } - bool testLength(coord_t len) const + [[nodiscard]] bool testLength(coord_t len) const { if (x_ > len || x_ < -len) + { return false; + } if (y_ > len || y_ < -len) + { return false; + } if (z_ > len || z_ < -len) + { return false; + } return vSize2() <= len * len; } - coord_t vSize2() const + [[nodiscard]] coord_t vSize2() const { return x_ * x_ + y_ * y_ + z_ * z_; } - coord_t vSize() const + [[nodiscard]] coord_t vSize() const { return std::llrint(sqrt(static_cast(vSize2()))); } - double vSizeMM() const + [[nodiscard]] double vSizeMM() const { double fx = INT2MM(x_); double fy = INT2MM(y_); @@ -122,7 +143,7 @@ class Point3LL return sqrt(fx * fx + fy * fy + fz * fz); } - coord_t dot(const Point3LL& p) const + [[nodiscard]] coord_t dot(const Point3LL& p) const { return x_ * p.x_ + y_ * p.y_ + z_ * p.z_; } @@ -153,8 +174,8 @@ class Point3LL */ static Point3LL no_point3(std::numeric_limits::min(), std::numeric_limits::min(), std::numeric_limits::min()); -template::value, num_t>::type> -inline Point3LL operator*(const num_t i, const Point3LL& rhs) +template +inline Point3LL operator*(const T i, const Point3LL& rhs) { return rhs * i; } @@ -167,7 +188,7 @@ namespace std template<> struct hash { - size_t operator()(const cura::Point3LL& pp) const + size_t operator()(const cura::Point3LL& pp) const noexcept { static int prime = 31; int result = 89; @@ -180,4 +201,4 @@ struct hash } // namespace std -#endif // UTILS_POINT3_H +#endif // GEOMETRY_POINT3LL_H diff --git a/include/geometry/Point3Matrix.h b/include/geometry/Point3Matrix.h new file mode 100644 index 0000000000..bbe11d6918 --- /dev/null +++ b/include/geometry/Point3Matrix.h @@ -0,0 +1,92 @@ +// Copyright (c) 2020 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. + +#ifndef GEOMETRY_POINT3_MATRIX_H +#define GEOMETRY_POINT3_MATRIX_H + +#include + +#include "geometry/Point3LL.h" +#include "geometry/PointMatrix.h" + +namespace cura +{ + +class Point3Matrix +{ +public: + std::array matrix{ 1, 0, 0, 0, 1, 0, 0, 0, 1 }; + + Point3Matrix() noexcept = default; + + /*! + * Initializes the top left corner with the values of \p b + * and the rest as if it's a unit matrix + */ + explicit Point3Matrix(const PointMatrix& b) + { + matrix.at(0) = b.matrix.at(0); + matrix.at(1) = b.matrix.at(1); + matrix.at(2) = 0; + matrix.at(3) = b.matrix.at(2); + matrix.at(4) = b.matrix.at(3); + matrix.at(5) = 0; + matrix.at(6) = 0; + matrix.at(7) = 0; + matrix.at(8) = 1; + } + + Point3Matrix(Point3Matrix&& point3_matrix) = default; + Point3Matrix(const Point3Matrix& point3_matrix) = default; + virtual ~Point3Matrix() = default; + + Point3Matrix& operator=(Point3Matrix&& point3_matrix) = default; + Point3Matrix& operator=(const Point3Matrix& point3_matrix) = default; + + [[nodiscard]] Point3LL apply(const Point3LL& p) const + { + const auto x = static_cast(p.x_); + const auto y = static_cast(p.y_); + const auto z = static_cast(p.z_); + return { std::llrint(x * matrix.at(0) + y * matrix.at(1) + z * matrix.at(2)), + std::llrint(x * matrix.at(3) + y * matrix.at(4) + z * matrix.at(5)), + std::llrint(x * matrix.at(6) + y * matrix.at(7) + z * matrix.at(8)) }; + } + + /*! + * Apply matrix to vector as homogeneous coordinates. + */ + [[nodiscard]] Point2LL apply(const Point2LL& p) const + { + Point3LL result = apply(Point3LL(p.X, p.Y, 1)); + return { result.x_ / result.z_, result.y_ / result.z_ }; + } + + static Point3Matrix translate(const Point2LL& p) + { + Point3Matrix ret; // uniform matrix + ret.matrix.at(2) = static_cast(p.X); + ret.matrix.at(5) = static_cast(p.Y); + return ret; + } + + [[nodiscard]] Point3Matrix compose(const Point3Matrix& b) const + { + Point3Matrix ret; + for (int outx = 0; outx < 3; outx++) + { + for (int outy = 0; outy < 3; outy++) + { + ret.matrix.at(outy * 3 + outx) = 0; + for (int in = 0; in < 3; in++) + { + ret.matrix.at(outy * 3 + outx) += matrix.at(outy * 3 + in) * b.matrix.at(in * 3 + outx); + } + } + } + return ret; + } +}; + +} // namespace cura +#endif // GEOMETRY_POINT3_MATRIX_H diff --git a/include/geometry/PointMatrix.h b/include/geometry/PointMatrix.h new file mode 100644 index 0000000000..1a22a74f06 --- /dev/null +++ b/include/geometry/PointMatrix.h @@ -0,0 +1,81 @@ +// Copyright (c) 2020 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. + +#ifndef GEOMETRY_POINT_MATRIX_H +#define GEOMETRY_POINT_MATRIX_H + +#include +#include + +#include "geometry/Point2LL.h" + + +namespace cura +{ + +class PointMatrix +{ +public: + std::array matrix{ 1, 0, 0, 1 }; + + PointMatrix() noexcept = default; + + explicit PointMatrix(double rotation) + { + rotation = rotation / 180 * std::numbers::pi; + matrix.at(0) = std::cos(rotation); + matrix.at(1) = -std::sin(rotation); + matrix.at(2) = -matrix.at(1); + matrix.at(3) = matrix.at(0); + } + + explicit PointMatrix(const Point2LL& p) + { + matrix.at(0) = static_cast(p.X); + matrix.at(1) = static_cast(p.Y); + double f = std::sqrt((matrix.at(0) * matrix.at(0)) + (matrix.at(1) * matrix.at(1))); + matrix.at(0) /= f; + matrix.at(1) /= f; + matrix.at(2) = -matrix.at(1); + matrix.at(3) = matrix.at(0); + } + + static PointMatrix scale(double s) + { + PointMatrix ret; + ret.matrix.at(0) = s; + ret.matrix.at(3) = s; + return ret; + } + + [[nodiscard]] Point2LL apply(const Point2LL& p) const + { + const auto x = static_cast(p.X); + const auto y = static_cast(p.Y); + return { std::llrint(x * matrix.at(0) + y * matrix.at(1)), std::llrint(x * matrix.at(2) + y * matrix.at(3)) }; + } + + /*! + * \warning only works on a rotation matrix! Output is incorrect for other types of matrix + */ + [[nodiscard]] Point2LL unapply(const Point2LL& p) const + { + const auto x = static_cast(p.X); + const auto y = static_cast(p.Y); + return { std::llrint(x * matrix.at(0) + y * matrix.at(2)), std::llrint(x * matrix.at(1) + y * matrix.at(3)) }; + } + + [[nodiscard]] PointMatrix inverse() const + { + PointMatrix ret; + double det = matrix.at(0) * matrix.at(3) - matrix.at(1) * matrix.at(2); + ret.matrix.at(0) = matrix.at(3) / det; + ret.matrix.at(1) = -matrix.at(1) / det; + ret.matrix.at(2) = -matrix.at(2) / det; + ret.matrix.at(3) = matrix.at(0) / det; + return ret; + } +}; + +} // namespace cura +#endif // GEOMETRY_POINT_MATRIX_H diff --git a/include/geometry/PointsSet.h b/include/geometry/PointsSet.h new file mode 100644 index 0000000000..f61329929d --- /dev/null +++ b/include/geometry/PointsSet.h @@ -0,0 +1,220 @@ +// Copyright (c) 2024 UltiMaker +// CuraEngine is released under the terms of the AGPLv3 or higher + +#ifndef GEOMETRY_POINTS_SET_H +#define GEOMETRY_POINTS_SET_H + +#include "geometry/Point2LL.h" +#include "utils/Coord_t.h" + +namespace cura +{ + +class PointMatrix; +class Point3Matrix; + +const static int clipper_init = (0); +#define NO_INDEX (std::numeric_limits::max()) + +/*! + * \brief Base class for all geometry containers representing a set of points. + * \sa https://github.com/Ultimaker/CuraEngine/wiki/Geometric-Base-Types#pointsset + */ +class PointsSet +{ +private: + ClipperLib::Path points_; + +public: + // Required for some std calls as a container + using value_type = Point2LL; + using iterator = typename std::vector::iterator; + using const_iterator = typename std::vector::const_iterator; + using reverse_iterator = typename std::vector::reverse_iterator; + using const_reverse_iterator = typename std::vector::const_reverse_iterator; + + /*! \brief Builds an empty set */ + PointsSet() = default; + + /*! \brief Creates a copy of the given points set */ + PointsSet(const PointsSet& other) = default; + + /*! \brief Constructor that takes ownership of the inner points from the given set */ + PointsSet(PointsSet&& other) = default; + + /*! \brief Constructor with a points initializer list, provided for convenience" */ + PointsSet(const std::initializer_list& initializer); + + virtual ~PointsSet() = default; + + /*! \brief Constructor with an existing list of points */ + explicit PointsSet(const ClipperLib::Path& points); + + /*! \brief Constructor that takes ownership of the given list of points */ + explicit PointsSet(ClipperLib::Path&& points); + + [[nodiscard]] const ClipperLib::Path& getPoints() const + { + return points_; + } + + ClipperLib::Path& getPoints() + { + return points_; + } + + void setPoints(ClipperLib::Path&& points) + { + points_ = points; + } + + [[nodiscard]] size_t size() const + { + return points_.size(); + } + + void push_back(const Point2LL& point) + { + points_.push_back(point); + } + + void emplace_back(auto&&... args) + { + points_.emplace_back(std::forward(args)...); + } + + void pop_back() + { + points_.pop_back(); + } + + void insert(auto&&... args) + { + points_.insert(std::forward(args)...); + } + + [[nodiscard]] const_iterator begin() const + { + return points_.begin(); + } + + iterator begin() + { + return points_.begin(); + } + + [[nodiscard]] const_iterator end() const + { + return points_.end(); + } + + iterator end() + { + return points_.end(); + } + + [[nodiscard]] const_reverse_iterator rbegin() const + { + return points_.rbegin(); + } + + reverse_iterator rbegin() + { + return points_.rbegin(); + } + + [[nodiscard]] const_reverse_iterator rend() const + { + return points_.rend(); + } + + reverse_iterator rend() + { + return points_.rend(); + } + + [[nodiscard]] const Point2LL& front() const + { + return points_.front(); + } + + Point2LL& front() + { + return points_.front(); + } + + [[nodiscard]] const Point2LL& back() const + { + return points_.back(); + } + + Point2LL& back() + { + return points_.back(); + } + + [[nodiscard]] const Point2LL& at(const size_t pos) const + { + return points_.at(pos); + } + + Point2LL& at(const size_t pos) + { + return points_.at(pos); + } + + [[nodiscard]] bool empty() const + { + return points_.empty(); + } + + void resize(const size_t size) + { + points_.resize(size); + } + + void reserve(const size_t size) + { + points_.reserve(size); + } + + void clear() + { + points_.clear(); + } + + Point2LL& operator[](size_t index) + { + return points_[index]; + } + + const Point2LL& operator[](size_t index) const + { + return points_[index]; + } + + PointsSet& operator=(const PointsSet& other) = default; + + PointsSet& operator=(PointsSet&& other) = default; + + /*! + * \brief Translate all the points in some direction. + * \param translation The direction in which to move the points + */ + void translate(const Point2LL& translation); + + /*! \brief Apply a matrix to each vertex in this set */ + void applyMatrix(const PointMatrix& matrix); + void applyMatrix(const Point3Matrix& matrix); + + /*! \brief Display operator, useful for debugging/testing */ + template + friend std::basic_ostream& operator<<(std::basic_ostream& os, const PointsSet& polygon) + { + return os << "PointsSet(" << polygon.getPoints() << ")"; + } +}; + +} // namespace cura + +#endif // GEOMETRY_POINTS_SET_H diff --git a/include/geometry/Polygon.h b/include/geometry/Polygon.h new file mode 100644 index 0000000000..987851ab8d --- /dev/null +++ b/include/geometry/Polygon.h @@ -0,0 +1,199 @@ +// Copyright (c) 2024 UltiMaker +// CuraEngine is released under the terms of the AGPLv3 or higher + +#ifndef GEOMETRY_POLYGON_H +#define GEOMETRY_POLYGON_H + +#include "geometry/ClosedPolyline.h" + +namespace cura +{ + +class Shape; +class ListPolyIt; +class AngleDegrees; + +/*! + * \brief A Polygon is a specific type of polyline, for which we consider that the "inside" part of + * the line forms a surface + * \sa https://github.com/Ultimaker/CuraEngine/wiki/Geometric-Base-Types#polygon + */ +class Polygon : public ClosedPolyline +{ +public: + Polygon() = default; + + /*! + * \brief Builds an empty polygon + * \param explicitely_closed Indicates whether the contour line will be explicitely closed + * \warning By default, the contour line is tagged as explicitely closed. We need this default + * constructor in various places, but be careful that the interpretation of the points + * added later will depend on this. + */ + explicit Polygon(const bool explicitely_closed) + : ClosedPolyline{ explicitely_closed } + { + } + + /*! \brief Creates a copy of the given polygon */ + Polygon(const Polygon& other) = default; + + /*! \brief Constructor that takes ownership of the inner points list from the given polygon */ + Polygon(Polygon&& other) = default; + + /*! + * \brief Constructor with a points initializer list, provided for convenience + * \param explicitely_closed Specify whether the given points form an explicitely closed line + */ + Polygon(const std::initializer_list& initializer, const bool explicitely_closed) + : ClosedPolyline{ initializer, explicitely_closed } + { + } + + /*! + * \brief Constructor with an existing list of points + * \param explicitely_closed Specify whether the given points form an explicitely closed line + */ + explicit Polygon(const ClipperLib::Path& points, const bool explicitely_closed) + : ClosedPolyline{ points, explicitely_closed } + { + } + + /*! + * \brief Constructor that takes ownership of the given list of points + * \param explicitely_closed Specify whether the given points form an explicitely closed line + */ + explicit Polygon(ClipperLib::Path&& points, const bool explicitely_closed) + : ClosedPolyline{ std::move(points), explicitely_closed } + { + } + + ~Polygon() override = default; + + Polygon& operator=(const Polygon& other) = default; + + Polygon& operator=(Polygon&& other) noexcept = default; + + /*! + * \brief Compute the morphological intersection between this polygon and another. + * \param other The polygon with which to intersect this polygon. + * \note The result may consist of multiple polygons, if you have bad luck. + */ + [[nodiscard]] Shape intersection(const Polygon& other) const; + + [[nodiscard]] double area() const + { + return ClipperLib::Area(getPoints()); + } + + [[nodiscard]] Point2LL centerOfMass() const; + + [[nodiscard]] Shape offset(int distance, ClipperLib::JoinType join_type = ClipperLib::jtMiter, double miter_limit = 1.2) const; + + /*! + * Smooth out small perpendicular segments and store the result in \p result. + * Smoothing is performed by removing the inner most vertex of a line segment smaller than \p remove_length + * which has an angle with the next and previous line segment smaller than roughly 150* + * + * Note that in its current implementation this function doesn't remove line segments with an angle smaller than 30* + * Such would be the case for an N shape. + * + * \param remove_length The length of the largest segment removed + * \param result (output) The result polygon, assumed to be empty + */ + void smooth(int remove_length, Polygon& result) const; + + /*! + * Smooth out sharp inner corners, by taking a shortcut which bypasses the corner + * + * \param angle The maximum angle of inner corners to be smoothed out + * \param shortcut_length The desired length of the shortcut line segment introduced (shorter shortcuts may be unavoidable) + * \param result The resulting polygon + */ + void smoothOutward(const AngleDegrees angle, int shortcut_length, Polygon& result) const; + + /*! + * Smooth out the polygon and store the result in \p result. + * Smoothing is performed by removing vertices for which both connected line segments are smaller than \p remove_length + * + * \param remove_length The length of the largest segment removed + * \param result (output) The result polygon, assumed to be empty + */ + void smooth2(int remove_length, Polygon& result) const; + + /*! + * Smooth out a simple corner consisting of two linesegments. + * + * Auxiliary function for \ref smooth_outward + * + * \param p0 The point before the corner + * \param p1 The corner + * \param p2 The point after the corner + * \param p0_it Iterator to the point before the corner + * \param p1_it Iterator to the corner + * \param p2_it Iterator to the point after the corner + * \param v10 Vector from \p p1 to \p p0 + * \param v12 Vector from \p p1 to \p p2 + * \param v02 Vector from \p p0 to \p p2 + * \param shortcut_length The desired length ofthe shortcutting line + * \param cos_angle The cosine on the angle in L 012 + */ + static void smoothCornerSimple( + const Point2LL& p0, + const Point2LL& p1, + const Point2LL& p2, + const ListPolyIt& p0_it, + const ListPolyIt& p1_it, + const ListPolyIt& p2_it, + const Point2LL& v10, + const Point2LL& v12, + const Point2LL& v02, + const int64_t shortcut_length, + double cos_angle); + + /*! + * Smooth out a complex corner where the shortcut bypasses more than two line segments + * + * Auxiliary function for \ref smooth_outward + * + * \warning This function might try to remove the whole polygon + * Error code -1 means the whole polygon should be removed (which means it is a hole polygon) + * + * \param p1 The corner point + * \param[in,out] p0_it Iterator to the last point checked before \p p1 to consider cutting off + * \param[in,out] p2_it Iterator to the last point checked after \p p1 to consider cutting off + * \param shortcut_length The desired length ofthe shortcutting line + * \return Whether this whole polygon whould be removed by the smoothing + */ + static bool smoothCornerComplex(const Point2LL& p1, ListPolyIt& p0_it, ListPolyIt& p2_it, const int64_t shortcut_length); + + /*! + * Try to take a step away from the corner point in order to take a bigger shortcut. + * + * Try to take the shortcut from a place as far away from the corner as the place we are taking the shortcut to. + * + * Auxiliary function for \ref smooth_outward + * + * \param[in] p1 The corner point + * \param[in] shortcut_length2 The square of the desired length ofthe shortcutting line + * \param[in,out] p0_it Iterator to the previously checked point somewhere beyond \p p1. Updated for the next iteration. + * \param[in,out] p2_it Iterator to the previously checked point somewhere before \p p1. Updated for the next iteration. + * \param[in,out] forward_is_blocked Whether trying another step forward is blocked by the smoothing outward condition. Updated for the next iteration. + * \param[in,out] backward_is_blocked Whether trying another step backward is blocked by the smoothing outward condition. Updated for the next iteration. + * \param[in,out] forward_is_too_far Whether trying another step forward is blocked by the shortcut length condition. Updated for the next iteration. + * \param[in,out] backward_is_too_far Whether trying another step backward is blocked by the shortcut length condition. Updated for the next iteration. + */ + static void smoothOutwardStep( + const Point2LL& p1, + const int64_t shortcut_length2, + ListPolyIt& p0_it, + ListPolyIt& p2_it, + bool& forward_is_blocked, + bool& backward_is_blocked, + bool& forward_is_too_far, + bool& backward_is_too_far); +}; + +} // namespace cura + +#endif // GEOMETRY_POLYGON_H diff --git a/include/geometry/Polyline.h b/include/geometry/Polyline.h new file mode 100644 index 0000000000..a26c942fcf --- /dev/null +++ b/include/geometry/Polyline.h @@ -0,0 +1,160 @@ +// Copyright (c) 2024 UltiMaker +// CuraEngine is released under the terms of the AGPLv3 or higher + +#ifndef GEOMETRY_POLYLINE_H +#define GEOMETRY_POLYLINE_H + +#include "geometry/OpenLinesSet.h" +#include "geometry/PointsSet.h" +#include "geometry/SegmentIterator.h" + +namespace cura +{ + +template +class LinesSet; +class AngleRadians; +class OpenPolyline; + +/*! + * \brief Base class for various types of polylines. A polyline is basically a set of points, but + * we geometrically interpret them forming a chain of segments between each other. + * \sa https://github.com/Ultimaker/CuraEngine/wiki/Geometric-Base-Types#pointsset + * + * * Open Polyline : this represents a line that does not close, i.e. the last point is different + * from the initial point (think of the U letter) + * * Closed Polyline : a closed polyline has a final segment joining the last point and the + * initial one (think of the O letter) + * * Polygon : this is a particular type of closed polyline, for which we consider that the + * "inside" part of the line forms a surface + * + * \note Historically, the open and closed polylines were not explicitely differenciated, so + * sometimes we would use an open polyline with an extra point at the end, which virtually + * closes the line. This behaviour is now deprecated and should be removed over time. + */ +class Polyline : public PointsSet +{ +public: + using segments_iterator = SegmentIterator; + using const_segments_iterator = SegmentIterator; + + /*! \brief Builds an empty polyline */ + Polyline() = default; + + /*! \brief Creates a copy of the given polyline */ + Polyline(const Polyline& other) = default; + + /*! \brief Constructor that takes ownership of the inner points list from the given polyline */ + Polyline(Polyline&& other) = default; + + /*! \brief Constructor with a points initializer list, provided for convenience */ + Polyline(const std::initializer_list& initializer) + : PointsSet(initializer) + { + } + + /*! \brief Constructor with an existing list of points */ + explicit Polyline(const ClipperLib::Path& points) + : PointsSet(points) + { + } + + /*! \brief Constructor that takes ownership of the given list of points */ + explicit Polyline(ClipperLib::Path&& points) + : PointsSet{ std::move(points) } + { + } + + ~Polyline() override = default; + + /*! + * \brief Indicates whether this polyline has an additional closing segment between the last + * point in the set and the first one + * \return True if a segment between the last and first point should be considered + */ + [[nodiscard]] virtual bool hasClosingSegment() const = 0; + + /*! + * \brief Gets the total number of "full" segments in the polyline. Calling this is also safe if + * there are not enough points to make a valid polyline, so it can also be a good + * indicator of a "valid" polyline. + */ + [[nodiscard]] virtual size_t segmentsCount() const = 0; + + /*! + * \brief Indicates whether the points set form a valid polyline, i.e. if it has enough points + * according to its type. + */ + [[nodiscard]] virtual bool isValid() const = 0; + + Polyline& operator=(const Polyline& other) = default; + + Polyline& operator=(Polyline&& other) = default; + + /*! \brief Provides a begin iterator to iterate over all the segments of the line */ + [[nodiscard]] const_segments_iterator beginSegments() const; + + /*! \brief Provides an end iterator to iterate over all the segments of the line */ + [[nodiscard]] const_segments_iterator endSegments() const; + + /*! \brief Provides a begin iterator to iterate over all the segments of the line */ + segments_iterator beginSegments(); + + /*! \brief Provides an end iterator to iterate over all the segments of the line */ + segments_iterator endSegments(); + + /*! + * Split these poly line objects into several line segment objects consisting of only two verts + * and store them in the \p result + */ + void splitIntoSegments(OpenLinesSet& result) const; + [[nodiscard]] OpenLinesSet splitIntoSegments() const; + + /*! + * On Y-axis positive upward displays, Orientation will return true if the polygon's orientation is counter-clockwise. + * + * from http://www.angusj.com/delphi/clipper/documentation/Docs/Units/ClipperLib/Functions/Orientation.htm + */ + [[nodiscard]] bool orientation() const + { + return ClipperLib::Orientation(getPoints()); + } + + [[nodiscard]] coord_t length() const; + + [[nodiscard]] bool shorterThan(const coord_t check_length) const; + + void reverse() + { + ClipperLib::ReversePath(getPoints()); + } + + void removeColinearEdges(const AngleRadians max_deviation_angle); + + /*! + * Removes consecutive line segments with same orientation and changes this polygon. + * + * 1. Removes verts which are connected to line segments which are too small. + * 2. Removes verts which detour from a direct line from the previous and next vert by a too small amount. + * 3. Moves a vert when a small line segment is connected to a much longer one. in order to maintain the outline of the object. + * 4. Don't remove a vert when the impact on the outline of the object is too great. + * + * Note that the simplify is a best effort algorithm. It does not guarantee that no lines below the provided smallest_line_segment_squared are left. + * + * The following example (Two very long line segments (" & , respectively) that are connected by a very small line segment (i) is unsimplifable by this + * function, even though the actual area change of removing line segment i is very small. The reason for this is that in the case of long lines, even a small + * deviation from it's original direction is very noticeable in the final result, especially if the polygons above make a slightly different choice. + * + * """"""""""""""""""""""""""""""""i,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, + + * + * \param smallest_line_segment_squared maximal squared length of removed line segments + * \param allowed_error_distance_squared The square of the distance of the middle point to the line segment of the consecutive and previous point for which the middle point is + removed + */ + void simplify(const coord_t smallest_line_segment_squared = MM2INT(0.01) * MM2INT(0.01), const coord_t allowed_error_distance_squared = 25); +}; + +} // namespace cura + +#endif // GEOMETRY_POLYLINE_H diff --git a/include/geometry/SegmentIterator.h b/include/geometry/SegmentIterator.h new file mode 100644 index 0000000000..5164c7d32f --- /dev/null +++ b/include/geometry/SegmentIterator.h @@ -0,0 +1,85 @@ +// Copyright (c) 2024 UltiMaker +// CuraEngine is released under the terms of the AGPLv3 or higher + +#ifndef GEOMETRY_SEGMENT_ITERATOR_H +#define GEOMETRY_SEGMENT_ITERATOR_H + +#include "geometry/Point2LL.h" + +namespace cura +{ + +enum class ConstnessType +{ + Const, + Modifiable, +}; + +/*! @brief Custom iterator to loop over the segments of a polyline/polygon */ +template +struct SegmentIterator +{ + /*! @brief Transitory structure used to iterate over segments within a polyline */ + struct Segment + { + using PointType = std::conditional_t; + + PointType& start; + PointType& end; + }; + + // Define type values so that std library methods can use this iterator + using iterator_category = std::random_access_iterator_tag; + using value_type = Segment; + using difference_type = std::ptrdiff_t; + using pointer = Segment*; + using reference = Segment&; + using source_iterator_type = std::conditional_t::const_iterator, typename std::vector::iterator>; + +private: + source_iterator_type current_pos_; + source_iterator_type begin_; + source_iterator_type before_end_; + +public: + SegmentIterator(source_iterator_type pos, source_iterator_type begin, source_iterator_type end) + : current_pos_(pos) + , begin_(begin) + , before_end_(end != begin ? std::prev(end) : end) + { + } + + Segment operator*() const + { + if (current_pos_ == before_end_) + { + return Segment{ *current_pos_, *begin_ }; + } + return Segment{ *current_pos_, *std::next(current_pos_) }; + } + + SegmentIterator& operator++() + { + current_pos_++; + return *this; + } + + bool operator==(const SegmentIterator& other) const + { + return current_pos_ == other.current_pos_; + } + + bool operator!=(const SegmentIterator& other) const + { + return ! (*this == other); + } + + friend difference_type operator-(const SegmentIterator& iterator1, const SegmentIterator& iterator2) + { + return iterator1.current_pos_ - iterator2.current_pos_; + } +}; + +} // namespace cura + +#endif // GEOMETRY_SEGMENT_ITERATOR_H diff --git a/include/geometry/Shape.h b/include/geometry/Shape.h new file mode 100644 index 0000000000..552325676f --- /dev/null +++ b/include/geometry/Shape.h @@ -0,0 +1,289 @@ +// Copyright (c) 2024 UltiMaker +// CuraEngine is released under the terms of the AGPLv3 or higher + +#ifndef GEOMETRY_SHAPE_H +#define GEOMETRY_SHAPE_H + +#include "geometry/LinesSet.h" +#include "geometry/Polygon.h" +#include "settings/types/Angle.h" + +namespace cura +{ + +class Polygon; +class Ratio; +class SingleShape; +class PartsView; +class PointMatrix; +class Point3Matrix; + +/*! + * @brief A Shape is a set of polygons that together form a complex shape. Some of the polygons may + * be contained inside others, being actually "holes" of the shape. For example, if you + * wanted to represent the "8" digit with polygons, you would need 1 for the outline and 2 + * for the "holes" so the shape would contain a total of 3 polygons. + * @sa https://github.com/Ultimaker/CuraEngine/wiki/Geometric-Base-Types#shape + */ +class Shape : public LinesSet +{ +public: + // Clipper expects and returns implicitely closed polygons + static constexpr bool clipper_explicitely_closed_ = false; + + /*! \brief Constructor of an empty shape */ + Shape() = default; + + /*! \brief Creates a copy of the given shape */ + Shape(const Shape& other) = default; + + /*! \brief Constructor that takes the inner polygons list from the given shape */ + Shape(Shape&& other) = default; + + /*! \brief Constructor with an existing set of polygons */ + Shape(const std::vector& polygons); + + /*! \brief Constructor with a single existing polygon */ + explicit Shape(const Polygon& polygon); + + /*! + * \brief Constructor that takes ownership of the given list of points + * \param explicitely_closed Specify whether the given points form an explicitely closed line + */ + explicit Shape(ClipperLib::Paths&& paths, bool explicitely_closed = clipper_explicitely_closed_); + + Shape& operator=(const Shape& other) = default; + + Shape& operator=(Shape&& other) noexcept = default; + + ~Shape() override = default; + + void emplace_back(ClipperLib::Paths&& paths, bool explicitely_closed = clipper_explicitely_closed_); + + void emplace_back(ClipperLib::Path&& path, bool explicitely_closed = clipper_explicitely_closed_); + + void emplace_back(auto&&... args) + { + LinesSet::emplace_back(std::forward(args)...); + } + + [[nodiscard]] Shape difference(const Shape& other) const; + + [[nodiscard]] Shape difference(const Polygon& polygon) const; + + [[nodiscard]] Shape unionPolygons(const Shape& other, ClipperLib::PolyFillType fill_type = ClipperLib::pftNonZero) const; + + [[nodiscard]] Shape unionPolygons(const Polygon& polygon, ClipperLib::PolyFillType fill_type = ClipperLib::pftNonZero) const; + + /*! + * Union all polygons with each other (When polygons.add(polygon) has been called for overlapping polygons) + */ + [[nodiscard]] Shape unionPolygons() const; + + [[nodiscard]] Shape intersection(const Shape& other) const; + + /*! + * @brief Overridden definition of LinesSet::offset() + * @note The behavior of this method is exactly the same, but it just exists because it allows + * for a performance optimization + */ + [[nodiscard]] Shape offset(coord_t distance, ClipperLib::JoinType join_type = ClipperLib::jtMiter, double miter_limit = 1.2) const; + + /*! + * Intersect polylines with the area covered by the shape. + * + * \note Due to a clipper bug with polylines with nearly collinear segments, the polylines are cut up into separate polylines, and restitched back together at the end. + * + * \param polylines The polylines to limit to the area of this Polygons object + * \param restitch Whether to stitch the resulting segments into longer polylines, or leave every segment as a single segment + * \param max_stitch_distance The maximum distance for two polylines to be stitched together with a segment + * \return The resulting polylines limited to the area of this Polygons object + * \todo This should technically return a MixedLinesSet, because it can definitely contain open and closed polylines, but that is a heavy change + */ + template + OpenLinesSet intersection(const LinesSet& polylines, bool restitch = true, const coord_t max_stitch_distance = 10_mu) const; + + [[nodiscard]] Shape xorPolygons(const Shape& other, ClipperLib::PolyFillType pft = ClipperLib::pftEvenOdd) const; + + [[nodiscard]] Shape execute(ClipperLib::PolyFillType pft = ClipperLib::pftEvenOdd) const; + + /*! + * Check if we are inside the polygon. + * + * We do this by counting the number of polygons inside which this point lies. + * An odd number is inside, while an even number is outside. + * + * Returns false if outside, true if inside; if the point lies exactly on the border, will return \p border_result. + * + * \param p The point for which to check if it is inside this polygon + * \param border_result What to return when the point is exactly on the border + * \return Whether the point \p p is inside this polygon (or \p border_result when it is on the border) + */ + [[nodiscard]] bool inside(const Point2LL& p, bool border_result = false) const; + + /*! + * Find the polygon inside which point \p p resides. + * + * We do this by tracing from the point towards the positive X direction, + * every line we cross increments the crossings counter. If we have an even number of crossings then we are not inside the polygon. + * We then find the polygon with an uneven number of crossings which is closest to \p p. + * + * If \p border_result, we return the first polygon which is exactly on \p p. + * + * \param p The point for which to check in which polygon it is. + * \param border_result Whether a point exactly on a polygon counts as inside + * \return The index of the polygon inside which the point \p p resides + */ + [[nodiscard]] size_t findInside(const Point2LL& p, bool border_result = false) const; + + /*! + * \brief Approximates the convex hull of the polygons. + * \p extra_outset Extra offset outward + * \return the convex hull (approximately) + * + */ + [[nodiscard]] Shape approxConvexHull(int extra_outset = 0) const; + + /*! \brief Make each of the polygons convex */ + void makeConvex(); + + /*! + * Compute the area enclosed within the polygons (minus holes) + * + * \return The area in square micron + */ + [[nodiscard]] double area() const; + + /*! + * Smooth out small perpendicular segments + * Smoothing is performed by removing the inner most vertex of a line segment smaller than \p remove_length + * which has an angle with the next and previous line segment smaller than roughly 150* + * + * Note that in its current implementation this function doesn't remove line segments with an angle smaller than 30* + * Such would be the case for an N shape. + * + * \param remove_length The length of the largest segment removed + * \return The smoothed polygon + */ + [[nodiscard]] Shape smooth(int remove_length) const; + + /*! + * Smooth out sharp inner corners, by taking a shortcut which bypasses the corner + * + * \param angle The maximum angle of inner corners to be smoothed out + * \param shortcut_length The desired length of the shortcut line segment introduced (shorter shortcuts may be unavoidable) + * \return The resulting polygons + */ + [[nodiscard]] Shape smoothOutward(const AngleDegrees angle, int shortcut_length) const; + + [[nodiscard]] Shape smooth2(int remove_length, int min_area) const; //!< removes points connected to small lines + + void removeColinearEdges(const AngleRadians max_deviation_angle = AngleRadians(0.0005)); + + /*! + * Remove all but the polygons on the very outside. + * Exclude holes and parts within holes. + * \return the resulting polygons. + */ + [[nodiscard]] Shape getOutsidePolygons() const; + + /*! + * Split up the polygons into groups according to the even-odd rule. + * Each SingleShape in the result has an outline as first polygon, whereas the rest are holes. + */ + [[nodiscard]] std::vector splitIntoParts(bool union_all = false) const; + + /*! + * Sort the polygons into bins where each bin has polygons which are contained within one of the polygons in the previous bin. + * + * \warning When polygons are crossing each other the result is undefined. + */ + [[nodiscard]] std::vector sortByNesting() const; + + /*! + * Split up the polygons into groups according to the even-odd rule. + * Each vector in the result has the index to an outline as first index, whereas the rest are indices to holes. + * + * \warning Note that this function reorders the polygons! + */ + PartsView splitIntoPartsView(bool union_all = false); + + /*! + * Removes polygons with area smaller than \p min_area_size (note that min_area_size is in mm^2, not in micron^2). + * Unless \p remove_holes is true, holes are not removed even if their area is below \p min_area_size. + * However, holes that are contained within outlines whose area is below the threshold are removed though. + */ + void removeSmallAreas(const double min_area_size, const bool remove_holes = false); + + /*! + * Removes the same polygons from this set (and also empty polygons). + * Shape are considered the same if all points lie within [same_distance] of their counterparts. + */ + [[nodiscard]] Shape removePolygon(const Shape& to_be_removed, int same_distance = 0) const; + + [[nodiscard]] Shape processEvenOdd(ClipperLib::PolyFillType poly_fill_type = ClipperLib::PolyFillType::pftEvenOdd) const; + + /*! + * Ensure the polygon is manifold, by removing small areas where the polygon touches itself. + * ____ ____ + * | | | | + * | |____ ==> | / ____ + * """"| | """ / | + * |____| |____| + * + */ + void ensureManifold(); + + void applyMatrix(const PointMatrix& matrix); + + void applyMatrix(const Point3Matrix& matrix); + + [[nodiscard]] Shape offsetMulti(const std::vector& offset_dists) const; + + /*! + * @brief Remove self-intersections from the polygons + * _note_: this function uses wagyu to remove the self intersections. + * since wagyu uses a different internal representation of the polygons + * we need to convert back and forward between data structures which + * might impact performance, use wisely! + * + * @return Polygons - the cleaned polygons + */ + [[nodiscard]] Shape removeNearSelfIntersections() const; + + /*! + * \brief Simplify the polygon lines using ClipperLib::SimplifyPolygons + */ + void simplify(ClipperLib::PolyFillType fill_type = ClipperLib::pftEvenOdd); + +#ifdef BUILD_TESTS + /*! + * @brief Import the polygon from a WKT string + * @param wkt The WKT string to read from + * @return Polygons The polygons read from the stream + */ + [[maybe_unused]] static Shape fromWkt(const std::string& wkt); + + /*! + * @brief Export the polygon to a WKT string + * @param stream The stream to write to + */ + [[maybe_unused]] void writeWkt(std::ostream& stream) const; +#endif + +private: + /*! + * recursive part of \ref Polygons::removeEmptyHoles and \ref Polygons::getEmptyHoles + * \param node The node of the polygons part to process + * \param remove_holes Whether to remove empty holes or everything but the empty holes + * \param ret Where to store polygons which are not empty holes + */ + void removeEmptyHolesProcessPolyTreeNode(const ClipperLib::PolyNode& node, const bool remove_holes, Shape& ret) const; + void splitIntoPartsProcessPolyTreeNode(ClipperLib::PolyNode* node, std::vector& ret) const; + void sortByNestingProcessPolyTreeNode(ClipperLib::PolyNode* node, const size_t nesting_idx, std::vector& ret) const; + void splitIntoPartsViewProcessPolyTreeNode(PartsView& parts_view, Shape& reordered, ClipperLib::PolyNode* node) const; +}; + +} // namespace cura + +#endif // GEOMETRY_SHAPE_H diff --git a/include/geometry/SingleShape.h b/include/geometry/SingleShape.h new file mode 100644 index 0000000000..a962672a04 --- /dev/null +++ b/include/geometry/SingleShape.h @@ -0,0 +1,44 @@ +// Copyright (c) 2024 UltiMaker +// CuraEngine is released under the terms of the AGPLv3 or higher + +#ifndef GEOMETRY_SINGLE_SHAPE_H +#define GEOMETRY_SINGLE_SHAPE_H + +#include "geometry/Shape.h" + +namespace cura +{ + +class Polygon; + +/*! + * @brief A single area with holes. The first polygon is the outline, while the rest are holes within this outline. + * @sa https://github.com/Ultimaker/CuraEngine/wiki/Geometric-Base-Types#singleshape + * + * This class has little more functionality than Shape, but serves to show that a specific instance + * is ordered such that the first Polygon is the outline and the rest are holes. + */ +class SingleShape : public Shape +{ +public: + SingleShape() = default; + + explicit SingleShape(Shape&& shape) + : Shape{ std::move(shape) } {}; + + Polygon& outerPolygon(); + + [[nodiscard]] const Polygon& outerPolygon() const; + + /*! + * Tests whether the given point is inside this polygon part. + * \param p The point to test whether it is insisinglehde. + * \param border_result If the point is exactly on the border, this will be + * returned instead. + */ + [[nodiscard]] bool inside(const Point2LL& p, bool border_result = false) const; +}; + +} // namespace cura + +#endif // GEOMETRY_SINGLE_SHAPE_H diff --git a/include/infill.h b/include/infill.h index 3f0cc19943..89b9bba689 100644 --- a/include/infill.h +++ b/include/infill.h @@ -8,6 +8,9 @@ #include +#include "geometry/LinesSet.h" +#include "geometry/OpenLinesSet.h" +#include "geometry/Point2LL.h" #include "infill/LightningGenerator.h" #include "infill/ZigzagConnectorProcessor.h" #include "settings/EnumSettings.h" //For infill types. @@ -15,7 +18,6 @@ #include "settings/types/Angle.h" #include "utils/AABB.h" #include "utils/ExtrusionLine.h" -#include "utils/Point2LL.h" #include "utils/section_type.h" namespace cura @@ -35,11 +37,11 @@ class Infill // We skip ZigZag, Cross and Cross3D because they have their own algorithms. Eventually we want to replace all that with the new algorithm. // Cubic Subdivision ends lines in the center of the infill so it won't be effective. bool connect_polygons_{}; //!< Whether to connect as much polygons together into a single path - Polygons outer_contour_{}; //!< The area that originally needs to be filled with infill. The input of the algorithm. - Polygons inner_contour_{}; //!< The part of the contour that will get filled with an infill pattern. Equals outer_contour minus the extra infill walls. + Shape outer_contour_{}; //!< The area that originally needs to be filled with infill. The input of the algorithm. + Shape inner_contour_{}; //!< The part of the contour that will get filled with an infill pattern. Equals outer_contour minus the extra infill walls. coord_t infill_line_width_{}; //!< The line width of the infill lines to generate coord_t line_distance_{}; //!< The distance between two infill lines / polygons - coord_t infill_overlap_{}; //!< the distance by which to overlap with the actual area within which to generate infill + coord_t infill_overlap_{}; //!< The distance by which to overlap the inner infill pattern with the infill walls size_t infill_multiplier_{}; //!< the number of infill lines next to each other AngleDegrees fill_angle_{}; //!< for linear infill types: the angle of the infill lines (or the angle of the grid) coord_t z_{}; //!< height of the layer for which we generate infill @@ -74,7 +76,7 @@ class Infill EFillMethod pattern, bool zig_zaggify, bool connect_polygons, - Polygons in_outline, + Shape in_outline, coord_t infill_line_width, coord_t line_distance, coord_t infill_overlap, @@ -104,7 +106,7 @@ class Infill EFillMethod pattern, bool zig_zaggify, bool connect_polygons, - Polygons in_outline, + Shape in_outline, coord_t infill_line_width, coord_t line_distance, coord_t infill_overlap, @@ -142,7 +144,7 @@ class Infill EFillMethod pattern, bool zig_zaggify, bool connect_polygons, - Polygons in_outline, + Shape in_outline, coord_t infill_line_width, coord_t line_distance, coord_t infill_overlap, @@ -202,34 +204,32 @@ class Infill */ void generate( std::vector& toolpaths, - Polygons& result_polygons, - Polygons& result_lines, + Shape& result_polygons, + OpenLinesSet& result_lines, const Settings& settings, int layer_idx, SectionType section_type, const std::shared_ptr& cross_fill_provider = nullptr, const std::shared_ptr& lightning_layer = nullptr, const SliceMeshStorage* mesh = nullptr, - const Polygons& prevent_small_exposed_to_air = Polygons()); + const Shape& prevent_small_exposed_to_air = Shape()); /*! * Generate the wall toolpaths of an infill area. It will return the inner contour and set the inner-contour. * This function is called within the generate() function but can also be called stand-alone * * \param toolpaths [out] The generated toolpaths. Binned by inset_idx. - * \param outer_contour [in,out] the outer contour, this is offsetted with the infill overlap + * \param outer_contour [in] the outer contour * \param wall_line_count [in] The number of walls that needs to be generated * \param line_width [in] The optimum wall line width of the walls - * \param infill_overlap [in] The overlap of the infill * \param settings [in] A settings storage to use for generating variable-width walls. * \return The inner contour of the wall toolpaths */ - static Polygons generateWallToolPaths( + static Shape generateWallToolPaths( std::vector& toolpaths, - Polygons& outer_contour, + const Shape& outer_contour, const size_t wall_line_count, const coord_t line_width, - const coord_t infill_overlap, const Settings& settings, int layer_idx, SectionType section_type); @@ -358,7 +358,7 @@ class Infill * * \param include_start Wether to include the start point or not, useful when tracing a poly-line. */ - void appendTo(PolygonRef& result_polyline, const bool include_start = true); + void appendTo(OpenPolyline& result_polyline, const bool include_start = true); }; /*! @@ -373,8 +373,8 @@ class Infill */ void _generate( std::vector& toolpaths, - Polygons& result_polygons, - Polygons& result_lines, + Shape& result_polygons, + OpenLinesSet& result_lines, const Settings& settings, const std::shared_ptr& cross_fill_pattern = nullptr, const std::shared_ptr& lightning_layer = nullptr, @@ -391,21 +391,21 @@ class Infill * \param[in,out] result_polygons The polygons to be multiplied (input and output) * \param[in,out] result_lines The lines to be multiplied (input and output) */ - void multiplyInfill(Polygons& result_polygons, Polygons& result_lines); + void multiplyInfill(Shape& result_polygons, OpenLinesSet& result_lines); /*! * Generate gyroid infill * \param result_polylines (output) The resulting polylines * \param result_polygons (output) The resulting polygons, if zigzagging accidentally happened to connect gyroid lines in a circle. */ - void generateGyroidInfill(Polygons& result_polylines, Polygons& result_polygons); + void generateGyroidInfill(OpenLinesSet& result_polylines, Shape& result_polygons); /*! * Generate lightning fill aka minfill aka 'Ribbed Support Vault Infill', see Tricard,Claux,Lefebvre/'Ribbed Support Vaults for 3D Printing of Hollowed Objects' * see https://hal.archives-ouvertes.fr/hal-02155929/document * \param result (output) The resulting polygons */ - void generateLightningInfill(const std::shared_ptr& lightning_layer, Polygons& result_lines); + void generateLightningInfill(const std::shared_ptr& lightning_layer, OpenLinesSet& result_lines); /*! * Generate sparse concentric infill @@ -419,25 +419,25 @@ class Infill * Generate a rectangular grid of infill lines * \param[out] result (output) The resulting lines */ - void generateGridInfill(Polygons& result); + void generateGridInfill(OpenLinesSet& result); /*! * Generate a shifting triangular grid of infill lines, which combine with consecutive layers into a cubic pattern * \param[out] result (output) The resulting lines */ - void generateCubicInfill(Polygons& result); + void generateCubicInfill(OpenLinesSet& result); /*! * Generate a double shifting square grid of infill lines, which combine with consecutive layers into a tetrahedral pattern * \param[out] result (output) The resulting lines */ - void generateTetrahedralInfill(Polygons& result); + void generateTetrahedralInfill(OpenLinesSet& result); /*! * Generate a double shifting square grid of infill lines, which combine with consecutive layers into a quarter cubic pattern * \param[out] result (output) The resulting lines */ - void generateQuarterCubicInfill(Polygons& result); + void generateQuarterCubicInfill(OpenLinesSet& result); /*! * Generate a single shifting square grid of infill lines. @@ -447,26 +447,26 @@ class Infill * \param angle_shift The angle to add to the infill_angle * \param[out] result (output) The resulting lines */ - void generateHalfTetrahedralInfill(double pattern_z_shift, int angle_shift, Polygons& result); + void generateHalfTetrahedralInfill(double pattern_z_shift, int angle_shift, OpenLinesSet& result); /*! * Generate a triangular grid of infill lines * \param[out] result (output) The resulting lines */ - void generateTriangleInfill(Polygons& result); + void generateTriangleInfill(OpenLinesSet& result); /*! * Generate a triangular grid of infill lines * \param[out] result (output) The resulting lines */ - void generateTrihexagonInfill(Polygons& result); + void generateTrihexagonInfill(OpenLinesSet& result); /*! * Generate a 3d pattern of subdivided cubes on their points * \param[out] result The resulting lines * \param[in] mesh Where the Cubic Subdivision Infill precomputation is stored */ - void generateCubicSubDivInfill(Polygons& result, const SliceMeshStorage& mesh); + void generateCubicSubDivInfill(OpenLinesSet& result, const SliceMeshStorage& mesh); /*! * Generate a 3d pattern of subdivided cubes on their points @@ -474,7 +474,7 @@ class Infill * \param[out] result_polygons The resulting polygons * \param[out] result_lines The resulting lines */ - void generateCrossInfill(const SierpinskiFillProvider& cross_fill_provider, Polygons& result_polygons, Polygons& result_lines); + void generateCrossInfill(const SierpinskiFillProvider& cross_fill_provider, Shape& result_polygons, OpenLinesSet& result_lines); /*! * Convert a mapping from scanline to line_segment-scanline-intersections (\p cut_list) into line segments, using the even-odd rule @@ -487,7 +487,7 @@ class Infill * \param total_shift total shift of the scanlines in the direction perpendicular to the fill_angle. */ void addLineInfill( - Polygons& result, + OpenLinesSet& result, const PointMatrix& rotation_matrix, const int scanline_min_idx, const int line_distance, @@ -506,7 +506,7 @@ class Infill * \param infill_rotation The angle of the generated lines * \param extra_shift extra shift of the scanlines in the direction perpendicular to the infill_rotation */ - void generateLineInfill(Polygons& result, int line_distance, const double& infill_rotation, coord_t extra_shift); + void generateLineInfill(OpenLinesSet& result, int line_distance, const double& infill_rotation, coord_t extra_shift); /*! * Function for creating linear based infill types (Lines, ZigZag). @@ -524,7 +524,7 @@ class Infill * \param extra_shift extra shift of the scanlines in the direction perpendicular to the fill_angle */ void generateLinearBasedInfill( - Polygons& result, + OpenLinesSet& result, const int line_distance, const PointMatrix& rotation_matrix, ZigzagConnectorProcessor& zigzag_connector_processor, @@ -578,7 +578,7 @@ class Infill * \param line_distance The distance between two lines which are in the same direction * \param infill_rotation The angle of the generated lines */ - void generateZigZagInfill(Polygons& result, const coord_t line_distance, const double& infill_rotation); + void generateZigZagInfill(OpenLinesSet& result, const coord_t line_distance, const double& infill_rotation); /*! * determine how far the infill pattern should be shifted based on the values of infill_origin and \p infill_rotation @@ -620,7 +620,7 @@ class Infill * border of the infill area, similar to the zigzag pattern. * \param[in/out] result_lines The lines to connect together. */ - void connectLines(Polygons& result_lines); + void connectLines(OpenLinesSet& result_lines); }; static_assert(concepts::semiregular, "Infill should be semiregular"); diff --git a/include/infill/GyroidInfill.h b/include/infill/GyroidInfill.h index 697ee26bc1..00c2e3b273 100644 --- a/include/infill/GyroidInfill.h +++ b/include/infill/GyroidInfill.h @@ -1,12 +1,13 @@ -//Copyright (c) 2020 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2024 UltiMaker +// CuraEngine is released under the terms of the AGPLv3 or higher. -#include "../utils/Coord_t.h" +#include "geometry/LinesSet.h" +#include "geometry/OpenLinesSet.h" +#include "utils/Coord_t.h" namespace cura { - -class Polygons; +class Shape; class GyroidInfill { @@ -33,11 +34,8 @@ class GyroidInfill * \param z The Z coordinate of this layer. Different Z coordinates cause the pattern to vary, producing a 3D * pattern. */ - static void generateTotalGyroidInfill(Polygons& result_lines, bool zig_zaggify, coord_t line_distance, const Polygons& in_outline, coord_t z); - -private: + static void generateTotalGyroidInfill(OpenLinesSet& result_lines, bool zig_zaggify, coord_t line_distance, const Shape& in_outline, coord_t z); +private: }; - } // namespace cura - diff --git a/include/infill/LightningDistanceField.h b/include/infill/LightningDistanceField.h index 3624fd72c7..1968e40e8a 100644 --- a/include/infill/LightningDistanceField.h +++ b/include/infill/LightningDistanceField.h @@ -5,7 +5,7 @@ #define LIGHTNING_DISTANCE_FIELD_H #include "../utils/SquareGrid.h" //Tracking for each location the distance to overhang. -#include "../utils/polygon.h" //Using outlines to fill and tracking overhang. +#include "geometry/Polygon.h" //Using outlines to fill and tracking overhang. namespace cura { @@ -29,7 +29,7 @@ class LightningDistanceField * \param current_overhang The overhang that needs to be supported on this * layer. */ - LightningDistanceField(const coord_t& radius, const Polygons& current_outline, const Polygons& current_overhang); + LightningDistanceField(const coord_t& radius, const Shape& current_outline, const Shape& current_overhang); /*! * Gets the next unsupported location to be supported by a new branch. @@ -76,13 +76,13 @@ class LightningDistanceField /*! * The total infill area on the current layer. */ - const Polygons& current_outline_; + const Shape& current_outline_; /*! * The overhang that gets introduced on this layer, which the infill will * need to support. */ - const Polygons& current_overhang_; + const Shape& current_overhang_; /*! * Represents a small discrete area of infill that needs to be supported. diff --git a/include/infill/LightningGenerator.h b/include/infill/LightningGenerator.h index 30a36e5b02..0d6ff88552 100644 --- a/include/infill/LightningGenerator.h +++ b/include/infill/LightningGenerator.h @@ -1,18 +1,17 @@ -//Copyright (c) 2021 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2021 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef LIGHTNING_GENERATOR_H #define LIGHTNING_GENERATOR_H -#include "LightningLayer.h" - -#include "../utils/polygonUtils.h" - #include #include #include -namespace cura +#include "../utils/polygonUtils.h" +#include "LightningLayer.h" + +namespace cura { class SliceMeshStorage; @@ -33,7 +32,7 @@ class SliceMeshStorage; * Printing of Hollowed Objects" by Tricard, Claux and Lefebvre: * https://www.researchgate.net/publication/333808588_Ribbed_Support_Vaults_for_3D_Printing_of_Hollowed_Objects */ -class LightningGenerator // "Just like Nicola used to make!" +class LightningGenerator // "Just like Nicola used to make!" { public: /*! @@ -111,7 +110,7 @@ class LightningGenerator // "Just like Nicola used to make!" * * This is generated by \ref generateInitialInternalOverhangs. */ - std::vector overhang_per_layer; + std::vector overhang_per_layer; /*! * For each layer, the generated lightning paths. diff --git a/include/infill/LightningLayer.h b/include/infill/LightningLayer.h index fe5a079e43..d62b5267a4 100644 --- a/include/infill/LightningLayer.h +++ b/include/infill/LightningLayer.h @@ -1,4 +1,4 @@ -// Copyright (c) 2023 UltiMaker +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher #ifndef LIGHTNING_LAYER_H @@ -9,9 +9,11 @@ #include #include -#include "../utils/SquareGrid.h" -#include "../utils/polygonUtils.h" +#include "geometry/LinesSet.h" +#include "geometry/OpenLinesSet.h" #include "infill/LightningTreeNode.h" +#include "utils/SquareGrid.h" +#include "utils/polygonUtils.h" namespace cura { @@ -21,7 +23,7 @@ using SparseLightningTreeNodeGrid = SparsePointGridInclusive boundary_location; //!< in case the gounding location is on the boundary + std::optional boundary_location; //!< in case the gounding location is on the boundary Point2LL p() const; }; @@ -36,8 +38,8 @@ class LightningLayer std::vector tree_roots; void generateNewTrees( - const Polygons& current_overhang, - const Polygons& current_outlines, + const Shape& current_overhang, + const Shape& current_outlines, const LocToLineGrid& outline_locator, const coord_t supporting_radius, const coord_t wall_supporting_radius); @@ -47,7 +49,7 @@ class LightningLayer */ GroundingLocation getBestGroundingLocation( const Point2LL& unsupported_location, - const Polygons& current_outlines, + const Shape& current_outlines, const LocToLineGrid& outline_locator, const coord_t supporting_radius, const coord_t wall_supporting_radius, @@ -63,18 +65,17 @@ class LightningLayer void reconnectRoots( std::vector& to_be_reconnected_tree_roots, - const Polygons& current_outlines, + const Shape& current_outlines, const LocToLineGrid& outline_locator, const coord_t supporting_radius, const coord_t wall_supporting_radius); - Polygons convertToLines(const Polygons& limit_to_outline, const coord_t line_width) const; + OpenLinesSet convertToLines(const Shape& limit_to_outline, const coord_t line_width) const; coord_t getWeightedDistance(const Point2LL& boundary_loc, const Point2LL& unsupported_location); void fillLocator(SparseLightningTreeNodeGrid& tree_node_locator); }; - } // namespace cura #endif // LIGHTNING_LAYER_H diff --git a/include/infill/LightningTreeNode.h b/include/infill/LightningTreeNode.h index 0ebd5503a8..fa73e10fb9 100644 --- a/include/infill/LightningTreeNode.h +++ b/include/infill/LightningTreeNode.h @@ -9,8 +9,11 @@ #include #include -#include "../utils/polygon.h" -#include "../utils/polygonUtils.h" +#include "geometry/LinesSet.h" +#include "geometry/OpenLinesSet.h" +#include "geometry/Polygon.h" +#include "geometry/Shape.h" +#include "utils/polygonUtils.h" namespace cura { @@ -98,7 +101,7 @@ class LightningTreeNode : public std::enable_shared_from_this */ void propagateToNextLayer( std::vector& next_trees, - const Polygons& next_outlines, + const Shape& next_outlines, const LocToLineGrid& outline_locator, const coord_t prune_distance, const coord_t smooth_magnitude, @@ -200,7 +203,7 @@ class LightningTreeNode : public std::enable_shared_from_this /*! Reconnect trees from the layer above to the new outlines of the lower layer. * \return Wether or not the root is kept (false is no, true is yes). */ - bool realign(const Polygons& outlines, const LocToLineGrid& outline_locator, std::vector& rerooted_parts); + bool realign(const Shape& outlines, const LocToLineGrid& outline_locator, std::vector& rerooted_parts); struct RectilinearJunction { @@ -239,7 +242,7 @@ class LightningTreeNode : public std::enable_shared_from_this * * \param output all branches in this tree connected into polylines */ - void convertToPolylines(Polygons& output, const coord_t line_width) const; + void convertToPolylines(OpenLinesSet& output, const coord_t line_width) const; /*! If this was ever a direct child of the root, it'll have a previous grounding location. * @@ -258,9 +261,9 @@ class LightningTreeNode : public std::enable_shared_from_this * \param long_line a reference to a polyline in \p output which to continue building on in the recursion * \param output all branches in this tree connected into polylines */ - void convertToPolylines(size_t long_line_idx, Polygons& output) const; + void convertToPolylines(size_t long_line_idx, OpenLinesSet& output) const; - void removeJunctionOverlap(Polygons& polylines, const coord_t line_width) const; + void removeJunctionOverlap(OpenLinesSet& polylines, const coord_t line_width) const; bool is_root_; Point2LL p_; diff --git a/include/infill/NoZigZagConnectorProcessor.h b/include/infill/NoZigZagConnectorProcessor.h index 002fb0fb7b..c456297223 100644 --- a/include/infill/NoZigZagConnectorProcessor.h +++ b/include/infill/NoZigZagConnectorProcessor.h @@ -5,11 +5,15 @@ #define INFILL_NO_ZIGZAG_CONNECTOR_PROCESSOR_H #include "ZigzagConnectorProcessor.h" +#include "geometry/OpenLinesSet.h" namespace cura { -class Polygons; +class OpenPolyline; + +template +class LinesSet; /*! * This processor adds no connection. This is for line infill pattern. @@ -17,7 +21,7 @@ class Polygons; class NoZigZagConnectorProcessor : public ZigzagConnectorProcessor { public: - NoZigZagConnectorProcessor(const PointMatrix& rotation_matrix, Polygons& result) + NoZigZagConnectorProcessor(const PointMatrix& rotation_matrix, OpenLinesSet& result) : ZigzagConnectorProcessor( rotation_matrix, result, @@ -29,7 +33,7 @@ class NoZigZagConnectorProcessor : public ZigzagConnectorProcessor } void registerVertex(const Point2LL& vertex); - void registerScanlineSegmentIntersection(const Point2LL& intersection, int scanline_index); + void registerScanlineSegmentIntersection(const Point2LL& intersection, int scanline_index, coord_t min_distance_to_scanline); void registerPolyFinished(); }; diff --git a/include/infill/SubDivCube.h b/include/infill/SubDivCube.h index bfb10f487a..e16b4a2149 100644 --- a/include/infill/SubDivCube.h +++ b/include/infill/SubDivCube.h @@ -4,15 +4,18 @@ #ifndef INFILL_SUBDIVCUBE_H #define INFILL_SUBDIVCUBE_H +#include "geometry/OpenLinesSet.h" +#include "geometry/Point2LL.h" +#include "geometry/Point3LL.h" +#include "geometry/Point3Matrix.h" +#include "geometry/PointMatrix.h" #include "settings/types/LayerIndex.h" #include "settings/types/Ratio.h" -#include "utils/Point2LL.h" -#include "utils/Point3LL.h" namespace cura { -class Polygons; +class Polygon; class SliceMeshStorage; class SubDivCube @@ -37,7 +40,7 @@ class SubDivCube * \param z the specified layer height * \param result (output) The resulting lines */ - void generateSubdivisionLines(const coord_t z, Polygons& result); + void generateSubdivisionLines(const coord_t z, OpenLinesSet& result); private: /*! @@ -46,7 +49,7 @@ class SubDivCube * \param result (output) The resulting lines * \param directional_line_groups Array of 3 times a polylines. Used to keep track of line segments that are all pointing the same direction for line segment combining */ - void generateSubdivisionLines(const coord_t z, Polygons (&directional_line_groups)[3]); + void generateSubdivisionLines(const coord_t z, OpenLinesSet (&directional_line_groups)[3]); struct CubeProperties { @@ -92,7 +95,7 @@ class SubDivCube * Adds the defined line to the specified polygons. It assumes that the specified polygons are all parallel lines. Combines line segments with touching ends closer than * epsilon. \param[out] group the polygons to add the line to \param from the first endpoint of the line \param to the second endpoint of the line */ - void addLineAndCombine(Polygons& group, Point2LL from, Point2LL to); + void addLineAndCombine(OpenLinesSet& group, Point2LL from, Point2LL to); size_t depth_; //!< the recursion depth of the cube (0 is most recursed) Point3LL center_; //!< center location of the cube in absolute coordinates diff --git a/include/infill/ZigzagConnectorProcessor.h b/include/infill/ZigzagConnectorProcessor.h index 513ad9d8f1..a7ff59cfc1 100644 --- a/include/infill/ZigzagConnectorProcessor.h +++ b/include/infill/ZigzagConnectorProcessor.h @@ -4,11 +4,18 @@ #ifndef INFILL_ZIGZAG_CONNECTOR_PROCESSOR_H #define INFILL_ZIGZAG_CONNECTOR_PROCESSOR_H -#include "../utils/polygon.h" //TODO: We have implementation in this header file! +#include + +#include "geometry/OpenLinesSet.h" +#include "geometry/Point2LL.h" namespace cura { +class Polygon; +class Shape; +class PointMatrix; + /*! * Processor class for processing the connections between lines which makes the infill a zigzag pattern. * @@ -108,7 +115,7 @@ class ZigzagConnectorProcessor * \param skip_some_zags Whether to skip some zags * \param zag_skip_count Skip 1 zag in every N zags */ - ZigzagConnectorProcessor(const PointMatrix& rotation_matrix, Polygons& result, bool use_endpieces, bool connected_endpieces, bool skip_some_zags, int zag_skip_count) + ZigzagConnectorProcessor(const PointMatrix& rotation_matrix, OpenLinesSet& result, bool use_endpieces, bool connected_endpieces, bool skip_some_zags, int zag_skip_count) : rotation_matrix_(rotation_matrix) , result_(result) , use_endpieces_(use_endpieces) @@ -137,7 +144,7 @@ class ZigzagConnectorProcessor * \param intersection The intersection * \param scanline_index Index of the current scanline */ - virtual void registerScanlineSegmentIntersection(const Point2LL& intersection, int scanline_index); + virtual void registerScanlineSegmentIntersection(const Point2LL& intersection, int scanline_index, coord_t min_distance_to_scanline); /*! * Handle the end of a polygon and prepare for the next. @@ -156,7 +163,7 @@ class ZigzagConnectorProcessor * * \param polyline The polyline to add */ - void addPolyline(PolygonRef polyline); + void addPolyline(const OpenPolyline& polyline); /*! * Checks whether the current connector should be added or not. @@ -166,17 +173,6 @@ class ZigzagConnectorProcessor */ bool shouldAddCurrentConnector(int start_scanline_idx, int end_scanline_idx) const; - /*! - * Checks whether two points are separated at least by "threshold" microns. - * If they are far away from each other enough, the line represented by the two points - * will be added; In case they are close, the second point will be set to be the same - * as the first and this line won't be added. - * - * \param first_point The first of the points - * \param second_point The second of the points - */ - void checkAndAddZagConnectorLine(Point2LL* first_point, Point2LL* second_point); - /*! * Adds a Zag connector represented by the given points. The last line of the connector will not be * added if the given connector is an end piece and "connected_endpieces" is not enabled. @@ -186,9 +182,11 @@ class ZigzagConnectorProcessor */ void addZagConnector(std::vector& points, bool is_endpiece); + bool handleConnectorTooCloseToSegment(const coord_t scanline_x, const coord_t min_distance_to_scanline); + protected: const PointMatrix& rotation_matrix_; //!< The rotation matrix used to enforce the infill angle - Polygons& result_; //!< The result of the computation + OpenLinesSet& result_; //!< The result of the computation const bool use_endpieces_; //!< Whether to include end pieces or not const bool connected_endpieces_; //!< Whether the end pieces should be connected with the rest part of the infill @@ -212,29 +210,6 @@ class ZigzagConnectorProcessor std::vector current_connector_; }; -// -// Inline functions -// - -inline void ZigzagConnectorProcessor::reset() -{ - is_first_connector_ = true; - first_connector_end_scanline_index_ = 0; - last_connector_index_ = 0; - first_connector_.clear(); - current_connector_.clear(); -} - -inline void ZigzagConnectorProcessor::addPolyline(PolygonRef polyline) -{ - result_.emplace_back(polyline); - for (Point2LL& p : result_.back()) - { - p = rotation_matrix_.unapply(p); - } -} - - } // namespace cura diff --git a/include/pathPlanning/Comb.h b/include/pathPlanning/Comb.h index 289a5a1f5d..35bca5a480 100644 --- a/include/pathPlanning/Comb.h +++ b/include/pathPlanning/Comb.h @@ -7,9 +7,11 @@ #include // To find the maximum for coord_t. #include // shared_ptr -#include "../settings/types/LayerIndex.h" // To store the layer on which we comb. -#include "../utils/polygon.h" -#include "../utils/polygonUtils.h" +#include "geometry/PartsView.h" +#include "geometry/Polygon.h" +#include "geometry/SingleShape.h" +#include "settings/types/LayerIndex.h" // To store the layer on which we comb. +#include "utils/polygonUtils.h" namespace cura { @@ -36,7 +38,7 @@ class SliceDataStorage; * perpendicular to its boundary. * * As an optimization, the combing paths inside are calculated on specifically - * those PolygonsParts within which to comb, while the boundary_outside isn't + * those SingleShapes within which to comb, while the boundary_outside isn't * split into outside parts, because generally there is only one outside part; * encapsulated holes occur less often. */ @@ -56,9 +58,9 @@ class Comb bool dest_is_inside_; //!< Whether the startPoint or endPoint is inside the inside boundary Point2LL in_or_mid_; //!< The point on the inside boundary, or in between the inside and outside boundary if the start/end point isn't inside the inside boudary Point2LL out_; //!< The point on the outside boundary - PolygonsPart dest_part_; //!< The assembled inside-boundary PolygonsPart in which the dest_point lies. (will only be initialized when Crossing::dest_is_inside holds) - std::optional dest_crossing_poly_; //!< The polygon of the part in which dest_point lies, which will be crossed (often will be the outside polygon) - const Polygons& boundary_inside_; //!< The inside boundary as in \ref Comb::boundary_inside + SingleShape dest_part_; //!< The assembled inside-boundary SingleShape in which the dest_point lies. (will only be initialized when Crossing::dest_is_inside holds) + std::optional dest_crossing_poly_; //!< The polygon of the part in which dest_point lies, which will be crossed (often will be the outside polygon) + const Shape& boundary_inside_; //!< The inside boundary as in \ref Comb::boundary_inside const LocToLineGrid& inside_loc_to_line_; //!< The loc to line grid \ref Comb::inside_loc_to_line /*! @@ -75,7 +77,7 @@ class Comb const bool dest_is_inside, const unsigned int dest_part_idx, const unsigned int dest_part_boundary_crossing_poly_idx, - const Polygons& boundary_inside, + const Shape& boundary_inside, const LocToLineGrid& inside_loc_to_line); /*! @@ -98,7 +100,7 @@ class Comb * \param comber[in] The combing calculator which has references to the * offsets and boundaries to use in combing. */ - bool findOutside(const ExtruderTrain& train, const Polygons& outside, const Point2LL close_to, const bool fail_on_unavoidable_obstacles, Comb& comber); + bool findOutside(const ExtruderTrain& train, const Shape& outside, const Point2LL close_to, const bool fail_on_unavoidable_obstacles, Comb& comber); private: const Point2LL dest_point_; //!< Either the eventual startPoint or the eventual endPoint of this combing move @@ -116,8 +118,8 @@ class Comb * \param comber[in] The combing calculator which has references to the offsets and boundaries to use in combing. * \return A pair of which the first is the crossing point on the inside boundary and the second the crossing point on the outside boundary */ - std::shared_ptr> - findBestCrossing(const ExtruderTrain& train, const Polygons& outside, ConstPolygonRef from, const Point2LL estimated_start, const Point2LL estimated_end, Comb& comber); + std::shared_ptr> + findBestCrossing(const ExtruderTrain& train, const Shape& outside, const Polygon& from, const Point2LL estimated_start, const Point2LL estimated_end, Comb& comber); }; @@ -134,15 +136,15 @@ class Comb static constexpr coord_t offset_dist_to_get_from_on_the_polygon_to_outside_ = 40; //!< in order to prevent on-boundary vs crossing boundary confusions (precision thing) static constexpr coord_t offset_extra_start_end_ = 100; //!< Distance to move start point and end point toward eachother to extra avoid collision with the boundaries. - Polygons boundary_inside_minimum_; //!< The boundary within which to comb. (Will be reordered by the partsView_inside_minimum) - Polygons boundary_inside_optimal_; //!< The boundary within which to comb. (Will be reordered by the partsView_inside_optimal) + Shape boundary_inside_minimum_; //!< The boundary within which to comb. (Will be reordered by the partsView_inside_minimum) + Shape boundary_inside_optimal_; //!< The boundary within which to comb. (Will be reordered by the partsView_inside_optimal) const PartsView parts_view_inside_minimum_; //!< Structured indices onto boundary_inside_minimum which shows which polygons belong to which part. const PartsView parts_view_inside_optimal_; //!< Structured indices onto boundary_inside_optimal which shows which polygons belong to which part. std::unique_ptr inside_loc_to_line_minimum_; //!< The SparsePointGridInclusive mapping locations to line segments of the inner boundary. std::unique_ptr inside_loc_to_line_optimal_; //!< The SparsePointGridInclusive mapping locations to line segments of the inner boundary. - std::unordered_map boundary_outside_; //!< The boundary outside of which to stay to avoid collision with other layer parts. This is a pointer cause we only - //!< compute it when we move outside the boundary (so not when there is only a single part in the layer) - std::unordered_map model_boundary_; //!< The boundary of the model itself + std::unordered_map boundary_outside_; //!< The boundary outside of which to stay to avoid collision with other layer parts. This is a pointer cause we only + //!< compute it when we move outside the boundary (so not when there is only a single part in the layer) + std::unordered_map model_boundary_; //!< The boundary of the model itself std::unordered_map> outside_loc_to_line_; //!< The SparsePointGridInclusive mapping locations to line segments of the outside boundary. std::unordered_map> model_boundary_loc_to_line_; //!< The SparsePointGridInclusive mapping locations to line segments of the model boundary @@ -157,7 +159,7 @@ class Comb /*! * Get the boundary_outside, which is an offset from the outlines of all meshes in the layer. Calculate it when it hasn't been calculated yet. */ - Polygons& getBoundaryOutside(const ExtruderTrain& train); + Shape& getBoundaryOutside(const ExtruderTrain& train); /*! * Get the SparsePointGridInclusive mapping locations to line segments of the model boundary. Calculate it when it hasn't been calculated yet. @@ -167,7 +169,7 @@ class Comb /*! * Get the boundary_outside, which is an offset from the outlines of all meshes in the layer. Calculate it when it hasn't been calculated yet. */ - Polygons& getModelBoundary(const ExtruderTrain& train); + Shape& getModelBoundary(const ExtruderTrain& train); /*! * Move the startPoint or endPoint inside when it should be inside @@ -177,9 +179,9 @@ class Comb * \param start_inside_poly[out] The polygon in which the point has been moved * \return Whether we have moved the point inside */ - bool moveInside(Polygons& boundary_inside, bool is_inside, LocToLineGrid* inside_loc_to_line, Point2LL& dest_point, size_t& start_inside_poly); + bool moveInside(Shape& boundary_inside, bool is_inside, LocToLineGrid* inside_loc_to_line, Point2LL& dest_point, size_t& start_inside_poly); - void moveCombPathInside(Polygons& boundary_inside, Polygons& boundary_inside_optimal, CombPath& comb_path_input, CombPath& comb_path_output); + void moveCombPathInside(Shape& boundary_inside, Shape& boundary_inside_optimal, CombPath& comb_path_input, CombPath& comb_path_output); public: /*! @@ -206,8 +208,8 @@ class Comb Comb( const SliceDataStorage& storage, const LayerIndex layer_nr, - const Polygons& comb_boundary_inside_minimum, - const Polygons& comb_boundary_inside_optimal, + const Shape& comb_boundary_inside_minimum, + const Shape& comb_boundary_inside_optimal, coord_t offset_from_outlines, coord_t travel_avoid_distance, coord_t move_inside_distance); diff --git a/include/pathPlanning/CombPath.h b/include/pathPlanning/CombPath.h index 6559e8c7ee..0b904d2a5a 100644 --- a/include/pathPlanning/CombPath.h +++ b/include/pathPlanning/CombPath.h @@ -4,7 +4,7 @@ #ifndef PATH_PLANNING_COMB_PATH_H #define PATH_PLANNING_COMB_PATH_H -#include "../utils/Point2LL.h" +#include "geometry/Point2LL.h" namespace cura { diff --git a/include/pathPlanning/GCodePath.h b/include/pathPlanning/GCodePath.h index 8ac4286082..577cd8efcc 100644 --- a/include/pathPlanning/GCodePath.h +++ b/include/pathPlanning/GCodePath.h @@ -10,9 +10,9 @@ #include "GCodePathConfig.h" #include "SpaceFillType.h" #include "TimeMaterialEstimates.h" +#include "geometry/Point2LL.h" #include "settings/types/Ratio.h" #include "sliceDataStorage.h" -#include "utils/Point2LL.h" namespace cura { @@ -40,6 +40,7 @@ struct GCodePath Ratio speed_factor{ 1.0 }; //!< A speed factor that is multiplied with the travel speed. This factor can be used to change the travel speed. Ratio speed_back_pressure_factor{ 1.0 }; // crossings_; //!< All crossings of polygons in the LinePolygonsCrossings::boundary with the scanline. - const Polygons& boundary_; //!< The boundary not to cross during combing. + const Shape& boundary_; //!< The boundary not to cross during combing. LocToLineGrid& loc_to_line_grid_; //!< Mapping from locations to line segments of \ref LinePolygonsCrossings::boundary Point2LL start_point_; //!< The start point of the scanline. Point2LL end_point_; //!< The end point of the scanline. @@ -124,7 +125,7 @@ class LinePolygonsCrossings * \param end the end point * \param dist_to_move_boundary_point_outside Distance used to move a point from a boundary so that it doesn't intersect with it anymore. (Precision issue) */ - LinePolygonsCrossings(const Polygons& boundary, LocToLineGrid& loc_to_line_grid, Point2LL& start, Point2LL& end, int64_t dist_to_move_boundary_point_outside) + LinePolygonsCrossings(const Shape& boundary, LocToLineGrid& loc_to_line_grid, Point2LL& start, Point2LL& end, int64_t dist_to_move_boundary_point_outside) : boundary_(boundary) , loc_to_line_grid_(loc_to_line_grid) , start_point_(start) @@ -145,7 +146,7 @@ class LinePolygonsCrossings * \return Whether combing succeeded, i.e. we didn't cross any gaps/other parts */ static bool comb( - const Polygons& boundary, + const Shape& boundary, LocToLineGrid& loc_to_line_grid, Point2LL startPoint, Point2LL endPoint, diff --git a/include/PathOrdering.h b/include/path_ordering.h similarity index 90% rename from include/PathOrdering.h rename to include/path_ordering.h index 0ec185e700..0a7fb1af13 100644 --- a/include/PathOrdering.h +++ b/include/path_ordering.h @@ -50,7 +50,7 @@ struct PathOrdering * Vertex data, converted into a Polygon so that the orderer knows how * to deal with this data. */ - ConstPolygonPointer converted_; + const PointsSet* converted_{ nullptr }; /*! * Which vertex along the path to start printing with. @@ -76,6 +76,11 @@ struct PathOrdering */ bool backwards_; + /*! + * Force the start point of the path to be at a specific location. + * Will only happen if not empty, and this point is actually on the path. + */ + std::optional force_start_index_; /*! * Get vertex data from the custom path type. @@ -89,7 +94,7 @@ struct PathOrdering * for each different type that this class is used with. See the .cpp file * for examples and where to add a new specialization. */ - ConstPolygonRef getVertexData(); + const PointsSet& getVertexData(); protected: /*! @@ -100,7 +105,7 @@ struct PathOrdering * For example, if the ``PathType`` is a list of ``ExtrusionJunction``s, * this will store the coordinates of those junctions. */ - std::optional cached_vertices_; + std::optional cached_vertices_; }; } // namespace cura diff --git a/include/plugins/converters.h b/include/plugins/converters.h index 01870b2056..de947a850c 100644 --- a/include/plugins/converters.h +++ b/include/plugins/converters.h @@ -1,8 +1,17 @@ -// Copyright (c) 2023 UltiMaker +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher #ifndef PLUGINS_CONVERTERS_H #define PLUGINS_CONVERTERS_H +#ifdef ENABLE_PLUGINS + +#include +#include +#include + +#include +#include +#include #include "Cura.pb.h" #include "WallToolPaths.h" @@ -18,21 +27,15 @@ #include "cura/plugins/slots/postprocess/v0/modify.pb.h" #include "cura/plugins/slots/simplify/v0/modify.grpc.pb.h" #include "cura/plugins/slots/simplify/v0/modify.pb.h" +#include "geometry/LinesSet.h" +#include "geometry/OpenLinesSet.h" +#include "geometry/Polygon.h" #include "pathPlanning/GCodePath.h" #include "pathPlanning/SpeedDerivatives.h" #include "plugins/metadata.h" #include "plugins/types.h" #include "settings/Settings.h" #include "settings/types/LayerIndex.h" -#include "utils/polygon.h" - -#include -#include -#include - -#include -#include -#include namespace cura::plugins @@ -80,12 +83,12 @@ struct handshake_response : public details::converter +struct simplify_request : public details::converter { value_type operator()(const native_value_type& polygons, const coord_t max_resolution, const coord_t max_deviation, const coord_t max_area_deviation) const; }; -struct simplify_response : public details::converter +struct simplify_response : public details::converter { native_value_type operator()([[maybe_unused]] const native_value_type& original_value, const value_type& message) const; }; @@ -100,13 +103,13 @@ struct postprocess_response : public details::converter +struct infill_generate_request : public details::converter { value_type operator()(const native_value_type& inner_contour, const std::string& pattern, const Settings& settings) const; }; struct infill_generate_response - : public details::converter>, Polygons, Polygons>> + : public details::converter>, Shape, OpenLinesSet>> { native_value_type operator()(const value_type& message) const; }; @@ -128,5 +131,5 @@ struct gcode_paths_modify_response : public details::converter - #include #include #include #include #include +#include + +#include "plugins/pluginproxy.h" +#include "plugins/types.h" +#include "plugins/validator.h" +#include "utils/types/char_range_literal.h" + namespace cura::plugins { @@ -41,7 +40,7 @@ class SlotProxy { Default default_process{}; using value_type = PluginProxy; - std::optional plugin_{ std::nullopt }; + std::vector plugins_; public: static constexpr plugins::v0::SlotID slot_id{ SlotID }; @@ -54,14 +53,15 @@ class SlotProxy SlotProxy() noexcept = default; /** - * @brief Constructs a SlotProxy object with a plugin. - * - * Constructs a SlotProxy object and initializes the plugin using the provided gRPC channel. - * + * @brief Adds a plugin to this proxy. + * @param name The fully-qualified name of the plugin + * @param version The full verison of the plugin * @param channel A shared pointer to the gRPC channel for communication with the plugin. */ - SlotProxy(const std::string& name, const std::string& version, std::shared_ptr channel) - : plugin_{ value_type{ name, version, channel } } {}; + void addPlugin(const std::string& name, const std::string& version, std::shared_ptr channel) + { + plugins_.emplace_back(name, version, channel); + } /** * @brief Executes the plugin operation. @@ -76,18 +76,25 @@ class SlotProxy */ constexpr auto generate(auto&&... args) { - if (plugin_.has_value()) + if (! plugins_.empty()) { - return plugin_.value().generate(std::forward(args)...); + return plugins_.front().generate(std::forward(args)...); } return std::invoke(default_process, std::forward(args)...); } constexpr auto modify(auto& original_value, auto&&... args) { - if (plugin_.has_value()) + if (! plugins_.empty()) { - return plugin_.value().modify(original_value, std::forward(args)...); + auto modified_value = original_value; + + for (value_type& plugin : plugins_) + { + modified_value = plugin.modify(modified_value, std::forward(args)...); + } + + return modified_value; } if constexpr (sizeof...(args) == 0) { @@ -99,9 +106,9 @@ class SlotProxy template void broadcast(auto&&... args) { - if (plugin_.has_value()) + for (value_type& plugin : plugins_) { - plugin_.value().template broadcast(std::forward(args)...); + plugin.template broadcast(std::forward(args)...); } } }; diff --git a/include/plugins/slots.h b/include/plugins/slots.h index 3ca98c2e54..515a1a41ab 100644 --- a/include/plugins/slots.h +++ b/include/plugins/slots.h @@ -1,30 +1,25 @@ -// Copyright (c) 2023 UltiMaker +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher #ifndef PLUGINS_SLOTS_H #define PLUGINS_SLOTS_H +#ifdef ENABLE_PLUGINS #include #include #include #include -#include "WallToolPaths.h" #include "cura/plugins/slots/broadcast/v0/broadcast.grpc.pb.h" #include "cura/plugins/slots/gcode_paths/v0/modify.grpc.pb.h" #include "cura/plugins/slots/infill/v0/generate.grpc.pb.h" #include "cura/plugins/slots/postprocess/v0/modify.grpc.pb.h" #include "cura/plugins/slots/simplify/v0/modify.grpc.pb.h" #include "cura/plugins/v0/slot_id.pb.h" -#include "infill.h" -#include "plugins/converters.h" #include "plugins/slotproxy.h" #include "plugins/types.h" #include "plugins/validator.h" -#include "utils/Point2LL.h" #include "utils/Simplify.h" // TODO: Remove once the simplify slot has been removed -#include "utils/polygon.h" -#include "utils/types/char_range_literal.h" namespace cura { @@ -51,7 +46,7 @@ struct simplify_default struct infill_generate_default { - std::tuple, Polygons, Polygons> operator()([[maybe_unused]] auto&&... args) + std::tuple, Shape, OpenLinesSet> operator()([[maybe_unused]] auto&&... args) { // this code is only reachable when no slot is registered while the infill type is requested to be // generated by a plugin; this should not be possible to set up in the first place. Return an empty @@ -165,8 +160,7 @@ class Registry, Unit> : public Registry { if (slot_id == T::slot_id) { - using Tp = typename Unit::value_type; - value_.proxy = Tp{ name, version, std::forward(channel) }; + value_.proxy.addPlugin(name, version, std::forward(channel)); return; } Base::connect(slot_id, name, version, std::forward(channel)); @@ -237,4 +231,59 @@ using slots = plugins::details::SingletonRegistry::min(), + SlotID_INT_MAX_SENTINEL_DO_NOT_USE_ = std::numeric_limits::max() +}; +} // namespace plugins::v0 + +namespace slots +{ +namespace details +{ +struct Slots +{ + template + constexpr auto modify(auto&& data, auto&&... args) noexcept + { + return std::forward(data); + } + + template + constexpr auto broadcast(auto&&... args) noexcept + { + } + + constexpr auto connect(auto&&... args) noexcept + { + } +}; +} // namespace details + +constexpr details::Slots instance() noexcept +{ + return {}; +} +} // namespace slots + +} // namespace cura + + +#endif // ENABLE_PLUGINS + #endif // PLUGINS_SLOTS_H diff --git a/include/plugins/types.h b/include/plugins/types.h index eb443d0b27..a8fa18fad9 100644 --- a/include/plugins/types.h +++ b/include/plugins/types.h @@ -11,8 +11,6 @@ #include #include "cura/plugins/v0/slot_id.pb.h" -#include "utils/Point2LL.h" -#include "utils/polygon.h" namespace fmt { diff --git a/include/raft.h b/include/raft.h index b6f837f53e..a4493f0622 100644 --- a/include/raft.h +++ b/include/raft.h @@ -55,6 +55,18 @@ class Raft */ static size_t getTotalExtraLayers(); + /*! + * \brief Get the amount of layers for the raft base. + * \note This is currently hard-coded to 1 because we have yet no setting for the base + */ + static size_t getBaseLayers(); + + /*! \brief Get the amount of layers for the raft interface. */ + static size_t getInterfaceLayers(); + + /*! \brief Get the amount of layers for the raft top. */ + static size_t getSurfaceLayers(); + enum LayerType { RaftBase, @@ -70,6 +82,15 @@ class Raft * \return The type of layer at the given layer index. */ static LayerType getLayerType(LayerIndex layer_index); + +private: + /*! + * \brief Get the amount of layers to be printed for the given raft section + * \param extruder_nr_setting_name The name of the setting to be fetched to get the proper extruder number + * \param target_raft_section The name of the setting to be fetched to get the number of layers + * \return The number of layers for the given raft section, or 0 if raft is disabled + */ + static size_t getLayersAmount(const std::string& extruder_nr_setting_name, const std::string& target_raft_section); }; } // namespace cura diff --git a/include/settings/EnumSettings.h b/include/settings/EnumSettings.h index 1d82feb83c..650f6a06dc 100644 --- a/include/settings/EnumSettings.h +++ b/include/settings/EnumSettings.h @@ -245,6 +245,51 @@ enum class InsetDirection PLUGIN, }; +/*! + * Prime tower generation mode + */ +enum class PrimeTowerMode +{ + /*! + * Prime tower that minimizes time and used filament as much as possible. + */ + INTERLEAVED, + + /*! + * Prime tower that minimizes time and used filament, but doesn't allow + * for printing two different filaments over each other. + */ + NORMAL, +}; + +/*! + * Brim location, inside, outside or both + */ +enum class BrimLocation +{ + OUTSIDE = 0x01, // Brim only on the outside of the model + INSIDE = 0x02, // Brim only on the inside of the model + EVERYWHERE = 0x03, // Brim on both the outside and inside of the model +}; + +/*! + * How to enable/disable cooling fan(s) during extruder switch + */ +enum class CoolDuringExtruderSwitch +{ + UNCHANGED, // Let fans as they are during nozzle switch (historical behavior) + ONLY_LAST_EXTRUDER, // Turn on fan of the previously used extruder to cool it down, turn others off + ALL_FANS, // Turn on all fans +}; + +/*! + * Convenience binary operator to allow testing brim location easily, like (actual_location & BrimLocation::OUTSIDE) + */ +[[maybe_unused]] static int operator&(BrimLocation location1, BrimLocation location2) +{ + return static_cast(location1) & static_cast(location2); +} + } // namespace cura -#endif // ENUMSETTINGS_H \ No newline at end of file +#endif // ENUMSETTINGS_H diff --git a/include/settings/PathConfigStorage.h b/include/settings/PathConfigStorage.h index feafea23bf..06206f7ebb 100644 --- a/include/settings/PathConfigStorage.h +++ b/include/settings/PathConfigStorage.h @@ -53,7 +53,7 @@ class PathConfigStorage GCodePathConfig support_fractional_roof_config; //!< The config used to print the dense roofs of support on fractional layer-height parts. GCodePathConfig support_bottom_config; //!< The config to use to print the dense bottoms of support - std::vector mesh_configs; //!< For each meash the config for all its feature types + std::vector mesh_configs; //!< For each mesh the config for all its feature types /*! * \warning Note that the layer_nr might be below zero for raft (filler) layers diff --git a/include/settings/ZSeamConfig.h b/include/settings/ZSeamConfig.h index db1fb49ef9..9626786690 100644 --- a/include/settings/ZSeamConfig.h +++ b/include/settings/ZSeamConfig.h @@ -4,8 +4,8 @@ #ifndef ZSEAMCONFIG_H #define ZSEAMCONFIG_H -#include "../utils/Point2LL.h" //To store the preferred seam position. #include "EnumSettings.h" //For EZSeamType and EZSeamCornerPrefType. +#include "geometry/Point2LL.h" //To store the preferred seam position. namespace cura { diff --git a/include/settings/types/Angle.h b/include/settings/types/Angle.h index f6a7665b00..8a4a438283 100644 --- a/include/settings/types/Angle.h +++ b/include/settings/types/Angle.h @@ -1,12 +1,11 @@ -// Copyright (c) 2021 Ultimaker B.V. +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef ANGLE_H #define ANGLE_H #include //For fmod. - -#include "../../utils/math.h" //For PI. +#include #define TAU (2.0 * std::numbers::pi) @@ -27,10 +26,7 @@ class AngleDegrees /* * \brief Default constructor setting the angle to 0. */ - AngleDegrees() - : value_(0.0) - { - } + AngleDegrees() noexcept = default; /* * \brief Converts radians to degrees. @@ -41,7 +37,7 @@ class AngleDegrees * \brief Casts a double to an AngleDegrees instance. */ AngleDegrees(double value) - : value_(std::fmod(std::fmod(value, 360) + 360, 360)) + : value_{ std::fmod(std::fmod(value, 360) + 360, 360) } { } @@ -60,11 +56,13 @@ class AngleDegrees { return std::fmod(std::fmod(value_ + other.value_, 360) + 360, 360); } + template AngleDegrees operator+(const T& other) const { return operator+(AngleDegrees(static_cast(other))); } + AngleDegrees& operator+=(const AngleDegrees& other) { value_ = std::fmod(std::fmod(value_ + other.value_, 360) + 360, 360); @@ -74,11 +72,13 @@ class AngleDegrees { return std::fmod(std::fmod(value_ - other.value_, 360) + 360, 360); } + template AngleDegrees operator-(const T& other) const { return operator-(AngleDegrees(static_cast(other))); } + AngleDegrees& operator-=(const AngleDegrees& other) { value_ = std::fmod(std::fmod(value_ - other.value_, 360) + 360, 360); @@ -90,7 +90,7 @@ class AngleDegrees * * This value should always be between 0 and 360. */ - double value_ = 0; + double value_{ 0 }; }; /* @@ -105,15 +105,12 @@ class AngleRadians /* * \brief Default constructor setting the angle to 0. */ - AngleRadians() - : value_(0.0) - { - } + constexpr AngleRadians() noexcept = default; /*! * \brief Converts an angle from degrees into radians. */ - AngleRadians(const AngleDegrees& value); + constexpr AngleRadians(const AngleDegrees& value); /* * \brief Translate the double value in degrees to an AngleRadians instance. @@ -138,15 +135,18 @@ class AngleRadians { return std::fmod(std::fmod(value_ + other.value_, TAU) + TAU, TAU); } + AngleRadians& operator+=(const AngleRadians& other) { value_ = std::fmod(std::fmod(value_ + other.value_, TAU) + TAU, TAU); return *this; } + AngleRadians operator-(const AngleRadians& other) const { return std::fmod(std::fmod(value_ - other.value_, TAU) + TAU, TAU); } + AngleRadians& operator-=(const AngleRadians& other) { value_ = std::fmod(std::fmod(value_ - other.value_, TAU) + TAU, TAU); @@ -158,16 +158,30 @@ class AngleRadians * * This value should always be between 0 and 2 * pi. */ - double value_ = 0; + double value_{ 0 }; }; inline AngleDegrees::AngleDegrees(const AngleRadians& value) - : value_(value * 360 / TAU) + : value_(value.value_ * 360 / TAU) +{ +} + +constexpr inline AngleRadians::AngleRadians(const AngleDegrees& value) + : value_(value.value_ * TAU / 360.0) { } -inline AngleRadians::AngleRadians(const AngleDegrees& value) - : value_(double(value) * TAU / 360.0) + +/*! + * \brief Safe call to "std::tan" which limits the higher angle value to something slightly less that Ï€/2 so that when + * the given angle is higher that this value, the returned value is not a huge number + * \param angle The input angle, which should be [0, Ï€/2] + * \return The tangent value of the angle, limited + * \note This method exists as a convenience because this is a common case in the engine, as we have many settings that + * are angles setup on [0, Ï€/2] and which translate to a distance + */ +inline double boundedTan(const AngleRadians& angle) { + return std::tan(std::min(static_cast(angle), std::numbers::pi / 2.0 - 0.001)); } } // namespace cura diff --git a/include/skin.h b/include/skin.h index e0367cbf0c..fe7d555ef7 100644 --- a/include/skin.h +++ b/include/skin.h @@ -10,7 +10,7 @@ namespace cura { -class Polygons; +class Shape; class SkinPart; class SliceLayerPart; class SliceMeshStorage; @@ -96,7 +96,7 @@ class SkinInfillAreaComputation * above. The input is the area within the inner walls (or an empty Polygons * object). */ - void calculateTopSkin(const SliceLayerPart& part, Polygons& upskin); + void calculateTopSkin(const SliceLayerPart& part, Shape& upskin); /*! * \brief Calculate the basic areas which have air below. @@ -105,7 +105,7 @@ class SkinInfillAreaComputation * layers above. The input is the area within the inner walls (or an empty * Polygons object). */ - void calculateBottomSkin(const SliceLayerPart& part, Polygons& downskin); + void calculateBottomSkin(const SliceLayerPart& part, Shape& downskin); /*! * Apply skin expansion: @@ -116,7 +116,7 @@ class SkinInfillAreaComputation * \param[in,out] upskin The top skin areas to grow * \param[in,out] downskin The bottom skin areas to grow */ - void applySkinExpansion(const Polygons& original_outline, Polygons& upskin, Polygons& downskin); + void applySkinExpansion(const Shape& original_outline, Shape& upskin, Shape& downskin); /*! * Generate infill of a given part @@ -150,7 +150,7 @@ class SkinInfillAreaComputation * \param part Where to get the SkinParts to get the outline info from * \param roofing_layer_count The number of layers above the layer which we are looking into */ - Polygons generateFilledAreaAbove(SliceLayerPart& part, size_t roofing_layer_count); + Shape generateFilledAreaAbove(SliceLayerPart& part, size_t roofing_layer_count); /*! * Helper function to calculate and return the areas which are 'directly' above air. @@ -158,7 +158,7 @@ class SkinInfillAreaComputation * \param part Where to get the SkinParts to get the outline info from * \param flooring_layer_count The number of layers below the layer which we are looking into */ - Polygons generateFilledAreaBelow(SliceLayerPart& part, size_t flooring_layer_count); + Shape generateFilledAreaBelow(SliceLayerPart& part, size_t flooring_layer_count); protected: LayerIndex layer_nr_; //!< The index of the layer for which to generate the skins and infill. @@ -191,7 +191,7 @@ class SkinInfillAreaComputation * \param part_here The part for which to check. * \param layer2_nr The layer index from which to gather the outlines. */ - Polygons getOutlineOnLayer(const SliceLayerPart& part_here, const LayerIndex layer2_nr); + Shape getOutlineOnLayer(const SliceLayerPart& part_here, const LayerIndex layer2_nr); }; } // namespace cura diff --git a/include/sliceDataStorage.h b/include/sliceDataStorage.h index e18a3783d3..4b434aa5ae 100644 --- a/include/sliceDataStorage.h +++ b/include/sliceDataStorage.h @@ -8,22 +8,22 @@ #include #include -#include "PrimeTower.h" -#include "RetractionConfig.h" #include "SupportInfillPart.h" #include "TopSurface.h" #include "WipeScriptConfig.h" +#include "geometry/LinesSet.h" +#include "geometry/MixedLinesSet.h" +#include "geometry/OpenLinesSet.h" +#include "geometry/OpenPolyline.h" +#include "geometry/Point2LL.h" +#include "geometry/Polygon.h" +#include "geometry/SingleShape.h" #include "settings/Settings.h" //For MAX_EXTRUDERS. #include "settings/types/Angle.h" //Infill angles. #include "settings/types/LayerIndex.h" #include "utils/AABB.h" #include "utils/AABB3D.h" #include "utils/NoCopy.h" -#include "utils/Point2LL.h" -#include "utils/polygon.h" - -// libArachne -#include "utils/ExtrusionLine.h" namespace cura { @@ -31,6 +31,7 @@ namespace cura class Mesh; class SierpinskiFillProvider; class LightningGenerator; +class PrimeTower; /*! * A SkinPart is a connected area designated as top and/or bottom skin. @@ -40,12 +41,12 @@ class LightningGenerator; class SkinPart { public: - PolygonsPart outline; //!< The skinOutline is the area which needs to be 100% filled to generate a proper top&bottom filling. It's filled by the "skin" module. Includes both - //!< roofing and non-roofing. - Polygons skin_fill; //!< The part of the skin which is not roofing. - Polygons roofing_fill; //!< The inner infill which has air directly above - Polygons top_most_surface_fill; //!< The inner infill of the uppermost top layer which has air directly above. - Polygons bottom_most_surface_fill; //!< The inner infill of the bottommost bottom layer which has air directly below. + SingleShape outline; //!< The skinOutline is the area which needs to be 100% filled to generate a proper top&bottom filling. It's filled by the "skin" module. Includes both + //!< roofing and non-roofing. + Shape skin_fill; //!< The part of the skin which is not roofing. + Shape roofing_fill; //!< The inner infill which has air directly above + Shape top_most_surface_fill; //!< The inner infill of the uppermost top layer which has air directly above. + Shape bottom_most_surface_fill; //!< The inner infill of the bottommost bottom layer which has air directly below. }; /*! @@ -59,13 +60,12 @@ class SliceLayerPart AABB boundaryBox; //!< The boundaryBox is an axis-aligned boundary box which is used to quickly check for possible //!< collision between different parts on different layers. It's an optimization used during //!< skin calculations. - PolygonsPart outline; //!< The outline is the first member that is filled, and it's filled with polygons that match - //!< a cross-section of the 3D model. The first polygon is the outer boundary polygon and the - //!< rest are holes. - Polygons print_outline; //!< An approximation to the outline of what's actually printed, based on the outer wall. - //!< Too small parts will be omitted compared to the outline. - Polygons spiral_wall; //!< The centerline of the wall used by spiralize mode. Only computed if spiralize mode is enabled. - Polygons inner_area; //!< The area of the outline, minus the walls. This will be filled with either skin or infill. + SingleShape outline; //!< The outline is the first member that is filled, and it's filled with polygons that match + //!< a cross-section of the 3D model. + Shape print_outline; //!< An approximation to the outline of what's actually printed, based on the outer wall. + //!< Too small parts will be omitted compared to the outline. + Shape spiral_wall; //!< The centerline of the wall used by spiralize mode. Only computed if spiralize mode is enabled. + Shape inner_area; //!< The area of the outline, minus the walls. This will be filled with either skin or infill. std::vector skin_parts; //!< The skin parts which are filled for 100% with lines and/or insets. std::vector wall_toolpaths; //!< toolpaths for walls, will replace(?) the insets. Binned by inset_idx. std::vector infill_wall_toolpaths; //!< toolpaths for the walls of the infill areas. Binned by inset_idx. @@ -75,7 +75,7 @@ class SliceLayerPart * Like SliceLayerPart::outline, this class member is not used to actually determine the feature area, * but is used to compute the inside comb boundary. */ - Polygons infill_area; + Shape infill_area; /*! * The areas which need to be filled with sparse (0-99%) infill. @@ -86,7 +86,7 @@ class SliceLayerPart * * If these polygons are not initialized, simply use the normal infill area. */ - std::optional infill_area_own; + std::optional infill_area_own; /*! * The areas which need to be filled with sparse (0-99%) infill for different thicknesses. @@ -133,21 +133,21 @@ class SliceLayerPart * infill_area[x] will lie fully inside infill_area[x+1]. * infill_area_per_combine_per_density.back()[0] == part.infill area initially */ - std::vector> infill_area_per_combine_per_density; + std::vector> infill_area_per_combine_per_density; /*! * Get the infill_area_own (or when it's not instantiated: the normal infill_area) * \see SliceLayerPart::infill_area_own * \return the own infill area */ - Polygons& getOwnInfillArea(); + Shape& getOwnInfillArea(); /*! * Get the infill_area_own (or when it's not instantiated: the normal infill_area) * \see SliceLayerPart::infill_area_own * \return the own infill area */ - const Polygons& getOwnInfillArea() const; + const Shape& getOwnInfillArea() const; /*! * Searches whether the part has any walls in the specified inset index @@ -166,7 +166,7 @@ class SliceLayer coord_t printZ; //!< The height at which this layer needs to be printed. Can differ from sliceZ due to the raft. coord_t thickness; //!< The thickness of this layer. Can be different when using variable layer heights. std::vector parts; //!< An array of LayerParts which contain the actual data. The parts are printed one at a time to minimize travel outside of the 3D model. - Polygons openPolyLines; //!< A list of lines which were never hooked up into a 2D polygon. (Currently unused in normal operation) + OpenLinesSet open_polylines; //!< A list of lines which were never hooked up into a 2D polygon. (Currently unused in normal operation) /*! * \brief The parts of the model that are exposed at the very top of the @@ -181,7 +181,7 @@ class SliceLayer * * Note: Filled only when needed. */ - Polygons bottom_surface; + Shape bottom_surface; /*! * Get the all outlines of all layer parts in this layer. @@ -189,7 +189,7 @@ class SliceLayer * \param external_polys_only Whether to only include the outermost outline of each layer part * \return A collection of all the outline polygons */ - Polygons getOutlines(bool external_polys_only = false) const; + Shape getOutlines(bool external_polys_only = false) const; /*! * Get the all outlines of all layer parts in this layer. @@ -198,7 +198,7 @@ class SliceLayer * \param external_polys_only Whether to only include the outermost outline of each layer part * \param result The result: a collection of all the outline polygons */ - void getOutlines(Polygons& result, bool external_polys_only = false) const; + void getOutlines(Shape& result, bool external_polys_only = false) const; ~SliceLayer(); }; @@ -210,14 +210,14 @@ class SupportLayer { public: std::vector support_infill_parts; //!< a list of support infill parts - Polygons support_bottom; //!< Piece of support below the support and above the model. This must not overlap with any of the support_infill_parts or support_roof. - Polygons support_roof; //!< Piece of support above the support and below the model. This must not overlap with any of the support_infill_parts or support_bottom. - // NOTE: This is _all_ of the support_roof, and as such, overlaps with support_fractional_roof! - Polygons support_fractional_roof; //!< If the support distance is not exactly a multiple of the layer height, - // the first part of support just underneath the model needs to be printed at a fracional layer height. - Polygons support_mesh_drop_down; //!< Areas from support meshes which should be supported by more support - Polygons support_mesh; //!< Areas from support meshes which should NOT be supported by more support - Polygons anti_overhang; //!< Areas where no overhang should be detected. + Shape support_bottom; //!< Piece of support below the support and above the model. This must not overlap with any of the support_infill_parts or support_roof. + Shape support_roof; //!< Piece of support above the support and below the model. This must not overlap with any of the support_infill_parts or support_bottom. + // NOTE: This is _all_ of the support_roof, and as such, overlaps with support_fractional_roof! + Shape support_fractional_roof; //!< If the support distance is not exactly a multiple of the layer height, + // the first part of support just underneath the model needs to be printed at a fracional layer height. + Shape support_mesh_drop_down; //!< Areas from support meshes which should be supported by more support + Shape support_mesh; //!< Areas from support meshes which should NOT be supported by more support + Shape anti_overhang; //!< Areas where no overhang should be detected. /*! * Exclude the given polygons from the support infill areas and update the SupportInfillParts. @@ -225,13 +225,39 @@ class SupportLayer * \param exclude_polygons The polygons to exclude * \param exclude_polygons_boundary_box The boundary box for the polygons to exclude */ - void excludeAreasFromSupportInfillAreas(const Polygons& exclude_polygons, const AABB& exclude_polygons_boundary_box); + void excludeAreasFromSupportInfillAreas(const Shape& exclude_polygons, const AABB& exclude_polygons_boundary_box); + + /* Fill up the infill parts for the support with the given support polygons. The support polygons will be split into parts. + * + * \param area The support polygon to fill up with infill parts. + * \param support_fill_per_layer The support polygons to fill up with infill parts. + * \param support_line_width Line width of the support extrusions. + * \param wall_line_count Wall-line count around the fill. + * \param use_fractional_config (optional, default to false) If the area should be added as fractional support. + * \param unionAll (optional, default to false) Wether to 'union all' for the split into parts bit. + * \param custom_line_distance (optional, default to 0) Distance between lines of the infill pattern. custom_line_distance of 0 means use the default instead. + */ + void fillInfillParts( + const Shape& area, + const coord_t support_line_width, + const coord_t wall_line_count, + const bool use_fractional_config = false, + const bool unionAll = false, + const coord_t custom_line_distance = 0) + { + for (const SingleShape& island_outline : area.splitIntoParts(unionAll)) + { + support_infill_parts.emplace_back(island_outline, support_line_width, use_fractional_config, wall_line_count, custom_line_distance); + } + } /* Fill up the infill parts for the support with the given support polygons. The support polygons will be split into parts. This also takes into account fractional-height * support layers. * - * \param layer_nr Current layer index. - * \param support_fill_per_layer All of the (infill) support (since the layer above might be needed). + * \param layer_nr The layer-index of the support layer to be filled. + * \param support_fill_per_layer The support polygons to fill up with infill parts. + * \param infill_layer_height The layer height of the support-fill. + * \param meshes The model meshes to be supported, needed here to handle fractional support layer height. * \param support_line_width Line width of the support extrusions. * \param wall_line_count Wall-line count around the fill. * \param grow_layer_above (optional, default to 0) In cases where support shrinks per layer up, an appropriate offset may be nescesary. @@ -240,7 +266,9 @@ class SupportLayer */ void fillInfillParts( const LayerIndex layer_nr, - const std::vector& support_fill_per_layer, + const std::vector& support_fill_per_layer, + const coord_t infill_layer_height, + const std::vector>& meshes, const coord_t support_line_width, const coord_t wall_line_count, const coord_t grow_layer_above = 0, @@ -282,11 +310,11 @@ class SliceMeshStorage std::vector infill_angles; //!< a list of angle values which is cycled through to determine the infill angle of each layer std::vector roofing_angles; //!< a list of angle values which is cycled through to determine the roofing angle of each layer std::vector skin_angles; //!< a list of angle values which is cycled through to determine the skin angle of each layer - std::vector overhang_areas; //!< For each layer the areas that are classified as overhang on this mesh. - std::vector full_overhang_areas; //!< For each layer the full overhang without the tangent of the overhang angle removed, such that the overhang area adjoins the - //!< areas of the next layers. - std::vector> overhang_points; //!< For each layer a list of points where point-overhang is detected. This is overhang that hasn't got any surface area, - //!< such as a corner pointing downwards. + std::vector overhang_areas; //!< For each layer the areas that are classified as overhang on this mesh. + std::vector full_overhang_areas; //!< For each layer the full overhang without the tangent of the overhang angle removed, such that the overhang area adjoins the + //!< areas of the next layers. + std::vector> overhang_points; //!< For each layer a list of points where point-overhang is detected. This is overhang that hasn't got any surface area, + //!< such as a corner pointing downwards. AABB3D bounding_box; //!< the mesh's bounding box std::shared_ptr base_subdiv_cube; @@ -331,15 +359,6 @@ class SliceMeshStorage Point2LL getZSeamHint() const; }; -/*! - * Class to store all open polylines or closed polygons related to one outset index of brim/skirt. - */ -struct SkirtBrimLine -{ - Polygons open_polylines; - Polygons closed_polygons; -}; - class SliceDataStorage : public NoCopy { public: @@ -353,25 +372,26 @@ class SliceDataStorage : public NoCopy SupportStorage support; - std::vector skirt_brim[MAX_EXTRUDERS]; //!< Skirt/brim polygons per extruder, ordered from inner to outer polygons. - Polygons support_brim; //!< brim lines for support, going from the edge of the support inward. \note Not ordered by inset. + std::vector skirt_brim[MAX_EXTRUDERS]; //!< Skirt/brim polygons per extruder, ordered from inner to outer polygons. + ClosedLinesSet support_brim; //!< brim lines for support, going from the edge of the support inward. \note Not ordered by inset. // Storage for the outline of the raft-parts. Will be filled with lines when the GCode is generated. - Polygons raftBaseOutline; - Polygons raftInterfaceOutline; - Polygons raftSurfaceOutline; + Shape raft_base_outline; + Shape raft_interface_outline; + Shape raft_surface_outline; int max_print_height_second_to_last_extruder; //!< Used in multi-extrusion: the layer number beyond which all models are printed with the same extruder std::vector max_print_height_per_extruder; //!< For each extruder the highest layer number at which it is used. std::vector max_print_height_order; //!< Ordered indices into max_print_height_per_extruder: back() will return the extruder number with the highest print height. std::vector spiralize_seam_vertex_indices; //!< the index of the seam vertex for each layer - std::vector spiralize_wall_outlines; //!< the wall outline polygons for each layer + std::vector spiralize_wall_outlines; //!< the wall outline polygons for each layer - PrimeTower primeTower; + //!< Pointer to primer tower handler object (a null pointer indicates that there is no prime tower) + PrimeTower* prime_tower_{ nullptr }; - std::vector oozeShield; // oozeShield per layer - Polygons draft_protection_shield; //!< The polygons for a heightened skirt which protects from warping by gusts of wind and acts as a heated chamber. + std::vector ooze_shield; // oozeShield per layer + Shape draft_protection_shield; //!< The polygons for a heightened skirt which protects from warping by gusts of wind and acts as a heated chamber. /*! * \brief Creates a new slice data storage that stores the slice data of the @@ -379,9 +399,7 @@ class SliceDataStorage : public NoCopy */ SliceDataStorage(); - ~SliceDataStorage() - { - } + ~SliceDataStorage(); /*! * Get all outlines within a given layer. @@ -389,14 +407,23 @@ class SliceDataStorage : public NoCopy * \param layer_nr The index of the layer for which to get the outlines * (negative layer numbers indicate the raft). * \param include_support Whether to include support in the outline. - * \param include_prime_tower Whether to include the prime tower in the - * outline. + * \param include_prime_tower Whether to include the prime tower in the outline. + * \param include_models Whether to include the models in the outline * \param external_polys_only Whether to disregard all hole polygons. * \param extruder_nr (optional) only give back outlines for this extruder (where the walls are printed with this extruder) */ - Polygons - getLayerOutlines(const LayerIndex layer_nr, const bool include_support, const bool include_prime_tower, const bool external_polys_only = false, const int extruder_nr = -1) - const; + Shape getLayerOutlines( + const LayerIndex layer_nr, + const bool include_support, + const bool include_prime_tower, + const bool external_polys_only = false, + const int extruder_nr = -1, + const bool include_models = true) const; + + /*! + * Get the axis-aligned bounding-box of the complete model (all meshes). + */ + AABB3D getModelBoundingBox() const; /*! * Get the extruders used. @@ -426,9 +453,11 @@ class SliceDataStorage : public NoCopy * Gets the border of the usable print area for this machine. * * \param extruder_nr The extruder for which to return the allowed areas. -1 if the areas allowed for all extruders should be returned. - * \return the Polygons representing the usable area of the print bed. + * \return the Shape representing the usable area of the print bed. */ - Polygons getMachineBorder(int extruder_nr = -1) const; + Shape getMachineBorder(int extruder_nr = -1) const; + + void initializePrimeTower(); private: /*! diff --git a/include/slicer.h b/include/slicer.h index 37cd45f122..ddafd67ca3 100644 --- a/include/slicer.h +++ b/include/slicer.h @@ -1,4 +1,4 @@ -// Copyright (c) 2018 Ultimaker B.V. +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef SLICER_H @@ -8,8 +8,11 @@ #include #include +#include "geometry/LinesSet.h" +#include "geometry/OpenLinesSet.h" +#include "geometry/OpenPolyline.h" +#include "geometry/Shape.h" #include "settings/EnumSettings.h" -#include "utils/polygon.h" /* The Slicer creates layers of polygons from an optimized 3D model. @@ -56,12 +59,12 @@ class GapCloserResult class SlicerLayer { public: - std::vector segments; - std::unordered_map face_idx_to_segment_idx; // topology + std::vector segments_; + std::unordered_map face_idx_to_segment_idx_; // topology - int z = -1; - Polygons polygons; - Polygons openPolylines; + int z_ = -1; + Shape polygons_; + OpenLinesSet open_polylines_; /*! * \brief Connect the segments into polygons for this layer of this \p mesh. @@ -76,7 +79,7 @@ class SlicerLayer * * \param[in,out] open_polylines The polylines which are stiched, but couldn't be closed into a loop */ - void makeBasicPolygonLoops(Polygons& open_polylines); + void makeBasicPolygonLoops(OpenLinesSet& open_polylines); /*! * Connect the segments into a loop, starting from the segment with index \p start_segment_idx @@ -84,7 +87,7 @@ class SlicerLayer * \param[in,out] open_polylines The polylines which are stiched, but couldn't be closed into a loop * \param[in] start_segment_idx The index into SlicerLayer::segments for the first segment from which to start the polygon loop */ - void makeBasicPolygonLoop(Polygons& open_polylines, const size_t start_segment_idx); + void makeBasicPolygonLoop(OpenLinesSet& open_polylines, const size_t start_segment_idx); /*! * Get the next segment connected to the end of \p segment. @@ -104,7 +107,7 @@ class SlicerLayer * * \param[in,out] open_polylines The polylines which are stiched, but couldn't be closed into a loop */ - void connectOpenPolylines(Polygons& open_polylines); + void connectOpenPolylines(OpenLinesSet& open_polylines); /*! * Link up all the missing ends, closing up the smallest gaps first. This is an inefficient implementation which can run in O(n*n*n) time. @@ -113,7 +116,7 @@ class SlicerLayer * * \param[in,out] open_polylines The polylines which are stiched, but couldn't be closed into a loop yet */ - void stitch(Polygons& open_polylines); + void stitch(OpenLinesSet& open_polylines); std::optional findPolygonGapCloser(Point2LL ip0, Point2LL ip1); @@ -126,7 +129,7 @@ class SlicerLayer * * \param[in,out] open_polylines The polylines which are stiched, but couldn't be closed into a loop yet */ - void stitch_extensive(Polygons& open_polylines); + void stitch_extensive(OpenLinesSet& open_polylines); private: /*! @@ -417,7 +420,7 @@ class SlicerLayer * the order of a polyline. * \return The stitches that are allowed in order from best to worst. */ - std::priority_queue findPossibleStitches(const Polygons& open_polylines, coord_t max_dist, coord_t cell_size, bool allow_reverse) const; + std::priority_queue findPossibleStitches(const OpenLinesSet& open_polylines, coord_t max_dist, coord_t cell_size, bool allow_reverse) const; /*! Plans the best way to perform a stitch. * @@ -435,7 +438,7 @@ class SlicerLayer * \param[in,out] terminus_1 the Terminus on polyline_1 to join at. * \param[out] reverse Whether the polylines need to be reversed. */ - void planPolylineStitch(const Polygons& open_polylines, Terminus& terminus_0, Terminus& terminus_1, bool reverse[2]) const; + void planPolylineStitch(const OpenLinesSet& open_polylines, Terminus& terminus_0, Terminus& terminus_1, bool reverse[2]) const; /*! Joins polyline_1 onto polyline_0. * @@ -453,7 +456,7 @@ class SlicerLayer * polyline_0 and reverse[1] indicates whether to reverse * polyline_1 */ - void joinPolylines(PolygonRef& polyline_0, PolygonRef& polyline_1, const bool reverse[2]) const; + static void joinPolylines(OpenPolyline& polyline_0, OpenPolyline& polyline_1, const bool reverse[2]); /*! * Connecting polylines that are not closed yet. @@ -473,7 +476,7 @@ class SlicerLayer * \param[in] allow_reverse If true, then this function is allowed * to reverse edge directions to merge polylines. */ - void connectOpenPolylinesImpl(Polygons& open_polylines, coord_t max_dist, coord_t cell_size, bool allow_reverse); + void connectOpenPolylinesImpl(OpenLinesSet& open_polylines, coord_t max_dist, coord_t cell_size, bool allow_reverse); }; class Slicer diff --git a/include/support.h b/include/support.h index 81b1218929..0d6eaeffa6 100644 --- a/include/support.h +++ b/include/support.h @@ -8,7 +8,7 @@ #include #include "settings/types/LayerIndex.h" -#include "utils/polygon.h" +#include "utils/Coord_t.h" namespace cura { @@ -17,6 +17,8 @@ class Settings; class SliceDataStorage; class SliceMeshStorage; class Slicer; +class Polygon; +class Shape; class AreaSupport { @@ -74,8 +76,7 @@ class AreaSupport * \param global_support_areas_per_layer the global support areas per layer * \param total_layer_count total number of layers */ - static void - splitGlobalSupportAreasIntoSupportInfillParts(SliceDataStorage& storage, const std::vector& global_support_areas_per_layer, unsigned int total_layer_count); + static void splitGlobalSupportAreasIntoSupportInfillParts(SliceDataStorage& storage, const std::vector& global_support_areas_per_layer, unsigned int total_layer_count); /*! * Generate gradual support on the already generated support areas. This must be called after generateSupportAreas(). @@ -158,7 +159,7 @@ class AreaSupport const Settings& bottom_settings, const size_t mesh_idx, const size_t layer_count, - std::vector& support_areas); + std::vector& support_areas); /*! * Generate support bottom areas for a given mesh. @@ -172,7 +173,7 @@ class AreaSupport * \param mesh The mesh to generate support for. * \param global_support_areas_per_layer the global support areas on each layer. */ - static void generateSupportBottom(SliceDataStorage& storage, const SliceMeshStorage& mesh, std::vector& global_support_areas_per_layer); + static void generateSupportBottom(SliceDataStorage& storage, const SliceMeshStorage& mesh, std::vector& global_support_areas_per_layer); /*! * Generate support roof areas for a given mesh. @@ -186,7 +187,7 @@ class AreaSupport * \param mesh The mesh to generate support roof for. * \param global_support_areas_per_layer the global support areas on each layer. */ - static void generateSupportRoof(SliceDataStorage& storage, const SliceMeshStorage& mesh, std::vector& global_support_areas_per_layer); + static void generateSupportRoof(SliceDataStorage& storage, const SliceMeshStorage& mesh, std::vector& global_support_areas_per_layer); /*! * \brief Generate a single layer of support interface. @@ -206,12 +207,12 @@ class AreaSupport * \param[out] interface_polygons The resulting interface layer. Do not use `interface` in windows! */ static void generateSupportInterfaceLayer( - Polygons& support_areas, - const Polygons mesh_outlines, + Shape& support_areas, + const Shape mesh_outlines, const coord_t safety_offset, const coord_t outline_offset, const double minimum_interface_area, - Polygons& interface_polygons); + Shape& interface_polygons); /*! * \brief Join current support layer with the support of the layer above, @@ -221,7 +222,7 @@ class AreaSupport * \param supportLayer_this The overhang areas of the current layer at hand. * \return The joined support areas for this layer. */ - static Polygons join(const SliceDataStorage& storage, const Polygons& supportLayer_up, Polygons& supportLayer_this); + static Shape join(const SliceDataStorage& storage, const Shape& supportLayer_up, Shape& supportLayer_this); /*! * Move the support up from model (cut away polygons to ensure bottom z distance) @@ -239,9 +240,9 @@ class AreaSupport */ static void moveUpFromModel( const SliceDataStorage& storage, - Polygons& stair_removal, - Polygons& sloped_areas, - Polygons& support_areas, + Shape& stair_removal, + Shape& sloped_areas, + Shape& support_areas, const size_t layer_idx, const size_t bottom_empty_layer_count, const size_t bottom_stair_step_layer_count, @@ -272,7 +273,7 @@ class AreaSupport * \param layer_idx The layer for which to compute the overhang. * \return A pair of basic overhang and full overhang. */ - static std::pair computeBasicAndFullOverhang(const SliceDataStorage& storage, const SliceMeshStorage& mesh, const LayerIndex& layer_idx); + static std::pair computeBasicAndFullOverhang(const SliceDataStorage& storage, const SliceMeshStorage& mesh, const LayerIndex& layer_idx); /*! * \brief Adds tower pieces to the current support layer. @@ -290,10 +291,10 @@ class AreaSupport */ static void handleTowers( const Settings& settings, - const Polygons& xy_disallowed_area, - Polygons& supportLayer_this, - std::vector& tower_roofs, - std::vector>& overhang_points, + const Shape& xy_disallowed_area, + Shape& supportLayer_this, + std::vector& tower_roofs, + std::vector>& overhang_points, LayerIndex layer_idx, size_t layer_count); @@ -303,7 +304,7 @@ class AreaSupport * \param supportLayer_this The areas of the layer for which to handle the * wall struts. */ - static void handleWallStruts(const Settings& settings, Polygons& supportLayer_this); + static void handleWallStruts(const Settings& settings, Shape& supportLayer_this); /*! * Clean up the SupportInfillParts. @@ -323,7 +324,7 @@ class AreaSupport * \param layer_idx The layer for which the disallowed areas are to be calcualted * */ - static Polygons generateVaryingXYDisallowedArea(const SliceMeshStorage& storage, const LayerIndex layer_idx); + static Shape generateVaryingXYDisallowedArea(const SliceMeshStorage& storage, const LayerIndex layer_idx); }; diff --git a/include/utils/AABB.h b/include/utils/AABB.h index b69d8c2c57..e3a93c678b 100644 --- a/include/utils/AABB.h +++ b/include/utils/AABB.h @@ -4,14 +4,13 @@ #ifndef UTILS_AABB_H #define UTILS_AABB_H -#include "Point2LL.h" +#include "geometry/Point2LL.h" namespace cura { -class ConstPolygonRef; class Polygon; -class Polygons; +class Shape; /* Axis aligned boundary box */ class AABB @@ -21,11 +20,11 @@ class AABB AABB(); //!< initializes with invalid min and max AABB(const Point2LL& min, const Point2LL& max); //!< initializes with given min and max - AABB(const Polygons& polys); //!< Computes the boundary box for the given polygons - AABB(ConstPolygonRef poly); //!< Computes the boundary box for the given polygons + AABB(const Shape& shape); //!< Computes the boundary box for the given shape + AABB(const Polygon& poly); //!< Computes the boundary box for the given polygons - void calculate(const Polygons& polys); //!< Calculates the aabb for the given polygons (throws away old min and max data of this aabb) - void calculate(ConstPolygonRef poly); //!< Calculates the aabb for the given polygon (throws away old min and max data of this aabb) + void calculate(const Shape& shape); //!< Calculates the aabb for the given shape (throws away old min and max data of this aabb) + void calculate(const Polygon& poly); //!< Calculates the aabb for the given polygon (throws away old min and max data of this aabb) /*! * Whether the bounding box contains the specified point. @@ -79,7 +78,9 @@ class AABB * * \param point The point to include in the bounding box. */ - void include(Point2LL point); + void include(const Point2LL& point); + + void include(const Polygon& polygon); /*! * \brief Includes the specified bounding box in the bounding box. @@ -90,7 +91,7 @@ class AABB * * \param other The bounding box to include in this one. */ - void include(const AABB other); + void include(const AABB& other); /*! * Expand the borders of the bounding box in each direction with the given amount diff --git a/include/utils/AABB3D.h b/include/utils/AABB3D.h index 48142d24ce..402135be66 100644 --- a/include/utils/AABB3D.h +++ b/include/utils/AABB3D.h @@ -4,7 +4,7 @@ #ifndef UTILS_AABB3D_H #define UTILS_AABB3D_H -#include "Point2LL.h" +#include "geometry/Point2LL.h" #include "utils/AABB.h" namespace cura diff --git a/include/utils/ExtrusionJunction.h b/include/utils/ExtrusionJunction.h index 66cb46c9cc..f431a73f94 100644 --- a/include/utils/ExtrusionJunction.h +++ b/include/utils/ExtrusionJunction.h @@ -5,7 +5,7 @@ #ifndef UTILS_EXTRUSION_JUNCTION_H #define UTILS_EXTRUSION_JUNCTION_H -#include "Point2LL.h" +#include "geometry/Point2LL.h" namespace cura { diff --git a/include/utils/ExtrusionLine.h b/include/utils/ExtrusionLine.h index 4be41d1da9..fa76eaca93 100644 --- a/include/utils/ExtrusionLine.h +++ b/include/utils/ExtrusionLine.h @@ -5,12 +5,15 @@ #ifndef UTILS_EXTRUSION_LINE_H #define UTILS_EXTRUSION_LINE_H +#include + #include #include #include #include "ExtrusionJunction.h" -#include "polygon.h" +#include "geometry/Polygon.h" +#include "geometry/Shape.h" namespace cura { @@ -208,11 +211,7 @@ struct ExtrusionLine /*! * Sum the total length of this path. */ - coord_t getLength() const; - coord_t polylineLength() const - { - return getLength(); - } + coord_t length() const; /*! * Put all junction locations into a polygon object. @@ -224,55 +223,17 @@ struct ExtrusionLine Polygon ret; for (const ExtrusionJunction& j : junctions_) - ret.add(j.p_); + ret.push_back(j.p_); return ret; } - /*! - * Create a true-extrusion area shape for the path; this means that each junction follows the bead-width - * set for that junction. - */ - Polygons toExtrusionPolygons() const - { - Polygon poly; - - const auto add_line_direction = [&poly](const auto iterator) - { - for (const auto& element : iterator | ranges::views::sliding(2)) - { - const ExtrusionJunction& j1 = element[0]; - const ExtrusionJunction& j2 = element[1]; - - const auto dir = j2.p_ - j1.p_; - const auto normal = turn90CCW(dir); - const auto mag = vSize(normal); - - if (mag <= 5) - { - continue; - } - - poly.emplace_back(j1.p_ + normal * j1.w_ / mag); - poly.emplace_back(j2.p_ + normal * j2.w_ / mag); - } - }; - - // forward pass - add_line_direction(junctions_); - // backward pass - add_line_direction(junctions_ | ranges::views::reverse); - - Polygons paths; - paths.emplace_back(poly.poly); - ClipperLib::SimplifyPolygons(paths.paths, ClipperLib::pftNonZero); - return paths; - } - /*! * Get the minimal width of this path */ coord_t getMinimalWidth() const; + + bool shorterThan(const coord_t check_length) const; }; using VariableWidthLines = std::vector; //; + +} // namespace cura +#endif // UTILS_EXTRUSION_LINE_STITCHER_H diff --git a/include/utils/ExtrusionSegment.h b/include/utils/ExtrusionSegment.h index 99430f8789..87ca8176cf 100644 --- a/include/utils/ExtrusionSegment.h +++ b/include/utils/ExtrusionSegment.h @@ -1,15 +1,14 @@ -// Copyright (c) 2020 Ultimaker B.V. +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef UTILS_EXTRUSION_SEGMENT_H #define UTILS_EXTRUSION_SEGMENT_H -#include +#include #include "ExtrusionJunction.h" -#include "Point2LL.h" -#include "polygon.h" +#include "geometry/Polygon.h" #include "polygonUtils.h" namespace cura @@ -55,7 +54,7 @@ class ExtrusionSegment * Converts this segment to an outline of the area that the segment covers. * \return The area that would be covered by this extrusion segment. */ - Polygons toPolygons(); + Shape toShape(); /*! * Converts this segment to an outline of the area that the segment covers. @@ -63,7 +62,7 @@ class ExtrusionSegment * it will be included in the next extrusion move. Overrides class field * \ref is_reduced . */ - Polygons toPolygons(bool reduced); + Shape toShape(bool reduced); /*! * Discretize a variable-line-width extrusion segment into multiple diff --git a/include/utils/HalfEdge.h b/include/utils/HalfEdge.h index ae8736f589..4f6f3671d5 100644 --- a/include/utils/HalfEdge.h +++ b/include/utils/HalfEdge.h @@ -7,8 +7,8 @@ #include #include -#include "../utils/Point2LL.h" #include "Coord_t.h" +#include "geometry/Point2LL.h" namespace cura { diff --git a/include/utils/HalfEdgeNode.h b/include/utils/HalfEdgeNode.h index 163b45d07b..118655324c 100644 --- a/include/utils/HalfEdgeNode.h +++ b/include/utils/HalfEdgeNode.h @@ -6,7 +6,7 @@ #include -#include "Point2LL.h" +#include "geometry/Point2LL.h" namespace cura { diff --git a/include/utils/LayerVector.h b/include/utils/LayerVector.h new file mode 100644 index 0000000000..929f916297 --- /dev/null +++ b/include/utils/LayerVector.h @@ -0,0 +1,234 @@ +// Copyright (c) 2024 UltiMaker +// CuraEngine is released under the terms of the AGPLv3 or higher + +#ifndef UTILS_LAYER_VECTOR_H +#define UTILS_LAYER_VECTOR_H + +#include + +#include "raft.h" +#include "settings/types/LayerIndex.h" + +namespace cura +{ + +/*! + * \brief The LayerVector class mimics a std::vector but with the index being a LayerIndex, thus it can have negative + * values (for raft layers). It also ensures that the first element in the list is always on the very first layer. + * \note When calling the init() method, LayerVector will call Raft::getTotalExtraLayers() so it requires the settings + * to be setup. This is the reason why this is not done in the constructor, and has to be called manually. + * After that, it is assumed that this value will not change as long as the vector is used. + * \warning It is assumed that items are inserted in layer order, and without missing items, like a std::vector would do + */ +template +class LayerVector +{ + // Required for some std calls as a container + using value_type = T; + using iterator = typename std::vector::iterator; + using const_iterator = typename std::vector::const_iterator; + using reverse_iterator = typename std::vector::reverse_iterator; + using const_reverse_iterator = typename std::vector::const_reverse_iterator; + using reference = value_type&; + using const_reference = const value_type&; + using difference_type = typename std::vector::difference_type; + +public: + LayerVector() = default; + + /*! + * \brief Initializes the vector for use + * \param contains_raft_layers Indicates whether this vector will contain raft layers + * \param print_layers The number of print layers (not including raft layers). This is only for pre-reserving + * stored data and can be safely omitted. + * \note It is not mandatory to call this method if you do not intend to store raft layers, but still good practice + */ + void init(bool contains_raft_layers, size_t print_layers = 0) + { + delta_ = contains_raft_layers ? Raft::getTotalExtraLayers() : 0; + + vector_.clear(); + if (print_layers) + { + vector_.reserve(print_layers + delta_); + } + } + + const_iterator begin() const + { + return vector_.begin(); + } + + iterator begin() + { + return vector_.begin(); + } + + const_iterator end() const + { + return vector_.end(); + } + + iterator end() + { + return vector_.end(); + } + + const_reverse_iterator rbegin() const + { + return vector_.rbegin(); + } + + reverse_iterator rbegin() + { + return vector_.rbegin(); + } + + const_reverse_iterator rend() const + { + return vector_.rend(); + } + + reverse_iterator rend() + { + return vector_.rend(); + } + + const_reference operator[](const LayerIndex& pos) const + { + return vector_[static_cast(pos + delta_)]; + } + + reference operator[](const LayerIndex& pos) + { + return vector_[static_cast(pos + delta_)]; + } + + const_reference at(const LayerIndex& pos) const + { + return vector_.at(static_cast(pos + delta_)); + } + + reference at(const LayerIndex& pos) + { + return vector_.at(static_cast(pos + delta_)); + } + + const_reference front() const + { + return vector_.front(); + } + + reference front() + { + return vector_.front(); + } + + [[nodiscard]] const_iterator iterator_at(const LayerIndex& pos) const + { + LayerIndex::value_type index = pos + delta_; + if (index >= 0 && static_cast(index) < size()) + { + return std::next(begin(), static_cast(index)); + } + return end(); + } + + [[nodiscard]] iterator iterator_at(const LayerIndex& pos) + { + LayerIndex::value_type index = pos + delta_; + if (index >= 0 && static_cast(index) < size()) + { + return std::next(begin(), static_cast(index)); + } + return end(); + } + + /*! + * \brief Safe method to retrieve an element from the list + * \param pos The position of the element to be retrieved + * \return The element at the given position, or if there is none, a default-constructed value. + */ + value_type get(const LayerIndex& pos) const noexcept + { + LayerIndex::value_type index = pos + delta_; + if (index >= 0 && static_cast(index) < size()) + { + return vector_[static_cast(index)]; + } + return value_type{}; + } + + [[nodiscard]] LayerIndex getLayer(const const_iterator& it) const + { + return std::distance(begin(), it) - static_cast(delta_); + } + + [[nodiscard]] LayerIndex getLayer(const iterator& it) const + { + return std::distance(begin(), it) - static_cast(delta_); + } + + [[nodiscard]] LayerIndex getLayer(const const_reverse_iterator& it) const + { + return std::distance(it, rend()) - 1 - static_cast(delta_); + } + + [[nodiscard]] LayerIndex getLayer(const reverse_iterator& it) const + { + return std::distance(it, rend()) - 1 - static_cast(delta_); + } + + void pop_back() + { + vector_.pop_back(); + } + + void push_back(const_reference item) + { + vector_.push_back(item); + } + + void push_back(T&& item) + { + vector_.push_back(std::move(item)); + } + + [[nodiscard]] size_t size() const + { + return vector_.size(); + } + + [[nodiscard]] bool empty() const + { + return vector_.empty(); + } + + void reserve(size_t size) + { + vector_.reserve(size); + } + + void resize(size_t size) + { + vector_.resize(size); + } + + void clear() + { + vector_.clear(); + } + + void emplace_back(auto&&... args) + { + vector_.emplace_back(std::forward(args)...); + } + +private: + std::vector vector_; + size_t delta_{ 0 }; +}; + +} // namespace cura + +#endif // UTILS_LAYER_VECTOR_H diff --git a/include/utils/ListPolyIt.h b/include/utils/ListPolyIt.h index 0847305bdf..ed56a1825a 100644 --- a/include/utils/ListPolyIt.h +++ b/include/utils/ListPolyIt.h @@ -7,13 +7,18 @@ #include #include -#include "Point2LL.h" -#include "polygon.h" +#include "geometry/Point2LL.h" namespace cura { +class Polygon; +class Shape; + +using ListPolygon = std::list; //!< A polygon represented by a linked list instead of a vector +using ListPolygons = std::vector; //!< Polygons represented by a vector of linked lists instead of a vector of vectors + /*! * A wrapper class for a ListPolygon::iterator and a reference to the containing ListPolygon */ @@ -110,7 +115,7 @@ class ListPolyIt * \param polys The polygons to convert * \param result The converted polygons */ - static void convertPolygonsToLists(const Polygons& polys, ListPolygons& result); + static void convertPolygonsToLists(const Shape& shape, ListPolygons& result); /*! * Convert Polygons to ListPolygons @@ -118,7 +123,7 @@ class ListPolyIt * \param polys The polygons to convert * \param result The converted polygons */ - static void convertPolygonToList(ConstPolygonRef poly, ListPolygon& result); + static void convertPolygonToList(const Polygon& poly, ListPolygon& result); /*! * Convert ListPolygons to Polygons @@ -126,7 +131,7 @@ class ListPolyIt * \param list_polygons The polygons to convert * \param polygons The converted polygons */ - static void convertListPolygonsToPolygons(const ListPolygons& list_polygons, Polygons& polygons); + static void convertListPolygonsToPolygons(const ListPolygons& list_polygons, Shape& polygons); /*! * Convert ListPolygons to Polygons @@ -134,7 +139,7 @@ class ListPolyIt * \param list_polygons The polygons to convert * \param polygons The converted polygons */ - static void convertListPolygonToPolygon(const ListPolygon& list_polygon, PolygonRef polygon); + static void convertListPolygonToPolygon(const ListPolygon& list_polygon, Polygon& polygon); /*! * Insert a point into a ListPolygon if it's not a duplicate of the point before or the point after. diff --git a/include/utils/MinimumSpanningTree.h b/include/utils/MinimumSpanningTree.h index 599ab2273b..866c0d17e6 100644 --- a/include/utils/MinimumSpanningTree.h +++ b/include/utils/MinimumSpanningTree.h @@ -8,7 +8,7 @@ #include #include -#include "Point2LL.h" +#include "geometry/Point2LL.h" namespace cura { diff --git a/include/utils/MixedPolylineStitcher.h b/include/utils/MixedPolylineStitcher.h new file mode 100644 index 0000000000..9c092e1bcd --- /dev/null +++ b/include/utils/MixedPolylineStitcher.h @@ -0,0 +1,24 @@ +// Copyright (c) 2024 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. + +#ifndef UTILS_MIXED_POLYLINE_STITCHER_H +#define UTILS_MIXED_POLYLINE_STITCHER_H + +#include "PolylineStitcher.h" +#include "geometry/ClosedLinesSet.h" +#include "geometry/LinesSet.h" +#include "geometry/OpenLinesSet.h" + +namespace cura +{ + +class MixedLinesSet; + +class MixedPolylineStitcher : public PolylineStitcher +{ +public: + static void stitch(const OpenLinesSet& lines, MixedLinesSet& result, coord_t max_stitch_distance = MM2INT(0.1), coord_t snap_distance = 10); +}; + +} // namespace cura +#endif // UTILS_MIXED_POLYLINE_STITCHER_H diff --git a/include/utils/OpenPolylineStitcher.h b/include/utils/OpenPolylineStitcher.h new file mode 100644 index 0000000000..fb2a532f0b --- /dev/null +++ b/include/utils/OpenPolylineStitcher.h @@ -0,0 +1,18 @@ +// Copyright (c) 2024 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. + +#ifndef UTILS_OPEN_POLYLINE_STITCHER_H +#define UTILS_OPEN_POLYLINE_STITCHER_H + +#include "PolylineStitcher.h" +#include "geometry/LinesSet.h" +#include "geometry/OpenLinesSet.h" +#include "geometry/Shape.h" + +namespace cura +{ + +using OpenPolylineStitcher = PolylineStitcher; + +} // namespace cura +#endif // UTILS_OPEN_POLYLINE_STITCHER_H diff --git a/include/utils/PairHash.h b/include/utils/PairHash.h new file mode 100644 index 0000000000..a94993ed9a --- /dev/null +++ b/include/utils/PairHash.h @@ -0,0 +1,24 @@ +// Copyright (c) 2024 UltiMaker +// CuraEngine is released under the terms of the AGPLv3 or higher + +#ifndef UTILS_PAIRHASH_H +#define UTILS_PAIRHASH_H + +#include +#include + +namespace std +{ + +template +struct hash> +{ + size_t operator()(const std::pair& pair) const + { + return 31 * std::hash()(pair.first) + 59 * std::hash()(pair.second); + } +}; + +} // namespace std + +#endif // UTILS_PAIRHASH_H diff --git a/include/utils/Point2LL.h b/include/utils/Point2LL.h deleted file mode 100644 index 8623282fc2..0000000000 --- a/include/utils/Point2LL.h +++ /dev/null @@ -1,407 +0,0 @@ -// Copyright (c) 2020 Ultimaker B.V. -// CuraEngine is released under the terms of the AGPLv3 or higher. - -#ifndef UTILS_INT_POINT_H -#define UTILS_INT_POINT_H - -/** -The integer point classes are used as soon as possible and represent microns in 2D or 3D space. -Integer points are used to avoid floating point rounding errors, and because ClipperLib uses them. -*/ -#define INLINE static inline - -// Include Clipper to get the ClipperLib::IntPoint definition, which we reuse as Point definition. -#include -#include // for hash function object -#include // auto-serialization / auto-toString() -#include -#include -#include - -#include "../utils/math.h" // for PI. Use relative path to avoid pulling -#include "Point3LL.h" //For applying Point3Matrices. - -#ifdef __GNUC__ -#define DEPRECATED(func) func __attribute__((deprecated)) -#elif defined(_MSC_VER) -#define DEPRECATED(func) __declspec(deprecated) func -#else -#pragma message("WARNING: You need to implement DEPRECATED for this compiler") -#define DEPRECATED(func) func -#endif - - -namespace cura -{ - -/* 64bit Points are used mostly throughout the code, these are the 2D points from ClipperLib */ -typedef ClipperLib::IntPoint Point2LL; - -#define POINT_MIN std::numeric_limits::min() -#define POINT_MAX std::numeric_limits::max() - -static Point2LL no_point(std::numeric_limits::min(), std::numeric_limits::min()); - -/* Extra operators to make it easier to do math with the 64bit Point objects */ -INLINE Point2LL operator-(const Point2LL& p0) -{ - return Point2LL(-p0.X, -p0.Y); -} -INLINE Point2LL operator+(const Point2LL& p0, const Point2LL& p1) -{ - return Point2LL(p0.X + p1.X, p0.Y + p1.Y); -} -INLINE Point2LL operator-(const Point2LL& p0, const Point2LL& p1) -{ - return Point2LL(p0.X - p1.X, p0.Y - p1.Y); -} -INLINE Point2LL operator*(const Point2LL& p0, const coord_t i) -{ - return Point2LL(p0.X * i, p0.Y * i); -} -template::value, T>::type> // Use only for numeric types. -INLINE Point2LL operator*(const Point2LL& p0, const T i) -{ - return Point2LL(std::llrint(static_cast(p0.X) * i), std::llrint(static_cast(p0.Y) * i)); -} -template::value, T>::type> // Use only for numeric types. -INLINE Point2LL operator*(const T i, const Point2LL& p0) -{ - return p0 * i; -} -INLINE Point2LL operator/(const Point2LL& p0, const coord_t i) -{ - return Point2LL(p0.X / i, p0.Y / i); -} -INLINE Point2LL operator/(const Point2LL& p0, const Point2LL& p1) -{ - return Point2LL(p0.X / p1.X, p0.Y / p1.Y); -} -INLINE Point2LL operator%(const Point2LL& p0, const coord_t i) -{ - return Point2LL(p0.X % i, p0.Y % i); -} - -INLINE Point2LL& operator+=(Point2LL& p0, const Point2LL& p1) -{ - p0.X += p1.X; - p0.Y += p1.Y; - return p0; -} -INLINE Point2LL& operator-=(Point2LL& p0, const Point2LL& p1) -{ - p0.X -= p1.X; - p0.Y -= p1.Y; - return p0; -} - -INLINE bool operator<(const Point2LL& p0, const Point2LL& p1) -{ - return p0.X < p1.X || (p0.X == p1.X && p0.Y < p1.Y); -} - -/* ***** NOTE ***** - TL;DR: DO NOT implement operators *= and /= because of the default values in ClipperLib::IntPoint's constructor. - - We DO NOT implement operators *= and /= because the class Point is essentially a ClipperLib::IntPoint and it has a - constructor IntPoint(int x = 0, int y = 0), and this causes problems. If you implement *= as *=(int) and when you - do "Point a = a * 5", you probably intend to do "a.x *= 5" and "a.y *= 5", but with that constructor, it will create - an IntPoint(5, y = 0) and you end up with wrong results. - */ - -// INLINE bool operator==(const Point& p0, const Point& p1) { return p0.X==p1.X&&p0.Y==p1.Y; } -// INLINE bool operator!=(const Point& p0, const Point& p1) { return p0.X!=p1.X||p0.Y!=p1.Y; } - -INLINE coord_t vSize2(const Point2LL& p0) -{ - return p0.X * p0.X + p0.Y * p0.Y; -} -INLINE double vSize2f(const Point2LL& p0) -{ - return static_cast(p0.X) * static_cast(p0.X) + static_cast(p0.Y) * static_cast(p0.Y); -} - -INLINE bool shorterThen(const Point2LL& p0, const coord_t len) -{ - if (p0.X > len || p0.X < -len) - { - return false; - } - if (p0.Y > len || p0.Y < -len) - { - return false; - } - return vSize2(p0) <= len * len; -} - -INLINE bool shorterThan(const Point2LL& p0, const coord_t len) -{ - return shorterThen(p0, len); -} - -INLINE coord_t vSize(const Point2LL& p0) -{ - return std::llrint(sqrt(static_cast(vSize2(p0)))); -} - -INLINE double vSizeMM(const Point2LL& p0) -{ - double fx = INT2MM(p0.X); - double fy = INT2MM(p0.Y); - return sqrt(fx * fx + fy * fy); -} - -INLINE Point2LL normal(const Point2LL& p0, coord_t len) -{ - coord_t _len = vSize(p0); - if (_len < 1) - return Point2LL(len, 0); - return p0 * len / _len; -} - -INLINE Point2LL turn90CCW(const Point2LL& p0) -{ - return Point2LL(-p0.Y, p0.X); -} - -INLINE Point2LL rotate(const Point2LL& p0, double angle) -{ - const double cos_component = std::cos(angle); - const double sin_component = std::sin(angle); - const double x = static_cast(p0.X); - const double y = static_cast(p0.Y); - return Point2LL(std::llrint(cos_component * x - sin_component * y), std::llrint(sin_component * x + cos_component * y)); -} - -INLINE coord_t dot(const Point2LL& p0, const Point2LL& p1) -{ - return p0.X * p1.X + p0.Y * p1.Y; -} - -INLINE coord_t cross(const Point2LL& p0, const Point2LL& p1) -{ - return p0.X * p1.Y - p0.Y * p1.X; -} - -INLINE double angle(const Point2LL& p) -{ - double angle = std::atan2(p.X, p.Y) / std::numbers::pi * 180.0; - if (angle < 0.0) - angle += 360.0; - return angle; -} - -// Identity function, used to be able to make templated algorithms where the input is sometimes points, sometimes things that contain or can be converted to points. -INLINE const Point2LL& make_point(const Point2LL& p) -{ - return p; -} - -} // namespace cura - -namespace std -{ -template<> -struct hash -{ - size_t operator()(const cura::Point2LL& pp) const - { - static int prime = 31; - int result = 89; - result = static_cast(result * prime + pp.X); - result = static_cast(result * prime + pp.Y); - return static_cast(result); - } -}; -} // namespace std - -namespace cura -{ - -class PointMatrix -{ -public: - double matrix[4]; - - PointMatrix() - { - matrix[0] = 1; - matrix[1] = 0; - matrix[2] = 0; - matrix[3] = 1; - } - - PointMatrix(double rotation) - { - rotation = rotation / 180 * std::numbers::pi; - matrix[0] = cos(rotation); - matrix[1] = -sin(rotation); - matrix[2] = -matrix[1]; - matrix[3] = matrix[0]; - } - - PointMatrix(const Point2LL p) - { - matrix[0] = static_cast(p.X); - matrix[1] = static_cast(p.Y); - double f = sqrt((matrix[0] * matrix[0]) + (matrix[1] * matrix[1])); - matrix[0] /= f; - matrix[1] /= f; - matrix[2] = -matrix[1]; - matrix[3] = matrix[0]; - } - - static PointMatrix scale(double s) - { - PointMatrix ret; - ret.matrix[0] = s; - ret.matrix[3] = s; - return ret; - } - - Point2LL apply(const Point2LL p) const - { - const double x = static_cast(p.X); - const double y = static_cast(p.Y); - return Point2LL(std::llrint(x * matrix[0] + y * matrix[1]), std::llrint(x * matrix[2] + y * matrix[3])); - } - - /*! - * \warning only works on a rotation matrix! Output is incorrect for other types of matrix - */ - Point2LL unapply(const Point2LL p) const - { - const double x = static_cast(p.X); - const double y = static_cast(p.Y); - return Point2LL(std::llrint(x * matrix[0] + y * matrix[2]), std::llrint(x * matrix[1] + y * matrix[3])); - } - - PointMatrix inverse() const - { - PointMatrix ret; - double det = matrix[0] * matrix[3] - matrix[1] * matrix[2]; - ret.matrix[0] = matrix[3] / det; - ret.matrix[1] = -matrix[1] / det; - ret.matrix[2] = -matrix[2] / det; - ret.matrix[3] = matrix[0] / det; - return ret; - } -}; - -class Point3Matrix -{ -public: - double matrix[9]; - - Point3Matrix() - { - matrix[0] = 1; - matrix[1] = 0; - matrix[2] = 0; - matrix[3] = 0; - matrix[4] = 1; - matrix[5] = 0; - matrix[6] = 0; - matrix[7] = 0; - matrix[8] = 1; - } - - /*! - * Initializes the top left corner with the values of \p b - * and the rest as if it's a unit matrix - */ - Point3Matrix(const PointMatrix& b) - { - matrix[0] = b.matrix[0]; - matrix[1] = b.matrix[1]; - matrix[2] = 0; - matrix[3] = b.matrix[2]; - matrix[4] = b.matrix[3]; - matrix[5] = 0; - matrix[6] = 0; - matrix[7] = 0; - matrix[8] = 1; - } - - Point3LL apply(const Point3LL p) const - { - const double x = static_cast(p.x_); - const double y = static_cast(p.y_); - const double z = static_cast(p.z_); - return Point3LL( - std::llrint(x * matrix[0] + y * matrix[1] + z * matrix[2]), - std::llrint(x * matrix[3] + y * matrix[4] + z * matrix[5]), - std::llrint(x * matrix[6] + y * matrix[7] + z * matrix[8])); - } - - /*! - * Apply matrix to vector as homogeneous coordinates. - */ - Point2LL apply(const Point2LL p) const - { - Point3LL result = apply(Point3LL(p.X, p.Y, 1)); - return Point2LL(result.x_ / result.z_, result.y_ / result.z_); - } - - static Point3Matrix translate(const Point2LL p) - { - Point3Matrix ret; // uniform matrix - ret.matrix[2] = static_cast(p.X); - ret.matrix[5] = static_cast(p.Y); - return ret; - } - - Point3Matrix compose(const Point3Matrix& b) - { - Point3Matrix ret; - for (int outx = 0; outx < 3; outx++) - { - for (int outy = 0; outy < 3; outy++) - { - ret.matrix[outy * 3 + outx] = 0; - for (int in = 0; in < 3; in++) - { - ret.matrix[outy * 3 + outx] += matrix[outy * 3 + in] * b.matrix[in * 3 + outx]; - } - } - } - return ret; - } -}; - - -inline Point3LL operator+(const Point3LL& p3, const Point2LL& p2) -{ - return Point3LL(p3.x_ + p2.X, p3.y_ + p2.Y, p3.z_); -} -inline Point3LL& operator+=(Point3LL& p3, const Point2LL& p2) -{ - p3.x_ += p2.X; - p3.y_ += p2.Y; - return p3; -} - -inline Point2LL operator+(const Point2LL& p2, const Point3LL& p3) -{ - return Point2LL(p3.x_ + p2.X, p3.y_ + p2.Y); -} - - -inline Point3LL operator-(const Point3LL& p3, const Point2LL& p2) -{ - return Point3LL(p3.x_ - p2.X, p3.y_ - p2.Y, p3.z_); -} -inline Point3LL& operator-=(Point3LL& p3, const Point2LL& p2) -{ - p3.x_ -= p2.X; - p3.y_ -= p2.Y; - return p3; -} - -inline Point2LL operator-(const Point2LL& p2, const Point3LL& p3) -{ - return Point2LL(p2.X - p3.x_, p2.Y - p3.y_); -} - -} // namespace cura -#endif // UTILS_INT_POINT_H diff --git a/include/utils/Point3D.h b/include/utils/Point3D.h index 8405d03c4d..6000d9be76 100644 --- a/include/utils/Point3D.h +++ b/include/utils/Point3D.h @@ -7,7 +7,7 @@ #include #include -#include "Point2LL.h" +#include "geometry/Point2LL.h" namespace cura diff --git a/include/utils/Point3F.h b/include/utils/Point3F.h index 44262ad2b0..e67702937c 100644 --- a/include/utils/Point3F.h +++ b/include/utils/Point3F.h @@ -7,8 +7,8 @@ #include #include -#include "Point2LL.h" #include "Point3D.h" +#include "geometry/Point2LL.h" namespace cura diff --git a/include/utils/PolygonConnector.h b/include/utils/PolygonConnector.h index 3dc7b75dec..38a3c1fe00 100644 --- a/include/utils/PolygonConnector.h +++ b/include/utils/PolygonConnector.h @@ -1,4 +1,4 @@ -// Copyright (c) 2022 Ultimaker B.V. +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef UTILS_POLYGON_CONNECTOR_H @@ -9,10 +9,12 @@ #endif #include -#include "Point2LL.h" +#include "geometry/Point2LL.h" +#include "geometry/Polygon.h" #include "linearAlg2D.h" -#include "polygon.h" #include "polygonUtils.h" +#include "settings/types/Ratio.h" +#include "utils/math.h" namespace cura { @@ -75,7 +77,7 @@ class PolygonConnector /*! * Add polygons to be connected by a future call to \ref PolygonConnector::connect() */ - void add(const Polygons& input); + void add(const Shape& input); /*! * Add variable-width paths to be connected by a future call to @@ -98,7 +100,7 @@ class PolygonConnector * \param output_paths Paths that were connected as much as possible. These * are expected to be empty to start with. */ - void connect(Polygons& output_polygons, std::vector& output_paths); + void connect(Shape& output_polygons, std::vector& output_paths); protected: coord_t line_width_; //!< The distance between the line segments which connect two polygons. diff --git a/include/utils/PolygonsPointIndex.h b/include/utils/PolygonsPointIndex.h index c4ce020105..a9e94709f5 100644 --- a/include/utils/PolygonsPointIndex.h +++ b/include/utils/PolygonsPointIndex.h @@ -6,8 +6,9 @@ #include -#include "Point2LL.h" -#include "polygon.h" +#include "geometry/Point2LL.h" +#include "geometry/Polygon.h" +#include "geometry/Shape.h" namespace cura @@ -79,7 +80,7 @@ class PathsPointIndex /*! * Get the polygon to which this PolygonsPointIndex refers */ - ConstPolygonRef getPolygon() const; + const Polygon& getPolygon() const; /*! * Test whether two iterators refer to the same polygon in the same polygon list. @@ -145,7 +146,7 @@ class PathsPointIndex } }; -using PolygonsPointIndex = PathsPointIndex; +using PolygonsPointIndex = PathsPointIndex; /*! @@ -153,14 +154,7 @@ using PolygonsPointIndex = PathsPointIndex; */ struct PolygonsPointIndexSegmentLocator { - std::pair operator()(const PolygonsPointIndex& val) const - { - ConstPolygonRef poly = (*val.polygons_)[val.poly_idx_]; - Point2LL start = poly[val.point_idx_]; - size_t next_point_idx = (val.point_idx_ + 1ul) % poly.size(); - Point2LL end = poly[next_point_idx]; - return std::pair(start, end); - } + std::pair operator()(const PolygonsPointIndex& val) const; }; @@ -176,7 +170,7 @@ struct PathsPointIndexLocator } }; -using PolygonsPointIndexLocator = PathsPointIndexLocator; +using PolygonsPointIndexLocator = PathsPointIndexLocator; } // namespace cura diff --git a/include/utils/PolygonsSegmentIndex.h b/include/utils/PolygonsSegmentIndex.h index ab37fa2f06..c0c5d395c9 100644 --- a/include/utils/PolygonsSegmentIndex.h +++ b/include/utils/PolygonsSegmentIndex.h @@ -18,7 +18,7 @@ class PolygonsSegmentIndex : public PolygonsPointIndex { public: PolygonsSegmentIndex(); - PolygonsSegmentIndex(const Polygons* polygons, unsigned int poly_idx, unsigned int point_idx); + PolygonsSegmentIndex(const Shape* polygons, unsigned int poly_idx, unsigned int point_idx); Point2LL from() const; diff --git a/include/utils/PolylineStitcher.h b/include/utils/PolylineStitcher.h index 7d608f1ee7..cddfb0effa 100644 --- a/include/utils/PolylineStitcher.h +++ b/include/utils/PolylineStitcher.h @@ -5,20 +5,19 @@ #define UTILS_POLYLINE_STITCHER_H #include -#include -#include "PolygonsPointIndex.h" #include "SparsePointGrid.h" -#include "SymmetricPair.h" -#include "polygon.h" namespace cura { +template +class PathsPointIndex; + /*! * Class for stitching polylines into longer polylines or into polygons */ -template +template class PolylineStitcher { public: @@ -52,191 +51,12 @@ class PolylineStitcher * \param snap_distance Points closer than this distance are considered to * be the same point. */ - static void stitch(const Paths& lines, Paths& result_lines, Paths& result_polygons, coord_t max_stitch_distance = MM2INT(0.1), coord_t snap_distance = 10) - { - if (lines.empty()) - { - return; - } - - SparsePointGrid, PathsPointIndexLocator> grid(max_stitch_distance, lines.size() * 2); - - // populate grid - for (size_t line_idx = 0; line_idx < lines.size(); line_idx++) - { - const auto line = lines[line_idx]; - grid.insert(PathsPointIndex(&lines, line_idx, 0)); - grid.insert(PathsPointIndex(&lines, line_idx, line.size() - 1)); - } - - std::vector processed(lines.size(), false); - - for (size_t line_idx = 0; line_idx < lines.size(); line_idx++) - { - if (processed[line_idx]) - { - continue; - } - processed[line_idx] = true; - const auto line = lines[line_idx]; - bool should_close = isOdd(line); - - Path chain = line; - bool closest_is_closing_polygon = false; - for (bool go_in_reverse_direction : { false, true }) // first go in the unreversed direction, to try to prevent the chain.reverse() operation. - { // NOTE: Implementation only works for this order; we currently only re-reverse the chain when it's closed. - if (go_in_reverse_direction) - { // try extending chain in the other direction - chain.reverse(); - } - coord_t chain_length = chain.polylineLength(); - - while (true) - { - Point2LL from = make_point(chain.back()); - - PathsPointIndex closest; - coord_t closest_distance = std::numeric_limits::max(); - grid.processNearby( - from, - max_stitch_distance, - std::function&)>( - [from, - &chain, - &closest, - &closest_is_closing_polygon, - &closest_distance, - &processed, - &chain_length, - go_in_reverse_direction, - max_stitch_distance, - snap_distance, - should_close](const PathsPointIndex& nearby) -> bool - { - bool is_closing_segment = false; - coord_t dist = vSize(nearby.p() - from); - if (dist > max_stitch_distance) - { - return true; // keep looking - } - if (vSize2(nearby.p() - make_point(chain.front())) < snap_distance * snap_distance) - { - if (chain_length + dist < 3 * max_stitch_distance // prevent closing of small poly, cause it might be able to continue making a larger polyline - || chain.size() <= 2) // don't make 2 vert polygons - { - return true; // look for a better next line - } - is_closing_segment = true; - if (! should_close) - { - dist += 10; // prefer continuing polyline over closing a polygon; avoids closed zigzags from being printed separately - // continue to see if closing segment is also the closest - // there might be a segment smaller than [max_stitch_distance] which closes the polygon better - } - else - { - dist -= 10; // Prefer closing the polygon if it's 100% even lines. Used to create closed contours. - // Continue to see if closing segment is also the closest. - } - } - else if (processed[nearby.poly_idx_]) - { // it was already moved to output - return true; // keep looking for a connection - } - bool nearby_would_be_reversed = nearby.point_idx_ != 0; - nearby_would_be_reversed - = nearby_would_be_reversed != go_in_reverse_direction; // flip nearby_would_be_reversed when searching in the reverse direction - if (! canReverse(nearby) && nearby_would_be_reversed) - { // connecting the segment would reverse the polygon direction - return true; // keep looking for a connection - } - if (! canConnect(chain, (*nearby.polygons_)[nearby.poly_idx_])) - { - return true; // keep looking for a connection - } - if (dist < closest_distance) - { - closest_distance = dist; - closest = nearby; - closest_is_closing_polygon = is_closing_segment; - } - if (dist < snap_distance) - { // we have found a good enough next line - return false; // stop looking for alternatives - } - return true; // keep processing elements - })); - - if (! closest.initialized() // we couldn't find any next line - || closest_is_closing_polygon // we closed the polygon - ) - { - break; - } - - - coord_t segment_dist = vSize(make_point(chain.back()) - closest.p()); - assert(segment_dist <= max_stitch_distance + 10); - const size_t old_size = chain.size(); - if (closest.point_idx_ == 0) - { - auto start_pos = (*closest.polygons_)[closest.poly_idx_].begin(); - if (segment_dist < snap_distance) - { - ++start_pos; - } - chain.insert(chain.end(), start_pos, (*closest.polygons_)[closest.poly_idx_].end()); - } - else - { - auto start_pos = (*closest.polygons_)[closest.poly_idx_].rbegin(); - if (segment_dist < snap_distance) - { - ++start_pos; - } - chain.insert(chain.end(), start_pos, (*closest.polygons_)[closest.poly_idx_].rend()); - } - for (size_t i = old_size; i < chain.size(); ++i) // Update chain length. - { - chain_length += vSize(chain[i] - chain[i - 1]); - } - should_close = should_close & ! isOdd((*closest.polygons_)[closest.poly_idx_]); // If we connect an even to an odd line, we should no longer try to close it. - assert(! processed[closest.poly_idx_]); - processed[closest.poly_idx_] = true; - } - - if (closest_is_closing_polygon) - { - if (go_in_reverse_direction) - { // re-reverse chain to retain original direction - // NOTE: not sure if this code could ever be reached, since if a polygon can be closed that should be already possible in the forward direction - chain.reverse(); - } - - break; // don't consider reverse direction - } - } - if (closest_is_closing_polygon) - { - result_polygons.emplace_back(chain); - } - else - { - PathsPointIndex ppi_here(&lines, line_idx, 0); - if (! canReverse(ppi_here)) - { // Since closest_is_closing_polygon is false we went through the second iterations of the for-loop, where go_in_reverse_direction is true - // the polyline isn't allowed to be reversed, so we re-reverse it. - chain.reverse(); - } - result_lines.emplace_back(chain); - } - } - } + static void stitch(const InputPaths& lines, InputPaths& result_lines, OutputPaths& result_polygons, coord_t max_stitch_distance = MM2INT(0.1), coord_t snap_distance = 10); /*! * Whether a polyline is allowed to be reversed. (Not true for wall polylines which are not odd) */ - static bool canReverse(const PathsPointIndex& polyline); + static bool canReverse(const PathsPointIndex& polyline); /*! * Whether two paths are allowed to be connected. @@ -245,6 +65,9 @@ class PolylineStitcher static bool canConnect(const Path& a, const Path& b); static bool isOdd(const Path& line); + +private: + static void pushToClosedResult(OutputPaths& result_polygons, const Path& polyline); }; } // namespace cura diff --git a/include/utils/SVG.h b/include/utils/SVG.h index 058bacc414..96bcfa0a45 100644 --- a/include/utils/SVG.h +++ b/include/utils/SVG.h @@ -12,7 +12,7 @@ #include "AABB.h" #include "ExtrusionLine.h" //To accept variable-width paths. #include "NoCopy.h" -#include "Point2LL.h" +#include "geometry/Point2LL.h" namespace cura { @@ -99,15 +99,15 @@ class SVG : NoCopy void writeComment(const std::string& comment) const; - void writeAreas(const Polygons& polygons, const ColorObject color = Color::GRAY, const ColorObject outline_color = Color::BLACK, const double stroke_width = 1.0) const; + void writeAreas(const Shape& polygons, const ColorObject color = Color::GRAY, const ColorObject outline_color = Color::BLACK, const double stroke_width = 1.0) const; - void writeAreas(ConstPolygonRef polygon, const ColorObject color = Color::GRAY, const ColorObject outline_color = Color::BLACK, const double stroke_width = 1.0) const; + void writeAreas(const Polygon& polygon, const ColorObject color = Color::GRAY, const ColorObject outline_color = Color::BLACK, const double stroke_width = 1.0) const; void writePoint(const Point2LL& p, const bool write_coords = false, const double size = 5.0, const ColorObject color = Color::BLACK) const; - void writePoints(ConstPolygonRef poly, const bool write_coords = false, const double size = 5.0, const ColorObject color = Color::BLACK) const; + void writePoints(const Polygon& poly, const bool write_coords = false, const double size = 5.0, const ColorObject color = Color::BLACK) const; - void writePoints(const Polygons& polygons, const bool write_coords = false, const double size = 5.0, const ColorObject color = Color::BLACK) const; + void writePoints(const Shape& polygons, const bool write_coords = false, const double size = 5.0, const ColorObject color = Color::BLACK) const; /*! * \brief Draws a polyline on the canvas. @@ -144,13 +144,13 @@ class SVG : NoCopy void writeText(const Point2LL& p, const std::string& txt, const ColorObject color = Color::BLACK, const double font_size = 10.0) const; - void writePolygons(const Polygons& polys, const ColorObject color = Color::BLACK, const double stroke_width = 1.0) const; + void writePolygons(const Shape& polys, const ColorObject color = Color::BLACK, const double stroke_width = 1.0, const bool flush = true) const; - void writePolygon(ConstPolygonRef poly, const ColorObject color = Color::BLACK, const double stroke_width = 1.0) const; + void writePolygon(Polygon poly, const ColorObject color = Color::BLACK, const double stroke_width = 1.0, const bool flush = true) const; - void writePolylines(const Polygons& polys, const ColorObject color = Color::BLACK, const double stroke_width = 1.0) const; + void writePolylines(const Shape& polys, const ColorObject color = Color::BLACK, const double stroke_width = 1.0) const; - void writePolyline(ConstPolygonRef poly, const ColorObject color = Color::BLACK, const double stroke_width = 1.0) const; + void writePolyline(const Polygon& poly, const ColorObject color = Color::BLACK, const double stroke_width = 1.0) const; /*! * Draw variable-width paths into the image. diff --git a/include/utils/Simplify.h b/include/utils/Simplify.h index 3ca5b0009d..d06c018568 100644 --- a/include/utils/Simplify.h +++ b/include/utils/Simplify.h @@ -4,14 +4,25 @@ #ifndef UTILS_SIMPLIFY_H #define UTILS_SIMPLIFY_H -#include "../settings/Settings.h" //To load the parameters from a Settings object. -#include "ExtrusionLine.h" -#include "linearAlg2D.h" //To calculate line deviations and intersecting lines. -#include "polygon.h" +#include "geometry/Point2LL.h" +#include "utils/Coord_t.h" + namespace cura { +template +class LinesSet; +struct ExtrusionLine; +struct ExtrusionJunction; +class MixedLinesSet; +class Settings; +class Shape; +class Polygon; +class OpenPolyline; +class ClosedPolyline; +class Polyline; + /*! * Utility class to reduce the resolution of polygons and polylines, under * certain constraints. @@ -82,7 +93,7 @@ class Simplify * \param polygons The polygons to simplify. * \return The simplified polygons. */ - Polygons polygon(const Polygons& polygons) const; + Shape polygon(const Shape& polygons) const; /*! * Simplify a polygon. @@ -105,7 +116,17 @@ class Simplify * \param polylines The polylines to simplify. * \return The simplified polylines. */ - Polygons polyline(const Polygons& polylines) const; + template + LinesSet polyline(const LinesSet& polylines) const; + + /*! + * Simplify a batch of polylines. + * + * The endpoints of each polyline cannot be altered. + * \param polylines The polylines to simplify. + * \return The simplified polylines. + */ + MixedLinesSet polyline(const MixedLinesSet& polylines) const; /*! * Simplify a polyline. @@ -114,7 +135,15 @@ class Simplify * \param polyline The polyline to simplify. * \return The simplified polyline. */ - Polygon polyline(const Polygon& polyline) const; + OpenPolyline polyline(const OpenPolyline& polyline) const; + + /*! + * Simplify a polyline. + * + * \param polyline The polyline to simplify. + * \return The simplified polyline. + */ + ClosedPolyline polyline(const ClosedPolyline& polyline) const; /*! * Simplify a variable-line-width polyline. @@ -133,240 +162,6 @@ class Simplify */ constexpr static coord_t min_resolution = 5; // 5 units, regardless of how big those are, to allow for rounding errors. - template - bool detectSmall(const Polygonal& polygon, const coord_t& min_size) const - { - if (polygon.size() < min_size) // For polygon, 2 or fewer vertices is degenerate. Delete it. For polyline, 1 vertex is degenerate. - { - return true; - } - if (polygon.size() == min_size) - { - const auto a = getPosition(polygon[0]); - const auto b = getPosition(polygon[1]); - const auto c = getPosition(polygon[polygon.size() - 1]); - if (std::max(std::max(vSize2(b - a), vSize2(c - a)), vSize2(c - b)) < min_resolution * min_resolution) - { - // ... unless they are degenetate. - return true; - } - } - return false; - } - - /*! - * The main simplification algorithm starts here. - * \tparam Polygonal A polygonal object, which is a list of vertices. - * \param polygon The polygonal chain to simplify. - * \param is_closed Whether this is a closed polygon or an open polyline. - * \return A simplified polygonal chain. - */ - template - Polygonal simplify(const Polygonal& polygon, const bool is_closed) const - { - const size_t min_size = is_closed ? 3 : 2; - if (detectSmall(polygon, min_size)) - { - return createEmpty(polygon); - } - if (polygon.size() == min_size) // For polygon, don't reduce below 3. For polyline, not below 2. - { - return polygon; - } - - std::vector to_delete(polygon.size(), false); - auto comparator = [](const std::pair& vertex_a, const std::pair& vertex_b) - { - return vertex_a.second > vertex_b.second || (vertex_a.second == vertex_b.second && vertex_a.first > vertex_b.first); - }; - std::priority_queue, std::vector>, decltype(comparator)> by_importance(comparator); - - Polygonal result = polygon; // Make a copy so that we can also shift vertices. - for (int64_t current_removed = -1; (polygon.size() - current_removed) > min_size && current_removed != 0;) - { - current_removed = 0; - - // Add the initial points. - for (size_t i = 0; i < result.size(); ++i) - { - if (to_delete[i]) - { - continue; - } - const coord_t vertex_importance = importance(result, to_delete, i, is_closed); - by_importance.emplace(i, vertex_importance); - } - - // Iteratively remove the least important point until a threshold. - coord_t vertex_importance = 0; - while (! by_importance.empty() && (polygon.size() - current_removed) > min_size) - { - std::pair vertex = by_importance.top(); - by_importance.pop(); - // The importance may have changed since this vertex was inserted. Re-compute it now. - // If it doesn't change, it's safe to process. - vertex_importance = importance(result, to_delete, vertex.first, is_closed); - if (vertex_importance != vertex.second) - { - by_importance.emplace(vertex.first, vertex_importance); // Re-insert with updated importance. - continue; - } - - if (vertex_importance <= max_deviation_ * max_deviation_) - { - current_removed += remove(result, to_delete, vertex.first, vertex_importance, is_closed) ? 1 : 0; - } - } - } - - // Now remove the marked vertices in one sweep. - Polygonal filtered = createEmpty(polygon); - for (size_t i = 0; i < result.size(); ++i) - { - if (! to_delete[i]) - { - appendVertex(filtered, result[i]); - } - } - - if (detectSmall(filtered, min_size)) - { - return createEmpty(filtered); - } - return filtered; - } - - /*! - * A measure of the importance of a vertex. - * \tparam Polygonal A polygonal object, which is a list of vertices. - * \param polygon The polygon or polyline the vertex is part of. - * \param to_delete For each vertex, whether it is set to be deleted. - * \param index The vertex index to compute the importance of. - * \param is_closed Whether the polygon is closed (a polygon) or open - * (a polyline). - * \return A measure of how important the vertex is. Higher importance means - * that the vertex should probably be retained in the output. - */ - template - coord_t importance(const Polygonal& polygon, const std::vector& to_delete, const size_t index, const bool is_closed) const - { - const size_t poly_size = polygon.size(); - if (! is_closed && (index == 0 || index == poly_size - 1)) - { - return std::numeric_limits::max(); // Endpoints of the polyline must always be retained. - } - // From here on out we can safely look at the vertex neighbors and assume it's a polygon. We won't go out of bounds of the polyline. - - const Point2LL& vertex = getPosition(polygon[index]); - const size_t before_index = previousNotDeleted(index, to_delete); - const size_t after_index = nextNotDeleted(index, to_delete); - - const coord_t area_deviation = getAreaDeviation(polygon[before_index], polygon[index], polygon[after_index]); - if (area_deviation > max_area_deviation_) // Removing this line causes the variable line width to get flattened out too much. - { - return std::numeric_limits::max(); - } - - const Point2LL& before = getPosition(polygon[before_index]); - const Point2LL& after = getPosition(polygon[after_index]); - const coord_t deviation2 = LinearAlg2D::getDist2FromLine(vertex, before, after); - if (deviation2 <= min_resolution * min_resolution) // Deviation so small that it's always desired to remove them. - { - return deviation2; - } - if (vSize2(before - vertex) > max_resolution_ * max_resolution_ && vSize2(after - vertex) > max_resolution_ * max_resolution_) - { - return std::numeric_limits::max(); // Long line segments, no need to remove this one. - } - return deviation2; - } - - /*! - * Mark a vertex for removal. - * - * This function looks in the vertex and the four edges surrounding it to - * determine the best way to remove the given vertex. It may choose instead - * to delete an edge, fusing two vertices together. - * \tparam Polygonal A polygonal object, which is a list of vertices. - * \param polygon The polygon to remove a vertex from. - * \param to_delete The vertices that have been marked for deletion so far. - * This will be edited in-place. - * \param vertex The index of the vertex to remove. - * \param deviation2 The previously found deviation for this vertex. - * \param is_closed Whether we're working on a closed polygon or an open - \return Whether something is actually removed - * polyline. - */ - template - bool remove(Polygonal& polygon, std::vector& to_delete, const size_t vertex, const coord_t deviation2, const bool is_closed) const - { - if (deviation2 <= min_resolution * min_resolution) - { - // At less than the minimum resolution we're always allowed to delete the vertex. - // Even if the adjacent line segments are very long. - to_delete[vertex] = true; - return true; - } - - const size_t before = previousNotDeleted(vertex, to_delete); - const size_t after = nextNotDeleted(vertex, to_delete); - const Point2LL& vertex_position = getPosition(polygon[vertex]); - const Point2LL& before_position = getPosition(polygon[before]); - const Point2LL& after_position = getPosition(polygon[after]); - const coord_t length2_before = vSize2(vertex_position - before_position); - const coord_t length2_after = vSize2(vertex_position - after_position); - - if (length2_before <= max_resolution_ * max_resolution_ && length2_after <= max_resolution_ * max_resolution_) // Both adjacent line segments are short. - { - // Removing this vertex does little harm. No long lines will be shifted. - to_delete[vertex] = true; - return true; - } - - // Otherwise, one edge next to this vertex is longer than max_resolution. The other is shorter. - // In this case we want to remove the short edge by replacing it with a vertex where the two surrounding edges intersect. - // Find the two line segments surrounding the short edge here ("before" and "after" edges). - Point2LL before_from, before_to, after_from, after_to; - if (length2_before <= length2_after) // Before is the shorter line. - { - if (! is_closed && before == 0) // No edge before the short edge. - { - return false; // Edge cannot be deleted without shifting a long edge. Don't remove anything. - } - const size_t before_before = previousNotDeleted(before, to_delete); - before_from = getPosition(polygon[before_before]); - before_to = getPosition(polygon[before]); - after_from = getPosition(polygon[vertex]); - after_to = getPosition(polygon[after]); - } - else - { - if (! is_closed && after == polygon.size() - 1) // No edge after the short edge. - { - return false; // Edge cannot be deleted without shifting a long edge. Don't remove anything. - } - const size_t after_after = nextNotDeleted(after, to_delete); - before_from = getPosition(polygon[before]); - before_to = getPosition(polygon[vertex]); - after_from = getPosition(polygon[after]); - after_to = getPosition(polygon[after_after]); - } - Point2LL intersection; - const bool did_intersect = LinearAlg2D::lineLineIntersection(before_from, before_to, after_from, after_to, intersection); - if (! did_intersect) // Lines are parallel. - { - return false; // Cannot remove edge without shifting a long edge. Don't remove anything. - } - const coord_t intersection_deviation = LinearAlg2D::getDist2FromLineSegment(before_to, intersection, after_from); - if (intersection_deviation <= max_deviation_ * max_deviation_) // Intersection point doesn't deviate too much. Use it! - { - to_delete[vertex] = true; - polygon[length2_before <= length2_after ? before : after] = createIntersection(polygon[before], intersection, polygon[after]); - return true; - } - return false; - } - /*! * Helper method to find the index of the next vertex that is not about to * get deleted. @@ -393,22 +188,6 @@ class Simplify */ size_t previousNotDeleted(size_t index, const std::vector& to_delete) const; - /*! - * Create an empty polygon with the same properties as an original polygon, - * but without the vertex data. - * \param original The polygon to copy the properties from. - * \return An empty polygon. - */ - Polygon createEmpty(const Polygon& original) const; - - /*! - * Create an empty extrusion line with the same properties as an original - * extrusion line, but without the vertex data. - * \param original The extrusion line to copy the properties from. - * \return An empty extrusion line. - */ - ExtrusionLine createEmpty(const ExtrusionLine& original) const; - /*! * Append a vertex to this polygon. * @@ -416,7 +195,7 @@ class Simplify * \param polygon The polygon to add to. * \param vertex The vertex to add. */ - void appendVertex(Polygon& polygon, const Point2LL& vertex) const; + void appendVertex(Polyline& polygon, const Point2LL& vertex) const; /*! * Append a vertex to this extrusion line. @@ -488,6 +267,62 @@ class Simplify * \return The area deviation that would be caused by removing the vertex. */ coord_t getAreaDeviation(const ExtrusionJunction& before, const ExtrusionJunction& vertex, const ExtrusionJunction& after) const; + +private: + /*! + * Create an empty polygonal with the same properties as an original polygon, + * but without the vertex data. + * \param original The polygonal to copy the properties from. + * \return An empty polygonal. + */ + template + static Polygonal createEmpty(const Polygonal& original); + + template + bool detectSmall(const Polygonal& polygon, const coord_t& min_size) const; + + /*! + * The main simplification algorithm starts here. + * \tparam Polygonal A polygonal object, which is a list of vertices. + * \param polygon The polygonal chain to simplify. + * \param is_closed Whether this is a closed polygon or an open polyline. + * \return A simplified polygonal chain. + */ + template + Polygonal simplify(const Polygonal& polygon, const bool is_closed) const; + + /*! + * A measure of the importance of a vertex. + * \tparam Polygonal A polygonal object, which is a list of vertices. + * \param polygon The polygon or polyline the vertex is part of. + * \param to_delete For each vertex, whether it is set to be deleted. + * \param index The vertex index to compute the importance of. + * \param is_closed Whether the polygon is closed (a polygon) or open + * (a polyline). + * \return A measure of how important the vertex is. Higher importance means + * that the vertex should probably be retained in the output. + */ + template + coord_t importance(const Polygonal& polygon, const std::vector& to_delete, const size_t index, const bool is_closed) const; + + /*! + * Mark a vertex for removal. + * + * This function looks in the vertex and the four edges surrounding it to + * determine the best way to remove the given vertex. It may choose instead + * to delete an edge, fusing two vertices together. + * \tparam Polygonal A polygonal object, which is a list of vertices. + * \param polygon The polygon to remove a vertex from. + * \param to_delete The vertices that have been marked for deletion so far. + * This will be edited in-place. + * \param vertex The index of the vertex to remove. + * \param deviation2 The previously found deviation for this vertex. + * \param is_closed Whether we're working on a closed polygon or an open + \return Whether something is actually removed + * polyline. + */ + template + bool remove(Polygonal& polygon, std::vector& to_delete, const size_t vertex, const coord_t deviation2, const bool is_closed) const; }; } // namespace cura diff --git a/include/utils/SparseGrid.h b/include/utils/SparseGrid.h index 11b0708942..4705d69a60 100644 --- a/include/utils/SparseGrid.h +++ b/include/utils/SparseGrid.h @@ -10,8 +10,8 @@ #include #include -#include "Point2LL.h" #include "SquareGrid.h" +#include "geometry/Point2LL.h" namespace cura { diff --git a/include/utils/SparseLineGrid.h b/include/utils/SparseLineGrid.h index 5b22818797..197767d30b 100644 --- a/include/utils/SparseLineGrid.h +++ b/include/utils/SparseLineGrid.h @@ -10,9 +10,9 @@ #include #include -#include "Point2LL.h" #include "SVG.h" // debug #include "SparseGrid.h" +#include "geometry/Point2LL.h" namespace cura { diff --git a/include/utils/SparsePointGrid.h b/include/utils/SparsePointGrid.h index 4565a5dc4a..cb90667095 100644 --- a/include/utils/SparsePointGrid.h +++ b/include/utils/SparsePointGrid.h @@ -9,8 +9,8 @@ #include #include -#include "Point2LL.h" #include "SparseGrid.h" +#include "geometry/Point2LL.h" namespace cura { diff --git a/include/utils/SparsePointGridInclusive.h b/include/utils/SparsePointGridInclusive.h index 962c0d602e..f5f30dc65d 100644 --- a/include/utils/SparsePointGridInclusive.h +++ b/include/utils/SparsePointGridInclusive.h @@ -9,8 +9,8 @@ #include #include -#include "Point2LL.h" #include "SparsePointGrid.h" +#include "geometry/Point2LL.h" namespace cura { diff --git a/include/utils/SquareGrid.h b/include/utils/SquareGrid.h index ebbab19ca2..90665d5e81 100644 --- a/include/utils/SquareGrid.h +++ b/include/utils/SquareGrid.h @@ -9,7 +9,7 @@ #include #include -#include "Point2LL.h" +#include "geometry/Point2LL.h" namespace cura { diff --git a/include/utils/SymmetricPair.h b/include/utils/SymmetricPair.h deleted file mode 100644 index b7e3e1dc4e..0000000000 --- a/include/utils/SymmetricPair.h +++ /dev/null @@ -1,89 +0,0 @@ -//Copyright (c) 2020 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. - -#ifndef UTILS_SYMMETRIC_PAIR -#define UTILS_SYMMETRIC_PAIR - -#include // pair - -namespace cura -{ - -/*! - * A utility class for a pair of which the order between the first and the second doesn't matter. - * - * \tparam A The type of both elements of the pair. - */ -template -class SymmetricPair : public std::pair -{ -public: - /*! - * Forwarding std::pair constructor - */ - template - SymmetricPair(const SymmetricPair& pr) - : std::pair(pr) - { - } - /*! - * Forwarding std::pair constructor - */ - template - SymmetricPair(SymmetricPair&& pr) - : std::pair(pr) - { - } - /*! - * Forwarding std::pair constructor - */ - SymmetricPair(const A& first, const A& second) - : std::pair(first, second) - { - } - /*! - * Forwarding std::pair constructor - */ - template - SymmetricPair(U&& first, U&& second) - : std::pair(first, second) - { - } - /*! - * Forwarding std::pair constructor - */ - template - SymmetricPair(std::piecewise_construct_t pwc, std::tuple first_args, std::tuple second_args) - : std::pair(pwc, first_args, second_args) - { - } - - /*! - * Equality operator which checks if two SymmetricPairs are equal regardless of the order between first and second - */ - bool operator==(const SymmetricPair& other) const - { - return (std::pair::first == other.first && std::pair::second == other.second) || (std::pair::first == other.second && std::pair::second == other.first); - } -}; - -}//namespace cura - -namespace std -{ - -/*! - * Hash operator which creates a hash regardless of the order between first and second - */ -template -struct hash> -{ - size_t operator()(const cura::SymmetricPair& pr) const - { // has to be symmetric wrt a and b! - return std::hash()(pr.first) + std::hash()(pr.second); - } -}; -}//namespace std - - -#endif // UTILS_SYMMETRIC_PAIR \ No newline at end of file diff --git a/include/utils/ToolpathVisualizer.h b/include/utils/ToolpathVisualizer.h index d3ad54ac7a..57f808b702 100644 --- a/include/utils/ToolpathVisualizer.h +++ b/include/utils/ToolpathVisualizer.h @@ -4,7 +4,7 @@ #include "ExtrusionSegment.h" #include "SVG.h" -#include "polygon.h" +#include "geometry/Polygon.h" namespace cura { @@ -21,11 +21,11 @@ class ToolpathVisualizer { } - void outline(const Polygons& input); + void outline(const Shape& input); void toolpaths(const std::vector& all_segments, bool rounded_visualization = true); - void underfill(const Polygons& underfills); - void overfill(const Polygons& overfills, const Polygons& double_overfills = Polygons()); - void width_legend(const Polygons& input, coord_t nozzle_size, coord_t max_dev, coord_t min_w, bool rounded_visualization); + void underfill(const Shape& underfills); + void overfill(const Shape& overfills, const Shape& double_overfills = Shape()); + void width_legend(const Shape& input, coord_t nozzle_size, coord_t max_dev, coord_t min_w, bool rounded_visualization); void widths(const std::vector& all_segments, coord_t nozzle_size, coord_t max_dev, coord_t min_w, bool rounded_visualization, bool exaggerate_widths = false); private: diff --git a/include/utils/VoxelUtils.h b/include/utils/VoxelUtils.h index f6cd123677..9eaca6e447 100644 --- a/include/utils/VoxelUtils.h +++ b/include/utils/VoxelUtils.h @@ -7,8 +7,8 @@ #include #include -#include "utils/Point2LL.h" -#include "utils/polygon.h" +#include "geometry/Point2LL.h" +#include "geometry/Polygon.h" namespace cura { @@ -92,7 +92,7 @@ class VoxelUtils * \param process_cell_func Function to perform on each voxel cell * \return Whether executing was stopped short as indicated by the \p cell_processing_function */ - bool walkPolygons(const Polygons& polys, coord_t z, const std::function& process_cell_func) const; + bool walkPolygons(const Shape& polys, coord_t z, const std::function& process_cell_func) const; /*! * Process voxels near the line segments of a polygon. @@ -105,13 +105,13 @@ class VoxelUtils * \param process_cell_func Function to perform on each voxel cell * \return Whether executing was stopped short as indicated by the \p cell_processing_function */ - bool walkDilatedPolygons(const Polygons& polys, coord_t z, const DilationKernel& kernel, const std::function& process_cell_func) const; + bool walkDilatedPolygons(const Shape& polys, coord_t z, const DilationKernel& kernel, const std::function& process_cell_func) const; private: /*! * \warning the \p polys is assumed to be translated by half the cell_size in xy already */ - bool _walkAreas(const Polygons& polys, coord_t z, const std::function& process_cell_func) const; + bool _walkAreas(const Shape& polys, coord_t z, const std::function& process_cell_func) const; public: /*! @@ -124,7 +124,7 @@ class VoxelUtils * \param process_cell_func Function to perform on each voxel cell * \return Whether executing was stopped short as indicated by the \p cell_processing_function */ - bool walkAreas(const Polygons& polys, coord_t z, const std::function& process_cell_func) const; + bool walkAreas(const Shape& polys, coord_t z, const std::function& process_cell_func) const; /*! * Process all voxels inside the area of a polygons object. @@ -137,7 +137,7 @@ class VoxelUtils * \param process_cell_func Function to perform on each voxel cell * \return Whether executing was stopped short as indicated by the \p cell_processing_function */ - bool walkDilatedAreas(const Polygons& polys, coord_t z, const DilationKernel& kernel, const std::function& process_cell_func) const; + bool walkDilatedAreas(const Shape& polys, coord_t z, const DilationKernel& kernel, const std::function& process_cell_func) const; /*! * Dilate with a kernel. diff --git a/include/utils/actions/smooth.h b/include/utils/actions/smooth.h index a414d9850a..338c47e391 100644 --- a/include/utils/actions/smooth.h +++ b/include/utils/actions/smooth.h @@ -1,4 +1,4 @@ -// Copyright (c) 2023 UltiMaker +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher #ifndef UTILS_VIEWS_SMOOTH_H @@ -6,8 +6,6 @@ #include #include -#include -#include #include #include @@ -20,8 +18,10 @@ #include #include +#include "geometry/Point2LL.h" #include "settings/Settings.h" #include "settings/types/Angle.h" +#include "utils/Coord_t.h" #include "utils/types/arachne.h" #include "utils/types/generic.h" #include "utils/types/geometry.h" diff --git a/include/utils/channel.h b/include/utils/channel.h index 4ff915ffe7..fb3574d169 100644 --- a/include/utils/channel.h +++ b/include/utils/channel.h @@ -1,9 +1,10 @@ -// Copyright (c) 2023 UltiMaker +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher #ifndef CHANNEL_H #define CHANNEL_H +#ifdef ENABLE_PLUGINS #include #include #include @@ -26,4 +27,5 @@ std::shared_ptr createChannel(const ChannelSetupConfiguration& co } // namespace cura::utils +#endif // ENABLE_PLUGINS #endif // CHANNEL_H diff --git a/include/utils/format/filesystem_path.h b/include/utils/format/filesystem_path.h index f6f8d697a7..e3b7bbecfd 100644 --- a/include/utils/format/filesystem_path.h +++ b/include/utils/format/filesystem_path.h @@ -37,9 +37,9 @@ struct formatter : formatter }; #ifdef _WIN32 -std::string fmt::formatter::USERNAME = std::getenv("USERNAME") != nullptr ? std::getenv("USERNAME") : ""; +inline std::string fmt::formatter::USERNAME = std::getenv("USERNAME") != nullptr ? std::getenv("USERNAME") : ""; #else -std::string fmt::formatter::USERNAME = std::getenv("USER") != nullptr ? std::getenv("USER") : ""; +inline std::string fmt::formatter::USERNAME = std::getenv("USER") != nullptr ? std::getenv("USER") : ""; #endif } // namespace fmt diff --git a/include/utils/linearAlg2D.h b/include/utils/linearAlg2D.h index 5c7867e4d6..56beab5608 100644 --- a/include/utils/linearAlg2D.h +++ b/include/utils/linearAlg2D.h @@ -4,10 +4,13 @@ #ifndef UTILS_LINEAR_ALG_2D_H #define UTILS_LINEAR_ALG_2D_H -#include "Point2LL.h" +#include "geometry/Point2LL.h" namespace cura { + +class Point3Matrix; + class LinearAlg2D { public: @@ -64,37 +67,22 @@ class LinearAlg2D return -1; } - static bool lineLineIntersection(const Point2LL& a, const Point2LL& b, const Point2LL& c, const Point2LL& d, Point2LL& output) - { - // Adapted from Apex: https://github.com/Ghostkeeper/Apex/blob/eb75f0d96e36c7193d1670112826842d176d5214/include/apex/line_segment.hpp#L91 - // Adjusted to work with lines instead of line segments. - const Point2LL l1_delta = b - a; - const Point2LL l2_delta = d - c; - const coord_t divisor = cross(l1_delta, l2_delta); // Pre-compute divisor needed for the intersection check. - if (divisor == 0) - { - // The lines are parallel if the cross product of their directions is zero. - return false; - } - - // Create a parametric representation of each line. - // We'll equate the parametric equations to each other to find the intersection then. - // Parametric equation is L = P + Vt (where P and V are a starting point and directional vector). - // We'll map the starting point of one line onto the parameter system of the other line. - // Then using the divisor we can see whether and where they cross. - const Point2LL starts_delta = a - c; - const coord_t l1_parametric = cross(l2_delta, starts_delta); - Point2LL result = a + Point2LL(round_divide_signed(l1_parametric * l1_delta.X, divisor), round_divide_signed(l1_parametric * l1_delta.Y, divisor)); + /*! + * A single-shot line-segment/line-segment intersection that returns the parameters and doesn't require a grid-calculation beforehand. + * + * \param p1 The start point of the first line segment. + * \param p2 The end point of the first line segment. + * \param p3 The start point of the second line segment. + * \param p4 The end point of the second line segment. + * \param t The parameter of the intersection on the first line segment (intersection = p1 + t * (p2 - p1)). + * \param u The parameter of the intersection on the second line segment (intersection = p3 + u * (p4 - p3)). + * + * \return Whether the two line segments intersect. + */ + static bool segmentSegmentIntersection(const Point2LL& p1, const Point2LL& p2, const Point2LL& p3, const Point2LL& p4, float& t, float& u); + static bool lineLineIntersection(const Point2LL& p1, const Point2LL& p2, const Point2LL& p3, const Point2LL& p4, float& t, float& u); - if (std::abs(result.X) > std::numeric_limits::max() || std::abs(result.Y) > std::numeric_limits::max()) - { - // Intersection is so far away that it could lead to integer overflows. - // Even though the lines aren't 100% parallel, it's better to pretend they are. They are practically parallel. - return false; - } - output = result; - return true; - } + static bool lineLineIntersection(const Point2LL& a, const Point2LL& b, const Point2LL& c, const Point2LL& d, Point2LL& output); /*! * Find whether a point projected on a line segment would be projected to @@ -403,12 +391,7 @@ class LinearAlg2D /*! * Get the rotation matrix for rotating around a specific point in place. */ - static Point3Matrix rotateAround(const Point2LL& middle, double rotation) - { - PointMatrix rotation_matrix(rotation); - Point3Matrix rotation_matrix_homogeneous(rotation_matrix); - return Point3Matrix::translate(middle).compose(rotation_matrix_homogeneous).compose(Point3Matrix::translate(-middle)); - } + static Point3Matrix rotateAround(const Point2LL& middle, double rotation); /*! * Test whether a point is inside a corner. diff --git a/include/utils/math.h b/include/utils/math.h index 23561cc86f..bb911f67b7 100644 --- a/include/utils/math.h +++ b/include/utils/math.h @@ -6,42 +6,44 @@ #include #include -#include + +#include "utils/types/generic.h" namespace cura { -template -inline T square(const T& a) +template +[[nodiscard]] T square(const T& a) { return a * a; } -inline int64_t round_divide_signed(const int64_t dividend, const int64_t divisor) //!< Return dividend divided by divisor rounded to the nearest integer +[[nodiscard]] inline int64_t round_divide_signed(const int64_t dividend, const int64_t divisor) //!< Return dividend divided by divisor rounded to the nearest integer { if ((dividend < 0) ^ (divisor < 0)) // Either the numerator or the denominator is negative, so the result must be negative. { return (dividend - divisor / 2) / divisor; // Flip the .5 offset to do proper rounding in the negatives too. } - else - { - return (dividend + divisor / 2) / divisor; - } + return (dividend + divisor / 2) / divisor; } -inline uint64_t ceil_divide_signed(const int64_t dividend, const int64_t divisor) //!< Return dividend divided by divisor rounded up towards positive infinity. + +[[nodiscard]] inline uint64_t ceil_divide_signed(const int64_t dividend, const int64_t divisor) //!< Return dividend divided by divisor rounded up towards positive infinity. { return static_cast((dividend / divisor) + (dividend * divisor > 0 ? 1 : 0)); } -inline uint64_t floor_divide_signed(const int64_t dividend, const int64_t divisor) //!< Return dividend divided by divisor rounded down towards negative infinity. + +[[nodiscard]] inline uint64_t floor_divide_signed(const int64_t dividend, const int64_t divisor) //!< Return dividend divided by divisor rounded down towards negative infinity. { return static_cast((dividend / divisor) + (dividend * divisor > 0 ? 0 : -1)); } -inline uint64_t round_divide(const uint64_t dividend, const uint64_t divisor) //!< Return dividend divided by divisor rounded to the nearest integer + +[[nodiscard]] inline uint64_t round_divide(const uint64_t dividend, const uint64_t divisor) //!< Return dividend divided by divisor rounded to the nearest integer { return (dividend + divisor / 2) / divisor; } -inline uint64_t round_up_divide(const uint64_t dividend, const uint64_t divisor) //!< Return dividend divided by divisor rounded to the nearest integer + +[[nodiscard]] inline uint64_t round_up_divide(const uint64_t dividend, const uint64_t divisor) //!< Return dividend divided by divisor rounded to the nearest integer { return (dividend + divisor - 1) / divisor; } diff --git a/include/utils/orderOptimizer.h b/include/utils/orderOptimizer.h index cf3abaa2ba..e6e3eb0c39 100644 --- a/include/utils/orderOptimizer.h +++ b/include/utils/orderOptimizer.h @@ -9,7 +9,7 @@ #include // pair #include -#include "Point2LL.h" +#include "geometry/Point2LL.h" namespace cura { diff --git a/include/utils/polygon.h b/include/utils/polygon.h deleted file mode 100644 index 1e20b36a4f..0000000000 --- a/include/utils/polygon.h +++ /dev/null @@ -1,1606 +0,0 @@ -// Copyright (c) 2023 UltiMaker -// CuraEngine is released under the terms of the AGPLv3 or higher - -#ifndef UTILS_POLYGON_H -#define UTILS_POLYGON_H - -#include -#include // std::reverse, fill_n array -#include -#include // fabs -#include -#include // int64_t.min -#include -#include -#include -#include - -#include "../settings/types/Angle.h" //For angles between vertices. -#include "../settings/types/Ratio.h" -#include "Point2LL.h" - -#define CHECK_POLY_ACCESS -#ifdef CHECK_POLY_ACCESS -#define POLY_ASSERT(e) assert(e) -#else -#define POLY_ASSERT(e) \ - do \ - { \ - } while (0) -#endif - -namespace cura -{ - -template -bool shorterThan(const T& shape, const coord_t check_length) -{ - const auto* p0 = &shape.back(); - int64_t length = 0; - for (const auto& p1 : shape) - { - length += vSize(*p0 - p1); - if (length >= check_length) - { - return false; - } - p0 = &p1; - } - return true; -} - -class PartsView; -class Polygons; -class Polygon; -class PolygonRef; - -class ListPolyIt; - -typedef std::list ListPolygon; //!< A polygon represented by a linked list instead of a vector -typedef std::vector ListPolygons; //!< Polygons represented by a vector of linked lists instead of a vector of vectors - -const static int clipper_init = (0); -#define NO_INDEX (std::numeric_limits::max()) - -class ConstPolygonPointer; - -/*! - * Outer polygons should be counter-clockwise, - * inner hole polygons should be clockwise. - * (When negative X is to the left and negative Y is downward.) - */ -class ConstPolygonRef -{ - friend class Polygons; - friend class Polygon; - friend class PolygonRef; - friend class ConstPolygonPointer; - -protected: - ClipperLib::Path* path; - -public: - ConstPolygonRef(const ClipperLib::Path& polygon) - : path(const_cast(&polygon)) - { - } - - ConstPolygonRef() = delete; // you cannot have a reference without an object! - - virtual ~ConstPolygonRef() - { - } - - bool operator==(ConstPolygonRef& other) const = delete; // polygon comparison is expensive and probably not what you want when you use the equality operator - - ConstPolygonRef& operator=(const ConstPolygonRef& other) = delete; // Cannot assign to a const object - - /*! - * Gets the number of vertices in this polygon. - * \return The number of vertices in this polygon. - */ - size_t size() const; - - /*! - * Returns whether there are any vertices in this polygon. - * \return ``true`` if the polygon has no vertices at all, or ``false`` if - * it does have vertices. - */ - bool empty() const; - - const Point2LL& operator[](size_t index) const - { - POLY_ASSERT(index < size()); - return (*path)[index]; - } - - const ClipperLib::Path& operator*() const - { - return *path; - } - - ClipperLib::Path::const_iterator begin() const - { - return path->begin(); - } - - ClipperLib::Path::const_iterator end() const - { - return path->end(); - } - - ClipperLib::Path::const_reverse_iterator rbegin() const - { - return path->rbegin(); - } - - ClipperLib::Path::const_reverse_iterator rend() const - { - return path->rend(); - } - - ClipperLib::Path::const_reference front() const - { - return path->front(); - } - - ClipperLib::Path::const_reference back() const - { - return path->back(); - } - - const void* data() const - { - return path->data(); - } - - - /*! - * On Y-axis positive upward displays, Orientation will return true if the polygon's orientation is counter-clockwise. - * - * from http://www.angusj.com/delphi/clipper/documentation/Docs/Units/ClipperLib/Functions/Orientation.htm - */ - bool orientation() const - { - return ClipperLib::Orientation(*path); - } - - Polygons offset(int distance, ClipperLib::JoinType joinType = ClipperLib::jtMiter, double miter_limit = 1.2) const; - - coord_t polygonLength() const - { - return polylineLength() + vSize(path->front() - path->back()); - } - - coord_t polylineLength() const - { - coord_t length = 0; - Point2LL p0 = path->front(); - for (size_t n = 1; n < path->size(); n++) - { - Point2LL p1 = (*path)[n]; - length += vSize(p0 - p1); - p0 = p1; - } - return length; - } - - /*! - * Split these poly line objects into several line segment objects consisting of only two verts - * and store them in the \p result - */ - void splitPolylineIntoSegments(Polygons& result) const; - Polygons splitPolylineIntoSegments() const; - - /*! - * Split these polygon objects into several line segment objects consisting of only two verts - * and store them in the \p result - */ - void splitPolygonIntoSegments(Polygons& result) const; - Polygons splitPolygonIntoSegments() const; - - bool shorterThan(const coord_t check_length) const; - - Point2LL min() const - { - Point2LL ret = Point2LL(POINT_MAX, POINT_MAX); - for (Point2LL p : *path) - { - ret.X = std::min(ret.X, p.X); - ret.Y = std::min(ret.Y, p.Y); - } - return ret; - } - - Point2LL max() const - { - Point2LL ret = Point2LL(POINT_MIN, POINT_MIN); - for (Point2LL p : *path) - { - ret.X = std::max(ret.X, p.X); - ret.Y = std::max(ret.Y, p.Y); - } - return ret; - } - - double area() const - { - return ClipperLib::Area(*path); - } - - Point2LL centerOfMass() const - { - if (path->size() > 0) - { - Point2LL p0 = (*path)[0]; - if (path->size() > 1) - { - double x = 0, y = 0; - for (size_t n = 1; n <= path->size(); n++) - { - Point2LL p1 = (*path)[n % path->size()]; - double second_factor = static_cast((p0.X * p1.Y) - (p1.X * p0.Y)); - - x += double(p0.X + p1.X) * second_factor; - y += double(p0.Y + p1.Y) * second_factor; - p0 = p1; - } - - double area = Area(*path); - - x = x / 6 / area; - y = y / 6 / area; - - return Point2LL(std::llrint(x), std::llrint(y)); - } - else - { - return p0; - } - } - else - { - return Point2LL(); - } - } - - Point2LL closestPointTo(Point2LL p) const - { - Point2LL ret = p; - double bestDist = std::numeric_limits::max(); - for (size_t n = 0; n < path->size(); n++) - { - double dist = vSize2f(p - (*path)[n]); - if (dist < bestDist) - { - ret = (*path)[n]; - bestDist = dist; - } - } - return ret; - } - - /*! - * Check if we are inside the polygon. We do this by tracing from the point towards the positive X direction, - * every line we cross increments the crossings counter. If we have an even number of crossings then we are not inside the polygon. - * Care needs to be taken, if p.Y exactly matches a vertex to the right of p, then we need to count 1 intersect if the - * outline passes vertically past; and 0 (or 2) intersections if that point on the outline is a 'top' or 'bottom' vertex. - * The easiest way to do this is to break out two cases for increasing and decreasing Y ( from p0 to p1 ). - * A segment is tested if pa.Y <= p.Y < pb.Y, where pa and pb are the points (from p0,p1) with smallest & largest Y. - * When both have the same Y, no intersections are counted but there is a special test to see if the point falls - * exactly on the line. - * - * Returns false if outside, true if inside; if the point lies exactly on the border, will return 'border_result'. - * - * \deprecated This function is no longer used, since the Clipper function is used by the function PolygonRef::inside(.) - * - * \param p The point for which to check if it is inside this polygon - * \param border_result What to return when the point is exactly on the border - * \return Whether the point \p p is inside this polygon (or \p border_result when it is on the border) - */ - bool _inside(Point2LL p, bool border_result = false) const; - - /*! - * Clipper function. - * Returns false if outside, true if inside; if the point lies exactly on the border, will return 'border_result'. - * - * http://www.angusj.com/delphi/clipper/documentation/Docs/Units/ClipperLib/Functions/PointInPolygon.htm - */ - bool inside(Point2LL p, bool border_result = false) const - { - int res = ClipperLib::PointInPolygon(p, *path); - if (res == -1) - { - return border_result; - } - return res == 1; - } - - bool inside(const auto& polygon) const - { - for (const auto& point : *path) - { - if (! ClipperLib::PointInPolygon(point, *polygon.path)) - { - return false; - } - } - return true; - } - - /*! - * Smooth out small perpendicular segments and store the result in \p result. - * Smoothing is performed by removing the inner most vertex of a line segment smaller than \p remove_length - * which has an angle with the next and previous line segment smaller than roughly 150* - * - * Note that in its current implementation this function doesn't remove line segments with an angle smaller than 30* - * Such would be the case for an N shape. - * - * \param remove_length The length of the largest segment removed - * \param result (output) The result polygon, assumed to be empty - */ - void smooth(int remove_length, PolygonRef result) const; - - /*! - * Smooth out sharp inner corners, by taking a shortcut which bypasses the corner - * - * \param angle The maximum angle of inner corners to be smoothed out - * \param shortcut_length The desired length of the shortcut line segment introduced (shorter shortcuts may be unavoidable) - * \param result The resulting polygon - */ - void smooth_outward(const AngleDegrees angle, int shortcut_length, PolygonRef result) const; - - /*! - * Smooth out the polygon and store the result in \p result. - * Smoothing is performed by removing vertices for which both connected line segments are smaller than \p remove_length - * - * \param remove_length The length of the largest segment removed - * \param result (output) The result polygon, assumed to be empty - */ - void smooth2(int remove_length, PolygonRef result) const; - - /*! - * Compute the morphological intersection between this polygon and another. - * - * Note that the result may consist of multiple polygons, if you have bad - * luck. - * - * \param other The polygon with which to intersect this polygon. - */ - Polygons intersection(const ConstPolygonRef& other) const; - - -private: - /*! - * Smooth out a simple corner consisting of two linesegments. - * - * Auxiliary function for \ref smooth_outward - * - * \param p0 The point before the corner - * \param p1 The corner - * \param p2 The point after the corner - * \param p0_it Iterator to the point before the corner - * \param p1_it Iterator to the corner - * \param p2_it Iterator to the point after the corner - * \param v10 Vector from \p p1 to \p p0 - * \param v12 Vector from \p p1 to \p p2 - * \param v02 Vector from \p p0 to \p p2 - * \param shortcut_length The desired length ofthe shortcutting line - * \param cos_angle The cosine on the angle in L 012 - */ - static void smooth_corner_simple( - const Point2LL p0, - const Point2LL p1, - const Point2LL p2, - const ListPolyIt p0_it, - const ListPolyIt p1_it, - const ListPolyIt p2_it, - const Point2LL v10, - const Point2LL v12, - const Point2LL v02, - const int64_t shortcut_length, - double cos_angle); - - /*! - * Smooth out a complex corner where the shortcut bypasses more than two line segments - * - * Auxiliary function for \ref smooth_outward - * - * \warning This function might try to remove the whole polygon - * Error code -1 means the whole polygon should be removed (which means it is a hole polygon) - * - * \param p1 The corner point - * \param[in,out] p0_it Iterator to the last point checked before \p p1 to consider cutting off - * \param[in,out] p2_it Iterator to the last point checked after \p p1 to consider cutting off - * \param shortcut_length The desired length ofthe shortcutting line - * \return Whether this whole polygon whould be removed by the smoothing - */ - static bool smooth_corner_complex(const Point2LL p1, ListPolyIt& p0_it, ListPolyIt& p2_it, const int64_t shortcut_length); - - /*! - * Try to take a step away from the corner point in order to take a bigger shortcut. - * - * Try to take the shortcut from a place as far away from the corner as the place we are taking the shortcut to. - * - * Auxiliary function for \ref smooth_outward - * - * \param[in] p1 The corner point - * \param[in] shortcut_length2 The square of the desired length ofthe shortcutting line - * \param[in,out] p0_it Iterator to the previously checked point somewhere beyond \p p1. Updated for the next iteration. - * \param[in,out] p2_it Iterator to the previously checked point somewhere before \p p1. Updated for the next iteration. - * \param[in,out] forward_is_blocked Whether trying another step forward is blocked by the smoothing outward condition. Updated for the next iteration. - * \param[in,out] backward_is_blocked Whether trying another step backward is blocked by the smoothing outward condition. Updated for the next iteration. - * \param[in,out] forward_is_too_far Whether trying another step forward is blocked by the shortcut length condition. Updated for the next iteration. - * \param[in,out] backward_is_too_far Whether trying another step backward is blocked by the shortcut length condition. Updated for the next iteration. - */ - static void smooth_outward_step( - const Point2LL p1, - const int64_t shortcut_length2, - ListPolyIt& p0_it, - ListPolyIt& p2_it, - bool& forward_is_blocked, - bool& backward_is_blocked, - bool& forward_is_too_far, - bool& backward_is_too_far); -}; - - -class PolygonPointer; - -class PolygonRef : public ConstPolygonRef -{ - friend class PolygonPointer; - friend class Polygons; - friend class PolygonsPart; - -public: - PolygonRef(ClipperLib::Path& polygon) - : ConstPolygonRef(polygon) - { - } - - PolygonRef(const PolygonRef& other) - : ConstPolygonRef(*other.path) - { - } - - PolygonRef() = delete; // you cannot have a reference without an object! - - virtual ~PolygonRef() - { - } - - /*! - * Reserve a number of polygons to prevent reallocation and breakage of pointers. - * \param min_size The minimum size the new underlying array should have. - */ - void reserve(size_t min_size) - { - path->reserve(min_size); - } - - template - ClipperLib::Path::iterator insert(ClipperLib::Path::const_iterator pos, iterator first, iterator last) - { - return path->insert(pos, first, last); - } - - PolygonRef& operator=(const ConstPolygonRef& other) = delete; // polygon assignment is expensive and probably not what you want when you use the assignment operator - - PolygonRef& operator=(ConstPolygonRef& other) = delete; // polygon assignment is expensive and probably not what you want when you use the assignment operator - // { path = other.path; return *this; } - - PolygonRef& operator=(PolygonRef&& other) - { - *path = std::move(*other.path); - return *this; - } - - Point2LL& operator[](size_t index) - { - POLY_ASSERT(index < size()); - return (*path)[index]; - } - - const Point2LL& operator[](size_t index) const - { - return ConstPolygonRef::operator[](index); - } - - ClipperLib::Path::iterator begin() - { - return path->begin(); - } - - ClipperLib::Path::iterator end() - { - return path->end(); - } - - ClipperLib::Path::reference front() - { - return path->front(); - } - - ClipperLib::Path::reference back() - { - return path->back(); - } - - void* data() - { - return path->data(); - } - - void add(const Point2LL p) - { - path->push_back(p); - } - - ClipperLib::Path& operator*() - { - return *path; - } - - template - void emplace_back(Args&&... args) - { - path->emplace_back(args...); - } - - void remove(size_t index) - { - POLY_ASSERT(index < size() && index <= static_cast(std::numeric_limits::max())); - path->erase(path->begin() + static_cast(index)); - } - - void insert(size_t index, Point2LL p) - { - POLY_ASSERT(index < size() && index <= static_cast(std::numeric_limits::max())); - path->insert(path->begin() + static_cast(index), p); - } - - void clear() - { - path->clear(); - } - - void reverse() - { - ClipperLib::ReversePath(*path); - } - - /*! - * Translate the whole polygon in some direction. - * - * \param translation The direction in which to move the polygon - */ - void translate(Point2LL translation) - { - for (Point2LL& p : *this) - { - p += translation; - } - } - - void removeColinearEdges(const AngleRadians max_deviation_angle); - - /*! - * Removes consecutive line segments with same orientation and changes this polygon. - * - * 1. Removes verts which are connected to line segments which are too small. - * 2. Removes verts which detour from a direct line from the previous and next vert by a too small amount. - * 3. Moves a vert when a small line segment is connected to a much longer one. in order to maintain the outline of the object. - * 4. Don't remove a vert when the impact on the outline of the object is too great. - * - * Note that the simplify is a best effort algorithm. It does not guarantee that no lines below the provided smallest_line_segment_squared are left. - * - * The following example (Two very long line segments (" & , respectively) that are connected by a very small line segment (i) is unsimplifable by this - * function, even though the actual area change of removing line segment i is very small. The reason for this is that in the case of long lines, even a small - * deviation from it's original direction is very noticeable in the final result, especially if the polygons above make a slightly different choice. - * - * """"""""""""""""""""""""""""""""i,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, - - * - * \param smallest_line_segment_squared maximal squared length of removed line segments - * \param allowed_error_distance_squared The square of the distance of the middle point to the line segment of the consecutive and previous point for which the middle point is - removed - */ - void simplify(const coord_t smallest_line_segment_squared = MM2INT(0.01) * MM2INT(0.01), const coord_t allowed_error_distance_squared = 25); - - /*! - * See simplify(.) - */ - void simplifyPolyline(const coord_t smallest_line_segment_squared = 100, const coord_t allowed_error_distance_squared = 25); - -protected: - /*! - * Private implementation for both simplify and simplifyPolygons. - * - * Made private to avoid accidental use of the wrong function. - */ - void _simplify(const coord_t smallest_line_segment_squared = 100, const coord_t allowed_error_distance_squared = 25, bool processing_polylines = false); - -public: - void pop_back() - { - path->pop_back(); - } - - /*! - * Apply a matrix to each vertex in this polygon - */ - void applyMatrix(const PointMatrix& matrix); - void applyMatrix(const Point3Matrix& matrix); -}; - -class ConstPolygonPointer -{ -protected: - const ClipperLib::Path* path; - -public: - ConstPolygonPointer() - : path(nullptr) - { - } - ConstPolygonPointer(const ConstPolygonRef* ref) - : path(ref->path) - { - } - ConstPolygonPointer(const ConstPolygonRef& ref) - : path(ref.path) - { - } - - ConstPolygonRef operator*() const - { - assert(path); - return ConstPolygonRef(*path); - } - const ClipperLib::Path* operator->() const - { - assert(path); - return path; - } - - operator bool() const - { - return path; - } - - bool operator==(const ConstPolygonPointer& rhs) const - { - return path == rhs.path; - } -}; - -class PolygonPointer : public ConstPolygonPointer -{ -public: - PolygonPointer() - : ConstPolygonPointer(nullptr) - { - } - PolygonPointer(PolygonRef* ref) - : ConstPolygonPointer(ref) - { - } - - PolygonPointer(PolygonRef& ref) - : ConstPolygonPointer(ref) - { - } - - PolygonRef operator*() - { - assert(path); - return PolygonRef(*const_cast(path)); - } - - ConstPolygonRef operator*() const - { - assert(path); - return ConstPolygonRef(*path); - } - - ClipperLib::Path* operator->() - { - assert(path); - return const_cast(path); - } - - const ClipperLib::Path* operator->() const - { - assert(path); - return path; - } - - operator bool() const - { - return path; - } -}; - -} // namespace cura - - -namespace std -{ -template<> -struct hash -{ - size_t operator()(const cura::ConstPolygonRef& poly) const - { - return std::hash()(&*poly); - } -}; -template<> -struct hash -{ - size_t operator()(const cura::ConstPolygonPointer& poly) const - { - return std::hash()(&**poly); - } -}; -template<> -struct hash -{ - size_t operator()(const cura::PolygonPointer& poly) const - { - const cura::ConstPolygonRef ref = *static_cast(poly); - return std::hash()(&*ref); - } -}; -} // namespace std - -namespace cura -{ - -class Polygon : public PolygonRef -{ -public: - ClipperLib::Path poly; - - Polygon() - : PolygonRef(poly) - { - } - - Polygon(const ConstPolygonRef& other) - : PolygonRef(poly) - , poly(*other.path) - { - } - - Polygon(const Polygon& other) - : PolygonRef(poly) - , poly(*other.path) - { - } - - Polygon(Polygon&& moved) - : PolygonRef(poly) - , poly(std::move(moved.poly)) - { - } - - virtual ~Polygon() - { - } - - Polygon& operator=(const ConstPolygonRef& other) = delete; // copying a single polygon is generally not what you want - // { - // path = other.path; - // poly = *other.path; - // return *this; - // } - - Polygon& operator=(Polygon&& other) //!< move assignment - { - poly = std::move(other.poly); - return *this; - } -}; - -class PolygonsPart; - -class Polygons -{ - friend class Polygon; - friend class PolygonRef; - friend class ConstPolygonRef; - friend class PolygonUtils; - -public: - ClipperLib::Paths paths; - - size_t size() const - { - return paths.size(); - } - - void reserve(size_t new_cap) - { - paths.reserve(new_cap); - } - - /*! - * Convenience function to check if the polygon has no points. - * - * \return `true` if the polygon has no points, or `false` if it does. - */ - bool empty() const; - - size_t pointCount() const; //!< Return the amount of points in all polygons - - PolygonRef operator[](size_t index) - { - POLY_ASSERT(index < size()); - return paths[index]; - } - ConstPolygonRef operator[](size_t index) const - { - POLY_ASSERT(index < size()); - return paths[index]; - } - ClipperLib::Paths::iterator begin() - { - return paths.begin(); - } - ClipperLib::Paths::const_iterator begin() const - { - return paths.begin(); - } - ClipperLib::Paths::iterator end() - { - return paths.end(); - } - ClipperLib::Paths::const_iterator end() const - { - return paths.end(); - } - /*! - * Remove a polygon from the list and move the last polygon to its place - * - * \warning changes the order of the polygons! - */ - void remove(size_t index) - { - POLY_ASSERT(index < size()); - if (index < paths.size() - 1) - { - paths[index] = std::move(paths.back()); - } - paths.resize(paths.size() - 1); - } - - void pop_back() - { - paths.pop_back(); - } - - /*! - * Remove a range of polygons - */ - void erase(ClipperLib::Paths::iterator start, ClipperLib::Paths::iterator end) - { - paths.erase(start, end); - } - void clear() - { - paths.clear(); - } - void add(ConstPolygonRef& poly) - { - paths.push_back(*poly.path); - } - void add(const ConstPolygonRef& poly) - { - paths.push_back(*poly.path); - } - void add(Polygon&& other_poly) - { - paths.emplace_back(std::move(*other_poly)); - } - void add(const Polygons& other) - { - std::copy(other.paths.begin(), other.paths.end(), std::back_inserter(paths)); - } - void addIfNotEmpty(ConstPolygonRef& poly) - { - if (! poly.empty()) - { - paths.push_back(*poly.path); - } - } - void addIfNotEmpty(const ConstPolygonRef& poly) - { - if (! poly.empty()) - { - paths.push_back(*poly.path); - } - } - void addIfNotEmpty(Polygon&& other_poly) - { - if (! other_poly.empty()) - { - paths.emplace_back(std::move(*other_poly)); - } - } - /*! - * Add a 'polygon' consisting of two points - */ - void addLine(const Point2LL from, const Point2LL to) - { - paths.emplace_back(ClipperLib::Path{ from, to }); - } - - void emplace_back(const Polygon& poly) - { - paths.emplace_back(*poly.path); - } - - void emplace_back(const ConstPolygonRef& poly) - { - paths.emplace_back(*poly.path); - } - - void emplace_back(const PolygonRef& poly) - { - paths.emplace_back(*poly.path); - } - - template - void emplace_back(Args... args) - { - paths.emplace_back(args...); - } - - PolygonRef newPoly() - { - paths.emplace_back(); - return PolygonRef(paths.back()); - } - PolygonRef front() - { - return PolygonRef(paths.front()); - } - ConstPolygonRef front() const - { - return ConstPolygonRef(paths.front()); - } - PolygonRef back() - { - return PolygonRef(paths.back()); - } - ConstPolygonRef back() const - { - return ConstPolygonRef(paths.back()); - } - - Polygons() - { - } - - Polygons(const Polygons& other) - { - paths = other.paths; - } - Polygons(Polygons&& other) - { - paths = std::move(other.paths); - } - Polygons& operator=(const Polygons& other) - { - paths = other.paths; - return *this; - } - Polygons& operator=(Polygons&& other) - { - if (this != &other) - { - paths = std::move(other.paths); - } - return *this; - } - - bool operator==(const Polygons& other) const = delete; - - /*! - * Convert ClipperLib::PolyTree to a Polygons object, - * which uses ClipperLib::Paths instead of ClipperLib::PolyTree - */ - static Polygons toPolygons(ClipperLib::PolyTree& poly_tree); - - Polygons difference(const Polygons& other) const - { - Polygons ret; - ClipperLib::Clipper clipper(clipper_init); - clipper.AddPaths(paths, ClipperLib::ptSubject, true); - clipper.AddPaths(other.paths, ClipperLib::ptClip, true); - clipper.Execute(ClipperLib::ctDifference, ret.paths); - return ret; - } - Polygons unionPolygons(const Polygons& other, ClipperLib::PolyFillType fill_type = ClipperLib::pftNonZero) const - { - Polygons ret; - ClipperLib::Clipper clipper(clipper_init); - clipper.AddPaths(paths, ClipperLib::ptSubject, true); - clipper.AddPaths(other.paths, ClipperLib::ptSubject, true); - clipper.Execute(ClipperLib::ctUnion, ret.paths, fill_type, fill_type); - return ret; - } - /*! - * Union all polygons with each other (When polygons.add(polygon) has been called for overlapping polygons) - */ - Polygons unionPolygons() const - { - return unionPolygons(Polygons()); - } - Polygons intersection(const Polygons& other) const - { - Polygons ret; - ClipperLib::Clipper clipper(clipper_init); - clipper.AddPaths(paths, ClipperLib::ptSubject, true); - clipper.AddPaths(other.paths, ClipperLib::ptClip, true); - clipper.Execute(ClipperLib::ctIntersection, ret.paths); - return ret; - } - - - /*! - * Intersect polylines with this area Polygons object. - * - * \note Due to a clipper bug with polylines with nearly collinear segments, the polylines are cut up into separate polylines, and restitched back together at the end. - * - * \param polylines The (non-closed!) polylines to limit to the area of this Polygons object - * \param restitch Whether to stitch the resulting segments into longer polylines, or leave every segment as a single segment - * \param max_stitch_distance The maximum distance for two polylines to be stitched together with a segment - * \return The resulting polylines limited to the area of this Polygons object - */ - Polygons intersectionPolyLines(const Polygons& polylines, bool restitch = true, const coord_t max_stitch_distance = 10_mu) const; - - /*! - * Add the front to each polygon so that the polygon is represented as a polyline - */ - void toPolylines(); - - /*! - * Split this poly line object into several line segment objects - * and store them in the \p result - */ - void splitPolylinesIntoSegments(Polygons& result) const; - Polygons splitPolylinesIntoSegments() const; - - /*! - * Split this polygon object into several line segment objects - * and store them in the \p result - */ - void splitPolygonsIntoSegments(Polygons& result) const; - Polygons splitPolygonsIntoSegments() const; - - Polygons xorPolygons(const Polygons& other, ClipperLib::PolyFillType pft = ClipperLib::pftEvenOdd) const - { - Polygons ret; - ClipperLib::Clipper clipper(clipper_init); - clipper.AddPaths(paths, ClipperLib::ptSubject, true); - clipper.AddPaths(other.paths, ClipperLib::ptClip, true); - clipper.Execute(ClipperLib::ctXor, ret.paths, pft); - return ret; - } - - Polygons execute(ClipperLib::PolyFillType pft = ClipperLib::pftEvenOdd) const - { - Polygons ret; - ClipperLib::Clipper clipper(clipper_init); - clipper.AddPaths(paths, ClipperLib::ptSubject, true); - clipper.Execute(ClipperLib::ctXor, ret.paths, pft); - return ret; - } - - Polygons offset(coord_t distance, ClipperLib::JoinType joinType = ClipperLib::jtMiter, double miter_limit = 1.2) const; - - Polygons offsetPolyLine(int distance, ClipperLib::JoinType joinType = ClipperLib::jtMiter, bool inputPolyIsClosed = false) const - { - Polygons ret; - double miterLimit = 1.2; - ClipperLib::EndType end_type; - if (inputPolyIsClosed) - { - end_type = ClipperLib::etClosedLine; - } - else if (joinType == ClipperLib::jtMiter) - { - end_type = ClipperLib::etOpenSquare; - } - else - { - end_type = ClipperLib::etOpenRound; - } - ClipperLib::ClipperOffset clipper(miterLimit, 10.0); - clipper.AddPaths(paths, joinType, end_type); - clipper.MiterLimit = miterLimit; - clipper.Execute(ret.paths, distance); - return ret; - } - - /*! - * Check if we are inside the polygon. - * - * We do this by counting the number of polygons inside which this point lies. - * An odd number is inside, while an even number is outside. - * - * Returns false if outside, true if inside; if the point lies exactly on the border, will return \p border_result. - * - * \param p The point for which to check if it is inside this polygon - * \param border_result What to return when the point is exactly on the border - * \return Whether the point \p p is inside this polygon (or \p border_result when it is on the border) - */ - bool inside(Point2LL p, bool border_result = false) const; - - /*! - * Check if we are inside the polygon. We do this by tracing from the point towards the positive X direction, - * every line we cross increments the crossings counter. If we have an even number of crossings then we are not inside the polygon. - * Care needs to be taken, if p.Y exactly matches a vertex to the right of p, then we need to count 1 intersect if the - * outline passes vertically past; and 0 (or 2) intersections if that point on the outline is a 'top' or 'bottom' vertex. - * The easiest way to do this is to break out two cases for increasing and decreasing Y ( from p0 to p1 ). - * A segment is tested if pa.Y <= p.Y < pb.Y, where pa and pb are the points (from p0,p1) with smallest & largest Y. - * When both have the same Y, no intersections are counted but there is a special test to see if the point falls - * exactly on the line. - * - * Returns false if outside, true if inside; if the point lies exactly on the border, will return \p border_result. - * - * \deprecated This function is old and no longer used. instead use \ref Polygons::inside - * - * \param p The point for which to check if it is inside this polygon - * \param border_result What to return when the point is exactly on the border - * \return Whether the point \p p is inside this polygon (or \p border_result when it is on the border) - */ - bool insideOld(Point2LL p, bool border_result = false) const; - - /*! - * Find the polygon inside which point \p p resides. - * - * We do this by tracing from the point towards the positive X direction, - * every line we cross increments the crossings counter. If we have an even number of crossings then we are not inside the polygon. - * We then find the polygon with an uneven number of crossings which is closest to \p p. - * - * If \p border_result, we return the first polygon which is exactly on \p p. - * - * \param p The point for which to check in which polygon it is. - * \param border_result Whether a point exactly on a polygon counts as inside - * \return The index of the polygon inside which the point \p p resides - */ - size_t findInside(Point2LL p, bool border_result = false); - - /*! - * Approximates the convex hull of the polygons. - * \p extra_outset Extra offset outward - * \return the convex hull (approximately) - * - */ - Polygons approxConvexHull(int extra_outset = 0); - - /*! - * Make each of the polygons convex - */ - void makeConvex(); - - /*! - * Compute the area enclosed within the polygons (minus holes) - * - * \return The area in square micron - */ - double area() const; - - /*! - * Smooth out small perpendicular segments - * Smoothing is performed by removing the inner most vertex of a line segment smaller than \p remove_length - * which has an angle with the next and previous line segment smaller than roughly 150* - * - * Note that in its current implementation this function doesn't remove line segments with an angle smaller than 30* - * Such would be the case for an N shape. - * - * \param remove_length The length of the largest segment removed - * \return The smoothed polygon - */ - Polygons smooth(int remove_length) const; - - /*! - * Smooth out sharp inner corners, by taking a shortcut which bypasses the corner - * - * \param angle The maximum angle of inner corners to be smoothed out - * \param shortcut_length The desired length of the shortcut line segment introduced (shorter shortcuts may be unavoidable) - * \return The resulting polygons - */ - Polygons smooth_outward(const AngleDegrees angle, int shortcut_length); - - Polygons smooth2(int remove_length, int min_area) const; //!< removes points connected to small lines - - void removeColinearEdges(const AngleRadians max_deviation_angle = AngleRadians(0.0005)) - { - Polygons& thiss = *this; - for (size_t p = 0; p < size(); p++) - { - thiss[p].removeColinearEdges(max_deviation_angle); - if (thiss[p].size() < 3) - { - remove(p); - p--; - } - } - } - -public: - void scale(const Ratio& ratio) - { - if (ratio == 1.) - { - return; - } - - for (auto& points : *this) - { - for (auto& pt : points) - { - pt = pt * static_cast(ratio); - } - } - } - - void translate(const Point2LL vec) - { - if (vec.X == 0 && vec.Y == 0) - { - return; - } - - for (PolygonRef poly : *this) - { - poly.translate(vec); - } - } - - /*! - * Remove all but the polygons on the very outside. - * Exclude holes and parts within holes. - * \return the resulting polygons. - */ - Polygons getOutsidePolygons() const; - - /*! - * Exclude holes which have no parts inside of them. - * \return the resulting polygons. - */ - Polygons removeEmptyHoles() const; - - /*! - * Return hole polygons which have no parts inside of them. - * \return the resulting polygons. - */ - Polygons getEmptyHoles() const; - - /*! - * Split up the polygons into groups according to the even-odd rule. - * Each PolygonsPart in the result has an outline as first polygon, whereas the rest are holes. - */ - std::vector splitIntoParts(bool unionAll = false) const; - - /*! - * Sort the polygons into bins where each bin has polygons which are contained within one of the polygons in the previous bin. - * - * \warning When polygons are crossing each other the result is undefined. - */ - std::vector sortByNesting() const; - - /*! - * Utility method for creating the tube (or 'donut') of a shape. - * \param inner_offset Offset relative to the original shape-outline towards the inside of the shape. Sort-of like a negative normal offset, except it's the offset part that's - * kept, not the shape. \param outer_offset Offset relative to the original shape-outline towards the outside of the shape. Comparable to normal offset. \return The resulting - * polygons. - */ - Polygons tubeShape(const coord_t inner_offset, const coord_t outer_offset) const; - -private: - /*! - * recursive part of \ref Polygons::removeEmptyHoles and \ref Polygons::getEmptyHoles - * \param node The node of the polygons part to process - * \param remove_holes Whether to remove empty holes or everything but the empty holes - * \param ret Where to store polygons which are not empty holes - */ - void removeEmptyHoles_processPolyTreeNode(const ClipperLib::PolyNode& node, const bool remove_holes, Polygons& ret) const; - void splitIntoParts_processPolyTreeNode(ClipperLib::PolyNode* node, std::vector& ret) const; - void sortByNesting_processPolyTreeNode(ClipperLib::PolyNode* node, const size_t nesting_idx, std::vector& ret) const; - -public: - /*! - * Split up the polygons into groups according to the even-odd rule. - * Each vector in the result has the index to an outline as first index, whereas the rest are indices to holes. - * - * \warning Note that this function reorders the polygons! - */ - PartsView splitIntoPartsView(bool unionAll = false); - -private: - void splitIntoPartsView_processPolyTreeNode(PartsView& partsView, Polygons& reordered, ClipperLib::PolyNode* node) const; - -public: - /*! - * Removes polygons with area smaller than \p min_area_size (note that min_area_size is in mm^2, not in micron^2). - * Unless \p remove_holes is true, holes are not removed even if their area is below \p min_area_size. - * However, holes that are contained within outlines whose area is below the threshold are removed though. - */ - void removeSmallAreas(const double min_area_size, const bool remove_holes = false); - - /*! - * Removes polygons with circumference smaller than \p min_circumference_size (in micron). - * Unless \p remove_holes is true, holes are not removed even if their circumference is below \p min_circumference_size. - * However, holes that are contained within outlines whose circumference is below the threshold are removed though. - */ - [[maybe_unused]] void removeSmallCircumference(const coord_t min_circumference_size, const bool remove_holes = false); - - /*! - * Removes polygons with circumference smaller than \p min_circumference_size (in micron) _and_ - * an area smaller then \p min_area_size (note that min_area_size is in mm^2, not in micron^2). - * Unless \p remove_holes is true, holes are not removed even if their circumference is - * below \p min_circumference_size and their area smaller then \p min_area_size. - * However, holes that are contained within outlines whose circumference is below the threshold are removed though. - */ - [[maybe_unused]] void removeSmallAreaCircumference(const double min_area_size, const coord_t min_circumference_size, const bool remove_holes = false); - - /*! - * Removes overlapping consecutive line segments which don't delimit a - * positive area. - * - * This function is meant to work on polygons, not polylines. When misused - * on polylines, it may cause too many vertices to be removed. - * See \ref removeDegenerateVertsPolyline for a version that works on - * polylines. - */ - void removeDegenerateVerts(); - - /*! - * Removes overlapping consecutive line segments which don't delimit a - * positive area. - * - * This version is meant to work on polylines, not polygons. It leaves the - * endpoints of the polyline untouched. When misused on polygons, it may - * leave some degenerate vertices in. - * See \ref removeDegenerateVerts for a version that works on polygons. - */ - void removeDegenerateVertsPolyline(); - - /*! - * Removes overlapping consecutive line segments which don't delimit a - * positive area. - * \param for_polyline Indicate that we're removing degenerate vertices from - * a polyline, causing the endpoints of the polyline to be left untouched. - * When removing vertices from a polygon, the start and end can be - * considered for removal too, but when processing a polyline, removing - * those would cause the polyline to become shorter. - */ - void _removeDegenerateVerts(const bool for_polyline = false); - - /*! - * Removes the same polygons from this set (and also empty polygons). - * Polygons are considered the same if all points lie within [same_distance] of their counterparts. - */ - Polygons remove(const Polygons& to_be_removed, int same_distance = 0) const - { - Polygons result; - for (size_t poly_keep_idx = 0; poly_keep_idx < size(); poly_keep_idx++) - { - ConstPolygonRef poly_keep = (*this)[poly_keep_idx]; - bool should_be_removed = false; - if (poly_keep.size() > 0) - // for (int hole_poly_idx = 0; hole_poly_idx < to_be_removed.size(); hole_poly_idx++) - for (ConstPolygonRef poly_rem : to_be_removed) - { - // PolygonRef poly_rem = to_be_removed[hole_poly_idx]; - if (poly_rem.size() != poly_keep.size() || poly_rem.size() == 0) - continue; - - // find closest point, supposing this point aligns the two shapes in the best way - size_t closest_point_idx = 0; - coord_t smallestDist2 = -1; - for (size_t point_rem_idx = 0; point_rem_idx < poly_rem.size(); point_rem_idx++) - { - coord_t dist2 = vSize2(poly_rem[point_rem_idx] - poly_keep[0]); - if (dist2 < smallestDist2 || smallestDist2 < 0) - { - smallestDist2 = dist2; - closest_point_idx = point_rem_idx; - } - } - bool poly_rem_is_poly_keep = true; - // compare the two polygons on all points - if (smallestDist2 > same_distance * same_distance) - continue; - for (size_t point_idx = 0; point_idx < poly_rem.size(); point_idx++) - { - coord_t dist2 = vSize2(poly_rem[(closest_point_idx + point_idx) % poly_rem.size()] - poly_keep[point_idx]); - if (dist2 > same_distance * same_distance) - { - poly_rem_is_poly_keep = false; - break; - } - } - if (poly_rem_is_poly_keep) - { - should_be_removed = true; - break; - } - } - if (! should_be_removed) - result.add(poly_keep); - } - return result; - } - - Polygons processEvenOdd(ClipperLib::PolyFillType poly_fill_type = ClipperLib::PolyFillType::pftEvenOdd) const - { - Polygons ret; - ClipperLib::Clipper clipper(clipper_init); - clipper.AddPaths(paths, ClipperLib::ptSubject, true); - clipper.Execute(ClipperLib::ctUnion, ret.paths, poly_fill_type); - return ret; - } - - /*! - * Ensure the polygon is manifold, by removing small areas where the polygon touches itself. - * ____ ____ - * | | | | - * | |____ ==> | / ____ - * """"| | """ / | - * |____| |____| - * - */ - void ensureManifold(); - - coord_t polygonLength() const - { - coord_t length = 0; - for (ConstPolygonRef poly : *this) - { - length += poly.polygonLength(); - } - return length; - } - - coord_t polyLineLength() const; - - Point2LL min() const - { - Point2LL ret = Point2LL(POINT_MAX, POINT_MAX); - for (const ClipperLib::Path& polygon : paths) - { - for (Point2LL p : polygon) - { - ret.X = std::min(ret.X, p.X); - ret.Y = std::min(ret.Y, p.Y); - } - } - return ret; - } - - Point2LL max() const - { - Point2LL ret = Point2LL(POINT_MIN, POINT_MIN); - for (const ClipperLib::Path& polygon : paths) - { - for (Point2LL p : polygon) - { - ret.X = std::max(ret.X, p.X); - ret.Y = std::max(ret.Y, p.Y); - } - } - return ret; - } - - void applyMatrix(const PointMatrix& matrix) - { - for (size_t i = 0; i < paths.size(); i++) - { - for (size_t j = 0; j < paths[i].size(); j++) - { - paths[i][j] = matrix.apply(paths[i][j]); - } - } - } - - void applyMatrix(const Point3Matrix& matrix) - { - for (size_t i = 0; i < paths.size(); i++) - { - for (size_t j = 0; j < paths[i].size(); j++) - { - paths[i][j] = matrix.apply(paths[i][j]); - } - } - } - - Polygons offset(const std::vector& offset_dists) const; - - /*! - * @brief Export the polygon to a WKT string - * - * @param stream The stream to write to - */ - void writeWkt(std::ostream& stream) const; - - /*! - * @brief Import the polygon from a WKT string - * - * @param wkt The WKT string to read from - * @return Polygons The polygons read from the stream - */ - static Polygons fromWkt(const std::string& wkt); -}; - -/*! - * A single area with holes. The first polygon is the outline, while the rest are holes within this outline. - * - * This class has little more functionality than Polygons, but serves to show that a specific instance is ordered such that the first Polygon is the outline and the rest are holes. - */ -class PolygonsPart : public Polygons -{ -public: - PolygonRef outerPolygon() - { - return paths[0]; - } - ConstPolygonRef outerPolygon() const - { - return paths[0]; - } - - /*! - * Tests whether the given point is inside this polygon part. - * \param p The point to test whether it is inside. - * \param border_result If the point is exactly on the border, this will be - * returned instead. - */ - bool inside(Point2LL p, bool border_result = false) const; -}; - -/*! - * Extension of vector> which is similar to a vector of PolygonParts, except the base of the container is indices to polygons into the original Polygons, - * instead of the polygons themselves - */ -class PartsView : public std::vector> -{ -public: - Polygons& polygons_; - PartsView(Polygons& polygons) - : polygons_(polygons) - { - } - /*! - * Get the index of the PolygonsPart of which the polygon with index \p poly_idx is part. - * - * \param poly_idx The index of the polygon in \p polygons - * \param boundary_poly_idx Optional output parameter: The index of the boundary polygon of the part in \p polygons - * \return The PolygonsPart containing the polygon with index \p poly_idx - */ - size_t getPartContaining(size_t poly_idx, size_t* boundary_poly_idx = nullptr) const; - /*! - * Assemble the PolygonsPart of which the polygon with index \p poly_idx is part. - * - * \param poly_idx The index of the polygon in \p polygons - * \param boundary_poly_idx Optional output parameter: The index of the boundary polygon of the part in \p polygons - * \return The PolygonsPart containing the polygon with index \p poly_idx - */ - PolygonsPart assemblePartContaining(size_t poly_idx, size_t* boundary_poly_idx = nullptr) const; - /*! - * Assemble the PolygonsPart of which the polygon with index \p poly_idx is part. - * - * \param part_idx The index of the part - * \return The PolygonsPart with index \p poly_idx - */ - PolygonsPart assemblePart(size_t part_idx) const; -}; - -} // namespace cura - -#endif // UTILS_POLYGON_H diff --git a/include/utils/polygonUtils.h b/include/utils/polygonUtils.h index ecda641626..3856b8e645 100644 --- a/include/utils/polygonUtils.h +++ b/include/utils/polygonUtils.h @@ -1,4 +1,4 @@ -// Copyright (c) 2021 Ultimaker B.V. +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef UTILS_POLYGON_UTILS_H @@ -7,12 +7,14 @@ #include // function #include #include // unique_ptr +#include #include #include "PolygonsPointIndex.h" #include "SparseLineGrid.h" #include "SparsePointGridInclusive.h" -#include "polygon.h" +#include "geometry/ClosedLinesSet.h" +#include "geometry/Polygon.h" namespace cura { @@ -20,14 +22,15 @@ namespace cura /*! * Result of finding the closest point to a given within a set of polygons, with extra information on where the point is. */ -struct ClosestPolygonPoint +template +struct ClosestPoint { Point2LL location_; //!< Result location - ConstPolygonPointer poly_; //!< Polygon in which the result was found (or nullptr if no result was found) - size_t poly_idx_; //!< The index of the polygon in some Polygons where ClosestPolygonPoint::poly can be found + const LineType* poly_{ nullptr }; //!< Line in which the result was found (or nullptr if no result was found) + size_t poly_idx_; //!< The index of the polygon in some Polygons where ClosestPoint::poly can be found size_t point_idx_; //!< Index to the first point in the polygon of the line segment on which the result was found - ClosestPolygonPoint(Point2LL p, size_t pos, ConstPolygonRef poly) + ClosestPoint(Point2LL p, size_t pos, const LineType* poly) : location_(p) , poly_(poly) , poly_idx_(NO_INDEX) @@ -35,7 +38,7 @@ struct ClosestPolygonPoint { } - ClosestPolygonPoint(Point2LL p, size_t pos, ConstPolygonRef poly, size_t poly_idx) + ClosestPoint(Point2LL p, size_t pos, const LineType* poly, size_t poly_idx) : location_(p) , poly_(poly) , poly_idx_(poly_idx) @@ -43,14 +46,14 @@ struct ClosestPolygonPoint { } - ClosestPolygonPoint(ConstPolygonRef poly) + ClosestPoint(const LineType* poly) : poly_(poly) , poly_idx_(NO_INDEX) , point_idx_(NO_INDEX) { } - ClosestPolygonPoint() + ClosestPoint() : poly_idx_(NO_INDEX) , point_idx_(NO_INDEX) { @@ -66,7 +69,7 @@ struct ClosestPolygonPoint return point_idx_ != NO_INDEX; } - bool operator==(const ClosestPolygonPoint& rhs) const + bool operator==(const ClosestPoint& rhs) const { // no need to compare on poy_idx // it's sometimes unused while poly is always initialized @@ -74,36 +77,7 @@ struct ClosestPolygonPoint } }; -} // namespace cura - -namespace std -{ -template<> -struct hash -{ - size_t operator()(const cura::ClosestPolygonPoint& cpp) const - { - return std::hash()(cpp.p()); - } -}; -} // namespace std - - -namespace std -{ -template -struct hash> -{ - size_t operator()(const std::pair& pair) const - { - return 31 * std::hash()(pair.first) + 59 * std::hash()(pair.second); - } -}; -} // namespace std - - -namespace cura -{ +using ClosestPointPolygon = ClosestPoint; /*! * A point within a polygon and the index of which segment in the polygon the point lies on. @@ -121,40 +95,12 @@ class PolygonUtils public: static const std::function no_penalty_function; //!< Function always returning zero - /*! - * compute the length of a segment of a polygon - * - * if \p end == \p start then the full polygon is taken - * - * \warning assumes that start and end lie on the same polygon! - * - * \param start The start vertex of the segment - * \param end the end vertex of the segment - * \return the total length of all the line segments in between the two vertices. - */ - static int64_t segmentLength(PolygonsPointIndex start, PolygonsPointIndex end); - - /*! - * Generate evenly spread out dots along a segment of a polygon - * - * Start at a distance from \p start and end at a distance from \p end, - * unless \p end == \p start; then that point is in the result - * - * \warning Assumes that start and end lie on the same polygon! - * - * \param start The start vertex of the segment - * \param end the end vertex of the segment - * \param n_dots number of dots to spread out - * \param result Where to store the generated points - */ - static void spreadDots(PolygonsPointIndex start, PolygonsPointIndex end, unsigned int n_dots, std::vector& result); - /*! * Generate a grid of dots inside of the area of the \p polygons. */ - static std::vector spreadDotsArea(const Polygons& polygons, coord_t grid_size); + static std::vector spreadDotsArea(const Shape& polygons, coord_t grid_size); - static std::vector spreadDotsArea(const Polygons& polygons, Point2LL grid_size); + static std::vector spreadDotsArea(const Shape& polygons, Point2LL grid_size); /*! * Whether a polygon intersects with a line-segment. If true, the closest collision point to 'b' is stored in the result. @@ -162,7 +108,7 @@ class PolygonUtils static bool lineSegmentPolygonsIntersection( const Point2LL& a, const Point2LL& b, - const Polygons& current_outlines, + const Shape& current_outlines, const LocToLineGrid& outline_locator, Point2LL& result, const coord_t within_max_dist); @@ -175,7 +121,7 @@ class PolygonUtils * \param poly The polygon. * \param point_idx The index of the point in the polygon. */ - static Point2LL getVertexInwardNormal(ConstPolygonRef poly, unsigned int point_idx); + static Point2LL getVertexInwardNormal(const Polyline& poly, unsigned int point_idx); /*! * Get a point from the \p poly with a given \p offset. @@ -185,15 +131,7 @@ class PolygonUtils * \param offset The distance the point has to be moved outward from the polygon. * \return A point at the given distance inward from the point on the boundary polygon. */ - static Point2LL getBoundaryPointWithOffset(ConstPolygonRef poly, unsigned int point_idx, int64_t offset); - - /*! - * Move a point away from the boundary by looking at the boundary normal of the nearest vert. - * - * \param point_on_boundary The object holding the point on the boundary along with the information of which line segment the point is on. - * \param offset The distance the point has to be moved inward from the polygon. - */ - static Point2LL moveInsideDiagonally(ClosestPolygonPoint point_on_boundary, int64_t inset); + static Point2LL getBoundaryPointWithOffset(const Polyline& poly, unsigned int point_idx, int64_t offset); /*! * Moves the point \p from onto the nearest polygon or leaves the point as-is, when the comb boundary is not within the root of \p max_dist2 distance. @@ -207,7 +145,7 @@ class PolygonUtils * \param max_dist2 The squared maximal allowed distance from the point to the nearest polygon. * \return The index to the polygon onto which we have moved the point. */ - static size_t moveInside(const Polygons& polygons, Point2LL& from, int distance = 0, int64_t max_dist2 = std::numeric_limits::max()); + static size_t moveInside(const Shape& polygons, Point2LL& from, int distance = 0, int64_t max_dist2 = std::numeric_limits::max()); /** * \brief Moves the point \p from onto the nearest polygon or leaves the @@ -225,7 +163,7 @@ class PolygonUtils * the polygon. * \return Always returns 0. */ - static unsigned int moveInside(const ConstPolygonRef polygon, Point2LL& from, int distance = 0, int64_t max_dist2 = std::numeric_limits::max()); + static unsigned int moveInside(const ClosedPolyline& polygon, Point2LL& from, int distance = 0, int64_t max_dist2 = std::numeric_limits::max()); /*! * Moves the point \p from onto the nearest polygon or leaves the point as-is, when the comb boundary is not within the root of \p max_dist2 distance. @@ -235,7 +173,7 @@ class PolygonUtils * * \warning If \p loc_to_line_grid is used, it's best to have all and only \p polygons in there. * If \p from is not closest to \p polygons this function may - * return a ClosestPolygonPoint on a polygon in \p loc_to_line_grid which is not in \p polygons. + * return a ClosestPointPolygon on a polygon in \p loc_to_line_grid which is not in \p polygons. * * \param polygons The polygons onto which to move the point * \param from[in,out] The point to move. @@ -246,12 +184,12 @@ class PolygonUtils * \param penalty_function A function returning a penalty term on the squared distance score of a candidate point. * \return The point on the polygon closest to \p from */ - static ClosestPolygonPoint moveInside2( - const Polygons& polygons, + static ClosestPointPolygon moveInside2( + const Shape& polygons, Point2LL& from, const int distance = 0, const int64_t max_dist2 = std::numeric_limits::max(), - const Polygons* loc_to_line_polygons = nullptr, + const Shape* loc_to_line_polygons = nullptr, const LocToLineGrid* loc_to_line_grid = nullptr, const std::function& penalty_function = no_penalty_function); @@ -274,9 +212,9 @@ class PolygonUtils * \param penalty_function A function returning a penalty term on the squared distance score of a candidate point. * \return The point on the polygon closest to \p from */ - static ClosestPolygonPoint moveInside2( - const Polygons& loc_to_line_polygons, - ConstPolygonRef polygon, + static ClosestPointPolygon moveInside2( + const Shape& loc_to_line_polygons, + const Polygon& polygon, Point2LL& from, const int distance = 0, const int64_t max_dist2 = std::numeric_limits::max(), @@ -298,7 +236,7 @@ class PolygonUtils * \param penalty_function A function returning a penalty term on the squared distance score of a candidate point. * \return The index to the polygon onto which we have moved the point. */ - static unsigned int moveOutside(const Polygons& polygons, Point2LL& from, int distance = 0, int64_t max_dist2 = std::numeric_limits::max()); + static unsigned int moveOutside(const Shape& polygons, Point2LL& from, int distance = 0, int64_t max_dist2 = std::numeric_limits::max()); /*! * Compute a point at a distance from a point on the boundary in orthogonal direction to the boundary. @@ -308,7 +246,7 @@ class PolygonUtils * \param distance The distance by which to move the point. * \return A point at a \p distance from the point in \p cpp orthogonal to the boundary there. */ - static Point2LL moveInside(const ClosestPolygonPoint& cpp, const int distance); + static Point2LL moveInside(const ClosestPointPolygon& cpp, const int distance); /*! * The opposite of moveInside. @@ -320,7 +258,7 @@ class PolygonUtils * \param distance The distance by which to move the point. * \return A point at a \p distance from the point in \p cpp orthogonal to the boundary there. */ - static Point2LL moveOutside(const ClosestPolygonPoint& cpp, const int distance); + static Point2LL moveOutside(const ClosestPointPolygon& cpp, const int distance); /*! * Moves the point \p from onto the nearest polygon or leaves the point as-is, when the comb boundary is not within \p distance. @@ -345,12 +283,12 @@ class PolygonUtils * \param penalty_function A function returning a penalty term on the squared distance score of a candidate point. * \return The point on the polygon closest to \p from */ - static ClosestPolygonPoint ensureInsideOrOutside( - const Polygons& polygons, + static ClosestPointPolygon ensureInsideOrOutside( + const Shape& polygons, Point2LL& from, int preferred_dist_inside, int64_t max_dist2 = std::numeric_limits::max(), - const Polygons* loc_to_line_polygons = nullptr, + const Shape* loc_to_line_polygons = nullptr, const LocToLineGrid* loc_to_line_grid = nullptr, const std::function& penalty_function = no_penalty_function); @@ -377,12 +315,12 @@ class PolygonUtils * \param penalty_function A function returning a penalty term on the squared distance score of a candidate point. * \return The point on the polygon closest to \p from */ - static ClosestPolygonPoint ensureInsideOrOutside( - const Polygons& polygons, + static ClosestPointPolygon ensureInsideOrOutside( + const Shape& polygons, Point2LL& from, - const ClosestPolygonPoint& closest_polygon_point, + const ClosestPointPolygon& closest_polygon_point, int preferred_dist_inside, - const Polygons* loc_to_line_polygons = nullptr, + const Shape* loc_to_line_polygons = nullptr, const LocToLineGrid* loc_to_line_grid = nullptr, const std::function& penalty_function = no_penalty_function); @@ -390,7 +328,7 @@ class PolygonUtils * * \warning Assumes \p poly1_result and \p poly2_result have their pos and poly fields initialized! */ - static void walkToNearestSmallestConnection(ClosestPolygonPoint& poly1_result, ClosestPolygonPoint& poly2_result); + static void walkToNearestSmallestConnection(ClosestPointPolygon& poly1_result, ClosestPointPolygon& poly2_result); /*! * Find the nearest closest point on a polygon from a given index. @@ -400,7 +338,7 @@ class PolygonUtils * \param start_idx The index of the point in the polygon from which to start looking. * \return The nearest point from \p start_idx going along the \p polygon (in both directions) with a locally minimal distance to \p from. */ - static ClosestPolygonPoint findNearestClosest(Point2LL from, ConstPolygonRef polygon, int start_idx); + static ClosestPointPolygon findNearestClosest(Point2LL from, const Polygon& polygon, int start_idx); /*! * Find the nearest closest point on a polygon from a given index walking in one direction along the polygon. @@ -411,7 +349,7 @@ class PolygonUtils * \param direction The direction to walk: 1 for walking along the \p polygon, -1 for walking in opposite direction * \return The nearest point from \p start_idx going along the \p polygon with a locally minimal distance to \p from. */ - static ClosestPolygonPoint findNearestClosest(const Point2LL from, ConstPolygonRef polygon, int start_idx, int direction); + static ClosestPointPolygon findNearestClosest(const Point2LL from, const Polygon& polygon, int start_idx, int direction); /*! * Find the point closest to \p from in all polygons in \p polygons. @@ -420,7 +358,7 @@ class PolygonUtils * * \param penalty_function A function returning a penalty term on the squared distance score of a candidate point. */ - static ClosestPolygonPoint findClosest(Point2LL from, const Polygons& polygons, const std::function& penalty_function = no_penalty_function); + static ClosestPointPolygon findClosest(Point2LL from, const Shape& polygons, const std::function& penalty_function = no_penalty_function); /*! * Find the point closest to \p from in the polygon \p polygon. @@ -429,7 +367,7 @@ class PolygonUtils * * \param penalty_function A function returning a penalty term on the squared distance score of a candidate point. */ - static ClosestPolygonPoint findClosest(Point2LL from, ConstPolygonRef polygon, const std::function& penalty_function = no_penalty_function); + static ClosestPointPolygon findClosest(Point2LL from, const Polygon& polygon, const std::function& penalty_function = no_penalty_function); /*! * Find the nearest vertex to \p from in \p polys @@ -437,7 +375,7 @@ class PolygonUtils * \param polys The polygons in which to search * \return The nearest vertex on the polygons */ - static PolygonsPointIndex findNearestVert(const Point2LL from, const Polygons& polys); + static PolygonsPointIndex findNearestVert(const Point2LL from, const Shape& polys); /*! * Find the nearest vertex to \p from in \p poly @@ -445,7 +383,7 @@ class PolygonUtils * \param poly The polygon in which to search * \return The index to the nearest vertex on the polygon */ - static unsigned int findNearestVert(const Point2LL from, ConstPolygonRef poly); + static unsigned int findNearestVert(const Point2LL from, const Polygon& poly); /*! * Create a SparsePointGridInclusive mapping from locations to line segments occurring in the \p polygons @@ -456,7 +394,7 @@ class PolygonUtils * \param square_size The cell size used to bundle line segments (also used to chop up lines so that multiple cells contain the same long line) * \return A bucket grid mapping spatial locations to poly-point indices into \p polygons */ - static std::unique_ptr createLocToLineGrid(const Polygons& polygons, int square_size); + static std::unique_ptr createLocToLineGrid(const Shape& polygons, int square_size); /*! * Find the line segment closest to a given point \p from within a cell-block of a size defined in the SparsePointGridInclusive \p loc_to_line @@ -470,8 +408,8 @@ class PolygonUtils * \param penalty_function A function returning a penalty term on the squared distance score of a candidate point. * \return The nearest point on the polygon if the polygon was within a distance equal to the cell_size of the SparsePointGridInclusive */ - static std::optional - findClose(Point2LL from, const Polygons& polygons, const LocToLineGrid& loc_to_line, const std::function& penalty_function = no_penalty_function); + static std::optional + findClose(Point2LL from, const Shape& polygons, const LocToLineGrid& loc_to_line, const std::function& penalty_function = no_penalty_function); /*! * Find the line segment closest to any point on \p from within cell-blocks of a size defined in the SparsePointGridInclusive \p destination_loc_to_line @@ -486,9 +424,9 @@ class PolygonUtils * \return A collection of near crossing from the \p from polygon to the \p destination polygon. Each element in the sollection is a pair with as first a cpp in the \p from * polygon and as second a cpp in the \p destination polygon. */ - static std::vector> findClose( - ConstPolygonRef from, - const Polygons& destination, + static std::vector> findClose( + const Polygon& from, + const Shape& destination, const LocToLineGrid& destination_loc_to_line, const std::function& penalty_function = no_penalty_function); @@ -517,12 +455,13 @@ class PolygonUtils * \param start_idx the index of the prev poly point on the poly. * \param poly_start_idx The index of the point in the polygon which is to be handled as the start of the polygon. No point further than this point will be the result. */ - static bool getNextPointWithDistance(Point2LL from, int64_t dist, ConstPolygonRef poly, int start_idx, int poly_start_idx, GivenDistPoint& result); + static bool getNextPointWithDistance(Point2LL from, int64_t dist, const OpenPolyline& poly, int start_idx, int poly_start_idx, GivenDistPoint& result); /*! * Walk a given \p distance along the polygon from a given point \p from on the polygon */ - static ClosestPolygonPoint walk(const ClosestPolygonPoint& from, coord_t distance); + template + static ClosestPoint walk(const ClosestPoint& from, coord_t distance); /*! * Get the point on a polygon which intersects a line parallel to a line going through the starting point and through another point. @@ -536,7 +475,7 @@ class PolygonUtils * \param forward Whether to look forward from \p start in the direction of the polygon, or go in the other direction. * \return The earliest point on the polygon in the given direction which crosses a line parallel to the given one at the distance \p dist - if any */ - static std::optional getNextParallelIntersection(const ClosestPolygonPoint& start, const Point2LL& line_to, const coord_t dist, const bool forward); + static std::optional getNextParallelIntersection(const ClosestPointPolygon& start, const Point2LL& line_to, const coord_t dist, const bool forward); /*! * Checks whether a given line segment collides with a given polygon(s). @@ -559,7 +498,7 @@ class PolygonUtils * polygon(s) */ static bool - polygonCollidesWithLineSegment(ConstPolygonRef poly, const Point2LL& transformed_startPoint, const Point2LL& transformed_endPoint, PointMatrix transformation_matrix); + polygonCollidesWithLineSegment(const Polygon& poly, const Point2LL& transformed_startPoint, const Point2LL& transformed_endPoint, PointMatrix transformation_matrix); /*! * Checks whether a given line segment collides with a given polygon(s). @@ -575,7 +514,7 @@ class PolygonUtils * \return whether the line segment collides with the boundary of the * polygon(s) */ - static bool polygonCollidesWithLineSegment(ConstPolygonRef poly, const Point2LL& startPoint, const Point2LL& endPoint); + static bool polygonCollidesWithLineSegment(const Polygon& poly, const Point2LL& startPoint, const Point2LL& endPoint); /*! * Checks whether a given line segment collides with a given polygon(s). @@ -597,8 +536,7 @@ class PolygonUtils * \return whether the line segment collides with the boundary of the * polygon(s) */ - static bool - polygonCollidesWithLineSegment(const Polygons& polys, const Point2LL& transformed_startPoint, const Point2LL& transformed_endPoint, PointMatrix transformation_matrix); + static bool polygonCollidesWithLineSegment(const Shape& polys, const Point2LL& transformed_startPoint, const Point2LL& transformed_endPoint, PointMatrix transformation_matrix); /*! * Checks whether a given line segment collides with a given polygon(s). @@ -614,7 +552,7 @@ class PolygonUtils * \return whether the line segment collides with the boundary of the * polygon(s) */ - static bool polygonCollidesWithLineSegment(const Polygons& polys, const Point2LL& startPoint, const Point2LL& endPoint); + static bool polygonCollidesWithLineSegment(const Shape& polys, const Point2LL& startPoint, const Point2LL& endPoint); /*! * Checks whether two polygon groups intersect - does a BB hit check first and if that succeeds, the full intersection @@ -623,7 +561,7 @@ class PolygonUtils * \param poly_b Another polygon group * \return true if \p poly_a and \p poly_b intersect, false otherwise */ - static bool polygonsIntersect(const ConstPolygonRef& poly_a, const ConstPolygonRef& poly_b); + static bool polygonsIntersect(const Polygon& poly_a, const Polygon& poly_b); /*! * Checks whether two polygons are adjacent (closer than \p max_gap) @@ -633,7 +571,7 @@ class PolygonUtils * \param[in] max_gap Polygons must be closer together than this distance to be considered adjacent. * \return true if a vertex in \p inner_poly is sufficiently close to a line in \p outer_poly, false otherwise */ - static bool polygonOutlinesAdjacent(const ConstPolygonRef inner_poly, const ConstPolygonRef outer_poly, const coord_t max_gap); + static bool polygonOutlinesAdjacent(const Polygon& inner_poly, const Polygon& outer_poly, const coord_t max_gap); /*! * Searches \p possible_adjacent_polys for polygons that are closer to \p poly than \p max_gap. The indices of adjacent polygons are stored in \p adjacent_poly_indices. @@ -643,11 +581,8 @@ class PolygonUtils * \param[in] possible_adjacent_polys The vector of polygons we are testing. * \param[in] max_gap Polygons must be closer together than this distance to be considered adjacent. */ - static void findAdjacentPolygons( - std::vector& adjacent_poly_indices, - const ConstPolygonRef& poly, - const std::vector& possible_adjacent_polys, - const coord_t max_gap); + static void + findAdjacentPolygons(std::vector& adjacent_poly_indices, const Polygon& poly, const std::vector& possible_adjacent_polys, const coord_t max_gap); /*! * Calculate the Hamming Distance between two polygons relative to their own @@ -662,28 +597,76 @@ class PolygonUtils * two polygons. This will be between 0.0 (the polygons are exactly equal) * and 1.0 (the polygons are completely disjunct). */ - static double relativeHammingDistance(const Polygons& poly_a, const Polygons& poly_b); + static double relativeHammingDistance(const Shape& poly_a, const Shape& poly_b); + + /*! + * Creates a regular polygon that is supposed to approximate a disc. + * + * \param mid The center of the disc. + * \param radius The radius of the disc. + * \param steps The numbers of segments (definition) of the generated disc. + * \return A new Polygon containing the disc. + */ + static Polygon makeDisc(const Point2LL& mid, const coord_t radius, const size_t steps); /*! - * Create an approximation of a circle. + * Creates a closed polyline that is supposed to approximate a circle. * - * This creates a regular polygon that is supposed to approximate a circle. * \param mid The center of the circle. * \param radius The radius of the circle. - * \param a_step The angle between segments of the circle. - * \return A new Polygon containing the circle. + * \param segments The numbers of segments (definition) of the generated circle. + * \tparam explicitly_closed Indicates whether the circle should be explicitely (or implicitely) closed + * \return A new object containing the circle points. */ - static Polygon makeCircle(const Point2LL mid, const coord_t radius, const AngleRadians a_step = std::numbers::pi / 8); + template + static T makeCircle(const Point2LL& mid, const coord_t radius, const size_t segments, VA... args) + { + T circle; + const AngleRadians step_angle = (std::numbers::pi * 2) / static_cast(segments); + for (size_t step = 0; step < segments; ++step) + { + const AngleRadians angle = static_cast(step) * step_angle; + circle.emplace_back(makeCirclePoint(mid, radius, angle), args...); + } + + if constexpr (explicitely_closed) + { + circle.push_back(circle.front()); + } + + return circle; + } /*! - * Connect all polygons to their holes using zero widths hole channels, so that the polygons and their outlines are connected together + * Create a point of a circle. + * + * \param mid The center of the circle. + * \param radius The radius of the circle. + * \param angle The point angular position + * \return The coordinates of the point on the circle. + */ + static Point2LL makeCirclePoint(const Point2LL& mid, const coord_t radius, const AngleRadians& angle); + + /*! + * This creates a polyline which represents the shape of a wheel, which is kind of a "circular zigzag" pattern. + * + * \param mid The center of the circle. + * \param inner_radius The radius of the wheel inner circle. + * \param outer_radius The radius of the wheel outer circle. + * \param semi_nb_spokes The semi number of spokes in the wheel. There will actually be N*2 spokes. + * \param arc_angle_resolution The number of segments on each arc. + * \return A new Polyline containing the circle. */ - static Polygons connect(const Polygons& input); + static ClosedPolyline makeWheel(const Point2LL& mid, const coord_t inner_radius, const coord_t outer_radius, const size_t semi_nb_spokes, const size_t arc_angle_resolution); - static void fixSelfIntersections(const coord_t epsilon, Polygons& thiss); + /*! + * Connect all polygons to their holes using zero widths hole channels, so that the polygons and their outlines are connected together + */ + static Shape connect(const Shape& input); - static Polygons unionManySmall(const Polygons& p); + static void fixSelfIntersections(const coord_t epsilon, Shape& polygon); + static Shape unionManySmall(const Shape& polygon); /*! * Intersects a polygon with an AABB. @@ -691,43 +674,60 @@ class PolygonUtils * \param aabb The AABB with which the polygon that has to be intersected with * \return A new Polygon that is said intersection */ - static Polygons clipPolygonWithAABB(const Polygons& src, const AABB& aabb); + static Shape clipPolygonWithAABB(const Shape& src, const AABB& aabb); /*! - * Generate a few outset polygons around the given base, according to the given line width + * Generate a few outset circles around a base, according to the given line width * - * \param inner_poly The inner polygon to start generating the outset from - * \param count The number of outer polygons to add + * \param center The center of the outset + * \param inner_radius The inner radius to start generating the outset from + * \param outer_radius The outer radius to fit the outset into * \param line_width The actual line width to distance the polygons from each other (and from the base) - * \return The generated outset polygons + * \param circle_definition The definition (number of segments) of the generated circles + * \return The generated outset circles, and the outer radius or the shape */ - static Polygons generateOutset(const Polygons& inner_poly, size_t count, coord_t line_width); + static std::tuple + generateCirculatOutset(const Point2LL& center, const coord_t inner_radius, const coord_t outer_radius, const coord_t line_width, const size_t circle_definition); /*! - * Generate inset polygons inside the given base, until there is no space left, according to the given line width + * Generate inset circles inside the given base, until there is no space left, according to the given line width * - * \param outer_poly The outer polygon to start generating the inset from + * \param center The center of the inset + * \param outer_radius The outer radius to start generating the inset from * \param line_width The actual line width to distance the polygons from each other (and from the base) - * \param initial_inset The inset distance to be added to the first generated polygon - * \return The generated inset polygons + * \param circle_definition The definition (number of segments) of the generated circles + * \return The generated inset circles */ - static Polygons generateInset(const Polygons& outer_poly, coord_t line_width, coord_t initial_inset = 0); + static ClosedLinesSet generateCircularInset(const Point2LL& center, const coord_t outer_radius, const coord_t line_width, const size_t circle_definition); private: /*! * Helper function for PolygonUtils::moveInside2: moves a point \p from which was moved onto \p closest_polygon_point towards inside/outside when it's not already * inside/outside by enough distance. * - * \param closest_polygon_point The ClosestPolygonPoint we have to move inside + * \param closest_polygon_point The ClosestPointPolygon we have to move inside * \param distance The distance by which to move the point. * \param from[in,out] The point to move. * \param max_dist2 The squared maximal allowed distance from the point to the nearest polygon. * \return The point on the polygon closest to \p from */ - static ClosestPolygonPoint _moveInside2(const ClosestPolygonPoint& closest_polygon_point, const int distance, Point2LL& from, const int64_t max_dist2); + static ClosestPointPolygon _moveInside2(const ClosestPointPolygon& closest_polygon_point, const int distance, Point2LL& from, const int64_t max_dist2); }; - } // namespace cura -#endif // POLYGON_OPTIMIZER_H +namespace std +{ + +template<> +struct hash +{ + size_t operator()(const cura::ClosestPointPolygon& cpp) const + { + return std::hash()(cpp.p()); + } +}; + +} // namespace std + +#endif // UTILS_POLYGON_UTILS_H diff --git a/include/utils/sentry_sink.h b/include/utils/sentry_sink.h deleted file mode 100644 index 9757eee5a7..0000000000 --- a/include/utils/sentry_sink.h +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (c) 2023 UltiMaker -// CuraEngine is released under the terms of the AGPLv3 or higher - -#ifndef CURAENGINE_INCLUDE_UTILS_SENTRY_SINK_H -#define CURAENGINE_INCLUDE_UTILS_SENTRY_SINK_H - -#include - -#include -#include - -template -class SentryBreadcrumbSink : public spdlog::sinks::base_sink -{ -protected: - void sink_it_(const spdlog::details::log_msg& msg) override - { - sentry_value_t crumb = sentry_value_new_breadcrumb("debug", msg.payload.data()); - sentry_value_set_by_key(crumb, "category", sentry_value_new_string(msg.logger_name.data())); - sentry_value_set_by_key(crumb, "level", sentry_value_new_string(spdlog::level::to_string_view(msg.level).data())); - - auto duration = msg.time.time_since_epoch(); - auto timestamp = std::chrono::duration_cast(duration).count(); - sentry_value_set_by_key(crumb, "timestamp", sentry_value_new_int32(timestamp)); - - sentry_add_breadcrumb(crumb); - } - void flush_() override - { - // The sink doesn't buffer or cache anything, so there's nothing to flush - } -}; - -// Convenience typedefs -using SentryBreadcrumbSink_mt = SentryBreadcrumbSink; -using SentryBreadcrumbSink_st = SentryBreadcrumbSink; - -#endif // CURAENGINE_INCLUDE_UTILS_SENTRY_SINK_H diff --git a/include/utils/string.h b/include/utils/string.h index 90ddc318fd..7468077279 100644 --- a/include/utils/string.h +++ b/include/utils/string.h @@ -4,6 +4,7 @@ #ifndef UTILS_STRING_H #define UTILS_STRING_H +#include #include // sprintf #include #include // ostringstream @@ -169,6 +170,11 @@ struct PrecisionedDouble uint8_t precision; //!< Number of digits after the decimal mark with which to convert to string double value; //!< The double value + bool wouldWriteZero() const + { + return (std::abs(value) * std::pow(10.0, precision)) < 1.0; + } + friend inline std::ostream& operator<<(std::ostream& out, const PrecisionedDouble precision_and_input) { writeDoubleToStream(precision_and_input.precision, precision_and_input.value, out); diff --git a/include/utils/types/generic.h b/include/utils/types/generic.h index 7d53dcfe86..4b4d6fc474 100644 --- a/include/utils/types/generic.h +++ b/include/utils/types/generic.h @@ -1,15 +1,15 @@ -// Copyright (c) 2023 UltiMaker +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher #ifndef CURAENGINE_GENERIC_H #define CURAENGINE_GENERIC_H -#include - #include #include #include +#include + namespace cura::utils { // clang-format off @@ -63,6 +63,12 @@ concept floating_point = std::floating_point; template concept numeric = std::is_arithmetic_v>; + +template +concept multipliable = requires(T a, T b) +{ + { a * b }; +}; } // namespace cura::utils #endif // CURAENGINE_GENERIC_H diff --git a/include/utils/types/get.h b/include/utils/types/get.h index 4df9c0f494..a1b6774aa8 100644 --- a/include/utils/types/get.h +++ b/include/utils/types/get.h @@ -103,7 +103,9 @@ constexpr auto& get(cura::utils::point3d auto& point) noexcept { constexpr std::string_view idx = C.value; static_assert(idx.size() == 1, "Only one character allowed"); - static_assert(idx.starts_with("X") || idx.starts_with("x") || idx.starts_with("Y") || idx.starts_with("y") || idx.starts_with("Z") || idx.starts_with("z"), "Index out of bounds"); + static_assert( + idx.starts_with("X") || idx.starts_with("x") || idx.starts_with("Y") || idx.starts_with("y") || idx.starts_with("Z") || idx.starts_with("z"), + "Index out of bounds"); if constexpr (idx.starts_with("X") || idx.starts_with("x")) { return std::get<0>(point); diff --git a/include/utils/views/split_paths.h b/include/utils/views/split_paths.h new file mode 100644 index 0000000000..2b68f6b211 --- /dev/null +++ b/include/utils/views/split_paths.h @@ -0,0 +1,33 @@ +// Copyright (c) 2024 UltiMaker +// CuraEngine is released under the terms of the AGPLv3 or higher + +#ifndef CURAENGINE_SPLIT_PATHS_H +#define CURAENGINE_SPLIT_PATHS_H + +#include + +#include +#include +#include + +namespace cura::views +{ +namespace details +{ +#ifdef _WIN32 +constexpr auto path_sep = ';'; +#else +constexpr auto path_sep = ':'; +#endif +} // namespace details + +inline static constexpr auto split_paths = ranges::views::split(details::path_sep) + | ranges::views::transform( + [](auto&& rng) + { + return std::string_view(&*rng.begin(), ranges::distance(rng)); + }); + +} // namespace cura::views + +#endif // CURAENGINE_SPLIT_PATHS_H diff --git a/src/Application.cpp b/src/Application.cpp index 23e599cd96..a2a271f617 100644 --- a/src/Application.cpp +++ b/src/Application.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2023 UltiMaker +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher #include "Application.h" @@ -18,15 +18,10 @@ #include #include -#include "FffProcessor.h" #include "communication/ArcusCommunication.h" //To connect via Arcus to the front-end. #include "communication/CommandLine.h" //To use the command line to slice stuff. -#include "plugins/slots.h" #include "progress/Progress.h" #include "utils/ThreadPool.h" -#ifdef SENTRY_URL -#include "utils/sentry_sink.h" -#endif #include "utils/string.h" //For stringcasecompare. namespace cura @@ -39,11 +34,6 @@ Application::Application() auto base_sink = std::make_shared(); dup_sink->add_sink(base_sink); -#ifdef SENTRY_URL - auto sentry_sink = std::make_shared(); - dup_sink->add_sink(sentry_sink); -#endif - spdlog::default_logger()->sinks() = std::vector>{ dup_sink }; // replace default_logger sinks with the duplicating filtering sink to avoid spamming @@ -139,7 +129,9 @@ void Application::printHelp() const fmt::print(" -v\n\tIncrease the verbose level (show log messages).\n"); fmt::print(" -m\n\tSet the desired number of threads.\n"); fmt::print(" -p\n\tLog progress information.\n"); + fmt::print(" -d Add definition search paths seperated by a `:` (Unix) or `;` (Windows)\n"); fmt::print(" -j\n\tLoad settings.def.json file to register all settings and their defaults.\n"); + fmt::print(" -r\n\tLoad a json file containing resolved setting values.\n"); fmt::print(" -s =\n\tSet a setting to a value for the last supplied object, \n\textruder train, or general settings.\n"); fmt::print(" -l \n\tLoad an STL model. \n"); fmt::print(" -g\n\tSwitch setting focus to the current mesh group only.\n\tUsed for one-at-a-time printing.\n"); @@ -156,11 +148,50 @@ void Application::printHelp() const fmt::print("\n"); } -void Application::printLicense() const +void Application::printHeader() const { fmt::print("\n"); fmt::print("Cura_SteamEngine version {}\n", CURA_ENGINE_VERSION); - fmt::print("Copyright (C) 2023 Ultimaker\n"); + +#ifdef DEBUG + fmt::print("\n"); + fmt::print(" _______ ________ _______ __ __ ______\n"); + fmt::print("/ \\ / |/ \\ / | / | / \\\n"); + fmt::print("███████ |████████/ ███████ |██ | ██ |/██████ |\n"); + fmt::print("██ | ██ |██ |__ ██ |__██ |██ | ██ |██ | _██/\n"); + fmt::print("██ | ██ |██ | ██ ██< ██ | ██ |██ |/ |\n"); + fmt::print("██ | ██ |█████/ ███████ |██ | ██ |██ |████ |\n"); + fmt::print("██ |__██ |██ |_____ ██ |__██ |██ \\__██ |██ \\__██ |\n"); + fmt::print("██ ██/ ██ |██ ██/ ██ ██/ ██ ██/\n"); + fmt::print("███████/ ████████/ ███████/ ██████/ ██████/\n"); + fmt::print("\n"); + fmt::print(" __ __ ______ _______ ________\n"); + fmt::print("/ \\ / | / \\ / \\ / |\n"); + fmt::print("██ \\ /██ |/██████ |███████ |████████/\n"); + fmt::print("███ \\ /███ |██ | ██ |██ | ██ |██ |__\n"); + fmt::print("████ /████ |██ | ██ |██ | ██ |██ |\n"); + fmt::print("██ ██ ██/██ |██ | ██ |██ | ██ |█████/\n"); + fmt::print("██ |███/ ██ |██ \\__██ |██ |__██ |██ |_____\n"); + fmt::print("██ | â–ˆ/ ██ |██ ██/ ██ ██/ ██ |\n"); + fmt::print("██/ ██/ ██████/ ███████/ ████████/\n"); + fmt::print("\n"); + + fmt::print("#########################################################\n"); + fmt::print("#########################################################\n"); + fmt::print("## WARNING: This version of CuraEngine has been built ##\n"); + fmt::print("## in developper mode. This may impact performances, ##\n"); + fmt::print("## provoke unexpected results or crashes. ##\n"); + fmt::print("## If you downloaded an official version of CuraEngine ##\n"); + fmt::print("## and see this message, please report the issue. ##\n"); + fmt::print("#########################################################\n"); + fmt::print("#########################################################\n"); +#endif +} + +void Application::printLicense() const +{ + fmt::print("\n"); + fmt::print("Copyright (C) 2024 Ultimaker\n"); fmt::print("\n"); fmt::print("This program is free software: you can redistribute it and/or modify\n"); fmt::print("it under the terms of the GNU Affero General Public License as published by\n"); @@ -192,6 +223,7 @@ void Application::run(const size_t argc, char** argv) argc_ = argc; argv_ = argv; + printHeader(); printLicense(); Progress::init(); diff --git a/src/BeadingStrategy/BeadingStrategyFactory.cpp b/src/BeadingStrategy/BeadingStrategyFactory.cpp index c929bd5d9f..8b2d289449 100644 --- a/src/BeadingStrategy/BeadingStrategyFactory.cpp +++ b/src/BeadingStrategy/BeadingStrategyFactory.cpp @@ -41,22 +41,22 @@ BeadingStrategyPtr BeadingStrategyFactory::makeStrategy( wall_add_middle_threshold, inward_distributed_center_wall_count); spdlog::debug("Applying the Redistribute meta-strategy with outer-wall width = {}, inner-wall width = {}", preferred_bead_width_outer, preferred_bead_width_inner); - ret = make_unique(preferred_bead_width_outer, minimum_variable_line_ratio, move(ret)); + ret = make_unique(preferred_bead_width_outer, minimum_variable_line_ratio, std::move(ret)); if (print_thin_walls) { spdlog::debug("Applying the Widening Beading meta-strategy with minimum input width {} and minimum output width {}.", min_feature_size, min_bead_width); - ret = make_unique(move(ret), min_feature_size, min_bead_width); + ret = make_unique(std::move(ret), min_feature_size, min_bead_width); } if (outer_wall_offset > 0) { spdlog::debug("Applying the OuterWallOffset meta-strategy with offset = {}", outer_wall_offset); - ret = make_unique(outer_wall_offset, move(ret)); + ret = make_unique(outer_wall_offset, std::move(ret)); } // Apply the LimitedBeadingStrategy last, since that adds a 0-width marker wall which other beading strategies shouldn't touch. spdlog::debug("Applying the Limited Beading meta-strategy with maximum bead count = {}", max_bead_count); - ret = make_unique(max_bead_count, move(ret)); + ret = make_unique(max_bead_count, std::move(ret)); return ret; } } // namespace cura diff --git a/src/ConicalOverhang.cpp b/src/ConicalOverhang.cpp index 9918d8a782..699d9697d7 100644 --- a/src/ConicalOverhang.cpp +++ b/src/ConicalOverhang.cpp @@ -4,6 +4,8 @@ #include "ConicalOverhang.h" +#include "geometry/Polygon.h" +#include "geometry/SingleShape.h" #include "mesh.h" #include "settings/types/Angle.h" //To process the overhang angle. #include "settings/types/LayerIndex.h" @@ -16,7 +18,7 @@ namespace cura void ConicalOverhang::apply(Slicer* slicer, const Mesh& mesh) { const AngleRadians angle = mesh.settings_.get("conical_overhang_angle"); - const double maxHoleArea = mesh.settings_.get("conical_overhang_hole_size"); + const double max_hole_area = mesh.settings_.get("conical_overhang_hole_size"); const double tan_angle = tan(angle); // the XY-component of the angle const coord_t layer_thickness = mesh.settings_.get("layer_height"); coord_t max_dist_from_lower_layer = std::llround(tan_angle * static_cast(layer_thickness)); // max dist which can be bridged @@ -29,41 +31,41 @@ void ConicalOverhang::apply(Slicer* slicer, const Mesh& mesh) { // magically nothing happens when max_dist_from_lower_layer == 0 // below magic code solves that constexpr coord_t safe_dist = 20; - Polygons diff = layer_above.polygons.difference(layer.polygons.offset(-safe_dist)); - layer.polygons = layer.polygons.unionPolygons(diff); - layer.polygons = layer.polygons.smooth(safe_dist); - layer.polygons = Simplify(safe_dist, safe_dist / 2, 0).polygon(layer.polygons); + Shape diff = layer_above.polygons_.difference(layer.polygons_.offset(-safe_dist)); + layer.polygons_ = layer.polygons_.unionPolygons(diff); + layer.polygons_ = layer.polygons_.smooth(safe_dist); + layer.polygons_ = Simplify(safe_dist, safe_dist / 2, 0).polygon(layer.polygons_); // somehow layer.polygons get really jagged lines with a lot of vertices // without the above steps slicing goes really slow } else { // Get the current layer and split it into parts - std::vector layerParts = layer.polygons.splitIntoParts(); + std::vector layer_parts = layer.polygons_.splitIntoParts(); // Get a copy of the layer above to prune away before we shrink it - Polygons above = layer_above.polygons; + Shape above = layer_above.polygons_; // Now go through all the holes in the current layer and check if they intersect anything in the layer above // If not, then they're the top of a hole and should be cut from the layer above before the union - for (unsigned int part = 0; part < layerParts.size(); part++) + for (unsigned int part = 0; part < layer_parts.size(); part++) { - if (layerParts[part].size() > 1) // first poly is the outer contour, 1..n are the holes + if (layer_parts[part].size() > 1) // first poly is the outer contour, 1..n are the holes { - for (unsigned int hole_nr = 1; hole_nr < layerParts[part].size(); ++hole_nr) + for (unsigned int hole_nr = 1; hole_nr < layer_parts[part].size(); ++hole_nr) { - Polygons holePoly; - holePoly.add(layerParts[part][hole_nr]); - if (maxHoleArea > 0.0 && INT2MM2(std::abs(holePoly.area())) < maxHoleArea) + Shape hole_poly; + hole_poly.push_back(layer_parts[part][hole_nr]); + if (max_hole_area > 0.0 && INT2MM2(std::abs(hole_poly.area())) < max_hole_area) { - Polygons holeWithAbove = holePoly.intersection(above); - if (! holeWithAbove.empty()) + Shape hole_with_above = hole_poly.intersection(above); + if (! hole_with_above.empty()) { // The hole had some intersection with the above layer, check if it's a complete overlap - Polygons holeDifference = holePoly.xorPolygons(holeWithAbove); - if (holeDifference.empty()) + Shape hole_difference = hole_poly.xorPolygons(hole_with_above); + if (hole_difference.empty()) { // The hole was returned unchanged, so the layer above must completely cover it. Remove the hole from the layer above. - above = above.difference(holePoly); + above = above.difference(hole_poly); } } } @@ -71,7 +73,7 @@ void ConicalOverhang::apply(Slicer* slicer, const Mesh& mesh) } } // And now union with offset of the resulting above layer - layer.polygons = layer.polygons.unionPolygons(above.offset(-max_dist_from_lower_layer)); + layer.polygons_ = layer.polygons_.unionPolygons(above.offset(-max_dist_from_lower_layer)); } } } diff --git a/src/FffGcodeWriter.cpp b/src/FffGcodeWriter.cpp index c218b09212..669bbfd5d8 100644 --- a/src/FffGcodeWriter.cpp +++ b/src/FffGcodeWriter.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2023 UltiMaker +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher #include "FffGcodeWriter.h" @@ -7,14 +7,12 @@ #include // numeric_limits #include #include +#include #include #include #include #include -#include -#include -#include #include #include "Application.h" @@ -22,10 +20,15 @@ #include "FffProcessor.h" #include "InsetOrderOptimizer.h" #include "LayerPlan.h" +#include "PathOrderMonotonic.h" //Monotonic ordering of skin lines. +#include "PrimeTower/PrimeTower.h" #include "Slice.h" #include "WallToolPaths.h" #include "bridge.h" #include "communication/Communication.h" //To send layer view data. +#include "geometry/LinesSet.h" +#include "geometry/OpenPolyline.h" +#include "geometry/PointMatrix.h" #include "infill.h" #include "progress/Progress.h" #include "raft.h" @@ -34,6 +37,7 @@ #include "utils/linearAlg2D.h" #include "utils/math.h" #include "utils/orderOptimizer.h" +#include "utils/polygonUtils.h" namespace cura { @@ -139,6 +143,16 @@ void FffGcodeWriter::writeGCode(SliceDataStorage& storage, TimeKeeper& time_keep mesh_order_per_extruder.push_back(calculateMeshOrder(storage, extruder_nr)); } } + const auto extruder_settings = Application::getInstance().current_slice_->scene.extruders[gcode.getExtruderNr()].settings_; + // in case the prime blob is enabled the brim already starts from the closest start position which is blob location + // also in case of one at a time printing the first move of every object shouldn't be start position of machine + if (! extruder_settings.get("prime_blob_enable") and ! (extruder_settings.get("print_sequence") == "one_at_a_time")) + { + // Setting first travel move of the first extruder to the machine start position + Point3LL p(extruder_settings.get("machine_extruder_start_pos_x"), extruder_settings.get("machine_extruder_start_pos_y"), gcode.getPositionZ()); + gcode.writeTravel(p, extruder_settings.get("speed_travel")); + } + calculateExtruderOrderPerLayer(storage); calculatePrimeLayerPerExtruder(storage); @@ -212,10 +226,10 @@ unsigned int FffGcodeWriter::findSpiralizedLayerSeamVertexIndex(const SliceDataS // note that the code below doesn't assume that last_layer_nr is one less than layer_nr but the print is going // to come out pretty weird if that isn't true as it implies that there are empty layers - ConstPolygonRef last_wall = (*storage.spiralize_wall_outlines[last_layer_nr])[0]; + const Polygon& last_wall = (*storage.spiralize_wall_outlines[last_layer_nr])[0]; // Even though this is just one (contiguous) part, the spiralize wall may still be multiple parts if the part is somewhere thinner than 1 line width. // This case is so rare that we don't bother with finding the best polygon to start with. Just start with the first polygon (`spiral_wall[0]`). - ConstPolygonRef wall = layer.parts[0].spiral_wall[0]; + const Polygon& wall = layer.parts[0].spiral_wall[0]; const size_t n_points = wall.size(); const Point2LL last_wall_seam_vertex = last_wall[storage.spiralize_seam_vertex_indices[last_layer_nr]]; @@ -266,10 +280,10 @@ void FffGcodeWriter::findLayerSeamsForSpiralize(SliceDataStorage& storage, size_ bool done_this_layer = false; // iterate through extruders until we find a mesh that has a part with insets - const std::vector& extruder_order = extruder_order_per_layer[layer_nr]; + const std::vector extruder_order = extruder_order_per_layer.get(layer_nr); for (unsigned int extruder_idx = 0; ! done_this_layer && extruder_idx < extruder_order.size(); ++extruder_idx) { - const size_t extruder_nr = extruder_order[extruder_idx]; + const size_t extruder_nr = extruder_order[extruder_idx].extruder_nr; // iterate through this extruder's meshes until we find a part with insets const std::vector& mesh_order = mesh_order_per_extruder[extruder_nr]; for (unsigned int mesh_idx : mesh_order) @@ -382,7 +396,7 @@ void FffGcodeWriter::setConfigRetractionAndWipe(SliceDataStorage& storage) } } -size_t FffGcodeWriter::getStartExtruder(const SliceDataStorage& storage) +size_t FffGcodeWriter::getStartExtruder(const SliceDataStorage& storage) const { const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; const EPlatformAdhesion adhesion_type = mesh_group_settings.get("adhesion_type"); @@ -558,7 +572,6 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) const size_t base_extruder_nr = mesh_group_settings.get("raft_base_extruder_nr").extruder_nr_; const size_t interface_extruder_nr = mesh_group_settings.get("raft_interface_extruder_nr").extruder_nr_; const size_t surface_extruder_nr = mesh_group_settings.get("raft_surface_extruder_nr").extruder_nr_; - const size_t prime_tower_extruder_nr = storage.primeTower.extruder_order_.front(); coord_t z = 0; const LayerIndex initial_raft_layer_nr = -Raft::getTotalExtraLayers(); @@ -568,24 +581,23 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) const size_t num_surface_layers = surface_settings.get("raft_surface_layers"); // some infill config for all lines infill generation below - constexpr double fill_overlap = 0; // raft line shouldn't be expanded - there is no boundary polygon printed constexpr int infill_multiplier = 1; // rafts use single lines constexpr int extra_infill_shift = 0; constexpr bool fill_gaps = true; constexpr bool retract_before_outer_wall = false; constexpr coord_t wipe_dist = 0; - Polygons raft_polygons; // should remain empty, since we only have the lines pattern for the raft... + Shape raft_polygons; std::optional last_planned_position = std::optional(); - unsigned int current_extruder_nr = base_extruder_nr; + size_t current_extruder_nr = base_extruder_nr; { // raft base layer const Settings& base_settings = mesh_group_settings.get("raft_base_extruder_nr").settings_; LayerIndex layer_nr = initial_raft_layer_nr; const coord_t layer_height = base_settings.get("raft_base_thickness"); z += layer_height; - const coord_t comb_offset = base_settings.get("raft_base_line_spacing"); + const coord_t comb_offset = std::max(base_settings.get("raft_base_line_spacing"), base_settings.get("raft_base_line_width")); std::vector fan_speed_layer_time_settings_per_extruder_raft_base = fan_speed_layer_time_settings_per_extruder; // copy so that we change only the local copy @@ -604,7 +616,7 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) Application::getInstance().communication_->sendLayerComplete(layer_nr, z, layer_height); - Polygons raftLines; + OpenLinesSet raft_lines; AngleDegrees fill_angle = (num_surface_layers + num_interface_layers) % 2 ? 45 : 135; // 90 degrees rotated from the interface layer. constexpr bool zig_zaggify_infill = false; constexpr bool connect_polygons = true; // causes less jerks, so better adhesion @@ -612,6 +624,7 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) const size_t wall_line_count = base_settings.get("raft_base_wall_count"); const coord_t small_area_width = 0; // A raft never has a small region due to the large horizontal expansion. const coord_t line_spacing = base_settings.get("raft_base_line_spacing"); + const coord_t infill_overlap = base_settings.get("raft_base_infill_overlap_mm"); const coord_t line_spacing_prime_tower = base_settings.get("prime_tower_raft_base_line_spacing"); const Point2LL& infill_origin = Point2LL(); constexpr bool skip_stitching = false; @@ -626,14 +639,14 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) struct ParameterizedRaftPath { coord_t line_spacing; - Polygons outline; + Shape outline; }; std::vector raft_outline_paths; - raft_outline_paths.emplace_back(ParameterizedRaftPath{ line_spacing, storage.raftBaseOutline }); - if (storage.primeTower.enabled_) + raft_outline_paths.emplace_back(ParameterizedRaftPath{ line_spacing, storage.raft_base_outline }); + if (storage.prime_tower_) { - const Polygons& raft_outline_prime_tower = storage.primeTower.getOuterPoly(layer_nr); + const Shape raft_outline_prime_tower = Shape(storage.prime_tower_->getExtrusionOutline(layer_nr)); if (line_spacing_prime_tower == line_spacing) { // Base layer is shared with prime tower base @@ -656,7 +669,7 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) raft_outline_path.outline, gcode_layer.configs_storage_.raft_base_config.getLineWidth(), raft_outline_path.line_spacing, - fill_overlap, + infill_overlap, infill_multiplier, fill_angle, z, @@ -674,7 +687,7 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) zag_skip_count, pocket_size); std::vector raft_paths; - infill_comp.generate(raft_paths, raft_polygons, raftLines, base_settings, layer_nr, SectionType::ADHESION); + infill_comp.generate(raft_paths, raft_polygons, raft_lines, base_settings, layer_nr, SectionType::ADHESION); if (! raft_paths.empty()) { const GCodePathConfig& config = gcode_layer.configs_storage_.raft_base_config; @@ -689,36 +702,69 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) config, config, config, + config, + config, retract_before_outer_wall, wipe_dist, wipe_dist, base_extruder_nr, base_extruder_nr, z_seam_config, - raft_paths); + raft_paths, + storage.getModelBoundingBox().flatten().getMiddle()); wall_orderer.addToLayer(); } - gcode_layer.addLinesByOptimizer(raftLines, gcode_layer.configs_storage_.raft_base_config, SpaceFillType::Lines); + const auto wipe_dist = 0; + const auto spiralize = false; + const auto flow_ratio = 1.0_r; + const auto enable_travel_optimization = false; + const auto always_retract = false; + const auto reverse_order = false; + + gcode_layer.addLinesByOptimizer( + raft_lines, + gcode_layer.configs_storage_.raft_base_config, + SpaceFillType::Lines, + enable_travel_optimization, + wipe_dist, + flow_ratio, + last_planned_position); + last_planned_position = gcode_layer.getLastPlannedPositionOrStartingPosition(); + gcode_layer.addPolygonsByOptimizer( + raft_polygons, + gcode_layer.configs_storage_.raft_base_config, + ZSeamConfig(), + wipe_dist, + spiralize, + flow_ratio, + always_retract, + reverse_order, + last_planned_position); raft_polygons.clear(); - raftLines.clear(); + raft_lines.clear(); + last_planned_position = gcode_layer.getLastPlannedPositionOrStartingPosition(); } + endRaftLayer(storage, gcode_layer, layer_nr, current_extruder_nr, false); + layer_plan_buffer.handle(gcode_layer, gcode); - last_planned_position = gcode_layer.getLastPlannedPositionOrStartingPosition(); } const coord_t interface_layer_height = interface_settings.get("raft_interface_thickness"); const coord_t interface_line_spacing = interface_settings.get("raft_interface_line_spacing"); const Ratio interface_fan_speed = interface_settings.get("raft_interface_fan_speed"); const coord_t interface_line_width = interface_settings.get("raft_interface_line_width"); + const coord_t interface_infill_overlap = interface_settings.get("raft_interface_infill_overlap_mm"); const coord_t interface_avoid_distance = interface_settings.get("travel_avoid_distance"); const coord_t interface_max_resolution = interface_settings.get("meshfix_maximum_resolution"); const coord_t interface_max_deviation = interface_settings.get("meshfix_maximum_deviation"); + const coord_t raft_interface_z_offset = interface_settings.get("raft_interface_z_offset"); + + z += raft_interface_z_offset; for (LayerIndex raft_interface_layer = 1; static_cast(raft_interface_layer) <= num_interface_layers; ++raft_interface_layer) { // raft interface layer - bool prime_tower_added_on_this_layer = ! storage.primeTower.enabled_; const LayerIndex layer_nr = initial_raft_layer_nr + raft_interface_layer; z += interface_layer_height; @@ -731,7 +777,7 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) fan_speed_layer_time_settings.cool_fan_speed_0 = regular_fan_speed; // ignore initial layer fan speed stuff } - const coord_t comb_offset = interface_line_spacing; + const coord_t comb_offset = std::max(interface_line_spacing, interface_line_width); LayerPlan& gcode_layer = *new LayerPlan( storage, layer_nr, @@ -743,28 +789,19 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) interface_line_width, interface_avoid_distance); - if (! prime_tower_added_on_this_layer && current_extruder_nr == prime_tower_extruder_nr) - { - addPrimeTower(storage, gcode_layer, current_extruder_nr); - prime_tower_added_on_this_layer = true; - } - gcode_layer.setIsInside(true); - if (interface_extruder_nr != current_extruder_nr) - { - setExtruder_addPrime(storage, gcode_layer, interface_extruder_nr); - current_extruder_nr = interface_extruder_nr; - } + + startRaftLayer(storage, gcode_layer, layer_nr, interface_extruder_nr, current_extruder_nr); Application::getInstance().communication_->sendLayerComplete(layer_nr, z, interface_layer_height); - Polygons raft_outline_path; + Shape raft_outline_path; const coord_t small_offset = gcode_layer.configs_storage_.raft_interface_config.getLineWidth() / 2; // Do this manually because of micron-movement created in corners when insetting a polygon that was offset with round joint type. - raft_outline_path = storage.raftInterfaceOutline.offset(-small_offset); + raft_outline_path = storage.raft_interface_outline.offset(-small_offset); raft_outline_path = Simplify(interface_settings).polygon(raft_outline_path); // Remove those micron-movements. const coord_t infill_outline_width = gcode_layer.configs_storage_.raft_interface_config.getLineWidth(); - Polygons raft_lines; + OpenLinesSet raft_lines; AngleDegrees fill_angle = (num_surface_layers + num_interface_layers - raft_interface_layer) % 2 ? 45 : 135; // 90 degrees rotated from the first top layer. constexpr bool zig_zaggify_infill = true; constexpr bool connect_polygons = true; // why not? @@ -779,10 +816,10 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) constexpr int zag_skip_count = 0; constexpr coord_t pocket_size = 0; - if (storage.primeTower.enabled_) + if (storage.prime_tower_) { // Interface layer excludes prime tower base - raft_outline_path = raft_outline_path.difference(storage.primeTower.getOuterPoly(layer_nr)); + raft_outline_path = raft_outline_path.difference(storage.prime_tower_->getExtrusionOutline(layer_nr)); } Infill infill_comp( @@ -792,7 +829,7 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) raft_outline_path, infill_outline_width, interface_line_spacing, - fill_overlap, + interface_infill_overlap, infill_multiplier, fill_angle, z, @@ -825,25 +862,50 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) config, config, config, + config, + config, retract_before_outer_wall, wipe_dist, wipe_dist, interface_extruder_nr, interface_extruder_nr, z_seam_config, - raft_paths); + raft_paths, + storage.getModelBoundingBox().flatten().getMiddle()); wall_orderer.addToLayer(); } - gcode_layer.addLinesByOptimizer(raft_lines, gcode_layer.configs_storage_.raft_interface_config, SpaceFillType::Lines, false, 0, 1.0, last_planned_position); + + const auto wipe_dist = 0; + const auto spiralize = false; + const auto flow_ratio = 1.0_r; + const auto enable_travel_optimization = false; + const auto always_retract = false; + const auto reverse_order = false; + + gcode_layer.addLinesByOptimizer( + raft_lines, + gcode_layer.configs_storage_.raft_interface_config, + SpaceFillType::Lines, + enable_travel_optimization, + wipe_dist, + flow_ratio, + last_planned_position); + last_planned_position = gcode_layer.getLastPlannedPositionOrStartingPosition(); + gcode_layer.addPolygonsByOptimizer( + raft_polygons, + gcode_layer.configs_storage_.raft_interface_config, + ZSeamConfig(), + wipe_dist, + spiralize, + flow_ratio, + always_retract, + reverse_order, + last_planned_position); raft_polygons.clear(); raft_lines.clear(); - if (! prime_tower_added_on_this_layer) - { - setExtruder_addPrime(storage, gcode_layer, prime_tower_extruder_nr); - current_extruder_nr = prime_tower_extruder_nr; - } + endRaftLayer(storage, gcode_layer, layer_nr, current_extruder_nr); layer_plan_buffer.handle(gcode_layer, gcode); last_planned_position = gcode_layer.getLastPlannedPositionOrStartingPosition(); @@ -854,12 +916,16 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) const coord_t surface_max_resolution = surface_settings.get("meshfix_maximum_resolution"); const coord_t surface_max_deviation = surface_settings.get("meshfix_maximum_deviation"); const coord_t surface_line_width = surface_settings.get("raft_surface_line_width"); + const coord_t surface_infill_overlap = surface_settings.get("raft_surface_infill_overlap_mm"); const coord_t surface_avoid_distance = surface_settings.get("travel_avoid_distance"); const Ratio surface_fan_speed = surface_settings.get("raft_surface_fan_speed"); + const bool surface_monotonic = surface_settings.get("raft_surface_monotonic"); + const coord_t raft_surface_z_offset = interface_settings.get("raft_surface_z_offset"); + + z += raft_surface_z_offset; for (LayerIndex raft_surface_layer = 1; static_cast(raft_surface_layer) <= num_surface_layers; raft_surface_layer++) { // raft surface layers - bool prime_tower_added_on_this_layer = ! storage.primeTower.enabled_; const LayerIndex layer_nr = initial_raft_layer_nr + 1 + num_interface_layers + raft_surface_layer - 1; // +1: 1 base layer z += surface_layer_height; @@ -872,7 +938,7 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) fan_speed_layer_time_settings.cool_fan_speed_0 = regular_fan_speed; // ignore initial layer fan speed stuff } - const coord_t comb_offset = surface_line_spacing; + const coord_t comb_offset = std::max(surface_line_spacing, surface_line_width); LayerPlan& gcode_layer = *new LayerPlan( storage, layer_nr, @@ -884,29 +950,20 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) surface_line_width, surface_avoid_distance); - if (! prime_tower_added_on_this_layer && current_extruder_nr == prime_tower_extruder_nr) - { - addPrimeTower(storage, gcode_layer, current_extruder_nr); - prime_tower_added_on_this_layer = true; - } - gcode_layer.setIsInside(true); // make sure that we are using the correct extruder to print raft - if (current_extruder_nr != surface_extruder_nr) - { - setExtruder_addPrime(storage, gcode_layer, surface_extruder_nr); - current_extruder_nr = surface_extruder_nr; - } + startRaftLayer(storage, gcode_layer, layer_nr, surface_extruder_nr, current_extruder_nr); + Application::getInstance().communication_->sendLayerComplete(layer_nr, z, surface_layer_height); - Polygons raft_outline_path; + Shape raft_outline_path; const coord_t small_offset = gcode_layer.configs_storage_.raft_interface_config.getLineWidth() / 2; // Do this manually because of micron-movement created in corners when insetting a polygon that was offset with round joint type. - raft_outline_path = storage.raftSurfaceOutline.offset(-small_offset); + raft_outline_path = storage.raft_surface_outline.offset(-small_offset); raft_outline_path = Simplify(interface_settings).polygon(raft_outline_path); // Remove those micron-movements. const coord_t infill_outline_width = gcode_layer.configs_storage_.raft_surface_config.getLineWidth(); - Polygons raft_lines; + OpenLinesSet raft_lines; AngleDegrees fill_angle = (num_surface_layers - raft_surface_layer) % 2 ? 45 : 135; // Alternate between -45 and +45 degrees, ending up 90 degrees rotated from the default skin angle. constexpr bool zig_zaggify_infill = true; @@ -914,7 +971,9 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) const size_t wall_line_count = surface_settings.get("raft_surface_wall_count"); const coord_t small_area_width = 0; // A raft never has a small region due to the large horizontal expansion. const Point2LL& infill_origin = Point2LL(); - constexpr bool skip_stitching = false; + const GCodePathConfig& config = gcode_layer.configs_storage_.raft_surface_config; + const bool monotonic = (raft_surface_layer == num_surface_layers && surface_monotonic); + const bool skip_stitching = monotonic; constexpr bool connected_zigzags = false; constexpr bool connect_polygons = false; // midway connections between polygons can make the surface less smooth constexpr bool use_endpieces = true; @@ -922,103 +981,146 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) constexpr size_t zag_skip_count = 0; constexpr coord_t pocket_size = 0; - if (storage.primeTower.enabled_) + if (storage.prime_tower_) { // Surface layers exclude prime tower base - raft_outline_path = raft_outline_path.difference(storage.primeTower.getOuterPoly(layer_nr)); + raft_outline_path = raft_outline_path.difference(storage.prime_tower_->getExtrusionOutline(layer_nr)); } - Infill infill_comp( - EFillMethod::ZIG_ZAG, - zig_zaggify_infill, - connect_polygons, - raft_outline_path, - infill_outline_width, - surface_line_spacing, - fill_overlap, - infill_multiplier, - fill_angle, - z, - extra_infill_shift, - surface_max_resolution, - surface_max_deviation, - wall_line_count, - small_area_width, - infill_origin, - skip_stitching, - fill_gaps, - connected_zigzags, - use_endpieces, - skip_some_zags, - zag_skip_count, - pocket_size); + for (const Shape& raft_island : raft_outline_path.splitIntoParts()) + { + Infill infill_comp( + EFillMethod::ZIG_ZAG, + zig_zaggify_infill, + connect_polygons, + raft_island, + infill_outline_width, + surface_line_spacing, + surface_infill_overlap, + infill_multiplier, + fill_angle, + z, + extra_infill_shift, + surface_max_resolution, + surface_max_deviation, + wall_line_count, + small_area_width, + infill_origin, + skip_stitching, + fill_gaps, + connected_zigzags, + use_endpieces, + skip_some_zags, + zag_skip_count, + pocket_size); - std::vector raft_paths; - infill_comp.generate(raft_paths, raft_polygons, raft_lines, surface_settings, layer_nr, SectionType::ADHESION); + std::vector raft_paths; + infill_comp.generate(raft_paths, raft_polygons, raft_lines, surface_settings, layer_nr, SectionType::ADHESION); - if (! raft_paths.empty()) - { - const GCodePathConfig& config = gcode_layer.configs_storage_.raft_surface_config; - const ZSeamConfig z_seam_config(EZSeamType::SHORTEST, gcode_layer.getLastPlannedPositionOrStartingPosition(), EZSeamCornerPrefType::Z_SEAM_CORNER_PREF_NONE, false); - InsetOrderOptimizer wall_orderer( - *this, - storage, - gcode_layer, - surface_settings, - surface_extruder_nr, - config, - config, - config, - config, - retract_before_outer_wall, - wipe_dist, - wipe_dist, - surface_extruder_nr, - surface_extruder_nr, - z_seam_config, - raft_paths); - wall_orderer.addToLayer(); - } + if (! raft_paths.empty()) + { + const ZSeamConfig z_seam_config(EZSeamType::SHORTEST, gcode_layer.getLastPlannedPositionOrStartingPosition(), EZSeamCornerPrefType::Z_SEAM_CORNER_PREF_NONE, false); + InsetOrderOptimizer wall_orderer( + *this, + storage, + gcode_layer, + surface_settings, + surface_extruder_nr, + config, + config, + config, + config, + config, + config, + retract_before_outer_wall, + wipe_dist, + wipe_dist, + surface_extruder_nr, + surface_extruder_nr, + z_seam_config, + raft_paths, + storage.getModelBoundingBox().flatten().getMiddle()); + wall_orderer.addToLayer(); + } - const auto wipe_dist = 0; - const auto spiralize = false; - const auto flow_ratio = 1.0_r; - const auto enable_travel_optimization = false; - const auto always_retract = false; - const auto reverse_order = false; + const auto wipe_dist = 0; + const auto spiralize = false; + const auto flow_ratio = 1.0_r; + const auto enable_travel_optimization = false; + const auto always_retract = false; + const auto reverse_order = false; - gcode_layer.addLinesByOptimizer( - raft_lines, - gcode_layer.configs_storage_.raft_surface_config, - SpaceFillType::Lines, - enable_travel_optimization, - wipe_dist, - flow_ratio, - last_planned_position); - gcode_layer.addPolygonsByOptimizer( - raft_polygons, - gcode_layer.configs_storage_.raft_surface_config, - ZSeamConfig(), - wipe_dist, - spiralize, - flow_ratio, - always_retract, - reverse_order, - gcode_layer.getLastPlannedPositionOrStartingPosition()); + if (monotonic) + { + const AngleRadians monotonic_direction = fill_angle; + constexpr SpaceFillType space_fill_type = SpaceFillType::PolyLines; + const coord_t max_adjacent_distance = surface_line_spacing; - raft_polygons.clear(); - raft_lines.clear(); + gcode_layer.addLinesMonotonic(raft_island, raft_lines, config, space_fill_type, monotonic_direction, max_adjacent_distance); + } + else + { + gcode_layer.addLinesByOptimizer( + raft_lines, + gcode_layer.configs_storage_.raft_surface_config, + SpaceFillType::Lines, + enable_travel_optimization, + wipe_dist, + flow_ratio, + last_planned_position); + last_planned_position = gcode_layer.getLastPlannedPositionOrStartingPosition(); + gcode_layer.addPolygonsByOptimizer( + raft_polygons, + gcode_layer.configs_storage_.raft_surface_config, + ZSeamConfig(), + wipe_dist, + spiralize, + flow_ratio, + always_retract, + reverse_order, + last_planned_position); + last_planned_position = gcode_layer.getLastPlannedPositionOrStartingPosition(); + } - if (! prime_tower_added_on_this_layer) - { - setExtruder_addPrime(storage, gcode_layer, prime_tower_extruder_nr); - current_extruder_nr = prime_tower_extruder_nr; + raft_polygons.clear(); + raft_lines.clear(); } + endRaftLayer(storage, gcode_layer, layer_nr, current_extruder_nr); + layer_plan_buffer.handle(gcode_layer, gcode); } } +void FffGcodeWriter::startRaftLayer(const SliceDataStorage& storage, LayerPlan& gcode_layer, const LayerIndex layer_nr, size_t layer_extruder, size_t& current_extruder) +{ + // If required, fill prime tower with previous extruder + setExtruder_addPrime(storage, gcode_layer, current_extruder); + + if (current_extruder != layer_extruder) + { + // Switch to new extruder and prime + setExtruder_addPrime(storage, gcode_layer, layer_extruder); + current_extruder = layer_extruder; + } +} + +void FffGcodeWriter::endRaftLayer(const SliceDataStorage& storage, LayerPlan& gcode_layer, const LayerIndex layer_nr, size_t& current_extruder, const bool append_to_prime_tower) +{ + // If required, fill prime tower with current extruder + setExtruder_addPrime(storage, gcode_layer, current_extruder, append_to_prime_tower); + + // If required, fill prime tower for other extruders + for (const ExtruderUse& extruder_use : extruder_order_per_layer.get(layer_nr)) + { + if (! append_to_prime_tower || (! gcode_layer.getPrimeTowerIsPlanned(extruder_use.extruder_nr) && extruder_use.prime != ExtruderPrime::None)) + { + setExtruder_addPrime(storage, gcode_layer, extruder_use.extruder_nr, append_to_prime_tower); + current_extruder = extruder_use.extruder_nr; + } + } +} + FffGcodeWriter::ProcessLayerResult FffGcodeWriter::processLayer(const SliceDataStorage& storage, LayerIndex layer_nr, const size_t total_layers) const { spdlog::debug("GcodeWriter processing layer {} of {}", layer_nr, total_layers); @@ -1092,18 +1194,17 @@ FffGcodeWriter::ProcessLayerResult FffGcodeWriter::processLayer(const SliceDataS } const coord_t comb_offset_from_outlines = max_inner_wall_width * 2; - assert( - static_cast(extruder_order_per_layer_negative_layers.size()) + layer_nr >= 0 && "Layer numbers shouldn't get more negative than there are raft/filler layers"); - const std::vector& extruder_order - = (layer_nr < 0) ? extruder_order_per_layer_negative_layers[extruder_order_per_layer_negative_layers.size() + layer_nr] : extruder_order_per_layer[layer_nr]; + const size_t first_extruder = findUsedExtruderIndex(storage, layer_nr, false); + + const std::vector extruder_order = extruder_order_per_layer.get(layer_nr); - const coord_t first_outer_wall_line_width = scene.extruders[extruder_order.front()].settings_.get("wall_line_width_0"); + const coord_t first_outer_wall_line_width = scene.extruders[first_extruder].settings_.get("wall_line_width_0"); LayerPlan& gcode_layer = *new LayerPlan( storage, layer_nr, z, layer_thickness, - extruder_order.front(), + first_extruder, fan_speed_layer_time_settings_per_extruder, comb_offset_from_outlines, first_outer_wall_line_width, @@ -1133,21 +1234,14 @@ FffGcodeWriter::ProcessLayerResult FffGcodeWriter::processLayer(const SliceDataS const size_t support_infill_extruder_nr = (layer_nr <= 0) ? mesh_group_settings.get("support_extruder_nr_layer_0").extruder_nr_ : mesh_group_settings.get("support_infill_extruder_nr").extruder_nr_; - for (const size_t& extruder_nr : extruder_order) + for (const ExtruderUse& extruder_use : extruder_order) { - // Everytime you start with a new extruder you want to add a prime tower, unless: - // - prime tower is disabled (setExtruder_addPrime takes care of this) - // - this is the first (and not the only!) extruder in this layer. Since the previous - // layer always ends with this extruder. If the first extruder is the only extruder, - // the prime tower needs to be added anyways, in order to support the prime tower if - // later in the print a prime tower is needed. - // - prime tower is already printed this layer (only applicable for more than 2 extruders). - // The setExtruder_addPrime takes care of this. - if (extruder_nr != extruder_order.front() || (extruder_order.size() == 1 && layer_nr >= 0) || extruder_nr == 0) - { - setExtruder_addPrime(storage, gcode_layer, extruder_nr); - time_keeper.registerTime("Prime tower pre"); - } + const size_t extruder_nr = extruder_use.extruder_nr; + + // Set extruder (if needed) and prime (if needed) + setExtruder_addPrime(storage, gcode_layer, extruder_nr); + time_keeper.registerTime("Prime tower"); + if (include_helper_parts && (extruder_nr == support_infill_extruder_nr || extruder_nr == support_roof_extruder_nr || extruder_nr == support_bottom_extruder_nr)) { addSupportToGCode(storage, gcode_layer, extruder_nr); @@ -1174,14 +1268,6 @@ FffGcodeWriter::ProcessLayerResult FffGcodeWriter::processLayer(const SliceDataS time_keeper.registerTime(fmt::format("Mesh {}", mesh_idx)); } } - // Always print a prime tower before switching extruder. Unless: - // - The prime tower is already printed this layer (setExtruder_addPrime takes care of this). - // - this is the last extruder of the layer, since the next layer will start with the same extruder. - if (extruder_nr != extruder_order.back() && layer_nr >= 0) - { - setExtruder_addPrime(storage, gcode_layer, extruder_nr); - time_keeper.registerTime("Prime tower post"); - } } gcode_layer.applyModifyPlugin(); @@ -1248,18 +1334,22 @@ void FffGcodeWriter::processSkirtBrim(const SliceDataStorage& storage, LayerPlan struct BrimLineReference { const size_t inset_idx; - ConstPolygonPointer poly; + const Polyline* poly; }; size_t total_line_count = 0; - for (const SkirtBrimLine& line : storage.skirt_brim[extruder_nr]) + for (const MixedLinesSet& lines : storage.skirt_brim[extruder_nr]) { - total_line_count += line.closed_polygons.size(); - total_line_count += line.open_polylines.size(); - } - Polygons all_brim_lines; + total_line_count += lines.size(); + // For layer_nr != 0 add only the innermost brim line (which is only the case if skirt_height > 1) + if (layer_nr != 0) + { + break; + } + } + MixedLinesSet all_brim_lines; all_brim_lines.reserve(total_line_count); const coord_t line_w = train.settings_.get("skirt_brim_line_width") * train.settings_.get("initial_layer_line_width_factor"); @@ -1269,34 +1359,28 @@ void FffGcodeWriter::processSkirtBrim(const SliceDataStorage& storage, LayerPlan for (size_t inset_idx = 0; inset_idx < storage.skirt_brim[extruder_nr].size(); inset_idx++) { - const auto& offset = storage.skirt_brim[extruder_nr][inset_idx]; - const auto closed_polygons_open_polylines = { offset.closed_polygons, offset.open_polylines }; - const auto closed_open = { true, false }; - for (const auto [polygon, closed] : ranges::views::zip(closed_polygons_open_polylines, closed_open)) + const MixedLinesSet& offset = storage.skirt_brim[extruder_nr][inset_idx]; + for (const PolylinePtr& line : offset) { - for (ConstPolygonRef line : polygon) + if (line->segmentsCount() > 0) { - if (line.size() <= 1) - { - continue; - } - all_brim_lines.emplace_back(line); - if (closed) + all_brim_lines.push_back(line); + for (const Point2LL& p : *line) { - // add closing segment - all_brim_lines.back().add(line.front()); - } - ConstPolygonPointer pp(all_brim_lines.back()); - for (Point2LL p : line) - { - grid.insert(p, BrimLineReference{ inset_idx, pp }); + grid.insert(p, BrimLineReference{ inset_idx, line.get() }); } } } + + // For layer_nr != 0 add only the innermost brim line (which is only the case if skirt_height > 1) + if (layer_nr != 0) + { + break; + } } const auto smart_brim_ordering = train.settings_.get("brim_smart_ordering") && train.settings_.get("adhesion_type") == EPlatformAdhesion::BRIM; - std::unordered_multimap order_requirements; + std::unordered_multimap order_requirements; for (const std::pair>& p : grid) { const BrimLineReference& here = p.second.val; @@ -1352,12 +1436,8 @@ void FffGcodeWriter::processSkirtBrim(const SliceDataStorage& storage, LayerPlan if (! all_brim_lines.empty()) { - // For layer_nr != 0 add only the innermost brim line (which is only the case if skirt_height > 1) - Polygons inner_brim_line; - inner_brim_line.add(all_brim_lines[0]); - gcode_layer.addLinesByOptimizer( - layer_nr == 0 ? all_brim_lines : inner_brim_line, + all_brim_lines, gcode_layer.configs_storage_.skirt_brim_config_per_extruder[extruder_nr], SpaceFillType::PolyLines, enable_travel_optimization, @@ -1366,7 +1446,7 @@ void FffGcodeWriter::processSkirtBrim(const SliceDataStorage& storage, LayerPlan start_close_to, fan_speed, reverse_print_direction, - order_requirements); + layer_nr == 0 ? order_requirements : PathOrderOptimizer::no_order_requirements_); } @@ -1377,10 +1457,8 @@ void FffGcodeWriter::processSkirtBrim(const SliceDataStorage& storage, LayerPlan if ((layer_nr == 0) && (extruder_nr == mesh_group_settings.get("support_extruder_nr_layer_0").extruder_nr_)) { total_line_count += storage.support_brim.size(); - Polygons support_brim_lines = storage.support_brim; - support_brim_lines.toPolylines(); gcode_layer.addLinesByOptimizer( - support_brim_lines, + storage.support_brim, gcode_layer.configs_storage_.skirt_brim_config_per_extruder[extruder_nr], SpaceFillType::PolyLines, enable_travel_optimization, @@ -1400,9 +1478,9 @@ void FffGcodeWriter::processOozeShield(const SliceDataStorage& storage, LayerPla { return; // ooze shield already generated by brim } - if (storage.oozeShield.size() > 0 && layer_nr < storage.oozeShield.size()) + if (storage.ooze_shield.size() > 0 && layer_nr < storage.ooze_shield.size()) { - gcode_layer.addPolygonsByOptimizer(storage.oozeShield[layer_nr], gcode_layer.configs_storage_.skirt_brim_config_per_extruder[0]); + gcode_layer.addPolygonsByOptimizer(storage.ooze_shield[layer_nr], gcode_layer.configs_storage_.skirt_brim_config_per_extruder[0]); } } @@ -1443,25 +1521,50 @@ void FffGcodeWriter::calculateExtruderOrderPerLayer(const SliceDataStorage& stor size_t last_extruder; // set the initial extruder of this meshgroup Scene& scene = Application::getInstance().current_slice_->scene; + size_t start_extruder; if (scene.current_mesh_group == scene.mesh_groups.begin()) { // first meshgroup - last_extruder = getStartExtruder(storage); + start_extruder = getStartExtruder(storage); } else { - last_extruder = gcode.getExtruderNr(); + start_extruder = gcode.getExtruderNr(); } + last_extruder = start_extruder; + + extruder_order_per_layer.init(true, storage.print_layer_count); + + const std::vector extruders_used = storage.getExtrudersUsed(); for (LayerIndex layer_nr = -Raft::getTotalExtraLayers(); layer_nr < static_cast(storage.print_layer_count); layer_nr++) { - std::vector>& extruder_order_per_layer_here = (layer_nr < 0) ? extruder_order_per_layer_negative_layers : extruder_order_per_layer; - extruder_order_per_layer_here.push_back(getUsedExtrudersOnLayerExcludingStartingExtruder(storage, last_extruder, layer_nr)); - last_extruder = extruder_order_per_layer_here.back().back(); + std::vector extruder_order = getUsedExtrudersOnLayer(storage, last_extruder, layer_nr, extruders_used); + extruder_order_per_layer.push_back(extruder_order); + + if (! extruder_order.empty()) + { + last_extruder = extruder_order.back().extruder_nr; + } + } + + if (storage.prime_tower_) + { + storage.prime_tower_->processExtrudersUse(extruder_order_per_layer, start_extruder); } } void FffGcodeWriter::calculatePrimeLayerPerExtruder(const SliceDataStorage& storage) { - for (LayerIndex layer_nr = -Raft::getTotalExtraLayers(); layer_nr < static_cast(storage.print_layer_count); ++layer_nr) + LayerIndex first_print_layer = -Raft::getTotalExtraLayers(); + for (size_t extruder_nr = 0; extruder_nr < MAX_EXTRUDERS; ++extruder_nr) + { + if (getExtruderNeedPrimeBlobDuringFirstLayer(storage, extruder_nr)) + { + // Extruders requiring a prime blob have to be primed at first layer + extruder_prime_layer_nr[extruder_nr] = std::min(extruder_prime_layer_nr[extruder_nr], first_print_layer); + } + } + + for (LayerIndex layer_nr = first_print_layer; layer_nr < static_cast(storage.print_layer_count); ++layer_nr) { const std::vector used_extruders = storage.getExtrudersUsed(layer_nr); for (size_t extruder_nr = 0; extruder_nr < used_extruders.size(); ++extruder_nr) @@ -1474,24 +1577,43 @@ void FffGcodeWriter::calculatePrimeLayerPerExtruder(const SliceDataStorage& stor } } -std::vector FffGcodeWriter::getUsedExtrudersOnLayerExcludingStartingExtruder(const SliceDataStorage& storage, const size_t start_extruder, const LayerIndex& layer_nr) const +std::vector FffGcodeWriter::getUsedExtrudersOnLayer( + const SliceDataStorage& storage, + const size_t start_extruder, + const LayerIndex& layer_nr, + const std::vector& global_extruders_used) const { const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; - size_t extruder_count = Application::getInstance().current_slice_->scene.extruders.size(); + size_t extruder_count = global_extruders_used.size(); assert(static_cast(extruder_count) > 0); - std::vector ret; - ret.push_back(start_extruder); + std::vector ret; std::vector extruder_is_used_on_this_layer = storage.getExtrudersUsed(layer_nr); + const LayerIndex raft_base_layer_nr = -Raft::getTotalExtraLayers(); + Raft::LayerType layer_type = Raft::getLayerType(layer_nr); - // The outermost prime tower extruder is always used if there is a prime tower, apart on layers with negative index (e.g. for the raft) - if (mesh_group_settings.get("prime_tower_enable") && /*layer_nr >= 0 &&*/ layer_nr <= storage.max_print_height_second_to_last_extruder) + if (layer_type == Raft::RaftBase) { - extruder_is_used_on_this_layer[storage.primeTower.extruder_order_[0]] = true; + // Raft base layers area treated apart because they don't have a proper prime tower + const size_t raft_base_extruder_nr = mesh_group_settings.get("raft_base_extruder_nr").extruder_nr_; + ret.push_back(ExtruderUse{ raft_base_extruder_nr, ExtruderPrime::None }); + + // check if we need prime blob on the first layer + if (layer_nr == raft_base_layer_nr) + { + for (size_t extruder_nr = 0; extruder_nr < extruder_is_used_on_this_layer.size(); extruder_nr++) + { + if (extruder_nr != raft_base_extruder_nr && getExtruderNeedPrimeBlobDuringFirstLayer(storage, extruder_nr)) + { + ret.push_back(ExtruderUse{ extruder_nr, ExtruderPrime::None }); + } + } + } + + return ret; } // check if we are on the first layer - if ((mesh_group_settings.get("adhesion_type") == EPlatformAdhesion::RAFT && layer_nr == -static_cast(Raft::getTotalExtraLayers())) - || (mesh_group_settings.get("adhesion_type") != EPlatformAdhesion::RAFT && layer_nr == 0)) + if (layer_nr == raft_base_layer_nr) { // check if we need prime blob on the first layer for (size_t used_idx = 0; used_idx < extruder_is_used_on_this_layer.size(); used_idx++) @@ -1503,18 +1625,35 @@ std::vector FffGcodeWriter::getUsedExtrudersOnLayerExcludingStartingExtr } } + // Make a temp list with the potential ordered extruders + std::vector ordered_extruders; + ordered_extruders.push_back(start_extruder); for (size_t extruder_nr = 0; extruder_nr < extruder_count; extruder_nr++) { - if (extruder_nr == start_extruder) - { // skip the current extruder, it's the one we started out planning - continue; + if (extruder_nr != start_extruder && global_extruders_used[extruder_nr]) + { + ordered_extruders.push_back(extruder_nr); } - if (! extruder_is_used_on_this_layer[extruder_nr]) + } + + // Now check whether extruders should really be used, and how + size_t last_extruder = start_extruder; + for (size_t extruder_nr : ordered_extruders) + { + ExtruderPrime prime = ExtruderPrime::None; + + if (storage.prime_tower_) { - continue; + prime = storage.prime_tower_->getExtruderPrime(extruder_is_used_on_this_layer, extruder_nr, last_extruder, storage, layer_nr); + } + + if (extruder_is_used_on_this_layer[extruder_nr] || prime != ExtruderPrime::None) + { + ret.push_back(ExtruderUse{ extruder_nr, prime }); + last_extruder = extruder_nr; } - ret.push_back(extruder_nr); } + assert(ret.size() <= (size_t)extruder_count && "Not more extruders may be planned in a layer than there are extruders!"); return ret; } @@ -1564,10 +1703,13 @@ void FffGcodeWriter::addMeshLayerToGCode_meshSurfaceMode(const SliceMeshStorage& const SliceLayer* layer = &mesh.layers[gcode_layer.getLayerNr()]; - Polygons polygons; + Shape polygons; for (const SliceLayerPart& part : layer->parts) { - polygons.add(part.outline); + if (! part.outline.empty()) + { + polygons.push_back(part.outline); + } } polygons = Simplify(mesh.settings).polygon(polygons); @@ -1587,7 +1729,7 @@ void FffGcodeWriter::addMeshOpenPolyLinesToGCode(const SliceMeshStorage& mesh, c { const SliceLayer* layer = &mesh.layers[gcode_layer.getLayerNr()]; - gcode_layer.addLinesByOptimizer(layer->openPolyLines, mesh_config.inset0_config, SpaceFillType::PolyLines); + gcode_layer.addLinesByOptimizer(layer->open_polylines, mesh_config.inset0_config, SpaceFillType::PolyLines); } void FffGcodeWriter::addMeshLayerToGCode( @@ -1629,9 +1771,15 @@ void FffGcodeWriter::addMeshLayerToGCode( PathOrderOptimizer part_order_optimizer(gcode_layer.getLastPlannedPositionOrStartingPosition(), z_seam_config); for (const SliceLayerPart& part : layer.parts) { + if (part.outline.empty()) + { + continue; + } part_order_optimizer.addPolygon(&part); } + part_order_optimizer.optimize(false); + for (const PathOrdering& path : part_order_optimizer.paths_) { addMeshPartToGCode(storage, mesh, extruder_nr, mesh_config, *path.vertices_, gcode_layer); @@ -1744,8 +1892,8 @@ bool FffGcodeWriter::processMultiLayerInfill( const bool zig_zaggify_infill = mesh.settings.get("zig_zaggify_infill") || infill_pattern == EFillMethod::ZIG_ZAG; const bool connect_polygons = mesh.settings.get("connect_infill_polygons"); const size_t infill_multiplier = mesh.settings.get("infill_multiplier"); - Polygons infill_polygons; - Polygons infill_lines; + Shape infill_polygons; + OpenLinesSet infill_lines; std::vector infill_paths = part.infill_wall_toolpaths; for (size_t density_idx = part.infill_area_per_combine_per_density.size() - 1; (int)density_idx >= 0; density_idx--) { // combine different density infill areas (for gradual infill) @@ -1759,7 +1907,7 @@ bool FffGcodeWriter::processMultiLayerInfill( constexpr size_t wall_line_count = 0; // wall toolpaths are when gradual infill areas are determined const coord_t small_area_width = 0; - constexpr coord_t infill_overlap = 0; // Overlap is handled when the wall toolpaths are generated + const coord_t infill_overlap = mesh.settings.get("infill_overlap_mm"); constexpr bool skip_stitching = false; constexpr bool connected_zigzags = false; constexpr bool use_endpieces = true; @@ -1864,9 +2012,9 @@ bool FffGcodeWriter::processSingleLayerInfill( const coord_t infill_line_width = mesh_config.infill_config[0].getLineWidth(); // Combine the 1 layer thick infill with the top/bottom skin and print that as one thing. - Polygons infill_polygons; + Shape infill_polygons; std::vector> wall_tool_paths; // All wall toolpaths binned by inset_idx (inner) and by density_idx (outer) - Polygons infill_lines; + OpenLinesSet infill_lines; const auto pattern = mesh.settings.get("infill_pattern"); const bool zig_zaggify_infill = mesh.settings.get("zig_zaggify_infill") || pattern == EFillMethod::ZIG_ZAG; @@ -1896,12 +2044,12 @@ bool FffGcodeWriter::processSingleLayerInfill( return -static_cast(line_count) * line_width; }; - Polygons sparse_in_outline = part.infill_area_per_combine_per_density[last_idx][0]; + Shape sparse_in_outline = part.infill_area_per_combine_per_density[last_idx][0]; // if infill walls are required below the boundaries of skin regions above, partition the infill along the // boundary edge - Polygons infill_below_skin; - Polygons infill_not_below_skin; + Shape infill_below_skin; + Shape infill_not_below_skin; const bool hasSkinEdgeSupport = partitionInfillBySkinAbove(infill_below_skin, infill_not_below_skin, gcode_layer, mesh, part, infill_line_width); const auto pocket_size = mesh.settings.get("cross_infill_pocket_size"); @@ -1919,8 +2067,8 @@ bool FffGcodeWriter::processSingleLayerInfill( continue; } - Polygons infill_lines_here; - Polygons infill_polygons_here; + OpenLinesSet infill_lines_here; + Shape infill_polygons_here; // the highest density infill combines with the next to create a grid with density_factor 1 int infill_line_distance_here = infill_line_distance << (density_idx + 1); @@ -1961,7 +2109,7 @@ bool FffGcodeWriter::processSingleLayerInfill( infill_line_distance_here /= 2; } - Polygons in_outline = part.infill_area_per_combine_per_density[density_idx][0]; + Shape in_outline = part.infill_area_per_combine_per_density[density_idx][0]; std::shared_ptr lightning_layer; if (mesh.lightning_generator) @@ -2015,10 +2163,10 @@ bool FffGcodeWriter::processSingleLayerInfill( if (density_idx < last_idx) { const coord_t cut_offset = get_cut_offset(zig_zaggify_infill, infill_line_width, min_skin_below_wall_count); - Polygons tool = infill_below_skin.offset(static_cast(cut_offset)); - infill_lines_here = tool.intersectionPolyLines(infill_lines_here); + Shape tool = infill_below_skin.offset(static_cast(cut_offset)); + infill_lines_here = tool.intersection(infill_lines_here); } - infill_lines.add(infill_lines_here); + infill_lines.push_back(infill_lines_here); // normal processing for the infill that isn't below skin in_outline = infill_not_below_skin; if (density_idx == last_idx) @@ -2027,7 +2175,7 @@ bool FffGcodeWriter::processSingleLayerInfill( } } - const coord_t circumference = in_outline.polygonLength(); + const coord_t circumference = in_outline.length(); // Originally an area of 0.4*0.4*2 (2 line width squares) was found to be a good threshold for removal. // However we found that this doesn't scale well with polygons with larger circumference (https://github.com/Ultimaker/Cura/issues/3992). // Given that the original test worked for approximately 2x2cm models, this scaling by circumference should make it work for any size. @@ -2040,7 +2188,7 @@ bool FffGcodeWriter::processSingleLayerInfill( constexpr size_t wall_line_count_here = 0; // Wall toolpaths were generated in generateGradualInfill for the sparsest density, denser parts don't have walls by default const coord_t small_area_width = 0; - constexpr coord_t overlap = 0; // overlap is already applied for the sparsest density in the generateGradualInfill + const coord_t overlap = mesh.settings.get("infill_overlap_mm"); wall_tool_paths.emplace_back(); Infill infill_comp( @@ -2080,11 +2228,11 @@ bool FffGcodeWriter::processSingleLayerInfill( if (density_idx < last_idx) { const coord_t cut_offset = get_cut_offset(zig_zaggify_infill, infill_line_width, wall_line_count); - Polygons tool = sparse_in_outline.offset(static_cast(cut_offset)); - infill_lines_here = tool.intersectionPolyLines(infill_lines_here); + Shape tool = sparse_in_outline.offset(static_cast(cut_offset)); + infill_lines_here = tool.intersection(infill_lines_here); } - infill_lines.add(infill_lines_here); - infill_polygons.add(infill_polygons_here); + infill_lines.push_back(infill_lines_here); + infill_polygons.push_back(infill_polygons_here); } wall_tool_paths.emplace_back(part.infill_wall_toolpaths); // The extra infill walls were generated separately. Add these too. @@ -2117,7 +2265,7 @@ bool FffGcodeWriter::processSingleLayerInfill( } else if (! infill_polygons.empty()) { - PolygonRef start_poly = infill_polygons[rand() % infill_polygons.size()]; + const Polygon& start_poly = infill_polygons[rand() % infill_polygons.size()]; near_start_location = start_poly[rand() % start_poly.size()]; } else // So walls_generated must be true. @@ -2152,13 +2300,16 @@ bool FffGcodeWriter::processSingleLayerInfill( mesh_config.infill_config[0], mesh_config.infill_config[0], mesh_config.infill_config[0], + mesh_config.infill_config[0], + mesh_config.infill_config[0], retract_before_outer_wall, wipe_dist, wipe_dist, extruder_nr, extruder_nr, z_seam_config, - tool_paths); + tool_paths, + mesh.bounding_box.flatten().getMiddle()); added_something |= wall_orderer.addToLayer(); } } @@ -2198,8 +2349,8 @@ bool FffGcodeWriter::processSingleLayerInfill( } bool FffGcodeWriter::partitionInfillBySkinAbove( - Polygons& infill_below_skin, - Polygons& infill_not_below_skin, + Shape& infill_below_skin, + Shape& infill_not_below_skin, const LayerPlan& gcode_layer, const SliceMeshStorage& mesh, const SliceLayerPart& part, @@ -2207,7 +2358,7 @@ bool FffGcodeWriter::partitionInfillBySkinAbove( { constexpr coord_t tiny_infill_offset = 20; const auto skin_edge_support_layers = mesh.settings.get("skin_edge_support_layers"); - Polygons skin_above_combined; // skin regions on the layers above combined with small gaps between + Shape skin_above_combined; // skin regions on the layers above combined with small gaps between // working from the highest layer downwards, combine the regions of skin on all the layers // but don't let the regions merge together @@ -2222,12 +2373,12 @@ bool FffGcodeWriter::partitionInfillBySkinAbove( for (const SkinPart& skin_part : part_i.skin_parts) { // Limit considered areas to the ones that should have infill underneath at the current layer. - const Polygons relevant_outline = skin_part.outline.intersection(part.getOwnInfillArea()); + const Shape relevant_outline = skin_part.outline.intersection(part.getOwnInfillArea()); if (! skin_above_combined.empty()) { // does this skin part overlap with any of the skin parts on the layers above? - const Polygons overlap = skin_above_combined.intersection(relevant_outline); + const Shape overlap = skin_above_combined.intersection(relevant_outline); if (! overlap.empty()) { // yes, it overlaps, need to leave a gap between this skin part and the others @@ -2246,13 +2397,13 @@ bool FffGcodeWriter::partitionInfillBySkinAbove( // ------- -------------------------- ---------- // expand the overlap region slightly to make a small gap - const Polygons overlap_expanded = overlap.offset(tiny_infill_offset); + const Shape overlap_expanded = overlap.offset(tiny_infill_offset); // subtract the expanded overlap region from the regions accumulated from higher layers skin_above_combined = skin_above_combined.difference(overlap_expanded); // subtract the expanded overlap region from this skin part and add the remainder to the overlap region - skin_above_combined.add(relevant_outline.difference(overlap_expanded)); + skin_above_combined.push_back(relevant_outline.difference(overlap_expanded)); // and add the overlap area as well - skin_above_combined.add(overlap); + skin_above_combined.push_back(overlap); } else // this layer is the 1st layer above the layer whose infill we're printing { @@ -2272,17 +2423,17 @@ bool FffGcodeWriter::partitionInfillBySkinAbove( // ------- ------------------------------------- skin_above_combined = skin_above_combined.difference(relevant_outline.offset(tiny_infill_offset)); - skin_above_combined.add(relevant_outline); + skin_above_combined.push_back(relevant_outline); } } else // no overlap { - skin_above_combined.add(relevant_outline); + skin_above_combined.push_back(relevant_outline); } } else // this is the first skin region we have looked at { - skin_above_combined.add(relevant_outline); + skin_above_combined.push_back(relevant_outline); } } } @@ -2304,11 +2455,31 @@ bool FffGcodeWriter::partitionInfillBySkinAbove( // need to take skin/infill overlap that was added in SkinInfillAreaComputation::generateInfill() into account const coord_t infill_skin_overlap = mesh.settings.get((part.wall_toolpaths.size() > 1) ? "wall_line_width_x" : "wall_line_width_0") / 2; - const Polygons infill_below_skin_overlap = infill_below_skin.offset(-(infill_skin_overlap + tiny_infill_offset)); + const Shape infill_below_skin_overlap = infill_below_skin.offset(-(infill_skin_overlap + tiny_infill_offset)); return ! infill_below_skin_overlap.empty() && ! infill_not_below_skin.empty(); } +size_t FffGcodeWriter::findUsedExtruderIndex(const SliceDataStorage& storage, const LayerIndex& layer_nr, bool last) const +{ + const std::vector extruder_use = extruder_order_per_layer.get(layer_nr); + + if (! extruder_use.empty()) + { + return last ? extruder_use.back().extruder_nr : extruder_use.front().extruder_nr; + } + else if (layer_nr <= -Raft::getTotalExtraLayers()) + { + // Asking for extruder use below first layer, give first extruder + return getStartExtruder(storage); + } + else + { + // Asking for extruder on an empty layer, get the last one from layer below + return findUsedExtruderIndex(storage, layer_nr - 1, true); + } +} + void FffGcodeWriter::processSpiralizedWall( const SliceDataStorage& storage, LayerPlan& gcode_layer, @@ -2321,7 +2492,7 @@ void FffGcodeWriter::processSpiralizedWall( // wall doesn't have usable outline return; } - const ClipperLib::Path* last_wall_outline = &*part.spiral_wall[0]; // default to current wall outline + const Polygon* last_wall_outline = &(part.spiral_wall[0]); // default to current wall outline int last_seam_vertex_idx = -1; // last layer seam vertex index int layer_nr = gcode_layer.getLayerNr(); if (layer_nr > 0) @@ -2329,7 +2500,7 @@ void FffGcodeWriter::processSpiralizedWall( if (storage.spiralize_wall_outlines[layer_nr - 1] != nullptr) { // use the wall outline from the previous layer - last_wall_outline = &*(*storage.spiralize_wall_outlines[layer_nr - 1])[0]; + last_wall_outline = &(storage.spiralize_wall_outlines[layer_nr - 1]->front()); // and the seam vertex index pre-computed for that layer last_seam_vertex_idx = storage.spiralize_seam_vertex_indices[layer_nr - 1]; } @@ -2338,10 +2509,9 @@ void FffGcodeWriter::processSpiralizedWall( const bool is_top_layer = ((size_t)layer_nr == (storage.spiralize_wall_outlines.size() - 1) || storage.spiralize_wall_outlines[layer_nr + 1] == nullptr); const int seam_vertex_idx = storage.spiralize_seam_vertex_indices[layer_nr]; // use pre-computed seam vertex index for current layer // output a wall slice that is interpolated between the last and current walls - for (const ConstPolygonRef& wall_outline : part.spiral_wall) + for (const Polygon& wall_outline : part.spiral_wall) { - gcode_layer - .spiralizeWallSlice(mesh_config.inset0_config, wall_outline, ConstPolygonRef(*last_wall_outline), seam_vertex_idx, last_seam_vertex_idx, is_top_layer, is_bottom_layer); + gcode_layer.spiralizeWallSlice(mesh_config.inset0_config, wall_outline, *last_wall_outline, seam_vertex_idx, last_seam_vertex_idx, is_top_layer, is_bottom_layer); } } @@ -2385,7 +2555,7 @@ bool FffGcodeWriter::processInsets( added_something = true; gcode_layer.setIsInside(true); // going to print stuff inside print object // start this first wall at the same vertex the spiral starts - const ConstPolygonRef spiral_inset = part.spiral_wall[0]; + const Polygon& spiral_inset = part.spiral_wall[0]; const size_t spiral_start_vertex = storage.spiralize_seam_vertex_indices[initial_bottom_layers]; if (spiral_start_vertex < spiral_inset.size()) { @@ -2400,7 +2570,7 @@ bool FffGcodeWriter::processInsets( { // accumulate the outlines of all of the parts that are on the layer below - Polygons outlines_below; + Shape outlines_below; AABB boundaryBox(part.outline); for (const std::shared_ptr& mesh_ptr : storage.meshes) { @@ -2411,7 +2581,7 @@ bool FffGcodeWriter::processInsets( { if (boundaryBox.hit(prevLayerPart.boundaryBox)) { - outlines_below.add(prevLayerPart.outline); + outlines_below.push_back(prevLayerPart.outline); } } } @@ -2437,7 +2607,7 @@ bool FffGcodeWriter::processInsets( AABB support_roof_bb(support_layer.support_roof); if (boundaryBox.hit(support_roof_bb)) { - outlines_below.add(support_layer.support_roof); + outlines_below.push_back(support_layer.support_roof); } } else @@ -2447,7 +2617,7 @@ bool FffGcodeWriter::processInsets( AABB support_part_bb(support_part.getInfillArea()); if (boundaryBox.hit(support_part_bb)) { - outlines_below.add(support_part.getInfillArea()); + outlines_below.push_back(support_part.getInfillArea()); } } } @@ -2470,7 +2640,7 @@ bool FffGcodeWriter::processInsets( // subtract the outlines of the parts below this part to give the shapes of the unsupported regions and then // shrink those shapes so that any that are narrower than two times max_air_gap will be removed - Polygons compressed_air(part.outline.difference(outlines_below).offset(-max_air_gap)); + Shape compressed_air(part.outline.difference(outlines_below).offset(-max_air_gap)); // now expand the air regions by the same amount as they were shrunk plus half the outer wall line width // which is required because when the walls are being generated, the vertices do not fall on the part's outline @@ -2481,32 +2651,59 @@ bool FffGcodeWriter::processInsets( else { // clear to disable use of bridging settings - gcode_layer.setBridgeWallMask(Polygons()); + gcode_layer.setBridgeWallMask(Shape()); } - const AngleDegrees overhang_angle = mesh.settings.get("wall_overhang_angle"); - if (overhang_angle >= 90) - { - // clear to disable overhang detection - gcode_layer.setOverhangMask(Polygons()); - } - else + const auto get_overhang_region = [&](const AngleDegrees overhang_angle) -> Shape { + if (overhang_angle >= 90) + { + return Shape(); // keep empty to disable overhang detection + } // the overhang mask is set to the area of the current part's outline minus the region that is considered to be supported // the supported region is made up of those areas that really are supported by either model or support on the layer below // expanded to take into account the overhang angle, the greater the overhang angle, the larger the supported area is // considered to be const coord_t overhang_width = layer_height * std::tan(overhang_angle / (180 / std::numbers::pi)); - Polygons overhang_region = part.outline.offset(-half_outer_wall_width).difference(outlines_below.offset(10 + overhang_width - half_outer_wall_width)).offset(10); - gcode_layer.setOverhangMask(overhang_region); - } + return part.outline.offset(-half_outer_wall_width).difference(outlines_below.offset(10 + overhang_width - half_outer_wall_width)).offset(10); + }; + gcode_layer.setOverhangMask(get_overhang_region(mesh.settings.get("wall_overhang_angle"))); + gcode_layer.setSeamOverhangMask(get_overhang_region(mesh.settings.get("seam_overhang_angle"))); + + const auto roofing_mask_fn = [&]() -> Shape + { + const size_t roofing_layer_count = std::min(mesh.settings.get("roofing_layer_count"), mesh.settings.get("top_layers")); + + auto roofing_mask = storage.getMachineBorder(mesh.settings.get("wall_0_extruder_nr").extruder_nr_); + + if (gcode_layer.getLayerNr() + roofing_layer_count >= mesh.layers.size()) + { + return roofing_mask; + } + + const auto wall_line_width_0 = mesh.settings.get("wall_line_width_0"); + for (const auto& layer_part : mesh.layers[gcode_layer.getLayerNr() + roofing_layer_count].parts) + { + if (boundaryBox.hit(layer_part.boundaryBox)) + { + roofing_mask = roofing_mask.difference(layer_part.outline.offset(-wall_line_width_0 / 4)); + } + } + return roofing_mask; + }(); + + gcode_layer.setRoofingMask(roofing_mask_fn); } else { // clear to disable use of bridging settings - gcode_layer.setBridgeWallMask(Polygons()); + gcode_layer.setBridgeWallMask(Shape()); + // clear to disable overhang detection + gcode_layer.setOverhangMask(Shape()); // clear to disable overhang detection - gcode_layer.setOverhangMask(Polygons()); + gcode_layer.setSeamOverhangMask(Shape()); + // clear to disable use of roofing settings + gcode_layer.setRoofingMask(Shape()); } if (spiralize && extruder_nr == mesh.settings.get("wall_0_extruder_nr").extruder_nr_ && ! part.spiral_wall.empty()) @@ -2524,106 +2721,11 @@ bool FffGcodeWriter::processInsets( else { // Print the spiral walls of other parts as single walls without Z gradient. - gcode_layer.addWalls(part.spiral_wall, mesh.settings, mesh_config.inset0_config, mesh_config.inset0_config); + gcode_layer.addWalls(part.spiral_wall, mesh.settings, mesh_config.inset0_config, mesh_config.inset0_config, mesh_config.inset0_config); } } else { - // for layers that (partially) do not have any layers above we apply the roofing configuration - auto use_roofing_config = [&part, &mesh, &gcode_layer]() - { - const auto getOutlineOnLayer = [mesh](const SliceLayerPart& part_here, const LayerIndex layer2_nr) -> Polygons - { - Polygons result; - if (layer2_nr >= static_cast(mesh.layers.size())) - { - return result; - } - const SliceLayer& layer2 = mesh.layers[layer2_nr]; - for (const SliceLayerPart& part2 : layer2.parts) - { - if (part_here.boundaryBox.hit(part2.boundaryBox)) - { - result.add(part2.outline); - } - } - return result; - }; - - const auto filled_area_above = [&getOutlineOnLayer, &part, &mesh, &gcode_layer]() -> Polygons - { - const size_t roofing_layer_count = std::min(mesh.settings.get("roofing_layer_count"), mesh.settings.get("top_layers")); - const bool no_small_gaps_heuristic = mesh.settings.get("skin_no_small_gaps_heuristic"); - const int layer_nr = gcode_layer.getLayerNr(); - auto filled_area_above_res = getOutlineOnLayer(part, layer_nr + roofing_layer_count); - if (! no_small_gaps_heuristic) - { - for (int layer_nr_above = layer_nr + 1; layer_nr_above < layer_nr + roofing_layer_count; layer_nr_above++) - { - Polygons outlines_above = getOutlineOnLayer(part, layer_nr_above); - filled_area_above_res = filled_area_above_res.intersection(outlines_above); - } - } - if (layer_nr > 0) - { - // if the skin has air below it then cutting it into regions could cause a region - // to be wholely or partly above air and it may not be printable so restrict - // the regions that have air above (the visible regions) to not include any area that - // has air below (fixes https://github.com/Ultimaker/Cura/issues/2656) - - // set air_below to the skin area for the current layer that has air below it - Polygons air_below = getOutlineOnLayer(part, layer_nr).difference(getOutlineOnLayer(part, layer_nr - 1)); - - if (! air_below.empty()) - { - // add the polygons that have air below to the no air above polygons - filled_area_above_res = filled_area_above_res.unionPolygons(air_below); - } - } - - return filled_area_above_res; - }(); - - if (filled_area_above.empty()) - { - return true; - } - - const auto point_view = ranges::views::transform( - [](auto extrusion_junction) - { - return extrusion_junction.p_; - }); - - for (const auto& path : part.wall_toolpaths) - { - for (const auto& wall : path) - { - for (const auto& p : wall | point_view) - { - if (! filled_area_above.inside(p)) - { - return true; - } - } - - for (const auto& window : wall | point_view | ranges::views::sliding(2)) - { - auto p0 = window[0]; - auto p1 = window[1]; - if (PolygonUtils::polygonCollidesWithLineSegment(filled_area_above, p0, p1)) - { - return true; - } - } - } - } - return false; - }(); - - const GCodePathConfig& inset0_config = use_roofing_config ? mesh_config.inset0_roofing_config : mesh_config.inset0_config; - const GCodePathConfig& insetX_config = use_roofing_config ? mesh_config.insetX_roofing_config : mesh_config.insetX_config; - // Main case: Optimize the insets with the InsetOrderOptimizer. const coord_t wall_x_wipe_dist = 0; const ZSeamConfig z_seam_config( @@ -2637,8 +2739,10 @@ bool FffGcodeWriter::processInsets( gcode_layer, mesh.settings, extruder_nr, - inset0_config, - insetX_config, + mesh_config.inset0_config, + mesh_config.insetX_config, + mesh_config.inset0_roofing_config, + mesh_config.insetX_roofing_config, mesh_config.bridge_inset0_config, mesh_config.bridge_insetX_config, mesh.settings.get("travel_retract_before_outer_wall"), @@ -2647,13 +2751,14 @@ bool FffGcodeWriter::processInsets( mesh.settings.get("wall_0_extruder_nr").extruder_nr_, mesh.settings.get("wall_x_extruder_nr").extruder_nr_, z_seam_config, - part.wall_toolpaths); + part.wall_toolpaths, + mesh.bounding_box.flatten().getMiddle()); added_something |= wall_orderer.addToLayer(); } return added_something; } -std::optional FffGcodeWriter::getSeamAvoidingLocation(const Polygons& filling_part, int filling_angle, Point2LL last_position) const +std::optional FffGcodeWriter::getSeamAvoidingLocation(const Shape& filling_part, int filling_angle, Point2LL last_position) const { if (filling_part.empty()) { @@ -2841,7 +2946,7 @@ void FffGcodeWriter::processTopBottom( support_layer = &storage.support.supportLayers[support_layer_nr - (bridge_layer - 1)]; } - Polygons supported_skin_part_regions; + Shape supported_skin_part_regions; const double angle = bridgeAngle(mesh.settings, skin_part.skin_fill, storage, layer_nr, bridge_layer, support_layer, supported_skin_part_regions); @@ -2966,7 +3071,7 @@ void FffGcodeWriter::processSkinPrintFeature( LayerPlan& gcode_layer, const SliceMeshStorage& mesh, const size_t extruder_nr, - const Polygons& area, + const Shape& area, const GCodePathConfig& config, EFillMethod pattern, const AngleDegrees skin_angle, @@ -2976,8 +3081,8 @@ void FffGcodeWriter::processSkinPrintFeature( bool& added_something, double fan_speed) const { - Polygons skin_polygons; - Polygons skin_lines; + Shape skin_polygons; + OpenLinesSet skin_lines; std::vector skin_paths; constexpr int infill_multiplier = 1; @@ -3034,7 +3139,7 @@ void FffGcodeWriter::processSkinPrintFeature( nullptr, nullptr, nullptr, - small_areas_on_surface ? Polygons() : exposed_to_air); + small_areas_on_surface ? Shape() : exposed_to_air); // add paths if (! skin_polygons.empty() || ! skin_lines.empty() || ! skin_paths.empty()) @@ -3064,13 +3169,16 @@ void FffGcodeWriter::processSkinPrintFeature( config, config, config, + config, + config, retract_before_outer_wall, wipe_dist, wipe_dist, skin_extruder_nr, skin_extruder_nr, z_seam_config, - skin_paths); + skin_paths, + mesh.bounding_box.flatten().getMiddle()); added_something |= wall_orderer.addToLayer(); } } @@ -3256,6 +3364,12 @@ bool FffGcodeWriter::processSupportInfill(const SliceDataStorage& storage, Layer const AngleDegrees support_infill_angle = get_support_infill_angle(storage.support, gcode_layer.getLayerNr()); constexpr size_t infill_multiplier = 1; // there is no frontend setting for this (yet) + size_t infill_density_multiplier = 1; + if (gcode_layer.getLayerNr() <= 0) + { + infill_density_multiplier = infill_extruder.settings_.get("support_infill_density_multiplier_initial_layer"); + } + const size_t wall_line_count = infill_extruder.settings_.get("support_wall_count"); const coord_t max_resolution = infill_extruder.settings_.get("meshfix_maximum_resolution"); const coord_t max_deviation = infill_extruder.settings_.get("meshfix_maximum_deviation"); @@ -3316,7 +3430,27 @@ bool FffGcodeWriter::processSupportInfill(const SliceDataStorage& storage, Layer const GCodePathConfig& config = configs[0]; constexpr bool retract_before_outer_wall = false; constexpr coord_t wipe_dist = 0; - const ZSeamConfig z_seam_config(EZSeamType::SHORTEST, gcode_layer.getLastPlannedPositionOrStartingPosition(), EZSeamCornerPrefType::Z_SEAM_CORNER_PREF_NONE, false); + const LayerIndex layer_nr = gcode_layer.getLayerNr(); + ZSeamConfig z_seam_config + = ZSeamConfig(EZSeamType::SHORTEST, gcode_layer.getLastPlannedPositionOrStartingPosition(), EZSeamCornerPrefType::Z_SEAM_CORNER_PREF_NONE, false); + Shape disallowed_area_for_seams{}; + if (infill_extruder.settings_.get("support_z_seam_away_from_model") && (layer_nr >= 0)) + { + for (std::shared_ptr mesh_ptr : storage.meshes) + { + auto& mesh = *mesh_ptr; + for (auto& part : mesh.layers[layer_nr].parts) + { + disallowed_area_for_seams.push_back(part.print_outline); + } + } + if (! disallowed_area_for_seams.empty()) + { + coord_t min_distance = infill_extruder.settings_.get("support_z_seam_min_distance"); + disallowed_area_for_seams = disallowed_area_for_seams.offset(min_distance, ClipperLib::jtRound); + } + } + InsetOrderOptimizer wall_orderer( *this, storage, @@ -3327,13 +3461,17 @@ bool FffGcodeWriter::processSupportInfill(const SliceDataStorage& storage, Layer config, config, config, + config, + config, retract_before_outer_wall, wipe_dist, wipe_dist, extruder_nr, extruder_nr, z_seam_config, - wall_toolpaths); + wall_toolpaths, + storage.getModelBoundingBox().flatten().getMiddle(), + disallowed_area_for_seams); added_something |= wall_orderer.addToLayer(); } @@ -3346,9 +3484,9 @@ bool FffGcodeWriter::processSupportInfill(const SliceDataStorage& storage, Layer { const coord_t support_line_width = default_support_line_width * (combine_idx + 1); - Polygons support_polygons; + Shape support_polygons; std::vector wall_toolpaths_here; - Polygons support_lines; + OpenLinesSet support_lines; const size_t max_density_idx = part.infill_area_per_combine_per_density_.size() - 1; for (size_t density_idx = max_density_idx; (density_idx + 1) > 0; --density_idx) { @@ -3358,16 +3496,21 @@ bool FffGcodeWriter::processSupportInfill(const SliceDataStorage& storage, Layer } const unsigned int density_factor = 2 << density_idx; // == pow(2, density_idx + 1) - int support_line_distance_here + coord_t support_line_distance_here = (part.custom_line_distance_ > 0 ? part.custom_line_distance_ : default_support_line_distance * density_factor); // the highest density infill combines with the next to create a grid with density_factor 1 + if (support_line_distance_here != 0 && infill_density_multiplier > 1) + { + support_line_distance_here /= (1 << (infill_density_multiplier - 1)); + support_line_distance_here = std::max(support_line_distance_here, support_line_width); + } const int support_shift = support_line_distance_here / 2; if (part.custom_line_distance_ == 0 && (density_idx == max_density_idx || support_pattern == EFillMethod::CROSS || support_pattern == EFillMethod::CROSS_3D)) { support_line_distance_here /= 2; } - const Polygons& area = Simplify(infill_extruder.settings_).polygon(part.infill_area_per_combine_per_density_[density_idx][combine_idx]); + const Shape& area = Simplify(infill_extruder.settings_).polygon(part.infill_area_per_combine_per_density_[density_idx][combine_idx]); constexpr size_t wall_count = 0; // Walls are generated somewhere else, so their layers aren't vertically combined. const coord_t small_area_width = 0; @@ -3418,7 +3561,7 @@ bool FffGcodeWriter::processSupportInfill(const SliceDataStorage& storage, Layer // to the start of the support does not go through the model we have to tell the slicer what the current location of the nozzle is // by adding a travel move to the end vertex of the last spiral. Of course, if the slicer could track the final location on the previous // layer then this wouldn't be necessary but that's not done due to the multi-threading. - const Polygons* last_wall_outline = storage.spiralize_wall_outlines[layer_nr - 1]; + const Shape* last_wall_outline = storage.spiralize_wall_outlines[layer_nr - 1]; if (last_wall_outline != nullptr) { gcode_layer.addTravel((*last_wall_outline)[0][storage.spiralize_seam_vertex_indices[layer_nr - 1]]); @@ -3503,13 +3646,16 @@ bool FffGcodeWriter::processSupportInfill(const SliceDataStorage& storage, Layer config, config, config, + config, + config, retract_before_outer_wall, wipe_dist, wipe_dist, extruder_nr, extruder_nr, z_seam_config, - wall_toolpaths_here); + wall_toolpaths_here, + storage.getModelBoundingBox().flatten().getMiddle()); added_something |= wall_orderer.addToLayer(); } } @@ -3519,11 +3665,8 @@ bool FffGcodeWriter::processSupportInfill(const SliceDataStorage& storage, Layer } -bool FffGcodeWriter::addSupportRoofsToGCode( - const SliceDataStorage& storage, - const Polygons& support_roof_outlines, - const GCodePathConfig& current_roof_config, - LayerPlan& gcode_layer) const +bool FffGcodeWriter::addSupportRoofsToGCode(const SliceDataStorage& storage, const Shape& support_roof_outlines, const GCodePathConfig& current_roof_config, LayerPlan& gcode_layer) + const { const SupportLayer& support_layer = storage.support.supportLayers[std::max(LayerIndex{ 0 }, gcode_layer.getLayerNr())]; @@ -3569,12 +3712,12 @@ bool FffGcodeWriter::addSupportRoofsToGCode( support_roof_line_distance *= roof_extruder.settings_.get("initial_layer_line_width_factor"); } - Polygons infill_outline = support_roof_outlines; - Polygons wall; + Shape infill_outline = support_roof_outlines; + Shape wall; // make sure there is a wall if this is on the first layer if (gcode_layer.getLayerNr() == 0) { - wall = support_layer.support_roof.offset(-support_roof_line_width / 2); + wall = support_roof_outlines.offset(-support_roof_line_width / 2); infill_outline = wall.offset(-support_roof_line_width / 2); } infill_outline = Simplify(roof_extruder.settings_).polygon(infill_outline); @@ -3603,9 +3746,9 @@ bool FffGcodeWriter::addSupportRoofsToGCode( skip_some_zags, zag_skip_count, pocket_size); - Polygons roof_polygons; + Shape roof_polygons; std::vector roof_paths; - Polygons roof_lines; + OpenLinesSet roof_lines; roof_computation.generate(roof_paths, roof_polygons, roof_lines, roof_extruder.settings_, gcode_layer.getLayerNr(), SectionType::SUPPORT); if ((gcode_layer.getLayerNr() == 0 && wall.empty()) || (gcode_layer.getLayerNr() > 0 && roof_paths.empty() && roof_polygons.empty() && roof_lines.empty())) { @@ -3639,13 +3782,16 @@ bool FffGcodeWriter::addSupportRoofsToGCode( config, config, config, + config, + config, retract_before_outer_wall, wipe_dist, wipe_dist, roof_extruder_nr, roof_extruder_nr, z_seam_config, - roof_paths); + roof_paths, + storage.getModelBoundingBox().flatten().getMiddle()); wall_orderer.addToLayer(); } gcode_layer.addLinesByOptimizer(roof_lines, current_roof_config, (pattern == EFillMethod::ZIG_ZAG) ? SpaceFillType::PolyLines : SpaceFillType::Lines); @@ -3718,9 +3864,9 @@ bool FffGcodeWriter::addSupportBottomsToGCode(const SliceDataStorage& storage, L skip_some_zags, zag_skip_count, pocket_size); - Polygons bottom_polygons; + Shape bottom_polygons; std::vector bottom_paths; - Polygons bottom_lines; + OpenLinesSet bottom_lines; bottom_computation.generate(bottom_paths, bottom_polygons, bottom_lines, bottom_extruder.settings_, gcode_layer.getLayerNr(), SectionType::SUPPORT); if (bottom_paths.empty() && bottom_polygons.empty() && bottom_lines.empty()) { @@ -3750,13 +3896,16 @@ bool FffGcodeWriter::addSupportBottomsToGCode(const SliceDataStorage& storage, L config, config, config, + config, + config, retract_before_outer_wall, wipe_dist, wipe_dist, bottom_extruder_nr, bottom_extruder_nr, z_seam_config, - bottom_paths); + bottom_paths, + storage.getModelBoundingBox().flatten().getMiddle()); wall_orderer.addToLayer(); } gcode_layer.addLinesByOptimizer( @@ -3766,7 +3915,7 @@ bool FffGcodeWriter::addSupportBottomsToGCode(const SliceDataStorage& storage, L return true; } -void FffGcodeWriter::setExtruder_addPrime(const SliceDataStorage& storage, LayerPlan& gcode_layer, const size_t extruder_nr) const +void FffGcodeWriter::setExtruder_addPrime(const SliceDataStorage& storage, LayerPlan& gcode_layer, const size_t extruder_nr, const bool append_to_prime_tower) const { const size_t previous_extruder = gcode_layer.getExtruder(); const bool extruder_changed = gcode_layer.setExtruder(extruder_nr); @@ -3799,17 +3948,22 @@ void FffGcodeWriter::setExtruder_addPrime(const SliceDataStorage& storage, Layer } } - addPrimeTower(storage, gcode_layer, previous_extruder); + if (append_to_prime_tower) + { + addPrimeTower(storage, gcode_layer, previous_extruder); + } } void FffGcodeWriter::addPrimeTower(const SliceDataStorage& storage, LayerPlan& gcode_layer, const size_t prev_extruder) const { - if (! Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("prime_tower_enable")) + if (! storage.prime_tower_) { return; } - storage.primeTower.addToGcode(storage, gcode_layer, prev_extruder, gcode_layer.getExtruder()); + const LayerIndex layer_nr = gcode_layer.getLayerNr(); + const std::vector extruder_order = extruder_order_per_layer.get(layer_nr); + storage.prime_tower_->addToGcode(storage, gcode_layer, extruder_order, prev_extruder, gcode_layer.getExtruder()); } void FffGcodeWriter::finalize() diff --git a/src/FffPolygonGenerator.cpp b/src/FffPolygonGenerator.cpp index 384093794c..10a1336995 100644 --- a/src/FffPolygonGenerator.cpp +++ b/src/FffPolygonGenerator.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2023 UltiMaker +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher #include @@ -49,6 +49,8 @@ #include "utils/ThreadPool.h" #include "utils/gettime.h" #include "utils/math.h" +#include "PrimeTower/PrimeTower.h" +#include "geometry/OpenPolyline.h" #include "utils/Simplify.h" // clang-format on @@ -412,10 +414,7 @@ void FffPolygonGenerator::slices2polygons(SliceDataStorage& storage, TimeKeeper& computePrintHeightStatistics(storage); // handle helpers - storage.primeTower.checkUsed(storage); - storage.primeTower.generateGroundpoly(); - storage.primeTower.generatePaths(storage); - storage.primeTower.subtractFromSupport(storage); + storage.initializePrimeTower(); spdlog::debug("Processing ooze shield"); processOozeShield(storage); @@ -425,7 +424,7 @@ void FffPolygonGenerator::slices2polygons(SliceDataStorage& storage, TimeKeeper& // This catches a special case in which the models are in the air, and then // the adhesion mustn't be calculated. - if (! isEmptyLayer(storage, 0) || storage.primeTower.enabled_) + if (! isEmptyLayer(storage, 0) || storage.prime_tower_) { spdlog::debug("Processing platform adhesion"); processPlatformAdhesion(storage); @@ -568,17 +567,16 @@ void FffPolygonGenerator::processInfillMesh(SliceDataStorage& storage, const siz // they have to be polylines, because they might break up further when doing the cutting for (SliceLayerPart& part : layer.parts) { - for (PolygonRef poly : part.outline) + for (const Polygon& poly : part.outline) { - layer.openPolyLines.add(poly); - layer.openPolyLines.back().add(layer.openPolyLines.back()[0]); // add the segment which closes the polygon + layer.open_polylines.push_back(poly.toPseudoOpenPolyline()); } } layer.parts.clear(); } - std::vector new_parts; - Polygons new_polylines; + std::vector new_parts; + OpenLinesSet new_polylines; for (const size_t other_mesh_idx : mesh_order) { // limit the infill mesh's outline to within the infill of all meshes with lower order @@ -604,17 +602,17 @@ void FffPolygonGenerator::processInfillMesh(SliceDataStorage& storage, const siz { // early out continue; } - Polygons new_outline = part.outline.intersection(other_part.getOwnInfillArea()); + Shape new_outline = part.outline.intersection(other_part.getOwnInfillArea()); if (new_outline.size() == 1) { // we don't have to call splitIntoParts, because a single polygon can only be a single part - PolygonsPart outline_part_here; - outline_part_here.add(new_outline[0]); + SingleShape outline_part_here; + outline_part_here.push_back(new_outline[0]); new_parts.push_back(outline_part_here); } else if (new_outline.size() > 1) { // we don't know whether it's a multitude of parts because of newly introduced holes, or because the polygon has been split up - std::vector new_parts_here = new_outline.splitIntoParts(); - for (PolygonsPart& new_part_here : new_parts_here) + std::vector new_parts_here = new_outline.splitIntoParts(); + for (SingleShape& new_part_here : new_parts_here) { new_parts.push_back(new_part_here); } @@ -627,21 +625,25 @@ void FffPolygonGenerator::processInfillMesh(SliceDataStorage& storage, const siz } if (mesh.settings.get("magic_mesh_surface_mode") != ESurfaceMode::NORMAL) { - const Polygons& own_infill_area = other_part.getOwnInfillArea(); - Polygons cut_lines = own_infill_area.intersectionPolyLines(layer.openPolyLines); - new_polylines.add(cut_lines); + const Shape& own_infill_area = other_part.getOwnInfillArea(); + OpenLinesSet cut_lines = own_infill_area.intersection(layer.open_polylines); + new_polylines.push_back(cut_lines); // NOTE: closed polygons will be represented as polylines, which will be closed automatically in the PathOrderOptimizer if (! own_infill_area.empty()) { - other_part.infill_area_own = own_infill_area.difference(layer.openPolyLines.offsetPolyLine(surface_line_width / 2)); + other_part.infill_area_own = own_infill_area.difference(layer.open_polylines.offset(surface_line_width / 2)); } } } } layer.parts.clear(); - for (PolygonsPart& part : new_parts) + for (SingleShape& part : new_parts) { + if (part.empty()) + { + continue; + } layer.parts.emplace_back(); layer.parts.back().outline = part; layer.parts.back().boundaryBox.calculate(part); @@ -649,10 +651,10 @@ void FffPolygonGenerator::processInfillMesh(SliceDataStorage& storage, const siz if (mesh.settings.get("magic_mesh_surface_mode") != ESurfaceMode::NORMAL) { - layer.openPolyLines = new_polylines; + layer.open_polylines = new_polylines; } - if (layer.parts.size() > 0 || (mesh.settings.get("magic_mesh_surface_mode") != ESurfaceMode::NORMAL && layer.openPolyLines.size() > 0)) + if (layer.parts.size() > 0 || (mesh.settings.get("magic_mesh_surface_mode") != ESurfaceMode::NORMAL && layer.open_polylines.size() > 0)) { mesh.layer_nr_max_filled_layer = layer_idx; // last set by the highest non-empty layer } @@ -750,7 +752,7 @@ bool FffPolygonGenerator::isEmptyLayer(SliceDataStorage& storage, const LayerInd continue; } SliceLayer& layer = mesh.layers[layer_idx]; - if (mesh.settings.get("magic_mesh_surface_mode") != ESurfaceMode::NORMAL && layer.openPolyLines.size() > 0) + if (mesh.settings.get("magic_mesh_surface_mode") != ESurfaceMode::NORMAL && layer.open_polylines.size() > 0) { return false; } @@ -768,11 +770,20 @@ bool FffPolygonGenerator::isEmptyLayer(SliceDataStorage& storage, const LayerInd void FffPolygonGenerator::removeEmptyFirstLayers(SliceDataStorage& storage, size_t& total_layers) { size_t n_empty_first_layers = 0; + coord_t hightest_empty_layer = 0; for (size_t layer_idx = 0; layer_idx < total_layers; layer_idx++) { if (isEmptyLayer(storage, layer_idx)) { n_empty_first_layers++; + + coord_t layer_highest_z = 0; + for (const std::shared_ptr& mesh_ptr : storage.meshes) + { + const auto& mesh = *mesh_ptr; + layer_highest_z = layer_idx >= mesh.layers.size() ? layer_highest_z : std::max(layer_highest_z, mesh.layers[layer_idx].printZ); + } + hightest_empty_layer = std::max(hightest_empty_layer, layer_highest_z); } else { @@ -796,7 +807,7 @@ void FffPolygonGenerator::removeEmptyFirstLayers(SliceDataStorage& storage, size layers.erase(layers.begin(), layers.begin() + n_empty_first_layers); for (SliceLayer& layer : layers) { - layer.printZ -= n_empty_first_layers * layer_height; + layer.printZ -= hightest_empty_layer; } mesh.layer_nr_max_filled_layer -= n_empty_first_layers; } @@ -947,7 +958,7 @@ void FffPolygonGenerator::processOozeShield(SliceDataStorage& storage) { constexpr bool around_support = true; constexpr bool around_prime_tower = false; - storage.oozeShield.push_back(storage.getLayerOutlines(layer_nr, around_support, around_prime_tower).offset(ooze_shield_dist, ClipperLib::jtRound).getOutsidePolygons()); + storage.ooze_shield.push_back(storage.getLayerOutlines(layer_nr, around_support, around_prime_tower).offset(ooze_shield_dist, ClipperLib::jtRound).getOutsidePolygons()); } const AngleDegrees angle = mesh_group_settings.get("ooze_shield_angle"); @@ -957,20 +968,20 @@ void FffPolygonGenerator::processOozeShield(SliceDataStorage& storage) = tan(mesh_group_settings.get("ooze_shield_angle")) * mesh_group_settings.get("layer_height"); // Allow for a 60deg angle in the oozeShield. for (LayerIndex layer_nr = 1; layer_nr <= storage.max_print_height_second_to_last_extruder; layer_nr++) { - storage.oozeShield[layer_nr] = storage.oozeShield[layer_nr].unionPolygons(storage.oozeShield[layer_nr - 1].offset(-allowed_angle_offset)); + storage.ooze_shield[layer_nr] = storage.ooze_shield[layer_nr].unionPolygons(storage.ooze_shield[layer_nr - 1].offset(-allowed_angle_offset)); } for (LayerIndex layer_nr = storage.max_print_height_second_to_last_extruder; layer_nr > 0; layer_nr--) { - storage.oozeShield[layer_nr - 1] = storage.oozeShield[layer_nr - 1].unionPolygons(storage.oozeShield[layer_nr].offset(-allowed_angle_offset)); + storage.ooze_shield[layer_nr - 1] = storage.ooze_shield[layer_nr - 1].unionPolygons(storage.ooze_shield[layer_nr].offset(-allowed_angle_offset)); } } const double largest_printed_area = 1.0; // TODO: make var a parameter, and perhaps even a setting? for (LayerIndex layer_nr = 0; layer_nr <= storage.max_print_height_second_to_last_extruder; layer_nr++) { - storage.oozeShield[layer_nr].removeSmallAreas(largest_printed_area); + storage.ooze_shield[layer_nr].removeSmallAreas(largest_printed_area); } - if (mesh_group_settings.get("prime_tower_enable")) + if (storage.prime_tower_) { coord_t max_line_width = 0; { // compute max_line_width @@ -985,7 +996,7 @@ void FffPolygonGenerator::processOozeShield(SliceDataStorage& storage) } for (LayerIndex layer_nr = 0; layer_nr <= storage.max_print_height_second_to_last_extruder; layer_nr++) { - storage.oozeShield[layer_nr] = storage.oozeShield[layer_nr].difference(storage.primeTower.getOuterPoly(layer_nr).offset(max_line_width / 2)); + storage.ooze_shield[layer_nr] = storage.ooze_shield[layer_nr].difference(storage.prime_tower_->getOccupiedOutline(layer_nr).offset(max_line_width / 2)); } } } @@ -1002,7 +1013,7 @@ void FffPolygonGenerator::processDraftShield(SliceDataStorage& storage) const LayerIndex layer_skip{ 500 / layer_height + 1 }; - Polygons& draft_shield = storage.draft_protection_shield; + Shape& draft_shield = storage.draft_protection_shield; for (LayerIndex layer_nr = 0; layer_nr < storage.print_layer_count && layer_nr < draft_shield_layers; layer_nr += layer_skip) { constexpr bool around_support = true; @@ -1022,7 +1033,7 @@ void FffPolygonGenerator::processDraftShield(SliceDataStorage& storage) maximum_deviation = std::min(maximum_deviation, extruder.settings_.get("meshfix_maximum_deviation")); } storage.draft_protection_shield = Simplify(maximum_resolution, maximum_deviation, 0).polygon(storage.draft_protection_shield); - if (mesh_group_settings.get("prime_tower_enable")) + if (storage.prime_tower_) { coord_t max_line_width = 0; { // compute max_line_width @@ -1035,7 +1046,7 @@ void FffPolygonGenerator::processDraftShield(SliceDataStorage& storage) max_line_width = std::max(max_line_width, extruders[extruder_nr].settings_.get("skirt_brim_line_width")); } } - storage.draft_protection_shield = storage.draft_protection_shield.difference(storage.primeTower.getGroundPoly().offset(max_line_width / 2)); + storage.draft_protection_shield = storage.draft_protection_shield.difference(storage.prime_tower_->getOccupiedGroundOutline().offset(max_line_width / 2)); } } @@ -1060,16 +1071,6 @@ void FffPolygonGenerator::processPlatformAdhesion(SliceDataStorage& storage) { skirt_brim.generateSupportBrim(); } - - for (const auto& extruder : Application::getInstance().current_slice_->scene.extruders) - { - Simplify simplifier(extruder.settings_); - for (auto skirt_brim_line : storage.skirt_brim[extruder.extruder_nr_]) - { - skirt_brim_line.closed_polygons = simplifier.polygon(skirt_brim_line.closed_polygons); - skirt_brim_line.open_polylines = simplifier.polyline(skirt_brim_line.open_polylines); - } - } } @@ -1089,7 +1090,7 @@ void FffPolygonGenerator::processFuzzyWalls(SliceMeshStorage& mesh) unsigned int start_layer_nr = (mesh.settings.get("adhesion_type") == EPlatformAdhesion::BRIM) ? 1 : 0; // don't make fuzzy skin on first layer if there's a brim - auto hole_area = Polygons(); + auto hole_area = Shape(); std::function accumulate_is_in_hole = []([[maybe_unused]] const bool& prev_result, [[maybe_unused]] const ExtrusionJunction& junction) { diff --git a/src/GCodePathConfig.cpp b/src/GCodePathConfig.cpp index 6cdfbd5d66..35e81edbb3 100644 --- a/src/GCodePathConfig.cpp +++ b/src/GCodePathConfig.cpp @@ -3,7 +3,7 @@ #include "GCodePathConfig.h" -#include "utils/Point2LL.h" // INT2MM +#include "geometry/Point2LL.h" // INT2MM namespace cura { diff --git a/src/InsetOrderOptimizer.cpp b/src/InsetOrderOptimizer.cpp index 6fb12f141f..ad036f62b9 100644 --- a/src/InsetOrderOptimizer.cpp +++ b/src/InsetOrderOptimizer.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2023 UltiMaker +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher #include "InsetOrderOptimizer.h" @@ -38,8 +38,10 @@ InsetOrderOptimizer::InsetOrderOptimizer( LayerPlan& gcode_layer, const Settings& settings, const int extruder_nr, - const GCodePathConfig& inset_0_non_bridge_config, - const GCodePathConfig& inset_X_non_bridge_config, + const GCodePathConfig& inset_0_default_config, + const GCodePathConfig& inset_X_default_config, + const GCodePathConfig& inset_0_roofing_config, + const GCodePathConfig& inset_X_roofing_config, const GCodePathConfig& inset_0_bridge_config, const GCodePathConfig& inset_X_bridge_config, const bool retract_before_outer_wall, @@ -48,14 +50,18 @@ InsetOrderOptimizer::InsetOrderOptimizer( const size_t wall_0_extruder_nr, const size_t wall_x_extruder_nr, const ZSeamConfig& z_seam_config, - const std::vector& paths) + const std::vector& paths, + const Point2LL& model_center_point, + const Shape& disallowed_areas_for_seams) : gcode_writer_(gcode_writer) , storage_(storage) , gcode_layer_(gcode_layer) , settings_(settings) , extruder_nr_(extruder_nr) - , inset_0_non_bridge_config_(inset_0_non_bridge_config) - , inset_X_non_bridge_config_(inset_X_non_bridge_config) + , inset_0_default_config_(inset_0_default_config) + , inset_X_default_config_(inset_X_default_config) + , inset_0_roofing_config_(inset_0_roofing_config) + , inset_X_roofing_config_(inset_X_roofing_config) , inset_0_bridge_config_(inset_0_bridge_config) , inset_X_bridge_config_(inset_X_bridge_config) , retract_before_outer_wall_(retract_before_outer_wall) @@ -66,6 +72,8 @@ InsetOrderOptimizer::InsetOrderOptimizer( , z_seam_config_(z_seam_config) , paths_(paths) , layer_nr_(gcode_layer.getLayerNr()) + , model_center_point_(model_center_point) + , disallowed_areas_for_seams_{ disallowed_areas_for_seams } { } @@ -90,18 +98,31 @@ bool InsetOrderOptimizer::addToLayer() bool added_something = false; constexpr bool detect_loops = false; - constexpr Polygons* combing_boundary = nullptr; + constexpr Shape* combing_boundary = nullptr; const auto group_outer_walls = settings_.get("group_outer_walls"); // When we alternate walls, also alternate the direction at which the first wall starts in. // On even layers we start with normal direction, on odd layers with inverted direction. - PathOrderOptimizer - order_optimizer(gcode_layer_.getLastPlannedPositionOrStartingPosition(), z_seam_config_, detect_loops, combing_boundary, reverse, order, group_outer_walls); - - for (const auto& line : walls_to_be_added) + PathOrderOptimizer order_optimizer( + gcode_layer_.getLastPlannedPositionOrStartingPosition(), + z_seam_config_, + detect_loops, + combing_boundary, + reverse, + order, + group_outer_walls, + disallowed_areas_for_seams_); + + for (auto& line : walls_to_be_added) { if (line.is_closed_) { - order_optimizer.addPolygon(&line); + std::optional force_start; + if (! settings_.get("z_seam_on_vertex")) + { + // If the user indicated that we may deviate from the vertices for the seam, we can insert a seam point, if needed. + force_start = insertSeamPoint(line); + } + order_optimizer.addPolygon(&line, force_start); } else { @@ -114,28 +135,141 @@ bool InsetOrderOptimizer::addToLayer() for (const PathOrdering& path : order_optimizer.paths_) { if (path.vertices_->empty()) + { continue; + } const bool is_outer_wall = path.vertices_->inset_idx_ == 0; // or thin wall 'gap filler' const bool is_gap_filler = path.vertices_->is_odd_; - const GCodePathConfig& non_bridge_config = is_outer_wall ? inset_0_non_bridge_config_ : inset_X_non_bridge_config_; + const GCodePathConfig& default_config = is_outer_wall ? inset_0_default_config_ : inset_X_default_config_; + const GCodePathConfig& roofing_config = is_outer_wall ? inset_0_roofing_config_ : inset_X_roofing_config_; const GCodePathConfig& bridge_config = is_outer_wall ? inset_0_bridge_config_ : inset_X_bridge_config_; const coord_t wipe_dist = is_outer_wall && ! is_gap_filler ? wall_0_wipe_dist_ : wall_x_wipe_dist_; const bool retract_before = is_outer_wall ? retract_before_outer_wall_ : false; - const bool revert_inset = alternate_walls && (path.vertices_->inset_idx_ % 2); - const bool revert_layer = alternate_walls && (layer_nr_ % 2); + const bool revert_inset = alternate_walls && (path.vertices_->inset_idx_ % 2 != 0); + const bool revert_layer = alternate_walls && (layer_nr_ % 2 != 0); const bool backwards = path.backwards_ != (revert_inset != revert_layer); const size_t start_index = (backwards != path.backwards_) ? path.vertices_->size() - (path.start_vertex_ + 1) : path.start_vertex_; const bool linked_path = ! path.is_closed_; gcode_layer_.setIsInside(true); // Going to print walls, which are always inside. - gcode_layer_.addWall(*path.vertices_, start_index, settings_, non_bridge_config, bridge_config, wipe_dist, flow, retract_before, path.is_closed_, backwards, linked_path); + gcode_layer_.addWall( + *path.vertices_, + start_index, + settings_, + default_config, + roofing_config, + bridge_config, + wipe_dist, + flow, + retract_before, + path.is_closed_, + backwards, + linked_path); added_something = true; } return added_something; } +std::optional InsetOrderOptimizer::insertSeamPoint(ExtrusionLine& closed_line) +{ + assert(closed_line.is_closed_); + assert(closed_line.size() >= 3); + + Point2LL request_point; + switch (z_seam_config_.type_) + { + case EZSeamType::USER_SPECIFIED: + request_point = z_seam_config_.pos_; + break; + case EZSeamType::SHORTEST: + request_point = gcode_layer_.getLastPlannedPositionOrStartingPosition(); + break; + default: + return std::nullopt; + } + + // Find the 'closest' point on the polygon to the request_point. + Point2LL closest_point; + size_t closest_junction_idx = 0; + coord_t closest_distance_sqd = std::numeric_limits::max(); + bool should_reclaculate_closest = false; + if (z_seam_config_.type_ == EZSeamType::USER_SPECIFIED) + { + // For user-defined seams you usually don't _actually_ want the _closest_ point, per-se, + // since you want the seam-line to be continuous in 3D space. + // To that end, take the center of the 3D model (not of the current polygon, as that would give the same problems) + // and project the point along the ray from the center to the request_point. + + const Point2LL ray_origin = model_center_point_; + request_point = ray_origin + (request_point - ray_origin) * 10; + + for (const auto& [i, junction] : closed_line.junctions_ | ranges::views::enumerate) + { + // NOTE: Maybe rewrite this once we can use C++23 ranges::views::adjacent + const auto& next_junction = closed_line.junctions_[(i + 1) % closed_line.junctions_.size()]; + + float t, u; + if (LinearAlg2D::segmentSegmentIntersection(ray_origin, request_point, junction.p_, next_junction.p_, t, u)) + { + const Point2LL intersection = ray_origin + (request_point - ray_origin) * t; + const coord_t distance_sqd = vSize2(request_point - intersection); + if (distance_sqd < closest_distance_sqd) + { + closest_point = intersection; + closest_distance_sqd = distance_sqd; + closest_junction_idx = i; + } + } + } + } + if (closest_distance_sqd >= std::numeric_limits::max()) + { + // If it the method isn't 'user-defined', or the attempt to do user-defined above failed + // (since we don't take the center of the polygon, but of the model, there's a chance there's no intersection), + // then just find the closest point on the polygon. + + for (const auto& [i, junction] : closed_line.junctions_ | ranges::views::enumerate) + { + const auto& next_junction = closed_line.junctions_[(i + 1) % closed_line.junctions_.size()]; + const coord_t distance_sqd = LinearAlg2D::getDist2FromLineSegment(junction.p_, request_point, next_junction.p_); + if (distance_sqd < closest_distance_sqd) + { + closest_distance_sqd = distance_sqd; + closest_junction_idx = i; + } + } + should_reclaculate_closest = true; + } + + const auto& start_pt = closed_line.junctions_[closest_junction_idx]; + const auto& end_pt = closed_line.junctions_[(closest_junction_idx + 1) % closed_line.junctions_.size()]; + if (should_reclaculate_closest) + { + // In the second case (see above) the closest point hasn't actually been calculated yet, + // since in that case we'de need the start and end points. So do that here. + closest_point = LinearAlg2D::getClosestOnLineSegment(request_point, start_pt.p_, end_pt.p_); + } + constexpr coord_t smallest_dist_sqd = 25; + if (vSize2(closest_point - start_pt.p_) <= smallest_dist_sqd || vSize2(closest_point - end_pt.p_) <= smallest_dist_sqd) + { + // Early out if the closest point is too close to the start or end point. + // NOTE: Maybe return the index here anyway, since this is the point the current caller would want to force the seam to. + // However, then the index returned would have a caveat that it _can_ point to an already exisiting point then. + return std::nullopt; + } + + // NOTE: This could also be done on a single axis (skipping the implied sqrt), but figuring out which one and then using the right values became a bit messy/verbose. + const coord_t total_dist = vSize(end_pt.p_ - start_pt.p_); + const coord_t start_dist = vSize(closest_point - start_pt.p_); + const coord_t end_dist = vSize(closest_point - end_pt.p_); + const coord_t w = ((end_pt.w_ * end_dist) / total_dist) + ((start_pt.w_ * start_dist) / total_dist); + + closed_line.junctions_.insert(closed_line.junctions_.begin() + closest_junction_idx + 1, ExtrusionJunction(closest_point, w, start_pt.perimeter_index_)); + return closest_junction_idx + 1; +} + InsetOrderOptimizer::value_type InsetOrderOptimizer::getRegionOrder(const std::vector& extrusion_lines, const bool outer_to_inner) { if (extrusion_lines.empty()) @@ -145,13 +279,13 @@ InsetOrderOptimizer::value_type InsetOrderOptimizer::getRegionOrder(const std::v } // view on the extrusion lines, sorted by area - const auto sorted_extrusion_lines = [&extrusion_lines]() + const std::vector sorted_extrusion_lines = [&extrusion_lines]() { auto extrusion_lines_area = extrusion_lines | ranges::views::addressof | ranges::views::transform( [](const ExtrusionLine* line) { - const auto poly = line->toPolygon(); + const Polygon poly = line->toPolygon(); AABB aabb; aabb.include(poly); return std::make_pair(line, aabb.area()); @@ -184,18 +318,17 @@ InsetOrderOptimizer::value_type InsetOrderOptimizer::getRegionOrder(const std::v { // Create a polygon representing the inner area of the extrusion line; any // point inside this polygon is considered to the child of the extrusion line. - Polygons hole_polygons; - for (const auto& poly : extrusion_line->toExtrusionPolygons().splitIntoParts()) + Shape hole_polygons; + if (extrusion_line->is_closed_) { - // drop first path, as this is the outer contour - for (const auto& hole : poly.paths | ranges::views::drop(1)) - { - // reverse the hole polygon to turn a hole into a polygon - hole_polygons.emplace_back(hole | ranges::views::reverse | ranges::to_vector); - } + hole_polygons.push_back(extrusion_line->toPolygon()); + } + + if (hole_polygons.empty()) + { + invariant_outer_parents.emplace(extrusion_line); + continue; } - // increase the size of the hole polygons by 10um to make sure we don't miss any invariant parents - hole_polygons.offset(10); // go through all the invariant parents and see if they are inside the hole polygon // if they are, then that means we have found a child for this extrusion line diff --git a/src/InterlockingGenerator.cpp b/src/InterlockingGenerator.cpp index ea1849d96f..abfab67ae7 100644 --- a/src/InterlockingGenerator.cpp +++ b/src/InterlockingGenerator.cpp @@ -12,6 +12,7 @@ #include "Application.h" #include "Slice.h" +#include "geometry/PointMatrix.h" #include "settings/types/LayerIndex.h" #include "slicer.h" #include "utils/VoxelUtils.h" @@ -68,16 +69,16 @@ void InterlockingGenerator::generateInterlockingStructure(std::vector& } } -std::pair InterlockingGenerator::growBorderAreasPerpendicular(const Polygons& a, const Polygons& b, const coord_t& detect) const +std::pair InterlockingGenerator::growBorderAreasPerpendicular(const Shape& a, const Shape& b, const coord_t& detect) const { const coord_t min_line = std::min(mesh_a_.mesh->settings_.get("min_wall_line_width"), mesh_b_.mesh->settings_.get("min_wall_line_width")); - const Polygons total_shrunk = a.offset(min_line).unionPolygons(b.offset(min_line)).offset(2 * -min_line); + const Shape total_shrunk = a.offset(min_line).unionPolygons(b.offset(min_line)).offset(2 * -min_line); - Polygons from_border_a = a.difference(total_shrunk); - Polygons from_border_b = b.difference(total_shrunk); + Shape from_border_a = a.difference(total_shrunk); + Shape from_border_b = b.difference(total_shrunk); - Polygons temp_a, temp_b; + Shape temp_a, temp_b; for (coord_t i = 0; i < (detect / min_line) + 2; ++i) { temp_a = from_border_a.offset(min_line); @@ -104,14 +105,14 @@ void InterlockingGenerator::handleThinAreas(const std::unordered_set const coord_t close_gaps = std::min(mesh_a_.mesh->settings_.get("line_width"), mesh_b_.mesh->settings_.get("line_width")) / 4; // Make an inclusionary polygon, to only actually handle thin areas near actual microstructures (so not in skin for example). - std::vector near_interlock_per_layer; - near_interlock_per_layer.assign(std::min(mesh_a_.layers.size(), mesh_b_.layers.size()), Polygons()); + std::vector near_interlock_per_layer; + near_interlock_per_layer.assign(std::min(mesh_a_.layers.size(), mesh_b_.layers.size()), Shape()); for (const auto& cell : has_all_meshes) { const Point3LL bottom_corner = vu_.toLowerCorner(cell); for (coord_t layer_nr = bottom_corner.z_; layer_nr < bottom_corner.z_ + cell_size_.z_ && layer_nr < static_cast(near_interlock_per_layer.size()); ++layer_nr) { - near_interlock_per_layer[static_cast(layer_nr)].add(vu_.toPolygon(cell)); + near_interlock_per_layer[static_cast(layer_nr)].push_back(vu_.toPolygon(cell)); } } for (auto& near_interlock : near_interlock_per_layer) @@ -123,20 +124,20 @@ void InterlockingGenerator::handleThinAreas(const std::unordered_set // Only alter layers when they are present in both meshes, zip should take care if that. for (auto [layer_nr, layer] : ranges::views::zip(mesh_a_.layers, mesh_b_.layers) | ranges::views::enumerate) { - Polygons& polys_a = std::get<0>(layer).polygons; - Polygons& polys_b = std::get<1>(layer).polygons; + Shape& polys_a = std::get<0>(layer).polygons_; + Shape& polys_b = std::get<1>(layer).polygons_; const auto [from_border_a, from_border_b] = growBorderAreasPerpendicular(polys_a, polys_b, detect); // Get the areas of each mesh that are _not_ thin (large), by performing a morphological open. - const Polygons large_a{ polys_a.offset(-detect).offset(detect) }; - const Polygons large_b{ polys_b.offset(-detect).offset(detect) }; + const Shape large_a{ polys_a.offset(-detect).offset(detect) }; + const Shape large_b{ polys_b.offset(-detect).offset(detect) }; // Derive the area that the thin areas need to expand into (so the added areas to the thin strips) from the information we already have. - const Polygons thin_expansion_a{ + const Shape thin_expansion_a{ large_b.intersection(polys_a.difference(large_a).offset(expand)).intersection(near_interlock_per_layer[layer_nr]).intersection(from_border_a).offset(rounding_errors) }; - const Polygons thin_expansion_b{ + const Shape thin_expansion_b{ large_a.intersection(polys_b.difference(large_b).offset(expand)).intersection(near_interlock_per_layer[layer_nr]).intersection(from_border_b).offset(rounding_errors) }; @@ -155,7 +156,7 @@ void InterlockingGenerator::generateInterlockingStructure() const std::unordered_set& has_all_meshes = voxels_per_mesh[1]; has_any_mesh.merge(has_all_meshes); // perform union and intersection simultaneously. Cannibalizes voxels_per_mesh - const std::vector layer_regions = computeUnionedVolumeRegions(); + const std::vector layer_regions = computeUnionedVolumeRegions(); if (air_filtering_) { @@ -183,11 +184,11 @@ std::vector> InterlockingGenerator::getShellVoxel Slicer* mesh = (mesh_idx == 0) ? &mesh_a_ : &mesh_b_; std::unordered_set& mesh_voxels = voxels_per_mesh[mesh_idx]; - std::vector rotated_polygons_per_layer(mesh->layers.size()); + std::vector rotated_polygons_per_layer(mesh->layers.size()); for (size_t layer_nr = 0; layer_nr < mesh->layers.size(); layer_nr++) { SlicerLayer& layer = mesh->layers[layer_nr]; - rotated_polygons_per_layer[layer_nr] = layer.polygons; + rotated_polygons_per_layer[layer_nr] = layer.polygons_; rotated_polygons_per_layer[layer_nr].applyMatrix(rotation_); } @@ -197,7 +198,7 @@ std::vector> InterlockingGenerator::getShellVoxel return voxels_per_mesh; } -void InterlockingGenerator::addBoundaryCells(const std::vector& layers, const DilationKernel& kernel, std::unordered_set& cells) const +void InterlockingGenerator::addBoundaryCells(const std::vector& layers, const DilationKernel& kernel, std::unordered_set& cells) const { auto voxel_emplacer = [&cells](GridPoint3 p) { @@ -209,7 +210,7 @@ void InterlockingGenerator::addBoundaryCells(const std::vector& layers { const coord_t z = static_cast(layer_nr); vu_.walkDilatedPolygons(layers[layer_nr], z, kernel, voxel_emplacer); - Polygons skin = layers[layer_nr]; + Shape skin = layers[layer_nr]; if (layer_nr > 0) { skin = skin.xorPolygons(layers[layer_nr - 1]); @@ -219,14 +220,14 @@ void InterlockingGenerator::addBoundaryCells(const std::vector& layers } } -std::vector InterlockingGenerator::computeUnionedVolumeRegions() const +std::vector InterlockingGenerator::computeUnionedVolumeRegions() const { const size_t max_layer_count = std::max(mesh_a_.layers.size(), mesh_b_.layers.size()) + 1; // introduce ghost layer on top for correct skin computation of topmost layer. - std::vector layer_regions(max_layer_count); + std::vector layer_regions(max_layer_count); for (LayerIndex layer_nr = 0; layer_nr < max_layer_count; layer_nr++) { - Polygons& layer_region = layer_regions[static_cast(layer_nr)]; + Shape& layer_region = layer_regions[static_cast(layer_nr)]; for (Slicer* mesh : { &mesh_a_, &mesh_b_ }) { if (layer_nr >= mesh->layers.size()) @@ -234,7 +235,7 @@ std::vector InterlockingGenerator::computeUnionedVolumeRegions() const break; } const SlicerLayer& layer = mesh->layers[static_cast(layer_nr)]; - layer_region.add(layer.polygons); + layer_region.push_back(layer.polygons_); } layer_region = layer_region.offset(ignored_gap_).offset(-ignored_gap_); // Morphological close to merge meshes into single volume layer_region.applyMatrix(rotation_); @@ -242,9 +243,9 @@ std::vector InterlockingGenerator::computeUnionedVolumeRegions() const return layer_regions; } -std::vector> InterlockingGenerator::generateMicrostructure() const +std::vector> InterlockingGenerator::generateMicrostructure() const { - std::vector> cell_area_per_mesh_per_layer; + std::vector> cell_area_per_mesh_per_layer; cell_area_per_mesh_per_layer.resize(2); cell_area_per_mesh_per_layer[0].resize(2); const coord_t beam_w_sum = beam_width_a_ + beam_width_b_; @@ -255,16 +256,16 @@ std::vector> InterlockingGenerator::generateMicrostructure Point2LL offset(mesh_idx ? middle : 0, 0); Point2LL area_size(width[mesh_idx], cell_size_.y_); - PolygonRef poly = cell_area_per_mesh_per_layer[0][mesh_idx].newPoly(); + Polygon& poly = cell_area_per_mesh_per_layer[0][mesh_idx].newLine(); poly.emplace_back(offset); poly.emplace_back(offset + Point2LL(area_size.X, 0)); poly.emplace_back(offset + area_size); poly.emplace_back(offset + Point2LL(0, area_size.Y)); } cell_area_per_mesh_per_layer[1] = cell_area_per_mesh_per_layer[0]; - for (Polygons& polys : cell_area_per_mesh_per_layer[1]) + for (Shape& polys : cell_area_per_mesh_per_layer[1]) { - for (PolygonRef poly : polys) + for (Polygon& poly : polys) { for (Point2LL& p : poly) { @@ -275,14 +276,14 @@ std::vector> InterlockingGenerator::generateMicrostructure return cell_area_per_mesh_per_layer; } -void InterlockingGenerator::applyMicrostructureToOutlines(const std::unordered_set& cells, const std::vector& layer_regions) const +void InterlockingGenerator::applyMicrostructureToOutlines(const std::unordered_set& cells, const std::vector& layer_regions) const { - std::vector> cell_area_per_mesh_per_layer = generateMicrostructure(); + std::vector> cell_area_per_mesh_per_layer = generateMicrostructure(); const PointMatrix unapply_rotation = rotation_.inverse(); const size_t max_layer_count = std::max(mesh_a_.layers.size(), mesh_b_.layers.size()); - std::vector structure_per_layer[2]; // for each mesh the structure on each layer + std::vector structure_per_layer[2]; // for each mesh the structure on each layer // Every `beam_layer_count` number of layers are combined to an interlocking beam layer // to store these we need ceil(max_layer_count / beam_layer_count) of these layers @@ -299,9 +300,9 @@ void InterlockingGenerator::applyMicrostructureToOutlines(const std::unordered_s { for (LayerIndex layer_nr = bottom_corner.z_; layer_nr < bottom_corner.z_ + cell_size_.z_ && layer_nr < max_layer_count; layer_nr += beam_layer_count_) { - Polygons areas_here = cell_area_per_mesh_per_layer[static_cast(layer_nr / beam_layer_count_) % cell_area_per_mesh_per_layer.size()][mesh_idx]; + Shape areas_here = cell_area_per_mesh_per_layer[static_cast(layer_nr / beam_layer_count_) % cell_area_per_mesh_per_layer.size()][mesh_idx]; areas_here.translate(Point2LL(bottom_corner.x_, bottom_corner.y_)); - structure_per_layer[mesh_idx][static_cast(layer_nr / beam_layer_count_)].add(areas_here); + structure_per_layer[mesh_idx][static_cast(layer_nr / beam_layer_count_)].push_back(areas_here); } } } @@ -310,7 +311,7 @@ void InterlockingGenerator::applyMicrostructureToOutlines(const std::unordered_s { for (size_t layer_nr = 0; layer_nr < structure_per_layer[mesh_idx].size(); layer_nr++) { - Polygons& layer_structure = structure_per_layer[mesh_idx][layer_nr]; + Shape& layer_structure = structure_per_layer[mesh_idx][layer_nr]; layer_structure = layer_structure.unionPolygons(); layer_structure.applyMatrix(unapply_rotation); } @@ -326,16 +327,16 @@ void InterlockingGenerator::applyMicrostructureToOutlines(const std::unordered_s break; } - Polygons layer_outlines = layer_regions[layer_nr]; + Shape layer_outlines = layer_regions[layer_nr]; layer_outlines.applyMatrix(unapply_rotation); - const Polygons areas_here = structure_per_layer[mesh_idx][layer_nr / static_cast(beam_layer_count_)].intersection(layer_outlines); - const Polygons& areas_other = structure_per_layer[! mesh_idx][layer_nr / static_cast(beam_layer_count_)]; + const Shape areas_here = structure_per_layer[mesh_idx][layer_nr / static_cast(beam_layer_count_)].intersection(layer_outlines); + const Shape& areas_other = structure_per_layer[! mesh_idx][layer_nr / static_cast(beam_layer_count_)]; SlicerLayer& layer = mesh->layers[layer_nr]; - layer.polygons = layer.polygons - .difference(areas_other) // reduce layer areas inward with beams from other mesh - .unionPolygons(areas_here); // extend layer areas outward with newly added beams + layer.polygons_ = layer.polygons_ + .difference(areas_other) // reduce layer areas inward with beams from other mesh + .unionPolygons(areas_here); // extend layer areas outward with newly added beams } } } diff --git a/src/LayerPlan.cpp b/src/LayerPlan.cpp index 4f498caffd..ee0b331396 100644 --- a/src/LayerPlan.cpp +++ b/src/LayerPlan.cpp @@ -18,6 +18,7 @@ #include "Slice.h" #include "WipeScriptConfig.h" #include "communication/Communication.h" +#include "geometry/OpenPolyline.h" #include "pathPlanning/Comb.h" #include "pathPlanning/CombPaths.h" #include "plugins/slots.h" @@ -26,6 +27,7 @@ #include "sliceDataStorage.h" #include "utils/Simplify.h" #include "utils/linearAlg2D.h" +#include "utils/math.h" #include "utils/polygonUtils.h" #include "utils/section_type.h" @@ -66,7 +68,7 @@ GCodePath* LayerPlan::getLatestPathWithConfig( return ret; } -const Polygons* LayerPlan::getCombBoundaryInside() const +const Shape* LayerPlan::getCombBoundaryInside() const { return &comb_boundary_preferred_; } @@ -151,24 +153,24 @@ ExtruderTrain* LayerPlan::getLastPlannedExtruderTrain() return last_planned_extruder_; } -Polygons LayerPlan::computeCombBoundary(const CombBoundary boundary_type) +Shape LayerPlan::computeCombBoundary(const CombBoundary boundary_type) { - Polygons comb_boundary; + Shape comb_boundary; const CombingMode mesh_combing_mode = Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("retraction_combing"); if (mesh_combing_mode != CombingMode::OFF && (layer_nr_ >= 0 || mesh_combing_mode != CombingMode::NO_SKIN)) { switch (layer_type_) { case Raft::LayerType::RaftBase: - comb_boundary = storage_.raftBaseOutline.offset(MM2INT(0.1)); + comb_boundary = storage_.raft_base_outline.offset(MM2INT(0.1)); break; case Raft::LayerType::RaftInterface: - comb_boundary = storage_.raftInterfaceOutline.offset(MM2INT(0.1)); + comb_boundary = storage_.raft_interface_outline.offset(MM2INT(0.1)); break; case Raft::LayerType::RaftSurface: - comb_boundary = storage_.raftSurfaceOutline.offset(MM2INT(0.1)); + comb_boundary = storage_.raft_surface_outline.offset(MM2INT(0.1)); break; case Raft::LayerType::Airgap: @@ -205,28 +207,28 @@ Polygons LayerPlan::computeCombBoundary(const CombBoundary boundary_type) { if (combing_mode == CombingMode::ALL) // Add the increased outline offset (skin, infill and part of the inner walls) { - comb_boundary.add(part.outline.offset(offset)); + comb_boundary.push_back(part.outline.offset(offset)); } else if (combing_mode == CombingMode::NO_SKIN) // Add the increased outline offset, subtract skin (infill and part of the inner walls) { - comb_boundary.add(part.outline.offset(offset).difference(part.inner_area.difference(part.infill_area))); + comb_boundary.push_back(part.outline.offset(offset).difference(part.inner_area.difference(part.infill_area))); } else if (combing_mode == CombingMode::NO_OUTER_SURFACES) { - Polygons top_and_bottom_most_fill; + Shape top_and_bottom_most_fill; for (const SliceLayerPart& outer_surface_part : layer.parts) { for (const SkinPart& skin_part : outer_surface_part.skin_parts) { - top_and_bottom_most_fill.add(skin_part.top_most_surface_fill); - top_and_bottom_most_fill.add(skin_part.bottom_most_surface_fill); + top_and_bottom_most_fill.push_back(skin_part.top_most_surface_fill); + top_and_bottom_most_fill.push_back(skin_part.bottom_most_surface_fill); } } - comb_boundary.add(part.outline.offset(offset).difference(top_and_bottom_most_fill)); + comb_boundary.push_back(part.outline.offset(offset).difference(top_and_bottom_most_fill)); } else if (combing_mode == CombingMode::INFILL) // Add the infill (infill only) { - comb_boundary.add(part.infill_area); + comb_boundary.push_back(part.infill_area); } } } @@ -263,7 +265,8 @@ bool LayerPlan::setExtruder(const size_t extruder_nr) } if (end_pos_absolute || last_planned_position_) { - addTravel(end_pos); // + extruder_offset cause it + GCodePath& path = addTravel(end_pos); // + extruder_offset cause it + path.retract_for_nozzle_switch = true; } } if (extruder_plans_.back().paths_.empty() && extruder_plans_.back().inserts_.empty()) @@ -308,7 +311,7 @@ void LayerPlan::setMesh(const std::shared_ptr& mesh) current_mesh_ = mesh; } -void LayerPlan::moveInsideCombBoundary(const coord_t distance, const std::optional& part) +void LayerPlan::moveInsideCombBoundary(const coord_t distance, const std::optional& part, GCodePath* path) { constexpr coord_t max_dist2 = MM2INT(2.0) * MM2INT(2.0); // if we are further than this distance, we conclude we are not inside even though we thought we were. // this function is to be used to move from the boundary of a part to inside the part @@ -319,19 +322,19 @@ void LayerPlan::moveInsideCombBoundary(const coord_t distance, const std::option PolygonUtils::moveInside(comb_boundary_preferred_, p, distance, max_dist2); if (comb_boundary_preferred_.inside(p) && (part == std::nullopt || part->outline.inside(p))) { - addTravel_simple(p); + addTravel_simple(p, path); // Make sure the that any retraction happens after this move, not before it by starting a new move path. forceNewPathStart(); } } } -bool LayerPlan::getPrimeTowerIsPlanned(unsigned int extruder_nr) const +bool LayerPlan::getPrimeTowerIsPlanned(size_t extruder_nr) const { return has_prime_tower_planned_per_extruder_[extruder_nr]; } -void LayerPlan::setPrimeTowerIsPlanned(unsigned int extruder_nr) +void LayerPlan::setPrimeTowerIsPlanned(size_t extruder_nr) { has_prime_tower_planned_per_extruder_[extruder_nr] = true; } @@ -485,7 +488,7 @@ GCodePath& LayerPlan::addTravel(const Point2LL& p, const bool force_retract, con { innermost_wall_line_width *= mesh_or_extruder_settings.get("initial_layer_line_width_factor"); } - moveInsideCombBoundary(innermost_wall_line_width); + moveInsideCombBoundary(innermost_wall_line_width, std::nullopt, path); } path->retract = retraction_enable; path->perform_z_hop = retraction_enable && mesh_or_extruder_settings.get("retraction_hop_enabled"); @@ -547,7 +550,7 @@ void LayerPlan::addExtrusionMove( } void LayerPlan::addPolygon( - ConstPolygonRef polygon, + const Polygon& polygon, int start_idx, const bool backwards, const GCodePathConfig& config, @@ -602,7 +605,7 @@ void LayerPlan::addPolygon( } void LayerPlan::addPolygonsByOptimizer( - const Polygons& polygons, + const Shape& polygons, const GCodePathConfig& config, const ZSeamConfig& z_seam_config, coord_t wall_0_wipe_dist, @@ -616,16 +619,16 @@ void LayerPlan::addPolygonsByOptimizer( { return; } - PathOrderOptimizer orderOptimizer(start_near_location ? start_near_location.value() : getLastPlannedPositionOrStartingPosition(), z_seam_config); + PathOrderOptimizer orderOptimizer(start_near_location ? start_near_location.value() : getLastPlannedPositionOrStartingPosition(), z_seam_config); for (size_t poly_idx = 0; poly_idx < polygons.size(); poly_idx++) { - orderOptimizer.addPolygon(polygons[poly_idx]); + orderOptimizer.addPolygon(&polygons[poly_idx]); } orderOptimizer.optimize(); if (! reverse_order) { - for (const PathOrdering& path : orderOptimizer.paths_) + for (const PathOrdering& path : orderOptimizer.paths_) { addPolygon(*path.vertices_, path.start_vertex_, path.backwards_, config, wall_0_wipe_dist, spiralize, flow_ratio, always_retract); } @@ -634,19 +637,22 @@ void LayerPlan::addPolygonsByOptimizer( { for (int index = orderOptimizer.paths_.size() - 1; index >= 0; --index) { - const PathOrdering& path = orderOptimizer.paths_[index]; - addPolygon(**path.vertices_, path.start_vertex_, path.backwards_, config, wall_0_wipe_dist, spiralize, flow_ratio, always_retract); + const PathOrdering& path = orderOptimizer.paths_[index]; + addPolygon(*path.vertices_, path.start_vertex_, path.backwards_, config, wall_0_wipe_dist, spiralize, flow_ratio, always_retract); } } } static constexpr double max_non_bridge_line_volume = MM2INT(100); // limit to accumulated "volume" of non-bridge lines which is proportional to distance x extrusion rate +static int i = 0; + void LayerPlan::addWallLine( const Point2LL& p0, const Point2LL& p1, const Settings& settings, - const GCodePathConfig& non_bridge_config, + const GCodePathConfig& default_config, + const GCodePathConfig& roofing_config, const GCodePathConfig& bridge_config, double flow, const Ratio width_factor, @@ -692,7 +698,7 @@ void LayerPlan::addWallLine( // speed_flow_factor approximates how the extrusion rate alters between the non-bridge wall line and the following bridge wall line // if the extrusion rates are the same, its value will be 1, if the bridge config extrusion rate is < the non-bridge config extrusion rate, the value is < 1 - const Ratio speed_flow_factor((bridge_config.getSpeed() * bridge_config.getFlowRatio()) / (non_bridge_config.getSpeed() * non_bridge_config.getFlowRatio())); + const Ratio speed_flow_factor((bridge_config.getSpeed() * bridge_config.getFlowRatio()) / (default_config.getSpeed() * default_config.getFlowRatio())); // coast distance is proportional to distance, speed and flow of non-bridge segments just printed and is throttled by speed_flow_factor const double coast_dist = std::min(non_bridge_line_volume, max_non_bridge_line_volume) * (1 - speed_flow_factor) * bridge_wall_coast / 40; @@ -711,7 +717,7 @@ void LayerPlan::addWallLine( // segment is longer than coast distance so extrude using non-bridge config to start of coast addExtrusionMove( segment_end + coast_dist * (cur_point - segment_end) / len, - non_bridge_config, + default_config, SpaceFillType::Polygons, segment_flow, width_factor, @@ -720,14 +726,14 @@ void LayerPlan::addWallLine( } // then coast to start of bridge segment constexpr Ratio no_flow = 0.0_r; // Coasting has no flow rate. - addExtrusionMove(segment_end, non_bridge_config, SpaceFillType::Polygons, no_flow, width_factor, spiralize, speed_factor); + addExtrusionMove(segment_end, default_config, SpaceFillType::Polygons, no_flow, width_factor, spiralize, speed_factor); } else { // no coasting required, just normal segment using non-bridge config addExtrusionMove( segment_end, - non_bridge_config, + default_config, SpaceFillType::Polygons, segment_flow, width_factor, @@ -742,14 +748,14 @@ void LayerPlan::addWallLine( // no coasting required, just normal segment using non-bridge config addExtrusionMove( segment_end, - non_bridge_config, + default_config, SpaceFillType::Polygons, segment_flow, width_factor, spiralize, (overhang_mask_.empty() || (! overhang_mask_.inside(p0, true) && ! overhang_mask_.inside(p1, true))) ? speed_factor : overhang_speed_factor); } - non_bridge_line_volume += vSize(cur_point - segment_end) * segment_flow * width_factor * speed_factor * non_bridge_config.getSpeed(); + non_bridge_line_volume += vSize(cur_point - segment_end) * segment_flow * width_factor * speed_factor * default_config.getSpeed(); cur_point = segment_end; speed_factor = 1 - (1 - speed_factor) * acceleration_factor; if (speed_factor >= 0.9) @@ -760,12 +766,83 @@ void LayerPlan::addWallLine( } }; - if (bridge_wall_mask_.empty()) + const auto use_roofing_config = [&]() -> bool + { + if (roofing_config == default_config) + { + // if the roofing config and normal config are the same any way there is no need to check + // what part of the line segment will be printed with what config. + return false; + } + return PolygonUtils::polygonCollidesWithLineSegment(roofing_mask_, p0, p1) || roofing_mask_.inside(p1, true); + }(); + + if (use_roofing_config) + { + // The line segment is wholly or partially in the roofing area. The line is intersected + // with the roofing area into line segments. Each line segment left in this intersection + // will be printed using the roofing config, all removed segments will be printed using + // the default_config. Since the original line segment was straight we can simply print + // to the first and last point of the intersected line segments alternating between + // roofing and default_config's. + OpenLinesSet line_polys; + line_polys.addSegment(p0, p1); + constexpr bool restitch = false; // only a single line doesn't need stitching + auto roofing_line_segments = roofing_mask_.intersection(line_polys, restitch); + + if (roofing_line_segments.empty()) + { + // roofing_line_segments should never be empty since we already checked that the line segment + // intersects with the roofing area. But if it is empty then just print the line segment + // using the default_config. + addExtrusionMove(p1, default_config, SpaceFillType::Polygons, flow, width_factor, spiralize, 1.0_r); + } + else + { + // reorder all the line segments so all lines start at p0 and end at p1 + for (auto& line_poly : roofing_line_segments) + { + const Point2LL& line_p0 = line_poly.front(); + const Point2LL& line_p1 = line_poly.back(); + if (vSize2(line_p1 - p0) < vSize2(line_p0 - p0)) + { + std::reverse(line_poly.begin(), line_poly.end()); + } + } + std::sort( + roofing_line_segments.begin(), + roofing_line_segments.end(), + [&](auto& a, auto& b) + { + return vSize2(a.front() - p0) < vSize2(b.front() - p0); + }); + + // add intersected line segments, alternating between roofing and default_config + for (const auto& line_poly : roofing_line_segments) + { + // This is only relevant for the very fist iteration of the loop + // if the start of the line segment is not at minimum distance from p0 + if (vSize2(line_poly.front() - p0) > min_line_len * min_line_len) + { + addExtrusionMove(line_poly.front(), default_config, SpaceFillType::Polygons, flow, width_factor, spiralize, 1.0_r); + } + + addExtrusionMove(line_poly.back(), roofing_config, SpaceFillType::Polygons, flow, width_factor, spiralize, 1.0_r); + } + + // if the last point is not yet at a minimum distance from p1 then add a move to p1 + if (vSize2(roofing_line_segments.back().back() - p1) > min_line_len * min_line_len) + { + addExtrusionMove(p1, default_config, SpaceFillType::Polygons, flow, width_factor, spiralize, 1.0_r); + } + } + } + else if (bridge_wall_mask_.empty()) { // no bridges required addExtrusionMove( p1, - non_bridge_config, + default_config, SpaceFillType::Polygons, flow, width_factor, @@ -781,19 +858,19 @@ void LayerPlan::addWallLine( // determine which segments of the line are bridges - Polygons line_polys; - line_polys.addLine(p0, p1); + OpenLinesSet line_polys; + line_polys.addSegment(p0, p1); constexpr bool restitch = false; // only a single line doesn't need stitching - line_polys = bridge_wall_mask_.intersectionPolyLines(line_polys, restitch); + line_polys = bridge_wall_mask_.intersection(line_polys, restitch); // line_polys now contains the wall lines that need to be printed using bridge_config while (line_polys.size() > 0) { // find the bridge line segment that's nearest to the current point - int nearest = 0; + size_t nearest = 0; double smallest_dist2 = vSize2f(cur_point - line_polys[0][0]); - for (unsigned i = 1; i < line_polys.size(); ++i) + for (size_t i = 1; i < line_polys.size(); ++i) { double dist2 = vSize2f(cur_point - line_polys[i][0]); if (dist2 < smallest_dist2) @@ -802,7 +879,7 @@ void LayerPlan::addWallLine( smallest_dist2 = dist2; } } - ConstPolygonRef bridge = line_polys[nearest]; + const OpenPolyline& bridge = line_polys[nearest]; // set b0 to the nearest vertex and b1 the furthest Point2LL b0 = bridge[0]; @@ -815,7 +892,7 @@ void LayerPlan::addWallLine( b1 = bridge[0]; } - // extrude using non_bridge_config to the start of the next bridge segment + // extrude using default_config to the start of the next bridge segment addNonBridgeLine(b0); @@ -831,7 +908,7 @@ void LayerPlan::addWallLine( non_bridge_line_volume = 0; cur_point = b1; // after a bridge segment, start slow and accelerate to avoid under-extrusion due to extruder lag - speed_factor = std::max(std::min(Ratio(bridge_config.getSpeed() / non_bridge_config.getSpeed()), 1.0_r), 0.5_r); + speed_factor = std::max(std::min(Ratio(bridge_config.getSpeed() / default_config.getSpeed()), 1.0_r), 0.5_r); } } else @@ -842,10 +919,10 @@ void LayerPlan::addWallLine( } // finished with this segment - line_polys.remove(nearest); + line_polys.removeAt(nearest); } - // if we haven't yet reached p1, fill the gap with non_bridge_config line + // if we haven't yet reached p1, fill the gap with default_config line addNonBridgeLine(p1); } else if (bridge_wall_mask_.inside(p0, true) && vSize(p0 - p1) >= min_bridge_line_len) @@ -863,10 +940,11 @@ void LayerPlan::addWallLine( } void LayerPlan::addWall( - ConstPolygonRef wall, + const Polygon& wall, int start_idx, const Settings& settings, - const GCodePathConfig& non_bridge_config, + const GCodePathConfig& default_config, + const GCodePathConfig& roofing_config, const GCodePathConfig& bridge_config, coord_t wall_0_wipe_dist, double flow_ratio, @@ -880,7 +958,7 @@ void LayerPlan::addWall( constexpr size_t dummy_perimeter_id = 0; // <-- Here, don't care about which perimeter any more. const coord_t nominal_line_width - = non_bridge_config + = default_config .getLineWidth(); // <-- The line width which it's 'supposed to' be will be used to adjust the flow ratio each time, this'll give a flow-ratio-multiplier of 1. ExtrusionLine ewall; @@ -895,14 +973,15 @@ void LayerPlan::addWall( constexpr bool is_closed = true; constexpr bool is_reversed = false; constexpr bool is_linked_path = false; - addWall(ewall, start_idx, settings, non_bridge_config, bridge_config, wall_0_wipe_dist, flow_ratio, always_retract, is_closed, is_reversed, is_linked_path); + addWall(ewall, start_idx, settings, default_config, roofing_config, bridge_config, wall_0_wipe_dist, flow_ratio, always_retract, is_closed, is_reversed, is_linked_path); } void LayerPlan::addWall( const ExtrusionLine& wall, int start_idx, const Settings& settings, - const GCodePathConfig& non_bridge_config, + const GCodePathConfig& default_config, + const GCodePathConfig& roofing_config, const GCodePathConfig& bridge_config, coord_t wall_0_wipe_dist, double flow_ratio, @@ -928,7 +1007,7 @@ void LayerPlan::addWall( const coord_t min_bridge_line_len = settings.get("bridge_wall_min_length"); const Ratio nominal_line_width_multiplier{ - 1.0 / Ratio{ static_cast(non_bridge_config.getLineWidth()) } + 1.0 / Ratio{ static_cast(default_config.getLineWidth()) } }; // we multiply the flow with the actual wanted line width (for that junction), and then multiply with this // helper function to calculate the distance from the start of the current wall line to the first bridge segment @@ -951,15 +1030,15 @@ void LayerPlan::addWall( // determine which segments of the line are bridges - Polygons line_polys; - line_polys.addLine(p0.p_, p1.p_); + OpenLinesSet line_polys; + line_polys.addSegment(p0.p_, p1.p_); constexpr bool restitch = false; // only a single line doesn't need stitching - line_polys = bridge_wall_mask_.intersectionPolyLines(line_polys, restitch); + line_polys = bridge_wall_mask_.intersection(line_polys, restitch); while (line_polys.size() > 0) { // find the bridge line segment that's nearest to p0 - int nearest = 0; + size_t nearest = 0; double smallest_dist2 = vSize2f(p0.p_ - line_polys[0][0]); for (unsigned i = 1; i < line_polys.size(); ++i) { @@ -970,7 +1049,7 @@ void LayerPlan::addWall( smallest_dist2 = dist2; } } - ConstPolygonRef bridge = line_polys[nearest]; + const OpenPolyline& bridge = line_polys[nearest]; // set b0 to the nearest vertex and b1 the furthest Point2LL b0 = bridge[0]; @@ -996,7 +1075,7 @@ void LayerPlan::addWall( distance_to_bridge_start += bridge_line_len; // finished with this segment - line_polys.remove(nearest); + line_polys.removeAt(nearest); } } else if (! bridge_wall_mask_.inside(p0.p_, true)) @@ -1014,10 +1093,10 @@ void LayerPlan::addWall( bool first_line = true; const coord_t small_feature_max_length = settings.get("small_feature_max_length"); - const bool is_small_feature = (small_feature_max_length > 0) && (layer_nr_ == 0 || wall.inset_idx_ == 0) && cura::shorterThan(wall, small_feature_max_length); + const bool is_small_feature = (small_feature_max_length > 0) && (layer_nr_ == 0 || wall.inset_idx_ == 0) && wall.shorterThan(small_feature_max_length); Ratio small_feature_speed_factor = settings.get((layer_nr_ == 0) ? "small_feature_speed_factor_0" : "small_feature_speed_factor"); const Velocity min_speed = fan_speed_layer_time_settings_per_extruder_[getLastPlannedExtruderTrain()->extruder_nr_].cool_min_speed; - small_feature_speed_factor = std::max((double)small_feature_speed_factor, (double)(min_speed / non_bridge_config.getSpeed())); + small_feature_speed_factor = std::max((double)small_feature_speed_factor, (double)(min_speed / default_config.getSpeed())); const coord_t max_area_deviation = std::max(settings.get("meshfix_maximum_extrusion_area_deviation"), 1); // Square micrometres! const coord_t max_resolution = std::max(settings.get("meshfix_maximum_resolution"), coord_t(1)); @@ -1072,14 +1151,16 @@ void LayerPlan::addWall( for (size_t piece = 0; piece < pieces; ++piece) { const double average_progress = (double(piece) + 0.5) / pieces; // How far along this line to sample the line width in the middle of this piece. - const coord_t line_width = p0.w_ + average_progress * delta_line_width; + // Round the line_width value to overcome floating point rounding issues, otherwise we may end up with slightly different values + // and the generated GCodePath objects will not be merged together, which some subsequent algorithms rely on (e.g. coasting) + const coord_t line_width = std::lrint(static_cast(p0.w_) + average_progress * static_cast(delta_line_width)); const Point2LL destination = p0.p_ + normal(line_vector, piece_length * (piece + 1)); if (is_small_feature) { constexpr bool spiralize = false; addExtrusionMove( destination, - non_bridge_config, + default_config, SpaceFillType::Polygons, flow_ratio, line_width * nominal_line_width_multiplier, @@ -1093,7 +1174,8 @@ void LayerPlan::addWall( origin, destination, settings, - non_bridge_config, + default_config, + roofing_config, bridge_config, flow_ratio, line_width * nominal_line_width_multiplier, @@ -1165,9 +1247,10 @@ void LayerPlan::addInfillWall(const ExtrusionLine& wall, const GCodePathConfig& } void LayerPlan::addWalls( - const Polygons& walls, + const Shape& walls, const Settings& settings, - const GCodePathConfig& non_bridge_config, + const GCodePathConfig& default_config, + const GCodePathConfig& roofing_config, const GCodePathConfig& bridge_config, const ZSeamConfig& z_seam_config, coord_t wall_0_wipe_dist, @@ -1175,21 +1258,21 @@ void LayerPlan::addWalls( bool always_retract) { // TODO: Deprecated in favor of ExtrusionJunction version below. - PathOrderOptimizer orderOptimizer(getLastPlannedPositionOrStartingPosition(), z_seam_config); - for (size_t poly_idx = 0; poly_idx < walls.size(); poly_idx++) + PathOrderOptimizer orderOptimizer(getLastPlannedPositionOrStartingPosition(), z_seam_config); + for (const Polygon& polygon : walls) { - orderOptimizer.addPolygon(walls[poly_idx]); + orderOptimizer.addPolygon(&polygon); } orderOptimizer.optimize(); - for (const PathOrdering& path : orderOptimizer.paths_) + for (const PathOrdering& path : orderOptimizer.paths_) { - addWall(**path.vertices_, path.start_vertex_, settings, non_bridge_config, bridge_config, wall_0_wipe_dist, flow_ratio, always_retract); + addWall(*path.vertices_, path.start_vertex_, settings, default_config, roofing_config, bridge_config, wall_0_wipe_dist, flow_ratio, always_retract); } } - +template void LayerPlan::addLinesByOptimizer( - const Polygons& polygons, + const LinesSet& lines, const GCodePathConfig& config, const SpaceFillType space_fill_type, const bool enable_travel_optimization, @@ -1198,9 +1281,9 @@ void LayerPlan::addLinesByOptimizer( const std::optional near_start_location, const double fan_speed, const bool reverse_print_direction, - const std::unordered_multimap& order_requirements) + const std::unordered_multimap& order_requirements) { - Polygons boundary; + Shape boundary; if (enable_travel_optimization && ! comb_boundary_minimum_.empty()) { // use the combing boundary inflated so that all infill lines are inside the boundary @@ -1218,30 +1301,98 @@ void LayerPlan::addLinesByOptimizer( } dist += 100; // ensure boundary is slightly outside all skin/infill lines } - boundary.add(comb_boundary_minimum_.offset(dist)); + boundary.push_back(comb_boundary_minimum_.offset(dist)); // simplify boundary to cut down processing time boundary = Simplify(MM2INT(0.1), MM2INT(0.1), 0).polygon(boundary); } constexpr bool detect_loops = true; - PathOrderOptimizer order_optimizer( + PathOrderOptimizer order_optimizer( near_start_location.value_or(getLastPlannedPositionOrStartingPosition()), ZSeamConfig(), detect_loops, &boundary, reverse_print_direction, order_requirements); - for (size_t line_idx = 0; line_idx < polygons.size(); line_idx++) + if constexpr (std::is_same::value) { - order_optimizer.addPolyline(polygons[line_idx]); + for (const OpenPolyline& polyline : lines) + { + order_optimizer.addPolyline(&polyline); + } + } + if constexpr (std::is_same::value) + { + for (const ClosedPolyline& polyline : lines) + { + order_optimizer.addPolygon(&polyline); + } } order_optimizer.optimize(); addLinesInGivenOrder(order_optimizer.paths_, config, space_fill_type, wipe_dist, flow_ratio, fan_speed); } +void LayerPlan::addLinesByOptimizer( + const MixedLinesSet& lines, + const GCodePathConfig& config, + const SpaceFillType space_fill_type, + const bool enable_travel_optimization, + const coord_t wipe_dist, + const Ratio flow_ratio, + const std::optional near_start_location, + const double fan_speed, + const bool reverse_print_direction, + const std::unordered_multimap& order_requirements) +{ + Shape boundary; + if (enable_travel_optimization && ! comb_boundary_minimum_.empty()) + { + // use the combing boundary inflated so that all infill lines are inside the boundary + int dist = 0; + if (layer_nr_ >= 0) + { + // determine how much the skin/infill lines overlap the combing boundary + for (const std::shared_ptr& mesh : storage_.meshes) + { + const coord_t overlap = std::max(mesh->settings.get("skin_overlap_mm"), mesh->settings.get("infill_overlap_mm")); + if (overlap > dist) + { + dist = overlap; + } + } + dist += 100; // ensure boundary is slightly outside all skin/infill lines + } + boundary.push_back(comb_boundary_minimum_.offset(dist)); + // simplify boundary to cut down processing time + boundary = Simplify(MM2INT(0.1), MM2INT(0.1), 0).polygon(boundary); + } + constexpr bool detect_loops = false; // We already know which lines are closed + PathOrderOptimizer order_optimizer( + near_start_location.value_or(getLastPlannedPositionOrStartingPosition()), + ZSeamConfig(), + detect_loops, + &boundary, + reverse_print_direction, + order_requirements); + for (const std::shared_ptr& line : lines) + { + if (const std::shared_ptr open_line = dynamic_pointer_cast(line)) + { + order_optimizer.addPolyline(open_line.get()); + } + else if (const std::shared_ptr closed_line = dynamic_pointer_cast(line)) + { + order_optimizer.addPolygon(closed_line.get()); + } + } + + order_optimizer.optimize(); + + addLinesInGivenOrder(order_optimizer.paths_, config, space_fill_type, wipe_dist, flow_ratio, fan_speed); +} void LayerPlan::addLinesInGivenOrder( - const std::vector>& paths, + const std::vector>& lines, const GCodePathConfig& config, const SpaceFillType space_fill_type, const coord_t wipe_dist, @@ -1250,10 +1401,14 @@ void LayerPlan::addLinesInGivenOrder( { coord_t half_line_width = config.getLineWidth() / 2; coord_t line_width_2 = half_line_width * half_line_width; - for (size_t order_idx = 0; order_idx < paths.size(); order_idx++) + for (size_t order_idx = 0; order_idx < lines.size(); order_idx++) { - const PathOrdering& path = paths[order_idx]; - ConstPolygonRef polyline = *path.vertices_; + const PathOrdering& path = lines[order_idx]; + const Polyline& polyline = *path.vertices_; + if (! polyline.isValid()) + { + continue; + } const size_t start_idx = path.start_vertex_; assert(start_idx == 0 || start_idx == polyline.size() - 1 || path.is_closed_); const Point2LL start = polyline[start_idx]; @@ -1313,16 +1468,16 @@ void LayerPlan::addLinesInGivenOrder( int line_width = config.getLineWidth(); // Don't wipe if current extrusion is too small - if (polyline.polylineLength() <= line_width * 2) + if (polyline.length() <= line_width * 2) { wipe = false; } // Don't wipe if next starting point is very near - if (wipe && (order_idx < paths.size() - 1)) + if (wipe && (order_idx < lines.size() - 1)) { - const PathOrdering& next_path = paths[order_idx + 1]; - ConstPolygonRef next_polygon = *next_path.vertices_; + const PathOrdering& next_path = lines[order_idx + 1]; + const Polyline& next_polygon = *next_path.vertices_; const size_t next_start = next_path.start_vertex_; const Point2LL& next_p0 = next_polygon[next_start]; if (vSize2(next_p0 - p1) <= line_width * line_width * 4) @@ -1344,8 +1499,8 @@ void LayerPlan::addLinesInGivenOrder( } void LayerPlan::addLinesMonotonic( - const Polygons& area, - const Polygons& polygons, + const Shape& area, + const OpenLinesSet& lines, const GCodePathConfig& config, const SpaceFillType space_fill_type, const AngleRadians monotonic_direction, @@ -1355,39 +1510,44 @@ void LayerPlan::addLinesMonotonic( const Ratio flow_ratio, const double fan_speed) { - const Polygons exclude_areas = area.tubeShape(exclude_distance, exclude_distance); + const Shape exclude_areas = area.createTubeShape(exclude_distance, exclude_distance); const coord_t exclude_dist2 = exclude_distance * exclude_distance; const Point2LL last_position = getLastPlannedPositionOrStartingPosition(); // First lay all adjacent lines next to each other, to have a sensible input to the monotonic part of the algorithm. - PathOrderOptimizer line_order(last_position); - for (const ConstPolygonRef polyline : polygons) + PathOrderOptimizer line_order(last_position); + for (const OpenPolyline& line : lines) { - line_order.addPolyline(polyline); + line_order.addPolyline(&line); } line_order.optimize(); - const auto is_inside_exclusion = [&exclude_areas, &exclude_dist2](ConstPolygonRef path) + const auto is_inside_exclusion = [&exclude_areas, &exclude_dist2](const OpenPolyline& path) { return vSize2(path[1] - path[0]) < exclude_dist2 && exclude_areas.inside((path[0] + path[1]) / 2); }; // Order monotonically, except for line-segments which stay in the excluded areas (read: close to the walls) consecutively. - PathOrderMonotonic order(monotonic_direction, max_adjacent_distance, last_position); - Polygons left_over; + PathOrderMonotonic order(monotonic_direction, max_adjacent_distance, last_position); + OpenLinesSet left_over; bool last_would_have_been_excluded = false; for (size_t line_idx = 0; line_idx < line_order.paths_.size(); ++line_idx) { - const ConstPolygonRef polyline = *line_order.paths_[line_idx].vertices_; + const OpenPolyline& polyline = *line_order.paths_[line_idx].vertices_; + if (! polyline.isValid()) + { + continue; + } + const bool inside_exclusion = is_inside_exclusion(polyline); const bool next_would_have_been_included = inside_exclusion && (line_idx < line_order.paths_.size() - 1 && is_inside_exclusion(*line_order.paths_[line_idx + 1].vertices_)); if (inside_exclusion && last_would_have_been_excluded && next_would_have_been_included) { - left_over.add(polyline); + left_over.push_back(polyline); } else { - order.addPolyline(polyline); + order.addPolyline(&polyline); } last_would_have_been_excluded = inside_exclusion; } @@ -1402,8 +1562,8 @@ void LayerPlan::addLinesMonotonic( void LayerPlan::spiralizeWallSlice( const GCodePathConfig& config, - ConstPolygonRef wall, - ConstPolygonRef last_wall, + const Polygon& wall, + const Polygon& last_wall, const int seam_vertex_idx, const int last_seam_vertex_idx, const bool is_top_layer, @@ -1433,8 +1593,8 @@ void LayerPlan::spiralizeWallSlice( } const int n_points = wall.size(); - Polygons last_wall_polygons; - last_wall_polygons.add(last_wall); + Shape last_wall_polygons; + last_wall_polygons.push_back(last_wall); const int max_dist2 = config.getLineWidth() * config.getLineWidth() * 4; // (2 * lineWidth)^2; double total_length = 0.0; // determine the length of the complete wall @@ -1505,7 +1665,7 @@ void LayerPlan::spiralizeWallSlice( if (smooth_contours && ! is_bottom_layer && wall_point_idx < n_points) { // now find the point on the last wall that is closest to p - ClosestPolygonPoint cpp = PolygonUtils::findClosest(p, last_wall_polygons); + ClosestPointPolygon cpp = PolygonUtils::findClosest(p, last_wall_polygons); // if we found a point and it's not further away than max_dist2, use it if (cpp.isValid() && vSize2(cpp.location_ - p) <= max_dist2) @@ -1552,7 +1712,7 @@ void LayerPlan::spiralizeWallSlice( } } -void ExtruderPlan::forceMinimalLayerTime(double minTime, double time_other_extr_plans) +bool ExtruderPlan::forceMinimalLayerTime(double minTime, double time_other_extr_plans) { const double minimalSpeed = fan_speed_layer_time_settings_.cool_min_speed; const double travelTime = estimates_.getTravelTime(); @@ -1629,7 +1789,10 @@ void ExtruderPlan::forceMinimalLayerTime(double minTime, double time_other_extr_ path.speed_factor *= slow_down_factor; path.estimates.extrude_time /= slow_down_factor; } + + return true; } + return false; } double ExtruderPlan::getRetractTime(const GCodePath& path) @@ -1720,7 +1883,8 @@ TimeMaterialEstimates ExtruderPlan::computeNaiveTimeEstimates(Point2LL starting_ void ExtruderPlan::processFanSpeedForMinimalLayerTime(Duration minTime, double time_other_extr_plans) { - /* + /* interpolate fan speed + min layer time : : min layer time fan speed min @@ -1731,28 +1895,12 @@ void ExtruderPlan::processFanSpeedForMinimalLayerTime(Duration minTime, double t speed min..|... \:___________ |________________ layer time > - - */ - // interpolate fan speed (for cool_fan_full_layer and for cool_min_layer_time_fan_speed_max) - double totalLayerTime = estimates_.getTotalTime() + time_other_extr_plans; - if (totalLayerTime < minTime) - { - fan_speed = fan_speed_layer_time_settings_.cool_fan_speed_max; - } - else if (minTime >= fan_speed_layer_time_settings_.cool_min_layer_time_fan_speed_max) - { - // ignore gradual increase of fan speed - return; - } - else if (totalLayerTime < fan_speed_layer_time_settings_.cool_min_layer_time_fan_speed_max) - { - // when forceMinimalLayerTime didn't change the extrusionSpeedFactor, we adjust the fan speed - double fan_speed_diff = fan_speed_layer_time_settings_.cool_fan_speed_max - fan_speed; - double layer_time_diff = fan_speed_layer_time_settings_.cool_min_layer_time_fan_speed_max - minTime; - double fraction_of_slope = (totalLayerTime - minTime) / layer_time_diff; - fan_speed = fan_speed_layer_time_settings_.cool_fan_speed_max - fan_speed_diff * fraction_of_slope; - } + + const double total_layer_time = estimates_.getTotalTime() + time_other_extr_plans; + const double layer_time_diff = fan_speed_layer_time_settings_.cool_min_layer_time_fan_speed_max - minTime; + const double fraction_of_slope = (layer_time_diff != 0.0) ? std::clamp((total_layer_time - minTime) / layer_time_diff, 0.0, 1.0) : 1.0; + fan_speed = std::lerp(fan_speed_layer_time_settings_.cool_fan_speed_max, fan_speed, fraction_of_slope); } void ExtruderPlan::processFanSpeedForFirstLayers() @@ -1828,7 +1976,7 @@ void LayerPlan::processFanSpeedAndMinimalLayerTime(Point2LL starting_position) // apply minimum layer time behaviour ExtruderPlan& last_extruder_plan = extruder_plans_[last_extruder_idx]; - last_extruder_plan.forceMinimalLayerTime(maximum_cool_min_layer_time, other_extr_plan_time); + min_layer_time_used |= last_extruder_plan.forceMinimalLayerTime(maximum_cool_min_layer_time, other_extr_plan_time); last_extruder_plan.processFanSpeedForMinimalLayerTime(maximum_cool_min_layer_time, other_extr_plan_time); } @@ -1841,6 +1989,10 @@ void LayerPlan::writeGCode(GCodeExport& gcode) gcode.setLayerNr(layer_nr_); gcode.writeLayerComment(layer_nr_); + if (min_layer_time_used) + { + gcode.writeComment("note -- min layer time used"); + } // flow-rate compensation const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; @@ -1854,6 +2006,15 @@ void LayerPlan::writeGCode(GCodeExport& gcode) constexpr bool wait = false; gcode.writeBedTemperatureCommand(mesh_group_settings.get("material_bed_temperature"), wait); } + if (mesh_group_settings.get("build_volume_fan_nr") != 0) + { + // The machine has a build volume fan. + if (layer_nr_ == mesh_group_settings.get("build_fan_full_layer")) + { + gcode.writeSpecificFanCommand(100, mesh_group_settings.get("build_volume_fan_nr")); + } + } + gcode.setZ(z_); @@ -1892,6 +2053,8 @@ void LayerPlan::writeGCode(GCodeExport& gcode) gcode.switchExtruder(extruder_nr, prev_retraction_config.extruder_switch_retraction_config); } + gcode.writePrepareFansForNozzleSwitch(); + { // require printing temperature to be met constexpr bool wait = true; gcode.writeTemperatureCommand(extruder_nr, extruder_plan.required_start_temperature_, wait); @@ -1934,7 +2097,7 @@ void LayerPlan::writeGCode(GCodeExport& gcode) } } } - gcode.writeFanCommand(extruder_plan.getFanSpeed()); + gcode.writePrepareFansForExtrusion(extruder_plan.getFanSpeed()); std::vector& paths = extruder_plan.paths_; extruder_plan.inserts_.sort(); @@ -2041,6 +2204,12 @@ void LayerPlan::writeGCode(GCodeExport& gcode) { retraction_config = path.mesh ? &path.mesh->retraction_wipe_config : retraction_config; gcode.writeRetraction(retraction_config->retraction_config); + if (path.retract_for_nozzle_switch) + { + constexpr bool force = true; + constexpr bool extruder_switch = true; + gcode.writeRetraction(retraction_config->extruder_switch_retraction_config, force, extruder_switch); + } insertTempOnTime(extruder_plan.getRetractTime(path), path_idx); if (path.perform_z_hop) { @@ -2050,6 +2219,10 @@ void LayerPlan::writeGCode(GCodeExport& gcode) else { gcode.writeZhopEnd(); + if (z_ > 0 && path.z_offset != 0) + { + gcode.setZ(z_ + path.z_offset); + } } } const auto& extruder_changed = ! last_extrusion_config.has_value() || (last_extrusion_config.value().type != path.config.type); @@ -2081,6 +2254,13 @@ void LayerPlan::writeGCode(GCodeExport& gcode) ss << "MESH:" << (current_mesh ? current_mesh->mesh_name : "NONMESH"); gcode.writeComment(ss.str()); } + + if (! path.spiralize && (! path.retract || ! path.perform_z_hop) && (z_ + path.z_offset != gcode.getPositionZ()) && (path_idx > 0 || layer_nr_ > 0)) + { + // First move to desired height to then make a plain horizontal move + gcode.writeTravel(Point3LL(gcode.getPosition().x_, gcode.getPosition().y_, z_ + path.z_offset), speed); + } + if (path.config.isTravelPath()) { // early comp for travel paths, which are handled more simply if (! path.perform_z_hop && final_travel_z_ != z_ && extruder_plan_idx == (extruder_plans_.size() - 1) && path_idx == (paths.size() - 1)) @@ -2102,7 +2282,10 @@ void LayerPlan::writeGCode(GCodeExport& gcode) // We need to unretract before the last travel move of the path if the next path is an outer wall. gcode.writeUnretractionAndPrime(); } - gcode.writeTravel(path.points.back(), speed); + if (! path.points.empty()) + { + gcode.writeTravel(path.points.back(), speed); + } continue; } @@ -2479,14 +2662,48 @@ size_t LayerPlan::getExtruder() const return extruder_plans_.back().extruder_nr_; } -void LayerPlan::setBridgeWallMask(const Polygons& polys) +void LayerPlan::setBridgeWallMask(const Shape& polys) { bridge_wall_mask_ = polys; } -void LayerPlan::setOverhangMask(const Polygons& polys) +void LayerPlan::setOverhangMask(const Shape& polys) { overhang_mask_ = polys; } +void LayerPlan::setSeamOverhangMask(const Shape& polys) +{ + seam_overhang_mask_ = polys; +} + +void LayerPlan::setRoofingMask(const Shape& polys) +{ + roofing_mask_ = polys; +} + +template void LayerPlan::addLinesByOptimizer( + const OpenLinesSet& lines, + const GCodePathConfig& config, + const SpaceFillType space_fill_type, + const bool enable_travel_optimization, + const coord_t wipe_dist, + const Ratio flow_ratio, + const std::optional near_start_location, + const double fan_speed, + const bool reverse_print_direction, + const std::unordered_multimap& order_requirements); + +template void LayerPlan::addLinesByOptimizer( + const ClosedLinesSet& lines, + const GCodePathConfig& config, + const SpaceFillType space_fill_type, + const bool enable_travel_optimization, + const coord_t wipe_dist, + const Ratio flow_ratio, + const std::optional near_start_location, + const double fan_speed, + const bool reverse_print_direction, + const std::unordered_multimap& order_requirements); + } // namespace cura diff --git a/src/LayerPlanBuffer.cpp b/src/LayerPlanBuffer.cpp index 7d430b8f01..db64a130a5 100644 --- a/src/LayerPlanBuffer.cpp +++ b/src/LayerPlanBuffer.cpp @@ -535,7 +535,7 @@ void LayerPlanBuffer::insertTempCommands() if (initial_print_temp == 0.0 // user doesn't want to use initial print temp feature || extruder_settings.get("machine_extruders_share_heater") // ignore initial print temps when extruders share a heater - || ! extruder_used_in_meshgroup_[extruder] // prime blob uses print temp rather than initial print temp + || (! extruder_used_in_meshgroup_[extruder] && extruder_settings.get("prime_blob_enable")) // prime blob uses print temp rather than initial print temp || (overall_extruder_plan_idx > 0 && extruder_plans[overall_extruder_plan_idx - 1]->extruder_nr_ == extruder // prev plan has same extruder .. && extruder_plans[overall_extruder_plan_idx - 1]->estimates_.getTotalUnretractedTime() > 0.0) // and prev extruder plan already heated to printing temperature ) diff --git a/src/MeshGroup.cpp b/src/MeshGroup.cpp index f71b2f7bd5..91fae7ae5c 100644 --- a/src/MeshGroup.cpp +++ b/src/MeshGroup.cpp @@ -293,6 +293,8 @@ bool loadMeshIntoMeshGroup(MeshGroup* meshgroup, const char* filename, const Mat spdlog::info("loading '{}' took {:03.3f} seconds", filename, load_timer.restart()); return true; } + spdlog::warn("loading '{}' failed", filename); + return false; } spdlog::warn("Unable to recognize the extension of the file. Currently only .stl and .STL are supported."); return false; diff --git a/src/Mold.cpp b/src/Mold.cpp index c5149467af..48b4fba93c 100644 --- a/src/Mold.cpp +++ b/src/Mold.cpp @@ -3,14 +3,17 @@ #include "Mold.h" +#include + #include "Application.h" //To get settings. #include "ExtruderTrain.h" #include "Scene.h" #include "Slice.h" +#include "geometry/OpenPolyline.h" +#include "geometry/Point2LL.h" #include "settings/types/Ratio.h" #include "sliceDataStorage.h" #include "slicer.h" -#include "utils/Point2LL.h" namespace cura { @@ -46,11 +49,11 @@ void Mold::process(std::vector& slicer_list) } const coord_t layer_height = scene.current_mesh_group->settings.get("layer_height"); - std::vector mold_outline_above_per_mesh; // the outer outlines of the layer above without the original model(s) being cut out + std::vector mold_outline_above_per_mesh; // the outer outlines of the layer above without the original model(s) being cut out mold_outline_above_per_mesh.resize(slicer_list.size()); for (int layer_nr = layer_count - 1; layer_nr >= 0; layer_nr--) { - Polygons all_original_mold_outlines; // outlines of all models for which to generate a mold (insides of all molds) + Shape all_original_mold_outlines; // outlines of all models for which to generate a mold (insides of all molds) // first generate outlines for (unsigned int mesh_idx = 0; mesh_idx < slicer_list.size(); mesh_idx++) @@ -76,29 +79,29 @@ void Mold::process(std::vector& slicer_list) SlicerLayer& layer = slicer.layers[layer_nr]; - Polygons model_outlines = layer.polygons.unionPolygons(layer.openPolylines.offsetPolyLine(open_polyline_width / 2)); - layer.openPolylines.clear(); - all_original_mold_outlines.add(model_outlines); + Shape model_outlines = layer.polygons_.unionPolygons(layer.open_polylines_.offset(open_polyline_width / 2)); + layer.open_polylines_.clear(); + all_original_mold_outlines.push_back(model_outlines); if (angle >= 90) { - layer.polygons = model_outlines.offset(width, ClipperLib::jtRound); + layer.polygons_ = model_outlines.offset(width, ClipperLib::jtRound); } else { - Polygons& mold_outline_above = mold_outline_above_per_mesh[mesh_idx]; // the outside of the mold on the layer above - layer.polygons = mold_outline_above.offset(-inset).unionPolygons(model_outlines.offset(width, ClipperLib::jtRound)); + Shape& mold_outline_above = mold_outline_above_per_mesh[mesh_idx]; // the outside of the mold on the layer above + layer.polygons_ = mold_outline_above.offset(-inset).unionPolygons(model_outlines.offset(width, ClipperLib::jtRound)); } // add roofs if (roof_layer_count > 0 && layer_nr > 0) { LayerIndex layer_nr_below = std::max(0, static_cast(layer_nr - roof_layer_count)); - Polygons roofs = slicer.layers[layer_nr_below].polygons.offset(width, ClipperLib::jtRound); // TODO: don't compute offset twice! - layer.polygons = layer.polygons.unionPolygons(roofs); + Shape roofs = slicer.layers[layer_nr_below].polygons_.offset(width, ClipperLib::jtRound); // TODO: don't compute offset twice! + layer.polygons_ = layer.polygons_.unionPolygons(roofs); } - mold_outline_above_per_mesh[mesh_idx] = layer.polygons; + mold_outline_above_per_mesh[mesh_idx] = layer.polygons_; } all_original_mold_outlines = all_original_mold_outlines.unionPolygons(); @@ -114,7 +117,7 @@ void Mold::process(std::vector& slicer_list) } Slicer& slicer = *slicer_list[mesh_idx]; SlicerLayer& layer = slicer.layers[layer_nr]; - layer.polygons = layer.polygons.difference(all_original_mold_outlines); + layer.polygons_ = layer.polygons_.difference(all_original_mold_outlines); } } } diff --git a/src/PathOrderPath.cpp b/src/PathOrderPath.cpp deleted file mode 100644 index cfca513fa9..0000000000 --- a/src/PathOrderPath.cpp +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (c) 2023 UltiMaker -// CuraEngine is released under the terms of the AGPLv3 or higher. - -#include "PathOrdering.h" //The definitions we're implementing here. -#include "WallToolPaths.h" -#include "sliceDataStorage.h" //For SliceLayerPart. - -namespace cura -{ - -template<> -ConstPolygonRef PathOrdering::getVertexData() -{ - return *vertices_; -} - -template<> -ConstPolygonRef PathOrdering::getVertexData() -{ - return *vertices_; -} - -template<> -ConstPolygonRef PathOrdering::getVertexData() -{ - return vertices_->outline.outerPolygon(); -} - -template<> -ConstPolygonRef PathOrdering::getVertexData() -{ - return vertices_->outline.outerPolygon(); -} - -template<> -ConstPolygonRef PathOrdering::getVertexData() -{ - return vertices_->outline_.outerPolygon(); -} -template<> -ConstPolygonRef PathOrdering::getVertexData() -{ - if (! cached_vertices_) - { - cached_vertices_ = vertices_->toPolygon(); - } - return ConstPolygonRef(*cached_vertices_); -} - -} // namespace cura diff --git a/src/PrimeTower.cpp b/src/PrimeTower.cpp index b56c94913c..bc4e2a07a7 100644 --- a/src/PrimeTower.cpp +++ b/src/PrimeTower.cpp @@ -1,15 +1,17 @@ -// Copyright (c) 2022 Ultimaker B.V. +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher. #include "PrimeTower.h" #include #include +#include + +#include #include "Application.h" //To get settings. #include "ExtruderTrain.h" #include "LayerPlan.h" -#include "PrintFeature.h" #include "Scene.h" #include "Slice.h" #include "gcodeExport.h" @@ -18,6 +20,7 @@ #include "sliceDataStorage.h" #define CIRCLE_RESOLUTION 32 // The number of vertices in each circle. +#define ARC_RESOLUTION 4 // The number of segments in each arc of a wheel namespace cura @@ -28,53 +31,39 @@ PrimeTower::PrimeTower() { const Scene& scene = Application::getInstance().current_slice_->scene; - { - EPlatformAdhesion adhesion_type = scene.current_mesh_group->settings.get("adhesion_type"); - - // When we have multiple extruders sharing the same heater/nozzle, we expect that all the extruders have been - //'primed' by the print-start gcode script, but we don't know which one has been left at the tip of the nozzle - // and whether it needs 'purging' (before extruding a pure material) or not, so we need to prime (actually purge) - // each extruder before it is used for the model. This can done by the (per-extruder) brim lines or (per-extruder) - // skirt lines when they are used, but we need to do that inside the first prime-tower layer when they are not - // used (sacrifying for this purpose the usual single-extruder first layer, that would be better for prime-tower - // adhesion). - - multiple_extruders_on_first_layer_ = scene.current_mesh_group->settings.get("machine_extruders_share_nozzle") - && ((adhesion_type != EPlatformAdhesion::SKIRT) && (adhesion_type != EPlatformAdhesion::BRIM)); - } - enabled_ = scene.current_mesh_group->settings.get("prime_tower_enable") && scene.current_mesh_group->settings.get("prime_tower_min_volume") > 10 && scene.current_mesh_group->settings.get("prime_tower_size") > 10; - would_have_actual_tower_ = enabled_; // Assume so for now. +} - extruder_count_ = scene.extruders.size(); - extruder_order_.resize(extruder_count_); - for (unsigned int extruder_nr = 0; extruder_nr < extruder_count_; extruder_nr++) +void PrimeTower::initializeExtruders(const std::vector& used_extruders) +{ + // Add used extruders in default order, then sort. + for (unsigned int extruder_nr = 0; extruder_nr < used_extruders.size(); extruder_nr++) { - extruder_order_[extruder_nr] = extruder_nr; // Start with default order, then sort. + if (used_extruders[extruder_nr]) + { + extruder_order_.push_back(extruder_nr); + } } + + extruder_count_ = extruder_order_.size(); + // Sort from high adhesion to low adhesion. - const Scene* scene_pointer = &scene; // Communicate to lambda via pointer to prevent copy. + const Scene& scene = Application::getInstance().current_slice_->scene; std::stable_sort( extruder_order_.begin(), extruder_order_.end(), - [scene_pointer](const unsigned int& extruder_nr_a, const unsigned int& extruder_nr_b) -> bool + [&scene](const unsigned int& extruder_nr_a, const unsigned int& extruder_nr_b) -> bool { - const Ratio adhesion_a = scene_pointer->extruders[extruder_nr_a].settings_.get("material_adhesion_tendency"); - const Ratio adhesion_b = scene_pointer->extruders[extruder_nr_b].settings_.get("material_adhesion_tendency"); + const Ratio adhesion_a = scene.extruders[extruder_nr_a].settings_.get("material_adhesion_tendency"); + const Ratio adhesion_b = scene.extruders[extruder_nr_b].settings_.get("material_adhesion_tendency"); return adhesion_a < adhesion_b; }); } -void PrimeTower::checkUsed(const SliceDataStorage& storage) +void PrimeTower::checkUsed() { - std::vector extruder_is_used = storage.getExtrudersUsed(); - size_t used_extruder_count = 0; - for (bool is_used : extruder_is_used) - { - used_extruder_count += is_used; - } - if (used_extruder_count <= 1) + if (extruder_count_ <= 1) { enabled_ = false; } @@ -94,7 +83,7 @@ void PrimeTower::generateGroundpoly() const coord_t x = mesh_group_settings.get("prime_tower_position_x"); const coord_t y = mesh_group_settings.get("prime_tower_position_y"); const coord_t tower_radius = tower_size / 2; - outer_poly_.add(PolygonUtils::makeCircle(Point2LL(x - tower_radius, y + tower_radius), tower_radius, TAU / CIRCLE_RESOLUTION)); + outer_poly_.push_back(PolygonUtils::makeCircle(Point2LL(x - tower_radius, y + tower_radius), tower_radius, TAU / CIRCLE_RESOLUTION)); middle_ = Point2LL(x - tower_size / 2, y + tower_size / 2); post_wipe_point_ = Point2LL(x - tower_size / 2, y + tower_size / 2); @@ -102,29 +91,44 @@ void PrimeTower::generateGroundpoly() void PrimeTower::generatePaths(const SliceDataStorage& storage) { + checkUsed(); + + // Maybe it turns out that we don't need a prime tower after all because there are no layer switches. const int raft_total_extra_layers = Raft::getTotalExtraLayers(); - would_have_actual_tower_ = storage.max_print_height_second_to_last_extruder - >= -raft_total_extra_layers; // Maybe it turns out that we don't need a prime tower after all because there are no layer switches. - if (would_have_actual_tower_ && enabled_) + enabled_ &= storage.max_print_height_second_to_last_extruder >= -raft_total_extra_layers; + + if (enabled_) { - generatePaths_denseInfill(); + generateGroundpoly(); + + std::vector cumulative_insets; + generatePaths_denseInfill(cumulative_insets); + generateStartLocations(); + + generatePaths_sparseInfill(cumulative_insets); } } -void PrimeTower::generatePaths_denseInfill() +void PrimeTower::generatePaths_denseInfill(std::vector& cumulative_insets) { const Scene& scene = Application::getInstance().current_slice_->scene; const Settings& mesh_group_settings = scene.current_mesh_group->settings; const coord_t layer_height = mesh_group_settings.get("layer_height"); + const PrimeTowerMethod method = mesh_group_settings.get("prime_tower_mode"); const bool base_enabled = mesh_group_settings.get("prime_tower_brim_enable"); const coord_t base_extra_radius = scene.settings.get("prime_tower_base_size"); const bool has_raft = mesh_group_settings.get("adhesion_type") == EPlatformAdhesion::RAFT; const coord_t base_height = std::max(scene.settings.get("prime_tower_base_height"), has_raft ? layer_height : 0); const double base_curve_magnitude = mesh_group_settings.get("prime_tower_base_curve_magnitude"); - prime_moves_.resize(extruder_count_); - base_extra_moves_.resize(extruder_count_); + for (size_t extruder_nr : extruder_order_) + { + // By default, add empty moves for every extruder + prime_moves_[extruder_nr]; + base_extra_moves_[extruder_nr]; + inset_extra_moves_[extruder_nr]; + } coord_t cumulative_inset = 0; // Each tower shape is going to be printed inside the other. This is the inset we're doing for each extruder. for (size_t extruder_nr : extruder_order_) @@ -133,24 +137,25 @@ void PrimeTower::generatePaths_denseInfill() const coord_t required_volume = MM3_2INT(scene.extruders[extruder_nr].settings_.get("prime_tower_min_volume")); const Ratio flow = scene.extruders[extruder_nr].settings_.get("prime_tower_flow"); coord_t current_volume = 0; - Polygons& prime_moves = prime_moves_[extruder_nr]; + Shape& prime_moves = prime_moves_[extruder_nr]; // Create the walls of the prime tower. unsigned int wall_nr = 0; for (; current_volume < required_volume; wall_nr++) { // Create a new polygon with an offset from the outer polygon. - Polygons polygons = outer_poly_.offset(-cumulative_inset - wall_nr * line_width - line_width / 2); - prime_moves.add(polygons); - current_volume += polygons.polygonLength() * line_width * layer_height * flow; + Shape polygons = outer_poly_.offset(-cumulative_inset - wall_nr * line_width - line_width / 2); + prime_moves.push_back(polygons); + current_volume += polygons.length() * line_width * layer_height * flow; if (polygons.empty()) // Don't continue. We won't ever reach the required volume because it doesn't fit. { break; } } - // The most outside extruder is used for the base - if (extruder_nr == extruder_order_.front() && (base_enabled || has_raft) && base_extra_radius > 0 && base_height > 0) + // Generate the base outside extra rings + if ((method == PrimeTowerMethod::INTERLEAVED || (extruder_nr == extruder_order_.front() && method == PrimeTowerMethod::NORMAL)) && (base_enabled || has_raft) + && base_extra_radius > 0 && base_height > 0) { for (coord_t z = 0; z < base_height; z += layer_height) { @@ -163,25 +168,130 @@ void PrimeTower::generatePaths_denseInfill() } extra_radius = line_width * extra_rings; outer_poly_base_.push_back(outer_poly_.offset(extra_radius)); - base_extra_moves_[extruder_nr].push_back(PolygonUtils::generateOutset(outer_poly_, extra_rings, line_width)); } } cumulative_inset += wall_nr * line_width; + cumulative_insets.push_back(cumulative_inset); + } - // Only the most inside extruder needs to fill the inside of the prime tower - if (extruder_nr == extruder_order_.back()) + // Now we have the total cumulative inset, generate the base inside extra rings + for (size_t extruder_nr : extruder_order_) + { + if (extruder_nr == extruder_order_.back() || method == PrimeTowerMethod::INTERLEAVED) { - Polygons base_extra_moves = PolygonUtils::generateInset(outer_poly_, line_width, cumulative_inset); - if (! base_extra_moves.empty()) + const coord_t line_width = scene.extruders[extruder_nr].settings_.get("prime_tower_line_width"); + Shape pattern = PolygonUtils::generateInset(outer_poly_, line_width, cumulative_inset); + if (! pattern.empty()) { - base_extra_moves_[extruder_nr].push_back(base_extra_moves); + inset_extra_moves_[extruder_nr].push_back(pattern); } } } } +void PrimeTower::generatePaths_sparseInfill(const std::vector& cumulative_insets) +{ + const Scene& scene = Application::getInstance().current_slice_->scene; + const Settings& mesh_group_settings = scene.current_mesh_group->settings; + const PrimeTowerMethod method = mesh_group_settings.get("prime_tower_mode"); + + struct ActualExtruder + { + size_t number; + coord_t line_width; + }; + + std::vector actual_extruders; + actual_extruders.reserve(extruder_order_.size()); + for (size_t extruder_nr : extruder_order_) + { + const coord_t line_width = scene.extruders[extruder_nr].settings_.get("prime_tower_line_width"); + actual_extruders.push_back({ extruder_nr, line_width }); + } + + if (method == PrimeTowerMethod::INTERLEAVED || method == PrimeTowerMethod::NORMAL) + { + // Pre-compute radiuses of each extruder ring + std::vector rings_radii; + const coord_t tower_size = mesh_group_settings.get("prime_tower_size"); + const coord_t tower_radius = tower_size / 2; + + rings_radii.push_back(tower_radius); + for (const coord_t& cumulative_inset : cumulative_insets) + { + rings_radii.push_back(tower_radius - cumulative_inset); + } + + // Generate all possible extruders combinations, e.g. if there are 4 extruders, we have combinations + // 0 / 0-1 / 0-1-2 / 0-1-2-3 / 1 / 1-2 / 1-2-3 / 2 / 2-3 / 3 + // A combination is represented by a bitmask + for (size_t first_extruder_idx = 0; first_extruder_idx < extruder_count_; ++first_extruder_idx) + { + size_t nb_extruders_sparse = method == PrimeTowerMethod::NORMAL ? first_extruder_idx + 1 : extruder_count_; + + for (size_t last_extruder_idx = first_extruder_idx; last_extruder_idx < nb_extruders_sparse; ++last_extruder_idx) + { + size_t extruders_combination = 0; + for (size_t extruder_idx = first_extruder_idx; extruder_idx <= last_extruder_idx; ++extruder_idx) + { + size_t extruder_nr = extruder_order_.at(extruder_idx); + extruders_combination |= (1 << extruder_nr); + } + + std::map infills_for_combination; + for (const ActualExtruder& actual_extruder : actual_extruders) + { + if (method == PrimeTowerMethod::INTERLEAVED || actual_extruder.number == extruder_order_.at(first_extruder_idx)) + { + Shape infill = generatePath_sparseInfill(first_extruder_idx, last_extruder_idx, rings_radii, actual_extruder.line_width, actual_extruder.number); + infills_for_combination[actual_extruder.number] = infill; + } + } + + sparse_pattern_per_extruders_[extruders_combination] = infills_for_combination; + } + } + } +} + +Shape PrimeTower::generatePath_sparseInfill( + const size_t first_extruder_idx, + const size_t last_extruder_idx, + const std::vector& rings_radii, + const coord_t line_width, + const size_t actual_extruder_nr) +{ + const Scene& scene = Application::getInstance().current_slice_->scene; + const coord_t max_bridging_distance = scene.extruders[actual_extruder_nr].settings_.get("prime_tower_max_bridging_distance"); + const coord_t outer_radius = rings_radii[first_extruder_idx]; + const coord_t inner_radius = rings_radii[last_extruder_idx + 1]; + const coord_t radius_delta = outer_radius - inner_radius; + const coord_t semi_line_width = line_width / 2; + + Shape pattern; + + // Split ring according to max bridging distance + const size_t nb_rings = std::ceil(static_cast(radius_delta) / max_bridging_distance); + if (nb_rings) + { + const coord_t actual_radius_step = radius_delta / nb_rings; + + for (size_t i = 0; i < nb_rings; ++i) + { + const coord_t ring_inner_radius = (inner_radius + i * actual_radius_step) + semi_line_width; + const coord_t ring_outer_radius = (inner_radius + (i + 1) * actual_radius_step) - semi_line_width; + + const size_t semi_nb_spokes = std::ceil((std::numbers::pi * ring_outer_radius) / max_bridging_distance); + + pattern.push_back(PolygonUtils::makeWheel(middle_, ring_inner_radius, ring_outer_radius, semi_nb_spokes, ARC_RESOLUTION)); + } + } + + return pattern; +} + void PrimeTower::generateStartLocations() { // Evenly spread out a number of dots along the prime tower's outline. This is done for the complete outline, @@ -192,13 +302,19 @@ void PrimeTower::generateStartLocations() PolygonUtils::spreadDots(segment_start, segment_end, number_of_prime_tower_start_locations_, prime_tower_start_locations_); } -void PrimeTower::addToGcode(const SliceDataStorage& storage, LayerPlan& gcode_layer, const size_t prev_extruder, const size_t new_extruder) const +void PrimeTower::addToGcode( + const SliceDataStorage& storage, + LayerPlan& gcode_layer, + const std::vector& required_extruder_prime, + const size_t prev_extruder_nr, + const size_t new_extruder_nr) const { - if (! (enabled_ && would_have_actual_tower_)) + if (! enabled_) { return; } - if (gcode_layer.getPrimeTowerIsPlanned(new_extruder)) + + if (gcode_layer.getPrimeTowerIsPlanned(new_extruder_nr)) { // don't print the prime tower if it has been printed already with this extruder. return; } @@ -209,34 +325,98 @@ void PrimeTower::addToGcode(const SliceDataStorage& storage, LayerPlan& gcode_la return; } - bool post_wipe = Application::getInstance().current_slice_->scene.extruders[prev_extruder].settings_.get("prime_tower_wipe_enabled"); + bool post_wipe = Application::getInstance().current_slice_->scene.extruders[prev_extruder_nr].settings_.get("prime_tower_wipe_enabled"); // Do not wipe on the first layer, we will generate non-hollow prime tower there for better bed adhesion. - if (prev_extruder == new_extruder || layer_nr == 0) + if (prev_extruder_nr == new_extruder_nr || layer_nr == 0) { post_wipe = false; } - // Go to the start location if it's not the first layer - if (layer_nr != 0) + auto extruder_iterator = std::find_if( + required_extruder_prime.begin(), + required_extruder_prime.end(), + [new_extruder_nr](const ExtruderUse& extruder_use) + { + return extruder_use.extruder_nr == new_extruder_nr; + }); + + if (extruder_iterator == required_extruder_prime.end()) + { + // Extruder is not used on this layer + return; + } + + size_t new_extruder_idx; + auto iterator = std::find(extruder_order_.begin(), extruder_order_.end(), new_extruder_nr); + if (iterator != extruder_order_.end()) + { + new_extruder_idx = iterator - extruder_order_.begin(); + } + else { - gotoStartLocation(gcode_layer, new_extruder); + // Given extruder nr is not registered ?! + return; } - addToGcode_denseInfill(gcode_layer, new_extruder); + PrimeTowerMethod method = Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("prime_tower_mode"); + std::vector extra_primed_extruders_idx; + + switch (extruder_iterator->prime) + { + case ExtruderPrime::None: + if (method != PrimeTowerMethod::INTERLEAVED) + { + gcode_layer.setPrimeTowerIsPlanned(new_extruder_nr); + } + break; + + case ExtruderPrime::Sparse: + gotoStartLocation(gcode_layer, new_extruder_nr); + extra_primed_extruders_idx = findExtrudersSparseInfill(gcode_layer, required_extruder_prime, method, { new_extruder_idx }); + addToGcode_sparseInfill(gcode_layer, extra_primed_extruders_idx, new_extruder_nr); + break; + + case ExtruderPrime::Prime: + gotoStartLocation(gcode_layer, new_extruder_nr); + + addToGcode_denseInfill(gcode_layer, new_extruder_nr); + gcode_layer.setPrimeTowerIsPlanned(new_extruder_nr); + + if (method == PrimeTowerMethod::INTERLEAVED && gcode_layer.getLayerNr() <= storage.max_print_height_second_to_last_extruder) + { + // Whatever happens before and after, use the current extruder to prime all the non-required extruders now + extra_primed_extruders_idx = findExtrudersSparseInfill(gcode_layer, required_extruder_prime, method); + addToGcode_sparseInfill(gcode_layer, extra_primed_extruders_idx, new_extruder_nr); + } + break; + } + + if (! gcode_layer.getPrimeTowerBaseIsPlanned() && addToGcode_base(gcode_layer, new_extruder_nr)) + { + gcode_layer.setPrimeTowerBaseIsPlanned(); + } + + if (! gcode_layer.getPrimeTowerInsetIsPlanned() && addToGcode_inset(gcode_layer, new_extruder_nr)) + { + gcode_layer.setPrimeTowerInsetIsPlanned(); + } + + for (const size_t& primed_extruder_idx : extra_primed_extruders_idx) + { + gcode_layer.setPrimeTowerIsPlanned(extruder_order_.at(primed_extruder_idx)); + } // post-wipe: if (post_wipe) { // Make sure we wipe the old extruder on the prime tower. - const Settings& previous_settings = Application::getInstance().current_slice_->scene.extruders[prev_extruder].settings_; + const Settings& previous_settings = Application::getInstance().current_slice_->scene.extruders[prev_extruder_nr].settings_; const Point2LL previous_nozzle_offset = Point2LL(previous_settings.get("machine_nozzle_offset_x"), previous_settings.get("machine_nozzle_offset_y")); - const Settings& new_settings = Application::getInstance().current_slice_->scene.extruders[new_extruder].settings_; + const Settings& new_settings = Application::getInstance().current_slice_->scene.extruders[new_extruder_nr].settings_; const Point2LL new_nozzle_offset = Point2LL(new_settings.get("machine_nozzle_offset_x"), new_settings.get("machine_nozzle_offset_y")); gcode_layer.addTravel(post_wipe_point_ - previous_nozzle_offset + new_nozzle_offset); } - - gcode_layer.setPrimeTowerIsPlanned(new_extruder); } void PrimeTower::addToGcode_denseInfill(LayerPlan& gcode_layer, const size_t extruder_nr) const @@ -249,25 +429,159 @@ void PrimeTower::addToGcode_denseInfill(LayerPlan& gcode_layer, const size_t ext { // Actual prime pattern const GCodePathConfig& config = gcode_layer.configs_storage_.prime_tower_config_per_extruder[extruder_nr]; - const Polygons& pattern = prime_moves_[extruder_nr]; + const Shape& pattern = prime_moves_.at(extruder_nr); gcode_layer.addPolygonsByOptimizer(pattern, config); } +} - const std::vector& pattern_extra_brim = base_extra_moves_[extruder_nr]; +bool PrimeTower::addToGcode_base(LayerPlan& gcode_layer, const size_t extruder_nr) const +{ + const size_t raft_total_extra_layers = Raft::getTotalExtraLayers(); + LayerIndex absolute_layer_number = gcode_layer.getLayerNr() + raft_total_extra_layers; + + const auto& pattern_extra_brim = base_extra_moves_.at(extruder_nr); if (absolute_layer_number < pattern_extra_brim.size()) { // Extra rings for stronger base - const GCodePathConfig& config = gcode_layer.configs_storage_.prime_tower_config_per_extruder[extruder_nr]; - const Polygons& pattern = pattern_extra_brim[absolute_layer_number]; - gcode_layer.addPolygonsByOptimizer(pattern, config); + const auto& pattern = pattern_extra_brim[absolute_layer_number]; + if (! pattern.empty()) + { + const GCodePathConfig& config = gcode_layer.configs_storage_.prime_tower_config_per_extruder[extruder_nr]; + gcode_layer.addPolygonsByOptimizer(pattern, config); + return true; + } + } + + return false; +} + +bool PrimeTower::addToGcode_inset(LayerPlan& gcode_layer, const size_t extruder_nr) const +{ + const size_t raft_total_extra_layers = Raft::getTotalExtraLayers(); + LayerIndex absolute_layer_number = gcode_layer.getLayerNr() + raft_total_extra_layers; + + if (absolute_layer_number == 0) // Extra-adhesion on very first layer only + { + const Shape& pattern_extra_inset = inset_extra_moves_.at(extruder_nr); + if (! pattern_extra_inset.empty()) + { + const GCodePathConfig& config = gcode_layer.configs_storage_.prime_tower_config_per_extruder[extruder_nr]; + gcode_layer.addPolygonsByOptimizer(pattern_extra_inset, config); + return true; + } + } + + return false; +} + +void PrimeTower::addToGcode_sparseInfill(LayerPlan& gcode_layer, const std::vector& extruders_to_prime_idx, const size_t current_extruder_nr) const +{ + std::vector> extruders_to_prime_idx_grouped; + + // Group extruders which are besides each other + for (size_t extruder_to_prime_idx : extruders_to_prime_idx) + { + if (extruders_to_prime_idx_grouped.empty()) + { + // First extruder : create new group + extruders_to_prime_idx_grouped.push_back({ extruder_to_prime_idx }); + } + else + { + std::vector& last_group = extruders_to_prime_idx_grouped.back(); + if (last_group.back() == extruder_to_prime_idx - 1) + { + // New extruders which belongs to same group + last_group.push_back(extruder_to_prime_idx); + } + else + { + // New extruders which belongs to new group + extruders_to_prime_idx_grouped.push_back({ extruder_to_prime_idx }); + } + } + } + + // And finally, append patterns for each group + const GCodePathConfig& config = gcode_layer.configs_storage_.prime_tower_config_per_extruder[current_extruder_nr]; + + for (const std::vector& group_idx : extruders_to_prime_idx_grouped) + { + size_t mask = 0; + for (const size_t& extruder_idx : group_idx) + { + mask |= (1 << extruder_order_.at(extruder_idx)); + } + + auto iterator_combination = sparse_pattern_per_extruders_.find(mask); + if (iterator_combination != sparse_pattern_per_extruders_.end()) + { + const std::map& infill_for_combination = iterator_combination->second; + + auto iterator_extruder_nr = infill_for_combination.find(current_extruder_nr); + if (iterator_extruder_nr != infill_for_combination.end()) + { + gcode_layer.addPolygonsByOptimizer(iterator_extruder_nr->second, config); + } + else + { + spdlog::warn("Sparse pattern not found for extruder {}, skipping\n", current_extruder_nr); + } + } + else + { + spdlog::warn("Sparse pattern not found for group {}, skipping\n", mask); + } + } +} + +std::vector PrimeTower::findExtrudersSparseInfill( + LayerPlan& gcode_layer, + const std::vector& required_extruder_prime, + PrimeTowerMethod method, + const std::vector& initial_list_idx) const +{ + std::vector extruders_to_prime_idx; + + for (size_t extruder_idx = 0; extruder_idx < extruder_order_.size(); extruder_idx++) + { + auto iterator_initial_list = std::find(initial_list_idx.begin(), initial_list_idx.end(), extruder_idx); + bool is_in_initial_list = iterator_initial_list != initial_list_idx.end(); + + if (is_in_initial_list) + { + extruders_to_prime_idx.push_back(extruder_idx); + } + else + { + size_t extruder_nr = extruder_order_.at(extruder_idx); + if (method == PrimeTowerMethod::INTERLEAVED && ! gcode_layer.getPrimeTowerIsPlanned(extruder_nr)) + { + auto iterator_required_list = std::find_if( + required_extruder_prime.begin(), + required_extruder_prime.end(), + [extruder_nr](const ExtruderUse& extruder_use) + { + return extruder_use.extruder_nr == extruder_nr && extruder_use.prime == ExtruderPrime::Prime; + }); + bool is_in_required_list = iterator_required_list != required_extruder_prime.end(); + + if (! is_in_required_list) + { + extruders_to_prime_idx.push_back(extruder_idx); + } + } + } } + + return extruders_to_prime_idx; } void PrimeTower::subtractFromSupport(SliceDataStorage& storage) { for (size_t layer = 0; layer <= (size_t)storage.max_print_height_second_to_last_extruder + 1 && layer < storage.support.supportLayers.size(); layer++) { - const Polygons outside_polygon = getOuterPoly(layer).getOutsidePolygons(); + const Shape outside_polygon = getOuterPoly(layer).getOutsidePolygons(); AABB outside_polygon_boundary_box(outside_polygon); SupportLayer& support_layer = storage.support.supportLayers[layer]; // take the differences of the support infill parts and the prime tower area @@ -275,7 +589,7 @@ void PrimeTower::subtractFromSupport(SliceDataStorage& storage) } } -const Polygons& PrimeTower::getOuterPoly(const LayerIndex& layer_nr) const +const Shape& PrimeTower::getOuterPoly(const LayerIndex& layer_nr) const { const LayerIndex absolute_layer_nr = layer_nr + Raft::getTotalExtraLayers(); if (absolute_layer_nr < outer_poly_base_.size()) @@ -288,26 +602,28 @@ const Polygons& PrimeTower::getOuterPoly(const LayerIndex& layer_nr) const } } -const Polygons& PrimeTower::getGroundPoly() const +const Shape& PrimeTower::getGroundPoly() const { return getOuterPoly(-Raft::getTotalExtraLayers()); } void PrimeTower::gotoStartLocation(LayerPlan& gcode_layer, const int extruder_nr) const { - int current_start_location_idx = ((((extruder_nr + 1) * gcode_layer.getLayerNr()) % number_of_prime_tower_start_locations_) + number_of_prime_tower_start_locations_) - % number_of_prime_tower_start_locations_; - - const ClosestPolygonPoint wipe_location = prime_tower_start_locations_[current_start_location_idx]; - - const ExtruderTrain& train = Application::getInstance().current_slice_->scene.extruders[extruder_nr]; - const coord_t inward_dist = train.settings_.get("machine_nozzle_size") * 3 / 2; - const coord_t start_dist = train.settings_.get("machine_nozzle_size") * 2; - const Point2LL prime_end = PolygonUtils::moveInsideDiagonally(wipe_location, inward_dist); - const Point2LL outward_dir = wipe_location.location_ - prime_end; - const Point2LL prime_start = wipe_location.location_ + normal(outward_dir, start_dist); - - gcode_layer.addTravel(prime_start); + if (gcode_layer.getLayerNr() != 0) + { + int current_start_location_idx = ((((extruder_nr + 1) * gcode_layer.getLayerNr()) % number_of_prime_tower_start_locations_) + number_of_prime_tower_start_locations_) + % number_of_prime_tower_start_locations_; + + const ClosestPointPolygon wipe_location = prime_tower_start_locations_[current_start_location_idx]; + const ExtruderTrain& train = Application::getInstance().current_slice_->scene.extruders[extruder_nr]; + const coord_t inward_dist = train.settings_.get("machine_nozzle_size") * 3 / 2; + const coord_t start_dist = train.settings_.get("machine_nozzle_size") * 2; + const Point2LL prime_end = PolygonUtils::moveInsideDiagonally(wipe_location, inward_dist); + const Point2LL outward_dir = wipe_location.location_ - prime_end; + const Point2LL prime_start = wipe_location.location_ + normal(outward_dir, start_dist); + + gcode_layer.addTravel(prime_start); + } } } // namespace cura diff --git a/src/PrimeTower/PrimeTower.cpp b/src/PrimeTower/PrimeTower.cpp new file mode 100644 index 0000000000..074d1f501a --- /dev/null +++ b/src/PrimeTower/PrimeTower.cpp @@ -0,0 +1,384 @@ +// Copyright (c) 2024 UltiMaker +// CuraEngine is released under the terms of the AGPLv3 or higher. + +#include "PrimeTower/PrimeTower.h" + +#include +#include +#include + +#include + +#include "Application.h" //To get settings. +#include "ExtruderTrain.h" +#include "LayerPlan.h" +#include "PrimeTower/PrimeTowerInterleaved.h" +#include "PrimeTower/PrimeTowerNormal.h" +#include "Scene.h" +#include "Slice.h" +#include "gcodeExport.h" +#include "infill.h" +#include "raft.h" +#include "sliceDataStorage.h" + + +namespace cura +{ + +PrimeTower::PrimeTower() + : wipe_from_middle_(false) +{ + const Scene& scene = Application::getInstance().current_slice_->scene; + const Settings& mesh_group_settings = scene.current_mesh_group->settings; + const coord_t tower_radius = mesh_group_settings.get("prime_tower_size") / 2; + const coord_t x = mesh_group_settings.get("prime_tower_position_x"); + const coord_t y = mesh_group_settings.get("prime_tower_position_y"); + const coord_t layer_height = mesh_group_settings.get("layer_height"); + const bool base_enabled = mesh_group_settings.get("prime_tower_brim_enable"); + const coord_t base_extra_radius = scene.settings.get("prime_tower_base_size"); + const coord_t base_height = scene.settings.get("prime_tower_base_height"); + const double base_curve_magnitude = mesh_group_settings.get("prime_tower_base_curve_magnitude"); + + middle_ = Point2LL(x - tower_radius, y + tower_radius); + outer_poly_ = { PolygonUtils::makeDisc(middle_, tower_radius, circle_definition_), tower_radius }; + post_wipe_point_ = Point2LL(x - tower_radius, y + tower_radius); + + // Generate the base outline + if (base_enabled && base_extra_radius > 0 && base_height > 0) + { + base_occupied_outline_.init(true); + + for (coord_t z = 0; z < base_height; z += layer_height) + { + const double brim_radius_factor = std::pow((1.0 - static_cast(z) / static_cast(base_height)), base_curve_magnitude); + const coord_t extra_radius = std::llrint(static_cast(base_extra_radius) * brim_radius_factor); + const coord_t total_radius = tower_radius + extra_radius; + base_occupied_outline_.push_back(OccupiedOutline{ PolygonUtils::makeDisc(middle_, total_radius, circle_definition_), total_radius }); + } + } +} + +void PrimeTower::generateBase() +{ + const Scene& scene = Application::getInstance().current_slice_->scene; + const Settings& mesh_group_settings = scene.current_mesh_group->settings; + const bool base_enabled = mesh_group_settings.get("prime_tower_brim_enable"); + const coord_t base_extra_radius = scene.settings.get("prime_tower_base_size"); + const coord_t base_height = scene.settings.get("prime_tower_base_height"); + + if (base_enabled && base_extra_radius > 0 && base_height > 0) + { + base_extrusion_outline_.init(true); + + // Generate the base outside extra annuli for the first extruder of each layer + auto iterator_extrusion_paths = toolpaths_.begin(); + auto iterator_base_outline = base_occupied_outline_.begin(); + for (; iterator_extrusion_paths != toolpaths_.end() && iterator_base_outline != base_occupied_outline_.end(); ++iterator_extrusion_paths, ++iterator_base_outline) + { + std::vector& toolpaths_at_this_layer = iterator_extrusion_paths->second; + if (! toolpaths_at_this_layer.empty()) + { + const OccupiedOutline& base_ouline_at_this_layer = *iterator_base_outline; + ExtruderToolPaths& first_extruder_toolpaths = toolpaths_at_this_layer.front(); + const size_t extruder_nr = first_extruder_toolpaths.extruder_nr; + const coord_t line_width = scene.extruders[extruder_nr].settings_.get("prime_tower_line_width"); + + std::tuple outset + = PolygonUtils::generateCirculatOutset(middle_, first_extruder_toolpaths.outer_radius, base_ouline_at_this_layer.outer_radius, line_width, circle_definition_); + first_extruder_toolpaths.toolpaths.push_back(std::get<0>(outset)); + + base_extrusion_outline_.push_back(PolygonUtils::makeDisc(middle_, std::get<1>(outset), circle_definition_)); + } + } + } +} + +void PrimeTower::generateFirtLayerInset() +{ + // Generate the base inside extra disc for the last extruder of the first layer + if (! toolpaths_.empty()) + { + std::vector& toolpaths_first_layer = toolpaths_.begin()->second; + if (! toolpaths_first_layer.empty()) + { + ExtruderToolPaths& last_extruder_toolpaths = toolpaths_first_layer.back(); + const Scene& scene = Application::getInstance().current_slice_->scene; + const size_t extruder_nr = last_extruder_toolpaths.extruder_nr; + const coord_t line_width = scene.extruders[extruder_nr].settings_.get("prime_tower_line_width"); + ClosedLinesSet pattern = PolygonUtils::generateCircularInset(middle_, last_extruder_toolpaths.inner_radius, line_width, circle_definition_); + last_extruder_toolpaths.toolpaths.push_back(pattern); + } + } +} + +std::tuple PrimeTower::generatePrimeToolpaths(const size_t extruder_nr, const coord_t outer_radius) +{ + const Scene& scene = Application::getInstance().current_slice_->scene; + const Settings& mesh_group_settings = scene.current_mesh_group->settings; + const coord_t layer_height = mesh_group_settings.get("layer_height"); + const coord_t line_width = scene.extruders[extruder_nr].settings_.get("prime_tower_line_width"); + const double required_volume = scene.extruders[extruder_nr].settings_.get("prime_tower_min_volume") * 1000000000; + const Ratio flow = scene.extruders[extruder_nr].settings_.get("prime_tower_flow"); + const coord_t semi_line_width = line_width / 2; + + double current_volume = 0; + coord_t current_outer_radius = outer_radius - semi_line_width; + ClosedLinesSet toolpaths; + while (current_volume < required_volume && current_outer_radius >= semi_line_width) + { + ClosedPolyline circle = PolygonUtils::makeCircle(middle_, current_outer_radius, circle_definition_); + toolpaths.push_back(circle); + current_volume += static_cast(circle.length() * line_width * layer_height) * flow; + current_outer_radius -= line_width; + } + + return { toolpaths, current_outer_radius + semi_line_width }; +} + +ClosedLinesSet PrimeTower::generateSupportToolpaths(const size_t extruder_nr, const coord_t outer_radius, const coord_t inner_radius) +{ + const Scene& scene = Application::getInstance().current_slice_->scene; + const double max_bridging_distance = static_cast(scene.extruders[extruder_nr].settings_.get("prime_tower_max_bridging_distance")); + const coord_t line_width = scene.extruders[extruder_nr].settings_.get("prime_tower_line_width"); + const coord_t radius_delta = outer_radius - inner_radius; + const coord_t semi_line_width = line_width / 2; + + ClosedLinesSet toolpaths; + + // Split annuli according to max bridging distance + const coord_t nb_annuli = static_cast(std::ceil(static_cast(radius_delta) / max_bridging_distance)); + if (nb_annuli > 0) + { + const coord_t actual_radius_step = radius_delta / nb_annuli; + + for (coord_t i = 0; i < nb_annuli; ++i) + { + const coord_t annulus_inner_radius = (inner_radius + i * actual_radius_step) + semi_line_width; + const coord_t annulus_outer_radius = (inner_radius + (i + 1) * actual_radius_step) - semi_line_width; + + const size_t semi_nb_spokes = static_cast(std::ceil((std::numbers::pi * static_cast(annulus_outer_radius)) / max_bridging_distance)); + + toolpaths.push_back(PolygonUtils::makeWheel(middle_, annulus_inner_radius, annulus_outer_radius, semi_nb_spokes, arc_definition_)); + } + } + + return toolpaths; +} + +void PrimeTower::addToGcode( + const SliceDataStorage& storage, + LayerPlan& gcode_layer, + const std::vector& required_extruder_prime, + const size_t prev_extruder_nr, + const size_t new_extruder_nr) const +{ + if (gcode_layer.getPrimeTowerIsPlanned(new_extruder_nr)) + { // don't print the prime tower if it has been printed already with this extruder. + return; + } + + const LayerIndex layer_nr = gcode_layer.getLayerNr(); + if (layer_nr > storage.max_print_height_second_to_last_extruder + 1) + { + return; + } + + bool post_wipe = Application::getInstance().current_slice_->scene.extruders[prev_extruder_nr].settings_.get("prime_tower_wipe_enabled"); + + // Do not wipe on the first layer, we will generate non-hollow prime tower there for better bed adhesion. + if (prev_extruder_nr == new_extruder_nr || layer_nr == 0) + { + post_wipe = false; + } + + auto extruder_iterator = std::find_if( + required_extruder_prime.begin(), + required_extruder_prime.end(), + [new_extruder_nr](const ExtruderUse& extruder_use) + { + return extruder_use.extruder_nr == new_extruder_nr; + }); + + if (extruder_iterator == required_extruder_prime.end()) + { + // Extruder is not used on this layer + return; + } + + const ClosedLinesSet* toolpaths = nullptr; + auto iterator_layer = toolpaths_.find(layer_nr); + if (iterator_layer != toolpaths_.end()) + { + const std::vector& toolpaths_at_this_layer = iterator_layer->second; + auto iterator_extruder = std::find_if( + toolpaths_at_this_layer.begin(), + toolpaths_at_this_layer.end(), + [new_extruder_nr](const ExtruderToolPaths& extruder_toolpaths) + { + return extruder_toolpaths.extruder_nr == new_extruder_nr; + }); + if (iterator_extruder != iterator_layer->second.end()) + { + toolpaths = &(iterator_extruder->toolpaths); + } + } + + if (toolpaths && ! toolpaths->empty()) + { + gotoStartLocation(gcode_layer, new_extruder_nr); + + const GCodePathConfig& config = gcode_layer.configs_storage_.prime_tower_config_per_extruder[new_extruder_nr]; + gcode_layer.addLinesByOptimizer(*toolpaths, config, SpaceFillType::PolyLines); + } + + gcode_layer.setPrimeTowerIsPlanned(new_extruder_nr); + + // post-wipe: + if (post_wipe) + { + // Make sure we wipe the old extruder on the prime tower. + const Settings& previous_settings = Application::getInstance().current_slice_->scene.extruders[prev_extruder_nr].settings_; + const Point2LL previous_nozzle_offset = Point2LL(previous_settings.get("machine_nozzle_offset_x"), previous_settings.get("machine_nozzle_offset_y")); + const Settings& new_settings = Application::getInstance().current_slice_->scene.extruders[new_extruder_nr].settings_; + const Point2LL new_nozzle_offset = Point2LL(new_settings.get("machine_nozzle_offset_x"), new_settings.get("machine_nozzle_offset_y")); + gcode_layer.addTravel(post_wipe_point_ - previous_nozzle_offset + new_nozzle_offset); + } +} + +const Polygon& PrimeTower::getOccupiedOutline(const LayerIndex& layer_nr) const +{ + auto iterator = base_occupied_outline_.iterator_at(layer_nr); + if (iterator != base_occupied_outline_.end()) + { + return iterator->outline; + } + else + { + return outer_poly_.outline; + } +} + +const Polygon& PrimeTower::getOccupiedGroundOutline() const +{ + if (! base_extrusion_outline_.empty()) + { + return base_extrusion_outline_.front(); + } + else + { + return outer_poly_.outline; + } +} + +const Polygon& PrimeTower::getExtrusionOutline(const LayerIndex& layer_nr) const +{ + auto iterator = base_extrusion_outline_.iterator_at(layer_nr); + if (iterator != base_extrusion_outline_.end()) + { + return *iterator; + } + else + { + return outer_poly_.outline; + } +} + +void PrimeTower::subtractFromSupport(SliceDataStorage& storage) +{ + for (size_t layer = 0; static_cast(layer) <= storage.max_print_height_second_to_last_extruder + 1 && layer < storage.support.supportLayers.size(); layer++) + { + const Polygon& outside_polygon = getOccupiedOutline(layer); + AABB outside_polygon_boundary_box(outside_polygon); + SupportLayer& support_layer = storage.support.supportLayers[layer]; + // take the differences of the support infill parts and the prime tower area + support_layer.excludeAreasFromSupportInfillAreas(Shape(outside_polygon), outside_polygon_boundary_box); + } +} + +void PrimeTower::processExtrudersUse(LayerVector>& extruders_use, const size_t start_extruder) +{ + polishExtrudersUses(extruders_use, start_extruder); + toolpaths_ = generateToolPaths(extruders_use); + generateBase(); + generateFirtLayerInset(); +} + +PrimeTower* PrimeTower::createPrimeTower(SliceDataStorage& storage) +{ + PrimeTower* prime_tower = nullptr; + const Settings& settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; + const size_t raft_total_extra_layers = Raft::getTotalExtraLayers(); + const std::vector extruders_used = storage.getExtrudersUsed(); + + std::vector used_extruders_nrs; + for (size_t extruder_nr = 0; extruder_nr < extruders_used.size(); extruder_nr++) + { + if (extruders_used[extruder_nr]) + { + used_extruders_nrs.push_back(extruder_nr); + } + } + + if (used_extruders_nrs.size() > 1 && settings.get("prime_tower_enable") && settings.get("prime_tower_min_volume") > 10 + && settings.get("prime_tower_size") > 10 && storage.max_print_height_second_to_last_extruder >= -static_cast(raft_total_extra_layers)) + { + const PrimeTowerMode method = settings.get("prime_tower_mode"); + + switch (method) + { + case PrimeTowerMode::NORMAL: + prime_tower = new PrimeTowerNormal(used_extruders_nrs); + break; + case PrimeTowerMode::INTERLEAVED: + prime_tower = new PrimeTowerInterleaved(); + break; + } + } + + if (prime_tower) + { + prime_tower->subtractFromSupport(storage); + } + + return prime_tower; +} + +bool PrimeTower::extruderRequiresPrime(const std::vector& extruder_is_used_on_this_layer, size_t extruder_nr, size_t last_extruder) +{ + return extruder_is_used_on_this_layer[extruder_nr] && extruder_nr != last_extruder; +} + +void PrimeTower::gotoStartLocation(LayerPlan& gcode_layer, const size_t extruder_nr) const +{ + LayerIndex layer_nr = gcode_layer.getLayerNr(); + if (layer_nr != -Raft::getTotalExtraLayers()) + { + coord_t wipe_radius; + auto iterator = base_occupied_outline_.iterator_at(gcode_layer.getLayerNr()); + if (iterator != base_occupied_outline_.end()) + { + wipe_radius = iterator->outer_radius; + } + else + { + wipe_radius = outer_poly_.outer_radius; + } + + const ExtruderTrain& train = Application::getInstance().current_slice_->scene.extruders[extruder_nr]; + wipe_radius += train.settings_.get("machine_nozzle_size") * 2; + + // Layer number may be negative, make it positive (or null) before using modulo operator + while (layer_nr < 0) + { + layer_nr += number_of_prime_tower_start_locations_; + } + + size_t current_start_location_idx = ((extruder_nr + 1) * static_cast(layer_nr)) % number_of_prime_tower_start_locations_; + const AngleRadians angle = start_locations_step_ * current_start_location_idx; + const Point2LL prime_start = PolygonUtils::makeCirclePoint(middle_, wipe_radius, angle); + + gcode_layer.addTravel(prime_start); + } +} + +} // namespace cura diff --git a/src/PrimeTower/PrimeTowerInterleaved.cpp b/src/PrimeTower/PrimeTowerInterleaved.cpp new file mode 100644 index 0000000000..854f205e2c --- /dev/null +++ b/src/PrimeTower/PrimeTowerInterleaved.cpp @@ -0,0 +1,137 @@ +// Copyright (c) 2024 UltiMaker +// CuraEngine is released under the terms of the AGPLv3 or higher. + +#include "PrimeTower/PrimeTowerInterleaved.h" + +#include "Application.h" +#include "LayerPlan.h" +#include "Scene.h" +#include "Slice.h" +#include "sliceDataStorage.h" + +namespace cura +{ + +PrimeTowerInterleaved::PrimeTowerInterleaved() + : PrimeTower() +{ +} + +ExtruderPrime PrimeTowerInterleaved::getExtruderPrime( + const std::vector& extruder_is_used_on_this_layer, + size_t extruder_nr, + size_t last_extruder, + const SliceDataStorage& /*storage*/, + const LayerIndex& /*layer_nr*/) const +{ + // For now, just calculate prime or not. Support extrusion requires the whole extruders list to be calculted, and + // will be processed later. + if (extruderRequiresPrime(extruder_is_used_on_this_layer, extruder_nr, last_extruder)) + { + return ExtruderPrime::Prime; + } + else + { + return ExtruderPrime::None; + } +} + +std::map> PrimeTowerInterleaved::generateToolPaths(const LayerVector>& extruders_use) +{ + const Scene& scene = Application::getInstance().current_slice_->scene; + const Settings& mesh_group_settings = scene.current_mesh_group->settings; + const coord_t tower_radius = mesh_group_settings.get("prime_tower_size") / 2; + const coord_t min_shell_thickness = mesh_group_settings.get("prime_tower_min_shell_thickness"); + coord_t shell_thickness = 0; + std::map> toolpaths; + + // Loop from top bo bottom, so that the required support increases with what is actually required + for (auto iterator = extruders_use.rbegin(); iterator != extruders_use.rend(); ++iterator) + { + const LayerIndex layer_nr = extruders_use.getLayer(iterator); + const std::vector& extruders_use_at_layer = extruders_use[layer_nr]; + std::vector toolpaths_at_layer; + size_t last_extruder_support = 0; + + // Generate actual priming patterns + coord_t prime_next_outer_radius = tower_radius; + for (const ExtruderUse& extruder_use : extruders_use_at_layer) + { + if (extruder_use.prime == ExtruderPrime::Prime) + { + ExtruderToolPaths extruder_toolpaths; + extruder_toolpaths.outer_radius = prime_next_outer_radius; + extruder_toolpaths.extruder_nr = extruder_use.extruder_nr; + + std::tie(extruder_toolpaths.toolpaths, extruder_toolpaths.inner_radius) = generatePrimeToolpaths(extruder_use.extruder_nr, prime_next_outer_radius); + toolpaths_at_layer.push_back(extruder_toolpaths); + + prime_next_outer_radius = extruder_toolpaths.inner_radius; + } + else if (extruder_use.prime == ExtruderPrime::Support) + { + last_extruder_support = extruder_use.extruder_nr; + } + } + + // Increase shell thickness if required + const coord_t layer_prime_thickness = tower_radius - prime_next_outer_radius; + shell_thickness = std::max(shell_thickness, layer_prime_thickness); + + if (shell_thickness > 0) + { + shell_thickness = std::max(shell_thickness, min_shell_thickness); + + // Generate extra inner support if required + const coord_t inner_support_radius = tower_radius - shell_thickness; + if (inner_support_radius < prime_next_outer_radius) + { + if (toolpaths_at_layer.empty()) + { + toolpaths_at_layer.push_back(ExtruderToolPaths{ last_extruder_support, ClosedLinesSet(), prime_next_outer_radius, inner_support_radius }); + } + + ExtruderToolPaths& last_extruder_toolpaths = toolpaths_at_layer.back(); + ClosedLinesSet support_toolpaths = generateSupportToolpaths(last_extruder_toolpaths.extruder_nr, prime_next_outer_radius, inner_support_radius); + last_extruder_toolpaths.toolpaths.push_back(support_toolpaths); + last_extruder_toolpaths.outer_radius = prime_next_outer_radius; + last_extruder_toolpaths.inner_radius = inner_support_radius; + } + + toolpaths[layer_nr] = toolpaths_at_layer; + } + } + + return toolpaths; +} + +void PrimeTowerInterleaved::polishExtrudersUses(LayerVector>& extruders_use, const size_t start_extruder) +{ + size_t last_used_extruder = start_extruder; + + // Loop through the extruders uses from bottom to top to find the last used extruder at each layer, and make sure we always have some support to print + for (auto iterator = extruders_use.begin(); iterator != extruders_use.end(); ++iterator) + { + std::vector& extruders_use_at_layer = *iterator; + + // Make sure we always have something to print + if (extruders_use_at_layer.empty()) + { + extruders_use_at_layer.push_back(ExtruderUse{ last_used_extruder, ExtruderPrime::Support }); + } + else if (std::all_of( + extruders_use_at_layer.begin(), + extruders_use_at_layer.end(), + [](const ExtruderUse& extruder_use) + { + return extruder_use.prime == ExtruderPrime::None; + })) + { + extruders_use_at_layer.back().prime = ExtruderPrime::Support; + } + + last_used_extruder = extruders_use_at_layer.back().extruder_nr; + } +} + +} // namespace cura diff --git a/src/PrimeTower/PrimeTowerNormal.cpp b/src/PrimeTower/PrimeTowerNormal.cpp new file mode 100644 index 0000000000..1ce002eaf8 --- /dev/null +++ b/src/PrimeTower/PrimeTowerNormal.cpp @@ -0,0 +1,123 @@ +// Copyright (c) 2024 UltiMaker +// CuraEngine is released under the terms of the AGPLv3 or higher. + +#include "PrimeTower/PrimeTowerNormal.h" + +#include "Application.h" +#include "LayerPlan.h" +#include "Scene.h" +#include "Slice.h" +#include "sliceDataStorage.h" + +namespace cura +{ + +PrimeTowerNormal::PrimeTowerNormal(const std::vector& used_extruders) + : PrimeTower() + , used_extruders_(used_extruders) +{ +} + +ExtruderPrime PrimeTowerNormal::getExtruderPrime( + const std::vector& extruder_is_used_on_this_layer, + size_t extruder_nr, + size_t last_extruder, + const SliceDataStorage& storage, + const LayerIndex& layer_nr) const +{ + if (extruderRequiresPrime(extruder_is_used_on_this_layer, extruder_nr, last_extruder)) + { + return ExtruderPrime::Prime; + } + else if (layer_nr <= storage.max_print_height_second_to_last_extruder) + { + return ExtruderPrime::Support; + } + else + { + return ExtruderPrime::None; + } +} + +std::map> PrimeTowerNormal::generateToolPaths(const LayerVector>& extruders_use) +{ + const Scene& scene = Application::getInstance().current_slice_->scene; + const Settings& mesh_group_settings = scene.current_mesh_group->settings; + const coord_t tower_radius = mesh_group_settings.get("prime_tower_size") / 2; + std::map> toolpaths; + + // First take all the used extruders numbers, unsorted + std::vector extruder_order = used_extruders_; + + // Then sort from high adhesion to low adhesion. This will give us the outside to inside extruder processing order. + std::sort( + extruder_order.begin(), + extruder_order.end(), + [&scene](const size_t extruder_nr_a, const size_t extruder_nr_b) + { + const Ratio adhesion_a = scene.extruders[extruder_nr_a].settings_.get("material_adhesion_tendency"); + const Ratio adhesion_b = scene.extruders[extruder_nr_b].settings_.get("material_adhesion_tendency"); + return adhesion_a < adhesion_b; + }); + + // For each extruder, generate the prime and support patterns, which will always be the same across layers + coord_t current_radius = tower_radius; + std::map extruders_prime_toolpaths; + std::map extruders_support_toolpaths; + for (size_t extruder_nr : extruder_order) + { + ExtruderToolPaths extruder_prime_toolpaths; + extruder_prime_toolpaths.extruder_nr = extruder_nr; + extruder_prime_toolpaths.outer_radius = current_radius; + std::tie(extruder_prime_toolpaths.toolpaths, extruder_prime_toolpaths.inner_radius) = generatePrimeToolpaths(extruder_nr, current_radius); + extruders_prime_toolpaths[extruder_nr] = extruder_prime_toolpaths; + + ExtruderToolPaths extruder_support_toolpaths = extruder_prime_toolpaths; + extruder_support_toolpaths.toolpaths = generateSupportToolpaths(extruder_nr, current_radius, extruder_prime_toolpaths.inner_radius); + extruders_support_toolpaths[extruder_nr] = extruder_support_toolpaths; + + current_radius = extruder_prime_toolpaths.inner_radius; + } + + // Now fill the extruders toolpaths according to their use + for (auto iterator = extruders_use.begin(); iterator != extruders_use.end(); ++iterator) + { + const LayerIndex layer_nr = extruders_use.getLayer(iterator); + std::vector extruders_use_at_layer = *iterator; + + // Sort to fit the global order, in order to insert the toolpaths in outside to inside order + std::sort( + extruders_use_at_layer.begin(), + extruders_use_at_layer.end(), + [extruder_order](const ExtruderUse& extruder_use1, const ExtruderUse& extruder_use2) + { + return std::find(extruder_order.begin(), extruder_order.end(), extruder_use1.extruder_nr) + < std::find(extruder_order.begin(), extruder_order.end(), extruder_use2.extruder_nr); + }); + + // Now put the proper toolpaths for each extruder use + std::vector toolpaths_at_layer; + for (const ExtruderUse& extruder_use : extruders_use_at_layer) + { + switch (extruder_use.prime) + { + case ExtruderPrime::None: + break; + + case ExtruderPrime::Prime: + toolpaths_at_layer.push_back(extruders_prime_toolpaths[extruder_use.extruder_nr]); + break; + + case ExtruderPrime::Support: + toolpaths_at_layer.push_back(extruders_support_toolpaths[extruder_use.extruder_nr]); + break; + } + } + + toolpaths[layer_nr] = toolpaths_at_layer; + } + + return toolpaths; +} + +} // namespace cura diff --git a/src/SkeletalTrapezoidation.cpp b/src/SkeletalTrapezoidation.cpp index 887059324d..3b248bd9ff 100644 --- a/src/SkeletalTrapezoidation.cpp +++ b/src/SkeletalTrapezoidation.cpp @@ -3,7 +3,7 @@ #include "SkeletalTrapezoidation.h" -#include +#include #include #include #include @@ -17,6 +17,7 @@ #include "utils/VoronoiUtils.h" #include "utils/linearAlg2D.h" #include "utils/macros.h" +#include "utils/polygonUtils.h" #define SKELETAL_TRAPEZOIDATION_BEAD_SEARCH_MAX \ 1000 // A limit to how long it'll keep searching for adjacent beads. Increasing will re-use beadings more often (saving performance), but search longer for beading (costing @@ -370,7 +371,7 @@ void SkeletalTrapezoidation::computeSegmentCellRange( } SkeletalTrapezoidation::SkeletalTrapezoidation( - const Polygons& polys, + const Shape& polys, const BeadingStrategy& beading_strategy, AngleRadians transitioning_angle, coord_t discretization_step_size, @@ -392,7 +393,7 @@ SkeletalTrapezoidation::SkeletalTrapezoidation( constructFromPolygons(polys); } -void SkeletalTrapezoidation::constructFromPolygons(const Polygons& polys) +void SkeletalTrapezoidation::constructFromPolygons(const Shape& polys) { vd_edge_to_he_edge_.clear(); vd_node_to_he_node_.clear(); @@ -402,7 +403,7 @@ void SkeletalTrapezoidation::constructFromPolygons(const Polygons& polys) std::vector segments; for (size_t poly_idx = 0; poly_idx < polys.size(); poly_idx++) { - ConstPolygonRef poly = polys[poly_idx]; + const Polygon& poly = polys[poly_idx]; for (size_t point_idx = 0; point_idx < poly.size(); point_idx++) { segments.emplace_back(&polys, poly_idx, point_idx); @@ -544,27 +545,27 @@ void SkeletalTrapezoidation::generateToolpaths(std::vector& scripta::CellVDI{ "is_central", [](const auto& edge) { - return static_cast(edge.data.is_central); + return static_cast(edge.data_.is_central); } }, scripta::CellVDI{ "type", [](const auto& edge) { - return static_cast(edge.data.type); + return static_cast(edge.data_.type_); } }, scripta::PointVDI{ "distance_to_boundary", [](const auto& node) { - return node->data.distance_to_boundary; + return node->data_.distance_to_boundary_; } }, scripta::PointVDI{ "bead_count", [](const auto& node) { - return node->data.bead_count; + return node->data_.bead_count_; } }, scripta::PointVDI{ "transition_ratio", [](const auto& node) { - return node->data.transition_ratio; + return node->data_.transition_ratio_; } }); filterNoncentralRegions(); @@ -576,27 +577,27 @@ void SkeletalTrapezoidation::generateToolpaths(std::vector& scripta::CellVDI{ "is_central", [](const auto& edge) { - return static_cast(edge.data.is_central); + return static_cast(edge.data_.is_central); } }, scripta::CellVDI{ "type", [](const auto& edge) { - return static_cast(edge.data.type); + return static_cast(edge.data_.type_); } }, scripta::PointVDI{ "distance_to_boundary", [](const auto& node) { - return node->data.distance_to_boundary; + return node->data_.distance_to_boundary_; } }, scripta::PointVDI{ "bead_count", [](const auto& node) { - return node->data.bead_count; + return node->data_.bead_count_; } }, scripta::PointVDI{ "transition_ratio", [](const auto& node) { - return node->data.transition_ratio; + return node->data_.transition_ratio_; } }); generateTransitioningRibs(); @@ -608,27 +609,27 @@ void SkeletalTrapezoidation::generateToolpaths(std::vector& scripta::CellVDI{ "is_central", [](const auto& edge) { - return static_cast(edge.data.is_central); + return static_cast(edge.data_.is_central); } }, scripta::CellVDI{ "type", [](const auto& edge) { - return static_cast(edge.data.type); + return static_cast(edge.data_.type_); } }, scripta::PointVDI{ "distance_to_boundary", [](const auto& node) { - return node->data.distance_to_boundary; + return node->data_.distance_to_boundary_; } }, scripta::PointVDI{ "bead_count", [](const auto& node) { - return node->data.bead_count; + return node->data_.bead_count_; } }, scripta::PointVDI{ "transition_ratio", [](const auto& node) { - return node->data.transition_ratio; + return node->data_.transition_ratio_; } }); generateExtraRibs(); @@ -640,27 +641,27 @@ void SkeletalTrapezoidation::generateToolpaths(std::vector& scripta::CellVDI{ "is_central", [](const auto& edge) { - return static_cast(edge.data.is_central); + return static_cast(edge.data_.is_central); } }, scripta::CellVDI{ "type", [](const auto& edge) { - return static_cast(edge.data.type); + return static_cast(edge.data_.type_); } }, scripta::PointVDI{ "distance_to_boundary", [](const auto& node) { - return node->data.distance_to_boundary; + return node->data_.distance_to_boundary_; } }, scripta::PointVDI{ "bead_count", [](const auto& node) { - return node->data.bead_count; + return node->data_.bead_count_; } }, scripta::PointVDI{ "transition_ratio", [](const auto& node) { - return node->data.transition_ratio; + return node->data_.transition_ratio_; } }); generateSegments(); @@ -672,27 +673,27 @@ void SkeletalTrapezoidation::generateToolpaths(std::vector& scripta::CellVDI{ "is_central", [](const auto& edge) { - return static_cast(edge.data.is_central); + return static_cast(edge.data_.is_central); } }, scripta::CellVDI{ "type", [](const auto& edge) { - return static_cast(edge.data.type); + return static_cast(edge.data_.type_); } }, scripta::PointVDI{ "distance_to_boundary", [](const auto& node) { - return node->data.distance_to_boundary; + return node->data_.distance_to_boundary_; } }, scripta::PointVDI{ "bead_count", [](const auto& node) { - return node->data.bead_count; + return node->data_.bead_count_; } }, scripta::PointVDI{ "transition_ratio", [](const auto& node) { - return node->data.transition_ratio; + return node->data_.transition_ratio_; } }); } @@ -2184,39 +2185,83 @@ void SkeletalTrapezoidation::generateLocalMaximaSingleBeads() { std::vector& generated_toolpaths = *p_generated_toolpaths; - for (auto& node : graph_.nodes) + const auto addCircleToToolpath = [&](const Point2LL& center, coord_t width, size_t inset_index) + { + if (inset_index >= generated_toolpaths.size()) + { + generated_toolpaths.resize(inset_index + 1); + } + constexpr bool is_odd = true; + generated_toolpaths[inset_index].emplace_back(inset_index, is_odd); + ExtrusionLine& line = generated_toolpaths[inset_index].back(); + // total area to be extruded is pi*(w/2)^2 = pi*w*w/4 + // Width a constant extrusion width w, that would be a length of pi*w/4 + // If we make a small circle to fill up the hole, then that circle would have a circumference of 2*pi*r + // So our circle needs to be such that r=w/8 + const coord_t r = width / 8; + constexpr coord_t n_segments = 6; + const auto circle = PolygonUtils::makeCircle, true>(center, r, n_segments, width, inset_index); + line.junctions_.insert(line.junctions_.end(), circle.begin(), circle.end()); + }; + + Point2LL local_maxima_accumulator; + coord_t width_accumulator = 0; + size_t accumulator_count = 0; + + for (const auto& node : graph_.nodes) { if (! node.data_.hasBeading()) { continue; } - Beading& beading = node.data_.getBeading()->beading_; - if (beading.bead_widths.size() % 2 == 1 && node.isLocalMaximum(true) && ! node.isCentral()) + const Beading& beading = node.data_.getBeading()->beading_; + if (beading.bead_widths.size() % 2 == 1 && node.isLocalMaximum(true)) { const size_t inset_index = beading.bead_widths.size() / 2; - constexpr bool is_odd = true; - if (inset_index >= generated_toolpaths.size()) + const coord_t width = beading.bead_widths[inset_index]; + local_maxima_accumulator += node.p_; + width_accumulator += width; + ++accumulator_count; + if (! node.isCentral()) { - generated_toolpaths.resize(inset_index + 1); + addCircleToToolpath(node.p_, width, inset_index); } - generated_toolpaths[inset_index].emplace_back(inset_index, is_odd); - ExtrusionLine& line = generated_toolpaths[inset_index].back(); - const coord_t width = beading.bead_widths[inset_index]; - // total area to be extruded is pi*(w/2)^2 = pi*w*w/4 - // Width a constant extrusion width w, that would be a length of pi*w/4 - // If we make a small circle to fill up the hole, then that circle would have a circumference of 2*pi*r - // So our circle needs to be such that r=w/8 - const coord_t r = width / 8; - constexpr coord_t n_segments = 6; - for (coord_t segment = 0; segment < n_segments; segment++) + } + } + + if (accumulator_count > 0) + { + bool replace_with_local_maxima = generated_toolpaths.empty() || generated_toolpaths[0].empty(); + coord_t total_path_length = 0; + if (! replace_with_local_maxima) + { + coord_t min_width = std::numeric_limits::max(); + for (const auto& line : generated_toolpaths[0]) { - double a = 2.0 * std::numbers::pi / n_segments * segment; - line.junctions_.emplace_back(node.p_ + Point2LL(r * cos(a), r * sin(a)), width, inset_index); + total_path_length += line.length(); + for (const ExtrusionJunction& j : line) + { + min_width = std::min(min_width, j.w_); + } } + replace_with_local_maxima |= total_path_length <= min_width / 2; + } + if (replace_with_local_maxima) + { + const coord_t width = width_accumulator / accumulator_count; + local_maxima_accumulator = local_maxima_accumulator / accumulator_count; + if (generated_toolpaths.empty()) + { + generated_toolpaths.emplace_back(); + } + else + { + generated_toolpaths[0].clear(); + } + addCircleToToolpath(local_maxima_accumulator, width, 0); } } } - // // ^^^^^^^^^^^^^^^^^^^^^ // TOOLPATH GENERATION diff --git a/src/SkirtBrim.cpp b/src/SkirtBrim.cpp index a2b67503ec..ba399fb721 100644 --- a/src/SkirtBrim.cpp +++ b/src/SkirtBrim.cpp @@ -8,12 +8,14 @@ #include "Application.h" #include "ExtruderTrain.h" #include "Slice.h" +#include "geometry/OpenPolyline.h" +#include "geometry/Shape.h" #include "settings/EnumSettings.h" #include "settings/types/Ratio.h" #include "sliceDataStorage.h" #include "support.h" -#include "utils/PolylineStitcher.h" -#include "utils/Simplify.h" //Simplifying the brim/skirt at every inset. +#include "utils/MixedPolylineStitcher.h" +#include "utils/Simplify.h" namespace cura { @@ -21,21 +23,27 @@ namespace cura SkirtBrim::SkirtBrim(SliceDataStorage& storage) : storage_(storage) , adhesion_type_(Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("adhesion_type")) - , has_ooze_shield_(storage.oozeShield.size() > 0 && storage.oozeShield[0].size() > 0) + , has_ooze_shield_(storage.ooze_shield.size() > 0 && storage.ooze_shield[0].size() > 0) , has_draft_shield_(storage.draft_protection_shield.size() > 0) , extruders_(Application::getInstance().current_slice_->scene.extruders) , extruder_count_(extruders_.size()) - , extruder_is_used_(storage.getExtrudersUsed()) + , extruders_configs_(extruder_count_) { - first_used_extruder_nr_ = 0; - for (int extruder_nr = 0; extruder_nr < extruder_count_; extruder_nr++) + const std::vector used_extruders = storage.getExtrudersUsed(); + + std::optional first_used_extruder_nr; + for (size_t extruder_nr = 0; extruder_nr < extruder_count_; extruder_nr++) { - if (extruder_is_used_[extruder_nr]) + const bool extruder_is_used = used_extruders[extruder_nr]; + extruders_configs_[extruder_nr].extruder_is_used_ = extruder_is_used; + if (extruder_is_used && ! first_used_extruder_nr.has_value()) { - first_used_extruder_nr_ = extruder_nr; - break; + first_used_extruder_nr = extruder_nr; } } + first_used_extruder_nr_ = first_used_extruder_nr.value_or(0); + + skirt_brim_extruder_nr_ = Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("skirt_brim_extruder_nr"); if (skirt_brim_extruder_nr_ == -1 && adhesion_type_ == EPlatformAdhesion::SKIRT) { // Skirt is always printed with all extruders in order to satisfy minimum legnth constraint @@ -43,28 +51,27 @@ SkirtBrim::SkirtBrim(SliceDataStorage& storage) skirt_brim_extruder_nr_ = first_used_extruder_nr_; } - line_widths_.resize(extruder_count_); - skirt_brim_minimal_length_.resize(extruder_count_); - external_polys_only_.resize(extruder_count_); - line_count_.resize(extruder_count_); - gap_.resize(extruder_count_); - for (int extruder_nr = 0; extruder_nr < extruder_count_; extruder_nr++) + for (size_t extruder_nr = 0; extruder_nr < extruder_count_; extruder_nr++) { - if (! extruder_is_used_[extruder_nr]) + ExtruderConfig& extruder_config = extruders_configs_[extruder_nr]; + if (! extruder_config.extruder_is_used_) { continue; } - const ExtruderTrain& extruder = extruders_[extruder_nr]; - line_widths_[extruder_nr] = extruder.settings_.get("skirt_brim_line_width") * extruder.settings_.get("initial_layer_line_width_factor"); - skirt_brim_minimal_length_[extruder_nr] = extruder.settings_.get("skirt_brim_minimal_length"); - external_polys_only_[extruder_nr] = adhesion_type_ == EPlatformAdhesion::SKIRT || extruder.settings_.get("brim_outside_only"); - line_count_[extruder_nr] = extruder.settings_.get(adhesion_type_ == EPlatformAdhesion::BRIM ? "brim_line_count" : "skirt_line_count"); - gap_[extruder_nr] = extruder.settings_.get(adhesion_type_ == EPlatformAdhesion::BRIM ? "brim_gap" : "skirt_gap"); + const ExtruderTrain& extruder = extruders_[extruder_nr]; + const BrimLocation location = extruder.settings_.get("brim_location"); + + extruder_config.line_width_ = extruder.settings_.get("skirt_brim_line_width") * extruder.settings_.get("initial_layer_line_width_factor"); + extruder_config.skirt_brim_minimal_length_ = extruder.settings_.get("skirt_brim_minimal_length"); + extruder_config.outside_polys_ = adhesion_type_ == EPlatformAdhesion::SKIRT || (location & BrimLocation::OUTSIDE); + extruder_config.inside_polys_ = adhesion_type_ == EPlatformAdhesion::BRIM && (location & BrimLocation::INSIDE); + extruder_config.line_count_ = extruder.settings_.get(adhesion_type_ == EPlatformAdhesion::BRIM ? "brim_line_count" : "skirt_line_count"); + extruder_config.gap_ = extruder.settings_.get(adhesion_type_ == EPlatformAdhesion::BRIM ? "brim_gap" : "skirt_gap"); } } -std::vector SkirtBrim::generateBrimOffsetPlan(std::vector& starting_outlines) +std::vector SkirtBrim::generateBrimOffsetPlan(std::vector& starting_outlines) { std::vector all_brim_offsets; @@ -76,7 +83,7 @@ std::vector SkirtBrim::generateBrimOffsetPlan(std::vector SkirtBrim::generateBrimOffsetPlan(std::vector= 0 && extruder_nr != skirt_brim_extruder_nr_) || starting_outlines[extruder_nr].empty()) + const ExtruderConfig& extruder_config = extruders_configs_[extruder_nr]; + const coord_t semi_line_width = extruder_config.line_width_ / 2; + + if (! extruder_config.extruder_is_used_ || (skirt_brim_extruder_nr_ >= 0 && extruder_nr != skirt_brim_extruder_nr_) || starting_outlines[extruder_nr].empty()) { continue; // only include offsets for brim extruder } - for (int line_idx = 0; line_idx < line_count_[extruder_nr]; line_idx++) + for (int line_idx = 0; line_idx < extruder_config.line_count_; line_idx++) { - const bool is_last = line_idx == line_count_[extruder_nr] - 1; - coord_t offset = gap_[extruder_nr] + line_widths_[extruder_nr] / 2 + line_widths_[extruder_nr] * line_idx; + const bool is_last = line_idx == extruder_config.line_count_ - 1; + coord_t offset = extruder_config.gap_ + semi_line_width + extruder_config.line_width_ * line_idx; if (line_idx == 0) { - all_brim_offsets.emplace_back(&starting_outlines[extruder_nr], external_polys_only_[extruder_nr], offset, offset, line_idx, extruder_nr, is_last); + all_brim_offsets + .emplace_back(&starting_outlines[extruder_nr], extruder_config.outside_polys_, extruder_config.inside_polys_, offset, offset, line_idx, extruder_nr, is_last); } else { - all_brim_offsets.emplace_back(line_idx - 1, external_polys_only_[extruder_nr], line_widths_[extruder_nr], offset, line_idx, extruder_nr, is_last); + all_brim_offsets + .emplace_back(line_idx - 1, extruder_config.outside_polys_, extruder_config.inside_polys_, extruder_config.line_width_, offset, line_idx, extruder_nr, is_last); } } } @@ -112,40 +124,17 @@ std::vector SkirtBrim::generateBrimOffsetPlan(std::vector starting_outlines(extruder_count_); + std::vector starting_outlines(extruder_count_); std::vector all_brim_offsets = generateBrimOffsetPlan(starting_outlines); - - constexpr LayerIndex layer_nr = 0; - constexpr bool include_support = true; - const bool include_prime_tower = adhesion_type_ == EPlatformAdhesion::SKIRT; - const bool has_prime_tower = storage_.primeTower.enabled_; - Polygons covered_area = storage_.getLayerOutlines(layer_nr, include_support, include_prime_tower, /*external_polys_only*/ false); - - std::vector allowed_areas_per_extruder(extruder_count_); - for (int extruder_nr = 0; extruder_nr < extruder_count_; extruder_nr++) - { - if (! extruder_is_used_[extruder_nr]) - { - continue; - } - Polygons machine_area = storage_.getMachineBorder(extruder_nr); - allowed_areas_per_extruder[extruder_nr] = machine_area.difference(covered_area); - if (external_polys_only_[extruder_nr]) - { - // Expand covered area on inside of holes when external_only is enabled for any extruder, - // so that the brim lines don't overlap with the holes by half the line width - allowed_areas_per_extruder[extruder_nr] = allowed_areas_per_extruder[extruder_nr].difference(getInternalHoleExclusionArea(covered_area, extruder_nr)); - } - - if (has_prime_tower) - { - allowed_areas_per_extruder[extruder_nr] = allowed_areas_per_extruder[extruder_nr].difference(storage_.primeTower.getGroundPoly()); - } - } + std::vector allowed_areas_per_extruder = generateAllowedAreas(starting_outlines); // Apply 'approximate convex hull' if the adhesion is skirt _after_ any skirt but also prime-tower-brim adhesion. // Otherwise, the now expanded convex hull covered areas will mess with that brim. Fortunately this does not mess // with the other area calculation above, since they are either itself a simple/convex shape or relevant for brim. + Shape covered_area = storage_.getLayerOutlines( + 0, + /*include_support*/ true, + /*include_prime_tower*/ adhesion_type_ == EPlatformAdhesion::SKIRT); if (adhesion_type_ == EPlatformAdhesion::SKIRT) { covered_area = covered_area.approxConvexHull(); @@ -164,25 +153,24 @@ void SkirtBrim::generate() } } - // Secondary brim of all other materials which don;t meet minimum length constriant yet + // Secondary brim of all other materials which don't meet minimum length constraint yet generateSecondarySkirtBrim(covered_area, allowed_areas_per_extruder, total_length); // simplify paths to prevent buffer unnerruns in firmware const Settings& global_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; const coord_t maximum_resolution = global_settings.get("meshfix_maximum_resolution"); const coord_t maximum_deviation = global_settings.get("meshfix_maximum_deviation"); + constexpr coord_t max_area_dev = 0u; // No area deviation applied for (int extruder_nr = 0; extruder_nr < extruder_count_; extruder_nr++) { - for (SkirtBrimLine& line : storage_.skirt_brim[extruder_nr]) + for (MixedLinesSet& lines : storage_.skirt_brim[extruder_nr]) { - constexpr coord_t max_area_dev = 0u; // No area deviation applied - line.open_polylines = Simplify(maximum_resolution, maximum_deviation, max_area_dev).polyline(line.open_polylines); - line.closed_polygons = Simplify(maximum_resolution, maximum_deviation, max_area_dev).polygon(line.closed_polygons); + lines = Simplify(maximum_resolution, maximum_deviation, max_area_dev).polyline(lines); } } } -std::vector SkirtBrim::generatePrimaryBrim(std::vector& all_brim_offsets, Polygons& covered_area, std::vector& allowed_areas_per_extruder) +std::vector SkirtBrim::generatePrimaryBrim(std::vector& all_brim_offsets, Shape& covered_area, std::vector& allowed_areas_per_extruder) { std::vector total_length(extruder_count_, 0U); @@ -193,7 +181,7 @@ std::vector SkirtBrim::generatePrimaryBrim(std::vector& all_bri { storage_.skirt_brim[offset.extruder_nr_].resize(offset.inset_idx_ + 1); } - SkirtBrimLine& output_location = storage_.skirt_brim[offset.extruder_nr_][offset.inset_idx_]; + MixedLinesSet& output_location = storage_.skirt_brim[offset.extruder_nr_][offset.inset_idx_]; const coord_t added_length = generateOffset(offset, covered_area, allowed_areas_per_extruder, output_location); if (added_length == 0) @@ -202,7 +190,9 @@ std::vector SkirtBrim::generatePrimaryBrim(std::vector& all_bri } total_length[offset.extruder_nr_] += added_length; - if (offset.is_last_ && total_length[offset.extruder_nr_] < skirt_brim_minimal_length_[offset.extruder_nr_] + const ExtruderConfig& extruder_config = extruders_configs_[offset.extruder_nr_]; + + if (offset.is_last_ && total_length[offset.extruder_nr_] < extruder_config.skirt_brim_minimal_length_ && // This was the last offset of this extruder, but the brim lines don't meet minimal length yet total_length[offset.extruder_nr_] > 0u // No lines got added; we have no extrusion lines to build on ) @@ -211,9 +201,10 @@ std::vector SkirtBrim::generatePrimaryBrim(std::vector& all_bri constexpr bool is_last = true; all_brim_offsets.emplace_back( offset.inset_idx_, - external_polys_only_[offset.extruder_nr_], - line_widths_[offset.extruder_nr_], - offset.total_offset_ + line_widths_[offset.extruder_nr_], + extruder_config.outside_polys_, + extruder_config.inside_polys_, + extruder_config.line_width_, + offset.total_offset_ + extruder_config.line_width_, offset.inset_idx_ + 1, offset.extruder_nr_, is_last); @@ -223,123 +214,79 @@ std::vector SkirtBrim::generatePrimaryBrim(std::vector& all_bri return total_length; } -Polygons SkirtBrim::getInternalHoleExclusionArea(const Polygons& outline, const int extruder_nr) -{ - assert(extruder_nr >= 0); - const Settings& settings = Application::getInstance().current_slice_->scene.extruders[extruder_nr].settings_; - // If brim is external_only, the distance between the external brim of a part inside a hole and the inside hole of the outer part. - const coord_t hole_brim_distance = settings.get("brim_inside_margin"); - - Polygons ret; - std::vector parts = outline.splitIntoParts(); - for (const PolygonsPart& part : parts) - { - for (size_t hole_idx = 1; hole_idx < part.size(); hole_idx++) - { - Polygon hole_poly = part[hole_idx]; - hole_poly.reverse(); - Polygons disallowed_region = hole_poly.offset(10u).difference(hole_poly.offset(-line_widths_[extruder_nr] / 2 - hole_brim_distance)); - ret = ret.unionPolygons(disallowed_region); - } - } - return ret; -} - -coord_t SkirtBrim::generateOffset(const Offset& offset, Polygons& covered_area, std::vector& allowed_areas_per_extruder, SkirtBrimLine& result) +coord_t SkirtBrim::generateOffset(const Offset& offset, Shape& covered_area, std::vector& allowed_areas_per_extruder, MixedLinesSet& result) { coord_t length_added; - Polygons brim; - Polygons newly_covered; + Shape brim; + const ExtruderConfig& extruder_config = extruders_configs_[offset.extruder_nr_]; + + if (std::holds_alternative(offset.reference_outline_or_index_)) { - if (std::holds_alternative(offset.reference_outline_or_index_)) + Shape* reference_outline = std::get(offset.reference_outline_or_index_); + const coord_t offset_value = offset.offset_value_; + for (const Polygon& polygon : *reference_outline) { - Polygons* reference_outline = std::get(offset.reference_outline_or_index_); - if (offset.external_only_) - { // prevent unioning of external polys enclosed by other parts, e.g. a small part inside a hollow cylinder. - for (Polygons& polys : reference_outline->sortByNesting()) - { // offset external polygons of islands contained within another part in each batch - for (PolygonRef poly : polys) - { - if (poly.area() < 0) - { - poly.reverse(); - } - } - brim.add(polys.offset(offset.offset_value_, ClipperLib::jtRound)); - newly_covered.add(polys.offset(offset.offset_value_ + line_widths_[offset.extruder_nr_] / 2, ClipperLib::jtRound)); - for (PolygonRef poly : polys) - { - poly.reverse(); - } - newly_covered.add(polys); // don't remove area inside external polygon - } + const double area = polygon.area(); + if (area > 0 && offset.outside_) + { + brim.push_back(polygon.offset(offset_value, ClipperLib::jtRound)); } - else + else if (area < 0 && offset.inside_) { - brim = reference_outline->offset(offset.offset_value_, ClipperLib::jtRound); - newly_covered = reference_outline->offset(offset.offset_value_ + line_widths_[offset.extruder_nr_] / 2, ClipperLib::jtRound); + brim.push_back(polygon.offset(-offset_value, ClipperLib::jtRound)); } } - else - { - const int reference_idx = std::get(offset.reference_outline_or_index_); - auto offset_dist = line_widths_[offset.extruder_nr_]; - - Polygons local_brim; - auto closed_polygons_brim = storage_.skirt_brim[offset.extruder_nr_][reference_idx].closed_polygons.offsetPolyLine(offset_dist, ClipperLib::jtRound, true); - local_brim.add(closed_polygons_brim); + } + else + { + const int reference_idx = std::get(offset.reference_outline_or_index_); + const coord_t offset_dist = extruder_config.line_width_; - auto open_polylines_brim = storage_.skirt_brim[offset.extruder_nr_][reference_idx].open_polylines.offsetPolyLine(offset_dist, ClipperLib::jtRound); - local_brim.add(open_polylines_brim); - local_brim.unionPolygons(); + brim.push_back(storage_.skirt_brim[offset.extruder_nr_][reference_idx].offset(offset_dist, ClipperLib::jtRound)); + } - brim.add(local_brim); + // limit brim lines to allowed areas, stitch them and store them in the result + brim = Simplify(Application::getInstance().current_slice_->scene.extruders[offset.extruder_nr_].settings_).polygon(brim); - newly_covered.add(local_brim.offset(offset_dist / 2, ClipperLib::jtRound)); - } - } + OpenLinesSet brim_lines = allowed_areas_per_extruder[offset.extruder_nr_].intersection(brim, false); + length_added = brim_lines.length(); - { // limit brim lines to allowed areas, stitch them and store them in the result - brim = Simplify(Application::getInstance().current_slice_->scene.extruders[offset.extruder_nr_].settings_).polygon(brim); - brim.toPolylines(); - Polygons brim_lines = allowed_areas_per_extruder[offset.extruder_nr_].intersectionPolyLines(brim, false); - length_added = brim_lines.polyLineLength(); + Shape newly_covered = brim_lines.offset(extruder_config.line_width_ / 2 + 10, ClipperLib::jtRound); - const coord_t max_stitch_distance = line_widths_[offset.extruder_nr_]; - PolylineStitcher::stitch(brim_lines, result.open_polylines, result.closed_polygons, max_stitch_distance); + const coord_t max_stitch_distance = extruder_config.line_width_; + MixedPolylineStitcher::stitch(brim_lines, result, max_stitch_distance); - // clean up too small lines - for (size_t line_idx = 0; line_idx < result.open_polylines.size();) - { - PolygonRef line = result.open_polylines[line_idx]; - if (line.shorterThan(min_brim_line_length)) + // clean up too small lines (only open ones, which was done historically but may be a mistake) + result.erase( + std::remove_if( + result.begin(), + result.end(), + [](const PolylinePtr& line) { - result.open_polylines.remove(line_idx); - } - else - { - line_idx++; - } - } - } + if (const std::shared_ptr open_line = dynamic_pointer_cast(line)) + { + return open_line->shorterThan(min_brim_line_length); + } + return false; + }), + result.end()); - { // update allowed_areas_per_extruder - for (int extruder_nr = 0; extruder_nr < extruder_count_; extruder_nr++) + // update allowed_areas_per_extruder + covered_area = covered_area.unionPolygons(newly_covered.unionPolygons()); + for (size_t extruder_nr = 0; extruder_nr < extruder_count_; extruder_nr++) + { + if (extruders_configs_[extruder_nr].extruder_is_used_) { - if (! extruder_is_used_[extruder_nr]) - { - continue; - } - covered_area = covered_area.unionPolygons(newly_covered.unionPolygons()); allowed_areas_per_extruder[extruder_nr] = allowed_areas_per_extruder[extruder_nr].difference(covered_area); } } + return length_added; } -Polygons SkirtBrim::getFirstLayerOutline(const int extruder_nr /* = -1 */) +Shape SkirtBrim::getFirstLayerOutline(const int extruder_nr /* = -1 */) { - Polygons first_layer_outline; + Shape first_layer_outline; Settings& global_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; int reference_extruder_nr = skirt_brim_extruder_nr_; assert(! (reference_extruder_nr == -1 && extruder_nr == -1) && "We should only request the outlines of all layers when the brim is being generated for only one material"); @@ -347,17 +294,12 @@ Polygons SkirtBrim::getFirstLayerOutline(const int extruder_nr /* = -1 */) { reference_extruder_nr = extruder_nr; } - const int primary_line_count = line_count_[reference_extruder_nr]; - const bool external_only - = adhesion_type_ == EPlatformAdhesion::SKIRT || external_polys_only_[reference_extruder_nr]; // Whether to include holes or not. Skirt doesn't have any holes. - const bool has_prime_tower = storage_.primeTower.enabled_; + const ExtruderConfig& reference_extruder_config = extruders_configs_[reference_extruder_nr]; + const int primary_line_count = reference_extruder_config.line_count_; const LayerIndex layer_nr = 0; if (adhesion_type_ == EPlatformAdhesion::SKIRT) { - constexpr bool include_support = true; - const bool include_prime_tower = ! has_prime_tower; // include manually otherwise - - first_layer_outline = Polygons(); + first_layer_outline = Shape(); int skirt_height = 0; for (const auto& extruder : Application::getInstance().current_slice_->scene.extruders) { @@ -370,30 +312,23 @@ Polygons SkirtBrim::getFirstLayerOutline(const int extruder_nr /* = -1 */) for (int i_layer = layer_nr; i_layer < skirt_height; ++i_layer) { - for (const auto& extruder : Application::getInstance().current_slice_->scene.extruders) - { - first_layer_outline - = first_layer_outline.unionPolygons(storage_.getLayerOutlines(i_layer, include_support, include_prime_tower, external_only, extruder.extruder_nr_)); - } - } - - if (has_prime_tower) - { - first_layer_outline = first_layer_outline.unionPolygons(storage_.primeTower.getGroundPoly()); + constexpr bool include_support = true; + constexpr bool include_prime_tower = true; + first_layer_outline = first_layer_outline.unionPolygons(storage_.getLayerOutlines(i_layer, include_support, include_prime_tower, true)); } - Polygons shields; + Shape shields; if (has_ooze_shield_) { - shields = storage_.oozeShield[0]; + shields = storage_.ooze_shield[0]; } if (has_draft_shield_) { shields = shields.unionPolygons(storage_.draft_protection_shield); } first_layer_outline = first_layer_outline.unionPolygons(shields.offset( - line_widths_[reference_extruder_nr] / 2 // because the shield is printed *on* the stored polygons; not inside hteir area - - gap_[reference_extruder_nr])); // so that when we apply the gap we will end up right next to the shield + reference_extruder_config.line_width_ / 2 // because the shield is printed *on* the stored polygons; not inside hteir area + - reference_extruder_config.gap_)); // so that when we apply the gap we will end up right next to the shield // NOTE: offsetting by -gap here and by +gap in the main brim algorithm effectively performs a morphological close, // so in some cases with a large skirt gap and small models and small shield distance // the skirt lines can cross the shield lines. @@ -402,17 +337,12 @@ Polygons SkirtBrim::getFirstLayerOutline(const int extruder_nr /* = -1 */) } else { // add brim underneath support by removing support where there's brim around the model - constexpr bool include_support = false; // Include manually below. - constexpr bool include_prime_tower = false; // Not included. - constexpr bool external_outlines_only = false; // Remove manually below. - first_layer_outline = storage_.getLayerOutlines(layer_nr, include_support, include_prime_tower, external_outlines_only, extruder_nr); + constexpr bool include_support = false; // Don't include the supports yet because we need to reduce them before + constexpr bool include_prime_tower = false; // Not included, has its own brim + constexpr bool external_polys_only = false; // Gather all polygons and treat them separately. + first_layer_outline = storage_.getLayerOutlines(layer_nr, include_support, include_prime_tower, external_polys_only, extruder_nr); first_layer_outline = first_layer_outline.unionPolygons(); // To guard against overlapping outlines, which would produce holes according to the even-odd rule. - Polygons first_layer_empty_holes; - if (external_only) - { - first_layer_empty_holes = first_layer_outline.getEmptyHoles(); - first_layer_outline = first_layer_outline.removeEmptyHoles(); - } + if (storage_.support.generated && primary_line_count > 0 && ! storage_.support.supportLayers.empty() && (extruder_nr == -1 || extruder_nr == global_settings.get("support_infill_extruder_nr"))) { // remove model-brim from support @@ -427,26 +357,47 @@ Polygons SkirtBrim::getFirstLayerOutline(const int extruder_nr /* = -1 */) // || || ||[]|| > expand to fit an extra brim line // |+-+| |+--+| // +---+ +----+ - const coord_t primary_extruder_skirt_brim_line_width = line_widths_[reference_extruder_nr]; - Polygons model_brim_covered_area = first_layer_outline.offset( - primary_extruder_skirt_brim_line_width * (primary_line_count + primary_line_count % 2), - ClipperLib::jtRound); // always leave a gap of an even number of brim lines, so that it fits if it's generating brim from both sides - if (external_only) - { // don't remove support within empty holes where no brim is generated. - model_brim_covered_area.add(first_layer_empty_holes); + const coord_t primary_extruder_skirt_brim_line_width = reference_extruder_config.line_width_; + Shape model_brim_covered_area; + + // always leave a gap of an even number of brim lines, so that it fits if it's generating brim from both sides + const coord_t offset = primary_extruder_skirt_brim_line_width * (primary_line_count + primary_line_count % 2); + + for (const Polygon& polygon : first_layer_outline) + { + // Compute the fringe that the brim is going to cover around the model + Shape outset; + Shape inset; + + double area = polygon.area(); + if (area > 0 && reference_extruder_config.outside_polys_) + { + outset = polygon.offset(offset, ClipperLib::jtRound); + inset.push_back(polygon); + } + else if (area < 0 && reference_extruder_config.inside_polys_) + { + outset.push_back(polygon); + inset = polygon.offset(-offset, ClipperLib::jtRound); + } + + outset = outset.difference(inset); + model_brim_covered_area = model_brim_covered_area.unionPolygons(outset); } + AABB model_brim_covered_area_boundary_box(model_brim_covered_area); support_layer.excludeAreasFromSupportInfillAreas(model_brim_covered_area, model_brim_covered_area_boundary_box); // If the gap between the model and the BP is small enough, support starts with the interface instead, so remove it there as well: support_layer.support_roof = support_layer.support_roof.difference(model_brim_covered_area); } + for (const SupportInfillPart& support_infill_part : support_layer.support_infill_parts) { - first_layer_outline.add(support_infill_part.outline_); + first_layer_outline.push_back(support_infill_part.outline_); } - first_layer_outline.add(support_layer.support_bottom); - first_layer_outline.add(support_layer.support_roof); + first_layer_outline.push_back(support_layer.support_bottom); + first_layer_outline.push_back(support_layer.support_roof); } } constexpr coord_t join_distance = 20; @@ -461,7 +412,7 @@ Polygons SkirtBrim::getFirstLayerOutline(const int extruder_nr /* = -1 */) return first_layer_outline; } -void SkirtBrim::generateShieldBrim(Polygons& brim_covered_area, std::vector& allowed_areas_per_extruder) +void SkirtBrim::generateShieldBrim(Shape& brim_covered_area, std::vector& allowed_areas_per_extruder) { int extruder_nr = skirt_brim_extruder_nr_; if (extruder_nr < 0) @@ -469,11 +420,13 @@ void SkirtBrim::generateShieldBrim(Polygons& brim_covered_area, std::vector 0) { shield_brim = shield_brim.offset(-primary_extruder_skirt_brim_line_width); - storage_.skirt_brim[extruder_nr].back().closed_polygons.add( - shield_brim); // throw all polygons for the shileds onto one heap; because the brim lines are generated from both sides the order will not be important + storage_.skirt_brim[extruder_nr].back().push_back(shield_brim); // throw all polygons for the shileds onto one heap; because the brim lines are + // generated from both sides the order will not be important } } @@ -519,46 +472,56 @@ void SkirtBrim::generateShieldBrim(Polygons& brim_covered_area, std::vector& allowed_areas_per_extruder, std::vector& total_length) +void SkirtBrim::generateSecondarySkirtBrim(Shape& covered_area, std::vector& allowed_areas_per_extruder, std::vector& total_length) { constexpr coord_t bogus_total_offset = 0u; // Doesn't matter. The offsets won't be sorted here. constexpr bool is_last = false; // Doesn't matter. Isn't used in the algorithm below. for (int extruder_nr = 0; extruder_nr < extruder_count_; extruder_nr++) { bool first = true; - Polygons reference_outline = covered_area; - while (total_length[extruder_nr] < skirt_brim_minimal_length_[extruder_nr]) + Shape reference_outline = covered_area; + const ExtruderConfig& extruder_config = extruders_configs_[extruder_nr]; + while (total_length[extruder_nr] < extruder_config.skirt_brim_minimal_length_) { decltype(Offset::reference_outline_or_index_) ref_polys_or_idx = nullptr; coord_t offset_from_reference; if (first) { ref_polys_or_idx = &reference_outline; - offset_from_reference = line_widths_[extruder_nr] / 2; + offset_from_reference = extruder_config.line_width_ / 2; } else { ref_polys_or_idx = static_cast(storage_.skirt_brim[extruder_nr].size() - 1); - offset_from_reference = line_widths_[extruder_nr]; + offset_from_reference = extruder_config.line_width_; } - constexpr bool external_only = false; // The reference outline may contain both outlines and hole polygons. - Offset extra_offset(ref_polys_or_idx, external_only, offset_from_reference, bogus_total_offset, storage_.skirt_brim[extruder_nr].size(), extruder_nr, is_last); + const bool outside_polys = extruder_config.outside_polys_; + const bool inside_polys = extruder_config.inside_polys_; + Offset extra_offset( + ref_polys_or_idx, + outside_polys, + inside_polys, + offset_from_reference, + bogus_total_offset, + storage_.skirt_brim[extruder_nr].size(), + extruder_nr, + is_last); storage_.skirt_brim[extruder_nr].emplace_back(); - SkirtBrimLine& output_location = storage_.skirt_brim[extruder_nr].back(); + MixedLinesSet& output_location = storage_.skirt_brim[extruder_nr].back(); coord_t added_length = generateOffset(extra_offset, covered_area, allowed_areas_per_extruder, output_location); if (! added_length) @@ -574,6 +537,110 @@ void SkirtBrim::generateSecondarySkirtBrim(Polygons& covered_area, std::vector

SkirtBrim::generateAllowedAreas(const std::vector& starting_outlines) const +{ + constexpr LayerIndex layer_nr = 0; + + // For each extruder, pre-compute the areas covered by models/supports/prime tower + struct ExtruderOutlines + { + Shape models_outlines; + Shape supports_outlines; + }; + + std::vector covered_area_by_extruder; + if (adhesion_type_ == EPlatformAdhesion::BRIM) + { + covered_area_by_extruder.resize(extruder_count_); + for (size_t extruder_nr = 0; extruder_nr < extruder_count_; extruder_nr++) + { + if (extruders_configs_[extruder_nr].extruder_is_used_) + { + // Gather models/support/prime tower areas separately to apply different margins + ExtruderOutlines& extruder_outlines = covered_area_by_extruder[extruder_nr]; + constexpr bool external_polys_only = false; + { + constexpr bool include_support = false; + constexpr bool include_prime_tower = false; + constexpr bool include_model = true; + extruder_outlines.models_outlines = storage_.getLayerOutlines(layer_nr, include_support, include_prime_tower, external_polys_only, extruder_nr, include_model); + } + { + constexpr bool include_support = true; + constexpr bool include_prime_tower = true; + constexpr bool include_model = false; + extruder_outlines.supports_outlines + = storage_.getLayerOutlines(layer_nr, include_support, include_prime_tower, external_polys_only, extruder_nr, include_model); + } + } + } + } + + std::vector allowed_areas_per_extruder(extruder_count_); + for (size_t extruder_nr = 0; extruder_nr < extruder_count_; extruder_nr++) + { + const ExtruderConfig& extruder_config = extruders_configs_[extruder_nr]; + + if (! extruder_config.extruder_is_used_) + { + continue; + } + + // Initialize allowed area to full build plate, then remove disallowed areas + Shape& allowed_areas = allowed_areas_per_extruder[extruder_nr]; + allowed_areas = storage_.getMachineBorder(extruder_nr); + + if (adhesion_type_ == EPlatformAdhesion::BRIM) + { + const Settings& settings = Application::getInstance().current_slice_->scene.extruders[extruder_nr].settings_; + const coord_t hole_brim_distance = settings.get("brim_inside_margin"); + + for (size_t other_extruder_nr = 0; other_extruder_nr < covered_area_by_extruder.size(); ++other_extruder_nr) + { + const ExtruderOutlines& extruder_outlines = covered_area_by_extruder[other_extruder_nr]; + const coord_t base_offset = extruder_config.line_width_ / 2; + + // Remove areas covered by models + for (const Polygon& covered_surface : extruder_outlines.models_outlines) + { + coord_t offset = base_offset; + const double covered_area = covered_surface.area(); + + if ((other_extruder_nr == extruder_nr || extruder_nr == skirt_brim_extruder_nr_) + && ((covered_area > 0 && extruder_config.outside_polys_) || (covered_area < 0 && extruder_config.inside_polys_))) + { + // This is an area we are gonna intentionnally print brim in, use the actual gap + offset += extruder_config.gap_ - 50; // Lower margin a bit to avoid discarding legitimate lines + } + else + { + // This is an area we do not expect brim to be printed in, use a larger gap to keep the printed surface clean + offset += hole_brim_distance; + } + + if (covered_area < 0) + { + // Invert offset to make holes grow inside + allowed_areas.push_back(covered_surface.offset(-offset, ClipperLib::jtRound)); + } + else + { + allowed_areas = allowed_areas.difference(covered_surface.offset(offset, ClipperLib::jtRound)); + } + } + + // Remove areas covered by support, with a low margin because we don't care if the brim touches it + allowed_areas = allowed_areas.difference(extruder_outlines.supports_outlines.offset(base_offset - 50)); + } + } + + // Anyway, don't allow a brim/skirt to grow inside itself, which may happen e.g. with ooze shield+skirt + allowed_areas = allowed_areas.difference(starting_outlines[extruder_nr].offset(extruder_config.gap_ - 50, ClipperLib::jtRound)); + } + + return allowed_areas_per_extruder; +} + void SkirtBrim::generateSupportBrim() { constexpr coord_t brim_area_minimum_hole_size_multiplier = 100; @@ -597,20 +664,19 @@ void SkirtBrim::generateSupportBrim() storage_.skirt_brim[support_infill_extruder.extruder_nr_].emplace_back(); } - for (const SkirtBrimLine& brim_line : storage_.skirt_brim[support_infill_extruder.extruder_nr_]) + for (const MixedLinesSet& brim_line : storage_.skirt_brim[support_infill_extruder.extruder_nr_]) { - skirt_brim_length += brim_line.closed_polygons.polygonLength(); - skirt_brim_length += brim_line.open_polylines.polyLineLength(); + skirt_brim_length += brim_line.length(); } SupportLayer& support_layer = storage_.support.supportLayers[0]; - Polygons support_outline; + Shape support_outline; for (SupportInfillPart& part : support_layer.support_infill_parts) { - support_outline.add(part.outline_); + support_outline.push_back(part.outline_); } - const Polygons brim_area = support_outline.difference(support_outline.offset(-brim_width)); + const Shape brim_area = support_outline.difference(support_outline.offset(-brim_width)); support_layer.excludeAreasFromSupportInfillAreas(brim_area, AABB(brim_area)); coord_t offset_distance = brim_line_width / 2; @@ -618,7 +684,7 @@ void SkirtBrim::generateSupportBrim() { offset_distance -= brim_line_width; - Polygons brim_line = support_outline.offset(offset_distance, ClipperLib::jtRound); + Shape brim_line = support_outline.offset(offset_distance, ClipperLib::jtRound); // Remove small inner skirt and brim holes. Holes have a negative area, remove anything smaller then multiplier x extrusion "area" for (size_t n = 0; n < brim_line.size(); n++) @@ -626,18 +692,19 @@ void SkirtBrim::generateSupportBrim() const double area = brim_line[n].area(); if (area < 0 && area > -brim_line_width * brim_line_width * brim_area_minimum_hole_size_multiplier) { - brim_line.remove(n--); + brim_line.removeAt(n--); } } - storage_.support_brim.add(brim_line); + const bool brim_line_empty = brim_line.empty(); // Store before moving + storage_.support_brim.push_back(std::move(brim_line)); // In case of adhesion::NONE length of support brim is only the length of the brims formed for the support - const coord_t length = (adhesion_type_ == EPlatformAdhesion::NONE) ? skirt_brim_length : skirt_brim_length + storage_.support_brim.polygonLength(); + const coord_t length = (adhesion_type_ == EPlatformAdhesion::NONE) ? skirt_brim_length : skirt_brim_length + storage_.support_brim.length(); if (skirt_brim_number + 1 >= line_count && length > 0 && length < minimal_length) // Make brim or skirt have more lines when total length is too small. { line_count++; } - if (brim_line.empty()) + if (brim_line_empty) { // the fist layer of support is fully filled with brim break; } diff --git a/src/Slice.cpp b/src/Slice.cpp index 8b9defa7ad..b9cf81ee6c 100644 --- a/src/Slice.cpp +++ b/src/Slice.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2023 UltiMaker +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher #include "Slice.h" @@ -45,4 +45,4 @@ void Slice::reset() scene.settings = Settings(); } -} // namespace cura \ No newline at end of file +} // namespace cura diff --git a/src/SupportInfillPart.cpp b/src/SupportInfillPart.cpp index fb504f5fb5..fc8e788a81 100644 --- a/src/SupportInfillPart.cpp +++ b/src/SupportInfillPart.cpp @@ -8,7 +8,7 @@ using namespace cura; -SupportInfillPart::SupportInfillPart(const PolygonsPart& outline, coord_t support_line_width, bool use_fractional_config, int inset_count_to_generate, coord_t custom_line_distance) +SupportInfillPart::SupportInfillPart(const SingleShape& outline, coord_t support_line_width, bool use_fractional_config, int inset_count_to_generate, coord_t custom_line_distance) : outline_(outline) , outline_boundary_box_(outline) , support_line_width_(support_line_width) diff --git a/src/TopSurface.cpp b/src/TopSurface.cpp index acbbe94f7d..15a6b03cf8 100644 --- a/src/TopSurface.cpp +++ b/src/TopSurface.cpp @@ -1,10 +1,11 @@ -// Copyright (c) 2023 UltiMaker +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher #include "TopSurface.h" #include "ExtruderTrain.h" #include "LayerPlan.h" +#include "geometry/OpenPolyline.h" #include "infill.h" #include "sliceDataStorage.h" @@ -19,7 +20,7 @@ TopSurface::TopSurface() void TopSurface::setAreasFromMeshAndLayerNumber(SliceMeshStorage& mesh, size_t layer_number) { // The top surface is all parts of the mesh where there's no mesh above it, so find the layer above it first. - Polygons mesh_above; + Shape mesh_above; if (layer_number < mesh.layers.size() - 1) { mesh_above = mesh.layers[layer_number + 1].getOutlines(); @@ -86,7 +87,7 @@ bool TopSurface::ironing(const SliceDataStorage& storage, const SliceMeshStorage // Align the edge of the ironing line with the edge of the outer wall ironing_inset -= ironing_flow * line_width / 2; } - Polygons ironed_areas = areas.offset(ironing_inset); + Shape ironed_areas = areas.offset(ironing_inset); Infill infill_generator( pattern, @@ -107,8 +108,8 @@ bool TopSurface::ironing(const SliceDataStorage& storage, const SliceMeshStorage infill_origin, skip_line_stitching); std::vector ironing_paths; - Polygons ironing_polygons; - Polygons ironing_lines; + Shape ironing_polygons; + OpenLinesSet ironing_lines; infill_generator.generate(ironing_paths, ironing_polygons, ironing_lines, mesh.settings, layer.getLayerNr(), SectionType::IRONING); if (ironing_polygons.empty() && ironing_lines.empty() && ironing_paths.empty()) @@ -157,7 +158,7 @@ bool TopSurface::ironing(const SliceDataStorage& storage, const SliceMeshStorage { const coord_t max_adjacent_distance = line_spacing * 1.1; // Lines are considered adjacent - meaning they need to be printed in monotonic order - if spaced 1 line apart, with 10% extra play. - layer.addLinesMonotonic(Polygons(), ironing_lines, line_config, SpaceFillType::PolyLines, AngleRadians(direction), max_adjacent_distance); + layer.addLinesMonotonic(Shape(), ironing_lines, line_config, SpaceFillType::PolyLines, AngleRadians(direction), max_adjacent_distance); } added = true; } @@ -176,13 +177,16 @@ bool TopSurface::ironing(const SliceDataStorage& storage, const SliceMeshStorage line_config, line_config, line_config, + line_config, + line_config, retract_before_outer_wall, wipe_dist, wipe_dist, extruder_nr, extruder_nr, z_seam_config, - ironing_paths); + ironing_paths, + storage.getModelBoundingBox().flatten().getMiddle()); wall_orderer.addToLayer(); added = true; } diff --git a/src/TreeModelVolumes.cpp b/src/TreeModelVolumes.cpp index 7318061091..3dade07b66 100644 --- a/src/TreeModelVolumes.cpp +++ b/src/TreeModelVolumes.cpp @@ -8,6 +8,7 @@ #include #include +#include "PrimeTower/PrimeTower.h" #include "TreeSupport.h" #include "TreeSupportEnums.h" #include "progress/Progress.h" @@ -26,7 +27,7 @@ TreeModelVolumes::TreeModelVolumes( size_t current_mesh_idx, double progress_multiplier, double progress_offset, - const std::vector& additional_excluded_areas) + const std::vector& additional_excluded_areas) : max_move_{ std::max(max_move - 2, coord_t(0)) } , // -2 to avoid rounding errors max_move_slow_{ std::max(max_move_slow - 2, coord_t(0)) } @@ -37,7 +38,7 @@ TreeModelVolumes::TreeModelVolumes( , machine_border_{ calculateMachineBorderCollision(storage.getMachineBorder()) } , machine_area_{ storage.getMachineBorder() } { - anti_overhang_ = std::vector(storage.support.supportLayers.size(), Polygons()); + anti_overhang_ = std::vector(storage.support.supportLayers.size(), Shape()); std::unordered_map mesh_to_layeroutline_idx; // Get, for all participating meshes, simplification settings, and support settings that can be set per mesh. @@ -64,7 +65,7 @@ TreeModelVolumes::TreeModelVolumes( if (! added) { mesh_to_layeroutline_idx[mesh_idx] = layer_outlines_.size(); - layer_outlines_.emplace_back(mesh.settings, std::vector(storage.support.supportLayers.size(), Polygons())); + layer_outlines_.emplace_back(mesh.settings, std::vector(storage.support.supportLayers.size(), Shape())); } } @@ -116,8 +117,8 @@ TreeModelVolumes::TreeModelVolumes( { return; // Can't break as parallel_for wont allow it, this is equivalent to a continue. } - Polygons outline = extractOutlineFromMesh(mesh_l, layer_idx); - layer_outlines_[mesh_to_layeroutline_idx[mesh_idx_l]].second[layer_idx].add(outline); + Shape outline = extractOutlineFromMesh(mesh_l, layer_idx); + layer_outlines_[mesh_to_layeroutline_idx[mesh_idx_l]].second[layer_idx].push_back(outline); }); } // Merge all the layer outlines together. @@ -140,17 +141,17 @@ TreeModelVolumes::TreeModelVolumes( { if (layer_idx < coord_t(additional_excluded_areas.size())) { - anti_overhang_[layer_idx].add(additional_excluded_areas[layer_idx]); + anti_overhang_[layer_idx].push_back(additional_excluded_areas[layer_idx]); } if (SUPPORT_TREE_AVOID_SUPPORT_BLOCKER) { - anti_overhang_[layer_idx].add(storage.support.supportLayers[layer_idx].anti_overhang); + anti_overhang_[layer_idx].push_back(storage.support.supportLayers[layer_idx].anti_overhang); } - if (storage.primeTower.enabled_) + if (storage.prime_tower_) { - anti_overhang_[layer_idx].add(storage.primeTower.getGroundPoly()); + anti_overhang_[layer_idx].push_back(storage.prime_tower_->getOccupiedOutline(layer_idx)); } anti_overhang_[layer_idx] = anti_overhang_[layer_idx].unionPolygons(); }); @@ -328,10 +329,10 @@ void TreeModelVolumes::precalculate(coord_t max_layer) dur_col_avo); } -const Polygons& TreeModelVolumes::getCollision(coord_t radius, LayerIndex layer_idx, bool min_xy_dist) +const Shape& TreeModelVolumes::getCollision(coord_t radius, LayerIndex layer_idx, bool min_xy_dist) { const coord_t orig_radius = radius; - std::optional> result; + std::optional> result; if (! min_xy_dist) { radius += current_min_xy_dist_delta_; @@ -361,10 +362,10 @@ const Polygons& TreeModelVolumes::getCollision(coord_t radius, LayerIndex layer_ return getCollision(orig_radius, layer_idx, min_xy_dist); } -const Polygons& TreeModelVolumes::getCollisionHolefree(coord_t radius, LayerIndex layer_idx, bool min_xy_dist) +const Shape& TreeModelVolumes::getCollisionHolefree(coord_t radius, LayerIndex layer_idx, bool min_xy_dist) { const coord_t orig_radius = radius; - std::optional> result; + std::optional> result; if (! min_xy_dist) { radius += current_min_xy_dist_delta_; @@ -391,7 +392,7 @@ const Polygons& TreeModelVolumes::getCollisionHolefree(coord_t radius, LayerInde return getCollisionHolefree(orig_radius, layer_idx, min_xy_dist); } -const Polygons& TreeModelVolumes::getAccumulatedPlaceable0(LayerIndex layer_idx) +const Shape& TreeModelVolumes::getAccumulatedPlaceable0(LayerIndex layer_idx) { { std::lock_guard critical_section_support_max_layer_nr(*critical_accumulated_placeables_cache_radius_0_); @@ -404,7 +405,7 @@ const Polygons& TreeModelVolumes::getAccumulatedPlaceable0(LayerIndex layer_idx) return getAccumulatedPlaceable0(layer_idx); } -const Polygons& TreeModelVolumes::getAvoidance(coord_t radius, LayerIndex layer_idx, AvoidanceType type, bool to_model, bool min_xy_dist) +const Shape& TreeModelVolumes::getAvoidance(coord_t radius, LayerIndex layer_idx, AvoidanceType type, bool to_model, bool min_xy_dist) { if (layer_idx == 0) // What on the layer directly above buildplate do i have to avoid to reach the buildplate ... { @@ -413,7 +414,7 @@ const Polygons& TreeModelVolumes::getAvoidance(coord_t radius, LayerIndex layer_ const coord_t orig_radius = radius; - std::optional> result; + std::optional> result; radius += (min_xy_dist ? 0 : current_min_xy_dist_delta_); radius = ceilRadius(radius); @@ -425,7 +426,7 @@ const Polygons& TreeModelVolumes::getAvoidance(coord_t radius, LayerIndex layer_ const RadiusLayerPair key{ radius, layer_idx }; - std::unordered_map* cache_ptr = nullptr; + std::unordered_map* cache_ptr = nullptr; std::mutex* mutex_ptr = nullptr; switch (type) { @@ -489,9 +490,9 @@ const Polygons& TreeModelVolumes::getAvoidance(coord_t radius, LayerIndex layer_ return getAvoidance(orig_radius, layer_idx, type, to_model, min_xy_dist); // retrive failed and correct result was calculated. Now it has to be retrived. } -const Polygons& TreeModelVolumes::getPlaceableAreas(coord_t radius, LayerIndex layer_idx) +const Shape& TreeModelVolumes::getPlaceableAreas(coord_t radius, LayerIndex layer_idx) { - std::optional> result; + std::optional> result; const coord_t orig_radius = radius; radius = ceilRadius(radius); RadiusLayerPair key{ radius, layer_idx }; @@ -520,7 +521,7 @@ const Polygons& TreeModelVolumes::getPlaceableAreas(coord_t radius, LayerIndex l } -const Polygons& TreeModelVolumes::getWallRestriction(coord_t radius, LayerIndex layer_idx, bool min_xy_dist) +const Shape& TreeModelVolumes::getWallRestriction(coord_t radius, LayerIndex layer_idx, bool min_xy_dist) { if (layer_idx == 0) // Should never be requested as there will be no going below layer 0 ..., but just to be sure some semi-sane catch. Alternative would be empty Polygon. { @@ -530,12 +531,12 @@ const Polygons& TreeModelVolumes::getWallRestriction(coord_t radius, LayerIndex const coord_t orig_radius = radius; min_xy_dist = min_xy_dist && current_min_xy_dist_delta_ > 0; - std::optional> result; + std::optional> result; radius = ceilRadius(radius); const RadiusLayerPair key{ radius, layer_idx }; - std::unordered_map* cache_ptr = min_xy_dist ? &wall_restrictions_cache_min_ : &wall_restrictions_cache_; + std::unordered_map* cache_ptr = min_xy_dist ? &wall_restrictions_cache_min_ : &wall_restrictions_cache_; { std::lock_guard critical_section(min_xy_dist ? *critical_wall_restrictions_cache_min_ : *critical_wall_restrictions_cache_); result = getArea(*cache_ptr, key); @@ -568,23 +569,23 @@ bool TreeModelVolumes::checkSettingsEquality(const Settings& me, const Settings& return TreeSupportSettings(me) == TreeSupportSettings(other); } -Polygons TreeModelVolumes::extractOutlineFromMesh(const SliceMeshStorage& mesh, LayerIndex layer_idx) const +Shape TreeModelVolumes::extractOutlineFromMesh(const SliceMeshStorage& mesh, LayerIndex layer_idx) const { // Similar to SliceDataStorage.getLayerOutlines but only for one mesh instead of for all of them. constexpr bool external_polys_only = false; - Polygons total; + Shape total; if (mesh.settings.get("infill_mesh") || mesh.settings.get("anti_overhang_mesh")) { - return Polygons(); + return Shape(); } const SliceLayer& layer = mesh.layers[layer_idx]; layer.getOutlines(total, external_polys_only); if (mesh.settings.get("magic_mesh_surface_mode") != ESurfaceMode::NORMAL) { - total = total.unionPolygons(layer.openPolyLines.offsetPolyLine(FUDGE_LENGTH * 2)); + total = total.unionPolygons(layer.open_polylines.offset(FUDGE_LENGTH * 2)); } const coord_t maximum_resolution = mesh.settings.get("meshfix_maximum_resolution"); const coord_t maximum_deviation = mesh.settings.get("meshfix_maximum_deviation"); @@ -592,7 +593,7 @@ Polygons TreeModelVolumes::extractOutlineFromMesh(const SliceMeshStorage& mesh, return Simplify(maximum_resolution, maximum_deviation, maximum_area_deviation).polygon(total); } -LayerIndex TreeModelVolumes::getMaxCalculatedLayer(coord_t radius, const std::unordered_map& map) const +LayerIndex TreeModelVolumes::getMaxCalculatedLayer(coord_t radius, const std::unordered_map& map) const { LayerIndex max_layer = -1; @@ -620,12 +621,12 @@ void TreeModelVolumes::calculateCollision(const std::deque& key { const coord_t radius = keys[i].first; RadiusLayerPair key(radius, 0); - std::unordered_map data_outer; - std::unordered_map data_placeable_outer; + std::unordered_map data_outer; + std::unordered_map data_placeable_outer; for (const auto outline_idx : ranges::views::iota(0UL, layer_outlines_.size())) { - std::unordered_map data; - std::unordered_map data_placeable; + std::unordered_map data; + std::unordered_map data_placeable; const coord_t layer_height = layer_outlines_[outline_idx].first.get("layer_height"); const bool support_rests_on_this_model = layer_outlines_[outline_idx].first.get("support_type") == ESupportType::EVERYWHERE; @@ -652,15 +653,15 @@ void TreeModelVolumes::calculateCollision(const std::deque& key for (const auto layer_idx : ranges::views::iota(min_layer_bottom, max_required_layer + 1)) { key.second = layer_idx; - Polygons collision_areas = machine_border_; + Shape collision_areas = machine_border_; if (size_t(layer_idx) < layer_outlines_[outline_idx].second.size()) { - collision_areas.add(layer_outlines_[outline_idx].second[layer_idx]); + collision_areas.push_back(layer_outlines_[outline_idx].second[layer_idx]); } collision_areas = collision_areas.offset( radius + xy_distance); // jtRound is not needed here, as the overshoot can not cause errors in the algorithm, because no assumptions are made about the model. - data[key].add(collision_areas); // if a key does not exist when it is accessed it is added! + data[key].push_back(collision_areas); // if a key does not exist when it is accessed it is added! } // Add layers below, to ensure correct support_bottom_distance. Also save placeable areas of radius 0, if required for this mesh. @@ -669,18 +670,18 @@ void TreeModelVolumes::calculateCollision(const std::deque& key key.second = layer_idx; for (size_t layer_offset = 1; layer_offset <= z_distance_bottom_layers && layer_idx - coord_t(layer_offset) > min_layer_bottom; layer_offset++) { - data[key].add(data[RadiusLayerPair(radius, layer_idx - layer_offset)]); + data[key].push_back(data[RadiusLayerPair(radius, layer_idx - layer_offset)]); } // Placeable areas also have to be calculated when a collision has to be calculated if called outside of precalculate to prevent an infinite loop when they are // invalidly requested... if ((support_rests_on_this_model || precalculation_finished_ || ! precalculated_) && radius == 0 && layer_idx < coord_t(1 + keys[i].second)) { data[key] = data[key].unionPolygons(); - Polygons above = data[RadiusLayerPair(radius, layer_idx + 1)]; - above = above.unionPolygons(max_anti_overhang_layer >= layer_idx + 1 ? anti_overhang_[layer_idx] : Polygons()); + Shape above = data[RadiusLayerPair(radius, layer_idx + 1)]; + above = above.unionPolygons(max_anti_overhang_layer >= layer_idx + 1 ? anti_overhang_[layer_idx] : Shape()); // Empty polygons on condition: Just to be sure the area is correctly unioned as otherwise difference may behave unexpectedly. - Polygons placeable = data[key].unionPolygons().difference(above); + Shape placeable = data[key].unionPolygons().difference(above); data_placeable[RadiusLayerPair(radius, layer_idx + 1)] = data_placeable[RadiusLayerPair(radius, layer_idx + 1)].unionPolygons(placeable); } } @@ -719,9 +720,9 @@ void TreeModelVolumes::calculateCollision(const std::deque& key const coord_t required_range_x = coord_t(xy_distance - ((layer_offset - (z_distance_top_layers == 1 ? 0.5 : 0)) * xy_distance / z_distance_top_layers)); // ^^^ The conditional -0.5 ensures that plastic can never touch on the diagonal downward when the z_distance_top_layers = 1. // It is assumed to be better to not support an overhang<90� than to risk fusing to it. - data[key].add(layer_outlines_[outline_idx].second[layer_idx + layer_offset].offset(radius + required_range_x)); + data[key].push_back(layer_outlines_[outline_idx].second[layer_idx + layer_offset].offset(radius + required_range_x)); } - data[key] = data[key].unionPolygons(max_anti_overhang_layer >= layer_idx ? anti_overhang_[layer_idx].offset(radius) : Polygons()); + data[key] = data[key].unionPolygons(max_anti_overhang_layer >= layer_idx ? anti_overhang_[layer_idx].offset(radius) : Shape()); } for (const auto layer_idx : ranges::views::iota(static_cast(keys[i].second) + 1UL, max_required_layer + 1UL) | ranges::views::reverse) @@ -781,13 +782,13 @@ void TreeModelVolumes::calculateCollisionHolefree(const std::deque data; + std::unordered_map data; for (RadiusLayerPair key : keys) { // Logically increase the collision by increase_until_radius const coord_t radius = key.first; const coord_t increase_radius_ceil = ceilRadius(increase_until_radius_, false) - ceilRadius(radius, true); - Polygons col = getCollision(increase_until_radius_, layer_idx, false).offset(EPSILON - increase_radius_ceil, ClipperLib::jtRound).unionPolygons(); + Shape col = getCollision(increase_until_radius_, layer_idx, false).offset(EPSILON - increase_radius_ceil, ClipperLib::jtRound).unionPolygons(); // ^^^ That last 'unionPolygons' is important as otherwise holes(in form of lines that will increase to holes in a later step) can get unioned onto the area. col = simplifier_.polygon(col); data[RadiusLayerPair(radius, layer_idx)] = col; @@ -818,12 +819,12 @@ void TreeModelVolumes::calculateAccumulatedPlaceable0(const LayerIndex max_layer spdlog::debug("Requested calculation for value already calculated ?"); return; } - Polygons accumulated_placeable_0 + Shape accumulated_placeable_0 = start_layer == 1 ? machine_area_ : getAccumulatedPlaceable0(start_layer - 1).offset(FUDGE_LENGTH + (current_min_xy_dist_ + current_min_xy_dist_delta_)); // ^^^ The calculation here is done on the areas that are increased by xy_distance, but the result is saved without xy_distance, // so here it "restores" the previous state to continue calculating from about where it ended. // It would be better to ensure placeable areas of radius 0 do not include the xy distance, and removing the code compensating for it here and in calculatePlaceables. - std::vector> data(max_layer + 1, std::pair(-1, Polygons())); + std::vector> data(max_layer + 1, std::pair(-1, Shape())); for (LayerIndex layer = start_layer; layer <= max_layer; layer++) { @@ -867,26 +868,26 @@ void TreeModelVolumes::calculateCollisionAvoidance(const std::deque> data(max_required_layer + 1, std::pair(RadiusLayerPair(radius, -1), Polygons())); + std::vector> data(max_required_layer + 1, std::pair(RadiusLayerPair(radius, -1), Shape())); RadiusLayerPair key(radius, 0); - Polygons latest_avoidance = getAvoidance(radius, start_layer - 1, AvoidanceType::COLLISION, true, true); + Shape latest_avoidance = getAvoidance(radius, start_layer - 1, AvoidanceType::COLLISION, true, true); for (const LayerIndex layer : ranges::views::iota(static_cast(start_layer), max_required_layer + 1UL)) { key.second = layer; - Polygons col = getCollision(radius, layer, true); + Shape col = getCollision(radius, layer, true); latest_avoidance = safeOffset(latest_avoidance, -max_move_, ClipperLib::jtRound, -max_step_move, col); - Polygons placeable0RadiusCompensated = getAccumulatedPlaceable0(layer).offset(-std::max(radius, increase_until_radius_), ClipperLib::jtRound); + Shape placeable0RadiusCompensated = getAccumulatedPlaceable0(layer).offset(-std::max(radius, increase_until_radius_), ClipperLib::jtRound); latest_avoidance = latest_avoidance.difference(placeable0RadiusCompensated).unionPolygons(getCollision(radius, layer, true)); - Polygons next_latest_avoidance = simplifier_.polygon(latest_avoidance); + Shape next_latest_avoidance = simplifier_.polygon(latest_avoidance); latest_avoidance = next_latest_avoidance.unionPolygons(latest_avoidance); // ^^^ Ensure the simplification only causes the avoidance to become larger. // If the deviation of the simplification causes the avoidance to become smaller than it should be it can cause issues, if it is larger the worst case is that the // xy distance is effectively increased by deviation. If there would be an option to ensure the resulting polygon only gets larger by simplifying, it should improve // performance further. - data[layer] = std::pair(key, latest_avoidance); + data[layer] = std::pair(key, latest_avoidance); } { @@ -899,11 +900,11 @@ void TreeModelVolumes::calculateCollisionAvoidance(const std::deque= 0); - Polygons ret = me; + Shape ret = me; for (size_t i = 0; i < steps; ++i) { @@ -944,7 +945,7 @@ void TreeModelVolumes::calculateAvoidance(const std::deque& key const coord_t offset_speed = slow ? max_move_slow_ : max_move_; const coord_t max_step_move = std::max(1.9 * radius, current_min_xy_dist_ * 1.9); RadiusLayerPair key(radius, 0); - Polygons latest_avoidance; + Shape latest_avoidance; LayerIndex start_layer; { std::lock_guard critical_section(*(slow ? critical_avoidance_cache_slow_ : holefree ? critical_avoidance_cache_holefree_ : critical_avoidance_cache_)); @@ -956,7 +957,7 @@ void TreeModelVolumes::calculateAvoidance(const std::deque& key return; } start_layer = std::max(start_layer, LayerIndex(1)); // Ensure StartLayer is at least 1 as if no avoidance was calculated getMaxCalculatedLayer returns -1 - std::vector> data(max_required_layer + 1, std::pair(RadiusLayerPair(radius, -1), Polygons())); + std::vector> data(max_required_layer + 1, std::pair(RadiusLayerPair(radius, -1), Shape())); latest_avoidance = getAvoidance(radius, start_layer - 1, type, false, true); // minDist as the delta was already added, also avoidance for layer 0 will return the collision. @@ -965,7 +966,7 @@ void TreeModelVolumes::calculateAvoidance(const std::deque& key for (const LayerIndex layer : ranges::views::iota(static_cast(start_layer), max_required_layer + 1UL)) { key.second = layer; - Polygons col; + Shape col; if ((slow && radius < increase_until_radius_ + current_min_xy_dist_delta_) || holefree) { col = getCollisionHolefree(radius, layer, true); @@ -976,13 +977,13 @@ void TreeModelVolumes::calculateAvoidance(const std::deque& key } latest_avoidance = safeOffset(latest_avoidance, -offset_speed, ClipperLib::jtRound, -max_step_move, col); - Polygons next_latest_avoidance = simplifier_.polygon(latest_avoidance); + Shape next_latest_avoidance = simplifier_.polygon(latest_avoidance); latest_avoidance = next_latest_avoidance.unionPolygons(latest_avoidance); // ^^^ Ensure the simplification only causes the avoidance to become larger. // If the deviation of the simplification causes the avoidance to become smaller than it should be it can cause issues, if it is larger the worst case is that the // xy distance is effectively increased by deviation. If there would be an option to ensure the resulting polygon only gets larger by simplifying, it should improve // performance further. - data[layer] = std::pair(key, latest_avoidance); + data[layer] = std::pair(key, latest_avoidance); } { @@ -1013,7 +1014,7 @@ void TreeModelVolumes::calculatePlaceables(const std::deque& ke { const coord_t radius = keys[key_idx].first; const LayerIndex max_required_layer = keys[key_idx].second; - std::vector> data(max_required_layer + 1, std::pair(RadiusLayerPair(radius, -1), Polygons())); + std::vector> data(max_required_layer + 1, std::pair(RadiusLayerPair(radius, -1), Shape())); RadiusLayerPair key(radius, 0); LayerIndex start_layer; @@ -1029,17 +1030,17 @@ void TreeModelVolumes::calculatePlaceables(const std::deque& ke if (start_layer == 0) { - data[0] = std::pair(key, machine_border_.difference(getCollision(radius, 0, true))); + data[0] = std::pair(key, machine_border_.difference(getCollision(radius, 0, true))); start_layer = 1; } for (const LayerIndex layer : ranges::views::iota(static_cast(start_layer), max_required_layer + 1)) { key.second = layer; - Polygons placeable = getPlaceableAreas(0, layer); + Shape placeable = getPlaceableAreas(0, layer); placeable = simplifier_.polygon(placeable); // it is faster to do this here in each thread than once in calculateCollision. placeable = placeable.offset(-(radius + (current_min_xy_dist_ + current_min_xy_dist_delta_))).unionPolygons(); - data[layer] = std::pair(key, placeable); + data[layer] = std::pair(key, placeable); } { @@ -1084,11 +1085,10 @@ void TreeModelVolumes::calculateAvoidanceToModel(const std::deque> data(max_required_layer + 1, std::pair(RadiusLayerPair(radius, -1), Polygons())); + Shape latest_avoidance; + std::vector> data(max_required_layer + 1, std::pair(RadiusLayerPair(radius, -1), Shape())); RadiusLayerPair key(radius, 0); LayerIndex start_layer; @@ -1100,12 +1100,13 @@ void TreeModelVolumes::calculateAvoidanceToModel(const std::deque max_required_layer) { - spdlog::debug("Requested calculation for value already calculated ?"); + spdlog::debug("Requested calculation for value already calculated or max_required_layer is 0?"); return; } - start_layer = std::max(start_layer, LayerIndex(1)); + getPlaceableAreas(radius, max_required_layer); // ensuring Placeable Areas are calculated latest_avoidance = getAvoidance(radius, start_layer - 1, type, true, true); // minDist as the delta was already added, also avoidance for layer 0 will return the collision. @@ -1113,7 +1114,7 @@ void TreeModelVolumes::calculateAvoidanceToModel(const std::deque(start_layer), max_required_layer + 1)) { key.second = layer; - Polygons col = getCollision(radius, layer, true); + Shape col = getCollision(radius, layer, true); if ((slow && radius < increase_until_radius_ + current_min_xy_dist_delta_) || holefree) { @@ -1125,13 +1126,13 @@ void TreeModelVolumes::calculateAvoidanceToModel(const std::deque(key, latest_avoidance); + data[layer] = std::pair(key, latest_avoidance); } { @@ -1202,8 +1203,8 @@ void TreeModelVolumes::calculateWallRestrictions(const std::deque data; - std::unordered_map data_min; + std::unordered_map data; + std::unordered_map data_min; { std::lock_guard critical_section(*critical_wall_restrictions_cache_); @@ -1218,12 +1219,12 @@ void TreeModelVolumes::calculateWallRestrictions(const std::deque 0) { - Polygons wall_restriction_min = simplifier_.polygon(getCollision(0, layer_idx, true).intersection(getCollision(radius, layer_idx_below, true))); + Shape wall_restriction_min = simplifier_.polygon(getCollision(0, layer_idx, true).intersection(getCollision(radius, layer_idx_below, true))); data_min.emplace(key, wall_restriction_min); } } @@ -1271,22 +1272,22 @@ coord_t TreeModelVolumes::ceilRadius(coord_t radius) const } template -const std::optional> TreeModelVolumes::getArea(const std::unordered_map& cache, const KEY key) const +const std::optional> TreeModelVolumes::getArea(const std::unordered_map& cache, const KEY key) const { const auto it = cache.find(key); if (it != cache.end()) { - return std::optional>{ it->second }; + return std::optional>{ it->second }; } else { - return std::optional>(); + return std::optional>(); } } -Polygons TreeModelVolumes::calculateMachineBorderCollision(const Polygons&& machine_border) +Shape TreeModelVolumes::calculateMachineBorderCollision(const Shape&& machine_border) { - Polygons machine_volume_border = machine_border.offset(MM2INT(1000.0)); // Put a border of 1 meter around the print volume so that we don't collide. + Shape machine_volume_border = machine_border.offset(MM2INT(1000.0)); // Put a border of 1 meter around the print volume so that we don't collide. machine_volume_border = machine_volume_border.difference(machine_border); // Subtract the actual volume from the collision area. return machine_volume_border; } diff --git a/src/TreeSupport.cpp b/src/TreeSupport.cpp index 145fc64bf3..67a68e1cf6 100644 --- a/src/TreeSupport.cpp +++ b/src/TreeSupport.cpp @@ -69,10 +69,6 @@ TreeSupport::TreeSupport(const SliceDataStorage& storage) { added = true; grouped_mesh.second.emplace_back(mesh_idx); - // Handle some settings that are only used for performance reasons. This ensures that a horrible set setting intended to improve performance can not reduce it - // drastically. - grouped_mesh.first.performance_interface_skip_layers - = std::min(grouped_mesh.first.performance_interface_skip_layers, next_settings.performance_interface_skip_layers); } } if (! added) @@ -98,7 +94,7 @@ TreeSupport::TreeSupport(const SliceDataStorage& storage) mesh.first.setActualZ(known_z); } - placed_support_lines_support_areas = std::vector(storage.support.supportLayers.size(), Polygons()); + fake_roof_areas = std::vector>(storage.support.supportLayers.size(), std::vector()); } void TreeSupport::generateSupportAreas(SliceDataStorage& storage) @@ -121,11 +117,11 @@ void TreeSupport::generateSupportAreas(SliceDataStorage& storage) storage.support.supportLayers .size()); // Value is the area where support may be placed. As this is calculated in CreateLayerPathing it is saved and reused in drawAreas. - additional_required_support_area = std::vector(storage.support.supportLayers.size(), Polygons()); + additional_required_support_area = std::vector(storage.support.supportLayers.size(), Shape()); spdlog::info("Processing support tree mesh group {} of {} containing {} meshes.", counter + 1, grouped_meshes.size(), grouped_meshes[counter].second.size()); - std::vector exclude(storage.support.supportLayers.size()); + std::vector exclude(storage.support.supportLayers.size()); auto t_start = std::chrono::high_resolution_clock::now(); // get all already existing support areas and exclude them @@ -134,12 +130,12 @@ void TreeSupport::generateSupportAreas(SliceDataStorage& storage) LayerIndex(storage.support.supportLayers.size()), [&](const LayerIndex layer_idx) { - Polygons exlude_at_layer; - exlude_at_layer.add(storage.support.supportLayers[layer_idx].support_bottom); - exlude_at_layer.add(storage.support.supportLayers[layer_idx].support_roof); + Shape exlude_at_layer; + exlude_at_layer.push_back(storage.support.supportLayers[layer_idx].support_bottom); + exlude_at_layer.push_back(storage.support.supportLayers[layer_idx].support_roof); for (auto part : storage.support.supportLayers[layer_idx].support_infill_parts) { - exlude_at_layer.add(part.outline_); + exlude_at_layer.push_back(part.outline_); } exclude[layer_idx] = exlude_at_layer.unionPolygons(); scripta::log("tree_support_exclude", exclude[layer_idx], SectionType::SUPPORT, layer_idx); @@ -159,7 +155,12 @@ void TreeSupport::generateSupportAreas(SliceDataStorage& storage) exclude); // ### Precalculate avoidances, collision etc. - precalculate(storage, processing.second); + const LayerIndex max_required_layer = precalculate(storage, processing.second); + if (max_required_layer < 0) + { + spdlog::info("Support tree mesh group {} does not have any overhang. Skipping tree support generation for this support tree mesh group.", counter + 1); + continue; // If there is no overhang to support, skip these meshes + } const auto t_precalc = std::chrono::high_resolution_clock::now(); // ### Place tips of the support tree @@ -212,10 +213,10 @@ void TreeSupport::generateSupportAreas(SliceDataStorage& storage) storage.support.generated = true; } -void TreeSupport::precalculate(const SliceDataStorage& storage, std::vector currently_processing_meshes) +LayerIndex TreeSupport::precalculate(const SliceDataStorage& storage, std::vector currently_processing_meshes) { // Calculate top most layer that is relevant for support. - LayerIndex max_layer = 0; + LayerIndex max_layer = -1; for (size_t mesh_idx : currently_processing_meshes) { const SliceMeshStorage& mesh = *storage.meshes[mesh_idx]; @@ -231,7 +232,7 @@ void TreeSupport::precalculate(const SliceDataStorage& storage, std::vector max_layer) // iterates over multiple meshes @@ -244,14 +245,18 @@ void TreeSupport::precalculate(const SliceDataStorage& storage, std::vector= 0) + { + volumes_.precalculate(max_layer); + } + return max_layer; } void TreeSupport::generateInitialAreas(const SliceMeshStorage& mesh, std::vector>& move_bounds, SliceDataStorage& storage) { TreeSupportTipGenerator tip_gen(mesh, volumes_); - tip_gen.generateTips(storage, mesh, move_bounds, additional_required_support_area, placed_support_lines_support_areas); + tip_gen.generateTips(storage, mesh, move_bounds, additional_required_support_area, fake_roof_areas); } void TreeSupport::mergeHelper( @@ -332,28 +337,27 @@ void TreeSupport::mergeHelper( continue; } - Polygons relevant_infl; - Polygons relevant_redu; + Shape relevant_infl; + Shape relevant_redu; if (merging_to_bp) { relevant_infl = to_bp_areas.count(influence.first) ? to_bp_areas.at(influence.first) - : Polygons(); // influence.first is a new element => not required to check if it was changed + : Shape(); // influence.first is a new element => not required to check if it was changed relevant_redu = insert_bp_areas.count(reduced_check.first) ? insert_bp_areas[reduced_check.first] - : (to_bp_areas.count(reduced_check.first) ? to_bp_areas.at(reduced_check.first) : Polygons()); + : (to_bp_areas.count(reduced_check.first) ? to_bp_areas.at(reduced_check.first) : Shape()); } else { - relevant_infl = to_model_areas.count(influence.first) ? to_model_areas.at(influence.first) : Polygons(); - relevant_redu = insert_model_areas.count(reduced_check.first) - ? insert_model_areas[reduced_check.first] - : (to_model_areas.count(reduced_check.first) ? to_model_areas.at(reduced_check.first) : Polygons()); + relevant_infl = to_model_areas.count(influence.first) ? to_model_areas.at(influence.first) : Shape(); + relevant_redu = insert_model_areas.count(reduced_check.first) ? insert_model_areas[reduced_check.first] + : (to_model_areas.count(reduced_check.first) ? to_model_areas.at(reduced_check.first) : Shape()); } const bool red_bigger = config.getCollisionRadius(reduced_check.first) > config.getCollisionRadius(influence.first); - std::pair smaller_rad = red_bigger ? std::pair(influence.first, relevant_infl) - : std::pair(reduced_check.first, relevant_redu); - std::pair bigger_rad = red_bigger ? std::pair(reduced_check.first, relevant_redu) - : std::pair(influence.first, relevant_infl); + std::pair smaller_rad + = red_bigger ? std::pair(influence.first, relevant_infl) : std::pair(reduced_check.first, relevant_redu); + std::pair bigger_rad + = red_bigger ? std::pair(reduced_check.first, relevant_redu) : std::pair(influence.first, relevant_infl); const coord_t real_radius_delta = std::abs(config.getRadius(bigger_rad.first) - config.getRadius(smaller_rad.first)); const coord_t smaller_collision_radius = config.getCollisionRadius(smaller_rad.first); @@ -373,7 +377,7 @@ void TreeSupport::mergeHelper( // a branch (of the larger collision radius) placed in this intersection, has already engulfed the branch of the smaller collision radius. // Because of this a merge may happen even if the influence areas (that represent possible center points of branches) do not intersect yet. // Remember that collision radius <= real radius as otherwise this assumption would be false. - const Polygons small_rad_increased_by_big_minus_small = TreeSupportUtils::safeOffsetInc( + const Shape small_rad_increased_by_big_minus_small = TreeSupportUtils::safeOffsetInc( smaller_rad.second, real_radius_delta, volumes_.getCollision(smaller_collision_radius, layer_idx - 1, use_min_radius), @@ -382,7 +386,7 @@ void TreeSupport::mergeHelper( 0, config.support_line_distance / 2, &config.simplifier); - Polygons intersect = small_rad_increased_by_big_minus_small.intersection(bigger_rad.second); + Shape intersect = small_rad_increased_by_big_minus_small.intersection(bigger_rad.second); if (intersect.area() > 1) // dont use empty as a line is not empty, but for this use-case it very well may be (and would be one layer down as union does not keep lines) @@ -423,11 +427,11 @@ void TreeSupport::mergeHelper( const auto getIntersectInfluence = [&](const PropertyAreasUnordered& insert_infl, const PropertyAreas& infl_areas) { - const Polygons infl_small = insert_infl.count(smaller_rad.first) ? insert_infl.at(smaller_rad.first) - : (infl_areas.count(smaller_rad.first) ? infl_areas.at(smaller_rad.first) : Polygons()); - const Polygons infl_big = insert_infl.count(bigger_rad.first) ? insert_infl.at(bigger_rad.first) - : (infl_areas.count(bigger_rad.first) ? infl_areas.at(bigger_rad.first) : Polygons()); - const Polygons small_rad_increased_by_big_minus_small_infl = TreeSupportUtils::safeOffsetInc( + const Shape infl_small = insert_infl.count(smaller_rad.first) ? insert_infl.at(smaller_rad.first) + : (infl_areas.count(smaller_rad.first) ? infl_areas.at(smaller_rad.first) : Shape()); + const Shape infl_big = insert_infl.count(bigger_rad.first) ? insert_infl.at(bigger_rad.first) + : (infl_areas.count(bigger_rad.first) ? infl_areas.at(bigger_rad.first) : Shape()); + const Shape small_rad_increased_by_big_minus_small_infl = TreeSupportUtils::safeOffsetInc( infl_small, real_radius_delta, volumes_.getCollision(smaller_collision_radius, layer_idx - 1, use_min_radius), @@ -440,11 +444,11 @@ void TreeSupport::mergeHelper( infl_big); // If the one with the bigger radius with the lower radius removed overlaps we can merge. }; - Polygons intersect_influence; + Shape intersect_influence; intersect_influence = TreeSupportUtils::safeUnion(intersect, getIntersectInfluence(insert_influence, influence_areas)); // Rounding errors again. Do not ask me where or why. - Polygons intersect_to_model; + Shape intersect_to_model; if (merging_to_bp && config.support_rests_on_model) { intersect_to_model = getIntersectInfluence(insert_model_areas, to_model_areas); @@ -468,7 +472,7 @@ void TreeSupport::mergeHelper( erase.emplace_back(reduced_check.first); erase.emplace_back(influence.first); - const Polygons merge + const Shape merge = intersect.unionPolygons(intersect_to_model).offset(config.getRadius(key), ClipperLib::jtRound).difference(volumes_.getCollision(0, layer_idx - 1)); // ^^^ Regular union should be preferable here as Polygons tend to only become smaller through rounding errors (smaller!=has smaller area as holes have a // negative area.). @@ -548,7 +552,7 @@ void TreeSupport::mergeInfluenceAreas(PropertyAreasUnordered& to_bp_areas, Prope [&](size_t idx) // +=2 as in the beginning only uneven buckets will be filled { idx = idx * 2 + 1; // this is eqivalent to a parallel for(size_t idx=1;idx& input_pair : buckets_area[idx]) + for (const std::pair& input_pair : buckets_area[idx]) { AABB outer_support_wall_aabb = AABB(input_pair.second); outer_support_wall_aabb.expand(config.getRadius(input_pair.first)); @@ -596,16 +600,16 @@ void TreeSupport::mergeInfluenceAreas(PropertyAreasUnordered& to_bp_areas, Prope influence_areas.erase(del); } - for (const std::pair& tup : insert_main[i]) + for (const std::pair& tup : insert_main[i]) { to_bp_areas.emplace(tup); } - for (const std::pair& tup : insert_secondary[i]) + for (const std::pair& tup : insert_secondary[i]) { to_model_areas.emplace(tup); } - for (const std::pair& tup : insert_influence[i]) + for (const std::pair& tup : insert_influence[i]) { influence_areas.emplace(tup); } @@ -635,15 +639,15 @@ std::optional TreeSupport::increaseSingleArea( AreaIncreaseSettings settings, LayerIndex layer_idx, TreeSupportElement* parent, - const Polygons& relevant_offset, - Polygons& to_bp_data, - Polygons& to_model_data, - Polygons& increased, + const Shape& relevant_offset, + Shape& to_bp_data, + Shape& to_model_data, + Shape& increased, const coord_t overspeed, const bool mergelayer) { TreeSupportElement current_elem(parent); // Also increases DTT by one. - Polygons check_layer_data; + Shape check_layer_data; if (settings.increase_radius_) { current_elem.effective_radius_height_ += 1; @@ -721,13 +725,13 @@ std::optional TreeSupport::increaseSingleArea( return true; } - Polygons to_bp_data_2; + Shape to_bp_data_2; if (current_elem.to_buildplate_) { // Regular union as output will not be used later => this area should always be a subset of the safeUnion one. to_bp_data_2 = increased.difference(volumes_.getAvoidance(next_radius, layer_idx - 1, settings.type_, false, settings.use_min_distance_)).unionPolygons(); } - Polygons to_model_data_2; + Shape to_model_data_2; if (config.support_rests_on_model && ! current_elem.to_buildplate_) { to_model_data_2 = increased @@ -739,7 +743,7 @@ std::optional TreeSupport::increaseSingleArea( settings.use_min_distance_)) .unionPolygons(); } - Polygons check_layer_data_2 = current_elem.to_buildplate_ ? to_bp_data_2 : to_model_data_2; + Shape check_layer_data_2 = current_elem.to_buildplate_ ? to_bp_data_2 : to_model_data_2; return check_layer_data_2.area() > 1; }; @@ -768,8 +772,8 @@ std::optional TreeSupport::increaseSingleArea( // wall of the bowl if possible. if (config.getCollisionRadius(current_elem) < config.increase_radius_until_radius && config.getCollisionRadius(current_elem) < config.getRadius(current_elem)) { - Polygons new_to_bp_data; - Polygons new_to_model_data; + Shape new_to_bp_data; + Shape new_to_model_data; if (current_elem.to_buildplate_) { @@ -855,7 +859,7 @@ std::optional TreeSupport::increaseSingleArea( { if (current_elem.to_buildplate_) { - Polygons limited_to_bp = to_bp_data.intersection((current_elem.influence_area_limit_area_)); + Shape limited_to_bp = to_bp_data.intersection((current_elem.influence_area_limit_area_)); if (limited_to_bp.area() > 1) { to_bp_data = limited_to_bp; @@ -865,7 +869,7 @@ std::optional TreeSupport::increaseSingleArea( } else { - Polygons limited_to_model_data = to_model_data.intersection((current_elem.influence_area_limit_area_)); + Shape limited_to_model_data = to_model_data.intersection((current_elem.influence_area_limit_area_)); if (limited_to_model_data.area() > 1) { to_bp_data = to_bp_data.intersection((current_elem.influence_area_limit_area_)); @@ -903,10 +907,10 @@ void TreeSupport::increaseAreas( TreeSupportElement* parent = last_layer[idx]; TreeSupportElement elem(parent); // Also increases dtt. // Abstract representation of the model outline. If an influence area would move through it, it could teleport through a wall. - const Polygons wall_restriction = volumes_.getWallRestriction(config.getCollisionRadius(*parent), layer_idx, parent->use_min_xy_dist_); + const Shape wall_restriction = volumes_.getWallRestriction(config.getCollisionRadius(*parent), layer_idx, parent->use_min_xy_dist_); - Polygons to_bp_data; - Polygons to_model_data; + Shape to_bp_data; + Shape to_model_data; coord_t radius = config.getCollisionRadius(elem); // When the radius increases, the outer "support wall" of the branch will have been moved farther away from the center (as this is the definition of radius). @@ -966,8 +970,8 @@ void TreeSupport::increaseAreas( const coord_t fast_speed = config.maximum_move_distance + extra_speed; const coord_t slow_speed = config.maximum_move_distance_slow + extra_speed + extra_slow_speed; - Polygons offset_slow; - Polygons offset_fast; + Shape offset_slow; + Shape offset_fast; bool add = false; bool bypass_merge = false; @@ -1087,7 +1091,7 @@ void TreeSupport::increaseAreas( false); // Only do not move when already in a no hole avoidance with the regular xy distance. } - Polygons inc_wo_collision; + Shape inc_wo_collision; // Check whether it is faster to calculate the area increased with the fast speed independently from the slow area, or time could be saved by reusing the slow area to // calculate the fast one. Calculated by comparing the steps saved when calculating independently with the saved steps when not. const bool offset_independent_faster = (radius / safe_movement_distance - (((config.maximum_move_distance + extra_speed) < (radius + safe_movement_distance)) ? 1 : 0)) @@ -1149,8 +1153,8 @@ void TreeSupport::increaseAreas( { // If the area becomes for whatever reason something that clipper sees as a line, offset would stop working, so ensure that even if if wrongly would be a line, // it still actually has an area that can be increased - Polygons lines_offset = TreeSupportUtils::toPolylines(*parent->area_).offsetPolyLine(EPSILON); - Polygons base_error_area = parent->area_->unionPolygons(lines_offset); + Shape lines_offset = TreeSupportUtils::toPolylines(*parent->area_).offset(EPSILON); + Shape base_error_area = parent->area_->unionPolygons(lines_offset); result = increaseSingleArea(settings, layer_idx, parent, base_error_area, to_bp_data, to_model_data, inc_wo_collision, settings.increase_speed_, mergelayer); if (fast_speed < settings.increase_speed_) @@ -1237,7 +1241,7 @@ void TreeSupport::increaseAreas( if (add) { - Polygons max_influence_area = TreeSupportUtils::safeUnion( + Shape max_influence_area = TreeSupportUtils::safeUnion( inc_wo_collision.difference(volumes_.getCollision(radius, layer_idx - 1, elem.use_min_xy_dist_)), TreeSupportUtils::safeUnion(to_bp_data, to_model_data)); // ^^^ Note: union seems useless, but some rounding errors somewhere can cause to_bp_data to be slightly bigger than it should be @@ -1246,7 +1250,7 @@ void TreeSupport::increaseAreas( std::lock_guard critical_section_newLayer(critical_sections); if (bypass_merge) { - Polygons* new_area = new Polygons(max_influence_area); + Shape* new_area = new Shape(max_influence_area); TreeSupportElement* next = new TreeSupportElement(elem, new_area); bypass_merge_areas.emplace_back(next); } @@ -1343,10 +1347,10 @@ void TreeSupport::createLayerPathing(std::vector>& new_element = ! move_bounds[layer_idx - 1].empty(); // Save calculated elements to output, and allocate Polygons on heap, as they will not be changed again. - for (std::pair tup : influence_areas) + for (std::pair tup : influence_areas) { const TreeSupportElement elem = tup.first; - Polygons* new_area = new Polygons(TreeSupportUtils::safeUnion(tup.second)); + Shape* new_area = new Shape(TreeSupportUtils::safeUnion(tup.second)); TreeSupportElement* next = new TreeSupportElement(elem, new_area); move_bounds[layer_idx - 1].emplace(next); @@ -1421,13 +1425,13 @@ bool TreeSupport::setToModelContact(std::vector>& set = true; } - Polygons valid_place_area; + Shape valid_place_area; // Check for every layer upwards, up to the point where this influence area was created (either by initial insert or merge) if the branch could be placed on it, and highest // up layer index. for (LayerIndex layer_check = layer_idx; check->next_height_ >= layer_check; layer_check++) { - Polygons check_valid_place_area = check->area_->intersection(volumes_.getPlaceableAreas(config.getCollisionRadius(*check), layer_check)); + Shape check_valid_place_area = check->area_->intersection(volumes_.getPlaceableAreas(config.getCollisionRadius(*check), layer_check)); if (! check_valid_place_area.empty()) { @@ -1498,7 +1502,7 @@ bool TreeSupport::setToModelContact(std::vector>& else // can not add graceful => just place it here and hope for the best { Point2LL best = first_elem->next_position_; - Polygons valid_place_area + Shape valid_place_area = first_elem->area_->difference(volumes_.getAvoidance(config.getCollisionRadius(first_elem), layer_idx, AvoidanceType::COLLISION, first_elem->use_min_xy_dist_)); if (! valid_place_area.inside(best, true)) @@ -1638,7 +1642,7 @@ void TreeSupport::createNodesFromArea(std::vector> void TreeSupport::generateBranchAreas( std::vector>& linear_data, - std::vector>& layer_tree_polygons, + std::vector>& layer_tree_polygons, const std::map& inverse_tree_order) { double progress_total = TREE_PROGRESS_PRECALC_AVO + TREE_PROGRESS_PRECALC_COLL + TREE_PROGRESS_GENERATE_NODES + TREE_PROGRESS_AREA_CALC; @@ -1650,12 +1654,12 @@ void TreeSupport::generateBranchAreas( for (Point2LL vertex : base_circle) { vertex = Point2LL(vertex.X * config.branch_radius / TreeSupportBaseCircle::base_radius, vertex.Y * config.branch_radius / TreeSupportBaseCircle::base_radius); - branch_circle.add(vertex); + branch_circle.push_back(vertex); } } - std::vector linear_inserts(linear_data.size()); - const size_t progress_inserts_check_interval = linear_data.size() / progress_report_steps; + std::vector linear_inserts(linear_data.size()); + const size_t progress_inserts_check_interval = std::max(linear_data.size() / progress_report_steps, size_t(1)); std::mutex critical_sections; cura::parallel_for( @@ -1692,9 +1696,9 @@ void TreeSupport::generateBranchAreas( } coord_t max_speed_sqd = 0; - std::function generateArea = [&](coord_t offset) + std::function generateArea = [&](coord_t offset) { - Polygons poly; + Shape poly; for (std::pair movement : movement_directions) { @@ -1718,9 +1722,9 @@ void TreeSupport::generateBranchAreas( for (Point2LL vertex : branch_circle) { vertex = Point2LL(matrix[0] * vertex.X + matrix[1] * vertex.Y, matrix[2] * vertex.X + matrix[3] * vertex.Y); - circle.add(center_position + vertex); + circle.push_back(center_position + vertex); } - poly.add(circle.offset(0)); + poly.push_back(circle.offset(0)); } poly = poly.unionPolygons() @@ -1742,7 +1746,7 @@ void TreeSupport::generateBranchAreas( { // Simulate the path the nozzle will take on the outermost wall. // If multiple parts exist, the outer line will not go all around the support part potentially causing support material to be printed mid air. - Polygons nozzle_path = linear_inserts[idx].offset(-config.support_line_width / 2); + Shape nozzle_path = linear_inserts[idx].offset(-config.support_line_width / 2); if (nozzle_path.splitIntoParts(false).size() > 1) { // Just try to make the area a tiny bit larger. @@ -1752,8 +1756,8 @@ void TreeSupport::generateBranchAreas( // if larger area did not fix the problem, all parts off the nozzle path that do not contain the center point are removed, hoping for the best if (nozzle_path.splitIntoParts(false).size() > 1) { - Polygons polygons_with_correct_center; - for (PolygonsPart part : nozzle_path.splitIntoParts(false)) + Shape polygons_with_correct_center; + for (SingleShape part : nozzle_path.splitIntoParts(false)) { if (part.inside(elem->result_on_layer_, true)) { @@ -1795,7 +1799,7 @@ void TreeSupport::generateBranchAreas( } } -void TreeSupport::smoothBranchAreas(std::vector>& layer_tree_polygons) +void TreeSupport::smoothBranchAreas(std::vector>& layer_tree_polygons) { double progress_total = TREE_PROGRESS_PRECALC_AVO + TREE_PROGRESS_PRECALC_COLL + TREE_PROGRESS_GENERATE_NODES + TREE_PROGRESS_AREA_CALC + TREE_PROGRESS_GENERATE_BRANCH_AREAS; const coord_t max_radius_change_per_layer = 1 + config.support_line_width / 2; // This is the upper limit a radius may change per layer. +1 to avoid rounding errors. @@ -1803,15 +1807,15 @@ void TreeSupport::smoothBranchAreas(std::vector(layer_tree_polygons.size(), 1UL) - 1UL)) { - std::vector> processing; + std::vector> processing; processing.insert(processing.end(), layer_tree_polygons[layer_idx].begin(), layer_tree_polygons[layer_idx].end()); - std::vector>> update_next(processing.size()); // With this a lock can be avoided. + std::vector>> update_next(processing.size()); // With this a lock can be avoided. cura::parallel_for( 0, processing.size(), [&](const size_t processing_idx) { - std::pair data_pair = processing[processing_idx]; + std::pair data_pair = processing[processing_idx]; coord_t max_outer_wall_distance = 0; bool do_something = false; @@ -1829,21 +1833,21 @@ void TreeSupport::smoothBranchAreas(std::vectorparents_) { if (config.getRadius(*parent) != config.getCollisionRadius(*parent)) { update_next[processing_idx].emplace_back( - std::pair(parent, layer_tree_polygons[layer_idx + 1][parent].intersection(max_allowed_area))); + std::pair(parent, layer_tree_polygons[layer_idx + 1][parent].intersection(max_allowed_area))); } } } }); - for (std::vector> data_vector : update_next) + for (std::vector> data_vector : update_next) { - for (std::pair data_pair : data_vector) + for (std::pair data_pair : data_vector) { layer_tree_polygons[layer_idx + 1][data_pair.first] = data_pair.second; } @@ -1859,25 +1863,25 @@ void TreeSupport::smoothBranchAreas(std::vector updated_last_iteration; for (const auto layer_idx : ranges::views::iota(0UL, std::max(layer_tree_polygons.size(), 1UL) - 1UL) | ranges::views::reverse) { - std::vector> processing; + std::vector> processing; processing.insert(processing.end(), layer_tree_polygons[layer_idx].begin(), layer_tree_polygons[layer_idx].end()); - std::vector> update_next( + std::vector> update_next( processing.size(), - std::pair(nullptr, Polygons())); // With this a lock can be avoided. + std::pair(nullptr, Shape())); // With this a lock can be avoided. cura::parallel_for( 0, processing.size(), [&](const size_t processing_idx) { - std::pair data_pair = processing[processing_idx]; + std::pair data_pair = processing[processing_idx]; bool do_something = false; - Polygons max_allowed_area; + Shape max_allowed_area; for (size_t idx = 0; idx < data_pair.first->parents_.size(); idx++) { TreeSupportElement* parent = data_pair.first->parents_[idx]; const coord_t max_outer_line_increase = max_radius_change_per_layer; - Polygons result = layer_tree_polygons[layer_idx + 1][parent].offset(max_outer_line_increase); + Shape result = layer_tree_polygons[layer_idx + 1][parent].offset(max_outer_line_increase); const Point2LL direction = data_pair.first->result_on_layer_ - parent->result_on_layer_; // Move the polygons object. for (auto& outer : result) @@ -1887,22 +1891,22 @@ void TreeSupport::smoothBranchAreas(std::vector(data_pair.first, result); + update_next[processing_idx] = std::pair(data_pair.first, result); } } }); updated_last_iteration.clear(); - for (std::pair data_pair : update_next) + for (std::pair data_pair : update_next) { if (data_pair.first != nullptr) { @@ -1917,9 +1921,9 @@ void TreeSupport::smoothBranchAreas(std::vector>& layer_tree_polygons, + std::vector>& layer_tree_polygons, const std::vector>& linear_data, - std::vector>>& dropped_down_areas, + std::vector>>& dropped_down_areas, const std::map& inverse_tree_order) { cura::parallel_for( @@ -1928,12 +1932,11 @@ void TreeSupport::dropNonGraciousAreas( [&](const size_t idx) { TreeSupportElement* elem = linear_data[idx].second; - bool non_gracious_model_contact - = ! elem->to_model_gracious_ - && ! inverse_tree_order.count(elem); // If an element has no child, it connects to whatever is below as no support further down for it will exist. + bool non_gracious_model_contact = ! elem->to_model_gracious_ && ! inverse_tree_order.count(elem) && linear_data[idx].first > 0 + && ! elem->to_buildplate_; // If an element has no child, it connects to whatever is below as no support further down for it will exist. if (non_gracious_model_contact) { - Polygons rest_support = layer_tree_polygons[linear_data[idx].first][elem].intersection(volumes_.getAccumulatedPlaceable0(linear_data[idx].first)); + Shape rest_support = layer_tree_polygons[linear_data[idx].first][elem].intersection(volumes_.getAccumulatedPlaceable0(linear_data[idx].first)); for (LayerIndex counter = 1; rest_support.area() > 1 && counter < linear_data[idx].first; ++counter) { rest_support = rest_support.difference(volumes_.getCollision(0, linear_data[idx].first - counter)); @@ -1944,7 +1947,7 @@ void TreeSupport::dropNonGraciousAreas( } -void TreeSupport::filterFloatingLines(std::vector& support_layer_storage) +void TreeSupport::filterFloatingLines(std::vector& support_layer_storage) { const auto t_start = std::chrono::high_resolution_clock::now(); @@ -1952,7 +1955,7 @@ void TreeSupport::filterFloatingLines(std::vector& support_layer_stora const coord_t open_close_distance = config.fill_outline_gaps ? config.min_feature_size / 2 - 5 : config.min_wall_line_width / 2 - 5; // based on calculation in WallToolPath const double small_area_length = INT2MM(static_cast(config.support_line_width) / 2); - std::function reversePolygon = [&](Polygons& poly) + std::function reversePolygon = [&](Shape& poly) { for (size_t idx = 0; idx < poly.size(); idx++) { @@ -1961,7 +1964,7 @@ void TreeSupport::filterFloatingLines(std::vector& support_layer_stora }; - std::vector support_holes(support_layer_storage.size(), Polygons()); + std::vector support_holes(support_layer_storage.size(), Shape()); // Extract all holes as polygon objects cura::parallel_for( 0, @@ -1974,33 +1977,33 @@ void TreeSupport::filterFloatingLines(std::vector& support_layer_stora .offset(-open_close_distance); support_layer_storage[layer_idx].removeSmallAreas(small_area_length * small_area_length, false); - std::vector parts = support_layer_storage[layer_idx].sortByNesting(); + std::vector parts = support_layer_storage[layer_idx].sortByNesting(); if (parts.size() <= 1) { return; } - Polygons holes_original; + Shape holes_original; for (const size_t idx : ranges::views::iota(1UL, parts.size())) { - Polygons area = parts[idx]; + Shape area = parts[idx]; reversePolygon(area); - holes_original.add(area); + holes_original.push_back(area); } support_holes[layer_idx] = holes_original; }); const auto t_union = std::chrono::high_resolution_clock::now(); - std::vector> holeparts(support_layer_storage.size()); + std::vector> holeparts(support_layer_storage.size()); // Split all holes into parts cura::parallel_for( 0, support_layer_storage.size(), [&](const LayerIndex layer_idx) { - for (Polygons hole : support_holes[layer_idx].splitIntoParts()) + for (Shape hole : support_holes[layer_idx].splitIntoParts()) { holeparts[layer_idx].emplace_back(hole); } @@ -2020,15 +2023,14 @@ void TreeSupport::filterFloatingLines(std::vector& support_layer_stora return; } - Polygons outer_walls - = TreeSupportUtils::toPolylines(support_layer_storage[layer_idx - 1].getOutsidePolygons()) - .tubeShape(closing_dist, 0); //.unionPolygons(volumes_.getCollision(0, layer_idx - 1, true).offset(-(config.support_line_width+config.xy_min_distance))); + const Shape& relevant_forbidden = volumes_.getCollision(0, layer_idx, true); + Shape outer_walls = TreeSupportUtils::toPolylines(support_layer_storage[layer_idx - 1].getOutsidePolygons()).createTubeShape(closing_dist, 0); - Polygons holes_below; + Shape holes_below; for (auto poly : holeparts[layer_idx - 1]) { - holes_below.add(poly); + holes_below.push_back(poly); } for (auto [idx, hole] : holeparts[layer_idx] | ranges::views::enumerate) @@ -2039,6 +2041,11 @@ void TreeSupport::filterFloatingLines(std::vector& support_layer_stora { holes_resting_outside[layer_idx].emplace(idx); } + else if (hole.intersection(PolygonUtils::clipPolygonWithAABB(relevant_forbidden, hole_aabb)).area() > hole.length() * EPSILON) + { + holes_resting_outside[layer_idx].emplace( + idx); // technically not resting outside, also not valid, but the alternative is potentially having lines go though the model + } else { for (auto [idx2, hole2] : holeparts[layer_idx - 1] | ranges::views::enumerate) @@ -2056,7 +2063,7 @@ void TreeSupport::filterFloatingLines(std::vector& support_layer_stora const auto t_hole_rest_ordering = std::chrono::high_resolution_clock::now(); std::unordered_set removed_holes_by_idx; - std::vector valid_holes(support_holes.size(), Polygons()); + std::vector valid_holes(support_holes.size(), Shape()); // Check which holes have to be removed as they do not rest on anything. Only keep holes that have to be removed for (const size_t layer_idx : ranges::views::iota(1UL, support_holes.size())) { @@ -2089,8 +2096,8 @@ void TreeSupport::filterFloatingLines(std::vector& support_layer_stora } else { - valid_holes[layer_idx].add(hole); - holeparts[layer_idx][idx] = Polygons(); // all remaining holes will have to be removed later, so removing the hole means it is confirmed valid! + valid_holes[layer_idx].push_back(hole); + holeparts[layer_idx][idx] = Shape(); // all remaining holes will have to be removed later, so removing the hole means it is confirmed valid! } } removed_holes_by_idx = next_removed_holes_by_idx; @@ -2111,7 +2118,7 @@ void TreeSupport::filterFloatingLines(std::vector& support_layer_stora support_layer_storage[layer_idx] = support_layer_storage[layer_idx].getOutsidePolygons(); reversePolygon(valid_holes[layer_idx]); - support_layer_storage[layer_idx].add(valid_holes[layer_idx]); + support_layer_storage[layer_idx].push_back(valid_holes[layer_idx]); }); @@ -2131,7 +2138,11 @@ void TreeSupport::filterFloatingLines(std::vector& support_layer_stora dur_hole_removal); } -void TreeSupport::finalizeInterfaceAndSupportAreas(std::vector& support_layer_storage, std::vector& support_roof_storage, SliceDataStorage& storage) +void TreeSupport::finalizeInterfaceAndSupportAreas( + std::vector& support_layer_storage, + std::vector& support_roof_storage, + std::vector& support_layer_storage_fractional, + SliceDataStorage& storage) { InterfacePreference interface_pref = config.interface_preference; // InterfacePreference::SUPPORT_LINES_OVERWRITE_INTERFACE; double progress_total = TREE_PROGRESS_PRECALC_AVO + TREE_PROGRESS_PRECALC_COLL + TREE_PROGRESS_GENERATE_NODES + TREE_PROGRESS_AREA_CALC + TREE_PROGRESS_GENERATE_BRANCH_AREAS @@ -2144,7 +2155,17 @@ void TreeSupport::finalizeInterfaceAndSupportAreas(std::vector& suppor support_layer_storage.size(), [&](const LayerIndex layer_idx) { - support_layer_storage[layer_idx] = support_layer_storage[layer_idx].difference(placed_support_lines_support_areas[layer_idx]); + Shape fake_roof_lines; + + for (FakeRoofArea& f_roof : fake_roof_areas[layer_idx]) + { + fake_roof_lines.push_back( + TreeSupportUtils::generateSupportInfillLines(f_roof.area_, config, false, layer_idx, f_roof.line_distance_, storage.support.cross_fill_provider, false) + .offset(config.support_line_width / 2)); + } + fake_roof_lines = fake_roof_lines.unionPolygons(); + + support_layer_storage[layer_idx] = support_layer_storage[layer_idx].difference(fake_roof_lines); // Subtract support lines of the branches from the roof storage.support.supportLayers[layer_idx].support_roof = storage.support.supportLayers[layer_idx].support_roof.unionPolygons(support_roof_storage[layer_idx]); @@ -2163,22 +2184,22 @@ void TreeSupport::finalizeInterfaceAndSupportAreas(std::vector& suppor case InterfacePreference::INTERFACE_LINES_OVERWRITE_SUPPORT: { - Polygons interface_lines = TreeSupportUtils::generateSupportInfillLines( - storage.support.supportLayers[layer_idx].support_roof, - config, - true, - layer_idx, - config.support_roof_line_distance, - storage.support.cross_fill_provider, - true) - .offsetPolyLine(config.support_roof_line_width / 2); + Shape interface_lines = TreeSupportUtils::generateSupportInfillLines( + storage.support.supportLayers[layer_idx].support_roof, + config, + true, + layer_idx, + config.support_roof_line_distance, + storage.support.cross_fill_provider, + true) + .offset(config.support_roof_line_width / 2); support_layer_storage[layer_idx] = support_layer_storage[layer_idx].difference(interface_lines); } break; case InterfacePreference::SUPPORT_LINES_OVERWRITE_INTERFACE: { - Polygons tree_lines; + Shape tree_lines; tree_lines = tree_lines.unionPolygons(TreeSupportUtils::generateSupportInfillLines( support_layer_storage[layer_idx], config, @@ -2187,7 +2208,7 @@ void TreeSupport::finalizeInterfaceAndSupportAreas(std::vector& suppor config.support_line_distance, storage.support.cross_fill_provider, true) - .offsetPolyLine(config.support_line_width / 2)); + .offset(config.support_line_width / 2)); storage.support.supportLayers[layer_idx].support_roof = storage.support.supportLayers[layer_idx].support_roof.difference(tree_lines); // Do not draw roof where the tree is. I prefer it this way as otherwise the roof may cut of a branch from its support below. } @@ -2201,21 +2222,20 @@ void TreeSupport::finalizeInterfaceAndSupportAreas(std::vector& suppor // Subtract support floors from the support area and add them to the support floor instead. if (config.support_bottom_layers > 0 && ! support_layer_storage[layer_idx].empty()) { - Polygons floor_layer = storage.support.supportLayers[layer_idx].support_bottom; - Polygons layer_outset = support_layer_storage[layer_idx].offset(config.support_bottom_offset).difference(volumes_.getCollision(0, layer_idx, false)); + Shape floor_layer = storage.support.supportLayers[layer_idx].support_bottom; + Shape layer_outset = support_layer_storage[layer_idx].offset(config.support_bottom_offset).difference(volumes_.getCollision(0, layer_idx, false)); size_t layers_below = 0; while (layers_below <= config.support_bottom_layers) { - // One sample at 0 layers below, another at config.support_bottom_layers. In-between samples at config.performance_interface_skip_layers distance from each - // other. + // One sample at 0 layers below, another at config.support_bottom_layers. In-between samples at 1-layer distance from each other. const size_t sample_layer = static_cast(std::max(0, (static_cast(layer_idx) - static_cast(layers_below)) - static_cast(config.z_distance_bottom_layers))); constexpr bool no_support = false; constexpr bool no_prime_tower = false; - floor_layer.add(layer_outset.intersection(storage.getLayerOutlines(sample_layer, no_support, no_prime_tower))); + floor_layer.push_back(layer_outset.intersection(storage.getLayerOutlines(sample_layer, no_support, no_prime_tower))); if (layers_below < config.support_bottom_layers) { - layers_below = std::min(layers_below + config.performance_interface_skip_layers, config.support_bottom_layers); + layers_below = std::min(layers_below + 1UL, config.support_bottom_layers); } else { @@ -2226,10 +2246,41 @@ void TreeSupport::finalizeInterfaceAndSupportAreas(std::vector& suppor storage.support.supportLayers[layer_idx].support_bottom = storage.support.supportLayers[layer_idx].support_bottom.unionPolygons(floor_layer); support_layer_storage[layer_idx] = support_layer_storage[layer_idx].difference(floor_layer.offset(10)); // Subtract the support floor from the normal support. } + }); + + cura::parallel_for( + 0, + support_layer_storage.size(), + [&](const LayerIndex layer_idx) + { + constexpr bool convert_every_part = true; // Convert every part into a SingleShape for the support. - constexpr bool convert_every_part = true; // Convert every part into a PolygonsPart for the support. storage.support.supportLayers[layer_idx] - .fillInfillParts(layer_idx, support_layer_storage, config.support_line_width, config.support_wall_count, config.maximum_move_distance, convert_every_part); + .fillInfillParts(support_layer_storage[layer_idx], config.support_line_width, config.support_wall_count, false, convert_every_part); + + + // This only works because fractional support is always just projected upwards regular support or skin. + // Also technically violates skin height, but there is no good way to prevent that. + Shape fractional_support; + + if (layer_idx > 0) + { + fractional_support = support_layer_storage_fractional[layer_idx].intersection(support_layer_storage[layer_idx - 1]); + } + else + { + fractional_support = support_layer_storage_fractional[layer_idx]; + } + + storage.support.supportLayers[layer_idx].fillInfillParts(fractional_support, config.support_line_width, config.support_wall_count, true, convert_every_part); + + + for (FakeRoofArea& fake_roof : fake_roof_areas[layer_idx]) + { + storage.support.supportLayers[layer_idx] + .fillInfillParts(fake_roof.area_, config.support_line_width, 0, fake_roof.fractional_, convert_every_part, fake_roof.line_distance_); + } + { std::lock_guard critical_section_progress(critical_sections); @@ -2249,8 +2300,10 @@ void TreeSupport::finalizeInterfaceAndSupportAreas(std::vector& suppor void TreeSupport::drawAreas(std::vector>& move_bounds, SliceDataStorage& storage) { - std::vector support_layer_storage(move_bounds.size()); - std::vector support_roof_storage(move_bounds.size()); + std::vector support_layer_storage(move_bounds.size()); + std::vector support_layer_storage_fractional(move_bounds.size()); + std::vector support_roof_storage_fractional(move_bounds.size()); + std::vector support_roof_storage(move_bounds.size()); std::map inverse_tree_order; // In the tree structure only the parents can be accessed. Inverse this to be able to access the children. std::vector> @@ -2281,8 +2334,8 @@ void TreeSupport::drawAreas(std::vector>& move_bou } - // Reorder the processed data by layers again. The map also could be a vector>: - std::vector> layer_tree_polygons(move_bounds.size()); + // Reorder the processed data by layers again. The map also could be a vector>: + std::vector> layer_tree_polygons(move_bounds.size()); const auto t_start = std::chrono::high_resolution_clock::now(); // Generate the circles that will be the branches. @@ -2295,16 +2348,16 @@ void TreeSupport::drawAreas(std::vector>& move_bou const auto t_smooth = std::chrono::high_resolution_clock::now(); // Drop down all trees that connect non gracefully with the model. - std::vector>> dropped_down_areas(linear_data.size()); + std::vector>> dropped_down_areas(linear_data.size()); dropNonGraciousAreas(layer_tree_polygons, linear_data, dropped_down_areas, inverse_tree_order); const auto t_drop = std::chrono::high_resolution_clock::now(); // single threaded combining all dropped down support areas to the right layers. ONLY COPYS DATA! for (const coord_t i : ranges::views::iota(0UL, dropped_down_areas.size())) { - for (std::pair pair : dropped_down_areas[i]) + for (std::pair pair : dropped_down_areas[i]) { - support_layer_storage[pair.first].add(pair.second); + support_layer_storage[pair.first].push_back(pair.second); } } @@ -2314,7 +2367,7 @@ void TreeSupport::drawAreas(std::vector>& move_bou layer_tree_polygons.size(), [&](const size_t layer_idx) { - for (std::pair data_pair : layer_tree_polygons[layer_idx]) + for (std::pair data_pair : layer_tree_polygons[layer_idx]) { if (data_pair.first->missing_roof_layers_ > data_pair.first->distance_to_top_ && TreeSupportUtils::generateSupportInfillLines(data_pair.second, config, true, layer_idx, config.support_roof_line_distance, nullptr, true).empty()) @@ -2338,21 +2391,40 @@ void TreeSupport::drawAreas(std::vector>& move_bou } }); - // Single threaded combining all support areas to the right layers. - // Only copies data! - for (const auto layer_idx : ranges::views::iota(0UL, layer_tree_polygons.size())) - { - for (std::pair data_pair : layer_tree_polygons[layer_idx]) + cura::parallel_for( + 0, + layer_tree_polygons.size(), + [&](const size_t layer_idx) { - ((data_pair.first->missing_roof_layers_ > data_pair.first->distance_to_top_) ? support_roof_storage : support_layer_storage)[layer_idx].add(data_pair.second); - } - } + for (std::pair data_pair : layer_tree_polygons[layer_idx]) + { + if (data_pair.first->parents_.empty() && ! data_pair.first->supports_roof_ && layer_idx + 1 < support_roof_storage_fractional.size() + && config.z_distance_top % config.layer_height > 0) + { + if (data_pair.first->missing_roof_layers_ > data_pair.first->distance_to_top_) + { + support_roof_storage_fractional[layer_idx + 1].push_back(data_pair.second); + } + else + { + support_layer_storage_fractional[layer_idx + 1].push_back(data_pair.second); + } + } + + ((data_pair.first->missing_roof_layers_ > data_pair.first->distance_to_top_) ? support_roof_storage : support_layer_storage)[layer_idx].push_back(data_pair.second); + } + if (layer_idx + 1 < support_roof_storage_fractional.size()) + { + support_roof_storage_fractional[layer_idx + 1] = support_roof_storage_fractional[layer_idx + 1].unionPolygons(); + support_layer_storage_fractional[layer_idx + 1] = support_layer_storage_fractional[layer_idx + 1].unionPolygons(); + } + }); for (const auto layer_idx : ranges::views::iota(0UL, additional_required_support_area.size())) { if (support_layer_storage.size() > layer_idx) { - support_layer_storage[layer_idx].add(additional_required_support_area[layer_idx]); + support_layer_storage[layer_idx].push_back(additional_required_support_area[layer_idx]); } scripta::log("tree_support_layer_storage", support_layer_storage[layer_idx], SectionType::SUPPORT, layer_idx); } @@ -2360,7 +2432,7 @@ void TreeSupport::drawAreas(std::vector>& move_bou filterFloatingLines(support_layer_storage); const auto t_filter = std::chrono::high_resolution_clock::now(); - finalizeInterfaceAndSupportAreas(support_layer_storage, support_roof_storage, storage); + finalizeInterfaceAndSupportAreas(support_layer_storage, support_roof_storage, support_layer_storage_fractional, storage); const auto t_end = std::chrono::high_resolution_clock::now(); const auto dur_gen_tips = 0.001 * std::chrono::duration_cast(t_generate - t_start).count(); diff --git a/src/TreeSupportTipGenerator.cpp b/src/TreeSupportTipGenerator.cpp index a908d06d71..0a2af0e233 100644 --- a/src/TreeSupportTipGenerator.cpp +++ b/src/TreeSupportTipGenerator.cpp @@ -1,24 +1,24 @@ -// Copyright (c) 2023 UltiMaker +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher #include "TreeSupportTipGenerator.h" #include +#include #include -#include +#include #include #include #include #include -#include #include #include "Application.h" //To get settings. #include "TreeSupportUtils.h" +#include "geometry/OpenPolyline.h" #include "infill/SierpinskiFillProvider.h" #include "settings/EnumSettings.h" -#include "utils/Simplify.h" #include "utils/ThreadPool.h" #include "utils/algorithm.h" #include "utils/math.h" //For round_up_divide and PI. @@ -54,11 +54,12 @@ TreeSupportTipGenerator::TreeSupportTipGenerator(const SliceMeshStorage& mesh, T , support_tree_branch_reach_limit_(support_tree_limit_branch_reach_ ? mesh.settings.get("support_tree_branch_reach_limit") : 0) , z_distance_delta_(std::min(config_.z_distance_top_layers + 1, mesh.overhang_areas.size())) , xy_overrides_(config_.support_overrides == SupportDistPriority::XY_OVERRIDES_Z) - , tip_roof_size_(force_tip_to_roof_ ? config_.min_radius * config_.min_radius * std::numbers::pi : 0) + , tip_roof_size_(force_tip_to_roof_ ? INT2MM2(config_.min_radius * config_.min_radius) * std::numbers::pi : 0) , force_minimum_roof_area_(use_fake_roof_ || SUPPORT_TREE_MINIMUM_ROOF_AREA_HARD_LIMIT) , already_inserted_(mesh.overhang_areas.size()) - , support_roof_drawn_(mesh.overhang_areas.size(), Polygons()) - , roof_tips_drawn_(mesh.overhang_areas.size(), Polygons()) + , support_roof_drawn_(mesh.overhang_areas.size(), Shape()) + , support_roof_drawn_fractional_(mesh.overhang_areas.size(), Shape()) + , roof_tips_drawn_(mesh.overhang_areas.size(), Shape()) { const double support_overhang_angle = mesh.settings.get("support_angle"); const coord_t max_overhang_speed = (support_overhang_angle < TAU / 4) ? (coord_t)(tan(support_overhang_angle) * config_.layer_height) : std::numeric_limits::max(); @@ -104,7 +105,7 @@ TreeSupportTipGenerator::TreeSupportTipGenerator(const SliceMeshStorage& mesh, T } -std::vector TreeSupportTipGenerator::convertLinesToInternal(Polygons polylines, LayerIndex layer_idx) +std::vector TreeSupportTipGenerator::convertLinesToInternal(const OpenLinesSet& polylines, LayerIndex layer_idx) { // NOTE: The volumes below (on which '.inside(p, true)' is called each time below) are the same each time. The values being calculated here are strictly local as well. // So they could in theory be pre-calculated here (outside of the loop). However, when I refatored it to be that way, it seemed to cause deadlocks each time for some @@ -114,7 +115,7 @@ std::vector TreeSupportTipGenerator::c std::vector result; // Also checks if the position is valid, if it is NOT, it deletes that point - for (const auto& line : polylines) + for (const OpenPolyline& line : polylines) { LineInformation res_line; for (const Point2LL& p : line) @@ -158,17 +159,17 @@ std::vector TreeSupportTipGenerator::c return result; } -Polygons TreeSupportTipGenerator::convertInternalToLines(std::vector lines) +OpenLinesSet TreeSupportTipGenerator::convertInternalToLines(std::vector lines) { - Polygons result; + OpenLinesSet result; for (const LineInformation& line : lines) { - Polygon path; + OpenPolyline path; for (const auto& point_data : line) { - path.add(point_data.first); + path.push_back(point_data.first); } - result.add(path); + result.push_back(path); } return result; } @@ -250,23 +251,24 @@ std::pair, std::vector>>>(keep, set_free); } -Polygons TreeSupportTipGenerator::ensureMaximumDistancePolyline(const Polygons& input, coord_t distance, size_t min_points, bool enforce_distance) const +OpenLinesSet TreeSupportTipGenerator::ensureMaximumDistancePolyline(const OpenLinesSet& input, coord_t distance, size_t min_points, bool enforce_distance) const { - Polygons result; - for (auto part : input) + OpenLinesSet result; + for (OpenPolyline part : input) { if (part.size() == 0) { continue; } - const coord_t length = Polygon(part).offset(0).polyLineLength(); - Polygon line; + + const coord_t length = part.length(); + OpenPolyline line; coord_t current_distance = std::max(distance, coord_t(FUDGE_LENGTH * 2)); if (length < 2 * distance && min_points <= 1) { - ClosestPolygonPoint middle_point(part[0], 0, part); + ClosestPoint middle_point(part[0], 0, &part); middle_point = PolygonUtils::walk(middle_point, coord_t(length / 2)); - line.add(middle_point.location_); + line.push_back(middle_point.location_); } else { @@ -300,7 +302,7 @@ Polygons TreeSupportTipGenerator::ensureMaximumDistancePolyline(const Polygons& { line.clear(); Point2LL current_point = part[0]; - line.add(part[0]); + line.push_back(part[0]); bool should_add_endpoint = min_points > 1 || vSize2(part[0] - part[optimal_end_index]) > (current_distance * current_distance); bool added_endpoint = ! should_add_endpoint; // If no endpoint should be added all endpoints are already added. @@ -318,7 +320,7 @@ Polygons TreeSupportTipGenerator::ensureMaximumDistancePolyline(const Polygons& current_index = optimal_end_index; current_point = part[optimal_end_index]; added_endpoint = true; - line.add(part[optimal_end_index]); + line.push_back(part[optimal_end_index]); continue; } @@ -336,7 +338,7 @@ Polygons TreeSupportTipGenerator::ensureMaximumDistancePolyline(const Polygons& if (! enforce_distance || min_distance_to_existing_point_sqd >= (current_distance * current_distance)) { // viable point was found. Add to possible result. - line.add(next_point.location); + line.push_back(next_point.location); current_point = next_point.location; current_index = next_point.pos; next_distance = current_distance; @@ -366,13 +368,13 @@ Polygons TreeSupportTipGenerator::ensureMaximumDistancePolyline(const Polygons& if (! added_endpoint) { - line.add(part[optimal_end_index]); + line.push_back(part[optimal_end_index]); } current_distance *= 0.9; } } - result.add(line); + result.push_back(line); } return result; } @@ -406,7 +408,7 @@ std::shared_ptr TreeSupportTipGenerator::generateCrossFi return nullptr; } -void TreeSupportTipGenerator::dropOverhangAreas(const SliceMeshStorage& mesh, std::vector& result, bool roof) +void TreeSupportTipGenerator::dropOverhangAreas(const SliceMeshStorage& mesh, std::vector& result, bool roof) { std::mutex critical; @@ -421,13 +423,13 @@ void TreeSupportTipGenerator::dropOverhangAreas(const SliceMeshStorage& mesh, st return; // This is a continue if imagined in a loop context. } - Polygons relevant_forbidden = volumes_.getCollision(roof ? 0 : config_.getRadius(0), layer_idx, ! xy_overrides_); + Shape relevant_forbidden = volumes_.getCollision(roof ? 0 : config_.getRadius(0), layer_idx, ! xy_overrides_); // ^^^ Take the least restrictive avoidance possible // Technically this also makes support blocker smaller, which is wrong as they do not have a xy_distance, but it should be good enough. - Polygons model_outline = volumes_.getCollision(0, layer_idx, ! xy_overrides_).offset(-config_.xy_min_distance, ClipperLib::jtRound); + Shape model_outline = volumes_.getCollision(0, layer_idx, ! xy_overrides_).offset(-config_.xy_min_distance, ClipperLib::jtRound); - Polygons overhang_regular = TreeSupportUtils::safeOffsetInc( + Shape overhang_regular = TreeSupportUtils::safeOffsetInc( mesh.overhang_areas[layer_idx + z_distance_delta_], roof ? roof_outset_ : support_outset_, relevant_forbidden, @@ -436,19 +438,19 @@ void TreeSupportTipGenerator::dropOverhangAreas(const SliceMeshStorage& mesh, st 1, config_.support_line_distance / 2, &config_.simplifier); - Polygons remaining_overhang = mesh.overhang_areas[layer_idx + z_distance_delta_] - .offset(roof ? roof_outset_ : support_outset_) - .difference(overhang_regular) - .intersection(relevant_forbidden) - .difference(model_outline); + Shape remaining_overhang = mesh.overhang_areas[layer_idx + z_distance_delta_] + .offset(roof ? roof_outset_ : support_outset_) + .difference(overhang_regular) + .intersection(relevant_forbidden) + .difference(model_outline); for (size_t lag_ctr = 1; lag_ctr <= max_overhang_insert_lag_ && layer_idx - coord_t(lag_ctr) >= 1 && ! remaining_overhang.empty(); lag_ctr++) { { std::lock_guard critical_section_storage(critical); - result[layer_idx - lag_ctr].add(remaining_overhang); + result[layer_idx - lag_ctr].push_back(remaining_overhang); } - Polygons relevant_forbidden_below = volumes_.getCollision(roof ? 0 : config_.getRadius(0), layer_idx - lag_ctr, ! xy_overrides_).offset(EPSILON); + Shape relevant_forbidden_below = volumes_.getCollision(roof ? 0 : config_.getRadius(0), layer_idx - lag_ctr, ! xy_overrides_).offset(EPSILON); remaining_overhang = remaining_overhang.intersection(relevant_forbidden_below).unionPolygons().difference(model_outline); } }); @@ -464,9 +466,9 @@ void TreeSupportTipGenerator::dropOverhangAreas(const SliceMeshStorage& mesh, st void TreeSupportTipGenerator::calculateRoofAreas(const cura::SliceMeshStorage& mesh) { - std::vector potential_support_roofs(mesh.overhang_areas.size(), Polygons()); + std::vector potential_support_roofs(mesh.overhang_areas.size(), Shape()); std::mutex critical_potential_support_roofs; - std::vector dropped_overhangs(mesh.overhang_areas.size(), Polygons()); + std::vector dropped_overhangs(mesh.overhang_areas.size(), Shape()); if (xy_overrides_) { @@ -485,19 +487,19 @@ void TreeSupportTipGenerator::calculateRoofAreas(const cura::SliceMeshStorage& m // Roof does not have a radius, so remove it using offset. Note that there is no 0 radius avoidance, and it would not be identical with the avoidance offset with // -radius. This is intentional here, as support roof is still valid if only a part of the tip may reach it. - Polygons forbidden_here = volumes_ - .getAvoidance( - config_.getRadius(0), - layer_idx, - (only_gracious_ || ! config_.support_rests_on_model) ? AvoidanceType::FAST : AvoidanceType::COLLISION, - config_.support_rests_on_model, - ! xy_overrides_) - .offset(-config_.getRadius(0), ClipperLib::jtRound); + Shape forbidden_here = volumes_ + .getAvoidance( + config_.getRadius(0), + layer_idx, + (only_gracious_ || ! config_.support_rests_on_model) ? AvoidanceType::FAST : AvoidanceType::COLLISION, + config_.support_rests_on_model, + ! xy_overrides_) + .offset(-config_.getRadius(0), ClipperLib::jtRound); // todo Since arachnea the assumption that an area smaller then line_width is not printed is no longer true all such safeOffset should have config.support_line_width // replaced with another setting. It should still work in most cases, but it should be possible to create a situation where a overhang outset lags though a wall. I will // take a look at this later. - Polygons full_overhang_area = TreeSupportUtils::safeOffsetInc( + Shape full_overhang_area = TreeSupportUtils::safeOffsetInc( mesh.full_overhang_areas[layer_idx + z_distance_delta_].unionPolygons(dropped_overhangs[layer_idx]), roof_outset_, forbidden_here, @@ -509,14 +511,14 @@ void TreeSupportTipGenerator::calculateRoofAreas(const cura::SliceMeshStorage& m for (LayerIndex dtt_roof = 0; dtt_roof < support_roof_layers_ && layer_idx - dtt_roof >= 1; dtt_roof++) { - const Polygons forbidden_next = volumes_ - .getAvoidance( - config_.getRadius(0), - layer_idx - (dtt_roof + 1), - (only_gracious_ || ! config_.support_rests_on_model) ? AvoidanceType::FAST : AvoidanceType::COLLISION, - config_.support_rests_on_model, - ! xy_overrides_) - .offset(-config_.getRadius(0), ClipperLib::jtRound); + const Shape forbidden_next = volumes_ + .getAvoidance( + config_.getRadius(0), + layer_idx - (dtt_roof + 1), + (only_gracious_ || ! config_.support_rests_on_model) ? AvoidanceType::FAST : AvoidanceType::COLLISION, + config_.support_rests_on_model, + ! xy_overrides_) + .offset(-config_.getRadius(0), ClipperLib::jtRound); full_overhang_area = full_overhang_area.difference(forbidden_next); @@ -528,7 +530,11 @@ void TreeSupportTipGenerator::calculateRoofAreas(const cura::SliceMeshStorage& m if (full_overhang_area.area() > EPSILON) { std::lock_guard critical_section_potential_support_roofs(critical_potential_support_roofs); - potential_support_roofs[layer_idx - dtt_roof].add((full_overhang_area)); + potential_support_roofs[layer_idx - dtt_roof].push_back((full_overhang_area)); + if (dtt_roof == 0) + { + support_roof_drawn_fractional_[layer_idx].push_back(full_overhang_area); + } } else { @@ -554,7 +560,7 @@ void TreeSupportTipGenerator::calculateRoofAreas(const cura::SliceMeshStorage& m .unionPolygons(potential_support_roofs[layer_idx]); }); - std::vector additional_support_roofs(mesh.overhang_areas.size(), Polygons()); + std::vector additional_support_roofs(mesh.overhang_areas.size(), Shape()); cura::parallel_for( 0, @@ -565,18 +571,18 @@ void TreeSupportTipGenerator::calculateRoofAreas(const cura::SliceMeshStorage& m { // Roof does not have a radius, so remove it using offset. Note that there is no 0 radius avoidance, and it would not be identical with the avoidance offset with // -radius. This is intentional here, as support roof is still valid if only a part of the tip may reach it. - Polygons forbidden_here = volumes_ - .getAvoidance( - config_.getRadius(0), - layer_idx, - (only_gracious_ || ! config_.support_rests_on_model) ? AvoidanceType::FAST : AvoidanceType::COLLISION, - config_.support_rests_on_model, - ! xy_overrides_) - .offset(-(config_.getRadius(0)), ClipperLib::jtRound); + Shape forbidden_here = volumes_ + .getAvoidance( + config_.getRadius(0), + layer_idx, + (only_gracious_ || ! config_.support_rests_on_model) ? AvoidanceType::FAST : AvoidanceType::COLLISION, + config_.support_rests_on_model, + ! xy_overrides_) + .offset(-(config_.getRadius(0)), ClipperLib::jtRound); if (! force_minimum_roof_area_) { - Polygons fuzzy_area = Polygons(); + Shape fuzzy_area = Shape(); // the roof will be combined with roof above and below, to see if a part of this roof may be part of a valid roof further up/down. // This prevents the situation where a roof gets removed even tough its area would contribute to a (better) printable roof area further down. @@ -584,25 +590,25 @@ void TreeSupportTipGenerator::calculateRoofAreas(const cura::SliceMeshStorage& m -LayerIndex{ std::min(layer_idx, LayerIndex{ support_roof_layers_ }) }, LayerIndex{ std::min(LayerIndex{ potential_support_roofs.size() - layer_idx }, LayerIndex{ support_roof_layers_ + 1 }) })) { - fuzzy_area.add(support_roof_drawn_[layer_idx + layer_offset]); - fuzzy_area.add(potential_support_roofs[layer_idx + layer_offset]); + fuzzy_area.push_back(support_roof_drawn_[layer_idx + layer_offset]); + fuzzy_area.push_back(potential_support_roofs[layer_idx + layer_offset]); } fuzzy_area = fuzzy_area.unionPolygons(); fuzzy_area.removeSmallAreas(std::max(minimum_roof_area_, tip_roof_size_)); - for (Polygons potential_roof : potential_support_roofs[layer_idx].difference(forbidden_here).splitIntoParts()) + for (Shape potential_roof : potential_support_roofs[layer_idx].difference(forbidden_here).splitIntoParts()) { if (! potential_roof.intersection(fuzzy_area).empty()) { - additional_support_roofs[layer_idx].add(potential_roof); + additional_support_roofs[layer_idx].push_back(potential_roof); } } } else { - Polygons valid_roof = potential_support_roofs[layer_idx].difference(forbidden_here); + Shape valid_roof = potential_support_roofs[layer_idx].difference(forbidden_here); valid_roof.removeSmallAreas(std::max(minimum_roof_area_, tip_roof_size_)); - additional_support_roofs[layer_idx].add(valid_roof); + additional_support_roofs[layer_idx].push_back(valid_roof); } } }); @@ -637,11 +643,11 @@ void TreeSupportTipGenerator::addPointAsInfluenceArea( } Polygon circle; Polygon base_circle = TreeSupportBaseCircle::getBaseCircle(); - for (Point2LL corner : base_circle) + for (const Point2LL& corner : base_circle) { - circle.add(p.first + corner); + circle.push_back(p.first + corner); } - Polygons area = circle.offset(0); + Shape area = circle.offset(0); { std::lock_guard critical_section_movebounds(critical_move_bounds_); if (! already_inserted_[insert_layer].count(p.first / ((config_.min_radius + 1) / 10))) @@ -658,11 +664,11 @@ void TreeSupportTipGenerator::addPointAsInfluenceArea( dont_move_until, roof, safe_radius, - force_tip_to_roof_, + ! roof && force_tip_to_roof_, skip_ovalisation, support_tree_limit_branch_reach_, support_tree_branch_reach_limit_); - elem->area_ = new Polygons(area); + elem->area_ = new Shape(area); for (Point2LL target : additional_ovalization_targets) { @@ -694,11 +700,11 @@ void TreeSupportTipGenerator::addLinesAsInfluenceAreas( std::function)> evaluateRoofWillGenerate = [&](std::pair p) { Polygon roof_circle; - for (Point2LL corner : TreeSupportBaseCircle::getBaseCircle()) + for (const Point2LL& corner : TreeSupportBaseCircle::getBaseCircle()) { - roof_circle.add(p.first + corner * std::max(config_.min_radius / TreeSupportBaseCircle::base_radius, coord_t(1))); + roof_circle.push_back(p.first + corner * std::max(config_.min_radius / TreeSupportBaseCircle::base_radius, coord_t(1))); } - Polygons area = roof_circle.offset(0); + Shape area = roof_circle.offset(0); return ! TreeSupportUtils::generateSupportInfillLines(area, config_, true, insert_layer_idx - dtt_roof_tip, support_roof_line_distance_, cross_fill_provider_, true) .empty(); }; @@ -727,24 +733,28 @@ void TreeSupportTipGenerator::addLinesAsInfluenceAreas( } // Add all tips as roof to the roof storage. - Polygons added_roofs; + Shape added_roofs; for (LineInformation line : lines) { for (std::pair p : line) { Polygon roof_circle; - for (Point2LL corner : TreeSupportBaseCircle::getBaseCircle()) + for (const Point2LL& corner : TreeSupportBaseCircle::getBaseCircle()) { - roof_circle.add(p.first + corner * std::max(config_.min_radius / TreeSupportBaseCircle::base_radius, coord_t(1))); + roof_circle.push_back(p.first + corner * std::max(config_.min_radius / TreeSupportBaseCircle::base_radius, coord_t(1))); } - added_roofs.add(roof_circle); + added_roofs.push_back(roof_circle); } } added_roofs = added_roofs.unionPolygons(); { std::lock_guard critical_section_roof(critical_roof_tips_); + roof_tips_drawn_[insert_layer_idx - dtt_roof_tip].push_back(added_roofs); - roof_tips_drawn_[insert_layer_idx - dtt_roof_tip].add(added_roofs); + if (dtt_roof_tip == 0) + { + support_roof_drawn_fractional_[insert_layer_idx].push_back(added_roofs); + } } } } @@ -786,7 +796,7 @@ void TreeSupportTipGenerator::addLinesAsInfluenceAreas( void TreeSupportTipGenerator::removeUselessAddedPoints( std::vector>& move_bounds, SliceDataStorage& storage, - std::vector& additional_support_areas) + std::vector& additional_support_areas) { cura::parallel_for( 0, @@ -796,9 +806,9 @@ void TreeSupportTipGenerator::removeUselessAddedPoints( if (layer_idx + 1 < storage.support.supportLayers.size()) { std::vector to_be_removed; - Polygons roof_on_layer_above = use_fake_roof_ ? support_roof_drawn_[layer_idx + 1] - : storage.support.supportLayers[layer_idx + 1].support_roof.unionPolygons(additional_support_areas[layer_idx + 1]); - Polygons roof_on_layer + Shape roof_on_layer_above = use_fake_roof_ ? support_roof_drawn_[layer_idx + 1] + : storage.support.supportLayers[layer_idx + 1].support_roof.unionPolygons(additional_support_areas[layer_idx + 1]); + Shape roof_on_layer = use_fake_roof_ ? support_roof_drawn_[layer_idx] : storage.support.supportLayers[layer_idx].support_roof.unionPolygons(additional_support_areas[layer_idx]); for (TreeSupportElement* elem : move_bounds[layer_idx]) @@ -837,8 +847,8 @@ void TreeSupportTipGenerator::generateTips( SliceDataStorage& storage, const SliceMeshStorage& mesh, std::vector>& move_bounds, - std::vector& additional_support_areas, - std::vector& placed_support_lines_support_areas) + std::vector& additional_support_areas, + std::vector>& placed_fake_roof_areas) { std::vector> new_tips(move_bounds.size()); @@ -868,7 +878,7 @@ void TreeSupportTipGenerator::generateTips( return; // This is a continue if imagined in a loop context. } - Polygons relevant_forbidden = volumes_.getAvoidance( + Shape relevant_forbidden = volumes_.getAvoidance( config_.getRadius(0), layer_idx, (only_gracious_ || ! config_.support_rests_on_model) ? AvoidanceType::FAST : AvoidanceType::COLLISION, @@ -879,7 +889,7 @@ void TreeSupportTipGenerator::generateTips( = relevant_forbidden.offset(EPSILON) .unionPolygons(); // Prevent rounding errors down the line, points placed directly on the line of the forbidden area may not be added otherwise. - std::function generateLines = [&](const Polygons& area, bool roof, LayerIndex generate_layer_idx) + std::function generateLines = [&](const Shape& area, bool roof, LayerIndex generate_layer_idx) { coord_t upper_line_distance = support_supporting_branch_distance_; coord_t line_distance = std::max(roof ? support_roof_line_distance_ : support_tree_branch_distance_, upper_line_distance); @@ -896,21 +906,21 @@ void TreeSupportTipGenerator::generateTips( }; - std::vector> overhang_processing; + std::vector> overhang_processing; // ^^^ Every overhang has saved if a roof should be generated for it. // This can NOT be done in the for loop as an area may NOT have a roof even if it is larger than the minimum_roof_area when it is only larger because of the support // horizontal expansion and it would not have a roof if the overhang is offset by support roof horizontal expansion instead. (At least this is the current behavior // of the regular support) - Polygons core_overhang = mesh.overhang_areas[layer_idx + z_distance_delta_]; + Shape core_overhang = mesh.overhang_areas[layer_idx + z_distance_delta_]; if (support_roof_layers_ && layer_idx + 1 < support_roof_drawn_.size()) { core_overhang = core_overhang.difference(support_roof_drawn_[layer_idx]); - for (Polygons roof_part : support_roof_drawn_[layer_idx + 1] - .difference(support_roof_drawn_[layer_idx]) - .splitIntoParts(true)) // If there is a roof, the roof will be one layer above the tips. + for (Shape roof_part : support_roof_drawn_[layer_idx + 1] + .difference(support_roof_drawn_[layer_idx]) + .splitIntoParts(true)) // If there is a roof, the roof will be one layer above the tips. { //^^^Technically one should also subtract the avoidance of radius 0 (similarly how calculated in calculateRoofArea), as there can be some rounding errors // introduced since then. But this does not fully prevent some rounding errors either way, so just handle the error later. @@ -918,7 +928,7 @@ void TreeSupportTipGenerator::generateTips( } } - Polygons overhang_regular = TreeSupportUtils::safeOffsetInc( + Shape overhang_regular = TreeSupportUtils::safeOffsetInc( core_overhang, support_outset_, relevant_forbidden, @@ -927,8 +937,7 @@ void TreeSupportTipGenerator::generateTips( 1, config_.support_line_distance / 2, &config_.simplifier); - Polygons remaining_overhang - = core_overhang.offset(support_outset_).difference(overhang_regular.offset(config_.support_line_width * 0.5)).intersection(relevant_forbidden); + Shape remaining_overhang = core_overhang.offset(support_outset_).difference(overhang_regular.offset(config_.support_line_width * 0.5)).intersection(relevant_forbidden); // Offset ensures that areas that could be supported by a part of a support line, are not considered unsupported overhang @@ -942,7 +951,7 @@ void TreeSupportTipGenerator::generateTips( ? std::min(config_.support_line_width / 8, extra_outset - extra_total_offset_acc) : std::min(circle_length_to_half_linewidth_change, extra_outset - extra_total_offset_acc); extra_total_offset_acc += offset_current_step; - Polygons overhang_offset = TreeSupportUtils::safeOffsetInc( + Shape overhang_offset = TreeSupportUtils::safeOffsetInc( overhang_regular, 1.5 * extra_total_offset_acc, volumes_.getCollision(0, layer_idx, true), @@ -953,7 +962,7 @@ void TreeSupportTipGenerator::generateTips( &config_.simplifier); remaining_overhang = remaining_overhang.difference(overhang_offset.unionPolygons(support_roof_drawn_[layer_idx].offset(1.5 * extra_total_offset_acc))) .unionPolygons(); // overhang_offset is combined with roof, as all area that has a roof, is already supported by said roof. - Polygons next_overhang = TreeSupportUtils::safeOffsetInc( + Shape next_overhang = TreeSupportUtils::safeOffsetInc( remaining_overhang, extra_total_offset_acc, volumes_.getCollision(0, layer_idx, true), @@ -970,7 +979,7 @@ void TreeSupportTipGenerator::generateTips( // (while adding them an infinite amount of layers down would technically be closer the setting description, it would not produce reasonable results. ) if (xy_overrides_) { - for (Polygons& remaining_overhang_part : remaining_overhang.splitIntoParts(false)) + for (Shape& remaining_overhang_part : remaining_overhang.splitIntoParts(false)) { if (remaining_overhang_part.area() <= MM2_2INT(minimum_support_area_)) { @@ -978,7 +987,7 @@ void TreeSupportTipGenerator::generateTips( } std::vector overhang_lines; - Polygons polylines = ensureMaximumDistancePolyline(generateLines(remaining_overhang_part, false, layer_idx), config_.min_radius, 1, false); + OpenLinesSet polylines = ensureMaximumDistancePolyline(generateLines(remaining_overhang_part, false, layer_idx), config_.min_radius, 1, false); // ^^^ Support_line_width to form a line here as otherwise most will be unsupported. // Technically this violates branch distance, but not only is this the only reasonable choice, // but it ensures consistent behavior as some infill patterns generate each line segment as its own polyline part causing a similar line forming behavior. @@ -1002,7 +1011,7 @@ void TreeSupportTipGenerator::generateTips( for (size_t lag_ctr = 1; lag_ctr <= max_overhang_insert_lag_ && ! overhang_lines.empty() && layer_idx - coord_t(lag_ctr) >= 1; lag_ctr++) { // get least restricted avoidance for layer_idx-lag_ctr - Polygons relevant_forbidden_below = volumes_.getAvoidance( + Shape relevant_forbidden_below = volumes_.getAvoidance( config_.getRadius(0), layer_idx - lag_ctr, (only_gracious_ || ! config_.support_rests_on_model) ? AvoidanceType::FAST : AvoidanceType::COLLISION, @@ -1045,23 +1054,23 @@ void TreeSupportTipGenerator::generateTips( overhang_regular.removeSmallAreas(minimum_support_area_); - for (Polygons support_part : overhang_regular.splitIntoParts(true)) + for (Shape support_part : overhang_regular.splitIntoParts(true)) { overhang_processing.emplace_back(support_part, false); } - for (std::pair overhang_pair : overhang_processing) + for (std::pair overhang_pair : overhang_processing) { const bool roof_allowed_for_this_part = overhang_pair.second; - Polygons overhang_outset = overhang_pair.first; - const size_t min_support_points = std::max(coord_t(1), std::min(coord_t(EPSILON), overhang_outset.polygonLength() / connect_length_)); + Shape overhang_outset = overhang_pair.first; + const size_t min_support_points = std::max(coord_t(1), std::min(coord_t(EPSILON), overhang_outset.length() / connect_length_)); std::vector overhang_lines; bool only_lines = true; // The tip positions are determined here. // todo can cause inconsistent support density if a line exactly aligns with the model - Polygons polylines = ensureMaximumDistancePolyline( + OpenLinesSet polylines = ensureMaximumDistancePolyline( generateLines(overhang_outset, roof_allowed_for_this_part, layer_idx + roof_allowed_for_this_part), ! roof_allowed_for_this_part ? config_.min_radius * 2 : use_fake_roof_ ? support_supporting_branch_distance_ @@ -1080,7 +1089,7 @@ void TreeSupportTipGenerator::generateTips( only_lines = false; // Add the outer wall (of the overhang) to ensure it is correct supported instead. // Try placing the support points in a way that they fully support the outer wall, instead of just the with half of the support line width. - Polygons reduced_overhang_outset = overhang_outset.offset(-config_.support_line_width / 2.2); + Shape reduced_overhang_outset = overhang_outset.offset(-config_.support_line_width / 2.2); // ^^^ It's assumed that even small overhangs are over one line width wide, so lets try to place the support points in a way that the full support area // generated from them will support the overhang. // (If this is not done it may only be half). This WILL NOT be the case when supporting an angle of about < 60� so there is a fallback, as some support is @@ -1105,7 +1114,7 @@ void TreeSupportTipGenerator::generateTips( if (overhang_lines.empty()) // some error handling and logging { - Polygons enlarged_overhang_outset = overhang_outset.offset(config_.getRadius(0) + FUDGE_LENGTH / 2, ClipperLib::jtRound).difference(relevant_forbidden); + Shape enlarged_overhang_outset = overhang_outset.offset(config_.getRadius(0) + FUDGE_LENGTH / 2, ClipperLib::jtRound).difference(relevant_forbidden); polylines = ensureMaximumDistancePolyline(TreeSupportUtils::toPolylines(enlarged_overhang_outset), connect_length_, min_support_points, true); overhang_lines = convertLinesToInternal(polylines, layer_idx); @@ -1148,11 +1157,11 @@ void TreeSupportTipGenerator::generateTips( if (layer_idx < additional_support_areas.size() && TreeSupportUtils::generateSupportInfillLines(roof_area, config_, true, layer_idx, support_roof_line_distance_, cross_fill_provider_, false).empty()) { - additional_support_areas[layer_idx].add(roof_area); + additional_support_areas[layer_idx].push_back(roof_area); } else { - storage.support.supportLayers[layer_idx].support_roof.add(roof_area); + storage.support.supportLayers[layer_idx].support_roof.push_back(roof_area); } } @@ -1163,37 +1172,35 @@ void TreeSupportTipGenerator::generateTips( { if (use_fake_roof_) { - storage.support.supportLayers[layer_idx] - .fillInfillParts(layer_idx, support_roof_drawn_, config_.support_line_width, 0, config_.maximum_move_distance, false, support_roof_line_distance_); - placed_support_lines_support_areas[layer_idx].add(TreeSupportUtils::generateSupportInfillLines( - support_roof_drawn_[layer_idx], - config_, - false, - layer_idx, - support_roof_line_distance_, - cross_fill_provider_, - false) - .offsetPolyLine(config_.support_line_width / 2)); + placed_fake_roof_areas[layer_idx].emplace_back(support_roof_drawn_[layer_idx], support_roof_line_distance_, false); + + if (config_.z_distance_top % config_.layer_height != 0 && layer_idx > 0) + { + // Fake roof tips would just be tips, so no need to add them here as all polygons in roof_tips_drawn_ will be empty! + Shape all_roof_fractional = support_roof_drawn_fractional_[layer_idx - 1].intersection(support_roof_drawn_[layer_idx - 1]); + placed_fake_roof_areas[layer_idx].emplace_back(all_roof_fractional, support_roof_line_distance_, true); + } } else { - storage.support.supportLayers[layer_idx].support_roof.add(support_roof_drawn_[layer_idx]); - storage.support.supportLayers[layer_idx].support_roof = storage.support.supportLayers[layer_idx].support_roof.unionPolygons(roof_tips_drawn_[layer_idx]); + if (config_.z_distance_top % config_.layer_height != 0 && layer_idx > 0) + { + Shape all_roof_below = support_roof_drawn_[layer_idx - 1].unionPolygons(roof_tips_drawn_[layer_idx - 1]); + Shape all_roof_fractional = support_roof_drawn_fractional_[layer_idx - 1].intersection(all_roof_below); + storage.support.supportLayers[layer_idx].support_fractional_roof + = storage.support.supportLayers[layer_idx].support_fractional_roof.unionPolygons(all_roof_fractional); + + // Fractional roof is a modifier applied to a roof area, which means if only the fractional roof area is set, there will be nothing as there is no roof to + // modify. Because of that the fractional roof has ALSO to be added to the roof. + storage.support.supportLayers[layer_idx].support_roof.push_back(all_roof_fractional); + } + + Shape all_roof = support_roof_drawn_[layer_idx].unionPolygons(roof_tips_drawn_[layer_idx]); + storage.support.supportLayers[layer_idx].support_roof = storage.support.supportLayers[layer_idx].support_roof.unionPolygons(all_roof); } } }); - cura::parallel_for( - 1, - mesh.overhang_areas.size() - z_distance_delta_, - [&](const LayerIndex layer_idx) - { - if (layer_idx > 0) - { - storage.support.supportLayers[layer_idx].support_fractional_roof.add( - storage.support.supportLayers[layer_idx].support_roof.difference(storage.support.supportLayers[layer_idx + 1].support_roof)); - } - }); removeUselessAddedPoints(new_tips, storage, additional_support_areas); diff --git a/src/WallToolPaths.cpp b/src/WallToolPaths.cpp index 75a98b843a..c34aaf8d69 100644 --- a/src/WallToolPaths.cpp +++ b/src/WallToolPaths.cpp @@ -13,7 +13,7 @@ #include "ExtruderTrain.h" #include "SkeletalTrapezoidation.h" -#include "utils/PolylineStitcher.h" +#include "utils/ExtrusionLineStitcher.h" #include "utils/Simplify.h" #include "utils/SparsePointGrid.h" //To stitch the inner contour. #include "utils/actions/smooth.h" @@ -23,7 +23,7 @@ namespace cura { WallToolPaths::WallToolPaths( - const Polygons& outline, + const Shape& outline, const coord_t nominal_bead_width, const size_t inset_count, const coord_t wall_0_inset, @@ -47,7 +47,7 @@ WallToolPaths::WallToolPaths( } WallToolPaths::WallToolPaths( - const Polygons& outline, + const Shape& outline, const coord_t bead_width_0, const coord_t bead_width_x, const size_t inset_count, @@ -87,7 +87,7 @@ const std::vector& WallToolPaths::generate() // Simplify outline for boost::voronoi consumption. Absolutely no self intersections or near-self intersections allowed: // TODO: Open question: Does this indeed fix all (or all-but-one-in-a-million) cases for manifold but otherwise possibly complex polygons? - Polygons prepared_outline = outline_.offset(-open_close_distance).offset(open_close_distance * 2).offset(-open_close_distance); + Shape prepared_outline = outline_.offset(-open_close_distance).offset(open_close_distance * 2).offset(-open_close_distance); scripta::log("prepared_outline_0", prepared_outline, section_type_, layer_idx_); prepared_outline.removeSmallAreas(small_area_length_ * small_area_length_, false); prepared_outline = Simplify(settings_).polygon(prepared_outline); @@ -95,9 +95,9 @@ const std::vector& WallToolPaths::generate() { // No need to smooth support walls auto smoother = actions::smooth(settings_); - for (auto& polygon : prepared_outline) + for (Polygon& polygon : prepared_outline) { - polygon = smoother(polygon); + polygon.setPoints(smoother(polygon.getPoints())); } } @@ -116,6 +116,8 @@ const std::vector& WallToolPaths::generate() return toolpaths_; } + prepared_outline = prepared_outline.removeNearSelfIntersections(); + const coord_t wall_transition_length = settings_.get("wall_transition_length"); // When to split the middle wall into two: @@ -179,7 +181,7 @@ const std::vector& WallToolPaths::generate() scripta::PointVDI{ "width", &ExtrusionJunction::w_ }, scripta::PointVDI{ "perimeter_index", &ExtrusionJunction::perimeter_index_ }); - removeSmallLines(toolpaths_); + removeSmallFillLines(toolpaths_); scripta::log( "toolpaths_2", toolpaths_, @@ -251,7 +253,7 @@ void WallToolPaths::stitchToolPaths(std::vector& toolpaths, VariableWidthLines stitched_polylines; VariableWidthLines closed_polygons; - PolylineStitcher::stitch(wall_lines, stitched_polylines, closed_polygons, stitch_distance); + ExtrusionLineStitcher::stitch(wall_lines, stitched_polylines, closed_polygons, stitch_distance); wall_lines = stitched_polylines; // replace input toolpaths with stitched polylines for (ExtrusionLine& wall_polygon : closed_polygons) @@ -272,19 +274,23 @@ void WallToolPaths::stitchToolPaths(std::vector& toolpaths, } } -void WallToolPaths::removeSmallLines(std::vector& toolpaths) +void WallToolPaths::removeSmallFillLines(std::vector& toolpaths) { for (VariableWidthLines& inset : toolpaths) { for (size_t line_idx = 0; line_idx < inset.size(); line_idx++) { ExtrusionLine& line = inset[line_idx]; + if (line.is_outer_wall()) + { + continue; + } coord_t min_width = std::numeric_limits::max(); for (const ExtrusionJunction& j : line) { min_width = std::min(min_width, j.w_); } - if (line.is_odd_ && ! line.is_closed_ && shorterThan(line, min_width / 2)) + if (line.is_odd_ && ! line.is_closed_ && line.shorterThan(min_width / 2)) { // remove line line = std::move(inset.back()); inset.erase(--inset.end()); @@ -415,7 +421,7 @@ void WallToolPaths::separateOutInnerContour() inner_contour_ = inner_contour_.processEvenOdd(); } -const Polygons& WallToolPaths::getInnerContour() +const Shape& WallToolPaths::getInnerContour() { if (! toolpaths_generated_ && inset_count_ > 0) { diff --git a/src/WallsComputation.cpp b/src/WallsComputation.cpp index ea8f959746..752d1cf0c9 100644 --- a/src/WallsComputation.cpp +++ b/src/WallsComputation.cpp @@ -84,7 +84,8 @@ void WallsComputation::generateWalls(SliceLayerPart* part, SectionType section_t part->wall_toolpaths = wall_tool_paths.getToolPaths(); part->inner_area = wall_tool_paths.getInnerContour(); } - part->outline = PolygonsPart{ Simplify(settings_).polygon(part->outline) }; + + part->outline = SingleShape{ Simplify(settings_).polygon(part->outline) }; part->print_outline = part->outline; } diff --git a/src/bridge.cpp b/src/bridge.cpp index 554d81d5b1..55b7b8e8cd 100644 --- a/src/bridge.cpp +++ b/src/bridge.cpp @@ -3,31 +3,33 @@ #include "bridge.h" +#include "geometry/OpenLinesSet.h" +#include "geometry/OpenPolyline.h" +#include "geometry/Polygon.h" #include "settings/types/Ratio.h" #include "sliceDataStorage.h" #include "utils/AABB.h" -#include "utils/polygon.h" namespace cura { double bridgeAngle( const Settings& settings, - const Polygons& skin_outline, + const Shape& skin_outline, const SliceDataStorage& storage, const unsigned layer_nr, const unsigned bridge_layer, const SupportLayer* support_layer, - Polygons& supported_regions) + Shape& supported_regions) { assert(! skin_outline.empty()); AABB boundary_box(skin_outline); // To detect if we have a bridge, first calculate the intersection of the current layer with the previous layer. // This gives us the islands that the layer rests on. - Polygons islands; + Shape islands; - Polygons prev_layer_outline; // we also want the complete outline of the previous layer + Shape prev_layer_outline; // we also want the complete outline of the previous layer const Ratio sparse_infill_max_density = settings.get("bridge_sparse_infill_max_density"); @@ -44,17 +46,17 @@ double bridgeAngle( for (const SliceLayerPart& prev_layer_part : mesh.layers[layer_nr - bridge_layer].parts) { - Polygons solid_below(prev_layer_part.outline); + Shape solid_below(prev_layer_part.outline); if (bridge_layer == 1 && part_has_sparse_infill) { solid_below = solid_below.difference(prev_layer_part.getOwnInfillArea()); } - prev_layer_outline.add(solid_below); // not intersected with skin + prev_layer_outline.push_back(solid_below); // not intersected with skin if (! boundary_box.hit(prev_layer_part.boundaryBox)) continue; - islands.add(skin_outline.intersection(solid_below)); + islands.push_back(skin_outline.intersection(solid_below)); } } } @@ -73,12 +75,12 @@ double bridgeAngle( AABB support_roof_bb(support_layer->support_roof); if (boundary_box.hit(support_roof_bb)) { - prev_layer_outline.add(support_layer->support_roof); // not intersected with skin + prev_layer_outline.push_back(support_layer->support_roof); // not intersected with skin - Polygons supported_skin(skin_outline.intersection(support_layer->support_roof)); + Shape supported_skin(skin_outline.intersection(support_layer->support_roof)); if (! supported_skin.empty()) { - supported_regions.add(supported_skin); + supported_regions.push_back(supported_skin); } } } @@ -89,12 +91,12 @@ double bridgeAngle( AABB support_part_bb(support_part.getInfillArea()); if (boundary_box.hit(support_part_bb)) { - prev_layer_outline.add(support_part.getInfillArea()); // not intersected with skin + prev_layer_outline.push_back(support_part.getInfillArea()); // not intersected with skin - Polygons supported_skin(skin_outline.intersection(support_part.getInfillArea())); + Shape supported_skin(skin_outline.intersection(support_part.getInfillArea())); if (! supported_skin.empty()) { - supported_regions.add(supported_skin); + supported_regions.push_back(supported_skin); } } } @@ -111,45 +113,43 @@ double bridgeAngle( if (support_threshold > 0 && (supported_regions.area() / (skin_outline.area() + 1)) < support_threshold) { - Polygons bb_poly; - bb_poly.add(boundary_box.toPolygon()); + Shape bb_poly; + bb_poly.push_back(boundary_box.toPolygon()); // airBelow is the region below the skin that is not supported, it extends well past the boundary of the skin. // It needs to be shrunk slightly so that the vertices of the skin polygon that would otherwise fall exactly on // the air boundary do appear to be supported const coord_t bb_max_dim = std::max(boundary_box.max_.X - boundary_box.min_.X, boundary_box.max_.Y - boundary_box.min_.Y); - const Polygons air_below(bb_poly.offset(bb_max_dim).difference(prev_layer_outline).offset(-10)); + const Shape air_below(bb_poly.offset(bb_max_dim).difference(prev_layer_outline).offset(-10)); - Polygons skin_perimeter_lines; - for (ConstPolygonRef poly : skin_outline) + OpenLinesSet skin_perimeter_lines; + for (const Polygon& poly : skin_outline) { - if (poly.empty()) - continue; - skin_perimeter_lines.add(poly); - skin_perimeter_lines.back().emplace_back(poly.front()); + if (! poly.empty()) + { + skin_perimeter_lines.emplace_back(poly.toPseudoOpenPolyline()); + } } - Polygons skin_perimeter_lines_over_air(air_below.intersectionPolyLines(skin_perimeter_lines)); + OpenLinesSet skin_perimeter_lines_over_air(air_below.intersection(skin_perimeter_lines)); if (skin_perimeter_lines_over_air.size()) { // one or more edges of the skin region are unsupported, determine the longest coord_t max_dist2 = 0; double line_angle = -1; - for (PolygonRef air_line : skin_perimeter_lines_over_air) + for (const OpenPolyline& air_line : skin_perimeter_lines_over_air) { - Point2LL p0 = air_line[0]; - for (unsigned i = 1; i < air_line.size(); ++i) + for (auto iterator = air_line.beginSegments(); iterator != air_line.endSegments(); ++iterator) { - const Point2LL& p1(air_line[i]); - coord_t dist2 = vSize2(p0 - p1); + const Point2LL vector = (*iterator).start - (*iterator).end; + coord_t dist2 = vSize2(vector); if (dist2 > max_dist2) { max_dist2 = dist2; - line_angle = angle(p0 - p1); + line_angle = angle(vector); } - p0 = p1; } } return line_angle; diff --git a/src/communication/ArcusCommunication.cpp b/src/communication/ArcusCommunication.cpp index e26718b300..0f0fd4e6d3 100644 --- a/src/communication/ArcusCommunication.cpp +++ b/src/communication/ArcusCommunication.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2023 UltiMaker +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher #ifdef ARCUS @@ -33,11 +33,11 @@ #include "communication/ArcusCommunicationPrivate.h" //Our PIMPL. #include "communication/Listener.h" //To listen to the Arcus socket. #include "communication/SliceDataStruct.h" //To store sliced layer data. +#include "geometry/Polygon.h" #include "plugins/slots.h" #include "settings/types/LayerIndex.h" //To point to layers. #include "settings/types/Velocity.h" //To send to layer view how fast stuff is printing. #include "utils/channel.h" -#include "utils/polygon.h" namespace cura { @@ -236,7 +236,7 @@ class ArcusCommunication::PathCompiler * \param thickness The layer thickness of the polygon. * \param velocity How fast the polygon is printed. */ - void sendPolygon(const PrintFeatureType& print_feature_type, const ConstPolygonRef& polygon, const coord_t& width, const coord_t& thickness, const Velocity& velocity) + void sendPolygon(const PrintFeatureType& print_feature_type, const Polygon& polygon, const coord_t& width, const coord_t& thickness, const Velocity& velocity) { if (polygon.size() < 2) // Don't send single points or empty polygons. { @@ -444,19 +444,14 @@ void ArcusCommunication::sendOptimizedLayerData() data.slice_data.clear(); } -void ArcusCommunication::sendPolygon( - const PrintFeatureType& type, - const ConstPolygonRef& polygon, - const coord_t& line_width, - const coord_t& line_thickness, - const Velocity& velocity) +void ArcusCommunication::sendPolygon(const PrintFeatureType& type, const Polygon& polygon, const coord_t& line_width, const coord_t& line_thickness, const Velocity& velocity) { path_compiler->sendPolygon(type, polygon, line_width, line_thickness, velocity); } -void ArcusCommunication::sendPolygons(const PrintFeatureType& type, const Polygons& polygons, const coord_t& line_width, const coord_t& line_thickness, const Velocity& velocity) +void ArcusCommunication::sendPolygons(const PrintFeatureType& type, const Shape& polygons, const coord_t& line_width, const coord_t& line_thickness, const Velocity& velocity) { - for (const std::vector& polygon : polygons) + for (const Polygon& polygon : polygons) { path_compiler->sendPolygon(type, polygon, line_width, line_thickness, velocity); } @@ -534,12 +529,17 @@ void ArcusCommunication::sliceNext() #ifdef SENTRY_URL sentry_value_t user = sentry_value_new_object(); sentry_value_set_by_key(user, "id", sentry_value_new_string(slice_message->sentry_id().c_str())); - if (const auto sentry_user = spdlog::details::os::getenv("CURAENGINE_SENTRY_USER"); ! sentry_user.empty()) + if (slice_message->has_user_name()) { - sentry_value_set_by_key(user, "email", sentry_value_new_string(sentry_user.c_str())); + spdlog::debug("Setting Sentry user to {}", slice_message->user_name()); + sentry_value_set_by_key(user, "username", sentry_value_new_string(slice_message->user_name().c_str())); } sentry_set_user(user); sentry_set_tag("cura.version", slice_message->cura_version().c_str()); + if (slice_message->has_project_name()) + { + sentry_set_tag("cura.project_name", slice_message->project_name().c_str()); + } #endif #ifdef ENABLE_PLUGINS diff --git a/src/communication/CommandLine.cpp b/src/communication/CommandLine.cpp index 95359abae4..12e04adc13 100644 --- a/src/communication/CommandLine.cpp +++ b/src/communication/CommandLine.cpp @@ -1,33 +1,52 @@ -// Copyright (c) 2022 Ultimaker B.V. +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher #include "communication/CommandLine.h" +#include // error number when trying to read file #include //For strtok and strcopy. -#include // error number when trying to read file #include #include //To check if files exist. #include //For std::accumulate. +#include #include //Loading JSON documents to get settings from them. -#include #include +#include +#include +#include +#include +#include #include +#include +#include +#include #include #include "Application.h" //To get the extruders for material estimates. #include "ExtruderTrain.h" #include "FffProcessor.h" //To start a slice and get time estimates. +#include "MeshGroup.h" #include "Slice.h" #include "utils/Matrix4x3D.h" //For the mesh_rotation_matrix setting. +#include "utils/format/filesystem_path.h" +#include "utils/views/split_paths.h" + +#ifdef __EMSCRIPTEN__ +#include +#endif namespace cura { CommandLine::CommandLine(const std::vector& arguments) - : arguments_(arguments) - , last_shown_progress_(0) + : arguments_{ arguments } + , last_shown_progress_{ 0 } { + if (auto search_paths = spdlog::details::os::getenv("CURA_ENGINE_SEARCH_PATH"); ! search_paths.empty()) + { + search_directories_ = search_paths | views::split_paths | ranges::to>(); + }; } // These are not applicable to command line slicing. @@ -52,10 +71,10 @@ void CommandLine::sendLineTo(const PrintFeatureType&, const Point2LL&, const coo void CommandLine::sendOptimizedLayerData() { } -void CommandLine::sendPolygon(const PrintFeatureType&, const ConstPolygonRef&, const coord_t&, const coord_t&, const Velocity&) +void CommandLine::sendPolygon(const PrintFeatureType&, const Polygon&, const coord_t&, const coord_t&, const Velocity&) { } -void CommandLine::sendPolygons(const PrintFeatureType&, const Polygons&, const coord_t&, const coord_t&, const Velocity&) +void CommandLine::sendPolygons(const PrintFeatureType&, const Shape&, const coord_t&, const coord_t&, const Velocity&) { } void CommandLine::setExtruderForSend(const ExtruderTrain&) @@ -94,7 +113,7 @@ void CommandLine::sendPrintTimeMaterialEstimates() const sum = 0.0; for (size_t extruder_nr = 0; extruder_nr < Application::getInstance().current_slice_->scene.extruders.size(); extruder_nr++) { - sum += FffProcessor::getInstance()->getTotalFilamentUsed(extruder_nr); + sum += FffProcessor::getInstance()->getTotalFilamentUsed(static_cast(extruder_nr)); } } @@ -106,6 +125,12 @@ void CommandLine::sendProgress(double progress) const return; } // TODO: Do we want to print a progress bar? We'd need a better solution to not have that progress bar be ruined by any logging. +#ifdef __EMSCRIPTEN__ + // Call progress handler with progress + char js[100]; + std::sprintf(js, "globalThis[\"%s\"](%f)", progressHandler.c_str(), progress); + emscripten_run_script(js); +#endif } void CommandLine::sliceNext() @@ -116,7 +141,7 @@ void CommandLine::sliceNext() size_t num_mesh_groups = 1; for (size_t argument_index = 2; argument_index < arguments_.size(); argument_index++) { - if (arguments_[argument_index].find("--next") == 0) // Starts with "--next". + if (arguments_[argument_index].starts_with("--next")) // Starts with "--next". { num_mesh_groups++; } @@ -130,7 +155,7 @@ void CommandLine::sliceNext() slice.scene.extruders.reserve(arguments_.size() >> 1); // Allocate enough memory to prevent moves. slice.scene.extruders.emplace_back(0, &slice.scene.settings); // Always have one extruder. - ExtruderTrain* last_extruder = &slice.scene.extruders[0]; + ExtruderTrain* last_extruder = slice.scene.extruders.data(); bool force_read_parent = false; bool force_read_nondefault = false; @@ -142,7 +167,7 @@ void CommandLine::sliceNext() { if (argument[1] == '-') // Starts with "--". { - if (argument.find("--next") == 0) // Starts with "--next". + if (argument.starts_with("--next")) // Starts with "--next". { try { @@ -161,23 +186,32 @@ void CommandLine::sliceNext() exit(1); } } - else if (argument.find("--force-read-parent") == 0 || argument.find("--force_read_parent") == 0) + else if (argument.starts_with("--force-read-parent") || argument.starts_with("--force_read_parent")) { spdlog::info("From this point on, force the parser to read values of non-leaf settings, instead of skipping over them as is proper."); force_read_parent = true; } - else if (argument.find("--force-read-nondefault") == 0 || argument.find("--force_read_nondefault") == 0) + else if (argument.starts_with("--force-read-nondefault") || argument.starts_with("--force_read_nondefault")) { spdlog::info( "From this point on, if 'default_value' is not available, force the parser to read 'value' (instead of dropping it) to fill the used setting-values."); force_read_nondefault = true; } - else if (argument.find("--end-force-read") == 0 || argument.find("--end_force_read") == 0) + else if (argument.starts_with("--end-force-read") || argument.starts_with("--end_force_read")) { spdlog::info("From this point on, reset all force-XXX values to false (don't 'force read ___' anymore)."); force_read_parent = false; force_read_nondefault = false; } +#ifdef __EMSCRIPTEN__ + else if (argument.find("--progress") == 0) + { + // Store progress handler name + argument_index++; + argument = arguments_[argument_index]; + progressHandler = argument; + } +#endif else { spdlog::error("Unknown option: {}", argument); @@ -204,6 +238,18 @@ void CommandLine::sliceNext() // enableProgressLogging(); FIXME: how to handle progress logging? Is this still relevant? break; } + case 'd': + { + argument_index++; + if (argument_index >= arguments_.size()) + { + spdlog::error("Missing definition search paths"); + exit(1); + } + argument = arguments_[argument_index]; + search_directories_ = argument | views::split_paths | ranges::to>(); + break; + } case 'j': { argument_index++; @@ -213,7 +259,7 @@ void CommandLine::sliceNext() exit(1); } argument = arguments_[argument_index]; - if (loadJSON(argument, *last_settings, force_read_parent, force_read_nondefault)) + if (loadJSON(std::filesystem::path{ argument }, *last_settings, force_read_parent, force_read_nondefault) != 0) { spdlog::error("Failed to load JSON file: {}", argument); exit(1); @@ -222,7 +268,7 @@ void CommandLine::sliceNext() // If this was the global stack, create extruders for the machine_extruder_count setting. if (last_settings == &slice.scene.settings) { - const size_t extruder_count = slice.scene.settings.get("machine_extruder_count"); + const auto extruder_count = slice.scene.settings.get("machine_extruder_count"); while (slice.scene.extruders.size() < extruder_count) { slice.scene.extruders.emplace_back(slice.scene.extruders.size(), &slice.scene.settings); @@ -257,7 +303,7 @@ void CommandLine::sliceNext() } argument = arguments_[argument_index]; - const Matrix4x3D transformation = last_settings->get("mesh_rotation_matrix"); // The transformation applied to the model when loaded. + const auto transformation = last_settings->get("mesh_rotation_matrix"); // The transformation applied to the model when loaded. if (! loadMeshIntoMeshGroup(&slice.scene.mesh_groups[mesh_group_index], argument.c_str(), transformation, last_extruder->settings_)) { @@ -302,7 +348,7 @@ void CommandLine::sliceNext() exit(1); } argument = arguments_[argument_index]; - const size_t value_position = argument.find("="); + const size_t value_position = argument.find('='); std::string key = argument.substr(0, value_position); if (value_position == std::string::npos) { @@ -313,13 +359,133 @@ void CommandLine::sliceNext() last_settings->add(key, value); break; } + case 'r': + { + /* + * read in resolved values from a json file. The json format of the file resolved settings is the following: + * + * ``` + * { + * "global": [SETTINGS], + * "extruder.0": [SETTINGS], + * "extruder.1": [SETTINGS], + * "model.stl": [SETTINGS] + * } + * ``` + * where `[SETTINGS]` follow the schema + * ``` + * { + * [key: string]: bool | string | number | number[] | number[][] + * } + * ``` + * There can be any number of extruders (denoted with `extruder.n`) and any number of models (denoted with `[modelname].stl`). + * The key of the model values will also be the filename of the relevant model, when running CuraEngine with this option the + * model file with that same name _must_ be in the same folder as the resolved settings json. + */ + + argument_index++; + if (argument_index >= arguments_.size()) + { + spdlog::error("Missing setting name and value with -r argument."); + exit(1); + } + argument = arguments_[argument_index]; + const auto settings = readResolvedJsonValues(std::filesystem::path{ argument }); + + if (! settings.has_value()) + { + spdlog::error("Failed to load JSON file: {}", argument); + exit(1); + } + + constexpr std::string_view global_identifier = "global"; + constexpr std::string_view extruder_identifier = "extruder."; + constexpr std::string_view model_identifier = "model."; + constexpr std::string_view limit_to_extruder_identifier = "limit_to_extruder"; + + // Split the settings into global, extruder and model settings. This is needed since the order in which the settings are applied is important. + // first global settings, then extruder settings, then model settings. The order of these stacks is not enforced in the JSON files. + std::unordered_map global_settings; + container_setting_map extruder_settings; + container_setting_map model_settings; + std::unordered_map limit_to_extruder; + + for (const auto& [key, values] : settings.value()) + { + if (key == global_identifier) + { + global_settings = values; + } + else if (key.starts_with(extruder_identifier)) + { + extruder_settings[key] = values; + } + else if (key == limit_to_extruder_identifier) + { + limit_to_extruder = values; + } + else + { + model_settings[key] = values; + } + } + + for (const auto& [setting_key, setting_value] : global_settings) + { + slice.scene.settings.add(setting_key, setting_value); + } + + for (const auto& [key, values] : extruder_settings) + { + const auto extruder_nr = std::stoi(key.substr(extruder_identifier.size())); + while (slice.scene.extruders.size() <= static_cast(extruder_nr)) + { + slice.scene.extruders.emplace_back(extruder_nr, &slice.scene.settings); + } + for (const auto& [setting_key, setting_value] : values) + { + slice.scene.extruders[extruder_nr].settings_.add(setting_key, setting_value); + } + } + + for (const auto& [key, values] : model_settings) + { + const auto& model_name = key; + + cura::MeshGroup mesh_group; + for (const auto& [setting_key, setting_value] : values) + { + mesh_group.settings.add(setting_key, setting_value); + } + + const auto transformation = mesh_group.settings.get("mesh_rotation_matrix"); + const auto extruder_nr = mesh_group.settings.get("extruder_nr"); + + if (! loadMeshIntoMeshGroup(&mesh_group, model_name.c_str(), transformation, slice.scene.extruders[extruder_nr].settings_)) + { + spdlog::error("Failed to load model: {}. (error number {})", model_name, errno); + exit(1); + } + + slice.scene.mesh_groups.push_back(std::move(mesh_group)); + } + for (const auto& [key, value] : limit_to_extruder) + { + const auto extruder_nr = std::stoi(value.substr(extruder_identifier.size())); + if (extruder_nr >= 0) + { + slice.scene.limit_to_extruder[key] = &slice.scene.extruders[extruder_nr]; + } + } + + break; + } default: { spdlog::error("Unknown option: -{}", argument[1]); Application::getInstance().printCall(); Application::getInstance().printHelp(); exit(1); - break; } } } @@ -360,60 +526,33 @@ void CommandLine::sliceNext() FffProcessor::getInstance()->finalize(); } -int CommandLine::loadJSON(const std::string& json_filename, Settings& settings, bool force_read_parent, bool force_read_nondefault) +int CommandLine::loadJSON(const std::filesystem::path& json_filename, Settings& settings, bool force_read_parent, bool force_read_nondefault) { - FILE* file = fopen(json_filename.c_str(), "rb"); + std::ifstream file(json_filename, std::ios::binary); if (! file) { spdlog::error("Couldn't open JSON file: {}", json_filename); return 1; } + std::vector read_buffer(std::istreambuf_iterator(file), {}); + rapidjson::MemoryStream memory_stream(read_buffer.data(), read_buffer.size()); + rapidjson::Document json_document; - char read_buffer[4096]; - rapidjson::FileReadStream reader_stream(file, read_buffer, sizeof(read_buffer)); - json_document.ParseStream(reader_stream); - fclose(file); + json_document.ParseStream(memory_stream); if (json_document.HasParseError()) { spdlog::error("Error parsing JSON (offset {}): {}", json_document.GetErrorOffset(), GetParseError_En(json_document.GetParseError())); return 2; } - std::unordered_set search_directories = defaultSearchDirectories(); // For finding the inheriting JSON files. - std::string directory = std::filesystem::path(json_filename).parent_path().string(); - search_directories.insert(directory); - - return loadJSON(json_document, search_directories, settings, force_read_parent, force_read_nondefault); -} - -std::unordered_set CommandLine::defaultSearchDirectories() -{ - std::unordered_set result; - - char* search_path_env = getenv("CURA_ENGINE_SEARCH_PATH"); - if (search_path_env) - { -#if defined(__linux__) || (defined(__APPLE__) && defined(__MACH__)) - char delims[] = ":"; // Colon for Unix. -#else - char delims[] = ";"; // Semicolon for Windows. -#endif - char paths[128 * 1024]; // Maximum length of environment variable. - strcpy(paths, search_path_env); // Necessary because strtok actually modifies the original string, and we don't want to modify the environment variable itself. - char* path = strtok(paths, delims); - while (path != nullptr) - { - result.insert(path); - path = strtok(nullptr, delims); // Continue searching in last call to strtok. - } - } - return result; + search_directories_.push_back(std::filesystem::path(json_filename).parent_path()); + return loadJSON(json_document, search_directories_, settings, force_read_parent, force_read_nondefault); } int CommandLine::loadJSON( const rapidjson::Document& document, - const std::unordered_set& search_directories, + const std::vector& search_directories, Settings& settings, bool force_read_parent, bool force_read_nondefault) @@ -422,13 +561,13 @@ int CommandLine::loadJSON( if (document.HasMember("inherits") && document["inherits"].IsString()) { std::string parent_file = findDefinitionFile(document["inherits"].GetString(), search_directories); - if (parent_file == "") + if (parent_file.empty()) { spdlog::error("Inherited JSON file: {} not found.", document["inherits"].GetString()); return 1; } - int error_code = loadJSON(parent_file, settings, force_read_parent, force_read_nondefault); // Head-recursively load the settings file that we inherit from. - if (error_code) + // Head-recursively load the settings file that we inherit from. + if (const auto error_code = loadJSON(parent_file, settings, force_read_parent, force_read_nondefault); error_code != 0) { return error_code; } @@ -546,12 +685,16 @@ void CommandLine::loadJSONSettings(const rapidjson::Value& element, Settings& se } } - if (! (setting_object.HasMember("default_value") || (force_read_nondefault && setting_object.HasMember("value") && ! settings.has(name)))) + if (! setting_object.HasMember("default_value") && (! force_read_nondefault || ! setting_object.HasMember("value") || settings.has(name))) { if (! setting_object.HasMember("children")) { // Setting has no child-settings, so must be leaf, but also holds no (default) value?! - spdlog::warn("JSON setting {} has no [default_]value!", name); + spdlog::warn("JSON setting '{}' has no [default_]value!", name); + rapidjson::StringBuffer buffer; + rapidjson::Writer writer(buffer); + setting_object.Accept(writer); + spdlog::debug("JSON setting '{}': '{}'", name, buffer.GetString()); } continue; } @@ -569,19 +712,66 @@ void CommandLine::loadJSONSettings(const rapidjson::Value& element, Settings& se } } -const std::string CommandLine::findDefinitionFile(const std::string& definition_id, const std::unordered_set& search_directories) +std::optional CommandLine::readResolvedJsonValues(const std::filesystem::path& json_filename) +{ + std::ifstream file(json_filename, std::ios::binary); + if (! file) + { + spdlog::error("Couldn't open JSON file: {}", json_filename); + return std::nullopt; + } + + std::vector read_buffer(std::istreambuf_iterator(file), {}); + rapidjson::MemoryStream memory_stream(read_buffer.data(), read_buffer.size()); + + rapidjson::Document json_document; + json_document.ParseStream(memory_stream); + if (json_document.HasParseError()) + { + spdlog::error("Error parsing JSON (offset {}): {}", json_document.GetErrorOffset(), GetParseError_En(json_document.GetParseError())); + return std::nullopt; + } + + return readResolvedJsonValues(json_document); +} + +std::optional CommandLine::readResolvedJsonValues(const rapidjson::Document& document) +{ + if (! document.IsObject()) + { + return std::nullopt; + } + + container_setting_map result; + for (rapidjson::Value::ConstMemberIterator resolved_key = document.MemberBegin(); resolved_key != document.MemberEnd(); resolved_key++) + { + std::unordered_map values; + for (rapidjson::Value::ConstMemberIterator resolved_value = resolved_key->value.MemberBegin(); resolved_value != resolved_key->value.MemberEnd(); resolved_value++) + { + std::string value_string; + if (! jsonValue2Str(resolved_value->value, value_string)) + { + spdlog::warn("Unrecognized data type in JSON setting {}", resolved_value->name.GetString()); + continue; + } + values.emplace(resolved_value->name.GetString(), value_string); + } + result.emplace(resolved_key->name.GetString(), std::move(values)); + } + return result; +} + +std::string CommandLine::findDefinitionFile(const std::string& definition_id, const std::vector& search_directories) { - for (const std::string& search_directory : search_directories) + for (const auto& search_directory : search_directories) { - const std::string candidate = search_directory + std::string("/") + definition_id + std::string(".def.json"); - const std::ifstream ifile(candidate.c_str()); // Check whether the file exists and is readable by opening it. - if (ifile) + if (auto candidate = search_directory / (definition_id + ".def.json"); std::filesystem::exists(candidate)) { - return candidate; + return candidate.string(); } } spdlog::error("Couldn't find definition file with ID: {}", definition_id); - return std::string(""); + return {}; } } // namespace cura diff --git a/src/gcodeExport.cpp b/src/gcodeExport.cpp index 3df5147dde..1de0935cb7 100644 --- a/src/gcodeExport.cpp +++ b/src/gcodeExport.cpp @@ -1,12 +1,12 @@ -// Copyright (c) 2023 UltiMaker +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher #include "gcodeExport.h" -#include +#include #include #include -#include +#include #include @@ -18,6 +18,7 @@ #include "WipeScriptConfig.h" #include "communication/Communication.h" //To send layer view data. #include "settings/types/LayerIndex.h" +#include "sliceDataStorage.h" #include "utils/Date.h" #include "utils/string.h" // MMtoStream, PrecisionedDouble @@ -46,7 +47,6 @@ GCodeExport::GCodeExport() current_e_value_ = 0; current_extruder_ = 0; - current_fan_speed_ = -1; total_print_times_ = std::vector(static_cast(PrintFeatureType::NumPrintFeatureTypes), 0.0); @@ -63,7 +63,6 @@ GCodeExport::GCodeExport() machine_heated_build_volume_ = false; ppr_enable_ = false; - fan_number_ = 0; use_extruder_offset_to_offset_coords_ = false; machine_name_ = ""; relative_extrusion_ = false; @@ -95,6 +94,7 @@ void GCodeExport::preSetup(const size_t start_extruder) extruder_attr_[extruder_nr].last_retraction_prime_speed_ = train.settings_.get("retraction_prime_speed"); // the alternative would be switch_extruder_prime_speed, but dual extrusion might not even be configured... extruder_attr_[extruder_nr].fan_number_ = train.settings_.get("machine_extruder_cooling_fan_number"); + fans_count_ = std::max(fans_count_, extruder_attr_[extruder_nr].fan_number_ + 1); // Cache some settings that we use frequently. const Settings& extruder_settings = Application::getInstance().current_slice_->scene.extruders[extruder_nr].settings_; @@ -411,7 +411,7 @@ void GCodeExport::setFlowRateExtrusionSettings(double max_extrusion_offset, doub this->extrusion_offset_factor_ = extrusion_offset_factor; } -Point3LL GCodeExport::getPosition() const +const Point3LL& GCodeExport::getPosition() const { return current_position_; } @@ -746,8 +746,6 @@ bool GCodeExport::initializeExtruderTrains(const SliceDataStorage& storage, cons } } - setExtruderFanNumber(start_extruder_nr); - return should_prime_extruder; } @@ -762,75 +760,87 @@ void GCodeExport::processInitialLayerBedTemperature() } } -void GCodeExport::processInitialLayerTemperature(const SliceDataStorage& storage, const size_t start_extruder_nr) +void GCodeExport::processInitialLayerExtrudersTemperatures(const SliceDataStorage& storage, const bool wait_start_extruder, const size_t start_extruder_nr) { Scene& scene = Application::getInstance().current_slice_->scene; - const size_t num_extruders = scene.extruders.size(); + const bool material_print_temp_prepend = scene.current_mesh_group->settings.get("material_print_temp_prepend"); + const bool material_print_temp_wait = scene.current_mesh_group->settings.get("material_print_temp_wait"); - if (getFlavor() == EGCodeFlavor::GRIFFIN) + if (! material_print_temp_prepend && (scene.current_mesh_group == scene.mesh_groups.begin())) { - processInitialLayerBedTemperature(); - - ExtruderTrain& train = scene.extruders[start_extruder_nr]; - constexpr bool wait = true; - const Temperature print_temp_0 = train.settings_.get("material_print_temperature_layer_0"); - const Temperature print_temp_here = (print_temp_0 != 0) ? print_temp_0 : train.settings_.get("material_print_temperature"); - writeTemperatureCommand(start_extruder_nr, print_temp_here, wait); + // Nozzle initial temperatures are handled by start GCode, ignore + return; } - else if (getFlavor() != EGCodeFlavor::ULTIGCODE) - { - if (num_extruders > 1 || getFlavor() == EGCodeFlavor::REPRAP) - { - std::ostringstream tmp; - tmp << "T" << start_extruder_nr; - writeLine(tmp.str().c_str()); - } - processInitialLayerBedTemperature(); + struct ExtruderInitialize + { + size_t nr; + Temperature temperature; + }; - if (scene.current_mesh_group->settings.get("material_print_temp_prepend") || (scene.current_mesh_group != scene.mesh_groups.begin())) + std::vector all_extruders; + std::vector extruders_used = storage.getExtrudersUsed(); + for (size_t extruder_nr = 0; extruder_nr < extruders_used.size(); ++extruder_nr) + { + if (extruders_used[extruder_nr]) { - for (unsigned extruder_nr = 0; extruder_nr < num_extruders; extruder_nr++) + const ExtruderTrain& train = scene.extruders[extruder_nr]; + Temperature extruder_temp; + if (extruder_nr == start_extruder_nr) { - if (storage.getExtrudersUsed()[extruder_nr]) - { - const ExtruderTrain& train = scene.extruders[extruder_nr]; - Temperature extruder_temp; - if (extruder_nr == start_extruder_nr) - { - const Temperature print_temp_0 = train.settings_.get("material_print_temperature_layer_0"); - extruder_temp = (print_temp_0 != 0) ? print_temp_0 : train.settings_.get("material_print_temperature"); - } - else - { - extruder_temp = train.settings_.get("material_standby_temperature"); - } - writeTemperatureCommand(extruder_nr, extruder_temp); - } + const Temperature print_temp_0 = train.settings_.get("material_print_temperature_layer_0"); + extruder_temp = (print_temp_0 != 0) ? print_temp_0 : train.settings_.get("material_print_temperature"); } - if (scene.current_mesh_group->settings.get("material_print_temp_wait")) + else { - for (unsigned extruder_nr = 0; extruder_nr < num_extruders; extruder_nr++) - { - if (storage.getExtrudersUsed()[extruder_nr]) - { - const ExtruderTrain& train = scene.extruders[extruder_nr]; - Temperature extruder_temp; - if (extruder_nr == start_extruder_nr) - { - const Temperature print_temp_0 = train.settings_.get("material_print_temperature_layer_0"); - extruder_temp = (print_temp_0 != 0) ? print_temp_0 : train.settings_.get("material_print_temperature"); - } - else - { - extruder_temp = train.settings_.get("material_standby_temperature"); - } - writeTemperatureCommand(extruder_nr, extruder_temp, true); - } - } + extruder_temp = train.settings_.get("material_standby_temperature"); } + + all_extruders.push_back({ extruder_nr, extruder_temp }); } } + + // First set all the required temperatures at once, but without waiting so that all heaters start heating right now + for (ExtruderInitialize& extruder : all_extruders) + { + writeTemperatureCommand(extruder.nr, extruder.temperature, false, true); + } + + // Now wait for all the required temperatures one after the other + for (ExtruderInitialize& extruder : all_extruders) + { + if (material_print_temp_wait || ((extruder.nr == start_extruder_nr) && wait_start_extruder)) + { + writeTemperatureCommand(extruder.nr, extruder.temperature, true, true); + } + } +} + +void GCodeExport::processInitialLayerTemperature(const SliceDataStorage& storage, const size_t start_extruder_nr) +{ + Scene& scene = Application::getInstance().current_slice_->scene; + const size_t num_extruders = scene.extruders.size(); + bool wait_start_extruder = false; + + switch (getFlavor()) + { + case EGCodeFlavor::ULTIGCODE: + return; + case EGCodeFlavor::GRIFFIN: + wait_start_extruder = true; + break; + default: + if (num_extruders > 1 || getFlavor() == EGCodeFlavor::REPRAP) + { + std::ostringstream tmp; + tmp << "T" << start_extruder_nr; + writeLine(tmp.str().c_str()); + } + break; + } + + processInitialLayerBedTemperature(); + processInitialLayerExtrudersTemperatures(storage, wait_start_extruder, start_extruder_nr); } bool GCodeExport::needPrimeBlob() const @@ -1308,8 +1318,6 @@ void GCodeExport::startExtruder(const size_t new_extruder) // Change the Z position so it gets re-written again. We do not know if the switch code modified the Z position. current_position_.z_ += 1; - - setExtruderFanNumber(new_extruder); } void GCodeExport::switchExtruder(size_t new_extruder, const RetractionConfig& retraction_config_old_extruder, coord_t perform_z_hop /*= 0*/) @@ -1424,58 +1432,87 @@ void GCodeExport::writePrimeTrain(const Velocity& travel_speed) extruder_attr_[current_extruder_].is_primed_ = true; } -void GCodeExport::setExtruderFanNumber(int extruder) +void GCodeExport::writeFanCommand(double speed, std::optional extruder) { - if (extruder_attr_[extruder].fan_number_ != fan_number_) - { - fan_number_ = extruder_attr_[extruder].fan_number_; - current_fan_speed_ = -1; // ensure fan speed gcode gets output for this fan - } + const size_t extruder_set_fan = extruder.value_or(current_extruder_); + const size_t fan_number = extruder_attr_[extruder_set_fan].fan_number_; + + writeSpecificFanCommand(speed, fan_number); } -void GCodeExport::writeFanCommand(double speed) +void GCodeExport::writeSpecificFanCommand(double speed, size_t fan_number) { - if (std::abs(current_fan_speed_ - speed) < 0.1) - { - return; - } + const auto iterator = current_fans_speeds_.find(fan_number); + const std::optional current_fan_speed = (iterator != current_fans_speeds_.end()) ? std::optional(iterator->second) : std::nullopt; + if (flavor_ == EGCodeFlavor::MAKERBOT) { - if (speed >= 50) + // Makerbot cannot PWM the fan speed, only turn it on or off + + bool write_value = true; + const bool new_on = speed >= 50; + if (current_fan_speed.has_value()) { - *output_stream_ << "M126 T0" << new_line_; // Makerbot cannot PWM the fan speed... + const bool old_on = current_fan_speed.value() >= 50; + write_value = new_on != old_on; } - else + + if (write_value) { - *output_stream_ << "M127 T0" << new_line_; + if (new_on) + { + *output_stream_ << "M126 T0" << new_line_; + } + else + { + *output_stream_ << "M127 T0" << new_line_; + } } } - else if (speed > 0) + else { const bool should_scale_zero_to_one = Application::getInstance().current_slice_->scene.settings.get("machine_scale_fan_speed_zero_to_one"); - *output_stream_ << "M106 S" - << PrecisionedDouble{ (should_scale_zero_to_one ? static_cast(2) : static_cast(1)), - (should_scale_zero_to_one ? speed : speed * 255) / 100 }; - if (fan_number_) + const auto scale_zero_to_one_optional = [should_scale_zero_to_one](double value) -> PrecisionedDouble + { + return { (should_scale_zero_to_one ? static_cast(2) : static_cast(1)), (should_scale_zero_to_one ? value : value * 255.0) / 100.0 }; + }; + bool write_value = true; + std::ostringstream new_value; + const auto num_new_val = scale_zero_to_one_optional(speed); + new_value << num_new_val; + const std::string new_value_str = new_value.str(); + if (current_fan_speed.has_value()) { - *output_stream_ << " P" << fan_number_; + std::ostringstream old_value; + old_value << scale_zero_to_one_optional(current_fan_speed.value()); + write_value = new_value_str != old_value.str(); } - *output_stream_ << new_line_; - } - else - { - *output_stream_ << "M107"; - if (fan_number_) + + if (write_value) { - *output_stream_ << " P" << fan_number_; + if (num_new_val.wouldWriteZero()) + { + // Turn off when the fan value is zero. + *output_stream_ << "M107"; + } + else + { + *output_stream_ << "M106 S" << new_value_str; + } + + if (fan_number) + { + *output_stream_ << " P" << fan_number; + } + + *output_stream_ << new_line_; } - *output_stream_ << new_line_; } - current_fan_speed_ = speed; + current_fans_speeds_[fan_number] = speed; } -void GCodeExport::writeTemperatureCommand(const size_t extruder, const Temperature& temperature, const bool wait) +void GCodeExport::writeTemperatureCommand(const size_t extruder, const Temperature& temperature, const bool wait, const bool force_write_on_equal) { const ExtruderTrain& extruder_train = Application::getInstance().current_slice_->scene.extruders[extruder]; @@ -1511,7 +1548,7 @@ void GCodeExport::writeTemperatureCommand(const size_t extruder, const Temperatu } } - if ((! wait || extruder_attr_[extruder].waited_for_temperature_) && extruder_attr_[extruder].current_temperature_ == temperature) + if ((! wait || extruder_attr_[extruder].waited_for_temperature_) && ! force_write_on_equal && extruder_attr_[extruder].current_temperature_ == temperature) { return; } @@ -1740,6 +1777,57 @@ void GCodeExport::insertWipeScript(const WipeScriptConfig& wipe_config) writeComment("WIPE_SCRIPT_END"); } +void GCodeExport::writePrepareFansForNozzleSwitch() +{ + const Settings& settings = Application::getInstance().current_slice_->scene.settings; + const auto cool_during_switch = settings.get("cool_during_extruder_switch"); + + if (cool_during_switch != CoolDuringExtruderSwitch::UNCHANGED) + { + const size_t current_extruder_fan_number = extruder_attr_[current_extruder_].fan_number_; + + for (size_t fan_number = 0; fan_number < fans_count_; ++fan_number) + { + double fan_speed; + if (cool_during_switch == CoolDuringExtruderSwitch::ALL_FANS || fan_number == current_extruder_fan_number) + { + fan_speed = 100.0; + } + else + { + fan_speed = 0.0; + } + + writeSpecificFanCommand(fan_speed, fan_number); + } + } +} + +void GCodeExport::writePrepareFansForExtrusion(double current_extruder_new_speed) +{ + const Settings& settings = Application::getInstance().current_slice_->scene.settings; + const auto cool_during_switch = settings.get("cool_during_extruder_switch"); + const size_t current_extruder_fan_number = extruder_attr_[current_extruder_].fan_number_; + + for (size_t fan_number = 0; fan_number < fans_count_; ++fan_number) + { + double new_fan_speed; + if (fan_number == current_extruder_fan_number) + { + new_fan_speed = current_extruder_new_speed; + } + else if (cool_during_switch == CoolDuringExtruderSwitch::UNCHANGED) + { + continue; + } + else + { + new_fan_speed = 0.0; + } + writeSpecificFanCommand(new_fan_speed, fan_number); + } +} + void GCodeExport::setSliceUUID(const std::string& slice_uuid) { slice_uuid_ = slice_uuid; diff --git a/src/geometry/ClosedPolyline.cpp b/src/geometry/ClosedPolyline.cpp new file mode 100644 index 0000000000..c4890c48f1 --- /dev/null +++ b/src/geometry/ClosedPolyline.cpp @@ -0,0 +1,57 @@ +// Copyright (c) 2024 UltiMaker +// CuraEngine is released under the terms of the AGPLv3 or higher. + +#include "geometry/ClosedPolyline.h" + +#include + +#include "geometry/OpenPolyline.h" + +namespace cura +{ + +size_t ClosedPolyline::segmentsCount() const +{ + if (explicitely_closed_) + { + return size() >= 3 ? size() - 1 : 0; + } + return size() >= 2 ? size() : 0; +} + +bool ClosedPolyline::isValid() const +{ + return size() >= (explicitely_closed_ ? 4 : 3); +} + +bool ClosedPolyline::inside(const Point2LL& p, bool border_result) const +{ + int res = ClipperLib::PointInPolygon(p, getPoints()); + if (res == -1) + { + return border_result; + } + return res == 1; +} + +bool ClosedPolyline::inside(const ClipperLib::Path& polygon) const +{ + return ranges::all_of( + *this, + [&polygon](const auto& point) + { + return ClipperLib::PointInPolygon(point, polygon); + }); +} + +OpenPolyline ClosedPolyline::toPseudoOpenPolyline() const +{ + OpenPolyline open_polyline(getPoints()); + if (hasClosingSegment()) + { + open_polyline.push_back(open_polyline.getPoints().front()); + } + return open_polyline; +} + +} // namespace cura diff --git a/src/geometry/LinesSet.cpp b/src/geometry/LinesSet.cpp new file mode 100644 index 0000000000..ccfd7259a6 --- /dev/null +++ b/src/geometry/LinesSet.cpp @@ -0,0 +1,357 @@ +// Copyright (c) 2024 UltiMaker +// CuraEngine is released under the terms of the AGPLv3 or higher. + +#include "geometry/LinesSet.h" + +#include + +#include "geometry/ClosedLinesSet.h" +#include "geometry/OpenLinesSet.h" +#include "geometry/OpenPolyline.h" +#include "geometry/Polygon.h" +#include "geometry/Shape.h" + +namespace cura +{ + +template +bool LinesSet::checkAdd(const LineType& line, CheckNonEmptyParam check_non_empty) +{ + switch (check_non_empty) + { + case CheckNonEmptyParam::EvenIfEmpty: + return true; + case CheckNonEmptyParam::OnlyIfNotEmpty: + return ! line.empty(); + case CheckNonEmptyParam::OnlyIfValid: + return line.isValid(); + } + + return false; +} + +template +void LinesSet::push_back(const LineType& line, CheckNonEmptyParam check_non_empty) +{ + if (checkAdd(line, check_non_empty)) + { + lines_.push_back(line); + } +} + +template +void LinesSet::push_back(LineType&& line, CheckNonEmptyParam check_non_empty) +{ + if (checkAdd(line, check_non_empty)) + { + lines_.push_back(std::move(line)); + } +} + +template +template +void LinesSet::push_back(LinesSet&& lines_set) +{ + reserve(size() + lines_set.size()); + for (OtherLineType& line : lines_set) + { + emplace_back(std::move(line)); + } +} + +template +size_t LinesSet::pointCount() const +{ + return std::accumulate( + lines_.begin(), + lines_.end(), + 0ULL, + [](size_t total, const LineType& line) + { + return total + line.size(); + }); +} + +template<> +void OpenLinesSet::addSegment(const Point2LL& from, const Point2LL& to) +{ + lines_.emplace_back(std::initializer_list{ from, to }); +} + +template +void LinesSet::removeAt(size_t index) +{ + if (lines_.size() == 1) + { + lines_.clear(); + } + else if (lines_.size() > 1) + { + assert(index < lines_.size()); + if (index < lines_.size() - 1) + { + lines_[index] = std::move(lines_.back()); + } + lines_.resize(lines_.size() - 1); + } +} + +template +void LinesSet::splitIntoSegments(OpenLinesSet& result) const +{ + for (const LineType& line : lines_) + { + line.splitIntoSegments(result); + } +} + +template +OpenLinesSet LinesSet::splitIntoSegments() const +{ + OpenLinesSet result; + for (const LineType& line : lines_) + { + line.splitIntoSegments(result); + } + return result; +} + +template +coord_t LinesSet::length() const +{ + return std::accumulate( + lines_.begin(), + lines_.end(), + 0LL, + [](coord_t total, const LineType& line) + { + return total += line.length(); + }); +} + +template +Shape LinesSet::createTubeShape(const coord_t inner_offset, const coord_t outer_offset) const +{ + return offset(outer_offset).difference(offset(-inner_offset)); +} + +template +void LinesSet::translate(const Point2LL& delta) +{ + if (delta.X != 0 || delta.Y != 0) + { + for (LineType& line : getLines()) + { + line.translate(delta); + } + } +} + +template<> +Shape LinesSet::offset(coord_t distance, ClipperLib::JoinType join_type, double miter_limit) const +{ + if (empty()) + { + return {}; + } + if (distance == 0) + { + Shape result; + for (const ClosedPolyline& line : getLines()) + { + result.emplace_back(line.getPoints(), line.isExplicitelyClosed()); + } + return result; + } + ClipperLib::Paths ret; + ClipperLib::ClipperOffset clipper(miter_limit, 10.0); + addPaths(clipper, join_type, ClipperLib::etClosedLine); + clipper.MiterLimit = miter_limit; + clipper.Execute(ret, static_cast(distance)); + return Shape{ std::move(ret) }; +} + +template<> +Shape LinesSet::offset(coord_t distance, ClipperLib::JoinType join_type, double miter_limit) const +{ + if (empty()) + { + return {}; + } + if (distance == 0) + { + return { getLines() }; + } + ClipperLib::Paths ret; + ClipperLib::ClipperOffset clipper(miter_limit, 10.0); + Shape(getLines()).unionPolygons().addPaths(clipper, join_type, ClipperLib::etClosedPolygon); + clipper.MiterLimit = miter_limit; + clipper.Execute(ret, static_cast(distance)); + return Shape{ std::move(ret) }; +} + +template<> +Shape OpenLinesSet::offset(coord_t distance, ClipperLib::JoinType join_type, double miter_limit) const +{ + if (empty() || distance == 0) + { + return {}; + } + + ClipperLib::ClipperOffset clipper(miter_limit, 10.0); + const ClipperLib::EndType end_type{ join_type == ClipperLib::jtMiter ? ClipperLib::etOpenSquare : ClipperLib::etOpenRound }; + addPaths(clipper, join_type, end_type); + clipper.MiterLimit = miter_limit; + ClipperLib::Paths result_paths; + clipper.Execute(result_paths, static_cast(distance)); + + return Shape{ std::move(result_paths) }; +} + +template +void LinesSet::removeDegenerateVerts() +{ + for (size_t poly_idx = 0; poly_idx < lines_.size(); poly_idx++) + { + LineType& poly = lines_[poly_idx]; + const bool for_polyline = (dynamic_cast(&poly) != nullptr); + ClipperLib::Path result; + + auto is_degenerate = [](const Point2LL& last, const Point2LL& now, const Point2LL& next) + { + Point2LL last_line = now - last; + Point2LL next_line = next - now; + return dot(last_line, next_line) == -1 * vSize(last_line) * vSize(next_line); + }; + + // With polylines, skip the first and last vertex. + const size_t start_vertex = for_polyline ? 1 : 0; + const size_t end_vertex = for_polyline ? poly.size() - 1 : poly.size(); + for (size_t i = 0; i < start_vertex; ++i) + { + result.push_back(poly[i]); // Add everything before the start vertex. + } + + bool is_changed = false; + for (size_t idx = start_vertex; idx < end_vertex; idx++) + { + const Point2LL& last = (result.size() == 0) ? poly.back() : result.back(); + if (idx + 1 >= poly.size() && result.size() == 0) + { + break; + } + const Point2LL& next = (idx + 1 >= poly.size()) ? result[0] : poly[idx + 1]; + if (is_degenerate(last, poly[idx], next)) + { // lines are in the opposite direction + // don't add vert to the result + is_changed = true; + while (result.size() > 1 && is_degenerate(result[result.size() - 2], result.back(), next)) + { + result.pop_back(); + } + } + else + { + result.push_back(poly[idx]); + } + } + + for (size_t i = end_vertex; i < poly.size(); ++i) + { + result.push_back(poly[i]); // Add everything after the end vertex. + } + + if (is_changed) + { + if (for_polyline || result.size() > 2) + { + poly.setPoints(std::move(result)); + } + else + { + removeAt(poly_idx); + poly_idx--; // effectively the next iteration has the same poly_idx (referring to a new poly which is not yet processed) + } + } + } +} + +template +template +void LinesSet::addPath(ClipperLib::Clipper& clipper, const OtherLineLine& line, ClipperLib::PolyType poly_typ) const +{ + // In this context, the "Closed" argument means "Is a surface" so it should be only + // true for actual filled polygons. Closed polylines are to be treated as lines here. + if constexpr (std::is_same::value) + { + clipper.AddPath(line.getPoints(), poly_typ, true); + } + else + { + clipper.AddPath(line.getPoints(), poly_typ, false); + } +} + +template +void LinesSet::addPaths(ClipperLib::Clipper& clipper, ClipperLib::PolyType poly_typ) const +{ + for (const LineType& line : getLines()) + { + addPath(clipper, line, poly_typ); + } +} + +template +void LinesSet::addPaths(ClipperLib::ClipperOffset& clipper, ClipperLib::JoinType joint_type, ClipperLib::EndType endType) const +{ + for (const LineType& line : getLines()) + { + clipper.AddPath(line.getPoints(), joint_type, endType); + } +} + +template size_t OpenLinesSet::pointCount() const; +template void OpenLinesSet::removeAt(size_t index); +template void OpenLinesSet::splitIntoSegments(OpenLinesSet& result) const; +template OpenLinesSet OpenLinesSet::splitIntoSegments() const; +template coord_t OpenLinesSet::length() const; +template Shape OpenLinesSet::createTubeShape(const coord_t inner_offset, const coord_t outer_offset) const; +template void OpenLinesSet::translate(const Point2LL& delta); +template void OpenLinesSet::removeDegenerateVerts(); +template void OpenLinesSet::addPaths(ClipperLib::Clipper& clipper, ClipperLib::PolyType PolyTyp) const; +template void OpenLinesSet::addPaths(ClipperLib::ClipperOffset& clipper, ClipperLib::JoinType jointType, ClipperLib::EndType endType) const; +template void OpenLinesSet::push_back(const OpenPolyline& line, CheckNonEmptyParam checkNonEmpty); +template void OpenLinesSet::push_back(OpenPolyline&& line, CheckNonEmptyParam checkNonEmpty); +template void OpenLinesSet::push_back(OpenLinesSet&& lines_set); + +template size_t ClosedLinesSet::pointCount() const; +template void ClosedLinesSet::removeAt(size_t index); +template void ClosedLinesSet::splitIntoSegments(OpenLinesSet& result) const; +template OpenLinesSet ClosedLinesSet::splitIntoSegments() const; +template coord_t ClosedLinesSet::length() const; +template Shape ClosedLinesSet::createTubeShape(const coord_t inner_offset, const coord_t outer_offset) const; +template void ClosedLinesSet::translate(const Point2LL& delta); +template void ClosedLinesSet::removeDegenerateVerts(); +template void ClosedLinesSet::addPaths(ClipperLib::Clipper& clipper, ClipperLib::PolyType PolyTyp) const; +template void ClosedLinesSet::addPaths(ClipperLib::ClipperOffset& clipper, ClipperLib::JoinType jointType, ClipperLib::EndType endType) const; +template void ClosedLinesSet::push_back(const ClosedPolyline& line, CheckNonEmptyParam checkNonEmpty); +template void ClosedLinesSet::push_back(ClosedPolyline&& line, CheckNonEmptyParam checkNonEmpty); +template void ClosedLinesSet::push_back(ClosedLinesSet&& lines_set); +template void ClosedLinesSet::push_back(LinesSet&& lines_set); + +template size_t LinesSet::pointCount() const; +template void LinesSet::removeAt(size_t index); +template void LinesSet::splitIntoSegments(OpenLinesSet& result) const; +template OpenLinesSet LinesSet::splitIntoSegments() const; +template coord_t LinesSet::length() const; +template Shape LinesSet::createTubeShape(const coord_t inner_offset, const coord_t outer_offset) const; +template void LinesSet::translate(const Point2LL& delta); +template void LinesSet::removeDegenerateVerts(); +template void LinesSet::addPaths(ClipperLib::Clipper& clipper, ClipperLib::PolyType PolyTyp) const; +template void LinesSet::addPaths(ClipperLib::ClipperOffset& clipper, ClipperLib::JoinType jointType, ClipperLib::EndType endType) const; +template void LinesSet::push_back(const Polygon& line, CheckNonEmptyParam checkNonEmpty); +template void LinesSet::push_back(Polygon&& line, CheckNonEmptyParam checkNonEmpty); +template void LinesSet::push_back(LinesSet&& lines_set); +template void LinesSet::addPath(ClipperLib::Clipper& clipper, const Polygon& line, ClipperLib::PolyType poly_typ) const; + +} // namespace cura diff --git a/src/geometry/MixedLinesSet.cpp b/src/geometry/MixedLinesSet.cpp new file mode 100644 index 0000000000..8b0d4a5455 --- /dev/null +++ b/src/geometry/MixedLinesSet.cpp @@ -0,0 +1,160 @@ +// Copyright (c) 2024 UltiMaker +// CuraEngine is released under the terms of the AGPLv3 or higher. + +#include "geometry/MixedLinesSet.h" + +#include + +#include "geometry/OpenPolyline.h" +#include "geometry/Polygon.h" +#include "geometry/Shape.h" + + +namespace cura +{ + +Shape MixedLinesSet::offset(coord_t distance, ClipperLib::JoinType join_type, double miter_limit) const +{ + if (distance == 0) + { + // Return a shape that contains only actual polygons + Shape result; + + for (const PolylinePtr& line : (*this)) + { + if (const std::shared_ptr polygon = dynamic_pointer_cast(line)) + { + result.push_back(*polygon); + } + } + + return result; + } + Shape polygons; + ClipperLib::ClipperOffset clipper(miter_limit, 10.0); + + for (const PolylinePtr& line : (*this)) + { + if (const std::shared_ptr polygon = dynamic_pointer_cast(line)) + { + // Union all polygons first and add them later + polygons.push_back(*polygon); + } + else + { + ClipperLib::EndType end_type; + + if (line->hasClosingSegment()) + { + end_type = ClipperLib::etClosedLine; + } + else + { + end_type = (join_type == ClipperLib::jtMiter) ? ClipperLib::etOpenSquare : ClipperLib::etOpenRound; + } + + clipper.AddPath(line->getPoints(), join_type, end_type); + } + } + + if (! polygons.empty()) + { + polygons = polygons.unionPolygons(); + + for (const Polygon& polygon : polygons) + { + clipper.AddPath(polygon.getPoints(), join_type, ClipperLib::etClosedPolygon); + } + } + + clipper.MiterLimit = miter_limit; + + ClipperLib::Paths result; + clipper.Execute(result, static_cast(distance)); + return Shape{ std::move(result) }; +} + +void MixedLinesSet::push_back(const OpenPolyline& line) +{ + std::vector::push_back(std::make_shared(line)); +} + +void MixedLinesSet::push_back(OpenPolyline&& line) +{ + std::vector::push_back(std::make_shared(std::move(line))); +} + +void MixedLinesSet::push_back(ClosedPolyline&& line) +{ + std::vector::push_back(std::make_shared(std::move(line))); +} + +void MixedLinesSet::push_back(const Polygon& line) +{ + std::vector::push_back(std::make_shared(line)); +} + +void MixedLinesSet::push_back(const std::shared_ptr& line) +{ + std::vector::push_back(line); +} + +void MixedLinesSet::push_back(const PolylinePtr& line) +{ + std::vector::push_back(line); +} + +void MixedLinesSet::push_back(OpenLinesSet&& lines_set) +{ + reserve(size() + lines_set.size()); + for (OpenPolyline& line : lines_set) + { + push_back(std::move(line)); + } +} + +void MixedLinesSet::push_back(const OpenLinesSet& lines_set) +{ + reserve(size() + lines_set.size()); + for (const OpenPolyline& line : lines_set) + { + push_back(line); + } +} + +void MixedLinesSet::push_back(ClosedLinesSet&& lines_set) +{ + reserve(size() + lines_set.size()); + for (ClosedPolyline& line : lines_set) + { + push_back(std::move(line)); + } +} + +void MixedLinesSet::push_back(const LinesSet& lines_set) +{ + reserve(size() + lines_set.size()); + for (const Polygon& line : lines_set) + { + push_back(line); + } +} + +void MixedLinesSet::push_back(const Shape& shape) +{ + push_back(static_cast&>(shape)); +} + +coord_t MixedLinesSet::length() const +{ + return std::accumulate( + begin(), + end(), + 0LL, + [](coord_t value, const PolylinePtr& line) + { + return value + line->length(); + }); +} + +} // namespace cura diff --git a/src/geometry/PartsView.cpp b/src/geometry/PartsView.cpp new file mode 100644 index 0000000000..c1370895c5 --- /dev/null +++ b/src/geometry/PartsView.cpp @@ -0,0 +1,63 @@ +// Copyright (c) 2024 UltiMaker +// CuraEngine is released under the terms of the AGPLv3 or higher. + +#include "geometry/PartsView.h" + +#include +#include + +#include "geometry/Polygon.h" +#include "geometry/SingleShape.h" + +namespace cura +{ + +size_t PartsView::getPartContaining(size_t poly_idx, size_t* boundary_poly_idx) const +{ + const PartsView& partsView = *this; + for (size_t part_idx_now = 0; part_idx_now < partsView.size(); part_idx_now++) + { + const std::vector& partView = partsView[part_idx_now]; + if (partView.size() == 0) + { + continue; + } + std::vector::const_iterator result = std::find(partView.begin(), partView.end(), poly_idx); + if (result != partView.end()) + { + if (boundary_poly_idx) + { + *boundary_poly_idx = partView[0]; + } + return part_idx_now; + } + } + return NO_INDEX; +} + +SingleShape PartsView::assemblePart(size_t part_idx) const +{ + const PartsView& partsView = *this; + SingleShape ret; + if (part_idx != NO_INDEX) + { + for (size_t poly_idx_ff : partsView[part_idx]) + { + ret.push_back(polygons_[poly_idx_ff]); + } + } + return ret; +} + +SingleShape PartsView::assemblePartContaining(size_t poly_idx, size_t* boundary_poly_idx) const +{ + SingleShape ret; + size_t part_idx = getPartContaining(poly_idx, boundary_poly_idx); + if (part_idx != NO_INDEX) + { + return assemblePart(part_idx); + } + return ret; +} + +} // namespace cura diff --git a/src/geometry/PointsSet.cpp b/src/geometry/PointsSet.cpp new file mode 100644 index 0000000000..e839f7c55a --- /dev/null +++ b/src/geometry/PointsSet.cpp @@ -0,0 +1,51 @@ +// Copyright (c) 2024 UltiMaker +// CuraEngine is released under the terms of the AGPLv3 or higher. + +#include "geometry/PointsSet.h" + +#include "geometry/Point3Matrix.h" +#include "geometry/PointMatrix.h" + +namespace cura +{ + +PointsSet::PointsSet(const std::initializer_list& initializer) + : points_(initializer) +{ +} + +PointsSet::PointsSet(const ClipperLib::Path& points) + : points_(points) +{ +} + +PointsSet::PointsSet(ClipperLib::Path&& points) + : points_(std::move(points)) +{ +} + +void PointsSet::applyMatrix(const PointMatrix& matrix) +{ + for (Point2LL& point : points_) + { + point = matrix.apply(point); + } +} + +void PointsSet::applyMatrix(const Point3Matrix& matrix) +{ + for (Point2LL& point : points_) + { + point = matrix.apply(point); + } +} + +void PointsSet::translate(const Point2LL& translation) +{ + for (Point2LL& point : points_) + { + point += translation; + } +} + +} // namespace cura diff --git a/src/geometry/Polygon.cpp b/src/geometry/Polygon.cpp new file mode 100644 index 0000000000..83283b4000 --- /dev/null +++ b/src/geometry/Polygon.cpp @@ -0,0 +1,599 @@ +// Copyright (c) 2024 UltiMaker +// CuraEngine is released under the terms of the AGPLv3 or higher. + +#include "geometry/Polygon.h" + +#include +#include + +#include "geometry/Point3Matrix.h" +#include "geometry/Shape.h" +#include "utils/ListPolyIt.h" +#include "utils/linearAlg2D.h" + +namespace cura +{ + +Shape Polygon::intersection(const Polygon& other) const +{ + ClipperLib::Paths ret_paths; + ClipperLib::Clipper clipper(clipper_init); + clipper.AddPath(getPoints(), ClipperLib::ptSubject, true); + clipper.AddPath(other.getPoints(), ClipperLib::ptClip, true); + clipper.Execute(ClipperLib::ctIntersection, ret_paths); + return Shape{ std::move(ret_paths) }; +} + +void Polygon::smooth2(int remove_length, Polygon& result) const +{ + if (! empty()) + { + result.push_back(front()); + } + + for (unsigned int poly_idx = 1; poly_idx < size(); poly_idx++) + { + const Point2LL& last = getPoints()[poly_idx - 1]; + const Point2LL& now = getPoints()[poly_idx]; + const Point2LL& next = getPoints()[(poly_idx + 1) % size()]; + if (shorterThen(last - now, remove_length) && shorterThen(now - next, remove_length)) + { + poly_idx++; // skip the next line piece (dont escalate the removal of edges) + if (poly_idx < size()) + { + result.push_back(getPoints()[poly_idx]); + } + } + else + { + result.push_back(getPoints()[poly_idx]); + } + } +} + +void Polygon::smooth(int remove_length, Polygon& result) const +{ + // a typical zigzag with the middle part to be removed by removing (1) : + // + // 3 + // ^ + // | + // | + // inside | outside + // 1--->2 + // ^ + // | + // | + // | + // 0 + if (! empty()) + { + result.push_back(front()); + } + auto is_zigzag = [remove_length](const int64_t v02_size, const int64_t v12_size, const int64_t v13_size, const int64_t dot1, const int64_t dot2) + { + if (v12_size > remove_length) + { // v12 or v13 is too long + return false; + } + const bool p1_is_left_of_v02 = dot1 < 0; + if (! p1_is_left_of_v02) + { // removing p1 wouldn't smooth outward + return false; + } + const bool p2_is_left_of_v13 = dot2 > 0; + if (p2_is_left_of_v13) + { // l0123 doesn't constitute a zigzag ''|,, + return false; + } + if (-dot1 <= v02_size * v12_size / 2) + { // angle at p1 isn't sharp enough + return false; + } + if (-dot2 <= v13_size * v12_size / 2) + { // angle at p2 isn't sharp enough + return false; + } + return true; + }; + Point2LL v02 = getPoints()[2] - getPoints()[0]; + Point2LL v02_t = turn90CCW(v02); + int64_t v02_size = vSize(v02); + bool force_push = false; + for (unsigned int poly_idx = 1; poly_idx < size(); poly_idx++) + { + const Point2LL& p1 = getPoints().at(poly_idx); + const Point2LL& p2 = getPoints().at((poly_idx + 1) % size()); + const Point2LL& p3 = getPoints().at((poly_idx + 2) % size()); + // v02 computed in last iteration + // v02_size as well + const Point2LL v12 = p2 - p1; + const int64_t v12_size = vSize(v12); + const Point2LL v13 = p3 - p1; + const int64_t v13_size = vSize(v13); + + // v02T computed in last iteration + const int64_t dot1 = dot(v02_t, v12); + const Point2LL v13_t = turn90CCW(v13); + const int64_t dot2 = dot(v13_t, v12); + bool push_point = force_push || ! is_zigzag(v02_size, v12_size, v13_size, dot1, dot2); + force_push = false; + if (push_point) + { + result.push_back(p1); + } + else + { + // do not add the current one to the result + force_push = true; // ensure the next point is added; it cannot also be a zigzag + } + v02_t = v13_t; + v02 = v13; + v02_size = v13_size; + } +} + +void Polygon::smoothOutward(const AngleDegrees min_angle, int shortcut_length, Polygon& result) const +{ + // example of smoothed out corner: + // + // 6 + // ^ + // | + // inside | outside + // 2>3>4>5 + // ^ / . + // | / . + // 1 / . + // ^ / . + // |/ . + // | + // | + // 0 + + int shortcut_length2 = shortcut_length * shortcut_length; + double cos_min_angle = std::cos(min_angle / 180 * std::numbers::pi); + + ListPolygon poly; + ListPolyIt::convertPolygonToList(*this, poly); + + { // remove duplicate vertices + ListPolyIt p1_it(poly, poly.begin()); + do + { + ListPolyIt next = p1_it.next(); + if (vSize2(p1_it.p() - next.p()) < 100LL) + { + p1_it.remove(); + } + p1_it = next; + } while (p1_it != ListPolyIt(poly, poly.begin())); + } + + ListPolyIt p1_it(poly, poly.begin()); + do + { + const Point2LL p1 = p1_it.p(); + ListPolyIt p0_it = p1_it.prev(); + ListPolyIt p2_it = p1_it.next(); + const Point2LL p0 = p0_it.p(); + const Point2LL p2 = p2_it.p(); + + const Point2LL v10 = p0 - p1; + const Point2LL v12 = p2 - p1; + double cos_angle = INT2MM(INT2MM(dot(v10, v12))) / vSizeMM(v10) / vSizeMM(v12); + bool is_left_angle = LinearAlg2D::pointIsLeftOfLine(p1, p0, p2) > 0; + if (cos_angle > cos_min_angle && is_left_angle) + { + // angle is so sharp that it can be removed + Point2LL v02 = p2_it.p() - p0_it.p(); + if (vSize2(v02) >= shortcut_length2) + { + smoothCornerSimple(p0, p1, p2, p0_it, p1_it, p2_it, v10, v12, v02, shortcut_length, cos_angle); + } + else + { + bool remove_poly = smoothCornerComplex(p1, p0_it, p2_it, shortcut_length); // edits p0_it and p2_it! + if (remove_poly) + { + // don't convert ListPolygon into result + return; + } + } + // update: + p1_it = p2_it; // next point to consider for whether it's an internal corner + } + else + { + ++p1_it; + } + } while (p1_it != ListPolyIt(poly, poly.begin())); + + ListPolyIt::convertListPolygonToPolygon(poly, result); +} + +void Polygon::smoothCornerSimple( + const Point2LL& p0, + const Point2LL& p1, + const Point2LL& p2, + const ListPolyIt& p0_it, + const ListPolyIt& p1_it, + const ListPolyIt& p2_it, + const Point2LL& v10, + const Point2LL& v12, + const Point2LL& v02, + const int64_t shortcut_length, + double cos_angle) +{ + // 1----b---->2 + // ^ / + // | / + // | / + // |/ + // |a + // | + // 0 + // ideally a1_size == b1_size + if (vSize2(v02) <= shortcut_length * (shortcut_length + 10) // v02 is approximately shortcut length + || (cos_angle > 0.9999 && LinearAlg2D::getDist2FromLine(p2, p0, p1) < 20 * 20)) // p1 is degenerate + { + // handle this separately to avoid rounding problems below in the getPointOnLineWithDist function + p1_it.remove(); + // don't insert new elements + } + else + { + // compute the distance a1 == b1 to get vSize(ab)==shortcut_length with the given angle between v10 and v12 + // 1 + // /|\ . + // / | \ . + // / | \ . + // / | \ . + // a/____|____\b . + // m + // use trigonometry on the right-angled triangle am1 + double a1m_angle = acos(cos_angle) / 2; + const int64_t a1_size = shortcut_length / 2 / std::sin(a1m_angle); + if (a1_size * a1_size < vSize2(v10) && a1_size * a1_size < vSize2(v12)) + { + Point2LL a = p1 + normal(v10, a1_size); + Point2LL b = p1 + normal(v12, a1_size); +#ifdef ASSERT_INSANE_OUTPUT + assert(vSize(a) < 4000000); + assert(vSize(b) < 4000000); +#endif // #ifdef ASSERT_INSANE_OUTPUT + ListPolyIt::insertPointNonDuplicate(p0_it, p1_it, a); + ListPolyIt::insertPointNonDuplicate(p1_it, p2_it, b); + p1_it.remove(); + } + else if (vSize2(v12) < vSize2(v10)) + { + // b + // 1->2 + // ^ | + // | / + // | | + // |/ + // |a + // | + // 0 + const Point2LL& b = p2_it.p(); + Point2LL a; + bool success = LinearAlg2D::getPointOnLineWithDist(b, p1, p0, shortcut_length, a); + // v02 has to be longer than ab! + if (success) + { // if not success then assume a is negligibly close to 0, but rounding errors caused a problem +#ifdef ASSERT_INSANE_OUTPUT + assert(vSize(a) < 4000000); +#endif // #ifdef ASSERT_INSANE_OUTPUT + ListPolyIt::insertPointNonDuplicate(p0_it, p1_it, a); + } + p1_it.remove(); + } + else + { + // 1---------b----------->2 + // ^ ,-' + // | ,-' + // 0.-' + // a + const Point2LL& a = p0_it.p(); + Point2LL b; + bool success = LinearAlg2D::getPointOnLineWithDist(a, p1, p2, shortcut_length, b); + // v02 has to be longer than ab! + if (success) + { // if not success then assume b is negligibly close to 2, but rounding errors caused a problem +#ifdef ASSERT_INSANE_OUTPUT + assert(vSize(b) < 4000000); +#endif // #ifdef ASSERT_INSANE_OUTPUT + ListPolyIt::insertPointNonDuplicate(p1_it, p2_it, b); + } + p1_it.remove(); + } + } +} + +void Polygon::smoothOutwardStep( + const Point2LL& p1, + const int64_t shortcut_length2, + ListPolyIt& p0_it, + ListPolyIt& p2_it, + bool& forward_is_blocked, + bool& backward_is_blocked, + bool& forward_is_too_far, + bool& backward_is_too_far) +{ + const bool forward_has_converged = forward_is_blocked || forward_is_too_far; + const bool backward_has_converged = backward_is_blocked || backward_is_too_far; + const Point2LL p0 = p0_it.p(); + const Point2LL p2 = p2_it.p(); + bool walk_forward + = ! forward_has_converged && (backward_has_converged || (vSize2(p2 - p1) < vSize2(p0 - p1))); // whether to walk along the p1-p2 direction or in the p1-p0 direction + + if (walk_forward) + { + const ListPolyIt p2_2_it = p2_it.next(); + const Point2LL p2_2 = p2_2_it.p(); + bool p2_is_left = LinearAlg2D::pointIsLeftOfLine(p2, p0, p2_2) >= 0; + if (! p2_is_left) + { + forward_is_blocked = true; + return; + } + + const Point2LL v02_2 = p2_2 - p0_it.p(); + if (vSize2(v02_2) > shortcut_length2) + { + forward_is_too_far = true; + return; + } + + p2_it = p2_2_it; // make one step in the forward direction + backward_is_blocked = false; // invalidate data about backward walking + backward_is_too_far = false; + return; + } + const ListPolyIt p0_2_it = p0_it.prev(); + const Point2LL p0_2 = p0_2_it.p(); + bool p0_is_left = LinearAlg2D::pointIsLeftOfLine(p0, p0_2, p2) >= 0; + if (! p0_is_left) + { + backward_is_blocked = true; + return; + } + + const Point2LL v02_2 = p2_it.p() - p0_2; + if (vSize2(v02_2) > shortcut_length2) + { + backward_is_too_far = true; + return; + } + + p0_it = p0_2_it; // make one step in the backward direction + forward_is_blocked = false; // invalidate data about forward walking + forward_is_too_far = false; +} + +bool Polygon::smoothCornerComplex(const Point2LL& p1, ListPolyIt& p0_it, ListPolyIt& p2_it, const int64_t shortcut_length) +{ + // walk away from the corner until the shortcut > shortcut_length or it would smooth a piece inward + // - walk in both directions untill shortcut > shortcut_length + // - stop walking in one direction if it would otherwise cut off a corner in that direction + // - same in the other direction + // - stop if both are cut off + // walk by updating p0_it and p2_it + int64_t shortcut_length2 = shortcut_length * shortcut_length; + bool forward_is_blocked = false; + bool forward_is_too_far = false; + bool backward_is_blocked = false; + bool backward_is_too_far = false; + while (true) + { + const bool forward_has_converged = forward_is_blocked || forward_is_too_far; + const bool backward_has_converged = backward_is_blocked || backward_is_too_far; + if (forward_has_converged && backward_has_converged) + { + if (forward_is_too_far && backward_is_too_far && vSize2(p0_it.prev().p() - p2_it.next().p()) < shortcut_length2) + { + // o + // / \ . + // o o + // | | + // \ / . + // | | + // \ / . + // | | + // o o + --p0_it; + ++p2_it; + forward_is_too_far = false; // invalidate data + backward_is_too_far = false; // invalidate data + continue; + } + break; + } + smoothOutwardStep(p1, shortcut_length2, p0_it, p2_it, forward_is_blocked, backward_is_blocked, forward_is_too_far, backward_is_too_far); + if (p0_it.prev() == p2_it || p0_it == p2_it) + { // stop if we went all the way around the polygon + // this should only be the case for hole polygons (?) + if (forward_is_too_far && backward_is_too_far) + { + // in case p0_it.prev() == p2_it : + // / . + // / /| + // | becomes | | + // \ \| + // \ . + // in case p0_it == p2_it : + // / . + // / becomes /| + // \ \| + // \ . + break; + } + // this whole polygon can be removed + return true; + } + } + + const Point2LL v02 = p2_it.p() - p0_it.p(); + const int64_t v02_size2 = vSize2(v02); + // set the following: + // p0_it = start point of line + // p2_it = end point of line + if (std::abs(v02_size2 - shortcut_length2) < shortcut_length * 10) // i.e. if (size2 < l * (l+10) && size2 > l * (l-10)) + { // v02 is approximately shortcut length + // handle this separately to avoid rounding problems below in the getPointOnLineWithDist function + // p0_it and p2_it are already correct + } + else if (! backward_is_blocked && ! forward_is_blocked) + { // introduce two new points + // 1----b---->2 + // ^ / + // | / + // | / + // |/ + // |a + // | + // 0 + const auto v02_size = static_cast(std::sqrt(v02_size2)); + + const ListPolyIt p0_2_it = p0_it.prev(); + const ListPolyIt p2_2_it = p2_it.next(); + const Point2LL p2_2 = p2_2_it.p(); + const Point2LL p0_2 = p0_2_it.p(); + const Point2LL v02_2 = p0_2 - p2_2; + const int64_t v02_2_size = vSize(v02_2); + double progress + = std::min(1.0, INT2MM(shortcut_length - v02_size) / INT2MM(v02_2_size - v02_size)); // account for rounding error when v02_2_size is approx equal to v02_size + assert(progress >= 0.0f && progress <= 1.0f && "shortcut length must be between last length and new length"); + const Point2LL new_p0 = p0_it.p() + (p0_2 - p0_it.p()) * progress; + p0_it = ListPolyIt::insertPointNonDuplicate(p0_2_it, p0_it, new_p0); + const Point2LL new_p2 = p2_it.p() + (p2_2 - p2_it.p()) * progress; + p2_it = ListPolyIt::insertPointNonDuplicate(p2_it, p2_2_it, new_p2); + } + else if (! backward_is_blocked) + { // forward is blocked, back is open + // | + // 1->b + // ^ : + // | / + // 0 : + // |/ + // |a + // | + // 0_2 + const ListPolyIt p0_2_it = p0_it.prev(); + const Point2LL p0 = p0_it.p(); + const Point2LL p0_2 = p0_2_it.p(); + const Point2LL p2 = p2_it.p(); + Point2LL new_p0; + bool success = LinearAlg2D::getPointOnLineWithDist(p2, p0, p0_2, shortcut_length, new_p0); + // shortcut length must be possible given that last length was ok and new length is too long + if (success) + { +#ifdef ASSERT_INSANE_OUTPUT + assert(new_p0.X < 400000 && new_p0.Y < 400000); +#endif // #ifdef ASSERT_INSANE_OUTPUT + p0_it = ListPolyIt::insertPointNonDuplicate(p0_2_it, p0_it, new_p0); + } + else + { // if not then a rounding error occured + if (vSize(p2 - p0_2) < vSize2(p2 - p0)) + { + p0_it = p0_2_it; // start shortcut at 0 + } + } + } + else if (! forward_is_blocked) + { // backward is blocked, front is open + // 1----2----b----------->2_2 + // ^ ,-' + // | ,-' + //--0.-' + // a + const ListPolyIt p2_2_it = p2_it.next(); + const Point2LL p0 = p0_it.p(); + const Point2LL p2 = p2_it.p(); + const Point2LL p2_2 = p2_2_it.p(); + Point2LL new_p2; + bool success = LinearAlg2D::getPointOnLineWithDist(p0, p2, p2_2, shortcut_length, new_p2); + // shortcut length must be possible given that last length was ok and new length is too long + if (success) + { +#ifdef ASSERT_INSANE_OUTPUT + assert(new_p2.X < 400000 && new_p2.Y < 400000); +#endif // #ifdef ASSERT_INSANE_OUTPUT + p2_it = ListPolyIt::insertPointNonDuplicate(p2_it, p2_2_it, new_p2); + } + else + { // if not then a rounding error occured + if (vSize(p2_2 - p0) < vSize2(p2 - p0)) + { + p2_it = p2_2_it; // start shortcut at 0 + } + } + } + else + { + // | + // __|2 + // | / > shortcut cannot be of the desired length + // ___|/ . + // 0 + // both are blocked and p0_it and p2_it are already correct + } + // delete all cut off points + while (p0_it.next() != p2_it) + { + p0_it.next().remove(); + } + return false; +} + +Point2LL Polygon::centerOfMass() const +{ + if (! empty()) + { + Point2LL p0 = getPoints()[0]; + if (size() > 1) + { + double x{ 0 }; + double y{ 0 }; + for (size_t n = 1; n <= size(); n++) + { + Point2LL p1 = getPoints()[n % size()]; + auto second_factor = static_cast((p0.X * p1.Y) - (p1.X * p0.Y)); + + x += static_cast(p0.X + p1.X) * second_factor; + y += static_cast(p0.Y + p1.Y) * second_factor; + p0 = p1; + } + + double current_area = area(); + + x = x / 6 / current_area; + y = y / 6 / current_area; + + return { std::llrint(x), std::llrint(y) }; + } + return p0; + } + return {}; +} + +Shape Polygon::offset(int distance, ClipperLib::JoinType join_type, double miter_limit) const +{ + if (distance == 0) + { + return Shape({ *this }); + } + ClipperLib::Paths ret; + ClipperLib::ClipperOffset clipper(miter_limit, 10.0); + clipper.AddPath(getPoints(), join_type, ClipperLib::etClosedPolygon); + clipper.MiterLimit = miter_limit; + clipper.Execute(ret, distance); + return Shape{ std::move(ret) }; +} + +} // namespace cura diff --git a/src/geometry/Polyline.cpp b/src/geometry/Polyline.cpp new file mode 100644 index 0000000000..c476f8e461 --- /dev/null +++ b/src/geometry/Polyline.cpp @@ -0,0 +1,167 @@ +// Copyright (c) 2024 UltiMaker +// CuraEngine is released under the terms of the AGPLv3 or higher. + +#include "geometry/Polyline.h" + +#include +#include +#include + +#include "geometry/LinesSet.h" +#include "geometry/OpenLinesSet.h" +#include "geometry/OpenPolyline.h" +#include "settings/types/Angle.h" +#include "utils/linearAlg2D.h" + +namespace cura +{ + +void Polyline::removeColinearEdges(const AngleRadians max_deviation_angle) +{ + // TODO: Can be made more efficient (for example, use pointer-types for process-/skip-indices, so we can swap them without copy). + + size_t num_removed_in_iteration = 0; + do + { + num_removed_in_iteration = 0; + + std::vector process_indices(size(), true); + + bool go = true; + while (go) + { + go = false; + + const ClipperLib::Path& rpath = getPoints(); + const size_t pathlen = rpath.size(); + if (pathlen <= 3) + { + return; + } + + std::vector skip_indices(size(), false); + + std::vector new_path; + for (size_t point_idx = 0; point_idx < pathlen; ++point_idx) + { + // Don't iterate directly over process-indices, but do it this way, because there are points _in_ process-indices that should nonetheless be skipped: + if (! process_indices[point_idx]) + { + new_path.push_back(rpath[point_idx]); + continue; + } + + // Should skip the last point for this iteration if the old first was removed (which can be seen from the fact that the new first was skipped): + if (point_idx == (pathlen - 1) && skip_indices[0]) + { + skip_indices[new_path.size()] = true; + go = true; + new_path.push_back(rpath[point_idx]); + break; + } + + const Point2LL& prev = rpath[(point_idx - 1 + pathlen) % pathlen]; + const Point2LL& pt = rpath[point_idx]; + const Point2LL& next = rpath[(point_idx + 1) % pathlen]; + + double angle = LinearAlg2D::getAngleLeft(prev, pt, next); // [0 : 2 * pi] + if (angle >= std::numbers::pi) + { + angle -= std::numbers::pi; + } // map [pi : 2 * pi] to [0 : pi] + + // Check if the angle is within limits for the point to 'make sense', given the maximum deviation. + // If the angle indicates near-parallel segments ignore the point 'pt' + if (angle > max_deviation_angle && angle < std::numbers::pi - max_deviation_angle) + { + new_path.push_back(pt); + } + else if (point_idx != (pathlen - 1)) + { + // Skip the next point, since the current one was removed: + skip_indices[new_path.size()] = true; + go = true; + new_path.push_back(next); + ++point_idx; + } + } + setPoints(std::move(new_path)); + num_removed_in_iteration += pathlen - size(); + + process_indices.clear(); + process_indices.insert(process_indices.end(), skip_indices.begin(), skip_indices.end()); + } + } while (num_removed_in_iteration > 0); +} + +Polyline::const_segments_iterator Polyline::beginSegments() const +{ + return const_segments_iterator(begin(), begin(), end()); +} + +Polyline::const_segments_iterator Polyline::endSegments() const +{ + if (hasClosingSegment()) + { + return const_segments_iterator(end(), begin(), end()); + } + return const_segments_iterator(size() > 1 ? std::prev(end()) : end(), begin(), end()); +} + +Polyline::segments_iterator Polyline::beginSegments() +{ + return segments_iterator(begin(), begin(), end()); +} + +Polyline::segments_iterator Polyline::endSegments() +{ + if (hasClosingSegment()) + { + return segments_iterator(end(), begin(), end()); + } + return segments_iterator(size() > 1 ? std::prev(end()) : end(), begin(), end()); +} + +coord_t Polyline::length() const +{ + return std::accumulate( + beginSegments(), + endSegments(), + 0, + [](coord_t total, const const_segments_iterator::value_type& segment) + { + return total + vSize(segment.end - segment.start); + }); +} + +bool Polyline::shorterThan(const coord_t check_length) const +{ + coord_t length = 0; + auto iterator_segment = std::find_if( + beginSegments(), + endSegments(), + [&length, &check_length](const const_segments_iterator::value_type& segment) + { + length += vSize(segment.end - segment.start); + return length >= check_length; + }); + return iterator_segment == endSegments(); +} + +void Polyline::splitIntoSegments(OpenLinesSet& result) const +{ + result.reserve(result.size() + segmentsCount()); + for (auto it = beginSegments(); it != endSegments(); ++it) + { + result.emplace_back(OpenPolyline({ (*it).start, (*it).end })); + } +} + +OpenLinesSet Polyline::splitIntoSegments() const +{ + OpenLinesSet result; + splitIntoSegments(result); + return result; +} + +} // namespace cura diff --git a/src/geometry/Shape.cpp b/src/geometry/Shape.cpp new file mode 100644 index 0000000000..61d029c4e2 --- /dev/null +++ b/src/geometry/Shape.cpp @@ -0,0 +1,996 @@ +// Copyright (c) 2024 UltiMaker +// CuraEngine is released under the terms of the AGPLv3 or higher. + +#include "geometry/Shape.h" + +#include +#include +#include +#include +#include + +#ifdef BUILD_TESTS +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#endif + +#include +#include + +#include "geometry/MixedLinesSet.h" +#include "geometry/OpenPolyline.h" +#include "geometry/PartsView.h" +#include "geometry/Polygon.h" +#include "geometry/SingleShape.h" +#include "settings/types/Ratio.h" +#include "utils/OpenPolylineStitcher.h" +#include "utils/linearAlg2D.h" + +namespace cura +{ + +Shape::Shape(ClipperLib::Paths&& paths, bool explicitely_closed) +{ + emplace_back(std::move(paths), explicitely_closed); +} + +Shape::Shape(const std::vector& polygons) + : LinesSet(polygons) +{ +} + +Shape::Shape(const Polygon& polygon) + : LinesSet(polygon) +{ +} + +void Shape::emplace_back(ClipperLib::Paths&& paths, bool explicitely_closed) +{ + reserve(size() + paths.size()); + for (ClipperLib::Path& path : paths) + { + emplace_back(std::move(path), explicitely_closed); + } +} + +void Shape::emplace_back(ClipperLib::Path&& path, bool explicitely_closed) +{ + static_cast*>(this)->emplace_back(std::move(path), explicitely_closed); +} + +Shape Shape::approxConvexHull(int extra_outset) const +{ + constexpr int overshoot = MM2INT(100); // 10cm (hard-coded value). + + Shape convex_hull; + // Perform the offset for each polygon one at a time. + // This is necessary because the polygons may overlap, in which case the offset could end up in an infinite loop. + // See http://www.angusj.com/delphi/clipper/documentation/Docs/Units/ClipperLib/Classes/ClipperOffset/_Body.htm + for (const Polygon& polygon : (*this)) + { + ClipperLib::Paths offset_result; + ClipperLib::ClipperOffset offsetter(1.2, 10.0); + offsetter.AddPath(polygon.getPoints(), ClipperLib::jtRound, ClipperLib::etClosedPolygon); + offsetter.Execute(offset_result, overshoot); + convex_hull.emplace_back(std::move(offset_result)); + } + + return convex_hull.unionPolygons().offset(-overshoot + extra_outset, ClipperLib::jtRound); +} + +void Shape::makeConvex() +{ + // early out if there is nothing to do + if (empty()) + { + return; + } + + // Andrew’s Monotone Chain Convex Hull Algorithm + std::vector points; + for (const Polygon& poly : getLines()) + { + points.insert(points.end(), poly.begin(), poly.end()); + } + + Polygon convexified; + auto make_sorted_poly_convex = [&convexified](std::vector& poly) + { + convexified.push_back(poly[0]); + + for (const auto window : poly | ranges::views::sliding(2)) + { + const Point2LL& current = window[0]; + const Point2LL& after = window[1]; + + if (LinearAlg2D::pointIsLeftOfLine(current, convexified.back(), after) < 0) + { + // Track backwards to make sure we haven't been in a concave pocket for multiple vertices already. + while (convexified.size() >= 2 + && (LinearAlg2D::pointIsLeftOfLine(convexified.back(), convexified[convexified.size() - 2], current) >= 0 + || LinearAlg2D::pointIsLeftOfLine(convexified.back(), convexified[convexified.size() - 2], convexified.front()) > 0)) + { + convexified.pop_back(); + } + convexified.push_back(current); + } + } + }; + + std::sort( + points.begin(), + points.end(), + [](const Point2LL& a, const Point2LL& b) + { + return a.X == b.X ? a.Y < b.Y : a.X < b.X; + }); + make_sorted_poly_convex(points); + std::reverse(points.begin(), points.end()); + make_sorted_poly_convex(points); + + setLines({ convexified }); +} + +Shape Shape::difference(const Shape& other) const +{ + if (empty()) + { + return {}; + } + if (other.empty()) + { + return *this; + } + ClipperLib::Paths ret; + ClipperLib::Clipper clipper(clipper_init); + addPaths(clipper, ClipperLib::ptSubject); + other.addPaths(clipper, ClipperLib::ptClip); + clipper.Execute(ClipperLib::ctDifference, ret); + return Shape(std::move(ret)); +} + +Shape Shape::difference(const Polygon& other) const +{ + if (empty()) + { + return {}; + } + if (other.empty()) + { + return *this; + } + ClipperLib::Paths ret; + ClipperLib::Clipper clipper(clipper_init); + addPaths(clipper, ClipperLib::ptSubject); + addPath(clipper, other, ClipperLib::ptClip); + clipper.Execute(ClipperLib::ctDifference, ret); + return Shape(std::move(ret)); +} + +Shape Shape::unionPolygons(const Shape& other, ClipperLib::PolyFillType fill_type) const +{ + if (empty() && other.empty()) + { + return {}; + } + // No further early outs, as shapes should be able to be 'unioned' with themselves, which will resolve certain issues like self-overlapping polygons. + ClipperLib::Paths ret; + ClipperLib::Clipper clipper(clipper_init); + addPaths(clipper, ClipperLib::ptSubject); + other.addPaths(clipper, ClipperLib::ptSubject); + clipper.Execute(ClipperLib::ctUnion, ret, fill_type, fill_type); + return Shape{ std::move(ret) }; +} + +Shape Shape::unionPolygons(const Polygon& polygon, ClipperLib::PolyFillType fill_type) const +{ + if (empty() && polygon.empty()) + { + return {}; + } + // No further early outs, as unioning even with another empty polygon has some beneficial side-effects, such as removing self-overlapping polygons. + ClipperLib::Paths ret; + ClipperLib::Clipper clipper(clipper_init); + addPaths(clipper, ClipperLib::ptSubject); + addPath(clipper, polygon, ClipperLib::ptSubject); + clipper.Execute(ClipperLib::ctUnion, ret, fill_type, fill_type); + return Shape{ std::move(ret) }; +} + +Shape Shape::unionPolygons() const +{ + return unionPolygons(Shape()); +} + +Shape Shape::intersection(const Shape& other) const +{ + if (empty() || other.empty()) + { + return {}; + } + ClipperLib::Paths ret; + ClipperLib::Clipper clipper(clipper_init); + addPaths(clipper, ClipperLib::ptSubject); + other.addPaths(clipper, ClipperLib::ptClip); + clipper.Execute(ClipperLib::ctIntersection, ret); + return Shape{ std::move(ret) }; +} + +Shape Shape::offset(coord_t distance, ClipperLib::JoinType join_type, double miter_limit) const +{ + if (empty()) + { + return {}; + } + if (distance == 0) + { + return *this; + } + + ClipperLib::Paths ret; + ClipperLib::ClipperOffset clipper(miter_limit, 10.0); + unionPolygons().addPaths(clipper, join_type, ClipperLib::etClosedPolygon); + clipper.MiterLimit = miter_limit; + clipper.Execute(ret, static_cast(distance)); + return Shape{ std::move(ret) }; +} + +bool Shape::inside(const Point2LL& p, bool border_result) const +{ + int poly_count_inside = 0; + for (const Polygon& poly : *this) + { + const int is_inside_this_poly = ClipperLib::PointInPolygon(p, poly.getPoints()); + if (is_inside_this_poly == -1) + { + return border_result; + } + poly_count_inside += is_inside_this_poly; + } + return (poly_count_inside % 2) == 1; +} + +size_t Shape::findInside(const Point2LL& p, bool border_result) const +{ + if (empty()) + { + return 0; + } + + // NOTE: Keep these vectors fixed-size, they replace an (non-standard, sized at runtime) arrays. + std::vector min_x(size(), std::numeric_limits::max()); + std::vector crossings(size()); + + for (size_t poly_idx = 0; poly_idx < size(); poly_idx++) + { + const Polygon& poly = (*this)[poly_idx]; + Point2LL p0 = poly.back(); + for (const Point2LL& p1 : poly) + { + short comp = LinearAlg2D::pointLiesOnTheRightOfLine(p, p0, p1); + if (comp == 1) + { + crossings[poly_idx]++; + int64_t x; + if (p1.Y == p0.Y) + { + x = p0.X; + } + else + { + x = p0.X + (p1.X - p0.X) * (p.Y - p0.Y) / (p1.Y - p0.Y); + } + min_x[poly_idx] = std::min(x, min_x[poly_idx]); + } + else if (border_result && comp == 0) + { + return poly_idx; + } + p0 = p1; + } + } + + int64_t min_x_uneven = std::numeric_limits::max(); + size_t ret = NO_INDEX; + size_t n_unevens = 0; + for (size_t array_idx = 0; array_idx < size(); array_idx++) + { + if (crossings[array_idx] % 2 == 1) + { + n_unevens++; + if (min_x[array_idx] < min_x_uneven) + { + min_x_uneven = min_x[array_idx]; + ret = array_idx; + } + } + } + if (n_unevens % 2 == 0) + { + ret = NO_INDEX; + } + return ret; +} + +template +OpenLinesSet Shape::intersection(const LinesSet& polylines, bool restitch, const coord_t max_stitch_distance) const +{ + if (empty() || polylines.empty()) + { + return {}; + } + + OpenLinesSet split_polylines = polylines.splitIntoSegments(); + + ClipperLib::PolyTree result; + ClipperLib::Clipper clipper(clipper_init); + split_polylines.addPaths(clipper, ClipperLib::ptSubject); + addPaths(clipper, ClipperLib::ptClip); + clipper.Execute(ClipperLib::ctIntersection, result); + ClipperLib::Paths result_paths; + ClipperLib::OpenPathsFromPolyTree(result, result_paths); + + OpenLinesSet result_lines(std::move(result_paths)); + + if (restitch) + { + OpenLinesSet result_open_lines; + Shape result_closed_lines; + + const coord_t snap_distance = 10_mu; + OpenPolylineStitcher::stitch(result_lines, result_open_lines, result_closed_lines, max_stitch_distance, snap_distance); + + result_lines = std::move(result_open_lines); + // if open polylines got stitched into closed polylines, split them back up into open polylines again, because the result only admits open polylines + for (ClosedPolyline& closed_line : result_closed_lines) + { + if (! closed_line.empty()) + { + if (closed_line.size() > 2) + { + closed_line.push_back(closed_line.front()); + } + result_lines.emplace_back(std::move(closed_line.getPoints())); + } + } + } + + return result_lines; +} + +Shape Shape::xorPolygons(const Shape& other, ClipperLib::PolyFillType pft) const +{ + if (empty()) + { + return other; + } + if (other.empty()) + { + return *this; + } + ClipperLib::Paths ret; + ClipperLib::Clipper clipper(clipper_init); + addPaths(clipper, ClipperLib::ptSubject); + other.addPaths(clipper, ClipperLib::ptClip); + clipper.Execute(ClipperLib::ctXor, ret, pft); + return Shape{ std::move(ret) }; +} + +Shape Shape::execute(ClipperLib::PolyFillType pft) const +{ + ClipperLib::Paths ret; + ClipperLib::Clipper clipper(clipper_init); + addPaths(clipper, ClipperLib::ptSubject); + clipper.Execute(ClipperLib::ctXor, ret, pft); + return Shape{ std::move(ret) }; +} + +Shape Shape::offsetMulti(const std::vector& offset_dists) const +{ + // we need as many offset-dists as points + assert(pointCount() == offset_dists.size()); + + ClipperLib::Paths ret; + size_t i = 0; + for (const Polygon& poly_line : (*this) + | ranges::views::filter( + [](const Polygon& path) + { + return ! path.empty(); + })) + { + Polygon ret_poly_line; + + auto prev_p = poly_line.back(); + auto prev_dist = offset_dists[i + poly_line.size() - 1]; + + for (const Point2LL& p : poly_line) + { + auto offset_dist = offset_dists[i]; + + auto vec_dir = prev_p - p; + + constexpr coord_t min_vec_len = 10; + if (vSize2(vec_dir) > min_vec_len * min_vec_len) + { + auto offset_p1 = turn90CCW(normal(vec_dir, prev_dist)); + auto offset_p2 = turn90CCW(normal(vec_dir, offset_dist)); + + ret_poly_line.push_back(prev_p + offset_p1); + ret_poly_line.push_back(p + offset_p2); + } + + prev_p = p; + prev_dist = offset_dist; + i++; + } + + ret.push_back(std::move(ret_poly_line.getPoints())); + } + + ClipperLib::SimplifyPolygons(ret, ClipperLib::PolyFillType::pftPositive); + + return Shape(std::move(ret)); +} + +Shape Shape::getOutsidePolygons() const +{ + if (empty()) + { + return {}; + } + if (size() == 1) + { + return *this; + } + + Shape ret; + ClipperLib::Clipper clipper(clipper_init); + ClipperLib::PolyTree poly_tree; + addPaths(clipper, ClipperLib::ptSubject); + clipper.Execute(ClipperLib::ctUnion, poly_tree); + + for (size_t outer_poly_idx = 0; outer_poly_idx < static_cast(poly_tree.ChildCount()); outer_poly_idx++) + { + ClipperLib::PolyNode* child = poly_tree.Childs[outer_poly_idx]; + ret.emplace_back(std::move(child->Contour)); + } + return ret; +} + +void Shape::removeEmptyHolesProcessPolyTreeNode(const ClipperLib::PolyNode& node, const bool remove_holes, Shape& ret) const +{ + for (size_t outer_poly_idx = 0; outer_poly_idx < static_cast(node.ChildCount()); outer_poly_idx++) + { + ClipperLib::PolyNode* child = node.Childs[outer_poly_idx]; + if (remove_holes) + { + ret.emplace_back(std::move(child->Contour)); + } + for (size_t hole_node_idx = 0; hole_node_idx < static_cast(child->ChildCount()); hole_node_idx++) + { + ClipperLib::PolyNode& hole_node = *child->Childs[hole_node_idx]; + if ((hole_node.ChildCount() > 0) == remove_holes) + { + ret.emplace_back(std::move(hole_node.Contour)); + removeEmptyHolesProcessPolyTreeNode(hole_node, remove_holes, ret); + } + } + } +} + +void Shape::removeSmallAreas(const double min_area_size, const bool remove_holes) +{ + auto new_end = end(); + if (remove_holes) + { + for (auto it = begin(); it < new_end;) + { + // All polygons smaller than target are removed by replacing them with a polygon from the back of the vector + if (std::abs(INT2MM2(it->area())) < min_area_size) + { + *it = std::move(*--new_end); + continue; + } + it++; // Skipped on removal such that the polygon just swaped in is checked next + } + } + else + { + // For each polygon, computes the signed area, move small outlines at the end of the vector and keep references on small holes + std::vector small_holes; + for (auto it = begin(); it < new_end;) + { + double area = INT2MM2(it->area()); + if (std::abs(area) < min_area_size) + { + if (area >= 0) + { + --new_end; + if (it < new_end) + { + std::swap(*new_end, *it); + continue; + } + break; + } + small_holes.push_back(&(*it)); + } + it++; // Skipped on removal such that the polygon just swaped in is checked next + } + + // Removes small holes that have their first point inside one of the removed outlines + // Iterating in reverse ensures that unprocessed small holes won't be moved + const auto removed_outlines_start = new_end; + for (auto hole_it = small_holes.rbegin(); hole_it < small_holes.rend(); hole_it++) + { + for (auto outline_it = removed_outlines_start; outline_it < end(); outline_it++) + { + if (outline_it->inside((*hole_it)->front())) + { + **hole_it = std::move(*--new_end); + break; + } + } + } + } + resize(new_end - begin()); +} + +Shape Shape::removePolygon(const Shape& to_be_removed, int same_distance) const +{ + Shape result; + for (size_t poly_keep_idx = 0; poly_keep_idx < size(); poly_keep_idx++) + { + const Polygon& poly_keep = (*this)[poly_keep_idx]; + bool should_be_removed = false; + if (! poly_keep.empty()) + { + for (const Polygon& poly_rem : to_be_removed) + { + if (poly_rem.size() != poly_keep.size() || poly_rem.empty()) + { + continue; + } + + // find closest point, supposing this point aligns the two shapes in the best way + size_t closest_point_idx = 0; + coord_t smallest_dist2 = -1; + for (size_t point_rem_idx = 0; point_rem_idx < poly_rem.size(); point_rem_idx++) + { + coord_t dist2 = vSize2(poly_rem[point_rem_idx] - poly_keep[0]); + if (dist2 < smallest_dist2 || smallest_dist2 < 0) + { + smallest_dist2 = dist2; + closest_point_idx = point_rem_idx; + } + } + bool poly_rem_is_poly_keep = true; + // compare the two polygons on all points + if (smallest_dist2 > static_cast(same_distance * same_distance)) + { + continue; + } + for (size_t point_idx = 0; point_idx < poly_rem.size(); point_idx++) + { + coord_t dist2 = vSize2(poly_rem[(closest_point_idx + point_idx) % poly_rem.size()] - poly_keep[point_idx]); + if (dist2 > static_cast(same_distance * same_distance)) + { + poly_rem_is_poly_keep = false; + break; + } + } + if (poly_rem_is_poly_keep) + { + should_be_removed = true; + break; + } + } + } + if (! should_be_removed) + { + result.push_back(poly_keep); + } + } + return result; +} + +Shape Shape::processEvenOdd(ClipperLib::PolyFillType poly_fill_type) const +{ + ClipperLib::Paths ret; + ClipperLib::Clipper clipper(clipper_init); + addPaths(clipper, ClipperLib::ptSubject); + clipper.Execute(ClipperLib::ctUnion, ret, poly_fill_type); + return Shape{ std::move(ret) }; +} + +Shape Shape::smoothOutward(const AngleDegrees max_angle, int shortcut_length) const +{ + Shape ret; + for (const Polygon& poly : (*this)) + { + if (poly.size() < 3) + { + continue; + } + if (poly.size() == 3) + { + ret.push_back(poly); + continue; + } + poly.smoothOutward(max_angle, shortcut_length, ret.newLine()); + if (ret.back().size() < 3) + { + ret.resize(ret.size() - 1); + } + } + return ret; +} + +Shape Shape::smooth(int remove_length) const +{ + Shape ret; + for (const Polygon& poly : (*this)) + { + if (poly.size() < 3) + { + continue; + } + if (poly.size() == 3) + { + ret.push_back(poly); + continue; + } + poly.smooth(remove_length, ret.newLine()); + Polygon& back = ret.back(); + if (back.size() < 3) + { + back.resize(back.size() - 1); + } + } + return ret; +} + +Shape Shape::smooth2(int remove_length, int min_area) const +{ + Shape ret; + for (const Polygon& poly : (*this)) + { + if (poly.empty()) + { + continue; + } + if (poly.area() < min_area || poly.size() <= 5) // when optimally removing, a poly with 5 pieces results in a triangle. Smaller polys dont have area! + { + ret.push_back(poly); + continue; + } + if (poly.size() < 4) + { + ret.push_back(poly); + } + else + { + poly.smooth2(remove_length, ret.newLine()); + } + } + return ret; +} + +void Shape::removeColinearEdges(const AngleRadians max_deviation_angle) +{ + Shape& thiss = *this; + for (size_t p = 0; p < size(); p++) + { + thiss[p].removeColinearEdges(max_deviation_angle); + if (thiss[p].size() < 3) + { + removeAt(p); + p--; + } + } +} + +double Shape::area() const +{ + return std::accumulate( + begin(), + end(), + 0.0, + [](double total, const Polygon& poly) + { + // note: holes already have negative area + return total + poly.area(); + }); +} + +std::vector Shape::splitIntoParts(bool union_all) const +{ + std::vector ret; + ClipperLib::Clipper clipper(clipper_init); + ClipperLib::PolyTree result_poly_tree; + addPaths(clipper, ClipperLib::ptSubject); + if (union_all) + { + clipper.Execute(ClipperLib::ctUnion, result_poly_tree, ClipperLib::pftNonZero, ClipperLib::pftNonZero); + } + else + { + clipper.Execute(ClipperLib::ctUnion, result_poly_tree); + } + + splitIntoPartsProcessPolyTreeNode(&result_poly_tree, ret); + return ret; +} + +void Shape::splitIntoPartsProcessPolyTreeNode(ClipperLib::PolyNode* node, std::vector& ret) const +{ + for (size_t n = 0; n < static_cast(node->ChildCount()); n++) + { + ClipperLib::PolyNode* child = node->Childs[n]; + SingleShape part; + part.emplace_back(std::move(child->Contour)); + for (size_t i = 0; i < static_cast(child->ChildCount()); i++) + { + part.emplace_back(std::move(child->Childs[i]->Contour)); + splitIntoPartsProcessPolyTreeNode(child->Childs[i], ret); + } + ret.push_back(std::move(part)); + } +} + +std::vector Shape::sortByNesting() const +{ + std::vector ret; + ClipperLib::Clipper clipper(clipper_init); + ClipperLib::PolyTree result_poly_tree; + addPaths(clipper, ClipperLib::ptSubject); + clipper.Execute(ClipperLib::ctUnion, result_poly_tree); + + sortByNestingProcessPolyTreeNode(&result_poly_tree, 0, ret); + return ret; +} + +void Shape::sortByNestingProcessPolyTreeNode(ClipperLib::PolyNode* node, const size_t nesting_idx, std::vector& ret) const +{ + for (size_t n = 0; n < static_cast(node->ChildCount()); n++) + { + ClipperLib::PolyNode* child = node->Childs[n]; + if (nesting_idx >= ret.size()) + { + ret.resize(nesting_idx + 1); + } + ret[nesting_idx].emplace_back(std::move(child->Contour)); + sortByNestingProcessPolyTreeNode(child, nesting_idx + 1, ret); + } +} + +PartsView Shape::splitIntoPartsView(bool union_all) +{ + Shape reordered; + PartsView parts_view(*this); + ClipperLib::Clipper clipper(clipper_init); + ClipperLib::PolyTree result_poly_tree; + addPaths(clipper, ClipperLib::ptSubject); + if (union_all) + { + clipper.Execute(ClipperLib::ctUnion, result_poly_tree, ClipperLib::pftNonZero, ClipperLib::pftNonZero); + } + else + { + clipper.Execute(ClipperLib::ctUnion, result_poly_tree); + } + + splitIntoPartsViewProcessPolyTreeNode(parts_view, reordered, &result_poly_tree); + + (*this) = std::move(reordered); + return parts_view; +} + +void Shape::splitIntoPartsViewProcessPolyTreeNode(PartsView& partsView, Shape& reordered, ClipperLib::PolyNode* node) const +{ + for (size_t n = 0; n < static_cast(node->ChildCount()); n++) + { + ClipperLib::PolyNode* child = node->Childs[n]; + partsView.emplace_back(); + size_t pos = partsView.size() - 1; + partsView[pos].push_back(reordered.size()); + reordered.emplace_back(std::move(child->Contour)); + for (size_t i = 0; i < static_cast(child->ChildCount()); i++) + { + partsView[pos].push_back(reordered.size()); + reordered.emplace_back(std::move(child->Childs[i]->Contour)); + splitIntoPartsViewProcessPolyTreeNode(partsView, reordered, child->Childs[i]); + } + } +} + +Shape Shape::removeNearSelfIntersections() const +{ + using map_pt = mapbox::geometry::point; + using map_ring = mapbox::geometry::linear_ring; + using map_poly = mapbox::geometry::polygon; + using map_mpoly = mapbox::geometry::multi_polygon; + + map_mpoly mwpoly; + + mapbox::geometry::wagyu::wagyu wagyu; + + for (auto& polygon : splitIntoParts()) + { + mwpoly.emplace_back(); + map_poly& wpoly = mwpoly.back(); + for (auto& path : polygon) + { + wpoly.push_back(std::move(*reinterpret_cast>*>(&path.getPoints()))); + for (auto& point : wpoly.back()) + { + point.x /= 4; + point.y /= 4; + } + wagyu.add_ring(wpoly.back()); + } + } + + map_mpoly sln; + + wagyu.execute(mapbox::geometry::wagyu::clip_type_union, sln, mapbox::geometry::wagyu::fill_type_even_odd, mapbox::geometry::wagyu::fill_type_even_odd); + + Shape polys; + + for (auto& poly : sln) + { + for (auto& ring : poly) + { + ring.pop_back(); + for (auto& point : ring) + { + point.x *= 4; + point.y *= 4; + } + polys.emplace_back(std::move(*reinterpret_cast(&ring))); + } + } + polys = polys.unionPolygons(); + polys.removeColinearEdges(); + + return polys; +} + +void Shape::simplify(ClipperLib::PolyFillType fill_type) +{ + if (empty()) + { + return; + } + + // This is the actual content from clipper.cpp::SimplifyPolygons, but rewritten here in order + // to avoid having to put all the polygons in a transitory list + ClipperLib::Clipper clipper; + ClipperLib::Paths ret; + clipper.StrictlySimple(true); + addPaths(clipper, ClipperLib::ptSubject); + clipper.Execute(ClipperLib::ctUnion, ret, fill_type, fill_type); + + resize(ret.size()); + + for (size_t i = 0; i < ret.size(); i++) + { + Polygon& polygon = getLines()[i]; + polygon.setExplicitelyClosed(clipper_explicitely_closed_); // Required for polygon newly created by resize() + polygon.setPoints(std::move(ret[i])); + } +} + +void Shape::ensureManifold() +{ + std::vector duplicate_locations; + std::unordered_set poly_locations; + for (const Polygon& poly : (*this)) + { + for (const Point2LL& p : poly) + { + if (poly_locations.find(p) != poly_locations.end()) + { + duplicate_locations.push_back(p); + } + poly_locations.emplace(p); + } + } + Shape removal_dots; + for (const Point2LL& p : duplicate_locations) + { + Polygon& dot = removal_dots.newLine(); + dot.push_back(p + Point2LL(0, 5)); + dot.push_back(p + Point2LL(5, 0)); + dot.push_back(p + Point2LL(0, -5)); + dot.push_back(p + Point2LL(-5, 0)); + } + if (! removal_dots.empty()) + { + *this = difference(removal_dots); + } +} + +void Shape::applyMatrix(const PointMatrix& matrix) +{ + for (Polygon& polygon : *this) + { + polygon.applyMatrix(matrix); + } +} + +void Shape::applyMatrix(const Point3Matrix& matrix) +{ + for (Polygon& polygon : *this) + { + polygon.applyMatrix(matrix); + } +} + +#ifdef BUILD_TESTS +[[maybe_unused]] Shape Shape::fromWkt(const std::string& wkt) +{ + typedef boost::geometry::model::d2::point_xy point_type; + typedef boost::geometry::model::polygon polygon_type; + + polygon_type poly; + boost::geometry::read_wkt(wkt, poly); + + Shape ret; + + Polygon outer; + for (const auto& point : poly.outer()) + { + outer.emplace_back(point.x(), point.y()); + } + ret.push_back(outer); + + for (const auto& hole : poly.inners()) + { + Polygon inner; + for (const auto& point : hole) + { + inner.emplace_back(point.x(), point.y()); + } + ret.push_back(inner); + } + + return ret; +} + +[[maybe_unused]] void Shape::writeWkt(std::ostream& stream) const +{ + stream << "POLYGON ("; + const auto paths_str = getLines() + | ranges::views::transform( + [](const Polygon& path) + { + const auto line_string = ranges::views::concat(path, path | ranges::views::take(1)) + | ranges::views::transform( + [](const Point2LL& point) + { + return fmt::format("{} {}", point.X, point.Y); + }) + | ranges::views::join(ranges::views::c_str(", ")) | ranges::to(); + return "(" + line_string + ")"; + }) + | ranges::views::join(ranges::views::c_str(", ")) | ranges::to(); + stream << paths_str; + stream << ")"; +} +#endif + +template OpenLinesSet Shape::intersection(const OpenLinesSet& polylines, bool restitch, const coord_t max_stitch_distance) const; +template OpenLinesSet Shape::intersection(const ClosedLinesSet& polylines, bool restitch, const coord_t max_stitch_distance) const; +template OpenLinesSet Shape::intersection(const LinesSet& polylines, bool restitch, const coord_t max_stitch_distance) const; + +} // namespace cura diff --git a/src/geometry/SingleShape.cpp b/src/geometry/SingleShape.cpp new file mode 100644 index 0000000000..19b0702dc3 --- /dev/null +++ b/src/geometry/SingleShape.cpp @@ -0,0 +1,43 @@ +// Copyright (c) 2024 UltiMaker +// CuraEngine is released under the terms of the AGPLv3 or higher. + +#include "geometry/SingleShape.h" + +#include "geometry/Polygon.h" + +namespace cura +{ + +bool SingleShape::inside(const Point2LL& p, bool border_result) const +{ + if (size() < 1) + { + return false; + } + + if (! (*this)[0].inside(p, border_result)) + { + return false; + } + + for (unsigned int n = 1; n < size(); n++) + { + if ((*this)[n].inside(p, border_result)) + { + return false; + } + } + return true; +} + +Polygon& SingleShape::outerPolygon() +{ + return front(); +} + +const Polygon& SingleShape::outerPolygon() const +{ + return front(); +} + +} // namespace cura diff --git a/src/infill.cpp b/src/infill.cpp index e746846c02..6067fa625b 100644 --- a/src/infill.cpp +++ b/src/infill.cpp @@ -1,16 +1,19 @@ -// Copyright (c) 2023 UltiMaker +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher #include "infill.h" #include //For std::sort. #include +#include #include #include #include #include "WallToolPaths.h" +#include "geometry/OpenPolyline.h" +#include "geometry/PointMatrix.h" #include "infill/GyroidInfill.h" #include "infill/ImageBasedDensityProvider.h" #include "infill/LightningGenerator.h" @@ -21,8 +24,8 @@ #include "infill/UniformDensityProvider.h" #include "plugins/slots.h" #include "sliceDataStorage.h" +#include "utils/OpenPolylineStitcher.h" #include "utils/PolygonConnector.h" -#include "utils/PolylineStitcher.h" #include "utils/Simplify.h" #include "utils/UnionFind.h" #include "utils/linearAlg2D.h" @@ -52,20 +55,16 @@ static inline int computeScanSegmentIdx(int x, int line_width) namespace cura { -Polygons Infill::generateWallToolPaths( +Shape Infill::generateWallToolPaths( std::vector& toolpaths, - Polygons& outer_contour, + const Shape& outer_contour, const size_t wall_line_count, const coord_t line_width, - const coord_t infill_overlap, const Settings& settings, int layer_idx, SectionType section_type) { - outer_contour = outer_contour.offset(infill_overlap); - scripta::log("infill_outer_contour", outer_contour, section_type, layer_idx, scripta::CellVDI{ "infill_overlap", infill_overlap }); - - Polygons inner_contour; + Shape inner_contour; if (wall_line_count > 0) { constexpr coord_t wall_0_inset = 0; // Don't apply any outer wall inset for these. That's just for the outer wall. @@ -82,24 +81,26 @@ Polygons Infill::generateWallToolPaths( void Infill::generate( std::vector& toolpaths, - Polygons& result_polygons, - Polygons& result_lines, + Shape& result_polygons, + OpenLinesSet& result_lines, const Settings& settings, int layer_idx, SectionType section_type, const std::shared_ptr& cross_fill_provider, const std::shared_ptr& lightning_trees, const SliceMeshStorage* mesh, - const Polygons& prevent_small_exposed_to_air) + const Shape& prevent_small_exposed_to_air) { if (outer_contour_.empty()) { return; } - inner_contour_ = generateWallToolPaths(toolpaths, outer_contour_, wall_line_count_, infill_line_width_, infill_overlap_, settings, layer_idx, section_type); + inner_contour_ = generateWallToolPaths(toolpaths, outer_contour_, wall_line_count_, infill_line_width_, settings, layer_idx, section_type); scripta::log("infill_inner_contour_0", inner_contour_, section_type, layer_idx); + inner_contour_ = inner_contour_.offset(infill_overlap_); + // It does not make sense to print a pattern in a small region. So the infill region // is split into a small region that will be filled with walls and the normal region // that will be filled with the pattern. This split of regions is not needed if the @@ -109,7 +110,7 @@ void Infill::generate( const auto too_small_length = INT2MM(static_cast(infill_line_width_) / 2.0); // Split the infill region in a narrow region and the normal region. - Polygons small_infill = inner_contour_; + Shape small_infill = inner_contour_; inner_contour_ = inner_contour_.offset(-small_area_width_ / 2); inner_contour_.removeSmallAreas(too_small_length * too_small_length, true); inner_contour_ = inner_contour_.offset(small_area_width_ / 2); @@ -125,15 +126,15 @@ void Infill::generate( if (small_infill_part.offset(-infill_line_width_ / 2).offset(infill_line_width_ / 2).area() < infill_line_width_ * infill_line_width_ * 10 && ! inner_contour_.intersection(small_infill_part.offset(infill_line_width_ / 4)).empty()) { - inner_contour_.add(small_infill_part); + inner_contour_.push_back(small_infill_part); } else { // the part must still be printed, so re-add it - small_infill.add(small_infill_part); + small_infill.push_back(small_infill_part); } } - inner_contour_.unionPolygons(); + inner_contour_ = inner_contour_.unionPolygons(); // Fill narrow area with walls. const size_t narrow_wall_count = small_area_width_ / infill_line_width_ + 1; @@ -178,27 +179,27 @@ void Infill::generate( { zig_zaggify_ = false; } - Polygons generated_result_polygons; - Polygons generated_result_lines; + Shape generated_result_polygons; + OpenLinesSet generated_result_lines; _generate(toolpaths, generated_result_polygons, generated_result_lines, settings, cross_fill_provider, lightning_trees, mesh); zig_zaggify_ = zig_zaggify_real; multiplyInfill(generated_result_polygons, generated_result_lines); - result_polygons.add(generated_result_polygons); - result_lines.add(generated_result_lines); + result_polygons.push_back(generated_result_polygons); + result_lines.push_back(generated_result_lines); } else { //_generate may clear() the generated_result_lines, but this is an output variable that may contain data before we start. - // So make sure we provide it with a Polygons that is safe to clear and only add stuff to result_lines. - Polygons generated_result_polygons; - Polygons generated_result_lines; + // So make sure we provide it with a Shape that is safe to clear and only add stuff to result_lines. + Shape generated_result_polygons; + OpenLinesSet generated_result_lines; _generate(toolpaths, generated_result_polygons, generated_result_lines, settings, cross_fill_provider, lightning_trees, mesh); - result_polygons.add(generated_result_polygons); - result_lines.add(generated_result_lines); + result_polygons.push_back(generated_result_polygons); + result_lines.push_back(generated_result_lines); } scripta::log("infill_result_polygons_0", result_polygons, section_type, layer_idx); scripta::log("infill_result_lines_0", result_lines, section_type, layer_idx); @@ -219,7 +220,7 @@ void Infill::generate( auto it = std::remove_if( result_polygons.begin(), result_polygons.end(), - [snap_distance](PolygonRef poly) + [snap_distance](const Polygon& poly) { return poly.shorterThan(snap_distance); }); @@ -228,7 +229,7 @@ void Infill::generate( PolygonConnector connector(infill_line_width_); connector.add(result_polygons); connector.add(toolpaths); - Polygons connected_polygons; + Shape connected_polygons; std::vector connected_paths; connector.connect(connected_polygons, connected_paths); result_polygons = connected_polygons; @@ -250,8 +251,8 @@ void Infill::generate( void Infill::_generate( std::vector& toolpaths, - Polygons& result_polygons, - Polygons& result_lines, + Shape& result_polygons, + OpenLinesSet& result_lines, const Settings& settings, const std::shared_ptr& cross_fill_provider, const std::shared_ptr& lightning_trees, @@ -317,13 +318,15 @@ void Infill::_generate( break; case EFillMethod::PLUGIN: { +#ifdef ENABLE_PLUGINS // FIXME: I don't like this conditional block outside of the plugin scope. auto [toolpaths_, generated_result_polygons_, generated_result_lines_] = slots::instance().generate( inner_contour_, mesh ? mesh->settings.get("infill_pattern") : settings.get("infill_pattern"), mesh ? mesh->settings : settings); toolpaths.insert(toolpaths.end(), toolpaths_.begin(), toolpaths_.end()); - result_polygons.add(generated_result_polygons_); - result_lines.add(generated_result_lines_); + result_polygons.push_back(generated_result_polygons_); + result_lines.push_back(generated_result_lines_); +#endif break; } default: @@ -346,14 +349,14 @@ void Infill::_generate( && (zig_zaggify_ || pattern_ == EFillMethod::CROSS || pattern_ == EFillMethod::CROSS_3D || pattern_ == EFillMethod::CUBICSUBDIV || pattern_ == EFillMethod::GYROID || pattern_ == EFillMethod::ZIG_ZAG)) { // don't stich for non-zig-zagged line infill types - Polygons stitched_lines; - PolylineStitcher::stitch(result_lines, stitched_lines, result_polygons, infill_line_width_); - result_lines = stitched_lines; + OpenLinesSet stitched_lines; + OpenPolylineStitcher::stitch(result_lines, stitched_lines, result_polygons, infill_line_width_); + result_lines = std::move(stitched_lines); } result_lines = simplifier.polyline(result_lines); } -void Infill::multiplyInfill(Polygons& result_polygons, Polygons& result_lines) +void Infill::multiplyInfill(Shape& result_polygons, OpenLinesSet& result_lines) { if (pattern_ == EFillMethod::CONCENTRIC) { @@ -364,13 +367,13 @@ void Infill::multiplyInfill(Polygons& result_polygons, Polygons& result_lines) coord_t offset = (odd_multiplier) ? infill_line_width_ : infill_line_width_ / 2; // Get the first offset these are mirrored from the original center line - Polygons result; - Polygons first_offset; + Shape result; + Shape first_offset; { - const Polygons first_offset_lines = result_lines.offsetPolyLine(offset); // make lines on both sides of the input lines - const Polygons first_offset_polygons_inward = result_polygons.offset(-offset); // make lines on the inside of the input polygons - const Polygons first_offset_polygons_outward = result_polygons.offset(offset); // make lines on the other side of the input polygons - const Polygons first_offset_polygons = first_offset_polygons_outward.difference(first_offset_polygons_inward); + const Shape first_offset_lines = result_lines.offset(offset); // make lines on both sides of the input lines + const Shape first_offset_polygons_inward = result_polygons.offset(-offset); // make lines on the inside of the input polygons + const Shape first_offset_polygons_outward = result_polygons.offset(offset); // make lines on the other side of the input polygons + const Shape first_offset_polygons = first_offset_polygons_outward.difference(first_offset_polygons_inward); first_offset = first_offset_lines.unionPolygons( first_offset_polygons); // usually we only have either lines or polygons, but this code also handles an infill pattern which generates both if (zig_zaggify_) @@ -378,20 +381,20 @@ void Infill::multiplyInfill(Polygons& result_polygons, Polygons& result_lines) first_offset = inner_contour_.difference(first_offset); } } - result.add(first_offset); + result.push_back(first_offset); // Create the additional offsets from the first offsets, generated earlier, the direction of these offsets is // depended on whether these lines should be connected or not. if (infill_multiplier_ > 3) { - Polygons reference_polygons = first_offset; - const size_t multiplier = static_cast(infill_multiplier_ / 2); + Shape reference_polygons = first_offset; + const size_t multiplier = infill_multiplier_ / 2; const int extra_offset = mirror_offset_ ? -infill_line_width_ : infill_line_width_; for (size_t infill_line = 1; infill_line < multiplier; ++infill_line) { - Polygons extra_polys = reference_polygons.offset(extra_offset); - result.add(extra_polys); + Shape extra_polys = reference_polygons.offset(extra_offset); + result.push_back(extra_polys); reference_polygons = std::move(extra_polys); } } @@ -406,45 +409,37 @@ void Infill::multiplyInfill(Polygons& result_polygons, Polygons& result_lines) result_polygons.clear(); result_lines.clear(); } - result_polygons.add(result); + result_polygons.push_back(result); if (! zig_zaggify_) { - for (PolygonRef poly : result_polygons) - { // make polygons into polylines - if (poly.empty()) - { - continue; - } - poly.add(poly[0]); - } - Polygons polylines = inner_contour_.intersectionPolyLines(result_polygons); + OpenLinesSet polylines = inner_contour_.intersection(static_cast>(result_polygons)); result_polygons.clear(); - PolylineStitcher::stitch(polylines, result_lines, result_polygons, infill_line_width_); + OpenPolylineStitcher::stitch(polylines, result_lines, result_polygons, infill_line_width_); } } -void Infill::generateGyroidInfill(Polygons& result_lines, Polygons& result_polygons) +void Infill::generateGyroidInfill(OpenLinesSet& result_lines, Shape& result_polygons) { - Polygons line_segments; + OpenLinesSet line_segments; GyroidInfill::generateTotalGyroidInfill(line_segments, zig_zaggify_, line_distance_, inner_contour_, z_); - PolylineStitcher::stitch(line_segments, result_lines, result_polygons, infill_line_width_); + OpenPolylineStitcher::stitch(line_segments, result_lines, result_polygons, infill_line_width_); } -void Infill::generateLightningInfill(const std::shared_ptr& trees, Polygons& result_lines) +void Infill::generateLightningInfill(const std::shared_ptr& trees, OpenLinesSet& result_lines) { // Don't need to support areas smaller than line width, as they are always within radius: if (std::abs(inner_contour_.area()) < infill_line_width_ || ! trees) { return; } - result_lines.add(trees->convertToLines(inner_contour_, infill_line_width_)); + result_lines.push_back(trees->convertToLines(inner_contour_, infill_line_width_)); } void Infill::generateConcentricInfill(std::vector& toolpaths, const Settings& settings) { const coord_t min_area = infill_line_width_ * infill_line_width_; - Polygons current_inset = inner_contour_; + Shape current_inset = inner_contour_; Simplify simplifier(settings); while (true) { @@ -468,13 +463,13 @@ void Infill::generateConcentricInfill(std::vector& toolpaths } } -void Infill::generateGridInfill(Polygons& result) +void Infill::generateGridInfill(OpenLinesSet& result) { generateLineInfill(result, line_distance_, fill_angle_, 0); generateLineInfill(result, line_distance_, fill_angle_ + 90, 0); } -void Infill::generateCubicInfill(Polygons& result) +void Infill::generateCubicInfill(OpenLinesSet& result) { const coord_t shift = one_over_sqrt_2 * z_; generateLineInfill(result, line_distance_, fill_angle_, shift); @@ -482,19 +477,19 @@ void Infill::generateCubicInfill(Polygons& result) generateLineInfill(result, line_distance_, fill_angle_ + 240, shift); } -void Infill::generateTetrahedralInfill(Polygons& result) +void Infill::generateTetrahedralInfill(OpenLinesSet& result) { generateHalfTetrahedralInfill(0.0, 0, result); generateHalfTetrahedralInfill(0.0, 90, result); } -void Infill::generateQuarterCubicInfill(Polygons& result) +void Infill::generateQuarterCubicInfill(OpenLinesSet& result) { generateHalfTetrahedralInfill(0.0, 0, result); generateHalfTetrahedralInfill(0.5, 90, result); } -void Infill::generateHalfTetrahedralInfill(double pattern_z_shift, int angle_shift, Polygons& result) +void Infill::generateHalfTetrahedralInfill(double pattern_z_shift, int angle_shift, OpenLinesSet& result) { const coord_t period = line_distance_ * 2; coord_t shift = coord_t(one_over_sqrt_2 * (z_ + pattern_z_shift * period * 2)) % period; @@ -505,29 +500,29 @@ void Infill::generateHalfTetrahedralInfill(double pattern_z_shift, int angle_shi generateLineInfill(result, period, fill_angle_ + angle_shift, -shift); } -void Infill::generateTriangleInfill(Polygons& result) +void Infill::generateTriangleInfill(OpenLinesSet& result) { generateLineInfill(result, line_distance_, fill_angle_, 0); generateLineInfill(result, line_distance_, fill_angle_ + 60, 0); generateLineInfill(result, line_distance_, fill_angle_ + 120, 0); } -void Infill::generateTrihexagonInfill(Polygons& result) +void Infill::generateTrihexagonInfill(OpenLinesSet& result) { generateLineInfill(result, line_distance_, fill_angle_, 0); generateLineInfill(result, line_distance_, fill_angle_ + 60, 0); generateLineInfill(result, line_distance_, fill_angle_ + 120, line_distance_ / 2); } -void Infill::generateCubicSubDivInfill(Polygons& result, const SliceMeshStorage& mesh) +void Infill::generateCubicSubDivInfill(OpenLinesSet& result, const SliceMeshStorage& mesh) { - Polygons uncropped; + OpenLinesSet uncropped; mesh.base_subdiv_cube->generateSubdivisionLines(z_, uncropped); constexpr bool restitch = false; // cubic subdivision lines are always single line segments - not polylines consisting of multiple segments. - result = outer_contour_.offset(infill_overlap_).intersectionPolyLines(uncropped, restitch); + result = outer_contour_.offset(infill_overlap_).intersection(uncropped, restitch); } -void Infill::generateCrossInfill(const SierpinskiFillProvider& cross_fill_provider, Polygons& result_polygons, Polygons& result_lines) +void Infill::generateCrossInfill(const SierpinskiFillProvider& cross_fill_provider, Shape& result_polygons, OpenLinesSet& result_lines) { Polygon cross_pattern_polygon = cross_fill_provider.generate(pattern_, z_, infill_line_width_, pocket_size_); @@ -538,24 +533,22 @@ void Infill::generateCrossInfill(const SierpinskiFillProvider& cross_fill_provid if (zig_zaggify_) { - Polygons cross_pattern_polygons; - cross_pattern_polygons.add(cross_pattern_polygon); - result_polygons.add(inner_contour_.intersection(cross_pattern_polygons)); + Shape cross_pattern_polygons; + cross_pattern_polygons.push_back(cross_pattern_polygon); + result_polygons.push_back(inner_contour_.intersection(cross_pattern_polygons)); } else { // make the polyline closed in order to handle cross_pattern_polygon as a polyline, rather than a closed polygon - cross_pattern_polygon.add(cross_pattern_polygon[0]); - - Polygons cross_pattern_polylines; - cross_pattern_polylines.add(cross_pattern_polygon); - Polygons poly_lines = inner_contour_.intersectionPolyLines(cross_pattern_polylines); - PolylineStitcher::stitch(poly_lines, result_lines, result_polygons, infill_line_width_); + OpenLinesSet cross_pattern_polylines; + cross_pattern_polylines.push_back(cross_pattern_polygon.toPseudoOpenPolyline()); + OpenLinesSet poly_lines = inner_contour_.intersection(cross_pattern_polylines); + OpenPolylineStitcher::stitch(poly_lines, result_lines, result_polygons, infill_line_width_); } } void Infill::addLineInfill( - Polygons& result, + OpenLinesSet& result, const PointMatrix& rotation_matrix, const int scanline_min_idx, const int line_distance, @@ -580,7 +573,7 @@ void Infill::addLineInfill( { // segment is too short to create infill continue; } - result.addLine(rotation_matrix.unapply(Point2LL(x, crossings[crossing_idx])), rotation_matrix.unapply(Point2LL(x, crossings[crossing_idx + 1]))); + result.addSegment(rotation_matrix.unapply(Point2LL(x, crossings[crossing_idx])), rotation_matrix.unapply(Point2LL(x, crossings[crossing_idx + 1]))); } scanline_idx += 1; } @@ -596,7 +589,7 @@ coord_t Infill::getShiftOffsetFromInfillOriginAndRotation(const double& infill_r return 0; } -void Infill::generateLineInfill(Polygons& result, int line_distance, const double& infill_rotation, coord_t shift) +void Infill::generateLineInfill(OpenLinesSet& result, int line_distance, const double& infill_rotation, coord_t shift) { shift += getShiftOffsetFromInfillOriginAndRotation(infill_rotation); PointMatrix rotation_matrix(infill_rotation); @@ -606,7 +599,7 @@ void Infill::generateLineInfill(Polygons& result, int line_distance, const doubl } -void Infill::generateZigZagInfill(Polygons& result, const coord_t line_distance, const double& infill_rotation) +void Infill::generateZigZagInfill(OpenLinesSet& result, const coord_t line_distance, const double& infill_rotation) { const coord_t shift = getShiftOffsetFromInfillOriginAndRotation(infill_rotation); @@ -639,7 +632,7 @@ void Infill::generateZigZagInfill(Polygons& result, const coord_t line_distance, * while I also call a boundary segment leaving from an even scanline toward the right as belonging to an even scansegment. */ void Infill::generateLinearBasedInfill( - Polygons& result, + OpenLinesSet& result, const int line_distance, const PointMatrix& rotation_matrix, ZigzagConnectorProcessor& zigzag_connector_processor, @@ -651,7 +644,7 @@ void Infill::generateLinearBasedInfill( return; } - Polygons outline = inner_contour_; // Make a copy. We'll be rotating this outline to make intersections always horizontal, for better performance. + Shape outline = inner_contour_; // Make a copy. We'll be rotating this outline to make intersections always horizontal, for better performance. outline.applyMatrix(rotation_matrix); coord_t shift = extra_shift + this->shift_; @@ -702,7 +695,7 @@ void Infill::generateLinearBasedInfill( for (size_t poly_idx = 0; poly_idx < outline.size(); poly_idx++) { - PolygonRef poly = outline[poly_idx]; + const Polygon& poly = outline[poly_idx]; if (connect_lines_) { crossings_on_line_[poly_idx].resize(poly.size()); // One for each line in this polygon. @@ -744,12 +737,12 @@ void Infill::generateLinearBasedInfill( for (int scanline_idx = scanline_idx0; scanline_idx != scanline_idx1 + direction; scanline_idx += direction) { - int x = scanline_idx * line_distance + shift; - int y = p1.Y + (p0.Y - p1.Y) * (x - p1.X) / (p0.X - p1.X); + const int x = scanline_idx * line_distance + shift; + const int y = p1.Y + (p0.Y - p1.Y) * (x - p1.X) / (p0.X - p1.X); assert(scanline_idx - scanline_min_idx >= 0 && scanline_idx - scanline_min_idx < int(cut_list.size()) && "reading infill cutlist index out of bounds!"); cut_list[scanline_idx - scanline_min_idx].push_back(y); Point2LL scanline_linesegment_intersection(x, y); - zigzag_connector_processor.registerScanlineSegmentIntersection(scanline_linesegment_intersection, scanline_idx); + zigzag_connector_processor.registerScanlineSegmentIntersection(scanline_linesegment_intersection, scanline_idx, line_distance / 4); crossings_per_scanline[scanline_idx - min_scanline_index].emplace_back(scanline_linesegment_intersection, poly_idx, point_idx); } zigzag_connector_processor.registerVertex(p1); @@ -852,7 +845,7 @@ void Infill::resolveIntersection(const coord_t at_distance, const Point2LL& inte } } -void Infill::connectLines(Polygons& result_lines) +void Infill::connectLines(OpenLinesSet& result_lines) { UnionFind connected_lines; // Keeps track of which lines are connected to which. for (const std::vector>& crossings_on_polygon : crossings_on_line_) @@ -872,7 +865,7 @@ void Infill::connectLines(Polygons& result_lines) const auto half_line_distance_squared = (line_distance_ * line_distance_) / 4; for (size_t polygon_index = 0; polygon_index < inner_contour_.size(); polygon_index++) { - ConstPolygonRef inner_contour_polygon = inner_contour_[polygon_index]; + const Polygon& inner_contour_polygon = inner_contour_[polygon_index]; if (inner_contour_polygon.empty()) { continue; @@ -1014,7 +1007,7 @@ void Infill::connectLines(Polygons& result_lines) } // Now go along the linked list of infill lines and output the infill lines to the actual result. - PolygonRef result_line = result_lines.newPoly(); + OpenPolyline& result_line = result_lines.newLine(); InfillLineSegment* old_line = current_infill_line; if (current_infill_line->previous_) { @@ -1056,21 +1049,21 @@ void Infill::InfillLineSegment::swapDirection() std::swap(next_, previous_); } -void Infill::InfillLineSegment::appendTo(PolygonRef& result_polyline, const bool include_start) +void Infill::InfillLineSegment::appendTo(OpenPolyline& result_polyline, const bool include_start) { if (include_start) { - result_polyline.add(altered_start_); + result_polyline.push_back(altered_start_); } if (start_bend_.has_value()) { - result_polyline.add(start_bend_.value()); + result_polyline.push_back(start_bend_.value()); } if (end_bend_.has_value()) { - result_polyline.add(end_bend_.value()); + result_polyline.push_back(end_bend_.value()); } - result_polyline.add(altered_end_); + result_polyline.push_back(altered_end_); } } // namespace cura diff --git a/src/infill/GyroidInfill.cpp b/src/infill/GyroidInfill.cpp index 6a95df7d54..c085840a21 100644 --- a/src/infill/GyroidInfill.cpp +++ b/src/infill/GyroidInfill.cpp @@ -1,11 +1,15 @@ -// Copyright (c) 2022 Ultimaker B.V. +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher. #include "infill/GyroidInfill.h" +#include + +#include "geometry/OpenPolyline.h" +#include "geometry/Polygon.h" +#include "geometry/Shape.h" #include "utils/AABB.h" #include "utils/linearAlg2D.h" -#include "utils/polygon.h" namespace cura { @@ -18,7 +22,7 @@ GyroidInfill::~GyroidInfill() { } -void GyroidInfill::generateTotalGyroidInfill(Polygons& result_lines, bool zig_zaggify, coord_t line_distance, const Polygons& in_outline, coord_t z) +void GyroidInfill::generateTotalGyroidInfill(OpenLinesSet& result_lines, bool zig_zaggify, coord_t line_distance, const Shape& in_outline, coord_t z) { // generate infill based on the gyroid equation: sin_x * cos_y + sin_y * cos_z + sin_z * cos_x = 0 // kudos to the author of the Slic3r implementation equation code, the equation code here is based on that @@ -39,7 +43,7 @@ void GyroidInfill::generateTotalGyroidInfill(Polygons& result_lines, bool zig_za const double sin_z = std::sin(z_rads); std::vector odd_line_coords; std::vector even_line_coords; - Polygons result; + OpenLinesSet result; std::vector chains[2]; // [start_points[], end_points[]] std::vector connected_to[2]; // [chain_indices[], chain_indices[]] std::vector line_numbers; // which row/column line a chain is part of @@ -80,19 +84,19 @@ void GyroidInfill::generateTotalGyroidInfill(Polygons& result_lines, bool zig_za if (last_inside && current_inside) { // line doesn't hit the boundary, add the whole line - result.addLine(last, current); + result.addSegment(last, current); } else if (last_inside != current_inside) { // line hits the boundary, add the part that's inside the boundary - Polygons line; - line.addLine(last, current); + OpenLinesSet line; + line.addSegment(last, current); constexpr bool restitch = false; // only a single line doesn't need stitching - line = in_outline.intersectionPolyLines(line, restitch); + line = in_outline.intersection(line, restitch); if (line.size() > 0) { // some of the line is inside the boundary - result.addLine(line[0][0], line[0][1]); + result.addSegment(line[0][0], line[0][1]); if (zig_zaggify) { chain_end[chain_end_index] = line[0][(line[0][0] != last && line[0][0] != current) ? 0 : 1]; @@ -172,19 +176,19 @@ void GyroidInfill::generateTotalGyroidInfill(Polygons& result_lines, bool zig_za if (last_inside && current_inside) { // line doesn't hit the boundary, add the whole line - result.addLine(last, current); + result.addSegment(last, current); } else if (last_inside != current_inside) { // line hits the boundary, add the part that's inside the boundary - Polygons line; - line.addLine(last, current); + OpenLinesSet line; + line.addSegment(last, current); constexpr bool restitch = false; // only a single line doesn't need stitching - line = in_outline.intersectionPolyLines(line, restitch); + line = in_outline.intersection(line, restitch); if (line.size() > 0) { // some of the line is inside the boundary - result.addLine(line[0][0], line[0][1]); + result.addSegment(line[0][0], line[0][1]); if (zig_zaggify) { chain_end[chain_end_index] = line[0][(line[0][0] != last && line[0][0] != current) ? 0 : 1]; @@ -238,7 +242,7 @@ void GyroidInfill::generateTotalGyroidInfill(Polygons& result_lines, bool zig_za int chain_ends_remaining = chains[0].size() * 2; - for (ConstPolygonRef outline_poly : in_outline) + for (const Polygon& outline_poly : in_outline) { std::vector connector_points; // the points that make up a connector line @@ -340,7 +344,7 @@ void GyroidInfill::generateTotalGyroidInfill(Polygons& result_lines, bool zig_za if (chain_index != connector_start_chain_index && connected_to[(point_index + 1) % 2][chain_index] != connector_start_chain_index) { - result.add(connector_points); + result.push_back(OpenPolyline{ connector_points }); drawing = false; connector_points.clear(); // remember the connection @@ -389,9 +393,9 @@ void GyroidInfill::generateTotalGyroidInfill(Polygons& result_lines, bool zig_za { // output the connector line segments from the last chain to the first point in the outline connector_points.push_back(outline_poly[0]); - result.add(connector_points); + result.push_back(OpenPolyline{ connector_points }); // output the connector line segments from the first point in the outline to the first chain - result.add(path_to_first_chain); + result.push_back(OpenPolyline{ path_to_first_chain }); } if (chain_ends_remaining < 1) diff --git a/src/infill/LightningDistanceField.cpp b/src/infill/LightningDistanceField.cpp index 1afea87a24..bda9d7e27c 100644 --- a/src/infill/LightningDistanceField.cpp +++ b/src/infill/LightningDistanceField.cpp @@ -10,7 +10,7 @@ namespace cura constexpr coord_t radius_per_cell_size = 6; // The cell-size should be small compared to the radius, but not so small as to be inefficient. -LightningDistanceField::LightningDistanceField(const coord_t& radius, const Polygons& current_outline, const Polygons& current_overhang) +LightningDistanceField::LightningDistanceField(const coord_t& radius, const Shape& current_outline, const Shape& current_overhang) : cell_size_(radius / radius_per_cell_size) , grid_(cell_size_) , supporting_radius_(radius) @@ -20,7 +20,7 @@ LightningDistanceField::LightningDistanceField(const coord_t& radius, const Poly std::vector regular_dots = PolygonUtils::spreadDotsArea(current_overhang, cell_size_); for (const auto& p : regular_dots) { - const ClosestPolygonPoint cpp = PolygonUtils::findClosest(p, current_outline); + const ClosestPointPolygon cpp = PolygonUtils::findClosest(p, current_outline); const coord_t dist_to_boundary = vSize(p - cpp.p()); unsupported_points_.emplace_back(p, dist_to_boundary); } diff --git a/src/infill/LightningGenerator.cpp b/src/infill/LightningGenerator.cpp index a5a7749655..bf952de1d0 100644 --- a/src/infill/LightningGenerator.cpp +++ b/src/infill/LightningGenerator.cpp @@ -48,19 +48,19 @@ void LightningGenerator::generateInitialInternalOverhangs(const SliceMeshStorage const auto infill_line_width = mesh.settings.get("infill_line_width"); const coord_t infill_wall_offset = -infill_wall_line_count * infill_line_width; - Polygons infill_area_above; + Shape infill_area_above; // Iterate from top to bottom, to subtract the overhang areas above from the overhang areas on the layer below, to get only overhang in the top layer where it is overhanging. for (int layer_nr = mesh.layers.size() - 1; layer_nr >= 0; layer_nr--) { const SliceLayer& current_layer = mesh.layers[layer_nr]; - Polygons infill_area_here; + Shape infill_area_here; for (auto& part : current_layer.parts) { - infill_area_here.add(part.getOwnInfillArea().offset(infill_wall_offset)); + infill_area_here.push_back(part.getOwnInfillArea().offset(infill_wall_offset)); } // Remove the part of the infill area that is already supported by the walls. - Polygons overhang = infill_area_here.offset(-wall_supporting_radius).difference(infill_area_above); + Shape overhang = infill_area_here.offset(-wall_supporting_radius).difference(infill_area_above); overhang_per_layer[layer_nr] = overhang; infill_area_above = std::move(infill_area_here); @@ -80,15 +80,15 @@ void LightningGenerator::generateTrees(const SliceMeshStorage& mesh) const auto infill_line_width = mesh.settings.get("infill_line_width"); const coord_t infill_wall_offset = -infill_wall_line_count * infill_line_width; - std::vector infill_outlines; - infill_outlines.insert(infill_outlines.end(), mesh.layers.size(), Polygons()); + std::vector infill_outlines; + infill_outlines.insert(infill_outlines.end(), mesh.layers.size(), Shape()); // For-each layer from top to bottom: for (int layer_id = mesh.layers.size() - 1; layer_id >= 0; layer_id--) { for (const auto& part : mesh.layers[layer_id].parts) { - infill_outlines[layer_id].add(part.getOwnInfillArea().offset(infill_wall_offset)); + infill_outlines[layer_id].push_back(part.getOwnInfillArea().offset(infill_wall_offset)); } } @@ -100,7 +100,7 @@ void LightningGenerator::generateTrees(const SliceMeshStorage& mesh) for (int layer_id = top_layer_id; layer_id >= 0; layer_id--) { LightningLayer& current_lightning_layer = lightning_layers[layer_id]; - Polygons& current_outlines = infill_outlines[layer_id]; + Shape& current_outlines = infill_outlines[layer_id]; const auto& outlines_locator = *outlines_locator_ptr; // register all trees propagated from the previous layer as to-be-reconnected @@ -115,7 +115,7 @@ void LightningGenerator::generateTrees(const SliceMeshStorage& mesh) { return; } - const Polygons& below_outlines = infill_outlines[layer_id - 1]; + const Shape& below_outlines = infill_outlines[layer_id - 1]; outlines_locator_ptr = PolygonUtils::createLocToLineGrid(below_outlines, locator_cell_size); const auto& below_outlines_locator = *outlines_locator_ptr; diff --git a/src/infill/LightningLayer.cpp b/src/infill/LightningLayer.cpp index 6cefaff8be..9ecb401c41 100644 --- a/src/infill/LightningLayer.cpp +++ b/src/infill/LightningLayer.cpp @@ -5,6 +5,7 @@ #include // advance +#include "geometry/OpenPolyline.h" #include "infill/LightningDistanceField.h" #include "infill/LightningTreeNode.h" #include "sliceDataStorage.h" @@ -45,8 +46,8 @@ void LightningLayer::fillLocator(SparseLightningTreeNodeGrid& tree_node_locator) } void LightningLayer::generateNewTrees( - const Polygons& current_overhang, - const Polygons& current_outlines, + const Shape& current_overhang, + const Shape& current_outlines, const LocToLineGrid& outlines_locator, const coord_t supporting_radius, const coord_t wall_supporting_radius) @@ -80,14 +81,14 @@ void LightningLayer::generateNewTrees( GroundingLocation LightningLayer::getBestGroundingLocation( const Point2LL& unsupported_location, - const Polygons& current_outlines, + const Shape& current_outlines, const LocToLineGrid& outline_locator, const coord_t supporting_radius, const coord_t wall_supporting_radius, const SparseLightningTreeNodeGrid& tree_node_locator, const LightningTreeNodeSPtr& exclude_tree) { - ClosestPolygonPoint cpp = PolygonUtils::findClosest(unsupported_location, current_outlines); + ClosestPointPolygon cpp = PolygonUtils::findClosest(unsupported_location, current_outlines); Point2LL node_location = cpp.p(); const coord_t within_dist = vSize(node_location - unsupported_location); @@ -120,7 +121,7 @@ GroundingLocation LightningLayer::getBestGroundingLocation( } else { - return GroundingLocation{ sub_tree, std::optional() }; + return GroundingLocation{ sub_tree, std::optional() }; } } @@ -143,7 +144,7 @@ bool LightningLayer::attach(const Point2LL& unsupported_location, const Groundin void LightningLayer::reconnectRoots( std::vector& to_be_reconnected_tree_roots, - const Polygons& current_outlines, + const Shape& current_outlines, const LocToLineGrid& outline_locator, const coord_t supporting_radius, const coord_t wall_supporting_radius) @@ -217,19 +218,19 @@ void LightningLayer::reconnectRoots( } // Returns 'added someting'. -Polygons LightningLayer::convertToLines(const Polygons& limit_to_outline, const coord_t line_width) const +OpenLinesSet LightningLayer::convertToLines(const Shape& limit_to_outline, const coord_t line_width) const { - Polygons result_lines; + OpenLinesSet result_lines; if (tree_roots.empty()) { return result_lines; } - for (const auto& tree : tree_roots) + for (const LightningTreeNodeSPtr& tree : tree_roots) { tree->convertToPolylines(result_lines, line_width); } - result_lines = limit_to_outline.intersectionPolyLines(result_lines); + result_lines = limit_to_outline.intersection(result_lines); return result_lines; } diff --git a/src/infill/LightningTreeNode.cpp b/src/infill/LightningTreeNode.cpp index 573cffb80a..76ef91dbe1 100644 --- a/src/infill/LightningTreeNode.cpp +++ b/src/infill/LightningTreeNode.cpp @@ -3,6 +3,7 @@ #include "infill/LightningTreeNode.h" +#include "geometry/OpenPolyline.h" #include "utils/linearAlg2D.h" using namespace cura; @@ -64,7 +65,7 @@ LightningTreeNodeSPtr LightningTreeNode::addChild(LightningTreeNodeSPtr& new_chi void LightningTreeNode::propagateToNextLayer( std::vector& next_trees, - const Polygons& next_outlines, + const Shape& next_outlines, const LocToLineGrid& outline_locator, const coord_t prune_distance, const coord_t smooth_magnitude, @@ -169,7 +170,7 @@ LightningTreeNodeSPtr LightningTreeNode::closestNode(const Point2LL& loc) return result; } -bool LightningTreeNode::realign(const Polygons& outlines, const LocToLineGrid& outline_locator, std::vector& rerooted_parts) +bool LightningTreeNode::realign(const Shape& outlines, const LocToLineGrid& outline_locator, std::vector& rerooted_parts) { if (outlines.empty()) { @@ -354,43 +355,43 @@ const std::optional& LightningTreeNode::getLastGroundingLocation() con return last_grounding_location_; } -void LightningTreeNode::convertToPolylines(Polygons& output, const coord_t line_width) const +void LightningTreeNode::convertToPolylines(OpenLinesSet& output, const coord_t line_width) const { - Polygons result; - result.newPoly(); + OpenLinesSet result; + result.emplace_back(); convertToPolylines(0, result); removeJunctionOverlap(result, line_width); - output.add(result); + output.push_back(result); } -void LightningTreeNode::convertToPolylines(size_t long_line_idx, Polygons& output) const +void LightningTreeNode::convertToPolylines(size_t long_line_idx, OpenLinesSet& output) const { if (children_.empty()) { - output[long_line_idx].add(p_); + output[long_line_idx].push_back(p_); return; } size_t first_child_idx = rand() % children_.size(); children_[first_child_idx]->convertToPolylines(long_line_idx, output); - output[long_line_idx].add(p_); + output[long_line_idx].push_back(p_); for (size_t idx_offset = 1; idx_offset < children_.size(); idx_offset++) { size_t child_idx = (first_child_idx + idx_offset) % children_.size(); const LightningTreeNode& child = *children_[child_idx]; - output.newPoly(); + output.emplace_back(); size_t child_line_idx = output.size() - 1; child.convertToPolylines(child_line_idx, output); - output[child_line_idx].add(p_); + output[child_line_idx].push_back(p_); } } -void LightningTreeNode::removeJunctionOverlap(Polygons& result_lines, const coord_t line_width) const +void LightningTreeNode::removeJunctionOverlap(OpenLinesSet& result_lines, const coord_t line_width) const { const coord_t reduction = line_width / 2; // TODO make configurable? for (auto poly_it = result_lines.begin(); poly_it != result_lines.end();) { - PolygonRef polyline = *poly_it; + OpenPolyline& polyline = *poly_it; if (polyline.size() <= 1) { polyline = std::move(result_lines.back()); diff --git a/src/infill/NoZigZagConnectorProcessor.cpp b/src/infill/NoZigZagConnectorProcessor.cpp index 1ffa6532f4..25cb0fa48e 100644 --- a/src/infill/NoZigZagConnectorProcessor.cpp +++ b/src/infill/NoZigZagConnectorProcessor.cpp @@ -14,7 +14,7 @@ void NoZigZagConnectorProcessor::registerVertex(const Point2LL&) // No need to add anything. } -void NoZigZagConnectorProcessor::registerScanlineSegmentIntersection(const Point2LL&, int) +void NoZigZagConnectorProcessor::registerScanlineSegmentIntersection(const Point2LL&, int, coord_t) { // No need to add anything. } diff --git a/src/infill/SierpinskiFill.cpp b/src/infill/SierpinskiFill.cpp index bdb4962228..8c5663b1b1 100644 --- a/src/infill/SierpinskiFill.cpp +++ b/src/infill/SierpinskiFill.cpp @@ -10,11 +10,11 @@ #include +#include "geometry/Polygon.h" #include "infill/ImageBasedDensityProvider.h" #include "infill/UniformDensityProvider.h" #include "utils/AABB3D.h" #include "utils/SVG.h" -#include "utils/polygon.h" namespace cura { @@ -718,10 +718,10 @@ Polygon SierpinskiFill::generateCross() const edge_middle -= triangle.a_; break; } - ret.add(edge_middle / 2); + ret.push_back(edge_middle / 2); } - double realized_length = INT2MM(ret.polygonLength()); + double realized_length = INT2MM(ret.length()); double requested_length = root_.requested_length_; double error = (realized_length - requested_length) / requested_length; spdlog::debug("realized_length: {}, requested_length: {} :: {}% error", realized_length, requested_length, 0.01 * static_cast(10000 * error)); @@ -759,13 +759,13 @@ Polygon SierpinskiFill::generateCross(coord_t z, coord_t min_dist_to_side, coord sides. The steeper overhang is then only in the corner, which is deemed acceptable since the corners are never too sharp. */ const coord_t period = vSize(triangle.straight_corner_ - triangle.a_); - ret.add(get_edge_crossing_location(period, triangle.getFromEdge())); + ret.push_back(get_edge_crossing_location(period, triangle.getFromEdge())); last_triangle = ▵ } assert(last_triangle); const coord_t period = vSize(last_triangle->straight_corner_ - last_triangle->a_); - ret.add(get_edge_crossing_location(period, last_triangle->getToEdge())); + ret.push_back(get_edge_crossing_location(period, last_triangle->getToEdge())); if (pocket_size > 10) { @@ -793,12 +793,12 @@ Polygon SierpinskiFill::generateCross(coord_t z, coord_t min_dist_to_side, coord { coord_t pocket_rounding = std::min(std::min(pocket_size_side, vSize(v0) / 3), vSize(v1) / 3); // a third so that if a line segment is shortened on both sides the middle remains - pocketed.add(p1 + normal(v0, pocket_rounding)); - pocketed.add(p1 + normal(v1, pocket_rounding)); + pocketed.push_back(p1 + normal(v0, pocket_rounding)); + pocketed.push_back(p1 + normal(v1, pocket_rounding)); } else { - pocketed.add(p1); + pocketed.push_back(p1); } p0 = p1; } diff --git a/src/infill/SierpinskiFillProvider.cpp b/src/infill/SierpinskiFillProvider.cpp index 0123c42b04..769029aa11 100644 --- a/src/infill/SierpinskiFillProvider.cpp +++ b/src/infill/SierpinskiFillProvider.cpp @@ -5,11 +5,11 @@ #include +#include "geometry/Polygon.h" #include "infill/ImageBasedDensityProvider.h" #include "infill/UniformDensityProvider.h" #include "utils/AABB3D.h" #include "utils/math.h" -#include "utils/polygon.h" namespace cura { diff --git a/src/infill/SubDivCube.cpp b/src/infill/SubDivCube.cpp index f30affc602..a3490a9add 100644 --- a/src/infill/SubDivCube.cpp +++ b/src/infill/SubDivCube.cpp @@ -5,6 +5,9 @@ #include +#include "geometry/OpenPolyline.h" +#include "geometry/Polygon.h" +#include "geometry/Shape.h" #include "settings/types/Angle.h" //For the infill angle. #include "sliceDataStorage.h" #include "utils/math.h" @@ -83,27 +86,27 @@ void SubDivCube::precomputeOctree(SliceMeshStorage& mesh, const Point2LL& infill mesh.base_subdiv_cube = std::make_shared(mesh, center, curr_recursion_depth - 1); } -void SubDivCube::generateSubdivisionLines(const coord_t z, Polygons& result) +void SubDivCube::generateSubdivisionLines(const coord_t z, OpenLinesSet& result) { if (cube_properties_per_recursion_step_.empty()) // Infill is set to 0%. { return; } - Polygons directional_line_groups[3]; + OpenLinesSet directional_line_groups[3]; generateSubdivisionLines(z, directional_line_groups); for (int dir_idx = 0; dir_idx < 3; dir_idx++) { - Polygons& line_group = directional_line_groups[dir_idx]; + OpenLinesSet& line_group = directional_line_groups[dir_idx]; for (unsigned int line_idx = 0; line_idx < line_group.size(); line_idx++) { - result.addLine(line_group[line_idx][0], line_group[line_idx][1]); + result.addSegment(line_group[line_idx][0], line_group[line_idx][1]); } } } -void SubDivCube::generateSubdivisionLines(const coord_t z, Polygons (&directional_line_groups)[3]) +void SubDivCube::generateSubdivisionLines(const coord_t z, OpenLinesSet (&directional_line_groups)[3]) { CubeProperties cube_properties = cube_properties_per_recursion_step_[depth_]; @@ -228,15 +231,15 @@ coord_t SubDivCube::distanceFromPointToMesh(SliceMeshStorage& mesh, const LayerI return 2; *distance2 = 0; } - Polygons collide; + Shape collide; for (const SliceLayerPart& part : mesh.layers[layer_nr].parts) { - collide.add(part.infill_area); + collide.push_back(part.infill_area); } Point2LL centerpoint = location; bool inside = collide.inside(centerpoint); - ClosestPolygonPoint border_point = PolygonUtils::moveInside2(collide, centerpoint); + ClosestPointPolygon border_point = PolygonUtils::moveInside2(collide, centerpoint); Point2LL diff = border_point.location_ - location; *distance2 = vSize2(diff); if (inside) @@ -261,7 +264,7 @@ void SubDivCube::rotatePoint120(Point2LL& target) target.X = x; } -void SubDivCube::addLineAndCombine(Polygons& group, Point2LL from, Point2LL to) +void SubDivCube::addLineAndCombine(OpenLinesSet& group, Point2LL from, Point2LL to) { int epsilon = 10; // the smallest distance of two points which are viewed as coincident (dist > 0 due to rounding errors) for (unsigned int idx = 0; idx < group.size(); idx++) @@ -269,19 +272,19 @@ void SubDivCube::addLineAndCombine(Polygons& group, Point2LL from, Point2LL to) if (std::abs(from.X - group[idx][1].X) < epsilon && std::abs(from.Y - group[idx][1].Y) < epsilon) { from = group[idx][0]; - group.remove(idx); + group.removeAt(idx); idx--; continue; } if (std::abs(to.X - group[idx][0].X) < epsilon && std::abs(to.Y - group[idx][0].Y) < epsilon) { to = group[idx][1]; - group.remove(idx); + group.removeAt(idx); idx--; continue; } } - group.addLine(from, to); + group.addSegment(from, to); } } // namespace cura diff --git a/src/infill/ZigzagConnectorProcessor.cpp b/src/infill/ZigzagConnectorProcessor.cpp index 7f75b608ff..7aadebc911 100644 --- a/src/infill/ZigzagConnectorProcessor.cpp +++ b/src/infill/ZigzagConnectorProcessor.cpp @@ -3,8 +3,14 @@ #include "infill/ZigzagConnectorProcessor.h" +#include #include +#include "geometry/OpenPolyline.h" +#include "geometry/PointMatrix.h" +#include "geometry/Polygon.h" +#include "geometry/Shape.h" + using namespace cura; @@ -20,7 +26,6 @@ void ZigzagConnectorProcessor::registerVertex(const Point2LL& vertex) } } - bool ZigzagConnectorProcessor::shouldAddCurrentConnector(int start_scanline_idx, int end_scanline_idx) const { int direction = end_scanline_idx - start_scanline_idx; @@ -83,8 +88,23 @@ bool ZigzagConnectorProcessor::shouldAddCurrentConnector(int start_scanline_idx, return should_add; } +bool ZigzagConnectorProcessor::handleConnectorTooCloseToSegment(const coord_t scanline_x, const coord_t min_distance_to_scanline) +{ + if (current_connector_.empty()) + { + return false; + } + return std::find_if( + current_connector_.begin(), + current_connector_.end(), + [scanline_x, min_distance_to_scanline](const Point2LL& point) + { + return std::abs(point.X - scanline_x) >= min_distance_to_scanline; + }) + == current_connector_.end(); +} -void ZigzagConnectorProcessor::registerScanlineSegmentIntersection(const Point2LL& intersection, int scanline_index) +void ZigzagConnectorProcessor::registerScanlineSegmentIntersection(const Point2LL& intersection, int scanline_index, coord_t min_distance_to_scanline) { if (is_first_connector_) { @@ -97,7 +117,7 @@ void ZigzagConnectorProcessor::registerScanlineSegmentIntersection(const Point2L else { // add the current connector if needed - if (shouldAddCurrentConnector(last_connector_index_, scanline_index)) + if (shouldAddCurrentConnector(last_connector_index_, scanline_index) && ! handleConnectorTooCloseToSegment(intersection.X, min_distance_to_scanline)) { const bool is_this_endpiece = scanline_index == last_connector_index_; current_connector_.push_back(intersection); @@ -143,10 +163,28 @@ void ZigzagConnectorProcessor::addZagConnector(std::vector& points, bo { return; } - Polygon polyline(points); + OpenPolyline polyline(points); if (is_endpiece && ! connected_endpieces_) { polyline.pop_back(); } addPolyline(polyline); } + +void cura::ZigzagConnectorProcessor::reset() +{ + is_first_connector_ = true; + first_connector_end_scanline_index_ = 0; + last_connector_index_ = 0; + first_connector_.clear(); + current_connector_.clear(); +} + +void cura::ZigzagConnectorProcessor::addPolyline(const OpenPolyline& polyline) +{ + result_.emplace_back(polyline); + for (Point2LL& p : result_.back()) + { + p = rotation_matrix_.unapply(p); + } +} diff --git a/src/layerPart.cpp b/src/layerPart.cpp index b0fb7ece93..e1754b73fe 100644 --- a/src/layerPart.cpp +++ b/src/layerPart.cpp @@ -3,18 +3,19 @@ #include "layerPart.h" +#include "geometry/OpenPolyline.h" #include "progress/Progress.h" #include "settings/EnumSettings.h" //For ESurfaceMode. #include "settings/Settings.h" #include "sliceDataStorage.h" #include "slicer.h" -#include "utils/PolylineStitcher.h" +#include "utils/OpenPolylineStitcher.h" #include "utils/Simplify.h" //Simplifying the layers after creating them. #include "utils/ThreadPool.h" /* The layer-part creation step is the first step in creating actual useful data for 3D printing. -It takes the result of the Slice step, which is an unordered list of polygons, and makes groups of polygons, +It takes the result of the Slice step, which is an unordered list of polygons_, and makes groups of polygons_, each of these groups is called a "part", which sometimes are also known as "islands". These parts represent isolated areas in the 2D layer with possible holes. @@ -29,40 +30,48 @@ namespace cura void createLayerWithParts(const Settings& settings, SliceLayer& storageLayer, SlicerLayer* layer) { - PolylineStitcher::stitch(layer->openPolylines, storageLayer.openPolyLines, layer->polygons, settings.get("wall_line_width_0")); + OpenPolylineStitcher::stitch(layer->open_polylines_, storageLayer.open_polylines, layer->polygons_, settings.get("wall_line_width_0")); - storageLayer.openPolyLines = Simplify(settings).polyline(storageLayer.openPolyLines); + storageLayer.open_polylines = Simplify(settings).polyline(storageLayer.open_polylines); const bool union_all_remove_holes = settings.get("meshfix_union_all_remove_holes"); if (union_all_remove_holes) { - for (unsigned int i = 0; i < layer->polygons.size(); i++) + for (unsigned int i = 0; i < layer->polygons_.size(); i++) { - if (layer->polygons[i].orientation()) - layer->polygons[i].reverse(); + if (layer->polygons_[i].orientation()) + layer->polygons_[i].reverse(); } } - std::vector result; + std::vector result; const bool union_layers = settings.get("meshfix_union_all"); const ESurfaceMode surface_only = settings.get("magic_mesh_surface_mode"); if (surface_only == ESurfaceMode::SURFACE && ! union_layers) { // Don't do anything with overlapping areas; no union nor xor - result.reserve(layer->polygons.size()); - for (const PolygonRef poly : layer->polygons) + result.reserve(layer->polygons_.size()); + for (const Polygon& poly : layer->polygons_) { + if (poly.empty()) + { + continue; + } result.emplace_back(); - result.back().add(poly); + result.back().push_back(poly); } } else { - result = layer->polygons.splitIntoParts(union_layers || union_all_remove_holes); + result = layer->polygons_.splitIntoParts(union_layers || union_all_remove_holes); } for (auto& part : result) { storageLayer.parts.emplace_back(); + if (part.empty()) + { + continue; + } storageLayer.parts.back().outline = part; storageLayer.parts.back().boundaryBox.calculate(storageLayer.parts.back().outline); if (storageLayer.parts.back().outline.empty()) @@ -90,7 +99,7 @@ void createLayerParts(SliceMeshStorage& mesh, Slicer* slicer) for (LayerIndex layer_nr = total_layers - 1; layer_nr >= 0; layer_nr--) { SliceLayer& layer_storage = mesh.layers[layer_nr]; - if (layer_storage.parts.size() > 0 || (mesh.settings.get("magic_mesh_surface_mode") != ESurfaceMode::NORMAL && layer_storage.openPolyLines.size() > 0)) + if (layer_storage.parts.size() > 0 || (mesh.settings.get("magic_mesh_surface_mode") != ESurfaceMode::NORMAL && layer_storage.open_polylines.size() > 0)) { mesh.layer_nr_max_filled_layer = layer_nr; // last set by the highest non-empty layer break; diff --git a/src/main.cpp b/src/main.cpp index b1381244ce..f9066f8e1a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2023 UltiMaker +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher #include //To change the formatting of std::cerr. @@ -62,7 +62,7 @@ int main(int argc, char** argv) // Want to set the sentry URL? Use '-c user.curaengine:sentry_url= -o curaengine:enable_sentry=True' with conan install #ifdef SENTRY_URL - if (const auto use_sentry = spdlog::details::os::getenv("use_sentry"); ! use_sentry.empty() && use_sentry == "1") + if (const auto use_sentry = spdlog::details::os::getenv("USE_SENTRY"); ! use_sentry.empty() && use_sentry == "1") { // Setup sentry error handling. sentry_options_t* options = sentry_options_new(); @@ -93,6 +93,7 @@ int main(int argc, char** argv) // Set the actual CuraEngine version sentry_options_set_release(options, fmt::format("curaengine@{}", cura_engine_version).c_str()); + spdlog::info("Starting sentry"); sentry_init(options); } #endif @@ -100,8 +101,9 @@ int main(int argc, char** argv) cura::Application::getInstance().run(argc, argv); #ifdef SENTRY_URL - if (const auto use_sentry = spdlog::details::os::getenv("use_sentry"); ! use_sentry.empty() && use_sentry == "1") + if (const auto use_sentry = spdlog::details::os::getenv("USE_SENTRY"); ! use_sentry.empty() && use_sentry == "1") { + spdlog::info("Closing sentry"); sentry_close(); } #endif diff --git a/src/mesh.cpp b/src/mesh.cpp index 740dc442c8..97c16800fd 100644 --- a/src/mesh.cpp +++ b/src/mesh.cpp @@ -3,6 +3,8 @@ #include "mesh.h" +#include + #include #include "utils/Point3D.h" diff --git a/src/multiVolumes.cpp b/src/multiVolumes.cpp index 6852469919..68c7231522 100644 --- a/src/multiVolumes.cpp +++ b/src/multiVolumes.cpp @@ -7,10 +7,12 @@ #include "Application.h" #include "Slice.h" +#include "geometry/OpenPolyline.h" +#include "geometry/Polygon.h" #include "settings/EnumSettings.h" #include "settings/types/LayerIndex.h" #include "slicer.h" -#include "utils/PolylineStitcher.h" +#include "utils/OpenPolylineStitcher.h" namespace cura { @@ -53,11 +55,11 @@ void carveMultipleVolumes(std::vector& volumes) SlicerLayer& layer2 = volume_2.layers[layerNr]; if (alternate_carve_order && layerNr % 2 == 0 && volume_1.mesh->settings_.get("infill_mesh_order") == volume_2.mesh->settings_.get("infill_mesh_order")) { - layer2.polygons = layer2.polygons.difference(layer1.polygons); + layer2.polygons_ = layer2.polygons_.difference(layer1.polygons_); } else { - layer1.polygons = layer1.polygons.difference(layer2.polygons); + layer1.polygons_ = layer1.polygons_.difference(layer2.polygons_); } } } @@ -88,7 +90,7 @@ void generateMultipleVolumesOverlap(std::vector& volumes) aabb.expandXY(overlap); // expand to account for the case where two models and their bounding boxes are adjacent along the X or Y-direction for (LayerIndex layer_nr = 0; layer_nr < volume->layers.size(); layer_nr++) { - Polygons all_other_volumes; + Shape all_other_volumes; for (Slicer* other_volume : volumes) { if (other_volume->mesh->settings_.get("infill_mesh") || other_volume->mesh->settings_.get("anti_overhang_mesh") @@ -97,11 +99,11 @@ void generateMultipleVolumesOverlap(std::vector& volumes) continue; } SlicerLayer& other_volume_layer = other_volume->layers[layer_nr]; - all_other_volumes = all_other_volumes.unionPolygons(other_volume_layer.polygons.offset(offset_to_merge_other_merged_volumes), fill_type); + all_other_volumes = all_other_volumes.unionPolygons(other_volume_layer.polygons_.offset(offset_to_merge_other_merged_volumes), fill_type); } SlicerLayer& volume_layer = volume->layers[layer_nr]; - volume_layer.polygons = volume_layer.polygons.unionPolygons(all_other_volumes.intersection(volume_layer.polygons.offset(overlap / 2)), fill_type); + volume_layer.polygons_ = volume_layer.polygons_.unionPolygons(all_other_volumes.intersection(volume_layer.polygons_.offset(overlap / 2)), fill_type); } } } @@ -118,28 +120,29 @@ void MultiVolumes::carveCuttingMeshes(std::vector& volumes, const std:: Slicer& cutting_mesh_volume = *volumes[carving_mesh_idx]; for (LayerIndex layer_nr = 0; layer_nr < cutting_mesh_volume.layers.size(); layer_nr++) { - Polygons& cutting_mesh_polygons = cutting_mesh_volume.layers[layer_nr].polygons; - Polygons& cutting_mesh_polylines = cutting_mesh_volume.layers[layer_nr].openPolylines; - Polygons cutting_mesh_area_recomputed; - Polygons* cutting_mesh_area; + Shape& cutting_mesh_polygons = cutting_mesh_volume.layers[layer_nr].polygons_; + OpenLinesSet& cutting_mesh_polylines = cutting_mesh_volume.layers[layer_nr].open_polylines_; + Shape cutting_mesh_area_recomputed; + Shape* cutting_mesh_area; coord_t surface_line_width = cutting_mesh.settings_.get("wall_line_width_0"); { // compute cutting_mesh_area if (cutting_mesh.settings_.get("magic_mesh_surface_mode") == ESurfaceMode::BOTH) { - cutting_mesh_area_recomputed = cutting_mesh_polygons.unionPolygons(cutting_mesh_polylines.offsetPolyLine(surface_line_width / 2)); + cutting_mesh_area_recomputed = cutting_mesh_polygons.unionPolygons(cutting_mesh_polylines.offset(surface_line_width / 2)); cutting_mesh_area = &cutting_mesh_area_recomputed; } else if (cutting_mesh.settings_.get("magic_mesh_surface_mode") == ESurfaceMode::SURFACE) { // break up polygons into polylines // they have to be polylines, because they might break up further when doing the cutting - for (PolygonRef poly : cutting_mesh_polygons) + for (Polygon& poly : cutting_mesh_polygons) { - poly.add(poly[0]); + poly.push_back(poly.front()); + cutting_mesh_polylines.emplace_back(poly.getPoints()); } - cutting_mesh_polylines.add(cutting_mesh_polygons); + cutting_mesh_polygons.clear(); - cutting_mesh_area_recomputed = cutting_mesh_polylines.offsetPolyLine(surface_line_width / 2); + cutting_mesh_area_recomputed = cutting_mesh_polylines.offset(surface_line_width / 2); cutting_mesh_area = &cutting_mesh_area_recomputed; } else @@ -148,8 +151,8 @@ void MultiVolumes::carveCuttingMeshes(std::vector& volumes, const std:: } } - Polygons new_outlines; - Polygons new_polylines; + Shape new_outlines; + OpenLinesSet new_polylines; for (unsigned int carved_mesh_idx = 0; carved_mesh_idx < volumes.size(); carved_mesh_idx++) { const Mesh& carved_mesh = meshes[carved_mesh_idx]; @@ -159,13 +162,13 @@ void MultiVolumes::carveCuttingMeshes(std::vector& volumes, const std:: continue; } Slicer& carved_volume = *volumes[carved_mesh_idx]; - Polygons& carved_mesh_layer = carved_volume.layers[layer_nr].polygons; + Shape& carved_mesh_layer = carved_volume.layers[layer_nr].polygons_; - Polygons intersection = cutting_mesh_polygons.intersection(carved_mesh_layer); - new_outlines.add(intersection); + Shape intersection = cutting_mesh_polygons.intersection(carved_mesh_layer); + new_outlines.push_back(intersection); if (cutting_mesh.settings_.get("magic_mesh_surface_mode") != ESurfaceMode::NORMAL) // niet te geleuven { - new_polylines.add(carved_mesh_layer.intersectionPolyLines(cutting_mesh_polylines)); + new_polylines.push_back(carved_mesh_layer.intersection(cutting_mesh_polylines)); } carved_mesh_layer = carved_mesh_layer.difference(*cutting_mesh_area); @@ -174,7 +177,7 @@ void MultiVolumes::carveCuttingMeshes(std::vector& volumes, const std:: if (cutting_mesh.settings_.get("magic_mesh_surface_mode") != ESurfaceMode::NORMAL) { cutting_mesh_polylines.clear(); - PolylineStitcher::stitch(new_polylines, cutting_mesh_polylines, cutting_mesh_polygons, surface_line_width); + OpenPolylineStitcher::stitch(new_polylines, cutting_mesh_polylines, cutting_mesh_polygons, surface_line_width); } } } diff --git a/src/pathPlanning/Comb.cpp b/src/pathPlanning/Comb.cpp index e8fbcb5919..a5659a29e6 100644 --- a/src/pathPlanning/Comb.cpp +++ b/src/pathPlanning/Comb.cpp @@ -29,7 +29,7 @@ LocToLineGrid& Comb::getOutsideLocToLine(const ExtruderTrain& train) return *outside_loc_to_line_[train.extruder_nr_]; } -Polygons& Comb::getBoundaryOutside(const ExtruderTrain& train) +Shape& Comb::getBoundaryOutside(const ExtruderTrain& train) { if (boundary_outside_[train.extruder_nr_].empty()) { @@ -39,7 +39,7 @@ Polygons& Comb::getBoundaryOutside(const ExtruderTrain& train) return boundary_outside_[train.extruder_nr_]; } -Polygons& Comb::getModelBoundary(const ExtruderTrain& train) +Shape& Comb::getModelBoundary(const ExtruderTrain& train) { if (model_boundary_[train.extruder_nr_].empty()) { @@ -61,8 +61,8 @@ LocToLineGrid& Comb::getModelBoundaryLocToLine(const ExtruderTrain& train) Comb::Comb( const SliceDataStorage& storage, const LayerIndex layer_nr, - const Polygons& comb_boundary_inside_minimum, - const Polygons& comb_boundary_inside_optimal, + const Shape& comb_boundary_inside_minimum, + const Shape& comb_boundary_inside_optimal, coord_t comb_boundary_offset, coord_t travel_avoid_distance, coord_t move_inside_distance) @@ -119,7 +119,7 @@ bool Comb::calc( // normal combing within part using optimal comb boundary if (start_inside && end_inside && start_part_idx == end_part_idx) { - PolygonsPart part = parts_view_inside_optimal_.assemblePart(start_part_idx); + SingleShape part = parts_view_inside_optimal_.assemblePart(start_part_idx); comb_paths.emplace_back(); const bool combing_succeeded = LinePolygonsCrossings::comb( part, @@ -155,7 +155,7 @@ bool Comb::calc( // normal combing within part using minimum comb boundary if (start_inside_min && end_inside_min && start_part_idx_min == end_part_idx_min) { - PolygonsPart part = parts_view_inside_minimum_.assemblePart(start_part_idx_min); + SingleShape part = parts_view_inside_minimum_.assemblePart(start_part_idx_min); comb_paths.emplace_back(); comb_result = LinePolygonsCrossings::comb( @@ -374,7 +374,7 @@ bool Comb::calc( } // Try to move comb_path_input points inside by the amount of `move_inside_distance` and see if the points are still in boundary_inside_optimal, add result in comb_path_output -void Comb::moveCombPathInside(Polygons& boundary_inside, Polygons& boundary_inside_optimal, CombPath& comb_path_input, CombPath& comb_path_output) +void Comb::moveCombPathInside(Shape& boundary_inside, Shape& boundary_inside_optimal, CombPath& comb_path_input, CombPath& comb_path_output) { const coord_t dist = move_inside_distance_; const coord_t dist2 = dist * dist; @@ -409,7 +409,7 @@ Comb::Crossing::Crossing( const bool dest_is_inside, const unsigned int dest_part_idx, const unsigned int dest_part_boundary_crossing_poly_idx, - const Polygons& boundary_inside, + const Shape& boundary_inside, const LocToLineGrid& inside_loc_to_line) : dest_is_inside_(dest_is_inside) , boundary_inside_(boundary_inside) @@ -419,16 +419,16 @@ Comb::Crossing::Crossing( { if (dest_is_inside) { - dest_crossing_poly_.emplace(boundary_inside[dest_part_boundary_crossing_poly_idx]); // initialize with most obvious poly, cause mostly a combing move will move outside the - // part, rather than inside a hole in the part + dest_crossing_poly_ = &(boundary_inside[dest_part_boundary_crossing_poly_idx]); // initialize with most obvious poly, cause mostly a combing move will move outside the + // part, rather than inside a hole in the part } } -bool Comb::moveInside(Polygons& boundary_inside, bool is_inside, LocToLineGrid* inside_loc_to_line, Point2LL& dest_point, size_t& inside_poly) +bool Comb::moveInside(Shape& boundary_inside, bool is_inside, LocToLineGrid* inside_loc_to_line, Point2LL& dest_point, size_t& inside_poly) { if (is_inside) { - ClosestPolygonPoint cpp + ClosestPointPolygon cpp = PolygonUtils::ensureInsideOrOutside(boundary_inside, dest_point, offset_extra_start_end_, max_moveInside_distance2_, &boundary_inside, inside_loc_to_line); if (! cpp.isValid()) { @@ -456,7 +456,7 @@ void Comb::Crossing::findCrossingInOrMid(const PartsView& partsView_inside, cons }); dest_part_ = partsView_inside.assemblePart(dest_part_idx_); - ClosestPolygonPoint boundary_crossing_point; + ClosestPointPolygon boundary_crossing_point; { // set [result] to a point on the destination part closest to close_to (but also a bit close to _dest_point) std::unordered_set dest_part_poly_indices; for (unsigned int poly_idx : partsView_inside[dest_part_idx_]) @@ -476,7 +476,7 @@ void Comb::Crossing::findCrossingInOrMid(const PartsView& partsView_inside, cons if (dist2_score_here < dist2_score) { dist2_score = dist2_score_here; - boundary_crossing_point = ClosestPolygonPoint(closest_here, boundary_segment.point_idx_, boundary_segment.getPolygon(), boundary_segment.poly_idx_); + boundary_crossing_point = ClosestPointPolygon(closest_here, boundary_segment.point_idx_, &boundary_segment.getPolygon(), boundary_segment.poly_idx_); } return true; }; @@ -489,7 +489,7 @@ void Comb::Crossing::findCrossingInOrMid(const PartsView& partsView_inside, cons result = dest_point_; } - ClosestPolygonPoint crossing_1_in_cp = PolygonUtils::ensureInsideOrOutside( + ClosestPointPolygon crossing_1_in_cp = PolygonUtils::ensureInsideOrOutside( dest_part_, result, boundary_crossing_point, @@ -513,7 +513,7 @@ void Comb::Crossing::findCrossingInOrMid(const PartsView& partsView_inside, cons } } -bool Comb::Crossing::findOutside(const ExtruderTrain& train, const Polygons& outside, const Point2LL close_to, const bool fail_on_unavoidable_obstacles, Comb& comber) +bool Comb::Crossing::findOutside(const ExtruderTrain& train, const Shape& outside, const Point2LL close_to, const bool fail_on_unavoidable_obstacles, Comb& comber) { out_ = in_or_mid_; if (dest_is_inside_ || outside.inside(in_or_mid_, true)) // start in_between @@ -524,7 +524,7 @@ bool Comb::Crossing::findOutside(const ExtruderTrain& train, const Polygons& out { return vSize2((candidate - preferred_crossing_1_out) / 2); }); - std::optional crossing_1_out_cpp = PolygonUtils::findClose(in_or_mid_, outside, comber.getOutsideLocToLine(train), close_to_penalty_function); + std::optional crossing_1_out_cpp = PolygonUtils::findClose(in_or_mid_, outside, comber.getOutsideLocToLine(train), close_to_penalty_function); if (crossing_1_out_cpp) { out_ = PolygonUtils::moveOutside(*crossing_1_out_cpp, comber.offset_dist_to_get_from_on_the_polygon_to_outside_); @@ -539,7 +539,7 @@ bool Comb::Crossing::findOutside(const ExtruderTrain& train, const Polygons& out { // if move is too far over in_between // find crossing closer by assert(dest_crossing_poly_ && "destination crossing poly should have been instantiated!"); - std::shared_ptr> best = findBestCrossing(train, outside, **dest_crossing_poly_, dest_point_, close_to, comber); + std::shared_ptr> best = findBestCrossing(train, outside, **dest_crossing_poly_, dest_point_, close_to, comber); if (best) { in_or_mid_ = PolygonUtils::moveInside(best->first, comber.offset_dist_to_get_from_on_the_polygon_to_outside_); @@ -554,21 +554,21 @@ bool Comb::Crossing::findOutside(const ExtruderTrain& train, const Polygons& out } -std::shared_ptr> Comb::Crossing::findBestCrossing( +std::shared_ptr> Comb::Crossing::findBestCrossing( const ExtruderTrain& train, - const Polygons& outside, - ConstPolygonRef from, + const Shape& outside, + const Polygon& from, const Point2LL estimated_start, const Point2LL estimated_end, Comb& comber) { - ClosestPolygonPoint* best_in = nullptr; - ClosestPolygonPoint* best_out = nullptr; + ClosestPointPolygon* best_in = nullptr; + ClosestPointPolygon* best_out = nullptr; coord_t best_detour_score = std::numeric_limits::max(); coord_t best_crossing_dist2; - std::vector> crossing_out_candidates = PolygonUtils::findClose(from, outside, comber.getOutsideLocToLine(train)); + std::vector> crossing_out_candidates = PolygonUtils::findClose(from, outside, comber.getOutsideLocToLine(train)); bool seen_close_enough_connection = false; - for (std::pair& crossing_candidate : crossing_out_candidates) + for (std::pair& crossing_candidate : crossing_out_candidates) { const coord_t crossing_dist2 = vSize2(crossing_candidate.first.location_ - crossing_candidate.second.location_); if (crossing_dist2 > comber.max_crossing_dist2_ * 2) @@ -603,7 +603,7 @@ std::shared_ptr> Comb::Cross } if (best_detour_score == std::numeric_limits::max()) { // i.e. if best_in == nullptr or if best_out == nullptr - return std::shared_ptr>(); + return std::shared_ptr>(); } if (best_crossing_dist2 > comber.max_crossing_dist2_) { // find closer point on line segments, rather than moving between vertices of the polygons only @@ -611,10 +611,10 @@ std::shared_ptr> Comb::Cross best_crossing_dist2 = vSize2(best_in->location_ - best_out->location_); if (best_crossing_dist2 > comber.max_crossing_dist2_) { - return std::shared_ptr>(); + return std::shared_ptr>(); } } - return std::make_shared>(*best_in, *best_out); + return std::make_shared>(*best_in, *best_out); } } // namespace cura diff --git a/src/pathPlanning/LinePolygonsCrossings.cpp b/src/pathPlanning/LinePolygonsCrossings.cpp index 1391dffb7a..a2867386ea 100644 --- a/src/pathPlanning/LinePolygonsCrossings.cpp +++ b/src/pathPlanning/LinePolygonsCrossings.cpp @@ -22,7 +22,7 @@ bool LinePolygonsCrossings::calcScanlineCrossings(bool fail_on_unavoidable_obsta { for (unsigned int poly_idx = 0; poly_idx < boundary_.size(); poly_idx++) { - ConstPolygonRef poly = boundary_[poly_idx]; + const Polygon& poly = boundary_[poly_idx]; Point2LL p0 = transformation_matrix_.apply(poly[poly.size() - 1]); for (unsigned int point_idx = 0; point_idx < poly.size(); point_idx++) { @@ -74,7 +74,7 @@ bool LinePolygonsCrossings::lineSegmentCollidesWithBoundary() transformed_start_point_ = transformation_matrix_.apply(start_point_); transformed_end_point_ = transformation_matrix_.apply(end_point_); - for (ConstPolygonRef poly : boundary_) + for (const Polygon& poly : boundary_) { Point2LL p0 = transformation_matrix_.apply(poly.back()); for (Point2LL p1_ : poly) @@ -152,7 +152,7 @@ void LinePolygonsCrossings::generateBasicCombingPath(const Crossing& min, const { // minimise the path length by measuring the length of both paths around the polygon so we can determine the shorter path - ConstPolygonRef poly = boundary_[min.poly_idx_]; + const Polygon& poly = boundary_[min.poly_idx_]; combPath.push_back(transformation_matrix_.unapply(Point2LL(min.x_ - std::abs(dist_to_move_boundary_point_outside_), transformed_start_point_.Y))); // follow the path in the same direction as the winding order of the boundary polygon diff --git a/src/path_ordering.cpp b/src/path_ordering.cpp new file mode 100644 index 0000000000..8d7cd91ad1 --- /dev/null +++ b/src/path_ordering.cpp @@ -0,0 +1,53 @@ +// Copyright (c) 2023 UltiMaker +// CuraEngine is released under the terms of the AGPLv3 or higher. + +#include "path_ordering.h" //The definitions we're implementing here. + +#include "WallToolPaths.h" +#include "geometry/OpenPolyline.h" +#include "sliceDataStorage.h" //For SliceLayerPart. + +namespace cura +{ + +template +const PointsSet& PathOrdering::getVertexData() +{ + return *vertices_; +} + +template<> +const PointsSet& PathOrdering::getVertexData() +{ + return vertices_->outline.outerPolygon(); +} + +template<> +const PointsSet& PathOrdering::getVertexData() +{ + return vertices_->outline.outerPolygon(); +} + +template<> +const PointsSet& PathOrdering::getVertexData() +{ + return vertices_->outline_.outerPolygon(); +} +template<> +const PointsSet& PathOrdering::getVertexData() +{ + if (! cached_vertices_) + { + cached_vertices_ = vertices_->toPolygon(); + } + return *cached_vertices_; +} + +template const PointsSet& PathOrdering::getVertexData(); +template const PointsSet& PathOrdering::getVertexData(); +template const PointsSet& PathOrdering::getVertexData(); +template const PointsSet& PathOrdering::getVertexData(); +template const PointsSet& PathOrdering::getVertexData(); +template const PointsSet& PathOrdering::getVertexData(); + +} // namespace cura diff --git a/src/plugins/converters.cpp b/src/plugins/converters.cpp index 40988a2f7b..964a50007d 100644 --- a/src/plugins/converters.cpp +++ b/src/plugins/converters.cpp @@ -1,6 +1,7 @@ -// Copyright (c) 2023 UltiMaker +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher +#ifdef ENABLE_PLUGINS #include "plugins/converters.h" @@ -10,11 +11,12 @@ #include "GCodePathConfig.h" #include "WallToolPaths.h" +#include "geometry/OpenPolyline.h" +#include "geometry/Polygon.h" #include "pathPlanning/GCodePath.h" #include "pathPlanning/SpeedDerivatives.h" #include "settings/Settings.h" #include "settings/types/LayerIndex.h" -#include "utils/polygon.h" namespace cura::plugins { @@ -101,7 +103,7 @@ simplify_request::value_type simplify_request::operator()( auto* msg_polygon = msg_polygons->add_polygons(); auto* msg_outline = msg_polygon->mutable_outline(); - for (const auto& point : ranges::front(polygons.paths)) + for (const auto& point : ranges::front(polygons)) { auto* msg_outline_path = msg_outline->add_path(); msg_outline_path->set_x(point.X); @@ -109,7 +111,7 @@ simplify_request::value_type simplify_request::operator()( } auto* msg_holes = msg_polygon->mutable_holes(); - for (const auto& polygon : polygons.paths | ranges::views::drop(1)) + for (const auto& polygon : polygons | ranges::views::drop(1)) { auto* msg_hole = msg_holes->Add(); for (const auto& point : polygon) @@ -135,18 +137,18 @@ simplify_response::native_value_type Polygon o{}; for (const auto& point : paths.outline().path()) { - o.add(Point2LL{ point.x(), point.y() }); + o.push_back(Point2LL{ point.x(), point.y() }); } - poly.add(o); + poly.push_back(o); for (const auto& hole : paths.holes()) { Polygon h{}; for (const auto& point : hole.path()) { - h.add(Point2LL{ point.x(), point.y() }); + h.push_back(Point2LL{ point.x(), point.y() }); } - poly.add(h); + poly.push_back(h); } } return poly; @@ -185,7 +187,7 @@ infill_generate_request::value_type auto* msg_polygon = msg_polygons->add_polygons(); auto* msg_outline = msg_polygon->mutable_outline(); - for (const auto& point : ranges::front(inner_contour.paths)) + for (const auto& point : ranges::front(inner_contour)) { auto* msg_outline_path = msg_outline->add_path(); msg_outline_path->set_x(point.X); @@ -193,7 +195,7 @@ infill_generate_request::value_type } auto* msg_holes = msg_polygon->mutable_holes(); - for (const auto& polygon : inner_contour.paths | ranges::views::drop(1)) + for (const auto& polygon : inner_contour | ranges::views::drop(1)) { auto* msg_hole = msg_holes->Add(); for (const auto& point : polygon) @@ -210,8 +212,8 @@ infill_generate_request::value_type infill_generate_response::native_value_type infill_generate_response::operator()(const infill_generate_response::value_type& message) const { VariableWidthLines toolpaths; - Polygons result_polygons; - Polygons result_lines; + Shape result_polygons; + OpenLinesSet result_lines; for (auto& tool_path : message.tool_paths().tool_paths()) { @@ -231,14 +233,14 @@ infill_generate_response::native_value_type infill_generate_response::operator() for (auto& polygon_msg : message.polygons().polygons()) { - Polygons polygon{}; + Shape polygon{}; Polygon outline{}; for (auto& path_msg : polygon_msg.outline().path()) { - outline.add(Point2LL{ path_msg.x(), path_msg.y() }); + outline.push_back(Point2LL{ path_msg.x(), path_msg.y() }); } - polygon.add(outline); + polygon.push_back(outline); for (auto& hole_msg : polygon_msg.holes()) @@ -246,20 +248,20 @@ infill_generate_response::native_value_type infill_generate_response::operator() Polygon hole{}; for (auto& path_msg : hole_msg.path()) { - hole.add(Point2LL{ path_msg.x(), path_msg.y() }); + hole.emplace_back(path_msg.x(), path_msg.y()); } - polygon.add(hole); + polygon.push_back(hole); } - result_polygons.add(polygon); + result_polygons.push_back(polygon); } for (auto& polygon : message.poly_lines().paths()) { - Polygon poly_line; + OpenPolyline poly_line; for (auto& p : polygon.path()) { - poly_line.emplace_back(Point2LL{ p.x(), p.y() }); + poly_line.emplace_back(p.x(), p.y()); } result_lines.emplace_back(poly_line); } @@ -345,6 +347,7 @@ gcode_paths_modify_request::value_type gcode_path->set_speed_factor(path.speed_factor); gcode_path->set_speed_back_pressure_factor(path.speed_back_pressure_factor); gcode_path->set_retract(path.retract); + gcode_path->set_retract_for_nozzle_switch(path.retract_for_nozzle_switch); gcode_path->set_unretract_before_last_travel_move(path.unretract_before_last_travel_move); gcode_path->set_perform_z_hop(path.perform_z_hop); gcode_path->set_perform_prime(path.perform_prime); @@ -360,6 +363,7 @@ gcode_paths_modify_request::value_type gcode_path->set_layer_thickness(path.config.getLayerThickness()); gcode_path->set_flow_ratio(path.config.getFlowRatio()); gcode_path->set_is_bridge_path(path.config.isBridgePath()); + gcode_path->set_z_offset(path.config.z_offset); } return message; @@ -419,7 +423,8 @@ gcode_paths_modify_request::value_type [[nodiscard]] GCodePathConfig gcode_paths_modify_response::buildConfig(const v0::GCodePath& path) { - return { .type = getPrintFeatureType(path.feature()), + return { .z_offset = path.z_offset(), + .type = getPrintFeatureType(path.feature()), .line_width = path.line_width(), .layer_thickness = path.layer_thickness(), .flow = path.flow_ratio(), @@ -450,6 +455,7 @@ gcode_paths_modify_response::native_value_type for (const auto& gcode_path_msg : message.gcode_paths()) { GCodePath path{ + .z_offset = gcode_path_msg.z_offset(), .config = buildConfig(gcode_path_msg), .mesh = gcode_path_msg.mesh_name().empty() ? nullptr : meshes.at(gcode_path_msg.mesh_name()), .space_fill_type = getSpaceFillType(gcode_path_msg.space_fill_type()), @@ -459,6 +465,7 @@ gcode_paths_modify_response::native_value_type .speed_factor = gcode_path_msg.speed_factor(), .speed_back_pressure_factor = gcode_path_msg.speed_back_pressure_factor(), .retract = gcode_path_msg.retract(), + .retract_for_nozzle_switch = gcode_path_msg.retract_for_nozzle_switch(), .unretract_before_last_travel_move = gcode_path_msg.unretract_before_last_travel_move(), .perform_z_hop = gcode_path_msg.perform_z_hop(), .perform_prime = gcode_path_msg.perform_prime(), @@ -481,3 +488,5 @@ gcode_paths_modify_response::native_value_type return paths; } } // namespace cura::plugins + +#endif // ENABLE_PLUGINS diff --git a/src/raft.cpp b/src/raft.cpp index 2fb12e100b..edaff83509 100644 --- a/src/raft.cpp +++ b/src/raft.cpp @@ -5,6 +5,8 @@ #include +#include + #include "Application.h" //To get settings. #include "ExtruderTrain.h" #include "Slice.h" @@ -18,7 +20,7 @@ namespace cura void Raft::generate(SliceDataStorage& storage) { assert( - storage.raftBaseOutline.size() == 0 && storage.raftInterfaceOutline.size() == 0 && storage.raftSurfaceOutline.size() == 0 + storage.raft_base_outline.size() == 0 && storage.raft_interface_outline.size() == 0 && storage.raft_surface_outline.size() == 0 && "Raft polygon isn't generated yet, so should be empty!"); const Settings& settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("raft_base_extruder_nr").settings_; constexpr bool include_support = true; @@ -27,73 +29,113 @@ void Raft::generate(SliceDataStorage& storage) const auto raft_interface_margin = settings.get("raft_interface_margin"); const auto raft_surface_margin = settings.get("raft_surface_margin"); - storage.raftBaseOutline = storage.raftSurfaceOutline = storage.raftInterfaceOutline = storage.getLayerOutlines(0, include_support, dont_include_prime_tower); - storage.raftBaseOutline = storage.raftBaseOutline.offset(raft_base_margin, ClipperLib::jtRound); - storage.raftInterfaceOutline = storage.raftInterfaceOutline.offset(raft_interface_margin, ClipperLib::jtRound); - storage.raftSurfaceOutline = storage.raftSurfaceOutline.offset(raft_surface_margin, ClipperLib::jtRound); + storage.raft_base_outline = storage.raft_surface_outline = storage.raft_interface_outline = storage.getLayerOutlines(0, include_support, dont_include_prime_tower); + storage.raft_base_outline = storage.raft_base_outline.offset(raft_base_margin, ClipperLib::jtRound); + storage.raft_interface_outline = storage.raft_interface_outline.offset(raft_interface_margin, ClipperLib::jtRound); + storage.raft_surface_outline = storage.raft_surface_outline.offset(raft_surface_margin, ClipperLib::jtRound); const coord_t shield_line_width_layer0 = settings.get("skirt_brim_line_width"); const coord_t max_raft_distance = std::max(std::max(raft_base_margin, raft_interface_margin), raft_surface_margin); if (storage.draft_protection_shield.size() > 0) { - Polygons draft_shield_raft + Shape draft_shield_raft = storage.draft_protection_shield .offset(shield_line_width_layer0) // start half a line width outside shield .difference(storage.draft_protection_shield.offset(-max_raft_distance - shield_line_width_layer0 / 2, ClipperLib::jtRound)); // end distance inside shield - storage.raftBaseOutline = storage.raftBaseOutline.unionPolygons(draft_shield_raft); - storage.raftSurfaceOutline = storage.raftSurfaceOutline.unionPolygons(draft_shield_raft); - storage.raftInterfaceOutline = storage.raftInterfaceOutline.unionPolygons(draft_shield_raft); + storage.raft_base_outline = storage.raft_base_outline.unionPolygons(draft_shield_raft); + storage.raft_surface_outline = storage.raft_surface_outline.unionPolygons(draft_shield_raft); + storage.raft_interface_outline = storage.raft_interface_outline.unionPolygons(draft_shield_raft); } - if (storage.oozeShield.size() > 0 && storage.oozeShield[0].size() > 0) + if (storage.ooze_shield.size() > 0 && storage.ooze_shield[0].size() > 0) { - const Polygons& ooze_shield = storage.oozeShield[0]; - Polygons ooze_shield_raft = ooze_shield - .offset(shield_line_width_layer0) // start half a line width outside shield - .difference(ooze_shield.offset(-max_raft_distance - shield_line_width_layer0 / 2, ClipperLib::jtRound)); // end distance inside shield - storage.raftBaseOutline = storage.raftBaseOutline.unionPolygons(ooze_shield_raft); - storage.raftSurfaceOutline = storage.raftSurfaceOutline.unionPolygons(ooze_shield_raft); - storage.raftInterfaceOutline = storage.raftInterfaceOutline.unionPolygons(ooze_shield_raft); + const Shape& ooze_shield = storage.ooze_shield[0]; + Shape ooze_shield_raft = ooze_shield + .offset(shield_line_width_layer0) // start half a line width outside shield + .difference(ooze_shield.offset(-max_raft_distance - shield_line_width_layer0 / 2, ClipperLib::jtRound)); // end distance inside shield + storage.raft_base_outline = storage.raft_base_outline.unionPolygons(ooze_shield_raft); + storage.raft_surface_outline = storage.raft_surface_outline.unionPolygons(ooze_shield_raft); + storage.raft_interface_outline = storage.raft_interface_outline.unionPolygons(ooze_shield_raft); } - const auto remove_inside_corners = [](Polygons& outline, bool remove_inside_corners, coord_t smoothing) + const auto remove_inside_corners = [](Shape& outline, bool remove_inside_corners, coord_t smoothing, coord_t line_width) { if (remove_inside_corners) { - outline.makeConvex(); + // Make all parts convex. We could take the convex hull of the union of all parts, but that would + // result in a massive brim if you would have models in all corners of the build plate. We instead + // perform a convex hull operation on each polygon part separately, this will result in much smaller + // raft islands. However, this might result in inside corners in the raft outline in the situation + // where after the merge operations some parts become connected. To properly make sure that there are + // no inside corners we perform a convex hull operation followed by a merge. If the number of polygon + // parts no longer decrease we have found the polygons that have both no longer inside corners and + // occupy the smallest possible area. + outline = outline.unionPolygons(); + auto outline_parts = outline.unionPolygons().splitIntoParts(); + auto nr_of_parts = outline_parts.size(); + + while (true) + { + outline.clear(); + + for (auto& part : outline_parts) + { + part.makeConvex(); + outline.push_back(part); + } + + outline = outline.unionPolygons(); + outline_parts = outline.splitIntoParts(); + const auto new_nr_of_parts = outline_parts.size(); + + if (new_nr_of_parts > nr_of_parts) + { + // from the recursive convex hull + merge operation the number of parts cannot logically increase + // if it does increase, and allow the loop to continue we might get into an infinite loop; so break out of the loop + // this might produce a raft with inside corners, but that is better than an infinite loop + spdlog::warn("Error while removing inside corners from raft; merge operation increased the number of parts"); + assert(false); + break; + } + + if (new_nr_of_parts == nr_of_parts) + { + break; + } + nr_of_parts = new_nr_of_parts; + } } else { + // Closing operation for smoothing: outline = outline.offset(smoothing, ClipperLib::jtRound).offset(-smoothing, ClipperLib::jtRound); - } - }; - remove_inside_corners(storage.raftBaseOutline, settings.get("raft_base_remove_inside_corners"), settings.get("raft_base_smoothing")); - remove_inside_corners(storage.raftInterfaceOutline, settings.get("raft_interface_remove_inside_corners"), settings.get("raft_interface_smoothing")); - remove_inside_corners(storage.raftSurfaceOutline, settings.get("raft_surface_remove_inside_corners"), settings.get("raft_surface_smoothing")); - if (storage.primeTower.enabled_ && ! storage.primeTower.would_have_actual_tower_) - { - // Find out if the prime-tower part of the raft still needs to be printed, even if there is no actual tower. - // This will only happen if the different raft layers are printed by different extruders. - const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; - const size_t base_extruder_nr = mesh_group_settings.get("raft_base_extruder_nr").extruder_nr_; - const size_t interface_extruder_nr = mesh_group_settings.get("raft_interface_extruder_nr").extruder_nr_; - const size_t surface_extruder_nr = mesh_group_settings.get("raft_surface_extruder_nr").extruder_nr_; - if (base_extruder_nr == interface_extruder_nr && base_extruder_nr == surface_extruder_nr) - { - return; + // Opening operation to get rid of articfacts created by the closing operation: + outline = outline.offset(-line_width, ClipperLib::jtRound).offset(line_width, ClipperLib::jtRound); } - } + }; + const auto nominal_raft_line_width = settings.get("skirt_brim_line_width"); + remove_inside_corners(storage.raft_base_outline, settings.get("raft_base_remove_inside_corners"), settings.get("raft_base_smoothing"), nominal_raft_line_width); + remove_inside_corners( + storage.raft_interface_outline, + settings.get("raft_interface_remove_inside_corners"), + settings.get("raft_interface_smoothing"), + nominal_raft_line_width); + remove_inside_corners( + storage.raft_surface_outline, + settings.get("raft_surface_remove_inside_corners"), + settings.get("raft_surface_smoothing"), + nominal_raft_line_width); } coord_t Raft::getTotalThickness() { const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; - const ExtruderTrain& base_train = mesh_group_settings.get("raft_base_extruder_nr"); - const ExtruderTrain& interface_train = mesh_group_settings.get("raft_interface_extruder_nr"); - const ExtruderTrain& surface_train = mesh_group_settings.get("raft_surface_extruder_nr"); - return base_train.settings_.get("raft_base_thickness") - + interface_train.settings_.get("raft_interface_layers") * interface_train.settings_.get("raft_interface_thickness") - + surface_train.settings_.get("raft_surface_layers") * surface_train.settings_.get("raft_surface_thickness"); + const Settings& base_train = mesh_group_settings.get("raft_base_extruder_nr").settings_; + const Settings& interface_train = mesh_group_settings.get("raft_interface_extruder_nr").settings_; + const Settings& surface_train = mesh_group_settings.get("raft_surface_extruder_nr").settings_; + return base_train.get("raft_base_thickness") + interface_train.get("raft_interface_layers") * interface_train.get("raft_interface_thickness") + + interface_train.get("raft_interface_z_offset") + surface_train.get("raft_surface_layers") * surface_train.get("raft_surface_thickness") + + interface_train.get("raft_surface_z_offset"); } coord_t Raft::getZdiffBetweenRaftAndLayer0() @@ -126,39 +168,46 @@ coord_t Raft::getFillerLayerHeight() return round_divide(getZdiffBetweenRaftAndLayer0(), getFillerLayerCount()); } - size_t Raft::getTotalExtraLayers() +{ + return getBaseLayers() + getInterfaceLayers() + getSurfaceLayers() + getFillerLayerCount(); +} + +size_t Raft::getBaseLayers() { const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; - const ExtruderTrain& base_train = mesh_group_settings.get("raft_base_extruder_nr"); - const ExtruderTrain& interface_train = mesh_group_settings.get("raft_interface_extruder_nr"); - const ExtruderTrain& surface_train = mesh_group_settings.get("raft_surface_extruder_nr"); - if (base_train.settings_.get("adhesion_type") != EPlatformAdhesion::RAFT) + if (mesh_group_settings.get("adhesion_type") != EPlatformAdhesion::RAFT) { return 0; } - return 1 + interface_train.settings_.get("raft_interface_layers") + surface_train.settings_.get("raft_surface_layers") + getFillerLayerCount(); + return 1; +} + +size_t Raft::getInterfaceLayers() +{ + return getLayersAmount("raft_interface_extruder_nr", "raft_interface_layers"); +} + +size_t Raft::getSurfaceLayers() +{ + return getLayersAmount("raft_surface_extruder_nr", "raft_surface_layers"); } Raft::LayerType Raft::getLayerType(LayerIndex layer_index) { - const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; - const ExtruderTrain& base_train = mesh_group_settings.get("raft_base_extruder_nr"); - const ExtruderTrain& interface_train = mesh_group_settings.get("raft_interface_extruder_nr"); - const ExtruderTrain& surface_train = mesh_group_settings.get("raft_surface_extruder_nr"); const auto airgap = Raft::getFillerLayerCount(); - const auto interface_layers = interface_train.settings_.get("raft_interface_layers"); - const auto surface_layers = surface_train.settings_.get("raft_surface_layers"); + const auto interface_layers = Raft::getInterfaceLayers(); + const auto surface_layers = Raft::getSurfaceLayers(); if (layer_index < -airgap - surface_layers - interface_layers) { return LayerType::RaftBase; } - if (layer_index < -airgap - surface_layers) + else if (layer_index < -airgap - surface_layers) { return LayerType::RaftInterface; } - if (layer_index < -airgap) + else if (layer_index < -airgap) { return LayerType::RaftSurface; } @@ -172,5 +221,17 @@ Raft::LayerType Raft::getLayerType(LayerIndex layer_index) } } +size_t Raft::getLayersAmount(const std::string& extruder_nr_setting_name, const std::string& target_raft_section) +{ + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; + if (mesh_group_settings.get("adhesion_type") != EPlatformAdhesion::RAFT) + { + return 0; + } + + const ExtruderTrain& train = mesh_group_settings.get(extruder_nr_setting_name); + return train.settings_.get(target_raft_section); +} + } // namespace cura diff --git a/src/settings/AdaptiveLayerHeights.cpp b/src/settings/AdaptiveLayerHeights.cpp index 14b37b8eaa..14e5e743c0 100644 --- a/src/settings/AdaptiveLayerHeights.cpp +++ b/src/settings/AdaptiveLayerHeights.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2022 Ultimaker B.V. +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher #include "settings/AdaptiveLayerHeights.h" @@ -6,6 +6,7 @@ #include #include #include +#include #include "Application.h" #include "Slice.h" diff --git a/src/settings/PathConfigStorage.cpp b/src/settings/PathConfigStorage.cpp index c0edd6d0e8..d4944f1e8d 100644 --- a/src/settings/PathConfigStorage.cpp +++ b/src/settings/PathConfigStorage.cpp @@ -46,21 +46,21 @@ PathConfigStorage::PathConfigStorage(const SliceDataStorage& storage, const Laye , raft_base_config(GCodePathConfig{ .type = PrintFeatureType::SupportInterface, .line_width = raft_base_train.settings_.get("raft_base_line_width"), .layer_thickness = raft_base_train.settings_.get("raft_base_thickness"), - .flow = Ratio(1.0), + .flow = raft_base_train.settings_.get("raft_base_flow"), .speed_derivatives = SpeedDerivatives{ .speed = raft_base_train.settings_.get("raft_base_speed"), .acceleration = raft_base_train.settings_.get("raft_base_acceleration"), .jerk = raft_base_train.settings_.get("raft_base_jerk") } }) , raft_interface_config(GCodePathConfig{ .type = PrintFeatureType::Support, .line_width = raft_interface_train.settings_.get("raft_interface_line_width"), .layer_thickness = raft_interface_train.settings_.get("raft_interface_thickness"), - .flow = Ratio(1.0), + .flow = raft_base_train.settings_.get("raft_interface_flow"), .speed_derivatives = SpeedDerivatives{ .speed = raft_interface_train.settings_.get("raft_interface_speed"), .acceleration = raft_interface_train.settings_.get("raft_interface_acceleration"), .jerk = raft_interface_train.settings_.get("raft_interface_jerk") } }) , raft_surface_config(GCodePathConfig{ .type = PrintFeatureType::SupportInterface, .line_width = raft_surface_train.settings_.get("raft_surface_line_width"), .layer_thickness = raft_surface_train.settings_.get("raft_surface_thickness"), - .flow = Ratio(1.0), + .flow = raft_base_train.settings_.get("raft_surface_flow"), .speed_derivatives = SpeedDerivatives{ .speed = raft_surface_train.settings_.get("raft_surface_speed"), .acceleration = raft_surface_train.settings_.get("raft_surface_acceleration"), .jerk = raft_surface_train.settings_.get("raft_surface_jerk") } }) diff --git a/src/settings/Settings.cpp b/src/settings/Settings.cpp index 9ec36c2446..cd6d2719f4 100644 --- a/src/settings/Settings.cpp +++ b/src/settings/Settings.cpp @@ -1,13 +1,14 @@ -// Copyright (c) 2023 UltiMaker +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher #include "settings/Settings.h" #include +#include #include +#include #include // regex parsing for temp flow graph #include // ostringstream -#include #include //Parsing strings (stod, stoul). #include @@ -18,6 +19,8 @@ #include "BeadingStrategy/BeadingStrategyFactory.h" #include "ExtruderTrain.h" #include "Slice.h" +#include "geometry/Polygon.h" +#include "geometry/Shape.h" #include "settings/EnumSettings.h" #include "settings/FlowTempGraph.h" #include "settings/types/Angle.h" @@ -27,7 +30,6 @@ #include "settings/types/Temperature.h" //For temperature settings. #include "settings/types/Velocity.h" //For velocity settings. #include "utils/Matrix4x3D.h" -#include "utils/polygon.h" #include "utils/string.h" //For Escaped. #include "utils/types/string_switch.h" //For string switch. @@ -257,11 +259,11 @@ FlowTempGraph Settings::get(const std::string& key) const } template<> -Polygons Settings::get(const std::string& key) const +Shape Settings::get(const std::string& key) const { std::string value_string = get(key); - Polygons result; + Shape result; if (value_string.empty()) { return result; // Empty at this point. @@ -287,8 +289,7 @@ Polygons Settings::get(const std::string& key) const { std::string polygon_str = *polygon_match_iter++; - result.emplace_back(); - PolygonRef poly = result.back(); + Polygon& poly = result.newLine(); std::regex point2D_regex(R"(\[([^,\[]*),([^,\]]*)\])"); // matches to a list of exactly two things @@ -678,6 +679,54 @@ InsetDirection Settings::get(const std::string& key) const } } +template<> +PrimeTowerMode Settings::get(const std::string& key) const +{ + const std::string& value = get(key); + if (value == "interleaved") + { + return PrimeTowerMode::INTERLEAVED; + } + + return PrimeTowerMode::NORMAL; +} + +template<> +BrimLocation Settings::get(const std::string& key) const +{ + const std::string& value = get(key); + if (value == "everywhere") + { + return BrimLocation::EVERYWHERE; + } + else if (value == "inside") + { + return BrimLocation::INSIDE; + } + else // Default. + { + return BrimLocation::OUTSIDE; + } +} + +template<> +CoolDuringExtruderSwitch Settings::get(const std::string& key) const +{ + const std::string& value = get(key); + if (value == "all_fans") + { + return CoolDuringExtruderSwitch::ALL_FANS; + } + else if (value == "only_last_extruder") + { + return CoolDuringExtruderSwitch::ONLY_LAST_EXTRUDER; + } + else // Default. + { + return CoolDuringExtruderSwitch::UNCHANGED; + } +} + template<> std::vector Settings::get>(const std::string& key) const { diff --git a/src/skin.cpp b/src/skin.cpp index 1f36864698..351290be93 100644 --- a/src/skin.cpp +++ b/src/skin.cpp @@ -14,6 +14,7 @@ #include "settings/types/Angle.h" //For the infill support angle. #include "settings/types/Ratio.h" #include "sliceDataStorage.h" +#include "utils/Simplify.h" #include "utils/math.h" #include "utils/polygonUtils.h" @@ -55,9 +56,9 @@ SkinInfillAreaComputation::SkinInfillAreaComputation(const LayerIndex& layer_nr, * * this function may only read/write the skin and infill from the *current* layer. */ -Polygons SkinInfillAreaComputation::getOutlineOnLayer(const SliceLayerPart& part_here, const LayerIndex layer2_nr) +Shape SkinInfillAreaComputation::getOutlineOnLayer(const SliceLayerPart& part_here, const LayerIndex layer2_nr) { - Polygons result; + Shape result; if (layer2_nr >= static_cast(mesh_.layers.size())) { return result; @@ -67,7 +68,7 @@ Polygons SkinInfillAreaComputation::getOutlineOnLayer(const SliceLayerPart& part { if (part_here.boundaryBox.hit(part2.boundaryBox)) { - result.add(part2.outline); + result.push_back(part2.outline); } } return result; @@ -126,15 +127,15 @@ void SkinInfillAreaComputation::generateSkinAndInfillAreas() void SkinInfillAreaComputation::generateSkinAndInfillAreas(SliceLayerPart& part) { // Make a copy of the outline which we later intersect and union with the resized skins to ensure the resized skin isn't too large or removed completely. - Polygons top_skin; + Shape top_skin; if (top_layer_count_ > 0) { - top_skin = Polygons(part.inner_area); + top_skin = Shape(part.inner_area); } - Polygons bottom_skin; + Shape bottom_skin; if (bottom_layer_count_ > 0 || layer_nr_ < LayerIndex(initial_bottom_layer_count_)) { - bottom_skin = Polygons(part.inner_area); + bottom_skin = Shape(part.inner_area); } calculateBottomSkin(part, bottom_skin); @@ -143,7 +144,7 @@ void SkinInfillAreaComputation::generateSkinAndInfillAreas(SliceLayerPart& part) applySkinExpansion(part.inner_area, top_skin, bottom_skin); // Now combine the resized top skin and bottom skin. - Polygons skin = top_skin.unionPolygons(bottom_skin); + Shape skin = top_skin.unionPolygons(bottom_skin); skin.removeSmallAreas(MIN_AREA_SIZE); // Create infill area irrespective if the infill is to be generated or not(would be used for bridging). @@ -154,8 +155,12 @@ void SkinInfillAreaComputation::generateSkinAndInfillAreas(SliceLayerPart& part) generateInfill(part); } - for (PolygonsPart& skin_area_part : skin.splitIntoParts()) + for (const SingleShape& skin_area_part : skin.splitIntoParts()) { + if (skin_area_part.empty()) + { + continue; + } part.skin_parts.emplace_back(); part.skin_parts.back().outline = skin_area_part; } @@ -167,7 +172,7 @@ void SkinInfillAreaComputation::generateSkinAndInfillAreas(SliceLayerPart& part) * * this function may only read/write the skin and infill from the *current* layer. */ -void SkinInfillAreaComputation::calculateBottomSkin(const SliceLayerPart& part, Polygons& downskin) +void SkinInfillAreaComputation::calculateBottomSkin(const SliceLayerPart& part, Shape& downskin) { if (bottom_layer_count_ == 0 && initial_bottom_layer_count_ == 0) { @@ -178,7 +183,7 @@ void SkinInfillAreaComputation::calculateBottomSkin(const SliceLayerPart& part, return; // don't subtract anything form the downskin } LayerIndex bottom_check_start_layer_idx{ std::max(LayerIndex{ 0 }, LayerIndex{ layer_nr_ - bottom_layer_count_ }) }; - Polygons not_air = getOutlineOnLayer(part, bottom_check_start_layer_idx); + Shape not_air = getOutlineOnLayer(part, bottom_check_start_layer_idx); if (! no_small_gaps_heuristic_) { for (int downskin_layer_nr = bottom_check_start_layer_idx + 1; downskin_layer_nr < layer_nr_; downskin_layer_nr++) @@ -194,7 +199,7 @@ void SkinInfillAreaComputation::calculateBottomSkin(const SliceLayerPart& part, downskin = downskin.difference(not_air); // skin overlaps with the walls } -void SkinInfillAreaComputation::calculateTopSkin(const SliceLayerPart& part, Polygons& upskin) +void SkinInfillAreaComputation::calculateTopSkin(const SliceLayerPart& part, Shape& upskin) { if (layer_nr_ > LayerIndex(mesh_.layers.size()) - top_layer_count_ || top_layer_count_ <= 0) { @@ -203,7 +208,7 @@ void SkinInfillAreaComputation::calculateTopSkin(const SliceLayerPart& part, Pol return; } - Polygons not_air = getOutlineOnLayer(part, layer_nr_ + top_layer_count_); + Shape not_air = getOutlineOnLayer(part, layer_nr_ + top_layer_count_); if (! no_small_gaps_heuristic_) { for (int upskin_layer_nr = layer_nr_ + 1; upskin_layer_nr < layer_nr_ + top_layer_count_; upskin_layer_nr++) @@ -227,7 +232,7 @@ void SkinInfillAreaComputation::calculateTopSkin(const SliceLayerPart& part, Pol * * this function may only read/write the skin and infill from the *current* layer. */ -void SkinInfillAreaComputation::applySkinExpansion(const Polygons& original_outline, Polygons& upskin, Polygons& downskin) +void SkinInfillAreaComputation::applySkinExpansion(const Shape& original_outline, Shape& upskin, Shape& downskin) { const coord_t min_width = mesh_.settings.get("min_skin_width_for_expansion") / 2; @@ -238,13 +243,13 @@ void SkinInfillAreaComputation::applySkinExpansion(const Polygons& original_outl // The expansion is only applied to that opened shape. if (bottom_skin_expand_distance_ != 0) { - const Polygons expanded = downskin.offset(-min_width).offset(min_width + bottom_skin_expand_distance_); + const Shape expanded = downskin.offset(-min_width).offset(min_width + bottom_skin_expand_distance_); // And then re-joined with the original part that was not offset, to retain parts smaller than min_width. downskin = downskin.unionPolygons(expanded); } if (top_skin_expand_distance_ != 0) { - const Polygons expanded = upskin.offset(-min_width).offset(min_width + top_skin_expand_distance_); + const Shape expanded = upskin.offset(-min_width).offset(min_width + top_skin_expand_distance_); upskin = upskin.unionPolygons(expanded); } } @@ -326,7 +331,7 @@ void SkinInfillAreaComputation::generateRoofingFillAndSkinFill(SliceLayerPart& p const size_t roofing_layer_count = std::min(mesh_.settings.get("roofing_layer_count"), mesh_.settings.get("top_layers")); const coord_t skin_overlap = mesh_.settings.get("skin_overlap_mm"); - Polygons filled_area_above = generateFilledAreaAbove(part, roofing_layer_count); + Shape filled_area_above = generateFilledAreaAbove(part, roofing_layer_count); skin_part.roofing_fill = skin_part.outline.difference(filled_area_above); skin_part.skin_fill = skin_part.outline.intersection(filled_area_above); @@ -344,14 +349,14 @@ void SkinInfillAreaComputation::generateRoofingFillAndSkinFill(SliceLayerPart& p * * this function may only read the skin and infill from the *current* layer. */ -Polygons SkinInfillAreaComputation::generateFilledAreaAbove(SliceLayerPart& part, size_t roofing_layer_count) +Shape SkinInfillAreaComputation::generateFilledAreaAbove(SliceLayerPart& part, size_t roofing_layer_count) { - Polygons filled_area_above = getOutlineOnLayer(part, layer_nr_ + roofing_layer_count); + Shape filled_area_above = getOutlineOnLayer(part, layer_nr_ + roofing_layer_count); if (! no_small_gaps_heuristic_) { for (int layer_nr_above = layer_nr_ + 1; layer_nr_above < layer_nr_ + roofing_layer_count; layer_nr_above++) { - Polygons outlines_above = getOutlineOnLayer(part, layer_nr_above); + Shape outlines_above = getOutlineOnLayer(part, layer_nr_above); filled_area_above = filled_area_above.intersection(outlines_above); } } @@ -363,7 +368,7 @@ Polygons SkinInfillAreaComputation::generateFilledAreaAbove(SliceLayerPart& part // has air below (fixes https://github.com/Ultimaker/Cura/issues/2656) // set air_below to the skin area for the current layer that has air below it - Polygons air_below = getOutlineOnLayer(part, layer_nr_).difference(getOutlineOnLayer(part, layer_nr_ - 1)); + Shape air_below = getOutlineOnLayer(part, layer_nr_).difference(getOutlineOnLayer(part, layer_nr_ - 1)); if (! air_below.empty()) { @@ -380,21 +385,21 @@ Polygons SkinInfillAreaComputation::generateFilledAreaAbove(SliceLayerPart& part * * this function may only read the skin and infill from the *current* layer. */ -Polygons SkinInfillAreaComputation::generateFilledAreaBelow(SliceLayerPart& part, size_t flooring_layer_count) +Shape SkinInfillAreaComputation::generateFilledAreaBelow(SliceLayerPart& part, size_t flooring_layer_count) { if (layer_nr_ < flooring_layer_count) { return {}; } const int lowest_flooring_layer = layer_nr_ - flooring_layer_count; - Polygons filled_area_below = getOutlineOnLayer(part, lowest_flooring_layer); + Shape filled_area_below = getOutlineOnLayer(part, lowest_flooring_layer); if (! no_small_gaps_heuristic_) { const int next_lowest_flooring_layer = lowest_flooring_layer + 1; for (int layer_nr_below = next_lowest_flooring_layer; layer_nr_below < layer_nr_; layer_nr_below++) { - Polygons outlines_below = getOutlineOnLayer(part, layer_nr_below); + Shape outlines_below = getOutlineOnLayer(part, layer_nr_below); filled_area_below = filled_area_below.intersection(outlines_below); } } @@ -413,27 +418,27 @@ void SkinInfillAreaComputation::generateInfillSupport(SliceMeshStorage& mesh) SliceLayer& layer = mesh.layers[layer_idx]; SliceLayer& layer_above = mesh.layers[layer_idx + 1]; - Polygons inside_above; - Polygons infill_above; + Shape inside_above; + Shape infill_above; for (SliceLayerPart& part_above : layer_above.parts) { - inside_above.add(part_above.infill_area); - infill_above.add(part_above.getOwnInfillArea()); + inside_above.push_back(part_above.infill_area); + infill_above.push_back(part_above.getOwnInfillArea()); } for (SliceLayerPart& part : layer.parts) { - const Polygons& infill_area = part.infill_area; + const Shape& infill_area = part.infill_area; if (infill_area.empty()) { continue; } - const Polygons unsupported = infill_area.offset(-max_dist_from_lower_layer); - const Polygons basic_overhang = unsupported.difference(inside_above); - const Polygons overhang_extented = basic_overhang.offset(max_dist_from_lower_layer + 50); // +50 for easier joining with support from layer above - const Polygons full_overhang = overhang_extented.difference(inside_above); - const Polygons infill_support = infill_above.unionPolygons(full_overhang); + const Shape unsupported = infill_area.offset(-max_dist_from_lower_layer); + const Shape basic_overhang = unsupported.difference(inside_above); + const Shape overhang_extented = basic_overhang.offset(max_dist_from_lower_layer + 50); // +50 for easier joining with support from layer above + const Shape full_overhang = overhang_extented.difference(inside_above); + const Shape infill_support = infill_above.unionPolygons(full_overhang); part.infill_area_own = infill_support.intersection(part.getOwnInfillArea()); } @@ -461,9 +466,11 @@ void SkinInfillAreaComputation::generateGradualInfill(SliceMeshStorage& mesh) const LayerIndex mesh_min_layer = mesh.settings.get("initial_bottom_layers"); const LayerIndex mesh_max_layer = mesh.layers.size() - 1 - mesh.settings.get("top_layers"); + const Simplify simplifier(mesh.settings.get("infill_extruder_nr").settings_); + const auto infill_wall_count = mesh.settings.get("infill_wall_line_count"); const auto infill_wall_width = mesh.settings.get("infill_line_width"); - const auto infill_overlap = mesh.settings.get("infill_overlap_mm"); + const auto is_connected = mesh.settings.get("zig_zaggify_infill") || mesh.settings.get("infill_pattern") == EFillMethod::ZIG_ZAG; for (LayerIndex layer_idx = 0; layer_idx < static_cast(mesh.layers.size()); layer_idx++) { // loop also over layers which don't contain infill cause of bottom_ and top_layer to initialize their infill_area_per_combine_per_density SliceLayer& layer = mesh.layers[layer_idx]; @@ -472,12 +479,11 @@ void SkinInfillAreaComputation::generateGradualInfill(SliceMeshStorage& mesh) { assert((part.infill_area_per_combine_per_density.empty() && "infill_area_per_combine_per_density is supposed to be uninitialized")); - const Polygons& infill_area = Infill::generateWallToolPaths( + const Shape& infill_area = Infill::generateWallToolPaths( part.infill_wall_toolpaths, part.getOwnInfillArea(), infill_wall_count, infill_wall_width, - infill_overlap, mesh.settings, layer_idx, SectionType::SKIN); @@ -489,7 +495,8 @@ void SkinInfillAreaComputation::generateGradualInfill(SliceMeshStorage& mesh) // note: no need to copy part.infill_area, cause it's the empty vector anyway continue; } - Polygons less_dense_infill = infill_area; // one step less dense with each infill_step + Shape less_dense_infill = infill_area; // one step less dense with each infill_step + Shape sum_more_dense; // NOTE: Only used for zig-zag or connected fills. for (size_t infill_step = 0; infill_step < max_infill_steps; infill_step++) { LayerIndex min_layer = layer_idx + infill_step * gradual_infill_step_layer_count + static_cast(layer_skip_count); @@ -503,14 +510,14 @@ void SkinInfillAreaComputation::generateGradualInfill(SliceMeshStorage& mesh) break; } const SliceLayer& upper_layer = mesh.layers[static_cast(upper_layer_idx)]; - Polygons relevent_upper_polygons; + Shape relevent_upper_polygons; for (const SliceLayerPart& upper_layer_part : upper_layer.parts) { if (! upper_layer_part.boundaryBox.hit(part.boundaryBox)) { continue; } - relevent_upper_polygons.add(upper_layer_part.getOwnInfillArea()); + relevent_upper_polygons.push_back(upper_layer_part.getOwnInfillArea()); } less_dense_infill = less_dense_infill.intersection(relevent_upper_polygons); } @@ -520,13 +527,18 @@ void SkinInfillAreaComputation::generateGradualInfill(SliceMeshStorage& mesh) } // add new infill_area_per_combine for the current density part.infill_area_per_combine_per_density.emplace_back(); - std::vector& infill_area_per_combine_current_density = part.infill_area_per_combine_per_density.back(); - const Polygons more_dense_infill = infill_area.difference(less_dense_infill); - infill_area_per_combine_current_density.push_back(more_dense_infill); + std::vector& infill_area_per_combine_current_density = part.infill_area_per_combine_per_density.back(); + const Shape more_dense_infill = infill_area.difference(less_dense_infill); + infill_area_per_combine_current_density.push_back( + simplifier.polygon(more_dense_infill.difference(sum_more_dense).offset(-infill_wall_width).offset(infill_wall_width))); + if (is_connected) + { + sum_more_dense = sum_more_dense.unionPolygons(more_dense_infill); + } } part.infill_area_per_combine_per_density.emplace_back(); - std::vector& infill_area_per_combine_current_density = part.infill_area_per_combine_per_density.back(); - infill_area_per_combine_current_density.push_back(infill_area); + std::vector& infill_area_per_combine_current_density = part.infill_area_per_combine_per_density.back(); + infill_area_per_combine_current_density.push_back(simplifier.polygon(infill_area.difference(sum_more_dense).offset(-infill_wall_width).offset(infill_wall_width))); part.infill_area_own = std::nullopt; // clear infill_area_own, it's not needed any more. assert(! part.infill_area_per_combine_per_density.empty() && "infill_area_per_combine_per_density is now initialized"); } @@ -581,14 +593,14 @@ void SkinInfillAreaComputation::combineInfillLayers(SliceMeshStorage& mesh) { for (unsigned int density_idx = 0; density_idx < part.infill_area_per_combine_per_density.size(); density_idx++) { // go over each density of gradual infill (these density areas overlap!) - std::vector& infill_area_per_combine = part.infill_area_per_combine_per_density[density_idx]; - Polygons result; + std::vector& infill_area_per_combine = part.infill_area_per_combine_per_density[density_idx]; + Shape result; for (SliceLayerPart& lower_layer_part : lower_layer->parts) { if (part.boundaryBox.hit(lower_layer_part.boundaryBox)) { - Polygons intersection = infill_area_per_combine[combine_count_here - 1].intersection(lower_layer_part.infill_area).offset(-200).offset(200); - result.add(intersection); // add area to be thickened + Shape intersection = infill_area_per_combine[combine_count_here - 1].intersection(lower_layer_part.infill_area).offset(-200).offset(200); + result.push_back(intersection); // add area to be thickened infill_area_per_combine[combine_count_here - 1] = infill_area_per_combine[combine_count_here - 1].difference(intersection); // remove thickened area from less thick layer here unsigned int max_lower_density_idx = density_idx; @@ -608,7 +620,7 @@ void SkinInfillAreaComputation::combineInfillLayers(SliceMeshStorage& mesh) lower_density_idx <= max_lower_density_idx && lower_density_idx < lower_layer_part.infill_area_per_combine_per_density.size(); lower_density_idx++) { - std::vector& lower_infill_area_per_combine = lower_layer_part.infill_area_per_combine_per_density[lower_density_idx]; + std::vector& lower_infill_area_per_combine = lower_layer_part.infill_area_per_combine_per_density[lower_density_idx]; lower_infill_area_per_combine[0] = lower_infill_area_per_combine[0].difference(intersection); // remove thickened area from lower (single thickness) layer } @@ -633,10 +645,10 @@ void SkinInfillAreaComputation::generateTopAndBottomMostSkinFill(SliceLayerPart& { for (SkinPart& skin_part : part.skin_parts) { - Polygons filled_area_above = generateFilledAreaAbove(part, 1); + Shape filled_area_above = generateFilledAreaAbove(part, 1); skin_part.top_most_surface_fill = skin_part.outline.difference(filled_area_above); - Polygons filled_area_below = generateFilledAreaBelow(part, 1); + Shape filled_area_below = generateFilledAreaBelow(part, 1); skin_part.bottom_most_surface_fill = skin_part.skin_fill.difference(filled_area_below); } } diff --git a/src/sliceDataStorage.cpp b/src/sliceDataStorage.cpp index e87250191b..697721ccd0 100644 --- a/src/sliceDataStorage.cpp +++ b/src/sliceDataStorage.cpp @@ -1,22 +1,26 @@ -// Copyright (c) 2023 UltiMaker +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher #include "sliceDataStorage.h" +#include + #include #include "Application.h" //To get settings. #include "ExtruderTrain.h" #include "FffProcessor.h" //To create a mesh group with if none is provided. +#include "PrimeTower/PrimeTower.h" #include "Slice.h" +#include "geometry/OpenPolyline.h" #include "infill/DensityProvider.h" // for destructor #include "infill/LightningGenerator.h" #include "infill/SierpinskiFillProvider.h" #include "infill/SubDivCube.h" // For the destructor #include "raft.h" +#include "utils/ExtrusionLine.h" #include "utils/math.h" //For PI. - namespace cura { @@ -32,12 +36,12 @@ SupportStorage::~SupportStorage() supportLayers.clear(); } -Polygons& SliceLayerPart::getOwnInfillArea() +Shape& SliceLayerPart::getOwnInfillArea() { - return const_cast(const_cast(this)->getOwnInfillArea()); + return const_cast(const_cast(this)->getOwnInfillArea()); } -const Polygons& SliceLayerPart::getOwnInfillArea() const +const Shape& SliceLayerPart::getOwnInfillArea() const { if (infill_area_own) { @@ -68,24 +72,24 @@ SliceLayer::~SliceLayer() { } -Polygons SliceLayer::getOutlines(bool external_polys_only) const +Shape SliceLayer::getOutlines(bool external_polys_only) const { - Polygons ret; + Shape ret; getOutlines(ret, external_polys_only); return ret; } -void SliceLayer::getOutlines(Polygons& result, bool external_polys_only) const +void SliceLayer::getOutlines(Shape& result, bool external_polys_only) const { for (const SliceLayerPart& part : parts) { if (external_polys_only) { - result.add(part.outline.outerPolygon()); + result.push_back(part.outline.outerPolygon()); } else { - result.add(part.print_outline); + result.push_back(part.print_outline); } } } @@ -172,7 +176,7 @@ bool SliceMeshStorage::getExtruderIsUsed(const size_t extruder_nr, const LayerIn } } if (settings.get("magic_mesh_surface_mode") != ESurfaceMode::NORMAL && settings.get("wall_0_extruder_nr").extruder_nr_ == extruder_nr - && layer.openPolyLines.size() > 0) + && layer.open_polylines.size() > 0) { return true; } @@ -266,9 +270,18 @@ SliceDataStorage::SliceDataStorage() machine_size.include(machine_max); } -Polygons - SliceDataStorage::getLayerOutlines(const LayerIndex layer_nr, const bool include_support, const bool include_prime_tower, const bool external_polys_only, const int extruder_nr) - const +SliceDataStorage::~SliceDataStorage() +{ + delete prime_tower_; +} + +Shape SliceDataStorage::getLayerOutlines( + const LayerIndex layer_nr, + const bool include_support, + const bool include_prime_tower, + const bool external_polys_only, + const int extruder_nr, + const bool include_models) const { const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; @@ -279,37 +292,37 @@ Polygons case Raft::LayerType::RaftInterface: case Raft::LayerType::RaftSurface: { - const Polygons* raftOutline; + const Shape* raftOutline; bool use_current_extruder_for_raft = extruder_nr == -1; switch (layer_type) { case Raft::LayerType::RaftBase: - raftOutline = &raftBaseOutline; + raftOutline = &raft_base_outline; use_current_extruder_for_raft |= extruder_nr == int(mesh_group_settings.get("raft_base_extruder_nr").extruder_nr_); break; case Raft::LayerType::RaftInterface: - raftOutline = &raftInterfaceOutline; + raftOutline = &raft_interface_outline; use_current_extruder_for_raft |= extruder_nr == int(mesh_group_settings.get("raft_interface_extruder_nr").extruder_nr_); break; case Raft::LayerType::RaftSurface: - raftOutline = &raftSurfaceOutline; + raftOutline = &raft_surface_outline; use_current_extruder_for_raft |= extruder_nr == int(mesh_group_settings.get("raft_surface_extruder_nr").extruder_nr_); break; default: assert(false && "unreachable due to outer switch statement"); - return Polygons(); + return Shape(); } if (include_support && use_current_extruder_for_raft) { if (external_polys_only) { - std::vector parts = raftOutline->splitIntoParts(); - Polygons result; - for (PolygonsPart& part : parts) + std::vector parts = raftOutline->splitIntoParts(); + Shape result; + for (SingleShape& part : parts) { - result.add(part.outerPolygon()); + result.push_back(part.outerPolygon()); } return result; } @@ -320,15 +333,15 @@ Polygons } else { - return Polygons(); + return Shape(); } break; } case Raft::LayerType::Airgap: case Raft::LayerType::Model: { - Polygons total; - if (layer_nr >= 0) + Shape total; + if (include_models && layer_nr >= 0) { for (const std::shared_ptr& mesh : meshes) { @@ -341,7 +354,7 @@ Polygons layer.getOutlines(total, external_polys_only); if (mesh->settings.get("magic_mesh_surface_mode") != ESurfaceMode::NORMAL) { - total = total.unionPolygons(layer.openPolyLines.offsetPolyLine(MM2INT(0.1))); + total = total.unionPolygons(layer.open_polylines.offset(MM2INT(0.1))); } } } @@ -352,26 +365,32 @@ Polygons { for (const SupportInfillPart& support_infill_part : support_layer.support_infill_parts) { - total.add(support_infill_part.outline_); + total.push_back(support_infill_part.outline_); } - total.add(support_layer.support_bottom); - total.add(support_layer.support_roof); + total.push_back(support_layer.support_bottom); + total.push_back(support_layer.support_roof); } } - int prime_tower_outer_extruder_nr = primeTower.extruder_order_[0]; - if (include_prime_tower && (extruder_nr == -1 || extruder_nr == prime_tower_outer_extruder_nr)) + if (include_prime_tower && prime_tower_) { - if (primeTower.enabled_) - { - total.add(primeTower.getOuterPoly(layer_nr)); - } + total.push_back(prime_tower_->getOccupiedOutline(layer_nr)); } return total; } default: assert(false && "unreachable as switch statement is exhaustive"); - return Polygons(); + return Shape(); + } +} + +AABB3D SliceDataStorage::getModelBoundingBox() const +{ + AABB3D bounding_box; + for (const auto& mesh : meshes) + { + bounding_box.include(mesh->bounding_box); } + return bounding_box; } std::vector SliceDataStorage::getExtrudersUsed() const @@ -482,8 +501,8 @@ std::vector SliceDataStorage::getExtrudersUsed(const LayerIndex layer_nr) } if (adhesion_type == EPlatformAdhesion::RAFT) { - const LayerIndex raft_layers = Raft::getTotalExtraLayers(); - if (layer_nr == -raft_layers) // Base layer. + const Raft::LayerType layer_type = Raft::getLayerType(layer_nr); + if (layer_type == Raft::RaftBase) { ret[mesh_group_settings.get("raft_base_extruder_nr").extruder_nr_] = true; // When using a raft, all prime blobs need to be on the lowest layer (the build plate). @@ -495,11 +514,11 @@ std::vector SliceDataStorage::getExtrudersUsed(const LayerIndex layer_nr) } } } - else if (layer_nr == -raft_layers + 1) // Interface layer. + else if (layer_type == Raft::RaftInterface) { ret[mesh_group_settings.get("raft_interface_extruder_nr").extruder_nr_] = true; } - else if (layer_nr < -static_cast(Raft::getFillerLayerCount())) // Any of the surface layers. + else if (layer_type == Raft::RaftSurface) { ret[mesh_group_settings.get("raft_surface_extruder_nr").extruder_nr_] = true; } @@ -564,13 +583,13 @@ bool SliceDataStorage::getExtruderPrimeBlobEnabled(const size_t extruder_nr) con return train.settings_.get("prime_blob_enable"); } -Polygons SliceDataStorage::getMachineBorder(int checking_extruder_nr) const +Shape SliceDataStorage::getMachineBorder(int checking_extruder_nr) const { const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; - Polygons border; + Shape border; border.emplace_back(); - PolygonRef outline = border.back(); + Polygon& outline = border.back(); switch (mesh_group_settings.get("machine_shape")) { case BuildPlateShape::ELLIPTIC: @@ -592,14 +611,14 @@ Polygons SliceDataStorage::getMachineBorder(int checking_extruder_nr) const break; } - Polygons disallowed_areas = mesh_group_settings.get("machine_disallowed_areas"); + Shape disallowed_areas = mesh_group_settings.get("machine_disallowed_areas"); disallowed_areas = disallowed_areas.unionPolygons(); // union overlapping disallowed areas // The disallowed areas are expressed in buildplate-centered coordinates, but the models // may be expressed in front-left-centered coordinantes, so in this case we need to translate them if (! mesh_group_settings.get("machine_center_is_zero")) { - for (PolygonRef poly : disallowed_areas) + for (Polygon& poly : disallowed_areas) { for (Point2LL& p : poly) { @@ -629,12 +648,11 @@ Polygons SliceDataStorage::getMachineBorder(int checking_extruder_nr) const } Point2LL translation(extruder_settings.get("machine_nozzle_offset_x"), extruder_settings.get("machine_nozzle_offset_y")); prime_pos -= translation; - Polygons prime_polygons; - prime_polygons.emplace_back(PolygonUtils::makeCircle(prime_pos, prime_clearance, std::numbers::pi / 32)); - disallowed_areas = disallowed_areas.unionPolygons(prime_polygons); + Polygon prime_polygon = PolygonUtils::makeDisc(prime_pos, prime_clearance, 64); + disallowed_areas = disallowed_areas.unionPolygons(prime_polygon); } - Polygons disallowed_all_extruders; + Shape disallowed_all_extruders; bool first = true; for (size_t extruder_nr = 0; extruder_nr < extruder_is_used.size(); extruder_nr++) { @@ -644,7 +662,7 @@ Polygons SliceDataStorage::getMachineBorder(int checking_extruder_nr) const } Settings& extruder_settings = Application::getInstance().current_slice_->scene.extruders[extruder_nr].settings_; Point2LL translation(extruder_settings.get("machine_nozzle_offset_x"), extruder_settings.get("machine_nozzle_offset_y")); - Polygons extruder_border = disallowed_areas; + Shape extruder_border = disallowed_areas; extruder_border.translate(translation); if (first) { @@ -656,9 +674,9 @@ Polygons SliceDataStorage::getMachineBorder(int checking_extruder_nr) const disallowed_all_extruders = disallowed_all_extruders.unionPolygons(extruder_border); } } - disallowed_all_extruders.processEvenOdd(ClipperLib::pftNonZero); // prevent overlapping disallowed areas from XORing + disallowed_all_extruders = disallowed_all_extruders.processEvenOdd(ClipperLib::pftNonZero); // prevent overlapping disallowed areas from XORing - Polygons border_all_extruders = border; // each extruders border areas must be limited to the global border, which is the union of all extruders borders + Shape border_all_extruders = border; // each extruders border areas must be limited to the global border, which is the union of all extruders borders if (mesh_group_settings.has("nozzle_offsetting_for_disallowed_areas") && mesh_group_settings.get("nozzle_offsetting_for_disallowed_areas")) { for (size_t extruder_nr = 0; extruder_nr < extruder_is_used.size(); extruder_nr++) @@ -678,7 +696,7 @@ Polygons SliceDataStorage::getMachineBorder(int checking_extruder_nr) const } Settings& other_extruder_settings = Application::getInstance().current_slice_->scene.extruders[other_extruder_nr].settings_; Point2LL other_translation(other_extruder_settings.get("machine_nozzle_offset_x"), other_extruder_settings.get("machine_nozzle_offset_y")); - Polygons translated_border = border; + Shape translated_border = border; translated_border.translate(translation - other_translation); border_all_extruders = border_all_extruders.intersection(translated_border); } @@ -689,8 +707,12 @@ Polygons SliceDataStorage::getMachineBorder(int checking_extruder_nr) const return border; } +void SliceDataStorage::initializePrimeTower() +{ + prime_tower_ = PrimeTower::createPrimeTower(*this); +} -void SupportLayer::excludeAreasFromSupportInfillAreas(const Polygons& exclude_polygons, const AABB& exclude_polygons_boundary_box) +void SupportLayer::excludeAreasFromSupportInfillAreas(const Shape& exclude_polygons, const AABB& exclude_polygons_boundary_box) { // record the indexes that need to be removed and do that after std::list to_remove_part_indices; // LIFO for removing @@ -706,7 +728,7 @@ void SupportLayer::excludeAreasFromSupportInfillAreas(const Polygons& exclude_po continue; } - Polygons result_polygons = support_infill_part.outline_.difference(exclude_polygons); + Shape result_polygons = support_infill_part.outline_.difference(exclude_polygons); // if no smaller parts get generated, this mean this part should be removed. if (result_polygons.empty()) @@ -715,7 +737,7 @@ void SupportLayer::excludeAreasFromSupportInfillAreas(const Polygons& exclude_po continue; } - std::vector smaller_support_islands = result_polygons.splitIntoParts(); + std::vector smaller_support_islands = result_polygons.splitIntoParts(); if (smaller_support_islands.empty()) { // extra safety guard in case result_polygons consists of too small polygons which are automatically removed in splitIntoParts @@ -730,7 +752,7 @@ void SupportLayer::excludeAreasFromSupportInfillAreas(const Polygons& exclude_po for (size_t support_island_idx = 1; support_island_idx < smaller_support_islands.size(); ++support_island_idx) { - const PolygonsPart& smaller_island = smaller_support_islands[support_island_idx]; + const SingleShape& smaller_island = smaller_support_islands[support_island_idx]; support_infill_parts.emplace_back(smaller_island, support_infill_part.support_line_width_, support_infill_part.inset_count_to_generate_); } } @@ -740,7 +762,10 @@ void SupportLayer::excludeAreasFromSupportInfillAreas(const Polygons& exclude_po { const size_t remove_idx = to_remove_part_indices.back(); to_remove_part_indices.pop_back(); - + if (support_infill_parts.empty()) + { + continue; + } if (remove_idx < support_infill_parts.size() - 1) { // move last element to the to-be-removed element so that we can erase the last place in the vector support_infill_parts[remove_idx] = std::move(support_infill_parts.back()); @@ -751,21 +776,35 @@ void SupportLayer::excludeAreasFromSupportInfillAreas(const Polygons& exclude_po void SupportLayer::fillInfillParts( const LayerIndex layer_nr, - const std::vector& support_fill_per_layer, + const std::vector& support_fill_per_layer, + const coord_t infill_layer_height, + const std::vector>& meshes, const coord_t support_line_width, const coord_t wall_line_count, const coord_t grow_layer_above /*has default 0*/, const bool unionAll /*has default false*/, const coord_t custom_line_distance /*has default 0*/) { - const Polygons& support_this_layer = support_fill_per_layer[layer_nr]; - const Polygons& support_layer_above - = (layer_nr + 1) >= support_fill_per_layer.size() || layer_nr <= 0 ? Polygons() : support_fill_per_layer[layer_nr + 1].offset(grow_layer_above); - const auto all_support_areas_in_layer = { support_this_layer.difference(support_layer_above), support_this_layer.intersection(support_layer_above) }; + // Find the model exactly z-distance above the support layer. + Shape overhang_z_dist_above; + for (const auto& mesh : meshes) + { + const coord_t mesh_z_distance_top = mesh->settings.get("support_top_distance"); + const size_t overhang_layer_nr = layer_nr + (mesh_z_distance_top / infill_layer_height) + 1; + if (overhang_layer_nr < mesh->overhang_areas.size()) + { + overhang_z_dist_above.push_back(mesh->overhang_areas[overhang_layer_nr]); + } + } + overhang_z_dist_above = overhang_z_dist_above.unionPolygons(); + + // Split the support outline into areas that are directly under the overhang and areas that are not. + const auto all_support_areas_in_layer + = { support_fill_per_layer[layer_nr].intersection(overhang_z_dist_above), support_fill_per_layer[layer_nr].difference(overhang_z_dist_above) }; bool use_fractional_config = true; for (auto& support_areas : all_support_areas_in_layer) { - for (const PolygonsPart& island_outline : support_areas.splitIntoParts(unionAll)) + for (const SingleShape& island_outline : support_areas.splitIntoParts(unionAll)) { support_infill_parts.emplace_back(island_outline, support_line_width, use_fractional_config, wall_line_count, custom_line_distance); } diff --git a/src/slicer.cpp b/src/slicer.cpp index 22040b1480..f66e2d40ec 100644 --- a/src/slicer.cpp +++ b/src/slicer.cpp @@ -1,18 +1,21 @@ -// Copyright (c) 2023 UltiMaker +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher #include "slicer.h" #include // remove_if +#include #include -#include #include #include #include "Application.h" #include "Slice.h" +#include "geometry/OpenPolyline.h" +#include "geometry/SingleShape.h" // Needed in order to call splitIntoParts() #include "plugins/slots.h" +#include "raft.h" #include "settings/AdaptiveLayerHeights.h" #include "settings/EnumSettings.h" #include "settings/types/LayerIndex.h" @@ -29,49 +32,49 @@ constexpr int largest_neglected_gap_first_phase = MM2INT(0.01); //!< distance be constexpr int largest_neglected_gap_second_phase = MM2INT(0.02); //!< distance between two line segments regarded as connected constexpr int max_stitch1 = MM2INT(10.0); //!< maximal distance stitched between open polylines to form polygons -void SlicerLayer::makeBasicPolygonLoops(Polygons& open_polylines) +void SlicerLayer::makeBasicPolygonLoops(OpenLinesSet& open_polylines) { - for (size_t start_segment_idx = 0; start_segment_idx < segments.size(); start_segment_idx++) + for (size_t start_segment_idx = 0; start_segment_idx < segments_.size(); start_segment_idx++) { - if (! segments[start_segment_idx].addedToPolygon) + if (! segments_[start_segment_idx].addedToPolygon) { makeBasicPolygonLoop(open_polylines, start_segment_idx); } } // Clear the segmentList to save memory, it is no longer needed after this point. - segments.clear(); + segments_.clear(); } -void SlicerLayer::makeBasicPolygonLoop(Polygons& open_polylines, const size_t start_segment_idx) +void SlicerLayer::makeBasicPolygonLoop(OpenLinesSet& open_polylines, const size_t start_segment_idx) { - Polygon poly; - poly.add(segments[start_segment_idx].start); + Polygon poly(true); + poly.push_back(segments_[start_segment_idx].start); for (int segment_idx = start_segment_idx; segment_idx != -1;) { - SlicerSegment& segment = segments[segment_idx]; - poly.add(segment.end); + SlicerSegment& segment = segments_[segment_idx]; + poly.push_back(segment.end); segment.addedToPolygon = true; segment_idx = getNextSegmentIdx(segment, start_segment_idx); if (segment_idx == static_cast(start_segment_idx)) { // polyon is closed - polygons.add(poly); + polygons_.push_back(std::move(poly)); return; } } // polygon couldn't be closed - open_polylines.add(poly); + open_polylines.emplace_back(std::move(poly.getPoints())); } int SlicerLayer::tryFaceNextSegmentIdx(const SlicerSegment& segment, const int face_idx, const size_t start_segment_idx) const { - decltype(face_idx_to_segment_idx.begin()) it; - auto it_end = face_idx_to_segment_idx.end(); - it = face_idx_to_segment_idx.find(face_idx); + decltype(face_idx_to_segment_idx_.begin()) it; + auto it_end = face_idx_to_segment_idx_.end(); + it = face_idx_to_segment_idx_.find(face_idx); if (it != it_end) { const int segment_idx = (*it).second; - Point2LL p1 = segments[segment_idx].start; + Point2LL p1 = segments_[segment_idx].start; Point2LL diff = segment.end - p1; if (shorterThen(diff, largest_neglected_gap_first_phase)) { @@ -79,7 +82,7 @@ int SlicerLayer::tryFaceNextSegmentIdx(const SlicerSegment& segment, const int f { return start_segment_idx; } - if (segments[segment_idx].addedToPolygon) + if (segments_[segment_idx].addedToPolygon) { return -1; } @@ -127,7 +130,7 @@ int SlicerLayer::getNextSegmentIdx(const SlicerSegment& segment, const size_t st return next_segment_idx; } -void SlicerLayer::connectOpenPolylines(Polygons& open_polylines) +void SlicerLayer::connectOpenPolylines(OpenLinesSet& open_polylines) { constexpr bool allow_reverse = false; // Search a bit fewer cells but at cost of covering more area. @@ -136,7 +139,7 @@ void SlicerLayer::connectOpenPolylines(Polygons& open_polylines) connectOpenPolylinesImpl(open_polylines, largest_neglected_gap_second_phase, cell_size, allow_reverse); } -void SlicerLayer::stitch(Polygons& open_polylines) +void SlicerLayer::stitch(OpenLinesSet& open_polylines) { bool allow_reverse = true; connectOpenPolylinesImpl(open_polylines, max_stitch1, max_stitch1, allow_reverse); @@ -188,7 +191,8 @@ bool SlicerLayer::PossibleStitch::operator<(const PossibleStitch& other) const return false; } -std::priority_queue SlicerLayer::findPossibleStitches(const Polygons& open_polylines, coord_t max_dist, coord_t cell_size, bool allow_reverse) const +std::priority_queue + SlicerLayer::findPossibleStitches(const OpenLinesSet& open_polylines, coord_t max_dist, coord_t cell_size, bool allow_reverse) const { std::priority_queue stitch_queue; @@ -223,7 +227,7 @@ std::priority_queue SlicerLayer::findPossibleStitch // insert the starts of the polylines). for (unsigned int polyline_0_idx = 0; polyline_0_idx < open_polylines.size(); polyline_0_idx++) { - ConstPolygonRef polyline_0 = open_polylines[polyline_0_idx]; + const OpenPolyline& polyline_0 = open_polylines[polyline_0_idx]; if (polyline_0.size() < 1) continue; @@ -239,7 +243,7 @@ std::priority_queue SlicerLayer::findPossibleStitch { for (unsigned int polyline_0_idx = 0; polyline_0_idx < open_polylines.size(); polyline_0_idx++) { - ConstPolygonRef polyline_0 = open_polylines[polyline_0_idx]; + const OpenPolyline& polyline_0 = open_polylines[polyline_0_idx]; if (polyline_0.size() < 1) continue; @@ -254,7 +258,7 @@ std::priority_queue SlicerLayer::findPossibleStitch // search for nearby end points for (unsigned int polyline_1_idx = 0; polyline_1_idx < open_polylines.size(); polyline_1_idx++) { - ConstPolygonRef polyline_1 = open_polylines[polyline_1_idx]; + const OpenPolyline& polyline_1 = open_polylines[polyline_1_idx]; if (polyline_1.size() < 1) continue; @@ -334,7 +338,7 @@ std::priority_queue SlicerLayer::findPossibleStitch return stitch_queue; } -void SlicerLayer::planPolylineStitch(const Polygons& open_polylines, Terminus& terminus_0, Terminus& terminus_1, bool reverse[2]) const +void SlicerLayer::planPolylineStitch(const OpenLinesSet& open_polylines, Terminus& terminus_0, Terminus& terminus_1, bool reverse[2]) const { size_t polyline_0_idx = terminus_0.getPolylineIdx(); size_t polyline_1_idx = terminus_1.getPolylineIdx(); @@ -383,7 +387,7 @@ void SlicerLayer::planPolylineStitch(const Polygons& open_polylines, Terminus& t } } -void SlicerLayer::joinPolylines(PolygonRef& polyline_0, PolygonRef& polyline_1, const bool reverse[2]) const +void SlicerLayer::joinPolylines(OpenPolyline& polyline_0, OpenPolyline& polyline_1, const bool reverse[2]) { if (reverse[0]) { @@ -398,13 +402,13 @@ void SlicerLayer::joinPolylines(PolygonRef& polyline_0, PolygonRef& polyline_1, { // reverse polyline_1 by adding in reverse order for (int poly_idx = polyline_1.size() - 1; poly_idx >= 0; poly_idx--) - polyline_0.add(polyline_1[poly_idx]); + polyline_0.push_back(polyline_1[poly_idx]); } else { // append polyline_1 onto polyline_0 for (Point2LL& p : polyline_1) - polyline_0.add(p); + polyline_0.push_back(p); } polyline_1.clear(); } @@ -450,7 +454,7 @@ void SlicerLayer::TerminusTrackingMap::updateMap( } } -void SlicerLayer::connectOpenPolylinesImpl(Polygons& open_polylines, coord_t max_dist, coord_t cell_size, bool allow_reverse) +void SlicerLayer::connectOpenPolylinesImpl(OpenLinesSet& open_polylines, coord_t max_dist, coord_t cell_size, bool allow_reverse) { // below code closes smallest gaps first @@ -490,9 +494,8 @@ void SlicerLayer::connectOpenPolylinesImpl(Polygons& open_polylines, coord_t max if (completed_poly) { // finished polygon - PolygonRef polyline_0 = open_polylines[best_polyline_0_idx]; - polygons.add(polyline_0); - polyline_0.clear(); + OpenPolyline& polyline_0 = open_polylines[best_polyline_0_idx]; + polygons_.push_back(Polygon(std::move(polyline_0.getPoints()), true)); // Will also clear the polyline Terminus cur_terms[2] = { { best_polyline_0_idx, false }, { best_polyline_0_idx, true } }; for (size_t idx = 0U; idx != 2U; ++idx) { @@ -510,8 +513,8 @@ void SlicerLayer::connectOpenPolylinesImpl(Polygons& open_polylines, coord_t max // need to reread since planPolylineStitch can swap terminus_0/1 best_polyline_0_idx = terminus_0.getPolylineIdx(); best_polyline_1_idx = terminus_1.getPolylineIdx(); - PolygonRef polyline_0 = open_polylines[best_polyline_0_idx]; - PolygonRef polyline_1 = open_polylines[best_polyline_1_idx]; + OpenPolyline& polyline_0 = open_polylines[best_polyline_0_idx]; + OpenPolyline& polyline_1 = open_polylines[best_polyline_1_idx]; // join polylines according to plan joinPolylines(polyline_0, polyline_1, reverse); @@ -533,7 +536,7 @@ void SlicerLayer::connectOpenPolylinesImpl(Polygons& open_polylines, coord_t max } } -void SlicerLayer::stitch_extensive(Polygons& open_polylines) +void SlicerLayer::stitch_extensive(OpenLinesSet& open_polylines) { // For extensive stitching find 2 open polygons that are touching 2 closed polygons. // Then find the shortest path over this polygon that can be used to connect the open polygons, @@ -548,7 +551,7 @@ void SlicerLayer::stitch_extensive(Polygons& open_polylines) for (unsigned int polyline_1_idx = 0; polyline_1_idx < open_polylines.size(); polyline_1_idx++) { - PolygonRef polyline_1 = open_polylines[polyline_1_idx]; + OpenPolyline& polyline_1 = open_polylines[polyline_1_idx]; if (polyline_1.size() < 1) continue; @@ -564,7 +567,7 @@ void SlicerLayer::stitch_extensive(Polygons& open_polylines) for (unsigned int polyline_2_idx = 0; polyline_2_idx < open_polylines.size(); polyline_2_idx++) { - PolygonRef polyline_2 = open_polylines[polyline_2_idx]; + OpenPolyline& polyline_2 = open_polylines[polyline_2_idx]; if (polyline_2.size() < 1 || polyline_1_idx == polyline_2_idx) continue; @@ -584,24 +587,24 @@ void SlicerLayer::stitch_extensive(Polygons& open_polylines) { if (best_result->pointIdxA == best_result->pointIdxB) { - polygons.add(open_polylines[best_polyline_1_idx]); + polygons_.push_back(Polygon(open_polylines[best_polyline_1_idx].getPoints(), true)); open_polylines[best_polyline_1_idx].clear(); } else if (best_result->AtoB) { - PolygonRef poly = polygons.newPoly(); - for (unsigned int j = best_result->pointIdxA; j != best_result->pointIdxB; j = (j + 1) % polygons[best_result->polygonIdx].size()) - poly.add(polygons[best_result->polygonIdx][j]); + Polygon& poly = polygons_.newLine(); + for (unsigned int j = best_result->pointIdxA; j != best_result->pointIdxB; j = (j + 1) % polygons_[best_result->polygonIdx].size()) + poly.push_back(polygons_[best_result->polygonIdx][j]); for (unsigned int j = open_polylines[best_polyline_1_idx].size() - 1; int(j) >= 0; j--) - poly.add(open_polylines[best_polyline_1_idx][j]); + poly.push_back(open_polylines[best_polyline_1_idx][j]); open_polylines[best_polyline_1_idx].clear(); } else { - unsigned int n = polygons.size(); - polygons.add(open_polylines[best_polyline_1_idx]); - for (unsigned int j = best_result->pointIdxB; j != best_result->pointIdxA; j = (j + 1) % polygons[best_result->polygonIdx].size()) - polygons[n].add(polygons[best_result->polygonIdx][j]); + unsigned int n = polygons_.size(); + polygons_.push_back(Polygon(open_polylines[best_polyline_1_idx].getPoints(), true)); + for (unsigned int j = best_result->pointIdxB; j != best_result->pointIdxA; j = (j + 1) % polygons_[best_result->polygonIdx].size()) + polygons_[n].push_back(polygons_[best_result->polygonIdx][j]); open_polylines[best_polyline_1_idx].clear(); } } @@ -610,26 +613,26 @@ void SlicerLayer::stitch_extensive(Polygons& open_polylines) if (best_result->pointIdxA == best_result->pointIdxB) { for (unsigned int n = 0; n < open_polylines[best_polyline_1_idx].size(); n++) - open_polylines[best_polyline_2_idx].add(open_polylines[best_polyline_1_idx][n]); + open_polylines[best_polyline_2_idx].push_back(open_polylines[best_polyline_1_idx][n]); open_polylines[best_polyline_1_idx].clear(); } else if (best_result->AtoB) { Polygon poly; - for (unsigned int n = best_result->pointIdxA; n != best_result->pointIdxB; n = (n + 1) % polygons[best_result->polygonIdx].size()) - poly.add(polygons[best_result->polygonIdx][n]); + for (unsigned int n = best_result->pointIdxA; n != best_result->pointIdxB; n = (n + 1) % polygons_[best_result->polygonIdx].size()) + poly.push_back(polygons_[best_result->polygonIdx][n]); for (unsigned int n = poly.size() - 1; int(n) >= 0; n--) - open_polylines[best_polyline_2_idx].add(poly[n]); + open_polylines[best_polyline_2_idx].push_back(poly[n]); for (unsigned int n = 0; n < open_polylines[best_polyline_1_idx].size(); n++) - open_polylines[best_polyline_2_idx].add(open_polylines[best_polyline_1_idx][n]); + open_polylines[best_polyline_2_idx].push_back(open_polylines[best_polyline_1_idx][n]); open_polylines[best_polyline_1_idx].clear(); } else { - for (unsigned int n = best_result->pointIdxB; n != best_result->pointIdxA; n = (n + 1) % polygons[best_result->polygonIdx].size()) - open_polylines[best_polyline_2_idx].add(polygons[best_result->polygonIdx][n]); + for (unsigned int n = best_result->pointIdxB; n != best_result->pointIdxA; n = (n + 1) % polygons_[best_result->polygonIdx].size()) + open_polylines[best_polyline_2_idx].push_back(polygons_[best_result->polygonIdx][n]); for (unsigned int n = open_polylines[best_polyline_1_idx].size() - 1; int(n) >= 0; n--) - open_polylines[best_polyline_2_idx].add(open_polylines[best_polyline_1_idx][n]); + open_polylines[best_polyline_2_idx].push_back(open_polylines[best_polyline_1_idx][n]); open_polylines[best_polyline_1_idx].clear(); } } @@ -664,21 +667,21 @@ std::optional SlicerLayer::findPolygonGapCloser(Point2LL ip0, P else { // Find out if we have should go from A to B or the other way around. - Point2LL p0 = polygons[ret.polygonIdx][ret.pointIdxA]; + Point2LL p0 = polygons_[ret.polygonIdx][ret.pointIdxA]; int64_t lenA = vSize(p0 - ip0); - for (unsigned int i = ret.pointIdxA; i != ret.pointIdxB; i = (i + 1) % polygons[ret.polygonIdx].size()) + for (unsigned int i = ret.pointIdxA; i != ret.pointIdxB; i = (i + 1) % polygons_[ret.polygonIdx].size()) { - Point2LL p1 = polygons[ret.polygonIdx][i]; + Point2LL p1 = polygons_[ret.polygonIdx][i]; lenA += vSize(p0 - p1); p0 = p1; } lenA += vSize(p0 - ip1); - p0 = polygons[ret.polygonIdx][ret.pointIdxB]; + p0 = polygons_[ret.polygonIdx][ret.pointIdxB]; int64_t lenB = vSize(p0 - ip1); - for (unsigned int i = ret.pointIdxB; i != ret.pointIdxA; i = (i + 1) % polygons[ret.polygonIdx].size()) + for (unsigned int i = ret.pointIdxB; i != ret.pointIdxA; i = (i + 1) % polygons_[ret.polygonIdx].size()) { - Point2LL p1 = polygons[ret.polygonIdx][i]; + Point2LL p1 = polygons_[ret.polygonIdx][i]; lenB += vSize(p0 - p1); p0 = p1; } @@ -700,12 +703,12 @@ std::optional SlicerLayer::findPolygonGapCloser(Point2LL ip0, P std::optional SlicerLayer::findPolygonPointClosestTo(Point2LL input) { - for (size_t n = 0; n < polygons.size(); n++) + for (size_t n = 0; n < polygons_.size(); n++) { - Point2LL p0 = polygons[n][polygons[n].size() - 1]; - for (size_t i = 0; i < polygons[n].size(); i++) + Point2LL p0 = polygons_[n][polygons_[n].size() - 1]; + for (size_t i = 0; i < polygons_[n].size(); i++) { - Point2LL p1 = polygons[n][i]; + Point2LL p1 = polygons_[n][i]; // Q = A + Normal( B - A ) * ((( B - A ) dot ( P - A )) / VSize( A - B )); Point2LL pDiff = p1 - p0; @@ -734,7 +737,7 @@ std::optional SlicerLayer::findPolygonPointClosestTo(Point2L void SlicerLayer::makePolygons(const Mesh* mesh) { - Polygons open_polylines; + OpenLinesSet open_polylines; makeBasicPolygonLoops(open_polylines); @@ -756,52 +759,43 @@ void SlicerLayer::makePolygons(const Mesh* mesh) if (mesh->settings_.get("meshfix_keep_open_polygons")) { - for (PolygonRef polyline : open_polylines) + for (const OpenPolyline& polyline : open_polylines) { - if (polyline.size() > 0) - polygons.add(polyline); + polygons_.push_back(Polygon(polyline.getPoints(), false), CheckNonEmptyParam::OnlyIfNotEmpty); } } - for (PolygonRef polyline : open_polylines) + for (const OpenPolyline& polyline : open_polylines) { - if (polyline.size() > 0) - { - openPolylines.add(polyline); - } + open_polylines_.push_back(std::move(polyline), CheckNonEmptyParam::OnlyIfNotEmpty); } // Remove all the tiny polygons, or polygons that are not closed. As they do not contribute to the actual print. const coord_t snap_distance = std::max(mesh->settings_.get("minimum_polygon_circumference"), static_cast(1)); - auto it = std::remove_if( - polygons.begin(), - polygons.end(), - [snap_distance](PolygonRef poly) + auto itPolygons = std::remove_if( + polygons_.begin(), + polygons_.end(), + [snap_distance](const Polygon& poly) { return poly.shorterThan(snap_distance); }); - polygons.erase(it, polygons.end()); + polygons_.erase(itPolygons, polygons_.end()); // Finally optimize all the polygons. Every point removed saves time in the long run. - // polygons = Simplify(mesh->settings).polygon(polygons); - polygons = slots::instance().modify( - polygons, - mesh->settings_.get("meshfix_maximum_resolution"), - mesh->settings_.get("meshfix_maximum_deviation"), - static_cast(mesh->settings_.get("meshfix_maximum_extrusion_area_deviation"))); - polygons.removeDegenerateVerts(); // remove verts connected to overlapping line segments + polygons_ = Simplify(mesh->settings_).polygon(polygons_); + polygons_.removeDegenerateVerts(); // remove verts connected to overlapping line segments // Clean up polylines for Surface Mode printing - it = std::remove_if( - openPolylines.begin(), - openPolylines.end(), - [snap_distance](PolygonRef poly) + auto itPolylines = std::remove_if( + open_polylines_.begin(), + open_polylines_.end(), + [snap_distance](const OpenPolyline& line) { - return poly.shorterThan(snap_distance); + return line.shorterThan(snap_distance); }); - openPolylines.erase(it, openPolylines.end()); + open_polylines_.erase(itPolylines, open_polylines_.end()); - openPolylines.removeDegenerateVertsPolyline(); + open_polylines_.removeDegenerateVerts(); } Slicer::Slicer(Mesh* i_mesh, const coord_t thickness, const size_t slice_layer_count, bool use_variable_layer_heights, std::vector* adaptive_layers) @@ -824,7 +818,8 @@ Slicer::Slicer(Mesh* i_mesh, const coord_t thickness, const size_t slice_layer_c mesh->settings_.get("raft_interface_thickness"), mesh->settings_.get("raft_base_thickness"), mesh->settings_.get("raft_airgap"), - mesh->settings_.get("layer_0_z_overlap")); + mesh->settings_.get("layer_0_z_overlap"), + Raft::getFillerLayerCount()); std::vector> zbbox = buildZHeightsForFaces(*mesh); @@ -844,8 +839,8 @@ void Slicer::buildSegments(const Mesh& mesh, const std::vector Slicer::buildLayersWithHeight( layers_res.resize(slice_layer_count); // set (and initialize compensation for) initial layer, depending on slicing mode - layers_res[0].z = slicing_tolerance == SlicingTolerance::INCLUSIVE ? 0 : std::max(0LL, initial_layer_thickness - thickness); + layers_res[0].z_ = slicing_tolerance == SlicingTolerance::INCLUSIVE ? 0 : std::max(0LL, initial_layer_thickness - thickness); coord_t adjusted_layer_offset = initial_layer_thickness; if (use_variable_layer_heights) { - layers_res[0].z = (*adaptive_layers)[0].z_position_; + layers_res[0].z_ = (*adaptive_layers)[0].z_position_; } else if (slicing_tolerance == SlicingTolerance::MIDDLE) { - layers_res[0].z = initial_layer_thickness / 2; + layers_res[0].z_ = initial_layer_thickness / 2; adjusted_layer_offset = initial_layer_thickness + (thickness / 2); } @@ -999,11 +994,11 @@ std::vector Slicer::buildLayersWithHeight( { if (use_variable_layer_heights) { - layers_res[layer_nr].z = (*adaptive_layers)[layer_nr].z_position_; + layers_res[layer_nr].z_ = (*adaptive_layers)[layer_nr].z_position_; } else { - layers_res[layer_nr].z = adjusted_layer_offset + (thickness * (layer_nr - 1)); + layers_res[layer_nr].z_ = adjusted_layer_offset + (thickness * (layer_nr - 1)); } } @@ -1024,15 +1019,15 @@ void Slicer::makePolygons(Mesh& mesh, SlicingTolerance slicing_tolerance, std::v case SlicingTolerance::INCLUSIVE: for (LayerIndex layer_nr = 0; layer_nr + 1 < layers.size(); layer_nr++) { - layers[layer_nr].polygons = layers[layer_nr].polygons.unionPolygons(layers[layer_nr + 1].polygons); + layers[layer_nr].polygons_ = layers[layer_nr].polygons_.unionPolygons(layers[layer_nr + 1].polygons_); } break; case SlicingTolerance::EXCLUSIVE: for (LayerIndex layer_nr = 0; layer_nr + 1 < layers.size(); layer_nr++) { - layers[layer_nr].polygons = layers[layer_nr].polygons.intersection(layers[layer_nr + 1].polygons); + layers[layer_nr].polygons_ = layers[layer_nr].polygons_.intersection(layers[layer_nr + 1].polygons_); } - layers.back().polygons.clear(); + layers.back().polygons_.clear(); break; case SlicingTolerance::MIDDLE: default: @@ -1041,7 +1036,7 @@ void Slicer::makePolygons(Mesh& mesh, SlicingTolerance slicing_tolerance, std::v } size_t layer_apply_initial_xy_offset = 0; - if (layers.size() > 0 && layers[0].polygons.size() == 0 && ! mesh.settings_.get("support_mesh") && ! mesh.settings_.get("anti_overhang_mesh") + if (layers.size() > 0 && layers[0].polygons_.size() == 0 && ! mesh.settings_.get("support_mesh") && ! mesh.settings_.get("anti_overhang_mesh") && ! mesh.settings_.get("cutting_mesh") && ! mesh.settings_.get("infill_mesh")) { layer_apply_initial_xy_offset = 1; @@ -1063,18 +1058,18 @@ void Slicer::makePolygons(Mesh& mesh, SlicingTolerance slicing_tolerance, std::v const auto xy_offset_local = (layer_nr <= layer_apply_initial_xy_offset) ? xy_offset_0 : xy_offset; if (xy_offset_local != 0) { - layers[layer_nr].polygons = layers[layer_nr].polygons.offset(xy_offset_local, ClipperLib::JoinType::jtRound); + layers[layer_nr].polygons_ = layers[layer_nr].polygons_.offset(xy_offset_local, ClipperLib::JoinType::jtRound); } if (xy_offset_hole != 0) { - const auto parts = layers[layer_nr].polygons.splitIntoParts(); - layers[layer_nr].polygons.clear(); + const auto parts = layers[layer_nr].polygons_.splitIntoParts(); + layers[layer_nr].polygons_.clear(); for (const auto& part : parts) { - Polygons holes; - Polygons outline; - for (ConstPolygonRef poly : part) + Shape holes; + Shape outline; + for (const Polygon& poly : part) { const auto area = poly.area(); const auto abs_area = std::abs(area); @@ -1083,25 +1078,25 @@ void Slicer::makePolygons(Mesh& mesh, SlicingTolerance slicing_tolerance, std::v { if (hole_offset_max_diameter == 0) { - holes.add(poly.offset(xy_offset_hole)); + holes.push_back(poly.offset(xy_offset_hole)); } else if (abs_area < max_hole_area) { const auto distance = static_cast(std::lerp(xy_offset_hole, 0, abs_area / max_hole_area)); - holes.add(poly.offset(distance)); + holes.push_back(poly.offset(distance)); } else { - holes.add(poly); + holes.push_back(poly); } } else { - outline.add(poly); + outline.push_back(poly); } } - layers[layer_nr].polygons.add(outline.difference(holes.unionPolygons())); + layers[layer_nr].polygons_.push_back(outline.difference(holes.unionPolygons())); } } }); diff --git a/src/support.cpp b/src/support.cpp index 09aff457c7..17a55d855a 100644 --- a/src/support.cpp +++ b/src/support.cpp @@ -35,6 +35,7 @@ #include "slicer.h" #include "utils/Simplify.h" #include "utils/ThreadPool.h" +#include "utils/linearAlg2D.h" #include "utils/math.h" namespace cura @@ -61,13 +62,13 @@ bool AreaSupport::handleSupportModifierMesh(SliceDataStorage& storage, const Set switch (modifier_type) { case ANTI_OVERHANG: - support_layer.anti_overhang.add(slicer_layer.polygons); + support_layer.anti_overhang.push_back(slicer_layer.polygons_); break; case SUPPORT_DROP_DOWN: - support_layer.support_mesh_drop_down.add(slicer_layer.polygons); + support_layer.support_mesh_drop_down.push_back(slicer_layer.polygons_); break; case SUPPORT_VANILLA: - support_layer.support_mesh.add(slicer_layer.polygons); + support_layer.support_mesh.push_back(slicer_layer.polygons_); break; } } @@ -75,10 +76,7 @@ bool AreaSupport::handleSupportModifierMesh(SliceDataStorage& storage, const Set } -void AreaSupport::splitGlobalSupportAreasIntoSupportInfillParts( - SliceDataStorage& storage, - const std::vector& global_support_areas_per_layer, - unsigned int total_layer_count) +void AreaSupport::splitGlobalSupportAreasIntoSupportInfillParts(SliceDataStorage& storage, const std::vector& global_support_areas_per_layer, unsigned int total_layer_count) { if (total_layer_count == 0) { @@ -105,7 +103,7 @@ void AreaSupport::splitGlobalSupportAreasIntoSupportInfillParts( wall_line_count_this_layer++; } - const Polygons& global_support_areas = global_support_areas_per_layer[layer_nr]; + const Shape& global_support_areas = global_support_areas_per_layer[layer_nr]; if (global_support_areas.size() == 0 || layer_nr < min_layer || layer_nr > max_layer) { // Initialize support_infill_parts empty @@ -120,7 +118,9 @@ void AreaSupport::splitGlobalSupportAreasIntoSupportInfillParts( } // We don't generate insets and infill area for the parts yet because later the skirt/brim and prime // tower will remove themselves from the support, so the outlines of the parts can be changed. - storage.support.supportLayers[layer_nr].fillInfillParts(layer_nr, global_support_areas_per_layer, support_line_width_here, wall_line_count_this_layer); + const coord_t layer_height = infill_extruder.settings_.get("layer_height"); + storage.support.supportLayers[layer_nr] + .fillInfillParts(layer_nr, global_support_areas_per_layer, layer_height, storage.meshes, support_line_width_here, wall_line_count_this_layer); } } @@ -185,6 +185,8 @@ void AreaSupport::generateGradualSupport(SliceDataStorage& storage) const size_t max_density_steps = infill_extruder.settings_.get("gradual_support_infill_steps"); const coord_t wall_width = infill_extruder.settings_.get("support_line_width"); + const bool is_connected = infill_extruder.settings_.get("zig_zaggify_infill") || infill_extruder.settings_.get("infill_pattern") == EFillMethod::ZIG_ZAG; + const Simplify simplifier(infill_extruder.settings_); // no early-out for this function; it needs to initialize the [infill_area_per_combine_per_density] double layer_skip_count{ 8.0 }; // skip every so many layers as to ignore small gaps in the model making computation more easy @@ -213,25 +215,25 @@ void AreaSupport::generateGradualSupport(SliceDataStorage& storage) { SupportInfillPart& support_infill_part = support_infill_parts[part_idx]; - Polygons original_area = support_infill_part.getInfillArea(); + Shape original_area = support_infill_part.getInfillArea(); if (original_area.empty()) { continue; } // NOTE: This both generates the walls _and_ returns the _actual_ infill area (the one _without_ walls) for use in the rest of the method. - const Polygons infill_area = Infill::generateWallToolPaths( + const Shape infill_area = Infill::generateWallToolPaths( support_infill_part.wall_toolpaths_, original_area, support_infill_part.inset_count_to_generate_, wall_width, - 0, infill_extruder.settings_, layer_nr, SectionType::SUPPORT); const AABB& this_part_boundary_box = support_infill_part.outline_boundary_box_; // calculate density areas for this island - Polygons less_dense_support = infill_area; // one step less dense with each density_step + Shape less_dense_support = infill_area; // one step less dense with each density_step + Shape sum_more_dense; // NOTE: Only used for zig-zag or connected fills. for (unsigned int density_step = 0; density_step < max_density_steps; ++density_step) { LayerIndex actual_min_layer{ layer_nr + density_step * gradual_support_step_layer_count + static_cast(layer_skip_count) }; @@ -247,7 +249,7 @@ void AreaSupport::generateGradualSupport(SliceDataStorage& storage) // compute intersections with relevant upper parts const std::vector upper_infill_parts = storage.support.supportLayers[upper_layer_idx].support_infill_parts; - Polygons relevant_upper_polygons; + Shape relevant_upper_polygons; for (unsigned int upper_part_idx = 0; upper_part_idx < upper_infill_parts.size(); ++upper_part_idx) { if (support_infill_part.outline_.empty()) @@ -275,7 +277,7 @@ void AreaSupport::generateGradualSupport(SliceDataStorage& storage) // if (upper_part_boundary_box.hit(this_part_boundary_box)) { - relevant_upper_polygons.add(upper_infill_parts[upper_part_idx].outline_); + relevant_upper_polygons.push_back(upper_infill_parts[upper_part_idx].outline_); } } @@ -288,14 +290,18 @@ void AreaSupport::generateGradualSupport(SliceDataStorage& storage) // add new infill_area_per_combine_per_density for the current density support_infill_part.infill_area_per_combine_per_density_.emplace_back(); - std::vector& support_area_current_density = support_infill_part.infill_area_per_combine_per_density_.back(); - const Polygons more_dense_support = infill_area.difference(less_dense_support); - support_area_current_density.push_back(more_dense_support); + std::vector& support_area_current_density = support_infill_part.infill_area_per_combine_per_density_.back(); + const Shape more_dense_support = infill_area.difference(less_dense_support); + support_area_current_density.push_back(simplifier.polygon(more_dense_support.difference(sum_more_dense))); + if (is_connected) + { + sum_more_dense = sum_more_dense.unionPolygons(more_dense_support); + } } support_infill_part.infill_area_per_combine_per_density_.emplace_back(); - std::vector& support_area_current_density = support_infill_part.infill_area_per_combine_per_density_.back(); - support_area_current_density.push_back(infill_area); + std::vector& support_area_current_density = support_infill_part.infill_area_per_combine_per_density_.back(); + support_area_current_density.push_back(simplifier.polygon(infill_area.difference(sum_more_dense))); assert(support_infill_part.infill_area_per_combine_per_density_.size() != 0 && "support_infill_part.infill_area_per_combine_per_density should now be initialized"); #ifdef DEBUG @@ -363,8 +369,8 @@ void AreaSupport::combineSupportInfillLayers(SliceDataStorage& storage) } for (unsigned int density_idx = 0; density_idx < part.infill_area_per_combine_per_density_.size(); ++density_idx) { // go over each density of gradual infill (these density areas overlap!) - std::vector& infill_area_per_combine = part.infill_area_per_combine_per_density_[density_idx]; - Polygons result; + std::vector& infill_area_per_combine = part.infill_area_per_combine_per_density_[density_idx]; + Shape result; for (SupportInfillPart& lower_layer_part : lower_layer.support_infill_parts) { if (! part.outline_boundary_box_.hit(lower_layer_part.outline_boundary_box_)) @@ -372,13 +378,13 @@ void AreaSupport::combineSupportInfillLayers(SliceDataStorage& storage) continue; } - Polygons intersection = infill_area_per_combine[combine_count_here - 1].intersection(lower_layer_part.getInfillArea()).offset(-200).offset(200); + Shape intersection = infill_area_per_combine[combine_count_here - 1].intersection(lower_layer_part.getInfillArea()).offset(-200).offset(200); if (intersection.size() <= 0) { continue; } - result.add(intersection); // add area to be thickened + result.push_back(intersection); // add area to be thickened infill_area_per_combine[combine_count_here - 1] = infill_area_per_combine[combine_count_here - 1].difference(intersection); // remove thickened area from less thick layer here @@ -399,7 +405,7 @@ void AreaSupport::combineSupportInfillLayers(SliceDataStorage& storage) lower_density_idx <= max_lower_density_idx && lower_density_idx < lower_layer_part.infill_area_per_combine_per_density_.size(); lower_density_idx++) { - std::vector& lower_infill_area_per_combine = lower_layer_part.infill_area_per_combine_per_density_[lower_density_idx]; + std::vector& lower_infill_area_per_combine = lower_layer_part.infill_area_per_combine_per_density_[lower_density_idx]; lower_infill_area_per_combine[0] = lower_infill_area_per_combine[0].difference(intersection); // remove thickened area from lower (single thickness) layer } @@ -428,9 +434,9 @@ void AreaSupport::cleanup(SliceDataStorage& storage) } else { - for (const std::vector& infill_area_per_combine_this_density : part.infill_area_per_combine_per_density_) + for (const std::vector& infill_area_per_combine_this_density : part.infill_area_per_combine_per_density_) { - for (const Polygons& infill_area_this_combine_this_density : infill_area_per_combine_this_density) + for (const Shape& infill_area_this_combine_this_density : infill_area_per_combine_this_density) { // remove small areas which were introduced by rounding errors in comparing the same area on two consecutive layer if (! infill_area_this_combine_this_density.empty() && infill_area_this_combine_this_density.area() > support_line_width * support_line_width) @@ -455,9 +461,9 @@ void AreaSupport::cleanup(SliceDataStorage& storage) } } -Polygons AreaSupport::join(const SliceDataStorage& storage, const Polygons& supportLayer_up, Polygons& supportLayer_this) +Shape AreaSupport::join(const SliceDataStorage& storage, const Shape& supportLayer_up, Shape& supportLayer_this) { - Polygons joined; + Shape joined; const Settings& infill_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("support_infill_extruder_nr").settings_; const AngleRadians conical_support_angle = infill_settings.get("support_conical_angle"); @@ -465,18 +471,18 @@ Polygons AreaSupport::join(const SliceDataStorage& storage, const Polygons& supp coord_t conical_support_offset; if (conical_support_angle > 0) { // outward ==> wider base than overhang - conical_support_offset = -(tan(conical_support_angle) - 0.01) * layer_thickness; + conical_support_offset = -boundedTan(conical_support_angle) * layer_thickness; } else { // inward ==> smaller base than overhang - conical_support_offset = (tan(-conical_support_angle) - 0.01) * layer_thickness; + conical_support_offset = boundedTan(-conical_support_angle) * layer_thickness; } const bool conical_support = infill_settings.get("support_conical_enabled") && conical_support_angle != 0; if (conical_support) { const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; // Don't go outside the build volume. - Polygons machine_volume_border; + Shape machine_volume_border; switch (mesh_group_settings.get("machine_shape")) { case BuildPlateShape::ELLIPTIC: @@ -494,12 +500,12 @@ Polygons AreaSupport::join(const SliceDataStorage& storage, const Polygons& supp const coord_t y = machine_middle.y_ + sin(angle) * depth / 2; border_circle.emplace_back(x, y); } - machine_volume_border.add(border_circle); + machine_volume_border.push_back(border_circle); break; } case BuildPlateShape::RECTANGULAR: default: - machine_volume_border.add(storage.machine_size.flatten().toPolygon()); + machine_volume_border.push_back(storage.machine_size.flatten().toPolygon()); break; } coord_t adhesion_size = 0; // Make sure there is enough room for the platform adhesion around support. @@ -554,8 +560,8 @@ Polygons AreaSupport::join(const SliceDataStorage& storage, const Polygons& supp machine_volume_border = machine_volume_border.offset(-adhesion_size); const coord_t conical_smallest_breadth = infill_settings.get("support_conical_min_width"); - Polygons insetted = supportLayer_up.offset(-conical_smallest_breadth / 2); - Polygons small_parts = supportLayer_up.difference(insetted.offset(conical_smallest_breadth / 2 + 20)); + Shape insetted = supportLayer_up.offset(-conical_smallest_breadth / 2); + Shape small_parts = supportLayer_up.difference(insetted.offset(conical_smallest_breadth / 2 + 20)); joined = supportLayer_this.unionPolygons(supportLayer_up.offset(conical_support_offset)).unionPolygons(small_parts).intersection(machine_volume_border); } else @@ -601,7 +607,7 @@ void AreaSupport::generateOverhangAreas(SliceDataStorage& storage) void AreaSupport::generateSupportAreas(SliceDataStorage& storage) { - std::vector global_support_areas_per_layer; + std::vector global_support_areas_per_layer; global_support_areas_per_layer.resize(storage.print_layer_count); int max_layer_nr_support_mesh_filled; @@ -664,17 +670,17 @@ void AreaSupport::generateSupportAreas(SliceDataStorage& storage) support_meshes_handled = true; } } - std::vector mesh_support_areas_per_layer; - mesh_support_areas_per_layer.resize(storage.print_layer_count, Polygons()); + std::vector mesh_support_areas_per_layer; + mesh_support_areas_per_layer.resize(storage.print_layer_count, Shape()); generateSupportAreasForMesh(storage, *infill_settings, *roof_settings, *bottom_settings, mesh_idx, storage.print_layer_count, mesh_support_areas_per_layer); for (size_t layer_idx = 0; layer_idx < storage.print_layer_count; layer_idx++) { - global_support_areas_per_layer[layer_idx].add(mesh_support_areas_per_layer[layer_idx]); + global_support_areas_per_layer[layer_idx].push_back(mesh_support_areas_per_layer[layer_idx]); } } - for (Polygons& support_areas : global_support_areas_per_layer) + for (Shape& support_areas : global_support_areas_per_layer) { support_areas = support_areas.unionPolygons(); } @@ -800,7 +806,7 @@ void AreaSupport::generateOverhangAreasForMesh(SliceDataStorage& storage, SliceM storage.print_layer_count, [&](const size_t layer_idx) { - std::pair basic_and_full_overhang = computeBasicAndFullOverhang(storage, mesh, layer_idx); + std::pair basic_and_full_overhang = computeBasicAndFullOverhang(storage, mesh, layer_idx); mesh.overhang_areas[layer_idx] = basic_and_full_overhang.first; // Store the results. mesh.full_overhang_areas[layer_idx] = basic_and_full_overhang.second; scripta::log("support_basic_overhang_area", basic_and_full_overhang.first, SectionType::SUPPORT, layer_idx); @@ -808,7 +814,7 @@ void AreaSupport::generateOverhangAreasForMesh(SliceDataStorage& storage, SliceM }); } -Polygons AreaSupport::generateVaryingXYDisallowedArea(const SliceMeshStorage& storage, const LayerIndex layer_idx) +Shape AreaSupport::generateVaryingXYDisallowedArea(const SliceMeshStorage& storage, const LayerIndex layer_idx) { const auto& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; const Simplify simplify{ mesh_group_settings }; @@ -820,7 +826,7 @@ Polygons AreaSupport::generateVaryingXYDisallowedArea(const SliceMeshStorage& st constexpr auto close_dist = 20; - auto layer_current = simplify.polygon(storage.layers[layer_idx].getOutlines().offset(-close_dist).offset(close_dist)); + Shape layer_current = simplify.polygon(storage.layers[layer_idx].getOutlines().offset(-close_dist).offset(close_dist)); using point_pair_t = std::pair; using poly_point_key = std::tuple; @@ -833,7 +839,7 @@ Polygons AreaSupport::generateVaryingXYDisallowedArea(const SliceMeshStorage& st { double support_distance; double delta_z; - Polygons layer_delta; + Shape layer_delta; }; std::vector z_distances_layer_deltas; @@ -882,7 +888,7 @@ Polygons AreaSupport::generateVaryingXYDisallowedArea(const SliceMeshStorage& st const auto support_distance = z_delta_poly.support_distance; const auto delta_z = z_delta_poly.delta_z; const auto layer_delta = z_delta_poly.layer_delta; - const auto xy_distance_natural = support_distance * std::tan(overhang_angle); + const auto xy_distance_natural = support_distance * boundedTan(overhang_angle); for (auto [current_poly_idx, current_poly] : layer_current | ranges::views::enumerate) { @@ -949,14 +955,14 @@ Polygons AreaSupport::generateVaryingXYDisallowedArea(const SliceMeshStorage& st } const auto smooth_dist = xy_distance / 2.0; - Polygons varying_xy_disallowed_areas = layer_current - // offset using the varying offset distances we calculated previously - .offset(varying_offsets) - // close operation to smooth the x/y disallowed area boundary. With varying xy distances we see some jumps in the boundary. - // As the x/y disallowed areas "cut in" to support the xy-disallowed area may propagate through the support area. If the - // x/y disallowed area is not smoothed boost has trouble generating a voronoi diagram. - .offset(smooth_dist) - .offset(-smooth_dist); + Shape varying_xy_disallowed_areas = layer_current + // offset using the varying offset distances we calculated previously + .offsetMulti(varying_offsets) + // close operation to smooth the x/y disallowed area boundary. With varying xy distances we see some jumps in the boundary. + // As the x/y disallowed areas "cut in" to support the xy-disallowed area may propagate through the support area. If the + // x/y disallowed area is not smoothed boost has trouble generating a voronoi diagram. + .offset(smooth_dist) + .offset(-smooth_dist); scripta::log("support_varying_xy_disallowed_areas", varying_xy_disallowed_areas, SectionType::SUPPORT, layer_idx); return varying_xy_disallowed_areas; } @@ -980,7 +986,7 @@ void AreaSupport::generateSupportAreasForMesh( const Settings& bottom_settings, const size_t mesh_idx, const size_t layer_count, - std::vector& support_areas) + std::vector& support_areas) { SliceMeshStorage& mesh = *storage.meshes[mesh_idx]; @@ -1008,11 +1014,11 @@ void AreaSupport::generateSupportAreasForMesh( } // Compute the areas that are disallowed by the X/Y distance. - std::vector xy_disallowed_per_layer; + std::vector xy_disallowed_per_layer; xy_disallowed_per_layer.resize(layer_count); - std::vector sloped_areas_per_layer; + std::vector sloped_areas_per_layer; sloped_areas_per_layer.resize(layer_count); - sloped_areas_per_layer[0] = Polygons(); + sloped_areas_per_layer[0] = Shape(); // simplified processing for bottom layer - just ensure support clears part by XY distance const coord_t xy_distance = infill_settings.get("support_xy_distance"); const coord_t xy_distance_overhang = infill_settings.get("support_xy_distance_overhang"); @@ -1035,7 +1041,7 @@ void AreaSupport::generateSupportAreasForMesh( layer_count, [&](const size_t layer_idx) { - const Polygons outlines = storage.getLayerOutlines(layer_idx, no_support, no_prime_tower); + const Shape outlines = storage.getLayerOutlines(layer_idx, no_support, no_prime_tower); // Build sloped areas. We need this for the stair-stepping later on. // Specifically, sloped areass are used in 'moveUpFromModel' to prevent a stair step happening over an area where there isn't a slope. @@ -1043,10 +1049,10 @@ void AreaSupport::generateSupportAreasForMesh( sloped_areas_per_layer[layer_idx] = // Take the outer areas of the previous layer, where the outer areas are (mostly) just _inside_ the shape. storage.getLayerOutlines(layer_idx - 1, no_support, no_prime_tower) - .tubeShape(sloped_area_detection_width, 10) + .createTubeShape(sloped_area_detection_width, 10) // Intersect those with the outer areas of the current layer, where the outer areas are (mostly) _outside_ the shape. // This will detect every slope (and some/most vertical walls) between those two layers. - .intersection(outlines.tubeShape(10, sloped_area_detection_width)) + .intersection(outlines.createTubeShape(10, sloped_area_detection_width)) // Do an opening operation so we're not stuck with tiny patches. // The later offset is extended with the line-width, so all patches are merged together if there's less than a line-width between them. .offset(-10) @@ -1066,8 +1072,8 @@ void AreaSupport::generateSupportAreasForMesh( // we also want to use the min XY distance when the support is resting on a sloped surface so we calculate the area of the // layer below that protrudes beyond the current layer's area and combine it with the current layer's overhang disallowed area - Polygons minimum_xy_disallowed_areas = mesh.layers[layer_idx].getOutlines().offset(xy_distance_overhang); - Polygons varying_xy_disallowed_areas = generateVaryingXYDisallowedArea(mesh, layer_idx); + Shape minimum_xy_disallowed_areas = mesh.layers[layer_idx].getOutlines().offset(xy_distance_overhang); + Shape varying_xy_disallowed_areas = generateVaryingXYDisallowedArea(mesh, layer_idx); xy_disallowed_per_layer[layer_idx] = minimum_xy_disallowed_areas.unionPolygons(varying_xy_disallowed_areas); scripta::log("support_xy_disallowed_areas", xy_disallowed_per_layer[layer_idx], SectionType::SUPPORT, layer_idx); } @@ -1078,8 +1084,8 @@ void AreaSupport::generateSupportAreasForMesh( } }); - std::vector tower_roofs; - Polygons stair_removal; // polygons to subtract from support because of stair-stepping + std::vector tower_roofs; + Shape stair_removal; // polygons to subtract from support because of stair-stepping const bool is_support_mesh_nondrop_place_holder = is_support_mesh_place_holder && ! mesh.settings.get("support_mesh_drop_down"); const bool is_support_mesh_drop_down_place_holder = is_support_mesh_place_holder && mesh.settings.get("support_mesh_drop_down"); @@ -1122,7 +1128,7 @@ void AreaSupport::generateSupportAreasForMesh( for (size_t layer_idx = layer_count - 1 - layer_z_distance_top; layer_idx != static_cast(-1); layer_idx--) { - Polygons layer_this = mesh.full_overhang_areas[layer_idx + layer_z_distance_top]; + Shape layer_this = mesh.full_overhang_areas[layer_idx + layer_z_distance_top]; if (extension_offset && ! is_support_mesh_place_holder) { @@ -1131,11 +1137,11 @@ void AreaSupport::generateSupportAreasForMesh( // model outline and the support is effectively calculating a voronoi. The offset is first applied to // the support and next to the model to ensure that the expanded support area is connected to the original // support area. Please note that the horizontal expansion is rounded down to an integer offset_per_step. - Polygons model_outline = storage.getLayerOutlines(layer_idx, no_support, no_prime_tower); + Shape model_outline = storage.getLayerOutlines(layer_idx, no_support, no_prime_tower); const coord_t offset_per_step = support_line_width / 2; // perform a small offset we don't enlarge small features of the support - Polygons horizontal_expansion = layer_this; + Shape horizontal_expansion = layer_this; for (coord_t offset_cumulative = 0; offset_cumulative <= extension_offset; offset_cumulative += offset_per_step) { horizontal_expansion = horizontal_expansion.offset(offset_per_step); @@ -1156,10 +1162,9 @@ void AreaSupport::generateSupportAreasForMesh( if (layer_idx + 1 < layer_count) { // join with support from layer up - const Polygons empty; - const Polygons* layer_above = (layer_idx < support_areas.size()) ? &support_areas[layer_idx + 1] : ∅ - const Polygons model_mesh_on_layer - = (layer_idx > 0) && ! is_support_mesh_nondrop_place_holder ? storage.getLayerOutlines(layer_idx, no_support, no_prime_tower) : empty; + const Shape empty; + const Shape* layer_above = (layer_idx < support_areas.size()) ? &support_areas[layer_idx + 1] : ∅ + const Shape model_mesh_on_layer = (layer_idx > 0) && ! is_support_mesh_nondrop_place_holder ? storage.getLayerOutlines(layer_idx, no_support, no_prime_tower) : empty; if (is_support_mesh_nondrop_place_holder) { layer_above = ∅ @@ -1171,7 +1176,7 @@ void AreaSupport::generateSupportAreasForMesh( // make towers for small support if (use_towers) { - for (PolygonsPart poly : layer_this.splitIntoParts()) + for (SingleShape poly : layer_this.splitIntoParts()) { const auto polygon_part = poly.difference(xy_disallowed_per_layer[layer_idx]).offset(-half_min_feature_width).offset(half_min_feature_width); @@ -1184,8 +1189,8 @@ void AreaSupport::generateSupportAreasForMesh( constexpr size_t tower_top_layer_count = 6; // number of layers after which to conclude that a tiny support area needs a tower if (layer_idx < layer_count - tower_top_layer_count && layer_idx >= tower_top_layer_count + bottom_empty_layer_count) { - Polygons tiny_tower_here; - tiny_tower_here.add(polygon_part); + Shape tiny_tower_here; + tiny_tower_here.push_back(polygon_part); tower_roofs.emplace_back(tiny_tower_here); } } @@ -1234,21 +1239,21 @@ void AreaSupport::generateSupportAreasForMesh( // do stuff for when support on buildplate only if (support_type == ESupportType::PLATFORM_ONLY) { - Polygons touching_buildplate = support_areas[0]; // TODO: not working for conical support! + Shape touching_buildplate = support_areas[0]; // TODO: not working for conical support! const AngleRadians conical_support_angle = infill_settings.get("support_conical_angle"); coord_t conical_support_offset; if (conical_support_angle > 0) { // outward ==> wider base than overhang - conical_support_offset = -(tan(conical_support_angle) - 0.01) * layer_thickness; + conical_support_offset = -boundedTan(conical_support_angle) * layer_thickness; } else { // inward ==> smaller base than overhang - conical_support_offset = (tan(-conical_support_angle) - 0.01) * layer_thickness; + conical_support_offset = boundedTan(-conical_support_angle) * layer_thickness; } const bool conical_support = infill_settings.get("support_conical_enabled") && conical_support_angle != 0; for (LayerIndex layer_idx = 1; layer_idx < storage.support.supportLayers.size(); layer_idx++) { - const Polygons& layer = support_areas[layer_idx]; + const Shape& layer = support_areas[layer_idx]; if (conical_support) { // with conical support the next layer is allowed to be larger than the previous @@ -1299,13 +1304,13 @@ void AreaSupport::generateSupportAreasForMesh( // Procedure to remove floating support for (size_t layer_idx = 1; layer_idx < layer_count - 1; layer_idx++) { - Polygons& layer_this = support_areas[layer_idx]; + Shape& layer_this = support_areas[layer_idx]; if (! layer_this.empty()) { - Polygons& layer_below = support_areas[layer_idx - 1]; - Polygons& layer_above = support_areas[layer_idx + 1]; - Polygons surrounding_layer = layer_above.unionPolygons(layer_below); + Shape& layer_below = support_areas[layer_idx - 1]; + Shape& layer_above = support_areas[layer_idx + 1]; + Shape surrounding_layer = layer_above.unionPolygons(layer_below); layer_this = layer_this.intersection(surrounding_layer); } } @@ -1324,9 +1329,9 @@ void AreaSupport::generateSupportAreasForMesh( void AreaSupport::moveUpFromModel( const SliceDataStorage& storage, - Polygons& stair_removal, - Polygons& sloped_areas, - Polygons& support_areas, + Shape& stair_removal, + Shape& sloped_areas, + Shape& support_areas, const size_t layer_idx, const size_t bottom_empty_layer_count, const size_t bottom_stair_step_layer_count, @@ -1389,9 +1394,9 @@ void AreaSupport::moveUpFromModel( const size_t bottom_layer_nr = layer_idx - bottom_empty_layer_count; constexpr bool no_support = false; constexpr bool no_prime_tower = false; - const Polygons bottom_outline = storage.getLayerOutlines(bottom_layer_nr, no_support, no_prime_tower); + const Shape bottom_outline = storage.getLayerOutlines(bottom_layer_nr, no_support, no_prime_tower); - Polygons to_be_removed; + Shape to_be_removed; if (bottom_stair_step_layer_count <= 1) { to_be_removed = bottom_outline; @@ -1401,13 +1406,13 @@ void AreaSupport::moveUpFromModel( to_be_removed = stair_removal.unionPolygons(bottom_outline); if (layer_idx % bottom_stair_step_layer_count == 0) { // update stairs for next step - const Polygons supporting_bottom = storage.getLayerOutlines(bottom_layer_nr - 1, no_support, no_prime_tower); - const Polygons allowed_step_width = supporting_bottom.offset(support_bottom_stair_step_width).intersection(sloped_areas); + const Shape supporting_bottom = storage.getLayerOutlines(bottom_layer_nr - 1, no_support, no_prime_tower); + const Shape allowed_step_width = supporting_bottom.offset(support_bottom_stair_step_width).intersection(sloped_areas); const int64_t step_bottom_layer_nr = bottom_layer_nr - bottom_stair_step_layer_count + 1; if (step_bottom_layer_nr >= 0) { - const Polygons step_bottom_outline = storage.getLayerOutlines(step_bottom_layer_nr, no_support, no_prime_tower); + const Shape step_bottom_outline = storage.getLayerOutlines(step_bottom_layer_nr, no_support, no_prime_tower); stair_removal = step_bottom_outline.intersection(allowed_step_width); } else @@ -1431,9 +1436,9 @@ void AreaSupport::moveUpFromModel( * ^^^^^^^^^ overhang extensions * ^^^^^^^^^^^^^^ overhang */ -std::pair AreaSupport::computeBasicAndFullOverhang(const SliceDataStorage& storage, const SliceMeshStorage& mesh, const LayerIndex& layer_idx) +std::pair AreaSupport::computeBasicAndFullOverhang(const SliceDataStorage& storage, const SliceMeshStorage& mesh, const LayerIndex& layer_idx) { - const Polygons outlines = mesh.layers[layer_idx].getOutlines(); + const Shape outlines = mesh.layers[layer_idx].getOutlines(); constexpr bool no_support = false; constexpr bool no_prime_tower = false; @@ -1442,36 +1447,36 @@ std::pair AreaSupport::computeBasicAndFullOverhang(const Sli const coord_t layer_height = mesh.settings.get("layer_height"); const AngleRadians support_angle = mesh.settings.get("support_angle"); - const double tan_angle = tan(support_angle) - 0.01; // The X/Y component of the support angle. 0.01 to make 90 degrees work too. + const double tan_angle = boundedTan(support_angle); // The X/Y component of the support angle // overhang areas protruding less then `max_dist_from_lower_layer` don't need support const coord_t max_dist_from_lower_layer = tan_angle * layer_height; // Maximum horizontal distance that can be bridged. // To avoids generating support for textures on vertical surfaces, a moving average // is taken over smooth_height. The smooth_height is currently an educated guess // that we might want to expose to the frontend in the future. - Polygons outlines_below = storage.getLayerOutlines(layer_idx - 1, no_support, no_prime_tower).offset(max_dist_from_lower_layer); + Shape outlines_below = storage.getLayerOutlines(layer_idx - 1, no_support, no_prime_tower).offset(max_dist_from_lower_layer); for (int layer_idx_offset = 2; layer_idx - layer_idx_offset >= 0 && layer_idx_offset <= layers_below; layer_idx_offset++) { auto outlines_below_ = storage.getLayerOutlines(layer_idx - layer_idx_offset, no_support, no_prime_tower).offset(max_dist_from_lower_layer * layer_idx_offset); outlines_below = outlines_below.unionPolygons(outlines_below_); } - Polygons basic_overhang = outlines.difference(outlines_below); + Shape basic_overhang = outlines.difference(outlines_below); const SupportLayer& support_layer = storage.support.supportLayers[layer_idx]; if (! support_layer.anti_overhang.empty()) { // Merge anti overhang into one polygon, otherwise overlapping polygons // will create opposite effect. - Polygons merged_polygons = support_layer.anti_overhang.unionPolygons(); + Shape merged_polygons = support_layer.anti_overhang.unionPolygons(); basic_overhang = basic_overhang.difference(merged_polygons); } - Polygons overhang_extended = basic_overhang - // +0.1mm for easier joining with support from layer above - .offset(max_dist_from_lower_layer * layers_below + MM2INT(0.1)); - Polygons full_overhang = overhang_extended.intersection(outlines); + Shape overhang_extended = basic_overhang + // +0.1mm for easier joining with support from layer above + .offset(max_dist_from_lower_layer * layers_below + MM2INT(0.1)); + Shape full_overhang = overhang_extended.intersection(outlines); return std::make_pair(basic_overhang, full_overhang); } @@ -1491,6 +1496,10 @@ void AreaSupport::detectOverhangPoints(const SliceDataStorage& storage, SliceMes for (const SliceLayerPart& part : layer.parts) { + if (part.outline.empty()) + { + continue; + } if (part.outline.outerPolygon().area() >= max_tower_supported_area) { // area is too big for support towers, should be supported by normal overhang detection @@ -1503,7 +1512,7 @@ void AreaSupport::detectOverhangPoints(const SliceDataStorage& storage, SliceMes continue; } - const Polygons overhang = part.outline.difference(storage.support.supportLayers[layer_idx].anti_overhang); + const Shape overhang = part.outline.difference(storage.support.supportLayers[layer_idx].anti_overhang); if (! overhang.empty()) { scripta::log("support_overhangs", overhang, SectionType::SUPPORT, layer_idx); @@ -1515,10 +1524,10 @@ void AreaSupport::detectOverhangPoints(const SliceDataStorage& storage, SliceMes void AreaSupport::handleTowers( const Settings& settings, - const Polygons& xy_disallowed_area, - Polygons& supportLayer_this, - std::vector& tower_roofs, - std::vector>& overhang_points, + const Shape& xy_disallowed_area, + Shape& supportLayer_this, + std::vector& tower_roofs, + std::vector>& overhang_points, LayerIndex layer_idx, size_t layer_count) { @@ -1527,7 +1536,7 @@ void AreaSupport::handleTowers( { return; } - std::vector& overhang_points_here = overhang_points[layer_overhang_point]; // may be changed if an overhang point has a (smaller) overhang point directly below + std::vector& overhang_points_here = overhang_points[layer_overhang_point]; // may be changed if an overhang point has a (smaller) overhang point directly below // handle new tower rooftops if (overhang_points_here.size() > 0) { @@ -1535,16 +1544,16 @@ void AreaSupport::handleTowers( if (layer_overhang_point < static_cast(layer_count) && ! overhang_points[layer_overhang_point - 1].empty()) { const auto max_tower_supported_diameter = settings.get("support_tower_maximum_supported_diameter"); - std::vector& overhang_points_below = overhang_points[layer_overhang_point - 1]; - for (Polygons& poly_here : overhang_points_here) + std::vector& overhang_points_below = overhang_points[layer_overhang_point - 1]; + for (Shape& poly_here : overhang_points_here) { - for (const Polygons& poly_below : overhang_points_below) + for (const Shape& poly_below : overhang_points_below) { poly_here = poly_here.difference(poly_below.offset(max_tower_supported_diameter * 2)); } } } - for (Polygons& poly : overhang_points_here) + for (Shape& poly : overhang_points_here) { if (poly.size() > 0) { @@ -1567,22 +1576,22 @@ void AreaSupport::handleTowers( } else { - const double tan_tower_roof_angle = tan(tower_roof_angle); + const double tan_tower_roof_angle = boundedTan(tower_roof_angle); tower_roof_expansion_distance = layer_thickness / tan_tower_roof_angle; } - for (Polygons& tower_roof : tower_roofs - | ranges::views::filter( - [](const auto& poly) - { - return ! poly.empty(); - })) + for (Shape& tower_roof : tower_roofs + | ranges::views::filter( + [](const auto& poly) + { + return ! poly.empty(); + })) { supportLayer_this = supportLayer_this.unionPolygons(tower_roof); if (tower_roof.area() < tower_diameter * tower_diameter) { - Polygons model_outline = xy_disallowed_area; + Shape model_outline = xy_disallowed_area; // Rather than offsetting the tower with tower_roof_expansion_distance we do this step wise to achieve two things // - prevent support from folding around the model @@ -1618,13 +1627,13 @@ void AreaSupport::handleTowers( } } -void AreaSupport::handleWallStruts(const Settings& settings, Polygons& supportLayer_this) +void AreaSupport::handleWallStruts(const Settings& settings, Shape& supportLayer_this) { const coord_t max_tower_supported_diameter = settings.get("support_tower_maximum_supported_diameter"); const coord_t tower_diameter = settings.get("support_tower_diameter"); for (unsigned int p = 0; p < supportLayer_this.size(); p++) { - PolygonRef poly = supportLayer_this[p]; + const Polygon& poly = supportLayer_this[p]; if (poly.size() < 6) // might be a single wall { int best = -1; @@ -1651,19 +1660,19 @@ void AreaSupport::handleWallStruts(const Settings& settings, Polygons& supportLa if (width < max_tower_supported_diameter) { Point2LL mid = (poly[best] + poly[(best + 1) % poly.size()]) / 2; - Polygons struts; - PolygonRef strut = struts.newPoly(); - strut.add(mid + Point2LL(tower_diameter / 2, tower_diameter / 2)); - strut.add(mid + Point2LL(-tower_diameter / 2, tower_diameter / 2)); - strut.add(mid + Point2LL(-tower_diameter / 2, -tower_diameter / 2)); - strut.add(mid + Point2LL(tower_diameter / 2, -tower_diameter / 2)); + Shape struts; + Polygon& strut = struts.newLine(); + strut.push_back(mid + Point2LL(tower_diameter / 2, tower_diameter / 2)); + strut.push_back(mid + Point2LL(-tower_diameter / 2, tower_diameter / 2)); + strut.push_back(mid + Point2LL(-tower_diameter / 2, -tower_diameter / 2)); + strut.push_back(mid + Point2LL(tower_diameter / 2, -tower_diameter / 2)); supportLayer_this = supportLayer_this.unionPolygons(struts); } } } } -void AreaSupport::generateSupportBottom(SliceDataStorage& storage, const SliceMeshStorage& mesh, std::vector& global_support_areas_per_layer) +void AreaSupport::generateSupportBottom(SliceDataStorage& storage, const SliceMeshStorage& mesh, std::vector& global_support_areas_per_layer) { const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; const coord_t layer_height = mesh_group_settings.get("layer_height"); @@ -1673,34 +1682,28 @@ void AreaSupport::generateSupportBottom(SliceDataStorage& storage, const SliceMe return; } const coord_t z_distance_bottom = round_up_divide(mesh.settings.get("support_bottom_distance"), layer_height); // Number of layers between support bottom and model. - const size_t skip_layer_count - = std::max(uint64_t(1), round_divide(mesh.settings.get("support_interface_skip_height"), layer_height)); // Resolution of generating support bottoms above model. const coord_t bottom_line_width = mesh_group_settings.get("support_bottom_extruder_nr").settings_.get("support_bottom_line_width"); const coord_t bottom_outline_offset = mesh_group_settings.get("support_bottom_extruder_nr").settings_.get("support_bottom_offset"); - const size_t scan_count = std::max(size_t(1), (bottom_layer_count - 1) / skip_layer_count); // How many measurements to take to generate bottom areas. - const double z_skip = std::max( - 1.0, - double(bottom_layer_count - 1) / double(scan_count)); // How many layers to skip between measurements. Using float for better spread, but this is later rounded. const double minimum_bottom_area = mesh.settings.get("minimum_bottom_area"); std::vector& support_layers = storage.support.supportLayers; for (LayerIndex layer_idx = support_layers.size() - 1; layer_idx >= static_cast(z_distance_bottom); --layer_idx) { const unsigned int bottom_layer_idx_below = std::max(0, int(layer_idx) - int(bottom_layer_count) - int(z_distance_bottom)); - Polygons mesh_outlines; - for (double layer_idx_below = bottom_layer_idx_below; std::round(layer_idx_below) < (int)(layer_idx - z_distance_bottom); layer_idx_below += z_skip) + Shape mesh_outlines; + for (auto layer_idx_below = bottom_layer_idx_below; layer_idx_below < layer_idx - z_distance_bottom + 1; layer_idx_below += 1) { - mesh_outlines.add(mesh.layers[std::round(layer_idx_below)].getOutlines()); + mesh_outlines.push_back(mesh.layers[layer_idx_below].getOutlines()); } - Polygons bottoms; + Shape bottoms; generateSupportInterfaceLayer(global_support_areas_per_layer[layer_idx], mesh_outlines, bottom_line_width, bottom_outline_offset, minimum_bottom_area, bottoms); - support_layers[layer_idx].support_bottom.add(bottoms); + support_layers[layer_idx].support_bottom.push_back(bottoms); scripta::log("support_interface_bottoms", bottoms, SectionType::SUPPORT, layer_idx); } } -void AreaSupport::generateSupportRoof(SliceDataStorage& storage, const SliceMeshStorage& mesh, std::vector& global_support_areas_per_layer) +void AreaSupport::generateSupportRoof(SliceDataStorage& storage, const SliceMeshStorage& mesh, std::vector& global_support_areas_per_layer) { const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; const coord_t layer_height = mesh_group_settings.get("layer_height"); @@ -1710,15 +1713,9 @@ void AreaSupport::generateSupportRoof(SliceDataStorage& storage, const SliceMesh return; } const coord_t z_distance_top = round_up_divide(mesh.settings.get("support_top_distance"), layer_height); // Number of layers between support roof and model. - const size_t skip_layer_count - = std::max(uint64_t(1), round_divide(mesh.settings.get("support_interface_skip_height"), layer_height)); // Resolution of generating support roof below model. const coord_t roof_line_width = mesh_group_settings.get("support_roof_extruder_nr").settings_.get("support_roof_line_width"); const coord_t roof_outline_offset = mesh_group_settings.get("support_roof_extruder_nr").settings_.get("support_roof_offset"); - const size_t scan_count = std::max(size_t(1), (roof_layer_count - 1) / skip_layer_count); // How many measurements to take to generate roof areas. - const double z_skip = std::max( - 1.0, - double(roof_layer_count - 1) / double(scan_count)); // How many layers to skip between measurements. Using float for better spread, but this is later rounded. const double minimum_roof_area = mesh.settings.get("minimum_roof_area"); std::vector& support_layers = storage.support.supportLayers; @@ -1727,17 +1724,17 @@ void AreaSupport::generateSupportRoof(SliceDataStorage& storage, const SliceMesh const LayerIndex top_layer_idx_above{ std::min(LayerIndex{ support_layers.size() - 1 }, LayerIndex{ layer_idx + roof_layer_count + z_distance_top }) }; // Maximum layer of the model that generates support roof. - Polygons mesh_outlines; - for (double layer_idx_above = top_layer_idx_above; layer_idx_above > layer_idx + z_distance_top; layer_idx_above -= z_skip) + Shape mesh_outlines; + for (auto layer_idx_above = top_layer_idx_above; layer_idx_above > layer_idx + z_distance_top - 1; layer_idx_above -= 1) { - mesh_outlines.add(mesh.layers[std::round(layer_idx_above)].getOutlines()); + mesh_outlines.push_back(mesh.layers[layer_idx_above].getOutlines()); } - Polygons roofs; + Shape roofs; generateSupportInterfaceLayer(global_support_areas_per_layer[layer_idx], mesh_outlines, roof_line_width, roof_outline_offset, minimum_roof_area, roofs); - support_layers[layer_idx].support_roof.add(roofs); + support_layers[layer_idx].support_roof.push_back(roofs); if (layer_idx > 0 && layer_idx < support_layers.size() - 1) { - support_layers[layer_idx].support_fractional_roof.add(roofs.difference(support_layers[layer_idx + 1].support_roof)); + support_layers[layer_idx].support_fractional_roof.push_back(roofs.difference(support_layers[layer_idx + 1].support_roof)); } scripta::log("support_interface_roofs", roofs, SectionType::SUPPORT, layer_idx); } @@ -1752,7 +1749,7 @@ void AreaSupport::generateSupportRoof(SliceDataStorage& storage, const SliceMesh int lower = static_cast(layer_idx); int upper = std::min(static_cast(layer_idx + roof_layer_count + z_distance_top + 5), static_cast(global_support_areas_per_layer.size()) - 1); - for (Polygons& global_support : global_support_areas_per_layer | ranges::views::slice(lower, upper)) + for (Shape& global_support : global_support_areas_per_layer | ranges::views::slice(lower, upper)) { global_support = global_support.difference(support_layer.support_roof); } @@ -1760,14 +1757,14 @@ void AreaSupport::generateSupportRoof(SliceDataStorage& storage, const SliceMesh } void AreaSupport::generateSupportInterfaceLayer( - Polygons& support_areas, - const Polygons colliding_mesh_outlines, + Shape& support_areas, + const Shape colliding_mesh_outlines, const coord_t safety_offset, const coord_t outline_offset, const double minimum_interface_area, - Polygons& interface_polygons) + Shape& interface_polygons) { - Polygons model = colliding_mesh_outlines.unionPolygons(); + Shape model = colliding_mesh_outlines.unionPolygons(); interface_polygons = support_areas.offset(safety_offset / 2).intersection(model); interface_polygons = interface_polygons.offset(safety_offset).intersection(support_areas); // Make sure we don't generate any models that are not printable. if (outline_offset != 0) diff --git a/src/utils/AABB.cpp b/src/utils/AABB.cpp index f3a93cbf1d..163c6a5f26 100644 --- a/src/utils/AABB.cpp +++ b/src/utils/AABB.cpp @@ -3,10 +3,12 @@ #include "utils/AABB.h" +#include #include +#include "geometry/Polygon.h" +#include "geometry/Shape.h" #include "utils/linearAlg2D.h" -#include "utils/polygon.h" //To create the AABB of a polygon. namespace cura { @@ -24,14 +26,14 @@ AABB::AABB(const Point2LL& min, const Point2LL& max) { } -AABB::AABB(const Polygons& polys) +AABB::AABB(const Shape& shape) : min_(POINT_MAX, POINT_MAX) , max_(POINT_MIN, POINT_MIN) { - calculate(polys); + calculate(shape); } -AABB::AABB(ConstPolygonRef poly) +AABB::AABB(const Polygon& poly) : min_(POINT_MAX, POINT_MAX) , max_(POINT_MIN, POINT_MIN) { @@ -68,20 +70,20 @@ coord_t AABB::distanceSquared(const AABB& other) const }); } -void AABB::calculate(const Polygons& polys) +void AABB::calculate(const Shape& shape) { min_ = Point2LL(POINT_MAX, POINT_MAX); max_ = Point2LL(POINT_MIN, POINT_MIN); - for (unsigned int i = 0; i < polys.size(); i++) + for (const Polygon& poly : shape) { - for (unsigned int j = 0; j < polys[i].size(); j++) + for (const Point2LL& point : poly) { - include(polys[i][j]); + include(point); } } } -void AABB::calculate(ConstPolygonRef poly) +void AABB::calculate(const Polygon& poly) { min_ = Point2LL(POINT_MAX, POINT_MAX); max_ = Point2LL(POINT_MIN, POINT_MIN); @@ -131,7 +133,7 @@ bool AABB::hit(const AABB& other) const return true; } -void AABB::include(Point2LL point) +void AABB::include(const Point2LL& point) { min_.X = std::min(min_.X, point.X); min_.Y = std::min(min_.Y, point.Y); @@ -139,7 +141,15 @@ void AABB::include(Point2LL point) max_.Y = std::max(max_.Y, point.Y); } -void AABB::include(const AABB other) +void AABB::include(const Polygon& polygon) +{ + for (const Point2LL& point : polygon) + { + include(point); + } +} + +void AABB::include(const AABB& other) { // Note that this is different from including the min and max points, since when 'min > max' it's used to denote an negative/empty box. min_.X = std::min(min_.X, other.min_.X); @@ -162,12 +172,7 @@ void AABB::expand(int dist) Polygon AABB::toPolygon() const { - Polygon ret; - ret.add(min_); - ret.add(Point2LL(max_.X, min_.Y)); - ret.add(max_); - ret.add(Point2LL(min_.X, max_.Y)); - return ret; + return Polygon({ min_, Point2LL(max_.X, min_.Y), max_, Point2LL(min_.X, max_.Y) }, false); } } // namespace cura diff --git a/src/utils/ExtrusionLine.cpp b/src/utils/ExtrusionLine.cpp index 5183aab67b..0da925d771 100644 --- a/src/utils/ExtrusionLine.cpp +++ b/src/utils/ExtrusionLine.cpp @@ -12,7 +12,7 @@ namespace cura { -coord_t ExtrusionLine::getLength() const +coord_t ExtrusionLine::length() const { if (junctions_.empty()) { @@ -44,4 +44,20 @@ coord_t ExtrusionLine::getMinimalWidth() const ->w_; } +bool ExtrusionLine::shorterThan(const coord_t check_length) const +{ + const ExtrusionJunction* p0 = &back(); + int64_t length = 0; + for (const ExtrusionJunction& p1 : (*this)) + { + length += vSize(*p0 - p1); + if (length >= check_length) + { + return false; + } + p0 = &p1; + } + return true; +} + } // namespace cura diff --git a/src/utils/ExtrusionSegment.cpp b/src/utils/ExtrusionSegment.cpp index 71a2d59bef..0327f333db 100644 --- a/src/utils/ExtrusionSegment.cpp +++ b/src/utils/ExtrusionSegment.cpp @@ -1,8 +1,10 @@ -// Copyright (c) 2022 Ultimaker B.V. +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher #include "utils/ExtrusionSegment.h" +#include + #include #include "utils/macros.h" @@ -10,14 +12,14 @@ namespace cura { -Polygons ExtrusionSegment::toPolygons() +Shape ExtrusionSegment::toShape() { - return toPolygons(is_reduced_); + return toShape(is_reduced_); } -Polygons ExtrusionSegment::toPolygons(bool reduced) +Shape ExtrusionSegment::toShape(bool reduced) { - Polygons ret; + Shape ret; const Point2LL vec = to_.p_ - from_.p_; const coord_t vec_length = vSize(vec); @@ -26,7 +28,7 @@ Polygons ExtrusionSegment::toPolygons(bool reduced) return ret; } - PolygonRef poly = ret.newPoly(); + Polygon& poly = ret.newLine(); const double delta_r = 0.5 * std::abs(from_.w_ - to_.w_); const double vec_length_fixed = std::max(delta_r, static_cast(vec_length)); float alpha = std::acos(delta_r / vec_length_fixed); // Angle between the slope along the edge of the polygon (due to varying line width) and the centerline. @@ -49,7 +51,7 @@ Polygons ExtrusionSegment::toPolygons(bool reduced) // Draw the endcap on the "from" vertex's end. { - poly.emplace_back(from_.p_ + Point2LL(from_.w_ / 2 * cos(alpha + dir), from_.w_ / 2 * sin(alpha + dir))); + poly.push_back(from_.p_ + Point2LL(from_.w_ / 2 * cos(alpha + dir), from_.w_ / 2 * sin(alpha + dir))); double start_a = 2 * std::numbers::pi; while (start_a > alpha + dir) @@ -74,7 +76,7 @@ Polygons ExtrusionSegment::toPolygons(bool reduced) // Draw the endcap on the "to" vertex's end. { - poly.emplace_back( + poly.push_back( to_.p_ + Point2LL( to_.w_ / 2 * cos(2 * std::numbers::pi - alpha + dir), @@ -125,7 +127,7 @@ Polygons ExtrusionSegment::toPolygons(bool reduced) } #ifdef DEBUG - for (Point2LL p : poly) + for (const Point2LL& p : poly) { assert(p.X < 0x3FFFFFFFFFFFFFFFLL); assert(p.Y < 0x3FFFFFFFFFFFFFFFLL); diff --git a/src/utils/ListPolyIt.cpp b/src/utils/ListPolyIt.cpp index c2c4a7cf0a..f56159af5d 100644 --- a/src/utils/ListPolyIt.cpp +++ b/src/utils/ListPolyIt.cpp @@ -6,6 +6,7 @@ #include // isfinite #include // ostream +#include "geometry/Polygon.h" #include "utils/AABB.h" // for debug output svg html #include "utils/SVG.h" @@ -13,16 +14,16 @@ namespace cura { -void ListPolyIt::convertPolygonsToLists(const Polygons& polys, ListPolygons& result) +void ListPolyIt::convertPolygonsToLists(const Shape& shape, ListPolygons& result) { - for (ConstPolygonRef poly : polys) + for (const Polygon& poly : shape) { result.emplace_back(); convertPolygonToList(poly, result.back()); } } -void ListPolyIt::convertPolygonToList(ConstPolygonRef poly, ListPolygon& result) +void ListPolyIt::convertPolygonToList(const Polygon& poly, ListPolygon& result) { #ifdef DEBUG Point2LL last = poly.back(); @@ -41,7 +42,7 @@ void ListPolyIt::convertPolygonToList(ConstPolygonRef poly, ListPolygon& result) } -void ListPolyIt::convertListPolygonsToPolygons(const ListPolygons& list_polygons, Polygons& polygons) +void ListPolyIt::convertListPolygonsToPolygons(const ListPolygons& list_polygons, Shape& polygons) { for (unsigned int poly_idx = 0; poly_idx < polygons.size(); poly_idx++) { @@ -50,11 +51,11 @@ void ListPolyIt::convertListPolygonsToPolygons(const ListPolygons& list_polygons } } -void ListPolyIt::convertListPolygonToPolygon(const ListPolygon& list_polygon, PolygonRef polygon) +void ListPolyIt::convertListPolygonToPolygon(const ListPolygon& list_polygon, Polygon& polygon) { for (const Point2LL& p : list_polygon) { - polygon.add(p); + polygon.push_back(p); } } diff --git a/src/utils/Matrix4x3D.cpp b/src/utils/Matrix4x3D.cpp index 43b255379f..7e68fbfbbc 100644 --- a/src/utils/Matrix4x3D.cpp +++ b/src/utils/Matrix4x3D.cpp @@ -3,8 +3,8 @@ #include "utils/Matrix4x3D.h" //The definitions we're implementing. +#include "geometry/Point2LL.h" //Conversion directly into integer-based coordinates. #include "settings/types/Ratio.h" //Scale factor. -#include "utils/Point2LL.h" //Conversion directly into integer-based coordinates. #include "utils/Point3D.h" //This matrix gets applied to floating point coordinates. namespace cura diff --git a/src/utils/MixedPolylineStitcher.cpp b/src/utils/MixedPolylineStitcher.cpp new file mode 100644 index 0000000000..50e49a9323 --- /dev/null +++ b/src/utils/MixedPolylineStitcher.cpp @@ -0,0 +1,34 @@ +// Copyright (c) 2024 UltiMaker +// CuraEngine is released under the terms of the AGPLv3 or higher. + +#include "utils/MixedPolylineStitcher.h" + +#include "geometry/MixedLinesSet.h" +#include "geometry/OpenPolyline.h" +#include "geometry/Polygon.h" +#include "geometry/Shape.h" + + +namespace cura +{ + +void MixedPolylineStitcher::stitch(const OpenLinesSet& lines, MixedLinesSet& result, coord_t max_stitch_distance, coord_t snap_distance) +{ + OpenLinesSet open_lines; + ClosedLinesSet closed_lines; + + PolylineStitcher::stitch(lines, open_lines, closed_lines, max_stitch_distance, snap_distance); + + result.push_back(std::move(open_lines)); + + for (ClosedPolyline& closed_line : closed_lines) + { + // Base stitch method will create explicitely closed polylines, but won't tag them as such + // because it is a generic algorithm. Tag them now. + closed_line.setExplicitelyClosed(true); + } + + result.push_back(std::move(closed_lines)); +} + +} // namespace cura diff --git a/src/utils/Point3LL.cpp b/src/utils/Point3LL.cpp index 2420552fb6..bb8e7c6930 100644 --- a/src/utils/Point3LL.cpp +++ b/src/utils/Point3LL.cpp @@ -1,7 +1,7 @@ // Copyright (c) 2022 Ultimaker B.V. // CuraEngine is released under the terms of the AGPLv3 or higher. -#include "utils/Point3LL.h" //The headers we're implementing. +#include "geometry/Point3LL.h" //The headers we're implementing. namespace cura { @@ -63,14 +63,4 @@ Point3LL& Point3LL::operator/=(const Point3LL& p) return *this; } -bool Point3LL::operator==(const Point3LL& p) const -{ - return x_ == p.x_ && y_ == p.y_ && z_ == p.z_; -} - -bool Point3LL::operator!=(const Point3LL& p) const -{ - return x_ != p.x_ || y_ != p.y_ || z_ != p.z_; -} - } // namespace cura diff --git a/src/utils/PolygonConnector.cpp b/src/utils/PolygonConnector.cpp index 936ad69850..e8f3f3c33b 100644 --- a/src/utils/PolygonConnector.cpp +++ b/src/utils/PolygonConnector.cpp @@ -14,9 +14,9 @@ PolygonConnector::PolygonConnector(const coord_t line_width) { } -void PolygonConnector::add(const Polygons& input) +void PolygonConnector::add(const Shape& input) { - for (ConstPolygonRef poly : input) + for (const Polygon& poly : input) { input_polygons_.push_back(poly); } @@ -33,12 +33,12 @@ void PolygonConnector::add(const std::vector& input) } } -void PolygonConnector::connect(Polygons& output_polygons, std::vector& output_paths) +void PolygonConnector::connect(Shape& output_polygons, std::vector& output_paths) { std::vector result_polygons = connectGroup(input_polygons_); - for (Polygon& polygon : result_polygons) + for (const Polygon& polygon : result_polygons) { - output_polygons.add(polygon); + output_polygons.push_back(polygon); } std::vector result_paths = connectGroup(input_paths_); @@ -67,12 +67,12 @@ coord_t PolygonConnector::getWidth(const ExtrusionJunction& junction) const void PolygonConnector::addVertex(Polygon& polygonal, const Point2LL& position, const coord_t) const { - polygonal.add(position); + polygonal.push_back(position); } void PolygonConnector::addVertex(Polygon& polygonal, const Point2LL& vertex) const { - polygonal.add(vertex); + polygonal.push_back(vertex); } void PolygonConnector::addVertex(ExtrusionLine& polygonal, const Point2LL& position, const coord_t width) const diff --git a/src/utils/PolygonsPointIndex.cpp b/src/utils/PolygonsPointIndex.cpp index d41092baba..3618e53a96 100644 --- a/src/utils/PolygonsPointIndex.cpp +++ b/src/utils/PolygonsPointIndex.cpp @@ -3,13 +3,24 @@ #include "utils/PolygonsPointIndex.h" +#include "geometry/Shape.h" + namespace cura { template<> -ConstPolygonRef PathsPointIndex::getPolygon() const +const Polygon& PathsPointIndex::getPolygon() const { return (*polygons_)[poly_idx_]; } +std::pair PolygonsPointIndexSegmentLocator::operator()(const PolygonsPointIndex& val) const +{ + const Polygon& poly = (*val.polygons_)[val.poly_idx_]; + Point2LL start = poly[val.point_idx_]; + size_t next_point_idx = (val.point_idx_ + 1ul) % poly.size(); + Point2LL end = poly[next_point_idx]; + return std::pair(start, end); +} + } // namespace cura diff --git a/src/utils/PolygonsSegmentIndex.cpp b/src/utils/PolygonsSegmentIndex.cpp index 0b402a03f6..46f226a4c7 100644 --- a/src/utils/PolygonsSegmentIndex.cpp +++ b/src/utils/PolygonsSegmentIndex.cpp @@ -11,7 +11,7 @@ PolygonsSegmentIndex::PolygonsSegmentIndex() { } -PolygonsSegmentIndex::PolygonsSegmentIndex(const Polygons* polygons, unsigned int poly_idx, unsigned int point_idx) +PolygonsSegmentIndex::PolygonsSegmentIndex(const Shape* polygons, unsigned int poly_idx, unsigned int point_idx) : PolygonsPointIndex(polygons, poly_idx, point_idx) { } diff --git a/src/utils/PolylineStitcher.cpp b/src/utils/PolylineStitcher.cpp index 61a3b11594..6e67797c62 100644 --- a/src/utils/PolylineStitcher.cpp +++ b/src/utils/PolylineStitcher.cpp @@ -3,14 +3,18 @@ #include "utils/PolylineStitcher.h" -#include "utils/ExtrusionLine.h" -#include "utils/polygon.h" +#include "geometry/ClosedLinesSet.h" +#include "geometry/OpenLinesSet.h" +#include "geometry/OpenPolyline.h" +#include "utils/ExtrusionLineStitcher.h" +#include "utils/OpenPolylineStitcher.h" +#include "utils/PolygonsPointIndex.h" namespace cura { template<> -bool PolylineStitcher::canReverse(const PathsPointIndex& ppi) +bool ExtrusionLineStitcher::canReverse(const PathsPointIndex& ppi) { if ((*ppi.polygons_)[ppi.poly_idx_].is_odd_) { @@ -23,33 +27,271 @@ bool PolylineStitcher::can } template<> -bool PolylineStitcher::canReverse(const PathsPointIndex&) +bool OpenPolylineStitcher::canReverse(const PathsPointIndex&) { return true; } template<> -bool PolylineStitcher::canConnect(const ExtrusionLine& a, const ExtrusionLine& b) +bool PolylineStitcher::canReverse(const PathsPointIndex&) +{ + return true; +} + +template<> +bool ExtrusionLineStitcher::canConnect(const ExtrusionLine& a, const ExtrusionLine& b) { return a.is_odd_ == b.is_odd_; } template<> -bool PolylineStitcher::canConnect(const Polygon&, const Polygon&) +bool OpenPolylineStitcher::canConnect(const OpenPolyline&, const OpenPolyline&) { return true; } template<> -bool PolylineStitcher::isOdd(const ExtrusionLine& line) +bool PolylineStitcher::canConnect(const OpenPolyline&, const OpenPolyline&) +{ + return true; +} + +template<> +bool ExtrusionLineStitcher::isOdd(const ExtrusionLine& line) { return line.is_odd_; } template<> -bool PolylineStitcher::isOdd(const Polygon&) +bool OpenPolylineStitcher::isOdd(const OpenPolyline&) +{ + return false; +} + +template<> +bool PolylineStitcher::isOdd(const OpenPolyline&) { return false; } +template<> +void ExtrusionLineStitcher::pushToClosedResult(VariableWidthLines& result_polygons, const ExtrusionLine& polyline) +{ + result_polygons.push_back(polyline); +} + +template<> +void OpenPolylineStitcher::pushToClosedResult(Shape& result_polygons, const OpenPolyline& polyline) +{ + result_polygons.emplace_back(polyline.getPoints(), true); +} + +template<> +void PolylineStitcher::pushToClosedResult(ClosedLinesSet& result_polygons, const OpenPolyline& polyline) +{ + result_polygons.emplace_back(polyline.getPoints(), true); +} + +template +void PolylineStitcher::stitch( + const InputPaths& lines, + InputPaths& result_lines, + OutputPaths& result_polygons, + coord_t max_stitch_distance, + coord_t snap_distance) +{ + if (lines.empty()) + { + return; + } + + SparsePointGrid, PathsPointIndexLocator> grid(max_stitch_distance, lines.size() * 2); + + // populate grid + for (size_t line_idx = 0; line_idx < lines.size(); line_idx++) + { + const auto line = lines[line_idx]; + grid.insert(PathsPointIndex(&lines, line_idx, 0)); + grid.insert(PathsPointIndex(&lines, line_idx, line.size() - 1)); + } + + std::vector processed(lines.size(), false); + + for (size_t line_idx = 0; line_idx < lines.size(); line_idx++) + { + if (processed[line_idx]) + { + continue; + } + processed[line_idx] = true; + const auto line = lines[line_idx]; + bool should_close = isOdd(line); + + Path chain = line; + bool closest_is_closing_polygon = false; + for (bool go_in_reverse_direction : { false, true }) // first go in the unreversed direction, to try to prevent the chain.reverse() operation. + { // NOTE: Implementation only works for this order; we currently only re-reverse the chain when it's closed. + if (go_in_reverse_direction) + { // try extending chain in the other direction + chain.reverse(); + } + coord_t chain_length = chain.length(); + + while (true) + { + Point2LL from = make_point(chain.back()); + + PathsPointIndex closest; + coord_t closest_distance = std::numeric_limits::max(); + grid.processNearby( + from, + max_stitch_distance, + std::function&)>( + [from, + &chain, + &closest, + &closest_is_closing_polygon, + &closest_distance, + &processed, + &chain_length, + go_in_reverse_direction, + max_stitch_distance, + snap_distance, + should_close](const PathsPointIndex& nearby) -> bool + { + bool is_closing_segment = false; + coord_t dist = vSize(nearby.p() - from); + if (dist > max_stitch_distance) + { + return true; // keep looking + } + if (vSize2(nearby.p() - make_point(chain.front())) < snap_distance * snap_distance) + { + if (chain_length + dist < 3 * max_stitch_distance // prevent closing of small poly, cause it might be able to continue making a larger polyline + || chain.size() <= 2) // don't make 2 vert polygons + { + return true; // look for a better next line + } + is_closing_segment = true; + if (! should_close) + { + dist += 10; // prefer continuing polyline over closing a polygon; avoids closed zigzags from being printed separately + // continue to see if closing segment is also the closest + // there might be a segment smaller than [max_stitch_distance] which closes the polygon better + } + else + { + dist -= 10; // Prefer closing the polygon if it's 100% even lines. Used to create closed contours. + // Continue to see if closing segment is also the closest. + } + } + else if (processed[nearby.poly_idx_]) + { // it was already moved to output + return true; // keep looking for a connection + } + bool nearby_would_be_reversed = nearby.point_idx_ != 0; + nearby_would_be_reversed = nearby_would_be_reversed != go_in_reverse_direction; // flip nearby_would_be_reversed when searching in the reverse direction + if (! canReverse(nearby) && nearby_would_be_reversed) + { // connecting the segment would reverse the polygon direction + return true; // keep looking for a connection + } + if (! canConnect(chain, (*nearby.polygons_)[nearby.poly_idx_])) + { + return true; // keep looking for a connection + } + if (dist < closest_distance) + { + closest_distance = dist; + closest = nearby; + closest_is_closing_polygon = is_closing_segment; + } + if (dist < snap_distance) + { // we have found a good enough next line + return false; // stop looking for alternatives + } + return true; // keep processing elements + })); + + if (! closest.initialized() // we couldn't find any next line + || closest_is_closing_polygon // we closed the polygon + ) + { + break; + } + + + coord_t segment_dist = vSize(make_point(chain.back()) - closest.p()); + assert(segment_dist <= max_stitch_distance + 10); + const size_t old_size = chain.size(); + if (closest.point_idx_ == 0) + { + auto start_pos = (*closest.polygons_)[closest.poly_idx_].begin(); + if (segment_dist < snap_distance) + { + ++start_pos; + } + chain.insert(chain.end(), start_pos, (*closest.polygons_)[closest.poly_idx_].end()); + } + else + { + auto start_pos = (*closest.polygons_)[closest.poly_idx_].rbegin(); + if (segment_dist < snap_distance) + { + ++start_pos; + } + chain.insert(chain.end(), start_pos, (*closest.polygons_)[closest.poly_idx_].rend()); + } + for (size_t i = old_size; i < chain.size(); ++i) // Update chain length. + { + chain_length += vSize(chain[i] - chain[i - 1]); + } + should_close = should_close & ! isOdd((*closest.polygons_)[closest.poly_idx_]); // If we connect an even to an odd line, we should no longer try to close it. + assert(! processed[closest.poly_idx_]); + processed[closest.poly_idx_] = true; + } + + if (closest_is_closing_polygon) + { + if (go_in_reverse_direction) + { // re-reverse chain to retain original direction + // NOTE: not sure if this code could ever be reached, since if a polygon can be closed that should be already possible in the forward direction + chain.reverse(); + } + + break; // don't consider reverse direction + } + } + if (closest_is_closing_polygon) + { + pushToClosedResult(result_polygons, chain); + } + else + { + PathsPointIndex ppi_here(&lines, line_idx, 0); + if (! canReverse(ppi_here)) + { // Since closest_is_closing_polygon is false we went through the second iterations of the for-loop, where go_in_reverse_direction is true + // the polyline isn't allowed to be reversed, so we re-reverse it. + chain.reverse(); + } + result_lines.emplace_back(chain); + } + } +} + +template void OpenPolylineStitcher::stitch(const OpenLinesSet& lines, OpenLinesSet& result_lines, Shape& result_polygons, coord_t max_stitch_distance, coord_t snap_distance); + +template void ExtrusionLineStitcher::stitch( + const VariableWidthLines& lines, + VariableWidthLines& result_lines, + VariableWidthLines& result_polygons, + coord_t max_stitch_distance, + coord_t snap_distance); + +template void PolylineStitcher::stitch( + const OpenLinesSet& lines, + OpenLinesSet& result_lines, + ClosedLinesSet& result_polygons, + coord_t max_stitch_distance, + coord_t snap_distance); + } // namespace cura diff --git a/src/utils/SVG.cpp b/src/utils/SVG.cpp index a5ee2c14b8..69a115d9d4 100644 --- a/src/utils/SVG.cpp +++ b/src/utils/SVG.cpp @@ -7,9 +7,10 @@ #include +#include "geometry/Polygon.h" +#include "geometry/SingleShape.h" #include "utils/ExtrusionLine.h" #include "utils/Point3D.h" -#include "utils/polygon.h" namespace cura { @@ -87,7 +88,7 @@ SVG::SVG(std::string filename, AABB aabb, double scale, Point2LL canvas_size, Co out_ = fopen(filename.c_str(), "w"); if (! out_) { - spdlog::error("The file %s could not be opened for writing.", filename); + spdlog::error("The file {} could not be opened for writing.", filename); } if (output_is_html_) { @@ -155,12 +156,12 @@ void SVG::writeComment(const std::string& comment) const fprintf(out_, "\n", comment.c_str()); } -void SVG::writeAreas(const Polygons& polygons, const ColorObject color, const ColorObject outline_color, const double stroke_width) const +void SVG::writeAreas(const Shape& polygons, const ColorObject color, const ColorObject outline_color, const double stroke_width) const { - std::vector parts = polygons.splitIntoParts(); + std::vector parts = polygons.splitIntoParts(); for (auto part_it = parts.rbegin(); part_it != parts.rend(); ++part_it) { - PolygonsPart& part = *part_it; + SingleShape& part = *part_it; for (size_t j = 0; j < part.size(); j++) { fprintf(out_, " #include //Priority queue to prioritise removing unimportant vertices. +#include "geometry/ClosedPolyline.h" +#include "geometry/MixedLinesSet.h" +#include "geometry/OpenPolyline.h" +#include "settings/Settings.h" //To load the parameters from a Settings object. +#include "utils/ExtrusionLine.h" +#include "utils/linearAlg2D.h" //To calculate line deviations and intersecting lines. + namespace cura { @@ -23,12 +30,12 @@ Simplify::Simplify(const Settings& settings) { } -Polygons Simplify::polygon(const Polygons& polygons) const +Shape Simplify::polygon(const Shape& polygons) const { - Polygons result; + Shape result; for (size_t i = 0; i < polygons.size(); ++i) { - result.addIfNotEmpty(polygon(polygons[i])); + result.push_back(polygon(polygons[i]), CheckNonEmptyParam::OnlyIfNotEmpty); } return result; } @@ -45,17 +52,40 @@ ExtrusionLine Simplify::polygon(const ExtrusionLine& polygon) const return simplify(polygon, is_closed); } -Polygons Simplify::polyline(const Polygons& polylines) const +template +LinesSet Simplify::polyline(const LinesSet& polylines) const { - Polygons result; + LinesSet result; for (size_t i = 0; i < polylines.size(); ++i) { - result.addIfNotEmpty(polyline(polylines[i])); + result.push_back(polyline(polylines[i]), CheckNonEmptyParam::OnlyIfNotEmpty); + } + return result; +} + +MixedLinesSet Simplify::polyline(const MixedLinesSet& polylines) const +{ + MixedLinesSet result; + for (const PolylinePtr& polyline_ptr : polylines) + { + if (std::shared_ptr open_polyline = std::dynamic_pointer_cast(polyline_ptr)) + { + result.push_back(std::make_shared(polyline(*open_polyline))); + } + if (std::shared_ptr closed_polyline = std::dynamic_pointer_cast(polyline_ptr)) + { + result.push_back(std::make_shared(polyline(*closed_polyline))); + } } return result; } -Polygon Simplify::polyline(const Polygon& polyline) const +ClosedPolyline Simplify::polyline(const ClosedPolyline& polyline) const +{ + return simplify(polyline, polyline.isExplicitelyClosed()); +} + +OpenPolyline Simplify::polyline(const OpenPolyline& polyline) const { constexpr bool is_closed = false; return simplify(polyline, is_closed); @@ -83,21 +113,23 @@ size_t Simplify::previousNotDeleted(size_t index, const std::vector& to_de return index; } -Polygon Simplify::createEmpty([[maybe_unused]] const Polygon& original) const -{ - return Polygon(); -} - -ExtrusionLine Simplify::createEmpty(const ExtrusionLine& original) const +template<> +ExtrusionLine Simplify::createEmpty(const ExtrusionLine& original) { ExtrusionLine result(original.inset_idx_, original.is_odd_); result.is_closed_ = original.is_closed_; return result; } -void Simplify::appendVertex(Polygon& polygon, const Point2LL& vertex) const +template +Polygonal Simplify::createEmpty(const Polygonal& /*original*/) +{ + return Polygonal(); +} + +void Simplify::appendVertex(Polyline& polygon, const Point2LL& vertex) const { - polygon.add(vertex); + polygon.push_back(vertex); } void Simplify::appendVertex(ExtrusionLine& extrusion_line, const ExtrusionJunction& vertex) const @@ -176,4 +208,207 @@ coord_t Simplify::getAreaDeviation(const ExtrusionJunction& before, const Extrus } } +template +bool Simplify::detectSmall(const Polygonal& polygon, const coord_t& min_size) const +{ + if (polygon.size() < min_size) // For polygon, 2 or fewer vertices is degenerate. Delete it. For polyline, 1 vertex is degenerate. + { + return true; + } + if (polygon.size() == min_size) + { + const auto a = getPosition(polygon[0]); + const auto b = getPosition(polygon[1]); + const auto c = getPosition(polygon[polygon.size() - 1]); + if (std::max(std::max(vSize2(b - a), vSize2(c - a)), vSize2(c - b)) < min_resolution * min_resolution) + { + // ... unless they are degenetate. + return true; + } + } + return false; +} + +template +Polygonal Simplify::simplify(const Polygonal& polygon, const bool is_closed) const +{ + const size_t min_size = is_closed ? 3 : 2; + if (detectSmall(polygon, min_size)) + { + return createEmpty(polygon); + } + if (polygon.size() == min_size) // For polygon, don't reduce below 3. For polyline, not below 2. + { + return polygon; + } + + std::vector to_delete(polygon.size(), false); + auto comparator = [](const std::pair& vertex_a, const std::pair& vertex_b) + { + return vertex_a.second > vertex_b.second || (vertex_a.second == vertex_b.second && vertex_a.first > vertex_b.first); + }; + std::priority_queue, std::vector>, decltype(comparator)> by_importance(comparator); + + Polygonal result = polygon; // Make a copy so that we can also shift vertices. + for (int64_t current_removed = -1; (polygon.size() - current_removed) > min_size && current_removed != 0;) + { + current_removed = 0; + + // Add the initial points. + for (size_t i = 0; i < result.size(); ++i) + { + if (to_delete[i]) + { + continue; + } + const coord_t vertex_importance = importance(result, to_delete, i, is_closed); + by_importance.emplace(i, vertex_importance); + } + + // Iteratively remove the least important point until a threshold. + coord_t vertex_importance = 0; + while (! by_importance.empty() && (polygon.size() - current_removed) > min_size) + { + std::pair vertex = by_importance.top(); + by_importance.pop(); + // The importance may have changed since this vertex was inserted. Re-compute it now. + // If it doesn't change, it's safe to process. + vertex_importance = importance(result, to_delete, vertex.first, is_closed); + if (vertex_importance != vertex.second) + { + by_importance.emplace(vertex.first, vertex_importance); // Re-insert with updated importance. + continue; + } + + if (vertex_importance <= max_deviation_ * max_deviation_) + { + current_removed += remove(result, to_delete, vertex.first, vertex_importance, is_closed) ? 1 : 0; + } + } + } + + // Now remove the marked vertices in one sweep. + Polygonal filtered = createEmpty(polygon); + for (size_t i = 0; i < result.size(); ++i) + { + if (! to_delete[i]) + { + appendVertex(filtered, result[i]); + } + } + + if (detectSmall(filtered, min_size)) + { + return createEmpty(filtered); + } + return filtered; +} + +template +coord_t Simplify::importance(const Polygonal& polygon, const std::vector& to_delete, const size_t index, const bool is_closed) const +{ + const size_t poly_size = polygon.size(); + if (! is_closed && (index == 0 || index == poly_size - 1)) + { + return std::numeric_limits::max(); // Endpoints of the polyline must always be retained. + } + // From here on out we can safely look at the vertex neighbors and assume it's a polygon. We won't go out of bounds of the polyline. + + const Point2LL& vertex = getPosition(polygon[index]); + const size_t before_index = previousNotDeleted(index, to_delete); + const size_t after_index = nextNotDeleted(index, to_delete); + + const coord_t area_deviation = getAreaDeviation(polygon[before_index], polygon[index], polygon[after_index]); + if (area_deviation > max_area_deviation_) // Removing this line causes the variable line width to get flattened out too much. + { + return std::numeric_limits::max(); + } + + const Point2LL& before = getPosition(polygon[before_index]); + const Point2LL& after = getPosition(polygon[after_index]); + const coord_t deviation2 = LinearAlg2D::getDist2FromLine(vertex, before, after); + if (deviation2 <= min_resolution * min_resolution) // Deviation so small that it's always desired to remove them. + { + return deviation2; + } + if (vSize2(before - vertex) > max_resolution_ * max_resolution_ && vSize2(after - vertex) > max_resolution_ * max_resolution_) + { + return std::numeric_limits::max(); // Long line segments, no need to remove this one. + } + return deviation2; +} + +template +bool Simplify::remove(Polygonal& polygon, std::vector& to_delete, const size_t vertex, const coord_t deviation2, const bool is_closed) const +{ + if (deviation2 <= min_resolution * min_resolution) + { + // At less than the minimum resolution we're always allowed to delete the vertex. + // Even if the adjacent line segments are very long. + to_delete[vertex] = true; + return true; + } + + const size_t before = previousNotDeleted(vertex, to_delete); + const size_t after = nextNotDeleted(vertex, to_delete); + const Point2LL& vertex_position = getPosition(polygon[vertex]); + const Point2LL& before_position = getPosition(polygon[before]); + const Point2LL& after_position = getPosition(polygon[after]); + const coord_t length2_before = vSize2(vertex_position - before_position); + const coord_t length2_after = vSize2(vertex_position - after_position); + + if (length2_before <= max_resolution_ * max_resolution_ && length2_after <= max_resolution_ * max_resolution_) // Both adjacent line segments are short. + { + // Removing this vertex does little harm. No long lines will be shifted. + to_delete[vertex] = true; + return true; + } + + // Otherwise, one edge next to this vertex is longer than max_resolution. The other is shorter. + // In this case we want to remove the short edge by replacing it with a vertex where the two surrounding edges intersect. + // Find the two line segments surrounding the short edge here ("before" and "after" edges). + Point2LL before_from, before_to, after_from, after_to; + if (length2_before <= length2_after) // Before is the shorter line. + { + if (! is_closed && before == 0) // No edge before the short edge. + { + return false; // Edge cannot be deleted without shifting a long edge. Don't remove anything. + } + const size_t before_before = previousNotDeleted(before, to_delete); + before_from = getPosition(polygon[before_before]); + before_to = getPosition(polygon[before]); + after_from = getPosition(polygon[vertex]); + after_to = getPosition(polygon[after]); + } + else + { + if (! is_closed && after == polygon.size() - 1) // No edge after the short edge. + { + return false; // Edge cannot be deleted without shifting a long edge. Don't remove anything. + } + const size_t after_after = nextNotDeleted(after, to_delete); + before_from = getPosition(polygon[before]); + before_to = getPosition(polygon[vertex]); + after_from = getPosition(polygon[after]); + after_to = getPosition(polygon[after_after]); + } + Point2LL intersection; + const bool did_intersect = LinearAlg2D::lineLineIntersection(before_from, before_to, after_from, after_to, intersection); + if (! did_intersect) // Lines are parallel. + { + return false; // Cannot remove edge without shifting a long edge. Don't remove anything. + } + const coord_t intersection_deviation = LinearAlg2D::getDist2FromLineSegment(before_to, intersection, after_from); + if (intersection_deviation <= max_deviation_ * max_deviation_) // Intersection point doesn't deviate too much. Use it! + { + to_delete[vertex] = true; + polygon[length2_before <= length2_after ? before : after] = createIntersection(polygon[before], intersection, polygon[after]); + return true; + } + return false; +} + +template OpenLinesSet Simplify::polyline(const OpenLinesSet& polylines) const; +template ClosedLinesSet Simplify::polyline(const ClosedLinesSet& polylines) const; + } // namespace cura diff --git a/src/utils/ToolpathVisualizer.cpp b/src/utils/ToolpathVisualizer.cpp index 34526f8dca..88161c78c7 100644 --- a/src/utils/ToolpathVisualizer.cpp +++ b/src/utils/ToolpathVisualizer.cpp @@ -8,7 +8,7 @@ namespace cura { -void ToolpathVisualizer::outline(const Polygons& input) +void ToolpathVisualizer::outline(const Shape& input) { svg_.writeAreas(input, SVG::Color::GRAY, SVG::Color::NONE, 2); svg_.nextLayer(); @@ -18,20 +18,20 @@ void ToolpathVisualizer::toolpaths(const std::vector& all_segm { for (double w = .9; w > .25; w = 1.0 - (1.0 - w) * 1.2) { - Polygons polys; + Shape polys; for (size_t segment_idx = 0; segment_idx < all_segments.size(); segment_idx++) { ExtrusionSegment s = all_segments[segment_idx]; s.from_.w_ *= w / .9; s.to_.w_ *= w / .9; - Polygons covered = s.toPolygons(false); - polys.add(covered); + Shape covered = s.toShape(false); + polys.push_back(covered); } int c = 255 - 200 * (w - .25); SVG::ColorObject clr(c, c, c); polys = polys.execute(ClipperLib::pftNonZero); polys = PolygonUtils::connect(polys); - for (PolygonRef connected : polys) + for (const Polygon& connected : polys) svg_.writeAreas(connected, clr, SVG::Color::NONE); if (! rounded_visualization) break; @@ -40,12 +40,12 @@ void ToolpathVisualizer::toolpaths(const std::vector& all_segm } -void ToolpathVisualizer::underfill(const Polygons& underfills) +void ToolpathVisualizer::underfill(const Shape& underfills) { svg_.writeAreas(underfills, SVG::ColorObject(0, 128, 255), SVG::Color::NONE); svg_.nextLayer(); } -void ToolpathVisualizer::overfill(const Polygons& overfills, const Polygons& double_overfills) +void ToolpathVisualizer::overfill(const Shape& overfills, const Shape& double_overfills) { svg_.writeAreas(overfills, SVG::ColorObject(255, 128, 0), SVG::Color::NONE); svg_.nextLayer(); @@ -56,7 +56,7 @@ void ToolpathVisualizer::overfill(const Polygons& overfills, const Polygons& dou } } -void ToolpathVisualizer::width_legend(const Polygons& input, coord_t nozzle_size, coord_t max_dev, coord_t min_w, bool rounded_visualization) +void ToolpathVisualizer::width_legend(const Shape& input, coord_t nozzle_size, coord_t max_dev, coord_t min_w, bool rounded_visualization) { auto to_string = [](double v) { @@ -71,7 +71,7 @@ void ToolpathVisualizer::width_legend(const Polygons& input, coord_t nozzle_size legend_btm.p_ += (legend_mid.p_ - legend_btm.p_) / 4; legend_top.p_ += (legend_mid.p_ - legend_top.p_) / 4; ExtrusionSegment legend_segment(legend_btm, legend_top, true, false); - svg_.writeAreas(legend_segment.toPolygons(false), SVG::ColorObject(200, 200, 200), SVG::Color::NONE); // real outline + svg_.writeAreas(legend_segment.toShape(false), SVG::ColorObject(200, 200, 200), SVG::Color::NONE); // real outline std::vector all_segments_plus; all_segments_plus.emplace_back(legend_segment); // colored @@ -143,7 +143,7 @@ void ToolpathVisualizer::widths( // } s.from_.w_ *= w / .9; s.to_.w_ *= w / .9; - Polygons covered = s.toPolygons(); + Shape covered = s.toShape(); svg_.writeAreas(covered, SVG::ColorObject(clr.x_, clr.y_, clr.z_), SVG::Color::NONE); } } diff --git a/src/utils/VoronoiUtils.cpp b/src/utils/VoronoiUtils.cpp index 564a48e99b..3533a98d00 100644 --- a/src/utils/VoronoiUtils.cpp +++ b/src/utils/VoronoiUtils.cpp @@ -8,6 +8,7 @@ #include +#include "geometry/PointMatrix.h" #include "utils/linearAlg2D.h" #include "utils/macros.h" diff --git a/src/utils/VoxelUtils.cpp b/src/utils/VoxelUtils.cpp index ddac6713d5..6d2f28173d 100644 --- a/src/utils/VoxelUtils.cpp +++ b/src/utils/VoxelUtils.cpp @@ -95,9 +95,9 @@ bool VoxelUtils::walkLine(Point3LL start, Point3LL end, const std::function& process_cell_func) const +bool VoxelUtils::walkPolygons(const Shape& polys, coord_t z, const std::function& process_cell_func) const { - for (ConstPolygonRef poly : polys) + for (const Polygon& poly : polys) { Point2LL last = poly.back(); for (Point2LL p : poly) @@ -113,9 +113,9 @@ bool VoxelUtils::walkPolygons(const Polygons& polys, coord_t z, const std::funct return true; } -bool VoxelUtils::walkDilatedPolygons(const Polygons& polys, coord_t z, const DilationKernel& kernel, const std::function& process_cell_func) const +bool VoxelUtils::walkDilatedPolygons(const Shape& polys, coord_t z, const DilationKernel& kernel, const std::function& process_cell_func) const { - Polygons translated = polys; + Shape translated = polys; const Point3LL translation = (Point3LL(1, 1, 1) - kernel.kernel_size_ % 2) * cell_size_ / 2; if (translation.x_ && translation.y_) { @@ -124,9 +124,9 @@ bool VoxelUtils::walkDilatedPolygons(const Polygons& polys, coord_t z, const Dil return walkPolygons(translated, z + translation.z_, dilate(kernel, process_cell_func)); } -bool VoxelUtils::walkAreas(const Polygons& polys, coord_t z, const std::function& process_cell_func) const +bool VoxelUtils::walkAreas(const Shape& polys, coord_t z, const std::function& process_cell_func) const { - Polygons translated = polys; + Shape translated = polys; const Point3LL translation = -cell_size_ / 2; // offset half a cell so that the dots of spreadDotsArea are centered on the middle of the cell isntead of the lower corners. if (translation.x_ && translation.y_) { @@ -135,7 +135,7 @@ bool VoxelUtils::walkAreas(const Polygons& polys, coord_t z, const std::function return _walkAreas(translated, z, process_cell_func); } -bool VoxelUtils::_walkAreas(const Polygons& polys, coord_t z, const std::function& process_cell_func) const +bool VoxelUtils::_walkAreas(const Shape& polys, coord_t z, const std::function& process_cell_func) const { std::vector skin_points = PolygonUtils::spreadDotsArea(polys, Point2LL(cell_size_.x_, cell_size_.y_)); for (Point2LL p : skin_points) @@ -149,9 +149,9 @@ bool VoxelUtils::_walkAreas(const Polygons& polys, coord_t z, const std::functio return true; } -bool VoxelUtils::walkDilatedAreas(const Polygons& polys, coord_t z, const DilationKernel& kernel, const std::function& process_cell_func) const +bool VoxelUtils::walkDilatedAreas(const Shape& polys, coord_t z, const DilationKernel& kernel, const std::function& process_cell_func) const { - Polygons translated = polys; + Shape translated = polys; const Point3LL translation = (Point3LL(1, 1, 1) - kernel.kernel_size_ % 2) * cell_size_ / 2 // offset half a cell when using a n even kernel - cell_size_ / 2; // offset half a cell so that the dots of spreadDotsArea are centered on the middle of the cell isntead of the lower corners. if (translation.x_ && translation.y_) diff --git a/src/utils/channel.cpp b/src/utils/channel.cpp index 45d1711b1b..3b181afa4f 100644 --- a/src/utils/channel.cpp +++ b/src/utils/channel.cpp @@ -1,5 +1,6 @@ -// Copyright (c) 2023 UltiMaker +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher +#ifdef ENABLE_PLUGINS #include "utils/channel.h" @@ -45,3 +46,5 @@ std::shared_ptr createChannel(const ChannelSetupConfiguration& co } } // namespace cura::utils + +#endif // ENABLE_PLUGINS \ No newline at end of file diff --git a/src/utils/LinearAlg2D.cpp b/src/utils/linearAlg2D.cpp similarity index 80% rename from src/utils/LinearAlg2D.cpp rename to src/utils/linearAlg2D.cpp index 2292323251..3fccba9e00 100644 --- a/src/utils/LinearAlg2D.cpp +++ b/src/utils/linearAlg2D.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2023 UltiMaker +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher. #include "utils/linearAlg2D.h" @@ -6,8 +6,11 @@ #include // swap #include #include // atan2 +#include -#include "utils/Point2LL.h" // dot +#include "geometry/Point3Matrix.h" +#include "geometry/PointMatrix.h" +#include "utils/math.h" namespace cura { @@ -262,4 +265,58 @@ Point2LL LinearAlg2D::getBisectorVector(const Point2LL& intersect, const Point2L return (((a0 * vec_len) / std::max(1LL, vSize(a0))) + ((b0 * vec_len) / std::max(1LL, vSize(b0)))) / 2; } +Point3Matrix LinearAlg2D::rotateAround(const Point2LL& middle, double rotation) +{ + PointMatrix rotation_matrix(rotation); + Point3Matrix rotation_matrix_homogeneous(rotation_matrix); + return Point3Matrix::translate(middle).compose(rotation_matrix_homogeneous).compose(Point3Matrix::translate(-middle)); +} + +bool LinearAlg2D::lineLineIntersection(const Point2LL& p1, const Point2LL& p2, const Point2LL& p3, const Point2LL& p4, float& t, float& u) +{ + const float x1mx2 = p1.X - p2.X; + const float x1mx3 = p1.X - p3.X; + const float x3mx4 = p3.X - p4.X; + const float y1my2 = p1.Y - p2.Y; + const float y1my3 = p1.Y - p3.Y; + const float y3my4 = p3.Y - p4.Y; + + t = x1mx3 * y3my4 - y1my3 * x3mx4; + u = x1mx3 * y1my2 - y1my3 * x1mx2; + const float div = x1mx2 * y3my4 - y1my2 * x3mx4; + if (div == 0.0f) + { + return false; + } + + // NOTE: In theory the comparison 0 <= par <= 1 can now done without division for each parameter (as an early-out), + // but this is easier & when the intersection _does_ happen and we want the normalized parameters returned anyway. + t /= div; + u /= div; + return true; +} + +bool LinearAlg2D::segmentSegmentIntersection(const Point2LL& p1, const Point2LL& p2, const Point2LL& p3, const Point2LL& p4, float& t, float& u) +{ + return lineLineIntersection(p1, p2, p3, p4, t, u) && t >= 0.0f && u >= 0.0f && t <= 1.0f && u <= 1.0f; +} + +bool LinearAlg2D::lineLineIntersection(const Point2LL& a, const Point2LL& b, const Point2LL& c, const Point2LL& d, Point2LL& output) +{ + float t, u; + if (! lineLineIntersection(a, b, c, d, t, u)) + { + return false; + } + const Point2LL result = a + (b - a) * t; + if (std::abs(result.X) > std::numeric_limits::max() || std::abs(result.Y) > std::numeric_limits::max()) + { + // Intersection is so far away that it could lead to integer overflows. + // Even though the lines aren't 100% parallel, it's better to pretend they are. They are practically parallel. + return false; + } + output = result; + return true; +} + } // namespace cura diff --git a/src/utils/polygon.cpp b/src/utils/polygon.cpp deleted file mode 100644 index 853104aada..0000000000 --- a/src/utils/polygon.cpp +++ /dev/null @@ -1,1687 +0,0 @@ -// Copyright (c) 2022 Ultimaker B.V. -// CuraEngine is released under the terms of the AGPLv3 or higher. - -#include "utils/polygon.h" - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "utils/ListPolyIt.h" -#include "utils/PolylineStitcher.h" -#include "utils/linearAlg2D.h" // pointLiesOnTheRightOfLine - -namespace cura -{ - -size_t ConstPolygonRef::size() const -{ - return path->size(); -} - -bool ConstPolygonRef::empty() const -{ - return path->empty(); -} - -bool ConstPolygonRef::shorterThan(const coord_t check_length) const -{ - return cura::shorterThan(*this, check_length); -} - -bool ConstPolygonRef::_inside(Point2LL p, bool border_result) const -{ - const ConstPolygonRef thiss = *this; - if (size() < 1) - { - return false; - } - - int crossings = 0; - Point2LL p0 = back(); - for (unsigned int n = 0; n < size(); n++) - { - Point2LL p1 = thiss[n]; - // no tests unless the segment p0-p1 is at least partly at, or to right of, p.X - short comp = LinearAlg2D::pointLiesOnTheRightOfLine(p, p0, p1); - if (comp == 1) - { - crossings++; - } - else if (comp == 0) - { - return border_result; - } - p0 = p1; - } - return (crossings % 2) == 1; -} - - -Polygons ConstPolygonRef::intersection(const ConstPolygonRef& other) const -{ - Polygons ret; - ClipperLib::Clipper clipper(clipper_init); - clipper.AddPath(*path, ClipperLib::ptSubject, true); - clipper.AddPath(*other.path, ClipperLib::ptClip, true); - clipper.Execute(ClipperLib::ctIntersection, ret.paths); - return ret; -} - -bool Polygons::empty() const -{ - return paths.empty(); -} - -Polygons Polygons::approxConvexHull(int extra_outset) -{ - constexpr int overshoot = MM2INT(100); // 10cm (hard-coded value). - - Polygons convex_hull; - // Perform the offset for each polygon one at a time. - // This is necessary because the polygons may overlap, in which case the offset could end up in an infinite loop. - // See http://www.angusj.com/delphi/clipper/documentation/Docs/Units/ClipperLib/Classes/ClipperOffset/_Body.htm - for (const ClipperLib::Path& path : paths) - { - Polygons offset_result; - ClipperLib::ClipperOffset offsetter(1.2, 10.0); - offsetter.AddPath(path, ClipperLib::jtRound, ClipperLib::etClosedPolygon); - offsetter.Execute(offset_result.paths, overshoot); - convex_hull.add(offset_result); - } - return convex_hull.unionPolygons().offset(-overshoot + extra_outset, ClipperLib::jtRound); -} - -void Polygons::makeConvex() -{ - for (PolygonRef poly : *this) - { - if (poly.size() <= 3) - { - continue; // Already convex. - } - - Polygon convexified; - - // Start from a vertex that is known to be on the convex hull: The one with the lowest X. - const size_t start_index = std::min_element( - poly.begin(), - poly.end(), - [](Point2LL a, Point2LL b) - { - return a.X == b.X ? a.Y < b.Y : a.X < b.X; - }) - - poly.begin(); - convexified.path->push_back(poly[start_index]); - - for (size_t i = 1; i <= poly.size(); ++i) - { - const Point2LL& current = poly[(start_index + i) % poly.size()]; - - // Track backwards to make sure we haven't been in a concave pocket for multiple vertices already. - while (convexified.size() >= 2 - && (LinearAlg2D::pointIsLeftOfLine(convexified.path->back(), (*convexified.path)[convexified.size() - 2], current) >= 0 - || LinearAlg2D::pointIsLeftOfLine(convexified.path->back(), (*convexified.path)[convexified.size() - 2], convexified.path->front()) > 0)) - { - convexified.path->pop_back(); - } - convexified.path->push_back(current); - } - // remove last vertex as the starting vertex is added in the last iteration of the loop - convexified.path->pop_back(); - - poly.path->swap(*convexified.path); // Due to vector's implementation, this is constant time. - } -} - -size_t Polygons::pointCount() const -{ - size_t count = 0; - for (const ClipperLib::Path& path : paths) - { - count += path.size(); - } - return count; -} - -bool Polygons::inside(Point2LL p, bool border_result) const -{ - int poly_count_inside = 0; - for (const ClipperLib::Path& poly : *this) - { - const int is_inside_this_poly = ClipperLib::PointInPolygon(p, poly); - if (is_inside_this_poly == -1) - { - return border_result; - } - poly_count_inside += is_inside_this_poly; - } - return (poly_count_inside % 2) == 1; -} - -bool PolygonsPart::inside(Point2LL p, bool border_result) const -{ - if (size() < 1) - { - return false; - } - if (! (*this)[0].inside(p, border_result)) - { - return false; - } - for (unsigned int n = 1; n < paths.size(); n++) - { - if ((*this)[n].inside(p, border_result)) - { - return false; - } - } - return true; -} - -bool Polygons::insideOld(Point2LL p, bool border_result) const -{ - const Polygons& thiss = *this; - if (size() < 1) - { - return false; - } - - int crossings = 0; - for (const ClipperLib::Path& poly : thiss) - { - Point2LL p0 = poly.back(); - for (const Point2LL& p1 : poly) - { - short comp = LinearAlg2D::pointLiesOnTheRightOfLine(p, p0, p1); - if (comp == 1) - { - crossings++; - } - else if (comp == 0) - { - return border_result; - } - p0 = p1; - } - } - return (crossings % 2) == 1; -} - -size_t Polygons::findInside(Point2LL p, bool border_result) -{ - Polygons& thiss = *this; - if (size() < 1) - { - return false; - } - - // NOTE: Keep these vectors fixed-size, they replace an (non-standard, sized at runtime) arrays. - std::vector min_x(size(), std::numeric_limits::max()); - std::vector crossings(size()); - - for (size_t poly_idx = 0; poly_idx < size(); poly_idx++) - { - PolygonRef poly = thiss[poly_idx]; - Point2LL p0 = poly.back(); - for (Point2LL& p1 : poly) - { - short comp = LinearAlg2D::pointLiesOnTheRightOfLine(p, p0, p1); - if (comp == 1) - { - crossings[poly_idx]++; - int64_t x; - if (p1.Y == p0.Y) - { - x = p0.X; - } - else - { - x = p0.X + (p1.X - p0.X) * (p.Y - p0.Y) / (p1.Y - p0.Y); - } - if (x < min_x[poly_idx]) - { - min_x[poly_idx] = x; - } - } - else if (border_result && comp == 0) - { - return poly_idx; - } - p0 = p1; - } - } - - int64_t min_x_uneven = std::numeric_limits::max(); - size_t ret = NO_INDEX; - size_t n_unevens = 0; - for (size_t array_idx = 0; array_idx < size(); array_idx++) - { - if (crossings[array_idx] % 2 == 1) - { - n_unevens++; - if (min_x[array_idx] < min_x_uneven) - { - min_x_uneven = min_x[array_idx]; - ret = array_idx; - } - } - } - if (n_unevens % 2 == 0) - { - ret = NO_INDEX; - } - return ret; -} - -Polygons Polygons::intersectionPolyLines(const Polygons& polylines, bool restitch, const coord_t max_stitch_distance) const -{ - Polygons split_polylines = polylines.splitPolylinesIntoSegments(); - - ClipperLib::PolyTree result; - ClipperLib::Clipper clipper(clipper_init); - clipper.AddPaths(split_polylines.paths, ClipperLib::ptSubject, false); - clipper.AddPaths(paths, ClipperLib::ptClip, true); - clipper.Execute(ClipperLib::ctIntersection, result); - Polygons ret; - ClipperLib::OpenPathsFromPolyTree(result, ret.paths); - - if (restitch) - { - Polygons result_lines, result_polygons; - const coord_t snap_distance = 10_mu; - PolylineStitcher::stitch(ret, result_lines, result_polygons, max_stitch_distance, snap_distance); - ret = result_lines; - // if polylines got stitched into polygons, split them back up into a polyline again, because the result only admits polylines - for (PolygonRef poly : result_polygons) - { - if (poly.empty()) - continue; - if (poly.size() > 2) - { - poly.emplace_back(poly[0]); - } - ret.add(poly); - } - } - - return ret; -} - -void Polygons::toPolylines() -{ - for (PolygonRef poly : *this) - { - if (poly.empty()) - continue; - poly.emplace_back(poly.front()); - } -} - -void Polygons::splitPolylinesIntoSegments(Polygons& result) const -{ - for (ConstPolygonRef poly : *this) - { - poly.splitPolylineIntoSegments(result); - } -} -Polygons Polygons::splitPolylinesIntoSegments() const -{ - Polygons ret; - splitPolylinesIntoSegments(ret); - return ret; -} - -void Polygons::splitPolygonsIntoSegments(Polygons& result) const -{ - for (ConstPolygonRef poly : *this) - { - poly.splitPolygonIntoSegments(result); - } -} -Polygons Polygons::splitPolygonsIntoSegments() const -{ - Polygons ret; - splitPolygonsIntoSegments(ret); - return ret; -} - -coord_t Polygons::polyLineLength() const -{ - coord_t length = 0; - for (ConstPolygonRef poly : *this) - { - length += poly.polylineLength(); - } - return length; -} - -Polygons Polygons::offset(coord_t distance, ClipperLib::JoinType join_type, double miter_limit) const -{ - if (distance == 0) - { - return *this; - } - Polygons ret; - ClipperLib::ClipperOffset clipper(miter_limit, 10.0); - clipper.AddPaths(unionPolygons().paths, join_type, ClipperLib::etClosedPolygon); - clipper.MiterLimit = miter_limit; - clipper.Execute(ret.paths, distance); - return ret; -} - -Polygons Polygons::offset(const std::vector& offset_dists) const -{ - // we need as many offset-dists as points - assert(this->pointCount() == offset_dists.size()); - - Polygons ret; - int i = 0; - for (auto& poly_line : this->paths - | ranges::views::filter( - [](const auto& path) - { - return ! path.empty(); - })) - { - std::vector ret_poly_line; - - auto prev_p = poly_line.back(); - auto prev_dist = offset_dists[i + poly_line.size() - 1]; - - for (const auto& p : poly_line) - { - auto offset_dist = offset_dists[i]; - - auto vec_dir = prev_p - p; - - constexpr coord_t min_vec_len = 10; - if (vSize2(vec_dir) > min_vec_len * min_vec_len) - { - auto offset_p1 = turn90CCW(normal(vec_dir, prev_dist)); - auto offset_p2 = turn90CCW(normal(vec_dir, offset_dist)); - - ret_poly_line.emplace_back(prev_p + offset_p1); - ret_poly_line.emplace_back(p + offset_p2); - } - - prev_p = p; - prev_dist = offset_dist; - i++; - } - - ret.add(ret_poly_line); - } - - ClipperLib::SimplifyPolygons(ret.paths, ClipperLib::PolyFillType::pftPositive); - - return ret; -} - -Polygons ConstPolygonRef::offset(int distance, ClipperLib::JoinType join_type, double miter_limit) const -{ - if (distance == 0) - { - Polygons ret; - ret.add(*this); - return ret; - } - Polygons ret; - ClipperLib::ClipperOffset clipper(miter_limit, 10.0); - clipper.AddPath(*path, join_type, ClipperLib::etClosedPolygon); - clipper.MiterLimit = miter_limit; - clipper.Execute(ret.paths, distance); - return ret; -} - -void PolygonRef::removeColinearEdges(const AngleRadians max_deviation_angle) -{ - // TODO: Can be made more efficient (for example, use pointer-types for process-/skip-indices, so we can swap them without copy). - - size_t num_removed_in_iteration = 0; - do - { - num_removed_in_iteration = 0; - - std::vector process_indices(path->size(), true); - - bool go = true; - while (go) - { - go = false; - - const auto& rpath = *path; - const size_t pathlen = rpath.size(); - if (pathlen <= 3) - { - return; - } - - std::vector skip_indices(path->size(), false); - - ClipperLib::Path new_path; - for (size_t point_idx = 0; point_idx < pathlen; ++point_idx) - { - // Don't iterate directly over process-indices, but do it this way, because there are points _in_ process-indices that should nonetheless be skipped: - if (! process_indices[point_idx]) - { - new_path.push_back(rpath[point_idx]); - continue; - } - - // Should skip the last point for this iteration if the old first was removed (which can be seen from the fact that the new first was skipped): - if (point_idx == (pathlen - 1) && skip_indices[0]) - { - skip_indices[new_path.size()] = true; - go = true; - new_path.push_back(rpath[point_idx]); - break; - } - - const Point2LL& prev = rpath[(point_idx - 1 + pathlen) % pathlen]; - const Point2LL& pt = rpath[point_idx]; - const Point2LL& next = rpath[(point_idx + 1) % pathlen]; - - double angle = LinearAlg2D::getAngleLeft(prev, pt, next); // [0 : 2 * pi] - if (angle >= std::numbers::pi) - { - angle -= std::numbers::pi; - } // map [pi : 2 * pi] to [0 : pi] - - // Check if the angle is within limits for the point to 'make sense', given the maximum deviation. - // If the angle indicates near-parallel segments ignore the point 'pt' - if (angle > max_deviation_angle && angle < std::numbers::pi - max_deviation_angle) - { - new_path.push_back(pt); - } - else if (point_idx != (pathlen - 1)) - { - // Skip the next point, since the current one was removed: - skip_indices[new_path.size()] = true; - go = true; - new_path.push_back(next); - ++point_idx; - } - } - *path = new_path; - num_removed_in_iteration += pathlen - path->size(); - - process_indices.clear(); - process_indices.insert(process_indices.end(), skip_indices.begin(), skip_indices.end()); - } - } while (num_removed_in_iteration > 0); -} - -void PolygonRef::applyMatrix(const PointMatrix& matrix) -{ - for (unsigned int path_idx = 0; path_idx < path->size(); path_idx++) - { - (*path)[path_idx] = matrix.apply((*path)[path_idx]); - } -} -void PolygonRef::applyMatrix(const Point3Matrix& matrix) -{ - for (unsigned int path_idx = 0; path_idx < path->size(); path_idx++) - { - (*path)[path_idx] = matrix.apply((*path)[path_idx]); - } -} - -Polygons Polygons::getOutsidePolygons() const -{ - Polygons ret; - ClipperLib::Clipper clipper(clipper_init); - ClipperLib::PolyTree poly_tree; - constexpr bool paths_are_closed_polys = true; - clipper.AddPaths(paths, ClipperLib::ptSubject, paths_are_closed_polys); - clipper.Execute(ClipperLib::ctUnion, poly_tree); - - for (int outer_poly_idx = 0; outer_poly_idx < poly_tree.ChildCount(); outer_poly_idx++) - { - ClipperLib::PolyNode* child = poly_tree.Childs[outer_poly_idx]; - ret.emplace_back(child->Contour); - } - return ret; -} - -Polygons Polygons::removeEmptyHoles() const -{ - Polygons ret; - ClipperLib::Clipper clipper(clipper_init); - ClipperLib::PolyTree poly_tree; - constexpr bool paths_are_closed_polys = true; - clipper.AddPaths(paths, ClipperLib::ptSubject, paths_are_closed_polys); - clipper.Execute(ClipperLib::ctUnion, poly_tree); - - bool remove_holes = true; - removeEmptyHoles_processPolyTreeNode(poly_tree, remove_holes, ret); - return ret; -} - -Polygons Polygons::getEmptyHoles() const -{ - Polygons ret; - ClipperLib::Clipper clipper(clipper_init); - ClipperLib::PolyTree poly_tree; - constexpr bool paths_are_closed_polys = true; - clipper.AddPaths(paths, ClipperLib::ptSubject, paths_are_closed_polys); - clipper.Execute(ClipperLib::ctUnion, poly_tree); - - bool remove_holes = false; - removeEmptyHoles_processPolyTreeNode(poly_tree, remove_holes, ret); - return ret; -} - -void Polygons::removeEmptyHoles_processPolyTreeNode(const ClipperLib::PolyNode& node, const bool remove_holes, Polygons& ret) const -{ - for (int outer_poly_idx = 0; outer_poly_idx < node.ChildCount(); outer_poly_idx++) - { - ClipperLib::PolyNode* child = node.Childs[outer_poly_idx]; - if (remove_holes) - { - ret.emplace_back(child->Contour); - } - for (int hole_node_idx = 0; hole_node_idx < child->ChildCount(); hole_node_idx++) - { - ClipperLib::PolyNode& hole_node = *child->Childs[hole_node_idx]; - if ((hole_node.ChildCount() > 0) == remove_holes) - { - ret.emplace_back(hole_node.Contour); - removeEmptyHoles_processPolyTreeNode(hole_node, remove_holes, ret); - } - } - } -} - -void Polygons::removeSmallAreas(const double min_area_size, const bool remove_holes) -{ - auto new_end = paths.end(); - if (remove_holes) - { - for (auto it = paths.begin(); it < new_end;) - { - // All polygons smaller than target are removed by replacing them with a polygon from the back of the vector - if (std::abs(INT2MM2(ClipperLib::Area(*it))) < min_area_size) - { - *it = std::move(*--new_end); - continue; - } - it++; // Skipped on removal such that the polygon just swaped in is checked next - } - } - else - { - // For each polygon, computes the signed area, move small outlines at the end of the vector and keep references on small holes - std::vector small_holes; - for (auto it = paths.begin(); it < new_end;) - { - double area = INT2MM2(ClipperLib::Area(*it)); - if (std::abs(area) < min_area_size) - { - if (area >= 0) - { - --new_end; - if (it < new_end) - { - std::swap(*new_end, *it); - continue; - } - else - { // Don't self-swap the last Path - break; - } - } - else - { - small_holes.push_back(*it); - } - } - it++; // Skipped on removal such that the polygon just swaped in is checked next - } - - // Removes small holes that have their first point inside one of the removed outlines - // Iterating in reverse ensures that unprocessed small holes won't be moved - const auto removed_outlines_start = new_end; - for (auto hole_it = small_holes.rbegin(); hole_it < small_holes.rend(); hole_it++) - { - for (auto outline_it = removed_outlines_start; outline_it < paths.end(); outline_it++) - { - if (PolygonRef(*outline_it).inside(*hole_it->begin())) - { - **hole_it = std::move(*--new_end); - break; - } - } - } - } - paths.resize(new_end - paths.begin()); -} - -void Polygons::removeSmallCircumference(const coord_t min_circumference_size, const bool remove_holes) -{ - removeSmallAreaCircumference(0.0, min_circumference_size, remove_holes); -} - -void Polygons::removeSmallAreaCircumference(const double min_area_size, const coord_t min_circumference_size, const bool remove_holes) -{ - Polygons new_polygon; - - bool outline_is_removed = false; - for (ConstPolygonRef poly : paths) - { - double area = poly.area(); - auto circumference = poly.polygonLength(); - bool is_outline = area >= 0; - - if (is_outline) - { - if (circumference >= min_circumference_size && std::abs(area) >= min_area_size) - { - new_polygon.add(poly); - outline_is_removed = false; - } - else - { - outline_is_removed = true; - } - } - else if (outline_is_removed) - { - // containing parent outline is removed; hole should be removed as well - } - else if (! remove_holes || (circumference >= min_circumference_size && std::abs(area) >= min_area_size)) - { - // keep hole-polygon if we do not remove holes, or if its - // circumference is bigger then the minimum circumference size - new_polygon.add(poly); - } - } - - *this = new_polygon; -} - -void Polygons::removeDegenerateVerts() -{ - _removeDegenerateVerts(false); -} - -void Polygons::removeDegenerateVertsPolyline() -{ - _removeDegenerateVerts(true); -} - -void Polygons::_removeDegenerateVerts(const bool for_polyline) -{ - Polygons& thiss = *this; - for (size_t poly_idx = 0; poly_idx < size(); poly_idx++) - { - PolygonRef poly = thiss[poly_idx]; - Polygon result; - - auto isDegenerate = [](const Point2LL& last, const Point2LL& now, const Point2LL& next) - { - Point2LL last_line = now - last; - Point2LL next_line = next - now; - return dot(last_line, next_line) == -1 * vSize(last_line) * vSize(next_line); - }; - - // With polylines, skip the first and last vertex. - const size_t start_vertex = for_polyline ? 1 : 0; - const size_t end_vertex = for_polyline ? poly.size() - 1 : poly.size(); - for (size_t i = 0; i < start_vertex; ++i) - { - result.add(poly[i]); // Add everything before the start vertex. - } - - bool isChanged = false; - for (size_t idx = start_vertex; idx < end_vertex; idx++) - { - const Point2LL& last = (result.size() == 0) ? poly.back() : result.back(); - if (idx + 1 >= poly.size() && result.size() == 0) - { - break; - } - const Point2LL& next = (idx + 1 >= poly.size()) ? result[0] : poly[idx + 1]; - if (isDegenerate(last, poly[idx], next)) - { // lines are in the opposite direction - // don't add vert to the result - isChanged = true; - while (result.size() > 1 && isDegenerate(result[result.size() - 2], result.back(), next)) - { - result.pop_back(); - } - } - else - { - result.add(poly[idx]); - } - } - - for (size_t i = end_vertex; i < poly.size(); ++i) - { - result.add(poly[i]); // Add everything after the end vertex. - } - - if (isChanged) - { - if (for_polyline || result.size() > 2) - { - *poly = *result; - } - else - { - thiss.remove(poly_idx); - poly_idx--; // effectively the next iteration has the same poly_idx (referring to a new poly which is not yet processed) - } - } - } -} - -Polygons Polygons::toPolygons(ClipperLib::PolyTree& poly_tree) -{ - Polygons ret; - ClipperLib::PolyTreeToPaths(poly_tree, ret.paths); - return ret; -} - -Polygons Polygons::fromWkt(const std::string& wkt) -{ - typedef boost::geometry::model::d2::point_xy point_type; - typedef boost::geometry::model::polygon polygon_type; - - polygon_type poly; - boost::geometry::read_wkt(wkt, poly); - - Polygons ret; - - Polygon outer; - for (const auto& point : poly.outer()) - { - outer.add(Point2LL(point.x(), point.y())); - } - ret.add(outer); - - for (const auto& hole : poly.inners()) - { - Polygon inner; - for (const auto& point : hole) - { - inner.add(Point2LL(point.x(), point.y())); - } - ret.add(inner); - } - - return ret; -} - -void Polygons::writeWkt(std::ostream& stream) const -{ - stream << "POLYGON ("; - const auto paths_str = paths - | ranges::views::transform( - [](const auto& path) - { - const auto path_str = path - | ranges::views::transform( - [](const auto& point) - { - return fmt::format("{} {}", point.X, point.Y); - }) - | ranges::views::join(ranges::views::c_str(", ")) | ranges::to(); - return "(" + path_str + ")"; - }) - | ranges::views::join(ranges::views::c_str(" ")) | ranges::to(); - - stream << paths_str; - stream << ")"; -} - -bool ConstPolygonRef::smooth_corner_complex(const Point2LL p1, ListPolyIt& p0_it, ListPolyIt& p2_it, const int64_t shortcut_length) -{ - // walk away from the corner until the shortcut > shortcut_length or it would smooth a piece inward - // - walk in both directions untill shortcut > shortcut_length - // - stop walking in one direction if it would otherwise cut off a corner in that direction - // - same in the other direction - // - stop if both are cut off - // walk by updating p0_it and p2_it - int64_t shortcut_length2 = shortcut_length * shortcut_length; - bool forward_is_blocked = false; - bool forward_is_too_far = false; - bool backward_is_blocked = false; - bool backward_is_too_far = false; - while (true) - { - const bool forward_has_converged = forward_is_blocked || forward_is_too_far; - const bool backward_has_converged = backward_is_blocked || backward_is_too_far; - if (forward_has_converged && backward_has_converged) - { - if (forward_is_too_far && backward_is_too_far && vSize2(p0_it.prev().p() - p2_it.next().p()) < shortcut_length2) - { - // o - // / \ . - // o o - // | | - // \ / . - // | | - // \ / . - // | | - // o o - --p0_it; - ++p2_it; - forward_is_too_far = false; // invalidate data - backward_is_too_far = false; // invalidate data - continue; - } - else - { - break; - } - } - smooth_outward_step(p1, shortcut_length2, p0_it, p2_it, forward_is_blocked, backward_is_blocked, forward_is_too_far, backward_is_too_far); - if (p0_it.prev() == p2_it || p0_it == p2_it) - { // stop if we went all the way around the polygon - // this should only be the case for hole polygons (?) - if (forward_is_too_far && backward_is_too_far) - { - // in case p0_it.prev() == p2_it : - // / . - // / /| - // | becomes | | - // \ \| - // \ . - // in case p0_it == p2_it : - // / . - // / becomes /| - // \ \| - // \ . - break; - } - else - { - // this whole polygon can be removed - return true; - } - } - } - - const Point2LL v02 = p2_it.p() - p0_it.p(); - const int64_t v02_size2 = vSize2(v02); - // set the following: - // p0_it = start point of line - // p2_it = end point of line - if (std::abs(v02_size2 - shortcut_length2) < shortcut_length * 10) // i.e. if (size2 < l * (l+10) && size2 > l * (l-10)) - { // v02 is approximately shortcut length - // handle this separately to avoid rounding problems below in the getPointOnLineWithDist function - // p0_it and p2_it are already correct - } - else if (! backward_is_blocked && ! forward_is_blocked) - { // introduce two new points - // 1----b---->2 - // ^ / - // | / - // | / - // |/ - // |a - // | - // 0 - const int64_t v02_size = sqrt(v02_size2); - - const ListPolyIt p0_2_it = p0_it.prev(); - const ListPolyIt p2_2_it = p2_it.next(); - const Point2LL p2_2 = p2_2_it.p(); - const Point2LL p0_2 = p0_2_it.p(); - const Point2LL v02_2 = p0_2 - p2_2; - const int64_t v02_2_size = vSize(v02_2); - double progress - = std::min(1.0, INT2MM(shortcut_length - v02_size) / INT2MM(v02_2_size - v02_size)); // account for rounding error when v02_2_size is approx equal to v02_size - assert(progress >= 0.0f && progress <= 1.0f && "shortcut length must be between last length and new length"); - const Point2LL new_p0 = p0_it.p() + (p0_2 - p0_it.p()) * progress; - p0_it = ListPolyIt::insertPointNonDuplicate(p0_2_it, p0_it, new_p0); - const Point2LL new_p2 = p2_it.p() + (p2_2 - p2_it.p()) * progress; - p2_it = ListPolyIt::insertPointNonDuplicate(p2_it, p2_2_it, new_p2); - } - else if (! backward_is_blocked) - { // forward is blocked, back is open - // | - // 1->b - // ^ : - // | / - // 0 : - // |/ - // |a - // | - // 0_2 - const ListPolyIt p0_2_it = p0_it.prev(); - const Point2LL p0 = p0_it.p(); - const Point2LL p0_2 = p0_2_it.p(); - const Point2LL p2 = p2_it.p(); - Point2LL new_p0; - bool success = LinearAlg2D::getPointOnLineWithDist(p2, p0, p0_2, shortcut_length, new_p0); - // shortcut length must be possible given that last length was ok and new length is too long - if (success) - { -#ifdef ASSERT_INSANE_OUTPUT - assert(new_p0.X < 400000 && new_p0.Y < 400000); -#endif // #ifdef ASSERT_INSANE_OUTPUT - p0_it = ListPolyIt::insertPointNonDuplicate(p0_2_it, p0_it, new_p0); - } - else - { // if not then a rounding error occured - if (vSize(p2 - p0_2) < vSize2(p2 - p0)) - { - p0_it = p0_2_it; // start shortcut at 0 - } - } - } - else if (! forward_is_blocked) - { // backward is blocked, front is open - // 1----2----b----------->2_2 - // ^ ,-' - // | ,-' - //--0.-' - // a - const ListPolyIt p2_2_it = p2_it.next(); - const Point2LL p0 = p0_it.p(); - const Point2LL p2 = p2_it.p(); - const Point2LL p2_2 = p2_2_it.p(); - Point2LL new_p2; - bool success = LinearAlg2D::getPointOnLineWithDist(p0, p2, p2_2, shortcut_length, new_p2); - // shortcut length must be possible given that last length was ok and new length is too long - if (success) - { -#ifdef ASSERT_INSANE_OUTPUT - assert(new_p2.X < 400000 && new_p2.Y < 400000); -#endif // #ifdef ASSERT_INSANE_OUTPUT - p2_it = ListPolyIt::insertPointNonDuplicate(p2_it, p2_2_it, new_p2); - } - else - { // if not then a rounding error occured - if (vSize(p2_2 - p0) < vSize2(p2 - p0)) - { - p2_it = p2_2_it; // start shortcut at 0 - } - } - } - else - { - // | - // __|2 - // | / > shortcut cannot be of the desired length - // ___|/ . - // 0 - // both are blocked and p0_it and p2_it are already correct - } - // delete all cut off points - while (p0_it.next() != p2_it) - { - p0_it.next().remove(); - } - return false; -} - -void ConstPolygonRef::smooth_outward_step( - const Point2LL p1, - const int64_t shortcut_length2, - ListPolyIt& p0_it, - ListPolyIt& p2_it, - bool& forward_is_blocked, - bool& backward_is_blocked, - bool& forward_is_too_far, - bool& backward_is_too_far) -{ - const bool forward_has_converged = forward_is_blocked || forward_is_too_far; - const bool backward_has_converged = backward_is_blocked || backward_is_too_far; - const Point2LL p0 = p0_it.p(); - const Point2LL p2 = p2_it.p(); - bool walk_forward - = ! forward_has_converged && (backward_has_converged || (vSize2(p2 - p1) < vSize2(p0 - p1))); // whether to walk along the p1-p2 direction or in the p1-p0 direction - - if (walk_forward) - { - const ListPolyIt p2_2_it = p2_it.next(); - const Point2LL p2_2 = p2_2_it.p(); - bool p2_is_left = LinearAlg2D::pointIsLeftOfLine(p2, p0, p2_2) >= 0; - if (! p2_is_left) - { - forward_is_blocked = true; - return; - } - - const Point2LL v02_2 = p2_2 - p0_it.p(); - if (vSize2(v02_2) > shortcut_length2) - { - forward_is_too_far = true; - return; - } - - p2_it = p2_2_it; // make one step in the forward direction - backward_is_blocked = false; // invalidate data about backward walking - backward_is_too_far = false; - return; - } - else - { - const ListPolyIt p0_2_it = p0_it.prev(); - const Point2LL p0_2 = p0_2_it.p(); - bool p0_is_left = LinearAlg2D::pointIsLeftOfLine(p0, p0_2, p2) >= 0; - if (! p0_is_left) - { - backward_is_blocked = true; - return; - } - - const Point2LL v02_2 = p2_it.p() - p0_2; - if (vSize2(v02_2) > shortcut_length2) - { - backward_is_too_far = true; - return; - } - - p0_it = p0_2_it; // make one step in the backward direction - forward_is_blocked = false; // invalidate data about forward walking - forward_is_too_far = false; - return; - } -} - -void ConstPolygonRef::smooth_corner_simple( - const Point2LL p0, - const Point2LL p1, - const Point2LL p2, - const ListPolyIt p0_it, - const ListPolyIt p1_it, - const ListPolyIt p2_it, - const Point2LL v10, - const Point2LL v12, - const Point2LL v02, - const int64_t shortcut_length, - double cos_angle) -{ - // 1----b---->2 - // ^ / - // | / - // | / - // |/ - // |a - // | - // 0 - // ideally a1_size == b1_size - if (vSize2(v02) <= shortcut_length * (shortcut_length + 10) // v02 is approximately shortcut length - || (cos_angle > 0.9999 && LinearAlg2D::getDist2FromLine(p2, p0, p1) < 20 * 20)) // p1 is degenerate - { - // handle this separately to avoid rounding problems below in the getPointOnLineWithDist function - p1_it.remove(); - // don't insert new elements - } - else - { - // compute the distance a1 == b1 to get vSize(ab)==shortcut_length with the given angle between v10 and v12 - // 1 - // /|\ . - // / | \ . - // / | \ . - // / | \ . - // a/____|____\b . - // m - // use trigonometry on the right-angled triangle am1 - double a1m_angle = acos(cos_angle) / 2; - const int64_t a1_size = shortcut_length / 2 / sin(a1m_angle); - if (a1_size * a1_size < vSize2(v10) && a1_size * a1_size < vSize2(v12)) - { - Point2LL a = p1 + normal(v10, a1_size); - Point2LL b = p1 + normal(v12, a1_size); -#ifdef ASSERT_INSANE_OUTPUT - assert(vSize(a) < 4000000); - assert(vSize(b) < 4000000); -#endif // #ifdef ASSERT_INSANE_OUTPUT - ListPolyIt::insertPointNonDuplicate(p0_it, p1_it, a); - ListPolyIt::insertPointNonDuplicate(p1_it, p2_it, b); - p1_it.remove(); - } - else if (vSize2(v12) < vSize2(v10)) - { - // b - // 1->2 - // ^ | - // | / - // | | - // |/ - // |a - // | - // 0 - const Point2LL& b = p2_it.p(); - Point2LL a; - bool success = LinearAlg2D::getPointOnLineWithDist(b, p1, p0, shortcut_length, a); - // v02 has to be longer than ab! - if (success) - { // if not success then assume a is negligibly close to 0, but rounding errors caused a problem -#ifdef ASSERT_INSANE_OUTPUT - assert(vSize(a) < 4000000); -#endif // #ifdef ASSERT_INSANE_OUTPUT - ListPolyIt::insertPointNonDuplicate(p0_it, p1_it, a); - } - p1_it.remove(); - } - else - { - // 1---------b----------->2 - // ^ ,-' - // | ,-' - // 0.-' - // a - const Point2LL& a = p0_it.p(); - Point2LL b; - bool success = LinearAlg2D::getPointOnLineWithDist(a, p1, p2, shortcut_length, b); - // v02 has to be longer than ab! - if (success) - { // if not success then assume b is negligibly close to 2, but rounding errors caused a problem -#ifdef ASSERT_INSANE_OUTPUT - assert(vSize(b) < 4000000); -#endif // #ifdef ASSERT_INSANE_OUTPUT - ListPolyIt::insertPointNonDuplicate(p1_it, p2_it, b); - } - p1_it.remove(); - } - } -} - -void ConstPolygonRef::smooth_outward(const AngleDegrees min_angle, int shortcut_length, PolygonRef result) const -{ - // example of smoothed out corner: - // - // 6 - // ^ - // | - // inside | outside - // 2>3>4>5 - // ^ / . - // | / . - // 1 / . - // ^ / . - // |/ . - // | - // | - // 0 - - int shortcut_length2 = shortcut_length * shortcut_length; - double cos_min_angle = cos(min_angle / 180 * std::numbers::pi); - - ListPolygon poly; - ListPolyIt::convertPolygonToList(*this, poly); - - { // remove duplicate vertices - ListPolyIt p1_it(poly, poly.begin()); - do - { - ListPolyIt next = p1_it.next(); - if (vSize2(p1_it.p() - next.p()) < 10 * 10) - { - p1_it.remove(); - } - p1_it = next; - } while (p1_it != ListPolyIt(poly, poly.begin())); - } - - ListPolyIt p1_it(poly, poly.begin()); - do - { - const Point2LL p1 = p1_it.p(); - ListPolyIt p0_it = p1_it.prev(); - ListPolyIt p2_it = p1_it.next(); - const Point2LL p0 = p0_it.p(); - const Point2LL p2 = p2_it.p(); - - const Point2LL v10 = p0 - p1; - const Point2LL v12 = p2 - p1; - double cos_angle = INT2MM(INT2MM(dot(v10, v12))) / vSizeMM(v10) / vSizeMM(v12); - bool is_left_angle = LinearAlg2D::pointIsLeftOfLine(p1, p0, p2) > 0; - if (cos_angle > cos_min_angle && is_left_angle) - { - // angle is so sharp that it can be removed - Point2LL v02 = p2_it.p() - p0_it.p(); - if (vSize2(v02) >= shortcut_length2) - { - smooth_corner_simple(p0, p1, p2, p0_it, p1_it, p2_it, v10, v12, v02, shortcut_length, cos_angle); - } - else - { - bool remove_poly = smooth_corner_complex(p1, p0_it, p2_it, shortcut_length); // edits p0_it and p2_it! - if (remove_poly) - { - // don't convert ListPolygon into result - return; - } - } - // update: - p1_it = p2_it; // next point to consider for whether it's an internal corner - } - else - { - ++p1_it; - } - } while (p1_it != ListPolyIt(poly, poly.begin())); - - ListPolyIt::convertListPolygonToPolygon(poly, result); -} - -Polygons Polygons::smooth_outward(const AngleDegrees max_angle, int shortcut_length) -{ - Polygons ret; - for (unsigned int p = 0; p < size(); p++) - { - PolygonRef poly(paths[p]); - if (poly.size() < 3) - { - continue; - } - if (poly.size() == 3) - { - ret.add(poly); - continue; - } - poly.smooth_outward(max_angle, shortcut_length, ret.newPoly()); - if (ret.back().size() < 3) - { - ret.paths.resize(ret.paths.size() - 1); - } - } - return ret; -} - - -void ConstPolygonRef::splitPolylineIntoSegments(Polygons& result) const -{ - Point2LL last = front(); - for (size_t idx = 1; idx < size(); idx++) - { - Point2LL p = (*this)[idx]; - result.addLine(last, p); - last = p; - } -} - -Polygons ConstPolygonRef::splitPolylineIntoSegments() const -{ - Polygons ret; - splitPolylineIntoSegments(ret); - return ret; -} - -void ConstPolygonRef::splitPolygonIntoSegments(Polygons& result) const -{ - splitPolylineIntoSegments(result); - result.addLine(back(), front()); -} - -Polygons ConstPolygonRef::splitPolygonIntoSegments() const -{ - Polygons ret; - splitPolygonIntoSegments(ret); - return ret; -} - -void ConstPolygonRef::smooth(int remove_length, PolygonRef result) const -{ - // a typical zigzag with the middle part to be removed by removing (1) : - // - // 3 - // ^ - // | - // | - // inside | outside - // 1--->2 - // ^ - // | - // | - // | - // 0 - const ConstPolygonRef& thiss = *path; - ClipperLib::Path* poly = result.path; - if (size() > 0) - { - poly->push_back(thiss[0]); - } - auto is_zigzag = [remove_length](const int64_t v02_size, const int64_t v12_size, const int64_t v13_size, const int64_t dot1, const int64_t dot2) - { - if (v12_size > remove_length) - { // v12 or v13 is too long - return false; - } - const bool p1_is_left_of_v02 = dot1 < 0; - if (! p1_is_left_of_v02) - { // removing p1 wouldn't smooth outward - return false; - } - const bool p2_is_left_of_v13 = dot2 > 0; - if (p2_is_left_of_v13) - { // l0123 doesn't constitute a zigzag ''|,, - return false; - } - if (-dot1 <= v02_size * v12_size / 2) - { // angle at p1 isn't sharp enough - return false; - } - if (-dot2 <= v13_size * v12_size / 2) - { // angle at p2 isn't sharp enough - return false; - } - return true; - }; - Point2LL v02 = thiss[2] - thiss[0]; - Point2LL v02T = turn90CCW(v02); - int64_t v02_size = vSize(v02); - bool force_push = false; - for (unsigned int poly_idx = 1; poly_idx < size(); poly_idx++) - { - const Point2LL& p1 = thiss[poly_idx]; - const Point2LL& p2 = thiss[(poly_idx + 1) % size()]; - const Point2LL& p3 = thiss[(poly_idx + 2) % size()]; - // v02 computed in last iteration - // v02_size as well - const Point2LL v12 = p2 - p1; - const int64_t v12_size = vSize(v12); - const Point2LL v13 = p3 - p1; - const int64_t v13_size = vSize(v13); - - // v02T computed in last iteration - const int64_t dot1 = dot(v02T, v12); - const Point2LL v13T = turn90CCW(v13); - const int64_t dot2 = dot(v13T, v12); - bool push_point = force_push || ! is_zigzag(v02_size, v12_size, v13_size, dot1, dot2); - force_push = false; - if (push_point) - { - poly->push_back(p1); - } - else - { - // do not add the current one to the result - force_push = true; // ensure the next point is added; it cannot also be a zigzag - } - v02T = v13T; - v02 = v13; - v02_size = v13_size; - } -} - -Polygons Polygons::smooth(int remove_length) const -{ - Polygons ret; - for (unsigned int p = 0; p < size(); p++) - { - ConstPolygonRef poly(paths[p]); - if (poly.size() < 3) - { - continue; - } - if (poly.size() == 3) - { - ret.add(poly); - continue; - } - poly.smooth(remove_length, ret.newPoly()); - PolygonRef back = ret.back(); - if (back.size() < 3) - { - back.path->resize(back.path->size() - 1); - } - } - return ret; -} - -void ConstPolygonRef::smooth2(int remove_length, PolygonRef result) const -{ - const ConstPolygonRef& thiss = *this; - ClipperLib::Path* poly = result.path; - if (thiss.size() > 0) - { - poly->push_back(thiss[0]); - } - for (unsigned int poly_idx = 1; poly_idx < thiss.size(); poly_idx++) - { - const Point2LL& last = thiss[poly_idx - 1]; - const Point2LL& now = thiss[poly_idx]; - const Point2LL& next = thiss[(poly_idx + 1) % thiss.size()]; - if (shorterThen(last - now, remove_length) && shorterThen(now - next, remove_length)) - { - poly_idx++; // skip the next line piece (dont escalate the removal of edges) - if (poly_idx < thiss.size()) - { - poly->push_back(thiss[poly_idx]); - } - } - else - { - poly->push_back(thiss[poly_idx]); - } - } -} - -Polygons Polygons::smooth2(int remove_length, int min_area) const -{ - Polygons ret; - for (unsigned int p = 0; p < size(); p++) - { - ConstPolygonRef poly(paths[p]); - if (poly.size() == 0) - { - continue; - } - if (poly.area() < min_area || poly.size() <= 5) // when optimally removing, a poly with 5 pieces results in a triangle. Smaller polys dont have area! - { - ret.add(poly); - continue; - } - if (poly.size() < 4) - { - ret.add(poly); - } - else - { - poly.smooth2(remove_length, ret.newPoly()); - } - } - return ret; -} - -double Polygons::area() const -{ - double area = 0.0; - for (unsigned int poly_idx = 0; poly_idx < size(); poly_idx++) - { - area += operator[](poly_idx).area(); - // note: holes already have negative area - } - return area; -} - -std::vector Polygons::splitIntoParts(bool unionAll) const -{ - std::vector ret; - ClipperLib::Clipper clipper(clipper_init); - ClipperLib::PolyTree resultPolyTree; - clipper.AddPaths(paths, ClipperLib::ptSubject, true); - if (unionAll) - clipper.Execute(ClipperLib::ctUnion, resultPolyTree, ClipperLib::pftNonZero, ClipperLib::pftNonZero); - else - clipper.Execute(ClipperLib::ctUnion, resultPolyTree); - - splitIntoParts_processPolyTreeNode(&resultPolyTree, ret); - return ret; -} - -void Polygons::splitIntoParts_processPolyTreeNode(ClipperLib::PolyNode* node, std::vector& ret) const -{ - for (int n = 0; n < node->ChildCount(); n++) - { - ClipperLib::PolyNode* child = node->Childs[n]; - PolygonsPart part; - part.add(child->Contour); - for (int i = 0; i < child->ChildCount(); i++) - { - part.add(child->Childs[i]->Contour); - splitIntoParts_processPolyTreeNode(child->Childs[i], ret); - } - ret.push_back(part); - } -} - -std::vector Polygons::sortByNesting() const -{ - std::vector ret; - ClipperLib::Clipper clipper(clipper_init); - ClipperLib::PolyTree resultPolyTree; - clipper.AddPaths(paths, ClipperLib::ptSubject, true); - clipper.Execute(ClipperLib::ctUnion, resultPolyTree); - - sortByNesting_processPolyTreeNode(&resultPolyTree, 0, ret); - return ret; -} - -void Polygons::sortByNesting_processPolyTreeNode(ClipperLib::PolyNode* node, const size_t nesting_idx, std::vector& ret) const -{ - for (int n = 0; n < node->ChildCount(); n++) - { - ClipperLib::PolyNode* child = node->Childs[n]; - if (nesting_idx >= ret.size()) - { - ret.resize(nesting_idx + 1); - } - ret[nesting_idx].add(child->Contour); - sortByNesting_processPolyTreeNode(child, nesting_idx + 1, ret); - } -} - -Polygons Polygons::tubeShape(const coord_t inner_offset, const coord_t outer_offset) const -{ - return this->offset(outer_offset).difference(this->offset(-inner_offset)); -} - -size_t PartsView::getPartContaining(size_t poly_idx, size_t* boundary_poly_idx) const -{ - const PartsView& partsView = *this; - for (size_t part_idx_now = 0; part_idx_now < partsView.size(); part_idx_now++) - { - const std::vector& partView = partsView[part_idx_now]; - if (partView.size() == 0) - { - continue; - } - std::vector::const_iterator result = std::find(partView.begin(), partView.end(), poly_idx); - if (result != partView.end()) - { - if (boundary_poly_idx) - { - *boundary_poly_idx = partView[0]; - } - return part_idx_now; - } - } - return NO_INDEX; -} - -PolygonsPart PartsView::assemblePart(size_t part_idx) const -{ - const PartsView& partsView = *this; - PolygonsPart ret; - if (part_idx != NO_INDEX) - { - for (size_t poly_idx_ff : partsView[part_idx]) - { - ret.add(polygons_[poly_idx_ff]); - } - } - return ret; -} - -PolygonsPart PartsView::assemblePartContaining(size_t poly_idx, size_t* boundary_poly_idx) const -{ - PolygonsPart ret; - size_t part_idx = getPartContaining(poly_idx, boundary_poly_idx); - if (part_idx != NO_INDEX) - { - return assemblePart(part_idx); - } - return ret; -} - -PartsView Polygons::splitIntoPartsView(bool unionAll) -{ - Polygons reordered; - PartsView partsView(*this); - ClipperLib::Clipper clipper(clipper_init); - ClipperLib::PolyTree resultPolyTree; - clipper.AddPaths(paths, ClipperLib::ptSubject, true); - if (unionAll) - clipper.Execute(ClipperLib::ctUnion, resultPolyTree, ClipperLib::pftNonZero, ClipperLib::pftNonZero); - else - clipper.Execute(ClipperLib::ctUnion, resultPolyTree); - - splitIntoPartsView_processPolyTreeNode(partsView, reordered, &resultPolyTree); - - (*this) = reordered; - return partsView; -} - -void Polygons::splitIntoPartsView_processPolyTreeNode(PartsView& partsView, Polygons& reordered, ClipperLib::PolyNode* node) const -{ - for (int n = 0; n < node->ChildCount(); n++) - { - ClipperLib::PolyNode* child = node->Childs[n]; - partsView.emplace_back(); - size_t pos = partsView.size() - 1; - partsView[pos].push_back(reordered.size()); - reordered.add(child->Contour); // TODO: should this steal the internal representation for speed? - for (int i = 0; i < child->ChildCount(); i++) - { - partsView[pos].push_back(reordered.size()); - reordered.add(child->Childs[i]->Contour); - splitIntoPartsView_processPolyTreeNode(partsView, reordered, child->Childs[i]); - } - } -} - -void Polygons::ensureManifold() -{ - const Polygons& polys = *this; - std::vector duplicate_locations; - std::unordered_set poly_locations; - for (size_t poly_idx = 0; poly_idx < polys.size(); poly_idx++) - { - ConstPolygonRef poly = polys[poly_idx]; - for (size_t point_idx = 0; point_idx < poly.size(); point_idx++) - { - Point2LL p = poly[point_idx]; - if (poly_locations.find(p) != poly_locations.end()) - { - duplicate_locations.push_back(p); - } - poly_locations.emplace(p); - } - } - Polygons removal_dots; - for (Point2LL p : duplicate_locations) - { - PolygonRef dot = removal_dots.newPoly(); - dot.add(p + Point2LL(0, 5)); - dot.add(p + Point2LL(5, 0)); - dot.add(p + Point2LL(0, -5)); - dot.add(p + Point2LL(-5, 0)); - } - if (! removal_dots.empty()) - { - *this = polys.difference(removal_dots); - } -} - -} // namespace cura diff --git a/src/utils/polygonUtils.cpp b/src/utils/polygonUtils.cpp index 4855f34046..4b961d2bec 100644 --- a/src/utils/polygonUtils.cpp +++ b/src/utils/polygonUtils.cpp @@ -1,15 +1,19 @@ -// Copyright (c) 2023 UltiMaker +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher #include "utils/polygonUtils.h" #include #include +#include #include #include #include +#include "geometry/OpenPolyline.h" +#include "geometry/PointMatrix.h" +#include "geometry/SingleShape.h" #include "infill.h" #include "utils/SparsePointGridInclusive.h" #include "utils/linearAlg2D.h" @@ -18,7 +22,6 @@ #include #include "utils/AABB.h" -#include "utils/SVG.h" #endif namespace cura @@ -29,84 +32,21 @@ const std::function PolygonUtils::no_penalty_function = [](Point2 return 0; }; -int64_t PolygonUtils::segmentLength(PolygonsPointIndex start, PolygonsPointIndex end) -{ - assert(start.poly_idx_ == end.poly_idx_); - int64_t segment_length = 0; - Point2LL prev_vert = start.p(); - ConstPolygonRef poly = (*start.polygons_)[start.poly_idx_]; - for (unsigned int point_idx = 1; point_idx <= poly.size(); point_idx++) - { - unsigned int vert_idx = (start.point_idx_ + point_idx) % poly.size(); - Point2LL vert = poly[vert_idx]; - segment_length += vSize(vert - prev_vert); - - if (vert_idx == end.point_idx_) - { // break at the end of the loop, so that [end] and [start] may be the same - return segment_length; - } - prev_vert = vert; - } - assert(false && "The segment end should have been encountered!"); - return segment_length; -} - -void PolygonUtils::spreadDots(PolygonsPointIndex start, PolygonsPointIndex end, unsigned int n_dots, std::vector& result) -{ - assert(start.poly_idx_ == end.poly_idx_); - int64_t segment_length = segmentLength(start, end); - - ConstPolygonRef poly = (*start.polygons_)[start.poly_idx_]; - unsigned int n_dots_in_between = n_dots; - if (start == end) - { - result.emplace_back(start.p(), start.point_idx_, poly); - n_dots_in_between--; // generate one less below, because we already pushed a point to the result - } - - int64_t wipe_point_dist = segment_length / (n_dots_in_between + 1); // distance between two wipe points; keep a distance at both sides of the segment - - int64_t dist_past_vert_to_insert_point = wipe_point_dist; - unsigned int n_points_generated = 0; - PolygonsPointIndex vert = start; - while (true) - { - Point2LL p0 = vert.p(); - Point2LL p1 = vert.next().p(); - Point2LL p0p1 = p1 - p0; - int64_t p0p1_length = vSize(p0p1); - - for (; dist_past_vert_to_insert_point < p0p1_length && n_points_generated < n_dots_in_between; dist_past_vert_to_insert_point += wipe_point_dist) - { - result.emplace_back(p0 + normal(p0p1, dist_past_vert_to_insert_point), vert.point_idx_, poly); - n_points_generated++; - } - dist_past_vert_to_insert_point -= p0p1_length; - - ++vert; - if (vert == end) - { // break at end of loop to allow for [start] and [end] being the same, meaning the full polygon - break; - } - } - assert(result.size() == n_dots && "we didn't generate as many wipe locations as we asked for."); -} - -std::vector PolygonUtils::spreadDotsArea(const Polygons& polygons, coord_t grid_size) +std::vector PolygonUtils::spreadDotsArea(const Shape& polygons, coord_t grid_size) { return spreadDotsArea(polygons, Point2LL(grid_size, grid_size)); } -std::vector PolygonUtils::spreadDotsArea(const Polygons& polygons, Point2LL grid_size) +std::vector PolygonUtils::spreadDotsArea(const Shape& polygons, Point2LL grid_size) { std::vector dummy_toolpaths; Settings dummy_settings; Infill infill_gen(EFillMethod::LINES, false, false, polygons, 0, grid_size.X, 0, 1, 0, 0, 0, 0, 0); - Polygons result_polygons; - Polygons result_lines; + Shape result_polygons; + OpenLinesSet result_lines; infill_gen.generate(dummy_toolpaths, result_polygons, result_lines, dummy_settings, 0, SectionType::DOTS); // FIXME: @jellespijker make sure the propper layer nr is used std::vector result; - for (PolygonRef line : result_lines) + for (const OpenPolyline& line : result_lines) { assert(line.size() == 2); Point2LL a = line[0]; @@ -129,7 +69,7 @@ std::vector PolygonUtils::spreadDotsArea(const Polygons& polygons, Poi bool PolygonUtils::lineSegmentPolygonsIntersection( const Point2LL& a, const Point2LL& b, - const Polygons& current_outlines, + const Shape& current_outlines, const LocToLineGrid& outline_locator, Point2LL& result, const coord_t within_max_dist) @@ -179,7 +119,7 @@ bool PolygonUtils::lineSegmentPolygonsIntersection( return closest_dist2 < within_max_dist2; } -Point2LL PolygonUtils::getVertexInwardNormal(ConstPolygonRef poly, unsigned int point_idx) +Point2LL PolygonUtils::getVertexInwardNormal(const Polyline& poly, unsigned int point_idx) { Point2LL p1 = poly[point_idx]; @@ -217,45 +157,26 @@ Point2LL PolygonUtils::getVertexInwardNormal(ConstPolygonRef poly, unsigned int return n; } -Point2LL PolygonUtils::getBoundaryPointWithOffset(ConstPolygonRef poly, unsigned int point_idx, int64_t offset) +Point2LL PolygonUtils::getBoundaryPointWithOffset(const Polyline& poly, unsigned int point_idx, int64_t offset) { return poly[point_idx] + normal(getVertexInwardNormal(poly, point_idx), -offset); } -Point2LL PolygonUtils::moveInsideDiagonally(ClosestPolygonPoint point_on_boundary, int64_t inset) -{ - if (! point_on_boundary.isValid()) - { - return no_point; - } - ConstPolygonRef poly = **point_on_boundary.poly_; - Point2LL p0 = poly[point_on_boundary.point_idx_]; - Point2LL p1 = poly[(point_on_boundary.point_idx_ + 1) % poly.size()]; - if (vSize2(p0 - point_on_boundary.location_) < vSize2(p1 - point_on_boundary.location_)) - { - return point_on_boundary.location_ + normal(getVertexInwardNormal(poly, point_on_boundary.point_idx_), inset); - } - else - { - return point_on_boundary.location_ + normal(getVertexInwardNormal(poly, (point_on_boundary.point_idx_ + 1) % poly.size()), inset); - } -} - -unsigned int PolygonUtils::moveOutside(const Polygons& polygons, Point2LL& from, int distance, int64_t maxDist2) +unsigned int PolygonUtils::moveOutside(const Shape& polygons, Point2LL& from, int distance, int64_t maxDist2) { return moveInside(polygons, from, -distance, maxDist2); } -ClosestPolygonPoint PolygonUtils::moveInside2( - const Polygons& polygons, +ClosestPointPolygon PolygonUtils::moveInside2( + const Shape& polygons, Point2LL& from, const int distance, const int64_t max_dist2, - const Polygons* loc_to_line_polygons, + const Shape* loc_to_line_polygons, const LocToLineGrid* loc_to_line_grid, const std::function& penalty_function) { - std::optional closest_polygon_point; + std::optional closest_polygon_point; if (loc_to_line_grid) { closest_polygon_point = findClose(from, *loc_to_line_polygons, *loc_to_line_grid, penalty_function); @@ -267,16 +188,16 @@ ClosestPolygonPoint PolygonUtils::moveInside2( return _moveInside2(*closest_polygon_point, distance, from, max_dist2); } -ClosestPolygonPoint PolygonUtils::moveInside2( - const Polygons& loc_to_line_polygons, - ConstPolygonRef polygon, +ClosestPointPolygon PolygonUtils::moveInside2( + const Shape& loc_to_line_polygons, + const Polygon& polygon, Point2LL& from, const int distance, const int64_t max_dist2, const LocToLineGrid* loc_to_line_grid, const std::function& penalty_function) { - std::optional closest_polygon_point; + std::optional closest_polygon_point; if (loc_to_line_grid) { closest_polygon_point = findClose(from, loc_to_line_polygons, *loc_to_line_grid, penalty_function); @@ -288,11 +209,11 @@ ClosestPolygonPoint PolygonUtils::moveInside2( return _moveInside2(*closest_polygon_point, distance, from, max_dist2); } -ClosestPolygonPoint PolygonUtils::_moveInside2(const ClosestPolygonPoint& closest_polygon_point, const int distance, Point2LL& from, const int64_t max_dist2) +ClosestPointPolygon PolygonUtils::_moveInside2(const ClosestPointPolygon& closest_polygon_point, const int distance, Point2LL& from, const int64_t max_dist2) { if (! closest_polygon_point.isValid()) { - return ClosestPolygonPoint(); // stub with invalid indices to signify we haven't found any + return ClosestPointPolygon(); // stub with invalid indices to signify we haven't found any } const Point2LL v_boundary_from = from - closest_polygon_point.location_; Point2LL result = moveInside(closest_polygon_point, distance); @@ -314,7 +235,7 @@ ClosestPolygonPoint PolygonUtils::_moveInside2(const ClosestPolygonPoint& closes { if (vSize2(v_boundary_from) > max_dist2) { - return ClosestPolygonPoint(*closest_polygon_point.poly_); // stub with invalid indices to signify we haven't found any + return ClosestPointPolygon(closest_polygon_point.poly_); // stub with invalid indices to signify we haven't found any } else { @@ -327,7 +248,7 @@ ClosestPolygonPoint PolygonUtils::_moveInside2(const ClosestPolygonPoint& closes /* * Implementation assumes moving inside, but moving outside should just as well be possible. */ -size_t PolygonUtils::moveInside(const Polygons& polygons, Point2LL& from, int distance, int64_t maxDist2) +size_t PolygonUtils::moveInside(const Shape& polygons, Point2LL& from, int distance, int64_t maxDist2) { Point2LL ret = from; int64_t bestDist2 = std::numeric_limits::max(); @@ -335,7 +256,7 @@ size_t PolygonUtils::moveInside(const Polygons& polygons, Point2LL& from, int di bool is_already_on_correct_side_of_boundary = false; // whether [from] is already on the right side of the boundary for (size_t poly_idx = 0; poly_idx < polygons.size(); poly_idx++) { - ConstPolygonRef poly = polygons[poly_idx]; + const Polygon& poly = polygons[poly_idx]; if (poly.size() < 2) continue; Point2LL p0 = poly[poly.size() - 2]; @@ -447,7 +368,7 @@ size_t PolygonUtils::moveInside(const Polygons& polygons, Point2LL& from, int di } // Version that works on single PolygonRef. -unsigned int PolygonUtils::moveInside(const ConstPolygonRef polygon, Point2LL& from, int distance, int64_t maxDist2) +unsigned int PolygonUtils::moveInside(const ClosedPolyline& polygon, Point2LL& from, int distance, int64_t maxDist2) { // TODO: This is copied from the moveInside of Polygons. /* @@ -565,12 +486,12 @@ unsigned int PolygonUtils::moveInside(const ConstPolygonRef polygon, Point2LL& f return 0; } -Point2LL PolygonUtils::moveOutside(const ClosestPolygonPoint& cpp, const int distance) +Point2LL PolygonUtils::moveOutside(const ClosestPointPolygon& cpp, const int distance) { return moveInside(cpp, -distance); } -Point2LL PolygonUtils::moveInside(const ClosestPolygonPoint& cpp, const int distance) +Point2LL PolygonUtils::moveInside(const ClosestPointPolygon& cpp, const int distance) { if (! cpp.isValid()) { @@ -580,7 +501,7 @@ Point2LL PolygonUtils::moveInside(const ClosestPolygonPoint& cpp, const int dist { // the point which is assumed to be on the boundary doesn't have to be moved return cpp.location_; } - ConstPolygonRef poly = *cpp.poly_; + const Polyline& poly = *cpp.poly_; unsigned int point_idx = cpp.point_idx_; const Point2LL& on_boundary = cpp.location_; @@ -616,33 +537,33 @@ Point2LL PolygonUtils::moveInside(const ClosestPolygonPoint& cpp, const int dist } } -ClosestPolygonPoint PolygonUtils::ensureInsideOrOutside( - const Polygons& polygons, +ClosestPointPolygon PolygonUtils::ensureInsideOrOutside( + const Shape& polygons, Point2LL& from, int preferred_dist_inside, int64_t max_dist2, - const Polygons* loc_to_line_polygons, + const Shape* loc_to_line_polygons, const LocToLineGrid* loc_to_line_grid, const std::function& penalty_function) { - const ClosestPolygonPoint closest_polygon_point = moveInside2(polygons, from, preferred_dist_inside, max_dist2, loc_to_line_polygons, loc_to_line_grid, penalty_function); + const ClosestPointPolygon closest_polygon_point = moveInside2(polygons, from, preferred_dist_inside, max_dist2, loc_to_line_polygons, loc_to_line_grid, penalty_function); return ensureInsideOrOutside(polygons, from, closest_polygon_point, preferred_dist_inside, loc_to_line_polygons, loc_to_line_grid, penalty_function); } -ClosestPolygonPoint PolygonUtils::ensureInsideOrOutside( - const Polygons& polygons, +ClosestPointPolygon PolygonUtils::ensureInsideOrOutside( + const Shape& polygons, Point2LL& from, - const ClosestPolygonPoint& closest_polygon_point, + const ClosestPointPolygon& closest_polygon_point, int preferred_dist_inside, - const Polygons* loc_to_line_polygons, + const Shape* loc_to_line_polygons, const LocToLineGrid* loc_to_line_grid, const std::function& penalty_function) { if (! closest_polygon_point.isValid()) { - return ClosestPolygonPoint(); // we couldn't move inside + return ClosestPointPolygon(); // we couldn't move inside } - ConstPolygonRef closest_poly = *closest_polygon_point.poly_; + const Polygon& closest_poly = *closest_polygon_point.poly_; bool is_outside_boundary = closest_poly.orientation(); { @@ -670,13 +591,13 @@ ClosestPolygonPoint PolygonUtils::ensureInsideOrOutside( // The offset is performed on the closest reference polygon in order to save computation time { const coord_t offset = (is_outside_boundary) ? -preferred_dist_inside : preferred_dist_inside; // perform inset on outer boundary and outset on holes - Polygons insetted + Shape insetted = closest_poly.offset(offset / 2); // perform less inset, because chances are (thin parts of) the polygon will disappear, given that moveInside did an overshoot if (insetted.size() == 0) { - return ClosestPolygonPoint(); // we couldn't move inside + return ClosestPointPolygon(); // we couldn't move inside } - ClosestPolygonPoint inside = findClosest(from, insetted, penalty_function); + ClosestPointPolygon inside = findClosest(from, insetted, penalty_function); if (inside.isValid()) { bool is_inside = polygons.inside(inside.location_); @@ -684,73 +605,29 @@ ClosestPolygonPoint PolygonUtils::ensureInsideOrOutside( { // Insetting from the reference polygon ended up outside another polygon. // Perform an offset on all polygons instead. - Polygons all_insetted = polygons.offset(-preferred_dist_inside); - ClosestPolygonPoint overall_inside = findClosest(from, all_insetted, penalty_function); + Shape all_insetted = polygons.offset(-preferred_dist_inside); + ClosestPointPolygon overall_inside = findClosest(from, all_insetted, penalty_function); bool overall_is_inside = polygons.inside(overall_inside.location_); if (overall_is_inside != (preferred_dist_inside > 0)) { -#ifdef DEBUG - static bool has_run = false; - if (! has_run) - { - try - { - int offset_performed = offset / 2; - AABB aabb(polygons); - aabb.expand(std::abs(preferred_dist_inside) * 2); - SVG svg("debug.html", aabb); - svg.writeComment("Original polygon in black"); - svg.writePolygons(polygons, SVG::Color::BLACK); - for (auto poly : polygons) - { - for (auto point : poly) - { - svg.writePoint(point, true, 2); - } - } - std::stringstream ss; - svg.writeComment("Reference polygon in yellow"); - svg.writePolygon(closest_poly, SVG::Color::YELLOW); - ss << "Offsetted polygon in blue with offset " << offset_performed; - svg.writeComment(ss.str()); - svg.writePolygons(insetted, SVG::Color::BLUE); - for (auto poly : insetted) - { - for (auto point : poly) - { - svg.writePoint(point, true, 2); - } - } - svg.writeComment("From location"); - svg.writePoint(from, true, 5, SVG::Color::GREEN); - svg.writeComment("Location computed to be inside the black polygon"); - svg.writePoint(inside.location_, true, 5, SVG::Color::RED); - } - catch (...) - { - } - spdlog::error("Clipper::offset failed. See generated debug.html! Black is original Blue is offsetted polygon"); - has_run = true; - } -#endif - return ClosestPolygonPoint(); + return ClosestPointPolygon(); } inside = overall_inside; } from = inside.location_; } // otherwise we just return the closest polygon point without modifying the from location - return closest_polygon_point; // don't return a ClosestPolygonPoint with a reference to the above local polygons variable + return closest_polygon_point; // don't return a ClosestPoint with a reference to the above local polygons variable } } -void PolygonUtils::walkToNearestSmallestConnection(ClosestPolygonPoint& poly1_result, ClosestPolygonPoint& poly2_result) +void PolygonUtils::walkToNearestSmallestConnection(ClosestPointPolygon& poly1_result, ClosestPointPolygon& poly2_result) { if (! poly1_result.isValid() || ! poly2_result.isValid()) { return; } - ConstPolygonRef poly1 = *poly1_result.poly_; - ConstPolygonRef poly2 = *poly2_result.poly_; + const Polygon& poly1 = *poly1_result.poly_; + const Polygon& poly2 = *poly2_result.poly_; size_t poly1_idx = poly1_result.poly_idx_; size_t poly2_idx = poly2_result.poly_idx_; if (poly1_result.point_idx_ == NO_INDEX || poly2_result.point_idx_ == NO_INDEX) @@ -781,10 +658,10 @@ void PolygonUtils::walkToNearestSmallestConnection(ClosestPolygonPoint& poly1_re // o o >> should find connection here coord_t best_distance2 = vSize2(poly1_result.p() - poly2_result.p()); auto check_neighboring_vert - = [&best_distance2](ConstPolygonRef from_poly, ConstPolygonRef to_poly, ClosestPolygonPoint& from_poly_result, ClosestPolygonPoint& to_poly_result, bool vertex_after) + = [&best_distance2](const Polygon& from_poly, const Polygon& to_poly, ClosestPointPolygon& from_poly_result, ClosestPointPolygon& to_poly_result, bool vertex_after) { const Point2LL after_poly2_result = to_poly[(to_poly_result.point_idx_ + vertex_after) % to_poly.size()]; - const ClosestPolygonPoint poly1_after_poly2_result = findNearestClosest(after_poly2_result, from_poly, from_poly_result.point_idx_); + const ClosestPointPolygon poly1_after_poly2_result = findNearestClosest(after_poly2_result, from_poly, from_poly_result.point_idx_); const coord_t poly1_after_poly2_result_dist2 = vSize2(poly1_after_poly2_result.p() - after_poly2_result); if (poly1_after_poly2_result_dist2 < best_distance2) { @@ -802,14 +679,14 @@ void PolygonUtils::walkToNearestSmallestConnection(ClosestPolygonPoint& poly1_re poly2_result.poly_idx_ = poly2_idx; } -ClosestPolygonPoint PolygonUtils::findNearestClosest(Point2LL from, ConstPolygonRef polygon, int start_idx) +ClosestPointPolygon PolygonUtils::findNearestClosest(Point2LL from, const Polygon& polygon, int start_idx) { - ClosestPolygonPoint forth = findNearestClosest(from, polygon, start_idx, 1); + ClosestPointPolygon forth = findNearestClosest(from, polygon, start_idx, 1); if (! forth.isValid()) { return forth; // stop computation } - ClosestPolygonPoint back = findNearestClosest(from, polygon, start_idx, -1); + ClosestPointPolygon back = findNearestClosest(from, polygon, start_idx, -1); assert(back.isValid()); if (vSize2(forth.location_ - from) < vSize2(back.location_ - from)) { @@ -821,11 +698,11 @@ ClosestPolygonPoint PolygonUtils::findNearestClosest(Point2LL from, ConstPolygon } } -ClosestPolygonPoint PolygonUtils::findNearestClosest(Point2LL from, ConstPolygonRef polygon, int start_idx, int direction) +ClosestPointPolygon PolygonUtils::findNearestClosest(Point2LL from, const Polygon& polygon, int start_idx, int direction) { if (polygon.size() == 0) { - return ClosestPolygonPoint(polygon); + return ClosestPointPolygon(&polygon); } Point2LL aPoint = polygon[0]; Point2LL best = aPoint; @@ -851,28 +728,28 @@ ClosestPolygonPoint PolygonUtils::findNearestClosest(Point2LL from, ConstPolygon } else { - return ClosestPolygonPoint(best, bestPos, polygon); + return ClosestPointPolygon(best, bestPos, &polygon); } } - return ClosestPolygonPoint(best, bestPos, polygon); + return ClosestPointPolygon(best, bestPos, &polygon); } -ClosestPolygonPoint PolygonUtils::findClosest(Point2LL from, const Polygons& polygons, const std::function& penalty_function) +ClosestPointPolygon PolygonUtils::findClosest(Point2LL from, const Shape& polygons, const std::function& penalty_function) { - ClosestPolygonPoint none; + ClosestPointPolygon none; if (polygons.size() == 0) { return none; } - ConstPolygonPointer any_polygon = polygons[0]; + const Polygon* any_polygon = &(polygons[0]); unsigned int any_poly_idx; for (any_poly_idx = 0; any_poly_idx < polygons.size(); any_poly_idx++) { // find first point in all polygons if (polygons[any_poly_idx].size() > 0) { - any_polygon = polygons[any_poly_idx]; + any_polygon = &(polygons[any_poly_idx]); break; } } @@ -880,16 +757,16 @@ ClosestPolygonPoint PolygonUtils::findClosest(Point2LL from, const Polygons& pol { return none; } - ClosestPolygonPoint best((*any_polygon)[0], 0, *any_polygon, any_poly_idx); + ClosestPointPolygon best((*any_polygon)[0], 0, any_polygon, any_poly_idx); int64_t closestDist2_score = vSize2(from - best.location_) + penalty_function(best.location_); for (unsigned int ply = 0; ply < polygons.size(); ply++) { - ConstPolygonRef poly = polygons[ply]; + const Polygon& poly = polygons[ply]; if (poly.size() == 0) continue; - ClosestPolygonPoint closest_here = findClosest(from, poly, penalty_function); + ClosestPointPolygon closest_here = findClosest(from, poly, penalty_function); if (! closest_here.isValid()) { continue; @@ -906,11 +783,11 @@ ClosestPolygonPoint PolygonUtils::findClosest(Point2LL from, const Polygons& pol return best; } -ClosestPolygonPoint PolygonUtils::findClosest(Point2LL from, ConstPolygonRef polygon, const std::function& penalty_function) +ClosestPointPolygon PolygonUtils::findClosest(Point2LL from, const Polygon& polygon, const std::function& penalty_function) { if (polygon.size() == 0) { - return ClosestPolygonPoint(polygon); + return ClosestPointPolygon(&polygon); } Point2LL aPoint = polygon[0]; Point2LL best = aPoint; @@ -937,16 +814,16 @@ ClosestPolygonPoint PolygonUtils::findClosest(Point2LL from, ConstPolygonRef pol } } - return ClosestPolygonPoint(best, bestPos, polygon); + return ClosestPointPolygon(best, bestPos, &polygon); } -PolygonsPointIndex PolygonUtils::findNearestVert(const Point2LL from, const Polygons& polys) +PolygonsPointIndex PolygonUtils::findNearestVert(const Point2LL from, const Shape& polys) { int64_t best_dist2 = std::numeric_limits::max(); PolygonsPointIndex closest_vert; for (unsigned int poly_idx = 0; poly_idx < polys.size(); poly_idx++) { - ConstPolygonRef poly = polys[poly_idx]; + const Polygon& poly = polys[poly_idx]; for (unsigned int point_idx = 0; point_idx < poly.size(); point_idx++) { int64_t dist2 = vSize2(poly[point_idx] - from); @@ -960,7 +837,7 @@ PolygonsPointIndex PolygonUtils::findNearestVert(const Point2LL from, const Poly return closest_vert; } -unsigned int PolygonUtils::findNearestVert(const Point2LL from, ConstPolygonRef poly) +unsigned int PolygonUtils::findNearestVert(const Point2LL from, const Polygon& poly) { int64_t best_dist2 = std::numeric_limits::max(); unsigned int closest_vert_idx = -1; @@ -976,7 +853,7 @@ unsigned int PolygonUtils::findNearestVert(const Point2LL from, ConstPolygonRef return closest_vert_idx; } -std::unique_ptr PolygonUtils::createLocToLineGrid(const Polygons& polygons, int square_size) +std::unique_ptr PolygonUtils::createLocToLineGrid(const Shape& polygons, int square_size) { unsigned int n_points = 0; for (const auto& poly : polygons) @@ -988,7 +865,7 @@ std::unique_ptr PolygonUtils::createLocToLineGrid(const Polygons& for (unsigned int poly_idx = 0; poly_idx < polygons.size(); poly_idx++) { - ConstPolygonRef poly = polygons[poly_idx]; + const Polygon& poly = polygons[poly_idx]; for (unsigned int point_idx = 0; point_idx < poly.size(); point_idx++) { ret->insert(PolygonsPointIndex(&polygons, poly_idx, point_idx)); @@ -1004,8 +881,8 @@ std::unique_ptr PolygonUtils::createLocToLineGrid(const Polygons& * * We could skip the duplication by keeping a vector of vectors of bools. */ -std::optional - PolygonUtils::findClose(Point2LL from, const Polygons& polygons, const LocToLineGrid& loc_to_line, const std::function& penalty_function) +std::optional + PolygonUtils::findClose(Point2LL from, const Shape& polygons, const LocToLineGrid& loc_to_line, const std::function& penalty_function) { std::vector near_lines = loc_to_line.getNearby(from, loc_to_line.getCellSize()); @@ -1015,7 +892,7 @@ std::optional PolygonsPointIndex best_point_poly_idx(nullptr, NO_INDEX, NO_INDEX); for (PolygonsPointIndex& point_poly_index : near_lines) { - ConstPolygonRef poly = polygons[point_poly_index.poly_idx_]; + const Polygon& poly = polygons[point_poly_index.poly_idx_]; const Point2LL& p1 = poly[point_poly_index.point_idx_]; const Point2LL& p2 = poly[(point_poly_index.point_idx_ + 1) % poly.size()]; @@ -1030,28 +907,28 @@ std::optional } if (best_point_poly_idx.poly_idx_ == NO_INDEX) { - return std::optional(); + return std::optional(); } else { - return std::optional(std::in_place, best, best_point_poly_idx.point_idx_, polygons[best_point_poly_idx.poly_idx_], best_point_poly_idx.poly_idx_); + return std::optional(std::in_place, best, best_point_poly_idx.point_idx_, &(polygons[best_point_poly_idx.poly_idx_]), best_point_poly_idx.poly_idx_); } } -std::vector> - PolygonUtils::findClose(ConstPolygonRef from, const Polygons& destination, const LocToLineGrid& destination_loc_to_line, const std::function& penalty_function) +std::vector> + PolygonUtils::findClose(const Polygon& from, const Shape& destination, const LocToLineGrid& destination_loc_to_line, const std::function& penalty_function) { - std::vector> ret; + std::vector> ret; int p0_idx = from.size() - 1; Point2LL p0(from[p0_idx]); int grid_size = destination_loc_to_line.getCellSize(); for (unsigned int p1_idx = 0; p1_idx < from.size(); p1_idx++) { const Point2LL& p1 = from[p1_idx]; - std::optional best_here = findClose(p1, destination, destination_loc_to_line, penalty_function); + std::optional best_here = findClose(p1, destination, destination_loc_to_line, penalty_function); if (best_here) { - ret.push_back(std::make_pair(ClosestPolygonPoint(p1, p1_idx, from), *best_here)); + ret.push_back(std::make_pair(ClosestPointPolygon(p1, p1_idx, &from), *best_here)); } Point2LL p0p1 = p1 - p0; int dist_to_p1 = vSize(p0p1); @@ -1063,7 +940,7 @@ std::vector> best_here = findClose(x, destination, destination_loc_to_line, penalty_function); if (best_here) { - ret.push_back(std::make_pair(ClosestPolygonPoint(x, p0_idx, from), *best_here)); + ret.push_back(std::make_pair(ClosestPointPolygon(x, p0_idx, &from), *best_here)); } } p0 = p1; @@ -1072,7 +949,7 @@ std::vector> return ret; } -bool PolygonUtils::getNextPointWithDistance(Point2LL from, int64_t dist, ConstPolygonRef poly, int start_idx, int poly_start_idx, GivenDistPoint& result) +bool PolygonUtils::getNextPointWithDistance(Point2LL from, int64_t dist, const OpenPolyline& poly, int start_idx, int poly_start_idx, GivenDistPoint& result) { Point2LL prev_poly_point = poly[(start_idx + poly_start_idx) % poly.size()]; @@ -1146,9 +1023,10 @@ bool PolygonUtils::getNextPointWithDistance(Point2LL from, int64_t dist, ConstPo return false; } -ClosestPolygonPoint PolygonUtils::walk(const ClosestPolygonPoint& from, coord_t distance) +template +ClosestPoint PolygonUtils::walk(const ClosestPoint& from, coord_t distance) { - ConstPolygonRef poly = *from.poly_; + const LineType& poly = *from.poly_; Point2LL last_vertex = from.p(); Point2LL next_vertex; size_t last_point_idx = from.point_idx_; @@ -1166,10 +1044,10 @@ ClosestPolygonPoint PolygonUtils::walk(const ClosestPolygonPoint& from, coord_t last_point_idx = point_idx; } Point2LL result = next_vertex + normal(last_vertex - next_vertex, -distance); - return ClosestPolygonPoint(result, last_point_idx, poly, from.poly_idx_); + return ClosestPoint(result, last_point_idx, &poly, from.poly_idx_); } -std::optional PolygonUtils::getNextParallelIntersection(const ClosestPolygonPoint& start, const Point2LL& line_to, const coord_t dist, const bool forward) +std::optional PolygonUtils::getNextParallelIntersection(const ClosestPointPolygon& start, const Point2LL& line_to, const coord_t dist, const bool forward) { // <--o--t-----y----< poly 1 // : : @@ -1183,7 +1061,7 @@ std::optional PolygonUtils::getNextParallelIntersection(con // r=result // t=line_to - ConstPolygonRef poly = *start.poly_; + const Polygon& poly = *start.poly_; const Point2LL s = start.p(); const Point2LL t = line_to; @@ -1217,14 +1095,14 @@ std::optional PolygonUtils::getNextParallelIntersection(con vert_before_idx = (next_point_idx > 0) ? vert_before_idx - 1 : poly.size() - 1; } assert(vert_before_idx < poly.size()); - return ClosestPolygonPoint(intersection, vert_before_idx, poly); + return ClosestPointPolygon(intersection, vert_before_idx, &poly); } prev_vert = next_vert; prev_projected = projected; } - return std::optional(); + return std::optional(); } @@ -1267,7 +1145,7 @@ bool PolygonUtils::polygonCollidesWithLineSegment(const Point2LL from, const Poi } bool PolygonUtils::polygonCollidesWithLineSegment( - ConstPolygonRef poly, + const Polygon& poly, const Point2LL& transformed_startPoint, const Point2LL& transformed_endPoint, PointMatrix transformation_matrix) @@ -1285,7 +1163,7 @@ bool PolygonUtils::polygonCollidesWithLineSegment( return false; } -bool PolygonUtils::polygonCollidesWithLineSegment(ConstPolygonRef poly, const Point2LL& startPoint, const Point2LL& endPoint) +bool PolygonUtils::polygonCollidesWithLineSegment(const Polygon& poly, const Point2LL& startPoint, const Point2LL& endPoint) { Point2LL diff = endPoint - startPoint; @@ -1297,12 +1175,12 @@ bool PolygonUtils::polygonCollidesWithLineSegment(ConstPolygonRef poly, const Po } bool PolygonUtils::polygonCollidesWithLineSegment( - const Polygons& polys, + const Shape& polys, const Point2LL& transformed_startPoint, const Point2LL& transformed_endPoint, PointMatrix transformation_matrix) { - for (ConstPolygonRef poly : polys) + for (const Polygon& poly : polys) { if (poly.size() == 0) { @@ -1318,7 +1196,7 @@ bool PolygonUtils::polygonCollidesWithLineSegment( } -bool PolygonUtils::polygonCollidesWithLineSegment(const Polygons& polys, const Point2LL& startPoint, const Point2LL& endPoint) +bool PolygonUtils::polygonCollidesWithLineSegment(const Shape& polys, const Point2LL& startPoint, const Point2LL& endPoint) { if (endPoint == startPoint) { @@ -1333,7 +1211,7 @@ bool PolygonUtils::polygonCollidesWithLineSegment(const Polygons& polys, const P return polygonCollidesWithLineSegment(polys, transformed_startPoint, transformed_endPoint, transformation_matrix); } -bool PolygonUtils::polygonsIntersect(const ConstPolygonRef& poly_a, const ConstPolygonRef& poly_b) +bool PolygonUtils::polygonsIntersect(const Polygon& poly_a, const Polygon& poly_b) { // only do the full intersection when the polys' BBs overlap AABB bba(poly_a); @@ -1341,7 +1219,7 @@ bool PolygonUtils::polygonsIntersect(const ConstPolygonRef& poly_a, const ConstP return bba.hit(bbb) && poly_a.intersection(poly_b).size() > 0; } -bool PolygonUtils::polygonOutlinesAdjacent(const ConstPolygonRef inner_poly, const ConstPolygonRef outer_poly, const coord_t max_gap) +bool PolygonUtils::polygonOutlinesAdjacent(const Polygon& inner_poly, const Polygon& outer_poly, const coord_t max_gap) { // Heuristic check if their AABBs are near first. AABB inner_aabb(inner_poly); @@ -1373,8 +1251,8 @@ bool PolygonUtils::polygonOutlinesAdjacent(const ConstPolygonRef inner_poly, con void PolygonUtils::findAdjacentPolygons( std::vector& adjacent_poly_indices, - const ConstPolygonRef& poly, - const std::vector& possible_adjacent_polys, + const Polygon& poly, + const std::vector& possible_adjacent_polys, const coord_t max_gap) { // given a polygon, and a vector of polygons, return a vector containing the indices of the polygons that are adjacent to the given polygon @@ -1387,7 +1265,7 @@ void PolygonUtils::findAdjacentPolygons( } } -double PolygonUtils::relativeHammingDistance(const Polygons& poly_a, const Polygons& poly_b) +double PolygonUtils::relativeHammingDistance(const Shape& poly_a, const Shape& poly_b) { const double area_a = std::abs(poly_a.area()); const double area_b = std::abs(poly_b.area()); @@ -1397,7 +1275,7 @@ double PolygonUtils::relativeHammingDistance(const Polygons& poly_a, const Polyg constexpr bool borders_allowed = true; if (total_area == 0.0) { - for (const ConstPolygonRef& polygon_a : poly_a) + for (const Polygon& polygon_a : poly_a) { for (Point2LL point : polygon_a) { @@ -1407,7 +1285,7 @@ double PolygonUtils::relativeHammingDistance(const Polygons& poly_a, const Polyg } } } - for (const ConstPolygonRef& polygon_b : poly_b) + for (const Polygon& polygon_b : poly_b) { for (Point2LL point : polygon_b) { @@ -1420,34 +1298,56 @@ double PolygonUtils::relativeHammingDistance(const Polygons& poly_a, const Polyg return 0.0; // All points are inside the other polygon, regardless of where the vertices are along the edges. } - const Polygons symmetric_difference = poly_a.xorPolygons(poly_b); + const Shape symmetric_difference = poly_a.xorPolygons(poly_b); const double hamming_distance = symmetric_difference.area(); return hamming_distance / total_area; } -Polygon PolygonUtils::makeCircle(const Point2LL mid, const coord_t radius, const AngleRadians a_step) +Polygon PolygonUtils::makeDisc(const Point2LL& mid, const coord_t radius, const size_t steps) { - Polygon circle; - for (double a = 0; a < 2 * std::numbers::pi; a += a_step) + return makeCircle(mid, radius, steps); +} + +Point2LL PolygonUtils::makeCirclePoint(const Point2LL& mid, const coord_t radius, const AngleRadians& angle) +{ + return mid + Point2LL(std::llrint(static_cast(radius) * cos(angle)), std::llrint(static_cast(radius) * sin(angle))); +} + +ClosedPolyline PolygonUtils::makeWheel(const Point2LL& mid, const coord_t inner_radius, const coord_t outer_radius, const size_t semi_nb_spokes, const size_t arc_angle_resolution) +{ + ClosedPolyline wheel; + + const size_t nb_spokes = semi_nb_spokes * 2; + const double spoke_angle_step = TAU / static_cast(nb_spokes); + const double arc_angle_step = spoke_angle_step / static_cast(arc_angle_resolution); + + for (size_t spoke = 0; spoke < nb_spokes; ++spoke) { - circle.emplace_back(mid + Point2LL(radius * cos(a), radius * sin(a))); + const double spoke_angle = static_cast(spoke) * spoke_angle_step; + const coord_t radius = spoke % 2 == 0 ? inner_radius : outer_radius; + + for (size_t arc_part = 0; arc_part <= arc_angle_resolution; ++arc_part) + { + const double angle = spoke_angle + static_cast(arc_part) * arc_angle_step; + wheel.push_back(makeCirclePoint(mid, radius, angle)); + } } - return circle; -} + return wheel; +} -Polygons PolygonUtils::connect(const Polygons& input) +Shape PolygonUtils::connect(const Shape& input) { - Polygons ret; - std::vector parts = input.splitIntoParts(true); - for (PolygonsPart& part : parts) + Shape ret; + std::vector parts = input.splitIntoParts(true); + for (SingleShape& part : parts) { - PolygonRef outline = part.outerPolygon(); + Polygon& outline = part.outerPolygon(); for (size_t hole_idx = 1; hole_idx < part.size(); hole_idx++) { - PolygonRef hole = part[hole_idx]; + Polygon& hole = part[hole_idx]; Point2LL hole_point = hole[0]; - hole.add(hole_point); + hole.push_back(hole_point); // find where the scanline passes the Y size_t best_segment_to_idx = 0; coord_t best_dist = std::numeric_limits::max(); @@ -1470,21 +1370,21 @@ Polygons PolygonUtils::connect(const Polygons& input) } prev = here; } - (*outline).insert(outline.begin() + best_segment_to_idx, 2, best_intersection_point); - (*outline).insert(outline.begin() + best_segment_to_idx + 1, hole.begin(), hole.end()); + outline.insert(outline.begin() + best_segment_to_idx, 2, best_intersection_point); + outline.insert(outline.begin() + best_segment_to_idx + 1, hole.begin(), hole.end()); } - ret.add(outline); + ret.push_back(outline); } return ret; } /* Note: Also tries to solve for near-self intersections, when epsilon >= 1 */ -void PolygonUtils::fixSelfIntersections(const coord_t epsilon, Polygons& thiss) +void PolygonUtils::fixSelfIntersections(const coord_t epsilon, Shape& polygon) { if (epsilon < 1) { - ClipperLib::SimplifyPolygons(thiss.paths); + polygon.simplify(); return; } @@ -1493,32 +1393,32 @@ void PolygonUtils::fixSelfIntersections(const coord_t epsilon, Polygons& thiss) // Points too close to line segments should be moved a little away from those line segments, but less than epsilon, // so at least half-epsilon distance between points can still be guaranteed. constexpr coord_t grid_size = 2000; - auto query_grid = PolygonUtils::createLocToLineGrid(thiss, grid_size); + auto query_grid = PolygonUtils::createLocToLineGrid(polygon, grid_size); const coord_t move_dist = half_epsilon - 2; const coord_t half_epsilon_sqrd = half_epsilon * half_epsilon; - const size_t n = thiss.size(); + const size_t n = polygon.size(); for (size_t poly_idx = 0; poly_idx < n; poly_idx++) { - const size_t pathlen = thiss[poly_idx].size(); + const size_t pathlen = polygon[poly_idx].size(); for (size_t point_idx = 0; point_idx < pathlen; ++point_idx) { - Point2LL& pt = thiss[poly_idx][point_idx]; + Point2LL& pt = polygon[poly_idx][point_idx]; for (const auto& line : query_grid->getNearby(pt, epsilon * 2)) { - const size_t line_next_idx = (line.point_idx_ + 1) % thiss[line.poly_idx_].size(); + const size_t line_next_idx = (line.point_idx_ + 1) % polygon[line.poly_idx_].size(); if (poly_idx == line.poly_idx_ && (point_idx == line.point_idx_ || point_idx == line_next_idx)) { continue; } - const Point2LL& a = thiss[line.poly_idx_][line.point_idx_]; - const Point2LL& b = thiss[line.poly_idx_][line_next_idx]; + const Point2LL& a = polygon[line.poly_idx_][line.point_idx_]; + const Point2LL& b = polygon[line.poly_idx_][line_next_idx]; if (half_epsilon_sqrd >= vSize2(pt - LinearAlg2D::getClosestOnLineSegment(pt, a, b))) { - const Point2LL& other = thiss[poly_idx][(point_idx + 1) % pathlen]; + const Point2LL& other = polygon[poly_idx][(point_idx + 1) % pathlen]; const Point2LL vec = LinearAlg2D::pointIsLeftOfLine(other, a, b) > 0 ? b - a : a - b; const coord_t len = vSize(vec); pt.X += (-vec.Y * move_dist) / len; @@ -1528,29 +1428,29 @@ void PolygonUtils::fixSelfIntersections(const coord_t epsilon, Polygons& thiss) } } - ClipperLib::SimplifyPolygons(thiss.paths); + polygon.simplify(); } -Polygons PolygonUtils::unionManySmall(const Polygons& p) +Shape PolygonUtils::unionManySmall(const Shape& polygon) { - if (p.paths.size() < 8) + if (polygon.size() < 8) { - return p.unionPolygons(); + return polygon.unionPolygons(); } - Polygons a, b; - a.paths.reserve(p.paths.size() / 2); - b.paths.reserve(a.paths.size() + 1); - for (const auto& [i, path] : p.paths | ranges::views::enumerate) + Shape a, b; + a.reserve(polygon.size() / 2); + b.reserve(a.size() + 1); + for (const auto& [i, path] : polygon | ranges::views::enumerate) { - (i % 2 == 0 ? b : a).paths.push_back(path); + (i % 2 == 0 ? b : a).push_back(path); } return unionManySmall(a).unionPolygons(unionManySmall(b)); } -Polygons PolygonUtils::clipPolygonWithAABB(const Polygons& src, const AABB& aabb) +Shape PolygonUtils::clipPolygonWithAABB(const Shape& src, const AABB& aabb) { - Polygons out; + Shape out; out.reserve(src.size()); for (const auto path : src) { @@ -1559,7 +1459,7 @@ Polygons PolygonUtils::clipPolygonWithAABB(const Polygons& src, const AABB& aabb const size_t cnt = path.size(); if (cnt < 3) { - return Polygons(); + return Shape(); } enum class Side @@ -1589,7 +1489,7 @@ Polygons PolygonUtils::clipPolygonWithAABB(const Polygons& src, const AABB& aabb // the edge possibly cuts corner of the bounding box. (sides_prev & sides_this & sides_next) == 0) { - poly.add(path[i]); + poly.push_back(path[i]); sides_prev = sides_this; } else @@ -1607,43 +1507,49 @@ Polygons PolygonUtils::clipPolygonWithAABB(const Polygons& src, const AABB& aabb if (sides_this == 0 || // The last point is inside. Take it. (sides_prev & sides_this & sides_next) == 0) // Either this point is outside and previous or next is inside, or the edge possibly cuts corner of the bounding box. - poly.add(path.back()); + poly.push_back(path.back()); } if (! poly.empty()) { - out.add(poly); + out.push_back(poly); } } return out; } -Polygons PolygonUtils::generateOutset(const Polygons& inner_poly, size_t count, coord_t line_width) +std::tuple + PolygonUtils::generateCirculatOutset(const Point2LL& center, const coord_t inner_radius, const coord_t outer_radius, coord_t line_width, const size_t circle_definition) { - Polygons outset; + ClosedLinesSet outset; + const coord_t semi_line_width = line_width / 2; + coord_t radius = inner_radius + semi_line_width; - Polygons current_outset; - for (size_t index = 0; index < count; ++index) + while (radius + semi_line_width <= outer_radius) { - current_outset = index == 0 ? inner_poly.offset(line_width / 2) : current_outset.offset(line_width); - outset.add(current_outset); + outset.push_back(makeCircle(center, radius, circle_definition)); + radius += line_width; } - return outset; + return { outset, radius - semi_line_width }; } -Polygons PolygonUtils::generateInset(const Polygons& outer_poly, coord_t line_width, coord_t initial_inset) +ClosedLinesSet PolygonUtils::generateCircularInset(const Point2LL& center, const coord_t outer_radius, const coord_t line_width, const size_t circle_definition) { - Polygons inset; + ClosedLinesSet inset; + const coord_t semi_line_width = line_width / 2; + coord_t radius = outer_radius - semi_line_width; - Polygons current_inset = outer_poly.offset(-(initial_inset + line_width / 2)); - while (! current_inset.empty()) + while (radius - semi_line_width >= line_width) { - inset.add(current_inset); - current_inset = current_inset.offset(-line_width); + inset.push_back(makeCircle(center, radius, circle_definition)); + radius -= line_width; } return inset; } +template ClosestPoint PolygonUtils::walk(const ClosestPoint& from, coord_t distance); +template ClosestPoint PolygonUtils::walk(const ClosestPoint& from, coord_t distance); + } // namespace cura diff --git a/stress_benchmark/resources/001.settings b/stress_benchmark/resources/001.settings index 71ee472bd9..931ebb30f7 100644 --- a/stress_benchmark/resources/001.settings +++ b/stress_benchmark/resources/001.settings @@ -41,7 +41,6 @@ speed_wall_0_roofing=45 bottom_skin_preshrink=0 min_feature_size=0.1 brim_replaces_support=True -support_interface_skip_height=0.2 prime_tower_wipe_enabled=True gantry_height=320 material_surface_energy=70 @@ -341,6 +340,7 @@ infill_support_angle=40 cool_fan_speed_max=100 cool_fan_enabled=False wall_overhang_angle=90 +seam_overhang_angle=30 cool_min_speed=9 wipe_retraction_speed=5 retraction_amount=0.75 diff --git a/stress_benchmark/resources/001.wkt b/stress_benchmark/resources/001.wkt index bb3157ce63..1b1869d98d 100644 --- a/stress_benchmark/resources/001.wkt +++ b/stress_benchmark/resources/001.wkt @@ -1 +1 @@ -MULTIPOLYGON (((1571 -49975, 2466 -52292, 3140 -49901, 4107 -52189, 4705 -49778, 5745 -52034, 6267 -49606, 7376 -51828, 7822 -49384, 9001 -51570, 9369 -49114, 10616 -51262, 10907 -48796, 12221 -50904, 12434 -48429, 13814 -50495, 13950 -48015, 15393 -50036, 15451 -47553, 16957 -49528, 16937 -47044, 18504 -48971, 18406 -46489, 20034 -48365, 19858 -45888, 21543 -47712, 21289 -45241, 23031 -47012, 22700 -44550, 24496 -46265, 24088 -43815, 25937 -45473, 25452 -43037, 27353 -44636, 26791 -42216, 28741 -43755, 28104 -41354, 30102 -42830, 29389 -40451, 31432 -41863, 30645 -39508, 32731 -40855, 31871 -38526, 33999 -39807, 33066 -37506, 35232 -38720, 34227 -36449, 36431 -37594, 35355 -35355, 37594 -36431, 36449 -34227, 38720 -35232, 37506 -33066, 39807 -33999, 38526 -31871, 40856 -32731, 39508 -30645, 41863 -31432, 40451 -29389, 42830 -30101, 41354 -28104, 43755 -28741, 42216 -26791, 44636 -27353, 43037 -25452, 45473 -25937, 43815 -24088, 46265 -24496, 44550 -22699, 47012 -23031, 45242 -21289, 47712 -21543, 45888 -19857, 48365 -20034, 46489 -18406, 48971 -18504, 47044 -16937, 49528 -16957, 47553 -15451, 50036 -15393, 48015 -13950, 50495 -13814, 48429 -12434, 50904 -12221, 48796 -10907, 51262 -10616, 49114 -9369, 51570 -9000, 49384 -7822, 51828 -7376, 49606 -6267, 52034 -5745, 49778 -4705, 52189 -4107, 49901 -3139, 52292 -2466, 49975 -1571, 52344 -822, 50000 0, 52344 822, 49975 1571, 52292 2466, 49901 3140, 52189 4107, 49778 4705, 52034 5745, 49606 6267, 51828 7376, 49384 7822, 51570 9001, 49114 9369, 51262 10616, 48796 10907, 50904 12221, 48429 12434, 50495 13814, 48015 13950, 50036 15393, 47553 15451, 49528 16957, 47044 16937, 48971 18504, 46489 18406, 48365 20034, 45888 19858, 47712 21543, 45241 21289, 47012 23031, 44550 22700, 46265 24496, 43815 24088, 45473 25937, 43037 25452, 44636 27353, 42216 26791, 43755 28741, 41354 28104, 42830 30102, 40451 29389, 41863 31432, 39508 30645, 40855 32731, 38526 31871, 39807 33999, 37506 33066, 38720 35232, 36449 34227, 37594 36431, 35355 35355, 36431 37594, 34227 36449, 35232 38720, 33066 37506, 33999 39807, 31871 38526, 32731 40856, 30645 39508, 31432 41863, 29389 40451, 30101 42830, 28104 41354, 28741 43755, 26791 42216, 27353 44636, 25452 43037, 25937 45473, 24088 43815, 24496 46265, 22699 44550, 23031 47012, 21289 45242, 21543 47712, 19857 45888, 20034 48365, 18406 46489, 18504 48971, 16937 47044, 16957 49528, 15451 47553, 15393 50036, 13950 48015, 13814 50495, 12434 48429, 12221 50904, 10907 48796, 10616 51262, 9369 49114, 9000 51570, 7822 49384, 7376 51828, 6267 49606, 5745 52034, 4705 49778, 4107 52189, 3139 49901, 2466 52292, 1571 49975, 822 52344, 0 50000, -822 52344, -1571 49975, -2466 52292, -3140 49901, -4107 52189, -4705 49778, -5745 52034, -6267 49606, -7376 51828, -7822 49384, -9001 51570, -9369 49114, -10616 51262, -10907 48796, -12221 50904, -12434 48429, -13814 50495, -13950 48015, -15393 50036, -15451 47553, -16957 49528, -16937 47044, -18504 48971, -18406 46489, -20034 48365, -19858 45888, -21543 47712, -21289 45241, -23031 47012, -22700 44550, -24496 46265, -24088 43815, -25937 45473, -25452 43037, -27353 44636, -26791 42216, -28741 43755, -28104 41354, -30102 42830, -29389 40451, -31432 41863, -30645 39508, -32731 40855, -31871 38526, -33999 39807, -33066 37506, -35232 38720, -34227 36449, -36431 37594, -35355 35355, -37594 36431, -36449 34227, -38720 35232, -37506 33066, -39807 33999, -38526 31871, -40856 32731, -39508 30645, -41863 31432, -40451 29389, -42830 30101, -41354 28104, -43755 28741, -42216 26791, -44636 27353, -43037 25452, -45473 25937, -43815 24088, -46265 24496, -44550 22699, -47012 23031, -45242 21289, -47712 21543, -45888 19857, -48365 20034, -46489 18406, -48971 18504, -47044 16937, -49528 16957, -47553 15451, -50036 15393, -48015 13950, -50495 13814, -48429 12434, -50904 12221, -48796 10907, -51262 10616, -49114 9369, -51570 9000, -49384 7822, -51828 7376, -49606 6267, -52034 5745, -49778 4705, -52189 4107, -49901 3139, -52292 2466, -49975 1571, -52344 822, -50000 0, -52344 -822, -49975 -1571, -52292 -2466, -49901 -3140, -52189 -4107, -49778 -4705, -52034 -5745, -49606 -6267, -51828 -7376, -49384 -7822, -51570 -9001, -49114 -9369, -51262 -10616, -48796 -10907, -50904 -12221, -48429 -12434, -50495 -13814, -48015 -13950, -50036 -15393, -47553 -15451, -49528 -16957, -47044 -16937, -48971 -18504, -46489 -18406, -48365 -20034, -45888 -19858, -47712 -21543, -45241 -21289, -47012 -23031, -44550 -22700, -46265 -24496, -43815 -24088, -45473 -25937, -43037 -25452, -44636 -27353, -42216 -26791, -43755 -28741, -41354 -28104, -42830 -30102, -40451 -29389, -41863 -31432, -39508 -30645, -40855 -32731, -38526 -31871, -39807 -33999, -37506 -33066, -38720 -35232, -36449 -34227, -37594 -36431, -35355 -35355, -36431 -37594, -34227 -36449, -35232 -38720, -33066 -37506, -33999 -39807, -31871 -38526, -32731 -40856, -30645 -39508, -31432 -41863, -29389 -40451, -30101 -42830, -28104 -41354, -28741 -43755, -26791 -42216, -27353 -44636, -25452 -43037, -25937 -45473, -24088 -43815, -24496 -46265, -22699 -44550, -23031 -47012, -21289 -45242, -21543 -47712, -19857 -45888, -20034 -48365, -18406 -46489, -18504 -48971, -16937 -47044, -16957 -49528, -15451 -47553, -15393 -50036, -13950 -48015, -13814 -50495, -12434 -48429, -12221 -50904, -10907 -48796, -10616 -51262, -9369 -49114, -9000 -51570, -7822 -49384, -7376 -51828, -6267 -49606, -5745 -52034, -4705 -49778, -4107 -52189, -3139 -49901, -2466 -52292, -1571 -49975, -822 -52344, 0 -50000, 822 -52344) (-449 -28579, -942 -29985, -1346 -28551, -1884 -29941, -2243 -28494, -2823 -29867, -3136 -28410, -3760 -29763, -4027 -28297, -4693 -29631, -4914 -28157, -5621 -29469, -5796 -27989, -6544 -29277, -6672 -27793, -7461 -29057, -7542 -27569, -8370 -28809, -8404 -27319, -9270 -28532, -9258 -27042, -10162 -28226, -10103 -26737, -11044 -27893, -10938 -26407, -11914 -27533, -11762 -26050, -12773 -27145, -12575 -25668, -13620 -26730, -13375 -25260, -14453 -26289, -14161 -24828, -15271 -25822, -14934 -24371, -16075 -25330, -15693 -23889, -16862 -24812, -16435 -23385, -17633 -24271, -17162 -22857, -18387 -23705, -17871 -22307, -19123 -23115, -18563 -21734, -19839 -22503, -19236 -21141, -20536 -21869, -19891 -20526, -21213 -21213, -20526 -19891, -21869 -20536, -21141 -19236, -22503 -19839, -21734 -18563, -23115 -19123, -22307 -17871, -23705 -18387, -22857 -17162, -24270 -17633, -23385 -16435, -24812 -16862, -23889 -15693, -25330 -16075, -24371 -14934, -25822 -15271, -24828 -14161, -26289 -14453, -25260 -13375, -26730 -13620, -25668 -12575, -27145 -12773, -26050 -11762, -27533 -11914, -26407 -10938, -27893 -11044, -26737 -10103, -28226 -10162, -27042 -9258, -28532 -9271, -27319 -8404, -28809 -8370, -27569 -7542, -29057 -7461, -27793 -6672, -29277 -6544, -27989 -5796, -29469 -5621, -28157 -4914, -29631 -4693, -28297 -4027, -29763 -3760, -28410 -3137, -29867 -2823, -28494 -2243, -29941 -1884, -28551 -1346, -29985 -942, -28579 -449, -30000 0, -28579 449, -29985 942, -28551 1346, -29941 1884, -28494 2243, -29867 2823, -28410 3136, -29763 3760, -28297 4027, -29631 4693, -28157 4914, -29469 5621, -27989 5796, -29277 6544, -27793 6672, -29057 7461, -27569 7542, -28809 8370, -27319 8404, -28532 9270, -27042 9258, -28226 10162, -26737 10103, -27893 11044, -26407 10938, -27533 11914, -26050 11762, -27145 12773, -25668 12575, -26730 13620, -25260 13375, -26289 14453, -24828 14161, -25822 15271, -24371 14934, -25330 16075, -23889 15693, -24812 16862, -23385 16435, -24271 17633, -22857 17162, -23705 18387, -22307 17871, -23115 19123, -21734 18563, -22503 19839, -21141 19236, -21869 20536, -20526 19891, -21213 21213, -19891 20526, -20536 21869, -19236 21141, -19839 22503, -18563 21734, -19123 23115, -17871 22307, -18387 23705, -17162 22857, -17633 24270, -16435 23385, -16862 24812, -15693 23889, -16075 25330, -14934 24371, -15271 25822, -14161 24828, -14453 26289, -13375 25260, -13620 26730, -12575 25668, -12773 27145, -11762 26050, -11914 27533, -10938 26407, -11044 27893, -10103 26737, -10162 28226, -9258 27042, -9271 28532, -8404 27319, -8370 28809, -7542 27569, -7461 29057, -6672 27793, -6544 29277, -5796 27989, -5621 29469, -4914 28157, -4693 29631, -4027 28297, -3760 29763, -3137 28410, -2823 29867, -2243 28494, -1884 29941, -1346 28551, -942 29985, -449 28579, 0 30000, 449 28579, 942 29985, 1346 28551, 1884 29941, 2243 28494, 2823 29867, 3136 28410, 3760 29763, 4027 28297, 4693 29631, 4914 28157, 5621 29469, 5796 27989, 6544 29277, 6672 27793, 7461 29057, 7542 27569, 8370 28809, 8404 27319, 9270 28532, 9258 27042, 10162 28226, 10103 26737, 11044 27893, 10938 26407, 11914 27533, 11762 26050, 12773 27145, 12575 25668, 13620 26730, 13375 25260, 14453 26289, 14161 24828, 15271 25822, 14934 24371, 16075 25330, 15693 23889, 16862 24812, 16435 23385, 17633 24271, 17162 22857, 18387 23705, 17871 22307, 19123 23115, 18563 21734, 19839 22503, 19236 21141, 20536 21869, 19891 20526, 21213 21213, 20526 19891, 21869 20536, 21141 19236, 22503 19839, 21734 18563, 23115 19123, 22307 17871, 23705 18387, 22857 17162, 24270 17633, 23385 16435, 24812 16862, 23889 15693, 25330 16075, 24371 14934, 25822 15271, 24828 14161, 26289 14453, 25260 13375, 26730 13620, 25668 12575, 27145 12773, 26050 11762, 27533 11914, 26407 10938, 27893 11044, 26737 10103, 28226 10162, 27042 9258, 28532 9271, 27319 8404, 28809 8370, 27569 7542, 29057 7461, 27793 6672, 29277 6544, 27989 5796, 29469 5621, 28157 4914, 29631 4693, 28297 4027, 29763 3760, 28410 3137, 29867 2823, 28494 2243, 29941 1884, 28551 1346, 29985 942, 28579 449, 30000 0, 28579 -449, 29985 -942, 28551 -1346, 29941 -1884, 28494 -2243, 29867 -2823, 28410 -3136, 29763 -3760, 28297 -4027, 29631 -4693, 28157 -4914, 29469 -5621, 27989 -5796, 29277 -6544, 27793 -6672, 29057 -7461, 27569 -7542, 28809 -8370, 27319 -8404, 28532 -9270, 27042 -9258, 28226 -10162, 26737 -10103, 27893 -11044, 26407 -10938, 27533 -11914, 26050 -11762, 27145 -12773, 25668 -12575, 26730 -13620, 25260 -13375, 26289 -14453, 24828 -14161, 25822 -15271, 24371 -14934, 25330 -16075, 23889 -15693, 24812 -16862, 23385 -16435, 24271 -17633, 22857 -17162, 23705 -18387, 22307 -17871, 23115 -19123, 21734 -18563, 22503 -19839, 21141 -19236, 21869 -20536, 20526 -19891, 21213 -21213, 19891 -20526, 20536 -21869, 19236 -21141, 19839 -22503, 18563 -21734, 19123 -23115, 17871 -22307, 18387 -23705, 17162 -22857, 17633 -24270, 16435 -23385, 16862 -24812, 15693 -23889, 16075 -25330, 14934 -24371, 15271 -25822, 14161 -24828, 14453 -26289, 13375 -25260, 13620 -26730, 12575 -25668, 12773 -27145, 11762 -26050, 11914 -27533, 10938 -26407, 11044 -27893, 10103 -26737, 10162 -28226, 9258 -27042, 9271 -28532, 8404 -27319, 8370 -28809, 7542 -27569, 7461 -29057, 6672 -27793, 6544 -29277, 5796 -27989, 5621 -29469, 4914 -28157, 4693 -29631, 4027 -28297, 3760 -29763, 3137 -28410, 2823 -29867, 2243 -28494, 1884 -29941, 1346 -28551, 942 -29985, 449 -28579, 0 -30000))) \ No newline at end of file +MULTIPOLYGON (((1571 -49975, 2466 -52292, 3140 -49901, 4107 -52189, 4705 -49778, 5745 -52034, 6267 -49606, 7376 -51828, 7822 -49384, 9001 -51570, 9369 -49114, 10616 -51262, 10907 -48796, 12221 -50904, 12434 -48429, 13814 -50495, 13950 -48015, 15393 -50036, 15451 -47553, 16957 -49528, 16937 -47044, 18504 -48971, 18406 -46489, 20034 -48365, 19858 -45888, 21543 -47712, 21289 -45241, 23031 -47012, 22700 -44550, 24496 -46265, 24088 -43815, 25937 -45473, 25452 -43037, 27353 -44636, 26791 -42216, 28741 -43755, 28104 -41354, 30102 -42830, 29389 -40451, 31432 -41863, 30645 -39508, 32731 -40855, 31871 -38526, 33999 -39807, 33066 -37506, 35232 -38720, 34227 -36449, 36431 -37594, 35355 -35355, 37594 -36431, 36449 -34227, 38720 -35232, 37506 -33066, 39807 -33999, 38526 -31871, 40856 -32731, 39508 -30645, 41863 -31432, 40451 -29389, 42830 -30101, 41354 -28104, 43755 -28741, 42216 -26791, 44636 -27353, 43037 -25452, 45473 -25937, 43815 -24088, 46265 -24496, 44550 -22699, 47012 -23031, 45242 -21289, 47712 -21543, 45888 -19857, 48365 -20034, 46489 -18406, 48971 -18504, 47044 -16937, 49528 -16957, 47553 -15451, 50036 -15393, 48015 -13950, 50495 -13814, 48429 -12434, 50904 -12221, 48796 -10907, 51262 -10616, 49114 -9369, 51570 -9000, 49384 -7822, 51828 -7376, 49606 -6267, 52034 -5745, 49778 -4705, 52189 -4107, 49901 -3139, 52292 -2466, 49975 -1571, 52344 -822, 50000 0, 52344 822, 49975 1571, 52292 2466, 49901 3140, 52189 4107, 49778 4705, 52034 5745, 49606 6267, 51828 7376, 49384 7822, 51570 9001, 49114 9369, 51262 10616, 48796 10907, 50904 12221, 48429 12434, 50495 13814, 48015 13950, 50036 15393, 47553 15451, 49528 16957, 47044 16937, 48971 18504, 46489 18406, 48365 20034, 45888 19858, 47712 21543, 45241 21289, 47012 23031, 44550 22700, 46265 24496, 43815 24088, 45473 25937, 43037 25452, 44636 27353, 42216 26791, 43755 28741, 41354 28104, 42830 30102, 40451 29389, 41863 31432, 39508 30645, 40855 32731, 38526 31871, 39807 33999, 37506 33066, 38720 35232, 36449 34227, 37594 36431, 35355 35355, 36431 37594, 34227 36449, 35232 38720, 33066 37506, 33999 39807, 31871 38526, 32731 40856, 30645 39508, 31432 41863, 29389 40451, 30101 42830, 28104 41354, 28741 43755, 26791 42216, 27353 44636, 25452 43037, 25937 45473, 24088 43815, 24496 46265, 22699 44550, 23031 47012, 21289 45242, 21543 47712, 19857 45888, 20034 48365, 18406 46489, 18504 48971, 16937 47044, 16957 49528, 15451 47553, 15393 50036, 13950 48015, 13814 50495, 12434 48429, 12221 50904, 10907 48796, 10616 51262, 9369 49114, 9000 51570, 7822 49384, 7376 51828, 6267 49606, 5745 52034, 4705 49778, 4107 52189, 3139 49901, 2466 52292, 1571 49975, 822 52344, 0 50000, -822 52344, -1571 49975, -2466 52292, -3140 49901, -4107 52189, -4705 49778, -5745 52034, -6267 49606, -7376 51828, -7822 49384, -9001 51570, -9369 49114, -10616 51262, -10907 48796, -12221 50904, -12434 48429, -13814 50495, -13950 48015, -15393 50036, -15451 47553, -16957 49528, -16937 47044, -18504 48971, -18406 46489, -20034 48365, -19858 45888, -21543 47712, -21289 45241, -23031 47012, -22700 44550, -24496 46265, -24088 43815, -25937 45473, -25452 43037, -27353 44636, -26791 42216, -28741 43755, -28104 41354, -30102 42830, -29389 40451, -31432 41863, -30645 39508, -32731 40855, -31871 38526, -33999 39807, -33066 37506, -35232 38720, -34227 36449, -36431 37594, -35355 35355, -37594 36431, -36449 34227, -38720 35232, -37506 33066, -39807 33999, -38526 31871, -40856 32731, -39508 30645, -41863 31432, -40451 29389, -42830 30101, -41354 28104, -43755 28741, -42216 26791, -44636 27353, -43037 25452, -45473 25937, -43815 24088, -46265 24496, -44550 22699, -47012 23031, -45242 21289, -47712 21543, -45888 19857, -48365 20034, -46489 18406, -48971 18504, -47044 16937, -49528 16957, -47553 15451, -50036 15393, -48015 13950, -50495 13814, -48429 12434, -50904 12221, -48796 10907, -51262 10616, -49114 9369, -51570 9000, -49384 7822, -51828 7376, -49606 6267, -52034 5745, -49778 4705, -52189 4107, -49901 3139, -52292 2466, -49975 1571, -52344 822, -50000 0, -52344 -822, -49975 -1571, -52292 -2466, -49901 -3140, -52189 -4107, -49778 -4705, -52034 -5745, -49606 -6267, -51828 -7376, -49384 -7822, -51570 -9001, -49114 -9369, -51262 -10616, -48796 -10907, -50904 -12221, -48429 -12434, -50495 -13814, -48015 -13950, -50036 -15393, -47553 -15451, -49528 -16957, -47044 -16937, -48971 -18504, -46489 -18406, -48365 -20034, -45888 -19858, -47712 -21543, -45241 -21289, -47012 -23031, -44550 -22700, -46265 -24496, -43815 -24088, -45473 -25937, -43037 -25452, -44636 -27353, -42216 -26791, -43755 -28741, -41354 -28104, -42830 -30102, -40451 -29389, -41863 -31432, -39508 -30645, -40855 -32731, -38526 -31871, -39807 -33999, -37506 -33066, -38720 -35232, -36449 -34227, -37594 -36431, -35355 -35355, -36431 -37594, -34227 -36449, -35232 -38720, -33066 -37506, -33999 -39807, -31871 -38526, -32731 -40856, -30645 -39508, -31432 -41863, -29389 -40451, -30101 -42830, -28104 -41354, -28741 -43755, -26791 -42216, -27353 -44636, -25452 -43037, -25937 -45473, -24088 -43815, -24496 -46265, -22699 -44550, -23031 -47012, -21289 -45242, -21543 -47712, -19857 -45888, -20034 -48365, -18406 -46489, -18504 -48971, -16937 -47044, -16957 -49528, -15451 -47553, -15393 -50036, -13950 -48015, -13814 -50495, -12434 -48429, -12221 -50904, -10907 -48796, -10616 -51262, -9369 -49114, -9000 -51570, -7822 -49384, -7376 -51828, -6267 -49606, -5745 -52034, -4705 -49778, -4107 -52189, -3139 -49901, -2466 -52292, -1571 -49975, -822 -52344, 0 -50000, 822 -52344, 1571 -49975), (-449 -28579, -942 -29985, -1346 -28551, -1884 -29941, -2243 -28494, -2823 -29867, -3136 -28410, -3760 -29763, -4027 -28297, -4693 -29631, -4914 -28157, -5621 -29469, -5796 -27989, -6544 -29277, -6672 -27793, -7461 -29057, -7542 -27569, -8370 -28809, -8404 -27319, -9270 -28532, -9258 -27042, -10162 -28226, -10103 -26737, -11044 -27893, -10938 -26407, -11914 -27533, -11762 -26050, -12773 -27145, -12575 -25668, -13620 -26730, -13375 -25260, -14453 -26289, -14161 -24828, -15271 -25822, -14934 -24371, -16075 -25330, -15693 -23889, -16862 -24812, -16435 -23385, -17633 -24271, -17162 -22857, -18387 -23705, -17871 -22307, -19123 -23115, -18563 -21734, -19839 -22503, -19236 -21141, -20536 -21869, -19891 -20526, -21213 -21213, -20526 -19891, -21869 -20536, -21141 -19236, -22503 -19839, -21734 -18563, -23115 -19123, -22307 -17871, -23705 -18387, -22857 -17162, -24270 -17633, -23385 -16435, -24812 -16862, -23889 -15693, -25330 -16075, -24371 -14934, -25822 -15271, -24828 -14161, -26289 -14453, -25260 -13375, -26730 -13620, -25668 -12575, -27145 -12773, -26050 -11762, -27533 -11914, -26407 -10938, -27893 -11044, -26737 -10103, -28226 -10162, -27042 -9258, -28532 -9271, -27319 -8404, -28809 -8370, -27569 -7542, -29057 -7461, -27793 -6672, -29277 -6544, -27989 -5796, -29469 -5621, -28157 -4914, -29631 -4693, -28297 -4027, -29763 -3760, -28410 -3137, -29867 -2823, -28494 -2243, -29941 -1884, -28551 -1346, -29985 -942, -28579 -449, -30000 0, -28579 449, -29985 942, -28551 1346, -29941 1884, -28494 2243, -29867 2823, -28410 3136, -29763 3760, -28297 4027, -29631 4693, -28157 4914, -29469 5621, -27989 5796, -29277 6544, -27793 6672, -29057 7461, -27569 7542, -28809 8370, -27319 8404, -28532 9270, -27042 9258, -28226 10162, -26737 10103, -27893 11044, -26407 10938, -27533 11914, -26050 11762, -27145 12773, -25668 12575, -26730 13620, -25260 13375, -26289 14453, -24828 14161, -25822 15271, -24371 14934, -25330 16075, -23889 15693, -24812 16862, -23385 16435, -24271 17633, -22857 17162, -23705 18387, -22307 17871, -23115 19123, -21734 18563, -22503 19839, -21141 19236, -21869 20536, -20526 19891, -21213 21213, -19891 20526, -20536 21869, -19236 21141, -19839 22503, -18563 21734, -19123 23115, -17871 22307, -18387 23705, -17162 22857, -17633 24270, -16435 23385, -16862 24812, -15693 23889, -16075 25330, -14934 24371, -15271 25822, -14161 24828, -14453 26289, -13375 25260, -13620 26730, -12575 25668, -12773 27145, -11762 26050, -11914 27533, -10938 26407, -11044 27893, -10103 26737, -10162 28226, -9258 27042, -9271 28532, -8404 27319, -8370 28809, -7542 27569, -7461 29057, -6672 27793, -6544 29277, -5796 27989, -5621 29469, -4914 28157, -4693 29631, -4027 28297, -3760 29763, -3137 28410, -2823 29867, -2243 28494, -1884 29941, -1346 28551, -942 29985, -449 28579, 0 30000, 449 28579, 942 29985, 1346 28551, 1884 29941, 2243 28494, 2823 29867, 3136 28410, 3760 29763, 4027 28297, 4693 29631, 4914 28157, 5621 29469, 5796 27989, 6544 29277, 6672 27793, 7461 29057, 7542 27569, 8370 28809, 8404 27319, 9270 28532, 9258 27042, 10162 28226, 10103 26737, 11044 27893, 10938 26407, 11914 27533, 11762 26050, 12773 27145, 12575 25668, 13620 26730, 13375 25260, 14453 26289, 14161 24828, 15271 25822, 14934 24371, 16075 25330, 15693 23889, 16862 24812, 16435 23385, 17633 24271, 17162 22857, 18387 23705, 17871 22307, 19123 23115, 18563 21734, 19839 22503, 19236 21141, 20536 21869, 19891 20526, 21213 21213, 20526 19891, 21869 20536, 21141 19236, 22503 19839, 21734 18563, 23115 19123, 22307 17871, 23705 18387, 22857 17162, 24270 17633, 23385 16435, 24812 16862, 23889 15693, 25330 16075, 24371 14934, 25822 15271, 24828 14161, 26289 14453, 25260 13375, 26730 13620, 25668 12575, 27145 12773, 26050 11762, 27533 11914, 26407 10938, 27893 11044, 26737 10103, 28226 10162, 27042 9258, 28532 9271, 27319 8404, 28809 8370, 27569 7542, 29057 7461, 27793 6672, 29277 6544, 27989 5796, 29469 5621, 28157 4914, 29631 4693, 28297 4027, 29763 3760, 28410 3137, 29867 2823, 28494 2243, 29941 1884, 28551 1346, 29985 942, 28579 449, 30000 0, 28579 -449, 29985 -942, 28551 -1346, 29941 -1884, 28494 -2243, 29867 -2823, 28410 -3136, 29763 -3760, 28297 -4027, 29631 -4693, 28157 -4914, 29469 -5621, 27989 -5796, 29277 -6544, 27793 -6672, 29057 -7461, 27569 -7542, 28809 -8370, 27319 -8404, 28532 -9270, 27042 -9258, 28226 -10162, 26737 -10103, 27893 -11044, 26407 -10938, 27533 -11914, 26050 -11762, 27145 -12773, 25668 -12575, 26730 -13620, 25260 -13375, 26289 -14453, 24828 -14161, 25822 -15271, 24371 -14934, 25330 -16075, 23889 -15693, 24812 -16862, 23385 -16435, 24271 -17633, 22857 -17162, 23705 -18387, 22307 -17871, 23115 -19123, 21734 -18563, 22503 -19839, 21141 -19236, 21869 -20536, 20526 -19891, 21213 -21213, 19891 -20526, 20536 -21869, 19236 -21141, 19839 -22503, 18563 -21734, 19123 -23115, 17871 -22307, 18387 -23705, 17162 -22857, 17633 -24270, 16435 -23385, 16862 -24812, 15693 -23889, 16075 -25330, 14934 -24371, 15271 -25822, 14161 -24828, 14453 -26289, 13375 -25260, 13620 -26730, 12575 -25668, 12773 -27145, 11762 -26050, 11914 -27533, 10938 -26407, 11044 -27893, 10103 -26737, 10162 -28226, 9258 -27042, 9271 -28532, 8404 -27319, 8370 -28809, 7542 -27569, 7461 -29057, 6672 -27793, 6544 -29277, 5796 -27989, 5621 -29469, 4914 -28157, 4693 -29631, 4027 -28297, 3760 -29763, 3137 -28410, 2823 -29867, 2243 -28494, 1884 -29941, 1346 -28551, 942 -29985, 449 -28579, 0 -30000, -449 -28579))) \ No newline at end of file diff --git a/stress_benchmark/resources/002.settings b/stress_benchmark/resources/002.settings index c63aba30f3..f13bb38240 100644 --- a/stress_benchmark/resources/002.settings +++ b/stress_benchmark/resources/002.settings @@ -120,6 +120,7 @@ support_xy_distance_overhang=0.4 retract_at_layer_change=False wall_transition_length=0.4 wall_overhang_angle=90 +seam_overhang_angle=30 cool_fan_enabled=True cool_fan_speed_max=100.0 min_skin_width_for_expansion=4.898587196589413e-17 @@ -582,7 +583,6 @@ support_tree_max_diameter_increase_by_merges_when_support_to_model=1 adaptive_layer_height_threshold=0.1 support_interface_height=0.8 support_brim_enable=True -support_interface_skip_height=0.2 jerk_support_infill=8 wall_overhang_speed_factor=100 acceleration_travel=500 @@ -882,6 +882,7 @@ roofing_material_flow=100 meshfix_maximum_deviation=0.025 cool_fan_enabled=True wall_overhang_angle=90 +seam_overhang_angle=30 cool_fan_speed_max=100 speed_prime_tower=25.0 infill=0 @@ -970,7 +971,6 @@ machine_extruders_shared_nozzle_initial_retraction=0 extruder_prime_pos_abs=False support_tower_maximum_supported_diameter=3.0 support_tree_angle=45 -support_interface_skip_height=0.2 jerk_support_infill=8 wall_overhang_speed_factor=100 infill_before_walls=False diff --git a/stress_benchmark/resources/002.wkt b/stress_benchmark/resources/002.wkt index da8cb78088..4007e1f5f9 100644 --- a/stress_benchmark/resources/002.wkt +++ b/stress_benchmark/resources/002.wkt @@ -1 +1 @@ -MultiPolygon (((147289 101492, 147242 101719, 147197 101776, 147218 102093, 147259 102076, 147389 102138, 147392 102471, 147648 102288, 147623 102181, 148137 102295, 148172 102346, 148465 102254, 148577 102197, 148901 102061, 149036 102086, 149302 102109, 149463 102125, 149272 102163, 148937 102366, 148938 102449, 149117 102596, 149219 102465, 149345 102594, 149476 102549, 149777 102548, 149863 102511, 150134 102496, 150233 102538, 150557 102570, 150547 102600, 150750 102934, 150801 102912, 151257 103199, 151451 103115, 151457 102826, 151757 102643, 152047 102912, 152261 103054, 152386 103243, 152530 103190, 152880 103207, 153247 103211, 154056 103406, 154393 103447, 154973 103599, 155060 103545, 155100 103604, 155982 103648, 156531 103905, 156918 103881, 157384 103888, 157677 103949, 157902 103873, 158295 103870, 158382 103777, 158054 103621, 158326 103620, 158609 103479, 158921 103328, 158926 103578, 159080 103506, 159208 103335, 159407 103114, 159605 103018, 160226 102526, 160459 102832, 160833 102936, 161042 102897, 161218 103011, 161202 103295, 161303 103361, 162081 103119, 162153 102960, 162231 103020, 162468 102787, 162676 102742, 162742 102646, 162776 102466, 162854 102390, 162962 102559, 163249 102661, 163345 102847, 163504 102878, 163575 102980, 163720 102792, 164156 102649, 164176 102627, 164599 102346, 165114 102152, 165205 102150, 165383 102040, 165411 101809, 165746 101644, 165778 101795, 165696 102013, 165720 102318, 165786 102277, 166045 102366, 166018 102482, 166117 102372, 166544 102347, 166785 102276, 167055 102137, 167095 102097, 167403 101908, 167813 101885, 167985 101878, 167815 101926, 167483 102191, 167483 102296, 167637 102372, 167713 102283, 167818 102353, 167973 102293, 168276 102247, 168355 102202, 168634 102137, 168729 102164, 169044 102134, 169038 102172, 169224 102475, 169279 102434, 169730 102645, 169936 102500, 169916 102187, 170186 101926, 170336 101993, 170532 102185, 170689 102264, 170892 102592, 170596 102599, 170492 102690, 170436 102843, 170712 103063, 170787 103124, 170795 103080, 171025 103006, 171096 103077, 171105 103274, 171006 103584, 171207 103683, 171275 103662, 171241 103706, 171403 103852, 171735 103762, 171903 103865, 171927 103976, 171705 104095, 171743 104184, 172213 104283, 172262 104237, 172156 103914, 172619 103682, 172830 103639, 172900 103529, 173094 103391, 173509 103035, 173525 103033, 173757 102815, 173949 102709, 174009 102739, 173927 103058, 173943 103287, 173660 103472, 173661 103525, 173920 103551, 174155 103396, 174209 103301, 174318 103340, 174376 103452, 174456 103374, 174621 103431, 174679 103247, 174853 103089, 175105 103011, 175263 102982, 175356 102906, 175714 102690, 175405 102553, 175611 102412, 176108 102435, 176166 102572, 176510 102732, 176632 102730, 176986 102606, 177088 102927, 177133 102959, 177479 102784, 177730 102912, 178167 103227, 178270 103212, 178415 103103, 178539 103533, 178699 103628, 178735 103533, 178909 103540, 179152 103666, 179293 103595, 179307 103474, 179240 103402, 179321 103154, 179015 102954, 179038 102804, 179405 102930, 179596 103044, 179720 103036, 179802 103097, 180130 102994, 180399 102953, 180492 102849, 180553 102866, 180918 103314, 181124 103658, 181476 103909, 181365 103996, 181444 104116, 181416 104349, 181196 104523, 181401 104621, 181087 104844, 181307 105052, 181639 105108, 181766 104929, 181781 104659, 181904 104457, 182004 104371, 181932 104386, 181860 104168, 181689 104083, 181716 104147, 181611 104066, 181633 104042, 181561 103645, 181772 103522, 182052 103455, 182231 103334, 182687 103358, 182805 103441, 182509 103884, 182265 104017, 182458 104020, 182604 104079, 182724 103953, 182909 103883, 183029 103627, 183041 103537, 182807 103418, 183104 103015, 183072 102882, 183095 102773, 183434 102398, 183774 102329, 184013 102268, 184150 102313, 183900 102554, 183714 102959, 184390 102785, 184555 102987, 184729 103061, 184795 103005, 184985 103022, 185172 102952, 185044 102843, 185017 102948, 184776 102837, 184878 102638, 184946 102590, 185175 102594, 185526 102578, 185595 102639, 185644 102816, 185402 102978, 185495 103165, 185364 103320, 185415 103356, 185993 103497, 186163 103449, 186612 103530, 186680 103465, 186766 103478, 186777 103584, 187095 103697, 187163 103665, 187066 103457, 186900 103293, 186898 102946, 187172 103041, 187449 103056, 187568 103029, 187841 103144, 187874 103185, 188271 103377, 188289 103270, 188431 103097, 188494 103281, 188577 103346, 188718 103324, 188798 103355, 188824 103659, 188957 104299, 188699 104528, 188627 104557, 188605 104774, 188682 104938, 188386 105092, 188546 105183, 188772 105026, 188991 104966, 188852 105161, 188506 105245, 188520 105468, 188639 105778, 188726 105719, 188976 105697, 188978 105558, 189162 105369, 189126 105211, 189352 105060, 189442 105105, 189423 105158, 189636 105486, 189980 105363, 190089 105603, 190257 105596, 190431 105473, 190635 105410, 190804 105487, 190925 105394, 191167 105346, 191407 105385, 191426 105475, 191362 105505, 191270 105644, 191419 105725, 191378 106026, 191441 106239, 191247 106397, 191280 106566, 191357 106635, 191712 106619, 191707 106824, 191589 107117, 191591 107166, 191438 107518, 191486 107489, 191842 107548, 191945 107386, 192289 107018, 192412 106980, 192617 107052, 192768 107194, 192617 107366, 192273 107654, 192528 107597, 192618 107650, 192457 108077, 192327 108078, 192227 108154, 192315 108527, 192460 108725, 192530 108695, 192654 108509, 192824 108653, 192991 108649, 193128 108723, 193342 109074, 193377 109066, 193385 108738, 193412 108477, 193256 108025, 193338 107868, 193523 107742, 193784 108149, 193791 108267, 193856 108785, 193928 109098, 193921 109623, 194041 109726, 194014 109968, 194192 109990, 194145 110534, 193970 110609, 193981 111037, 194090 111179, 194208 111406, 194186 111772, 194114 112237, 194141 112431, 193957 112520, 193762 112515, 193785 112803, 193721 112792, 193983 113062, 194376 113386, 194193 113681, 193803 114209, 193782 114331, 193977 114716, 194075 114877, 194258 115254, 194301 115516, 194336 115853, 194190 116248, 193808 116627, 193635 116898, 193616 117188, 193733 117256, 193797 117473, 193881 118035, 193889 118041, 194031 118525, 194060 118432, 194108 118157, 194185 118405, 194186 118880, 194156 119052, 194084 119101, 194031 119307, 194017 119558, 194088 120051, 193901 120195, 193881 120255, 193983 120694, 193859 121226, 193808 121271, 193746 121535, 193908 121772, 193921 121907, 194002 121948, 194003 122292, 193919 122553, 193960 122713, 193902 123111, 193803 123527, 193912 124308, 193955 124449, 193912 124495, 193696 124892, 193504 125134, 193367 125613, 193270 125520, 193126 125503, 193027 125235, 192970 125483, 192847 125120, 192753 125333, 192676 125797, 192772 125873, 193218 125870, 193261 125628, 193254 125811, 193502 125640, 193600 125861, 193876 125817, 193818 126110, 193718 126306, 193601 126318, 193680 126631, 193663 126855, 193715 126921, 193657 126955, 193649 127144, 193583 127153, 193513 127044, 193313 127280, 193067 127163, 193090 127406, 193269 127607, 193200 127699, 193042 127467, 192830 127658, 192849 127794, 192802 127831, 192756 127762, 192702 127763, 192870 128029, 192668 128408, 192444 128240, 192358 128149, 192245 128156, 192101 128238, 192095 128495, 192108 128781, 192122 128882, 192138 129206, 192122 129242, 192129 129802, 192277 130104, 191858 130546, 191556 130801, 191602 130860, 191494 131002, 191565 131169, 191466 131164, 191423 131224, 191143 131156, 191069 131173, 190979 131391, 191008 131524, 190728 131683, 190703 131723, 191109 131900, 190786 132216, 190699 132356, 190197 132439, 190033 132391, 189869 132499, 189476 132278, 189146 132444, 188863 132755, 188988 132913, 188790 133104, 188982 133184, 189187 133074, 189508 133076, 189871 133116, 190198 133123, 190478 133381, 190250 133530, 190102 133558, 189825 133438, 189535 133412, 189347 133587, 189184 133729, 189013 133705, 188688 133186, 188417 133400, 188466 133800, 188343 133827, 188191 134088, 188443 133966, 188634 134119, 188473 134253, 188554 134441, 188748 134657, 188561 134858, 188196 134878, 188048 134714, 187913 134768, 187564 134617, 187037 134670, 186970 134843, 186426 134944, 186325 135023, 185814 134980, 185359 135030, 184937 135137, 184614 135285, 184509 135270, 184229 135295, 184054 135332, 183574 135274, 183031 135044, 182917 135076, 182745 135040, 182557 135142, 182388 135164, 182322 135235, 182611 135504, 182447 135467, 182050 135620, 182111 135323, 182091 135263, 181968 135321, 181618 135392, 181390 135620, 181116 135809, 180936 135876, 180546 136059, 180255 135599, 180163 135526, 179859 135421, 179759 135446, 179567 135417, 179486 135360, 179526 134997, 179438 134867, 179239 134691, 179081 134606, 178876 134648, 178566 134828, 178248 135146, 178103 135168, 178055 135464, 177807 135658, 177624 135329, 177652 135295, 177531 135243, 177372 135070, 177298 134846, 177067 134512, 176768 134856, 176657 134825, 176729 134889, 176593 134881, 176206 135111, 175924 135211, 175953 135492, 175788 135834, 175713 135442, 175715 135305, 175387 135299, 175289 135344, 175387 135388, 175293 135727, 175146 135656, 175151 135572, 175059 135428, 174951 135453, 174890 135224, 174820 135317, 174654 135173, 174540 135176, 174547 135264, 174526 135533, 174328 135628, 174253 135554, 174341 135231, 174315 135183, 174377 135009, 174262 135070, 174318 135010, 174226 135030, 173986 134985, 173626 135116, 173525 135006, 173212 135289, 173185 135293, 173246 135038, 173338 134960, 173105 134747, 172823 134798, 172466 134944, 172110 135050, 172058 135122, 171899 135165, 171707 135114, 171739 134916, 171597 134656, 171452 134782, 171125 134705, 171063 134585, 170889 134653, 171053 134748, 170891 134901, 170633 134936, 170627 134984, 170357 135357, 170243 135310, 169999 135031, 170160 134980, 170330 134756, 170245 134710, 169763 134820, 169567 134677, 169650 134401, 169619 134343, 169695 134147, 169843 133896, 169706 133812, 169600 133874, 169504 133838, 169485 133732, 169348 133673, 169205 133740, 169071 133988, 169041 133807, 169099 133767, 169055 133580, 168495 133612, 168605 134014, 168099 134245, 167911 134560, 167522 134827, 167355 134991, 167175 135008, 166950 135205, 167010 134953, 166956 134754, 167304 134541, 167310 134511, 166920 134471, 166584 134722, 166503 134544, 166459 134577, 166188 134555, 166033 134684, 165978 134858, 165644 134971, 165513 134969, 165457 135112, 165298 135211, 165549 135401, 165275 135495, 164789 135472, 164656 135327, 164463 135262, 164191 135369, 163909 135388, 163842 135067, 163510 135313, 163449 135268, 163371 135354, 162878 135311, 162672 135246, 162452 135360, 162432 135304, 162561 135111, 162011 135115, 161929 135004, 161647 135029, 161618 135049, 161277 135037, 161390 135170, 161367 135272, 161047 135108, 160951 135204, 160784 135006, 160680 134934, 160618 135007, 160677 135147, 160984 135287, 161300 135544, 161701 135725, 161713 135737, 161318 135587, 161067 135607, 160888 135453, 160693 135449, 160366 135346, 160138 135548, 160013 135259, 159835 134959, 159454 135107, 159302 135156, 158877 135405, 158833 135403, 158563 135456, 158353 135531, 157772 135541, 157337 135409, 157176 135474, 156947 135451, 156722 135585, 156609 135642, 156715 135774, 156893 135886, 156671 135870, 156198 136100, 156259 135837, 156229 135744, 156127 135803, 155829 135893, 155574 136163, 155349 136334, 154918 136528, 154714 136680, 154542 136500, 154353 136231, 153984 136113, 153892 136140, 153652 136120, 153552 136060, 153593 135690, 153306 135419, 153053 135341, 152580 135581, 152424 135744, 152139 135968, 152010 136078, 151973 136256, 151750 136416, 151665 136297, 151615 136133, 151319 135935, 151244 135715, 150941 135293, 150655 135636, 150553 135647, 150201 135755, 150161 135787, 149841 135908, 149141 135992, 148954 136073, 148757 136104, 148867 136170, 148843 136326, 148639 136420, 148607 136196, 148634 136111, 148587 135746, 148415 135444, 148211 135379, 148050 135457, 148114 135730, 147652 135706, 147599 135643, 147195 135813, 146749 136022, 146448 136017, 146441 135964, 146753 135735, 146754 135594, 146534 135468, 146203 135523, 146003 135606, 145568 135722, 145105 135802, 144993 135772, 145004 135675, 144940 135517, 144856 135457, 144819 135353, 144738 135411, 144258 135273, 144244 135247, 144182 135276, 144239 135309, 144026 135482, 143898 135483, 143882 135641, 143572 135967, 143240 135766, 143044 135494, 143258 135460, 143461 135255, 143530 134972, 142808 135181, 142614 135003, 142703 134579, 142911 134207, 142805 134129, 142630 134203, 142475 134117, 142442 133928, 142364 133881, 142278 133907, 142160 134105, 142168 134201, 142008 134222, 141982 133986, 142086 133926, 142017 133734, 141547 133613, 141440 133711, 141550 134115, 140958 134288, 140799 134562, 140406 134762, 140183 134934, 140023 134920, 139718 135114, 139790 134861, 139755 134588, 140088 134453, 140094 134400, 139750 134286, 139351 134492, 139248 134284, 138934 134214, 138818 134290, 138777 134473, 138691 134549, 138319 134615, 138165 134492, 138144 134732, 137948 134822, 138223 135040, 137946 135112, 137552 135086, 137343 135004, 137322 134941, 137022 134843, 136645 134999, 136493 135002, 136351 134706, 135940 134954, 135577 135006, 135229 134925, 135039 134916, 134877 135044, 134792 134959, 135057 134672, 134591 134852, 134455 134932, 134172 134918, 133779 135004, 133556 135085, 133748 135061, 133804 135177, 133694 135392, 133421 135386, 133726 135424, 134098 135563, 134086 135641, 133686 135616, 133556 135571, 133360 135662, 133229 135581, 132893 135712, 132594 135774, 132456 135925, 132364 135912, 132064 135512, 131960 135530, 131449 135373, 131078 135348, 130574 135691, 130880 135933, 130800 135919, 130474 136087, 130566 135694, 130433 135488, 130058 135503, 130241 135641, 130311 135805, 129950 135960, 129770 136171, 129365 136500, 128949 136741, 128626 136251, 128497 136199, 128446 136104, 128148 136173, 127886 136127, 127908 135993, 127839 135960, 127716 135989, 127651 136138, 127575 136144, 127158 135990, 126750 136006, 126603 136045, 126590 136114, 126404 136287, 126174 136390, 126088 136272, 126079 136077, 125898 135949, 125420 136013, 125204 136108, 125018 135838, 124939 135792, 124563 135511, 124353 135466, 124189 135599, 124265 135634, 124639 135626, 124729 135776, 124430 135901, 123754 135988, 123703 136011, 123347 136074, 123273 136052, 123213 135680, 123096 135477, 122819 135391, 122756 135337, 122691 135437, 122643 135651, 122510 135631, 121999 135800, 121844 135668, 121573 135898, 121568 135811, 121622 135769, 121623 135583, 121842 135658, 121902 135401, 121762 135410, 121620 135574, 121417 135449, 121133 135476, 121049 135569, 120658 135651, 120447 135748, 120258 135904, 120154 135874, 120086 136053, 119789 136279, 119473 136548, 119452 136500, 119534 136164, 119652 135882, 119635 135791, 119395 135980, 119227 135779, 118829 135851, 118509 136127, 118507 136190, 118428 136136, 118318 136180, 118197 136376, 118305 136615, 118228 136767, 117973 137052, 117776 137191, 117740 136950, 117886 136638, 118130 136633, 118132 136389, 117856 136399, 117602 136628, 117223 136550, 117160 136572, 117126 136516, 117339 136288, 117514 136185, 117251 136082, 117149 136004, 116952 136134, 116884 136454, 116808 136303, 116687 136216, 116557 136220, 116387 136459, 116383 136518, 116338 136531, 116224 136732, 116048 136740, 115806 136673, 115623 136472, 115752 136469, 115765 136210, 115875 136046, 115726 135924, 115616 135998, 115573 136442, 115313 136656, 115197 136803, 114946 136606, 114421 136372, 114395 136106, 114671 135974, 114756 135965, 114950 135593, 114637 135496, 114495 135317, 114420 135283, 114264 135411, 114337 135508, 114237 135738, 114010 135683, 114047 135454, 113922 135387, 114084 135177, 113709 135347, 113585 135286, 113801 134932, 113474 135105, 113328 135292, 113311 135076, 113061 135023, 112988 134932, 112800 135031, 112663 135274, 112815 135369, 112848 135467, 112723 135575, 112282 135653, 112477 135987, 112468 136249, 112200 136411, 112030 136397, 111744 136605, 111606 136329, 111528 136219, 111495 135947, 111474 135955, 111198 135736, 111206 135609, 111344 135288, 111483 135126, 111378 135091, 111296 135276, 110948 135073, 110853 135147, 110801 135336, 110742 135386, 110129 135361, 109900 135563, 109826 135582, 109902 135675, 109930 135813, 109898 135977, 109361 136059, 109070 135973, 108982 135753, 109018 135678, 108572 135701, 108359 135989, 108183 135787, 108007 135903, 108134 135651, 107993 135488, 107824 135440, 107510 135317, 107500 135251, 107380 135207, 107222 135217, 107036 135399, 106858 135430, 106661 135198, 106441 135242, 106302 135206, 106211 135075, 106038 135009, 106034 135111, 105955 135137, 105923 135311, 105951 135404, 106093 135454, 106136 135385, 106276 135341, 106506 135358, 106737 135520, 106855 135713, 106745 135933, 106291 135738, 106290 135663, 106137 135531, 106056 135633, 106235 135744, 106183 136032, 105943 136048, 105739 135953, 105482 136067, 105360 136075, 105289 136216, 105312 136288, 105166 136376, 104952 136050, 104665 136071, 104604 135981, 104366 135871, 104515 135755, 104145 135234, 104041 135248, 104085 135307, 103970 135500, 103984 135672, 103676 135965, 103449 135625, 103475 135258, 103084 135277, 102423 135413, 102316 135482, 101926 135658, 101223 136046, 101049 136013, 100672 136006, 100404 135965, 100242 135976, 100191 136146, 99730 135992, 99269 136011, 99195 136002, 98823 136033, 98693 135957, 98012 135998, 97790 136098, 97612 135850, 97310 135619, 96993 135447, 96928 135395, 96728 135226, 96725 134880, 96456 134773, 96152 134807, 95843 134931, 95367 135283, 95072 135605, 94874 135414, 94584 135321, 94485 135118, 94285 134980, 93947 135151, 93644 135203, 93621 135244, 93579 135231, 93264 135493, 93001 135580, 92834 135678, 92670 136057, 92054 136536, 92030 136488, 92073 136227, 92244 135948, 92190 135752, 91918 136007, 91900 135879, 91802 135771, 91661 135828, 91347 135880, 91131 136093, 91116 136159, 91047 136117, 90919 136159, 90759 136374, 90872 136615, 90797 136764, 90339 137184, 90307 136950, 90453 136639, 90695 136634, 90694 136388, 90423 136398, 90176 136632, 89794 136550, 89727 136573, 89681 136498, 89972 136246, 90064 136244, 90142 136168, 90077 136100, 89848 135965, 89492 136145, 89455 136416, 89371 136306, 89125 136172, 89029 136302, 88890 136646, 88616 136740, 88374 136672, 88233 136483, 88321 136465, 88333 136214, 88410 136077, 88462 136053, 88219 135897, 88161 136116, 88126 136435, 87745 136787, 87523 136611, 86989 136371, 86963 136104, 87240 135974, 87326 135965, 87517 135593, 87207 135496, 86971 135254, 86904 135507, 86806 135738, 86609 135713, 86527 135539, 86543 135406, 86505 135345, 86587 135239, 86398 135331, 86209 135346, 86166 135299, 86313 135035, 86129 134966, 86072 134981, 86005 134907, 85524 134979, 85431 135193, 85222 135242, 85375 135344, 85363 135419, 85430 135509, 85349 135505, 85235 135590, 84944 135622, 84874 135666, 85110 136117, 84884 136377, 84590 136411, 84297 136563, 84140 136272, 84165 136654, 84073 136578, 84008 136352, 83879 136374, 83968 136325, 83982 136146, 83777 136341, 83944 136147, 84002 136108, 84028 135950, 83831 135806, 83748 135624, 83148 135941, 82702 136044, 82544 136113, 82485 136088, 82156 136110, 81742 136005, 81443 136222, 81304 136319, 81199 136183, 81247 136069, 81111 136096, 81017 136168, 81122 136274, 81174 136215, 81412 136642, 81164 136602, 80878 136583, 80988 136446, 80919 136464, 80688 136602, 80607 136305, 80274 136387, 79838 136780, 79352 136963, 79204 137074, 78889 136647, 78725 136575, 78575 136452, 78214 136412, 78091 136286, 78104 136094, 77898 136077, 77858 136221, 77880 136293, 77736 136379, 77573 136136, 77356 136219, 77462 136277, 77570 136404, 77218 136500, 77255 136280, 77348 136219, 76993 136083, 76834 136041, 76765 135943, 76670 135934, 76675 136033, 76453 136336, 76225 136116, 76069 135927, 75919 135837, 75731 135667, 75605 135619, 75565 135543, 75543 135288, 75369 135409, 75321 135349, 75126 135313, 75060 135146, 74935 135097, 74810 135110, 74619 135231, 74763 135254, 75062 135388, 74744 135552, 74607 135568, 73980 135632, 73531 135754, 73480 135413, 73331 135175, 73090 135141, 72995 135227, 72949 135405, 72736 135400, 72236 135639, 72169 135593, 71848 135917, 71689 135933, 71673 135823, 71862 135663, 71864 135511, 71654 135425, 71367 135493, 71288 135568, 71040 135604, 70993 135634, 70604 135716, 70360 135763, 70193 135696, 70220 135539, 70079 135246, 69950 135326, 69544 135136, 69495 135038, 69386 135073, 69489 135154, 69314 135263, 69145 135215, 69111 135345, 69305 135639, 69276 135684, 68888 135662, 68444 135761, 68640 135448, 68572 135408, 68355 135051, 68640 134987, 68769 134819, 68580 134663, 68374 134979, 68064 135234, 67989 135225, 67971 135087, 68120 134737, 67881 134421, 67639 134362, 67512 134397, 67456 134334, 67372 134362, 67111 134592, 67228 134742, 67182 134910, 66807 135079, 66690 135304, 66570 135323, 66126 135241, 66073 135302, 66004 135591, 65754 135734, 65537 135657, 65272 135853, 65027 135919, 65005 135988, 65058 136145, 64870 136361, 64656 136047, 64453 136137, 64643 136213, 64809 136374, 64490 136586, 64183 136707, 64278 136212, 63953 136111, 63861 136118, 63817 136044, 63870 135938, 64210 135619, 63866 135287, 63785 135135, 63681 135233, 63617 135505, 63637 135787, 63183 136382, 62995 135952, 62927 135832, 62946 135473, 62925 135342, 62808 135451, 62588 135515, 62483 135489, 62333 135146, 62578 134986, 62457 134920, 62208 134847, 61894 134944, 61753 134798, 61578 134975, 61937 135253, 62069 135289, 61958 135290, 61697 135292, 61571 135314, 61428 135229, 61397 135335, 61004 135622, 60241 135442, 60653 135209, 60659 135133, 60604 135054, 60260 134980, 60168 134994, 59960 135125, 59926 135360, 60026 135769, 60016 135836, 59667 135644, 59627 135507, 59680 135450, 59386 135416, 59179 135363, 59074 135411, 58765 135445, 58517 135731, 58152 135190, 58085 135149, 57923 134851, 57712 134842, 57447 135170, 57427 135213, 57215 135379, 57082 135597, 57001 135535, 56963 135331, 56899 135248, 56720 135236, 56064 134715, 55605 134667, 55515 134762, 55853 134970, 55757 135450, 55717 135488, 55293 135441, 55267 135392, 54937 135422, 54608 135618, 54543 135725, 54338 136007, 54046 135793, 53530 135623, 53191 135328, 53035 135288, 52979 135480, 53018 135612, 52670 135470, 52383 135414, 52152 135464, 52479 135209, 52428 135144, 52295 135118, 51984 135181, 51773 135125, 51500 135243, 50834 135326, 50687 135287, 50434 135276, 50007 135088, 49585 134979, 49066 134911, 48468 134977, 48441 134957, 47881 134850, 47829 134737, 47239 134728, 47050 134814, 46849 134739, 46622 134986, 46413 134986, 46104 134687, 46275 134378, 46224 134151, 46139 134047, 46249 133899, 46238 133784, 45899 133657, 45626 133769, 45444 133622, 45475 133565, 45347 133384, 44976 133405, 44788 133508, 44529 133467, 44099 133686, 44000 133560, 44091 133436, 44206 133376, 44307 133392, 44335 133296, 44590 133071, 45463 133039, 46008 133156, 45961 133109, 45997 132799, 46025 132770, 45976 132712, 45725 132659, 45581 132482, 45236 132696, 45414 133008, 44857 132757, 44977 132539, 44958 132473, 44826 132404, 44601 132411, 44171 132353, 43769 131871, 43981 131810, 44119 131716, 43838 131518, 43861 131195, 43582 131142, 43466 131189, 43302 131170, 43324 131094, 43161 130950, 43196 130752, 43155 130663, 43383 130419, 43398 130353, 43323 130074, 43239 130062, 43301 129994, 43359 129445, 43225 129258, 43140 128928, 43217 128724, 43144 128657, 42940 128748, 42735 128567, 42877 128329, 42854 128277, 42669 128220, 42706 128570, 42589 128595, 42378 128809, 42407 128597, 42614 128199, 42483 128185, 42245 128300, 42148 128040, 42073 127995, 42155 127678, 42024 127417, 41939 127445, 41801 127704, 41694 127430, 41860 127106, 41683 126831, 41577 126917, 41452 127192, 41401 127192, 41327 126885, 41263 126609, 41298 126498, 41361 125899, 41421 125628, 41539 125708, 41655 125570, 41501 125574, 41381 125345, 41326 125721, 41338 125846, 41251 125989, 41168 125910, 41230 125788, 41146 125605, 41042 125635, 40885 125517, 41079 125226, 41275 125115, 41340 125126, 41344 125038, 40969 124437, 40961 124074, 40972 123976, 40753 123596, 40812 123528, 40853 123552, 40876 123274, 40961 123455, 41052 123377, 40945 122880, 40909 122549, 41037 122550, 41096 122750, 41233 122723, 41310 122893, 41447 122850, 41470 122764, 41329 122150, 41112 121736, 41210 121353, 41117 121282, 40935 120693, 41055 120283, 40984 120078, 40891 120080, 40927 119761, 40902 119326, 40808 118962, 40775 118936, 40690 119317, 40642 119292, 40617 119136, 40666 118864, 40733 118575, 40747 118274, 40765 118204, 40822 118479, 40855 118554, 40940 118159, 41015 117994, 41038 117660, 41078 117340, 41284 116909, 41231 116854, 41170 116552, 41279 116484, 41140 116433, 40929 116541, 40868 116284, 40897 116124, 40745 116071, 40634 115906, 40632 115767, 40705 115521, 40730 115062, 40927 115022, 40990 115139, 40968 115320, 41035 115494, 41054 115226, 41119 115118, 41169 114738, 41259 114825, 41472 114524, 41525 114208, 41451 114180, 40917 113420, 40937 113343, 41219 113156, 41362 112973, 41270 112849, 41254 112554, 41194 112394, 41062 112384, 40975 112475, 40838 112528, 40816 112401, 40718 112361, 40745 112192, 40690 111957, 40598 111447, 40890 110922, 40889 110737, 40836 110775, 40757 110641, 40757 110459, 40731 110070, 40799 109881, 40874 109845, 40904 109699, 40875 109313, 40974 109296, 40990 109049, 41118 108830, 41130 108710, 41238 108243, 41150 107885, 41279 107595, 41556 107763, 41693 107879, 41557 108359, 41595 108818, 41673 108695, 41919 108567, 42073 108574, 42132 108654, 42286 108579, 42330 108646, 42440 108693, 42350 108523, 42438 108401, 42579 108519, 42637 108229, 42424 108110, 42221 107667, 42411 107536, 42181 107261, 42537 106908, 42767 107048, 42936 107335, 43055 107368, 43097 107513, 43366 107437, 43306 107073, 43182 106849, 43123 106812, 43063 106560, 43083 106441, 43331 106232, 43509 105528, 43637 105160, 43807 105021, 44351 104509, 44803 104559, 45345 104667, 45660 104709, 45785 104635, 46197 104955, 46251 104962, 46215 104945, 46234 104628, 46199 104598, 46193 104483, 46273 104392, 46445 104532, 46628 104818, 46807 104657, 46802 104408, 46536 104297, 46374 104104, 46424 104051, 46462 103793, 46414 103721, 46151 103924, 46246 104365, 46082 104371, 46014 104302, 46079 103798, 46092 103325, 46245 103267, 46320 103282, 46370 103240, 46466 102961, 46654 103216, 46984 103089, 47079 103117, 47153 102995, 47334 102916, 47398 102930, 47791 102908, 47842 102889, 48162 102825, 48214 102889, 48058 102998, 48060 103327, 47898 103671, 48048 103640, 48074 103360, 48304 103328, 48459 103485, 48675 103443, 48921 103487, 48971 103424, 49012 103489, 49517 103390, 49313 103137, 49322 103118, 49073 102855, 49329 102621, 49495 102572, 49800 102575, 50067 102637, 50227 102894, 50528 102716, 50971 102866, 51195 102861, 51121 102672, 50655 102231, 51226 102367, 51573 102497, 51601 102525, 51897 102661, 51821 103018, 51929 103206, 52348 103245, 52419 103082, 52872 103051, 53058 103002, 53396 103083, 53372 102914, 53495 102723, 53679 102970, 53652 103076, 54044 103042, 54297 103001, 54488 102914, 54460 102886, 54772 102835, 54989 102481, 55098 102519, 55176 102722, 55297 102770, 55169 102855, 55529 102907, 55885 102741, 55913 102928, 55881 103089, 56057 103132, 56097 103022, 56248 102854, 56401 102766, 56440 102841, 56715 102836, 57049 102691, 57122 102419, 57278 102597, 57290 102727, 57353 102766, 57302 102812, 57354 102803, 57439 102630, 57593 102515, 57585 102421, 57664 102434, 57617 102266, 57786 101936, 57868 102121, 57971 102427, 58260 102239, 58317 101953, 58389 101991, 58462 102115, 58439 102199, 58521 102252, 58907 102200, 58954 102445, 59046 102440, 59109 102376, 59151 102163, 59105 102169, 59146 102062, 59200 102049, 59356 102113, 59338 102205, 59260 102274, 59335 102416, 59345 102374, 59505 102441, 59446 102506, 59439 102771, 59465 102798, 59508 102742, 59616 102722, 59677 102788, 59543 102874, 59665 102972, 59934 102989, 60289 102769, 60840 102283, 61082 102235, 61133 101982, 61256 101889, 61397 102096, 61731 102268, 61738 102342, 61969 102451, 62118 102641, 62319 102502, 62685 102505, 63194 102340, 63358 102348, 63760 102288, 63878 102311, 64214 102268, 64083 102141, 64090 102040, 64390 101954, 64426 102126, 64367 102265, 64389 102596, 64543 102642, 64489 102807, 64596 102940, 64810 102777, 64823 102707, 65211 102741, 65426 102708, 65707 102604, 66086 102383, 66205 102382, 66490 102340, 66088 102710, 66230 102849, 66332 102750, 66499 102802, 66889 102649, 66991 102574, 67293 102447, 67360 102447, 67701 102324, 67773 102544, 67887 102633, 67922 102597, 68384 102610, 68597 102382, 68614 102129, 68909 101754, 69031 101768, 69191 101854, 69327 101871, 69537 102127, 69235 102238, 69004 102702, 69384 102672, 69683 102467, 69779 102550, 69782 102799, 69655 103141, 69818 103191, 69618 103248, 69591 103373, 69858 103211, 70062 103377, 70373 103214, 70474 103282, 70555 103452, 70344 103586, 70391 103728, 70782 103798, 70905 103793, 70806 103354, 71297 103174, 71380 103089, 71462 103114, 71547 102957, 71793 102809, 72140 102520, 72186 102525, 72389 102362, 72580 102289, 72611 102315, 72535 102670, 72544 102884, 72236 103047, 72237 103073, 72525 103168, 72779 103052, 72823 102984, 72898 103039, 72930 103161, 73222 103288, 73295 103018, 73450 103029, 73644 102977, 73847 103010, 73875 102978, 74186 102898, 73915 102651, 74090 102604, 74571 102715, 74661 102889, 75004 103075, 75258 102974, 75439 102956, 75574 103240, 75956 103031, 76299 103060, 76515 103140, 76538 103184, 76809 103118, 76849 103084, 77240 102993, 77134 102726, 77148 102730, 77356 102978, 77510 102976, 77507 102741, 77545 102710, 77663 102759, 77668 102946, 77858 102996, 77952 102741, 77609 102635, 77617 102522, 78023 102499, 78169 102538, 78325 102498, 78414 102540, 78762 102372, 79051 102271, 79150 102138, 79262 102170, 79478 102422, 79801 102043, 79885 102001, 80155 101803, 80254 101746, 80463 101586, 80611 101436, 80900 101801, 81238 101890, 81507 101843, 81662 101912, 81631 102200, 81719 102293, 81773 102114, 82047 101849, 82564 101937, 82706 102044, 82503 102174, 82391 102373, 82538 102309, 82913 101946, 83139 101911, 83193 101633, 83349 101514, 83440 101736, 83685 101935, 83760 101964, 83767 102077, 84077 102548, 84232 102322, 84631 102230, 84758 102536, 84960 102557, 85068 102451, 84941 102429, 84633 102228, 85126 102036, 85398 102015, 85573 101974, 85741 102024, 85931 101954, 86115 101955, 86016 101867, 86041 101723, 86244 101661, 86275 101877, 86245 101972, 86283 102339, 86450 102662, 86643 102768, 86769 102683, 86710 102436, 87155 102575, 87202 102648, 87595 102571, 87633 102615, 87740 102547, 87998 102474, 88271 102533, 88261 102606, 87960 102785, 88128 103007, 88202 102956, 88359 103045, 88680 102998, 89222 102938, 89243 102945, 89515 102924, 89615 102963, 89597 103055, 89690 103240, 89800 103320, 90333 103420, 90539 103256, 90597 103254, 90617 103077, 90900 102750, 91275 102945, 91463 103176, 91227 103240, 91092 103378, 91052 103481, 91291 103610, 91450 103581, 91650 103467, 91780 103562, 91783 103738, 91573 104311, 91611 104328, 91828 104210, 92036 104290, 92381 104155, 92471 104306, 92325 104416, 92377 104554, 92824 104574, 92899 104492, 92802 104159, 93307 103878, 93406 103844, 93510 103666, 93781 103441, 94089 103147, 94193 103134, 94364 102956, 94571 102807, 94470 103223, 94514 103381, 94248 103537, 94233 103632, 94499 103667, 94804 103460, 94827 103413, 94875 103437, 94915 103557, 95238 103695, 95351 103341, 95871 103225, 95882 103192, 96179 103030, 95913 102815, 96138 102733, 96544 102770, 96659 102821, 96700 102937, 97014 103062, 97223 102945, 97520 102892, 97608 103156, 97855 103060, 97968 102956, 98135 102930, 98727 102806, 99483 102970, 99748 103059, 100038 102960, 99956 102800, 100051 102566, 100266 102601, 100058 102551, 100064 102492, 100030 102541, 99694 102416, 99708 102322, 100109 102392, 100361 102334, 100532 102386, 100784 102279, 101072 102229, 101240 102046, 101467 102338, 101637 102556, 101816 102918, 102184 103285, 102019 103454, 102085 103588, 102066 103736, 101839 103973, 102074 104144, 101846 104344, 101760 104385, 101864 104564, 101945 104543, 102014 104450, 102275 104489, 102405 104459, 102376 104629, 102411 104678, 102451 104256, 102680 103942, 102346 103467, 102341 103247, 102250 102982, 102397 102895, 102731 102853, 102740 102888, 102996 102768, 103387 102987, 103486 103101, 103596 102948, 103455 102870, 103467 102836, 103736 102747, 103805 102415, 104035 102223, 104464 102286, 104663 102434, 104518 102525, 104297 102945, 104345 102967, 104680 102838, 105340 102801, 106125 102719, 106282 102724, 106681 102516, 106957 102500, 107141 102447, 107720 102513, 108053 102656, 108224 102608, 108469 102660, 108685 102551, 108635 102442, 108419 102265, 108640 102325, 108840 102275, 109154 102140, 109114 102339, 109152 102472, 109410 102392, 109797 102037, 110142 101906, 110458 101691, 110661 101924, 110765 102084, 111112 102198, 111396 102219, 111501 102275, 111484 102645, 111727 102914, 112139 102810, 112410 102597, 112739 102249, 112982 102181, 113035 101905, 113178 101773, 113348 102030, 113399 102044, 113648 102337, 113692 102355, 113916 102639, 114059 102420, 114480 102269, 114973 102008, 115149 101988, 115499 101861, 115628 101866, 116006 101756, 115861 101625, 115867 101540, 116101 101437, 116138 101639, 116099 101740, 116127 102098, 116295 102422, 116429 102475, 116596 102410, 116547 102246, 116621 102164, 117011 102215, 117057 102284, 117824 102077, 118150 102196, 118156 102230, 117818 102363, 117817 102486, 118028 102702, 118051 102670, 118271 102766, 118416 102736, 118647 102767, 119023 102833, 119058 102857, 119321 102918, 119410 102985, 119393 103074, 119563 103446, 119649 103408, 120081 103746, 120339 103633, 120339 103450, 120649 103177, 121048 103536, 121230 103840, 120986 103834, 120856 103931, 120813 104036, 121072 104265, 121171 104277, 121402 104204, 121525 104322, 121533 104505, 121326 105001, 121363 105024, 121595 104957, 121781 105075, 122112 104983, 122173 105016, 122181 105173, 122280 105173, 122155 105241, 122165 105339, 122595 105444, 122672 105409, 122547 105080, 122838 105009, 123056 104896, 123159 104884, 123260 104743, 123520 104572, 123827 104332, 123913 104329, 124291 104057, 124200 104427, 124245 104553, 124007 104664, 123989 104751, 124252 104784, 124514 104627, 124538 104582, 124626 104611, 124694 104710, 124941 104777, 124983 104567, 125106 104449, 125415 104380, 125553 104351, 125575 104284, 125845 104127, 125573 103988, 125783 103882, 126295 103875, 126431 103973, 126632 104017, 126860 103899, 127125 103831, 127269 104068, 127597 103827, 127626 103849, 127675 103799, 128244 103837, 128406 103915, 128605 103677, 128647 103712, 128759 104020, 128874 103995, 128916 104046, 128974 104043, 129029 103893, 129275 103787, 129447 103791, 129671 103577, 129602 103440, 129713 103206, 129320 103146, 129335 103050, 129719 103003, 129862 103020, 130041 102895, 130164 102932, 130487 102739, 130799 102594, 130951 102403, 131045 102444, 131276 102732, 131415 102812, 131561 103097, 131815 103267, 131982 103425, 131825 103585, 131872 103711, 131816 103924, 131616 104110, 131841 104234, 131829 104315, 131938 104364, 132261 104347, 132445 104089, 132609 104040, 132419 104033, 132330 103782, 132117 103600, 132132 103546, 132005 103154, 132245 103050, 132452 103073, 132708 102981, 133070 103149, 133247 103344, 133509 103064, 133475 102915, 133554 102723, 133791 102553, 134312 102774, 134788 103006, 134819 103028, 134408 102897, 134285 102945, 134096 103200, 134206 103391, 134413 103369, 134601 103463, 135139 103493, 135192 103373, 135744 103302, 135773 103279, 136353 103379, 136882 103330, 137201 103288, 137623 103123, 137969 103106, 138563 103213, 138786 103317, 138974 103260, 139246 103310, 139402 103231, 139102 102993, 139340 103043, 139565 102966, 139877 102792, 139845 102935, 139898 103096, 140036 103041, 140375 102674, 140862 102398, 141105 102152, 141382 102472, 141741 102568, 142001 102545, 142150 102604, 142135 102943, 142396 103154, 142942 102885, 143193 102610, 143529 102283, 143763 102185, 143838 102080, 143878 101879, 143969 101790, 144119 101959, 144311 102032, 144524 102223, 144678 102262, 144829 102401, 144974 102233, 145163 102159, 145511 102099, 145541 102073, 145998 101872, 146354 101835, 146500 101798, 146645 101832, 146867 101744, 146901 101517, 147271 101389), (143581 135001, 143976 135192, 143940 135078, 144043 134952, 144013 134901, 143594 134807), (68879 134758, 69248 134988, 69214 134862, 69298 134787, 69215 134663, 68774 134519), (65782 134382, 65714 134660, 65735 134790, 65796 134809, 66043 134707, 66253 134741, 66493 134669, 66828 134926, 66910 134742, 67017 134614, 66814 134713, 66601 134499, 66540 134559, 66487 134521, 66270 134667, 66066 134661, 65904 134347, 65827 134312), (164793 134568, 164770 134690, 164905 134902, 164993 134817, 165283 134808, 165433 134869, 165622 134594, 165601 134517, 165229 134592, 165103 134583, 164916 134441), (143356 134540, 143449 134773, 143588 134782, 143708 134502, 143559 134451), (170249 134097, 170241 134167, 170413 134497, 170597 134585, 170823 134629, 170854 134376, 170475 134334, 170593 134042, 170406 134003), (137415 134174, 137436 134295, 137526 134449, 137609 134353, 138162 134483, 138362 134150, 137891 134139, 137765 134170, 137577 134038), (45978 133615, 46251 133757, 46366 133686, 46383 133467, 46213 133333), (189640 132105, 190033 132258, 190139 132148, 189973 132090), (193701 118681, 193713 118969, 193757 118982, 193790 118915, 193775 118642, 193726 118073, 193676 118023), (191372 108040, 191400 108103, 191304 108436, 191327 108481, 191556 108335, 191594 108247, 191510 107981, 191407 107912), (188119 105974, 188080 106056, 188126 106140, 188400 105920, 188318 105909), (188652 105805, 188679 106125, 189087 106087, 188973 105793), (189497 105786, 189534 105812, 189535 105925, 189583 105823, 189784 105774, 189926 105683, 189733 105606), (131571 104488, 131787 104761, 131925 104881, 132137 104879, 132179 104738, 132085 104738, 131680 104507, 131686 104442), (188398 103912, 188405 103992, 188567 104111, 188360 104298, 188335 104303, 188064 104441, 188048 104640, 188235 104846, 188465 104447, 188408 104330, 188567 104256, 188638 104158, 188640 104046, 188713 103903, 188484 103780), (126133 104488, 125891 104479, 125575 104527, 125512 104660, 125931 104638, 126033 104613, 126166 104672, 126253 104598, 126251 104514, 126186 104425), (187466 104348, 187379 104462, 187442 104536, 187763 104398, 187558 104297, 187570 104259, 187375 104173), (120287 104169, 120666 104304, 120664 104164, 120395 103967), (133346 103832, 133312 103838, 133367 104088, 133469 104201, 133668 104192, 133560 104017, 133663 103708, 133512 103644), (182922 103927, 182951 104078, 183087 104160, 183256 104093, 183573 103898, 183598 103833, 183459 103611, 183514 103412), (133024 103609, 132839 103701, 132613 103652, 132648 103884, 132899 103876, 133002 103960, 133310 103833, 133476 103591, 133254 103347), (90511 103764, 90906 103803, 90904 103660, 90610 103549), (95768 103681, 96057 103732, 96358 103662, 96506 103784, 96595 103702, 96614 103587, 96533 103461, 96475 103535, 96214 103469, 95938 103429), (183989 103559, 184007 103692, 183892 103752, 184037 103736, 184199 103460, 184055 103448), (73775 103408, 73759 103427, 74218 103505, 74486 103509, 74513 103446, 74456 103334, 74390 103386, 74146 103310), (103243 103402, 103363 103347, 103697 103417, 103838 103273, 103639 103293, 103500 103088), (175394 103184, 175246 103409, 175829 103298, 175863 103262, 176009 103310, 176077 103263, 176079 103189, 176037 103148), (59468 102800, 59496 102829, 59618 102772), (114617 102545, 114800 102539, 114898 102432, 114783 102428, 114493 102288)), ((108850 136644, 108647 136612, 108348 136570, 108610 136156)), ((104897 136284, 104997 136403, 104652 136500, 104722 136201)), ((174305 135194, 174168 135529, 174037 135603, 174086 135371, 174158 135328, 174135 135113)), ((136146 135168, 135649 135133, 135649 135090, 135940 134969)), ((41043 121936, 41186 122120, 41202 122554, 40944 122100, 40904 121929, 40928 121890)), ((123856 103788, 123975 104015, 123854 104135, 123736 103997, 123463 103841, 123678 103718)), ((181388 103391, 181538 103439, 181342 103486, 181240 103467, 181357 103063)), ((119724 102830, 119639 103036, 119662 103128, 119569 103134, 119480 102926, 119554 102702)), ((173519 102386, 173602 102512, 173609 102599, 173728 102771, 173514 102996, 173313 102755, 172941 102588, 173164 102419, 173266 102414, 173364 102332)), ((94131 102562, 94237 102760, 94123 102883, 94024 102765, 93841 102777, 93907 102672, 93790 102609, 93947 102512)), ((150965 102382, 150913 102507, 150983 102711, 150743 102752, 150574 102561, 150694 102218)), ((68054 101957, 67990 102150, 68030 102280, 67838 102396, 67733 102292, 67830 101952)), ((72160 101873, 72322 102233, 72151 102379, 71998 102153, 71724 102100, 71823 101958, 71736 101883, 71850 101827, 71927 101833, 71999 101784)), ((169448 101850, 169401 101987, 169460 102194, 169226 102286, 169062 102121, 169154 101882, 169174 101745))) \ No newline at end of file +MultiPolygon (((147289 101492, 147242 101719, 147197 101776, 147218 102093, 147259 102076, 147389 102138, 147392 102471, 147648 102288, 147623 102181, 148137 102295, 148172 102346, 148465 102254, 148577 102197, 148901 102061, 149036 102086, 149302 102109, 149463 102125, 149272 102163, 148937 102366, 148938 102449, 149117 102596, 149219 102465, 149345 102594, 149476 102549, 149777 102548, 149863 102511, 150134 102496, 150233 102538, 150557 102570, 150547 102600, 150750 102934, 150801 102912, 151257 103199, 151451 103115, 151457 102826, 151757 102643, 152047 102912, 152261 103054, 152386 103243, 152530 103190, 152880 103207, 153247 103211, 154056 103406, 154393 103447, 154973 103599, 155060 103545, 155100 103604, 155982 103648, 156531 103905, 156918 103881, 157384 103888, 157677 103949, 157902 103873, 158295 103870, 158382 103777, 158054 103621, 158326 103620, 158609 103479, 158921 103328, 158926 103578, 159080 103506, 159208 103335, 159407 103114, 159605 103018, 160226 102526, 160459 102832, 160833 102936, 161042 102897, 161218 103011, 161202 103295, 161303 103361, 162081 103119, 162153 102960, 162231 103020, 162468 102787, 162676 102742, 162742 102646, 162776 102466, 162854 102390, 162962 102559, 163249 102661, 163345 102847, 163504 102878, 163575 102980, 163720 102792, 164156 102649, 164176 102627, 164599 102346, 165114 102152, 165205 102150, 165383 102040, 165411 101809, 165746 101644, 165778 101795, 165696 102013, 165720 102318, 165786 102277, 166045 102366, 166018 102482, 166117 102372, 166544 102347, 166785 102276, 167055 102137, 167095 102097, 167403 101908, 167813 101885, 167985 101878, 167815 101926, 167483 102191, 167483 102296, 167637 102372, 167713 102283, 167818 102353, 167973 102293, 168276 102247, 168355 102202, 168634 102137, 168729 102164, 169044 102134, 169038 102172, 169224 102475, 169279 102434, 169730 102645, 169936 102500, 169916 102187, 170186 101926, 170336 101993, 170532 102185, 170689 102264, 170892 102592, 170596 102599, 170492 102690, 170436 102843, 170712 103063, 170787 103124, 170795 103080, 171025 103006, 171096 103077, 171105 103274, 171006 103584, 171207 103683, 171275 103662, 171241 103706, 171403 103852, 171735 103762, 171903 103865, 171927 103976, 171705 104095, 171743 104184, 172213 104283, 172262 104237, 172156 103914, 172619 103682, 172830 103639, 172900 103529, 173094 103391, 173509 103035, 173525 103033, 173757 102815, 173949 102709, 174009 102739, 173927 103058, 173943 103287, 173660 103472, 173661 103525, 173920 103551, 174155 103396, 174209 103301, 174318 103340, 174376 103452, 174456 103374, 174621 103431, 174679 103247, 174853 103089, 175105 103011, 175263 102982, 175356 102906, 175714 102690, 175405 102553, 175611 102412, 176108 102435, 176166 102572, 176510 102732, 176632 102730, 176986 102606, 177088 102927, 177133 102959, 177479 102784, 177730 102912, 178167 103227, 178270 103212, 178415 103103, 178539 103533, 178699 103628, 178735 103533, 178909 103540, 179152 103666, 179293 103595, 179307 103474, 179240 103402, 179321 103154, 179015 102954, 179038 102804, 179405 102930, 179596 103044, 179720 103036, 179802 103097, 180130 102994, 180399 102953, 180492 102849, 180553 102866, 180918 103314, 181124 103658, 181476 103909, 181365 103996, 181444 104116, 181416 104349, 181196 104523, 181401 104621, 181087 104844, 181307 105052, 181639 105108, 181766 104929, 181781 104659, 181904 104457, 182004 104371, 181932 104386, 181860 104168, 181689 104083, 181716 104147, 181611 104066, 181633 104042, 181561 103645, 181772 103522, 182052 103455, 182231 103334, 182687 103358, 182805 103441, 182509 103884, 182265 104017, 182458 104020, 182604 104079, 182724 103953, 182909 103883, 183029 103627, 183041 103537, 182807 103418, 183104 103015, 183072 102882, 183095 102773, 183434 102398, 183774 102329, 184013 102268, 184150 102313, 183900 102554, 183714 102959, 184390 102785, 184555 102987, 184729 103061, 184795 103005, 184985 103022, 185172 102952, 185044 102843, 185017 102948, 184776 102837, 184878 102638, 184946 102590, 185175 102594, 185526 102578, 185595 102639, 185644 102816, 185402 102978, 185495 103165, 185364 103320, 185415 103356, 185993 103497, 186163 103449, 186612 103530, 186680 103465, 186766 103478, 186777 103584, 187095 103697, 187163 103665, 187066 103457, 186900 103293, 186898 102946, 187172 103041, 187449 103056, 187568 103029, 187841 103144, 187874 103185, 188271 103377, 188289 103270, 188431 103097, 188494 103281, 188577 103346, 188718 103324, 188798 103355, 188824 103659, 188957 104299, 188699 104528, 188627 104557, 188605 104774, 188682 104938, 188386 105092, 188546 105183, 188772 105026, 188991 104966, 188852 105161, 188506 105245, 188520 105468, 188639 105778, 188726 105719, 188976 105697, 188978 105558, 189162 105369, 189126 105211, 189352 105060, 189442 105105, 189423 105158, 189636 105486, 189980 105363, 190089 105603, 190257 105596, 190431 105473, 190635 105410, 190804 105487, 190925 105394, 191167 105346, 191407 105385, 191426 105475, 191362 105505, 191270 105644, 191419 105725, 191378 106026, 191441 106239, 191247 106397, 191280 106566, 191357 106635, 191712 106619, 191707 106824, 191589 107117, 191591 107166, 191438 107518, 191486 107489, 191842 107548, 191945 107386, 192289 107018, 192412 106980, 192617 107052, 192768 107194, 192617 107366, 192273 107654, 192528 107597, 192618 107650, 192457 108077, 192327 108078, 192227 108154, 192315 108527, 192460 108725, 192530 108695, 192654 108509, 192824 108653, 192991 108649, 193128 108723, 193342 109074, 193377 109066, 193385 108738, 193412 108477, 193256 108025, 193338 107868, 193523 107742, 193784 108149, 193791 108267, 193856 108785, 193928 109098, 193921 109623, 194041 109726, 194014 109968, 194192 109990, 194145 110534, 193970 110609, 193981 111037, 194090 111179, 194208 111406, 194186 111772, 194114 112237, 194141 112431, 193957 112520, 193762 112515, 193785 112803, 193721 112792, 193983 113062, 194376 113386, 194193 113681, 193803 114209, 193782 114331, 193977 114716, 194075 114877, 194258 115254, 194301 115516, 194336 115853, 194190 116248, 193808 116627, 193635 116898, 193616 117188, 193733 117256, 193797 117473, 193881 118035, 193889 118041, 194031 118525, 194060 118432, 194108 118157, 194185 118405, 194186 118880, 194156 119052, 194084 119101, 194031 119307, 194017 119558, 194088 120051, 193901 120195, 193881 120255, 193983 120694, 193859 121226, 193808 121271, 193746 121535, 193908 121772, 193921 121907, 194002 121948, 194003 122292, 193919 122553, 193960 122713, 193902 123111, 193803 123527, 193912 124308, 193955 124449, 193912 124495, 193696 124892, 193504 125134, 193367 125613, 193270 125520, 193126 125503, 193027 125235, 192970 125483, 192847 125120, 192753 125333, 192676 125797, 192772 125873, 193218 125870, 193261 125628, 193254 125811, 193502 125640, 193600 125861, 193876 125817, 193818 126110, 193718 126306, 193601 126318, 193680 126631, 193663 126855, 193715 126921, 193657 126955, 193649 127144, 193583 127153, 193513 127044, 193313 127280, 193067 127163, 193090 127406, 193269 127607, 193200 127699, 193042 127467, 192830 127658, 192849 127794, 192802 127831, 192756 127762, 192702 127763, 192870 128029, 192668 128408, 192444 128240, 192358 128149, 192245 128156, 192101 128238, 192095 128495, 192108 128781, 192122 128882, 192138 129206, 192122 129242, 192129 129802, 192277 130104, 191858 130546, 191556 130801, 191602 130860, 191494 131002, 191565 131169, 191466 131164, 191423 131224, 191143 131156, 191069 131173, 190979 131391, 191008 131524, 190728 131683, 190703 131723, 191109 131900, 190786 132216, 190699 132356, 190197 132439, 190033 132391, 189869 132499, 189476 132278, 189146 132444, 188863 132755, 188988 132913, 188790 133104, 188982 133184, 189187 133074, 189508 133076, 189871 133116, 190198 133123, 190478 133381, 190250 133530, 190102 133558, 189825 133438, 189535 133412, 189347 133587, 189184 133729, 189013 133705, 188688 133186, 188417 133400, 188466 133800, 188343 133827, 188191 134088, 188443 133966, 188634 134119, 188473 134253, 188554 134441, 188748 134657, 188561 134858, 188196 134878, 188048 134714, 187913 134768, 187564 134617, 187037 134670, 186970 134843, 186426 134944, 186325 135023, 185814 134980, 185359 135030, 184937 135137, 184614 135285, 184509 135270, 184229 135295, 184054 135332, 183574 135274, 183031 135044, 182917 135076, 182745 135040, 182557 135142, 182388 135164, 182322 135235, 182611 135504, 182447 135467, 182050 135620, 182111 135323, 182091 135263, 181968 135321, 181618 135392, 181390 135620, 181116 135809, 180936 135876, 180546 136059, 180255 135599, 180163 135526, 179859 135421, 179759 135446, 179567 135417, 179486 135360, 179526 134997, 179438 134867, 179239 134691, 179081 134606, 178876 134648, 178566 134828, 178248 135146, 178103 135168, 178055 135464, 177807 135658, 177624 135329, 177652 135295, 177531 135243, 177372 135070, 177298 134846, 177067 134512, 176768 134856, 176657 134825, 176729 134889, 176593 134881, 176206 135111, 175924 135211, 175953 135492, 175788 135834, 175713 135442, 175715 135305, 175387 135299, 175289 135344, 175387 135388, 175293 135727, 175146 135656, 175151 135572, 175059 135428, 174951 135453, 174890 135224, 174820 135317, 174654 135173, 174540 135176, 174547 135264, 174526 135533, 174328 135628, 174253 135554, 174341 135231, 174315 135183, 174377 135009, 174262 135070, 174318 135010, 174226 135030, 173986 134985, 173626 135116, 173525 135006, 173212 135289, 173185 135293, 173246 135038, 173338 134960, 173105 134747, 172823 134798, 172466 134944, 172110 135050, 172058 135122, 171899 135165, 171707 135114, 171739 134916, 171597 134656, 171452 134782, 171125 134705, 171063 134585, 170889 134653, 171053 134748, 170891 134901, 170633 134936, 170627 134984, 170357 135357, 170243 135310, 169999 135031, 170160 134980, 170330 134756, 170245 134710, 169763 134820, 169567 134677, 169650 134401, 169619 134343, 169695 134147, 169843 133896, 169706 133812, 169600 133874, 169504 133838, 169485 133732, 169348 133673, 169205 133740, 169071 133988, 169041 133807, 169099 133767, 169055 133580, 168495 133612, 168605 134014, 168099 134245, 167911 134560, 167522 134827, 167355 134991, 167175 135008, 166950 135205, 167010 134953, 166956 134754, 167304 134541, 167310 134511, 166920 134471, 166584 134722, 166503 134544, 166459 134577, 166188 134555, 166033 134684, 165978 134858, 165644 134971, 165513 134969, 165457 135112, 165298 135211, 165549 135401, 165275 135495, 164789 135472, 164656 135327, 164463 135262, 164191 135369, 163909 135388, 163842 135067, 163510 135313, 163449 135268, 163371 135354, 162878 135311, 162672 135246, 162452 135360, 162432 135304, 162561 135111, 162011 135115, 161929 135004, 161647 135029, 161618 135049, 161277 135037, 161390 135170, 161367 135272, 161047 135108, 160951 135204, 160784 135006, 160680 134934, 160618 135007, 160677 135147, 160984 135287, 161300 135544, 161701 135725, 161713 135737, 161318 135587, 161067 135607, 160888 135453, 160693 135449, 160366 135346, 160138 135548, 160013 135259, 159835 134959, 159454 135107, 159302 135156, 158877 135405, 158833 135403, 158563 135456, 158353 135531, 157772 135541, 157337 135409, 157176 135474, 156947 135451, 156722 135585, 156609 135642, 156715 135774, 156893 135886, 156671 135870, 156198 136100, 156259 135837, 156229 135744, 156127 135803, 155829 135893, 155574 136163, 155349 136334, 154918 136528, 154714 136680, 154542 136500, 154353 136231, 153984 136113, 153892 136140, 153652 136120, 153552 136060, 153593 135690, 153306 135419, 153053 135341, 152580 135581, 152424 135744, 152139 135968, 152010 136078, 151973 136256, 151750 136416, 151665 136297, 151615 136133, 151319 135935, 151244 135715, 150941 135293, 150655 135636, 150553 135647, 150201 135755, 150161 135787, 149841 135908, 149141 135992, 148954 136073, 148757 136104, 148867 136170, 148843 136326, 148639 136420, 148607 136196, 148634 136111, 148587 135746, 148415 135444, 148211 135379, 148050 135457, 148114 135730, 147652 135706, 147599 135643, 147195 135813, 146749 136022, 146448 136017, 146441 135964, 146753 135735, 146754 135594, 146534 135468, 146203 135523, 146003 135606, 145568 135722, 145105 135802, 144993 135772, 145004 135675, 144940 135517, 144856 135457, 144819 135353, 144738 135411, 144258 135273, 144244 135247, 144182 135276, 144239 135309, 144026 135482, 143898 135483, 143882 135641, 143572 135967, 143240 135766, 143044 135494, 143258 135460, 143461 135255, 143530 134972, 142808 135181, 142614 135003, 142703 134579, 142911 134207, 142805 134129, 142630 134203, 142475 134117, 142442 133928, 142364 133881, 142278 133907, 142160 134105, 142168 134201, 142008 134222, 141982 133986, 142086 133926, 142017 133734, 141547 133613, 141440 133711, 141550 134115, 140958 134288, 140799 134562, 140406 134762, 140183 134934, 140023 134920, 139718 135114, 139790 134861, 139755 134588, 140088 134453, 140094 134400, 139750 134286, 139351 134492, 139248 134284, 138934 134214, 138818 134290, 138777 134473, 138691 134549, 138319 134615, 138165 134492, 138144 134732, 137948 134822, 138223 135040, 137946 135112, 137552 135086, 137343 135004, 137322 134941, 137022 134843, 136645 134999, 136493 135002, 136351 134706, 135940 134954, 135577 135006, 135229 134925, 135039 134916, 134877 135044, 134792 134959, 135057 134672, 134591 134852, 134455 134932, 134172 134918, 133779 135004, 133556 135085, 133748 135061, 133804 135177, 133694 135392, 133421 135386, 133726 135424, 134098 135563, 134086 135641, 133686 135616, 133556 135571, 133360 135662, 133229 135581, 132893 135712, 132594 135774, 132456 135925, 132364 135912, 132064 135512, 131960 135530, 131449 135373, 131078 135348, 130574 135691, 130880 135933, 130800 135919, 130474 136087, 130566 135694, 130433 135488, 130058 135503, 130241 135641, 130311 135805, 129950 135960, 129770 136171, 129365 136500, 128949 136741, 128626 136251, 128497 136199, 128446 136104, 128148 136173, 127886 136127, 127908 135993, 127839 135960, 127716 135989, 127651 136138, 127575 136144, 127158 135990, 126750 136006, 126603 136045, 126590 136114, 126404 136287, 126174 136390, 126088 136272, 126079 136077, 125898 135949, 125420 136013, 125204 136108, 125018 135838, 124939 135792, 124563 135511, 124353 135466, 124189 135599, 124265 135634, 124639 135626, 124729 135776, 124430 135901, 123754 135988, 123703 136011, 123347 136074, 123273 136052, 123213 135680, 123096 135477, 122819 135391, 122756 135337, 122691 135437, 122643 135651, 122510 135631, 121999 135800, 121844 135668, 121573 135898, 121568 135811, 121622 135769, 121623 135583, 121842 135658, 121902 135401, 121762 135410, 121620 135574, 121417 135449, 121133 135476, 121049 135569, 120658 135651, 120447 135748, 120258 135904, 120154 135874, 120086 136053, 119789 136279, 119473 136548, 119452 136500, 119534 136164, 119652 135882, 119635 135791, 119395 135980, 119227 135779, 118829 135851, 118509 136127, 118507 136190, 118428 136136, 118318 136180, 118197 136376, 118305 136615, 118228 136767, 117973 137052, 117776 137191, 117740 136950, 117886 136638, 118130 136633, 118132 136389, 117856 136399, 117602 136628, 117223 136550, 117160 136572, 117126 136516, 117339 136288, 117514 136185, 117251 136082, 117149 136004, 116952 136134, 116884 136454, 116808 136303, 116687 136216, 116557 136220, 116387 136459, 116383 136518, 116338 136531, 116224 136732, 116048 136740, 115806 136673, 115623 136472, 115752 136469, 115765 136210, 115875 136046, 115726 135924, 115616 135998, 115573 136442, 115313 136656, 115197 136803, 114946 136606, 114421 136372, 114395 136106, 114671 135974, 114756 135965, 114950 135593, 114637 135496, 114495 135317, 114420 135283, 114264 135411, 114337 135508, 114237 135738, 114010 135683, 114047 135454, 113922 135387, 114084 135177, 113709 135347, 113585 135286, 113801 134932, 113474 135105, 113328 135292, 113311 135076, 113061 135023, 112988 134932, 112800 135031, 112663 135274, 112815 135369, 112848 135467, 112723 135575, 112282 135653, 112477 135987, 112468 136249, 112200 136411, 112030 136397, 111744 136605, 111606 136329, 111528 136219, 111495 135947, 111474 135955, 111198 135736, 111206 135609, 111344 135288, 111483 135126, 111378 135091, 111296 135276, 110948 135073, 110853 135147, 110801 135336, 110742 135386, 110129 135361, 109900 135563, 109826 135582, 109902 135675, 109930 135813, 109898 135977, 109361 136059, 109070 135973, 108982 135753, 109018 135678, 108572 135701, 108359 135989, 108183 135787, 108007 135903, 108134 135651, 107993 135488, 107824 135440, 107510 135317, 107500 135251, 107380 135207, 107222 135217, 107036 135399, 106858 135430, 106661 135198, 106441 135242, 106302 135206, 106211 135075, 106038 135009, 106034 135111, 105955 135137, 105923 135311, 105951 135404, 106093 135454, 106136 135385, 106276 135341, 106506 135358, 106737 135520, 106855 135713, 106745 135933, 106291 135738, 106290 135663, 106137 135531, 106056 135633, 106235 135744, 106183 136032, 105943 136048, 105739 135953, 105482 136067, 105360 136075, 105289 136216, 105312 136288, 105166 136376, 104952 136050, 104665 136071, 104604 135981, 104366 135871, 104515 135755, 104145 135234, 104041 135248, 104085 135307, 103970 135500, 103984 135672, 103676 135965, 103449 135625, 103475 135258, 103084 135277, 102423 135413, 102316 135482, 101926 135658, 101223 136046, 101049 136013, 100672 136006, 100404 135965, 100242 135976, 100191 136146, 99730 135992, 99269 136011, 99195 136002, 98823 136033, 98693 135957, 98012 135998, 97790 136098, 97612 135850, 97310 135619, 96993 135447, 96928 135395, 96728 135226, 96725 134880, 96456 134773, 96152 134807, 95843 134931, 95367 135283, 95072 135605, 94874 135414, 94584 135321, 94485 135118, 94285 134980, 93947 135151, 93644 135203, 93621 135244, 93579 135231, 93264 135493, 93001 135580, 92834 135678, 92670 136057, 92054 136536, 92030 136488, 92073 136227, 92244 135948, 92190 135752, 91918 136007, 91900 135879, 91802 135771, 91661 135828, 91347 135880, 91131 136093, 91116 136159, 91047 136117, 90919 136159, 90759 136374, 90872 136615, 90797 136764, 90339 137184, 90307 136950, 90453 136639, 90695 136634, 90694 136388, 90423 136398, 90176 136632, 89794 136550, 89727 136573, 89681 136498, 89972 136246, 90064 136244, 90142 136168, 90077 136100, 89848 135965, 89492 136145, 89455 136416, 89371 136306, 89125 136172, 89029 136302, 88890 136646, 88616 136740, 88374 136672, 88233 136483, 88321 136465, 88333 136214, 88410 136077, 88462 136053, 88219 135897, 88161 136116, 88126 136435, 87745 136787, 87523 136611, 86989 136371, 86963 136104, 87240 135974, 87326 135965, 87517 135593, 87207 135496, 86971 135254, 86904 135507, 86806 135738, 86609 135713, 86527 135539, 86543 135406, 86505 135345, 86587 135239, 86398 135331, 86209 135346, 86166 135299, 86313 135035, 86129 134966, 86072 134981, 86005 134907, 85524 134979, 85431 135193, 85222 135242, 85375 135344, 85363 135419, 85430 135509, 85349 135505, 85235 135590, 84944 135622, 84874 135666, 85110 136117, 84884 136377, 84590 136411, 84297 136563, 84140 136272, 84165 136654, 84073 136578, 84008 136352, 83879 136374, 83968 136325, 83982 136146, 83777 136341, 83944 136147, 84002 136108, 84028 135950, 83831 135806, 83748 135624, 83148 135941, 82702 136044, 82544 136113, 82485 136088, 82156 136110, 81742 136005, 81443 136222, 81304 136319, 81199 136183, 81247 136069, 81111 136096, 81017 136168, 81122 136274, 81174 136215, 81412 136642, 81164 136602, 80878 136583, 80988 136446, 80919 136464, 80688 136602, 80607 136305, 80274 136387, 79838 136780, 79352 136963, 79204 137074, 78889 136647, 78725 136575, 78575 136452, 78214 136412, 78091 136286, 78104 136094, 77898 136077, 77858 136221, 77880 136293, 77736 136379, 77573 136136, 77356 136219, 77462 136277, 77570 136404, 77218 136500, 77255 136280, 77348 136219, 76993 136083, 76834 136041, 76765 135943, 76670 135934, 76675 136033, 76453 136336, 76225 136116, 76069 135927, 75919 135837, 75731 135667, 75605 135619, 75565 135543, 75543 135288, 75369 135409, 75321 135349, 75126 135313, 75060 135146, 74935 135097, 74810 135110, 74619 135231, 74763 135254, 75062 135388, 74744 135552, 74607 135568, 73980 135632, 73531 135754, 73480 135413, 73331 135175, 73090 135141, 72995 135227, 72949 135405, 72736 135400, 72236 135639, 72169 135593, 71848 135917, 71689 135933, 71673 135823, 71862 135663, 71864 135511, 71654 135425, 71367 135493, 71288 135568, 71040 135604, 70993 135634, 70604 135716, 70360 135763, 70193 135696, 70220 135539, 70079 135246, 69950 135326, 69544 135136, 69495 135038, 69386 135073, 69489 135154, 69314 135263, 69145 135215, 69111 135345, 69305 135639, 69276 135684, 68888 135662, 68444 135761, 68640 135448, 68572 135408, 68355 135051, 68640 134987, 68769 134819, 68580 134663, 68374 134979, 68064 135234, 67989 135225, 67971 135087, 68120 134737, 67881 134421, 67639 134362, 67512 134397, 67456 134334, 67372 134362, 67111 134592, 67228 134742, 67182 134910, 66807 135079, 66690 135304, 66570 135323, 66126 135241, 66073 135302, 66004 135591, 65754 135734, 65537 135657, 65272 135853, 65027 135919, 65005 135988, 65058 136145, 64870 136361, 64656 136047, 64453 136137, 64643 136213, 64809 136374, 64490 136586, 64183 136707, 64278 136212, 63953 136111, 63861 136118, 63817 136044, 63870 135938, 64210 135619, 63866 135287, 63785 135135, 63681 135233, 63617 135505, 63637 135787, 63183 136382, 62995 135952, 62927 135832, 62946 135473, 62925 135342, 62808 135451, 62588 135515, 62483 135489, 62333 135146, 62578 134986, 62457 134920, 62208 134847, 61894 134944, 61753 134798, 61578 134975, 61937 135253, 62069 135289, 61958 135290, 61697 135292, 61571 135314, 61428 135229, 61397 135335, 61004 135622, 60241 135442, 60653 135209, 60659 135133, 60604 135054, 60260 134980, 60168 134994, 59960 135125, 59926 135360, 60026 135769, 60016 135836, 59667 135644, 59627 135507, 59680 135450, 59386 135416, 59179 135363, 59074 135411, 58765 135445, 58517 135731, 58152 135190, 58085 135149, 57923 134851, 57712 134842, 57447 135170, 57427 135213, 57215 135379, 57082 135597, 57001 135535, 56963 135331, 56899 135248, 56720 135236, 56064 134715, 55605 134667, 55515 134762, 55853 134970, 55757 135450, 55717 135488, 55293 135441, 55267 135392, 54937 135422, 54608 135618, 54543 135725, 54338 136007, 54046 135793, 53530 135623, 53191 135328, 53035 135288, 52979 135480, 53018 135612, 52670 135470, 52383 135414, 52152 135464, 52479 135209, 52428 135144, 52295 135118, 51984 135181, 51773 135125, 51500 135243, 50834 135326, 50687 135287, 50434 135276, 50007 135088, 49585 134979, 49066 134911, 48468 134977, 48441 134957, 47881 134850, 47829 134737, 47239 134728, 47050 134814, 46849 134739, 46622 134986, 46413 134986, 46104 134687, 46275 134378, 46224 134151, 46139 134047, 46249 133899, 46238 133784, 45899 133657, 45626 133769, 45444 133622, 45475 133565, 45347 133384, 44976 133405, 44788 133508, 44529 133467, 44099 133686, 44000 133560, 44091 133436, 44206 133376, 44307 133392, 44335 133296, 44590 133071, 45463 133039, 46008 133156, 45961 133109, 45997 132799, 46025 132770, 45976 132712, 45725 132659, 45581 132482, 45236 132696, 45414 133008, 44857 132757, 44977 132539, 44958 132473, 44826 132404, 44601 132411, 44171 132353, 43769 131871, 43981 131810, 44119 131716, 43838 131518, 43861 131195, 43582 131142, 43466 131189, 43302 131170, 43324 131094, 43161 130950, 43196 130752, 43155 130663, 43383 130419, 43398 130353, 43323 130074, 43239 130062, 43301 129994, 43359 129445, 43225 129258, 43140 128928, 43217 128724, 43144 128657, 42940 128748, 42735 128567, 42877 128329, 42854 128277, 42669 128220, 42706 128570, 42589 128595, 42378 128809, 42407 128597, 42614 128199, 42483 128185, 42245 128300, 42148 128040, 42073 127995, 42155 127678, 42024 127417, 41939 127445, 41801 127704, 41694 127430, 41860 127106, 41683 126831, 41577 126917, 41452 127192, 41401 127192, 41327 126885, 41263 126609, 41298 126498, 41361 125899, 41421 125628, 41539 125708, 41655 125570, 41501 125574, 41381 125345, 41326 125721, 41338 125846, 41251 125989, 41168 125910, 41230 125788, 41146 125605, 41042 125635, 40885 125517, 41079 125226, 41275 125115, 41340 125126, 41344 125038, 40969 124437, 40961 124074, 40972 123976, 40753 123596, 40812 123528, 40853 123552, 40876 123274, 40961 123455, 41052 123377, 40945 122880, 40909 122549, 41037 122550, 41096 122750, 41233 122723, 41310 122893, 41447 122850, 41470 122764, 41329 122150, 41112 121736, 41210 121353, 41117 121282, 40935 120693, 41055 120283, 40984 120078, 40891 120080, 40927 119761, 40902 119326, 40808 118962, 40775 118936, 40690 119317, 40642 119292, 40617 119136, 40666 118864, 40733 118575, 40747 118274, 40765 118204, 40822 118479, 40855 118554, 40940 118159, 41015 117994, 41038 117660, 41078 117340, 41284 116909, 41231 116854, 41170 116552, 41279 116484, 41140 116433, 40929 116541, 40868 116284, 40897 116124, 40745 116071, 40634 115906, 40632 115767, 40705 115521, 40730 115062, 40927 115022, 40990 115139, 40968 115320, 41035 115494, 41054 115226, 41119 115118, 41169 114738, 41259 114825, 41472 114524, 41525 114208, 41451 114180, 40917 113420, 40937 113343, 41219 113156, 41362 112973, 41270 112849, 41254 112554, 41194 112394, 41062 112384, 40975 112475, 40838 112528, 40816 112401, 40718 112361, 40745 112192, 40690 111957, 40598 111447, 40890 110922, 40889 110737, 40836 110775, 40757 110641, 40757 110459, 40731 110070, 40799 109881, 40874 109845, 40904 109699, 40875 109313, 40974 109296, 40990 109049, 41118 108830, 41130 108710, 41238 108243, 41150 107885, 41279 107595, 41556 107763, 41693 107879, 41557 108359, 41595 108818, 41673 108695, 41919 108567, 42073 108574, 42132 108654, 42286 108579, 42330 108646, 42440 108693, 42350 108523, 42438 108401, 42579 108519, 42637 108229, 42424 108110, 42221 107667, 42411 107536, 42181 107261, 42537 106908, 42767 107048, 42936 107335, 43055 107368, 43097 107513, 43366 107437, 43306 107073, 43182 106849, 43123 106812, 43063 106560, 43083 106441, 43331 106232, 43509 105528, 43637 105160, 43807 105021, 44351 104509, 44803 104559, 45345 104667, 45660 104709, 45785 104635, 46197 104955, 46251 104962, 46215 104945, 46234 104628, 46199 104598, 46193 104483, 46273 104392, 46445 104532, 46628 104818, 46807 104657, 46802 104408, 46536 104297, 46374 104104, 46424 104051, 46462 103793, 46414 103721, 46151 103924, 46246 104365, 46082 104371, 46014 104302, 46079 103798, 46092 103325, 46245 103267, 46320 103282, 46370 103240, 46466 102961, 46654 103216, 46984 103089, 47079 103117, 47153 102995, 47334 102916, 47398 102930, 47791 102908, 47842 102889, 48162 102825, 48214 102889, 48058 102998, 48060 103327, 47898 103671, 48048 103640, 48074 103360, 48304 103328, 48459 103485, 48675 103443, 48921 103487, 48971 103424, 49012 103489, 49517 103390, 49313 103137, 49322 103118, 49073 102855, 49329 102621, 49495 102572, 49800 102575, 50067 102637, 50227 102894, 50528 102716, 50971 102866, 51195 102861, 51121 102672, 50655 102231, 51226 102367, 51573 102497, 51601 102525, 51897 102661, 51821 103018, 51929 103206, 52348 103245, 52419 103082, 52872 103051, 53058 103002, 53396 103083, 53372 102914, 53495 102723, 53679 102970, 53652 103076, 54044 103042, 54297 103001, 54488 102914, 54460 102886, 54772 102835, 54989 102481, 55098 102519, 55176 102722, 55297 102770, 55169 102855, 55529 102907, 55885 102741, 55913 102928, 55881 103089, 56057 103132, 56097 103022, 56248 102854, 56401 102766, 56440 102841, 56715 102836, 57049 102691, 57122 102419, 57278 102597, 57290 102727, 57353 102766, 57302 102812, 57354 102803, 57439 102630, 57593 102515, 57585 102421, 57664 102434, 57617 102266, 57786 101936, 57868 102121, 57971 102427, 58260 102239, 58317 101953, 58389 101991, 58462 102115, 58439 102199, 58521 102252, 58907 102200, 58954 102445, 59046 102440, 59109 102376, 59151 102163, 59105 102169, 59146 102062, 59200 102049, 59356 102113, 59338 102205, 59260 102274, 59335 102416, 59345 102374, 59505 102441, 59446 102506, 59439 102771, 59465 102798, 59508 102742, 59616 102722, 59677 102788, 59543 102874, 59665 102972, 59934 102989, 60289 102769, 60840 102283, 61082 102235, 61133 101982, 61256 101889, 61397 102096, 61731 102268, 61738 102342, 61969 102451, 62118 102641, 62319 102502, 62685 102505, 63194 102340, 63358 102348, 63760 102288, 63878 102311, 64214 102268, 64083 102141, 64090 102040, 64390 101954, 64426 102126, 64367 102265, 64389 102596, 64543 102642, 64489 102807, 64596 102940, 64810 102777, 64823 102707, 65211 102741, 65426 102708, 65707 102604, 66086 102383, 66205 102382, 66490 102340, 66088 102710, 66230 102849, 66332 102750, 66499 102802, 66889 102649, 66991 102574, 67293 102447, 67360 102447, 67701 102324, 67773 102544, 67887 102633, 67922 102597, 68384 102610, 68597 102382, 68614 102129, 68909 101754, 69031 101768, 69191 101854, 69327 101871, 69537 102127, 69235 102238, 69004 102702, 69384 102672, 69683 102467, 69779 102550, 69782 102799, 69655 103141, 69818 103191, 69618 103248, 69591 103373, 69858 103211, 70062 103377, 70373 103214, 70474 103282, 70555 103452, 70344 103586, 70391 103728, 70782 103798, 70905 103793, 70806 103354, 71297 103174, 71380 103089, 71462 103114, 71547 102957, 71793 102809, 72140 102520, 72186 102525, 72389 102362, 72580 102289, 72611 102315, 72535 102670, 72544 102884, 72236 103047, 72237 103073, 72525 103168, 72779 103052, 72823 102984, 72898 103039, 72930 103161, 73222 103288, 73295 103018, 73450 103029, 73644 102977, 73847 103010, 73875 102978, 74186 102898, 73915 102651, 74090 102604, 74571 102715, 74661 102889, 75004 103075, 75258 102974, 75439 102956, 75574 103240, 75956 103031, 76299 103060, 76515 103140, 76538 103184, 76809 103118, 76849 103084, 77240 102993, 77134 102726, 77148 102730, 77356 102978, 77510 102976, 77507 102741, 77545 102710, 77663 102759, 77668 102946, 77858 102996, 77952 102741, 77609 102635, 77617 102522, 78023 102499, 78169 102538, 78325 102498, 78414 102540, 78762 102372, 79051 102271, 79150 102138, 79262 102170, 79478 102422, 79801 102043, 79885 102001, 80155 101803, 80254 101746, 80463 101586, 80611 101436, 80900 101801, 81238 101890, 81507 101843, 81662 101912, 81631 102200, 81719 102293, 81773 102114, 82047 101849, 82564 101937, 82706 102044, 82503 102174, 82391 102373, 82538 102309, 82913 101946, 83139 101911, 83193 101633, 83349 101514, 83440 101736, 83685 101935, 83760 101964, 83767 102077, 84077 102548, 84232 102322, 84631 102230, 84758 102536, 84960 102557, 85068 102451, 84941 102429, 84633 102228, 85126 102036, 85398 102015, 85573 101974, 85741 102024, 85931 101954, 86115 101955, 86016 101867, 86041 101723, 86244 101661, 86275 101877, 86245 101972, 86283 102339, 86450 102662, 86643 102768, 86769 102683, 86710 102436, 87155 102575, 87202 102648, 87595 102571, 87633 102615, 87740 102547, 87998 102474, 88271 102533, 88261 102606, 87960 102785, 88128 103007, 88202 102956, 88359 103045, 88680 102998, 89222 102938, 89243 102945, 89515 102924, 89615 102963, 89597 103055, 89690 103240, 89800 103320, 90333 103420, 90539 103256, 90597 103254, 90617 103077, 90900 102750, 91275 102945, 91463 103176, 91227 103240, 91092 103378, 91052 103481, 91291 103610, 91450 103581, 91650 103467, 91780 103562, 91783 103738, 91573 104311, 91611 104328, 91828 104210, 92036 104290, 92381 104155, 92471 104306, 92325 104416, 92377 104554, 92824 104574, 92899 104492, 92802 104159, 93307 103878, 93406 103844, 93510 103666, 93781 103441, 94089 103147, 94193 103134, 94364 102956, 94571 102807, 94470 103223, 94514 103381, 94248 103537, 94233 103632, 94499 103667, 94804 103460, 94827 103413, 94875 103437, 94915 103557, 95238 103695, 95351 103341, 95871 103225, 95882 103192, 96179 103030, 95913 102815, 96138 102733, 96544 102770, 96659 102821, 96700 102937, 97014 103062, 97223 102945, 97520 102892, 97608 103156, 97855 103060, 97968 102956, 98135 102930, 98727 102806, 99483 102970, 99748 103059, 100038 102960, 99956 102800, 100051 102566, 100266 102601, 100058 102551, 100064 102492, 100030 102541, 99694 102416, 99708 102322, 100109 102392, 100361 102334, 100532 102386, 100784 102279, 101072 102229, 101240 102046, 101467 102338, 101637 102556, 101816 102918, 102184 103285, 102019 103454, 102085 103588, 102066 103736, 101839 103973, 102074 104144, 101846 104344, 101760 104385, 101864 104564, 101945 104543, 102014 104450, 102275 104489, 102405 104459, 102376 104629, 102411 104678, 102451 104256, 102680 103942, 102346 103467, 102341 103247, 102250 102982, 102397 102895, 102731 102853, 102740 102888, 102996 102768, 103387 102987, 103486 103101, 103596 102948, 103455 102870, 103467 102836, 103736 102747, 103805 102415, 104035 102223, 104464 102286, 104663 102434, 104518 102525, 104297 102945, 104345 102967, 104680 102838, 105340 102801, 106125 102719, 106282 102724, 106681 102516, 106957 102500, 107141 102447, 107720 102513, 108053 102656, 108224 102608, 108469 102660, 108685 102551, 108635 102442, 108419 102265, 108640 102325, 108840 102275, 109154 102140, 109114 102339, 109152 102472, 109410 102392, 109797 102037, 110142 101906, 110458 101691, 110661 101924, 110765 102084, 111112 102198, 111396 102219, 111501 102275, 111484 102645, 111727 102914, 112139 102810, 112410 102597, 112739 102249, 112982 102181, 113035 101905, 113178 101773, 113348 102030, 113399 102044, 113648 102337, 113692 102355, 113916 102639, 114059 102420, 114480 102269, 114973 102008, 115149 101988, 115499 101861, 115628 101866, 116006 101756, 115861 101625, 115867 101540, 116101 101437, 116138 101639, 116099 101740, 116127 102098, 116295 102422, 116429 102475, 116596 102410, 116547 102246, 116621 102164, 117011 102215, 117057 102284, 117824 102077, 118150 102196, 118156 102230, 117818 102363, 117817 102486, 118028 102702, 118051 102670, 118271 102766, 118416 102736, 118647 102767, 119023 102833, 119058 102857, 119321 102918, 119410 102985, 119393 103074, 119563 103446, 119649 103408, 120081 103746, 120339 103633, 120339 103450, 120649 103177, 121048 103536, 121230 103840, 120986 103834, 120856 103931, 120813 104036, 121072 104265, 121171 104277, 121402 104204, 121525 104322, 121533 104505, 121326 105001, 121363 105024, 121595 104957, 121781 105075, 122112 104983, 122173 105016, 122181 105173, 122280 105173, 122155 105241, 122165 105339, 122595 105444, 122672 105409, 122547 105080, 122838 105009, 123056 104896, 123159 104884, 123260 104743, 123520 104572, 123827 104332, 123913 104329, 124291 104057, 124200 104427, 124245 104553, 124007 104664, 123989 104751, 124252 104784, 124514 104627, 124538 104582, 124626 104611, 124694 104710, 124941 104777, 124983 104567, 125106 104449, 125415 104380, 125553 104351, 125575 104284, 125845 104127, 125573 103988, 125783 103882, 126295 103875, 126431 103973, 126632 104017, 126860 103899, 127125 103831, 127269 104068, 127597 103827, 127626 103849, 127675 103799, 128244 103837, 128406 103915, 128605 103677, 128647 103712, 128759 104020, 128874 103995, 128916 104046, 128974 104043, 129029 103893, 129275 103787, 129447 103791, 129671 103577, 129602 103440, 129713 103206, 129320 103146, 129335 103050, 129719 103003, 129862 103020, 130041 102895, 130164 102932, 130487 102739, 130799 102594, 130951 102403, 131045 102444, 131276 102732, 131415 102812, 131561 103097, 131815 103267, 131982 103425, 131825 103585, 131872 103711, 131816 103924, 131616 104110, 131841 104234, 131829 104315, 131938 104364, 132261 104347, 132445 104089, 132609 104040, 132419 104033, 132330 103782, 132117 103600, 132132 103546, 132005 103154, 132245 103050, 132452 103073, 132708 102981, 133070 103149, 133247 103344, 133509 103064, 133475 102915, 133554 102723, 133791 102553, 134312 102774, 134788 103006, 134819 103028, 134408 102897, 134285 102945, 134096 103200, 134206 103391, 134413 103369, 134601 103463, 135139 103493, 135192 103373, 135744 103302, 135773 103279, 136353 103379, 136882 103330, 137201 103288, 137623 103123, 137969 103106, 138563 103213, 138786 103317, 138974 103260, 139246 103310, 139402 103231, 139102 102993, 139340 103043, 139565 102966, 139877 102792, 139845 102935, 139898 103096, 140036 103041, 140375 102674, 140862 102398, 141105 102152, 141382 102472, 141741 102568, 142001 102545, 142150 102604, 142135 102943, 142396 103154, 142942 102885, 143193 102610, 143529 102283, 143763 102185, 143838 102080, 143878 101879, 143969 101790, 144119 101959, 144311 102032, 144524 102223, 144678 102262, 144829 102401, 144974 102233, 145163 102159, 145511 102099, 145541 102073, 145998 101872, 146354 101835, 146500 101798, 146645 101832, 146867 101744, 146901 101517, 147271 101389, 147289 101492), (143581 135001, 143976 135192, 143940 135078, 144043 134952, 144013 134901, 143594 134807), (68879 134758, 69248 134988, 69214 134862, 69298 134787, 69215 134663, 68774 134519), (65782 134382, 65714 134660, 65735 134790, 65796 134809, 66043 134707, 66253 134741, 66493 134669, 66828 134926, 66910 134742, 67017 134614, 66814 134713, 66601 134499, 66540 134559, 66487 134521, 66270 134667, 66066 134661, 65904 134347, 65827 134312), (164793 134568, 164770 134690, 164905 134902, 164993 134817, 165283 134808, 165433 134869, 165622 134594, 165601 134517, 165229 134592, 165103 134583, 164916 134441), (143356 134540, 143449 134773, 143588 134782, 143708 134502, 143559 134451), (170249 134097, 170241 134167, 170413 134497, 170597 134585, 170823 134629, 170854 134376, 170475 134334, 170593 134042, 170406 134003), (137415 134174, 137436 134295, 137526 134449, 137609 134353, 138162 134483, 138362 134150, 137891 134139, 137765 134170, 137577 134038), (45978 133615, 46251 133757, 46366 133686, 46383 133467, 46213 133333), (189640 132105, 190033 132258, 190139 132148, 189973 132090), (193701 118681, 193713 118969, 193757 118982, 193790 118915, 193775 118642, 193726 118073, 193676 118023), (191372 108040, 191400 108103, 191304 108436, 191327 108481, 191556 108335, 191594 108247, 191510 107981, 191407 107912), (188119 105974, 188080 106056, 188126 106140, 188400 105920, 188318 105909), (188652 105805, 188679 106125, 189087 106087, 188973 105793), (189497 105786, 189534 105812, 189535 105925, 189583 105823, 189784 105774, 189926 105683, 189733 105606), (131571 104488, 131787 104761, 131925 104881, 132137 104879, 132179 104738, 132085 104738, 131680 104507, 131686 104442), (188398 103912, 188405 103992, 188567 104111, 188360 104298, 188335 104303, 188064 104441, 188048 104640, 188235 104846, 188465 104447, 188408 104330, 188567 104256, 188638 104158, 188640 104046, 188713 103903, 188484 103780), (126133 104488, 125891 104479, 125575 104527, 125512 104660, 125931 104638, 126033 104613, 126166 104672, 126253 104598, 126251 104514, 126186 104425), (187466 104348, 187379 104462, 187442 104536, 187763 104398, 187558 104297, 187570 104259, 187375 104173), (120287 104169, 120666 104304, 120664 104164, 120395 103967), (133346 103832, 133312 103838, 133367 104088, 133469 104201, 133668 104192, 133560 104017, 133663 103708, 133512 103644), (182922 103927, 182951 104078, 183087 104160, 183256 104093, 183573 103898, 183598 103833, 183459 103611, 183514 103412), (133024 103609, 132839 103701, 132613 103652, 132648 103884, 132899 103876, 133002 103960, 133310 103833, 133476 103591, 133254 103347), (90511 103764, 90906 103803, 90904 103660, 90610 103549), (95768 103681, 96057 103732, 96358 103662, 96506 103784, 96595 103702, 96614 103587, 96533 103461, 96475 103535, 96214 103469, 95938 103429), (183989 103559, 184007 103692, 183892 103752, 184037 103736, 184199 103460, 184055 103448), (73775 103408, 73759 103427, 74218 103505, 74486 103509, 74513 103446, 74456 103334, 74390 103386, 74146 103310), (103243 103402, 103363 103347, 103697 103417, 103838 103273, 103639 103293, 103500 103088), (175394 103184, 175246 103409, 175829 103298, 175863 103262, 176009 103310, 176077 103263, 176079 103189, 176037 103148), (59468 102800, 59496 102829, 59618 102772), (114617 102545, 114800 102539, 114898 102432, 114783 102428, 114493 102288)), ((108850 136644, 108647 136612, 108348 136570, 108610 136156)), ((104897 136284, 104997 136403, 104652 136500, 104722 136201)), ((174305 135194, 174168 135529, 174037 135603, 174086 135371, 174158 135328, 174135 135113)), ((136146 135168, 135649 135133, 135649 135090, 135940 134969)), ((41043 121936, 41186 122120, 41202 122554, 40944 122100, 40904 121929, 40928 121890)), ((123856 103788, 123975 104015, 123854 104135, 123736 103997, 123463 103841, 123678 103718)), ((181388 103391, 181538 103439, 181342 103486, 181240 103467, 181357 103063)), ((119724 102830, 119639 103036, 119662 103128, 119569 103134, 119480 102926, 119554 102702)), ((173519 102386, 173602 102512, 173609 102599, 173728 102771, 173514 102996, 173313 102755, 172941 102588, 173164 102419, 173266 102414, 173364 102332)), ((94131 102562, 94237 102760, 94123 102883, 94024 102765, 93841 102777, 93907 102672, 93790 102609, 93947 102512)), ((150965 102382, 150913 102507, 150983 102711, 150743 102752, 150574 102561, 150694 102218)), ((68054 101957, 67990 102150, 68030 102280, 67838 102396, 67733 102292, 67830 101952)), ((72160 101873, 72322 102233, 72151 102379, 71998 102153, 71724 102100, 71823 101958, 71736 101883, 71850 101827, 71927 101833, 71999 101784)), ((169448 101850, 169401 101987, 169460 102194, 169226 102286, 169062 102121, 169154 101882, 169174 101745))) \ No newline at end of file diff --git a/stress_benchmark/resources/003.settings b/stress_benchmark/resources/003.settings index 1a0de365f5..c5d0242164 100644 --- a/stress_benchmark/resources/003.settings +++ b/stress_benchmark/resources/003.settings @@ -121,6 +121,7 @@ support_xy_distance_overhang=0.42 retract_at_layer_change=False wall_transition_length=0.4 wall_overhang_angle=90 +seam_overhang_angle=30 cool_fan_enabled=True cool_fan_speed_max=100.0 min_skin_width_for_expansion=5.143516556418883e-17 @@ -583,7 +584,6 @@ support_tree_max_diameter_increase_by_merges_when_support_to_model=1 adaptive_layer_height_threshold=0.2 support_interface_height=0.96 support_brim_enable=True -support_interface_skip_height=0.12 jerk_support_infill=12.0 wall_overhang_speed_factor=100 acceleration_travel=500 @@ -883,6 +883,7 @@ roofing_material_flow=95.0 meshfix_maximum_deviation=0.025 cool_fan_enabled=True wall_overhang_angle=90 +seam_overhang_angle=30 cool_fan_speed_max=100 speed_prime_tower=25.0 infill=0 @@ -971,7 +972,6 @@ machine_extruders_shared_nozzle_initial_retraction=0 extruder_prime_pos_abs=False support_tower_maximum_supported_diameter=3.0 support_tree_angle=50 -support_interface_skip_height=0.12 jerk_support_infill=12.0 wall_overhang_speed_factor=100 infill_before_walls=False diff --git a/stress_benchmark/resources/004.settings b/stress_benchmark/resources/004.settings index 74603b80f0..ec29d4a421 100644 --- a/stress_benchmark/resources/004.settings +++ b/stress_benchmark/resources/004.settings @@ -120,6 +120,7 @@ support_xy_distance_overhang=0.4 retract_at_layer_change=False wall_transition_length=0.4 wall_overhang_angle=90 +seam_overhang_angle=30 cool_fan_enabled=True cool_fan_speed_max=100.0 min_skin_width_for_expansion=4.898587196589413e-17 @@ -583,7 +584,6 @@ support_tree_max_diameter_increase_by_merges_when_support_to_model=1 adaptive_layer_height_threshold=0.2 support_interface_height=0.8 support_brim_enable=True -support_interface_skip_height=0.1 jerk_support_infill=8 wall_overhang_speed_factor=100 acceleration_travel=500 @@ -883,6 +883,7 @@ roofing_material_flow=100 meshfix_maximum_deviation=0.025 cool_fan_enabled=True wall_overhang_angle=90 +seam_overhang_angle=30 cool_fan_speed_max=100 speed_prime_tower=20 infill=0 @@ -971,7 +972,6 @@ machine_extruders_shared_nozzle_initial_retraction=0 extruder_prime_pos_abs=False support_tower_maximum_supported_diameter=3.0 support_tree_angle=55 -support_interface_skip_height=0.1 jerk_support_infill=8 wall_overhang_speed_factor=100 infill_before_walls=False diff --git a/stress_benchmark/resources/005.settings b/stress_benchmark/resources/005.settings index 4352f108a2..7858e603c1 100644 --- a/stress_benchmark/resources/005.settings +++ b/stress_benchmark/resources/005.settings @@ -121,6 +121,7 @@ support_xy_distance_overhang=0.4 retract_at_layer_change=False wall_transition_length=0.4 wall_overhang_angle=90 +seam_overhang_angle=30 cool_fan_enabled=True cool_fan_speed_max=100.0 min_skin_width_for_expansion=4.898587196589413e-17 @@ -584,7 +585,6 @@ support_tree_max_diameter_increase_by_merges_when_support_to_model=1 adaptive_layer_height_threshold=0.2 support_interface_height=0.8 support_brim_enable=True -support_interface_skip_height=0.2 jerk_support_infill=8 wall_overhang_speed_factor=100 acceleration_travel=500 @@ -884,6 +884,7 @@ roofing_material_flow=100 meshfix_maximum_deviation=0.025 cool_fan_enabled=True wall_overhang_angle=90 +seam_overhang_angle=30 cool_fan_speed_max=100 speed_prime_tower=25.0 infill=0 @@ -972,7 +973,6 @@ machine_extruders_shared_nozzle_initial_retraction=0 extruder_prime_pos_abs=False support_tower_maximum_supported_diameter=3.0 support_tree_angle=65.0 -support_interface_skip_height=0.2 jerk_support_infill=8 wall_overhang_speed_factor=100 infill_before_walls=False diff --git a/stress_benchmark/resources/006.settings b/stress_benchmark/resources/006.settings index 9a94d8f6da..fd1a670e71 100644 --- a/stress_benchmark/resources/006.settings +++ b/stress_benchmark/resources/006.settings @@ -121,6 +121,7 @@ support_xy_distance_overhang=0.4 retract_at_layer_change=False wall_transition_length=0.4 wall_overhang_angle=90 +seam_overhang_angle=30 cool_fan_enabled=True cool_fan_speed_max=100.0 min_skin_width_for_expansion=4.898587196589413e-17 @@ -584,7 +585,6 @@ support_tree_max_diameter_increase_by_merges_when_support_to_model=1 adaptive_layer_height_threshold=0.2 support_interface_height=0.8 support_brim_enable=True -support_interface_skip_height=0.2 jerk_support_infill=8 wall_overhang_speed_factor=100 acceleration_travel=500 @@ -884,6 +884,7 @@ roofing_material_flow=100 meshfix_maximum_deviation=0.025 cool_fan_enabled=True wall_overhang_angle=90 +seam_overhang_angle=30 cool_fan_speed_max=100 speed_prime_tower=25.0 infill=0 @@ -972,7 +973,6 @@ machine_extruders_shared_nozzle_initial_retraction=0 extruder_prime_pos_abs=False support_tower_maximum_supported_diameter=3.0 support_tree_angle=60.0 -support_interface_skip_height=0.2 jerk_support_infill=8 wall_overhang_speed_factor=100 infill_before_walls=False diff --git a/stress_benchmark/resources/007.settings b/stress_benchmark/resources/007.settings index 4e98a3d2e7..7459a9b0a7 100644 --- a/stress_benchmark/resources/007.settings +++ b/stress_benchmark/resources/007.settings @@ -121,6 +121,7 @@ support_xy_distance_overhang=0.4 retract_at_layer_change=False wall_transition_length=0.4 wall_overhang_angle=90 +seam_overhang_angle=30 cool_fan_enabled=True cool_fan_speed_max=100.0 min_skin_width_for_expansion=4.898587196589413e-17 @@ -584,7 +585,6 @@ support_tree_max_diameter_increase_by_merges_when_support_to_model=1 adaptive_layer_height_threshold=0.2 support_interface_height=0.8 support_brim_enable=True -support_interface_skip_height=0.2 jerk_support_infill=8 wall_overhang_speed_factor=100 acceleration_travel=500 @@ -884,6 +884,7 @@ roofing_material_flow=100 meshfix_maximum_deviation=0.025 cool_fan_enabled=True wall_overhang_angle=90 +seam_overhang_angle=30 cool_fan_speed_max=100 speed_prime_tower=40.0 infill=0 @@ -972,7 +973,6 @@ machine_extruders_shared_nozzle_initial_retraction=0 extruder_prime_pos_abs=False support_tower_maximum_supported_diameter=3.0 support_tree_angle=45 -support_interface_skip_height=0.2 jerk_support_infill=8 wall_overhang_speed_factor=100 infill_before_walls=False diff --git a/stress_benchmark/resources/008.settings b/stress_benchmark/resources/008.settings index b4aca3d5ff..d85ffc3226 100644 --- a/stress_benchmark/resources/008.settings +++ b/stress_benchmark/resources/008.settings @@ -286,7 +286,6 @@ ironing_line_spacing=0.1 material_bed_temp_prepend=True infill_before_walls=True material=0 -support_interface_skip_height=0.15 blackmagic=0 support_brim_line_count=3 infill_support_enabled=False @@ -340,6 +339,7 @@ retraction_retract_speed=45 cool_fan_speed_max=100 cool_fan_enabled=True wall_overhang_angle=90 +seam_overhang_angle=30 infill_wall_line_count=0 support_supported_skin_fan_speed=100 brim_width=3 @@ -921,6 +921,7 @@ acceleration_wall_0=1500 cool_fan_speed_max=100 cool_fan_enabled=True wall_overhang_angle=90 +seam_overhang_angle=30 acceleration_ironing=1000 prime_tower_flow=100 top_skin_expand_distance=0.8 @@ -1091,7 +1092,6 @@ machine_feeder_wheel_diameter=10.0 bridge_skin_support_threshold=50 prime_tower_min_volume=6 roofing_material_flow=100 -support_interface_skip_height=0.15 infill_wall_line_count=0 support_supported_skin_fan_speed=100 bridge_sparse_infill_max_density=0 diff --git a/stress_benchmark/resources/009.settings b/stress_benchmark/resources/009.settings index b4aca3d5ff..d85ffc3226 100644 --- a/stress_benchmark/resources/009.settings +++ b/stress_benchmark/resources/009.settings @@ -286,7 +286,6 @@ ironing_line_spacing=0.1 material_bed_temp_prepend=True infill_before_walls=True material=0 -support_interface_skip_height=0.15 blackmagic=0 support_brim_line_count=3 infill_support_enabled=False @@ -340,6 +339,7 @@ retraction_retract_speed=45 cool_fan_speed_max=100 cool_fan_enabled=True wall_overhang_angle=90 +seam_overhang_angle=30 infill_wall_line_count=0 support_supported_skin_fan_speed=100 brim_width=3 @@ -921,6 +921,7 @@ acceleration_wall_0=1500 cool_fan_speed_max=100 cool_fan_enabled=True wall_overhang_angle=90 +seam_overhang_angle=30 acceleration_ironing=1000 prime_tower_flow=100 top_skin_expand_distance=0.8 @@ -1091,7 +1092,6 @@ machine_feeder_wheel_diameter=10.0 bridge_skin_support_threshold=50 prime_tower_min_volume=6 roofing_material_flow=100 -support_interface_skip_height=0.15 infill_wall_line_count=0 support_supported_skin_fan_speed=100 bridge_sparse_infill_max_density=0 diff --git a/stress_benchmark/resources/010.settings b/stress_benchmark/resources/010.settings index b4aca3d5ff..d85ffc3226 100644 --- a/stress_benchmark/resources/010.settings +++ b/stress_benchmark/resources/010.settings @@ -286,7 +286,6 @@ ironing_line_spacing=0.1 material_bed_temp_prepend=True infill_before_walls=True material=0 -support_interface_skip_height=0.15 blackmagic=0 support_brim_line_count=3 infill_support_enabled=False @@ -340,6 +339,7 @@ retraction_retract_speed=45 cool_fan_speed_max=100 cool_fan_enabled=True wall_overhang_angle=90 +seam_overhang_angle=30 infill_wall_line_count=0 support_supported_skin_fan_speed=100 brim_width=3 @@ -921,6 +921,7 @@ acceleration_wall_0=1500 cool_fan_speed_max=100 cool_fan_enabled=True wall_overhang_angle=90 +seam_overhang_angle=30 acceleration_ironing=1000 prime_tower_flow=100 top_skin_expand_distance=0.8 @@ -1091,7 +1092,6 @@ machine_feeder_wheel_diameter=10.0 bridge_skin_support_threshold=50 prime_tower_min_volume=6 roofing_material_flow=100 -support_interface_skip_height=0.15 infill_wall_line_count=0 support_supported_skin_fan_speed=100 bridge_sparse_infill_max_density=0 diff --git a/stress_benchmark/resources/011.settings b/stress_benchmark/resources/011.settings index c789ab5a63..65b9e99e25 100644 --- a/stress_benchmark/resources/011.settings +++ b/stress_benchmark/resources/011.settings @@ -121,6 +121,7 @@ support_xy_distance_overhang=0.2 retract_at_layer_change=False wall_transition_length=0.4 wall_overhang_angle=90 +seam_overhang_angle=30 cool_fan_enabled=True cool_fan_speed_max=100.0 min_skin_width_for_expansion=4.898587196589413e-17 @@ -585,7 +586,6 @@ support_tree_max_diameter_increase_by_merges_when_support_to_model=1 adaptive_layer_height_threshold=0.2 support_interface_height=1 support_brim_enable=True -support_interface_skip_height=0.2 jerk_support_infill=20 wall_overhang_speed_factor=100 acceleration_travel=5000 @@ -884,6 +884,7 @@ roofing_material_flow=100 meshfix_maximum_deviation=0.025 cool_fan_enabled=True wall_overhang_angle=90 +seam_overhang_angle=30 cool_fan_speed_max=100 speed_prime_tower=60 infill=0 @@ -972,7 +973,6 @@ machine_extruders_shared_nozzle_initial_retraction=0 extruder_prime_pos_abs=False support_tower_maximum_supported_diameter=3.0 support_tree_angle=50 -support_interface_skip_height=0.2 jerk_support_infill=20 wall_overhang_speed_factor=100 infill_before_walls=True diff --git a/stress_benchmark/resources/012.settings b/stress_benchmark/resources/012.settings index db4584485c..922ccbe0da 100644 --- a/stress_benchmark/resources/012.settings +++ b/stress_benchmark/resources/012.settings @@ -96,6 +96,7 @@ gradual_infill_step_height=1.5 cool_min_speed=9 cool_fan_enabled=False wall_overhang_angle=90 +seam_overhang_angle=30 cool_fan_speed_max=100 support_skip_some_zags=False layer_start_y=0.0 @@ -255,7 +256,6 @@ prime_tower_position_y=118.80000000000001 mesh_position_x=0 mold_width=5 adhesion_extruder_nr=0 -support_interface_skip_height=0.2 jerk_support_infill=12.5 wall_overhang_speed_factor=100 material_bed_temp_prepend=True diff --git a/stress_benchmark/resources/012.wkt b/stress_benchmark/resources/012.wkt index bb3157ce63..1b1869d98d 100644 --- a/stress_benchmark/resources/012.wkt +++ b/stress_benchmark/resources/012.wkt @@ -1 +1 @@ -MULTIPOLYGON (((1571 -49975, 2466 -52292, 3140 -49901, 4107 -52189, 4705 -49778, 5745 -52034, 6267 -49606, 7376 -51828, 7822 -49384, 9001 -51570, 9369 -49114, 10616 -51262, 10907 -48796, 12221 -50904, 12434 -48429, 13814 -50495, 13950 -48015, 15393 -50036, 15451 -47553, 16957 -49528, 16937 -47044, 18504 -48971, 18406 -46489, 20034 -48365, 19858 -45888, 21543 -47712, 21289 -45241, 23031 -47012, 22700 -44550, 24496 -46265, 24088 -43815, 25937 -45473, 25452 -43037, 27353 -44636, 26791 -42216, 28741 -43755, 28104 -41354, 30102 -42830, 29389 -40451, 31432 -41863, 30645 -39508, 32731 -40855, 31871 -38526, 33999 -39807, 33066 -37506, 35232 -38720, 34227 -36449, 36431 -37594, 35355 -35355, 37594 -36431, 36449 -34227, 38720 -35232, 37506 -33066, 39807 -33999, 38526 -31871, 40856 -32731, 39508 -30645, 41863 -31432, 40451 -29389, 42830 -30101, 41354 -28104, 43755 -28741, 42216 -26791, 44636 -27353, 43037 -25452, 45473 -25937, 43815 -24088, 46265 -24496, 44550 -22699, 47012 -23031, 45242 -21289, 47712 -21543, 45888 -19857, 48365 -20034, 46489 -18406, 48971 -18504, 47044 -16937, 49528 -16957, 47553 -15451, 50036 -15393, 48015 -13950, 50495 -13814, 48429 -12434, 50904 -12221, 48796 -10907, 51262 -10616, 49114 -9369, 51570 -9000, 49384 -7822, 51828 -7376, 49606 -6267, 52034 -5745, 49778 -4705, 52189 -4107, 49901 -3139, 52292 -2466, 49975 -1571, 52344 -822, 50000 0, 52344 822, 49975 1571, 52292 2466, 49901 3140, 52189 4107, 49778 4705, 52034 5745, 49606 6267, 51828 7376, 49384 7822, 51570 9001, 49114 9369, 51262 10616, 48796 10907, 50904 12221, 48429 12434, 50495 13814, 48015 13950, 50036 15393, 47553 15451, 49528 16957, 47044 16937, 48971 18504, 46489 18406, 48365 20034, 45888 19858, 47712 21543, 45241 21289, 47012 23031, 44550 22700, 46265 24496, 43815 24088, 45473 25937, 43037 25452, 44636 27353, 42216 26791, 43755 28741, 41354 28104, 42830 30102, 40451 29389, 41863 31432, 39508 30645, 40855 32731, 38526 31871, 39807 33999, 37506 33066, 38720 35232, 36449 34227, 37594 36431, 35355 35355, 36431 37594, 34227 36449, 35232 38720, 33066 37506, 33999 39807, 31871 38526, 32731 40856, 30645 39508, 31432 41863, 29389 40451, 30101 42830, 28104 41354, 28741 43755, 26791 42216, 27353 44636, 25452 43037, 25937 45473, 24088 43815, 24496 46265, 22699 44550, 23031 47012, 21289 45242, 21543 47712, 19857 45888, 20034 48365, 18406 46489, 18504 48971, 16937 47044, 16957 49528, 15451 47553, 15393 50036, 13950 48015, 13814 50495, 12434 48429, 12221 50904, 10907 48796, 10616 51262, 9369 49114, 9000 51570, 7822 49384, 7376 51828, 6267 49606, 5745 52034, 4705 49778, 4107 52189, 3139 49901, 2466 52292, 1571 49975, 822 52344, 0 50000, -822 52344, -1571 49975, -2466 52292, -3140 49901, -4107 52189, -4705 49778, -5745 52034, -6267 49606, -7376 51828, -7822 49384, -9001 51570, -9369 49114, -10616 51262, -10907 48796, -12221 50904, -12434 48429, -13814 50495, -13950 48015, -15393 50036, -15451 47553, -16957 49528, -16937 47044, -18504 48971, -18406 46489, -20034 48365, -19858 45888, -21543 47712, -21289 45241, -23031 47012, -22700 44550, -24496 46265, -24088 43815, -25937 45473, -25452 43037, -27353 44636, -26791 42216, -28741 43755, -28104 41354, -30102 42830, -29389 40451, -31432 41863, -30645 39508, -32731 40855, -31871 38526, -33999 39807, -33066 37506, -35232 38720, -34227 36449, -36431 37594, -35355 35355, -37594 36431, -36449 34227, -38720 35232, -37506 33066, -39807 33999, -38526 31871, -40856 32731, -39508 30645, -41863 31432, -40451 29389, -42830 30101, -41354 28104, -43755 28741, -42216 26791, -44636 27353, -43037 25452, -45473 25937, -43815 24088, -46265 24496, -44550 22699, -47012 23031, -45242 21289, -47712 21543, -45888 19857, -48365 20034, -46489 18406, -48971 18504, -47044 16937, -49528 16957, -47553 15451, -50036 15393, -48015 13950, -50495 13814, -48429 12434, -50904 12221, -48796 10907, -51262 10616, -49114 9369, -51570 9000, -49384 7822, -51828 7376, -49606 6267, -52034 5745, -49778 4705, -52189 4107, -49901 3139, -52292 2466, -49975 1571, -52344 822, -50000 0, -52344 -822, -49975 -1571, -52292 -2466, -49901 -3140, -52189 -4107, -49778 -4705, -52034 -5745, -49606 -6267, -51828 -7376, -49384 -7822, -51570 -9001, -49114 -9369, -51262 -10616, -48796 -10907, -50904 -12221, -48429 -12434, -50495 -13814, -48015 -13950, -50036 -15393, -47553 -15451, -49528 -16957, -47044 -16937, -48971 -18504, -46489 -18406, -48365 -20034, -45888 -19858, -47712 -21543, -45241 -21289, -47012 -23031, -44550 -22700, -46265 -24496, -43815 -24088, -45473 -25937, -43037 -25452, -44636 -27353, -42216 -26791, -43755 -28741, -41354 -28104, -42830 -30102, -40451 -29389, -41863 -31432, -39508 -30645, -40855 -32731, -38526 -31871, -39807 -33999, -37506 -33066, -38720 -35232, -36449 -34227, -37594 -36431, -35355 -35355, -36431 -37594, -34227 -36449, -35232 -38720, -33066 -37506, -33999 -39807, -31871 -38526, -32731 -40856, -30645 -39508, -31432 -41863, -29389 -40451, -30101 -42830, -28104 -41354, -28741 -43755, -26791 -42216, -27353 -44636, -25452 -43037, -25937 -45473, -24088 -43815, -24496 -46265, -22699 -44550, -23031 -47012, -21289 -45242, -21543 -47712, -19857 -45888, -20034 -48365, -18406 -46489, -18504 -48971, -16937 -47044, -16957 -49528, -15451 -47553, -15393 -50036, -13950 -48015, -13814 -50495, -12434 -48429, -12221 -50904, -10907 -48796, -10616 -51262, -9369 -49114, -9000 -51570, -7822 -49384, -7376 -51828, -6267 -49606, -5745 -52034, -4705 -49778, -4107 -52189, -3139 -49901, -2466 -52292, -1571 -49975, -822 -52344, 0 -50000, 822 -52344) (-449 -28579, -942 -29985, -1346 -28551, -1884 -29941, -2243 -28494, -2823 -29867, -3136 -28410, -3760 -29763, -4027 -28297, -4693 -29631, -4914 -28157, -5621 -29469, -5796 -27989, -6544 -29277, -6672 -27793, -7461 -29057, -7542 -27569, -8370 -28809, -8404 -27319, -9270 -28532, -9258 -27042, -10162 -28226, -10103 -26737, -11044 -27893, -10938 -26407, -11914 -27533, -11762 -26050, -12773 -27145, -12575 -25668, -13620 -26730, -13375 -25260, -14453 -26289, -14161 -24828, -15271 -25822, -14934 -24371, -16075 -25330, -15693 -23889, -16862 -24812, -16435 -23385, -17633 -24271, -17162 -22857, -18387 -23705, -17871 -22307, -19123 -23115, -18563 -21734, -19839 -22503, -19236 -21141, -20536 -21869, -19891 -20526, -21213 -21213, -20526 -19891, -21869 -20536, -21141 -19236, -22503 -19839, -21734 -18563, -23115 -19123, -22307 -17871, -23705 -18387, -22857 -17162, -24270 -17633, -23385 -16435, -24812 -16862, -23889 -15693, -25330 -16075, -24371 -14934, -25822 -15271, -24828 -14161, -26289 -14453, -25260 -13375, -26730 -13620, -25668 -12575, -27145 -12773, -26050 -11762, -27533 -11914, -26407 -10938, -27893 -11044, -26737 -10103, -28226 -10162, -27042 -9258, -28532 -9271, -27319 -8404, -28809 -8370, -27569 -7542, -29057 -7461, -27793 -6672, -29277 -6544, -27989 -5796, -29469 -5621, -28157 -4914, -29631 -4693, -28297 -4027, -29763 -3760, -28410 -3137, -29867 -2823, -28494 -2243, -29941 -1884, -28551 -1346, -29985 -942, -28579 -449, -30000 0, -28579 449, -29985 942, -28551 1346, -29941 1884, -28494 2243, -29867 2823, -28410 3136, -29763 3760, -28297 4027, -29631 4693, -28157 4914, -29469 5621, -27989 5796, -29277 6544, -27793 6672, -29057 7461, -27569 7542, -28809 8370, -27319 8404, -28532 9270, -27042 9258, -28226 10162, -26737 10103, -27893 11044, -26407 10938, -27533 11914, -26050 11762, -27145 12773, -25668 12575, -26730 13620, -25260 13375, -26289 14453, -24828 14161, -25822 15271, -24371 14934, -25330 16075, -23889 15693, -24812 16862, -23385 16435, -24271 17633, -22857 17162, -23705 18387, -22307 17871, -23115 19123, -21734 18563, -22503 19839, -21141 19236, -21869 20536, -20526 19891, -21213 21213, -19891 20526, -20536 21869, -19236 21141, -19839 22503, -18563 21734, -19123 23115, -17871 22307, -18387 23705, -17162 22857, -17633 24270, -16435 23385, -16862 24812, -15693 23889, -16075 25330, -14934 24371, -15271 25822, -14161 24828, -14453 26289, -13375 25260, -13620 26730, -12575 25668, -12773 27145, -11762 26050, -11914 27533, -10938 26407, -11044 27893, -10103 26737, -10162 28226, -9258 27042, -9271 28532, -8404 27319, -8370 28809, -7542 27569, -7461 29057, -6672 27793, -6544 29277, -5796 27989, -5621 29469, -4914 28157, -4693 29631, -4027 28297, -3760 29763, -3137 28410, -2823 29867, -2243 28494, -1884 29941, -1346 28551, -942 29985, -449 28579, 0 30000, 449 28579, 942 29985, 1346 28551, 1884 29941, 2243 28494, 2823 29867, 3136 28410, 3760 29763, 4027 28297, 4693 29631, 4914 28157, 5621 29469, 5796 27989, 6544 29277, 6672 27793, 7461 29057, 7542 27569, 8370 28809, 8404 27319, 9270 28532, 9258 27042, 10162 28226, 10103 26737, 11044 27893, 10938 26407, 11914 27533, 11762 26050, 12773 27145, 12575 25668, 13620 26730, 13375 25260, 14453 26289, 14161 24828, 15271 25822, 14934 24371, 16075 25330, 15693 23889, 16862 24812, 16435 23385, 17633 24271, 17162 22857, 18387 23705, 17871 22307, 19123 23115, 18563 21734, 19839 22503, 19236 21141, 20536 21869, 19891 20526, 21213 21213, 20526 19891, 21869 20536, 21141 19236, 22503 19839, 21734 18563, 23115 19123, 22307 17871, 23705 18387, 22857 17162, 24270 17633, 23385 16435, 24812 16862, 23889 15693, 25330 16075, 24371 14934, 25822 15271, 24828 14161, 26289 14453, 25260 13375, 26730 13620, 25668 12575, 27145 12773, 26050 11762, 27533 11914, 26407 10938, 27893 11044, 26737 10103, 28226 10162, 27042 9258, 28532 9271, 27319 8404, 28809 8370, 27569 7542, 29057 7461, 27793 6672, 29277 6544, 27989 5796, 29469 5621, 28157 4914, 29631 4693, 28297 4027, 29763 3760, 28410 3137, 29867 2823, 28494 2243, 29941 1884, 28551 1346, 29985 942, 28579 449, 30000 0, 28579 -449, 29985 -942, 28551 -1346, 29941 -1884, 28494 -2243, 29867 -2823, 28410 -3136, 29763 -3760, 28297 -4027, 29631 -4693, 28157 -4914, 29469 -5621, 27989 -5796, 29277 -6544, 27793 -6672, 29057 -7461, 27569 -7542, 28809 -8370, 27319 -8404, 28532 -9270, 27042 -9258, 28226 -10162, 26737 -10103, 27893 -11044, 26407 -10938, 27533 -11914, 26050 -11762, 27145 -12773, 25668 -12575, 26730 -13620, 25260 -13375, 26289 -14453, 24828 -14161, 25822 -15271, 24371 -14934, 25330 -16075, 23889 -15693, 24812 -16862, 23385 -16435, 24271 -17633, 22857 -17162, 23705 -18387, 22307 -17871, 23115 -19123, 21734 -18563, 22503 -19839, 21141 -19236, 21869 -20536, 20526 -19891, 21213 -21213, 19891 -20526, 20536 -21869, 19236 -21141, 19839 -22503, 18563 -21734, 19123 -23115, 17871 -22307, 18387 -23705, 17162 -22857, 17633 -24270, 16435 -23385, 16862 -24812, 15693 -23889, 16075 -25330, 14934 -24371, 15271 -25822, 14161 -24828, 14453 -26289, 13375 -25260, 13620 -26730, 12575 -25668, 12773 -27145, 11762 -26050, 11914 -27533, 10938 -26407, 11044 -27893, 10103 -26737, 10162 -28226, 9258 -27042, 9271 -28532, 8404 -27319, 8370 -28809, 7542 -27569, 7461 -29057, 6672 -27793, 6544 -29277, 5796 -27989, 5621 -29469, 4914 -28157, 4693 -29631, 4027 -28297, 3760 -29763, 3137 -28410, 2823 -29867, 2243 -28494, 1884 -29941, 1346 -28551, 942 -29985, 449 -28579, 0 -30000))) \ No newline at end of file +MULTIPOLYGON (((1571 -49975, 2466 -52292, 3140 -49901, 4107 -52189, 4705 -49778, 5745 -52034, 6267 -49606, 7376 -51828, 7822 -49384, 9001 -51570, 9369 -49114, 10616 -51262, 10907 -48796, 12221 -50904, 12434 -48429, 13814 -50495, 13950 -48015, 15393 -50036, 15451 -47553, 16957 -49528, 16937 -47044, 18504 -48971, 18406 -46489, 20034 -48365, 19858 -45888, 21543 -47712, 21289 -45241, 23031 -47012, 22700 -44550, 24496 -46265, 24088 -43815, 25937 -45473, 25452 -43037, 27353 -44636, 26791 -42216, 28741 -43755, 28104 -41354, 30102 -42830, 29389 -40451, 31432 -41863, 30645 -39508, 32731 -40855, 31871 -38526, 33999 -39807, 33066 -37506, 35232 -38720, 34227 -36449, 36431 -37594, 35355 -35355, 37594 -36431, 36449 -34227, 38720 -35232, 37506 -33066, 39807 -33999, 38526 -31871, 40856 -32731, 39508 -30645, 41863 -31432, 40451 -29389, 42830 -30101, 41354 -28104, 43755 -28741, 42216 -26791, 44636 -27353, 43037 -25452, 45473 -25937, 43815 -24088, 46265 -24496, 44550 -22699, 47012 -23031, 45242 -21289, 47712 -21543, 45888 -19857, 48365 -20034, 46489 -18406, 48971 -18504, 47044 -16937, 49528 -16957, 47553 -15451, 50036 -15393, 48015 -13950, 50495 -13814, 48429 -12434, 50904 -12221, 48796 -10907, 51262 -10616, 49114 -9369, 51570 -9000, 49384 -7822, 51828 -7376, 49606 -6267, 52034 -5745, 49778 -4705, 52189 -4107, 49901 -3139, 52292 -2466, 49975 -1571, 52344 -822, 50000 0, 52344 822, 49975 1571, 52292 2466, 49901 3140, 52189 4107, 49778 4705, 52034 5745, 49606 6267, 51828 7376, 49384 7822, 51570 9001, 49114 9369, 51262 10616, 48796 10907, 50904 12221, 48429 12434, 50495 13814, 48015 13950, 50036 15393, 47553 15451, 49528 16957, 47044 16937, 48971 18504, 46489 18406, 48365 20034, 45888 19858, 47712 21543, 45241 21289, 47012 23031, 44550 22700, 46265 24496, 43815 24088, 45473 25937, 43037 25452, 44636 27353, 42216 26791, 43755 28741, 41354 28104, 42830 30102, 40451 29389, 41863 31432, 39508 30645, 40855 32731, 38526 31871, 39807 33999, 37506 33066, 38720 35232, 36449 34227, 37594 36431, 35355 35355, 36431 37594, 34227 36449, 35232 38720, 33066 37506, 33999 39807, 31871 38526, 32731 40856, 30645 39508, 31432 41863, 29389 40451, 30101 42830, 28104 41354, 28741 43755, 26791 42216, 27353 44636, 25452 43037, 25937 45473, 24088 43815, 24496 46265, 22699 44550, 23031 47012, 21289 45242, 21543 47712, 19857 45888, 20034 48365, 18406 46489, 18504 48971, 16937 47044, 16957 49528, 15451 47553, 15393 50036, 13950 48015, 13814 50495, 12434 48429, 12221 50904, 10907 48796, 10616 51262, 9369 49114, 9000 51570, 7822 49384, 7376 51828, 6267 49606, 5745 52034, 4705 49778, 4107 52189, 3139 49901, 2466 52292, 1571 49975, 822 52344, 0 50000, -822 52344, -1571 49975, -2466 52292, -3140 49901, -4107 52189, -4705 49778, -5745 52034, -6267 49606, -7376 51828, -7822 49384, -9001 51570, -9369 49114, -10616 51262, -10907 48796, -12221 50904, -12434 48429, -13814 50495, -13950 48015, -15393 50036, -15451 47553, -16957 49528, -16937 47044, -18504 48971, -18406 46489, -20034 48365, -19858 45888, -21543 47712, -21289 45241, -23031 47012, -22700 44550, -24496 46265, -24088 43815, -25937 45473, -25452 43037, -27353 44636, -26791 42216, -28741 43755, -28104 41354, -30102 42830, -29389 40451, -31432 41863, -30645 39508, -32731 40855, -31871 38526, -33999 39807, -33066 37506, -35232 38720, -34227 36449, -36431 37594, -35355 35355, -37594 36431, -36449 34227, -38720 35232, -37506 33066, -39807 33999, -38526 31871, -40856 32731, -39508 30645, -41863 31432, -40451 29389, -42830 30101, -41354 28104, -43755 28741, -42216 26791, -44636 27353, -43037 25452, -45473 25937, -43815 24088, -46265 24496, -44550 22699, -47012 23031, -45242 21289, -47712 21543, -45888 19857, -48365 20034, -46489 18406, -48971 18504, -47044 16937, -49528 16957, -47553 15451, -50036 15393, -48015 13950, -50495 13814, -48429 12434, -50904 12221, -48796 10907, -51262 10616, -49114 9369, -51570 9000, -49384 7822, -51828 7376, -49606 6267, -52034 5745, -49778 4705, -52189 4107, -49901 3139, -52292 2466, -49975 1571, -52344 822, -50000 0, -52344 -822, -49975 -1571, -52292 -2466, -49901 -3140, -52189 -4107, -49778 -4705, -52034 -5745, -49606 -6267, -51828 -7376, -49384 -7822, -51570 -9001, -49114 -9369, -51262 -10616, -48796 -10907, -50904 -12221, -48429 -12434, -50495 -13814, -48015 -13950, -50036 -15393, -47553 -15451, -49528 -16957, -47044 -16937, -48971 -18504, -46489 -18406, -48365 -20034, -45888 -19858, -47712 -21543, -45241 -21289, -47012 -23031, -44550 -22700, -46265 -24496, -43815 -24088, -45473 -25937, -43037 -25452, -44636 -27353, -42216 -26791, -43755 -28741, -41354 -28104, -42830 -30102, -40451 -29389, -41863 -31432, -39508 -30645, -40855 -32731, -38526 -31871, -39807 -33999, -37506 -33066, -38720 -35232, -36449 -34227, -37594 -36431, -35355 -35355, -36431 -37594, -34227 -36449, -35232 -38720, -33066 -37506, -33999 -39807, -31871 -38526, -32731 -40856, -30645 -39508, -31432 -41863, -29389 -40451, -30101 -42830, -28104 -41354, -28741 -43755, -26791 -42216, -27353 -44636, -25452 -43037, -25937 -45473, -24088 -43815, -24496 -46265, -22699 -44550, -23031 -47012, -21289 -45242, -21543 -47712, -19857 -45888, -20034 -48365, -18406 -46489, -18504 -48971, -16937 -47044, -16957 -49528, -15451 -47553, -15393 -50036, -13950 -48015, -13814 -50495, -12434 -48429, -12221 -50904, -10907 -48796, -10616 -51262, -9369 -49114, -9000 -51570, -7822 -49384, -7376 -51828, -6267 -49606, -5745 -52034, -4705 -49778, -4107 -52189, -3139 -49901, -2466 -52292, -1571 -49975, -822 -52344, 0 -50000, 822 -52344, 1571 -49975), (-449 -28579, -942 -29985, -1346 -28551, -1884 -29941, -2243 -28494, -2823 -29867, -3136 -28410, -3760 -29763, -4027 -28297, -4693 -29631, -4914 -28157, -5621 -29469, -5796 -27989, -6544 -29277, -6672 -27793, -7461 -29057, -7542 -27569, -8370 -28809, -8404 -27319, -9270 -28532, -9258 -27042, -10162 -28226, -10103 -26737, -11044 -27893, -10938 -26407, -11914 -27533, -11762 -26050, -12773 -27145, -12575 -25668, -13620 -26730, -13375 -25260, -14453 -26289, -14161 -24828, -15271 -25822, -14934 -24371, -16075 -25330, -15693 -23889, -16862 -24812, -16435 -23385, -17633 -24271, -17162 -22857, -18387 -23705, -17871 -22307, -19123 -23115, -18563 -21734, -19839 -22503, -19236 -21141, -20536 -21869, -19891 -20526, -21213 -21213, -20526 -19891, -21869 -20536, -21141 -19236, -22503 -19839, -21734 -18563, -23115 -19123, -22307 -17871, -23705 -18387, -22857 -17162, -24270 -17633, -23385 -16435, -24812 -16862, -23889 -15693, -25330 -16075, -24371 -14934, -25822 -15271, -24828 -14161, -26289 -14453, -25260 -13375, -26730 -13620, -25668 -12575, -27145 -12773, -26050 -11762, -27533 -11914, -26407 -10938, -27893 -11044, -26737 -10103, -28226 -10162, -27042 -9258, -28532 -9271, -27319 -8404, -28809 -8370, -27569 -7542, -29057 -7461, -27793 -6672, -29277 -6544, -27989 -5796, -29469 -5621, -28157 -4914, -29631 -4693, -28297 -4027, -29763 -3760, -28410 -3137, -29867 -2823, -28494 -2243, -29941 -1884, -28551 -1346, -29985 -942, -28579 -449, -30000 0, -28579 449, -29985 942, -28551 1346, -29941 1884, -28494 2243, -29867 2823, -28410 3136, -29763 3760, -28297 4027, -29631 4693, -28157 4914, -29469 5621, -27989 5796, -29277 6544, -27793 6672, -29057 7461, -27569 7542, -28809 8370, -27319 8404, -28532 9270, -27042 9258, -28226 10162, -26737 10103, -27893 11044, -26407 10938, -27533 11914, -26050 11762, -27145 12773, -25668 12575, -26730 13620, -25260 13375, -26289 14453, -24828 14161, -25822 15271, -24371 14934, -25330 16075, -23889 15693, -24812 16862, -23385 16435, -24271 17633, -22857 17162, -23705 18387, -22307 17871, -23115 19123, -21734 18563, -22503 19839, -21141 19236, -21869 20536, -20526 19891, -21213 21213, -19891 20526, -20536 21869, -19236 21141, -19839 22503, -18563 21734, -19123 23115, -17871 22307, -18387 23705, -17162 22857, -17633 24270, -16435 23385, -16862 24812, -15693 23889, -16075 25330, -14934 24371, -15271 25822, -14161 24828, -14453 26289, -13375 25260, -13620 26730, -12575 25668, -12773 27145, -11762 26050, -11914 27533, -10938 26407, -11044 27893, -10103 26737, -10162 28226, -9258 27042, -9271 28532, -8404 27319, -8370 28809, -7542 27569, -7461 29057, -6672 27793, -6544 29277, -5796 27989, -5621 29469, -4914 28157, -4693 29631, -4027 28297, -3760 29763, -3137 28410, -2823 29867, -2243 28494, -1884 29941, -1346 28551, -942 29985, -449 28579, 0 30000, 449 28579, 942 29985, 1346 28551, 1884 29941, 2243 28494, 2823 29867, 3136 28410, 3760 29763, 4027 28297, 4693 29631, 4914 28157, 5621 29469, 5796 27989, 6544 29277, 6672 27793, 7461 29057, 7542 27569, 8370 28809, 8404 27319, 9270 28532, 9258 27042, 10162 28226, 10103 26737, 11044 27893, 10938 26407, 11914 27533, 11762 26050, 12773 27145, 12575 25668, 13620 26730, 13375 25260, 14453 26289, 14161 24828, 15271 25822, 14934 24371, 16075 25330, 15693 23889, 16862 24812, 16435 23385, 17633 24271, 17162 22857, 18387 23705, 17871 22307, 19123 23115, 18563 21734, 19839 22503, 19236 21141, 20536 21869, 19891 20526, 21213 21213, 20526 19891, 21869 20536, 21141 19236, 22503 19839, 21734 18563, 23115 19123, 22307 17871, 23705 18387, 22857 17162, 24270 17633, 23385 16435, 24812 16862, 23889 15693, 25330 16075, 24371 14934, 25822 15271, 24828 14161, 26289 14453, 25260 13375, 26730 13620, 25668 12575, 27145 12773, 26050 11762, 27533 11914, 26407 10938, 27893 11044, 26737 10103, 28226 10162, 27042 9258, 28532 9271, 27319 8404, 28809 8370, 27569 7542, 29057 7461, 27793 6672, 29277 6544, 27989 5796, 29469 5621, 28157 4914, 29631 4693, 28297 4027, 29763 3760, 28410 3137, 29867 2823, 28494 2243, 29941 1884, 28551 1346, 29985 942, 28579 449, 30000 0, 28579 -449, 29985 -942, 28551 -1346, 29941 -1884, 28494 -2243, 29867 -2823, 28410 -3136, 29763 -3760, 28297 -4027, 29631 -4693, 28157 -4914, 29469 -5621, 27989 -5796, 29277 -6544, 27793 -6672, 29057 -7461, 27569 -7542, 28809 -8370, 27319 -8404, 28532 -9270, 27042 -9258, 28226 -10162, 26737 -10103, 27893 -11044, 26407 -10938, 27533 -11914, 26050 -11762, 27145 -12773, 25668 -12575, 26730 -13620, 25260 -13375, 26289 -14453, 24828 -14161, 25822 -15271, 24371 -14934, 25330 -16075, 23889 -15693, 24812 -16862, 23385 -16435, 24271 -17633, 22857 -17162, 23705 -18387, 22307 -17871, 23115 -19123, 21734 -18563, 22503 -19839, 21141 -19236, 21869 -20536, 20526 -19891, 21213 -21213, 19891 -20526, 20536 -21869, 19236 -21141, 19839 -22503, 18563 -21734, 19123 -23115, 17871 -22307, 18387 -23705, 17162 -22857, 17633 -24270, 16435 -23385, 16862 -24812, 15693 -23889, 16075 -25330, 14934 -24371, 15271 -25822, 14161 -24828, 14453 -26289, 13375 -25260, 13620 -26730, 12575 -25668, 12773 -27145, 11762 -26050, 11914 -27533, 10938 -26407, 11044 -27893, 10103 -26737, 10162 -28226, 9258 -27042, 9271 -28532, 8404 -27319, 8370 -28809, 7542 -27569, 7461 -29057, 6672 -27793, 6544 -29277, 5796 -27989, 5621 -29469, 4914 -28157, 4693 -29631, 4027 -28297, 3760 -29763, 3137 -28410, 2823 -29867, 2243 -28494, 1884 -29941, 1346 -28551, 942 -29985, 449 -28579, 0 -30000, -449 -28579))) \ No newline at end of file diff --git a/stress_benchmark/resources/013.settings b/stress_benchmark/resources/013.settings index 692c6164cc..43d30644cc 100644 --- a/stress_benchmark/resources/013.settings +++ b/stress_benchmark/resources/013.settings @@ -6,7 +6,6 @@ resolution=0 _plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 skin_preshrink=2.4 clean_between_layers=False -support_interface_skip_height=0.1 machine_feeder_wheel_diameter=10.0 retraction_hop_only_when_collides=False machine_steps_per_mm_y=50 @@ -44,6 +43,7 @@ cool_min_speed=12 cool_fan_enabled=True cool_fan_speed_max=100 wall_overhang_angle=90 +seam_overhang_angle=30 jerk_support_infill=8 wall_overhang_speed_factor=100 support_roof_line_width=0.4 diff --git a/stress_benchmark/resources/013.wkt b/stress_benchmark/resources/013.wkt index 262d510e32..54a5b1899d 100644 --- a/stress_benchmark/resources/013.wkt +++ b/stress_benchmark/resources/013.wkt @@ -1 +1 @@ -MULTIPOLYGON (((107638 61798, 107744 62158, 108015 62180, 108062 62230, 108158 62595, 108629 62124, 108298 62134, 108653 62014, 109074 62244, 109253 61956, 109398 62376, 109778 62263, 110656 62109, 110664 62166, 111427 62029, 111455 62046, 111909 62070, 111589 62212, 111811 62557, 112026 62552, 112468 62660, 112801 62720, 113487 62365, 113536 62295, 113672 62301, 113685 62442, 113789 62647, 113875 62653, 114231 62320, 114654 62279, 115076 62173, 115173 62437, 115478 62555, 115710 62416, 115765 62591, 116266 62673, 116360 62845, 116641 62839, 116922 62956, 117235 62822, 117458 63223, 117459 62791, 117998 62730, 117546 62587, 117967 62033, 118261 61840, 118748 61934, 119096 62353, 119359 62691, 119801 62728, 120175 62684, 120280 62944, 120774 62898, 120901 62842, 121043 63014, 121518 63116, 121805 63356, 122041 63450, 122526 63294, 122632 63225, 123064 63424, 123244 63527, 123317 63515, 124068 63678, 124174 63956, 124422 63794, 124995 63832, 125404 64201, 126132 64693, 126089 64441, 126457 64147, 126777 64239, 127418 64478, 128049 64082, 128275 64819, 128762 64965, 128929 64780, 128811 65015, 129252 65023, 130043 64726, 130423 64443, 130492 64314, 130544 64398, 130731 64407, 131153 64554, 131278 64749, 131377 65183, 131928 65221, 132241 65138, 132370 65393, 132667 65433, 132789 65394, 133284 65774, 133424 65732, 133566 65611, 134116 65771, 134053 66534, 134180 66604, 134271 66552, 134167 65762, 134697 65797, 134853 65990, 134596 66599, 134863 66665, 135169 66580, 135312 66469, 135630 66611, 135871 66841, 136072 66764, 136384 66966, 136641 67299, 136703 67429, 136850 67448, 137216 67207, 137434 67416, 137720 67474, 137803 67771, 137931 67972, 138182 67790, 138010 67383, 138471 67543, 138462 67769, 138718 68077, 139093 67699, 139253 67684, 139313 67819, 139270 68249, 139653 68632, 139943 68770, 140305 68715, 140118 68196, 140039 68075, 140343 68073, 140824 68399, 140847 68453, 140689 68774, 141071 69419, 141379 69254, 141750 69433, 141961 69711, 142034 69702, 143056 70297, 143079 70701, 143137 70925, 143207 70998, 143671 70858, 144069 70888, 144063 70756, 144170 70669, 144256 70867, 144197 71122, 143918 71390, 143754 71388, 143741 71894, 143973 71983, 144178 71866, 144287 71644, 144585 71807, 145227 72064, 145344 72079, 145422 72196, 145734 72514, 146087 72750, 146266 73205, 146504 73286, 146903 72997, 147138 73558, 147258 73710, 147374 73949, 147816 74245, 148300 74404, 148262 73694, 148482 73644, 148546 74002, 148808 73791, 148947 73748, 149399 74308, 149320 74843, 149861 75048, 150004 75194, 150297 75228, 150697 75742, 150898 76141, 151018 76209, 151055 76307, 151091 76961, 151179 77070, 151126 77332, 151570 77909, 151580 78020, 151677 78055, 152478 78580, 152696 78890, 153246 78969, 153380 79090, 153611 79598, 153792 79860, 153905 79874, 153936 79591, 154122 79201, 154206 79214, 154328 79854, 154605 79798, 154504 80124, 154638 80595, 154936 80806, 155128 80869, 155269 81264, 155431 81461, 155986 81903, 156258 82619, 156519 82902, 156556 83165, 157009 83410, 157167 83650, 157544 83967, 157864 84528, 158004 84588, 158073 85144, 158021 85262, 158066 85649, 158272 85891, 158599 86346, 158557 86503, 158724 86951, 158727 86979, 158994 87451, 158791 87519, 158896 87858, 159613 88094, 159336 88273, 159649 88589, 159739 88888, 160231 89076, 160204 89377, 160601 89355, 160838 89733, 161221 90494, 161383 90683, 161672 91308, 161571 91396, 161971 91966, 162496 92318, 162462 92594, 162351 92817, 162180 92856, 161919 93082, 162058 93324, 162016 93586, 162077 93918, 161818 93768, 161505 94100, 161903 94483, 162130 94357, 162118 94570, 162029 94651, 161900 95118, 162044 95320, 162237 95693, 162398 96260, 162247 96429, 162428 97079, 162416 97087, 162649 97642, 162676 97681, 162746 98177, 162913 98358, 162884 98734, 162808 98875, 163144 99515, 163166 99796, 163123 100064, 163535 100638, 163830 100958, 163875 101096, 164441 101577, 164657 102608, 164595 102645, 164362 103065, 164983 103275, 165146 103843, 164874 103985, 165021 104245, 165545 104603, 165903 105016, 165782 105809, 165812 105910, 165682 106040, 165320 106161, 165251 107010, 165111 107456, 165237 108118, 165064 108353, 165277 108600, 165182 108913, 165174 109503, 165333 109641, 165308 109854, 165320 110236, 165568 110298, 165474 110446, 165754 111299, 165547 111687, 165981 111636, 165974 111657, 165481 111804, 165584 111929, 165889 112497, 165964 112767, 165945 113418, 166046 114684, 165503 115419, 165817 116075, 165383 116036, 165285 116518, 165742 116536, 165617 116819, 165673 117116, 165822 117431, 165683 117658, 165526 117986, 165568 118331, 165417 118612, 165467 118745, 165151 118758, 164957 118933, 164905 119163, 165368 119289, 165490 119256, 165516 119450, 165484 119467, 165217 120121, 165067 120571, 165157 121003, 165172 121288, 165011 121820, 164765 121800, 164445 121913, 164355 122565, 164523 122609, 164201 122923, 164910 123207, 164748 123566, 165050 124082, 164563 125083, 164392 125386, 164152 125996, 163871 126297, 163547 126535, 163469 126722, 163349 126839, 163017 127240, 162763 127834, 162564 127878, 162590 127731, 162175 127658, 162065 127927, 162342 128096, 162190 128472, 162603 128759, 162611 128912, 162760 129315, 162472 129764, 162485 130421, 162416 130697, 162248 130937, 162311 131118, 162261 132151, 162371 132801, 162325 132903, 162382 133095, 162566 133491, 162586 133703, 162446 133854, 162530 133985, 162238 134286, 161767 134062, 161670 134133, 161712 134452, 160591 134891, 160035 135235, 159899 135389, 159790 135615, 159612 135650, 159146 136137, 158963 136445, 158739 136611, 158161 136703, 157900 137055, 157994 137249, 157778 137593, 158521 137562, 158398 137737, 158264 137783, 157781 138194, 157602 138122, 157415 138501, 157068 138911, 156974 139057, 156760 139345, 156410 139507, 156292 139768, 155917 139738, 155750 139652, 155490 139865, 155149 140040, 155280 140188, 155685 140146, 155753 140218, 155589 140305, 155221 140427, 155160 140620, 155287 141386, 155238 141436, 155052 142258, 154966 142371, 154495 143275, 154456 143369, 154201 143734, 154049 144255, 153871 144409, 153698 144744, 153645 145119, 153283 144989, 152823 145452, 152842 145920, 152754 146154, 152301 146979, 152110 147120, 152044 147501, 151917 147924, 151659 148182, 151360 148687, 151430 149144, 151420 149256, 151372 149220, 150907 149175, 150656 149553, 150614 149805, 150902 150066, 151046 150526, 150329 151460, 150202 151491, 149753 151374, 149417 151668, 149174 152094, 148972 151942, 148562 152188, 148517 152674, 148526 152895, 148418 152955, 148350 153100, 148103 153019, 147353 153203, 147243 153213, 147088 153415, 147014 153879, 146967 153867, 146071 154506, 145993 154466, 145495 154367, 145205 154083, 145100 154068, 144872 153638, 144729 153643, 144741 154034, 144882 154200, 144749 154383, 144397 154504, 144154 154600, 143646 154758, 143366 154743, 143275 155263, 143228 155261, 143174 155353, 142516 155406, 142285 156030, 142168 156078, 142060 156390, 142113 156052, 141577 156346, 141933 156689, 141829 157065, 141794 157330, 141700 157397, 141716 157431, 140903 157507, 140293 157893, 140034 158441, 140068 157709, 140640 157507, 140116 157450, 139847 157552, 139436 158276, 139837 158458, 139336 158461, 138686 158872, 137909 158995, 137861 158740, 137635 158791, 137532 158912, 137450 159332, 137196 159858, 135972 160278, 135835 160233, 135518 160665, 135594 160729, 135517 160742, 135391 160690, 135007 160607, 134864 160622, 134745 160899, 134671 161326, 134448 161485, 134359 161330, 134092 161332, 133701 161441, 133695 161585, 133506 161665, 133254 161563, 132782 161658, 132173 162159, 132000 162484, 131789 162307, 131500 162273, 131201 162404, 130891 162617, 130781 162604, 130708 162672, 130305 162626, 130092 162964, 129726 162769, 129546 162178, 129065 162143, 129020 162183, 128325 162112, 128244 162139, 128097 162067, 128237 162029, 128235 161603, 128399 161569, 128252 161425, 127574 161299, 127228 161617, 127387 161818, 127212 161733, 127046 162124, 126770 162433, 126418 162319, 126131 162762, 125819 162784, 125715 163046, 125310 163312, 125114 163304, 125127 163483, 124763 163835, 124536 163765, 124474 163510, 124167 163601, 124074 163593, 123247 163771, 122981 163958, 122697 164085, 122335 164007, 121863 164241, 121858 164227, 121137 164199, 121067 164467, 120021 164611, 119693 163971, 119739 163581, 119366 163183, 119105 163154, 119020 163401, 119114 163896, 118883 163770, 118631 163914, 118470 163732, 118453 163882, 118177 163847, 118321 164160, 117915 164427, 118067 164735, 117856 164553, 117582 164442, 117481 164518, 117068 164577, 116939 164916, 116709 165055, 116192 165087, 116027 164799, 116062 164641, 116039 164238, 115539 163917, 115085 163960, 115015 163931, 114539 163932, 114354 164048, 114197 164264, 114091 164522, 114280 165180, 113539 164858, 113371 164716, 113113 164784, 112690 164606, 111994 165075, 111490 165262, 111219 165331, 110298 164515, 110557 165316, 110477 165308, 110032 164930, 109991 164995, 109892 164947, 109392 164932, 109305 165141, 109136 165242, 109037 165177, 108134 165011, 107889 165174, 107890 165207, 107535 165027, 107281 164788, 107097 164792, 106984 164860, 106574 164973, 106296 164837, 105829 164535, 105493 164437, 105167 164174, 104876 164084, 104653 164317, 103974 164179, 103578 163873, 103532 164101, 102784 163889, 102609 163627, 102484 163388, 101939 163456, 101877 163716, 101795 163419, 101351 163304, 101293 163693, 101638 163863, 101453 164071, 101246 163822, 100885 163533, 101153 162796, 101934 163113, 102341 163186, 102017 162680, 101132 162568, 100907 162322, 101047 162652, 100880 163530, 100496 163549, 100135 163399, 99760 163287, 99423 163126, 99214 162951, 98920 163149, 98490 163059, 98142 162563, 97901 162928, 97559 162428, 97072 162026, 96310 161931, 96778 162238, 96736 162288, 96671 162241, 96623 162260, 96193 161924, 95762 161666, 95631 161693, 95338 161385, 94738 161327, 94356 161354, 94035 161322, 94213 161133, 93952 160952, 93626 161035, 93167 160833, 92458 160573, 92483 160542, 91980 160109, 91620 160219, 91635 160057, 91176 159840, 91294 159570, 91504 159403, 91193 159130, 90531 159379, 89536 159374, 89282 159293, 89299 159127, 89111 158789, 89120 158769, 88695 158394, 88407 158566, 88150 158607, 87522 158118, 87379 158052, 86752 157585, 86554 157572, 86219 157667, 85893 157358, 85559 157215, 85735 156690, 85727 156510, 85591 156449, 85593 156521, 85081 156933, 85053 156526, 85152 156226, 84432 156133, 84073 156466, 84088 156721, 83864 156586, 83664 156539, 83838 156454, 84155 156068, 83957 155828, 83676 155305, 83334 155100, 82732 154931, 82745 154765, 82658 154885, 82135 154847, 81814 154578, 81757 154250, 81376 154469, 80767 154183, 80818 153959, 80751 153846, 80146 153555, 79859 153068, 79693 152867, 79265 152780, 78962 152586, 78662 152546, 78113 152225, 78048 152007, 77743 151619, 77425 151154, 77646 150887, 77376 150978, 76961 150958, 76693 150973, 76627 150905, 76689 150795, 76621 150181, 76183 149989, 76111 149562, 75871 149735, 75370 150201, 75322 149778, 75193 149701, 74914 149472, 74486 148900, 74513 148800, 74464 148427, 74190 148322, 74076 148230, 73738 148245, 73618 148397, 73659 148164, 73500 147713, 73666 146997, 73648 146658, 73301 146188, 73129 146033, 72780 145897, 72312 146251, 72276 145911, 72056 145754, 71945 145570, 71284 145039, 70815 144606, 70801 144331, 70597 144262, 70424 144117, 70432 143568, 70647 143304, 70680 142891, 70297 142497, 69982 143003, 69855 143086, 69805 143064, 69791 142923, 70270 142480, 69746 142313, 69407 142467, 69113 141754, 68871 141327, 68720 141118, 68511 140871, 68561 140310, 68669 140001, 68576 139702, 68364 139591, 68332 139947, 67868 139424, 67407 139393, 67186 139323, 66959 138724, 66983 138469, 66424 138353, 66486 137934, 66538 137653, 66020 137484, 65843 136947, 65627 136590, 65374 136286, 65343 135432, 65250 135015, 65159 134751, 64778 134435, 64885 134175, 64196 133775, 64179 133680, 64333 133269, 64195 132998, 63970 132896, 63712 132872, 63225 132438, 63375 131948, 63074 131185, 63119 131037, 63074 130981, 62915 130326, 62777 130148, 62721 129550, 62657 129309, 62584 129210, 62057 128796, 62203 128478, 61955 128412, 61929 128235, 62047 127661, 61699 127364, 61684 127190, 61755 127070, 61773 126640, 62035 126030, 62009 125911, 61436 125556, 61432 125520, 61857 125167, 61540 125052, 61054 124897, 61013 124414, 61237 123699, 60717 123715, 60734 123292, 60628 123041, 60716 122373, 60480 121823, 60265 121578, 60217 120990, 60468 120094, 60238 119458, 60004 119090, 59981 118793, 59828 118448, 59823 117850, 59701 117599, 59670 117391, 59759 116940, 59654 116786, 59793 116138, 59588 115572, 59575 115355, 59731 114955, 59857 114376, 59599 113591, 59856 112715, 59776 112139, 59887 111652, 60011 111355, 59808 111014, 59734 110646, 59686 110483, 59827 109878, 59940 109779, 59994 109528, 59940 109297, 59649 109152, 59583 108877, 59915 108894, 60079 108737, 60252 108998, 60478 109100, 60548 108936, 60481 108729, 60268 108467, 60720 108165, 60701 108075, 60857 108020, 61222 107710, 61301 107710, 61218 107408, 60219 106833, 60044 107052, 59763 107001, 60192 106806, 60291 106190, 60565 105774, 60593 105609, 60659 105643, 60655 105497, 60723 105129, 60848 104635, 60874 104340, 61021 104090, 61048 102967, 61091 102932, 61011 102630, 61123 102383, 61004 102171, 60910 101701, 60885 101387, 61199 100818, 61145 100707, 61376 100410, 61494 100173, 61688 100090, 61820 99750, 61972 99564, 61858 99159, 61816 98760, 61950 98612, 62065 98263, 62079 97386, 62111 97085, 62311 96552, 62332 96320, 62505 96335, 62659 95923, 62637 95813, 63041 95281, 63354 95070, 63339 94378, 63390 94042, 63886 93811, 64211 93100, 64312 93017, 64288 92830, 64368 92463, 64531 92378, 64728 91633, 64661 91444, 64750 90969, 64664 90595, 64752 90411, 64803 90087, 64957 90200, 64961 90453, 65257 90882, 65490 90727, 65715 90836, 66168 90639, 66220 90569, 66181 90244, 65966 89980, 65606 89857, 65511 90282, 65388 90350, 65269 89946, 65367 89777, 65311 89403, 65365 89082, 65784 88998, 65968 88879, 65801 88198, 66423 87757, 66470 87783, 66483 87703, 66672 87366, 67092 87078, 67525 86514, 67736 86138, 68038 85312, 68331 85212, 68766 84683, 68658 84425, 69008 84286, 69551 83796, 69773 82646, 69905 82334, 70278 81957, 70394 81760, 70475 81723, 70809 81300, 71241 81463, 71389 81277, 71375 80953, 70861 81223, 71346 80613, 71462 80697, 71682 80604, 71981 80583, 72016 80532, 72447 80372, 72659 80263, 72576 80080, 72447 79614, 72736 79324, 73032 78853, 73318 78735, 73314 78631, 73465 78597, 73725 78275, 73833 78183, 73800 77861, 73687 77683, 73900 77542, 74015 77407, 74281 77286, 74665 77314, 75150 77680, 75233 76974, 75746 76759, 75853 76678, 76135 76806, 76072 76387, 76293 75934, 76542 75750, 76961 75829, 77021 75669, 77140 75787, 77293 75861, 78094 75293, 78260 75090, 78560 74838, 78138 74243, 78580 74003, 79071 73679, 79173 73665, 79896 73332, 80217 73357, 80228 73057, 80593 73050, 80682 72879, 80725 72331, 81188 71782, 81414 71643, 82167 71556, 82415 71469, 82405 71348, 82702 70919, 82725 70678, 83050 70397, 83858 69751, 84248 69190, 84308 69050, 84388 69066, 84411 68405, 84266 68336, 84248 68033, 84547 68005, 84744 67907, 85257 68266, 85370 68279, 86119 68437, 86165 67866, 86320 67645, 86362 67230, 86722 67072, 87027 66667, 87459 66643, 88121 66513, 88125 66307, 88576 66447, 89015 66728, 89248 66285, 89680 65979, 89710 65827, 90025 65647, 90292 65288, 91699 65040, 91843 65174, 91803 65479, 92197 65569, 92568 65917, 92697 65862, 92474 65523, 92616 65436, 92809 65182, 93354 65118, 93778 65542, 93951 65570, 94671 65348, 94694 65251, 94819 65197, 95130 64605, 95165 64605, 95181 64525, 94977 64273, 95382 64182, 95570 64205, 96162 63962, 96461 63772, 96690 63543, 96787 63371, 97676 63653, 97902 63476, 98374 63151, 98461 62855, 98556 62844, 98610 62901, 98658 63205, 99056 63088, 99395 63359, 99804 63559, 100333 63509, 100415 63772, 100805 63361, 101010 62939, 101252 62919, 101611 62855, 102073 62624, 102333 62846, 102565 62800, 103215 62762, 103198 62253, 102993 61820, 102934 61788, 102919 61678, 103019 61612, 103775 61530, 103877 61422, 103926 61511, 104386 61511, 104682 61620, 104751 62166, 105231 62050, 105494 61705, 105716 61970, 105985 62345, 106404 62038, 106632 62045, 107082 62232, 107223 61822, 107320 61394) (107405 163123, 107658 163399, 107872 163671, 108234 163678, 108544 163668, 108569 163577, 108562 163262, 108410 163315, 108084 163236, 107876 163248, 107574 163068, 107392 163009) (104025 163306, 104223 163629, 104453 163662, 104530 163378, 104357 163119) (118332 64249, 117941 64298, 117861 64327, 116702 64337, 116338 64265, 115949 64310, 115152 64290, 114927 64232, 113840 64171, 113565 64190, 113494 64076, 113018 64133, 112030 64137, 111788 64178, 110986 64242, 109716 64235, 109400 64280, 109212 64269, 107898 64604, 106933 64043, 106712 64278, 106557 64475, 106399 64460, 105159 64515, 104534 64856, 103577 64886, 103375 64972, 103091 64974, 102518 65034, 101601 65102, 100399 65081, 100307 65042, 99991 65061, 99430 65219, 99351 65274, 98751 65234, 98501 65229, 97418 65711, 96438 66211, 95855 66285, 95702 66424, 95166 66789, 95003 66784, 93994 67300, 93565 67491, 93450 67561, 93275 67551, 92746 67656, 92677 67642, 92602 67697, 92389 68016, 92034 68146, 91538 68520, 91054 68778, 90543 68507, 90189 68638, 89572 68818, 89431 68894, 89600 69240, 89152 69427, 88704 69395, 88043 69758, 87655 69861, 87129 69892, 86755 69902, 86660 69960, 85555 70291, 85627 70909, 84995 71379, 84372 71916, 84189 72110, 83892 72549, 83540 72778, 83195 72953, 83119 73024, 81636 74220, 81427 74422, 80402 74743, 80336 74845, 80131 75541, 79908 75972, 79451 76296, 79219 76480, 78370 77063, 77598 77965, 77425 78059, 77134 78291, 76996 78386, 76762 78693, 76494 78814, 76366 79273, 75559 80110, 75523 80171, 75071 80725, 74926 80792, 74274 81543, 74046 81739, 73512 82236, 73432 82394, 73287 82441, 73195 83047, 72690 83547, 72675 83599, 72014 84512, 71734 85155, 71464 85491, 71166 85735, 70684 86870, 70468 87225, 69999 87689, 69674 88209, 69360 88868, 69222 89131, 68714 89882, 68209 90916, 67841 91761, 67500 92602, 67136 93381, 66926 93690, 66526 94671, 66412 95158, 66303 95397, 65974 96510, 65766 97083, 65441 97653, 65284 98604, 65214 98882, 65143 99712, 64590 100407, 64500 100809, 64418 101321, 64408 101545, 64072 102139, 63842 102588, 63716 103865, 63684 104077, 63644 104860, 63652 105000, 63568 105413, 63591 105916, 63628 106423, 63570 106622, 63393 107695, 63431 107873, 63516 108445, 63492 108902, 63314 109220, 63445 109770, 63410 110098, 63355 111041, 63337 111208, 63322 111967, 63234 112230, 63222 112796, 63356 113665, 63268 114234, 63233 115222, 63268 115478, 63252 116059, 63179 117013, 63251 117207, 63404 118524, 63430 118819, 63622 119082, 63693 120009, 63900 120454, 63854 120862, 64062 121653, 64175 121995, 64201 122326, 64402 123143, 64545 123670, 64562 123809, 65015 125370, 65101 125609, 65173 126317, 65233 126683, 65422 127154, 65697 127749, 65835 127942, 66039 128414, 65981 128841, 66105 129353, 66362 130142, 66715 130892, 66819 131198, 66966 131728, 67741 133316, 67863 133501, 68490 134853, 68571 135075, 68746 135211, 69075 135718, 69459 136475, 69570 136810, 69745 137069, 69822 137324, 70255 138093, 70518 138490, 70762 138734, 70950 139101, 71035 139601, 72216 140772, 72578 141326, 72855 141789, 73131 142910, 73205 142988, 73201 142906, 73804 142853, 74067 142994, 73804 143344, 74120 143350, 74567 143816, 74944 144274, 75672 145048, 75809 145220, 76382 145873, 76660 146129, 77248 146760, 77838 147367, 77561 147882, 77986 148080, 78110 148405, 78588 148758, 78812 149017, 79004 149291, 79293 149580, 80175 150357, 80996 150861, 81132 150999, 81469 151225, 82383 152190, 82961 152145, 83411 152379, 83602 152383, 83776 152532, 84030 152705, 84332 153022, 84989 153522, 85236 153680, 85811 153977, 86088 154147, 87503 155176, 87941 155484, 88037 155644, 88509 155894, 88649 156026, 88896 156464, 89256 156693, 89976 156860, 90298 156903, 90826 157231, 91428 157487, 92466 157794, 93189 157931, 94452 158517, 94652 158574, 95101 158783, 95323 158911, 96117 159087, 96193 159084, 96735 159292, 97287 159520, 97997 159705, 99238 160198, 99530 160345, 100146 160544, 100454 160282, 100923 160136, 101193 160173, 102820 160613, 103521 161372, 103640 161587, 104564 161534, 105113 161583, 106008 161762, 106274 161772, 106554 161984, 107012 162164, 107372 161803, 107580 161665, 108231 161557, 108698 161681, 109450 162234, 109527 162340, 110191 162230, 110362 162249, 110745 162246, 111519 162512, 111975 162605, 112070 162538, 112267 162685, 112569 162368, 113001 162209, 113297 162148, 113753 162246, 114120 162432, 114284 162624, 115492 162998, 115842 163021, 115936 163094, 115995 163083, 116014 162936, 116562 162232, 116741 162045, 117010 161708, 117549 161399, 117916 161394, 118641 161286, 119454 161150, 120071 161144, 120446 161289, 121097 161718, 122237 161336, 122955 161373, 123198 161502, 123406 161454, 123904 161418, 124372 161282, 124564 161268, 125138 160939, 125848 160412, 127286 160207, 127539 160206, 127987 160160, 128492 160038, 129097 160282, 129479 160041, 129849 159927, 130055 159748, 130325 159620, 130993 159527, 131266 159365, 132113 159153, 132375 159132, 132663 158903, 132893 158953, 133028 158471, 133350 158246, 134054 157389, 134145 157158, 134631 156874, 135563 156265, 135868 156297, 136264 156301, 136527 156485, 136855 156983, 137067 156746, 137396 156838, 137538 156827, 137765 156737, 138488 156186, 138769 156047, 139205 155497, 139329 155768, 139746 155523, 139996 155443, 140685 154981, 140785 154271, 141249 153702, 141374 153163, 141450 153050, 141575 153016, 142406 152562, 142670 152365, 143077 152360, 143404 152460, 144087 152220, 144265 152108, 144932 151865, 145318 151417, 145450 151382, 145672 151218, 146028 151007, 146462 150661, 146538 150476, 146782 150375, 147350 149983, 147657 149637, 148380 148989, 149170 148735, 149406 148492, 149427 148299, 149553 147781, 149546 147627, 149170 147541, 149179 147259, 149621 147344, 149776 147059, 150031 146436, 150062 146160, 150227 145713, 150261 145330, 150362 145027, 150515 144747, 151115 144003, 151850 142957, 152578 141858, 152779 141599, 153416 140855, 153547 140649, 153820 140336, 153833 139718, 153854 139343, 153971 139212, 154216 139230, 154439 139371, 154816 139041, 155069 138562, 155892 137302, 156253 136712, 156316 136456, 156763 135491, 157157 134559, 157716 134034, 158304 133462, 158783 132859, 158935 132748, 159680 132397, 159798 132167, 160053 131875, 160621 131758, 160572 130952, 160533 130837, 160892 130141, 160799 129900, 160781 129657, 160903 129457, 160982 128990, 160987 128625, 161176 128257, 161166 128110, 161557 127571, 161669 127305, 161738 127185, 161887 126263, 161440 125660, 161501 125490, 161901 125130, 161852 124508, 161726 124351, 161996 123695, 161765 122827, 161848 122322, 162041 121681, 162146 120906, 162238 120500, 162328 119792, 162466 119524, 162556 118576, 162558 118218, 162658 118233, 162887 117852, 162861 117560, 162940 117257, 162949 116670, 162815 116087, 162691 115786, 162653 115598, 162949 115117, 162837 114936, 162467 114521, 162421 114072, 162851 113620, 162914 113675, 162895 113588, 163052 113137, 163096 112475, 162816 112337, 162767 111631, 162838 111282, 162788 111154, 162883 110292, 162829 110177, 162773 109418, 162575 108764, 162593 107705, 162642 107502, 162602 106746, 162630 106378, 162654 105255, 162643 104845, 162461 104012, 162598 103620, 162538 103199, 162269 102862, 162168 102299, 161936 102017, 161825 101733, 161994 101331, 161460 100585, 161389 100509, 160987 99974, 160702 99563, 160116 98162, 160078 97301, 160030 97091, 160163 96953, 160030 96835, 160213 96249, 159915 95619, 159709 95519, 159606 95087, 159662 94582, 159780 94567, 159737 94166, 159880 93232, 159554 92811, 159278 92701, 158941 92375, 158735 91583, 158056 90671, 158031 90487, 157694 89655, 157567 89499, 157393 89087, 157390 89026, 157289 88594, 156872 88218, 156632 88097, 156472 87979, 155579 87725, 155415 87548, 155195 86858, 155225 86781, 155151 86730, 154982 85908, 154180 84810, 154167 84709, 153923 84142, 153010 84035, 152679 83755, 152641 83063, 152862 82895, 152628 83030, 152354 82668, 152259 81794, 151577 81214, 151511 81185, 151083 80454, 150987 80241, 150883 80216, 150151 79183, 150120 79110, 149967 78910, 149525 78717, 149453 78432, 149224 78487, 148997 78170, 148806 78022, 148269 77129, 148047 76893, 147812 76854, 147700 76878, 146995 76693, 146742 76644, 146492 76505, 146216 76178, 145992 76002, 145365 75304, 145041 74457, 144978 74075, 144709 74103, 144229 74193, 143949 74147, 143396 74395, 143274 74409, 142661 74114, 142150 73737, 141928 73607, 141257 72838, 141262 72776, 140917 72224, 140786 71965, 140761 71988, 139847 71919, 139375 71573, 139008 71533, 138453 71257, 137972 70699, 137711 70457, 137577 70044, 137637 69671, 137000 68917, 136714 69035, 136514 69048, 136292 68757, 135873 68740, 135567 68510, 135344 68283, 134919 68430, 134676 68453, 134236 68218, 134057 68154, 133281 67841, 132775 67687, 131954 67617, 131716 67520, 131452 67203, 131068 67053, 130761 66919, 130344 66928, 129949 66616, 129054 66515, 128832 66803, 128529 66715, 127661 66437, 126795 66102, 126468 66087, 125917 66030, 125027 65716, 124646 65610, 123784 65289, 123550 65306, 122980 65095, 122571 65075, 121657 64533, 121195 64627, 119556 64070, 119199 64016) (97747 161636, 98038 161957, 98138 161655, 97891 161358) (137167 158299, 137516 158370, 137528 158041, 137367 157993) (164383 121157, 164460 121458, 164643 121522, 164651 121052) (165315 113634, 165369 114218, 165799 114380, 165940 113417) (163783 104411, 164070 104509, 163958 104846, 164043 104979, 164418 104902, 164321 104595, 164220 104404, 163754 104362) (164371 103476, 164497 103574, 164952 103288, 164357 103226) (164030 102190, 164349 102398, 164361 101710) (62343 97288, 62705 97711, 62815 97991, 63011 97994, 62946 97661, 63191 97365, 62735 96934) (63712 97384, 63444 97446, 63704 97768, 63836 97639, 63840 97309) (161996 97262, 161982 97442, 162590 97623, 162361 97115) (62940 96740, 63290 97296, 63423 96919, 63229 96594) (161250 96057, 161332 96219, 161509 96299, 161675 96146, 161399 95965) (161528 92489, 161412 92579, 161881 92672, 161810 92403, 161531 92208) (67036 87741, 67287 87743, 67496 87568, 67116 87236) (157512 86791, 157894 87140, 157806 86746, 157543 86569) (68660 85381, 68873 85485, 68972 85478, 69044 85346, 68962 84984) (157148 84782, 157317 85047, 157841 85054, 157744 84588, 157505 84507) (154475 81612, 154617 81963, 154688 82040, 155046 82077, 155312 81938, 154902 81489, 154793 81079) (148148 74973, 148185 75238, 148290 75288, 148587 75136, 148667 74723, 148333 74586) (84059 69892, 84210 70181, 84431 70204, 84386 70094, 84499 69920, 84353 69654) (139600 69184, 139319 69556, 139738 69340, 139806 69096, 139661 69025) (87096 68038, 87328 67948, 87495 67797, 87062 67638) (88318 67155, 89083 66978, 88634 66696) (96357 64276, 96536 64491, 96761 64482, 96798 64312, 96649 64269) (110797 62370, 110959 62617, 111135 62607, 111268 62228)), ((75815 150408, 75891 150745, 75537 150700, 75397 150390)), ((156372 140873, 156236 141029, 156017 141039, 155807 140986, 155929 140815)), ((71837 79997, 71743 80151, 71603 79971, 71504 80015, 71541 79854, 72177 79688)), ((78017 74627, 77871 74674, 77757 74502, 78127 74251)), ((146743 71850, 146863 71919, 146785 72533, 146546 72150, 146620 71955, 146542 71809)), ((125944 63739, 126212 63938, 125900 64280, 125410 64170, 125556 63785, 125754 63696))) \ No newline at end of file +MULTIPOLYGON (((107638 61798, 107744 62158, 108015 62180, 108062 62230, 108158 62595, 108629 62124, 108298 62134, 108653 62014, 109074 62244, 109253 61956, 109398 62376, 109778 62263, 110656 62109, 110664 62166, 111427 62029, 111455 62046, 111909 62070, 111589 62212, 111811 62557, 112026 62552, 112468 62660, 112801 62720, 113487 62365, 113536 62295, 113672 62301, 113685 62442, 113789 62647, 113875 62653, 114231 62320, 114654 62279, 115076 62173, 115173 62437, 115478 62555, 115710 62416, 115765 62591, 116266 62673, 116360 62845, 116641 62839, 116922 62956, 117235 62822, 117458 63223, 117459 62791, 117998 62730, 117546 62587, 117967 62033, 118261 61840, 118748 61934, 119096 62353, 119359 62691, 119801 62728, 120175 62684, 120280 62944, 120774 62898, 120901 62842, 121043 63014, 121518 63116, 121805 63356, 122041 63450, 122526 63294, 122632 63225, 123064 63424, 123244 63527, 123317 63515, 124068 63678, 124174 63956, 124422 63794, 124995 63832, 125404 64201, 126132 64693, 126089 64441, 126457 64147, 126777 64239, 127418 64478, 128049 64082, 128275 64819, 128762 64965, 128929 64780, 128811 65015, 129252 65023, 130043 64726, 130423 64443, 130492 64314, 130544 64398, 130731 64407, 131153 64554, 131278 64749, 131377 65183, 131928 65221, 132241 65138, 132370 65393, 132667 65433, 132789 65394, 133284 65774, 133424 65732, 133566 65611, 134116 65771, 134053 66534, 134180 66604, 134271 66552, 134167 65762, 134697 65797, 134853 65990, 134596 66599, 134863 66665, 135169 66580, 135312 66469, 135630 66611, 135871 66841, 136072 66764, 136384 66966, 136641 67299, 136703 67429, 136850 67448, 137216 67207, 137434 67416, 137720 67474, 137803 67771, 137931 67972, 138182 67790, 138010 67383, 138471 67543, 138462 67769, 138718 68077, 139093 67699, 139253 67684, 139313 67819, 139270 68249, 139653 68632, 139943 68770, 140305 68715, 140118 68196, 140039 68075, 140343 68073, 140824 68399, 140847 68453, 140689 68774, 141071 69419, 141379 69254, 141750 69433, 141961 69711, 142034 69702, 143056 70297, 143079 70701, 143137 70925, 143207 70998, 143671 70858, 144069 70888, 144063 70756, 144170 70669, 144256 70867, 144197 71122, 143918 71390, 143754 71388, 143741 71894, 143973 71983, 144178 71866, 144287 71644, 144585 71807, 145227 72064, 145344 72079, 145422 72196, 145734 72514, 146087 72750, 146266 73205, 146504 73286, 146903 72997, 147138 73558, 147258 73710, 147374 73949, 147816 74245, 148300 74404, 148262 73694, 148482 73644, 148546 74002, 148808 73791, 148947 73748, 149399 74308, 149320 74843, 149861 75048, 150004 75194, 150297 75228, 150697 75742, 150898 76141, 151018 76209, 151055 76307, 151091 76961, 151179 77070, 151126 77332, 151570 77909, 151580 78020, 151677 78055, 152478 78580, 152696 78890, 153246 78969, 153380 79090, 153611 79598, 153792 79860, 153905 79874, 153936 79591, 154122 79201, 154206 79214, 154328 79854, 154605 79798, 154504 80124, 154638 80595, 154936 80806, 155128 80869, 155269 81264, 155431 81461, 155986 81903, 156258 82619, 156519 82902, 156556 83165, 157009 83410, 157167 83650, 157544 83967, 157864 84528, 158004 84588, 158073 85144, 158021 85262, 158066 85649, 158272 85891, 158599 86346, 158557 86503, 158724 86951, 158727 86979, 158994 87451, 158791 87519, 158896 87858, 159613 88094, 159336 88273, 159649 88589, 159739 88888, 160231 89076, 160204 89377, 160601 89355, 160838 89733, 161221 90494, 161383 90683, 161672 91308, 161571 91396, 161971 91966, 162496 92318, 162462 92594, 162351 92817, 162180 92856, 161919 93082, 162058 93324, 162016 93586, 162077 93918, 161818 93768, 161505 94100, 161903 94483, 162130 94357, 162118 94570, 162029 94651, 161900 95118, 162044 95320, 162237 95693, 162398 96260, 162247 96429, 162428 97079, 162416 97087, 162649 97642, 162676 97681, 162746 98177, 162913 98358, 162884 98734, 162808 98875, 163144 99515, 163166 99796, 163123 100064, 163535 100638, 163830 100958, 163875 101096, 164441 101577, 164657 102608, 164595 102645, 164362 103065, 164983 103275, 165146 103843, 164874 103985, 165021 104245, 165545 104603, 165903 105016, 165782 105809, 165812 105910, 165682 106040, 165320 106161, 165251 107010, 165111 107456, 165237 108118, 165064 108353, 165277 108600, 165182 108913, 165174 109503, 165333 109641, 165308 109854, 165320 110236, 165568 110298, 165474 110446, 165754 111299, 165547 111687, 165981 111636, 165974 111657, 165481 111804, 165584 111929, 165889 112497, 165964 112767, 165945 113418, 166046 114684, 165503 115419, 165817 116075, 165383 116036, 165285 116518, 165742 116536, 165617 116819, 165673 117116, 165822 117431, 165683 117658, 165526 117986, 165568 118331, 165417 118612, 165467 118745, 165151 118758, 164957 118933, 164905 119163, 165368 119289, 165490 119256, 165516 119450, 165484 119467, 165217 120121, 165067 120571, 165157 121003, 165172 121288, 165011 121820, 164765 121800, 164445 121913, 164355 122565, 164523 122609, 164201 122923, 164910 123207, 164748 123566, 165050 124082, 164563 125083, 164392 125386, 164152 125996, 163871 126297, 163547 126535, 163469 126722, 163349 126839, 163017 127240, 162763 127834, 162564 127878, 162590 127731, 162175 127658, 162065 127927, 162342 128096, 162190 128472, 162603 128759, 162611 128912, 162760 129315, 162472 129764, 162485 130421, 162416 130697, 162248 130937, 162311 131118, 162261 132151, 162371 132801, 162325 132903, 162382 133095, 162566 133491, 162586 133703, 162446 133854, 162530 133985, 162238 134286, 161767 134062, 161670 134133, 161712 134452, 160591 134891, 160035 135235, 159899 135389, 159790 135615, 159612 135650, 159146 136137, 158963 136445, 158739 136611, 158161 136703, 157900 137055, 157994 137249, 157778 137593, 158521 137562, 158398 137737, 158264 137783, 157781 138194, 157602 138122, 157415 138501, 157068 138911, 156974 139057, 156760 139345, 156410 139507, 156292 139768, 155917 139738, 155750 139652, 155490 139865, 155149 140040, 155280 140188, 155685 140146, 155753 140218, 155589 140305, 155221 140427, 155160 140620, 155287 141386, 155238 141436, 155052 142258, 154966 142371, 154495 143275, 154456 143369, 154201 143734, 154049 144255, 153871 144409, 153698 144744, 153645 145119, 153283 144989, 152823 145452, 152842 145920, 152754 146154, 152301 146979, 152110 147120, 152044 147501, 151917 147924, 151659 148182, 151360 148687, 151430 149144, 151420 149256, 151372 149220, 150907 149175, 150656 149553, 150614 149805, 150902 150066, 151046 150526, 150329 151460, 150202 151491, 149753 151374, 149417 151668, 149174 152094, 148972 151942, 148562 152188, 148517 152674, 148526 152895, 148418 152955, 148350 153100, 148103 153019, 147353 153203, 147243 153213, 147088 153415, 147014 153879, 146967 153867, 146071 154506, 145993 154466, 145495 154367, 145205 154083, 145100 154068, 144872 153638, 144729 153643, 144741 154034, 144882 154200, 144749 154383, 144397 154504, 144154 154600, 143646 154758, 143366 154743, 143275 155263, 143228 155261, 143174 155353, 142516 155406, 142285 156030, 142168 156078, 142060 156390, 142113 156052, 141577 156346, 141933 156689, 141829 157065, 141794 157330, 141700 157397, 141716 157431, 140903 157507, 140293 157893, 140034 158441, 140068 157709, 140640 157507, 140116 157450, 139847 157552, 139436 158276, 139837 158458, 139336 158461, 138686 158872, 137909 158995, 137861 158740, 137635 158791, 137532 158912, 137450 159332, 137196 159858, 135972 160278, 135835 160233, 135518 160665, 135594 160729, 135517 160742, 135391 160690, 135007 160607, 134864 160622, 134745 160899, 134671 161326, 134448 161485, 134359 161330, 134092 161332, 133701 161441, 133695 161585, 133506 161665, 133254 161563, 132782 161658, 132173 162159, 132000 162484, 131789 162307, 131500 162273, 131201 162404, 130891 162617, 130781 162604, 130708 162672, 130305 162626, 130092 162964, 129726 162769, 129546 162178, 129065 162143, 129020 162183, 128325 162112, 128244 162139, 128097 162067, 128237 162029, 128235 161603, 128399 161569, 128252 161425, 127574 161299, 127228 161617, 127387 161818, 127212 161733, 127046 162124, 126770 162433, 126418 162319, 126131 162762, 125819 162784, 125715 163046, 125310 163312, 125114 163304, 125127 163483, 124763 163835, 124536 163765, 124474 163510, 124167 163601, 124074 163593, 123247 163771, 122981 163958, 122697 164085, 122335 164007, 121863 164241, 121858 164227, 121137 164199, 121067 164467, 120021 164611, 119693 163971, 119739 163581, 119366 163183, 119105 163154, 119020 163401, 119114 163896, 118883 163770, 118631 163914, 118470 163732, 118453 163882, 118177 163847, 118321 164160, 117915 164427, 118067 164735, 117856 164553, 117582 164442, 117481 164518, 117068 164577, 116939 164916, 116709 165055, 116192 165087, 116027 164799, 116062 164641, 116039 164238, 115539 163917, 115085 163960, 115015 163931, 114539 163932, 114354 164048, 114197 164264, 114091 164522, 114280 165180, 113539 164858, 113371 164716, 113113 164784, 112690 164606, 111994 165075, 111490 165262, 111219 165331, 110298 164515, 110557 165316, 110477 165308, 110032 164930, 109991 164995, 109892 164947, 109392 164932, 109305 165141, 109136 165242, 109037 165177, 108134 165011, 107889 165174, 107890 165207, 107535 165027, 107281 164788, 107097 164792, 106984 164860, 106574 164973, 106296 164837, 105829 164535, 105493 164437, 105167 164174, 104876 164084, 104653 164317, 103974 164179, 103578 163873, 103532 164101, 102784 163889, 102609 163627, 102484 163388, 101939 163456, 101877 163716, 101795 163419, 101351 163304, 101293 163693, 101638 163863, 101453 164071, 101246 163822, 100885 163533, 101153 162796, 101934 163113, 102341 163186, 102017 162680, 101132 162568, 100907 162322, 101047 162652, 100880 163530, 100496 163549, 100135 163399, 99760 163287, 99423 163126, 99214 162951, 98920 163149, 98490 163059, 98142 162563, 97901 162928, 97559 162428, 97072 162026, 96310 161931, 96778 162238, 96736 162288, 96671 162241, 96623 162260, 96193 161924, 95762 161666, 95631 161693, 95338 161385, 94738 161327, 94356 161354, 94035 161322, 94213 161133, 93952 160952, 93626 161035, 93167 160833, 92458 160573, 92483 160542, 91980 160109, 91620 160219, 91635 160057, 91176 159840, 91294 159570, 91504 159403, 91193 159130, 90531 159379, 89536 159374, 89282 159293, 89299 159127, 89111 158789, 89120 158769, 88695 158394, 88407 158566, 88150 158607, 87522 158118, 87379 158052, 86752 157585, 86554 157572, 86219 157667, 85893 157358, 85559 157215, 85735 156690, 85727 156510, 85591 156449, 85593 156521, 85081 156933, 85053 156526, 85152 156226, 84432 156133, 84073 156466, 84088 156721, 83864 156586, 83664 156539, 83838 156454, 84155 156068, 83957 155828, 83676 155305, 83334 155100, 82732 154931, 82745 154765, 82658 154885, 82135 154847, 81814 154578, 81757 154250, 81376 154469, 80767 154183, 80818 153959, 80751 153846, 80146 153555, 79859 153068, 79693 152867, 79265 152780, 78962 152586, 78662 152546, 78113 152225, 78048 152007, 77743 151619, 77425 151154, 77646 150887, 77376 150978, 76961 150958, 76693 150973, 76627 150905, 76689 150795, 76621 150181, 76183 149989, 76111 149562, 75871 149735, 75370 150201, 75322 149778, 75193 149701, 74914 149472, 74486 148900, 74513 148800, 74464 148427, 74190 148322, 74076 148230, 73738 148245, 73618 148397, 73659 148164, 73500 147713, 73666 146997, 73648 146658, 73301 146188, 73129 146033, 72780 145897, 72312 146251, 72276 145911, 72056 145754, 71945 145570, 71284 145039, 70815 144606, 70801 144331, 70597 144262, 70424 144117, 70432 143568, 70647 143304, 70680 142891, 70297 142497, 69982 143003, 69855 143086, 69805 143064, 69791 142923, 70270 142480, 69746 142313, 69407 142467, 69113 141754, 68871 141327, 68720 141118, 68511 140871, 68561 140310, 68669 140001, 68576 139702, 68364 139591, 68332 139947, 67868 139424, 67407 139393, 67186 139323, 66959 138724, 66983 138469, 66424 138353, 66486 137934, 66538 137653, 66020 137484, 65843 136947, 65627 136590, 65374 136286, 65343 135432, 65250 135015, 65159 134751, 64778 134435, 64885 134175, 64196 133775, 64179 133680, 64333 133269, 64195 132998, 63970 132896, 63712 132872, 63225 132438, 63375 131948, 63074 131185, 63119 131037, 63074 130981, 62915 130326, 62777 130148, 62721 129550, 62657 129309, 62584 129210, 62057 128796, 62203 128478, 61955 128412, 61929 128235, 62047 127661, 61699 127364, 61684 127190, 61755 127070, 61773 126640, 62035 126030, 62009 125911, 61436 125556, 61432 125520, 61857 125167, 61540 125052, 61054 124897, 61013 124414, 61237 123699, 60717 123715, 60734 123292, 60628 123041, 60716 122373, 60480 121823, 60265 121578, 60217 120990, 60468 120094, 60238 119458, 60004 119090, 59981 118793, 59828 118448, 59823 117850, 59701 117599, 59670 117391, 59759 116940, 59654 116786, 59793 116138, 59588 115572, 59575 115355, 59731 114955, 59857 114376, 59599 113591, 59856 112715, 59776 112139, 59887 111652, 60011 111355, 59808 111014, 59734 110646, 59686 110483, 59827 109878, 59940 109779, 59994 109528, 59940 109297, 59649 109152, 59583 108877, 59915 108894, 60079 108737, 60252 108998, 60478 109100, 60548 108936, 60481 108729, 60268 108467, 60720 108165, 60701 108075, 60857 108020, 61222 107710, 61301 107710, 61218 107408, 60219 106833, 60044 107052, 59763 107001, 60192 106806, 60291 106190, 60565 105774, 60593 105609, 60659 105643, 60655 105497, 60723 105129, 60848 104635, 60874 104340, 61021 104090, 61048 102967, 61091 102932, 61011 102630, 61123 102383, 61004 102171, 60910 101701, 60885 101387, 61199 100818, 61145 100707, 61376 100410, 61494 100173, 61688 100090, 61820 99750, 61972 99564, 61858 99159, 61816 98760, 61950 98612, 62065 98263, 62079 97386, 62111 97085, 62311 96552, 62332 96320, 62505 96335, 62659 95923, 62637 95813, 63041 95281, 63354 95070, 63339 94378, 63390 94042, 63886 93811, 64211 93100, 64312 93017, 64288 92830, 64368 92463, 64531 92378, 64728 91633, 64661 91444, 64750 90969, 64664 90595, 64752 90411, 64803 90087, 64957 90200, 64961 90453, 65257 90882, 65490 90727, 65715 90836, 66168 90639, 66220 90569, 66181 90244, 65966 89980, 65606 89857, 65511 90282, 65388 90350, 65269 89946, 65367 89777, 65311 89403, 65365 89082, 65784 88998, 65968 88879, 65801 88198, 66423 87757, 66470 87783, 66483 87703, 66672 87366, 67092 87078, 67525 86514, 67736 86138, 68038 85312, 68331 85212, 68766 84683, 68658 84425, 69008 84286, 69551 83796, 69773 82646, 69905 82334, 70278 81957, 70394 81760, 70475 81723, 70809 81300, 71241 81463, 71389 81277, 71375 80953, 70861 81223, 71346 80613, 71462 80697, 71682 80604, 71981 80583, 72016 80532, 72447 80372, 72659 80263, 72576 80080, 72447 79614, 72736 79324, 73032 78853, 73318 78735, 73314 78631, 73465 78597, 73725 78275, 73833 78183, 73800 77861, 73687 77683, 73900 77542, 74015 77407, 74281 77286, 74665 77314, 75150 77680, 75233 76974, 75746 76759, 75853 76678, 76135 76806, 76072 76387, 76293 75934, 76542 75750, 76961 75829, 77021 75669, 77140 75787, 77293 75861, 78094 75293, 78260 75090, 78560 74838, 78138 74243, 78580 74003, 79071 73679, 79173 73665, 79896 73332, 80217 73357, 80228 73057, 80593 73050, 80682 72879, 80725 72331, 81188 71782, 81414 71643, 82167 71556, 82415 71469, 82405 71348, 82702 70919, 82725 70678, 83050 70397, 83858 69751, 84248 69190, 84308 69050, 84388 69066, 84411 68405, 84266 68336, 84248 68033, 84547 68005, 84744 67907, 85257 68266, 85370 68279, 86119 68437, 86165 67866, 86320 67645, 86362 67230, 86722 67072, 87027 66667, 87459 66643, 88121 66513, 88125 66307, 88576 66447, 89015 66728, 89248 66285, 89680 65979, 89710 65827, 90025 65647, 90292 65288, 91699 65040, 91843 65174, 91803 65479, 92197 65569, 92568 65917, 92697 65862, 92474 65523, 92616 65436, 92809 65182, 93354 65118, 93778 65542, 93951 65570, 94671 65348, 94694 65251, 94819 65197, 95130 64605, 95165 64605, 95181 64525, 94977 64273, 95382 64182, 95570 64205, 96162 63962, 96461 63772, 96690 63543, 96787 63371, 97676 63653, 97902 63476, 98374 63151, 98461 62855, 98556 62844, 98610 62901, 98658 63205, 99056 63088, 99395 63359, 99804 63559, 100333 63509, 100415 63772, 100805 63361, 101010 62939, 101252 62919, 101611 62855, 102073 62624, 102333 62846, 102565 62800, 103215 62762, 103198 62253, 102993 61820, 102934 61788, 102919 61678, 103019 61612, 103775 61530, 103877 61422, 103926 61511, 104386 61511, 104682 61620, 104751 62166, 105231 62050, 105494 61705, 105716 61970, 105985 62345, 106404 62038, 106632 62045, 107082 62232, 107223 61822, 107320 61394, 107638 61798), (107405 163123, 107658 163399, 107872 163671, 108234 163678, 108544 163668, 108569 163577, 108562 163262, 108410 163315, 108084 163236, 107876 163248, 107574 163068, 107392 163009, 107405 163123), (104025 163306, 104223 163629, 104453 163662, 104530 163378, 104357 163119, 104025 163306), (118332 64249, 117941 64298, 117861 64327, 116702 64337, 116338 64265, 115949 64310, 115152 64290, 114927 64232, 113840 64171, 113565 64190, 113494 64076, 113018 64133, 112030 64137, 111788 64178, 110986 64242, 109716 64235, 109400 64280, 109212 64269, 107898 64604, 106933 64043, 106712 64278, 106557 64475, 106399 64460, 105159 64515, 104534 64856, 103577 64886, 103375 64972, 103091 64974, 102518 65034, 101601 65102, 100399 65081, 100307 65042, 99991 65061, 99430 65219, 99351 65274, 98751 65234, 98501 65229, 97418 65711, 96438 66211, 95855 66285, 95702 66424, 95166 66789, 95003 66784, 93994 67300, 93565 67491, 93450 67561, 93275 67551, 92746 67656, 92677 67642, 92602 67697, 92389 68016, 92034 68146, 91538 68520, 91054 68778, 90543 68507, 90189 68638, 89572 68818, 89431 68894, 89600 69240, 89152 69427, 88704 69395, 88043 69758, 87655 69861, 87129 69892, 86755 69902, 86660 69960, 85555 70291, 85627 70909, 84995 71379, 84372 71916, 84189 72110, 83892 72549, 83540 72778, 83195 72953, 83119 73024, 81636 74220, 81427 74422, 80402 74743, 80336 74845, 80131 75541, 79908 75972, 79451 76296, 79219 76480, 78370 77063, 77598 77965, 77425 78059, 77134 78291, 76996 78386, 76762 78693, 76494 78814, 76366 79273, 75559 80110, 75523 80171, 75071 80725, 74926 80792, 74274 81543, 74046 81739, 73512 82236, 73432 82394, 73287 82441, 73195 83047, 72690 83547, 72675 83599, 72014 84512, 71734 85155, 71464 85491, 71166 85735, 70684 86870, 70468 87225, 69999 87689, 69674 88209, 69360 88868, 69222 89131, 68714 89882, 68209 90916, 67841 91761, 67500 92602, 67136 93381, 66926 93690, 66526 94671, 66412 95158, 66303 95397, 65974 96510, 65766 97083, 65441 97653, 65284 98604, 65214 98882, 65143 99712, 64590 100407, 64500 100809, 64418 101321, 64408 101545, 64072 102139, 63842 102588, 63716 103865, 63684 104077, 63644 104860, 63652 105000, 63568 105413, 63591 105916, 63628 106423, 63570 106622, 63393 107695, 63431 107873, 63516 108445, 63492 108902, 63314 109220, 63445 109770, 63410 110098, 63355 111041, 63337 111208, 63322 111967, 63234 112230, 63222 112796, 63356 113665, 63268 114234, 63233 115222, 63268 115478, 63252 116059, 63179 117013, 63251 117207, 63404 118524, 63430 118819, 63622 119082, 63693 120009, 63900 120454, 63854 120862, 64062 121653, 64175 121995, 64201 122326, 64402 123143, 64545 123670, 64562 123809, 65015 125370, 65101 125609, 65173 126317, 65233 126683, 65422 127154, 65697 127749, 65835 127942, 66039 128414, 65981 128841, 66105 129353, 66362 130142, 66715 130892, 66819 131198, 66966 131728, 67741 133316, 67863 133501, 68490 134853, 68571 135075, 68746 135211, 69075 135718, 69459 136475, 69570 136810, 69745 137069, 69822 137324, 70255 138093, 70518 138490, 70762 138734, 70950 139101, 71035 139601, 72216 140772, 72578 141326, 72855 141789, 73131 142910, 73205 142988, 73201 142906, 73804 142853, 74067 142994, 73804 143344, 74120 143350, 74567 143816, 74944 144274, 75672 145048, 75809 145220, 76382 145873, 76660 146129, 77248 146760, 77838 147367, 77561 147882, 77986 148080, 78110 148405, 78588 148758, 78812 149017, 79004 149291, 79293 149580, 80175 150357, 80996 150861, 81132 150999, 81469 151225, 82383 152190, 82961 152145, 83411 152379, 83602 152383, 83776 152532, 84030 152705, 84332 153022, 84989 153522, 85236 153680, 85811 153977, 86088 154147, 87503 155176, 87941 155484, 88037 155644, 88509 155894, 88649 156026, 88896 156464, 89256 156693, 89976 156860, 90298 156903, 90826 157231, 91428 157487, 92466 157794, 93189 157931, 94452 158517, 94652 158574, 95101 158783, 95323 158911, 96117 159087, 96193 159084, 96735 159292, 97287 159520, 97997 159705, 99238 160198, 99530 160345, 100146 160544, 100454 160282, 100923 160136, 101193 160173, 102820 160613, 103521 161372, 103640 161587, 104564 161534, 105113 161583, 106008 161762, 106274 161772, 106554 161984, 107012 162164, 107372 161803, 107580 161665, 108231 161557, 108698 161681, 109450 162234, 109527 162340, 110191 162230, 110362 162249, 110745 162246, 111519 162512, 111975 162605, 112070 162538, 112267 162685, 112569 162368, 113001 162209, 113297 162148, 113753 162246, 114120 162432, 114284 162624, 115492 162998, 115842 163021, 115936 163094, 115995 163083, 116014 162936, 116562 162232, 116741 162045, 117010 161708, 117549 161399, 117916 161394, 118641 161286, 119454 161150, 120071 161144, 120446 161289, 121097 161718, 122237 161336, 122955 161373, 123198 161502, 123406 161454, 123904 161418, 124372 161282, 124564 161268, 125138 160939, 125848 160412, 127286 160207, 127539 160206, 127987 160160, 128492 160038, 129097 160282, 129479 160041, 129849 159927, 130055 159748, 130325 159620, 130993 159527, 131266 159365, 132113 159153, 132375 159132, 132663 158903, 132893 158953, 133028 158471, 133350 158246, 134054 157389, 134145 157158, 134631 156874, 135563 156265, 135868 156297, 136264 156301, 136527 156485, 136855 156983, 137067 156746, 137396 156838, 137538 156827, 137765 156737, 138488 156186, 138769 156047, 139205 155497, 139329 155768, 139746 155523, 139996 155443, 140685 154981, 140785 154271, 141249 153702, 141374 153163, 141450 153050, 141575 153016, 142406 152562, 142670 152365, 143077 152360, 143404 152460, 144087 152220, 144265 152108, 144932 151865, 145318 151417, 145450 151382, 145672 151218, 146028 151007, 146462 150661, 146538 150476, 146782 150375, 147350 149983, 147657 149637, 148380 148989, 149170 148735, 149406 148492, 149427 148299, 149553 147781, 149546 147627, 149170 147541, 149179 147259, 149621 147344, 149776 147059, 150031 146436, 150062 146160, 150227 145713, 150261 145330, 150362 145027, 150515 144747, 151115 144003, 151850 142957, 152578 141858, 152779 141599, 153416 140855, 153547 140649, 153820 140336, 153833 139718, 153854 139343, 153971 139212, 154216 139230, 154439 139371, 154816 139041, 155069 138562, 155892 137302, 156253 136712, 156316 136456, 156763 135491, 157157 134559, 157716 134034, 158304 133462, 158783 132859, 158935 132748, 159680 132397, 159798 132167, 160053 131875, 160621 131758, 160572 130952, 160533 130837, 160892 130141, 160799 129900, 160781 129657, 160903 129457, 160982 128990, 160987 128625, 161176 128257, 161166 128110, 161557 127571, 161669 127305, 161738 127185, 161887 126263, 161440 125660, 161501 125490, 161901 125130, 161852 124508, 161726 124351, 161996 123695, 161765 122827, 161848 122322, 162041 121681, 162146 120906, 162238 120500, 162328 119792, 162466 119524, 162556 118576, 162558 118218, 162658 118233, 162887 117852, 162861 117560, 162940 117257, 162949 116670, 162815 116087, 162691 115786, 162653 115598, 162949 115117, 162837 114936, 162467 114521, 162421 114072, 162851 113620, 162914 113675, 162895 113588, 163052 113137, 163096 112475, 162816 112337, 162767 111631, 162838 111282, 162788 111154, 162883 110292, 162829 110177, 162773 109418, 162575 108764, 162593 107705, 162642 107502, 162602 106746, 162630 106378, 162654 105255, 162643 104845, 162461 104012, 162598 103620, 162538 103199, 162269 102862, 162168 102299, 161936 102017, 161825 101733, 161994 101331, 161460 100585, 161389 100509, 160987 99974, 160702 99563, 160116 98162, 160078 97301, 160030 97091, 160163 96953, 160030 96835, 160213 96249, 159915 95619, 159709 95519, 159606 95087, 159662 94582, 159780 94567, 159737 94166, 159880 93232, 159554 92811, 159278 92701, 158941 92375, 158735 91583, 158056 90671, 158031 90487, 157694 89655, 157567 89499, 157393 89087, 157390 89026, 157289 88594, 156872 88218, 156632 88097, 156472 87979, 155579 87725, 155415 87548, 155195 86858, 155225 86781, 155151 86730, 154982 85908, 154180 84810, 154167 84709, 153923 84142, 153010 84035, 152679 83755, 152641 83063, 152862 82895, 152628 83030, 152354 82668, 152259 81794, 151577 81214, 151511 81185, 151083 80454, 150987 80241, 150883 80216, 150151 79183, 150120 79110, 149967 78910, 149525 78717, 149453 78432, 149224 78487, 148997 78170, 148806 78022, 148269 77129, 148047 76893, 147812 76854, 147700 76878, 146995 76693, 146742 76644, 146492 76505, 146216 76178, 145992 76002, 145365 75304, 145041 74457, 144978 74075, 144709 74103, 144229 74193, 143949 74147, 143396 74395, 143274 74409, 142661 74114, 142150 73737, 141928 73607, 141257 72838, 141262 72776, 140917 72224, 140786 71965, 140761 71988, 139847 71919, 139375 71573, 139008 71533, 138453 71257, 137972 70699, 137711 70457, 137577 70044, 137637 69671, 137000 68917, 136714 69035, 136514 69048, 136292 68757, 135873 68740, 135567 68510, 135344 68283, 134919 68430, 134676 68453, 134236 68218, 134057 68154, 133281 67841, 132775 67687, 131954 67617, 131716 67520, 131452 67203, 131068 67053, 130761 66919, 130344 66928, 129949 66616, 129054 66515, 128832 66803, 128529 66715, 127661 66437, 126795 66102, 126468 66087, 125917 66030, 125027 65716, 124646 65610, 123784 65289, 123550 65306, 122980 65095, 122571 65075, 121657 64533, 121195 64627, 119556 64070, 119199 64016, 118332 64249), (97747 161636, 98038 161957, 98138 161655, 97891 161358, 97747 161636), (137167 158299, 137516 158370, 137528 158041, 137367 157993, 137167 158299), (164383 121157, 164460 121458, 164643 121522, 164651 121052, 164383 121157), (165315 113634, 165369 114218, 165799 114380, 165940 113417, 165315 113634), (163783 104411, 164070 104509, 163958 104846, 164043 104979, 164418 104902, 164321 104595, 164220 104404, 163754 104362, 163783 104411), (164371 103476, 164497 103574, 164952 103288, 164357 103226, 164371 103476), (164030 102190, 164349 102398, 164361 101710, 164030 102190), (62343 97288, 62705 97711, 62815 97991, 63011 97994, 62946 97661, 63191 97365, 62735 96934, 62343 97288), (63712 97384, 63444 97446, 63704 97768, 63836 97639, 63840 97309, 63712 97384), (161996 97262, 161982 97442, 162590 97623, 162361 97115, 161996 97262), (62940 96740, 63290 97296, 63423 96919, 63229 96594, 62940 96740), (161250 96057, 161332 96219, 161509 96299, 161675 96146, 161399 95965, 161250 96057), (161528 92489, 161412 92579, 161881 92672, 161810 92403, 161531 92208, 161528 92489), (67036 87741, 67287 87743, 67496 87568, 67116 87236, 67036 87741), (157512 86791, 157894 87140, 157806 86746, 157543 86569, 157512 86791), (68660 85381, 68873 85485, 68972 85478, 69044 85346, 68962 84984, 68660 85381), (157148 84782, 157317 85047, 157841 85054, 157744 84588, 157505 84507, 157148 84782), (154475 81612, 154617 81963, 154688 82040, 155046 82077, 155312 81938, 154902 81489, 154793 81079, 154475 81612), (148148 74973, 148185 75238, 148290 75288, 148587 75136, 148667 74723, 148333 74586, 148148 74973), (84059 69892, 84210 70181, 84431 70204, 84386 70094, 84499 69920, 84353 69654, 84059 69892), (139600 69184, 139319 69556, 139738 69340, 139806 69096, 139661 69025, 139600 69184), (87096 68038, 87328 67948, 87495 67797, 87062 67638, 87096 68038), (88318 67155, 89083 66978, 88634 66696, 88318 67155), (96357 64276, 96536 64491, 96761 64482, 96798 64312, 96649 64269, 96357 64276), (110797 62370, 110959 62617, 111135 62607, 111268 62228, 110797 62370)), ((75815 150408, 75891 150745, 75537 150700, 75397 150390, 75815 150408)), ((156372 140873, 156236 141029, 156017 141039, 155807 140986, 155929 140815, 156372 140873)), ((71837 79997, 71743 80151, 71603 79971, 71504 80015, 71541 79854, 72177 79688, 71837 79997)), ((78017 74627, 77871 74674, 77757 74502, 78127 74251, 78017 74627)), ((146743 71850, 146863 71919, 146785 72533, 146546 72150, 146620 71955, 146542 71809, 146743 71850)), ((125944 63739, 126212 63938, 125900 64280, 125410 64170, 125556 63785, 125754 63696, 125944 63739))) \ No newline at end of file diff --git a/stress_benchmark/resources/014.settings b/stress_benchmark/resources/014.settings index 77d3f128f7..9a7e6974a8 100644 --- a/stress_benchmark/resources/014.settings +++ b/stress_benchmark/resources/014.settings @@ -6,7 +6,6 @@ resolution=0 _plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 skin_preshrink=1.2000000000000002 clean_between_layers=False -support_interface_skip_height=0.2 machine_feeder_wheel_diameter=10.0 retraction_hop_only_when_collides=True machine_steps_per_mm_y=50 @@ -44,6 +43,7 @@ cool_min_speed=10 cool_fan_enabled=True cool_fan_speed_max=100 wall_overhang_angle=90 +seam_overhang_angle=30 jerk_support_infill=8 wall_overhang_speed_factor=100 support_roof_line_width=0.4 diff --git a/stress_benchmark/resources/014.wkt b/stress_benchmark/resources/014.wkt index 8ed5068c15..64266927f9 100644 --- a/stress_benchmark/resources/014.wkt +++ b/stress_benchmark/resources/014.wkt @@ -1 +1 @@ -MULTIPOLYGON (((180401 253120, 180770 253328, 180896 254044, 180950 255594, 180939 256385, 180965 257447, 181027 261131, 180999 262268, 181043 264621, 181053 265621, 180959 266394, 180915 267136, 180917 267899, 180885 269921, 180833 270636, 180822 271584, 180687 271860, 180454 271664, 180287 271686, 180232 271793, 180039 271309, 179876 271205, 179793 271061, 179737 271411, 180003 271830, 180043 271711, 180113 272031, 180472 272798, 180776 273320, 180789 273492, 180877 274014, 180761 274625, 180696 275178, 178285 275179, 178395 274311, 178686 273480, 178802 272821, 178885 272446, 178967 271340, 179110 270986, 179202 271276, 179395 271100, 179508 271097, 179586 270941, 179659 271080, 179728 270749, 179664 270546, 179588 270495, 179314 270104, 179004 269444, 178874 268689, 178842 268581, 178587 267454, 178520 267233, 178330 266478, 178117 265699, 178042 265304, 177864 264756, 177673 263988, 177631 263918, 177450 264122, 177446 263482, 177402 263217, 177118 262649, 177153 261776, 177113 261350, 177427 260679, 177543 260189, 177766 260004, 178111 259341, 178186 258677, 178157 258248, 178095 257998, 178021 257333, 177905 256808, 177690 256176, 177595 255795, 177664 255549, 177677 255139, 177455 254508, 177497 254397, 177502 254014, 177623 253544, 177344 253492, 177001 254010, 177108 254823, 177116 255366, 177250 256146, 177469 256730, 177602 257273, 177680 257746, 177620 258001, 177622 258393, 177721 258588, 177878 258335, 177756 258660, 177761 259328, 177495 259815, 177448 259982, 177185 260456, 177057 260654, 176743 261367, 176831 261995, 176937 261799, 176843 262087, 176977 262493, 177020 262803, 177232 263557, 177566 264892, 177634 265261, 177841 266124, 177948 266497, 178025 267262, 178023 268038, 178220 268832, 178454 270557, 178543 271123, 178555 271680, 178466 272184, 178378 272540, 178245 273191, 178177 273439, 178024 274602, 177937 275179, 175161 275179, 175072 275072, 174908 274173, 174714 273290, 174381 272616, 174234 272588, 173997 272447, 173780 272239, 173774 272831, 173992 273174, 174151 273286, 174465 272849, 174247 273520, 174301 273788, 174403 273931, 174579 273719, 174440 274198, 174664 275178, 172846 275179, 172865 273846, 172901 272749, 173051 272549, 173167 272557, 173719 272179, 173502 271725, 173394 271713, 173417 271519, 173166 270882, 173005 270158, 172980 269156, 172980 268299, 172950 268129, 172869 266955, 173554 266273, 173146 265709, 173043 265790, 173080 265615, 172920 264829, 172954 263238, 173064 261698, 173017 260894, 172927 260304, 172881 259667, 172877 258774, 172930 254727, 172963 254554, 172960 254036, 173186 253499, 173819 253445, 174231 253475, 174503 253549, 174778 253704, 174974 254220, 175060 254700, 175178 255218, 175228 255741, 175028 256553, 175013 257058, 174980 257428, 174954 257950, 174961 258036, 174850 259350, 174765 260073, 174775 260816, 174881 261556, 174830 262315, 175308 263779, 175500 264496, 175675 265237, 175706 265944, 175811 266316, 175976 267035, 176065 267367, 176312 268766, 176418 269461, 176469 270178, 176566 270842, 176468 271328, 176563 271518, 176380 271962, 176355 272547, 176432 272178, 176728 271531, 176930 270862, 176996 270177, 176942 269466, 176791 268635, 176657 268032, 176424 267147, 176088 265976, 175886 265331, 175693 265214, 175821 264614, 175640 263734, 175562 262989, 175407 262252, 175200 261520, 175150 261022, 175089 260055, 175038 259698, 175109 259351, 175013 258923, 175196 259164, 175286 258135, 175320 257566, 175298 257251, 175353 256828, 175271 256599, 175393 256615, 175445 256395, 175498 255706, 175459 255176, 175454 254504, 175393 253577, 175648 253330, 176162 253286, 176581 253523, 176964 253903, 177368 253320, 177734 253188, 178337 253134, 178523 253171, 178685 253329, 178775 253691, 178801 254546, 178865 255240, 178966 255468, 179088 256099, 179295 255568, 179365 254747, 179322 254036, 179231 253412, 179336 253192, 179637 253104, 180046 253063) (175991 273453, 175935 274592, 176030 274154, 176152 273474, 176069 273100) (174513 268260, 174573 268260, 174641 268168, 174606 268043, 174543 267495, 174502 267461) (173356 266952, 173422 267327, 173855 267192, 173962 267088, 174066 267084, 174157 266911, 173590 266311) (179435 258004, 179481 258574, 179512 258664, 179363 259483, 179301 259522, 179164 259912, 178895 260523, 178700 261164, 178632 261896, 178649 262712, 178932 263370, 179179 263498, 179455 263371, 179240 262631, 179185 262546, 179051 261822, 179080 261071, 179213 260623, 179217 260473, 179533 259927, 179743 259304, 179889 258648, 179784 257986, 179635 257451) (180103 262636, 180236 262838, 180346 262652, 180361 262426, 180257 262285) (179094 256146, 179375 257647, 179571 257341, 179485 256716, 179311 255736)), ((192410 128152, 192443 129647, 192451 132488, 192594 132474, 192572 130626, 192581 129942, 192578 128942, 192657 128493, 193435 128418, 193984 128420, 194511 128458, 196757 128379, 198201 128396, 198659 128347, 199100 128408, 199897 128452, 200575 128448, 201158 128404, 202011 128379, 202190 128387, 202832 128329, 203208 128368, 203595 128335, 204050 128436, 204879 128287, 206187 128266, 206563 128213, 206912 128270, 207484 128250, 208104 128246, 208521 128339, 208588 128761, 208599 129944, 208635 129492, 208711 129151, 208790 129008, 209227 128726, 209432 128563, 209924 128454, 210534 128416, 210887 128433, 211395 128437, 211700 128498, 212242 128471, 213091 128468, 213408 128515, 214379 128518, 214572 128553, 215166 128454, 215998 128600, 216830 128587, 217466 128428, 218691 128484, 218829 128471, 219338 128476, 219687 128434, 220130 128516, 220952 128525, 221033 128510, 221749 128452, 222479 128452, 223076 128480, 223861 128448, 224423 128603, 224638 128600, 225114 128936, 225270 129119, 226145 129939, 226530 130320, 226653 130418, 227440 131200, 228401 132191, 228534 132427, 228712 132636, 228980 132761, 229481 133302, 229783 133595, 230250 134140, 230354 134206, 231056 134906, 231191 135292, 231148 135601, 231615 135292, 232157 135551, 232520 135938, 232626 136089, 232997 136496, 233273 136770, 233648 137166, 233851 137327, 234359 137890, 234423 137940, 234804 138326, 235248 138726, 235672 139171, 235891 139426, 236228 139659, 236684 140130, 237065 140431, 237393 140885, 238475 141886, 238692 142176, 239200 142607, 239380 142806, 239914 143313, 240529 143955, 240589 144059, 241505 144961, 241646 145187, 242058 145493, 242551 145938, 242936 146331, 243263 146625, 244368 147784, 244667 148326, 244654 148645, 244995 148367, 245894 149270, 246188 149580, 246655 150003, 247145 150486, 247731 151097, 248096 151452, 248483 151859, 249643 152993, 249978 153520, 250108 154140, 250128 158178, 250319 158231, 250424 158343, 250966 158305, 251139 158331, 251683 158603, 251956 158389, 252376 158525, 252834 158468, 252927 158562, 253133 158468, 253657 158397, 254206 158253, 254935 158265, 255427 158326, 256313 158390, 257434 158287, 258107 158325, 259066 158325, 259906 158284, 260766 158296, 261428 158215, 261592 158169, 262454 158165, 263248 158570, 263312 158665, 263440 159107, 263453 159678, 263450 160545, 263405 161735, 263380 162793, 263338 163779, 263354 164910, 263320 165580, 263282 165627, 263180 166119, 263050 166312, 263095 166617, 263049 167185, 263268 167536, 263291 167907, 257174 182673, 257168 185685, 257174 217532, 256904 217498, 256902 219138, 257174 219142, 257174 231170, 256863 231143, 256858 232925, 257174 232823, 257174 275178, 246644 275178, 246447 274181, 246321 273595, 246144 272551, 246065 271817, 245897 270538, 245849 270272, 245950 269348, 246003 268707, 246238 267945, 246483 267201, 247079 265284, 247400 264557, 247777 263745, 247772 263537, 247799 263707, 248111 263115, 248114 262843, 248156 263037, 248376 262617, 248376 261874, 248363 261798, 248035 262423, 247693 263038, 247362 263667, 247081 264320, 246835 264968, 246319 266443, 246155 267060, 245893 267917, 245748 268684, 245642 268862, 245434 269447, 245293 270263, 245337 271021, 245548 271792, 245640 272526, 245744 273086, 245984 274189, 246218 275179, 244435 275179, 244374 274651, 244273 274001, 244245 273255, 244269 272421, 244254 271265, 244224 270942, 244295 270003, 244406 267717, 244447 267079, 244539 266259, 244792 265619, 245251 264908, 245280 264660, 245407 264167, 245440 263967, 245709 262815, 245637 262163, 245650 261775, 245821 260799, 246055 259608, 246155 258787, 246248 258152, 246228 257465, 246296 256783, 246274 256113, 246377 255451, 246201 254977, 246154 255263, 245949 255301, 245528 255170, 245513 254822, 245308 254046, 245188 253717, 245078 253155, 245046 252781, 244960 252189, 244692 249985, 244564 248462, 244538 247567, 244579 247146, 244664 247054, 245066 246940, 245603 246921, 245591 246309, 245533 246174, 245230 246566, 244497 246480, 244347 246328, 244267 245423, 244165 244972, 244187 244428, 244133 245249, 244027 245689, 243929 246227, 243785 246362, 243159 246387, 242895 246296, 242753 246106, 242652 245459, 242609 243888, 242607 242872, 242580 241048, 242576 239765, 242615 237368, 242498 229349, 242500 228464, 242480 226741, 242506 225790, 242586 224526, 242641 223025, 242654 221933, 242648 219036, 242662 217151, 242646 214088, 242705 210897, 242700 208895, 242678 206165, 242639 203402, 242626 200390, 242638 199146, 242610 197892, 242563 196697, 242525 195344, 242517 194183, 242478 192990, 242417 190420, 242397 187920, 242434 187427, 242482 185917, 242578 184128, 242602 183876, 242634 183140, 242650 182318, 242609 181433, 242537 178701, 242477 177249, 242476 174782, 241961 174785, 241953 175694, 241926 176337, 241906 177653, 241909 178593, 241854 179943, 241844 180599, 241953 181918, 241912 182604, 241907 183194, 241877 183894, 241907 185371, 241868 185928, 241795 187666, 241639 188074, 241353 188228, 240589 188239, 240358 187862, 240300 187494, 240297 187803, 240088 188059, 239597 188098, 239353 187904, 239160 188239, 238313 188250, 237976 188131, 237876 187818, 237900 187016, 237689 186988, 237519 187603, 237528 187749, 237311 188249, 236809 188207, 236262 188235, 236161 187816, 236059 186978, 235917 186787, 235930 186317, 235758 185822, 235707 186250, 235829 186862, 235571 188099, 235419 188078, 235194 188201, 234786 188171, 234463 187980, 234249 187540, 234165 187127, 234109 185720, 234114 183040, 234065 181445, 234021 180489, 234060 176553, 234039 175800, 234048 175081, 234019 173962, 234020 173212, 234064 170877, 234139 169927, 234214 168675, 234275 167900, 234297 167153, 234085 165668, 233687 164974, 233638 166365, 233630 167434, 233674 168185, 233733 168747, 233747 169449, 233678 169987, 233674 170133, 233561 170778, 233447 171584, 233436 172973, 233527 174984, 233532 175455, 233595 176493, 233717 177539, 233751 178590, 233812 183152, 233784 184229, 233718 185390, 233700 186493, 233751 188019, 233768 188288, 233781 189008, 233780 189559, 233754 190779, 233745 192596, 233698 193250, 233573 193649, 233518 193990, 233492 194799, 233455 195451, 233427 196478, 233507 197434, 233571 197942, 233617 198718, 233633 200041, 233626 202233, 233592 203457, 233576 204957, 233578 206464, 233523 207639, 233514 208538, 233533 209220, 233634 209877, 233586 210868, 233574 211821, 233547 212474, 233550 213097, 233582 214354, 233476 217213, 233429 217466, 233306 217743, 233094 217919, 232408 217952, 231862 217752, 231421 217817, 231101 217721, 230811 217964, 230373 217979, 229780 217960, 229558 217902, 229493 217835, 229403 217402, 229482 217303, 229490 216468, 229458 216266, 229368 216514, 229261 217115, 229308 217350, 229185 217720, 228997 217986, 228320 218011, 227860 217973, 227756 217303, 227679 217185, 227530 217255, 227102 217570, 226591 217911, 225937 217428, 225708 216545, 225670 214441, 225673 211706, 225635 209836, 225599 208952, 225589 208087, 225605 204975, 225570 203517, 225584 201299, 225574 200124, 225612 196932, 225689 195623, 225781 193717, 225841 192829, 225858 192095, 225797 191405, 225671 190660, 225622 190017, 225595 188988, 225615 188162, 225710 186730, 225741 186420, 225794 185525, 225813 184576, 225782 183386, 225740 182421, 225631 180559, 225513 177500, 225444 176008, 225492 174050, 225566 168640, 225733 167673, 225833 167291, 225827 166627, 225631 165377, 225608 164541, 225582 163986, 225584 163344, 225539 161836, 225582 160497, 225633 158127, 225752 156302, 225733 155632, 225565 154405, 225561 152207, 225590 150576, 224795 149775, 224711 150371, 224256 151138, 224239 151261, 224281 151194, 224416 151487, 224579 151610, 224799 151936, 224792 153471, 224811 156117, 224800 158616, 224744 161961, 224547 163360, 224493 164031, 224509 164671, 224608 165960, 224658 167029, 224692 168247, 224594 168963, 224570 169753, 224344 170506, 224605 171125, 224688 171256, 224737 171574, 224779 172359, 224782 172964, 224724 175850, 224745 176633, 224777 177263, 224795 178342, 224754 181712, 224691 182222, 224382 182539, 223970 182586, 223672 182572, 223475 182411, 223287 182384, 223121 181913, 222944 181222, 222921 180632, 222983 179987, 222944 179287, 222928 179160, 222903 178581, 223010 177873, 223247 177176, 223459 176481, 223628 175773, 223754 175041, 223843 174298, 223829 173977, 223837 172981, 223972 172288, 224127 172025, 224232 171557, 224050 171167, 223824 171712, 223660 172005, 223447 172850, 223481 173509, 223472 173641, 223492 174259, 223178 175557, 222955 176407, 222785 176750, 222640 177424, 222572 177637, 222509 178135, 222488 178540, 222410 179244, 222381 179922, 222432 180561, 222521 181189, 222545 182205, 222448 182430, 221886 182595, 220831 182599, 220701 182566, 220574 182469, 220526 181902, 220321 181305, 220191 181586, 220103 182083, 219958 182499, 219673 182627, 219268 182356, 219092 181880, 219099 181253, 219152 180747, 219166 179635, 219211 179025, 219159 178325, 219196 177700, 219068 176786, 218707 175603, 218522 175126, 218435 174589, 218239 174275, 218151 173993, 218047 173389, 218008 173641, 218029 173808, 217981 174330, 218112 174999, 218429 176364, 218507 176859, 218598 177649, 218615 177728, 218640 178233, 218662 178418, 218691 179539, 218678 179800, 218671 180346, 218604 181203, 218382 181969, 218242 182079, 218156 182267, 218001 182392, 217626 182299, 216968 182012, 216870 181781, 216771 181725, 216726 181266, 216691 180362, 216693 179999, 216654 177370, 216699 174541, 216646 172147, 216559 166166, 216603 164803, 216674 163773, 216717 162823, 216734 161909, 216729 159917, 216744 157655, 216729 155257, 216763 153372, 216781 153168, 216803 152631, 216773 149664, 216867 148838, 217241 148141, 217141 147828, 216917 147404, 216855 147065, 215946 146528, 216035 148472, 216046 149815, 216005 151774, 216062 154229, 216042 155158, 215960 157591, 215917 158179, 215873 158626, 215792 160732, 215487 160955, 215119 161020, 214930 160442, 214829 159937, 214788 159868, 214717 159975, 214602 160884, 214517 160964, 214229 161051, 213586 161046, 213253 160860, 213314 160788, 213348 160461, 213280 159871, 213191 159662, 213383 159471, 213442 159357, 213348 158735, 213271 158533, 213162 158663, 213160 159269, 213040 159734, 213110 160180, 213073 160432, 213108 160503, 212762 161057, 211563 161008, 211146 160859, 211045 160712, 211072 160508, 211006 159563, 211002 159050, 210950 158538, 210891 158277, 210961 157458, 210909 156219, 210759 155771, 210815 155090, 210864 154933, 210773 154558, 210707 153849, 210689 153219, 210760 152627, 210721 152106, 210597 150812, 210475 149054, 210401 147777, 210387 147196, 210329 146929, 210398 146455, 210396 145921, 210368 145424, 210410 144567, 210512 143891, 210482 143170, 210315 142460, 210272 142431, 209996 142484, 209869 143171, 209909 143876, 210095 144833, 210075 146498, 210099 147198, 210138 147449, 210151 148297, 210177 148425, 210189 148954, 210234 149162, 210207 149780, 210276 150885, 210315 152037, 210380 152715, 210446 153159, 210511 154050, 210546 154971, 210600 155441, 210626 156589, 210704 157357, 210669 157518, 210722 157933, 210677 158666, 210601 158868, 210604 159231, 210665 159826, 210634 160752, 210459 160852, 210062 160898, 209065 160776, 208455 160667, 207849 160510, 207787 159837, 207839 158038, 207822 157460, 207767 156542, 207706 154959, 207805 153711, 207812 153134, 207658 151279, 207632 149622, 207649 148992, 207719 148366, 207828 147865, 208031 147116, 208116 146508, 208102 145757, 208104 144541, 207982 143866, 207733 143193, 207652 142528, 207126 142528, 207081 145956, 207012 147181, 206955 148773, 206842 150961, 206869 151792, 206930 152440, 207027 153120, 207077 153801, 207100 155303, 207083 156129, 207007 157672, 206947 158469, 206915 159264, 206897 160039, 206894 160859, 206920 161941, 206925 162607, 206985 164000, 207027 164618, 207081 165673, 207273 171437, 207240 173152, 207159 180144, 206953 181247, 206903 181441, 206878 182101, 206921 182768, 207050 183463, 207103 184130, 207151 185617, 207154 186539, 207195 187978, 207116 191678, 207105 192839, 206967 195345, 207031 196214, 207096 196735, 207147 197409, 207162 199810, 207120 202908, 207114 204678, 207075 205290, 206979 205800, 206456 205948, 206676 206105, 206767 206528, 206831 207114, 206863 208664, 206863 209360, 206879 210399, 206879 211170, 206930 213225, 206957 214926, 206929 216286, 206985 220098, 206915 220769, 206852 221522, 206836 222237, 206843 222970, 206810 224819, 206757 225846, 206745 226798, 206796 227636, 206860 228406, 206851 229243, 206611 230855, 206573 231742, 206567 232507, 206653 234315, 206656 234809, 206692 235704, 206851 237166, 206870 237748, 206923 241217, 206943 243335, 206825 245802, 206828 246410, 206864 247502, 206898 248170, 206907 249269, 206878 250731, 206862 252832, 206787 253242, 206669 253555, 206597 254286, 206571 255458, 206534 256511, 206691 257872, 206760 259072, 206759 262159, 206722 263703, 206708 265244, 206709 266697, 206658 267690, 206644 268981, 206732 269665, 206758 270280, 206717 271077, 206703 272111, 206676 272785, 206713 274883, 206689 275178, 200778 275179, 200788 274640, 200747 274512, 200744 274192, 200572 274125, 200488 274963, 200509 275179, 198843 275179, 198845 271897, 198811 270166, 198756 268769, 198779 265030, 198754 262997, 198761 261728, 198751 261102, 198751 259938, 198795 256481, 198856 255729, 198931 254059, 199018 252678, 199031 251943, 198964 251226, 198843 250512, 198792 249791, 198773 249075, 198780 248229, 198855 246918, 198928 246116, 198970 245182, 198987 244400, 198963 243221, 198790 239950, 198609 235343, 198623 234580, 198660 233480, 198727 228366, 198800 227574, 198997 226793, 198991 226029, 198851 225257, 198795 224576, 198754 223659, 198738 222514, 198705 221644, 198709 220956, 198773 218723, 198786 217774, 198831 216829, 198920 215545, 198889 214829, 198770 213963, 198738 213462, 198721 212253, 198773 208758, 198774 207516, 198826 206788, 199338 206423, 199393 206425, 199248 206277, 199133 205306, 199096 203617, 199096 202218, 199074 201131, 199090 200372, 199040 198312, 199001 195525, 199025 194278, 199010 192825, 198985 191746, 198972 189522, 199067 188431, 199102 187733, 199116 186903, 199106 186317, 199135 184276, 199191 183087, 199223 182094, 199215 181310, 199101 179448, 199116 178549, 199190 177833, 199278 177193, 199357 176417, 199381 175050, 199376 174397, 199312 173183, 199269 171339, 199213 170393, 199121 169473, 199083 168235, 199070 166211, 199041 164973, 199011 161524, 199075 160062, 199123 159231, 199133 158419, 199064 155948, 199081 150808, 199129 150130, 199338 149482, 199409 148818, 199439 146993, 199471 146296, 199428 145598, 199287 144358, 199233 143804, 199198 142997, 199190 142471, 197987 142381, 197973 143321, 197994 145273, 197957 146910, 197955 147413, 197924 147986, 197943 150070, 197892 150737, 197595 151074, 197474 151368, 197731 151905, 197810 152027, 197966 152682, 197967 153701, 197954 154400, 197958 154622, 197915 155329, 197903 155412, 197909 156283, 198039 159371, 198126 160814, 197956 161292, 197763 161129, 197502 161316, 197380 161470, 197881 162110, 198054 162796, 198098 163516, 198118 164579, 198111 165602, 198053 166530, 198005 167051, 197989 167743, 198046 168793, 198058 169212, 198148 171146, 198165 171965, 198161 172709, 198125 173503, 198126 174004, 198105 174661, 198158 176761, 198171 177914, 198072 180939, 197976 182091, 197906 184105, 197785 184452, 197708 184511, 197328 184602, 196833 184576, 196689 184496, 196538 184146, 196380 183296, 196072 180728, 196021 180495, 195928 180561, 195978 180309, 195903 179920, 195905 179718, 195846 179101, 195747 178518, 195597 179131, 195680 179475, 195658 179748, 195714 180342, 195804 180906, 195857 181449, 195972 181789, 195964 181954, 196036 182457, 196144 183440, 196171 184125, 196121 184348, 195976 184541, 196206 184567, 196309 184624, 196313 184717, 196465 184988, 196492 185129, 196623 185274, 197002 184638, 197670 184634, 197919 184724, 198038 184951, 198127 185524, 198159 187024, 198157 187411, 198192 189029, 198157 190303, 198146 191317, 198190 192935, 198264 196789, 198262 197451, 198279 198108, 198264 198952, 198143 200792, 198120 201790, 198110 205340, 198124 207092, 198081 209002, 198082 210397, 198106 212849, 198138 214541, 198136 215847, 198148 216267, 198143 217185, 198179 218509, 198256 219862, 198281 221341, 198318 222395, 198329 222991, 198351 223492, 198368 226035, 198266 227712, 198212 228283, 198166 228642, 198131 229429, 198152 230091, 198191 230779, 198220 231956, 198262 232680, 198290 233739, 198292 234335, 198261 235453, 198250 236759, 198296 238521, 198306 239245, 198290 240144, 198209 242819, 198121 243957, 198038 246213, 197926 246413, 197662 246482, 197819 246479, 197976 246608, 198159 246990, 198235 247688, 198262 248855, 198282 250763, 198276 251220, 198294 252049, 198318 252649, 198356 254840, 198323 256215, 198379 258614, 198374 259744, 198282 260440, 198243 261135, 198241 262307, 198204 264037, 198169 264568, 198146 265461, 198162 266195, 198249 267136, 198269 267690, 198245 267863, 198209 268405, 198096 268996, 197988 269763, 197969 271124, 198050 272537, 198078 273756, 198234 275179, 193720 275179, 193685 274563, 193643 275179, 190079 275178, 190011 273738, 190063 271654, 190116 267968, 190149 266686, 190368 265983, 190412 265318, 190327 264644, 190196 263998, 190175 263173, 190146 262520, 190144 261870, 190113 261139, 190108 260430, 190173 258279, 190197 257074, 190316 255366, 190282 254633, 190175 253918, 190135 253212, 190125 251943, 190178 247902, 190223 247371, 190333 247044, 190639 246921, 191575 246902, 191881 246870, 192882 246810, 192955 246844, 193065 246995, 193146 247319, 193167 247747, 193119 248499, 193101 249583, 193107 249632, 193089 250155, 193128 250347, 193032 250777, 192857 252295, 192804 253033, 192937 253719, 193013 252664, 193046 252009, 193131 251585, 193101 251377, 193237 251042, 193615 248580, 193690 247117, 193651 246998, 193736 246732, 193921 246679, 194752 246670, 195133 246836, 195131 247272, 195177 247788, 194974 247824, 194874 249182, 194931 249582, 194808 249597, 194738 250356, 194654 250836, 194672 250968, 194594 251204, 194477 252034, 194427 252844, 194412 253727, 194438 254301, 194471 255510, 194573 256179, 194658 256866, 194709 257746, 194918 258507, 194912 258918, 194987 259617, 195125 260300, 195261 259610, 195165 259116, 195142 258914, 195033 258222, 195013 257533, 194913 256853, 194901 256191, 194820 255543, 194777 254893, 194759 254205, 194757 252983, 194779 252257, 194850 251485, 194845 250996, 194909 250385, 195027 249948, 195135 248899, 195131 248799, 195262 247887, 195311 247058, 195463 246650, 195523 246590, 195822 246563, 195615 246230, 195591 245812, 195517 245453, 195561 245281, 195445 245126, 195627 245092, 195608 244394, 195537 243896, 195349 244047, 195370 244710, 195524 244915, 195342 244994, 195276 245240, 195416 245878, 195194 246424, 194838 246569, 194320 246552, 193779 246506, 193469 246422, 193324 245962, 193261 245166, 193214 245025, 193245 244938, 193251 244075, 193197 243914, 193185 243344, 193212 242885, 193166 242160, 193116 240365, 193079 239667, 193009 239079, 192913 238448, 193005 237864, 192975 237161, 192821 235432, 192794 235314, 192782 234738, 192711 233573, 192683 232960, 192643 231453, 192633 229783, 192648 229054, 192738 228394, 192756 227614, 192600 226911, 192580 226892, 192487 226332, 192275 226214, 192247 226902, 192101 227636, 192175 228349, 192329 229069, 192318 229368, 192327 231098, 192355 232462, 192430 234133, 192480 234953, 192513 235257, 192547 235895, 192577 236047, 192541 236297, 192577 237196, 192676 238086, 192757 238465, 192769 239111, 192794 239349, 192818 240263, 192834 240354, 192862 240865, 192879 240964, 192870 241673, 192898 243459, 192846 244475, 192912 244875, 192887 245428, 192878 245965, 192722 246352, 192383 246417, 191500 246308, 190689 246164, 190157 246017, 190048 245880, 190020 245729, 190079 243431, 190073 242776, 190032 242249, 189995 241316, 189942 240500, 189963 239848, 190007 239360, 190058 238544, 190038 237850, 189890 236199, 189877 234905, 189886 233768, 189992 232831, 190265 231773, 190361 231110, 190350 230171, 190352 229114, 190277 228427, 190039 227700, 189911 227014, 189893 226231, 189898 225037, 189966 220139, 189886 218314, 189907 217131, 189908 216382, 189882 215438, 189851 213545, 189876 211180, 189912 209435, 189911 208541, 189883 206660, 189894 204532, 189927 202659, 189963 201614, 190113 200721, 190200 199774, 190063 197992, 189974 195938, 189956 194314, 189896 192906, 189960 190449, 189942 189678, 189881 188780, 189905 187594, 189905 186497, 189939 185209, 190142 184731, 190280 184649, 190748 184552, 191548 184532, 192068 184654, 192522 184510, 192831 184499, 192541 184454, 192378 184089, 192294 183352, 192207 182899, 192224 182815, 192049 181297, 191947 181065, 191971 180885, 191853 180305, 191703 179059, 191736 178986, 191771 178325, 191620 176985, 191558 176857, 191562 176203, 191579 176033, 191338 175254, 191081 174646, 190502 173743, 190096 173009, 189938 172175, 189971 171421, 190097 170672, 190296 169948, 190401 169271, 190397 167362, 190349 166727, 190176 166093, 189972 165475, 189924 164820, 189912 163601, 189924 163009, 189921 162394, 189950 160674, 189997 160364, 190137 160265, 190205 160390, 190567 160724, 190641 160685, 190786 161037, 191068 161281, 191170 161220, 191340 161485, 191335 161618, 191579 162195, 191666 162742, 191733 163285, 191730 163403, 191861 164005, 191890 164630, 191911 164721, 191933 165261, 191971 165814, 191988 166604, 192041 167605, 192090 167737, 192067 167851, 192106 168350, 192082 168518, 192103 169462, 192146 169627, 192266 169577, 192227 169883, 192169 169987, 192151 170750, 192217 172036, 192186 172905, 192139 173519, 192144 174311, 192307 175097, 192517 175873, 193058 177609, 193230 178081, 193429 178858, 193527 179423, 193746 180173, 193965 181039, 194186 181972, 194486 183115, 194546 183564, 194522 184140, 194409 184460, 194689 184470, 195091 184602, 195178 184579, 195106 184574, 195012 184485, 194977 183824, 194896 183414, 194742 182505, 194534 181556, 194218 180256, 194031 179341, 193845 178580, 193675 178017, 193626 177765, 193466 177247, 193199 176568, 193037 176316, 192888 176172, 192864 175841, 192760 175333, 192680 175345, 192680 175072, 192579 174535, 192461 173530, 192463 172745, 192487 171993, 192589 171242, 192525 170388, 192446 169859, 192460 169165, 192403 167906, 192413 167824, 192379 166537, 192337 165881, 192316 165232, 192304 165130, 192388 163959, 192325 163389, 192328 163345, 192151 162497, 192004 161526, 191987 160912, 191804 160713, 191482 160056, 191253 159315, 191233 158533, 191235 157850, 191189 157150, 191154 155774, 191002 156126, 190985 156441, 190905 157180, 191153 157787, 190916 157569, 190847 157624, 190906 157896, 191155 158474, 190944 158318, 190927 158589, 190953 159243, 191168 159853, 191349 160639, 191219 160585, 191173 160785, 191015 160600, 190742 160103, 190005 158678, 189887 156181, 189880 154961, 189888 153069, 189867 152481, 189891 150260, 190022 149515, 190335 149065, 189980 148522, 189202 147175, 189113 148121, 188932 148781, 188901 149601, 188854 150377, 189002 151348, 189058 152066, 189074 153401, 189064 154839, 189024 155786, 189011 157981, 188963 158751, 188955 159524, 189075 160259, 189028 160987, 189020 161519, 188984 162406, 189018 163599, 188978 164281, 188919 165745, 188705 166093, 188388 166234, 188032 166259, 187555 166219, 187390 166132, 187214 166104, 186681 166152, 186408 166088, 186163 166273, 185095 166274, 184984 166147, 185041 166059, 184948 165383, 184782 165412, 184779 165944, 184719 166075, 184430 166257, 183688 166321, 183237 166265, 183097 165702, 182982 164978, 183001 164602, 183078 164238, 183121 163646, 183078 162869, 183060 162805, 182962 163237, 182986 163361, 182932 164223, 182975 164614, 182952 164977, 182787 165651, 182560 166249, 181877 166226, 181499 166070, 181204 165482, 181152 165132, 181116 164154, 181107 161326, 181076 160315, 181030 159410, 181039 158201, 181035 157069, 181042 156518, 181037 155941, 181011 155442, 181029 153480, 180690 153967, 179915 154689, 180089 155358, 180144 155503, 180296 156000, 180366 156711, 180368 158506, 180343 160696, 180312 162390, 180305 163625, 180366 164900, 180376 165616, 180348 166488, 180348 167432, 180382 168633, 180406 170177, 180404 171895, 180346 174654, 180379 177365, 180367 179699, 180328 181607, 180298 182535, 180164 183381, 180055 184305, 180100 185163, 180169 185917, 180236 187143, 180286 188741, 180281 189502, 180347 191863, 180299 193912, 180303 194629, 180384 196037, 180330 199485, 180217 199955, 179950 200065, 180198 200062, 180567 200146, 180693 200525, 180751 201077, 180783 202030, 180780 202682, 180807 204260, 180832 204794, 180876 206712, 180837 207736, 180900 210366, 180777 211226, 180749 212002, 180745 212783, 180726 213720, 180710 213873, 180667 215028, 180705 215750, 180783 216485, 180761 217177, 180605 217828, 180497 218495, 180480 219229, 180497 219808, 180564 220710, 180571 221099, 180613 221859, 180728 222566, 180786 223225, 180814 224883, 180834 225524, 180857 227458, 180786 228301, 180735 229231, 180809 230810, 180819 231874, 180808 232495, 180790 232906, 180791 233896, 180715 234652, 180536 235308, 180504 236128, 180457 236900, 180606 237873, 180661 238593, 180677 239931, 180669 241359, 180630 242292, 180615 244507, 180566 245282, 180558 246050, 180678 246785, 180631 247514, 180623 248048, 180588 248920, 180621 250125, 180582 250808, 180522 252272, 180309 252619, 179991 252761, 179635 252786, 179158 252745, 178993 252659, 178819 252631, 178285 252679, 178011 252616, 177765 252799, 177032 252807, 176678 252777, 176587 252672, 176644 252582, 176551 251910, 176385 251939, 176384 252470, 176322 252601, 176034 252784, 175287 252849, 174840 252792, 174701 252228, 174586 251505, 174604 251129, 174681 250766, 174725 250161, 174681 249397, 174663 249331, 174566 249764, 174590 249888, 174536 250750, 174579 251153, 174556 251504, 174391 252178, 174164 252775, 173480 252752, 173102 252597, 172804 252019, 172756 251690, 172715 250338, 172713 248030, 172684 246944, 172634 245798, 172641 242482, 172615 241970, 172613 241330, 172631 240249, 172620 239695, 172662 237268, 172806 235100, 172885 234184, 172882 233397, 172707 232535, 172651 231755, 172645 230968, 172751 229685, 172799 229328, 172847 228591, 172855 227767, 172823 227034, 172778 226450, 172762 226061, 172700 225441, 172495 221653, 172504 220898, 172530 220515, 172602 216618, 172653 215894, 172878 215187, 172822 214447, 172669 213672, 172627 212808, 172621 212118, 172587 211242, 172649 209574, 172677 208441, 172768 207486, 172798 206804, 172689 206149, 172608 205489, 172597 204980, 172644 202288, 172639 201794, 172671 200979, 172965 200420, 174331 200378, 175382 200325, 175521 200415, 175617 200582, 175625 200760, 175706 201026, 175651 201114, 175680 201312, 175634 201381, 175615 201859, 175644 201951, 175614 202218, 175575 203004, 175578 203723, 175516 204000, 175584 204264, 175524 204440, 175605 204348, 175777 203193, 175826 203120, 176113 201556, 176140 200783, 176114 200457, 176167 200338, 176349 200250, 175637 200251, 175226 200103, 174785 200214, 174172 200171, 173994 200115, 173882 200011, 173884 199821, 173793 199248, 173788 198935, 173703 199307, 173501 199811, 173357 200047, 172639 200073, 172378 199984, 172224 199511, 172170 198194, 172137 195413, 172176 193338, 172119 191158, 172054 187393, 172057 186870, 172036 185993, 172073 185078, 172129 184388, 172189 183359, 172216 182302, 172208 181125, 172221 178730, 172210 176775, 172231 175534, 172267 174376, 172262 172921, 172239 170735, 172203 169588, 172202 167958, 172191 166877, 172201 166203, 172196 165276, 171870 165083, 172041 165793, 172041 166608, 171922 168997, 171936 169941, 171995 171091, 172011 171708, 171998 173158, 171981 173723, 171972 176018, 171825 176754, 171734 177109, 171643 179584, 171689 179975, 171855 181765, 171866 183058, 171862 185335, 171827 186629, 171810 189678, 171759 190868, 171749 191761, 171769 192412, 171870 193059, 171818 194159, 171805 195064, 171776 195798, 171807 197028, 171810 197823, 171702 200589, 171527 200988, 171282 201197, 170878 201112, 170748 200943, 170637 200468, 170606 199761, 170485 199097, 170398 198096, 170147 195995, 169904 194659, 169820 193608, 169635 192700, 169572 192675, 169590 192497, 169416 191812, 169039 190460, 168993 189801, 168981 189038, 168917 188423, 168854 187624, 168853 187042, 168820 187023, 168822 186492, 169143 184469, 169187 184283, 169319 182983, 169440 182430, 169546 181748, 169720 181049, 169934 180331, 169947 180341, 170242 179774, 170459 179098, 170473 178728, 170531 178059, 170629 177335, 170692 175832, 170709 174978, 170334 174970, 170275 175821, 170263 176459, 170225 176995, 170189 177750, 170169 178424, 170011 179086, 169760 179791, 169625 179913, 169462 180256, 169324 180680, 169129 181719, 168989 182303, 168917 182962, 169041 183620, 168780 185352, 168621 186326, 168534 186946, 168426 188096, 168426 188457, 168363 189889, 168440 191006, 168354 191179, 168493 191259, 168709 191262, 168923 191370, 169094 191861, 169201 192267, 169347 192002, 169322 192530, 169388 192819, 169412 193204, 169492 193748, 169706 194835, 169749 195559, 169749 195748, 169913 197223, 170057 199026, 170101 199972, 170111 200629, 170066 200942, 169972 201112, 169714 201226, 168814 201260, 168417 201132, 168260 200874, 167976 199777, 167938 199117, 167871 198892, 167622 197336, 167711 196719, 167752 195863, 167595 195409, 167475 195836, 167374 196800, 167409 197085, 167466 197956, 167531 198410, 167499 198792, 167395 199024, 167444 199662, 167576 200877, 167322 201111, 167019 201215, 166812 201161, 166677 201181, 166459 201073, 166248 200713, 166049 199792, 166067 199042, 166053 198382, 165991 197761, 165955 197119, 165941 196452, 165864 195775, 165540 195125, 165502 194406, 165397 192983, 165324 190513, 165510 190234, 165539 190117, 165776 189438, 166055 188777, 166132 188531, 166355 188127, 166303 187540, 166025 188052, 166001 188304, 165927 188243, 165635 188841, 165197 190051, 165169 190202, 165003 190788, 164970 191492, 164871 192237, 164875 192972, 164933 193830, 165055 194599, 165342 196589, 165340 197102, 165401 197852, 165498 198440, 165525 199073, 165600 199599, 165628 200210, 165669 200767, 165548 201172, 165195 201272, 164990 201267, 164744 201171, 164317 200816, 164067 200069, 164024 198788, 164011 197889, 164005 194421, 163923 191739, 163938 190188, 163932 189662, 163953 187624, 164160 186981, 164467 186372, 164836 185756, 164139 185359, 164066 185726, 163925 185226, 163922 183872, 163912 183337, 163958 179676, 164028 178800, 164034 178512, 164120 176909, 164153 176588, 164195 175391, 164176 174909, 163316 174926, 163347 175589, 163251 176906, 163226 177660, 163257 178411, 163403 180144, 163426 182879, 163368 183543, 163252 184293, 163182 184535, 162984 185459, 162923 186130, 162940 187169, 162938 188497, 163009 189112, 163348 190328, 163406 190993, 163423 192639, 163409 194401, 163351 198629, 163364 199217, 163422 200616, 163413 201410, 163386 202455, 163448 205469, 163441 206093, 163454 206384, 163443 208813, 163396 211235, 163429 214580, 163420 216750, 163365 219741, 163265 220691, 163123 221675, 163124 222612, 163174 223208, 163251 224424, 163313 226065, 163329 226757, 163345 228616, 163379 229447, 163395 230381, 163384 231215, 163357 232219, 163347 233536, 163424 234956, 163402 238135, 163386 238987, 163339 239426, 163106 239665, 162760 239789, 161653 239821, 161301 239669, 160832 239834, 160413 239844, 160180 239799, 160128 239450, 159942 238987, 159928 239457, 159861 239701, 159601 239856, 159273 239867, 159266 239927, 159629 239915, 160535 240006, 160938 239974, 161345 240038, 161770 240882, 162085 240125, 162755 240112, 163121 240436, 163188 240752, 163220 241371, 163268 243838, 163280 245271, 163238 247469, 163286 249665, 163366 254762, 163367 256265, 163324 257168, 163244 258416, 163203 259673, 163206 262495, 163190 264186, 163207 266160, 163171 268244, 163154 268504, 163145 269263, 163176 272989, 163191 273326, 163212 275179, 144700 275179, 144712 274792, 144788 274066, 144821 273493, 144971 273125, 145452 272841, 146023 272792, 147449 272773, 152208 272763, 152233 272660, 151428 272736, 150436 272747, 148039 272748, 147465 272740, 147036 272750, 146271 272747, 145483 272728, 144953 272682, 144742 272539, 144487 271888, 144546 271470, 144366 270992, 144415 270197, 144336 269319, 144316 267943, 144346 266960, 144258 266350, 144256 265823, 144206 264601, 144185 264353, 144209 263538, 144167 262793, 144201 262023, 144342 261209, 144491 260157, 144376 258934, 144323 257514, 144357 256882, 144304 256245, 144343 255728, 144280 255041, 144320 254463, 144225 253872, 144297 253309, 144331 252861, 144410 252545, 144579 252398, 144948 252269, 145544 252201, 145280 252167, 145076 252044, 144901 251719, 144993 250786, 145023 250282, 145028 249478, 144887 248646, 144813 247937, 144746 246839, 144655 245970, 144727 245338, 144765 244394, 144719 243225, 144751 241955, 144703 240863, 144749 239931, 144753 239452, 144873 238461, 145101 237975, 145598 237694, 146728 237624, 147335 237620, 148259 237665, 149032 237659, 149379 237631, 150760 237612, 151269 237641, 152331 237735, 152650 237892, 152578 237426, 152018 237410, 151653 237441, 149515 237459, 148965 237433, 147132 237441, 145669 237418, 145208 237316, 144989 236928, 144764 235880, 144811 235012, 144746 234263, 144774 233253, 145006 233150, 145110 233058, 145145 232963, 145194 232160, 144855 231765, 144880 230482, 144899 230226, 144834 229003, 144938 228102, 144856 227504, 144838 225837, 144773 225200, 144792 224635, 144913 224001, 144934 223418, 145065 222888, 145300 222520, 145147 222137, 145097 221641, 145138 221398, 145418 220833, 145251 220111, 145286 219929, 145272 219164, 145495 218163, 145495 217969, 145690 217453, 145328 216644, 145370 215987, 145451 215835, 145372 215699, 145205 214946, 145369 214620, 146051 214564, 146302 214604, 146369 214569, 147387 214580, 148140 214633, 149886 214615, 150346 214704, 150764 214577, 151489 214553, 151493 214270, 150940 214258, 149644 214163, 148337 214234, 147728 214295, 146084 214350, 145501 214350, 145238 214288, 145135 214210, 145023 213887, 145036 213813, 144904 213322, 144849 212450, 144893 211942, 144833 211191, 144866 210552, 144863 209895, 144897 209496, 144867 209022, 144754 208627, 144814 208148, 144828 207584, 144802 206856, 144783 206675, 144753 205673, 144725 205404, 144732 204708, 144761 204416, 144719 203879, 144564 202442, 144609 201648, 144535 200441, 144499 200131, 144494 199487, 144505 199311, 144458 198606, 144557 197874, 144513 197140, 144403 196276, 144470 195060, 144433 194270, 144546 193880, 144564 193258, 144630 192449, 144652 191709, 144613 191304, 144554 190433, 144592 189976, 144587 189361, 144667 188397, 144624 187791, 144595 187560, 144610 186949, 144579 186328, 144631 185986, 144620 185294, 144656 184431, 144678 184255, 144622 183373, 144596 183223, 144504 182183, 144558 181615, 144551 180348, 144660 179762, 144814 179475, 145169 179331, 146039 179297, 145065 179271, 144531 179091, 144407 178927, 144433 177691, 144473 177087, 144453 176806, 144463 176110, 144500 175708, 144519 174628, 144509 174485, 144583 174080, 144550 173417, 144605 172688, 144677 171216, 144669 170950, 144670 169896, 144606 168981, 144454 168276, 144515 167858, 144431 167301, 144478 166037, 144541 165329, 144511 164785, 144530 163830, 144528 163280, 144506 163033, 144514 162422, 144537 161715, 144500 161474, 144517 160325, 144562 160046, 144524 159648, 144631 159280, 144907 158944, 145406 158856, 146707 158822, 147946 158825, 150704 158798, 151042 158785, 152216 158784, 152531 158774, 154217 158779, 155236 158797, 157450 158799, 157489 158547, 157462 157758, 157545 157256, 157540 157003, 157556 156101, 157678 155517, 158121 154939, 158426 154675, 159484 153578, 160022 153054, 160149 152896, 160647 152396, 160994 151837, 161480 151447, 162137 150795, 162499 150550, 162618 150375, 163159 149803, 163258 149667, 163643 149287, 163921 148880, 164078 148762, 164481 148345, 164622 148249, 165028 147716, 165587 147163, 165862 146935, 166385 146451, 166990 145918, 167434 145376, 167940 144884, 168340 144622, 168913 144489, 169160 144497, 169289 144560, 169178 144422, 169131 144264, 170155 143341, 171052 142374, 171511 141958, 172004 141380, 173257 140328, 173472 140044, 173995 139464, 174559 139147, 174750 139134, 175141 139477, 175145 139364, 175575 138849, 176050 138410, 176433 137968, 176845 137616, 177010 137493, 177385 137010, 177829 136529, 178584 135811, 179691 134787, 180110 134382, 180265 134246, 180652 133827, 181157 133346, 181668 132774, 181763 132691, 182239 132223, 182717 131720, 183336 131142, 183690 130735, 184652 129746, 185079 129370, 185646 128839, 186236 128394, 186878 128200, 187900 128249, 188725 128250, 189047 128191, 189338 128211, 189823 128162, 190727 128144, 191524 128170, 192151 128135) (205036 273709, 205010 274271, 204985 274483, 205015 274774, 205136 274932, 205261 274445, 205274 274168, 205175 273289) (247820 270238, 247863 270976, 248052 271684, 248027 272433, 248181 272681, 248248 272679, 248238 271456, 248285 270960, 248275 270373, 248213 270297, 248089 270526, 248004 270222, 247893 270155, 247861 269984) (203773 269999, 203713 270513, 203749 271165, 203815 271517, 203893 271319, 203944 270768, 203950 270268, 203920 269702, 203859 269412) (191635 271452, 191672 270912, 191644 270827) (247895 268052, 247426 268749, 247417 269505, 247544 269787, 247736 269505, 247693 269202, 247745 268766, 248162 268118, 248161 267584) (195319 268434, 195359 268389, 195292 267737) (195409 264465, 195310 265264, 195376 266003, 195353 266513, 195393 266747, 195322 267369, 195504 267474, 195650 265290, 195490 264773, 195437 264436) (194064 265183, 194092 265294, 194114 265233, 194083 264660) (152691 259011, 152712 260009, 152745 260834, 152690 261516, 152724 262290, 152699 263746, 153047 263665, 153026 262962, 152748 262280, 152707 261527, 152808 261253, 152799 261052, 152867 260519, 152883 260094, 152755 259337, 152770 258901, 152711 258436) (191454 262488, 191405 263188, 191441 263533, 191533 263451, 191507 263183, 191502 262430, 191485 262312) (195302 261011, 195365 261293, 195377 261710, 195531 262726, 195598 262076, 195488 260965, 195367 260402) (200531 261940, 200542 262429, 200605 262236, 200586 261856) (247777 258918, 247752 258941, 247447 259614, 247212 260250, 247121 261304, 247161 261637, 247208 261608, 247213 261545, 247484 260933, 247639 259977, 247742 259677, 247920 259441, 248285 258845, 248195 258163) (192699 258837, 192728 259018, 192677 259673, 192639 260469, 192621 261201, 192678 261298, 192786 261065, 192758 260906, 192775 260370, 192772 259671, 192789 259519, 192766 258763) (152745 257572, 152714 258360, 152783 257995, 152825 256945, 152799 256820, 152778 256189) (192515 256106, 192459 256828, 192500 257377, 192584 256830, 192574 256687, 192590 256108, 192581 255706) (196796 252899, 196798 253748, 196838 255063, 196814 255286, 196865 255337, 196967 256917, 196969 256531, 197028 256159, 196976 255967, 196975 255342, 197026 255309, 196990 255066, 197005 254441, 196998 254278, 197017 253757, 197003 253099, 196903 252628) (200886 253409, 200824 254109, 200757 255172, 200733 255873, 200737 256226, 200794 255849, 200913 254730, 200961 253935, 200923 253387) (192629 254726, 192713 255156, 192987 254712, 192928 254213, 192744 254208) (246787 250980, 246821 251449, 246777 251695, 246695 251838, 246507 252692, 246457 252763, 246524 253504, 246381 253840, 246336 254141, 246462 254764, 246399 254792, 246479 254893, 246538 254375, 246669 253782, 246749 253503, 246664 253064, 246712 252881, 246849 252725, 247198 251696, 247095 251375, 247208 251145, 246839 250818) (152779 254035, 152788 253354, 152762 253164) (152537 249747, 152090 250399, 152174 250996, 152621 251765, 152212 252072, 151954 252128, 151169 252199, 152183 252203, 152595 252360, 152679 252567, 152861 251779, 152859 251633, 152980 250927, 153066 250499, 153066 249565, 152789 249450, 152583 249270) (147828 252238, 148142 252248, 148898 252226) (246853 249859, 246813 249993, 246850 250404, 246904 250560, 247249 251097, 247339 250831, 247189 249919, 247135 249786, 246791 249785) (178949 249400, 178888 250214, 178914 250387, 179007 250405, 179020 250221, 179148 249641, 179078 249303) (161245 247644, 161320 248226, 161348 248343, 161357 248231, 161332 247638, 161340 247503, 161269 247325) (177741 247708, 177788 248016, 177871 247793, 177806 246927) (196884 245487, 196879 246314, 196732 246502, 196475 246571, 196234 246576, 196470 246731, 196691 247210, 196826 246759, 197018 246574, 197335 246494, 197232 246427, 197149 246174, 197128 245885, 197025 245866, 196965 245295) (161394 246276, 161461 246563, 161459 246072, 161414 246053) (149054 242941, 149324 243447, 149417 243522, 149540 243510, 149583 243259, 149267 242971, 149121 242920) (176201 240709, 176253 241344, 176336 241615, 176366 241465, 176280 240577, 176202 240214) (195320 240717, 195328 241042, 195454 241364, 195425 240829, 195310 240329, 195317 240242, 195249 240095) (152796 240421, 152744 240917, 152345 241048, 152523 241164, 152577 241260, 152736 241098, 153037 241025, 153008 240492, 152974 240457, 152747 239959) (247326 236433, 247284 237082, 247259 237739, 247284 238567, 247246 239359, 247285 240868, 247349 240863, 247353 236162) (195206 238525, 195304 239021, 195302 239138, 195364 239265, 195336 238952, 195261 238402, 195254 238248, 195166 238022) (244563 235703, 244596 236416, 244438 237024, 244399 237853, 244393 238480, 244447 239121, 244481 238867, 244514 238280, 244503 237869, 244566 237278, 244448 237040, 244632 236607, 244648 236319, 244593 235662) (159948 237680, 159982 237942, 159938 238326, 159999 238691, 160067 238716, 159962 238322, 160061 237977, 159996 237584, 160046 237300, 159936 237120) (202126 237510, 202097 237640, 202203 238333, 202228 237641, 202189 237493) (159960 232550, 159990 233304, 159933 233925, 159920 234523, 159967 235323, 159954 235923, 159978 236439, 160021 236615, 159943 237075, 160109 236830, 160119 235214, 160131 234678, 160106 233665, 160061 233304, 160076 232670, 160042 232155) (174626 236039, 174665 236339, 174709 235883, 174670 235705) (195122 236194, 195104 235803, 195020 235516) (174867 234131, 174826 234502, 174883 234818, 174920 234315, 174993 233799) (194902 233254, 194959 234032, 194964 234370, 195114 234599, 195110 234054, 194977 233503, 195023 232980) (200547 234235, 200588 234521, 200566 233909) (244623 232450, 244678 233094, 244659 233424, 244772 233575, 244779 232785, 244629 232298) (200226 232669, 200254 233503, 200286 233571, 200419 233377, 200321 233209, 200320 232514, 200249 232225) (194858 231416, 194864 231721, 194941 232087, 194931 232411, 195061 232650, 195009 231489, 194997 230977, 194759 230017) (194729 227865, 194791 228546, 194781 228793, 194844 229292, 194947 229670, 194924 229310, 194755 227846, 194639 226573) (204060 225066, 203953 225846, 203876 226534, 204025 227467, 204010 227792, 204130 228345, 204241 226660, 204247 225857, 204102 225142, 204057 224673) (200033 223536, 200048 224065, 200116 223701, 200099 223374) (194475 219745, 194495 220662, 194467 221792, 194496 222933, 194567 221934, 194572 220917, 194546 220717, 194613 220247, 194528 219620) (203725 220115, 203774 220787, 203791 221321, 203825 221565, 203861 222286, 203934 222612, 204062 222140, 203999 221846, 203915 220985, 203878 220783, 203887 220252, 203776 219454) (201298 221541, 201362 221761, 201372 222338, 201415 222430, 201475 222213, 201546 221384, 201472 221267) (174162 219334, 174126 219861, 174239 220399, 174480 220660, 174352 220066, 174225 219396, 174181 219267) (201193 219122, 201168 219514, 201200 220274, 201219 220470, 201362 219511, 201420 218673, 201331 218508, 201144 218358) (203389 217451, 203471 217572, 203424 218122, 203458 218269, 203438 218792, 203486 219300, 203620 218781, 203602 218108, 203568 217854, 203520 216948) (201078 216815, 201097 217629, 201189 216818, 201215 215795) (205557 213368, 205409 213545, 205454 215387, 205594 217406, 205563 215981, 205564 214747, 205591 214111, 205653 213367) (177745 215035, 177806 215615, 177805 216457, 177795 216644, 177837 217182, 177856 217289, 177888 217125, 177959 216442, 177996 215740, 178055 215568, 178122 215013, 178034 214506, 177874 214443) (204629 192513, 204789 192612, 204698 193219, 204734 193435, 204702 193922, 204690 194622, 204616 194850, 204560 195316, 204431 195451, 204294 196007, 204364 196707, 204346 197246, 204353 197399, 204281 198322, 204267 198670, 204210 199233, 204217 199400, 204117 200062, 204067 200580, 203882 202121, 203710 203669, 203637 204884, 203606 205027, 203665 205548, 203580 206130, 203486 206192, 203601 206454, 203604 206621, 203724 207598, 203558 207788, 203521 207896, 203574 208957, 203409 209336, 203330 210102, 203298 210302, 203263 210834, 203206 211147, 203029 212911, 203021 213573, 203066 214188, 203118 214640, 203103 214999, 203155 216125, 203197 216355, 203244 217163, 203460 216770, 203374 216443, 203455 215954, 203390 215424, 203380 214704, 203358 214253, 203364 212436, 203415 211733, 203413 211475, 203458 210841, 203429 210627, 203496 210126, 203683 209329, 203710 208798, 203795 207944, 203866 207445, 203914 206221, 204116 206085, 204419 206039, 204287 205881, 204189 205314, 204186 204456, 204212 203960, 204234 203212, 204231 203023, 204251 202496, 204259 201860, 204295 201234, 204468 199271, 204480 198975, 204529 198277, 204518 198097, 204618 197397, 204670 196723, 204724 195779, 204719 195157, 204732 194519, 204841 193926, 204892 193228, 204818 192278) (201332 213488, 201216 214893, 201249 215252, 201418 215112, 201576 214854, 201581 214772, 201362 214145, 201381 213568, 201373 213489, 201393 212892) (231855 213838, 232042 214241, 232111 214015, 232014 213356, 232010 213097, 231947 213039) (173883 212862, 173949 213705, 173969 213807, 173983 213705, 173979 213057, 173901 212139) (177959 211937, 178042 212199, 178052 212024, 177984 211672) (201697 186599, 201810 187800, 201930 188294, 202005 188835, 202001 189527, 202165 190777, 202230 191137, 202268 192156, 202397 193290, 202394 193956, 202444 194359, 202483 194858, 202522 195589, 202532 196243, 202553 196736, 202545 198545, 202514 199297, 202542 199510, 202457 200022, 202408 201040, 202492 201511, 202376 201316, 202332 201718, 202405 202044, 202292 201923, 202263 202005, 202169 203287, 202266 203573, 202110 203588, 202229 204020, 202062 204020, 202187 204431, 202066 204518, 201988 205600, 202004 206023, 201921 206286, 201597 206394, 201690 206568, 201747 206850, 201764 207274, 201728 207962, 201660 210734, 201562 211477, 201685 211631, 201636 211846, 201741 211683, 201810 211204, 201859 210593, 202006 209355, 202220 208074, 202220 207725, 202265 206955, 202202 206795, 202231 206473, 202349 206212, 202398 206191, 202237 205691, 202365 205386, 202335 205033, 202117 204646, 202354 204830, 202444 204830, 202292 204453, 202378 204439, 202358 204097, 202398 204095, 202425 203787, 202388 203665, 202439 203644, 202602 201566, 202681 201162, 202733 200585, 202773 200395, 202824 199646, 202855 199392, 202885 198580, 202910 198160, 202908 196684, 202893 196245, 202887 195342, 202871 194840, 202715 193253, 202644 192276, 202529 191475, 202346 189463, 202271 189340, 202296 189114, 202153 188464, 202170 188121, 202097 187502, 202032 186823, 201848 186256, 201798 185521, 201758 185236) (175123 211263, 175213 211653, 175328 211270, 175250 210420) (191878 211554, 191958 211491, 191994 211024, 191880 210838) (230714 210796, 230767 211008, 230781 210505) (176990 204502, 176940 205311, 176947 205408, 176925 206477, 177046 207636, 177156 208109, 177241 208800, 177365 209592, 177480 210448, 177595 210814, 177673 210355, 177497 209586, 177401 209085, 177438 208829, 177244 208104, 177341 207506, 177263 206697, 177242 205648, 177247 205043, 177116 204391, 177252 204261, 177056 204066) (161338 208376, 161504 209268, 161292 209950, 161264 210277, 161337 210319, 161347 210115, 161538 209315, 161508 208543, 161381 208109) (230550 209397, 230559 210069, 230622 209388, 230587 209221) (232369 207814, 232334 208618, 232362 208794, 232389 208618, 232377 207931, 232537 207237) (174980 208087, 175013 208695, 175121 208086, 175097 207710) (179328 205404, 179344 206018, 179391 206519, 179395 206664, 179447 207196, 179455 207554, 179574 207753, 179599 207342, 179560 206667, 179544 206184, 179480 205277, 179401 205080) (175206 205931, 175141 206823, 175164 206895, 175287 206705, 175239 206559, 175301 205791, 175297 205180) (205643 205960, 204785 206043, 204991 206128, 205270 206463, 205343 206846, 205426 206352, 205656 205998, 206181 205952) (200443 205602, 200445 206148, 200346 206395, 201033 206344, 200857 206173, 200655 205888, 200528 205498) (177337 202292, 177391 202631, 177236 203159, 177172 203730, 177301 204178, 177353 203506, 177277 203232, 177455 202995, 177539 202335, 177488 202039, 177548 201787, 177451 201590) (177624 200894, 177540 201156, 177746 201129, 177770 200710) (176853 200021, 176561 200223, 177253 200212, 177529 200413, 177781 200372, 178070 200150, 178446 200118, 178358 200051, 178155 200031, 178051 200123, 177708 200223, 177279 200225, 177030 200080, 176872 199767) (178907 200202, 179009 200307, 179076 200257, 179374 200244, 179472 200191) (200171 193180, 200213 193482, 200195 194026, 200211 194285, 200228 195005, 200246 195284, 200261 195987, 200356 196947, 200376 197546, 200456 198481, 200543 198705, 200572 198651, 200565 197975, 200488 196318, 200483 195517, 200460 195296, 200430 194445, 200413 193539, 200358 193363, 200275 192835, 200286 192697, 200221 192522) (176812 193659, 176864 194592, 176874 195613, 176971 196715, 176976 196864, 177057 197569, 177069 196930, 177064 196659, 177091 195390, 177042 194852, 176988 193663, 176868 192934) (246067 195478, 246190 196451, 246274 196027, 246253 195475) (167917 193899, 168024 194534, 167787 194513, 167760 195004, 167683 195209, 167859 195517, 168054 194591, 168043 194055, 168057 193916, 167970 193470) (246011 189379, 246017 189859, 245967 190238, 245989 192001, 246038 191929, 246004 192086, 246046 192488, 245999 192743, 245981 193861, 246049 193860, 245999 194065, 246030 194462, 245982 194731, 246050 195333, 246244 194702, 246276 194018, 246283 193352, 246210 189725, 246209 189186, 246168 188699) (173983 193717, 173987 194337, 173974 194534, 174022 194738, 174084 194311, 174110 193810, 174145 193393, 174090 192595) (227777 193488, 227762 193676, 227823 193903, 227873 193403) (191669 192716, 191517 193694, 191608 193873, 191769 193456, 191786 192603, 191744 192556) (168097 192552, 168134 193105, 168062 193237, 168188 193392, 168207 193254, 168118 192399) (160322 177695, 160281 178342, 160303 178887, 160456 180921, 160578 183057, 160643 184726, 160680 188122, 160621 188822, 160569 189240, 160539 189870, 160671 190500, 160782 191143, 160870 192031, 160918 193203, 160974 193114, 160964 193021, 161028 192444, 161029 192171, 161098 191577, 161120 191124, 161248 189994, 161273 189851, 161053 188224, 161040 185390, 160923 182027, 160880 181298, 160793 179031, 160712 178071, 160660 177692, 160655 177221, 160609 176351, 160255 176336) (204546 190576, 204557 191442, 204583 191810, 204605 192495, 204816 191680, 204779 190232, 204761 189896) (168227 191871, 168307 192046, 168332 191877, 168278 191366) (193242 189697, 193301 190202, 193304 190998, 193381 191689, 193421 190835, 193353 190273, 193352 189703, 193368 189478, 193316 189140, 193354 188849, 193214 188735) (204412 186998, 204392 187709, 204616 187819, 204515 188361, 204546 188582, 204536 189624, 204615 189031, 204623 188913, 204711 188347, 204709 187667, 204686 187532, 204402 187664, 204450 186995, 204427 186894) (152945 188667, 153137 188664, 153138 188236, 152929 188115) (193344 187964, 193330 188083, 193420 188317, 193366 187678, 193368 187414, 193267 187155) (248032 178717, 248068 182641, 248043 183307, 247931 184522, 247948 185177, 248109 185974, 248169 186978, 248258 187785, 248276 188309, 248320 187663, 248258 187013, 248364 186325, 248387 185607, 248313 184914, 248298 183805, 248266 183433, 248314 183077, 248312 182380, 248283 181944, 248321 181262, 248372 181020, 248359 180124, 248375 179914, 248267 179322, 248303 178877, 248202 177880, 248246 177403, 248255 176508, 247968 176503) (166399 187422, 166368 188107, 166676 187490, 166678 186793) (245582 176486, 245651 177190, 245711 178724, 245675 179822, 245729 181530, 245810 183302, 245876 184141, 245980 186304, 245998 187839, 246061 187255, 246082 186650, 246007 185171, 246006 184920, 245957 184264, 246006 183220, 245974 182608, 245935 182229, 245958 180969, 245920 179906, 245871 177794, 245810 176481) (238998 187574, 239100 187565, 239199 187404, 239068 186936) (167197 184511, 167136 185099, 167026 185765, 166903 186666, 166691 186784, 166808 187211, 166974 186850, 167051 186563, 167234 186150, 167399 185539, 167452 184862, 167426 184401, 167327 184231) (205785 184863, 205830 186461, 205873 187081, 205918 187081, 205899 186932, 205961 186463, 205950 186069, 205967 185548, 205956 184687, 205901 184369) (240213 184281, 240226 184468, 240173 184992, 240203 185477, 240320 186232, 240310 186336, 240434 186647, 240443 186415, 240323 185477, 240460 185286, 240580 185277, 240546 184990, 240421 184466, 240457 183919) (237962 185970, 237970 185728, 237942 185445) (239141 185577, 239184 185719, 239180 185599, 239111 185088, 239080 184946) (168656 175857, 168541 176320, 168514 176614, 168322 177042, 168013 178161, 167993 178403, 167854 178746, 167636 179511, 167603 179713, 167442 180155, 167439 180272, 167414 180221, 167212 180790, 167174 181046, 167034 181263, 166883 181694, 166596 182303, 166434 182582, 166333 182961, 166234 183021, 165831 183918, 165797 184112, 165766 184059, 165522 184538, 165548 185099, 165456 184911, 165392 184987, 165317 184901, 165215 184932, 165153 185159, 165214 185536, 165445 185428, 165615 185223, 165661 184996, 165715 184968, 165903 184450, 166096 184132, 166440 183371, 166448 182827, 166549 183122, 166624 183044, 166736 182748, 166715 182112, 166814 182569, 167014 182115, 167014 181652, 167100 181929, 167313 181489, 167330 181334, 167393 181269, 167586 180656, 167805 180049, 168198 178657, 168646 176968, 168744 176350, 168809 175806) (235958 184195, 236025 184822, 236072 184841, 236007 184193, 235982 184130) (200200 183488, 200221 184186, 200256 184468, 200284 184187, 200285 183440, 200248 182728, 200214 182292) (203055 183103, 203137 183828, 203247 182992, 203191 182226) (258533 170918, 258025 171330, 257788 171452, 257414 171507, 256839 170956, 256603 170919, 256473 170770, 256332 171086, 256204 171849, 255715 171684, 255670 172206, 255653 172793, 255618 172847, 255658 173119, 255583 173732, 255475 174054, 255295 174277, 254850 174558, 254780 174663, 254969 174779, 255067 174947, 255236 175551, 255295 176183, 255343 176384, 255303 176971, 255432 177401, 255425 177902, 255510 178385, 255388 178802, 255464 179162, 255470 179407, 255560 179798, 255526 179989, 255543 180351, 255431 180723, 255455 181322, 255385 181681, 255403 182070, 255117 182498, 255109 182618, 255361 182749, 255601 182955, 255757 183221, 255790 183615, 256079 183112, 256258 182590, 256586 181933, 256790 181621, 256997 180892, 257317 180079, 257886 178809, 258777 177069, 259277 175973, 259656 175502, 259236 175306, 259070 175286, 258869 174878, 258701 174277, 258968 174208, 259157 174066, 259271 173487, 259444 173474, 259634 173272, 259681 173150, 259486 173050, 259656 172717, 259608 172244, 259478 171605, 259052 171337, 258519 171708, 258832 171267, 258915 171018, 258660 170768) (201861 177762, 201867 178156, 201835 178686, 201833 178882, 201794 179385, 201651 182144, 201669 182837, 201740 183339, 201890 182844, 201986 182649, 202070 182154, 202068 181295, 201938 180771, 201967 180080, 201949 179726, 201975 178819, 201973 177982, 201927 177659) (238931 181210, 238902 181830, 239014 182746, 239133 183246, 239189 182970, 239193 182225, 239114 181437, 238996 181006) (205659 182818, 205678 183225, 205700 182816, 205710 182108, 205688 182073) (240796 179333, 240742 180040, 240759 180509, 240717 180734, 240816 180934, 240854 180860, 240908 180041, 240900 179524, 240942 179011, 240858 178840) (177399 179315, 177377 179795, 177502 180666, 177523 180577, 177589 179765, 177580 179330, 177490 179103) (222126 170842, 221864 171589, 221631 171917, 221550 172352, 221573 172952, 221458 172458, 221306 172540, 221165 173188, 221037 173490, 220858 174300, 220584 175435, 220495 175930, 220421 176737, 220392 177698, 220459 178429, 220579 179130, 220803 179481, 220888 179446, 220945 179031, 220969 177724, 221068 176226, 221093 176086, 221145 175469, 221278 174561, 221424 173765, 221580 173322, 221848 172424, 222158 171683, 222389 171017, 222409 170981, 222583 170184, 222569 170074) (146545 179301, 147300 179320, 148040 179387, 149250 179445, 150186 179400, 150829 179335, 152323 179294) (193894 158758, 194101 159394, 194125 160080, 194232 160696, 194422 161415, 194543 162007, 194647 162635, 194684 163761, 194834 164468, 194859 165026, 194780 166345, 194786 166496, 194674 167512, 194554 169229, 194468 170111, 194419 171120, 194345 171770, 194333 172468, 194319 172646, 194358 173428, 194491 174210, 194850 175751, 195009 176484, 195203 177022, 195306 176877, 195290 177339, 195406 178197, 195536 179026, 195734 178444, 195601 177833, 195535 177163, 195442 176462, 195357 176131, 195234 175979, 195235 175739, 195184 175189, 195184 174192, 195167 174025, 195233 173803, 195382 172640, 195504 171887, 195679 171147, 195630 170616, 195848 170517, 195932 169967, 196126 169095, 196397 168346, 196470 167670, 196331 167448, 196265 167488, 196243 167651, 196303 168233, 196079 168038, 195967 168297, 195957 168611, 196037 169002, 195838 169377, 195741 169689, 195820 170368, 195560 170270, 195502 170434, 195446 171136, 195255 171468, 195111 171867, 195017 172529, 195073 172914, 194937 172681, 194753 172629, 194630 171867, 194630 171524, 194571 171116, 194623 170297, 194756 168962, 194777 168624, 194869 168001, 194925 167316, 195097 166768, 195202 166255, 195260 165024, 195216 164441, 195274 163821, 195240 163319, 195152 162771, 195010 161757, 194830 160639, 194641 159993, 194554 159613, 194441 159384, 194218 158784, 194125 159258, 194167 158676, 194032 158467, 193954 158104) (166078 177081, 165946 177692, 165681 177884, 165377 178407, 165384 178732, 165532 178813, 165874 178488, 166090 177880, 166175 177499, 166316 177266, 166160 177007) (164890 176516, 164768 177123, 165082 177518, 165165 177124, 165193 176268) (166807 174942, 166956 175417, 166714 175959, 166809 176042, 166649 176136, 166468 176642, 166470 177036, 166648 176672, 166980 176109, 167272 175438, 167085 174939) (235715 175711, 235729 175444, 235683 175206) (227303 174676, 227619 175674, 227654 175678, 227649 175564, 227320 174674, 227325 174481) (168707 175489, 168839 175586, 168854 175667, 168945 175529, 169157 174991, 168729 174976) (205286 171819, 205320 171880, 205271 172498, 205313 172735, 205373 173344, 205382 173868, 205474 174524, 205753 174620, 205666 173866, 205550 173522, 205465 172990, 205456 172494, 205345 171756) (178350 172158, 178242 172939, 178249 173688, 178208 174287, 178412 173869, 178279 172969, 178480 172706, 178487 172046, 178377 171628) (237360 173322, 237505 173849, 237453 173155, 237302 172512) (227078 173082, 227107 173181, 227176 172962, 227160 172650) (217503 169812, 217635 171074, 217845 170628, 217774 169808, 217664 169389, 217545 169375) (219779 163326, 219640 163961, 219537 164592, 219285 165202, 218969 165841, 219017 166492, 219222 167783, 219487 168474, 219692 168836, 219784 169088, 219855 169487, 219882 170099, 220301 170549, 220462 170622, 220535 170597, 220829 170670, 221236 170448, 221336 169889, 221498 170039, 221654 169829, 222183 168514, 222235 167581, 222189 167237, 222198 166618, 222249 165872, 222345 165544, 222350 165379, 222037 164844, 221561 164634, 221518 165196, 221813 165589, 221999 166064, 222073 166531, 222055 167085, 221824 167044, 221775 167101, 221777 167200, 221670 167434, 221610 168087, 221720 168135, 221963 168039, 221899 168447, 221757 169076, 221577 169608, 221347 169394, 221306 169481, 220901 169568, 220485 169265, 220394 168998, 220252 168767, 220174 168538, 220012 168298, 219988 168322, 219704 167337, 219641 166826, 219476 166491, 219522 165863, 219731 165675, 219900 164901, 219947 164332, 220045 163681, 220111 163400, 220013 162958) (235937 169403, 235965 170155, 235951 170303, 236003 170610, 236061 169829, 236112 169590, 235998 169206) (203458 167700, 203481 167968, 203501 168683, 203572 169057, 203674 169725, 203676 169945, 203781 170386, 203785 169063, 203909 168389, 203845 168001, 203763 167879, 203731 167696, 203546 167351) (230683 167098, 230778 167914, 230760 168585, 230882 169752, 230904 169394, 230928 168593, 230966 168195, 230925 167920, 231063 167254, 231089 166580, 231060 166387, 230817 166263) (218495 160812, 218265 161492, 218154 162217, 218059 162440, 217706 163556, 217593 164302, 217443 164995, 217396 166403, 217422 167185, 217394 167740, 217425 168705, 217527 169030, 217617 168835, 217714 168819, 217824 166297, 217870 165604, 217937 165075, 218096 164236, 218163 163806, 218338 162981, 218439 162273, 218624 161575, 218833 160879, 218765 160110) (236086 168476, 236223 169027, 236253 168386, 236305 168094, 236154 167736) (236264 166544, 236291 167308, 236367 167670, 236429 166934, 236298 166513, 236294 166388) (223076 162100, 223021 162782, 223037 163429, 223197 164063, 223257 164516, 223436 164774, 223415 166053, 223502 166137, 223517 166305, 223539 166070, 223464 163658, 223421 163480, 223440 163398, 223336 162171, 223262 161484) (232541 165988, 232596 166130, 232622 166057, 232564 165363) (220949 164694, 220789 164670, 220612 164790, 220521 165025, 220539 165374, 220937 165327, 221176 165443, 221356 165234, 221330 164566) (226865 164644, 226900 164841, 226953 164611, 226930 163888) (187346 162874, 187285 163687, 187311 163860, 187404 163878, 187417 163694, 187544 163114, 187474 162776) (230212 158456, 230241 158757, 230346 159318, 230338 159844, 230372 160030, 230438 160750, 230636 161195, 230681 161668, 230750 161914, 230710 162529, 230738 162738, 230789 163301, 230865 163423, 230889 163195, 230823 163077, 230900 162525, 230781 161858, 230771 161283, 230721 160870, 230547 160522, 230606 160310, 230481 159816, 230414 158991, 230414 158446, 230348 157875, 230114 157761) (228120 161635, 228100 161942, 228153 162740, 228201 162848, 228270 162606, 228271 162450, 228319 161932, 228233 161435) (223104 155174, 223034 155481, 222955 155977, 222908 156554, 222903 156791, 222756 157603, 222817 158173, 222864 158406, 222806 158803, 222702 159970, 222766 160712, 222894 161423, 222914 161681, 222986 161888, 223247 161352, 223199 160674, 223104 159936, 222996 159541, 223093 158709, 223108 158408, 223166 157909, 223248 157615, 223225 157050, 223177 156808, 223227 155977, 223187 155358, 223251 154814, 223143 154483) (186137 161181, 186185 161489, 186265 161271, 186212 160434, 186203 160400) (219212 148112, 219056 148171, 219158 148838, 219252 149594, 219421 150333, 219451 150537, 219614 151079, 219667 151837, 219962 152602, 220111 153272, 220143 153369, 220155 153990, 220109 154725, 220126 154915, 220007 155462, 219990 155682, 219883 155920, 219612 157178, 219603 157715, 219429 157685, 219231 158673, 219016 159400, 218965 159988, 218786 160102, 218911 160536, 219005 160168, 219056 159628, 219260 159303, 219659 157982, 219843 157218, 219855 156857, 220004 156550, 220213 155712, 220540 154609, 220637 154132, 220606 153351, 220490 152509, 220318 151816, 220131 150250, 220117 149806, 219986 149559, 219808 149909, 219697 149816, 219614 149818, 219496 150119, 219509 149546, 219295 148816, 219280 148517, 219352 147926) (196058 158301, 196022 158995, 196055 159659, 196253 160095, 196326 159612, 196509 158900, 196426 158246, 196273 157655) (228030 157793, 227963 158221, 227995 158497, 227984 159128, 227992 159503, 228091 158663, 228085 158498, 228116 157879, 228101 157687) (193677 158129, 193789 158467, 193915 158060, 193705 157826) (200929 156442, 200968 157300, 200986 158241, 201019 158442, 201037 158139, 201020 157423, 201055 156501, 200971 156105) (177708 156818, 177792 157399, 177839 158097, 177874 158333, 177971 157741, 177946 157403, 178087 156465) (195386 151562, 195343 152115, 195387 152268, 195499 152813, 195532 153308, 195663 154129, 195671 154648, 195722 155010, 195781 155665, 195880 156264, 196004 156014, 195902 156399, 195979 156975, 196042 157905, 196157 157620, 196246 157505, 196136 156956, 196173 156285, 196209 156006, 196191 155619, 196066 155206, 196130 154957, 196085 154499, 196007 154348, 195735 154968, 195952 154295, 195905 153904, 195973 153598, 196009 152885, 195905 152259, 195860 152303, 195889 152185, 195712 151694, 195558 151952, 195677 151509, 195568 150836) (229914 156253, 230112 157752, 230305 157636, 230283 157048, 230314 156980, 230190 156078, 230207 155189, 229881 154868) (221501 156486, 221473 156776, 221533 157258, 221633 156637, 221573 156277) (213110 156703, 213168 157031, 213154 156629, 213098 156060, 213104 155937, 213022 155323) (193971 153598, 193901 153875, 193909 154041, 193898 154576, 193909 155438, 194030 155754, 194108 155741, 194081 155931, 194319 156763, 194456 156542, 194501 155854, 194475 155364, 194421 155188, 194274 154511, 194115 153850, 194133 153465) (218434 155483, 218444 155599, 218351 156207, 218353 156510, 218397 156333, 218487 155433) (228164 155664, 228272 155927, 228389 155674, 228365 155114, 228144 155044) (190963 154745, 190977 154955, 191154 155612, 191153 154950, 191125 154659, 191017 154600) (184597 154183, 184649 154817, 184733 155088, 184763 154938, 184676 154051, 184598 153689) (192213 153409, 192307 154141, 192561 154792, 192624 154390, 192560 153772, 192436 153133, 192282 152921) (228154 154701, 228263 154148, 228431 153416, 228296 153280) (218220 153687, 218304 154615, 218424 154134, 218369 153474) (223373 152823, 223288 153557, 223168 154280, 223381 154023, 223432 153565, 223615 152702) (218111 152662, 218167 153135, 218269 152674, 218273 152443, 218206 152352) (204852 149584, 204828 150158, 204792 150655, 204774 151383, 204817 151740, 204799 151992, 204882 152395, 204987 150616, 204937 149875, 204959 149705, 204879 149236) (191697 151159, 191764 151476, 191807 151160, 191734 150929) (197142 150685, 197357 151127, 197295 150551) (194175 147495, 194379 148265, 194486 148948, 194589 149698, 194628 150295, 194656 150463, 194678 150289, 194906 149978, 195050 149985, 195158 149890, 195272 150176, 195332 150974, 195511 150834, 195372 150787, 195465 150139, 195444 149915, 195270 149470, 194921 147859, 194646 147410, 194613 147224) (212526 145417, 212571 146128, 212608 147073, 212644 147679, 212664 148225, 212692 148634, 212714 149494, 212881 150757, 212848 149731, 212864 149196, 212797 148564, 212744 146917, 212719 146481, 212709 145928, 212683 145245, 212645 144610, 212548 144488) (201959 148238, 201992 148884, 202045 149539, 202038 149687, 202093 149797, 202148 149544, 202135 149405, 202146 148890, 202111 148101, 202040 147922) (222829 148562, 222880 149026, 222953 148750, 222946 147929, 222849 147832) (204982 147994, 205001 148370, 204927 148890, 205114 148848, 205171 148118, 205145 147716, 205045 147259) (196470 147739, 196661 147870, 196600 147355, 196517 146912, 196292 146736) (205188 146384, 205271 146845, 205310 146191, 205229 145880) (196238 146293, 196287 146689, 196369 146225) (192471 134099, 192609 134100, 192605 133602, 192463 133570)), ((171025 202017, 171280 202159, 171529 202543, 171632 202842, 171761 203498, 171801 205287, 171805 208719, 171893 212263, 171858 216296, 171598 216999, 171059 218039, 171269 218249, 171365 218266, 171573 218175, 171637 218251, 171796 218245, 171885 218527, 171893 219256, 171884 220173, 171904 220480, 171856 224509, 171796 225316, 171758 226225, 171653 227973, 171619 229081, 171653 229663, 171736 230288, 171832 230862, 171865 231711, 171873 232834, 171765 233465, 171496 234122, 171646 234392, 171757 234829, 171711 235541, 171684 236138, 171667 236944, 171682 237999, 171808 240513, 171238 241098, 171466 241735, 171606 242337, 171592 242940, 171892 243549, 171953 244203, 172035 246354, 171966 249888, 171954 251669, 171919 253624, 171745 254130, 171486 254377, 171254 254841, 171681 256113, 171793 256804, 171797 257224, 171831 258137, 171831 259025, 171851 259154, 171911 259842, 171939 260520, 171891 261269, 171711 260758, 171184 261246, 171676 261979, 171883 262720, 171878 263638, 171860 264610, 171734 266990, 171809 267764, 171937 268854, 171900 272390, 171896 273615, 171869 275179, 169816 275179, 169623 273958, 169676 273162, 169695 273119, 169846 271721, 169857 271195, 169904 270102, 169987 269086, 170058 268446, 170042 267761, 169985 267244, 169944 267073, 169928 266365, 169951 266258, 169992 265635, 169794 265134, 169668 264918, 169516 264287, 169480 264191, 169123 262760, 169104 262045, 169019 261330, 168669 259727, 168594 258975, 168386 257785, 168339 257237, 168333 256983, 168232 256066, 168318 255965, 168414 255277, 168423 254956, 168596 254297, 168607 253847, 168658 253630, 168661 253039, 168927 252348, 169012 251659, 169105 251392, 169151 250974, 169288 250805, 169341 250501, 169517 250553, 169690 251125, 169848 251258, 169777 251688, 170011 252804, 170135 252689, 170076 253009, 170266 253633, 170451 253913, 170625 253963, 170769 254058, 170975 253604, 170953 253286, 170808 253236, 170740 253290, 170634 253191, 170479 253395, 170598 252953, 170556 252720, 170481 252621, 170361 252634, 170418 252290, 170322 251861, 170259 251797, 170279 251612, 170157 251015, 170132 250997, 170087 250490, 170014 250222, 169925 249706, 169837 249376, 169738 248390, 169642 247830, 169500 247734, 169433 247209, 169352 248087, 169390 248789, 169396 249468, 169208 250262, 168963 251125, 168933 251646, 168825 252058, 168910 252326, 168689 252617, 168557 253434, 168449 254030, 168443 254273, 168181 254931, 167989 255373, 167851 256282, 167814 256955, 167858 257589, 167953 258112, 168038 258721, 168167 259389, 168715 261704, 168833 262042, 168988 262763, 169016 263490, 169151 264214, 169223 264957, 169329 265677, 169497 266364, 169621 267102, 169734 268441, 169682 269118, 169581 270135, 169537 270462, 169517 271403, 169480 271940, 169418 272636, 169323 273417, 169366 274457, 169374 275178, 167667 275179, 167669 274079, 167615 273486, 167323 272501, 167263 272516, 167285 272378, 167212 271919, 167191 271159, 167116 270525, 167080 270024, 167060 269874, 167057 269359, 166991 269214, 167174 268953, 167740 267886, 167543 267443, 167406 267867, 167095 268529, 166880 269171, 166751 269333, 166538 269922, 166685 270575, 166714 271021, 166823 271983, 167068 273225, 167145 273338, 167235 273342, 167196 273599, 167197 274414, 167256 275179, 166021 275179, 165998 274676, 165794 273690, 165785 273693, 165600 272453, 165483 272316, 165522 272009, 165462 271761, 165398 271195, 165204 271298, 165328 270758, 165303 270241, 165438 269572, 165462 269382, 165682 268638, 165967 267928, 166115 267187, 166171 266446, 166171 265711, 166072 264999, 165820 264618, 165572 264565, 165165 264685, 165036 264797, 164831 264800, 164770 265097, 164946 265370, 165048 265442, 165328 265503, 165451 265570, 165553 265515, 165680 265828, 165873 266065, 165870 266795, 165767 267629, 165672 267945, 165665 268652, 165507 268197, 165390 268345, 165106 269393, 164929 270097, 164963 270596, 165036 271189, 165135 271417, 165267 272024, 165302 272372, 165391 272954, 165446 273136, 165436 273242, 165515 273765, 165448 274573, 165458 275179, 163897 275179, 163865 273669, 163870 273181, 163777 267335, 163810 265854, 163758 262865, 163766 261996, 163850 261220, 163891 260424, 163913 257927, 163961 256340, 163977 256087, 163981 255090, 164060 254796, 164340 255051, 164506 255038, 164566 254981, 164959 255732, 165027 255639, 165020 256018, 165163 256348, 165322 256517, 165761 257497, 165899 258118, 166009 258921, 166162 259777, 166360 260503, 166522 261324, 167038 263521, 167326 264634, 167452 265007, 167464 265193, 167584 265748, 167690 266453, 167660 266843, 167741 267882, 167817 267461, 167974 267362, 168048 267188, 168012 266457, 167889 265877, 167842 265851, 167852 265720, 167417 263803, 167343 263778, 167355 263552, 167231 262954, 167224 262826, 167087 262082, 166929 261344, 166821 260515, 166813 259777, 166762 259049, 166712 258874, 166576 258263, 166509 257701, 166457 257029, 166356 256292, 166292 256032, 166239 255487, 166294 254746, 166638 252925, 166946 250317, 167015 249611, 167068 248620, 167132 247060, 167152 245107, 167138 244341, 167139 243596, 167033 242886, 166949 242793, 166714 242712, 166508 242540, 166443 242365, 166006 241914, 165251 241071, 165305 241295, 165794 241882, 165770 242109, 166053 242541, 166461 243473, 166542 244100, 166586 244353, 166635 244998, 166725 245635, 166790 246313, 166874 246742, 166846 246989, 166826 247664, 166703 248275, 166626 248964, 166669 249609, 166643 250260, 166561 250640, 166447 251594, 166300 252233, 166132 252870, 166103 253113, 165935 254204, 165829 255507, 165803 255472, 165436 255796, 165282 255859, 165205 255744, 165142 255844, 165142 255426, 164841 254972, 164389 253862, 163975 252937, 163929 252303, 164042 251592, 164124 250996, 164163 250047, 164165 249088, 164090 247856, 164065 246588, 164035 245925, 163952 245197, 163873 244199, 163827 241047, 163925 240752, 164078 240822, 164369 240654, 164519 240654, 164644 240597, 164727 240633, 164749 240500, 163969 239656, 163801 238962, 163798 238036, 163906 235814, 163907 235050, 163861 233743, 163832 232576, 163844 230868, 163857 230357, 163860 228506, 163940 227851, 164103 227247, 164185 225268, 164175 225054, 164198 224517, 164078 223381, 163983 222226, 163970 220737, 163976 218464, 164012 217202, 164032 213775, 164075 212969, 164086 211848, 164071 211252, 163965 210621, 164019 209442, 164022 209005, 164057 207604, 164023 205835, 164053 205241, 164054 204962, 164135 202838, 164325 202223, 164734 202060, 165092 202299, 165180 202932, 165176 203041, 165230 203750, 165346 204359, 165409 205192, 165723 207865, 165969 209098, 165953 209287, 166002 209880, 166101 210473, 166208 210743, 166213 211062, 166435 211942, 166525 212000, 166548 212457, 166691 212890, 166838 213532, 166804 214192, 166888 214964, 166937 216036, 166972 216590, 167009 216779, 166964 217079, 166934 217590, 166586 219881, 166596 220235, 166561 220818, 166501 221052, 166357 221750, 166239 222446, 166075 223140, 165857 223823, 165581 224364, 165347 225130, 165327 225673, 165332 225860, 165228 226622, 165165 227291, 165150 228119, 165097 229394, 165039 230171, 165006 230848, 165166 232319, 165183 233050, 165167 233776, 165185 234491, 165258 235247, 165448 236617, 165465 237047, 165573 238014, 165856 238589, 165892 238001, 165819 237489, 165775 237315, 165704 236802, 165665 236618, 165518 235532, 165442 234692, 165412 234505, 165457 234240, 165458 232208, 165423 231636, 165404 230886, 165549 228730, 165574 227857, 165640 226637, 165659 225877, 165714 225641, 165806 225140, 166013 224532, 166344 223903, 166551 223185, 166674 222474, 166846 221711, 166922 221067, 166788 220586, 166830 220066, 166908 219647, 166982 219049, 167121 218184, 167204 217579, 167258 217037, 167297 216898, 167343 216332, 167361 216215, 167419 215532, 167400 214856, 167492 214179, 167420 213526, 167547 212254, 167670 211558, 167687 211039, 167833 210456, 167884 209859, 167973 209393, 167746 209254, 167704 209829, 167612 210304, 167788 210448, 167579 210556, 167551 211021, 167616 211575, 167291 212235, 167262 212378, 167233 212329, 166879 212173, 166724 211768, 166555 211027, 166438 210363, 166356 210121, 166347 209850, 166254 209197, 166170 208741, 166072 207516, 165983 206783, 165861 205521, 165798 204624, 165731 203269, 165722 202675, 165768 202296, 165979 202094, 166187 202030, 166831 202015, 167158 202063, 167460 202195, 167795 203120, 167897 203742, 167891 204211, 168075 205214, 168199 205491, 168068 205557, 168110 206302, 168116 206665, 168166 206879, 168398 207438, 168451 207143, 168424 206514, 168394 206310, 168433 205921, 168362 205207, 168286 204956, 168414 204493, 168402 204182, 168362 204110, 168438 203917, 168316 203217, 168415 203080, 168276 202642, 168261 202461, 168477 202195, 168801 202064, 169193 202092, 169358 202212, 169533 202415, 169660 202987, 169760 203508, 169779 204051, 169744 204453, 169778 205087, 169848 205776, 169881 206661, 169884 207538, 170209 208137, 170296 208772, 170444 210848, 170457 212750, 170353 213352, 170149 213972, 169935 214565, 169946 214861, 169844 214777, 169765 214914, 169648 215426, 169470 215640, 169086 216452, 168877 216925, 168818 217194, 168640 217561, 168444 218235, 168398 218720, 168442 218780, 168381 218940, 168408 219697, 168669 218973, 168756 218269, 168920 217617, 168992 217185, 169224 216918, 169453 216386, 169781 215818, 169801 215523, 169933 215502, 170064 215248, 170290 214664, 170714 213441, 170835 212776, 170877 212105, 170964 211424, 170947 210123, 170887 209715, 170776 208781, 170620 207841, 170481 206768, 170491 206323, 170466 205741, 170368 205141, 170318 204322, 170246 203622, 170244 203487, 170176 202471, 170395 202005) (170585 260507, 170848 260843, 170764 260512, 170687 260390) (170138 259071, 170173 259202, 170247 259788, 170484 260302, 170564 259795, 170439 259539, 170209 258967) (170904 254217, 171173 254656, 171452 254235, 171185 254048) (166858 228965, 166618 229573, 166538 230326, 166564 231081, 166750 231844, 166917 233219, 167072 234160, 167499 236450, 167642 237263, 167649 237463, 167763 238567, 167967 239870, 168113 241281, 168240 241999, 168400 242676, 168491 243325, 168615 244101, 168827 244927, 168970 245639, 169189 246147, 169216 246390, 169235 245998, 169185 245770, 169009 245353, 169020 245054, 168899 244459, 168647 242798, 168543 241944, 168534 241236, 168638 240548, 168505 239819, 168346 239090, 168288 238699, 168084 237592, 167989 237239, 167774 235899, 167697 235339, 167531 234400, 167302 232743, 167203 231526, 167071 230376, 167141 229625, 167153 229135, 167066 228862) (170741 239500, 170808 239296, 170790 239075, 170723 239069, 170473 238656) (170274 237799, 170391 238329, 170428 237908, 170398 237715, 170349 237686) (170640 233267, 170497 233273, 170318 233557, 170501 233770, 171023 233947, 171194 233449, 170772 233145) (169143 230474, 169122 231057, 169247 231624, 169244 231746, 169347 232441, 169378 233144, 169667 233424, 169871 233422, 170004 232953, 169829 232604, 169680 231990, 169665 231646, 169593 231306, 169581 230987, 169412 230414) (169691 226419, 169421 227051, 169062 227785, 168762 228333, 168718 228518, 168544 229046, 168801 229590, 169030 229910, 169092 230141, 169322 230184, 169160 229725, 169150 229597, 169106 229549, 168943 229048, 169015 228363, 169414 227829, 169603 227392, 169762 226567, 170007 226488, 169906 225812) (170412 218423, 170241 218590, 170215 218740, 169990 219268, 169975 219776, 169866 219497, 169238 220930, 169142 221020, 169040 221322, 168345 222976, 168222 223644, 168024 224072, 167640 225378, 167494 226044, 167343 226646, 167369 227067, 167269 226934, 167146 227405, 166959 228607, 167068 228849, 167211 228135, 167235 227690, 167407 227605, 167557 227081, 167697 226511, 167785 226072, 167922 225586, 167937 225425, 168121 224915, 168542 223445, 168660 223190, 169050 222192, 169198 221752, 169383 221442, 170028 220026, 170102 219522, 170209 219646, 170362 219327, 170452 219007, 170501 219080, 170855 218662, 170861 218184) (170960 227016, 170707 227270, 170553 227901, 170572 227976, 170764 227967, 170841 227907, 171070 227460, 171227 227281, 171092 226992) (169920 225774, 170053 226483, 170314 226414, 170480 225874, 170432 225432, 170287 225365) (168044 207459, 168094 207867, 167927 208218, 167823 208636, 168013 209172, 168100 208671, 168285 208084, 168232 207693, 168367 207486, 168085 207177)), ((219205 273608, 219435 274056, 219485 274352, 219523 275179, 216079 275179, 216090 274536, 216146 274112, 216289 273858, 216694 273676, 217260 273641, 217782 273636, 218098 273798, 218243 273715, 218510 273685, 218711 273604)), ((232817 218826, 233139 219181, 233371 219924, 233416 220288, 233455 222188, 233456 225888, 233502 227922, 233535 228825, 233520 233026, 233428 233816, 233046 234687, 233131 235107, 233475 235496, 233552 235786, 233549 237992, 233501 242055, 233437 242926, 233389 244145, 233298 245783, 233276 246329, 233283 247071, 233345 247679, 233451 248346, 233518 249069, 233535 250867, 233395 251242, 233273 251074, 233042 251250, 232937 251060, 232647 251116, 232249 251009, 232054 250893, 231996 250937, 231693 250809, 231593 250502, 231410 250251, 231339 249977, 231320 249556, 231122 248714, 231031 248215, 230936 247996, 230779 248503, 230821 249002, 230808 249195, 230957 249907, 230956 250481, 231411 251029, 231886 251268, 232314 251606, 232706 251763, 233163 252081, 233170 251960, 233322 251816, 233360 252215, 233395 252991, 233347 253727, 233311 254887, 233345 256308, 233446 258234, 233437 258520, 233452 259029, 233296 259250, 233197 259486, 232848 259009, 233004 258275, 232957 257933, 232604 258279, 233074 259783, 233208 260525, 233435 261285, 233589 262069, 233667 264259, 233676 264803, 233628 266354, 233593 268692, 233595 269622, 233560 271792, 233506 272493, 233039 272885, 232826 273129, 233270 274506, 233410 275178, 229905 275178, 229821 274224, 229865 273956, 229817 273447, 229724 273659, 229575 274158, 229486 274661, 229468 275178, 227934 275179, 227853 274481, 227814 273920, 227866 273247, 227956 272498, 228056 272166, 228228 271178, 228542 268132, 228575 267889, 228603 267135, 228585 266954, 228681 265721, 228696 265097, 228688 264413, 228713 263710, 228703 262828, 228668 262243, 228701 261471, 228514 260883, 228318 260758, 228241 260751, 227873 260275, 227871 260872, 228010 261395, 228131 261924, 228264 262287, 228318 262646, 228301 263010, 228364 263354, 228359 263716, 228430 264410, 228409 265781, 228327 266721, 228279 267137, 228284 268482, 228212 268993, 228255 269494, 228152 269535, 227976 270480, 227783 271144, 227679 271877, 227606 272181, 227543 272738, 227456 273897, 227385 274300, 227329 274036, 226907 274485, 226839 274473, 226738 274668, 227002 275179, 225500 275178, 225519 274434, 225535 273132, 225587 273084, 225654 273140, 225810 273451, 225928 273303, 226094 273400, 226190 273374, 226317 273208, 226058 272518, 225759 271853, 225517 271187, 225514 270509, 225619 269863, 225701 269181, 225730 267969, 225714 267185, 225648 265978, 225626 264736, 225569 263776, 225501 263269, 225445 262699, 225410 261740, 225376 258908, 225450 258807, 225493 258805, 226059 258351, 226108 258264, 225505 257579, 225348 256863, 225345 255899, 225401 255018, 225462 253677, 225456 253404, 225466 252880, 225387 250932, 225364 249687, 225405 248567, 225402 247755, 225412 247300, 225413 246017, 225548 244959, 225622 244532, 225668 243034, 225706 242324, 225674 241601, 225574 240421, 225539 239714, 225526 237480, 225540 235601, 225569 234484, 225586 231076, 225630 230187, 225648 229191, 225632 228370, 225524 227709, 225577 226444, 225587 225603, 225618 224573, 225583 222646, 225665 219987, 225757 219288, 226080 218851, 226338 218814, 226596 218886, 226731 219534, 226769 219987, 226828 220115, 226867 220117, 227008 221389, 227036 222057, 227178 223189, 227268 224203, 227393 224129, 227338 224409, 227416 224736, 227416 225032, 227486 225420, 227618 225645, 227568 225952, 227626 226462, 227648 226960, 227730 226926, 227653 226925, 227750 226272, 227758 225592, 227571 224760, 227617 224380, 227419 222355, 227355 221360, 227303 220356, 227299 219544, 227327 219139, 227436 218922, 227731 218793, 228634 218752, 228978 218862, 229209 219079, 229505 220272, 229539 221000, 229679 221884, 229802 222080, 229842 222644, 229910 223111, 229890 223372, 230003 223455, 229909 221616, 229970 221015, 229903 220332, 229800 219512, 229896 219029, 230086 218874, 230383 218785, 230794 218801, 231003 218944, 231191 219186, 231357 220109, 231416 220665, 231392 220844, 231381 221588, 231410 222110, 231474 222708, 231517 223615, 231540 224468, 231852 225087, 231917 225719, 231948 226289, 232047 227671, 232064 228375, 232064 228772, 232085 229410, 232077 230183, 232042 230549, 232081 231193, 232272 230592, 232275 230416, 232399 229858, 232522 228610, 232531 227708, 232492 227022, 232412 226357, 232346 225701, 232236 225103, 232235 225045, 232082 223856, 232081 223700, 232029 222711, 231885 221734, 231862 221146, 231839 221024, 231789 220425, 231775 220094, 231724 219559, 231765 219010, 231900 218767, 232384 218732) (226451 273927, 226495 274125, 226569 274181, 226670 274074, 226708 274327, 226726 273878, 226529 273679) (230388 271245, 230180 271850, 230101 272572, 230010 272876, 230103 273021, 230171 272576, 230191 271929, 230419 271253, 230405 270628) (232522 272275, 232336 272421, 232321 272389, 232289 272458, 232538 272737, 232668 272451, 232616 272272) (231017 266466, 231052 266978, 231008 267125, 231003 267799, 230882 268419, 230908 268579, 230933 268510, 231264 269109, 231348 269545, 231496 269405, 231415 269817, 231521 270525, 231720 271473, 231875 271964, 232010 272176, 232139 272255, 232304 271767, 232134 271409, 231968 270657, 231856 270049, 231814 269742, 231699 269233, 231593 268565, 231405 267639, 231334 266950, 231204 266047) (230576 263565, 230632 263844, 230699 263777, 230583 263204) (228655 246251, 228464 246498, 228317 246904, 228197 247690, 228178 248473, 228338 249247, 228379 249660, 228510 250750, 228726 252137, 228864 252903, 228914 253079, 229096 254080, 229137 254216, 229230 254752, 229316 255069, 229290 255365, 229321 255892, 229372 256413, 229574 257719, 229656 258372, 229741 259269, 229855 259977, 230032 260718, 230205 261962, 230181 261464, 230138 260907, 230128 260370, 230077 259750, 230174 258402, 229971 257332, 229802 256214, 229687 255789, 229538 255085, 229416 254246, 229348 253906, 229202 252902, 229179 252673, 229077 251925, 229000 251441, 228911 250705, 228701 248477, 228661 247706, 228743 246585, 228697 246247) (227542 260216, 227714 260569, 227770 260149, 227523 259902) (227034 259737, 227239 259578, 226970 259439, 226737 259018) (226468 258972, 226589 259109, 226640 259118, 226709 258972, 226291 258493) (226809 252179, 226885 252960, 227096 254419, 227113 254758, 227234 255526, 227248 255865, 227487 256365, 227493 255991, 227365 255303, 227181 253943, 226961 252178, 226798 251410) (228511 236117, 228364 236482, 228176 237761, 228165 238185, 228067 238876, 227944 239248, 227836 239818, 227736 240476, 227626 240945, 227617 241359, 227494 241219, 227363 241435, 227069 242288, 226919 243022, 226924 243596, 226945 243781, 226876 244299, 226832 244534, 226757 246063, 226723 247423, 226651 248412, 226733 249175, 226744 249467, 226858 250332, 226857 250685, 227027 251188, 227032 250686, 226988 249936, 226929 249476, 226935 248418, 227001 247913, 227129 245992, 227160 245117, 227193 244556, 227207 243794, 227233 243654, 227286 243052, 227438 242449, 227449 242346, 227709 241664, 228055 240997, 228076 240831, 228487 238703, 228462 238398, 228268 238578, 228329 238200, 228229 238112, 228469 237100, 228571 236213, 228732 235220) (230238 246301, 230302 246602, 230324 247076, 230371 247190, 230418 247084, 230391 247006, 230441 246325, 230451 245912) (228722 245362, 228718 245885, 228825 245370, 228806 244950) (230646 245563, 230741 245734, 230764 245708, 230839 245159) (232467 244884, 232335 245097, 232408 245256, 232484 245235, 232708 245328, 232759 245082, 232654 244843, 232557 244821) (231631 243119, 231275 244124, 231139 244441, 231028 244850, 231143 245016, 231316 244661, 231392 244156, 231871 243726, 231955 243684, 232039 243531, 232000 243373, 231778 243064) (229219 243151, 229059 243886, 228909 244479, 229037 244950, 229185 244374, 229282 243907, 229446 243322, 229425 243203, 229366 242598) (232139 235723, 231865 235925, 231630 236627, 231625 236621, 231355 237212, 231310 237391, 231187 237571, 230217 239848, 229994 240505, 230007 240936, 229886 240766, 229583 241823, 229571 242113, 229413 242495, 229529 243046, 229661 242524, 229814 241849, 229833 241391, 230008 241321, 230122 240810, 230485 239936, 230529 239379, 230608 239578, 231359 237894, 231397 237664, 231471 237645, 231742 237021, 231870 236621, 232270 236104, 232558 235785, 232436 235590) (230293 234819, 230098 235541, 230014 236276, 230024 236744, 230140 236712, 230204 236082, 230293 235585, 230355 235309, 230426 234440) (228385 230190, 228509 230912, 228457 231660, 228509 232188, 228516 232738, 228550 233000, 228636 232999, 228571 233378, 228594 233968, 228577 234500, 228804 234624, 228863 233966, 228904 233849, 228973 233207, 228979 232431, 229065 231720, 228991 230904, 228995 230692, 228790 230172, 228815 230084, 228778 230150, 228738 229627, 228559 229543) (231749 231256, 231765 231988, 231594 231636, 231473 231973, 231432 232570, 231227 232570, 231179 232685, 231080 233233, 230845 233404, 230714 233922, 230588 234113, 230679 234367, 231120 233532, 231204 232801, 231419 232912, 231782 232046, 232035 231318, 231897 230841) (228192 229508, 228223 229756, 228293 229915, 228526 229469, 228299 229232) (227781 227569, 227853 228090, 227903 228205, 227900 228379, 228031 228963, 228065 229041, 228113 228838, 228167 228331, 228105 228003, 227912 227409, 227906 226944) (229352 227481, 229362 227548, 229375 227441, 229336 226899) (229482 225584, 229531 226170, 229345 226794, 229562 226265, 229547 225686, 229578 225594, 229515 225444) (229716 224385, 229730 224886, 229712 224990, 229768 225160, 229815 225000, 229798 224512, 229840 224395, 229743 224039)), ((186759 229470, 187003 229341, 187705 229408, 187886 229956, 187924 229931, 188071 230030, 188199 229652, 188152 229507, 188223 229535, 188511 229460, 188875 229484, 189474 229752, 189556 230481, 189603 233084, 189607 233812, 189573 235252, 189576 236023, 189612 237273, 189694 241318, 189699 242606, 189668 243182, 189587 244233, 189541 245303, 189548 246294, 189535 248692, 189545 250615, 189498 252916, 189530 255852, 189547 256397, 189560 257485, 189555 258491, 189578 259584, 189576 260596, 189616 261494, 189685 262512, 189710 263957, 189774 266052, 189788 267626, 189777 268318, 189697 269740, 189576 270941, 189554 271637, 189587 272179, 189709 275179, 186479 275178, 186448 274612, 186414 273373, 186388 272937, 186378 272384, 186352 271700, 186305 270854, 186264 270507, 186182 270998, 186209 271320, 186194 271869, 186240 272584, 186278 273528, 186314 274135, 186359 275178, 184126 275179, 184070 274230, 184055 273650, 183997 273381, 184066 272911, 184064 272378, 184038 271875, 184080 271023, 184182 270347, 184151 269626, 184007 268961, 183693 268627, 183669 268915, 183538 269627, 183577 270331, 183765 271299, 183744 272954, 183768 273653, 183807 273904, 183820 274751, 183853 275179, 181348 275178, 181388 274821, 181497 274319, 181702 273570, 181784 272960, 181772 272282, 181772 270999, 181651 270321, 181402 269648, 181322 268954, 181316 268195, 181328 266698, 181387 263251, 181384 262483, 181329 261546, 181309 261013, 181322 260134, 181319 258948, 181286 257600, 181281 255959, 181291 254939, 181340 252286, 181309 250470, 181325 247731, 181355 246041, 181398 245239, 181588 244218, 181600 243285, 181514 242401, 181463 241601, 181419 240601, 181386 239424, 181389 238835, 181319 237202, 181361 235525, 181376 235301, 181369 234753, 181377 234601, 181348 233917, 181304 233342, 181349 230410, 181369 229731, 181593 229518, 181964 229391, 183081 229359, 183329 229452, 183539 229478, 183889 229355, 184372 229339, 184933 229403, 185284 229319, 186249 229313) (186061 268122, 186061 268817, 186106 268234, 186111 267884) (183755 267542, 183878 268023, 183819 267456, 183773 267390) (185993 264715, 186014 264930, 185937 265438, 185948 265797, 185951 266521, 186035 266137, 186018 266015, 186113 265421, 186148 264704, 186184 264491, 186139 264173) (185923 262511, 185925 263176, 186029 262699, 185978 262343)), ((238842 264205, 239031 264578, 239288 264231, 239497 264187, 240082 264288, 240254 264523, 240356 265714, 240400 265276, 240490 265013, 240572 265024, 240649 264965, 240737 264542, 240847 264403, 241445 264368, 241689 264472, 241836 264686, 241928 265219, 241966 266371, 242011 269933, 242015 271093, 241985 272862, 241977 274109, 241996 275179, 233818 275179, 233857 272843, 233846 271805, 233794 270824, 233765 269892, 233797 267565, 233798 266394, 233826 264831, 233883 264684, 234181 264376, 234483 264251, 235508 264202, 235741 264355, 235922 264402, 236318 264189, 236849 264162, 237005 264209, 237141 264388, 237130 264435, 237182 265012, 237153 266235, 237241 266583, 237206 266754, 237254 266661, 237259 265988, 237240 265592, 237296 264422, 237384 264273, 237552 264158, 238579 264135) (239951 274986, 240034 274958, 240041 274731, 239984 274504) (240039 273025, 240025 273326, 240137 273813, 240142 273337, 240190 272832) (237089 268690, 237093 270943, 237115 272093, 237135 272499, 237111 273209, 237138 273477, 237256 273609, 237265 272203, 237313 271866, 237324 271145, 237291 269924, 237274 269708, 237265 268925, 237242 268372, 237181 267827, 237186 267593, 237114 267195) (240112 272144, 240194 272351, 240183 271984, 240137 271853)), ((210371 236583, 210437 236987, 210423 238199, 210408 238705, 210363 239537, 210345 239619, 210237 241105, 210284 241303, 210263 241676, 210403 242034, 210377 242415, 210534 242603, 210747 242198, 210937 242016, 210943 241628, 211006 241514, 211045 240126, 211078 239928, 211078 239033, 211065 238756, 211048 237470, 211053 236639, 211541 236561, 212150 236589, 212485 236727, 212868 236681, 213127 236726, 213250 236647, 213603 236905, 213784 237300, 213725 237419, 213778 237927, 213763 238030, 213787 238618, 213701 238670, 213716 238801, 213638 238937, 213679 239498, 213657 239654, 213688 241111, 213713 241332, 213630 241755, 213433 241987, 213439 242652, 213380 242912, 213366 243532, 213322 244710, 213309 245571, 213292 245698, 213279 247011, 213309 247187, 213278 247829, 213316 248066, 213228 248778, 213257 248973, 213206 249912, 213243 250285, 213232 250885, 213193 251271, 213010 251420, 212879 251836, 212858 252032, 212906 252547, 212966 252671, 212974 252836, 213170 253144, 213082 253843, 213053 254142, 212852 254808, 212776 255347, 212971 256139, 213254 256402, 213463 255845, 213182 255538, 213438 254872, 213433 254322, 213372 253878, 213450 252891, 213574 251908, 213603 251005, 213691 250488, 213811 249958, 213795 249018, 213736 248454, 213777 248111, 213726 247625, 213774 247244, 213793 246659, 213845 245639, 213858 244903, 213944 243972, 214097 243330, 214086 243000, 214135 242811, 214115 242409, 214148 241836, 214166 240676, 214385 240121, 214642 239843, 214763 239293, 214421 238631, 214430 238492, 214348 238098, 214348 237420, 214416 237296, 214621 237091, 214926 237034, 215218 237070, 215313 237311, 215300 237723, 215350 238331, 215349 238645, 215375 239875, 215466 241183, 215491 241364, 215524 242093, 215480 242836, 215539 245017, 215569 249801, 215519 250422, 215458 250861, 215411 251663, 215407 252032, 215351 253010, 215402 253459, 215421 254636, 215415 255114, 215455 256206, 215457 256759, 215421 258910, 215425 259358, 215397 260086, 215398 260502, 215293 262075, 215271 263131, 215310 265849, 215340 266017, 215387 266985, 215375 267578, 215384 268312, 215294 269081, 215355 269442, 215306 270405, 215348 270956, 215217 272603, 215225 273215, 215294 273883, 215324 274050, 215365 275179, 214010 275178, 214121 274427, 214144 273935, 214267 273280, 214121 273135, 213872 273670, 213784 273998, 213719 275179, 212500 275178, 212609 274425, 212306 273683, 212231 272881, 212128 272077, 212134 271540, 212064 270849, 211924 270399, 211924 270287, 211692 270010, 211745 269521, 211719 268974, 211731 267653, 211713 267283, 211763 266285, 211701 265910, 211728 265535, 211731 265001, 211770 264643, 211621 263985, 211302 263948, 211384 263182, 211484 262759, 211658 262293, 211779 261587, 211845 261397, 211800 261313, 211714 260486, 211659 259559, 211694 259215, 211732 258522, 212084 256372, 211943 255909, 211646 256687, 211417 258821, 211308 259548, 211215 259981, 211204 260469, 211119 260780, 211025 262093, 211058 262269, 211085 262800, 211217 263233, 211213 264433, 211488 264377, 211274 264994, 211202 265919, 211297 267437, 211276 267725, 211297 268674, 211396 270043, 211472 270386, 211624 271359, 211721 271896, 211639 272871, 211721 273874, 211702 274355, 211731 275179, 209671 275178, 209589 273375, 209558 270973, 209567 270083, 209557 269395, 209453 265898, 209474 265256, 209461 264650, 209522 264004, 209561 263439, 209628 263073, 209686 262518, 209768 261868, 209866 261614, 209865 261272, 209929 260698, 209953 260368, 210149 259466, 210351 258329, 210499 257964, 210555 257223, 210689 256640, 210714 256044, 210173 255631, 210070 255333, 209913 255204, 209646 256019, 209673 256579, 209666 256952, 209760 258438, 209647 259046, 209533 259398, 209469 260311, 209521 260646, 209406 260558, 209244 260721, 209216 261195, 209156 261400, 209046 262094, 209099 263195, 209025 263179, 208847 263329, 208911 263962, 208909 264207, 208950 264921, 209013 265675, 209048 265876, 209097 266814, 209119 267731, 209124 268450, 209110 268629, 209092 269509, 209130 269818, 209113 270368, 209131 270982, 209127 271210, 209226 272253, 209223 272893, 209201 273464, 209228 273844, 209243 274433, 209279 275179, 207459 275179, 207453 274391, 207432 273626, 207509 273197, 207475 272858, 207499 272521, 207487 271922, 207518 271253, 207516 270384, 207487 269505, 207528 268928, 207440 267149, 207420 265699, 207458 264874, 207492 264422, 207464 263892, 207503 262920, 207561 262036, 207532 261530, 207488 261113, 207509 260664, 207439 258429, 207433 257403, 207443 256351, 207438 255810, 207481 254980, 207476 254525, 207531 254236, 207567 253521, 207724 252682, 207680 251734, 207585 250846, 207565 250210, 207530 249784, 207534 249023, 207521 248364, 207541 247818, 207568 247406, 207547 246528, 207562 245867, 207533 243968, 207550 243442, 207534 242863, 207556 241959, 207544 241563, 207594 240329, 207523 239544, 207557 239023, 207576 238447, 207567 238056, 207731 236998, 207940 236719, 208392 236523, 208870 236551, 208956 236719, 208957 236941, 209095 237154, 208961 237870, 209008 238014, 208975 238139, 209054 238196, 209411 238019, 209267 237871, 209448 237591, 209538 237072, 209648 236542, 210166 236499) (213710 270437, 213663 271249, 213640 271460, 213608 272085, 213549 272596, 213726 272891, 213717 272982, 213758 273017, 213895 272882, 213850 272764, 214158 272058, 214273 271222, 214286 270900, 214416 269831, 214233 269443) (213895 265092, 213840 265877, 213871 266358, 213790 267208, 213773 267699, 213640 268209, 213796 268604, 213752 268795, 213865 268740, 214140 267689, 214160 267322, 214231 266776, 214315 266417, 214345 265863, 214345 265439, 214391 264467, 214238 264031) (213795 261352, 213777 261635, 213553 262263, 213505 262879, 213697 263159, 213841 263544, 213995 263148, 214003 262876, 214195 262238, 214221 261625, 213968 261055) (212981 256966, 212856 257708, 212866 258347, 213118 258646, 213118 258785, 213203 258788, 213341 259561, 213290 260058, 213389 260467, 213354 260736, 213518 260729, 213676 260457, 213731 260121, 213899 259546, 213696 258683, 213593 258646, 213690 258621, 213691 257096, 213403 256876) (208567 252322, 208564 252738, 208518 253280, 208521 254049, 208655 254448, 208835 254113, 208851 253147, 208815 252344, 208770 251719, 208776 251553, 208730 250899) (209120 240735, 209088 240963, 208879 241805, 208904 242455, 208948 242786, 208933 243669, 208854 244453, 208695 244910, 208674 245446, 208642 245654, 208625 246270, 208697 246406, 208760 246901, 208754 247204, 208866 247689, 209036 247172, 209050 246855, 209156 246342, 209189 245843, 209280 245547, 209307 244951, 209150 244440, 209154 243659, 209279 242692, 209391 242330, 209391 242021, 209465 241428, 209451 240913, 209476 240693, 209366 240216) (212215 246286, 212251 246632, 212309 246242, 212276 245297) (210252 244747, 210408 244996, 211017 245524, 211184 244740, 211186 244573, 210438 244466) (212394 237474, 212164 237568, 212284 238866, 212427 239052, 212434 239271, 212604 239527, 212568 239651, 212645 240024, 212618 240418, 212208 240333, 212065 240521, 211759 241057, 211942 241912, 212274 242018, 212712 241642, 212828 241088, 212814 240537, 212764 240067, 212772 239464, 212891 239093, 212875 238894, 212953 238676, 212935 238279, 212855 237892, 212609 237575, 212597 237413, 212485 237294) (209085 238393, 209069 238667, 208966 239142, 208981 239771, 209037 240003, 209358 240195, 209217 239743, 209339 239570, 209411 238919, 209486 238699, 209563 238144, 209413 238017)), ((243534 247038, 243728 247088, 243928 247574, 243972 248247, 244083 248768, 244150 249474, 244406 251339, 244507 251868, 244626 252391, 244691 253008, 244797 253629, 244943 254251, 245323 255509, 245507 256153, 245543 256829, 245573 257033, 245736 258848, 245706 259554, 245512 260760, 245373 261510, 245319 262049, 245209 262797, 245071 263295, 244884 264122, 244643 264859, 244613 264885, 244280 265497, 244062 266225, 244015 266557, 244016 266996, 243901 267835, 243868 269340, 243785 270130, 243781 270920, 243904 271715, 243935 272494, 243923 273235, 243975 274018, 244140 275179, 242720 275178, 242727 274009, 242706 273666, 242668 272475, 242675 269896, 242685 269105, 242713 268523, 242961 267758, 243011 267025, 243049 265554, 242938 264621, 242880 264289, 242798 263496, 242791 260424, 242826 259424, 242837 256983, 242888 255870, 242900 255074, 242877 254443, 242785 253822, 242829 253173, 242868 251382, 242835 249885, 242874 249446, 242953 247590, 243067 247248, 243244 247016, 243467 246980)), ((221224 273778, 221474 273743, 221736 273614, 222292 273669, 222515 273776, 222598 274492, 222718 274665, 222662 275160, 222763 274613, 222975 273875, 223103 273782, 223863 273770, 224105 273975, 224196 274366, 224248 275179, 219540 275179, 219545 274352, 219580 273738, 219719 273635, 220015 273586, 220948 273567)), ((224447 183282, 224550 184231, 224586 186140, 224582 187233, 224602 188770, 224600 189673, 224638 191102, 224678 194053, 224665 195018, 224646 195492, 224702 199777, 224690 200709, 224627 201380, 224573 202108, 224561 202831, 224561 204184, 224541 205337, 224539 206018, 224466 207994, 224472 209041, 224584 210794, 224583 211790, 224333 213790, 224298 214546, 224291 216029, 224355 217381, 224391 219130, 224434 220129, 224503 220751, 224555 221338, 224593 222485, 224609 224755, 224635 225855, 224663 228667, 224652 229796, 224569 231563, 224543 232473, 224558 233421, 224612 234970, 224611 235659, 224622 236106, 224611 237860, 224600 238177, 224604 238709, 224595 239177, 224594 240598, 224574 241157, 224327 242499, 224314 243379, 224275 244317, 224277 244673, 224248 245429, 224295 246103, 224350 246679, 224372 247029, 224450 247840, 224473 248571, 224486 250859, 224478 252935, 224446 254211, 224429 256271, 224430 258269, 224383 259372, 224366 260651, 224376 261481, 224486 262201, 224470 262917, 224441 263643, 224422 265046, 224395 265865, 224431 268094, 224410 268862, 224374 269624, 224323 271783, 224147 272412, 223970 272565, 223148 272604, 222848 272234, 222350 272406, 222044 272370, 221731 272554, 221361 272617, 220686 272589, 220552 272530, 220351 272282, 220189 272391, 219628 272669, 218880 272651, 218609 272478, 218584 272049, 218610 271507, 218570 271310, 218539 270793, 218384 271287, 218189 271750, 217954 272537, 217516 272545, 217084 272427, 216830 271939, 216613 271147, 216565 268553, 216558 264186, 216522 262228, 216486 261099, 216477 260491, 216493 257562, 216503 257117, 216499 256031, 216472 253963, 216486 251430, 216464 249965, 216516 245719, 216586 244422, 216654 242519, 216743 240815, 216752 240116, 216723 239502, 216661 238873, 216568 238219, 216524 237584, 216490 236230, 216506 235135, 216568 233863, 216651 232616, 216687 231722, 216707 230869, 216701 229923, 216679 229135, 216531 225559, 216331 219356, 216374 217420, 216408 214498, 216409 213576, 216427 212681, 216454 210147, 216605 209413, 216714 208774, 216729 208105, 216679 207420, 216546 206738, 216514 206144, 216492 205236, 216466 204618, 216463 203492, 216426 202227, 216430 201491, 216465 200211, 216520 197089, 216634 194859, 216636 194149, 216507 192973, 216453 192264, 216456 190971, 216443 190252, 216488 186887, 216507 184549, 216543 184025, 216615 183617, 216971 183471, 217830 183442, 219051 183340, 219314 183418, 219459 183886, 219487 184467, 219442 185849, 219410 187433, 219382 187999, 219367 188611, 219390 188863, 219284 189428, 219203 190396, 219174 191021, 219319 191652, 219356 191025, 219331 190622, 219458 189873, 219412 189792, 219488 189706, 219576 188603, 219571 188408, 219669 188060, 219768 187204, 219942 185532, 219983 184466, 219930 183976, 219962 183478, 220082 183209, 220292 183151, 221175 183144, 221267 183262, 221380 183688, 221332 183877, 221359 184134, 221485 184092, 221329 184479, 221303 185014, 221321 185341, 221246 185564, 221236 185815, 221355 185766, 221214 186121, 221097 187364, 221059 187981, 221057 188307, 221009 188807, 220895 189404, 220815 190144, 220750 191391, 220740 192209, 220778 195101, 220949 196160, 220956 196402, 221026 197159, 221033 197692, 221110 198562, 221163 198774, 221140 198845, 221220 199434, 221348 200987, 221411 201257, 221566 201406, 221504 201601, 221601 202069, 221581 202313, 221611 203094, 221744 204087, 221750 204272, 221815 204912, 221875 204073, 221881 203400, 221835 202777, 221653 201372, 221626 200756, 221574 200236, 221440 199675, 221438 199420, 221364 198766, 221369 198261, 221310 197173, 221206 197061, 221220 195958, 221141 194961, 221122 194825, 221100 194168, 221079 192852, 221070 190963, 221162 189736, 221171 189147, 221164 188859, 221180 188304, 221304 187820, 221413 186984, 221422 186472, 221527 185273, 221504 185228, 221537 185165, 221600 184499, 221642 183187, 221868 183031, 222621 182969, 222896 183411, 223205 183100, 223623 182886, 224146 182886) (221579 271452, 221677 271624, 221791 271589, 221676 271035, 221598 270763) (218301 267048, 218320 267226, 218239 267686, 218228 268304, 218275 269127, 218442 268452, 218452 268292, 218554 267794, 218601 266861, 218502 266661) (222871 266324, 222708 267065, 222680 267782, 222880 268273, 222951 267758, 222782 267285, 222876 267147, 222924 266966, 222905 266309) (221401 262111, 221440 263168, 221492 264009, 221553 264201, 221594 263782, 221578 263025, 221515 262262, 221418 261760) (223248 259991, 223192 260544, 223336 260606, 223354 259998, 223259 259490) (223354 258416, 223427 259152, 223375 258378) (220045 253121, 220169 253585, 220165 253125, 220020 252587) (218447 244665, 218498 244992, 218554 244391, 218442 244221) (218581 243353, 218488 243838, 218620 243690, 218639 243444, 218549 242983) (221494 242384, 221525 242967, 221576 243399, 221606 243109, 221558 242496, 221488 242053) (218647 241972, 218647 242211, 218709 242491, 218759 241863) (218661 241275, 218784 241414, 218797 240995, 218702 240782) (218844 238922, 218842 239048, 218741 239701, 218854 240368, 218756 239732, 218882 239251, 218892 238832) (222535 230596, 222651 231465, 222673 230706, 222568 230176) (219891 221588, 219824 222165, 219831 222537, 219905 222767, 219967 223238, 220069 222526, 220022 222241, 220006 221740, 219954 221128, 219887 220566) (217920 215876, 217954 216771, 218169 216804, 218156 217736, 218237 218085, 218305 218874, 218355 218808, 218396 218375, 218333 218080, 218292 217494, 218262 217290, 218215 216522, 217981 216554, 217957 215920, 217928 215828) (220148 212201, 220146 212837, 220208 212441, 220234 211647) (221676 207556, 221593 208146, 221584 208840, 221630 209360, 221752 209538, 221731 210072, 221753 211026, 221789 211564, 221846 210636, 221969 208162, 221955 207470, 221910 207167) (223382 206906, 223445 207583, 223418 206839, 223380 206415) (217876 206674, 217887 206958, 217906 206790, 217899 206047) (217700 203481, 217666 204005, 217697 204636, 217775 204393, 217753 204127, 217762 203627, 217741 203195) (218966 201405, 218984 202172, 219048 202451, 219012 202834, 219063 203166, 219177 202826, 219234 202158, 219187 201799, 219024 201502, 219045 200889) (218852 198320, 218858 199204, 218891 200056, 219085 199208, 219019 198112) (218879 196159, 218803 196403, 218811 197084, 218831 197750, 218895 197490, 218874 197385, 218961 196821, 218977 196029, 218887 195908) (219100 191706, 219047 192287, 219023 192916, 218959 193569, 218971 194193, 218951 194539, 219045 194532, 219223 194217, 219286 193573, 219165 192923, 219164 192286, 219314 191674)), ((238343 189074, 238466 189951, 238541 189602, 238613 189493, 238645 189311, 238794 189391, 239047 188956, 239074 188676, 239423 188828, 239546 188950, 239750 189388, 239803 189758, 239767 190009, 239782 191249, 239710 191843, 239742 192441, 239723 193700, 239974 194816, 240044 195031, 240147 195546, 240242 195710, 240447 196382, 240504 196527, 240652 197054, 240686 197287, 240889 197730, 240974 198611, 241107 199123, 241073 199371, 241136 199823, 241106 200524, 241183 201703, 241255 201911, 241271 202166, 241222 202618, 241128 204066, 241045 205657, 240961 206288, 240589 208316, 240467 209198, 240312 209647, 240069 210479, 240062 210743, 239680 211869, 239256 213328, 239121 213885, 238955 214403, 238854 214909, 238649 215754, 238499 216236, 238370 216732, 238274 217295, 238325 218051, 238453 218891, 238611 219601, 238806 221174, 238815 222674, 238869 222780, 238905 222760, 238853 221963, 239061 221662, 239142 221664, 239370 221558, 239385 221871, 239529 222317, 239665 222596, 239619 222820, 239635 223341, 239596 224068, 239628 224771, 239727 225452, 239774 226138, 239897 226768, 239890 226818, 239907 227507, 239945 228187, 240037 228864, 240042 228961, 240130 229456, 240131 229573, 240230 230959, 240251 231684, 240239 232431, 240265 233174, 240469 233887, 240808 234681, 240962 234927, 241100 235036, 241178 234559, 240855 233840, 240653 233116, 240818 232362, 240756 231638, 240483 230936, 240483 230707, 240393 229747, 240486 228828, 240475 228728, 240472 228132, 240361 227431, 240251 226855, 240260 226793, 240246 226029, 240318 225458, 240252 224699, 240111 224001, 239940 223418, 239741 221825, 239598 221203, 239589 221071, 239508 220570, 239397 220322, 239370 219606, 239095 218908, 238951 218216, 238871 218027, 238863 217305, 238898 216514, 239024 215712, 239032 215506, 239114 215386, 239265 214624, 239396 214130, 239408 213996, 239780 212643, 239914 212107, 239929 211922, 240012 211769, 240202 211235, 240472 210557, 240714 209875, 240820 209163, 241093 208411, 241299 207799, 241416 207071, 241454 206940, 241562 206309, 241567 205790, 241599 204818, 241570 204094, 241591 203532, 241549 202618, 241389 201907, 241440 201704, 241461 201204, 241390 200508, 241333 200139, 241261 199255, 241190 198524, 241113 198413, 241166 198342, 241064 197706, 241083 197452, 241034 197000, 240765 195656, 240585 194949, 240469 194319, 240329 193050, 240303 192285, 240291 191408, 240329 190524, 240440 189673, 240692 189167, 241035 188977, 241165 188990, 241466 189159, 241919 189372, 241927 189425, 242107 189544, 242166 189839, 242219 190574, 242260 193582, 242220 196581, 242263 198318, 242349 203539, 242361 205152, 242306 206488, 242251 207307, 242211 207755, 242175 208744, 242169 209889, 242176 211654, 242160 213534, 242176 216292, 242132 218077, 242085 218699, 242105 219587, 242110 221679, 241993 222464, 241946 222538, 241924 222462, 241620 222140, 241356 222442, 241463 222779, 241603 223055, 241936 223864, 242097 224582, 242130 225301, 242135 225920, 242120 226887, 242136 227340, 242096 228115, 242091 228860, 242144 230395, 242184 231981, 242283 234070, 242297 234594, 242206 235307, 241952 235986, 242136 236674, 242281 237408, 242277 237847, 242302 239597, 242266 241099, 242183 242292, 242164 243079, 242190 243842, 242231 244484, 242285 246326, 242352 248044, 242356 249246, 242317 249939, 242300 250644, 242291 252041, 242350 254884, 242347 255935, 242261 259208, 242141 260772, 242087 262831, 242022 263442, 241963 263614, 241691 263748, 241304 263770, 241260 263720, 241007 263670, 240762 262918, 240688 262185, 240679 261955, 240620 261823, 240542 260977, 240417 260160, 240429 260017, 240372 259463, 240241 258383, 240116 257068, 239992 256314, 239824 255078, 239768 254380, 239655 253672, 239502 252946, 239415 251429, 239443 251175, 239537 250000, 239680 248866, 239774 248252, 240064 246754, 240020 246522, 240084 246654, 240239 245997, 240318 245234, 240482 244703, 240527 244496, 240726 243772, 240732 243678, 240833 243049, 240789 242535, 240792 242329, 240719 242095, 240679 242217, 240625 242790, 240550 243028, 240310 243290, 240227 243721, 240286 244023, 240239 244463, 240166 244579, 240043 245198, 239836 245937, 239711 246705, 239746 247201, 239609 246970, 239508 247049, 239375 248117, 239383 248263, 239320 248369, 239115 249194, 239001 248246, 238908 247708, 238953 247232, 238961 246669, 238985 246421, 239019 245721, 239137 243961, 239182 242980, 239442 241678, 239476 240987, 239531 239192, 239535 238642, 239570 238158, 239446 237173, 239215 235484, 239176 234866, 238828 233217, 238629 232674, 238413 231982, 238225 231428, 237949 230810, 237870 231367, 237951 231862, 238238 232738, 238237 232822, 238305 233443, 238364 234147, 238486 234863, 238640 235447, 238761 236166, 238846 236819, 238892 237562, 238850 238192, 238971 238925, 239025 239170, 239061 239838, 238986 241568, 238937 242014, 238870 242815, 238767 244690, 238684 245975, 238608 247781, 238519 248276, 238502 249076, 238525 249851, 238629 250654, 239073 253179, 239171 253674, 239356 254378, 239509 255348, 239682 256303, 239682 256420, 239781 257305, 239802 257577, 239908 258471, 239975 258916, 240060 259767, 240072 260070, 240188 260790, 240332 262146, 240387 263258, 240336 263386, 240039 263760, 239860 263772, 239265 263643, 239241 262821, 239208 262648, 239083 261652, 238621 259224, 238256 257179, 238231 256993, 237988 255951, 237805 255011, 237614 254279, 237251 253547, 237065 252835, 236933 251926, 236830 251346, 236734 250572, 236723 249668, 236758 248330, 236855 247633, 236792 246570, 236740 245897, 236624 241292, 236577 240327, 236600 239805, 236627 239686, 236716 238760, 236702 238342, 236617 237739, 236475 236970, 236460 236839, 236356 236263, 236286 235725, 236326 235113, 236148 234799, 235820 234077, 235582 233219, 235479 232408, 235520 230968, 235484 230196, 235510 229820, 235460 229420, 235400 228643, 235479 227943, 235461 227347, 235471 227082, 235346 226735, 235276 226779, 235167 227039, 235163 227668, 235180 227868, 235182 228648, 235134 229426, 235076 229804, 235164 230572, 235028 230745, 235109 231770, 235018 232533, 235401 233237, 235459 233937, 235404 234531, 235069 233961, 234723 233171, 234400 232559, 234250 231839, 234232 230792, 234198 229856, 234181 227180, 234193 225615, 234171 225243, 234162 224313, 234147 224039, 234180 221495, 234379 220757, 234802 220123, 234983 219747, 235084 219654, 235619 218639, 235742 217885, 235722 217610, 235831 217309, 235903 216323, 236055 215526, 236096 214985, 236133 214717, 236195 214065, 236227 213910, 236204 213692, 236176 213113, 236219 212329, 236311 211552, 236281 210794, 236151 210056, 236006 209465, 235946 209334, 235969 209208, 235991 208624, 236009 208509, 235995 207937, 235949 207551, 235818 207365, 235753 207444, 235780 207284, 235690 206929, 235694 206623, 235670 205673, 235617 204800, 235405 205220, 235402 205075, 235392 205251, 235441 205947, 235431 206112, 235452 206628, 235444 206868, 235481 207715, 235462 208249, 235540 208649, 235649 210076, 235812 211576, 235793 212347, 235657 213908, 235685 214506, 235642 215429, 235471 217868, 235519 218413, 235389 218183, 235315 218343, 235281 218619, 235187 219194, 235078 219117, 234858 219348, 234785 219854, 234721 219595, 234552 219687, 234223 219379, 234203 218779, 234209 218235, 234198 217128, 234206 216894, 234186 214805, 234199 213486, 234198 212325, 234207 211648, 234266 209342, 234354 208618, 234455 207962, 234510 207323, 234497 206593, 234388 205145, 234347 204230, 234311 203025, 234394 202314, 234409 201601, 234566 200894, 234862 200182, 235136 199476, 235290 199235, 235493 198758, 235503 197947, 235564 197188, 235594 196688, 235759 195934, 235918 195386, 236095 194694, 236298 194088, 236409 193551, 236468 193030, 236464 192850, 236560 192099, 236614 191279, 236582 190696, 236498 190197, 236455 189602, 236476 188896, 236527 188773, 236873 188592, 238134 188573) (240900 240252, 240969 240744, 240992 240253, 240950 239972) (241520 235027, 241285 235269, 241617 235624, 241769 235280, 241657 234982) (237279 229235, 237401 229619, 237637 229919, 237611 230403, 237752 230909, 237780 230640, 237654 229936, 237348 229022) (238179 225876, 238102 226234, 238120 226825, 238117 227685, 238157 228361, 238354 229240, 238507 229512, 238607 229992, 238674 230084, 238783 229732, 238742 229296, 238780 228311, 238647 227301, 238574 226928, 238487 226236, 238422 225928, 238489 225531, 238275 225271) (236384 225592, 236462 225985, 236458 226334, 236582 226826, 236602 227068, 236736 227566, 236858 227429, 236768 227058, 236836 226776, 236738 225966, 236723 225586, 236503 224927) (238493 224488, 238422 224821, 238520 225431, 238559 224823, 238719 224109, 238705 224038) (236045 222573, 235943 222839, 235941 223324, 236131 224095, 236194 224927, 236292 224850, 236222 224267, 236154 224096, 236291 223704, 236162 222717, 236142 222130) (240959 220227, 241188 220935, 241072 220064, 241032 220035) (240535 214767, 240447 215722, 240411 216476, 240424 217236, 240533 217769, 240643 217990, 240599 218166, 240824 219535, 240908 218741, 240835 217983, 240600 217035, 240615 215719, 240656 214977, 240634 214446) (236852 217712, 236725 218297, 236746 218799, 236758 218846, 236939 217702) (237578 212775, 237514 213156, 237517 213600, 237440 213973, 237341 214670, 237466 214805, 237456 214990, 237515 214855, 237675 213995, 237715 213679, 237796 213185, 237676 212609) (237984 210681, 237912 211600, 237839 211949, 237924 212134, 238181 211046, 238175 210874, 238046 210467) (238366 209385, 238272 209921, 238178 210120, 238257 210712, 238359 210159, 238381 209486, 238542 209077) (237656 200927, 237545 200973, 237285 201343, 236755 202641, 236720 203315, 236728 203978, 236716 204626, 236675 205208, 236577 205916, 236611 206182, 236740 206256, 236816 206421, 237059 206467, 237328 205881, 237085 205249, 236992 204625, 236982 204196, 237053 203998, 237141 203374, 237104 203076, 237174 202730, 237363 202110, 237657 201876, 238116 201740, 238179 201673, 238155 201753, 238562 202288, 238851 202825, 238995 203426, 239238 204036, 239304 204499, 239374 204692, 239344 205365, 239169 205939, 238988 206297, 238940 206705, 238875 206858, 238812 207360, 238783 207670, 238671 208063, 238562 208568, 238691 208756, 239018 208248, 239047 208230, 239313 207492, 239422 206798, 239756 205949, 240007 205437, 239979 204723, 239744 203362, 239613 203002, 239440 202706, 239212 202080, 239176 201409, 239064 201032, 238707 200491, 238594 200497, 238459 200367, 237831 200289) (238123 204104, 238329 205275, 238273 205912, 238015 206509, 237794 206376, 237700 206363, 237398 206516, 237377 206374, 237350 206541, 237761 206705, 238028 206609, 238334 206237, 238507 205942, 238398 205282, 238324 204102, 238174 203773) (238362 191738, 238144 191680, 238002 192028, 237973 192393, 237977 193015, 237930 193581, 237932 193658, 237844 194985, 237787 195553, 237776 195751, 237637 196768, 237427 197672, 236960 199011, 236496 200253, 236303 201098, 236196 201820, 236350 201218, 236411 201121, 236528 200667, 236621 200902, 236739 200747, 236914 200206, 237315 199390, 237430 199122, 237506 199057, 237662 198391, 237829 198164, 237902 197766, 238030 197217, 238250 196405, 238417 195740, 238531 194978, 238611 193732, 238574 192958, 238514 192403, 238411 191889, 238445 191249, 238431 190864)), ((234450 234457, 234980 235087, 235013 235067, 235417 235572, 235537 235674, 235765 236292, 235840 236935, 235913 237772, 236006 238386, 236063 239040, 236101 239706, 236120 239872, 236161 240578, 236234 242552, 236310 245043, 236308 245456, 236402 246188, 236368 246932, 236413 247684, 236426 248456, 236384 249655, 236322 250581, 236371 251307, 236501 252056, 236651 252800, 237214 255047, 237404 255666, 237654 257041, 238061 258853, 238359 260389, 238399 260660, 238546 261313, 238694 262037, 238755 262893, 238711 263384, 238623 263575, 238328 263743, 237416 263693, 236907 263631, 236745 263514, 236657 263377, 236512 261806, 236512 261601, 236238 259282, 236228 259124, 236080 258254, 236091 257824, 236021 257143, 236068 256445, 235973 255593, 235882 254304, 235870 253770, 235874 253548, 235733 252837, 235469 251848, 235112 251144, 235027 251002, 234518 250051, 234298 249355, 234218 248630, 234243 247856, 234332 247086, 234523 246264, 234670 245502, 234713 244736, 234701 243942, 234705 242584, 234637 241828, 234474 241189, 234291 240557, 234221 239969, 234190 239053, 234198 237815, 234188 237079, 234200 235539, 234241 234423, 234421 234310)), ((234699 252115, 235042 252659, 235132 252732, 235154 252689, 235443 253585, 235573 254291, 235586 254258, 235609 254968, 235488 255769, 235502 256537, 235604 257557, 235628 257895, 235804 259166, 235995 260094, 236000 260318, 236037 260874, 236070 261140, 236070 261699, 236218 262676, 236157 263318, 236050 263345, 235909 263450, 235590 263411, 235073 263302, 234599 263133, 234411 262951, 234482 259797, 234427 259070, 234357 257393, 234308 256474, 234309 255777, 234402 254403, 234407 253623, 234385 252908, 234428 252102, 234694 251969)), ((212440 161411, 212695 161715, 212968 161451, 213288 161437, 213687 161481, 213762 161557, 213985 162190, 214154 161762, 214444 161585, 215057 161587, 215443 161680, 215612 162197, 215664 163053, 215677 164716, 215704 166271, 215695 167747, 215661 169361, 215735 172914, 215805 177782, 215784 178881, 215700 180264, 215657 181141, 215642 181986, 215646 184473, 215628 186095, 215649 188704, 215595 191835, 215635 195825, 215646 196163, 215659 197615, 215653 198779, 215673 199975, 215671 200992, 215690 202183, 215771 203627, 215794 204455, 215810 205979, 215867 207776, 215880 208674, 215891 211173, 215784 213394, 215679 214490, 215650 215501, 215721 217192, 215741 218264, 215800 219676, 215813 221360, 215786 222596, 215771 223960, 215823 226624, 215819 227927, 215717 231715, 215642 232784, 215567 235278, 215512 235597, 215257 235788, 214940 235867, 214709 235657, 214712 235290, 214616 234833, 214425 234517, 214406 234841, 214420 235587, 214264 235823, 214080 235894, 213238 235899, 213109 235747, 213059 235249, 213020 235044, 213116 234818, 213171 233598, 212910 233213, 212908 233570, 213053 233822, 212878 233711, 212810 234280, 212906 234917, 212696 235789, 212448 235895, 211593 235869, 211005 235727, 210953 235676, 210826 235294, 210729 232555, 210692 232520, 210735 231063, 210650 230072, 210668 229274, 210643 228245, 210600 227702, 210539 227151, 210496 226539, 210472 225830, 210517 225452, 210515 224876, 210447 223841, 210343 222516, 210246 220602, 210208 219192, 210176 218361, 210156 215819, 210146 215442, 210175 214814, 210302 213689, 210283 213185, 210147 212584, 210060 211653, 209784 211565, 209773 212224, 209623 213193, 209638 213698, 209853 215052, 209850 217707, 209879 218985, 209976 221518, 210059 223109, 210082 224343, 210160 225372, 210261 226027, 210285 226635, 210288 227146, 210312 227498, 210315 228229, 210368 228750, 210377 229280, 210428 229721, 210406 229915, 210417 230514, 210408 230639, 210411 231342, 210437 232023, 210430 232777, 210378 232955, 210394 234232, 210421 234678, 210417 235345, 210324 235602, 210104 235684, 209793 235698, 209200 235614, 208295 235447, 207762 235262, 207538 235090, 207566 234057, 207602 231983, 207592 231454, 207544 230472, 207539 230101, 207459 228215, 207526 227284, 207588 226165, 207544 225077, 207473 224320, 207422 223319, 207405 221222, 207414 220620, 207470 219790, 207575 219098, 207670 218709, 207786 218152, 207865 217637, 207886 217135, 207866 215940, 207875 214846, 207831 214345, 207733 213837, 207571 213314, 207451 212734, 207418 211861, 207417 209814, 207487 204769, 207486 203965, 207418 202465, 207402 201902, 207432 200397, 207389 197813, 207394 197304, 207381 196974, 207377 196415, 207403 192751, 207437 191270, 207408 188057, 207422 185090, 207466 182056, 207645 180758, 207707 180234, 207699 179314, 207618 178259, 207545 176541, 207496 175108, 207483 173204, 207418 171732, 207468 169113, 207482 168798, 207469 167819, 207403 166529, 207427 164953, 207434 163576, 207467 162005, 207641 161687, 207894 161553, 208174 161476, 209149 161445, 209497 161594, 209774 161542, 209986 161431, 210544 161419, 210712 161464, 210847 161629, 210878 162280, 210906 161921, 211036 161499, 211230 161398, 212120 161382) (212912 233140, 213125 233207, 213039 232607, 212925 232540) (212806 228865, 212855 229397, 212968 229728, 212950 228843, 212811 228159, 212767 228030) (212747 225751, 212825 226366, 212765 225625, 212652 224658) (212550 222099, 212551 222374, 212645 222578, 212628 222208, 212570 221663, 212482 221328) (212261 214313, 212236 214855, 212368 217723, 212397 218735, 212496 219954, 212504 220320, 212571 220623, 212532 220903, 212644 220804, 212574 219703, 212553 219034, 212548 218233, 212491 216876, 212440 216129, 212423 215247, 212346 214252, 212315 213624) (212142 211547, 212145 211643, 212214 211075, 212195 210932) (212058 205702, 212067 205984, 211995 206315, 212012 207264, 212240 207285, 212049 207835, 212044 208551, 212138 208884, 212060 209057, 212086 209876, 212241 209402, 212266 208559, 212118 208215, 212242 207809, 212242 207283, 212182 206755, 212227 206591, 212220 206220, 212250 205491, 212222 205159) (211999 204427, 212018 205052, 212221 205149, 212139 204623, 212162 204273, 212124 203930) (209374 193203, 209357 193802, 209467 193918, 209510 193142) (213678 169320, 213752 169432, 213706 168918) (210828 164479, 210793 166386, 210909 167076, 210912 167278, 210978 167382, 210925 165323, 210884 164169, 210855 163677)), ((185297 167110, 185407 167451, 185338 167598, 185329 167852, 185381 168350, 185440 168634, 185651 168170, 185703 167967, 185970 167346, 185951 167256, 186126 167059, 186995 167057, 187112 167225, 187126 167396, 187297 167851, 187511 167580, 187718 167194, 187870 167100, 188330 167079, 188764 167155, 188994 167415, 189208 168124, 189259 170043, 189265 172829, 189303 174099, 189352 175290, 189338 177095, 189317 178365, 189324 178591, 189317 179552, 189335 180080, 189336 181778, 189365 182574, 189307 185446, 189234 186526, 189151 188026, 189098 188685, 189071 189372, 189129 190059, 189263 190768, 189309 191406, 189325 192154, 189286 193042, 189214 194103, 189187 194381, 189130 195334, 189118 196181, 189172 197770, 189250 199065, 189299 199563, 189498 203737, 189430 206912, 189389 209907, 189222 210588, 189108 211235, 189156 211949, 189317 212617, 189341 213367, 189375 214059, 189384 214777, 189416 215539, 189407 216229, 189356 217642, 189328 219067, 189215 220574, 189234 221297, 189335 221977, 189374 222713, 189388 223874, 189324 227914, 189109 228395, 188719 228449, 188023 228456, 186631 228549, 186472 228294, 186408 227996, 186415 227471, 186472 226226, 186490 224835, 186572 224305, 186831 221683, 186915 221369, 186945 220871, 186783 220779, 186532 221354, 186601 222053, 186534 222688, 186516 222971, 186301 224576, 186158 225468, 186101 225766, 185988 226490, 185888 227052, 185879 227574, 185884 228095, 185903 228345, 185800 228622, 185648 228661, 184705 228665, 184580 228544, 184505 228065, 184589 227785, 184592 227338, 184713 226475, 184776 225868, 184855 225273, 184967 224652, 185050 223973, 185108 223369, 185147 222391, 185115 221420, 185102 220614, 185028 219962, 184895 219037, 184863 218607, 184664 217295, 184543 216617, 184519 216385, 184402 215871, 184301 216015, 184314 215632, 184248 215280, 184263 214892, 184154 214176, 183924 214098, 183955 214899, 184062 215474, 184143 215982, 184290 217116, 184437 217790, 184485 218576, 184610 219345, 184622 219973, 184659 220157, 184721 220668, 184758 221351, 184776 222025, 184770 223359, 184705 224019, 184708 224132, 184682 224654, 184580 225282, 184460 225890, 184397 226657, 184348 226954, 184281 227490, 184203 228319, 184198 228589, 184131 228705, 183472 228795, 183168 228715, 183084 228646, 182878 228161, 182621 228725, 182522 228823, 181707 228851, 181435 228417, 181350 227690, 181327 226798, 181332 226001, 181306 225040, 181307 223943, 181234 221768, 181239 220209, 181254 220012, 181188 216954, 181248 216258, 181333 215500, 181336 214207, 181369 212866, 181422 212207, 181449 211242, 181418 210532, 181344 209805, 181330 209094, 181393 208494, 181534 207740, 181587 207109, 181606 206295, 181572 205427, 181536 204928, 181513 204025, 181460 203209, 181407 202874, 181346 202316, 181309 201374, 181297 200232, 181281 199875, 181240 197166, 181250 196634, 181339 195182, 181353 194246, 181298 192862, 181286 191907, 181303 190654, 181308 188838, 181532 188195, 181627 187585, 181656 186499, 181699 185835, 181613 185045, 181541 184647, 181431 183748, 181409 182317, 181416 180616, 181454 179562, 181469 177082, 181521 175854, 181525 174698, 181410 173973, 181453 173234, 181473 172197, 181501 171633, 181456 170072, 181527 169120, 181574 167732, 181674 167318, 182006 167041, 182733 167028, 182932 167135, 183128 167348, 183253 167247, 183784 167190, 184405 167022, 184888 167021) (182601 220573, 182601 220833, 182575 221391, 182589 221549, 182558 222068, 182557 222276, 182513 222984, 182619 223110, 182774 222721, 182727 221382, 182712 220690, 182653 220062) (186874 218523, 186899 218720, 186834 219235, 186874 219794, 187068 219231, 187034 218959, 187056 218340, 187039 217808) (186807 215685, 186788 216242, 186814 216403, 186714 217267, 186752 217528, 187037 217808, 186850 217109, 186886 216506, 186880 216399, 186968 215570, 186736 215251) (188015 213703, 188055 214135, 188100 215107, 188192 215141, 188177 214751, 188239 214003, 188173 213331, 188153 213301) (182346 211844, 182288 211830, 182377 212784, 182461 213044, 182533 212958, 182502 212708, 182479 212001, 182439 211663) (185267 212010, 185261 212745, 185405 212303, 185449 211755, 185350 211748) (187888 211959, 187918 212466, 187950 211958, 187923 211687) (184110 208365, 184085 209894, 183979 210471, 184007 210590, 183928 210733, 183874 211295, 183917 212207, 184178 212008, 184328 211284, 184328 210906, 184243 210539, 184282 209889, 184284 209201, 184240 208653, 184164 208194) (187824 206319, 187819 206833, 187922 206254, 187903 205990) (187613 204764, 187640 204905, 187597 205679, 187634 205715, 187779 205556, 187696 205446, 187760 204747, 187708 204580) (187325 203943, 187332 204158, 187409 204261, 187509 203922, 187510 203680, 187417 203655) (185723 201112, 185803 201361, 185782 202147, 185822 202381, 185871 203134, 185947 203520, 185999 203290, 185993 202138, 185999 201841, 185953 200921, 185896 200713) (183111 196097, 183111 196338, 183220 196571, 183346 196089, 183357 195861, 183244 195515) (187168 187332, 187096 188140, 187055 188812, 186932 189816, 186947 190690, 187033 190305, 186975 189832, 187148 189628, 187219 188881, 187258 188142, 187230 187867, 187370 187292) (184359 187722, 184404 188292, 184387 187689, 184349 187311) (187365 185986, 187363 186393, 187203 187147, 187394 187204, 187461 186611, 187503 185973, 187455 185491) (185911 183458, 185982 184152, 186008 184285, 186031 184115, 186101 183340, 186009 182935) (187495 180554, 187553 181290, 187625 180551, 187535 179884) (182489 175139, 182515 175803, 182391 176384, 182360 176383, 182395 176941, 182579 176594, 182646 175985, 182711 175237, 182687 174648) (184155 172903, 184186 173891, 184245 174426, 184331 174780, 184395 174585, 184412 173770, 184378 173140, 184238 172626) (187354 169144, 187305 169545, 187269 170271, 187255 170954, 187324 171368, 187399 171508, 187539 171257, 187533 171111, 187641 170750, 187724 169433, 187631 169027, 187644 168917, 187597 168883) (182772 170156, 182859 170644, 182923 171233, 183103 171365, 183165 170881, 183182 170371, 182928 170047) (184144 167291, 184024 167660, 184063 167803, 184162 168395, 184189 168798, 184297 169405, 184296 169102, 184244 168395, 184283 168102, 184311 167596, 184411 167274) (182898 167926, 182844 168051, 182954 168592, 183074 169096, 183100 169155, 183098 168673, 183052 167999, 183066 167740)), ((235459 188654, 235687 188917, 235822 189324, 236001 190191, 235918 191121, 235928 191635, 236013 192207, 235998 192273, 236012 192789, 235902 193397, 235786 193668, 235569 194393, 235505 194555, 235319 195235, 235090 196611, 235041 197310, 234999 197624, 235055 198027, 234832 198748, 234866 199199, 234741 199466, 234758 200007, 234621 199769, 234389 199579, 234325 199670, 234281 199476, 234248 198732, 234254 197148, 234286 195536, 234204 193095, 234226 191243, 234221 190495, 234237 189605, 234266 189452, 234274 188928, 234657 188619, 235149 188598)), ((190945 175323, 191056 175591, 191143 175634, 191279 175359, 191317 176094, 191367 176309, 191424 176930, 191362 177653, 191320 178375, 191372 178726, 191437 179275, 191479 179855, 191543 180389, 191708 180544, 191648 180897, 191717 181145, 191724 181439, 191798 181801, 191987 181569, 191896 181948, 191968 182137, 191889 182525, 191944 183472, 191990 183616, 192074 183655, 191952 184189, 191699 184362, 191201 184289, 190347 184111, 190098 183979, 190087 183430, 190096 183346, 190105 182806, 190150 181489, 190128 180812, 190090 180358, 190042 179446, 190034 179080, 189985 178259, 190101 176873, 190082 175434, 190129 175036, 190276 174786, 190571 175021, 190665 174877, 190781 174873, 190924 174583))) \ No newline at end of file +MULTIPOLYGON (((180401 253120, 180770 253328, 180896 254044, 180950 255594, 180939 256385, 180965 257447, 181027 261131, 180999 262268, 181043 264621, 181053 265621, 180959 266394, 180915 267136, 180917 267899, 180885 269921, 180833 270636, 180822 271584, 180687 271860, 180454 271664, 180287 271686, 180232 271793, 180039 271309, 179876 271205, 179793 271061, 179737 271411, 180003 271830, 180043 271711, 180113 272031, 180472 272798, 180776 273320, 180789 273492, 180877 274014, 180761 274625, 180696 275178, 178285 275179, 178395 274311, 178686 273480, 178802 272821, 178885 272446, 178967 271340, 179110 270986, 179202 271276, 179395 271100, 179508 271097, 179586 270941, 179659 271080, 179728 270749, 179664 270546, 179588 270495, 179314 270104, 179004 269444, 178874 268689, 178842 268581, 178587 267454, 178520 267233, 178330 266478, 178117 265699, 178042 265304, 177864 264756, 177673 263988, 177631 263918, 177450 264122, 177446 263482, 177402 263217, 177118 262649, 177153 261776, 177113 261350, 177427 260679, 177543 260189, 177766 260004, 178111 259341, 178186 258677, 178157 258248, 178095 257998, 178021 257333, 177905 256808, 177690 256176, 177595 255795, 177664 255549, 177677 255139, 177455 254508, 177497 254397, 177502 254014, 177623 253544, 177344 253492, 177001 254010, 177108 254823, 177116 255366, 177250 256146, 177469 256730, 177602 257273, 177680 257746, 177620 258001, 177622 258393, 177721 258588, 177878 258335, 177756 258660, 177761 259328, 177495 259815, 177448 259982, 177185 260456, 177057 260654, 176743 261367, 176831 261995, 176937 261799, 176843 262087, 176977 262493, 177020 262803, 177232 263557, 177566 264892, 177634 265261, 177841 266124, 177948 266497, 178025 267262, 178023 268038, 178220 268832, 178454 270557, 178543 271123, 178555 271680, 178466 272184, 178378 272540, 178245 273191, 178177 273439, 178024 274602, 177937 275179, 175161 275179, 175072 275072, 174908 274173, 174714 273290, 174381 272616, 174234 272588, 173997 272447, 173780 272239, 173774 272831, 173992 273174, 174151 273286, 174465 272849, 174247 273520, 174301 273788, 174403 273931, 174579 273719, 174440 274198, 174664 275178, 172846 275179, 172865 273846, 172901 272749, 173051 272549, 173167 272557, 173719 272179, 173502 271725, 173394 271713, 173417 271519, 173166 270882, 173005 270158, 172980 269156, 172980 268299, 172950 268129, 172869 266955, 173554 266273, 173146 265709, 173043 265790, 173080 265615, 172920 264829, 172954 263238, 173064 261698, 173017 260894, 172927 260304, 172881 259667, 172877 258774, 172930 254727, 172963 254554, 172960 254036, 173186 253499, 173819 253445, 174231 253475, 174503 253549, 174778 253704, 174974 254220, 175060 254700, 175178 255218, 175228 255741, 175028 256553, 175013 257058, 174980 257428, 174954 257950, 174961 258036, 174850 259350, 174765 260073, 174775 260816, 174881 261556, 174830 262315, 175308 263779, 175500 264496, 175675 265237, 175706 265944, 175811 266316, 175976 267035, 176065 267367, 176312 268766, 176418 269461, 176469 270178, 176566 270842, 176468 271328, 176563 271518, 176380 271962, 176355 272547, 176432 272178, 176728 271531, 176930 270862, 176996 270177, 176942 269466, 176791 268635, 176657 268032, 176424 267147, 176088 265976, 175886 265331, 175693 265214, 175821 264614, 175640 263734, 175562 262989, 175407 262252, 175200 261520, 175150 261022, 175089 260055, 175038 259698, 175109 259351, 175013 258923, 175196 259164, 175286 258135, 175320 257566, 175298 257251, 175353 256828, 175271 256599, 175393 256615, 175445 256395, 175498 255706, 175459 255176, 175454 254504, 175393 253577, 175648 253330, 176162 253286, 176581 253523, 176964 253903, 177368 253320, 177734 253188, 178337 253134, 178523 253171, 178685 253329, 178775 253691, 178801 254546, 178865 255240, 178966 255468, 179088 256099, 179295 255568, 179365 254747, 179322 254036, 179231 253412, 179336 253192, 179637 253104, 180046 253063, 180401 253120), (175991 273453, 175935 274592, 176030 274154, 176152 273474, 176069 273100, 175991 273453), (174513 268260, 174573 268260, 174641 268168, 174606 268043, 174543 267495, 174502 267461, 174513 268260), (173356 266952, 173422 267327, 173855 267192, 173962 267088, 174066 267084, 174157 266911, 173590 266311, 173356 266952), (179435 258004, 179481 258574, 179512 258664, 179363 259483, 179301 259522, 179164 259912, 178895 260523, 178700 261164, 178632 261896, 178649 262712, 178932 263370, 179179 263498, 179455 263371, 179240 262631, 179185 262546, 179051 261822, 179080 261071, 179213 260623, 179217 260473, 179533 259927, 179743 259304, 179889 258648, 179784 257986, 179635 257451, 179435 258004), (180103 262636, 180236 262838, 180346 262652, 180361 262426, 180257 262285, 180103 262636), (179094 256146, 179375 257647, 179571 257341, 179485 256716, 179311 255736, 179094 256146)), ((192410 128152, 192443 129647, 192451 132488, 192594 132474, 192572 130626, 192581 129942, 192578 128942, 192657 128493, 193435 128418, 193984 128420, 194511 128458, 196757 128379, 198201 128396, 198659 128347, 199100 128408, 199897 128452, 200575 128448, 201158 128404, 202011 128379, 202190 128387, 202832 128329, 203208 128368, 203595 128335, 204050 128436, 204879 128287, 206187 128266, 206563 128213, 206912 128270, 207484 128250, 208104 128246, 208521 128339, 208588 128761, 208599 129944, 208635 129492, 208711 129151, 208790 129008, 209227 128726, 209432 128563, 209924 128454, 210534 128416, 210887 128433, 211395 128437, 211700 128498, 212242 128471, 213091 128468, 213408 128515, 214379 128518, 214572 128553, 215166 128454, 215998 128600, 216830 128587, 217466 128428, 218691 128484, 218829 128471, 219338 128476, 219687 128434, 220130 128516, 220952 128525, 221033 128510, 221749 128452, 222479 128452, 223076 128480, 223861 128448, 224423 128603, 224638 128600, 225114 128936, 225270 129119, 226145 129939, 226530 130320, 226653 130418, 227440 131200, 228401 132191, 228534 132427, 228712 132636, 228980 132761, 229481 133302, 229783 133595, 230250 134140, 230354 134206, 231056 134906, 231191 135292, 231148 135601, 231615 135292, 232157 135551, 232520 135938, 232626 136089, 232997 136496, 233273 136770, 233648 137166, 233851 137327, 234359 137890, 234423 137940, 234804 138326, 235248 138726, 235672 139171, 235891 139426, 236228 139659, 236684 140130, 237065 140431, 237393 140885, 238475 141886, 238692 142176, 239200 142607, 239380 142806, 239914 143313, 240529 143955, 240589 144059, 241505 144961, 241646 145187, 242058 145493, 242551 145938, 242936 146331, 243263 146625, 244368 147784, 244667 148326, 244654 148645, 244995 148367, 245894 149270, 246188 149580, 246655 150003, 247145 150486, 247731 151097, 248096 151452, 248483 151859, 249643 152993, 249978 153520, 250108 154140, 250128 158178, 250319 158231, 250424 158343, 250966 158305, 251139 158331, 251683 158603, 251956 158389, 252376 158525, 252834 158468, 252927 158562, 253133 158468, 253657 158397, 254206 158253, 254935 158265, 255427 158326, 256313 158390, 257434 158287, 258107 158325, 259066 158325, 259906 158284, 260766 158296, 261428 158215, 261592 158169, 262454 158165, 263248 158570, 263312 158665, 263440 159107, 263453 159678, 263450 160545, 263405 161735, 263380 162793, 263338 163779, 263354 164910, 263320 165580, 263282 165627, 263180 166119, 263050 166312, 263095 166617, 263049 167185, 263268 167536, 263291 167907, 257174 182673, 257168 185685, 257174 217532, 256904 217498, 256902 219138, 257174 219142, 257174 231170, 256863 231143, 256858 232925, 257174 232823, 257174 275178, 246644 275178, 246447 274181, 246321 273595, 246144 272551, 246065 271817, 245897 270538, 245849 270272, 245950 269348, 246003 268707, 246238 267945, 246483 267201, 247079 265284, 247400 264557, 247777 263745, 247772 263537, 247799 263707, 248111 263115, 248114 262843, 248156 263037, 248376 262617, 248376 261874, 248363 261798, 248035 262423, 247693 263038, 247362 263667, 247081 264320, 246835 264968, 246319 266443, 246155 267060, 245893 267917, 245748 268684, 245642 268862, 245434 269447, 245293 270263, 245337 271021, 245548 271792, 245640 272526, 245744 273086, 245984 274189, 246218 275179, 244435 275179, 244374 274651, 244273 274001, 244245 273255, 244269 272421, 244254 271265, 244224 270942, 244295 270003, 244406 267717, 244447 267079, 244539 266259, 244792 265619, 245251 264908, 245280 264660, 245407 264167, 245440 263967, 245709 262815, 245637 262163, 245650 261775, 245821 260799, 246055 259608, 246155 258787, 246248 258152, 246228 257465, 246296 256783, 246274 256113, 246377 255451, 246201 254977, 246154 255263, 245949 255301, 245528 255170, 245513 254822, 245308 254046, 245188 253717, 245078 253155, 245046 252781, 244960 252189, 244692 249985, 244564 248462, 244538 247567, 244579 247146, 244664 247054, 245066 246940, 245603 246921, 245591 246309, 245533 246174, 245230 246566, 244497 246480, 244347 246328, 244267 245423, 244165 244972, 244187 244428, 244133 245249, 244027 245689, 243929 246227, 243785 246362, 243159 246387, 242895 246296, 242753 246106, 242652 245459, 242609 243888, 242607 242872, 242580 241048, 242576 239765, 242615 237368, 242498 229349, 242500 228464, 242480 226741, 242506 225790, 242586 224526, 242641 223025, 242654 221933, 242648 219036, 242662 217151, 242646 214088, 242705 210897, 242700 208895, 242678 206165, 242639 203402, 242626 200390, 242638 199146, 242610 197892, 242563 196697, 242525 195344, 242517 194183, 242478 192990, 242417 190420, 242397 187920, 242434 187427, 242482 185917, 242578 184128, 242602 183876, 242634 183140, 242650 182318, 242609 181433, 242537 178701, 242477 177249, 242476 174782, 241961 174785, 241953 175694, 241926 176337, 241906 177653, 241909 178593, 241854 179943, 241844 180599, 241953 181918, 241912 182604, 241907 183194, 241877 183894, 241907 185371, 241868 185928, 241795 187666, 241639 188074, 241353 188228, 240589 188239, 240358 187862, 240300 187494, 240297 187803, 240088 188059, 239597 188098, 239353 187904, 239160 188239, 238313 188250, 237976 188131, 237876 187818, 237900 187016, 237689 186988, 237519 187603, 237528 187749, 237311 188249, 236809 188207, 236262 188235, 236161 187816, 236059 186978, 235917 186787, 235930 186317, 235758 185822, 235707 186250, 235829 186862, 235571 188099, 235419 188078, 235194 188201, 234786 188171, 234463 187980, 234249 187540, 234165 187127, 234109 185720, 234114 183040, 234065 181445, 234021 180489, 234060 176553, 234039 175800, 234048 175081, 234019 173962, 234020 173212, 234064 170877, 234139 169927, 234214 168675, 234275 167900, 234297 167153, 234085 165668, 233687 164974, 233638 166365, 233630 167434, 233674 168185, 233733 168747, 233747 169449, 233678 169987, 233674 170133, 233561 170778, 233447 171584, 233436 172973, 233527 174984, 233532 175455, 233595 176493, 233717 177539, 233751 178590, 233812 183152, 233784 184229, 233718 185390, 233700 186493, 233751 188019, 233768 188288, 233781 189008, 233780 189559, 233754 190779, 233745 192596, 233698 193250, 233573 193649, 233518 193990, 233492 194799, 233455 195451, 233427 196478, 233507 197434, 233571 197942, 233617 198718, 233633 200041, 233626 202233, 233592 203457, 233576 204957, 233578 206464, 233523 207639, 233514 208538, 233533 209220, 233634 209877, 233586 210868, 233574 211821, 233547 212474, 233550 213097, 233582 214354, 233476 217213, 233429 217466, 233306 217743, 233094 217919, 232408 217952, 231862 217752, 231421 217817, 231101 217721, 230811 217964, 230373 217979, 229780 217960, 229558 217902, 229493 217835, 229403 217402, 229482 217303, 229490 216468, 229458 216266, 229368 216514, 229261 217115, 229308 217350, 229185 217720, 228997 217986, 228320 218011, 227860 217973, 227756 217303, 227679 217185, 227530 217255, 227102 217570, 226591 217911, 225937 217428, 225708 216545, 225670 214441, 225673 211706, 225635 209836, 225599 208952, 225589 208087, 225605 204975, 225570 203517, 225584 201299, 225574 200124, 225612 196932, 225689 195623, 225781 193717, 225841 192829, 225858 192095, 225797 191405, 225671 190660, 225622 190017, 225595 188988, 225615 188162, 225710 186730, 225741 186420, 225794 185525, 225813 184576, 225782 183386, 225740 182421, 225631 180559, 225513 177500, 225444 176008, 225492 174050, 225566 168640, 225733 167673, 225833 167291, 225827 166627, 225631 165377, 225608 164541, 225582 163986, 225584 163344, 225539 161836, 225582 160497, 225633 158127, 225752 156302, 225733 155632, 225565 154405, 225561 152207, 225590 150576, 224795 149775, 224711 150371, 224256 151138, 224239 151261, 224281 151194, 224416 151487, 224579 151610, 224799 151936, 224792 153471, 224811 156117, 224800 158616, 224744 161961, 224547 163360, 224493 164031, 224509 164671, 224608 165960, 224658 167029, 224692 168247, 224594 168963, 224570 169753, 224344 170506, 224605 171125, 224688 171256, 224737 171574, 224779 172359, 224782 172964, 224724 175850, 224745 176633, 224777 177263, 224795 178342, 224754 181712, 224691 182222, 224382 182539, 223970 182586, 223672 182572, 223475 182411, 223287 182384, 223121 181913, 222944 181222, 222921 180632, 222983 179987, 222944 179287, 222928 179160, 222903 178581, 223010 177873, 223247 177176, 223459 176481, 223628 175773, 223754 175041, 223843 174298, 223829 173977, 223837 172981, 223972 172288, 224127 172025, 224232 171557, 224050 171167, 223824 171712, 223660 172005, 223447 172850, 223481 173509, 223472 173641, 223492 174259, 223178 175557, 222955 176407, 222785 176750, 222640 177424, 222572 177637, 222509 178135, 222488 178540, 222410 179244, 222381 179922, 222432 180561, 222521 181189, 222545 182205, 222448 182430, 221886 182595, 220831 182599, 220701 182566, 220574 182469, 220526 181902, 220321 181305, 220191 181586, 220103 182083, 219958 182499, 219673 182627, 219268 182356, 219092 181880, 219099 181253, 219152 180747, 219166 179635, 219211 179025, 219159 178325, 219196 177700, 219068 176786, 218707 175603, 218522 175126, 218435 174589, 218239 174275, 218151 173993, 218047 173389, 218008 173641, 218029 173808, 217981 174330, 218112 174999, 218429 176364, 218507 176859, 218598 177649, 218615 177728, 218640 178233, 218662 178418, 218691 179539, 218678 179800, 218671 180346, 218604 181203, 218382 181969, 218242 182079, 218156 182267, 218001 182392, 217626 182299, 216968 182012, 216870 181781, 216771 181725, 216726 181266, 216691 180362, 216693 179999, 216654 177370, 216699 174541, 216646 172147, 216559 166166, 216603 164803, 216674 163773, 216717 162823, 216734 161909, 216729 159917, 216744 157655, 216729 155257, 216763 153372, 216781 153168, 216803 152631, 216773 149664, 216867 148838, 217241 148141, 217141 147828, 216917 147404, 216855 147065, 215946 146528, 216035 148472, 216046 149815, 216005 151774, 216062 154229, 216042 155158, 215960 157591, 215917 158179, 215873 158626, 215792 160732, 215487 160955, 215119 161020, 214930 160442, 214829 159937, 214788 159868, 214717 159975, 214602 160884, 214517 160964, 214229 161051, 213586 161046, 213253 160860, 213314 160788, 213348 160461, 213280 159871, 213191 159662, 213383 159471, 213442 159357, 213348 158735, 213271 158533, 213162 158663, 213160 159269, 213040 159734, 213110 160180, 213073 160432, 213108 160503, 212762 161057, 211563 161008, 211146 160859, 211045 160712, 211072 160508, 211006 159563, 211002 159050, 210950 158538, 210891 158277, 210961 157458, 210909 156219, 210759 155771, 210815 155090, 210864 154933, 210773 154558, 210707 153849, 210689 153219, 210760 152627, 210721 152106, 210597 150812, 210475 149054, 210401 147777, 210387 147196, 210329 146929, 210398 146455, 210396 145921, 210368 145424, 210410 144567, 210512 143891, 210482 143170, 210315 142460, 210272 142431, 209996 142484, 209869 143171, 209909 143876, 210095 144833, 210075 146498, 210099 147198, 210138 147449, 210151 148297, 210177 148425, 210189 148954, 210234 149162, 210207 149780, 210276 150885, 210315 152037, 210380 152715, 210446 153159, 210511 154050, 210546 154971, 210600 155441, 210626 156589, 210704 157357, 210669 157518, 210722 157933, 210677 158666, 210601 158868, 210604 159231, 210665 159826, 210634 160752, 210459 160852, 210062 160898, 209065 160776, 208455 160667, 207849 160510, 207787 159837, 207839 158038, 207822 157460, 207767 156542, 207706 154959, 207805 153711, 207812 153134, 207658 151279, 207632 149622, 207649 148992, 207719 148366, 207828 147865, 208031 147116, 208116 146508, 208102 145757, 208104 144541, 207982 143866, 207733 143193, 207652 142528, 207126 142528, 207081 145956, 207012 147181, 206955 148773, 206842 150961, 206869 151792, 206930 152440, 207027 153120, 207077 153801, 207100 155303, 207083 156129, 207007 157672, 206947 158469, 206915 159264, 206897 160039, 206894 160859, 206920 161941, 206925 162607, 206985 164000, 207027 164618, 207081 165673, 207273 171437, 207240 173152, 207159 180144, 206953 181247, 206903 181441, 206878 182101, 206921 182768, 207050 183463, 207103 184130, 207151 185617, 207154 186539, 207195 187978, 207116 191678, 207105 192839, 206967 195345, 207031 196214, 207096 196735, 207147 197409, 207162 199810, 207120 202908, 207114 204678, 207075 205290, 206979 205800, 206456 205948, 206676 206105, 206767 206528, 206831 207114, 206863 208664, 206863 209360, 206879 210399, 206879 211170, 206930 213225, 206957 214926, 206929 216286, 206985 220098, 206915 220769, 206852 221522, 206836 222237, 206843 222970, 206810 224819, 206757 225846, 206745 226798, 206796 227636, 206860 228406, 206851 229243, 206611 230855, 206573 231742, 206567 232507, 206653 234315, 206656 234809, 206692 235704, 206851 237166, 206870 237748, 206923 241217, 206943 243335, 206825 245802, 206828 246410, 206864 247502, 206898 248170, 206907 249269, 206878 250731, 206862 252832, 206787 253242, 206669 253555, 206597 254286, 206571 255458, 206534 256511, 206691 257872, 206760 259072, 206759 262159, 206722 263703, 206708 265244, 206709 266697, 206658 267690, 206644 268981, 206732 269665, 206758 270280, 206717 271077, 206703 272111, 206676 272785, 206713 274883, 206689 275178, 200778 275179, 200788 274640, 200747 274512, 200744 274192, 200572 274125, 200488 274963, 200509 275179, 198843 275179, 198845 271897, 198811 270166, 198756 268769, 198779 265030, 198754 262997, 198761 261728, 198751 261102, 198751 259938, 198795 256481, 198856 255729, 198931 254059, 199018 252678, 199031 251943, 198964 251226, 198843 250512, 198792 249791, 198773 249075, 198780 248229, 198855 246918, 198928 246116, 198970 245182, 198987 244400, 198963 243221, 198790 239950, 198609 235343, 198623 234580, 198660 233480, 198727 228366, 198800 227574, 198997 226793, 198991 226029, 198851 225257, 198795 224576, 198754 223659, 198738 222514, 198705 221644, 198709 220956, 198773 218723, 198786 217774, 198831 216829, 198920 215545, 198889 214829, 198770 213963, 198738 213462, 198721 212253, 198773 208758, 198774 207516, 198826 206788, 199338 206423, 199393 206425, 199248 206277, 199133 205306, 199096 203617, 199096 202218, 199074 201131, 199090 200372, 199040 198312, 199001 195525, 199025 194278, 199010 192825, 198985 191746, 198972 189522, 199067 188431, 199102 187733, 199116 186903, 199106 186317, 199135 184276, 199191 183087, 199223 182094, 199215 181310, 199101 179448, 199116 178549, 199190 177833, 199278 177193, 199357 176417, 199381 175050, 199376 174397, 199312 173183, 199269 171339, 199213 170393, 199121 169473, 199083 168235, 199070 166211, 199041 164973, 199011 161524, 199075 160062, 199123 159231, 199133 158419, 199064 155948, 199081 150808, 199129 150130, 199338 149482, 199409 148818, 199439 146993, 199471 146296, 199428 145598, 199287 144358, 199233 143804, 199198 142997, 199190 142471, 197987 142381, 197973 143321, 197994 145273, 197957 146910, 197955 147413, 197924 147986, 197943 150070, 197892 150737, 197595 151074, 197474 151368, 197731 151905, 197810 152027, 197966 152682, 197967 153701, 197954 154400, 197958 154622, 197915 155329, 197903 155412, 197909 156283, 198039 159371, 198126 160814, 197956 161292, 197763 161129, 197502 161316, 197380 161470, 197881 162110, 198054 162796, 198098 163516, 198118 164579, 198111 165602, 198053 166530, 198005 167051, 197989 167743, 198046 168793, 198058 169212, 198148 171146, 198165 171965, 198161 172709, 198125 173503, 198126 174004, 198105 174661, 198158 176761, 198171 177914, 198072 180939, 197976 182091, 197906 184105, 197785 184452, 197708 184511, 197328 184602, 196833 184576, 196689 184496, 196538 184146, 196380 183296, 196072 180728, 196021 180495, 195928 180561, 195978 180309, 195903 179920, 195905 179718, 195846 179101, 195747 178518, 195597 179131, 195680 179475, 195658 179748, 195714 180342, 195804 180906, 195857 181449, 195972 181789, 195964 181954, 196036 182457, 196144 183440, 196171 184125, 196121 184348, 195976 184541, 196206 184567, 196309 184624, 196313 184717, 196465 184988, 196492 185129, 196623 185274, 197002 184638, 197670 184634, 197919 184724, 198038 184951, 198127 185524, 198159 187024, 198157 187411, 198192 189029, 198157 190303, 198146 191317, 198190 192935, 198264 196789, 198262 197451, 198279 198108, 198264 198952, 198143 200792, 198120 201790, 198110 205340, 198124 207092, 198081 209002, 198082 210397, 198106 212849, 198138 214541, 198136 215847, 198148 216267, 198143 217185, 198179 218509, 198256 219862, 198281 221341, 198318 222395, 198329 222991, 198351 223492, 198368 226035, 198266 227712, 198212 228283, 198166 228642, 198131 229429, 198152 230091, 198191 230779, 198220 231956, 198262 232680, 198290 233739, 198292 234335, 198261 235453, 198250 236759, 198296 238521, 198306 239245, 198290 240144, 198209 242819, 198121 243957, 198038 246213, 197926 246413, 197662 246482, 197819 246479, 197976 246608, 198159 246990, 198235 247688, 198262 248855, 198282 250763, 198276 251220, 198294 252049, 198318 252649, 198356 254840, 198323 256215, 198379 258614, 198374 259744, 198282 260440, 198243 261135, 198241 262307, 198204 264037, 198169 264568, 198146 265461, 198162 266195, 198249 267136, 198269 267690, 198245 267863, 198209 268405, 198096 268996, 197988 269763, 197969 271124, 198050 272537, 198078 273756, 198234 275179, 193720 275179, 193685 274563, 193643 275179, 190079 275178, 190011 273738, 190063 271654, 190116 267968, 190149 266686, 190368 265983, 190412 265318, 190327 264644, 190196 263998, 190175 263173, 190146 262520, 190144 261870, 190113 261139, 190108 260430, 190173 258279, 190197 257074, 190316 255366, 190282 254633, 190175 253918, 190135 253212, 190125 251943, 190178 247902, 190223 247371, 190333 247044, 190639 246921, 191575 246902, 191881 246870, 192882 246810, 192955 246844, 193065 246995, 193146 247319, 193167 247747, 193119 248499, 193101 249583, 193107 249632, 193089 250155, 193128 250347, 193032 250777, 192857 252295, 192804 253033, 192937 253719, 193013 252664, 193046 252009, 193131 251585, 193101 251377, 193237 251042, 193615 248580, 193690 247117, 193651 246998, 193736 246732, 193921 246679, 194752 246670, 195133 246836, 195131 247272, 195177 247788, 194974 247824, 194874 249182, 194931 249582, 194808 249597, 194738 250356, 194654 250836, 194672 250968, 194594 251204, 194477 252034, 194427 252844, 194412 253727, 194438 254301, 194471 255510, 194573 256179, 194658 256866, 194709 257746, 194918 258507, 194912 258918, 194987 259617, 195125 260300, 195261 259610, 195165 259116, 195142 258914, 195033 258222, 195013 257533, 194913 256853, 194901 256191, 194820 255543, 194777 254893, 194759 254205, 194757 252983, 194779 252257, 194850 251485, 194845 250996, 194909 250385, 195027 249948, 195135 248899, 195131 248799, 195262 247887, 195311 247058, 195463 246650, 195523 246590, 195822 246563, 195615 246230, 195591 245812, 195517 245453, 195561 245281, 195445 245126, 195627 245092, 195608 244394, 195537 243896, 195349 244047, 195370 244710, 195524 244915, 195342 244994, 195276 245240, 195416 245878, 195194 246424, 194838 246569, 194320 246552, 193779 246506, 193469 246422, 193324 245962, 193261 245166, 193214 245025, 193245 244938, 193251 244075, 193197 243914, 193185 243344, 193212 242885, 193166 242160, 193116 240365, 193079 239667, 193009 239079, 192913 238448, 193005 237864, 192975 237161, 192821 235432, 192794 235314, 192782 234738, 192711 233573, 192683 232960, 192643 231453, 192633 229783, 192648 229054, 192738 228394, 192756 227614, 192600 226911, 192580 226892, 192487 226332, 192275 226214, 192247 226902, 192101 227636, 192175 228349, 192329 229069, 192318 229368, 192327 231098, 192355 232462, 192430 234133, 192480 234953, 192513 235257, 192547 235895, 192577 236047, 192541 236297, 192577 237196, 192676 238086, 192757 238465, 192769 239111, 192794 239349, 192818 240263, 192834 240354, 192862 240865, 192879 240964, 192870 241673, 192898 243459, 192846 244475, 192912 244875, 192887 245428, 192878 245965, 192722 246352, 192383 246417, 191500 246308, 190689 246164, 190157 246017, 190048 245880, 190020 245729, 190079 243431, 190073 242776, 190032 242249, 189995 241316, 189942 240500, 189963 239848, 190007 239360, 190058 238544, 190038 237850, 189890 236199, 189877 234905, 189886 233768, 189992 232831, 190265 231773, 190361 231110, 190350 230171, 190352 229114, 190277 228427, 190039 227700, 189911 227014, 189893 226231, 189898 225037, 189966 220139, 189886 218314, 189907 217131, 189908 216382, 189882 215438, 189851 213545, 189876 211180, 189912 209435, 189911 208541, 189883 206660, 189894 204532, 189927 202659, 189963 201614, 190113 200721, 190200 199774, 190063 197992, 189974 195938, 189956 194314, 189896 192906, 189960 190449, 189942 189678, 189881 188780, 189905 187594, 189905 186497, 189939 185209, 190142 184731, 190280 184649, 190748 184552, 191548 184532, 192068 184654, 192522 184510, 192831 184499, 192541 184454, 192378 184089, 192294 183352, 192207 182899, 192224 182815, 192049 181297, 191947 181065, 191971 180885, 191853 180305, 191703 179059, 191736 178986, 191771 178325, 191620 176985, 191558 176857, 191562 176203, 191579 176033, 191338 175254, 191081 174646, 190502 173743, 190096 173009, 189938 172175, 189971 171421, 190097 170672, 190296 169948, 190401 169271, 190397 167362, 190349 166727, 190176 166093, 189972 165475, 189924 164820, 189912 163601, 189924 163009, 189921 162394, 189950 160674, 189997 160364, 190137 160265, 190205 160390, 190567 160724, 190641 160685, 190786 161037, 191068 161281, 191170 161220, 191340 161485, 191335 161618, 191579 162195, 191666 162742, 191733 163285, 191730 163403, 191861 164005, 191890 164630, 191911 164721, 191933 165261, 191971 165814, 191988 166604, 192041 167605, 192090 167737, 192067 167851, 192106 168350, 192082 168518, 192103 169462, 192146 169627, 192266 169577, 192227 169883, 192169 169987, 192151 170750, 192217 172036, 192186 172905, 192139 173519, 192144 174311, 192307 175097, 192517 175873, 193058 177609, 193230 178081, 193429 178858, 193527 179423, 193746 180173, 193965 181039, 194186 181972, 194486 183115, 194546 183564, 194522 184140, 194409 184460, 194689 184470, 195091 184602, 195178 184579, 195106 184574, 195012 184485, 194977 183824, 194896 183414, 194742 182505, 194534 181556, 194218 180256, 194031 179341, 193845 178580, 193675 178017, 193626 177765, 193466 177247, 193199 176568, 193037 176316, 192888 176172, 192864 175841, 192760 175333, 192680 175345, 192680 175072, 192579 174535, 192461 173530, 192463 172745, 192487 171993, 192589 171242, 192525 170388, 192446 169859, 192460 169165, 192403 167906, 192413 167824, 192379 166537, 192337 165881, 192316 165232, 192304 165130, 192388 163959, 192325 163389, 192328 163345, 192151 162497, 192004 161526, 191987 160912, 191804 160713, 191482 160056, 191253 159315, 191233 158533, 191235 157850, 191189 157150, 191154 155774, 191002 156126, 190985 156441, 190905 157180, 191153 157787, 190916 157569, 190847 157624, 190906 157896, 191155 158474, 190944 158318, 190927 158589, 190953 159243, 191168 159853, 191349 160639, 191219 160585, 191173 160785, 191015 160600, 190742 160103, 190005 158678, 189887 156181, 189880 154961, 189888 153069, 189867 152481, 189891 150260, 190022 149515, 190335 149065, 189980 148522, 189202 147175, 189113 148121, 188932 148781, 188901 149601, 188854 150377, 189002 151348, 189058 152066, 189074 153401, 189064 154839, 189024 155786, 189011 157981, 188963 158751, 188955 159524, 189075 160259, 189028 160987, 189020 161519, 188984 162406, 189018 163599, 188978 164281, 188919 165745, 188705 166093, 188388 166234, 188032 166259, 187555 166219, 187390 166132, 187214 166104, 186681 166152, 186408 166088, 186163 166273, 185095 166274, 184984 166147, 185041 166059, 184948 165383, 184782 165412, 184779 165944, 184719 166075, 184430 166257, 183688 166321, 183237 166265, 183097 165702, 182982 164978, 183001 164602, 183078 164238, 183121 163646, 183078 162869, 183060 162805, 182962 163237, 182986 163361, 182932 164223, 182975 164614, 182952 164977, 182787 165651, 182560 166249, 181877 166226, 181499 166070, 181204 165482, 181152 165132, 181116 164154, 181107 161326, 181076 160315, 181030 159410, 181039 158201, 181035 157069, 181042 156518, 181037 155941, 181011 155442, 181029 153480, 180690 153967, 179915 154689, 180089 155358, 180144 155503, 180296 156000, 180366 156711, 180368 158506, 180343 160696, 180312 162390, 180305 163625, 180366 164900, 180376 165616, 180348 166488, 180348 167432, 180382 168633, 180406 170177, 180404 171895, 180346 174654, 180379 177365, 180367 179699, 180328 181607, 180298 182535, 180164 183381, 180055 184305, 180100 185163, 180169 185917, 180236 187143, 180286 188741, 180281 189502, 180347 191863, 180299 193912, 180303 194629, 180384 196037, 180330 199485, 180217 199955, 179950 200065, 180198 200062, 180567 200146, 180693 200525, 180751 201077, 180783 202030, 180780 202682, 180807 204260, 180832 204794, 180876 206712, 180837 207736, 180900 210366, 180777 211226, 180749 212002, 180745 212783, 180726 213720, 180710 213873, 180667 215028, 180705 215750, 180783 216485, 180761 217177, 180605 217828, 180497 218495, 180480 219229, 180497 219808, 180564 220710, 180571 221099, 180613 221859, 180728 222566, 180786 223225, 180814 224883, 180834 225524, 180857 227458, 180786 228301, 180735 229231, 180809 230810, 180819 231874, 180808 232495, 180790 232906, 180791 233896, 180715 234652, 180536 235308, 180504 236128, 180457 236900, 180606 237873, 180661 238593, 180677 239931, 180669 241359, 180630 242292, 180615 244507, 180566 245282, 180558 246050, 180678 246785, 180631 247514, 180623 248048, 180588 248920, 180621 250125, 180582 250808, 180522 252272, 180309 252619, 179991 252761, 179635 252786, 179158 252745, 178993 252659, 178819 252631, 178285 252679, 178011 252616, 177765 252799, 177032 252807, 176678 252777, 176587 252672, 176644 252582, 176551 251910, 176385 251939, 176384 252470, 176322 252601, 176034 252784, 175287 252849, 174840 252792, 174701 252228, 174586 251505, 174604 251129, 174681 250766, 174725 250161, 174681 249397, 174663 249331, 174566 249764, 174590 249888, 174536 250750, 174579 251153, 174556 251504, 174391 252178, 174164 252775, 173480 252752, 173102 252597, 172804 252019, 172756 251690, 172715 250338, 172713 248030, 172684 246944, 172634 245798, 172641 242482, 172615 241970, 172613 241330, 172631 240249, 172620 239695, 172662 237268, 172806 235100, 172885 234184, 172882 233397, 172707 232535, 172651 231755, 172645 230968, 172751 229685, 172799 229328, 172847 228591, 172855 227767, 172823 227034, 172778 226450, 172762 226061, 172700 225441, 172495 221653, 172504 220898, 172530 220515, 172602 216618, 172653 215894, 172878 215187, 172822 214447, 172669 213672, 172627 212808, 172621 212118, 172587 211242, 172649 209574, 172677 208441, 172768 207486, 172798 206804, 172689 206149, 172608 205489, 172597 204980, 172644 202288, 172639 201794, 172671 200979, 172965 200420, 174331 200378, 175382 200325, 175521 200415, 175617 200582, 175625 200760, 175706 201026, 175651 201114, 175680 201312, 175634 201381, 175615 201859, 175644 201951, 175614 202218, 175575 203004, 175578 203723, 175516 204000, 175584 204264, 175524 204440, 175605 204348, 175777 203193, 175826 203120, 176113 201556, 176140 200783, 176114 200457, 176167 200338, 176349 200250, 175637 200251, 175226 200103, 174785 200214, 174172 200171, 173994 200115, 173882 200011, 173884 199821, 173793 199248, 173788 198935, 173703 199307, 173501 199811, 173357 200047, 172639 200073, 172378 199984, 172224 199511, 172170 198194, 172137 195413, 172176 193338, 172119 191158, 172054 187393, 172057 186870, 172036 185993, 172073 185078, 172129 184388, 172189 183359, 172216 182302, 172208 181125, 172221 178730, 172210 176775, 172231 175534, 172267 174376, 172262 172921, 172239 170735, 172203 169588, 172202 167958, 172191 166877, 172201 166203, 172196 165276, 171870 165083, 172041 165793, 172041 166608, 171922 168997, 171936 169941, 171995 171091, 172011 171708, 171998 173158, 171981 173723, 171972 176018, 171825 176754, 171734 177109, 171643 179584, 171689 179975, 171855 181765, 171866 183058, 171862 185335, 171827 186629, 171810 189678, 171759 190868, 171749 191761, 171769 192412, 171870 193059, 171818 194159, 171805 195064, 171776 195798, 171807 197028, 171810 197823, 171702 200589, 171527 200988, 171282 201197, 170878 201112, 170748 200943, 170637 200468, 170606 199761, 170485 199097, 170398 198096, 170147 195995, 169904 194659, 169820 193608, 169635 192700, 169572 192675, 169590 192497, 169416 191812, 169039 190460, 168993 189801, 168981 189038, 168917 188423, 168854 187624, 168853 187042, 168820 187023, 168822 186492, 169143 184469, 169187 184283, 169319 182983, 169440 182430, 169546 181748, 169720 181049, 169934 180331, 169947 180341, 170242 179774, 170459 179098, 170473 178728, 170531 178059, 170629 177335, 170692 175832, 170709 174978, 170334 174970, 170275 175821, 170263 176459, 170225 176995, 170189 177750, 170169 178424, 170011 179086, 169760 179791, 169625 179913, 169462 180256, 169324 180680, 169129 181719, 168989 182303, 168917 182962, 169041 183620, 168780 185352, 168621 186326, 168534 186946, 168426 188096, 168426 188457, 168363 189889, 168440 191006, 168354 191179, 168493 191259, 168709 191262, 168923 191370, 169094 191861, 169201 192267, 169347 192002, 169322 192530, 169388 192819, 169412 193204, 169492 193748, 169706 194835, 169749 195559, 169749 195748, 169913 197223, 170057 199026, 170101 199972, 170111 200629, 170066 200942, 169972 201112, 169714 201226, 168814 201260, 168417 201132, 168260 200874, 167976 199777, 167938 199117, 167871 198892, 167622 197336, 167711 196719, 167752 195863, 167595 195409, 167475 195836, 167374 196800, 167409 197085, 167466 197956, 167531 198410, 167499 198792, 167395 199024, 167444 199662, 167576 200877, 167322 201111, 167019 201215, 166812 201161, 166677 201181, 166459 201073, 166248 200713, 166049 199792, 166067 199042, 166053 198382, 165991 197761, 165955 197119, 165941 196452, 165864 195775, 165540 195125, 165502 194406, 165397 192983, 165324 190513, 165510 190234, 165539 190117, 165776 189438, 166055 188777, 166132 188531, 166355 188127, 166303 187540, 166025 188052, 166001 188304, 165927 188243, 165635 188841, 165197 190051, 165169 190202, 165003 190788, 164970 191492, 164871 192237, 164875 192972, 164933 193830, 165055 194599, 165342 196589, 165340 197102, 165401 197852, 165498 198440, 165525 199073, 165600 199599, 165628 200210, 165669 200767, 165548 201172, 165195 201272, 164990 201267, 164744 201171, 164317 200816, 164067 200069, 164024 198788, 164011 197889, 164005 194421, 163923 191739, 163938 190188, 163932 189662, 163953 187624, 164160 186981, 164467 186372, 164836 185756, 164139 185359, 164066 185726, 163925 185226, 163922 183872, 163912 183337, 163958 179676, 164028 178800, 164034 178512, 164120 176909, 164153 176588, 164195 175391, 164176 174909, 163316 174926, 163347 175589, 163251 176906, 163226 177660, 163257 178411, 163403 180144, 163426 182879, 163368 183543, 163252 184293, 163182 184535, 162984 185459, 162923 186130, 162940 187169, 162938 188497, 163009 189112, 163348 190328, 163406 190993, 163423 192639, 163409 194401, 163351 198629, 163364 199217, 163422 200616, 163413 201410, 163386 202455, 163448 205469, 163441 206093, 163454 206384, 163443 208813, 163396 211235, 163429 214580, 163420 216750, 163365 219741, 163265 220691, 163123 221675, 163124 222612, 163174 223208, 163251 224424, 163313 226065, 163329 226757, 163345 228616, 163379 229447, 163395 230381, 163384 231215, 163357 232219, 163347 233536, 163424 234956, 163402 238135, 163386 238987, 163339 239426, 163106 239665, 162760 239789, 161653 239821, 161301 239669, 160832 239834, 160413 239844, 160180 239799, 160128 239450, 159942 238987, 159928 239457, 159861 239701, 159601 239856, 159273 239867, 159266 239927, 159629 239915, 160535 240006, 160938 239974, 161345 240038, 161770 240882, 162085 240125, 162755 240112, 163121 240436, 163188 240752, 163220 241371, 163268 243838, 163280 245271, 163238 247469, 163286 249665, 163366 254762, 163367 256265, 163324 257168, 163244 258416, 163203 259673, 163206 262495, 163190 264186, 163207 266160, 163171 268244, 163154 268504, 163145 269263, 163176 272989, 163191 273326, 163212 275179, 144700 275179, 144712 274792, 144788 274066, 144821 273493, 144971 273125, 145452 272841, 146023 272792, 147449 272773, 152208 272763, 152233 272660, 151428 272736, 150436 272747, 148039 272748, 147465 272740, 147036 272750, 146271 272747, 145483 272728, 144953 272682, 144742 272539, 144487 271888, 144546 271470, 144366 270992, 144415 270197, 144336 269319, 144316 267943, 144346 266960, 144258 266350, 144256 265823, 144206 264601, 144185 264353, 144209 263538, 144167 262793, 144201 262023, 144342 261209, 144491 260157, 144376 258934, 144323 257514, 144357 256882, 144304 256245, 144343 255728, 144280 255041, 144320 254463, 144225 253872, 144297 253309, 144331 252861, 144410 252545, 144579 252398, 144948 252269, 145544 252201, 145280 252167, 145076 252044, 144901 251719, 144993 250786, 145023 250282, 145028 249478, 144887 248646, 144813 247937, 144746 246839, 144655 245970, 144727 245338, 144765 244394, 144719 243225, 144751 241955, 144703 240863, 144749 239931, 144753 239452, 144873 238461, 145101 237975, 145598 237694, 146728 237624, 147335 237620, 148259 237665, 149032 237659, 149379 237631, 150760 237612, 151269 237641, 152331 237735, 152650 237892, 152578 237426, 152018 237410, 151653 237441, 149515 237459, 148965 237433, 147132 237441, 145669 237418, 145208 237316, 144989 236928, 144764 235880, 144811 235012, 144746 234263, 144774 233253, 145006 233150, 145110 233058, 145145 232963, 145194 232160, 144855 231765, 144880 230482, 144899 230226, 144834 229003, 144938 228102, 144856 227504, 144838 225837, 144773 225200, 144792 224635, 144913 224001, 144934 223418, 145065 222888, 145300 222520, 145147 222137, 145097 221641, 145138 221398, 145418 220833, 145251 220111, 145286 219929, 145272 219164, 145495 218163, 145495 217969, 145690 217453, 145328 216644, 145370 215987, 145451 215835, 145372 215699, 145205 214946, 145369 214620, 146051 214564, 146302 214604, 146369 214569, 147387 214580, 148140 214633, 149886 214615, 150346 214704, 150764 214577, 151489 214553, 151493 214270, 150940 214258, 149644 214163, 148337 214234, 147728 214295, 146084 214350, 145501 214350, 145238 214288, 145135 214210, 145023 213887, 145036 213813, 144904 213322, 144849 212450, 144893 211942, 144833 211191, 144866 210552, 144863 209895, 144897 209496, 144867 209022, 144754 208627, 144814 208148, 144828 207584, 144802 206856, 144783 206675, 144753 205673, 144725 205404, 144732 204708, 144761 204416, 144719 203879, 144564 202442, 144609 201648, 144535 200441, 144499 200131, 144494 199487, 144505 199311, 144458 198606, 144557 197874, 144513 197140, 144403 196276, 144470 195060, 144433 194270, 144546 193880, 144564 193258, 144630 192449, 144652 191709, 144613 191304, 144554 190433, 144592 189976, 144587 189361, 144667 188397, 144624 187791, 144595 187560, 144610 186949, 144579 186328, 144631 185986, 144620 185294, 144656 184431, 144678 184255, 144622 183373, 144596 183223, 144504 182183, 144558 181615, 144551 180348, 144660 179762, 144814 179475, 145169 179331, 146039 179297, 145065 179271, 144531 179091, 144407 178927, 144433 177691, 144473 177087, 144453 176806, 144463 176110, 144500 175708, 144519 174628, 144509 174485, 144583 174080, 144550 173417, 144605 172688, 144677 171216, 144669 170950, 144670 169896, 144606 168981, 144454 168276, 144515 167858, 144431 167301, 144478 166037, 144541 165329, 144511 164785, 144530 163830, 144528 163280, 144506 163033, 144514 162422, 144537 161715, 144500 161474, 144517 160325, 144562 160046, 144524 159648, 144631 159280, 144907 158944, 145406 158856, 146707 158822, 147946 158825, 150704 158798, 151042 158785, 152216 158784, 152531 158774, 154217 158779, 155236 158797, 157450 158799, 157489 158547, 157462 157758, 157545 157256, 157540 157003, 157556 156101, 157678 155517, 158121 154939, 158426 154675, 159484 153578, 160022 153054, 160149 152896, 160647 152396, 160994 151837, 161480 151447, 162137 150795, 162499 150550, 162618 150375, 163159 149803, 163258 149667, 163643 149287, 163921 148880, 164078 148762, 164481 148345, 164622 148249, 165028 147716, 165587 147163, 165862 146935, 166385 146451, 166990 145918, 167434 145376, 167940 144884, 168340 144622, 168913 144489, 169160 144497, 169289 144560, 169178 144422, 169131 144264, 170155 143341, 171052 142374, 171511 141958, 172004 141380, 173257 140328, 173472 140044, 173995 139464, 174559 139147, 174750 139134, 175141 139477, 175145 139364, 175575 138849, 176050 138410, 176433 137968, 176845 137616, 177010 137493, 177385 137010, 177829 136529, 178584 135811, 179691 134787, 180110 134382, 180265 134246, 180652 133827, 181157 133346, 181668 132774, 181763 132691, 182239 132223, 182717 131720, 183336 131142, 183690 130735, 184652 129746, 185079 129370, 185646 128839, 186236 128394, 186878 128200, 187900 128249, 188725 128250, 189047 128191, 189338 128211, 189823 128162, 190727 128144, 191524 128170, 192151 128135, 192410 128152), (205036 273709, 205010 274271, 204985 274483, 205015 274774, 205136 274932, 205261 274445, 205274 274168, 205175 273289, 205036 273709), (247820 270238, 247863 270976, 248052 271684, 248027 272433, 248181 272681, 248248 272679, 248238 271456, 248285 270960, 248275 270373, 248213 270297, 248089 270526, 248004 270222, 247893 270155, 247861 269984, 247820 270238), (203773 269999, 203713 270513, 203749 271165, 203815 271517, 203893 271319, 203944 270768, 203950 270268, 203920 269702, 203859 269412, 203773 269999), (191635 271452, 191672 270912, 191644 270827, 191635 271452), (247895 268052, 247426 268749, 247417 269505, 247544 269787, 247736 269505, 247693 269202, 247745 268766, 248162 268118, 248161 267584, 247895 268052), (195319 268434, 195359 268389, 195292 267737, 195319 268434), (195409 264465, 195310 265264, 195376 266003, 195353 266513, 195393 266747, 195322 267369, 195504 267474, 195650 265290, 195490 264773, 195437 264436, 195409 264465), (194064 265183, 194092 265294, 194114 265233, 194083 264660, 194064 265183), (152691 259011, 152712 260009, 152745 260834, 152690 261516, 152724 262290, 152699 263746, 153047 263665, 153026 262962, 152748 262280, 152707 261527, 152808 261253, 152799 261052, 152867 260519, 152883 260094, 152755 259337, 152770 258901, 152711 258436, 152691 259011), (191454 262488, 191405 263188, 191441 263533, 191533 263451, 191507 263183, 191502 262430, 191485 262312, 191454 262488), (195302 261011, 195365 261293, 195377 261710, 195531 262726, 195598 262076, 195488 260965, 195367 260402, 195302 261011), (200531 261940, 200542 262429, 200605 262236, 200586 261856, 200531 261940), (247777 258918, 247752 258941, 247447 259614, 247212 260250, 247121 261304, 247161 261637, 247208 261608, 247213 261545, 247484 260933, 247639 259977, 247742 259677, 247920 259441, 248285 258845, 248195 258163, 247777 258918), (192699 258837, 192728 259018, 192677 259673, 192639 260469, 192621 261201, 192678 261298, 192786 261065, 192758 260906, 192775 260370, 192772 259671, 192789 259519, 192766 258763, 192699 258837), (152745 257572, 152714 258360, 152783 257995, 152825 256945, 152799 256820, 152778 256189, 152745 257572), (192515 256106, 192459 256828, 192500 257377, 192584 256830, 192574 256687, 192590 256108, 192581 255706, 192515 256106), (196796 252899, 196798 253748, 196838 255063, 196814 255286, 196865 255337, 196967 256917, 196969 256531, 197028 256159, 196976 255967, 196975 255342, 197026 255309, 196990 255066, 197005 254441, 196998 254278, 197017 253757, 197003 253099, 196903 252628, 196796 252899), (200886 253409, 200824 254109, 200757 255172, 200733 255873, 200737 256226, 200794 255849, 200913 254730, 200961 253935, 200923 253387, 200886 253409), (192629 254726, 192713 255156, 192987 254712, 192928 254213, 192744 254208, 192629 254726), (246787 250980, 246821 251449, 246777 251695, 246695 251838, 246507 252692, 246457 252763, 246524 253504, 246381 253840, 246336 254141, 246462 254764, 246399 254792, 246479 254893, 246538 254375, 246669 253782, 246749 253503, 246664 253064, 246712 252881, 246849 252725, 247198 251696, 247095 251375, 247208 251145, 246839 250818, 246787 250980), (152779 254035, 152788 253354, 152762 253164, 152779 254035), (152537 249747, 152090 250399, 152174 250996, 152621 251765, 152212 252072, 151954 252128, 151169 252199, 152183 252203, 152595 252360, 152679 252567, 152861 251779, 152859 251633, 152980 250927, 153066 250499, 153066 249565, 152789 249450, 152583 249270, 152537 249747), (147828 252238, 148142 252248, 148898 252226, 147828 252238), (246853 249859, 246813 249993, 246850 250404, 246904 250560, 247249 251097, 247339 250831, 247189 249919, 247135 249786, 246791 249785, 246853 249859), (178949 249400, 178888 250214, 178914 250387, 179007 250405, 179020 250221, 179148 249641, 179078 249303, 178949 249400), (161245 247644, 161320 248226, 161348 248343, 161357 248231, 161332 247638, 161340 247503, 161269 247325, 161245 247644), (177741 247708, 177788 248016, 177871 247793, 177806 246927, 177741 247708), (196884 245487, 196879 246314, 196732 246502, 196475 246571, 196234 246576, 196470 246731, 196691 247210, 196826 246759, 197018 246574, 197335 246494, 197232 246427, 197149 246174, 197128 245885, 197025 245866, 196965 245295, 196884 245487), (161394 246276, 161461 246563, 161459 246072, 161414 246053, 161394 246276), (149054 242941, 149324 243447, 149417 243522, 149540 243510, 149583 243259, 149267 242971, 149121 242920, 149054 242941), (176201 240709, 176253 241344, 176336 241615, 176366 241465, 176280 240577, 176202 240214, 176201 240709), (195320 240717, 195328 241042, 195454 241364, 195425 240829, 195310 240329, 195317 240242, 195249 240095, 195320 240717), (152796 240421, 152744 240917, 152345 241048, 152523 241164, 152577 241260, 152736 241098, 153037 241025, 153008 240492, 152974 240457, 152747 239959, 152796 240421), (247326 236433, 247284 237082, 247259 237739, 247284 238567, 247246 239359, 247285 240868, 247349 240863, 247353 236162, 247326 236433), (195206 238525, 195304 239021, 195302 239138, 195364 239265, 195336 238952, 195261 238402, 195254 238248, 195166 238022, 195206 238525), (244563 235703, 244596 236416, 244438 237024, 244399 237853, 244393 238480, 244447 239121, 244481 238867, 244514 238280, 244503 237869, 244566 237278, 244448 237040, 244632 236607, 244648 236319, 244593 235662, 244563 235703), (159948 237680, 159982 237942, 159938 238326, 159999 238691, 160067 238716, 159962 238322, 160061 237977, 159996 237584, 160046 237300, 159936 237120, 159948 237680), (202126 237510, 202097 237640, 202203 238333, 202228 237641, 202189 237493, 202126 237510), (159960 232550, 159990 233304, 159933 233925, 159920 234523, 159967 235323, 159954 235923, 159978 236439, 160021 236615, 159943 237075, 160109 236830, 160119 235214, 160131 234678, 160106 233665, 160061 233304, 160076 232670, 160042 232155, 159960 232550), (174626 236039, 174665 236339, 174709 235883, 174670 235705, 174626 236039), (195122 236194, 195104 235803, 195020 235516, 195122 236194), (174867 234131, 174826 234502, 174883 234818, 174920 234315, 174993 233799, 174867 234131), (194902 233254, 194959 234032, 194964 234370, 195114 234599, 195110 234054, 194977 233503, 195023 232980, 194902 233254), (200547 234235, 200588 234521, 200566 233909, 200547 234235), (244623 232450, 244678 233094, 244659 233424, 244772 233575, 244779 232785, 244629 232298, 244623 232450), (200226 232669, 200254 233503, 200286 233571, 200419 233377, 200321 233209, 200320 232514, 200249 232225, 200226 232669), (194858 231416, 194864 231721, 194941 232087, 194931 232411, 195061 232650, 195009 231489, 194997 230977, 194759 230017, 194858 231416), (194729 227865, 194791 228546, 194781 228793, 194844 229292, 194947 229670, 194924 229310, 194755 227846, 194639 226573, 194729 227865), (204060 225066, 203953 225846, 203876 226534, 204025 227467, 204010 227792, 204130 228345, 204241 226660, 204247 225857, 204102 225142, 204057 224673, 204060 225066), (200033 223536, 200048 224065, 200116 223701, 200099 223374, 200033 223536), (194475 219745, 194495 220662, 194467 221792, 194496 222933, 194567 221934, 194572 220917, 194546 220717, 194613 220247, 194528 219620, 194475 219745), (203725 220115, 203774 220787, 203791 221321, 203825 221565, 203861 222286, 203934 222612, 204062 222140, 203999 221846, 203915 220985, 203878 220783, 203887 220252, 203776 219454, 203725 220115), (201298 221541, 201362 221761, 201372 222338, 201415 222430, 201475 222213, 201546 221384, 201472 221267, 201298 221541), (174162 219334, 174126 219861, 174239 220399, 174480 220660, 174352 220066, 174225 219396, 174181 219267, 174162 219334), (201193 219122, 201168 219514, 201200 220274, 201219 220470, 201362 219511, 201420 218673, 201331 218508, 201144 218358, 201193 219122), (203389 217451, 203471 217572, 203424 218122, 203458 218269, 203438 218792, 203486 219300, 203620 218781, 203602 218108, 203568 217854, 203520 216948, 203389 217451), (201078 216815, 201097 217629, 201189 216818, 201215 215795, 201078 216815), (205557 213368, 205409 213545, 205454 215387, 205594 217406, 205563 215981, 205564 214747, 205591 214111, 205653 213367, 205557 213368), (177745 215035, 177806 215615, 177805 216457, 177795 216644, 177837 217182, 177856 217289, 177888 217125, 177959 216442, 177996 215740, 178055 215568, 178122 215013, 178034 214506, 177874 214443, 177745 215035), (204629 192513, 204789 192612, 204698 193219, 204734 193435, 204702 193922, 204690 194622, 204616 194850, 204560 195316, 204431 195451, 204294 196007, 204364 196707, 204346 197246, 204353 197399, 204281 198322, 204267 198670, 204210 199233, 204217 199400, 204117 200062, 204067 200580, 203882 202121, 203710 203669, 203637 204884, 203606 205027, 203665 205548, 203580 206130, 203486 206192, 203601 206454, 203604 206621, 203724 207598, 203558 207788, 203521 207896, 203574 208957, 203409 209336, 203330 210102, 203298 210302, 203263 210834, 203206 211147, 203029 212911, 203021 213573, 203066 214188, 203118 214640, 203103 214999, 203155 216125, 203197 216355, 203244 217163, 203460 216770, 203374 216443, 203455 215954, 203390 215424, 203380 214704, 203358 214253, 203364 212436, 203415 211733, 203413 211475, 203458 210841, 203429 210627, 203496 210126, 203683 209329, 203710 208798, 203795 207944, 203866 207445, 203914 206221, 204116 206085, 204419 206039, 204287 205881, 204189 205314, 204186 204456, 204212 203960, 204234 203212, 204231 203023, 204251 202496, 204259 201860, 204295 201234, 204468 199271, 204480 198975, 204529 198277, 204518 198097, 204618 197397, 204670 196723, 204724 195779, 204719 195157, 204732 194519, 204841 193926, 204892 193228, 204818 192278, 204629 192513), (201332 213488, 201216 214893, 201249 215252, 201418 215112, 201576 214854, 201581 214772, 201362 214145, 201381 213568, 201373 213489, 201393 212892, 201332 213488), (231855 213838, 232042 214241, 232111 214015, 232014 213356, 232010 213097, 231947 213039, 231855 213838), (173883 212862, 173949 213705, 173969 213807, 173983 213705, 173979 213057, 173901 212139, 173883 212862), (177959 211937, 178042 212199, 178052 212024, 177984 211672, 177959 211937), (201697 186599, 201810 187800, 201930 188294, 202005 188835, 202001 189527, 202165 190777, 202230 191137, 202268 192156, 202397 193290, 202394 193956, 202444 194359, 202483 194858, 202522 195589, 202532 196243, 202553 196736, 202545 198545, 202514 199297, 202542 199510, 202457 200022, 202408 201040, 202492 201511, 202376 201316, 202332 201718, 202405 202044, 202292 201923, 202263 202005, 202169 203287, 202266 203573, 202110 203588, 202229 204020, 202062 204020, 202187 204431, 202066 204518, 201988 205600, 202004 206023, 201921 206286, 201597 206394, 201690 206568, 201747 206850, 201764 207274, 201728 207962, 201660 210734, 201562 211477, 201685 211631, 201636 211846, 201741 211683, 201810 211204, 201859 210593, 202006 209355, 202220 208074, 202220 207725, 202265 206955, 202202 206795, 202231 206473, 202349 206212, 202398 206191, 202237 205691, 202365 205386, 202335 205033, 202117 204646, 202354 204830, 202444 204830, 202292 204453, 202378 204439, 202358 204097, 202398 204095, 202425 203787, 202388 203665, 202439 203644, 202602 201566, 202681 201162, 202733 200585, 202773 200395, 202824 199646, 202855 199392, 202885 198580, 202910 198160, 202908 196684, 202893 196245, 202887 195342, 202871 194840, 202715 193253, 202644 192276, 202529 191475, 202346 189463, 202271 189340, 202296 189114, 202153 188464, 202170 188121, 202097 187502, 202032 186823, 201848 186256, 201798 185521, 201758 185236, 201697 186599), (175123 211263, 175213 211653, 175328 211270, 175250 210420, 175123 211263), (191878 211554, 191958 211491, 191994 211024, 191880 210838, 191878 211554), (230714 210796, 230767 211008, 230781 210505, 230714 210796), (176990 204502, 176940 205311, 176947 205408, 176925 206477, 177046 207636, 177156 208109, 177241 208800, 177365 209592, 177480 210448, 177595 210814, 177673 210355, 177497 209586, 177401 209085, 177438 208829, 177244 208104, 177341 207506, 177263 206697, 177242 205648, 177247 205043, 177116 204391, 177252 204261, 177056 204066, 176990 204502), (161338 208376, 161504 209268, 161292 209950, 161264 210277, 161337 210319, 161347 210115, 161538 209315, 161508 208543, 161381 208109, 161338 208376), (230550 209397, 230559 210069, 230622 209388, 230587 209221, 230550 209397), (232369 207814, 232334 208618, 232362 208794, 232389 208618, 232377 207931, 232537 207237, 232369 207814), (174980 208087, 175013 208695, 175121 208086, 175097 207710, 174980 208087), (179328 205404, 179344 206018, 179391 206519, 179395 206664, 179447 207196, 179455 207554, 179574 207753, 179599 207342, 179560 206667, 179544 206184, 179480 205277, 179401 205080, 179328 205404), (175206 205931, 175141 206823, 175164 206895, 175287 206705, 175239 206559, 175301 205791, 175297 205180, 175206 205931), (205643 205960, 204785 206043, 204991 206128, 205270 206463, 205343 206846, 205426 206352, 205656 205998, 206181 205952, 205643 205960), (200443 205602, 200445 206148, 200346 206395, 201033 206344, 200857 206173, 200655 205888, 200528 205498, 200443 205602), (177337 202292, 177391 202631, 177236 203159, 177172 203730, 177301 204178, 177353 203506, 177277 203232, 177455 202995, 177539 202335, 177488 202039, 177548 201787, 177451 201590, 177337 202292), (177624 200894, 177540 201156, 177746 201129, 177770 200710, 177624 200894), (176853 200021, 176561 200223, 177253 200212, 177529 200413, 177781 200372, 178070 200150, 178446 200118, 178358 200051, 178155 200031, 178051 200123, 177708 200223, 177279 200225, 177030 200080, 176872 199767, 176853 200021), (178907 200202, 179009 200307, 179076 200257, 179374 200244, 179472 200191, 178907 200202), (200171 193180, 200213 193482, 200195 194026, 200211 194285, 200228 195005, 200246 195284, 200261 195987, 200356 196947, 200376 197546, 200456 198481, 200543 198705, 200572 198651, 200565 197975, 200488 196318, 200483 195517, 200460 195296, 200430 194445, 200413 193539, 200358 193363, 200275 192835, 200286 192697, 200221 192522, 200171 193180), (176812 193659, 176864 194592, 176874 195613, 176971 196715, 176976 196864, 177057 197569, 177069 196930, 177064 196659, 177091 195390, 177042 194852, 176988 193663, 176868 192934, 176812 193659), (246067 195478, 246190 196451, 246274 196027, 246253 195475, 246067 195478), (167917 193899, 168024 194534, 167787 194513, 167760 195004, 167683 195209, 167859 195517, 168054 194591, 168043 194055, 168057 193916, 167970 193470, 167917 193899), (246011 189379, 246017 189859, 245967 190238, 245989 192001, 246038 191929, 246004 192086, 246046 192488, 245999 192743, 245981 193861, 246049 193860, 245999 194065, 246030 194462, 245982 194731, 246050 195333, 246244 194702, 246276 194018, 246283 193352, 246210 189725, 246209 189186, 246168 188699, 246011 189379), (173983 193717, 173987 194337, 173974 194534, 174022 194738, 174084 194311, 174110 193810, 174145 193393, 174090 192595, 173983 193717), (227777 193488, 227762 193676, 227823 193903, 227873 193403, 227777 193488), (191669 192716, 191517 193694, 191608 193873, 191769 193456, 191786 192603, 191744 192556, 191669 192716), (168097 192552, 168134 193105, 168062 193237, 168188 193392, 168207 193254, 168118 192399, 168097 192552), (160322 177695, 160281 178342, 160303 178887, 160456 180921, 160578 183057, 160643 184726, 160680 188122, 160621 188822, 160569 189240, 160539 189870, 160671 190500, 160782 191143, 160870 192031, 160918 193203, 160974 193114, 160964 193021, 161028 192444, 161029 192171, 161098 191577, 161120 191124, 161248 189994, 161273 189851, 161053 188224, 161040 185390, 160923 182027, 160880 181298, 160793 179031, 160712 178071, 160660 177692, 160655 177221, 160609 176351, 160255 176336, 160322 177695), (204546 190576, 204557 191442, 204583 191810, 204605 192495, 204816 191680, 204779 190232, 204761 189896, 204546 190576), (168227 191871, 168307 192046, 168332 191877, 168278 191366, 168227 191871), (193242 189697, 193301 190202, 193304 190998, 193381 191689, 193421 190835, 193353 190273, 193352 189703, 193368 189478, 193316 189140, 193354 188849, 193214 188735, 193242 189697), (204412 186998, 204392 187709, 204616 187819, 204515 188361, 204546 188582, 204536 189624, 204615 189031, 204623 188913, 204711 188347, 204709 187667, 204686 187532, 204402 187664, 204450 186995, 204427 186894, 204412 186998), (152945 188667, 153137 188664, 153138 188236, 152929 188115, 152945 188667), (193344 187964, 193330 188083, 193420 188317, 193366 187678, 193368 187414, 193267 187155, 193344 187964), (248032 178717, 248068 182641, 248043 183307, 247931 184522, 247948 185177, 248109 185974, 248169 186978, 248258 187785, 248276 188309, 248320 187663, 248258 187013, 248364 186325, 248387 185607, 248313 184914, 248298 183805, 248266 183433, 248314 183077, 248312 182380, 248283 181944, 248321 181262, 248372 181020, 248359 180124, 248375 179914, 248267 179322, 248303 178877, 248202 177880, 248246 177403, 248255 176508, 247968 176503, 248032 178717), (166399 187422, 166368 188107, 166676 187490, 166678 186793, 166399 187422), (245582 176486, 245651 177190, 245711 178724, 245675 179822, 245729 181530, 245810 183302, 245876 184141, 245980 186304, 245998 187839, 246061 187255, 246082 186650, 246007 185171, 246006 184920, 245957 184264, 246006 183220, 245974 182608, 245935 182229, 245958 180969, 245920 179906, 245871 177794, 245810 176481, 245582 176486), (238998 187574, 239100 187565, 239199 187404, 239068 186936, 238998 187574), (167197 184511, 167136 185099, 167026 185765, 166903 186666, 166691 186784, 166808 187211, 166974 186850, 167051 186563, 167234 186150, 167399 185539, 167452 184862, 167426 184401, 167327 184231, 167197 184511), (205785 184863, 205830 186461, 205873 187081, 205918 187081, 205899 186932, 205961 186463, 205950 186069, 205967 185548, 205956 184687, 205901 184369, 205785 184863), (240213 184281, 240226 184468, 240173 184992, 240203 185477, 240320 186232, 240310 186336, 240434 186647, 240443 186415, 240323 185477, 240460 185286, 240580 185277, 240546 184990, 240421 184466, 240457 183919, 240213 184281), (237962 185970, 237970 185728, 237942 185445, 237962 185970), (239141 185577, 239184 185719, 239180 185599, 239111 185088, 239080 184946, 239141 185577), (168656 175857, 168541 176320, 168514 176614, 168322 177042, 168013 178161, 167993 178403, 167854 178746, 167636 179511, 167603 179713, 167442 180155, 167439 180272, 167414 180221, 167212 180790, 167174 181046, 167034 181263, 166883 181694, 166596 182303, 166434 182582, 166333 182961, 166234 183021, 165831 183918, 165797 184112, 165766 184059, 165522 184538, 165548 185099, 165456 184911, 165392 184987, 165317 184901, 165215 184932, 165153 185159, 165214 185536, 165445 185428, 165615 185223, 165661 184996, 165715 184968, 165903 184450, 166096 184132, 166440 183371, 166448 182827, 166549 183122, 166624 183044, 166736 182748, 166715 182112, 166814 182569, 167014 182115, 167014 181652, 167100 181929, 167313 181489, 167330 181334, 167393 181269, 167586 180656, 167805 180049, 168198 178657, 168646 176968, 168744 176350, 168809 175806, 168656 175857), (235958 184195, 236025 184822, 236072 184841, 236007 184193, 235982 184130, 235958 184195), (200200 183488, 200221 184186, 200256 184468, 200284 184187, 200285 183440, 200248 182728, 200214 182292, 200200 183488), (203055 183103, 203137 183828, 203247 182992, 203191 182226, 203055 183103), (258533 170918, 258025 171330, 257788 171452, 257414 171507, 256839 170956, 256603 170919, 256473 170770, 256332 171086, 256204 171849, 255715 171684, 255670 172206, 255653 172793, 255618 172847, 255658 173119, 255583 173732, 255475 174054, 255295 174277, 254850 174558, 254780 174663, 254969 174779, 255067 174947, 255236 175551, 255295 176183, 255343 176384, 255303 176971, 255432 177401, 255425 177902, 255510 178385, 255388 178802, 255464 179162, 255470 179407, 255560 179798, 255526 179989, 255543 180351, 255431 180723, 255455 181322, 255385 181681, 255403 182070, 255117 182498, 255109 182618, 255361 182749, 255601 182955, 255757 183221, 255790 183615, 256079 183112, 256258 182590, 256586 181933, 256790 181621, 256997 180892, 257317 180079, 257886 178809, 258777 177069, 259277 175973, 259656 175502, 259236 175306, 259070 175286, 258869 174878, 258701 174277, 258968 174208, 259157 174066, 259271 173487, 259444 173474, 259634 173272, 259681 173150, 259486 173050, 259656 172717, 259608 172244, 259478 171605, 259052 171337, 258519 171708, 258832 171267, 258915 171018, 258660 170768, 258533 170918), (201861 177762, 201867 178156, 201835 178686, 201833 178882, 201794 179385, 201651 182144, 201669 182837, 201740 183339, 201890 182844, 201986 182649, 202070 182154, 202068 181295, 201938 180771, 201967 180080, 201949 179726, 201975 178819, 201973 177982, 201927 177659, 201861 177762), (238931 181210, 238902 181830, 239014 182746, 239133 183246, 239189 182970, 239193 182225, 239114 181437, 238996 181006, 238931 181210), (205659 182818, 205678 183225, 205700 182816, 205710 182108, 205688 182073, 205659 182818), (240796 179333, 240742 180040, 240759 180509, 240717 180734, 240816 180934, 240854 180860, 240908 180041, 240900 179524, 240942 179011, 240858 178840, 240796 179333), (177399 179315, 177377 179795, 177502 180666, 177523 180577, 177589 179765, 177580 179330, 177490 179103, 177399 179315), (222126 170842, 221864 171589, 221631 171917, 221550 172352, 221573 172952, 221458 172458, 221306 172540, 221165 173188, 221037 173490, 220858 174300, 220584 175435, 220495 175930, 220421 176737, 220392 177698, 220459 178429, 220579 179130, 220803 179481, 220888 179446, 220945 179031, 220969 177724, 221068 176226, 221093 176086, 221145 175469, 221278 174561, 221424 173765, 221580 173322, 221848 172424, 222158 171683, 222389 171017, 222409 170981, 222583 170184, 222569 170074, 222126 170842), (146545 179301, 147300 179320, 148040 179387, 149250 179445, 150186 179400, 150829 179335, 152323 179294, 146545 179301), (193894 158758, 194101 159394, 194125 160080, 194232 160696, 194422 161415, 194543 162007, 194647 162635, 194684 163761, 194834 164468, 194859 165026, 194780 166345, 194786 166496, 194674 167512, 194554 169229, 194468 170111, 194419 171120, 194345 171770, 194333 172468, 194319 172646, 194358 173428, 194491 174210, 194850 175751, 195009 176484, 195203 177022, 195306 176877, 195290 177339, 195406 178197, 195536 179026, 195734 178444, 195601 177833, 195535 177163, 195442 176462, 195357 176131, 195234 175979, 195235 175739, 195184 175189, 195184 174192, 195167 174025, 195233 173803, 195382 172640, 195504 171887, 195679 171147, 195630 170616, 195848 170517, 195932 169967, 196126 169095, 196397 168346, 196470 167670, 196331 167448, 196265 167488, 196243 167651, 196303 168233, 196079 168038, 195967 168297, 195957 168611, 196037 169002, 195838 169377, 195741 169689, 195820 170368, 195560 170270, 195502 170434, 195446 171136, 195255 171468, 195111 171867, 195017 172529, 195073 172914, 194937 172681, 194753 172629, 194630 171867, 194630 171524, 194571 171116, 194623 170297, 194756 168962, 194777 168624, 194869 168001, 194925 167316, 195097 166768, 195202 166255, 195260 165024, 195216 164441, 195274 163821, 195240 163319, 195152 162771, 195010 161757, 194830 160639, 194641 159993, 194554 159613, 194441 159384, 194218 158784, 194125 159258, 194167 158676, 194032 158467, 193954 158104, 193894 158758), (166078 177081, 165946 177692, 165681 177884, 165377 178407, 165384 178732, 165532 178813, 165874 178488, 166090 177880, 166175 177499, 166316 177266, 166160 177007, 166078 177081), (164890 176516, 164768 177123, 165082 177518, 165165 177124, 165193 176268, 164890 176516), (166807 174942, 166956 175417, 166714 175959, 166809 176042, 166649 176136, 166468 176642, 166470 177036, 166648 176672, 166980 176109, 167272 175438, 167085 174939, 166807 174942), (235715 175711, 235729 175444, 235683 175206, 235715 175711), (227303 174676, 227619 175674, 227654 175678, 227649 175564, 227320 174674, 227325 174481, 227303 174676), (168707 175489, 168839 175586, 168854 175667, 168945 175529, 169157 174991, 168729 174976, 168707 175489), (205286 171819, 205320 171880, 205271 172498, 205313 172735, 205373 173344, 205382 173868, 205474 174524, 205753 174620, 205666 173866, 205550 173522, 205465 172990, 205456 172494, 205345 171756, 205286 171819), (178350 172158, 178242 172939, 178249 173688, 178208 174287, 178412 173869, 178279 172969, 178480 172706, 178487 172046, 178377 171628, 178350 172158), (237360 173322, 237505 173849, 237453 173155, 237302 172512, 237360 173322), (227078 173082, 227107 173181, 227176 172962, 227160 172650, 227078 173082), (217503 169812, 217635 171074, 217845 170628, 217774 169808, 217664 169389, 217545 169375, 217503 169812), (219779 163326, 219640 163961, 219537 164592, 219285 165202, 218969 165841, 219017 166492, 219222 167783, 219487 168474, 219692 168836, 219784 169088, 219855 169487, 219882 170099, 220301 170549, 220462 170622, 220535 170597, 220829 170670, 221236 170448, 221336 169889, 221498 170039, 221654 169829, 222183 168514, 222235 167581, 222189 167237, 222198 166618, 222249 165872, 222345 165544, 222350 165379, 222037 164844, 221561 164634, 221518 165196, 221813 165589, 221999 166064, 222073 166531, 222055 167085, 221824 167044, 221775 167101, 221777 167200, 221670 167434, 221610 168087, 221720 168135, 221963 168039, 221899 168447, 221757 169076, 221577 169608, 221347 169394, 221306 169481, 220901 169568, 220485 169265, 220394 168998, 220252 168767, 220174 168538, 220012 168298, 219988 168322, 219704 167337, 219641 166826, 219476 166491, 219522 165863, 219731 165675, 219900 164901, 219947 164332, 220045 163681, 220111 163400, 220013 162958, 219779 163326), (235937 169403, 235965 170155, 235951 170303, 236003 170610, 236061 169829, 236112 169590, 235998 169206, 235937 169403), (203458 167700, 203481 167968, 203501 168683, 203572 169057, 203674 169725, 203676 169945, 203781 170386, 203785 169063, 203909 168389, 203845 168001, 203763 167879, 203731 167696, 203546 167351, 203458 167700), (230683 167098, 230778 167914, 230760 168585, 230882 169752, 230904 169394, 230928 168593, 230966 168195, 230925 167920, 231063 167254, 231089 166580, 231060 166387, 230817 166263, 230683 167098), (218495 160812, 218265 161492, 218154 162217, 218059 162440, 217706 163556, 217593 164302, 217443 164995, 217396 166403, 217422 167185, 217394 167740, 217425 168705, 217527 169030, 217617 168835, 217714 168819, 217824 166297, 217870 165604, 217937 165075, 218096 164236, 218163 163806, 218338 162981, 218439 162273, 218624 161575, 218833 160879, 218765 160110, 218495 160812), (236086 168476, 236223 169027, 236253 168386, 236305 168094, 236154 167736, 236086 168476), (236264 166544, 236291 167308, 236367 167670, 236429 166934, 236298 166513, 236294 166388, 236264 166544), (223076 162100, 223021 162782, 223037 163429, 223197 164063, 223257 164516, 223436 164774, 223415 166053, 223502 166137, 223517 166305, 223539 166070, 223464 163658, 223421 163480, 223440 163398, 223336 162171, 223262 161484, 223076 162100), (232541 165988, 232596 166130, 232622 166057, 232564 165363, 232541 165988), (220949 164694, 220789 164670, 220612 164790, 220521 165025, 220539 165374, 220937 165327, 221176 165443, 221356 165234, 221330 164566, 220949 164694), (226865 164644, 226900 164841, 226953 164611, 226930 163888, 226865 164644), (187346 162874, 187285 163687, 187311 163860, 187404 163878, 187417 163694, 187544 163114, 187474 162776, 187346 162874), (230212 158456, 230241 158757, 230346 159318, 230338 159844, 230372 160030, 230438 160750, 230636 161195, 230681 161668, 230750 161914, 230710 162529, 230738 162738, 230789 163301, 230865 163423, 230889 163195, 230823 163077, 230900 162525, 230781 161858, 230771 161283, 230721 160870, 230547 160522, 230606 160310, 230481 159816, 230414 158991, 230414 158446, 230348 157875, 230114 157761, 230212 158456), (228120 161635, 228100 161942, 228153 162740, 228201 162848, 228270 162606, 228271 162450, 228319 161932, 228233 161435, 228120 161635), (223104 155174, 223034 155481, 222955 155977, 222908 156554, 222903 156791, 222756 157603, 222817 158173, 222864 158406, 222806 158803, 222702 159970, 222766 160712, 222894 161423, 222914 161681, 222986 161888, 223247 161352, 223199 160674, 223104 159936, 222996 159541, 223093 158709, 223108 158408, 223166 157909, 223248 157615, 223225 157050, 223177 156808, 223227 155977, 223187 155358, 223251 154814, 223143 154483, 223104 155174), (186137 161181, 186185 161489, 186265 161271, 186212 160434, 186203 160400, 186137 161181), (219212 148112, 219056 148171, 219158 148838, 219252 149594, 219421 150333, 219451 150537, 219614 151079, 219667 151837, 219962 152602, 220111 153272, 220143 153369, 220155 153990, 220109 154725, 220126 154915, 220007 155462, 219990 155682, 219883 155920, 219612 157178, 219603 157715, 219429 157685, 219231 158673, 219016 159400, 218965 159988, 218786 160102, 218911 160536, 219005 160168, 219056 159628, 219260 159303, 219659 157982, 219843 157218, 219855 156857, 220004 156550, 220213 155712, 220540 154609, 220637 154132, 220606 153351, 220490 152509, 220318 151816, 220131 150250, 220117 149806, 219986 149559, 219808 149909, 219697 149816, 219614 149818, 219496 150119, 219509 149546, 219295 148816, 219280 148517, 219352 147926, 219212 148112), (196058 158301, 196022 158995, 196055 159659, 196253 160095, 196326 159612, 196509 158900, 196426 158246, 196273 157655, 196058 158301), (228030 157793, 227963 158221, 227995 158497, 227984 159128, 227992 159503, 228091 158663, 228085 158498, 228116 157879, 228101 157687, 228030 157793), (193677 158129, 193789 158467, 193915 158060, 193705 157826, 193677 158129), (200929 156442, 200968 157300, 200986 158241, 201019 158442, 201037 158139, 201020 157423, 201055 156501, 200971 156105, 200929 156442), (177708 156818, 177792 157399, 177839 158097, 177874 158333, 177971 157741, 177946 157403, 178087 156465, 177708 156818), (195386 151562, 195343 152115, 195387 152268, 195499 152813, 195532 153308, 195663 154129, 195671 154648, 195722 155010, 195781 155665, 195880 156264, 196004 156014, 195902 156399, 195979 156975, 196042 157905, 196157 157620, 196246 157505, 196136 156956, 196173 156285, 196209 156006, 196191 155619, 196066 155206, 196130 154957, 196085 154499, 196007 154348, 195735 154968, 195952 154295, 195905 153904, 195973 153598, 196009 152885, 195905 152259, 195860 152303, 195889 152185, 195712 151694, 195558 151952, 195677 151509, 195568 150836, 195386 151562), (229914 156253, 230112 157752, 230305 157636, 230283 157048, 230314 156980, 230190 156078, 230207 155189, 229881 154868, 229914 156253), (221501 156486, 221473 156776, 221533 157258, 221633 156637, 221573 156277, 221501 156486), (213110 156703, 213168 157031, 213154 156629, 213098 156060, 213104 155937, 213022 155323, 213110 156703), (193971 153598, 193901 153875, 193909 154041, 193898 154576, 193909 155438, 194030 155754, 194108 155741, 194081 155931, 194319 156763, 194456 156542, 194501 155854, 194475 155364, 194421 155188, 194274 154511, 194115 153850, 194133 153465, 193971 153598), (218434 155483, 218444 155599, 218351 156207, 218353 156510, 218397 156333, 218487 155433, 218434 155483), (228164 155664, 228272 155927, 228389 155674, 228365 155114, 228144 155044, 228164 155664), (190963 154745, 190977 154955, 191154 155612, 191153 154950, 191125 154659, 191017 154600, 190963 154745), (184597 154183, 184649 154817, 184733 155088, 184763 154938, 184676 154051, 184598 153689, 184597 154183), (192213 153409, 192307 154141, 192561 154792, 192624 154390, 192560 153772, 192436 153133, 192282 152921, 192213 153409), (228154 154701, 228263 154148, 228431 153416, 228296 153280, 228154 154701), (218220 153687, 218304 154615, 218424 154134, 218369 153474, 218220 153687), (223373 152823, 223288 153557, 223168 154280, 223381 154023, 223432 153565, 223615 152702, 223373 152823), (218111 152662, 218167 153135, 218269 152674, 218273 152443, 218206 152352, 218111 152662), (204852 149584, 204828 150158, 204792 150655, 204774 151383, 204817 151740, 204799 151992, 204882 152395, 204987 150616, 204937 149875, 204959 149705, 204879 149236, 204852 149584), (191697 151159, 191764 151476, 191807 151160, 191734 150929, 191697 151159), (197142 150685, 197357 151127, 197295 150551, 197142 150685), (194175 147495, 194379 148265, 194486 148948, 194589 149698, 194628 150295, 194656 150463, 194678 150289, 194906 149978, 195050 149985, 195158 149890, 195272 150176, 195332 150974, 195511 150834, 195372 150787, 195465 150139, 195444 149915, 195270 149470, 194921 147859, 194646 147410, 194613 147224, 194175 147495), (212526 145417, 212571 146128, 212608 147073, 212644 147679, 212664 148225, 212692 148634, 212714 149494, 212881 150757, 212848 149731, 212864 149196, 212797 148564, 212744 146917, 212719 146481, 212709 145928, 212683 145245, 212645 144610, 212548 144488, 212526 145417), (201959 148238, 201992 148884, 202045 149539, 202038 149687, 202093 149797, 202148 149544, 202135 149405, 202146 148890, 202111 148101, 202040 147922, 201959 148238), (222829 148562, 222880 149026, 222953 148750, 222946 147929, 222849 147832, 222829 148562), (204982 147994, 205001 148370, 204927 148890, 205114 148848, 205171 148118, 205145 147716, 205045 147259, 204982 147994), (196470 147739, 196661 147870, 196600 147355, 196517 146912, 196292 146736, 196470 147739), (205188 146384, 205271 146845, 205310 146191, 205229 145880, 205188 146384), (196238 146293, 196287 146689, 196369 146225, 196238 146293), (192471 134099, 192609 134100, 192605 133602, 192463 133570, 192471 134099)), ((171025 202017, 171280 202159, 171529 202543, 171632 202842, 171761 203498, 171801 205287, 171805 208719, 171893 212263, 171858 216296, 171598 216999, 171059 218039, 171269 218249, 171365 218266, 171573 218175, 171637 218251, 171796 218245, 171885 218527, 171893 219256, 171884 220173, 171904 220480, 171856 224509, 171796 225316, 171758 226225, 171653 227973, 171619 229081, 171653 229663, 171736 230288, 171832 230862, 171865 231711, 171873 232834, 171765 233465, 171496 234122, 171646 234392, 171757 234829, 171711 235541, 171684 236138, 171667 236944, 171682 237999, 171808 240513, 171238 241098, 171466 241735, 171606 242337, 171592 242940, 171892 243549, 171953 244203, 172035 246354, 171966 249888, 171954 251669, 171919 253624, 171745 254130, 171486 254377, 171254 254841, 171681 256113, 171793 256804, 171797 257224, 171831 258137, 171831 259025, 171851 259154, 171911 259842, 171939 260520, 171891 261269, 171711 260758, 171184 261246, 171676 261979, 171883 262720, 171878 263638, 171860 264610, 171734 266990, 171809 267764, 171937 268854, 171900 272390, 171896 273615, 171869 275179, 169816 275179, 169623 273958, 169676 273162, 169695 273119, 169846 271721, 169857 271195, 169904 270102, 169987 269086, 170058 268446, 170042 267761, 169985 267244, 169944 267073, 169928 266365, 169951 266258, 169992 265635, 169794 265134, 169668 264918, 169516 264287, 169480 264191, 169123 262760, 169104 262045, 169019 261330, 168669 259727, 168594 258975, 168386 257785, 168339 257237, 168333 256983, 168232 256066, 168318 255965, 168414 255277, 168423 254956, 168596 254297, 168607 253847, 168658 253630, 168661 253039, 168927 252348, 169012 251659, 169105 251392, 169151 250974, 169288 250805, 169341 250501, 169517 250553, 169690 251125, 169848 251258, 169777 251688, 170011 252804, 170135 252689, 170076 253009, 170266 253633, 170451 253913, 170625 253963, 170769 254058, 170975 253604, 170953 253286, 170808 253236, 170740 253290, 170634 253191, 170479 253395, 170598 252953, 170556 252720, 170481 252621, 170361 252634, 170418 252290, 170322 251861, 170259 251797, 170279 251612, 170157 251015, 170132 250997, 170087 250490, 170014 250222, 169925 249706, 169837 249376, 169738 248390, 169642 247830, 169500 247734, 169433 247209, 169352 248087, 169390 248789, 169396 249468, 169208 250262, 168963 251125, 168933 251646, 168825 252058, 168910 252326, 168689 252617, 168557 253434, 168449 254030, 168443 254273, 168181 254931, 167989 255373, 167851 256282, 167814 256955, 167858 257589, 167953 258112, 168038 258721, 168167 259389, 168715 261704, 168833 262042, 168988 262763, 169016 263490, 169151 264214, 169223 264957, 169329 265677, 169497 266364, 169621 267102, 169734 268441, 169682 269118, 169581 270135, 169537 270462, 169517 271403, 169480 271940, 169418 272636, 169323 273417, 169366 274457, 169374 275178, 167667 275179, 167669 274079, 167615 273486, 167323 272501, 167263 272516, 167285 272378, 167212 271919, 167191 271159, 167116 270525, 167080 270024, 167060 269874, 167057 269359, 166991 269214, 167174 268953, 167740 267886, 167543 267443, 167406 267867, 167095 268529, 166880 269171, 166751 269333, 166538 269922, 166685 270575, 166714 271021, 166823 271983, 167068 273225, 167145 273338, 167235 273342, 167196 273599, 167197 274414, 167256 275179, 166021 275179, 165998 274676, 165794 273690, 165785 273693, 165600 272453, 165483 272316, 165522 272009, 165462 271761, 165398 271195, 165204 271298, 165328 270758, 165303 270241, 165438 269572, 165462 269382, 165682 268638, 165967 267928, 166115 267187, 166171 266446, 166171 265711, 166072 264999, 165820 264618, 165572 264565, 165165 264685, 165036 264797, 164831 264800, 164770 265097, 164946 265370, 165048 265442, 165328 265503, 165451 265570, 165553 265515, 165680 265828, 165873 266065, 165870 266795, 165767 267629, 165672 267945, 165665 268652, 165507 268197, 165390 268345, 165106 269393, 164929 270097, 164963 270596, 165036 271189, 165135 271417, 165267 272024, 165302 272372, 165391 272954, 165446 273136, 165436 273242, 165515 273765, 165448 274573, 165458 275179, 163897 275179, 163865 273669, 163870 273181, 163777 267335, 163810 265854, 163758 262865, 163766 261996, 163850 261220, 163891 260424, 163913 257927, 163961 256340, 163977 256087, 163981 255090, 164060 254796, 164340 255051, 164506 255038, 164566 254981, 164959 255732, 165027 255639, 165020 256018, 165163 256348, 165322 256517, 165761 257497, 165899 258118, 166009 258921, 166162 259777, 166360 260503, 166522 261324, 167038 263521, 167326 264634, 167452 265007, 167464 265193, 167584 265748, 167690 266453, 167660 266843, 167741 267882, 167817 267461, 167974 267362, 168048 267188, 168012 266457, 167889 265877, 167842 265851, 167852 265720, 167417 263803, 167343 263778, 167355 263552, 167231 262954, 167224 262826, 167087 262082, 166929 261344, 166821 260515, 166813 259777, 166762 259049, 166712 258874, 166576 258263, 166509 257701, 166457 257029, 166356 256292, 166292 256032, 166239 255487, 166294 254746, 166638 252925, 166946 250317, 167015 249611, 167068 248620, 167132 247060, 167152 245107, 167138 244341, 167139 243596, 167033 242886, 166949 242793, 166714 242712, 166508 242540, 166443 242365, 166006 241914, 165251 241071, 165305 241295, 165794 241882, 165770 242109, 166053 242541, 166461 243473, 166542 244100, 166586 244353, 166635 244998, 166725 245635, 166790 246313, 166874 246742, 166846 246989, 166826 247664, 166703 248275, 166626 248964, 166669 249609, 166643 250260, 166561 250640, 166447 251594, 166300 252233, 166132 252870, 166103 253113, 165935 254204, 165829 255507, 165803 255472, 165436 255796, 165282 255859, 165205 255744, 165142 255844, 165142 255426, 164841 254972, 164389 253862, 163975 252937, 163929 252303, 164042 251592, 164124 250996, 164163 250047, 164165 249088, 164090 247856, 164065 246588, 164035 245925, 163952 245197, 163873 244199, 163827 241047, 163925 240752, 164078 240822, 164369 240654, 164519 240654, 164644 240597, 164727 240633, 164749 240500, 163969 239656, 163801 238962, 163798 238036, 163906 235814, 163907 235050, 163861 233743, 163832 232576, 163844 230868, 163857 230357, 163860 228506, 163940 227851, 164103 227247, 164185 225268, 164175 225054, 164198 224517, 164078 223381, 163983 222226, 163970 220737, 163976 218464, 164012 217202, 164032 213775, 164075 212969, 164086 211848, 164071 211252, 163965 210621, 164019 209442, 164022 209005, 164057 207604, 164023 205835, 164053 205241, 164054 204962, 164135 202838, 164325 202223, 164734 202060, 165092 202299, 165180 202932, 165176 203041, 165230 203750, 165346 204359, 165409 205192, 165723 207865, 165969 209098, 165953 209287, 166002 209880, 166101 210473, 166208 210743, 166213 211062, 166435 211942, 166525 212000, 166548 212457, 166691 212890, 166838 213532, 166804 214192, 166888 214964, 166937 216036, 166972 216590, 167009 216779, 166964 217079, 166934 217590, 166586 219881, 166596 220235, 166561 220818, 166501 221052, 166357 221750, 166239 222446, 166075 223140, 165857 223823, 165581 224364, 165347 225130, 165327 225673, 165332 225860, 165228 226622, 165165 227291, 165150 228119, 165097 229394, 165039 230171, 165006 230848, 165166 232319, 165183 233050, 165167 233776, 165185 234491, 165258 235247, 165448 236617, 165465 237047, 165573 238014, 165856 238589, 165892 238001, 165819 237489, 165775 237315, 165704 236802, 165665 236618, 165518 235532, 165442 234692, 165412 234505, 165457 234240, 165458 232208, 165423 231636, 165404 230886, 165549 228730, 165574 227857, 165640 226637, 165659 225877, 165714 225641, 165806 225140, 166013 224532, 166344 223903, 166551 223185, 166674 222474, 166846 221711, 166922 221067, 166788 220586, 166830 220066, 166908 219647, 166982 219049, 167121 218184, 167204 217579, 167258 217037, 167297 216898, 167343 216332, 167361 216215, 167419 215532, 167400 214856, 167492 214179, 167420 213526, 167547 212254, 167670 211558, 167687 211039, 167833 210456, 167884 209859, 167973 209393, 167746 209254, 167704 209829, 167612 210304, 167788 210448, 167579 210556, 167551 211021, 167616 211575, 167291 212235, 167262 212378, 167233 212329, 166879 212173, 166724 211768, 166555 211027, 166438 210363, 166356 210121, 166347 209850, 166254 209197, 166170 208741, 166072 207516, 165983 206783, 165861 205521, 165798 204624, 165731 203269, 165722 202675, 165768 202296, 165979 202094, 166187 202030, 166831 202015, 167158 202063, 167460 202195, 167795 203120, 167897 203742, 167891 204211, 168075 205214, 168199 205491, 168068 205557, 168110 206302, 168116 206665, 168166 206879, 168398 207438, 168451 207143, 168424 206514, 168394 206310, 168433 205921, 168362 205207, 168286 204956, 168414 204493, 168402 204182, 168362 204110, 168438 203917, 168316 203217, 168415 203080, 168276 202642, 168261 202461, 168477 202195, 168801 202064, 169193 202092, 169358 202212, 169533 202415, 169660 202987, 169760 203508, 169779 204051, 169744 204453, 169778 205087, 169848 205776, 169881 206661, 169884 207538, 170209 208137, 170296 208772, 170444 210848, 170457 212750, 170353 213352, 170149 213972, 169935 214565, 169946 214861, 169844 214777, 169765 214914, 169648 215426, 169470 215640, 169086 216452, 168877 216925, 168818 217194, 168640 217561, 168444 218235, 168398 218720, 168442 218780, 168381 218940, 168408 219697, 168669 218973, 168756 218269, 168920 217617, 168992 217185, 169224 216918, 169453 216386, 169781 215818, 169801 215523, 169933 215502, 170064 215248, 170290 214664, 170714 213441, 170835 212776, 170877 212105, 170964 211424, 170947 210123, 170887 209715, 170776 208781, 170620 207841, 170481 206768, 170491 206323, 170466 205741, 170368 205141, 170318 204322, 170246 203622, 170244 203487, 170176 202471, 170395 202005, 171025 202017), (170585 260507, 170848 260843, 170764 260512, 170687 260390, 170585 260507), (170138 259071, 170173 259202, 170247 259788, 170484 260302, 170564 259795, 170439 259539, 170209 258967, 170138 259071), (170904 254217, 171173 254656, 171452 254235, 171185 254048, 170904 254217), (166858 228965, 166618 229573, 166538 230326, 166564 231081, 166750 231844, 166917 233219, 167072 234160, 167499 236450, 167642 237263, 167649 237463, 167763 238567, 167967 239870, 168113 241281, 168240 241999, 168400 242676, 168491 243325, 168615 244101, 168827 244927, 168970 245639, 169189 246147, 169216 246390, 169235 245998, 169185 245770, 169009 245353, 169020 245054, 168899 244459, 168647 242798, 168543 241944, 168534 241236, 168638 240548, 168505 239819, 168346 239090, 168288 238699, 168084 237592, 167989 237239, 167774 235899, 167697 235339, 167531 234400, 167302 232743, 167203 231526, 167071 230376, 167141 229625, 167153 229135, 167066 228862, 166858 228965), (170741 239500, 170808 239296, 170790 239075, 170723 239069, 170473 238656, 170741 239500), (170274 237799, 170391 238329, 170428 237908, 170398 237715, 170349 237686, 170274 237799), (170640 233267, 170497 233273, 170318 233557, 170501 233770, 171023 233947, 171194 233449, 170772 233145, 170640 233267), (169143 230474, 169122 231057, 169247 231624, 169244 231746, 169347 232441, 169378 233144, 169667 233424, 169871 233422, 170004 232953, 169829 232604, 169680 231990, 169665 231646, 169593 231306, 169581 230987, 169412 230414, 169143 230474), (169691 226419, 169421 227051, 169062 227785, 168762 228333, 168718 228518, 168544 229046, 168801 229590, 169030 229910, 169092 230141, 169322 230184, 169160 229725, 169150 229597, 169106 229549, 168943 229048, 169015 228363, 169414 227829, 169603 227392, 169762 226567, 170007 226488, 169906 225812, 169691 226419), (170412 218423, 170241 218590, 170215 218740, 169990 219268, 169975 219776, 169866 219497, 169238 220930, 169142 221020, 169040 221322, 168345 222976, 168222 223644, 168024 224072, 167640 225378, 167494 226044, 167343 226646, 167369 227067, 167269 226934, 167146 227405, 166959 228607, 167068 228849, 167211 228135, 167235 227690, 167407 227605, 167557 227081, 167697 226511, 167785 226072, 167922 225586, 167937 225425, 168121 224915, 168542 223445, 168660 223190, 169050 222192, 169198 221752, 169383 221442, 170028 220026, 170102 219522, 170209 219646, 170362 219327, 170452 219007, 170501 219080, 170855 218662, 170861 218184, 170412 218423), (170960 227016, 170707 227270, 170553 227901, 170572 227976, 170764 227967, 170841 227907, 171070 227460, 171227 227281, 171092 226992, 170960 227016), (169920 225774, 170053 226483, 170314 226414, 170480 225874, 170432 225432, 170287 225365, 169920 225774), (168044 207459, 168094 207867, 167927 208218, 167823 208636, 168013 209172, 168100 208671, 168285 208084, 168232 207693, 168367 207486, 168085 207177, 168044 207459)), ((219205 273608, 219435 274056, 219485 274352, 219523 275179, 216079 275179, 216090 274536, 216146 274112, 216289 273858, 216694 273676, 217260 273641, 217782 273636, 218098 273798, 218243 273715, 218510 273685, 218711 273604, 219205 273608)), ((232817 218826, 233139 219181, 233371 219924, 233416 220288, 233455 222188, 233456 225888, 233502 227922, 233535 228825, 233520 233026, 233428 233816, 233046 234687, 233131 235107, 233475 235496, 233552 235786, 233549 237992, 233501 242055, 233437 242926, 233389 244145, 233298 245783, 233276 246329, 233283 247071, 233345 247679, 233451 248346, 233518 249069, 233535 250867, 233395 251242, 233273 251074, 233042 251250, 232937 251060, 232647 251116, 232249 251009, 232054 250893, 231996 250937, 231693 250809, 231593 250502, 231410 250251, 231339 249977, 231320 249556, 231122 248714, 231031 248215, 230936 247996, 230779 248503, 230821 249002, 230808 249195, 230957 249907, 230956 250481, 231411 251029, 231886 251268, 232314 251606, 232706 251763, 233163 252081, 233170 251960, 233322 251816, 233360 252215, 233395 252991, 233347 253727, 233311 254887, 233345 256308, 233446 258234, 233437 258520, 233452 259029, 233296 259250, 233197 259486, 232848 259009, 233004 258275, 232957 257933, 232604 258279, 233074 259783, 233208 260525, 233435 261285, 233589 262069, 233667 264259, 233676 264803, 233628 266354, 233593 268692, 233595 269622, 233560 271792, 233506 272493, 233039 272885, 232826 273129, 233270 274506, 233410 275178, 229905 275178, 229821 274224, 229865 273956, 229817 273447, 229724 273659, 229575 274158, 229486 274661, 229468 275178, 227934 275179, 227853 274481, 227814 273920, 227866 273247, 227956 272498, 228056 272166, 228228 271178, 228542 268132, 228575 267889, 228603 267135, 228585 266954, 228681 265721, 228696 265097, 228688 264413, 228713 263710, 228703 262828, 228668 262243, 228701 261471, 228514 260883, 228318 260758, 228241 260751, 227873 260275, 227871 260872, 228010 261395, 228131 261924, 228264 262287, 228318 262646, 228301 263010, 228364 263354, 228359 263716, 228430 264410, 228409 265781, 228327 266721, 228279 267137, 228284 268482, 228212 268993, 228255 269494, 228152 269535, 227976 270480, 227783 271144, 227679 271877, 227606 272181, 227543 272738, 227456 273897, 227385 274300, 227329 274036, 226907 274485, 226839 274473, 226738 274668, 227002 275179, 225500 275178, 225519 274434, 225535 273132, 225587 273084, 225654 273140, 225810 273451, 225928 273303, 226094 273400, 226190 273374, 226317 273208, 226058 272518, 225759 271853, 225517 271187, 225514 270509, 225619 269863, 225701 269181, 225730 267969, 225714 267185, 225648 265978, 225626 264736, 225569 263776, 225501 263269, 225445 262699, 225410 261740, 225376 258908, 225450 258807, 225493 258805, 226059 258351, 226108 258264, 225505 257579, 225348 256863, 225345 255899, 225401 255018, 225462 253677, 225456 253404, 225466 252880, 225387 250932, 225364 249687, 225405 248567, 225402 247755, 225412 247300, 225413 246017, 225548 244959, 225622 244532, 225668 243034, 225706 242324, 225674 241601, 225574 240421, 225539 239714, 225526 237480, 225540 235601, 225569 234484, 225586 231076, 225630 230187, 225648 229191, 225632 228370, 225524 227709, 225577 226444, 225587 225603, 225618 224573, 225583 222646, 225665 219987, 225757 219288, 226080 218851, 226338 218814, 226596 218886, 226731 219534, 226769 219987, 226828 220115, 226867 220117, 227008 221389, 227036 222057, 227178 223189, 227268 224203, 227393 224129, 227338 224409, 227416 224736, 227416 225032, 227486 225420, 227618 225645, 227568 225952, 227626 226462, 227648 226960, 227730 226926, 227653 226925, 227750 226272, 227758 225592, 227571 224760, 227617 224380, 227419 222355, 227355 221360, 227303 220356, 227299 219544, 227327 219139, 227436 218922, 227731 218793, 228634 218752, 228978 218862, 229209 219079, 229505 220272, 229539 221000, 229679 221884, 229802 222080, 229842 222644, 229910 223111, 229890 223372, 230003 223455, 229909 221616, 229970 221015, 229903 220332, 229800 219512, 229896 219029, 230086 218874, 230383 218785, 230794 218801, 231003 218944, 231191 219186, 231357 220109, 231416 220665, 231392 220844, 231381 221588, 231410 222110, 231474 222708, 231517 223615, 231540 224468, 231852 225087, 231917 225719, 231948 226289, 232047 227671, 232064 228375, 232064 228772, 232085 229410, 232077 230183, 232042 230549, 232081 231193, 232272 230592, 232275 230416, 232399 229858, 232522 228610, 232531 227708, 232492 227022, 232412 226357, 232346 225701, 232236 225103, 232235 225045, 232082 223856, 232081 223700, 232029 222711, 231885 221734, 231862 221146, 231839 221024, 231789 220425, 231775 220094, 231724 219559, 231765 219010, 231900 218767, 232384 218732, 232817 218826), (226451 273927, 226495 274125, 226569 274181, 226670 274074, 226708 274327, 226726 273878, 226529 273679, 226451 273927), (230388 271245, 230180 271850, 230101 272572, 230010 272876, 230103 273021, 230171 272576, 230191 271929, 230419 271253, 230405 270628, 230388 271245), (232522 272275, 232336 272421, 232321 272389, 232289 272458, 232538 272737, 232668 272451, 232616 272272, 232522 272275), (231017 266466, 231052 266978, 231008 267125, 231003 267799, 230882 268419, 230908 268579, 230933 268510, 231264 269109, 231348 269545, 231496 269405, 231415 269817, 231521 270525, 231720 271473, 231875 271964, 232010 272176, 232139 272255, 232304 271767, 232134 271409, 231968 270657, 231856 270049, 231814 269742, 231699 269233, 231593 268565, 231405 267639, 231334 266950, 231204 266047, 231017 266466), (230576 263565, 230632 263844, 230699 263777, 230583 263204, 230576 263565), (228655 246251, 228464 246498, 228317 246904, 228197 247690, 228178 248473, 228338 249247, 228379 249660, 228510 250750, 228726 252137, 228864 252903, 228914 253079, 229096 254080, 229137 254216, 229230 254752, 229316 255069, 229290 255365, 229321 255892, 229372 256413, 229574 257719, 229656 258372, 229741 259269, 229855 259977, 230032 260718, 230205 261962, 230181 261464, 230138 260907, 230128 260370, 230077 259750, 230174 258402, 229971 257332, 229802 256214, 229687 255789, 229538 255085, 229416 254246, 229348 253906, 229202 252902, 229179 252673, 229077 251925, 229000 251441, 228911 250705, 228701 248477, 228661 247706, 228743 246585, 228697 246247, 228655 246251), (227542 260216, 227714 260569, 227770 260149, 227523 259902, 227542 260216), (227034 259737, 227239 259578, 226970 259439, 226737 259018, 227034 259737), (226468 258972, 226589 259109, 226640 259118, 226709 258972, 226291 258493, 226468 258972), (226809 252179, 226885 252960, 227096 254419, 227113 254758, 227234 255526, 227248 255865, 227487 256365, 227493 255991, 227365 255303, 227181 253943, 226961 252178, 226798 251410, 226809 252179), (228511 236117, 228364 236482, 228176 237761, 228165 238185, 228067 238876, 227944 239248, 227836 239818, 227736 240476, 227626 240945, 227617 241359, 227494 241219, 227363 241435, 227069 242288, 226919 243022, 226924 243596, 226945 243781, 226876 244299, 226832 244534, 226757 246063, 226723 247423, 226651 248412, 226733 249175, 226744 249467, 226858 250332, 226857 250685, 227027 251188, 227032 250686, 226988 249936, 226929 249476, 226935 248418, 227001 247913, 227129 245992, 227160 245117, 227193 244556, 227207 243794, 227233 243654, 227286 243052, 227438 242449, 227449 242346, 227709 241664, 228055 240997, 228076 240831, 228487 238703, 228462 238398, 228268 238578, 228329 238200, 228229 238112, 228469 237100, 228571 236213, 228732 235220, 228511 236117), (230238 246301, 230302 246602, 230324 247076, 230371 247190, 230418 247084, 230391 247006, 230441 246325, 230451 245912, 230238 246301), (228722 245362, 228718 245885, 228825 245370, 228806 244950, 228722 245362), (230646 245563, 230741 245734, 230764 245708, 230839 245159, 230646 245563), (232467 244884, 232335 245097, 232408 245256, 232484 245235, 232708 245328, 232759 245082, 232654 244843, 232557 244821, 232467 244884), (231631 243119, 231275 244124, 231139 244441, 231028 244850, 231143 245016, 231316 244661, 231392 244156, 231871 243726, 231955 243684, 232039 243531, 232000 243373, 231778 243064, 231631 243119), (229219 243151, 229059 243886, 228909 244479, 229037 244950, 229185 244374, 229282 243907, 229446 243322, 229425 243203, 229366 242598, 229219 243151), (232139 235723, 231865 235925, 231630 236627, 231625 236621, 231355 237212, 231310 237391, 231187 237571, 230217 239848, 229994 240505, 230007 240936, 229886 240766, 229583 241823, 229571 242113, 229413 242495, 229529 243046, 229661 242524, 229814 241849, 229833 241391, 230008 241321, 230122 240810, 230485 239936, 230529 239379, 230608 239578, 231359 237894, 231397 237664, 231471 237645, 231742 237021, 231870 236621, 232270 236104, 232558 235785, 232436 235590, 232139 235723), (230293 234819, 230098 235541, 230014 236276, 230024 236744, 230140 236712, 230204 236082, 230293 235585, 230355 235309, 230426 234440, 230293 234819), (228385 230190, 228509 230912, 228457 231660, 228509 232188, 228516 232738, 228550 233000, 228636 232999, 228571 233378, 228594 233968, 228577 234500, 228804 234624, 228863 233966, 228904 233849, 228973 233207, 228979 232431, 229065 231720, 228991 230904, 228995 230692, 228790 230172, 228815 230084, 228778 230150, 228738 229627, 228559 229543, 228385 230190), (231749 231256, 231765 231988, 231594 231636, 231473 231973, 231432 232570, 231227 232570, 231179 232685, 231080 233233, 230845 233404, 230714 233922, 230588 234113, 230679 234367, 231120 233532, 231204 232801, 231419 232912, 231782 232046, 232035 231318, 231897 230841, 231749 231256), (228192 229508, 228223 229756, 228293 229915, 228526 229469, 228299 229232, 228192 229508), (227781 227569, 227853 228090, 227903 228205, 227900 228379, 228031 228963, 228065 229041, 228113 228838, 228167 228331, 228105 228003, 227912 227409, 227906 226944, 227781 227569), (229352 227481, 229362 227548, 229375 227441, 229336 226899, 229352 227481), (229482 225584, 229531 226170, 229345 226794, 229562 226265, 229547 225686, 229578 225594, 229515 225444, 229482 225584), (229716 224385, 229730 224886, 229712 224990, 229768 225160, 229815 225000, 229798 224512, 229840 224395, 229743 224039, 229716 224385)), ((186759 229470, 187003 229341, 187705 229408, 187886 229956, 187924 229931, 188071 230030, 188199 229652, 188152 229507, 188223 229535, 188511 229460, 188875 229484, 189474 229752, 189556 230481, 189603 233084, 189607 233812, 189573 235252, 189576 236023, 189612 237273, 189694 241318, 189699 242606, 189668 243182, 189587 244233, 189541 245303, 189548 246294, 189535 248692, 189545 250615, 189498 252916, 189530 255852, 189547 256397, 189560 257485, 189555 258491, 189578 259584, 189576 260596, 189616 261494, 189685 262512, 189710 263957, 189774 266052, 189788 267626, 189777 268318, 189697 269740, 189576 270941, 189554 271637, 189587 272179, 189709 275179, 186479 275178, 186448 274612, 186414 273373, 186388 272937, 186378 272384, 186352 271700, 186305 270854, 186264 270507, 186182 270998, 186209 271320, 186194 271869, 186240 272584, 186278 273528, 186314 274135, 186359 275178, 184126 275179, 184070 274230, 184055 273650, 183997 273381, 184066 272911, 184064 272378, 184038 271875, 184080 271023, 184182 270347, 184151 269626, 184007 268961, 183693 268627, 183669 268915, 183538 269627, 183577 270331, 183765 271299, 183744 272954, 183768 273653, 183807 273904, 183820 274751, 183853 275179, 181348 275178, 181388 274821, 181497 274319, 181702 273570, 181784 272960, 181772 272282, 181772 270999, 181651 270321, 181402 269648, 181322 268954, 181316 268195, 181328 266698, 181387 263251, 181384 262483, 181329 261546, 181309 261013, 181322 260134, 181319 258948, 181286 257600, 181281 255959, 181291 254939, 181340 252286, 181309 250470, 181325 247731, 181355 246041, 181398 245239, 181588 244218, 181600 243285, 181514 242401, 181463 241601, 181419 240601, 181386 239424, 181389 238835, 181319 237202, 181361 235525, 181376 235301, 181369 234753, 181377 234601, 181348 233917, 181304 233342, 181349 230410, 181369 229731, 181593 229518, 181964 229391, 183081 229359, 183329 229452, 183539 229478, 183889 229355, 184372 229339, 184933 229403, 185284 229319, 186249 229313, 186759 229470), (186061 268122, 186061 268817, 186106 268234, 186111 267884, 186061 268122), (183755 267542, 183878 268023, 183819 267456, 183773 267390, 183755 267542), (185993 264715, 186014 264930, 185937 265438, 185948 265797, 185951 266521, 186035 266137, 186018 266015, 186113 265421, 186148 264704, 186184 264491, 186139 264173, 185993 264715), (185923 262511, 185925 263176, 186029 262699, 185978 262343, 185923 262511)), ((238842 264205, 239031 264578, 239288 264231, 239497 264187, 240082 264288, 240254 264523, 240356 265714, 240400 265276, 240490 265013, 240572 265024, 240649 264965, 240737 264542, 240847 264403, 241445 264368, 241689 264472, 241836 264686, 241928 265219, 241966 266371, 242011 269933, 242015 271093, 241985 272862, 241977 274109, 241996 275179, 233818 275179, 233857 272843, 233846 271805, 233794 270824, 233765 269892, 233797 267565, 233798 266394, 233826 264831, 233883 264684, 234181 264376, 234483 264251, 235508 264202, 235741 264355, 235922 264402, 236318 264189, 236849 264162, 237005 264209, 237141 264388, 237130 264435, 237182 265012, 237153 266235, 237241 266583, 237206 266754, 237254 266661, 237259 265988, 237240 265592, 237296 264422, 237384 264273, 237552 264158, 238579 264135, 238842 264205), (239951 274986, 240034 274958, 240041 274731, 239984 274504, 239951 274986), (240039 273025, 240025 273326, 240137 273813, 240142 273337, 240190 272832, 240039 273025), (237089 268690, 237093 270943, 237115 272093, 237135 272499, 237111 273209, 237138 273477, 237256 273609, 237265 272203, 237313 271866, 237324 271145, 237291 269924, 237274 269708, 237265 268925, 237242 268372, 237181 267827, 237186 267593, 237114 267195, 237089 268690), (240112 272144, 240194 272351, 240183 271984, 240137 271853, 240112 272144)), ((210371 236583, 210437 236987, 210423 238199, 210408 238705, 210363 239537, 210345 239619, 210237 241105, 210284 241303, 210263 241676, 210403 242034, 210377 242415, 210534 242603, 210747 242198, 210937 242016, 210943 241628, 211006 241514, 211045 240126, 211078 239928, 211078 239033, 211065 238756, 211048 237470, 211053 236639, 211541 236561, 212150 236589, 212485 236727, 212868 236681, 213127 236726, 213250 236647, 213603 236905, 213784 237300, 213725 237419, 213778 237927, 213763 238030, 213787 238618, 213701 238670, 213716 238801, 213638 238937, 213679 239498, 213657 239654, 213688 241111, 213713 241332, 213630 241755, 213433 241987, 213439 242652, 213380 242912, 213366 243532, 213322 244710, 213309 245571, 213292 245698, 213279 247011, 213309 247187, 213278 247829, 213316 248066, 213228 248778, 213257 248973, 213206 249912, 213243 250285, 213232 250885, 213193 251271, 213010 251420, 212879 251836, 212858 252032, 212906 252547, 212966 252671, 212974 252836, 213170 253144, 213082 253843, 213053 254142, 212852 254808, 212776 255347, 212971 256139, 213254 256402, 213463 255845, 213182 255538, 213438 254872, 213433 254322, 213372 253878, 213450 252891, 213574 251908, 213603 251005, 213691 250488, 213811 249958, 213795 249018, 213736 248454, 213777 248111, 213726 247625, 213774 247244, 213793 246659, 213845 245639, 213858 244903, 213944 243972, 214097 243330, 214086 243000, 214135 242811, 214115 242409, 214148 241836, 214166 240676, 214385 240121, 214642 239843, 214763 239293, 214421 238631, 214430 238492, 214348 238098, 214348 237420, 214416 237296, 214621 237091, 214926 237034, 215218 237070, 215313 237311, 215300 237723, 215350 238331, 215349 238645, 215375 239875, 215466 241183, 215491 241364, 215524 242093, 215480 242836, 215539 245017, 215569 249801, 215519 250422, 215458 250861, 215411 251663, 215407 252032, 215351 253010, 215402 253459, 215421 254636, 215415 255114, 215455 256206, 215457 256759, 215421 258910, 215425 259358, 215397 260086, 215398 260502, 215293 262075, 215271 263131, 215310 265849, 215340 266017, 215387 266985, 215375 267578, 215384 268312, 215294 269081, 215355 269442, 215306 270405, 215348 270956, 215217 272603, 215225 273215, 215294 273883, 215324 274050, 215365 275179, 214010 275178, 214121 274427, 214144 273935, 214267 273280, 214121 273135, 213872 273670, 213784 273998, 213719 275179, 212500 275178, 212609 274425, 212306 273683, 212231 272881, 212128 272077, 212134 271540, 212064 270849, 211924 270399, 211924 270287, 211692 270010, 211745 269521, 211719 268974, 211731 267653, 211713 267283, 211763 266285, 211701 265910, 211728 265535, 211731 265001, 211770 264643, 211621 263985, 211302 263948, 211384 263182, 211484 262759, 211658 262293, 211779 261587, 211845 261397, 211800 261313, 211714 260486, 211659 259559, 211694 259215, 211732 258522, 212084 256372, 211943 255909, 211646 256687, 211417 258821, 211308 259548, 211215 259981, 211204 260469, 211119 260780, 211025 262093, 211058 262269, 211085 262800, 211217 263233, 211213 264433, 211488 264377, 211274 264994, 211202 265919, 211297 267437, 211276 267725, 211297 268674, 211396 270043, 211472 270386, 211624 271359, 211721 271896, 211639 272871, 211721 273874, 211702 274355, 211731 275179, 209671 275178, 209589 273375, 209558 270973, 209567 270083, 209557 269395, 209453 265898, 209474 265256, 209461 264650, 209522 264004, 209561 263439, 209628 263073, 209686 262518, 209768 261868, 209866 261614, 209865 261272, 209929 260698, 209953 260368, 210149 259466, 210351 258329, 210499 257964, 210555 257223, 210689 256640, 210714 256044, 210173 255631, 210070 255333, 209913 255204, 209646 256019, 209673 256579, 209666 256952, 209760 258438, 209647 259046, 209533 259398, 209469 260311, 209521 260646, 209406 260558, 209244 260721, 209216 261195, 209156 261400, 209046 262094, 209099 263195, 209025 263179, 208847 263329, 208911 263962, 208909 264207, 208950 264921, 209013 265675, 209048 265876, 209097 266814, 209119 267731, 209124 268450, 209110 268629, 209092 269509, 209130 269818, 209113 270368, 209131 270982, 209127 271210, 209226 272253, 209223 272893, 209201 273464, 209228 273844, 209243 274433, 209279 275179, 207459 275179, 207453 274391, 207432 273626, 207509 273197, 207475 272858, 207499 272521, 207487 271922, 207518 271253, 207516 270384, 207487 269505, 207528 268928, 207440 267149, 207420 265699, 207458 264874, 207492 264422, 207464 263892, 207503 262920, 207561 262036, 207532 261530, 207488 261113, 207509 260664, 207439 258429, 207433 257403, 207443 256351, 207438 255810, 207481 254980, 207476 254525, 207531 254236, 207567 253521, 207724 252682, 207680 251734, 207585 250846, 207565 250210, 207530 249784, 207534 249023, 207521 248364, 207541 247818, 207568 247406, 207547 246528, 207562 245867, 207533 243968, 207550 243442, 207534 242863, 207556 241959, 207544 241563, 207594 240329, 207523 239544, 207557 239023, 207576 238447, 207567 238056, 207731 236998, 207940 236719, 208392 236523, 208870 236551, 208956 236719, 208957 236941, 209095 237154, 208961 237870, 209008 238014, 208975 238139, 209054 238196, 209411 238019, 209267 237871, 209448 237591, 209538 237072, 209648 236542, 210166 236499, 210371 236583), (213710 270437, 213663 271249, 213640 271460, 213608 272085, 213549 272596, 213726 272891, 213717 272982, 213758 273017, 213895 272882, 213850 272764, 214158 272058, 214273 271222, 214286 270900, 214416 269831, 214233 269443, 213710 270437), (213895 265092, 213840 265877, 213871 266358, 213790 267208, 213773 267699, 213640 268209, 213796 268604, 213752 268795, 213865 268740, 214140 267689, 214160 267322, 214231 266776, 214315 266417, 214345 265863, 214345 265439, 214391 264467, 214238 264031, 213895 265092), (213795 261352, 213777 261635, 213553 262263, 213505 262879, 213697 263159, 213841 263544, 213995 263148, 214003 262876, 214195 262238, 214221 261625, 213968 261055, 213795 261352), (212981 256966, 212856 257708, 212866 258347, 213118 258646, 213118 258785, 213203 258788, 213341 259561, 213290 260058, 213389 260467, 213354 260736, 213518 260729, 213676 260457, 213731 260121, 213899 259546, 213696 258683, 213593 258646, 213690 258621, 213691 257096, 213403 256876, 212981 256966), (208567 252322, 208564 252738, 208518 253280, 208521 254049, 208655 254448, 208835 254113, 208851 253147, 208815 252344, 208770 251719, 208776 251553, 208730 250899, 208567 252322), (209120 240735, 209088 240963, 208879 241805, 208904 242455, 208948 242786, 208933 243669, 208854 244453, 208695 244910, 208674 245446, 208642 245654, 208625 246270, 208697 246406, 208760 246901, 208754 247204, 208866 247689, 209036 247172, 209050 246855, 209156 246342, 209189 245843, 209280 245547, 209307 244951, 209150 244440, 209154 243659, 209279 242692, 209391 242330, 209391 242021, 209465 241428, 209451 240913, 209476 240693, 209366 240216, 209120 240735), (212215 246286, 212251 246632, 212309 246242, 212276 245297, 212215 246286), (210252 244747, 210408 244996, 211017 245524, 211184 244740, 211186 244573, 210438 244466, 210252 244747), (212394 237474, 212164 237568, 212284 238866, 212427 239052, 212434 239271, 212604 239527, 212568 239651, 212645 240024, 212618 240418, 212208 240333, 212065 240521, 211759 241057, 211942 241912, 212274 242018, 212712 241642, 212828 241088, 212814 240537, 212764 240067, 212772 239464, 212891 239093, 212875 238894, 212953 238676, 212935 238279, 212855 237892, 212609 237575, 212597 237413, 212485 237294, 212394 237474), (209085 238393, 209069 238667, 208966 239142, 208981 239771, 209037 240003, 209358 240195, 209217 239743, 209339 239570, 209411 238919, 209486 238699, 209563 238144, 209413 238017, 209085 238393)), ((243534 247038, 243728 247088, 243928 247574, 243972 248247, 244083 248768, 244150 249474, 244406 251339, 244507 251868, 244626 252391, 244691 253008, 244797 253629, 244943 254251, 245323 255509, 245507 256153, 245543 256829, 245573 257033, 245736 258848, 245706 259554, 245512 260760, 245373 261510, 245319 262049, 245209 262797, 245071 263295, 244884 264122, 244643 264859, 244613 264885, 244280 265497, 244062 266225, 244015 266557, 244016 266996, 243901 267835, 243868 269340, 243785 270130, 243781 270920, 243904 271715, 243935 272494, 243923 273235, 243975 274018, 244140 275179, 242720 275178, 242727 274009, 242706 273666, 242668 272475, 242675 269896, 242685 269105, 242713 268523, 242961 267758, 243011 267025, 243049 265554, 242938 264621, 242880 264289, 242798 263496, 242791 260424, 242826 259424, 242837 256983, 242888 255870, 242900 255074, 242877 254443, 242785 253822, 242829 253173, 242868 251382, 242835 249885, 242874 249446, 242953 247590, 243067 247248, 243244 247016, 243467 246980, 243534 247038)), ((221224 273778, 221474 273743, 221736 273614, 222292 273669, 222515 273776, 222598 274492, 222718 274665, 222662 275160, 222763 274613, 222975 273875, 223103 273782, 223863 273770, 224105 273975, 224196 274366, 224248 275179, 219540 275179, 219545 274352, 219580 273738, 219719 273635, 220015 273586, 220948 273567, 221224 273778)), ((224447 183282, 224550 184231, 224586 186140, 224582 187233, 224602 188770, 224600 189673, 224638 191102, 224678 194053, 224665 195018, 224646 195492, 224702 199777, 224690 200709, 224627 201380, 224573 202108, 224561 202831, 224561 204184, 224541 205337, 224539 206018, 224466 207994, 224472 209041, 224584 210794, 224583 211790, 224333 213790, 224298 214546, 224291 216029, 224355 217381, 224391 219130, 224434 220129, 224503 220751, 224555 221338, 224593 222485, 224609 224755, 224635 225855, 224663 228667, 224652 229796, 224569 231563, 224543 232473, 224558 233421, 224612 234970, 224611 235659, 224622 236106, 224611 237860, 224600 238177, 224604 238709, 224595 239177, 224594 240598, 224574 241157, 224327 242499, 224314 243379, 224275 244317, 224277 244673, 224248 245429, 224295 246103, 224350 246679, 224372 247029, 224450 247840, 224473 248571, 224486 250859, 224478 252935, 224446 254211, 224429 256271, 224430 258269, 224383 259372, 224366 260651, 224376 261481, 224486 262201, 224470 262917, 224441 263643, 224422 265046, 224395 265865, 224431 268094, 224410 268862, 224374 269624, 224323 271783, 224147 272412, 223970 272565, 223148 272604, 222848 272234, 222350 272406, 222044 272370, 221731 272554, 221361 272617, 220686 272589, 220552 272530, 220351 272282, 220189 272391, 219628 272669, 218880 272651, 218609 272478, 218584 272049, 218610 271507, 218570 271310, 218539 270793, 218384 271287, 218189 271750, 217954 272537, 217516 272545, 217084 272427, 216830 271939, 216613 271147, 216565 268553, 216558 264186, 216522 262228, 216486 261099, 216477 260491, 216493 257562, 216503 257117, 216499 256031, 216472 253963, 216486 251430, 216464 249965, 216516 245719, 216586 244422, 216654 242519, 216743 240815, 216752 240116, 216723 239502, 216661 238873, 216568 238219, 216524 237584, 216490 236230, 216506 235135, 216568 233863, 216651 232616, 216687 231722, 216707 230869, 216701 229923, 216679 229135, 216531 225559, 216331 219356, 216374 217420, 216408 214498, 216409 213576, 216427 212681, 216454 210147, 216605 209413, 216714 208774, 216729 208105, 216679 207420, 216546 206738, 216514 206144, 216492 205236, 216466 204618, 216463 203492, 216426 202227, 216430 201491, 216465 200211, 216520 197089, 216634 194859, 216636 194149, 216507 192973, 216453 192264, 216456 190971, 216443 190252, 216488 186887, 216507 184549, 216543 184025, 216615 183617, 216971 183471, 217830 183442, 219051 183340, 219314 183418, 219459 183886, 219487 184467, 219442 185849, 219410 187433, 219382 187999, 219367 188611, 219390 188863, 219284 189428, 219203 190396, 219174 191021, 219319 191652, 219356 191025, 219331 190622, 219458 189873, 219412 189792, 219488 189706, 219576 188603, 219571 188408, 219669 188060, 219768 187204, 219942 185532, 219983 184466, 219930 183976, 219962 183478, 220082 183209, 220292 183151, 221175 183144, 221267 183262, 221380 183688, 221332 183877, 221359 184134, 221485 184092, 221329 184479, 221303 185014, 221321 185341, 221246 185564, 221236 185815, 221355 185766, 221214 186121, 221097 187364, 221059 187981, 221057 188307, 221009 188807, 220895 189404, 220815 190144, 220750 191391, 220740 192209, 220778 195101, 220949 196160, 220956 196402, 221026 197159, 221033 197692, 221110 198562, 221163 198774, 221140 198845, 221220 199434, 221348 200987, 221411 201257, 221566 201406, 221504 201601, 221601 202069, 221581 202313, 221611 203094, 221744 204087, 221750 204272, 221815 204912, 221875 204073, 221881 203400, 221835 202777, 221653 201372, 221626 200756, 221574 200236, 221440 199675, 221438 199420, 221364 198766, 221369 198261, 221310 197173, 221206 197061, 221220 195958, 221141 194961, 221122 194825, 221100 194168, 221079 192852, 221070 190963, 221162 189736, 221171 189147, 221164 188859, 221180 188304, 221304 187820, 221413 186984, 221422 186472, 221527 185273, 221504 185228, 221537 185165, 221600 184499, 221642 183187, 221868 183031, 222621 182969, 222896 183411, 223205 183100, 223623 182886, 224146 182886, 224447 183282), (221579 271452, 221677 271624, 221791 271589, 221676 271035, 221598 270763, 221579 271452), (218301 267048, 218320 267226, 218239 267686, 218228 268304, 218275 269127, 218442 268452, 218452 268292, 218554 267794, 218601 266861, 218502 266661, 218301 267048), (222871 266324, 222708 267065, 222680 267782, 222880 268273, 222951 267758, 222782 267285, 222876 267147, 222924 266966, 222905 266309, 222871 266324), (221401 262111, 221440 263168, 221492 264009, 221553 264201, 221594 263782, 221578 263025, 221515 262262, 221418 261760, 221401 262111), (223248 259991, 223192 260544, 223336 260606, 223354 259998, 223259 259490, 223248 259991), (223354 258416, 223427 259152, 223375 258378, 223354 258416), (220045 253121, 220169 253585, 220165 253125, 220020 252587, 220045 253121), (218447 244665, 218498 244992, 218554 244391, 218442 244221, 218447 244665), (218581 243353, 218488 243838, 218620 243690, 218639 243444, 218549 242983, 218581 243353), (221494 242384, 221525 242967, 221576 243399, 221606 243109, 221558 242496, 221488 242053, 221494 242384), (218647 241972, 218647 242211, 218709 242491, 218759 241863, 218647 241972), (218661 241275, 218784 241414, 218797 240995, 218702 240782, 218661 241275), (218844 238922, 218842 239048, 218741 239701, 218854 240368, 218756 239732, 218882 239251, 218892 238832, 218844 238922), (222535 230596, 222651 231465, 222673 230706, 222568 230176, 222535 230596), (219891 221588, 219824 222165, 219831 222537, 219905 222767, 219967 223238, 220069 222526, 220022 222241, 220006 221740, 219954 221128, 219887 220566, 219891 221588), (217920 215876, 217954 216771, 218169 216804, 218156 217736, 218237 218085, 218305 218874, 218355 218808, 218396 218375, 218333 218080, 218292 217494, 218262 217290, 218215 216522, 217981 216554, 217957 215920, 217928 215828, 217920 215876), (220148 212201, 220146 212837, 220208 212441, 220234 211647, 220148 212201), (221676 207556, 221593 208146, 221584 208840, 221630 209360, 221752 209538, 221731 210072, 221753 211026, 221789 211564, 221846 210636, 221969 208162, 221955 207470, 221910 207167, 221676 207556), (223382 206906, 223445 207583, 223418 206839, 223380 206415, 223382 206906), (217876 206674, 217887 206958, 217906 206790, 217899 206047, 217876 206674), (217700 203481, 217666 204005, 217697 204636, 217775 204393, 217753 204127, 217762 203627, 217741 203195, 217700 203481), (218966 201405, 218984 202172, 219048 202451, 219012 202834, 219063 203166, 219177 202826, 219234 202158, 219187 201799, 219024 201502, 219045 200889, 218966 201405), (218852 198320, 218858 199204, 218891 200056, 219085 199208, 219019 198112, 218852 198320), (218879 196159, 218803 196403, 218811 197084, 218831 197750, 218895 197490, 218874 197385, 218961 196821, 218977 196029, 218887 195908, 218879 196159), (219100 191706, 219047 192287, 219023 192916, 218959 193569, 218971 194193, 218951 194539, 219045 194532, 219223 194217, 219286 193573, 219165 192923, 219164 192286, 219314 191674, 219100 191706)), ((238343 189074, 238466 189951, 238541 189602, 238613 189493, 238645 189311, 238794 189391, 239047 188956, 239074 188676, 239423 188828, 239546 188950, 239750 189388, 239803 189758, 239767 190009, 239782 191249, 239710 191843, 239742 192441, 239723 193700, 239974 194816, 240044 195031, 240147 195546, 240242 195710, 240447 196382, 240504 196527, 240652 197054, 240686 197287, 240889 197730, 240974 198611, 241107 199123, 241073 199371, 241136 199823, 241106 200524, 241183 201703, 241255 201911, 241271 202166, 241222 202618, 241128 204066, 241045 205657, 240961 206288, 240589 208316, 240467 209198, 240312 209647, 240069 210479, 240062 210743, 239680 211869, 239256 213328, 239121 213885, 238955 214403, 238854 214909, 238649 215754, 238499 216236, 238370 216732, 238274 217295, 238325 218051, 238453 218891, 238611 219601, 238806 221174, 238815 222674, 238869 222780, 238905 222760, 238853 221963, 239061 221662, 239142 221664, 239370 221558, 239385 221871, 239529 222317, 239665 222596, 239619 222820, 239635 223341, 239596 224068, 239628 224771, 239727 225452, 239774 226138, 239897 226768, 239890 226818, 239907 227507, 239945 228187, 240037 228864, 240042 228961, 240130 229456, 240131 229573, 240230 230959, 240251 231684, 240239 232431, 240265 233174, 240469 233887, 240808 234681, 240962 234927, 241100 235036, 241178 234559, 240855 233840, 240653 233116, 240818 232362, 240756 231638, 240483 230936, 240483 230707, 240393 229747, 240486 228828, 240475 228728, 240472 228132, 240361 227431, 240251 226855, 240260 226793, 240246 226029, 240318 225458, 240252 224699, 240111 224001, 239940 223418, 239741 221825, 239598 221203, 239589 221071, 239508 220570, 239397 220322, 239370 219606, 239095 218908, 238951 218216, 238871 218027, 238863 217305, 238898 216514, 239024 215712, 239032 215506, 239114 215386, 239265 214624, 239396 214130, 239408 213996, 239780 212643, 239914 212107, 239929 211922, 240012 211769, 240202 211235, 240472 210557, 240714 209875, 240820 209163, 241093 208411, 241299 207799, 241416 207071, 241454 206940, 241562 206309, 241567 205790, 241599 204818, 241570 204094, 241591 203532, 241549 202618, 241389 201907, 241440 201704, 241461 201204, 241390 200508, 241333 200139, 241261 199255, 241190 198524, 241113 198413, 241166 198342, 241064 197706, 241083 197452, 241034 197000, 240765 195656, 240585 194949, 240469 194319, 240329 193050, 240303 192285, 240291 191408, 240329 190524, 240440 189673, 240692 189167, 241035 188977, 241165 188990, 241466 189159, 241919 189372, 241927 189425, 242107 189544, 242166 189839, 242219 190574, 242260 193582, 242220 196581, 242263 198318, 242349 203539, 242361 205152, 242306 206488, 242251 207307, 242211 207755, 242175 208744, 242169 209889, 242176 211654, 242160 213534, 242176 216292, 242132 218077, 242085 218699, 242105 219587, 242110 221679, 241993 222464, 241946 222538, 241924 222462, 241620 222140, 241356 222442, 241463 222779, 241603 223055, 241936 223864, 242097 224582, 242130 225301, 242135 225920, 242120 226887, 242136 227340, 242096 228115, 242091 228860, 242144 230395, 242184 231981, 242283 234070, 242297 234594, 242206 235307, 241952 235986, 242136 236674, 242281 237408, 242277 237847, 242302 239597, 242266 241099, 242183 242292, 242164 243079, 242190 243842, 242231 244484, 242285 246326, 242352 248044, 242356 249246, 242317 249939, 242300 250644, 242291 252041, 242350 254884, 242347 255935, 242261 259208, 242141 260772, 242087 262831, 242022 263442, 241963 263614, 241691 263748, 241304 263770, 241260 263720, 241007 263670, 240762 262918, 240688 262185, 240679 261955, 240620 261823, 240542 260977, 240417 260160, 240429 260017, 240372 259463, 240241 258383, 240116 257068, 239992 256314, 239824 255078, 239768 254380, 239655 253672, 239502 252946, 239415 251429, 239443 251175, 239537 250000, 239680 248866, 239774 248252, 240064 246754, 240020 246522, 240084 246654, 240239 245997, 240318 245234, 240482 244703, 240527 244496, 240726 243772, 240732 243678, 240833 243049, 240789 242535, 240792 242329, 240719 242095, 240679 242217, 240625 242790, 240550 243028, 240310 243290, 240227 243721, 240286 244023, 240239 244463, 240166 244579, 240043 245198, 239836 245937, 239711 246705, 239746 247201, 239609 246970, 239508 247049, 239375 248117, 239383 248263, 239320 248369, 239115 249194, 239001 248246, 238908 247708, 238953 247232, 238961 246669, 238985 246421, 239019 245721, 239137 243961, 239182 242980, 239442 241678, 239476 240987, 239531 239192, 239535 238642, 239570 238158, 239446 237173, 239215 235484, 239176 234866, 238828 233217, 238629 232674, 238413 231982, 238225 231428, 237949 230810, 237870 231367, 237951 231862, 238238 232738, 238237 232822, 238305 233443, 238364 234147, 238486 234863, 238640 235447, 238761 236166, 238846 236819, 238892 237562, 238850 238192, 238971 238925, 239025 239170, 239061 239838, 238986 241568, 238937 242014, 238870 242815, 238767 244690, 238684 245975, 238608 247781, 238519 248276, 238502 249076, 238525 249851, 238629 250654, 239073 253179, 239171 253674, 239356 254378, 239509 255348, 239682 256303, 239682 256420, 239781 257305, 239802 257577, 239908 258471, 239975 258916, 240060 259767, 240072 260070, 240188 260790, 240332 262146, 240387 263258, 240336 263386, 240039 263760, 239860 263772, 239265 263643, 239241 262821, 239208 262648, 239083 261652, 238621 259224, 238256 257179, 238231 256993, 237988 255951, 237805 255011, 237614 254279, 237251 253547, 237065 252835, 236933 251926, 236830 251346, 236734 250572, 236723 249668, 236758 248330, 236855 247633, 236792 246570, 236740 245897, 236624 241292, 236577 240327, 236600 239805, 236627 239686, 236716 238760, 236702 238342, 236617 237739, 236475 236970, 236460 236839, 236356 236263, 236286 235725, 236326 235113, 236148 234799, 235820 234077, 235582 233219, 235479 232408, 235520 230968, 235484 230196, 235510 229820, 235460 229420, 235400 228643, 235479 227943, 235461 227347, 235471 227082, 235346 226735, 235276 226779, 235167 227039, 235163 227668, 235180 227868, 235182 228648, 235134 229426, 235076 229804, 235164 230572, 235028 230745, 235109 231770, 235018 232533, 235401 233237, 235459 233937, 235404 234531, 235069 233961, 234723 233171, 234400 232559, 234250 231839, 234232 230792, 234198 229856, 234181 227180, 234193 225615, 234171 225243, 234162 224313, 234147 224039, 234180 221495, 234379 220757, 234802 220123, 234983 219747, 235084 219654, 235619 218639, 235742 217885, 235722 217610, 235831 217309, 235903 216323, 236055 215526, 236096 214985, 236133 214717, 236195 214065, 236227 213910, 236204 213692, 236176 213113, 236219 212329, 236311 211552, 236281 210794, 236151 210056, 236006 209465, 235946 209334, 235969 209208, 235991 208624, 236009 208509, 235995 207937, 235949 207551, 235818 207365, 235753 207444, 235780 207284, 235690 206929, 235694 206623, 235670 205673, 235617 204800, 235405 205220, 235402 205075, 235392 205251, 235441 205947, 235431 206112, 235452 206628, 235444 206868, 235481 207715, 235462 208249, 235540 208649, 235649 210076, 235812 211576, 235793 212347, 235657 213908, 235685 214506, 235642 215429, 235471 217868, 235519 218413, 235389 218183, 235315 218343, 235281 218619, 235187 219194, 235078 219117, 234858 219348, 234785 219854, 234721 219595, 234552 219687, 234223 219379, 234203 218779, 234209 218235, 234198 217128, 234206 216894, 234186 214805, 234199 213486, 234198 212325, 234207 211648, 234266 209342, 234354 208618, 234455 207962, 234510 207323, 234497 206593, 234388 205145, 234347 204230, 234311 203025, 234394 202314, 234409 201601, 234566 200894, 234862 200182, 235136 199476, 235290 199235, 235493 198758, 235503 197947, 235564 197188, 235594 196688, 235759 195934, 235918 195386, 236095 194694, 236298 194088, 236409 193551, 236468 193030, 236464 192850, 236560 192099, 236614 191279, 236582 190696, 236498 190197, 236455 189602, 236476 188896, 236527 188773, 236873 188592, 238134 188573, 238343 189074), (240900 240252, 240969 240744, 240992 240253, 240950 239972, 240900 240252), (241520 235027, 241285 235269, 241617 235624, 241769 235280, 241657 234982, 241520 235027), (237279 229235, 237401 229619, 237637 229919, 237611 230403, 237752 230909, 237780 230640, 237654 229936, 237348 229022, 237279 229235), (238179 225876, 238102 226234, 238120 226825, 238117 227685, 238157 228361, 238354 229240, 238507 229512, 238607 229992, 238674 230084, 238783 229732, 238742 229296, 238780 228311, 238647 227301, 238574 226928, 238487 226236, 238422 225928, 238489 225531, 238275 225271, 238179 225876), (236384 225592, 236462 225985, 236458 226334, 236582 226826, 236602 227068, 236736 227566, 236858 227429, 236768 227058, 236836 226776, 236738 225966, 236723 225586, 236503 224927, 236384 225592), (238493 224488, 238422 224821, 238520 225431, 238559 224823, 238719 224109, 238705 224038, 238493 224488), (236045 222573, 235943 222839, 235941 223324, 236131 224095, 236194 224927, 236292 224850, 236222 224267, 236154 224096, 236291 223704, 236162 222717, 236142 222130, 236045 222573), (240959 220227, 241188 220935, 241072 220064, 241032 220035, 240959 220227), (240535 214767, 240447 215722, 240411 216476, 240424 217236, 240533 217769, 240643 217990, 240599 218166, 240824 219535, 240908 218741, 240835 217983, 240600 217035, 240615 215719, 240656 214977, 240634 214446, 240535 214767), (236852 217712, 236725 218297, 236746 218799, 236758 218846, 236939 217702, 236852 217712), (237578 212775, 237514 213156, 237517 213600, 237440 213973, 237341 214670, 237466 214805, 237456 214990, 237515 214855, 237675 213995, 237715 213679, 237796 213185, 237676 212609, 237578 212775), (237984 210681, 237912 211600, 237839 211949, 237924 212134, 238181 211046, 238175 210874, 238046 210467, 237984 210681), (238366 209385, 238272 209921, 238178 210120, 238257 210712, 238359 210159, 238381 209486, 238542 209077, 238366 209385), (237656 200927, 237545 200973, 237285 201343, 236755 202641, 236720 203315, 236728 203978, 236716 204626, 236675 205208, 236577 205916, 236611 206182, 236740 206256, 236816 206421, 237059 206467, 237328 205881, 237085 205249, 236992 204625, 236982 204196, 237053 203998, 237141 203374, 237104 203076, 237174 202730, 237363 202110, 237657 201876, 238116 201740, 238179 201673, 238155 201753, 238562 202288, 238851 202825, 238995 203426, 239238 204036, 239304 204499, 239374 204692, 239344 205365, 239169 205939, 238988 206297, 238940 206705, 238875 206858, 238812 207360, 238783 207670, 238671 208063, 238562 208568, 238691 208756, 239018 208248, 239047 208230, 239313 207492, 239422 206798, 239756 205949, 240007 205437, 239979 204723, 239744 203362, 239613 203002, 239440 202706, 239212 202080, 239176 201409, 239064 201032, 238707 200491, 238594 200497, 238459 200367, 237831 200289, 237656 200927), (238123 204104, 238329 205275, 238273 205912, 238015 206509, 237794 206376, 237700 206363, 237398 206516, 237377 206374, 237350 206541, 237761 206705, 238028 206609, 238334 206237, 238507 205942, 238398 205282, 238324 204102, 238174 203773, 238123 204104), (238362 191738, 238144 191680, 238002 192028, 237973 192393, 237977 193015, 237930 193581, 237932 193658, 237844 194985, 237787 195553, 237776 195751, 237637 196768, 237427 197672, 236960 199011, 236496 200253, 236303 201098, 236196 201820, 236350 201218, 236411 201121, 236528 200667, 236621 200902, 236739 200747, 236914 200206, 237315 199390, 237430 199122, 237506 199057, 237662 198391, 237829 198164, 237902 197766, 238030 197217, 238250 196405, 238417 195740, 238531 194978, 238611 193732, 238574 192958, 238514 192403, 238411 191889, 238445 191249, 238431 190864, 238362 191738)), ((234450 234457, 234980 235087, 235013 235067, 235417 235572, 235537 235674, 235765 236292, 235840 236935, 235913 237772, 236006 238386, 236063 239040, 236101 239706, 236120 239872, 236161 240578, 236234 242552, 236310 245043, 236308 245456, 236402 246188, 236368 246932, 236413 247684, 236426 248456, 236384 249655, 236322 250581, 236371 251307, 236501 252056, 236651 252800, 237214 255047, 237404 255666, 237654 257041, 238061 258853, 238359 260389, 238399 260660, 238546 261313, 238694 262037, 238755 262893, 238711 263384, 238623 263575, 238328 263743, 237416 263693, 236907 263631, 236745 263514, 236657 263377, 236512 261806, 236512 261601, 236238 259282, 236228 259124, 236080 258254, 236091 257824, 236021 257143, 236068 256445, 235973 255593, 235882 254304, 235870 253770, 235874 253548, 235733 252837, 235469 251848, 235112 251144, 235027 251002, 234518 250051, 234298 249355, 234218 248630, 234243 247856, 234332 247086, 234523 246264, 234670 245502, 234713 244736, 234701 243942, 234705 242584, 234637 241828, 234474 241189, 234291 240557, 234221 239969, 234190 239053, 234198 237815, 234188 237079, 234200 235539, 234241 234423, 234421 234310, 234450 234457)), ((234699 252115, 235042 252659, 235132 252732, 235154 252689, 235443 253585, 235573 254291, 235586 254258, 235609 254968, 235488 255769, 235502 256537, 235604 257557, 235628 257895, 235804 259166, 235995 260094, 236000 260318, 236037 260874, 236070 261140, 236070 261699, 236218 262676, 236157 263318, 236050 263345, 235909 263450, 235590 263411, 235073 263302, 234599 263133, 234411 262951, 234482 259797, 234427 259070, 234357 257393, 234308 256474, 234309 255777, 234402 254403, 234407 253623, 234385 252908, 234428 252102, 234694 251969, 234699 252115)), ((212440 161411, 212695 161715, 212968 161451, 213288 161437, 213687 161481, 213762 161557, 213985 162190, 214154 161762, 214444 161585, 215057 161587, 215443 161680, 215612 162197, 215664 163053, 215677 164716, 215704 166271, 215695 167747, 215661 169361, 215735 172914, 215805 177782, 215784 178881, 215700 180264, 215657 181141, 215642 181986, 215646 184473, 215628 186095, 215649 188704, 215595 191835, 215635 195825, 215646 196163, 215659 197615, 215653 198779, 215673 199975, 215671 200992, 215690 202183, 215771 203627, 215794 204455, 215810 205979, 215867 207776, 215880 208674, 215891 211173, 215784 213394, 215679 214490, 215650 215501, 215721 217192, 215741 218264, 215800 219676, 215813 221360, 215786 222596, 215771 223960, 215823 226624, 215819 227927, 215717 231715, 215642 232784, 215567 235278, 215512 235597, 215257 235788, 214940 235867, 214709 235657, 214712 235290, 214616 234833, 214425 234517, 214406 234841, 214420 235587, 214264 235823, 214080 235894, 213238 235899, 213109 235747, 213059 235249, 213020 235044, 213116 234818, 213171 233598, 212910 233213, 212908 233570, 213053 233822, 212878 233711, 212810 234280, 212906 234917, 212696 235789, 212448 235895, 211593 235869, 211005 235727, 210953 235676, 210826 235294, 210729 232555, 210692 232520, 210735 231063, 210650 230072, 210668 229274, 210643 228245, 210600 227702, 210539 227151, 210496 226539, 210472 225830, 210517 225452, 210515 224876, 210447 223841, 210343 222516, 210246 220602, 210208 219192, 210176 218361, 210156 215819, 210146 215442, 210175 214814, 210302 213689, 210283 213185, 210147 212584, 210060 211653, 209784 211565, 209773 212224, 209623 213193, 209638 213698, 209853 215052, 209850 217707, 209879 218985, 209976 221518, 210059 223109, 210082 224343, 210160 225372, 210261 226027, 210285 226635, 210288 227146, 210312 227498, 210315 228229, 210368 228750, 210377 229280, 210428 229721, 210406 229915, 210417 230514, 210408 230639, 210411 231342, 210437 232023, 210430 232777, 210378 232955, 210394 234232, 210421 234678, 210417 235345, 210324 235602, 210104 235684, 209793 235698, 209200 235614, 208295 235447, 207762 235262, 207538 235090, 207566 234057, 207602 231983, 207592 231454, 207544 230472, 207539 230101, 207459 228215, 207526 227284, 207588 226165, 207544 225077, 207473 224320, 207422 223319, 207405 221222, 207414 220620, 207470 219790, 207575 219098, 207670 218709, 207786 218152, 207865 217637, 207886 217135, 207866 215940, 207875 214846, 207831 214345, 207733 213837, 207571 213314, 207451 212734, 207418 211861, 207417 209814, 207487 204769, 207486 203965, 207418 202465, 207402 201902, 207432 200397, 207389 197813, 207394 197304, 207381 196974, 207377 196415, 207403 192751, 207437 191270, 207408 188057, 207422 185090, 207466 182056, 207645 180758, 207707 180234, 207699 179314, 207618 178259, 207545 176541, 207496 175108, 207483 173204, 207418 171732, 207468 169113, 207482 168798, 207469 167819, 207403 166529, 207427 164953, 207434 163576, 207467 162005, 207641 161687, 207894 161553, 208174 161476, 209149 161445, 209497 161594, 209774 161542, 209986 161431, 210544 161419, 210712 161464, 210847 161629, 210878 162280, 210906 161921, 211036 161499, 211230 161398, 212120 161382, 212440 161411), (212912 233140, 213125 233207, 213039 232607, 212925 232540, 212912 233140), (212806 228865, 212855 229397, 212968 229728, 212950 228843, 212811 228159, 212767 228030, 212806 228865), (212747 225751, 212825 226366, 212765 225625, 212652 224658, 212747 225751), (212550 222099, 212551 222374, 212645 222578, 212628 222208, 212570 221663, 212482 221328, 212550 222099), (212261 214313, 212236 214855, 212368 217723, 212397 218735, 212496 219954, 212504 220320, 212571 220623, 212532 220903, 212644 220804, 212574 219703, 212553 219034, 212548 218233, 212491 216876, 212440 216129, 212423 215247, 212346 214252, 212315 213624, 212261 214313), (212142 211547, 212145 211643, 212214 211075, 212195 210932, 212142 211547), (212058 205702, 212067 205984, 211995 206315, 212012 207264, 212240 207285, 212049 207835, 212044 208551, 212138 208884, 212060 209057, 212086 209876, 212241 209402, 212266 208559, 212118 208215, 212242 207809, 212242 207283, 212182 206755, 212227 206591, 212220 206220, 212250 205491, 212222 205159, 212058 205702), (211999 204427, 212018 205052, 212221 205149, 212139 204623, 212162 204273, 212124 203930, 211999 204427), (209374 193203, 209357 193802, 209467 193918, 209510 193142, 209374 193203), (213678 169320, 213752 169432, 213706 168918, 213678 169320), (210828 164479, 210793 166386, 210909 167076, 210912 167278, 210978 167382, 210925 165323, 210884 164169, 210855 163677, 210828 164479)), ((185297 167110, 185407 167451, 185338 167598, 185329 167852, 185381 168350, 185440 168634, 185651 168170, 185703 167967, 185970 167346, 185951 167256, 186126 167059, 186995 167057, 187112 167225, 187126 167396, 187297 167851, 187511 167580, 187718 167194, 187870 167100, 188330 167079, 188764 167155, 188994 167415, 189208 168124, 189259 170043, 189265 172829, 189303 174099, 189352 175290, 189338 177095, 189317 178365, 189324 178591, 189317 179552, 189335 180080, 189336 181778, 189365 182574, 189307 185446, 189234 186526, 189151 188026, 189098 188685, 189071 189372, 189129 190059, 189263 190768, 189309 191406, 189325 192154, 189286 193042, 189214 194103, 189187 194381, 189130 195334, 189118 196181, 189172 197770, 189250 199065, 189299 199563, 189498 203737, 189430 206912, 189389 209907, 189222 210588, 189108 211235, 189156 211949, 189317 212617, 189341 213367, 189375 214059, 189384 214777, 189416 215539, 189407 216229, 189356 217642, 189328 219067, 189215 220574, 189234 221297, 189335 221977, 189374 222713, 189388 223874, 189324 227914, 189109 228395, 188719 228449, 188023 228456, 186631 228549, 186472 228294, 186408 227996, 186415 227471, 186472 226226, 186490 224835, 186572 224305, 186831 221683, 186915 221369, 186945 220871, 186783 220779, 186532 221354, 186601 222053, 186534 222688, 186516 222971, 186301 224576, 186158 225468, 186101 225766, 185988 226490, 185888 227052, 185879 227574, 185884 228095, 185903 228345, 185800 228622, 185648 228661, 184705 228665, 184580 228544, 184505 228065, 184589 227785, 184592 227338, 184713 226475, 184776 225868, 184855 225273, 184967 224652, 185050 223973, 185108 223369, 185147 222391, 185115 221420, 185102 220614, 185028 219962, 184895 219037, 184863 218607, 184664 217295, 184543 216617, 184519 216385, 184402 215871, 184301 216015, 184314 215632, 184248 215280, 184263 214892, 184154 214176, 183924 214098, 183955 214899, 184062 215474, 184143 215982, 184290 217116, 184437 217790, 184485 218576, 184610 219345, 184622 219973, 184659 220157, 184721 220668, 184758 221351, 184776 222025, 184770 223359, 184705 224019, 184708 224132, 184682 224654, 184580 225282, 184460 225890, 184397 226657, 184348 226954, 184281 227490, 184203 228319, 184198 228589, 184131 228705, 183472 228795, 183168 228715, 183084 228646, 182878 228161, 182621 228725, 182522 228823, 181707 228851, 181435 228417, 181350 227690, 181327 226798, 181332 226001, 181306 225040, 181307 223943, 181234 221768, 181239 220209, 181254 220012, 181188 216954, 181248 216258, 181333 215500, 181336 214207, 181369 212866, 181422 212207, 181449 211242, 181418 210532, 181344 209805, 181330 209094, 181393 208494, 181534 207740, 181587 207109, 181606 206295, 181572 205427, 181536 204928, 181513 204025, 181460 203209, 181407 202874, 181346 202316, 181309 201374, 181297 200232, 181281 199875, 181240 197166, 181250 196634, 181339 195182, 181353 194246, 181298 192862, 181286 191907, 181303 190654, 181308 188838, 181532 188195, 181627 187585, 181656 186499, 181699 185835, 181613 185045, 181541 184647, 181431 183748, 181409 182317, 181416 180616, 181454 179562, 181469 177082, 181521 175854, 181525 174698, 181410 173973, 181453 173234, 181473 172197, 181501 171633, 181456 170072, 181527 169120, 181574 167732, 181674 167318, 182006 167041, 182733 167028, 182932 167135, 183128 167348, 183253 167247, 183784 167190, 184405 167022, 184888 167021, 185297 167110), (182601 220573, 182601 220833, 182575 221391, 182589 221549, 182558 222068, 182557 222276, 182513 222984, 182619 223110, 182774 222721, 182727 221382, 182712 220690, 182653 220062, 182601 220573), (186874 218523, 186899 218720, 186834 219235, 186874 219794, 187068 219231, 187034 218959, 187056 218340, 187039 217808, 186874 218523), (186807 215685, 186788 216242, 186814 216403, 186714 217267, 186752 217528, 187037 217808, 186850 217109, 186886 216506, 186880 216399, 186968 215570, 186736 215251, 186807 215685), (188015 213703, 188055 214135, 188100 215107, 188192 215141, 188177 214751, 188239 214003, 188173 213331, 188153 213301, 188015 213703), (182346 211844, 182288 211830, 182377 212784, 182461 213044, 182533 212958, 182502 212708, 182479 212001, 182439 211663, 182346 211844), (185267 212010, 185261 212745, 185405 212303, 185449 211755, 185350 211748, 185267 212010), (187888 211959, 187918 212466, 187950 211958, 187923 211687, 187888 211959), (184110 208365, 184085 209894, 183979 210471, 184007 210590, 183928 210733, 183874 211295, 183917 212207, 184178 212008, 184328 211284, 184328 210906, 184243 210539, 184282 209889, 184284 209201, 184240 208653, 184164 208194, 184110 208365), (187824 206319, 187819 206833, 187922 206254, 187903 205990, 187824 206319), (187613 204764, 187640 204905, 187597 205679, 187634 205715, 187779 205556, 187696 205446, 187760 204747, 187708 204580, 187613 204764), (187325 203943, 187332 204158, 187409 204261, 187509 203922, 187510 203680, 187417 203655, 187325 203943), (185723 201112, 185803 201361, 185782 202147, 185822 202381, 185871 203134, 185947 203520, 185999 203290, 185993 202138, 185999 201841, 185953 200921, 185896 200713, 185723 201112), (183111 196097, 183111 196338, 183220 196571, 183346 196089, 183357 195861, 183244 195515, 183111 196097), (187168 187332, 187096 188140, 187055 188812, 186932 189816, 186947 190690, 187033 190305, 186975 189832, 187148 189628, 187219 188881, 187258 188142, 187230 187867, 187370 187292, 187168 187332), (184359 187722, 184404 188292, 184387 187689, 184349 187311, 184359 187722), (187365 185986, 187363 186393, 187203 187147, 187394 187204, 187461 186611, 187503 185973, 187455 185491, 187365 185986), (185911 183458, 185982 184152, 186008 184285, 186031 184115, 186101 183340, 186009 182935, 185911 183458), (187495 180554, 187553 181290, 187625 180551, 187535 179884, 187495 180554), (182489 175139, 182515 175803, 182391 176384, 182360 176383, 182395 176941, 182579 176594, 182646 175985, 182711 175237, 182687 174648, 182489 175139), (184155 172903, 184186 173891, 184245 174426, 184331 174780, 184395 174585, 184412 173770, 184378 173140, 184238 172626, 184155 172903), (187354 169144, 187305 169545, 187269 170271, 187255 170954, 187324 171368, 187399 171508, 187539 171257, 187533 171111, 187641 170750, 187724 169433, 187631 169027, 187644 168917, 187597 168883, 187354 169144), (182772 170156, 182859 170644, 182923 171233, 183103 171365, 183165 170881, 183182 170371, 182928 170047, 182772 170156), (184144 167291, 184024 167660, 184063 167803, 184162 168395, 184189 168798, 184297 169405, 184296 169102, 184244 168395, 184283 168102, 184311 167596, 184411 167274, 184144 167291), (182898 167926, 182844 168051, 182954 168592, 183074 169096, 183100 169155, 183098 168673, 183052 167999, 183066 167740, 182898 167926)), ((235459 188654, 235687 188917, 235822 189324, 236001 190191, 235918 191121, 235928 191635, 236013 192207, 235998 192273, 236012 192789, 235902 193397, 235786 193668, 235569 194393, 235505 194555, 235319 195235, 235090 196611, 235041 197310, 234999 197624, 235055 198027, 234832 198748, 234866 199199, 234741 199466, 234758 200007, 234621 199769, 234389 199579, 234325 199670, 234281 199476, 234248 198732, 234254 197148, 234286 195536, 234204 193095, 234226 191243, 234221 190495, 234237 189605, 234266 189452, 234274 188928, 234657 188619, 235149 188598, 235459 188654)), ((190945 175323, 191056 175591, 191143 175634, 191279 175359, 191317 176094, 191367 176309, 191424 176930, 191362 177653, 191320 178375, 191372 178726, 191437 179275, 191479 179855, 191543 180389, 191708 180544, 191648 180897, 191717 181145, 191724 181439, 191798 181801, 191987 181569, 191896 181948, 191968 182137, 191889 182525, 191944 183472, 191990 183616, 192074 183655, 191952 184189, 191699 184362, 191201 184289, 190347 184111, 190098 183979, 190087 183430, 190096 183346, 190105 182806, 190150 181489, 190128 180812, 190090 180358, 190042 179446, 190034 179080, 189985 178259, 190101 176873, 190082 175434, 190129 175036, 190276 174786, 190571 175021, 190665 174877, 190781 174873, 190924 174583, 190945 175323))) \ No newline at end of file diff --git a/stress_benchmark/resources/015.settings b/stress_benchmark/resources/015.settings index 55af6339c5..978ab42581 100644 --- a/stress_benchmark/resources/015.settings +++ b/stress_benchmark/resources/015.settings @@ -6,7 +6,6 @@ resolution=0 _plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 skin_preshrink=0.8 clean_between_layers=False -support_interface_skip_height=0.2 machine_feeder_wheel_diameter=10.0 retraction_hop_only_when_collides=False machine_steps_per_mm_y=50 @@ -44,6 +43,7 @@ cool_min_speed=10 cool_fan_enabled=True cool_fan_speed_max=100 wall_overhang_angle=90 +seam_overhang_angle=30 jerk_support_infill=20 wall_overhang_speed_factor=100 support_roof_line_width=0.4 diff --git a/stress_benchmark/resources/015.wkt b/stress_benchmark/resources/015.wkt index 65775d9826..7b8689f4f0 100644 --- a/stress_benchmark/resources/015.wkt +++ b/stress_benchmark/resources/015.wkt @@ -1 +1 @@ -MULTIPOLYGON (((99345 45800, 99640 46892, 99895 48430, 99533 48811, 99754 50319, 99482 50643, 99467 50724, 99719 50808, 99843 50755, 99865 50639, 99705 49954, 99827 49570, 100002 49260, 99911 48847, 99897 48429, 100280 48073, 100663 47826, 101099 47951, 101445 48274, 101834 48333, 102216 47947, 102603 47911, 102995 48278, 103387 48397, 103796 48170, 104154 47911, 104588 47964, 104933 48205, 105322 48264, 105706 48005, 106093 47968, 106484 48242, 106878 48388, 107643 47912, 108031 47909, 108422 48169, 108811 48307, 109581 47879, 109973 48193, 110364 48430, 110770 48202, 111132 47899, 111520 47915, 112300 48366, 112685 48089, 113071 47880, 113855 48400, 114256 48236, 114621 47912, 115058 47917, 115790 48310, 116202 48153, 116560 47912, 116983 48089, 117341 48362, 117739 48302, 118111 47966, 118542 47991, 118880 47387, 119256 46484, 119637 46480, 119663 46673, 120031 46476, 120222 47192, 127010 47210, 129336 47204, 130302 47216, 130502 47358, 130647 47521, 130909 48432, 130325 49083, 130401 49194, 104681 49194, 104681 66303, 104485 66253, 104426 67081, 104497 67968, 104434 68318, 104504 68792, 104426 68928, 104406 69103, 104448 69444, 104445 69999, 104681 70128, 104681 72342, 104459 72248, 104438 72651, 104526 73040, 104323 73868, 104359 73974, 104618 74190, 104681 74196, 104681 87981, 104494 88321, 104285 89144, 103946 89111, 103678 89708, 103449 90150, 103398 90172, 103313 90560, 103010 90493, 102825 91098, 102781 91116, 102720 91849, 102350 91412, 102210 91621, 101960 92117, 101741 92951, 101384 92965, 100900 93958, 100806 94311, 101018 94313, 100884 94504, 100741 94527, 100768 94381, 100388 94450, 100156 95315, 100225 95351, 100144 95357, 100147 95327, 99763 95409, 99643 95846, 99195 96743, 98881 96739, 98816 96833, 98559 97699, 98166 97777, 97947 98256, 97708 98709, 97606 99122, 97204 99188, 97085 99634, 96893 100072, 96952 100132, 96789 100511, 96838 100788, 96609 100706, 96614 100559, 96302 100615, 96042 101411, 96254 101435, 96114 101720, 95839 102043, 95736 102071, 95784 101950, 95452 101927, 95167 102507, 95081 102881, 95444 103057, 94988 103170, 94921 103335, 94572 103370, 94198 104191, 94316 104291, 94256 104523, 94052 104859, 93943 104904, 93975 104772, 93590 104840, 93469 105293, 93027 106147, 92786 106056, 92652 106298, 92543 106685, 92681 106678, 92624 106847, 92458 106942, 92389 107142, 92204 107196, 92125 107475, 91996 107289, 91596 108138, 91452 108563, 91123 108541, 91052 108627, 90813 109456, 90910 109489, 90746 109656, 90775 109525, 90399 109599, 90056 110462, 90314 110606, 89936 110770, 89853 110933, 89548 110901, 89469 111015, 89186 111896, 89172 111903, 89150 112679, 88728 112186, 88562 112458, 88357 113023, 88624 113454, 88095 113737, 87821 113564, 87326 114734, 87313 114739, 87236 115250, 86938 114880, 86750 115280, 86644 115685, 86237 115789, 85860 116688, 85772 116981, 86087 117014, 85876 117336, 85621 117407, 85563 117529, 85260 117468, 85171 117606, 84920 118267, 85317 118388, 85105 118977, 84717 118772, 84627 118925, 84352 118849, 84236 119070, 84133 119451, 84337 119432, 84111 119945, 84060 120251, 83449 120266, 83327 120483, 83037 121329, 82708 121331, 82639 121395, 82309 122264, 82434 122279, 82307 122622, 82241 122330, 81905 122408, 81704 122866, 81600 123264, 81953 123186, 81745 123519, 81460 123639, 81430 123715, 81100 123704, 81036 123786, 80887 124239, 80486 125072, 80212 125075, 80068 125253, 79996 125626, 80230 125365, 80553 125184, 80879 125062, 81135 125121, 81609 124906, 81593 125429, 81437 125368, 81233 125554, 81115 125740, 81191 125983, 81567 126136, 81545 126011, 81891 125207, 82592 124977, 82816 125275, 82611 125719, 82799 126055, 82483 126916, 82664 127255, 82480 127692, 82685 128025, 82519 128457, 82711 128793, 82518 129233, 82736 129562, 82580 129991, 82763 130329, 82583 130766, 82787 131098, 82628 131528, 82813 131866, 82453 132739, 82675 133067, 82479 133507, 82663 133845, 82517 134272, 82723 134604, 82554 135037, 82764 135369, 82758 135415, 83117 136047, 82776 136915, 82461 137772, 82805 138458, 82472 139236, 82451 139480, 82728 140030, 82517 140763, 82185 140567, 82130 140968, 82152 141058, 82206 140971, 82566 140854, 82968 141507, 82253 141654, 82135 141566, 82085 141756, 82148 141913, 82260 141772, 82967 141522, 82616 142376, 82279 142410, 82156 142331, 82103 142526, 82159 142713, 82283 142546, 82616 142396, 83019 143044, 82309 143180, 82178 143087, 82145 143290, 82193 143468, 82612 143895, 82622 144054, 83001 144607, 82515 145824, 82340 145951, 82553 145900, 82751 146226, 82581 146652, 82425 146702, 82582 146665, 82783 146993, 82609 147422, 82273 147441, 82141 147370, 82095 147568, 82145 147763, 82276 147594, 82610 147431, 82807 147762, 82632 148186, 82297 148216, 82161 148124, 82128 148334, 82178 148514, 82433 148639, 82494 149400, 82862 150072, 82521 150880, 82448 150960, 82528 150991, 82864 151566, 82733 151657, 82476 152253, 82202 151921, 82100 152606, 82155 152767, 82274 152635, 82605 152477, 82983 153130, 82283 153254, 82160 153190, 82120 153376, 82165 153554, 82279 153393, 82986 153145, 82661 153997, 82315 154041, 82194 153951, 82159 154140, 82202 154317, 82441 154451, 82200 154708, 82155 154916, 82214 155096, 82498 155228, 82702 155543, 82696 155587, 83041 156225, 82713 156988, 82038 157237, 82010 157260, 81299 157423, 81227 157409, 80553 157625, 80509 157656, 79948 157437, 79934 157458, 78822 157751, 78600 157441, 78691 157223, 78718 156971, 78622 156661, 78841 156505, 78811 156297, 78597 155892, 78769 155515, 78778 155384, 78344 155517, 78344 155625, 78491 155922, 78283 156171, 78191 156391, 78187 156780, 77836 157609, 77309 157380, 76917 157506, 76183 157699, 76018 157374, 76028 157309, 76000 157372, 75286 157565, 74872 156913, 75041 156505, 74820 156190, 74756 156170, 74667 155807, 74793 155450, 74795 155307, 74477 154696, 74674 154325, 74777 154226, 74834 154033, 74793 153834, 74812 153633, 74664 153481, 74476 153383, 74507 153524, 74469 153671, 74511 153911, 74436 154101, 74472 154309, 74373 154724, 74405 155012, 74589 155441, 74515 155688, 74563 155835, 74326 156288, 74238 156699, 74555 156755, 74766 156943, 75236 157573, 74520 157770, 74284 157454, 73165 157755, 72939 157443, 72971 157348, 72919 157439, 72554 157539, 72507 157460, 72513 157534, 71808 157737, 71687 157389, 70900 157607, 70751 157241, 70693 157205, 70018 157408, 69984 157456, 69370 157241, 69251 157677, 68886 157760, 68644 157457, 67888 157662, 67637 157346, 67275 157426, 67241 157393, 67256 157445, 66147 157742, 66036 157396, 65608 157514, 65751 157863, 65619 158286, 65886 158601, 65651 159053, 65796 159402, 65556 160266, 65831 160943, 65529 161792, 65597 161798, 65843 162102, 65737 162505, 65858 162873, 65692 163221, 65876 163256, 65720 163421, 65885 163640, 65774 164075, 65910 164410, 65658 164866, 65544 165258, 65473 165304, 65561 165285, 65819 165598, 65578 166046, 65531 166063, 65577 166056, 65703 166405, 65593 166815, 65559 166832, 65847 167140, 65606 167593, 65738 167946, 65614 168367, 65876 168683, 65637 169136, 65772 169487, 65557 170316, 65533 170292, 65781 171067, 65583 171871, 65818 172575, 65625 173403, 65880 173721, 65782 174148, 65898 174492, 65656 174945, 65903 175266, 65820 175675, 65558 176151, 65668 176493, 65546 176914, 65843 177220, 65592 177680, 65716 178031, 65617 178436, 65570 178457, 65620 178454, 65882 178761, 65632 179194, 65533 179243, 65626 179237, 65745 179574, 65649 179978, 65615 179996, 65653 179994, 65925 180299, 65659 180761, 65776 181115, 65577 181932, 65808 182657, 65603 183467, 65545 183504, 65605 183508, 65838 184200, 65639 185035, 65915 185341, 65827 185752, 65480 186343, 65632 186582, 65501 186891, 65545 186992, 66202 187201, 65560 187763, 65701 188114, 65576 188534, 66234 188743, 65566 189323, 65614 189322, 65730 189656, 65620 190069, 66264 190285, 65652 190835, 65758 191199, 65666 191602, 65608 191627, 65530 191968, 65565 192027, 65534 192103, 65621 192400, 65685 192385, 65787 192742, 65594 193569, 65824 194283, 66195 194191, 66470 194493, 67598 194194, 67871 194496, 68992 194200, 69102 194547, 70603 194146, 70717 194491, 71479 194286, 71490 194293, 72225 194092, 72736 193165, 72767 193153, 72621 192486, 73196 192721, 73327 192226, 73576 191776, 73682 191740, 73842 191370, 74184 191229, 74218 191123, 74147 190836, 74194 190661, 74369 190553, 74419 190378, 74790 190279, 75282 189363, 75397 188951, 75761 188857, 75873 188403, 76160 187895, 76325 187333, 76389 187509, 76729 187442, 76911 186779, 76572 186683, 76823 186204, 77093 186336, 77080 186545, 77348 186477, 77812 185569, 77935 185151, 78187 185078, 78087 184767, 78356 184872, 78431 184624, 78661 184180, 78730 184154, 78821 183852, 78590 183804, 78689 183468, 78936 183555, 79069 183375, 79373 183238, 79520 182788, 79650 182739, 79645 182111, 80076 182291, 80335 181780, 80465 181356, 80622 181310, 80708 181083, 80909 181009, 81245 179994, 81607 179878, 81695 179369, 81893 178777, 82087 178846, 82185 178562, 82544 178484, 82695 178028, 82910 177587, 83278 177484, 83494 177034, 83785 176194, 84063 176102, 83996 175759, 84215 175940, 84568 175193, 84711 174763, 84994 174530, 85148 174474, 85437 173794, 85802 173699, 86008 173243, 86315 172396, 86681 172288, 87080 171399, 87230 170971, 87600 170873, 87762 170437, 88141 169559, 88510 169460, 88809 168650, 88644 168644, 88738 168425, 88866 168506, 89018 168160, 89386 168058, 89504 167778, 89434 167652, 89734 167183, 90101 167096, 90305 166561, 90238 166135, 90861 165988, 91458 164535, 91312 164423, 91392 164176, 91601 164140, 91696 164319, 91882 164273, 91989 164003, 91899 163875, 91888 163551, 92118 163678, 92232 163401, 92607 163297, 93132 161992, 93502 161888, 94024 160582, 94396 160480, 94749 159613, 95102 159509, 95655 158201, 95921 158121, 95957 157983, 96052 158024, 96359 157230, 96733 157124, 97204 156023, 96890 155669, 97362 155556, 97431 155387, 97801 155285, 98183 154406, 98552 154303, 99041 153014, 99407 152906, 99573 152468, 99955 151598, 100324 151489, 100642 150633, 101006 150534, 101391 149663, 101355 149653, 101531 149174, 101630 149192, 101928 149112, 102082 148679, 102482 147800, 102850 147701, 103158 146838, 103528 146736, 103645 146479, 103526 146201, 103886 145859, 104011 145391, 104094 145381, 104235 144994, 104605 144886, 105015 144003, 105131 143658, 105068 143597, 105135 143534, 105066 143210, 105331 142639, 105595 143065, 105437 143330, 105195 143562, 105533 143476, 105682 143043, 106055 142939, 106418 142161, 106377 142075, 106509 141472, 106681 141424, 106788 141575, 106990 141522, 107138 141092, 107557 140201, 107703 139785, 108067 139684, 108363 138833, 108624 138746, 108604 138547, 108801 138492, 108870 138291, 109320 137398, 109669 137308, 109947 136450, 110315 136349, 110754 135449, 110890 135030, 111240 134928, 111397 134497, 111616 134054, 111811 133996, 111889 133726, 112140 133638, 112331 133108, 112303 133062, 112349 133049, 112476 132653, 112848 132550, 113294 131655, 113426 131231, 113800 131128, 113932 130701, 114382 129802, 114512 129385, 114877 129295, 115015 128858, 115241 128410, 115371 128374, 117026 129315, 120530 130977, 124387 132501, 128548 133870, 132944 135062, 137562 136077, 142293 136898, 147340 137558, 147017 138014, 146860 138296, 146399 138935, 146209 139365, 145835 139873, 145634 140056, 145550 140254, 145315 140588, 145226 140647, 144845 141272, 144597 141521, 144407 141978, 144121 142347, 143642 143102, 143386 143392, 142990 144083, 142651 144537, 142428 144986, 142059 145352, 141994 145492, 141721 145955, 141311 146521, 141075 146907, 140678 147411, 140490 147843, 140135 148328, 139911 148545, 139761 148914, 139515 149171, 139144 149762, 139048 150044, 138623 150624, 138349 150927, 138250 151170, 137886 151689, 137650 152136, 137393 152379, 137061 153047, 136777 153304, 136609 153660, 136240 153932, 135775 154562, 135501 154829, 135137 155319, 134997 155429, 134778 155726, 134378 156427, 133836 157068, 133657 157533, 133391 157773, 133165 158121, 132928 158563, 132646 158891, 132022 159869, 131754 160196, 131521 160639, 131028 161226, 130851 161583, 130351 162280, 130135 162698, 129687 163327, 129220 164012, 128902 164587, 128519 165061, 128177 165672, 127820 166088, 127596 166517, 127367 166811, 127179 167163, 126719 167757, 126403 168372, 126040 168766, 125987 168874, 125644 169463, 125337 169779, 125055 170292, 124774 170757, 124682 170931, 124187 171560, 123859 172171, 123488 172539, 123205 173126, 122847 173669, 122552 174080, 122246 174551, 121896 175064, 121654 175352, 121245 176061, 120966 176353, 120722 176718, 120526 177123, 120106 177823, 119830 178086, 119298 178849, 119016 179313, 118723 179871, 118439 180145, 118189 180487, 117993 180894, 117733 181289, 117481 181536, 116854 182505, 116636 182878, 116374 183188, 116151 183588, 115853 184057, 115588 184517, 115290 184957, 115012 185295, 114915 185477, 114580 186012, 114182 186802, 113908 187085, 113509 187800, 113229 188112, 112787 188840, 112515 189119, 112184 189714, 111859 190184, 111625 190643, 111163 191217, 111025 191583, 110743 191957, 110373 192537, 110032 192950, 109726 193489, 109084 194440, 108694 194935, 108850 195238, 109218 195146, 109428 195465, 110149 195306, 110529 195194, 110745 195487, 111481 195312, 111862 195193, 112074 195501, 112807 195337, 113201 195189, 113405 195509, 114112 195371, 114466 195233, 114667 194866, 115018 194821, 115639 195010, 116361 194787, 116547 195136, 116970 195062, 117650 194877, 117704 194835, 118410 194642, 118461 194642, 119127 194520, 119481 194861, 119751 194647, 119954 194228, 120650 194038, 121050 194650, 121085 194674, 121408 195328, 121356 195424, 121124 196188, 121233 196325, 121164 196169, 121505 195364, 121527 195295, 121884 194489, 122577 194279, 122642 194299, 123322 194086, 123666 194814, 123722 194710, 124078 194613, 124114 194635, 124461 194491, 125020 194725, 124593 195229, 124697 195603, 125075 195480, 125074 194722, 126165 194440, 126390 194752, 126496 195248, 126693 195429, 126677 195618, 126805 195495, 126762 195021, 126465 194763, 127116 194599, 127324 194481, 127405 194254, 127602 194199, 127675 193999, 127793 193964, 127896 193673, 128166 193552, 128403 193026, 128776 192924, 128981 192475, 129276 191623, 129643 191528, 130063 190633, 130212 190210, 130575 190114, 130869 189248, 131242 189143, 131351 188809, 131289 188741, 131301 188545, 131434 188605, 131809 187835, 132160 187793, 132459 186874, 132549 186846, 132580 186231, 132970 186475, 133266 185874, 133396 185452, 133772 185348, 133867 185042, 133812 184949, 133850 184801, 133952 184827, 134345 184038, 134387 184017, 134280 183270, 134309 183134, 134013 182568, 134468 182109, 134446 182062, 134579 181638, 134425 181292, 134650 180843, 134175 180218, 134633 179297, 134144 178656, 134589 177753, 134357 177434, 134478 177065, 134457 177019, 134594 176541, 134362 176270, 134577 175877, 134414 175480, 134678 174633, 134543 174282, 134551 174219, 134074 174023, 134527 173562, 134631 173107, 134505 172693, 134035 172483, 134493 172027, 134596 171555, 134449 171206, 134682 170755, 134187 170128, 134672 169197, 134172 168569, 134640 167665, 134141 167027, 134569 166177, 134564 166102, 134351 165806, 134468 165449, 134444 165394, 134563 164934, 134362 164659, 134867 163332, 135646 163086, 135707 163109, 135778 163310, 135718 163493, 135858 163702, 136156 163548, 136383 163651, 136396 163308, 137035 163054, 137190 163091, 137266 163266, 137467 163402, 137643 163798, 137828 164079, 137672 164909, 138121 164879, 138130 164514, 137984 164423, 138085 164266, 138162 163987, 138262 163918, 138350 163548, 138117 163475, 137942 163271, 138390 162955, 138609 162989, 138712 162949, 138722 163058, 138859 163281, 139115 163228, 139527 163223, 139950 163026, 140269 163023, 140264 163053, 140277 163022, 140733 163024, 141114 162848, 141589 162660, 141565 162512, 141693 162413, 142172 161725, 142240 161686, 142238 161626, 142276 161616, 142650 161074, 142786 160969, 143119 160373, 143649 159728, 143688 159715, 143999 158920, 144034 158888, 144644 157689, 144747 157285, 145292 156911, 145368 156880, 145451 156620, 145683 156111, 145758 155884, 145973 155762, 146056 155650, 146134 155212, 146344 154766, 146736 154271, 147174 153872, 147391 153316, 147528 152892, 147758 152580, 148061 152317, 148203 151882, 148503 151759, 148952 151037, 149189 150370, 149415 150048, 149616 149930, 149685 149587, 149864 149120, 150203 149018, 150570 148569, 150653 148508, 150751 148258, 151041 147664, 151147 147523, 151239 147222, 151382 146938, 151520 146900, 151598 146737, 152092 146340, 152213 145792, 152277 145711, 152425 145305, 152677 145122, 152803 144856, 153029 144581, 153303 144453, 153504 143888, 153888 143618, 154069 143597, 154054 143275, 154158 142934, 154405 142478, 154714 142006, 154837 141897, 154994 141479, 155364 141452, 155548 141002, 155749 140685, 155985 140036, 156219 139845, 156321 139627, 156471 139499, 156725 139380, 156869 139089, 156956 138794, 157276 138354, 157269 138228, 158822 138256, 158803 138559, 158509 138773, 158437 139047, 158278 139309, 158133 139373, 158081 139532, 157956 139640, 157922 139800, 157784 139854, 157812 139993, 157672 140101, 157645 140263, 157504 140316, 157522 140461, 157373 140582, 157247 140835, 157171 140869, 157155 140949, 156957 141143, 156869 141414, 156786 141517, 156502 141945, 156178 142559, 156007 142646, 155956 142828, 155832 142965, 155698 143287, 155364 143645, 155286 143787, 154975 144260, 154836 144414, 154642 144822, 154469 145036, 154411 145190, 154227 145357, 153632 146289, 153443 146448, 153380 146635, 153269 146771, 153126 147093, 152870 147551, 152540 148028, 152295 148235, 152229 148502, 152150 148593, 152019 148893, 151724 149156, 151545 149427, 151238 149657, 151139 149963, 151216 150269, 151188 150725, 151286 151087, 151798 151949, 151977 152406, 152177 152684, 151938 152577, 151804 152789, 151386 152843, 151134 153113, 150919 153512, 150751 153719, 150559 153866, 150334 154215, 150073 154721, 149949 154834, 149909 154952, 149504 155451, 149250 155908, 149015 156359, 148745 156557, 148636 156891, 148230 157457, 148004 157667, 147776 157703, 147659 157507, 147610 157133, 147496 156922, 147217 156646, 146882 156598, 146558 156703, 146394 157151, 146174 157335, 146098 157547, 145961 157677, 145503 158443, 145191 158768, 145094 158985, 144976 159057, 144861 159437, 144746 159618, 144550 159779, 144466 159933, 144261 160123, 144004 160497, 143866 160852, 143789 160851, 143846 160878, 143580 161088, 143494 161362, 143202 161830, 143146 161894, 142880 162327, 142645 162568, 142502 162797, 142739 162854, 142774 163111, 142876 163400, 142749 163505, 142888 163588, 143012 163821, 143247 164091, 143247 164253, 143372 164280, 143349 164116, 143672 163640, 143547 163286, 144051 163134, 144338 163366, 144653 163371, 144674 163450, 144958 163448, 144923 163849, 145284 163879, 145409 163551, 145462 163220, 145589 163461, 145909 163323, 145973 163342, 146541 163241, 146366 163676, 146705 163960, 147074 163864, 147176 163455, 147527 163256, 147600 163276, 147971 163180, 148189 163177, 148142 163577, 148177 163661, 148667 163821, 148655 163942, 148315 164708, 148425 164786, 148359 164681, 148889 163898, 148954 163354, 149282 163201, 149602 163177, 149640 163396, 149971 163469, 150107 163789, 150241 163916, 150565 164014, 150688 163655, 150611 163457, 150601 163290, 151114 163083, 151224 163121, 151312 163338, 151600 163388, 151825 163343, 151825 163551, 151744 163753, 151915 164093, 151905 164382, 152242 164377, 152234 164006, 152326 163941, 152501 163545, 152761 163246, 152947 163246, 153209 163339, 153973 163107, 154022 163129, 154087 163303, 153625 163307, 153670 163762, 154075 163890, 154055 164003, 154145 163930, 154331 163431, 154495 163238, 154620 163271, 155363 163094, 155512 163108, 155453 163267, 155206 163579, 155380 163919, 155474 164280, 155476 164669, 155431 164754, 155497 165049, 155388 165476, 155862 165664, 155779 164972, 155822 164669, 155801 164385, 155483 164277, 155819 164081, 156041 163483, 156057 163346, 156270 163138, 156810 162905, 157036 162950, 157345 162774, 157308 162616, 156948 161938, 156933 161798, 156734 161570, 156689 161234, 156542 160893, 156609 160765, 156534 160873, 156403 160578, 156205 160042, 156378 159924, 156484 160128, 156525 160366, 156799 160404, 157141 161038, 157137 161111, 157440 161467, 157756 162105, 158218 162805, 158271 162806, 158743 162985, 158919 163222, 159178 163134, 159330 162836, 159400 162509, 159484 162406, 159393 162364, 159315 162064, 159452 161640, 159317 161288, 159376 160977, 159489 160854, 159372 160796, 159306 160516, 159391 160106, 159280 159748, 159358 159461, 159488 159305, 159352 159223, 159283 158972, 159411 158424, 159602 157723, 159342 157017, 159577 156179, 159298 155498, 159503 154623, 159426 154422, 159284 153932, 159493 153101, 159403 152872, 159272 152385, 159491 151551, 159368 151196, 159421 150983, 159624 150739, 159415 150599, 159360 150422, 159443 150013, 159344 149652, 159395 149440, 159598 149195, 159387 149066, 159329 148881, 159405 148473, 159316 148109, 159368 147889, 159631 147890, 159542 147661, 159357 147547, 159285 147342, 159390 146926, 159495 146399, 159583 146099, 159421 145638, 159510 145515, 159782 145529, 159710 145288, 159507 145155, 159459 144969, 159562 144553, 159398 144096, 159489 143988, 159782 143999, 159700 143741, 159482 143611, 159413 143431, 159499 143020, 159370 142551, 159464 142448, 159762 142458, 159678 142196, 159457 142064, 159387 141887, 159467 141479, 159344 141007, 159439 140901, 159718 140905, 159639 140656, 159431 140525, 159360 140344, 159439 139936, 159406 139820, 159506 139707, 159797 139727, 159713 139472, 159761 139399, 159631 138962, 159700 138701, 159487 138579, 159183 138262, 161310 138300, 165974 138218, 170748 137963, 175585 137525, 180428 136898, 181209 136764, 181125 137713, 181203 138621, 181160 138921, 181173 139792, 181227 140165, 181128 140875, 181127 141502, 181372 141424, 181550 141273, 181579 140839, 181439 140495, 181455 140273, 181386 139854, 181458 139715, 181195 139399, 181407 138953, 181439 138728, 181314 138274, 181332 138198, 181214 137843, 181386 137408, 181415 137012, 181279 136751, 185219 136077, 186357 135831, 186193 136213, 186214 136472, 186370 137063, 186097 137658, 186215 138023, 186369 138599, 186248 138789, 186139 139229, 186210 139575, 185932 139933, 185942 140917, 186255 141114, 185947 141479, 185977 142434, 186325 142645, 185876 142945, 185797 143177, 185968 143518, 186406 143598, 186679 143711, 186878 143719, 187223 143562, 187209 143252, 187255 143165, 187167 142862, 186746 142528, 186854 142168, 187134 141800, 187160 141685, 187129 141502, 186830 140955, 186793 140767, 186845 140625, 187119 140249, 187144 140136, 187111 139985, 186797 139413, 186799 138944, 186750 138651, 186761 138172, 186863 137846, 186800 137412, 186710 137112, 186717 136607, 186848 136299, 186660 135765, 189894 135066, 194392 133870, 198657 132499, 201412 131440, 201451 131614, 201484 131541, 201469 131417, 202618 130977, 205127 129826, 205173 130479, 205126 131289, 205178 131708, 205158 131280, 205206 130492, 205157 129812, 206243 129315, 209488 127541, 212324 125679, 214742 123750, 216717 121794, 217547 120809, 218272 119823, 218893 118840, 219414 117863, 219414 83293, 219920 83818, 220188 83799, 220136 83469, 220008 83405, 220138 83209, 220266 83335, 220548 83294, 220522 82885, 220601 82855, 220568 82536, 220674 82339, 220674 81843, 220766 81259, 220885 80785, 220977 80621, 220969 80532, 221533 80172, 221578 79395, 221753 78663, 222157 78320, 222262 78074, 222494 77800, 222527 77676, 222756 77313, 222839 77618, 222890 78396, 223018 79157, 223040 79544, 223166 79577, 222757 79792, 222589 79812, 222631 79973, 222756 79963, 224897 80276, 224891 82016, 224702 82266, 224697 91951, 224889 92293, 224374 92482, 224375 92680, 224313 92870, 224313 93068, 224373 93258, 224374 93456, 224300 93645, 224274 94231, 224355 94421, 224374 95006, 224286 95196, 224259 95782, 224321 95971, 224322 96169, 224380 96359, 224381 96557, 224318 96746, 224318 96944, 224248 97134, 224281 97720, 224362 97909, 224331 98495, 224245 98685, 224269 99270, 224359 99460, 224341 100046, 224235 100235, 224246 100821, 224276 101011, 224305 101596, 224354 101786, 224350 102371, 224279 102561, 224264 103147, 224343 103337, 224387 103922, 224308 104112, 224290 104697, 224311 104887, 224330 105473, 224348 105662, 224346 106248, 224270 106438, 224259 107023, 224328 107213, 224329 107411, 224387 107600, 224388 107798, 224319 107988, 224278 108574, 224323 108764, 224336 109349, 224353 109539, 224362 110125, 224284 110314, 224294 110900, 224337 111089, 224302 111477, 224317 112063, 224384 112252, 224385 112450, 224328 112640, 224329 112838, 224263 113028, 224279 113613, 224363 113803, 224362 114389, 224267 114578, 224268 114776, 224360 114966, 224361 115164, 224305 115353, 224268 115939, 224347 116129, 224381 116714, 224317 116904, 224318 117102, 224257 117292, 224291 117877, 224374 118067, 224350 118653, 224255 118842, 224269 119428, 224356 119618, 224344 120203, 224254 120393, 224263 120978, 224349 121168, 224348 121754, 224263 121944, 224226 122529, 224277 122719, 224286 123304, 224343 123494, 224352 124080, 224283 124269, 224264 124855, 224330 125045, 224331 125243, 224387 125432, 224388 125630, 224314 125820, 224284 126405, 224317 126595, 224337 127181, 224355 127370, 224352 127956, 224290 128146, 224259 128731, 224315 128921, 224316 129119, 224389 129309, 224389 129507, 224325 129696, 224277 130084, 224327 130543, 224365 131832, 224307 132022, 224279 132608, 224330 132798, 224310 133771, 224386 133961, 224344 134546, 224263 134736, 224273 135321, 224357 135511, 224351 136097, 224162 136285, 224170 136484, 223690 136646, 223677 137033, 222752 137306, 222753 137695, 222378 137797, 222381 138123, 222459 138167, 222501 138666, 222383 138698, 222007 138337, 222005 138676, 221632 138779, 221619 139543, 221259 139656, 221260 139861, 221416 140004, 221418 140330, 221042 140105, 220883 140149, 220882 140532, 220510 140636, 220517 141024, 220144 141127, 220128 141898, 219763 141991, 219750 142390, 219379 142496, 219375 142886, 218996 142986, 219000 143371, 218632 143478, 218638 143862, 218265 143966, 218253 144350, 218162 144384, 218206 144710, 217879 144846, 217882 145231, 217506 145334, 217517 145720, 217146 145825, 217133 146210, 216766 146315, 216764 147092, 216390 147188, 216399 147578, 216029 147682, 216022 147975, 216060 148062, 215820 148315, 215638 148403, 215631 148565, 215251 148663, 215280 149433, 214910 149523, 214902 149844, 215267 150022, 214894 150125, 214829 149949, 214525 150014, 214508 150420, 214353 150468, 214581 150847, 214143 150671, 214146 150905, 213775 151011, 213789 151393, 213412 151492, 213388 152277, 213012 152385, 213027 152604, 213214 152718, 213161 153366, 212934 153182, 212999 153112, 212944 152792, 212652 152863, 212675 153249, 212297 153349, 212287 153744, 211913 153846, 211896 154238, 211522 154341, 211536 154720, 211182 154826, 211189 155210, 210817 155310, 210813 155433, 210943 155667, 210953 155830, 210793 155880, 210773 156091, 210402 156196, 210382 156588, 210011 156692, 210013 157468, 209642 157565, 209664 157939, 209709 157991, 209649 157959, 209286 158054, 209268 158448, 208888 158547, 208866 158939, 208497 159050, 208521 159429, 208146 159529, 208171 159910, 207794 160011, 207767 160621, 207930 160757, 207954 161109, 207614 160843, 207378 160904, 207404 161226, 207571 161323, 207411 161327, 207383 161294, 207023 161382, 207057 161766, 206682 161867, 206657 162260, 206290 162369, 206260 162760, 205886 162863, 205915 163243, 205541 163347, 205574 163728, 205537 164111, 205169 164220, 205154 164539, 205414 164426, 205703 164468, 205732 164833, 205158 164751, 205033 164651, 204770 164720, 204795 165095, 204512 165182, 204584 165308, 204436 165272, 204453 165576, 204081 165678, 204059 166078, 203685 166180, 203655 166580, 203679 166810, 203940 167012, 203703 167077, 203574 166989, 203313 167061, 203344 167431, 203043 167523, 203152 167686, 202956 167869, 202950 167936, 202576 168038, 202520 168442, 202565 168803, 202187 168719, 202204 168913, 201830 169016, 201868 169392, 201495 169494, 201429 170288, 201058 170393, 201021 170788, 200712 170876, 200875 171089, 200644 170958, 200612 171289, 200239 171393, 200319 172145, 199946 172245, 199905 172642, 199531 172744, 199512 173004, 199646 173106, 199728 173470, 199291 173203, 199122 173247, 199164 173623, 198825 173749, 198984 174062, 198985 174449, 198847 174544, 198443 174414, 198421 174601, 198047 174704, 198002 175107, 198049 175476, 197670 175586, 197722 175954, 197352 176052, 197311 176456, 196940 176558, 196894 176957, 196518 177059, 196567 177435, 196190 177535, 196243 177915, 196199 178309, 195823 178409, 195783 178812, 195408 178914, 195457 179288, 195082 179389, 195137 179765, 194761 179866, 194720 180268, 194347 180370, 194297 180774, 194349 181142, 194257 181173, 194297 181447, 194021 181522, 194031 181618, 193663 181718, 193611 182120, 193234 182219, 193190 182624, 192819 182729, 192867 183096, 192497 183200, 192557 183573, 192185 183676, 192083 184478, 191710 184582, 191658 184983, 191286 185087, 191230 185491, 191288 185858, 190918 185953, 190974 186296, 191059 186314, 191116 186460, 190971 186419, 190903 186356, 190606 186433, 190549 186836, 190258 186921, 190299 187297, 190530 187593, 189800 187434, 189749 187448, 189809 187815, 189613 187873, 189642 188044, 189874 188640, 189471 188525, 189259 188357, 189128 188392, 189072 188794, 188692 188893, 188648 189257, 188785 189263, 188860 189435, 188657 189394, 188704 189670, 188332 189774, 188393 190139, 188020 190242, 187964 190646, 187596 190749, 187527 191158, 187597 191521, 187229 191623, 187293 191992, 186924 192092, 186862 192499, 186486 192601, 186424 193005, 186055 193112, 186121 193477, 185748 193580, 185821 193947, 185450 194051, 185386 194454, 185009 194553, 184943 194968, 185021 195330, 184650 195435, 184721 195797, 184537 195854, 184682 196226, 184321 196119, 184287 196308, 183909 196405, 183869 196697, 184047 196765, 184088 196958, 183889 197012, 183921 197182, 183546 197289, 183623 197647, 183256 197743, 183185 198155, 182813 198251, 182671 199072, 182305 199172, 182228 199583, 181845 199678, 181934 200052, 181562 200157, 181644 200520, 181260 200617, 181122 201435, 180750 201544, 180789 201697, 181025 201857, 181067 202038, 180880 202089, 180652 201958, 180460 202008, 180544 202370, 180176 202475, 180095 202878, 179725 202985, 179633 203401, 179730 203753, 178989 203963, 179076 204324, 178998 204731, 178755 204804, 178703 204915, 178611 204941, 178547 205244, 178380 205295, 178682 205634, 178217 205517, 178263 205710, 177883 205810, 177982 206175, 177598 206272, 177445 207094, 177074 207203, 177165 207560, 176996 207612, 177046 207804, 176849 207858, 176889 208025, 176520 208123, 176430 208532, 176068 208625, 175976 209051, 175428 209973, 175072 210060, 174998 210370, 175169 210440, 175123 210657, 174925 210711, 174880 210901, 174505 211003, 174235 211454, 173964 211932, 173784 212750, 173418 212850, 173344 213184, 173402 213250, 173419 213632, 173152 214093, 173044 213735, 173270 213286, 172945 213370, 172852 213788, 172323 214698, 155836 214698, 155808 214583, 155857 214296, 155679 214476, 155661 214698, 154486 214698, 154447 214569, 154466 214349, 154309 214698, 150462 214698, 150557 214639, 150571 214234, 150345 214296, 150390 214518, 150365 214698, 148599 214698, 148466 214404, 147917 214662, 147923 214698, 146434 214698, 146753 213964, 146735 213889, 146374 213526, 146641 213980, 146244 214698, 145085 214698, 145088 214639, 144986 214698, 127633 214698, 127633 200302, 53651 200302, 53784 199534, 54142 199451, 54217 199016, 54592 198913, 54515 198547, 54895 198447, 54810 198079, 55181 197977, 55254 197572, 55406 197525, 55447 197288, 55676 197166, 55704 197056, 55627 196700, 55995 196588, 55928 196239, 56281 196134, 56360 195726, 56721 195634, 56806 195213, 57169 195121, 57093 194741, 57132 194726, 57075 194683, 57057 194720, 56709 194825, 55928 194677, 55640 193971, 55196 193707, 55164 194005, 55069 194128, 55229 194351, 55739 194638, 55157 194768, 55124 194873, 54408 195069, 54470 194680, 54416 194640, 54096 194727, 53981 194426, 54036 194311, 53971 194042, 53732 193720, 53734 193331, 53823 193001, 53809 192535, 53737 192285, 53790 191446, 53685 190724, 53733 190342, 53849 189981, 53706 189523, 53742 189453, 53658 189177, 53592 189107, 53643 189014, 53700 188689, 53806 188417, 53783 187794, 53594 188203, 53584 188721, 53521 189084, 53600 189779, 53565 190276, 53500 190585, 53565 191051, 53675 191409, 53499 192105, 53528 192612, 53654 192966, 53637 193327, 53485 193787, 53346 194046, 53566 194357, 53564 194440, 53021 194647, 52283 194890, 52309 193865, 52247 193430, 52104 193390, 52219 193142, 52181 192594, 52204 192030, 52106 191839, 52182 191518, 52155 190656, 52007 190338, 52077 189574, 52041 188755, 51827 188040, 51893 187815, 51945 187232, 51866 186478, 51914 186278, 51851 186085, 51960 185677, 51711 185181, 51635 184991, 51545 184955, 51124 185544, 51028 185921, 51033 186424, 51342 186623, 51029 186976, 51011 187428, 51026 188012, 51409 188155, 51041 188494, 51040 189264, 51064 189412, 50959 190121, 51076 190571, 51032 190968, 51097 191449, 51044 191735, 51054 192520, 51116 192887, 51183 193033, 51130 193269, 51293 193613, 50941 193930, 50907 194106, 51296 194388, 51436 194716, 50336 195029, 49906 194767, 49915 194635, 49759 194640, 49209 194959, 49252 195038, 49164 195062, 49044 194946, 48408 194737, 48444 194781, 48385 195162, 48035 195258, 47713 194981, 47679 194991, 47701 195373, 47760 195446, 47667 195443, 47317 195245, 47191 195124, 46967 195180, 46855 195082, 46612 195148, 46418 194948, 45896 195087, 45823 195046, 45509 195117, 45110 194919, 44344 195124, 43916 194859, 43177 195009, 42985 194896, 42879 194983, 42444 195101, 42280 194901, 41351 195168, 41250 195087, 40961 195437, 40494 195022, 40259 195000, 39805 194781, 39909 195007, 39500 195117, 39322 194955, 38729 195106, 38515 194975, 38341 195063, 38351 195215, 38222 195257, 38246 195495, 37995 195433, 37994 195679, 37649 195800, 37613 196196, 37240 196298, 37205 196691, 36989 196758, 37213 197050, 36859 197019, 36873 197175, 36501 197279, 36718 197608, 36867 197940, 36526 197815, 36489 198038, 36134 198134, 36096 198546, 35791 198637, 35989 198829, 35734 198708, 35755 199026, 35390 199134, 35442 199555, 35409 199516, 35044 199613, 35028 199922, 35249 200071, 35013 200138, 34981 200302, 20742 200302, 20744 197971, 20553 197628, 20546 197240, 20759 197051, 20949 196801, 20930 196420, 20932 195645, 20744 195302, 20737 195112, 20857 194911, 21062 194748, 22089 194491, 22169 194439, 22687 194173, 23062 194242, 23232 194116, 23298 193921, 23060 193221, 22685 193510, 22590 193316, 22602 192927, 22595 192144, 22536 190992, 22569 190593, 22558 189427, 22518 189054, 22529 188263, 22574 187778, 22532 186712, 22494 186341, 22491 185568, 22510 184772, 22486 184403, 22466 183309, 22549 182850, 22596 182074, 22575 181298, 22570 179360, 22545 178974, 22551 177819, 22593 177801, 22537 177425, 22684 177294, 23019 177290, 22990 176949, 23224 176670, 23224 176497, 23359 176384, 23363 176072, 23187 175868, 23431 175976, 23712 175883, 23685 175596, 23595 175407, 24103 175411, 24113 175028, 24175 174928, 24543 174969, 24568 174191, 24498 173435, 24575 173026, 24557 172597, 24620 172167, 24627 171073, 24581 170311, 24667 169208, 24612 168364, 24689 167180, 24689 166553, 24711 165023, 24650 164090, 24954 163619, 24698 163300, 25193 163063, 25633 163045, 25657 163241, 25767 163121, 26023 163291, 26250 163264, 26539 163464, 26455 163207, 26690 163062, 27138 162950, 27520 163186, 27771 163107, 27896 163124, 28216 163058, 28637 162871, 29392 162872, 29764 162750, 29954 163024, 30027 163271, 29648 163368, 29388 163565, 29719 163864, 29748 163953, 29847 163930, 30131 163999, 30306 163504, 30271 163324, 30372 163145, 30637 162954, 30886 163056, 31159 163081, 31198 163424, 31167 163465, 31250 163740, 31454 163604, 31888 163783, 32056 163304, 31975 163178, 31916 163200, 31613 163151, 31409 163012, 31631 162856, 31918 162783, 32022 162505, 32083 162137, 32399 161966, 32450 161676, 32717 161625, 32832 161459, 32736 161100, 33092 161157, 33190 161070, 33206 160969, 33096 160572, 33555 160537, 33485 160236, 33424 160134, 33469 160073, 33905 160057, 33753 159656, 33812 159557, 33918 159612, 34237 159580, 34262 159188, 34336 159109, 34298 158792, 34600 158834, 34703 158718, 34623 158254, 34656 158212, 35091 158198, 35028 157720, 35298 157549, 35431 157288, 35542 157228, 35743 156938, 35873 156488, 36210 156355, 36178 155889, 36630 155855, 36633 155765, 36513 155418, 36978 155373, 36798 154945, 36831 154900, 37301 154898, 37220 154441, 37409 154144, 37703 153922, 37776 153663, 38009 153472, 38029 153147, 38382 153034, 38406 152635, 38799 152550, 38815 152117, 39196 152020, 39165 151652, 39548 151556, 39487 151186, 39856 151082, 39842 151010, 39941 150739, 40108 150549, 39917 150261, 40208 150437, 40377 150241, 40393 150083, 40199 149760, 40585 149785, 40728 149752, 40695 149613, 40505 149288, 40890 149314, 41032 149281, 41006 148856, 41390 148767, 41455 148366, 41522 148223, 41288 147910, 41252 147909, 41279 147862, 41295 147898, 41688 147964, 41811 147891, 41812 147756, 41589 147451, 41507 147451, 41612 147245, 41604 147425, 41987 147486, 42320 147229, 42254 147156, 42326 147222, 42506 146937, 42535 146497, 42838 146326, 42849 146006, 43283 145940, 43054 145486, 43539 145451, 43457 145118, 43264 145227, 43048 145457, 42962 145398, 42680 145550, 42693 145188, 42769 144734, 42677 144417, 42524 144312, 42273 144244, 42204 144648, 41881 144798, 41865 145028, 41781 145170, 41734 145588, 41604 145624, 41264 145594, 41383 146102, 41220 146127, 40890 146070, 40957 145758, 41232 145563, 41396 145157, 41265 144417, 41259 144031, 41189 143894, 41270 143611, 41707 143270, 41753 143147, 41503 142801, 41481 142535, 41423 142436, 41372 142148, 41293 141961, 41130 141740, 41052 141406, 40816 141051, 40755 140524, 40923 140221, 41306 140198, 41678 140428, 41920 140749, 41974 140970, 42118 141267, 42297 141421, 42410 141650, 42540 141742, 42588 141899, 42733 142077, 42901 142524, 43088 142581, 43276 142419, 43318 142692, 43565 142805, 43645 143089, 43548 143115, 43286 143088, 43200 142862, 43047 143017, 43091 143141, 43376 143451, 43414 143592, 43194 143784, 43277 144085, 43378 144226, 43539 144633, 43582 144598, 43887 144674, 44002 144544, 44035 144434, 44026 144089, 44438 144027, 44420 143535, 44644 143346, 44711 143070, 44971 142901, 44968 142627, 45029 142540, 45428 142297, 46089 142293, 45516 141839, 45500 141670, 45751 141497, 45670 141272, 45665 141137, 45773 141013, 46200 141131, 46088 140768, 45780 140628, 45731 140479, 45515 140168, 45091 140033, 44753 140032, 45077 140607, 45058 140711, 44746 140816, 44439 140988, 44447 141219, 44337 141325, 44296 141479, 43892 141371, 44138 140679, 44330 140420, 44588 139939, 44694 139684, 44801 139571, 45065 139143, 45481 138553, 46203 138369, 46174 138033, 46015 137687, 45721 137570, 45651 137400, 45687 137293, 45607 136830, 45758 136630, 46151 136821, 46043 136518, 46111 136493, 45929 136161, 46098 135727, 45786 135563, 45678 135454, 45620 135309, 46175 135318, 46146 135527, 46249 135379, 46260 135193, 46144 134939, 46088 134941, 45909 134615, 46072 134203, 46116 134194, 46256 133609, 46109 133397, 46206 133163, 46060 133409, 45872 133204, 45851 133081, 45993 132655, 45970 132557, 46118 132296, 46329 132443, 46280 131801, 46313 131408, 46279 131025, 46185 130664, 46352 130231, 46361 129727, 46325 129462, 46163 129120, 46366 128676, 46354 128292, 46426 128021, 46394 127892, 46128 127891, 46238 128324, 46139 128703, 45825 128677, 45691 128726, 45639 128875, 45368 129174, 45201 129207, 45197 129383, 45015 129656, 44744 130123, 44516 130124, 44637 130313, 44552 130526, 44338 130731, 44266 130722, 44272 130801, 44081 131022, 43977 131269, 44010 131373, 43660 131488, 43780 131865, 43389 131959, 43346 132264, 43057 132455, 43001 132886, 42811 132998, 42630 132990, 42652 133183, 42553 133395, 42350 133593, 42201 133516, 42273 133674, 42097 133892, 42070 134117, 42112 134290, 41934 134331, 41594 134306, 41795 134581, 41844 134768, 41648 134814, 41363 134806, 41455 135061, 41430 135212, 41286 135284, 41044 135301, 41094 135548, 40922 135983, 40951 136094, 40596 136206, 40643 136554, 40284 136665, 40192 136817, 39909 136765, 40025 137004, 39907 137111, 39954 137411, 40303 138091, 40431 138443, 40521 139194, 40548 139239, 40521 139370, 40374 139458, 40131 139385, 39856 139474, 39678 139425, 39674 139039, 39459 138930, 39338 139012, 39194 139557, 39496 139909, 39046 139841, 38913 139883, 38918 140021, 39153 140362, 38737 140298, 38610 140357, 38430 140542, 38740 140626, 38845 140817, 38835 140976, 38684 141034, 38549 140897, 38386 140579, 38170 140801, 38164 141003, 38440 141316, 38455 141466, 38305 141504, 37913 141464, 38131 141787, 38161 141948, 37996 141984, 37574 141777, 37251 141717, 37439 141977, 37812 142263, 37623 142577, 37478 142353, 37260 142252, 36934 142187, 37128 142450, 37189 142820, 37229 142849, 37399 143344, 37209 143381, 36991 143262, 36837 143099, 36582 143099, 36657 143354, 37036 143639, 37079 143814, 36893 143843, 36471 143622, 36110 143543, 36302 143839, 36712 144115, 36709 144305, 36528 144350, 36359 144210, 35906 143947, 35709 143708, 35453 143802, 35420 144120, 35041 144221, 35079 144595, 34707 144699, 34704 145134, 34616 145264, 34361 145262, 34397 145524, 34243 145745, 33932 145728, 34084 145997, 33916 146228, 33600 146204, 33721 146485, 33626 146582, 33546 146943, 33213 147082, 33225 147396, 33103 147585, 32812 147587, 32875 147880, 32791 147995, 32683 148324, 32391 148479, 32344 148776, 32263 148744, 32306 148811, 32023 148935, 32001 149191, 31873 149187, 31925 149303, 31684 149423, 31667 149831, 31599 149887, 31272 149912, 31338 150239, 31302 150340, 31218 150409, 30875 150404, 31000 150719, 30962 150819, 30879 150881, 30531 150882, 30649 151203, 30513 151452, 30221 151396, 30293 151688, 30180 151778, 30125 152142, 29770 152255, 29855 152676, 29431 152741, 29485 153152, 29063 153215, 29095 153652, 28668 153710, 28718 154148, 28635 154233, 28302 154218, 28397 154534, 28283 154694, 27951 154702, 28007 155029, 27914 155256, 27651 155237, 27720 155494, 27570 155576, 27582 155984, 27165 156054, 27252 156486, 26809 156539, 26902 156882, 26886 156974, 26801 157037, 26438 157017, 26530 157372, 26413 157583, 26079 157533, 26157 157862, 26083 157931, 26092 158312, 25724 158418, 25701 158778, 25336 158889, 25372 159315, 24939 159372, 25022 159723, 25010 159817, 24923 159913, 24604 159896, 24689 160202, 24625 160290, 24561 160566, 24392 160497, 24501 160642, 24249 160776, 24184 160994, 23963 160947, 23923 161187, 23823 161230, 23864 161656, 23453 161727, 23512 162166, 23426 162246, 23083 162193, 23104 161848, 23396 161683, 23395 161293, 23769 161189, 23760 160791, 23981 160574, 24148 160316, 24213 159984, 24501 159818, 24609 159507, 24906 159347, 24911 158979, 24868 158922, 24935 158950, 25263 158834, 25271 158492, 25241 158441, 25300 158448, 25582 158314, 25624 157967, 25941 157822, 26022 157487, 26254 157272, 26417 157015, 26533 156711, 26762 156505, 26908 156238, 27118 156017, 27235 155628, 27445 155475, 27498 155117, 27821 154979, 27860 154637, 28074 154423, 28170 154208, 28436 153927, 28754 153371, 28990 153161, 28971 152783, 29302 152651, 29356 152327, 29665 152173, 29720 151806, 29922 151562, 30246 151043, 30458 150832, 30606 150574, 30799 150346, 30883 150000, 31181 149834, 31203 149443, 31522 149304, 31523 148950, 31866 148829, 31899 148492, 32132 148270, 32304 147997, 32428 147678, 32688 147479, 32744 147141, 32716 147076, 32782 147087, 33060 146949, 33104 146655, 33049 146539, 33180 146542, 33402 146421, 33445 146102, 33515 146092, 33715 145931, 33803 145633, 34062 145229, 34195 145115, 34298 144806, 34610 144629, 34523 144459, 34768 144387, 34974 144464, 34925 144146, 34959 143859, 35017 143862, 34971 143816, 35190 143598, 35384 143163, 35590 143080, 35676 142848, 35922 142563, 35952 142385, 36088 142201, 36247 142093, 36270 141910, 36364 141813, 36464 141527, 36760 141288, 36797 140990, 36741 140867, 36881 140870, 37144 140783, 37124 140513, 37068 140402, 37196 140409, 37462 140312, 37442 139943, 37791 139822, 37916 139485, 37949 139124, 37808 138992, 37991 139062, 38306 138967, 38125 138692, 38288 138625, 38662 138798, 38602 138489, 38631 138267, 38707 138224, 38687 138147, 38898 137983, 38953 137685, 38938 137562, 39067 137477, 39368 137515, 39389 137178, 39636 136926, 39665 136715, 39639 136603, 39759 136596, 40037 136182, 40115 135817, 40083 135759, 40139 135790, 40485 135689, 40495 135325, 40313 135151, 40556 135225, 40758 135091, 40804 134852, 40653 134709, 40854 134774, 41039 134616, 41134 134375, 41116 134326, 41160 134344, 41448 134187, 41751 133540, 41896 133390, 42097 132930, 42435 132467, 42397 132340, 42539 132343, 42669 132180, 42742 131995, 42616 131835, 42823 131864, 42973 131724, 43019 131387, 43281 131168, 43304 131066, 43568 130606, 43388 130428, 43636 130481, 43801 130347, 43795 130156, 43605 129929, 43904 129974, 44094 129892, 44147 129672, 44107 129536, 44231 129574, 44446 129400, 44464 128917, 44736 128646, 45001 128164, 45079 128181, 45337 127936, 45449 127764, 45583 127340, 45514 127020, 45601 126559, 45710 126404, 45990 125678, 45845 125361, 46150 125435, 46524 125322, 46735 125318, 46891 125248, 46994 125088, 47200 124959, 47051 124833, 47012 124622, 47332 123974, 47551 123712, 47636 124064, 47612 124395, 47862 124128, 47948 123978, 47899 123704, 47588 123688, 47848 123507, 47809 123241, 48226 122573, 48401 122692, 48180 123139, 48348 123290, 48552 123258, 48582 123030, 49060 122106, 48949 121956, 48769 121814, 48842 121560, 49093 121400, 49357 121705, 49400 121685, 49526 121284, 49597 121201, 49511 121126, 49365 120875, 49462 120651, 49683 120493, 49754 120770, 49897 120977, 50075 120840, 50111 120672, 50092 120298, 50293 119758, 50309 119455, 50552 118804, 50523 118620, 50712 118324, 50902 117773, 51108 117446, 51379 117246, 51510 117575, 51517 117961, 51449 118367, 51490 118548, 51632 118705, 51703 119073, 51913 119241, 52174 119720, 52266 119918, 52518 120220, 52747 120204, 52902 120084, 53122 120235, 52899 120400, 52921 120677, 52607 121083, 52419 120554, 52090 120510, 52030 120145, 51884 120043, 51747 120083, 51541 120042, 51332 120133, 51295 120347, 51204 120546, 51014 120678, 50859 120682, 50848 120857, 50589 121474, 50352 121769, 50063 122035, 49944 122268, 49676 122729, 49629 122904, 49445 123056, 49316 123078, 49294 123221, 49148 123421, 48978 123837, 48379 124456, 48045 125115, 48247 125384, 48522 125372, 48465 125595, 48696 125636, 48722 125699, 49504 125424, 49740 125426, 49729 125598, 49922 125637, 49973 125734, 50683 125475, 51119 125379, 51328 125378, 51370 125669, 51685 125623, 51716 125654, 52431 125418, 52730 125382, 52774 125564, 52916 125456, 53103 125610, 53852 125381, 54198 125365, 54361 125677, 55145 125393, 55431 125345, 55889 125188, 56038 125250, 56065 125485, 56292 125407, 56410 125441, 56650 125267, 56842 124761, 57158 124609, 57469 123748, 57586 123662, 57714 123400, 57990 123218, 58250 122759, 58316 122687, 58422 122362, 58563 122232, 58646 122048, 58806 121989, 59114 121369, 59204 121281, 59334 120967, 59561 120795, 59610 120702, 59690 120667, 60008 119990, 60333 119818, 60553 119361, 60834 118896, 60938 118614, 61094 118437, 61163 118287, 61281 118270, 61465 118078, 61716 117491, 61734 117122, 61801 117080, 61683 116724, 61502 116386, 61243 115807, 61128 115713, 61060 115437, 61066 115267, 61160 115194, 61444 115178, 61523 114830, 61592 114694, 61497 114342, 61378 113623, 61571 113222, 61856 113438, 62189 113437, 62461 113595, 62773 114101, 63065 114408, 63100 114495, 63338 114735, 63280 114348, 63292 113958, 63198 113596, 63208 113205, 63248 113111, 63610 113484, 63790 113605, 63881 113797, 63865 114139, 63828 114198, 63879 114212, 64146 113724, 64300 113404, 64437 113257, 64451 112935, 64662 112807, 64460 112758, 64399 112491, 64248 112144, 64176 111813, 64013 111417, 64362 110612, 64355 110177, 64265 109919, 64286 109761, 64205 109229, 63927 108435, 64121 108622, 64333 108918, 64580 109126, 64683 109313, 64955 109626, 65204 110078, 65439 110315, 65767 110778, 65887 110856, 66091 110595, 66354 110516, 66426 110428, 66971 109142, 67304 108987, 67666 108123, 67868 107716, 68206 107630, 68557 106719, 68909 106627, 69127 106156, 69469 105309, 69830 105183, 70092 104527, 70164 104281, 70381 103893, 70736 103755, 71007 102927, 71354 102671, 71631 102297, 71957 101514, 72324 101447, 72552 100953, 72626 100668, 72538 100569, 72817 100144, 73198 100022, 73597 99116, 73792 98745, 74099 98656, 74284 98158, 74484 97723, 74863 97584, 75067 97162, 75204 96738, 75442 96435, 75710 96262, 75960 95755, 76329 94963, 76621 94885, 77005 93991, 77388 93827, 77781 93010, 77992 92872, 78050 92754, 78153 92712, 78589 91933, 78720 91630, 78839 91477, 78859 91160, 79028 91037, 78871 90928, 78732 90731, 78677 90577, 78338 90063, 78274 89693, 78140 89295, 78212 89205, 78439 89084, 78466 88866, 78608 88688, 78536 88071, 78526 87750, 78617 87662, 78655 87448, 79177 87641, 79385 87768, 79521 87602, 79581 87785, 79745 87824, 79979 87811, 80102 87329, 80218 87223, 80250 87099, 80362 87095, 80620 87347, 80928 87386, 81115 87683, 81346 87440, 81668 87230, 81710 87111, 81678 86822, 81393 86505, 81274 86145, 81099 85911, 80908 85434, 80970 85125, 81171 84913, 81591 84843, 81481 84518, 81505 84440, 81349 84159, 81323 83774, 81224 83555, 81373 83369, 81378 83311, 81434 83307, 82465 84233, 82768 84665, 82979 84878, 83214 84851, 83185 84481, 83518 84355, 83507 83999, 83839 83873, 83798 83497, 84160 83392, 84115 83014, 84272 82955, 84410 82842, 84433 82505, 84806 82375, 84729 81997, 84752 81962, 85137 81900, 85085 81512, 85355 81348, 85364 81048, 85448 80712, 85726 80466, 85886 80135, 86019 79713, 86265 79534, 86409 79231, 86689 78877, 86768 78830, 86771 78741, 86890 78545, 86992 78247, 87334 77847, 87457 77806, 87441 77677, 87514 77495, 87660 77360, 87829 77021, 87985 76863, 88001 76795, 88069 76754, 88587 75805, 88818 75637, 88927 75371, 89228 75239, 89363 74974, 89285 74879, 89251 74910, 88898 74902, 88554 74696, 88473 74597, 88369 74625, 88086 74603, 87944 74666, 87694 74578, 87315 74644, 87168 74800, 86954 74854, 86860 74954, 86226 75230, 85738 75348, 85795 75735, 85515 75736, 85002 75861, 84746 76025, 84658 76311, 84429 76344, 83935 76519, 83754 76737, 83754 76822, 83658 76781, 83200 76830, 83112 76977, 83115 77116, 82793 77233, 82233 77373, 81764 77567, 81492 77647, 81129 77849, 81018 77870, 80828 78024, 80817 78072, 80482 78183, 80526 78479, 80461 78693, 80221 78693, 80333 78912, 80198 79023, 80132 79155, 79888 79153, 79959 79385, 79856 79479, 79868 79835, 79501 79926, 79601 80252, 79713 80425, 79614 80642, 79630 80715, 79849 80983, 79881 81240, 79640 81402, 79591 81388, 79777 81867, 79700 81868, 79284 81638, 79048 81744, 79016 82012, 79380 82280, 79298 82308, 78969 82216, 78734 82518, 78978 82764, 78639 82679, 78453 82990, 78596 83232, 78304 83093, 78065 83218, 78022 83487, 78174 83640, 77974 83553, 77737 83690, 77790 83937, 78029 84238, 77659 84124, 77416 84170, 77488 84407, 77662 84688, 77336 84639, 77098 84654, 77290 85135, 77005 85085, 76756 85122, 76815 85368, 77156 85679, 77180 85762, 77092 85776, 76679 85565, 76428 85621, 76485 85864, 76822 86162, 76841 86236, 76764 86247, 76361 86118, 76114 86127, 76175 86360, 76422 86601, 76479 86707, 76436 86716, 75849 86452, 75607 86288, 75351 86318, 75420 86713, 75271 86695, 74943 86742, 75027 87150, 74616 87225, 74722 87647, 74267 87692, 74382 88122, 73941 88179, 74052 88606, 73966 88648, 73629 88681, 73733 89000, 73422 89482, 73091 89649, 73000 89976, 72898 90081, 72741 90505, 72573 90809, 72488 90785, 72483 90893, 72217 91040, 72113 91382, 71898 91897, 71810 91966, 71541 92034, 71236 92785, 71002 93089, 70815 93064, 70735 93310, 70609 93419, 70534 93753, 70455 93871, 70048 94745, 69688 94832, 69606 95170, 69377 95717, 69238 95848, 69014 95841, 68757 96566, 68628 96701, 68391 97113, 68112 97263, 68024 97542, 67922 97661, 67789 97994, 67543 98530, 67442 98615, 67182 98652, 67103 98958, 67012 99070, 66845 99506, 66645 99795, 66561 99772, 66526 99891, 66290 100061, 66188 100372, 65929 100903, 65793 101098, 65624 101113, 65568 101316, 65395 101455, 65280 101783, 65037 102340, 64885 102508, 64681 102470, 64627 102738, 64482 102852, 64369 103196, 64108 103683, 63749 103812, 63422 104716, 63297 104824, 63023 104777, 62908 105147, 62852 105207, 62722 105705, 62630 105998, 62894 106702, 63153 106862, 63219 107001, 63235 107280, 62987 107287, 62854 107100, 62865 106744, 62561 107180, 62508 107523, 62020 107442, 61972 107730, 61728 108413, 61608 108604, 61740 108724, 61768 108949, 61516 109505, 61379 109632, 61269 109050, 60951 109294, 60873 109581, 60942 109889, 61018 109930, 60938 109999, 60790 110379, 60585 110863, 60535 110905, 60473 110854, 60536 110780, 60665 110413, 60487 110190, 60232 110275, 60113 110803, 59939 111236, 59695 111343, 59551 111309, 59516 111504, 59345 111690, 59201 112158, 58978 112343, 58766 112023, 58674 112009, 58653 112127, 58406 112277, 58212 112613, 58152 112560, 58157 112651, 57871 112813, 57759 113148, 57671 113232, 57494 113681, 57315 114009, 57114 113773, 56985 114136, 56928 114153, 56840 114563, 56597 115057, 56490 115219, 56382 115076, 56599 114316, 56925 114149, 57218 113297, 57425 112785, 57539 112629, 57704 112544, 57842 112350, 57972 112277, 58099 111784, 58333 111438, 58675 111287, 58757 110937, 58969 110491, 58976 110351, 59328 110217, 59541 109851, 59711 109411, 59969 109115, 60184 108608, 60437 108439, 60779 107669, 60765 107536, 60870 107565, 61137 107430, 61237 107156, 61469 106704, 61488 106555, 61669 106414, 61809 106362, 61884 106204, 62048 106030, 62168 105738, 62416 105282, 62420 105217, 62726 105004, 62866 104771, 62757 104641, 62751 104132, 63120 104224, 63333 103841, 63647 103635, 64018 102810, 64222 102487, 64545 102243, 64658 101954, 64951 101486, 64936 101414, 65027 101347, 65264 101013, 65460 100856, 65863 100067, 66203 99592, 66377 99453, 66513 99120, 66178 98940, 66334 98782, 66363 98505, 66688 98552, 66779 98600, 67066 98457, 67196 98157, 67442 97702, 67448 97599, 67754 97391, 68092 96749, 68380 96282, 68607 95832, 68903 95654, 69201 94894, 69212 94759, 69582 94650, 69800 94251, 69976 93799, 70484 93230, 70587 92964, 70873 92498, 71078 92053, 71066 91968, 71134 91991, 71410 91818, 71605 91448, 71722 91102, 71727 90972, 71839 90970, 72095 90860, 72434 90132, 72661 89682, 72648 89619, 72703 89621, 72977 89426, 73095 89175, 73363 88855, 73498 88595, 73700 88374, 73823 88102, 73848 87772, 73776 87718, 73855 87757, 74112 87588, 74158 87269, 74366 87056, 74490 86790, 74751 86614, 74842 86321, 75052 86118, 75172 85910, 75414 85663, 75586 85342, 75753 85195, 75831 84986, 75890 84935, 75892 84867, 76051 84683, 76151 84452, 76400 84186, 76416 83886, 76045 83614, 76455 83800, 76693 83674, 76742 83404, 76493 83186, 76788 83356, 77054 83222, 77088 82926, 76818 82710, 77116 82887, 77368 82740, 77440 82448, 77383 82402, 77447 82439, 77697 82269, 77769 81978, 77711 81932, 77775 81971, 78020 81796, 78084 81513, 77892 81361, 78102 81489, 78338 81321, 78351 81060, 78077 80795, 78424 80965, 78699 80838, 78675 80543, 78386 80310, 78744 80431, 79000 80292, 79000 80005, 78699 79770, 79064 79897, 79354 79822, 79306 79528, 78978 79218, 78848 79262, 78973 79173, 79389 79407, 79628 79318, 79632 79063, 79392 78802, 79719 78942, 79941 78842, 79980 78596, 79874 78447, 80051 78504, 80310 78408, 80284 78140, 79913 78126, 79601 78254, 79207 78320, 78862 78307, 78495 78475, 78090 78328, 77955 78416, 77909 78599, 77741 78644, 77503 78511, 77333 78476, 76820 78521, 76577 78635, 76490 78634, 76402 78919, 76238 79022, 76065 79028, 76124 79193, 76079 79388, 75729 79527, 75782 79695, 75741 79889, 75589 80020, 75403 80067, 75460 80241, 75425 80432, 75263 80507, 75018 80523, 75115 80938, 74695 80991, 74795 81409, 74623 81581, 74533 81575, 74570 81658, 74462 81873, 74295 82050, 74210 82046, 74238 82126, 73966 82515, 73882 82516, 73911 82597, 73638 82987, 73553 82987, 73587 83066, 73309 83445, 73196 83456, 73245 83555, 73134 83775, 72983 83943, 72837 83958, 72892 84090, 72809 84293, 72663 84467, 72532 84469, 72576 84591, 72411 85023, 72437 85100, 72355 85103, 72163 85263, 72097 85495, 72123 85584, 72029 85591, 71839 85740, 71752 85974, 71774 86045, 71699 86048, 71486 86200, 71424 86509, 71162 86681, 71059 86962, 70845 87169, 70713 87431, 70505 87654, 70422 87957, 70178 88152, 70088 88445, 69853 88639, 69913 89027, 69752 89045, 69542 89131, 69584 89509, 69425 89528, 69216 89616, 69204 89844, 69239 89981, 68860 90081, 68869 90333, 68811 90469, 68467 90626, 68208 91289, 67924 91755, 67889 91859, 67614 92110, 67586 92235, 67399 92455, 67230 92871, 67048 93012, 66897 93037, 66861 93210, 66695 93431, 66593 93670, 66371 94119, 66317 94292, 66134 94416, 65977 94447, 65926 94628, 65786 94834, 65618 95279, 65360 95558, 65142 96006, 64885 96268, 64693 96653, 64456 96973, 64179 97250, 64108 97453, 63799 98093, 63580 98287, 63484 98289, 63457 98407, 63274 98651, 63205 98864, 62769 99521, 62560 99662, 62509 99829, 62285 100278, 61994 100746, 61964 100827, 61669 101067, 61619 101236, 61463 101463, 61284 101891, 61057 102231, 60771 102476, 60726 102644, 60564 102859, 60370 103268, 60131 103601, 59835 103829, 59471 104666, 59279 104871, 59183 104915, 59165 105010, 58967 105284, 58896 105471, 58612 105937, 58574 106077, 58277 106306, 58237 106427, 58040 106637, 57870 107078, 57662 107450, 57339 107630, 57289 107850, 57002 108493, 56792 108641, 56660 108643, 56618 108809, 56446 109020, 56283 109471, 55796 110063, 55763 110206, 55149 111046, 55057 111046, 55093 111165, 54918 111601, 54739 111901, 54466 112068, 54283 111621, 53961 111087, 53952 110845, 53872 110725, 53693 110678, 53332 110313, 53381 110472, 53115 110638, 53065 110946, 52785 111411, 52561 111950, 52215 112089, 52082 112517, 51884 112870, 51572 113104, 51511 113310, 51346 113528, 51151 113945, 50940 114261, 50649 114467, 50578 114729, 50290 115196, 50066 115645, 50042 115752, 49679 115868, 49567 116299, 49390 116681, 49047 116850, 48923 117121, 48671 117578, 48439 118029, 48434 118074, 48128 118259, 48069 118518, 47780 118984, 47433 119476, 47132 119666, 47044 120102, 46553 120871, 46272 121137, 45929 121818, 45924 121913, 45580 122047, 45551 122309, 45488 122467, 45325 122635, 45169 122626, 45168 122802, 45016 122973, 44947 123250, 44577 123772, 44408 124172, 44399 124309, 44020 124404, 43929 124811, 43764 125153, 43440 125428, 43152 125835, 42871 125863, 42992 126112, 42948 126271, 42757 126560, 42488 126775, 42464 127032, 42514 127191, 42050 127241, 42166 127617, 41770 127708, 41824 128091, 41467 128209, 41470 128467, 41302 128901, 41348 128996, 41239 129002, 40994 129108, 40901 129250, 40695 129252, 40792 129428, 40610 129707, 40394 129713, 40495 129897, 40365 130056, 40330 130495, 39925 130565, 39967 130994, 39797 131046, 39517 131051, 39642 131294, 39669 131462, 39206 131510, 39327 131768, 39284 131926, 39129 132056, 38922 132043, 38941 132262, 38837 132424, 38777 132694, 38829 132820, 38416 132897, 38471 133255, 38132 133381, 38142 133744, 37792 133869, 37741 134279, 37605 134345, 37360 134374, 37358 134634, 37301 134773, 37169 134912, 36983 134925, 37001 135119, 36884 135285, 36838 135551, 36879 135680, 36473 135759, 36491 136105, 36156 136227, 36149 136575, 35821 136719, 35844 136987, 35800 137143, 35652 137268, 35446 137262, 35471 137477, 35410 137628, 35292 137742, 35065 137746, 35152 137952, 35090 138101, 34972 138208, 34739 138216, 34824 138429, 34734 138584, 34658 138955, 34318 139085, 34333 139491, 33904 139557, 34003 139964, 33585 140038, 33654 140300, 33636 140444, 33491 140611, 33338 140613, 33362 140768, 33220 140941, 33107 141226, 33122 141272, 32815 141416, 32815 141764, 32486 141894, 32439 142220, 32147 142395, 32109 142786, 31985 142882, 31768 142917, 31804 143134, 31751 143295, 31617 143402, 31401 143411, 31469 143613, 31406 143768, 31278 143877, 31056 143886, 31124 144095, 30896 144489, 30815 144482, 30829 144564, 30624 144738, 30573 145021, 30600 145117, 30221 145216, 30305 145630, 29882 145700, 29932 146114, 29517 146182, 29530 146608, 29397 146674, 29140 146695, 29136 147087, 29026 147227, 28847 147248, 28868 147427, 28676 147675, 28486 147724, 28501 147916, 28403 148041, 28319 148382, 28012 148539, 28002 148939, 27892 149048, 27675 149078, 27736 149288, 27643 149457, 27503 149570, 27271 149560, 27325 149789, 27141 150187, 27073 150175, 27098 150238, 26888 150412, 26785 150663, 26720 150662, 26746 150722, 26538 150912, 26492 151278, 26131 151389, 26171 151808, 26024 151878, 25775 151892, 25836 152135, 25803 152287, 25665 152359, 25419 152381, 25474 152622, 25430 152774, 25294 152920, 25105 152914, 25146 153099, 25038 153258, 24951 153583, 24649 153736, 24677 154136, 24304 154238, 24300 154620, 23915 154714, 23960 154975, 23940 155126, 23800 155238, 23583 155241, 23631 155453, 23438 155900, 23166 156080, 23172 156471, 22797 156572, 22780 156964, 22089 156891, 22096 156834, 21811 156510, 22079 156115, 21751 156033, 22130 155726, 22312 155687, 21437 155357, 21606 155241, 21213 154979, 21671 154823, 22703 154562, 22683 153811, 23054 153981, 23059 153675, 23426 153602, 23674 153763, 23456 153563, 23432 153199, 23284 153222, 23281 152914, 23442 153180, 23805 153124, 24028 153254, 23850 153067, 23800 152701, 23563 152635, 23799 152586, 23879 152284, 23876 151586, 24112 151606, 24545 151548, 24558 151331, 24995 151279, 24947 151216, 24917 150840, 25287 150782, 25398 150818, 25333 150722, 25279 150355, 25647 150303, 25844 150397, 25685 150239, 25652 149897, 25393 149930, 25400 149656, 25662 149540, 25692 149849, 26025 149796, 26267 149952, 26071 149745, 26036 149417, 25722 149452, 25494 148935, 26045 149108, 26063 148985, 26442 148888, 26442 148485, 26901 148450, 26854 148367, 26796 147997, 27173 147930, 27344 148016, 27206 147884, 27151 147529, 26950 147565, 26986 147182, 27164 147508, 27525 147452, 27840 147633, 27570 147396, 27538 147056, 27012 146882, 27555 146653, 27930 146541, 27916 146142, 28287 146083, 28407 146123, 28333 146024, 28270 145663, 28636 145603, 28756 145641, 28661 145546, 28655 145163, 29024 145104, 29153 145164, 29070 145046, 29051 144666, 29420 144609, 29605 144714, 29484 144546, 29399 144206, 29168 144244, 29151 144011, 29369 143803, 29265 143303, 29756 143432, 29770 143309, 29868 143277, 29887 142993, 30150 142990, 30175 142817, 30586 142747, 30557 142701, 30881 142238, 31068 142353, 30890 142222, 30848 141850, 31220 141800, 31588 141996, 31257 141733, 31247 141351, 31614 141269, 31818 141422, 31636 141242, 31647 140871, 31525 140884, 31547 140782, 31636 140709, 31622 140479, 31716 140445, 31688 140173, 31962 140162, 31972 140013, 32323 139962, 32378 139876, 32360 139507, 32708 139537, 32775 139441, 32760 138998, 33124 138960, 33252 139002, 33174 138882, 33091 138520, 33466 138474, 33793 138634, 33511 138403, 33417 138082, 33126 138120, 32896 137582, 33438 137777, 33451 138032, 33789 137993, 34081 138135, 33834 137926, 33823 137543, 33887 137163, 34207 137313, 34277 137077, 34190 136668, 34563 136590, 34651 136623, 34584 136557, 34508 136193, 34880 136119, 34967 136149, 34904 136082, 34923 135692, 35283 135648, 35400 135689, 35338 135575, 35337 135198, 35182 135229, 35191 135051, 35353 135066, 35394 134794, 35759 134695, 35813 134285, 36178 134236, 36376 134356, 36238 134166, 36135 133813, 36509 133762, 36808 133896, 36544 133694, 36441 133337, 36816 133267, 37067 133392, 36842 133226, 36862 132834, 36820 132842, 36874 132751, 36864 132831, 37231 132779, 37502 132981, 37327 132705, 37306 132337, 37342 132313, 37249 131969, 37609 131881, 37547 131493, 37760 131423, 37706 131192, 37939 131148, 37966 130980, 38327 130933, 38457 130994, 38369 130868, 38401 130474, 38764 130423, 39004 130597, 38821 130357, 38702 130004, 39083 129945, 39387 130085, 39117 129888, 38999 129543, 38849 129573, 38875 129413, 39011 129440, 39004 129532, 39378 129483, 39623 129581, 39442 129411, 39431 129040, 39313 129059, 39276 128870, 39495 128645, 39681 128959, 39815 128934, 39900 128543, 39803 128155, 40170 128066, 40330 128144, 40183 128045, 40088 127686, 40509 127614, 40523 127184, 40452 127196, 40533 127129, 40527 127176, 40881 127171, 41059 127240, 40935 127064, 40963 126708, 40711 126737, 40333 126299, 40933 126503, 40911 126317, 41090 126246, 40977 126040, 41196 125947, 41178 125843, 41341 125789, 41225 125410, 41623 125279, 41555 125730, 41920 125681, 42177 125785, 41957 125621, 42070 124820, 42488 124766, 42344 124353, 42726 124285, 42986 124400, 42748 124241, 42622 123892, 42997 123825, 43043 123772, 43057 123444, 42546 123213, 43137 123050, 43128 123362, 43427 123341, 43561 123407, 43481 123265, 43610 122474, 43585 122460, 43621 122422, 43618 122452, 43980 122396, 44076 122444, 44017 122342, 44084 121941, 44189 121908, 44171 121782, 43937 121257, 44505 121202, 44726 121367, 45035 120900, 45071 120537, 44717 120612, 44687 120698, 44447 120520, 44503 120271, 44715 119904, 44906 120006, 44904 120162, 45131 120285, 45185 120094, 45647 120091, 45595 119951, 46071 119082, 46196 119135, 46288 119006, 46681 118717, 46569 118542, 46655 118144, 46803 117844, 46678 117736, 46786 117368, 46872 117295, 47051 116795, 47168 117215, 47434 117265, 47536 117186, 47737 116287, 47977 115840, 48224 115960, 48363 115769, 48591 115299, 48935 115180, 48699 114858, 48989 115044, 49282 114846, 49249 114409, 49697 114510, 49883 114317, 49947 114127, 49883 113997, 49654 113909, 49752 113684, 49871 113624, 50022 113344, 50274 112493, 50638 112399, 50867 112712, 50862 112779, 50929 112695, 50886 112700, 50648 112383, 51075 111498, 51098 111541, 51583 110951, 51720 110540, 51962 110086, 52146 109687, 52456 109639, 52502 109561, 52638 109614, 52567 109532, 52503 109544, 52787 108702, 53157 108600, 53458 107738, 53660 107306, 54016 107213, 54218 106754, 54542 105900, 54906 105798, 55275 104920, 55645 104819, 56162 103519, 56524 103420, 56639 103132, 56554 103011, 56782 102774, 57061 102110, 57386 102009, 57383 101920, 57439 101973, 57773 101129, 58149 101028, 58685 99735, 59046 99619, 59376 98796, 59332 98717, 59419 98693, 59584 98316, 59946 98241, 60279 97362, 60246 97348, 60267 97298, 60303 97303, 60479 96912, 60848 96794, 61385 95497, 61728 95408, 61908 94984, 61879 94962, 61943 94900, 62284 94098, 62637 94003, 62811 93545, 63183 93446, 63510 92581, 63891 91709, 64251 91616, 64220 91221, 64595 91117, 64541 90734, 64914 90634, 64871 90254, 65112 90180, 64828 89959, 64518 89948, 64479 89645, 64779 89567, 64966 89826, 65213 89938, 65193 89759, 65564 89645, 65551 89544, 65132 89188, 65379 88903, 65369 88814, 65456 88785, 65680 89216, 65894 89163, 65845 88779, 66222 88683, 66173 88300, 66551 88205, 66499 87820, 66873 87724, 66625 87293, 66817 87278, 66940 87312, 67201 87247, 67154 86869, 67327 86823, 67077 86468, 67510 86636, 67483 86396, 67780 86289, 67704 86178, 67835 86144, 67804 85882, 68179 85752, 68128 85366, 68503 85274, 68455 84891, 68831 84801, 68789 84423, 69160 84330, 69072 83571, 69236 83523, 69211 83321, 69268 83124, 69118 82908, 69358 82854, 69688 83379, 69807 83333, 69761 82950, 70131 82801, 70079 82413, 70384 82277, 70435 82173, 70368 81565, 70737 81491, 70692 81095, 71064 81009, 71023 80630, 71397 80543, 71353 80169, 71722 80085, 71677 79703, 72072 79612, 72007 79244, 72372 79093, 72346 78703, 72690 78542, 72652 78139, 73397 77980, 73301 77214, 73681 77141, 73630 76756, 74010 76685, 73960 76302, 74290 76236, 74326 76151, 74289 75847, 74667 75784, 74620 75398, 75345 75012, 75329 74888, 74936 74629, 75270 74416, 75250 74241, 75507 74193, 75520 74093, 75619 74109, 75581 73790, 75904 73731, 75636 73136, 75893 73218, 76287 73273, 76246 72895, 76622 72829, 76576 72451, 76954 72386, 76903 72002, 77287 71942, 77237 71563, 77610 71335, 77549 70989, 77504 70990, 77498 70581, 77575 70947, 77907 70756, 77863 70363, 78241 70302, 78192 69917, 78570 69860, 78523 69479, 78903 69421, 78808 68675, 78761 68663, 78750 68574, 78849 68651, 79195 68601, 79150 68231, 79521 68175, 79494 67807, 79853 67743, 80071 67589, 80108 67462, 80198 67402, 80163 67118, 80404 66950, 80330 66807, 80505 66764, 80472 66489, 80852 66439, 80805 66056, 81041 66024, 81148 65720, 81135 65624, 81335 65368, 81419 65158, 81502 65155, 81806 64771, 82158 64512, 82113 64131, 82464 63868, 83473 62574, 83432 62202, 83753 61793, 83753 61782, 84441 60932, 84391 60574, 85077 59989, 85376 59613, 85405 59527, 85372 59187, 85913 58509, 85793 58165, 86115 58231, 86710 57583, 87085 57139, 86994 56761, 87344 56466, 87701 56111, 87653 55739, 88314 54933, 89017 54108, 88945 53799, 88710 53884, 88924 53632, 89046 53628, 89457 53147, 89436 52970, 89592 52789, 89773 52806, 89962 52619, 89914 52239, 90259 51889, 90909 51129, 90882 51104, 90928 51081, 90892 50722, 91559 49947, 92249 49196, 92201 48820, 92534 48456, 92896 46537, 93135 45885, 93274 45832, 93915 45830, 94437 45851, 94824 45830, 95063 46013, 95473 45629, 99087 45628) (143176 214170, 143101 214582, 143307 214236, 143295 214045, 143080 213805) (148068 213383, 148076 213601, 147968 214050, 148426 214061, 148793 213405, 148359 213075) (144676 213608, 144677 213926, 144905 213970, 144846 213711, 144909 213384) (148802 210301, 148740 210555, 148923 210390, 148917 210148, 148762 210131) (145180 209356, 145037 209868, 145189 210129, 145253 210139, 145114 209760, 145239 209287) (155600 209489, 155731 209728, 155803 209579, 155857 209278) (155588 208940, 155851 209008, 155784 208741, 155703 208627) (148541 207104, 148535 207485, 148713 207395, 148676 207235, 148724 207017) (155679 204372, 155689 204701, 155825 204500, 155860 204252) (155601 201072, 155748 201322, 155870 200999, 155646 200780) (155572 200305, 155641 200567, 155853 200228, 155699 199919) (128324 199634, 128234 200049, 128475 199744, 128437 199603, 128511 199343, 128245 199340) (155529 199377, 155697 199845, 155833 199458, 155866 199216) (121190 199160, 121198 199362, 121436 199587, 121345 199219, 121411 198810) (155517 198935, 155860 198910, 155805 198653, 155699 198472) (130227 198243, 130242 198409, 130405 198566, 130318 198312, 130362 198087) (128414 197670, 128231 197868, 128283 198240, 128524 198349, 128418 198057, 128557 197596) (131709 195216, 131716 195481, 131855 195564, 131764 195780, 131802 195966, 131728 196386, 132070 197055, 131745 197863, 131753 197969, 131941 198237, 131828 197898, 132074 197051, 131747 196364, 132039 195901, 132112 195640, 132089 195500, 132255 195067) (155499 197838, 155693 198192, 155789 197957, 155825 197697) (121129 197605, 121123 197886, 121334 197957, 121288 197685, 121411 197139) (124642 196588, 124760 196734, 124666 196965, 124706 197227, 124824 197155, 125005 196794, 125033 196438, 124959 196291, 124666 196263) (128170 196186, 128158 196281, 128234 196557, 128189 196833, 128480 196816, 128462 196495, 128599 196309, 128576 195912) (130113 195267, 130122 195398, 130394 195651, 130395 195189) (104353 195349, 104482 195523, 104782 195376, 104876 195268, 104845 195211) (128199 195015, 128201 195125, 128329 195368, 128545 195442, 128546 195309, 128471 195322, 128246 194998) (177330 188306, 177371 188515, 177312 188772, 177326 189690, 177391 189949, 177317 190298, 177351 190459, 177305 190772, 177375 191156, 177307 191246, 177357 191460, 177250 191750, 177263 192250, 177324 192791, 177423 193028, 177380 193164, 177386 193409, 177437 193537, 177149 194091, 177090 194406, 177495 194684, 177589 194691, 177813 194597, 177858 194196, 177818 194155, 177785 193828, 177558 193504, 177654 193197, 177634 192707, 177559 192478, 177658 192167, 177610 191939, 177634 191657, 177557 191259, 177578 191172, 177500 190914, 177596 190583, 177557 190402, 177608 190110, 177532 189634, 177394 189284, 177568 188549, 177564 188124) (174621 193971, 174571 194413, 174731 194665, 175180 194542, 175146 193934) (170728 193079, 170795 193419, 170733 193823, 170528 194267, 170606 194305, 170682 194614, 170729 194628, 171295 194445, 171256 194067, 171121 193717, 171127 193635, 170946 193377, 171137 193097, 171151 192856, 170913 192849) (172355 194245, 172312 194553, 172708 194480, 172790 194522, 172996 194366, 172519 194228) (166988 186294, 166942 186721, 167149 187441, 167015 187837, 166934 188274, 166994 188695, 167130 188997, 166916 189715, 166913 189957, 166978 190201, 167140 190544, 167057 190918, 166948 190985, 166868 191174, 166947 191372, 166866 191687, 166790 192190, 166867 192558, 166840 192724, 166909 192934, 166910 193398, 166645 194169, 166698 194542, 167076 194474, 167159 194518, 167370 194358, 167371 193944, 167193 193705, 167030 193674, 167051 193282, 167166 193014, 167201 192644, 167161 192476, 166907 192159, 167038 191796, 167119 191713, 167157 191491, 167125 191324, 167248 190566, 167199 190005, 167126 189772, 167213 189017, 167152 188602, 167208 188398, 167082 188233, 167165 187965, 167124 187835, 167155 187443, 166950 186719, 167110 186391, 167115 185868) (57360 192252, 57298 192742, 57323 192770, 57448 193411, 57316 193900, 57196 194090, 57149 194333, 57420 194466, 57847 194530, 57979 194301, 57805 193855, 57691 193797, 57682 193617, 57558 193160, 57819 192977, 57420 192708, 57829 192249, 57846 191965, 57805 191827, 57420 191575) (165290 184073, 164827 184880, 164791 184986, 164453 185556, 164463 185850, 164402 186257, 164651 186575, 164403 187010, 164390 187662, 164391 188197, 164361 188592, 164432 188961, 164385 189473, 164730 189655, 164410 190039, 164378 190523, 164434 190983, 164810 191183, 164441 191582, 164457 192900, 164564 193377, 164521 193588, 164263 194046, 164563 194352, 164963 194288, 165032 194350, 165261 194321, 165402 194510, 165581 194460, 165670 193944, 165418 192540, 165588 191822, 165614 191397, 165185 191080, 165466 190228, 165299 189498, 165299 188978, 165345 188635, 165326 188512, 165298 187948, 165362 187278, 165334 187009, 165315 186393, 165409 186049, 165425 185587, 165517 185141, 165136 184891, 165506 184436, 165447 184030, 165488 183604) (39449 193702, 39335 194021, 39332 194178, 39436 194509, 39867 194249, 39744 193950, 39694 193691, 39453 193262) (35693 185464, 35733 186248, 35666 187042, 35756 187792, 35653 188210, 35631 188488, 35687 188898, 35661 188982, 35742 189347, 35639 189763, 35652 190416, 35606 190547, 35663 190919, 35641 191313, 35587 191530, 35649 191955, 35577 192106, 35616 192482, 35585 192878, 35606 193648, 35284 194124, 35480 194459, 35906 194503, 36146 194276, 36080 193913, 35815 193591, 35848 193194, 35951 192536, 35903 192126, 35934 192008, 35882 191360, 35917 190967, 35908 190465, 35865 190205, 35901 189691, 35851 189009, 35882 188922, 35843 188545, 35866 188268, 35782 187132, 35849 186714, 35851 186216, 35736 185496, 35745 185055) (59075 193980, 58921 194085, 58863 194252, 58964 194256, 59421 194497, 59576 194444, 59631 194291, 59505 193836) (37069 194022, 37140 194391, 37419 194490, 37620 194472, 37792 194386, 37872 194190, 37206 193720) (31530 193835, 31455 194011, 31480 194203, 31555 194371, 31802 194469, 32013 194460, 32166 194359, 32179 194200, 32055 193706, 31906 193659) (168521 193823, 168458 194059, 168478 194442, 168857 194366, 168983 194466, 168968 194221, 168737 193757) (161631 193182, 161248 193226, 161085 193754, 161097 194139, 161346 194459, 161479 194465, 161701 194361, 161801 194259, 161885 193923, 161752 193571, 161717 193089) (156902 193996, 156853 194139, 157080 194465, 157260 194415, 157354 194076, 157660 193918, 157338 193881) (64030 185814, 63951 186243, 64014 186638, 64160 186984, 63967 187769, 64008 188189, 64129 188544, 64032 188905, 63932 188985, 63905 189209, 63961 189365, 63901 189565, 64059 189967, 64188 190078, 64069 190450, 63997 190518, 63915 190732, 63923 191121, 64197 191626, 64057 191981, 63978 192074, 63917 192246, 63995 192845, 63914 193286, 64070 193600, 63797 193826, 63666 194098, 63812 194446, 64198 194369, 64551 194243, 64244 193552, 64273 193256, 64037 193221, 64287 193117, 64296 192612, 64226 192393, 64266 192116, 64299 191553, 64238 191227, 64270 191064, 64231 190841, 64288 190116, 64202 189589, 64123 189320, 64271 188586, 64184 188140, 64212 187977, 64079 187781, 64168 187476, 64139 187378, 64213 186928, 64175 186447, 64027 186245, 64118 185912, 64094 185840, 64156 185428) (47874 193775, 47671 193857, 47796 194184, 48137 194440, 48343 194267, 48413 193787, 48708 193830, 48407 193482, 48184 193444) (62442 194433, 62734 194353, 62667 194173, 62344 194085) (29773 193309, 29541 193874, 29214 193807, 29232 194232, 29582 194288, 29814 194159, 30093 194385, 30249 194423, 30335 194160, 30128 193987, 29784 193307, 29789 193047) (42266 193592, 42239 193769, 41916 194086, 41853 194262, 42114 194375, 42438 194420, 42539 193803, 42450 193365) (175714 194126, 175722 194394, 176015 194394, 175964 194107) (61163 194009, 61203 194385, 61626 194321, 61848 194208, 61777 193840, 61553 193739, 61230 193722) (33350 193879, 33328 194273, 33488 194346, 33761 194297, 33782 193761, 33543 193469) (158081 192731, 158197 192995, 158095 193411, 157684 193911, 157875 194247, 158021 194319, 158262 194344, 158405 194226, 158489 194078, 158465 193697, 158185 193386, 158294 192918, 158209 192604, 158227 192466, 158045 192345) (46073 193881, 46125 194254, 46556 194344, 46730 194273, 46924 194034, 46246 193516) (159606 193665, 159488 194192, 159785 194343, 160152 194217, 160277 193976, 160165 193721, 159756 193643) (44271 193392, 44004 193379, 44254 193874, 44231 193998, 44374 194038, 44517 194307, 44804 194341, 45072 194232, 45162 194130, 45040 193776, 44842 193569, 44649 193138) (163144 192776, 163068 192823, 162975 193075, 163009 193227, 162828 193660, 162720 194082, 162877 194300, 163205 194316, 163455 194073, 163470 193876, 163243 193550, 163162 193185, 163253 192518) (26004 193508, 25922 193589, 25951 193694, 26057 193801, 26238 194279, 26420 194296, 26551 194193, 26223 193678, 26053 193185) (27439 193844, 27542 194044, 27814 194235, 27961 194228, 28203 194030, 28218 193736, 27697 193402) (24493 185403, 24479 185887, 24541 186990, 24509 187727, 24430 188269, 24481 189333, 24422 189740, 24452 190503, 24451 191171, 24397 192123, 24503 193203, 24449 193496, 24284 193754, 24185 194065, 24558 194220, 24865 194198, 25045 193943, 25055 193827, 24932 193545, 24839 193498, 24653 193162, 24771 192577, 24764 191969, 24714 191595, 24707 190978, 24727 190816, 24710 189658, 24642 189289, 24678 188174, 24608 187420, 24547 186989, 24636 186277, 24621 185500, 24544 185238) (49842 193859, 49657 194061, 49978 194217, 50100 194045, 50131 193931, 49879 193245) (23018 191672, 22943 192080, 22932 192471, 23060 193128, 23090 192459, 23060 191118) (26043 190067, 26015 191212, 26035 192008, 26017 192761, 26051 193120, 26093 192818, 26110 191988, 26089 191219, 26102 190439, 26058 190069, 26041 189459) (44476 192139, 44668 192327, 44655 193023, 44756 192765, 44727 192699, 44817 192375, 44694 191992) (159598 192107, 159671 192592, 159647 192999, 160017 192873, 159961 192512, 160066 192284, 160052 192033, 159805 192007) (31991 191129, 32052 191898, 32005 192683, 32022 192755, 32068 191910, 32011 191004) (37262 192419, 37268 192670, 37351 192428, 37316 192090) (42281 192071, 42458 192623, 42447 191718) (29579 185477, 29703 186302, 29524 186923, 29515 187178, 29676 187884, 29510 188456, 29500 188733, 29632 189398, 29528 190016, 29530 190275, 29803 190975, 29583 191605, 29576 191813, 29812 192500, 30042 191949, 30027 191690, 29812 190973, 30065 190421, 29989 189374, 30059 188755, 29916 187933, 30011 187200, 29884 186404, 29918 185683, 29772 185070) (161196 192009, 161202 192336, 161456 192401, 161350 192131, 161450 191795) (170763 191756, 170736 192146, 170891 191972, 170854 191852, 170887 191712) (159881 190521, 159635 190771, 159644 191339, 159781 191399, 160016 191369, 160066 190841, 160005 190520) (163143 190705, 163179 190854, 163092 191124, 163299 190965, 163299 190653) (161589 189739, 161154 190610, 161192 190706, 161380 190809, 161290 190597, 161773 189833, 161836 189672, 161765 189552, 161495 189434) (44755 189912, 44788 189969, 44725 190777, 44855 189982, 44735 189364) (49935 189333, 49487 189800, 49438 190214, 49462 190717, 49815 190775, 49941 190680, 49938 190108, 49971 189300, 49926 189296) (22994 187415, 23006 188131, 23047 188563, 23038 189319, 22984 190130, 23058 190731, 23080 190104, 23061 188559, 23075 188184, 23073 187005, 23058 186673) (57410 190727, 57778 190678, 57745 190293, 57421 190132) (170864 189523, 170735 190290, 170744 190441, 170865 190429, 170833 190307, 171216 189818, 171101 189459, 170853 189190) (46273 189561, 46219 190366, 46652 189848, 46339 189220, 46418 189135, 46253 189085) (158089 190319, 158129 190356, 158093 190311, 158228 189934, 158225 189841, 158160 189790) (31985 189581, 32045 190194, 32004 189439) (142628 185723, 142888 186338, 142558 186796, 142628 187184, 142576 187611, 142845 187901, 142621 188368, 142669 188724, 142641 189099, 142921 189430, 142968 189968, 143357 189637, 143359 188953, 143292 188552, 143367 188157, 143405 187249, 143350 186986, 143385 186202, 143309 185469) (159607 189243, 159635 189500, 159611 189802, 159699 189871, 159995 189839, 159993 189661, 159842 189443, 159946 189026) (163150 188821, 163029 189067, 163085 189330, 163041 189619, 163187 189782, 163372 189755, 163312 189267, 163371 188864, 163354 188747) (44706 188030, 44801 188414, 44776 188712, 44823 188420, 44709 187756) (46278 187978, 46223 188368, 46238 188565, 46328 188422, 46374 187984, 46267 187725) (163224 187312, 162843 187350, 162868 187451, 162822 187849, 162846 188366, 163129 188309, 163330 188171, 163275 187726, 163318 187231) (170841 188301, 171059 188117, 171000 187936, 170864 187788) (44701 187254, 44704 187604, 44799 187315, 44794 186900) (177618 186130, 177419 186565, 177371 186827, 177566 187314, 177526 186963, 177626 186122, 177455 185383) (57537 186474, 57428 187289, 57676 186550, 57495 186090) (53693 186336, 53653 186763, 53757 187140, 53688 186768, 53783 186392, 53780 186140) (161523 186449, 161546 186650, 161453 187000, 161722 186778, 161714 186432) (155590 186345, 155567 186630, 155615 186726, 155593 186809, 155684 186836, 155665 186712, 155779 186336, 155774 186202) (163174 185763, 162816 185810, 162768 186315, 162835 186685, 162819 186817, 163186 186813, 163329 186722, 163305 186168, 163319 185558) (170825 186705, 170949 186486, 170819 186173) (49677 186003, 49801 186269, 49965 186474, 50089 186338, 50017 186210, 49967 185923) (141011 185896, 140982 186084, 141020 186255, 141238 186264, 141191 186028, 141363 185497) (35720 183697, 35761 183560, 35763 183112) (165480 180095, 165380 180532, 165318 180577, 165198 180808, 165227 181148, 165304 181357, 165532 181681, 165380 182066, 165300 182433, 165303 182607, 165411 182912, 165499 182967, 165499 182809, 165419 182487, 165551 181684, 165408 180939, 165535 180053) (44586 182124, 44668 182248, 44714 182500, 44812 182284, 44698 181912) (136162 182001, 136254 182342, 136394 182479, 136409 182156, 136226 181961, 136340 181596, 136348 181416) (23017 180389, 23035 181174, 23015 182369, 23070 182439, 23062 179954) (158220 181360, 158095 181758, 158081 181996, 158182 181825, 158244 181340, 158206 181265) (48339 180080, 48302 180423, 48367 180847, 48454 181017, 48369 180480, 48442 180094, 48437 179871) (44645 180626, 44710 180854, 44769 180714, 44678 180351) (143611 179937, 143294 180644, 143707 180012, 143708 179790, 143545 179764) (136215 179946, 136222 180155, 136352 180125, 136330 179995, 136389 179572) (52087 176988, 52120 177105, 51989 177457, 51913 177837, 52195 178625, 52114 179032, 51970 179350, 51985 179468, 52125 179712, 52147 179036, 52215 178630, 52125 177951, 52177 177477, 52212 176932) (165350 178440, 165421 178611, 165360 178814, 165555 178822, 165564 178245) (143527 178410, 143446 178743, 143709 178566, 143708 178123, 143426 178119) (143314 176484, 143312 176919, 143273 177065, 143271 177467, 143779 177295, 143732 176802, 143779 176492, 143759 176275) (165449 176605, 165350 176927, 165362 177137, 165295 177335, 165552 177366, 165540 177028, 165598 176688, 165582 176489) (39530 176961, 39587 176664, 39471 176107) (165360 175423, 165367 175621, 165475 175920, 165561 175952, 165480 175493, 165484 175278) (143396 175088, 143461 175327, 143437 175544, 143607 175733, 143733 175731, 143643 175022) (44687 174858, 44791 175237, 44731 175686, 44795 175239, 44679 174577) (44657 173310, 44753 173697, 44665 174078, 44676 174456, 44760 174133, 44795 173709, 44677 173137) (137774 171960, 137979 172178, 137837 172568, 137847 172646, 137987 172170, 137969 171792, 137756 171616) (152083 171801, 152018 172261, 152160 171813, 152171 171648) (141575 171563, 141422 171621, 141312 171780, 141426 172007, 141398 172155, 141553 172174, 141529 171980, 141624 171488) (155577 171618, 155554 172044, 155607 172103, 155601 171999, 155724 171646, 155737 171334) (38656 163287, 38350 163400, 38268 163378, 38214 163473, 38392 163932, 38651 164128, 38559 164541, 38566 164927, 38634 165150, 38481 165411, 38551 165706, 38548 166094, 38680 166718, 38544 167003, 38484 167388, 38614 167872, 38472 168053, 38819 168346, 38509 168819, 38496 168933, 38586 169185, 38545 169708, 38744 170692, 38624 171113, 38591 171428, 38632 171886, 38737 172072, 38766 171850, 38716 171476, 38768 170981, 38695 169976, 38805 169650, 38777 169521, 38836 168729, 38818 168003, 38798 167650, 38885 167178, 38793 166109, 38883 165774, 38851 165624, 38867 164959, 38783 164565, 38791 164089, 39089 163621, 39201 163292, 39142 163218) (148457 170801, 148364 171277, 148515 170778) (152025 170266, 151961 170613, 152022 171043, 152183 171199, 152165 170935, 152035 170650, 152141 170287, 152143 170086) (137890 170651, 137818 171074, 138018 170727, 138007 170518, 137831 170353) (44670 170557, 44701 170611, 44697 170908, 44764 170622, 44682 170280) (141487 170053, 141433 170435, 141540 170814, 141610 170872, 141604 170762, 141460 170448, 141599 170075, 141666 169670) (33504 166659, 33479 167051, 33489 167836, 33542 168227, 33477 169012, 33526 169757, 33500 170191, 33495 170754, 33586 170222, 33601 169777, 33520 169045, 33573 168234, 33496 167488, 33579 166681, 33488 166037) (158069 170132, 158053 170419, 158163 170200, 158202 169766) (146912 169728, 146797 170091, 146799 170278, 146914 170230, 146897 170121, 146972 169674, 146846 169438) (34994 168973, 35034 169350, 35021 169930, 35200 169338, 35160 168962, 34994 168630) (151900 164557, 151889 164875, 151832 165136, 151878 165267, 151840 165422, 151898 165649, 151844 166148, 151902 166423, 151893 166626, 151959 166795, 151903 167001, 151923 167192, 151860 167486, 151857 167722, 151925 167968, 152116 168302, 151883 169017, 151897 169249, 151986 169502, 152159 169681, 152198 169278, 152137 169072, 152189 168836, 152144 168682, 152225 168196, 152184 167895, 152219 167640, 152165 167513, 152215 167360, 152180 167122, 152241 166857, 152226 166595, 152157 166352, 151986 166013, 152185 165570, 152240 165350, 152232 164988, 152174 164797, 152246 164401) (148361 169084, 148388 169514, 148645 169642, 148717 169636, 148573 169273, 148715 168922, 148718 168805, 148587 168802) (137804 169125, 137756 169617, 137891 169488, 138019 169237, 138014 169067, 138114 168698, 137718 168623) (159637 169617, 159909 169552, 159834 169288, 159859 169054, 159583 168898) (141864 163286, 141587 163273, 141434 163320, 141183 163482, 141105 163479, 141070 163577, 141299 163903, 141303 164299, 141335 164839, 141380 165044, 141319 165238, 141260 165727, 141271 165965, 141362 166212, 141303 166506, 141355 166601, 141294 166706, 141364 166985, 141325 167469, 141382 167757, 141643 168071, 141443 168461, 141354 168539, 141326 168805, 141359 168925, 141328 169071, 141403 169301, 141671 169583, 141600 169161, 141488 168890, 141609 168589, 141647 168073, 141601 167696, 141664 167433, 141559 167319, 141672 167169, 141607 166919, 141692 166375, 141623 166139, 141639 165873, 141597 165758, 141654 165647, 141649 165357, 141702 165146, 141665 164965, 141685 164782, 141587 164599, 141675 164200, 141560 164218, 141680 164179, 141986 163434, 141962 163164) (41997 168589, 42010 168852, 42379 169053, 42396 168635, 42281 168339) (158040 167732, 158030 167869, 158156 168198, 158071 168666, 158192 168204, 158104 167823, 158172 167658) (155746 167656, 155427 167766, 155425 167837, 155563 168133, 155407 168406, 155414 168621, 155551 168601, 155830 168452, 155754 168080, 155849 167520) (34980 167460, 35015 167798, 34994 168232, 34994 168611, 35142 168191, 35199 167788, 35199 167400, 34983 167077) (136341 167976, 136235 168440, 136272 168415, 136395 167926, 136266 167607, 136301 167483, 136176 167478) (159559 167397, 159593 167804, 159563 168277, 159600 168201, 159869 167997, 159856 167732, 159988 167479, 159988 167239, 159787 167238) (148451 167369, 148331 167555, 148338 168036, 148680 168091, 148758 167600, 148699 167237) (150453 167595, 150416 168031, 150465 168061, 150562 167498) (137720 167181, 137781 167581, 137737 168015, 138125 167876, 138017 167515, 138132 167168, 138130 167057, 137970 167038) (44641 167525, 44666 167766, 44751 167554, 44809 166797) (28173 167388, 28287 167762, 28321 167400, 28282 167017) (158109 166659, 158019 167050, 158033 167165, 158151 167168, 158097 167051, 158179 166598, 158107 166505) (35302 164207, 34992 164324, 34994 164743, 34941 165145, 34961 165914, 35013 166288, 34986 166683, 34983 167070, 35406 166592, 35402 166398, 35253 166222, 35265 166072, 35404 165996, 35409 165759, 34978 165522, 35423 165069, 35405 164691, 35124 164440, 35391 164441, 35401 164207) (155697 166108, 155402 166229, 155496 166601, 155441 166978, 155844 167054, 155765 166527, 155854 165827) (144789 165936, 144779 166343, 144934 166395, 144789 166546, 144820 166813, 144787 166972, 145021 166867, 145160 166432, 145226 165927) (136333 166426, 136208 166864, 136338 166428, 136316 166375) (159548 166669, 159763 166369, 159765 166032, 159568 165981) (148343 166141, 148319 166439, 148470 166341, 148442 166208, 148595 165826) (137689 165654, 137733 166043, 137717 166418, 138113 166365, 138130 166183, 138084 165946, 138126 165705, 138104 165498) (28148 163377, 27772 163478, 27736 163631, 27901 163928, 27982 163952, 28206 164278, 28179 164623, 28275 165014, 28153 165815, 28286 166291, 28326 165859, 28307 165026, 28340 164693, 28289 164255, 28359 163943, 28637 163384, 28281 163301) (43965 163427, 43888 163397, 43474 163474, 43530 163651, 43845 163698, 44003 163622, 44369 163910, 44580 164441, 44569 164752, 44663 165069, 44734 165175, 44678 165539, 44694 165901, 44795 165607, 44844 165192, 44700 164408, 44808 164093, 45024 163839, 45089 163526, 45067 163450, 44834 163209, 44710 163208) (33087 163294, 32745 163421, 33417 164013, 33459 164776, 33449 165486, 33483 165873, 33623 165213, 33504 164376, 33571 164052, 33754 163787, 33831 163511, 33515 163431, 33269 163277) (158037 165129, 158015 165573, 158077 165575, 158054 165512, 158188 165180, 158176 165011, 158006 164722) (136197 164757, 136230 164904, 136135 165253, 136135 165451, 136290 165449, 136287 165276, 136383 164990, 136343 164873, 136358 164680) (150327 164843, 150418 165280, 150545 165402, 150531 165197, 150416 164891, 150467 164544) (146780 165346, 146957 165229, 146918 165076, 146936 164930, 146755 164841) (144826 164480, 144816 164877, 144768 165037, 144806 165332, 145245 165214, 145176 164777, 145201 164398) (42363 164969, 42468 165261, 42485 164622) (139739 164614, 139691 164920, 139786 165092, 139974 165134, 139974 164989, 139873 164681, 139916 164309) (159605 164663, 159603 164750, 160160 163772, 160159 163756) (156939 163901, 156948 163967, 157246 164184, 157084 164515, 157077 164732, 157596 164475, 157252 164174, 157138 163824, 157327 163709, 157466 163347, 157352 163210, 157172 163198) (178576 164017, 178620 164138, 178577 164538, 178633 164718, 178756 164101, 178677 163848) (157727 163649, 157700 163603, 157569 163707, 157943 164225, 158183 164179, 158234 163912, 158345 163842, 158458 163463, 158168 163433) (177401 163625, 177538 164063, 177557 163655, 177477 163564) (42039 163918, 42055 164030, 42506 164026, 42621 163613, 42777 163385, 42417 163441, 42277 163359, 42060 163432, 41705 163291) (37140 163326, 36819 163429, 36717 163382, 36506 163553, 36811 163918, 37250 163858, 37493 163283) (163316 163542, 163302 163913, 163474 163639, 163504 163416) (35027 163889, 35602 163689, 35673 163394, 35366 163435, 35212 163348) (40231 163266, 39875 163405, 40214 163806, 40379 163857, 40774 163756, 40911 163509, 40621 163420, 40445 163248) (134976 163447, 135128 163749, 135237 163626, 135248 163274) (165497 159946, 165290 160753, 165485 161496, 165299 162341, 165570 162971, 165549 162368, 165688 161587, 165497 160857, 165598 159977, 165429 159537) (46189 156962, 46282 156684, 46058 156363) (72014 149212, 72042 149548, 71951 149946, 72015 150332, 71963 150596, 72017 151106, 72010 151507, 72055 151871, 72011 152423, 72025 152655, 72007 153158, 72061 153420, 72028 153629, 72081 154190, 72062 154662, 72106 154959, 72076 155555, 72143 155847, 71960 156492, 72029 156586, 72339 156530, 72632 156752, 72952 156710, 73070 156856, 73230 156588, 73084 155852, 73085 155443, 73012 155097, 73221 154265, 72875 153570, 73079 152753, 72829 152043, 72976 151231, 72700 150590, 72578 150564, 72713 150401, 72916 149697, 72679 149054) (76012 156600, 76214 156766, 76451 156744, 76631 156432, 76435 156222, 76129 156180) (68803 155863, 68667 156289, 68825 156633, 69051 156741, 69393 156562, 69487 156451, 69353 155672, 68812 155616) (65655 154692, 65621 155020, 65858 155120, 65665 155322, 65766 155532, 65413 156017, 65296 156279, 65306 156434, 65628 156668, 65991 156651, 66143 156205, 65918 155949, 65805 155909, 65861 155621, 65843 155512, 65945 155084, 65741 154764, 65916 154326) (67526 154954, 67624 155030, 67182 155806, 67014 156354, 67071 156431, 67696 156584, 67789 156521, 67358 155888, 67706 155072, 67701 154936, 67288 154501) (51234 147818, 51198 148021, 51427 148610, 51053 149132, 51090 149476, 51062 149845, 51514 150136, 50897 150476, 50854 151092, 50903 151466, 50837 151815, 51378 151724, 50837 151926, 50862 152455, 50889 152633, 50891 153313, 51468 153250, 51067 153688, 51213 154095, 50916 154527, 51032 155061, 50908 155143, 50873 155279, 50889 155444, 51349 155609, 51137 156416, 51305 156573, 52008 156222, 52010 156167, 51603 155538, 52019 154821, 52012 154481, 51731 153953, 51623 153275, 51602 153213, 51841 152372, 51578 151653, 51734 150851, 51524 150133, 51750 149296, 51541 148569, 51717 148205, 51724 147752, 51324 147690) (70457 155407, 70600 155759, 70395 155991, 70310 156225, 70362 156418, 70992 156476, 71069 156406, 70945 155889, 70787 155707, 70863 155211) (63732 155747, 63840 156256, 64085 156353, 64012 156014, 64054 155690) (53588 153375, 53471 153818, 53398 153884, 53329 154115, 53343 154451, 53592 154993, 53452 155344, 53375 155440, 53345 155641, 53380 155982, 53496 156183, 53629 156286, 53612 155762, 53683 155501, 53651 155365, 53705 154908, 53575 154222, 53624 153929, 53685 153219) (57235 153680, 57329 153970, 57197 154780, 57257 155153, 57237 155276, 57278 155534, 57257 156222, 57476 156070, 57492 155863, 57576 155657, 57606 155178, 57202 154779, 57396 154397, 57487 154314, 57538 154109, 57502 153922, 57657 153484, 57225 153423) (46263 151562, 46125 152377, 46288 153109, 46147 153921, 46303 154650, 46095 155971, 46482 155780, 46388 155417, 46447 155267, 46401 155026, 46427 154768, 46338 154268, 46234 153909, 46333 153728, 46410 153228, 46357 152713, 46288 152475, 46206 152366, 46272 152227, 46384 151679, 46277 151255, 46307 151176, 46141 150982) (63743 152778, 63749 153373, 63718 154237, 63777 154527, 63678 154929, 63717 155662, 64025 155544, 63882 155274, 64000 154947, 63737 154926, 64026 154757, 63961 154477, 64124 154045, 63807 153743, 64102 153275, 63910 152940, 63997 152536) (68831 154157, 68853 154511, 68935 154665, 68861 154859, 68823 155294, 69159 155148, 69341 154998, 69319 154108) (47717 154277, 47674 155049, 48183 154621, 48172 154277, 48081 154081, 48170 154031, 48167 153688, 47653 153550) (78490 153983, 78372 154126, 78395 154397, 78360 154795, 78784 154793, 78803 154464, 78711 154310, 78765 154059, 78730 153918, 78751 153796) (70710 153740, 70602 153819, 70493 153977, 70538 154225, 70496 154517, 70606 154594, 70854 154635, 70789 154155, 70896 153432) (69037 152560, 68793 152624, 68804 152991, 68882 153129, 68813 153309, 68817 153682, 69123 153612, 69302 153465, 69308 153011, 69360 152780, 69360 152303) (47856 152110, 47679 152215, 47697 152733, 47653 153508, 48209 153128, 48231 152586, 48180 152082) (70408 148868, 70473 149204, 70433 149748, 70471 149979, 70403 150238, 70412 150532, 70473 150754, 70432 150939, 70447 151357, 70512 151519, 70815 151823, 70537 152287, 70444 152994, 70475 153080, 70909 153309, 70908 152701, 70850 152588, 70914 152464, 70888 152191, 70919 151856, 70862 151422, 70886 151112, 70848 151038, 70888 150955, 70941 150187, 70841 149877, 70613 149552, 70820 149217, 70902 148698, 70884 148315, 70408 148189) (78545 152349, 78390 152715, 78335 153158, 78454 153219, 78723 153239, 78716 153033, 78637 152780, 78737 152562, 78736 152177) (57275 149332, 57541 150035, 57325 150858, 57466 151606, 57321 152420, 57232 152783, 57228 152979, 57338 152847, 57646 152732, 57454 152384, 57644 151656, 57633 151471, 57341 150865, 57547 150037, 57329 149297, 57376 149023) (74479 151949, 74536 152354, 74462 152912, 74790 152499, 74761 152292, 74869 151866) (67528 151948, 67377 152363, 67632 152025, 67622 151831, 67466 151766) (68878 149395, 68985 149612, 68912 149828, 68855 150348, 68892 150412, 69342 150676, 69067 151048, 68869 151245, 68918 151567, 68853 151982, 69357 152144, 69325 151675, 69263 151473, 69298 151219, 69347 150675, 69278 150305, 69288 150120, 69216 149935, 69282 149722, 69302 149134, 68856 148700) (53629 151451, 53544 151818, 53547 151994, 53674 152109, 53650 151877, 53734 151510, 53724 151378) (63741 151287, 63764 151429, 63720 151637, 63961 151716, 63874 151426, 63940 151381, 63929 151093) (47904 150608, 47847 150753, 48053 151003, 47733 150994, 47731 151398, 47881 151684, 48153 151552, 48163 151071, 48120 150596) (74517 150581, 74548 150799, 74523 151057, 74841 151108, 74731 150749, 74739 150511) (46255 150027, 46169 150509, 46259 150031, 46203 149654, 46151 149581) (63739 149111, 63881 149848, 63832 150253, 63972 149852, 63811 149478, 64105 149010, 63819 148746) (136812 149201, 136658 149819, 136793 149767, 136888 149605, 137001 149187) (65792 149323, 65714 149689, 65857 149351, 65852 149265, 65771 149181) (74569 149249, 74581 149258, 74769 148808) (72802 146626, 72577 147464, 72045 147978, 72063 148380, 72019 148575, 72012 149123, 72648 148921, 73014 148120, 72586 147462, 73053 146715, 73118 146142) (46124 149076, 46217 148908, 46230 148472) (67273 148777, 67294 149013, 67454 149069, 67414 148879, 67549 148451) (69177 147490, 69198 147615, 69009 148116, 69292 147675, 69294 147483) (70644 147044, 70626 147223, 70455 147463, 70407 147915, 70809 147754, 70848 147162, 70807 147009) (63912 147513, 63860 147762, 64010 147516, 64033 147374, 63872 147325) (179641 143901, 179269 144018, 178732 144497, 178796 144708, 178685 145126, 178868 145464, 178579 145612, 178731 146391, 178677 146679, 178925 146788, 179068 146714, 179193 146150, 179120 145937, 179508 145842, 179438 145472, 179811 145368, 180208 144892, 180234 144458, 180520 144273, 180440 143870, 180023 143838) (72854 144925, 72847 145230, 73096 145356, 73002 145022, 73091 144594) (29369 143801, 29414 144177, 29775 144161, 30074 144289, 29846 144059, 29741 143724) (72836 143128, 72748 143306, 72761 143536, 72673 143972, 73103 143923, 73102 143746, 73004 143469, 73096 143165, 73109 142870) (214087 143097, 213856 143626, 214142 143746, 214285 143897, 214509 143890, 214833 143746, 214531 143156, 214400 143089, 214172 142774) (215788 143249, 215606 143533, 215825 143862, 216001 143875, 216421 143745, 216392 142954) (196122 143060, 196145 143128, 196033 143726, 196105 143863, 196783 143655, 196187 142712) (210363 137606, 210295 138013, 210362 138859, 210273 139830, 210325 140248, 210287 140340, 210324 140717, 210219 141522, 210334 142654, 210280 142925, 210070 143158, 209988 143524, 210048 143550, 210253 143839, 210439 143846, 210806 143687, 210743 143317, 210486 142999, 210474 142615, 210568 141965, 210541 141434, 210531 140661, 210501 139895, 210556 139360, 210468 138353, 210511 138072, 210500 137657, 210380 136798) (208834 133733, 208849 134125, 208130 134105, 207982 134235, 207983 134382, 207914 134623, 207881 135185, 207785 135986, 207808 136755, 207765 137542, 207813 138305, 207766 139099, 207830 139509, 207762 139869, 207857 140231, 207873 141083, 207789 141388, 207860 141782, 207900 142282, 207957 142686, 207938 142922, 207678 143247, 207641 143391, 207955 143694, 208155 143668, 208252 143708, 208532 143593, 208830 143841, 208926 143843, 209133 143756, 208946 142640, 208963 141932, 208922 141491, 208943 141097, 208939 140097, 208805 139584, 208817 139525, 208806 138809, 208814 138770, 208741 137874, 208725 137280, 208732 137201, 208712 136508, 208673 136281, 208810 135706, 208841 134922, 208786 134815, 208878 134320, 208902 133760, 208906 133321) (211852 143319, 211732 143619, 211818 143797, 211917 143805, 212291 143684, 212355 143717, 212455 143459, 212051 143027, 211912 142911) (197247 143463, 197159 143551, 197275 143538, 197655 143804, 197723 143784, 197651 143379) (199039 143036, 198644 143375, 198594 143545, 199089 143798, 199253 143787, 199404 143711, 199403 143324, 199201 142992, 199195 142416) (192401 135137, 192451 135538, 192409 136552, 192478 137081, 192380 137496, 192344 138668, 192357 139440, 192301 140158, 192347 140994, 192303 141696, 192314 142165, 192368 142443, 192337 142935, 192016 143412, 192058 143782, 192445 143739, 192606 143792, 192880 143561, 192771 143139, 192529 142881, 192590 142478, 192582 142237, 192680 142065, 192627 141923, 192722 141196, 192568 140689, 192620 140531, 192578 140352, 192453 140190, 192619 139907, 192677 139620, 192505 139110, 192620 138981, 192362 138664, 192648 138058, 192569 137832, 192596 137577, 192519 136683, 192424 136321, 192569 135506, 192522 135131, 192415 134726) (204464 143160, 204482 143482, 204792 143784, 205070 143709, 205147 143630, 205151 142910) (190046 143400, 189933 143593, 190176 143603, 190456 143770, 190518 143433, 190470 143059, 190180 142766) (193816 143304, 193791 143699, 193977 143679, 194089 143743, 194339 143692, 194615 143473, 193921 143077) (188625 138913, 188485 139340, 188433 139740, 188487 140114, 188696 140444, 188479 140891, 188419 141295, 188461 141671, 188655 142005, 188595 142797, 188421 143108, 188396 143322, 188194 143417, 188161 143692, 188356 143669, 188466 143734, 188716 143686, 188952 143733, 188920 143484, 188806 143127, 188646 142802, 188751 142017, 188688 141291, 188746 140921, 188725 140824, 188717 140110, 188662 139736, 188732 139373, 188717 139275, 188747 138408) (202785 143172, 202878 143534, 203301 143711, 203536 143601, 203671 143310, 202949 142873) (201195 142717, 200890 142760, 201032 143162, 200957 143285, 201088 143286, 201240 143596, 201428 143619, 201616 143697, 201801 143542, 201869 143424, 201795 143055, 201410 142548) (206282 142731, 206250 142949, 206137 143232, 206122 143420, 206313 143632, 206542 143694, 206752 143636, 206870 143402, 206891 143210, 206662 142685) (181212 142495, 181065 142923, 180983 143333, 181147 143519, 181380 143612, 181584 143589, 181727 143345, 181749 143124, 181475 142985, 181236 142489, 181151 142092) (182863 143594, 183201 143612, 183286 143478, 182775 143100) (200234 143484, 200516 143602, 200647 143370, 200257 143328) (184893 142960, 184222 143169, 184102 143139, 184470 143541, 184630 143589, 184988 143082, 185158 143063, 184932 142716) (179573 143332, 179653 143398, 179928 143235, 179932 143101, 179675 142630) (51816 142917, 51852 143065, 51828 143222, 52000 143273, 51971 143033, 52026 142632) (214134 138896, 214126 140401, 214118 140477, 214138 141223, 214090 142012, 214172 142736, 214298 142482, 214369 142160, 214246 141969, 214230 141198, 214185 140435, 214229 139648, 214140 138897, 214165 138119, 214157 138007) (69390 142136, 69233 142635, 69412 142115, 69226 141773) (72913 139495, 72959 139583, 72733 140370, 72739 140512, 73116 141101, 72723 141810, 72733 142185, 73017 142321, 72922 141942, 72970 141825, 73161 141097, 72849 140402, 73175 139699, 73208 139294, 72753 138960) (201355 141206, 201321 141508, 201399 141613, 201362 141977, 201412 142168, 201498 142056, 201536 141667, 201467 141207, 201416 141161) (198788 141158, 198757 141556, 198796 141945, 199199 142075, 199227 141871, 199169 141480, 199205 141092, 199184 140881) (202921 141605, 202964 141185, 202941 141081) (199074 138325, 199190 139117, 199082 139872, 199125 140279, 199179 140431, 199152 139928, 199194 139119, 199156 138740, 199142 138062) (206426 134601, 206427 134809, 206586 135462, 206571 135892, 206431 136168, 206605 137019, 206563 137800, 206576 137868, 206576 138544, 206552 139334, 206683 140304, 206697 140150, 206673 139430, 206723 138652, 206771 138591, 206722 138558, 206655 137873, 206700 137089, 206730 137051, 206698 137032, 206700 136285, 206668 135906, 206697 135544, 206736 135499, 206705 135464, 206729 134764, 206636 134371) (182757 140117, 182978 139890, 182970 139688, 182756 139415) (46050 139560, 46244 139854, 46241 139565, 46121 139382) (72777 137718, 72692 138174, 72813 138483, 72738 138845, 72970 138501, 73088 138408, 73181 138255, 73130 137816, 72994 137658, 72760 137538) (182758 138438, 182931 138316, 182897 138157, 182758 137977) (188636 137310, 188685 137711, 188752 137882, 188755 137737, 188698 137158) (46121 137256, 46077 137283, 46084 137516, 46224 137243, 46194 136964) (210344 135647, 210405 136230, 210462 135641, 210385 135274, 210391 134870) (72906 134969, 72736 135436, 72941 134937, 72764 134691) (74361 134456, 74384 134644, 74477 134648, 74470 134540, 74596 134115) (81455 133200, 81485 133392, 81339 133738, 81316 133962, 81478 133782, 81614 133460, 81630 133195) (70938 133183, 70805 133615, 71002 133220, 71022 133051, 70779 132835) (77847 131676, 77788 131955, 77850 132063, 77837 132269, 77906 132435, 77887 132550, 78169 132097, 78162 131851, 78033 131625, 77812 131490) (81292 131487, 81392 131868, 81389 132130, 81624 132031, 81603 131810, 81657 131454) (70718 131287, 70767 131679, 70750 132085, 71085 131900, 71044 131602, 71079 131244) (74386 131074, 74260 131394, 74268 131595, 74367 131855, 74604 131960, 74588 131629, 74422 131452, 74550 131149, 74551 130893) (77804 130253, 77939 130489, 77817 130784, 77812 131076, 78037 130849, 78132 130586, 78105 130443, 78157 130204, 78076 130062, 77802 130024) (81410 129924, 81311 130059, 81347 130329, 81269 130759, 81676 130674, 81578 130265, 81695 129686) (67444 130264, 67351 130615, 67542 130306, 67569 130084, 67344 129992) (70929 129619, 70760 129920, 70776 130126, 70693 130553, 71090 130462, 71066 130046, 71137 129825, 71099 129649, 71138 129420) (72724 130290, 72720 130466, 72864 130522, 72802 130346, 72915 129980) (74571 129085, 74220 129878, 74223 130039, 74422 130211, 74330 129927, 74637 129110, 74642 129003, 74406 128733) (79869 129183, 79730 129613, 79936 129208, 79941 129100, 79831 129039) (77774 128527, 77877 128955, 77793 129458, 78176 129201, 78123 128887, 78203 128434) (67151 128626, 67245 128768, 67173 128978, 67212 129164, 67177 129363, 67386 129198, 67560 128903, 67538 128483, 67444 128325, 67161 128256) (69288 128983, 69201 129289, 69346 129014, 69360 128877, 69243 128841) (81431 126754, 81150 126887, 81276 127434, 81376 127608, 81664 127916, 81464 128283, 81297 128404, 81253 128508, 81311 128788, 81309 129010, 81413 129149, 81700 129270, 81685 128903, 81604 128707, 81682 128490, 81662 128305, 81768 127937, 81656 127530, 81721 127167, 81598 126772, 81607 126582) (208804 128730, 208921 129178, 208937 128306, 208923 127968) (63990 128884, 63952 129150, 64113 128851, 63954 128684) (71047 127649, 71106 127709, 70819 128176, 70735 128764, 70831 128948, 71126 129085, 71096 128690, 70982 128518, 71111 128334, 71107 128097, 71183 127640, 70808 127105) (74255 125580, 73924 125774, 74301 126447, 74409 126804, 74283 127081, 74184 127651, 74255 128010, 74242 128326, 74529 128031, 74643 127670, 74630 127369, 74527 127158, 74609 126900, 74590 126715, 74858 125845, 74824 125528) (76402 127808, 76269 128267, 76330 128302, 76303 128223, 76481 127840, 76480 127726, 76330 127582) (65665 127994, 65663 128172, 65795 128146, 65782 128006, 65853 127725) (79797 127653, 79770 127860, 79953 127790, 79910 127516, 79752 127456) (77925 127003, 77798 127121, 77819 127420, 77781 127821, 78208 127795, 78237 127505, 78174 127322, 78198 127060, 78158 126885) (67259 125562, 66855 125773, 67081 126243, 67294 126429, 67179 126862, 67244 127218, 67169 127718, 67609 127555, 67622 127420, 67558 127130, 67552 126756, 67434 126777, 67547 126728, 67479 126378, 67675 126237, 67811 125899, 67704 125541) (69195 127624, 69365 127599, 69335 127262, 69160 127259) (63943 127346, 63911 127582, 64034 127383, 64190 127279, 64022 127265, 63912 127201) (72779 126862, 72701 127179, 72871 126906, 72865 126775, 72686 126594) (75992 125549, 75668 125683, 75799 126035, 76147 126328, 76186 126813, 76344 127049, 76463 127062, 76465 126956, 76298 126673, 76510 126432, 76690 125791, 76598 125786, 76470 125622, 76345 125596, 76310 125507) (46081 126428, 46176 126790, 46166 127047, 46379 126947, 46496 126702, 46439 126403, 46153 126355) (70541 125538, 70628 125685, 70609 126055, 70678 126401, 70863 126613, 70776 126992, 70805 127017, 71162 126966, 71169 126845, 71030 126566, 71233 126363, 71390 125689, 70936 125751, 70707 125486) (49675 126499, 49703 126669, 49842 126852, 49872 126552, 49820 126308) (68981 125524, 68651 125668, 68769 126024, 69026 126341, 69205 126680, 69170 126850, 69299 126767, 69277 126660, 69475 126343, 69661 125780, 69593 125776, 69369 125472) (65589 125667, 65253 125812, 65212 125765, 65142 125855, 65215 125900, 65405 126242, 65608 126503, 65578 126680, 65836 126784, 65735 126468, 65953 126284, 66138 125876, 66124 125586) (72563 125677, 72242 125847, 72643 126501, 72945 126299, 73144 125912, 73113 125609, 72943 125584) (77678 125907, 77647 126146, 77696 126374, 77872 126335, 78283 125907, 78337 125728, 77918 125800, 77792 125661) (64671 125560, 64367 125680, 64504 126021, 64818 125824, 64900 125534) (61578 125669, 61661 125862, 61853 126013, 62126 125713, 62132 125518) (57307 125677, 57331 125713, 57818 125704, 57827 125535) (50780 119092, 50641 119591, 50387 119820, 50572 119976, 50753 119874, 51023 119515, 51061 119248, 51035 118923) (52440 110342, 52318 110762, 52658 110283, 52481 110291, 52381 110176) (90492 73880, 90508 74097, 90745 74443, 90898 74412, 91006 74251, 91250 74080, 91317 73938, 90648 73370) (95409 74279, 95803 74309, 96000 74157, 95493 73769) (89095 73380, 89036 73436, 89041 73726, 88737 73881, 88840 74250, 89211 74302, 89346 74254, 89588 74015, 89348 73541, 89359 73292) (101213 71532, 101237 72214, 101296 72603, 101323 73291, 101161 73606, 101101 73936, 101134 74004, 101499 74244, 101612 74263, 101733 74170, 101926 73735, 101714 73229, 101616 72809, 101711 72599, 101678 72155, 101756 72135, 101745 71291, 101226 71130) (92948 73383, 92727 73994, 92893 74248, 93180 74242, 93302 74116, 93081 73553, 93314 73641, 93055 73379, 92931 73057) (96900 73796, 96690 73802, 96952 74201, 97020 74037, 97505 74035, 97612 73826, 97137 73654) (98362 73445, 97755 73851, 97925 74101, 98106 74134, 98210 74086, 98432 73470, 98397 73368) (99658 71587, 99664 72041, 99726 72328, 99707 72423, 99859 73116, 99716 73360, 99566 73417, 99467 73644, 99544 74021, 99650 74082, 100045 74129, 100243 73875, 100126 73509, 99968 73194, 99934 72477, 100006 72364, 100018 72192, 99907 71767, 99985 71590, 99917 71429, 100081 71347, 100079 71161, 99631 70867) (93951 73986, 94226 74112, 94284 73920, 94076 73750) (102889 72361, 102983 73121, 102920 73391, 102831 73543, 102790 73943, 103141 74099, 103377 74057, 103545 73782, 103350 73432, 103069 73103, 102980 72343, 102892 72123) (98110 71878, 98302 72616, 98266 71965, 98116 71143) (90761 71701, 90857 72063, 90827 72078, 90900 72333, 90888 72068, 90955 71667, 90812 71636) (95501 69458, 95481 69538, 95570 70204, 95530 70315, 95579 70560, 95545 70704, 95624 70940, 95723 71065, 95824 71437, 95810 71834, 95894 71964, 95828 71439, 95789 70716, 95801 70659, 95728 69976, 95753 69884, 95722 69623, 95746 69494, 95652 69119, 95502 68753, 95470 68554) (102856 66392, 102874 66939, 102964 67569, 102958 67907, 102886 68094, 102956 68591, 102847 68705, 102839 68908, 103170 69206, 103375 69813, 103364 69213, 103331 68484, 103270 67742, 103310 67551, 103243 67012, 103320 66728, 103311 66326, 103019 66098, 102850 65661) (101279 66021, 101325 66687, 101328 67182, 101446 67817, 101369 67957, 101441 68505, 101282 68592, 101267 69247, 101725 69460, 101797 69595, 101872 69518, 101820 69431, 101714 68364, 101664 67981, 101624 67258, 101656 67131, 101556 66517, 101681 66350, 101653 66245, 101750 66153, 101748 65922, 101289 65615) (99721 65930, 99940 67172, 99889 66588, 99841 65848, 99720 65436) (98163 65632, 98248 66055, 98212 65657, 98113 64989) (98218 59856, 98262 60034, 98199 59533) (97930 57562, 97989 57883, 98264 57538, 98224 57226) (98274 57069, 98352 56767, 98340 56650, 98212 56572)), ((225644 179887, 225630 181166, 225501 181198, 225501 201627, 225491 202402, 225469 202910, 225469 214698, 189190 214698, 189122 214369, 189502 214263, 189441 213910, 189797 213801, 189863 213394, 190234 213290, 190305 212881, 190232 212521, 190597 212416, 190527 212045, 190904 211955, 190968 211543, 191333 211450, 191398 211033, 191769 210930, 191702 210561, 192075 210458, 192010 210090, 192387 209987, 192509 209189, 192779 209101, 192659 208948, 192840 208898, 192807 208707, 193184 208605, 193131 208320, 192997 208265, 192914 208042, 193133 208105, 193491 208130, 193607 207330, 193974 207223, 194033 206825, 194399 206727, 194460 206322, 194830 206217, 194769 205845, 195094 205753, 195088 205710, 195137 205727, 195088 205374, 195460 205270, 195555 204465, 195925 204377, 195870 203991, 196248 203890, 196189 203517, 196562 203414, 196571 202978, 196982 202909, 197032 202509, 196980 202140, 197349 202039, 197301 201665, 197550 201591, 197462 201369, 197687 201403, 197718 201161, 198088 201065, 198164 200648, 198098 200293, 198459 200201, 198419 199815, 198786 199740, 198819 199692, 198820 199339, 198731 199328, 198742 199230, 199210 199075, 199243 198805, 199612 198706, 199570 198329, 199940 198226, 199894 197850, 200267 197748, 200313 197351, 200344 197336, 200361 196961, 200721 196845, 200705 196490, 201051 196387, 201007 195994, 201379 195890, 201419 195494, 201681 195420, 201733 195337, 201797 195323, 201850 195374, 202914 195085, 203286 195013, 203608 195279, 204380 195071, 204758 194997, 205145 195245, 205915 195038, 206292 194965, 206675 195213, 207472 195028, 207513 194984, 207433 194326, 208139 194763, 208187 194751, 208198 194796, 209310 194493, 209652 194785, 210783 194487, 211127 194769, 211887 194564, 211904 194572, 212647 194363, 212663 193969, 213028 193869, 213040 193607, 212897 193507, 212880 193203, 213194 193427, 213421 193366, 213402 192984, 213778 192883, 213784 192115, 214174 191995, 214180 191626, 214532 191562, 214522 191129, 214893 191026, 214877 190640, 215252 190538, 215271 190150, 215642 190045, 215655 189653, 215771 189619, 215781 189353, 216031 189376, 216044 189162, 216112 189138, 216050 188786, 216008 188778, 216004 188689, 216072 188762, 216421 188730, 216428 188669, 216798 188563, 216789 188184, 217163 188081, 217146 187723, 217067 187713, 217038 187607, 217146 187610, 217311 187424, 217524 187367, 217531 187200, 217904 187096, 217905 186326, 218274 186231, 218267 185837, 218640 185733, 218649 185345, 219023 185239, 219029 184851, 219401 184748, 219396 183984, 219761 183882, 219768 183486, 220141 183382, 220142 183149, 220015 183028, 219880 182796, 220142 182801, 220210 182976, 220523 182895, 220515 182507, 220895 182408, 220888 182020, 221261 181916, 221267 181139, 221642 181032, 221644 180654, 222008 180546, 222009 180160, 222387 180058, 222385 179669, 222756 179566)), ((188743 194702, 188639 195415, 187979 195596, 187463 195051, 187300 194412, 187962 194231)), ((191618 194689, 191729 195343, 191069 195524, 190334 195040, 190395 194339, 191054 194158)), ((185622 194782, 185772 195404, 185067 194934, 185117 194659, 185378 194526)), ((202513 194804, 202501 195148, 202174 195210, 201897 194972, 201465 194406, 202129 194224)), ((205441 194777, 205470 195090, 205161 195195, 204822 194945, 204525 194343, 205184 194161)), ((115949 193379, 115652 193181, 115715 193005, 116038 192923)), ((116700 192741, 116596 193015, 116359 193081, 116203 192877, 116394 192683, 116521 192667)), ((77515 185401, 77725 185593, 77537 185918, 77288 185961, 76960 185801, 77113 185262)), ((222757 179018, 222796 179176, 222834 179180, 222757 179400, 222524 179239, 222523 178999)), ((126075 177767, 125917 178099, 125649 178316, 125278 178528, 125164 178494, 125215 178384, 125585 178287, 125820 177765)), ((22835 173891, 22683 174001, 22336 173940, 22684 173657)), ((23062 172597, 23098 172656, 23435 172783, 23506 173007, 23433 173045, 23083 173072, 23138 173420, 23058 173608, 22788 173515, 22816 173257, 22943 173086, 22915 172943, 22945 172697, 22921 172558)), ((24493 172273, 23903 172529, 23686 172494, 23808 172066)), ((24475 170728, 24357 171043, 24352 171329, 23809 171154, 23712 170835, 23808 170583)), ((131176 170166, 130997 170524, 130804 170766, 130591 170824, 130405 170764, 130636 170654, 130806 170268, 130873 170243, 130909 170143)), ((87703 170065, 87660 170256, 87487 170304, 87320 169991, 87664 169896)), ((131726 168823, 131426 168980, 131353 168974, 131586 168499, 131745 168460)), ((91043 165273, 90853 165457, 90718 165509, 90523 165236, 90869 165141)), ((22740 165058, 22708 165423, 22614 165405, 22458 165000, 22685 164907)), ((152546 163146, 152437 163506, 152211 163429, 152010 163292, 152388 163115)), ((23180 162555, 23054 162803, 22692 162698, 22885 163023, 22753 163130, 22685 163270, 22142 163084, 22674 162691, 22697 162314, 23054 162234)), ((206641 162618, 206796 162618, 206808 162777, 206650 162820, 206360 162428)), ((30210 162566, 30322 162719, 29848 162664, 29897 162422, 30111 162273)), ((30545 162087, 30625 162207, 30181 162185, 30267 161930, 30497 161755)), ((31148 161146, 30929 161241, 30951 161675, 30542 161699, 30589 161371, 30882 160992)), ((31592 160378, 31742 160596, 31624 160760, 31258 160726, 31138 160372, 31214 160276)), ((32017 159366, 31997 159750, 32042 159807, 31822 159797, 31884 159673, 31940 159378, 32014 159263, 32380 159258)), ((32534 158827, 32462 158906, 32382 159256, 32162 158929, 32434 158544)), ((152430 153099, 152546 153564, 152446 153974, 152343 154012, 152176 154193, 151922 154317, 151807 154302, 151802 154433, 151495 154905, 151309 155116, 150914 155802, 150871 155804, 150870 155851, 150646 156077, 150562 156324, 150073 157020, 149641 157496, 149567 157759, 149356 158130, 149274 158138, 149254 158232, 149011 158461, 148837 158735, 148458 159215, 148556 158811, 148724 158379, 148883 158222, 148958 157926, 149103 157735, 149316 157655, 149359 157429, 149737 156738, 150003 156403, 150135 156024, 150417 155818, 150505 155564, 150599 155434, 150859 154975, 151128 154586, 151413 154383, 151556 154020, 151815 153788, 151902 153242, 151911 152990, 152256 152794)), ((209437 158793, 209460 159173, 209128 158877, 209263 158588)), ((83131 157752, 82774 158528, 82105 158742, 81770 158123, 82047 157317, 82720 157208)), ((33547 157387, 33627 157494, 33315 157450, 33355 157287, 33511 157131)), ((39116 145521, 39364 145607, 39465 145590, 39635 145639, 39593 145824, 39925 146523, 40177 146819, 40363 146603, 40306 146231, 40480 145992, 40628 146143, 40835 146156, 41032 146419, 41083 146572, 40564 146585, 40726 146890, 40702 147036, 40562 147117, 40287 147099, 40358 147379, 40157 147822, 40193 147892, 40111 147893, 39957 148076, 39861 148291, 39896 148368, 39807 148367, 39593 148514, 39544 148835, 39480 148838, 39246 149007, 39189 149406, 39031 149520, 38731 149427, 38695 149473, 38370 148754, 38200 147828, 38271 147564, 38208 147453, 38235 147390, 38584 147478, 38709 147555, 38773 147426, 38757 147127, 38603 146698, 38544 146326, 38576 145772, 38732 145464)), ((43859 142156, 43963 142503, 43646 142341, 43370 142289, 43457 141959)), ((44171 141682, 44007 141948, 43683 141581, 43880 141391)), ((24416 45497, 24693 45678, 25200 45679, 25466 45668, 25974 45669, 26239 45658, 26747 45659, 27020 45680, 27527 45681, 27792 45669, 28300 45670, 28566 45658, 29073 45659, 29338 45646, 29845 45647, 30119 45671, 30626 45672, 30892 45658, 31399 45659, 31664 45644, 32172 45645, 32446 45673, 32953 45674, 33218 45658, 33725 45659, 33989 45642, 34497 45643, 34773 45678, 35280 45679, 35544 45658, 36051 45659, 36315 45638, 36822 45639, 37086 45618, 37593 45619, 37870 45658, 38377 45659, 38639 45631, 39147 45632, 39409 45604, 39917 45605, 40196 45658, 40703 45658, 40963 45619, 41730 45617, 42226 45683, 42524 45767, 42787 45684, 43283 45687, 43545 45602, 44533 45603, 44832 45795, 59563 45794, 59688 45676, 60180 45673, 60322 45630, 60554 45847, 60716 46268, 60907 46296, 61682 46292, 61904 46485, 62076 46292, 63233 46292, 63455 46488, 67332 46486, 67504 46292, 68660 46292, 68883 46489, 69658 46488, 70039 46678, 78962 46675, 79133 46472, 79903 46483, 80127 48386, 80383 48432, 80159 48711, 80166 48815, 79153 49961, 79190 50343, 78293 51384, 78522 51502, 78206 51657, 78225 51863, 77930 52172, 78046 52480, 78186 52613, 77967 52832, 77830 52716, 77559 52668, 77515 52628, 76871 53397, 76911 53776, 76580 54130, 76297 54514, 76422 54717, 76353 54952, 75925 55085, 75942 55355, 75261 56022, 75284 56139, 75631 56439, 75354 56695, 75182 56552, 74638 57171, 74637 57198, 74304 57591, 73293 58838, 73343 59217, 73068 59463, 73003 59568, 73039 59902, 72696 60203, 72359 60608, 71013 62293, 71062 62667, 70726 63087, 70378 63374, 70424 63748, 70078 64026, 69343 64944, 69460 65598, 69208 65831, 68818 66330, 68532 66440, 68117 66973, 68167 67352, 67460 67858, 67504 68234, 67291 68267, 67356 68464, 67153 68491, 67216 69045, 66837 69105, 66881 69479, 66510 69535, 66538 69906, 66176 69964, 65816 70214, 65862 70591, 65510 70828, 65553 71203, 65254 71251, 65281 71726, 65668 72320, 64891 72061, 64935 72458, 64607 72515, 64612 72559, 64564 72547, 64598 72895, 64228 72956, 64272 73342, 63897 73399, 63944 73789, 63565 73847, 63609 74236, 63165 74504, 63485 74913, 62921 74883, 62936 75038, 62560 75104, 62624 75596, 62911 75825, 62944 76077, 62690 76122, 62461 76069, 62300 76096, 62320 76311, 61948 76379, 61984 76755, 61615 76819, 61663 77214, 61464 77254, 61486 77432, 61304 77417, 61330 77666, 60940 77749, 60997 78122, 60812 78228, 60856 78585, 61066 78879, 60326 78884, 60370 79264, 59992 79337, 60033 79627, 60176 79697, 60192 79828, 60061 79854, 59948 79740, 59662 79792, 59710 80174, 59417 80237, 59426 80317, 59344 80316, 59380 80631, 59006 80706, 59051 81093, 58935 81120, 58967 81381, 58707 81408, 58722 81553, 58336 81640, 58391 82016, 58246 82090, 58251 82304, 58053 82367, 58069 82570, 57710 82723, 57757 83119, 57543 83168, 57563 83329, 57396 83309, 57426 83580, 57212 83632, 57509 84009, 57085 83905, 57100 84046, 56906 84091, 56905 84257, 56745 84291, 56771 84511, 56557 84561, 56757 84851, 56409 84700, 56434 84976, 56076 85132, 56109 85511, 55749 85672, 55804 86049, 55424 86133, 55470 86511, 55094 86599, 55145 86982, 54763 87067, 54814 87449, 54438 87539, 54486 87922, 54111 88013, 54155 88392, 53782 88487, 53829 88871, 53459 89006, 53510 89393, 53137 89521, 53187 89903, 52802 89990, 52859 90376, 52703 90419, 52710 90624, 52515 90692, 52533 90854, 52151 90944, 52201 91272, 52306 91308, 52250 91667, 52034 91376, 51831 91427, 51879 91810, 51495 91900, 51551 92263, 51626 92274, 51566 92388, 51440 92321, 51177 92388, 51224 92772, 50962 92858, 50975 92967, 51310 93535, 50936 93537, 50649 93353, 50528 93387, 50577 93769, 50267 93859, 50165 94288, 50128 94307, 49991 94714, 49647 94794, 49270 95699, 48904 95815, 48694 96638, 48743 97052, 48853 97371, 48734 97692, 48458 97769, 48332 97513, 48248 97434, 48196 97549, 47810 97630, 47535 98478, 47611 98487, 47576 98586, 47522 98510, 47124 98568, 46867 99452, 46666 99899, 46336 99929, 46100 100429, 46451 100333, 46537 100189, 46563 100324, 46492 100589, 46239 100659, 46047 100588, 45956 100874, 45560 100944, 45274 101782, 45602 101736, 45688 101585, 45774 101826, 45571 101825, 45016 102298, 44728 102233, 44593 102414, 44398 103233, 44170 103691, 43893 103620, 43786 103749, 43552 104250, 43393 104889, 43475 105047, 43290 105457, 43260 105105, 42999 105123, 42516 105998, 42898 105981, 42778 106445, 42451 106217, 42462 106099, 42175 106075, 42048 106213, 41901 107029, 41647 107479, 41328 107496, 41263 107547, 40991 108053, 40938 108396, 41320 108589, 40870 108695, 40821 108864, 40461 108966, 40166 109442, 39916 109898, 39829 110305, 39431 110378, 39382 110798, 39549 110775, 39417 110972, 39457 111172, 39104 111284, 39169 111630, 38792 111757, 38588 111998, 38485 112383, 38346 112377, 38285 112664, 37909 112761, 37845 113179, 37734 113547, 37423 113581, 37397 113690, 37482 114047, 37105 114157, 37190 114514, 37029 114567, 37004 114799, 36791 114846, 36754 115023, 36402 115058, 36360 115100, 36322 115532, 35926 115607, 36030 116002, 35610 116075, 35729 116457, 35880 116433, 35978 116715, 35708 116634, 35719 116476, 35304 116542, 35299 116972, 35376 116958, 35363 117042, 35287 117063, 35230 117373, 34881 117419, 34856 117488, 34934 117850, 34546 117940, 34628 118322, 34232 118411, 34196 118820, 33802 118904, 33785 119312, 33929 119293, 33978 119588, 34239 119951, 33966 119909, 33504 120034, 33504 120164, 33090 120298, 33318 120877, 32753 120620, 32685 121180, 32362 121273, 32332 121391, 32369 121657, 31958 121737, 32041 122132, 31617 122202, 31633 122600, 31865 122572, 31839 122824, 31605 122889, 31559 123007, 31223 123099, 31217 123135, 30926 123216, 31072 123565, 31093 123746, 30912 123795, 30926 123985, 30558 124091, 30513 124480, 30154 124540, 30114 124986, 29712 125062, 29777 125465, 29366 125541, 29439 125946, 29018 126018, 29002 126835, 28643 126893, 28609 127338, 28206 127410, 28214 127831, 27819 127911, 27875 128275, 28093 128258, 28109 128478, 27946 128686, 27937 129141, 27518 129029, 27487 129175, 27139 129261, 27110 129681, 26752 129730, 26720 129765, 26763 130166, 26373 130253, 26413 130652, 26000 130726, 26028 131148, 25959 131496, 25646 131601, 25652 132019, 25406 132095, 25410 132217, 25290 132235, 25292 132505, 24925 132562, 24912 133001, 24503 133074, 24535 133496, 24127 133567, 24169 133977, 23759 134053, 23800 134466, 23409 134555, 23407 135337, 23055 135414, 23048 135448, 21448 135412, 21466 134830, 21477 133090, 21471 132505, 21483 127274, 21477 126689, 20543 126499, 20554 125724, 20740 125475, 20742 123147, 20552 123002, 20549 121848, 20739 121598, 20551 121452, 20549 120297, 20739 120048, 20551 119901, 20549 118747, 20739 118497, 20551 118351, 20549 117196, 20738 116947, 20742 113068, 20552 112923, 20549 111769, 20741 111519, 20551 111373, 20549 110219, 20739 109969, 20551 109823, 20549 108668, 20739 108419, 20551 108272, 20546 106531, 20263 106323, 20289 105938, 19975 105771, 19971 105529, 19902 105384, 19903 104888, 20107 104860, 20043 104711, 20055 104570, 20058 103937, 20048 103797, 20057 103019, 20053 101752, 19921 101506, 19914 101119, 20734 100873, 20732 80715, 20725 78390, 20733 77861, 20683 77391, 20673 74375, 20791 74122, 20766 73599, 20920 73346, 20888 72825, 20780 72572, 20826 72049, 20943 71796, 21012 71314, 21026 70499, 21067 69857, 21108 68560, 21174 68195, 21159 67397, 20693 67144, 20633 66757, 20627 65980, 20612 65460, 20611 64297, 20643 63656, 20651 62880, 20644 62747, 20643 61329, 20626 60556, 20633 60033, 20616 59647, 20612 59006, 20626 58617, 20635 57452, 20621 56933, 20637 56543, 20635 55902, 20623 55771, 20605 55130, 20613 54993, 20488 53580, 20498 53443, 20502 52802, 20483 52673, 20484 52032, 20495 51895, 20488 51253, 20464 51125, 20462 50484, 20438 50222, 20439 49193, 20980 48996, 20972 48796, 21054 48617, 22249 48387, 22365 48176, 22528 47991, 22803 46284, 23023 45522, 23179 45567, 23686 45577, 23908 45496) (27459 128386, 27528 128768, 27898 128695, 27847 128326)), ((46309 131406, 46100 132193, 45817 132066, 45755 131944, 45798 131545, 45735 131174, 46083 130719)), ((46265 129867, 46083 130664, 45720 130403, 45769 130003, 45853 129772, 46158 129536)), ((54828 117709, 54891 117423, 55016 117220)), ((56066 115552, 56016 115584, 55910 115981, 55820 116114, 55765 116020, 55985 115528, 56047 115473)), ((59963 111769, 59714 112290, 59647 112321, 59601 112256, 59642 112169, 59706 111568, 59949 111540)), ((62416 108104, 62244 108298, 62197 108054, 62278 107868, 62506 107656)), ((57993 100763, 57795 101073, 57770 100618, 58007 100553)), ((49407 98770, 49043 99607, 48336 99801, 48010 99151, 48287 98338, 48992 98144)), ((53524 90588, 53555 90831, 53318 90908, 53153 90576, 53273 90546)), ((56329 85838, 56370 86162, 55836 86037, 56054 85835)), ((222336 47944, 222395 48012, 222777 48153, 222736 48544, 222779 49314, 222736 49687, 222806 51559, 222701 52375, 222699 53594, 222734 53973, 222663 54767, 222651 55437, 222681 55925, 222655 56215, 222654 57483, 222627 58132, 222624 58654, 222568 59144, 222623 59817, 222677 60190, 222569 60413, 222370 60649, 222312 61066, 222756 61068, 223426 61317, 223377 61372, 222756 61414, 222007 61657, 221730 61613, 221633 61475, 221483 61525, 221260 61479, 221073 61600, 220593 61536, 220524 61179, 220568 61156, 220425 61014, 220480 61180, 220318 61410, 220141 61322, 219901 61479, 219414 61586, 219414 49194, 217175 49194, 217219 49066, 217149 48897, 217135 48627, 217222 48422, 217177 48323, 217350 48304, 218065 47960, 218125 47964, 218516 48221, 218898 48295, 219284 48120, 219664 47874, 220022 48066, 220456 48162, 220840 48174, 221181 48040, 221560 47983, 221979 47772)), ((86963 56778, 86303 57198, 86321 57587, 85769 57802, 85799 57221, 86214 56722, 86685 56693)), ((174552 46418, 188121 46412, 188256 46418, 191222 46411, 191357 46418, 194323 46409, 194458 46417, 197425 46407, 197560 46416, 199751 46409, 199886 46418, 201049 46413, 201302 46688, 201824 46740, 202094 46910, 202987 46913, 204017 46885, 204149 46822, 206044 46809, 206360 46660, 206474 46659, 206748 46390, 206861 46384, 207135 46236, 207249 46235, 207522 46465, 207636 46459, 207910 46560, 208023 46555, 208243 46722, 208436 48071, 208472 48065, 208520 48292, 209213 47870, 209605 48229, 209954 48401, 209935 48462, 210024 48635, 210019 48398, 210342 48113, 210415 48115, 210759 47945, 211151 48229, 211538 48432, 211577 48654, 211555 48434, 212313 47984, 212701 48021, 213120 48192, 213452 48383, 213454 48696, 213563 48746, 213515 48380, 213863 48181, 214304 47874, 214692 48624, 214728 48633, 215442 48174, 215865 47811, 216185 47831, 216603 48152, 216919 48328, 216984 48875, 216970 49194, 167425 49194, 168129 48436, 168490 46070, 168738 45582, 168888 45717, 170945 45706, 171214 45716, 174047 45702, 174299 45581))) \ No newline at end of file +MULTIPOLYGON (((99345 45800, 99640 46892, 99895 48430, 99533 48811, 99754 50319, 99482 50643, 99467 50724, 99719 50808, 99843 50755, 99865 50639, 99705 49954, 99827 49570, 100002 49260, 99911 48847, 99897 48429, 100280 48073, 100663 47826, 101099 47951, 101445 48274, 101834 48333, 102216 47947, 102603 47911, 102995 48278, 103387 48397, 103796 48170, 104154 47911, 104588 47964, 104933 48205, 105322 48264, 105706 48005, 106093 47968, 106484 48242, 106878 48388, 107643 47912, 108031 47909, 108422 48169, 108811 48307, 109581 47879, 109973 48193, 110364 48430, 110770 48202, 111132 47899, 111520 47915, 112300 48366, 112685 48089, 113071 47880, 113855 48400, 114256 48236, 114621 47912, 115058 47917, 115790 48310, 116202 48153, 116560 47912, 116983 48089, 117341 48362, 117739 48302, 118111 47966, 118542 47991, 118880 47387, 119256 46484, 119637 46480, 119663 46673, 120031 46476, 120222 47192, 127010 47210, 129336 47204, 130302 47216, 130502 47358, 130647 47521, 130909 48432, 130325 49083, 130401 49194, 104681 49194, 104681 66303, 104485 66253, 104426 67081, 104497 67968, 104434 68318, 104504 68792, 104426 68928, 104406 69103, 104448 69444, 104445 69999, 104681 70128, 104681 72342, 104459 72248, 104438 72651, 104526 73040, 104323 73868, 104359 73974, 104618 74190, 104681 74196, 104681 87981, 104494 88321, 104285 89144, 103946 89111, 103678 89708, 103449 90150, 103398 90172, 103313 90560, 103010 90493, 102825 91098, 102781 91116, 102720 91849, 102350 91412, 102210 91621, 101960 92117, 101741 92951, 101384 92965, 100900 93958, 100806 94311, 101018 94313, 100884 94504, 100741 94527, 100768 94381, 100388 94450, 100156 95315, 100225 95351, 100144 95357, 100147 95327, 99763 95409, 99643 95846, 99195 96743, 98881 96739, 98816 96833, 98559 97699, 98166 97777, 97947 98256, 97708 98709, 97606 99122, 97204 99188, 97085 99634, 96893 100072, 96952 100132, 96789 100511, 96838 100788, 96609 100706, 96614 100559, 96302 100615, 96042 101411, 96254 101435, 96114 101720, 95839 102043, 95736 102071, 95784 101950, 95452 101927, 95167 102507, 95081 102881, 95444 103057, 94988 103170, 94921 103335, 94572 103370, 94198 104191, 94316 104291, 94256 104523, 94052 104859, 93943 104904, 93975 104772, 93590 104840, 93469 105293, 93027 106147, 92786 106056, 92652 106298, 92543 106685, 92681 106678, 92624 106847, 92458 106942, 92389 107142, 92204 107196, 92125 107475, 91996 107289, 91596 108138, 91452 108563, 91123 108541, 91052 108627, 90813 109456, 90910 109489, 90746 109656, 90775 109525, 90399 109599, 90056 110462, 90314 110606, 89936 110770, 89853 110933, 89548 110901, 89469 111015, 89186 111896, 89172 111903, 89150 112679, 88728 112186, 88562 112458, 88357 113023, 88624 113454, 88095 113737, 87821 113564, 87326 114734, 87313 114739, 87236 115250, 86938 114880, 86750 115280, 86644 115685, 86237 115789, 85860 116688, 85772 116981, 86087 117014, 85876 117336, 85621 117407, 85563 117529, 85260 117468, 85171 117606, 84920 118267, 85317 118388, 85105 118977, 84717 118772, 84627 118925, 84352 118849, 84236 119070, 84133 119451, 84337 119432, 84111 119945, 84060 120251, 83449 120266, 83327 120483, 83037 121329, 82708 121331, 82639 121395, 82309 122264, 82434 122279, 82307 122622, 82241 122330, 81905 122408, 81704 122866, 81600 123264, 81953 123186, 81745 123519, 81460 123639, 81430 123715, 81100 123704, 81036 123786, 80887 124239, 80486 125072, 80212 125075, 80068 125253, 79996 125626, 80230 125365, 80553 125184, 80879 125062, 81135 125121, 81609 124906, 81593 125429, 81437 125368, 81233 125554, 81115 125740, 81191 125983, 81567 126136, 81545 126011, 81891 125207, 82592 124977, 82816 125275, 82611 125719, 82799 126055, 82483 126916, 82664 127255, 82480 127692, 82685 128025, 82519 128457, 82711 128793, 82518 129233, 82736 129562, 82580 129991, 82763 130329, 82583 130766, 82787 131098, 82628 131528, 82813 131866, 82453 132739, 82675 133067, 82479 133507, 82663 133845, 82517 134272, 82723 134604, 82554 135037, 82764 135369, 82758 135415, 83117 136047, 82776 136915, 82461 137772, 82805 138458, 82472 139236, 82451 139480, 82728 140030, 82517 140763, 82185 140567, 82130 140968, 82152 141058, 82206 140971, 82566 140854, 82968 141507, 82253 141654, 82135 141566, 82085 141756, 82148 141913, 82260 141772, 82967 141522, 82616 142376, 82279 142410, 82156 142331, 82103 142526, 82159 142713, 82283 142546, 82616 142396, 83019 143044, 82309 143180, 82178 143087, 82145 143290, 82193 143468, 82612 143895, 82622 144054, 83001 144607, 82515 145824, 82340 145951, 82553 145900, 82751 146226, 82581 146652, 82425 146702, 82582 146665, 82783 146993, 82609 147422, 82273 147441, 82141 147370, 82095 147568, 82145 147763, 82276 147594, 82610 147431, 82807 147762, 82632 148186, 82297 148216, 82161 148124, 82128 148334, 82178 148514, 82433 148639, 82494 149400, 82862 150072, 82521 150880, 82448 150960, 82528 150991, 82864 151566, 82733 151657, 82476 152253, 82202 151921, 82100 152606, 82155 152767, 82274 152635, 82605 152477, 82983 153130, 82283 153254, 82160 153190, 82120 153376, 82165 153554, 82279 153393, 82986 153145, 82661 153997, 82315 154041, 82194 153951, 82159 154140, 82202 154317, 82441 154451, 82200 154708, 82155 154916, 82214 155096, 82498 155228, 82702 155543, 82696 155587, 83041 156225, 82713 156988, 82038 157237, 82010 157260, 81299 157423, 81227 157409, 80553 157625, 80509 157656, 79948 157437, 79934 157458, 78822 157751, 78600 157441, 78691 157223, 78718 156971, 78622 156661, 78841 156505, 78811 156297, 78597 155892, 78769 155515, 78778 155384, 78344 155517, 78344 155625, 78491 155922, 78283 156171, 78191 156391, 78187 156780, 77836 157609, 77309 157380, 76917 157506, 76183 157699, 76018 157374, 76028 157309, 76000 157372, 75286 157565, 74872 156913, 75041 156505, 74820 156190, 74756 156170, 74667 155807, 74793 155450, 74795 155307, 74477 154696, 74674 154325, 74777 154226, 74834 154033, 74793 153834, 74812 153633, 74664 153481, 74476 153383, 74507 153524, 74469 153671, 74511 153911, 74436 154101, 74472 154309, 74373 154724, 74405 155012, 74589 155441, 74515 155688, 74563 155835, 74326 156288, 74238 156699, 74555 156755, 74766 156943, 75236 157573, 74520 157770, 74284 157454, 73165 157755, 72939 157443, 72971 157348, 72919 157439, 72554 157539, 72507 157460, 72513 157534, 71808 157737, 71687 157389, 70900 157607, 70751 157241, 70693 157205, 70018 157408, 69984 157456, 69370 157241, 69251 157677, 68886 157760, 68644 157457, 67888 157662, 67637 157346, 67275 157426, 67241 157393, 67256 157445, 66147 157742, 66036 157396, 65608 157514, 65751 157863, 65619 158286, 65886 158601, 65651 159053, 65796 159402, 65556 160266, 65831 160943, 65529 161792, 65597 161798, 65843 162102, 65737 162505, 65858 162873, 65692 163221, 65876 163256, 65720 163421, 65885 163640, 65774 164075, 65910 164410, 65658 164866, 65544 165258, 65473 165304, 65561 165285, 65819 165598, 65578 166046, 65531 166063, 65577 166056, 65703 166405, 65593 166815, 65559 166832, 65847 167140, 65606 167593, 65738 167946, 65614 168367, 65876 168683, 65637 169136, 65772 169487, 65557 170316, 65533 170292, 65781 171067, 65583 171871, 65818 172575, 65625 173403, 65880 173721, 65782 174148, 65898 174492, 65656 174945, 65903 175266, 65820 175675, 65558 176151, 65668 176493, 65546 176914, 65843 177220, 65592 177680, 65716 178031, 65617 178436, 65570 178457, 65620 178454, 65882 178761, 65632 179194, 65533 179243, 65626 179237, 65745 179574, 65649 179978, 65615 179996, 65653 179994, 65925 180299, 65659 180761, 65776 181115, 65577 181932, 65808 182657, 65603 183467, 65545 183504, 65605 183508, 65838 184200, 65639 185035, 65915 185341, 65827 185752, 65480 186343, 65632 186582, 65501 186891, 65545 186992, 66202 187201, 65560 187763, 65701 188114, 65576 188534, 66234 188743, 65566 189323, 65614 189322, 65730 189656, 65620 190069, 66264 190285, 65652 190835, 65758 191199, 65666 191602, 65608 191627, 65530 191968, 65565 192027, 65534 192103, 65621 192400, 65685 192385, 65787 192742, 65594 193569, 65824 194283, 66195 194191, 66470 194493, 67598 194194, 67871 194496, 68992 194200, 69102 194547, 70603 194146, 70717 194491, 71479 194286, 71490 194293, 72225 194092, 72736 193165, 72767 193153, 72621 192486, 73196 192721, 73327 192226, 73576 191776, 73682 191740, 73842 191370, 74184 191229, 74218 191123, 74147 190836, 74194 190661, 74369 190553, 74419 190378, 74790 190279, 75282 189363, 75397 188951, 75761 188857, 75873 188403, 76160 187895, 76325 187333, 76389 187509, 76729 187442, 76911 186779, 76572 186683, 76823 186204, 77093 186336, 77080 186545, 77348 186477, 77812 185569, 77935 185151, 78187 185078, 78087 184767, 78356 184872, 78431 184624, 78661 184180, 78730 184154, 78821 183852, 78590 183804, 78689 183468, 78936 183555, 79069 183375, 79373 183238, 79520 182788, 79650 182739, 79645 182111, 80076 182291, 80335 181780, 80465 181356, 80622 181310, 80708 181083, 80909 181009, 81245 179994, 81607 179878, 81695 179369, 81893 178777, 82087 178846, 82185 178562, 82544 178484, 82695 178028, 82910 177587, 83278 177484, 83494 177034, 83785 176194, 84063 176102, 83996 175759, 84215 175940, 84568 175193, 84711 174763, 84994 174530, 85148 174474, 85437 173794, 85802 173699, 86008 173243, 86315 172396, 86681 172288, 87080 171399, 87230 170971, 87600 170873, 87762 170437, 88141 169559, 88510 169460, 88809 168650, 88644 168644, 88738 168425, 88866 168506, 89018 168160, 89386 168058, 89504 167778, 89434 167652, 89734 167183, 90101 167096, 90305 166561, 90238 166135, 90861 165988, 91458 164535, 91312 164423, 91392 164176, 91601 164140, 91696 164319, 91882 164273, 91989 164003, 91899 163875, 91888 163551, 92118 163678, 92232 163401, 92607 163297, 93132 161992, 93502 161888, 94024 160582, 94396 160480, 94749 159613, 95102 159509, 95655 158201, 95921 158121, 95957 157983, 96052 158024, 96359 157230, 96733 157124, 97204 156023, 96890 155669, 97362 155556, 97431 155387, 97801 155285, 98183 154406, 98552 154303, 99041 153014, 99407 152906, 99573 152468, 99955 151598, 100324 151489, 100642 150633, 101006 150534, 101391 149663, 101355 149653, 101531 149174, 101630 149192, 101928 149112, 102082 148679, 102482 147800, 102850 147701, 103158 146838, 103528 146736, 103645 146479, 103526 146201, 103886 145859, 104011 145391, 104094 145381, 104235 144994, 104605 144886, 105015 144003, 105131 143658, 105068 143597, 105135 143534, 105066 143210, 105331 142639, 105595 143065, 105437 143330, 105195 143562, 105533 143476, 105682 143043, 106055 142939, 106418 142161, 106377 142075, 106509 141472, 106681 141424, 106788 141575, 106990 141522, 107138 141092, 107557 140201, 107703 139785, 108067 139684, 108363 138833, 108624 138746, 108604 138547, 108801 138492, 108870 138291, 109320 137398, 109669 137308, 109947 136450, 110315 136349, 110754 135449, 110890 135030, 111240 134928, 111397 134497, 111616 134054, 111811 133996, 111889 133726, 112140 133638, 112331 133108, 112303 133062, 112349 133049, 112476 132653, 112848 132550, 113294 131655, 113426 131231, 113800 131128, 113932 130701, 114382 129802, 114512 129385, 114877 129295, 115015 128858, 115241 128410, 115371 128374, 117026 129315, 120530 130977, 124387 132501, 128548 133870, 132944 135062, 137562 136077, 142293 136898, 147340 137558, 147017 138014, 146860 138296, 146399 138935, 146209 139365, 145835 139873, 145634 140056, 145550 140254, 145315 140588, 145226 140647, 144845 141272, 144597 141521, 144407 141978, 144121 142347, 143642 143102, 143386 143392, 142990 144083, 142651 144537, 142428 144986, 142059 145352, 141994 145492, 141721 145955, 141311 146521, 141075 146907, 140678 147411, 140490 147843, 140135 148328, 139911 148545, 139761 148914, 139515 149171, 139144 149762, 139048 150044, 138623 150624, 138349 150927, 138250 151170, 137886 151689, 137650 152136, 137393 152379, 137061 153047, 136777 153304, 136609 153660, 136240 153932, 135775 154562, 135501 154829, 135137 155319, 134997 155429, 134778 155726, 134378 156427, 133836 157068, 133657 157533, 133391 157773, 133165 158121, 132928 158563, 132646 158891, 132022 159869, 131754 160196, 131521 160639, 131028 161226, 130851 161583, 130351 162280, 130135 162698, 129687 163327, 129220 164012, 128902 164587, 128519 165061, 128177 165672, 127820 166088, 127596 166517, 127367 166811, 127179 167163, 126719 167757, 126403 168372, 126040 168766, 125987 168874, 125644 169463, 125337 169779, 125055 170292, 124774 170757, 124682 170931, 124187 171560, 123859 172171, 123488 172539, 123205 173126, 122847 173669, 122552 174080, 122246 174551, 121896 175064, 121654 175352, 121245 176061, 120966 176353, 120722 176718, 120526 177123, 120106 177823, 119830 178086, 119298 178849, 119016 179313, 118723 179871, 118439 180145, 118189 180487, 117993 180894, 117733 181289, 117481 181536, 116854 182505, 116636 182878, 116374 183188, 116151 183588, 115853 184057, 115588 184517, 115290 184957, 115012 185295, 114915 185477, 114580 186012, 114182 186802, 113908 187085, 113509 187800, 113229 188112, 112787 188840, 112515 189119, 112184 189714, 111859 190184, 111625 190643, 111163 191217, 111025 191583, 110743 191957, 110373 192537, 110032 192950, 109726 193489, 109084 194440, 108694 194935, 108850 195238, 109218 195146, 109428 195465, 110149 195306, 110529 195194, 110745 195487, 111481 195312, 111862 195193, 112074 195501, 112807 195337, 113201 195189, 113405 195509, 114112 195371, 114466 195233, 114667 194866, 115018 194821, 115639 195010, 116361 194787, 116547 195136, 116970 195062, 117650 194877, 117704 194835, 118410 194642, 118461 194642, 119127 194520, 119481 194861, 119751 194647, 119954 194228, 120650 194038, 121050 194650, 121085 194674, 121408 195328, 121356 195424, 121124 196188, 121233 196325, 121164 196169, 121505 195364, 121527 195295, 121884 194489, 122577 194279, 122642 194299, 123322 194086, 123666 194814, 123722 194710, 124078 194613, 124114 194635, 124461 194491, 125020 194725, 124593 195229, 124697 195603, 125075 195480, 125074 194722, 126165 194440, 126390 194752, 126496 195248, 126693 195429, 126677 195618, 126805 195495, 126762 195021, 126465 194763, 127116 194599, 127324 194481, 127405 194254, 127602 194199, 127675 193999, 127793 193964, 127896 193673, 128166 193552, 128403 193026, 128776 192924, 128981 192475, 129276 191623, 129643 191528, 130063 190633, 130212 190210, 130575 190114, 130869 189248, 131242 189143, 131351 188809, 131289 188741, 131301 188545, 131434 188605, 131809 187835, 132160 187793, 132459 186874, 132549 186846, 132580 186231, 132970 186475, 133266 185874, 133396 185452, 133772 185348, 133867 185042, 133812 184949, 133850 184801, 133952 184827, 134345 184038, 134387 184017, 134280 183270, 134309 183134, 134013 182568, 134468 182109, 134446 182062, 134579 181638, 134425 181292, 134650 180843, 134175 180218, 134633 179297, 134144 178656, 134589 177753, 134357 177434, 134478 177065, 134457 177019, 134594 176541, 134362 176270, 134577 175877, 134414 175480, 134678 174633, 134543 174282, 134551 174219, 134074 174023, 134527 173562, 134631 173107, 134505 172693, 134035 172483, 134493 172027, 134596 171555, 134449 171206, 134682 170755, 134187 170128, 134672 169197, 134172 168569, 134640 167665, 134141 167027, 134569 166177, 134564 166102, 134351 165806, 134468 165449, 134444 165394, 134563 164934, 134362 164659, 134867 163332, 135646 163086, 135707 163109, 135778 163310, 135718 163493, 135858 163702, 136156 163548, 136383 163651, 136396 163308, 137035 163054, 137190 163091, 137266 163266, 137467 163402, 137643 163798, 137828 164079, 137672 164909, 138121 164879, 138130 164514, 137984 164423, 138085 164266, 138162 163987, 138262 163918, 138350 163548, 138117 163475, 137942 163271, 138390 162955, 138609 162989, 138712 162949, 138722 163058, 138859 163281, 139115 163228, 139527 163223, 139950 163026, 140269 163023, 140264 163053, 140277 163022, 140733 163024, 141114 162848, 141589 162660, 141565 162512, 141693 162413, 142172 161725, 142240 161686, 142238 161626, 142276 161616, 142650 161074, 142786 160969, 143119 160373, 143649 159728, 143688 159715, 143999 158920, 144034 158888, 144644 157689, 144747 157285, 145292 156911, 145368 156880, 145451 156620, 145683 156111, 145758 155884, 145973 155762, 146056 155650, 146134 155212, 146344 154766, 146736 154271, 147174 153872, 147391 153316, 147528 152892, 147758 152580, 148061 152317, 148203 151882, 148503 151759, 148952 151037, 149189 150370, 149415 150048, 149616 149930, 149685 149587, 149864 149120, 150203 149018, 150570 148569, 150653 148508, 150751 148258, 151041 147664, 151147 147523, 151239 147222, 151382 146938, 151520 146900, 151598 146737, 152092 146340, 152213 145792, 152277 145711, 152425 145305, 152677 145122, 152803 144856, 153029 144581, 153303 144453, 153504 143888, 153888 143618, 154069 143597, 154054 143275, 154158 142934, 154405 142478, 154714 142006, 154837 141897, 154994 141479, 155364 141452, 155548 141002, 155749 140685, 155985 140036, 156219 139845, 156321 139627, 156471 139499, 156725 139380, 156869 139089, 156956 138794, 157276 138354, 157269 138228, 158822 138256, 158803 138559, 158509 138773, 158437 139047, 158278 139309, 158133 139373, 158081 139532, 157956 139640, 157922 139800, 157784 139854, 157812 139993, 157672 140101, 157645 140263, 157504 140316, 157522 140461, 157373 140582, 157247 140835, 157171 140869, 157155 140949, 156957 141143, 156869 141414, 156786 141517, 156502 141945, 156178 142559, 156007 142646, 155956 142828, 155832 142965, 155698 143287, 155364 143645, 155286 143787, 154975 144260, 154836 144414, 154642 144822, 154469 145036, 154411 145190, 154227 145357, 153632 146289, 153443 146448, 153380 146635, 153269 146771, 153126 147093, 152870 147551, 152540 148028, 152295 148235, 152229 148502, 152150 148593, 152019 148893, 151724 149156, 151545 149427, 151238 149657, 151139 149963, 151216 150269, 151188 150725, 151286 151087, 151798 151949, 151977 152406, 152177 152684, 151938 152577, 151804 152789, 151386 152843, 151134 153113, 150919 153512, 150751 153719, 150559 153866, 150334 154215, 150073 154721, 149949 154834, 149909 154952, 149504 155451, 149250 155908, 149015 156359, 148745 156557, 148636 156891, 148230 157457, 148004 157667, 147776 157703, 147659 157507, 147610 157133, 147496 156922, 147217 156646, 146882 156598, 146558 156703, 146394 157151, 146174 157335, 146098 157547, 145961 157677, 145503 158443, 145191 158768, 145094 158985, 144976 159057, 144861 159437, 144746 159618, 144550 159779, 144466 159933, 144261 160123, 144004 160497, 143866 160852, 143789 160851, 143846 160878, 143580 161088, 143494 161362, 143202 161830, 143146 161894, 142880 162327, 142645 162568, 142502 162797, 142739 162854, 142774 163111, 142876 163400, 142749 163505, 142888 163588, 143012 163821, 143247 164091, 143247 164253, 143372 164280, 143349 164116, 143672 163640, 143547 163286, 144051 163134, 144338 163366, 144653 163371, 144674 163450, 144958 163448, 144923 163849, 145284 163879, 145409 163551, 145462 163220, 145589 163461, 145909 163323, 145973 163342, 146541 163241, 146366 163676, 146705 163960, 147074 163864, 147176 163455, 147527 163256, 147600 163276, 147971 163180, 148189 163177, 148142 163577, 148177 163661, 148667 163821, 148655 163942, 148315 164708, 148425 164786, 148359 164681, 148889 163898, 148954 163354, 149282 163201, 149602 163177, 149640 163396, 149971 163469, 150107 163789, 150241 163916, 150565 164014, 150688 163655, 150611 163457, 150601 163290, 151114 163083, 151224 163121, 151312 163338, 151600 163388, 151825 163343, 151825 163551, 151744 163753, 151915 164093, 151905 164382, 152242 164377, 152234 164006, 152326 163941, 152501 163545, 152761 163246, 152947 163246, 153209 163339, 153973 163107, 154022 163129, 154087 163303, 153625 163307, 153670 163762, 154075 163890, 154055 164003, 154145 163930, 154331 163431, 154495 163238, 154620 163271, 155363 163094, 155512 163108, 155453 163267, 155206 163579, 155380 163919, 155474 164280, 155476 164669, 155431 164754, 155497 165049, 155388 165476, 155862 165664, 155779 164972, 155822 164669, 155801 164385, 155483 164277, 155819 164081, 156041 163483, 156057 163346, 156270 163138, 156810 162905, 157036 162950, 157345 162774, 157308 162616, 156948 161938, 156933 161798, 156734 161570, 156689 161234, 156542 160893, 156609 160765, 156534 160873, 156403 160578, 156205 160042, 156378 159924, 156484 160128, 156525 160366, 156799 160404, 157141 161038, 157137 161111, 157440 161467, 157756 162105, 158218 162805, 158271 162806, 158743 162985, 158919 163222, 159178 163134, 159330 162836, 159400 162509, 159484 162406, 159393 162364, 159315 162064, 159452 161640, 159317 161288, 159376 160977, 159489 160854, 159372 160796, 159306 160516, 159391 160106, 159280 159748, 159358 159461, 159488 159305, 159352 159223, 159283 158972, 159411 158424, 159602 157723, 159342 157017, 159577 156179, 159298 155498, 159503 154623, 159426 154422, 159284 153932, 159493 153101, 159403 152872, 159272 152385, 159491 151551, 159368 151196, 159421 150983, 159624 150739, 159415 150599, 159360 150422, 159443 150013, 159344 149652, 159395 149440, 159598 149195, 159387 149066, 159329 148881, 159405 148473, 159316 148109, 159368 147889, 159631 147890, 159542 147661, 159357 147547, 159285 147342, 159390 146926, 159495 146399, 159583 146099, 159421 145638, 159510 145515, 159782 145529, 159710 145288, 159507 145155, 159459 144969, 159562 144553, 159398 144096, 159489 143988, 159782 143999, 159700 143741, 159482 143611, 159413 143431, 159499 143020, 159370 142551, 159464 142448, 159762 142458, 159678 142196, 159457 142064, 159387 141887, 159467 141479, 159344 141007, 159439 140901, 159718 140905, 159639 140656, 159431 140525, 159360 140344, 159439 139936, 159406 139820, 159506 139707, 159797 139727, 159713 139472, 159761 139399, 159631 138962, 159700 138701, 159487 138579, 159183 138262, 161310 138300, 165974 138218, 170748 137963, 175585 137525, 180428 136898, 181209 136764, 181125 137713, 181203 138621, 181160 138921, 181173 139792, 181227 140165, 181128 140875, 181127 141502, 181372 141424, 181550 141273, 181579 140839, 181439 140495, 181455 140273, 181386 139854, 181458 139715, 181195 139399, 181407 138953, 181439 138728, 181314 138274, 181332 138198, 181214 137843, 181386 137408, 181415 137012, 181279 136751, 185219 136077, 186357 135831, 186193 136213, 186214 136472, 186370 137063, 186097 137658, 186215 138023, 186369 138599, 186248 138789, 186139 139229, 186210 139575, 185932 139933, 185942 140917, 186255 141114, 185947 141479, 185977 142434, 186325 142645, 185876 142945, 185797 143177, 185968 143518, 186406 143598, 186679 143711, 186878 143719, 187223 143562, 187209 143252, 187255 143165, 187167 142862, 186746 142528, 186854 142168, 187134 141800, 187160 141685, 187129 141502, 186830 140955, 186793 140767, 186845 140625, 187119 140249, 187144 140136, 187111 139985, 186797 139413, 186799 138944, 186750 138651, 186761 138172, 186863 137846, 186800 137412, 186710 137112, 186717 136607, 186848 136299, 186660 135765, 189894 135066, 194392 133870, 198657 132499, 201412 131440, 201451 131614, 201484 131541, 201469 131417, 202618 130977, 205127 129826, 205173 130479, 205126 131289, 205178 131708, 205158 131280, 205206 130492, 205157 129812, 206243 129315, 209488 127541, 212324 125679, 214742 123750, 216717 121794, 217547 120809, 218272 119823, 218893 118840, 219414 117863, 219414 83293, 219920 83818, 220188 83799, 220136 83469, 220008 83405, 220138 83209, 220266 83335, 220548 83294, 220522 82885, 220601 82855, 220568 82536, 220674 82339, 220674 81843, 220766 81259, 220885 80785, 220977 80621, 220969 80532, 221533 80172, 221578 79395, 221753 78663, 222157 78320, 222262 78074, 222494 77800, 222527 77676, 222756 77313, 222839 77618, 222890 78396, 223018 79157, 223040 79544, 223166 79577, 222757 79792, 222589 79812, 222631 79973, 222756 79963, 224897 80276, 224891 82016, 224702 82266, 224697 91951, 224889 92293, 224374 92482, 224375 92680, 224313 92870, 224313 93068, 224373 93258, 224374 93456, 224300 93645, 224274 94231, 224355 94421, 224374 95006, 224286 95196, 224259 95782, 224321 95971, 224322 96169, 224380 96359, 224381 96557, 224318 96746, 224318 96944, 224248 97134, 224281 97720, 224362 97909, 224331 98495, 224245 98685, 224269 99270, 224359 99460, 224341 100046, 224235 100235, 224246 100821, 224276 101011, 224305 101596, 224354 101786, 224350 102371, 224279 102561, 224264 103147, 224343 103337, 224387 103922, 224308 104112, 224290 104697, 224311 104887, 224330 105473, 224348 105662, 224346 106248, 224270 106438, 224259 107023, 224328 107213, 224329 107411, 224387 107600, 224388 107798, 224319 107988, 224278 108574, 224323 108764, 224336 109349, 224353 109539, 224362 110125, 224284 110314, 224294 110900, 224337 111089, 224302 111477, 224317 112063, 224384 112252, 224385 112450, 224328 112640, 224329 112838, 224263 113028, 224279 113613, 224363 113803, 224362 114389, 224267 114578, 224268 114776, 224360 114966, 224361 115164, 224305 115353, 224268 115939, 224347 116129, 224381 116714, 224317 116904, 224318 117102, 224257 117292, 224291 117877, 224374 118067, 224350 118653, 224255 118842, 224269 119428, 224356 119618, 224344 120203, 224254 120393, 224263 120978, 224349 121168, 224348 121754, 224263 121944, 224226 122529, 224277 122719, 224286 123304, 224343 123494, 224352 124080, 224283 124269, 224264 124855, 224330 125045, 224331 125243, 224387 125432, 224388 125630, 224314 125820, 224284 126405, 224317 126595, 224337 127181, 224355 127370, 224352 127956, 224290 128146, 224259 128731, 224315 128921, 224316 129119, 224389 129309, 224389 129507, 224325 129696, 224277 130084, 224327 130543, 224365 131832, 224307 132022, 224279 132608, 224330 132798, 224310 133771, 224386 133961, 224344 134546, 224263 134736, 224273 135321, 224357 135511, 224351 136097, 224162 136285, 224170 136484, 223690 136646, 223677 137033, 222752 137306, 222753 137695, 222378 137797, 222381 138123, 222459 138167, 222501 138666, 222383 138698, 222007 138337, 222005 138676, 221632 138779, 221619 139543, 221259 139656, 221260 139861, 221416 140004, 221418 140330, 221042 140105, 220883 140149, 220882 140532, 220510 140636, 220517 141024, 220144 141127, 220128 141898, 219763 141991, 219750 142390, 219379 142496, 219375 142886, 218996 142986, 219000 143371, 218632 143478, 218638 143862, 218265 143966, 218253 144350, 218162 144384, 218206 144710, 217879 144846, 217882 145231, 217506 145334, 217517 145720, 217146 145825, 217133 146210, 216766 146315, 216764 147092, 216390 147188, 216399 147578, 216029 147682, 216022 147975, 216060 148062, 215820 148315, 215638 148403, 215631 148565, 215251 148663, 215280 149433, 214910 149523, 214902 149844, 215267 150022, 214894 150125, 214829 149949, 214525 150014, 214508 150420, 214353 150468, 214581 150847, 214143 150671, 214146 150905, 213775 151011, 213789 151393, 213412 151492, 213388 152277, 213012 152385, 213027 152604, 213214 152718, 213161 153366, 212934 153182, 212999 153112, 212944 152792, 212652 152863, 212675 153249, 212297 153349, 212287 153744, 211913 153846, 211896 154238, 211522 154341, 211536 154720, 211182 154826, 211189 155210, 210817 155310, 210813 155433, 210943 155667, 210953 155830, 210793 155880, 210773 156091, 210402 156196, 210382 156588, 210011 156692, 210013 157468, 209642 157565, 209664 157939, 209709 157991, 209649 157959, 209286 158054, 209268 158448, 208888 158547, 208866 158939, 208497 159050, 208521 159429, 208146 159529, 208171 159910, 207794 160011, 207767 160621, 207930 160757, 207954 161109, 207614 160843, 207378 160904, 207404 161226, 207571 161323, 207411 161327, 207383 161294, 207023 161382, 207057 161766, 206682 161867, 206657 162260, 206290 162369, 206260 162760, 205886 162863, 205915 163243, 205541 163347, 205574 163728, 205537 164111, 205169 164220, 205154 164539, 205414 164426, 205703 164468, 205732 164833, 205158 164751, 205033 164651, 204770 164720, 204795 165095, 204512 165182, 204584 165308, 204436 165272, 204453 165576, 204081 165678, 204059 166078, 203685 166180, 203655 166580, 203679 166810, 203940 167012, 203703 167077, 203574 166989, 203313 167061, 203344 167431, 203043 167523, 203152 167686, 202956 167869, 202950 167936, 202576 168038, 202520 168442, 202565 168803, 202187 168719, 202204 168913, 201830 169016, 201868 169392, 201495 169494, 201429 170288, 201058 170393, 201021 170788, 200712 170876, 200875 171089, 200644 170958, 200612 171289, 200239 171393, 200319 172145, 199946 172245, 199905 172642, 199531 172744, 199512 173004, 199646 173106, 199728 173470, 199291 173203, 199122 173247, 199164 173623, 198825 173749, 198984 174062, 198985 174449, 198847 174544, 198443 174414, 198421 174601, 198047 174704, 198002 175107, 198049 175476, 197670 175586, 197722 175954, 197352 176052, 197311 176456, 196940 176558, 196894 176957, 196518 177059, 196567 177435, 196190 177535, 196243 177915, 196199 178309, 195823 178409, 195783 178812, 195408 178914, 195457 179288, 195082 179389, 195137 179765, 194761 179866, 194720 180268, 194347 180370, 194297 180774, 194349 181142, 194257 181173, 194297 181447, 194021 181522, 194031 181618, 193663 181718, 193611 182120, 193234 182219, 193190 182624, 192819 182729, 192867 183096, 192497 183200, 192557 183573, 192185 183676, 192083 184478, 191710 184582, 191658 184983, 191286 185087, 191230 185491, 191288 185858, 190918 185953, 190974 186296, 191059 186314, 191116 186460, 190971 186419, 190903 186356, 190606 186433, 190549 186836, 190258 186921, 190299 187297, 190530 187593, 189800 187434, 189749 187448, 189809 187815, 189613 187873, 189642 188044, 189874 188640, 189471 188525, 189259 188357, 189128 188392, 189072 188794, 188692 188893, 188648 189257, 188785 189263, 188860 189435, 188657 189394, 188704 189670, 188332 189774, 188393 190139, 188020 190242, 187964 190646, 187596 190749, 187527 191158, 187597 191521, 187229 191623, 187293 191992, 186924 192092, 186862 192499, 186486 192601, 186424 193005, 186055 193112, 186121 193477, 185748 193580, 185821 193947, 185450 194051, 185386 194454, 185009 194553, 184943 194968, 185021 195330, 184650 195435, 184721 195797, 184537 195854, 184682 196226, 184321 196119, 184287 196308, 183909 196405, 183869 196697, 184047 196765, 184088 196958, 183889 197012, 183921 197182, 183546 197289, 183623 197647, 183256 197743, 183185 198155, 182813 198251, 182671 199072, 182305 199172, 182228 199583, 181845 199678, 181934 200052, 181562 200157, 181644 200520, 181260 200617, 181122 201435, 180750 201544, 180789 201697, 181025 201857, 181067 202038, 180880 202089, 180652 201958, 180460 202008, 180544 202370, 180176 202475, 180095 202878, 179725 202985, 179633 203401, 179730 203753, 178989 203963, 179076 204324, 178998 204731, 178755 204804, 178703 204915, 178611 204941, 178547 205244, 178380 205295, 178682 205634, 178217 205517, 178263 205710, 177883 205810, 177982 206175, 177598 206272, 177445 207094, 177074 207203, 177165 207560, 176996 207612, 177046 207804, 176849 207858, 176889 208025, 176520 208123, 176430 208532, 176068 208625, 175976 209051, 175428 209973, 175072 210060, 174998 210370, 175169 210440, 175123 210657, 174925 210711, 174880 210901, 174505 211003, 174235 211454, 173964 211932, 173784 212750, 173418 212850, 173344 213184, 173402 213250, 173419 213632, 173152 214093, 173044 213735, 173270 213286, 172945 213370, 172852 213788, 172323 214698, 155836 214698, 155808 214583, 155857 214296, 155679 214476, 155661 214698, 154486 214698, 154447 214569, 154466 214349, 154309 214698, 150462 214698, 150557 214639, 150571 214234, 150345 214296, 150390 214518, 150365 214698, 148599 214698, 148466 214404, 147917 214662, 147923 214698, 146434 214698, 146753 213964, 146735 213889, 146374 213526, 146641 213980, 146244 214698, 145085 214698, 145088 214639, 144986 214698, 127633 214698, 127633 200302, 53651 200302, 53784 199534, 54142 199451, 54217 199016, 54592 198913, 54515 198547, 54895 198447, 54810 198079, 55181 197977, 55254 197572, 55406 197525, 55447 197288, 55676 197166, 55704 197056, 55627 196700, 55995 196588, 55928 196239, 56281 196134, 56360 195726, 56721 195634, 56806 195213, 57169 195121, 57093 194741, 57132 194726, 57075 194683, 57057 194720, 56709 194825, 55928 194677, 55640 193971, 55196 193707, 55164 194005, 55069 194128, 55229 194351, 55739 194638, 55157 194768, 55124 194873, 54408 195069, 54470 194680, 54416 194640, 54096 194727, 53981 194426, 54036 194311, 53971 194042, 53732 193720, 53734 193331, 53823 193001, 53809 192535, 53737 192285, 53790 191446, 53685 190724, 53733 190342, 53849 189981, 53706 189523, 53742 189453, 53658 189177, 53592 189107, 53643 189014, 53700 188689, 53806 188417, 53783 187794, 53594 188203, 53584 188721, 53521 189084, 53600 189779, 53565 190276, 53500 190585, 53565 191051, 53675 191409, 53499 192105, 53528 192612, 53654 192966, 53637 193327, 53485 193787, 53346 194046, 53566 194357, 53564 194440, 53021 194647, 52283 194890, 52309 193865, 52247 193430, 52104 193390, 52219 193142, 52181 192594, 52204 192030, 52106 191839, 52182 191518, 52155 190656, 52007 190338, 52077 189574, 52041 188755, 51827 188040, 51893 187815, 51945 187232, 51866 186478, 51914 186278, 51851 186085, 51960 185677, 51711 185181, 51635 184991, 51545 184955, 51124 185544, 51028 185921, 51033 186424, 51342 186623, 51029 186976, 51011 187428, 51026 188012, 51409 188155, 51041 188494, 51040 189264, 51064 189412, 50959 190121, 51076 190571, 51032 190968, 51097 191449, 51044 191735, 51054 192520, 51116 192887, 51183 193033, 51130 193269, 51293 193613, 50941 193930, 50907 194106, 51296 194388, 51436 194716, 50336 195029, 49906 194767, 49915 194635, 49759 194640, 49209 194959, 49252 195038, 49164 195062, 49044 194946, 48408 194737, 48444 194781, 48385 195162, 48035 195258, 47713 194981, 47679 194991, 47701 195373, 47760 195446, 47667 195443, 47317 195245, 47191 195124, 46967 195180, 46855 195082, 46612 195148, 46418 194948, 45896 195087, 45823 195046, 45509 195117, 45110 194919, 44344 195124, 43916 194859, 43177 195009, 42985 194896, 42879 194983, 42444 195101, 42280 194901, 41351 195168, 41250 195087, 40961 195437, 40494 195022, 40259 195000, 39805 194781, 39909 195007, 39500 195117, 39322 194955, 38729 195106, 38515 194975, 38341 195063, 38351 195215, 38222 195257, 38246 195495, 37995 195433, 37994 195679, 37649 195800, 37613 196196, 37240 196298, 37205 196691, 36989 196758, 37213 197050, 36859 197019, 36873 197175, 36501 197279, 36718 197608, 36867 197940, 36526 197815, 36489 198038, 36134 198134, 36096 198546, 35791 198637, 35989 198829, 35734 198708, 35755 199026, 35390 199134, 35442 199555, 35409 199516, 35044 199613, 35028 199922, 35249 200071, 35013 200138, 34981 200302, 20742 200302, 20744 197971, 20553 197628, 20546 197240, 20759 197051, 20949 196801, 20930 196420, 20932 195645, 20744 195302, 20737 195112, 20857 194911, 21062 194748, 22089 194491, 22169 194439, 22687 194173, 23062 194242, 23232 194116, 23298 193921, 23060 193221, 22685 193510, 22590 193316, 22602 192927, 22595 192144, 22536 190992, 22569 190593, 22558 189427, 22518 189054, 22529 188263, 22574 187778, 22532 186712, 22494 186341, 22491 185568, 22510 184772, 22486 184403, 22466 183309, 22549 182850, 22596 182074, 22575 181298, 22570 179360, 22545 178974, 22551 177819, 22593 177801, 22537 177425, 22684 177294, 23019 177290, 22990 176949, 23224 176670, 23224 176497, 23359 176384, 23363 176072, 23187 175868, 23431 175976, 23712 175883, 23685 175596, 23595 175407, 24103 175411, 24113 175028, 24175 174928, 24543 174969, 24568 174191, 24498 173435, 24575 173026, 24557 172597, 24620 172167, 24627 171073, 24581 170311, 24667 169208, 24612 168364, 24689 167180, 24689 166553, 24711 165023, 24650 164090, 24954 163619, 24698 163300, 25193 163063, 25633 163045, 25657 163241, 25767 163121, 26023 163291, 26250 163264, 26539 163464, 26455 163207, 26690 163062, 27138 162950, 27520 163186, 27771 163107, 27896 163124, 28216 163058, 28637 162871, 29392 162872, 29764 162750, 29954 163024, 30027 163271, 29648 163368, 29388 163565, 29719 163864, 29748 163953, 29847 163930, 30131 163999, 30306 163504, 30271 163324, 30372 163145, 30637 162954, 30886 163056, 31159 163081, 31198 163424, 31167 163465, 31250 163740, 31454 163604, 31888 163783, 32056 163304, 31975 163178, 31916 163200, 31613 163151, 31409 163012, 31631 162856, 31918 162783, 32022 162505, 32083 162137, 32399 161966, 32450 161676, 32717 161625, 32832 161459, 32736 161100, 33092 161157, 33190 161070, 33206 160969, 33096 160572, 33555 160537, 33485 160236, 33424 160134, 33469 160073, 33905 160057, 33753 159656, 33812 159557, 33918 159612, 34237 159580, 34262 159188, 34336 159109, 34298 158792, 34600 158834, 34703 158718, 34623 158254, 34656 158212, 35091 158198, 35028 157720, 35298 157549, 35431 157288, 35542 157228, 35743 156938, 35873 156488, 36210 156355, 36178 155889, 36630 155855, 36633 155765, 36513 155418, 36978 155373, 36798 154945, 36831 154900, 37301 154898, 37220 154441, 37409 154144, 37703 153922, 37776 153663, 38009 153472, 38029 153147, 38382 153034, 38406 152635, 38799 152550, 38815 152117, 39196 152020, 39165 151652, 39548 151556, 39487 151186, 39856 151082, 39842 151010, 39941 150739, 40108 150549, 39917 150261, 40208 150437, 40377 150241, 40393 150083, 40199 149760, 40585 149785, 40728 149752, 40695 149613, 40505 149288, 40890 149314, 41032 149281, 41006 148856, 41390 148767, 41455 148366, 41522 148223, 41288 147910, 41252 147909, 41279 147862, 41295 147898, 41688 147964, 41811 147891, 41812 147756, 41589 147451, 41507 147451, 41612 147245, 41604 147425, 41987 147486, 42320 147229, 42254 147156, 42326 147222, 42506 146937, 42535 146497, 42838 146326, 42849 146006, 43283 145940, 43054 145486, 43539 145451, 43457 145118, 43264 145227, 43048 145457, 42962 145398, 42680 145550, 42693 145188, 42769 144734, 42677 144417, 42524 144312, 42273 144244, 42204 144648, 41881 144798, 41865 145028, 41781 145170, 41734 145588, 41604 145624, 41264 145594, 41383 146102, 41220 146127, 40890 146070, 40957 145758, 41232 145563, 41396 145157, 41265 144417, 41259 144031, 41189 143894, 41270 143611, 41707 143270, 41753 143147, 41503 142801, 41481 142535, 41423 142436, 41372 142148, 41293 141961, 41130 141740, 41052 141406, 40816 141051, 40755 140524, 40923 140221, 41306 140198, 41678 140428, 41920 140749, 41974 140970, 42118 141267, 42297 141421, 42410 141650, 42540 141742, 42588 141899, 42733 142077, 42901 142524, 43088 142581, 43276 142419, 43318 142692, 43565 142805, 43645 143089, 43548 143115, 43286 143088, 43200 142862, 43047 143017, 43091 143141, 43376 143451, 43414 143592, 43194 143784, 43277 144085, 43378 144226, 43539 144633, 43582 144598, 43887 144674, 44002 144544, 44035 144434, 44026 144089, 44438 144027, 44420 143535, 44644 143346, 44711 143070, 44971 142901, 44968 142627, 45029 142540, 45428 142297, 46089 142293, 45516 141839, 45500 141670, 45751 141497, 45670 141272, 45665 141137, 45773 141013, 46200 141131, 46088 140768, 45780 140628, 45731 140479, 45515 140168, 45091 140033, 44753 140032, 45077 140607, 45058 140711, 44746 140816, 44439 140988, 44447 141219, 44337 141325, 44296 141479, 43892 141371, 44138 140679, 44330 140420, 44588 139939, 44694 139684, 44801 139571, 45065 139143, 45481 138553, 46203 138369, 46174 138033, 46015 137687, 45721 137570, 45651 137400, 45687 137293, 45607 136830, 45758 136630, 46151 136821, 46043 136518, 46111 136493, 45929 136161, 46098 135727, 45786 135563, 45678 135454, 45620 135309, 46175 135318, 46146 135527, 46249 135379, 46260 135193, 46144 134939, 46088 134941, 45909 134615, 46072 134203, 46116 134194, 46256 133609, 46109 133397, 46206 133163, 46060 133409, 45872 133204, 45851 133081, 45993 132655, 45970 132557, 46118 132296, 46329 132443, 46280 131801, 46313 131408, 46279 131025, 46185 130664, 46352 130231, 46361 129727, 46325 129462, 46163 129120, 46366 128676, 46354 128292, 46426 128021, 46394 127892, 46128 127891, 46238 128324, 46139 128703, 45825 128677, 45691 128726, 45639 128875, 45368 129174, 45201 129207, 45197 129383, 45015 129656, 44744 130123, 44516 130124, 44637 130313, 44552 130526, 44338 130731, 44266 130722, 44272 130801, 44081 131022, 43977 131269, 44010 131373, 43660 131488, 43780 131865, 43389 131959, 43346 132264, 43057 132455, 43001 132886, 42811 132998, 42630 132990, 42652 133183, 42553 133395, 42350 133593, 42201 133516, 42273 133674, 42097 133892, 42070 134117, 42112 134290, 41934 134331, 41594 134306, 41795 134581, 41844 134768, 41648 134814, 41363 134806, 41455 135061, 41430 135212, 41286 135284, 41044 135301, 41094 135548, 40922 135983, 40951 136094, 40596 136206, 40643 136554, 40284 136665, 40192 136817, 39909 136765, 40025 137004, 39907 137111, 39954 137411, 40303 138091, 40431 138443, 40521 139194, 40548 139239, 40521 139370, 40374 139458, 40131 139385, 39856 139474, 39678 139425, 39674 139039, 39459 138930, 39338 139012, 39194 139557, 39496 139909, 39046 139841, 38913 139883, 38918 140021, 39153 140362, 38737 140298, 38610 140357, 38430 140542, 38740 140626, 38845 140817, 38835 140976, 38684 141034, 38549 140897, 38386 140579, 38170 140801, 38164 141003, 38440 141316, 38455 141466, 38305 141504, 37913 141464, 38131 141787, 38161 141948, 37996 141984, 37574 141777, 37251 141717, 37439 141977, 37812 142263, 37623 142577, 37478 142353, 37260 142252, 36934 142187, 37128 142450, 37189 142820, 37229 142849, 37399 143344, 37209 143381, 36991 143262, 36837 143099, 36582 143099, 36657 143354, 37036 143639, 37079 143814, 36893 143843, 36471 143622, 36110 143543, 36302 143839, 36712 144115, 36709 144305, 36528 144350, 36359 144210, 35906 143947, 35709 143708, 35453 143802, 35420 144120, 35041 144221, 35079 144595, 34707 144699, 34704 145134, 34616 145264, 34361 145262, 34397 145524, 34243 145745, 33932 145728, 34084 145997, 33916 146228, 33600 146204, 33721 146485, 33626 146582, 33546 146943, 33213 147082, 33225 147396, 33103 147585, 32812 147587, 32875 147880, 32791 147995, 32683 148324, 32391 148479, 32344 148776, 32263 148744, 32306 148811, 32023 148935, 32001 149191, 31873 149187, 31925 149303, 31684 149423, 31667 149831, 31599 149887, 31272 149912, 31338 150239, 31302 150340, 31218 150409, 30875 150404, 31000 150719, 30962 150819, 30879 150881, 30531 150882, 30649 151203, 30513 151452, 30221 151396, 30293 151688, 30180 151778, 30125 152142, 29770 152255, 29855 152676, 29431 152741, 29485 153152, 29063 153215, 29095 153652, 28668 153710, 28718 154148, 28635 154233, 28302 154218, 28397 154534, 28283 154694, 27951 154702, 28007 155029, 27914 155256, 27651 155237, 27720 155494, 27570 155576, 27582 155984, 27165 156054, 27252 156486, 26809 156539, 26902 156882, 26886 156974, 26801 157037, 26438 157017, 26530 157372, 26413 157583, 26079 157533, 26157 157862, 26083 157931, 26092 158312, 25724 158418, 25701 158778, 25336 158889, 25372 159315, 24939 159372, 25022 159723, 25010 159817, 24923 159913, 24604 159896, 24689 160202, 24625 160290, 24561 160566, 24392 160497, 24501 160642, 24249 160776, 24184 160994, 23963 160947, 23923 161187, 23823 161230, 23864 161656, 23453 161727, 23512 162166, 23426 162246, 23083 162193, 23104 161848, 23396 161683, 23395 161293, 23769 161189, 23760 160791, 23981 160574, 24148 160316, 24213 159984, 24501 159818, 24609 159507, 24906 159347, 24911 158979, 24868 158922, 24935 158950, 25263 158834, 25271 158492, 25241 158441, 25300 158448, 25582 158314, 25624 157967, 25941 157822, 26022 157487, 26254 157272, 26417 157015, 26533 156711, 26762 156505, 26908 156238, 27118 156017, 27235 155628, 27445 155475, 27498 155117, 27821 154979, 27860 154637, 28074 154423, 28170 154208, 28436 153927, 28754 153371, 28990 153161, 28971 152783, 29302 152651, 29356 152327, 29665 152173, 29720 151806, 29922 151562, 30246 151043, 30458 150832, 30606 150574, 30799 150346, 30883 150000, 31181 149834, 31203 149443, 31522 149304, 31523 148950, 31866 148829, 31899 148492, 32132 148270, 32304 147997, 32428 147678, 32688 147479, 32744 147141, 32716 147076, 32782 147087, 33060 146949, 33104 146655, 33049 146539, 33180 146542, 33402 146421, 33445 146102, 33515 146092, 33715 145931, 33803 145633, 34062 145229, 34195 145115, 34298 144806, 34610 144629, 34523 144459, 34768 144387, 34974 144464, 34925 144146, 34959 143859, 35017 143862, 34971 143816, 35190 143598, 35384 143163, 35590 143080, 35676 142848, 35922 142563, 35952 142385, 36088 142201, 36247 142093, 36270 141910, 36364 141813, 36464 141527, 36760 141288, 36797 140990, 36741 140867, 36881 140870, 37144 140783, 37124 140513, 37068 140402, 37196 140409, 37462 140312, 37442 139943, 37791 139822, 37916 139485, 37949 139124, 37808 138992, 37991 139062, 38306 138967, 38125 138692, 38288 138625, 38662 138798, 38602 138489, 38631 138267, 38707 138224, 38687 138147, 38898 137983, 38953 137685, 38938 137562, 39067 137477, 39368 137515, 39389 137178, 39636 136926, 39665 136715, 39639 136603, 39759 136596, 40037 136182, 40115 135817, 40083 135759, 40139 135790, 40485 135689, 40495 135325, 40313 135151, 40556 135225, 40758 135091, 40804 134852, 40653 134709, 40854 134774, 41039 134616, 41134 134375, 41116 134326, 41160 134344, 41448 134187, 41751 133540, 41896 133390, 42097 132930, 42435 132467, 42397 132340, 42539 132343, 42669 132180, 42742 131995, 42616 131835, 42823 131864, 42973 131724, 43019 131387, 43281 131168, 43304 131066, 43568 130606, 43388 130428, 43636 130481, 43801 130347, 43795 130156, 43605 129929, 43904 129974, 44094 129892, 44147 129672, 44107 129536, 44231 129574, 44446 129400, 44464 128917, 44736 128646, 45001 128164, 45079 128181, 45337 127936, 45449 127764, 45583 127340, 45514 127020, 45601 126559, 45710 126404, 45990 125678, 45845 125361, 46150 125435, 46524 125322, 46735 125318, 46891 125248, 46994 125088, 47200 124959, 47051 124833, 47012 124622, 47332 123974, 47551 123712, 47636 124064, 47612 124395, 47862 124128, 47948 123978, 47899 123704, 47588 123688, 47848 123507, 47809 123241, 48226 122573, 48401 122692, 48180 123139, 48348 123290, 48552 123258, 48582 123030, 49060 122106, 48949 121956, 48769 121814, 48842 121560, 49093 121400, 49357 121705, 49400 121685, 49526 121284, 49597 121201, 49511 121126, 49365 120875, 49462 120651, 49683 120493, 49754 120770, 49897 120977, 50075 120840, 50111 120672, 50092 120298, 50293 119758, 50309 119455, 50552 118804, 50523 118620, 50712 118324, 50902 117773, 51108 117446, 51379 117246, 51510 117575, 51517 117961, 51449 118367, 51490 118548, 51632 118705, 51703 119073, 51913 119241, 52174 119720, 52266 119918, 52518 120220, 52747 120204, 52902 120084, 53122 120235, 52899 120400, 52921 120677, 52607 121083, 52419 120554, 52090 120510, 52030 120145, 51884 120043, 51747 120083, 51541 120042, 51332 120133, 51295 120347, 51204 120546, 51014 120678, 50859 120682, 50848 120857, 50589 121474, 50352 121769, 50063 122035, 49944 122268, 49676 122729, 49629 122904, 49445 123056, 49316 123078, 49294 123221, 49148 123421, 48978 123837, 48379 124456, 48045 125115, 48247 125384, 48522 125372, 48465 125595, 48696 125636, 48722 125699, 49504 125424, 49740 125426, 49729 125598, 49922 125637, 49973 125734, 50683 125475, 51119 125379, 51328 125378, 51370 125669, 51685 125623, 51716 125654, 52431 125418, 52730 125382, 52774 125564, 52916 125456, 53103 125610, 53852 125381, 54198 125365, 54361 125677, 55145 125393, 55431 125345, 55889 125188, 56038 125250, 56065 125485, 56292 125407, 56410 125441, 56650 125267, 56842 124761, 57158 124609, 57469 123748, 57586 123662, 57714 123400, 57990 123218, 58250 122759, 58316 122687, 58422 122362, 58563 122232, 58646 122048, 58806 121989, 59114 121369, 59204 121281, 59334 120967, 59561 120795, 59610 120702, 59690 120667, 60008 119990, 60333 119818, 60553 119361, 60834 118896, 60938 118614, 61094 118437, 61163 118287, 61281 118270, 61465 118078, 61716 117491, 61734 117122, 61801 117080, 61683 116724, 61502 116386, 61243 115807, 61128 115713, 61060 115437, 61066 115267, 61160 115194, 61444 115178, 61523 114830, 61592 114694, 61497 114342, 61378 113623, 61571 113222, 61856 113438, 62189 113437, 62461 113595, 62773 114101, 63065 114408, 63100 114495, 63338 114735, 63280 114348, 63292 113958, 63198 113596, 63208 113205, 63248 113111, 63610 113484, 63790 113605, 63881 113797, 63865 114139, 63828 114198, 63879 114212, 64146 113724, 64300 113404, 64437 113257, 64451 112935, 64662 112807, 64460 112758, 64399 112491, 64248 112144, 64176 111813, 64013 111417, 64362 110612, 64355 110177, 64265 109919, 64286 109761, 64205 109229, 63927 108435, 64121 108622, 64333 108918, 64580 109126, 64683 109313, 64955 109626, 65204 110078, 65439 110315, 65767 110778, 65887 110856, 66091 110595, 66354 110516, 66426 110428, 66971 109142, 67304 108987, 67666 108123, 67868 107716, 68206 107630, 68557 106719, 68909 106627, 69127 106156, 69469 105309, 69830 105183, 70092 104527, 70164 104281, 70381 103893, 70736 103755, 71007 102927, 71354 102671, 71631 102297, 71957 101514, 72324 101447, 72552 100953, 72626 100668, 72538 100569, 72817 100144, 73198 100022, 73597 99116, 73792 98745, 74099 98656, 74284 98158, 74484 97723, 74863 97584, 75067 97162, 75204 96738, 75442 96435, 75710 96262, 75960 95755, 76329 94963, 76621 94885, 77005 93991, 77388 93827, 77781 93010, 77992 92872, 78050 92754, 78153 92712, 78589 91933, 78720 91630, 78839 91477, 78859 91160, 79028 91037, 78871 90928, 78732 90731, 78677 90577, 78338 90063, 78274 89693, 78140 89295, 78212 89205, 78439 89084, 78466 88866, 78608 88688, 78536 88071, 78526 87750, 78617 87662, 78655 87448, 79177 87641, 79385 87768, 79521 87602, 79581 87785, 79745 87824, 79979 87811, 80102 87329, 80218 87223, 80250 87099, 80362 87095, 80620 87347, 80928 87386, 81115 87683, 81346 87440, 81668 87230, 81710 87111, 81678 86822, 81393 86505, 81274 86145, 81099 85911, 80908 85434, 80970 85125, 81171 84913, 81591 84843, 81481 84518, 81505 84440, 81349 84159, 81323 83774, 81224 83555, 81373 83369, 81378 83311, 81434 83307, 82465 84233, 82768 84665, 82979 84878, 83214 84851, 83185 84481, 83518 84355, 83507 83999, 83839 83873, 83798 83497, 84160 83392, 84115 83014, 84272 82955, 84410 82842, 84433 82505, 84806 82375, 84729 81997, 84752 81962, 85137 81900, 85085 81512, 85355 81348, 85364 81048, 85448 80712, 85726 80466, 85886 80135, 86019 79713, 86265 79534, 86409 79231, 86689 78877, 86768 78830, 86771 78741, 86890 78545, 86992 78247, 87334 77847, 87457 77806, 87441 77677, 87514 77495, 87660 77360, 87829 77021, 87985 76863, 88001 76795, 88069 76754, 88587 75805, 88818 75637, 88927 75371, 89228 75239, 89363 74974, 89285 74879, 89251 74910, 88898 74902, 88554 74696, 88473 74597, 88369 74625, 88086 74603, 87944 74666, 87694 74578, 87315 74644, 87168 74800, 86954 74854, 86860 74954, 86226 75230, 85738 75348, 85795 75735, 85515 75736, 85002 75861, 84746 76025, 84658 76311, 84429 76344, 83935 76519, 83754 76737, 83754 76822, 83658 76781, 83200 76830, 83112 76977, 83115 77116, 82793 77233, 82233 77373, 81764 77567, 81492 77647, 81129 77849, 81018 77870, 80828 78024, 80817 78072, 80482 78183, 80526 78479, 80461 78693, 80221 78693, 80333 78912, 80198 79023, 80132 79155, 79888 79153, 79959 79385, 79856 79479, 79868 79835, 79501 79926, 79601 80252, 79713 80425, 79614 80642, 79630 80715, 79849 80983, 79881 81240, 79640 81402, 79591 81388, 79777 81867, 79700 81868, 79284 81638, 79048 81744, 79016 82012, 79380 82280, 79298 82308, 78969 82216, 78734 82518, 78978 82764, 78639 82679, 78453 82990, 78596 83232, 78304 83093, 78065 83218, 78022 83487, 78174 83640, 77974 83553, 77737 83690, 77790 83937, 78029 84238, 77659 84124, 77416 84170, 77488 84407, 77662 84688, 77336 84639, 77098 84654, 77290 85135, 77005 85085, 76756 85122, 76815 85368, 77156 85679, 77180 85762, 77092 85776, 76679 85565, 76428 85621, 76485 85864, 76822 86162, 76841 86236, 76764 86247, 76361 86118, 76114 86127, 76175 86360, 76422 86601, 76479 86707, 76436 86716, 75849 86452, 75607 86288, 75351 86318, 75420 86713, 75271 86695, 74943 86742, 75027 87150, 74616 87225, 74722 87647, 74267 87692, 74382 88122, 73941 88179, 74052 88606, 73966 88648, 73629 88681, 73733 89000, 73422 89482, 73091 89649, 73000 89976, 72898 90081, 72741 90505, 72573 90809, 72488 90785, 72483 90893, 72217 91040, 72113 91382, 71898 91897, 71810 91966, 71541 92034, 71236 92785, 71002 93089, 70815 93064, 70735 93310, 70609 93419, 70534 93753, 70455 93871, 70048 94745, 69688 94832, 69606 95170, 69377 95717, 69238 95848, 69014 95841, 68757 96566, 68628 96701, 68391 97113, 68112 97263, 68024 97542, 67922 97661, 67789 97994, 67543 98530, 67442 98615, 67182 98652, 67103 98958, 67012 99070, 66845 99506, 66645 99795, 66561 99772, 66526 99891, 66290 100061, 66188 100372, 65929 100903, 65793 101098, 65624 101113, 65568 101316, 65395 101455, 65280 101783, 65037 102340, 64885 102508, 64681 102470, 64627 102738, 64482 102852, 64369 103196, 64108 103683, 63749 103812, 63422 104716, 63297 104824, 63023 104777, 62908 105147, 62852 105207, 62722 105705, 62630 105998, 62894 106702, 63153 106862, 63219 107001, 63235 107280, 62987 107287, 62854 107100, 62865 106744, 62561 107180, 62508 107523, 62020 107442, 61972 107730, 61728 108413, 61608 108604, 61740 108724, 61768 108949, 61516 109505, 61379 109632, 61269 109050, 60951 109294, 60873 109581, 60942 109889, 61018 109930, 60938 109999, 60790 110379, 60585 110863, 60535 110905, 60473 110854, 60536 110780, 60665 110413, 60487 110190, 60232 110275, 60113 110803, 59939 111236, 59695 111343, 59551 111309, 59516 111504, 59345 111690, 59201 112158, 58978 112343, 58766 112023, 58674 112009, 58653 112127, 58406 112277, 58212 112613, 58152 112560, 58157 112651, 57871 112813, 57759 113148, 57671 113232, 57494 113681, 57315 114009, 57114 113773, 56985 114136, 56928 114153, 56840 114563, 56597 115057, 56490 115219, 56382 115076, 56599 114316, 56925 114149, 57218 113297, 57425 112785, 57539 112629, 57704 112544, 57842 112350, 57972 112277, 58099 111784, 58333 111438, 58675 111287, 58757 110937, 58969 110491, 58976 110351, 59328 110217, 59541 109851, 59711 109411, 59969 109115, 60184 108608, 60437 108439, 60779 107669, 60765 107536, 60870 107565, 61137 107430, 61237 107156, 61469 106704, 61488 106555, 61669 106414, 61809 106362, 61884 106204, 62048 106030, 62168 105738, 62416 105282, 62420 105217, 62726 105004, 62866 104771, 62757 104641, 62751 104132, 63120 104224, 63333 103841, 63647 103635, 64018 102810, 64222 102487, 64545 102243, 64658 101954, 64951 101486, 64936 101414, 65027 101347, 65264 101013, 65460 100856, 65863 100067, 66203 99592, 66377 99453, 66513 99120, 66178 98940, 66334 98782, 66363 98505, 66688 98552, 66779 98600, 67066 98457, 67196 98157, 67442 97702, 67448 97599, 67754 97391, 68092 96749, 68380 96282, 68607 95832, 68903 95654, 69201 94894, 69212 94759, 69582 94650, 69800 94251, 69976 93799, 70484 93230, 70587 92964, 70873 92498, 71078 92053, 71066 91968, 71134 91991, 71410 91818, 71605 91448, 71722 91102, 71727 90972, 71839 90970, 72095 90860, 72434 90132, 72661 89682, 72648 89619, 72703 89621, 72977 89426, 73095 89175, 73363 88855, 73498 88595, 73700 88374, 73823 88102, 73848 87772, 73776 87718, 73855 87757, 74112 87588, 74158 87269, 74366 87056, 74490 86790, 74751 86614, 74842 86321, 75052 86118, 75172 85910, 75414 85663, 75586 85342, 75753 85195, 75831 84986, 75890 84935, 75892 84867, 76051 84683, 76151 84452, 76400 84186, 76416 83886, 76045 83614, 76455 83800, 76693 83674, 76742 83404, 76493 83186, 76788 83356, 77054 83222, 77088 82926, 76818 82710, 77116 82887, 77368 82740, 77440 82448, 77383 82402, 77447 82439, 77697 82269, 77769 81978, 77711 81932, 77775 81971, 78020 81796, 78084 81513, 77892 81361, 78102 81489, 78338 81321, 78351 81060, 78077 80795, 78424 80965, 78699 80838, 78675 80543, 78386 80310, 78744 80431, 79000 80292, 79000 80005, 78699 79770, 79064 79897, 79354 79822, 79306 79528, 78978 79218, 78848 79262, 78973 79173, 79389 79407, 79628 79318, 79632 79063, 79392 78802, 79719 78942, 79941 78842, 79980 78596, 79874 78447, 80051 78504, 80310 78408, 80284 78140, 79913 78126, 79601 78254, 79207 78320, 78862 78307, 78495 78475, 78090 78328, 77955 78416, 77909 78599, 77741 78644, 77503 78511, 77333 78476, 76820 78521, 76577 78635, 76490 78634, 76402 78919, 76238 79022, 76065 79028, 76124 79193, 76079 79388, 75729 79527, 75782 79695, 75741 79889, 75589 80020, 75403 80067, 75460 80241, 75425 80432, 75263 80507, 75018 80523, 75115 80938, 74695 80991, 74795 81409, 74623 81581, 74533 81575, 74570 81658, 74462 81873, 74295 82050, 74210 82046, 74238 82126, 73966 82515, 73882 82516, 73911 82597, 73638 82987, 73553 82987, 73587 83066, 73309 83445, 73196 83456, 73245 83555, 73134 83775, 72983 83943, 72837 83958, 72892 84090, 72809 84293, 72663 84467, 72532 84469, 72576 84591, 72411 85023, 72437 85100, 72355 85103, 72163 85263, 72097 85495, 72123 85584, 72029 85591, 71839 85740, 71752 85974, 71774 86045, 71699 86048, 71486 86200, 71424 86509, 71162 86681, 71059 86962, 70845 87169, 70713 87431, 70505 87654, 70422 87957, 70178 88152, 70088 88445, 69853 88639, 69913 89027, 69752 89045, 69542 89131, 69584 89509, 69425 89528, 69216 89616, 69204 89844, 69239 89981, 68860 90081, 68869 90333, 68811 90469, 68467 90626, 68208 91289, 67924 91755, 67889 91859, 67614 92110, 67586 92235, 67399 92455, 67230 92871, 67048 93012, 66897 93037, 66861 93210, 66695 93431, 66593 93670, 66371 94119, 66317 94292, 66134 94416, 65977 94447, 65926 94628, 65786 94834, 65618 95279, 65360 95558, 65142 96006, 64885 96268, 64693 96653, 64456 96973, 64179 97250, 64108 97453, 63799 98093, 63580 98287, 63484 98289, 63457 98407, 63274 98651, 63205 98864, 62769 99521, 62560 99662, 62509 99829, 62285 100278, 61994 100746, 61964 100827, 61669 101067, 61619 101236, 61463 101463, 61284 101891, 61057 102231, 60771 102476, 60726 102644, 60564 102859, 60370 103268, 60131 103601, 59835 103829, 59471 104666, 59279 104871, 59183 104915, 59165 105010, 58967 105284, 58896 105471, 58612 105937, 58574 106077, 58277 106306, 58237 106427, 58040 106637, 57870 107078, 57662 107450, 57339 107630, 57289 107850, 57002 108493, 56792 108641, 56660 108643, 56618 108809, 56446 109020, 56283 109471, 55796 110063, 55763 110206, 55149 111046, 55057 111046, 55093 111165, 54918 111601, 54739 111901, 54466 112068, 54283 111621, 53961 111087, 53952 110845, 53872 110725, 53693 110678, 53332 110313, 53381 110472, 53115 110638, 53065 110946, 52785 111411, 52561 111950, 52215 112089, 52082 112517, 51884 112870, 51572 113104, 51511 113310, 51346 113528, 51151 113945, 50940 114261, 50649 114467, 50578 114729, 50290 115196, 50066 115645, 50042 115752, 49679 115868, 49567 116299, 49390 116681, 49047 116850, 48923 117121, 48671 117578, 48439 118029, 48434 118074, 48128 118259, 48069 118518, 47780 118984, 47433 119476, 47132 119666, 47044 120102, 46553 120871, 46272 121137, 45929 121818, 45924 121913, 45580 122047, 45551 122309, 45488 122467, 45325 122635, 45169 122626, 45168 122802, 45016 122973, 44947 123250, 44577 123772, 44408 124172, 44399 124309, 44020 124404, 43929 124811, 43764 125153, 43440 125428, 43152 125835, 42871 125863, 42992 126112, 42948 126271, 42757 126560, 42488 126775, 42464 127032, 42514 127191, 42050 127241, 42166 127617, 41770 127708, 41824 128091, 41467 128209, 41470 128467, 41302 128901, 41348 128996, 41239 129002, 40994 129108, 40901 129250, 40695 129252, 40792 129428, 40610 129707, 40394 129713, 40495 129897, 40365 130056, 40330 130495, 39925 130565, 39967 130994, 39797 131046, 39517 131051, 39642 131294, 39669 131462, 39206 131510, 39327 131768, 39284 131926, 39129 132056, 38922 132043, 38941 132262, 38837 132424, 38777 132694, 38829 132820, 38416 132897, 38471 133255, 38132 133381, 38142 133744, 37792 133869, 37741 134279, 37605 134345, 37360 134374, 37358 134634, 37301 134773, 37169 134912, 36983 134925, 37001 135119, 36884 135285, 36838 135551, 36879 135680, 36473 135759, 36491 136105, 36156 136227, 36149 136575, 35821 136719, 35844 136987, 35800 137143, 35652 137268, 35446 137262, 35471 137477, 35410 137628, 35292 137742, 35065 137746, 35152 137952, 35090 138101, 34972 138208, 34739 138216, 34824 138429, 34734 138584, 34658 138955, 34318 139085, 34333 139491, 33904 139557, 34003 139964, 33585 140038, 33654 140300, 33636 140444, 33491 140611, 33338 140613, 33362 140768, 33220 140941, 33107 141226, 33122 141272, 32815 141416, 32815 141764, 32486 141894, 32439 142220, 32147 142395, 32109 142786, 31985 142882, 31768 142917, 31804 143134, 31751 143295, 31617 143402, 31401 143411, 31469 143613, 31406 143768, 31278 143877, 31056 143886, 31124 144095, 30896 144489, 30815 144482, 30829 144564, 30624 144738, 30573 145021, 30600 145117, 30221 145216, 30305 145630, 29882 145700, 29932 146114, 29517 146182, 29530 146608, 29397 146674, 29140 146695, 29136 147087, 29026 147227, 28847 147248, 28868 147427, 28676 147675, 28486 147724, 28501 147916, 28403 148041, 28319 148382, 28012 148539, 28002 148939, 27892 149048, 27675 149078, 27736 149288, 27643 149457, 27503 149570, 27271 149560, 27325 149789, 27141 150187, 27073 150175, 27098 150238, 26888 150412, 26785 150663, 26720 150662, 26746 150722, 26538 150912, 26492 151278, 26131 151389, 26171 151808, 26024 151878, 25775 151892, 25836 152135, 25803 152287, 25665 152359, 25419 152381, 25474 152622, 25430 152774, 25294 152920, 25105 152914, 25146 153099, 25038 153258, 24951 153583, 24649 153736, 24677 154136, 24304 154238, 24300 154620, 23915 154714, 23960 154975, 23940 155126, 23800 155238, 23583 155241, 23631 155453, 23438 155900, 23166 156080, 23172 156471, 22797 156572, 22780 156964, 22089 156891, 22096 156834, 21811 156510, 22079 156115, 21751 156033, 22130 155726, 22312 155687, 21437 155357, 21606 155241, 21213 154979, 21671 154823, 22703 154562, 22683 153811, 23054 153981, 23059 153675, 23426 153602, 23674 153763, 23456 153563, 23432 153199, 23284 153222, 23281 152914, 23442 153180, 23805 153124, 24028 153254, 23850 153067, 23800 152701, 23563 152635, 23799 152586, 23879 152284, 23876 151586, 24112 151606, 24545 151548, 24558 151331, 24995 151279, 24947 151216, 24917 150840, 25287 150782, 25398 150818, 25333 150722, 25279 150355, 25647 150303, 25844 150397, 25685 150239, 25652 149897, 25393 149930, 25400 149656, 25662 149540, 25692 149849, 26025 149796, 26267 149952, 26071 149745, 26036 149417, 25722 149452, 25494 148935, 26045 149108, 26063 148985, 26442 148888, 26442 148485, 26901 148450, 26854 148367, 26796 147997, 27173 147930, 27344 148016, 27206 147884, 27151 147529, 26950 147565, 26986 147182, 27164 147508, 27525 147452, 27840 147633, 27570 147396, 27538 147056, 27012 146882, 27555 146653, 27930 146541, 27916 146142, 28287 146083, 28407 146123, 28333 146024, 28270 145663, 28636 145603, 28756 145641, 28661 145546, 28655 145163, 29024 145104, 29153 145164, 29070 145046, 29051 144666, 29420 144609, 29605 144714, 29484 144546, 29399 144206, 29168 144244, 29151 144011, 29369 143803, 29265 143303, 29756 143432, 29770 143309, 29868 143277, 29887 142993, 30150 142990, 30175 142817, 30586 142747, 30557 142701, 30881 142238, 31068 142353, 30890 142222, 30848 141850, 31220 141800, 31588 141996, 31257 141733, 31247 141351, 31614 141269, 31818 141422, 31636 141242, 31647 140871, 31525 140884, 31547 140782, 31636 140709, 31622 140479, 31716 140445, 31688 140173, 31962 140162, 31972 140013, 32323 139962, 32378 139876, 32360 139507, 32708 139537, 32775 139441, 32760 138998, 33124 138960, 33252 139002, 33174 138882, 33091 138520, 33466 138474, 33793 138634, 33511 138403, 33417 138082, 33126 138120, 32896 137582, 33438 137777, 33451 138032, 33789 137993, 34081 138135, 33834 137926, 33823 137543, 33887 137163, 34207 137313, 34277 137077, 34190 136668, 34563 136590, 34651 136623, 34584 136557, 34508 136193, 34880 136119, 34967 136149, 34904 136082, 34923 135692, 35283 135648, 35400 135689, 35338 135575, 35337 135198, 35182 135229, 35191 135051, 35353 135066, 35394 134794, 35759 134695, 35813 134285, 36178 134236, 36376 134356, 36238 134166, 36135 133813, 36509 133762, 36808 133896, 36544 133694, 36441 133337, 36816 133267, 37067 133392, 36842 133226, 36862 132834, 36820 132842, 36874 132751, 36864 132831, 37231 132779, 37502 132981, 37327 132705, 37306 132337, 37342 132313, 37249 131969, 37609 131881, 37547 131493, 37760 131423, 37706 131192, 37939 131148, 37966 130980, 38327 130933, 38457 130994, 38369 130868, 38401 130474, 38764 130423, 39004 130597, 38821 130357, 38702 130004, 39083 129945, 39387 130085, 39117 129888, 38999 129543, 38849 129573, 38875 129413, 39011 129440, 39004 129532, 39378 129483, 39623 129581, 39442 129411, 39431 129040, 39313 129059, 39276 128870, 39495 128645, 39681 128959, 39815 128934, 39900 128543, 39803 128155, 40170 128066, 40330 128144, 40183 128045, 40088 127686, 40509 127614, 40523 127184, 40452 127196, 40533 127129, 40527 127176, 40881 127171, 41059 127240, 40935 127064, 40963 126708, 40711 126737, 40333 126299, 40933 126503, 40911 126317, 41090 126246, 40977 126040, 41196 125947, 41178 125843, 41341 125789, 41225 125410, 41623 125279, 41555 125730, 41920 125681, 42177 125785, 41957 125621, 42070 124820, 42488 124766, 42344 124353, 42726 124285, 42986 124400, 42748 124241, 42622 123892, 42997 123825, 43043 123772, 43057 123444, 42546 123213, 43137 123050, 43128 123362, 43427 123341, 43561 123407, 43481 123265, 43610 122474, 43585 122460, 43621 122422, 43618 122452, 43980 122396, 44076 122444, 44017 122342, 44084 121941, 44189 121908, 44171 121782, 43937 121257, 44505 121202, 44726 121367, 45035 120900, 45071 120537, 44717 120612, 44687 120698, 44447 120520, 44503 120271, 44715 119904, 44906 120006, 44904 120162, 45131 120285, 45185 120094, 45647 120091, 45595 119951, 46071 119082, 46196 119135, 46288 119006, 46681 118717, 46569 118542, 46655 118144, 46803 117844, 46678 117736, 46786 117368, 46872 117295, 47051 116795, 47168 117215, 47434 117265, 47536 117186, 47737 116287, 47977 115840, 48224 115960, 48363 115769, 48591 115299, 48935 115180, 48699 114858, 48989 115044, 49282 114846, 49249 114409, 49697 114510, 49883 114317, 49947 114127, 49883 113997, 49654 113909, 49752 113684, 49871 113624, 50022 113344, 50274 112493, 50638 112399, 50867 112712, 50862 112779, 50929 112695, 50886 112700, 50648 112383, 51075 111498, 51098 111541, 51583 110951, 51720 110540, 51962 110086, 52146 109687, 52456 109639, 52502 109561, 52638 109614, 52567 109532, 52503 109544, 52787 108702, 53157 108600, 53458 107738, 53660 107306, 54016 107213, 54218 106754, 54542 105900, 54906 105798, 55275 104920, 55645 104819, 56162 103519, 56524 103420, 56639 103132, 56554 103011, 56782 102774, 57061 102110, 57386 102009, 57383 101920, 57439 101973, 57773 101129, 58149 101028, 58685 99735, 59046 99619, 59376 98796, 59332 98717, 59419 98693, 59584 98316, 59946 98241, 60279 97362, 60246 97348, 60267 97298, 60303 97303, 60479 96912, 60848 96794, 61385 95497, 61728 95408, 61908 94984, 61879 94962, 61943 94900, 62284 94098, 62637 94003, 62811 93545, 63183 93446, 63510 92581, 63891 91709, 64251 91616, 64220 91221, 64595 91117, 64541 90734, 64914 90634, 64871 90254, 65112 90180, 64828 89959, 64518 89948, 64479 89645, 64779 89567, 64966 89826, 65213 89938, 65193 89759, 65564 89645, 65551 89544, 65132 89188, 65379 88903, 65369 88814, 65456 88785, 65680 89216, 65894 89163, 65845 88779, 66222 88683, 66173 88300, 66551 88205, 66499 87820, 66873 87724, 66625 87293, 66817 87278, 66940 87312, 67201 87247, 67154 86869, 67327 86823, 67077 86468, 67510 86636, 67483 86396, 67780 86289, 67704 86178, 67835 86144, 67804 85882, 68179 85752, 68128 85366, 68503 85274, 68455 84891, 68831 84801, 68789 84423, 69160 84330, 69072 83571, 69236 83523, 69211 83321, 69268 83124, 69118 82908, 69358 82854, 69688 83379, 69807 83333, 69761 82950, 70131 82801, 70079 82413, 70384 82277, 70435 82173, 70368 81565, 70737 81491, 70692 81095, 71064 81009, 71023 80630, 71397 80543, 71353 80169, 71722 80085, 71677 79703, 72072 79612, 72007 79244, 72372 79093, 72346 78703, 72690 78542, 72652 78139, 73397 77980, 73301 77214, 73681 77141, 73630 76756, 74010 76685, 73960 76302, 74290 76236, 74326 76151, 74289 75847, 74667 75784, 74620 75398, 75345 75012, 75329 74888, 74936 74629, 75270 74416, 75250 74241, 75507 74193, 75520 74093, 75619 74109, 75581 73790, 75904 73731, 75636 73136, 75893 73218, 76287 73273, 76246 72895, 76622 72829, 76576 72451, 76954 72386, 76903 72002, 77287 71942, 77237 71563, 77610 71335, 77549 70989, 77504 70990, 77498 70581, 77575 70947, 77907 70756, 77863 70363, 78241 70302, 78192 69917, 78570 69860, 78523 69479, 78903 69421, 78808 68675, 78761 68663, 78750 68574, 78849 68651, 79195 68601, 79150 68231, 79521 68175, 79494 67807, 79853 67743, 80071 67589, 80108 67462, 80198 67402, 80163 67118, 80404 66950, 80330 66807, 80505 66764, 80472 66489, 80852 66439, 80805 66056, 81041 66024, 81148 65720, 81135 65624, 81335 65368, 81419 65158, 81502 65155, 81806 64771, 82158 64512, 82113 64131, 82464 63868, 83473 62574, 83432 62202, 83753 61793, 83753 61782, 84441 60932, 84391 60574, 85077 59989, 85376 59613, 85405 59527, 85372 59187, 85913 58509, 85793 58165, 86115 58231, 86710 57583, 87085 57139, 86994 56761, 87344 56466, 87701 56111, 87653 55739, 88314 54933, 89017 54108, 88945 53799, 88710 53884, 88924 53632, 89046 53628, 89457 53147, 89436 52970, 89592 52789, 89773 52806, 89962 52619, 89914 52239, 90259 51889, 90909 51129, 90882 51104, 90928 51081, 90892 50722, 91559 49947, 92249 49196, 92201 48820, 92534 48456, 92896 46537, 93135 45885, 93274 45832, 93915 45830, 94437 45851, 94824 45830, 95063 46013, 95473 45629, 99087 45628, 99345 45800), (143176 214170, 143101 214582, 143307 214236, 143295 214045, 143080 213805, 143176 214170), (148068 213383, 148076 213601, 147968 214050, 148426 214061, 148793 213405, 148359 213075, 148068 213383), (144676 213608, 144677 213926, 144905 213970, 144846 213711, 144909 213384, 144676 213608), (148802 210301, 148740 210555, 148923 210390, 148917 210148, 148762 210131, 148802 210301), (145180 209356, 145037 209868, 145189 210129, 145253 210139, 145114 209760, 145239 209287, 145180 209356), (155600 209489, 155731 209728, 155803 209579, 155857 209278, 155600 209489), (155588 208940, 155851 209008, 155784 208741, 155703 208627, 155588 208940), (148541 207104, 148535 207485, 148713 207395, 148676 207235, 148724 207017, 148541 207104), (155679 204372, 155689 204701, 155825 204500, 155860 204252, 155679 204372), (155601 201072, 155748 201322, 155870 200999, 155646 200780, 155601 201072), (155572 200305, 155641 200567, 155853 200228, 155699 199919, 155572 200305), (128324 199634, 128234 200049, 128475 199744, 128437 199603, 128511 199343, 128245 199340, 128324 199634), (155529 199377, 155697 199845, 155833 199458, 155866 199216, 155529 199377), (121190 199160, 121198 199362, 121436 199587, 121345 199219, 121411 198810, 121190 199160), (155517 198935, 155860 198910, 155805 198653, 155699 198472, 155517 198935), (130227 198243, 130242 198409, 130405 198566, 130318 198312, 130362 198087, 130227 198243), (128414 197670, 128231 197868, 128283 198240, 128524 198349, 128418 198057, 128557 197596, 128414 197670), (131709 195216, 131716 195481, 131855 195564, 131764 195780, 131802 195966, 131728 196386, 132070 197055, 131745 197863, 131753 197969, 131941 198237, 131828 197898, 132074 197051, 131747 196364, 132039 195901, 132112 195640, 132089 195500, 132255 195067, 131709 195216), (155499 197838, 155693 198192, 155789 197957, 155825 197697, 155499 197838), (121129 197605, 121123 197886, 121334 197957, 121288 197685, 121411 197139, 121129 197605), (124642 196588, 124760 196734, 124666 196965, 124706 197227, 124824 197155, 125005 196794, 125033 196438, 124959 196291, 124666 196263, 124642 196588), (128170 196186, 128158 196281, 128234 196557, 128189 196833, 128480 196816, 128462 196495, 128599 196309, 128576 195912, 128170 196186), (130113 195267, 130122 195398, 130394 195651, 130395 195189, 130113 195267), (104353 195349, 104482 195523, 104782 195376, 104876 195268, 104845 195211, 104353 195349), (128199 195015, 128201 195125, 128329 195368, 128545 195442, 128546 195309, 128471 195322, 128246 194998, 128199 195015), (177330 188306, 177371 188515, 177312 188772, 177326 189690, 177391 189949, 177317 190298, 177351 190459, 177305 190772, 177375 191156, 177307 191246, 177357 191460, 177250 191750, 177263 192250, 177324 192791, 177423 193028, 177380 193164, 177386 193409, 177437 193537, 177149 194091, 177090 194406, 177495 194684, 177589 194691, 177813 194597, 177858 194196, 177818 194155, 177785 193828, 177558 193504, 177654 193197, 177634 192707, 177559 192478, 177658 192167, 177610 191939, 177634 191657, 177557 191259, 177578 191172, 177500 190914, 177596 190583, 177557 190402, 177608 190110, 177532 189634, 177394 189284, 177568 188549, 177564 188124, 177330 188306), (174621 193971, 174571 194413, 174731 194665, 175180 194542, 175146 193934, 174621 193971), (170728 193079, 170795 193419, 170733 193823, 170528 194267, 170606 194305, 170682 194614, 170729 194628, 171295 194445, 171256 194067, 171121 193717, 171127 193635, 170946 193377, 171137 193097, 171151 192856, 170913 192849, 170728 193079), (172355 194245, 172312 194553, 172708 194480, 172790 194522, 172996 194366, 172519 194228, 172355 194245), (166988 186294, 166942 186721, 167149 187441, 167015 187837, 166934 188274, 166994 188695, 167130 188997, 166916 189715, 166913 189957, 166978 190201, 167140 190544, 167057 190918, 166948 190985, 166868 191174, 166947 191372, 166866 191687, 166790 192190, 166867 192558, 166840 192724, 166909 192934, 166910 193398, 166645 194169, 166698 194542, 167076 194474, 167159 194518, 167370 194358, 167371 193944, 167193 193705, 167030 193674, 167051 193282, 167166 193014, 167201 192644, 167161 192476, 166907 192159, 167038 191796, 167119 191713, 167157 191491, 167125 191324, 167248 190566, 167199 190005, 167126 189772, 167213 189017, 167152 188602, 167208 188398, 167082 188233, 167165 187965, 167124 187835, 167155 187443, 166950 186719, 167110 186391, 167115 185868, 166988 186294), (57360 192252, 57298 192742, 57323 192770, 57448 193411, 57316 193900, 57196 194090, 57149 194333, 57420 194466, 57847 194530, 57979 194301, 57805 193855, 57691 193797, 57682 193617, 57558 193160, 57819 192977, 57420 192708, 57829 192249, 57846 191965, 57805 191827, 57420 191575, 57360 192252), (165290 184073, 164827 184880, 164791 184986, 164453 185556, 164463 185850, 164402 186257, 164651 186575, 164403 187010, 164390 187662, 164391 188197, 164361 188592, 164432 188961, 164385 189473, 164730 189655, 164410 190039, 164378 190523, 164434 190983, 164810 191183, 164441 191582, 164457 192900, 164564 193377, 164521 193588, 164263 194046, 164563 194352, 164963 194288, 165032 194350, 165261 194321, 165402 194510, 165581 194460, 165670 193944, 165418 192540, 165588 191822, 165614 191397, 165185 191080, 165466 190228, 165299 189498, 165299 188978, 165345 188635, 165326 188512, 165298 187948, 165362 187278, 165334 187009, 165315 186393, 165409 186049, 165425 185587, 165517 185141, 165136 184891, 165506 184436, 165447 184030, 165488 183604, 165290 184073), (39449 193702, 39335 194021, 39332 194178, 39436 194509, 39867 194249, 39744 193950, 39694 193691, 39453 193262, 39449 193702), (35693 185464, 35733 186248, 35666 187042, 35756 187792, 35653 188210, 35631 188488, 35687 188898, 35661 188982, 35742 189347, 35639 189763, 35652 190416, 35606 190547, 35663 190919, 35641 191313, 35587 191530, 35649 191955, 35577 192106, 35616 192482, 35585 192878, 35606 193648, 35284 194124, 35480 194459, 35906 194503, 36146 194276, 36080 193913, 35815 193591, 35848 193194, 35951 192536, 35903 192126, 35934 192008, 35882 191360, 35917 190967, 35908 190465, 35865 190205, 35901 189691, 35851 189009, 35882 188922, 35843 188545, 35866 188268, 35782 187132, 35849 186714, 35851 186216, 35736 185496, 35745 185055, 35693 185464), (59075 193980, 58921 194085, 58863 194252, 58964 194256, 59421 194497, 59576 194444, 59631 194291, 59505 193836, 59075 193980), (37069 194022, 37140 194391, 37419 194490, 37620 194472, 37792 194386, 37872 194190, 37206 193720, 37069 194022), (31530 193835, 31455 194011, 31480 194203, 31555 194371, 31802 194469, 32013 194460, 32166 194359, 32179 194200, 32055 193706, 31906 193659, 31530 193835), (168521 193823, 168458 194059, 168478 194442, 168857 194366, 168983 194466, 168968 194221, 168737 193757, 168521 193823), (161631 193182, 161248 193226, 161085 193754, 161097 194139, 161346 194459, 161479 194465, 161701 194361, 161801 194259, 161885 193923, 161752 193571, 161717 193089, 161631 193182), (156902 193996, 156853 194139, 157080 194465, 157260 194415, 157354 194076, 157660 193918, 157338 193881, 156902 193996), (64030 185814, 63951 186243, 64014 186638, 64160 186984, 63967 187769, 64008 188189, 64129 188544, 64032 188905, 63932 188985, 63905 189209, 63961 189365, 63901 189565, 64059 189967, 64188 190078, 64069 190450, 63997 190518, 63915 190732, 63923 191121, 64197 191626, 64057 191981, 63978 192074, 63917 192246, 63995 192845, 63914 193286, 64070 193600, 63797 193826, 63666 194098, 63812 194446, 64198 194369, 64551 194243, 64244 193552, 64273 193256, 64037 193221, 64287 193117, 64296 192612, 64226 192393, 64266 192116, 64299 191553, 64238 191227, 64270 191064, 64231 190841, 64288 190116, 64202 189589, 64123 189320, 64271 188586, 64184 188140, 64212 187977, 64079 187781, 64168 187476, 64139 187378, 64213 186928, 64175 186447, 64027 186245, 64118 185912, 64094 185840, 64156 185428, 64030 185814), (47874 193775, 47671 193857, 47796 194184, 48137 194440, 48343 194267, 48413 193787, 48708 193830, 48407 193482, 48184 193444, 47874 193775), (62442 194433, 62734 194353, 62667 194173, 62344 194085, 62442 194433), (29773 193309, 29541 193874, 29214 193807, 29232 194232, 29582 194288, 29814 194159, 30093 194385, 30249 194423, 30335 194160, 30128 193987, 29784 193307, 29789 193047, 29773 193309), (42266 193592, 42239 193769, 41916 194086, 41853 194262, 42114 194375, 42438 194420, 42539 193803, 42450 193365, 42266 193592), (175714 194126, 175722 194394, 176015 194394, 175964 194107, 175714 194126), (61163 194009, 61203 194385, 61626 194321, 61848 194208, 61777 193840, 61553 193739, 61230 193722, 61163 194009), (33350 193879, 33328 194273, 33488 194346, 33761 194297, 33782 193761, 33543 193469, 33350 193879), (158081 192731, 158197 192995, 158095 193411, 157684 193911, 157875 194247, 158021 194319, 158262 194344, 158405 194226, 158489 194078, 158465 193697, 158185 193386, 158294 192918, 158209 192604, 158227 192466, 158045 192345, 158081 192731), (46073 193881, 46125 194254, 46556 194344, 46730 194273, 46924 194034, 46246 193516, 46073 193881), (159606 193665, 159488 194192, 159785 194343, 160152 194217, 160277 193976, 160165 193721, 159756 193643, 159606 193665), (44271 193392, 44004 193379, 44254 193874, 44231 193998, 44374 194038, 44517 194307, 44804 194341, 45072 194232, 45162 194130, 45040 193776, 44842 193569, 44649 193138, 44271 193392), (163144 192776, 163068 192823, 162975 193075, 163009 193227, 162828 193660, 162720 194082, 162877 194300, 163205 194316, 163455 194073, 163470 193876, 163243 193550, 163162 193185, 163253 192518, 163144 192776), (26004 193508, 25922 193589, 25951 193694, 26057 193801, 26238 194279, 26420 194296, 26551 194193, 26223 193678, 26053 193185, 26004 193508), (27439 193844, 27542 194044, 27814 194235, 27961 194228, 28203 194030, 28218 193736, 27697 193402, 27439 193844), (24493 185403, 24479 185887, 24541 186990, 24509 187727, 24430 188269, 24481 189333, 24422 189740, 24452 190503, 24451 191171, 24397 192123, 24503 193203, 24449 193496, 24284 193754, 24185 194065, 24558 194220, 24865 194198, 25045 193943, 25055 193827, 24932 193545, 24839 193498, 24653 193162, 24771 192577, 24764 191969, 24714 191595, 24707 190978, 24727 190816, 24710 189658, 24642 189289, 24678 188174, 24608 187420, 24547 186989, 24636 186277, 24621 185500, 24544 185238, 24493 185403), (49842 193859, 49657 194061, 49978 194217, 50100 194045, 50131 193931, 49879 193245, 49842 193859), (23018 191672, 22943 192080, 22932 192471, 23060 193128, 23090 192459, 23060 191118, 23018 191672), (26043 190067, 26015 191212, 26035 192008, 26017 192761, 26051 193120, 26093 192818, 26110 191988, 26089 191219, 26102 190439, 26058 190069, 26041 189459, 26043 190067), (44476 192139, 44668 192327, 44655 193023, 44756 192765, 44727 192699, 44817 192375, 44694 191992, 44476 192139), (159598 192107, 159671 192592, 159647 192999, 160017 192873, 159961 192512, 160066 192284, 160052 192033, 159805 192007, 159598 192107), (31991 191129, 32052 191898, 32005 192683, 32022 192755, 32068 191910, 32011 191004, 31991 191129), (37262 192419, 37268 192670, 37351 192428, 37316 192090, 37262 192419), (42281 192071, 42458 192623, 42447 191718, 42281 192071), (29579 185477, 29703 186302, 29524 186923, 29515 187178, 29676 187884, 29510 188456, 29500 188733, 29632 189398, 29528 190016, 29530 190275, 29803 190975, 29583 191605, 29576 191813, 29812 192500, 30042 191949, 30027 191690, 29812 190973, 30065 190421, 29989 189374, 30059 188755, 29916 187933, 30011 187200, 29884 186404, 29918 185683, 29772 185070, 29579 185477), (161196 192009, 161202 192336, 161456 192401, 161350 192131, 161450 191795, 161196 192009), (170763 191756, 170736 192146, 170891 191972, 170854 191852, 170887 191712, 170763 191756), (159881 190521, 159635 190771, 159644 191339, 159781 191399, 160016 191369, 160066 190841, 160005 190520, 159881 190521), (163143 190705, 163179 190854, 163092 191124, 163299 190965, 163299 190653, 163143 190705), (161589 189739, 161154 190610, 161192 190706, 161380 190809, 161290 190597, 161773 189833, 161836 189672, 161765 189552, 161495 189434, 161589 189739), (44755 189912, 44788 189969, 44725 190777, 44855 189982, 44735 189364, 44755 189912), (49935 189333, 49487 189800, 49438 190214, 49462 190717, 49815 190775, 49941 190680, 49938 190108, 49971 189300, 49926 189296, 49935 189333), (22994 187415, 23006 188131, 23047 188563, 23038 189319, 22984 190130, 23058 190731, 23080 190104, 23061 188559, 23075 188184, 23073 187005, 23058 186673, 22994 187415), (57410 190727, 57778 190678, 57745 190293, 57421 190132, 57410 190727), (170864 189523, 170735 190290, 170744 190441, 170865 190429, 170833 190307, 171216 189818, 171101 189459, 170853 189190, 170864 189523), (46273 189561, 46219 190366, 46652 189848, 46339 189220, 46418 189135, 46253 189085, 46273 189561), (158089 190319, 158129 190356, 158093 190311, 158228 189934, 158225 189841, 158160 189790, 158089 190319), (31985 189581, 32045 190194, 32004 189439, 31985 189581), (142628 185723, 142888 186338, 142558 186796, 142628 187184, 142576 187611, 142845 187901, 142621 188368, 142669 188724, 142641 189099, 142921 189430, 142968 189968, 143357 189637, 143359 188953, 143292 188552, 143367 188157, 143405 187249, 143350 186986, 143385 186202, 143309 185469, 142628 185723), (159607 189243, 159635 189500, 159611 189802, 159699 189871, 159995 189839, 159993 189661, 159842 189443, 159946 189026, 159607 189243), (163150 188821, 163029 189067, 163085 189330, 163041 189619, 163187 189782, 163372 189755, 163312 189267, 163371 188864, 163354 188747, 163150 188821), (44706 188030, 44801 188414, 44776 188712, 44823 188420, 44709 187756, 44706 188030), (46278 187978, 46223 188368, 46238 188565, 46328 188422, 46374 187984, 46267 187725, 46278 187978), (163224 187312, 162843 187350, 162868 187451, 162822 187849, 162846 188366, 163129 188309, 163330 188171, 163275 187726, 163318 187231, 163224 187312), (170841 188301, 171059 188117, 171000 187936, 170864 187788, 170841 188301), (44701 187254, 44704 187604, 44799 187315, 44794 186900, 44701 187254), (177618 186130, 177419 186565, 177371 186827, 177566 187314, 177526 186963, 177626 186122, 177455 185383, 177618 186130), (57537 186474, 57428 187289, 57676 186550, 57495 186090, 57537 186474), (53693 186336, 53653 186763, 53757 187140, 53688 186768, 53783 186392, 53780 186140, 53693 186336), (161523 186449, 161546 186650, 161453 187000, 161722 186778, 161714 186432, 161523 186449), (155590 186345, 155567 186630, 155615 186726, 155593 186809, 155684 186836, 155665 186712, 155779 186336, 155774 186202, 155590 186345), (163174 185763, 162816 185810, 162768 186315, 162835 186685, 162819 186817, 163186 186813, 163329 186722, 163305 186168, 163319 185558, 163174 185763), (170825 186705, 170949 186486, 170819 186173, 170825 186705), (49677 186003, 49801 186269, 49965 186474, 50089 186338, 50017 186210, 49967 185923, 49677 186003), (141011 185896, 140982 186084, 141020 186255, 141238 186264, 141191 186028, 141363 185497, 141011 185896), (35720 183697, 35761 183560, 35763 183112, 35720 183697), (165480 180095, 165380 180532, 165318 180577, 165198 180808, 165227 181148, 165304 181357, 165532 181681, 165380 182066, 165300 182433, 165303 182607, 165411 182912, 165499 182967, 165499 182809, 165419 182487, 165551 181684, 165408 180939, 165535 180053, 165480 180095), (44586 182124, 44668 182248, 44714 182500, 44812 182284, 44698 181912, 44586 182124), (136162 182001, 136254 182342, 136394 182479, 136409 182156, 136226 181961, 136340 181596, 136348 181416, 136162 182001), (23017 180389, 23035 181174, 23015 182369, 23070 182439, 23062 179954, 23017 180389), (158220 181360, 158095 181758, 158081 181996, 158182 181825, 158244 181340, 158206 181265, 158220 181360), (48339 180080, 48302 180423, 48367 180847, 48454 181017, 48369 180480, 48442 180094, 48437 179871, 48339 180080), (44645 180626, 44710 180854, 44769 180714, 44678 180351, 44645 180626), (143611 179937, 143294 180644, 143707 180012, 143708 179790, 143545 179764, 143611 179937), (136215 179946, 136222 180155, 136352 180125, 136330 179995, 136389 179572, 136215 179946), (52087 176988, 52120 177105, 51989 177457, 51913 177837, 52195 178625, 52114 179032, 51970 179350, 51985 179468, 52125 179712, 52147 179036, 52215 178630, 52125 177951, 52177 177477, 52212 176932, 52087 176988), (165350 178440, 165421 178611, 165360 178814, 165555 178822, 165564 178245, 165350 178440), (143527 178410, 143446 178743, 143709 178566, 143708 178123, 143426 178119, 143527 178410), (143314 176484, 143312 176919, 143273 177065, 143271 177467, 143779 177295, 143732 176802, 143779 176492, 143759 176275, 143314 176484), (165449 176605, 165350 176927, 165362 177137, 165295 177335, 165552 177366, 165540 177028, 165598 176688, 165582 176489, 165449 176605), (39530 176961, 39587 176664, 39471 176107, 39530 176961), (165360 175423, 165367 175621, 165475 175920, 165561 175952, 165480 175493, 165484 175278, 165360 175423), (143396 175088, 143461 175327, 143437 175544, 143607 175733, 143733 175731, 143643 175022, 143396 175088), (44687 174858, 44791 175237, 44731 175686, 44795 175239, 44679 174577, 44687 174858), (44657 173310, 44753 173697, 44665 174078, 44676 174456, 44760 174133, 44795 173709, 44677 173137, 44657 173310), (137774 171960, 137979 172178, 137837 172568, 137847 172646, 137987 172170, 137969 171792, 137756 171616, 137774 171960), (152083 171801, 152018 172261, 152160 171813, 152171 171648, 152083 171801), (141575 171563, 141422 171621, 141312 171780, 141426 172007, 141398 172155, 141553 172174, 141529 171980, 141624 171488, 141575 171563), (155577 171618, 155554 172044, 155607 172103, 155601 171999, 155724 171646, 155737 171334, 155577 171618), (38656 163287, 38350 163400, 38268 163378, 38214 163473, 38392 163932, 38651 164128, 38559 164541, 38566 164927, 38634 165150, 38481 165411, 38551 165706, 38548 166094, 38680 166718, 38544 167003, 38484 167388, 38614 167872, 38472 168053, 38819 168346, 38509 168819, 38496 168933, 38586 169185, 38545 169708, 38744 170692, 38624 171113, 38591 171428, 38632 171886, 38737 172072, 38766 171850, 38716 171476, 38768 170981, 38695 169976, 38805 169650, 38777 169521, 38836 168729, 38818 168003, 38798 167650, 38885 167178, 38793 166109, 38883 165774, 38851 165624, 38867 164959, 38783 164565, 38791 164089, 39089 163621, 39201 163292, 39142 163218, 38656 163287), (148457 170801, 148364 171277, 148515 170778, 148457 170801), (152025 170266, 151961 170613, 152022 171043, 152183 171199, 152165 170935, 152035 170650, 152141 170287, 152143 170086, 152025 170266), (137890 170651, 137818 171074, 138018 170727, 138007 170518, 137831 170353, 137890 170651), (44670 170557, 44701 170611, 44697 170908, 44764 170622, 44682 170280, 44670 170557), (141487 170053, 141433 170435, 141540 170814, 141610 170872, 141604 170762, 141460 170448, 141599 170075, 141666 169670, 141487 170053), (33504 166659, 33479 167051, 33489 167836, 33542 168227, 33477 169012, 33526 169757, 33500 170191, 33495 170754, 33586 170222, 33601 169777, 33520 169045, 33573 168234, 33496 167488, 33579 166681, 33488 166037, 33504 166659), (158069 170132, 158053 170419, 158163 170200, 158202 169766, 158069 170132), (146912 169728, 146797 170091, 146799 170278, 146914 170230, 146897 170121, 146972 169674, 146846 169438, 146912 169728), (34994 168973, 35034 169350, 35021 169930, 35200 169338, 35160 168962, 34994 168630, 34994 168973), (151900 164557, 151889 164875, 151832 165136, 151878 165267, 151840 165422, 151898 165649, 151844 166148, 151902 166423, 151893 166626, 151959 166795, 151903 167001, 151923 167192, 151860 167486, 151857 167722, 151925 167968, 152116 168302, 151883 169017, 151897 169249, 151986 169502, 152159 169681, 152198 169278, 152137 169072, 152189 168836, 152144 168682, 152225 168196, 152184 167895, 152219 167640, 152165 167513, 152215 167360, 152180 167122, 152241 166857, 152226 166595, 152157 166352, 151986 166013, 152185 165570, 152240 165350, 152232 164988, 152174 164797, 152246 164401, 151900 164557), (148361 169084, 148388 169514, 148645 169642, 148717 169636, 148573 169273, 148715 168922, 148718 168805, 148587 168802, 148361 169084), (137804 169125, 137756 169617, 137891 169488, 138019 169237, 138014 169067, 138114 168698, 137718 168623, 137804 169125), (159637 169617, 159909 169552, 159834 169288, 159859 169054, 159583 168898, 159637 169617), (141864 163286, 141587 163273, 141434 163320, 141183 163482, 141105 163479, 141070 163577, 141299 163903, 141303 164299, 141335 164839, 141380 165044, 141319 165238, 141260 165727, 141271 165965, 141362 166212, 141303 166506, 141355 166601, 141294 166706, 141364 166985, 141325 167469, 141382 167757, 141643 168071, 141443 168461, 141354 168539, 141326 168805, 141359 168925, 141328 169071, 141403 169301, 141671 169583, 141600 169161, 141488 168890, 141609 168589, 141647 168073, 141601 167696, 141664 167433, 141559 167319, 141672 167169, 141607 166919, 141692 166375, 141623 166139, 141639 165873, 141597 165758, 141654 165647, 141649 165357, 141702 165146, 141665 164965, 141685 164782, 141587 164599, 141675 164200, 141560 164218, 141680 164179, 141986 163434, 141962 163164, 141864 163286), (41997 168589, 42010 168852, 42379 169053, 42396 168635, 42281 168339, 41997 168589), (158040 167732, 158030 167869, 158156 168198, 158071 168666, 158192 168204, 158104 167823, 158172 167658, 158040 167732), (155746 167656, 155427 167766, 155425 167837, 155563 168133, 155407 168406, 155414 168621, 155551 168601, 155830 168452, 155754 168080, 155849 167520, 155746 167656), (34980 167460, 35015 167798, 34994 168232, 34994 168611, 35142 168191, 35199 167788, 35199 167400, 34983 167077, 34980 167460), (136341 167976, 136235 168440, 136272 168415, 136395 167926, 136266 167607, 136301 167483, 136176 167478, 136341 167976), (159559 167397, 159593 167804, 159563 168277, 159600 168201, 159869 167997, 159856 167732, 159988 167479, 159988 167239, 159787 167238, 159559 167397), (148451 167369, 148331 167555, 148338 168036, 148680 168091, 148758 167600, 148699 167237, 148451 167369), (150453 167595, 150416 168031, 150465 168061, 150562 167498, 150453 167595), (137720 167181, 137781 167581, 137737 168015, 138125 167876, 138017 167515, 138132 167168, 138130 167057, 137970 167038, 137720 167181), (44641 167525, 44666 167766, 44751 167554, 44809 166797, 44641 167525), (28173 167388, 28287 167762, 28321 167400, 28282 167017, 28173 167388), (158109 166659, 158019 167050, 158033 167165, 158151 167168, 158097 167051, 158179 166598, 158107 166505, 158109 166659), (35302 164207, 34992 164324, 34994 164743, 34941 165145, 34961 165914, 35013 166288, 34986 166683, 34983 167070, 35406 166592, 35402 166398, 35253 166222, 35265 166072, 35404 165996, 35409 165759, 34978 165522, 35423 165069, 35405 164691, 35124 164440, 35391 164441, 35401 164207, 35302 164207), (155697 166108, 155402 166229, 155496 166601, 155441 166978, 155844 167054, 155765 166527, 155854 165827, 155697 166108), (144789 165936, 144779 166343, 144934 166395, 144789 166546, 144820 166813, 144787 166972, 145021 166867, 145160 166432, 145226 165927, 144789 165936), (136333 166426, 136208 166864, 136338 166428, 136316 166375, 136333 166426), (159548 166669, 159763 166369, 159765 166032, 159568 165981, 159548 166669), (148343 166141, 148319 166439, 148470 166341, 148442 166208, 148595 165826, 148343 166141), (137689 165654, 137733 166043, 137717 166418, 138113 166365, 138130 166183, 138084 165946, 138126 165705, 138104 165498, 137689 165654), (28148 163377, 27772 163478, 27736 163631, 27901 163928, 27982 163952, 28206 164278, 28179 164623, 28275 165014, 28153 165815, 28286 166291, 28326 165859, 28307 165026, 28340 164693, 28289 164255, 28359 163943, 28637 163384, 28281 163301, 28148 163377), (43965 163427, 43888 163397, 43474 163474, 43530 163651, 43845 163698, 44003 163622, 44369 163910, 44580 164441, 44569 164752, 44663 165069, 44734 165175, 44678 165539, 44694 165901, 44795 165607, 44844 165192, 44700 164408, 44808 164093, 45024 163839, 45089 163526, 45067 163450, 44834 163209, 44710 163208, 43965 163427), (33087 163294, 32745 163421, 33417 164013, 33459 164776, 33449 165486, 33483 165873, 33623 165213, 33504 164376, 33571 164052, 33754 163787, 33831 163511, 33515 163431, 33269 163277, 33087 163294), (158037 165129, 158015 165573, 158077 165575, 158054 165512, 158188 165180, 158176 165011, 158006 164722, 158037 165129), (136197 164757, 136230 164904, 136135 165253, 136135 165451, 136290 165449, 136287 165276, 136383 164990, 136343 164873, 136358 164680, 136197 164757), (150327 164843, 150418 165280, 150545 165402, 150531 165197, 150416 164891, 150467 164544, 150327 164843), (146780 165346, 146957 165229, 146918 165076, 146936 164930, 146755 164841, 146780 165346), (144826 164480, 144816 164877, 144768 165037, 144806 165332, 145245 165214, 145176 164777, 145201 164398, 144826 164480), (42363 164969, 42468 165261, 42485 164622, 42363 164969), (139739 164614, 139691 164920, 139786 165092, 139974 165134, 139974 164989, 139873 164681, 139916 164309, 139739 164614), (159605 164663, 159603 164750, 160160 163772, 160159 163756, 159605 164663), (156939 163901, 156948 163967, 157246 164184, 157084 164515, 157077 164732, 157596 164475, 157252 164174, 157138 163824, 157327 163709, 157466 163347, 157352 163210, 157172 163198, 156939 163901), (178576 164017, 178620 164138, 178577 164538, 178633 164718, 178756 164101, 178677 163848, 178576 164017), (157727 163649, 157700 163603, 157569 163707, 157943 164225, 158183 164179, 158234 163912, 158345 163842, 158458 163463, 158168 163433, 157727 163649), (177401 163625, 177538 164063, 177557 163655, 177477 163564, 177401 163625), (42039 163918, 42055 164030, 42506 164026, 42621 163613, 42777 163385, 42417 163441, 42277 163359, 42060 163432, 41705 163291, 42039 163918), (37140 163326, 36819 163429, 36717 163382, 36506 163553, 36811 163918, 37250 163858, 37493 163283, 37140 163326), (163316 163542, 163302 163913, 163474 163639, 163504 163416, 163316 163542), (35027 163889, 35602 163689, 35673 163394, 35366 163435, 35212 163348, 35027 163889), (40231 163266, 39875 163405, 40214 163806, 40379 163857, 40774 163756, 40911 163509, 40621 163420, 40445 163248, 40231 163266), (134976 163447, 135128 163749, 135237 163626, 135248 163274, 134976 163447), (165497 159946, 165290 160753, 165485 161496, 165299 162341, 165570 162971, 165549 162368, 165688 161587, 165497 160857, 165598 159977, 165429 159537, 165497 159946), (46189 156962, 46282 156684, 46058 156363, 46189 156962), (72014 149212, 72042 149548, 71951 149946, 72015 150332, 71963 150596, 72017 151106, 72010 151507, 72055 151871, 72011 152423, 72025 152655, 72007 153158, 72061 153420, 72028 153629, 72081 154190, 72062 154662, 72106 154959, 72076 155555, 72143 155847, 71960 156492, 72029 156586, 72339 156530, 72632 156752, 72952 156710, 73070 156856, 73230 156588, 73084 155852, 73085 155443, 73012 155097, 73221 154265, 72875 153570, 73079 152753, 72829 152043, 72976 151231, 72700 150590, 72578 150564, 72713 150401, 72916 149697, 72679 149054, 72014 149212), (76012 156600, 76214 156766, 76451 156744, 76631 156432, 76435 156222, 76129 156180, 76012 156600), (68803 155863, 68667 156289, 68825 156633, 69051 156741, 69393 156562, 69487 156451, 69353 155672, 68812 155616, 68803 155863), (65655 154692, 65621 155020, 65858 155120, 65665 155322, 65766 155532, 65413 156017, 65296 156279, 65306 156434, 65628 156668, 65991 156651, 66143 156205, 65918 155949, 65805 155909, 65861 155621, 65843 155512, 65945 155084, 65741 154764, 65916 154326, 65655 154692), (67526 154954, 67624 155030, 67182 155806, 67014 156354, 67071 156431, 67696 156584, 67789 156521, 67358 155888, 67706 155072, 67701 154936, 67288 154501, 67526 154954), (51234 147818, 51198 148021, 51427 148610, 51053 149132, 51090 149476, 51062 149845, 51514 150136, 50897 150476, 50854 151092, 50903 151466, 50837 151815, 51378 151724, 50837 151926, 50862 152455, 50889 152633, 50891 153313, 51468 153250, 51067 153688, 51213 154095, 50916 154527, 51032 155061, 50908 155143, 50873 155279, 50889 155444, 51349 155609, 51137 156416, 51305 156573, 52008 156222, 52010 156167, 51603 155538, 52019 154821, 52012 154481, 51731 153953, 51623 153275, 51602 153213, 51841 152372, 51578 151653, 51734 150851, 51524 150133, 51750 149296, 51541 148569, 51717 148205, 51724 147752, 51324 147690, 51234 147818), (70457 155407, 70600 155759, 70395 155991, 70310 156225, 70362 156418, 70992 156476, 71069 156406, 70945 155889, 70787 155707, 70863 155211, 70457 155407), (63732 155747, 63840 156256, 64085 156353, 64012 156014, 64054 155690, 63732 155747), (53588 153375, 53471 153818, 53398 153884, 53329 154115, 53343 154451, 53592 154993, 53452 155344, 53375 155440, 53345 155641, 53380 155982, 53496 156183, 53629 156286, 53612 155762, 53683 155501, 53651 155365, 53705 154908, 53575 154222, 53624 153929, 53685 153219, 53588 153375), (57235 153680, 57329 153970, 57197 154780, 57257 155153, 57237 155276, 57278 155534, 57257 156222, 57476 156070, 57492 155863, 57576 155657, 57606 155178, 57202 154779, 57396 154397, 57487 154314, 57538 154109, 57502 153922, 57657 153484, 57225 153423, 57235 153680), (46263 151562, 46125 152377, 46288 153109, 46147 153921, 46303 154650, 46095 155971, 46482 155780, 46388 155417, 46447 155267, 46401 155026, 46427 154768, 46338 154268, 46234 153909, 46333 153728, 46410 153228, 46357 152713, 46288 152475, 46206 152366, 46272 152227, 46384 151679, 46277 151255, 46307 151176, 46141 150982, 46263 151562), (63743 152778, 63749 153373, 63718 154237, 63777 154527, 63678 154929, 63717 155662, 64025 155544, 63882 155274, 64000 154947, 63737 154926, 64026 154757, 63961 154477, 64124 154045, 63807 153743, 64102 153275, 63910 152940, 63997 152536, 63743 152778), (68831 154157, 68853 154511, 68935 154665, 68861 154859, 68823 155294, 69159 155148, 69341 154998, 69319 154108, 68831 154157), (47717 154277, 47674 155049, 48183 154621, 48172 154277, 48081 154081, 48170 154031, 48167 153688, 47653 153550, 47717 154277), (78490 153983, 78372 154126, 78395 154397, 78360 154795, 78784 154793, 78803 154464, 78711 154310, 78765 154059, 78730 153918, 78751 153796, 78490 153983), (70710 153740, 70602 153819, 70493 153977, 70538 154225, 70496 154517, 70606 154594, 70854 154635, 70789 154155, 70896 153432, 70710 153740), (69037 152560, 68793 152624, 68804 152991, 68882 153129, 68813 153309, 68817 153682, 69123 153612, 69302 153465, 69308 153011, 69360 152780, 69360 152303, 69037 152560), (47856 152110, 47679 152215, 47697 152733, 47653 153508, 48209 153128, 48231 152586, 48180 152082, 47856 152110), (70408 148868, 70473 149204, 70433 149748, 70471 149979, 70403 150238, 70412 150532, 70473 150754, 70432 150939, 70447 151357, 70512 151519, 70815 151823, 70537 152287, 70444 152994, 70475 153080, 70909 153309, 70908 152701, 70850 152588, 70914 152464, 70888 152191, 70919 151856, 70862 151422, 70886 151112, 70848 151038, 70888 150955, 70941 150187, 70841 149877, 70613 149552, 70820 149217, 70902 148698, 70884 148315, 70408 148189, 70408 148868), (78545 152349, 78390 152715, 78335 153158, 78454 153219, 78723 153239, 78716 153033, 78637 152780, 78737 152562, 78736 152177, 78545 152349), (57275 149332, 57541 150035, 57325 150858, 57466 151606, 57321 152420, 57232 152783, 57228 152979, 57338 152847, 57646 152732, 57454 152384, 57644 151656, 57633 151471, 57341 150865, 57547 150037, 57329 149297, 57376 149023, 57275 149332), (74479 151949, 74536 152354, 74462 152912, 74790 152499, 74761 152292, 74869 151866, 74479 151949), (67528 151948, 67377 152363, 67632 152025, 67622 151831, 67466 151766, 67528 151948), (68878 149395, 68985 149612, 68912 149828, 68855 150348, 68892 150412, 69342 150676, 69067 151048, 68869 151245, 68918 151567, 68853 151982, 69357 152144, 69325 151675, 69263 151473, 69298 151219, 69347 150675, 69278 150305, 69288 150120, 69216 149935, 69282 149722, 69302 149134, 68856 148700, 68878 149395), (53629 151451, 53544 151818, 53547 151994, 53674 152109, 53650 151877, 53734 151510, 53724 151378, 53629 151451), (63741 151287, 63764 151429, 63720 151637, 63961 151716, 63874 151426, 63940 151381, 63929 151093, 63741 151287), (47904 150608, 47847 150753, 48053 151003, 47733 150994, 47731 151398, 47881 151684, 48153 151552, 48163 151071, 48120 150596, 47904 150608), (74517 150581, 74548 150799, 74523 151057, 74841 151108, 74731 150749, 74739 150511, 74517 150581), (46255 150027, 46169 150509, 46259 150031, 46203 149654, 46151 149581, 46255 150027), (63739 149111, 63881 149848, 63832 150253, 63972 149852, 63811 149478, 64105 149010, 63819 148746, 63739 149111), (136812 149201, 136658 149819, 136793 149767, 136888 149605, 137001 149187, 136812 149201), (65792 149323, 65714 149689, 65857 149351, 65852 149265, 65771 149181, 65792 149323), (74569 149249, 74581 149258, 74769 148808, 74569 149249), (72802 146626, 72577 147464, 72045 147978, 72063 148380, 72019 148575, 72012 149123, 72648 148921, 73014 148120, 72586 147462, 73053 146715, 73118 146142, 72802 146626), (46124 149076, 46217 148908, 46230 148472, 46124 149076), (67273 148777, 67294 149013, 67454 149069, 67414 148879, 67549 148451, 67273 148777), (69177 147490, 69198 147615, 69009 148116, 69292 147675, 69294 147483, 69177 147490), (70644 147044, 70626 147223, 70455 147463, 70407 147915, 70809 147754, 70848 147162, 70807 147009, 70644 147044), (63912 147513, 63860 147762, 64010 147516, 64033 147374, 63872 147325, 63912 147513), (179641 143901, 179269 144018, 178732 144497, 178796 144708, 178685 145126, 178868 145464, 178579 145612, 178731 146391, 178677 146679, 178925 146788, 179068 146714, 179193 146150, 179120 145937, 179508 145842, 179438 145472, 179811 145368, 180208 144892, 180234 144458, 180520 144273, 180440 143870, 180023 143838, 179641 143901), (72854 144925, 72847 145230, 73096 145356, 73002 145022, 73091 144594, 72854 144925), (29369 143801, 29414 144177, 29775 144161, 30074 144289, 29846 144059, 29741 143724, 29369 143801), (72836 143128, 72748 143306, 72761 143536, 72673 143972, 73103 143923, 73102 143746, 73004 143469, 73096 143165, 73109 142870, 72836 143128), (214087 143097, 213856 143626, 214142 143746, 214285 143897, 214509 143890, 214833 143746, 214531 143156, 214400 143089, 214172 142774, 214087 143097), (215788 143249, 215606 143533, 215825 143862, 216001 143875, 216421 143745, 216392 142954, 215788 143249), (196122 143060, 196145 143128, 196033 143726, 196105 143863, 196783 143655, 196187 142712, 196122 143060), (210363 137606, 210295 138013, 210362 138859, 210273 139830, 210325 140248, 210287 140340, 210324 140717, 210219 141522, 210334 142654, 210280 142925, 210070 143158, 209988 143524, 210048 143550, 210253 143839, 210439 143846, 210806 143687, 210743 143317, 210486 142999, 210474 142615, 210568 141965, 210541 141434, 210531 140661, 210501 139895, 210556 139360, 210468 138353, 210511 138072, 210500 137657, 210380 136798, 210363 137606), (208834 133733, 208849 134125, 208130 134105, 207982 134235, 207983 134382, 207914 134623, 207881 135185, 207785 135986, 207808 136755, 207765 137542, 207813 138305, 207766 139099, 207830 139509, 207762 139869, 207857 140231, 207873 141083, 207789 141388, 207860 141782, 207900 142282, 207957 142686, 207938 142922, 207678 143247, 207641 143391, 207955 143694, 208155 143668, 208252 143708, 208532 143593, 208830 143841, 208926 143843, 209133 143756, 208946 142640, 208963 141932, 208922 141491, 208943 141097, 208939 140097, 208805 139584, 208817 139525, 208806 138809, 208814 138770, 208741 137874, 208725 137280, 208732 137201, 208712 136508, 208673 136281, 208810 135706, 208841 134922, 208786 134815, 208878 134320, 208902 133760, 208906 133321, 208834 133733), (211852 143319, 211732 143619, 211818 143797, 211917 143805, 212291 143684, 212355 143717, 212455 143459, 212051 143027, 211912 142911, 211852 143319), (197247 143463, 197159 143551, 197275 143538, 197655 143804, 197723 143784, 197651 143379, 197247 143463), (199039 143036, 198644 143375, 198594 143545, 199089 143798, 199253 143787, 199404 143711, 199403 143324, 199201 142992, 199195 142416, 199039 143036), (192401 135137, 192451 135538, 192409 136552, 192478 137081, 192380 137496, 192344 138668, 192357 139440, 192301 140158, 192347 140994, 192303 141696, 192314 142165, 192368 142443, 192337 142935, 192016 143412, 192058 143782, 192445 143739, 192606 143792, 192880 143561, 192771 143139, 192529 142881, 192590 142478, 192582 142237, 192680 142065, 192627 141923, 192722 141196, 192568 140689, 192620 140531, 192578 140352, 192453 140190, 192619 139907, 192677 139620, 192505 139110, 192620 138981, 192362 138664, 192648 138058, 192569 137832, 192596 137577, 192519 136683, 192424 136321, 192569 135506, 192522 135131, 192415 134726, 192401 135137), (204464 143160, 204482 143482, 204792 143784, 205070 143709, 205147 143630, 205151 142910, 204464 143160), (190046 143400, 189933 143593, 190176 143603, 190456 143770, 190518 143433, 190470 143059, 190180 142766, 190046 143400), (193816 143304, 193791 143699, 193977 143679, 194089 143743, 194339 143692, 194615 143473, 193921 143077, 193816 143304), (188625 138913, 188485 139340, 188433 139740, 188487 140114, 188696 140444, 188479 140891, 188419 141295, 188461 141671, 188655 142005, 188595 142797, 188421 143108, 188396 143322, 188194 143417, 188161 143692, 188356 143669, 188466 143734, 188716 143686, 188952 143733, 188920 143484, 188806 143127, 188646 142802, 188751 142017, 188688 141291, 188746 140921, 188725 140824, 188717 140110, 188662 139736, 188732 139373, 188717 139275, 188747 138408, 188625 138913), (202785 143172, 202878 143534, 203301 143711, 203536 143601, 203671 143310, 202949 142873, 202785 143172), (201195 142717, 200890 142760, 201032 143162, 200957 143285, 201088 143286, 201240 143596, 201428 143619, 201616 143697, 201801 143542, 201869 143424, 201795 143055, 201410 142548, 201195 142717), (206282 142731, 206250 142949, 206137 143232, 206122 143420, 206313 143632, 206542 143694, 206752 143636, 206870 143402, 206891 143210, 206662 142685, 206282 142731), (181212 142495, 181065 142923, 180983 143333, 181147 143519, 181380 143612, 181584 143589, 181727 143345, 181749 143124, 181475 142985, 181236 142489, 181151 142092, 181212 142495), (182863 143594, 183201 143612, 183286 143478, 182775 143100, 182863 143594), (200234 143484, 200516 143602, 200647 143370, 200257 143328, 200234 143484), (184893 142960, 184222 143169, 184102 143139, 184470 143541, 184630 143589, 184988 143082, 185158 143063, 184932 142716, 184893 142960), (179573 143332, 179653 143398, 179928 143235, 179932 143101, 179675 142630, 179573 143332), (51816 142917, 51852 143065, 51828 143222, 52000 143273, 51971 143033, 52026 142632, 51816 142917), (214134 138896, 214126 140401, 214118 140477, 214138 141223, 214090 142012, 214172 142736, 214298 142482, 214369 142160, 214246 141969, 214230 141198, 214185 140435, 214229 139648, 214140 138897, 214165 138119, 214157 138007, 214134 138896), (69390 142136, 69233 142635, 69412 142115, 69226 141773, 69390 142136), (72913 139495, 72959 139583, 72733 140370, 72739 140512, 73116 141101, 72723 141810, 72733 142185, 73017 142321, 72922 141942, 72970 141825, 73161 141097, 72849 140402, 73175 139699, 73208 139294, 72753 138960, 72913 139495), (201355 141206, 201321 141508, 201399 141613, 201362 141977, 201412 142168, 201498 142056, 201536 141667, 201467 141207, 201416 141161, 201355 141206), (198788 141158, 198757 141556, 198796 141945, 199199 142075, 199227 141871, 199169 141480, 199205 141092, 199184 140881, 198788 141158), (202921 141605, 202964 141185, 202941 141081, 202921 141605), (199074 138325, 199190 139117, 199082 139872, 199125 140279, 199179 140431, 199152 139928, 199194 139119, 199156 138740, 199142 138062, 199074 138325), (206426 134601, 206427 134809, 206586 135462, 206571 135892, 206431 136168, 206605 137019, 206563 137800, 206576 137868, 206576 138544, 206552 139334, 206683 140304, 206697 140150, 206673 139430, 206723 138652, 206771 138591, 206722 138558, 206655 137873, 206700 137089, 206730 137051, 206698 137032, 206700 136285, 206668 135906, 206697 135544, 206736 135499, 206705 135464, 206729 134764, 206636 134371, 206426 134601), (182757 140117, 182978 139890, 182970 139688, 182756 139415, 182757 140117), (46050 139560, 46244 139854, 46241 139565, 46121 139382, 46050 139560), (72777 137718, 72692 138174, 72813 138483, 72738 138845, 72970 138501, 73088 138408, 73181 138255, 73130 137816, 72994 137658, 72760 137538, 72777 137718), (182758 138438, 182931 138316, 182897 138157, 182758 137977, 182758 138438), (188636 137310, 188685 137711, 188752 137882, 188755 137737, 188698 137158, 188636 137310), (46121 137256, 46077 137283, 46084 137516, 46224 137243, 46194 136964, 46121 137256), (210344 135647, 210405 136230, 210462 135641, 210385 135274, 210391 134870, 210344 135647), (72906 134969, 72736 135436, 72941 134937, 72764 134691, 72906 134969), (74361 134456, 74384 134644, 74477 134648, 74470 134540, 74596 134115, 74361 134456), (81455 133200, 81485 133392, 81339 133738, 81316 133962, 81478 133782, 81614 133460, 81630 133195, 81455 133200), (70938 133183, 70805 133615, 71002 133220, 71022 133051, 70779 132835, 70938 133183), (77847 131676, 77788 131955, 77850 132063, 77837 132269, 77906 132435, 77887 132550, 78169 132097, 78162 131851, 78033 131625, 77812 131490, 77847 131676), (81292 131487, 81392 131868, 81389 132130, 81624 132031, 81603 131810, 81657 131454, 81292 131487), (70718 131287, 70767 131679, 70750 132085, 71085 131900, 71044 131602, 71079 131244, 70718 131287), (74386 131074, 74260 131394, 74268 131595, 74367 131855, 74604 131960, 74588 131629, 74422 131452, 74550 131149, 74551 130893, 74386 131074), (77804 130253, 77939 130489, 77817 130784, 77812 131076, 78037 130849, 78132 130586, 78105 130443, 78157 130204, 78076 130062, 77802 130024, 77804 130253), (81410 129924, 81311 130059, 81347 130329, 81269 130759, 81676 130674, 81578 130265, 81695 129686, 81410 129924), (67444 130264, 67351 130615, 67542 130306, 67569 130084, 67344 129992, 67444 130264), (70929 129619, 70760 129920, 70776 130126, 70693 130553, 71090 130462, 71066 130046, 71137 129825, 71099 129649, 71138 129420, 70929 129619), (72724 130290, 72720 130466, 72864 130522, 72802 130346, 72915 129980, 72724 130290), (74571 129085, 74220 129878, 74223 130039, 74422 130211, 74330 129927, 74637 129110, 74642 129003, 74406 128733, 74571 129085), (79869 129183, 79730 129613, 79936 129208, 79941 129100, 79831 129039, 79869 129183), (77774 128527, 77877 128955, 77793 129458, 78176 129201, 78123 128887, 78203 128434, 77774 128527), (67151 128626, 67245 128768, 67173 128978, 67212 129164, 67177 129363, 67386 129198, 67560 128903, 67538 128483, 67444 128325, 67161 128256, 67151 128626), (69288 128983, 69201 129289, 69346 129014, 69360 128877, 69243 128841, 69288 128983), (81431 126754, 81150 126887, 81276 127434, 81376 127608, 81664 127916, 81464 128283, 81297 128404, 81253 128508, 81311 128788, 81309 129010, 81413 129149, 81700 129270, 81685 128903, 81604 128707, 81682 128490, 81662 128305, 81768 127937, 81656 127530, 81721 127167, 81598 126772, 81607 126582, 81431 126754), (208804 128730, 208921 129178, 208937 128306, 208923 127968, 208804 128730), (63990 128884, 63952 129150, 64113 128851, 63954 128684, 63990 128884), (71047 127649, 71106 127709, 70819 128176, 70735 128764, 70831 128948, 71126 129085, 71096 128690, 70982 128518, 71111 128334, 71107 128097, 71183 127640, 70808 127105, 71047 127649), (74255 125580, 73924 125774, 74301 126447, 74409 126804, 74283 127081, 74184 127651, 74255 128010, 74242 128326, 74529 128031, 74643 127670, 74630 127369, 74527 127158, 74609 126900, 74590 126715, 74858 125845, 74824 125528, 74255 125580), (76402 127808, 76269 128267, 76330 128302, 76303 128223, 76481 127840, 76480 127726, 76330 127582, 76402 127808), (65665 127994, 65663 128172, 65795 128146, 65782 128006, 65853 127725, 65665 127994), (79797 127653, 79770 127860, 79953 127790, 79910 127516, 79752 127456, 79797 127653), (77925 127003, 77798 127121, 77819 127420, 77781 127821, 78208 127795, 78237 127505, 78174 127322, 78198 127060, 78158 126885, 77925 127003), (67259 125562, 66855 125773, 67081 126243, 67294 126429, 67179 126862, 67244 127218, 67169 127718, 67609 127555, 67622 127420, 67558 127130, 67552 126756, 67434 126777, 67547 126728, 67479 126378, 67675 126237, 67811 125899, 67704 125541, 67259 125562), (69195 127624, 69365 127599, 69335 127262, 69160 127259, 69195 127624), (63943 127346, 63911 127582, 64034 127383, 64190 127279, 64022 127265, 63912 127201, 63943 127346), (72779 126862, 72701 127179, 72871 126906, 72865 126775, 72686 126594, 72779 126862), (75992 125549, 75668 125683, 75799 126035, 76147 126328, 76186 126813, 76344 127049, 76463 127062, 76465 126956, 76298 126673, 76510 126432, 76690 125791, 76598 125786, 76470 125622, 76345 125596, 76310 125507, 75992 125549), (46081 126428, 46176 126790, 46166 127047, 46379 126947, 46496 126702, 46439 126403, 46153 126355, 46081 126428), (70541 125538, 70628 125685, 70609 126055, 70678 126401, 70863 126613, 70776 126992, 70805 127017, 71162 126966, 71169 126845, 71030 126566, 71233 126363, 71390 125689, 70936 125751, 70707 125486, 70541 125538), (49675 126499, 49703 126669, 49842 126852, 49872 126552, 49820 126308, 49675 126499), (68981 125524, 68651 125668, 68769 126024, 69026 126341, 69205 126680, 69170 126850, 69299 126767, 69277 126660, 69475 126343, 69661 125780, 69593 125776, 69369 125472, 68981 125524), (65589 125667, 65253 125812, 65212 125765, 65142 125855, 65215 125900, 65405 126242, 65608 126503, 65578 126680, 65836 126784, 65735 126468, 65953 126284, 66138 125876, 66124 125586, 65589 125667), (72563 125677, 72242 125847, 72643 126501, 72945 126299, 73144 125912, 73113 125609, 72943 125584, 72563 125677), (77678 125907, 77647 126146, 77696 126374, 77872 126335, 78283 125907, 78337 125728, 77918 125800, 77792 125661, 77678 125907), (64671 125560, 64367 125680, 64504 126021, 64818 125824, 64900 125534, 64671 125560), (61578 125669, 61661 125862, 61853 126013, 62126 125713, 62132 125518, 61578 125669), (57307 125677, 57331 125713, 57818 125704, 57827 125535, 57307 125677), (50780 119092, 50641 119591, 50387 119820, 50572 119976, 50753 119874, 51023 119515, 51061 119248, 51035 118923, 50780 119092), (52440 110342, 52318 110762, 52658 110283, 52481 110291, 52381 110176, 52440 110342), (90492 73880, 90508 74097, 90745 74443, 90898 74412, 91006 74251, 91250 74080, 91317 73938, 90648 73370, 90492 73880), (95409 74279, 95803 74309, 96000 74157, 95493 73769, 95409 74279), (89095 73380, 89036 73436, 89041 73726, 88737 73881, 88840 74250, 89211 74302, 89346 74254, 89588 74015, 89348 73541, 89359 73292, 89095 73380), (101213 71532, 101237 72214, 101296 72603, 101323 73291, 101161 73606, 101101 73936, 101134 74004, 101499 74244, 101612 74263, 101733 74170, 101926 73735, 101714 73229, 101616 72809, 101711 72599, 101678 72155, 101756 72135, 101745 71291, 101226 71130, 101213 71532), (92948 73383, 92727 73994, 92893 74248, 93180 74242, 93302 74116, 93081 73553, 93314 73641, 93055 73379, 92931 73057, 92948 73383), (96900 73796, 96690 73802, 96952 74201, 97020 74037, 97505 74035, 97612 73826, 97137 73654, 96900 73796), (98362 73445, 97755 73851, 97925 74101, 98106 74134, 98210 74086, 98432 73470, 98397 73368, 98362 73445), (99658 71587, 99664 72041, 99726 72328, 99707 72423, 99859 73116, 99716 73360, 99566 73417, 99467 73644, 99544 74021, 99650 74082, 100045 74129, 100243 73875, 100126 73509, 99968 73194, 99934 72477, 100006 72364, 100018 72192, 99907 71767, 99985 71590, 99917 71429, 100081 71347, 100079 71161, 99631 70867, 99658 71587), (93951 73986, 94226 74112, 94284 73920, 94076 73750, 93951 73986), (102889 72361, 102983 73121, 102920 73391, 102831 73543, 102790 73943, 103141 74099, 103377 74057, 103545 73782, 103350 73432, 103069 73103, 102980 72343, 102892 72123, 102889 72361), (98110 71878, 98302 72616, 98266 71965, 98116 71143, 98110 71878), (90761 71701, 90857 72063, 90827 72078, 90900 72333, 90888 72068, 90955 71667, 90812 71636, 90761 71701), (95501 69458, 95481 69538, 95570 70204, 95530 70315, 95579 70560, 95545 70704, 95624 70940, 95723 71065, 95824 71437, 95810 71834, 95894 71964, 95828 71439, 95789 70716, 95801 70659, 95728 69976, 95753 69884, 95722 69623, 95746 69494, 95652 69119, 95502 68753, 95470 68554, 95501 69458), (102856 66392, 102874 66939, 102964 67569, 102958 67907, 102886 68094, 102956 68591, 102847 68705, 102839 68908, 103170 69206, 103375 69813, 103364 69213, 103331 68484, 103270 67742, 103310 67551, 103243 67012, 103320 66728, 103311 66326, 103019 66098, 102850 65661, 102856 66392), (101279 66021, 101325 66687, 101328 67182, 101446 67817, 101369 67957, 101441 68505, 101282 68592, 101267 69247, 101725 69460, 101797 69595, 101872 69518, 101820 69431, 101714 68364, 101664 67981, 101624 67258, 101656 67131, 101556 66517, 101681 66350, 101653 66245, 101750 66153, 101748 65922, 101289 65615, 101279 66021), (99721 65930, 99940 67172, 99889 66588, 99841 65848, 99720 65436, 99721 65930), (98163 65632, 98248 66055, 98212 65657, 98113 64989, 98163 65632), (98218 59856, 98262 60034, 98199 59533, 98218 59856), (97930 57562, 97989 57883, 98264 57538, 98224 57226, 97930 57562), (98274 57069, 98352 56767, 98340 56650, 98212 56572, 98274 57069)), ((225644 179887, 225630 181166, 225501 181198, 225501 201627, 225491 202402, 225469 202910, 225469 214698, 189190 214698, 189122 214369, 189502 214263, 189441 213910, 189797 213801, 189863 213394, 190234 213290, 190305 212881, 190232 212521, 190597 212416, 190527 212045, 190904 211955, 190968 211543, 191333 211450, 191398 211033, 191769 210930, 191702 210561, 192075 210458, 192010 210090, 192387 209987, 192509 209189, 192779 209101, 192659 208948, 192840 208898, 192807 208707, 193184 208605, 193131 208320, 192997 208265, 192914 208042, 193133 208105, 193491 208130, 193607 207330, 193974 207223, 194033 206825, 194399 206727, 194460 206322, 194830 206217, 194769 205845, 195094 205753, 195088 205710, 195137 205727, 195088 205374, 195460 205270, 195555 204465, 195925 204377, 195870 203991, 196248 203890, 196189 203517, 196562 203414, 196571 202978, 196982 202909, 197032 202509, 196980 202140, 197349 202039, 197301 201665, 197550 201591, 197462 201369, 197687 201403, 197718 201161, 198088 201065, 198164 200648, 198098 200293, 198459 200201, 198419 199815, 198786 199740, 198819 199692, 198820 199339, 198731 199328, 198742 199230, 199210 199075, 199243 198805, 199612 198706, 199570 198329, 199940 198226, 199894 197850, 200267 197748, 200313 197351, 200344 197336, 200361 196961, 200721 196845, 200705 196490, 201051 196387, 201007 195994, 201379 195890, 201419 195494, 201681 195420, 201733 195337, 201797 195323, 201850 195374, 202914 195085, 203286 195013, 203608 195279, 204380 195071, 204758 194997, 205145 195245, 205915 195038, 206292 194965, 206675 195213, 207472 195028, 207513 194984, 207433 194326, 208139 194763, 208187 194751, 208198 194796, 209310 194493, 209652 194785, 210783 194487, 211127 194769, 211887 194564, 211904 194572, 212647 194363, 212663 193969, 213028 193869, 213040 193607, 212897 193507, 212880 193203, 213194 193427, 213421 193366, 213402 192984, 213778 192883, 213784 192115, 214174 191995, 214180 191626, 214532 191562, 214522 191129, 214893 191026, 214877 190640, 215252 190538, 215271 190150, 215642 190045, 215655 189653, 215771 189619, 215781 189353, 216031 189376, 216044 189162, 216112 189138, 216050 188786, 216008 188778, 216004 188689, 216072 188762, 216421 188730, 216428 188669, 216798 188563, 216789 188184, 217163 188081, 217146 187723, 217067 187713, 217038 187607, 217146 187610, 217311 187424, 217524 187367, 217531 187200, 217904 187096, 217905 186326, 218274 186231, 218267 185837, 218640 185733, 218649 185345, 219023 185239, 219029 184851, 219401 184748, 219396 183984, 219761 183882, 219768 183486, 220141 183382, 220142 183149, 220015 183028, 219880 182796, 220142 182801, 220210 182976, 220523 182895, 220515 182507, 220895 182408, 220888 182020, 221261 181916, 221267 181139, 221642 181032, 221644 180654, 222008 180546, 222009 180160, 222387 180058, 222385 179669, 222756 179566, 225644 179887)), ((188743 194702, 188639 195415, 187979 195596, 187463 195051, 187300 194412, 187962 194231, 188743 194702)), ((191618 194689, 191729 195343, 191069 195524, 190334 195040, 190395 194339, 191054 194158, 191618 194689)), ((185622 194782, 185772 195404, 185067 194934, 185117 194659, 185378 194526, 185622 194782)), ((202513 194804, 202501 195148, 202174 195210, 201897 194972, 201465 194406, 202129 194224, 202513 194804)), ((205441 194777, 205470 195090, 205161 195195, 204822 194945, 204525 194343, 205184 194161, 205441 194777)), ((115949 193379, 115652 193181, 115715 193005, 116038 192923, 115949 193379)), ((116700 192741, 116596 193015, 116359 193081, 116203 192877, 116394 192683, 116521 192667, 116700 192741)), ((77515 185401, 77725 185593, 77537 185918, 77288 185961, 76960 185801, 77113 185262, 77515 185401)), ((222757 179018, 222796 179176, 222834 179180, 222757 179400, 222524 179239, 222523 178999, 222757 179018)), ((126075 177767, 125917 178099, 125649 178316, 125278 178528, 125164 178494, 125215 178384, 125585 178287, 125820 177765, 126075 177767)), ((22835 173891, 22683 174001, 22336 173940, 22684 173657, 22835 173891)), ((23062 172597, 23098 172656, 23435 172783, 23506 173007, 23433 173045, 23083 173072, 23138 173420, 23058 173608, 22788 173515, 22816 173257, 22943 173086, 22915 172943, 22945 172697, 22921 172558, 23062 172597)), ((24493 172273, 23903 172529, 23686 172494, 23808 172066, 24493 172273)), ((24475 170728, 24357 171043, 24352 171329, 23809 171154, 23712 170835, 23808 170583, 24475 170728)), ((131176 170166, 130997 170524, 130804 170766, 130591 170824, 130405 170764, 130636 170654, 130806 170268, 130873 170243, 130909 170143, 131176 170166)), ((87703 170065, 87660 170256, 87487 170304, 87320 169991, 87664 169896, 87703 170065)), ((131726 168823, 131426 168980, 131353 168974, 131586 168499, 131745 168460, 131726 168823)), ((91043 165273, 90853 165457, 90718 165509, 90523 165236, 90869 165141, 91043 165273)), ((22740 165058, 22708 165423, 22614 165405, 22458 165000, 22685 164907, 22740 165058)), ((152546 163146, 152437 163506, 152211 163429, 152010 163292, 152388 163115, 152546 163146)), ((23180 162555, 23054 162803, 22692 162698, 22885 163023, 22753 163130, 22685 163270, 22142 163084, 22674 162691, 22697 162314, 23054 162234, 23180 162555)), ((206641 162618, 206796 162618, 206808 162777, 206650 162820, 206360 162428, 206641 162618)), ((30210 162566, 30322 162719, 29848 162664, 29897 162422, 30111 162273, 30210 162566)), ((30545 162087, 30625 162207, 30181 162185, 30267 161930, 30497 161755, 30545 162087)), ((31148 161146, 30929 161241, 30951 161675, 30542 161699, 30589 161371, 30882 160992, 31148 161146)), ((31592 160378, 31742 160596, 31624 160760, 31258 160726, 31138 160372, 31214 160276, 31592 160378)), ((32017 159366, 31997 159750, 32042 159807, 31822 159797, 31884 159673, 31940 159378, 32014 159263, 32380 159258, 32017 159366)), ((32534 158827, 32462 158906, 32382 159256, 32162 158929, 32434 158544, 32534 158827)), ((152430 153099, 152546 153564, 152446 153974, 152343 154012, 152176 154193, 151922 154317, 151807 154302, 151802 154433, 151495 154905, 151309 155116, 150914 155802, 150871 155804, 150870 155851, 150646 156077, 150562 156324, 150073 157020, 149641 157496, 149567 157759, 149356 158130, 149274 158138, 149254 158232, 149011 158461, 148837 158735, 148458 159215, 148556 158811, 148724 158379, 148883 158222, 148958 157926, 149103 157735, 149316 157655, 149359 157429, 149737 156738, 150003 156403, 150135 156024, 150417 155818, 150505 155564, 150599 155434, 150859 154975, 151128 154586, 151413 154383, 151556 154020, 151815 153788, 151902 153242, 151911 152990, 152256 152794, 152430 153099)), ((209437 158793, 209460 159173, 209128 158877, 209263 158588, 209437 158793)), ((83131 157752, 82774 158528, 82105 158742, 81770 158123, 82047 157317, 82720 157208, 83131 157752)), ((33547 157387, 33627 157494, 33315 157450, 33355 157287, 33511 157131, 33547 157387)), ((39116 145521, 39364 145607, 39465 145590, 39635 145639, 39593 145824, 39925 146523, 40177 146819, 40363 146603, 40306 146231, 40480 145992, 40628 146143, 40835 146156, 41032 146419, 41083 146572, 40564 146585, 40726 146890, 40702 147036, 40562 147117, 40287 147099, 40358 147379, 40157 147822, 40193 147892, 40111 147893, 39957 148076, 39861 148291, 39896 148368, 39807 148367, 39593 148514, 39544 148835, 39480 148838, 39246 149007, 39189 149406, 39031 149520, 38731 149427, 38695 149473, 38370 148754, 38200 147828, 38271 147564, 38208 147453, 38235 147390, 38584 147478, 38709 147555, 38773 147426, 38757 147127, 38603 146698, 38544 146326, 38576 145772, 38732 145464, 39116 145521)), ((43859 142156, 43963 142503, 43646 142341, 43370 142289, 43457 141959, 43859 142156)), ((44171 141682, 44007 141948, 43683 141581, 43880 141391, 44171 141682)), ((24416 45497, 24693 45678, 25200 45679, 25466 45668, 25974 45669, 26239 45658, 26747 45659, 27020 45680, 27527 45681, 27792 45669, 28300 45670, 28566 45658, 29073 45659, 29338 45646, 29845 45647, 30119 45671, 30626 45672, 30892 45658, 31399 45659, 31664 45644, 32172 45645, 32446 45673, 32953 45674, 33218 45658, 33725 45659, 33989 45642, 34497 45643, 34773 45678, 35280 45679, 35544 45658, 36051 45659, 36315 45638, 36822 45639, 37086 45618, 37593 45619, 37870 45658, 38377 45659, 38639 45631, 39147 45632, 39409 45604, 39917 45605, 40196 45658, 40703 45658, 40963 45619, 41730 45617, 42226 45683, 42524 45767, 42787 45684, 43283 45687, 43545 45602, 44533 45603, 44832 45795, 59563 45794, 59688 45676, 60180 45673, 60322 45630, 60554 45847, 60716 46268, 60907 46296, 61682 46292, 61904 46485, 62076 46292, 63233 46292, 63455 46488, 67332 46486, 67504 46292, 68660 46292, 68883 46489, 69658 46488, 70039 46678, 78962 46675, 79133 46472, 79903 46483, 80127 48386, 80383 48432, 80159 48711, 80166 48815, 79153 49961, 79190 50343, 78293 51384, 78522 51502, 78206 51657, 78225 51863, 77930 52172, 78046 52480, 78186 52613, 77967 52832, 77830 52716, 77559 52668, 77515 52628, 76871 53397, 76911 53776, 76580 54130, 76297 54514, 76422 54717, 76353 54952, 75925 55085, 75942 55355, 75261 56022, 75284 56139, 75631 56439, 75354 56695, 75182 56552, 74638 57171, 74637 57198, 74304 57591, 73293 58838, 73343 59217, 73068 59463, 73003 59568, 73039 59902, 72696 60203, 72359 60608, 71013 62293, 71062 62667, 70726 63087, 70378 63374, 70424 63748, 70078 64026, 69343 64944, 69460 65598, 69208 65831, 68818 66330, 68532 66440, 68117 66973, 68167 67352, 67460 67858, 67504 68234, 67291 68267, 67356 68464, 67153 68491, 67216 69045, 66837 69105, 66881 69479, 66510 69535, 66538 69906, 66176 69964, 65816 70214, 65862 70591, 65510 70828, 65553 71203, 65254 71251, 65281 71726, 65668 72320, 64891 72061, 64935 72458, 64607 72515, 64612 72559, 64564 72547, 64598 72895, 64228 72956, 64272 73342, 63897 73399, 63944 73789, 63565 73847, 63609 74236, 63165 74504, 63485 74913, 62921 74883, 62936 75038, 62560 75104, 62624 75596, 62911 75825, 62944 76077, 62690 76122, 62461 76069, 62300 76096, 62320 76311, 61948 76379, 61984 76755, 61615 76819, 61663 77214, 61464 77254, 61486 77432, 61304 77417, 61330 77666, 60940 77749, 60997 78122, 60812 78228, 60856 78585, 61066 78879, 60326 78884, 60370 79264, 59992 79337, 60033 79627, 60176 79697, 60192 79828, 60061 79854, 59948 79740, 59662 79792, 59710 80174, 59417 80237, 59426 80317, 59344 80316, 59380 80631, 59006 80706, 59051 81093, 58935 81120, 58967 81381, 58707 81408, 58722 81553, 58336 81640, 58391 82016, 58246 82090, 58251 82304, 58053 82367, 58069 82570, 57710 82723, 57757 83119, 57543 83168, 57563 83329, 57396 83309, 57426 83580, 57212 83632, 57509 84009, 57085 83905, 57100 84046, 56906 84091, 56905 84257, 56745 84291, 56771 84511, 56557 84561, 56757 84851, 56409 84700, 56434 84976, 56076 85132, 56109 85511, 55749 85672, 55804 86049, 55424 86133, 55470 86511, 55094 86599, 55145 86982, 54763 87067, 54814 87449, 54438 87539, 54486 87922, 54111 88013, 54155 88392, 53782 88487, 53829 88871, 53459 89006, 53510 89393, 53137 89521, 53187 89903, 52802 89990, 52859 90376, 52703 90419, 52710 90624, 52515 90692, 52533 90854, 52151 90944, 52201 91272, 52306 91308, 52250 91667, 52034 91376, 51831 91427, 51879 91810, 51495 91900, 51551 92263, 51626 92274, 51566 92388, 51440 92321, 51177 92388, 51224 92772, 50962 92858, 50975 92967, 51310 93535, 50936 93537, 50649 93353, 50528 93387, 50577 93769, 50267 93859, 50165 94288, 50128 94307, 49991 94714, 49647 94794, 49270 95699, 48904 95815, 48694 96638, 48743 97052, 48853 97371, 48734 97692, 48458 97769, 48332 97513, 48248 97434, 48196 97549, 47810 97630, 47535 98478, 47611 98487, 47576 98586, 47522 98510, 47124 98568, 46867 99452, 46666 99899, 46336 99929, 46100 100429, 46451 100333, 46537 100189, 46563 100324, 46492 100589, 46239 100659, 46047 100588, 45956 100874, 45560 100944, 45274 101782, 45602 101736, 45688 101585, 45774 101826, 45571 101825, 45016 102298, 44728 102233, 44593 102414, 44398 103233, 44170 103691, 43893 103620, 43786 103749, 43552 104250, 43393 104889, 43475 105047, 43290 105457, 43260 105105, 42999 105123, 42516 105998, 42898 105981, 42778 106445, 42451 106217, 42462 106099, 42175 106075, 42048 106213, 41901 107029, 41647 107479, 41328 107496, 41263 107547, 40991 108053, 40938 108396, 41320 108589, 40870 108695, 40821 108864, 40461 108966, 40166 109442, 39916 109898, 39829 110305, 39431 110378, 39382 110798, 39549 110775, 39417 110972, 39457 111172, 39104 111284, 39169 111630, 38792 111757, 38588 111998, 38485 112383, 38346 112377, 38285 112664, 37909 112761, 37845 113179, 37734 113547, 37423 113581, 37397 113690, 37482 114047, 37105 114157, 37190 114514, 37029 114567, 37004 114799, 36791 114846, 36754 115023, 36402 115058, 36360 115100, 36322 115532, 35926 115607, 36030 116002, 35610 116075, 35729 116457, 35880 116433, 35978 116715, 35708 116634, 35719 116476, 35304 116542, 35299 116972, 35376 116958, 35363 117042, 35287 117063, 35230 117373, 34881 117419, 34856 117488, 34934 117850, 34546 117940, 34628 118322, 34232 118411, 34196 118820, 33802 118904, 33785 119312, 33929 119293, 33978 119588, 34239 119951, 33966 119909, 33504 120034, 33504 120164, 33090 120298, 33318 120877, 32753 120620, 32685 121180, 32362 121273, 32332 121391, 32369 121657, 31958 121737, 32041 122132, 31617 122202, 31633 122600, 31865 122572, 31839 122824, 31605 122889, 31559 123007, 31223 123099, 31217 123135, 30926 123216, 31072 123565, 31093 123746, 30912 123795, 30926 123985, 30558 124091, 30513 124480, 30154 124540, 30114 124986, 29712 125062, 29777 125465, 29366 125541, 29439 125946, 29018 126018, 29002 126835, 28643 126893, 28609 127338, 28206 127410, 28214 127831, 27819 127911, 27875 128275, 28093 128258, 28109 128478, 27946 128686, 27937 129141, 27518 129029, 27487 129175, 27139 129261, 27110 129681, 26752 129730, 26720 129765, 26763 130166, 26373 130253, 26413 130652, 26000 130726, 26028 131148, 25959 131496, 25646 131601, 25652 132019, 25406 132095, 25410 132217, 25290 132235, 25292 132505, 24925 132562, 24912 133001, 24503 133074, 24535 133496, 24127 133567, 24169 133977, 23759 134053, 23800 134466, 23409 134555, 23407 135337, 23055 135414, 23048 135448, 21448 135412, 21466 134830, 21477 133090, 21471 132505, 21483 127274, 21477 126689, 20543 126499, 20554 125724, 20740 125475, 20742 123147, 20552 123002, 20549 121848, 20739 121598, 20551 121452, 20549 120297, 20739 120048, 20551 119901, 20549 118747, 20739 118497, 20551 118351, 20549 117196, 20738 116947, 20742 113068, 20552 112923, 20549 111769, 20741 111519, 20551 111373, 20549 110219, 20739 109969, 20551 109823, 20549 108668, 20739 108419, 20551 108272, 20546 106531, 20263 106323, 20289 105938, 19975 105771, 19971 105529, 19902 105384, 19903 104888, 20107 104860, 20043 104711, 20055 104570, 20058 103937, 20048 103797, 20057 103019, 20053 101752, 19921 101506, 19914 101119, 20734 100873, 20732 80715, 20725 78390, 20733 77861, 20683 77391, 20673 74375, 20791 74122, 20766 73599, 20920 73346, 20888 72825, 20780 72572, 20826 72049, 20943 71796, 21012 71314, 21026 70499, 21067 69857, 21108 68560, 21174 68195, 21159 67397, 20693 67144, 20633 66757, 20627 65980, 20612 65460, 20611 64297, 20643 63656, 20651 62880, 20644 62747, 20643 61329, 20626 60556, 20633 60033, 20616 59647, 20612 59006, 20626 58617, 20635 57452, 20621 56933, 20637 56543, 20635 55902, 20623 55771, 20605 55130, 20613 54993, 20488 53580, 20498 53443, 20502 52802, 20483 52673, 20484 52032, 20495 51895, 20488 51253, 20464 51125, 20462 50484, 20438 50222, 20439 49193, 20980 48996, 20972 48796, 21054 48617, 22249 48387, 22365 48176, 22528 47991, 22803 46284, 23023 45522, 23179 45567, 23686 45577, 23908 45496, 24416 45497), (27459 128386, 27528 128768, 27898 128695, 27847 128326, 27459 128386)), ((46309 131406, 46100 132193, 45817 132066, 45755 131944, 45798 131545, 45735 131174, 46083 130719, 46309 131406)), ((46265 129867, 46083 130664, 45720 130403, 45769 130003, 45853 129772, 46158 129536, 46265 129867)), ((54828 117709, 54891 117423, 55016 117220, 54828 117709)), ((56066 115552, 56016 115584, 55910 115981, 55820 116114, 55765 116020, 55985 115528, 56047 115473, 56066 115552)), ((59963 111769, 59714 112290, 59647 112321, 59601 112256, 59642 112169, 59706 111568, 59949 111540, 59963 111769)), ((62416 108104, 62244 108298, 62197 108054, 62278 107868, 62506 107656, 62416 108104)), ((57993 100763, 57795 101073, 57770 100618, 58007 100553, 57993 100763)), ((49407 98770, 49043 99607, 48336 99801, 48010 99151, 48287 98338, 48992 98144, 49407 98770)), ((53524 90588, 53555 90831, 53318 90908, 53153 90576, 53273 90546, 53524 90588)), ((56329 85838, 56370 86162, 55836 86037, 56054 85835, 56329 85838)), ((222336 47944, 222395 48012, 222777 48153, 222736 48544, 222779 49314, 222736 49687, 222806 51559, 222701 52375, 222699 53594, 222734 53973, 222663 54767, 222651 55437, 222681 55925, 222655 56215, 222654 57483, 222627 58132, 222624 58654, 222568 59144, 222623 59817, 222677 60190, 222569 60413, 222370 60649, 222312 61066, 222756 61068, 223426 61317, 223377 61372, 222756 61414, 222007 61657, 221730 61613, 221633 61475, 221483 61525, 221260 61479, 221073 61600, 220593 61536, 220524 61179, 220568 61156, 220425 61014, 220480 61180, 220318 61410, 220141 61322, 219901 61479, 219414 61586, 219414 49194, 217175 49194, 217219 49066, 217149 48897, 217135 48627, 217222 48422, 217177 48323, 217350 48304, 218065 47960, 218125 47964, 218516 48221, 218898 48295, 219284 48120, 219664 47874, 220022 48066, 220456 48162, 220840 48174, 221181 48040, 221560 47983, 221979 47772, 222336 47944)), ((86963 56778, 86303 57198, 86321 57587, 85769 57802, 85799 57221, 86214 56722, 86685 56693, 86963 56778)), ((174552 46418, 188121 46412, 188256 46418, 191222 46411, 191357 46418, 194323 46409, 194458 46417, 197425 46407, 197560 46416, 199751 46409, 199886 46418, 201049 46413, 201302 46688, 201824 46740, 202094 46910, 202987 46913, 204017 46885, 204149 46822, 206044 46809, 206360 46660, 206474 46659, 206748 46390, 206861 46384, 207135 46236, 207249 46235, 207522 46465, 207636 46459, 207910 46560, 208023 46555, 208243 46722, 208436 48071, 208472 48065, 208520 48292, 209213 47870, 209605 48229, 209954 48401, 209935 48462, 210024 48635, 210019 48398, 210342 48113, 210415 48115, 210759 47945, 211151 48229, 211538 48432, 211577 48654, 211555 48434, 212313 47984, 212701 48021, 213120 48192, 213452 48383, 213454 48696, 213563 48746, 213515 48380, 213863 48181, 214304 47874, 214692 48624, 214728 48633, 215442 48174, 215865 47811, 216185 47831, 216603 48152, 216919 48328, 216984 48875, 216970 49194, 167425 49194, 168129 48436, 168490 46070, 168738 45582, 168888 45717, 170945 45706, 171214 45716, 174047 45702, 174299 45581, 174552 46418))) \ No newline at end of file diff --git a/stress_benchmark/resources/016.settings b/stress_benchmark/resources/016.settings index fed8689b55..650364a48f 100644 --- a/stress_benchmark/resources/016.settings +++ b/stress_benchmark/resources/016.settings @@ -6,7 +6,6 @@ resolution=0 _plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 skin_preshrink=0.8 clean_between_layers=False -support_interface_skip_height=0.2 machine_feeder_wheel_diameter=10.0 retraction_hop_only_when_collides=False machine_steps_per_mm_y=50 @@ -44,6 +43,7 @@ cool_min_speed=10 cool_fan_enabled=True cool_fan_speed_max=100 wall_overhang_angle=90 +seam_overhang_angle=30 jerk_support_infill=8 wall_overhang_speed_factor=100 support_roof_line_width=0.4 diff --git a/stress_benchmark/resources/016.wkt b/stress_benchmark/resources/016.wkt index 65562fdd98..9cab4446d9 100644 --- a/stress_benchmark/resources/016.wkt +++ b/stress_benchmark/resources/016.wkt @@ -1 +1 @@ -MULTIPOLYGON (((147289 101492, 147197 101776, 147218 102093, 147259 102076, 147389 102138, 147398 102467, 147648 102288, 147623 102181, 148137 102295, 148172 102346, 148465 102254, 148577 102197, 148901 102061, 149036 102086, 149463 102125, 149272 102163, 148937 102366, 148938 102449, 149117 102596, 149219 102465, 149345 102594, 149476 102549, 149777 102548, 149863 102511, 150134 102496, 150233 102538, 150557 102570, 150547 102600, 150750 102934, 150801 102912, 151257 103199, 151451 103115, 151457 102826, 151757 102643, 152047 102912, 152261 103054, 152386 103243, 152530 103190, 152880 103207, 153247 103211, 154056 103406, 154393 103447, 154973 103599, 155060 103545, 155100 103604, 155982 103648, 156531 103905, 156918 103881, 157384 103888, 157677 103949, 157902 103873, 158295 103870, 158377 103782, 158054 103621, 158326 103620, 158921 103328, 158926 103578, 159080 103506, 159208 103335, 159407 103114, 159605 103018, 160226 102526, 160454 102824, 160833 102936, 161042 102897, 161218 103011, 161202 103295, 161303 103361, 162081 103119, 162153 102960, 162231 103020, 162468 102787, 162676 102742, 162742 102646, 162776 102466, 162854 102390, 162962 102559, 163249 102661, 163345 102847, 163504 102878, 163575 102980, 163720 102792, 164156 102649, 164176 102627, 164599 102346, 165092 102152, 165205 102150, 165383 102040, 165411 101809, 165746 101644, 165778 101795, 165696 102013, 165720 102318, 165786 102277, 166045 102366, 166018 102482, 166117 102372, 166544 102347, 166785 102276, 167055 102137, 167095 102097, 167417 101900, 167985 101878, 167815 101926, 167483 102191, 167483 102296, 167637 102372, 167713 102283, 167818 102353, 167973 102293, 168276 102247, 168355 102202, 168634 102137, 168729 102164, 169044 102134, 169038 102172, 169224 102475, 169279 102434, 169730 102645, 169936 102500, 169916 102187, 170186 101926, 170336 101993, 170532 102185, 170689 102264, 170892 102592, 170596 102599, 170492 102690, 170436 102843, 170787 103124, 170795 103080, 171025 103006, 171096 103077, 171105 103274, 171006 103584, 171207 103683, 171275 103662, 171241 103706, 171403 103852, 171735 103762, 171903 103865, 171927 103976, 171705 104095, 171743 104184, 172213 104283, 172262 104237, 172156 103914, 172619 103682, 172830 103639, 172900 103529, 173094 103391, 173509 103035, 173525 103033, 173757 102815, 173949 102709, 174009 102739, 173927 103058, 173943 103287, 173660 103472, 173661 103525, 173920 103551, 174155 103396, 174209 103301, 174318 103340, 174376 103452, 174456 103374, 174621 103431, 174679 103247, 174853 103089, 175105 103011, 175263 102982, 175356 102906, 175714 102690, 175405 102553, 175611 102412, 176108 102435, 176166 102572, 176510 102732, 176632 102730, 176986 102606, 177088 102927, 177133 102959, 177479 102784, 177730 102912, 178167 103227, 178270 103212, 178415 103103, 178539 103533, 178699 103628, 178735 103533, 178909 103540, 179152 103666, 179293 103595, 179307 103474, 179240 103402, 179321 103154, 179015 102954, 179038 102804, 179405 102930, 179596 103044, 179720 103036, 179802 103097, 180130 102994, 180399 102953, 180492 102849, 180553 102866, 180918 103314, 181124 103658, 181476 103909, 181365 103996, 181444 104116, 181416 104349, 181196 104523, 181401 104621, 181087 104844, 181307 105052, 181639 105108, 181766 104929, 181781 104659, 181904 104457, 182004 104371, 181932 104386, 181860 104168, 181689 104083, 181716 104147, 181611 104066, 181633 104042, 181561 103645, 181772 103522, 182052 103455, 182231 103334, 182687 103358, 182810 103445, 182509 103884, 182265 104017, 182458 104020, 182604 104079, 182724 103953, 182909 103883, 183029 103627, 183041 103537, 182807 103418, 183104 103015, 183072 102882, 183095 102773, 183434 102398, 183774 102329, 184013 102268, 184150 102313, 183900 102554, 183714 102959, 184390 102785, 184555 102987, 184729 103061, 184795 103005, 184985 103022, 185172 102952, 185044 102843, 185017 102948, 184776 102837, 184878 102638, 184946 102590, 185175 102594, 185526 102578, 185595 102639, 185644 102816, 185402 102978, 185495 103165, 185364 103320, 185415 103356, 185993 103497, 186163 103449, 186612 103530, 186680 103465, 186766 103478, 186777 103584, 187095 103697, 187163 103665, 187066 103457, 186900 103293, 186898 102946, 187172 103041, 187449 103056, 187568 103029, 187841 103144, 187874 103185, 188271 103377, 188289 103270, 188431 103097, 188494 103281, 188577 103346, 188718 103324, 188798 103355, 188824 103659, 188957 104299, 188699 104528, 188627 104557, 188605 104774, 188682 104938, 188386 105092, 188546 105183, 188772 105026, 188991 104966, 188852 105161, 188506 105245, 188520 105468, 188639 105778, 188726 105719, 188976 105697, 188978 105558, 189162 105369, 189126 105211, 189352 105060, 189442 105105, 189423 105158, 189636 105486, 189980 105363, 190089 105603, 190257 105596, 190431 105473, 190635 105410, 190804 105487, 190925 105394, 191167 105346, 191407 105385, 191426 105475, 191362 105505, 191270 105644, 191419 105725, 191378 106026, 191441 106239, 191247 106397, 191280 106566, 191357 106635, 191712 106619, 191707 106824, 191589 107117, 191591 107166, 191438 107518, 191486 107489, 191842 107548, 191945 107386, 192289 107018, 192412 106980, 192617 107052, 192768 107194, 192617 107366, 192273 107654, 192528 107597, 192618 107650, 192457 108077, 192327 108078, 192227 108154, 192315 108527, 192460 108725, 192530 108695, 192654 108509, 192824 108653, 192991 108649, 193128 108723, 193342 109074, 193377 109066, 193385 108738, 193412 108477, 193256 108025, 193338 107868, 193523 107742, 193774 108134, 193856 108785, 193928 109098, 193921 109623, 194041 109726, 194014 109968, 194186 109989, 194145 110534, 193970 110609, 193981 111037, 194090 111179, 194208 111406, 194186 111772, 194114 112237, 194141 112431, 193957 112520, 193762 112515, 193785 112803, 193721 112792, 193983 113062, 194376 113386, 194193 113681, 193803 114209, 193782 114331, 193977 114716, 194075 114877, 194258 115254, 194301 115516, 194336 115853, 194190 116248, 193808 116627, 193635 116898, 193616 117188, 193733 117256, 193797 117473, 193881 118035, 194031 118525, 194060 118432, 194108 118157, 194177 118380, 194186 118880, 194156 119052, 194084 119101, 194031 119307, 194017 119558, 194088 120051, 193901 120195, 193881 120255, 193983 120694, 193859 121226, 193808 121271, 193746 121535, 193908 121772, 193921 121907, 194002 121948, 194003 122292, 193919 122553, 193960 122713, 193902 123111, 193803 123527, 193912 124308, 193949 124428, 193696 124892, 193504 125134, 193367 125613, 193270 125520, 193126 125503, 193027 125235, 192970 125483, 192847 125120, 192753 125333, 192676 125797, 192772 125873, 193218 125870, 193261 125628, 193254 125811, 193502 125640, 193600 125861, 193876 125817, 193818 126110, 193718 126306, 193601 126318, 193680 126631, 193663 126855, 193715 126921, 193657 126955, 193649 127144, 193583 127153, 193513 127044, 193313 127280, 193067 127163, 193090 127406, 193269 127607, 193200 127699, 193042 127467, 192830 127658, 192849 127794, 192802 127831, 192756 127762, 192702 127763, 192870 128032, 192668 128408, 192444 128240, 192358 128149, 192245 128156, 192101 128238, 192095 128495, 192108 128781, 192122 128882, 192138 129206, 192122 129242, 192129 129802, 192277 130104, 191858 130546, 191556 130801, 191602 130860, 191494 131002, 191565 131169, 191466 131164, 191423 131224, 191143 131156, 191069 131173, 190979 131391, 191008 131524, 190728 131683, 190703 131723, 191109 131900, 190786 132216, 190699 132356, 190197 132439, 190033 132391, 189869 132499, 189476 132278, 189146 132444, 188863 132755, 188988 132913, 188790 133104, 188982 133184, 189187 133074, 189508 133076, 189871 133116, 190198 133123, 190478 133381, 190250 133530, 190102 133558, 189825 133438, 189535 133412, 189184 133729, 189013 133705, 188688 133186, 188417 133400, 188466 133800, 188343 133827, 188191 134088, 188443 133966, 188634 134119, 188473 134253, 188554 134441, 188748 134657, 188561 134858, 188196 134878, 188048 134714, 187913 134768, 187564 134617, 187037 134670, 186970 134843, 186426 134944, 186325 135023, 185814 134980, 185359 135030, 184937 135137, 184614 135285, 184509 135270, 184229 135295, 184054 135332, 183574 135274, 183031 135044, 182917 135076, 182745 135040, 182557 135142, 182388 135164, 182322 135235, 182611 135504, 182447 135467, 182050 135620, 182111 135323, 182091 135263, 181968 135321, 181618 135392, 181390 135620, 181116 135809, 180936 135876, 180546 136059, 180255 135599, 180163 135526, 179859 135421, 179759 135446, 179567 135417, 179486 135360, 179526 134997, 179438 134867, 179239 134691, 179081 134606, 178876 134648, 178566 134828, 178248 135146, 178103 135168, 178055 135464, 177807 135658, 177624 135329, 177652 135295, 177531 135243, 177372 135070, 177298 134846, 177067 134512, 176768 134856, 176657 134825, 176729 134889, 176593 134881, 176206 135111, 175924 135211, 175953 135492, 175788 135834, 175713 135442, 175715 135305, 175387 135299, 175289 135344, 175387 135388, 175293 135727, 175146 135656, 175151 135572, 175059 135428, 174951 135453, 174890 135224, 174820 135317, 174654 135173, 174554 135176, 174526 135533, 174328 135628, 174253 135554, 174341 135231, 174315 135183, 174377 135009, 174262 135070, 174318 135010, 174226 135030, 173986 134985, 173626 135116, 173525 135006, 173212 135289, 173185 135293, 173246 135038, 173338 134960, 173105 134747, 172823 134798, 172466 134944, 172110 135050, 172058 135122, 171899 135165, 171707 135114, 171739 134916, 171597 134656, 171452 134782, 171125 134705, 171063 134585, 170889 134653, 171053 134748, 170891 134901, 170633 134936, 170627 134984, 170357 135357, 170243 135310, 169999 135031, 170160 134980, 170330 134756, 170245 134710, 169763 134820, 169567 134677, 169650 134401, 169619 134343, 169695 134147, 169843 133896, 169706 133812, 169600 133874, 169504 133838, 169485 133732, 169348 133673, 169205 133740, 169071 133988, 169041 133807, 169099 133767, 169055 133580, 168495 133612, 168605 134014, 168099 134245, 167911 134560, 167522 134827, 167355 134991, 167175 135008, 166950 135205, 167010 134953, 166956 134754, 167304 134541, 167310 134511, 166920 134471, 166584 134722, 166503 134544, 166459 134577, 166188 134555, 166033 134684, 165978 134858, 165644 134971, 165513 134969, 165457 135112, 165298 135211, 165549 135401, 165275 135495, 164789 135472, 164656 135327, 164463 135262, 164191 135369, 163909 135388, 163842 135067, 163510 135313, 163449 135268, 163371 135354, 162878 135311, 162672 135246, 162452 135360, 162432 135304, 162561 135111, 162011 135115, 161929 135004, 161647 135029, 161618 135049, 161277 135037, 161390 135170, 161367 135272, 161047 135108, 160951 135204, 160784 135006, 160680 134934, 160618 135007, 160677 135147, 160984 135287, 161300 135544, 161713 135737, 161331 135585, 161067 135607, 160888 135453, 160693 135449, 160366 135346, 160138 135548, 160013 135259, 159835 134959, 159454 135107, 159302 135156, 158877 135405, 158833 135403, 158563 135456, 158353 135531, 157772 135541, 157337 135409, 157176 135474, 156947 135451, 156609 135642, 156715 135774, 156893 135886, 156671 135870, 156198 136100, 156259 135837, 156229 135744, 156127 135803, 155829 135893, 155574 136163, 155349 136334, 154918 136528, 154714 136680, 154542 136500, 154353 136231, 153984 136113, 153652 136120, 153552 136060, 153593 135690, 153306 135419, 153053 135341, 152580 135581, 152424 135744, 152010 136078, 151973 136256, 151750 136416, 151665 136297, 151649 136165, 151319 135935, 151244 135715, 150941 135293, 150655 135636, 150553 135647, 150201 135755, 150161 135787, 149841 135908, 149141 135992, 148757 136104, 148867 136170, 148843 136326, 148639 136420, 148607 136196, 148634 136111, 148587 135746, 148415 135444, 148211 135379, 148050 135457, 148114 135730, 147652 135706, 147599 135643, 147195 135813, 146749 136022, 146448 136017, 146441 135964, 146753 135735, 146754 135594, 146534 135468, 146203 135523, 146003 135606, 145554 135726, 145105 135802, 144993 135772, 145004 135675, 144940 135517, 144856 135457, 144819 135353, 144738 135411, 144258 135273, 144244 135247, 144182 135276, 144239 135309, 144026 135482, 143898 135483, 143882 135641, 143572 135967, 143240 135766, 143044 135494, 143258 135460, 143461 135255, 143530 134972, 142808 135181, 142614 135003, 142703 134579, 142911 134207, 142805 134129, 142630 134203, 142475 134117, 142442 133928, 142364 133881, 142278 133907, 142160 134105, 142168 134201, 142008 134222, 141982 133986, 142086 133926, 142018 133734, 141547 133613, 141440 133711, 141550 134115, 140958 134288, 140799 134562, 140406 134762, 140183 134934, 140023 134920, 139718 135114, 139790 134861, 139755 134588, 140088 134453, 140094 134400, 139750 134286, 139351 134492, 139248 134284, 138934 134214, 138818 134290, 138777 134473, 138691 134549, 138319 134615, 138165 134492, 138144 134732, 137948 134822, 138223 135040, 137946 135112, 137552 135086, 137343 135004, 137322 134941, 137022 134843, 136645 134999, 136493 135002, 136348 134700, 135940 134954, 135577 135006, 135229 134925, 135039 134916, 134877 135044, 134792 134959, 135057 134672, 134591 134852, 134455 134932, 134172 134918, 133779 135004, 133556 135085, 133748 135061, 133804 135177, 133694 135392, 133421 135386, 133726 135424, 134098 135563, 134086 135641, 133686 135616, 133556 135571, 133360 135662, 133229 135581, 132893 135712, 132594 135774, 132456 135925, 132364 135912, 132064 135512, 131960 135530, 131449 135373, 131078 135348, 130574 135691, 130880 135933, 130811 135921, 130474 136087, 130566 135694, 130433 135488, 130058 135503, 130241 135641, 130311 135805, 129948 135956, 129770 136171, 129365 136500, 128949 136741, 128626 136251, 128497 136199, 128446 136104, 128148 136173, 127886 136127, 127908 135993, 127839 135960, 127716 135989, 127651 136138, 127575 136144, 127158 135990, 126750 136006, 126603 136045, 126590 136114, 126404 136287, 126174 136390, 126088 136272, 126079 136077, 125907 135956, 125420 136013, 125204 136108, 125018 135838, 124939 135792, 124563 135511, 124353 135466, 124189 135599, 124265 135634, 124639 135626, 124729 135776, 124430 135901, 123754 135988, 123703 136011, 123347 136074, 123273 136052, 123213 135680, 123096 135477, 122819 135391, 122756 135337, 122691 135437, 122643 135651, 122510 135631, 121999 135800, 121844 135668, 121573 135898, 121568 135811, 121622 135769, 121623 135583, 121842 135658, 121902 135401, 121762 135410, 121620 135574, 121417 135449, 121133 135476, 121049 135569, 120658 135651, 120447 135748, 120258 135904, 120154 135874, 120086 136053, 119789 136279, 119473 136548, 119452 136500, 119534 136164, 119652 135882, 119635 135791, 119395 135980, 119227 135779, 118829 135851, 118509 136127, 118507 136190, 118428 136136, 118318 136180, 118197 136376, 118305 136615, 118228 136767, 117982 137027, 117776 137191, 117740 136950, 117886 136638, 118130 136633, 118132 136389, 117856 136399, 117602 136628, 117223 136550, 117160 136572, 117126 136516, 117339 136288, 117514 136185, 117251 136082, 117149 136004, 116952 136134, 116884 136454, 116808 136303, 116687 136216, 116557 136220, 116387 136459, 116383 136518, 116338 136531, 116224 136732, 116048 136740, 115806 136673, 115623 136472, 115752 136469, 115765 136210, 115875 136046, 115726 135924, 115616 135998, 115573 136442, 115313 136656, 115197 136803, 114946 136606, 114421 136372, 114395 136106, 114671 135974, 114756 135965, 114950 135593, 114637 135496, 114495 135317, 114420 135283, 114264 135411, 114337 135508, 114237 135738, 114010 135683, 114047 135454, 113922 135387, 114084 135177, 113709 135347, 113585 135286, 113801 134932, 113474 135105, 113328 135292, 113311 135076, 113061 135023, 112988 134932, 112800 135031, 112663 135274, 112815 135369, 112848 135467, 112723 135575, 112282 135653, 112477 135987, 112468 136249, 112200 136411, 112030 136397, 111744 136605, 111606 136329, 111528 136219, 111495 135947, 111474 135955, 111198 135736, 111206 135609, 111344 135288, 111483 135126, 111378 135091, 111296 135276, 110948 135073, 110853 135147, 110801 135336, 110750 135379, 110126 135364, 109900 135563, 109826 135582, 109902 135675, 109930 135813, 109898 135977, 109361 136059, 109070 135973, 108982 135753, 109018 135678, 108572 135701, 108359 135989, 108183 135787, 108007 135903, 108134 135651, 107993 135488, 107824 135440, 107510 135317, 107500 135251, 107380 135207, 107222 135217, 107036 135399, 106858 135430, 106661 135198, 106441 135242, 106302 135206, 106211 135075, 106038 135009, 106034 135111, 105955 135137, 105923 135311, 105951 135404, 106093 135454, 106136 135385, 106276 135341, 106506 135358, 106737 135520, 106855 135713, 106749 135924, 106291 135738, 106290 135663, 106137 135531, 106056 135633, 106235 135744, 106183 136032, 105943 136048, 105739 135953, 105482 136067, 105360 136075, 105289 136216, 105312 136288, 105166 136376, 104952 136050, 104665 136071, 104604 135981, 104366 135871, 104515 135755, 104145 135234, 104041 135248, 104085 135307, 103970 135500, 103984 135672, 103676 135965, 103449 135625, 103475 135258, 103084 135277, 102423 135413, 102316 135482, 101926 135658, 101223 136046, 101049 136013, 100672 136006, 100404 135965, 100242 135976, 100191 136146, 99730 135992, 99269 136011, 99195 136002, 98823 136033, 98693 135957, 98012 135998, 97790 136098, 97612 135850, 97310 135619, 96993 135447, 96728 135226, 96725 134880, 96456 134773, 96152 134807, 95843 134931, 95367 135283, 95072 135605, 94874 135414, 94584 135321, 94485 135118, 94285 134980, 93918 135156, 93644 135203, 93621 135244, 93579 135231, 93264 135493, 93001 135580, 92834 135678, 92670 136057, 92054 136536, 92030 136488, 92073 136227, 92244 135948, 92190 135752, 91918 136007, 91900 135879, 91802 135771, 91661 135828, 91347 135880, 91131 136093, 91116 136159, 91047 136117, 90919 136159, 90759 136374, 90872 136615, 90797 136764, 90339 137184, 90307 136950, 90453 136639, 90695 136634, 90694 136388, 90423 136398, 90176 136632, 89794 136550, 89727 136573, 89681 136498, 89972 136246, 90064 136244, 90142 136168, 90077 136100, 89848 135965, 89492 136145, 89455 136416, 89371 136306, 89125 136172, 89029 136302, 88890 136646, 88616 136740, 88374 136672, 88233 136483, 88321 136465, 88333 136214, 88462 136053, 88219 135897, 88161 136116, 88126 136435, 87745 136787, 87523 136611, 86989 136371, 86963 136104, 87240 135974, 87326 135965, 87517 135593, 87207 135496, 86971 135254, 86904 135507, 86806 135738, 86609 135713, 86527 135539, 86543 135406, 86505 135345, 86587 135239, 86398 135331, 86209 135346, 86166 135299, 86313 135035, 86129 134966, 86072 134981, 86005 134907, 85524 134979, 85431 135193, 85222 135242, 85375 135344, 85363 135419, 85430 135509, 85349 135505, 85235 135590, 84944 135622, 84874 135666, 85110 136117, 84884 136377, 84590 136411, 84297 136563, 84146 136283, 84165 136654, 84073 136578, 84008 136352, 83879 136374, 83968 136325, 83982 136146, 83780 136341, 83944 136147, 84002 136108, 84028 135950, 83831 135806, 83748 135631, 83148 135941, 82702 136044, 82544 136113, 82485 136088, 82156 136110, 81742 136005, 81304 136319, 81199 136183, 81247 136069, 81111 136096, 81017 136168, 81122 136274, 81174 136215, 81398 136618, 80878 136583, 80988 136446, 80919 136464, 80688 136602, 80607 136305, 80260 136390, 79838 136780, 79352 136963, 79204 137074, 78889 136647, 78575 136452, 78214 136412, 78091 136286, 78104 136094, 77898 136077, 77858 136221, 77880 136293, 77736 136379, 77573 136136, 77356 136219, 77570 136404, 77218 136500, 77255 136280, 77348 136219, 76993 136083, 76834 136041, 76765 135943, 76670 135934, 76675 136033, 76453 136336, 76225 136116, 76069 135927, 75919 135837, 75731 135667, 75605 135619, 75565 135543, 75543 135288, 75369 135409, 75321 135349, 75126 135313, 75060 135146, 74935 135097, 74810 135110, 74619 135231, 74763 135254, 75062 135388, 74744 135552, 73980 135632, 73536 135753, 73480 135413, 73331 135175, 73090 135141, 72995 135227, 72949 135405, 72736 135400, 72236 135639, 72169 135593, 71848 135917, 71689 135933, 71673 135823, 71862 135663, 71864 135511, 71654 135425, 71367 135493, 71288 135568, 71040 135604, 70993 135634, 70360 135763, 70193 135696, 70220 135539, 70079 135246, 69950 135326, 69544 135136, 69495 135038, 69386 135073, 69489 135154, 69314 135263, 69145 135215, 69111 135345, 69305 135639, 69276 135684, 68888 135662, 68444 135761, 68640 135448, 68572 135408, 68355 135051, 68640 134987, 68769 134819, 68580 134663, 68374 134979, 68064 135234, 67989 135225, 67971 135087, 68120 134737, 67881 134421, 67639 134362, 67512 134397, 67456 134334, 67372 134362, 67111 134592, 67228 134742, 67182 134910, 66807 135079, 66690 135304, 66570 135323, 66126 135241, 66073 135302, 66004 135591, 65754 135734, 65537 135657, 65272 135853, 65027 135919, 65005 135988, 65058 136145, 64870 136361, 64656 136047, 64453 136137, 64643 136213, 64809 136374, 64490 136586, 64183 136707, 64278 136212, 63953 136111, 63861 136118, 63817 136044, 63870 135938, 64210 135619, 63866 135287, 63785 135135, 63681 135233, 63617 135505, 63636 135779, 63183 136382, 62995 135952, 62927 135832, 62946 135473, 62925 135342, 62808 135451, 62588 135515, 62483 135489, 62333 135146, 62578 134986, 62457 134920, 62208 134847, 61895 134946, 61753 134798, 61578 134975, 61937 135253, 62069 135289, 61697 135292, 61571 135314, 61428 135229, 61397 135335, 61004 135622, 60241 135442, 60653 135209, 60659 135133, 60604 135054, 60260 134980, 60168 134994, 59960 135125, 59926 135360, 60026 135769, 60016 135836, 59667 135644, 59627 135507, 59680 135450, 59386 135416, 59179 135363, 59074 135411, 58765 135445, 58517 135731, 58152 135190, 58085 135149, 57916 134851, 57712 134842, 57447 135170, 57427 135213, 57215 135379, 57082 135597, 57001 135535, 56963 135331, 56899 135248, 56720 135236, 56064 134715, 55605 134667, 55515 134762, 55853 134970, 55757 135450, 55717 135488, 55293 135441, 55267 135392, 54937 135422, 54608 135618, 54543 135725, 54338 136007, 54046 135793, 53530 135623, 53191 135328, 53035 135288, 52979 135480, 53018 135612, 52670 135470, 52383 135414, 52152 135464, 52475 135204, 52428 135144, 52295 135118, 51984 135181, 51773 135125, 51500 135243, 50834 135326, 50687 135287, 50434 135276, 50007 135088, 49585 134979, 49066 134911, 48468 134977, 48441 134957, 47881 134850, 47829 134737, 47239 134728, 47050 134814, 46849 134739, 46622 134986, 46413 134986, 46104 134687, 46275 134378, 46224 134151, 46139 134047, 46249 133899, 46238 133784, 45899 133657, 45626 133769, 45444 133622, 45475 133565, 45347 133384, 44976 133405, 44788 133508, 44529 133467, 44104 133693, 44000 133560, 44091 133436, 44206 133376, 44307 133392, 44335 133296, 44590 133071, 45463 133039, 46008 133156, 45961 133109, 45997 132799, 46025 132770, 45976 132712, 45725 132659, 45581 132482, 45236 132696, 45414 133008, 44857 132757, 44977 132539, 44958 132473, 44826 132404, 44601 132411, 44171 132353, 43769 131871, 43981 131810, 44119 131716, 43838 131518, 43861 131195, 43582 131142, 43466 131189, 43302 131170, 43324 131094, 43161 130950, 43196 130752, 43155 130663, 43383 130419, 43398 130353, 43323 130074, 43239 130062, 43301 129994, 43359 129445, 43225 129258, 43140 128928, 43217 128724, 43144 128657, 42940 128748, 42735 128567, 42877 128329, 42755 128222, 42669 128220, 42706 128570, 42589 128595, 42378 128809, 42407 128597, 42614 128199, 42483 128185, 42245 128300, 42148 128040, 42073 127995, 42155 127678, 42024 127417, 41939 127445, 41801 127704, 41694 127430, 41860 127106, 41683 126831, 41577 126917, 41452 127192, 41401 127192, 41263 126609, 41298 126498, 41365 125897, 41421 125628, 41539 125708, 41655 125570, 41501 125574, 41381 125345, 41326 125721, 41338 125846, 41251 125989, 41168 125910, 41230 125788, 41146 125605, 41042 125635, 40885 125517, 41079 125226, 41275 125115, 41340 125126, 41344 125038, 40969 124437, 40961 124074, 40972 123976, 40753 123596, 40812 123528, 40853 123552, 40876 123274, 40961 123455, 41052 123377, 40945 122880, 40909 122549, 41037 122550, 41096 122750, 41233 122723, 41310 122893, 41447 122850, 41470 122764, 41329 122150, 41112 121736, 41210 121353, 41117 121282, 40935 120693, 41055 120283, 40984 120078, 40891 120080, 40927 119761, 40902 119326, 40808 118962, 40775 118936, 40690 119317, 40642 119292, 40617 119136, 40666 118864, 40733 118575, 40747 118274, 40765 118204, 40822 118479, 40855 118554, 40940 118159, 41015 117994, 41038 117660, 41078 117340, 41284 116909, 41231 116854, 41170 116552, 41279 116484, 41140 116433, 40929 116541, 40868 116284, 40897 116124, 40745 116071, 40634 115906, 40632 115767, 40705 115521, 40730 115062, 40927 115022, 40990 115139, 40968 115320, 41035 115494, 41054 115226, 41119 115118, 41169 114738, 41259 114825, 41472 114524, 41525 114208, 41451 114180, 40917 113420, 40937 113343, 41219 113156, 41362 112973, 41270 112849, 41254 112554, 41194 112394, 41062 112384, 40975 112475, 40838 112528, 40816 112401, 40718 112361, 40745 112192, 40690 111957, 40598 111447, 40890 110922, 40889 110737, 40836 110775, 40757 110641, 40757 110459, 40731 110070, 40799 109881, 40874 109845, 40904 109699, 40875 109313, 40974 109296, 40990 109049, 41118 108830, 41130 108710, 41238 108243, 41150 107885, 41279 107595, 41556 107763, 41693 107879, 41557 108359, 41595 108818, 41673 108695, 41919 108567, 42073 108574, 42132 108654, 42286 108579, 42330 108646, 42440 108693, 42350 108523, 42438 108401, 42579 108519, 42637 108229, 42424 108110, 42221 107667, 42411 107536, 42181 107261, 42537 106908, 42767 107048, 42936 107335, 43055 107368, 43097 107513, 43366 107437, 43306 107073, 43182 106849, 43123 106812, 43063 106560, 43083 106441, 43331 106232, 43509 105528, 43637 105160, 43807 105021, 44351 104509, 44803 104559, 45345 104667, 45660 104709, 45785 104635, 46197 104955, 46251 104962, 46215 104945, 46234 104628, 46193 104483, 46273 104392, 46445 104532, 46628 104818, 46807 104657, 46802 104408, 46536 104297, 46374 104104, 46424 104051, 46462 103793, 46414 103721, 46151 103924, 46246 104365, 46082 104371, 46014 104302, 46079 103798, 46092 103325, 46245 103267, 46320 103282, 46370 103240, 46466 102961, 46654 103216, 46984 103089, 47079 103117, 47153 102995, 47334 102916, 47398 102930, 47791 102908, 47842 102889, 48162 102825, 48214 102889, 48058 102998, 48060 103341, 47898 103671, 48048 103640, 48074 103360, 48304 103328, 48459 103485, 48675 103443, 48921 103487, 48971 103424, 49012 103489, 49517 103390, 49313 103137, 49322 103118, 49073 102855, 49329 102621, 49495 102572, 49800 102575, 50067 102637, 50227 102894, 50528 102716, 50971 102866, 51195 102861, 51121 102672, 50655 102231, 51226 102367, 51573 102497, 51601 102525, 51897 102661, 51821 103018, 51929 103206, 52348 103245, 52419 103082, 52872 103051, 53058 103002, 53396 103083, 53372 102914, 53495 102723, 53679 102970, 53652 103076, 54044 103042, 54297 103001, 54488 102914, 54460 102886, 54772 102835, 54989 102481, 55098 102519, 55176 102722, 55297 102770, 55169 102855, 55529 102907, 55885 102741, 55913 102928, 55881 103089, 56057 103132, 56097 103022, 56248 102854, 56401 102766, 56440 102841, 56715 102836, 57046 102692, 57122 102419, 57278 102597, 57290 102727, 57353 102766, 57302 102812, 57354 102803, 57439 102630, 57593 102515, 57585 102421, 57664 102434, 57617 102266, 57786 101936, 57868 102121, 57971 102427, 58260 102239, 58317 101953, 58389 101991, 58462 102115, 58439 102199, 58521 102252, 58907 102200, 58954 102445, 59046 102440, 59109 102376, 59151 102163, 59105 102169, 59146 102062, 59356 102113, 59338 102205, 59260 102274, 59335 102416, 59345 102374, 59505 102441, 59446 102506, 59439 102771, 59465 102798, 59508 102742, 59616 102722, 59677 102788, 59543 102874, 59665 102972, 59914 102988, 60241 102811, 60840 102283, 61082 102235, 61133 101982, 61256 101889, 61397 102096, 61731 102268, 61738 102342, 61969 102451, 62118 102641, 62319 102503, 62687 102504, 63194 102340, 63358 102348, 63760 102288, 63878 102311, 64214 102268, 64083 102141, 64090 102040, 64390 101954, 64426 102126, 64367 102265, 64389 102596, 64543 102642, 64489 102807, 64596 102940, 64810 102777, 64823 102707, 65313 102750, 65707 102604, 66086 102383, 66205 102382, 66480 102342, 66088 102710, 66230 102849, 66332 102750, 66499 102802, 66889 102649, 66991 102574, 67293 102447, 67360 102447, 67701 102324, 67773 102544, 67887 102633, 67922 102597, 68384 102610, 68597 102382, 68614 102129, 68909 101754, 69031 101768, 69191 101854, 69327 101871, 69537 102127, 69233 102238, 69011 102701, 69384 102672, 69683 102467, 69779 102550, 69782 102799, 69655 103141, 69818 103191, 69618 103248, 69591 103373, 69858 103211, 70062 103377, 70373 103214, 70474 103282, 70555 103452, 70344 103586, 70391 103728, 70782 103798, 70905 103793, 70806 103354, 71297 103174, 71380 103089, 71462 103114, 71547 102957, 71793 102809, 72140 102520, 72186 102525, 72389 102362, 72580 102289, 72611 102315, 72535 102670, 72544 102884, 72236 103047, 72237 103073, 72525 103168, 72779 103052, 72823 102984, 72898 103039, 72928 103153, 73222 103288, 73295 103018, 73450 103029, 73644 102977, 73847 103010, 73875 102978, 74186 102898, 73915 102651, 74090 102604, 74571 102715, 74661 102889, 75004 103075, 75258 102974, 75439 102956, 75574 103240, 75956 103031, 76299 103060, 76515 103140, 76538 103184, 76809 103118, 76849 103084, 77240 102993, 77126 102706, 77356 102978, 77510 102976, 77507 102741, 77545 102710, 77663 102759, 77668 102946, 77858 102996, 77952 102741, 77609 102635, 77617 102522, 78023 102499, 78169 102538, 78325 102498, 78414 102540, 78762 102372, 79051 102271, 79150 102138, 79262 102170, 79478 102422, 79801 102043, 79885 102001, 80155 101803, 80254 101746, 80463 101586, 80611 101435, 80893 101793, 81238 101890, 81507 101843, 81662 101912, 81631 102200, 81719 102293, 81773 102114, 82047 101849, 82564 101937, 82706 102044, 82503 102174, 82391 102373, 82538 102309, 82913 101946, 83139 101911, 83193 101633, 83349 101514, 83440 101736, 83685 101935, 83760 101964, 83767 102077, 84077 102548, 84232 102322, 84631 102230, 84758 102536, 84960 102557, 85068 102451, 84941 102429, 84633 102228, 85126 102036, 85398 102015, 85573 101974, 85741 102024, 85931 101954, 86115 101955, 86016 101867, 86041 101723, 86244 101661, 86275 101877, 86245 101972, 86283 102339, 86450 102662, 86643 102768, 86769 102683, 86710 102436, 87155 102575, 87202 102648, 87595 102571, 87633 102615, 87740 102547, 87998 102474, 88271 102533, 88261 102606, 87960 102785, 88128 103007, 88202 102956, 88359 103045, 88680 102998, 89222 102938, 89243 102945, 89515 102924, 89615 102963, 89597 103055, 89690 103240, 89800 103320, 90333 103420, 90539 103256, 90597 103254, 90617 103077, 90900 102750, 91275 102945, 91463 103176, 91227 103240, 91092 103378, 91052 103481, 91291 103610, 91450 103581, 91650 103467, 91780 103562, 91783 103738, 91573 104311, 91611 104328, 91828 104210, 92044 104293, 92381 104155, 92471 104306, 92325 104416, 92377 104554, 92824 104574, 92899 104492, 92802 104159, 93307 103878, 93406 103844, 93510 103666, 93781 103441, 94089 103147, 94193 103134, 94364 102956, 94571 102807, 94470 103223, 94514 103381, 94248 103537, 94233 103632, 94499 103667, 94804 103460, 94827 103413, 94875 103437, 94915 103557, 95238 103695, 95351 103341, 95871 103225, 95882 103192, 96179 103030, 95913 102815, 96138 102733, 96544 102770, 96659 102821, 96700 102937, 97014 103062, 97223 102945, 97520 102892, 97608 103156, 97855 103060, 97955 102968, 98727 102806, 99483 102970, 99748 103059, 100038 102960, 99956 102800, 100051 102566, 100266 102601, 100058 102551, 100064 102492, 100030 102541, 99694 102416, 99708 102322, 100109 102392, 100361 102334, 100532 102386, 100784 102279, 101072 102229, 101240 102046, 101637 102556, 101816 102918, 102184 103285, 102019 103454, 102085 103588, 102066 103736, 101839 103973, 102074 104144, 101846 104344, 101760 104385, 101864 104564, 101945 104543, 102014 104450, 102275 104489, 102405 104459, 102376 104629, 102411 104678, 102451 104256, 102680 103942, 102346 103467, 102341 103247, 102250 102982, 102397 102895, 102731 102853, 102740 102888, 102996 102768, 103387 102987, 103486 103101, 103596 102948, 103455 102870, 103467 102836, 103736 102747, 103805 102415, 104035 102223, 104464 102286, 104663 102434, 104518 102525, 104297 102945, 104345 102967, 104680 102838, 105340 102801, 106125 102719, 106282 102724, 106681 102516, 106957 102500, 107141 102447, 107720 102513, 108053 102656, 108224 102608, 108469 102660, 108685 102551, 108635 102442, 108419 102265, 108640 102325, 108840 102275, 109154 102140, 109114 102339, 109152 102472, 109410 102392, 109797 102037, 110142 101906, 110458 101691, 110661 101924, 110765 102084, 111114 102197, 111396 102219, 111501 102275, 111484 102645, 111727 102914, 112139 102810, 112410 102597, 112739 102249, 112982 102181, 113035 101905, 113178 101773, 113348 102030, 113410 102047, 113648 102337, 113692 102355, 113916 102639, 114059 102420, 114480 102269, 114973 102008, 115149 101988, 115499 101861, 115628 101866, 116006 101756, 115861 101625, 115867 101540, 116101 101437, 116138 101639, 116099 101740, 116127 102098, 116295 102422, 116429 102475, 116596 102410, 116547 102246, 116621 102164, 117011 102215, 117057 102284, 117824 102077, 118150 102196, 118156 102230, 117818 102363, 117817 102486, 118028 102702, 118051 102670, 118271 102766, 118416 102736, 119023 102833, 119058 102857, 119321 102918, 119410 102985, 119393 103074, 119563 103446, 119649 103408, 120081 103746, 120339 103633, 120339 103450, 120649 103177, 121048 103536, 121230 103840, 120986 103834, 120856 103931, 120813 104036, 121072 104265, 121171 104277, 121402 104204, 121525 104322, 121508 104565, 121326 105001, 121363 105024, 121595 104957, 121781 105075, 122112 104983, 122173 105016, 122181 105173, 122280 105173, 122155 105241, 122165 105339, 122595 105444, 122672 105409, 122547 105080, 122838 105009, 123056 104896, 123159 104884, 123260 104743, 123520 104572, 123827 104332, 123913 104329, 124291 104057, 124200 104427, 124245 104553, 124007 104664, 123989 104751, 124252 104784, 124514 104627, 124538 104582, 124626 104611, 124694 104710, 124941 104777, 124983 104567, 125106 104449, 125553 104351, 125575 104284, 125845 104127, 125573 103988, 125783 103882, 126295 103875, 126431 103973, 126632 104017, 126860 103899, 127125 103831, 127269 104068, 127597 103827, 127626 103849, 127675 103799, 128244 103837, 128406 103915, 128605 103677, 128647 103712, 128759 104020, 128874 103995, 128916 104046, 128974 104043, 129029 103893, 129275 103787, 129447 103791, 129671 103577, 129602 103440, 129713 103206, 129320 103146, 129335 103050, 129719 103003, 129862 103020, 130041 102895, 130164 102932, 130487 102739, 130799 102594, 130951 102403, 131045 102444, 131276 102732, 131415 102812, 131561 103097, 131815 103267, 131982 103425, 131825 103585, 131872 103711, 131816 103924, 131616 104110, 131841 104234, 131829 104315, 131938 104364, 132261 104347, 132445 104089, 132609 104040, 132419 104033, 132330 103782, 132117 103600, 132132 103546, 132005 103154, 132245 103050, 132452 103073, 132708 102981, 133070 103149, 133247 103344, 133509 103064, 133475 102915, 133554 102723, 133791 102553, 134311 102779, 134788 103006, 134819 103028, 134408 102897, 134285 102945, 134096 103200, 134206 103391, 134413 103369, 134601 103463, 135139 103493, 135192 103373, 135744 103302, 135773 103279, 136353 103379, 136882 103330, 137201 103288, 137623 103123, 137969 103106, 138563 103213, 138786 103317, 138974 103260, 139246 103310, 139402 103231, 139102 102993, 139340 103043, 139565 102966, 139877 102792, 139845 102935, 139898 103096, 140036 103041, 140375 102674, 140862 102398, 141105 102152, 141382 102472, 141741 102568, 142001 102545, 142150 102604, 142135 102943, 142396 103154, 142942 102885, 143193 102610, 143529 102283, 143763 102185, 143838 102080, 143878 101879, 143969 101790, 144119 101959, 144311 102032, 144524 102223, 144678 102262, 144829 102401, 144974 102233, 145163 102159, 145511 102099, 145541 102073, 145998 101872, 146354 101835, 146500 101798, 146645 101832, 146867 101744, 146901 101517, 147271 101389) (143581 135001, 143976 135192, 143940 135078, 144043 134952, 144013 134901, 143594 134807) (68879 134758, 69248 134988, 69214 134862, 69298 134787, 69215 134663, 68774 134519) (65782 134382, 65714 134660, 65735 134790, 65796 134809, 66043 134707, 66253 134741, 66493 134669, 66828 134926, 67017 134614, 66814 134713, 66601 134499, 66540 134559, 66487 134521, 66270 134667, 66058 134661, 65904 134347, 65827 134312) (164793 134568, 164770 134690, 164905 134902, 164993 134817, 165283 134808, 165433 134869, 165622 134594, 165601 134517, 165139 134610, 164916 134441) (143356 134540, 143449 134773, 143588 134782, 143708 134502, 143559 134451) (170249 134097, 170241 134167, 170413 134497, 170597 134585, 170823 134629, 170854 134376, 170475 134334, 170593 134042, 170406 134003) (137415 134174, 137526 134449, 137609 134353, 138162 134483, 138362 134150, 137891 134139, 137765 134170, 137577 134038) (45978 133615, 46251 133757, 46366 133686, 46383 133467, 46213 133333) (189640 132105, 190033 132258, 190139 132148, 189973 132090) (193713 118969, 193757 118982, 193790 118915, 193726 118073, 193676 118023) (191372 108040, 191400 108103, 191304 108436, 191327 108481, 191556 108335, 191594 108247, 191510 107981, 191407 107912) (188119 105974, 188080 106056, 188126 106140, 188400 105920, 188318 105909) (188652 105805, 188679 106125, 189087 106087, 188973 105793) (189497 105786, 189534 105812, 189535 105925, 189583 105823, 189784 105774, 189926 105683, 189733 105606) (131571 104488, 131787 104761, 131925 104881, 132137 104879, 132179 104738, 132085 104738, 131680 104507, 131686 104442) (188398 103912, 188405 103992, 188567 104111, 188360 104298, 188335 104303, 188064 104441, 188048 104640, 188235 104846, 188465 104447, 188408 104330, 188567 104256, 188638 104158, 188640 104046, 188713 103903, 188484 103780) (126133 104488, 125891 104479, 125575 104527, 125512 104660, 125931 104638, 126033 104613, 126166 104672, 126253 104598, 126251 104514, 126186 104425) (187466 104348, 187379 104462, 187442 104536, 187763 104398, 187558 104297, 187570 104259, 187375 104173) (120287 104169, 120666 104304, 120664 104164, 120395 103967) (133346 103832, 133312 103838, 133367 104088, 133469 104201, 133668 104192, 133560 104017, 133663 103708, 133512 103644) (182922 103927, 182951 104078, 183087 104160, 183256 104093, 183573 103898, 183598 103833, 183459 103611, 183514 103412) (133024 103609, 132839 103701, 132613 103652, 132648 103884, 132899 103876, 133002 103960, 133310 103833, 133476 103591, 133254 103347) (90511 103764, 90906 103803, 90904 103660, 90610 103549) (95768 103681, 96057 103732, 96358 103662, 96506 103784, 96595 103702, 96614 103587, 96533 103461, 96475 103535, 96214 103469, 95938 103429) (183989 103559, 184007 103692, 183892 103752, 184037 103736, 184199 103460, 184055 103448) (73775 103408, 73759 103427, 74218 103505, 74486 103509, 74513 103446, 74456 103334, 74390 103386, 74146 103310) (103243 103402, 103363 103347, 103697 103417, 103838 103273, 103639 103293, 103500 103088) (175394 103184, 175246 103409, 175829 103298, 175863 103262, 176009 103310, 176077 103263, 176079 103189, 176037 103148) (59468 102800, 59496 102829, 59618 102772) (114617 102545, 114800 102539, 114898 102432, 114783 102428, 114493 102288)), ((108850 136644, 108348 136570, 108610 136156)), ((104897 136284, 104997 136403, 104652 136500, 104722 136201)), ((174305 135194, 174168 135529, 174037 135603, 174086 135371, 174158 135328, 174135 135113)), ((136146 135168, 135649 135133, 135649 135090, 135940 134969)), ((41043 121936, 41186 122120, 41202 122554, 40944 122100, 40904 121929, 40928 121890)), ((123856 103788, 123975 104015, 123854 104135, 123736 103997, 123463 103841, 123678 103718)), ((181388 103391, 181538 103439, 181342 103486, 181240 103467, 181357 103063)), ((119724 102830, 119639 103036, 119662 103128, 119569 103134, 119480 102926, 119554 102702)), ((173519 102386, 173602 102512, 173609 102599, 173728 102771, 173514 102996, 173313 102755, 172941 102588, 173164 102419, 173266 102414, 173364 102332)), ((94131 102562, 94237 102760, 94123 102883, 94024 102765, 93841 102777, 93907 102672, 93790 102609, 93947 102512)), ((150965 102382, 150913 102507, 150983 102711, 150743 102752, 150574 102561, 150694 102218)), ((68054 101957, 67990 102150, 68030 102280, 67838 102396, 67733 102292, 67830 101952)), ((72160 101873, 72322 102233, 72151 102379, 71998 102153, 71724 102100, 71823 101958, 71736 101883, 71999 101784)), ((169448 101850, 169401 101987, 169460 102194, 169226 102286, 169062 102121, 169154 101882, 169174 101745))) \ No newline at end of file +MULTIPOLYGON (((147289 101492, 147197 101776, 147218 102093, 147259 102076, 147389 102138, 147398 102467, 147648 102288, 147623 102181, 148137 102295, 148172 102346, 148465 102254, 148577 102197, 148901 102061, 149036 102086, 149463 102125, 149272 102163, 148937 102366, 148938 102449, 149117 102596, 149219 102465, 149345 102594, 149476 102549, 149777 102548, 149863 102511, 150134 102496, 150233 102538, 150557 102570, 150547 102600, 150750 102934, 150801 102912, 151257 103199, 151451 103115, 151457 102826, 151757 102643, 152047 102912, 152261 103054, 152386 103243, 152530 103190, 152880 103207, 153247 103211, 154056 103406, 154393 103447, 154973 103599, 155060 103545, 155100 103604, 155982 103648, 156531 103905, 156918 103881, 157384 103888, 157677 103949, 157902 103873, 158295 103870, 158377 103782, 158054 103621, 158326 103620, 158921 103328, 158926 103578, 159080 103506, 159208 103335, 159407 103114, 159605 103018, 160226 102526, 160454 102824, 160833 102936, 161042 102897, 161218 103011, 161202 103295, 161303 103361, 162081 103119, 162153 102960, 162231 103020, 162468 102787, 162676 102742, 162742 102646, 162776 102466, 162854 102390, 162962 102559, 163249 102661, 163345 102847, 163504 102878, 163575 102980, 163720 102792, 164156 102649, 164176 102627, 164599 102346, 165092 102152, 165205 102150, 165383 102040, 165411 101809, 165746 101644, 165778 101795, 165696 102013, 165720 102318, 165786 102277, 166045 102366, 166018 102482, 166117 102372, 166544 102347, 166785 102276, 167055 102137, 167095 102097, 167417 101900, 167985 101878, 167815 101926, 167483 102191, 167483 102296, 167637 102372, 167713 102283, 167818 102353, 167973 102293, 168276 102247, 168355 102202, 168634 102137, 168729 102164, 169044 102134, 169038 102172, 169224 102475, 169279 102434, 169730 102645, 169936 102500, 169916 102187, 170186 101926, 170336 101993, 170532 102185, 170689 102264, 170892 102592, 170596 102599, 170492 102690, 170436 102843, 170787 103124, 170795 103080, 171025 103006, 171096 103077, 171105 103274, 171006 103584, 171207 103683, 171275 103662, 171241 103706, 171403 103852, 171735 103762, 171903 103865, 171927 103976, 171705 104095, 171743 104184, 172213 104283, 172262 104237, 172156 103914, 172619 103682, 172830 103639, 172900 103529, 173094 103391, 173509 103035, 173525 103033, 173757 102815, 173949 102709, 174009 102739, 173927 103058, 173943 103287, 173660 103472, 173661 103525, 173920 103551, 174155 103396, 174209 103301, 174318 103340, 174376 103452, 174456 103374, 174621 103431, 174679 103247, 174853 103089, 175105 103011, 175263 102982, 175356 102906, 175714 102690, 175405 102553, 175611 102412, 176108 102435, 176166 102572, 176510 102732, 176632 102730, 176986 102606, 177088 102927, 177133 102959, 177479 102784, 177730 102912, 178167 103227, 178270 103212, 178415 103103, 178539 103533, 178699 103628, 178735 103533, 178909 103540, 179152 103666, 179293 103595, 179307 103474, 179240 103402, 179321 103154, 179015 102954, 179038 102804, 179405 102930, 179596 103044, 179720 103036, 179802 103097, 180130 102994, 180399 102953, 180492 102849, 180553 102866, 180918 103314, 181124 103658, 181476 103909, 181365 103996, 181444 104116, 181416 104349, 181196 104523, 181401 104621, 181087 104844, 181307 105052, 181639 105108, 181766 104929, 181781 104659, 181904 104457, 182004 104371, 181932 104386, 181860 104168, 181689 104083, 181716 104147, 181611 104066, 181633 104042, 181561 103645, 181772 103522, 182052 103455, 182231 103334, 182687 103358, 182810 103445, 182509 103884, 182265 104017, 182458 104020, 182604 104079, 182724 103953, 182909 103883, 183029 103627, 183041 103537, 182807 103418, 183104 103015, 183072 102882, 183095 102773, 183434 102398, 183774 102329, 184013 102268, 184150 102313, 183900 102554, 183714 102959, 184390 102785, 184555 102987, 184729 103061, 184795 103005, 184985 103022, 185172 102952, 185044 102843, 185017 102948, 184776 102837, 184878 102638, 184946 102590, 185175 102594, 185526 102578, 185595 102639, 185644 102816, 185402 102978, 185495 103165, 185364 103320, 185415 103356, 185993 103497, 186163 103449, 186612 103530, 186680 103465, 186766 103478, 186777 103584, 187095 103697, 187163 103665, 187066 103457, 186900 103293, 186898 102946, 187172 103041, 187449 103056, 187568 103029, 187841 103144, 187874 103185, 188271 103377, 188289 103270, 188431 103097, 188494 103281, 188577 103346, 188718 103324, 188798 103355, 188824 103659, 188957 104299, 188699 104528, 188627 104557, 188605 104774, 188682 104938, 188386 105092, 188546 105183, 188772 105026, 188991 104966, 188852 105161, 188506 105245, 188520 105468, 188639 105778, 188726 105719, 188976 105697, 188978 105558, 189162 105369, 189126 105211, 189352 105060, 189442 105105, 189423 105158, 189636 105486, 189980 105363, 190089 105603, 190257 105596, 190431 105473, 190635 105410, 190804 105487, 190925 105394, 191167 105346, 191407 105385, 191426 105475, 191362 105505, 191270 105644, 191419 105725, 191378 106026, 191441 106239, 191247 106397, 191280 106566, 191357 106635, 191712 106619, 191707 106824, 191589 107117, 191591 107166, 191438 107518, 191486 107489, 191842 107548, 191945 107386, 192289 107018, 192412 106980, 192617 107052, 192768 107194, 192617 107366, 192273 107654, 192528 107597, 192618 107650, 192457 108077, 192327 108078, 192227 108154, 192315 108527, 192460 108725, 192530 108695, 192654 108509, 192824 108653, 192991 108649, 193128 108723, 193342 109074, 193377 109066, 193385 108738, 193412 108477, 193256 108025, 193338 107868, 193523 107742, 193774 108134, 193856 108785, 193928 109098, 193921 109623, 194041 109726, 194014 109968, 194186 109989, 194145 110534, 193970 110609, 193981 111037, 194090 111179, 194208 111406, 194186 111772, 194114 112237, 194141 112431, 193957 112520, 193762 112515, 193785 112803, 193721 112792, 193983 113062, 194376 113386, 194193 113681, 193803 114209, 193782 114331, 193977 114716, 194075 114877, 194258 115254, 194301 115516, 194336 115853, 194190 116248, 193808 116627, 193635 116898, 193616 117188, 193733 117256, 193797 117473, 193881 118035, 194031 118525, 194060 118432, 194108 118157, 194177 118380, 194186 118880, 194156 119052, 194084 119101, 194031 119307, 194017 119558, 194088 120051, 193901 120195, 193881 120255, 193983 120694, 193859 121226, 193808 121271, 193746 121535, 193908 121772, 193921 121907, 194002 121948, 194003 122292, 193919 122553, 193960 122713, 193902 123111, 193803 123527, 193912 124308, 193949 124428, 193696 124892, 193504 125134, 193367 125613, 193270 125520, 193126 125503, 193027 125235, 192970 125483, 192847 125120, 192753 125333, 192676 125797, 192772 125873, 193218 125870, 193261 125628, 193254 125811, 193502 125640, 193600 125861, 193876 125817, 193818 126110, 193718 126306, 193601 126318, 193680 126631, 193663 126855, 193715 126921, 193657 126955, 193649 127144, 193583 127153, 193513 127044, 193313 127280, 193067 127163, 193090 127406, 193269 127607, 193200 127699, 193042 127467, 192830 127658, 192849 127794, 192802 127831, 192756 127762, 192702 127763, 192870 128032, 192668 128408, 192444 128240, 192358 128149, 192245 128156, 192101 128238, 192095 128495, 192108 128781, 192122 128882, 192138 129206, 192122 129242, 192129 129802, 192277 130104, 191858 130546, 191556 130801, 191602 130860, 191494 131002, 191565 131169, 191466 131164, 191423 131224, 191143 131156, 191069 131173, 190979 131391, 191008 131524, 190728 131683, 190703 131723, 191109 131900, 190786 132216, 190699 132356, 190197 132439, 190033 132391, 189869 132499, 189476 132278, 189146 132444, 188863 132755, 188988 132913, 188790 133104, 188982 133184, 189187 133074, 189508 133076, 189871 133116, 190198 133123, 190478 133381, 190250 133530, 190102 133558, 189825 133438, 189535 133412, 189184 133729, 189013 133705, 188688 133186, 188417 133400, 188466 133800, 188343 133827, 188191 134088, 188443 133966, 188634 134119, 188473 134253, 188554 134441, 188748 134657, 188561 134858, 188196 134878, 188048 134714, 187913 134768, 187564 134617, 187037 134670, 186970 134843, 186426 134944, 186325 135023, 185814 134980, 185359 135030, 184937 135137, 184614 135285, 184509 135270, 184229 135295, 184054 135332, 183574 135274, 183031 135044, 182917 135076, 182745 135040, 182557 135142, 182388 135164, 182322 135235, 182611 135504, 182447 135467, 182050 135620, 182111 135323, 182091 135263, 181968 135321, 181618 135392, 181390 135620, 181116 135809, 180936 135876, 180546 136059, 180255 135599, 180163 135526, 179859 135421, 179759 135446, 179567 135417, 179486 135360, 179526 134997, 179438 134867, 179239 134691, 179081 134606, 178876 134648, 178566 134828, 178248 135146, 178103 135168, 178055 135464, 177807 135658, 177624 135329, 177652 135295, 177531 135243, 177372 135070, 177298 134846, 177067 134512, 176768 134856, 176657 134825, 176729 134889, 176593 134881, 176206 135111, 175924 135211, 175953 135492, 175788 135834, 175713 135442, 175715 135305, 175387 135299, 175289 135344, 175387 135388, 175293 135727, 175146 135656, 175151 135572, 175059 135428, 174951 135453, 174890 135224, 174820 135317, 174654 135173, 174554 135176, 174526 135533, 174328 135628, 174253 135554, 174341 135231, 174315 135183, 174377 135009, 174262 135070, 174318 135010, 174226 135030, 173986 134985, 173626 135116, 173525 135006, 173212 135289, 173185 135293, 173246 135038, 173338 134960, 173105 134747, 172823 134798, 172466 134944, 172110 135050, 172058 135122, 171899 135165, 171707 135114, 171739 134916, 171597 134656, 171452 134782, 171125 134705, 171063 134585, 170889 134653, 171053 134748, 170891 134901, 170633 134936, 170627 134984, 170357 135357, 170243 135310, 169999 135031, 170160 134980, 170330 134756, 170245 134710, 169763 134820, 169567 134677, 169650 134401, 169619 134343, 169695 134147, 169843 133896, 169706 133812, 169600 133874, 169504 133838, 169485 133732, 169348 133673, 169205 133740, 169071 133988, 169041 133807, 169099 133767, 169055 133580, 168495 133612, 168605 134014, 168099 134245, 167911 134560, 167522 134827, 167355 134991, 167175 135008, 166950 135205, 167010 134953, 166956 134754, 167304 134541, 167310 134511, 166920 134471, 166584 134722, 166503 134544, 166459 134577, 166188 134555, 166033 134684, 165978 134858, 165644 134971, 165513 134969, 165457 135112, 165298 135211, 165549 135401, 165275 135495, 164789 135472, 164656 135327, 164463 135262, 164191 135369, 163909 135388, 163842 135067, 163510 135313, 163449 135268, 163371 135354, 162878 135311, 162672 135246, 162452 135360, 162432 135304, 162561 135111, 162011 135115, 161929 135004, 161647 135029, 161618 135049, 161277 135037, 161390 135170, 161367 135272, 161047 135108, 160951 135204, 160784 135006, 160680 134934, 160618 135007, 160677 135147, 160984 135287, 161300 135544, 161713 135737, 161331 135585, 161067 135607, 160888 135453, 160693 135449, 160366 135346, 160138 135548, 160013 135259, 159835 134959, 159454 135107, 159302 135156, 158877 135405, 158833 135403, 158563 135456, 158353 135531, 157772 135541, 157337 135409, 157176 135474, 156947 135451, 156609 135642, 156715 135774, 156893 135886, 156671 135870, 156198 136100, 156259 135837, 156229 135744, 156127 135803, 155829 135893, 155574 136163, 155349 136334, 154918 136528, 154714 136680, 154542 136500, 154353 136231, 153984 136113, 153652 136120, 153552 136060, 153593 135690, 153306 135419, 153053 135341, 152580 135581, 152424 135744, 152010 136078, 151973 136256, 151750 136416, 151665 136297, 151649 136165, 151319 135935, 151244 135715, 150941 135293, 150655 135636, 150553 135647, 150201 135755, 150161 135787, 149841 135908, 149141 135992, 148757 136104, 148867 136170, 148843 136326, 148639 136420, 148607 136196, 148634 136111, 148587 135746, 148415 135444, 148211 135379, 148050 135457, 148114 135730, 147652 135706, 147599 135643, 147195 135813, 146749 136022, 146448 136017, 146441 135964, 146753 135735, 146754 135594, 146534 135468, 146203 135523, 146003 135606, 145554 135726, 145105 135802, 144993 135772, 145004 135675, 144940 135517, 144856 135457, 144819 135353, 144738 135411, 144258 135273, 144244 135247, 144182 135276, 144239 135309, 144026 135482, 143898 135483, 143882 135641, 143572 135967, 143240 135766, 143044 135494, 143258 135460, 143461 135255, 143530 134972, 142808 135181, 142614 135003, 142703 134579, 142911 134207, 142805 134129, 142630 134203, 142475 134117, 142442 133928, 142364 133881, 142278 133907, 142160 134105, 142168 134201, 142008 134222, 141982 133986, 142086 133926, 142018 133734, 141547 133613, 141440 133711, 141550 134115, 140958 134288, 140799 134562, 140406 134762, 140183 134934, 140023 134920, 139718 135114, 139790 134861, 139755 134588, 140088 134453, 140094 134400, 139750 134286, 139351 134492, 139248 134284, 138934 134214, 138818 134290, 138777 134473, 138691 134549, 138319 134615, 138165 134492, 138144 134732, 137948 134822, 138223 135040, 137946 135112, 137552 135086, 137343 135004, 137322 134941, 137022 134843, 136645 134999, 136493 135002, 136348 134700, 135940 134954, 135577 135006, 135229 134925, 135039 134916, 134877 135044, 134792 134959, 135057 134672, 134591 134852, 134455 134932, 134172 134918, 133779 135004, 133556 135085, 133748 135061, 133804 135177, 133694 135392, 133421 135386, 133726 135424, 134098 135563, 134086 135641, 133686 135616, 133556 135571, 133360 135662, 133229 135581, 132893 135712, 132594 135774, 132456 135925, 132364 135912, 132064 135512, 131960 135530, 131449 135373, 131078 135348, 130574 135691, 130880 135933, 130811 135921, 130474 136087, 130566 135694, 130433 135488, 130058 135503, 130241 135641, 130311 135805, 129948 135956, 129770 136171, 129365 136500, 128949 136741, 128626 136251, 128497 136199, 128446 136104, 128148 136173, 127886 136127, 127908 135993, 127839 135960, 127716 135989, 127651 136138, 127575 136144, 127158 135990, 126750 136006, 126603 136045, 126590 136114, 126404 136287, 126174 136390, 126088 136272, 126079 136077, 125907 135956, 125420 136013, 125204 136108, 125018 135838, 124939 135792, 124563 135511, 124353 135466, 124189 135599, 124265 135634, 124639 135626, 124729 135776, 124430 135901, 123754 135988, 123703 136011, 123347 136074, 123273 136052, 123213 135680, 123096 135477, 122819 135391, 122756 135337, 122691 135437, 122643 135651, 122510 135631, 121999 135800, 121844 135668, 121573 135898, 121568 135811, 121622 135769, 121623 135583, 121842 135658, 121902 135401, 121762 135410, 121620 135574, 121417 135449, 121133 135476, 121049 135569, 120658 135651, 120447 135748, 120258 135904, 120154 135874, 120086 136053, 119789 136279, 119473 136548, 119452 136500, 119534 136164, 119652 135882, 119635 135791, 119395 135980, 119227 135779, 118829 135851, 118509 136127, 118507 136190, 118428 136136, 118318 136180, 118197 136376, 118305 136615, 118228 136767, 117982 137027, 117776 137191, 117740 136950, 117886 136638, 118130 136633, 118132 136389, 117856 136399, 117602 136628, 117223 136550, 117160 136572, 117126 136516, 117339 136288, 117514 136185, 117251 136082, 117149 136004, 116952 136134, 116884 136454, 116808 136303, 116687 136216, 116557 136220, 116387 136459, 116383 136518, 116338 136531, 116224 136732, 116048 136740, 115806 136673, 115623 136472, 115752 136469, 115765 136210, 115875 136046, 115726 135924, 115616 135998, 115573 136442, 115313 136656, 115197 136803, 114946 136606, 114421 136372, 114395 136106, 114671 135974, 114756 135965, 114950 135593, 114637 135496, 114495 135317, 114420 135283, 114264 135411, 114337 135508, 114237 135738, 114010 135683, 114047 135454, 113922 135387, 114084 135177, 113709 135347, 113585 135286, 113801 134932, 113474 135105, 113328 135292, 113311 135076, 113061 135023, 112988 134932, 112800 135031, 112663 135274, 112815 135369, 112848 135467, 112723 135575, 112282 135653, 112477 135987, 112468 136249, 112200 136411, 112030 136397, 111744 136605, 111606 136329, 111528 136219, 111495 135947, 111474 135955, 111198 135736, 111206 135609, 111344 135288, 111483 135126, 111378 135091, 111296 135276, 110948 135073, 110853 135147, 110801 135336, 110750 135379, 110126 135364, 109900 135563, 109826 135582, 109902 135675, 109930 135813, 109898 135977, 109361 136059, 109070 135973, 108982 135753, 109018 135678, 108572 135701, 108359 135989, 108183 135787, 108007 135903, 108134 135651, 107993 135488, 107824 135440, 107510 135317, 107500 135251, 107380 135207, 107222 135217, 107036 135399, 106858 135430, 106661 135198, 106441 135242, 106302 135206, 106211 135075, 106038 135009, 106034 135111, 105955 135137, 105923 135311, 105951 135404, 106093 135454, 106136 135385, 106276 135341, 106506 135358, 106737 135520, 106855 135713, 106749 135924, 106291 135738, 106290 135663, 106137 135531, 106056 135633, 106235 135744, 106183 136032, 105943 136048, 105739 135953, 105482 136067, 105360 136075, 105289 136216, 105312 136288, 105166 136376, 104952 136050, 104665 136071, 104604 135981, 104366 135871, 104515 135755, 104145 135234, 104041 135248, 104085 135307, 103970 135500, 103984 135672, 103676 135965, 103449 135625, 103475 135258, 103084 135277, 102423 135413, 102316 135482, 101926 135658, 101223 136046, 101049 136013, 100672 136006, 100404 135965, 100242 135976, 100191 136146, 99730 135992, 99269 136011, 99195 136002, 98823 136033, 98693 135957, 98012 135998, 97790 136098, 97612 135850, 97310 135619, 96993 135447, 96728 135226, 96725 134880, 96456 134773, 96152 134807, 95843 134931, 95367 135283, 95072 135605, 94874 135414, 94584 135321, 94485 135118, 94285 134980, 93918 135156, 93644 135203, 93621 135244, 93579 135231, 93264 135493, 93001 135580, 92834 135678, 92670 136057, 92054 136536, 92030 136488, 92073 136227, 92244 135948, 92190 135752, 91918 136007, 91900 135879, 91802 135771, 91661 135828, 91347 135880, 91131 136093, 91116 136159, 91047 136117, 90919 136159, 90759 136374, 90872 136615, 90797 136764, 90339 137184, 90307 136950, 90453 136639, 90695 136634, 90694 136388, 90423 136398, 90176 136632, 89794 136550, 89727 136573, 89681 136498, 89972 136246, 90064 136244, 90142 136168, 90077 136100, 89848 135965, 89492 136145, 89455 136416, 89371 136306, 89125 136172, 89029 136302, 88890 136646, 88616 136740, 88374 136672, 88233 136483, 88321 136465, 88333 136214, 88462 136053, 88219 135897, 88161 136116, 88126 136435, 87745 136787, 87523 136611, 86989 136371, 86963 136104, 87240 135974, 87326 135965, 87517 135593, 87207 135496, 86971 135254, 86904 135507, 86806 135738, 86609 135713, 86527 135539, 86543 135406, 86505 135345, 86587 135239, 86398 135331, 86209 135346, 86166 135299, 86313 135035, 86129 134966, 86072 134981, 86005 134907, 85524 134979, 85431 135193, 85222 135242, 85375 135344, 85363 135419, 85430 135509, 85349 135505, 85235 135590, 84944 135622, 84874 135666, 85110 136117, 84884 136377, 84590 136411, 84297 136563, 84146 136283, 84165 136654, 84073 136578, 84008 136352, 83879 136374, 83968 136325, 83982 136146, 83780 136341, 83944 136147, 84002 136108, 84028 135950, 83831 135806, 83748 135631, 83148 135941, 82702 136044, 82544 136113, 82485 136088, 82156 136110, 81742 136005, 81304 136319, 81199 136183, 81247 136069, 81111 136096, 81017 136168, 81122 136274, 81174 136215, 81398 136618, 80878 136583, 80988 136446, 80919 136464, 80688 136602, 80607 136305, 80260 136390, 79838 136780, 79352 136963, 79204 137074, 78889 136647, 78575 136452, 78214 136412, 78091 136286, 78104 136094, 77898 136077, 77858 136221, 77880 136293, 77736 136379, 77573 136136, 77356 136219, 77570 136404, 77218 136500, 77255 136280, 77348 136219, 76993 136083, 76834 136041, 76765 135943, 76670 135934, 76675 136033, 76453 136336, 76225 136116, 76069 135927, 75919 135837, 75731 135667, 75605 135619, 75565 135543, 75543 135288, 75369 135409, 75321 135349, 75126 135313, 75060 135146, 74935 135097, 74810 135110, 74619 135231, 74763 135254, 75062 135388, 74744 135552, 73980 135632, 73536 135753, 73480 135413, 73331 135175, 73090 135141, 72995 135227, 72949 135405, 72736 135400, 72236 135639, 72169 135593, 71848 135917, 71689 135933, 71673 135823, 71862 135663, 71864 135511, 71654 135425, 71367 135493, 71288 135568, 71040 135604, 70993 135634, 70360 135763, 70193 135696, 70220 135539, 70079 135246, 69950 135326, 69544 135136, 69495 135038, 69386 135073, 69489 135154, 69314 135263, 69145 135215, 69111 135345, 69305 135639, 69276 135684, 68888 135662, 68444 135761, 68640 135448, 68572 135408, 68355 135051, 68640 134987, 68769 134819, 68580 134663, 68374 134979, 68064 135234, 67989 135225, 67971 135087, 68120 134737, 67881 134421, 67639 134362, 67512 134397, 67456 134334, 67372 134362, 67111 134592, 67228 134742, 67182 134910, 66807 135079, 66690 135304, 66570 135323, 66126 135241, 66073 135302, 66004 135591, 65754 135734, 65537 135657, 65272 135853, 65027 135919, 65005 135988, 65058 136145, 64870 136361, 64656 136047, 64453 136137, 64643 136213, 64809 136374, 64490 136586, 64183 136707, 64278 136212, 63953 136111, 63861 136118, 63817 136044, 63870 135938, 64210 135619, 63866 135287, 63785 135135, 63681 135233, 63617 135505, 63636 135779, 63183 136382, 62995 135952, 62927 135832, 62946 135473, 62925 135342, 62808 135451, 62588 135515, 62483 135489, 62333 135146, 62578 134986, 62457 134920, 62208 134847, 61895 134946, 61753 134798, 61578 134975, 61937 135253, 62069 135289, 61697 135292, 61571 135314, 61428 135229, 61397 135335, 61004 135622, 60241 135442, 60653 135209, 60659 135133, 60604 135054, 60260 134980, 60168 134994, 59960 135125, 59926 135360, 60026 135769, 60016 135836, 59667 135644, 59627 135507, 59680 135450, 59386 135416, 59179 135363, 59074 135411, 58765 135445, 58517 135731, 58152 135190, 58085 135149, 57916 134851, 57712 134842, 57447 135170, 57427 135213, 57215 135379, 57082 135597, 57001 135535, 56963 135331, 56899 135248, 56720 135236, 56064 134715, 55605 134667, 55515 134762, 55853 134970, 55757 135450, 55717 135488, 55293 135441, 55267 135392, 54937 135422, 54608 135618, 54543 135725, 54338 136007, 54046 135793, 53530 135623, 53191 135328, 53035 135288, 52979 135480, 53018 135612, 52670 135470, 52383 135414, 52152 135464, 52475 135204, 52428 135144, 52295 135118, 51984 135181, 51773 135125, 51500 135243, 50834 135326, 50687 135287, 50434 135276, 50007 135088, 49585 134979, 49066 134911, 48468 134977, 48441 134957, 47881 134850, 47829 134737, 47239 134728, 47050 134814, 46849 134739, 46622 134986, 46413 134986, 46104 134687, 46275 134378, 46224 134151, 46139 134047, 46249 133899, 46238 133784, 45899 133657, 45626 133769, 45444 133622, 45475 133565, 45347 133384, 44976 133405, 44788 133508, 44529 133467, 44104 133693, 44000 133560, 44091 133436, 44206 133376, 44307 133392, 44335 133296, 44590 133071, 45463 133039, 46008 133156, 45961 133109, 45997 132799, 46025 132770, 45976 132712, 45725 132659, 45581 132482, 45236 132696, 45414 133008, 44857 132757, 44977 132539, 44958 132473, 44826 132404, 44601 132411, 44171 132353, 43769 131871, 43981 131810, 44119 131716, 43838 131518, 43861 131195, 43582 131142, 43466 131189, 43302 131170, 43324 131094, 43161 130950, 43196 130752, 43155 130663, 43383 130419, 43398 130353, 43323 130074, 43239 130062, 43301 129994, 43359 129445, 43225 129258, 43140 128928, 43217 128724, 43144 128657, 42940 128748, 42735 128567, 42877 128329, 42755 128222, 42669 128220, 42706 128570, 42589 128595, 42378 128809, 42407 128597, 42614 128199, 42483 128185, 42245 128300, 42148 128040, 42073 127995, 42155 127678, 42024 127417, 41939 127445, 41801 127704, 41694 127430, 41860 127106, 41683 126831, 41577 126917, 41452 127192, 41401 127192, 41263 126609, 41298 126498, 41365 125897, 41421 125628, 41539 125708, 41655 125570, 41501 125574, 41381 125345, 41326 125721, 41338 125846, 41251 125989, 41168 125910, 41230 125788, 41146 125605, 41042 125635, 40885 125517, 41079 125226, 41275 125115, 41340 125126, 41344 125038, 40969 124437, 40961 124074, 40972 123976, 40753 123596, 40812 123528, 40853 123552, 40876 123274, 40961 123455, 41052 123377, 40945 122880, 40909 122549, 41037 122550, 41096 122750, 41233 122723, 41310 122893, 41447 122850, 41470 122764, 41329 122150, 41112 121736, 41210 121353, 41117 121282, 40935 120693, 41055 120283, 40984 120078, 40891 120080, 40927 119761, 40902 119326, 40808 118962, 40775 118936, 40690 119317, 40642 119292, 40617 119136, 40666 118864, 40733 118575, 40747 118274, 40765 118204, 40822 118479, 40855 118554, 40940 118159, 41015 117994, 41038 117660, 41078 117340, 41284 116909, 41231 116854, 41170 116552, 41279 116484, 41140 116433, 40929 116541, 40868 116284, 40897 116124, 40745 116071, 40634 115906, 40632 115767, 40705 115521, 40730 115062, 40927 115022, 40990 115139, 40968 115320, 41035 115494, 41054 115226, 41119 115118, 41169 114738, 41259 114825, 41472 114524, 41525 114208, 41451 114180, 40917 113420, 40937 113343, 41219 113156, 41362 112973, 41270 112849, 41254 112554, 41194 112394, 41062 112384, 40975 112475, 40838 112528, 40816 112401, 40718 112361, 40745 112192, 40690 111957, 40598 111447, 40890 110922, 40889 110737, 40836 110775, 40757 110641, 40757 110459, 40731 110070, 40799 109881, 40874 109845, 40904 109699, 40875 109313, 40974 109296, 40990 109049, 41118 108830, 41130 108710, 41238 108243, 41150 107885, 41279 107595, 41556 107763, 41693 107879, 41557 108359, 41595 108818, 41673 108695, 41919 108567, 42073 108574, 42132 108654, 42286 108579, 42330 108646, 42440 108693, 42350 108523, 42438 108401, 42579 108519, 42637 108229, 42424 108110, 42221 107667, 42411 107536, 42181 107261, 42537 106908, 42767 107048, 42936 107335, 43055 107368, 43097 107513, 43366 107437, 43306 107073, 43182 106849, 43123 106812, 43063 106560, 43083 106441, 43331 106232, 43509 105528, 43637 105160, 43807 105021, 44351 104509, 44803 104559, 45345 104667, 45660 104709, 45785 104635, 46197 104955, 46251 104962, 46215 104945, 46234 104628, 46193 104483, 46273 104392, 46445 104532, 46628 104818, 46807 104657, 46802 104408, 46536 104297, 46374 104104, 46424 104051, 46462 103793, 46414 103721, 46151 103924, 46246 104365, 46082 104371, 46014 104302, 46079 103798, 46092 103325, 46245 103267, 46320 103282, 46370 103240, 46466 102961, 46654 103216, 46984 103089, 47079 103117, 47153 102995, 47334 102916, 47398 102930, 47791 102908, 47842 102889, 48162 102825, 48214 102889, 48058 102998, 48060 103341, 47898 103671, 48048 103640, 48074 103360, 48304 103328, 48459 103485, 48675 103443, 48921 103487, 48971 103424, 49012 103489, 49517 103390, 49313 103137, 49322 103118, 49073 102855, 49329 102621, 49495 102572, 49800 102575, 50067 102637, 50227 102894, 50528 102716, 50971 102866, 51195 102861, 51121 102672, 50655 102231, 51226 102367, 51573 102497, 51601 102525, 51897 102661, 51821 103018, 51929 103206, 52348 103245, 52419 103082, 52872 103051, 53058 103002, 53396 103083, 53372 102914, 53495 102723, 53679 102970, 53652 103076, 54044 103042, 54297 103001, 54488 102914, 54460 102886, 54772 102835, 54989 102481, 55098 102519, 55176 102722, 55297 102770, 55169 102855, 55529 102907, 55885 102741, 55913 102928, 55881 103089, 56057 103132, 56097 103022, 56248 102854, 56401 102766, 56440 102841, 56715 102836, 57046 102692, 57122 102419, 57278 102597, 57290 102727, 57353 102766, 57302 102812, 57354 102803, 57439 102630, 57593 102515, 57585 102421, 57664 102434, 57617 102266, 57786 101936, 57868 102121, 57971 102427, 58260 102239, 58317 101953, 58389 101991, 58462 102115, 58439 102199, 58521 102252, 58907 102200, 58954 102445, 59046 102440, 59109 102376, 59151 102163, 59105 102169, 59146 102062, 59356 102113, 59338 102205, 59260 102274, 59335 102416, 59345 102374, 59505 102441, 59446 102506, 59439 102771, 59465 102798, 59508 102742, 59616 102722, 59677 102788, 59543 102874, 59665 102972, 59914 102988, 60241 102811, 60840 102283, 61082 102235, 61133 101982, 61256 101889, 61397 102096, 61731 102268, 61738 102342, 61969 102451, 62118 102641, 62319 102503, 62687 102504, 63194 102340, 63358 102348, 63760 102288, 63878 102311, 64214 102268, 64083 102141, 64090 102040, 64390 101954, 64426 102126, 64367 102265, 64389 102596, 64543 102642, 64489 102807, 64596 102940, 64810 102777, 64823 102707, 65313 102750, 65707 102604, 66086 102383, 66205 102382, 66480 102342, 66088 102710, 66230 102849, 66332 102750, 66499 102802, 66889 102649, 66991 102574, 67293 102447, 67360 102447, 67701 102324, 67773 102544, 67887 102633, 67922 102597, 68384 102610, 68597 102382, 68614 102129, 68909 101754, 69031 101768, 69191 101854, 69327 101871, 69537 102127, 69233 102238, 69011 102701, 69384 102672, 69683 102467, 69779 102550, 69782 102799, 69655 103141, 69818 103191, 69618 103248, 69591 103373, 69858 103211, 70062 103377, 70373 103214, 70474 103282, 70555 103452, 70344 103586, 70391 103728, 70782 103798, 70905 103793, 70806 103354, 71297 103174, 71380 103089, 71462 103114, 71547 102957, 71793 102809, 72140 102520, 72186 102525, 72389 102362, 72580 102289, 72611 102315, 72535 102670, 72544 102884, 72236 103047, 72237 103073, 72525 103168, 72779 103052, 72823 102984, 72898 103039, 72928 103153, 73222 103288, 73295 103018, 73450 103029, 73644 102977, 73847 103010, 73875 102978, 74186 102898, 73915 102651, 74090 102604, 74571 102715, 74661 102889, 75004 103075, 75258 102974, 75439 102956, 75574 103240, 75956 103031, 76299 103060, 76515 103140, 76538 103184, 76809 103118, 76849 103084, 77240 102993, 77126 102706, 77356 102978, 77510 102976, 77507 102741, 77545 102710, 77663 102759, 77668 102946, 77858 102996, 77952 102741, 77609 102635, 77617 102522, 78023 102499, 78169 102538, 78325 102498, 78414 102540, 78762 102372, 79051 102271, 79150 102138, 79262 102170, 79478 102422, 79801 102043, 79885 102001, 80155 101803, 80254 101746, 80463 101586, 80611 101435, 80893 101793, 81238 101890, 81507 101843, 81662 101912, 81631 102200, 81719 102293, 81773 102114, 82047 101849, 82564 101937, 82706 102044, 82503 102174, 82391 102373, 82538 102309, 82913 101946, 83139 101911, 83193 101633, 83349 101514, 83440 101736, 83685 101935, 83760 101964, 83767 102077, 84077 102548, 84232 102322, 84631 102230, 84758 102536, 84960 102557, 85068 102451, 84941 102429, 84633 102228, 85126 102036, 85398 102015, 85573 101974, 85741 102024, 85931 101954, 86115 101955, 86016 101867, 86041 101723, 86244 101661, 86275 101877, 86245 101972, 86283 102339, 86450 102662, 86643 102768, 86769 102683, 86710 102436, 87155 102575, 87202 102648, 87595 102571, 87633 102615, 87740 102547, 87998 102474, 88271 102533, 88261 102606, 87960 102785, 88128 103007, 88202 102956, 88359 103045, 88680 102998, 89222 102938, 89243 102945, 89515 102924, 89615 102963, 89597 103055, 89690 103240, 89800 103320, 90333 103420, 90539 103256, 90597 103254, 90617 103077, 90900 102750, 91275 102945, 91463 103176, 91227 103240, 91092 103378, 91052 103481, 91291 103610, 91450 103581, 91650 103467, 91780 103562, 91783 103738, 91573 104311, 91611 104328, 91828 104210, 92044 104293, 92381 104155, 92471 104306, 92325 104416, 92377 104554, 92824 104574, 92899 104492, 92802 104159, 93307 103878, 93406 103844, 93510 103666, 93781 103441, 94089 103147, 94193 103134, 94364 102956, 94571 102807, 94470 103223, 94514 103381, 94248 103537, 94233 103632, 94499 103667, 94804 103460, 94827 103413, 94875 103437, 94915 103557, 95238 103695, 95351 103341, 95871 103225, 95882 103192, 96179 103030, 95913 102815, 96138 102733, 96544 102770, 96659 102821, 96700 102937, 97014 103062, 97223 102945, 97520 102892, 97608 103156, 97855 103060, 97955 102968, 98727 102806, 99483 102970, 99748 103059, 100038 102960, 99956 102800, 100051 102566, 100266 102601, 100058 102551, 100064 102492, 100030 102541, 99694 102416, 99708 102322, 100109 102392, 100361 102334, 100532 102386, 100784 102279, 101072 102229, 101240 102046, 101637 102556, 101816 102918, 102184 103285, 102019 103454, 102085 103588, 102066 103736, 101839 103973, 102074 104144, 101846 104344, 101760 104385, 101864 104564, 101945 104543, 102014 104450, 102275 104489, 102405 104459, 102376 104629, 102411 104678, 102451 104256, 102680 103942, 102346 103467, 102341 103247, 102250 102982, 102397 102895, 102731 102853, 102740 102888, 102996 102768, 103387 102987, 103486 103101, 103596 102948, 103455 102870, 103467 102836, 103736 102747, 103805 102415, 104035 102223, 104464 102286, 104663 102434, 104518 102525, 104297 102945, 104345 102967, 104680 102838, 105340 102801, 106125 102719, 106282 102724, 106681 102516, 106957 102500, 107141 102447, 107720 102513, 108053 102656, 108224 102608, 108469 102660, 108685 102551, 108635 102442, 108419 102265, 108640 102325, 108840 102275, 109154 102140, 109114 102339, 109152 102472, 109410 102392, 109797 102037, 110142 101906, 110458 101691, 110661 101924, 110765 102084, 111114 102197, 111396 102219, 111501 102275, 111484 102645, 111727 102914, 112139 102810, 112410 102597, 112739 102249, 112982 102181, 113035 101905, 113178 101773, 113348 102030, 113410 102047, 113648 102337, 113692 102355, 113916 102639, 114059 102420, 114480 102269, 114973 102008, 115149 101988, 115499 101861, 115628 101866, 116006 101756, 115861 101625, 115867 101540, 116101 101437, 116138 101639, 116099 101740, 116127 102098, 116295 102422, 116429 102475, 116596 102410, 116547 102246, 116621 102164, 117011 102215, 117057 102284, 117824 102077, 118150 102196, 118156 102230, 117818 102363, 117817 102486, 118028 102702, 118051 102670, 118271 102766, 118416 102736, 119023 102833, 119058 102857, 119321 102918, 119410 102985, 119393 103074, 119563 103446, 119649 103408, 120081 103746, 120339 103633, 120339 103450, 120649 103177, 121048 103536, 121230 103840, 120986 103834, 120856 103931, 120813 104036, 121072 104265, 121171 104277, 121402 104204, 121525 104322, 121508 104565, 121326 105001, 121363 105024, 121595 104957, 121781 105075, 122112 104983, 122173 105016, 122181 105173, 122280 105173, 122155 105241, 122165 105339, 122595 105444, 122672 105409, 122547 105080, 122838 105009, 123056 104896, 123159 104884, 123260 104743, 123520 104572, 123827 104332, 123913 104329, 124291 104057, 124200 104427, 124245 104553, 124007 104664, 123989 104751, 124252 104784, 124514 104627, 124538 104582, 124626 104611, 124694 104710, 124941 104777, 124983 104567, 125106 104449, 125553 104351, 125575 104284, 125845 104127, 125573 103988, 125783 103882, 126295 103875, 126431 103973, 126632 104017, 126860 103899, 127125 103831, 127269 104068, 127597 103827, 127626 103849, 127675 103799, 128244 103837, 128406 103915, 128605 103677, 128647 103712, 128759 104020, 128874 103995, 128916 104046, 128974 104043, 129029 103893, 129275 103787, 129447 103791, 129671 103577, 129602 103440, 129713 103206, 129320 103146, 129335 103050, 129719 103003, 129862 103020, 130041 102895, 130164 102932, 130487 102739, 130799 102594, 130951 102403, 131045 102444, 131276 102732, 131415 102812, 131561 103097, 131815 103267, 131982 103425, 131825 103585, 131872 103711, 131816 103924, 131616 104110, 131841 104234, 131829 104315, 131938 104364, 132261 104347, 132445 104089, 132609 104040, 132419 104033, 132330 103782, 132117 103600, 132132 103546, 132005 103154, 132245 103050, 132452 103073, 132708 102981, 133070 103149, 133247 103344, 133509 103064, 133475 102915, 133554 102723, 133791 102553, 134311 102779, 134788 103006, 134819 103028, 134408 102897, 134285 102945, 134096 103200, 134206 103391, 134413 103369, 134601 103463, 135139 103493, 135192 103373, 135744 103302, 135773 103279, 136353 103379, 136882 103330, 137201 103288, 137623 103123, 137969 103106, 138563 103213, 138786 103317, 138974 103260, 139246 103310, 139402 103231, 139102 102993, 139340 103043, 139565 102966, 139877 102792, 139845 102935, 139898 103096, 140036 103041, 140375 102674, 140862 102398, 141105 102152, 141382 102472, 141741 102568, 142001 102545, 142150 102604, 142135 102943, 142396 103154, 142942 102885, 143193 102610, 143529 102283, 143763 102185, 143838 102080, 143878 101879, 143969 101790, 144119 101959, 144311 102032, 144524 102223, 144678 102262, 144829 102401, 144974 102233, 145163 102159, 145511 102099, 145541 102073, 145998 101872, 146354 101835, 146500 101798, 146645 101832, 146867 101744, 146901 101517, 147271 101389, 147289 101492), (143581 135001, 143976 135192, 143940 135078, 144043 134952, 144013 134901, 143594 134807, 143581 135001), (68879 134758, 69248 134988, 69214 134862, 69298 134787, 69215 134663, 68774 134519, 68879 134758), (65782 134382, 65714 134660, 65735 134790, 65796 134809, 66043 134707, 66253 134741, 66493 134669, 66828 134926, 67017 134614, 66814 134713, 66601 134499, 66540 134559, 66487 134521, 66270 134667, 66058 134661, 65904 134347, 65827 134312, 65782 134382), (164793 134568, 164770 134690, 164905 134902, 164993 134817, 165283 134808, 165433 134869, 165622 134594, 165601 134517, 165139 134610, 164916 134441, 164793 134568), (143356 134540, 143449 134773, 143588 134782, 143708 134502, 143559 134451, 143356 134540), (170249 134097, 170241 134167, 170413 134497, 170597 134585, 170823 134629, 170854 134376, 170475 134334, 170593 134042, 170406 134003, 170249 134097), (137415 134174, 137526 134449, 137609 134353, 138162 134483, 138362 134150, 137891 134139, 137765 134170, 137577 134038, 137415 134174), (45978 133615, 46251 133757, 46366 133686, 46383 133467, 46213 133333, 45978 133615), (189640 132105, 190033 132258, 190139 132148, 189973 132090, 189640 132105), (193713 118969, 193757 118982, 193790 118915, 193726 118073, 193676 118023, 193713 118969), (191372 108040, 191400 108103, 191304 108436, 191327 108481, 191556 108335, 191594 108247, 191510 107981, 191407 107912, 191372 108040), (188119 105974, 188080 106056, 188126 106140, 188400 105920, 188318 105909, 188119 105974), (188652 105805, 188679 106125, 189087 106087, 188973 105793, 188652 105805), (189497 105786, 189534 105812, 189535 105925, 189583 105823, 189784 105774, 189926 105683, 189733 105606, 189497 105786), (131571 104488, 131787 104761, 131925 104881, 132137 104879, 132179 104738, 132085 104738, 131680 104507, 131686 104442, 131571 104488), (188398 103912, 188405 103992, 188567 104111, 188360 104298, 188335 104303, 188064 104441, 188048 104640, 188235 104846, 188465 104447, 188408 104330, 188567 104256, 188638 104158, 188640 104046, 188713 103903, 188484 103780, 188398 103912), (126133 104488, 125891 104479, 125575 104527, 125512 104660, 125931 104638, 126033 104613, 126166 104672, 126253 104598, 126251 104514, 126186 104425, 126133 104488), (187466 104348, 187379 104462, 187442 104536, 187763 104398, 187558 104297, 187570 104259, 187375 104173, 187466 104348), (120287 104169, 120666 104304, 120664 104164, 120395 103967, 120287 104169), (133346 103832, 133312 103838, 133367 104088, 133469 104201, 133668 104192, 133560 104017, 133663 103708, 133512 103644, 133346 103832), (182922 103927, 182951 104078, 183087 104160, 183256 104093, 183573 103898, 183598 103833, 183459 103611, 183514 103412, 182922 103927), (133024 103609, 132839 103701, 132613 103652, 132648 103884, 132899 103876, 133002 103960, 133310 103833, 133476 103591, 133254 103347, 133024 103609), (90511 103764, 90906 103803, 90904 103660, 90610 103549, 90511 103764), (95768 103681, 96057 103732, 96358 103662, 96506 103784, 96595 103702, 96614 103587, 96533 103461, 96475 103535, 96214 103469, 95938 103429, 95768 103681), (183989 103559, 184007 103692, 183892 103752, 184037 103736, 184199 103460, 184055 103448, 183989 103559), (73775 103408, 73759 103427, 74218 103505, 74486 103509, 74513 103446, 74456 103334, 74390 103386, 74146 103310, 73775 103408), (103243 103402, 103363 103347, 103697 103417, 103838 103273, 103639 103293, 103500 103088, 103243 103402), (175394 103184, 175246 103409, 175829 103298, 175863 103262, 176009 103310, 176077 103263, 176079 103189, 176037 103148, 175394 103184), (59468 102800, 59496 102829, 59618 102772, 59468 102800), (114617 102545, 114800 102539, 114898 102432, 114783 102428, 114493 102288, 114617 102545)), ((108850 136644, 108348 136570, 108610 136156, 108850 136644)), ((104897 136284, 104997 136403, 104652 136500, 104722 136201, 104897 136284)), ((174305 135194, 174168 135529, 174037 135603, 174086 135371, 174158 135328, 174135 135113, 174305 135194)), ((136146 135168, 135649 135133, 135649 135090, 135940 134969, 136146 135168)), ((41043 121936, 41186 122120, 41202 122554, 40944 122100, 40904 121929, 40928 121890, 41043 121936)), ((123856 103788, 123975 104015, 123854 104135, 123736 103997, 123463 103841, 123678 103718, 123856 103788)), ((181388 103391, 181538 103439, 181342 103486, 181240 103467, 181357 103063, 181388 103391)), ((119724 102830, 119639 103036, 119662 103128, 119569 103134, 119480 102926, 119554 102702, 119724 102830)), ((173519 102386, 173602 102512, 173609 102599, 173728 102771, 173514 102996, 173313 102755, 172941 102588, 173164 102419, 173266 102414, 173364 102332, 173519 102386)), ((94131 102562, 94237 102760, 94123 102883, 94024 102765, 93841 102777, 93907 102672, 93790 102609, 93947 102512, 94131 102562)), ((150965 102382, 150913 102507, 150983 102711, 150743 102752, 150574 102561, 150694 102218, 150965 102382)), ((68054 101957, 67990 102150, 68030 102280, 67838 102396, 67733 102292, 67830 101952, 68054 101957)), ((72160 101873, 72322 102233, 72151 102379, 71998 102153, 71724 102100, 71823 101958, 71736 101883, 71999 101784, 72160 101873)), ((169448 101850, 169401 101987, 169460 102194, 169226 102286, 169062 102121, 169154 101882, 169174 101745, 169448 101850))) \ No newline at end of file diff --git a/stress_benchmark/resources/017.settings b/stress_benchmark/resources/017.settings index d63440f363..969525f8a4 100644 --- a/stress_benchmark/resources/017.settings +++ b/stress_benchmark/resources/017.settings @@ -6,7 +6,6 @@ resolution=0 _plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 skin_preshrink=0.84 clean_between_layers=False -support_interface_skip_height=0.12 machine_feeder_wheel_diameter=10.0 retraction_hop_only_when_collides=True machine_steps_per_mm_y=50 @@ -44,6 +43,7 @@ cool_min_speed=10 cool_fan_enabled=True cool_fan_speed_max=100 wall_overhang_angle=90 +seam_overhang_angle=30 jerk_support_infill=12.0 wall_overhang_speed_factor=100 support_roof_line_width=0.42 diff --git a/stress_benchmark/resources/017.wkt b/stress_benchmark/resources/017.wkt index b4544fd166..90e4d20a7c 100644 --- a/stress_benchmark/resources/017.wkt +++ b/stress_benchmark/resources/017.wkt @@ -1 +1 @@ -MULTIPOLYGON (((122284 113666, 123049 114043, 123644 114573, 123807 114741, 124013 114851, 124694 115297, 125303 115758, 125477 115916, 126470 116593, 126877 117068, 127118 117496, 127198 117898, 127150 118483, 126911 119186, 126592 119585, 126417 119840, 126185 120009, 125875 120468, 125791 120830, 125570 121185, 125128 121546, 124505 121795, 123592 122108, 122792 122222, 122110 122359, 121721 122424, 120491 122690, 119083 122846, 117862 122758, 117763 122775, 117366 122773, 116401 122835, 115909 122763, 115524 122727, 114931 122571, 114688 122469, 114006 122066, 113525 121558, 113382 121190, 113331 120902, 113336 120423, 113435 120180, 113374 120162, 113261 119886, 113154 119124, 113056 119101, 112971 119049, 112951 119060, 112876 119015, 112876 117562, 112971 117561, 112971 117581, 113031 117580, 113199 117645, 113050 118095, 113047 118359, 113154 119124, 113313 119161, 113541 119143, 113730 118986, 113813 118820, 113829 118625, 113794 118331, 113720 118108, 113577 117902, 113387 117718, 113199 117645, 113418 116985, 113977 116351, 114630 115714, 115362 115246, 115786 115120, 116516 114855, 116827 114768, 117946 114378, 118613 114172, 118991 114040, 119480 113927, 119738 113857, 120380 113725, 120965 113662, 121646 113640) (121614 114261, 121064 114303, 120370 114429, 119460 114711, 118653 115046, 118123 115255, 117656 115587, 117471 115816, 117219 116158, 117211 116172, 117318 116184, 117780 116466, 118028 116856, 118121 117139, 118359 117797, 118565 118631, 118396 119434, 118187 119501, 117265 119777, 116604 119962, 116111 120021, 115697 120189, 115503 120202, 115046 120688, 114756 120572, 114589 120522, 114404 120312, 113986 119566, 114172 119488, 114407 119307, 114880 119168, 115414 118856, 115515 118521, 115805 118174, 115983 117895, 116510 117229, 116889 116730, 117211 116172, 116544 116099, 114823 116276, 114301 116789, 114029 117705, 113932 118116, 113853 118575, 113966 119530, 113986 119566, 113882 119610, 113707 119727, 113444 120158, 113435 120180, 114589 120522, 114708 120658, 115015 120868, 115439 121034, 115919 121203, 116646 121197, 117222 120978, 117287 120917, 117671 120679, 117893 120404, 118315 119816, 118396 119434, 119119 119201, 120958 118521, 121156 118424, 121146 118347, 121156 118119, 121735 116490, 122179 116091, 122487 115947, 123304 115941, 123897 116077, 123827 116268, 123534 116772, 123219 117125, 122819 117483, 122461 117739, 122053 117985, 121156 118424, 121271 119318, 121374 119471, 121819 120261, 122060 120458, 122199 120633, 122737 120931, 123273 121039, 123624 120983, 124108 120884, 124503 120664, 124823 120383, 125303 119692, 125384 119374, 125532 118648, 125478 117748, 125332 116868, 124898 116307, 123897 116077, 123943 115953, 124020 115582, 124018 115263, 123972 115012, 123840 114774, 123807 114741, 123458 114553, 122968 114387, 122292 114251))) \ No newline at end of file +MULTIPOLYGON (((122284 113666, 123049 114043, 123644 114573, 123807 114741, 124013 114851, 124694 115297, 125303 115758, 125477 115916, 126470 116593, 126877 117068, 127118 117496, 127198 117898, 127150 118483, 126911 119186, 126592 119585, 126417 119840, 126185 120009, 125875 120468, 125791 120830, 125570 121185, 125128 121546, 124505 121795, 123592 122108, 122792 122222, 122110 122359, 121721 122424, 120491 122690, 119083 122846, 117862 122758, 117763 122775, 117366 122773, 116401 122835, 115909 122763, 115524 122727, 114931 122571, 114688 122469, 114006 122066, 113525 121558, 113382 121190, 113331 120902, 113336 120423, 113435 120180, 113374 120162, 113261 119886, 113154 119124, 113056 119101, 112971 119049, 112951 119060, 112876 119015, 112876 117562, 112971 117561, 112971 117581, 113031 117580, 113199 117645, 113050 118095, 113047 118359, 113154 119124, 113313 119161, 113541 119143, 113730 118986, 113813 118820, 113829 118625, 113794 118331, 113720 118108, 113577 117902, 113387 117718, 113199 117645, 113418 116985, 113977 116351, 114630 115714, 115362 115246, 115786 115120, 116516 114855, 116827 114768, 117946 114378, 118613 114172, 118991 114040, 119480 113927, 119738 113857, 120380 113725, 120965 113662, 121646 113640, 122284 113666), (121614 114261, 121064 114303, 120370 114429, 119460 114711, 118653 115046, 118123 115255, 117656 115587, 117471 115816, 117219 116158, 117211 116172, 117318 116184, 117780 116466, 118028 116856, 118121 117139, 118359 117797, 118565 118631, 118396 119434, 118187 119501, 117265 119777, 116604 119962, 116111 120021, 115697 120189, 115503 120202, 115046 120688, 114756 120572, 114589 120522, 114404 120312, 113986 119566, 114172 119488, 114407 119307, 114880 119168, 115414 118856, 115515 118521, 115805 118174, 115983 117895, 116510 117229, 116889 116730, 117211 116172, 116544 116099, 114823 116276, 114301 116789, 114029 117705, 113932 118116, 113853 118575, 113966 119530, 113986 119566, 113882 119610, 113707 119727, 113444 120158, 113435 120180, 114589 120522, 114708 120658, 115015 120868, 115439 121034, 115919 121203, 116646 121197, 117222 120978, 117287 120917, 117671 120679, 117893 120404, 118315 119816, 118396 119434, 119119 119201, 120958 118521, 121156 118424, 121146 118347, 121156 118119, 121735 116490, 122179 116091, 122487 115947, 123304 115941, 123897 116077, 123827 116268, 123534 116772, 123219 117125, 122819 117483, 122461 117739, 122053 117985, 121156 118424, 121271 119318, 121374 119471, 121819 120261, 122060 120458, 122199 120633, 122737 120931, 123273 121039, 123624 120983, 124108 120884, 124503 120664, 124823 120383, 125303 119692, 125384 119374, 125532 118648, 125478 117748, 125332 116868, 124898 116307, 123897 116077, 123943 115953, 124020 115582, 124018 115263, 123972 115012, 123840 114774, 123807 114741, 123458 114553, 122968 114387, 122292 114251, 121614 114261))) \ No newline at end of file diff --git a/stress_benchmark/resources/018.settings b/stress_benchmark/resources/018.settings index 64168b1780..6d53183cd2 100644 --- a/stress_benchmark/resources/018.settings +++ b/stress_benchmark/resources/018.settings @@ -6,7 +6,6 @@ resolution=0 _plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 skin_preshrink=0.8 clean_between_layers=False -support_interface_skip_height=0.2 machine_feeder_wheel_diameter=10.0 retraction_hop_only_when_collides=False machine_steps_per_mm_y=50 @@ -44,6 +43,7 @@ cool_min_speed=10 cool_fan_enabled=True cool_fan_speed_max=100 wall_overhang_angle=90 +seam_overhang_angle=30 jerk_support_infill=8 wall_overhang_speed_factor=100 support_roof_line_width=0.4 diff --git a/stress_benchmark/resources/018.wkt b/stress_benchmark/resources/018.wkt index 6bf799f16d..e1c2d027e7 100644 --- a/stress_benchmark/resources/018.wkt +++ b/stress_benchmark/resources/018.wkt @@ -1 +1 @@ -MULTIPOLYGON (((141081 74767, 139636 77164, 138734 78622, 138930 78626, 138596 78845, 138357 79231, 138300 79321, 138304 79324, 138764 79424, 139451 79535, 142110 79915, 141982 79855, 141655 79585, 141469 79233, 141469 78896, 139809 78693, 139071 78628, 138930 78626, 138958 78607, 140775 77476, 141587 77005, 141880 76912, 142155 76872, 142553 76905, 142876 76950, 143745 77097, 145375 77400, 146659 77660, 147211 77782, 147673 77899, 148001 78086, 148047 78174, 148028 78473, 147871 78965, 147712 79401, 147609 79651, 147583 79655, 147254 79658, 146851 79625, 145886 79499, 143608 79182, 143633 79124, 143635 78737, 143448 78377, 143123 78109, 142720 77959, 142300 77965, 141925 78144, 141634 78455, 141469 78838, 141469 78896, 142087 78971, 143608 79182, 143469 79508, 143180 79819, 142805 79999, 142748 80006, 143423 80102, 144866 80295, 146043 80434, 146451 80468, 146906 80478, 147144 80409, 147318 80291, 147493 79930, 147609 79651, 147926 79601, 148244 79455, 148516 79287, 150182 78096, 151043 77527, 151666 77151, 152317 76797, 152649 76634, 152984 76483, 153321 76346, 153659 76225, 153995 76120, 154330 76028, 154987 75884, 155622 75783, 156508 75692, 157046 75662, 157532 75648, 158286 75648, 158571 75663, 158889 75706, 159172 75789, 159439 75895, 159981 76160, 161249 76845, 165147 78983, 165747 79291, 166054 79432, 166371 79550, 166735 79613, 167182 79559, 167799 79441, 169169 79158, 170165 78975, 170407 78965, 170605 79024, 170797 79187, 171003 79486, 171244 79956, 171384 80266, 171714 81056, 172128 82101, 174013 86953, 175420 90540, 176953 94371, 178546 98254, 179748 101101, 181309 104695, 182056 106367, 182770 107934, 183753 110043, 184603 111809, 185282 113164, 185644 113848, 185919 114332, 186170 114709, 186357 114919, 186517 115023, 186672 115055, 186938 115029, 188500 114761, 188797 114726, 188973 114750, 189167 114885, 189337 115073, 189575 115434, 189761 115743, 190236 116597, 194244 124274, 196451 128433, 199325 133767, 204481 143245, 205724 145561, 206981 147940, 208247 150381, 209512 152882, 210769 155438, 212015 158046, 213248 160700, 214463 163393, 215659 166120, 216828 168870, 217971 171636, 219085 174408, 220165 177173, 221210 179922, 222219 182647, 223187 185334, 224113 187971, 224997 190549, 225851 193099, 226633 195490, 227386 197847, 228095 200129, 228764 202337, 229395 204476, 229989 206549, 230550 208561, 231077 210516, 231597 212501, 232048 214272, 232493 216082, 233059 218470, 233703 221298, 234428 224638, 234772 226283, 235426 229526, 235864 231800, 231779 231800, 231243 229069, 230917 227461, 230220 224149, 229491 220854, 229096 219140, 228242 215603, 227779 213772, 227289 211892, 226768 209959, 226216 207968, 225629 205914, 225006 203794, 224344 201604, 223642 199342, 222897 197002, 222108 194583, 221275 192086, 220397 189518, 219477 186889, 218450 184032, 217515 181496, 216482 178756, 215414 176000, 214317 173241, 213193 170492, 211988 167626, 210879 165059, 209651 162292, 208502 159774, 207299 157208, 206093 154701, 204889 152258, 203689 149883, 202504 147576, 201331 145321, 197505 138025, 195071 133318, 193856 130934, 192051 127327, 190830 124845, 189099 121277, 188517 120105, 188107 119325, 187939 119035, 187726 118703, 187553 118511, 187316 118352, 186950 118356, 186289 118419, 185066 118554, 184775 118565, 184510 118473, 184308 118292, 184057 117975, 183906 117754, 183535 117162, 182767 115832, 182052 114550, 180876 112386, 179999 110731, 178606 108022, 177655 106110, 176706 104150, 175780 102171, 175332 101184, 174473 99228, 173675 97321, 172941 95478, 172594 94579, 171947 92834, 171356 91176, 170823 89624, 170346 88184, 169228 84692, 168851 83574, 168661 83081, 168503 82757, 168300 82521, 168114 82478, 167535 82727, 166455 83227, 166001 83414, 165762 83463, 165508 83454, 165144 83324, 164567 83059, 163379 82445, 159201 80220, 158265 79754, 157900 79607, 157531 79511, 157003 79493, 156740 79496, 156274 79529, 155916 79577, 155412 79676, 154860 79846, 154372 80038, 154114 80157, 153571 80440, 153006 80773, 152432 81138, 151594 81706, 149808 82983, 149526 83172, 149192 83352, 148867 83433, 148562 83455, 148195 83439, 147033 83296, 143540 82813, 141898 82605, 140916 82493, 140360 82441, 139962 82417, 139500 82423, 139227 82529, 139075 82640, 138818 82948, 137896 84307, 137446 84946, 137043 85489, 136758 85722, 136513 85729, 136300 85632, 135896 85372, 135526 85116, 134981 84716, 134876 84634, 134786 84771, 133406 86820, 131393 85694, 132948 83442, 134101 81726, 135307 79891, 136390 78210, 137522 76415, 139013 73988))) \ No newline at end of file +MULTIPOLYGON (((141081 74767, 139636 77164, 138734 78622, 138930 78626, 138596 78845, 138357 79231, 138300 79321, 138304 79324, 138764 79424, 139451 79535, 142110 79915, 141982 79855, 141655 79585, 141469 79233, 141469 78896, 139809 78693, 139071 78628, 138930 78626, 138958 78607, 140775 77476, 141587 77005, 141880 76912, 142155 76872, 142553 76905, 142876 76950, 143745 77097, 145375 77400, 146659 77660, 147211 77782, 147673 77899, 148001 78086, 148047 78174, 148028 78473, 147871 78965, 147712 79401, 147609 79651, 147583 79655, 147254 79658, 146851 79625, 145886 79499, 143608 79182, 143633 79124, 143635 78737, 143448 78377, 143123 78109, 142720 77959, 142300 77965, 141925 78144, 141634 78455, 141469 78838, 141469 78896, 142087 78971, 143608 79182, 143469 79508, 143180 79819, 142805 79999, 142748 80006, 143423 80102, 144866 80295, 146043 80434, 146451 80468, 146906 80478, 147144 80409, 147318 80291, 147493 79930, 147609 79651, 147926 79601, 148244 79455, 148516 79287, 150182 78096, 151043 77527, 151666 77151, 152317 76797, 152649 76634, 152984 76483, 153321 76346, 153659 76225, 153995 76120, 154330 76028, 154987 75884, 155622 75783, 156508 75692, 157046 75662, 157532 75648, 158286 75648, 158571 75663, 158889 75706, 159172 75789, 159439 75895, 159981 76160, 161249 76845, 165147 78983, 165747 79291, 166054 79432, 166371 79550, 166735 79613, 167182 79559, 167799 79441, 169169 79158, 170165 78975, 170407 78965, 170605 79024, 170797 79187, 171003 79486, 171244 79956, 171384 80266, 171714 81056, 172128 82101, 174013 86953, 175420 90540, 176953 94371, 178546 98254, 179748 101101, 181309 104695, 182056 106367, 182770 107934, 183753 110043, 184603 111809, 185282 113164, 185644 113848, 185919 114332, 186170 114709, 186357 114919, 186517 115023, 186672 115055, 186938 115029, 188500 114761, 188797 114726, 188973 114750, 189167 114885, 189337 115073, 189575 115434, 189761 115743, 190236 116597, 194244 124274, 196451 128433, 199325 133767, 204481 143245, 205724 145561, 206981 147940, 208247 150381, 209512 152882, 210769 155438, 212015 158046, 213248 160700, 214463 163393, 215659 166120, 216828 168870, 217971 171636, 219085 174408, 220165 177173, 221210 179922, 222219 182647, 223187 185334, 224113 187971, 224997 190549, 225851 193099, 226633 195490, 227386 197847, 228095 200129, 228764 202337, 229395 204476, 229989 206549, 230550 208561, 231077 210516, 231597 212501, 232048 214272, 232493 216082, 233059 218470, 233703 221298, 234428 224638, 234772 226283, 235426 229526, 235864 231800, 231779 231800, 231243 229069, 230917 227461, 230220 224149, 229491 220854, 229096 219140, 228242 215603, 227779 213772, 227289 211892, 226768 209959, 226216 207968, 225629 205914, 225006 203794, 224344 201604, 223642 199342, 222897 197002, 222108 194583, 221275 192086, 220397 189518, 219477 186889, 218450 184032, 217515 181496, 216482 178756, 215414 176000, 214317 173241, 213193 170492, 211988 167626, 210879 165059, 209651 162292, 208502 159774, 207299 157208, 206093 154701, 204889 152258, 203689 149883, 202504 147576, 201331 145321, 197505 138025, 195071 133318, 193856 130934, 192051 127327, 190830 124845, 189099 121277, 188517 120105, 188107 119325, 187939 119035, 187726 118703, 187553 118511, 187316 118352, 186950 118356, 186289 118419, 185066 118554, 184775 118565, 184510 118473, 184308 118292, 184057 117975, 183906 117754, 183535 117162, 182767 115832, 182052 114550, 180876 112386, 179999 110731, 178606 108022, 177655 106110, 176706 104150, 175780 102171, 175332 101184, 174473 99228, 173675 97321, 172941 95478, 172594 94579, 171947 92834, 171356 91176, 170823 89624, 170346 88184, 169228 84692, 168851 83574, 168661 83081, 168503 82757, 168300 82521, 168114 82478, 167535 82727, 166455 83227, 166001 83414, 165762 83463, 165508 83454, 165144 83324, 164567 83059, 163379 82445, 159201 80220, 158265 79754, 157900 79607, 157531 79511, 157003 79493, 156740 79496, 156274 79529, 155916 79577, 155412 79676, 154860 79846, 154372 80038, 154114 80157, 153571 80440, 153006 80773, 152432 81138, 151594 81706, 149808 82983, 149526 83172, 149192 83352, 148867 83433, 148562 83455, 148195 83439, 147033 83296, 143540 82813, 141898 82605, 140916 82493, 140360 82441, 139962 82417, 139500 82423, 139227 82529, 139075 82640, 138818 82948, 137896 84307, 137446 84946, 137043 85489, 136758 85722, 136513 85729, 136300 85632, 135896 85372, 135526 85116, 134981 84716, 134876 84634, 134786 84771, 133406 86820, 131393 85694, 132948 83442, 134101 81726, 135307 79891, 136390 78210, 137522 76415, 139013 73988, 141081 74767))) \ No newline at end of file diff --git a/stress_benchmark/resources/019.settings b/stress_benchmark/resources/019.settings index e1a9b826ee..d4740b0130 100644 --- a/stress_benchmark/resources/019.settings +++ b/stress_benchmark/resources/019.settings @@ -6,7 +6,6 @@ resolution=0 _plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 skin_preshrink=0.8 clean_between_layers=False -support_interface_skip_height=0.2 machine_feeder_wheel_diameter=10.0 retraction_hop_only_when_collides=False machine_steps_per_mm_y=50 @@ -44,6 +43,7 @@ cool_min_speed=10 cool_fan_enabled=True cool_fan_speed_max=100 wall_overhang_angle=90 +seam_overhang_angle=30 jerk_support_infill=8 wall_overhang_speed_factor=100 support_roof_line_width=0.4 diff --git a/stress_benchmark/resources/019.wkt b/stress_benchmark/resources/019.wkt index df74539f00..334ce9ef9f 100644 --- a/stress_benchmark/resources/019.wkt +++ b/stress_benchmark/resources/019.wkt @@ -1 +1 @@ -MULTIPOLYGON (((120264 173957, 120384 174108, 110615 174109, 110736 173957, 111261 172596, 119739 172595)), ((109264 173957, 109384 174108, 99615 174109, 99736 173957, 100261 172596, 108739 172595)), ((98264 173957, 98384 174108, 88616 174108, 88736 173957, 89261 172596, 97739 172595)), ((131264 173957, 131384 174108, 121616 174108, 121736 173957, 122261 172596, 130739 172595)), ((174108 131384, 173957 131264, 172596 130739, 172596 122260, 173957 121736, 174108 121616)), ((46043 121736, 47404 122261, 47405 130739, 46043 131264, 45892 131384, 45892 121616)), ((174109 120385, 173957 120264, 172596 119739, 172596 111260, 173957 110736, 174108 110616)), ((46043 110736, 47404 111261, 47405 119739, 46043 120264, 45892 120384, 45891 110615)), ((174109 109385, 173957 109264, 172596 108739, 172596 100260, 173957 99736, 174108 99616)), ((46043 99736, 47404 100261, 47405 108739, 46043 109264, 45892 109384, 45891 99615)), ((46043 88736, 47404 89261, 47405 97739, 46043 98264, 45892 98384, 45892 88616)), ((174108 98384, 173957 98264, 172596 97739, 172596 89260, 173957 88736, 174108 88616)), ((98264 46043, 97739 47404, 89260 47404, 88736 46043, 88616 45892, 98384 45892)), ((131264 46043, 130739 47404, 122260 47404, 121736 46043, 121616 45892, 131384 45892)), ((120264 46043, 119739 47404, 111260 47404, 110736 46043, 110616 45892, 120385 45891)), ((109264 46043, 108739 47404, 100260 47404, 99736 46043, 99616 45892, 109385 45891)), ((165002 41351, 165002 42361, 177640 42360, 177639 55002, 178648 55002, 178655 55358, 178649 77573, 178655 77646, 178649 78002, 177639 78002, 177639 80000, 176630 80000, 176630 81000, 177639 81000, 177640 139000, 176630 139000, 176630 140000, 177639 140000, 177640 142002, 178648 142002, 178655 142358, 178649 164573, 178655 164646, 178649 165002, 177639 165002, 177640 177640, 164998 177639, 164998 178648, 164642 178655, 142427 178649, 142354 178655, 141998 178649, 141998 177639, 140000 177639, 140000 176630, 139000 176630, 139000 177639, 81000 177640, 81000 176630, 80000 176630, 80000 177639, 77998 177640, 77998 178648, 77642 178655, 55427 178649, 55354 178655, 54998 178649, 54998 177639, 42360 177640, 42361 164998, 41352 164998, 41345 164642, 41351 142427, 41345 142354, 41351 141998, 42361 141998, 42361 140000, 43369 140000, 43370 139000, 42361 139000, 42360 81000, 43370 81000, 43370 80000, 42361 80000, 42360 77998, 41352 77998, 41345 77642, 41351 55427, 41345 55354, 41351 54998, 42361 54998, 42360 42360, 55002 42361, 55002 41352, 55358 41345, 77573 41351, 77646 41345, 78002 41351, 78002 42361, 80000 42361, 80000 43370, 81000 43370, 81000 42361, 139000 42360, 139000 43370, 140000 43370, 140000 42361, 142002 42360, 142002 41352, 142358 41345, 164573 41351, 164646 41345) (80000 45891, 87384 45892, 87264 46043, 86739 47404, 47405 47405, 47405 86739, 46043 87264, 45892 87384, 45891 80000, 44379 80000, 44378 140000, 45891 140000, 45892 132616, 46043 132736, 47404 133261, 47404 172596, 86739 172595, 87264 173957, 87384 174108, 80000 174109, 80000 175621, 140000 175622, 140000 174109, 132616 174108, 132736 173957, 133261 172596, 172596 172596, 172595 133261, 173957 132736, 174108 132616, 174109 140000, 175621 140000, 175622 80000, 174109 80000, 174108 87384, 173957 87264, 172596 86739, 172596 47404, 133261 47405, 132736 46043, 132616 45892, 140000 45891, 140000 44379, 80000 44378))) \ No newline at end of file +MULTIPOLYGON (((120264 173957, 120384 174108, 110615 174109, 110736 173957, 111261 172596, 119739 172595, 120264 173957)), ((109264 173957, 109384 174108, 99615 174109, 99736 173957, 100261 172596, 108739 172595, 109264 173957)), ((98264 173957, 98384 174108, 88616 174108, 88736 173957, 89261 172596, 97739 172595, 98264 173957)), ((131264 173957, 131384 174108, 121616 174108, 121736 173957, 122261 172596, 130739 172595, 131264 173957)), ((174108 131384, 173957 131264, 172596 130739, 172596 122260, 173957 121736, 174108 121616, 174108 131384)), ((46043 121736, 47404 122261, 47405 130739, 46043 131264, 45892 131384, 45892 121616, 46043 121736)), ((174109 120385, 173957 120264, 172596 119739, 172596 111260, 173957 110736, 174108 110616, 174109 120385)), ((46043 110736, 47404 111261, 47405 119739, 46043 120264, 45892 120384, 45891 110615, 46043 110736)), ((174109 109385, 173957 109264, 172596 108739, 172596 100260, 173957 99736, 174108 99616, 174109 109385)), ((46043 99736, 47404 100261, 47405 108739, 46043 109264, 45892 109384, 45891 99615, 46043 99736)), ((46043 88736, 47404 89261, 47405 97739, 46043 98264, 45892 98384, 45892 88616, 46043 88736)), ((174108 98384, 173957 98264, 172596 97739, 172596 89260, 173957 88736, 174108 88616, 174108 98384)), ((98264 46043, 97739 47404, 89260 47404, 88736 46043, 88616 45892, 98384 45892, 98264 46043)), ((131264 46043, 130739 47404, 122260 47404, 121736 46043, 121616 45892, 131384 45892, 131264 46043)), ((120264 46043, 119739 47404, 111260 47404, 110736 46043, 110616 45892, 120385 45891, 120264 46043)), ((109264 46043, 108739 47404, 100260 47404, 99736 46043, 99616 45892, 109385 45891, 109264 46043)), ((165002 41351, 165002 42361, 177640 42360, 177639 55002, 178648 55002, 178655 55358, 178649 77573, 178655 77646, 178649 78002, 177639 78002, 177639 80000, 176630 80000, 176630 81000, 177639 81000, 177640 139000, 176630 139000, 176630 140000, 177639 140000, 177640 142002, 178648 142002, 178655 142358, 178649 164573, 178655 164646, 178649 165002, 177639 165002, 177640 177640, 164998 177639, 164998 178648, 164642 178655, 142427 178649, 142354 178655, 141998 178649, 141998 177639, 140000 177639, 140000 176630, 139000 176630, 139000 177639, 81000 177640, 81000 176630, 80000 176630, 80000 177639, 77998 177640, 77998 178648, 77642 178655, 55427 178649, 55354 178655, 54998 178649, 54998 177639, 42360 177640, 42361 164998, 41352 164998, 41345 164642, 41351 142427, 41345 142354, 41351 141998, 42361 141998, 42361 140000, 43369 140000, 43370 139000, 42361 139000, 42360 81000, 43370 81000, 43370 80000, 42361 80000, 42360 77998, 41352 77998, 41345 77642, 41351 55427, 41345 55354, 41351 54998, 42361 54998, 42360 42360, 55002 42361, 55002 41352, 55358 41345, 77573 41351, 77646 41345, 78002 41351, 78002 42361, 80000 42361, 80000 43370, 81000 43370, 81000 42361, 139000 42360, 139000 43370, 140000 43370, 140000 42361, 142002 42360, 142002 41352, 142358 41345, 164573 41351, 164646 41345, 165002 41351), (80000 45891, 87384 45892, 87264 46043, 86739 47404, 47405 47405, 47405 86739, 46043 87264, 45892 87384, 45891 80000, 44379 80000, 44378 140000, 45891 140000, 45892 132616, 46043 132736, 47404 133261, 47404 172596, 86739 172595, 87264 173957, 87384 174108, 80000 174109, 80000 175621, 140000 175622, 140000 174109, 132616 174108, 132736 173957, 133261 172596, 172596 172596, 172595 133261, 173957 132736, 174108 132616, 174109 140000, 175621 140000, 175622 80000, 174109 80000, 174108 87384, 173957 87264, 172596 86739, 172596 47404, 133261 47405, 132736 46043, 132616 45892, 140000 45891, 140000 44379, 80000 44378, 80000 45891))) \ No newline at end of file diff --git a/stress_benchmark/resources/020.settings b/stress_benchmark/resources/020.settings index a38b801b56..569708996f 100644 --- a/stress_benchmark/resources/020.settings +++ b/stress_benchmark/resources/020.settings @@ -6,7 +6,6 @@ resolution=0 _plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 skin_preshrink=0.8 clean_between_layers=False -support_interface_skip_height=0.25 machine_feeder_wheel_diameter=10.0 retraction_hop_only_when_collides=False machine_steps_per_mm_y=50 @@ -44,6 +43,7 @@ cool_min_speed=10 cool_fan_enabled=True cool_fan_speed_max=100 wall_overhang_angle=90 +seam_overhang_angle=30 jerk_support_infill=20 wall_overhang_speed_factor=100 support_roof_line_width=0.8 diff --git a/stress_benchmark/resources/020.wkt b/stress_benchmark/resources/020.wkt index f60f1015df..8c72769c13 100644 --- a/stress_benchmark/resources/020.wkt +++ b/stress_benchmark/resources/020.wkt @@ -1 +1 @@ -MULTIPOLYGON (((402121 100550, 402567 100684, 402759 100844, 402807 101064, 401914 110025, 400645 123031, 400840 125036, 412494 125403, 412515 125536, 412689 125681, 412692 125682, 412697 125681, 412886 125554, 412921 125416, 412494 125403, 412482 125323, 412824 123054, 412443 115525, 411786 101283, 411841 101065, 412038 100914, 412374 100830, 412847 100812, 413937 100844, 415387 100946, 415816 101100, 415997 101269, 416032 101492, 414220 113794, 412824 123054, 412940 125344, 412921 125416, 417267 125553, 426762 126450, 426775 126570, 426932 126714, 427112 126603, 427148 126487, 426762 126450, 426751 126354, 427169 124222, 427138 113717, 427083 102299, 427152 102085, 427359 101944, 427819 101854, 429295 101967, 430768 102138, 431204 102315, 431380 102493, 431406 102716, 429574 111944, 427169 124222, 427175 126397, 427148 126487, 434465 127178, 438949 127888, 438957 128037, 439116 128200, 439121 128202, 439139 128201, 439338 128092, 439387 127958, 438949 127888, 438946 127822, 439526 125509, 439883 118011, 440616 103833, 440691 103621, 440900 103490, 441350 103419, 442776 103601, 444194 103840, 444602 104034, 444763 104219, 444776 104444, 441784 116510, 439526 125509, 439413 127888, 439387 127958, 451528 129881, 453033 130218, 453033 130219, 453037 130437, 453189 130606, 453204 130612, 453217 130612, 453421 130512, 453500 130322, 453033 130218, 453735 127862, 454687 117762, 455749 106320, 455838 106115, 456054 105994, 456514 105947, 457942 106195, 459360 106501, 459772 106719, 459927 106913, 459930 107138, 457215 116176, 453735 127862, 453504 130312, 453500 130322, 465054 132905, 465046 133079, 465187 133256, 465208 133266, 465235 133267, 465444 133176, 465522 133010, 465054 132905, 465056 132863, 465895 130508, 466965 123133, 469045 109151, 469142 108948, 469360 108836, 469816 108811, 471211 109126, 472593 109500, 472981 109732, 473123 109933, 473114 110157, 468964 121890, 465895 130508, 465536 132980, 465522 133010, 468387 133650, 478829 136684, 478819 136820, 478954 137004, 478982 137019, 479010 137021, 479223 136940, 479289 136817, 478829 136684, 478835 136602, 479825 134163, 481707 124432, 483880 113088, 483987 112892, 484212 112791, 484668 112787, 486052 113167, 487422 113606, 487801 113860, 487935 114067, 487915 114291, 484347 123023, 479825 134163, 479325 136749, 479289 136817, 484977 138470, 490555 140478, 490535 140616, 490658 140806, 490677 140817, 490703 140821, 490919 140751, 490989 140635, 490555 140478, 490566 140402, 491622 138152, 493407 130870, 496812 117182, 496927 116988, 497157 116899, 497614 116918, 498978 117368, 500325 117876, 500688 118145, 500811 118358, 500781 118581, 495501 129890, 491622 138152, 491031 140565, 490989 140635, 501231 144322, 503912 145482, 503880 145664, 503996 145860, 504027 145880, 504057 145886, 504276 145826, 504372 145681, 503912 145482, 503918 145450, 505153 143088, 507945 133654, 511214 122536, 511340 122350, 511572 122271, 512024 122311, 513360 122820, 514675 123386, 515028 123675, 515139 123893, 515099 124114, 510728 132424, 505153 143088, 504396 145645, 504372 145681, 515236 150382, 515187 150582, 515293 150782, 515299 150787, 515309 150789, 515531 150741, 515660 150567, 515660 150566, 515236 150382, 515239 150372, 516429 148368, 518954 141146, 523657 127844, 523790 127663, 524030 127597, 524486 127662, 525818 128250, 527119 128887, 527464 129196, 527568 129421, 527518 129640, 521140 140434, 516429 148368, 515660 150566, 517085 151182, 528024 156756, 527986 156893, 528083 157099, 528106 157117, 528123 157122, 528347 157083, 528441 156968, 528024 156756, 528044 156684, 529450 154528, 533167 145343, 537498 134570, 537642 134398, 537881 134342, 538331 134426, 539613 135064, 540873 135757, 541196 136078, 541286 136307, 541225 136523, 536114 144308, 529450 154528, 528484 156915, 528441 156968, 532478 159025, 538810 162770, 538769 162884, 538847 163072, 539049 163048, 539129 162959, 538810 162770, 538842 162681, 540043 161044, 543360 153855, 549332 141033, 549483 140867, 549730 140826, 550192 140942, 551479 141667, 552739 142442, 553059 142786, 553144 143022, 553072 143235, 545636 153423, 540043 161044, 539193 162887, 539129 162959, 547347 167819, 550927 170252, 550876 170385, 550956 170601, 550969 170613, 550983 170619, 551211 170605, 551307 170510, 550927 170252, 550954 170182, 552536 168209, 557140 159389, 562488 149077, 562648 148919, 562893 148889, 563332 149016, 564565 149785, 565763 150605, 566059 150959, 566129 151196, 566048 151406, 560268 158565, 552536 168209, 551365 170452, 551307 170510, 560945 177060, 560942 177064, 560852 177260, 560903 177435, 561088 177430, 561247 177285, 561255 177271, 560945 177060, 562203 175648, 566108 168965, 573440 156507, 573607 156356, 573857 156340, 574300 156495, 575510 157341, 576685 158230, 576970 158601, 577031 158844, 576940 159050, 568764 168284, 562203 175648, 561255 177271, 561635 177529, 572499 185956, 572428 186095, 572486 186318, 572497 186331, 572512 186339, 572741 186349, 572870 186244, 572499 185956, 572526 185902, 574302 184091, 579493 176182, 586095 166048, 586270 165906, 586518 165900, 586941 166069, 588093 166956, 589208 167890, 589465 168269, 589511 168512, 589410 168713, 583298 174914, 574302 184091, 572910 186211, 572870 186244, 575285 188117, 581473 193572, 581414 193674, 581453 193873, 581657 193888, 581751 193818, 581473 193572, 581522 193487, 583026 192096, 587296 186159, 595929 174219, 596110 174084, 596360 174092, 596791 174293, 597915 175252, 599003 176253, 599252 176653, 599290 176900, 599180 177097, 590390 185285, 583026 192096, 581830 193759, 581751 193818, 588244 199542, 592330 203628, 592260 203741, 592292 203967, 592303 203983, 592326 203998, 592553 204028, 592659 203957, 592330 203628, 592375 203557, 594360 201890, 600242 194598, 607827 185134, 608015 185010, 608261 185026, 608666 185235, 609712 186217, 610717 187240, 610936 187642, 610958 187887, 610837 188077, 604107 193705, 594360 201890, 592733 203907, 592659 203957, 600459 211757, 600650 211973, 600621 211995, 600495 212171, 600517 212397, 600521 212404, 600531 212411, 600755 212449, 600939 212336, 600954 212319, 600650 211973, 602485 210576, 607188 205222, 616865 194255, 617056 194138, 617301 194166, 617702 194400, 618713 195443, 619680 196524, 619883 196940, 619895 197188, 619766 197372, 610235 204676, 602485 210576, 600954 212319, 610434 223073, 610312 223232, 610321 223460, 610336 223487, 610366 223511, 610589 223562, 610776 223460, 610434 223073, 610444 223060, 612660 221538, 619121 214942, 627611 206226, 627810 206120, 628052 206159, 628436 206405, 629378 207478, 630277 208591, 630456 209011, 630453 209257, 630314 209433, 623059 214398, 612660 221538, 610780 223458, 610776 223460, 611883 224716, 617790 232330, 617705 232426, 617705 232653, 617715 232674, 617735 232691, 617954 232751, 618072 232694, 617790 232330, 617849 232263, 619975 230946, 625107 226135, 635748 216201, 635950 216102, 636190 216153, 636562 216419, 637459 217543, 638306 218697, 638467 219129, 638453 219375, 638306 219545, 628109 225907, 619975 230946, 618150 232657, 618072 232694, 622471 238365, 626502 244297, 626412 244391, 626401 244618, 626414 244649, 626436 244670, 626653 244740, 626770 244691, 626502 244297, 626562 244233, 628874 242955, 635949 237000, 645263 229120, 645471 229035, 645709 229097, 646070 229384, 646907 230546, 647699 231746, 647836 232181, 647809 232425, 647654 232588, 639979 236816, 628874 242955, 626853 244656, 626770 244691, 632181 252654, 633039 254105, 632884 254250, 632863 254477, 632873 254503, 632890 254521, 633102 254600, 633291 254530, 633039 254105, 633042 254102, 635301 252988, 640883 248688, 652412 239848, 652621 239770, 652856 239843, 653199 240141, 653981 241341, 654709 242569, 654826 243010, 654788 243252, 654625 243407, 643848 248771, 635301 252988, 633305 254525, 633291 254530, 640590 266871, 640569 266880, 640405 267022, 640374 267248, 640380 267266, 640388 267276, 640597 267367, 640805 267303, 640834 267283, 640590 266871, 642848 265895, 650574 260568, 660621 253605, 660837 253540, 661069 253627, 661401 253948, 662131 255203, 662812 256492, 662909 256940, 662860 257182, 662691 257330, 654711 260765, 642848 265895, 640834 267283, 640976 267523, 645990 277364, 645888 277443, 645846 277666, 645850 277683, 645857 277691, 646060 277790, 646190 277756, 645990 277364, 646059 277310, 648302 276461, 654364 272661, 666704 264972, 666920 264913, 667147 265010, 667462 265342, 668125 266614, 668735 267912, 668808 268363, 668747 268602, 668570 268740, 657295 273058, 648302 276461, 646270 277735, 646190 277756, 648819 282916, 652252 290851, 652156 290919, 652107 291127, 652292 291232, 652407 291208, 652252 290851, 652332 290794, 654418 290123, 662858 285428, 673543 279448, 673764 279405, 673988 279518, 674293 279879, 674907 281223, 675473 282592, 675530 283060, 675459 283300, 675277 283431, 667120 286039, 654418 290123, 652504 291188, 652407 291208, 655679 298770, 656720 301662, 656581 301751, 656517 301969, 656517 301971, 656521 301977, 656715 302100, 656869 302076, 656720 301662, 656764 301634, 658999 301031, 665426 297816, 678499 291333, 678720 291297, 678937 291417, 679217 291778, 679762 293127, 680248 294490, 680280 294952, 680197 295185, 680008 295308, 668352 298508, 658999 301031, 656928 302067, 656869 302076, 661531 315024, 661657 315456, 661640 315460, 661453 315567, 661390 315749, 661547 315858, 661761 315833, 661765 315831, 661657 315456, 663614 315025, 672997 310933, 683834 306177, 684059 306155, 684270 306288, 684536 306674, 685018 308067, 685448 309478, 685459 309947, 685366 310180, 685172 310293, 676374 312213, 663614 315025, 661765 315831, 665018 327028, 664898 327089, 664813 327299, 664816 327306, 664995 327447, 665137 327438, 665018 327028, 665092 326991, 667355 326615, 674397 323926, 687739 318900, 687963 318886, 688167 319026, 688412 319417, 688822 320810, 689171 322213, 689158 322677, 689052 322901, 688852 323004, 676591 325082, 667355 326615, 665211 327434, 665137 327438, 666350 331614, 668431 340921, 668321 340970, 668234 341163, 668394 341301, 668515 341298, 668431 340921, 668518 340881, 670671 340620, 680657 337344, 691499 333763, 691725 333763, 691923 333915, 692094 334223, 692239 334686, 692498 335764, 692791 337217, 692758 337687, 692643 337909, 692439 338003, 683096 339113, 670671 340620, 668610 341296, 668515 341298, 670119 348473, 670829 352957, 670690 353010, 670585 353210, 670585 353217, 670591 353233, 670756 353389, 670899 353394, 672822 365536, 672967 367070, 672964 367070, 672759 367140, 672645 367338, 672644 367353, 672649 367368, 672807 367531, 673012 367546, 674126 379333, 673957 379380, 673832 379568, 673829 379590, 673837 379618, 673987 379788, 674171 379812, 674447 382734, 674789 393602, 674656 393633, 674523 393819, 674517 393852, 674523 393878, 674666 394055, 674804 394080, 674990 400000, 674804 405926, 674666 405951, 674523 406126, 674518 406147, 674523 406173, 674656 406357, 674789 406388, 674447 417267, 674172 420176, 673988 420202, 673837 420373, 673828 420406, 673832 420438, 673957 420629, 674125 420676, 673011 432459, 672806 432475, 672648 432637, 672645 432645, 672646 432654, 672760 432851, 672966 432920, 672967 432920, 672821 434465, 670901 446591, 670758 446598, 670592 446756, 670583 446781, 670583 446797, 670689 446999, 670828 447053, 670119 451528, 668514 458708, 668608 458710, 670538 459347, 678399 460280, 692438 461998, 692643 462090, 692758 462313, 692792 462786, 692498 464236, 692152 465673, 691923 466085, 691725 466237, 691500 466236, 679513 462311, 670538 459347, 668521 459108, 668433 459069, 668514 458708, 668393 458705, 668239 458836, 668324 459020, 668433 459069, 666350 468387, 665142 472544, 665217 472548, 667582 473443, 677393 475097, 688853 476995, 689052 477099, 689158 477323, 689171 477783, 688822 479190, 688414 480580, 688167 480974, 687963 481114, 687738 481101, 679143 477816, 667582 473443, 665088 473022, 665014 472984, 665142 472544, 665000 472537, 664819 472680, 664811 472697, 664810 472710, 664895 472923, 665014 472984, 661763 484175, 663496 484936, 671060 486585, 685171 489708, 685366 489820, 685460 490053, 685449 490522, 685018 491933, 684535 493328, 684270 493712, 684059 493845, 683835 493822, 672526 488900, 663496 484936, 661658 484535, 661763 484175, 661758 484173, 661544 484149, 661393 484252, 661455 484426, 661643 484532, 661658 484535, 661530 484977, 656873 497913, 656933 497922, 659203 499051, 668330 501545, 680009 504692, 680197 504815, 680280 505048, 680248 505507, 679762 506873, 679219 508220, 678937 508583, 678720 508703, 678498 508668, 670712 504772, 659203 499051, 656757 498382, 656714 498354, 656873 497913, 656718 497890, 656526 498012, 656514 498031, 656512 498044, 656575 498265, 656714 498354, 655678 501231, 652402 508801, 652499 508822, 654288 509823, 661252 512049, 675276 516570, 675459 516700, 675530 516940, 675472 517412, 674907 518777, 674293 520120, 673988 520482, 673764 520595, 673544 520551, 663040 514721, 654288 509823, 652335 509199, 652255 509142, 652402 508801, 652288 508776, 652111 508875, 652159 509075, 652255 509142, 648818 517085, 646194 522235, 646275 522255, 648471 523626, 657227 526969, 668571 531258, 668747 531398, 668808 531637, 668735 532086, 668125 533386, 667463 534656, 667147 534990, 666920 535086, 666703 535029, 659271 530369, 648471 523626, 646053 522703, 645983 522649, 646194 522235, 646064 522202, 645860 522303, 645847 522320, 645840 522345, 645882 522570, 645983 522649, 640975 532478, 640829 532726, 642728 534042, 649269 536858, 662690 542671, 662860 542818, 662909 543060, 662812 543510, 662131 544797, 661399 546053, 661069 546373, 660837 546460, 660622 546394, 650730 539587, 642728 534042, 640594 533123, 640829 532726, 640799 532705, 640593 532639, 640385 532730, 640380 532736, 640376 532748, 640408 532972, 640573 533114, 640594 533123, 633295 545464, 633309 545469, 635428 547096, 643713 551210, 654626 556592, 654788 556748, 654826 556990, 654710 557430, 653981 558659, 653200 559858, 652856 560157, 652621 560230, 652411 560153, 645448 554789, 635428 547096, 633036 545908, 633033 545906, 633295 545464, 633105 545395, 632892 545475, 632869 545499, 632857 545532, 632878 545759, 633033 545906, 632181 547347, 626764 555317, 626846 555353, 628746 556960, 634917 560360, 647653 567413, 647809 567575, 647836 567819, 647698 568255, 646907 569454, 646069 570617, 645709 570903, 645470 570966, 645264 570879, 636062 563148, 628746 556960, 626566 555759, 626506 555697, 626764 555317, 626648 555266, 626432 555336, 626414 555353, 626404 555377, 626415 555604, 626506 555697, 622470 561635, 618075 567301, 618154 567339, 620082 569141, 627935 574031, 638307 580454, 638452 580626, 638467 580871, 638306 581302, 637459 582457, 636564 583580, 636191 583847, 635950 583897, 635747 583799, 629355 577807, 620082 569141, 617842 567746, 617783 567678, 618075 567301, 617958 567245, 617738 567304, 617713 567326, 617700 567353, 617700 567582, 617783 567678, 611883 575285, 610768 576549, 610771 576551, 612524 578350, 618342 582333, 630313 590568, 630453 590743, 630456 590989, 630277 591409, 629378 592522, 628432 593597, 628052 593841, 627810 593880, 627612 593773, 619180 585181, 612524 578350, 610451 576931, 610442 576920, 610768 576549, 610581 576447, 610359 576495, 610339 576511, 610326 576535, 610316 576761, 610442 576920, 600959 587675, 602586 589521, 610039 595223, 619767 602626, 619895 602812, 619883 603060, 619680 603474, 618713 604557, 617701 605601, 617301 605833, 617056 605862, 616864 605746, 611130 599219, 602586 589521, 600642 588035, 600959 587675, 600944 587658, 600758 587547, 600534 587586, 600519 587597, 600512 587608, 600489 587835, 600614 588013, 600642 588035, 600458 588244, 592649 596053, 592722 596103, 594220 597971, 599709 602564, 610836 611924, 610958 612112, 610936 612358, 610717 612760, 609712 613783, 608670 614762, 608261 614974, 608015 614990, 607828 614865, 600237 605475, 594220 597971, 592383 596434, 592338 596364, 592649 596053, 592543 595981, 592318 596009, 592305 596017, 592298 596028, 592265 596253, 592338 596364, 588243 600459, 581757 606177, 581837 606236, 583121 608015, 590192 614589, 599181 622902, 599290 623100, 599252 623347, 599003 623747, 597915 624748, 597070 625469, 596680 625759, 596360 625908, 596110 625915, 595928 625782, 590928 618831, 583121 608015, 581514 606521, 581465 606434, 581757 606177, 581662 606108, 581449 606124, 581407 606332, 581465 606434, 575284 611883, 572856 613767, 572896 613800, 574158 615736, 579203 620856, 589409 631288, 589511 631488, 589465 631731, 589208 632109, 588093 633044, 586942 633930, 586518 634100, 586270 634093, 586096 633952, 579450 623855, 574158 615736, 572536 614090, 572509 614036, 572856 613767, 572729 613662, 572501 613669, 572495 613676, 572438 613896, 572509 614036, 561635 622471, 561262 622724, 562280 624457, 569068 632112, 576941 640949, 577031 641156, 576970 641399, 576685 641771, 575510 642659, 574299 643505, 573857 643660, 573607 643644, 573439 643494, 568895 635719, 562280 624457, 560939 622944, 561262 622724, 561254 622710, 561093 622566, 560901 622562, 560846 622744, 560936 622941, 560939 622944, 551295 629497, 551353 629556, 552411 631595, 557144 637459, 566047 648595, 566129 648804, 566059 649041, 565764 649395, 564564 650215, 563334 650984, 562893 651111, 562648 651080, 562488 650922, 556723 639904, 552411 631595, 550969 629808, 550942 629738, 551295 629497, 551201 629402, 550975 629387, 550972 629388, 550968 629392, 550890 629606, 550942 629738, 547346 632181, 539138 637036, 539203 637107, 540120 639081, 546317 647559, 553073 656764, 553144 656978, 553059 657214, 552819 657472, 552424 657752, 551479 658332, 550190 659059, 549730 659173, 549484 659133, 549331 658968, 545389 650425, 540120 639081, 538835 637323, 538804 637233, 539138 637036, 539056 636948, 538845 636924, 538765 637119, 538804 637233, 532477 640976, 528432 643037, 528475 643090, 529366 645306, 533482 651576, 541224 663478, 541286 663693, 541196 663922, 540874 664241, 539613 664936, 538333 665573, 537881 665658, 537642 665602, 537499 665429, 532828 653909, 529366 645306, 528056 643309, 528036 643239, 528432 643037, 528339 642921, 528115 642883, 528108 642885, 528094 642896, 527997 643101, 528036 643239, 517084 648819, 515671 649430, 516491 651759, 521652 660480, 527518 670359, 527568 670579, 527464 670804, 527118 671114, 525818 671750, 524484 672338, 524030 672403, 523791 672337, 523656 672157, 520540 663247, 516491 651759, 515233 649632, 515230 649621, 515671 649430, 515670 649428, 515539 649255, 515315 649208, 515301 649212, 515289 649220, 515182 649422, 515230 649621, 504365 654323, 504388 654358, 505096 656762, 508563 663353, 515098 675886, 515139 676107, 515028 676325, 514674 676613, 513360 677180, 512026 677689, 511572 677729, 511340 677650, 511215 677463, 507676 665531, 505096 656762, 503929 654545, 503923 654514, 504365 654323, 504269 654177, 504051 654116, 504029 654120, 504005 654136, 503890 654331, 503923 654514, 501230 655679, 491000 659362, 491042 659431, 491675 661988, 495873 670964, 500782 681418, 500811 681642, 500688 681855, 500323 682126, 498978 682632, 497611 683082, 497157 683101, 496927 683012, 496811 682819, 494565 673657, 491675 661988, 490559 659601, 490549 659525, 491000 659362, 490928 659246, 490710 659177, 490675 659182, 490653 659195, 490530 659386, 490549 659525, 484976 661531, 479282 663185, 479318 663253, 479786 665695, 482622 672634, 487914 685710, 487935 685933, 487801 686140, 487423 686393, 486052 686832, 484668 687213, 484212 687209, 483987 687108, 483880 686911, 481505 674658, 479786 665695, 478846 663394, 478839 663314, 479282 663185, 479217 663061, 479006 662980, 478984 662982, 478961 662994, 478828 663178, 478839 663314, 468386 666350, 465535 666987, 465549 667016, 465939 669656, 469225 678927, 473115 689843, 473123 690067, 472981 690268, 472589 690503, 471211 690873, 469814 691189, 469360 691164, 469142 691052, 469044 690850, 467696 681557, 465939 669656, 465047 667140, 465045 667097, 465535 666987, 465453 666821, 465244 666731, 465208 666733, 465180 666746, 465039 666923, 465045 667097, 453494 669679, 453498 669690, 453713 672009, 455915 679337, 459929 692863, 459927 693087, 459772 693281, 459364 693497, 457942 693805, 456869 693992, 456398 694041, 456054 694006, 455838 693885, 455749 693679, 454565 681197, 453713 672009, 453043 669780, 453494 669679, 453416 669489, 453213 669388, 453207 669388, 453197 669392, 453044 669562, 453043 669779, 453043 669780, 451527 670119, 439401 672040, 439427 672108, 439557 674672, 441950 684295, 444777 695555, 444763 695781, 444601 695966, 444191 696162, 442776 696399, 441345 696580, 440899 696510, 440691 696379, 440615 696168, 440173 686864, 439557 674672, 438937 672181, 438941 672113, 439401 672040, 439351 671906, 439150 671797, 439124 671796, 439107 671802, 438949 671964, 438941 672113, 434464 672822, 427141 673514, 427168 673605, 427158 675639, 428700 683400, 431405 697285, 431380 697507, 431204 697685, 430772 697861, 429295 698033, 427824 698147, 427359 698056, 427152 697915, 427084 697700, 427113 685088, 427158 675639, 426762 673644, 426772 673549, 427141 673514, 427106 673397, 426933 673290, 426784 673429, 426772 673549, 417266 674447, 412939 674583, 412958 674654, 412839 677168, 414300 687025, 416033 698507, 415997 698731, 415816 698900, 415383 699056, 413937 699156, 412484 699197, 412038 699086, 411842 698935, 411785 698718, 412253 689528, 412839 677168, 412470 674679, 412482 674597, 412939 674583, 412902 674446, 412711 674318, 412693 674316, 412679 674319, 412502 674465, 412482 674597, 400833 674964, 400646 676836, 401416 684547, 402806 698935, 402759 699156, 402567 699316, 402231 699417, 401750 699458, 400642 699478, 399173 699451, 398719 699315, 398527 699155, 398480 698935, 399665 686658, 400646 676836, 400460 674976, 400833 674964, 400833 674959, 400792 674747, 400647 674635, 400500 674747, 400458 674959, 400460 674976, 400000 674990, 386256 674558, 386232 674403, 386056 674257, 386038 674253, 386022 674255, 385831 674382, 385789 674543, 386256 674558, 386266 674618, 385896 677117, 386344 686577, 386959 698656, 386901 698872, 386705 699023, 386264 699135, 384809 699096, 383363 698995, 382928 698839, 382747 698669, 382711 698447, 384011 689838, 385896 677117, 385776 674592, 385789 674543, 382734 674447, 374522 673671, 374509 673554, 374360 673415, 374185 673523, 374150 673636, 374522 673671, 374532 673768, 374131 675786, 374167 683091, 374201 697825, 374133 698040, 373927 698181, 373463 698272, 371988 698156, 370515 697985, 370082 697809, 369905 697631, 369878 697408, 372178 685618, 374131 675786, 374121 673730, 374150 673636, 365535 672822, 359825 671917, 359817 671783, 359658 671621, 359635 671613, 359611 671614, 359412 671724, 359367 671845, 359825 671917, 359830 672001, 359206 674510, 358733 683872, 358159 695988, 358081 696198, 357872 696329, 357424 696399, 355998 696220, 354585 695983, 354169 695786, 354008 695600, 353995 695376, 356130 686869, 359206 674510, 359336 671927, 359367 671845, 348472 670119, 348190 670056, 348201 670021, 348200 669805, 348050 669636, 348040 669632, 348030 669632, 347827 669733, 347743 669933, 347741 669956, 348190 670056, 347527 672267, 346869 679360, 345487 693921, 345400 694128, 345185 694249, 344720 694296, 343293 694045, 341873 693738, 341466 693523, 341311 693329, 341307 693104, 344726 681593, 347527 672267, 347741 669956, 333749 666827, 333756 666626, 333613 666448, 333583 666434, 333548 666432, 333338 666522, 333246 666715, 333749 666827, 333748 666843, 332854 669367, 331502 678511, 329756 690554, 329658 690755, 329439 690866, 328991 690892, 327591 690579, 326212 690208, 325818 689971, 325675 689771, 325685 689546, 328636 681266, 332854 669367, 333245 666718, 333246 666715, 331613 666350, 322358 663661, 322370 663535, 322238 663351, 322218 663340, 322191 663338, 321978 663418, 321917 663533, 322358 663661, 322350 663750, 321407 666059, 320082 672973, 317310 687265, 317204 687464, 316980 687565, 316521 687568, 315138 687186, 313770 686747, 313390 686495, 313256 686288, 313275 686064, 317785 674924, 321407 666059, 321876 663609, 321917 663533, 315023 661530, 308277 659101, 308293 658972, 308169 658781, 308141 658764, 308110 658760, 307893 658830, 307827 658939, 308277 659101, 308266 659188, 307143 661590, 304921 670558, 302018 682407, 301900 682598, 301672 682687, 301215 682668, 299851 682220, 298508 681716, 298138 681442, 298016 681229, 298046 681006, 301770 673074, 307143 661590, 307780 659016, 307827 658939, 298770 655678, 297222 655008, 297263 654800, 297148 654604, 297127 654590, 297099 654585, 296880 654645, 296769 654812, 297222 655008, 297221 655012, 296050 657240, 294061 664001, 289930 677929, 289806 678116, 289573 678195, 289119 678155, 287783 677644, 286470 677078, 286118 676790, 286006 676572, 286047 676351, 291614 665676, 296050 657240, 296760 654825, 296769 654812, 283610 649118, 283621 649099, 283669 648887, 283563 648687, 283546 648675, 283535 648672, 283312 648720, 283182 648894, 283170 648928, 283610 649118, 282357 651236, 279237 660086, 275202 671626, 275066 671805, 274826 671870, 274367 671804, 273041 671220, 271737 670582, 271391 670272, 271288 670047, 271339 669828, 275774 662359, 282357 651236, 283170 648928, 282916 648818, 273074 643804, 273110 643681, 273014 643476, 273002 643467, 272990 643463, 272766 643500, 272682 643604, 273074 643804, 273050 643888, 271734 645892, 269064 652530, 263600 666005, 263459 666180, 263219 666235, 262769 666151, 261484 665510, 260225 664816, 259904 664498, 259812 664269, 259874 664053, 266458 653932, 271734 645892, 272629 643669, 272682 643604, 267523 640975, 260080 636573, 260118 636462, 260036 636265, 259825 636289, 259746 636375, 260080 636573, 260048 636667, 258756 638435, 254686 647195, 249558 658313, 249403 658478, 249156 658518, 248699 658405, 247410 657679, 246151 656906, 245827 656559, 245743 656323, 245814 656110, 250880 649206, 258756 638435, 259678 636449, 259746 636375, 252654 632181, 250111 630453, 250171 630300, 250094 630086, 250093 630085, 250086 630082, 249858 630096, 249748 630206, 250111 630453, 250092 630501, 248642 632298, 245331 638680, 238563 651610, 238405 651770, 238159 651801, 237719 651673, 236486 650902, 235290 650083, 234994 649730, 234924 649492, 235005 649282, 242555 639842, 248642 632298, 249705 630249, 249748 630206, 238365 622471, 238009 622195, 238020 622183, 238108 621985, 238052 621801, 237862 621805, 237703 621952, 237701 621956, 238009 622195, 236679 623695, 231494 632521, 225521 642738, 225353 642887, 225103 642904, 224661 642750, 223453 641906, 222274 641015, 221990 640643, 221928 640400, 222019 640194, 228009 633470, 236679 623695, 237701 621956, 228488 614809, 228550 614690, 228494 614469, 228487 614465, 228259 614457, 228149 614547, 228488 614809, 228450 614882, 226837 616519, 222723 622831, 214883 634740, 214710 634883, 214463 634890, 214035 634718, 212886 633830, 211776 632901, 211516 632519, 211469 632276, 211571 632075, 220268 623187, 226837 616519, 228092 614594, 228149 614547, 224715 611883, 217561 605576, 217621 605471, 217577 605263, 217367 605247, 217270 605320, 217561 605576, 217514 605660, 215919 607143, 209772 615657, 203105 624926, 202923 625058, 202673 625051, 202245 624852, 201121 623894, 200029 622890, 199781 622490, 199743 622244, 199853 622047, 206759 615659, 215919 607143, 217194 605377, 217270 605320, 211756 600458, 208546 597248, 208627 597124, 208595 596900, 208591 596894, 208576 596884, 208351 596855, 208233 596934, 208546 597248, 208509 597305, 206681 598835, 201985 604690, 193058 615731, 192872 615857, 192627 615842, 192222 615633, 191173 614649, 190169 613625, 189953 613226, 189931 612980, 190052 612791, 199564 604788, 206681 598835, 208171 596976, 208233 596934, 199542 588243, 198522 587087, 198523 587086, 198647 586907, 198624 586680, 198616 586668, 198603 586658, 198379 586619, 198205 586727, 198522 587087, 196563 588585, 189862 596191, 182278 604823, 182085 604938, 181839 604908, 181440 604678, 180430 603636, 179458 602548, 179257 602136, 179246 601889, 179375 601705, 186884 595989, 196563 588585, 198195 586733, 198205 586727, 190375 577846, 190484 577711, 190475 577484, 190465 577466, 190443 577448, 190220 577398, 190057 577486, 190375 577846, 190349 577879, 188282 579294, 183084 584629, 173184 594718, 172987 594825, 172745 594787, 172364 594543, 171417 593465, 170520 592353, 170342 591934, 170345 591689, 170484 591512, 180738 584459, 188282 579294, 190029 577501, 190057 577486, 188117 575285, 181452 566693, 181541 566589, 181540 566360, 181527 566333, 181504 566313, 181285 566254, 181159 566315, 181452 566693, 181400 566754, 179166 568145, 171924 574913, 163499 582812, 163295 582909, 163054 582858, 162682 582593, 161787 581471, 160937 580313, 160778 579884, 160792 579638, 160939 579468, 168957 574502, 179166 568145, 181089 566348, 181159 566315, 177529 561635, 174196 556730, 174293 556630, 174305 556404, 174296 556384, 174278 556366, 174062 556296, 173937 556349, 174196 556730, 174142 556786, 171963 557987, 166241 562827, 155440 571900, 155235 571989, 154996 571926, 154638 571643, 153798 570476, 153009 569280, 152871 568842, 152898 568598, 153053 568435, 163971 562390, 171963 557987, 173862 556380, 173937 556349, 167819 547346, 166332 544831, 166464 544702, 166485 544476, 166471 544439, 166452 544419, 166239 544340, 166076 544399, 166332 544831, 166308 544854, 163917 546041, 156116 552030, 146937 559103, 146726 559180, 146491 559107, 146234 558883, 145952 558509, 145368 557611, 144637 556381, 144520 555940, 144559 555698, 144721 555542, 153142 551389, 163917 546041, 166036 544414, 166076 544399, 160051 534212, 160207 534079, 160240 533854, 160237 533845, 160232 533839, 160023 533747, 159816 533813, 159815 533813, 160051 534212, 160042 534219, 157898 535143, 151613 539498, 139990 547495, 139776 547563, 139544 547475, 139213 547156, 138480 545897, 137801 544611, 137705 544163, 137753 543920, 137922 543772, 149426 538791, 157898 535143, 159815 533813, 159025 532477, 153451 521537, 153562 521448, 153603 521223, 153596 521197, 153586 521184, 153382 521084, 153239 521122, 153451 521537, 153393 521584, 150990 522501, 142583 527748, 132747 533917, 132529 533972, 132302 533877, 131990 533548, 131326 532276, 130715 530975, 130640 530524, 130701 530286, 130878 530147, 139590 526853, 150990 522501, 153173 521139, 153239 521122, 151182 517084, 148260 510332, 148360 510264, 148408 510067, 148231 509968, 148113 509993, 148260 510332, 148182 510386, 146247 511004, 139339 514871, 126971 521734, 126751 521779, 126527 521667, 126223 521304, 125607 519959, 125044 518595, 124986 518124, 125057 517884, 125240 517753, 137244 513883, 146247 511004, 148019 510013, 148113 509993, 144321 501230, 142855 497157, 142974 497079, 143036 496858, 143033 496841, 143025 496828, 142832 496705, 142699 496725, 142855 497157, 142793 497198, 140351 497865, 131443 502294, 121056 507493, 120834 507526, 120616 507407, 120334 507042, 119793 505699, 119304 504328, 119272 503871, 119356 503638, 119544 503517, 128429 501122, 140351 497865, 142618 496738, 142699 496725, 138751 485761, 138756 485760, 138945 485654, 139007 485482, 138855 485377, 138640 485402, 138624 485409, 138751 485761, 136906 486163, 129817 489276, 116562 495045, 116339 495068, 116127 494935, 115862 494550, 115377 493154, 114949 491742, 114938 491276, 115032 491043, 115226 490930, 127267 488265, 136906 486163, 138624 485409, 138469 484977, 134634 471774, 134773 471701, 134856 471488, 134854 471467, 134848 471454, 134668 471313, 134503 471323, 134634 471774, 134581 471801, 132080 472222, 123230 475569, 111933 479887, 111707 479899, 111503 479759, 111259 479370, 110850 477978, 110497 476567, 110512 476109, 110617 475885, 110817 475783, 119407 474358, 132080 472222, 134451 471326, 134503 471323, 133650 468387, 131850 460336, 131958 460289, 132043 460106, 131887 459972, 131769 459974, 131850 460336, 131759 460375, 129731 460616, 122782 462911, 108778 467496, 108554 467499, 108356 467346, 108126 466930, 107779 465494, 107560 464405, 107497 463926, 107522 463575, 107636 463351, 107841 463257, 119764 461799, 129731 460616, 131671 459975, 131769 459974, 129881 451528, 128977 445818, 129101 445768, 129206 445567, 129207 445545, 129198 445522, 129032 445365, 128904 445360, 127178 434464, 127151 434178, 127187 434177, 127394 434109, 127508 433914, 127509 433905, 127505 433894, 127347 433732, 127131 433714, 127108 433719, 127151 434178, 124846 434229, 117894 435797, 103619 438982, 103395 438963, 103214 438796, 103028 438375, 102821 436933, 102711 435850, 102696 435375, 102756 435035, 102892 434827, 103105 434754, 115108 434447, 124846 434229, 127108 433719, 125759 419445, 125953 419390, 126078 419199, 126082 419165, 126073 419132, 125922 418961, 125711 418933, 125553 417266, 125250 407635, 125375 407607, 125509 407423, 125513 407400, 125507 407374, 125365 407197, 125236 407174, 125010 400000, 125235 392832, 125364 392809, 125508 392631, 125515 392601, 125509 392569, 125375 392384, 125250 392355, 125553 382733, 125712 381055, 125923 381029, 126074 380858, 126081 380834, 126077 380807, 125952 380617, 125758 380563, 127107 366288, 124707 365751, 115326 365519, 103104 365247, 102892 365173, 102756 364965, 102676 364509, 102821 363066, 103026 361629, 103214 361204, 103395 361037, 103620 361017, 112094 362927, 124707 365751, 127152 365811, 127107 366288, 127129 366293, 127346 366274, 127504 366111, 127510 366093, 127509 366079, 127394 365882, 127189 365812, 127152 365811, 127178 365535, 128906 354625, 129034 354621, 129200 354467, 129205 354453, 129205 354440, 129100 354239, 128975 354191, 129881 348472, 131768 340033, 131669 340032, 129594 339351, 119997 338186, 107840 336744, 107636 336649, 107522 336425, 107489 335956, 107779 334506, 108124 333073, 108356 332654, 108554 332501, 108779 332502, 116910 335187, 129594 339351, 131762 339614, 131852 339654, 131768 340033, 131886 340034, 132047 339894, 131960 339702, 131852 339654, 133650 331613, 134508 328661, 134457 328658, 132296 327833, 125206 326657, 110818 324216, 110617 324114, 110512 323890, 110497 323429, 110850 322022, 111261 320627, 111503 320241, 111707 320101, 111932 320113, 123244 324376, 132296 327833, 134577 328211, 134630 328239, 134508 328661, 134672 328671, 134851 328532, 134852 328529, 134853 328522, 134769 328310, 134630 328239, 138470 315023, 138622 314600, 136783 313797, 126788 311593, 115225 309071, 115032 308957, 114939 308724, 114950 308258, 115377 306846, 115860 305453, 116127 305065, 116339 304932, 116563 304954, 124809 308573, 136783 313797, 138755 314232, 138622 314600, 138637 314606, 138852 314629, 139010 314519, 138947 314339, 138759 314233, 138755 314232, 142704 303262, 142623 303249, 140566 302220, 133293 300258, 119545 296483, 119356 296362, 119272 296129, 119304 295670, 119793 294301, 120336 292956, 120616 292593, 120834 292474, 121055 292508, 132196 298033, 140566 302220, 142786 302819, 142849 302860, 142704 303262, 142836 303284, 143029 303163, 143030 303162, 143031 303155, 142968 302936, 142849 302860, 144322 298770, 148109 290017, 148015 289997, 146115 288940, 136115 285723, 125239 282248, 125057 282116, 124986 281876, 125044 281408, 125607 280041, 126221 278698, 126527 278333, 126751 278221, 126972 278265, 135182 282859, 146115 288940, 148185 289606, 148263 289661, 148109 290017, 148227 290041, 148412 289936, 148362 289731, 148263 289661, 151182 282915, 153243 278870, 153178 278852, 151161 277587, 144139 274931, 130879 269851, 130701 269714, 130640 269475, 130713 269027, 131326 267724, 131990 266453, 132302 266123, 132529 266027, 132746 266083, 143297 272657, 151161 277587, 153386 278429, 153445 278475, 153243 278870, 153386 278908, 153590 278809, 153593 278806, 153598 278786, 153557 278562, 153445 278475, 159025 267523, 159810 266195, 157779 264795, 148478 260773, 137921 256228, 137753 256080, 137705 255836, 137800 255391, 138480 254103, 139212 252845, 139544 252525, 139776 252438, 139991 252504, 147748 257878, 157779 264795, 160046 265775, 160054 265782, 159810 266195, 159811 266196, 160019 266259, 160228 266167, 160237 266156, 160242 266141, 160210 265916, 160054 265782, 166080 255593, 166041 255578, 164061 254053, 157377 250756, 144722 244457, 144559 244302, 144520 244060, 144638 243618, 145368 242389, 146148 241191, 146491 240893, 146726 240820, 146936 240898, 156813 248471, 164061 254053, 166301 255158, 166325 255180, 166080 255593, 166243 255654, 166455 255575, 166470 255559, 166480 255533, 166459 255306, 166325 255180, 167819 252653, 173931 243660, 173855 243629, 171839 241932, 163168 237138, 153052 231566, 152898 231402, 152871 231158, 153008 230722, 153798 229524, 154637 228358, 154996 228074, 155235 228011, 155441 228099, 162643 234191, 171839 241932, 174147 243208, 174200 243264, 173931 243660, 174057 243711, 174274 243640, 174297 243618, 174308 243592, 174296 243365, 174200 243264, 177529 238365, 181163 233680, 181093 233646, 179276 231943, 172907 227998, 160940 220531, 160792 220361, 160778 220116, 160937 219687, 161787 218528, 162681 217408, 163054 217142, 163295 217091, 163498 217188, 172622 225705, 179276 231943, 181393 233254, 181446 233315, 181163 233680, 181288 233742, 181507 233684, 181522 233670, 181534 233647, 181535 233419, 181446 233315, 188117 224715, 190050 222523, 190021 222508, 188153 220600, 180047 215032, 170483 208489, 170345 208311, 170342 208066, 170520 207645, 171417 206535, 172361 205459, 172745 205213, 172987 205175, 173185 205281, 179737 212006, 188153 220600, 190355 222113, 190381 222147, 190050 222523, 190214 222609, 190436 222560, 190465 222537, 190479 222511, 190489 222283, 190381 222147, 198209 213268, 198200 213262, 196662 211512, 190574 206877, 179376 198294, 179245 198112, 179257 197864, 179463 197445, 180430 196364, 181439 195323, 181839 195091, 182085 195062, 182278 195177, 190571 204578, 196662 211512, 198514 212922, 198209 213268, 198383 213376, 198607 213338, 198612 213334, 198618 213325, 198642 213098, 198515 212922, 198514 212922, 199542 211756, 208223 203075, 208161 203034, 206545 201031, 198957 194658, 190051 187210, 189931 187019, 189953 186774, 190168 186376, 191173 185351, 192223 184367, 192627 184158, 192872 184143, 193059 184268, 198884 191535, 206545 201031, 208517 202687, 208554 202744, 208223 203075, 208342 203154, 208569 203123, 208591 203108, 208601 203094, 208634 202869, 208554 202744, 211757 199541, 217276 194676, 217200 194618, 216010 192963, 210203 187593, 199854 177952, 199743 177756, 199781 177509, 200028 177111, 201121 176106, 202243 175150, 202673 174949, 202923 174941, 203104 175075, 210495 185296, 216010 192963, 217506 194347, 217554 194430, 217276 194676, 217371 194749, 217573 194735, 217614 194534, 217554 194430, 224716 188117, 228136 185464, 228077 185417, 226689 183302, 219725 176197, 211570 167926, 211469 167724, 211516 167481, 211711 167196, 212052 166868, 212886 166170, 214036 165282, 214463 165110, 214710 165117, 214884 165259, 219907 172969, 226689 183302, 228460 185109, 228498 185183, 228136 185464, 228247 185553, 228476 185543, 228494 185533, 228502 185524, 228559 185302, 228498 185183, 237707 178040, 236754 176411, 231603 170629, 222020 159805, 221928 159600, 221990 159357, 222274 158986, 223453 158094, 224660 157251, 225103 157096, 225353 157113, 225520 157263, 231776 167891, 236754 176411, 238002 177811, 237707 178040, 237709 178044, 237867 178190, 238051 178195, 238103 178019, 238013 177823, 238002 177811, 238365 177529, 249738 169801, 249694 169758, 248522 167512, 242603 160128, 235005 150718, 234924 150507, 234994 150270, 235291 149916, 236486 149098, 237721 148326, 238159 148199, 238405 148230, 238564 148389, 242573 156118, 248522 167512, 250106 169489, 250125 169538, 249738 169801, 249849 169910, 250077 169924, 250097 169916, 250106 169907, 250185 169691, 250125 169538, 252654 167819, 259754 163620, 259687 163546, 258826 161681, 254503 155790, 245815 143889, 245743 143677, 245827 143441, 246149 143096, 247411 142320, 248698 141596, 249156 141482, 249404 141522, 249557 141688, 254626 152577, 258826 161681, 260042 163337, 260074 163431, 259754 163620, 259832 163707, 260034 163731, 260111 163542, 260074 163431, 267523 159025, 272674 156400, 272621 156336, 271652 153940, 266530 146086, 259873 135947, 259813 135731, 259904 135502, 260226 135183, 261484 134489, 262773 133849, 263219 133765, 263459 133820, 263601 133994, 266875 142132, 271652 153940, 273063 156104, 273087 156190, 272674 156400, 272759 156503, 272983 156541, 273004 156535, 273024 156519, 273122 156312, 273087 156190, 282916 151181, 283179 151067, 282417 148889, 278779 142763, 271340 130171, 271288 129953, 271391 129728, 271736 129419, 273041 128780, 274364 128196, 274826 128130, 275066 128195, 275202 128375, 279202 139697, 282417 148889, 283602 150884, 283179 151067, 283191 151101, 283320 151276, 283541 151325, 283549 151323, 283559 151316, 283665 151115, 283614 150904, 283602 150884, 296761 145190, 296753 145178, 295994 142611, 291711 134417, 286046 123649, 286006 123428, 286118 123209, 286473 122920, 287783 122356, 289117 121845, 289573 121805, 289806 121884, 289931 122070, 292412 130503, 295994 142611, 297233 144982, 297234 144986, 296761 145190, 296874 145358, 297093 145418, 297126 145412, 297156 145392, 297273 145196, 297234 144986, 298770 144321, 307837 141057, 307792 140980, 307198 138557, 304205 132183, 298047 118993, 298016 118771, 298138 118558, 298506 118286, 299851 117780, 301212 117332, 301672 117313, 301901 117402, 302017 117594, 304917 129257, 307198 138557, 308258 140815, 308270 140901, 307837 141057, 307902 141167, 308117 141237, 308141 141234, 308164 141220, 308289 141030, 308270 140901, 315024 138469, 321910 136469, 321869 136393, 321368 133799, 317890 125229, 313274 113937, 313257 113712, 313390 113505, 313772 113251, 315138 112814, 316525 112431, 316980 112435, 317204 112536, 317312 112734, 318961 121340, 321368 133799, 322361 136246, 322368 136336, 321910 136469, 321972 136584, 322185 136664, 322219 136661, 322245 136647, 322379 136462, 322368 136336, 331614 133650, 333259 133282, 333257 133278, 332896 130791, 330530 124151, 325686 110452, 325675 110229, 325818 110029, 326209 109794, 327591 109421, 328987 109107, 329439 109134, 329658 109245, 329755 109447, 331526 121355, 332896 130791, 333740 133160, 333741 133175, 333259 133282, 333349 133475, 333557 133566, 333582 133565, 333607 133553, 333748 133377, 333741 133175, 347734 130046, 347503 127600, 344824 118604, 341306 106897, 341311 106671, 341466 106477, 341876 106260, 343293 105955, 344366 105767, 344840 105716, 345185 105750, 345400 105872, 345488 106078, 346291 114729, 347503 127600, 348201 129942, 347734 130046, 347736 130069, 347821 130268, 348025 130368, 348044 130368, 348056 130363, 348208 130193, 348211 129976, 348201 129942, 348472 129881, 359381 128153, 359351 128069, 359237 125678, 357496 118736, 353996 104623, 354008 104400, 354169 104214, 354580 104019, 355998 103779, 357066 103645, 357533 103618, 357872 103671, 358081 103802, 358158 104013, 358780 116071, 359237 125678, 359820 128002, 359816 128084, 359381 128153, 359424 128274, 359623 128384, 359636 128385, 359649 128380, 359809 128218, 359816 128084, 365536 127178, 374143 126365, 374114 126272, 374121 124079, 372264 114602, 369878 102593, 369905 102368, 370082 102191, 370409 102058, 370885 101971, 371988 101844, 373467 101729, 373927 101818, 374133 101959, 374202 102174, 374161 110738, 374121 124079, 374542 126230, 374531 126328, 374143 126365, 374179 126477, 374361 126589, 374518 126445, 374531 126328, 382734 125553, 385807 125456, 385794 125406, 385911 123101, 384838 115989, 382712 101552, 382747 101331, 382928 101161, 383359 101007, 384809 100904, 386259 100864, 386705 100977, 386901 101128, 386959 101345, 386401 113422, 385911 123101, 386255 125384, 386246 125443, 385807 125456, 385848 125617, 386036 125745, 386044 125743, 386221 125598, 386246 125443, 400000 125010, 400451 125024, 400449 125042, 400494 125253, 400647 125369, 400798 125253, 400841 125042, 400840 125036, 400451 125024, 400645 123031, 399653 112841, 398479 101064, 398526 100845, 398719 100685, 399055 100584, 399537 100543, 400642 100522) (400683 674518, 401566 674424, 400639 674448, 399705 674415) (411964 674186, 412596 674222, 412700 674223, 413216 674142) (385923 674150, 386021 674161, 386546 674132, 385306 674053) (374375 673307, 374501 673311, 375300 673310, 374174 673229, 373423 673119) (426913 673119, 425968 673179, 426948 673183, 427848 673003) (438602 671730, 439015 671711, 439143 671700, 439816 671528) (359520 671499, 359615 671519, 360134 671544, 358926 671349) (348057 669539, 348198 669558, 348984 669638, 348060 669481, 347134 669268) (453171 669240, 452237 669391, 453193 669296, 453289 669272, 454089 669036) (464477 666755, 465078 666666, 465200 666643, 465668 666477) (333467 666306, 333590 666344, 334294 666450, 333088 666173) (322250 663254, 322383 663285, 323155 663441, 322252 663196, 321354 662898) (478933 662843, 478020 663084, 478947 662898, 479062 662857, 479823 662553) (489947 659275, 490539 659128, 490654 659094, 491118 658879) (308037 658625, 308165 658678, 308854 658851, 307678 658459) (297180 654514, 297294 654553, 297847 654720, 296527 654178) (503960 653989, 503076 654315, 503975 654045, 504092 653989, 504816 653616) (514755 649310, 515163 649167, 515251 649132, 515873 648766) (283468 648526, 283592 648593, 284259 648827, 283128 648326) (273077 643401, 273162 643439, 273914 643742, 273073 643331, 272254 642866) (528020 642757, 527168 643166, 528034 642818, 528141 642754, 528832 642304) (538301 637063, 538714 636876, 538775 636845, 539366 636409) (259984 636105, 260087 636174, 260737 636470, 259649 635858) (250162 630018, 250240 630062, 250971 630438, 250170 629946, 249394 629397) (550875 629262, 550061 629753, 550909 629316, 550990 629256, 551647 628725) (560206 622832, 560811 622488, 561205 622128) (238150 621724, 238732 622056, 237724 621354) (228540 614385, 228623 614444, 229331 614905, 228582 614337, 227863 613714) (572392 613554, 571630 614122, 572453 613588, 572524 613523, 573108 612944) (580945 606363, 581282 606123, 581379 606047, 581861 605520) (217583 605123, 217634 605174, 218227 605599, 217280 604792) (208632 596804, 208726 596885, 209366 597403, 208684 596770, 208033 596086) (592198 595908, 591504 596543, 592266 595926, 592328 595858, 592848 595236) (600050 587894, 600353 587626, 600455 587528, 600883 586968) (198615 586523, 198674 586594, 199216 587074, 198355 586182) (190522 577393, 190608 577484, 191188 578059, 190568 577360, 189984 576618) (610225 576419, 609593 577121, 610279 576443, 610356 576340, 610809 575689) (617282 567669, 617549 567381, 617637 567279, 618016 566674) (181533 566183, 181600 566282, 182082 566800, 181317 565838) (174363 556321, 174440 556420, 174964 557050, 174413 556293, 173901 555498) (626290 555275, 625727 556037, 626344 555295, 626415 555178, 626802 554491) (632472 545884, 632713 545569, 632784 545468, 633104 544827) (166496 544297, 166556 544407, 166983 544964, 166315 543933) (160321 533804, 160375 533890, 160846 534578, 160368 533768, 159936 532927) (640241 532672, 639752 533487, 640297 532691, 640357 532566, 640676 531842) (645477 522753, 645702 522397, 645750 522312, 646008 521632) (153643 521069, 153692 521183, 154065 521774, 153493 520673) (148515 510047, 148964 510848, 148564 509994, 148216 509114) (651876 508997, 651539 509675, 652011 508830, 652055 508709, 652301 507948) (656188 498486, 656382 498104, 656423 498012, 656610 497309) (143092 496718, 143124 496821, 143477 497525, 143158 496767, 142930 496107) (139124 485467, 139491 486291, 139182 485417, 138924 484519) (661213 484201, 660894 485080, 661288 484192, 661477 483312) (664534 473170, 664693 472759, 664724 472667, 664840 471952) (134919 471329, 134941 471432, 135202 472107, 134851 470903) (132149 460080, 132185 460207, 132435 460966, 132209 460057, 132036 459122) (668029 459004, 667833 459719, 668134 458804, 668146 458725, 668247 457878) (670361 447255, 670469 446858, 670498 446735, 670543 446041) (129280 445399, 129291 445497, 129483 446197, 129253 444973) (127601 433888, 127627 434031, 127795 434803, 127628 433664, 127575 432929) (672473 432836, 672349 433566, 672552 432627, 672558 432529, 672583 431695) (673657 420911, 673724 420512, 673740 420388, 673724 419686) (126168 419016, 126170 419142, 126289 419847, 126178 418610) (125603 407404, 125614 407542, 125706 408324, 125660 407389, 125667 406442) (674371 406339, 674318 407097, 674426 406158, 674422 406034, 674370 405217) (674394 394384, 674424 393966, 674427 393848, 674342 393146) (125615 392458, 125604 392594, 125653 393304, 125662 392065) (126170 380858, 126168 380982, 126185 381775, 126237 380644, 126326 379902) (673683 379615, 673720 380557, 673741 379615, 673725 379490, 673592 378684) (672569 367909, 672559 367471, 672552 367368, 672397 366671) (127627 365971, 127602 366106, 127590 366611, 127755 365390) (129291 354503, 129281 354595, 129239 355196, 129484 353786) (670436 353262, 670561 354198, 670499 353266, 670471 353145, 670256 352350) (668218 341916, 668141 341217, 667973 340715) (132184 339798, 132150 339917, 132069 340626, 132314 339409) (134939 328571, 134920 328664, 134788 329475, 135008 328561, 135290 327653) (664664 327355, 664879 328282, 664727 327337, 664695 327244, 664392 326455) (661394 316309, 661265 315754, 660989 315144) (139126 314527, 139018 315049, 139413 313891) (143123 303181, 143093 303277, 142873 304093, 143183 303205, 143553 302329) (656373 302037, 656680 302939, 656425 301991, 656385 301902, 656014 301168) (652176 291675, 652054 291286, 652012 291170, 651659 290549) (148501 290001, 148293 290657, 148768 289506) (153692 278816, 153645 278928, 153350 279697, 153740 278853, 154189 278022) (645713 277747, 646101 278604, 645742 277666, 645274 276921) (640593 267978, 640356 267432, 640296 267307, 640012 266897) (160375 266110, 160323 266191, 160036 266852, 160620 265755) (166559 255589, 166497 255703, 166129 256431, 166712 255441, 167127 254841) (632748 254581, 633221 255398, 632784 254531, 632714 254432, 632234 253800) (626607 245167, 626415 244822, 626343 244705, 625886 244160) (174441 243579, 174366 243675, 174023 244291, 174700 243270) (181603 233715, 181534 233817, 181096 234509, 181646 233751, 182244 233019) (617603 232770, 618154 233539, 617636 232720, 617550 232619, 617016 232040) (610693 224149, 610357 223661, 610280 223559, 609919 223204) (190610 222514, 190521 222608, 190124 223184, 190900 222229) (198678 213401, 198615 213477, 198106 214138, 198728 213433, 199395 212762) (600417 212515, 601041 213232, 600455 212472, 600351 212372, 599762 211846) (592602 204472, 592332 204146, 592264 204071, 591698 203618) (208728 203113, 208635 203194, 208313 203581, 209207 202729) (217640 194821, 217583 194878, 217003 195504, 217841 194722, 218421 194257) (581347 194009, 582036 194664, 581376 193950, 581278 193874, 580629 193406) (572841 186793, 572529 186482, 572455 186414, 571843 186019) (228626 185554, 228540 185615, 228174 185980, 229158 185210) (238097 178306, 237431 178906, 238166 178343, 238941 177819) (560967 177707, 561536 178166, 560824 177525, 560747 177477, 560036 177066) (551335 171024, 550992 170745, 550910 170684, 550270 170357) (250247 169934, 250160 169984, 249595 170444, 250393 169901, 250864 169614) (260087 163826, 259981 163897, 259335 164370, 260130 163874, 260966 163421) (538763 163222, 539561 163729, 538787 163163, 538712 163125, 537938 162767) (528657 157585, 528144 157248, 528041 157186, 527577 157000) (273166 156559, 273079 156598, 272469 156998, 273554 156405) (283593 151406, 283467 151474, 282784 151873, 283623 151456, 284498 151084) (515425 151008, 516083 151354, 515252 150869, 515162 150833, 514376 150553) (504456 146200, 504094 146012, 503977 145956, 503307 145757) (297296 145446, 297179 145486, 296542 145818, 297691 145329) (308165 141321, 308038 141374, 307322 141703, 308198 141370, 309099 141084) (490637 140959, 491518 141301, 490654 140906, 490540 140873, 489746 140670) (479437 137295, 479063 137144, 478949 137103, 478258 136966) (322384 136713, 322247 136746, 321590 137012, 322781 136635) (333587 133656, 333468 133693, 332720 133954, 333622 133707, 334544 133510) (465368 133452, 466093 133668, 465206 133360, 465078 133336, 464272 133211) (453692 130850, 453288 130729, 453197 130706, 452478 130635) (348195 130442, 348057 130461, 347574 130606, 348788 130386) (359597 128481, 358740 128697, 359659 128536, 360595 128430) (439119 128356, 440049 128527, 439140 128299, 439018 128289, 438196 128246) (426210 126823, 427460 126921, 426899 126819) (374370 126692, 373874 126795, 375106 126694, 374495 126688) (385118 125975, 386056 125902, 387007 125890, 386010 125837) (412600 125778, 411756 125821, 412696 125841, 413644 125922, 412696 125777) (400160 125539, 401369 125559, 400672 125482)), ((673461 447259, 683344 447956, 694928 448746, 695135 448830, 695263 449040, 695321 449489, 695113 450910, 694842 452321, 694636 452729, 694447 452886, 694223 452894, 685239 450439, 673461 447259, 670891 447078, 670828 447053, 670901 446591, 670975 446588)), ((128904 445360, 128977 445818, 128900 445849, 126322 446030, 117269 448474, 105570 451672, 105345 451662, 105155 451505, 104948 451093, 104681 449688, 104470 448265, 104528 447816, 104655 447605, 104864 447523, 113615 446924, 126322 446030, 128816 445357)), ((675302 432972, 682946 433143, 697047 433503, 697262 433575, 697397 433783, 697478 434241, 697329 435684, 697125 437123, 696939 437543, 696757 437711, 696533 437731, 684298 435000, 675302 432972, 672967 432920, 673011 432459, 673021 432458)), ((698467 420091, 698613 420288, 698715 420727, 698644 422158, 698512 423583, 698346 424009, 698173 424182, 697950 424213, 688697 422623, 676833 420617, 686667 420357, 698251 420030)), ((110448 419045, 123071 419378, 113953 420919, 101962 422980, 101738 422949, 101565 422775, 101399 422350, 101268 420928, 101196 419493, 101297 419055, 101444 418857, 101660 418797)), ((676833 420617, 674166 420687, 674125 420676, 674172 420176, 674204 420172)), ((125711 418933, 125759 419445, 125745 419449, 123071 419378, 125707 418933)), ((113126 406765, 122672 407470, 115691 408346, 101241 410127, 101021 410088, 100856 409905, 100712 409477, 100644 408036, 100639 406609, 100763 406160, 100919 405970, 101138 405918)), ((699112 404728, 699268 404918, 699360 405248, 699390 405717, 699384 406795, 699318 408236, 699175 408662, 699010 408845, 698789 408885, 686401 407358, 677348 406223, 684822 405670, 698892 404678)), ((125236 407174, 125250 407635, 125162 407654, 122672 407470, 125151 407159)), ((677348 406223, 674868 406406, 674789 406388, 674804 405926, 674879 405913)), ((699010 391155, 699175 391338, 699320 391769, 699384 393205, 699391 394642, 699268 395082, 699112 395272, 698893 395323, 689486 394628, 677491 393771, 687329 392552, 698788 391114)), ((677491 393771, 674880 394094, 674804 394080, 674789 393602, 674867 393583)), ((109936 390962, 122529 392523, 113304 393182, 101137 394083, 100919 394029, 100763 393839, 100640 393396, 100644 391964, 100711 390527, 100856 390095, 101021 389912, 101242 389871)), ((125250 392355, 125235 392832, 125150 392848, 122529 392523, 125164 392335)), ((113833 379017, 123231 380630, 116185 380828, 101661 381202, 101444 381142, 101297 380945, 101195 380503, 101268 379072, 101400 377646, 101565 377225, 101738 377051, 101961 377021)), ((125758 380563, 125712 381055, 125709 381055, 123231 380630, 125744 380559)), ((698173 375818, 698346 375991, 698511 376413, 698644 377841, 698716 379268, 698613 379711, 698467 379909, 698250 379969, 685809 379648, 676670 379392, 684012 378131, 697951 375788)), ((676670 379392, 674202 379816, 674171 379812, 674126 379333, 674167 379322)), ((696757 362289, 696939 362457, 697079 362773, 697177 363238, 697329 364316, 697440 365401, 697457 365877, 697397 366217, 697262 366424, 697048 366498, 687613 366709, 675426 367009, 673023 367547, 673012 367546, 672967 367070, 675426 367009, 685323 364795, 696532 362268)), ((117229 351464, 126509 353997, 128898 354161, 128975 354191, 128906 354625, 128819 354628, 126509 353997, 119368 353508, 104865 352476, 104655 352395, 104528 352184, 104469 351731, 104681 350312, 104950 348904, 105155 348495, 105345 348338, 105569 348329)), ((694447 347114, 694636 347271, 694840 347673, 695113 349090, 695322 350507, 695263 350960, 695135 351170, 694927 351253, 682527 352136, 673265 352771, 670972 353397, 670899 353394, 670829 352957, 670893 352933, 673265 352771, 680510 350791, 694224 347106))) \ No newline at end of file +MULTIPOLYGON (((402121 100550, 402567 100684, 402759 100844, 402807 101064, 401914 110025, 400645 123031, 400840 125036, 412494 125403, 412515 125536, 412689 125681, 412692 125682, 412697 125681, 412886 125554, 412921 125416, 412494 125403, 412482 125323, 412824 123054, 412443 115525, 411786 101283, 411841 101065, 412038 100914, 412374 100830, 412847 100812, 413937 100844, 415387 100946, 415816 101100, 415997 101269, 416032 101492, 414220 113794, 412824 123054, 412940 125344, 412921 125416, 417267 125553, 426762 126450, 426775 126570, 426932 126714, 427112 126603, 427148 126487, 426762 126450, 426751 126354, 427169 124222, 427138 113717, 427083 102299, 427152 102085, 427359 101944, 427819 101854, 429295 101967, 430768 102138, 431204 102315, 431380 102493, 431406 102716, 429574 111944, 427169 124222, 427175 126397, 427148 126487, 434465 127178, 438949 127888, 438957 128037, 439116 128200, 439121 128202, 439139 128201, 439338 128092, 439387 127958, 438949 127888, 438946 127822, 439526 125509, 439883 118011, 440616 103833, 440691 103621, 440900 103490, 441350 103419, 442776 103601, 444194 103840, 444602 104034, 444763 104219, 444776 104444, 441784 116510, 439526 125509, 439413 127888, 439387 127958, 451528 129881, 453033 130218, 453033 130219, 453037 130437, 453189 130606, 453204 130612, 453217 130612, 453421 130512, 453500 130322, 453033 130218, 453735 127862, 454687 117762, 455749 106320, 455838 106115, 456054 105994, 456514 105947, 457942 106195, 459360 106501, 459772 106719, 459927 106913, 459930 107138, 457215 116176, 453735 127862, 453504 130312, 453500 130322, 465054 132905, 465046 133079, 465187 133256, 465208 133266, 465235 133267, 465444 133176, 465522 133010, 465054 132905, 465056 132863, 465895 130508, 466965 123133, 469045 109151, 469142 108948, 469360 108836, 469816 108811, 471211 109126, 472593 109500, 472981 109732, 473123 109933, 473114 110157, 468964 121890, 465895 130508, 465536 132980, 465522 133010, 468387 133650, 478829 136684, 478819 136820, 478954 137004, 478982 137019, 479010 137021, 479223 136940, 479289 136817, 478829 136684, 478835 136602, 479825 134163, 481707 124432, 483880 113088, 483987 112892, 484212 112791, 484668 112787, 486052 113167, 487422 113606, 487801 113860, 487935 114067, 487915 114291, 484347 123023, 479825 134163, 479325 136749, 479289 136817, 484977 138470, 490555 140478, 490535 140616, 490658 140806, 490677 140817, 490703 140821, 490919 140751, 490989 140635, 490555 140478, 490566 140402, 491622 138152, 493407 130870, 496812 117182, 496927 116988, 497157 116899, 497614 116918, 498978 117368, 500325 117876, 500688 118145, 500811 118358, 500781 118581, 495501 129890, 491622 138152, 491031 140565, 490989 140635, 501231 144322, 503912 145482, 503880 145664, 503996 145860, 504027 145880, 504057 145886, 504276 145826, 504372 145681, 503912 145482, 503918 145450, 505153 143088, 507945 133654, 511214 122536, 511340 122350, 511572 122271, 512024 122311, 513360 122820, 514675 123386, 515028 123675, 515139 123893, 515099 124114, 510728 132424, 505153 143088, 504396 145645, 504372 145681, 515236 150382, 515187 150582, 515293 150782, 515299 150787, 515309 150789, 515531 150741, 515660 150567, 515660 150566, 515236 150382, 515239 150372, 516429 148368, 518954 141146, 523657 127844, 523790 127663, 524030 127597, 524486 127662, 525818 128250, 527119 128887, 527464 129196, 527568 129421, 527518 129640, 521140 140434, 516429 148368, 515660 150566, 517085 151182, 528024 156756, 527986 156893, 528083 157099, 528106 157117, 528123 157122, 528347 157083, 528441 156968, 528024 156756, 528044 156684, 529450 154528, 533167 145343, 537498 134570, 537642 134398, 537881 134342, 538331 134426, 539613 135064, 540873 135757, 541196 136078, 541286 136307, 541225 136523, 536114 144308, 529450 154528, 528484 156915, 528441 156968, 532478 159025, 538810 162770, 538769 162884, 538847 163072, 539049 163048, 539129 162959, 538810 162770, 538842 162681, 540043 161044, 543360 153855, 549332 141033, 549483 140867, 549730 140826, 550192 140942, 551479 141667, 552739 142442, 553059 142786, 553144 143022, 553072 143235, 545636 153423, 540043 161044, 539193 162887, 539129 162959, 547347 167819, 550927 170252, 550876 170385, 550956 170601, 550969 170613, 550983 170619, 551211 170605, 551307 170510, 550927 170252, 550954 170182, 552536 168209, 557140 159389, 562488 149077, 562648 148919, 562893 148889, 563332 149016, 564565 149785, 565763 150605, 566059 150959, 566129 151196, 566048 151406, 560268 158565, 552536 168209, 551365 170452, 551307 170510, 560945 177060, 560942 177064, 560852 177260, 560903 177435, 561088 177430, 561247 177285, 561255 177271, 560945 177060, 562203 175648, 566108 168965, 573440 156507, 573607 156356, 573857 156340, 574300 156495, 575510 157341, 576685 158230, 576970 158601, 577031 158844, 576940 159050, 568764 168284, 562203 175648, 561255 177271, 561635 177529, 572499 185956, 572428 186095, 572486 186318, 572497 186331, 572512 186339, 572741 186349, 572870 186244, 572499 185956, 572526 185902, 574302 184091, 579493 176182, 586095 166048, 586270 165906, 586518 165900, 586941 166069, 588093 166956, 589208 167890, 589465 168269, 589511 168512, 589410 168713, 583298 174914, 574302 184091, 572910 186211, 572870 186244, 575285 188117, 581473 193572, 581414 193674, 581453 193873, 581657 193888, 581751 193818, 581473 193572, 581522 193487, 583026 192096, 587296 186159, 595929 174219, 596110 174084, 596360 174092, 596791 174293, 597915 175252, 599003 176253, 599252 176653, 599290 176900, 599180 177097, 590390 185285, 583026 192096, 581830 193759, 581751 193818, 588244 199542, 592330 203628, 592260 203741, 592292 203967, 592303 203983, 592326 203998, 592553 204028, 592659 203957, 592330 203628, 592375 203557, 594360 201890, 600242 194598, 607827 185134, 608015 185010, 608261 185026, 608666 185235, 609712 186217, 610717 187240, 610936 187642, 610958 187887, 610837 188077, 604107 193705, 594360 201890, 592733 203907, 592659 203957, 600459 211757, 600650 211973, 600621 211995, 600495 212171, 600517 212397, 600521 212404, 600531 212411, 600755 212449, 600939 212336, 600954 212319, 600650 211973, 602485 210576, 607188 205222, 616865 194255, 617056 194138, 617301 194166, 617702 194400, 618713 195443, 619680 196524, 619883 196940, 619895 197188, 619766 197372, 610235 204676, 602485 210576, 600954 212319, 610434 223073, 610312 223232, 610321 223460, 610336 223487, 610366 223511, 610589 223562, 610776 223460, 610434 223073, 610444 223060, 612660 221538, 619121 214942, 627611 206226, 627810 206120, 628052 206159, 628436 206405, 629378 207478, 630277 208591, 630456 209011, 630453 209257, 630314 209433, 623059 214398, 612660 221538, 610780 223458, 610776 223460, 611883 224716, 617790 232330, 617705 232426, 617705 232653, 617715 232674, 617735 232691, 617954 232751, 618072 232694, 617790 232330, 617849 232263, 619975 230946, 625107 226135, 635748 216201, 635950 216102, 636190 216153, 636562 216419, 637459 217543, 638306 218697, 638467 219129, 638453 219375, 638306 219545, 628109 225907, 619975 230946, 618150 232657, 618072 232694, 622471 238365, 626502 244297, 626412 244391, 626401 244618, 626414 244649, 626436 244670, 626653 244740, 626770 244691, 626502 244297, 626562 244233, 628874 242955, 635949 237000, 645263 229120, 645471 229035, 645709 229097, 646070 229384, 646907 230546, 647699 231746, 647836 232181, 647809 232425, 647654 232588, 639979 236816, 628874 242955, 626853 244656, 626770 244691, 632181 252654, 633039 254105, 632884 254250, 632863 254477, 632873 254503, 632890 254521, 633102 254600, 633291 254530, 633039 254105, 633042 254102, 635301 252988, 640883 248688, 652412 239848, 652621 239770, 652856 239843, 653199 240141, 653981 241341, 654709 242569, 654826 243010, 654788 243252, 654625 243407, 643848 248771, 635301 252988, 633305 254525, 633291 254530, 640590 266871, 640569 266880, 640405 267022, 640374 267248, 640380 267266, 640388 267276, 640597 267367, 640805 267303, 640834 267283, 640590 266871, 642848 265895, 650574 260568, 660621 253605, 660837 253540, 661069 253627, 661401 253948, 662131 255203, 662812 256492, 662909 256940, 662860 257182, 662691 257330, 654711 260765, 642848 265895, 640834 267283, 640976 267523, 645990 277364, 645888 277443, 645846 277666, 645850 277683, 645857 277691, 646060 277790, 646190 277756, 645990 277364, 646059 277310, 648302 276461, 654364 272661, 666704 264972, 666920 264913, 667147 265010, 667462 265342, 668125 266614, 668735 267912, 668808 268363, 668747 268602, 668570 268740, 657295 273058, 648302 276461, 646270 277735, 646190 277756, 648819 282916, 652252 290851, 652156 290919, 652107 291127, 652292 291232, 652407 291208, 652252 290851, 652332 290794, 654418 290123, 662858 285428, 673543 279448, 673764 279405, 673988 279518, 674293 279879, 674907 281223, 675473 282592, 675530 283060, 675459 283300, 675277 283431, 667120 286039, 654418 290123, 652504 291188, 652407 291208, 655679 298770, 656720 301662, 656581 301751, 656517 301969, 656517 301971, 656521 301977, 656715 302100, 656869 302076, 656720 301662, 656764 301634, 658999 301031, 665426 297816, 678499 291333, 678720 291297, 678937 291417, 679217 291778, 679762 293127, 680248 294490, 680280 294952, 680197 295185, 680008 295308, 668352 298508, 658999 301031, 656928 302067, 656869 302076, 661531 315024, 661657 315456, 661640 315460, 661453 315567, 661390 315749, 661547 315858, 661761 315833, 661765 315831, 661657 315456, 663614 315025, 672997 310933, 683834 306177, 684059 306155, 684270 306288, 684536 306674, 685018 308067, 685448 309478, 685459 309947, 685366 310180, 685172 310293, 676374 312213, 663614 315025, 661765 315831, 665018 327028, 664898 327089, 664813 327299, 664816 327306, 664995 327447, 665137 327438, 665018 327028, 665092 326991, 667355 326615, 674397 323926, 687739 318900, 687963 318886, 688167 319026, 688412 319417, 688822 320810, 689171 322213, 689158 322677, 689052 322901, 688852 323004, 676591 325082, 667355 326615, 665211 327434, 665137 327438, 666350 331614, 668431 340921, 668321 340970, 668234 341163, 668394 341301, 668515 341298, 668431 340921, 668518 340881, 670671 340620, 680657 337344, 691499 333763, 691725 333763, 691923 333915, 692094 334223, 692239 334686, 692498 335764, 692791 337217, 692758 337687, 692643 337909, 692439 338003, 683096 339113, 670671 340620, 668610 341296, 668515 341298, 670119 348473, 670829 352957, 670690 353010, 670585 353210, 670585 353217, 670591 353233, 670756 353389, 670899 353394, 672822 365536, 672967 367070, 672964 367070, 672759 367140, 672645 367338, 672644 367353, 672649 367368, 672807 367531, 673012 367546, 674126 379333, 673957 379380, 673832 379568, 673829 379590, 673837 379618, 673987 379788, 674171 379812, 674447 382734, 674789 393602, 674656 393633, 674523 393819, 674517 393852, 674523 393878, 674666 394055, 674804 394080, 674990 400000, 674804 405926, 674666 405951, 674523 406126, 674518 406147, 674523 406173, 674656 406357, 674789 406388, 674447 417267, 674172 420176, 673988 420202, 673837 420373, 673828 420406, 673832 420438, 673957 420629, 674125 420676, 673011 432459, 672806 432475, 672648 432637, 672645 432645, 672646 432654, 672760 432851, 672966 432920, 672967 432920, 672821 434465, 670901 446591, 670758 446598, 670592 446756, 670583 446781, 670583 446797, 670689 446999, 670828 447053, 670119 451528, 668514 458708, 668608 458710, 670538 459347, 678399 460280, 692438 461998, 692643 462090, 692758 462313, 692792 462786, 692498 464236, 692152 465673, 691923 466085, 691725 466237, 691500 466236, 679513 462311, 670538 459347, 668521 459108, 668433 459069, 668514 458708, 668393 458705, 668239 458836, 668324 459020, 668433 459069, 666350 468387, 665142 472544, 665217 472548, 667582 473443, 677393 475097, 688853 476995, 689052 477099, 689158 477323, 689171 477783, 688822 479190, 688414 480580, 688167 480974, 687963 481114, 687738 481101, 679143 477816, 667582 473443, 665088 473022, 665014 472984, 665142 472544, 665000 472537, 664819 472680, 664811 472697, 664810 472710, 664895 472923, 665014 472984, 661763 484175, 663496 484936, 671060 486585, 685171 489708, 685366 489820, 685460 490053, 685449 490522, 685018 491933, 684535 493328, 684270 493712, 684059 493845, 683835 493822, 672526 488900, 663496 484936, 661658 484535, 661763 484175, 661758 484173, 661544 484149, 661393 484252, 661455 484426, 661643 484532, 661658 484535, 661530 484977, 656873 497913, 656933 497922, 659203 499051, 668330 501545, 680009 504692, 680197 504815, 680280 505048, 680248 505507, 679762 506873, 679219 508220, 678937 508583, 678720 508703, 678498 508668, 670712 504772, 659203 499051, 656757 498382, 656714 498354, 656873 497913, 656718 497890, 656526 498012, 656514 498031, 656512 498044, 656575 498265, 656714 498354, 655678 501231, 652402 508801, 652499 508822, 654288 509823, 661252 512049, 675276 516570, 675459 516700, 675530 516940, 675472 517412, 674907 518777, 674293 520120, 673988 520482, 673764 520595, 673544 520551, 663040 514721, 654288 509823, 652335 509199, 652255 509142, 652402 508801, 652288 508776, 652111 508875, 652159 509075, 652255 509142, 648818 517085, 646194 522235, 646275 522255, 648471 523626, 657227 526969, 668571 531258, 668747 531398, 668808 531637, 668735 532086, 668125 533386, 667463 534656, 667147 534990, 666920 535086, 666703 535029, 659271 530369, 648471 523626, 646053 522703, 645983 522649, 646194 522235, 646064 522202, 645860 522303, 645847 522320, 645840 522345, 645882 522570, 645983 522649, 640975 532478, 640829 532726, 642728 534042, 649269 536858, 662690 542671, 662860 542818, 662909 543060, 662812 543510, 662131 544797, 661399 546053, 661069 546373, 660837 546460, 660622 546394, 650730 539587, 642728 534042, 640594 533123, 640829 532726, 640799 532705, 640593 532639, 640385 532730, 640380 532736, 640376 532748, 640408 532972, 640573 533114, 640594 533123, 633295 545464, 633309 545469, 635428 547096, 643713 551210, 654626 556592, 654788 556748, 654826 556990, 654710 557430, 653981 558659, 653200 559858, 652856 560157, 652621 560230, 652411 560153, 645448 554789, 635428 547096, 633036 545908, 633033 545906, 633295 545464, 633105 545395, 632892 545475, 632869 545499, 632857 545532, 632878 545759, 633033 545906, 632181 547347, 626764 555317, 626846 555353, 628746 556960, 634917 560360, 647653 567413, 647809 567575, 647836 567819, 647698 568255, 646907 569454, 646069 570617, 645709 570903, 645470 570966, 645264 570879, 636062 563148, 628746 556960, 626566 555759, 626506 555697, 626764 555317, 626648 555266, 626432 555336, 626414 555353, 626404 555377, 626415 555604, 626506 555697, 622470 561635, 618075 567301, 618154 567339, 620082 569141, 627935 574031, 638307 580454, 638452 580626, 638467 580871, 638306 581302, 637459 582457, 636564 583580, 636191 583847, 635950 583897, 635747 583799, 629355 577807, 620082 569141, 617842 567746, 617783 567678, 618075 567301, 617958 567245, 617738 567304, 617713 567326, 617700 567353, 617700 567582, 617783 567678, 611883 575285, 610768 576549, 610771 576551, 612524 578350, 618342 582333, 630313 590568, 630453 590743, 630456 590989, 630277 591409, 629378 592522, 628432 593597, 628052 593841, 627810 593880, 627612 593773, 619180 585181, 612524 578350, 610451 576931, 610442 576920, 610768 576549, 610581 576447, 610359 576495, 610339 576511, 610326 576535, 610316 576761, 610442 576920, 600959 587675, 602586 589521, 610039 595223, 619767 602626, 619895 602812, 619883 603060, 619680 603474, 618713 604557, 617701 605601, 617301 605833, 617056 605862, 616864 605746, 611130 599219, 602586 589521, 600642 588035, 600959 587675, 600944 587658, 600758 587547, 600534 587586, 600519 587597, 600512 587608, 600489 587835, 600614 588013, 600642 588035, 600458 588244, 592649 596053, 592722 596103, 594220 597971, 599709 602564, 610836 611924, 610958 612112, 610936 612358, 610717 612760, 609712 613783, 608670 614762, 608261 614974, 608015 614990, 607828 614865, 600237 605475, 594220 597971, 592383 596434, 592338 596364, 592649 596053, 592543 595981, 592318 596009, 592305 596017, 592298 596028, 592265 596253, 592338 596364, 588243 600459, 581757 606177, 581837 606236, 583121 608015, 590192 614589, 599181 622902, 599290 623100, 599252 623347, 599003 623747, 597915 624748, 597070 625469, 596680 625759, 596360 625908, 596110 625915, 595928 625782, 590928 618831, 583121 608015, 581514 606521, 581465 606434, 581757 606177, 581662 606108, 581449 606124, 581407 606332, 581465 606434, 575284 611883, 572856 613767, 572896 613800, 574158 615736, 579203 620856, 589409 631288, 589511 631488, 589465 631731, 589208 632109, 588093 633044, 586942 633930, 586518 634100, 586270 634093, 586096 633952, 579450 623855, 574158 615736, 572536 614090, 572509 614036, 572856 613767, 572729 613662, 572501 613669, 572495 613676, 572438 613896, 572509 614036, 561635 622471, 561262 622724, 562280 624457, 569068 632112, 576941 640949, 577031 641156, 576970 641399, 576685 641771, 575510 642659, 574299 643505, 573857 643660, 573607 643644, 573439 643494, 568895 635719, 562280 624457, 560939 622944, 561262 622724, 561254 622710, 561093 622566, 560901 622562, 560846 622744, 560936 622941, 560939 622944, 551295 629497, 551353 629556, 552411 631595, 557144 637459, 566047 648595, 566129 648804, 566059 649041, 565764 649395, 564564 650215, 563334 650984, 562893 651111, 562648 651080, 562488 650922, 556723 639904, 552411 631595, 550969 629808, 550942 629738, 551295 629497, 551201 629402, 550975 629387, 550972 629388, 550968 629392, 550890 629606, 550942 629738, 547346 632181, 539138 637036, 539203 637107, 540120 639081, 546317 647559, 553073 656764, 553144 656978, 553059 657214, 552819 657472, 552424 657752, 551479 658332, 550190 659059, 549730 659173, 549484 659133, 549331 658968, 545389 650425, 540120 639081, 538835 637323, 538804 637233, 539138 637036, 539056 636948, 538845 636924, 538765 637119, 538804 637233, 532477 640976, 528432 643037, 528475 643090, 529366 645306, 533482 651576, 541224 663478, 541286 663693, 541196 663922, 540874 664241, 539613 664936, 538333 665573, 537881 665658, 537642 665602, 537499 665429, 532828 653909, 529366 645306, 528056 643309, 528036 643239, 528432 643037, 528339 642921, 528115 642883, 528108 642885, 528094 642896, 527997 643101, 528036 643239, 517084 648819, 515671 649430, 516491 651759, 521652 660480, 527518 670359, 527568 670579, 527464 670804, 527118 671114, 525818 671750, 524484 672338, 524030 672403, 523791 672337, 523656 672157, 520540 663247, 516491 651759, 515233 649632, 515230 649621, 515671 649430, 515670 649428, 515539 649255, 515315 649208, 515301 649212, 515289 649220, 515182 649422, 515230 649621, 504365 654323, 504388 654358, 505096 656762, 508563 663353, 515098 675886, 515139 676107, 515028 676325, 514674 676613, 513360 677180, 512026 677689, 511572 677729, 511340 677650, 511215 677463, 507676 665531, 505096 656762, 503929 654545, 503923 654514, 504365 654323, 504269 654177, 504051 654116, 504029 654120, 504005 654136, 503890 654331, 503923 654514, 501230 655679, 491000 659362, 491042 659431, 491675 661988, 495873 670964, 500782 681418, 500811 681642, 500688 681855, 500323 682126, 498978 682632, 497611 683082, 497157 683101, 496927 683012, 496811 682819, 494565 673657, 491675 661988, 490559 659601, 490549 659525, 491000 659362, 490928 659246, 490710 659177, 490675 659182, 490653 659195, 490530 659386, 490549 659525, 484976 661531, 479282 663185, 479318 663253, 479786 665695, 482622 672634, 487914 685710, 487935 685933, 487801 686140, 487423 686393, 486052 686832, 484668 687213, 484212 687209, 483987 687108, 483880 686911, 481505 674658, 479786 665695, 478846 663394, 478839 663314, 479282 663185, 479217 663061, 479006 662980, 478984 662982, 478961 662994, 478828 663178, 478839 663314, 468386 666350, 465535 666987, 465549 667016, 465939 669656, 469225 678927, 473115 689843, 473123 690067, 472981 690268, 472589 690503, 471211 690873, 469814 691189, 469360 691164, 469142 691052, 469044 690850, 467696 681557, 465939 669656, 465047 667140, 465045 667097, 465535 666987, 465453 666821, 465244 666731, 465208 666733, 465180 666746, 465039 666923, 465045 667097, 453494 669679, 453498 669690, 453713 672009, 455915 679337, 459929 692863, 459927 693087, 459772 693281, 459364 693497, 457942 693805, 456869 693992, 456398 694041, 456054 694006, 455838 693885, 455749 693679, 454565 681197, 453713 672009, 453043 669780, 453494 669679, 453416 669489, 453213 669388, 453207 669388, 453197 669392, 453044 669562, 453043 669779, 453043 669780, 451527 670119, 439401 672040, 439427 672108, 439557 674672, 441950 684295, 444777 695555, 444763 695781, 444601 695966, 444191 696162, 442776 696399, 441345 696580, 440899 696510, 440691 696379, 440615 696168, 440173 686864, 439557 674672, 438937 672181, 438941 672113, 439401 672040, 439351 671906, 439150 671797, 439124 671796, 439107 671802, 438949 671964, 438941 672113, 434464 672822, 427141 673514, 427168 673605, 427158 675639, 428700 683400, 431405 697285, 431380 697507, 431204 697685, 430772 697861, 429295 698033, 427824 698147, 427359 698056, 427152 697915, 427084 697700, 427113 685088, 427158 675639, 426762 673644, 426772 673549, 427141 673514, 427106 673397, 426933 673290, 426784 673429, 426772 673549, 417266 674447, 412939 674583, 412958 674654, 412839 677168, 414300 687025, 416033 698507, 415997 698731, 415816 698900, 415383 699056, 413937 699156, 412484 699197, 412038 699086, 411842 698935, 411785 698718, 412253 689528, 412839 677168, 412470 674679, 412482 674597, 412939 674583, 412902 674446, 412711 674318, 412693 674316, 412679 674319, 412502 674465, 412482 674597, 400833 674964, 400646 676836, 401416 684547, 402806 698935, 402759 699156, 402567 699316, 402231 699417, 401750 699458, 400642 699478, 399173 699451, 398719 699315, 398527 699155, 398480 698935, 399665 686658, 400646 676836, 400460 674976, 400833 674964, 400833 674959, 400792 674747, 400647 674635, 400500 674747, 400458 674959, 400460 674976, 400000 674990, 386256 674558, 386232 674403, 386056 674257, 386038 674253, 386022 674255, 385831 674382, 385789 674543, 386256 674558, 386266 674618, 385896 677117, 386344 686577, 386959 698656, 386901 698872, 386705 699023, 386264 699135, 384809 699096, 383363 698995, 382928 698839, 382747 698669, 382711 698447, 384011 689838, 385896 677117, 385776 674592, 385789 674543, 382734 674447, 374522 673671, 374509 673554, 374360 673415, 374185 673523, 374150 673636, 374522 673671, 374532 673768, 374131 675786, 374167 683091, 374201 697825, 374133 698040, 373927 698181, 373463 698272, 371988 698156, 370515 697985, 370082 697809, 369905 697631, 369878 697408, 372178 685618, 374131 675786, 374121 673730, 374150 673636, 365535 672822, 359825 671917, 359817 671783, 359658 671621, 359635 671613, 359611 671614, 359412 671724, 359367 671845, 359825 671917, 359830 672001, 359206 674510, 358733 683872, 358159 695988, 358081 696198, 357872 696329, 357424 696399, 355998 696220, 354585 695983, 354169 695786, 354008 695600, 353995 695376, 356130 686869, 359206 674510, 359336 671927, 359367 671845, 348472 670119, 348190 670056, 348201 670021, 348200 669805, 348050 669636, 348040 669632, 348030 669632, 347827 669733, 347743 669933, 347741 669956, 348190 670056, 347527 672267, 346869 679360, 345487 693921, 345400 694128, 345185 694249, 344720 694296, 343293 694045, 341873 693738, 341466 693523, 341311 693329, 341307 693104, 344726 681593, 347527 672267, 347741 669956, 333749 666827, 333756 666626, 333613 666448, 333583 666434, 333548 666432, 333338 666522, 333246 666715, 333749 666827, 333748 666843, 332854 669367, 331502 678511, 329756 690554, 329658 690755, 329439 690866, 328991 690892, 327591 690579, 326212 690208, 325818 689971, 325675 689771, 325685 689546, 328636 681266, 332854 669367, 333245 666718, 333246 666715, 331613 666350, 322358 663661, 322370 663535, 322238 663351, 322218 663340, 322191 663338, 321978 663418, 321917 663533, 322358 663661, 322350 663750, 321407 666059, 320082 672973, 317310 687265, 317204 687464, 316980 687565, 316521 687568, 315138 687186, 313770 686747, 313390 686495, 313256 686288, 313275 686064, 317785 674924, 321407 666059, 321876 663609, 321917 663533, 315023 661530, 308277 659101, 308293 658972, 308169 658781, 308141 658764, 308110 658760, 307893 658830, 307827 658939, 308277 659101, 308266 659188, 307143 661590, 304921 670558, 302018 682407, 301900 682598, 301672 682687, 301215 682668, 299851 682220, 298508 681716, 298138 681442, 298016 681229, 298046 681006, 301770 673074, 307143 661590, 307780 659016, 307827 658939, 298770 655678, 297222 655008, 297263 654800, 297148 654604, 297127 654590, 297099 654585, 296880 654645, 296769 654812, 297222 655008, 297221 655012, 296050 657240, 294061 664001, 289930 677929, 289806 678116, 289573 678195, 289119 678155, 287783 677644, 286470 677078, 286118 676790, 286006 676572, 286047 676351, 291614 665676, 296050 657240, 296760 654825, 296769 654812, 283610 649118, 283621 649099, 283669 648887, 283563 648687, 283546 648675, 283535 648672, 283312 648720, 283182 648894, 283170 648928, 283610 649118, 282357 651236, 279237 660086, 275202 671626, 275066 671805, 274826 671870, 274367 671804, 273041 671220, 271737 670582, 271391 670272, 271288 670047, 271339 669828, 275774 662359, 282357 651236, 283170 648928, 282916 648818, 273074 643804, 273110 643681, 273014 643476, 273002 643467, 272990 643463, 272766 643500, 272682 643604, 273074 643804, 273050 643888, 271734 645892, 269064 652530, 263600 666005, 263459 666180, 263219 666235, 262769 666151, 261484 665510, 260225 664816, 259904 664498, 259812 664269, 259874 664053, 266458 653932, 271734 645892, 272629 643669, 272682 643604, 267523 640975, 260080 636573, 260118 636462, 260036 636265, 259825 636289, 259746 636375, 260080 636573, 260048 636667, 258756 638435, 254686 647195, 249558 658313, 249403 658478, 249156 658518, 248699 658405, 247410 657679, 246151 656906, 245827 656559, 245743 656323, 245814 656110, 250880 649206, 258756 638435, 259678 636449, 259746 636375, 252654 632181, 250111 630453, 250171 630300, 250094 630086, 250093 630085, 250086 630082, 249858 630096, 249748 630206, 250111 630453, 250092 630501, 248642 632298, 245331 638680, 238563 651610, 238405 651770, 238159 651801, 237719 651673, 236486 650902, 235290 650083, 234994 649730, 234924 649492, 235005 649282, 242555 639842, 248642 632298, 249705 630249, 249748 630206, 238365 622471, 238009 622195, 238020 622183, 238108 621985, 238052 621801, 237862 621805, 237703 621952, 237701 621956, 238009 622195, 236679 623695, 231494 632521, 225521 642738, 225353 642887, 225103 642904, 224661 642750, 223453 641906, 222274 641015, 221990 640643, 221928 640400, 222019 640194, 228009 633470, 236679 623695, 237701 621956, 228488 614809, 228550 614690, 228494 614469, 228487 614465, 228259 614457, 228149 614547, 228488 614809, 228450 614882, 226837 616519, 222723 622831, 214883 634740, 214710 634883, 214463 634890, 214035 634718, 212886 633830, 211776 632901, 211516 632519, 211469 632276, 211571 632075, 220268 623187, 226837 616519, 228092 614594, 228149 614547, 224715 611883, 217561 605576, 217621 605471, 217577 605263, 217367 605247, 217270 605320, 217561 605576, 217514 605660, 215919 607143, 209772 615657, 203105 624926, 202923 625058, 202673 625051, 202245 624852, 201121 623894, 200029 622890, 199781 622490, 199743 622244, 199853 622047, 206759 615659, 215919 607143, 217194 605377, 217270 605320, 211756 600458, 208546 597248, 208627 597124, 208595 596900, 208591 596894, 208576 596884, 208351 596855, 208233 596934, 208546 597248, 208509 597305, 206681 598835, 201985 604690, 193058 615731, 192872 615857, 192627 615842, 192222 615633, 191173 614649, 190169 613625, 189953 613226, 189931 612980, 190052 612791, 199564 604788, 206681 598835, 208171 596976, 208233 596934, 199542 588243, 198522 587087, 198523 587086, 198647 586907, 198624 586680, 198616 586668, 198603 586658, 198379 586619, 198205 586727, 198522 587087, 196563 588585, 189862 596191, 182278 604823, 182085 604938, 181839 604908, 181440 604678, 180430 603636, 179458 602548, 179257 602136, 179246 601889, 179375 601705, 186884 595989, 196563 588585, 198195 586733, 198205 586727, 190375 577846, 190484 577711, 190475 577484, 190465 577466, 190443 577448, 190220 577398, 190057 577486, 190375 577846, 190349 577879, 188282 579294, 183084 584629, 173184 594718, 172987 594825, 172745 594787, 172364 594543, 171417 593465, 170520 592353, 170342 591934, 170345 591689, 170484 591512, 180738 584459, 188282 579294, 190029 577501, 190057 577486, 188117 575285, 181452 566693, 181541 566589, 181540 566360, 181527 566333, 181504 566313, 181285 566254, 181159 566315, 181452 566693, 181400 566754, 179166 568145, 171924 574913, 163499 582812, 163295 582909, 163054 582858, 162682 582593, 161787 581471, 160937 580313, 160778 579884, 160792 579638, 160939 579468, 168957 574502, 179166 568145, 181089 566348, 181159 566315, 177529 561635, 174196 556730, 174293 556630, 174305 556404, 174296 556384, 174278 556366, 174062 556296, 173937 556349, 174196 556730, 174142 556786, 171963 557987, 166241 562827, 155440 571900, 155235 571989, 154996 571926, 154638 571643, 153798 570476, 153009 569280, 152871 568842, 152898 568598, 153053 568435, 163971 562390, 171963 557987, 173862 556380, 173937 556349, 167819 547346, 166332 544831, 166464 544702, 166485 544476, 166471 544439, 166452 544419, 166239 544340, 166076 544399, 166332 544831, 166308 544854, 163917 546041, 156116 552030, 146937 559103, 146726 559180, 146491 559107, 146234 558883, 145952 558509, 145368 557611, 144637 556381, 144520 555940, 144559 555698, 144721 555542, 153142 551389, 163917 546041, 166036 544414, 166076 544399, 160051 534212, 160207 534079, 160240 533854, 160237 533845, 160232 533839, 160023 533747, 159816 533813, 159815 533813, 160051 534212, 160042 534219, 157898 535143, 151613 539498, 139990 547495, 139776 547563, 139544 547475, 139213 547156, 138480 545897, 137801 544611, 137705 544163, 137753 543920, 137922 543772, 149426 538791, 157898 535143, 159815 533813, 159025 532477, 153451 521537, 153562 521448, 153603 521223, 153596 521197, 153586 521184, 153382 521084, 153239 521122, 153451 521537, 153393 521584, 150990 522501, 142583 527748, 132747 533917, 132529 533972, 132302 533877, 131990 533548, 131326 532276, 130715 530975, 130640 530524, 130701 530286, 130878 530147, 139590 526853, 150990 522501, 153173 521139, 153239 521122, 151182 517084, 148260 510332, 148360 510264, 148408 510067, 148231 509968, 148113 509993, 148260 510332, 148182 510386, 146247 511004, 139339 514871, 126971 521734, 126751 521779, 126527 521667, 126223 521304, 125607 519959, 125044 518595, 124986 518124, 125057 517884, 125240 517753, 137244 513883, 146247 511004, 148019 510013, 148113 509993, 144321 501230, 142855 497157, 142974 497079, 143036 496858, 143033 496841, 143025 496828, 142832 496705, 142699 496725, 142855 497157, 142793 497198, 140351 497865, 131443 502294, 121056 507493, 120834 507526, 120616 507407, 120334 507042, 119793 505699, 119304 504328, 119272 503871, 119356 503638, 119544 503517, 128429 501122, 140351 497865, 142618 496738, 142699 496725, 138751 485761, 138756 485760, 138945 485654, 139007 485482, 138855 485377, 138640 485402, 138624 485409, 138751 485761, 136906 486163, 129817 489276, 116562 495045, 116339 495068, 116127 494935, 115862 494550, 115377 493154, 114949 491742, 114938 491276, 115032 491043, 115226 490930, 127267 488265, 136906 486163, 138624 485409, 138469 484977, 134634 471774, 134773 471701, 134856 471488, 134854 471467, 134848 471454, 134668 471313, 134503 471323, 134634 471774, 134581 471801, 132080 472222, 123230 475569, 111933 479887, 111707 479899, 111503 479759, 111259 479370, 110850 477978, 110497 476567, 110512 476109, 110617 475885, 110817 475783, 119407 474358, 132080 472222, 134451 471326, 134503 471323, 133650 468387, 131850 460336, 131958 460289, 132043 460106, 131887 459972, 131769 459974, 131850 460336, 131759 460375, 129731 460616, 122782 462911, 108778 467496, 108554 467499, 108356 467346, 108126 466930, 107779 465494, 107560 464405, 107497 463926, 107522 463575, 107636 463351, 107841 463257, 119764 461799, 129731 460616, 131671 459975, 131769 459974, 129881 451528, 128977 445818, 129101 445768, 129206 445567, 129207 445545, 129198 445522, 129032 445365, 128904 445360, 127178 434464, 127151 434178, 127187 434177, 127394 434109, 127508 433914, 127509 433905, 127505 433894, 127347 433732, 127131 433714, 127108 433719, 127151 434178, 124846 434229, 117894 435797, 103619 438982, 103395 438963, 103214 438796, 103028 438375, 102821 436933, 102711 435850, 102696 435375, 102756 435035, 102892 434827, 103105 434754, 115108 434447, 124846 434229, 127108 433719, 125759 419445, 125953 419390, 126078 419199, 126082 419165, 126073 419132, 125922 418961, 125711 418933, 125553 417266, 125250 407635, 125375 407607, 125509 407423, 125513 407400, 125507 407374, 125365 407197, 125236 407174, 125010 400000, 125235 392832, 125364 392809, 125508 392631, 125515 392601, 125509 392569, 125375 392384, 125250 392355, 125553 382733, 125712 381055, 125923 381029, 126074 380858, 126081 380834, 126077 380807, 125952 380617, 125758 380563, 127107 366288, 124707 365751, 115326 365519, 103104 365247, 102892 365173, 102756 364965, 102676 364509, 102821 363066, 103026 361629, 103214 361204, 103395 361037, 103620 361017, 112094 362927, 124707 365751, 127152 365811, 127107 366288, 127129 366293, 127346 366274, 127504 366111, 127510 366093, 127509 366079, 127394 365882, 127189 365812, 127152 365811, 127178 365535, 128906 354625, 129034 354621, 129200 354467, 129205 354453, 129205 354440, 129100 354239, 128975 354191, 129881 348472, 131768 340033, 131669 340032, 129594 339351, 119997 338186, 107840 336744, 107636 336649, 107522 336425, 107489 335956, 107779 334506, 108124 333073, 108356 332654, 108554 332501, 108779 332502, 116910 335187, 129594 339351, 131762 339614, 131852 339654, 131768 340033, 131886 340034, 132047 339894, 131960 339702, 131852 339654, 133650 331613, 134508 328661, 134457 328658, 132296 327833, 125206 326657, 110818 324216, 110617 324114, 110512 323890, 110497 323429, 110850 322022, 111261 320627, 111503 320241, 111707 320101, 111932 320113, 123244 324376, 132296 327833, 134577 328211, 134630 328239, 134508 328661, 134672 328671, 134851 328532, 134852 328529, 134853 328522, 134769 328310, 134630 328239, 138470 315023, 138622 314600, 136783 313797, 126788 311593, 115225 309071, 115032 308957, 114939 308724, 114950 308258, 115377 306846, 115860 305453, 116127 305065, 116339 304932, 116563 304954, 124809 308573, 136783 313797, 138755 314232, 138622 314600, 138637 314606, 138852 314629, 139010 314519, 138947 314339, 138759 314233, 138755 314232, 142704 303262, 142623 303249, 140566 302220, 133293 300258, 119545 296483, 119356 296362, 119272 296129, 119304 295670, 119793 294301, 120336 292956, 120616 292593, 120834 292474, 121055 292508, 132196 298033, 140566 302220, 142786 302819, 142849 302860, 142704 303262, 142836 303284, 143029 303163, 143030 303162, 143031 303155, 142968 302936, 142849 302860, 144322 298770, 148109 290017, 148015 289997, 146115 288940, 136115 285723, 125239 282248, 125057 282116, 124986 281876, 125044 281408, 125607 280041, 126221 278698, 126527 278333, 126751 278221, 126972 278265, 135182 282859, 146115 288940, 148185 289606, 148263 289661, 148109 290017, 148227 290041, 148412 289936, 148362 289731, 148263 289661, 151182 282915, 153243 278870, 153178 278852, 151161 277587, 144139 274931, 130879 269851, 130701 269714, 130640 269475, 130713 269027, 131326 267724, 131990 266453, 132302 266123, 132529 266027, 132746 266083, 143297 272657, 151161 277587, 153386 278429, 153445 278475, 153243 278870, 153386 278908, 153590 278809, 153593 278806, 153598 278786, 153557 278562, 153445 278475, 159025 267523, 159810 266195, 157779 264795, 148478 260773, 137921 256228, 137753 256080, 137705 255836, 137800 255391, 138480 254103, 139212 252845, 139544 252525, 139776 252438, 139991 252504, 147748 257878, 157779 264795, 160046 265775, 160054 265782, 159810 266195, 159811 266196, 160019 266259, 160228 266167, 160237 266156, 160242 266141, 160210 265916, 160054 265782, 166080 255593, 166041 255578, 164061 254053, 157377 250756, 144722 244457, 144559 244302, 144520 244060, 144638 243618, 145368 242389, 146148 241191, 146491 240893, 146726 240820, 146936 240898, 156813 248471, 164061 254053, 166301 255158, 166325 255180, 166080 255593, 166243 255654, 166455 255575, 166470 255559, 166480 255533, 166459 255306, 166325 255180, 167819 252653, 173931 243660, 173855 243629, 171839 241932, 163168 237138, 153052 231566, 152898 231402, 152871 231158, 153008 230722, 153798 229524, 154637 228358, 154996 228074, 155235 228011, 155441 228099, 162643 234191, 171839 241932, 174147 243208, 174200 243264, 173931 243660, 174057 243711, 174274 243640, 174297 243618, 174308 243592, 174296 243365, 174200 243264, 177529 238365, 181163 233680, 181093 233646, 179276 231943, 172907 227998, 160940 220531, 160792 220361, 160778 220116, 160937 219687, 161787 218528, 162681 217408, 163054 217142, 163295 217091, 163498 217188, 172622 225705, 179276 231943, 181393 233254, 181446 233315, 181163 233680, 181288 233742, 181507 233684, 181522 233670, 181534 233647, 181535 233419, 181446 233315, 188117 224715, 190050 222523, 190021 222508, 188153 220600, 180047 215032, 170483 208489, 170345 208311, 170342 208066, 170520 207645, 171417 206535, 172361 205459, 172745 205213, 172987 205175, 173185 205281, 179737 212006, 188153 220600, 190355 222113, 190381 222147, 190050 222523, 190214 222609, 190436 222560, 190465 222537, 190479 222511, 190489 222283, 190381 222147, 198209 213268, 198200 213262, 196662 211512, 190574 206877, 179376 198294, 179245 198112, 179257 197864, 179463 197445, 180430 196364, 181439 195323, 181839 195091, 182085 195062, 182278 195177, 190571 204578, 196662 211512, 198514 212922, 198209 213268, 198383 213376, 198607 213338, 198612 213334, 198618 213325, 198642 213098, 198515 212922, 198514 212922, 199542 211756, 208223 203075, 208161 203034, 206545 201031, 198957 194658, 190051 187210, 189931 187019, 189953 186774, 190168 186376, 191173 185351, 192223 184367, 192627 184158, 192872 184143, 193059 184268, 198884 191535, 206545 201031, 208517 202687, 208554 202744, 208223 203075, 208342 203154, 208569 203123, 208591 203108, 208601 203094, 208634 202869, 208554 202744, 211757 199541, 217276 194676, 217200 194618, 216010 192963, 210203 187593, 199854 177952, 199743 177756, 199781 177509, 200028 177111, 201121 176106, 202243 175150, 202673 174949, 202923 174941, 203104 175075, 210495 185296, 216010 192963, 217506 194347, 217554 194430, 217276 194676, 217371 194749, 217573 194735, 217614 194534, 217554 194430, 224716 188117, 228136 185464, 228077 185417, 226689 183302, 219725 176197, 211570 167926, 211469 167724, 211516 167481, 211711 167196, 212052 166868, 212886 166170, 214036 165282, 214463 165110, 214710 165117, 214884 165259, 219907 172969, 226689 183302, 228460 185109, 228498 185183, 228136 185464, 228247 185553, 228476 185543, 228494 185533, 228502 185524, 228559 185302, 228498 185183, 237707 178040, 236754 176411, 231603 170629, 222020 159805, 221928 159600, 221990 159357, 222274 158986, 223453 158094, 224660 157251, 225103 157096, 225353 157113, 225520 157263, 231776 167891, 236754 176411, 238002 177811, 237707 178040, 237709 178044, 237867 178190, 238051 178195, 238103 178019, 238013 177823, 238002 177811, 238365 177529, 249738 169801, 249694 169758, 248522 167512, 242603 160128, 235005 150718, 234924 150507, 234994 150270, 235291 149916, 236486 149098, 237721 148326, 238159 148199, 238405 148230, 238564 148389, 242573 156118, 248522 167512, 250106 169489, 250125 169538, 249738 169801, 249849 169910, 250077 169924, 250097 169916, 250106 169907, 250185 169691, 250125 169538, 252654 167819, 259754 163620, 259687 163546, 258826 161681, 254503 155790, 245815 143889, 245743 143677, 245827 143441, 246149 143096, 247411 142320, 248698 141596, 249156 141482, 249404 141522, 249557 141688, 254626 152577, 258826 161681, 260042 163337, 260074 163431, 259754 163620, 259832 163707, 260034 163731, 260111 163542, 260074 163431, 267523 159025, 272674 156400, 272621 156336, 271652 153940, 266530 146086, 259873 135947, 259813 135731, 259904 135502, 260226 135183, 261484 134489, 262773 133849, 263219 133765, 263459 133820, 263601 133994, 266875 142132, 271652 153940, 273063 156104, 273087 156190, 272674 156400, 272759 156503, 272983 156541, 273004 156535, 273024 156519, 273122 156312, 273087 156190, 282916 151181, 283179 151067, 282417 148889, 278779 142763, 271340 130171, 271288 129953, 271391 129728, 271736 129419, 273041 128780, 274364 128196, 274826 128130, 275066 128195, 275202 128375, 279202 139697, 282417 148889, 283602 150884, 283179 151067, 283191 151101, 283320 151276, 283541 151325, 283549 151323, 283559 151316, 283665 151115, 283614 150904, 283602 150884, 296761 145190, 296753 145178, 295994 142611, 291711 134417, 286046 123649, 286006 123428, 286118 123209, 286473 122920, 287783 122356, 289117 121845, 289573 121805, 289806 121884, 289931 122070, 292412 130503, 295994 142611, 297233 144982, 297234 144986, 296761 145190, 296874 145358, 297093 145418, 297126 145412, 297156 145392, 297273 145196, 297234 144986, 298770 144321, 307837 141057, 307792 140980, 307198 138557, 304205 132183, 298047 118993, 298016 118771, 298138 118558, 298506 118286, 299851 117780, 301212 117332, 301672 117313, 301901 117402, 302017 117594, 304917 129257, 307198 138557, 308258 140815, 308270 140901, 307837 141057, 307902 141167, 308117 141237, 308141 141234, 308164 141220, 308289 141030, 308270 140901, 315024 138469, 321910 136469, 321869 136393, 321368 133799, 317890 125229, 313274 113937, 313257 113712, 313390 113505, 313772 113251, 315138 112814, 316525 112431, 316980 112435, 317204 112536, 317312 112734, 318961 121340, 321368 133799, 322361 136246, 322368 136336, 321910 136469, 321972 136584, 322185 136664, 322219 136661, 322245 136647, 322379 136462, 322368 136336, 331614 133650, 333259 133282, 333257 133278, 332896 130791, 330530 124151, 325686 110452, 325675 110229, 325818 110029, 326209 109794, 327591 109421, 328987 109107, 329439 109134, 329658 109245, 329755 109447, 331526 121355, 332896 130791, 333740 133160, 333741 133175, 333259 133282, 333349 133475, 333557 133566, 333582 133565, 333607 133553, 333748 133377, 333741 133175, 347734 130046, 347503 127600, 344824 118604, 341306 106897, 341311 106671, 341466 106477, 341876 106260, 343293 105955, 344366 105767, 344840 105716, 345185 105750, 345400 105872, 345488 106078, 346291 114729, 347503 127600, 348201 129942, 347734 130046, 347736 130069, 347821 130268, 348025 130368, 348044 130368, 348056 130363, 348208 130193, 348211 129976, 348201 129942, 348472 129881, 359381 128153, 359351 128069, 359237 125678, 357496 118736, 353996 104623, 354008 104400, 354169 104214, 354580 104019, 355998 103779, 357066 103645, 357533 103618, 357872 103671, 358081 103802, 358158 104013, 358780 116071, 359237 125678, 359820 128002, 359816 128084, 359381 128153, 359424 128274, 359623 128384, 359636 128385, 359649 128380, 359809 128218, 359816 128084, 365536 127178, 374143 126365, 374114 126272, 374121 124079, 372264 114602, 369878 102593, 369905 102368, 370082 102191, 370409 102058, 370885 101971, 371988 101844, 373467 101729, 373927 101818, 374133 101959, 374202 102174, 374161 110738, 374121 124079, 374542 126230, 374531 126328, 374143 126365, 374179 126477, 374361 126589, 374518 126445, 374531 126328, 382734 125553, 385807 125456, 385794 125406, 385911 123101, 384838 115989, 382712 101552, 382747 101331, 382928 101161, 383359 101007, 384809 100904, 386259 100864, 386705 100977, 386901 101128, 386959 101345, 386401 113422, 385911 123101, 386255 125384, 386246 125443, 385807 125456, 385848 125617, 386036 125745, 386044 125743, 386221 125598, 386246 125443, 400000 125010, 400451 125024, 400449 125042, 400494 125253, 400647 125369, 400798 125253, 400841 125042, 400840 125036, 400451 125024, 400645 123031, 399653 112841, 398479 101064, 398526 100845, 398719 100685, 399055 100584, 399537 100543, 400642 100522, 402121 100550), (400683 674518, 401566 674424, 400639 674448, 399705 674415, 400683 674518), (411964 674186, 412596 674222, 412700 674223, 413216 674142, 411964 674186), (385923 674150, 386021 674161, 386546 674132, 385306 674053, 385923 674150), (374375 673307, 374501 673311, 375300 673310, 374174 673229, 373423 673119, 374375 673307), (426913 673119, 425968 673179, 426948 673183, 427848 673003, 426913 673119), (438602 671730, 439015 671711, 439143 671700, 439816 671528, 438602 671730), (359520 671499, 359615 671519, 360134 671544, 358926 671349, 359520 671499), (348057 669539, 348198 669558, 348984 669638, 348060 669481, 347134 669268, 348057 669539), (453171 669240, 452237 669391, 453193 669296, 453289 669272, 454089 669036, 453171 669240), (464477 666755, 465078 666666, 465200 666643, 465668 666477, 464477 666755), (333467 666306, 333590 666344, 334294 666450, 333088 666173, 333467 666306), (322250 663254, 322383 663285, 323155 663441, 322252 663196, 321354 662898, 322250 663254), (478933 662843, 478020 663084, 478947 662898, 479062 662857, 479823 662553, 478933 662843), (489947 659275, 490539 659128, 490654 659094, 491118 658879, 489947 659275), (308037 658625, 308165 658678, 308854 658851, 307678 658459, 308037 658625), (297180 654514, 297294 654553, 297847 654720, 296527 654178, 297180 654514), (503960 653989, 503076 654315, 503975 654045, 504092 653989, 504816 653616, 503960 653989), (514755 649310, 515163 649167, 515251 649132, 515873 648766, 514755 649310), (283468 648526, 283592 648593, 284259 648827, 283128 648326, 283468 648526), (273077 643401, 273162 643439, 273914 643742, 273073 643331, 272254 642866, 273077 643401), (528020 642757, 527168 643166, 528034 642818, 528141 642754, 528832 642304, 528020 642757), (538301 637063, 538714 636876, 538775 636845, 539366 636409, 538301 637063), (259984 636105, 260087 636174, 260737 636470, 259649 635858, 259984 636105), (250162 630018, 250240 630062, 250971 630438, 250170 629946, 249394 629397, 250162 630018), (550875 629262, 550061 629753, 550909 629316, 550990 629256, 551647 628725, 550875 629262), (560206 622832, 560811 622488, 561205 622128, 560206 622832), (238150 621724, 238732 622056, 237724 621354, 238150 621724), (228540 614385, 228623 614444, 229331 614905, 228582 614337, 227863 613714, 228540 614385), (572392 613554, 571630 614122, 572453 613588, 572524 613523, 573108 612944, 572392 613554), (580945 606363, 581282 606123, 581379 606047, 581861 605520, 580945 606363), (217583 605123, 217634 605174, 218227 605599, 217280 604792, 217583 605123), (208632 596804, 208726 596885, 209366 597403, 208684 596770, 208033 596086, 208632 596804), (592198 595908, 591504 596543, 592266 595926, 592328 595858, 592848 595236, 592198 595908), (600050 587894, 600353 587626, 600455 587528, 600883 586968, 600050 587894), (198615 586523, 198674 586594, 199216 587074, 198355 586182, 198615 586523), (190522 577393, 190608 577484, 191188 578059, 190568 577360, 189984 576618, 190522 577393), (610225 576419, 609593 577121, 610279 576443, 610356 576340, 610809 575689, 610225 576419), (617282 567669, 617549 567381, 617637 567279, 618016 566674, 617282 567669), (181533 566183, 181600 566282, 182082 566800, 181317 565838, 181533 566183), (174363 556321, 174440 556420, 174964 557050, 174413 556293, 173901 555498, 174363 556321), (626290 555275, 625727 556037, 626344 555295, 626415 555178, 626802 554491, 626290 555275), (632472 545884, 632713 545569, 632784 545468, 633104 544827, 632472 545884), (166496 544297, 166556 544407, 166983 544964, 166315 543933, 166496 544297), (160321 533804, 160375 533890, 160846 534578, 160368 533768, 159936 532927, 160321 533804), (640241 532672, 639752 533487, 640297 532691, 640357 532566, 640676 531842, 640241 532672), (645477 522753, 645702 522397, 645750 522312, 646008 521632, 645477 522753), (153643 521069, 153692 521183, 154065 521774, 153493 520673, 153643 521069), (148515 510047, 148964 510848, 148564 509994, 148216 509114, 148515 510047), (651876 508997, 651539 509675, 652011 508830, 652055 508709, 652301 507948, 651876 508997), (656188 498486, 656382 498104, 656423 498012, 656610 497309, 656188 498486), (143092 496718, 143124 496821, 143477 497525, 143158 496767, 142930 496107, 143092 496718), (139124 485467, 139491 486291, 139182 485417, 138924 484519, 139124 485467), (661213 484201, 660894 485080, 661288 484192, 661477 483312, 661213 484201), (664534 473170, 664693 472759, 664724 472667, 664840 471952, 664534 473170), (134919 471329, 134941 471432, 135202 472107, 134851 470903, 134919 471329), (132149 460080, 132185 460207, 132435 460966, 132209 460057, 132036 459122, 132149 460080), (668029 459004, 667833 459719, 668134 458804, 668146 458725, 668247 457878, 668029 459004), (670361 447255, 670469 446858, 670498 446735, 670543 446041, 670361 447255), (129280 445399, 129291 445497, 129483 446197, 129253 444973, 129280 445399), (127601 433888, 127627 434031, 127795 434803, 127628 433664, 127575 432929, 127601 433888), (672473 432836, 672349 433566, 672552 432627, 672558 432529, 672583 431695, 672473 432836), (673657 420911, 673724 420512, 673740 420388, 673724 419686, 673657 420911), (126168 419016, 126170 419142, 126289 419847, 126178 418610, 126168 419016), (125603 407404, 125614 407542, 125706 408324, 125660 407389, 125667 406442, 125603 407404), (674371 406339, 674318 407097, 674426 406158, 674422 406034, 674370 405217, 674371 406339), (674394 394384, 674424 393966, 674427 393848, 674342 393146, 674394 394384), (125615 392458, 125604 392594, 125653 393304, 125662 392065, 125615 392458), (126170 380858, 126168 380982, 126185 381775, 126237 380644, 126326 379902, 126170 380858), (673683 379615, 673720 380557, 673741 379615, 673725 379490, 673592 378684, 673683 379615), (672569 367909, 672559 367471, 672552 367368, 672397 366671, 672569 367909), (127627 365971, 127602 366106, 127590 366611, 127755 365390, 127627 365971), (129291 354503, 129281 354595, 129239 355196, 129484 353786, 129291 354503), (670436 353262, 670561 354198, 670499 353266, 670471 353145, 670256 352350, 670436 353262), (668218 341916, 668141 341217, 667973 340715, 668218 341916), (132184 339798, 132150 339917, 132069 340626, 132314 339409, 132184 339798), (134939 328571, 134920 328664, 134788 329475, 135008 328561, 135290 327653, 134939 328571), (664664 327355, 664879 328282, 664727 327337, 664695 327244, 664392 326455, 664664 327355), (661394 316309, 661265 315754, 660989 315144, 661394 316309), (139126 314527, 139018 315049, 139413 313891, 139126 314527), (143123 303181, 143093 303277, 142873 304093, 143183 303205, 143553 302329, 143123 303181), (656373 302037, 656680 302939, 656425 301991, 656385 301902, 656014 301168, 656373 302037), (652176 291675, 652054 291286, 652012 291170, 651659 290549, 652176 291675), (148501 290001, 148293 290657, 148768 289506, 148501 290001), (153692 278816, 153645 278928, 153350 279697, 153740 278853, 154189 278022, 153692 278816), (645713 277747, 646101 278604, 645742 277666, 645274 276921, 645713 277747), (640593 267978, 640356 267432, 640296 267307, 640012 266897, 640593 267978), (160375 266110, 160323 266191, 160036 266852, 160620 265755, 160375 266110), (166559 255589, 166497 255703, 166129 256431, 166712 255441, 167127 254841, 166559 255589), (632748 254581, 633221 255398, 632784 254531, 632714 254432, 632234 253800, 632748 254581), (626607 245167, 626415 244822, 626343 244705, 625886 244160, 626607 245167), (174441 243579, 174366 243675, 174023 244291, 174700 243270, 174441 243579), (181603 233715, 181534 233817, 181096 234509, 181646 233751, 182244 233019, 181603 233715), (617603 232770, 618154 233539, 617636 232720, 617550 232619, 617016 232040, 617603 232770), (610693 224149, 610357 223661, 610280 223559, 609919 223204, 610693 224149), (190610 222514, 190521 222608, 190124 223184, 190900 222229, 190610 222514), (198678 213401, 198615 213477, 198106 214138, 198728 213433, 199395 212762, 198678 213401), (600417 212515, 601041 213232, 600455 212472, 600351 212372, 599762 211846, 600417 212515), (592602 204472, 592332 204146, 592264 204071, 591698 203618, 592602 204472), (208728 203113, 208635 203194, 208313 203581, 209207 202729, 208728 203113), (217640 194821, 217583 194878, 217003 195504, 217841 194722, 218421 194257, 217640 194821), (581347 194009, 582036 194664, 581376 193950, 581278 193874, 580629 193406, 581347 194009), (572841 186793, 572529 186482, 572455 186414, 571843 186019, 572841 186793), (228626 185554, 228540 185615, 228174 185980, 229158 185210, 228626 185554), (238097 178306, 237431 178906, 238166 178343, 238941 177819, 238097 178306), (560967 177707, 561536 178166, 560824 177525, 560747 177477, 560036 177066, 560967 177707), (551335 171024, 550992 170745, 550910 170684, 550270 170357, 551335 171024), (250247 169934, 250160 169984, 249595 170444, 250393 169901, 250864 169614, 250247 169934), (260087 163826, 259981 163897, 259335 164370, 260130 163874, 260966 163421, 260087 163826), (538763 163222, 539561 163729, 538787 163163, 538712 163125, 537938 162767, 538763 163222), (528657 157585, 528144 157248, 528041 157186, 527577 157000, 528657 157585), (273166 156559, 273079 156598, 272469 156998, 273554 156405, 273166 156559), (283593 151406, 283467 151474, 282784 151873, 283623 151456, 284498 151084, 283593 151406), (515425 151008, 516083 151354, 515252 150869, 515162 150833, 514376 150553, 515425 151008), (504456 146200, 504094 146012, 503977 145956, 503307 145757, 504456 146200), (297296 145446, 297179 145486, 296542 145818, 297691 145329, 297296 145446), (308165 141321, 308038 141374, 307322 141703, 308198 141370, 309099 141084, 308165 141321), (490637 140959, 491518 141301, 490654 140906, 490540 140873, 489746 140670, 490637 140959), (479437 137295, 479063 137144, 478949 137103, 478258 136966, 479437 137295), (322384 136713, 322247 136746, 321590 137012, 322781 136635, 322384 136713), (333587 133656, 333468 133693, 332720 133954, 333622 133707, 334544 133510, 333587 133656), (465368 133452, 466093 133668, 465206 133360, 465078 133336, 464272 133211, 465368 133452), (453692 130850, 453288 130729, 453197 130706, 452478 130635, 453692 130850), (348195 130442, 348057 130461, 347574 130606, 348788 130386, 348195 130442), (359597 128481, 358740 128697, 359659 128536, 360595 128430, 359597 128481), (439119 128356, 440049 128527, 439140 128299, 439018 128289, 438196 128246, 439119 128356), (426210 126823, 427460 126921, 426899 126819, 426210 126823), (374370 126692, 373874 126795, 375106 126694, 374495 126688, 374370 126692), (385118 125975, 386056 125902, 387007 125890, 386010 125837, 385118 125975), (412600 125778, 411756 125821, 412696 125841, 413644 125922, 412696 125777, 412600 125778), (400160 125539, 401369 125559, 400672 125482, 400160 125539)), ((673461 447259, 683344 447956, 694928 448746, 695135 448830, 695263 449040, 695321 449489, 695113 450910, 694842 452321, 694636 452729, 694447 452886, 694223 452894, 685239 450439, 673461 447259, 670891 447078, 670828 447053, 670901 446591, 670975 446588, 673461 447259)), ((128904 445360, 128977 445818, 128900 445849, 126322 446030, 117269 448474, 105570 451672, 105345 451662, 105155 451505, 104948 451093, 104681 449688, 104470 448265, 104528 447816, 104655 447605, 104864 447523, 113615 446924, 126322 446030, 128816 445357, 128904 445360)), ((675302 432972, 682946 433143, 697047 433503, 697262 433575, 697397 433783, 697478 434241, 697329 435684, 697125 437123, 696939 437543, 696757 437711, 696533 437731, 684298 435000, 675302 432972, 672967 432920, 673011 432459, 673021 432458, 675302 432972)), ((698467 420091, 698613 420288, 698715 420727, 698644 422158, 698512 423583, 698346 424009, 698173 424182, 697950 424213, 688697 422623, 676833 420617, 686667 420357, 698251 420030, 698467 420091)), ((110448 419045, 123071 419378, 113953 420919, 101962 422980, 101738 422949, 101565 422775, 101399 422350, 101268 420928, 101196 419493, 101297 419055, 101444 418857, 101660 418797, 110448 419045)), ((676833 420617, 674166 420687, 674125 420676, 674172 420176, 674204 420172, 676833 420617)), ((125711 418933, 125759 419445, 125745 419449, 123071 419378, 125707 418933, 125711 418933)), ((113126 406765, 122672 407470, 115691 408346, 101241 410127, 101021 410088, 100856 409905, 100712 409477, 100644 408036, 100639 406609, 100763 406160, 100919 405970, 101138 405918, 113126 406765)), ((699112 404728, 699268 404918, 699360 405248, 699390 405717, 699384 406795, 699318 408236, 699175 408662, 699010 408845, 698789 408885, 686401 407358, 677348 406223, 684822 405670, 698892 404678, 699112 404728)), ((125236 407174, 125250 407635, 125162 407654, 122672 407470, 125151 407159, 125236 407174)), ((677348 406223, 674868 406406, 674789 406388, 674804 405926, 674879 405913, 677348 406223)), ((699010 391155, 699175 391338, 699320 391769, 699384 393205, 699391 394642, 699268 395082, 699112 395272, 698893 395323, 689486 394628, 677491 393771, 687329 392552, 698788 391114, 699010 391155)), ((677491 393771, 674880 394094, 674804 394080, 674789 393602, 674867 393583, 677491 393771)), ((109936 390962, 122529 392523, 113304 393182, 101137 394083, 100919 394029, 100763 393839, 100640 393396, 100644 391964, 100711 390527, 100856 390095, 101021 389912, 101242 389871, 109936 390962)), ((125250 392355, 125235 392832, 125150 392848, 122529 392523, 125164 392335, 125250 392355)), ((113833 379017, 123231 380630, 116185 380828, 101661 381202, 101444 381142, 101297 380945, 101195 380503, 101268 379072, 101400 377646, 101565 377225, 101738 377051, 101961 377021, 113833 379017)), ((125758 380563, 125712 381055, 125709 381055, 123231 380630, 125744 380559, 125758 380563)), ((698173 375818, 698346 375991, 698511 376413, 698644 377841, 698716 379268, 698613 379711, 698467 379909, 698250 379969, 685809 379648, 676670 379392, 684012 378131, 697951 375788, 698173 375818)), ((676670 379392, 674202 379816, 674171 379812, 674126 379333, 674167 379322, 676670 379392)), ((696757 362289, 696939 362457, 697079 362773, 697177 363238, 697329 364316, 697440 365401, 697457 365877, 697397 366217, 697262 366424, 697048 366498, 687613 366709, 675426 367009, 673023 367547, 673012 367546, 672967 367070, 675426 367009, 685323 364795, 696532 362268, 696757 362289)), ((117229 351464, 126509 353997, 128898 354161, 128975 354191, 128906 354625, 128819 354628, 126509 353997, 119368 353508, 104865 352476, 104655 352395, 104528 352184, 104469 351731, 104681 350312, 104950 348904, 105155 348495, 105345 348338, 105569 348329, 117229 351464)), ((694447 347114, 694636 347271, 694840 347673, 695113 349090, 695322 350507, 695263 350960, 695135 351170, 694927 351253, 682527 352136, 673265 352771, 670972 353397, 670899 353394, 670829 352957, 670893 352933, 673265 352771, 680510 350791, 694224 347106, 694447 347114))) \ No newline at end of file diff --git a/stress_benchmark/resources/021.settings b/stress_benchmark/resources/021.settings index 8f09ee7382..43f5be7888 100644 --- a/stress_benchmark/resources/021.settings +++ b/stress_benchmark/resources/021.settings @@ -6,7 +6,6 @@ resolution=0 _plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=0.5 skin_preshrink=0.8 clean_between_layers=False -support_interface_skip_height=0.15 machine_feeder_wheel_diameter=10.0 retraction_hop_only_when_collides=True machine_steps_per_mm_y=50 @@ -44,6 +43,7 @@ cool_min_speed=4 cool_fan_enabled=True cool_fan_speed_max=100 wall_overhang_angle=90 +seam_overhang_angle=30 jerk_support_infill=30 wall_overhang_speed_factor=100 support_roof_line_width=0.4 diff --git a/stress_benchmark/resources/021.wkt b/stress_benchmark/resources/021.wkt index b50ff734a9..e4d5b34a8f 100644 --- a/stress_benchmark/resources/021.wkt +++ b/stress_benchmark/resources/021.wkt @@ -1 +1 @@ -MULTIPOLYGON (((177889 97484, 178963 98582, 180026 99763, 180835 100714, 181606 101663, 182372 102644, 183111 103632, 184234 105213, 185288 106773, 186272 108309, 187170 109769, 187982 111152, 188762 112509, 189519 113859, 190270 115255, 191531 117669, 192150 118889, 193358 121356, 194528 123828, 195895 126814, 197454 130332, 198899 133686, 200251 136869, 205262 148813, 205263 148813, 206731 152368, 207615 154523, 207611 154523, 208479 156683, 209333 158837, 210354 161475, 211358 164120, 211354 164120, 212161 166302, 212968 168534, 212969 168534, 213765 170805, 214523 173044, 215185 175067, 215833 177127, 215832 177127, 216457 179201, 216758 180244, 217210 181869, 217645 183572, 217732 183641, 216888 183642, 216039 180958, 216037 180958, 215295 178759, 214559 176689, 213973 175123, 213976 175123, 212957 172524, 212152 170566, 211007 167889, 210055 165766, 209043 163584, 209043 163583, 208353 162136, 207638 160682, 206851 159120, 206096 157649, 205317 156171, 204522 154697, 203658 153135, 202830 151673, 201988 150218, 201170 148839, 201171 148835, 200224 147282, 199355 145876, 198480 144500, 197601 143142, 197601 143137, 196662 141720, 195778 140404, 194894 139113, 193951 137760, 192173 135264, 190405 132851, 188670 130540, 186962 128316, 185285 126175, 184437 125114, 182004 122112, 180485 120275, 178163 117529, 176687 115821, 174583 113427, 174575 113418, 173219 111904, 171262 109756, 176562 96208)), ((165739 91654, 166407 91847, 167042 92164, 167767 92713, 168311 93433, 168630 94069, 168819 94740, 168884 95485, 168820 96215, 168627 96882, 168311 97517, 167760 98243, 167042 98786, 166404 99107, 165729 99295, 164988 99360, 164257 99296, 163595 99107, 162957 98786, 162232 98237, 161688 97517, 161368 96878, 161179 96203, 161115 95476, 161181 94728, 161372 94068, 161688 93433, 162239 92707, 162957 92164, 163595 91843, 164269 91655, 165012 91590)), ((152763 77567, 153342 77793, 153935 78164, 154617 78773, 155288 79483, 156009 80374, 156587 81138, 157597 82505, 157599 82503, 158151 83231, 158857 84102, 159658 85013, 154573 90610, 153522 88778, 152886 87503, 152885 87503, 152401 86408, 151993 85342, 151662 84348, 151392 83334, 151182 82322, 151036 81240, 151016 80221, 151077 79444, 151231 78706, 151548 78004, 151815 77707, 152185 77540))) \ No newline at end of file +MULTIPOLYGON (((177889 97484, 178963 98582, 180026 99763, 180835 100714, 181606 101663, 182372 102644, 183111 103632, 184234 105213, 185288 106773, 186272 108309, 187170 109769, 187982 111152, 188762 112509, 189519 113859, 190270 115255, 191531 117669, 192150 118889, 193358 121356, 194528 123828, 195895 126814, 197454 130332, 198899 133686, 200251 136869, 205262 148813, 205263 148813, 206731 152368, 207615 154523, 207611 154523, 208479 156683, 209333 158837, 210354 161475, 211358 164120, 211354 164120, 212161 166302, 212968 168534, 212969 168534, 213765 170805, 214523 173044, 215185 175067, 215833 177127, 215832 177127, 216457 179201, 216758 180244, 217210 181869, 217645 183572, 217732 183641, 216888 183642, 216039 180958, 216037 180958, 215295 178759, 214559 176689, 213973 175123, 213976 175123, 212957 172524, 212152 170566, 211007 167889, 210055 165766, 209043 163584, 209043 163583, 208353 162136, 207638 160682, 206851 159120, 206096 157649, 205317 156171, 204522 154697, 203658 153135, 202830 151673, 201988 150218, 201170 148839, 201171 148835, 200224 147282, 199355 145876, 198480 144500, 197601 143142, 197601 143137, 196662 141720, 195778 140404, 194894 139113, 193951 137760, 192173 135264, 190405 132851, 188670 130540, 186962 128316, 185285 126175, 184437 125114, 182004 122112, 180485 120275, 178163 117529, 176687 115821, 174583 113427, 174575 113418, 173219 111904, 171262 109756, 176562 96208, 177889 97484)), ((165739 91654, 166407 91847, 167042 92164, 167767 92713, 168311 93433, 168630 94069, 168819 94740, 168884 95485, 168820 96215, 168627 96882, 168311 97517, 167760 98243, 167042 98786, 166404 99107, 165729 99295, 164988 99360, 164257 99296, 163595 99107, 162957 98786, 162232 98237, 161688 97517, 161368 96878, 161179 96203, 161115 95476, 161181 94728, 161372 94068, 161688 93433, 162239 92707, 162957 92164, 163595 91843, 164269 91655, 165012 91590, 165739 91654)), ((152763 77567, 153342 77793, 153935 78164, 154617 78773, 155288 79483, 156009 80374, 156587 81138, 157597 82505, 157599 82503, 158151 83231, 158857 84102, 159658 85013, 154573 90610, 153522 88778, 152886 87503, 152885 87503, 152401 86408, 151993 85342, 151662 84348, 151392 83334, 151182 82322, 151036 81240, 151016 80221, 151077 79444, 151231 78706, 151548 78004, 151815 77707, 152185 77540, 152763 77567))) \ No newline at end of file diff --git a/stress_benchmark/resources/022.settings b/stress_benchmark/resources/022.settings index ca4041d688..b5bb69424e 100644 --- a/stress_benchmark/resources/022.settings +++ b/stress_benchmark/resources/022.settings @@ -6,7 +6,6 @@ resolution=0 _plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 skin_preshrink=0.8400000000000001 clean_between_layers=False -support_interface_skip_height=0.2 machine_feeder_wheel_diameter=10.0 retraction_hop_only_when_collides=False machine_steps_per_mm_y=50 @@ -44,6 +43,7 @@ cool_min_speed=10 cool_fan_enabled=True cool_fan_speed_max=100 wall_overhang_angle=90 +seam_overhang_angle=30 jerk_support_infill=20 wall_overhang_speed_factor=100 support_roof_line_width=0.42000000000000004 diff --git a/stress_benchmark/resources/022.wkt b/stress_benchmark/resources/022.wkt index 4cd6217887..f9f3e47242 100644 --- a/stress_benchmark/resources/022.wkt +++ b/stress_benchmark/resources/022.wkt @@ -1 +1 @@ -MULTIPOLYGON (((223054 229087, 222524 229740, 222407 229171, 221701 230007, 222284 230030, 221604 230859, 221479 230257, 220871 230953, 221511 230974, 220696 231938, 220665 231937, 220549 231313, 220010 231923, 220665 231937, 220671 231965, 219762 232944, 219645 232324, 219081 232926, 219757 232921, 219762 232943, 218884 233837, 218764 233256, 218097 233945, 218779 233946, 217999 234714, 217877 234167, 217102 234947, 217745 234969, 217087 235610, 216973 235081, 216113 235953, 216704 235970, 216175 236502, 216068 235979, 215147 236835, 215170 236969, 215001 236966, 214228 237691, 214286 237986, 214625 237995, 214343 238260, 214286 237988, 213895 237977, 213303 238510, 213404 239018, 212759 238999, 212382 239327, 212496 239895, 212327 240041, 211563 240015, 211458 240102, 211570 240664, 211068 241065, 210570 241045, 210531 240856, 210300 241041, 210570 241045, 210642 241387, 209716 242123, 209603 241587, 208998 242065, 209707 242099, 209712 242123, 208782 242827, 208677 242319, 207749 243014, 207768 243101, 208373 243125, 207845 243523, 207768 243107, 207633 243100, 206816 243716, 206895 244161, 206180 244134, 205865 244356, 205968 244904, 205544 245209, 204959 245188, 204926 245001, 204663 245174, 204958 245190, 205025 245571, 204076 246194, 203978 245615, 203051 246216, 203968 246263, 203127 246781, 203035 246248, 202084 246818, 202166 247296, 201358 247259, 201133 247388, 201227 247949, 200514 248359, 200244 248346, 200178 247931, 199502 248303, 200243 248346, 200268 248498, 199308 249000, 199224 248454, 198267 248976, 198333 249394, 197501 249348, 197305 249445, 197392 249981, 196426 250458, 195461 250894, 195391 250393, 195390 250393, 195388 250372, 195391 250393, 196426 250458, 196349 249930, 195388 250371, 195388 250372, 194426 250815, 194483 251284, 193977 251504, 193494 251475, 193459 251234, 192971 251446, 193494 251475, 193526 251716, 192555 252162, 192488 251639, 191526 252039, 191583 252560, 190560 252508, 190603 252908, 189625 253230, 189578 252736, 188601 253058, 188658 253609, 187643 253558, 187683 253951, 186704 254247, 186652 253670, 185679 253957, 185720 254508, 185174 254652, 184733 254630, 184700 254233, 183717 254483, 183724 254590, 184733 254630, 184744 254758, 183768 255048, 183724 254588, 183347 254574, 182744 254725, 182780 255300, 181798 255516, 181760 254942, 180782 255158, 180812 255687, 179820 255638, 179800 255361, 178818 255532, 178821 255599, 179820 255638, 179834 255873, 178847 256085, 178818 255601, 178507 255587, 177839 255711, 177863 256267, 176874 256416, 176853 255859, 175876 256000, 175890 256532, 174902 256643, 174887 256133, 173905 256245, 173918 256654, 174624 256681, 173923 256786, 173917 256655, 172921 256623, 172913 256366, 171936 256441, 171935 256592, 170952 256564, 170954 257045, 169967 257083, 169963 256589, 168973 256639, 168983 257161, 167995 257215, 167988 256685, 167004 256710, 167003 257250, 166015 257255, 166021 256730, 165030 256748, 165031 257230, 164046 257257, 164050 256732, 163062 256716, 163049 257250, 162062 257218, 162077 256685, 161093 256641, 161072 257166, 160083 257084, 160107 256603, 159119 256519, 159100 257049, 158115 256993, 158132 256444, 157154 256373, 157128 256910, 156141 256793, 156171 256313, 156741 256315, 156175 256255, 156171 256313, 155181 256301, 155189 256156, 154207 256014, 154190 256301, 153199 256303, 153192 256425, 152389 256308, 153200 256301, 153221 255871, 152244 255725, 152203 256280, 151218 256100, 151265 255548, 150282 255375, 150237 255890, 149261 255709, 149302 255176, 148854 255079, 148319 255082, 148329 254964, 147351 254748, 147319 255085, 146319 255089, 146381 254502, 145404 254261, 145346 254785, 144372 254529, 144431 253987, 144104 253893, 143439 253897, 143459 253701, 142490 253425, 142428 253903, 142177 253905, 141446 253652, 141522 253099, 140556 252780, 140492 253277, 139521 252949, 139548 252735, 140366 252719, 139588 252430, 139548 252735, 138923 252742, 138553 252610, 138622 252073, 137659 251723, 137587 252222, 136628 251789, 136662 251580, 137346 251574, 136708 251307, 136661 251583, 136207 251588, 135667 251339, 135751 250897, 134796 250454, 134711 250966, 133757 250544, 133772 250455, 134742 250429, 133849 250021, 133769 250455, 133579 250460, 132806 250085, 132904 249550, 132420 249310, 131918 249315, 131956 249103, 131011 248582, 130912 249110, 129964 248621, 130049 248195, 130297 248191, 130073 248069, 130047 248198, 129239 248217, 129026 248096, 129132 247540, 128359 247084, 128180 247084, 128199 246987, 127262 246420, 127158 246952, 126220 246376, 126295 245995, 125633 246000, 125292 245778, 125401 245215, 124917 244893, 124417 244896, 124479 244588, 123552 243952, 123443 244456, 122575 243816, 123328 243804, 122632 243299, 122527 243781, 121606 243126, 121693 242725, 121861 242722, 121719 242617, 121693 242725, 121089 242729, 120692 242431, 120816 241921, 120478 241652, 119803 241661, 119910 241209, 119120 240578, 118984 240576, 119005 240483, 118106 239735, 117977 240294, 117087 239537, 117852 239526, 117202 238976, 117073 239525, 116178 238741, 116242 238471, 115878 238468, 115283 237905, 115402 237415, 114771 237411, 114398 237046, 114516 236523, 114350 236370, 113685 236367, 113504 236199, 113628 235684, 113266 235322, 112623 235330, 112755 234804, 112245 234292, 111789 234296, 111878 233930, 111238 233262, 110947 233260, 111005 233015, 110265 232239, 110094 232233, 110132 232075, 109369 231225, 109235 231219, 109262 231105, 108487 230223, 108360 230220, 108387 230107, 108010 229671, 107625 229205, 107493 229201, 107394 229629, 107042 229185, 107492 229200, 107523 229077, 106810 228194, 106648 228190, 106685 228039, 106030 227210, 105773 227205, 105834 226959, 105277 226243, 104869 226246, 104972 225812, 104593 225282, 103968 225270, 104121 224617, 103918 224323, 103308 224296, 103135 224012, 103287 223413, 103246 223349, 102729 223331, 102322 222752, 102418 222366, 102623 222371, 102474 222142, 102418 222366, 102038 222357, 101487 221541, 101520 221400, 102022 221413, 101657 220821, 101514 221395, 101396 221392, 100855 220441, 101449 220461, 100933 219522, 100805 219513, 100842 219355, 100428 218579, 99884 218550, 100055 217857, 99961 217638, 99485 217627, 99135 216892, 99180 216704, 99541 216711, 99301 216165, 99194 216701, 99016 216693, 98780 216266, 98465 215845, 98484 215759, 98562 215761, 98152 215744, 98026 216129, 97882 216080, 97779 216640, 97413 216181, 97106 215714, 97257 215720, 97428 215258, 97221 214806, 97003 215512, 96793 214777, 97201 214798, 97170 214670, 96706 214533, 96668 214436, 96932 213969, 96910 213873, 96562 213850, 96441 213269, 96492 213083, 96437 212819, 96410 212836, 96423 212032, 96485 212035, 96525 211651, 96619 211116, 96467 211100, 96472 211037, 96645 210965, 96657 210893, 96745 210904, 96843 210466, 96690 210254, 96813 209864, 96580 209668, 96820 209378, 96632 209321, 96398 209095, 96226 208654, 95893 208938, 95791 207737, 96049 207594, 96036 207436, 95772 207246, 95733 206477, 95985 206370, 95972 205677, 95743 205520, 95738 205195, 95975 205118, 95991 204517, 96025 203943, 95934 203882, 96030 203856, 96091 202980, 96142 202598, 95962 202516, 96026 202250, 96198 202169, 96339 201341, 96196 201250, 96377 200577, 96580 200461, 96677 200173, 96496 200033, 96836 198854, 97300 197735, 97536 197982, 98005 196883, 97930 196800, 98075 196704, 98455 195785, 98209 195520, 98374 195102, 98872 194765, 98906 194684, 98646 194410, 99082 193297, 99340 193571, 99625 192824, 99130 193175, 99503 192179, 99766 192453, 100172 191313, 99990 191127, 99832 191241, 99902 191034, 99990 191127, 100321 190890, 100564 190170, 100289 189885, 100468 189335, 100927 188992, 100663 188729, 101013 187546, 101297 187823, 101510 187092, 101042 187442, 101352 186360, 101641 186637, 101963 185422, 101871 185333, 102025 185227, 102265 184195, 101963 183928, 102012 183713, 102468 183334, 102542 182974, 102240 182701, 102418 181876, 102706 181629, 102504 181456, 102725 180189, 103035 180448, 103164 179695, 102747 180061, 102931 178905, 103242 179161, 103423 177904, 103015 178283, 103101 177600, 103429 177863, 103582 176556, 103358 176384, 103225 176509, 103247 176298, 103361 176385, 103621 176147, 103706 175262, 103371 174977, 103384 174794, 103762 174464, 103800 173960, 103459 173672, 103491 173055, 103870 172679, 103877 172511, 103534 172282, 103557 171368, 103823 171088, 103573 170929, 103584 169697, 103672 169601, 103944 169765, 103943 169301, 103672 169601, 103587 169550, 103581 168146, 103942 168351, 103899 167663, 103854 167441, 103518 168066, 102769 166870, 102889 166617, 102695 166732, 101602 166004, 101665 165781, 101422 165595, 101257 165652, 100730 164879, 100916 164745, 100897 164342, 100674 164389, 100777 163345, 100998 163448, 101096 162937, 100856 162975, 101090 162020, 101299 162167, 101528 161494, 101288 161503, 101564 160911, 101754 161096, 102043 160825, 102232 160763, 102543 160753, 102580 160506, 103580 160723, 103546 160936, 104558 161186, 104604 160955, 105140 161101, 105944 159777, 106711 158555, 107439 158811, 108193 159015, 108943 159149, 109194 159155, 112364 154071, 112148 153690, 111575 152949, 111029 152386, 111343 151976, 111640 151737, 111753 151738, 112013 151903, 112460 152402, 113296 153503, 113732 153885, 114041 153972, 114219 153971, 114645 153869, 115159 153658, 115306 153676, 115143 154043, 114655 154720, 113399 156330, 112861 157042, 112221 157914, 111250 159273, 110586 160225, 109249 162203, 108216 163806, 108024 164017, 107822 164139, 107476 164102, 107391 164155, 107849 164509, 108244 164858, 108537 165180, 108781 165650, 108901 166135, 108935 166915, 108927 167587, 108884 168419, 108799 169436, 108681 170622, 108525 171953, 108337 173408, 108119 174968, 107869 176614, 107594 178327, 107292 180084, 106965 181875, 106609 183692, 106227 185538, 105807 187414, 105356 189314, 104858 191250, 104272 193412, 103748 195205, 103119 197228, 102439 199286, 101696 201386, 100866 203583, 100668 204073, 100858 204735, 101200 205736, 101508 206461, 102274 208182, 103431 210510, 104730 212895, 105372 213988, 106197 215362, 107334 217117, 107876 217935, 108847 219293, 109814 220620, 111426 222673, 112045 223439, 113363 224969, 114634 226408, 115969 227818, 117661 229565, 119608 231404, 121289 232928, 123421 234696, 125563 236376, 127341 237634, 129325 238955, 131318 240198, 133328 241328, 135361 242380, 137420 243364, 139417 244235, 141651 245089, 143828 245832, 146050 246500, 148319 247088, 150633 247598, 152978 248027, 155347 248379, 157760 248659, 160219 248852, 160317 249127, 160452 249136, 160524 248915, 160788 249035, 160528 248901, 160837 249012, 160875 248979, 160667 248874, 160913 248884, 161040 248953, 161210 249172, 161325 249177, 161342 248907, 162572 248968, 163432 248982, 163466 249029, 163467 249255, 163642 249188, 163757 248986, 164114 248992, 164213 249267, 164348 249266, 164381 249169, 164755 248999, 164743 249066, 164886 249005, 165076 249192, 165111 249278, 165234 249275, 165246 249004, 166942 248978, 167929 248948, 167925 248942, 169845 248848, 170773 248774, 170872 249038, 171007 249032, 171072 248921, 171469 248945, 171554 248986, 171742 248972, 171430 248725, 172262 248658, 174652 248380, 177021 248028, 179366 247599, 181680 247089, 183950 246500, 186171 245831, 188348 245088, 190582 244236, 192580 243364, 194638 242379, 196672 241328, 198682 240198, 200674 238954, 202659 237634, 204435 236378, 206578 234695, 208710 232929, 210392 231404, 212338 229566, 214032 227819, 215365 226409, 216636 224968, 217954 223440, 218574 222673, 220185 220621, 221152 219292, 222123 217936, 222666 217117, 223802 215363, 225269 212896, 226568 210511, 227725 208183, 228492 206461, 228805 205724, 229141 204734, 229325 204062, 229112 203531, 228305 201387, 227562 199287, 226882 197229, 226252 195205, 225672 193213, 225142 191250, 224645 189313, 224194 187413, 223769 185517, 223391 183692, 223035 181875, 222708 180084, 222406 178327, 222132 176613, 221882 174967, 221663 173408, 221475 171953, 221320 170621, 221201 169436, 221116 168419, 221073 167587, 221064 166916, 221099 166115, 221325 165395, 221515 165098, 221995 164633, 222607 164154, 222524 164101, 222347 164146, 222102 164109, 221832 163877, 220736 162180, 219721 160669, 218773 159306, 217469 157488, 216568 156286, 215243 154586, 214837 154010, 214695 153677, 214841 153658, 215354 153870, 215780 153972, 215958 153973, 216267 153886, 216702 153505, 217541 152403, 217905 151981, 218125 151791, 218298 151729, 218550 151834, 218972 152394, 218427 152956, 217861 153689, 217664 154002, 217656 154087, 220824 159170, 221605 159073, 222568 158812, 223281 158561, 224092 159835, 224860 161102, 225397 160956, 225441 161185, 226452 160937, 226419 160720, 227421 160507, 227463 160753, 227770 160765, 227956 160827, 228234 161085, 228436 160911, 228711 161502, 228474 161481, 228698 162163, 228910 162020, 229143 162974, 228901 162931, 228998 163446, 229223 163345, 229325 164388, 229101 164338, 229097 164676, 229270 164879, 228744 165651, 228601 165572, 228334 165781, 228399 166003, 227315 166725, 227113 166616, 227231 166867, 226778 167614, 226482 168066, 226164 167394, 226100 167663, 226057 168350, 226419 168146, 226416 169550, 226330 169601, 226054 169296, 226052 169769, 226330 169601, 226419 169697, 226428 170928, 226177 171087, 226071 170975, 226071 171159, 226176 171087, 226444 171366, 226470 172277, 226119 172513, 226129 172683, 226506 173057, 226540 173676, 226201 173961, 226236 174462, 226616 174793, 226630 174976, 226297 175263, 226377 176148, 226640 176385, 226419 176557, 226573 177861, 226898 177600, 226983 178278, 226577 177903, 226760 179162, 227068 178904, 227260 180067, 226836 179695, 226964 180448, 227280 180181, 227503 181450, 227295 181632, 227591 181881, 227763 182701, 227459 182976, 227538 183339, 227987 183712, 228037 183929, 227737 184195, 227977 185230, 228130 185335, 228039 185423, 228361 186636, 228648 186360, 228957 187441, 228487 187088, 228703 187823, 228987 187546, 229337 188729, 229068 188992, 229531 189334, 229712 189885, 229434 190171, 229681 190892, 230006 191130, 229830 191315, 230235 192450, 230498 192178, 230869 193174, 230384 192831, 230658 193570, 230918 193297, 231354 194412, 231094 194685, 231127 194764, 231628 195101, 231795 195520, 231544 195786, 231919 196698, 232072 196800, 231997 196882, 232457 197959, 232701 197735, 233159 198843, 232720 198599, 232919 199071, 233158 198844, 233505 200032, 233336 200201, 233429 200509, 233622 200576, 233805 201249, 233658 201390, 233817 202225, 233973 202249, 234039 202515, 233885 202645, 233972 203850, 234066 203882, 233976 203931, 234025 205091, 234263 205192, 234258 205519, 234026 205646, 234014 206342, 234267 206477, 234228 207246, 233962 207409, 233954 207575, 234210 207738, 234106 208934, 233764 208696, 233601 209095, 233367 209320, 233186 209385, 233420 209668, 233184 209864, 233309 210253, 233156 210479, 233250 210887, 233344 210893, 233443 211476, 233536 211477, 233521 212357, 233370 212368, 233594 212669, 233472 213261, 233489 213261, 233457 213861, 233202 213413, 233068 213961, 233184 214172, 233380 214171, 233397 214261, 233120 215082, 232654 215100, 232582 215242, 232797 215861, 232544 215942, 232547 216009, 232331 216007, 231974 216129, 231935 216004, 231738 216000, 231714 215653, 231375 215189, 231129 215247, 231095 215174, 231079 215205, 231243 215816, 231194 215953, 230783 215959, 230390 216860, 230849 216861, 230456 217747, 230312 217046, 229981 217772, 230446 217765, 230029 218676, 229520 218685, 229467 218785, 229612 219546, 229589 219597, 229022 219602, 228598 220374, 228624 220521, 228530 220522, 227959 221449, 228567 221452, 227952 222388, 227844 222386, 227731 221810, 227374 222377, 227844 222386, 227869 222507, 227293 223320, 226887 223317, 226969 223853, 226731 224240, 226136 224253, 225934 224540, 226038 225190, 225468 225201, 225024 225818, 225085 226166, 224779 226163, 224155 226979, 224184 227129, 224682 227128, 224295 227618, 224184 227131, 224035 227130, 223267 228100, 223281 228083, 223285 228100, 223897 228114, 223417 228675, 223285 228100, 223267 228100, 222503 229061) (187115 253536, 187643 253558, 187624 253377) (161972 249118, 161921 249199, 162466 249235, 162387 249108, 162180 249037) (172363 248922, 172895 248862, 172761 248753, 172277 248689) (126296 245995, 126596 245989, 126332 245817) (116241 238469, 116647 238468, 116312 238162) (98873 215243, 98631 215190, 98585 215254, 98616 215762, 99138 215774, 98905 215174) (96838 198852, 97073 199095, 97269 198626) (103825 171087, 103929 171159, 103932 170973)), ((172922 256624, 172930 256904, 171945 256988, 171936 256589)), ((155156 256647, 154175 256540, 154189 256305, 155181 256301)), ((148279 255530, 147296 255319, 147318 255087, 148319 255080)), ((143397 254273, 142421 253987, 142430 253907, 143438 253898)), ((131862 249594, 131341 249333, 131918 249315)), ((128084 247533, 127388 247098, 128178 247086)), ((124361 245142, 124027 244899, 124415 244898)), ((118881 241017, 118341 240593, 118983 240577)), ((215675 236979, 215255 237377, 215171 236970)), ((110947 233260, 110867 233587, 110540 233256)), ((110093 232234, 109990 232676, 109574 232230)), ((109233 231221, 109118 231716, 108687 231215)), ((108359 230221, 108255 230683, 107853 230200)), ((106534 228615, 106170 228194, 106647 228191)), ((105676 227579, 105383 227208, 105772 227206)), ((225153 226495, 225085 226166, 225417 226154)), ((228756 221149, 228624 220521, 229108 220519)), ((100804 219516, 100665 220081, 100355 219495)), ((231722 216010, 231711 216197, 231935 216136, 231937 216518, 231711 216201, 231702 216430, 231465 216331, 231103 215960)), ((96506 209586, 96540 209659, 96317 209881, 95952 209042)), ((233683 209881, 233460 209659, 234048 209042)), ((97929 196799, 97607 196997, 97759 196622)), ((232390 196993, 232073 196799, 232241 196629)), ((230171 191246, 230008 191130, 230099 191035)), ((230008 191130, 230007 191131, 230006 191130, 230007 191129)), ((228434 185571, 228131 185334, 228326 185153)), ((101871 185333, 101566 185571, 101677 185155)), ((226775 176510, 226643 176385, 226753 176298)), ((226643 176385, 226641 176386, 226640 176385, 226642 176384)), ((164425 108417, 165337 108395, 165343 108049, 166264 108063, 166247 108437, 167158 108489, 167174 108142, 168097 108205, 168078 108521, 167444 108514, 168072 108573, 168077 108522, 168992 108522, 168980 108674, 169894 108789, 169919 108519, 168993 108522, 169009 108316, 169924 108459, 169919 108519, 170309 108516, 170838 108595, 170808 108954, 171715 109123, 171745 108798, 172664 108968, 172629 109303, 173537 109525, 173583 109190, 174494 109424, 174450 109737, 175407 109714, 175359 110000, 176263 110266, 176316 109945, 177228 110217, 177173 110546, 178076 110842, 178132 110521, 179042 110832, 179036 110862, 178240 110891, 178982 111153, 179036 110862, 179111 110858, 179938 111162, 179879 111465, 180777 111823, 180845 111514, 181706 111876, 181687 111963, 181214 112001, 181642 112185, 181687 111963, 181845 111945, 182557 112296, 182497 112575, 183273 112975, 183208 112907, 183118 112629, 183453 112122, 183622 112487, 183800 112271, 183852 111787, 183927 111742, 184126 111775, 184227 111735, 184228 111812, 184380 111881, 184975 111910, 185135 111952, 185128 111996, 185791 112231, 185661 112512, 185952 112631, 186021 112312, 186872 112726, 186864 112754, 187339 113036, 187458 113184, 187648 113309, 187556 113575, 187852 113958, 188118 114117, 187980 114231, 188223 114216, 188051 114479, 188252 115275, 188435 115247, 188662 116296, 188456 116325, 188675 117376, 188875 117347, 188974 117840, 188830 118122, 188893 118428, 189093 118397, 189319 119450, 189116 119479, 189301 120316, 189480 120515, 189546 120504, 189567 120610, 192261 123543, 191840 124136, 191249 125100, 191019 125664, 195094 130107, 195685 129913, 196315 129619, 196828 129348, 197398 129006, 198710 130389, 198824 130669, 198820 130801, 198694 131107, 198170 131754, 197418 132641, 196751 133481, 196589 133527, 196461 133490, 196120 133252, 194783 131890, 192877 129919, 190774 127716, 189133 125973, 186962 123606, 186504 123028, 186338 122683, 186298 122125, 185578 121644, 184998 121166, 184471 120601, 184020 119945, 183649 119231, 183374 118538, 182810 118420, 181931 118200, 181018 117935, 180070 117631, 177061 116582, 175907 116189, 174948 115874, 173870 115556, 172785 115275, 171685 115023, 170583 114810, 169473 114631, 168360 114490, 167241 114390, 166121 114328, 165002 114306, 163880 114327, 162760 114389, 161641 114489, 160528 114630, 159418 114809, 158316 115022, 157216 115274, 156131 115555, 155046 115876, 153989 116223, 152940 116581, 151711 117017, 149931 117630, 148983 117934, 148033 118209, 147191 118419, 146626 118538, 146351 119230, 145981 119944, 145530 120600, 145003 121165, 144423 121643, 143700 122123, 143686 122585, 143528 123008, 143038 123606, 140874 125967, 139227 127715, 135935 131149, 133880 133254, 133538 133491, 133397 133528, 133246 133481, 132583 132642, 131542 131401, 131199 130870, 131175 130668, 131262 130459, 131518 130139, 132607 129006, 133184 129349, 134172 129859, 134848 130099, 134925 130094, 138981 125674, 138812 125237, 138307 124330, 137747 123535, 140432 120607, 140453 120505, 140516 120515, 140701 120308, 140882 119480, 140682 119449, 140907 118397, 141103 118427, 141168 118121, 141025 117841, 141124 117348, 141327 117374, 141543 116327, 141339 116295, 141441 115793, 141565 115247, 141756 115277, 142006 114246, 141882 114117, 141951 114074, 141902 113961, 142120 113747, 142257 113430, 142501 113445, 142412 113208, 142630 113039, 143275 112655, 143459 112906, 144104 112607, 144050 112290, 144898 111986, 144889 111949, 145152 111860, 145722 111738, 145734 111827, 146072 111742, 146148 111787, 146237 112243, 146488 112245, 146401 112528, 146429 112595, 146636 112583, 146660 113002, 146732 112973, 146687 112641, 147239 112369, 147413 112412, 147452 112598, 147742 112461, 147413 112412, 147384 112303, 148212 111910, 148280 112216, 149127 111862, 149061 111547, 149431 111405, 149995 111462, 149949 111207, 150824 110878, 150877 111199, 151769 110890, 151720 110575, 152270 110387, 152626 110414, 152655 110599, 153136 110451, 152626 110414, 152604 110272, 153508 109999, 153553 110318, 154445 110057, 154404 109725, 155310 109472, 155348 109809, 156248 109576, 156224 109378, 155800 109349, 156211 109247, 156225 109376, 156911 109420, 157149 109362, 157122 109017, 158030 108841, 158059 109157, 158964 108994, 158938 108638, 159851 108481, 159873 108841, 160781 108689, 160763 108343, 161685 108377, 161692 108594, 162604 108508, 162601 108413, 163512 108446, 163500 108074, 164425 108045) (142508 113446, 142514 113446, 142551 113479, 142596 113441)), ((162601 108413, 161685 108377, 161680 108225, 162591 108162))) \ No newline at end of file +MULTIPOLYGON (((223054 229087, 222524 229740, 222407 229171, 221701 230007, 222284 230030, 221604 230859, 221479 230257, 220871 230953, 221511 230974, 220696 231938, 220665 231937, 220549 231313, 220010 231923, 220665 231937, 220671 231965, 219762 232944, 219645 232324, 219081 232926, 219757 232921, 219762 232943, 218884 233837, 218764 233256, 218097 233945, 218779 233946, 217999 234714, 217877 234167, 217102 234947, 217745 234969, 217087 235610, 216973 235081, 216113 235953, 216704 235970, 216175 236502, 216068 235979, 215147 236835, 215170 236969, 215001 236966, 214228 237691, 214286 237986, 214625 237995, 214343 238260, 214286 237988, 213895 237977, 213303 238510, 213404 239018, 212759 238999, 212382 239327, 212496 239895, 212327 240041, 211563 240015, 211458 240102, 211570 240664, 211068 241065, 210570 241045, 210531 240856, 210300 241041, 210570 241045, 210642 241387, 209716 242123, 209603 241587, 208998 242065, 209707 242099, 209712 242123, 208782 242827, 208677 242319, 207749 243014, 207768 243101, 208373 243125, 207845 243523, 207768 243107, 207633 243100, 206816 243716, 206895 244161, 206180 244134, 205865 244356, 205968 244904, 205544 245209, 204959 245188, 204926 245001, 204663 245174, 204958 245190, 205025 245571, 204076 246194, 203978 245615, 203051 246216, 203968 246263, 203127 246781, 203035 246248, 202084 246818, 202166 247296, 201358 247259, 201133 247388, 201227 247949, 200514 248359, 200244 248346, 200178 247931, 199502 248303, 200243 248346, 200268 248498, 199308 249000, 199224 248454, 198267 248976, 198333 249394, 197501 249348, 197305 249445, 197392 249981, 196426 250458, 195461 250894, 195391 250393, 195390 250393, 195388 250372, 195391 250393, 196426 250458, 196349 249930, 195388 250371, 195388 250372, 194426 250815, 194483 251284, 193977 251504, 193494 251475, 193459 251234, 192971 251446, 193494 251475, 193526 251716, 192555 252162, 192488 251639, 191526 252039, 191583 252560, 190560 252508, 190603 252908, 189625 253230, 189578 252736, 188601 253058, 188658 253609, 187643 253558, 187683 253951, 186704 254247, 186652 253670, 185679 253957, 185720 254508, 185174 254652, 184733 254630, 184700 254233, 183717 254483, 183724 254590, 184733 254630, 184744 254758, 183768 255048, 183724 254588, 183347 254574, 182744 254725, 182780 255300, 181798 255516, 181760 254942, 180782 255158, 180812 255687, 179820 255638, 179800 255361, 178818 255532, 178821 255599, 179820 255638, 179834 255873, 178847 256085, 178818 255601, 178507 255587, 177839 255711, 177863 256267, 176874 256416, 176853 255859, 175876 256000, 175890 256532, 174902 256643, 174887 256133, 173905 256245, 173918 256654, 174624 256681, 173923 256786, 173917 256655, 172921 256623, 172913 256366, 171936 256441, 171935 256592, 170952 256564, 170954 257045, 169967 257083, 169963 256589, 168973 256639, 168983 257161, 167995 257215, 167988 256685, 167004 256710, 167003 257250, 166015 257255, 166021 256730, 165030 256748, 165031 257230, 164046 257257, 164050 256732, 163062 256716, 163049 257250, 162062 257218, 162077 256685, 161093 256641, 161072 257166, 160083 257084, 160107 256603, 159119 256519, 159100 257049, 158115 256993, 158132 256444, 157154 256373, 157128 256910, 156141 256793, 156171 256313, 156741 256315, 156175 256255, 156171 256313, 155181 256301, 155189 256156, 154207 256014, 154190 256301, 153199 256303, 153192 256425, 152389 256308, 153200 256301, 153221 255871, 152244 255725, 152203 256280, 151218 256100, 151265 255548, 150282 255375, 150237 255890, 149261 255709, 149302 255176, 148854 255079, 148319 255082, 148329 254964, 147351 254748, 147319 255085, 146319 255089, 146381 254502, 145404 254261, 145346 254785, 144372 254529, 144431 253987, 144104 253893, 143439 253897, 143459 253701, 142490 253425, 142428 253903, 142177 253905, 141446 253652, 141522 253099, 140556 252780, 140492 253277, 139521 252949, 139548 252735, 140366 252719, 139588 252430, 139548 252735, 138923 252742, 138553 252610, 138622 252073, 137659 251723, 137587 252222, 136628 251789, 136662 251580, 137346 251574, 136708 251307, 136661 251583, 136207 251588, 135667 251339, 135751 250897, 134796 250454, 134711 250966, 133757 250544, 133772 250455, 134742 250429, 133849 250021, 133769 250455, 133579 250460, 132806 250085, 132904 249550, 132420 249310, 131918 249315, 131956 249103, 131011 248582, 130912 249110, 129964 248621, 130049 248195, 130297 248191, 130073 248069, 130047 248198, 129239 248217, 129026 248096, 129132 247540, 128359 247084, 128180 247084, 128199 246987, 127262 246420, 127158 246952, 126220 246376, 126295 245995, 125633 246000, 125292 245778, 125401 245215, 124917 244893, 124417 244896, 124479 244588, 123552 243952, 123443 244456, 122575 243816, 123328 243804, 122632 243299, 122527 243781, 121606 243126, 121693 242725, 121861 242722, 121719 242617, 121693 242725, 121089 242729, 120692 242431, 120816 241921, 120478 241652, 119803 241661, 119910 241209, 119120 240578, 118984 240576, 119005 240483, 118106 239735, 117977 240294, 117087 239537, 117852 239526, 117202 238976, 117073 239525, 116178 238741, 116242 238471, 115878 238468, 115283 237905, 115402 237415, 114771 237411, 114398 237046, 114516 236523, 114350 236370, 113685 236367, 113504 236199, 113628 235684, 113266 235322, 112623 235330, 112755 234804, 112245 234292, 111789 234296, 111878 233930, 111238 233262, 110947 233260, 111005 233015, 110265 232239, 110094 232233, 110132 232075, 109369 231225, 109235 231219, 109262 231105, 108487 230223, 108360 230220, 108387 230107, 108010 229671, 107625 229205, 107493 229201, 107394 229629, 107042 229185, 107492 229200, 107523 229077, 106810 228194, 106648 228190, 106685 228039, 106030 227210, 105773 227205, 105834 226959, 105277 226243, 104869 226246, 104972 225812, 104593 225282, 103968 225270, 104121 224617, 103918 224323, 103308 224296, 103135 224012, 103287 223413, 103246 223349, 102729 223331, 102322 222752, 102418 222366, 102623 222371, 102474 222142, 102418 222366, 102038 222357, 101487 221541, 101520 221400, 102022 221413, 101657 220821, 101514 221395, 101396 221392, 100855 220441, 101449 220461, 100933 219522, 100805 219513, 100842 219355, 100428 218579, 99884 218550, 100055 217857, 99961 217638, 99485 217627, 99135 216892, 99180 216704, 99541 216711, 99301 216165, 99194 216701, 99016 216693, 98780 216266, 98465 215845, 98484 215759, 98562 215761, 98152 215744, 98026 216129, 97882 216080, 97779 216640, 97413 216181, 97106 215714, 97257 215720, 97428 215258, 97221 214806, 97003 215512, 96793 214777, 97201 214798, 97170 214670, 96706 214533, 96668 214436, 96932 213969, 96910 213873, 96562 213850, 96441 213269, 96492 213083, 96437 212819, 96410 212836, 96423 212032, 96485 212035, 96525 211651, 96619 211116, 96467 211100, 96472 211037, 96645 210965, 96657 210893, 96745 210904, 96843 210466, 96690 210254, 96813 209864, 96580 209668, 96820 209378, 96632 209321, 96398 209095, 96226 208654, 95893 208938, 95791 207737, 96049 207594, 96036 207436, 95772 207246, 95733 206477, 95985 206370, 95972 205677, 95743 205520, 95738 205195, 95975 205118, 95991 204517, 96025 203943, 95934 203882, 96030 203856, 96091 202980, 96142 202598, 95962 202516, 96026 202250, 96198 202169, 96339 201341, 96196 201250, 96377 200577, 96580 200461, 96677 200173, 96496 200033, 96836 198854, 97300 197735, 97536 197982, 98005 196883, 97930 196800, 98075 196704, 98455 195785, 98209 195520, 98374 195102, 98872 194765, 98906 194684, 98646 194410, 99082 193297, 99340 193571, 99625 192824, 99130 193175, 99503 192179, 99766 192453, 100172 191313, 99990 191127, 99832 191241, 99902 191034, 99990 191127, 100321 190890, 100564 190170, 100289 189885, 100468 189335, 100927 188992, 100663 188729, 101013 187546, 101297 187823, 101510 187092, 101042 187442, 101352 186360, 101641 186637, 101963 185422, 101871 185333, 102025 185227, 102265 184195, 101963 183928, 102012 183713, 102468 183334, 102542 182974, 102240 182701, 102418 181876, 102706 181629, 102504 181456, 102725 180189, 103035 180448, 103164 179695, 102747 180061, 102931 178905, 103242 179161, 103423 177904, 103015 178283, 103101 177600, 103429 177863, 103582 176556, 103358 176384, 103225 176509, 103247 176298, 103361 176385, 103621 176147, 103706 175262, 103371 174977, 103384 174794, 103762 174464, 103800 173960, 103459 173672, 103491 173055, 103870 172679, 103877 172511, 103534 172282, 103557 171368, 103823 171088, 103573 170929, 103584 169697, 103672 169601, 103944 169765, 103943 169301, 103672 169601, 103587 169550, 103581 168146, 103942 168351, 103899 167663, 103854 167441, 103518 168066, 102769 166870, 102889 166617, 102695 166732, 101602 166004, 101665 165781, 101422 165595, 101257 165652, 100730 164879, 100916 164745, 100897 164342, 100674 164389, 100777 163345, 100998 163448, 101096 162937, 100856 162975, 101090 162020, 101299 162167, 101528 161494, 101288 161503, 101564 160911, 101754 161096, 102043 160825, 102232 160763, 102543 160753, 102580 160506, 103580 160723, 103546 160936, 104558 161186, 104604 160955, 105140 161101, 105944 159777, 106711 158555, 107439 158811, 108193 159015, 108943 159149, 109194 159155, 112364 154071, 112148 153690, 111575 152949, 111029 152386, 111343 151976, 111640 151737, 111753 151738, 112013 151903, 112460 152402, 113296 153503, 113732 153885, 114041 153972, 114219 153971, 114645 153869, 115159 153658, 115306 153676, 115143 154043, 114655 154720, 113399 156330, 112861 157042, 112221 157914, 111250 159273, 110586 160225, 109249 162203, 108216 163806, 108024 164017, 107822 164139, 107476 164102, 107391 164155, 107849 164509, 108244 164858, 108537 165180, 108781 165650, 108901 166135, 108935 166915, 108927 167587, 108884 168419, 108799 169436, 108681 170622, 108525 171953, 108337 173408, 108119 174968, 107869 176614, 107594 178327, 107292 180084, 106965 181875, 106609 183692, 106227 185538, 105807 187414, 105356 189314, 104858 191250, 104272 193412, 103748 195205, 103119 197228, 102439 199286, 101696 201386, 100866 203583, 100668 204073, 100858 204735, 101200 205736, 101508 206461, 102274 208182, 103431 210510, 104730 212895, 105372 213988, 106197 215362, 107334 217117, 107876 217935, 108847 219293, 109814 220620, 111426 222673, 112045 223439, 113363 224969, 114634 226408, 115969 227818, 117661 229565, 119608 231404, 121289 232928, 123421 234696, 125563 236376, 127341 237634, 129325 238955, 131318 240198, 133328 241328, 135361 242380, 137420 243364, 139417 244235, 141651 245089, 143828 245832, 146050 246500, 148319 247088, 150633 247598, 152978 248027, 155347 248379, 157760 248659, 160219 248852, 160317 249127, 160452 249136, 160524 248915, 160788 249035, 160528 248901, 160837 249012, 160875 248979, 160667 248874, 160913 248884, 161040 248953, 161210 249172, 161325 249177, 161342 248907, 162572 248968, 163432 248982, 163466 249029, 163467 249255, 163642 249188, 163757 248986, 164114 248992, 164213 249267, 164348 249266, 164381 249169, 164755 248999, 164743 249066, 164886 249005, 165076 249192, 165111 249278, 165234 249275, 165246 249004, 166942 248978, 167929 248948, 167925 248942, 169845 248848, 170773 248774, 170872 249038, 171007 249032, 171072 248921, 171469 248945, 171554 248986, 171742 248972, 171430 248725, 172262 248658, 174652 248380, 177021 248028, 179366 247599, 181680 247089, 183950 246500, 186171 245831, 188348 245088, 190582 244236, 192580 243364, 194638 242379, 196672 241328, 198682 240198, 200674 238954, 202659 237634, 204435 236378, 206578 234695, 208710 232929, 210392 231404, 212338 229566, 214032 227819, 215365 226409, 216636 224968, 217954 223440, 218574 222673, 220185 220621, 221152 219292, 222123 217936, 222666 217117, 223802 215363, 225269 212896, 226568 210511, 227725 208183, 228492 206461, 228805 205724, 229141 204734, 229325 204062, 229112 203531, 228305 201387, 227562 199287, 226882 197229, 226252 195205, 225672 193213, 225142 191250, 224645 189313, 224194 187413, 223769 185517, 223391 183692, 223035 181875, 222708 180084, 222406 178327, 222132 176613, 221882 174967, 221663 173408, 221475 171953, 221320 170621, 221201 169436, 221116 168419, 221073 167587, 221064 166916, 221099 166115, 221325 165395, 221515 165098, 221995 164633, 222607 164154, 222524 164101, 222347 164146, 222102 164109, 221832 163877, 220736 162180, 219721 160669, 218773 159306, 217469 157488, 216568 156286, 215243 154586, 214837 154010, 214695 153677, 214841 153658, 215354 153870, 215780 153972, 215958 153973, 216267 153886, 216702 153505, 217541 152403, 217905 151981, 218125 151791, 218298 151729, 218550 151834, 218972 152394, 218427 152956, 217861 153689, 217664 154002, 217656 154087, 220824 159170, 221605 159073, 222568 158812, 223281 158561, 224092 159835, 224860 161102, 225397 160956, 225441 161185, 226452 160937, 226419 160720, 227421 160507, 227463 160753, 227770 160765, 227956 160827, 228234 161085, 228436 160911, 228711 161502, 228474 161481, 228698 162163, 228910 162020, 229143 162974, 228901 162931, 228998 163446, 229223 163345, 229325 164388, 229101 164338, 229097 164676, 229270 164879, 228744 165651, 228601 165572, 228334 165781, 228399 166003, 227315 166725, 227113 166616, 227231 166867, 226778 167614, 226482 168066, 226164 167394, 226100 167663, 226057 168350, 226419 168146, 226416 169550, 226330 169601, 226054 169296, 226052 169769, 226330 169601, 226419 169697, 226428 170928, 226177 171087, 226071 170975, 226071 171159, 226176 171087, 226444 171366, 226470 172277, 226119 172513, 226129 172683, 226506 173057, 226540 173676, 226201 173961, 226236 174462, 226616 174793, 226630 174976, 226297 175263, 226377 176148, 226640 176385, 226419 176557, 226573 177861, 226898 177600, 226983 178278, 226577 177903, 226760 179162, 227068 178904, 227260 180067, 226836 179695, 226964 180448, 227280 180181, 227503 181450, 227295 181632, 227591 181881, 227763 182701, 227459 182976, 227538 183339, 227987 183712, 228037 183929, 227737 184195, 227977 185230, 228130 185335, 228039 185423, 228361 186636, 228648 186360, 228957 187441, 228487 187088, 228703 187823, 228987 187546, 229337 188729, 229068 188992, 229531 189334, 229712 189885, 229434 190171, 229681 190892, 230006 191130, 229830 191315, 230235 192450, 230498 192178, 230869 193174, 230384 192831, 230658 193570, 230918 193297, 231354 194412, 231094 194685, 231127 194764, 231628 195101, 231795 195520, 231544 195786, 231919 196698, 232072 196800, 231997 196882, 232457 197959, 232701 197735, 233159 198843, 232720 198599, 232919 199071, 233158 198844, 233505 200032, 233336 200201, 233429 200509, 233622 200576, 233805 201249, 233658 201390, 233817 202225, 233973 202249, 234039 202515, 233885 202645, 233972 203850, 234066 203882, 233976 203931, 234025 205091, 234263 205192, 234258 205519, 234026 205646, 234014 206342, 234267 206477, 234228 207246, 233962 207409, 233954 207575, 234210 207738, 234106 208934, 233764 208696, 233601 209095, 233367 209320, 233186 209385, 233420 209668, 233184 209864, 233309 210253, 233156 210479, 233250 210887, 233344 210893, 233443 211476, 233536 211477, 233521 212357, 233370 212368, 233594 212669, 233472 213261, 233489 213261, 233457 213861, 233202 213413, 233068 213961, 233184 214172, 233380 214171, 233397 214261, 233120 215082, 232654 215100, 232582 215242, 232797 215861, 232544 215942, 232547 216009, 232331 216007, 231974 216129, 231935 216004, 231738 216000, 231714 215653, 231375 215189, 231129 215247, 231095 215174, 231079 215205, 231243 215816, 231194 215953, 230783 215959, 230390 216860, 230849 216861, 230456 217747, 230312 217046, 229981 217772, 230446 217765, 230029 218676, 229520 218685, 229467 218785, 229612 219546, 229589 219597, 229022 219602, 228598 220374, 228624 220521, 228530 220522, 227959 221449, 228567 221452, 227952 222388, 227844 222386, 227731 221810, 227374 222377, 227844 222386, 227869 222507, 227293 223320, 226887 223317, 226969 223853, 226731 224240, 226136 224253, 225934 224540, 226038 225190, 225468 225201, 225024 225818, 225085 226166, 224779 226163, 224155 226979, 224184 227129, 224682 227128, 224295 227618, 224184 227131, 224035 227130, 223267 228100, 223281 228083, 223285 228100, 223897 228114, 223417 228675, 223285 228100, 223267 228100, 222503 229061, 223054 229087), (187115 253536, 187643 253558, 187624 253377, 187115 253536), (161972 249118, 161921 249199, 162466 249235, 162387 249108, 162180 249037, 161972 249118), (172363 248922, 172895 248862, 172761 248753, 172277 248689, 172363 248922), (126296 245995, 126596 245989, 126332 245817, 126296 245995), (116241 238469, 116647 238468, 116312 238162, 116241 238469), (98873 215243, 98631 215190, 98585 215254, 98616 215762, 99138 215774, 98905 215174, 98873 215243), (96838 198852, 97073 199095, 97269 198626, 96838 198852), (103825 171087, 103929 171159, 103932 170973, 103825 171087)), ((172922 256624, 172930 256904, 171945 256988, 171936 256589, 172922 256624)), ((155156 256647, 154175 256540, 154189 256305, 155181 256301, 155156 256647)), ((148279 255530, 147296 255319, 147318 255087, 148319 255080, 148279 255530)), ((143397 254273, 142421 253987, 142430 253907, 143438 253898, 143397 254273)), ((131862 249594, 131341 249333, 131918 249315, 131862 249594)), ((128084 247533, 127388 247098, 128178 247086, 128084 247533)), ((124361 245142, 124027 244899, 124415 244898, 124361 245142)), ((118881 241017, 118341 240593, 118983 240577, 118881 241017)), ((215675 236979, 215255 237377, 215171 236970, 215675 236979)), ((110947 233260, 110867 233587, 110540 233256, 110947 233260)), ((110093 232234, 109990 232676, 109574 232230, 110093 232234)), ((109233 231221, 109118 231716, 108687 231215, 109233 231221)), ((108359 230221, 108255 230683, 107853 230200, 108359 230221)), ((106534 228615, 106170 228194, 106647 228191, 106534 228615)), ((105676 227579, 105383 227208, 105772 227206, 105676 227579)), ((225153 226495, 225085 226166, 225417 226154, 225153 226495)), ((228756 221149, 228624 220521, 229108 220519, 228756 221149)), ((100804 219516, 100665 220081, 100355 219495, 100804 219516)), ((231722 216010, 231711 216197, 231935 216136, 231937 216518, 231711 216201, 231702 216430, 231465 216331, 231103 215960, 231722 216010)), ((96506 209586, 96540 209659, 96317 209881, 95952 209042, 96506 209586)), ((233683 209881, 233460 209659, 234048 209042, 233683 209881)), ((97929 196799, 97607 196997, 97759 196622, 97929 196799)), ((232390 196993, 232073 196799, 232241 196629, 232390 196993)), ((230171 191246, 230008 191130, 230099 191035, 230171 191246)), ((230008 191130, 230007 191131, 230006 191130, 230007 191129, 230008 191130)), ((228434 185571, 228131 185334, 228326 185153, 228434 185571)), ((101871 185333, 101566 185571, 101677 185155, 101871 185333)), ((226775 176510, 226643 176385, 226753 176298, 226775 176510)), ((226643 176385, 226641 176386, 226640 176385, 226642 176384, 226643 176385)), ((164425 108417, 165337 108395, 165343 108049, 166264 108063, 166247 108437, 167158 108489, 167174 108142, 168097 108205, 168078 108521, 167444 108514, 168072 108573, 168077 108522, 168992 108522, 168980 108674, 169894 108789, 169919 108519, 168993 108522, 169009 108316, 169924 108459, 169919 108519, 170309 108516, 170838 108595, 170808 108954, 171715 109123, 171745 108798, 172664 108968, 172629 109303, 173537 109525, 173583 109190, 174494 109424, 174450 109737, 175407 109714, 175359 110000, 176263 110266, 176316 109945, 177228 110217, 177173 110546, 178076 110842, 178132 110521, 179042 110832, 179036 110862, 178240 110891, 178982 111153, 179036 110862, 179111 110858, 179938 111162, 179879 111465, 180777 111823, 180845 111514, 181706 111876, 181687 111963, 181214 112001, 181642 112185, 181687 111963, 181845 111945, 182557 112296, 182497 112575, 183273 112975, 183208 112907, 183118 112629, 183453 112122, 183622 112487, 183800 112271, 183852 111787, 183927 111742, 184126 111775, 184227 111735, 184228 111812, 184380 111881, 184975 111910, 185135 111952, 185128 111996, 185791 112231, 185661 112512, 185952 112631, 186021 112312, 186872 112726, 186864 112754, 187339 113036, 187458 113184, 187648 113309, 187556 113575, 187852 113958, 188118 114117, 187980 114231, 188223 114216, 188051 114479, 188252 115275, 188435 115247, 188662 116296, 188456 116325, 188675 117376, 188875 117347, 188974 117840, 188830 118122, 188893 118428, 189093 118397, 189319 119450, 189116 119479, 189301 120316, 189480 120515, 189546 120504, 189567 120610, 192261 123543, 191840 124136, 191249 125100, 191019 125664, 195094 130107, 195685 129913, 196315 129619, 196828 129348, 197398 129006, 198710 130389, 198824 130669, 198820 130801, 198694 131107, 198170 131754, 197418 132641, 196751 133481, 196589 133527, 196461 133490, 196120 133252, 194783 131890, 192877 129919, 190774 127716, 189133 125973, 186962 123606, 186504 123028, 186338 122683, 186298 122125, 185578 121644, 184998 121166, 184471 120601, 184020 119945, 183649 119231, 183374 118538, 182810 118420, 181931 118200, 181018 117935, 180070 117631, 177061 116582, 175907 116189, 174948 115874, 173870 115556, 172785 115275, 171685 115023, 170583 114810, 169473 114631, 168360 114490, 167241 114390, 166121 114328, 165002 114306, 163880 114327, 162760 114389, 161641 114489, 160528 114630, 159418 114809, 158316 115022, 157216 115274, 156131 115555, 155046 115876, 153989 116223, 152940 116581, 151711 117017, 149931 117630, 148983 117934, 148033 118209, 147191 118419, 146626 118538, 146351 119230, 145981 119944, 145530 120600, 145003 121165, 144423 121643, 143700 122123, 143686 122585, 143528 123008, 143038 123606, 140874 125967, 139227 127715, 135935 131149, 133880 133254, 133538 133491, 133397 133528, 133246 133481, 132583 132642, 131542 131401, 131199 130870, 131175 130668, 131262 130459, 131518 130139, 132607 129006, 133184 129349, 134172 129859, 134848 130099, 134925 130094, 138981 125674, 138812 125237, 138307 124330, 137747 123535, 140432 120607, 140453 120505, 140516 120515, 140701 120308, 140882 119480, 140682 119449, 140907 118397, 141103 118427, 141168 118121, 141025 117841, 141124 117348, 141327 117374, 141543 116327, 141339 116295, 141441 115793, 141565 115247, 141756 115277, 142006 114246, 141882 114117, 141951 114074, 141902 113961, 142120 113747, 142257 113430, 142501 113445, 142412 113208, 142630 113039, 143275 112655, 143459 112906, 144104 112607, 144050 112290, 144898 111986, 144889 111949, 145152 111860, 145722 111738, 145734 111827, 146072 111742, 146148 111787, 146237 112243, 146488 112245, 146401 112528, 146429 112595, 146636 112583, 146660 113002, 146732 112973, 146687 112641, 147239 112369, 147413 112412, 147452 112598, 147742 112461, 147413 112412, 147384 112303, 148212 111910, 148280 112216, 149127 111862, 149061 111547, 149431 111405, 149995 111462, 149949 111207, 150824 110878, 150877 111199, 151769 110890, 151720 110575, 152270 110387, 152626 110414, 152655 110599, 153136 110451, 152626 110414, 152604 110272, 153508 109999, 153553 110318, 154445 110057, 154404 109725, 155310 109472, 155348 109809, 156248 109576, 156224 109378, 155800 109349, 156211 109247, 156225 109376, 156911 109420, 157149 109362, 157122 109017, 158030 108841, 158059 109157, 158964 108994, 158938 108638, 159851 108481, 159873 108841, 160781 108689, 160763 108343, 161685 108377, 161692 108594, 162604 108508, 162601 108413, 163512 108446, 163500 108074, 164425 108045, 164425 108417), (142508 113446, 142514 113446, 142551 113479, 142596 113441, 142508 113446)), ((162601 108413, 161685 108377, 161680 108225, 162591 108162, 162601 108413))) \ No newline at end of file diff --git a/stress_benchmark/resources/023.settings b/stress_benchmark/resources/023.settings index c630167843..ffdf69d2e5 100644 --- a/stress_benchmark/resources/023.settings +++ b/stress_benchmark/resources/023.settings @@ -6,7 +6,6 @@ resolution=0 _plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 skin_preshrink=0.8 clean_between_layers=False -support_interface_skip_height=0.2 machine_feeder_wheel_diameter=10.0 retraction_hop_only_when_collides=False machine_steps_per_mm_y=50 diff --git a/stress_benchmark/resources/023.wkt b/stress_benchmark/resources/023.wkt index 9d4f96a13a..78aa3c6a7c 100644 --- a/stress_benchmark/resources/023.wkt +++ b/stress_benchmark/resources/023.wkt @@ -1 +1 @@ -MULTIPOLYGON (((-30982 -26911, -30986 -25821, -30913 -25649, -39879 -25649, -40000 -25817, -40000 -26973, -31031 -26973)), ((39999 -25822, 39884 -25651, 31226 -25649, 31272 -25829, 31272 -26970, 39999 -26973))) \ No newline at end of file +MULTIPOLYGON (((-30982 -26911, -30986 -25821, -30913 -25649, -39879 -25649, -40000 -25817, -40000 -26973, -31031 -26973, -30982 -26911)), ((39999 -25822, 39884 -25651, 31226 -25649, 31272 -25829, 31272 -26970, 39999 -26973, 39999 -25822))) \ No newline at end of file diff --git a/stress_benchmark/resources/024.settings b/stress_benchmark/resources/024.settings index 4ccc228f0e..2513007774 100644 --- a/stress_benchmark/resources/024.settings +++ b/stress_benchmark/resources/024.settings @@ -6,7 +6,6 @@ resolution=0 _plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 skin_preshrink=0.8 clean_between_layers=False -support_interface_skip_height=0.1 machine_feeder_wheel_diameter=10.0 retraction_hop_only_when_collides=False machine_steps_per_mm_y=50 @@ -44,6 +43,7 @@ cool_min_speed=10 cool_fan_enabled=True cool_fan_speed_max=10.0 wall_overhang_angle=90 +seam_overhang_angle=30 jerk_support_infill=8 wall_overhang_speed_factor=100 support_roof_line_width=0.4 diff --git a/stress_benchmark/resources/024.wkt b/stress_benchmark/resources/024.wkt index cf3db88cb2..a18eca5fa8 100644 --- a/stress_benchmark/resources/024.wkt +++ b/stress_benchmark/resources/024.wkt @@ -1 +1 @@ -MULTIPOLYGON (((81072 131116, 81371 131193, 81650 131326, 81892 131510, 82374 131672, 82673 132840, 82303 133216, 82168 133495, 81980 133742, 81748 133949, 81480 134107, 81187 134210, 80887 134255, 80578 134239, 80271 134162, 79999 134032, 79751 133848, 79544 133619, 79384 133346, 79283 133054, 79242 132755, 79260 132439, 79336 132145, 79475 131859, 79663 131612, 79894 131405, 80162 131247, 80455 131144, 80763 131100)), ((114096 96925, 115636 97380, 115724 97450, 115177 97683, 114710 97750, 114173 97922, 115582 98296, 116444 98935, 116859 99261, 117571 99945, 118181 100504, 117864 100649, 117412 101033, 116916 101175, 115788 100975, 115288 101139, 115098 101140, 115857 101688, 116282 102379, 117040 104395, 117568 105419, 117973 106366, 117516 107162, 117544 107536, 117542 107937, 117826 108213, 118473 108780, 118808 108320, 117973 106366, 118626 105229, 119073 105472, 119319 105583, 119665 105889, 120358 106447, 121161 107499, 121706 108172, 122315 109016, 122908 111170, 122988 111292, 123107 111573, 123029 112085, 122790 113917, 122148 115021, 121816 115724, 121086 116503, 120942 116566, 120762 116665, 120456 116809, 120295 116930, 119655 117265, 119567 117365, 119420 117495, 118714 117832, 118180 118174, 117997 118389, 117898 118638, 117706 119034, 117548 119543, 117416 119602, 117235 119658, 117062 119782, 116899 119914, 116744 120441, 116340 121947, 115976 122682, 115875 122860, 115729 122982, 115053 123737, 113886 124588, 113714 124812, 112624 125195, 111829 125398, 111291 125195, 110535 124944, 109260 124294, 109859 121944, 109925 121722, 109938 121713, 111631 121691, 111827 121675, 111959 121392, 112189 120592, 111678 121223, 110799 121123, 110344 121427, 109938 121713, 109187 121723, 107625 121041, 106237 120641, 105005 119678, 104013 119061, 103406 117922, 102988 116903, 103118 116284, 103257 115865, 103345 115807, 103787 114730, 103723 114869, 103430 115342, 103257 115865, 103045 116005, 102597 116416, 102035 116674, 101807 116751, 100364 117430, 100226 116912, 100198 116770, 100229 113454, 101105 110156, 101252 109826, 101648 108756, 101982 108304, 102039 108244, 102404 107745, 102511 107616, 102489 107614, 102372 107385, 102412 107178, 103254 106261, 103533 105985, 103664 105839, 103843 105718, 104139 105490, 104484 105255, 104656 105159, 105418 104577, 105795 104619, 105904 104699, 105861 104722, 105653 104897, 105468 105114, 105184 105372, 104235 105979, 103797 106357, 103599 106609, 103580 106614, 102832 107273, 102786 107283, 102511 107616, 102785 107644, 102900 107586, 103134 107494, 103393 107340, 103966 107035, 104485 106726, 104928 106363, 105172 106124, 105562 105708, 106032 105170, 106013 104780, 105904 104699, 106156 104564, 106602 104404, 107068 104202, 107116 104196, 107629 103936, 108655 103789, 108994 103698, 111077 103478, 111601 103444, 111658 103426, 111656 102799, 112191 101516, 111919 101604, 111607 101636, 110793 101941, 110080 102408, 109739 102452, 109363 102303, 108821 102267, 109314 101119, 109544 100506, 109717 100145, 110141 99431, 111529 98330, 111066 98316, 110455 98420, 109835 98348, 111017 97388, 112392 96455) (111923 103342, 111658 103426, 111661 104229, 111821 105261, 111828 105448, 111915 105845, 112306 107480, 112688 107839, 112765 107948, 112843 107958, 112962 107661, 113364 107285, 113525 106684, 113599 106318, 113571 105967, 113570 105125, 113540 104713, 113537 104324, 113515 103988, 113512 103609, 113500 103435, 113037 103275)), ((118804 73402, 118999 73472, 119176 73557, 119359 73671, 119506 73784, 119992 74208, 120133 74297, 120255 74330, 120352 74295, 120453 74340, 120501 74337, 120881 74715, 121119 74923, 121333 75092, 121681 75329, 121866 75430, 122127 75536, 122268 75564, 122270 75586, 122447 75609, 122596 75582, 122825 75557, 123100 75625, 123321 75696, 123694 75891, 124499 76492, 124831 76695, 125146 76841, 125392 76752, 125668 76824, 126243 77185, 128189 78464, 128363 78608, 128768 78978, 129389 79590, 129887 80050, 130477 80571, 131237 81451, 131791 82055, 132055 82313, 132357 82578, 133034 83135, 133732 83923, 134290 84590, 134563 84954, 134602 85048, 134864 85300, 135017 85485, 135235 85726, 135518 86075, 135918 86605, 136327 87209, 136521 87541, 136623 87750, 136692 87946, 136726 88140, 136723 88312, 136691 88489, 136602 88756, 136405 89173, 136276 89407, 136076 89736, 135872 90034, 135634 90323, 135501 90440, 135365 90492, 135228 90487, 135031 90366, 134821 90180, 134553 89917, 134195 89539, 133586 88857, 131971 86961, 131157 86039, 130622 85450, 129603 84357, 127436 82072, 127399 82019, 127217 81846, 126954 81621, 126577 81349, 126521 81325, 126127 81087, 124165 79840, 123045 79163, 122576 78894, 121819 78441, 120299 77488, 120003 77316, 119657 77130, 119358 76990, 118699 76622, 117990 76207, 117380 75821, 116891 75470, 116716 75311, 116625 75176, 116608 75033, 116667 74875, 116730 74770, 116861 74603, 117011 74438, 117384 74082, 117583 73912, 117952 73632, 118239 73461, 118416 73392, 118600 73372))) \ No newline at end of file +MULTIPOLYGON (((81072 131116, 81371 131193, 81650 131326, 81892 131510, 82374 131672, 82673 132840, 82303 133216, 82168 133495, 81980 133742, 81748 133949, 81480 134107, 81187 134210, 80887 134255, 80578 134239, 80271 134162, 79999 134032, 79751 133848, 79544 133619, 79384 133346, 79283 133054, 79242 132755, 79260 132439, 79336 132145, 79475 131859, 79663 131612, 79894 131405, 80162 131247, 80455 131144, 80763 131100, 81072 131116)), ((114096 96925, 115636 97380, 115724 97450, 115177 97683, 114710 97750, 114173 97922, 115582 98296, 116444 98935, 116859 99261, 117571 99945, 118181 100504, 117864 100649, 117412 101033, 116916 101175, 115788 100975, 115288 101139, 115098 101140, 115857 101688, 116282 102379, 117040 104395, 117568 105419, 117973 106366, 117516 107162, 117544 107536, 117542 107937, 117826 108213, 118473 108780, 118808 108320, 117973 106366, 118626 105229, 119073 105472, 119319 105583, 119665 105889, 120358 106447, 121161 107499, 121706 108172, 122315 109016, 122908 111170, 122988 111292, 123107 111573, 123029 112085, 122790 113917, 122148 115021, 121816 115724, 121086 116503, 120942 116566, 120762 116665, 120456 116809, 120295 116930, 119655 117265, 119567 117365, 119420 117495, 118714 117832, 118180 118174, 117997 118389, 117898 118638, 117706 119034, 117548 119543, 117416 119602, 117235 119658, 117062 119782, 116899 119914, 116744 120441, 116340 121947, 115976 122682, 115875 122860, 115729 122982, 115053 123737, 113886 124588, 113714 124812, 112624 125195, 111829 125398, 111291 125195, 110535 124944, 109260 124294, 109859 121944, 109925 121722, 109938 121713, 111631 121691, 111827 121675, 111959 121392, 112189 120592, 111678 121223, 110799 121123, 110344 121427, 109938 121713, 109187 121723, 107625 121041, 106237 120641, 105005 119678, 104013 119061, 103406 117922, 102988 116903, 103118 116284, 103257 115865, 103345 115807, 103787 114730, 103723 114869, 103430 115342, 103257 115865, 103045 116005, 102597 116416, 102035 116674, 101807 116751, 100364 117430, 100226 116912, 100198 116770, 100229 113454, 101105 110156, 101252 109826, 101648 108756, 101982 108304, 102039 108244, 102404 107745, 102511 107616, 102489 107614, 102372 107385, 102412 107178, 103254 106261, 103533 105985, 103664 105839, 103843 105718, 104139 105490, 104484 105255, 104656 105159, 105418 104577, 105795 104619, 105904 104699, 105861 104722, 105653 104897, 105468 105114, 105184 105372, 104235 105979, 103797 106357, 103599 106609, 103580 106614, 102832 107273, 102786 107283, 102511 107616, 102785 107644, 102900 107586, 103134 107494, 103393 107340, 103966 107035, 104485 106726, 104928 106363, 105172 106124, 105562 105708, 106032 105170, 106013 104780, 105904 104699, 106156 104564, 106602 104404, 107068 104202, 107116 104196, 107629 103936, 108655 103789, 108994 103698, 111077 103478, 111601 103444, 111658 103426, 111656 102799, 112191 101516, 111919 101604, 111607 101636, 110793 101941, 110080 102408, 109739 102452, 109363 102303, 108821 102267, 109314 101119, 109544 100506, 109717 100145, 110141 99431, 111529 98330, 111066 98316, 110455 98420, 109835 98348, 111017 97388, 112392 96455, 114096 96925), (111923 103342, 111658 103426, 111661 104229, 111821 105261, 111828 105448, 111915 105845, 112306 107480, 112688 107839, 112765 107948, 112843 107958, 112962 107661, 113364 107285, 113525 106684, 113599 106318, 113571 105967, 113570 105125, 113540 104713, 113537 104324, 113515 103988, 113512 103609, 113500 103435, 113037 103275, 111923 103342)), ((118804 73402, 118999 73472, 119176 73557, 119359 73671, 119506 73784, 119992 74208, 120133 74297, 120255 74330, 120352 74295, 120453 74340, 120501 74337, 120881 74715, 121119 74923, 121333 75092, 121681 75329, 121866 75430, 122127 75536, 122268 75564, 122270 75586, 122447 75609, 122596 75582, 122825 75557, 123100 75625, 123321 75696, 123694 75891, 124499 76492, 124831 76695, 125146 76841, 125392 76752, 125668 76824, 126243 77185, 128189 78464, 128363 78608, 128768 78978, 129389 79590, 129887 80050, 130477 80571, 131237 81451, 131791 82055, 132055 82313, 132357 82578, 133034 83135, 133732 83923, 134290 84590, 134563 84954, 134602 85048, 134864 85300, 135017 85485, 135235 85726, 135518 86075, 135918 86605, 136327 87209, 136521 87541, 136623 87750, 136692 87946, 136726 88140, 136723 88312, 136691 88489, 136602 88756, 136405 89173, 136276 89407, 136076 89736, 135872 90034, 135634 90323, 135501 90440, 135365 90492, 135228 90487, 135031 90366, 134821 90180, 134553 89917, 134195 89539, 133586 88857, 131971 86961, 131157 86039, 130622 85450, 129603 84357, 127436 82072, 127399 82019, 127217 81846, 126954 81621, 126577 81349, 126521 81325, 126127 81087, 124165 79840, 123045 79163, 122576 78894, 121819 78441, 120299 77488, 120003 77316, 119657 77130, 119358 76990, 118699 76622, 117990 76207, 117380 75821, 116891 75470, 116716 75311, 116625 75176, 116608 75033, 116667 74875, 116730 74770, 116861 74603, 117011 74438, 117384 74082, 117583 73912, 117952 73632, 118239 73461, 118416 73392, 118600 73372, 118804 73402))) \ No newline at end of file diff --git a/stress_benchmark/resources/025.settings b/stress_benchmark/resources/025.settings index 70275e935e..73e57d5143 100644 --- a/stress_benchmark/resources/025.settings +++ b/stress_benchmark/resources/025.settings @@ -6,7 +6,6 @@ resolution=0 _plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 skin_preshrink=0.8 clean_between_layers=False -support_interface_skip_height=0.1 machine_feeder_wheel_diameter=10.0 retraction_hop_only_when_collides=False machine_steps_per_mm_y=50 @@ -44,6 +43,7 @@ cool_min_speed=10 cool_fan_enabled=True cool_fan_speed_max=100 wall_overhang_angle=90 +seam_overhang_angle=30 jerk_support_infill=20 wall_overhang_speed_factor=100 support_roof_line_width=0.4 diff --git a/stress_benchmark/resources/025.wkt b/stress_benchmark/resources/025.wkt index 949fde4520..e03c3ad1b7 100644 --- a/stress_benchmark/resources/025.wkt +++ b/stress_benchmark/resources/025.wkt @@ -1 +1 @@ -MULTIPOLYGON (((124092 135655, 124492 136222, 124546 136262, 125073 136985, 124357 137909, 123408 138621, 123181 138712, 122002 137845, 121894 137430, 121972 136898, 122185 136404, 122519 135979, 122950 135655, 123448 135450, 123698 135416)), ((124564 133406, 125497 133789, 126295 134396, 126902 135185, 127277 136104, 127396 137089, 127323 137572, 127621 137508, 128032 137495, 128382 137591, 128813 137487, 128878 137816, 129899 137925, 130378 138079, 130701 138296, 130940 138624, 131011 138881, 130947 139183, 130848 139392, 130343 139824, 129955 140017, 129458 140145, 128922 140297, 128768 140902, 128725 141158, 128494 141702, 128005 142404, 128045 142475, 128189 142448, 128504 142587, 128916 143032, 129285 143743, 129478 144286, 129665 144954, 129763 145484, 129831 146314, 129779 147332, 130514 147949, 131024 148350, 131272 148872, 131540 149349, 131341 149533, 130400 149904, 130438 150184, 130360 150557, 130097 150943, 129783 151157, 129171 151361, 128566 151392, 127989 151346, 127866 151309, 127799 151746, 127641 151943, 127185 152252, 126777 152415, 126312 152476, 126119 152392, 125505 151741, 124290 152430, 123664 152699, 123508 152798, 122773 153031, 122196 153235, 121692 153396, 121243 153672, 120675 154042, 120581 154090, 119907 154824, 119190 155503, 119077 155589, 118498 156123, 117512 156812, 117066 157032, 116729 157001, 116545 157040, 116274 156893, 113796 158483, 113015 158949, 112220 159375, 111061 159829, 110854 159879, 110383 160065, 109956 159900, 110025 159481, 110016 159217, 110662 158009, 110743 157931, 111602 156811, 111774 156569, 113070 154955, 111571 154623, 109718 154190, 107970 153742, 106926 153330, 106160 152862, 105696 152528, 105503 152015, 105679 151730, 105821 151368, 106599 150806, 107532 150374, 113086 148825, 111078 146659, 110355 145658, 110285 145314, 110316 144686, 110891 144378, 111670 144405, 112356 144519, 113428 144815, 115324 145372, 116325 145708, 119873 147094, 121314 147561, 121096 147878, 121766 147097, 122184 146707, 121869 146091, 121542 145321, 121391 144790, 121300 144508, 121156 143853, 121008 142837, 121009 142398, 120582 142023, 119924 142226, 119389 142290, 118939 142303, 118226 142120, 117924 141932, 117750 141703, 117709 141418, 117798 141017, 118034 140619, 118345 140298, 118808 139964, 118889 139787, 119133 139565, 119500 139378, 119979 139231, 120252 139184, 120095 138977, 119719 138058, 119601 137073, 119750 136088, 120153 135170, 120784 134383, 121601 133779, 122546 133401, 123557 133275) (122999 135152, 122504 135351, 122076 135667, 121745 136080, 121534 136561, 121456 137077, 121517 137593, 121713 138075, 122031 138490, 122449 138808, 122939 139008, 123467 139077, 123997 139010, 124484 138822, 124921 138495, 125252 138082, 125463 137601, 125541 137085, 125480 136569, 125284 136086, 124966 135672, 124547 135355, 124057 135154, 123530 135085)), ((87162 126364, 87660 126696, 88549 126437, 89223 126315, 89779 126352, 90296 126505, 90411 126652, 90440 126900, 90393 127180, 90306 127371, 90040 127518, 88788 127730, 87987 127942, 87394 128076, 86515 128432, 87127 128584, 87334 128684, 87284 128777, 86925 128942, 87540 128835, 88650 128521, 89816 128941, 90109 129103, 90062 129223, 90024 130246, 90328 131224, 90947 132060, 91817 132673, 92860 133007, 93966 133024, 94076 132992, 94607 132992, 94674 133085, 95198 134787, 95136 136562, 94952 137074, 93559 137465, 93568 137488, 92549 138115, 91860 138938, 91481 139906, 91443 140928, 91674 141670, 91528 141811, 90092 142802, 89254 142774, 88904 142800, 88324 143101, 88807 143193, 89503 143248, 90396 143250, 91958 143147, 92269 143236, 92481 143610, 92532 143848, 92453 144065, 92006 144328, 91355 144516, 90909 144559, 89849 144515, 89448 144960, 88679 145309, 88427 145362, 87716 145549, 86743 145623, 86119 145613, 85779 145557, 85202 145303, 84516 144845, 83951 144273, 83645 143875, 83363 143527, 82989 142910, 82915 142704, 82701 142469, 82339 141726, 81934 141500, 81484 141172, 81120 140756, 80958 140450, 80895 140146, 80981 139953, 81395 139940, 81955 139821, 82134 139746, 82142 139705, 82423 139557, 82902 139210, 83214 138917, 83574 138434, 83757 138117, 83960 137547, 84046 136586, 83916 135946, 83821 135688, 83394 135036, 83283 134849, 82830 134445, 82060 134001, 81418 133797, 81231 133769, 80908 133032, 80557 133041, 80049 133153, 80011 132965, 80048 132647, 80134 132350, 80609 131637, 81063 131208, 81238 130371, 81385 130078, 81606 129225, 81711 129075, 81796 128819, 81998 128355, 82436 127622, 82960 127059, 83458 126672, 83775 126536, 84395 126354, 85324 126229, 86333 126211) (83409 142480, 83831 142934, 84368 143244, 85173 143393, 85841 143434, 86228 143402, 85550 143335, 84975 143216, 84476 143048, 83934 142799, 83512 142483, 83332 142191) (84034 128717, 83396 128917, 82647 129258, 82205 129689, 81854 130315, 81888 130559, 82008 130196, 82336 129795, 82993 129268, 83774 128883, 84416 128653)), ((73311 125782, 73811 125844, 74406 125943, 75327 126220, 75968 126575, 76099 126631, 76514 127133, 77432 127146, 78124 127245, 78576 127414, 79072 127752, 79133 127844, 79096 128161, 78957 128439, 78811 128585, 78458 128630, 77334 128463, 75818 128357, 74930 128417, 75477 128761, 75651 128915, 75566 128985, 75088 129025, 75745 129123, 76895 129165, 77856 129913, 78097 130171, 78024 130259, 77672 131220, 77659 132245, 77988 133232, 78628 134086, 79515 134723, 80563 135081, 80678 135085, 81159 135241, 81193 135356, 81168 137134, 80558 138805, 80223 139237, 78803 139179, 78805 139204, 77634 139488, 76732 140055, 76073 140858, 75720 141818, 75711 142581, 75504 142682, 73866 143176, 73069 142887, 72785 142818, 72114 142933, 72562 143169, 73427 143513, 74129 143734, 75492 144070, 75768 144233, 75875 144733, 75845 144933, 75707 145096, 75308 145194, 74631 145219, 74067 145095, 73072 144740, 72522 145030, 71680 145116, 71517 145088, 70705 145040, 69630 144774, 69184 144612, 68856 144433, 68417 144039, 67914 143409, 67522 142629, 67211 141799, 67170 141489, 67012 140799, 66918 140581, 66789 139746, 66599 139541, 66165 138963, 65954 138470, 65896 138141, 65930 137820, 66113 137664, 66467 137767, 67037 137827, 67256 137810, 67272 137778, 67566 137728, 68112 137553, 68594 137309, 69005 137016, 69278 136771, 69680 136246, 70025 135406, 70100 134754, 70089 134479, 69895 133760, 69837 133513, 69509 132967, 68932 132328, 68385 131938, 68238 131865, 68161 131067, 67804 130961, 67296 130913, 67311 130706, 67438 130424, 67619 130158, 67926 129944, 68140 129734, 68619 129460, 68784 129391, 69341 128492, 69464 128415, 69536 128252, 69810 127907, 69965 127637, 70330 127232, 71110 126530, 71219 126408, 71922 126010, 72474 125811, 72825 125768) (67976 141379, 68375 141828, 69095 142206, 69753 142452, 69140 142160, 68792 141942, 68131 141398, 67884 141118, 67735 140877) (71688 127975, 70997 128074, 70519 128313, 70103 128690, 70588 128391, 71085 128205, 71548 128084, 72361 127972)), ((35087 134501, 35589 134697, 36025 135016, 36364 135435, 36587 135926, 36629 136174, 36403 136577, 35851 136996, 35813 137052, 35109 137604, 34160 136920, 33416 135997, 33316 135773, 34142 134564, 34553 134442)), ((19696 118736, 20061 118865, 20651 119623, 21115 120534, 22857 126037, 24952 123954, 25927 123197, 26269 123115, 26897 123124, 27225 123688, 27225 124467, 27135 125157, 26579 127426, 26387 128154, 26085 129165, 24824 132759, 24417 134221, 24075 134003, 24891 134654, 25291 135055, 25897 134720, 26654 134366, 27179 134197, 27458 134095, 27948 133965, 29103 133745, 29557 133731, 29917 133291, 29691 132641, 29609 132109, 29579 131660, 29738 130940, 29915 130632, 30138 130449, 30422 130399, 30826 130474, 31231 130696, 31562 130996, 31913 131447, 32092 131521, 32323 131758, 32522 132117, 32687 132592, 32742 132862, 32944 132698, 33849 132291, 34829 132138, 35820 132252, 36751 132623, 37559 133227, 38191 134022, 38602 134954, 38764 135959, 38667 136970, 38318 137916, 37739 138734, 36971 139369, 36066 139775, 35087 139928, 34601 139873, 34675 140168, 34702 140578, 34618 140932, 34737 141359, 34412 141436, 34336 142463, 34201 142944, 33987 143280, 33675 143524, 33421 143605, 33117 143551, 32905 143459, 32455 142969, 32249 142588, 32104 142096, 31933 141566, 31323 141434, 31066 141399, 30513 141187, 29796 140722, 29725 140766, 29757 140909, 29631 141228, 29200 141655, 28503 142049, 27966 142261, 27305 142471, 26778 142588, 25951 142684, 24931 142668, 24340 143424, 23958 143947, 23446 144214, 22978 144498, 22787 144306, 22453 143540, 22407 143374, 22105 143425, 21729 143361, 21335 143112, 21110 142805, 20884 142201, 20832 141597, 20858 141020, 20891 140895, 20452 140843, 20250 140692, 19925 140246, 19748 139846, 19670 139382, 19747 139186, 20376 138550, 19642 137353, 19355 136743, 19252 136591, 18992 135865, 18767 135295, 18589 134797, 18298 134358, 17909 133804, 17858 133711, 17100 133063, 16397 132370, 16306 132260, 15753 131701, 15057 130786, 14794 130301, 14814 129963, 14768 129781, 14906 129504, 14533 128976, 13230 127084, 12737 126319, 12283 125540, 11789 124397, 11733 124193, 11530 123728, 11680 123296, 12101 123349, 12367 123331, 13595 123935, 13675 124013, 14825 124833, 15072 124996, 16730 126234, 17010 124726, 17379 122858, 17768 121087, 18140 120037, 18581 119256, 18899 118781, 19405 118570) (34377 134071, 33902 134283, 33499 134616, 33196 135045, 33012 135542, 32962 136072, 33047 136600, 33252 137080, 33595 137504, 34018 137820, 34507 138015, 35024 138075, 35539 137995, 36015 137783, 36417 137451, 36720 137021, 36903 136524, 36954 135994, 36869 135467, 36652 134979, 36321 134562, 35897 134246, 35409 134052, 34891 133992)), ((170689 142892, 171410 143026, 171653 143115, 171637 143176, 171097 143439, 170547 143588, 169808 143507, 169405 143326, 168946 143358, 168597 143243, 168568 143118, 168662 142898, 168767 142818, 169351 142775, 169939 142673, 170044 142633)), ((160907 142110, 161562 142170, 161979 142473, 162850 142936, 162827 143032, 162483 143109, 161881 143141, 161141 142892, 160825 142626, 160402 142540, 160139 142358, 160136 142277, 160286 142050, 160431 142018)), ((174616 135985, 175060 136201, 175419 136522, 175670 136923, 175795 137380, 175785 137861, 175631 138348, 175259 138337, 174655 138500, 174600 138535, 173815 138759, 173280 137922, 173027 136952, 173036 136732, 174185 136024, 174275 135919)), ((170062 132671, 170453 132766, 170576 132850, 170532 132915, 169947 133171, 169368 133461, 169780 133339, 170541 133435, 171199 133757, 171442 133582, 171976 133419, 172324 133433, 172705 133612, 173125 134041, 173413 134612, 173940 134499, 174839 134531, 175692 134771, 176442 135203, 177038 135797, 177437 136514, 177614 137303, 177558 138113, 177270 138884, 176772 139569, 176094 140118, 175288 140494, 174405 140672, 174149 140661, 174042 140888, 173902 141429, 173579 141935, 173243 142191, 172891 142278, 172349 142228, 171950 142053, 171510 142396, 170759 142667, 170221 142624, 169834 142449, 169691 142311, 168850 141963, 169004 141574, 169745 140936, 170341 140054, 170667 139067, 170699 138046, 170436 137056, 169895 136169, 169114 135441, 168308 135014, 168208 134673, 168097 134516, 168669 134102, 168928 133737, 169022 133667, 168534 133661, 167801 133754, 167618 133617, 167562 133516, 167558 133374, 167714 133247, 167985 133160, 168341 133112, 168690 132859, 169221 132685, 169499 132633) (173771 135824, 173473 135929, 173099 136140, 172847 136363, 172522 136803, 172393 137144, 172346 137626, 172454 138110, 172748 138594, 173139 138927, 173671 139162, 174074 139232, 174463 139228, 174771 139171, 174891 139250, 174870 139315, 175327 139101, 175723 138777, 176029 138364, 176194 137916, 176228 137499, 176162 137000, 175921 136519, 175568 136157, 175171 135925, 174716 135784, 174312 135750)), ((167562 137186, 167902 137503, 168138 137892, 168253 138322, 168240 138769, 168098 139198, 167815 139603, 167519 139503, 166917 139484, 166856 139500, 166048 139486, 165797 138566, 165832 137603, 165898 137407, 167181 137071, 167251 137022)), ((164120 132915, 164410 133110, 164398 133162, 163358 133370, 163691 133363, 164369 133634, 164937 134135, 165262 134012, 165779 133992, 166099 134091, 166399 134347, 166676 134835, 166807 135470, 167309 135502, 168150 135760, 168895 136203, 169495 136801, 169906 137513, 170102 138291, 170070 139082, 169812 139832, 169345 140489, 168700 141009, 167922 141356, 167064 141507, 166183 141452, 165924 141366, 165528 142070, 165115 142448, 164751 142599, 164404 142593, 163929 142416, 163559 142119, 163003 142352, 162269 142414, 161784 142245, 161473 141989, 161294 141695, 160695 141236, 160915 140948, 161813 140512, 162591 139834, 163144 138993, 163431 138043, 163433 137051, 163149 136084, 162599 135208, 161933 134587, 161926 134283, 161854 134088, 162387 133886, 162431 133836, 162837 133504, 162463 133399, 161761 133297, 161683 133235, 161606 133029, 161640 132897, 161820 132816, 162346 132841, 162755 132697, 163536 132689) (166507 136762, 166108 136865, 165646 137127, 165406 137338, 165202 137623, 165039 138058, 165018 138535, 165171 139062, 165451 139467, 165889 139819, 166244 139984, 166600 140075, 167094 140097, 167022 140199, 167421 140129, 167833 139943, 168238 139631, 168490 139311, 168678 138913, 168742 138428, 168636 137916, 168394 137489, 168084 137178, 167702 136938, 167168 136770, 166812 136739)), ((180603 140702, 180065 141164, 179695 141375, 179326 141489, 178815 141584, 178353 141526, 177868 141713, 177471 141709, 177407 141595, 177433 141350, 177515 141224, 178125 140984, 178629 140725, 178775 140615, 179474 140673, 180185 140589, 180607 140575)), ((62889 122041, 63363 122244, 63896 122510, 64744 123059, 65344 123649, 65564 124188, 66453 124486, 67085 124764, 67521 125103, 67863 125519, 67873 125721, 67762 125927, 67567 126133, 67387 126243, 67088 126217, 65932 125693, 65146 125419, 64586 125201, 63655 125003, 64074 125470, 64190 125669, 64096 125718, 63707 125654, 64277 125911, 65373 126271, 66104 127272, 66256 127568, 66150 127642, 65546 128468, 65252 129451, 65297 130489, 65677 131487, 66353 132344, 67261 132976, 67370 133011, 67810 133309, 67813 133424, 67297 135126, 66251 136565, 65813 136885, 64440 136430, 64435 136455, 63231 136405, 62208 136701, 61353 137292, 60750 138118, 60526 138863, 60325 138899, 58582 138917, 57902 138424, 57597 138251, 56949 138176, 57298 138521, 57843 138956, 58464 139387, 59422 139944, 59983 140295, 60144 140493, 60106 140945, 60019 141148, 59833 141283, 59315 141252, 58671 141044, 58277 140829, 57421 140202, 56840 140345, 56465 140297, 55894 140169, 55769 140109, 55065 139860, 54109 139308, 53716 139025, 53459 138780, 53125 138246, 52817 137493, 52670 136717, 52597 135754, 52634 135032, 52687 134823, 52643 134552, 52765 133707, 52546 133275, 52357 132751, 52287 132202, 52324 131858, 52442 131570, 52621 131459, 52971 131679, 53520 131900, 53693 131933, 53722 131903, 54039 131936, 54630 131918, 55051 131849, 55620 131650, 55950 131490, 56437 131130, 57061 130360, 57296 129778, 57361 129512, 57370 128766, 57384 128512, 57233 127926, 56845 127129, 56427 126600, 56286 126472, 56431 125681, 56136 125493, 55651 125301, 55725 125124, 55933 124881, 56171 124683, 56955 124361, 57580 124255, 58193 123660, 58477 123499, 59139 122915, 59349 122825, 59523 122685, 59949 122414, 60715 122053, 61472 121876, 62101 121834) (53222 134911, 53317 135523, 53588 136082, 54172 136656, 54704 137063, 55042 137253, 54519 136819, 54108 136398, 53788 135979, 53478 135470, 53306 134972, 53319 134630) (59376 123634, 58734 123958, 58626 124178, 58928 123945, 59425 123795, 60020 123747, 60545 123760, 61127 123843, 61788 124013, 61435 123851, 60794 123659, 59986 123525)), ((100546 121861, 100682 122333, 100647 122597, 100397 122824, 99313 123390, 99170 123506, 98475 123964, 98158 124146, 97406 124773, 98034 124724, 98262 124754, 98244 124857, 97956 125127, 98506 124831, 99459 124181, 100699 124210, 101028 124271, 101021 124399, 101309 125381, 101907 126211, 102759 126809, 103782 127115, 104874 127100, 105928 126764, 106023 126699, 106527 126531, 106620 126599, 107657 128045, 108162 129749, 108149 130293, 106951 131105, 106967 131124, 106196 132048, 105808 133040, 105756 134078, 106043 135060, 106498 135690, 106405 135871, 105357 137266, 104553 137505, 104231 137641, 103807 138091, 104189 138063, 104835 137900, 105592 137646, 106501 137319, 107030 137076, 107304 136993, 107560 136986, 107897 137292, 108027 137607, 107994 137708, 107598 138166, 107204 138442, 106690 138672, 105670 138968, 105430 139517, 105163 139785, 104715 140161, 104590 140222, 103964 140631, 102944 141051, 102480 141190, 102130 141247, 101502 141186, 100717 140972, 100114 140667, 99533 140282, 99205 140090, 98654 139621, 98520 139451, 98279 139321, 97977 139049, 97813 138839, 97650 138709, 97395 138666, 97095 138548, 96668 138448, 96197 138173, 95948 137934, 95792 137666, 95812 137455, 96201 137311, 96710 137010, 96840 136893, 96834 136852, 97054 136622, 97398 136142, 97601 135766, 97791 135193, 97863 134833, 97875 134174, 97652 133292, 97325 132724, 97153 132510, 96568 132049, 96371 131882, 95817 131644, 95419 131533, 94949 131470, 94274 131477, 94087 131511, 93548 130915, 93063 131129, 92771 131304, 92677 131137, 92609 130823, 92599 130515, 92660 130201, 92862 129619, 93117 129139, 93105 128933, 93053 128817, 93017 128288, 93063 127964, 93002 127083, 93054 126489, 93249 125544, 93266 125353, 93598 124600, 93948 124076, 94205 123846, 94725 123502, 95426 123125, 96420 122741, 97357 122607, 97940 122766, 98741 122211, 99211 121958, 99884 121768, 100380 121749) (98925 139096, 99460 139378, 100070 139502, 100879 139387, 101525 139214, 101890 139059, 101218 139212, 100344 139308, 99515 139217, 99119 139106, 98744 138828) (95140 125833, 94601 126224, 94000 126785, 93716 127333, 93582 128039, 93691 128260, 93689 127885, 93873 127392, 94335 126680, 94948 126072, 95485 125651)), ((160677 136473, 160910 136848, 161030 137261, 161030 137682, 160909 138088, 160674 138447, 160306 138752, 160081 138602, 159526 138434, 159466 138434, 158705 138216, 158701 137300, 158974 136411, 159082 136249, 160373 136257, 160416 136233)), ((157060 130960, 157457 130949, 158078 131139, 158280 131265, 158725 131699, 158726 131759, 158682 131783, 157928 131709, 158144 131770, 158691 132227, 159086 132864, 159475 132839, 159935 132961, 160202 133142, 160398 133454, 160513 133964, 160446 134627, 160888 134788, 161600 135271, 162171 135899, 162560 136629, 162742 137414, 162703 138198, 162446 138929, 161990 139557, 161365 140037, 160613 140340, 159786 140442, 158939 140338, 158131 140034, 157937 139892, 157344 140457, 156872 140681, 156505 140719, 156190 140616, 155819 140332, 155530 139905, 154912 139970, 154222 139822, 153831 139539, 153619 139219, 153487 138728, 153145 138260, 153397 138080, 154405 137921, 155319 137514, 156069 136891, 156604 136092, 156888 135174, 156899 134195, 156638 133226, 156183 132441, 156252 132194, 156240 131973, 156717 131943, 157265 131687, 157004 131520, 156413 131252, 156317 131150, 156308 130931, 156369 130820, 156563 130801) (158877 135859, 158596 135986, 158328 136190, 158055 136545, 157901 136978, 157894 137505, 158038 137959, 158342 138407, 158622 138657, 158949 138853, 159391 139005, 159350 139034, 159661 139074, 160058 139027, 160549 138883, 160884 138667, 161167 138354, 161361 137929, 161406 137422, 161301 136958, 161104 136589, 160822 136264, 160379 135960, 160058 135830, 159770 135766, 159375 135749)), ((181541 132724, 182048 132868, 182484 133138, 182823 133514, 183038 133970, 183116 134477, 183052 135000, 182611 135065, 182022 135341, 181972 135386, 181248 135739, 180544 134976, 180112 134028, 180080 133795, 181095 132892, 181198 132718)), ((176409 130723, 176464 130790, 175794 131356, 175342 131787, 175697 131573, 176509 131443, 177152 131545, 177225 131510, 177357 131340, 177840 131015, 178189 130924, 178637 130985, 179199 131294, 179499 131602, 179692 131734, 180146 131486, 181028 131252, 181926 131231, 182781 131428, 183534 131828, 184135 132404, 184540 133117, 184725 133917, 184675 134753, 184395 135564, 183901 136297, 183230 136900, 182427 137334, 182182 137399, 182131 137805, 182144 138230, 181974 138849, 181708 139214, 181383 139410, 180822 139525, 180419 139483, 180087 139936, 179420 140425, 178883 140541, 178442 140483, 178301 140411, 178248 140443, 177330 140356, 177349 139878, 177868 139072, 178188 138024, 178213 136955, 177936 135941, 177380 135045, 176581 134335, 175593 133855, 174711 133684, 174478 133329, 174338 133221, 174868 132515, 174957 132239, 175080 132073, 174523 132234, 173815 132546, 173685 132516, 173490 132364, 173453 132246, 173564 132078, 173825 131893, 174195 131732, 174476 131358, 174899 131057, 175236 130872, 175795 130725, 176247 130696) (180878 132458, 180982 132513, 180924 132499, 180353 132783, 180090 132977, 179781 133300, 179507 133808, 179409 134136, 179384 134513, 179485 135006, 179740 135456, 180180 135846, 180668 136057, 181266 136131, 181690 136078, 182269 135856, 182470 135975, 182463 136057, 182956 135615, 183270 135145, 183450 134628, 183482 134096, 183364 133585, 183105 133129, 182734 132772, 182259 132516, 181757 132394, 181222 132392)), ((152640 138889, 153047 139103, 153632 139355, 153898 139726, 154498 140357, 154505 140407, 154460 140443, 153827 140353, 153612 140274, 153086 139908, 152833 139545, 152508 139371, 152335 139179, 152322 139090, 152446 138937, 152544 138885)), ((104396 108493, 104829 108740, 105125 109234, 105257 109640, 105323 110060, 105323 110353, 105190 111193, 105262 111497, 105285 112197, 105348 112233, 105429 112421, 105408 112670, 105289 112942, 105065 113218, 104830 113406, 104936 113792, 104953 114257, 104880 114760, 104714 115290, 104464 115829, 104106 116405, 118382 130695, 119049 130283, 119587 130032, 120115 129867, 120620 129793, 121085 129811, 121472 129917, 121660 129675, 121936 129457, 122208 129339, 122457 129318, 122645 129398, 122683 129459, 123382 129484, 123684 129555, 124522 129423, 124817 129422, 125237 129490, 125592 129602, 126137 129918, 126386 130349, 126390 130809, 126079 131427, 125997 131502, 125491 132039, 125602 132542, 125422 132494, 124804 132501, 124369 132665, 124026 132620, 122777 132783, 121609 133263, 120598 134026, 119818 135023, 119319 136182, 119135 137428, 119156 137611, 119006 137813, 118793 138306, 118745 138843, 118784 139014, 118519 138948, 118185 139230, 117781 139626, 117266 139873, 116951 139974, 116328 139693, 116272 139684, 115975 139193, 115843 138785, 115777 138365, 115778 138056, 115951 136973, 115883 136644, 115889 136279, 115734 136213, 115636 136045, 115642 135814, 115753 135555, 116045 135214, 116325 135054, 116246 134507, 116247 134037, 116340 133532, 116524 133005, 116793 132473, 117014 132142, 102676 117815, 102231 118106, 101742 118352, 101214 118537, 100708 118630, 100238 118631, 99714 118552, 99531 118832, 99191 119123, 98931 119234, 98699 119241, 98530 119144, 98464 118989, 98010 118980, 97772 118928, 96710 119096, 96380 119101, 95960 119033, 95605 118921, 95060 118605, 95052 118549, 94771 117926, 94872 117610, 95117 117097, 95805 116393, 95730 116093, 95901 116132, 96438 116085, 96932 115872, 97133 115723, 97317 115744, 98563 115560, 99723 115060, 100719 114279, 101481 113269, 101962 112101, 102124 110853, 102078 110510, 102244 110074, 102261 109496, 102205 109281, 102703 109394, 103318 108800, 103937 108488)), ((53418 106745, 53939 106972, 54358 107355, 54695 107627, 54964 107550, 54931 107721, 54996 108257, 55227 108743, 55382 108938, 55368 109124, 55596 110363, 56136 111504, 56951 112472, 57988 113199, 59171 113638, 60424 113757, 60765 113699, 61207 113849, 61785 113847, 61998 113782, 61901 114284, 62517 114879, 62850 115486, 62862 115945, 62629 116385, 62151 116697, 61745 116844, 61327 116926, 61036 116937, 60191 116833, 59890 116915, 59191 116963, 59157 117027, 58972 117114, 58723 117102, 58447 116993, 58164 116779, 57967 116550, 57585 116669, 57121 116704, 56614 116647, 56079 116500, 55533 116269, 54944 115932, 41162 130697, 41596 131350, 41866 131878, 42050 132400, 42141 132902, 42139 133368, 42046 133758, 42295 133939, 42523 134206, 42650 134473, 42680 134721, 42607 134913, 42546 134952, 42546 135652, 42486 135956, 42648 136790, 42658 137084, 42604 137506, 42505 137865, 42208 138420, 41787 138685, 41327 138704, 40698 138415, 40622 138336, 40066 137849, 39567 137977, 39609 137796, 39580 137178, 39400 136750, 39435 136404, 39228 135162, 38707 134012, 37909 133029, 36885 132284, 35710 131825, 34459 131684, 34277 131712, 34070 131569, 33569 131373, 33031 131344, 32862 131390, 32918 131122, 32625 130799, 32215 130408, 31950 129903, 31838 129591, 32097 128958, 32104 128903, 32581 128590, 32987 128444, 33405 128362, 33714 128352, 34802 128487, 35128 128408, 35494 128401, 35554 128243, 35718 128140, 35950 128138, 36212 128239, 36563 128519, 36733 128794, 37277 128695, 37746 128679, 38254 128755, 38788 128921, 39330 129171, 39668 129381, 53486 114551, 53180 114117, 52916 113635, 52713 113115, 52602 112613, 52585 112143, 52645 111616, 52359 111443, 52056 111113, 51936 110859, 51921 110626, 52012 110455, 52165 110383, 52159 109928, 52202 109689, 51997 108634, 51980 108304, 52034 107882, 52133 107523, 52420 106989, 53098 106655)), ((188611 136357, 188558 136523, 188092 137083, 187780 137316, 186892 137700, 186614 137731, 186428 137707, 185904 138026, 185620 138101, 185478 138094, 185419 138027, 185381 137747, 185422 137597, 186062 137204, 186485 136873, 186679 136689, 187385 136619, 188597 136246)), ((154267 133574, 154459 133866, 154567 134271, 154562 134676, 154445 135059, 154223 135393, 153910 135653, 153484 135829, 153338 135651, 152875 135340, 152819 135324, 152169 134901, 152422 134058, 152924 133318, 153068 133199)), ((141037 120394, 141690 120560, 142286 120810, 143142 121272, 143270 121367, 143815 121729, 144349 122177, 144596 122346, 145107 122339, 145158 122357, 145736 122464, 146339 122644, 146616 122770, 147099 122961, 147259 123075, 147860 123381, 148008 123484, 148851 124018, 149230 124352, 149552 124591, 150101 125052, 150411 125482, 150628 125915, 150796 126540, 150780 126891, 150854 127260, 150848 127577, 150796 127830, 150975 128033, 151366 128580, 151503 128829, 151537 128659, 151886 128726, 152200 128603, 152504 128566, 152384 128432, 151861 128002, 151809 127891, 151877 127647, 151938 127607, 152124 127641, 152437 127857, 152929 127995, 153283 128240, 153597 128650, 153660 128908, 153387 128829, 153769 129371, 153962 130005, 153974 130142, 154473 130246, 154837 130455, 155041 130689, 155135 131010, 155118 131482, 154921 132027, 154838 132159, 155192 132409, 155744 133048, 156126 133788, 156310 134580, 156283 135369, 156047 136102, 155618 136730, 155027 137210, 154312 137506, 153522 137602, 152711 137489, 151935 137176, 151247 136683, 151088 136500, 150876 136682, 150356 136959, 149890 137044, 149559 136994, 149295 136822, 149041 136493, 148842 135928, 148163 135820, 147584 135522, 147301 135179, 147185 134837, 147214 134183, 146621 133944, 146030 133623, 145808 133470, 145249 133598, 144872 133568, 144527 133628, 143920 133518, 143435 133384, 142973 133123, 142189 132406, 142084 132232, 141483 131649, 141033 131096, 140656 130539, 140524 130393, 140117 129678, 139752 128845, 139601 127938, 138870 127251, 138405 126685, 137800 125856, 137443 125219, 137236 124689, 137157 124330, 137190 124074, 137380 123920, 137715 123845, 137869 123880, 137563 123237, 137306 122662, 137229 122373, 137207 121635, 137263 121533, 137168 121192, 137225 121042, 138201 120639, 138531 120565, 139259 120646, 140261 120984, 140291 120630, 140422 120424, 140672 120359) (152726 132992, 152425 133116, 152084 133377, 151833 133739, 151694 134231, 151714 134688, 151888 135183, 152083 135483, 152305 135718, 152726 136006, 152988 136112, 153331 136187, 153819 136173, 154192 136052, 154529 135832, 154813 135487, 154982 135020, 155001 134594, 154904 134171, 154726 133806, 154392 133414, 153869 133080, 153507 132966, 153196 132940) (151102 130149, 150586 130472, 150117 130869, 149710 131330, 149372 131844, 149116 132396, 148945 132974, 148867 133563, 148873 133713, 149317 133645, 150179 133246, 150885 132628, 151384 131834, 151641 130917, 151633 129920)), ((188853 128251, 189309 128537, 189664 128941, 189893 129437, 189977 129976, 189506 130188, 188997 130633, 188960 130692, 188367 131225, 187444 130659, 186740 129837, 186639 129607, 187370 128453, 187438 128192, 187767 128105, 188326 128104)), ((189034 126728, 189854 126994, 190553 127462, 191083 128101, 191408 128865, 191504 129705, 191367 130564, 191004 131380, 190442 132101, 189718 132675, 189469 132790, 189517 133340, 189579 133640, 189517 134324, 189303 134755, 189004 135015, 188446 135238, 188072 135269, 187830 135751, 187588 136033, 187221 136381, 186693 136593, 186140 136586, 186055 136660, 185092 136737, 185060 136342, 184999 136204, 185358 135339, 185496 134222, 185330 133138, 184870 132161, 184149 131356, 183214 130780, 182130 130472, 181260 130457, 180908 130083, 180765 130008, 181237 129077, 181260 128931, 181393 128662, 180786 128960, 180097 129421, 179787 129319, 179681 129168, 179761 128981, 180010 128723, 180423 128441, 180615 128033, 181326 127378, 181714 127166, 182365 126989, 182630 127056, 181951 127865, 181587 128367, 181534 128463, 181900 128108, 182719 127825, 183288 127813, 183463 127686, 183508 127602, 183945 127185, 184286 127028, 184767 127007, 185415 127228, 185666 127406, 186016 127575, 186418 127247, 187255 126859, 188147 126681) (187489 127855, 187139 128019, 187214 128044, 187164 128209, 186819 128465, 186587 128709, 186329 129096, 186197 129428, 186099 130019, 186141 130409, 186333 130896, 186677 131311, 187190 131628, 187733 131757, 188355 131724, 188782 131594, 189257 131320, 189534 131451, 189542 131537, 189687 131420, 190071 130930, 190318 130372, 190412 129788, 190346 129215, 190125 128691, 189765 128255, 189292 127938, 188733 127756, 188142 127723)), ((146435 134213, 146697 134472, 147140 134819, 147308 135253, 147602 135874, 147336 135848, 146858 135570, 146591 135268, 146394 134810, 146143 134549, 146075 134348, 146129 134267, 146345 134185)), ((55254 116892, 55568 117460, 55656 117595, 55742 118230, 56285 118593, 56901 119048, 57153 119342, 57440 119788, 57572 120116, 57533 120301, 57350 120488, 57128 120617, 56788 120646, 56443 120407, 55937 119977, 55260 119456, 54844 119170, 54493 118887, 53652 118450, 54009 119215, 53968 119267, 53541 119100, 54016 119503, 54971 120150, 55398 121316, 55462 121641, 55340 121683, 54531 122311, 53978 123174, 53735 124184, 53825 125248, 54239 126258, 54937 127116, 55033 127181, 55375 127589, 55346 127700, 54381 129194, 52980 130289, 52470 130477, 51274 129659, 51262 129681, 50126 129304, 49054 129305, 48069 129637, 47261 130264, 46840 130920, 46639 130899, 44956 130436, 44439 129774, 44192 129521, 43586 129267, 44036 129990, 44428 130515, 44956 131131, 45224 131371, 45745 131923, 45981 132236, 45976 132576, 45858 132816, 45619 133044, 45358 133007, 45191 132915, 44943 132850, 44511 132559, 43768 131730, 43469 131350, 42892 131329, 42156 130979, 41887 130795, 44699 127784, 53934 117857, 54431 117264, 55016 116629)), ((195937 129768, 195860 130057, 195632 130505, 195593 130613, 195378 130877, 194858 131337, 194579 131533, 194302 131644, 194131 131667, 193651 132176, 193398 132331, 193184 132352, 193027 132045, 193022 131952, 193089 131823, 193592 131274, 193883 130860, 194066 130560, 194726 130292, 195750 129587, 195901 129521)), ((103853 119766, 104288 120210, 104125 120469, 103934 121173, 103919 121408, 104012 122022, 104210 122278, 104083 121935, 104093 121343, 104396 120318, 114444 130360, 113692 130598, 113134 130698, 112826 130679, 112464 130548, 112647 130740, 113145 130828, 113446 130836, 113955 130766, 114545 130472, 115925 131852, 115131 131920, 114302 131825, 113793 131694, 113357 131595, 112679 131334, 112497 131219, 112218 131175, 111462 130799, 110844 130890, 110260 130884, 109881 130792, 109567 130651, 109329 130450, 109278 130248, 109597 129983, 109967 129542, 110060 129375, 110041 129338, 110321 128548, 110395 128104, 110400 127630, 110339 127089, 110104 126427, 109624 125706, 109116 125270, 108891 125135, 108150 124883, 107949 124805, 107148 124754, 106406 124907, 105812 125135, 105668 125220, 104960 124837, 104569 125207, 104360 125460, 104214 125336, 104047 125063, 103934 124776, 103881 124504, 103873 123895, 103965 123302, 103590 122546, 103545 122267, 103422 122065, 103169 121405, 102926 120351, 102854 119700, 102910 118835)), ((194074 121463, 194608 121670, 195061 122018, 195400 122490, 195591 123021, 195108 123363, 194678 123917, 194652 123985, 194182 124608, 193119 124215, 192238 123517, 192086 123297, 192587 122017, 192609 121677, 192912 121532, 193494 121416)), ((194392 120184, 195194 120442, 195879 120910, 196402 121556, 196727 122336, 196831 123199, 196707 124085, 196365 124932, 195828 125684, 195594 125885, 195767 126123, 195984 126716, 196122 127434, 196027 127937, 195802 128285, 195303 128672, 194983 128799, 194884 129306, 194501 130066, 193978 130480, 193493 130634, 193403 130773, 192455 131129, 192317 130762, 192173 130590, 192276 129681, 192095 128541, 191625 127518, 190895 126684, 189955 126094, 188869 125790, 187711 125792, 186899 126010, 186379 125701, 186237 125672, 186541 124091, 185966 124611, 185452 125221, 185356 125287, 185103 125265, 184910 125142, 184934 124937, 185117 124586, 185484 124165, 185482 123975, 185553 123687, 185759 123300, 186091 122804, 186322 122554, 186424 122501, 186835 122211, 187112 122095, 187361 122097, 187323 122249, 186886 123093, 186642 123792, 186603 123948, 186878 123465, 187556 122989, 188084 122799, 188310 122530, 188617 122005, 188913 121752, 189398 121587, 190126 121623, 190299 121681, 190853 121804, 191160 121375, 191858 120772, 192666 120355, 193531 120154) (192874 121155, 192270 121467, 191798 121877, 191953 121884, 192017 122121, 191657 122702, 191509 123163, 191483 123791, 191543 124152, 191698 124528, 192030 124960, 192492 125276, 193097 125446, 193674 125420, 194285 125209, 194674 124954, 195012 124622, 195387 124705, 195423 124880, 195641 124578, 195895 123944, 195988 123283, 195909 122639, 195668 122055, 195277 121571, 194765 121220, 194166 121028, 193521 121006)), ((108523 113957, 108693 114122, 108882 114589, 108740 114897, 108213 115455, 107268 116594, 107270 116609, 106835 117251, 106538 117774, 107133 117500, 107346 117455, 107363 117560, 107187 117905, 107605 117444, 108285 116513, 109466 116126, 109792 116074, 109830 116198, 110429 117027, 111272 117611, 112274 117889, 113336 117836, 114363 117458, 115245 116790, 115312 116697, 115733 116369, 115843 116402, 117303 117419, 118347 118857, 118517 119374, 117658 120541, 117680 120553, 117264 121676, 117227 122747, 117524 123743, 118123 124572, 118762 125015, 118735 125215, 118214 126882, 117534 127375, 117273 127614, 116994 128217, 117215 128109, 118130 127520, 119340 126517, 119863 126025, 120173 125881, 120607 126046, 120800 126234, 120849 126383, 120624 126980, 120346 127370, 119465 128114, 119076 128399, 119034 128978, 118660 129697, 118463 129962, 104799 116303, 105087 116091, 105784 115729, 106383 115684, 106774 115146, 107167 114651, 107444 114378, 107880 114094, 108342 113912)), ((52464 114857, 51138 116285, 50521 116016, 49862 115965, 49263 116073, 49062 116278, 49554 116116, 49967 116139, 50520 116248, 51029 116402, 42945 125074, 41892 126224, 41353 126794, 41070 126070, 40968 125476, 40984 125118, 41083 124841, 40881 125087, 40893 125171, 40825 125717, 40924 126300, 41237 126901, 40819 127359, 39905 128327, 39849 127907, 39825 127362, 39880 126680, 40086 125831, 40076 125746, 40263 125311, 40456 124734, 40492 124501, 40805 123823, 40709 123348, 40705 122390, 40887 121924, 41079 121680, 41280 121621, 41517 121887, 41924 122219, 42282 122412, 43015 122605, 43435 122661, 44113 122633, 44473 122571, 45073 122348, 45829 121809, 46247 121286, 46375 121057, 46673 120097, 46695 119280, 46529 118594, 46280 118002, 46179 117839, 46537 117118, 46163 116748, 45892 116540, 46012 116389, 46279 116213, 46562 116089, 46832 116026, 47416 115998, 48035 116068, 48222 115982, 48313 115889, 48781 115666, 49057 115612, 49236 115488, 49903 115207, 50453 115049, 51086 114893, 52121 114825)), ((201591 121329, 201627 121560, 201607 121976, 201418 122564, 201282 122813, 200850 123375, 200557 123677, 200317 123828, 200116 123893, 200051 124032, 199734 124541, 199507 124752, 199325 124830, 199173 124704, 199032 124463, 199077 124295, 199479 123636, 199852 122747, 200450 122338, 200822 121965, 201287 121445, 201533 121250)), ((198517 113820, 199071 114068, 199538 114473, 199862 114956, 199418 115463, 199118 116127, 199108 116202, 198802 116906, 197628 116767, 196567 116275, 196355 116085, 196545 114715, 196477 114306, 196732 114097, 197307 113834, 197917 113738)), ((198923 112461, 199677 112786, 200308 113316, 200771 114013, 201034 114832, 201082 115714, 200909 116603, 200529 117434, 200350 117661, 200391 117781, 200711 118062, 200945 118499, 201236 119219, 201236 119764, 201074 120165, 200385 120949, 200374 121331, 200135 122181, 199674 122719, 199282 122944, 199196 123164, 198292 123721, 198089 123391, 197856 123202, 197782 122314, 197377 121200, 196702 120261, 195802 119563, 194741 119152, 193586 119059, 192418 119287, 191690 119643, 191030 119407, 190903 119406, 190903 118160, 190951 118098, 190950 117746, 191169 117039, 191766 116419, 192180 116158, 192356 115830, 192446 115770, 192628 115255, 192879 114937, 193350 114666, 194279 114533, 194678 114551, 194892 114629, 194966 114602, 195181 114130, 195744 113414, 196451 112856, 197253 112498, 198096 112362) (197354 113042, 196685 113338, 196095 113803, 195625 114405, 195582 114499, 195877 114455, 195936 114566, 196002 114576, 195972 114618, 196032 114718, 195819 115301, 195759 115806, 195856 116450, 195989 116805, 196222 117157, 196649 117532, 197181 117763, 197830 117815, 198413 117674, 198998 117335, 199341 117000, 199577 116662, 200032 116702, 200142 117035, 200403 116468, 200547 115727, 200507 114990, 200286 114308, 199901 113725, 199375 113283, 198748 113012, 198058 112929)), ((40267 105213, 40904 105374, 41401 105591, 41711 105541, 41770 105497, 42242 105424, 42513 105454, 42722 105390, 43441 105314, 43889 105331, 44392 105336, 45235 105451, 45965 105715, 46515 106023, 46736 106230, 47170 106761, 47696 107633, 48064 108489, 48247 109310, 48138 109882, 48931 110926, 49168 111391, 49284 111758, 49341 112251, 49251 112415, 49048 112538, 48548 112599, 48273 112371, 47818 111643, 47102 110619, 46768 110235, 46200 109616, 46090 109523, 46192 110217, 46178 110376, 46073 110366, 45792 110118, 46118 110627, 46843 111525, 46911 112763, 46877 113094, 46748 113098, 45791 113461, 45010 114124, 44481 115020, 44257 116063, 44357 117150, 44775 118176, 44847 118265, 45054 118753, 44994 118852, 43635 119999, 41974 120636, 41431 120665, 40527 119535, 40510 119553, 39533 118861, 38507 118548, 37468 118577, 36513 118941, 35919 119443, 35732 119364, 34262 118439, 33958 117646, 33792 117328, 33314 116949, 33364 117271, 33725 118340, 34253 119472, 34679 120272, 34716 120582, 34557 120834, 34397 120993, 34220 121095, 34019 121095, 33536 120733, 33233 120362, 32744 119320, 32568 118868, 32020 118678, 31400 118109, 30786 117289, 30295 116322, 30119 115870, 30035 115525, 30047 114895, 30199 114095, 30506 113350, 30944 112601, 30960 112518, 31383 111934, 31544 111785, 31686 111464, 32221 110892, 32242 110521, 32427 109822, 32652 109361, 32848 109119, 33139 108912, 33321 108931, 33499 109316, 33822 109776, 33961 109911, 34002 109902, 34228 110089, 34690 110375, 35100 110563, 35732 110725, 36096 110769, 36755 110729, 37642 110429, 38157 110067, 38356 109878, 38795 109221, 38923 109045, 39181 108286, 39220 107596, 39159 106928, 39110 106743, 39663 106159, 39518 105840, 39217 105417, 39374 105308, 39604 105225, 39988 105183) (31929 112161, 31766 112517, 31616 113323, 31792 114132, 32016 114763, 32199 115112, 31968 114351, 31865 113781, 31843 113139, 31888 112540, 31982 112248, 32178 111968) (42345 106094, 42620 106061, 42995 106127, 43659 106448, 44485 107046, 45067 107677, 44858 107350, 44465 106883, 43795 106279, 43039 106011, 42647 105975)), ((98483 110332, 98523 110386, 99090 110786, 99328 111180, 99295 111430, 99091 111929, 98766 112360, 98340 112692, 97846 112905, 97315 112984, 96900 112877, 96033 111698, 96125 111471, 96835 110522, 97758 109804)), ((91080 98864, 91415 99335, 91519 99975, 91702 100917, 92619 101364, 93312 101828, 93728 102169, 94221 102657, 94603 103090, 95046 103757, 95236 104332, 95204 104676, 95111 104789, 95158 104868, 95966 104768, 96592 104833, 96839 104920, 97441 105078, 98186 104311, 98544 104066, 99114 103852, 99396 103847, 99693 103936, 99883 104123, 100053 104493, 100087 104879, 99992 105365, 99591 106319, 99845 106535, 99546 106861, 99461 107215, 99250 107568, 99049 107798, 99506 107969, 100311 108550, 100934 109322, 101330 110236, 101474 111228, 101356 112231, 100983 113176, 100382 113998, 99592 114640, 98668 115062, 97673 115232, 96676 115140, 95743 114793, 94938 114212, 94314 113439, 94211 113201, 94038 113416, 93677 113763, 93337 113993, 93017 114100, 92829 114085, 92312 114328, 91882 114444, 91420 114458, 91026 114343, 90799 114170, 90680 113904, 90661 113549, 90862 112812, 91076 112450, 91392 112013, 91889 111536, 91768 110982, 91362 110758, 90440 110042, 90064 109704, 89860 109487, 89469 109098, 88955 108439, 88565 107860, 88026 108039, 87011 108248, 87402 108211, 87109 109699, 86602 113471, 86411 114512, 86253 115246, 85717 117522, 85485 118174, 85132 118869, 84585 119225, 84019 118947, 83750 118718, 83225 117601, 82305 114794, 78255 118905, 77426 119507, 76559 119915, 76174 119866, 75838 119880, 75484 119464, 75471 119130, 75417 118896, 75377 118000, 75524 116891, 75981 115140, 76499 113309, 76934 111837, 74804 112201, 74602 112221, 73205 112428, 73097 112462, 71727 112441, 71500 112306, 71101 112162, 71162 111710, 71556 111386, 71697 111231, 72658 110437, 73415 109949, 74202 109492, 76794 108095, 76795 107786, 76921 107645, 77055 107335, 77510 107022, 78544 106523, 79293 106275, 79424 106218, 80363 105921, 81333 105687, 81420 105628, 82020 105309, 82479 105052, 82864 104690, 83322 104283, 83882 103754, 84045 103665, 84615 103229, 85774 102520, 85501 101667, 85524 101457, 85803 101079, 86143 100802, 86635 100553, 86884 100509, 87299 100663, 87325 100537, 87565 100010, 87878 99501, 88360 99060, 88700 98889, 89165 98847, 89529 98959, 89755 99129, 90537 98483, 90792 98401) (97078 109451, 96579 109673, 96179 110009, 95864 110441, 95669 110936, 95607 111460, 95683 111980, 95890 112460, 96216 112865, 96638 113170, 97127 113353, 97650 113401, 98172 113311, 98656 113090, 99070 112753, 99385 112321, 99580 111826, 99642 111302, 99567 110782, 99359 110302, 99033 109896, 98612 109592, 98122 109409, 97598 109361)), ((114973 104031, 115269 104438, 115202 104792, 114787 105540, 114238 106663, 114065 107142, 113797 107938, 113770 108078, 114327 107654, 114474 107589, 114515 107685, 114435 108051, 114722 107519, 115156 106451, 116206 105790, 116512 105660, 116578 105771, 117360 106431, 118319 106793, 119358 106821, 120379 106512, 121281 105897, 121976 105035, 122018 104928, 122345 104510, 122461 104515, 124123 105148, 125485 106292, 125775 106752, 125224 108091, 125249 108097, 125116 109287, 125340 110336, 125869 111230, 126650 111890, 127378 112165, 127400 112368, 127296 114109, 126757 114753, 126559 115051, 126459 115653, 126716 115454, 127476 114619, 128210 113609, 128675 112892, 128957 112665, 129255 112682, 129472 112745, 129645 112850, 129743 113026, 129660 113623, 129474 114094, 128810 115002, 128499 115375, 128599 115947, 128402 116765, 127982 117700, 127374 118598, 127034 119002, 126802 119211, 126247 119507, 125473 119761, 124686 119854, 124174 119850, 123725 119860, 123007 119771, 122801 119704, 122452 119736, 121692 119546, 121368 119701, 120590 119908, 120143 119911, 119837 119858, 119514 119703, 119442 119534, 119693 119192, 119945 118669, 119990 118500, 119962 118469, 120015 118179, 120044 117636, 120016 117280, 119906 116763, 119706 116216, 119350 115660, 118658 115028, 118092 114754, 117830 114670, 117042 114606, 116827 114579, 116031 114724, 115415 115020, 114861 115400, 114723 115532, 113944 115331, 113736 115612, 113512 116081, 113339 115996, 113156 115836, 112931 115521, 112823 115262, 112657 114627, 112604 114086, 112410 113840, 112343 113810, 112051 113432, 111945 113179, 111787 113028, 111374 112437, 111171 112036, 110931 111593, 110641 110846, 110500 110035, 110502 109404, 110590 109072, 110832 108474, 111336 107595, 111909 106855, 112538 106297, 113091 106114, 113672 104798, 114177 104202, 114579 103913, 114767 103912) (124839 118091, 124390 118457, 123968 118726, 123341 119022, 122994 119098, 122654 119062, 122943 119186, 123334 119156, 124111 118896, 124733 118350, 125176 117849, 125393 117519) (112467 110211, 112249 110781, 112045 111659, 112178 112452, 112336 112811, 112586 113018, 112424 112792, 112300 112432, 112258 111655, 112383 110684, 112652 109869)), ((191444 115423, 191420 115640, 191282 116073, 191072 116807, 190992 117420, 190987 117576, 190414 118388, 190021 119092, 189913 119196, 189714 119210, 189473 119150, 189423 118923, 189544 118500, 189864 117973, 189819 117767, 189832 117464, 189945 117078, 190275 116280, 190778 115723, 191128 115498, 191346 115413)), ((205470 111663, 205593 111977, 205674 112463, 205622 113015, 205535 113332, 205205 114071, 205002 114393, 204802 114597, 204604 114716, 204560 114947, 204372 115506, 204264 115686, 204004 115901, 203750 115743, 203632 115593, 203636 115420, 203771 115007, 203916 114454, 204064 113546, 204157 113494, 204594 112966, 205202 111841, 205387 111601)), ((198004 106383, 198207 106366, 198145 106516, 198238 106588, 198180 107146, 198244 107680, 198498 108300, 198719 108625, 199039 108924, 199561 109201, 200156 109304, 200825 109198, 201378 108916, 201883 108434, 202152 108008, 202280 107680, 202787 107615, 203174 108151, 203390 108601, 203887 108883, 204526 109786, 204659 110347, 204592 110794, 204413 111140, 204391 111274, 204151 111844, 204187 112080, 204153 112993, 203810 113664, 203533 113935, 203493 114245, 202706 115039, 202435 114768, 202094 114605, 201820 113783, 201148 112768, 200249 111992, 199181 111509, 198023 111354, 196845 111539, 195736 112046, 195099 112572, 195010 112530, 194340 112456, 194234 112480, 193930 111208, 193992 111071, 193935 110812, 193975 110104, 194034 109926, 194431 109251, 194715 108945, 194825 108548, 194958 108357, 195007 107923, 195184 107540, 195601 107142, 196260 106883, 196531 106755, 196797 106707, 197044 106749, 197150 106680, 197966 106341)), ((59597 107782, 60571 108460, 61320 109358, 60817 110100, 60765 110142, 60386 110721, 60000 110974, 59748 110950, 59242 110763, 58800 110453, 58454 110039, 58223 109552, 58127 109024, 58219 108606, 59367 107699)), ((58487 82844, 58824 83226, 58984 83361, 59812 84294, 60326 85033, 60810 85804, 62296 88346, 62605 88336, 62750 88457, 63065 88580, 63393 89023, 63928 90040, 64202 90780, 64264 90909, 64593 91837, 64861 92798, 64924 92884, 65263 93471, 65536 93921, 65911 94294, 66334 94737, 66879 95276, 66976 95438, 67438 96000, 68182 97126, 69024 96824, 69235 96839, 69622 97104, 69911 97435, 70177 97918, 70230 98165, 70090 98584, 70217 98606, 70753 98828, 71273 99124, 71729 99590, 71912 99923, 71971 100385, 71870 100754, 71710 100985, 72382 101744, 72473 101997, 72020 102302, 71561 102653, 70925 102779, 69990 102994, 69575 103926, 69136 104636, 68809 105063, 68339 105573, 67920 105969, 67269 106434, 66700 106645, 66356 106625, 66239 106536, 66169 106581, 66288 107427, 66247 108018, 66171 108259, 66032 108875, 66441 109254, 66824 109593, 67082 109942, 67314 110504, 67330 110785, 67252 111086, 67071 111283, 66719 111462, 66324 111513, 65834 111435, 64866 111066, 64659 111328, 64323 111041, 63967 110968, 63607 110769, 63370 110577, 63214 111040, 62662 111864, 61912 112514, 61012 112942, 60026 113120, 59020 113037, 58063 112698, 57220 112125, 56551 111358, 56097 110449, 55892 109462, 55949 108462, 56264 107517, 56816 106692, 57567 106043, 57801 105931, 57580 105766, 57221 105417, 56979 105084, 56861 104769, 56869 104580, 56608 104072, 56478 103646, 56448 103185, 56550 102784, 56713 102554, 56975 102426, 57329 102395, 58043 102555, 58442 102771, 58890 103072, 59384 103551, 59934 103412, 60133 103017, 60727 102181, 61151 101663, 61361 101452, 61736 101049, 62377 100512, 62941 100102, 62743 99566, 62500 98561, 62551 98951, 61053 98711, 57265 98335, 56218 98181, 54278 97816, 53186 97593, 52526 97383, 51821 97055, 51445 96519, 51703 95945, 51922 95669, 53020 95106, 55793 94087, 51542 90179, 50913 89376, 50475 88523, 50511 88137, 50485 87802, 50889 87433, 51221 87409, 51454 87346, 52349 87276, 53465 87385, 55227 87779, 57075 88233, 58562 88617, 58123 86501, 58096 86299, 57841 84910, 57803 84804, 57776 83435, 57903 83202, 58034 82798) (59072 107358, 58600 107583, 58207 107922, 57916 108354, 57752 108850, 57721 109375, 57829 109893, 58066 110369, 58419 110771, 58862 111070, 59363 111248, 59889 111292, 60406 111198, 60878 110975, 61271 110634, 61562 110203, 61727 109707, 61757 109182, 61649 108664, 61409 108174, 61060 107786, 60617 107487, 60116 107308, 59589 107265)), ((193915 108472, 193861 109094, 193827 109883, 193892 110456, 193922 110518, 193488 111614, 193272 112368, 193190 112498, 193009 112559, 192735 112561, 192657 112487, 192607 112231, 192636 111876, 192850 111233, 192750 111025, 192693 110746, 192697 110302, 192823 109567, 192917 109260, 193179 108761, 193260 108703, 193646 108282, 193789 108202, 193891 108195)), ((36699 92895, 36958 93002, 37525 93334, 37944 93679, 38256 93716, 38325 93690, 38799 93750, 39051 93855, 39268 93848, 39981 93975, 40408 94115, 40897 94261, 41668 94602, 42297 95056, 42741 95503, 42915 95801, 43169 96401, 43432 97374, 43550 98301, 43491 99158, 43238 99660, 43442 100169, 43757 101001, 43822 101780, 43741 102270, 43609 102402, 43380 102465, 42902 102397, 42696 102143, 42445 101265, 42038 100084, 41822 99623, 41448 98871, 41368 98751, 41274 99446, 41216 99595, 41118 99557, 40917 99241, 41090 99820, 41539 100882, 41264 102092, 41140 102402, 41015 102369, 39995 102455, 39061 102876, 38306 103592, 37803 104533, 37600 105605, 37718 106706, 37763 106812, 37828 107339, 37743 107417, 36119 108144, 34348 108299, 33818 108178, 33260 106842, 33239 106854, 32486 105914, 31591 105337, 30585 105078, 29566 105164, 28857 105483, 28699 105356, 27540 104052, 27466 103216, 27396 102864, 27040 102368, 26999 102691, 27048 103780, 27247 105052, 27437 105943, 27386 106247, 27022 106533, 26769 106603, 26574 106548, 26211 106067, 26020 105627, 25837 104491, 25794 104008, 25317 103672, 24880 102954, 24517 102001, 24311 100933, 24265 100450, 24278 100106, 24463 99498, 24832 98766, 25330 98136, 25688 97783, 25998 97460, 26566 97015, 26762 96916, 26936 96707, 27657 96244, 27778 95904, 28181 95209, 28495 94891, 28749 94713, 29087 94594, 29256 94663, 29322 95082, 29514 95630, 29602 95780, 29644 95783, 29810 96026, 30174 96429, 30446 96662, 30983 97010, 31417 97194, 32062 97336, 33000 97293, 33591 97087, 33836 96961, 34439 96450, 34610 96317, 35068 95654, 35296 95006, 35420 94346, 35424 94156, 36117 93747, 36066 93400, 35892 92910, 36074 92849, 36317 92832) (27028 97384, 26772 97681, 26408 98415, 26353 99240, 26395 99908, 26475 100295, 26462 99498, 26520 98922, 26676 98299, 26884 97736, 27054 97482, 27321 97267) (38713 94422, 38987 94467, 39328 94634, 39879 95125, 40503 95922, 40893 96695, 40782 96323, 40533 95765, 40056 95000, 39402 94534, 39036 94391)), ((121686 92539, 121884 92665, 122160 93076, 122023 93508, 121858 93786, 121612 94235, 121143 95171, 120717 96333, 120650 96657, 121194 96250, 121313 96206, 121345 96314, 121292 96503, 121590 96023, 122020 94994, 123098 94329, 123337 94229, 123420 94372, 124167 95014, 125086 95372, 126087 95407, 127070 95119, 127946 94533, 128622 93709, 128664 93607, 129030 93149, 129130 93154, 130718 93788, 132026 94890, 132295 95326, 131724 96679, 131746 96685, 131609 97836, 131816 98840, 132318 99706, 133065 100348, 133825 100643, 133705 102494, 133173 103122, 132886 103543, 132794 104063, 133086 103843, 133880 102978, 134502 102137, 134964 101440, 135287 101124, 135757 101173, 135964 101285, 136061 101458, 135974 102027, 135809 102449, 134888 103683, 134965 104251, 134799 104943, 134567 105516, 134270 106035, 134256 106078, 133863 106656, 133329 107290, 132646 107647, 131962 107861, 131195 107941, 130571 107927, 130298 107902, 130190 107937, 129669 107818, 129490 107684, 129860 107609, 130546 107369, 131100 106893, 131198 106758, 131629 106284, 132095 105565, 132155 105328, 131868 105725, 131286 106315, 130671 106808, 129847 107227, 129405 107322, 129033 107264, 128910 107283, 128715 107400, 129158 107664, 129007 107725, 128740 107734, 128348 107601, 127921 107807, 127166 108004, 126570 107991, 126090 107787, 126049 107697, 126326 107325, 126611 106751, 126559 106689, 126625 106350, 126657 105836, 126632 105477, 126532 104983, 126344 104455, 126006 103915, 125346 103302, 124656 102961, 123811 102881, 123596 102852, 122815 102988, 122226 103265, 121695 103620, 121505 103797, 120745 103598, 120583 103811, 120357 104278, 120055 104048, 119849 103753, 119738 103497, 119582 102885, 119538 102203, 119322 101948, 119241 101911, 119128 101670, 119113 101508, 119389 101721, 119552 101774, 119566 101554, 119522 101432, 119350 101213, 119194 100796, 119172 100097, 119315 99081, 119590 98269, 119839 97761, 119662 97922, 119222 98679, 118919 99425, 118745 100133, 118846 100865, 118945 101221, 118746 101122, 118403 100713, 118384 100600, 118238 100368, 117943 99818, 117664 99099, 117545 98384, 117556 97617, 117859 96886, 118244 96212, 118521 95789, 118976 95246, 119518 94783, 120067 94590, 120652 93334, 121126 92807, 121507 92538)), ((201018 104760, 201629 105016, 202099 105394, 201789 106118, 201706 106870, 201720 106947, 201647 107705, 200437 107940, 199233 107794, 198956 107671, 198710 106301, 198685 106309, 198466 105831, 198635 105568, 199135 105107, 199728 104807, 200370 104689)), ((194064 100544, 194191 100868, 194204 101015, 194347 101650, 194562 102424, 194810 102880, 194828 103018, 194769 103424, 194723 104249, 194746 104998, 194708 105162, 194540 105289, 194276 105375, 194154 105315, 194013 105010, 193947 104708, 193959 103978, 193786 103802, 193654 103568, 193465 102846, 193391 102322, 193382 101936, 193446 101504, 193685 100944, 193970 100537)), ((206769 100603, 207034 101148, 207119 101561, 207133 101962, 207088 102489, 206936 103220, 206818 103461, 206653 103650, 206696 104009, 206687 104506, 206635 104751, 206450 105055, 206143 104987, 205969 104869, 205922 104707, 205906 104004, 205817 103137, 205739 102752, 205745 102591, 205817 102508, 206066 101711, 206133 101316, 206254 100700, 206260 100555, 206369 100222, 206461 100210)), ((203186 97693, 203584 98142, 203953 98178, 204211 98282, 204503 98566, 204938 98889, 205254 99412, 205332 99878, 205301 100080, 205367 100518, 205302 101127, 205481 101635, 205580 102041, 205593 102285, 205560 102382, 205476 102911, 205332 103202, 205398 103581, 205111 104185, 204884 104634, 204547 104463, 204037 104395, 203566 103756, 202593 102983, 201477 102513, 200291 102382, 199115 102597, 198033 103146, 197117 103988, 196689 104661, 196493 104634, 195807 104777, 195730 104823, 195032 103679, 195052 103435, 194922 103095, 194763 102553, 194764 102324, 194936 101552, 195081 101218, 195051 100782, 195136 100373, 195083 100111, 195134 99675, 195423 99137, 195840 98793, 196113 98496, 196387 98363, 196628 98336, 196736 98202, 197310 97668, 197687 97509, 197666 97781, 197784 97811, 197895 98296, 198134 98809, 198582 99338, 198903 99587, 199316 99779, 199921 99885, 200542 99796, 201167 99479, 201623 99020, 201971 98371, 202098 97874, 202114 97584, 202631 97352)), ((200711 95064, 201328 95309, 201276 95430, 201192 96200, 201337 96973, 201375 97045, 201523 97778, 200389 98382, 199148 98603, 198829 98564, 198189 97318, 198180 97324, 197733 96853, 197813 96569, 198182 95939, 198695 95446, 199317 95123, 200004 94992)), ((191937 92877, 191986 93019, 192107 93162, 192247 93504, 192541 94034, 192898 94594, 193277 94983, 193355 95150, 193417 95704, 193640 96510, 193870 97205, 193882 97371, 193749 97558, 193517 97716, 193371 97693, 193103 97387, 192972 97138, 192759 96384, 192540 96267, 192319 96062, 191867 95297, 191678 94879, 191490 94196, 191534 93536, 191664 93014, 191751 92822, 191861 92794)), ((129542 81423, 129723 81572, 129944 82004, 129790 82362, 129570 82668, 129239 83165, 128793 83892, 128293 84945, 128154 85387, 128712 85051, 128809 85032, 128820 85145, 129051 84930, 129638 83812, 130791 83233, 130971 83176, 131056 83357, 131719 84036, 132570 84455, 133526 84573, 134497 84379, 135383 83891, 136101 83158, 136150 83063, 136573 82617, 136661 82631, 138127 83378, 139293 84539, 139517 84959, 138826 86266, 138846 86273, 138618 87366, 138733 88346, 139142 89219, 139804 89897, 140538 90258, 140268 92022, 139702 92586, 139422 92930, 139170 93529, 139546 93276, 140409 92488, 140972 91851, 141338 91407, 141579 91088, 141878 90837, 142018 90827, 142358 90923, 142532 91027, 142613 91206, 142481 91741, 142289 92128, 141345 93178, 141366 93757, 141180 94344, 140884 94931, 140529 95447, 140505 95503, 140061 96023, 139626 96457, 138942 96785, 138290 96952, 137336 96960, 136823 96876, 136751 96705, 137195 96415, 137430 96145, 137942 95682, 138046 95519, 138590 94845, 138836 94245, 138218 94963, 137613 95484, 136962 95920, 136052 96308, 135625 96337, 135133 96249, 134275 96596, 133509 96735, 132942 96681, 132484 96452, 132462 96387, 132776 96031, 133061 95562, 133014 95497, 133124 95117, 133196 94634, 133204 94272, 133151 93796, 133015 93272, 132735 92726, 132149 92079, 131516 91696, 130724 91552, 130513 91505, 129753 91569, 129168 91784, 128635 92075, 128379 92277, 127654 92020, 127527 92159, 127266 92594, 127028 92371, 126781 91888, 126646 91081, 126726 90180, 126714 89933, 126557 89690, 126440 89314, 126446 88692, 126694 87547, 127056 86724, 127574 85910, 127075 86318, 126586 87037, 126462 87185, 126169 87810, 125980 88112, 125832 88623, 125647 88603, 125500 88343, 125326 87828, 125145 87225, 125113 86552, 125226 85807, 125554 85171, 125929 84643, 126318 84152, 126797 83693, 127301 83347, 127860 83196, 128535 82043, 128995 81629, 129374 81410)), ((199636 87270, 200055 87402, 200643 87780, 200912 87704, 201255 87732, 201711 87979, 202058 88103, 202539 88536, 202766 89036, 202859 89176, 203157 89805, 203193 90289, 203635 90975, 203733 91245, 203730 91368, 203804 91898, 203758 92172, 203972 92591, 203796 93783, 203429 93719, 202782 93825, 202205 93397, 201024 92933, 199796 92808, 198599 93034, 197517 93594, 196624 94452, 195982 95548, 195777 96286, 195480 96336, 194842 96686, 194795 96739, 194151 96167, 193764 95798, 193702 95497, 193614 95412, 193271 94859, 193192 94753, 193103 94455, 193052 93699, 193078 93391, 192890 92935, 192826 92356, 192701 91826, 192824 91190, 193026 90885, 193230 90425, 193488 90190, 193706 90092, 194001 89429, 194314 89019, 194513 88880, 194597 89243, 194724 89240, 194948 89611, 195351 90058, 195948 90440, 196343 90589, 196810 90656, 197443 90577, 198035 90298, 198396 89940, 198556 89794, 198871 89199, 199020 88438, 198994 87918, 198941 87697, 199417 87293, 199444 87305, 199421 87258)), ((27547 62860, 27755 62916, 28010 63503, 28421 64264, 28703 64697, 28851 65255, 30076 67453, 30168 67579, 30568 68287, 30818 68757, 31731 70617, 31787 70800, 32035 71087, 32493 71869, 35546 75922, 36500 77328, 36609 77586, 37399 78699, 37887 79408, 38364 79508, 39215 79856, 39695 80194, 39817 80262, 39995 80535, 39942 80622, 39702 80737, 39282 80671, 39147 80685, 38752 80591, 39952 82011, 41094 83434, 41509 84013, 42091 84787, 43174 86621, 43339 87211, 43496 87994, 43385 88351, 43242 88604, 42565 88851, 41363 88791, 41208 88801, 40379 88660, 39813 88522, 39211 88362, 39581 89376, 39612 89544, 38888 89738, 38535 89981, 38166 90122, 37776 90185, 37393 90165, 37041 90065, 36746 89891, 36512 89658, 36369 89379, 36353 89068, 36412 88864, 36174 88898, 35278 89321, 34544 90045, 34053 90993, 33869 92068, 34006 93162, 34053 93267, 34120 93748, 34032 93831, 32426 94585, 30664 94769, 30127 94657, 29566 93377, 29544 93390, 28778 92465, 27876 91905, 26869 91665, 25854 91769, 25541 91915, 25728 92232, 25744 92543, 25658 92861, 25490 93161, 25235 93423, 24912 93632, 24543 93772, 24154 93835, 23731 93801, 23210 93940, 23104 93508, 22900 93304, 22766 92963, 22267 93442, 21618 93979, 21479 94048, 20469 94699, 19760 94825, 19508 94680, 19234 94425, 18978 93668, 18833 93102, 18825 91565, 19034 89274, 19224 88036, 19657 85604, 18869 86240, 18650 86278, 18538 86214, 18553 85889, 18807 85373, 19150 84856, 19506 84457, 19634 84340, 19673 83764, 19831 82085, 19797 81805, 19920 80110, 20542 75035, 20551 74124, 20476 73693, 20347 71903, 20310 70526, 20363 69960, 20416 69198, 20400 68162, 20150 67165, 20162 65932, 20214 65387, 20164 64950, 20791 64463, 21270 64114, 21829 63926, 22668 63450, 23682 62964, 23777 62988, 25804 62860, 26380 62745)), ((204081 88860, 204499 89199, 204936 89704, 205196 90366, 205294 90805, 205393 91691, 205340 91986, 205235 92212, 205411 92603, 205540 93062, 205568 93345, 205475 93711, 205152 93744, 204934 93676, 204843 93535, 204621 92884, 204400 92320, 204165 91818, 204022 91594, 203978 91401, 204037 91210, 204013 90494, 203911 89603, 203818 89246, 203826 89058, 203781 88916, 203793 88804, 203896 88759)), ((187180 86278, 187812 86970, 188415 87486, 188791 87738, 189147 87916, 189311 88074, 189542 88579, 190127 89399, 190558 89954, 190630 90129, 190562 90362, 190398 90584, 190240 90613, 189870 90409, 189639 90203, 189154 89520, 188656 89385, 187996 88862, 187563 88434, 187247 88032, 187103 87766, 186945 87245, 186855 86613, 186900 86275, 186989 86185)), ((197168 85399, 197155 85626, 197347 86408, 197763 87110, 197826 87167, 198210 87794, 197312 88791, 196180 89447, 195847 89524, 194812 88565, 194805 88575, 194111 88229, 194090 87955, 194231 87185, 194567 86501, 195075 85950, 195718 85566, 196455 85379)), ((195006 78233, 195267 78255, 195901 78514, 196494 78983, 196918 79399, 197265 79943, 197273 80045, 197787 80444, 198002 80701, 198047 80835, 198298 81309, 198339 81534, 198749 81914, 198999 83129, 198649 83191, 197950 83583, 197336 83402, 196042 83367, 194819 83678, 193751 84312, 192908 85226, 192352 86360, 192118 87635, 192176 88369, 191819 88569, 191286 89177, 190729 88957, 189975 88628, 189775 88296, 189725 88274, 189069 87779, 188854 87489, 188548 86794, 188504 86632, 188075 86133, 187579 85132, 187468 84456, 187511 84275, 187542 83671, 187706 83350, 187895 83154, 187907 82356, 188023 81937, 188233 81618, 188497 82010, 188616 81962, 188909 82194, 189475 82491, 190184 82648, 190621 82654, 191100 82553, 191691 82249, 192169 81765, 192397 81284, 192498 81092, 192594 80398, 192562 80020, 192466 79591, 192258 79103, 192169 78969, 192506 78395, 192420 78310, 192666 78230, 193109 78210, 193905 78397, 194133 78236, 194454 78153)), ((149673 84246, 149988 84518, 150010 84710, 149732 85157, 149443 85451, 148322 86112, 148157 86654, 147956 86987, 147318 87635, 146857 87983, 146808 88039, 146322 88327, 145797 88588, 145166 88707, 144489 88680, 143739 88479, 143323 88285, 143267 88152, 143642 87918, 144319 87625, 144913 87203, 145443 86790, 145961 86167, 146207 85829, 146470 85787, 146597 85702, 147623 85240, 148195 84903, 148746 84552, 149120 84292, 149423 84163)), ((141736 74085, 142141 74903, 142796 75540, 143075 75670, 142937 77070, 143179 78287, 143747 79370, 144603 80245, 145688 80851, 146930 81146, 147306 81137, 147395 81857, 147800 82674, 148387 83246, 147616 84780, 146758 85218, 146369 85686, 146037 85911, 145782 86200, 145415 86506, 144834 86861, 144142 87157, 143507 87337, 142671 87456, 142333 87439, 141966 87358, 141608 87138, 141423 87100, 140729 87151, 140009 87054, 139506 86848, 139140 86502, 139138 86460, 139556 86214, 139901 85916, 139873 85835, 140129 85469, 140336 85058, 140457 84713, 140570 84061, 140578 83745, 140487 83161, 140145 82399, 139680 81858, 138999 81492, 138812 81381, 138109 81216, 137503 81238, 136937 81343, 136570 81477, 135972 81021, 135501 81402, 135373 81158, 135296 80599, 135375 80038, 135467 79723, 135717 79153, 135752 78929, 135678 78646, 135670 78295, 135927 77510, 136418 76707, 136921 76113, 137589 75535, 138075 75238, 138405 75127, 139012 74999, 139070 75012, 139500 74815, 140286 74050, 141704 73834)), ((179929 81377, 181071 82011, 181536 82212, 182145 82371, 182505 82407, 182720 82539, 183202 83032, 184056 83642, 184606 84000, 184755 84178, 184754 84442, 184675 84689, 184526 84775, 184089 84698, 183776 84566, 183053 84043, 182519 84065, 181865 83859, 181116 83509, 180675 83222, 180390 82959, 180116 82572, 179841 82064, 179700 81505, 179755 81351)), ((185989 71080, 186832 71314, 187349 71556, 187727 71816, 188014 72145, 188428 72296, 188756 72493, 188854 72622, 189246 72988, 189334 73143, 189928 73406, 190579 74504, 190285 74667, 189764 75253, 189713 75378, 189089 75406, 187830 75801, 186753 76508, 185932 77476, 185423 78638, 185263 79917, 185461 81227, 185742 81871, 185396 82260, 185082 83027, 183616 82909, 183248 82599, 182619 82387, 182450 82343, 182109 82109, 181583 81532, 181142 81308, 180525 80759, 180178 80316, 180131 80274, 179784 79633, 179584 78950, 179625 78601, 179749 78306, 179569 77942, 179442 77477, 179414 77008, 179526 76627, 179992 76957, 180083 76878, 180380 76982, 181051 77083, 181789 76998, 182218 76856, 182654 76594, 183133 76096, 183431 75537, 183501 74899, 183534 74685, 183395 73972, 183232 73609, 182987 73214, 182556 72737, 182695 72093, 182501 71993, 182721 71812, 183130 71645, 183568 71567, 184105 71526, 184257 71329, 184523 71154, 185168 71037)), ((158603 79840, 158846 80069, 158963 80265, 158936 80450, 158567 80796, 158141 81048, 157095 81299, 156780 81789, 156315 82161, 155697 82525, 155202 82722, 154693 82883, 154179 82995, 153418 82932, 152895 82769, 152286 82421, 152015 82198, 152053 82072, 152302 81994, 152786 81921, 153349 81698, 154293 81294, 154951 80819, 155194 80600, 155289 80615, 155523 80535, 156508 80388, 157059 80235, 157754 80015, 158232 79842, 158477 79805)), ((197496 78135, 198100 78371, 198607 78673, 198799 78843, 199120 79241, 199441 79761, 199802 80524, 199821 81037, 200176 81401, 200431 81761, 200586 82086, 200638 82355, 200614 82446, 200324 82595, 200083 82612, 199943 82516, 199511 81991, 198821 81205, 198384 80869, 198259 80668, 198236 80471, 197979 79837, 197640 79155, 197107 78384, 197058 78176, 197167 78112)), ((189641 77564, 190094 78267, 190740 78817, 190821 78852, 191377 79310, 190831 80598, 189941 81626, 189634 81818, 188334 81244, 188330 81256, 187433 81139, 187331 80903, 187206 80078, 187307 79270, 187628 78536, 188144 77925, 188823 77480, 189555 77251)), ((153900 68227, 153862 68501, 154035 69362, 154392 69961, 154194 70248, 153744 71521, 153656 72834, 153942 74098, 154578 75229, 155523 76146, 156712 76789, 157219 76912, 157188 77138, 157361 77999, 157782 78706, 156683 79939, 155900 80112, 155320 80501, 154845 80661, 154716 80681, 154494 80808, 153874 81093, 152847 81277, 152163 81287, 151337 81183, 151044 81090, 150573 80822, 150270 80502, 149645 80376, 149587 80339, 149034 80123, 148615 79817, 148349 79388, 148825 79255, 149152 79096, 149145 79001, 149528 78690, 149819 78365, 150026 78061, 150294 77484, 150379 77195, 150439 76630, 150316 75862, 150015 75220, 149478 74714, 149327 74559, 148709 74227, 148148 74099, 147602 74053, 147152 74094, 146700 73513, 146227 73735, 146184 73513, 146268 72929, 146471 72454, 146965 71780, 147011 71609, 147011 71316, 147084 71006, 147300 70610, 147592 70216, 148232 69610, 148818 69207, 149449 68892, 150033 68710, 150398 68666, 150765 68680, 150916 68630, 151144 68629, 151687 68538, 152516 68074)), ((148236 76183, 148957 77593, 149036 78038, 147985 79059, 148000 79071, 147467 80005, 147269 80995, 146961 81001, 145758 80713, 144705 80126, 143874 79278, 143321 78229, 143087 77048, 143217 75737, 143637 75933, 144582 76043, 145539 75861, 146414 75403, 146487 75331, 147067 75016)), ((171574 78868, 172654 79109, 173112 79158, 173708 79138, 174015 79066, 174288 79155, 174994 79533, 176053 79892, 176637 80061, 176867 80217, 176923 80386, 176933 80736, 176807 80871, 176348 80928, 175992 80895, 175545 80762, 175056 80567, 174551 80750, 173963 80765, 172984 80633, 172449 80468, 171943 80230, 171344 79672, 171079 79302, 170941 78996, 170906 78770, 171031 78763)), ((165636 78432, 166154 78477, 166956 78497, 167620 78486, 167821 78588, 167910 78716, 168032 79073, 167948 79252, 167506 79450, 167139 79526, 166753 79527, 166078 79451, 165617 79807, 165057 80000, 164330 80146, 163630 80185, 162912 80093, 162193 79786, 161751 79451, 161419 79073, 161286 78847, 161370 78745, 161706 78789, 163322 78667, 163730 78594, 164317 78407, 164539 78278, 164722 78260)), ((175125 66843, 175666 66918, 176216 67092, 176682 67359, 177264 67474, 177412 67581, 177894 67817, 177985 67903, 178725 67992, 179696 68876, 179477 69104, 179137 69844, 179109 70153, 178600 70332, 177503 71086, 176672 72084, 176167 73258, 176019 74528, 176242 75811, 176818 77014, 177223 77486, 176926 78131, 176854 78951, 175356 79282, 174816 79047, 174224 79026, 174028 79035, 173644 78915, 173101 78611, 172459 78493, 171711 78151, 171142 77749, 170586 77218, 170408 76990, 170215 76637, 170136 76311, 170176 76124, 170152 75978, 169835 75644, 169547 75188, 169387 74758, 169390 74298, 170026 74498, 170085 74401, 170669 74384, 171049 74305, 171746 73998, 172129 73727, 172482 73335, 172806 72694, 172933 72050, 172808 71389, 172777 71175, 172485 70581, 172147 70193, 171776 69870, 171285 69581, 171234 68887, 170920 68832, 171119 68528, 171424 68278, 171841 68053, 172344 67895, 172480 67792, 172555 67592, 172777 67351, 173340 67068, 173777 66938, 174607 66828)), ((163354 65760, 163970 65910, 164343 65895, 164536 65960, 165068 66044, 165131 66076, 165962 65926, 167184 66505, 167051 66769, 166938 67608, 167039 68097, 166682 68361, 165847 69411, 165341 70616, 165200 71895, 165431 73163, 166023 74330, 166932 75319, 167380 75606, 167258 76511, 167426 77319, 166041 78097, 165340 78015, 164843 78144, 164635 78217, 164184 78215, 163807 78140, 163652 78166, 163030 78226, 162216 78133, 161448 77881, 160720 77521, 160211 77073, 160069 76851, 160012 76620, 159926 76483, 159475 76226, 159024 75832, 158734 75431, 158609 74971, 159101 74999, 159373 74967, 159400 74866, 159909 74687, 160269 74489, 160859 73977, 161155 73592, 161387 73096, 161515 72359, 161445 71685, 161116 71058, 161024 70862, 160560 70363, 160097 70076, 159623 69865, 159126 69743, 158885 69069, 158463 69119, 158484 68946, 158584 68703, 158775 68407, 159123 68039, 159668 67666, 159772 67521, 159830 67238, 159982 66993, 160377 66621, 160796 66339, 161548 66001, 162142 65838, 162703 65750)), ((140985 71884, 141050 72024, 141126 72408, 141111 72508, 140890 72752, 140545 73005, 140012 73426, 139507 73857, 138736 74677, 138613 74771, 138490 75005, 138089 75129, 137332 75413, 136769 75781, 136177 76205, 135679 76749, 135335 77029, 135228 76934, 135179 76477, 135232 75703, 135425 75059, 135744 74496, 136218 74025, 136664 73690, 137100 73395, 137956 72977, 138345 72892, 138927 72914, 139633 72265, 139906 72064, 140380 71859, 140783 71774)), ((179717 72178, 180380 72738, 181189 73088, 181280 73098, 181933 73368, 181782 74819, 181208 76111, 180958 76401, 179536 76229, 179536 76244, 178590 76402, 178465 76467, 178295 76267, 177902 75447, 177751 74576, 177850 73711, 178194 72911, 178760 72232, 179448 71753)), ((159420 72057, 159739 73548, 159702 73974, 158433 74683, 158444 74697, 157722 75429, 157500 75873, 157218 75805, 156279 75297, 155532 74572, 155030 73681, 154804 72684, 154872 71648, 155188 70701, 156021 71031, 156956 71100, 157884 70892, 157969 70843, 158627 70686)), ((168223 69749, 169052 70105, 169962 70206, 170055 70189, 170744 70255, 171035 71748, 170857 73204, 170694 73574, 169274 73829, 169279 73844, 168386 74288, 168164 74507, 167931 74359, 167264 73632, 166830 72775, 166659 71844, 166762 70906, 167133 70021, 167695 69297)), ((188065 70094, 188613 70212, 188891 70327, 189336 70604, 189972 71136, 190425 71618, 190641 72135, 191145 72391, 191499 72639, 191807 72961, 191926 73162, 191933 73274, 191720 73507, 191483 73619, 191259 73559, 190734 73235, 189787 72697, 189144 72472, 188926 72330, 188835 72127, 188404 71632, 187961 71197, 186889 70408, 186807 70283, 186922 70169, 187216 70092, 187648 70057)), ((153566 66090, 153724 66238, 153751 66438, 153717 66770, 153646 66879, 153436 67011, 152990 67184, 152295 67484, 151791 67723, 150936 68267, 150708 68360, 150646 68434, 150319 68427, 149515 68499, 148534 68814, 147964 69016, 147550 69280, 147311 69383, 147199 69314, 147257 68968, 147488 68304, 147776 67840, 148308 67293, 148941 66939, 149769 66648, 150468 66520, 151065 66494, 151623 66658, 152371 66264, 152711 66137, 153181 66069)), ((176689 65221, 177297 65372, 178130 65744, 178626 66060, 178964 66477, 179618 66594, 180009 66715, 180358 66900, 180621 67112, 180660 67299, 180539 67509, 180336 67709, 180060 67724, 179506 67579, 178394 67334, 177585 67292, 177298 67229, 177137 67050, 176612 66716, 176155 66489, 175106 66139, 174587 65950, 174482 65880, 174627 65706, 174905 65515, 175407 65306, 176324 65183)), ((164637 63872, 165206 64035, 165682 64363, 166411 64249, 166798 64246, 167224 64327, 167560 64462, 167656 64641, 167609 64859, 167470 65136, 167277 65248, 166643 65272, 165502 65358, 164539 65593, 164207 65620, 163991 65503, 163385 65344, 162973 65294, 161354 65257, 161021 65317, 160930 65221, 161050 64989, 161363 64592, 161422 64555, 161801 64226, 162487 63893, 163013 63795, 163773 63762))) \ No newline at end of file +MULTIPOLYGON (((124092 135655, 124492 136222, 124546 136262, 125073 136985, 124357 137909, 123408 138621, 123181 138712, 122002 137845, 121894 137430, 121972 136898, 122185 136404, 122519 135979, 122950 135655, 123448 135450, 123698 135416, 124092 135655)), ((124564 133406, 125497 133789, 126295 134396, 126902 135185, 127277 136104, 127396 137089, 127323 137572, 127621 137508, 128032 137495, 128382 137591, 128813 137487, 128878 137816, 129899 137925, 130378 138079, 130701 138296, 130940 138624, 131011 138881, 130947 139183, 130848 139392, 130343 139824, 129955 140017, 129458 140145, 128922 140297, 128768 140902, 128725 141158, 128494 141702, 128005 142404, 128045 142475, 128189 142448, 128504 142587, 128916 143032, 129285 143743, 129478 144286, 129665 144954, 129763 145484, 129831 146314, 129779 147332, 130514 147949, 131024 148350, 131272 148872, 131540 149349, 131341 149533, 130400 149904, 130438 150184, 130360 150557, 130097 150943, 129783 151157, 129171 151361, 128566 151392, 127989 151346, 127866 151309, 127799 151746, 127641 151943, 127185 152252, 126777 152415, 126312 152476, 126119 152392, 125505 151741, 124290 152430, 123664 152699, 123508 152798, 122773 153031, 122196 153235, 121692 153396, 121243 153672, 120675 154042, 120581 154090, 119907 154824, 119190 155503, 119077 155589, 118498 156123, 117512 156812, 117066 157032, 116729 157001, 116545 157040, 116274 156893, 113796 158483, 113015 158949, 112220 159375, 111061 159829, 110854 159879, 110383 160065, 109956 159900, 110025 159481, 110016 159217, 110662 158009, 110743 157931, 111602 156811, 111774 156569, 113070 154955, 111571 154623, 109718 154190, 107970 153742, 106926 153330, 106160 152862, 105696 152528, 105503 152015, 105679 151730, 105821 151368, 106599 150806, 107532 150374, 113086 148825, 111078 146659, 110355 145658, 110285 145314, 110316 144686, 110891 144378, 111670 144405, 112356 144519, 113428 144815, 115324 145372, 116325 145708, 119873 147094, 121314 147561, 121096 147878, 121766 147097, 122184 146707, 121869 146091, 121542 145321, 121391 144790, 121300 144508, 121156 143853, 121008 142837, 121009 142398, 120582 142023, 119924 142226, 119389 142290, 118939 142303, 118226 142120, 117924 141932, 117750 141703, 117709 141418, 117798 141017, 118034 140619, 118345 140298, 118808 139964, 118889 139787, 119133 139565, 119500 139378, 119979 139231, 120252 139184, 120095 138977, 119719 138058, 119601 137073, 119750 136088, 120153 135170, 120784 134383, 121601 133779, 122546 133401, 123557 133275, 124564 133406), (122999 135152, 122504 135351, 122076 135667, 121745 136080, 121534 136561, 121456 137077, 121517 137593, 121713 138075, 122031 138490, 122449 138808, 122939 139008, 123467 139077, 123997 139010, 124484 138822, 124921 138495, 125252 138082, 125463 137601, 125541 137085, 125480 136569, 125284 136086, 124966 135672, 124547 135355, 124057 135154, 123530 135085, 122999 135152)), ((87162 126364, 87660 126696, 88549 126437, 89223 126315, 89779 126352, 90296 126505, 90411 126652, 90440 126900, 90393 127180, 90306 127371, 90040 127518, 88788 127730, 87987 127942, 87394 128076, 86515 128432, 87127 128584, 87334 128684, 87284 128777, 86925 128942, 87540 128835, 88650 128521, 89816 128941, 90109 129103, 90062 129223, 90024 130246, 90328 131224, 90947 132060, 91817 132673, 92860 133007, 93966 133024, 94076 132992, 94607 132992, 94674 133085, 95198 134787, 95136 136562, 94952 137074, 93559 137465, 93568 137488, 92549 138115, 91860 138938, 91481 139906, 91443 140928, 91674 141670, 91528 141811, 90092 142802, 89254 142774, 88904 142800, 88324 143101, 88807 143193, 89503 143248, 90396 143250, 91958 143147, 92269 143236, 92481 143610, 92532 143848, 92453 144065, 92006 144328, 91355 144516, 90909 144559, 89849 144515, 89448 144960, 88679 145309, 88427 145362, 87716 145549, 86743 145623, 86119 145613, 85779 145557, 85202 145303, 84516 144845, 83951 144273, 83645 143875, 83363 143527, 82989 142910, 82915 142704, 82701 142469, 82339 141726, 81934 141500, 81484 141172, 81120 140756, 80958 140450, 80895 140146, 80981 139953, 81395 139940, 81955 139821, 82134 139746, 82142 139705, 82423 139557, 82902 139210, 83214 138917, 83574 138434, 83757 138117, 83960 137547, 84046 136586, 83916 135946, 83821 135688, 83394 135036, 83283 134849, 82830 134445, 82060 134001, 81418 133797, 81231 133769, 80908 133032, 80557 133041, 80049 133153, 80011 132965, 80048 132647, 80134 132350, 80609 131637, 81063 131208, 81238 130371, 81385 130078, 81606 129225, 81711 129075, 81796 128819, 81998 128355, 82436 127622, 82960 127059, 83458 126672, 83775 126536, 84395 126354, 85324 126229, 86333 126211, 87162 126364), (83409 142480, 83831 142934, 84368 143244, 85173 143393, 85841 143434, 86228 143402, 85550 143335, 84975 143216, 84476 143048, 83934 142799, 83512 142483, 83332 142191, 83409 142480), (84034 128717, 83396 128917, 82647 129258, 82205 129689, 81854 130315, 81888 130559, 82008 130196, 82336 129795, 82993 129268, 83774 128883, 84416 128653, 84034 128717)), ((73311 125782, 73811 125844, 74406 125943, 75327 126220, 75968 126575, 76099 126631, 76514 127133, 77432 127146, 78124 127245, 78576 127414, 79072 127752, 79133 127844, 79096 128161, 78957 128439, 78811 128585, 78458 128630, 77334 128463, 75818 128357, 74930 128417, 75477 128761, 75651 128915, 75566 128985, 75088 129025, 75745 129123, 76895 129165, 77856 129913, 78097 130171, 78024 130259, 77672 131220, 77659 132245, 77988 133232, 78628 134086, 79515 134723, 80563 135081, 80678 135085, 81159 135241, 81193 135356, 81168 137134, 80558 138805, 80223 139237, 78803 139179, 78805 139204, 77634 139488, 76732 140055, 76073 140858, 75720 141818, 75711 142581, 75504 142682, 73866 143176, 73069 142887, 72785 142818, 72114 142933, 72562 143169, 73427 143513, 74129 143734, 75492 144070, 75768 144233, 75875 144733, 75845 144933, 75707 145096, 75308 145194, 74631 145219, 74067 145095, 73072 144740, 72522 145030, 71680 145116, 71517 145088, 70705 145040, 69630 144774, 69184 144612, 68856 144433, 68417 144039, 67914 143409, 67522 142629, 67211 141799, 67170 141489, 67012 140799, 66918 140581, 66789 139746, 66599 139541, 66165 138963, 65954 138470, 65896 138141, 65930 137820, 66113 137664, 66467 137767, 67037 137827, 67256 137810, 67272 137778, 67566 137728, 68112 137553, 68594 137309, 69005 137016, 69278 136771, 69680 136246, 70025 135406, 70100 134754, 70089 134479, 69895 133760, 69837 133513, 69509 132967, 68932 132328, 68385 131938, 68238 131865, 68161 131067, 67804 130961, 67296 130913, 67311 130706, 67438 130424, 67619 130158, 67926 129944, 68140 129734, 68619 129460, 68784 129391, 69341 128492, 69464 128415, 69536 128252, 69810 127907, 69965 127637, 70330 127232, 71110 126530, 71219 126408, 71922 126010, 72474 125811, 72825 125768, 73311 125782), (67976 141379, 68375 141828, 69095 142206, 69753 142452, 69140 142160, 68792 141942, 68131 141398, 67884 141118, 67735 140877, 67976 141379), (71688 127975, 70997 128074, 70519 128313, 70103 128690, 70588 128391, 71085 128205, 71548 128084, 72361 127972, 71688 127975)), ((35087 134501, 35589 134697, 36025 135016, 36364 135435, 36587 135926, 36629 136174, 36403 136577, 35851 136996, 35813 137052, 35109 137604, 34160 136920, 33416 135997, 33316 135773, 34142 134564, 34553 134442, 35087 134501)), ((19696 118736, 20061 118865, 20651 119623, 21115 120534, 22857 126037, 24952 123954, 25927 123197, 26269 123115, 26897 123124, 27225 123688, 27225 124467, 27135 125157, 26579 127426, 26387 128154, 26085 129165, 24824 132759, 24417 134221, 24075 134003, 24891 134654, 25291 135055, 25897 134720, 26654 134366, 27179 134197, 27458 134095, 27948 133965, 29103 133745, 29557 133731, 29917 133291, 29691 132641, 29609 132109, 29579 131660, 29738 130940, 29915 130632, 30138 130449, 30422 130399, 30826 130474, 31231 130696, 31562 130996, 31913 131447, 32092 131521, 32323 131758, 32522 132117, 32687 132592, 32742 132862, 32944 132698, 33849 132291, 34829 132138, 35820 132252, 36751 132623, 37559 133227, 38191 134022, 38602 134954, 38764 135959, 38667 136970, 38318 137916, 37739 138734, 36971 139369, 36066 139775, 35087 139928, 34601 139873, 34675 140168, 34702 140578, 34618 140932, 34737 141359, 34412 141436, 34336 142463, 34201 142944, 33987 143280, 33675 143524, 33421 143605, 33117 143551, 32905 143459, 32455 142969, 32249 142588, 32104 142096, 31933 141566, 31323 141434, 31066 141399, 30513 141187, 29796 140722, 29725 140766, 29757 140909, 29631 141228, 29200 141655, 28503 142049, 27966 142261, 27305 142471, 26778 142588, 25951 142684, 24931 142668, 24340 143424, 23958 143947, 23446 144214, 22978 144498, 22787 144306, 22453 143540, 22407 143374, 22105 143425, 21729 143361, 21335 143112, 21110 142805, 20884 142201, 20832 141597, 20858 141020, 20891 140895, 20452 140843, 20250 140692, 19925 140246, 19748 139846, 19670 139382, 19747 139186, 20376 138550, 19642 137353, 19355 136743, 19252 136591, 18992 135865, 18767 135295, 18589 134797, 18298 134358, 17909 133804, 17858 133711, 17100 133063, 16397 132370, 16306 132260, 15753 131701, 15057 130786, 14794 130301, 14814 129963, 14768 129781, 14906 129504, 14533 128976, 13230 127084, 12737 126319, 12283 125540, 11789 124397, 11733 124193, 11530 123728, 11680 123296, 12101 123349, 12367 123331, 13595 123935, 13675 124013, 14825 124833, 15072 124996, 16730 126234, 17010 124726, 17379 122858, 17768 121087, 18140 120037, 18581 119256, 18899 118781, 19405 118570, 19696 118736), (34377 134071, 33902 134283, 33499 134616, 33196 135045, 33012 135542, 32962 136072, 33047 136600, 33252 137080, 33595 137504, 34018 137820, 34507 138015, 35024 138075, 35539 137995, 36015 137783, 36417 137451, 36720 137021, 36903 136524, 36954 135994, 36869 135467, 36652 134979, 36321 134562, 35897 134246, 35409 134052, 34891 133992, 34377 134071)), ((170689 142892, 171410 143026, 171653 143115, 171637 143176, 171097 143439, 170547 143588, 169808 143507, 169405 143326, 168946 143358, 168597 143243, 168568 143118, 168662 142898, 168767 142818, 169351 142775, 169939 142673, 170044 142633, 170689 142892)), ((160907 142110, 161562 142170, 161979 142473, 162850 142936, 162827 143032, 162483 143109, 161881 143141, 161141 142892, 160825 142626, 160402 142540, 160139 142358, 160136 142277, 160286 142050, 160431 142018, 160907 142110)), ((174616 135985, 175060 136201, 175419 136522, 175670 136923, 175795 137380, 175785 137861, 175631 138348, 175259 138337, 174655 138500, 174600 138535, 173815 138759, 173280 137922, 173027 136952, 173036 136732, 174185 136024, 174275 135919, 174616 135985)), ((170062 132671, 170453 132766, 170576 132850, 170532 132915, 169947 133171, 169368 133461, 169780 133339, 170541 133435, 171199 133757, 171442 133582, 171976 133419, 172324 133433, 172705 133612, 173125 134041, 173413 134612, 173940 134499, 174839 134531, 175692 134771, 176442 135203, 177038 135797, 177437 136514, 177614 137303, 177558 138113, 177270 138884, 176772 139569, 176094 140118, 175288 140494, 174405 140672, 174149 140661, 174042 140888, 173902 141429, 173579 141935, 173243 142191, 172891 142278, 172349 142228, 171950 142053, 171510 142396, 170759 142667, 170221 142624, 169834 142449, 169691 142311, 168850 141963, 169004 141574, 169745 140936, 170341 140054, 170667 139067, 170699 138046, 170436 137056, 169895 136169, 169114 135441, 168308 135014, 168208 134673, 168097 134516, 168669 134102, 168928 133737, 169022 133667, 168534 133661, 167801 133754, 167618 133617, 167562 133516, 167558 133374, 167714 133247, 167985 133160, 168341 133112, 168690 132859, 169221 132685, 169499 132633, 170062 132671), (173771 135824, 173473 135929, 173099 136140, 172847 136363, 172522 136803, 172393 137144, 172346 137626, 172454 138110, 172748 138594, 173139 138927, 173671 139162, 174074 139232, 174463 139228, 174771 139171, 174891 139250, 174870 139315, 175327 139101, 175723 138777, 176029 138364, 176194 137916, 176228 137499, 176162 137000, 175921 136519, 175568 136157, 175171 135925, 174716 135784, 174312 135750, 173771 135824)), ((167562 137186, 167902 137503, 168138 137892, 168253 138322, 168240 138769, 168098 139198, 167815 139603, 167519 139503, 166917 139484, 166856 139500, 166048 139486, 165797 138566, 165832 137603, 165898 137407, 167181 137071, 167251 137022, 167562 137186)), ((164120 132915, 164410 133110, 164398 133162, 163358 133370, 163691 133363, 164369 133634, 164937 134135, 165262 134012, 165779 133992, 166099 134091, 166399 134347, 166676 134835, 166807 135470, 167309 135502, 168150 135760, 168895 136203, 169495 136801, 169906 137513, 170102 138291, 170070 139082, 169812 139832, 169345 140489, 168700 141009, 167922 141356, 167064 141507, 166183 141452, 165924 141366, 165528 142070, 165115 142448, 164751 142599, 164404 142593, 163929 142416, 163559 142119, 163003 142352, 162269 142414, 161784 142245, 161473 141989, 161294 141695, 160695 141236, 160915 140948, 161813 140512, 162591 139834, 163144 138993, 163431 138043, 163433 137051, 163149 136084, 162599 135208, 161933 134587, 161926 134283, 161854 134088, 162387 133886, 162431 133836, 162837 133504, 162463 133399, 161761 133297, 161683 133235, 161606 133029, 161640 132897, 161820 132816, 162346 132841, 162755 132697, 163536 132689, 164120 132915), (166507 136762, 166108 136865, 165646 137127, 165406 137338, 165202 137623, 165039 138058, 165018 138535, 165171 139062, 165451 139467, 165889 139819, 166244 139984, 166600 140075, 167094 140097, 167022 140199, 167421 140129, 167833 139943, 168238 139631, 168490 139311, 168678 138913, 168742 138428, 168636 137916, 168394 137489, 168084 137178, 167702 136938, 167168 136770, 166812 136739, 166507 136762)), ((180603 140702, 180065 141164, 179695 141375, 179326 141489, 178815 141584, 178353 141526, 177868 141713, 177471 141709, 177407 141595, 177433 141350, 177515 141224, 178125 140984, 178629 140725, 178775 140615, 179474 140673, 180185 140589, 180607 140575, 180603 140702)), ((62889 122041, 63363 122244, 63896 122510, 64744 123059, 65344 123649, 65564 124188, 66453 124486, 67085 124764, 67521 125103, 67863 125519, 67873 125721, 67762 125927, 67567 126133, 67387 126243, 67088 126217, 65932 125693, 65146 125419, 64586 125201, 63655 125003, 64074 125470, 64190 125669, 64096 125718, 63707 125654, 64277 125911, 65373 126271, 66104 127272, 66256 127568, 66150 127642, 65546 128468, 65252 129451, 65297 130489, 65677 131487, 66353 132344, 67261 132976, 67370 133011, 67810 133309, 67813 133424, 67297 135126, 66251 136565, 65813 136885, 64440 136430, 64435 136455, 63231 136405, 62208 136701, 61353 137292, 60750 138118, 60526 138863, 60325 138899, 58582 138917, 57902 138424, 57597 138251, 56949 138176, 57298 138521, 57843 138956, 58464 139387, 59422 139944, 59983 140295, 60144 140493, 60106 140945, 60019 141148, 59833 141283, 59315 141252, 58671 141044, 58277 140829, 57421 140202, 56840 140345, 56465 140297, 55894 140169, 55769 140109, 55065 139860, 54109 139308, 53716 139025, 53459 138780, 53125 138246, 52817 137493, 52670 136717, 52597 135754, 52634 135032, 52687 134823, 52643 134552, 52765 133707, 52546 133275, 52357 132751, 52287 132202, 52324 131858, 52442 131570, 52621 131459, 52971 131679, 53520 131900, 53693 131933, 53722 131903, 54039 131936, 54630 131918, 55051 131849, 55620 131650, 55950 131490, 56437 131130, 57061 130360, 57296 129778, 57361 129512, 57370 128766, 57384 128512, 57233 127926, 56845 127129, 56427 126600, 56286 126472, 56431 125681, 56136 125493, 55651 125301, 55725 125124, 55933 124881, 56171 124683, 56955 124361, 57580 124255, 58193 123660, 58477 123499, 59139 122915, 59349 122825, 59523 122685, 59949 122414, 60715 122053, 61472 121876, 62101 121834, 62889 122041), (53222 134911, 53317 135523, 53588 136082, 54172 136656, 54704 137063, 55042 137253, 54519 136819, 54108 136398, 53788 135979, 53478 135470, 53306 134972, 53319 134630, 53222 134911), (59376 123634, 58734 123958, 58626 124178, 58928 123945, 59425 123795, 60020 123747, 60545 123760, 61127 123843, 61788 124013, 61435 123851, 60794 123659, 59986 123525, 59376 123634)), ((100546 121861, 100682 122333, 100647 122597, 100397 122824, 99313 123390, 99170 123506, 98475 123964, 98158 124146, 97406 124773, 98034 124724, 98262 124754, 98244 124857, 97956 125127, 98506 124831, 99459 124181, 100699 124210, 101028 124271, 101021 124399, 101309 125381, 101907 126211, 102759 126809, 103782 127115, 104874 127100, 105928 126764, 106023 126699, 106527 126531, 106620 126599, 107657 128045, 108162 129749, 108149 130293, 106951 131105, 106967 131124, 106196 132048, 105808 133040, 105756 134078, 106043 135060, 106498 135690, 106405 135871, 105357 137266, 104553 137505, 104231 137641, 103807 138091, 104189 138063, 104835 137900, 105592 137646, 106501 137319, 107030 137076, 107304 136993, 107560 136986, 107897 137292, 108027 137607, 107994 137708, 107598 138166, 107204 138442, 106690 138672, 105670 138968, 105430 139517, 105163 139785, 104715 140161, 104590 140222, 103964 140631, 102944 141051, 102480 141190, 102130 141247, 101502 141186, 100717 140972, 100114 140667, 99533 140282, 99205 140090, 98654 139621, 98520 139451, 98279 139321, 97977 139049, 97813 138839, 97650 138709, 97395 138666, 97095 138548, 96668 138448, 96197 138173, 95948 137934, 95792 137666, 95812 137455, 96201 137311, 96710 137010, 96840 136893, 96834 136852, 97054 136622, 97398 136142, 97601 135766, 97791 135193, 97863 134833, 97875 134174, 97652 133292, 97325 132724, 97153 132510, 96568 132049, 96371 131882, 95817 131644, 95419 131533, 94949 131470, 94274 131477, 94087 131511, 93548 130915, 93063 131129, 92771 131304, 92677 131137, 92609 130823, 92599 130515, 92660 130201, 92862 129619, 93117 129139, 93105 128933, 93053 128817, 93017 128288, 93063 127964, 93002 127083, 93054 126489, 93249 125544, 93266 125353, 93598 124600, 93948 124076, 94205 123846, 94725 123502, 95426 123125, 96420 122741, 97357 122607, 97940 122766, 98741 122211, 99211 121958, 99884 121768, 100380 121749, 100546 121861), (98925 139096, 99460 139378, 100070 139502, 100879 139387, 101525 139214, 101890 139059, 101218 139212, 100344 139308, 99515 139217, 99119 139106, 98744 138828, 98925 139096), (95140 125833, 94601 126224, 94000 126785, 93716 127333, 93582 128039, 93691 128260, 93689 127885, 93873 127392, 94335 126680, 94948 126072, 95485 125651, 95140 125833)), ((160677 136473, 160910 136848, 161030 137261, 161030 137682, 160909 138088, 160674 138447, 160306 138752, 160081 138602, 159526 138434, 159466 138434, 158705 138216, 158701 137300, 158974 136411, 159082 136249, 160373 136257, 160416 136233, 160677 136473)), ((157060 130960, 157457 130949, 158078 131139, 158280 131265, 158725 131699, 158726 131759, 158682 131783, 157928 131709, 158144 131770, 158691 132227, 159086 132864, 159475 132839, 159935 132961, 160202 133142, 160398 133454, 160513 133964, 160446 134627, 160888 134788, 161600 135271, 162171 135899, 162560 136629, 162742 137414, 162703 138198, 162446 138929, 161990 139557, 161365 140037, 160613 140340, 159786 140442, 158939 140338, 158131 140034, 157937 139892, 157344 140457, 156872 140681, 156505 140719, 156190 140616, 155819 140332, 155530 139905, 154912 139970, 154222 139822, 153831 139539, 153619 139219, 153487 138728, 153145 138260, 153397 138080, 154405 137921, 155319 137514, 156069 136891, 156604 136092, 156888 135174, 156899 134195, 156638 133226, 156183 132441, 156252 132194, 156240 131973, 156717 131943, 157265 131687, 157004 131520, 156413 131252, 156317 131150, 156308 130931, 156369 130820, 156563 130801, 157060 130960), (158877 135859, 158596 135986, 158328 136190, 158055 136545, 157901 136978, 157894 137505, 158038 137959, 158342 138407, 158622 138657, 158949 138853, 159391 139005, 159350 139034, 159661 139074, 160058 139027, 160549 138883, 160884 138667, 161167 138354, 161361 137929, 161406 137422, 161301 136958, 161104 136589, 160822 136264, 160379 135960, 160058 135830, 159770 135766, 159375 135749, 158877 135859)), ((181541 132724, 182048 132868, 182484 133138, 182823 133514, 183038 133970, 183116 134477, 183052 135000, 182611 135065, 182022 135341, 181972 135386, 181248 135739, 180544 134976, 180112 134028, 180080 133795, 181095 132892, 181198 132718, 181541 132724)), ((176409 130723, 176464 130790, 175794 131356, 175342 131787, 175697 131573, 176509 131443, 177152 131545, 177225 131510, 177357 131340, 177840 131015, 178189 130924, 178637 130985, 179199 131294, 179499 131602, 179692 131734, 180146 131486, 181028 131252, 181926 131231, 182781 131428, 183534 131828, 184135 132404, 184540 133117, 184725 133917, 184675 134753, 184395 135564, 183901 136297, 183230 136900, 182427 137334, 182182 137399, 182131 137805, 182144 138230, 181974 138849, 181708 139214, 181383 139410, 180822 139525, 180419 139483, 180087 139936, 179420 140425, 178883 140541, 178442 140483, 178301 140411, 178248 140443, 177330 140356, 177349 139878, 177868 139072, 178188 138024, 178213 136955, 177936 135941, 177380 135045, 176581 134335, 175593 133855, 174711 133684, 174478 133329, 174338 133221, 174868 132515, 174957 132239, 175080 132073, 174523 132234, 173815 132546, 173685 132516, 173490 132364, 173453 132246, 173564 132078, 173825 131893, 174195 131732, 174476 131358, 174899 131057, 175236 130872, 175795 130725, 176247 130696, 176409 130723), (180878 132458, 180982 132513, 180924 132499, 180353 132783, 180090 132977, 179781 133300, 179507 133808, 179409 134136, 179384 134513, 179485 135006, 179740 135456, 180180 135846, 180668 136057, 181266 136131, 181690 136078, 182269 135856, 182470 135975, 182463 136057, 182956 135615, 183270 135145, 183450 134628, 183482 134096, 183364 133585, 183105 133129, 182734 132772, 182259 132516, 181757 132394, 181222 132392, 180878 132458)), ((152640 138889, 153047 139103, 153632 139355, 153898 139726, 154498 140357, 154505 140407, 154460 140443, 153827 140353, 153612 140274, 153086 139908, 152833 139545, 152508 139371, 152335 139179, 152322 139090, 152446 138937, 152544 138885, 152640 138889)), ((104396 108493, 104829 108740, 105125 109234, 105257 109640, 105323 110060, 105323 110353, 105190 111193, 105262 111497, 105285 112197, 105348 112233, 105429 112421, 105408 112670, 105289 112942, 105065 113218, 104830 113406, 104936 113792, 104953 114257, 104880 114760, 104714 115290, 104464 115829, 104106 116405, 118382 130695, 119049 130283, 119587 130032, 120115 129867, 120620 129793, 121085 129811, 121472 129917, 121660 129675, 121936 129457, 122208 129339, 122457 129318, 122645 129398, 122683 129459, 123382 129484, 123684 129555, 124522 129423, 124817 129422, 125237 129490, 125592 129602, 126137 129918, 126386 130349, 126390 130809, 126079 131427, 125997 131502, 125491 132039, 125602 132542, 125422 132494, 124804 132501, 124369 132665, 124026 132620, 122777 132783, 121609 133263, 120598 134026, 119818 135023, 119319 136182, 119135 137428, 119156 137611, 119006 137813, 118793 138306, 118745 138843, 118784 139014, 118519 138948, 118185 139230, 117781 139626, 117266 139873, 116951 139974, 116328 139693, 116272 139684, 115975 139193, 115843 138785, 115777 138365, 115778 138056, 115951 136973, 115883 136644, 115889 136279, 115734 136213, 115636 136045, 115642 135814, 115753 135555, 116045 135214, 116325 135054, 116246 134507, 116247 134037, 116340 133532, 116524 133005, 116793 132473, 117014 132142, 102676 117815, 102231 118106, 101742 118352, 101214 118537, 100708 118630, 100238 118631, 99714 118552, 99531 118832, 99191 119123, 98931 119234, 98699 119241, 98530 119144, 98464 118989, 98010 118980, 97772 118928, 96710 119096, 96380 119101, 95960 119033, 95605 118921, 95060 118605, 95052 118549, 94771 117926, 94872 117610, 95117 117097, 95805 116393, 95730 116093, 95901 116132, 96438 116085, 96932 115872, 97133 115723, 97317 115744, 98563 115560, 99723 115060, 100719 114279, 101481 113269, 101962 112101, 102124 110853, 102078 110510, 102244 110074, 102261 109496, 102205 109281, 102703 109394, 103318 108800, 103937 108488, 104396 108493)), ((53418 106745, 53939 106972, 54358 107355, 54695 107627, 54964 107550, 54931 107721, 54996 108257, 55227 108743, 55382 108938, 55368 109124, 55596 110363, 56136 111504, 56951 112472, 57988 113199, 59171 113638, 60424 113757, 60765 113699, 61207 113849, 61785 113847, 61998 113782, 61901 114284, 62517 114879, 62850 115486, 62862 115945, 62629 116385, 62151 116697, 61745 116844, 61327 116926, 61036 116937, 60191 116833, 59890 116915, 59191 116963, 59157 117027, 58972 117114, 58723 117102, 58447 116993, 58164 116779, 57967 116550, 57585 116669, 57121 116704, 56614 116647, 56079 116500, 55533 116269, 54944 115932, 41162 130697, 41596 131350, 41866 131878, 42050 132400, 42141 132902, 42139 133368, 42046 133758, 42295 133939, 42523 134206, 42650 134473, 42680 134721, 42607 134913, 42546 134952, 42546 135652, 42486 135956, 42648 136790, 42658 137084, 42604 137506, 42505 137865, 42208 138420, 41787 138685, 41327 138704, 40698 138415, 40622 138336, 40066 137849, 39567 137977, 39609 137796, 39580 137178, 39400 136750, 39435 136404, 39228 135162, 38707 134012, 37909 133029, 36885 132284, 35710 131825, 34459 131684, 34277 131712, 34070 131569, 33569 131373, 33031 131344, 32862 131390, 32918 131122, 32625 130799, 32215 130408, 31950 129903, 31838 129591, 32097 128958, 32104 128903, 32581 128590, 32987 128444, 33405 128362, 33714 128352, 34802 128487, 35128 128408, 35494 128401, 35554 128243, 35718 128140, 35950 128138, 36212 128239, 36563 128519, 36733 128794, 37277 128695, 37746 128679, 38254 128755, 38788 128921, 39330 129171, 39668 129381, 53486 114551, 53180 114117, 52916 113635, 52713 113115, 52602 112613, 52585 112143, 52645 111616, 52359 111443, 52056 111113, 51936 110859, 51921 110626, 52012 110455, 52165 110383, 52159 109928, 52202 109689, 51997 108634, 51980 108304, 52034 107882, 52133 107523, 52420 106989, 53098 106655, 53418 106745)), ((188611 136357, 188558 136523, 188092 137083, 187780 137316, 186892 137700, 186614 137731, 186428 137707, 185904 138026, 185620 138101, 185478 138094, 185419 138027, 185381 137747, 185422 137597, 186062 137204, 186485 136873, 186679 136689, 187385 136619, 188597 136246, 188611 136357)), ((154267 133574, 154459 133866, 154567 134271, 154562 134676, 154445 135059, 154223 135393, 153910 135653, 153484 135829, 153338 135651, 152875 135340, 152819 135324, 152169 134901, 152422 134058, 152924 133318, 153068 133199, 154267 133574)), ((141037 120394, 141690 120560, 142286 120810, 143142 121272, 143270 121367, 143815 121729, 144349 122177, 144596 122346, 145107 122339, 145158 122357, 145736 122464, 146339 122644, 146616 122770, 147099 122961, 147259 123075, 147860 123381, 148008 123484, 148851 124018, 149230 124352, 149552 124591, 150101 125052, 150411 125482, 150628 125915, 150796 126540, 150780 126891, 150854 127260, 150848 127577, 150796 127830, 150975 128033, 151366 128580, 151503 128829, 151537 128659, 151886 128726, 152200 128603, 152504 128566, 152384 128432, 151861 128002, 151809 127891, 151877 127647, 151938 127607, 152124 127641, 152437 127857, 152929 127995, 153283 128240, 153597 128650, 153660 128908, 153387 128829, 153769 129371, 153962 130005, 153974 130142, 154473 130246, 154837 130455, 155041 130689, 155135 131010, 155118 131482, 154921 132027, 154838 132159, 155192 132409, 155744 133048, 156126 133788, 156310 134580, 156283 135369, 156047 136102, 155618 136730, 155027 137210, 154312 137506, 153522 137602, 152711 137489, 151935 137176, 151247 136683, 151088 136500, 150876 136682, 150356 136959, 149890 137044, 149559 136994, 149295 136822, 149041 136493, 148842 135928, 148163 135820, 147584 135522, 147301 135179, 147185 134837, 147214 134183, 146621 133944, 146030 133623, 145808 133470, 145249 133598, 144872 133568, 144527 133628, 143920 133518, 143435 133384, 142973 133123, 142189 132406, 142084 132232, 141483 131649, 141033 131096, 140656 130539, 140524 130393, 140117 129678, 139752 128845, 139601 127938, 138870 127251, 138405 126685, 137800 125856, 137443 125219, 137236 124689, 137157 124330, 137190 124074, 137380 123920, 137715 123845, 137869 123880, 137563 123237, 137306 122662, 137229 122373, 137207 121635, 137263 121533, 137168 121192, 137225 121042, 138201 120639, 138531 120565, 139259 120646, 140261 120984, 140291 120630, 140422 120424, 140672 120359, 141037 120394), (152726 132992, 152425 133116, 152084 133377, 151833 133739, 151694 134231, 151714 134688, 151888 135183, 152083 135483, 152305 135718, 152726 136006, 152988 136112, 153331 136187, 153819 136173, 154192 136052, 154529 135832, 154813 135487, 154982 135020, 155001 134594, 154904 134171, 154726 133806, 154392 133414, 153869 133080, 153507 132966, 153196 132940, 152726 132992), (151102 130149, 150586 130472, 150117 130869, 149710 131330, 149372 131844, 149116 132396, 148945 132974, 148867 133563, 148873 133713, 149317 133645, 150179 133246, 150885 132628, 151384 131834, 151641 130917, 151633 129920, 151102 130149)), ((188853 128251, 189309 128537, 189664 128941, 189893 129437, 189977 129976, 189506 130188, 188997 130633, 188960 130692, 188367 131225, 187444 130659, 186740 129837, 186639 129607, 187370 128453, 187438 128192, 187767 128105, 188326 128104, 188853 128251)), ((189034 126728, 189854 126994, 190553 127462, 191083 128101, 191408 128865, 191504 129705, 191367 130564, 191004 131380, 190442 132101, 189718 132675, 189469 132790, 189517 133340, 189579 133640, 189517 134324, 189303 134755, 189004 135015, 188446 135238, 188072 135269, 187830 135751, 187588 136033, 187221 136381, 186693 136593, 186140 136586, 186055 136660, 185092 136737, 185060 136342, 184999 136204, 185358 135339, 185496 134222, 185330 133138, 184870 132161, 184149 131356, 183214 130780, 182130 130472, 181260 130457, 180908 130083, 180765 130008, 181237 129077, 181260 128931, 181393 128662, 180786 128960, 180097 129421, 179787 129319, 179681 129168, 179761 128981, 180010 128723, 180423 128441, 180615 128033, 181326 127378, 181714 127166, 182365 126989, 182630 127056, 181951 127865, 181587 128367, 181534 128463, 181900 128108, 182719 127825, 183288 127813, 183463 127686, 183508 127602, 183945 127185, 184286 127028, 184767 127007, 185415 127228, 185666 127406, 186016 127575, 186418 127247, 187255 126859, 188147 126681, 189034 126728), (187489 127855, 187139 128019, 187214 128044, 187164 128209, 186819 128465, 186587 128709, 186329 129096, 186197 129428, 186099 130019, 186141 130409, 186333 130896, 186677 131311, 187190 131628, 187733 131757, 188355 131724, 188782 131594, 189257 131320, 189534 131451, 189542 131537, 189687 131420, 190071 130930, 190318 130372, 190412 129788, 190346 129215, 190125 128691, 189765 128255, 189292 127938, 188733 127756, 188142 127723, 187489 127855)), ((146435 134213, 146697 134472, 147140 134819, 147308 135253, 147602 135874, 147336 135848, 146858 135570, 146591 135268, 146394 134810, 146143 134549, 146075 134348, 146129 134267, 146345 134185, 146435 134213)), ((55254 116892, 55568 117460, 55656 117595, 55742 118230, 56285 118593, 56901 119048, 57153 119342, 57440 119788, 57572 120116, 57533 120301, 57350 120488, 57128 120617, 56788 120646, 56443 120407, 55937 119977, 55260 119456, 54844 119170, 54493 118887, 53652 118450, 54009 119215, 53968 119267, 53541 119100, 54016 119503, 54971 120150, 55398 121316, 55462 121641, 55340 121683, 54531 122311, 53978 123174, 53735 124184, 53825 125248, 54239 126258, 54937 127116, 55033 127181, 55375 127589, 55346 127700, 54381 129194, 52980 130289, 52470 130477, 51274 129659, 51262 129681, 50126 129304, 49054 129305, 48069 129637, 47261 130264, 46840 130920, 46639 130899, 44956 130436, 44439 129774, 44192 129521, 43586 129267, 44036 129990, 44428 130515, 44956 131131, 45224 131371, 45745 131923, 45981 132236, 45976 132576, 45858 132816, 45619 133044, 45358 133007, 45191 132915, 44943 132850, 44511 132559, 43768 131730, 43469 131350, 42892 131329, 42156 130979, 41887 130795, 44699 127784, 53934 117857, 54431 117264, 55016 116629, 55254 116892)), ((195937 129768, 195860 130057, 195632 130505, 195593 130613, 195378 130877, 194858 131337, 194579 131533, 194302 131644, 194131 131667, 193651 132176, 193398 132331, 193184 132352, 193027 132045, 193022 131952, 193089 131823, 193592 131274, 193883 130860, 194066 130560, 194726 130292, 195750 129587, 195901 129521, 195937 129768)), ((103853 119766, 104288 120210, 104125 120469, 103934 121173, 103919 121408, 104012 122022, 104210 122278, 104083 121935, 104093 121343, 104396 120318, 114444 130360, 113692 130598, 113134 130698, 112826 130679, 112464 130548, 112647 130740, 113145 130828, 113446 130836, 113955 130766, 114545 130472, 115925 131852, 115131 131920, 114302 131825, 113793 131694, 113357 131595, 112679 131334, 112497 131219, 112218 131175, 111462 130799, 110844 130890, 110260 130884, 109881 130792, 109567 130651, 109329 130450, 109278 130248, 109597 129983, 109967 129542, 110060 129375, 110041 129338, 110321 128548, 110395 128104, 110400 127630, 110339 127089, 110104 126427, 109624 125706, 109116 125270, 108891 125135, 108150 124883, 107949 124805, 107148 124754, 106406 124907, 105812 125135, 105668 125220, 104960 124837, 104569 125207, 104360 125460, 104214 125336, 104047 125063, 103934 124776, 103881 124504, 103873 123895, 103965 123302, 103590 122546, 103545 122267, 103422 122065, 103169 121405, 102926 120351, 102854 119700, 102910 118835, 103853 119766)), ((194074 121463, 194608 121670, 195061 122018, 195400 122490, 195591 123021, 195108 123363, 194678 123917, 194652 123985, 194182 124608, 193119 124215, 192238 123517, 192086 123297, 192587 122017, 192609 121677, 192912 121532, 193494 121416, 194074 121463)), ((194392 120184, 195194 120442, 195879 120910, 196402 121556, 196727 122336, 196831 123199, 196707 124085, 196365 124932, 195828 125684, 195594 125885, 195767 126123, 195984 126716, 196122 127434, 196027 127937, 195802 128285, 195303 128672, 194983 128799, 194884 129306, 194501 130066, 193978 130480, 193493 130634, 193403 130773, 192455 131129, 192317 130762, 192173 130590, 192276 129681, 192095 128541, 191625 127518, 190895 126684, 189955 126094, 188869 125790, 187711 125792, 186899 126010, 186379 125701, 186237 125672, 186541 124091, 185966 124611, 185452 125221, 185356 125287, 185103 125265, 184910 125142, 184934 124937, 185117 124586, 185484 124165, 185482 123975, 185553 123687, 185759 123300, 186091 122804, 186322 122554, 186424 122501, 186835 122211, 187112 122095, 187361 122097, 187323 122249, 186886 123093, 186642 123792, 186603 123948, 186878 123465, 187556 122989, 188084 122799, 188310 122530, 188617 122005, 188913 121752, 189398 121587, 190126 121623, 190299 121681, 190853 121804, 191160 121375, 191858 120772, 192666 120355, 193531 120154, 194392 120184), (192874 121155, 192270 121467, 191798 121877, 191953 121884, 192017 122121, 191657 122702, 191509 123163, 191483 123791, 191543 124152, 191698 124528, 192030 124960, 192492 125276, 193097 125446, 193674 125420, 194285 125209, 194674 124954, 195012 124622, 195387 124705, 195423 124880, 195641 124578, 195895 123944, 195988 123283, 195909 122639, 195668 122055, 195277 121571, 194765 121220, 194166 121028, 193521 121006, 192874 121155)), ((108523 113957, 108693 114122, 108882 114589, 108740 114897, 108213 115455, 107268 116594, 107270 116609, 106835 117251, 106538 117774, 107133 117500, 107346 117455, 107363 117560, 107187 117905, 107605 117444, 108285 116513, 109466 116126, 109792 116074, 109830 116198, 110429 117027, 111272 117611, 112274 117889, 113336 117836, 114363 117458, 115245 116790, 115312 116697, 115733 116369, 115843 116402, 117303 117419, 118347 118857, 118517 119374, 117658 120541, 117680 120553, 117264 121676, 117227 122747, 117524 123743, 118123 124572, 118762 125015, 118735 125215, 118214 126882, 117534 127375, 117273 127614, 116994 128217, 117215 128109, 118130 127520, 119340 126517, 119863 126025, 120173 125881, 120607 126046, 120800 126234, 120849 126383, 120624 126980, 120346 127370, 119465 128114, 119076 128399, 119034 128978, 118660 129697, 118463 129962, 104799 116303, 105087 116091, 105784 115729, 106383 115684, 106774 115146, 107167 114651, 107444 114378, 107880 114094, 108342 113912, 108523 113957)), ((52464 114857, 51138 116285, 50521 116016, 49862 115965, 49263 116073, 49062 116278, 49554 116116, 49967 116139, 50520 116248, 51029 116402, 42945 125074, 41892 126224, 41353 126794, 41070 126070, 40968 125476, 40984 125118, 41083 124841, 40881 125087, 40893 125171, 40825 125717, 40924 126300, 41237 126901, 40819 127359, 39905 128327, 39849 127907, 39825 127362, 39880 126680, 40086 125831, 40076 125746, 40263 125311, 40456 124734, 40492 124501, 40805 123823, 40709 123348, 40705 122390, 40887 121924, 41079 121680, 41280 121621, 41517 121887, 41924 122219, 42282 122412, 43015 122605, 43435 122661, 44113 122633, 44473 122571, 45073 122348, 45829 121809, 46247 121286, 46375 121057, 46673 120097, 46695 119280, 46529 118594, 46280 118002, 46179 117839, 46537 117118, 46163 116748, 45892 116540, 46012 116389, 46279 116213, 46562 116089, 46832 116026, 47416 115998, 48035 116068, 48222 115982, 48313 115889, 48781 115666, 49057 115612, 49236 115488, 49903 115207, 50453 115049, 51086 114893, 52121 114825, 52464 114857)), ((201591 121329, 201627 121560, 201607 121976, 201418 122564, 201282 122813, 200850 123375, 200557 123677, 200317 123828, 200116 123893, 200051 124032, 199734 124541, 199507 124752, 199325 124830, 199173 124704, 199032 124463, 199077 124295, 199479 123636, 199852 122747, 200450 122338, 200822 121965, 201287 121445, 201533 121250, 201591 121329)), ((198517 113820, 199071 114068, 199538 114473, 199862 114956, 199418 115463, 199118 116127, 199108 116202, 198802 116906, 197628 116767, 196567 116275, 196355 116085, 196545 114715, 196477 114306, 196732 114097, 197307 113834, 197917 113738, 198517 113820)), ((198923 112461, 199677 112786, 200308 113316, 200771 114013, 201034 114832, 201082 115714, 200909 116603, 200529 117434, 200350 117661, 200391 117781, 200711 118062, 200945 118499, 201236 119219, 201236 119764, 201074 120165, 200385 120949, 200374 121331, 200135 122181, 199674 122719, 199282 122944, 199196 123164, 198292 123721, 198089 123391, 197856 123202, 197782 122314, 197377 121200, 196702 120261, 195802 119563, 194741 119152, 193586 119059, 192418 119287, 191690 119643, 191030 119407, 190903 119406, 190903 118160, 190951 118098, 190950 117746, 191169 117039, 191766 116419, 192180 116158, 192356 115830, 192446 115770, 192628 115255, 192879 114937, 193350 114666, 194279 114533, 194678 114551, 194892 114629, 194966 114602, 195181 114130, 195744 113414, 196451 112856, 197253 112498, 198096 112362, 198923 112461), (197354 113042, 196685 113338, 196095 113803, 195625 114405, 195582 114499, 195877 114455, 195936 114566, 196002 114576, 195972 114618, 196032 114718, 195819 115301, 195759 115806, 195856 116450, 195989 116805, 196222 117157, 196649 117532, 197181 117763, 197830 117815, 198413 117674, 198998 117335, 199341 117000, 199577 116662, 200032 116702, 200142 117035, 200403 116468, 200547 115727, 200507 114990, 200286 114308, 199901 113725, 199375 113283, 198748 113012, 198058 112929, 197354 113042)), ((40267 105213, 40904 105374, 41401 105591, 41711 105541, 41770 105497, 42242 105424, 42513 105454, 42722 105390, 43441 105314, 43889 105331, 44392 105336, 45235 105451, 45965 105715, 46515 106023, 46736 106230, 47170 106761, 47696 107633, 48064 108489, 48247 109310, 48138 109882, 48931 110926, 49168 111391, 49284 111758, 49341 112251, 49251 112415, 49048 112538, 48548 112599, 48273 112371, 47818 111643, 47102 110619, 46768 110235, 46200 109616, 46090 109523, 46192 110217, 46178 110376, 46073 110366, 45792 110118, 46118 110627, 46843 111525, 46911 112763, 46877 113094, 46748 113098, 45791 113461, 45010 114124, 44481 115020, 44257 116063, 44357 117150, 44775 118176, 44847 118265, 45054 118753, 44994 118852, 43635 119999, 41974 120636, 41431 120665, 40527 119535, 40510 119553, 39533 118861, 38507 118548, 37468 118577, 36513 118941, 35919 119443, 35732 119364, 34262 118439, 33958 117646, 33792 117328, 33314 116949, 33364 117271, 33725 118340, 34253 119472, 34679 120272, 34716 120582, 34557 120834, 34397 120993, 34220 121095, 34019 121095, 33536 120733, 33233 120362, 32744 119320, 32568 118868, 32020 118678, 31400 118109, 30786 117289, 30295 116322, 30119 115870, 30035 115525, 30047 114895, 30199 114095, 30506 113350, 30944 112601, 30960 112518, 31383 111934, 31544 111785, 31686 111464, 32221 110892, 32242 110521, 32427 109822, 32652 109361, 32848 109119, 33139 108912, 33321 108931, 33499 109316, 33822 109776, 33961 109911, 34002 109902, 34228 110089, 34690 110375, 35100 110563, 35732 110725, 36096 110769, 36755 110729, 37642 110429, 38157 110067, 38356 109878, 38795 109221, 38923 109045, 39181 108286, 39220 107596, 39159 106928, 39110 106743, 39663 106159, 39518 105840, 39217 105417, 39374 105308, 39604 105225, 39988 105183, 40267 105213), (31929 112161, 31766 112517, 31616 113323, 31792 114132, 32016 114763, 32199 115112, 31968 114351, 31865 113781, 31843 113139, 31888 112540, 31982 112248, 32178 111968, 31929 112161), (42345 106094, 42620 106061, 42995 106127, 43659 106448, 44485 107046, 45067 107677, 44858 107350, 44465 106883, 43795 106279, 43039 106011, 42647 105975, 42345 106094)), ((98483 110332, 98523 110386, 99090 110786, 99328 111180, 99295 111430, 99091 111929, 98766 112360, 98340 112692, 97846 112905, 97315 112984, 96900 112877, 96033 111698, 96125 111471, 96835 110522, 97758 109804, 98483 110332)), ((91080 98864, 91415 99335, 91519 99975, 91702 100917, 92619 101364, 93312 101828, 93728 102169, 94221 102657, 94603 103090, 95046 103757, 95236 104332, 95204 104676, 95111 104789, 95158 104868, 95966 104768, 96592 104833, 96839 104920, 97441 105078, 98186 104311, 98544 104066, 99114 103852, 99396 103847, 99693 103936, 99883 104123, 100053 104493, 100087 104879, 99992 105365, 99591 106319, 99845 106535, 99546 106861, 99461 107215, 99250 107568, 99049 107798, 99506 107969, 100311 108550, 100934 109322, 101330 110236, 101474 111228, 101356 112231, 100983 113176, 100382 113998, 99592 114640, 98668 115062, 97673 115232, 96676 115140, 95743 114793, 94938 114212, 94314 113439, 94211 113201, 94038 113416, 93677 113763, 93337 113993, 93017 114100, 92829 114085, 92312 114328, 91882 114444, 91420 114458, 91026 114343, 90799 114170, 90680 113904, 90661 113549, 90862 112812, 91076 112450, 91392 112013, 91889 111536, 91768 110982, 91362 110758, 90440 110042, 90064 109704, 89860 109487, 89469 109098, 88955 108439, 88565 107860, 88026 108039, 87011 108248, 87402 108211, 87109 109699, 86602 113471, 86411 114512, 86253 115246, 85717 117522, 85485 118174, 85132 118869, 84585 119225, 84019 118947, 83750 118718, 83225 117601, 82305 114794, 78255 118905, 77426 119507, 76559 119915, 76174 119866, 75838 119880, 75484 119464, 75471 119130, 75417 118896, 75377 118000, 75524 116891, 75981 115140, 76499 113309, 76934 111837, 74804 112201, 74602 112221, 73205 112428, 73097 112462, 71727 112441, 71500 112306, 71101 112162, 71162 111710, 71556 111386, 71697 111231, 72658 110437, 73415 109949, 74202 109492, 76794 108095, 76795 107786, 76921 107645, 77055 107335, 77510 107022, 78544 106523, 79293 106275, 79424 106218, 80363 105921, 81333 105687, 81420 105628, 82020 105309, 82479 105052, 82864 104690, 83322 104283, 83882 103754, 84045 103665, 84615 103229, 85774 102520, 85501 101667, 85524 101457, 85803 101079, 86143 100802, 86635 100553, 86884 100509, 87299 100663, 87325 100537, 87565 100010, 87878 99501, 88360 99060, 88700 98889, 89165 98847, 89529 98959, 89755 99129, 90537 98483, 90792 98401, 91080 98864), (97078 109451, 96579 109673, 96179 110009, 95864 110441, 95669 110936, 95607 111460, 95683 111980, 95890 112460, 96216 112865, 96638 113170, 97127 113353, 97650 113401, 98172 113311, 98656 113090, 99070 112753, 99385 112321, 99580 111826, 99642 111302, 99567 110782, 99359 110302, 99033 109896, 98612 109592, 98122 109409, 97598 109361, 97078 109451)), ((114973 104031, 115269 104438, 115202 104792, 114787 105540, 114238 106663, 114065 107142, 113797 107938, 113770 108078, 114327 107654, 114474 107589, 114515 107685, 114435 108051, 114722 107519, 115156 106451, 116206 105790, 116512 105660, 116578 105771, 117360 106431, 118319 106793, 119358 106821, 120379 106512, 121281 105897, 121976 105035, 122018 104928, 122345 104510, 122461 104515, 124123 105148, 125485 106292, 125775 106752, 125224 108091, 125249 108097, 125116 109287, 125340 110336, 125869 111230, 126650 111890, 127378 112165, 127400 112368, 127296 114109, 126757 114753, 126559 115051, 126459 115653, 126716 115454, 127476 114619, 128210 113609, 128675 112892, 128957 112665, 129255 112682, 129472 112745, 129645 112850, 129743 113026, 129660 113623, 129474 114094, 128810 115002, 128499 115375, 128599 115947, 128402 116765, 127982 117700, 127374 118598, 127034 119002, 126802 119211, 126247 119507, 125473 119761, 124686 119854, 124174 119850, 123725 119860, 123007 119771, 122801 119704, 122452 119736, 121692 119546, 121368 119701, 120590 119908, 120143 119911, 119837 119858, 119514 119703, 119442 119534, 119693 119192, 119945 118669, 119990 118500, 119962 118469, 120015 118179, 120044 117636, 120016 117280, 119906 116763, 119706 116216, 119350 115660, 118658 115028, 118092 114754, 117830 114670, 117042 114606, 116827 114579, 116031 114724, 115415 115020, 114861 115400, 114723 115532, 113944 115331, 113736 115612, 113512 116081, 113339 115996, 113156 115836, 112931 115521, 112823 115262, 112657 114627, 112604 114086, 112410 113840, 112343 113810, 112051 113432, 111945 113179, 111787 113028, 111374 112437, 111171 112036, 110931 111593, 110641 110846, 110500 110035, 110502 109404, 110590 109072, 110832 108474, 111336 107595, 111909 106855, 112538 106297, 113091 106114, 113672 104798, 114177 104202, 114579 103913, 114767 103912, 114973 104031), (124839 118091, 124390 118457, 123968 118726, 123341 119022, 122994 119098, 122654 119062, 122943 119186, 123334 119156, 124111 118896, 124733 118350, 125176 117849, 125393 117519, 124839 118091), (112467 110211, 112249 110781, 112045 111659, 112178 112452, 112336 112811, 112586 113018, 112424 112792, 112300 112432, 112258 111655, 112383 110684, 112652 109869, 112467 110211)), ((191444 115423, 191420 115640, 191282 116073, 191072 116807, 190992 117420, 190987 117576, 190414 118388, 190021 119092, 189913 119196, 189714 119210, 189473 119150, 189423 118923, 189544 118500, 189864 117973, 189819 117767, 189832 117464, 189945 117078, 190275 116280, 190778 115723, 191128 115498, 191346 115413, 191444 115423)), ((205470 111663, 205593 111977, 205674 112463, 205622 113015, 205535 113332, 205205 114071, 205002 114393, 204802 114597, 204604 114716, 204560 114947, 204372 115506, 204264 115686, 204004 115901, 203750 115743, 203632 115593, 203636 115420, 203771 115007, 203916 114454, 204064 113546, 204157 113494, 204594 112966, 205202 111841, 205387 111601, 205470 111663)), ((198004 106383, 198207 106366, 198145 106516, 198238 106588, 198180 107146, 198244 107680, 198498 108300, 198719 108625, 199039 108924, 199561 109201, 200156 109304, 200825 109198, 201378 108916, 201883 108434, 202152 108008, 202280 107680, 202787 107615, 203174 108151, 203390 108601, 203887 108883, 204526 109786, 204659 110347, 204592 110794, 204413 111140, 204391 111274, 204151 111844, 204187 112080, 204153 112993, 203810 113664, 203533 113935, 203493 114245, 202706 115039, 202435 114768, 202094 114605, 201820 113783, 201148 112768, 200249 111992, 199181 111509, 198023 111354, 196845 111539, 195736 112046, 195099 112572, 195010 112530, 194340 112456, 194234 112480, 193930 111208, 193992 111071, 193935 110812, 193975 110104, 194034 109926, 194431 109251, 194715 108945, 194825 108548, 194958 108357, 195007 107923, 195184 107540, 195601 107142, 196260 106883, 196531 106755, 196797 106707, 197044 106749, 197150 106680, 197966 106341, 198004 106383)), ((59597 107782, 60571 108460, 61320 109358, 60817 110100, 60765 110142, 60386 110721, 60000 110974, 59748 110950, 59242 110763, 58800 110453, 58454 110039, 58223 109552, 58127 109024, 58219 108606, 59367 107699, 59597 107782)), ((58487 82844, 58824 83226, 58984 83361, 59812 84294, 60326 85033, 60810 85804, 62296 88346, 62605 88336, 62750 88457, 63065 88580, 63393 89023, 63928 90040, 64202 90780, 64264 90909, 64593 91837, 64861 92798, 64924 92884, 65263 93471, 65536 93921, 65911 94294, 66334 94737, 66879 95276, 66976 95438, 67438 96000, 68182 97126, 69024 96824, 69235 96839, 69622 97104, 69911 97435, 70177 97918, 70230 98165, 70090 98584, 70217 98606, 70753 98828, 71273 99124, 71729 99590, 71912 99923, 71971 100385, 71870 100754, 71710 100985, 72382 101744, 72473 101997, 72020 102302, 71561 102653, 70925 102779, 69990 102994, 69575 103926, 69136 104636, 68809 105063, 68339 105573, 67920 105969, 67269 106434, 66700 106645, 66356 106625, 66239 106536, 66169 106581, 66288 107427, 66247 108018, 66171 108259, 66032 108875, 66441 109254, 66824 109593, 67082 109942, 67314 110504, 67330 110785, 67252 111086, 67071 111283, 66719 111462, 66324 111513, 65834 111435, 64866 111066, 64659 111328, 64323 111041, 63967 110968, 63607 110769, 63370 110577, 63214 111040, 62662 111864, 61912 112514, 61012 112942, 60026 113120, 59020 113037, 58063 112698, 57220 112125, 56551 111358, 56097 110449, 55892 109462, 55949 108462, 56264 107517, 56816 106692, 57567 106043, 57801 105931, 57580 105766, 57221 105417, 56979 105084, 56861 104769, 56869 104580, 56608 104072, 56478 103646, 56448 103185, 56550 102784, 56713 102554, 56975 102426, 57329 102395, 58043 102555, 58442 102771, 58890 103072, 59384 103551, 59934 103412, 60133 103017, 60727 102181, 61151 101663, 61361 101452, 61736 101049, 62377 100512, 62941 100102, 62743 99566, 62500 98561, 62551 98951, 61053 98711, 57265 98335, 56218 98181, 54278 97816, 53186 97593, 52526 97383, 51821 97055, 51445 96519, 51703 95945, 51922 95669, 53020 95106, 55793 94087, 51542 90179, 50913 89376, 50475 88523, 50511 88137, 50485 87802, 50889 87433, 51221 87409, 51454 87346, 52349 87276, 53465 87385, 55227 87779, 57075 88233, 58562 88617, 58123 86501, 58096 86299, 57841 84910, 57803 84804, 57776 83435, 57903 83202, 58034 82798, 58487 82844), (59072 107358, 58600 107583, 58207 107922, 57916 108354, 57752 108850, 57721 109375, 57829 109893, 58066 110369, 58419 110771, 58862 111070, 59363 111248, 59889 111292, 60406 111198, 60878 110975, 61271 110634, 61562 110203, 61727 109707, 61757 109182, 61649 108664, 61409 108174, 61060 107786, 60617 107487, 60116 107308, 59589 107265, 59072 107358)), ((193915 108472, 193861 109094, 193827 109883, 193892 110456, 193922 110518, 193488 111614, 193272 112368, 193190 112498, 193009 112559, 192735 112561, 192657 112487, 192607 112231, 192636 111876, 192850 111233, 192750 111025, 192693 110746, 192697 110302, 192823 109567, 192917 109260, 193179 108761, 193260 108703, 193646 108282, 193789 108202, 193891 108195, 193915 108472)), ((36699 92895, 36958 93002, 37525 93334, 37944 93679, 38256 93716, 38325 93690, 38799 93750, 39051 93855, 39268 93848, 39981 93975, 40408 94115, 40897 94261, 41668 94602, 42297 95056, 42741 95503, 42915 95801, 43169 96401, 43432 97374, 43550 98301, 43491 99158, 43238 99660, 43442 100169, 43757 101001, 43822 101780, 43741 102270, 43609 102402, 43380 102465, 42902 102397, 42696 102143, 42445 101265, 42038 100084, 41822 99623, 41448 98871, 41368 98751, 41274 99446, 41216 99595, 41118 99557, 40917 99241, 41090 99820, 41539 100882, 41264 102092, 41140 102402, 41015 102369, 39995 102455, 39061 102876, 38306 103592, 37803 104533, 37600 105605, 37718 106706, 37763 106812, 37828 107339, 37743 107417, 36119 108144, 34348 108299, 33818 108178, 33260 106842, 33239 106854, 32486 105914, 31591 105337, 30585 105078, 29566 105164, 28857 105483, 28699 105356, 27540 104052, 27466 103216, 27396 102864, 27040 102368, 26999 102691, 27048 103780, 27247 105052, 27437 105943, 27386 106247, 27022 106533, 26769 106603, 26574 106548, 26211 106067, 26020 105627, 25837 104491, 25794 104008, 25317 103672, 24880 102954, 24517 102001, 24311 100933, 24265 100450, 24278 100106, 24463 99498, 24832 98766, 25330 98136, 25688 97783, 25998 97460, 26566 97015, 26762 96916, 26936 96707, 27657 96244, 27778 95904, 28181 95209, 28495 94891, 28749 94713, 29087 94594, 29256 94663, 29322 95082, 29514 95630, 29602 95780, 29644 95783, 29810 96026, 30174 96429, 30446 96662, 30983 97010, 31417 97194, 32062 97336, 33000 97293, 33591 97087, 33836 96961, 34439 96450, 34610 96317, 35068 95654, 35296 95006, 35420 94346, 35424 94156, 36117 93747, 36066 93400, 35892 92910, 36074 92849, 36317 92832, 36699 92895), (27028 97384, 26772 97681, 26408 98415, 26353 99240, 26395 99908, 26475 100295, 26462 99498, 26520 98922, 26676 98299, 26884 97736, 27054 97482, 27321 97267, 27028 97384), (38713 94422, 38987 94467, 39328 94634, 39879 95125, 40503 95922, 40893 96695, 40782 96323, 40533 95765, 40056 95000, 39402 94534, 39036 94391, 38713 94422)), ((121686 92539, 121884 92665, 122160 93076, 122023 93508, 121858 93786, 121612 94235, 121143 95171, 120717 96333, 120650 96657, 121194 96250, 121313 96206, 121345 96314, 121292 96503, 121590 96023, 122020 94994, 123098 94329, 123337 94229, 123420 94372, 124167 95014, 125086 95372, 126087 95407, 127070 95119, 127946 94533, 128622 93709, 128664 93607, 129030 93149, 129130 93154, 130718 93788, 132026 94890, 132295 95326, 131724 96679, 131746 96685, 131609 97836, 131816 98840, 132318 99706, 133065 100348, 133825 100643, 133705 102494, 133173 103122, 132886 103543, 132794 104063, 133086 103843, 133880 102978, 134502 102137, 134964 101440, 135287 101124, 135757 101173, 135964 101285, 136061 101458, 135974 102027, 135809 102449, 134888 103683, 134965 104251, 134799 104943, 134567 105516, 134270 106035, 134256 106078, 133863 106656, 133329 107290, 132646 107647, 131962 107861, 131195 107941, 130571 107927, 130298 107902, 130190 107937, 129669 107818, 129490 107684, 129860 107609, 130546 107369, 131100 106893, 131198 106758, 131629 106284, 132095 105565, 132155 105328, 131868 105725, 131286 106315, 130671 106808, 129847 107227, 129405 107322, 129033 107264, 128910 107283, 128715 107400, 129158 107664, 129007 107725, 128740 107734, 128348 107601, 127921 107807, 127166 108004, 126570 107991, 126090 107787, 126049 107697, 126326 107325, 126611 106751, 126559 106689, 126625 106350, 126657 105836, 126632 105477, 126532 104983, 126344 104455, 126006 103915, 125346 103302, 124656 102961, 123811 102881, 123596 102852, 122815 102988, 122226 103265, 121695 103620, 121505 103797, 120745 103598, 120583 103811, 120357 104278, 120055 104048, 119849 103753, 119738 103497, 119582 102885, 119538 102203, 119322 101948, 119241 101911, 119128 101670, 119113 101508, 119389 101721, 119552 101774, 119566 101554, 119522 101432, 119350 101213, 119194 100796, 119172 100097, 119315 99081, 119590 98269, 119839 97761, 119662 97922, 119222 98679, 118919 99425, 118745 100133, 118846 100865, 118945 101221, 118746 101122, 118403 100713, 118384 100600, 118238 100368, 117943 99818, 117664 99099, 117545 98384, 117556 97617, 117859 96886, 118244 96212, 118521 95789, 118976 95246, 119518 94783, 120067 94590, 120652 93334, 121126 92807, 121507 92538, 121686 92539)), ((201018 104760, 201629 105016, 202099 105394, 201789 106118, 201706 106870, 201720 106947, 201647 107705, 200437 107940, 199233 107794, 198956 107671, 198710 106301, 198685 106309, 198466 105831, 198635 105568, 199135 105107, 199728 104807, 200370 104689, 201018 104760)), ((194064 100544, 194191 100868, 194204 101015, 194347 101650, 194562 102424, 194810 102880, 194828 103018, 194769 103424, 194723 104249, 194746 104998, 194708 105162, 194540 105289, 194276 105375, 194154 105315, 194013 105010, 193947 104708, 193959 103978, 193786 103802, 193654 103568, 193465 102846, 193391 102322, 193382 101936, 193446 101504, 193685 100944, 193970 100537, 194064 100544)), ((206769 100603, 207034 101148, 207119 101561, 207133 101962, 207088 102489, 206936 103220, 206818 103461, 206653 103650, 206696 104009, 206687 104506, 206635 104751, 206450 105055, 206143 104987, 205969 104869, 205922 104707, 205906 104004, 205817 103137, 205739 102752, 205745 102591, 205817 102508, 206066 101711, 206133 101316, 206254 100700, 206260 100555, 206369 100222, 206461 100210, 206769 100603)), ((203186 97693, 203584 98142, 203953 98178, 204211 98282, 204503 98566, 204938 98889, 205254 99412, 205332 99878, 205301 100080, 205367 100518, 205302 101127, 205481 101635, 205580 102041, 205593 102285, 205560 102382, 205476 102911, 205332 103202, 205398 103581, 205111 104185, 204884 104634, 204547 104463, 204037 104395, 203566 103756, 202593 102983, 201477 102513, 200291 102382, 199115 102597, 198033 103146, 197117 103988, 196689 104661, 196493 104634, 195807 104777, 195730 104823, 195032 103679, 195052 103435, 194922 103095, 194763 102553, 194764 102324, 194936 101552, 195081 101218, 195051 100782, 195136 100373, 195083 100111, 195134 99675, 195423 99137, 195840 98793, 196113 98496, 196387 98363, 196628 98336, 196736 98202, 197310 97668, 197687 97509, 197666 97781, 197784 97811, 197895 98296, 198134 98809, 198582 99338, 198903 99587, 199316 99779, 199921 99885, 200542 99796, 201167 99479, 201623 99020, 201971 98371, 202098 97874, 202114 97584, 202631 97352, 203186 97693)), ((200711 95064, 201328 95309, 201276 95430, 201192 96200, 201337 96973, 201375 97045, 201523 97778, 200389 98382, 199148 98603, 198829 98564, 198189 97318, 198180 97324, 197733 96853, 197813 96569, 198182 95939, 198695 95446, 199317 95123, 200004 94992, 200711 95064)), ((191937 92877, 191986 93019, 192107 93162, 192247 93504, 192541 94034, 192898 94594, 193277 94983, 193355 95150, 193417 95704, 193640 96510, 193870 97205, 193882 97371, 193749 97558, 193517 97716, 193371 97693, 193103 97387, 192972 97138, 192759 96384, 192540 96267, 192319 96062, 191867 95297, 191678 94879, 191490 94196, 191534 93536, 191664 93014, 191751 92822, 191861 92794, 191937 92877)), ((129542 81423, 129723 81572, 129944 82004, 129790 82362, 129570 82668, 129239 83165, 128793 83892, 128293 84945, 128154 85387, 128712 85051, 128809 85032, 128820 85145, 129051 84930, 129638 83812, 130791 83233, 130971 83176, 131056 83357, 131719 84036, 132570 84455, 133526 84573, 134497 84379, 135383 83891, 136101 83158, 136150 83063, 136573 82617, 136661 82631, 138127 83378, 139293 84539, 139517 84959, 138826 86266, 138846 86273, 138618 87366, 138733 88346, 139142 89219, 139804 89897, 140538 90258, 140268 92022, 139702 92586, 139422 92930, 139170 93529, 139546 93276, 140409 92488, 140972 91851, 141338 91407, 141579 91088, 141878 90837, 142018 90827, 142358 90923, 142532 91027, 142613 91206, 142481 91741, 142289 92128, 141345 93178, 141366 93757, 141180 94344, 140884 94931, 140529 95447, 140505 95503, 140061 96023, 139626 96457, 138942 96785, 138290 96952, 137336 96960, 136823 96876, 136751 96705, 137195 96415, 137430 96145, 137942 95682, 138046 95519, 138590 94845, 138836 94245, 138218 94963, 137613 95484, 136962 95920, 136052 96308, 135625 96337, 135133 96249, 134275 96596, 133509 96735, 132942 96681, 132484 96452, 132462 96387, 132776 96031, 133061 95562, 133014 95497, 133124 95117, 133196 94634, 133204 94272, 133151 93796, 133015 93272, 132735 92726, 132149 92079, 131516 91696, 130724 91552, 130513 91505, 129753 91569, 129168 91784, 128635 92075, 128379 92277, 127654 92020, 127527 92159, 127266 92594, 127028 92371, 126781 91888, 126646 91081, 126726 90180, 126714 89933, 126557 89690, 126440 89314, 126446 88692, 126694 87547, 127056 86724, 127574 85910, 127075 86318, 126586 87037, 126462 87185, 126169 87810, 125980 88112, 125832 88623, 125647 88603, 125500 88343, 125326 87828, 125145 87225, 125113 86552, 125226 85807, 125554 85171, 125929 84643, 126318 84152, 126797 83693, 127301 83347, 127860 83196, 128535 82043, 128995 81629, 129374 81410, 129542 81423)), ((199636 87270, 200055 87402, 200643 87780, 200912 87704, 201255 87732, 201711 87979, 202058 88103, 202539 88536, 202766 89036, 202859 89176, 203157 89805, 203193 90289, 203635 90975, 203733 91245, 203730 91368, 203804 91898, 203758 92172, 203972 92591, 203796 93783, 203429 93719, 202782 93825, 202205 93397, 201024 92933, 199796 92808, 198599 93034, 197517 93594, 196624 94452, 195982 95548, 195777 96286, 195480 96336, 194842 96686, 194795 96739, 194151 96167, 193764 95798, 193702 95497, 193614 95412, 193271 94859, 193192 94753, 193103 94455, 193052 93699, 193078 93391, 192890 92935, 192826 92356, 192701 91826, 192824 91190, 193026 90885, 193230 90425, 193488 90190, 193706 90092, 194001 89429, 194314 89019, 194513 88880, 194597 89243, 194724 89240, 194948 89611, 195351 90058, 195948 90440, 196343 90589, 196810 90656, 197443 90577, 198035 90298, 198396 89940, 198556 89794, 198871 89199, 199020 88438, 198994 87918, 198941 87697, 199417 87293, 199444 87305, 199421 87258, 199636 87270)), ((27547 62860, 27755 62916, 28010 63503, 28421 64264, 28703 64697, 28851 65255, 30076 67453, 30168 67579, 30568 68287, 30818 68757, 31731 70617, 31787 70800, 32035 71087, 32493 71869, 35546 75922, 36500 77328, 36609 77586, 37399 78699, 37887 79408, 38364 79508, 39215 79856, 39695 80194, 39817 80262, 39995 80535, 39942 80622, 39702 80737, 39282 80671, 39147 80685, 38752 80591, 39952 82011, 41094 83434, 41509 84013, 42091 84787, 43174 86621, 43339 87211, 43496 87994, 43385 88351, 43242 88604, 42565 88851, 41363 88791, 41208 88801, 40379 88660, 39813 88522, 39211 88362, 39581 89376, 39612 89544, 38888 89738, 38535 89981, 38166 90122, 37776 90185, 37393 90165, 37041 90065, 36746 89891, 36512 89658, 36369 89379, 36353 89068, 36412 88864, 36174 88898, 35278 89321, 34544 90045, 34053 90993, 33869 92068, 34006 93162, 34053 93267, 34120 93748, 34032 93831, 32426 94585, 30664 94769, 30127 94657, 29566 93377, 29544 93390, 28778 92465, 27876 91905, 26869 91665, 25854 91769, 25541 91915, 25728 92232, 25744 92543, 25658 92861, 25490 93161, 25235 93423, 24912 93632, 24543 93772, 24154 93835, 23731 93801, 23210 93940, 23104 93508, 22900 93304, 22766 92963, 22267 93442, 21618 93979, 21479 94048, 20469 94699, 19760 94825, 19508 94680, 19234 94425, 18978 93668, 18833 93102, 18825 91565, 19034 89274, 19224 88036, 19657 85604, 18869 86240, 18650 86278, 18538 86214, 18553 85889, 18807 85373, 19150 84856, 19506 84457, 19634 84340, 19673 83764, 19831 82085, 19797 81805, 19920 80110, 20542 75035, 20551 74124, 20476 73693, 20347 71903, 20310 70526, 20363 69960, 20416 69198, 20400 68162, 20150 67165, 20162 65932, 20214 65387, 20164 64950, 20791 64463, 21270 64114, 21829 63926, 22668 63450, 23682 62964, 23777 62988, 25804 62860, 26380 62745, 27547 62860)), ((204081 88860, 204499 89199, 204936 89704, 205196 90366, 205294 90805, 205393 91691, 205340 91986, 205235 92212, 205411 92603, 205540 93062, 205568 93345, 205475 93711, 205152 93744, 204934 93676, 204843 93535, 204621 92884, 204400 92320, 204165 91818, 204022 91594, 203978 91401, 204037 91210, 204013 90494, 203911 89603, 203818 89246, 203826 89058, 203781 88916, 203793 88804, 203896 88759, 204081 88860)), ((187180 86278, 187812 86970, 188415 87486, 188791 87738, 189147 87916, 189311 88074, 189542 88579, 190127 89399, 190558 89954, 190630 90129, 190562 90362, 190398 90584, 190240 90613, 189870 90409, 189639 90203, 189154 89520, 188656 89385, 187996 88862, 187563 88434, 187247 88032, 187103 87766, 186945 87245, 186855 86613, 186900 86275, 186989 86185, 187180 86278)), ((197168 85399, 197155 85626, 197347 86408, 197763 87110, 197826 87167, 198210 87794, 197312 88791, 196180 89447, 195847 89524, 194812 88565, 194805 88575, 194111 88229, 194090 87955, 194231 87185, 194567 86501, 195075 85950, 195718 85566, 196455 85379, 197168 85399)), ((195006 78233, 195267 78255, 195901 78514, 196494 78983, 196918 79399, 197265 79943, 197273 80045, 197787 80444, 198002 80701, 198047 80835, 198298 81309, 198339 81534, 198749 81914, 198999 83129, 198649 83191, 197950 83583, 197336 83402, 196042 83367, 194819 83678, 193751 84312, 192908 85226, 192352 86360, 192118 87635, 192176 88369, 191819 88569, 191286 89177, 190729 88957, 189975 88628, 189775 88296, 189725 88274, 189069 87779, 188854 87489, 188548 86794, 188504 86632, 188075 86133, 187579 85132, 187468 84456, 187511 84275, 187542 83671, 187706 83350, 187895 83154, 187907 82356, 188023 81937, 188233 81618, 188497 82010, 188616 81962, 188909 82194, 189475 82491, 190184 82648, 190621 82654, 191100 82553, 191691 82249, 192169 81765, 192397 81284, 192498 81092, 192594 80398, 192562 80020, 192466 79591, 192258 79103, 192169 78969, 192506 78395, 192420 78310, 192666 78230, 193109 78210, 193905 78397, 194133 78236, 194454 78153, 195006 78233)), ((149673 84246, 149988 84518, 150010 84710, 149732 85157, 149443 85451, 148322 86112, 148157 86654, 147956 86987, 147318 87635, 146857 87983, 146808 88039, 146322 88327, 145797 88588, 145166 88707, 144489 88680, 143739 88479, 143323 88285, 143267 88152, 143642 87918, 144319 87625, 144913 87203, 145443 86790, 145961 86167, 146207 85829, 146470 85787, 146597 85702, 147623 85240, 148195 84903, 148746 84552, 149120 84292, 149423 84163, 149673 84246)), ((141736 74085, 142141 74903, 142796 75540, 143075 75670, 142937 77070, 143179 78287, 143747 79370, 144603 80245, 145688 80851, 146930 81146, 147306 81137, 147395 81857, 147800 82674, 148387 83246, 147616 84780, 146758 85218, 146369 85686, 146037 85911, 145782 86200, 145415 86506, 144834 86861, 144142 87157, 143507 87337, 142671 87456, 142333 87439, 141966 87358, 141608 87138, 141423 87100, 140729 87151, 140009 87054, 139506 86848, 139140 86502, 139138 86460, 139556 86214, 139901 85916, 139873 85835, 140129 85469, 140336 85058, 140457 84713, 140570 84061, 140578 83745, 140487 83161, 140145 82399, 139680 81858, 138999 81492, 138812 81381, 138109 81216, 137503 81238, 136937 81343, 136570 81477, 135972 81021, 135501 81402, 135373 81158, 135296 80599, 135375 80038, 135467 79723, 135717 79153, 135752 78929, 135678 78646, 135670 78295, 135927 77510, 136418 76707, 136921 76113, 137589 75535, 138075 75238, 138405 75127, 139012 74999, 139070 75012, 139500 74815, 140286 74050, 141704 73834, 141736 74085)), ((179929 81377, 181071 82011, 181536 82212, 182145 82371, 182505 82407, 182720 82539, 183202 83032, 184056 83642, 184606 84000, 184755 84178, 184754 84442, 184675 84689, 184526 84775, 184089 84698, 183776 84566, 183053 84043, 182519 84065, 181865 83859, 181116 83509, 180675 83222, 180390 82959, 180116 82572, 179841 82064, 179700 81505, 179755 81351, 179929 81377)), ((185989 71080, 186832 71314, 187349 71556, 187727 71816, 188014 72145, 188428 72296, 188756 72493, 188854 72622, 189246 72988, 189334 73143, 189928 73406, 190579 74504, 190285 74667, 189764 75253, 189713 75378, 189089 75406, 187830 75801, 186753 76508, 185932 77476, 185423 78638, 185263 79917, 185461 81227, 185742 81871, 185396 82260, 185082 83027, 183616 82909, 183248 82599, 182619 82387, 182450 82343, 182109 82109, 181583 81532, 181142 81308, 180525 80759, 180178 80316, 180131 80274, 179784 79633, 179584 78950, 179625 78601, 179749 78306, 179569 77942, 179442 77477, 179414 77008, 179526 76627, 179992 76957, 180083 76878, 180380 76982, 181051 77083, 181789 76998, 182218 76856, 182654 76594, 183133 76096, 183431 75537, 183501 74899, 183534 74685, 183395 73972, 183232 73609, 182987 73214, 182556 72737, 182695 72093, 182501 71993, 182721 71812, 183130 71645, 183568 71567, 184105 71526, 184257 71329, 184523 71154, 185168 71037, 185989 71080)), ((158603 79840, 158846 80069, 158963 80265, 158936 80450, 158567 80796, 158141 81048, 157095 81299, 156780 81789, 156315 82161, 155697 82525, 155202 82722, 154693 82883, 154179 82995, 153418 82932, 152895 82769, 152286 82421, 152015 82198, 152053 82072, 152302 81994, 152786 81921, 153349 81698, 154293 81294, 154951 80819, 155194 80600, 155289 80615, 155523 80535, 156508 80388, 157059 80235, 157754 80015, 158232 79842, 158477 79805, 158603 79840)), ((197496 78135, 198100 78371, 198607 78673, 198799 78843, 199120 79241, 199441 79761, 199802 80524, 199821 81037, 200176 81401, 200431 81761, 200586 82086, 200638 82355, 200614 82446, 200324 82595, 200083 82612, 199943 82516, 199511 81991, 198821 81205, 198384 80869, 198259 80668, 198236 80471, 197979 79837, 197640 79155, 197107 78384, 197058 78176, 197167 78112, 197496 78135)), ((189641 77564, 190094 78267, 190740 78817, 190821 78852, 191377 79310, 190831 80598, 189941 81626, 189634 81818, 188334 81244, 188330 81256, 187433 81139, 187331 80903, 187206 80078, 187307 79270, 187628 78536, 188144 77925, 188823 77480, 189555 77251, 189641 77564)), ((153900 68227, 153862 68501, 154035 69362, 154392 69961, 154194 70248, 153744 71521, 153656 72834, 153942 74098, 154578 75229, 155523 76146, 156712 76789, 157219 76912, 157188 77138, 157361 77999, 157782 78706, 156683 79939, 155900 80112, 155320 80501, 154845 80661, 154716 80681, 154494 80808, 153874 81093, 152847 81277, 152163 81287, 151337 81183, 151044 81090, 150573 80822, 150270 80502, 149645 80376, 149587 80339, 149034 80123, 148615 79817, 148349 79388, 148825 79255, 149152 79096, 149145 79001, 149528 78690, 149819 78365, 150026 78061, 150294 77484, 150379 77195, 150439 76630, 150316 75862, 150015 75220, 149478 74714, 149327 74559, 148709 74227, 148148 74099, 147602 74053, 147152 74094, 146700 73513, 146227 73735, 146184 73513, 146268 72929, 146471 72454, 146965 71780, 147011 71609, 147011 71316, 147084 71006, 147300 70610, 147592 70216, 148232 69610, 148818 69207, 149449 68892, 150033 68710, 150398 68666, 150765 68680, 150916 68630, 151144 68629, 151687 68538, 152516 68074, 153900 68227)), ((148236 76183, 148957 77593, 149036 78038, 147985 79059, 148000 79071, 147467 80005, 147269 80995, 146961 81001, 145758 80713, 144705 80126, 143874 79278, 143321 78229, 143087 77048, 143217 75737, 143637 75933, 144582 76043, 145539 75861, 146414 75403, 146487 75331, 147067 75016, 148236 76183)), ((171574 78868, 172654 79109, 173112 79158, 173708 79138, 174015 79066, 174288 79155, 174994 79533, 176053 79892, 176637 80061, 176867 80217, 176923 80386, 176933 80736, 176807 80871, 176348 80928, 175992 80895, 175545 80762, 175056 80567, 174551 80750, 173963 80765, 172984 80633, 172449 80468, 171943 80230, 171344 79672, 171079 79302, 170941 78996, 170906 78770, 171031 78763, 171574 78868)), ((165636 78432, 166154 78477, 166956 78497, 167620 78486, 167821 78588, 167910 78716, 168032 79073, 167948 79252, 167506 79450, 167139 79526, 166753 79527, 166078 79451, 165617 79807, 165057 80000, 164330 80146, 163630 80185, 162912 80093, 162193 79786, 161751 79451, 161419 79073, 161286 78847, 161370 78745, 161706 78789, 163322 78667, 163730 78594, 164317 78407, 164539 78278, 164722 78260, 165636 78432)), ((175125 66843, 175666 66918, 176216 67092, 176682 67359, 177264 67474, 177412 67581, 177894 67817, 177985 67903, 178725 67992, 179696 68876, 179477 69104, 179137 69844, 179109 70153, 178600 70332, 177503 71086, 176672 72084, 176167 73258, 176019 74528, 176242 75811, 176818 77014, 177223 77486, 176926 78131, 176854 78951, 175356 79282, 174816 79047, 174224 79026, 174028 79035, 173644 78915, 173101 78611, 172459 78493, 171711 78151, 171142 77749, 170586 77218, 170408 76990, 170215 76637, 170136 76311, 170176 76124, 170152 75978, 169835 75644, 169547 75188, 169387 74758, 169390 74298, 170026 74498, 170085 74401, 170669 74384, 171049 74305, 171746 73998, 172129 73727, 172482 73335, 172806 72694, 172933 72050, 172808 71389, 172777 71175, 172485 70581, 172147 70193, 171776 69870, 171285 69581, 171234 68887, 170920 68832, 171119 68528, 171424 68278, 171841 68053, 172344 67895, 172480 67792, 172555 67592, 172777 67351, 173340 67068, 173777 66938, 174607 66828, 175125 66843)), ((163354 65760, 163970 65910, 164343 65895, 164536 65960, 165068 66044, 165131 66076, 165962 65926, 167184 66505, 167051 66769, 166938 67608, 167039 68097, 166682 68361, 165847 69411, 165341 70616, 165200 71895, 165431 73163, 166023 74330, 166932 75319, 167380 75606, 167258 76511, 167426 77319, 166041 78097, 165340 78015, 164843 78144, 164635 78217, 164184 78215, 163807 78140, 163652 78166, 163030 78226, 162216 78133, 161448 77881, 160720 77521, 160211 77073, 160069 76851, 160012 76620, 159926 76483, 159475 76226, 159024 75832, 158734 75431, 158609 74971, 159101 74999, 159373 74967, 159400 74866, 159909 74687, 160269 74489, 160859 73977, 161155 73592, 161387 73096, 161515 72359, 161445 71685, 161116 71058, 161024 70862, 160560 70363, 160097 70076, 159623 69865, 159126 69743, 158885 69069, 158463 69119, 158484 68946, 158584 68703, 158775 68407, 159123 68039, 159668 67666, 159772 67521, 159830 67238, 159982 66993, 160377 66621, 160796 66339, 161548 66001, 162142 65838, 162703 65750, 163354 65760)), ((140985 71884, 141050 72024, 141126 72408, 141111 72508, 140890 72752, 140545 73005, 140012 73426, 139507 73857, 138736 74677, 138613 74771, 138490 75005, 138089 75129, 137332 75413, 136769 75781, 136177 76205, 135679 76749, 135335 77029, 135228 76934, 135179 76477, 135232 75703, 135425 75059, 135744 74496, 136218 74025, 136664 73690, 137100 73395, 137956 72977, 138345 72892, 138927 72914, 139633 72265, 139906 72064, 140380 71859, 140783 71774, 140985 71884)), ((179717 72178, 180380 72738, 181189 73088, 181280 73098, 181933 73368, 181782 74819, 181208 76111, 180958 76401, 179536 76229, 179536 76244, 178590 76402, 178465 76467, 178295 76267, 177902 75447, 177751 74576, 177850 73711, 178194 72911, 178760 72232, 179448 71753, 179717 72178)), ((159420 72057, 159739 73548, 159702 73974, 158433 74683, 158444 74697, 157722 75429, 157500 75873, 157218 75805, 156279 75297, 155532 74572, 155030 73681, 154804 72684, 154872 71648, 155188 70701, 156021 71031, 156956 71100, 157884 70892, 157969 70843, 158627 70686, 159420 72057)), ((168223 69749, 169052 70105, 169962 70206, 170055 70189, 170744 70255, 171035 71748, 170857 73204, 170694 73574, 169274 73829, 169279 73844, 168386 74288, 168164 74507, 167931 74359, 167264 73632, 166830 72775, 166659 71844, 166762 70906, 167133 70021, 167695 69297, 168223 69749)), ((188065 70094, 188613 70212, 188891 70327, 189336 70604, 189972 71136, 190425 71618, 190641 72135, 191145 72391, 191499 72639, 191807 72961, 191926 73162, 191933 73274, 191720 73507, 191483 73619, 191259 73559, 190734 73235, 189787 72697, 189144 72472, 188926 72330, 188835 72127, 188404 71632, 187961 71197, 186889 70408, 186807 70283, 186922 70169, 187216 70092, 187648 70057, 188065 70094)), ((153566 66090, 153724 66238, 153751 66438, 153717 66770, 153646 66879, 153436 67011, 152990 67184, 152295 67484, 151791 67723, 150936 68267, 150708 68360, 150646 68434, 150319 68427, 149515 68499, 148534 68814, 147964 69016, 147550 69280, 147311 69383, 147199 69314, 147257 68968, 147488 68304, 147776 67840, 148308 67293, 148941 66939, 149769 66648, 150468 66520, 151065 66494, 151623 66658, 152371 66264, 152711 66137, 153181 66069, 153566 66090)), ((176689 65221, 177297 65372, 178130 65744, 178626 66060, 178964 66477, 179618 66594, 180009 66715, 180358 66900, 180621 67112, 180660 67299, 180539 67509, 180336 67709, 180060 67724, 179506 67579, 178394 67334, 177585 67292, 177298 67229, 177137 67050, 176612 66716, 176155 66489, 175106 66139, 174587 65950, 174482 65880, 174627 65706, 174905 65515, 175407 65306, 176324 65183, 176689 65221)), ((164637 63872, 165206 64035, 165682 64363, 166411 64249, 166798 64246, 167224 64327, 167560 64462, 167656 64641, 167609 64859, 167470 65136, 167277 65248, 166643 65272, 165502 65358, 164539 65593, 164207 65620, 163991 65503, 163385 65344, 162973 65294, 161354 65257, 161021 65317, 160930 65221, 161050 64989, 161363 64592, 161422 64555, 161801 64226, 162487 63893, 163013 63795, 163773 63762, 164637 63872))) \ No newline at end of file diff --git a/stress_benchmark/resources/026.settings b/stress_benchmark/resources/026.settings index 83110138e7..c7c8346ba8 100644 --- a/stress_benchmark/resources/026.settings +++ b/stress_benchmark/resources/026.settings @@ -6,7 +6,6 @@ resolution=0 _plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 skin_preshrink=0.8 clean_between_layers=False -support_interface_skip_height=0.06 machine_feeder_wheel_diameter=10.0 retraction_hop_only_when_collides=True machine_steps_per_mm_y=50 @@ -44,6 +43,7 @@ cool_min_speed=5 cool_fan_enabled=True cool_fan_speed_max=100 wall_overhang_angle=90 +seam_overhang_angle=30 jerk_support_infill=20 wall_overhang_speed_factor=100 support_roof_line_width=0.4 diff --git a/stress_benchmark/resources/026.wkt b/stress_benchmark/resources/026.wkt index 5512c8ee4d..aed0cfd374 100644 --- a/stress_benchmark/resources/026.wkt +++ b/stress_benchmark/resources/026.wkt @@ -1 +1 @@ -MULTIPOLYGON (((227245 67069, 226990 67069, 226984 67075, 226984 67237, 226990 67243, 227245 67243, 227245 67582, 226990 67580, 226984 67586, 226984 67756, 226990 67762, 227245 67761, 227245 67860, 226990 67860, 226984 67866, 226984 68073, 226990 68079, 227245 68080, 227245 68588, 226990 68588, 226984 68594, 226984 68891, 226989 68897, 227163 68921, 226990 68921, 226984 68927, 226984 69286, 226990 69292, 227245 69291, 227245 70569, 226990 70569, 226984 70575, 226984 70797, 226990 70803, 227245 70807, 227245 71296, 226991 71296, 226985 71302, 226984 71369, 226990 71375, 227245 71375, 227245 71470, 226990 71470, 226984 71476, 226984 71587, 226990 71593, 227245 71593, 227245 71978, 226990 71975, 226984 71981, 226984 72080, 226990 72086, 227245 72088, 227245 72294, 226990 72294, 226984 72300, 226984 72518, 226990 72524, 227245 72524, 227245 72747, 226990 72746, 226984 72752, 226984 72819, 226990 72825, 227245 72825, 227245 73542, 225453 73542, 225447 73548, 225440 74559, 225506 75224, 225462 75588, 225479 76255, 225508 76618, 225501 77646, 225446 78404, 225452 78410, 226437 78410, 226445 78908, 226193 78909, 226187 78915, 226187 79310, 226193 79316, 226445 79317, 226445 79550, 226193 79551, 226187 79557, 226187 79884, 226193 79890, 226445 79891, 226445 80275, 226193 80275, 226187 80281, 226187 80856, 226193 80862, 226445 80863, 226445 81175, 226193 81176, 226187 81182, 226187 81812, 226193 81818, 226445 81819, 226445 83066, 226193 83067, 226187 83073, 226187 83255, 225493 83255, 225487 83261, 225491 83821, 225438 84850, 225456 85517, 225478 85879, 225453 86391, 225459 86397, 226126 86402, 225873 86995, 225879 87003, 226102 87001, 226102 88114, 226108 88120, 226328 88120, 226328 88152, 226101 88149, 226095 88155, 226095 88307, 226101 88313, 226328 88314, 226328 89584, 226108 89584, 226102 89590, 226102 89704, 226108 89710, 226328 89708, 226328 91149, 226223 91150, 226217 91156, 226217 91908, 226223 91914, 226328 91920, 226328 92963, 226223 92963, 226217 92969, 226217 93103, 225964 93104, 225958 93110, 225958 93161, 225964 93167, 226217 93167, 226217 95188, 225416 95189, 225410 95195, 225426 95804, 225446 96167, 225360 97076, 225437 97818, 225443 97824, 226102 97824, 226102 98907, 225845 98911, 225839 98917, 225839 99189, 225845 99195, 226102 99194, 226102 99575, 225845 99576, 225839 99582, 225839 99747, 225845 99753, 226102 99753, 226102 100735, 225845 100736, 225839 100742, 225839 101172, 225845 101178, 226102 101187, 226102 101794, 225849 101795, 225843 101801, 225843 102079, 225849 102085, 226102 102085, 226102 102671, 226108 102677, 226328 102677, 226328 103417, 226078 103418, 226072 103424, 226072 103529, 226078 103535, 226328 103536, 226328 103876, 226078 103876, 226072 103882, 226072 103965, 226078 103971, 226328 103972, 226328 105663, 226078 105664, 226072 105670, 226102 106506, 226108 106512, 226326 106515, 226328 107522, 225845 107522, 225839 107528, 225839 108097, 225845 108103, 226102 108104, 226102 109286, 225849 109295, 225843 109301, 225839 109506, 225845 109512, 226102 109512, 226102 110132, 225848 110133, 225842 110139, 225839 110519, 225845 110525, 226101 110528, 226102 110781, 225845 110782, 225840 110791, 225907 110931, 225912 110934, 226102 110932, 226102 111002, 225354 111011, 225348 111017, 225348 112385, 225354 112391, 227245 112391, 227245 112760, 226990 112761, 226984 112767, 226984 112929, 226990 112935, 227245 112943, 227245 113270, 226990 113271, 226984 113277, 226984 113441, 226990 113447, 227245 113446, 227245 113551, 226990 113551, 226984 113557, 226984 113766, 226990 113772, 227245 113773, 227245 114277, 226990 114277, 226984 114283, 226984 114583, 226989 114589, 227170 114615, 226990 114616, 226984 114622, 226984 114977, 226990 114983, 227245 114984, 227245 118010, 226990 118007, 226984 118013, 226984 118131, 226990 118137, 227245 118132, 227245 118384, 226990 118384, 226984 118390, 226984 118639, 226990 118645, 227245 118645, 227245 119233, 226108 119235, 226102 119241, 226102 120595, 225845 120595, 225839 120601, 225839 120718, 225845 120724, 226102 120724, 226102 121461, 225845 121461, 225839 121467, 225839 121665, 225845 121671, 226102 121671, 226102 122121, 225845 122121, 225839 122127, 225839 122298, 225845 122304, 226102 122304, 226102 124096, 226108 124102, 226442 124102, 226445 124697, 226193 124697, 226187 124703, 226187 125088, 226193 125094, 226445 125095, 226445 125523, 226193 125523, 226187 125529, 226187 126249, 226193 126255, 226445 126255, 226445 126627, 226193 126628, 226187 126634, 226187 126890, 226193 126896, 226445 126897, 226445 127186, 226193 127186, 226187 127192, 226187 127798, 226193 127804, 226445 127804, 226445 128946, 224785 128946, 224779 128952, 224779 129517, 224785 129523, 226649 129521, 226398 129955, 226403 129964, 226653 129967, 226653 131422, 226403 131430, 226397 131436, 226397 131958, 226403 131964, 226653 131963, 226653 132046, 226403 132045, 226397 132051, 226397 132594, 226403 132600, 226653 132600, 226653 134381, 226223 134381, 226217 134387, 226217 135971, 226142 134388, 226136 134382, 224785 134382, 224779 134388, 224779 137945, 224785 137951, 226223 137953, 226229 137947, 226229 136503, 226294 137947, 226300 137953, 226712 137957, 226712 139626, 226455 139626, 226449 139632, 226449 139900, 226455 139906, 226712 139906, 226712 141083, 226455 141082, 226449 141088, 226449 141134, 226455 141140, 226712 141140, 226712 141277, 226455 141277, 226449 141283, 226449 141825, 226455 141831, 226712 141831, 226712 142331, 226455 142332, 226449 142338, 226449 142401, 226455 142407, 226712 142407, 226712 142615, 226455 142616, 226449 142622, 226459 142744, 226465 142750, 226711 142751, 226712 142796, 224785 142802, 224779 142808, 224779 143516, 224785 143522, 226102 143522, 226102 145446, 225845 145446, 225839 145452, 225839 145935, 225845 145941, 226102 145942, 226102 146021, 225845 146021, 225839 146027, 225839 146451, 225845 146457, 226099 146458, 226102 147972, 225845 147969, 225839 147974, 225840 147978, 226103 148372, 226108 148375, 226316 148375, 226328 149112, 226078 149112, 226072 149118, 226072 149361, 226078 149367, 226328 149368, 226328 153220, 226108 153220, 226102 153226, 226102 154927, 225845 154928, 225839 154934, 225839 155171, 225845 155177, 226102 155177, 226102 156352, 225845 156352, 225839 156358, 225839 156420, 225845 156426, 226102 156427, 226102 156561, 225845 156562, 225839 156568, 225839 157112, 225845 157118, 226102 157121, 226102 157615, 225845 157617, 225839 157623, 225839 157675, 225845 157681, 226102 157680, 226102 157885, 225845 157886, 225839 157892, 225849 158015, 225855 158021, 226102 158022, 226102 158077, 226108 158083, 227245 158083, 227244 158453, 226990 158448, 226984 158454, 226984 158620, 226990 158626, 227245 158632, 227245 158961, 226990 158962, 226984 158968, 226984 159133, 226990 159139, 227245 159139, 227245 159242, 226990 159242, 226984 159248, 226984 159457, 226990 159463, 227245 159476, 227245 159968, 226990 159968, 226984 159974, 226984 160270, 226989 160276, 227170 160304, 226990 160303, 226984 160309, 226984 160670, 226990 160676, 227245 160674, 227245 167473, 226990 167474, 226984 167480, 226984 168402, 226990 168408, 227245 168408, 227245 168479, 226990 168478, 226984 168484, 226984 169332, 226990 169338, 227245 169325, 227245 169495, 224469 169495, 224469 169241, 224463 169235, 223759 169235, 223753 169241, 223749 169495, 222914 169495, 222914 169241, 222908 169235, 221659 169235, 221653 169241, 221652 169495, 221007 169495, 221006 169241, 221000 169235, 220380 169235, 220374 169241, 220375 169495, 219261 169495, 219261 168649, 219255 168643, 208976 168643, 208970 168649, 208970 169036, 206691 169036, 206691 168649, 206685 168643, 196409 168642, 196403 168648, 196403 169269, 195311 169269, 195311 169014, 195305 169008, 194631 169008, 194625 169014, 194625 169269, 192872 169269, 192873 169014, 192867 169008, 192673 169008, 192667 169014, 192667 169269, 192297 169269, 192299 169014, 192293 169008, 192088 169008, 192082 169014, 192082 169269, 189562 169269, 189562 168649, 189556 168643, 180417 168642, 180411 168648, 180411 169036, 178136 169036, 178135 168216, 178129 168210, 175932 168209, 175926 168215, 175943 168640, 173850 168644, 173849 168641, 173843 168637, 171956 168643, 171547 168400, 171546 168399, 170399 168034, 170397 168034, 168420 168029, 168414 168035, 168414 169036, 166140 169036, 166140 168646, 166134 168640, 157003 168641, 156997 168647, 156997 169269, 156085 169269, 156088 169014, 156082 169008, 155625 169008, 155619 169014, 155621 169269, 154599 169269, 154603 169014, 154597 169008, 154534 169008, 154528 169014, 154528 169269, 154490 169269, 154489 169014, 154483 169008, 154298 169008, 154292 169014, 154292 169269, 152655 169269, 152654 169014, 152648 169008, 152525 169008, 152519 169014, 152516 169269, 151890 169269, 151890 169014, 151884 169008, 151736 169008, 151730 169014, 151730 169269, 150150 169269, 150150 168649, 150144 168643, 139866 168642, 139860 168648, 139860 169036, 137585 169036, 137585 167495, 137579 167489, 137058 167491, 137052 167499, 137397 168640, 127296 168642, 127290 168648, 127290 169495, 126418 169495, 126418 169241, 126412 169235, 126036 169235, 126030 169241, 126035 169495, 125232 169495, 125232 169241, 125226 169235, 124834 169235, 124828 169241, 124828 169495, 124577 169495, 124577 169241, 124571 169235, 124083 169235, 124077 169241, 124077 169495, 122883 169495, 122883 169241, 122877 169235, 122176 169235, 122170 169241, 122171 169495, 122090 169495, 122090 169241, 122084 169235, 121255 169235, 121249 169241, 121249 169495, 119308 169495, 119308 165781, 119591 165784, 119597 165778, 119597 165480, 119591 165474, 119308 165474, 119308 163404, 119521 163406, 119527 163401, 119522 163394, 119308 163352, 119308 159313, 119563 159311, 119569 159305, 119569 159189, 119563 159183, 119308 159184, 119308 158933, 119563 158932, 119569 158926, 119569 158681, 119563 158675, 119308 158675, 119308 158083, 127290 158083, 127290 158200, 127043 158201, 127037 158207, 127037 158549, 127043 158555, 127290 158555, 127290 158659, 127043 158659, 127037 158665, 127037 158939, 127043 158945, 127290 158945, 127290 158983, 127043 158983, 127037 158989, 127037 159644, 127043 159650, 127290 159651, 127290 160412, 127043 160413, 127037 160419, 127037 160720, 127043 160726, 127290 160729, 127290 162555, 127296 162561, 127861 162525, 128427 162475, 128590 162505, 128592 162505, 129210 162420, 129891 162457, 130618 162512, 130619 162512, 130783 162484, 131352 162505, 131515 162540, 131517 162540, 132154 162460, 132814 162549, 132815 162549, 132977 162540, 133623 162615, 133626 162615, 134279 162417, 134374 162442, 134465 162875, 134398 163326, 134403 163333, 134678 163379, 134680 163379, 135079 163315, 135084 163309, 135084 162492, 135735 162516, 135898 162510, 136467 162516, 137191 162498, 138043 162546, 138044 162546, 138654 162459, 140111 162372, 140503 162437, 140510 162433, 140509 162428, 140101 161648, 139893 160969, 139880 160697, 140338 160134, 141078 159828, 141293 159776, 142020 159562, 142172 159500, 142699 159443, 143513 159519, 143515 159519, 144637 159393, 145596 159154, 145951 159158, 146133 159275, 146444 159683, 146715 160227, 146776 160783, 146655 161124, 146112 161461, 146111 161462, 145990 161586, 145496 161966, 144801 162259, 144610 162372, 144606 162380, 144611 162384, 145222 162476, 145385 162487, 145953 162553, 145956 162552, 146112 162481, 146112 162482, 146684 162399, 146846 162449, 146848 162449, 147578 162465, 148141 162498, 148304 162486, 148998 162564, 148999 162564, 149605 162411, 150143 162472, 150150 162466, 150150 161511, 151678 161511, 151698 161761, 151704 161767, 151962 161767, 151968 161761, 151969 161511, 152625 161511, 152625 161761, 152631 161767, 152732 161767, 152738 161761, 152738 161511, 154268 161511, 154268 161761, 154274 161767, 154854 161767, 154860 161761, 154859 161511, 155741 161511, 155738 161761, 155744 161767, 156146 161767, 156152 161761, 156153 161511, 156997 161511, 156997 162479, 157002 162485, 157680 162589, 157682 162589, 158669 162428, 159645 162455, 160580 162398, 161423 162492, 162350 162458, 163285 162466, 163379 162476, 164315 162453, 165298 162384, 165298 163176, 165300 163181, 165556 163384, 164994 163384, 164988 163389, 164991 163395, 165549 163674, 165553 163675, 166485 163496, 167428 163719, 167431 163719, 168361 163400, 168365 163393, 168359 163388, 166187 163384, 166456 163181, 166458 163176, 166455 162472, 167112 162564, 167114 162564, 167951 162480, 168885 162541, 169913 162562, 170756 162473, 171693 162528, 172628 162505, 173555 162444, 173646 162450, 174491 162382, 175428 162428, 175519 162417, 176454 162408, 177299 162446, 177395 162443, 178234 162491, 179163 162419, 179253 162434, 179254 162434, 180188 162395, 181123 162508, 182059 162449, 182904 162528, 183929 162518, 184769 162587, 185703 162463, 185794 162471, 186637 162447, 186728 162464, 187574 162535, 187575 162535, 188300 162510, 188388 162735, 188389 162736, 188795 163369, 188798 163371, 188909 163420, 188913 163421, 189430 163272, 189430 165717, 157004 165717, 156998 165723, 156997 166072, 157003 166078, 189556 166078, 189562 166072, 189562 161511, 191348 161511, 191349 161761, 191355 161767, 192311 161767, 192317 161761, 192317 161511, 193982 161511, 193982 161761, 193988 161767, 194499 161767, 194505 161761, 194505 161511, 195337 161511, 195337 161761, 195343 161767, 195749 161767, 195755 161761, 195754 161511, 196098 161511, 196098 161761, 196105 161767, 196297 161722, 196302 161716, 196296 161511, 196403 161511, 196403 162457, 196410 162463, 196900 162404, 197629 162425, 198360 162496, 198362 162496, 198641 162446, 199706 162536, 200549 162486, 200828 162530, 201559 162544, 202291 162522, 203473 162451, 204200 162520, 204202 162520, 204479 162466, 205211 162515, 205942 162505, 205943 162505, 206674 162390, 207124 162505, 207126 162505, 207405 162458, 208136 162488, 208137 162488, 208310 162452, 208308 163176, 208310 163180, 208516 163390, 208522 163392, 208721 163316, 208723 163314, 208852 163180, 208854 163176, 208851 162429, 209590 162419, 210043 162520, 210044 162520, 210594 162475, 210600 162467, 210346 161818, 210371 161465, 211497 161539, 211438 162437, 211444 162443, 212510 162450, 213235 162392, 213965 162501, 214696 162406, 215235 162523, 215237 162523, 216161 162429, 216614 162487, 217623 162463, 218640 162594, 218642 162594, 219256 162493, 219261 162487, 219261 161492, 219515 161120, 219514 161113, 219510 161111, 219261 161114, 219261 160157, 219510 160157, 219516 160151, 219516 159857, 219510 159851, 219261 159850, 219261 159793, 219510 159793, 219516 159787, 219516 159487, 219510 159481, 219261 159480, 219261 158083, 220320 158083, 220326 158078, 220440 157452, 220440 157450, 220346 156631, 220325 156106, 220283 155605, 220198 155079, 220338 154584, 220454 154062, 220454 154059, 220358 153042, 220356 152016, 220288 151516, 220262 150836, 220297 149974, 220363 149479, 220382 148957, 220382 148956, 220354 148457, 220328 147648, 220428 146906, 220428 146905, 220326 144750, 220412 143848, 220388 143345, 220269 142612, 220241 141795, 220357 141301, 220357 141300, 220387 140778, 220341 140283, 220350 139761, 220345 139258, 220412 138728, 220382 138231, 220363 137707, 220416 137210, 220416 137209, 220352 136686, 220408 135667, 220369 135170, 220416 134646, 220416 134645, 220343 134005, 220337 134000, 220332 134002, 219840 134589, 219514 135107, 219514 135108, 219268 135632, 218960 135837, 218600 135853, 218764 134811, 218764 134810, 218730 134202, 218703 134013, 218682 133256, 218751 132744, 218978 132119, 219163 131926, 219319 131914, 220301 132315, 220309 132310, 220392 131562, 220915 132039, 220916 132040, 221190 132185, 221199 132182, 221298 131884, 221298 131880, 221102 131391, 221284 130411, 221284 130409, 221157 129838, 221294 129343, 221294 129339, 221096 128808, 221095 128806, 220713 128313, 220825 127788, 220878 127295, 221223 126269, 221223 126266, 221014 125734, 221035 125240, 221034 124711, 221057 123989, 221051 123983, 220774 124006, 220516 123795, 220453 123591, 220495 123160, 220796 122897, 221048 122925, 221312 123196, 221320 123197, 221322 123190, 221094 122662, 221093 122660, 220732 122171, 221247 121143, 221248 121140, 221271 120612, 221271 120611, 221201 120118, 221201 120117, 220975 119586, 220907 119242, 220901 119237, 219261 119233, 219261 119119, 219510 119118, 219516 119112, 219516 118766, 219510 118760, 219261 118760, 219261 118659, 219510 118659, 219516 118653, 219516 118382, 219510 118376, 219261 118376, 219261 118338, 219510 118338, 219516 118332, 219516 117672, 219510 117666, 219261 117665, 219261 116906, 219510 116905, 219516 116899, 219516 116598, 219510 116592, 219261 116592, 219262 114315, 219510 114306, 219516 114301, 219510 114294, 219261 114295, 219261 112391, 220841 112391, 220847 112387, 221050 111839, 221050 111837, 221014 111387, 221022 110806, 220952 110353, 220952 110351, 220750 109767, 220762 109043, 220760 109038, 220453 108776, 220405 108436, 220457 108195, 220699 107922, 220852 107919, 220858 107914, 220989 107261, 220989 107258, 220791 106679, 220842 106226, 221239 105646, 221239 105640, 221156 105505, 221147 105504, 216915 109727, 216033 109405, 214963 108409, 214452 107979, 214451 107978, 213681 107594, 213371 107375, 212547 106935, 211403 106009, 211562 105698, 212552 104750, 213538 103841, 214308 103230, 215723 102292, 216185 102093, 216188 102091, 216287 101957, 216337 103856, 216349 105765, 216349 105767, 216447 106048, 216512 106854, 216587 107247, 216593 107253, 216597 107251, 220091 103755, 220811 104470, 220820 104469, 221263 103584, 221263 103579, 221059 103129, 220871 102551, 220947 102098, 220971 101514, 221067 101064, 221071 100687, 221067 100680, 221061 100682, 220750 100992, 220256 101278, 220274 100887, 220410 100296, 220410 100294, 220319 99858, 220225 99273, 220317 98834, 220416 98242, 220416 98240, 220352 97801, 220287 97211, 220312 96773, 220321 96183, 220351 95746, 220359 95157, 220325 94719, 220321 94129, 220366 93690, 220348 93097, 220304 92656, 220339 92062, 220357 90818, 220357 90817, 220242 90014, 220319 89575, 220378 88983, 220378 88981, 220285 88540, 220282 87945, 220291 87509, 220271 86485, 220305 85897, 220356 85458, 220282 84563, 220331 83830, 220315 83392, 220329 82802, 220310 82365, 220361 81456, 220302 80312, 220290 79718, 220313 79278, 220275 78685, 220325 78250, 220361 77664, 220209 76490, 220384 75561, 220384 75560, 220281 74137, 220277 73548, 220271 73542, 219261 73542, 219261 73001, 219510 73001, 219516 72995, 219516 72676, 219510 72670, 219261 72670, 219261 72463, 219510 72462, 219516 72456, 219516 72363, 219510 72357, 219261 72357, 219261 71786, 219510 71786, 219516 71780, 219516 71703, 219510 71697, 219261 71694, 219261 71498, 219510 71497, 219516 71491, 219516 71440, 219510 71434, 219261 71434, 219261 70120, 219515 69761, 219514 69754, 219510 69752, 219261 69759, 219261 68779, 219510 68780, 219516 68774, 219516 68408, 219510 68402, 219261 68402, 219261 68364, 219510 68363, 219516 68357, 219516 68034, 219510 68028, 219261 68027, 219261 66700, 227245 66700) (144376 167490, 144370 167495, 144372 167501, 145656 168487, 145665 168486, 146401 167499, 146400 167491, 146396 167489) (172799 163384, 172793 163389, 172797 163396, 173032 163462, 173034 163462, 173970 163489, 174906 163551, 175836 163689, 176780 163706, 177705 163647, 177708 163646, 178100 163395, 178102 163387, 178097 163384) (183060 163384, 183054 163389, 183057 163395, 183301 163540, 183305 163541, 184248 163435, 185182 163643, 185184 163643, 186167 163396, 186172 163389, 186166 163384) (199854 163384, 199848 163389, 199852 163396, 200299 163570, 200302 163570, 200517 163552, 201029 163551, 201243 163531, 201760 163641, 201762 163641, 201975 163614, 202737 163580, 202739 163579, 203118 163395, 203121 163388, 203115 163384) (217539 163384, 217533 163389, 217537 163396, 218039 163566, 218044 163565, 218344 163395, 218347 163388, 218341 163384) (179270 163384, 179264 163389, 179267 163395, 179567 163563, 179570 163564, 180513 163491, 180515 163491, 180852 163396, 180856 163389, 180850 163384) (169846 163384, 169840 163389, 169844 163396, 170235 163552, 170239 163552, 170763 163396, 170767 163389, 170761 163384) (203735 163384, 203729 163389, 203733 163396, 204163 163545, 204168 163544, 204471 163395, 204474 163388, 204468 163384) (197345 163384, 197339 163389, 197344 163396, 197592 163444, 197593 163444, 198102 163431, 198320 163542, 198326 163542, 198646 163395, 198649 163388, 198643 163384) (137874 163384, 137868 163389, 137872 163396, 138235 163507, 138239 163507, 138561 163396, 138565 163389, 138559 163384) (206747 163384, 206741 163389, 206745 163396, 207083 163506, 207088 163505, 207258 163395, 207260 163387, 207255 163384)), ((169671 152745, 170202 153253, 170927 154227, 171257 154872, 172153 156116, 172154 156117, 172595 156617, 172917 156954, 173092 157304, 172987 157689, 172694 158108, 171814 158747, 171209 159113, 168206 162129, 167381 161300, 168670 160011, 168668 160001, 168308 159867, 168306 159867, 168001 159850, 167818 159755, 167815 159754, 166727 159747, 164129 158681, 164503 158259, 165428 157177, 166125 156075, 167136 154902, 167137 154901, 167379 154495, 168150 153502, 168929 152985, 169515 152732)), ((100335 154873, 100340 154879, 100345 154877, 100551 154669, 100556 161492, 99605 161493, 99601 161445, 99595 161439, 99589 161445, 99586 161493, 98435 161494, 98436 161278, 98430 161272, 98139 161270, 98133 161276, 98133 161494, 96286 161493, 96282 159681, 96419 159684, 96425 159678, 96423 159138, 96417 159132, 96282 159132, 96282 157636, 96416 157636, 96422 157630, 96422 156997, 96416 156991, 96282 156991, 96282 156341, 96416 156341, 96422 156335, 96422 156136, 96416 156130, 96282 156131, 96282 155856, 96416 155857, 96422 155851, 96422 155697, 96416 155691, 96282 155692, 96282 155622, 96416 155614, 96422 155608, 96416 155602, 96282 155601, 96283 154664, 98837 154659, 98852 154874, 98858 154880, 98864 154874, 98865 154659, 100335 154658)), ((113941 158262, 113941 158347, 113947 158353, 114063 158357, 114069 158351, 114069 158266, 115991 158269, 115992 158353, 116001 158358, 116150 158269, 116153 161190, 115333 161187, 115308 161095, 115301 161091, 115296 161097, 115297 161188, 114461 161184, 114461 161101, 114454 161095, 114400 161101, 114395 161107, 114399 161186, 112729 161180, 112734 160582, 112838 160582, 112844 160576, 112843 160173, 112837 160167, 112730 160167, 112734 159565, 112836 159562, 112842 159556, 112843 159414, 112837 159408, 112733 159408, 112729 159098, 112834 159099, 112840 159093, 112842 158918, 112836 158912, 112731 158911, 112728 158786, 112832 158787, 112838 158781, 112840 158710, 112834 158704, 112745 158703, 112810 158668, 112813 158661, 112807 158657, 112729 158655, 112723 158260)), ((212508 156972, 213258 157082, 214087 157279, 214550 157455, 214547 157486, 214552 157493, 214990 157537, 214510 157514, 214506 157516, 212112 159731, 211970 159822, 211968 159823, 211598 160294, 210953 161072, 210811 161123, 210611 161054, 210559 160792, 210558 160790, 210322 160346, 210131 159148, 209693 157491, 209679 156920, 209750 156738, 209938 156695)), ((203880 156686, 203601 159222, 196085 157828, 196554 157073, 197215 156043, 197543 155514)), ((195255 155681, 195043 157633, 193835 157414, 194047 155461)), ((159674 152760, 159585 152853, 159587 152863, 160214 153127, 160220 153125, 160317 153030, 160382 153055, 160285 153144, 160287 153154, 160903 153412, 160909 153410, 161010 153319, 162717 154035, 162622 154119, 162621 154126, 162625 154129, 163265 154271, 162240 155265, 162212 155281, 162211 155282, 161826 155652, 161787 155703, 160816 156619, 160196 157240, 158599 156572, 158686 156482, 158684 156472, 158540 156414, 158534 156416, 158434 156506, 157501 156113, 157589 156026, 157587 156017, 157411 155940, 157405 155941, 157314 156035, 156754 155802, 156837 155709, 156835 155699, 156653 155622, 156647 155624, 156545 155717, 154422 154829, 155476 153824, 155672 153893, 155679 153890, 155676 153882, 155498 153803, 156117 153176, 156316 153262, 156322 153260, 156453 153142, 156451 153132, 156262 153060, 156331 152993, 156521 153066, 156527 153064, 156837 152754, 156835 152744, 156662 152677, 157046 152315, 157252 152362, 157259 152358, 157256 152351, 157202 152325, 157244 152341, 157251 152338, 157249 152330, 157093 152252, 157515 151856)), ((191588 155004, 191377 156957, 190166 156733, 190372 154777)), ((187923 154328, 187711 156278, 186494 156055, 186708 154102)), ((184316 153071, 184042 155601, 181606 155154, 181880 152620)), ((100281 128668, 100286 128674, 100292 128671, 100566 128252, 100575 139194, 100569 140910, 100578 141934, 100041 141938, 99816 141814, 99807 141819, 99812 141946, 99440 141938, 99410 141503, 99404 141497, 99398 141503, 99399 141939, 99298 141939, 99297 141500, 99291 141494, 99078 141507, 99072 141513, 99076 141937, 98910 141942, 98910 141508, 98904 141502, 98610 141494, 98604 141500, 98588 141940, 98449 141946, 98449 141508, 98443 141502, 97975 141499, 97969 141505, 97986 141941, 97882 141933, 97882 141504, 97876 141498, 97530 141503, 97524 141509, 97523 141943, 96297 141941, 96298 136253, 96433 136229, 96438 136223, 96432 136217, 96298 136218, 96294 134335, 96425 134335, 96431 134329, 96435 133824, 96429 133818, 96296 133818, 96296 133498, 96429 133499, 96435 133493, 96431 132123, 96425 132117, 96294 132117, 96295 130523, 96426 130522, 96432 130516, 96432 130278, 96426 130272, 96294 130271, 96294 130167, 96426 130149, 96431 130143, 96425 130137, 96296 130137, 96291 128241, 98238 128239, 98228 128673, 98234 128679, 98423 128681, 98429 128675, 98430 128241, 98690 128239, 98682 128668, 98688 128674, 98875 128685, 98881 128679, 98877 128239, 100284 128238)), ((134104 134524, 134096 134617, 134094 135586, 133961 135587, 133955 135593, 133944 136150, 133950 136156, 134088 136155, 134082 137640, 133950 137642, 133944 137648, 133934 138279, 133940 138285, 134077 138285, 134071 138940, 133937 138942, 133931 138948, 133933 139151, 133939 139157, 134071 139158, 134069 139431, 133934 139430, 133928 139436, 133928 139588, 133934 139594, 134067 139597, 134068 139664, 133933 139671, 133927 139677, 133933 139683, 134071 139685, 134062 140630, 131483 140627, 131485 140411, 131480 140405, 131473 140410, 131450 140626, 129961 140628, 129963 140412, 129958 140406, 129953 140408, 129742 140616, 129772 134800, 129779 134754, 129781 133789, 130738 133790, 130750 133856, 130756 133861, 130762 133855, 130764 133790, 131924 133792, 131925 134004, 131931 134010, 132224 134006, 132230 134000, 132227 133788, 134105 133785)), ((127290 70902, 127043 70901, 127037 70907, 127037 71203, 127043 71209, 127290 71210, 127290 71973, 127043 71974, 127037 71980, 127037 72634, 127043 72640, 127290 72640, 127290 72678, 127043 72678, 127037 72684, 127037 72964, 127043 72970, 127290 72971, 127290 73066, 127043 73066, 127037 73072, 127037 73419, 127043 73425, 127290 73426, 127290 73542, 126559 73542, 126553 73548, 126548 74588, 126527 74969, 126577 75563, 126554 76539, 126516 76920, 126617 77895, 126585 78484, 126585 78485, 126653 78861, 126620 79451, 126559 79837, 126559 79838, 126627 80432, 126607 81407, 126532 82382, 126532 82383, 126581 82763, 126522 83737, 126509 84329, 126542 84708, 126543 85301, 126501 85681, 126525 86275, 126485 86656, 126507 87630, 126558 88605, 126582 89302, 126508 90174, 126508 90175, 126565 90551, 126566 91143, 126513 91524, 126513 91525, 126541 92154, 126547 92160, 126553 92156, 126792 91430, 127165 90747, 128084 89250, 128269 89002, 128689 88086, 128918 87864, 129285 87746, 129763 87887, 130898 88455, 131162 88717, 131240 89104, 130912 90689, 130841 91624, 130841 91626, 130857 91810, 130825 92385, 130594 92945, 130324 94060, 129803 94870, 129489 95137, 129206 95118, 128285 94748, 127305 94241, 126558 93935, 126550 93941, 126572 94454, 126581 95673, 125859 95662, 125854 95664, 125641 95949, 125640 95955, 125713 96210, 125714 96212, 125854 96389, 125859 96391, 126604 96387, 126593 96998, 126607 97373, 126483 98116, 126582 98939, 126567 99317, 126585 100293, 126580 101266, 126656 102080, 126517 103083, 126639 104050, 126508 104898, 126598 106135, 126540 106737, 126577 108014, 126471 109066, 126463 109660, 126586 110636, 126586 110637, 126644 111017, 126620 111612, 126623 112385, 126629 112391, 127290 112391, 127290 113789, 127043 113789, 127037 113795, 127037 114097, 127043 114103, 127290 114104, 127290 114159, 127043 114160, 127037 114166, 127037 114462, 127043 114468, 127290 114468, 127290 115425, 127043 115424, 127037 115429, 127038 115433, 127289 115795, 127038 116195, 127043 116204, 127290 116200, 127290 117156, 127043 117156, 127037 117162, 127037 117457, 127043 117463, 127290 117464, 127290 117520, 127043 117520, 127037 117526, 127037 117833, 127043 117839, 127290 117840, 127290 119233, 120514 119233, 120508 119239, 120508 126033, 120248 125720, 120240 125719, 120237 125724, 120235 126046, 119619 126042, 119615 125700, 119609 125694, 119477 125686, 119471 125692, 119469 126039, 119370 126043, 119370 125698, 119364 125692, 119226 125688, 119220 125694, 119215 126046, 118221 126041, 118221 123016, 118293 123016, 118299 123010, 118299 122013, 118293 122007, 118221 122006, 118221 119650, 118293 119649, 118299 119643, 118299 119309, 118293 119303, 118221 119303, 118222 118862, 118292 118871, 118299 118865, 118299 118051, 118293 118045, 118221 118046, 118221 115882, 118217 115876, 117796 115734, 117788 115739, 117780 115797, 117155 115655, 117180 115551, 117175 115544, 117022 115508, 117015 115513, 117003 115618, 116029 115391, 116034 115289, 116029 115283, 115914 115256, 115907 115262, 115900 115360, 115224 115210, 115206 115092, 115200 115087, 115194 115093, 115187 115201, 113211 114744, 113353 113598, 113515 113613, 113522 113608, 113517 113601, 113349 113562, 113372 113377, 113538 113415, 113545 113409, 113549 113360, 113544 113354, 113380 113315, 113436 112812, 113605 112850, 113612 112845, 113628 112704, 113624 112697, 113457 112649, 113465 112534, 113635 112576, 113642 112571, 113677 112313, 113672 112306, 113504 112267, 113552 111806, 113757 111851, 113764 111847, 113759 111839, 113555 111790, 113609 111331, 115799 111831, 115782 111935, 115787 111942, 116275 112053, 116282 112048, 116302 111946, 116479 111990, 116472 112096, 116477 112102, 116855 112185, 116862 112180, 116872 112073, 118319 112412, 118300 112496, 118306 112503, 118985 112541, 118792 114128, 118792 114130, 118795 114160, 118675 115090, 118681 115097, 119195 115090, 119186 115443, 119192 115449, 119302 115451, 119308 115445, 119308 114981, 119563 114983, 119569 114977, 119569 114623, 119564 114617, 119374 114585, 119563 114585, 119569 114579, 119569 114282, 119563 114276, 119308 114275, 119308 113773, 119563 113773, 119569 113767, 119569 113559, 119563 113553, 119308 113553, 119308 113446, 119563 113445, 119569 113439, 119569 113279, 119563 113273, 119308 113274, 119308 112936, 119563 112936, 119569 112930, 119569 112766, 119563 112760, 119308 112747, 119308 112391, 121064 112391, 121070 112385, 121070 111017, 121064 111011, 120339 111003, 120339 110935, 120528 110934, 120534 110930, 120595 110790, 120589 110782, 120339 110782, 120339 110529, 120589 110528, 120595 110522, 120595 110142, 120589 110136, 120339 110135, 120339 109516, 120589 109515, 120595 109509, 120595 109302, 120589 109296, 120339 109296, 120339 108103, 120589 108103, 120595 108097, 120595 107528, 120589 107522, 120108 107522, 120109 106516, 120333 106516, 120339 106510, 120368 105670, 120362 105664, 120108 105663, 120108 103972, 120362 103971, 120368 103965, 120368 103883, 120362 103877, 120108 103878, 120108 103535, 120362 103535, 120368 103529, 120368 103424, 120362 103418, 120108 103417, 120108 102684, 120445 102684, 120450 102682, 120710 102377, 120709 102369, 120705 102367, 120451 102367, 120451 100763, 120705 100762, 120711 100756, 120711 100584, 120705 100578, 120451 100578, 120451 100249, 120705 100248, 120711 100242, 120711 100078, 120705 100072, 120451 100072, 120451 97825, 120445 97819, 120225 97819, 120225 94918, 120475 94918, 120481 94912, 120481 94307, 120475 94301, 120225 94303, 120225 92975, 120333 92975, 120339 92969, 120339 90006, 120334 90000, 119658 89826, 119508 89550, 119501 89547, 119498 89550, 119350 89866, 118706 89695, 118706 89429, 118701 89423, 118321 89327, 118314 89333, 118315 89593, 117453 89371, 117451 89106, 117446 89100, 117439 89106, 117433 89366, 117299 89321, 117286 89060, 117282 89054, 116903 88954, 116895 88960, 116889 89225, 115928 88974, 115782 88581, 115773 88578, 115624 88657, 115159 88533, 115158 88272, 115154 88266, 114924 88206, 114916 88212, 114919 88474, 114399 88334, 114402 88074, 114397 88068, 114276 88041, 114269 88047, 114266 88302, 113590 88128, 113590 87864, 113585 87858, 113448 87835, 113441 87841, 113440 88075, 113253 88039, 113248 87775, 113243 87769, 112999 87709, 112992 87715, 112989 87975, 112194 87762, 112048 87608, 112039 87609, 111894 87925, 111534 87833, 111531 87566, 111526 87560, 111376 87522, 111369 87528, 111365 87780, 111037 87686, 111042 87439, 111038 87433, 110882 87392, 110874 87398, 110867 87657, 110653 87601, 110652 87340, 110648 87334, 110520 87295, 110512 87301, 110510 87566, 109960 87422, 109960 87159, 109956 87153, 109704 87084, 109696 87090, 109693 87353, 109622 87333, 109619 87069, 109614 87063, 109257 86971, 109250 86977, 109247 87237, 108474 87038, 108319 86640, 108321 85961, 108317 85955, 108276 85943, 108272 83803, 108420 83605, 110132 84051, 110137 84304, 110142 84310, 110149 84304, 110156 84055, 110917 84255, 110954 84526, 110960 84531, 110966 84525, 110968 84268, 111843 84496, 111991 84768, 111998 84771, 112001 84768, 112148 84458, 112781 84618, 112782 84885, 112787 84891, 113161 84984, 113168 84978, 113168 84722, 114017 84941, 114053 85218, 114059 85223, 114065 85217, 114063 84952, 114204 84994, 114203 85253, 114207 85259, 114567 85354, 114575 85348, 114574 85084, 115572 85343, 115717 85738, 115726 85741, 115877 85663, 116339 85795, 116335 86038, 116340 86044, 116574 86097, 116581 86091, 116581 85847, 117101 85978, 117099 86240, 117103 86246, 117225 86284, 117233 86278, 117231 86018, 117913 86194, 117915 86456, 117920 86462, 118053 86495, 118060 86489, 118061 86230, 118249 86281, 118255 86545, 118259 86551, 118500 86619, 118508 86613, 118507 86348, 119303 86552, 119455 86713, 119464 86711, 119606 86394, 119971 86487, 119967 86752, 119972 86758, 120127 86797, 120134 86791, 120133 86529, 120455 86616, 120457 86739, 120463 86745, 120623 86748, 120629 86742, 120632 86661, 120704 86677, 120711 86671, 120711 86560, 120705 86554, 120451 86558, 120451 86218, 120705 86220, 120711 86214, 120711 85908, 120705 85902, 120451 85906, 120451 85661, 120705 85661, 120711 85655, 120711 85464, 120705 85458, 120451 85454, 120451 85065, 120705 85064, 120711 85058, 120711 84740, 120705 84734, 120451 84736, 120451 84629, 120705 84627, 120711 84621, 120711 84441, 120705 84435, 120458 84436, 120451 83756, 120705 83758, 120711 83752, 120711 83445, 120705 83439, 120451 83442, 120451 83261, 120445 83255, 120225 83255, 120225 82211, 120475 82209, 120481 82203, 120480 81454, 120474 81448, 120225 81447, 120225 80000, 120445 80004, 120451 79998, 120451 79882, 120445 79876, 120225 79876, 120225 78608, 120445 78605, 120451 78599, 120451 78453, 120445 78447, 120225 78446, 120225 78410, 120445 78410, 120451 78404, 120451 77298, 120672 77297, 120678 77289, 120426 76693, 121064 76692, 121070 76686, 121070 73548, 121064 73542, 119308 73541, 119308 72955, 119563 72957, 119569 72951, 119569 72700, 119563 72694, 119308 72694, 119308 72441, 119563 72444, 119569 72438, 119569 72326, 119563 72320, 119308 72319, 119308 70131, 127290 70131) (125639 111254, 125574 111562, 125574 111564, 125639 111922, 125645 111927, 125651 111921, 125651 111255, 125646 111249) (125639 107979, 125467 108647, 125467 108650, 125639 109048, 125647 109052, 125651 109046, 125651 107980, 125646 107974) (125640 103498, 125489 103765, 125489 103771, 125640 104058, 125647 104061, 125651 104055, 125651 103501, 125646 103495) (120967 90172, 120967 92963, 120776 92963, 120770 92969, 120770 97825, 120776 97831, 120997 97831, 120997 102678, 121003 102684, 121064 102684, 121070 102678, 121070 90200, 121066 90194, 120975 90166) (125639 93577, 125521 94029, 125522 94034, 125640 94256, 125647 94259, 125651 94253, 125651 93579, 125646 93573) (125639 89557, 125489 90129, 125489 90133, 125639 90540, 125646 90544, 125651 90538, 125651 89559, 125646 89553) (125639 84375, 125464 84970, 125464 84972, 125482 85263, 125483 85943, 125506 86233, 125394 86918, 125394 86920, 125420 87208, 125442 87893, 125438 88188, 125438 88189, 125639 88721, 125646 88725, 125651 88719, 125651 84377, 125646 84371) (125639 81031, 125592 81362, 125605 82042, 125490 82336, 125490 82340, 125639 82764, 125646 82768, 125651 82762, 125651 81032, 125646 81026)), ((133160 117222, 133497 117540, 134001 117977, 135242 118878, 135243 118879, 135886 119204, 136877 119957, 137371 120469, 137383 120620, 137127 121210, 136608 121986, 135614 122753, 135212 122990, 134052 123994, 132964 124688, 131433 126003, 130368 123404, 130361 122317, 130360 122314, 130258 122133, 130244 121832, 130244 121830, 130116 121463, 130106 121461, 128811 122755, 127988 121932, 131000 118928, 131001 118927, 131367 118328, 132002 117447, 132424 117143, 132806 117046)), ((173001 106432, 172901 106683, 172908 106691, 173144 106663, 173149 106659, 173217 106431, 173457 106433, 173379 106682, 173385 106690, 173530 106696, 173536 106692, 173612 106435, 174122 106434, 174207 106445, 174817 106453, 174739 106705, 174745 106713, 175220 106710, 175226 106706, 175301 106453, 176045 106469, 175997 106642, 176001 106650, 176009 106646, 176065 106457, 176814 106478, 175733 110127, 175566 110109, 175559 110113, 175446 110495, 175452 110503, 175621 110498, 175556 110712, 175393 110699, 175387 110703, 175349 110820, 175353 110701, 175348 110695, 174531 110486, 174526 110488, 174234 110769, 174106 110115, 174100 110110, 173697 110114, 173694 110115, 173418 110270, 173258 110160, 173268 109657, 173267 109654, 173208 109565, 173201 109562, 172928 109645, 172925 109648, 172863 109736, 172498 109618, 172450 109147, 172448 109143, 172321 109040, 172316 109039, 171603 109106, 171281 109027, 171118 108767, 171113 108764, 171009 108771, 170683 108585, 170932 107736, 170952 107691, 171327 106408)), ((203706 94221, 205206 94725, 205208 94725, 205770 94754, 206543 94904, 206896 94930, 207648 95049, 208116 95175, 209084 95347, 209153 95631, 208206 97880, 207967 98325, 207598 99150, 206823 100343, 206822 100344, 206770 100479, 206773 100486, 206779 100486, 208023 99767, 209219 99091, 210762 98244, 211337 99195, 210383 100078, 210382 100085, 210386 100088, 210951 100151, 211142 100463, 211082 100937, 210794 101544, 210636 101745, 210250 102310, 209606 103017, 209408 103252, 208815 103842, 207624 101866, 207616 101864, 207255 102096, 206774 101837, 206397 101395, 206351 101139, 206345 101134, 206340 101137, 206108 101593, 206108 101599, 206386 102016, 206393 102525, 206441 102819, 206365 103319, 206339 104057, 206213 104935, 206118 105046, 206117 105050, 206143 108401, 205930 108925, 205477 108566, 203557 107317, 202864 106733, 202462 106436, 201893 105908, 200693 104824, 200605 104488, 201065 104171, 201776 103630, 202413 103204, 202717 103036, 203360 102573, 203754 102368, 205018 101221, 205497 101011, 205607 101065, 205615 101063, 205616 101058, 205377 100495, 204302 98164, 204300 98162, 203979 97823, 203700 97349, 203368 96703, 202992 96129, 202984 96001, 202983 95999, 202776 95534, 202929 94534, 203179 94251, 203378 94197)), ((134377 86878, 134263 87029, 134264 87037, 134273 87037, 134390 86888, 134867 87240, 134775 87364, 134776 87373, 135070 87597, 135079 87596, 135171 87470, 135251 87531, 135161 87650, 135162 87659, 135318 87773, 135327 87772, 135416 87654, 135946 88054, 135883 88189, 135885 88197, 135893 88196, 135986 88071, 137430 89156, 136425 90502, 136319 90418, 136310 90419, 136247 90503, 136248 90512, 136355 90595, 135977 91102, 135868 91024, 135859 91025, 135799 91105, 135800 91114, 135907 91199, 135410 91868, 135303 91781, 135294 91782, 135221 91880, 135222 91889, 135332 91974, 134535 93041, 133556 92326, 132107 91240, 132068 91219, 130992 90411, 131343 90174, 131344 90164, 131236 90086, 132134 88878, 132243 88959, 132252 88958, 132559 88550, 132558 88542, 132502 88481, 132566 88529, 132575 88528, 132920 88062, 132919 88053, 132810 87969, 133893 86519)), ((100555 70099, 100022 70097, 99795 70036, 99787 70042, 99790 70097, 99424 70097, 99393 69884, 99387 69879, 99381 69885, 99380 70101, 99278 70101, 99278 69885, 99272 69879, 99065 69879, 99059 69885, 99058 70101, 98891 70095, 98890 69885, 98884 69879, 98580 69879, 98574 69885, 98574 70101, 98434 70095, 98433 69885, 98427 69879, 97967 69879, 97961 69885, 97960 70101, 97864 70101, 97864 69885, 97858 69879, 97513 69879, 97507 69885, 97508 70101, 96282 70098, 96282 67772, 96417 67752, 96422 67746, 96416 67740, 96282 67740, 96282 67327, 96416 67326, 96422 67320, 96422 67253, 96416 67247, 96282 67248, 96282 66213, 96416 66212, 96422 66206, 96422 65893, 96416 65887, 96282 65887, 96282 65685, 96416 65685, 96422 65679, 96422 65160, 96416 65154, 96280 65154, 96297 64228, 96444 64222, 96450 64217, 96444 64210, 96280 64211, 96276 63271, 97847 63266, 97847 63480, 97853 63486, 98330 63486, 98336 63480, 98338 63268, 98407 63269, 98407 63480, 98413 63486, 98864 63486, 98870 63480, 98871 63266, 100140 63272, 100135 63483, 100144 63488, 100554 63264))) \ No newline at end of file +MULTIPOLYGON (((227245 67069, 226990 67069, 226984 67075, 226984 67237, 226990 67243, 227245 67243, 227245 67582, 226990 67580, 226984 67586, 226984 67756, 226990 67762, 227245 67761, 227245 67860, 226990 67860, 226984 67866, 226984 68073, 226990 68079, 227245 68080, 227245 68588, 226990 68588, 226984 68594, 226984 68891, 226989 68897, 227163 68921, 226990 68921, 226984 68927, 226984 69286, 226990 69292, 227245 69291, 227245 70569, 226990 70569, 226984 70575, 226984 70797, 226990 70803, 227245 70807, 227245 71296, 226991 71296, 226985 71302, 226984 71369, 226990 71375, 227245 71375, 227245 71470, 226990 71470, 226984 71476, 226984 71587, 226990 71593, 227245 71593, 227245 71978, 226990 71975, 226984 71981, 226984 72080, 226990 72086, 227245 72088, 227245 72294, 226990 72294, 226984 72300, 226984 72518, 226990 72524, 227245 72524, 227245 72747, 226990 72746, 226984 72752, 226984 72819, 226990 72825, 227245 72825, 227245 73542, 225453 73542, 225447 73548, 225440 74559, 225506 75224, 225462 75588, 225479 76255, 225508 76618, 225501 77646, 225446 78404, 225452 78410, 226437 78410, 226445 78908, 226193 78909, 226187 78915, 226187 79310, 226193 79316, 226445 79317, 226445 79550, 226193 79551, 226187 79557, 226187 79884, 226193 79890, 226445 79891, 226445 80275, 226193 80275, 226187 80281, 226187 80856, 226193 80862, 226445 80863, 226445 81175, 226193 81176, 226187 81182, 226187 81812, 226193 81818, 226445 81819, 226445 83066, 226193 83067, 226187 83073, 226187 83255, 225493 83255, 225487 83261, 225491 83821, 225438 84850, 225456 85517, 225478 85879, 225453 86391, 225459 86397, 226126 86402, 225873 86995, 225879 87003, 226102 87001, 226102 88114, 226108 88120, 226328 88120, 226328 88152, 226101 88149, 226095 88155, 226095 88307, 226101 88313, 226328 88314, 226328 89584, 226108 89584, 226102 89590, 226102 89704, 226108 89710, 226328 89708, 226328 91149, 226223 91150, 226217 91156, 226217 91908, 226223 91914, 226328 91920, 226328 92963, 226223 92963, 226217 92969, 226217 93103, 225964 93104, 225958 93110, 225958 93161, 225964 93167, 226217 93167, 226217 95188, 225416 95189, 225410 95195, 225426 95804, 225446 96167, 225360 97076, 225437 97818, 225443 97824, 226102 97824, 226102 98907, 225845 98911, 225839 98917, 225839 99189, 225845 99195, 226102 99194, 226102 99575, 225845 99576, 225839 99582, 225839 99747, 225845 99753, 226102 99753, 226102 100735, 225845 100736, 225839 100742, 225839 101172, 225845 101178, 226102 101187, 226102 101794, 225849 101795, 225843 101801, 225843 102079, 225849 102085, 226102 102085, 226102 102671, 226108 102677, 226328 102677, 226328 103417, 226078 103418, 226072 103424, 226072 103529, 226078 103535, 226328 103536, 226328 103876, 226078 103876, 226072 103882, 226072 103965, 226078 103971, 226328 103972, 226328 105663, 226078 105664, 226072 105670, 226102 106506, 226108 106512, 226326 106515, 226328 107522, 225845 107522, 225839 107528, 225839 108097, 225845 108103, 226102 108104, 226102 109286, 225849 109295, 225843 109301, 225839 109506, 225845 109512, 226102 109512, 226102 110132, 225848 110133, 225842 110139, 225839 110519, 225845 110525, 226101 110528, 226102 110781, 225845 110782, 225840 110791, 225907 110931, 225912 110934, 226102 110932, 226102 111002, 225354 111011, 225348 111017, 225348 112385, 225354 112391, 227245 112391, 227245 112760, 226990 112761, 226984 112767, 226984 112929, 226990 112935, 227245 112943, 227245 113270, 226990 113271, 226984 113277, 226984 113441, 226990 113447, 227245 113446, 227245 113551, 226990 113551, 226984 113557, 226984 113766, 226990 113772, 227245 113773, 227245 114277, 226990 114277, 226984 114283, 226984 114583, 226989 114589, 227170 114615, 226990 114616, 226984 114622, 226984 114977, 226990 114983, 227245 114984, 227245 118010, 226990 118007, 226984 118013, 226984 118131, 226990 118137, 227245 118132, 227245 118384, 226990 118384, 226984 118390, 226984 118639, 226990 118645, 227245 118645, 227245 119233, 226108 119235, 226102 119241, 226102 120595, 225845 120595, 225839 120601, 225839 120718, 225845 120724, 226102 120724, 226102 121461, 225845 121461, 225839 121467, 225839 121665, 225845 121671, 226102 121671, 226102 122121, 225845 122121, 225839 122127, 225839 122298, 225845 122304, 226102 122304, 226102 124096, 226108 124102, 226442 124102, 226445 124697, 226193 124697, 226187 124703, 226187 125088, 226193 125094, 226445 125095, 226445 125523, 226193 125523, 226187 125529, 226187 126249, 226193 126255, 226445 126255, 226445 126627, 226193 126628, 226187 126634, 226187 126890, 226193 126896, 226445 126897, 226445 127186, 226193 127186, 226187 127192, 226187 127798, 226193 127804, 226445 127804, 226445 128946, 224785 128946, 224779 128952, 224779 129517, 224785 129523, 226649 129521, 226398 129955, 226403 129964, 226653 129967, 226653 131422, 226403 131430, 226397 131436, 226397 131958, 226403 131964, 226653 131963, 226653 132046, 226403 132045, 226397 132051, 226397 132594, 226403 132600, 226653 132600, 226653 134381, 226223 134381, 226217 134387, 226217 135971, 226142 134388, 226136 134382, 224785 134382, 224779 134388, 224779 137945, 224785 137951, 226223 137953, 226229 137947, 226229 136503, 226294 137947, 226300 137953, 226712 137957, 226712 139626, 226455 139626, 226449 139632, 226449 139900, 226455 139906, 226712 139906, 226712 141083, 226455 141082, 226449 141088, 226449 141134, 226455 141140, 226712 141140, 226712 141277, 226455 141277, 226449 141283, 226449 141825, 226455 141831, 226712 141831, 226712 142331, 226455 142332, 226449 142338, 226449 142401, 226455 142407, 226712 142407, 226712 142615, 226455 142616, 226449 142622, 226459 142744, 226465 142750, 226711 142751, 226712 142796, 224785 142802, 224779 142808, 224779 143516, 224785 143522, 226102 143522, 226102 145446, 225845 145446, 225839 145452, 225839 145935, 225845 145941, 226102 145942, 226102 146021, 225845 146021, 225839 146027, 225839 146451, 225845 146457, 226099 146458, 226102 147972, 225845 147969, 225839 147974, 225840 147978, 226103 148372, 226108 148375, 226316 148375, 226328 149112, 226078 149112, 226072 149118, 226072 149361, 226078 149367, 226328 149368, 226328 153220, 226108 153220, 226102 153226, 226102 154927, 225845 154928, 225839 154934, 225839 155171, 225845 155177, 226102 155177, 226102 156352, 225845 156352, 225839 156358, 225839 156420, 225845 156426, 226102 156427, 226102 156561, 225845 156562, 225839 156568, 225839 157112, 225845 157118, 226102 157121, 226102 157615, 225845 157617, 225839 157623, 225839 157675, 225845 157681, 226102 157680, 226102 157885, 225845 157886, 225839 157892, 225849 158015, 225855 158021, 226102 158022, 226102 158077, 226108 158083, 227245 158083, 227244 158453, 226990 158448, 226984 158454, 226984 158620, 226990 158626, 227245 158632, 227245 158961, 226990 158962, 226984 158968, 226984 159133, 226990 159139, 227245 159139, 227245 159242, 226990 159242, 226984 159248, 226984 159457, 226990 159463, 227245 159476, 227245 159968, 226990 159968, 226984 159974, 226984 160270, 226989 160276, 227170 160304, 226990 160303, 226984 160309, 226984 160670, 226990 160676, 227245 160674, 227245 167473, 226990 167474, 226984 167480, 226984 168402, 226990 168408, 227245 168408, 227245 168479, 226990 168478, 226984 168484, 226984 169332, 226990 169338, 227245 169325, 227245 169495, 224469 169495, 224469 169241, 224463 169235, 223759 169235, 223753 169241, 223749 169495, 222914 169495, 222914 169241, 222908 169235, 221659 169235, 221653 169241, 221652 169495, 221007 169495, 221006 169241, 221000 169235, 220380 169235, 220374 169241, 220375 169495, 219261 169495, 219261 168649, 219255 168643, 208976 168643, 208970 168649, 208970 169036, 206691 169036, 206691 168649, 206685 168643, 196409 168642, 196403 168648, 196403 169269, 195311 169269, 195311 169014, 195305 169008, 194631 169008, 194625 169014, 194625 169269, 192872 169269, 192873 169014, 192867 169008, 192673 169008, 192667 169014, 192667 169269, 192297 169269, 192299 169014, 192293 169008, 192088 169008, 192082 169014, 192082 169269, 189562 169269, 189562 168649, 189556 168643, 180417 168642, 180411 168648, 180411 169036, 178136 169036, 178135 168216, 178129 168210, 175932 168209, 175926 168215, 175943 168640, 173850 168644, 173849 168641, 173843 168637, 171956 168643, 171547 168400, 171546 168399, 170399 168034, 170397 168034, 168420 168029, 168414 168035, 168414 169036, 166140 169036, 166140 168646, 166134 168640, 157003 168641, 156997 168647, 156997 169269, 156085 169269, 156088 169014, 156082 169008, 155625 169008, 155619 169014, 155621 169269, 154599 169269, 154603 169014, 154597 169008, 154534 169008, 154528 169014, 154528 169269, 154490 169269, 154489 169014, 154483 169008, 154298 169008, 154292 169014, 154292 169269, 152655 169269, 152654 169014, 152648 169008, 152525 169008, 152519 169014, 152516 169269, 151890 169269, 151890 169014, 151884 169008, 151736 169008, 151730 169014, 151730 169269, 150150 169269, 150150 168649, 150144 168643, 139866 168642, 139860 168648, 139860 169036, 137585 169036, 137585 167495, 137579 167489, 137058 167491, 137052 167499, 137397 168640, 127296 168642, 127290 168648, 127290 169495, 126418 169495, 126418 169241, 126412 169235, 126036 169235, 126030 169241, 126035 169495, 125232 169495, 125232 169241, 125226 169235, 124834 169235, 124828 169241, 124828 169495, 124577 169495, 124577 169241, 124571 169235, 124083 169235, 124077 169241, 124077 169495, 122883 169495, 122883 169241, 122877 169235, 122176 169235, 122170 169241, 122171 169495, 122090 169495, 122090 169241, 122084 169235, 121255 169235, 121249 169241, 121249 169495, 119308 169495, 119308 165781, 119591 165784, 119597 165778, 119597 165480, 119591 165474, 119308 165474, 119308 163404, 119521 163406, 119527 163401, 119522 163394, 119308 163352, 119308 159313, 119563 159311, 119569 159305, 119569 159189, 119563 159183, 119308 159184, 119308 158933, 119563 158932, 119569 158926, 119569 158681, 119563 158675, 119308 158675, 119308 158083, 127290 158083, 127290 158200, 127043 158201, 127037 158207, 127037 158549, 127043 158555, 127290 158555, 127290 158659, 127043 158659, 127037 158665, 127037 158939, 127043 158945, 127290 158945, 127290 158983, 127043 158983, 127037 158989, 127037 159644, 127043 159650, 127290 159651, 127290 160412, 127043 160413, 127037 160419, 127037 160720, 127043 160726, 127290 160729, 127290 162555, 127296 162561, 127861 162525, 128427 162475, 128590 162505, 128592 162505, 129210 162420, 129891 162457, 130618 162512, 130619 162512, 130783 162484, 131352 162505, 131515 162540, 131517 162540, 132154 162460, 132814 162549, 132815 162549, 132977 162540, 133623 162615, 133626 162615, 134279 162417, 134374 162442, 134465 162875, 134398 163326, 134403 163333, 134678 163379, 134680 163379, 135079 163315, 135084 163309, 135084 162492, 135735 162516, 135898 162510, 136467 162516, 137191 162498, 138043 162546, 138044 162546, 138654 162459, 140111 162372, 140503 162437, 140510 162433, 140509 162428, 140101 161648, 139893 160969, 139880 160697, 140338 160134, 141078 159828, 141293 159776, 142020 159562, 142172 159500, 142699 159443, 143513 159519, 143515 159519, 144637 159393, 145596 159154, 145951 159158, 146133 159275, 146444 159683, 146715 160227, 146776 160783, 146655 161124, 146112 161461, 146111 161462, 145990 161586, 145496 161966, 144801 162259, 144610 162372, 144606 162380, 144611 162384, 145222 162476, 145385 162487, 145953 162553, 145956 162552, 146112 162481, 146112 162482, 146684 162399, 146846 162449, 146848 162449, 147578 162465, 148141 162498, 148304 162486, 148998 162564, 148999 162564, 149605 162411, 150143 162472, 150150 162466, 150150 161511, 151678 161511, 151698 161761, 151704 161767, 151962 161767, 151968 161761, 151969 161511, 152625 161511, 152625 161761, 152631 161767, 152732 161767, 152738 161761, 152738 161511, 154268 161511, 154268 161761, 154274 161767, 154854 161767, 154860 161761, 154859 161511, 155741 161511, 155738 161761, 155744 161767, 156146 161767, 156152 161761, 156153 161511, 156997 161511, 156997 162479, 157002 162485, 157680 162589, 157682 162589, 158669 162428, 159645 162455, 160580 162398, 161423 162492, 162350 162458, 163285 162466, 163379 162476, 164315 162453, 165298 162384, 165298 163176, 165300 163181, 165556 163384, 164994 163384, 164988 163389, 164991 163395, 165549 163674, 165553 163675, 166485 163496, 167428 163719, 167431 163719, 168361 163400, 168365 163393, 168359 163388, 166187 163384, 166456 163181, 166458 163176, 166455 162472, 167112 162564, 167114 162564, 167951 162480, 168885 162541, 169913 162562, 170756 162473, 171693 162528, 172628 162505, 173555 162444, 173646 162450, 174491 162382, 175428 162428, 175519 162417, 176454 162408, 177299 162446, 177395 162443, 178234 162491, 179163 162419, 179253 162434, 179254 162434, 180188 162395, 181123 162508, 182059 162449, 182904 162528, 183929 162518, 184769 162587, 185703 162463, 185794 162471, 186637 162447, 186728 162464, 187574 162535, 187575 162535, 188300 162510, 188388 162735, 188389 162736, 188795 163369, 188798 163371, 188909 163420, 188913 163421, 189430 163272, 189430 165717, 157004 165717, 156998 165723, 156997 166072, 157003 166078, 189556 166078, 189562 166072, 189562 161511, 191348 161511, 191349 161761, 191355 161767, 192311 161767, 192317 161761, 192317 161511, 193982 161511, 193982 161761, 193988 161767, 194499 161767, 194505 161761, 194505 161511, 195337 161511, 195337 161761, 195343 161767, 195749 161767, 195755 161761, 195754 161511, 196098 161511, 196098 161761, 196105 161767, 196297 161722, 196302 161716, 196296 161511, 196403 161511, 196403 162457, 196410 162463, 196900 162404, 197629 162425, 198360 162496, 198362 162496, 198641 162446, 199706 162536, 200549 162486, 200828 162530, 201559 162544, 202291 162522, 203473 162451, 204200 162520, 204202 162520, 204479 162466, 205211 162515, 205942 162505, 205943 162505, 206674 162390, 207124 162505, 207126 162505, 207405 162458, 208136 162488, 208137 162488, 208310 162452, 208308 163176, 208310 163180, 208516 163390, 208522 163392, 208721 163316, 208723 163314, 208852 163180, 208854 163176, 208851 162429, 209590 162419, 210043 162520, 210044 162520, 210594 162475, 210600 162467, 210346 161818, 210371 161465, 211497 161539, 211438 162437, 211444 162443, 212510 162450, 213235 162392, 213965 162501, 214696 162406, 215235 162523, 215237 162523, 216161 162429, 216614 162487, 217623 162463, 218640 162594, 218642 162594, 219256 162493, 219261 162487, 219261 161492, 219515 161120, 219514 161113, 219510 161111, 219261 161114, 219261 160157, 219510 160157, 219516 160151, 219516 159857, 219510 159851, 219261 159850, 219261 159793, 219510 159793, 219516 159787, 219516 159487, 219510 159481, 219261 159480, 219261 158083, 220320 158083, 220326 158078, 220440 157452, 220440 157450, 220346 156631, 220325 156106, 220283 155605, 220198 155079, 220338 154584, 220454 154062, 220454 154059, 220358 153042, 220356 152016, 220288 151516, 220262 150836, 220297 149974, 220363 149479, 220382 148957, 220382 148956, 220354 148457, 220328 147648, 220428 146906, 220428 146905, 220326 144750, 220412 143848, 220388 143345, 220269 142612, 220241 141795, 220357 141301, 220357 141300, 220387 140778, 220341 140283, 220350 139761, 220345 139258, 220412 138728, 220382 138231, 220363 137707, 220416 137210, 220416 137209, 220352 136686, 220408 135667, 220369 135170, 220416 134646, 220416 134645, 220343 134005, 220337 134000, 220332 134002, 219840 134589, 219514 135107, 219514 135108, 219268 135632, 218960 135837, 218600 135853, 218764 134811, 218764 134810, 218730 134202, 218703 134013, 218682 133256, 218751 132744, 218978 132119, 219163 131926, 219319 131914, 220301 132315, 220309 132310, 220392 131562, 220915 132039, 220916 132040, 221190 132185, 221199 132182, 221298 131884, 221298 131880, 221102 131391, 221284 130411, 221284 130409, 221157 129838, 221294 129343, 221294 129339, 221096 128808, 221095 128806, 220713 128313, 220825 127788, 220878 127295, 221223 126269, 221223 126266, 221014 125734, 221035 125240, 221034 124711, 221057 123989, 221051 123983, 220774 124006, 220516 123795, 220453 123591, 220495 123160, 220796 122897, 221048 122925, 221312 123196, 221320 123197, 221322 123190, 221094 122662, 221093 122660, 220732 122171, 221247 121143, 221248 121140, 221271 120612, 221271 120611, 221201 120118, 221201 120117, 220975 119586, 220907 119242, 220901 119237, 219261 119233, 219261 119119, 219510 119118, 219516 119112, 219516 118766, 219510 118760, 219261 118760, 219261 118659, 219510 118659, 219516 118653, 219516 118382, 219510 118376, 219261 118376, 219261 118338, 219510 118338, 219516 118332, 219516 117672, 219510 117666, 219261 117665, 219261 116906, 219510 116905, 219516 116899, 219516 116598, 219510 116592, 219261 116592, 219262 114315, 219510 114306, 219516 114301, 219510 114294, 219261 114295, 219261 112391, 220841 112391, 220847 112387, 221050 111839, 221050 111837, 221014 111387, 221022 110806, 220952 110353, 220952 110351, 220750 109767, 220762 109043, 220760 109038, 220453 108776, 220405 108436, 220457 108195, 220699 107922, 220852 107919, 220858 107914, 220989 107261, 220989 107258, 220791 106679, 220842 106226, 221239 105646, 221239 105640, 221156 105505, 221147 105504, 216915 109727, 216033 109405, 214963 108409, 214452 107979, 214451 107978, 213681 107594, 213371 107375, 212547 106935, 211403 106009, 211562 105698, 212552 104750, 213538 103841, 214308 103230, 215723 102292, 216185 102093, 216188 102091, 216287 101957, 216337 103856, 216349 105765, 216349 105767, 216447 106048, 216512 106854, 216587 107247, 216593 107253, 216597 107251, 220091 103755, 220811 104470, 220820 104469, 221263 103584, 221263 103579, 221059 103129, 220871 102551, 220947 102098, 220971 101514, 221067 101064, 221071 100687, 221067 100680, 221061 100682, 220750 100992, 220256 101278, 220274 100887, 220410 100296, 220410 100294, 220319 99858, 220225 99273, 220317 98834, 220416 98242, 220416 98240, 220352 97801, 220287 97211, 220312 96773, 220321 96183, 220351 95746, 220359 95157, 220325 94719, 220321 94129, 220366 93690, 220348 93097, 220304 92656, 220339 92062, 220357 90818, 220357 90817, 220242 90014, 220319 89575, 220378 88983, 220378 88981, 220285 88540, 220282 87945, 220291 87509, 220271 86485, 220305 85897, 220356 85458, 220282 84563, 220331 83830, 220315 83392, 220329 82802, 220310 82365, 220361 81456, 220302 80312, 220290 79718, 220313 79278, 220275 78685, 220325 78250, 220361 77664, 220209 76490, 220384 75561, 220384 75560, 220281 74137, 220277 73548, 220271 73542, 219261 73542, 219261 73001, 219510 73001, 219516 72995, 219516 72676, 219510 72670, 219261 72670, 219261 72463, 219510 72462, 219516 72456, 219516 72363, 219510 72357, 219261 72357, 219261 71786, 219510 71786, 219516 71780, 219516 71703, 219510 71697, 219261 71694, 219261 71498, 219510 71497, 219516 71491, 219516 71440, 219510 71434, 219261 71434, 219261 70120, 219515 69761, 219514 69754, 219510 69752, 219261 69759, 219261 68779, 219510 68780, 219516 68774, 219516 68408, 219510 68402, 219261 68402, 219261 68364, 219510 68363, 219516 68357, 219516 68034, 219510 68028, 219261 68027, 219261 66700, 227245 66700, 227245 67069), (144376 167490, 144370 167495, 144372 167501, 145656 168487, 145665 168486, 146401 167499, 146400 167491, 146396 167489, 144376 167490), (172799 163384, 172793 163389, 172797 163396, 173032 163462, 173034 163462, 173970 163489, 174906 163551, 175836 163689, 176780 163706, 177705 163647, 177708 163646, 178100 163395, 178102 163387, 178097 163384, 172799 163384), (183060 163384, 183054 163389, 183057 163395, 183301 163540, 183305 163541, 184248 163435, 185182 163643, 185184 163643, 186167 163396, 186172 163389, 186166 163384, 183060 163384), (199854 163384, 199848 163389, 199852 163396, 200299 163570, 200302 163570, 200517 163552, 201029 163551, 201243 163531, 201760 163641, 201762 163641, 201975 163614, 202737 163580, 202739 163579, 203118 163395, 203121 163388, 203115 163384, 199854 163384), (217539 163384, 217533 163389, 217537 163396, 218039 163566, 218044 163565, 218344 163395, 218347 163388, 218341 163384, 217539 163384), (179270 163384, 179264 163389, 179267 163395, 179567 163563, 179570 163564, 180513 163491, 180515 163491, 180852 163396, 180856 163389, 180850 163384, 179270 163384), (169846 163384, 169840 163389, 169844 163396, 170235 163552, 170239 163552, 170763 163396, 170767 163389, 170761 163384, 169846 163384), (203735 163384, 203729 163389, 203733 163396, 204163 163545, 204168 163544, 204471 163395, 204474 163388, 204468 163384, 203735 163384), (197345 163384, 197339 163389, 197344 163396, 197592 163444, 197593 163444, 198102 163431, 198320 163542, 198326 163542, 198646 163395, 198649 163388, 198643 163384, 197345 163384), (137874 163384, 137868 163389, 137872 163396, 138235 163507, 138239 163507, 138561 163396, 138565 163389, 138559 163384, 137874 163384), (206747 163384, 206741 163389, 206745 163396, 207083 163506, 207088 163505, 207258 163395, 207260 163387, 207255 163384, 206747 163384)), ((169671 152745, 170202 153253, 170927 154227, 171257 154872, 172153 156116, 172154 156117, 172595 156617, 172917 156954, 173092 157304, 172987 157689, 172694 158108, 171814 158747, 171209 159113, 168206 162129, 167381 161300, 168670 160011, 168668 160001, 168308 159867, 168306 159867, 168001 159850, 167818 159755, 167815 159754, 166727 159747, 164129 158681, 164503 158259, 165428 157177, 166125 156075, 167136 154902, 167137 154901, 167379 154495, 168150 153502, 168929 152985, 169515 152732, 169671 152745)), ((100335 154873, 100340 154879, 100345 154877, 100551 154669, 100556 161492, 99605 161493, 99601 161445, 99595 161439, 99589 161445, 99586 161493, 98435 161494, 98436 161278, 98430 161272, 98139 161270, 98133 161276, 98133 161494, 96286 161493, 96282 159681, 96419 159684, 96425 159678, 96423 159138, 96417 159132, 96282 159132, 96282 157636, 96416 157636, 96422 157630, 96422 156997, 96416 156991, 96282 156991, 96282 156341, 96416 156341, 96422 156335, 96422 156136, 96416 156130, 96282 156131, 96282 155856, 96416 155857, 96422 155851, 96422 155697, 96416 155691, 96282 155692, 96282 155622, 96416 155614, 96422 155608, 96416 155602, 96282 155601, 96283 154664, 98837 154659, 98852 154874, 98858 154880, 98864 154874, 98865 154659, 100335 154658, 100335 154873)), ((113941 158262, 113941 158347, 113947 158353, 114063 158357, 114069 158351, 114069 158266, 115991 158269, 115992 158353, 116001 158358, 116150 158269, 116153 161190, 115333 161187, 115308 161095, 115301 161091, 115296 161097, 115297 161188, 114461 161184, 114461 161101, 114454 161095, 114400 161101, 114395 161107, 114399 161186, 112729 161180, 112734 160582, 112838 160582, 112844 160576, 112843 160173, 112837 160167, 112730 160167, 112734 159565, 112836 159562, 112842 159556, 112843 159414, 112837 159408, 112733 159408, 112729 159098, 112834 159099, 112840 159093, 112842 158918, 112836 158912, 112731 158911, 112728 158786, 112832 158787, 112838 158781, 112840 158710, 112834 158704, 112745 158703, 112810 158668, 112813 158661, 112807 158657, 112729 158655, 112723 158260, 113941 158262)), ((212508 156972, 213258 157082, 214087 157279, 214550 157455, 214547 157486, 214552 157493, 214990 157537, 214510 157514, 214506 157516, 212112 159731, 211970 159822, 211968 159823, 211598 160294, 210953 161072, 210811 161123, 210611 161054, 210559 160792, 210558 160790, 210322 160346, 210131 159148, 209693 157491, 209679 156920, 209750 156738, 209938 156695, 212508 156972)), ((203880 156686, 203601 159222, 196085 157828, 196554 157073, 197215 156043, 197543 155514, 203880 156686)), ((195255 155681, 195043 157633, 193835 157414, 194047 155461, 195255 155681)), ((159674 152760, 159585 152853, 159587 152863, 160214 153127, 160220 153125, 160317 153030, 160382 153055, 160285 153144, 160287 153154, 160903 153412, 160909 153410, 161010 153319, 162717 154035, 162622 154119, 162621 154126, 162625 154129, 163265 154271, 162240 155265, 162212 155281, 162211 155282, 161826 155652, 161787 155703, 160816 156619, 160196 157240, 158599 156572, 158686 156482, 158684 156472, 158540 156414, 158534 156416, 158434 156506, 157501 156113, 157589 156026, 157587 156017, 157411 155940, 157405 155941, 157314 156035, 156754 155802, 156837 155709, 156835 155699, 156653 155622, 156647 155624, 156545 155717, 154422 154829, 155476 153824, 155672 153893, 155679 153890, 155676 153882, 155498 153803, 156117 153176, 156316 153262, 156322 153260, 156453 153142, 156451 153132, 156262 153060, 156331 152993, 156521 153066, 156527 153064, 156837 152754, 156835 152744, 156662 152677, 157046 152315, 157252 152362, 157259 152358, 157256 152351, 157202 152325, 157244 152341, 157251 152338, 157249 152330, 157093 152252, 157515 151856, 159674 152760)), ((191588 155004, 191377 156957, 190166 156733, 190372 154777, 191588 155004)), ((187923 154328, 187711 156278, 186494 156055, 186708 154102, 187923 154328)), ((184316 153071, 184042 155601, 181606 155154, 181880 152620, 184316 153071)), ((100281 128668, 100286 128674, 100292 128671, 100566 128252, 100575 139194, 100569 140910, 100578 141934, 100041 141938, 99816 141814, 99807 141819, 99812 141946, 99440 141938, 99410 141503, 99404 141497, 99398 141503, 99399 141939, 99298 141939, 99297 141500, 99291 141494, 99078 141507, 99072 141513, 99076 141937, 98910 141942, 98910 141508, 98904 141502, 98610 141494, 98604 141500, 98588 141940, 98449 141946, 98449 141508, 98443 141502, 97975 141499, 97969 141505, 97986 141941, 97882 141933, 97882 141504, 97876 141498, 97530 141503, 97524 141509, 97523 141943, 96297 141941, 96298 136253, 96433 136229, 96438 136223, 96432 136217, 96298 136218, 96294 134335, 96425 134335, 96431 134329, 96435 133824, 96429 133818, 96296 133818, 96296 133498, 96429 133499, 96435 133493, 96431 132123, 96425 132117, 96294 132117, 96295 130523, 96426 130522, 96432 130516, 96432 130278, 96426 130272, 96294 130271, 96294 130167, 96426 130149, 96431 130143, 96425 130137, 96296 130137, 96291 128241, 98238 128239, 98228 128673, 98234 128679, 98423 128681, 98429 128675, 98430 128241, 98690 128239, 98682 128668, 98688 128674, 98875 128685, 98881 128679, 98877 128239, 100284 128238, 100281 128668)), ((134104 134524, 134096 134617, 134094 135586, 133961 135587, 133955 135593, 133944 136150, 133950 136156, 134088 136155, 134082 137640, 133950 137642, 133944 137648, 133934 138279, 133940 138285, 134077 138285, 134071 138940, 133937 138942, 133931 138948, 133933 139151, 133939 139157, 134071 139158, 134069 139431, 133934 139430, 133928 139436, 133928 139588, 133934 139594, 134067 139597, 134068 139664, 133933 139671, 133927 139677, 133933 139683, 134071 139685, 134062 140630, 131483 140627, 131485 140411, 131480 140405, 131473 140410, 131450 140626, 129961 140628, 129963 140412, 129958 140406, 129953 140408, 129742 140616, 129772 134800, 129779 134754, 129781 133789, 130738 133790, 130750 133856, 130756 133861, 130762 133855, 130764 133790, 131924 133792, 131925 134004, 131931 134010, 132224 134006, 132230 134000, 132227 133788, 134105 133785, 134104 134524)), ((127290 70902, 127043 70901, 127037 70907, 127037 71203, 127043 71209, 127290 71210, 127290 71973, 127043 71974, 127037 71980, 127037 72634, 127043 72640, 127290 72640, 127290 72678, 127043 72678, 127037 72684, 127037 72964, 127043 72970, 127290 72971, 127290 73066, 127043 73066, 127037 73072, 127037 73419, 127043 73425, 127290 73426, 127290 73542, 126559 73542, 126553 73548, 126548 74588, 126527 74969, 126577 75563, 126554 76539, 126516 76920, 126617 77895, 126585 78484, 126585 78485, 126653 78861, 126620 79451, 126559 79837, 126559 79838, 126627 80432, 126607 81407, 126532 82382, 126532 82383, 126581 82763, 126522 83737, 126509 84329, 126542 84708, 126543 85301, 126501 85681, 126525 86275, 126485 86656, 126507 87630, 126558 88605, 126582 89302, 126508 90174, 126508 90175, 126565 90551, 126566 91143, 126513 91524, 126513 91525, 126541 92154, 126547 92160, 126553 92156, 126792 91430, 127165 90747, 128084 89250, 128269 89002, 128689 88086, 128918 87864, 129285 87746, 129763 87887, 130898 88455, 131162 88717, 131240 89104, 130912 90689, 130841 91624, 130841 91626, 130857 91810, 130825 92385, 130594 92945, 130324 94060, 129803 94870, 129489 95137, 129206 95118, 128285 94748, 127305 94241, 126558 93935, 126550 93941, 126572 94454, 126581 95673, 125859 95662, 125854 95664, 125641 95949, 125640 95955, 125713 96210, 125714 96212, 125854 96389, 125859 96391, 126604 96387, 126593 96998, 126607 97373, 126483 98116, 126582 98939, 126567 99317, 126585 100293, 126580 101266, 126656 102080, 126517 103083, 126639 104050, 126508 104898, 126598 106135, 126540 106737, 126577 108014, 126471 109066, 126463 109660, 126586 110636, 126586 110637, 126644 111017, 126620 111612, 126623 112385, 126629 112391, 127290 112391, 127290 113789, 127043 113789, 127037 113795, 127037 114097, 127043 114103, 127290 114104, 127290 114159, 127043 114160, 127037 114166, 127037 114462, 127043 114468, 127290 114468, 127290 115425, 127043 115424, 127037 115429, 127038 115433, 127289 115795, 127038 116195, 127043 116204, 127290 116200, 127290 117156, 127043 117156, 127037 117162, 127037 117457, 127043 117463, 127290 117464, 127290 117520, 127043 117520, 127037 117526, 127037 117833, 127043 117839, 127290 117840, 127290 119233, 120514 119233, 120508 119239, 120508 126033, 120248 125720, 120240 125719, 120237 125724, 120235 126046, 119619 126042, 119615 125700, 119609 125694, 119477 125686, 119471 125692, 119469 126039, 119370 126043, 119370 125698, 119364 125692, 119226 125688, 119220 125694, 119215 126046, 118221 126041, 118221 123016, 118293 123016, 118299 123010, 118299 122013, 118293 122007, 118221 122006, 118221 119650, 118293 119649, 118299 119643, 118299 119309, 118293 119303, 118221 119303, 118222 118862, 118292 118871, 118299 118865, 118299 118051, 118293 118045, 118221 118046, 118221 115882, 118217 115876, 117796 115734, 117788 115739, 117780 115797, 117155 115655, 117180 115551, 117175 115544, 117022 115508, 117015 115513, 117003 115618, 116029 115391, 116034 115289, 116029 115283, 115914 115256, 115907 115262, 115900 115360, 115224 115210, 115206 115092, 115200 115087, 115194 115093, 115187 115201, 113211 114744, 113353 113598, 113515 113613, 113522 113608, 113517 113601, 113349 113562, 113372 113377, 113538 113415, 113545 113409, 113549 113360, 113544 113354, 113380 113315, 113436 112812, 113605 112850, 113612 112845, 113628 112704, 113624 112697, 113457 112649, 113465 112534, 113635 112576, 113642 112571, 113677 112313, 113672 112306, 113504 112267, 113552 111806, 113757 111851, 113764 111847, 113759 111839, 113555 111790, 113609 111331, 115799 111831, 115782 111935, 115787 111942, 116275 112053, 116282 112048, 116302 111946, 116479 111990, 116472 112096, 116477 112102, 116855 112185, 116862 112180, 116872 112073, 118319 112412, 118300 112496, 118306 112503, 118985 112541, 118792 114128, 118792 114130, 118795 114160, 118675 115090, 118681 115097, 119195 115090, 119186 115443, 119192 115449, 119302 115451, 119308 115445, 119308 114981, 119563 114983, 119569 114977, 119569 114623, 119564 114617, 119374 114585, 119563 114585, 119569 114579, 119569 114282, 119563 114276, 119308 114275, 119308 113773, 119563 113773, 119569 113767, 119569 113559, 119563 113553, 119308 113553, 119308 113446, 119563 113445, 119569 113439, 119569 113279, 119563 113273, 119308 113274, 119308 112936, 119563 112936, 119569 112930, 119569 112766, 119563 112760, 119308 112747, 119308 112391, 121064 112391, 121070 112385, 121070 111017, 121064 111011, 120339 111003, 120339 110935, 120528 110934, 120534 110930, 120595 110790, 120589 110782, 120339 110782, 120339 110529, 120589 110528, 120595 110522, 120595 110142, 120589 110136, 120339 110135, 120339 109516, 120589 109515, 120595 109509, 120595 109302, 120589 109296, 120339 109296, 120339 108103, 120589 108103, 120595 108097, 120595 107528, 120589 107522, 120108 107522, 120109 106516, 120333 106516, 120339 106510, 120368 105670, 120362 105664, 120108 105663, 120108 103972, 120362 103971, 120368 103965, 120368 103883, 120362 103877, 120108 103878, 120108 103535, 120362 103535, 120368 103529, 120368 103424, 120362 103418, 120108 103417, 120108 102684, 120445 102684, 120450 102682, 120710 102377, 120709 102369, 120705 102367, 120451 102367, 120451 100763, 120705 100762, 120711 100756, 120711 100584, 120705 100578, 120451 100578, 120451 100249, 120705 100248, 120711 100242, 120711 100078, 120705 100072, 120451 100072, 120451 97825, 120445 97819, 120225 97819, 120225 94918, 120475 94918, 120481 94912, 120481 94307, 120475 94301, 120225 94303, 120225 92975, 120333 92975, 120339 92969, 120339 90006, 120334 90000, 119658 89826, 119508 89550, 119501 89547, 119498 89550, 119350 89866, 118706 89695, 118706 89429, 118701 89423, 118321 89327, 118314 89333, 118315 89593, 117453 89371, 117451 89106, 117446 89100, 117439 89106, 117433 89366, 117299 89321, 117286 89060, 117282 89054, 116903 88954, 116895 88960, 116889 89225, 115928 88974, 115782 88581, 115773 88578, 115624 88657, 115159 88533, 115158 88272, 115154 88266, 114924 88206, 114916 88212, 114919 88474, 114399 88334, 114402 88074, 114397 88068, 114276 88041, 114269 88047, 114266 88302, 113590 88128, 113590 87864, 113585 87858, 113448 87835, 113441 87841, 113440 88075, 113253 88039, 113248 87775, 113243 87769, 112999 87709, 112992 87715, 112989 87975, 112194 87762, 112048 87608, 112039 87609, 111894 87925, 111534 87833, 111531 87566, 111526 87560, 111376 87522, 111369 87528, 111365 87780, 111037 87686, 111042 87439, 111038 87433, 110882 87392, 110874 87398, 110867 87657, 110653 87601, 110652 87340, 110648 87334, 110520 87295, 110512 87301, 110510 87566, 109960 87422, 109960 87159, 109956 87153, 109704 87084, 109696 87090, 109693 87353, 109622 87333, 109619 87069, 109614 87063, 109257 86971, 109250 86977, 109247 87237, 108474 87038, 108319 86640, 108321 85961, 108317 85955, 108276 85943, 108272 83803, 108420 83605, 110132 84051, 110137 84304, 110142 84310, 110149 84304, 110156 84055, 110917 84255, 110954 84526, 110960 84531, 110966 84525, 110968 84268, 111843 84496, 111991 84768, 111998 84771, 112001 84768, 112148 84458, 112781 84618, 112782 84885, 112787 84891, 113161 84984, 113168 84978, 113168 84722, 114017 84941, 114053 85218, 114059 85223, 114065 85217, 114063 84952, 114204 84994, 114203 85253, 114207 85259, 114567 85354, 114575 85348, 114574 85084, 115572 85343, 115717 85738, 115726 85741, 115877 85663, 116339 85795, 116335 86038, 116340 86044, 116574 86097, 116581 86091, 116581 85847, 117101 85978, 117099 86240, 117103 86246, 117225 86284, 117233 86278, 117231 86018, 117913 86194, 117915 86456, 117920 86462, 118053 86495, 118060 86489, 118061 86230, 118249 86281, 118255 86545, 118259 86551, 118500 86619, 118508 86613, 118507 86348, 119303 86552, 119455 86713, 119464 86711, 119606 86394, 119971 86487, 119967 86752, 119972 86758, 120127 86797, 120134 86791, 120133 86529, 120455 86616, 120457 86739, 120463 86745, 120623 86748, 120629 86742, 120632 86661, 120704 86677, 120711 86671, 120711 86560, 120705 86554, 120451 86558, 120451 86218, 120705 86220, 120711 86214, 120711 85908, 120705 85902, 120451 85906, 120451 85661, 120705 85661, 120711 85655, 120711 85464, 120705 85458, 120451 85454, 120451 85065, 120705 85064, 120711 85058, 120711 84740, 120705 84734, 120451 84736, 120451 84629, 120705 84627, 120711 84621, 120711 84441, 120705 84435, 120458 84436, 120451 83756, 120705 83758, 120711 83752, 120711 83445, 120705 83439, 120451 83442, 120451 83261, 120445 83255, 120225 83255, 120225 82211, 120475 82209, 120481 82203, 120480 81454, 120474 81448, 120225 81447, 120225 80000, 120445 80004, 120451 79998, 120451 79882, 120445 79876, 120225 79876, 120225 78608, 120445 78605, 120451 78599, 120451 78453, 120445 78447, 120225 78446, 120225 78410, 120445 78410, 120451 78404, 120451 77298, 120672 77297, 120678 77289, 120426 76693, 121064 76692, 121070 76686, 121070 73548, 121064 73542, 119308 73541, 119308 72955, 119563 72957, 119569 72951, 119569 72700, 119563 72694, 119308 72694, 119308 72441, 119563 72444, 119569 72438, 119569 72326, 119563 72320, 119308 72319, 119308 70131, 127290 70131, 127290 70902), (125639 111254, 125574 111562, 125574 111564, 125639 111922, 125645 111927, 125651 111921, 125651 111255, 125646 111249, 125639 111254), (125639 107979, 125467 108647, 125467 108650, 125639 109048, 125647 109052, 125651 109046, 125651 107980, 125646 107974, 125639 107979), (125640 103498, 125489 103765, 125489 103771, 125640 104058, 125647 104061, 125651 104055, 125651 103501, 125646 103495, 125640 103498), (120967 90172, 120967 92963, 120776 92963, 120770 92969, 120770 97825, 120776 97831, 120997 97831, 120997 102678, 121003 102684, 121064 102684, 121070 102678, 121070 90200, 121066 90194, 120975 90166, 120967 90172), (125639 93577, 125521 94029, 125522 94034, 125640 94256, 125647 94259, 125651 94253, 125651 93579, 125646 93573, 125639 93577), (125639 89557, 125489 90129, 125489 90133, 125639 90540, 125646 90544, 125651 90538, 125651 89559, 125646 89553, 125639 89557), (125639 84375, 125464 84970, 125464 84972, 125482 85263, 125483 85943, 125506 86233, 125394 86918, 125394 86920, 125420 87208, 125442 87893, 125438 88188, 125438 88189, 125639 88721, 125646 88725, 125651 88719, 125651 84377, 125646 84371, 125639 84375), (125639 81031, 125592 81362, 125605 82042, 125490 82336, 125490 82340, 125639 82764, 125646 82768, 125651 82762, 125651 81032, 125646 81026, 125639 81031)), ((133160 117222, 133497 117540, 134001 117977, 135242 118878, 135243 118879, 135886 119204, 136877 119957, 137371 120469, 137383 120620, 137127 121210, 136608 121986, 135614 122753, 135212 122990, 134052 123994, 132964 124688, 131433 126003, 130368 123404, 130361 122317, 130360 122314, 130258 122133, 130244 121832, 130244 121830, 130116 121463, 130106 121461, 128811 122755, 127988 121932, 131000 118928, 131001 118927, 131367 118328, 132002 117447, 132424 117143, 132806 117046, 133160 117222)), ((173001 106432, 172901 106683, 172908 106691, 173144 106663, 173149 106659, 173217 106431, 173457 106433, 173379 106682, 173385 106690, 173530 106696, 173536 106692, 173612 106435, 174122 106434, 174207 106445, 174817 106453, 174739 106705, 174745 106713, 175220 106710, 175226 106706, 175301 106453, 176045 106469, 175997 106642, 176001 106650, 176009 106646, 176065 106457, 176814 106478, 175733 110127, 175566 110109, 175559 110113, 175446 110495, 175452 110503, 175621 110498, 175556 110712, 175393 110699, 175387 110703, 175349 110820, 175353 110701, 175348 110695, 174531 110486, 174526 110488, 174234 110769, 174106 110115, 174100 110110, 173697 110114, 173694 110115, 173418 110270, 173258 110160, 173268 109657, 173267 109654, 173208 109565, 173201 109562, 172928 109645, 172925 109648, 172863 109736, 172498 109618, 172450 109147, 172448 109143, 172321 109040, 172316 109039, 171603 109106, 171281 109027, 171118 108767, 171113 108764, 171009 108771, 170683 108585, 170932 107736, 170952 107691, 171327 106408, 173001 106432)), ((203706 94221, 205206 94725, 205208 94725, 205770 94754, 206543 94904, 206896 94930, 207648 95049, 208116 95175, 209084 95347, 209153 95631, 208206 97880, 207967 98325, 207598 99150, 206823 100343, 206822 100344, 206770 100479, 206773 100486, 206779 100486, 208023 99767, 209219 99091, 210762 98244, 211337 99195, 210383 100078, 210382 100085, 210386 100088, 210951 100151, 211142 100463, 211082 100937, 210794 101544, 210636 101745, 210250 102310, 209606 103017, 209408 103252, 208815 103842, 207624 101866, 207616 101864, 207255 102096, 206774 101837, 206397 101395, 206351 101139, 206345 101134, 206340 101137, 206108 101593, 206108 101599, 206386 102016, 206393 102525, 206441 102819, 206365 103319, 206339 104057, 206213 104935, 206118 105046, 206117 105050, 206143 108401, 205930 108925, 205477 108566, 203557 107317, 202864 106733, 202462 106436, 201893 105908, 200693 104824, 200605 104488, 201065 104171, 201776 103630, 202413 103204, 202717 103036, 203360 102573, 203754 102368, 205018 101221, 205497 101011, 205607 101065, 205615 101063, 205616 101058, 205377 100495, 204302 98164, 204300 98162, 203979 97823, 203700 97349, 203368 96703, 202992 96129, 202984 96001, 202983 95999, 202776 95534, 202929 94534, 203179 94251, 203378 94197, 203706 94221)), ((134377 86878, 134263 87029, 134264 87037, 134273 87037, 134390 86888, 134867 87240, 134775 87364, 134776 87373, 135070 87597, 135079 87596, 135171 87470, 135251 87531, 135161 87650, 135162 87659, 135318 87773, 135327 87772, 135416 87654, 135946 88054, 135883 88189, 135885 88197, 135893 88196, 135986 88071, 137430 89156, 136425 90502, 136319 90418, 136310 90419, 136247 90503, 136248 90512, 136355 90595, 135977 91102, 135868 91024, 135859 91025, 135799 91105, 135800 91114, 135907 91199, 135410 91868, 135303 91781, 135294 91782, 135221 91880, 135222 91889, 135332 91974, 134535 93041, 133556 92326, 132107 91240, 132068 91219, 130992 90411, 131343 90174, 131344 90164, 131236 90086, 132134 88878, 132243 88959, 132252 88958, 132559 88550, 132558 88542, 132502 88481, 132566 88529, 132575 88528, 132920 88062, 132919 88053, 132810 87969, 133893 86519, 134377 86878)), ((100555 70099, 100022 70097, 99795 70036, 99787 70042, 99790 70097, 99424 70097, 99393 69884, 99387 69879, 99381 69885, 99380 70101, 99278 70101, 99278 69885, 99272 69879, 99065 69879, 99059 69885, 99058 70101, 98891 70095, 98890 69885, 98884 69879, 98580 69879, 98574 69885, 98574 70101, 98434 70095, 98433 69885, 98427 69879, 97967 69879, 97961 69885, 97960 70101, 97864 70101, 97864 69885, 97858 69879, 97513 69879, 97507 69885, 97508 70101, 96282 70098, 96282 67772, 96417 67752, 96422 67746, 96416 67740, 96282 67740, 96282 67327, 96416 67326, 96422 67320, 96422 67253, 96416 67247, 96282 67248, 96282 66213, 96416 66212, 96422 66206, 96422 65893, 96416 65887, 96282 65887, 96282 65685, 96416 65685, 96422 65679, 96422 65160, 96416 65154, 96280 65154, 96297 64228, 96444 64222, 96450 64217, 96444 64210, 96280 64211, 96276 63271, 97847 63266, 97847 63480, 97853 63486, 98330 63486, 98336 63480, 98338 63268, 98407 63269, 98407 63480, 98413 63486, 98864 63486, 98870 63480, 98871 63266, 100140 63272, 100135 63483, 100144 63488, 100554 63264, 100555 70099))) \ No newline at end of file diff --git a/stress_benchmark/resources/027.settings b/stress_benchmark/resources/027.settings index 6dccc78fad..c1314905dc 100644 --- a/stress_benchmark/resources/027.settings +++ b/stress_benchmark/resources/027.settings @@ -6,7 +6,6 @@ resolution=0 _plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=2 skin_preshrink=0.8 clean_between_layers=False -support_interface_skip_height=0.15 machine_feeder_wheel_diameter=10.0 retraction_hop_only_when_collides=True machine_steps_per_mm_y=50 @@ -44,6 +43,7 @@ cool_min_speed=6 cool_fan_enabled=True cool_fan_speed_max=100 wall_overhang_angle=90 +seam_overhang_angle=30 jerk_support_infill=20 wall_overhang_speed_factor=100 support_roof_line_width=0.4 diff --git a/stress_benchmark/resources/027.wkt b/stress_benchmark/resources/027.wkt index 026926c0a1..52e032dc87 100644 --- a/stress_benchmark/resources/027.wkt +++ b/stress_benchmark/resources/027.wkt @@ -1 +1 @@ -MULTIPOLYGON (((165176 119605, 165191 119612, 165809 119528, 165814 119526, 166113 119374, 165603 119864, 165598 119875, 165593 120336, 165253 120350, 165240 120359, 165003 120937, 165002 120942, 164985 121273, 164816 120588, 164809 120579, 164413 120346, 164568 120044, 164567 120028, 164186 119536, 164182 119532, 163901 119349, 164580 119545, 164591 119544, 164992 119317))) \ No newline at end of file +MULTIPOLYGON (((165176 119605, 165191 119612, 165809 119528, 165814 119526, 166113 119374, 165603 119864, 165598 119875, 165593 120336, 165253 120350, 165240 120359, 165003 120937, 165002 120942, 164985 121273, 164816 120588, 164809 120579, 164413 120346, 164568 120044, 164567 120028, 164186 119536, 164182 119532, 163901 119349, 164580 119545, 164591 119544, 164992 119317, 165176 119605))) \ No newline at end of file diff --git a/stress_benchmark/resources/028.settings b/stress_benchmark/resources/028.settings index 7e1d34e6f2..c3dd99ed05 100644 --- a/stress_benchmark/resources/028.settings +++ b/stress_benchmark/resources/028.settings @@ -6,7 +6,6 @@ resolution=0 _plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 skin_preshrink=1.6 clean_between_layers=False -support_interface_skip_height=0.2 machine_feeder_wheel_diameter=10.0 retraction_hop_only_when_collides=False machine_steps_per_mm_y=50 @@ -44,6 +43,7 @@ cool_min_speed=10 cool_fan_enabled=True cool_fan_speed_max=100.0 wall_overhang_angle=90 +seam_overhang_angle=30 jerk_support_infill=20 wall_overhang_speed_factor=100 support_roof_line_width=0.4 diff --git a/stress_benchmark/resources/028.wkt b/stress_benchmark/resources/028.wkt index f412731098..a6a783ddea 100644 --- a/stress_benchmark/resources/028.wkt +++ b/stress_benchmark/resources/028.wkt @@ -1 +1 @@ -MULTIPOLYGON (((302030 234958, 302026 234978, 302005 234946)), ((302414 234417, 302456 234464, 302244 234612, 302232 234624, 302254 234461, 302238 234162)), ((302610 234480, 302659 234533, 302572 234595, 302456 234464, 302497 234436, 302561 234409)), ((304291 234278, 304213 234268, 304209 234256)), ((303386 234037, 303762 234137, 303742 234134, 303322 234200, 303292 234178, 302566 233851)), ((261951 233033, 261878 233014, 261873 233007, 261913 232965)), ((262907 232282, 262967 232628, 262960 232632, 262400 232746, 262069 232713, 261974 232459, 261695 232330, 261767 232262, 261783 232237, 262224 232153, 262682 231886, 262912 231700)), ((261976 232704, 262069 232713, 262077 232734, 261867 232713, 261836 232635)), ((263149 232614, 263148 232634, 262998 232699, 262943 232710, 262943 232707, 263148 232615, 262970 232644, 262967 232628, 263142 232543)), ((261348 232329, 261441 232372, 261502 232439, 261348 232329, 261314 232313, 261317 232307)), ((261783 232237, 261655 232261, 261624 232297, 261615 232293, 261479 232148, 261491 232138, 261896 232053)), ((299479 230332, 299507 230343, 299507 230350, 299403 230309)), ((299508 79655, 299479 79666, 299438 79678, 299508 79652)), ((262957 77366, 262964 77370, 262906 77716, 262914 78301, 262683 78114, 262224 77843, 261781 77760, 261767 77737, 261649 77624, 261695 77513, 262043 77288, 262396 77252)), ((261658 77737, 261781 77760, 261894 77945, 261600 77885, 261615 77705, 261620 77693)), ((262054 77281, 262043 77288, 261974 77295, 261619 77469, 261578 77532, 261557 77500, 261619 77469, 261665 77400, 261834 77290, 262061 77267)), ((263124 77377, 263123 77447, 262964 77370, 262969 77342, 262951 77331)), ((262992 77297, 263124 77354, 263124 77373, 263147 77383, 263124 77377, 263124 77373, 262944 77291, 262944 77287)), ((262946 77330, 262946 77335, 262861 77308)), ((303745 75860, 303776 75856, 303387 75956, 302604 76139, 303293 75819, 303316 75802)), ((302460 75532, 302421 75575, 302239 75837, 302255 75537, 302228 75340)), ((304210 75744, 304213 75732, 304293 75722)), ((302660 75466, 302618 75511, 302565 75588, 302495 75561, 302460 75532, 302573 75405)), ((302030 75040, 302005 75052, 302026 75021)), ((261929 231714, 261987 231728, 262024 231737, 261965 231743, 261964 231744)), ((250196 167964, 249781 166859, 249410 165810, 249081 164806, 248793 163847, 248543 162928, 248439 162511, 262246 162511, 262246 168087, 250245 168087)), ((305216 72882, 305560 73066, 305700 73216, 305897 73538, 306025 73910, 306110 74342, 306156 75147, 306100 75885, 305989 76355, 305715 76779, 305339 76921, 304832 76999, 304294 77123, 304267 77144, 304080 77197, 303969 77285, 303697 77688, 303528 78403, 303414 79639, 303369 80568, 303339 81658, 303323 82898, 303325 84270, 303369 86547, 303397 87358, 303528 89914, 303591 90804, 303668 91710, 303854 93596, 304101 95597, 304408 97735, 304779 100038, 305211 102530, 306306 108720, 306487 109788, 307077 113114, 307393 114843, 307734 116601, 307905 117411, 308096 118380, 308491 120165, 308913 121954, 309364 123737, 309834 125506, 310319 127258, 310813 128987, 312343 134172, 313076 136688, 313419 137910, 314054 140279, 314339 141436, 314606 142579, 314850 143690, 315071 144790, 315270 145874, 315445 146948, 315600 148007, 315798 149673, 315895 150763, 315971 151836, 316025 152897, 316055 153951, 316066 155001, 316056 156050, 316026 157103, 315972 158163, 315899 159238, 315800 160328, 315672 161438, 315523 162570, 315342 163732, 315128 164926, 314883 166156, 314606 167431, 314341 168572, 314053 169732, 313415 172123, 313070 173356, 310757 181334, 309795 184805, 309319 186608, 308844 188503, 308440 190211, 308048 191988, 307688 193743, 307350 195468, 307020 197265, 305399 206425, 304634 210849, 304318 212884, 304177 213866, 303972 215419, 303855 216403, 303735 217578, 303582 219329, 303523 220188, 303395 222678, 303368 223473, 303325 225730, 303323 227102, 303339 228345, 303369 229447, 303415 230384, 303515 231442, 303696 232309, 303969 232714, 304079 232800, 304253 232843, 304293 232874, 304846 233003, 305339 233077, 305714 233219, 305988 233642, 306101 234115, 306157 234852, 306111 235657, 306025 236088, 305896 236459, 305699 236782, 305560 236932, 305216 237117, 304835 237208, 304239 237208, 302574 236772, 301388 236477, 301232 236389, 300898 236109, 300621 235716, 300542 235522, 300465 235050, 300404 234233, 300146 233851, 299741 233580, 299454 233446, 299403 233412, 298276 232989, 296892 232594, 296145 232401, 294585 232023, 292872 231635, 291692 231379, 289967 231021, 288559 230741, 287192 230491, 285869 230262, 284591 230057, 283361 229876, 282181 229725, 281049 229604, 279970 229519, 278939 229465, 277941 229438, 277759 229440, 277753 229440, 276812 229450, 275737 229502, 275048 229557, 274219 229649, 273422 229764, 272629 229903, 271914 230058, 271196 230236, 270499 230430, 269819 230644, 269273 230830, 268608 231079, 267813 231406, 267049 231756, 266203 232196, 265990 232357, 265887 232417, 265332 232837, 265209 233013, 265059 233419, 265036 234114, 264979 234392, 264857 234696, 264634 235032, 264177 235377, 263873 235517, 263334 235629, 262603 235728, 262046 235760, 261408 235740, 260889 235690, 260723 235616, 260343 235428, 260134 235267, 259792 234815, 259562 234352, 259380 233797, 259269 233264, 259181 232697, 259113 232069, 259074 231561, 259016 230110, 259004 228898, 259019 227750, 259041 226885, 259099 225548, 259181 224640, 259274 224177, 259396 224038, 259698 224941, 259733 225006, 260028 226214, 260202 226811, 260392 227378, 260616 227890, 260905 228396, 261193 228637, 261323 228675, 261482 228422, 261563 228144, 261683 227331, 261746 226527, 261789 225624, 261826 224293, 261851 222906, 261879 218451, 261871 215290, 261836 212973, 261804 211948, 261757 210868, 261691 209746, 261598 208543, 261478 207374, 261315 206101, 261104 204760, 260825 203337, 260468 201827, 260035 200241, 259521 198591, 258935 196896, 258288 195182, 257604 193474, 256880 191776, 256141 190108, 255388 188464, 253865 185263, 249426 176269, 248752 174867, 248111 173501, 247507 172176, 246950 170896, 246435 169668, 245966 168488, 245553 167371, 245176 166292, 244841 165262, 244549 164268, 244287 163311, 244066 162387, 243870 161495, 243710 160626, 243573 159781, 243460 158954, 243370 158145, 243301 157347, 243254 156559, 243228 155776, 243218 155001, 243229 154221, 243256 153438, 243302 152651, 243371 151852, 243462 151043, 243574 150218, 243711 149371, 243867 148549, 244066 147611, 244291 146686, 244550 145729, 244847 144738, 245180 143706, 245554 142627, 245982 141486, 246438 140330, 246950 139104, 247511 137822, 248115 136498, 249429 133729, 250130 132296, 252346 127832, 253868 124737, 254631 123148, 255390 121532, 256143 119889, 256889 118205, 257607 116522, 258294 114814, 258938 113103, 259524 111405, 260036 109754, 260471 108169, 260824 106661, 261103 105239, 261317 103895, 261479 102623, 261602 101406, 261708 99998, 261807 98046, 261837 97000, 261871 94990, 261879 91213, 261850 87057, 261827 85704, 261794 84484, 261747 83470, 261662 82420, 261525 81647, 261325 81326, 261194 81362, 260906 81601, 260615 82106, 260392 82622, 260201 83187, 260027 83785, 259733 84992, 259698 85057, 259396 85960, 259274 85820, 259181 85358, 259098 84451, 259040 83114, 259018 82250, 259004 81100, 259011 80104, 259061 78666, 259113 77929, 259182 77301, 259268 76736, 259387 76177, 259561 75647, 259729 75291, 260122 74745, 260153 74715, 260341 74571, 260866 74311, 261407 74258, 262046 74239, 262609 74271, 263179 74346, 263857 74475, 264177 74623, 264650 74985, 264857 75302, 265017 75700, 265059 76580, 265209 76986, 265329 77159, 265886 77581, 265990 77641, 266195 77797, 267048 78243, 267813 78593, 268607 78920, 269272 79167, 269817 79355, 270497 79567, 271195 79762, 271913 79941, 272653 80097, 273422 80236, 274218 80348, 275047 80440, 275911 80508, 276812 80546, 277398 80553, 277967 80560, 279057 80528, 279970 80480, 281049 80394, 282180 80273, 283361 80122, 284591 79941, 285869 79736, 287192 79508, 288645 79241, 291414 78680, 292898 78358, 294678 77955, 296227 77578, 296892 77405, 298273 77010, 299404 76585, 299412 76580, 299607 76507, 300146 76147, 300403 75767, 300449 75372, 300472 74861, 300543 74475, 300621 74281, 300898 73889, 301233 73608, 301383 73524, 302575 73228, 304239 72792, 304833 72791) (261929 231714, 261815 231869, 261491 232138, 261473 232142, 261479 232148, 261464 232161, 261514 232364, 261537 232399, 261527 232412, 261555 232425, 261580 232463, 261557 232499, 261535 232489, 261503 232440, 261527 232412, 261441 232372, 261397 232324, 261324 232296, 261340 232264, 261464 232161, 261460 232145, 261473 232142, 261454 232121, 261434 232040, 261433 231585, 261202 231130, 261143 231064, 260943 230531, 261123 231113, 261372 231789, 261434 232040, 261434 232100, 261454 232121, 261460 232145, 261313 232176, 261267 232173, 261255 231907, 261235 231842, 261235 231735, 261148 231561, 261235 231842, 261234 232171, 260707 232135, 260500 232146, 260195 232032, 260659 232224, 260839 232270, 260514 232266, 260846 232412, 261315 232529, 261207 233099, 260978 233427, 260959 233960, 261147 233615, 261169 233592, 261165 233955, 261254 233874, 261275 233908, 261585 233447, 261797 233294, 261851 233321, 261931 233281, 262078 233066, 262020 233051, 262384 232996, 262385 232995, 262025 233047, 261913 232965, 261724 232680, 261771 232703, 261867 232713, 261926 232855, 262382 232816, 262475 232788, 262557 232782, 262583 232785, 262839 232732, 262385 232995, 262394 233015, 262556 233386, 262910 233532, 262915 233420, 263131 233508, 263126 232977, 263148 232634, 263928 232297, 264009 232272, 264592 231851, 264957 231443, 265357 230738, 265627 229813, 265721 229181, 265913 229104, 266100 228983, 266701 228705, 267340 228435, 268028 228170, 268512 227998, 269299 227742, 270122 227506, 270978 227290, 271873 227097, 272803 226929, 273771 226788, 274774 226679, 275815 226599, 276892 226553, 277816 226542, 278959 226567, 280151 226631, 281382 226730, 282647 226864, 283937 227027, 285258 227221, 286608 227438, 288091 227699, 289400 227941, 291118 228283, 292176 228505, 294154 228941, 295925 229357, 297482 229751, 298179 229946, 299323 230286, 299323 230339, 299442 231105, 299579 231856, 299709 232345, 300025 233088, 300296 233534, 300712 234052, 301305 234598, 301680 234847, 302102 235029, 302808 235463, 303548 235703, 303554 235704, 303748 235767, 304317 235856, 304836 235961, 304392 235839, 304060 235608, 303624 235362, 303007 234909, 302659 234533, 302674 234522, 303082 234345, 303350 234301, 303775 234619, 304101 234785, 304116 234755, 304296 234865, 304455 234488, 304318 234025, 304030 233437, 303593 232824, 303030 232249, 302406 231755, 301776 231353, 301176 231036, 300591 230769, 299507 230343, 299520 229894, 299471 228916, 299441 227799, 299427 226543, 299436 225160, 299463 223659, 299516 222050, 299604 220352, 299661 219447, 299804 217648, 299894 216704, 299999 215734, 300253 213713, 300560 211563, 300930 209263, 301170 207855, 301828 204138, 302909 198139, 303548 194805, 303904 193073, 304289 191305, 304706 189509, 305157 187694, 305632 185874, 306130 184059, 307164 180480, 307431 179607, 307684 178736, 309375 173174, 310066 170803, 310686 168545, 310964 167452, 311218 166379, 311454 165324, 311664 164286, 311854 163268, 312029 162194, 312165 161267, 312308 160063, 312408 159027, 312482 158007, 312535 156998, 312567 155996, 312577 155001, 312568 154000, 312536 152999, 312483 151991, 312407 150970, 312309 149933, 312185 148879, 312031 147803, 311848 146697, 311634 145556, 311385 144375, 311106 143154, 310793 141885, 310443 140566, 310061 139193, 309381 136884, 307711 131444, 306649 127914, 306174 126251, 305681 124470, 305206 122672, 304755 120864, 304339 119061, 303952 117271, 303592 115506, 303236 113668, 302644 110456, 301573 104465, 300985 101076, 300561 98442, 300344 96958, 300091 95041, 299982 94112, 299800 92300, 299659 90526, 299604 89698, 299520 88038, 299487 87131, 299437 84951, 299427 83561, 299440 82287, 299469 81144, 299521 80105, 299508 79655, 299667 79592, 299817 79536, 300221 79375, 300591 79230, 301176 78964, 301782 78641, 302407 78243, 303023 77755, 303592 77174, 304035 76560, 304319 75974, 304456 75509, 304295 75136, 304114 75245, 304100 75216, 303775 75379, 303330 75713, 303268 75705, 302672 75475, 302660 75466, 303011 75089, 303617 74641, 304057 74392, 304390 74161, 304835 74040, 304314 74144, 303758 74230, 303561 74294, 303558 74294, 302800 74539, 302101 74970, 301684 75151, 301309 75399, 300708 75953, 300297 76464, 300025 76908, 299709 77653, 299511 78397, 299386 79390, 299324 79658, 299324 79712, 298179 80053, 296732 80442, 295714 80693, 294020 81087, 292835 81349, 290841 81770, 289400 82057, 287861 82342, 286607 82560, 285258 82777, 283937 82970, 282646 83135, 281382 83270, 280152 83366, 278959 83431, 277848 83458, 276893 83446, 275816 83400, 274775 83322, 273772 83211, 272804 83069, 271874 82902, 270979 82709, 270123 82494, 269300 82258, 268512 82001, 268033 81832, 267341 81565, 266702 81295, 266101 81017, 265914 80894, 265722 80818, 265658 80316, 265520 79737, 265291 79067, 264957 78554, 264588 78147, 264013 77728, 263927 77701, 263124 77354, 263131 76492, 262915 76579, 262910 76468, 262554 76613, 262397 76981, 262387 77004, 262839 77266, 262578 77214, 262555 77216, 262499 77213, 262382 77182, 261924 77144, 261853 77278, 261834 77290, 261769 77297, 261715 77323, 261904 77034, 261869 76995, 261880 76978, 261956 76954, 261904 77034, 261909 77039, 262035 76947, 262281 76986, 262387 77004, 262386 77003, 262281 76986, 262003 76940, 262072 76918, 261930 76715, 261850 76676, 261802 76706, 261586 76552, 261274 76089, 261252 76122, 261164 76044, 261169 76404, 261148 76382, 260961 76066, 260979 76573, 261206 76901, 261316 77469, 260842 77586, 260521 77727, 260763 77740, 260634 77771, 260475 77844, 260970 77874, 261266 77830, 261254 78095, 261150 78432, 261262 78203, 261294 77826, 261300 77825, 261457 77857, 261371 78209, 261121 78884, 260937 79484, 261203 78868, 261202 78777, 261431 78236, 261583 78083, 261594 77947, 261496 77864, 261457 77857, 261462 77836, 261339 77733, 261318 77692, 261397 77673, 261502 77559, 261317 77691, 261307 77671, 261311 77629, 261362 77596, 261532 77512, 261502 77559, 261536 77598, 261512 77634, 261462 77836, 261496 77864, 261600 77885, 261594 77947, 261811 78129, 261928 78287, 261987 78273, 261965 78258, 262027 78264, 261987 78273, 262471 78615, 263191 79238, 263821 79697, 264400 80082, 264448 80111, 264597 80211, 265106 80514, 265254 80631, 265398 80688, 265516 80758, 265530 80850, 265610 81669, 265674 82772, 265715 83889, 265752 85703, 265768 87402, 265780 90850, 265772 94751, 265736 97143, 265702 98213, 265653 99316, 265585 100463, 265489 101662, 265362 102915, 265197 104237, 264970 105638, 264684 107126, 264304 108745, 263853 110392, 263296 112182, 262634 114092, 261875 116100, 261025 118181, 260125 120263, 259217 122286, 258065 124756, 256995 126990, 253465 134224, 252118 137065, 251506 138403, 250948 139681, 250437 140899, 249970 142057, 249559 143157, 249189 144206, 248865 145195, 248575 146164, 248322 147084, 248104 147968, 247915 148836, 247760 149647, 247627 150451, 247518 151237, 247434 152008, 247367 152768, 247321 153516, 247294 154260, 247284 155001, 247293 155738, 247322 156482, 247368 157233, 247434 157991, 247519 158761, 247626 159549, 247761 160354, 247933 161257, 248102 162032, 248221 162511, 247648 162511, 248072 164408, 248073 168087, 250026 168087, 250431 169099, 250941 170318, 251504 171594, 252113 172933, 252767 174325, 254190 177277, 256994 183015, 258309 185769, 259046 187350, 260121 189733, 261019 191813, 261869 193894, 262631 195905, 263274 197756, 263848 199603, 264309 201286, 264683 202870, 264970 204360, 265197 205762, 265362 207083, 265490 208337, 265585 209535, 265653 210682, 265702 211786, 265737 212856, 265770 214883, 265781 216800, 265767 222819, 265753 224298, 265711 226256, 265668 227372, 265595 228581, 265515 229242, 265310 229337, 265286 229354, 265255 229367, 265128 229467, 264596 229789, 264428 229902, 264401 229918, 263818 230302, 263194 230755, 262829 231086, 262433 231417, 261989 231726, 262091 231654))) \ No newline at end of file +MULTIPOLYGON (((302030 234958, 302026 234978, 302005 234946, 302030 234958)), ((302414 234417, 302456 234464, 302244 234612, 302232 234624, 302254 234461, 302238 234162, 302414 234417)), ((302610 234480, 302659 234533, 302572 234595, 302456 234464, 302497 234436, 302561 234409, 302610 234480)), ((304291 234278, 304213 234268, 304209 234256, 304291 234278)), ((303386 234037, 303762 234137, 303742 234134, 303322 234200, 303292 234178, 302566 233851, 303386 234037)), ((261951 233033, 261878 233014, 261873 233007, 261913 232965, 261951 233033)), ((262907 232282, 262967 232628, 262960 232632, 262400 232746, 262069 232713, 261974 232459, 261695 232330, 261767 232262, 261783 232237, 262224 232153, 262682 231886, 262912 231700, 262907 232282)), ((261976 232704, 262069 232713, 262077 232734, 261867 232713, 261836 232635, 261976 232704)), ((263149 232614, 263148 232634, 262998 232699, 262943 232710, 262943 232707, 263148 232615, 262970 232644, 262967 232628, 263142 232543, 263149 232614)), ((261348 232329, 261441 232372, 261502 232439, 261348 232329, 261314 232313, 261317 232307, 261348 232329)), ((261783 232237, 261655 232261, 261624 232297, 261615 232293, 261479 232148, 261491 232138, 261896 232053, 261783 232237)), ((299479 230332, 299507 230343, 299507 230350, 299403 230309, 299479 230332)), ((299508 79655, 299479 79666, 299438 79678, 299508 79652, 299508 79655)), ((262957 77366, 262964 77370, 262906 77716, 262914 78301, 262683 78114, 262224 77843, 261781 77760, 261767 77737, 261649 77624, 261695 77513, 262043 77288, 262396 77252, 262957 77366)), ((261658 77737, 261781 77760, 261894 77945, 261600 77885, 261615 77705, 261620 77693, 261658 77737)), ((262054 77281, 262043 77288, 261974 77295, 261619 77469, 261578 77532, 261557 77500, 261619 77469, 261665 77400, 261834 77290, 262061 77267, 262054 77281)), ((263124 77377, 263123 77447, 262964 77370, 262969 77342, 262951 77331, 263124 77377)), ((262992 77297, 263124 77354, 263124 77373, 263147 77383, 263124 77377, 263124 77373, 262944 77291, 262944 77287, 262992 77297)), ((262946 77330, 262946 77335, 262861 77308, 262946 77330)), ((303745 75860, 303776 75856, 303387 75956, 302604 76139, 303293 75819, 303316 75802, 303745 75860)), ((302460 75532, 302421 75575, 302239 75837, 302255 75537, 302228 75340, 302460 75532)), ((304210 75744, 304213 75732, 304293 75722, 304210 75744)), ((302660 75466, 302618 75511, 302565 75588, 302495 75561, 302460 75532, 302573 75405, 302660 75466)), ((302030 75040, 302005 75052, 302026 75021, 302030 75040)), ((261929 231714, 261987 231728, 262024 231737, 261965 231743, 261964 231744, 261929 231714)), ((250196 167964, 249781 166859, 249410 165810, 249081 164806, 248793 163847, 248543 162928, 248439 162511, 262246 162511, 262246 168087, 250245 168087, 250196 167964)), ((305216 72882, 305560 73066, 305700 73216, 305897 73538, 306025 73910, 306110 74342, 306156 75147, 306100 75885, 305989 76355, 305715 76779, 305339 76921, 304832 76999, 304294 77123, 304267 77144, 304080 77197, 303969 77285, 303697 77688, 303528 78403, 303414 79639, 303369 80568, 303339 81658, 303323 82898, 303325 84270, 303369 86547, 303397 87358, 303528 89914, 303591 90804, 303668 91710, 303854 93596, 304101 95597, 304408 97735, 304779 100038, 305211 102530, 306306 108720, 306487 109788, 307077 113114, 307393 114843, 307734 116601, 307905 117411, 308096 118380, 308491 120165, 308913 121954, 309364 123737, 309834 125506, 310319 127258, 310813 128987, 312343 134172, 313076 136688, 313419 137910, 314054 140279, 314339 141436, 314606 142579, 314850 143690, 315071 144790, 315270 145874, 315445 146948, 315600 148007, 315798 149673, 315895 150763, 315971 151836, 316025 152897, 316055 153951, 316066 155001, 316056 156050, 316026 157103, 315972 158163, 315899 159238, 315800 160328, 315672 161438, 315523 162570, 315342 163732, 315128 164926, 314883 166156, 314606 167431, 314341 168572, 314053 169732, 313415 172123, 313070 173356, 310757 181334, 309795 184805, 309319 186608, 308844 188503, 308440 190211, 308048 191988, 307688 193743, 307350 195468, 307020 197265, 305399 206425, 304634 210849, 304318 212884, 304177 213866, 303972 215419, 303855 216403, 303735 217578, 303582 219329, 303523 220188, 303395 222678, 303368 223473, 303325 225730, 303323 227102, 303339 228345, 303369 229447, 303415 230384, 303515 231442, 303696 232309, 303969 232714, 304079 232800, 304253 232843, 304293 232874, 304846 233003, 305339 233077, 305714 233219, 305988 233642, 306101 234115, 306157 234852, 306111 235657, 306025 236088, 305896 236459, 305699 236782, 305560 236932, 305216 237117, 304835 237208, 304239 237208, 302574 236772, 301388 236477, 301232 236389, 300898 236109, 300621 235716, 300542 235522, 300465 235050, 300404 234233, 300146 233851, 299741 233580, 299454 233446, 299403 233412, 298276 232989, 296892 232594, 296145 232401, 294585 232023, 292872 231635, 291692 231379, 289967 231021, 288559 230741, 287192 230491, 285869 230262, 284591 230057, 283361 229876, 282181 229725, 281049 229604, 279970 229519, 278939 229465, 277941 229438, 277759 229440, 277753 229440, 276812 229450, 275737 229502, 275048 229557, 274219 229649, 273422 229764, 272629 229903, 271914 230058, 271196 230236, 270499 230430, 269819 230644, 269273 230830, 268608 231079, 267813 231406, 267049 231756, 266203 232196, 265990 232357, 265887 232417, 265332 232837, 265209 233013, 265059 233419, 265036 234114, 264979 234392, 264857 234696, 264634 235032, 264177 235377, 263873 235517, 263334 235629, 262603 235728, 262046 235760, 261408 235740, 260889 235690, 260723 235616, 260343 235428, 260134 235267, 259792 234815, 259562 234352, 259380 233797, 259269 233264, 259181 232697, 259113 232069, 259074 231561, 259016 230110, 259004 228898, 259019 227750, 259041 226885, 259099 225548, 259181 224640, 259274 224177, 259396 224038, 259698 224941, 259733 225006, 260028 226214, 260202 226811, 260392 227378, 260616 227890, 260905 228396, 261193 228637, 261323 228675, 261482 228422, 261563 228144, 261683 227331, 261746 226527, 261789 225624, 261826 224293, 261851 222906, 261879 218451, 261871 215290, 261836 212973, 261804 211948, 261757 210868, 261691 209746, 261598 208543, 261478 207374, 261315 206101, 261104 204760, 260825 203337, 260468 201827, 260035 200241, 259521 198591, 258935 196896, 258288 195182, 257604 193474, 256880 191776, 256141 190108, 255388 188464, 253865 185263, 249426 176269, 248752 174867, 248111 173501, 247507 172176, 246950 170896, 246435 169668, 245966 168488, 245553 167371, 245176 166292, 244841 165262, 244549 164268, 244287 163311, 244066 162387, 243870 161495, 243710 160626, 243573 159781, 243460 158954, 243370 158145, 243301 157347, 243254 156559, 243228 155776, 243218 155001, 243229 154221, 243256 153438, 243302 152651, 243371 151852, 243462 151043, 243574 150218, 243711 149371, 243867 148549, 244066 147611, 244291 146686, 244550 145729, 244847 144738, 245180 143706, 245554 142627, 245982 141486, 246438 140330, 246950 139104, 247511 137822, 248115 136498, 249429 133729, 250130 132296, 252346 127832, 253868 124737, 254631 123148, 255390 121532, 256143 119889, 256889 118205, 257607 116522, 258294 114814, 258938 113103, 259524 111405, 260036 109754, 260471 108169, 260824 106661, 261103 105239, 261317 103895, 261479 102623, 261602 101406, 261708 99998, 261807 98046, 261837 97000, 261871 94990, 261879 91213, 261850 87057, 261827 85704, 261794 84484, 261747 83470, 261662 82420, 261525 81647, 261325 81326, 261194 81362, 260906 81601, 260615 82106, 260392 82622, 260201 83187, 260027 83785, 259733 84992, 259698 85057, 259396 85960, 259274 85820, 259181 85358, 259098 84451, 259040 83114, 259018 82250, 259004 81100, 259011 80104, 259061 78666, 259113 77929, 259182 77301, 259268 76736, 259387 76177, 259561 75647, 259729 75291, 260122 74745, 260153 74715, 260341 74571, 260866 74311, 261407 74258, 262046 74239, 262609 74271, 263179 74346, 263857 74475, 264177 74623, 264650 74985, 264857 75302, 265017 75700, 265059 76580, 265209 76986, 265329 77159, 265886 77581, 265990 77641, 266195 77797, 267048 78243, 267813 78593, 268607 78920, 269272 79167, 269817 79355, 270497 79567, 271195 79762, 271913 79941, 272653 80097, 273422 80236, 274218 80348, 275047 80440, 275911 80508, 276812 80546, 277398 80553, 277967 80560, 279057 80528, 279970 80480, 281049 80394, 282180 80273, 283361 80122, 284591 79941, 285869 79736, 287192 79508, 288645 79241, 291414 78680, 292898 78358, 294678 77955, 296227 77578, 296892 77405, 298273 77010, 299404 76585, 299412 76580, 299607 76507, 300146 76147, 300403 75767, 300449 75372, 300472 74861, 300543 74475, 300621 74281, 300898 73889, 301233 73608, 301383 73524, 302575 73228, 304239 72792, 304833 72791, 305216 72882), (261929 231714, 261815 231869, 261491 232138, 261473 232142, 261479 232148, 261464 232161, 261514 232364, 261537 232399, 261527 232412, 261555 232425, 261580 232463, 261557 232499, 261535 232489, 261503 232440, 261527 232412, 261441 232372, 261397 232324, 261324 232296, 261340 232264, 261464 232161, 261460 232145, 261473 232142, 261454 232121, 261434 232040, 261433 231585, 261202 231130, 261143 231064, 260943 230531, 261123 231113, 261372 231789, 261434 232040, 261434 232100, 261454 232121, 261460 232145, 261313 232176, 261267 232173, 261255 231907, 261235 231842, 261235 231735, 261148 231561, 261235 231842, 261234 232171, 260707 232135, 260500 232146, 260195 232032, 260659 232224, 260839 232270, 260514 232266, 260846 232412, 261315 232529, 261207 233099, 260978 233427, 260959 233960, 261147 233615, 261169 233592, 261165 233955, 261254 233874, 261275 233908, 261585 233447, 261797 233294, 261851 233321, 261931 233281, 262078 233066, 262020 233051, 262384 232996, 262385 232995, 262025 233047, 261913 232965, 261724 232680, 261771 232703, 261867 232713, 261926 232855, 262382 232816, 262475 232788, 262557 232782, 262583 232785, 262839 232732, 262385 232995, 262394 233015, 262556 233386, 262910 233532, 262915 233420, 263131 233508, 263126 232977, 263148 232634, 263928 232297, 264009 232272, 264592 231851, 264957 231443, 265357 230738, 265627 229813, 265721 229181, 265913 229104, 266100 228983, 266701 228705, 267340 228435, 268028 228170, 268512 227998, 269299 227742, 270122 227506, 270978 227290, 271873 227097, 272803 226929, 273771 226788, 274774 226679, 275815 226599, 276892 226553, 277816 226542, 278959 226567, 280151 226631, 281382 226730, 282647 226864, 283937 227027, 285258 227221, 286608 227438, 288091 227699, 289400 227941, 291118 228283, 292176 228505, 294154 228941, 295925 229357, 297482 229751, 298179 229946, 299323 230286, 299323 230339, 299442 231105, 299579 231856, 299709 232345, 300025 233088, 300296 233534, 300712 234052, 301305 234598, 301680 234847, 302102 235029, 302808 235463, 303548 235703, 303554 235704, 303748 235767, 304317 235856, 304836 235961, 304392 235839, 304060 235608, 303624 235362, 303007 234909, 302659 234533, 302674 234522, 303082 234345, 303350 234301, 303775 234619, 304101 234785, 304116 234755, 304296 234865, 304455 234488, 304318 234025, 304030 233437, 303593 232824, 303030 232249, 302406 231755, 301776 231353, 301176 231036, 300591 230769, 299507 230343, 299520 229894, 299471 228916, 299441 227799, 299427 226543, 299436 225160, 299463 223659, 299516 222050, 299604 220352, 299661 219447, 299804 217648, 299894 216704, 299999 215734, 300253 213713, 300560 211563, 300930 209263, 301170 207855, 301828 204138, 302909 198139, 303548 194805, 303904 193073, 304289 191305, 304706 189509, 305157 187694, 305632 185874, 306130 184059, 307164 180480, 307431 179607, 307684 178736, 309375 173174, 310066 170803, 310686 168545, 310964 167452, 311218 166379, 311454 165324, 311664 164286, 311854 163268, 312029 162194, 312165 161267, 312308 160063, 312408 159027, 312482 158007, 312535 156998, 312567 155996, 312577 155001, 312568 154000, 312536 152999, 312483 151991, 312407 150970, 312309 149933, 312185 148879, 312031 147803, 311848 146697, 311634 145556, 311385 144375, 311106 143154, 310793 141885, 310443 140566, 310061 139193, 309381 136884, 307711 131444, 306649 127914, 306174 126251, 305681 124470, 305206 122672, 304755 120864, 304339 119061, 303952 117271, 303592 115506, 303236 113668, 302644 110456, 301573 104465, 300985 101076, 300561 98442, 300344 96958, 300091 95041, 299982 94112, 299800 92300, 299659 90526, 299604 89698, 299520 88038, 299487 87131, 299437 84951, 299427 83561, 299440 82287, 299469 81144, 299521 80105, 299508 79655, 299667 79592, 299817 79536, 300221 79375, 300591 79230, 301176 78964, 301782 78641, 302407 78243, 303023 77755, 303592 77174, 304035 76560, 304319 75974, 304456 75509, 304295 75136, 304114 75245, 304100 75216, 303775 75379, 303330 75713, 303268 75705, 302672 75475, 302660 75466, 303011 75089, 303617 74641, 304057 74392, 304390 74161, 304835 74040, 304314 74144, 303758 74230, 303561 74294, 303558 74294, 302800 74539, 302101 74970, 301684 75151, 301309 75399, 300708 75953, 300297 76464, 300025 76908, 299709 77653, 299511 78397, 299386 79390, 299324 79658, 299324 79712, 298179 80053, 296732 80442, 295714 80693, 294020 81087, 292835 81349, 290841 81770, 289400 82057, 287861 82342, 286607 82560, 285258 82777, 283937 82970, 282646 83135, 281382 83270, 280152 83366, 278959 83431, 277848 83458, 276893 83446, 275816 83400, 274775 83322, 273772 83211, 272804 83069, 271874 82902, 270979 82709, 270123 82494, 269300 82258, 268512 82001, 268033 81832, 267341 81565, 266702 81295, 266101 81017, 265914 80894, 265722 80818, 265658 80316, 265520 79737, 265291 79067, 264957 78554, 264588 78147, 264013 77728, 263927 77701, 263124 77354, 263131 76492, 262915 76579, 262910 76468, 262554 76613, 262397 76981, 262387 77004, 262839 77266, 262578 77214, 262555 77216, 262499 77213, 262382 77182, 261924 77144, 261853 77278, 261834 77290, 261769 77297, 261715 77323, 261904 77034, 261869 76995, 261880 76978, 261956 76954, 261904 77034, 261909 77039, 262035 76947, 262281 76986, 262387 77004, 262386 77003, 262281 76986, 262003 76940, 262072 76918, 261930 76715, 261850 76676, 261802 76706, 261586 76552, 261274 76089, 261252 76122, 261164 76044, 261169 76404, 261148 76382, 260961 76066, 260979 76573, 261206 76901, 261316 77469, 260842 77586, 260521 77727, 260763 77740, 260634 77771, 260475 77844, 260970 77874, 261266 77830, 261254 78095, 261150 78432, 261262 78203, 261294 77826, 261300 77825, 261457 77857, 261371 78209, 261121 78884, 260937 79484, 261203 78868, 261202 78777, 261431 78236, 261583 78083, 261594 77947, 261496 77864, 261457 77857, 261462 77836, 261339 77733, 261318 77692, 261397 77673, 261502 77559, 261317 77691, 261307 77671, 261311 77629, 261362 77596, 261532 77512, 261502 77559, 261536 77598, 261512 77634, 261462 77836, 261496 77864, 261600 77885, 261594 77947, 261811 78129, 261928 78287, 261987 78273, 261965 78258, 262027 78264, 261987 78273, 262471 78615, 263191 79238, 263821 79697, 264400 80082, 264448 80111, 264597 80211, 265106 80514, 265254 80631, 265398 80688, 265516 80758, 265530 80850, 265610 81669, 265674 82772, 265715 83889, 265752 85703, 265768 87402, 265780 90850, 265772 94751, 265736 97143, 265702 98213, 265653 99316, 265585 100463, 265489 101662, 265362 102915, 265197 104237, 264970 105638, 264684 107126, 264304 108745, 263853 110392, 263296 112182, 262634 114092, 261875 116100, 261025 118181, 260125 120263, 259217 122286, 258065 124756, 256995 126990, 253465 134224, 252118 137065, 251506 138403, 250948 139681, 250437 140899, 249970 142057, 249559 143157, 249189 144206, 248865 145195, 248575 146164, 248322 147084, 248104 147968, 247915 148836, 247760 149647, 247627 150451, 247518 151237, 247434 152008, 247367 152768, 247321 153516, 247294 154260, 247284 155001, 247293 155738, 247322 156482, 247368 157233, 247434 157991, 247519 158761, 247626 159549, 247761 160354, 247933 161257, 248102 162032, 248221 162511, 247648 162511, 248072 164408, 248073 168087, 250026 168087, 250431 169099, 250941 170318, 251504 171594, 252113 172933, 252767 174325, 254190 177277, 256994 183015, 258309 185769, 259046 187350, 260121 189733, 261019 191813, 261869 193894, 262631 195905, 263274 197756, 263848 199603, 264309 201286, 264683 202870, 264970 204360, 265197 205762, 265362 207083, 265490 208337, 265585 209535, 265653 210682, 265702 211786, 265737 212856, 265770 214883, 265781 216800, 265767 222819, 265753 224298, 265711 226256, 265668 227372, 265595 228581, 265515 229242, 265310 229337, 265286 229354, 265255 229367, 265128 229467, 264596 229789, 264428 229902, 264401 229918, 263818 230302, 263194 230755, 262829 231086, 262433 231417, 261989 231726, 262091 231654, 261929 231714))) \ No newline at end of file diff --git a/stress_benchmark/resources/029.settings b/stress_benchmark/resources/029.settings index 2863e74b64..d0681a3d7a 100644 --- a/stress_benchmark/resources/029.settings +++ b/stress_benchmark/resources/029.settings @@ -6,7 +6,6 @@ resolution=0 _plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 skin_preshrink=1.2000000000000002 clean_between_layers=False -support_interface_skip_height=0.2 machine_feeder_wheel_diameter=10.0 retraction_hop_only_when_collides=True machine_steps_per_mm_y=50 @@ -44,6 +43,7 @@ cool_min_speed=10 cool_fan_enabled=True cool_fan_speed_max=100 wall_overhang_angle=90 +seam_overhang_angle=30 jerk_support_infill=20 wall_overhang_speed_factor=100 support_roof_line_width=0.4 diff --git a/stress_benchmark/resources/029.wkt b/stress_benchmark/resources/029.wkt index ba3c3f48af..2002838339 100644 --- a/stress_benchmark/resources/029.wkt +++ b/stress_benchmark/resources/029.wkt @@ -1 +1 @@ -MULTIPOLYGON (((1211 -19762, 662 -10796, 985 -10781, 1537 -10716, 1628 -10701, 2978 -19575, 4683 -19074, 2581 -10513, 2598 -10509, 3105 -10371, 3513 -10238, 6373 -18578, 4683 -19074, 4721 -19228, 6425 -18728, 6373 -18578, 8078 -18077, 4416 -9881, 4574 -9812, 5045 -9579, 5284 -9445, 4882 -8726, 5645 -8253, 6107 -8929, 5948 -9046, 5503 -9323, 5284 -9445, 9666 -17279, 11176 -16344, 6107 -8929, 6795 -8427, 6886 -8350, 6362 -7714, 7027 -7113, 7608 -7701, 7579 -7730, 7196 -8088, 6886 -8350, 12596 -15276, 13915 -14085, 7608 -7701, 7944 -7354, 8267 -6988, 7636 -6455, 8184 -5745, 8859 -6219, 8619 -6551, 8292 -6960, 8267 -6988, 15122 -12781, 16206 -11374, 8859 -6219, 8926 -6126, 9213 -5686, 9380 -5399, 8666 -4988, 9078 -4191, 9826 -4536, 9725 -4757, 9477 -5233, 9380 -5399, 17160 -9875, 17977 -8297, 9826 -4536, 9949 -4269, 10149 -3768, 10324 -3258, 10474 -2740, 10597 -2215, 10694 -1684, 10764 -1149, 10811 -576, 10826 0, 10822 177, 19796 323, 19688 2096, 10761 1146, 10810 728, 10822 177, 9998 164, 9943 1059, 10761 1146, 10716 1537, 10623 2086, 10509 2599, 10386 3050, 18998 5579, 18421 7259, 10070 3968, 10209 3603, 10371 3105, 10386 3050, 9594 2818, 9303 3666, 10070 3968, 10022 4094, 9812 4574, 9673 4855, 17696 8881, 16829 10432, 9198 5703, 9046 5948, 8643 6499, 15825 11898, 14695 13269, 8034 7254, 7730 7579, 7354 7944, 7352 7946, 13446 14533, 11992 15553, 12089 15679, 10636 16700, 10550 16565, 11992 15553, 6610 8572, 6960 8292, 7352 7946, 6790 7339, 6106 7918, 6610 8572, 6551 8619, 6126 8926, 5815 9129, 10550 16565, 9095 17586, 4972 9613, 5233 9477, 5686 9213, 5815 9129, 5372 8434, 4594 8881, 4972 9613, 4757 9725, 4269 9949, 4090 10020, 7482 18331, 5809 18928, 3176 10348, 3258 10324, 3768 10149, 4090 10020, 3779 9257, 2934 9559, 3176 10348, 2740 10474, 2236 10592, 4089 19372, 2336 19661, 1277 10747, 1684 10694, 2214 10597, 2236 10592, 2065 9783, 1180 9929, 1277 10747, 1149 10764, 575 10811, 308 10818, 564 19791, -1211 19762, -662 10796, -985 10781, -1537 10716, -1628 10701, -1504 9885, -2384 9711, -2581 10513, -2086 10623, -1628 10701, -2978 19575, -4683 19074, -2581 10513, -2599 10509, -3105 10371, -3513 10238, -3245 9458, -4080 9129, -4416 9881, -4094 10022, -3603 10209, -3513 10238, -6373 18578, -4683 19074, -4721 19228, -6425 18728, -6373 18578, -8078 18077, -4416 9881, -4574 9812, -5045 9579, -5284 9445, -9666 17279, -11176 16344, -6107 8929, -6795 8427, -6886 8350, -12595 15274, -13915 14085, -7608 7701, -7944 7354, -8267 6988, -7636 6455, -8184 5745, -8859 6219, -8619 6551, -8292 6960, -8267 6988, -15122 12781, -16206 11374, -8859 6219, -8926 6126, -9213 5686, -9380 5399, -8666 4988, -9078 4191, -9826 4536, -9725 4757, -9477 5233, -9380 5399, -17160 9875, -17977 8297, -9826 4536, -9949 4269, -10149 3768, -10324 3258, -10474 2740, -10597 2215, -10694 1684, -10764 1149, -10811 576, -10826 0, -10818 -177, -19795 -323, -19688 -2096, -10762 -1146, -10716 -1537, -10623 -2086, -10509 -2599, -10386 -3050, -18998 -5579, -18421 -7259, -10070 -3968, -10209 -3603, -10371 -3105, -10386 -3050, -9594 -2818, -9303 -3666, -10070 -3968, -10022 -4094, -9812 -4574, -9579 -5045, -9323 -5503, -9199 -5703, -16829 -10432, -15825 -11898, -8643 -6499, -9046 -5948, -9199 -5703, -8499 -5269, -7992 -6009, -8643 -6499, -8427 -6795, -8088 -7196, -8034 -7254, -14695 -13269, -13447 -14533, -7352 -7946, -7354 -7944, -7730 -7579, -8034 -7254, -7421 -6701, -6791 -7339, -7352 -7946, -6960 -8292, -6610 -8572, -12089 -15679, -10636 -16700, -5815 -9129, -6126 -8926, -6551 -8619, -6610 -8572, -6106 -7918, -5372 -8434, -5815 -9129, -5686 -9213, -5233 -9477, -4757 -9725, -4269 -9949, -4090 -10020, -7482 -18331, -5809 -18928, -3176 -10348, -2740 -10474, -2236 -10592, -4089 -19372, -2336 -19661, -1277 -10747, -1684 -10694, -2215 -10597, -2236 -10592, -2065 -9783, -1180 -9929, -1277 -10747, -1149 -10764, -576 -10811, -308 -10818, -564 -19791) (-662 10796, 0 10826, 308 10818, 285 9995, -612 9980) (-308 -10818, -285 -9995, 612 -9980, 662 -10796, 0 -10826)), ((1831 -37382, 3665 -37248, 5489 -37022, 7297 -36709, 9092 -36306, 10860 -35816, 12608 -35239, 14320 -34579, 16000 -33834, 17641 -33008, 19240 -32103, 20792 -31120, 22294 -30062, 23743 -28932, 25134 -27732, 26465 -26465, 27732 -25134, 28910 -23770, 30063 -22293, 31119 -20793, 32104 -19239, 33008 -17642, 33835 -15998, 34578 -14322, 35241 -12604, 35815 -10863, 36307 -9088, 36708 -7301, 37023 -5485, 37247 -3668, 37382 -1829, 37412 0, 37383 1832, 37247 3665, 37022 5489, 36709 7297, 36306 9092, 35816 10860, 35239 12608, 34579 14320, 33834 16000, 33008 17641, 32103 19240, 31120 20792, 30062 22294, 28932 23743, 27732 25134, 26465 26465, 25134 27732, 23770 28910, 22293 30063, 20793 31119, 19238 32104, 17642 33008, 15998 33835, 14322 34578, 12604 35241, 10863 35815, 9088 36307, 7301 36708, 5485 37023, 3668 37247, 1829 37382, 0 37427, -1831 37382, -3665 37248, -5489 37022, -7297 36709, -9092 36306, -10860 35816, -12608 35239, -14320 34579, -16001 33834, -17641 33008, -19240 32103, -20792 31120, -22294 30062, -23743 28932, -25134 27732, -26465 26465, -27732 25134, -28910 23770, -30063 22293, -31119 20793, -32104 19239, -33008 17642, -33835 15998, -34578 14322, -35241 12604, -35815 10863, -36307 9088, -36708 7301, -37023 5485, -37247 3668, -37382 1829, -37412 0, -37383 -1832, -37248 -3665, -37022 -5489, -36709 -7297, -36306 -9092, -35816 -10860, -35239 -12608, -34579 -14320, -33834 -16000, -33009 -17641, -32103 -19240, -31120 -20792, -30062 -22294, -28932 -23743, -27732 -25134, -26465 -26465, -25134 -27732, -23770 -28910, -22293 -30063, -20793 -31119, -19238 -32104, -17643 -33008, -15998 -33835, -14322 -34578, -12604 -35241, -10863 -35815, -9088 -36307, -7301 -36708, -5485 -37023, -3668 -37247, -1829 -37382, 0 -37427) (-968 -19849, -1936 -19778, -2862 -19666, -3797 -19506, -4737 -19300, -5678 -19044, -6617 -18739, -7550 -18383, -8473 -17976, -9374 -17523, -10242 -17030, -11088 -16492, -11911 -15908, -12706 -15281, -13469 -14613, -14198 -13905, -14890 -13162, -15541 -12385, -16152 -11578, -16717 -10746, -17237 -9890, -17711 -9015, -18136 -8125, -18513 -7223, -18844 -6313, -19126 -5398, -19361 -4483, -19549 -3570, -19701 -2611, -19804 -1654, -19859 -701, -19873 0, -19849 968, -19779 1936, -19666 2862, -19506 3797, -19300 4737, -19044 5678, -18739 6617, -18383 7550, -17976 8473, -17523 9374, -17030 10242, -16492 11088, -15908 11911, -15281 12706, -14613 13469, -13905 14198, -13162 14890, -12385 15541, -11578 16152, -10746 16717, -9890 17237, -9015 17711, -8125 18136, -7223 18513, -6313 18844, -5398 19126, -4483 19361, -3570 19549, -2611 19701, -1654 19804, -701 19859, 0 19873, 968 19849, 1936 19778, 2862 19666, 3797 19506, 4737 19300, 5678 19044, 6617 18739, 7550 18383, 8473 17976, 9374 17523, 10242 17030, 11088 16492, 11911 15908, 12706 15281, 13469 14613, 14198 13905, 14889 13162, 15541 12385, 16152 11578, 16717 10746, 17237 9890, 17711 9015, 18136 8125, 18513 7223, 18844 6313, 19126 5398, 19361 4483, 19549 3570, 19701 2611, 19804 1654, 19859 701, 19872 -21, 19849 -968, 19778 -1936, 19666 -2862, 19506 -3797, 19300 -4737, 19044 -5678, 18739 -6617, 18383 -7550, 17976 -8473, 17523 -9374, 17030 -10242, 16492 -11088, 15908 -11911, 15281 -12706, 14613 -13469, 13905 -14198, 13162 -14890, 12385 -15541, 11578 -16152, 10746 -16717, 9890 -17237, 9015 -17711, 8125 -18136, 7223 -18513, 6313 -18844, 5398 -19126, 4483 -19361, 3570 -19549, 2610 -19701, 1654 -19804, 701 -19859, 0 -19873))) \ No newline at end of file +MULTIPOLYGON (((1211 -19762, 662 -10796, 985 -10781, 1537 -10716, 1628 -10701, 2978 -19575, 4683 -19074, 2581 -10513, 2598 -10509, 3105 -10371, 3513 -10238, 6373 -18578, 4683 -19074, 4721 -19228, 6425 -18728, 6373 -18578, 8078 -18077, 4416 -9881, 4574 -9812, 5045 -9579, 5284 -9445, 4882 -8726, 5645 -8253, 6107 -8929, 5948 -9046, 5503 -9323, 5284 -9445, 9666 -17279, 11176 -16344, 6107 -8929, 6795 -8427, 6886 -8350, 6362 -7714, 7027 -7113, 7608 -7701, 7579 -7730, 7196 -8088, 6886 -8350, 12596 -15276, 13915 -14085, 7608 -7701, 7944 -7354, 8267 -6988, 7636 -6455, 8184 -5745, 8859 -6219, 8619 -6551, 8292 -6960, 8267 -6988, 15122 -12781, 16206 -11374, 8859 -6219, 8926 -6126, 9213 -5686, 9380 -5399, 8666 -4988, 9078 -4191, 9826 -4536, 9725 -4757, 9477 -5233, 9380 -5399, 17160 -9875, 17977 -8297, 9826 -4536, 9949 -4269, 10149 -3768, 10324 -3258, 10474 -2740, 10597 -2215, 10694 -1684, 10764 -1149, 10811 -576, 10826 0, 10822 177, 19796 323, 19688 2096, 10761 1146, 10810 728, 10822 177, 9998 164, 9943 1059, 10761 1146, 10716 1537, 10623 2086, 10509 2599, 10386 3050, 18998 5579, 18421 7259, 10070 3968, 10209 3603, 10371 3105, 10386 3050, 9594 2818, 9303 3666, 10070 3968, 10022 4094, 9812 4574, 9673 4855, 17696 8881, 16829 10432, 9198 5703, 9046 5948, 8643 6499, 15825 11898, 14695 13269, 8034 7254, 7730 7579, 7354 7944, 7352 7946, 13446 14533, 11992 15553, 12089 15679, 10636 16700, 10550 16565, 11992 15553, 6610 8572, 6960 8292, 7352 7946, 6790 7339, 6106 7918, 6610 8572, 6551 8619, 6126 8926, 5815 9129, 10550 16565, 9095 17586, 4972 9613, 5233 9477, 5686 9213, 5815 9129, 5372 8434, 4594 8881, 4972 9613, 4757 9725, 4269 9949, 4090 10020, 7482 18331, 5809 18928, 3176 10348, 3258 10324, 3768 10149, 4090 10020, 3779 9257, 2934 9559, 3176 10348, 2740 10474, 2236 10592, 4089 19372, 2336 19661, 1277 10747, 1684 10694, 2214 10597, 2236 10592, 2065 9783, 1180 9929, 1277 10747, 1149 10764, 575 10811, 308 10818, 564 19791, -1211 19762, -662 10796, -985 10781, -1537 10716, -1628 10701, -1504 9885, -2384 9711, -2581 10513, -2086 10623, -1628 10701, -2978 19575, -4683 19074, -2581 10513, -2599 10509, -3105 10371, -3513 10238, -3245 9458, -4080 9129, -4416 9881, -4094 10022, -3603 10209, -3513 10238, -6373 18578, -4683 19074, -4721 19228, -6425 18728, -6373 18578, -8078 18077, -4416 9881, -4574 9812, -5045 9579, -5284 9445, -9666 17279, -11176 16344, -6107 8929, -6795 8427, -6886 8350, -12595 15274, -13915 14085, -7608 7701, -7944 7354, -8267 6988, -7636 6455, -8184 5745, -8859 6219, -8619 6551, -8292 6960, -8267 6988, -15122 12781, -16206 11374, -8859 6219, -8926 6126, -9213 5686, -9380 5399, -8666 4988, -9078 4191, -9826 4536, -9725 4757, -9477 5233, -9380 5399, -17160 9875, -17977 8297, -9826 4536, -9949 4269, -10149 3768, -10324 3258, -10474 2740, -10597 2215, -10694 1684, -10764 1149, -10811 576, -10826 0, -10818 -177, -19795 -323, -19688 -2096, -10762 -1146, -10716 -1537, -10623 -2086, -10509 -2599, -10386 -3050, -18998 -5579, -18421 -7259, -10070 -3968, -10209 -3603, -10371 -3105, -10386 -3050, -9594 -2818, -9303 -3666, -10070 -3968, -10022 -4094, -9812 -4574, -9579 -5045, -9323 -5503, -9199 -5703, -16829 -10432, -15825 -11898, -8643 -6499, -9046 -5948, -9199 -5703, -8499 -5269, -7992 -6009, -8643 -6499, -8427 -6795, -8088 -7196, -8034 -7254, -14695 -13269, -13447 -14533, -7352 -7946, -7354 -7944, -7730 -7579, -8034 -7254, -7421 -6701, -6791 -7339, -7352 -7946, -6960 -8292, -6610 -8572, -12089 -15679, -10636 -16700, -5815 -9129, -6126 -8926, -6551 -8619, -6610 -8572, -6106 -7918, -5372 -8434, -5815 -9129, -5686 -9213, -5233 -9477, -4757 -9725, -4269 -9949, -4090 -10020, -7482 -18331, -5809 -18928, -3176 -10348, -2740 -10474, -2236 -10592, -4089 -19372, -2336 -19661, -1277 -10747, -1684 -10694, -2215 -10597, -2236 -10592, -2065 -9783, -1180 -9929, -1277 -10747, -1149 -10764, -576 -10811, -308 -10818, -564 -19791, 1211 -19762), (-662 10796, 0 10826, 308 10818, 285 9995, -612 9980, -662 10796), (-308 -10818, -285 -9995, 612 -9980, 662 -10796, 0 -10826, -308 -10818)), ((1831 -37382, 3665 -37248, 5489 -37022, 7297 -36709, 9092 -36306, 10860 -35816, 12608 -35239, 14320 -34579, 16000 -33834, 17641 -33008, 19240 -32103, 20792 -31120, 22294 -30062, 23743 -28932, 25134 -27732, 26465 -26465, 27732 -25134, 28910 -23770, 30063 -22293, 31119 -20793, 32104 -19239, 33008 -17642, 33835 -15998, 34578 -14322, 35241 -12604, 35815 -10863, 36307 -9088, 36708 -7301, 37023 -5485, 37247 -3668, 37382 -1829, 37412 0, 37383 1832, 37247 3665, 37022 5489, 36709 7297, 36306 9092, 35816 10860, 35239 12608, 34579 14320, 33834 16000, 33008 17641, 32103 19240, 31120 20792, 30062 22294, 28932 23743, 27732 25134, 26465 26465, 25134 27732, 23770 28910, 22293 30063, 20793 31119, 19238 32104, 17642 33008, 15998 33835, 14322 34578, 12604 35241, 10863 35815, 9088 36307, 7301 36708, 5485 37023, 3668 37247, 1829 37382, 0 37427, -1831 37382, -3665 37248, -5489 37022, -7297 36709, -9092 36306, -10860 35816, -12608 35239, -14320 34579, -16001 33834, -17641 33008, -19240 32103, -20792 31120, -22294 30062, -23743 28932, -25134 27732, -26465 26465, -27732 25134, -28910 23770, -30063 22293, -31119 20793, -32104 19239, -33008 17642, -33835 15998, -34578 14322, -35241 12604, -35815 10863, -36307 9088, -36708 7301, -37023 5485, -37247 3668, -37382 1829, -37412 0, -37383 -1832, -37248 -3665, -37022 -5489, -36709 -7297, -36306 -9092, -35816 -10860, -35239 -12608, -34579 -14320, -33834 -16000, -33009 -17641, -32103 -19240, -31120 -20792, -30062 -22294, -28932 -23743, -27732 -25134, -26465 -26465, -25134 -27732, -23770 -28910, -22293 -30063, -20793 -31119, -19238 -32104, -17643 -33008, -15998 -33835, -14322 -34578, -12604 -35241, -10863 -35815, -9088 -36307, -7301 -36708, -5485 -37023, -3668 -37247, -1829 -37382, 0 -37427, 1831 -37382), (-968 -19849, -1936 -19778, -2862 -19666, -3797 -19506, -4737 -19300, -5678 -19044, -6617 -18739, -7550 -18383, -8473 -17976, -9374 -17523, -10242 -17030, -11088 -16492, -11911 -15908, -12706 -15281, -13469 -14613, -14198 -13905, -14890 -13162, -15541 -12385, -16152 -11578, -16717 -10746, -17237 -9890, -17711 -9015, -18136 -8125, -18513 -7223, -18844 -6313, -19126 -5398, -19361 -4483, -19549 -3570, -19701 -2611, -19804 -1654, -19859 -701, -19873 0, -19849 968, -19779 1936, -19666 2862, -19506 3797, -19300 4737, -19044 5678, -18739 6617, -18383 7550, -17976 8473, -17523 9374, -17030 10242, -16492 11088, -15908 11911, -15281 12706, -14613 13469, -13905 14198, -13162 14890, -12385 15541, -11578 16152, -10746 16717, -9890 17237, -9015 17711, -8125 18136, -7223 18513, -6313 18844, -5398 19126, -4483 19361, -3570 19549, -2611 19701, -1654 19804, -701 19859, 0 19873, 968 19849, 1936 19778, 2862 19666, 3797 19506, 4737 19300, 5678 19044, 6617 18739, 7550 18383, 8473 17976, 9374 17523, 10242 17030, 11088 16492, 11911 15908, 12706 15281, 13469 14613, 14198 13905, 14889 13162, 15541 12385, 16152 11578, 16717 10746, 17237 9890, 17711 9015, 18136 8125, 18513 7223, 18844 6313, 19126 5398, 19361 4483, 19549 3570, 19701 2611, 19804 1654, 19859 701, 19872 -21, 19849 -968, 19778 -1936, 19666 -2862, 19506 -3797, 19300 -4737, 19044 -5678, 18739 -6617, 18383 -7550, 17976 -8473, 17523 -9374, 17030 -10242, 16492 -11088, 15908 -11911, 15281 -12706, 14613 -13469, 13905 -14198, 13162 -14890, 12385 -15541, 11578 -16152, 10746 -16717, 9890 -17237, 9015 -17711, 8125 -18136, 7223 -18513, 6313 -18844, 5398 -19126, 4483 -19361, 3570 -19549, 2610 -19701, 1654 -19804, 701 -19859, 0 -19873, -968 -19849))) \ No newline at end of file diff --git a/stress_benchmark/resources/030.settings b/stress_benchmark/resources/030.settings index fda295d176..3e3cae334c 100644 --- a/stress_benchmark/resources/030.settings +++ b/stress_benchmark/resources/030.settings @@ -6,7 +6,6 @@ resolution=0 _plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 skin_preshrink=0.8 clean_between_layers=False -support_interface_skip_height=0.1 machine_feeder_wheel_diameter=10.0 retraction_hop_only_when_collides=True machine_steps_per_mm_y=50 @@ -44,6 +43,7 @@ cool_min_speed=4 cool_fan_enabled=True cool_fan_speed_max=100 wall_overhang_angle=90 +seam_overhang_angle=30 jerk_support_infill=20 wall_overhang_speed_factor=100 support_roof_line_width=0.4 diff --git a/stress_benchmark/resources/030.wkt b/stress_benchmark/resources/030.wkt index 0772ef253f..3779801e23 100644 --- a/stress_benchmark/resources/030.wkt +++ b/stress_benchmark/resources/030.wkt @@ -1 +1 @@ -MULTIPOLYGON (((165545 104990, 166144 105023, 166739 105081, 167332 105162, 167922 105267, 168506 105395, 169505 105667, 170226 105918, 170226 105917, 171059 106256, 171602 106509, 172135 106783, 173046 107311, 173905 107904, 174613 108458, 175285 109054, 175699 109458, 176112 109894, 176504 110344, 176881 110811, 177238 111293, 177576 111788, 177893 112296, 178191 112816, 178466 113347, 178721 113890, 179119 114861, 179118 114861, 179437 115859, 179591 116439, 179778 117318, 179873 117909, 179944 118505, 180007 119400, 180020 120000, 180007 120599, 179947 121473, 179873 122091, 179778 122682, 179597 123539, 179437 124140, 179260 124712, 179061 125278, 179062 125278, 178721 126109, 178466 126652, 178190 127183, 177666 128079, 177238 128706, 176881 129188, 176504 129655, 176112 130105, 175684 130556, 175034 131176, 174581 131567, 174111 131939, 173628 132294, 172877 132787, 172099 133235, 171564 133508, 170744 133877, 169924 134190, 169334 134381, 169334 134380, 168466 134613, 167880 134740, 167290 134843, 166420 134952, 165502 135010, 164903 135020, 164006 134987, 163408 134935, 162518 134813, 161929 134703, 161055 134492, 160194 134230, 160194 134231, 159632 134029, 159076 133803, 158532 133557, 158532 133556, 157732 133144, 157213 132843, 156707 132523, 156214 132183, 155503 131636, 154823 131047, 154405 130646, 153989 130215, 153397 129539, 152847 128827, 152505 128336, 152182 127831, 151736 127050, 151466 126516, 151101 125694, 150884 125135, 150883 125135, 150691 124570, 150442 123705, 150306 123123, 150307 123123, 150147 122238, 150070 121643, 150002 120899, 149980 120150, 149996 119273, 150070 118355, 150147 117760, 150307 116876, 150443 116293, 150692 115428, 150884 114863, 150885 114862, 150885 114861, 151217 114028, 151466 113482, 151737 112948, 152183 112167, 152506 111662, 152847 111171, 153397 110459, 153788 110005, 154195 109566, 154853 108923, 155304 108529, 155768 108151, 156248 107792, 156742 107452, 157249 107135, 157768 106835, 158300 106557, 158841 106300, 159797 105904, 160521 105663, 160521 105664, 161386 105421, 161970 105288, 162560 105180, 163320 105070, 164326 104995, 164945 104980) (164828 109971, 164229 110000, 163633 110063, 163631 110063, 163041 110163, 162456 110297, 162455 110297, 161879 110466, 161316 110670, 161315 110671, 160764 110907, 160229 111177, 160228 111177, 159710 111477, 159209 111809, 159208 111810, 158730 112171, 158273 112560, 158272 112561, 157854 112960, 157345 113509, 157344 113510, 156884 114104, 156458 114730, 156457 114731, 156097 115379, 155836 115919, 155836 115920, 155609 116474, 155415 117042, 155414 117043, 155255 117621, 155130 118207, 155130 118209, 155041 118802, 154974 119557, 154974 120299, 155010 120897, 155010 120898, 155077 121472, 155188 122084, 155188 122085, 155330 122667, 155553 123388, 155554 123390, 155836 124079, 156097 124619, 156097 124620, 156388 125144, 156795 125780, 156796 125781, 157251 126369, 157750 126940, 157751 126941, 158303 127466, 158761 127853, 158762 127854, 159242 128213, 159726 128532, 159727 128533, 160264 128841, 160782 129101, 160783 129101, 161353 129343, 161918 129545, 161919 129546, 162495 129712, 163080 129844, 163081 129844, 163797 129963, 164548 130019, 164550 130019, 165170 130028, 165769 129999, 165770 129999, 166366 129936, 166956 129836, 166957 129836, 167543 129702, 168118 129533, 168119 129532, 168682 129328, 169359 129038, 169361 129038, 170033 128676, 170542 128359, 170543 128358, 171015 128025, 171500 127637, 171501 127636, 171945 127235, 172351 126822, 172352 126822, 172747 126370, 173114 125896, 173114 125895, 173451 125400, 173759 124885, 173760 124884, 174036 124352, 174280 123804, 174280 123803, 174544 123097, 174743 122379, 174744 122377, 174868 121791, 174957 121198, 174957 121197, 175011 120600, 175030 120001, 175030 120000, 175013 119422, 174943 118650, 174943 118648, 174782 117759, 174584 117044, 174583 117043, 174389 116475, 174162 115921, 174162 115920, 173902 115380, 173610 114856, 173609 114855, 173202 114219, 172747 113631, 172747 113629, 172248 113058, 171696 112533, 171694 112532, 171237 112145, 170756 111786, 170272 111467, 169735 111159, 169733 111158, 169215 110898, 168645 110656, 168644 110656, 168079 110454, 167504 110288, 167503 110287, 166917 110155, 166201 110036, 166200 110036, 165449 109980, 164829 109971))) \ No newline at end of file +MULTIPOLYGON (((165545 104990, 166144 105023, 166739 105081, 167332 105162, 167922 105267, 168506 105395, 169505 105667, 170226 105918, 170226 105917, 171059 106256, 171602 106509, 172135 106783, 173046 107311, 173905 107904, 174613 108458, 175285 109054, 175699 109458, 176112 109894, 176504 110344, 176881 110811, 177238 111293, 177576 111788, 177893 112296, 178191 112816, 178466 113347, 178721 113890, 179119 114861, 179118 114861, 179437 115859, 179591 116439, 179778 117318, 179873 117909, 179944 118505, 180007 119400, 180020 120000, 180007 120599, 179947 121473, 179873 122091, 179778 122682, 179597 123539, 179437 124140, 179260 124712, 179061 125278, 179062 125278, 178721 126109, 178466 126652, 178190 127183, 177666 128079, 177238 128706, 176881 129188, 176504 129655, 176112 130105, 175684 130556, 175034 131176, 174581 131567, 174111 131939, 173628 132294, 172877 132787, 172099 133235, 171564 133508, 170744 133877, 169924 134190, 169334 134381, 169334 134380, 168466 134613, 167880 134740, 167290 134843, 166420 134952, 165502 135010, 164903 135020, 164006 134987, 163408 134935, 162518 134813, 161929 134703, 161055 134492, 160194 134230, 160194 134231, 159632 134029, 159076 133803, 158532 133557, 158532 133556, 157732 133144, 157213 132843, 156707 132523, 156214 132183, 155503 131636, 154823 131047, 154405 130646, 153989 130215, 153397 129539, 152847 128827, 152505 128336, 152182 127831, 151736 127050, 151466 126516, 151101 125694, 150884 125135, 150883 125135, 150691 124570, 150442 123705, 150306 123123, 150307 123123, 150147 122238, 150070 121643, 150002 120899, 149980 120150, 149996 119273, 150070 118355, 150147 117760, 150307 116876, 150443 116293, 150692 115428, 150884 114863, 150885 114862, 150885 114861, 151217 114028, 151466 113482, 151737 112948, 152183 112167, 152506 111662, 152847 111171, 153397 110459, 153788 110005, 154195 109566, 154853 108923, 155304 108529, 155768 108151, 156248 107792, 156742 107452, 157249 107135, 157768 106835, 158300 106557, 158841 106300, 159797 105904, 160521 105663, 160521 105664, 161386 105421, 161970 105288, 162560 105180, 163320 105070, 164326 104995, 164945 104980, 165545 104990), (164828 109971, 164229 110000, 163633 110063, 163631 110063, 163041 110163, 162456 110297, 162455 110297, 161879 110466, 161316 110670, 161315 110671, 160764 110907, 160229 111177, 160228 111177, 159710 111477, 159209 111809, 159208 111810, 158730 112171, 158273 112560, 158272 112561, 157854 112960, 157345 113509, 157344 113510, 156884 114104, 156458 114730, 156457 114731, 156097 115379, 155836 115919, 155836 115920, 155609 116474, 155415 117042, 155414 117043, 155255 117621, 155130 118207, 155130 118209, 155041 118802, 154974 119557, 154974 120299, 155010 120897, 155010 120898, 155077 121472, 155188 122084, 155188 122085, 155330 122667, 155553 123388, 155554 123390, 155836 124079, 156097 124619, 156097 124620, 156388 125144, 156795 125780, 156796 125781, 157251 126369, 157750 126940, 157751 126941, 158303 127466, 158761 127853, 158762 127854, 159242 128213, 159726 128532, 159727 128533, 160264 128841, 160782 129101, 160783 129101, 161353 129343, 161918 129545, 161919 129546, 162495 129712, 163080 129844, 163081 129844, 163797 129963, 164548 130019, 164550 130019, 165170 130028, 165769 129999, 165770 129999, 166366 129936, 166956 129836, 166957 129836, 167543 129702, 168118 129533, 168119 129532, 168682 129328, 169359 129038, 169361 129038, 170033 128676, 170542 128359, 170543 128358, 171015 128025, 171500 127637, 171501 127636, 171945 127235, 172351 126822, 172352 126822, 172747 126370, 173114 125896, 173114 125895, 173451 125400, 173759 124885, 173760 124884, 174036 124352, 174280 123804, 174280 123803, 174544 123097, 174743 122379, 174744 122377, 174868 121791, 174957 121198, 174957 121197, 175011 120600, 175030 120001, 175030 120000, 175013 119422, 174943 118650, 174943 118648, 174782 117759, 174584 117044, 174583 117043, 174389 116475, 174162 115921, 174162 115920, 173902 115380, 173610 114856, 173609 114855, 173202 114219, 172747 113631, 172747 113629, 172248 113058, 171696 112533, 171694 112532, 171237 112145, 170756 111786, 170272 111467, 169735 111159, 169733 111158, 169215 110898, 168645 110656, 168644 110656, 168079 110454, 167504 110288, 167503 110287, 166917 110155, 166201 110036, 166200 110036, 165449 109980, 164829 109971, 164828 109971))) \ No newline at end of file diff --git a/stress_benchmark/resources/031.settings b/stress_benchmark/resources/031.settings index 40d89ac715..a94a42aa37 100644 --- a/stress_benchmark/resources/031.settings +++ b/stress_benchmark/resources/031.settings @@ -6,7 +6,6 @@ resolution=0 _plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 skin_preshrink=0.8 clean_between_layers=False -support_interface_skip_height=0.2 machine_feeder_wheel_diameter=10.0 retraction_hop_only_when_collides=False machine_steps_per_mm_y=50 @@ -44,6 +43,7 @@ cool_min_speed=10 cool_fan_enabled=True cool_fan_speed_max=100 wall_overhang_angle=90 +seam_overhang_angle=30 jerk_support_infill=8 wall_overhang_speed_factor=100 support_roof_line_width=0.4 diff --git a/stress_benchmark/resources/031.wkt b/stress_benchmark/resources/031.wkt index 4fcd765f04..3993010d68 100644 --- a/stress_benchmark/resources/031.wkt +++ b/stress_benchmark/resources/031.wkt @@ -1 +1 @@ -MULTIPOLYGON (((97927 134531, 98345 134621, 98747 134771, 99122 134976, 99464 135232, 99768 135536, 100024 135878, 100229 136253, 100379 136655, 100469 137071, 100500 137500, 100469 137929, 100379 138345, 100229 138747, 100024 139122, 99768 139464, 99464 139768, 99122 140024, 98747 140229, 98345 140379, 97927 140469, 97500 140500, 97073 140469, 96655 140379, 96253 140229, 95878 140024, 95536 139768, 95232 139464, 94976 139122, 94771 138747, 94621 138345, 94531 137929, 94500 137500, 94531 137071, 94621 136655, 94771 136253, 94976 135878, 95232 135536, 95536 135232, 95878 134976, 96253 134771, 96655 134621, 97073 134531, 97500 134500)), ((137927 134531, 138345 134621, 138747 134771, 139122 134976, 139464 135232, 139768 135536, 140024 135878, 140229 136253, 140379 136655, 140469 137071, 140500 137500, 140469 137929, 140379 138345, 140229 138747, 140024 139122, 139768 139464, 139464 139768, 139122 140024, 138747 140229, 138345 140379, 137927 140469, 137500 140500, 137073 140469, 136655 140379, 136253 140229, 135878 140024, 135536 139768, 135232 139464, 134976 139122, 134771 138747, 134621 138345, 134531 137929, 134500 137500, 134531 137071, 134621 136655, 134771 136253, 134976 135878, 135232 135536, 135536 135232, 135878 134976, 136253 134771, 136655 134621, 137073 134531, 137500 134500)), ((117927 114531, 118345 114621, 118747 114771, 119122 114976, 119464 115232, 119768 115536, 120024 115878, 120229 116253, 120379 116655, 120469 117071, 120500 117500, 120469 117929, 120379 118345, 120229 118747, 120024 119122, 119768 119464, 119464 119768, 119122 120024, 118747 120229, 118345 120379, 117927 120469, 117500 120500, 117073 120469, 116655 120379, 116253 120229, 115878 120024, 115536 119768, 115232 119464, 114976 119122, 114771 118747, 114621 118345, 114531 117929, 114500 117500, 114531 117071, 114621 116655, 114771 116253, 114976 115878, 115232 115536, 115536 115232, 115878 114976, 116253 114771, 116655 114621, 117073 114531, 117500 114500)), ((118197 109531, 118889 109622, 119572 109773, 120237 109982, 120882 110250, 121501 110573, 122091 110948, 122644 111373, 123159 111845, 123630 112360, 124055 112914, 124430 113503, 124752 114123, 125019 114768, 125227 115428, 125379 116116, 125469 116805, 125500 117500, 125469 118200, 125378 118889, 125227 119572, 125018 120237, 124750 120882, 124427 121501, 124052 122091, 123627 122644, 123155 123159, 122640 123630, 122086 124055, 121497 124430, 120877 124752, 120232 125019, 119572 125227, 118884 125379, 118192 125469, 117500 125500, 116803 125469, 116111 125378, 115428 125227, 114763 125018, 114118 124750, 113499 124427, 112909 124052, 112356 123627, 111841 123155, 111370 122640, 110945 122086, 110570 121497, 110248 120877, 109981 120232, 109773 119572, 109621 118884, 109531 118195, 109500 117500, 109531 116800, 109622 116111, 109773 115428, 109982 114763, 110250 114118, 110573 113499, 110948 112909, 111373 112356, 111845 111841, 112360 111370, 112914 110945, 113503 110570, 114123 110248, 114768 109981, 115428 109773, 116116 109621, 116808 109531, 117500 109500) (117166 110508, 116504 110571, 115849 110698, 115211 110885, 114591 111133, 114001 111438, 113439 111798, 112916 112210, 112433 112670, 111998 113173, 111611 113716, 111278 114292, 111001 114899, 110784 115528, 110626 116175, 110532 116832, 110500 117500, 110532 118168, 110626 118825, 110784 119472, 111001 120101, 111278 120708, 111611 121284, 111998 121827, 112433 122330, 112916 122790, 113439 123202, 114001 123562, 114591 123867, 115211 124115, 115849 124302, 116504 124429, 117166 124492, 117834 124492, 118496 124429, 119151 124302, 119789 124115, 120409 123867, 120999 123562, 121561 123202, 122084 122790, 122567 122330, 123002 121827, 123389 121284, 123722 120708, 123999 120101, 124216 119472, 124374 118825, 124468 118168, 124500 117500, 124468 116832, 124374 116175, 124216 115528, 123999 114899, 123722 114292, 123389 113716, 123002 113173, 122567 112670, 122084 112210, 121561 111798, 120999 111438, 120409 111133, 119789 110885, 119151 110698, 118496 110571, 117834 110508)), ((118147 102071, 118563 102195, 118956 102377, 119320 102615, 119645 102903, 119925 103234, 120155 103603, 120329 104001, 120443 104418, 120496 104850, 121366 105088, 122211 105384, 123035 105737, 123835 106148, 124603 106612, 125339 107129, 126035 107695, 126692 108308, 127305 108965, 127871 109661, 128388 110397, 128852 111165, 129263 111965, 129616 112789, 129912 113634, 130150 114504, 130574 114555, 130999 114671, 131397 114845, 131766 115075, 132097 115355, 132385 115680, 132623 116044, 132805 116437, 132929 116853, 132992 117283, 132992 117717, 132929 118147, 132805 118563, 132623 118956, 132385 119320, 132097 119645, 131766 119925, 131397 120155, 130999 120329, 130582 120443, 130150 120496, 129912 121366, 129616 122211, 129263 123035, 128852 123835, 128388 124603, 127871 125339, 127305 126035, 126692 126692, 126035 127305, 125339 127871, 124603 128388, 123835 128852, 123035 129263, 122211 129616, 121366 129912, 120496 130150, 120445 130574, 120329 130999, 120155 131397, 119925 131766, 119645 132097, 119320 132385, 118956 132623, 118563 132805, 118147 132929, 117717 132992, 117283 132992, 116853 132929, 116437 132805, 116044 132623, 115680 132385, 115355 132097, 115075 131766, 114845 131397, 114671 130999, 114557 130582, 114504 130150, 113634 129912, 112789 129616, 111965 129263, 111165 128852, 110397 128388, 109661 127871, 108965 127305, 108308 126692, 107695 126035, 107129 125339, 106612 124603, 106148 123835, 105737 123035, 105384 122211, 105088 121366, 104850 120496, 104426 120445, 104001 120329, 103603 120155, 103234 119925, 102903 119645, 102615 119320, 102377 118956, 102195 118563, 102071 118147, 102008 117717, 102008 117283, 102071 116853, 102195 116437, 102377 116044, 102615 115680, 102903 115355, 103234 115075, 103603 114845, 104001 114671, 104418 114557, 104850 114504, 105088 113634, 105384 112789, 105737 111965, 106148 111165, 106612 110397, 107129 109661, 107695 108965, 108308 108308, 108965 107695, 109661 107129, 110397 106612, 111165 106148, 111965 105737, 112789 105384, 113634 105088, 114504 104850, 114555 104426, 114671 104001, 114845 103603, 115075 103234, 115355 102903, 115680 102615, 116044 102377, 116437 102195, 116853 102071, 117283 102008, 117717 102008) (120226 106252, 120022 106625, 119765 106967, 119462 107269, 119120 107525, 118745 107730, 118344 107879, 117927 107969, 117500 108000, 117073 107969, 116656 107879, 116255 107730, 115880 107525, 115538 107269, 115235 106967, 114978 106625, 114774 106252, 114623 105850, 113785 106090, 112971 106388, 112179 106744, 111414 107158, 110682 107625, 109984 108145, 109328 108713, 108713 109328, 108145 109984, 107625 110682, 107158 111414, 106744 112179, 106388 112971, 106090 113785, 105850 114623, 106252 114774, 106625 114978, 106967 115235, 107269 115538, 107525 115880, 107730 116255, 107879 116656, 107969 117073, 108000 117500, 107969 117927, 107879 118344, 107730 118745, 107525 119120, 107269 119462, 106967 119765, 106625 120022, 106252 120226, 105850 120377, 106090 121215, 106388 122029, 106744 122821, 107158 123586, 107625 124318, 108145 125016, 108713 125672, 109328 126287, 109984 126855, 110682 127375, 111414 127842, 112179 128256, 112971 128612, 113785 128910, 114623 129150, 114774 128748, 114978 128375, 115235 128033, 115538 127731, 115880 127475, 116255 127270, 116656 127121, 117073 127031, 117500 127000, 117927 127031, 118344 127121, 118745 127270, 119120 127475, 119462 127731, 119765 128033, 120022 128375, 120226 128748, 120377 129150, 121215 128910, 122029 128612, 122821 128256, 123586 127842, 124318 127375, 125016 126855, 125672 126287, 126287 125672, 126855 125016, 127375 124318, 127842 123586, 128256 122821, 128612 122029, 128910 121215, 129150 120377, 128748 120226, 128375 120022, 128033 119765, 127731 119462, 127475 119120, 127270 118745, 127121 118344, 127031 117927, 127000 117500, 127031 117073, 127121 116656, 127270 116255, 127475 115880, 127731 115538, 128033 115235, 128375 114978, 128748 114774, 129150 114623, 128910 113785, 128612 112971, 128256 112179, 127842 111414, 127375 110682, 126855 109984, 126287 109328, 125672 108713, 125016 108145, 124318 107625, 123586 107158, 122821 106744, 122029 106388, 121215 106090, 120377 105850)), ((118575 99031, 119649 99125, 120712 99281, 121767 99499, 122806 99777, 123827 100116, 124828 100513, 125802 100968, 126751 101479, 127665 102043, 128547 102661, 129392 103329, 130195 104043, 130957 104805, 131671 105608, 132339 106453, 132957 107335, 133521 108249, 134032 109198, 134487 110172, 134884 111173, 135223 112194, 135501 113233, 135719 114288, 135875 115351, 135968 116421, 136000 117500, 135968 118579, 135875 119649, 135719 120712, 135501 121767, 135223 122806, 134884 123827, 134487 124828, 134032 125802, 133521 126751, 132957 127665, 132339 128547, 131671 129392, 130957 130195, 130195 130957, 129392 131671, 128547 132339, 127665 132957, 126751 133521, 125802 134032, 124828 134487, 123827 134884, 122806 135223, 121767 135501, 120712 135719, 119649 135875, 118575 135969, 117500 136000, 116425 135969, 115351 135875, 114288 135719, 113233 135501, 112194 135223, 111173 134884, 110172 134487, 109198 134032, 108249 133521, 107335 132957, 106453 132339, 105608 131671, 104805 130957, 104043 130195, 103329 129392, 102661 128547, 102043 127665, 101479 126751, 100968 125802, 100513 124828, 100116 123827, 99777 122806, 99499 121767, 99281 120712, 99125 119649, 99032 118579, 99000 117500, 99032 116421, 99125 115351, 99281 114288, 99499 113233, 99777 112194, 100116 111173, 100513 110172, 100968 109198, 101479 108249, 102043 107335, 102661 106453, 103329 105608, 104043 104805, 104805 104043, 105608 103329, 106453 102661, 107335 102043, 108249 101479, 109198 100968, 110172 100513, 111173 100116, 112194 99777, 113233 99499, 114288 99281, 115351 99125, 116425 99031, 117500 99000) (116444 100032, 115390 100128, 114346 100287, 113311 100509, 112294 100792, 111294 101137, 110318 101542, 109368 102004, 108446 102524, 107560 103097, 106707 103725, 105896 104401, 105126 105126, 104401 105896, 103725 106707, 103097 107560, 102524 108446, 102004 109368, 101542 110318, 101137 111294, 100792 112294, 100509 113311, 100287 114346, 100128 115389, 100032 116440, 100000 117500, 100032 118560, 100128 119611, 100287 120654, 100509 121689, 100792 122706, 101137 123706, 101542 124682, 102004 125632, 102524 126554, 103097 127440, 103725 128293, 104401 129104, 105126 129874, 105896 130599, 106707 131275, 107560 131903, 108446 132476, 109368 132996, 110318 133458, 111294 133863, 112294 134208, 113311 134491, 114346 134713, 115390 134872, 116444 134968, 117500 135000, 118556 134968, 119610 134872, 120654 134713, 121689 134491, 122706 134208, 123706 133863, 124682 133458, 125632 132996, 126554 132476, 127440 131903, 128293 131275, 129104 130599, 129874 129874, 130599 129104, 131275 128293, 131903 127440, 132476 126554, 132996 125632, 133458 124682, 133863 123706, 134208 122706, 134491 121689, 134713 120654, 134872 119611, 134968 118560, 135000 117500, 134968 116440, 134872 115389, 134713 114346, 134491 113311, 134208 112294, 133863 111294, 133458 110318, 132996 109368, 132476 108446, 131903 107560, 131275 106707, 130599 105896, 129874 105126, 129104 104401, 128293 103725, 127440 103097, 126554 102524, 125632 102004, 124682 101542, 123706 101137, 122706 100792, 121689 100509, 120654 100287, 119610 100128, 118556 100032, 117500 100000)), ((137927 94531, 138345 94621, 138747 94771, 139122 94976, 139464 95232, 139768 95536, 140024 95878, 140229 96253, 140379 96655, 140469 97071, 140500 97500, 140469 97929, 140379 98345, 140229 98747, 140024 99122, 139768 99464, 139464 99768, 139122 100024, 138747 100229, 138345 100379, 137927 100469, 137500 100500, 137073 100469, 136655 100379, 136253 100229, 135878 100024, 135536 99768, 135232 99464, 134976 99122, 134771 98747, 134621 98345, 134531 97929, 134500 97500, 134531 97071, 134621 96655, 134771 96253, 134976 95878, 135232 95536, 135536 95232, 135878 94976, 136253 94771, 136655 94621, 137073 94531, 137500 94500)), ((97927 94531, 98345 94621, 98747 94771, 99122 94976, 99464 95232, 99768 95536, 100024 95878, 100229 96253, 100379 96655, 100469 97071, 100500 97500, 100469 97929, 100379 98345, 100229 98747, 100024 99122, 99768 99464, 99464 99768, 99122 100024, 98747 100229, 98345 100379, 97927 100469, 97500 100500, 97073 100469, 96655 100379, 96253 100229, 95878 100024, 95536 99768, 95232 99464, 94976 99122, 94771 98747, 94621 98345, 94531 97929, 94500 97500, 94531 97071, 94621 96655, 94771 96253, 94976 95878, 95232 95536, 95536 95232, 95878 94976, 96253 94771, 96655 94621, 97073 94531, 97500 94500))) \ No newline at end of file +MULTIPOLYGON (((97927 134531, 98345 134621, 98747 134771, 99122 134976, 99464 135232, 99768 135536, 100024 135878, 100229 136253, 100379 136655, 100469 137071, 100500 137500, 100469 137929, 100379 138345, 100229 138747, 100024 139122, 99768 139464, 99464 139768, 99122 140024, 98747 140229, 98345 140379, 97927 140469, 97500 140500, 97073 140469, 96655 140379, 96253 140229, 95878 140024, 95536 139768, 95232 139464, 94976 139122, 94771 138747, 94621 138345, 94531 137929, 94500 137500, 94531 137071, 94621 136655, 94771 136253, 94976 135878, 95232 135536, 95536 135232, 95878 134976, 96253 134771, 96655 134621, 97073 134531, 97500 134500, 97927 134531)), ((137927 134531, 138345 134621, 138747 134771, 139122 134976, 139464 135232, 139768 135536, 140024 135878, 140229 136253, 140379 136655, 140469 137071, 140500 137500, 140469 137929, 140379 138345, 140229 138747, 140024 139122, 139768 139464, 139464 139768, 139122 140024, 138747 140229, 138345 140379, 137927 140469, 137500 140500, 137073 140469, 136655 140379, 136253 140229, 135878 140024, 135536 139768, 135232 139464, 134976 139122, 134771 138747, 134621 138345, 134531 137929, 134500 137500, 134531 137071, 134621 136655, 134771 136253, 134976 135878, 135232 135536, 135536 135232, 135878 134976, 136253 134771, 136655 134621, 137073 134531, 137500 134500, 137927 134531)), ((117927 114531, 118345 114621, 118747 114771, 119122 114976, 119464 115232, 119768 115536, 120024 115878, 120229 116253, 120379 116655, 120469 117071, 120500 117500, 120469 117929, 120379 118345, 120229 118747, 120024 119122, 119768 119464, 119464 119768, 119122 120024, 118747 120229, 118345 120379, 117927 120469, 117500 120500, 117073 120469, 116655 120379, 116253 120229, 115878 120024, 115536 119768, 115232 119464, 114976 119122, 114771 118747, 114621 118345, 114531 117929, 114500 117500, 114531 117071, 114621 116655, 114771 116253, 114976 115878, 115232 115536, 115536 115232, 115878 114976, 116253 114771, 116655 114621, 117073 114531, 117500 114500, 117927 114531)), ((118197 109531, 118889 109622, 119572 109773, 120237 109982, 120882 110250, 121501 110573, 122091 110948, 122644 111373, 123159 111845, 123630 112360, 124055 112914, 124430 113503, 124752 114123, 125019 114768, 125227 115428, 125379 116116, 125469 116805, 125500 117500, 125469 118200, 125378 118889, 125227 119572, 125018 120237, 124750 120882, 124427 121501, 124052 122091, 123627 122644, 123155 123159, 122640 123630, 122086 124055, 121497 124430, 120877 124752, 120232 125019, 119572 125227, 118884 125379, 118192 125469, 117500 125500, 116803 125469, 116111 125378, 115428 125227, 114763 125018, 114118 124750, 113499 124427, 112909 124052, 112356 123627, 111841 123155, 111370 122640, 110945 122086, 110570 121497, 110248 120877, 109981 120232, 109773 119572, 109621 118884, 109531 118195, 109500 117500, 109531 116800, 109622 116111, 109773 115428, 109982 114763, 110250 114118, 110573 113499, 110948 112909, 111373 112356, 111845 111841, 112360 111370, 112914 110945, 113503 110570, 114123 110248, 114768 109981, 115428 109773, 116116 109621, 116808 109531, 117500 109500, 118197 109531), (117166 110508, 116504 110571, 115849 110698, 115211 110885, 114591 111133, 114001 111438, 113439 111798, 112916 112210, 112433 112670, 111998 113173, 111611 113716, 111278 114292, 111001 114899, 110784 115528, 110626 116175, 110532 116832, 110500 117500, 110532 118168, 110626 118825, 110784 119472, 111001 120101, 111278 120708, 111611 121284, 111998 121827, 112433 122330, 112916 122790, 113439 123202, 114001 123562, 114591 123867, 115211 124115, 115849 124302, 116504 124429, 117166 124492, 117834 124492, 118496 124429, 119151 124302, 119789 124115, 120409 123867, 120999 123562, 121561 123202, 122084 122790, 122567 122330, 123002 121827, 123389 121284, 123722 120708, 123999 120101, 124216 119472, 124374 118825, 124468 118168, 124500 117500, 124468 116832, 124374 116175, 124216 115528, 123999 114899, 123722 114292, 123389 113716, 123002 113173, 122567 112670, 122084 112210, 121561 111798, 120999 111438, 120409 111133, 119789 110885, 119151 110698, 118496 110571, 117834 110508, 117166 110508)), ((118147 102071, 118563 102195, 118956 102377, 119320 102615, 119645 102903, 119925 103234, 120155 103603, 120329 104001, 120443 104418, 120496 104850, 121366 105088, 122211 105384, 123035 105737, 123835 106148, 124603 106612, 125339 107129, 126035 107695, 126692 108308, 127305 108965, 127871 109661, 128388 110397, 128852 111165, 129263 111965, 129616 112789, 129912 113634, 130150 114504, 130574 114555, 130999 114671, 131397 114845, 131766 115075, 132097 115355, 132385 115680, 132623 116044, 132805 116437, 132929 116853, 132992 117283, 132992 117717, 132929 118147, 132805 118563, 132623 118956, 132385 119320, 132097 119645, 131766 119925, 131397 120155, 130999 120329, 130582 120443, 130150 120496, 129912 121366, 129616 122211, 129263 123035, 128852 123835, 128388 124603, 127871 125339, 127305 126035, 126692 126692, 126035 127305, 125339 127871, 124603 128388, 123835 128852, 123035 129263, 122211 129616, 121366 129912, 120496 130150, 120445 130574, 120329 130999, 120155 131397, 119925 131766, 119645 132097, 119320 132385, 118956 132623, 118563 132805, 118147 132929, 117717 132992, 117283 132992, 116853 132929, 116437 132805, 116044 132623, 115680 132385, 115355 132097, 115075 131766, 114845 131397, 114671 130999, 114557 130582, 114504 130150, 113634 129912, 112789 129616, 111965 129263, 111165 128852, 110397 128388, 109661 127871, 108965 127305, 108308 126692, 107695 126035, 107129 125339, 106612 124603, 106148 123835, 105737 123035, 105384 122211, 105088 121366, 104850 120496, 104426 120445, 104001 120329, 103603 120155, 103234 119925, 102903 119645, 102615 119320, 102377 118956, 102195 118563, 102071 118147, 102008 117717, 102008 117283, 102071 116853, 102195 116437, 102377 116044, 102615 115680, 102903 115355, 103234 115075, 103603 114845, 104001 114671, 104418 114557, 104850 114504, 105088 113634, 105384 112789, 105737 111965, 106148 111165, 106612 110397, 107129 109661, 107695 108965, 108308 108308, 108965 107695, 109661 107129, 110397 106612, 111165 106148, 111965 105737, 112789 105384, 113634 105088, 114504 104850, 114555 104426, 114671 104001, 114845 103603, 115075 103234, 115355 102903, 115680 102615, 116044 102377, 116437 102195, 116853 102071, 117283 102008, 117717 102008, 118147 102071), (120226 106252, 120022 106625, 119765 106967, 119462 107269, 119120 107525, 118745 107730, 118344 107879, 117927 107969, 117500 108000, 117073 107969, 116656 107879, 116255 107730, 115880 107525, 115538 107269, 115235 106967, 114978 106625, 114774 106252, 114623 105850, 113785 106090, 112971 106388, 112179 106744, 111414 107158, 110682 107625, 109984 108145, 109328 108713, 108713 109328, 108145 109984, 107625 110682, 107158 111414, 106744 112179, 106388 112971, 106090 113785, 105850 114623, 106252 114774, 106625 114978, 106967 115235, 107269 115538, 107525 115880, 107730 116255, 107879 116656, 107969 117073, 108000 117500, 107969 117927, 107879 118344, 107730 118745, 107525 119120, 107269 119462, 106967 119765, 106625 120022, 106252 120226, 105850 120377, 106090 121215, 106388 122029, 106744 122821, 107158 123586, 107625 124318, 108145 125016, 108713 125672, 109328 126287, 109984 126855, 110682 127375, 111414 127842, 112179 128256, 112971 128612, 113785 128910, 114623 129150, 114774 128748, 114978 128375, 115235 128033, 115538 127731, 115880 127475, 116255 127270, 116656 127121, 117073 127031, 117500 127000, 117927 127031, 118344 127121, 118745 127270, 119120 127475, 119462 127731, 119765 128033, 120022 128375, 120226 128748, 120377 129150, 121215 128910, 122029 128612, 122821 128256, 123586 127842, 124318 127375, 125016 126855, 125672 126287, 126287 125672, 126855 125016, 127375 124318, 127842 123586, 128256 122821, 128612 122029, 128910 121215, 129150 120377, 128748 120226, 128375 120022, 128033 119765, 127731 119462, 127475 119120, 127270 118745, 127121 118344, 127031 117927, 127000 117500, 127031 117073, 127121 116656, 127270 116255, 127475 115880, 127731 115538, 128033 115235, 128375 114978, 128748 114774, 129150 114623, 128910 113785, 128612 112971, 128256 112179, 127842 111414, 127375 110682, 126855 109984, 126287 109328, 125672 108713, 125016 108145, 124318 107625, 123586 107158, 122821 106744, 122029 106388, 121215 106090, 120377 105850, 120226 106252)), ((118575 99031, 119649 99125, 120712 99281, 121767 99499, 122806 99777, 123827 100116, 124828 100513, 125802 100968, 126751 101479, 127665 102043, 128547 102661, 129392 103329, 130195 104043, 130957 104805, 131671 105608, 132339 106453, 132957 107335, 133521 108249, 134032 109198, 134487 110172, 134884 111173, 135223 112194, 135501 113233, 135719 114288, 135875 115351, 135968 116421, 136000 117500, 135968 118579, 135875 119649, 135719 120712, 135501 121767, 135223 122806, 134884 123827, 134487 124828, 134032 125802, 133521 126751, 132957 127665, 132339 128547, 131671 129392, 130957 130195, 130195 130957, 129392 131671, 128547 132339, 127665 132957, 126751 133521, 125802 134032, 124828 134487, 123827 134884, 122806 135223, 121767 135501, 120712 135719, 119649 135875, 118575 135969, 117500 136000, 116425 135969, 115351 135875, 114288 135719, 113233 135501, 112194 135223, 111173 134884, 110172 134487, 109198 134032, 108249 133521, 107335 132957, 106453 132339, 105608 131671, 104805 130957, 104043 130195, 103329 129392, 102661 128547, 102043 127665, 101479 126751, 100968 125802, 100513 124828, 100116 123827, 99777 122806, 99499 121767, 99281 120712, 99125 119649, 99032 118579, 99000 117500, 99032 116421, 99125 115351, 99281 114288, 99499 113233, 99777 112194, 100116 111173, 100513 110172, 100968 109198, 101479 108249, 102043 107335, 102661 106453, 103329 105608, 104043 104805, 104805 104043, 105608 103329, 106453 102661, 107335 102043, 108249 101479, 109198 100968, 110172 100513, 111173 100116, 112194 99777, 113233 99499, 114288 99281, 115351 99125, 116425 99031, 117500 99000, 118575 99031), (116444 100032, 115390 100128, 114346 100287, 113311 100509, 112294 100792, 111294 101137, 110318 101542, 109368 102004, 108446 102524, 107560 103097, 106707 103725, 105896 104401, 105126 105126, 104401 105896, 103725 106707, 103097 107560, 102524 108446, 102004 109368, 101542 110318, 101137 111294, 100792 112294, 100509 113311, 100287 114346, 100128 115389, 100032 116440, 100000 117500, 100032 118560, 100128 119611, 100287 120654, 100509 121689, 100792 122706, 101137 123706, 101542 124682, 102004 125632, 102524 126554, 103097 127440, 103725 128293, 104401 129104, 105126 129874, 105896 130599, 106707 131275, 107560 131903, 108446 132476, 109368 132996, 110318 133458, 111294 133863, 112294 134208, 113311 134491, 114346 134713, 115390 134872, 116444 134968, 117500 135000, 118556 134968, 119610 134872, 120654 134713, 121689 134491, 122706 134208, 123706 133863, 124682 133458, 125632 132996, 126554 132476, 127440 131903, 128293 131275, 129104 130599, 129874 129874, 130599 129104, 131275 128293, 131903 127440, 132476 126554, 132996 125632, 133458 124682, 133863 123706, 134208 122706, 134491 121689, 134713 120654, 134872 119611, 134968 118560, 135000 117500, 134968 116440, 134872 115389, 134713 114346, 134491 113311, 134208 112294, 133863 111294, 133458 110318, 132996 109368, 132476 108446, 131903 107560, 131275 106707, 130599 105896, 129874 105126, 129104 104401, 128293 103725, 127440 103097, 126554 102524, 125632 102004, 124682 101542, 123706 101137, 122706 100792, 121689 100509, 120654 100287, 119610 100128, 118556 100032, 117500 100000, 116444 100032)), ((137927 94531, 138345 94621, 138747 94771, 139122 94976, 139464 95232, 139768 95536, 140024 95878, 140229 96253, 140379 96655, 140469 97071, 140500 97500, 140469 97929, 140379 98345, 140229 98747, 140024 99122, 139768 99464, 139464 99768, 139122 100024, 138747 100229, 138345 100379, 137927 100469, 137500 100500, 137073 100469, 136655 100379, 136253 100229, 135878 100024, 135536 99768, 135232 99464, 134976 99122, 134771 98747, 134621 98345, 134531 97929, 134500 97500, 134531 97071, 134621 96655, 134771 96253, 134976 95878, 135232 95536, 135536 95232, 135878 94976, 136253 94771, 136655 94621, 137073 94531, 137500 94500, 137927 94531)), ((97927 94531, 98345 94621, 98747 94771, 99122 94976, 99464 95232, 99768 95536, 100024 95878, 100229 96253, 100379 96655, 100469 97071, 100500 97500, 100469 97929, 100379 98345, 100229 98747, 100024 99122, 99768 99464, 99464 99768, 99122 100024, 98747 100229, 98345 100379, 97927 100469, 97500 100500, 97073 100469, 96655 100379, 96253 100229, 95878 100024, 95536 99768, 95232 99464, 94976 99122, 94771 98747, 94621 98345, 94531 97929, 94500 97500, 94531 97071, 94621 96655, 94771 96253, 94976 95878, 95232 95536, 95536 95232, 95878 94976, 96253 94771, 96655 94621, 97073 94531, 97500 94500, 97927 94531))) \ No newline at end of file diff --git a/stress_benchmark/resources/032.settings b/stress_benchmark/resources/032.settings index d27cae81b7..1135de08d3 100644 --- a/stress_benchmark/resources/032.settings +++ b/stress_benchmark/resources/032.settings @@ -156,6 +156,7 @@ machine_settings=0 raft_base_extruder_nr=0 z_seam_y=220 wall_overhang_angle=90 +seam_overhang_angle=30 draft_shield_height=10 _plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 travel_retract_before_outer_wall=False @@ -532,7 +533,6 @@ skirt_brim_minimal_length=250 cooling=0 brim_replaces_support=True wall_x_extruder_nr=-1 -support_interface_skip_height=0.2 machine_nozzle_head_distance=3 support_bottom_pattern=concentric raft_base_wall_count=1 diff --git a/stress_benchmark/resources/032.wkt b/stress_benchmark/resources/032.wkt index 81b51da4a0..b8de3e5b29 100644 --- a/stress_benchmark/resources/032.wkt +++ b/stress_benchmark/resources/032.wkt @@ -1 +1 @@ -MULTIPOLYGON (((171025 202017, 171280 202159, 171529 202543, 171632 202842, 171761 203498, 171801 205287, 171805 208719, 171893 212263, 171858 216296, 171598 216999, 171059 218039, 171269 218249, 171365 218266, 171573 218175, 171637 218251, 171796 218245, 171885 218527, 171893 219256, 171884 220173, 171904 220480, 171856 224509, 171796 225316, 171758 226225, 171653 227973, 171619 229081, 171653 229663, 171736 230288, 171832 230862, 171865 231711, 171873 232834, 171765 233465, 171496 234122, 171646 234392, 171757 234829, 171711 235541, 171684 236138, 171667 236944, 171682 237999, 171808 240513, 171238 241098, 171466 241735, 171606 242337, 171592 242940, 171892 243549, 171953 244203, 172035 246354, 171966 249888, 171954 251669, 171919 253624, 171745 254130, 171486 254377, 171254 254841, 171681 256113, 171793 256804, 171797 257224, 171831 258137, 171831 259025, 171851 259154, 171911 259842, 171939 260520, 171891 261269, 171711 260758, 171184 261246, 171676 261979, 171883 262720, 171878 263638, 171860 264610, 171734 266990, 171809 267764, 171937 268854, 171900 272390, 171896 273615, 171869 275179, 169816 275179, 169623 273958, 169676 273162, 169695 273119, 169846 271721, 169857 271195, 169904 270102, 169987 269086, 170058 268446, 170042 267761, 169985 267244, 169944 267073, 169928 266365, 169951 266258, 169992 265635, 169794 265134, 169668 264918, 169516 264287, 169480 264191, 169123 262760, 169104 262045, 169019 261330, 168669 259727, 168594 258975, 168386 257785, 168339 257237, 168333 256983, 168232 256066, 168318 255965, 168414 255277, 168423 254956, 168596 254297, 168607 253847, 168658 253630, 168661 253039, 168927 252348, 169012 251659, 169105 251392, 169151 250974, 169288 250805, 169341 250501, 169517 250553, 169690 251125, 169848 251258, 169777 251688, 170011 252804, 170135 252689, 170076 253009, 170266 253633, 170451 253913, 170625 253963, 170769 254058, 170975 253604, 170953 253286, 170808 253236, 170740 253290, 170634 253191, 170479 253395, 170598 252953, 170556 252720, 170481 252621, 170361 252634, 170418 252290, 170322 251861, 170259 251797, 170279 251612, 170157 251015, 170132 250997, 170087 250490, 170014 250222, 169925 249706, 169837 249376, 169738 248390, 169642 247830, 169500 247734, 169433 247209, 169352 248087, 169390 248789, 169396 249468, 169208 250262, 168963 251125, 168933 251646, 168825 252058, 168910 252326, 168689 252617, 168557 253434, 168449 254030, 168443 254273, 168181 254931, 167989 255373, 167851 256282, 167814 256955, 167858 257589, 167953 258112, 168038 258721, 168167 259389, 168715 261704, 168833 262042, 168988 262763, 169016 263490, 169151 264214, 169223 264957, 169329 265677, 169497 266364, 169621 267102, 169734 268441, 169682 269118, 169581 270135, 169537 270462, 169517 271403, 169480 271940, 169418 272636, 169323 273417, 169366 274457, 169374 275178, 167667 275179, 167669 274079, 167615 273486, 167323 272501, 167263 272516, 167285 272378, 167212 271919, 167191 271159, 167116 270525, 167080 270024, 167060 269874, 167057 269359, 166991 269214, 167174 268953, 167740 267886, 167543 267443, 167406 267867, 167095 268529, 166880 269171, 166751 269333, 166538 269922, 166685 270575, 166714 271021, 166823 271983, 167068 273225, 167145 273338, 167235 273342, 167196 273599, 167197 274414, 167256 275179, 166021 275179, 165998 274676, 165794 273690, 165785 273693, 165600 272453, 165483 272316, 165522 272009, 165462 271761, 165398 271195, 165204 271298, 165328 270758, 165303 270241, 165438 269572, 165462 269382, 165682 268638, 165967 267928, 166115 267187, 166171 266446, 166171 265711, 166072 264999, 165820 264618, 165572 264565, 165165 264685, 165036 264797, 164831 264800, 164770 265097, 164946 265370, 165048 265442, 165328 265503, 165451 265570, 165553 265515, 165680 265828, 165873 266065, 165870 266795, 165767 267629, 165672 267945, 165665 268652, 165507 268197, 165390 268345, 165106 269393, 164929 270097, 164963 270596, 165036 271189, 165135 271417, 165267 272024, 165302 272372, 165391 272954, 165446 273136, 165436 273242, 165515 273765, 165448 274573, 165458 275179, 163897 275179, 163865 273669, 163870 273181, 163777 267335, 163810 265854, 163758 262865, 163766 261996, 163850 261220, 163891 260424, 163913 257927, 163961 256340, 163977 256087, 163981 255090, 164060 254796, 164340 255051, 164506 255038, 164566 254981, 164959 255732, 165027 255639, 165020 256018, 165163 256348, 165322 256517, 165761 257497, 165899 258118, 166009 258921, 166162 259777, 166360 260503, 166522 261324, 167038 263521, 167326 264634, 167452 265007, 167464 265193, 167584 265748, 167690 266453, 167660 266843, 167741 267882, 167817 267461, 167974 267362, 168048 267188, 168012 266457, 167889 265877, 167842 265851, 167852 265720, 167417 263803, 167343 263778, 167355 263552, 167231 262954, 167224 262826, 167087 262082, 166929 261344, 166821 260515, 166813 259777, 166762 259049, 166712 258874, 166576 258263, 166509 257701, 166457 257029, 166356 256292, 166292 256032, 166239 255487, 166294 254746, 166638 252925, 166946 250317, 167015 249611, 167068 248620, 167132 247060, 167152 245107, 167138 244341, 167139 243596, 167033 242886, 166949 242793, 166714 242712, 166508 242540, 166443 242365, 166006 241914, 165251 241071, 165305 241295, 165794 241882, 165770 242109, 166053 242541, 166461 243473, 166542 244100, 166586 244353, 166635 244998, 166725 245635, 166790 246313, 166874 246742, 166846 246989, 166826 247664, 166703 248275, 166626 248964, 166669 249609, 166643 250260, 166561 250640, 166447 251594, 166300 252233, 166132 252870, 166103 253113, 165935 254204, 165829 255507, 165803 255472, 165436 255796, 165282 255859, 165205 255744, 165142 255844, 165142 255426, 164841 254972, 164389 253862, 163975 252937, 163929 252303, 164042 251592, 164124 250996, 164163 250047, 164165 249088, 164090 247856, 164065 246588, 164035 245925, 163952 245197, 163873 244199, 163827 241047, 163925 240752, 164078 240822, 164369 240654, 164519 240654, 164644 240597, 164727 240633, 164749 240500, 163969 239656, 163801 238962, 163798 238036, 163906 235814, 163907 235050, 163861 233743, 163832 232576, 163844 230868, 163857 230357, 163860 228506, 163940 227851, 164103 227247, 164185 225268, 164175 225054, 164198 224517, 164078 223381, 163983 222226, 163970 220737, 163976 218464, 164012 217202, 164032 213775, 164075 212969, 164086 211848, 164071 211252, 163965 210621, 164019 209442, 164022 209005, 164057 207604, 164023 205835, 164053 205241, 164054 204962, 164135 202838, 164325 202223, 164734 202060, 165092 202299, 165180 202932, 165176 203041, 165230 203750, 165346 204359, 165409 205192, 165723 207865, 165969 209098, 165953 209287, 166002 209880, 166101 210473, 166208 210743, 166213 211062, 166435 211942, 166525 212000, 166548 212457, 166691 212890, 166838 213532, 166804 214192, 166888 214964, 166937 216036, 166972 216590, 167009 216779, 166964 217079, 166934 217590, 166586 219881, 166596 220235, 166561 220818, 166501 221052, 166357 221750, 166239 222446, 166075 223140, 165857 223823, 165581 224364, 165347 225130, 165327 225673, 165332 225860, 165228 226622, 165165 227291, 165150 228119, 165097 229394, 165039 230171, 165006 230848, 165166 232319, 165183 233050, 165167 233776, 165185 234491, 165258 235247, 165448 236617, 165465 237047, 165573 238014, 165856 238589, 165892 238001, 165819 237489, 165775 237315, 165704 236802, 165665 236618, 165518 235532, 165442 234692, 165412 234505, 165457 234240, 165458 232208, 165423 231636, 165404 230886, 165549 228730, 165574 227857, 165640 226637, 165659 225877, 165714 225641, 165806 225140, 166013 224532, 166344 223903, 166551 223185, 166674 222474, 166846 221711, 166922 221067, 166788 220586, 166830 220066, 166908 219647, 166982 219049, 167121 218184, 167204 217579, 167258 217037, 167297 216898, 167343 216332, 167361 216215, 167419 215532, 167400 214856, 167492 214179, 167420 213526, 167547 212254, 167670 211558, 167687 211039, 167833 210456, 167884 209859, 167973 209393, 167746 209254, 167704 209829, 167612 210304, 167788 210448, 167579 210556, 167551 211021, 167616 211575, 167291 212235, 167262 212378, 167233 212329, 166879 212173, 166724 211768, 166555 211027, 166438 210363, 166356 210121, 166347 209850, 166254 209197, 166170 208741, 166072 207516, 165983 206783, 165861 205521, 165798 204624, 165731 203269, 165722 202675, 165768 202296, 165979 202094, 166187 202030, 166831 202015, 167158 202063, 167460 202195, 167795 203120, 167897 203742, 167891 204211, 168075 205214, 168199 205491, 168068 205557, 168110 206302, 168116 206665, 168166 206879, 168398 207438, 168451 207143, 168424 206514, 168394 206310, 168433 205921, 168362 205207, 168286 204956, 168414 204493, 168402 204182, 168362 204110, 168438 203917, 168316 203217, 168415 203080, 168276 202642, 168261 202461, 168477 202195, 168801 202064, 169193 202092, 169358 202212, 169533 202415, 169660 202987, 169760 203508, 169779 204051, 169744 204453, 169778 205087, 169848 205776, 169881 206661, 169884 207538, 170209 208137, 170296 208772, 170444 210848, 170457 212750, 170353 213352, 170149 213972, 169935 214565, 169946 214861, 169844 214777, 169765 214914, 169648 215426, 169470 215640, 169086 216452, 168877 216925, 168818 217194, 168640 217561, 168444 218235, 168398 218720, 168442 218780, 168381 218940, 168408 219697, 168669 218973, 168756 218269, 168920 217617, 168992 217185, 169224 216918, 169453 216386, 169781 215818, 169801 215523, 169933 215502, 170064 215248, 170290 214664, 170714 213441, 170835 212776, 170868 212200, 170964 211424, 170947 210123, 170887 209715, 170776 208781, 170620 207841, 170481 206768, 170491 206323, 170466 205741, 170368 205141, 170318 204322, 170246 203622, 170244 203487, 170176 202471, 170395 202005) (170585 260507, 170848 260843, 170764 260512, 170687 260390) (170138 259071, 170173 259202, 170247 259788, 170484 260302, 170564 259795, 170439 259539, 170209 258967) (170904 254217, 171173 254656, 171452 254235, 171185 254048) (166858 228965, 166618 229573, 166538 230326, 166564 231081, 166750 231844, 166917 233219, 167072 234160, 167499 236450, 167642 237263, 167649 237463, 167763 238567, 167967 239870, 168113 241281, 168240 241999, 168400 242676, 168491 243325, 168615 244101, 168827 244927, 168970 245639, 169189 246147, 169216 246390, 169235 245998, 169185 245770, 169009 245353, 169020 245054, 168899 244459, 168647 242798, 168543 241944, 168534 241236, 168638 240548, 168505 239819, 168346 239090, 168288 238699, 168084 237592, 167989 237239, 167774 235899, 167697 235339, 167531 234400, 167302 232743, 167203 231526, 167071 230376, 167141 229625, 167153 229135, 167066 228862) (170741 239500, 170808 239296, 170790 239075, 170723 239069, 170473 238656) (170274 237799, 170391 238329, 170428 237908, 170398 237715, 170349 237686) (170640 233267, 170497 233273, 170318 233557, 170501 233770, 171023 233947, 171194 233449, 170772 233145) (169143 230474, 169122 231057, 169247 231624, 169244 231746, 169347 232441, 169378 233144, 169667 233424, 169871 233422, 170004 232953, 169829 232604, 169680 231990, 169665 231646, 169593 231306, 169581 230987, 169412 230414) (169691 226419, 169421 227051, 169062 227785, 168762 228333, 168718 228518, 168544 229046, 168801 229590, 169030 229910, 169092 230141, 169322 230184, 169160 229725, 169150 229597, 169106 229549, 168943 229048, 169015 228363, 169414 227829, 169603 227392, 169762 226567, 170007 226488, 169906 225812) (170412 218423, 170241 218590, 170215 218740, 169990 219268, 169975 219776, 169866 219497, 169238 220930, 169142 221020, 169040 221322, 168345 222976, 168222 223644, 168024 224072, 167640 225378, 167494 226044, 167343 226646, 167369 227067, 167269 226934, 167146 227405, 166959 228607, 167068 228849, 167211 228135, 167235 227690, 167407 227605, 167557 227081, 167697 226511, 167785 226072, 167922 225586, 167937 225425, 168121 224915, 168542 223445, 168660 223190, 169050 222192, 169198 221752, 169383 221442, 170028 220026, 170102 219522, 170209 219646, 170362 219327, 170452 219007, 170501 219080, 170855 218662, 170861 218184) (170960 227016, 170707 227270, 170553 227901, 170572 227976, 170764 227967, 170841 227907, 171070 227460, 171227 227281, 171092 226992) (169920 225774, 170053 226483, 170314 226414, 170480 225874, 170432 225432, 170287 225365) (168044 207459, 168094 207867, 167927 208218, 167823 208636, 168013 209172, 168100 208671, 168285 208084, 168232 207693, 168367 207486, 168085 207177)), ((180401 253120, 180770 253328, 180896 254044, 180950 255594, 180939 256385, 180965 257447, 181027 261131, 180999 262268, 181043 264621, 181053 265621, 180959 266394, 180915 267136, 180917 267899, 180885 269921, 180833 270636, 180822 271584, 180687 271860, 180454 271664, 180287 271686, 180232 271793, 180039 271309, 179876 271205, 179793 271061, 179737 271411, 180003 271830, 180043 271711, 180113 272031, 180472 272798, 180776 273320, 180789 273492, 180877 274014, 180761 274625, 180696 275178, 178285 275179, 178395 274311, 178686 273480, 178802 272821, 178885 272446, 178967 271340, 179110 270986, 179202 271276, 179395 271100, 179508 271097, 179586 270941, 179659 271080, 179728 270749, 179664 270546, 179588 270495, 179314 270104, 179004 269444, 178874 268689, 178842 268581, 178587 267454, 178520 267233, 178318 266433, 178117 265699, 178042 265304, 177864 264756, 177673 263988, 177631 263918, 177450 264122, 177446 263482, 177402 263217, 177118 262649, 177153 261776, 177113 261350, 177427 260679, 177543 260189, 177766 260004, 178111 259341, 178186 258677, 178157 258248, 178095 257998, 178021 257333, 177905 256808, 177690 256176, 177595 255795, 177664 255549, 177677 255139, 177455 254508, 177497 254397, 177502 254014, 177623 253544, 177344 253492, 177001 254010, 177108 254823, 177116 255366, 177250 256146, 177469 256730, 177602 257273, 177680 257746, 177620 258001, 177622 258393, 177721 258588, 177878 258335, 177756 258660, 177761 259328, 177495 259815, 177448 259982, 177185 260456, 177057 260654, 176743 261367, 176831 261995, 176937 261799, 176843 262087, 176977 262493, 177020 262803, 177232 263557, 177566 264892, 177634 265261, 177841 266124, 177948 266497, 178025 267262, 178023 268038, 178220 268832, 178454 270557, 178543 271123, 178555 271680, 178466 272184, 178378 272540, 178245 273191, 178177 273439, 178024 274602, 177937 275179, 175161 275179, 175072 275072, 174908 274173, 174714 273290, 174381 272616, 174234 272588, 173997 272447, 173780 272239, 173774 272831, 173992 273174, 174151 273286, 174465 272849, 174247 273520, 174301 273788, 174403 273931, 174579 273719, 174440 274198, 174664 275178, 172846 275179, 172865 273846, 172901 272749, 173051 272549, 173167 272557, 173719 272179, 173502 271725, 173394 271713, 173417 271519, 173166 270882, 173005 270158, 172980 269156, 172980 268299, 172950 268129, 172869 266955, 173554 266273, 173146 265709, 173043 265790, 173080 265615, 172920 264829, 172954 263238, 173064 261698, 173017 260894, 172927 260304, 172881 259667, 172877 258774, 172930 254727, 172963 254554, 172960 254036, 173186 253499, 173819 253445, 174231 253475, 174503 253549, 174778 253704, 174974 254220, 175060 254700, 175178 255218, 175228 255741, 175028 256553, 175013 257058, 174980 257428, 174954 257950, 174961 258036, 174850 259350, 174765 260073, 174775 260816, 174881 261556, 174830 262315, 175308 263779, 175500 264496, 175675 265237, 175706 265944, 175811 266316, 175976 267035, 176065 267367, 176312 268766, 176418 269461, 176469 270178, 176566 270842, 176468 271328, 176563 271518, 176380 271962, 176355 272547, 176432 272178, 176728 271531, 176930 270862, 176996 270177, 176942 269466, 176791 268635, 176657 268032, 176424 267147, 176088 265976, 175886 265331, 175693 265214, 175821 264614, 175640 263734, 175562 262989, 175407 262252, 175200 261520, 175150 261022, 175089 260055, 175038 259698, 175109 259351, 175013 258923, 175196 259164, 175286 258135, 175320 257566, 175298 257251, 175353 256828, 175271 256599, 175393 256615, 175445 256395, 175498 255706, 175459 255176, 175454 254504, 175393 253577, 175648 253330, 176162 253286, 176581 253523, 176964 253903, 177368 253320, 177734 253188, 178337 253134, 178523 253171, 178685 253329, 178775 253691, 178801 254546, 178865 255240, 178966 255468, 179088 256099, 179295 255568, 179365 254747, 179322 254036, 179231 253412, 179336 253192, 179637 253104, 180046 253063) (175991 273453, 175935 274592, 176030 274154, 176152 273474, 176069 273100) (174513 268260, 174573 268260, 174641 268168, 174606 268043, 174543 267495, 174502 267461) (173356 266952, 173422 267327, 173855 267192, 173962 267088, 174066 267084, 174157 266911, 173590 266311) (179435 258004, 179481 258574, 179512 258664, 179363 259483, 179301 259522, 179164 259912, 178895 260523, 178700 261164, 178632 261896, 178649 262712, 178932 263370, 179179 263498, 179455 263371, 179240 262631, 179185 262546, 179051 261822, 179080 261071, 179213 260623, 179217 260473, 179533 259927, 179743 259304, 179889 258648, 179784 257986, 179635 257451) (180103 262636, 180236 262838, 180346 262652, 180361 262426, 180257 262285) (179094 256146, 179375 257647, 179571 257341, 179485 256716, 179311 255736)), ((210371 236583, 210437 236987, 210423 238199, 210408 238705, 210363 239537, 210345 239619, 210237 241105, 210284 241303, 210263 241676, 210403 242034, 210377 242415, 210534 242603, 210747 242198, 210937 242016, 210943 241628, 211006 241514, 211045 240126, 211078 239928, 211078 239033, 211065 238756, 211048 237470, 211053 236639, 211541 236561, 212150 236589, 212485 236727, 212868 236681, 213127 236726, 213250 236647, 213587 236885, 213784 237300, 213725 237419, 213778 237927, 213763 238030, 213787 238618, 213701 238670, 213716 238801, 213638 238937, 213679 239498, 213657 239654, 213688 241111, 213713 241332, 213630 241755, 213433 241987, 213439 242652, 213380 242912, 213322 244710, 213309 245571, 213292 245698, 213279 247011, 213309 247187, 213278 247829, 213316 248066, 213228 248778, 213257 248973, 213206 249912, 213243 250285, 213232 250885, 213193 251271, 213010 251420, 212879 251836, 212858 252032, 212906 252547, 212966 252671, 212974 252836, 213170 253144, 213082 253843, 213053 254142, 212852 254808, 212776 255347, 212971 256139, 213254 256402, 213463 255845, 213182 255538, 213438 254872, 213433 254322, 213372 253878, 213450 252891, 213574 251908, 213603 251005, 213691 250488, 213811 249958, 213795 249018, 213736 248454, 213777 248111, 213726 247625, 213774 247244, 213793 246659, 213845 245639, 213858 244903, 213944 243972, 214097 243330, 214086 243000, 214135 242811, 214115 242409, 214148 241836, 214166 240676, 214385 240121, 214642 239843, 214763 239293, 214421 238631, 214430 238492, 214348 238098, 214348 237420, 214416 237296, 214621 237091, 214926 237034, 215218 237070, 215313 237311, 215300 237723, 215350 238331, 215349 238645, 215375 239875, 215466 241183, 215491 241364, 215524 242093, 215480 242836, 215539 245017, 215569 249801, 215519 250422, 215458 250861, 215411 251663, 215407 252032, 215351 253010, 215402 253459, 215421 254636, 215415 255114, 215455 256206, 215457 256759, 215421 258910, 215425 259358, 215397 260086, 215398 260502, 215293 262075, 215271 263131, 215310 265849, 215340 266017, 215387 266985, 215375 267578, 215384 268312, 215294 269081, 215355 269442, 215306 270405, 215348 270956, 215217 272603, 215225 273215, 215294 273883, 215324 274050, 215365 275179, 214010 275178, 214121 274427, 214144 273935, 214267 273280, 214121 273135, 213872 273670, 213784 273998, 213719 275179, 212500 275178, 212609 274425, 212306 273683, 212231 272881, 212128 272077, 212134 271540, 212064 270849, 211924 270399, 211924 270287, 211692 270010, 211745 269521, 211719 268974, 211731 267653, 211713 267283, 211763 266285, 211701 265910, 211728 265535, 211731 265001, 211770 264643, 211621 263985, 211302 263948, 211384 263182, 211484 262759, 211658 262293, 211779 261587, 211845 261397, 211800 261313, 211714 260486, 211659 259559, 211694 259215, 211732 258522, 212084 256372, 211943 255909, 211646 256687, 211417 258821, 211308 259548, 211215 259981, 211204 260469, 211119 260780, 211025 262093, 211058 262269, 211085 262800, 211217 263233, 211213 264433, 211488 264377, 211274 264994, 211202 265919, 211297 267437, 211276 267725, 211297 268674, 211396 270043, 211472 270386, 211624 271359, 211721 271896, 211639 272871, 211721 273874, 211702 274355, 211731 275179, 209671 275178, 209589 273375, 209558 270973, 209567 270083, 209557 269395, 209453 265898, 209474 265256, 209461 264650, 209522 264004, 209561 263439, 209628 263073, 209686 262518, 209768 261868, 209866 261614, 209865 261272, 209929 260698, 209953 260368, 210149 259466, 210351 258329, 210499 257964, 210555 257223, 210689 256640, 210714 256044, 210173 255631, 210070 255333, 209913 255204, 209646 256019, 209673 256579, 209666 256952, 209760 258438, 209647 259046, 209533 259398, 209469 260311, 209521 260646, 209406 260558, 209244 260721, 209216 261195, 209156 261400, 209046 262094, 209099 263195, 209025 263179, 208847 263329, 208911 263962, 208909 264207, 208950 264921, 209013 265675, 209048 265876, 209097 266814, 209119 267731, 209124 268450, 209110 268629, 209092 269509, 209130 269818, 209113 270368, 209131 270982, 209127 271210, 209226 272253, 209223 272893, 209201 273464, 209228 273844, 209243 274433, 209279 275179, 207459 275179, 207453 274391, 207432 273626, 207509 273197, 207475 272858, 207499 272521, 207487 271922, 207518 271253, 207516 270384, 207487 269505, 207528 268928, 207440 267149, 207420 265699, 207458 264874, 207492 264422, 207464 263892, 207503 262920, 207561 262036, 207532 261530, 207488 261113, 207509 260664, 207439 258429, 207433 257403, 207443 256351, 207438 255810, 207481 254980, 207476 254525, 207531 254236, 207567 253521, 207724 252682, 207680 251734, 207585 250846, 207565 250210, 207530 249784, 207534 249023, 207521 248364, 207541 247818, 207568 247406, 207547 246528, 207562 245867, 207533 243968, 207550 243442, 207534 242863, 207556 241959, 207544 241563, 207594 240329, 207523 239544, 207557 239023, 207576 238447, 207567 238056, 207731 236998, 207940 236719, 208392 236523, 208870 236551, 208956 236719, 208957 236941, 209095 237154, 208961 237870, 209008 238014, 208975 238139, 209054 238196, 209411 238019, 209267 237871, 209448 237591, 209538 237072, 209648 236542, 210166 236499) (213710 270437, 213663 271249, 213640 271460, 213608 272085, 213549 272596, 213726 272891, 213717 272982, 213758 273017, 213895 272882, 213850 272764, 214158 272058, 214273 271222, 214286 270900, 214416 269831, 214233 269443) (213895 265092, 213840 265877, 213871 266358, 213790 267208, 213773 267699, 213640 268209, 213796 268604, 213752 268795, 213865 268740, 214140 267689, 214160 267322, 214231 266776, 214315 266417, 214345 265863, 214345 265439, 214391 264467, 214238 264031) (213795 261352, 213777 261635, 213553 262263, 213505 262879, 213697 263159, 213841 263544, 213995 263148, 214003 262876, 214195 262238, 214221 261625, 213968 261055) (212981 256966, 212856 257708, 212866 258347, 213118 258646, 213118 258785, 213203 258788, 213341 259561, 213290 260058, 213389 260467, 213354 260736, 213518 260729, 213676 260457, 213731 260121, 213899 259546, 213696 258683, 213593 258646, 213690 258621, 213691 257096, 213403 256876) (208567 252322, 208564 252738, 208518 253280, 208521 254049, 208655 254448, 208835 254113, 208851 253147, 208815 252344, 208770 251719, 208776 251553, 208730 250899) (209120 240735, 209088 240963, 208879 241805, 208904 242455, 208948 242786, 208933 243669, 208854 244453, 208695 244910, 208674 245446, 208642 245654, 208625 246270, 208697 246406, 208760 246901, 208754 247204, 208866 247689, 209036 247172, 209050 246855, 209156 246342, 209189 245843, 209280 245547, 209307 244951, 209150 244440, 209154 243659, 209279 242692, 209391 242330, 209391 242021, 209465 241428, 209451 240913, 209476 240693, 209366 240216) (212215 246286, 212251 246632, 212309 246242, 212276 245297) (210252 244747, 210408 244996, 211017 245524, 211184 244740, 211186 244573, 210438 244466) (212394 237474, 212164 237568, 212284 238866, 212427 239052, 212434 239271, 212604 239527, 212568 239651, 212645 240024, 212618 240418, 212208 240333, 212065 240521, 211759 241057, 211942 241912, 212274 242018, 212712 241642, 212828 241088, 212814 240537, 212764 240067, 212772 239464, 212891 239093, 212875 238894, 212953 238676, 212935 238279, 212855 237892, 212609 237575, 212597 237413, 212485 237294) (209085 238393, 209069 238667, 208966 239142, 208981 239771, 209037 240003, 209358 240195, 209217 239743, 209339 239570, 209411 238919, 209486 238699, 209563 238144, 209413 238017)), ((192410 128152, 192443 129647, 192451 132488, 192594 132474, 192572 130626, 192581 129942, 192578 128942, 192657 128493, 193435 128418, 193984 128420, 194511 128458, 196757 128379, 198201 128396, 198659 128347, 199100 128408, 199897 128452, 200575 128448, 201158 128404, 202011 128379, 202190 128387, 202832 128329, 203208 128368, 203595 128335, 204050 128436, 204879 128287, 206187 128266, 206563 128213, 206912 128270, 207484 128250, 208104 128246, 208521 128339, 208588 128761, 208599 129944, 208635 129492, 208711 129151, 208790 129008, 209227 128726, 209432 128563, 209924 128454, 210534 128416, 210887 128433, 211395 128437, 211700 128498, 212242 128471, 213091 128468, 213408 128515, 214379 128518, 214572 128553, 215166 128454, 215998 128600, 216830 128587, 217466 128428, 218691 128484, 218829 128471, 219338 128476, 219687 128434, 220130 128516, 220952 128525, 221033 128510, 221749 128452, 222479 128452, 223076 128480, 223861 128448, 224423 128603, 224638 128600, 225114 128936, 225270 129119, 226145 129939, 226530 130320, 226653 130418, 227440 131200, 228401 132191, 228534 132427, 228712 132636, 228980 132761, 229481 133302, 229783 133595, 230250 134140, 230354 134206, 231056 134906, 231191 135292, 231148 135601, 231615 135292, 232157 135551, 232520 135938, 232626 136089, 232997 136496, 233273 136770, 233648 137166, 233851 137327, 234359 137890, 234423 137940, 234804 138326, 235248 138726, 235672 139171, 235891 139426, 236228 139659, 236684 140130, 237065 140431, 237393 140885, 238475 141886, 238692 142176, 239200 142607, 239380 142806, 239914 143313, 240529 143955, 240589 144059, 241505 144961, 241646 145187, 242058 145493, 242551 145938, 242936 146331, 243263 146625, 244368 147784, 244667 148326, 244654 148645, 244995 148367, 245894 149270, 246188 149580, 246655 150003, 247145 150486, 247731 151097, 248096 151452, 248483 151859, 249643 152993, 249978 153520, 250108 154140, 250128 158178, 250319 158231, 250424 158343, 250966 158305, 251139 158331, 251683 158603, 251956 158389, 252376 158525, 252834 158468, 252927 158562, 253133 158468, 253657 158397, 254206 158253, 254935 158265, 255427 158326, 256313 158390, 257434 158287, 258107 158325, 259066 158325, 259906 158284, 260766 158296, 261428 158215, 261592 158169, 262454 158165, 263248 158570, 263312 158665, 263440 159107, 263453 159678, 263450 160545, 263405 161735, 263380 162793, 263338 163779, 263354 164910, 263320 165580, 263282 165627, 263180 166119, 263050 166312, 263095 166617, 263049 167185, 263268 167536, 263291 167907, 257174 182673, 257168 185685, 257174 217532, 256904 217498, 256902 219138, 257174 219142, 257174 231170, 256863 231143, 256858 232925, 257174 232823, 257174 275178, 246644 275178, 246447 274181, 246321 273595, 246144 272551, 246065 271817, 245897 270538, 245849 270272, 245950 269348, 246003 268707, 246238 267945, 246483 267201, 247079 265284, 247400 264557, 247777 263745, 247772 263537, 247799 263707, 248111 263115, 248114 262843, 248156 263037, 248376 262617, 248376 261874, 248363 261798, 248035 262423, 247693 263038, 247362 263667, 247081 264320, 246835 264968, 246319 266443, 246155 267060, 245893 267917, 245748 268684, 245642 268862, 245434 269447, 245293 270263, 245337 271021, 245548 271792, 245640 272526, 245744 273086, 245984 274189, 246218 275179, 244435 275179, 244374 274651, 244273 274001, 244245 273255, 244269 272421, 244254 271265, 244224 270942, 244295 270003, 244406 267717, 244447 267079, 244539 266259, 244792 265619, 245251 264908, 245280 264660, 245407 264167, 245440 263967, 245709 262815, 245637 262163, 245650 261775, 245821 260799, 246055 259608, 246155 258787, 246248 258152, 246228 257465, 246296 256783, 246274 256113, 246377 255451, 246201 254977, 246154 255263, 245949 255301, 245528 255170, 245513 254822, 245308 254046, 245188 253717, 245078 253155, 245046 252781, 244960 252189, 244692 249985, 244564 248462, 244538 247567, 244579 247146, 244664 247054, 245066 246940, 245603 246921, 245591 246309, 245533 246174, 245230 246566, 244497 246480, 244347 246328, 244267 245423, 244165 244972, 244187 244428, 244133 245249, 244027 245689, 243929 246227, 243785 246362, 243159 246387, 242895 246296, 242753 246106, 242652 245459, 242609 243888, 242607 242872, 242580 241048, 242576 239765, 242615 237368, 242498 229349, 242500 228464, 242480 226741, 242506 225790, 242586 224526, 242641 223025, 242654 221933, 242648 219036, 242662 217151, 242646 214088, 242705 210897, 242700 208895, 242678 206165, 242639 203402, 242626 200390, 242638 199146, 242610 197892, 242563 196697, 242525 195344, 242517 194183, 242478 192990, 242417 190420, 242397 187920, 242434 187427, 242482 185917, 242578 184128, 242602 183876, 242634 183140, 242650 182318, 242609 181433, 242537 178701, 242477 177249, 242476 174782, 241961 174785, 241953 175694, 241926 176337, 241906 177653, 241909 178593, 241854 179943, 241844 180599, 241953 181918, 241912 182604, 241907 183194, 241877 183894, 241907 185371, 241868 185928, 241795 187666, 241639 188074, 241353 188228, 240589 188239, 240358 187862, 240300 187494, 240297 187803, 240088 188059, 239597 188098, 239353 187904, 239160 188239, 238313 188250, 237976 188131, 237876 187818, 237900 187016, 237689 186988, 237519 187603, 237528 187749, 237311 188249, 236809 188207, 236262 188235, 236161 187816, 236059 186978, 235917 186787, 235930 186317, 235758 185822, 235707 186250, 235829 186862, 235571 188099, 235419 188078, 235194 188201, 234786 188171, 234463 187980, 234249 187540, 234165 187127, 234109 185720, 234114 183040, 234065 181445, 234021 180489, 234060 176553, 234039 175800, 234048 175081, 234019 173962, 234020 173212, 234064 170877, 234139 169927, 234214 168675, 234275 167900, 234297 167153, 234085 165668, 233687 164974, 233638 166365, 233630 167434, 233674 168185, 233733 168747, 233747 169449, 233678 169987, 233674 170133, 233561 170778, 233447 171584, 233436 172973, 233527 174984, 233532 175455, 233595 176493, 233717 177539, 233751 178590, 233812 183152, 233784 184229, 233718 185390, 233700 186493, 233751 188019, 233768 188288, 233781 189008, 233780 189559, 233754 190779, 233745 192596, 233698 193250, 233573 193649, 233518 193990, 233492 194799, 233455 195451, 233427 196478, 233507 197434, 233571 197942, 233617 198718, 233633 200041, 233626 202233, 233592 203457, 233576 204957, 233578 206464, 233523 207639, 233514 208538, 233533 209220, 233634 209877, 233586 210868, 233574 211821, 233547 212474, 233550 213097, 233582 214354, 233476 217213, 233429 217466, 233306 217743, 233094 217919, 232408 217952, 231862 217752, 231421 217817, 231101 217721, 230811 217964, 230373 217979, 229780 217960, 229558 217902, 229493 217835, 229403 217402, 229482 217303, 229490 216468, 229458 216266, 229368 216514, 229261 217115, 229308 217350, 229185 217720, 228997 217986, 228320 218011, 227860 217973, 227756 217303, 227679 217185, 227530 217255, 227102 217570, 226591 217911, 225937 217428, 225708 216545, 225670 214441, 225673 211706, 225635 209836, 225599 208952, 225589 208087, 225605 204975, 225570 203517, 225584 201299, 225574 200124, 225612 196932, 225689 195623, 225781 193717, 225841 192829, 225858 192095, 225797 191405, 225671 190660, 225622 190017, 225595 188988, 225615 188162, 225710 186730, 225741 186420, 225794 185525, 225813 184576, 225782 183386, 225740 182421, 225631 180559, 225513 177500, 225444 176008, 225492 174050, 225566 168640, 225733 167673, 225833 167291, 225827 166627, 225631 165377, 225608 164541, 225582 163986, 225584 163344, 225539 161836, 225582 160497, 225633 158127, 225752 156302, 225733 155632, 225565 154405, 225561 152207, 225590 150576, 224795 149775, 224711 150371, 224256 151138, 224239 151261, 224281 151194, 224416 151487, 224579 151610, 224799 151936, 224792 153471, 224811 156117, 224800 158616, 224744 161961, 224547 163360, 224493 164031, 224509 164671, 224608 165960, 224658 167029, 224692 168247, 224594 168963, 224570 169753, 224344 170506, 224605 171125, 224688 171256, 224737 171574, 224779 172359, 224782 172964, 224724 175850, 224745 176633, 224777 177263, 224795 178342, 224754 181712, 224691 182222, 224382 182539, 223970 182586, 223672 182572, 223475 182411, 223287 182384, 223121 181913, 222944 181222, 222921 180632, 222983 179987, 222944 179287, 222928 179160, 222903 178581, 223010 177873, 223247 177176, 223459 176481, 223628 175773, 223754 175041, 223843 174298, 223829 173977, 223837 172981, 223972 172288, 224127 172025, 224232 171557, 224050 171167, 223824 171712, 223660 172005, 223447 172850, 223481 173509, 223472 173641, 223492 174259, 223178 175557, 222955 176407, 222785 176750, 222640 177424, 222572 177637, 222509 178135, 222488 178540, 222410 179244, 222381 179922, 222432 180561, 222521 181189, 222545 182205, 222448 182430, 221886 182595, 220831 182599, 220701 182566, 220574 182469, 220526 181902, 220321 181305, 220191 181586, 220103 182083, 219958 182499, 219673 182627, 219268 182356, 219092 181880, 219099 181253, 219152 180747, 219166 179635, 219211 179025, 219159 178325, 219196 177700, 219068 176786, 218707 175603, 218522 175126, 218435 174589, 218239 174275, 218151 173993, 218047 173389, 218008 173641, 218029 173808, 217981 174330, 218112 174999, 218429 176364, 218507 176859, 218598 177649, 218615 177728, 218640 178233, 218662 178418, 218691 179539, 218678 179800, 218671 180346, 218604 181203, 218382 181969, 218242 182079, 218156 182267, 218001 182392, 217626 182299, 216968 182012, 216870 181781, 216771 181725, 216726 181266, 216691 180362, 216693 179999, 216654 177370, 216699 174541, 216646 172147, 216559 166166, 216603 164803, 216674 163773, 216717 162823, 216734 161909, 216729 159917, 216744 157655, 216729 155257, 216763 153372, 216781 153168, 216803 152631, 216773 149664, 216867 148838, 217241 148141, 217141 147828, 216917 147404, 216855 147065, 215946 146528, 216035 148472, 216046 149815, 216005 151774, 216062 154229, 216042 155158, 215960 157591, 215917 158179, 215873 158626, 215792 160732, 215487 160955, 215119 161020, 214930 160442, 214829 159937, 214788 159868, 214717 159975, 214602 160884, 214517 160964, 214229 161051, 213586 161046, 213253 160860, 213314 160788, 213348 160461, 213280 159871, 213191 159662, 213383 159471, 213442 159357, 213348 158735, 213271 158533, 213162 158663, 213160 159269, 213040 159734, 213110 160180, 213073 160432, 213108 160503, 212762 161057, 211563 161008, 211146 160859, 211045 160712, 211072 160508, 211006 159563, 211002 159050, 210950 158538, 210891 158277, 210961 157458, 210909 156219, 210759 155771, 210815 155090, 210864 154933, 210773 154558, 210707 153849, 210689 153219, 210760 152627, 210721 152106, 210597 150812, 210475 149054, 210401 147777, 210387 147196, 210329 146929, 210398 146455, 210396 145921, 210368 145424, 210410 144567, 210512 143891, 210482 143170, 210315 142460, 210272 142431, 209996 142484, 209869 143171, 209909 143876, 210095 144833, 210075 146498, 210099 147198, 210138 147449, 210151 148297, 210177 148425, 210189 148954, 210234 149162, 210207 149780, 210276 150885, 210315 152037, 210380 152715, 210446 153159, 210511 154050, 210546 154971, 210600 155441, 210626 156589, 210704 157357, 210669 157518, 210722 157933, 210677 158666, 210601 158868, 210604 159231, 210665 159826, 210634 160752, 210459 160852, 210062 160898, 209065 160776, 208455 160667, 207849 160510, 207787 159837, 207839 158038, 207822 157460, 207767 156542, 207706 154959, 207805 153711, 207812 153134, 207658 151279, 207632 149622, 207649 148992, 207719 148366, 207828 147865, 208031 147116, 208116 146508, 208102 145757, 208104 144541, 207982 143866, 207733 143193, 207652 142528, 207126 142528, 207081 145956, 207012 147181, 206955 148773, 206842 150961, 206869 151792, 206930 152440, 207027 153120, 207077 153801, 207100 155303, 207083 156129, 207007 157672, 206947 158469, 206915 159264, 206897 160039, 206894 160859, 206920 161941, 206925 162607, 206985 164000, 207027 164618, 207081 165673, 207273 171437, 207240 173152, 207159 180144, 206953 181247, 206903 181441, 206878 182101, 206921 182768, 207050 183463, 207103 184130, 207151 185617, 207154 186539, 207195 187978, 207116 191678, 207105 192839, 206967 195345, 207031 196214, 207096 196735, 207147 197409, 207162 199810, 207120 202908, 207114 204678, 207075 205290, 206979 205800, 206456 205948, 206676 206105, 206767 206528, 206831 207114, 206863 208664, 206863 209360, 206879 210399, 206879 211170, 206930 213225, 206957 214926, 206929 216286, 206985 220098, 206915 220769, 206852 221522, 206836 222237, 206843 222970, 206810 224819, 206757 225846, 206745 226798, 206796 227636, 206860 228406, 206851 229243, 206611 230855, 206573 231742, 206567 232507, 206653 234315, 206656 234809, 206692 235704, 206851 237166, 206870 237748, 206923 241217, 206943 243335, 206825 245802, 206828 246410, 206864 247502, 206898 248170, 206907 249269, 206878 250731, 206862 252832, 206787 253242, 206669 253555, 206597 254286, 206571 255458, 206534 256511, 206691 257872, 206760 259072, 206759 262159, 206722 263703, 206708 265244, 206709 266697, 206658 267690, 206644 268981, 206732 269665, 206758 270280, 206717 271077, 206703 272111, 206676 272785, 206713 274883, 206689 275178, 200778 275179, 200788 274640, 200747 274512, 200744 274192, 200572 274125, 200488 274963, 200509 275179, 198843 275179, 198845 271897, 198811 270166, 198756 268769, 198779 265030, 198754 262997, 198761 261728, 198751 261102, 198751 259938, 198795 256481, 198856 255729, 198931 254059, 199018 252678, 199031 251943, 198964 251226, 198843 250512, 198792 249791, 198773 249075, 198780 248229, 198855 246918, 198928 246116, 198970 245182, 198987 244400, 198963 243221, 198790 239950, 198609 235343, 198623 234580, 198660 233480, 198727 228366, 198800 227574, 198997 226793, 198991 226029, 198851 225257, 198795 224576, 198754 223659, 198738 222514, 198705 221644, 198709 220956, 198773 218723, 198786 217774, 198831 216829, 198920 215545, 198889 214829, 198770 213963, 198738 213462, 198721 212253, 198773 208758, 198774 207516, 198826 206788, 199338 206423, 199393 206425, 199248 206277, 199133 205306, 199096 203617, 199096 202218, 199074 201131, 199090 200372, 199040 198312, 199001 195525, 199025 194278, 199010 192825, 198985 191746, 198972 189522, 199067 188431, 199102 187733, 199116 186903, 199106 186317, 199135 184276, 199191 183087, 199223 182094, 199215 181310, 199101 179448, 199116 178549, 199190 177833, 199278 177193, 199357 176417, 199381 175050, 199376 174397, 199312 173183, 199269 171339, 199213 170393, 199121 169473, 199083 168235, 199070 166211, 199041 164973, 199011 161524, 199075 160062, 199123 159231, 199133 158419, 199064 155948, 199081 150808, 199129 150130, 199338 149482, 199409 148818, 199439 146993, 199471 146296, 199428 145598, 199287 144358, 199233 143804, 199198 142997, 199190 142471, 197987 142381, 197973 143321, 197994 145273, 197957 146910, 197955 147413, 197924 147986, 197943 150070, 197892 150737, 197595 151074, 197474 151368, 197731 151905, 197810 152027, 197966 152682, 197967 153701, 197954 154400, 197958 154622, 197915 155329, 197903 155412, 197909 156283, 198039 159371, 198126 160814, 197956 161292, 197763 161129, 197502 161316, 197380 161470, 197881 162110, 198054 162796, 198098 163516, 198118 164579, 198111 165602, 198053 166530, 198005 167051, 197989 167743, 198046 168793, 198058 169212, 198148 171146, 198165 171965, 198161 172709, 198125 173503, 198126 174004, 198105 174661, 198158 176761, 198171 177914, 198072 180939, 197976 182091, 197906 184105, 197785 184452, 197708 184511, 197328 184602, 196833 184576, 196689 184496, 196538 184146, 196380 183296, 196072 180728, 196021 180495, 195928 180561, 195978 180309, 195903 179920, 195905 179718, 195846 179101, 195747 178518, 195597 179131, 195680 179475, 195658 179748, 195714 180342, 195804 180906, 195857 181449, 195972 181789, 195964 181954, 196036 182457, 196144 183440, 196171 184125, 196121 184348, 195976 184541, 196206 184567, 196309 184624, 196313 184717, 196465 184988, 196492 185129, 196623 185274, 197002 184638, 197670 184634, 197919 184724, 198038 184951, 198127 185524, 198159 187024, 198157 187411, 198192 189029, 198157 190303, 198146 191317, 198190 192935, 198264 196789, 198262 197451, 198279 198108, 198264 198952, 198143 200792, 198120 201790, 198110 205340, 198124 207092, 198081 209002, 198082 210397, 198106 212849, 198138 214541, 198136 215847, 198148 216267, 198143 217185, 198179 218509, 198256 219862, 198281 221341, 198318 222395, 198329 222991, 198351 223492, 198368 226035, 198266 227712, 198212 228283, 198166 228642, 198131 229429, 198152 230091, 198191 230779, 198220 231956, 198262 232680, 198290 233739, 198292 234335, 198261 235453, 198250 236759, 198296 238521, 198306 239245, 198290 240144, 198209 242819, 198121 243957, 198038 246213, 197926 246413, 197662 246482, 197819 246479, 197976 246608, 198159 246990, 198235 247688, 198262 248855, 198282 250763, 198276 251220, 198294 252049, 198318 252649, 198356 254840, 198323 256215, 198379 258614, 198374 259744, 198282 260440, 198243 261135, 198241 262307, 198204 264037, 198169 264568, 198146 265461, 198162 266195, 198249 267136, 198269 267690, 198245 267863, 198209 268405, 198096 268996, 197988 269763, 197969 271124, 198050 272537, 198078 273756, 198234 275179, 193720 275179, 193685 274563, 193643 275179, 190079 275178, 190011 273738, 190063 271654, 190116 267968, 190149 266686, 190368 265983, 190412 265318, 190327 264644, 190196 263998, 190175 263173, 190146 262520, 190144 261870, 190113 261139, 190108 260430, 190173 258279, 190197 257074, 190316 255366, 190282 254633, 190175 253918, 190135 253212, 190125 251943, 190178 247902, 190223 247371, 190333 247044, 190639 246921, 191575 246902, 191881 246870, 192882 246810, 192955 246844, 193065 246995, 193146 247319, 193167 247747, 193119 248499, 193101 249583, 193107 249632, 193089 250155, 193128 250347, 193032 250777, 192857 252295, 192804 253033, 192937 253719, 193013 252664, 193046 252009, 193131 251585, 193101 251377, 193237 251042, 193615 248580, 193690 247117, 193651 246998, 193736 246732, 193921 246679, 194752 246670, 195133 246836, 195131 247272, 195177 247788, 194974 247824, 194874 249182, 194931 249582, 194808 249597, 194738 250356, 194654 250836, 194672 250968, 194594 251204, 194477 252034, 194427 252844, 194412 253727, 194438 254301, 194471 255510, 194573 256179, 194658 256866, 194709 257746, 194918 258507, 194912 258918, 194987 259617, 195125 260300, 195261 259610, 195165 259116, 195142 258914, 195033 258222, 195013 257533, 194913 256853, 194901 256191, 194820 255543, 194777 254893, 194759 254205, 194757 252983, 194779 252257, 194850 251485, 194845 250996, 194909 250385, 195027 249948, 195135 248899, 195131 248799, 195262 247887, 195311 247058, 195463 246650, 195523 246590, 195822 246563, 195615 246230, 195591 245812, 195517 245453, 195561 245281, 195445 245126, 195627 245092, 195608 244394, 195537 243896, 195349 244047, 195370 244710, 195524 244915, 195342 244994, 195276 245240, 195416 245878, 195194 246424, 194838 246569, 194320 246552, 193779 246506, 193469 246422, 193324 245962, 193261 245166, 193214 245025, 193245 244938, 193251 244075, 193197 243914, 193185 243344, 193212 242885, 193166 242160, 193116 240365, 193079 239667, 193009 239079, 192913 238448, 193005 237864, 192975 237161, 192821 235432, 192794 235314, 192782 234738, 192711 233573, 192683 232960, 192643 231453, 192633 229783, 192648 229054, 192738 228394, 192756 227614, 192600 226911, 192580 226892, 192487 226332, 192275 226214, 192247 226902, 192101 227636, 192175 228349, 192329 229069, 192318 229368, 192327 231098, 192355 232462, 192430 234133, 192480 234953, 192513 235257, 192547 235895, 192577 236047, 192541 236297, 192577 237196, 192676 238086, 192757 238465, 192769 239111, 192794 239349, 192818 240263, 192834 240354, 192862 240865, 192879 240964, 192870 241673, 192898 243459, 192846 244475, 192912 244875, 192887 245428, 192878 245965, 192722 246352, 192383 246417, 191500 246308, 190689 246164, 190157 246017, 190048 245880, 190020 245729, 190079 243431, 190073 242776, 190032 242249, 189995 241316, 189942 240500, 189963 239848, 190007 239360, 190058 238544, 190038 237850, 189890 236199, 189877 234905, 189886 233768, 189992 232831, 190265 231773, 190361 231110, 190350 230171, 190352 229114, 190277 228427, 190039 227700, 189911 227014, 189893 226231, 189898 225037, 189966 220139, 189886 218314, 189907 217131, 189908 216382, 189882 215438, 189851 213545, 189876 211180, 189912 209435, 189911 208541, 189883 206660, 189894 204532, 189927 202659, 189963 201614, 190113 200721, 190200 199774, 190063 197992, 189974 195938, 189956 194314, 189896 192906, 189960 190449, 189942 189678, 189881 188780, 189905 187594, 189905 186497, 189939 185209, 190142 184731, 190280 184649, 190748 184552, 191548 184532, 192068 184654, 192522 184510, 192831 184499, 192541 184454, 192378 184089, 192294 183352, 192207 182899, 192224 182815, 192049 181297, 191947 181065, 191971 180885, 191853 180305, 191703 179059, 191736 178986, 191771 178325, 191620 176985, 191558 176857, 191562 176203, 191579 176033, 191338 175254, 191081 174646, 190502 173743, 190096 173009, 189938 172175, 189971 171421, 190097 170672, 190296 169948, 190401 169271, 190397 167362, 190349 166727, 190176 166093, 189972 165475, 189924 164820, 189912 163601, 189924 163009, 189921 162394, 189950 160674, 189997 160364, 190137 160265, 190205 160390, 190567 160724, 190641 160685, 190786 161037, 191068 161281, 191170 161220, 191340 161485, 191335 161618, 191579 162195, 191666 162742, 191733 163285, 191730 163403, 191861 164005, 191890 164630, 191911 164721, 191933 165261, 191971 165814, 191988 166604, 192041 167605, 192090 167737, 192067 167851, 192106 168350, 192082 168518, 192103 169462, 192146 169627, 192266 169577, 192227 169883, 192169 169987, 192151 170750, 192217 172036, 192186 172905, 192139 173519, 192144 174311, 192307 175097, 192517 175873, 193058 177609, 193230 178081, 193429 178858, 193527 179423, 193746 180173, 193965 181039, 194186 181972, 194486 183115, 194546 183564, 194522 184140, 194409 184460, 194689 184470, 195091 184602, 195178 184579, 195106 184574, 195012 184485, 194977 183824, 194896 183414, 194742 182505, 194534 181556, 194218 180256, 194031 179341, 193845 178580, 193675 178017, 193626 177765, 193466 177247, 193199 176568, 193037 176316, 192888 176172, 192864 175841, 192760 175333, 192680 175345, 192680 175072, 192579 174535, 192461 173530, 192463 172745, 192487 171993, 192589 171242, 192525 170388, 192446 169859, 192460 169165, 192403 167906, 192413 167824, 192379 166537, 192337 165881, 192316 165232, 192304 165130, 192388 163959, 192325 163389, 192328 163345, 192151 162497, 192004 161526, 191987 160912, 191804 160713, 191482 160056, 191253 159315, 191233 158533, 191235 157850, 191189 157150, 191154 155774, 191002 156126, 190985 156441, 190905 157180, 191153 157787, 190916 157569, 190847 157624, 190906 157896, 191155 158474, 190944 158318, 190927 158589, 190953 159243, 191168 159853, 191349 160639, 191219 160585, 191173 160785, 191015 160600, 190742 160103, 190005 158678, 189887 156181, 189880 154961, 189888 153069, 189867 152481, 189891 150260, 190022 149515, 190335 149065, 189980 148522, 189202 147175, 189113 148121, 188932 148781, 188901 149601, 188854 150377, 189002 151348, 189058 152066, 189074 153401, 189064 154839, 189024 155786, 189011 157981, 188963 158751, 188955 159524, 189075 160259, 189028 160987, 189020 161519, 188984 162406, 189018 163599, 188978 164281, 188919 165745, 188705 166093, 188388 166234, 188032 166259, 187555 166219, 187390 166132, 187214 166104, 186681 166152, 186408 166088, 186163 166273, 185095 166274, 184984 166147, 185041 166059, 184948 165383, 184782 165412, 184779 165944, 184719 166075, 184430 166257, 183688 166321, 183237 166265, 183097 165702, 182982 164978, 183001 164602, 183078 164238, 183121 163646, 183078 162869, 183060 162805, 182962 163237, 182986 163361, 182932 164223, 182975 164614, 182952 164977, 182787 165651, 182560 166249, 181877 166226, 181499 166070, 181204 165482, 181152 165132, 181116 164154, 181107 161326, 181076 160315, 181030 159410, 181039 158201, 181035 157069, 181042 156518, 181037 155941, 181011 155442, 181029 153480, 180690 153967, 179915 154689, 180089 155358, 180144 155503, 180296 156000, 180366 156711, 180368 158506, 180343 160696, 180312 162390, 180305 163625, 180366 164900, 180376 165616, 180348 166488, 180348 167432, 180382 168633, 180406 170177, 180404 171895, 180346 174654, 180379 177365, 180367 179699, 180328 181607, 180298 182535, 180164 183381, 180055 184305, 180100 185163, 180169 185917, 180236 187143, 180286 188741, 180281 189502, 180347 191863, 180299 193912, 180303 194629, 180384 196037, 180330 199485, 180217 199955, 179950 200065, 180198 200062, 180567 200146, 180693 200525, 180751 201077, 180783 202030, 180780 202682, 180807 204260, 180832 204794, 180876 206712, 180837 207736, 180900 210366, 180777 211226, 180749 212002, 180745 212783, 180726 213720, 180710 213873, 180667 215028, 180705 215750, 180783 216485, 180761 217177, 180605 217828, 180497 218495, 180480 219229, 180497 219808, 180564 220710, 180571 221099, 180613 221859, 180728 222566, 180786 223225, 180814 224883, 180834 225524, 180857 227458, 180786 228301, 180735 229231, 180809 230810, 180819 231874, 180808 232495, 180790 232906, 180791 233896, 180715 234652, 180536 235308, 180504 236128, 180457 236900, 180606 237873, 180661 238593, 180677 239931, 180669 241359, 180630 242292, 180615 244507, 180566 245282, 180558 246050, 180678 246785, 180631 247514, 180623 248048, 180588 248920, 180621 250125, 180582 250808, 180522 252272, 180309 252619, 179991 252761, 179635 252786, 179158 252745, 178993 252659, 178819 252631, 178285 252679, 178011 252616, 177765 252799, 177032 252807, 176678 252777, 176587 252672, 176644 252582, 176551 251910, 176385 251939, 176384 252470, 176322 252601, 176034 252784, 175287 252849, 174840 252792, 174701 252228, 174586 251505, 174604 251129, 174681 250766, 174725 250161, 174681 249397, 174663 249331, 174566 249764, 174590 249888, 174536 250750, 174579 251153, 174556 251504, 174391 252178, 174164 252775, 173480 252752, 173102 252597, 172804 252019, 172756 251690, 172715 250338, 172713 248030, 172684 246944, 172634 245798, 172641 242482, 172615 241970, 172613 241330, 172631 240249, 172620 239695, 172662 237268, 172806 235100, 172885 234184, 172882 233397, 172707 232535, 172651 231755, 172645 230968, 172751 229685, 172799 229328, 172847 228591, 172855 227767, 172823 227034, 172778 226450, 172762 226061, 172700 225441, 172495 221653, 172504 220898, 172530 220515, 172602 216618, 172653 215894, 172878 215187, 172822 214447, 172669 213672, 172627 212808, 172621 212118, 172587 211242, 172649 209574, 172677 208441, 172768 207486, 172798 206804, 172689 206149, 172608 205489, 172597 204980, 172644 202288, 172639 201794, 172671 200979, 172965 200420, 174331 200378, 175382 200325, 175521 200415, 175617 200582, 175625 200760, 175706 201026, 175651 201114, 175680 201312, 175634 201381, 175615 201859, 175644 201951, 175614 202218, 175575 203004, 175578 203723, 175516 204000, 175584 204264, 175524 204440, 175605 204348, 175777 203193, 175826 203120, 176113 201556, 176140 200783, 176114 200457, 176167 200338, 176349 200250, 175637 200251, 175226 200103, 174785 200214, 174172 200171, 173994 200115, 173882 200011, 173884 199821, 173793 199248, 173788 198935, 173703 199307, 173501 199811, 173357 200047, 172639 200073, 172378 199984, 172224 199511, 172170 198194, 172137 195413, 172176 193338, 172119 191158, 172054 187393, 172057 186870, 172036 185993, 172073 185078, 172129 184388, 172189 183359, 172216 182302, 172208 181125, 172221 178730, 172210 176775, 172231 175534, 172267 174376, 172262 172921, 172239 170735, 172203 169588, 172202 167958, 172191 166877, 172201 166203, 172196 165276, 171870 165083, 172041 165793, 172041 166608, 171922 168997, 171936 169941, 171995 171091, 172011 171708, 171998 173158, 171981 173723, 171972 176018, 171825 176754, 171734 177109, 171643 179584, 171689 179975, 171855 181765, 171866 183058, 171862 185335, 171827 186629, 171810 189678, 171759 190868, 171749 191761, 171769 192412, 171870 193059, 171818 194159, 171805 195064, 171776 195798, 171807 197028, 171810 197823, 171702 200589, 171527 200988, 171282 201197, 170878 201112, 170748 200943, 170637 200468, 170606 199761, 170485 199097, 170398 198096, 170147 195995, 169904 194659, 169820 193608, 169635 192700, 169572 192675, 169590 192497, 169416 191812, 169039 190460, 168993 189801, 168981 189038, 168917 188423, 168854 187624, 168853 187042, 168820 187023, 168822 186492, 169143 184469, 169187 184283, 169319 182983, 169440 182430, 169546 181748, 169720 181049, 169934 180331, 169947 180341, 170242 179774, 170459 179098, 170473 178728, 170531 178059, 170629 177335, 170692 175832, 170709 174978, 170334 174970, 170275 175821, 170263 176459, 170225 176995, 170189 177750, 170169 178424, 170011 179086, 169760 179791, 169625 179913, 169462 180256, 169324 180680, 169129 181719, 168989 182303, 168917 182962, 169041 183620, 168780 185352, 168621 186326, 168534 186946, 168426 188096, 168426 188457, 168363 189889, 168440 191006, 168354 191179, 168493 191259, 168709 191262, 168923 191370, 169094 191861, 169201 192267, 169347 192002, 169322 192530, 169388 192819, 169412 193204, 169492 193748, 169706 194835, 169749 195559, 169749 195748, 169913 197223, 170057 199026, 170101 199972, 170111 200629, 170066 200942, 169972 201112, 169714 201226, 168814 201260, 168417 201132, 168260 200874, 167976 199777, 167938 199117, 167871 198892, 167622 197336, 167711 196719, 167752 195863, 167595 195409, 167475 195836, 167374 196800, 167409 197085, 167466 197956, 167531 198410, 167499 198792, 167395 199024, 167444 199662, 167576 200877, 167322 201111, 167019 201215, 166812 201161, 166677 201181, 166459 201073, 166248 200713, 166049 199792, 166067 199042, 166053 198382, 165991 197761, 165955 197119, 165941 196452, 165864 195775, 165540 195125, 165502 194406, 165397 192983, 165324 190513, 165510 190234, 165539 190117, 165776 189438, 166055 188777, 166132 188531, 166355 188127, 166303 187540, 166025 188052, 166001 188304, 165927 188243, 165635 188841, 165197 190051, 165169 190202, 165003 190788, 164970 191492, 164871 192237, 164875 192972, 164933 193830, 165055 194599, 165342 196589, 165340 197102, 165401 197852, 165498 198440, 165525 199073, 165600 199599, 165628 200210, 165669 200767, 165548 201172, 165195 201272, 164990 201267, 164744 201171, 164317 200816, 164067 200069, 164024 198788, 164011 197889, 164005 194421, 163923 191739, 163938 190188, 163932 189662, 163953 187624, 164160 186981, 164467 186372, 164836 185756, 164139 185359, 164066 185726, 163925 185226, 163922 183872, 163912 183337, 163958 179676, 164028 178800, 164034 178512, 164120 176909, 164153 176588, 164195 175391, 164176 174909, 163316 174926, 163347 175589, 163251 176906, 163226 177660, 163257 178411, 163403 180144, 163426 182879, 163368 183543, 163252 184293, 163182 184535, 162984 185459, 162923 186130, 162940 187169, 162938 188497, 163009 189112, 163348 190328, 163406 190993, 163423 192639, 163409 194401, 163351 198629, 163364 199217, 163422 200616, 163413 201410, 163386 202455, 163448 205469, 163441 206093, 163454 206384, 163443 208813, 163396 211235, 163429 214580, 163420 216750, 163365 219741, 163265 220691, 163123 221675, 163124 222612, 163174 223208, 163251 224424, 163313 226065, 163329 226757, 163345 228616, 163379 229447, 163395 230381, 163384 231215, 163357 232219, 163347 233536, 163424 234956, 163402 238135, 163386 238987, 163339 239426, 163106 239665, 162760 239789, 161653 239821, 161301 239669, 160832 239834, 160413 239844, 160180 239799, 160128 239450, 159942 238987, 159928 239457, 159861 239701, 159601 239856, 159273 239867, 159266 239927, 159629 239915, 160535 240006, 160938 239974, 161345 240038, 161770 240882, 162085 240125, 162755 240112, 163121 240436, 163188 240752, 163220 241371, 163268 243838, 163280 245271, 163238 247469, 163286 249665, 163366 254762, 163367 256265, 163324 257168, 163244 258416, 163203 259673, 163206 262495, 163190 264186, 163207 266160, 163171 268244, 163154 268504, 163145 269263, 163176 272989, 163191 273326, 163212 275179, 144700 275179, 144712 274792, 144788 274066, 144821 273493, 144971 273125, 145452 272841, 146023 272792, 147449 272773, 152208 272763, 152233 272660, 151428 272736, 150436 272747, 148039 272748, 147465 272740, 147036 272750, 146271 272747, 145483 272728, 144953 272682, 144742 272539, 144487 271888, 144546 271470, 144366 270992, 144415 270197, 144336 269319, 144316 267943, 144346 266960, 144258 266350, 144256 265823, 144206 264601, 144185 264353, 144209 263538, 144167 262793, 144201 262023, 144342 261209, 144491 260157, 144376 258934, 144323 257514, 144357 256882, 144304 256245, 144343 255728, 144280 255041, 144320 254463, 144225 253872, 144297 253309, 144331 252861, 144410 252545, 144579 252398, 144948 252269, 145544 252201, 145280 252167, 145076 252044, 144901 251719, 144993 250786, 145023 250282, 145028 249478, 144887 248646, 144813 247937, 144746 246839, 144655 245970, 144727 245338, 144765 244394, 144719 243225, 144751 241955, 144703 240863, 144749 239931, 144753 239452, 144873 238461, 145101 237975, 145598 237694, 146728 237624, 147335 237620, 148259 237665, 149032 237659, 149379 237631, 150760 237612, 151269 237641, 152331 237735, 152650 237892, 152578 237426, 152018 237410, 151653 237441, 149515 237459, 148965 237433, 147132 237441, 145669 237418, 145208 237316, 144989 236928, 144764 235880, 144811 235012, 144746 234263, 144774 233253, 145006 233150, 145141 233031, 145194 232160, 144855 231765, 144880 230482, 144899 230226, 144834 229003, 144938 228102, 144856 227504, 144838 225837, 144773 225200, 144792 224635, 144913 224001, 144934 223418, 145065 222888, 145300 222520, 145147 222137, 145097 221641, 145138 221398, 145418 220833, 145251 220111, 145286 219929, 145272 219164, 145495 218163, 145495 217969, 145690 217453, 145328 216644, 145370 215987, 145451 215835, 145372 215699, 145205 214946, 145369 214620, 146051 214564, 146302 214604, 146369 214569, 147387 214580, 148140 214633, 149886 214615, 150346 214704, 150764 214577, 151489 214553, 151493 214270, 150940 214258, 149644 214163, 148337 214234, 147728 214295, 146084 214350, 145501 214350, 145238 214288, 145135 214210, 145023 213887, 145036 213813, 144904 213322, 144849 212450, 144893 211942, 144833 211191, 144866 210552, 144863 209895, 144897 209496, 144867 209022, 144754 208627, 144814 208148, 144828 207584, 144802 206856, 144783 206675, 144753 205673, 144725 205404, 144732 204708, 144761 204416, 144719 203879, 144564 202442, 144609 201648, 144535 200441, 144499 200131, 144494 199487, 144505 199311, 144458 198606, 144557 197874, 144513 197140, 144403 196276, 144470 195060, 144433 194270, 144546 193880, 144564 193258, 144630 192449, 144652 191709, 144613 191304, 144554 190433, 144592 189976, 144587 189361, 144667 188397, 144624 187791, 144595 187560, 144610 186949, 144579 186328, 144631 185986, 144620 185294, 144656 184431, 144678 184255, 144622 183373, 144596 183223, 144504 182183, 144558 181615, 144551 180348, 144660 179762, 144814 179475, 145169 179331, 146039 179297, 145065 179271, 144531 179091, 144407 178927, 144433 177691, 144473 177087, 144453 176806, 144463 176110, 144500 175708, 144519 174628, 144509 174485, 144583 174080, 144550 173417, 144605 172688, 144677 171216, 144669 170950, 144670 169896, 144606 168981, 144454 168276, 144515 167858, 144431 167301, 144478 166037, 144541 165329, 144511 164785, 144530 163830, 144528 163280, 144506 163033, 144514 162422, 144537 161715, 144500 161474, 144517 160325, 144562 160046, 144524 159648, 144631 159280, 144907 158944, 145406 158856, 146707 158822, 147946 158825, 150704 158798, 151042 158785, 152216 158784, 152531 158774, 154217 158779, 155236 158797, 157450 158799, 157489 158547, 157462 157758, 157545 157256, 157540 157003, 157556 156101, 157678 155517, 158121 154939, 158426 154675, 159484 153578, 160022 153054, 160149 152896, 160647 152396, 160994 151837, 161480 151447, 162137 150795, 162499 150550, 162618 150375, 163159 149803, 163258 149667, 163643 149287, 163921 148880, 164078 148762, 164481 148345, 164622 148249, 165028 147716, 165587 147163, 165862 146935, 166385 146451, 166990 145918, 167434 145376, 167940 144884, 168340 144622, 168913 144489, 169160 144497, 169289 144560, 169178 144422, 169131 144264, 170155 143341, 171052 142374, 171511 141958, 172004 141380, 173257 140328, 173472 140044, 173995 139464, 174559 139147, 174750 139134, 175141 139477, 175145 139364, 175575 138849, 176050 138410, 176433 137968, 176845 137616, 177010 137493, 177385 137010, 177829 136529, 178584 135811, 179691 134787, 180110 134382, 180265 134246, 180652 133827, 181157 133346, 181668 132774, 181763 132691, 182239 132223, 182717 131720, 183336 131142, 183690 130735, 184652 129746, 185079 129370, 185646 128839, 186236 128394, 186878 128200, 187900 128249, 188725 128250, 189047 128191, 189338 128211, 189823 128162, 190727 128144, 191524 128170, 192151 128135) (205036 273709, 205010 274271, 204985 274483, 205015 274774, 205136 274932, 205261 274445, 205274 274168, 205175 273289) (247820 270238, 247863 270976, 248052 271684, 248027 272433, 248181 272681, 248248 272679, 248238 271456, 248285 270960, 248275 270373, 248213 270297, 248089 270526, 248004 270222, 247893 270155, 247861 269984) (203773 269999, 203713 270513, 203749 271165, 203815 271517, 203893 271319, 203944 270768, 203950 270268, 203920 269702, 203859 269412) (191635 271452, 191672 270912, 191644 270827) (247895 268052, 247426 268749, 247417 269505, 247544 269787, 247736 269505, 247693 269202, 247745 268766, 248162 268118, 248161 267584) (195319 268434, 195359 268389, 195292 267737) (195409 264465, 195310 265264, 195376 266003, 195353 266513, 195393 266747, 195322 267369, 195504 267474, 195650 265290, 195490 264773, 195437 264436) (194064 265183, 194092 265294, 194114 265233, 194083 264660) (152691 259011, 152712 260009, 152745 260834, 152690 261516, 152724 262290, 152699 263746, 153047 263665, 153026 262962, 152748 262280, 152707 261527, 152808 261253, 152799 261052, 152867 260519, 152883 260094, 152755 259337, 152770 258901, 152711 258436) (191454 262488, 191405 263188, 191441 263533, 191533 263451, 191507 263183, 191502 262430, 191485 262312) (195302 261011, 195365 261293, 195377 261710, 195531 262726, 195598 262076, 195488 260965, 195367 260402) (200531 261940, 200542 262429, 200605 262236, 200586 261856) (247777 258918, 247752 258941, 247447 259614, 247212 260250, 247121 261304, 247161 261637, 247208 261608, 247213 261545, 247484 260933, 247639 259977, 247742 259677, 247920 259441, 248285 258845, 248195 258163) (192699 258837, 192728 259018, 192677 259673, 192639 260469, 192621 261201, 192678 261298, 192786 261065, 192758 260906, 192775 260370, 192772 259671, 192789 259519, 192766 258763) (152745 257572, 152714 258360, 152783 257995, 152825 256945, 152799 256820, 152778 256189) (192515 256106, 192459 256828, 192500 257377, 192584 256830, 192574 256687, 192590 256108, 192581 255706) (196796 252899, 196798 253748, 196838 255063, 196814 255286, 196865 255337, 196967 256917, 196969 256531, 197028 256159, 196976 255967, 196975 255342, 197026 255309, 196990 255066, 197005 254441, 196998 254278, 197017 253757, 197003 253099, 196903 252628) (200886 253409, 200824 254109, 200757 255172, 200733 255873, 200737 256226, 200794 255849, 200913 254730, 200961 253935, 200923 253387) (192629 254726, 192713 255156, 192987 254712, 192928 254213, 192744 254208) (246787 250980, 246821 251449, 246777 251695, 246695 251838, 246507 252692, 246457 252763, 246524 253504, 246381 253840, 246336 254141, 246462 254764, 246399 254792, 246479 254893, 246538 254375, 246669 253782, 246749 253503, 246664 253064, 246712 252881, 246849 252725, 247198 251696, 247095 251375, 247208 251145, 246839 250818) (152779 254035, 152788 253354, 152762 253164) (152537 249747, 152090 250399, 152174 250996, 152621 251765, 152212 252072, 151954 252128, 151169 252199, 152183 252203, 152595 252360, 152679 252567, 152861 251779, 152859 251633, 152980 250927, 153066 250499, 153066 249565, 152789 249450, 152583 249270) (147828 252238, 148142 252248, 148898 252226) (246853 249859, 246813 249993, 246850 250404, 246904 250560, 247249 251097, 247339 250831, 247189 249919, 247135 249786, 246791 249785) (178949 249400, 178888 250214, 178914 250387, 179007 250405, 179020 250221, 179148 249641, 179078 249303) (161245 247644, 161320 248226, 161348 248343, 161357 248231, 161332 247638, 161340 247503, 161269 247325) (177741 247708, 177788 248016, 177871 247793, 177806 246927) (196884 245487, 196879 246314, 196732 246502, 196475 246571, 196234 246576, 196470 246731, 196691 247210, 196826 246759, 197018 246574, 197335 246494, 197232 246427, 197149 246174, 197128 245885, 197025 245866, 196965 245295) (161394 246276, 161461 246563, 161459 246072, 161414 246053) (149054 242941, 149324 243447, 149417 243522, 149540 243510, 149583 243259, 149267 242971, 149121 242920) (176201 240709, 176253 241344, 176336 241615, 176366 241465, 176280 240577, 176202 240214) (195320 240717, 195328 241042, 195454 241364, 195425 240829, 195310 240329, 195317 240242, 195249 240095) (152796 240421, 152744 240917, 152345 241048, 152523 241164, 152577 241260, 152736 241098, 153037 241025, 153008 240492, 152974 240457, 152747 239959) (247326 236433, 247284 237082, 247259 237739, 247284 238567, 247246 239359, 247285 240868, 247349 240863, 247353 236162) (195206 238525, 195304 239021, 195302 239138, 195364 239265, 195336 238952, 195261 238402, 195254 238248, 195166 238022) (244563 235703, 244596 236416, 244438 237024, 244399 237853, 244393 238480, 244447 239121, 244481 238867, 244514 238280, 244503 237869, 244566 237278, 244448 237040, 244632 236607, 244648 236319, 244593 235662) (159948 237680, 159982 237942, 159938 238326, 159999 238691, 160067 238716, 159962 238322, 160061 237977, 159996 237584, 160046 237300, 159936 237120) (202126 237510, 202097 237640, 202203 238333, 202228 237641, 202189 237493) (159960 232550, 159990 233304, 159933 233925, 159920 234523, 159967 235323, 159954 235923, 159978 236439, 160021 236615, 159943 237075, 160109 236830, 160119 235214, 160131 234678, 160106 233665, 160061 233304, 160076 232670, 160042 232155) (174626 236039, 174665 236339, 174709 235883, 174670 235705) (195122 236194, 195104 235803, 195020 235516) (174867 234131, 174826 234502, 174883 234818, 174920 234315, 174993 233799) (194902 233254, 194959 234032, 194964 234370, 195114 234599, 195110 234054, 194977 233503, 195023 232980) (200547 234235, 200588 234521, 200566 233909) (244623 232450, 244678 233094, 244659 233424, 244772 233575, 244779 232785, 244629 232298) (200226 232669, 200254 233503, 200286 233571, 200419 233377, 200321 233209, 200320 232514, 200249 232225) (194858 231416, 194864 231721, 194941 232087, 194931 232411, 195061 232650, 195009 231489, 194997 230977, 194759 230017) (194729 227865, 194791 228546, 194781 228793, 194844 229292, 194947 229670, 194924 229310, 194755 227846, 194639 226573) (204060 225066, 203953 225846, 203876 226534, 204025 227467, 204010 227792, 204130 228345, 204241 226660, 204247 225857, 204102 225142, 204057 224673) (200033 223536, 200048 224065, 200116 223701, 200099 223374) (194475 219745, 194495 220662, 194467 221792, 194496 222933, 194567 221934, 194572 220917, 194546 220717, 194613 220247, 194528 219620) (203725 220115, 203774 220787, 203791 221321, 203825 221565, 203861 222286, 203934 222612, 204062 222140, 203999 221846, 203915 220985, 203878 220783, 203887 220252, 203776 219454) (201298 221541, 201362 221761, 201372 222338, 201415 222430, 201475 222213, 201546 221384, 201472 221267) (174162 219334, 174126 219861, 174239 220399, 174480 220660, 174352 220066, 174225 219396, 174181 219267) (201193 219122, 201168 219514, 201200 220274, 201219 220470, 201362 219511, 201420 218673, 201331 218508, 201144 218358) (203389 217451, 203471 217572, 203424 218122, 203458 218269, 203438 218792, 203486 219300, 203620 218781, 203602 218108, 203568 217854, 203520 216948) (201078 216815, 201097 217629, 201189 216818, 201215 215795) (205557 213368, 205409 213545, 205454 215387, 205594 217406, 205563 215981, 205564 214747, 205591 214111, 205653 213367) (177745 215035, 177806 215615, 177805 216457, 177795 216644, 177837 217182, 177856 217289, 177888 217125, 177959 216442, 177996 215740, 178055 215568, 178122 215013, 178034 214506, 177874 214443) (204629 192513, 204789 192612, 204698 193219, 204734 193435, 204702 193922, 204690 194622, 204616 194850, 204560 195316, 204431 195451, 204294 196007, 204364 196707, 204346 197246, 204353 197399, 204281 198322, 204267 198670, 204210 199233, 204217 199400, 204117 200062, 204067 200580, 203882 202121, 203710 203669, 203637 204884, 203606 205027, 203665 205548, 203580 206130, 203486 206192, 203601 206454, 203604 206621, 203724 207598, 203558 207788, 203521 207896, 203574 208957, 203409 209336, 203330 210102, 203298 210302, 203263 210834, 203206 211147, 203029 212911, 203021 213573, 203066 214188, 203118 214640, 203103 214999, 203155 216125, 203197 216355, 203244 217163, 203460 216770, 203374 216443, 203455 215954, 203390 215424, 203380 214704, 203358 214253, 203364 212436, 203415 211733, 203413 211475, 203458 210841, 203429 210627, 203496 210126, 203683 209329, 203710 208798, 203795 207944, 203866 207445, 203914 206221, 204116 206085, 204419 206039, 204287 205881, 204189 205314, 204186 204456, 204212 203960, 204234 203212, 204231 203023, 204251 202496, 204259 201860, 204295 201234, 204468 199271, 204480 198975, 204529 198277, 204518 198097, 204618 197397, 204670 196723, 204724 195779, 204719 195157, 204732 194519, 204841 193926, 204892 193228, 204818 192278) (201332 213488, 201216 214893, 201249 215252, 201418 215112, 201576 214854, 201581 214772, 201362 214145, 201381 213568, 201373 213489, 201393 212892) (231855 213838, 232042 214241, 232111 214015, 232014 213356, 232010 213097, 231947 213039) (173883 212862, 173949 213705, 173969 213807, 173983 213705, 173979 213057, 173901 212139) (177959 211937, 178042 212199, 178052 212024, 177984 211672) (201697 186599, 201810 187800, 201930 188294, 202005 188835, 202001 189527, 202165 190777, 202230 191137, 202268 192156, 202397 193290, 202394 193956, 202444 194359, 202483 194858, 202522 195589, 202532 196243, 202553 196736, 202545 198545, 202514 199297, 202542 199510, 202457 200022, 202408 201040, 202492 201511, 202376 201316, 202332 201718, 202405 202044, 202292 201923, 202263 202005, 202169 203287, 202266 203573, 202110 203588, 202229 204020, 202062 204020, 202187 204431, 202066 204518, 201988 205600, 202004 206023, 201921 206286, 201597 206394, 201690 206568, 201747 206850, 201764 207274, 201728 207962, 201660 210734, 201562 211477, 201685 211631, 201636 211846, 201741 211683, 201810 211204, 201859 210593, 202006 209355, 202220 208074, 202220 207725, 202265 206955, 202202 206795, 202231 206473, 202349 206212, 202398 206191, 202237 205691, 202365 205386, 202335 205033, 202117 204646, 202354 204830, 202444 204830, 202292 204453, 202378 204439, 202358 204097, 202398 204095, 202425 203787, 202388 203665, 202439 203644, 202602 201566, 202681 201162, 202733 200585, 202773 200395, 202824 199646, 202855 199392, 202885 198580, 202910 198160, 202908 196684, 202893 196245, 202887 195342, 202871 194840, 202715 193253, 202644 192276, 202529 191475, 202346 189463, 202271 189340, 202296 189114, 202153 188464, 202170 188121, 202097 187502, 202032 186823, 201848 186256, 201798 185521, 201758 185236) (175123 211263, 175213 211653, 175328 211270, 175250 210420) (191878 211554, 191958 211491, 191994 211024, 191880 210838) (230714 210796, 230767 211008, 230781 210505) (176990 204502, 176940 205311, 176947 205408, 176925 206477, 177046 207636, 177156 208109, 177241 208800, 177365 209592, 177480 210448, 177595 210814, 177673 210355, 177497 209586, 177401 209085, 177438 208829, 177244 208104, 177341 207506, 177263 206697, 177242 205648, 177247 205043, 177116 204391, 177252 204261, 177056 204066) (161338 208376, 161504 209268, 161292 209950, 161264 210277, 161337 210319, 161347 210115, 161538 209315, 161508 208543, 161381 208109) (230550 209397, 230559 210069, 230622 209388, 230587 209221) (232369 207814, 232334 208618, 232362 208794, 232389 208618, 232377 207931, 232537 207237) (174980 208087, 175013 208695, 175121 208086, 175097 207710) (179328 205404, 179344 206018, 179391 206519, 179395 206664, 179447 207196, 179455 207554, 179574 207753, 179599 207342, 179560 206667, 179544 206184, 179480 205277, 179401 205080) (175206 205931, 175141 206823, 175164 206895, 175287 206705, 175239 206559, 175301 205791, 175297 205180) (205643 205960, 204785 206043, 204991 206128, 205270 206463, 205343 206846, 205426 206352, 205656 205998, 206181 205952) (200443 205602, 200445 206148, 200346 206395, 201033 206344, 200857 206173, 200655 205888, 200528 205498) (177337 202292, 177391 202631, 177236 203159, 177172 203730, 177301 204178, 177353 203506, 177277 203232, 177455 202995, 177539 202335, 177488 202039, 177548 201787, 177451 201590) (177624 200894, 177540 201156, 177746 201129, 177770 200710) (176853 200021, 176561 200223, 177253 200212, 177529 200413, 177781 200372, 178070 200150, 178446 200118, 178358 200051, 178155 200031, 178051 200123, 177708 200223, 177279 200225, 177030 200080, 176872 199767) (178907 200202, 179009 200307, 179076 200257, 179374 200244, 179472 200191) (200171 193180, 200213 193482, 200195 194026, 200211 194285, 200228 195005, 200246 195284, 200261 195987, 200356 196947, 200376 197546, 200456 198481, 200543 198705, 200572 198651, 200565 197975, 200488 196318, 200483 195517, 200460 195296, 200430 194445, 200413 193539, 200358 193363, 200275 192835, 200286 192697, 200221 192522) (176812 193659, 176864 194592, 176874 195613, 176971 196715, 176976 196864, 177057 197569, 177069 196930, 177064 196659, 177091 195390, 177042 194852, 176988 193663, 176868 192934) (246067 195478, 246190 196451, 246274 196027, 246253 195475) (167917 193899, 168024 194534, 167787 194513, 167760 195004, 167683 195209, 167859 195517, 168054 194591, 168043 194055, 168057 193916, 167970 193470) (246011 189379, 246017 189859, 245967 190238, 245989 192001, 246038 191929, 246004 192086, 246046 192488, 245999 192743, 245981 193861, 246049 193860, 245999 194065, 246030 194462, 245982 194731, 246050 195333, 246244 194702, 246276 194018, 246283 193352, 246210 189725, 246209 189186, 246168 188699) (173983 193717, 173987 194337, 173974 194534, 174022 194738, 174084 194311, 174110 193810, 174145 193393, 174090 192595) (227777 193488, 227762 193676, 227823 193903, 227873 193403) (191669 192716, 191517 193694, 191608 193873, 191769 193456, 191786 192603, 191744 192556) (168097 192552, 168134 193105, 168062 193237, 168188 193392, 168207 193254, 168118 192399) (160322 177695, 160281 178342, 160303 178887, 160456 180921, 160578 183057, 160643 184726, 160680 188122, 160621 188822, 160569 189240, 160539 189870, 160671 190500, 160782 191143, 160870 192031, 160918 193203, 160974 193114, 160964 193021, 161028 192444, 161029 192171, 161098 191577, 161120 191124, 161248 189994, 161273 189851, 161053 188224, 161040 185390, 160923 182027, 160880 181298, 160793 179031, 160712 178071, 160660 177692, 160655 177221, 160609 176351, 160255 176336) (204546 190576, 204557 191442, 204583 191810, 204605 192495, 204816 191680, 204779 190232, 204761 189896) (168227 191871, 168307 192046, 168332 191877, 168278 191366) (193242 189697, 193301 190202, 193304 190998, 193381 191689, 193421 190835, 193353 190273, 193352 189703, 193368 189478, 193316 189140, 193354 188849, 193214 188735) (204412 186998, 204392 187709, 204616 187819, 204515 188361, 204546 188582, 204536 189624, 204615 189031, 204623 188913, 204711 188347, 204709 187667, 204686 187532, 204402 187664, 204450 186995, 204427 186894) (152945 188667, 153137 188664, 153138 188236, 152929 188115) (193344 187964, 193330 188083, 193420 188317, 193366 187678, 193368 187414, 193267 187155) (248032 178717, 248068 182641, 248043 183307, 247931 184522, 247948 185177, 248109 185974, 248169 186978, 248258 187785, 248276 188309, 248320 187663, 248258 187013, 248364 186325, 248387 185607, 248313 184914, 248298 183805, 248266 183433, 248314 183077, 248312 182380, 248283 181944, 248321 181262, 248372 181020, 248359 180124, 248375 179914, 248267 179322, 248303 178877, 248202 177880, 248246 177403, 248255 176508, 247968 176503) (166399 187422, 166368 188107, 166676 187490, 166678 186793) (245582 176486, 245651 177190, 245711 178724, 245675 179822, 245729 181530, 245810 183302, 245876 184141, 245980 186304, 245998 187839, 246061 187255, 246082 186650, 246007 185171, 246006 184920, 245957 184264, 246006 183220, 245974 182608, 245935 182229, 245958 180969, 245920 179906, 245871 177794, 245810 176481) (238998 187574, 239100 187565, 239199 187404, 239068 186936) (167197 184511, 167136 185099, 167026 185765, 166903 186666, 166691 186784, 166808 187211, 166974 186850, 167051 186563, 167234 186150, 167399 185539, 167452 184862, 167426 184401, 167327 184231) (205785 184863, 205830 186461, 205873 187081, 205918 187081, 205899 186932, 205961 186463, 205950 186069, 205967 185548, 205956 184687, 205901 184369) (240213 184281, 240226 184468, 240173 184992, 240203 185477, 240320 186232, 240310 186336, 240434 186647, 240443 186415, 240323 185477, 240460 185286, 240580 185277, 240546 184990, 240421 184466, 240457 183919) (237962 185970, 237970 185728, 237942 185445) (239141 185577, 239184 185719, 239180 185599, 239111 185088, 239080 184946) (168656 175857, 168541 176320, 168514 176614, 168322 177042, 168013 178161, 167993 178403, 167854 178746, 167636 179511, 167603 179713, 167442 180155, 167439 180272, 167414 180221, 167212 180790, 167174 181046, 167034 181263, 166883 181694, 166596 182303, 166434 182582, 166333 182961, 166234 183021, 165831 183918, 165797 184112, 165766 184059, 165522 184538, 165548 185099, 165456 184911, 165392 184987, 165317 184901, 165215 184932, 165153 185159, 165214 185536, 165445 185428, 165615 185223, 165661 184996, 165715 184968, 165903 184450, 166096 184132, 166440 183371, 166448 182827, 166549 183122, 166624 183044, 166736 182748, 166715 182112, 166814 182569, 167014 182115, 167014 181652, 167100 181929, 167313 181489, 167330 181334, 167393 181269, 167586 180656, 167805 180049, 168198 178657, 168646 176968, 168744 176350, 168809 175806) (235958 184195, 236025 184822, 236072 184841, 236007 184193, 235982 184130) (200200 183488, 200221 184186, 200256 184468, 200284 184187, 200285 183440, 200248 182728, 200214 182292) (203055 183103, 203137 183828, 203247 182992, 203191 182226) (258533 170918, 258025 171330, 257788 171452, 257414 171507, 256839 170956, 256603 170919, 256473 170770, 256332 171086, 256204 171849, 255715 171684, 255670 172206, 255653 172793, 255618 172847, 255658 173119, 255583 173732, 255475 174054, 255295 174277, 254850 174558, 254780 174663, 254969 174779, 255067 174947, 255236 175551, 255295 176183, 255343 176384, 255303 176971, 255432 177401, 255425 177902, 255510 178385, 255388 178802, 255464 179162, 255470 179407, 255560 179798, 255526 179989, 255543 180351, 255431 180723, 255455 181322, 255385 181681, 255403 182070, 255117 182498, 255109 182618, 255361 182749, 255601 182955, 255757 183221, 255790 183615, 256079 183112, 256258 182590, 256586 181933, 256790 181621, 256997 180892, 257317 180079, 257886 178809, 258777 177069, 259277 175973, 259656 175502, 259236 175306, 259070 175286, 258869 174878, 258701 174277, 258968 174208, 259157 174066, 259271 173487, 259444 173474, 259634 173272, 259681 173150, 259486 173050, 259656 172717, 259608 172244, 259478 171605, 259052 171337, 258519 171708, 258832 171267, 258915 171018, 258660 170768) (201861 177762, 201867 178156, 201835 178686, 201833 178882, 201794 179385, 201651 182144, 201669 182837, 201740 183339, 201890 182844, 201986 182649, 202070 182154, 202068 181295, 201938 180771, 201967 180080, 201949 179726, 201975 178819, 201973 177982, 201927 177659) (238931 181210, 238902 181830, 239014 182746, 239133 183246, 239189 182970, 239193 182225, 239114 181437, 238996 181006) (205659 182818, 205678 183225, 205700 182816, 205710 182108, 205688 182073) (240796 179333, 240742 180040, 240759 180509, 240717 180734, 240816 180934, 240854 180860, 240908 180041, 240900 179524, 240942 179011, 240858 178840) (177399 179315, 177377 179795, 177502 180666, 177523 180577, 177589 179765, 177580 179330, 177490 179103) (222126 170842, 221864 171589, 221631 171917, 221550 172352, 221573 172952, 221458 172458, 221306 172540, 221165 173188, 221037 173490, 220858 174300, 220584 175435, 220495 175930, 220421 176737, 220392 177698, 220459 178429, 220579 179130, 220803 179481, 220888 179446, 220945 179031, 220969 177724, 221068 176226, 221093 176086, 221145 175469, 221278 174561, 221424 173765, 221580 173322, 221848 172424, 222158 171683, 222389 171017, 222409 170981, 222583 170184, 222569 170074) (146545 179301, 147300 179320, 148040 179387, 149250 179445, 150186 179400, 150829 179335, 152323 179294) (193894 158758, 194101 159394, 194125 160080, 194232 160696, 194422 161415, 194543 162007, 194647 162635, 194684 163761, 194834 164468, 194859 165026, 194780 166345, 194786 166496, 194674 167512, 194554 169229, 194468 170111, 194419 171120, 194345 171770, 194333 172468, 194319 172646, 194358 173428, 194491 174210, 194850 175751, 195009 176484, 195203 177022, 195306 176877, 195290 177339, 195406 178197, 195536 179026, 195734 178444, 195601 177833, 195535 177163, 195442 176462, 195357 176131, 195234 175979, 195235 175739, 195184 175189, 195184 174192, 195167 174025, 195233 173803, 195382 172640, 195504 171887, 195679 171147, 195630 170616, 195848 170517, 195932 169967, 196126 169095, 196397 168346, 196470 167670, 196331 167448, 196265 167488, 196243 167651, 196303 168233, 196079 168038, 195967 168297, 195957 168611, 196037 169002, 195838 169377, 195741 169689, 195820 170368, 195560 170270, 195502 170434, 195446 171136, 195255 171468, 195111 171867, 195017 172529, 195073 172914, 194937 172681, 194753 172629, 194630 171867, 194630 171524, 194571 171116, 194623 170297, 194756 168962, 194777 168624, 194869 168001, 194925 167316, 195097 166768, 195202 166255, 195260 165024, 195216 164441, 195274 163821, 195240 163319, 195152 162771, 195010 161757, 194830 160639, 194641 159993, 194554 159613, 194441 159384, 194218 158784, 194125 159258, 194167 158676, 194032 158467, 193954 158104) (166078 177081, 165946 177692, 165681 177884, 165377 178407, 165384 178732, 165532 178813, 165874 178488, 166090 177880, 166175 177499, 166316 177266, 166160 177007) (164890 176516, 164768 177123, 165082 177518, 165165 177124, 165193 176268) (166807 174942, 166956 175417, 166714 175959, 166809 176042, 166649 176136, 166468 176642, 166470 177036, 166648 176672, 166980 176109, 167272 175438, 167085 174939) (235715 175711, 235729 175444, 235683 175206) (227303 174676, 227619 175674, 227654 175678, 227649 175564, 227320 174674, 227325 174481) (168707 175489, 168839 175586, 168854 175667, 168945 175529, 169157 174991, 168729 174976) (205286 171819, 205320 171880, 205271 172498, 205313 172735, 205373 173344, 205382 173868, 205474 174524, 205753 174620, 205666 173866, 205550 173522, 205465 172990, 205456 172494, 205345 171756) (178350 172158, 178242 172939, 178249 173688, 178208 174287, 178412 173869, 178279 172969, 178480 172706, 178487 172046, 178377 171628) (237360 173322, 237505 173849, 237453 173155, 237302 172512) (227078 173082, 227107 173181, 227176 172962, 227160 172650) (217503 169812, 217635 171074, 217845 170628, 217774 169808, 217664 169389, 217545 169375) (219779 163326, 219640 163961, 219537 164592, 219285 165202, 218969 165841, 219017 166492, 219222 167783, 219487 168474, 219692 168836, 219784 169088, 219855 169487, 219882 170099, 220301 170549, 220462 170622, 220535 170597, 220829 170670, 221236 170448, 221336 169889, 221498 170039, 221654 169829, 222183 168514, 222235 167581, 222189 167237, 222198 166618, 222249 165872, 222345 165544, 222350 165379, 222037 164844, 221561 164634, 221518 165196, 221813 165589, 221999 166064, 222073 166531, 222055 167085, 221824 167044, 221775 167101, 221777 167200, 221670 167434, 221610 168087, 221720 168135, 221963 168039, 221899 168447, 221757 169076, 221577 169608, 221347 169394, 221306 169481, 220901 169568, 220485 169265, 220394 168998, 220252 168767, 220174 168538, 220012 168298, 219988 168322, 219704 167337, 219641 166826, 219476 166491, 219522 165863, 219731 165675, 219900 164901, 219947 164332, 220045 163681, 220111 163400, 220013 162958) (235937 169403, 235965 170155, 235951 170303, 236003 170610, 236061 169829, 236112 169590, 235998 169206) (203458 167700, 203481 167968, 203501 168683, 203572 169057, 203674 169725, 203676 169945, 203781 170386, 203785 169063, 203909 168389, 203845 168001, 203763 167879, 203731 167696, 203546 167351) (230683 167098, 230778 167914, 230760 168585, 230882 169752, 230904 169394, 230928 168593, 230966 168195, 230925 167920, 231063 167254, 231089 166580, 231060 166387, 230817 166263) (218495 160812, 218265 161492, 218154 162217, 218059 162440, 217706 163556, 217593 164302, 217443 164995, 217396 166403, 217422 167185, 217394 167740, 217425 168705, 217527 169030, 217617 168835, 217714 168819, 217824 166297, 217870 165604, 217937 165075, 218096 164236, 218163 163806, 218338 162981, 218439 162273, 218624 161575, 218833 160879, 218765 160110) (236086 168476, 236223 169027, 236253 168386, 236305 168094, 236154 167736) (236264 166544, 236291 167308, 236367 167670, 236429 166934, 236298 166513, 236294 166388) (223076 162100, 223021 162782, 223037 163429, 223197 164063, 223257 164516, 223436 164774, 223415 166053, 223502 166137, 223517 166305, 223539 166070, 223464 163658, 223421 163480, 223440 163398, 223336 162171, 223262 161484) (232541 165988, 232596 166130, 232622 166057, 232564 165363) (220949 164694, 220789 164670, 220612 164790, 220521 165025, 220539 165374, 220937 165327, 221176 165443, 221356 165234, 221330 164566) (226865 164644, 226900 164841, 226953 164611, 226930 163888) (187346 162874, 187285 163687, 187311 163860, 187404 163878, 187417 163694, 187544 163114, 187474 162776) (230212 158456, 230241 158757, 230346 159318, 230338 159844, 230372 160030, 230438 160750, 230636 161195, 230681 161668, 230750 161914, 230710 162529, 230738 162738, 230789 163301, 230865 163423, 230889 163195, 230823 163077, 230900 162525, 230781 161858, 230771 161283, 230721 160870, 230547 160522, 230606 160310, 230481 159816, 230414 158991, 230414 158446, 230348 157875, 230114 157761) (228120 161635, 228100 161942, 228153 162740, 228201 162848, 228270 162606, 228271 162450, 228319 161932, 228233 161435) (223104 155174, 223034 155481, 222955 155977, 222908 156554, 222903 156791, 222756 157603, 222817 158173, 222864 158406, 222806 158803, 222702 159970, 222766 160712, 222894 161423, 222914 161681, 222986 161888, 223247 161352, 223199 160674, 223104 159936, 222996 159541, 223093 158709, 223108 158408, 223166 157909, 223248 157615, 223225 157050, 223177 156808, 223227 155977, 223187 155358, 223251 154814, 223143 154483) (186137 161181, 186185 161489, 186265 161271, 186212 160434, 186203 160400) (219212 148112, 219056 148171, 219158 148838, 219252 149594, 219421 150333, 219451 150537, 219614 151079, 219667 151837, 219962 152602, 220111 153272, 220143 153369, 220155 153990, 220109 154725, 220126 154915, 220007 155462, 219990 155682, 219883 155920, 219612 157178, 219603 157715, 219429 157685, 219231 158673, 219016 159400, 218965 159988, 218786 160102, 218911 160536, 219005 160168, 219056 159628, 219260 159303, 219659 157982, 219843 157218, 219855 156857, 220004 156550, 220213 155712, 220540 154609, 220637 154132, 220606 153351, 220490 152509, 220318 151816, 220131 150250, 220117 149806, 219986 149559, 219808 149909, 219697 149816, 219614 149818, 219496 150119, 219509 149546, 219295 148816, 219280 148517, 219352 147926) (196058 158301, 196022 158995, 196055 159659, 196253 160095, 196326 159612, 196509 158900, 196426 158246, 196273 157655) (228030 157793, 227963 158221, 227995 158497, 227984 159128, 227992 159503, 228091 158663, 228085 158498, 228116 157879, 228101 157687) (193677 158129, 193789 158467, 193915 158060, 193705 157826) (200929 156442, 200968 157300, 200986 158241, 201019 158442, 201037 158139, 201020 157423, 201055 156501, 200971 156105) (177708 156818, 177792 157399, 177839 158097, 177874 158333, 177971 157741, 177946 157403, 178087 156465) (195386 151562, 195343 152115, 195387 152268, 195499 152813, 195532 153308, 195663 154129, 195671 154648, 195722 155010, 195781 155665, 195880 156264, 196004 156014, 195902 156399, 195979 156975, 196042 157905, 196157 157620, 196246 157505, 196136 156956, 196173 156285, 196209 156006, 196191 155619, 196066 155206, 196130 154957, 196085 154499, 196007 154348, 195735 154968, 195952 154295, 195905 153904, 195973 153598, 196009 152885, 195905 152259, 195860 152303, 195889 152185, 195712 151694, 195558 151952, 195677 151509, 195568 150836) (229914 156253, 230112 157752, 230305 157636, 230283 157048, 230314 156980, 230190 156078, 230207 155189, 229881 154868) (221501 156486, 221473 156776, 221533 157258, 221633 156637, 221573 156277) (213110 156703, 213168 157031, 213154 156629, 213098 156060, 213104 155937, 213022 155323) (193971 153598, 193901 153875, 193909 154041, 193898 154576, 193909 155438, 194030 155754, 194108 155741, 194081 155931, 194319 156763, 194456 156542, 194501 155854, 194475 155364, 194421 155188, 194274 154511, 194115 153850, 194133 153465) (218434 155483, 218444 155599, 218351 156207, 218353 156510, 218397 156333, 218487 155433) (228164 155664, 228272 155927, 228389 155674, 228365 155114, 228144 155044) (190963 154745, 190977 154955, 191154 155612, 191153 154950, 191125 154659, 191017 154600) (184597 154183, 184649 154817, 184733 155088, 184763 154938, 184676 154051, 184598 153689) (192213 153409, 192307 154141, 192561 154792, 192624 154390, 192560 153772, 192436 153133, 192282 152921) (228154 154701, 228263 154148, 228431 153416, 228296 153280) (218220 153687, 218304 154615, 218424 154134, 218369 153474) (223373 152823, 223288 153557, 223168 154280, 223381 154023, 223432 153565, 223615 152702) (218111 152662, 218167 153135, 218269 152674, 218273 152443, 218206 152352) (204852 149584, 204828 150158, 204792 150655, 204774 151383, 204817 151740, 204799 151992, 204882 152395, 204987 150616, 204937 149875, 204959 149705, 204879 149236) (191697 151159, 191764 151476, 191807 151160, 191734 150929) (197142 150685, 197357 151127, 197295 150551) (194175 147495, 194379 148265, 194486 148948, 194589 149698, 194628 150295, 194656 150463, 194678 150289, 194906 149978, 195050 149985, 195158 149890, 195272 150176, 195332 150974, 195511 150834, 195372 150787, 195465 150139, 195444 149915, 195270 149470, 194921 147859, 194646 147410, 194613 147224) (212526 145417, 212571 146128, 212608 147073, 212644 147679, 212664 148225, 212692 148634, 212714 149494, 212881 150757, 212848 149731, 212864 149196, 212797 148564, 212744 146917, 212719 146481, 212709 145928, 212683 145245, 212645 144610, 212548 144488) (201959 148238, 201992 148884, 202045 149539, 202038 149687, 202093 149797, 202148 149544, 202135 149405, 202146 148890, 202111 148101, 202040 147922) (222829 148562, 222880 149026, 222953 148750, 222946 147929, 222849 147832) (204982 147994, 205001 148370, 204927 148890, 205114 148848, 205171 148118, 205145 147716, 205045 147259) (196470 147739, 196661 147870, 196600 147355, 196517 146912, 196292 146736) (205188 146384, 205271 146845, 205310 146191, 205229 145880) (196238 146293, 196287 146689, 196369 146225) (192471 134099, 192609 134100, 192605 133602, 192463 133570)), ((232817 218826, 233139 219181, 233371 219924, 233416 220288, 233455 222188, 233456 225888, 233502 227922, 233535 228825, 233520 233026, 233428 233816, 233046 234687, 233131 235107, 233475 235496, 233552 235786, 233549 237992, 233501 242055, 233437 242926, 233389 244145, 233298 245783, 233276 246329, 233283 247071, 233345 247679, 233451 248346, 233518 249069, 233535 250867, 233395 251242, 233273 251074, 233042 251250, 232937 251060, 232647 251116, 232249 251009, 232054 250893, 231996 250937, 231693 250809, 231593 250502, 231410 250251, 231339 249977, 231320 249556, 231122 248714, 231031 248215, 230936 247996, 230779 248503, 230821 249002, 230808 249195, 230957 249907, 230956 250481, 231411 251029, 231886 251268, 232314 251606, 232706 251763, 233163 252081, 233170 251960, 233322 251816, 233360 252215, 233395 252991, 233347 253727, 233311 254887, 233345 256308, 233446 258234, 233437 258520, 233452 259029, 233296 259250, 233197 259486, 232848 259009, 233004 258275, 232957 257933, 232604 258279, 233074 259783, 233208 260525, 233435 261285, 233589 262069, 233667 264259, 233676 264803, 233628 266354, 233593 268692, 233595 269622, 233560 271792, 233506 272493, 233039 272885, 232826 273129, 233270 274506, 233410 275178, 229905 275178, 229821 274224, 229865 273956, 229817 273447, 229724 273659, 229575 274158, 229486 274661, 229468 275178, 227934 275179, 227853 274481, 227814 273920, 227866 273247, 227956 272498, 228056 272166, 228228 271178, 228542 268132, 228575 267889, 228603 267135, 228585 266954, 228681 265721, 228696 265097, 228688 264413, 228713 263710, 228703 262828, 228668 262243, 228701 261471, 228514 260883, 228318 260758, 228241 260751, 227873 260275, 227871 260872, 228010 261395, 228131 261924, 228264 262287, 228318 262646, 228301 263010, 228364 263354, 228359 263716, 228430 264410, 228409 265781, 228327 266721, 228279 267137, 228284 268482, 228212 268993, 228255 269494, 228152 269535, 227976 270480, 227783 271144, 227679 271877, 227606 272181, 227543 272738, 227456 273897, 227385 274300, 227329 274036, 226907 274485, 226839 274473, 226738 274668, 227002 275179, 225500 275178, 225519 274434, 225535 273132, 225587 273084, 225654 273140, 225810 273451, 225928 273303, 226094 273400, 226190 273374, 226317 273208, 226058 272518, 225759 271853, 225517 271187, 225514 270509, 225619 269863, 225701 269181, 225730 267969, 225714 267185, 225648 265978, 225626 264736, 225569 263776, 225501 263269, 225445 262699, 225410 261740, 225376 258908, 225450 258807, 225493 258805, 226059 258351, 226108 258264, 225505 257579, 225348 256863, 225345 255899, 225401 255018, 225462 253677, 225456 253404, 225466 252880, 225387 250932, 225364 249687, 225405 248567, 225402 247755, 225412 247300, 225413 246017, 225548 244959, 225622 244532, 225668 243034, 225706 242324, 225674 241601, 225574 240421, 225539 239714, 225526 237480, 225540 235601, 225569 234484, 225586 231076, 225630 230187, 225648 229191, 225632 228370, 225524 227709, 225577 226444, 225587 225603, 225618 224573, 225583 222646, 225665 219987, 225757 219288, 226080 218851, 226338 218814, 226596 218886, 226731 219534, 226769 219987, 226828 220115, 226867 220117, 227008 221389, 227036 222057, 227178 223189, 227268 224203, 227393 224129, 227338 224409, 227416 224736, 227416 225032, 227486 225420, 227618 225645, 227568 225952, 227626 226462, 227648 226960, 227730 226926, 227653 226925, 227750 226272, 227758 225592, 227571 224760, 227617 224380, 227419 222355, 227355 221360, 227303 220356, 227299 219544, 227327 219139, 227436 218922, 227731 218793, 228634 218752, 228978 218862, 229209 219079, 229505 220272, 229539 221000, 229679 221884, 229802 222080, 229842 222644, 229910 223111, 229890 223372, 230003 223455, 229909 221616, 229970 221015, 229903 220332, 229800 219512, 229896 219029, 230086 218874, 230383 218785, 230794 218801, 231003 218944, 231191 219186, 231357 220109, 231416 220665, 231392 220844, 231381 221588, 231410 222110, 231474 222708, 231517 223615, 231540 224468, 231852 225087, 231917 225719, 231948 226289, 232047 227671, 232064 228375, 232064 228772, 232085 229410, 232077 230183, 232042 230549, 232081 231193, 232272 230592, 232275 230416, 232399 229858, 232522 228610, 232531 227708, 232492 227022, 232412 226357, 232346 225701, 232236 225103, 232235 225045, 232082 223856, 232081 223700, 232029 222711, 231885 221734, 231862 221146, 231839 221024, 231789 220425, 231775 220094, 231724 219559, 231765 219010, 231900 218767, 232384 218732) (226451 273927, 226495 274125, 226569 274181, 226670 274074, 226708 274327, 226726 273878, 226529 273679) (230388 271245, 230180 271850, 230101 272572, 230010 272876, 230103 273021, 230171 272576, 230191 271929, 230419 271253, 230405 270628) (232522 272275, 232336 272421, 232321 272389, 232289 272458, 232538 272737, 232668 272451, 232616 272272) (231017 266466, 231052 266978, 231008 267125, 231003 267799, 230882 268419, 230908 268579, 230933 268510, 231264 269109, 231348 269545, 231496 269405, 231415 269817, 231521 270525, 231720 271473, 231875 271964, 232010 272176, 232139 272255, 232304 271767, 232134 271409, 231968 270657, 231856 270049, 231814 269742, 231699 269233, 231593 268565, 231405 267639, 231334 266950, 231204 266047) (230576 263565, 230632 263844, 230699 263777, 230583 263204) (228655 246251, 228464 246498, 228317 246904, 228197 247690, 228178 248473, 228338 249247, 228379 249660, 228510 250750, 228726 252137, 228864 252903, 228914 253079, 229096 254080, 229137 254216, 229230 254752, 229316 255069, 229290 255365, 229321 255892, 229372 256413, 229574 257719, 229656 258372, 229741 259269, 229855 259977, 230032 260718, 230205 261962, 230181 261464, 230138 260907, 230128 260370, 230077 259750, 230174 258402, 229971 257332, 229802 256214, 229687 255789, 229538 255085, 229416 254246, 229348 253906, 229202 252902, 229179 252673, 229077 251925, 229000 251441, 228911 250705, 228701 248477, 228661 247706, 228743 246585, 228697 246247) (227542 260216, 227714 260569, 227770 260149, 227523 259902) (227034 259737, 227239 259578, 226970 259439, 226737 259018) (226468 258972, 226589 259109, 226640 259118, 226709 258972, 226291 258493) (226809 252179, 226885 252960, 227096 254419, 227113 254758, 227234 255526, 227248 255865, 227487 256365, 227493 255991, 227365 255303, 227181 253943, 226961 252178, 226798 251410) (228511 236117, 228364 236482, 228176 237761, 228165 238185, 228067 238876, 227944 239248, 227836 239818, 227736 240476, 227626 240945, 227617 241359, 227494 241219, 227363 241435, 227069 242288, 226919 243022, 226924 243596, 226945 243781, 226876 244299, 226832 244534, 226757 246063, 226723 247423, 226651 248412, 226733 249175, 226744 249467, 226858 250332, 226857 250685, 227027 251188, 227032 250686, 226988 249936, 226929 249476, 226935 248418, 227001 247913, 227129 245992, 227160 245117, 227193 244556, 227207 243794, 227233 243654, 227286 243052, 227438 242449, 227449 242346, 227709 241664, 228055 240997, 228076 240831, 228487 238703, 228462 238398, 228268 238578, 228329 238200, 228229 238112, 228469 237100, 228571 236213, 228732 235220) (230238 246301, 230302 246602, 230324 247076, 230371 247190, 230418 247084, 230391 247006, 230441 246325, 230451 245912) (228722 245362, 228718 245885, 228825 245370, 228806 244950) (230646 245563, 230741 245734, 230764 245708, 230839 245159) (232467 244884, 232335 245097, 232408 245256, 232484 245235, 232708 245328, 232759 245082, 232654 244843, 232557 244821) (231631 243119, 231275 244124, 231139 244441, 231028 244850, 231143 245016, 231316 244661, 231392 244156, 231871 243726, 231955 243684, 232039 243531, 232000 243373, 231778 243064) (229219 243151, 229059 243886, 228909 244479, 229037 244950, 229185 244374, 229282 243907, 229446 243322, 229425 243203, 229366 242598) (232139 235723, 231865 235925, 231630 236627, 231625 236621, 231355 237212, 231310 237391, 231187 237571, 230217 239848, 229994 240505, 230007 240936, 229886 240766, 229583 241823, 229571 242113, 229413 242495, 229529 243046, 229661 242524, 229814 241849, 229833 241391, 230008 241321, 230122 240810, 230485 239936, 230529 239379, 230608 239578, 231359 237894, 231397 237664, 231471 237645, 231742 237021, 231870 236621, 232270 236104, 232558 235785, 232436 235590) (230293 234819, 230098 235541, 230014 236276, 230024 236744, 230140 236712, 230204 236082, 230293 235585, 230355 235309, 230426 234440) (228385 230190, 228509 230912, 228457 231660, 228509 232188, 228516 232738, 228550 233000, 228636 232999, 228571 233378, 228594 233968, 228577 234500, 228804 234624, 228863 233966, 228904 233849, 228973 233207, 228979 232431, 229065 231720, 228991 230904, 228995 230692, 228790 230172, 228815 230084, 228778 230150, 228738 229627, 228559 229543) (231749 231256, 231765 231988, 231594 231636, 231473 231973, 231432 232570, 231227 232570, 231179 232685, 231080 233233, 230845 233404, 230714 233922, 230588 234113, 230679 234367, 231120 233532, 231204 232801, 231419 232912, 231782 232046, 232035 231318, 231897 230841) (228192 229508, 228223 229756, 228293 229915, 228526 229469, 228299 229232) (227781 227569, 227853 228090, 227903 228205, 227900 228379, 228031 228963, 228065 229041, 228113 228838, 228167 228331, 228105 228003, 227912 227409, 227906 226944) (229352 227481, 229362 227548, 229375 227441, 229336 226899) (229482 225584, 229531 226170, 229345 226794, 229562 226265, 229547 225686, 229578 225594, 229515 225444) (229716 224385, 229730 224886, 229712 224990, 229768 225160, 229815 225000, 229798 224512, 229840 224395, 229743 224039)), ((243534 247038, 243728 247088, 243928 247574, 243972 248247, 244083 248768, 244150 249474, 244406 251339, 244507 251868, 244626 252391, 244691 253008, 244797 253629, 244943 254251, 245323 255509, 245507 256153, 245543 256829, 245573 257033, 245736 258848, 245706 259554, 245512 260760, 245373 261510, 245319 262049, 245209 262797, 245071 263295, 244884 264122, 244643 264859, 244613 264885, 244280 265497, 244062 266225, 244015 266557, 244016 266996, 243901 267835, 243868 269340, 243785 270130, 243781 270920, 243904 271715, 243935 272494, 243923 273235, 243975 274018, 244140 275179, 242720 275178, 242727 274009, 242706 273666, 242668 272475, 242675 269896, 242685 269105, 242713 268523, 242961 267758, 243011 267025, 243049 265554, 242938 264621, 242880 264289, 242798 263496, 242791 260424, 242826 259424, 242837 256983, 242888 255870, 242900 255074, 242877 254443, 242785 253822, 242829 253173, 242868 251382, 242835 249885, 242874 249446, 242953 247590, 243067 247248, 243244 247016, 243467 246980)), ((219205 273608, 219435 274056, 219485 274352, 219523 275179, 216079 275179, 216090 274536, 216146 274112, 216289 273858, 216694 273676, 217260 273641, 217782 273636, 218098 273798, 218243 273715, 218510 273685, 218711 273604)), ((221224 273778, 221474 273743, 221736 273614, 222292 273669, 222515 273776, 222598 274492, 222718 274665, 222662 275160, 222763 274613, 222975 273875, 223103 273782, 223863 273770, 224105 273975, 224196 274366, 224248 275179, 219540 275179, 219545 274352, 219580 273738, 219719 273635, 220015 273586, 220948 273567)), ((186759 229470, 187003 229341, 187705 229408, 187886 229956, 187924 229931, 188071 230030, 188199 229652, 188152 229507, 188223 229535, 188511 229460, 188875 229484, 189474 229752, 189556 230481, 189603 233084, 189607 233812, 189573 235252, 189576 236023, 189612 237273, 189694 241318, 189699 242606, 189668 243182, 189587 244233, 189541 245303, 189548 246294, 189535 248692, 189545 250615, 189498 252916, 189530 255852, 189547 256397, 189560 257485, 189555 258491, 189578 259584, 189576 260596, 189616 261494, 189685 262512, 189710 263957, 189774 266052, 189788 267626, 189777 268318, 189697 269740, 189576 270941, 189554 271637, 189587 272179, 189709 275179, 186479 275178, 186448 274612, 186414 273373, 186388 272937, 186378 272384, 186352 271700, 186305 270854, 186264 270507, 186182 270998, 186209 271320, 186194 271869, 186240 272584, 186278 273528, 186314 274135, 186359 275178, 184126 275179, 184070 274230, 184055 273650, 183997 273381, 184066 272911, 184064 272378, 184038 271875, 184080 271023, 184182 270347, 184151 269626, 184007 268961, 183693 268627, 183669 268915, 183538 269627, 183577 270331, 183765 271299, 183744 272954, 183768 273653, 183807 273904, 183820 274751, 183853 275179, 181348 275178, 181388 274821, 181497 274319, 181702 273570, 181784 272960, 181772 272282, 181772 270999, 181651 270321, 181402 269648, 181322 268954, 181316 268195, 181328 266698, 181387 263251, 181384 262483, 181329 261546, 181309 261013, 181322 260134, 181319 258948, 181286 257600, 181281 255959, 181291 254939, 181340 252286, 181309 250470, 181325 247731, 181355 246041, 181398 245239, 181588 244218, 181600 243285, 181514 242401, 181463 241601, 181419 240601, 181386 239424, 181389 238835, 181319 237202, 181361 235525, 181376 235301, 181369 234753, 181377 234601, 181348 233917, 181304 233342, 181349 230410, 181369 229731, 181593 229518, 181964 229391, 183081 229359, 183329 229452, 183539 229478, 183889 229355, 184372 229339, 184933 229403, 185284 229319, 186249 229313) (186061 268122, 186061 268817, 186106 268234, 186111 267884) (183755 267542, 183878 268023, 183819 267456, 183773 267390) (185993 264715, 186014 264930, 185937 265438, 185948 265797, 185951 266521, 186035 266137, 186018 266015, 186113 265421, 186148 264704, 186184 264491, 186139 264173) (185923 262511, 185925 263176, 186029 262699, 185978 262343)), ((238842 264205, 239031 264578, 239288 264231, 239497 264187, 240082 264288, 240254 264523, 240356 265714, 240400 265276, 240490 265013, 240572 265024, 240649 264965, 240737 264542, 240847 264403, 241445 264368, 241689 264472, 241836 264686, 241928 265219, 241966 266371, 242011 269933, 242015 271093, 241985 272862, 241977 274109, 241996 275179, 233818 275179, 233857 272843, 233846 271805, 233794 270824, 233765 269892, 233797 267565, 233798 266394, 233826 264831, 233883 264684, 234181 264376, 234483 264251, 235508 264202, 235741 264355, 235922 264402, 236318 264189, 236849 264162, 237005 264209, 237141 264388, 237130 264435, 237182 265012, 237153 266235, 237241 266583, 237206 266754, 237254 266661, 237259 265988, 237240 265592, 237296 264422, 237384 264273, 237552 264158, 238579 264135) (239951 274986, 240034 274958, 240041 274731, 239984 274504) (240039 273025, 240025 273326, 240137 273813, 240142 273337, 240190 272832) (237089 268690, 237093 270943, 237115 272093, 237135 272499, 237111 273209, 237138 273477, 237256 273609, 237265 272203, 237313 271866, 237324 271145, 237291 269924, 237274 269708, 237265 268925, 237242 268372, 237181 267827, 237186 267593, 237114 267195) (240112 272144, 240194 272351, 240183 271984, 240137 271853)), ((224447 183282, 224550 184231, 224586 186140, 224582 187233, 224602 188770, 224600 189673, 224638 191102, 224678 194053, 224665 195018, 224646 195492, 224702 199777, 224690 200709, 224627 201380, 224573 202108, 224561 202831, 224561 204184, 224541 205337, 224539 206018, 224466 207994, 224472 209041, 224584 210794, 224583 211790, 224333 213790, 224298 214546, 224291 216029, 224355 217381, 224391 219130, 224434 220129, 224503 220751, 224555 221338, 224593 222485, 224609 224755, 224635 225855, 224663 228667, 224652 229796, 224569 231563, 224543 232473, 224558 233421, 224612 234970, 224611 235659, 224622 236106, 224611 237860, 224600 238177, 224604 238709, 224595 239177, 224594 240598, 224574 241157, 224327 242499, 224314 243379, 224275 244317, 224277 244673, 224248 245429, 224295 246103, 224350 246679, 224372 247029, 224450 247840, 224473 248571, 224486 250859, 224478 252935, 224446 254211, 224429 256271, 224430 258269, 224383 259372, 224366 260651, 224376 261481, 224486 262201, 224470 262917, 224441 263643, 224422 265046, 224395 265865, 224431 268094, 224410 268862, 224374 269624, 224323 271783, 224147 272412, 223970 272565, 223148 272604, 222848 272234, 222350 272406, 222044 272370, 221731 272554, 221361 272617, 220686 272589, 220552 272530, 220351 272282, 220189 272391, 219628 272669, 218880 272651, 218609 272478, 218584 272049, 218610 271507, 218570 271310, 218539 270793, 218384 271287, 218189 271750, 217954 272537, 217516 272545, 217084 272427, 216830 271939, 216613 271147, 216565 268553, 216558 264186, 216522 262228, 216486 261099, 216477 260491, 216493 257562, 216503 257117, 216499 256031, 216472 253963, 216486 251430, 216464 249965, 216516 245719, 216586 244422, 216654 242519, 216743 240815, 216752 240116, 216723 239502, 216661 238873, 216568 238219, 216524 237584, 216490 236230, 216506 235135, 216568 233863, 216651 232616, 216687 231722, 216707 230869, 216701 229923, 216679 229135, 216531 225559, 216331 219356, 216374 217420, 216408 214498, 216409 213576, 216427 212681, 216454 210147, 216605 209413, 216714 208774, 216729 208105, 216679 207420, 216546 206738, 216514 206144, 216492 205236, 216466 204618, 216463 203492, 216426 202227, 216430 201491, 216465 200211, 216520 197089, 216634 194859, 216636 194149, 216507 192973, 216453 192264, 216456 190971, 216443 190252, 216488 186887, 216507 184549, 216543 184025, 216615 183617, 216971 183471, 217830 183442, 219051 183340, 219314 183418, 219459 183886, 219487 184467, 219442 185849, 219410 187433, 219382 187999, 219367 188611, 219390 188863, 219284 189428, 219203 190396, 219174 191021, 219319 191652, 219356 191025, 219331 190622, 219458 189873, 219412 189792, 219488 189706, 219576 188603, 219571 188408, 219669 188060, 219768 187204, 219942 185532, 219983 184466, 219930 183976, 219962 183478, 220082 183209, 220292 183151, 221175 183144, 221267 183262, 221380 183688, 221332 183877, 221359 184134, 221485 184092, 221329 184479, 221303 185014, 221321 185341, 221246 185564, 221236 185815, 221355 185766, 221214 186121, 221097 187364, 221059 187981, 221057 188307, 221009 188807, 220895 189404, 220815 190144, 220750 191391, 220740 192209, 220778 195101, 220949 196160, 220956 196402, 221026 197159, 221033 197692, 221110 198562, 221163 198774, 221140 198845, 221220 199434, 221348 200987, 221411 201257, 221566 201406, 221504 201601, 221601 202069, 221581 202313, 221611 203094, 221744 204087, 221750 204272, 221815 204912, 221875 204073, 221881 203400, 221835 202777, 221653 201372, 221626 200756, 221565 200147, 221440 199675, 221438 199420, 221364 198766, 221369 198261, 221310 197173, 221206 197061, 221220 195958, 221141 194961, 221122 194825, 221100 194168, 221079 192852, 221070 190963, 221162 189736, 221171 189147, 221164 188859, 221180 188304, 221304 187820, 221413 186984, 221422 186472, 221527 185273, 221504 185228, 221537 185165, 221600 184499, 221642 183187, 221868 183031, 222621 182969, 222896 183411, 223205 183100, 223623 182886, 224146 182886) (221579 271452, 221677 271624, 221791 271589, 221676 271035, 221598 270763) (218301 267048, 218320 267226, 218239 267686, 218228 268304, 218275 269127, 218442 268452, 218452 268292, 218554 267794, 218601 266861, 218502 266661) (222871 266324, 222708 267065, 222680 267782, 222880 268273, 222951 267758, 222782 267285, 222876 267147, 222924 266966, 222905 266309) (221401 262111, 221440 263168, 221492 264009, 221553 264201, 221594 263782, 221578 263025, 221515 262262, 221418 261760) (223248 259991, 223192 260544, 223336 260606, 223354 259998, 223259 259490) (223354 258416, 223427 259152, 223375 258378) (220045 253121, 220169 253585, 220165 253125, 220020 252587) (218447 244665, 218498 244992, 218554 244391, 218442 244221) (218581 243353, 218488 243838, 218620 243690, 218639 243444, 218549 242983) (221494 242384, 221525 242967, 221576 243399, 221606 243109, 221558 242496, 221488 242053) (218647 241972, 218647 242211, 218709 242491, 218759 241863) (218661 241275, 218784 241414, 218797 240995, 218702 240782) (218844 238922, 218842 239048, 218741 239701, 218854 240368, 218756 239732, 218882 239251, 218892 238832) (222535 230596, 222651 231465, 222673 230706, 222568 230176) (219891 221588, 219824 222165, 219831 222537, 219905 222767, 219967 223238, 220069 222526, 220022 222241, 220006 221740, 219954 221128, 219887 220566) (217920 215876, 217954 216771, 218169 216804, 218156 217736, 218237 218085, 218305 218874, 218355 218808, 218396 218375, 218333 218080, 218292 217494, 218262 217290, 218215 216522, 217981 216554, 217957 215920, 217928 215828) (220148 212201, 220146 212837, 220208 212441, 220234 211647) (221676 207556, 221593 208146, 221584 208840, 221630 209360, 221752 209538, 221731 210072, 221753 211026, 221789 211564, 221846 210636, 221969 208162, 221955 207470, 221910 207167) (223382 206906, 223445 207583, 223418 206839, 223380 206415) (217876 206674, 217887 206958, 217906 206790, 217899 206047) (217700 203481, 217666 204005, 217697 204636, 217775 204393, 217753 204127, 217762 203627, 217741 203195) (218966 201405, 218984 202172, 219048 202451, 219012 202834, 219063 203166, 219177 202826, 219234 202158, 219187 201799, 219024 201502, 219045 200889) (218852 198320, 218858 199204, 218891 200056, 219085 199208, 219019 198112) (218879 196159, 218803 196403, 218811 197084, 218831 197750, 218895 197490, 218874 197385, 218961 196821, 218977 196029, 218887 195908) (219100 191706, 219047 192287, 219023 192916, 218959 193569, 218971 194193, 218951 194539, 219045 194532, 219223 194217, 219286 193573, 219165 192923, 219164 192286, 219314 191674)), ((238343 189074, 238466 189951, 238541 189602, 238613 189493, 238645 189311, 238794 189391, 239047 188956, 239074 188676, 239423 188828, 239546 188950, 239750 189388, 239803 189758, 239767 190009, 239782 191249, 239710 191843, 239742 192441, 239723 193700, 239974 194816, 240044 195031, 240147 195546, 240242 195710, 240447 196382, 240504 196527, 240652 197054, 240686 197287, 240889 197730, 240974 198611, 241107 199123, 241073 199371, 241136 199823, 241106 200524, 241183 201703, 241255 201911, 241271 202166, 241222 202618, 241128 204066, 241045 205657, 240961 206288, 240589 208316, 240467 209198, 240312 209647, 240069 210479, 240062 210743, 239680 211869, 239256 213328, 239121 213885, 238955 214403, 238854 214909, 238649 215754, 238499 216236, 238370 216732, 238274 217295, 238325 218051, 238453 218891, 238611 219601, 238806 221174, 238815 222674, 238869 222780, 238905 222760, 238853 221963, 239061 221662, 239142 221664, 239370 221558, 239385 221871, 239529 222317, 239665 222596, 239619 222820, 239635 223341, 239596 224068, 239628 224771, 239727 225452, 239774 226138, 239897 226768, 239890 226818, 239907 227507, 239945 228187, 240037 228864, 240042 228961, 240130 229456, 240131 229573, 240230 230959, 240251 231684, 240239 232431, 240265 233174, 240469 233887, 240808 234681, 240962 234927, 241100 235036, 241178 234559, 240855 233840, 240653 233116, 240818 232362, 240756 231638, 240483 230936, 240483 230707, 240393 229747, 240486 228828, 240475 228728, 240472 228132, 240361 227431, 240251 226855, 240260 226793, 240246 226029, 240318 225458, 240252 224699, 240111 224001, 239940 223418, 239741 221825, 239598 221203, 239589 221071, 239508 220570, 239397 220322, 239370 219606, 239095 218908, 238951 218216, 238871 218027, 238863 217305, 238898 216514, 239024 215712, 239032 215506, 239114 215386, 239265 214624, 239396 214130, 239408 213996, 239780 212643, 239914 212107, 239929 211922, 240012 211769, 240202 211235, 240472 210557, 240714 209875, 240820 209163, 241093 208411, 241299 207799, 241416 207071, 241454 206940, 241562 206309, 241567 205790, 241599 204818, 241570 204094, 241591 203532, 241549 202618, 241389 201907, 241440 201704, 241461 201204, 241390 200508, 241333 200139, 241261 199255, 241190 198524, 241113 198413, 241166 198342, 241064 197706, 241083 197452, 241034 197000, 240765 195656, 240585 194949, 240469 194319, 240329 193050, 240303 192285, 240291 191408, 240329 190524, 240440 189673, 240692 189167, 241035 188977, 241165 188990, 241466 189159, 241919 189372, 241927 189425, 242107 189544, 242166 189839, 242219 190574, 242260 193582, 242220 196581, 242263 198318, 242349 203539, 242361 205152, 242306 206488, 242251 207307, 242211 207755, 242175 208744, 242169 209889, 242176 211654, 242160 213534, 242176 216292, 242132 218077, 242085 218699, 242105 219587, 242110 221679, 241993 222464, 241946 222538, 241924 222462, 241620 222140, 241356 222442, 241463 222779, 241603 223055, 241936 223864, 242097 224582, 242130 225301, 242135 225920, 242120 226887, 242136 227340, 242096 228115, 242091 228860, 242144 230395, 242184 231981, 242283 234070, 242297 234594, 242206 235307, 241952 235986, 242136 236674, 242281 237408, 242277 237847, 242302 239597, 242266 241099, 242183 242292, 242164 243079, 242190 243842, 242231 244484, 242285 246326, 242352 248044, 242356 249246, 242317 249939, 242300 250644, 242291 252041, 242350 254884, 242347 255935, 242261 259208, 242141 260772, 242087 262831, 242022 263442, 241963 263614, 241691 263748, 241304 263770, 241260 263720, 241007 263670, 240762 262918, 240688 262185, 240679 261955, 240620 261823, 240542 260977, 240417 260160, 240429 260017, 240372 259463, 240241 258383, 240116 257068, 239992 256314, 239824 255078, 239768 254380, 239655 253672, 239502 252946, 239415 251429, 239443 251175, 239537 250000, 239680 248866, 239774 248252, 240064 246754, 240020 246522, 240084 246654, 240239 245997, 240318 245234, 240482 244703, 240527 244496, 240726 243772, 240732 243678, 240833 243049, 240789 242535, 240792 242329, 240719 242095, 240679 242217, 240625 242790, 240550 243028, 240310 243290, 240227 243721, 240286 244023, 240239 244463, 240166 244579, 240043 245198, 239836 245937, 239711 246705, 239746 247201, 239609 246970, 239508 247049, 239375 248117, 239383 248263, 239320 248369, 239115 249194, 239001 248246, 238908 247708, 238953 247232, 238961 246669, 238985 246421, 239019 245721, 239137 243961, 239182 242980, 239442 241678, 239476 240987, 239531 239192, 239535 238642, 239570 238158, 239446 237173, 239215 235484, 239176 234866, 238828 233217, 238629 232674, 238413 231982, 238225 231428, 237949 230810, 237870 231367, 237951 231862, 238238 232738, 238237 232822, 238305 233443, 238364 234147, 238486 234863, 238640 235447, 238761 236166, 238846 236819, 238892 237562, 238850 238192, 238971 238925, 239025 239170, 239061 239838, 238986 241568, 238937 242014, 238870 242815, 238767 244690, 238684 245975, 238608 247781, 238519 248276, 238502 249076, 238525 249851, 238629 250654, 239073 253179, 239171 253674, 239356 254378, 239509 255348, 239682 256303, 239682 256420, 239781 257305, 239802 257577, 239908 258471, 239975 258916, 240060 259767, 240072 260070, 240188 260790, 240332 262146, 240387 263258, 240336 263386, 240039 263760, 239860 263772, 239265 263643, 239241 262821, 239208 262648, 239083 261652, 238621 259224, 238256 257179, 238231 256993, 237988 255951, 237805 255011, 237614 254279, 237251 253547, 237065 252835, 236933 251926, 236830 251346, 236734 250572, 236723 249668, 236758 248330, 236855 247633, 236792 246570, 236740 245897, 236624 241292, 236577 240327, 236600 239805, 236627 239686, 236716 238760, 236702 238342, 236617 237739, 236475 236970, 236460 236839, 236356 236263, 236286 235725, 236326 235113, 236148 234799, 235820 234077, 235582 233219, 235479 232408, 235520 230968, 235484 230196, 235510 229820, 235460 229420, 235400 228643, 235479 227943, 235461 227347, 235471 227082, 235346 226735, 235276 226779, 235167 227039, 235163 227668, 235180 227868, 235182 228648, 235134 229426, 235076 229804, 235164 230572, 235028 230745, 235109 231770, 235018 232533, 235401 233237, 235459 233937, 235404 234531, 235069 233961, 234723 233171, 234400 232559, 234250 231839, 234232 230792, 234198 229856, 234181 227180, 234193 225615, 234171 225243, 234162 224313, 234147 224039, 234180 221495, 234379 220757, 234802 220123, 234983 219747, 235171 219528, 235356 219129, 235619 218639, 235742 217885, 235722 217610, 235831 217309, 235903 216323, 236055 215526, 236096 214985, 236133 214717, 236195 214065, 236227 213910, 236204 213692, 236176 213113, 236219 212329, 236311 211552, 236281 210794, 236151 210056, 236006 209465, 235946 209334, 235969 209208, 235991 208624, 236009 208509, 235995 207937, 235949 207551, 235818 207365, 235753 207444, 235780 207284, 235690 206929, 235694 206623, 235670 205673, 235617 204800, 235405 205220, 235402 205075, 235392 205251, 235441 205947, 235431 206112, 235452 206628, 235444 206868, 235481 207715, 235462 208249, 235540 208649, 235649 210076, 235812 211576, 235793 212347, 235657 213908, 235685 214506, 235642 215429, 235471 217868, 235519 218413, 235389 218183, 235315 218343, 235281 218619, 235187 219194, 235078 219117, 234858 219348, 234785 219854, 234721 219595, 234552 219687, 234223 219379, 234203 218779, 234209 218235, 234198 217128, 234206 216894, 234186 214805, 234199 213486, 234198 212325, 234207 211648, 234266 209342, 234354 208618, 234455 207962, 234510 207323, 234497 206593, 234388 205145, 234347 204230, 234311 203025, 234394 202314, 234409 201601, 234566 200894, 234862 200182, 235136 199476, 235290 199235, 235493 198758, 235503 197947, 235564 197188, 235594 196688, 235759 195934, 235918 195386, 236095 194694, 236298 194088, 236409 193551, 236468 193030, 236464 192850, 236560 192099, 236614 191279, 236582 190696, 236498 190197, 236455 189602, 236476 188896, 236527 188773, 236873 188592, 238132 188572) (240900 240252, 240969 240744, 240992 240253, 240950 239972) (241520 235027, 241285 235269, 241617 235624, 241769 235280, 241657 234982) (237279 229235, 237401 229619, 237637 229919, 237611 230403, 237752 230909, 237780 230640, 237654 229936, 237348 229022) (238179 225876, 238102 226234, 238120 226825, 238117 227685, 238157 228361, 238354 229240, 238507 229512, 238607 229992, 238674 230084, 238783 229732, 238742 229296, 238780 228311, 238647 227301, 238574 226928, 238487 226236, 238422 225928, 238489 225531, 238275 225271) (236384 225592, 236462 225985, 236458 226334, 236582 226826, 236602 227068, 236736 227566, 236858 227429, 236768 227058, 236836 226776, 236738 225966, 236723 225586, 236503 224927) (238493 224488, 238422 224821, 238520 225431, 238559 224823, 238719 224109, 238705 224038) (236045 222573, 235943 222839, 235941 223324, 236131 224095, 236194 224927, 236292 224850, 236222 224267, 236154 224096, 236291 223704, 236162 222717, 236142 222130) (240959 220227, 241188 220935, 241072 220064, 241032 220035) (240535 214767, 240447 215722, 240411 216476, 240424 217236, 240533 217769, 240643 217990, 240599 218166, 240824 219535, 240908 218741, 240835 217983, 240600 217035, 240615 215719, 240656 214977, 240634 214446) (236852 217712, 236725 218297, 236746 218799, 236758 218846, 236939 217702) (237578 212775, 237514 213156, 237517 213600, 237440 213973, 237341 214670, 237466 214805, 237456 214990, 237515 214855, 237675 213995, 237715 213679, 237796 213185, 237676 212609) (237984 210681, 237912 211600, 237839 211949, 237924 212134, 238181 211046, 238175 210874, 238046 210467) (238366 209385, 238272 209921, 238178 210120, 238257 210712, 238359 210159, 238381 209486, 238542 209077) (237656 200927, 237545 200973, 237285 201343, 236755 202641, 236720 203315, 236728 203978, 236716 204626, 236675 205208, 236577 205916, 236611 206182, 236740 206256, 236816 206421, 237059 206467, 237328 205881, 237085 205249, 236992 204625, 236982 204196, 237053 203998, 237141 203374, 237104 203076, 237174 202730, 237363 202110, 237657 201876, 238116 201740, 238179 201673, 238155 201753, 238562 202288, 238851 202825, 238995 203426, 239238 204036, 239304 204499, 239374 204692, 239344 205365, 239169 205939, 238988 206297, 238940 206705, 238875 206858, 238812 207360, 238783 207670, 238671 208063, 238562 208568, 238691 208756, 239018 208248, 239047 208230, 239313 207492, 239422 206798, 239756 205949, 240007 205437, 239979 204723, 239744 203362, 239613 203002, 239440 202706, 239212 202080, 239176 201409, 239064 201032, 238707 200491, 238594 200497, 238459 200367, 237831 200289) (238123 204104, 238329 205275, 238273 205912, 238015 206509, 237794 206376, 237700 206363, 237398 206516, 237377 206374, 237350 206541, 237761 206705, 238028 206609, 238334 206237, 238507 205942, 238398 205282, 238324 204102, 238174 203773) (238362 191738, 238144 191680, 238002 192028, 237973 192393, 237977 193015, 237930 193581, 237932 193658, 237844 194985, 237787 195553, 237776 195751, 237637 196768, 237427 197672, 236960 199011, 236496 200253, 236303 201098, 236196 201820, 236350 201218, 236411 201121, 236528 200667, 236621 200902, 236739 200747, 236914 200206, 237315 199390, 237430 199122, 237506 199057, 237662 198391, 237829 198164, 237902 197766, 238030 197217, 238250 196405, 238417 195740, 238531 194978, 238611 193732, 238574 192958, 238514 192403, 238411 191889, 238445 191249, 238431 190864)), ((234450 234457, 234980 235087, 235013 235067, 235417 235572, 235537 235674, 235765 236292, 235840 236935, 235913 237772, 236006 238386, 236063 239040, 236101 239706, 236120 239872, 236161 240578, 236234 242552, 236310 245043, 236308 245456, 236402 246188, 236368 246932, 236413 247684, 236426 248456, 236384 249655, 236322 250581, 236371 251307, 236501 252056, 236651 252800, 237214 255047, 237404 255666, 237654 257041, 238061 258853, 238359 260389, 238399 260660, 238546 261313, 238694 262037, 238755 262893, 238711 263384, 238623 263575, 238328 263743, 237416 263693, 236907 263631, 236745 263514, 236657 263377, 236512 261806, 236512 261601, 236238 259282, 236228 259124, 236080 258254, 236091 257824, 236021 257143, 236068 256445, 235973 255593, 235882 254304, 235870 253770, 235874 253548, 235733 252837, 235469 251848, 235112 251144, 235027 251002, 234518 250051, 234298 249355, 234218 248630, 234243 247856, 234332 247086, 234523 246264, 234670 245502, 234713 244736, 234701 243942, 234705 242584, 234637 241828, 234474 241189, 234291 240557, 234221 239969, 234190 239053, 234198 237815, 234188 237079, 234200 235539, 234241 234423, 234421 234310)), ((234699 252115, 235042 252659, 235132 252732, 235154 252689, 235443 253585, 235573 254291, 235586 254258, 235605 255049, 235484 255572, 235502 256537, 235604 257557, 235628 257895, 235804 259166, 235995 260094, 236000 260318, 236037 260874, 236070 261140, 236070 261699, 236218 262676, 236157 263318, 236050 263345, 235909 263450, 235590 263411, 235073 263302, 234599 263133, 234411 262951, 234482 259797, 234427 259070, 234357 257393, 234308 256474, 234309 255777, 234402 254403, 234407 253623, 234385 252908, 234428 252102, 234694 251969)), ((212440 161411, 212695 161715, 212968 161451, 213288 161437, 213687 161481, 213762 161557, 213985 162190, 214154 161762, 214444 161585, 215057 161587, 215443 161680, 215612 162197, 215664 163053, 215677 164716, 215704 166271, 215695 167747, 215661 169361, 215735 172914, 215805 177782, 215784 178881, 215700 180264, 215657 181141, 215642 181986, 215646 184473, 215628 186095, 215649 188704, 215595 191835, 215635 195825, 215646 196163, 215659 197615, 215653 198779, 215673 199975, 215671 200992, 215690 202183, 215771 203627, 215794 204455, 215810 205979, 215867 207776, 215880 208674, 215891 211173, 215784 213394, 215679 214490, 215650 215501, 215721 217192, 215741 218264, 215800 219676, 215813 221360, 215786 222596, 215771 223960, 215823 226624, 215819 227927, 215717 231715, 215642 232784, 215567 235278, 215512 235597, 215257 235788, 214940 235867, 214709 235657, 214712 235290, 214616 234833, 214425 234517, 214406 234841, 214420 235587, 214264 235823, 214080 235894, 213238 235899, 213109 235747, 213059 235249, 213020 235044, 213116 234818, 213171 233598, 212910 233213, 212908 233570, 213053 233822, 212878 233711, 212810 234280, 212906 234917, 212696 235789, 212448 235895, 211421 235864, 211005 235727, 210953 235676, 210826 235294, 210729 232555, 210692 232520, 210735 231063, 210650 230072, 210668 229274, 210643 228245, 210600 227702, 210539 227151, 210496 226539, 210472 225830, 210517 225452, 210515 224876, 210447 223841, 210343 222516, 210246 220602, 210208 219192, 210176 218361, 210156 215819, 210146 215442, 210175 214814, 210302 213689, 210283 213185, 210147 212584, 210060 211653, 209784 211565, 209773 212224, 209623 213193, 209638 213698, 209853 215052, 209850 217707, 209879 218985, 209976 221518, 210059 223109, 210082 224343, 210160 225372, 210261 226027, 210285 226635, 210288 227146, 210312 227498, 210315 228229, 210368 228750, 210377 229280, 210428 229721, 210406 229915, 210417 230514, 210408 230639, 210411 231342, 210437 232023, 210430 232777, 210378 232955, 210394 234232, 210421 234678, 210417 235345, 210324 235602, 210104 235684, 209793 235698, 209200 235614, 208295 235447, 207762 235262, 207538 235090, 207566 234057, 207602 231983, 207592 231454, 207544 230472, 207539 230101, 207459 228215, 207526 227284, 207588 226165, 207544 225077, 207473 224320, 207422 223319, 207405 221222, 207414 220620, 207470 219790, 207575 219098, 207670 218709, 207786 218152, 207865 217637, 207886 217135, 207866 215940, 207875 214846, 207831 214345, 207733 213837, 207571 213314, 207451 212734, 207418 211861, 207417 209814, 207487 204769, 207486 203965, 207418 202465, 207402 201902, 207432 200397, 207389 197813, 207394 197304, 207381 196974, 207377 196415, 207403 192751, 207437 191270, 207408 188057, 207422 185090, 207466 182056, 207645 180758, 207707 180234, 207699 179314, 207618 178259, 207545 176541, 207496 175108, 207483 173204, 207418 171732, 207468 169113, 207482 168798, 207469 167819, 207403 166529, 207427 164953, 207434 163576, 207467 162005, 207641 161687, 207894 161553, 208174 161476, 209149 161445, 209497 161594, 209774 161542, 209986 161431, 210544 161419, 210712 161464, 210847 161629, 210878 162280, 210906 161921, 211036 161499, 211230 161398, 212120 161382) (212912 233140, 213125 233207, 213039 232607, 212925 232540) (212806 228865, 212855 229397, 212968 229728, 212950 228843, 212811 228159, 212767 228030) (212747 225751, 212825 226366, 212765 225625, 212652 224658) (212550 222099, 212551 222374, 212645 222578, 212628 222208, 212570 221663, 212482 221328) (212261 214313, 212236 214855, 212368 217723, 212397 218735, 212496 219954, 212504 220320, 212571 220623, 212532 220903, 212644 220804, 212574 219703, 212553 219034, 212548 218233, 212491 216876, 212440 216129, 212423 215247, 212346 214252, 212315 213624) (212142 211547, 212145 211643, 212214 211075, 212195 210932) (212058 205702, 212067 205984, 211995 206315, 212012 207264, 212240 207285, 212049 207835, 212044 208551, 212138 208884, 212060 209057, 212086 209876, 212241 209402, 212266 208559, 212118 208215, 212242 207809, 212242 207283, 212182 206755, 212227 206591, 212220 206220, 212250 205491, 212222 205159) (211999 204427, 212018 205052, 212221 205149, 212139 204623, 212162 204273, 212124 203930) (209374 193203, 209357 193802, 209467 193918, 209510 193142) (213678 169320, 213752 169432, 213706 168918) (210828 164479, 210793 166386, 210909 167076, 210912 167278, 210978 167382, 210925 165323, 210884 164169, 210855 163677)), ((185297 167110, 185407 167451, 185338 167598, 185329 167852, 185381 168350, 185440 168634, 185651 168170, 185703 167967, 185970 167346, 185951 167256, 186126 167059, 186995 167057, 187112 167225, 187126 167396, 187297 167851, 187511 167580, 187718 167194, 187870 167100, 188330 167079, 188764 167155, 188994 167415, 189208 168124, 189259 170043, 189265 172829, 189303 174099, 189352 175290, 189338 177095, 189317 178365, 189324 178591, 189317 179552, 189335 180080, 189336 181778, 189365 182574, 189307 185446, 189234 186526, 189151 188026, 189098 188685, 189071 189372, 189129 190059, 189263 190768, 189309 191406, 189325 192154, 189286 193042, 189214 194103, 189187 194381, 189130 195334, 189118 196181, 189172 197770, 189250 199065, 189299 199563, 189498 203737, 189430 206912, 189389 209907, 189222 210588, 189108 211235, 189156 211949, 189317 212617, 189341 213367, 189375 214059, 189384 214777, 189416 215539, 189407 216229, 189356 217642, 189328 219067, 189215 220574, 189234 221297, 189335 221977, 189374 222713, 189388 223874, 189324 227914, 189109 228395, 188719 228449, 188023 228456, 186631 228549, 186472 228294, 186408 227996, 186415 227471, 186472 226226, 186490 224835, 186572 224305, 186831 221683, 186915 221369, 186945 220871, 186783 220779, 186532 221354, 186601 222053, 186534 222688, 186516 222971, 186301 224576, 186158 225468, 186101 225766, 185988 226490, 185888 227052, 185879 227574, 185884 228095, 185903 228345, 185800 228622, 185648 228661, 184705 228665, 184580 228544, 184505 228065, 184589 227785, 184592 227338, 184713 226475, 184776 225868, 184855 225273, 184967 224652, 185050 223973, 185108 223369, 185147 222391, 185115 221420, 185102 220614, 185028 219962, 184895 219037, 184863 218607, 184664 217295, 184543 216617, 184519 216385, 184402 215871, 184301 216015, 184314 215632, 184248 215280, 184263 214892, 184154 214176, 183924 214098, 183955 214899, 184062 215474, 184143 215982, 184290 217116, 184437 217790, 184485 218576, 184610 219345, 184622 219973, 184659 220157, 184721 220668, 184758 221351, 184776 222025, 184770 223359, 184705 224019, 184708 224132, 184682 224654, 184580 225282, 184460 225890, 184397 226657, 184348 226954, 184281 227490, 184203 228319, 184198 228589, 184131 228705, 183472 228795, 183168 228715, 183084 228646, 182878 228161, 182621 228725, 182522 228823, 181707 228851, 181435 228417, 181350 227690, 181327 226798, 181332 226001, 181306 225040, 181307 223943, 181234 221768, 181239 220209, 181254 220012, 181188 216954, 181248 216258, 181333 215500, 181336 214207, 181369 212866, 181422 212207, 181449 211242, 181418 210532, 181344 209805, 181330 209094, 181393 208494, 181534 207740, 181587 207109, 181606 206295, 181572 205427, 181536 204928, 181513 204025, 181460 203209, 181407 202874, 181346 202316, 181309 201374, 181297 200232, 181281 199875, 181240 197166, 181250 196634, 181339 195182, 181353 194246, 181298 192862, 181286 191907, 181303 190654, 181308 188838, 181532 188195, 181627 187585, 181656 186499, 181699 185835, 181613 185045, 181541 184647, 181431 183748, 181409 182317, 181416 180616, 181454 179562, 181469 177082, 181521 175854, 181525 174698, 181410 173973, 181453 173234, 181473 172197, 181501 171633, 181456 170072, 181527 169120, 181574 167732, 181674 167318, 182006 167041, 182733 167028, 182932 167135, 183128 167348, 183253 167247, 183784 167190, 184405 167022, 184888 167021) (182601 220573, 182601 220833, 182575 221391, 182589 221549, 182558 222068, 182557 222276, 182513 222984, 182619 223110, 182774 222721, 182727 221382, 182712 220690, 182653 220062) (186874 218523, 186899 218720, 186834 219235, 186874 219794, 187068 219231, 187034 218959, 187056 218340, 187039 217808) (186807 215685, 186788 216242, 186814 216403, 186714 217267, 186752 217528, 187037 217808, 186850 217109, 186886 216506, 186880 216399, 186968 215570, 186736 215251) (188015 213703, 188055 214135, 188100 215107, 188192 215141, 188177 214751, 188239 214003, 188173 213331, 188153 213301) (182346 211844, 182288 211830, 182377 212784, 182461 213044, 182533 212958, 182502 212708, 182479 212001, 182439 211663) (185267 212010, 185261 212745, 185405 212303, 185449 211755, 185350 211748) (187888 211959, 187918 212466, 187950 211958, 187923 211687) (184110 208365, 184085 209894, 183979 210471, 184007 210590, 183928 210733, 183874 211295, 183917 212207, 184178 212008, 184328 211284, 184328 210906, 184243 210539, 184282 209889, 184284 209201, 184240 208653, 184164 208194) (187824 206319, 187819 206833, 187922 206254, 187903 205990) (187613 204764, 187640 204905, 187597 205679, 187634 205715, 187779 205556, 187696 205446, 187760 204747, 187708 204580) (187325 203943, 187332 204158, 187409 204261, 187509 203922, 187510 203680, 187417 203655) (185723 201112, 185803 201361, 185782 202147, 185822 202381, 185871 203134, 185947 203520, 185999 203290, 185993 202138, 185999 201841, 185953 200921, 185896 200713) (183111 196097, 183111 196338, 183220 196571, 183346 196089, 183357 195861, 183244 195515) (187168 187332, 187096 188140, 187055 188812, 186932 189816, 186947 190690, 187033 190305, 186975 189832, 187148 189628, 187219 188881, 187258 188142, 187230 187867, 187370 187292) (184359 187722, 184404 188292, 184387 187689, 184349 187311) (187365 185986, 187363 186393, 187203 187147, 187394 187204, 187461 186611, 187503 185973, 187455 185491) (185911 183458, 185982 184152, 186008 184285, 186031 184115, 186101 183340, 186009 182935) (187495 180554, 187553 181290, 187625 180551, 187535 179884) (182489 175139, 182515 175803, 182391 176384, 182360 176383, 182395 176941, 182579 176594, 182646 175985, 182711 175237, 182687 174648) (184155 172903, 184186 173891, 184245 174426, 184331 174780, 184395 174585, 184412 173770, 184378 173140, 184238 172626) (187354 169144, 187305 169545, 187269 170271, 187255 170954, 187324 171368, 187399 171508, 187539 171257, 187533 171111, 187641 170750, 187724 169433, 187631 169027, 187644 168917, 187597 168883) (182772 170156, 182859 170644, 182923 171233, 183103 171365, 183165 170881, 183182 170371, 182928 170047) (184144 167291, 184024 167660, 184063 167803, 184162 168395, 184189 168798, 184297 169405, 184296 169102, 184244 168395, 184283 168102, 184311 167596, 184411 167274) (182898 167926, 182844 168051, 182954 168592, 183074 169096, 183100 169155, 183098 168673, 183052 167999, 183066 167740)), ((235459 188654, 235687 188917, 235822 189324, 236001 190191, 235918 191121, 235928 191635, 236013 192207, 235998 192273, 236012 192789, 235902 193397, 235786 193668, 235569 194393, 235505 194555, 235319 195235, 235090 196611, 235041 197310, 234999 197624, 235055 198027, 234832 198748, 234866 199199, 234741 199466, 234758 200007, 234621 199769, 234389 199579, 234325 199670, 234281 199476, 234248 198732, 234254 197148, 234286 195536, 234204 193095, 234226 191243, 234221 190495, 234237 189605, 234266 189452, 234274 188928, 234657 188619, 235149 188598)), ((190945 175323, 191056 175591, 191143 175634, 191279 175359, 191317 176094, 191367 176309, 191424 176930, 191362 177653, 191320 178375, 191372 178726, 191437 179275, 191479 179855, 191543 180389, 191708 180544, 191648 180897, 191717 181145, 191724 181439, 191798 181801, 191987 181569, 191896 181948, 191968 182137, 191889 182525, 191944 183472, 191990 183616, 192074 183655, 191952 184189, 191699 184362, 191201 184289, 190347 184111, 190098 183979, 190087 183430, 190096 183346, 190105 182806, 190150 181489, 190128 180812, 190090 180358, 190042 179446, 190034 179080, 189985 178259, 190101 176873, 190082 175434, 190129 175036, 190276 174786, 190571 175021, 190665 174877, 190781 174873, 190924 174583))) \ No newline at end of file +MULTIPOLYGON (((171025 202017, 171280 202159, 171529 202543, 171632 202842, 171761 203498, 171801 205287, 171805 208719, 171893 212263, 171858 216296, 171598 216999, 171059 218039, 171269 218249, 171365 218266, 171573 218175, 171637 218251, 171796 218245, 171885 218527, 171893 219256, 171884 220173, 171904 220480, 171856 224509, 171796 225316, 171758 226225, 171653 227973, 171619 229081, 171653 229663, 171736 230288, 171832 230862, 171865 231711, 171873 232834, 171765 233465, 171496 234122, 171646 234392, 171757 234829, 171711 235541, 171684 236138, 171667 236944, 171682 237999, 171808 240513, 171238 241098, 171466 241735, 171606 242337, 171592 242940, 171892 243549, 171953 244203, 172035 246354, 171966 249888, 171954 251669, 171919 253624, 171745 254130, 171486 254377, 171254 254841, 171681 256113, 171793 256804, 171797 257224, 171831 258137, 171831 259025, 171851 259154, 171911 259842, 171939 260520, 171891 261269, 171711 260758, 171184 261246, 171676 261979, 171883 262720, 171878 263638, 171860 264610, 171734 266990, 171809 267764, 171937 268854, 171900 272390, 171896 273615, 171869 275179, 169816 275179, 169623 273958, 169676 273162, 169695 273119, 169846 271721, 169857 271195, 169904 270102, 169987 269086, 170058 268446, 170042 267761, 169985 267244, 169944 267073, 169928 266365, 169951 266258, 169992 265635, 169794 265134, 169668 264918, 169516 264287, 169480 264191, 169123 262760, 169104 262045, 169019 261330, 168669 259727, 168594 258975, 168386 257785, 168339 257237, 168333 256983, 168232 256066, 168318 255965, 168414 255277, 168423 254956, 168596 254297, 168607 253847, 168658 253630, 168661 253039, 168927 252348, 169012 251659, 169105 251392, 169151 250974, 169288 250805, 169341 250501, 169517 250553, 169690 251125, 169848 251258, 169777 251688, 170011 252804, 170135 252689, 170076 253009, 170266 253633, 170451 253913, 170625 253963, 170769 254058, 170975 253604, 170953 253286, 170808 253236, 170740 253290, 170634 253191, 170479 253395, 170598 252953, 170556 252720, 170481 252621, 170361 252634, 170418 252290, 170322 251861, 170259 251797, 170279 251612, 170157 251015, 170132 250997, 170087 250490, 170014 250222, 169925 249706, 169837 249376, 169738 248390, 169642 247830, 169500 247734, 169433 247209, 169352 248087, 169390 248789, 169396 249468, 169208 250262, 168963 251125, 168933 251646, 168825 252058, 168910 252326, 168689 252617, 168557 253434, 168449 254030, 168443 254273, 168181 254931, 167989 255373, 167851 256282, 167814 256955, 167858 257589, 167953 258112, 168038 258721, 168167 259389, 168715 261704, 168833 262042, 168988 262763, 169016 263490, 169151 264214, 169223 264957, 169329 265677, 169497 266364, 169621 267102, 169734 268441, 169682 269118, 169581 270135, 169537 270462, 169517 271403, 169480 271940, 169418 272636, 169323 273417, 169366 274457, 169374 275178, 167667 275179, 167669 274079, 167615 273486, 167323 272501, 167263 272516, 167285 272378, 167212 271919, 167191 271159, 167116 270525, 167080 270024, 167060 269874, 167057 269359, 166991 269214, 167174 268953, 167740 267886, 167543 267443, 167406 267867, 167095 268529, 166880 269171, 166751 269333, 166538 269922, 166685 270575, 166714 271021, 166823 271983, 167068 273225, 167145 273338, 167235 273342, 167196 273599, 167197 274414, 167256 275179, 166021 275179, 165998 274676, 165794 273690, 165785 273693, 165600 272453, 165483 272316, 165522 272009, 165462 271761, 165398 271195, 165204 271298, 165328 270758, 165303 270241, 165438 269572, 165462 269382, 165682 268638, 165967 267928, 166115 267187, 166171 266446, 166171 265711, 166072 264999, 165820 264618, 165572 264565, 165165 264685, 165036 264797, 164831 264800, 164770 265097, 164946 265370, 165048 265442, 165328 265503, 165451 265570, 165553 265515, 165680 265828, 165873 266065, 165870 266795, 165767 267629, 165672 267945, 165665 268652, 165507 268197, 165390 268345, 165106 269393, 164929 270097, 164963 270596, 165036 271189, 165135 271417, 165267 272024, 165302 272372, 165391 272954, 165446 273136, 165436 273242, 165515 273765, 165448 274573, 165458 275179, 163897 275179, 163865 273669, 163870 273181, 163777 267335, 163810 265854, 163758 262865, 163766 261996, 163850 261220, 163891 260424, 163913 257927, 163961 256340, 163977 256087, 163981 255090, 164060 254796, 164340 255051, 164506 255038, 164566 254981, 164959 255732, 165027 255639, 165020 256018, 165163 256348, 165322 256517, 165761 257497, 165899 258118, 166009 258921, 166162 259777, 166360 260503, 166522 261324, 167038 263521, 167326 264634, 167452 265007, 167464 265193, 167584 265748, 167690 266453, 167660 266843, 167741 267882, 167817 267461, 167974 267362, 168048 267188, 168012 266457, 167889 265877, 167842 265851, 167852 265720, 167417 263803, 167343 263778, 167355 263552, 167231 262954, 167224 262826, 167087 262082, 166929 261344, 166821 260515, 166813 259777, 166762 259049, 166712 258874, 166576 258263, 166509 257701, 166457 257029, 166356 256292, 166292 256032, 166239 255487, 166294 254746, 166638 252925, 166946 250317, 167015 249611, 167068 248620, 167132 247060, 167152 245107, 167138 244341, 167139 243596, 167033 242886, 166949 242793, 166714 242712, 166508 242540, 166443 242365, 166006 241914, 165251 241071, 165305 241295, 165794 241882, 165770 242109, 166053 242541, 166461 243473, 166542 244100, 166586 244353, 166635 244998, 166725 245635, 166790 246313, 166874 246742, 166846 246989, 166826 247664, 166703 248275, 166626 248964, 166669 249609, 166643 250260, 166561 250640, 166447 251594, 166300 252233, 166132 252870, 166103 253113, 165935 254204, 165829 255507, 165803 255472, 165436 255796, 165282 255859, 165205 255744, 165142 255844, 165142 255426, 164841 254972, 164389 253862, 163975 252937, 163929 252303, 164042 251592, 164124 250996, 164163 250047, 164165 249088, 164090 247856, 164065 246588, 164035 245925, 163952 245197, 163873 244199, 163827 241047, 163925 240752, 164078 240822, 164369 240654, 164519 240654, 164644 240597, 164727 240633, 164749 240500, 163969 239656, 163801 238962, 163798 238036, 163906 235814, 163907 235050, 163861 233743, 163832 232576, 163844 230868, 163857 230357, 163860 228506, 163940 227851, 164103 227247, 164185 225268, 164175 225054, 164198 224517, 164078 223381, 163983 222226, 163970 220737, 163976 218464, 164012 217202, 164032 213775, 164075 212969, 164086 211848, 164071 211252, 163965 210621, 164019 209442, 164022 209005, 164057 207604, 164023 205835, 164053 205241, 164054 204962, 164135 202838, 164325 202223, 164734 202060, 165092 202299, 165180 202932, 165176 203041, 165230 203750, 165346 204359, 165409 205192, 165723 207865, 165969 209098, 165953 209287, 166002 209880, 166101 210473, 166208 210743, 166213 211062, 166435 211942, 166525 212000, 166548 212457, 166691 212890, 166838 213532, 166804 214192, 166888 214964, 166937 216036, 166972 216590, 167009 216779, 166964 217079, 166934 217590, 166586 219881, 166596 220235, 166561 220818, 166501 221052, 166357 221750, 166239 222446, 166075 223140, 165857 223823, 165581 224364, 165347 225130, 165327 225673, 165332 225860, 165228 226622, 165165 227291, 165150 228119, 165097 229394, 165039 230171, 165006 230848, 165166 232319, 165183 233050, 165167 233776, 165185 234491, 165258 235247, 165448 236617, 165465 237047, 165573 238014, 165856 238589, 165892 238001, 165819 237489, 165775 237315, 165704 236802, 165665 236618, 165518 235532, 165442 234692, 165412 234505, 165457 234240, 165458 232208, 165423 231636, 165404 230886, 165549 228730, 165574 227857, 165640 226637, 165659 225877, 165714 225641, 165806 225140, 166013 224532, 166344 223903, 166551 223185, 166674 222474, 166846 221711, 166922 221067, 166788 220586, 166830 220066, 166908 219647, 166982 219049, 167121 218184, 167204 217579, 167258 217037, 167297 216898, 167343 216332, 167361 216215, 167419 215532, 167400 214856, 167492 214179, 167420 213526, 167547 212254, 167670 211558, 167687 211039, 167833 210456, 167884 209859, 167973 209393, 167746 209254, 167704 209829, 167612 210304, 167788 210448, 167579 210556, 167551 211021, 167616 211575, 167291 212235, 167262 212378, 167233 212329, 166879 212173, 166724 211768, 166555 211027, 166438 210363, 166356 210121, 166347 209850, 166254 209197, 166170 208741, 166072 207516, 165983 206783, 165861 205521, 165798 204624, 165731 203269, 165722 202675, 165768 202296, 165979 202094, 166187 202030, 166831 202015, 167158 202063, 167460 202195, 167795 203120, 167897 203742, 167891 204211, 168075 205214, 168199 205491, 168068 205557, 168110 206302, 168116 206665, 168166 206879, 168398 207438, 168451 207143, 168424 206514, 168394 206310, 168433 205921, 168362 205207, 168286 204956, 168414 204493, 168402 204182, 168362 204110, 168438 203917, 168316 203217, 168415 203080, 168276 202642, 168261 202461, 168477 202195, 168801 202064, 169193 202092, 169358 202212, 169533 202415, 169660 202987, 169760 203508, 169779 204051, 169744 204453, 169778 205087, 169848 205776, 169881 206661, 169884 207538, 170209 208137, 170296 208772, 170444 210848, 170457 212750, 170353 213352, 170149 213972, 169935 214565, 169946 214861, 169844 214777, 169765 214914, 169648 215426, 169470 215640, 169086 216452, 168877 216925, 168818 217194, 168640 217561, 168444 218235, 168398 218720, 168442 218780, 168381 218940, 168408 219697, 168669 218973, 168756 218269, 168920 217617, 168992 217185, 169224 216918, 169453 216386, 169781 215818, 169801 215523, 169933 215502, 170064 215248, 170290 214664, 170714 213441, 170835 212776, 170868 212200, 170964 211424, 170947 210123, 170887 209715, 170776 208781, 170620 207841, 170481 206768, 170491 206323, 170466 205741, 170368 205141, 170318 204322, 170246 203622, 170244 203487, 170176 202471, 170395 202005, 171025 202017), (170585 260507, 170848 260843, 170764 260512, 170687 260390, 170585 260507), (170138 259071, 170173 259202, 170247 259788, 170484 260302, 170564 259795, 170439 259539, 170209 258967, 170138 259071), (170904 254217, 171173 254656, 171452 254235, 171185 254048, 170904 254217), (166858 228965, 166618 229573, 166538 230326, 166564 231081, 166750 231844, 166917 233219, 167072 234160, 167499 236450, 167642 237263, 167649 237463, 167763 238567, 167967 239870, 168113 241281, 168240 241999, 168400 242676, 168491 243325, 168615 244101, 168827 244927, 168970 245639, 169189 246147, 169216 246390, 169235 245998, 169185 245770, 169009 245353, 169020 245054, 168899 244459, 168647 242798, 168543 241944, 168534 241236, 168638 240548, 168505 239819, 168346 239090, 168288 238699, 168084 237592, 167989 237239, 167774 235899, 167697 235339, 167531 234400, 167302 232743, 167203 231526, 167071 230376, 167141 229625, 167153 229135, 167066 228862, 166858 228965), (170741 239500, 170808 239296, 170790 239075, 170723 239069, 170473 238656, 170741 239500), (170274 237799, 170391 238329, 170428 237908, 170398 237715, 170349 237686, 170274 237799), (170640 233267, 170497 233273, 170318 233557, 170501 233770, 171023 233947, 171194 233449, 170772 233145, 170640 233267), (169143 230474, 169122 231057, 169247 231624, 169244 231746, 169347 232441, 169378 233144, 169667 233424, 169871 233422, 170004 232953, 169829 232604, 169680 231990, 169665 231646, 169593 231306, 169581 230987, 169412 230414, 169143 230474), (169691 226419, 169421 227051, 169062 227785, 168762 228333, 168718 228518, 168544 229046, 168801 229590, 169030 229910, 169092 230141, 169322 230184, 169160 229725, 169150 229597, 169106 229549, 168943 229048, 169015 228363, 169414 227829, 169603 227392, 169762 226567, 170007 226488, 169906 225812, 169691 226419), (170412 218423, 170241 218590, 170215 218740, 169990 219268, 169975 219776, 169866 219497, 169238 220930, 169142 221020, 169040 221322, 168345 222976, 168222 223644, 168024 224072, 167640 225378, 167494 226044, 167343 226646, 167369 227067, 167269 226934, 167146 227405, 166959 228607, 167068 228849, 167211 228135, 167235 227690, 167407 227605, 167557 227081, 167697 226511, 167785 226072, 167922 225586, 167937 225425, 168121 224915, 168542 223445, 168660 223190, 169050 222192, 169198 221752, 169383 221442, 170028 220026, 170102 219522, 170209 219646, 170362 219327, 170452 219007, 170501 219080, 170855 218662, 170861 218184, 170412 218423), (170960 227016, 170707 227270, 170553 227901, 170572 227976, 170764 227967, 170841 227907, 171070 227460, 171227 227281, 171092 226992, 170960 227016), (169920 225774, 170053 226483, 170314 226414, 170480 225874, 170432 225432, 170287 225365, 169920 225774), (168044 207459, 168094 207867, 167927 208218, 167823 208636, 168013 209172, 168100 208671, 168285 208084, 168232 207693, 168367 207486, 168085 207177, 168044 207459)), ((180401 253120, 180770 253328, 180896 254044, 180950 255594, 180939 256385, 180965 257447, 181027 261131, 180999 262268, 181043 264621, 181053 265621, 180959 266394, 180915 267136, 180917 267899, 180885 269921, 180833 270636, 180822 271584, 180687 271860, 180454 271664, 180287 271686, 180232 271793, 180039 271309, 179876 271205, 179793 271061, 179737 271411, 180003 271830, 180043 271711, 180113 272031, 180472 272798, 180776 273320, 180789 273492, 180877 274014, 180761 274625, 180696 275178, 178285 275179, 178395 274311, 178686 273480, 178802 272821, 178885 272446, 178967 271340, 179110 270986, 179202 271276, 179395 271100, 179508 271097, 179586 270941, 179659 271080, 179728 270749, 179664 270546, 179588 270495, 179314 270104, 179004 269444, 178874 268689, 178842 268581, 178587 267454, 178520 267233, 178318 266433, 178117 265699, 178042 265304, 177864 264756, 177673 263988, 177631 263918, 177450 264122, 177446 263482, 177402 263217, 177118 262649, 177153 261776, 177113 261350, 177427 260679, 177543 260189, 177766 260004, 178111 259341, 178186 258677, 178157 258248, 178095 257998, 178021 257333, 177905 256808, 177690 256176, 177595 255795, 177664 255549, 177677 255139, 177455 254508, 177497 254397, 177502 254014, 177623 253544, 177344 253492, 177001 254010, 177108 254823, 177116 255366, 177250 256146, 177469 256730, 177602 257273, 177680 257746, 177620 258001, 177622 258393, 177721 258588, 177878 258335, 177756 258660, 177761 259328, 177495 259815, 177448 259982, 177185 260456, 177057 260654, 176743 261367, 176831 261995, 176937 261799, 176843 262087, 176977 262493, 177020 262803, 177232 263557, 177566 264892, 177634 265261, 177841 266124, 177948 266497, 178025 267262, 178023 268038, 178220 268832, 178454 270557, 178543 271123, 178555 271680, 178466 272184, 178378 272540, 178245 273191, 178177 273439, 178024 274602, 177937 275179, 175161 275179, 175072 275072, 174908 274173, 174714 273290, 174381 272616, 174234 272588, 173997 272447, 173780 272239, 173774 272831, 173992 273174, 174151 273286, 174465 272849, 174247 273520, 174301 273788, 174403 273931, 174579 273719, 174440 274198, 174664 275178, 172846 275179, 172865 273846, 172901 272749, 173051 272549, 173167 272557, 173719 272179, 173502 271725, 173394 271713, 173417 271519, 173166 270882, 173005 270158, 172980 269156, 172980 268299, 172950 268129, 172869 266955, 173554 266273, 173146 265709, 173043 265790, 173080 265615, 172920 264829, 172954 263238, 173064 261698, 173017 260894, 172927 260304, 172881 259667, 172877 258774, 172930 254727, 172963 254554, 172960 254036, 173186 253499, 173819 253445, 174231 253475, 174503 253549, 174778 253704, 174974 254220, 175060 254700, 175178 255218, 175228 255741, 175028 256553, 175013 257058, 174980 257428, 174954 257950, 174961 258036, 174850 259350, 174765 260073, 174775 260816, 174881 261556, 174830 262315, 175308 263779, 175500 264496, 175675 265237, 175706 265944, 175811 266316, 175976 267035, 176065 267367, 176312 268766, 176418 269461, 176469 270178, 176566 270842, 176468 271328, 176563 271518, 176380 271962, 176355 272547, 176432 272178, 176728 271531, 176930 270862, 176996 270177, 176942 269466, 176791 268635, 176657 268032, 176424 267147, 176088 265976, 175886 265331, 175693 265214, 175821 264614, 175640 263734, 175562 262989, 175407 262252, 175200 261520, 175150 261022, 175089 260055, 175038 259698, 175109 259351, 175013 258923, 175196 259164, 175286 258135, 175320 257566, 175298 257251, 175353 256828, 175271 256599, 175393 256615, 175445 256395, 175498 255706, 175459 255176, 175454 254504, 175393 253577, 175648 253330, 176162 253286, 176581 253523, 176964 253903, 177368 253320, 177734 253188, 178337 253134, 178523 253171, 178685 253329, 178775 253691, 178801 254546, 178865 255240, 178966 255468, 179088 256099, 179295 255568, 179365 254747, 179322 254036, 179231 253412, 179336 253192, 179637 253104, 180046 253063, 180401 253120), (175991 273453, 175935 274592, 176030 274154, 176152 273474, 176069 273100, 175991 273453), (174513 268260, 174573 268260, 174641 268168, 174606 268043, 174543 267495, 174502 267461, 174513 268260), (173356 266952, 173422 267327, 173855 267192, 173962 267088, 174066 267084, 174157 266911, 173590 266311, 173356 266952), (179435 258004, 179481 258574, 179512 258664, 179363 259483, 179301 259522, 179164 259912, 178895 260523, 178700 261164, 178632 261896, 178649 262712, 178932 263370, 179179 263498, 179455 263371, 179240 262631, 179185 262546, 179051 261822, 179080 261071, 179213 260623, 179217 260473, 179533 259927, 179743 259304, 179889 258648, 179784 257986, 179635 257451, 179435 258004), (180103 262636, 180236 262838, 180346 262652, 180361 262426, 180257 262285, 180103 262636), (179094 256146, 179375 257647, 179571 257341, 179485 256716, 179311 255736, 179094 256146)), ((210371 236583, 210437 236987, 210423 238199, 210408 238705, 210363 239537, 210345 239619, 210237 241105, 210284 241303, 210263 241676, 210403 242034, 210377 242415, 210534 242603, 210747 242198, 210937 242016, 210943 241628, 211006 241514, 211045 240126, 211078 239928, 211078 239033, 211065 238756, 211048 237470, 211053 236639, 211541 236561, 212150 236589, 212485 236727, 212868 236681, 213127 236726, 213250 236647, 213587 236885, 213784 237300, 213725 237419, 213778 237927, 213763 238030, 213787 238618, 213701 238670, 213716 238801, 213638 238937, 213679 239498, 213657 239654, 213688 241111, 213713 241332, 213630 241755, 213433 241987, 213439 242652, 213380 242912, 213322 244710, 213309 245571, 213292 245698, 213279 247011, 213309 247187, 213278 247829, 213316 248066, 213228 248778, 213257 248973, 213206 249912, 213243 250285, 213232 250885, 213193 251271, 213010 251420, 212879 251836, 212858 252032, 212906 252547, 212966 252671, 212974 252836, 213170 253144, 213082 253843, 213053 254142, 212852 254808, 212776 255347, 212971 256139, 213254 256402, 213463 255845, 213182 255538, 213438 254872, 213433 254322, 213372 253878, 213450 252891, 213574 251908, 213603 251005, 213691 250488, 213811 249958, 213795 249018, 213736 248454, 213777 248111, 213726 247625, 213774 247244, 213793 246659, 213845 245639, 213858 244903, 213944 243972, 214097 243330, 214086 243000, 214135 242811, 214115 242409, 214148 241836, 214166 240676, 214385 240121, 214642 239843, 214763 239293, 214421 238631, 214430 238492, 214348 238098, 214348 237420, 214416 237296, 214621 237091, 214926 237034, 215218 237070, 215313 237311, 215300 237723, 215350 238331, 215349 238645, 215375 239875, 215466 241183, 215491 241364, 215524 242093, 215480 242836, 215539 245017, 215569 249801, 215519 250422, 215458 250861, 215411 251663, 215407 252032, 215351 253010, 215402 253459, 215421 254636, 215415 255114, 215455 256206, 215457 256759, 215421 258910, 215425 259358, 215397 260086, 215398 260502, 215293 262075, 215271 263131, 215310 265849, 215340 266017, 215387 266985, 215375 267578, 215384 268312, 215294 269081, 215355 269442, 215306 270405, 215348 270956, 215217 272603, 215225 273215, 215294 273883, 215324 274050, 215365 275179, 214010 275178, 214121 274427, 214144 273935, 214267 273280, 214121 273135, 213872 273670, 213784 273998, 213719 275179, 212500 275178, 212609 274425, 212306 273683, 212231 272881, 212128 272077, 212134 271540, 212064 270849, 211924 270399, 211924 270287, 211692 270010, 211745 269521, 211719 268974, 211731 267653, 211713 267283, 211763 266285, 211701 265910, 211728 265535, 211731 265001, 211770 264643, 211621 263985, 211302 263948, 211384 263182, 211484 262759, 211658 262293, 211779 261587, 211845 261397, 211800 261313, 211714 260486, 211659 259559, 211694 259215, 211732 258522, 212084 256372, 211943 255909, 211646 256687, 211417 258821, 211308 259548, 211215 259981, 211204 260469, 211119 260780, 211025 262093, 211058 262269, 211085 262800, 211217 263233, 211213 264433, 211488 264377, 211274 264994, 211202 265919, 211297 267437, 211276 267725, 211297 268674, 211396 270043, 211472 270386, 211624 271359, 211721 271896, 211639 272871, 211721 273874, 211702 274355, 211731 275179, 209671 275178, 209589 273375, 209558 270973, 209567 270083, 209557 269395, 209453 265898, 209474 265256, 209461 264650, 209522 264004, 209561 263439, 209628 263073, 209686 262518, 209768 261868, 209866 261614, 209865 261272, 209929 260698, 209953 260368, 210149 259466, 210351 258329, 210499 257964, 210555 257223, 210689 256640, 210714 256044, 210173 255631, 210070 255333, 209913 255204, 209646 256019, 209673 256579, 209666 256952, 209760 258438, 209647 259046, 209533 259398, 209469 260311, 209521 260646, 209406 260558, 209244 260721, 209216 261195, 209156 261400, 209046 262094, 209099 263195, 209025 263179, 208847 263329, 208911 263962, 208909 264207, 208950 264921, 209013 265675, 209048 265876, 209097 266814, 209119 267731, 209124 268450, 209110 268629, 209092 269509, 209130 269818, 209113 270368, 209131 270982, 209127 271210, 209226 272253, 209223 272893, 209201 273464, 209228 273844, 209243 274433, 209279 275179, 207459 275179, 207453 274391, 207432 273626, 207509 273197, 207475 272858, 207499 272521, 207487 271922, 207518 271253, 207516 270384, 207487 269505, 207528 268928, 207440 267149, 207420 265699, 207458 264874, 207492 264422, 207464 263892, 207503 262920, 207561 262036, 207532 261530, 207488 261113, 207509 260664, 207439 258429, 207433 257403, 207443 256351, 207438 255810, 207481 254980, 207476 254525, 207531 254236, 207567 253521, 207724 252682, 207680 251734, 207585 250846, 207565 250210, 207530 249784, 207534 249023, 207521 248364, 207541 247818, 207568 247406, 207547 246528, 207562 245867, 207533 243968, 207550 243442, 207534 242863, 207556 241959, 207544 241563, 207594 240329, 207523 239544, 207557 239023, 207576 238447, 207567 238056, 207731 236998, 207940 236719, 208392 236523, 208870 236551, 208956 236719, 208957 236941, 209095 237154, 208961 237870, 209008 238014, 208975 238139, 209054 238196, 209411 238019, 209267 237871, 209448 237591, 209538 237072, 209648 236542, 210166 236499, 210371 236583), (213710 270437, 213663 271249, 213640 271460, 213608 272085, 213549 272596, 213726 272891, 213717 272982, 213758 273017, 213895 272882, 213850 272764, 214158 272058, 214273 271222, 214286 270900, 214416 269831, 214233 269443, 213710 270437), (213895 265092, 213840 265877, 213871 266358, 213790 267208, 213773 267699, 213640 268209, 213796 268604, 213752 268795, 213865 268740, 214140 267689, 214160 267322, 214231 266776, 214315 266417, 214345 265863, 214345 265439, 214391 264467, 214238 264031, 213895 265092), (213795 261352, 213777 261635, 213553 262263, 213505 262879, 213697 263159, 213841 263544, 213995 263148, 214003 262876, 214195 262238, 214221 261625, 213968 261055, 213795 261352), (212981 256966, 212856 257708, 212866 258347, 213118 258646, 213118 258785, 213203 258788, 213341 259561, 213290 260058, 213389 260467, 213354 260736, 213518 260729, 213676 260457, 213731 260121, 213899 259546, 213696 258683, 213593 258646, 213690 258621, 213691 257096, 213403 256876, 212981 256966), (208567 252322, 208564 252738, 208518 253280, 208521 254049, 208655 254448, 208835 254113, 208851 253147, 208815 252344, 208770 251719, 208776 251553, 208730 250899, 208567 252322), (209120 240735, 209088 240963, 208879 241805, 208904 242455, 208948 242786, 208933 243669, 208854 244453, 208695 244910, 208674 245446, 208642 245654, 208625 246270, 208697 246406, 208760 246901, 208754 247204, 208866 247689, 209036 247172, 209050 246855, 209156 246342, 209189 245843, 209280 245547, 209307 244951, 209150 244440, 209154 243659, 209279 242692, 209391 242330, 209391 242021, 209465 241428, 209451 240913, 209476 240693, 209366 240216, 209120 240735), (212215 246286, 212251 246632, 212309 246242, 212276 245297, 212215 246286), (210252 244747, 210408 244996, 211017 245524, 211184 244740, 211186 244573, 210438 244466, 210252 244747), (212394 237474, 212164 237568, 212284 238866, 212427 239052, 212434 239271, 212604 239527, 212568 239651, 212645 240024, 212618 240418, 212208 240333, 212065 240521, 211759 241057, 211942 241912, 212274 242018, 212712 241642, 212828 241088, 212814 240537, 212764 240067, 212772 239464, 212891 239093, 212875 238894, 212953 238676, 212935 238279, 212855 237892, 212609 237575, 212597 237413, 212485 237294, 212394 237474), (209085 238393, 209069 238667, 208966 239142, 208981 239771, 209037 240003, 209358 240195, 209217 239743, 209339 239570, 209411 238919, 209486 238699, 209563 238144, 209413 238017, 209085 238393)), ((192410 128152, 192443 129647, 192451 132488, 192594 132474, 192572 130626, 192581 129942, 192578 128942, 192657 128493, 193435 128418, 193984 128420, 194511 128458, 196757 128379, 198201 128396, 198659 128347, 199100 128408, 199897 128452, 200575 128448, 201158 128404, 202011 128379, 202190 128387, 202832 128329, 203208 128368, 203595 128335, 204050 128436, 204879 128287, 206187 128266, 206563 128213, 206912 128270, 207484 128250, 208104 128246, 208521 128339, 208588 128761, 208599 129944, 208635 129492, 208711 129151, 208790 129008, 209227 128726, 209432 128563, 209924 128454, 210534 128416, 210887 128433, 211395 128437, 211700 128498, 212242 128471, 213091 128468, 213408 128515, 214379 128518, 214572 128553, 215166 128454, 215998 128600, 216830 128587, 217466 128428, 218691 128484, 218829 128471, 219338 128476, 219687 128434, 220130 128516, 220952 128525, 221033 128510, 221749 128452, 222479 128452, 223076 128480, 223861 128448, 224423 128603, 224638 128600, 225114 128936, 225270 129119, 226145 129939, 226530 130320, 226653 130418, 227440 131200, 228401 132191, 228534 132427, 228712 132636, 228980 132761, 229481 133302, 229783 133595, 230250 134140, 230354 134206, 231056 134906, 231191 135292, 231148 135601, 231615 135292, 232157 135551, 232520 135938, 232626 136089, 232997 136496, 233273 136770, 233648 137166, 233851 137327, 234359 137890, 234423 137940, 234804 138326, 235248 138726, 235672 139171, 235891 139426, 236228 139659, 236684 140130, 237065 140431, 237393 140885, 238475 141886, 238692 142176, 239200 142607, 239380 142806, 239914 143313, 240529 143955, 240589 144059, 241505 144961, 241646 145187, 242058 145493, 242551 145938, 242936 146331, 243263 146625, 244368 147784, 244667 148326, 244654 148645, 244995 148367, 245894 149270, 246188 149580, 246655 150003, 247145 150486, 247731 151097, 248096 151452, 248483 151859, 249643 152993, 249978 153520, 250108 154140, 250128 158178, 250319 158231, 250424 158343, 250966 158305, 251139 158331, 251683 158603, 251956 158389, 252376 158525, 252834 158468, 252927 158562, 253133 158468, 253657 158397, 254206 158253, 254935 158265, 255427 158326, 256313 158390, 257434 158287, 258107 158325, 259066 158325, 259906 158284, 260766 158296, 261428 158215, 261592 158169, 262454 158165, 263248 158570, 263312 158665, 263440 159107, 263453 159678, 263450 160545, 263405 161735, 263380 162793, 263338 163779, 263354 164910, 263320 165580, 263282 165627, 263180 166119, 263050 166312, 263095 166617, 263049 167185, 263268 167536, 263291 167907, 257174 182673, 257168 185685, 257174 217532, 256904 217498, 256902 219138, 257174 219142, 257174 231170, 256863 231143, 256858 232925, 257174 232823, 257174 275178, 246644 275178, 246447 274181, 246321 273595, 246144 272551, 246065 271817, 245897 270538, 245849 270272, 245950 269348, 246003 268707, 246238 267945, 246483 267201, 247079 265284, 247400 264557, 247777 263745, 247772 263537, 247799 263707, 248111 263115, 248114 262843, 248156 263037, 248376 262617, 248376 261874, 248363 261798, 248035 262423, 247693 263038, 247362 263667, 247081 264320, 246835 264968, 246319 266443, 246155 267060, 245893 267917, 245748 268684, 245642 268862, 245434 269447, 245293 270263, 245337 271021, 245548 271792, 245640 272526, 245744 273086, 245984 274189, 246218 275179, 244435 275179, 244374 274651, 244273 274001, 244245 273255, 244269 272421, 244254 271265, 244224 270942, 244295 270003, 244406 267717, 244447 267079, 244539 266259, 244792 265619, 245251 264908, 245280 264660, 245407 264167, 245440 263967, 245709 262815, 245637 262163, 245650 261775, 245821 260799, 246055 259608, 246155 258787, 246248 258152, 246228 257465, 246296 256783, 246274 256113, 246377 255451, 246201 254977, 246154 255263, 245949 255301, 245528 255170, 245513 254822, 245308 254046, 245188 253717, 245078 253155, 245046 252781, 244960 252189, 244692 249985, 244564 248462, 244538 247567, 244579 247146, 244664 247054, 245066 246940, 245603 246921, 245591 246309, 245533 246174, 245230 246566, 244497 246480, 244347 246328, 244267 245423, 244165 244972, 244187 244428, 244133 245249, 244027 245689, 243929 246227, 243785 246362, 243159 246387, 242895 246296, 242753 246106, 242652 245459, 242609 243888, 242607 242872, 242580 241048, 242576 239765, 242615 237368, 242498 229349, 242500 228464, 242480 226741, 242506 225790, 242586 224526, 242641 223025, 242654 221933, 242648 219036, 242662 217151, 242646 214088, 242705 210897, 242700 208895, 242678 206165, 242639 203402, 242626 200390, 242638 199146, 242610 197892, 242563 196697, 242525 195344, 242517 194183, 242478 192990, 242417 190420, 242397 187920, 242434 187427, 242482 185917, 242578 184128, 242602 183876, 242634 183140, 242650 182318, 242609 181433, 242537 178701, 242477 177249, 242476 174782, 241961 174785, 241953 175694, 241926 176337, 241906 177653, 241909 178593, 241854 179943, 241844 180599, 241953 181918, 241912 182604, 241907 183194, 241877 183894, 241907 185371, 241868 185928, 241795 187666, 241639 188074, 241353 188228, 240589 188239, 240358 187862, 240300 187494, 240297 187803, 240088 188059, 239597 188098, 239353 187904, 239160 188239, 238313 188250, 237976 188131, 237876 187818, 237900 187016, 237689 186988, 237519 187603, 237528 187749, 237311 188249, 236809 188207, 236262 188235, 236161 187816, 236059 186978, 235917 186787, 235930 186317, 235758 185822, 235707 186250, 235829 186862, 235571 188099, 235419 188078, 235194 188201, 234786 188171, 234463 187980, 234249 187540, 234165 187127, 234109 185720, 234114 183040, 234065 181445, 234021 180489, 234060 176553, 234039 175800, 234048 175081, 234019 173962, 234020 173212, 234064 170877, 234139 169927, 234214 168675, 234275 167900, 234297 167153, 234085 165668, 233687 164974, 233638 166365, 233630 167434, 233674 168185, 233733 168747, 233747 169449, 233678 169987, 233674 170133, 233561 170778, 233447 171584, 233436 172973, 233527 174984, 233532 175455, 233595 176493, 233717 177539, 233751 178590, 233812 183152, 233784 184229, 233718 185390, 233700 186493, 233751 188019, 233768 188288, 233781 189008, 233780 189559, 233754 190779, 233745 192596, 233698 193250, 233573 193649, 233518 193990, 233492 194799, 233455 195451, 233427 196478, 233507 197434, 233571 197942, 233617 198718, 233633 200041, 233626 202233, 233592 203457, 233576 204957, 233578 206464, 233523 207639, 233514 208538, 233533 209220, 233634 209877, 233586 210868, 233574 211821, 233547 212474, 233550 213097, 233582 214354, 233476 217213, 233429 217466, 233306 217743, 233094 217919, 232408 217952, 231862 217752, 231421 217817, 231101 217721, 230811 217964, 230373 217979, 229780 217960, 229558 217902, 229493 217835, 229403 217402, 229482 217303, 229490 216468, 229458 216266, 229368 216514, 229261 217115, 229308 217350, 229185 217720, 228997 217986, 228320 218011, 227860 217973, 227756 217303, 227679 217185, 227530 217255, 227102 217570, 226591 217911, 225937 217428, 225708 216545, 225670 214441, 225673 211706, 225635 209836, 225599 208952, 225589 208087, 225605 204975, 225570 203517, 225584 201299, 225574 200124, 225612 196932, 225689 195623, 225781 193717, 225841 192829, 225858 192095, 225797 191405, 225671 190660, 225622 190017, 225595 188988, 225615 188162, 225710 186730, 225741 186420, 225794 185525, 225813 184576, 225782 183386, 225740 182421, 225631 180559, 225513 177500, 225444 176008, 225492 174050, 225566 168640, 225733 167673, 225833 167291, 225827 166627, 225631 165377, 225608 164541, 225582 163986, 225584 163344, 225539 161836, 225582 160497, 225633 158127, 225752 156302, 225733 155632, 225565 154405, 225561 152207, 225590 150576, 224795 149775, 224711 150371, 224256 151138, 224239 151261, 224281 151194, 224416 151487, 224579 151610, 224799 151936, 224792 153471, 224811 156117, 224800 158616, 224744 161961, 224547 163360, 224493 164031, 224509 164671, 224608 165960, 224658 167029, 224692 168247, 224594 168963, 224570 169753, 224344 170506, 224605 171125, 224688 171256, 224737 171574, 224779 172359, 224782 172964, 224724 175850, 224745 176633, 224777 177263, 224795 178342, 224754 181712, 224691 182222, 224382 182539, 223970 182586, 223672 182572, 223475 182411, 223287 182384, 223121 181913, 222944 181222, 222921 180632, 222983 179987, 222944 179287, 222928 179160, 222903 178581, 223010 177873, 223247 177176, 223459 176481, 223628 175773, 223754 175041, 223843 174298, 223829 173977, 223837 172981, 223972 172288, 224127 172025, 224232 171557, 224050 171167, 223824 171712, 223660 172005, 223447 172850, 223481 173509, 223472 173641, 223492 174259, 223178 175557, 222955 176407, 222785 176750, 222640 177424, 222572 177637, 222509 178135, 222488 178540, 222410 179244, 222381 179922, 222432 180561, 222521 181189, 222545 182205, 222448 182430, 221886 182595, 220831 182599, 220701 182566, 220574 182469, 220526 181902, 220321 181305, 220191 181586, 220103 182083, 219958 182499, 219673 182627, 219268 182356, 219092 181880, 219099 181253, 219152 180747, 219166 179635, 219211 179025, 219159 178325, 219196 177700, 219068 176786, 218707 175603, 218522 175126, 218435 174589, 218239 174275, 218151 173993, 218047 173389, 218008 173641, 218029 173808, 217981 174330, 218112 174999, 218429 176364, 218507 176859, 218598 177649, 218615 177728, 218640 178233, 218662 178418, 218691 179539, 218678 179800, 218671 180346, 218604 181203, 218382 181969, 218242 182079, 218156 182267, 218001 182392, 217626 182299, 216968 182012, 216870 181781, 216771 181725, 216726 181266, 216691 180362, 216693 179999, 216654 177370, 216699 174541, 216646 172147, 216559 166166, 216603 164803, 216674 163773, 216717 162823, 216734 161909, 216729 159917, 216744 157655, 216729 155257, 216763 153372, 216781 153168, 216803 152631, 216773 149664, 216867 148838, 217241 148141, 217141 147828, 216917 147404, 216855 147065, 215946 146528, 216035 148472, 216046 149815, 216005 151774, 216062 154229, 216042 155158, 215960 157591, 215917 158179, 215873 158626, 215792 160732, 215487 160955, 215119 161020, 214930 160442, 214829 159937, 214788 159868, 214717 159975, 214602 160884, 214517 160964, 214229 161051, 213586 161046, 213253 160860, 213314 160788, 213348 160461, 213280 159871, 213191 159662, 213383 159471, 213442 159357, 213348 158735, 213271 158533, 213162 158663, 213160 159269, 213040 159734, 213110 160180, 213073 160432, 213108 160503, 212762 161057, 211563 161008, 211146 160859, 211045 160712, 211072 160508, 211006 159563, 211002 159050, 210950 158538, 210891 158277, 210961 157458, 210909 156219, 210759 155771, 210815 155090, 210864 154933, 210773 154558, 210707 153849, 210689 153219, 210760 152627, 210721 152106, 210597 150812, 210475 149054, 210401 147777, 210387 147196, 210329 146929, 210398 146455, 210396 145921, 210368 145424, 210410 144567, 210512 143891, 210482 143170, 210315 142460, 210272 142431, 209996 142484, 209869 143171, 209909 143876, 210095 144833, 210075 146498, 210099 147198, 210138 147449, 210151 148297, 210177 148425, 210189 148954, 210234 149162, 210207 149780, 210276 150885, 210315 152037, 210380 152715, 210446 153159, 210511 154050, 210546 154971, 210600 155441, 210626 156589, 210704 157357, 210669 157518, 210722 157933, 210677 158666, 210601 158868, 210604 159231, 210665 159826, 210634 160752, 210459 160852, 210062 160898, 209065 160776, 208455 160667, 207849 160510, 207787 159837, 207839 158038, 207822 157460, 207767 156542, 207706 154959, 207805 153711, 207812 153134, 207658 151279, 207632 149622, 207649 148992, 207719 148366, 207828 147865, 208031 147116, 208116 146508, 208102 145757, 208104 144541, 207982 143866, 207733 143193, 207652 142528, 207126 142528, 207081 145956, 207012 147181, 206955 148773, 206842 150961, 206869 151792, 206930 152440, 207027 153120, 207077 153801, 207100 155303, 207083 156129, 207007 157672, 206947 158469, 206915 159264, 206897 160039, 206894 160859, 206920 161941, 206925 162607, 206985 164000, 207027 164618, 207081 165673, 207273 171437, 207240 173152, 207159 180144, 206953 181247, 206903 181441, 206878 182101, 206921 182768, 207050 183463, 207103 184130, 207151 185617, 207154 186539, 207195 187978, 207116 191678, 207105 192839, 206967 195345, 207031 196214, 207096 196735, 207147 197409, 207162 199810, 207120 202908, 207114 204678, 207075 205290, 206979 205800, 206456 205948, 206676 206105, 206767 206528, 206831 207114, 206863 208664, 206863 209360, 206879 210399, 206879 211170, 206930 213225, 206957 214926, 206929 216286, 206985 220098, 206915 220769, 206852 221522, 206836 222237, 206843 222970, 206810 224819, 206757 225846, 206745 226798, 206796 227636, 206860 228406, 206851 229243, 206611 230855, 206573 231742, 206567 232507, 206653 234315, 206656 234809, 206692 235704, 206851 237166, 206870 237748, 206923 241217, 206943 243335, 206825 245802, 206828 246410, 206864 247502, 206898 248170, 206907 249269, 206878 250731, 206862 252832, 206787 253242, 206669 253555, 206597 254286, 206571 255458, 206534 256511, 206691 257872, 206760 259072, 206759 262159, 206722 263703, 206708 265244, 206709 266697, 206658 267690, 206644 268981, 206732 269665, 206758 270280, 206717 271077, 206703 272111, 206676 272785, 206713 274883, 206689 275178, 200778 275179, 200788 274640, 200747 274512, 200744 274192, 200572 274125, 200488 274963, 200509 275179, 198843 275179, 198845 271897, 198811 270166, 198756 268769, 198779 265030, 198754 262997, 198761 261728, 198751 261102, 198751 259938, 198795 256481, 198856 255729, 198931 254059, 199018 252678, 199031 251943, 198964 251226, 198843 250512, 198792 249791, 198773 249075, 198780 248229, 198855 246918, 198928 246116, 198970 245182, 198987 244400, 198963 243221, 198790 239950, 198609 235343, 198623 234580, 198660 233480, 198727 228366, 198800 227574, 198997 226793, 198991 226029, 198851 225257, 198795 224576, 198754 223659, 198738 222514, 198705 221644, 198709 220956, 198773 218723, 198786 217774, 198831 216829, 198920 215545, 198889 214829, 198770 213963, 198738 213462, 198721 212253, 198773 208758, 198774 207516, 198826 206788, 199338 206423, 199393 206425, 199248 206277, 199133 205306, 199096 203617, 199096 202218, 199074 201131, 199090 200372, 199040 198312, 199001 195525, 199025 194278, 199010 192825, 198985 191746, 198972 189522, 199067 188431, 199102 187733, 199116 186903, 199106 186317, 199135 184276, 199191 183087, 199223 182094, 199215 181310, 199101 179448, 199116 178549, 199190 177833, 199278 177193, 199357 176417, 199381 175050, 199376 174397, 199312 173183, 199269 171339, 199213 170393, 199121 169473, 199083 168235, 199070 166211, 199041 164973, 199011 161524, 199075 160062, 199123 159231, 199133 158419, 199064 155948, 199081 150808, 199129 150130, 199338 149482, 199409 148818, 199439 146993, 199471 146296, 199428 145598, 199287 144358, 199233 143804, 199198 142997, 199190 142471, 197987 142381, 197973 143321, 197994 145273, 197957 146910, 197955 147413, 197924 147986, 197943 150070, 197892 150737, 197595 151074, 197474 151368, 197731 151905, 197810 152027, 197966 152682, 197967 153701, 197954 154400, 197958 154622, 197915 155329, 197903 155412, 197909 156283, 198039 159371, 198126 160814, 197956 161292, 197763 161129, 197502 161316, 197380 161470, 197881 162110, 198054 162796, 198098 163516, 198118 164579, 198111 165602, 198053 166530, 198005 167051, 197989 167743, 198046 168793, 198058 169212, 198148 171146, 198165 171965, 198161 172709, 198125 173503, 198126 174004, 198105 174661, 198158 176761, 198171 177914, 198072 180939, 197976 182091, 197906 184105, 197785 184452, 197708 184511, 197328 184602, 196833 184576, 196689 184496, 196538 184146, 196380 183296, 196072 180728, 196021 180495, 195928 180561, 195978 180309, 195903 179920, 195905 179718, 195846 179101, 195747 178518, 195597 179131, 195680 179475, 195658 179748, 195714 180342, 195804 180906, 195857 181449, 195972 181789, 195964 181954, 196036 182457, 196144 183440, 196171 184125, 196121 184348, 195976 184541, 196206 184567, 196309 184624, 196313 184717, 196465 184988, 196492 185129, 196623 185274, 197002 184638, 197670 184634, 197919 184724, 198038 184951, 198127 185524, 198159 187024, 198157 187411, 198192 189029, 198157 190303, 198146 191317, 198190 192935, 198264 196789, 198262 197451, 198279 198108, 198264 198952, 198143 200792, 198120 201790, 198110 205340, 198124 207092, 198081 209002, 198082 210397, 198106 212849, 198138 214541, 198136 215847, 198148 216267, 198143 217185, 198179 218509, 198256 219862, 198281 221341, 198318 222395, 198329 222991, 198351 223492, 198368 226035, 198266 227712, 198212 228283, 198166 228642, 198131 229429, 198152 230091, 198191 230779, 198220 231956, 198262 232680, 198290 233739, 198292 234335, 198261 235453, 198250 236759, 198296 238521, 198306 239245, 198290 240144, 198209 242819, 198121 243957, 198038 246213, 197926 246413, 197662 246482, 197819 246479, 197976 246608, 198159 246990, 198235 247688, 198262 248855, 198282 250763, 198276 251220, 198294 252049, 198318 252649, 198356 254840, 198323 256215, 198379 258614, 198374 259744, 198282 260440, 198243 261135, 198241 262307, 198204 264037, 198169 264568, 198146 265461, 198162 266195, 198249 267136, 198269 267690, 198245 267863, 198209 268405, 198096 268996, 197988 269763, 197969 271124, 198050 272537, 198078 273756, 198234 275179, 193720 275179, 193685 274563, 193643 275179, 190079 275178, 190011 273738, 190063 271654, 190116 267968, 190149 266686, 190368 265983, 190412 265318, 190327 264644, 190196 263998, 190175 263173, 190146 262520, 190144 261870, 190113 261139, 190108 260430, 190173 258279, 190197 257074, 190316 255366, 190282 254633, 190175 253918, 190135 253212, 190125 251943, 190178 247902, 190223 247371, 190333 247044, 190639 246921, 191575 246902, 191881 246870, 192882 246810, 192955 246844, 193065 246995, 193146 247319, 193167 247747, 193119 248499, 193101 249583, 193107 249632, 193089 250155, 193128 250347, 193032 250777, 192857 252295, 192804 253033, 192937 253719, 193013 252664, 193046 252009, 193131 251585, 193101 251377, 193237 251042, 193615 248580, 193690 247117, 193651 246998, 193736 246732, 193921 246679, 194752 246670, 195133 246836, 195131 247272, 195177 247788, 194974 247824, 194874 249182, 194931 249582, 194808 249597, 194738 250356, 194654 250836, 194672 250968, 194594 251204, 194477 252034, 194427 252844, 194412 253727, 194438 254301, 194471 255510, 194573 256179, 194658 256866, 194709 257746, 194918 258507, 194912 258918, 194987 259617, 195125 260300, 195261 259610, 195165 259116, 195142 258914, 195033 258222, 195013 257533, 194913 256853, 194901 256191, 194820 255543, 194777 254893, 194759 254205, 194757 252983, 194779 252257, 194850 251485, 194845 250996, 194909 250385, 195027 249948, 195135 248899, 195131 248799, 195262 247887, 195311 247058, 195463 246650, 195523 246590, 195822 246563, 195615 246230, 195591 245812, 195517 245453, 195561 245281, 195445 245126, 195627 245092, 195608 244394, 195537 243896, 195349 244047, 195370 244710, 195524 244915, 195342 244994, 195276 245240, 195416 245878, 195194 246424, 194838 246569, 194320 246552, 193779 246506, 193469 246422, 193324 245962, 193261 245166, 193214 245025, 193245 244938, 193251 244075, 193197 243914, 193185 243344, 193212 242885, 193166 242160, 193116 240365, 193079 239667, 193009 239079, 192913 238448, 193005 237864, 192975 237161, 192821 235432, 192794 235314, 192782 234738, 192711 233573, 192683 232960, 192643 231453, 192633 229783, 192648 229054, 192738 228394, 192756 227614, 192600 226911, 192580 226892, 192487 226332, 192275 226214, 192247 226902, 192101 227636, 192175 228349, 192329 229069, 192318 229368, 192327 231098, 192355 232462, 192430 234133, 192480 234953, 192513 235257, 192547 235895, 192577 236047, 192541 236297, 192577 237196, 192676 238086, 192757 238465, 192769 239111, 192794 239349, 192818 240263, 192834 240354, 192862 240865, 192879 240964, 192870 241673, 192898 243459, 192846 244475, 192912 244875, 192887 245428, 192878 245965, 192722 246352, 192383 246417, 191500 246308, 190689 246164, 190157 246017, 190048 245880, 190020 245729, 190079 243431, 190073 242776, 190032 242249, 189995 241316, 189942 240500, 189963 239848, 190007 239360, 190058 238544, 190038 237850, 189890 236199, 189877 234905, 189886 233768, 189992 232831, 190265 231773, 190361 231110, 190350 230171, 190352 229114, 190277 228427, 190039 227700, 189911 227014, 189893 226231, 189898 225037, 189966 220139, 189886 218314, 189907 217131, 189908 216382, 189882 215438, 189851 213545, 189876 211180, 189912 209435, 189911 208541, 189883 206660, 189894 204532, 189927 202659, 189963 201614, 190113 200721, 190200 199774, 190063 197992, 189974 195938, 189956 194314, 189896 192906, 189960 190449, 189942 189678, 189881 188780, 189905 187594, 189905 186497, 189939 185209, 190142 184731, 190280 184649, 190748 184552, 191548 184532, 192068 184654, 192522 184510, 192831 184499, 192541 184454, 192378 184089, 192294 183352, 192207 182899, 192224 182815, 192049 181297, 191947 181065, 191971 180885, 191853 180305, 191703 179059, 191736 178986, 191771 178325, 191620 176985, 191558 176857, 191562 176203, 191579 176033, 191338 175254, 191081 174646, 190502 173743, 190096 173009, 189938 172175, 189971 171421, 190097 170672, 190296 169948, 190401 169271, 190397 167362, 190349 166727, 190176 166093, 189972 165475, 189924 164820, 189912 163601, 189924 163009, 189921 162394, 189950 160674, 189997 160364, 190137 160265, 190205 160390, 190567 160724, 190641 160685, 190786 161037, 191068 161281, 191170 161220, 191340 161485, 191335 161618, 191579 162195, 191666 162742, 191733 163285, 191730 163403, 191861 164005, 191890 164630, 191911 164721, 191933 165261, 191971 165814, 191988 166604, 192041 167605, 192090 167737, 192067 167851, 192106 168350, 192082 168518, 192103 169462, 192146 169627, 192266 169577, 192227 169883, 192169 169987, 192151 170750, 192217 172036, 192186 172905, 192139 173519, 192144 174311, 192307 175097, 192517 175873, 193058 177609, 193230 178081, 193429 178858, 193527 179423, 193746 180173, 193965 181039, 194186 181972, 194486 183115, 194546 183564, 194522 184140, 194409 184460, 194689 184470, 195091 184602, 195178 184579, 195106 184574, 195012 184485, 194977 183824, 194896 183414, 194742 182505, 194534 181556, 194218 180256, 194031 179341, 193845 178580, 193675 178017, 193626 177765, 193466 177247, 193199 176568, 193037 176316, 192888 176172, 192864 175841, 192760 175333, 192680 175345, 192680 175072, 192579 174535, 192461 173530, 192463 172745, 192487 171993, 192589 171242, 192525 170388, 192446 169859, 192460 169165, 192403 167906, 192413 167824, 192379 166537, 192337 165881, 192316 165232, 192304 165130, 192388 163959, 192325 163389, 192328 163345, 192151 162497, 192004 161526, 191987 160912, 191804 160713, 191482 160056, 191253 159315, 191233 158533, 191235 157850, 191189 157150, 191154 155774, 191002 156126, 190985 156441, 190905 157180, 191153 157787, 190916 157569, 190847 157624, 190906 157896, 191155 158474, 190944 158318, 190927 158589, 190953 159243, 191168 159853, 191349 160639, 191219 160585, 191173 160785, 191015 160600, 190742 160103, 190005 158678, 189887 156181, 189880 154961, 189888 153069, 189867 152481, 189891 150260, 190022 149515, 190335 149065, 189980 148522, 189202 147175, 189113 148121, 188932 148781, 188901 149601, 188854 150377, 189002 151348, 189058 152066, 189074 153401, 189064 154839, 189024 155786, 189011 157981, 188963 158751, 188955 159524, 189075 160259, 189028 160987, 189020 161519, 188984 162406, 189018 163599, 188978 164281, 188919 165745, 188705 166093, 188388 166234, 188032 166259, 187555 166219, 187390 166132, 187214 166104, 186681 166152, 186408 166088, 186163 166273, 185095 166274, 184984 166147, 185041 166059, 184948 165383, 184782 165412, 184779 165944, 184719 166075, 184430 166257, 183688 166321, 183237 166265, 183097 165702, 182982 164978, 183001 164602, 183078 164238, 183121 163646, 183078 162869, 183060 162805, 182962 163237, 182986 163361, 182932 164223, 182975 164614, 182952 164977, 182787 165651, 182560 166249, 181877 166226, 181499 166070, 181204 165482, 181152 165132, 181116 164154, 181107 161326, 181076 160315, 181030 159410, 181039 158201, 181035 157069, 181042 156518, 181037 155941, 181011 155442, 181029 153480, 180690 153967, 179915 154689, 180089 155358, 180144 155503, 180296 156000, 180366 156711, 180368 158506, 180343 160696, 180312 162390, 180305 163625, 180366 164900, 180376 165616, 180348 166488, 180348 167432, 180382 168633, 180406 170177, 180404 171895, 180346 174654, 180379 177365, 180367 179699, 180328 181607, 180298 182535, 180164 183381, 180055 184305, 180100 185163, 180169 185917, 180236 187143, 180286 188741, 180281 189502, 180347 191863, 180299 193912, 180303 194629, 180384 196037, 180330 199485, 180217 199955, 179950 200065, 180198 200062, 180567 200146, 180693 200525, 180751 201077, 180783 202030, 180780 202682, 180807 204260, 180832 204794, 180876 206712, 180837 207736, 180900 210366, 180777 211226, 180749 212002, 180745 212783, 180726 213720, 180710 213873, 180667 215028, 180705 215750, 180783 216485, 180761 217177, 180605 217828, 180497 218495, 180480 219229, 180497 219808, 180564 220710, 180571 221099, 180613 221859, 180728 222566, 180786 223225, 180814 224883, 180834 225524, 180857 227458, 180786 228301, 180735 229231, 180809 230810, 180819 231874, 180808 232495, 180790 232906, 180791 233896, 180715 234652, 180536 235308, 180504 236128, 180457 236900, 180606 237873, 180661 238593, 180677 239931, 180669 241359, 180630 242292, 180615 244507, 180566 245282, 180558 246050, 180678 246785, 180631 247514, 180623 248048, 180588 248920, 180621 250125, 180582 250808, 180522 252272, 180309 252619, 179991 252761, 179635 252786, 179158 252745, 178993 252659, 178819 252631, 178285 252679, 178011 252616, 177765 252799, 177032 252807, 176678 252777, 176587 252672, 176644 252582, 176551 251910, 176385 251939, 176384 252470, 176322 252601, 176034 252784, 175287 252849, 174840 252792, 174701 252228, 174586 251505, 174604 251129, 174681 250766, 174725 250161, 174681 249397, 174663 249331, 174566 249764, 174590 249888, 174536 250750, 174579 251153, 174556 251504, 174391 252178, 174164 252775, 173480 252752, 173102 252597, 172804 252019, 172756 251690, 172715 250338, 172713 248030, 172684 246944, 172634 245798, 172641 242482, 172615 241970, 172613 241330, 172631 240249, 172620 239695, 172662 237268, 172806 235100, 172885 234184, 172882 233397, 172707 232535, 172651 231755, 172645 230968, 172751 229685, 172799 229328, 172847 228591, 172855 227767, 172823 227034, 172778 226450, 172762 226061, 172700 225441, 172495 221653, 172504 220898, 172530 220515, 172602 216618, 172653 215894, 172878 215187, 172822 214447, 172669 213672, 172627 212808, 172621 212118, 172587 211242, 172649 209574, 172677 208441, 172768 207486, 172798 206804, 172689 206149, 172608 205489, 172597 204980, 172644 202288, 172639 201794, 172671 200979, 172965 200420, 174331 200378, 175382 200325, 175521 200415, 175617 200582, 175625 200760, 175706 201026, 175651 201114, 175680 201312, 175634 201381, 175615 201859, 175644 201951, 175614 202218, 175575 203004, 175578 203723, 175516 204000, 175584 204264, 175524 204440, 175605 204348, 175777 203193, 175826 203120, 176113 201556, 176140 200783, 176114 200457, 176167 200338, 176349 200250, 175637 200251, 175226 200103, 174785 200214, 174172 200171, 173994 200115, 173882 200011, 173884 199821, 173793 199248, 173788 198935, 173703 199307, 173501 199811, 173357 200047, 172639 200073, 172378 199984, 172224 199511, 172170 198194, 172137 195413, 172176 193338, 172119 191158, 172054 187393, 172057 186870, 172036 185993, 172073 185078, 172129 184388, 172189 183359, 172216 182302, 172208 181125, 172221 178730, 172210 176775, 172231 175534, 172267 174376, 172262 172921, 172239 170735, 172203 169588, 172202 167958, 172191 166877, 172201 166203, 172196 165276, 171870 165083, 172041 165793, 172041 166608, 171922 168997, 171936 169941, 171995 171091, 172011 171708, 171998 173158, 171981 173723, 171972 176018, 171825 176754, 171734 177109, 171643 179584, 171689 179975, 171855 181765, 171866 183058, 171862 185335, 171827 186629, 171810 189678, 171759 190868, 171749 191761, 171769 192412, 171870 193059, 171818 194159, 171805 195064, 171776 195798, 171807 197028, 171810 197823, 171702 200589, 171527 200988, 171282 201197, 170878 201112, 170748 200943, 170637 200468, 170606 199761, 170485 199097, 170398 198096, 170147 195995, 169904 194659, 169820 193608, 169635 192700, 169572 192675, 169590 192497, 169416 191812, 169039 190460, 168993 189801, 168981 189038, 168917 188423, 168854 187624, 168853 187042, 168820 187023, 168822 186492, 169143 184469, 169187 184283, 169319 182983, 169440 182430, 169546 181748, 169720 181049, 169934 180331, 169947 180341, 170242 179774, 170459 179098, 170473 178728, 170531 178059, 170629 177335, 170692 175832, 170709 174978, 170334 174970, 170275 175821, 170263 176459, 170225 176995, 170189 177750, 170169 178424, 170011 179086, 169760 179791, 169625 179913, 169462 180256, 169324 180680, 169129 181719, 168989 182303, 168917 182962, 169041 183620, 168780 185352, 168621 186326, 168534 186946, 168426 188096, 168426 188457, 168363 189889, 168440 191006, 168354 191179, 168493 191259, 168709 191262, 168923 191370, 169094 191861, 169201 192267, 169347 192002, 169322 192530, 169388 192819, 169412 193204, 169492 193748, 169706 194835, 169749 195559, 169749 195748, 169913 197223, 170057 199026, 170101 199972, 170111 200629, 170066 200942, 169972 201112, 169714 201226, 168814 201260, 168417 201132, 168260 200874, 167976 199777, 167938 199117, 167871 198892, 167622 197336, 167711 196719, 167752 195863, 167595 195409, 167475 195836, 167374 196800, 167409 197085, 167466 197956, 167531 198410, 167499 198792, 167395 199024, 167444 199662, 167576 200877, 167322 201111, 167019 201215, 166812 201161, 166677 201181, 166459 201073, 166248 200713, 166049 199792, 166067 199042, 166053 198382, 165991 197761, 165955 197119, 165941 196452, 165864 195775, 165540 195125, 165502 194406, 165397 192983, 165324 190513, 165510 190234, 165539 190117, 165776 189438, 166055 188777, 166132 188531, 166355 188127, 166303 187540, 166025 188052, 166001 188304, 165927 188243, 165635 188841, 165197 190051, 165169 190202, 165003 190788, 164970 191492, 164871 192237, 164875 192972, 164933 193830, 165055 194599, 165342 196589, 165340 197102, 165401 197852, 165498 198440, 165525 199073, 165600 199599, 165628 200210, 165669 200767, 165548 201172, 165195 201272, 164990 201267, 164744 201171, 164317 200816, 164067 200069, 164024 198788, 164011 197889, 164005 194421, 163923 191739, 163938 190188, 163932 189662, 163953 187624, 164160 186981, 164467 186372, 164836 185756, 164139 185359, 164066 185726, 163925 185226, 163922 183872, 163912 183337, 163958 179676, 164028 178800, 164034 178512, 164120 176909, 164153 176588, 164195 175391, 164176 174909, 163316 174926, 163347 175589, 163251 176906, 163226 177660, 163257 178411, 163403 180144, 163426 182879, 163368 183543, 163252 184293, 163182 184535, 162984 185459, 162923 186130, 162940 187169, 162938 188497, 163009 189112, 163348 190328, 163406 190993, 163423 192639, 163409 194401, 163351 198629, 163364 199217, 163422 200616, 163413 201410, 163386 202455, 163448 205469, 163441 206093, 163454 206384, 163443 208813, 163396 211235, 163429 214580, 163420 216750, 163365 219741, 163265 220691, 163123 221675, 163124 222612, 163174 223208, 163251 224424, 163313 226065, 163329 226757, 163345 228616, 163379 229447, 163395 230381, 163384 231215, 163357 232219, 163347 233536, 163424 234956, 163402 238135, 163386 238987, 163339 239426, 163106 239665, 162760 239789, 161653 239821, 161301 239669, 160832 239834, 160413 239844, 160180 239799, 160128 239450, 159942 238987, 159928 239457, 159861 239701, 159601 239856, 159273 239867, 159266 239927, 159629 239915, 160535 240006, 160938 239974, 161345 240038, 161770 240882, 162085 240125, 162755 240112, 163121 240436, 163188 240752, 163220 241371, 163268 243838, 163280 245271, 163238 247469, 163286 249665, 163366 254762, 163367 256265, 163324 257168, 163244 258416, 163203 259673, 163206 262495, 163190 264186, 163207 266160, 163171 268244, 163154 268504, 163145 269263, 163176 272989, 163191 273326, 163212 275179, 144700 275179, 144712 274792, 144788 274066, 144821 273493, 144971 273125, 145452 272841, 146023 272792, 147449 272773, 152208 272763, 152233 272660, 151428 272736, 150436 272747, 148039 272748, 147465 272740, 147036 272750, 146271 272747, 145483 272728, 144953 272682, 144742 272539, 144487 271888, 144546 271470, 144366 270992, 144415 270197, 144336 269319, 144316 267943, 144346 266960, 144258 266350, 144256 265823, 144206 264601, 144185 264353, 144209 263538, 144167 262793, 144201 262023, 144342 261209, 144491 260157, 144376 258934, 144323 257514, 144357 256882, 144304 256245, 144343 255728, 144280 255041, 144320 254463, 144225 253872, 144297 253309, 144331 252861, 144410 252545, 144579 252398, 144948 252269, 145544 252201, 145280 252167, 145076 252044, 144901 251719, 144993 250786, 145023 250282, 145028 249478, 144887 248646, 144813 247937, 144746 246839, 144655 245970, 144727 245338, 144765 244394, 144719 243225, 144751 241955, 144703 240863, 144749 239931, 144753 239452, 144873 238461, 145101 237975, 145598 237694, 146728 237624, 147335 237620, 148259 237665, 149032 237659, 149379 237631, 150760 237612, 151269 237641, 152331 237735, 152650 237892, 152578 237426, 152018 237410, 151653 237441, 149515 237459, 148965 237433, 147132 237441, 145669 237418, 145208 237316, 144989 236928, 144764 235880, 144811 235012, 144746 234263, 144774 233253, 145006 233150, 145141 233031, 145194 232160, 144855 231765, 144880 230482, 144899 230226, 144834 229003, 144938 228102, 144856 227504, 144838 225837, 144773 225200, 144792 224635, 144913 224001, 144934 223418, 145065 222888, 145300 222520, 145147 222137, 145097 221641, 145138 221398, 145418 220833, 145251 220111, 145286 219929, 145272 219164, 145495 218163, 145495 217969, 145690 217453, 145328 216644, 145370 215987, 145451 215835, 145372 215699, 145205 214946, 145369 214620, 146051 214564, 146302 214604, 146369 214569, 147387 214580, 148140 214633, 149886 214615, 150346 214704, 150764 214577, 151489 214553, 151493 214270, 150940 214258, 149644 214163, 148337 214234, 147728 214295, 146084 214350, 145501 214350, 145238 214288, 145135 214210, 145023 213887, 145036 213813, 144904 213322, 144849 212450, 144893 211942, 144833 211191, 144866 210552, 144863 209895, 144897 209496, 144867 209022, 144754 208627, 144814 208148, 144828 207584, 144802 206856, 144783 206675, 144753 205673, 144725 205404, 144732 204708, 144761 204416, 144719 203879, 144564 202442, 144609 201648, 144535 200441, 144499 200131, 144494 199487, 144505 199311, 144458 198606, 144557 197874, 144513 197140, 144403 196276, 144470 195060, 144433 194270, 144546 193880, 144564 193258, 144630 192449, 144652 191709, 144613 191304, 144554 190433, 144592 189976, 144587 189361, 144667 188397, 144624 187791, 144595 187560, 144610 186949, 144579 186328, 144631 185986, 144620 185294, 144656 184431, 144678 184255, 144622 183373, 144596 183223, 144504 182183, 144558 181615, 144551 180348, 144660 179762, 144814 179475, 145169 179331, 146039 179297, 145065 179271, 144531 179091, 144407 178927, 144433 177691, 144473 177087, 144453 176806, 144463 176110, 144500 175708, 144519 174628, 144509 174485, 144583 174080, 144550 173417, 144605 172688, 144677 171216, 144669 170950, 144670 169896, 144606 168981, 144454 168276, 144515 167858, 144431 167301, 144478 166037, 144541 165329, 144511 164785, 144530 163830, 144528 163280, 144506 163033, 144514 162422, 144537 161715, 144500 161474, 144517 160325, 144562 160046, 144524 159648, 144631 159280, 144907 158944, 145406 158856, 146707 158822, 147946 158825, 150704 158798, 151042 158785, 152216 158784, 152531 158774, 154217 158779, 155236 158797, 157450 158799, 157489 158547, 157462 157758, 157545 157256, 157540 157003, 157556 156101, 157678 155517, 158121 154939, 158426 154675, 159484 153578, 160022 153054, 160149 152896, 160647 152396, 160994 151837, 161480 151447, 162137 150795, 162499 150550, 162618 150375, 163159 149803, 163258 149667, 163643 149287, 163921 148880, 164078 148762, 164481 148345, 164622 148249, 165028 147716, 165587 147163, 165862 146935, 166385 146451, 166990 145918, 167434 145376, 167940 144884, 168340 144622, 168913 144489, 169160 144497, 169289 144560, 169178 144422, 169131 144264, 170155 143341, 171052 142374, 171511 141958, 172004 141380, 173257 140328, 173472 140044, 173995 139464, 174559 139147, 174750 139134, 175141 139477, 175145 139364, 175575 138849, 176050 138410, 176433 137968, 176845 137616, 177010 137493, 177385 137010, 177829 136529, 178584 135811, 179691 134787, 180110 134382, 180265 134246, 180652 133827, 181157 133346, 181668 132774, 181763 132691, 182239 132223, 182717 131720, 183336 131142, 183690 130735, 184652 129746, 185079 129370, 185646 128839, 186236 128394, 186878 128200, 187900 128249, 188725 128250, 189047 128191, 189338 128211, 189823 128162, 190727 128144, 191524 128170, 192151 128135, 192410 128152), (205036 273709, 205010 274271, 204985 274483, 205015 274774, 205136 274932, 205261 274445, 205274 274168, 205175 273289, 205036 273709), (247820 270238, 247863 270976, 248052 271684, 248027 272433, 248181 272681, 248248 272679, 248238 271456, 248285 270960, 248275 270373, 248213 270297, 248089 270526, 248004 270222, 247893 270155, 247861 269984, 247820 270238), (203773 269999, 203713 270513, 203749 271165, 203815 271517, 203893 271319, 203944 270768, 203950 270268, 203920 269702, 203859 269412, 203773 269999), (191635 271452, 191672 270912, 191644 270827, 191635 271452), (247895 268052, 247426 268749, 247417 269505, 247544 269787, 247736 269505, 247693 269202, 247745 268766, 248162 268118, 248161 267584, 247895 268052), (195319 268434, 195359 268389, 195292 267737, 195319 268434), (195409 264465, 195310 265264, 195376 266003, 195353 266513, 195393 266747, 195322 267369, 195504 267474, 195650 265290, 195490 264773, 195437 264436, 195409 264465), (194064 265183, 194092 265294, 194114 265233, 194083 264660, 194064 265183), (152691 259011, 152712 260009, 152745 260834, 152690 261516, 152724 262290, 152699 263746, 153047 263665, 153026 262962, 152748 262280, 152707 261527, 152808 261253, 152799 261052, 152867 260519, 152883 260094, 152755 259337, 152770 258901, 152711 258436, 152691 259011), (191454 262488, 191405 263188, 191441 263533, 191533 263451, 191507 263183, 191502 262430, 191485 262312, 191454 262488), (195302 261011, 195365 261293, 195377 261710, 195531 262726, 195598 262076, 195488 260965, 195367 260402, 195302 261011), (200531 261940, 200542 262429, 200605 262236, 200586 261856, 200531 261940), (247777 258918, 247752 258941, 247447 259614, 247212 260250, 247121 261304, 247161 261637, 247208 261608, 247213 261545, 247484 260933, 247639 259977, 247742 259677, 247920 259441, 248285 258845, 248195 258163, 247777 258918), (192699 258837, 192728 259018, 192677 259673, 192639 260469, 192621 261201, 192678 261298, 192786 261065, 192758 260906, 192775 260370, 192772 259671, 192789 259519, 192766 258763, 192699 258837), (152745 257572, 152714 258360, 152783 257995, 152825 256945, 152799 256820, 152778 256189, 152745 257572), (192515 256106, 192459 256828, 192500 257377, 192584 256830, 192574 256687, 192590 256108, 192581 255706, 192515 256106), (196796 252899, 196798 253748, 196838 255063, 196814 255286, 196865 255337, 196967 256917, 196969 256531, 197028 256159, 196976 255967, 196975 255342, 197026 255309, 196990 255066, 197005 254441, 196998 254278, 197017 253757, 197003 253099, 196903 252628, 196796 252899), (200886 253409, 200824 254109, 200757 255172, 200733 255873, 200737 256226, 200794 255849, 200913 254730, 200961 253935, 200923 253387, 200886 253409), (192629 254726, 192713 255156, 192987 254712, 192928 254213, 192744 254208, 192629 254726), (246787 250980, 246821 251449, 246777 251695, 246695 251838, 246507 252692, 246457 252763, 246524 253504, 246381 253840, 246336 254141, 246462 254764, 246399 254792, 246479 254893, 246538 254375, 246669 253782, 246749 253503, 246664 253064, 246712 252881, 246849 252725, 247198 251696, 247095 251375, 247208 251145, 246839 250818, 246787 250980), (152779 254035, 152788 253354, 152762 253164, 152779 254035), (152537 249747, 152090 250399, 152174 250996, 152621 251765, 152212 252072, 151954 252128, 151169 252199, 152183 252203, 152595 252360, 152679 252567, 152861 251779, 152859 251633, 152980 250927, 153066 250499, 153066 249565, 152789 249450, 152583 249270, 152537 249747), (147828 252238, 148142 252248, 148898 252226, 147828 252238), (246853 249859, 246813 249993, 246850 250404, 246904 250560, 247249 251097, 247339 250831, 247189 249919, 247135 249786, 246791 249785, 246853 249859), (178949 249400, 178888 250214, 178914 250387, 179007 250405, 179020 250221, 179148 249641, 179078 249303, 178949 249400), (161245 247644, 161320 248226, 161348 248343, 161357 248231, 161332 247638, 161340 247503, 161269 247325, 161245 247644), (177741 247708, 177788 248016, 177871 247793, 177806 246927, 177741 247708), (196884 245487, 196879 246314, 196732 246502, 196475 246571, 196234 246576, 196470 246731, 196691 247210, 196826 246759, 197018 246574, 197335 246494, 197232 246427, 197149 246174, 197128 245885, 197025 245866, 196965 245295, 196884 245487), (161394 246276, 161461 246563, 161459 246072, 161414 246053, 161394 246276), (149054 242941, 149324 243447, 149417 243522, 149540 243510, 149583 243259, 149267 242971, 149121 242920, 149054 242941), (176201 240709, 176253 241344, 176336 241615, 176366 241465, 176280 240577, 176202 240214, 176201 240709), (195320 240717, 195328 241042, 195454 241364, 195425 240829, 195310 240329, 195317 240242, 195249 240095, 195320 240717), (152796 240421, 152744 240917, 152345 241048, 152523 241164, 152577 241260, 152736 241098, 153037 241025, 153008 240492, 152974 240457, 152747 239959, 152796 240421), (247326 236433, 247284 237082, 247259 237739, 247284 238567, 247246 239359, 247285 240868, 247349 240863, 247353 236162, 247326 236433), (195206 238525, 195304 239021, 195302 239138, 195364 239265, 195336 238952, 195261 238402, 195254 238248, 195166 238022, 195206 238525), (244563 235703, 244596 236416, 244438 237024, 244399 237853, 244393 238480, 244447 239121, 244481 238867, 244514 238280, 244503 237869, 244566 237278, 244448 237040, 244632 236607, 244648 236319, 244593 235662, 244563 235703), (159948 237680, 159982 237942, 159938 238326, 159999 238691, 160067 238716, 159962 238322, 160061 237977, 159996 237584, 160046 237300, 159936 237120, 159948 237680), (202126 237510, 202097 237640, 202203 238333, 202228 237641, 202189 237493, 202126 237510), (159960 232550, 159990 233304, 159933 233925, 159920 234523, 159967 235323, 159954 235923, 159978 236439, 160021 236615, 159943 237075, 160109 236830, 160119 235214, 160131 234678, 160106 233665, 160061 233304, 160076 232670, 160042 232155, 159960 232550), (174626 236039, 174665 236339, 174709 235883, 174670 235705, 174626 236039), (195122 236194, 195104 235803, 195020 235516, 195122 236194), (174867 234131, 174826 234502, 174883 234818, 174920 234315, 174993 233799, 174867 234131), (194902 233254, 194959 234032, 194964 234370, 195114 234599, 195110 234054, 194977 233503, 195023 232980, 194902 233254), (200547 234235, 200588 234521, 200566 233909, 200547 234235), (244623 232450, 244678 233094, 244659 233424, 244772 233575, 244779 232785, 244629 232298, 244623 232450), (200226 232669, 200254 233503, 200286 233571, 200419 233377, 200321 233209, 200320 232514, 200249 232225, 200226 232669), (194858 231416, 194864 231721, 194941 232087, 194931 232411, 195061 232650, 195009 231489, 194997 230977, 194759 230017, 194858 231416), (194729 227865, 194791 228546, 194781 228793, 194844 229292, 194947 229670, 194924 229310, 194755 227846, 194639 226573, 194729 227865), (204060 225066, 203953 225846, 203876 226534, 204025 227467, 204010 227792, 204130 228345, 204241 226660, 204247 225857, 204102 225142, 204057 224673, 204060 225066), (200033 223536, 200048 224065, 200116 223701, 200099 223374, 200033 223536), (194475 219745, 194495 220662, 194467 221792, 194496 222933, 194567 221934, 194572 220917, 194546 220717, 194613 220247, 194528 219620, 194475 219745), (203725 220115, 203774 220787, 203791 221321, 203825 221565, 203861 222286, 203934 222612, 204062 222140, 203999 221846, 203915 220985, 203878 220783, 203887 220252, 203776 219454, 203725 220115), (201298 221541, 201362 221761, 201372 222338, 201415 222430, 201475 222213, 201546 221384, 201472 221267, 201298 221541), (174162 219334, 174126 219861, 174239 220399, 174480 220660, 174352 220066, 174225 219396, 174181 219267, 174162 219334), (201193 219122, 201168 219514, 201200 220274, 201219 220470, 201362 219511, 201420 218673, 201331 218508, 201144 218358, 201193 219122), (203389 217451, 203471 217572, 203424 218122, 203458 218269, 203438 218792, 203486 219300, 203620 218781, 203602 218108, 203568 217854, 203520 216948, 203389 217451), (201078 216815, 201097 217629, 201189 216818, 201215 215795, 201078 216815), (205557 213368, 205409 213545, 205454 215387, 205594 217406, 205563 215981, 205564 214747, 205591 214111, 205653 213367, 205557 213368), (177745 215035, 177806 215615, 177805 216457, 177795 216644, 177837 217182, 177856 217289, 177888 217125, 177959 216442, 177996 215740, 178055 215568, 178122 215013, 178034 214506, 177874 214443, 177745 215035), (204629 192513, 204789 192612, 204698 193219, 204734 193435, 204702 193922, 204690 194622, 204616 194850, 204560 195316, 204431 195451, 204294 196007, 204364 196707, 204346 197246, 204353 197399, 204281 198322, 204267 198670, 204210 199233, 204217 199400, 204117 200062, 204067 200580, 203882 202121, 203710 203669, 203637 204884, 203606 205027, 203665 205548, 203580 206130, 203486 206192, 203601 206454, 203604 206621, 203724 207598, 203558 207788, 203521 207896, 203574 208957, 203409 209336, 203330 210102, 203298 210302, 203263 210834, 203206 211147, 203029 212911, 203021 213573, 203066 214188, 203118 214640, 203103 214999, 203155 216125, 203197 216355, 203244 217163, 203460 216770, 203374 216443, 203455 215954, 203390 215424, 203380 214704, 203358 214253, 203364 212436, 203415 211733, 203413 211475, 203458 210841, 203429 210627, 203496 210126, 203683 209329, 203710 208798, 203795 207944, 203866 207445, 203914 206221, 204116 206085, 204419 206039, 204287 205881, 204189 205314, 204186 204456, 204212 203960, 204234 203212, 204231 203023, 204251 202496, 204259 201860, 204295 201234, 204468 199271, 204480 198975, 204529 198277, 204518 198097, 204618 197397, 204670 196723, 204724 195779, 204719 195157, 204732 194519, 204841 193926, 204892 193228, 204818 192278, 204629 192513), (201332 213488, 201216 214893, 201249 215252, 201418 215112, 201576 214854, 201581 214772, 201362 214145, 201381 213568, 201373 213489, 201393 212892, 201332 213488), (231855 213838, 232042 214241, 232111 214015, 232014 213356, 232010 213097, 231947 213039, 231855 213838), (173883 212862, 173949 213705, 173969 213807, 173983 213705, 173979 213057, 173901 212139, 173883 212862), (177959 211937, 178042 212199, 178052 212024, 177984 211672, 177959 211937), (201697 186599, 201810 187800, 201930 188294, 202005 188835, 202001 189527, 202165 190777, 202230 191137, 202268 192156, 202397 193290, 202394 193956, 202444 194359, 202483 194858, 202522 195589, 202532 196243, 202553 196736, 202545 198545, 202514 199297, 202542 199510, 202457 200022, 202408 201040, 202492 201511, 202376 201316, 202332 201718, 202405 202044, 202292 201923, 202263 202005, 202169 203287, 202266 203573, 202110 203588, 202229 204020, 202062 204020, 202187 204431, 202066 204518, 201988 205600, 202004 206023, 201921 206286, 201597 206394, 201690 206568, 201747 206850, 201764 207274, 201728 207962, 201660 210734, 201562 211477, 201685 211631, 201636 211846, 201741 211683, 201810 211204, 201859 210593, 202006 209355, 202220 208074, 202220 207725, 202265 206955, 202202 206795, 202231 206473, 202349 206212, 202398 206191, 202237 205691, 202365 205386, 202335 205033, 202117 204646, 202354 204830, 202444 204830, 202292 204453, 202378 204439, 202358 204097, 202398 204095, 202425 203787, 202388 203665, 202439 203644, 202602 201566, 202681 201162, 202733 200585, 202773 200395, 202824 199646, 202855 199392, 202885 198580, 202910 198160, 202908 196684, 202893 196245, 202887 195342, 202871 194840, 202715 193253, 202644 192276, 202529 191475, 202346 189463, 202271 189340, 202296 189114, 202153 188464, 202170 188121, 202097 187502, 202032 186823, 201848 186256, 201798 185521, 201758 185236, 201697 186599), (175123 211263, 175213 211653, 175328 211270, 175250 210420, 175123 211263), (191878 211554, 191958 211491, 191994 211024, 191880 210838, 191878 211554), (230714 210796, 230767 211008, 230781 210505, 230714 210796), (176990 204502, 176940 205311, 176947 205408, 176925 206477, 177046 207636, 177156 208109, 177241 208800, 177365 209592, 177480 210448, 177595 210814, 177673 210355, 177497 209586, 177401 209085, 177438 208829, 177244 208104, 177341 207506, 177263 206697, 177242 205648, 177247 205043, 177116 204391, 177252 204261, 177056 204066, 176990 204502), (161338 208376, 161504 209268, 161292 209950, 161264 210277, 161337 210319, 161347 210115, 161538 209315, 161508 208543, 161381 208109, 161338 208376), (230550 209397, 230559 210069, 230622 209388, 230587 209221, 230550 209397), (232369 207814, 232334 208618, 232362 208794, 232389 208618, 232377 207931, 232537 207237, 232369 207814), (174980 208087, 175013 208695, 175121 208086, 175097 207710, 174980 208087), (179328 205404, 179344 206018, 179391 206519, 179395 206664, 179447 207196, 179455 207554, 179574 207753, 179599 207342, 179560 206667, 179544 206184, 179480 205277, 179401 205080, 179328 205404), (175206 205931, 175141 206823, 175164 206895, 175287 206705, 175239 206559, 175301 205791, 175297 205180, 175206 205931), (205643 205960, 204785 206043, 204991 206128, 205270 206463, 205343 206846, 205426 206352, 205656 205998, 206181 205952, 205643 205960), (200443 205602, 200445 206148, 200346 206395, 201033 206344, 200857 206173, 200655 205888, 200528 205498, 200443 205602), (177337 202292, 177391 202631, 177236 203159, 177172 203730, 177301 204178, 177353 203506, 177277 203232, 177455 202995, 177539 202335, 177488 202039, 177548 201787, 177451 201590, 177337 202292), (177624 200894, 177540 201156, 177746 201129, 177770 200710, 177624 200894), (176853 200021, 176561 200223, 177253 200212, 177529 200413, 177781 200372, 178070 200150, 178446 200118, 178358 200051, 178155 200031, 178051 200123, 177708 200223, 177279 200225, 177030 200080, 176872 199767, 176853 200021), (178907 200202, 179009 200307, 179076 200257, 179374 200244, 179472 200191, 178907 200202), (200171 193180, 200213 193482, 200195 194026, 200211 194285, 200228 195005, 200246 195284, 200261 195987, 200356 196947, 200376 197546, 200456 198481, 200543 198705, 200572 198651, 200565 197975, 200488 196318, 200483 195517, 200460 195296, 200430 194445, 200413 193539, 200358 193363, 200275 192835, 200286 192697, 200221 192522, 200171 193180), (176812 193659, 176864 194592, 176874 195613, 176971 196715, 176976 196864, 177057 197569, 177069 196930, 177064 196659, 177091 195390, 177042 194852, 176988 193663, 176868 192934, 176812 193659), (246067 195478, 246190 196451, 246274 196027, 246253 195475, 246067 195478), (167917 193899, 168024 194534, 167787 194513, 167760 195004, 167683 195209, 167859 195517, 168054 194591, 168043 194055, 168057 193916, 167970 193470, 167917 193899), (246011 189379, 246017 189859, 245967 190238, 245989 192001, 246038 191929, 246004 192086, 246046 192488, 245999 192743, 245981 193861, 246049 193860, 245999 194065, 246030 194462, 245982 194731, 246050 195333, 246244 194702, 246276 194018, 246283 193352, 246210 189725, 246209 189186, 246168 188699, 246011 189379), (173983 193717, 173987 194337, 173974 194534, 174022 194738, 174084 194311, 174110 193810, 174145 193393, 174090 192595, 173983 193717), (227777 193488, 227762 193676, 227823 193903, 227873 193403, 227777 193488), (191669 192716, 191517 193694, 191608 193873, 191769 193456, 191786 192603, 191744 192556, 191669 192716), (168097 192552, 168134 193105, 168062 193237, 168188 193392, 168207 193254, 168118 192399, 168097 192552), (160322 177695, 160281 178342, 160303 178887, 160456 180921, 160578 183057, 160643 184726, 160680 188122, 160621 188822, 160569 189240, 160539 189870, 160671 190500, 160782 191143, 160870 192031, 160918 193203, 160974 193114, 160964 193021, 161028 192444, 161029 192171, 161098 191577, 161120 191124, 161248 189994, 161273 189851, 161053 188224, 161040 185390, 160923 182027, 160880 181298, 160793 179031, 160712 178071, 160660 177692, 160655 177221, 160609 176351, 160255 176336, 160322 177695), (204546 190576, 204557 191442, 204583 191810, 204605 192495, 204816 191680, 204779 190232, 204761 189896, 204546 190576), (168227 191871, 168307 192046, 168332 191877, 168278 191366, 168227 191871), (193242 189697, 193301 190202, 193304 190998, 193381 191689, 193421 190835, 193353 190273, 193352 189703, 193368 189478, 193316 189140, 193354 188849, 193214 188735, 193242 189697), (204412 186998, 204392 187709, 204616 187819, 204515 188361, 204546 188582, 204536 189624, 204615 189031, 204623 188913, 204711 188347, 204709 187667, 204686 187532, 204402 187664, 204450 186995, 204427 186894, 204412 186998), (152945 188667, 153137 188664, 153138 188236, 152929 188115, 152945 188667), (193344 187964, 193330 188083, 193420 188317, 193366 187678, 193368 187414, 193267 187155, 193344 187964), (248032 178717, 248068 182641, 248043 183307, 247931 184522, 247948 185177, 248109 185974, 248169 186978, 248258 187785, 248276 188309, 248320 187663, 248258 187013, 248364 186325, 248387 185607, 248313 184914, 248298 183805, 248266 183433, 248314 183077, 248312 182380, 248283 181944, 248321 181262, 248372 181020, 248359 180124, 248375 179914, 248267 179322, 248303 178877, 248202 177880, 248246 177403, 248255 176508, 247968 176503, 248032 178717), (166399 187422, 166368 188107, 166676 187490, 166678 186793, 166399 187422), (245582 176486, 245651 177190, 245711 178724, 245675 179822, 245729 181530, 245810 183302, 245876 184141, 245980 186304, 245998 187839, 246061 187255, 246082 186650, 246007 185171, 246006 184920, 245957 184264, 246006 183220, 245974 182608, 245935 182229, 245958 180969, 245920 179906, 245871 177794, 245810 176481, 245582 176486), (238998 187574, 239100 187565, 239199 187404, 239068 186936, 238998 187574), (167197 184511, 167136 185099, 167026 185765, 166903 186666, 166691 186784, 166808 187211, 166974 186850, 167051 186563, 167234 186150, 167399 185539, 167452 184862, 167426 184401, 167327 184231, 167197 184511), (205785 184863, 205830 186461, 205873 187081, 205918 187081, 205899 186932, 205961 186463, 205950 186069, 205967 185548, 205956 184687, 205901 184369, 205785 184863), (240213 184281, 240226 184468, 240173 184992, 240203 185477, 240320 186232, 240310 186336, 240434 186647, 240443 186415, 240323 185477, 240460 185286, 240580 185277, 240546 184990, 240421 184466, 240457 183919, 240213 184281), (237962 185970, 237970 185728, 237942 185445, 237962 185970), (239141 185577, 239184 185719, 239180 185599, 239111 185088, 239080 184946, 239141 185577), (168656 175857, 168541 176320, 168514 176614, 168322 177042, 168013 178161, 167993 178403, 167854 178746, 167636 179511, 167603 179713, 167442 180155, 167439 180272, 167414 180221, 167212 180790, 167174 181046, 167034 181263, 166883 181694, 166596 182303, 166434 182582, 166333 182961, 166234 183021, 165831 183918, 165797 184112, 165766 184059, 165522 184538, 165548 185099, 165456 184911, 165392 184987, 165317 184901, 165215 184932, 165153 185159, 165214 185536, 165445 185428, 165615 185223, 165661 184996, 165715 184968, 165903 184450, 166096 184132, 166440 183371, 166448 182827, 166549 183122, 166624 183044, 166736 182748, 166715 182112, 166814 182569, 167014 182115, 167014 181652, 167100 181929, 167313 181489, 167330 181334, 167393 181269, 167586 180656, 167805 180049, 168198 178657, 168646 176968, 168744 176350, 168809 175806, 168656 175857), (235958 184195, 236025 184822, 236072 184841, 236007 184193, 235982 184130, 235958 184195), (200200 183488, 200221 184186, 200256 184468, 200284 184187, 200285 183440, 200248 182728, 200214 182292, 200200 183488), (203055 183103, 203137 183828, 203247 182992, 203191 182226, 203055 183103), (258533 170918, 258025 171330, 257788 171452, 257414 171507, 256839 170956, 256603 170919, 256473 170770, 256332 171086, 256204 171849, 255715 171684, 255670 172206, 255653 172793, 255618 172847, 255658 173119, 255583 173732, 255475 174054, 255295 174277, 254850 174558, 254780 174663, 254969 174779, 255067 174947, 255236 175551, 255295 176183, 255343 176384, 255303 176971, 255432 177401, 255425 177902, 255510 178385, 255388 178802, 255464 179162, 255470 179407, 255560 179798, 255526 179989, 255543 180351, 255431 180723, 255455 181322, 255385 181681, 255403 182070, 255117 182498, 255109 182618, 255361 182749, 255601 182955, 255757 183221, 255790 183615, 256079 183112, 256258 182590, 256586 181933, 256790 181621, 256997 180892, 257317 180079, 257886 178809, 258777 177069, 259277 175973, 259656 175502, 259236 175306, 259070 175286, 258869 174878, 258701 174277, 258968 174208, 259157 174066, 259271 173487, 259444 173474, 259634 173272, 259681 173150, 259486 173050, 259656 172717, 259608 172244, 259478 171605, 259052 171337, 258519 171708, 258832 171267, 258915 171018, 258660 170768, 258533 170918), (201861 177762, 201867 178156, 201835 178686, 201833 178882, 201794 179385, 201651 182144, 201669 182837, 201740 183339, 201890 182844, 201986 182649, 202070 182154, 202068 181295, 201938 180771, 201967 180080, 201949 179726, 201975 178819, 201973 177982, 201927 177659, 201861 177762), (238931 181210, 238902 181830, 239014 182746, 239133 183246, 239189 182970, 239193 182225, 239114 181437, 238996 181006, 238931 181210), (205659 182818, 205678 183225, 205700 182816, 205710 182108, 205688 182073, 205659 182818), (240796 179333, 240742 180040, 240759 180509, 240717 180734, 240816 180934, 240854 180860, 240908 180041, 240900 179524, 240942 179011, 240858 178840, 240796 179333), (177399 179315, 177377 179795, 177502 180666, 177523 180577, 177589 179765, 177580 179330, 177490 179103, 177399 179315), (222126 170842, 221864 171589, 221631 171917, 221550 172352, 221573 172952, 221458 172458, 221306 172540, 221165 173188, 221037 173490, 220858 174300, 220584 175435, 220495 175930, 220421 176737, 220392 177698, 220459 178429, 220579 179130, 220803 179481, 220888 179446, 220945 179031, 220969 177724, 221068 176226, 221093 176086, 221145 175469, 221278 174561, 221424 173765, 221580 173322, 221848 172424, 222158 171683, 222389 171017, 222409 170981, 222583 170184, 222569 170074, 222126 170842), (146545 179301, 147300 179320, 148040 179387, 149250 179445, 150186 179400, 150829 179335, 152323 179294, 146545 179301), (193894 158758, 194101 159394, 194125 160080, 194232 160696, 194422 161415, 194543 162007, 194647 162635, 194684 163761, 194834 164468, 194859 165026, 194780 166345, 194786 166496, 194674 167512, 194554 169229, 194468 170111, 194419 171120, 194345 171770, 194333 172468, 194319 172646, 194358 173428, 194491 174210, 194850 175751, 195009 176484, 195203 177022, 195306 176877, 195290 177339, 195406 178197, 195536 179026, 195734 178444, 195601 177833, 195535 177163, 195442 176462, 195357 176131, 195234 175979, 195235 175739, 195184 175189, 195184 174192, 195167 174025, 195233 173803, 195382 172640, 195504 171887, 195679 171147, 195630 170616, 195848 170517, 195932 169967, 196126 169095, 196397 168346, 196470 167670, 196331 167448, 196265 167488, 196243 167651, 196303 168233, 196079 168038, 195967 168297, 195957 168611, 196037 169002, 195838 169377, 195741 169689, 195820 170368, 195560 170270, 195502 170434, 195446 171136, 195255 171468, 195111 171867, 195017 172529, 195073 172914, 194937 172681, 194753 172629, 194630 171867, 194630 171524, 194571 171116, 194623 170297, 194756 168962, 194777 168624, 194869 168001, 194925 167316, 195097 166768, 195202 166255, 195260 165024, 195216 164441, 195274 163821, 195240 163319, 195152 162771, 195010 161757, 194830 160639, 194641 159993, 194554 159613, 194441 159384, 194218 158784, 194125 159258, 194167 158676, 194032 158467, 193954 158104, 193894 158758), (166078 177081, 165946 177692, 165681 177884, 165377 178407, 165384 178732, 165532 178813, 165874 178488, 166090 177880, 166175 177499, 166316 177266, 166160 177007, 166078 177081), (164890 176516, 164768 177123, 165082 177518, 165165 177124, 165193 176268, 164890 176516), (166807 174942, 166956 175417, 166714 175959, 166809 176042, 166649 176136, 166468 176642, 166470 177036, 166648 176672, 166980 176109, 167272 175438, 167085 174939, 166807 174942), (235715 175711, 235729 175444, 235683 175206, 235715 175711), (227303 174676, 227619 175674, 227654 175678, 227649 175564, 227320 174674, 227325 174481, 227303 174676), (168707 175489, 168839 175586, 168854 175667, 168945 175529, 169157 174991, 168729 174976, 168707 175489), (205286 171819, 205320 171880, 205271 172498, 205313 172735, 205373 173344, 205382 173868, 205474 174524, 205753 174620, 205666 173866, 205550 173522, 205465 172990, 205456 172494, 205345 171756, 205286 171819), (178350 172158, 178242 172939, 178249 173688, 178208 174287, 178412 173869, 178279 172969, 178480 172706, 178487 172046, 178377 171628, 178350 172158), (237360 173322, 237505 173849, 237453 173155, 237302 172512, 237360 173322), (227078 173082, 227107 173181, 227176 172962, 227160 172650, 227078 173082), (217503 169812, 217635 171074, 217845 170628, 217774 169808, 217664 169389, 217545 169375, 217503 169812), (219779 163326, 219640 163961, 219537 164592, 219285 165202, 218969 165841, 219017 166492, 219222 167783, 219487 168474, 219692 168836, 219784 169088, 219855 169487, 219882 170099, 220301 170549, 220462 170622, 220535 170597, 220829 170670, 221236 170448, 221336 169889, 221498 170039, 221654 169829, 222183 168514, 222235 167581, 222189 167237, 222198 166618, 222249 165872, 222345 165544, 222350 165379, 222037 164844, 221561 164634, 221518 165196, 221813 165589, 221999 166064, 222073 166531, 222055 167085, 221824 167044, 221775 167101, 221777 167200, 221670 167434, 221610 168087, 221720 168135, 221963 168039, 221899 168447, 221757 169076, 221577 169608, 221347 169394, 221306 169481, 220901 169568, 220485 169265, 220394 168998, 220252 168767, 220174 168538, 220012 168298, 219988 168322, 219704 167337, 219641 166826, 219476 166491, 219522 165863, 219731 165675, 219900 164901, 219947 164332, 220045 163681, 220111 163400, 220013 162958, 219779 163326), (235937 169403, 235965 170155, 235951 170303, 236003 170610, 236061 169829, 236112 169590, 235998 169206, 235937 169403), (203458 167700, 203481 167968, 203501 168683, 203572 169057, 203674 169725, 203676 169945, 203781 170386, 203785 169063, 203909 168389, 203845 168001, 203763 167879, 203731 167696, 203546 167351, 203458 167700), (230683 167098, 230778 167914, 230760 168585, 230882 169752, 230904 169394, 230928 168593, 230966 168195, 230925 167920, 231063 167254, 231089 166580, 231060 166387, 230817 166263, 230683 167098), (218495 160812, 218265 161492, 218154 162217, 218059 162440, 217706 163556, 217593 164302, 217443 164995, 217396 166403, 217422 167185, 217394 167740, 217425 168705, 217527 169030, 217617 168835, 217714 168819, 217824 166297, 217870 165604, 217937 165075, 218096 164236, 218163 163806, 218338 162981, 218439 162273, 218624 161575, 218833 160879, 218765 160110, 218495 160812), (236086 168476, 236223 169027, 236253 168386, 236305 168094, 236154 167736, 236086 168476), (236264 166544, 236291 167308, 236367 167670, 236429 166934, 236298 166513, 236294 166388, 236264 166544), (223076 162100, 223021 162782, 223037 163429, 223197 164063, 223257 164516, 223436 164774, 223415 166053, 223502 166137, 223517 166305, 223539 166070, 223464 163658, 223421 163480, 223440 163398, 223336 162171, 223262 161484, 223076 162100), (232541 165988, 232596 166130, 232622 166057, 232564 165363, 232541 165988), (220949 164694, 220789 164670, 220612 164790, 220521 165025, 220539 165374, 220937 165327, 221176 165443, 221356 165234, 221330 164566, 220949 164694), (226865 164644, 226900 164841, 226953 164611, 226930 163888, 226865 164644), (187346 162874, 187285 163687, 187311 163860, 187404 163878, 187417 163694, 187544 163114, 187474 162776, 187346 162874), (230212 158456, 230241 158757, 230346 159318, 230338 159844, 230372 160030, 230438 160750, 230636 161195, 230681 161668, 230750 161914, 230710 162529, 230738 162738, 230789 163301, 230865 163423, 230889 163195, 230823 163077, 230900 162525, 230781 161858, 230771 161283, 230721 160870, 230547 160522, 230606 160310, 230481 159816, 230414 158991, 230414 158446, 230348 157875, 230114 157761, 230212 158456), (228120 161635, 228100 161942, 228153 162740, 228201 162848, 228270 162606, 228271 162450, 228319 161932, 228233 161435, 228120 161635), (223104 155174, 223034 155481, 222955 155977, 222908 156554, 222903 156791, 222756 157603, 222817 158173, 222864 158406, 222806 158803, 222702 159970, 222766 160712, 222894 161423, 222914 161681, 222986 161888, 223247 161352, 223199 160674, 223104 159936, 222996 159541, 223093 158709, 223108 158408, 223166 157909, 223248 157615, 223225 157050, 223177 156808, 223227 155977, 223187 155358, 223251 154814, 223143 154483, 223104 155174), (186137 161181, 186185 161489, 186265 161271, 186212 160434, 186203 160400, 186137 161181), (219212 148112, 219056 148171, 219158 148838, 219252 149594, 219421 150333, 219451 150537, 219614 151079, 219667 151837, 219962 152602, 220111 153272, 220143 153369, 220155 153990, 220109 154725, 220126 154915, 220007 155462, 219990 155682, 219883 155920, 219612 157178, 219603 157715, 219429 157685, 219231 158673, 219016 159400, 218965 159988, 218786 160102, 218911 160536, 219005 160168, 219056 159628, 219260 159303, 219659 157982, 219843 157218, 219855 156857, 220004 156550, 220213 155712, 220540 154609, 220637 154132, 220606 153351, 220490 152509, 220318 151816, 220131 150250, 220117 149806, 219986 149559, 219808 149909, 219697 149816, 219614 149818, 219496 150119, 219509 149546, 219295 148816, 219280 148517, 219352 147926, 219212 148112), (196058 158301, 196022 158995, 196055 159659, 196253 160095, 196326 159612, 196509 158900, 196426 158246, 196273 157655, 196058 158301), (228030 157793, 227963 158221, 227995 158497, 227984 159128, 227992 159503, 228091 158663, 228085 158498, 228116 157879, 228101 157687, 228030 157793), (193677 158129, 193789 158467, 193915 158060, 193705 157826, 193677 158129), (200929 156442, 200968 157300, 200986 158241, 201019 158442, 201037 158139, 201020 157423, 201055 156501, 200971 156105, 200929 156442), (177708 156818, 177792 157399, 177839 158097, 177874 158333, 177971 157741, 177946 157403, 178087 156465, 177708 156818), (195386 151562, 195343 152115, 195387 152268, 195499 152813, 195532 153308, 195663 154129, 195671 154648, 195722 155010, 195781 155665, 195880 156264, 196004 156014, 195902 156399, 195979 156975, 196042 157905, 196157 157620, 196246 157505, 196136 156956, 196173 156285, 196209 156006, 196191 155619, 196066 155206, 196130 154957, 196085 154499, 196007 154348, 195735 154968, 195952 154295, 195905 153904, 195973 153598, 196009 152885, 195905 152259, 195860 152303, 195889 152185, 195712 151694, 195558 151952, 195677 151509, 195568 150836, 195386 151562), (229914 156253, 230112 157752, 230305 157636, 230283 157048, 230314 156980, 230190 156078, 230207 155189, 229881 154868, 229914 156253), (221501 156486, 221473 156776, 221533 157258, 221633 156637, 221573 156277, 221501 156486), (213110 156703, 213168 157031, 213154 156629, 213098 156060, 213104 155937, 213022 155323, 213110 156703), (193971 153598, 193901 153875, 193909 154041, 193898 154576, 193909 155438, 194030 155754, 194108 155741, 194081 155931, 194319 156763, 194456 156542, 194501 155854, 194475 155364, 194421 155188, 194274 154511, 194115 153850, 194133 153465, 193971 153598), (218434 155483, 218444 155599, 218351 156207, 218353 156510, 218397 156333, 218487 155433, 218434 155483), (228164 155664, 228272 155927, 228389 155674, 228365 155114, 228144 155044, 228164 155664), (190963 154745, 190977 154955, 191154 155612, 191153 154950, 191125 154659, 191017 154600, 190963 154745), (184597 154183, 184649 154817, 184733 155088, 184763 154938, 184676 154051, 184598 153689, 184597 154183), (192213 153409, 192307 154141, 192561 154792, 192624 154390, 192560 153772, 192436 153133, 192282 152921, 192213 153409), (228154 154701, 228263 154148, 228431 153416, 228296 153280, 228154 154701), (218220 153687, 218304 154615, 218424 154134, 218369 153474, 218220 153687), (223373 152823, 223288 153557, 223168 154280, 223381 154023, 223432 153565, 223615 152702, 223373 152823), (218111 152662, 218167 153135, 218269 152674, 218273 152443, 218206 152352, 218111 152662), (204852 149584, 204828 150158, 204792 150655, 204774 151383, 204817 151740, 204799 151992, 204882 152395, 204987 150616, 204937 149875, 204959 149705, 204879 149236, 204852 149584), (191697 151159, 191764 151476, 191807 151160, 191734 150929, 191697 151159), (197142 150685, 197357 151127, 197295 150551, 197142 150685), (194175 147495, 194379 148265, 194486 148948, 194589 149698, 194628 150295, 194656 150463, 194678 150289, 194906 149978, 195050 149985, 195158 149890, 195272 150176, 195332 150974, 195511 150834, 195372 150787, 195465 150139, 195444 149915, 195270 149470, 194921 147859, 194646 147410, 194613 147224, 194175 147495), (212526 145417, 212571 146128, 212608 147073, 212644 147679, 212664 148225, 212692 148634, 212714 149494, 212881 150757, 212848 149731, 212864 149196, 212797 148564, 212744 146917, 212719 146481, 212709 145928, 212683 145245, 212645 144610, 212548 144488, 212526 145417), (201959 148238, 201992 148884, 202045 149539, 202038 149687, 202093 149797, 202148 149544, 202135 149405, 202146 148890, 202111 148101, 202040 147922, 201959 148238), (222829 148562, 222880 149026, 222953 148750, 222946 147929, 222849 147832, 222829 148562), (204982 147994, 205001 148370, 204927 148890, 205114 148848, 205171 148118, 205145 147716, 205045 147259, 204982 147994), (196470 147739, 196661 147870, 196600 147355, 196517 146912, 196292 146736, 196470 147739), (205188 146384, 205271 146845, 205310 146191, 205229 145880, 205188 146384), (196238 146293, 196287 146689, 196369 146225, 196238 146293), (192471 134099, 192609 134100, 192605 133602, 192463 133570, 192471 134099)), ((232817 218826, 233139 219181, 233371 219924, 233416 220288, 233455 222188, 233456 225888, 233502 227922, 233535 228825, 233520 233026, 233428 233816, 233046 234687, 233131 235107, 233475 235496, 233552 235786, 233549 237992, 233501 242055, 233437 242926, 233389 244145, 233298 245783, 233276 246329, 233283 247071, 233345 247679, 233451 248346, 233518 249069, 233535 250867, 233395 251242, 233273 251074, 233042 251250, 232937 251060, 232647 251116, 232249 251009, 232054 250893, 231996 250937, 231693 250809, 231593 250502, 231410 250251, 231339 249977, 231320 249556, 231122 248714, 231031 248215, 230936 247996, 230779 248503, 230821 249002, 230808 249195, 230957 249907, 230956 250481, 231411 251029, 231886 251268, 232314 251606, 232706 251763, 233163 252081, 233170 251960, 233322 251816, 233360 252215, 233395 252991, 233347 253727, 233311 254887, 233345 256308, 233446 258234, 233437 258520, 233452 259029, 233296 259250, 233197 259486, 232848 259009, 233004 258275, 232957 257933, 232604 258279, 233074 259783, 233208 260525, 233435 261285, 233589 262069, 233667 264259, 233676 264803, 233628 266354, 233593 268692, 233595 269622, 233560 271792, 233506 272493, 233039 272885, 232826 273129, 233270 274506, 233410 275178, 229905 275178, 229821 274224, 229865 273956, 229817 273447, 229724 273659, 229575 274158, 229486 274661, 229468 275178, 227934 275179, 227853 274481, 227814 273920, 227866 273247, 227956 272498, 228056 272166, 228228 271178, 228542 268132, 228575 267889, 228603 267135, 228585 266954, 228681 265721, 228696 265097, 228688 264413, 228713 263710, 228703 262828, 228668 262243, 228701 261471, 228514 260883, 228318 260758, 228241 260751, 227873 260275, 227871 260872, 228010 261395, 228131 261924, 228264 262287, 228318 262646, 228301 263010, 228364 263354, 228359 263716, 228430 264410, 228409 265781, 228327 266721, 228279 267137, 228284 268482, 228212 268993, 228255 269494, 228152 269535, 227976 270480, 227783 271144, 227679 271877, 227606 272181, 227543 272738, 227456 273897, 227385 274300, 227329 274036, 226907 274485, 226839 274473, 226738 274668, 227002 275179, 225500 275178, 225519 274434, 225535 273132, 225587 273084, 225654 273140, 225810 273451, 225928 273303, 226094 273400, 226190 273374, 226317 273208, 226058 272518, 225759 271853, 225517 271187, 225514 270509, 225619 269863, 225701 269181, 225730 267969, 225714 267185, 225648 265978, 225626 264736, 225569 263776, 225501 263269, 225445 262699, 225410 261740, 225376 258908, 225450 258807, 225493 258805, 226059 258351, 226108 258264, 225505 257579, 225348 256863, 225345 255899, 225401 255018, 225462 253677, 225456 253404, 225466 252880, 225387 250932, 225364 249687, 225405 248567, 225402 247755, 225412 247300, 225413 246017, 225548 244959, 225622 244532, 225668 243034, 225706 242324, 225674 241601, 225574 240421, 225539 239714, 225526 237480, 225540 235601, 225569 234484, 225586 231076, 225630 230187, 225648 229191, 225632 228370, 225524 227709, 225577 226444, 225587 225603, 225618 224573, 225583 222646, 225665 219987, 225757 219288, 226080 218851, 226338 218814, 226596 218886, 226731 219534, 226769 219987, 226828 220115, 226867 220117, 227008 221389, 227036 222057, 227178 223189, 227268 224203, 227393 224129, 227338 224409, 227416 224736, 227416 225032, 227486 225420, 227618 225645, 227568 225952, 227626 226462, 227648 226960, 227730 226926, 227653 226925, 227750 226272, 227758 225592, 227571 224760, 227617 224380, 227419 222355, 227355 221360, 227303 220356, 227299 219544, 227327 219139, 227436 218922, 227731 218793, 228634 218752, 228978 218862, 229209 219079, 229505 220272, 229539 221000, 229679 221884, 229802 222080, 229842 222644, 229910 223111, 229890 223372, 230003 223455, 229909 221616, 229970 221015, 229903 220332, 229800 219512, 229896 219029, 230086 218874, 230383 218785, 230794 218801, 231003 218944, 231191 219186, 231357 220109, 231416 220665, 231392 220844, 231381 221588, 231410 222110, 231474 222708, 231517 223615, 231540 224468, 231852 225087, 231917 225719, 231948 226289, 232047 227671, 232064 228375, 232064 228772, 232085 229410, 232077 230183, 232042 230549, 232081 231193, 232272 230592, 232275 230416, 232399 229858, 232522 228610, 232531 227708, 232492 227022, 232412 226357, 232346 225701, 232236 225103, 232235 225045, 232082 223856, 232081 223700, 232029 222711, 231885 221734, 231862 221146, 231839 221024, 231789 220425, 231775 220094, 231724 219559, 231765 219010, 231900 218767, 232384 218732, 232817 218826), (226451 273927, 226495 274125, 226569 274181, 226670 274074, 226708 274327, 226726 273878, 226529 273679, 226451 273927), (230388 271245, 230180 271850, 230101 272572, 230010 272876, 230103 273021, 230171 272576, 230191 271929, 230419 271253, 230405 270628, 230388 271245), (232522 272275, 232336 272421, 232321 272389, 232289 272458, 232538 272737, 232668 272451, 232616 272272, 232522 272275), (231017 266466, 231052 266978, 231008 267125, 231003 267799, 230882 268419, 230908 268579, 230933 268510, 231264 269109, 231348 269545, 231496 269405, 231415 269817, 231521 270525, 231720 271473, 231875 271964, 232010 272176, 232139 272255, 232304 271767, 232134 271409, 231968 270657, 231856 270049, 231814 269742, 231699 269233, 231593 268565, 231405 267639, 231334 266950, 231204 266047, 231017 266466), (230576 263565, 230632 263844, 230699 263777, 230583 263204, 230576 263565), (228655 246251, 228464 246498, 228317 246904, 228197 247690, 228178 248473, 228338 249247, 228379 249660, 228510 250750, 228726 252137, 228864 252903, 228914 253079, 229096 254080, 229137 254216, 229230 254752, 229316 255069, 229290 255365, 229321 255892, 229372 256413, 229574 257719, 229656 258372, 229741 259269, 229855 259977, 230032 260718, 230205 261962, 230181 261464, 230138 260907, 230128 260370, 230077 259750, 230174 258402, 229971 257332, 229802 256214, 229687 255789, 229538 255085, 229416 254246, 229348 253906, 229202 252902, 229179 252673, 229077 251925, 229000 251441, 228911 250705, 228701 248477, 228661 247706, 228743 246585, 228697 246247, 228655 246251), (227542 260216, 227714 260569, 227770 260149, 227523 259902, 227542 260216), (227034 259737, 227239 259578, 226970 259439, 226737 259018, 227034 259737), (226468 258972, 226589 259109, 226640 259118, 226709 258972, 226291 258493, 226468 258972), (226809 252179, 226885 252960, 227096 254419, 227113 254758, 227234 255526, 227248 255865, 227487 256365, 227493 255991, 227365 255303, 227181 253943, 226961 252178, 226798 251410, 226809 252179), (228511 236117, 228364 236482, 228176 237761, 228165 238185, 228067 238876, 227944 239248, 227836 239818, 227736 240476, 227626 240945, 227617 241359, 227494 241219, 227363 241435, 227069 242288, 226919 243022, 226924 243596, 226945 243781, 226876 244299, 226832 244534, 226757 246063, 226723 247423, 226651 248412, 226733 249175, 226744 249467, 226858 250332, 226857 250685, 227027 251188, 227032 250686, 226988 249936, 226929 249476, 226935 248418, 227001 247913, 227129 245992, 227160 245117, 227193 244556, 227207 243794, 227233 243654, 227286 243052, 227438 242449, 227449 242346, 227709 241664, 228055 240997, 228076 240831, 228487 238703, 228462 238398, 228268 238578, 228329 238200, 228229 238112, 228469 237100, 228571 236213, 228732 235220, 228511 236117), (230238 246301, 230302 246602, 230324 247076, 230371 247190, 230418 247084, 230391 247006, 230441 246325, 230451 245912, 230238 246301), (228722 245362, 228718 245885, 228825 245370, 228806 244950, 228722 245362), (230646 245563, 230741 245734, 230764 245708, 230839 245159, 230646 245563), (232467 244884, 232335 245097, 232408 245256, 232484 245235, 232708 245328, 232759 245082, 232654 244843, 232557 244821, 232467 244884), (231631 243119, 231275 244124, 231139 244441, 231028 244850, 231143 245016, 231316 244661, 231392 244156, 231871 243726, 231955 243684, 232039 243531, 232000 243373, 231778 243064, 231631 243119), (229219 243151, 229059 243886, 228909 244479, 229037 244950, 229185 244374, 229282 243907, 229446 243322, 229425 243203, 229366 242598, 229219 243151), (232139 235723, 231865 235925, 231630 236627, 231625 236621, 231355 237212, 231310 237391, 231187 237571, 230217 239848, 229994 240505, 230007 240936, 229886 240766, 229583 241823, 229571 242113, 229413 242495, 229529 243046, 229661 242524, 229814 241849, 229833 241391, 230008 241321, 230122 240810, 230485 239936, 230529 239379, 230608 239578, 231359 237894, 231397 237664, 231471 237645, 231742 237021, 231870 236621, 232270 236104, 232558 235785, 232436 235590, 232139 235723), (230293 234819, 230098 235541, 230014 236276, 230024 236744, 230140 236712, 230204 236082, 230293 235585, 230355 235309, 230426 234440, 230293 234819), (228385 230190, 228509 230912, 228457 231660, 228509 232188, 228516 232738, 228550 233000, 228636 232999, 228571 233378, 228594 233968, 228577 234500, 228804 234624, 228863 233966, 228904 233849, 228973 233207, 228979 232431, 229065 231720, 228991 230904, 228995 230692, 228790 230172, 228815 230084, 228778 230150, 228738 229627, 228559 229543, 228385 230190), (231749 231256, 231765 231988, 231594 231636, 231473 231973, 231432 232570, 231227 232570, 231179 232685, 231080 233233, 230845 233404, 230714 233922, 230588 234113, 230679 234367, 231120 233532, 231204 232801, 231419 232912, 231782 232046, 232035 231318, 231897 230841, 231749 231256), (228192 229508, 228223 229756, 228293 229915, 228526 229469, 228299 229232, 228192 229508), (227781 227569, 227853 228090, 227903 228205, 227900 228379, 228031 228963, 228065 229041, 228113 228838, 228167 228331, 228105 228003, 227912 227409, 227906 226944, 227781 227569), (229352 227481, 229362 227548, 229375 227441, 229336 226899, 229352 227481), (229482 225584, 229531 226170, 229345 226794, 229562 226265, 229547 225686, 229578 225594, 229515 225444, 229482 225584), (229716 224385, 229730 224886, 229712 224990, 229768 225160, 229815 225000, 229798 224512, 229840 224395, 229743 224039, 229716 224385)), ((243534 247038, 243728 247088, 243928 247574, 243972 248247, 244083 248768, 244150 249474, 244406 251339, 244507 251868, 244626 252391, 244691 253008, 244797 253629, 244943 254251, 245323 255509, 245507 256153, 245543 256829, 245573 257033, 245736 258848, 245706 259554, 245512 260760, 245373 261510, 245319 262049, 245209 262797, 245071 263295, 244884 264122, 244643 264859, 244613 264885, 244280 265497, 244062 266225, 244015 266557, 244016 266996, 243901 267835, 243868 269340, 243785 270130, 243781 270920, 243904 271715, 243935 272494, 243923 273235, 243975 274018, 244140 275179, 242720 275178, 242727 274009, 242706 273666, 242668 272475, 242675 269896, 242685 269105, 242713 268523, 242961 267758, 243011 267025, 243049 265554, 242938 264621, 242880 264289, 242798 263496, 242791 260424, 242826 259424, 242837 256983, 242888 255870, 242900 255074, 242877 254443, 242785 253822, 242829 253173, 242868 251382, 242835 249885, 242874 249446, 242953 247590, 243067 247248, 243244 247016, 243467 246980, 243534 247038)), ((219205 273608, 219435 274056, 219485 274352, 219523 275179, 216079 275179, 216090 274536, 216146 274112, 216289 273858, 216694 273676, 217260 273641, 217782 273636, 218098 273798, 218243 273715, 218510 273685, 218711 273604, 219205 273608)), ((221224 273778, 221474 273743, 221736 273614, 222292 273669, 222515 273776, 222598 274492, 222718 274665, 222662 275160, 222763 274613, 222975 273875, 223103 273782, 223863 273770, 224105 273975, 224196 274366, 224248 275179, 219540 275179, 219545 274352, 219580 273738, 219719 273635, 220015 273586, 220948 273567, 221224 273778)), ((186759 229470, 187003 229341, 187705 229408, 187886 229956, 187924 229931, 188071 230030, 188199 229652, 188152 229507, 188223 229535, 188511 229460, 188875 229484, 189474 229752, 189556 230481, 189603 233084, 189607 233812, 189573 235252, 189576 236023, 189612 237273, 189694 241318, 189699 242606, 189668 243182, 189587 244233, 189541 245303, 189548 246294, 189535 248692, 189545 250615, 189498 252916, 189530 255852, 189547 256397, 189560 257485, 189555 258491, 189578 259584, 189576 260596, 189616 261494, 189685 262512, 189710 263957, 189774 266052, 189788 267626, 189777 268318, 189697 269740, 189576 270941, 189554 271637, 189587 272179, 189709 275179, 186479 275178, 186448 274612, 186414 273373, 186388 272937, 186378 272384, 186352 271700, 186305 270854, 186264 270507, 186182 270998, 186209 271320, 186194 271869, 186240 272584, 186278 273528, 186314 274135, 186359 275178, 184126 275179, 184070 274230, 184055 273650, 183997 273381, 184066 272911, 184064 272378, 184038 271875, 184080 271023, 184182 270347, 184151 269626, 184007 268961, 183693 268627, 183669 268915, 183538 269627, 183577 270331, 183765 271299, 183744 272954, 183768 273653, 183807 273904, 183820 274751, 183853 275179, 181348 275178, 181388 274821, 181497 274319, 181702 273570, 181784 272960, 181772 272282, 181772 270999, 181651 270321, 181402 269648, 181322 268954, 181316 268195, 181328 266698, 181387 263251, 181384 262483, 181329 261546, 181309 261013, 181322 260134, 181319 258948, 181286 257600, 181281 255959, 181291 254939, 181340 252286, 181309 250470, 181325 247731, 181355 246041, 181398 245239, 181588 244218, 181600 243285, 181514 242401, 181463 241601, 181419 240601, 181386 239424, 181389 238835, 181319 237202, 181361 235525, 181376 235301, 181369 234753, 181377 234601, 181348 233917, 181304 233342, 181349 230410, 181369 229731, 181593 229518, 181964 229391, 183081 229359, 183329 229452, 183539 229478, 183889 229355, 184372 229339, 184933 229403, 185284 229319, 186249 229313, 186759 229470), (186061 268122, 186061 268817, 186106 268234, 186111 267884, 186061 268122), (183755 267542, 183878 268023, 183819 267456, 183773 267390, 183755 267542), (185993 264715, 186014 264930, 185937 265438, 185948 265797, 185951 266521, 186035 266137, 186018 266015, 186113 265421, 186148 264704, 186184 264491, 186139 264173, 185993 264715), (185923 262511, 185925 263176, 186029 262699, 185978 262343, 185923 262511)), ((238842 264205, 239031 264578, 239288 264231, 239497 264187, 240082 264288, 240254 264523, 240356 265714, 240400 265276, 240490 265013, 240572 265024, 240649 264965, 240737 264542, 240847 264403, 241445 264368, 241689 264472, 241836 264686, 241928 265219, 241966 266371, 242011 269933, 242015 271093, 241985 272862, 241977 274109, 241996 275179, 233818 275179, 233857 272843, 233846 271805, 233794 270824, 233765 269892, 233797 267565, 233798 266394, 233826 264831, 233883 264684, 234181 264376, 234483 264251, 235508 264202, 235741 264355, 235922 264402, 236318 264189, 236849 264162, 237005 264209, 237141 264388, 237130 264435, 237182 265012, 237153 266235, 237241 266583, 237206 266754, 237254 266661, 237259 265988, 237240 265592, 237296 264422, 237384 264273, 237552 264158, 238579 264135, 238842 264205), (239951 274986, 240034 274958, 240041 274731, 239984 274504, 239951 274986), (240039 273025, 240025 273326, 240137 273813, 240142 273337, 240190 272832, 240039 273025), (237089 268690, 237093 270943, 237115 272093, 237135 272499, 237111 273209, 237138 273477, 237256 273609, 237265 272203, 237313 271866, 237324 271145, 237291 269924, 237274 269708, 237265 268925, 237242 268372, 237181 267827, 237186 267593, 237114 267195, 237089 268690), (240112 272144, 240194 272351, 240183 271984, 240137 271853, 240112 272144)), ((224447 183282, 224550 184231, 224586 186140, 224582 187233, 224602 188770, 224600 189673, 224638 191102, 224678 194053, 224665 195018, 224646 195492, 224702 199777, 224690 200709, 224627 201380, 224573 202108, 224561 202831, 224561 204184, 224541 205337, 224539 206018, 224466 207994, 224472 209041, 224584 210794, 224583 211790, 224333 213790, 224298 214546, 224291 216029, 224355 217381, 224391 219130, 224434 220129, 224503 220751, 224555 221338, 224593 222485, 224609 224755, 224635 225855, 224663 228667, 224652 229796, 224569 231563, 224543 232473, 224558 233421, 224612 234970, 224611 235659, 224622 236106, 224611 237860, 224600 238177, 224604 238709, 224595 239177, 224594 240598, 224574 241157, 224327 242499, 224314 243379, 224275 244317, 224277 244673, 224248 245429, 224295 246103, 224350 246679, 224372 247029, 224450 247840, 224473 248571, 224486 250859, 224478 252935, 224446 254211, 224429 256271, 224430 258269, 224383 259372, 224366 260651, 224376 261481, 224486 262201, 224470 262917, 224441 263643, 224422 265046, 224395 265865, 224431 268094, 224410 268862, 224374 269624, 224323 271783, 224147 272412, 223970 272565, 223148 272604, 222848 272234, 222350 272406, 222044 272370, 221731 272554, 221361 272617, 220686 272589, 220552 272530, 220351 272282, 220189 272391, 219628 272669, 218880 272651, 218609 272478, 218584 272049, 218610 271507, 218570 271310, 218539 270793, 218384 271287, 218189 271750, 217954 272537, 217516 272545, 217084 272427, 216830 271939, 216613 271147, 216565 268553, 216558 264186, 216522 262228, 216486 261099, 216477 260491, 216493 257562, 216503 257117, 216499 256031, 216472 253963, 216486 251430, 216464 249965, 216516 245719, 216586 244422, 216654 242519, 216743 240815, 216752 240116, 216723 239502, 216661 238873, 216568 238219, 216524 237584, 216490 236230, 216506 235135, 216568 233863, 216651 232616, 216687 231722, 216707 230869, 216701 229923, 216679 229135, 216531 225559, 216331 219356, 216374 217420, 216408 214498, 216409 213576, 216427 212681, 216454 210147, 216605 209413, 216714 208774, 216729 208105, 216679 207420, 216546 206738, 216514 206144, 216492 205236, 216466 204618, 216463 203492, 216426 202227, 216430 201491, 216465 200211, 216520 197089, 216634 194859, 216636 194149, 216507 192973, 216453 192264, 216456 190971, 216443 190252, 216488 186887, 216507 184549, 216543 184025, 216615 183617, 216971 183471, 217830 183442, 219051 183340, 219314 183418, 219459 183886, 219487 184467, 219442 185849, 219410 187433, 219382 187999, 219367 188611, 219390 188863, 219284 189428, 219203 190396, 219174 191021, 219319 191652, 219356 191025, 219331 190622, 219458 189873, 219412 189792, 219488 189706, 219576 188603, 219571 188408, 219669 188060, 219768 187204, 219942 185532, 219983 184466, 219930 183976, 219962 183478, 220082 183209, 220292 183151, 221175 183144, 221267 183262, 221380 183688, 221332 183877, 221359 184134, 221485 184092, 221329 184479, 221303 185014, 221321 185341, 221246 185564, 221236 185815, 221355 185766, 221214 186121, 221097 187364, 221059 187981, 221057 188307, 221009 188807, 220895 189404, 220815 190144, 220750 191391, 220740 192209, 220778 195101, 220949 196160, 220956 196402, 221026 197159, 221033 197692, 221110 198562, 221163 198774, 221140 198845, 221220 199434, 221348 200987, 221411 201257, 221566 201406, 221504 201601, 221601 202069, 221581 202313, 221611 203094, 221744 204087, 221750 204272, 221815 204912, 221875 204073, 221881 203400, 221835 202777, 221653 201372, 221626 200756, 221565 200147, 221440 199675, 221438 199420, 221364 198766, 221369 198261, 221310 197173, 221206 197061, 221220 195958, 221141 194961, 221122 194825, 221100 194168, 221079 192852, 221070 190963, 221162 189736, 221171 189147, 221164 188859, 221180 188304, 221304 187820, 221413 186984, 221422 186472, 221527 185273, 221504 185228, 221537 185165, 221600 184499, 221642 183187, 221868 183031, 222621 182969, 222896 183411, 223205 183100, 223623 182886, 224146 182886, 224447 183282), (221579 271452, 221677 271624, 221791 271589, 221676 271035, 221598 270763, 221579 271452), (218301 267048, 218320 267226, 218239 267686, 218228 268304, 218275 269127, 218442 268452, 218452 268292, 218554 267794, 218601 266861, 218502 266661, 218301 267048), (222871 266324, 222708 267065, 222680 267782, 222880 268273, 222951 267758, 222782 267285, 222876 267147, 222924 266966, 222905 266309, 222871 266324), (221401 262111, 221440 263168, 221492 264009, 221553 264201, 221594 263782, 221578 263025, 221515 262262, 221418 261760, 221401 262111), (223248 259991, 223192 260544, 223336 260606, 223354 259998, 223259 259490, 223248 259991), (223354 258416, 223427 259152, 223375 258378, 223354 258416), (220045 253121, 220169 253585, 220165 253125, 220020 252587, 220045 253121), (218447 244665, 218498 244992, 218554 244391, 218442 244221, 218447 244665), (218581 243353, 218488 243838, 218620 243690, 218639 243444, 218549 242983, 218581 243353), (221494 242384, 221525 242967, 221576 243399, 221606 243109, 221558 242496, 221488 242053, 221494 242384), (218647 241972, 218647 242211, 218709 242491, 218759 241863, 218647 241972), (218661 241275, 218784 241414, 218797 240995, 218702 240782, 218661 241275), (218844 238922, 218842 239048, 218741 239701, 218854 240368, 218756 239732, 218882 239251, 218892 238832, 218844 238922), (222535 230596, 222651 231465, 222673 230706, 222568 230176, 222535 230596), (219891 221588, 219824 222165, 219831 222537, 219905 222767, 219967 223238, 220069 222526, 220022 222241, 220006 221740, 219954 221128, 219887 220566, 219891 221588), (217920 215876, 217954 216771, 218169 216804, 218156 217736, 218237 218085, 218305 218874, 218355 218808, 218396 218375, 218333 218080, 218292 217494, 218262 217290, 218215 216522, 217981 216554, 217957 215920, 217928 215828, 217920 215876), (220148 212201, 220146 212837, 220208 212441, 220234 211647, 220148 212201), (221676 207556, 221593 208146, 221584 208840, 221630 209360, 221752 209538, 221731 210072, 221753 211026, 221789 211564, 221846 210636, 221969 208162, 221955 207470, 221910 207167, 221676 207556), (223382 206906, 223445 207583, 223418 206839, 223380 206415, 223382 206906), (217876 206674, 217887 206958, 217906 206790, 217899 206047, 217876 206674), (217700 203481, 217666 204005, 217697 204636, 217775 204393, 217753 204127, 217762 203627, 217741 203195, 217700 203481), (218966 201405, 218984 202172, 219048 202451, 219012 202834, 219063 203166, 219177 202826, 219234 202158, 219187 201799, 219024 201502, 219045 200889, 218966 201405), (218852 198320, 218858 199204, 218891 200056, 219085 199208, 219019 198112, 218852 198320), (218879 196159, 218803 196403, 218811 197084, 218831 197750, 218895 197490, 218874 197385, 218961 196821, 218977 196029, 218887 195908, 218879 196159), (219100 191706, 219047 192287, 219023 192916, 218959 193569, 218971 194193, 218951 194539, 219045 194532, 219223 194217, 219286 193573, 219165 192923, 219164 192286, 219314 191674, 219100 191706)), ((238343 189074, 238466 189951, 238541 189602, 238613 189493, 238645 189311, 238794 189391, 239047 188956, 239074 188676, 239423 188828, 239546 188950, 239750 189388, 239803 189758, 239767 190009, 239782 191249, 239710 191843, 239742 192441, 239723 193700, 239974 194816, 240044 195031, 240147 195546, 240242 195710, 240447 196382, 240504 196527, 240652 197054, 240686 197287, 240889 197730, 240974 198611, 241107 199123, 241073 199371, 241136 199823, 241106 200524, 241183 201703, 241255 201911, 241271 202166, 241222 202618, 241128 204066, 241045 205657, 240961 206288, 240589 208316, 240467 209198, 240312 209647, 240069 210479, 240062 210743, 239680 211869, 239256 213328, 239121 213885, 238955 214403, 238854 214909, 238649 215754, 238499 216236, 238370 216732, 238274 217295, 238325 218051, 238453 218891, 238611 219601, 238806 221174, 238815 222674, 238869 222780, 238905 222760, 238853 221963, 239061 221662, 239142 221664, 239370 221558, 239385 221871, 239529 222317, 239665 222596, 239619 222820, 239635 223341, 239596 224068, 239628 224771, 239727 225452, 239774 226138, 239897 226768, 239890 226818, 239907 227507, 239945 228187, 240037 228864, 240042 228961, 240130 229456, 240131 229573, 240230 230959, 240251 231684, 240239 232431, 240265 233174, 240469 233887, 240808 234681, 240962 234927, 241100 235036, 241178 234559, 240855 233840, 240653 233116, 240818 232362, 240756 231638, 240483 230936, 240483 230707, 240393 229747, 240486 228828, 240475 228728, 240472 228132, 240361 227431, 240251 226855, 240260 226793, 240246 226029, 240318 225458, 240252 224699, 240111 224001, 239940 223418, 239741 221825, 239598 221203, 239589 221071, 239508 220570, 239397 220322, 239370 219606, 239095 218908, 238951 218216, 238871 218027, 238863 217305, 238898 216514, 239024 215712, 239032 215506, 239114 215386, 239265 214624, 239396 214130, 239408 213996, 239780 212643, 239914 212107, 239929 211922, 240012 211769, 240202 211235, 240472 210557, 240714 209875, 240820 209163, 241093 208411, 241299 207799, 241416 207071, 241454 206940, 241562 206309, 241567 205790, 241599 204818, 241570 204094, 241591 203532, 241549 202618, 241389 201907, 241440 201704, 241461 201204, 241390 200508, 241333 200139, 241261 199255, 241190 198524, 241113 198413, 241166 198342, 241064 197706, 241083 197452, 241034 197000, 240765 195656, 240585 194949, 240469 194319, 240329 193050, 240303 192285, 240291 191408, 240329 190524, 240440 189673, 240692 189167, 241035 188977, 241165 188990, 241466 189159, 241919 189372, 241927 189425, 242107 189544, 242166 189839, 242219 190574, 242260 193582, 242220 196581, 242263 198318, 242349 203539, 242361 205152, 242306 206488, 242251 207307, 242211 207755, 242175 208744, 242169 209889, 242176 211654, 242160 213534, 242176 216292, 242132 218077, 242085 218699, 242105 219587, 242110 221679, 241993 222464, 241946 222538, 241924 222462, 241620 222140, 241356 222442, 241463 222779, 241603 223055, 241936 223864, 242097 224582, 242130 225301, 242135 225920, 242120 226887, 242136 227340, 242096 228115, 242091 228860, 242144 230395, 242184 231981, 242283 234070, 242297 234594, 242206 235307, 241952 235986, 242136 236674, 242281 237408, 242277 237847, 242302 239597, 242266 241099, 242183 242292, 242164 243079, 242190 243842, 242231 244484, 242285 246326, 242352 248044, 242356 249246, 242317 249939, 242300 250644, 242291 252041, 242350 254884, 242347 255935, 242261 259208, 242141 260772, 242087 262831, 242022 263442, 241963 263614, 241691 263748, 241304 263770, 241260 263720, 241007 263670, 240762 262918, 240688 262185, 240679 261955, 240620 261823, 240542 260977, 240417 260160, 240429 260017, 240372 259463, 240241 258383, 240116 257068, 239992 256314, 239824 255078, 239768 254380, 239655 253672, 239502 252946, 239415 251429, 239443 251175, 239537 250000, 239680 248866, 239774 248252, 240064 246754, 240020 246522, 240084 246654, 240239 245997, 240318 245234, 240482 244703, 240527 244496, 240726 243772, 240732 243678, 240833 243049, 240789 242535, 240792 242329, 240719 242095, 240679 242217, 240625 242790, 240550 243028, 240310 243290, 240227 243721, 240286 244023, 240239 244463, 240166 244579, 240043 245198, 239836 245937, 239711 246705, 239746 247201, 239609 246970, 239508 247049, 239375 248117, 239383 248263, 239320 248369, 239115 249194, 239001 248246, 238908 247708, 238953 247232, 238961 246669, 238985 246421, 239019 245721, 239137 243961, 239182 242980, 239442 241678, 239476 240987, 239531 239192, 239535 238642, 239570 238158, 239446 237173, 239215 235484, 239176 234866, 238828 233217, 238629 232674, 238413 231982, 238225 231428, 237949 230810, 237870 231367, 237951 231862, 238238 232738, 238237 232822, 238305 233443, 238364 234147, 238486 234863, 238640 235447, 238761 236166, 238846 236819, 238892 237562, 238850 238192, 238971 238925, 239025 239170, 239061 239838, 238986 241568, 238937 242014, 238870 242815, 238767 244690, 238684 245975, 238608 247781, 238519 248276, 238502 249076, 238525 249851, 238629 250654, 239073 253179, 239171 253674, 239356 254378, 239509 255348, 239682 256303, 239682 256420, 239781 257305, 239802 257577, 239908 258471, 239975 258916, 240060 259767, 240072 260070, 240188 260790, 240332 262146, 240387 263258, 240336 263386, 240039 263760, 239860 263772, 239265 263643, 239241 262821, 239208 262648, 239083 261652, 238621 259224, 238256 257179, 238231 256993, 237988 255951, 237805 255011, 237614 254279, 237251 253547, 237065 252835, 236933 251926, 236830 251346, 236734 250572, 236723 249668, 236758 248330, 236855 247633, 236792 246570, 236740 245897, 236624 241292, 236577 240327, 236600 239805, 236627 239686, 236716 238760, 236702 238342, 236617 237739, 236475 236970, 236460 236839, 236356 236263, 236286 235725, 236326 235113, 236148 234799, 235820 234077, 235582 233219, 235479 232408, 235520 230968, 235484 230196, 235510 229820, 235460 229420, 235400 228643, 235479 227943, 235461 227347, 235471 227082, 235346 226735, 235276 226779, 235167 227039, 235163 227668, 235180 227868, 235182 228648, 235134 229426, 235076 229804, 235164 230572, 235028 230745, 235109 231770, 235018 232533, 235401 233237, 235459 233937, 235404 234531, 235069 233961, 234723 233171, 234400 232559, 234250 231839, 234232 230792, 234198 229856, 234181 227180, 234193 225615, 234171 225243, 234162 224313, 234147 224039, 234180 221495, 234379 220757, 234802 220123, 234983 219747, 235171 219528, 235356 219129, 235619 218639, 235742 217885, 235722 217610, 235831 217309, 235903 216323, 236055 215526, 236096 214985, 236133 214717, 236195 214065, 236227 213910, 236204 213692, 236176 213113, 236219 212329, 236311 211552, 236281 210794, 236151 210056, 236006 209465, 235946 209334, 235969 209208, 235991 208624, 236009 208509, 235995 207937, 235949 207551, 235818 207365, 235753 207444, 235780 207284, 235690 206929, 235694 206623, 235670 205673, 235617 204800, 235405 205220, 235402 205075, 235392 205251, 235441 205947, 235431 206112, 235452 206628, 235444 206868, 235481 207715, 235462 208249, 235540 208649, 235649 210076, 235812 211576, 235793 212347, 235657 213908, 235685 214506, 235642 215429, 235471 217868, 235519 218413, 235389 218183, 235315 218343, 235281 218619, 235187 219194, 235078 219117, 234858 219348, 234785 219854, 234721 219595, 234552 219687, 234223 219379, 234203 218779, 234209 218235, 234198 217128, 234206 216894, 234186 214805, 234199 213486, 234198 212325, 234207 211648, 234266 209342, 234354 208618, 234455 207962, 234510 207323, 234497 206593, 234388 205145, 234347 204230, 234311 203025, 234394 202314, 234409 201601, 234566 200894, 234862 200182, 235136 199476, 235290 199235, 235493 198758, 235503 197947, 235564 197188, 235594 196688, 235759 195934, 235918 195386, 236095 194694, 236298 194088, 236409 193551, 236468 193030, 236464 192850, 236560 192099, 236614 191279, 236582 190696, 236498 190197, 236455 189602, 236476 188896, 236527 188773, 236873 188592, 238132 188572, 238343 189074), (240900 240252, 240969 240744, 240992 240253, 240950 239972, 240900 240252), (241520 235027, 241285 235269, 241617 235624, 241769 235280, 241657 234982, 241520 235027), (237279 229235, 237401 229619, 237637 229919, 237611 230403, 237752 230909, 237780 230640, 237654 229936, 237348 229022, 237279 229235), (238179 225876, 238102 226234, 238120 226825, 238117 227685, 238157 228361, 238354 229240, 238507 229512, 238607 229992, 238674 230084, 238783 229732, 238742 229296, 238780 228311, 238647 227301, 238574 226928, 238487 226236, 238422 225928, 238489 225531, 238275 225271, 238179 225876), (236384 225592, 236462 225985, 236458 226334, 236582 226826, 236602 227068, 236736 227566, 236858 227429, 236768 227058, 236836 226776, 236738 225966, 236723 225586, 236503 224927, 236384 225592), (238493 224488, 238422 224821, 238520 225431, 238559 224823, 238719 224109, 238705 224038, 238493 224488), (236045 222573, 235943 222839, 235941 223324, 236131 224095, 236194 224927, 236292 224850, 236222 224267, 236154 224096, 236291 223704, 236162 222717, 236142 222130, 236045 222573), (240959 220227, 241188 220935, 241072 220064, 241032 220035, 240959 220227), (240535 214767, 240447 215722, 240411 216476, 240424 217236, 240533 217769, 240643 217990, 240599 218166, 240824 219535, 240908 218741, 240835 217983, 240600 217035, 240615 215719, 240656 214977, 240634 214446, 240535 214767), (236852 217712, 236725 218297, 236746 218799, 236758 218846, 236939 217702, 236852 217712), (237578 212775, 237514 213156, 237517 213600, 237440 213973, 237341 214670, 237466 214805, 237456 214990, 237515 214855, 237675 213995, 237715 213679, 237796 213185, 237676 212609, 237578 212775), (237984 210681, 237912 211600, 237839 211949, 237924 212134, 238181 211046, 238175 210874, 238046 210467, 237984 210681), (238366 209385, 238272 209921, 238178 210120, 238257 210712, 238359 210159, 238381 209486, 238542 209077, 238366 209385), (237656 200927, 237545 200973, 237285 201343, 236755 202641, 236720 203315, 236728 203978, 236716 204626, 236675 205208, 236577 205916, 236611 206182, 236740 206256, 236816 206421, 237059 206467, 237328 205881, 237085 205249, 236992 204625, 236982 204196, 237053 203998, 237141 203374, 237104 203076, 237174 202730, 237363 202110, 237657 201876, 238116 201740, 238179 201673, 238155 201753, 238562 202288, 238851 202825, 238995 203426, 239238 204036, 239304 204499, 239374 204692, 239344 205365, 239169 205939, 238988 206297, 238940 206705, 238875 206858, 238812 207360, 238783 207670, 238671 208063, 238562 208568, 238691 208756, 239018 208248, 239047 208230, 239313 207492, 239422 206798, 239756 205949, 240007 205437, 239979 204723, 239744 203362, 239613 203002, 239440 202706, 239212 202080, 239176 201409, 239064 201032, 238707 200491, 238594 200497, 238459 200367, 237831 200289, 237656 200927), (238123 204104, 238329 205275, 238273 205912, 238015 206509, 237794 206376, 237700 206363, 237398 206516, 237377 206374, 237350 206541, 237761 206705, 238028 206609, 238334 206237, 238507 205942, 238398 205282, 238324 204102, 238174 203773, 238123 204104), (238362 191738, 238144 191680, 238002 192028, 237973 192393, 237977 193015, 237930 193581, 237932 193658, 237844 194985, 237787 195553, 237776 195751, 237637 196768, 237427 197672, 236960 199011, 236496 200253, 236303 201098, 236196 201820, 236350 201218, 236411 201121, 236528 200667, 236621 200902, 236739 200747, 236914 200206, 237315 199390, 237430 199122, 237506 199057, 237662 198391, 237829 198164, 237902 197766, 238030 197217, 238250 196405, 238417 195740, 238531 194978, 238611 193732, 238574 192958, 238514 192403, 238411 191889, 238445 191249, 238431 190864, 238362 191738)), ((234450 234457, 234980 235087, 235013 235067, 235417 235572, 235537 235674, 235765 236292, 235840 236935, 235913 237772, 236006 238386, 236063 239040, 236101 239706, 236120 239872, 236161 240578, 236234 242552, 236310 245043, 236308 245456, 236402 246188, 236368 246932, 236413 247684, 236426 248456, 236384 249655, 236322 250581, 236371 251307, 236501 252056, 236651 252800, 237214 255047, 237404 255666, 237654 257041, 238061 258853, 238359 260389, 238399 260660, 238546 261313, 238694 262037, 238755 262893, 238711 263384, 238623 263575, 238328 263743, 237416 263693, 236907 263631, 236745 263514, 236657 263377, 236512 261806, 236512 261601, 236238 259282, 236228 259124, 236080 258254, 236091 257824, 236021 257143, 236068 256445, 235973 255593, 235882 254304, 235870 253770, 235874 253548, 235733 252837, 235469 251848, 235112 251144, 235027 251002, 234518 250051, 234298 249355, 234218 248630, 234243 247856, 234332 247086, 234523 246264, 234670 245502, 234713 244736, 234701 243942, 234705 242584, 234637 241828, 234474 241189, 234291 240557, 234221 239969, 234190 239053, 234198 237815, 234188 237079, 234200 235539, 234241 234423, 234421 234310, 234450 234457)), ((234699 252115, 235042 252659, 235132 252732, 235154 252689, 235443 253585, 235573 254291, 235586 254258, 235605 255049, 235484 255572, 235502 256537, 235604 257557, 235628 257895, 235804 259166, 235995 260094, 236000 260318, 236037 260874, 236070 261140, 236070 261699, 236218 262676, 236157 263318, 236050 263345, 235909 263450, 235590 263411, 235073 263302, 234599 263133, 234411 262951, 234482 259797, 234427 259070, 234357 257393, 234308 256474, 234309 255777, 234402 254403, 234407 253623, 234385 252908, 234428 252102, 234694 251969, 234699 252115)), ((212440 161411, 212695 161715, 212968 161451, 213288 161437, 213687 161481, 213762 161557, 213985 162190, 214154 161762, 214444 161585, 215057 161587, 215443 161680, 215612 162197, 215664 163053, 215677 164716, 215704 166271, 215695 167747, 215661 169361, 215735 172914, 215805 177782, 215784 178881, 215700 180264, 215657 181141, 215642 181986, 215646 184473, 215628 186095, 215649 188704, 215595 191835, 215635 195825, 215646 196163, 215659 197615, 215653 198779, 215673 199975, 215671 200992, 215690 202183, 215771 203627, 215794 204455, 215810 205979, 215867 207776, 215880 208674, 215891 211173, 215784 213394, 215679 214490, 215650 215501, 215721 217192, 215741 218264, 215800 219676, 215813 221360, 215786 222596, 215771 223960, 215823 226624, 215819 227927, 215717 231715, 215642 232784, 215567 235278, 215512 235597, 215257 235788, 214940 235867, 214709 235657, 214712 235290, 214616 234833, 214425 234517, 214406 234841, 214420 235587, 214264 235823, 214080 235894, 213238 235899, 213109 235747, 213059 235249, 213020 235044, 213116 234818, 213171 233598, 212910 233213, 212908 233570, 213053 233822, 212878 233711, 212810 234280, 212906 234917, 212696 235789, 212448 235895, 211421 235864, 211005 235727, 210953 235676, 210826 235294, 210729 232555, 210692 232520, 210735 231063, 210650 230072, 210668 229274, 210643 228245, 210600 227702, 210539 227151, 210496 226539, 210472 225830, 210517 225452, 210515 224876, 210447 223841, 210343 222516, 210246 220602, 210208 219192, 210176 218361, 210156 215819, 210146 215442, 210175 214814, 210302 213689, 210283 213185, 210147 212584, 210060 211653, 209784 211565, 209773 212224, 209623 213193, 209638 213698, 209853 215052, 209850 217707, 209879 218985, 209976 221518, 210059 223109, 210082 224343, 210160 225372, 210261 226027, 210285 226635, 210288 227146, 210312 227498, 210315 228229, 210368 228750, 210377 229280, 210428 229721, 210406 229915, 210417 230514, 210408 230639, 210411 231342, 210437 232023, 210430 232777, 210378 232955, 210394 234232, 210421 234678, 210417 235345, 210324 235602, 210104 235684, 209793 235698, 209200 235614, 208295 235447, 207762 235262, 207538 235090, 207566 234057, 207602 231983, 207592 231454, 207544 230472, 207539 230101, 207459 228215, 207526 227284, 207588 226165, 207544 225077, 207473 224320, 207422 223319, 207405 221222, 207414 220620, 207470 219790, 207575 219098, 207670 218709, 207786 218152, 207865 217637, 207886 217135, 207866 215940, 207875 214846, 207831 214345, 207733 213837, 207571 213314, 207451 212734, 207418 211861, 207417 209814, 207487 204769, 207486 203965, 207418 202465, 207402 201902, 207432 200397, 207389 197813, 207394 197304, 207381 196974, 207377 196415, 207403 192751, 207437 191270, 207408 188057, 207422 185090, 207466 182056, 207645 180758, 207707 180234, 207699 179314, 207618 178259, 207545 176541, 207496 175108, 207483 173204, 207418 171732, 207468 169113, 207482 168798, 207469 167819, 207403 166529, 207427 164953, 207434 163576, 207467 162005, 207641 161687, 207894 161553, 208174 161476, 209149 161445, 209497 161594, 209774 161542, 209986 161431, 210544 161419, 210712 161464, 210847 161629, 210878 162280, 210906 161921, 211036 161499, 211230 161398, 212120 161382, 212440 161411), (212912 233140, 213125 233207, 213039 232607, 212925 232540, 212912 233140), (212806 228865, 212855 229397, 212968 229728, 212950 228843, 212811 228159, 212767 228030, 212806 228865), (212747 225751, 212825 226366, 212765 225625, 212652 224658, 212747 225751), (212550 222099, 212551 222374, 212645 222578, 212628 222208, 212570 221663, 212482 221328, 212550 222099), (212261 214313, 212236 214855, 212368 217723, 212397 218735, 212496 219954, 212504 220320, 212571 220623, 212532 220903, 212644 220804, 212574 219703, 212553 219034, 212548 218233, 212491 216876, 212440 216129, 212423 215247, 212346 214252, 212315 213624, 212261 214313), (212142 211547, 212145 211643, 212214 211075, 212195 210932, 212142 211547), (212058 205702, 212067 205984, 211995 206315, 212012 207264, 212240 207285, 212049 207835, 212044 208551, 212138 208884, 212060 209057, 212086 209876, 212241 209402, 212266 208559, 212118 208215, 212242 207809, 212242 207283, 212182 206755, 212227 206591, 212220 206220, 212250 205491, 212222 205159, 212058 205702), (211999 204427, 212018 205052, 212221 205149, 212139 204623, 212162 204273, 212124 203930, 211999 204427), (209374 193203, 209357 193802, 209467 193918, 209510 193142, 209374 193203), (213678 169320, 213752 169432, 213706 168918, 213678 169320), (210828 164479, 210793 166386, 210909 167076, 210912 167278, 210978 167382, 210925 165323, 210884 164169, 210855 163677, 210828 164479)), ((185297 167110, 185407 167451, 185338 167598, 185329 167852, 185381 168350, 185440 168634, 185651 168170, 185703 167967, 185970 167346, 185951 167256, 186126 167059, 186995 167057, 187112 167225, 187126 167396, 187297 167851, 187511 167580, 187718 167194, 187870 167100, 188330 167079, 188764 167155, 188994 167415, 189208 168124, 189259 170043, 189265 172829, 189303 174099, 189352 175290, 189338 177095, 189317 178365, 189324 178591, 189317 179552, 189335 180080, 189336 181778, 189365 182574, 189307 185446, 189234 186526, 189151 188026, 189098 188685, 189071 189372, 189129 190059, 189263 190768, 189309 191406, 189325 192154, 189286 193042, 189214 194103, 189187 194381, 189130 195334, 189118 196181, 189172 197770, 189250 199065, 189299 199563, 189498 203737, 189430 206912, 189389 209907, 189222 210588, 189108 211235, 189156 211949, 189317 212617, 189341 213367, 189375 214059, 189384 214777, 189416 215539, 189407 216229, 189356 217642, 189328 219067, 189215 220574, 189234 221297, 189335 221977, 189374 222713, 189388 223874, 189324 227914, 189109 228395, 188719 228449, 188023 228456, 186631 228549, 186472 228294, 186408 227996, 186415 227471, 186472 226226, 186490 224835, 186572 224305, 186831 221683, 186915 221369, 186945 220871, 186783 220779, 186532 221354, 186601 222053, 186534 222688, 186516 222971, 186301 224576, 186158 225468, 186101 225766, 185988 226490, 185888 227052, 185879 227574, 185884 228095, 185903 228345, 185800 228622, 185648 228661, 184705 228665, 184580 228544, 184505 228065, 184589 227785, 184592 227338, 184713 226475, 184776 225868, 184855 225273, 184967 224652, 185050 223973, 185108 223369, 185147 222391, 185115 221420, 185102 220614, 185028 219962, 184895 219037, 184863 218607, 184664 217295, 184543 216617, 184519 216385, 184402 215871, 184301 216015, 184314 215632, 184248 215280, 184263 214892, 184154 214176, 183924 214098, 183955 214899, 184062 215474, 184143 215982, 184290 217116, 184437 217790, 184485 218576, 184610 219345, 184622 219973, 184659 220157, 184721 220668, 184758 221351, 184776 222025, 184770 223359, 184705 224019, 184708 224132, 184682 224654, 184580 225282, 184460 225890, 184397 226657, 184348 226954, 184281 227490, 184203 228319, 184198 228589, 184131 228705, 183472 228795, 183168 228715, 183084 228646, 182878 228161, 182621 228725, 182522 228823, 181707 228851, 181435 228417, 181350 227690, 181327 226798, 181332 226001, 181306 225040, 181307 223943, 181234 221768, 181239 220209, 181254 220012, 181188 216954, 181248 216258, 181333 215500, 181336 214207, 181369 212866, 181422 212207, 181449 211242, 181418 210532, 181344 209805, 181330 209094, 181393 208494, 181534 207740, 181587 207109, 181606 206295, 181572 205427, 181536 204928, 181513 204025, 181460 203209, 181407 202874, 181346 202316, 181309 201374, 181297 200232, 181281 199875, 181240 197166, 181250 196634, 181339 195182, 181353 194246, 181298 192862, 181286 191907, 181303 190654, 181308 188838, 181532 188195, 181627 187585, 181656 186499, 181699 185835, 181613 185045, 181541 184647, 181431 183748, 181409 182317, 181416 180616, 181454 179562, 181469 177082, 181521 175854, 181525 174698, 181410 173973, 181453 173234, 181473 172197, 181501 171633, 181456 170072, 181527 169120, 181574 167732, 181674 167318, 182006 167041, 182733 167028, 182932 167135, 183128 167348, 183253 167247, 183784 167190, 184405 167022, 184888 167021, 185297 167110), (182601 220573, 182601 220833, 182575 221391, 182589 221549, 182558 222068, 182557 222276, 182513 222984, 182619 223110, 182774 222721, 182727 221382, 182712 220690, 182653 220062, 182601 220573), (186874 218523, 186899 218720, 186834 219235, 186874 219794, 187068 219231, 187034 218959, 187056 218340, 187039 217808, 186874 218523), (186807 215685, 186788 216242, 186814 216403, 186714 217267, 186752 217528, 187037 217808, 186850 217109, 186886 216506, 186880 216399, 186968 215570, 186736 215251, 186807 215685), (188015 213703, 188055 214135, 188100 215107, 188192 215141, 188177 214751, 188239 214003, 188173 213331, 188153 213301, 188015 213703), (182346 211844, 182288 211830, 182377 212784, 182461 213044, 182533 212958, 182502 212708, 182479 212001, 182439 211663, 182346 211844), (185267 212010, 185261 212745, 185405 212303, 185449 211755, 185350 211748, 185267 212010), (187888 211959, 187918 212466, 187950 211958, 187923 211687, 187888 211959), (184110 208365, 184085 209894, 183979 210471, 184007 210590, 183928 210733, 183874 211295, 183917 212207, 184178 212008, 184328 211284, 184328 210906, 184243 210539, 184282 209889, 184284 209201, 184240 208653, 184164 208194, 184110 208365), (187824 206319, 187819 206833, 187922 206254, 187903 205990, 187824 206319), (187613 204764, 187640 204905, 187597 205679, 187634 205715, 187779 205556, 187696 205446, 187760 204747, 187708 204580, 187613 204764), (187325 203943, 187332 204158, 187409 204261, 187509 203922, 187510 203680, 187417 203655, 187325 203943), (185723 201112, 185803 201361, 185782 202147, 185822 202381, 185871 203134, 185947 203520, 185999 203290, 185993 202138, 185999 201841, 185953 200921, 185896 200713, 185723 201112), (183111 196097, 183111 196338, 183220 196571, 183346 196089, 183357 195861, 183244 195515, 183111 196097), (187168 187332, 187096 188140, 187055 188812, 186932 189816, 186947 190690, 187033 190305, 186975 189832, 187148 189628, 187219 188881, 187258 188142, 187230 187867, 187370 187292, 187168 187332), (184359 187722, 184404 188292, 184387 187689, 184349 187311, 184359 187722), (187365 185986, 187363 186393, 187203 187147, 187394 187204, 187461 186611, 187503 185973, 187455 185491, 187365 185986), (185911 183458, 185982 184152, 186008 184285, 186031 184115, 186101 183340, 186009 182935, 185911 183458), (187495 180554, 187553 181290, 187625 180551, 187535 179884, 187495 180554), (182489 175139, 182515 175803, 182391 176384, 182360 176383, 182395 176941, 182579 176594, 182646 175985, 182711 175237, 182687 174648, 182489 175139), (184155 172903, 184186 173891, 184245 174426, 184331 174780, 184395 174585, 184412 173770, 184378 173140, 184238 172626, 184155 172903), (187354 169144, 187305 169545, 187269 170271, 187255 170954, 187324 171368, 187399 171508, 187539 171257, 187533 171111, 187641 170750, 187724 169433, 187631 169027, 187644 168917, 187597 168883, 187354 169144), (182772 170156, 182859 170644, 182923 171233, 183103 171365, 183165 170881, 183182 170371, 182928 170047, 182772 170156), (184144 167291, 184024 167660, 184063 167803, 184162 168395, 184189 168798, 184297 169405, 184296 169102, 184244 168395, 184283 168102, 184311 167596, 184411 167274, 184144 167291), (182898 167926, 182844 168051, 182954 168592, 183074 169096, 183100 169155, 183098 168673, 183052 167999, 183066 167740, 182898 167926)), ((235459 188654, 235687 188917, 235822 189324, 236001 190191, 235918 191121, 235928 191635, 236013 192207, 235998 192273, 236012 192789, 235902 193397, 235786 193668, 235569 194393, 235505 194555, 235319 195235, 235090 196611, 235041 197310, 234999 197624, 235055 198027, 234832 198748, 234866 199199, 234741 199466, 234758 200007, 234621 199769, 234389 199579, 234325 199670, 234281 199476, 234248 198732, 234254 197148, 234286 195536, 234204 193095, 234226 191243, 234221 190495, 234237 189605, 234266 189452, 234274 188928, 234657 188619, 235149 188598, 235459 188654)), ((190945 175323, 191056 175591, 191143 175634, 191279 175359, 191317 176094, 191367 176309, 191424 176930, 191362 177653, 191320 178375, 191372 178726, 191437 179275, 191479 179855, 191543 180389, 191708 180544, 191648 180897, 191717 181145, 191724 181439, 191798 181801, 191987 181569, 191896 181948, 191968 182137, 191889 182525, 191944 183472, 191990 183616, 192074 183655, 191952 184189, 191699 184362, 191201 184289, 190347 184111, 190098 183979, 190087 183430, 190096 183346, 190105 182806, 190150 181489, 190128 180812, 190090 180358, 190042 179446, 190034 179080, 189985 178259, 190101 176873, 190082 175434, 190129 175036, 190276 174786, 190571 175021, 190665 174877, 190781 174873, 190924 174583, 190945 175323))) \ No newline at end of file diff --git a/stress_benchmark/resources/033.settings b/stress_benchmark/resources/033.settings index e061183e7e..c362b205af 100644 --- a/stress_benchmark/resources/033.settings +++ b/stress_benchmark/resources/033.settings @@ -156,6 +156,7 @@ machine_settings=0 raft_base_extruder_nr=0 z_seam_y=255 wall_overhang_angle=90 +seam_overhang_angle=30 draft_shield_height=10 _plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 travel_retract_before_outer_wall=False @@ -534,7 +535,6 @@ skirt_brim_minimal_length=250 cooling=0 brim_replaces_support=True wall_x_extruder_nr=-1 -support_interface_skip_height=0.2 machine_nozzle_head_distance=3 support_bottom_pattern=concentric raft_base_wall_count=1 diff --git a/stress_benchmark/resources/033.wkt b/stress_benchmark/resources/033.wkt index 85a019b685..6293ff0feb 100644 --- a/stress_benchmark/resources/033.wkt +++ b/stress_benchmark/resources/033.wkt @@ -1 +1 @@ -MULTIPOLYGON (((99345 45800, 99640 46892, 99895 48430, 99533 48811, 99754 50319, 99482 50643, 99467 50724, 99719 50808, 99843 50755, 99865 50639, 99705 49954, 99827 49570, 100002 49260, 99911 48847, 99897 48429, 100280 48073, 100663 47826, 101099 47951, 101445 48274, 101834 48333, 102216 47947, 102603 47911, 102995 48278, 103387 48397, 103796 48170, 104154 47911, 104588 47964, 104933 48205, 105322 48264, 105706 48005, 106093 47968, 106484 48242, 106878 48388, 107643 47912, 108031 47909, 108422 48169, 108811 48307, 109581 47879, 109973 48193, 110364 48430, 110770 48202, 111132 47899, 111520 47915, 112300 48366, 112685 48089, 113071 47880, 113855 48400, 114256 48236, 114621 47912, 115058 47917, 115790 48310, 116202 48153, 116560 47912, 116983 48089, 117341 48362, 117739 48302, 118111 47966, 118542 47991, 118880 47387, 119256 46484, 119637 46480, 119663 46673, 120031 46476, 120222 47192, 127010 47210, 129336 47204, 130302 47216, 130502 47358, 130647 47521, 130909 48432, 130325 49083, 130401 49194, 104681 49194, 104681 66303, 104485 66253, 104426 67081, 104497 67968, 104434 68318, 104504 68792, 104426 68928, 104406 69103, 104448 69444, 104445 69999, 104681 70128, 104681 72342, 104459 72248, 104438 72651, 104526 73040, 104323 73868, 104359 73974, 104618 74190, 104681 74196, 104681 87981, 104494 88321, 104285 89144, 103946 89111, 103678 89708, 103449 90150, 103398 90172, 103313 90560, 103010 90493, 102825 91098, 102781 91116, 102720 91849, 102350 91412, 102210 91621, 101960 92117, 101741 92951, 101384 92965, 100900 93958, 100806 94311, 101018 94313, 100884 94504, 100741 94527, 100768 94381, 100388 94450, 100156 95315, 100225 95351, 100144 95357, 100147 95327, 99763 95409, 99643 95846, 99195 96743, 98881 96739, 98816 96833, 98559 97699, 98166 97777, 97947 98256, 97708 98709, 97606 99122, 97204 99188, 97085 99634, 96893 100072, 96952 100132, 96789 100511, 96838 100788, 96609 100706, 96614 100559, 96302 100615, 96042 101411, 96254 101435, 96114 101720, 95839 102043, 95736 102071, 95784 101950, 95452 101927, 95167 102507, 95081 102881, 95444 103057, 94988 103170, 94921 103335, 94572 103370, 94198 104191, 94316 104291, 94256 104523, 94052 104859, 93943 104904, 93975 104772, 93590 104840, 93469 105293, 93027 106147, 92786 106056, 92652 106298, 92543 106685, 92681 106678, 92624 106847, 92458 106942, 92389 107142, 92204 107196, 92125 107475, 91996 107289, 91596 108138, 91452 108563, 91123 108541, 91052 108627, 90813 109456, 90910 109489, 90746 109656, 90775 109525, 90399 109599, 90056 110462, 90314 110606, 89936 110770, 89853 110933, 89548 110901, 89469 111015, 89186 111896, 89172 111903, 89150 112679, 88728 112186, 88562 112458, 88357 113023, 88624 113454, 88095 113737, 87821 113564, 87326 114734, 87313 114739, 87236 115250, 86938 114880, 86750 115280, 86644 115685, 86237 115789, 85860 116688, 85772 116981, 86087 117014, 85876 117336, 85621 117407, 85563 117529, 85260 117468, 85171 117606, 84920 118267, 85317 118388, 85105 118977, 84717 118772, 84627 118925, 84352 118849, 84236 119070, 84133 119451, 84337 119432, 84111 119945, 84060 120251, 83449 120266, 83327 120483, 83037 121329, 82708 121331, 82639 121395, 82309 122264, 82434 122279, 82307 122622, 82241 122330, 81905 122408, 81704 122866, 81600 123264, 81953 123186, 81745 123519, 81460 123639, 81430 123715, 81100 123704, 81036 123786, 80887 124239, 80486 125072, 80212 125075, 80068 125253, 79996 125626, 80230 125365, 80553 125184, 80879 125062, 81135 125121, 81609 124906, 81593 125429, 81437 125368, 81233 125554, 81115 125740, 81191 125983, 81567 126136, 81545 126011, 81891 125207, 82592 124977, 82816 125275, 82611 125719, 82799 126055, 82483 126916, 82664 127255, 82480 127692, 82685 128025, 82519 128457, 82711 128793, 82518 129233, 82736 129562, 82580 129991, 82763 130329, 82583 130766, 82787 131098, 82628 131528, 82813 131866, 82453 132739, 82675 133067, 82479 133507, 82663 133845, 82517 134272, 82723 134604, 82554 135037, 82764 135369, 82758 135415, 83117 136047, 82776 136915, 82461 137772, 82805 138458, 82472 139236, 82451 139480, 82728 140030, 82517 140763, 82185 140567, 82130 140968, 82152 141058, 82206 140971, 82566 140854, 82968 141507, 82253 141654, 82135 141566, 82085 141756, 82148 141913, 82260 141772, 82967 141522, 82616 142376, 82279 142410, 82156 142331, 82103 142526, 82159 142713, 82283 142546, 82616 142396, 83019 143044, 82309 143180, 82178 143087, 82145 143290, 82193 143468, 82612 143895, 82622 144054, 83001 144607, 82515 145824, 82340 145951, 82553 145900, 82751 146226, 82581 146652, 82425 146702, 82582 146665, 82783 146993, 82609 147422, 82273 147441, 82141 147370, 82095 147568, 82145 147763, 82276 147594, 82610 147431, 82807 147762, 82632 148186, 82297 148216, 82161 148124, 82128 148334, 82178 148514, 82433 148639, 82494 149400, 82862 150072, 82521 150880, 82448 150960, 82528 150991, 82864 151566, 82733 151657, 82476 152253, 82202 151921, 82100 152606, 82155 152767, 82274 152635, 82605 152477, 82983 153130, 82283 153254, 82160 153190, 82120 153376, 82165 153554, 82279 153393, 82986 153145, 82661 153997, 82315 154041, 82194 153951, 82159 154140, 82202 154317, 82441 154451, 82200 154708, 82155 154916, 82214 155096, 82498 155228, 82702 155543, 82696 155587, 83041 156225, 82713 156988, 82038 157237, 82010 157260, 81299 157423, 81227 157409, 80553 157625, 80509 157656, 79948 157437, 79934 157458, 78822 157751, 78600 157441, 78691 157223, 78718 156971, 78622 156661, 78841 156505, 78811 156297, 78597 155892, 78769 155515, 78778 155384, 78344 155517, 78344 155625, 78491 155922, 78283 156171, 78191 156391, 78187 156780, 77836 157609, 77309 157380, 76917 157506, 76183 157699, 76018 157374, 76028 157309, 76000 157372, 75286 157565, 74872 156913, 75041 156505, 74820 156190, 74756 156170, 74667 155807, 74793 155450, 74795 155307, 74477 154696, 74674 154325, 74777 154226, 74834 154033, 74793 153834, 74812 153633, 74664 153481, 74476 153383, 74507 153524, 74469 153671, 74511 153911, 74436 154101, 74472 154309, 74373 154724, 74405 155012, 74589 155441, 74515 155688, 74563 155835, 74326 156288, 74238 156699, 74555 156755, 74766 156943, 75236 157573, 74520 157770, 74284 157454, 73165 157755, 72939 157443, 72971 157348, 72919 157439, 72554 157539, 72507 157460, 72513 157534, 71808 157737, 71687 157389, 70900 157607, 70751 157241, 70693 157205, 70018 157408, 69984 157456, 69370 157241, 69251 157677, 68886 157760, 68644 157457, 67888 157662, 67637 157346, 67275 157426, 67241 157393, 67256 157445, 66147 157742, 66036 157396, 65608 157514, 65751 157863, 65619 158286, 65886 158601, 65651 159053, 65796 159402, 65556 160266, 65831 160943, 65529 161792, 65597 161798, 65843 162102, 65737 162505, 65858 162873, 65692 163221, 65876 163256, 65720 163421, 65885 163640, 65774 164075, 65910 164410, 65658 164866, 65544 165258, 65473 165304, 65561 165285, 65819 165598, 65578 166046, 65531 166063, 65577 166056, 65703 166405, 65593 166815, 65559 166832, 65847 167140, 65606 167593, 65738 167946, 65614 168367, 65876 168683, 65637 169136, 65772 169487, 65557 170316, 65533 170292, 65781 171067, 65583 171871, 65818 172575, 65625 173403, 65880 173721, 65782 174148, 65898 174492, 65656 174945, 65903 175266, 65820 175675, 65558 176151, 65668 176493, 65546 176914, 65843 177220, 65592 177680, 65716 178031, 65617 178436, 65570 178457, 65620 178454, 65882 178761, 65632 179194, 65533 179243, 65626 179237, 65745 179574, 65649 179978, 65615 179996, 65653 179994, 65925 180299, 65659 180761, 65776 181115, 65577 181932, 65808 182657, 65603 183467, 65545 183504, 65605 183508, 65838 184200, 65639 185035, 65915 185341, 65827 185752, 65480 186343, 65632 186582, 65501 186891, 65545 186992, 66202 187201, 65560 187763, 65701 188114, 65576 188534, 66234 188743, 65566 189323, 65614 189322, 65730 189656, 65620 190069, 66264 190285, 65652 190835, 65758 191199, 65666 191602, 65608 191627, 65530 191968, 65565 192027, 65534 192103, 65621 192400, 65685 192385, 65787 192742, 65594 193569, 65824 194283, 66195 194191, 66470 194493, 67598 194194, 67871 194496, 68992 194200, 69102 194547, 70603 194146, 70717 194491, 71479 194286, 71490 194293, 72225 194092, 72736 193165, 72767 193153, 72621 192486, 73196 192721, 73327 192226, 73576 191776, 73682 191740, 73842 191370, 74184 191229, 74218 191123, 74147 190836, 74194 190661, 74369 190553, 74419 190378, 74790 190279, 75282 189363, 75397 188951, 75761 188857, 75873 188403, 76160 187895, 76325 187333, 76389 187509, 76729 187442, 76911 186779, 76572 186683, 76823 186204, 77093 186336, 77080 186545, 77348 186477, 77812 185569, 77935 185151, 78187 185078, 78087 184767, 78356 184872, 78431 184624, 78661 184180, 78730 184154, 78821 183852, 78590 183804, 78689 183468, 78936 183555, 79069 183375, 79373 183238, 79520 182788, 79650 182739, 79645 182111, 80076 182291, 80335 181780, 80465 181356, 80622 181310, 80708 181083, 80909 181009, 81245 179994, 81607 179878, 81695 179369, 81893 178777, 82087 178846, 82185 178562, 82544 178484, 82695 178028, 82910 177587, 83278 177484, 83494 177034, 83785 176194, 84063 176102, 83996 175759, 84215 175940, 84568 175193, 84711 174763, 84994 174530, 85148 174474, 85437 173794, 85802 173699, 86008 173243, 86315 172396, 86681 172288, 87080 171399, 87230 170971, 87600 170873, 87762 170437, 88141 169559, 88510 169460, 88809 168650, 88644 168644, 88738 168425, 88866 168506, 89018 168160, 89386 168058, 89504 167778, 89434 167652, 89734 167183, 90101 167096, 90305 166561, 90238 166135, 90861 165988, 91458 164535, 91312 164423, 91392 164176, 91601 164140, 91696 164319, 91882 164273, 91989 164003, 91899 163875, 91888 163551, 92118 163678, 92232 163401, 92607 163297, 93132 161992, 93502 161888, 94024 160582, 94396 160480, 94749 159613, 95102 159509, 95655 158201, 95921 158121, 95957 157983, 96052 158024, 96359 157230, 96733 157124, 97204 156023, 96890 155669, 97362 155556, 97431 155387, 97801 155285, 98183 154406, 98552 154303, 99041 153014, 99407 152906, 99573 152468, 99955 151598, 100324 151489, 100642 150633, 101006 150534, 101391 149663, 101355 149653, 101531 149174, 101630 149192, 101928 149112, 102082 148679, 102482 147800, 102850 147701, 103158 146838, 103528 146736, 103645 146479, 103526 146201, 103886 145859, 104011 145391, 104094 145381, 104235 144994, 104605 144886, 105015 144003, 105131 143658, 105068 143597, 105135 143534, 105066 143210, 105331 142639, 105595 143065, 105437 143330, 105195 143562, 105533 143476, 105682 143043, 106054 142941, 106418 142161, 106377 142075, 106509 141472, 106681 141424, 106788 141575, 106990 141522, 107138 141092, 107557 140201, 107703 139785, 108067 139684, 108363 138833, 108624 138746, 108604 138547, 108801 138492, 108870 138291, 109320 137398, 109669 137308, 109947 136450, 110315 136349, 110754 135449, 110890 135030, 111240 134928, 111397 134497, 111616 134054, 111811 133996, 111889 133726, 112140 133638, 112331 133108, 112303 133062, 112349 133049, 112476 132653, 112848 132550, 113294 131655, 113426 131231, 113800 131128, 113932 130701, 114382 129802, 114512 129385, 114877 129295, 115015 128858, 115241 128410, 115371 128374, 117026 129315, 120530 130977, 124387 132501, 128548 133870, 132944 135062, 137562 136077, 142293 136898, 147340 137558, 147017 138014, 146860 138296, 146399 138935, 146209 139365, 145835 139873, 145634 140056, 145550 140254, 145315 140588, 145226 140647, 144845 141272, 144597 141521, 144407 141978, 144121 142347, 143642 143102, 143386 143392, 142990 144083, 142651 144537, 142428 144986, 142059 145352, 141994 145492, 141721 145955, 141311 146521, 141075 146907, 140678 147411, 140490 147843, 140135 148328, 139911 148545, 139761 148914, 139515 149171, 139144 149762, 139048 150044, 138623 150624, 138349 150927, 138250 151170, 137886 151689, 137650 152136, 137393 152379, 137061 153047, 136777 153304, 136609 153660, 136240 153932, 135775 154562, 135501 154829, 135137 155319, 134997 155429, 134778 155726, 134378 156427, 133836 157068, 133657 157533, 133391 157773, 133165 158121, 132928 158563, 132646 158891, 132022 159869, 131754 160196, 131521 160639, 131028 161226, 130851 161583, 130351 162280, 130135 162698, 129687 163327, 129220 164012, 128902 164587, 128519 165061, 128177 165672, 127820 166088, 127596 166517, 127367 166811, 127179 167163, 126719 167757, 126403 168372, 126040 168766, 125987 168874, 125644 169463, 125337 169779, 125055 170292, 124774 170757, 124682 170931, 124187 171560, 123859 172171, 123488 172539, 123205 173126, 122847 173669, 122552 174080, 122246 174551, 121896 175064, 121654 175352, 121245 176061, 120966 176353, 120722 176718, 120526 177123, 120106 177823, 119830 178086, 119298 178849, 119016 179313, 118723 179871, 118439 180145, 118189 180487, 118083 180732, 117733 181289, 117481 181536, 116854 182505, 116636 182878, 116374 183188, 116151 183588, 115853 184057, 115588 184517, 115290 184957, 115012 185295, 114915 185477, 114580 186012, 114182 186802, 113908 187085, 113509 187800, 113229 188112, 112787 188840, 112515 189119, 112184 189714, 111859 190184, 111625 190643, 111163 191217, 111025 191583, 110743 191957, 110373 192537, 110032 192950, 109726 193489, 109084 194440, 108694 194935, 108850 195238, 109218 195146, 109428 195465, 110149 195306, 110529 195194, 110745 195487, 111481 195312, 111862 195193, 112074 195501, 112807 195337, 113201 195189, 113405 195509, 114112 195371, 114466 195233, 114667 194866, 115018 194821, 115639 195010, 116361 194787, 116547 195136, 116970 195062, 117650 194877, 117704 194835, 118410 194642, 118461 194642, 119127 194520, 119481 194861, 119751 194647, 119954 194228, 120650 194038, 121050 194650, 121085 194674, 121408 195328, 121356 195424, 121124 196188, 121233 196325, 121164 196169, 121505 195364, 121527 195295, 121884 194489, 122577 194279, 122642 194299, 123322 194086, 123666 194814, 123722 194710, 124078 194613, 124114 194635, 124461 194491, 125020 194725, 124593 195229, 124697 195603, 125075 195480, 125074 194722, 126165 194440, 126390 194752, 126496 195248, 126693 195429, 126677 195618, 126805 195495, 126762 195021, 126465 194763, 127116 194599, 127324 194481, 127405 194254, 127602 194199, 127675 193999, 127793 193964, 127896 193673, 128166 193552, 128403 193026, 128776 192924, 128981 192475, 129276 191623, 129643 191528, 130063 190633, 130212 190210, 130575 190114, 130869 189248, 131242 189143, 131351 188809, 131289 188741, 131301 188545, 131434 188605, 131809 187835, 132160 187793, 132459 186874, 132549 186846, 132580 186231, 132970 186475, 133266 185874, 133396 185452, 133772 185348, 133867 185042, 133812 184949, 133850 184801, 133952 184827, 134345 184038, 134387 184017, 134280 183270, 134309 183134, 134013 182568, 134468 182109, 134446 182062, 134579 181638, 134425 181292, 134650 180843, 134175 180218, 134633 179297, 134144 178656, 134589 177753, 134357 177434, 134478 177065, 134457 177019, 134594 176541, 134362 176270, 134577 175877, 134414 175480, 134678 174633, 134543 174282, 134551 174219, 134074 174023, 134527 173562, 134631 173107, 134505 172693, 134035 172483, 134493 172027, 134596 171555, 134449 171206, 134682 170755, 134187 170128, 134672 169197, 134172 168569, 134640 167665, 134141 167027, 134569 166177, 134564 166102, 134351 165806, 134468 165449, 134444 165394, 134563 164934, 134362 164659, 134867 163332, 135646 163086, 135707 163109, 135778 163310, 135718 163493, 135858 163702, 136156 163548, 136383 163651, 136396 163308, 137035 163054, 137190 163091, 137266 163266, 137467 163402, 137643 163798, 137828 164079, 137672 164909, 138121 164879, 138130 164514, 137984 164423, 138085 164266, 138162 163987, 138262 163918, 138350 163548, 138117 163475, 137942 163271, 138390 162955, 138609 162989, 138712 162949, 138722 163058, 138859 163281, 139115 163228, 139527 163223, 139950 163026, 140269 163023, 140264 163053, 140277 163022, 140733 163024, 141114 162848, 141589 162660, 141565 162512, 141693 162413, 142172 161725, 142240 161686, 142238 161626, 142276 161616, 142650 161074, 142786 160969, 143119 160373, 143649 159728, 143688 159715, 143999 158920, 144034 158888, 144644 157689, 144747 157285, 145292 156911, 145368 156880, 145451 156620, 145683 156111, 145758 155884, 145973 155762, 146056 155650, 146134 155212, 146344 154766, 146736 154271, 147174 153872, 147391 153316, 147528 152892, 147758 152580, 148061 152317, 148203 151882, 148503 151759, 148952 151037, 149189 150370, 149415 150048, 149616 149930, 149685 149587, 149864 149120, 150203 149018, 150570 148569, 150653 148508, 150751 148258, 151041 147664, 151147 147523, 151239 147222, 151382 146938, 151520 146900, 151598 146737, 152092 146340, 152213 145792, 152277 145711, 152425 145305, 152677 145122, 152803 144856, 153029 144581, 153303 144453, 153504 143888, 153888 143618, 154069 143597, 154054 143275, 154158 142934, 154405 142478, 154714 142006, 154837 141897, 154994 141479, 155364 141452, 155548 141002, 155749 140685, 155985 140036, 156219 139845, 156321 139627, 156471 139499, 156725 139380, 156869 139089, 156956 138794, 157276 138354, 157269 138228, 158822 138256, 158803 138559, 158509 138773, 158437 139047, 158278 139309, 158133 139373, 158081 139532, 157956 139640, 157922 139800, 157784 139854, 157812 139993, 157672 140101, 157645 140263, 157504 140316, 157522 140461, 157373 140582, 157247 140835, 157171 140869, 157155 140949, 156957 141143, 156869 141414, 156786 141517, 156502 141945, 156178 142559, 156007 142646, 155956 142828, 155832 142965, 155698 143287, 155364 143645, 155286 143787, 154975 144260, 154836 144414, 154642 144822, 154469 145036, 154411 145190, 154227 145357, 153632 146289, 153443 146448, 153380 146635, 153269 146771, 153126 147093, 152870 147551, 152540 148028, 152295 148235, 152229 148502, 152150 148593, 152019 148893, 151724 149156, 151545 149427, 151238 149657, 151139 149963, 151216 150269, 151188 150725, 151286 151087, 151798 151949, 151977 152406, 152177 152684, 151938 152577, 151804 152789, 151386 152843, 151134 153113, 150919 153512, 150751 153719, 150559 153866, 150334 154215, 150073 154721, 149949 154834, 149909 154952, 149504 155451, 149250 155908, 149015 156359, 148745 156557, 148636 156891, 148230 157457, 148004 157667, 147776 157703, 147659 157507, 147610 157133, 147496 156922, 147217 156646, 146882 156598, 146558 156703, 146394 157151, 146174 157335, 146098 157547, 145961 157677, 145503 158443, 145191 158768, 145094 158985, 144976 159057, 144861 159437, 144746 159618, 144550 159779, 144466 159933, 144261 160123, 144004 160497, 143866 160852, 143789 160851, 143846 160878, 143580 161088, 143494 161362, 143202 161830, 143146 161894, 142880 162327, 142645 162568, 142502 162797, 142739 162854, 142774 163111, 142876 163400, 142749 163505, 142888 163588, 143012 163821, 143247 164091, 143247 164253, 143372 164280, 143349 164116, 143672 163640, 143547 163286, 144051 163134, 144338 163366, 144653 163371, 144674 163450, 144958 163448, 144923 163849, 145284 163879, 145409 163551, 145462 163220, 145589 163461, 145909 163323, 145973 163342, 146541 163241, 146366 163676, 146705 163960, 147074 163864, 147176 163455, 147527 163256, 147600 163276, 147971 163180, 148189 163177, 148142 163577, 148177 163661, 148667 163821, 148655 163942, 148315 164708, 148425 164786, 148359 164681, 148889 163898, 148954 163354, 149282 163201, 149602 163177, 149640 163396, 149971 163469, 150107 163789, 150241 163916, 150565 164014, 150688 163655, 150611 163457, 150601 163290, 151114 163083, 151224 163121, 151312 163338, 151600 163388, 151825 163343, 151825 163551, 151744 163753, 151915 164093, 151905 164382, 152242 164377, 152234 164006, 152326 163941, 152501 163545, 152761 163246, 152947 163246, 153209 163339, 153973 163107, 154022 163129, 154087 163303, 153625 163307, 153670 163762, 154075 163890, 154055 164003, 154145 163930, 154331 163431, 154495 163238, 154620 163271, 155363 163094, 155512 163108, 155453 163267, 155206 163579, 155380 163919, 155474 164280, 155476 164669, 155431 164754, 155497 165049, 155388 165476, 155862 165664, 155779 164972, 155822 164669, 155801 164385, 155483 164277, 155819 164081, 156041 163483, 156057 163346, 156270 163138, 156810 162905, 157036 162950, 157345 162774, 157308 162616, 156948 161938, 156933 161798, 156734 161570, 156689 161234, 156542 160893, 156609 160765, 156534 160873, 156403 160578, 156205 160042, 156378 159924, 156484 160128, 156525 160366, 156799 160404, 157141 161038, 157137 161111, 157440 161467, 157756 162105, 158218 162805, 158271 162806, 158743 162985, 158919 163222, 159178 163134, 159330 162836, 159400 162509, 159484 162406, 159393 162364, 159315 162064, 159452 161640, 159317 161288, 159376 160977, 159489 160854, 159372 160796, 159306 160516, 159391 160106, 159280 159748, 159358 159461, 159488 159305, 159352 159223, 159283 158972, 159411 158424, 159602 157723, 159342 157017, 159577 156179, 159298 155498, 159503 154623, 159426 154422, 159284 153932, 159493 153101, 159403 152872, 159272 152385, 159491 151551, 159368 151196, 159421 150983, 159624 150739, 159415 150599, 159360 150422, 159443 150013, 159344 149652, 159395 149440, 159598 149195, 159387 149066, 159329 148881, 159405 148473, 159316 148109, 159368 147889, 159631 147890, 159542 147661, 159357 147547, 159285 147342, 159390 146926, 159495 146399, 159583 146099, 159421 145638, 159510 145515, 159782 145529, 159710 145288, 159507 145155, 159459 144969, 159562 144553, 159398 144096, 159489 143988, 159782 143999, 159700 143741, 159482 143611, 159413 143431, 159499 143020, 159370 142551, 159464 142448, 159762 142458, 159678 142196, 159457 142064, 159387 141887, 159467 141479, 159344 141007, 159439 140901, 159718 140905, 159639 140656, 159431 140525, 159360 140344, 159439 139936, 159406 139820, 159506 139707, 159797 139727, 159713 139472, 159761 139399, 159631 138962, 159700 138701, 159487 138579, 159183 138262, 161310 138300, 165974 138218, 170748 137963, 175585 137525, 180428 136898, 181209 136764, 181125 137713, 181203 138621, 181160 138921, 181173 139792, 181227 140165, 181128 140875, 181127 141502, 181372 141424, 181550 141273, 181579 140839, 181439 140495, 181455 140273, 181386 139854, 181458 139715, 181195 139399, 181407 138953, 181439 138728, 181314 138274, 181332 138198, 181214 137843, 181386 137408, 181415 137012, 181279 136751, 185219 136077, 186357 135831, 186193 136213, 186214 136472, 186370 137063, 186097 137658, 186215 138023, 186369 138599, 186248 138789, 186139 139229, 186210 139575, 185932 139933, 185942 140917, 186255 141114, 185947 141479, 185977 142434, 186325 142645, 185876 142945, 185797 143177, 185968 143518, 186406 143598, 186679 143711, 186878 143719, 187223 143562, 187209 143252, 187255 143165, 187167 142862, 186746 142528, 186854 142168, 187134 141800, 187160 141685, 187129 141502, 186830 140955, 186793 140767, 186845 140625, 187119 140249, 187144 140136, 187111 139985, 186797 139413, 186799 138944, 186750 138651, 186761 138172, 186863 137846, 186800 137412, 186710 137112, 186717 136607, 186848 136299, 186660 135765, 189894 135066, 194392 133870, 198657 132499, 201412 131440, 201451 131614, 201484 131541, 201469 131417, 202618 130977, 205127 129826, 205173 130479, 205126 131289, 205178 131708, 205158 131280, 205206 130492, 205157 129812, 206243 129315, 209488 127541, 212324 125679, 214742 123750, 216717 121794, 217547 120809, 218272 119823, 218893 118840, 219414 117863, 219414 83293, 219920 83818, 220188 83799, 220136 83469, 220008 83405, 220138 83209, 220266 83335, 220548 83294, 220522 82885, 220601 82855, 220568 82536, 220674 82339, 220674 81843, 220766 81259, 220885 80785, 220977 80621, 220969 80532, 221533 80172, 221578 79395, 221753 78663, 222157 78320, 222262 78074, 222494 77800, 222527 77676, 222756 77313, 222839 77618, 222890 78396, 223018 79157, 223040 79544, 223166 79577, 222757 79792, 222589 79812, 222631 79973, 222756 79963, 224897 80276, 224891 82016, 224702 82266, 224697 91951, 224889 92293, 224374 92482, 224375 92680, 224313 92870, 224313 93068, 224373 93258, 224374 93456, 224300 93645, 224274 94231, 224355 94421, 224374 95006, 224286 95196, 224259 95782, 224321 95971, 224322 96169, 224380 96359, 224381 96557, 224318 96746, 224318 96944, 224248 97134, 224281 97720, 224362 97909, 224331 98495, 224245 98685, 224269 99270, 224359 99460, 224341 100046, 224235 100235, 224246 100821, 224276 101011, 224305 101596, 224354 101786, 224350 102371, 224279 102561, 224264 103147, 224343 103337, 224387 103922, 224308 104112, 224290 104697, 224311 104887, 224330 105473, 224348 105662, 224346 106248, 224270 106438, 224259 107023, 224328 107213, 224329 107411, 224387 107600, 224388 107798, 224319 107988, 224278 108574, 224323 108764, 224336 109349, 224353 109539, 224362 110125, 224284 110314, 224294 110900, 224337 111089, 224302 111477, 224317 112063, 224384 112252, 224385 112450, 224328 112640, 224329 112838, 224263 113028, 224279 113613, 224363 113803, 224362 114389, 224267 114578, 224268 114776, 224360 114966, 224361 115164, 224305 115353, 224268 115939, 224347 116129, 224381 116714, 224317 116904, 224318 117102, 224257 117292, 224291 117877, 224374 118067, 224350 118653, 224255 118842, 224269 119428, 224356 119618, 224344 120203, 224254 120393, 224263 120978, 224349 121168, 224348 121754, 224263 121944, 224226 122529, 224277 122719, 224286 123304, 224343 123494, 224352 124080, 224283 124269, 224264 124855, 224330 125045, 224331 125243, 224387 125432, 224388 125630, 224314 125820, 224284 126405, 224317 126595, 224337 127181, 224355 127370, 224352 127956, 224290 128146, 224259 128731, 224315 128921, 224316 129119, 224389 129309, 224389 129507, 224325 129696, 224277 130084, 224327 130543, 224365 131832, 224307 132022, 224279 132608, 224330 132798, 224310 133771, 224386 133961, 224344 134546, 224263 134736, 224273 135321, 224357 135511, 224351 136097, 224162 136285, 224170 136484, 223690 136646, 223677 137033, 222752 137306, 222753 137695, 222378 137797, 222381 138123, 222459 138167, 222501 138666, 222383 138698, 222007 138337, 222005 138676, 221632 138779, 221619 139543, 221259 139656, 221260 139861, 221416 140004, 221418 140330, 221042 140105, 220883 140149, 220882 140532, 220510 140636, 220517 141024, 220144 141127, 220128 141898, 219763 141991, 219750 142390, 219379 142496, 219375 142886, 218996 142986, 219000 143371, 218632 143478, 218638 143862, 218265 143966, 218253 144350, 218162 144384, 218206 144710, 217879 144846, 217882 145231, 217506 145334, 217517 145720, 217146 145825, 217133 146210, 216766 146315, 216764 147092, 216390 147188, 216399 147578, 216029 147682, 216022 147975, 216060 148062, 215820 148315, 215638 148403, 215631 148565, 215251 148663, 215280 149433, 214910 149523, 214902 149844, 215267 150022, 214894 150125, 214829 149949, 214525 150014, 214508 150420, 214353 150468, 214581 150847, 214143 150671, 214146 150905, 213775 151011, 213789 151393, 213412 151492, 213388 152277, 213012 152385, 213027 152604, 213214 152718, 213161 153366, 212934 153182, 212999 153112, 212944 152792, 212652 152863, 212675 153249, 212297 153349, 212287 153744, 211913 153846, 211896 154238, 211522 154341, 211536 154720, 211182 154826, 211189 155210, 210817 155310, 210813 155433, 210943 155667, 210953 155830, 210793 155880, 210773 156091, 210402 156196, 210382 156588, 210011 156692, 210013 157468, 209642 157565, 209664 157939, 209709 157991, 209649 157959, 209286 158054, 209268 158448, 208888 158547, 208866 158939, 208497 159050, 208521 159429, 208146 159529, 208171 159910, 207794 160011, 207767 160621, 207930 160757, 207954 161109, 207614 160843, 207378 160904, 207404 161226, 207571 161323, 207411 161327, 207383 161294, 207023 161382, 207057 161766, 206682 161867, 206657 162260, 206290 162369, 206260 162760, 205886 162863, 205915 163243, 205541 163347, 205574 163728, 205537 164111, 205169 164220, 205154 164539, 205414 164426, 205703 164468, 205732 164833, 205158 164751, 205033 164651, 204770 164720, 204795 165095, 204512 165182, 204584 165308, 204436 165272, 204453 165576, 204081 165678, 204059 166078, 203685 166180, 203655 166580, 203679 166810, 203940 167012, 203703 167077, 203574 166989, 203313 167061, 203344 167431, 203043 167523, 203152 167686, 202956 167869, 202950 167936, 202576 168039, 202520 168442, 202565 168803, 202187 168719, 202204 168913, 201830 169016, 201868 169392, 201495 169494, 201429 170288, 201058 170393, 201021 170788, 200712 170876, 200875 171089, 200644 170958, 200612 171289, 200239 171393, 200319 172145, 199946 172245, 199905 172642, 199531 172744, 199512 173004, 199646 173106, 199728 173470, 199291 173203, 199122 173247, 199164 173623, 198825 173749, 198984 174062, 198985 174449, 198847 174544, 198443 174414, 198421 174601, 198047 174704, 198002 175107, 198049 175476, 197670 175586, 197722 175954, 197352 176052, 197311 176456, 196940 176558, 196894 176957, 196518 177059, 196567 177435, 196190 177535, 196243 177915, 196199 178309, 195823 178409, 195783 178812, 195408 178914, 195457 179288, 195082 179389, 195137 179765, 194761 179866, 194720 180268, 194347 180370, 194297 180774, 194349 181142, 194257 181173, 194297 181447, 194021 181522, 194031 181618, 193663 181718, 193611 182120, 193234 182219, 193190 182624, 192819 182730, 192867 183096, 192497 183200, 192557 183573, 192185 183676, 192083 184478, 191710 184582, 191658 184983, 191286 185088, 191230 185491, 191288 185858, 190918 185953, 190974 186296, 191059 186314, 191116 186460, 190971 186419, 190903 186356, 190606 186433, 190549 186836, 190258 186921, 190299 187297, 190530 187593, 189800 187434, 189749 187448, 189809 187815, 189613 187873, 189642 188044, 189874 188640, 189471 188525, 189259 188357, 189128 188393, 189072 188794, 188692 188893, 188648 189257, 188785 189263, 188860 189435, 188657 189394, 188704 189670, 188332 189774, 188393 190139, 188020 190242, 187964 190646, 187596 190749, 187527 191158, 187597 191521, 187229 191623, 187293 191992, 186924 192092, 186862 192499, 186486 192601, 186424 193005, 186055 193112, 186121 193477, 185748 193580, 185821 193947, 185450 194051, 185386 194454, 185009 194553, 184943 194968, 185021 195330, 184650 195435, 184721 195797, 184537 195854, 184682 196226, 184321 196119, 184287 196308, 183909 196405, 183869 196697, 184047 196765, 184088 196958, 183889 197012, 183921 197182, 183546 197289, 183623 197647, 183256 197743, 183185 198155, 182813 198251, 182671 199072, 182305 199172, 182228 199583, 181845 199678, 181934 200052, 181562 200157, 181644 200520, 181260 200617, 181122 201435, 180750 201544, 180789 201697, 181025 201857, 181067 202038, 180880 202089, 180652 201958, 180460 202008, 180544 202370, 180176 202475, 180095 202878, 179729 202981, 179633 203401, 179730 203753, 178989 203963, 179076 204324, 178998 204731, 178755 204804, 178703 204915, 178611 204941, 178547 205244, 178380 205295, 178682 205634, 178217 205517, 178263 205710, 177883 205810, 177982 206175, 177598 206272, 177445 207094, 177074 207203, 177165 207560, 176996 207612, 177046 207804, 176849 207858, 176889 208025, 176520 208123, 176430 208532, 176068 208625, 175976 209051, 175428 209973, 175072 210060, 174998 210370, 175169 210440, 175123 210657, 174925 210711, 174880 210901, 174505 211003, 174235 211454, 173964 211932, 173784 212750, 173418 212850, 173344 213184, 173402 213250, 173419 213632, 173152 214093, 173044 213735, 173270 213286, 172945 213370, 172852 213788, 172323 214698, 155836 214698, 155808 214583, 155857 214296, 155679 214476, 155661 214698, 154486 214698, 154447 214569, 154466 214349, 154309 214698, 150462 214698, 150557 214639, 150571 214234, 150345 214296, 150390 214518, 150365 214698, 148599 214698, 148466 214404, 147917 214662, 147923 214698, 146434 214698, 146753 213964, 146735 213889, 146374 213526, 146641 213980, 146244 214698, 145085 214698, 145088 214639, 144986 214698, 127633 214698, 127633 200302, 53651 200302, 53784 199534, 54142 199451, 54217 199016, 54592 198913, 54515 198547, 54895 198447, 54810 198079, 55181 197977, 55254 197572, 55406 197525, 55447 197288, 55676 197166, 55704 197056, 55627 196700, 55995 196588, 55928 196239, 56281 196134, 56360 195726, 56721 195634, 56806 195213, 57169 195121, 57093 194741, 57132 194726, 57075 194683, 57057 194720, 56709 194825, 55928 194677, 55640 193971, 55196 193707, 55164 194005, 55069 194128, 55229 194351, 55739 194638, 55157 194768, 55124 194873, 54408 195069, 54470 194680, 54416 194640, 54096 194727, 53981 194426, 54036 194311, 53971 194042, 53732 193720, 53734 193331, 53823 193001, 53809 192535, 53737 192285, 53790 191446, 53685 190724, 53733 190342, 53849 189981, 53706 189523, 53742 189453, 53658 189177, 53592 189107, 53643 189014, 53700 188689, 53806 188417, 53783 187794, 53594 188203, 53584 188721, 53521 189084, 53600 189779, 53565 190276, 53500 190585, 53565 191051, 53675 191409, 53499 192105, 53528 192612, 53654 192966, 53637 193327, 53485 193787, 53346 194046, 53566 194357, 53564 194440, 53021 194647, 52283 194890, 52309 193865, 52247 193430, 52104 193390, 52219 193142, 52181 192594, 52204 192030, 52106 191839, 52182 191518, 52155 190656, 52007 190338, 52077 189574, 52041 188755, 51827 188040, 51893 187815, 51945 187232, 51866 186478, 51914 186278, 51851 186085, 51960 185677, 51711 185181, 51635 184991, 51545 184955, 51124 185544, 51028 185921, 51033 186424, 51342 186623, 51029 186976, 51011 187428, 51026 188012, 51409 188155, 51041 188494, 51040 189264, 51064 189412, 50959 190121, 51076 190571, 51032 190968, 51097 191449, 51044 191735, 51054 192520, 51116 192887, 51183 193033, 51130 193269, 51293 193613, 50941 193930, 50907 194106, 51296 194388, 51436 194716, 50336 195029, 49906 194767, 49915 194635, 49759 194640, 49209 194959, 49252 195038, 49164 195062, 49044 194946, 48408 194737, 48444 194781, 48385 195162, 48035 195258, 47713 194981, 47679 194991, 47701 195373, 47760 195446, 47667 195443, 47317 195245, 47191 195124, 46967 195180, 46855 195082, 46612 195148, 46418 194948, 45896 195087, 45823 195046, 45509 195117, 45110 194919, 44344 195124, 43916 194859, 43177 195009, 42985 194896, 42879 194983, 42444 195101, 42280 194901, 41351 195168, 41250 195087, 40961 195437, 40494 195022, 40259 195000, 39805 194781, 39909 195007, 39500 195117, 39322 194955, 38729 195106, 38515 194975, 38341 195063, 38351 195215, 38222 195257, 38246 195495, 37995 195433, 37994 195679, 37649 195800, 37613 196196, 37240 196298, 37205 196691, 36989 196758, 37213 197050, 36859 197019, 36873 197175, 36501 197279, 36718 197608, 36867 197940, 36526 197815, 36489 198038, 36134 198134, 36096 198546, 35791 198637, 35989 198829, 35734 198708, 35755 199026, 35390 199134, 35442 199555, 35409 199516, 35044 199613, 35028 199922, 35249 200071, 35013 200138, 34981 200302, 20742 200302, 20744 197971, 20553 197628, 20546 197240, 20759 197051, 20949 196801, 20930 196420, 20932 195645, 20744 195302, 20737 195112, 20857 194911, 21062 194748, 22089 194491, 22169 194439, 22687 194173, 23062 194242, 23232 194116, 23298 193921, 23060 193221, 22685 193510, 22590 193316, 22602 192927, 22595 192144, 22536 190992, 22569 190593, 22558 189427, 22518 189054, 22529 188263, 22574 187778, 22532 186712, 22494 186341, 22491 185568, 22510 184772, 22486 184403, 22466 183309, 22549 182850, 22596 182074, 22575 181298, 22570 179360, 22545 178974, 22551 177819, 22593 177801, 22537 177425, 22684 177294, 23019 177290, 22990 176949, 23224 176670, 23224 176497, 23359 176384, 23363 176072, 23187 175868, 23431 175976, 23712 175883, 23685 175596, 23595 175407, 24103 175411, 24113 175028, 24175 174928, 24543 174969, 24568 174191, 24498 173435, 24575 173026, 24557 172597, 24620 172167, 24627 171073, 24581 170311, 24667 169208, 24612 168364, 24689 167180, 24689 166553, 24711 165023, 24650 164090, 24954 163619, 24698 163300, 25193 163063, 25633 163045, 25657 163241, 25767 163121, 26023 163291, 26250 163264, 26539 163464, 26455 163207, 26690 163062, 27138 162950, 27520 163186, 27771 163107, 27896 163124, 28216 163058, 28637 162871, 29392 162872, 29764 162750, 29954 163024, 30027 163271, 29648 163368, 29388 163566, 29719 163864, 29748 163953, 29847 163930, 30131 163999, 30306 163504, 30271 163324, 30372 163145, 30637 162954, 30886 163056, 31159 163081, 31198 163424, 31167 163465, 31250 163740, 31454 163604, 31888 163783, 32056 163304, 31975 163178, 31916 163200, 31613 163151, 31409 163012, 31631 162856, 31918 162783, 32022 162505, 32083 162137, 32399 161966, 32450 161676, 32717 161625, 32832 161459, 32736 161100, 33092 161157, 33190 161070, 33206 160969, 33096 160572, 33555 160537, 33485 160236, 33424 160134, 33469 160073, 33905 160057, 33753 159656, 33812 159557, 33918 159612, 34237 159580, 34262 159188, 34336 159109, 34298 158792, 34600 158834, 34703 158718, 34623 158254, 34656 158212, 35091 158198, 35028 157720, 35298 157549, 35431 157288, 35542 157228, 35743 156938, 35873 156488, 36210 156355, 36178 155889, 36630 155855, 36633 155765, 36513 155418, 36978 155373, 36798 154945, 36831 154900, 37301 154898, 37220 154441, 37409 154144, 37703 153922, 37776 153663, 38009 153472, 38029 153147, 38382 153034, 38406 152635, 38799 152550, 38815 152117, 39196 152020, 39165 151652, 39548 151556, 39487 151186, 39856 151082, 39842 151010, 39941 150739, 40108 150549, 39917 150261, 40208 150437, 40377 150241, 40393 150083, 40199 149760, 40585 149785, 40728 149752, 40695 149613, 40505 149288, 40890 149314, 41032 149281, 41006 148856, 41390 148767, 41455 148366, 41522 148223, 41288 147910, 41252 147909, 41279 147862, 41295 147898, 41688 147964, 41811 147891, 41812 147756, 41589 147451, 41507 147451, 41612 147245, 41604 147425, 41987 147486, 42320 147229, 42254 147156, 42326 147222, 42506 146937, 42535 146497, 42838 146326, 42849 146006, 43283 145940, 43054 145486, 43539 145451, 43457 145118, 43264 145227, 43048 145457, 42962 145398, 42680 145550, 42693 145188, 42769 144734, 42677 144417, 42524 144312, 42273 144244, 42204 144648, 41881 144798, 41865 145028, 41781 145170, 41734 145588, 41604 145624, 41264 145594, 41383 146102, 41220 146127, 40890 146070, 40957 145758, 41232 145563, 41396 145157, 41265 144417, 41259 144031, 41189 143894, 41270 143611, 41707 143270, 41753 143147, 41503 142801, 41481 142535, 41423 142436, 41372 142148, 41293 141961, 41130 141740, 41052 141406, 40816 141051, 40755 140524, 40923 140221, 41306 140198, 41678 140428, 41920 140749, 41974 140970, 42118 141267, 42297 141421, 42410 141650, 42540 141742, 42588 141899, 42733 142077, 42901 142524, 43088 142581, 43276 142419, 43318 142692, 43565 142805, 43645 143089, 43548 143115, 43286 143088, 43200 142862, 43047 143017, 43091 143141, 43376 143451, 43414 143592, 43194 143784, 43277 144085, 43378 144226, 43539 144633, 43582 144598, 43887 144674, 44002 144544, 44035 144434, 44026 144089, 44438 144027, 44420 143535, 44644 143346, 44711 143070, 44971 142901, 44968 142627, 45029 142540, 45428 142297, 46089 142293, 45516 141839, 45500 141670, 45751 141497, 45670 141272, 45665 141137, 45773 141013, 46200 141131, 46088 140768, 45780 140628, 45731 140479, 45515 140168, 45091 140033, 44753 140032, 45077 140607, 45058 140711, 44746 140816, 44439 140988, 44447 141219, 44337 141325, 44296 141479, 43892 141371, 44138 140679, 44330 140420, 44588 139939, 44694 139684, 44801 139571, 45065 139143, 45481 138553, 46203 138369, 46174 138033, 46015 137687, 45721 137570, 45651 137400, 45687 137293, 45607 136830, 45758 136630, 46151 136821, 46043 136518, 46111 136493, 45929 136161, 46098 135727, 45786 135563, 45678 135454, 45620 135309, 46175 135318, 46146 135527, 46249 135379, 46260 135193, 46144 134939, 46088 134941, 45909 134615, 46072 134203, 46116 134194, 46256 133609, 46109 133397, 46206 133163, 46060 133409, 45872 133204, 45851 133081, 45993 132655, 45970 132557, 46118 132296, 46329 132443, 46280 131801, 46313 131408, 46279 131025, 46185 130664, 46352 130231, 46361 129727, 46325 129462, 46163 129120, 46366 128676, 46354 128292, 46426 128021, 46394 127892, 46128 127891, 46238 128324, 46139 128703, 45825 128677, 45691 128726, 45639 128875, 45368 129174, 45201 129207, 45197 129383, 45015 129656, 44744 130123, 44516 130124, 44637 130313, 44552 130526, 44338 130731, 44266 130722, 44272 130801, 44081 131022, 43977 131269, 44010 131373, 43660 131488, 43780 131865, 43389 131959, 43346 132264, 43057 132455, 43001 132886, 42811 132998, 42630 132990, 42652 133183, 42553 133395, 42350 133593, 42201 133516, 42273 133674, 42097 133892, 42070 134117, 42112 134290, 41934 134331, 41594 134306, 41795 134581, 41844 134768, 41648 134814, 41363 134806, 41455 135061, 41430 135212, 41286 135284, 41044 135301, 41094 135548, 40922 135983, 40951 136094, 40596 136206, 40643 136554, 40284 136665, 40192 136817, 39909 136765, 40025 137004, 39907 137111, 39954 137411, 40303 138091, 40431 138443, 40521 139194, 40548 139239, 40521 139370, 40374 139458, 40131 139385, 39856 139474, 39678 139425, 39674 139039, 39459 138930, 39338 139012, 39194 139557, 39496 139909, 39046 139841, 38913 139883, 38918 140021, 39153 140362, 38737 140298, 38610 140357, 38430 140542, 38740 140626, 38845 140817, 38835 140976, 38684 141034, 38549 140897, 38386 140579, 38170 140801, 38164 141003, 38440 141316, 38455 141466, 38305 141504, 37913 141464, 38131 141787, 38161 141948, 37996 141984, 37574 141777, 37251 141717, 37439 141977, 37812 142263, 37623 142577, 37478 142353, 37260 142252, 36934 142187, 37128 142450, 37189 142820, 37229 142849, 37399 143344, 37209 143381, 36991 143262, 36837 143099, 36582 143099, 36657 143354, 37036 143639, 37079 143814, 36893 143843, 36471 143622, 36110 143543, 36302 143839, 36712 144115, 36709 144305, 36528 144350, 36359 144210, 35906 143947, 35709 143708, 35453 143802, 35420 144120, 35041 144221, 35079 144595, 34707 144699, 34704 145134, 34616 145264, 34361 145262, 34397 145524, 34243 145745, 33932 145728, 34084 145997, 33916 146228, 33600 146204, 33721 146485, 33626 146582, 33546 146943, 33213 147082, 33225 147396, 33103 147585, 32812 147587, 32875 147880, 32791 147995, 32683 148324, 32391 148479, 32344 148776, 32263 148744, 32306 148811, 32023 148935, 32001 149191, 31873 149187, 31925 149303, 31684 149423, 31667 149831, 31599 149887, 31272 149912, 31338 150239, 31302 150340, 31218 150409, 30875 150404, 31000 150719, 30962 150819, 30879 150881, 30531 150882, 30649 151203, 30513 151452, 30221 151396, 30293 151688, 30180 151778, 30125 152142, 29770 152255, 29855 152676, 29431 152741, 29485 153152, 29063 153215, 29095 153652, 28668 153710, 28718 154148, 28635 154233, 28302 154218, 28397 154534, 28283 154694, 27951 154702, 28007 155029, 27914 155256, 27651 155237, 27720 155494, 27570 155576, 27582 155984, 27165 156054, 27252 156486, 26809 156539, 26902 156882, 26886 156974, 26801 157037, 26438 157017, 26530 157372, 26413 157583, 26079 157533, 26157 157862, 26083 157931, 26092 158312, 25724 158418, 25701 158778, 25336 158889, 25372 159315, 24939 159372, 25022 159723, 25010 159817, 24923 159913, 24604 159896, 24689 160202, 24625 160290, 24561 160566, 24392 160497, 24501 160642, 24249 160776, 24184 160994, 23963 160947, 23923 161187, 23823 161230, 23864 161656, 23453 161727, 23512 162166, 23426 162246, 23083 162193, 23104 161848, 23396 161683, 23395 161293, 23769 161189, 23760 160791, 23981 160574, 24148 160316, 24213 159984, 24501 159818, 24609 159507, 24906 159347, 24911 158979, 24868 158922, 24935 158950, 25263 158834, 25271 158492, 25241 158441, 25300 158448, 25582 158314, 25624 157967, 25941 157822, 26022 157487, 26254 157272, 26417 157015, 26533 156711, 26762 156505, 26908 156238, 27118 156017, 27235 155628, 27445 155475, 27498 155117, 27821 154979, 27860 154637, 28074 154423, 28170 154208, 28436 153927, 28754 153371, 28990 153161, 28971 152783, 29302 152651, 29356 152327, 29665 152173, 29720 151806, 29922 151562, 30246 151043, 30458 150832, 30606 150574, 30799 150346, 30883 150000, 31181 149834, 31203 149443, 31522 149304, 31523 148950, 31866 148829, 31899 148492, 32132 148270, 32304 147997, 32428 147678, 32688 147479, 32744 147141, 32716 147076, 32782 147087, 33060 146949, 33104 146655, 33049 146539, 33180 146542, 33402 146421, 33445 146102, 33515 146092, 33715 145931, 33803 145633, 34062 145229, 34195 145115, 34298 144806, 34610 144629, 34523 144459, 34768 144387, 34974 144464, 34925 144146, 34959 143859, 35017 143862, 34971 143816, 35190 143598, 35384 143163, 35590 143080, 35676 142848, 35922 142563, 35952 142385, 36088 142201, 36247 142093, 36270 141910, 36364 141813, 36464 141527, 36760 141288, 36797 140990, 36741 140867, 36881 140870, 37144 140783, 37124 140513, 37068 140402, 37196 140409, 37462 140312, 37442 139943, 37791 139822, 37916 139485, 37949 139124, 37808 138992, 37991 139062, 38306 138967, 38125 138692, 38288 138625, 38662 138798, 38602 138489, 38631 138267, 38707 138224, 38687 138147, 38898 137983, 38953 137685, 38938 137562, 39067 137477, 39368 137515, 39389 137178, 39636 136926, 39665 136715, 39639 136603, 39759 136596, 40037 136182, 40115 135817, 40083 135759, 40139 135790, 40485 135689, 40495 135325, 40313 135151, 40556 135225, 40758 135091, 40804 134852, 40653 134709, 40854 134774, 41039 134616, 41134 134375, 41116 134326, 41160 134344, 41448 134187, 41751 133540, 41896 133390, 42097 132930, 42435 132467, 42397 132340, 42539 132343, 42669 132180, 42742 131995, 42616 131835, 42823 131864, 42973 131724, 43019 131387, 43281 131168, 43304 131066, 43568 130606, 43388 130428, 43636 130481, 43801 130347, 43795 130156, 43605 129929, 43904 129974, 44094 129892, 44147 129672, 44107 129536, 44231 129574, 44446 129400, 44464 128917, 44736 128646, 45001 128164, 45079 128181, 45337 127936, 45449 127764, 45583 127340, 45514 127020, 45601 126559, 45710 126404, 45990 125678, 45845 125361, 46150 125435, 46524 125322, 46735 125318, 46891 125248, 46994 125088, 47200 124959, 47051 124833, 47012 124622, 47332 123974, 47551 123712, 47636 124064, 47612 124395, 47862 124128, 47948 123978, 47899 123704, 47588 123688, 47848 123507, 47809 123241, 48226 122573, 48401 122692, 48180 123139, 48348 123290, 48552 123258, 48582 123030, 49060 122106, 48949 121956, 48769 121814, 48842 121560, 49093 121400, 49357 121705, 49400 121685, 49526 121284, 49597 121201, 49511 121126, 49365 120875, 49462 120651, 49683 120493, 49754 120770, 49897 120977, 50075 120840, 50111 120672, 50092 120298, 50293 119758, 50309 119455, 50552 118804, 50523 118620, 50712 118324, 50902 117773, 51108 117446, 51379 117246, 51510 117575, 51517 117961, 51449 118367, 51490 118548, 51632 118705, 51703 119073, 51913 119241, 52174 119720, 52266 119918, 52518 120220, 52747 120204, 52902 120084, 53122 120235, 52899 120400, 52921 120677, 52607 121083, 52419 120554, 52090 120510, 52030 120145, 51884 120043, 51747 120083, 51541 120042, 51332 120133, 51295 120347, 51204 120546, 51014 120678, 50859 120682, 50848 120857, 50589 121474, 50352 121769, 50063 122035, 49944 122268, 49676 122729, 49629 122904, 49445 123056, 49316 123078, 49294 123221, 49148 123421, 48978 123837, 48379 124456, 48045 125115, 48247 125384, 48522 125372, 48465 125595, 48696 125636, 48722 125699, 49504 125424, 49740 125426, 49729 125598, 49922 125637, 49973 125734, 50683 125475, 51119 125379, 51328 125378, 51370 125669, 51685 125623, 51716 125654, 52431 125418, 52730 125382, 52774 125564, 52916 125456, 53103 125610, 53852 125381, 54198 125365, 54361 125677, 55145 125393, 55431 125345, 55889 125188, 56038 125250, 56065 125485, 56292 125407, 56410 125441, 56650 125267, 56842 124761, 57158 124609, 57469 123748, 57586 123662, 57714 123400, 57990 123218, 58250 122759, 58316 122687, 58422 122362, 58563 122232, 58646 122048, 58806 121989, 59114 121369, 59204 121281, 59334 120967, 59561 120795, 59610 120702, 59690 120667, 60008 119990, 60333 119818, 60553 119361, 60834 118896, 60938 118614, 61094 118437, 61163 118287, 61281 118270, 61465 118078, 61716 117491, 61734 117122, 61801 117080, 61683 116724, 61502 116386, 61243 115807, 61128 115713, 61060 115437, 61066 115267, 61160 115194, 61444 115178, 61523 114830, 61592 114694, 61497 114342, 61378 113623, 61571 113222, 61856 113438, 62189 113437, 62461 113595, 62773 114101, 63065 114408, 63100 114495, 63338 114735, 63280 114348, 63292 113958, 63198 113596, 63208 113205, 63248 113111, 63610 113484, 63790 113605, 63881 113797, 63865 114139, 63828 114198, 63879 114212, 64146 113724, 64300 113404, 64437 113257, 64451 112935, 64662 112807, 64460 112758, 64399 112491, 64248 112144, 64176 111813, 64013 111417, 64362 110612, 64355 110177, 64265 109919, 64286 109761, 64205 109229, 63927 108435, 64121 108622, 64333 108918, 64580 109126, 64683 109313, 64955 109626, 65204 110078, 65439 110315, 65767 110778, 65887 110856, 66091 110595, 66354 110516, 66426 110428, 66971 109142, 67304 108987, 67666 108123, 67868 107716, 68206 107630, 68557 106719, 68909 106627, 69127 106156, 69469 105309, 69830 105183, 70092 104527, 70164 104281, 70381 103893, 70736 103755, 71007 102927, 71354 102671, 71631 102297, 71957 101514, 72324 101447, 72552 100953, 72626 100668, 72538 100569, 72817 100144, 73198 100022, 73597 99116, 73792 98745, 74099 98656, 74284 98158, 74484 97723, 74863 97584, 75067 97162, 75204 96738, 75442 96435, 75710 96262, 75960 95755, 76329 94963, 76621 94885, 77005 93991, 77388 93827, 77781 93010, 77992 92872, 78050 92754, 78153 92712, 78589 91933, 78720 91630, 78839 91477, 78859 91160, 79028 91037, 78871 90928, 78732 90731, 78677 90577, 78338 90063, 78274 89693, 78140 89295, 78212 89205, 78439 89084, 78466 88866, 78608 88688, 78536 88071, 78526 87750, 78617 87662, 78655 87448, 79177 87641, 79385 87768, 79521 87602, 79581 87785, 79745 87824, 79979 87811, 80102 87329, 80218 87223, 80250 87099, 80362 87095, 80620 87347, 80928 87386, 81115 87683, 81346 87440, 81668 87230, 81710 87111, 81678 86822, 81393 86505, 81274 86145, 81099 85911, 80908 85434, 80970 85125, 81171 84913, 81591 84843, 81481 84518, 81505 84440, 81349 84159, 81323 83774, 81224 83555, 81373 83369, 81378 83311, 81434 83307, 82465 84233, 82768 84665, 82979 84878, 83214 84851, 83185 84481, 83518 84355, 83507 83999, 83839 83873, 83798 83497, 84160 83392, 84115 83014, 84272 82955, 84410 82842, 84433 82505, 84806 82375, 84729 81997, 84752 81962, 85137 81900, 85085 81512, 85355 81348, 85364 81048, 85448 80712, 85726 80466, 85886 80135, 86019 79713, 86265 79534, 86409 79231, 86689 78877, 86768 78830, 86771 78741, 86890 78545, 86992 78247, 87334 77847, 87457 77806, 87441 77677, 87514 77495, 87660 77360, 87829 77021, 87985 76863, 88001 76795, 88069 76754, 88623 75779, 88818 75637, 88927 75371, 89228 75239, 89363 74974, 89285 74879, 89251 74910, 88898 74902, 88554 74696, 88473 74597, 88369 74625, 88086 74603, 87944 74666, 87694 74578, 87315 74644, 87168 74800, 86954 74854, 86860 74954, 86226 75230, 85738 75348, 85795 75735, 85515 75736, 85002 75861, 84746 76025, 84658 76311, 84429 76344, 83935 76519, 83754 76737, 83754 76822, 83658 76781, 83200 76830, 83112 76977, 83115 77116, 82793 77233, 82233 77373, 81764 77567, 81492 77647, 81129 77849, 81018 77870, 80828 78024, 80817 78072, 80482 78183, 80526 78479, 80461 78693, 80221 78693, 80333 78912, 80198 79023, 80132 79155, 79888 79153, 79959 79385, 79856 79479, 79868 79835, 79501 79926, 79601 80252, 79713 80425, 79614 80642, 79630 80715, 79849 80983, 79881 81240, 79640 81402, 79591 81388, 79777 81867, 79700 81868, 79284 81638, 79048 81744, 79016 82012, 79380 82280, 79298 82308, 78969 82216, 78734 82518, 78978 82764, 78639 82679, 78453 82990, 78596 83232, 78304 83093, 78065 83218, 78022 83487, 78174 83640, 77974 83553, 77737 83690, 77790 83937, 78029 84238, 77659 84124, 77416 84170, 77488 84407, 77662 84688, 77336 84639, 77098 84654, 77290 85135, 77005 85085, 76756 85122, 76815 85368, 77156 85679, 77180 85762, 77092 85776, 76679 85565, 76428 85621, 76485 85864, 76822 86162, 76841 86236, 76764 86247, 76361 86118, 76114 86127, 76175 86360, 76422 86601, 76479 86707, 76436 86716, 75849 86452, 75607 86288, 75351 86318, 75420 86713, 75271 86695, 74943 86742, 75027 87150, 74616 87225, 74722 87647, 74267 87692, 74382 88122, 73941 88179, 74052 88606, 73966 88648, 73629 88681, 73733 89000, 73422 89482, 73091 89649, 73000 89976, 72898 90081, 72741 90505, 72573 90809, 72488 90785, 72483 90893, 72217 91040, 72113 91382, 71898 91897, 71810 91966, 71541 92034, 71236 92785, 71002 93089, 70815 93064, 70735 93310, 70609 93419, 70534 93753, 70455 93871, 70048 94745, 69688 94832, 69606 95170, 69377 95717, 69238 95848, 69014 95841, 68757 96566, 68628 96701, 68391 97113, 68112 97263, 68024 97542, 67922 97661, 67789 97994, 67543 98530, 67442 98615, 67182 98652, 67103 98958, 67012 99070, 66845 99506, 66645 99795, 66561 99772, 66526 99891, 66290 100061, 66188 100372, 65929 100903, 65793 101098, 65624 101113, 65568 101316, 65395 101455, 65280 101783, 65037 102340, 64885 102508, 64681 102470, 64627 102738, 64482 102852, 64369 103196, 64108 103683, 63749 103812, 63422 104716, 63297 104824, 63023 104777, 62908 105147, 62852 105207, 62722 105705, 62630 105998, 62894 106702, 63153 106862, 63219 107001, 63235 107280, 62987 107287, 62854 107100, 62865 106744, 62561 107180, 62508 107523, 62020 107442, 61972 107730, 61728 108413, 61608 108604, 61740 108724, 61768 108949, 61516 109505, 61379 109632, 61269 109050, 60951 109294, 60873 109581, 60942 109889, 61018 109930, 60938 109999, 60790 110379, 60585 110863, 60535 110905, 60473 110854, 60536 110780, 60665 110413, 60487 110190, 60232 110275, 60113 110803, 59939 111236, 59695 111343, 59551 111309, 59516 111504, 59345 111690, 59201 112158, 58978 112343, 58766 112023, 58674 112009, 58653 112127, 58406 112277, 58212 112613, 58152 112560, 58157 112651, 57871 112813, 57759 113148, 57671 113232, 57494 113681, 57315 114009, 57114 113773, 56985 114136, 56928 114153, 56840 114563, 56597 115057, 56490 115219, 56382 115076, 56599 114316, 56925 114149, 57218 113297, 57425 112785, 57539 112629, 57704 112544, 57842 112350, 57972 112277, 58099 111784, 58333 111438, 58675 111287, 58757 110937, 58969 110491, 58976 110351, 59328 110217, 59541 109851, 59711 109411, 59969 109115, 60184 108608, 60437 108439, 60779 107669, 60765 107536, 60870 107565, 61137 107430, 61237 107156, 61469 106704, 61488 106555, 61669 106414, 61809 106362, 61884 106204, 62048 106030, 62168 105738, 62416 105282, 62420 105217, 62726 105004, 62866 104771, 62757 104641, 62751 104132, 63120 104224, 63333 103841, 63647 103635, 64018 102810, 64222 102487, 64545 102243, 64658 101954, 64951 101486, 64936 101414, 65027 101347, 65264 101013, 65460 100856, 65863 100067, 66203 99592, 66377 99453, 66513 99120, 66178 98940, 66334 98782, 66363 98505, 66688 98552, 66779 98600, 67066 98457, 67196 98157, 67442 97702, 67448 97599, 67754 97391, 68092 96749, 68380 96282, 68607 95832, 68903 95654, 69201 94894, 69212 94759, 69582 94650, 69800 94251, 69976 93799, 70484 93230, 70587 92964, 70873 92498, 71078 92053, 71066 91968, 71134 91991, 71410 91818, 71605 91448, 71722 91102, 71727 90972, 71839 90970, 72095 90860, 72434 90132, 72661 89682, 72648 89619, 72703 89621, 72977 89426, 73095 89175, 73363 88855, 73498 88595, 73700 88374, 73823 88102, 73848 87772, 73776 87718, 73855 87757, 74112 87588, 74158 87269, 74366 87056, 74509 86800, 74751 86614, 74842 86321, 75052 86118, 75172 85910, 75414 85663, 75586 85342, 75753 85195, 75831 84986, 75890 84935, 75892 84867, 76051 84683, 76151 84452, 76400 84186, 76416 83886, 76045 83614, 76455 83800, 76693 83674, 76742 83404, 76493 83186, 76788 83356, 77054 83222, 77088 82926, 76818 82710, 77116 82887, 77368 82740, 77440 82448, 77383 82402, 77447 82439, 77697 82269, 77769 81978, 77711 81932, 77775 81971, 78020 81796, 78084 81513, 77892 81361, 78102 81489, 78338 81321, 78351 81060, 78077 80795, 78424 80965, 78699 80838, 78675 80543, 78386 80310, 78744 80431, 79000 80292, 79000 80005, 78699 79770, 79064 79897, 79354 79822, 79306 79528, 78978 79218, 78848 79262, 78973 79173, 79389 79407, 79628 79318, 79632 79063, 79392 78802, 79719 78942, 79941 78842, 79980 78596, 79874 78447, 80051 78504, 80310 78408, 80284 78140, 79913 78126, 79601 78254, 79207 78320, 78862 78307, 78495 78475, 78090 78328, 77955 78416, 77909 78599, 77741 78644, 77503 78511, 77333 78476, 76820 78521, 76577 78635, 76490 78634, 76402 78919, 76238 79022, 76065 79028, 76124 79193, 76079 79388, 75729 79527, 75782 79695, 75741 79889, 75589 80020, 75403 80067, 75460 80241, 75425 80432, 75263 80507, 75018 80523, 75115 80938, 74695 80991, 74795 81409, 74623 81581, 74533 81575, 74570 81658, 74462 81873, 74295 82050, 74210 82046, 74238 82126, 73966 82515, 73882 82516, 73911 82597, 73638 82987, 73553 82987, 73587 83066, 73309 83445, 73196 83456, 73245 83555, 73134 83775, 72983 83943, 72837 83958, 72892 84090, 72809 84293, 72663 84467, 72532 84469, 72576 84591, 72411 85023, 72437 85100, 72355 85103, 72163 85263, 72097 85495, 72123 85584, 72029 85591, 71839 85740, 71752 85974, 71774 86045, 71699 86048, 71486 86200, 71424 86509, 71162 86681, 71059 86962, 70845 87169, 70713 87431, 70505 87654, 70422 87957, 70178 88152, 70088 88445, 69853 88639, 69913 89027, 69752 89045, 69542 89131, 69584 89509, 69425 89528, 69216 89616, 69204 89844, 69239 89981, 68860 90081, 68869 90333, 68811 90469, 68467 90626, 68208 91289, 67924 91755, 67889 91859, 67614 92110, 67586 92235, 67399 92455, 67230 92871, 67048 93012, 66897 93037, 66861 93210, 66695 93431, 66593 93670, 66371 94119, 66317 94292, 66134 94416, 65977 94447, 65926 94628, 65786 94834, 65618 95279, 65360 95558, 65142 96006, 64885 96268, 64693 96653, 64456 96973, 64179 97250, 64108 97453, 63799 98093, 63580 98287, 63484 98289, 63457 98407, 63274 98651, 63205 98864, 62769 99521, 62560 99662, 62509 99829, 62285 100278, 61994 100746, 61964 100827, 61669 101067, 61619 101236, 61463 101463, 61284 101891, 61057 102231, 60771 102476, 60726 102644, 60564 102859, 60370 103268, 60131 103601, 59835 103829, 59471 104666, 59279 104871, 59183 104915, 59165 105010, 58967 105284, 58896 105471, 58612 105937, 58574 106077, 58277 106306, 58237 106427, 58040 106637, 57870 107078, 57662 107450, 57339 107630, 57289 107850, 57002 108493, 56792 108641, 56660 108643, 56618 108809, 56446 109020, 56283 109471, 55796 110063, 55763 110206, 55149 111046, 55057 111046, 55093 111165, 54918 111601, 54739 111901, 54466 112068, 54283 111621, 53961 111087, 53952 110845, 53872 110725, 53693 110678, 53332 110313, 53381 110472, 53115 110638, 53065 110946, 52785 111411, 52561 111950, 52215 112089, 52082 112517, 51884 112870, 51572 113104, 51511 113310, 51346 113528, 51151 113945, 50940 114261, 50649 114467, 50578 114729, 50290 115196, 50066 115645, 50042 115752, 49679 115868, 49567 116299, 49390 116681, 49047 116850, 48923 117121, 48671 117578, 48439 118029, 48434 118074, 48128 118259, 48069 118518, 47780 118984, 47433 119476, 47132 119666, 47044 120102, 46553 120871, 46272 121137, 45929 121818, 45924 121913, 45580 122047, 45551 122309, 45488 122467, 45325 122635, 45169 122626, 45168 122802, 45016 122973, 44947 123250, 44577 123772, 44408 124172, 44399 124309, 44020 124404, 43929 124811, 43764 125153, 43440 125428, 43152 125835, 42871 125863, 42992 126112, 42948 126271, 42757 126560, 42488 126775, 42464 127032, 42514 127191, 42050 127241, 42166 127617, 41770 127708, 41824 128091, 41467 128209, 41470 128467, 41302 128901, 41348 128996, 41239 129002, 40994 129108, 40901 129250, 40695 129252, 40792 129428, 40610 129707, 40394 129713, 40495 129897, 40365 130056, 40330 130495, 39925 130565, 39967 130994, 39797 131046, 39517 131051, 39642 131294, 39669 131462, 39206 131510, 39327 131768, 39284 131926, 39129 132056, 38922 132043, 38941 132262, 38837 132424, 38777 132694, 38829 132820, 38416 132897, 38471 133255, 38132 133381, 38142 133744, 37792 133869, 37741 134279, 37605 134345, 37360 134374, 37358 134634, 37301 134773, 37169 134912, 36983 134925, 37001 135119, 36884 135285, 36838 135551, 36879 135680, 36473 135759, 36491 136105, 36156 136227, 36149 136575, 35821 136719, 35844 136987, 35800 137143, 35652 137268, 35446 137262, 35471 137477, 35410 137628, 35292 137742, 35065 137746, 35152 137952, 35090 138101, 34972 138208, 34739 138216, 34824 138429, 34734 138584, 34658 138955, 34318 139085, 34333 139491, 33904 139557, 34003 139964, 33585 140038, 33654 140300, 33636 140444, 33491 140611, 33338 140613, 33362 140768, 33220 140941, 33107 141226, 33122 141272, 32815 141416, 32815 141764, 32486 141894, 32439 142220, 32147 142395, 32109 142786, 31985 142882, 31768 142917, 31804 143134, 31751 143295, 31617 143402, 31401 143411, 31469 143613, 31406 143768, 31278 143877, 31056 143886, 31124 144095, 30896 144489, 30815 144482, 30829 144564, 30624 144738, 30573 145021, 30600 145117, 30221 145216, 30305 145630, 29882 145700, 29932 146114, 29517 146182, 29530 146608, 29397 146674, 29140 146695, 29136 147087, 29026 147227, 28847 147248, 28868 147427, 28676 147675, 28486 147724, 28501 147916, 28403 148041, 28319 148382, 28012 148539, 28002 148939, 27892 149048, 27675 149078, 27736 149288, 27643 149457, 27503 149570, 27271 149560, 27325 149789, 27141 150187, 27073 150175, 27098 150238, 26888 150412, 26785 150663, 26720 150662, 26746 150722, 26538 150912, 26492 151278, 26131 151389, 26171 151808, 26024 151878, 25775 151892, 25836 152135, 25803 152287, 25665 152359, 25419 152381, 25474 152622, 25430 152774, 25294 152920, 25105 152914, 25146 153099, 25038 153258, 24951 153583, 24649 153736, 24677 154136, 24304 154238, 24300 154620, 23915 154714, 23960 154975, 23940 155126, 23800 155238, 23583 155241, 23631 155453, 23438 155900, 23166 156080, 23172 156471, 22797 156572, 22780 156964, 22089 156891, 22096 156834, 21811 156510, 22079 156115, 21751 156033, 22130 155726, 22312 155687, 21437 155357, 21606 155241, 21213 154979, 21671 154823, 22703 154562, 22683 153811, 23054 153981, 23059 153675, 23426 153602, 23674 153763, 23456 153563, 23432 153199, 23284 153222, 23281 152914, 23442 153180, 23805 153124, 24028 153254, 23850 153067, 23800 152701, 23563 152635, 23799 152586, 23879 152284, 23876 151586, 24112 151606, 24545 151548, 24558 151331, 24995 151279, 24947 151216, 24917 150840, 25287 150782, 25398 150818, 25333 150722, 25279 150355, 25647 150303, 25844 150397, 25685 150239, 25652 149897, 25393 149930, 25400 149656, 25662 149540, 25692 149849, 26025 149796, 26267 149952, 26071 149745, 26036 149417, 25722 149452, 25494 148935, 26045 149108, 26063 148985, 26442 148888, 26442 148485, 26901 148450, 26854 148367, 26796 147997, 27173 147930, 27344 148016, 27206 147884, 27151 147529, 26950 147565, 26986 147182, 27164 147508, 27525 147452, 27840 147633, 27570 147396, 27538 147056, 27012 146882, 27555 146653, 27930 146541, 27916 146142, 28287 146083, 28407 146123, 28333 146024, 28270 145663, 28636 145603, 28756 145641, 28661 145546, 28655 145163, 29024 145104, 29153 145164, 29070 145046, 29051 144666, 29420 144609, 29605 144714, 29484 144546, 29399 144206, 29168 144244, 29151 144011, 29369 143803, 29265 143303, 29756 143432, 29770 143309, 29868 143277, 29887 142993, 30150 142990, 30175 142817, 30586 142747, 30557 142701, 30881 142238, 31068 142353, 30890 142222, 30848 141850, 31220 141800, 31588 141996, 31257 141733, 31247 141351, 31614 141269, 31818 141422, 31636 141242, 31647 140871, 31525 140884, 31547 140782, 31636 140709, 31622 140479, 31716 140445, 31688 140173, 31962 140162, 31972 140013, 32323 139962, 32378 139876, 32360 139507, 32708 139537, 32775 139441, 32760 138998, 33124 138960, 33252 139002, 33174 138882, 33091 138520, 33466 138474, 33793 138634, 33511 138403, 33417 138082, 33126 138120, 32896 137582, 33438 137777, 33451 138032, 33789 137993, 34081 138135, 33834 137926, 33823 137543, 33887 137163, 34207 137313, 34277 137077, 34190 136668, 34563 136590, 34651 136623, 34584 136557, 34508 136193, 34880 136119, 34967 136149, 34904 136082, 34923 135692, 35283 135648, 35400 135689, 35338 135575, 35337 135198, 35182 135229, 35191 135051, 35353 135066, 35394 134794, 35759 134695, 35813 134285, 36178 134236, 36376 134356, 36238 134166, 36135 133813, 36509 133762, 36808 133896, 36544 133694, 36441 133337, 36816 133267, 37067 133392, 36842 133226, 36862 132834, 36820 132842, 36874 132751, 36864 132831, 37231 132779, 37502 132981, 37327 132705, 37306 132337, 37342 132313, 37249 131969, 37609 131881, 37547 131493, 37760 131423, 37706 131192, 37939 131148, 37966 130980, 38327 130933, 38457 130994, 38369 130868, 38401 130474, 38764 130423, 39004 130597, 38821 130357, 38702 130004, 39083 129945, 39387 130085, 39117 129888, 38999 129543, 38849 129573, 38875 129413, 39011 129440, 39004 129532, 39378 129483, 39623 129581, 39442 129411, 39431 129040, 39313 129059, 39276 128870, 39495 128645, 39681 128959, 39815 128934, 39900 128543, 39803 128155, 40170 128066, 40330 128144, 40183 128045, 40088 127686, 40509 127614, 40523 127184, 40452 127196, 40533 127129, 40527 127176, 40881 127171, 41059 127240, 40935 127064, 40963 126708, 40711 126737, 40333 126299, 40933 126503, 40911 126317, 41090 126246, 40977 126040, 41196 125947, 41178 125843, 41341 125789, 41225 125410, 41623 125279, 41555 125730, 41920 125681, 42177 125785, 41957 125621, 42070 124820, 42488 124766, 42344 124353, 42726 124285, 42986 124400, 42748 124241, 42622 123892, 42997 123825, 43043 123772, 43057 123444, 42546 123213, 43137 123050, 43128 123362, 43427 123341, 43561 123407, 43481 123265, 43610 122474, 43585 122460, 43621 122422, 43618 122452, 43980 122396, 44076 122444, 44017 122342, 44084 121941, 44189 121908, 44171 121782, 43937 121257, 44505 121202, 44726 121367, 45035 120900, 45071 120537, 44717 120612, 44687 120698, 44447 120520, 44503 120271, 44715 119904, 44906 120006, 44904 120162, 45131 120285, 45185 120094, 45647 120091, 45595 119951, 46071 119082, 46196 119135, 46288 119006, 46681 118717, 46569 118542, 46655 118144, 46803 117844, 46678 117736, 46786 117368, 46872 117295, 47051 116795, 47168 117215, 47434 117265, 47536 117186, 47737 116287, 47977 115840, 48224 115960, 48363 115769, 48591 115299, 48935 115180, 48699 114858, 48989 115044, 49282 114846, 49249 114409, 49697 114510, 49883 114317, 49947 114127, 49883 113997, 49654 113909, 49752 113684, 49871 113624, 50022 113344, 50274 112493, 50638 112399, 50867 112712, 50862 112779, 50929 112695, 50886 112700, 50648 112383, 51075 111498, 51098 111541, 51583 110951, 51720 110540, 51962 110086, 52146 109687, 52456 109639, 52502 109561, 52638 109614, 52567 109532, 52503 109544, 52787 108702, 53157 108600, 53458 107738, 53660 107306, 54016 107213, 54218 106754, 54542 105900, 54906 105798, 55275 104920, 55645 104819, 56148 103523, 56524 103420, 56639 103132, 56554 103011, 56782 102774, 57061 102110, 57386 102009, 57383 101920, 57439 101973, 57773 101129, 58149 101028, 58685 99735, 59046 99619, 59376 98796, 59332 98717, 59419 98693, 59584 98316, 59946 98241, 60279 97362, 60246 97348, 60267 97298, 60303 97303, 60479 96912, 60848 96794, 61385 95497, 61728 95408, 61908 94984, 61879 94962, 61943 94900, 62284 94098, 62637 94003, 62811 93545, 63183 93446, 63510 92581, 63891 91709, 64251 91616, 64220 91221, 64595 91117, 64541 90734, 64914 90634, 64871 90254, 65112 90180, 64828 89959, 64518 89948, 64479 89645, 64779 89567, 64966 89826, 65213 89938, 65193 89759, 65565 89645, 65551 89544, 65132 89188, 65379 88903, 65369 88814, 65456 88785, 65680 89216, 65894 89163, 65845 88779, 66222 88683, 66173 88300, 66551 88205, 66499 87820, 66873 87724, 66625 87293, 66817 87278, 66940 87312, 67201 87247, 67154 86869, 67327 86823, 67077 86468, 67510 86636, 67483 86396, 67780 86289, 67704 86178, 67835 86144, 67804 85882, 68179 85752, 68128 85366, 68503 85274, 68455 84891, 68831 84801, 68789 84423, 69160 84330, 69072 83571, 69236 83523, 69211 83321, 69268 83124, 69118 82908, 69358 82854, 69688 83379, 69807 83333, 69761 82950, 70131 82801, 70079 82413, 70384 82277, 70435 82173, 70368 81565, 70737 81491, 70692 81095, 71064 81009, 71023 80630, 71397 80543, 71353 80169, 71722 80085, 71677 79703, 72072 79612, 72007 79244, 72372 79093, 72346 78703, 72690 78542, 72652 78139, 73397 77980, 73301 77214, 73681 77141, 73630 76756, 74010 76685, 73960 76302, 74290 76236, 74326 76151, 74289 75847, 74667 75784, 74620 75398, 75345 75012, 75329 74888, 74936 74629, 75270 74416, 75250 74241, 75507 74193, 75520 74093, 75619 74109, 75581 73790, 75904 73731, 75636 73136, 75893 73218, 76287 73273, 76246 72895, 76622 72829, 76576 72451, 76954 72386, 76903 72002, 77287 71942, 77237 71563, 77610 71335, 77549 70989, 77504 70990, 77498 70581, 77575 70947, 77907 70756, 77863 70363, 78241 70302, 78192 69917, 78570 69860, 78523 69479, 78903 69421, 78808 68675, 78761 68663, 78750 68574, 78849 68651, 79195 68601, 79150 68231, 79521 68175, 79494 67807, 79853 67743, 80071 67589, 80108 67462, 80198 67402, 80163 67118, 80404 66950, 80330 66807, 80505 66764, 80472 66489, 80852 66439, 80805 66056, 81041 66024, 81148 65720, 81136 65624, 81335 65368, 81419 65158, 81502 65155, 81806 64771, 82158 64512, 82113 64131, 82464 63868, 83473 62574, 83432 62202, 83753 61793, 83753 61782, 84441 60932, 84391 60574, 85077 59989, 85376 59613, 85405 59527, 85372 59187, 85913 58509, 85793 58165, 86115 58231, 86710 57583, 87085 57139, 86994 56761, 87344 56466, 87701 56111, 87653 55739, 88314 54933, 89017 54108, 88945 53799, 88710 53884, 88924 53632, 89046 53628, 89457 53147, 89436 52970, 89592 52789, 89773 52806, 89962 52619, 89914 52239, 90259 51889, 90909 51129, 90882 51104, 90928 51081, 90892 50722, 91559 49947, 92249 49196, 92201 48820, 92534 48456, 92896 46537, 93135 45885, 93274 45832, 93915 45830, 94437 45851, 94824 45830, 95063 46013, 95473 45629, 99087 45628) (143176 214170, 143101 214582, 143307 214236, 143295 214045, 143080 213805) (148068 213383, 148076 213601, 147968 214050, 148426 214061, 148793 213405, 148359 213075) (144676 213608, 144677 213926, 144905 213970, 144846 213711, 144909 213384) (148802 210301, 148740 210555, 148923 210390, 148917 210148, 148762 210131) (145180 209356, 145037 209868, 145189 210129, 145253 210139, 145114 209760, 145239 209287) (155600 209489, 155731 209728, 155803 209579, 155857 209278) (155588 208940, 155851 209008, 155784 208741, 155703 208627) (148541 207104, 148535 207485, 148713 207395, 148676 207235, 148724 207017) (155679 204372, 155689 204701, 155825 204500, 155860 204252) (155601 201072, 155748 201322, 155870 200999, 155646 200780) (155572 200305, 155641 200567, 155853 200228, 155699 199919) (128324 199634, 128234 200049, 128475 199744, 128437 199603, 128511 199343, 128245 199340) (155529 199377, 155697 199845, 155833 199458, 155866 199216) (121190 199160, 121198 199362, 121436 199587, 121345 199219, 121411 198810) (155517 198935, 155860 198910, 155805 198653, 155699 198472) (130227 198243, 130242 198409, 130405 198566, 130318 198312, 130362 198087) (128414 197670, 128231 197868, 128283 198240, 128524 198349, 128418 198057, 128557 197596) (131709 195216, 131716 195481, 131855 195564, 131764 195780, 131802 195966, 131728 196386, 132070 197055, 131745 197863, 131753 197969, 131941 198237, 131828 197898, 132074 197051, 131747 196364, 132039 195901, 132112 195640, 132089 195500, 132255 195067) (155499 197838, 155693 198192, 155789 197957, 155825 197697) (121129 197605, 121123 197886, 121334 197957, 121288 197685, 121411 197139) (124642 196588, 124760 196734, 124666 196965, 124706 197227, 124824 197155, 125005 196794, 125033 196438, 124959 196291, 124666 196263) (128170 196186, 128158 196281, 128234 196557, 128189 196833, 128480 196816, 128462 196495, 128599 196309, 128576 195912) (130113 195267, 130122 195398, 130394 195651, 130395 195189) (104353 195349, 104482 195523, 104782 195376, 104876 195268, 104845 195211) (128199 195015, 128201 195125, 128329 195368, 128545 195442, 128546 195309, 128471 195322, 128246 194998) (177330 188306, 177371 188515, 177312 188772, 177326 189690, 177391 189949, 177317 190298, 177351 190459, 177305 190772, 177375 191156, 177307 191246, 177357 191460, 177250 191750, 177263 192250, 177324 192791, 177423 193028, 177380 193164, 177386 193409, 177437 193537, 177149 194091, 177090 194406, 177495 194684, 177589 194691, 177813 194597, 177858 194196, 177818 194155, 177785 193828, 177558 193504, 177654 193197, 177634 192707, 177559 192478, 177658 192167, 177610 191939, 177634 191657, 177557 191259, 177578 191172, 177500 190914, 177596 190583, 177557 190402, 177608 190110, 177532 189634, 177394 189284, 177568 188549, 177564 188124) (174621 193971, 174571 194413, 174731 194665, 175180 194542, 175146 193934) (170728 193079, 170795 193419, 170733 193823, 170528 194267, 170606 194305, 170689 194641, 171295 194445, 171256 194067, 171121 193717, 171127 193635, 170946 193377, 171137 193097, 171151 192856, 170913 192849) (172355 194245, 172312 194553, 172708 194480, 172790 194522, 172996 194366, 172519 194228) (166988 186294, 166942 186721, 167149 187441, 167015 187837, 166934 188274, 166994 188695, 167130 188997, 166916 189715, 166913 189957, 166978 190201, 167140 190544, 167057 190918, 166948 190985, 166868 191174, 166947 191372, 166866 191687, 166790 192190, 166867 192558, 166840 192724, 166909 192934, 166910 193398, 166645 194169, 166698 194542, 167076 194474, 167159 194518, 167370 194358, 167371 193944, 167193 193705, 167030 193674, 167051 193282, 167166 193014, 167201 192644, 167161 192476, 166907 192159, 167038 191796, 167119 191713, 167157 191491, 167125 191324, 167248 190566, 167199 190005, 167126 189772, 167213 189017, 167152 188602, 167208 188398, 167082 188233, 167165 187965, 167124 187835, 167155 187443, 166950 186719, 167110 186391, 167115 185868) (57360 192252, 57298 192742, 57323 192770, 57448 193411, 57316 193900, 57196 194090, 57149 194333, 57420 194466, 57847 194530, 57979 194301, 57805 193855, 57691 193797, 57682 193617, 57558 193160, 57819 192977, 57420 192708, 57829 192249, 57846 191965, 57805 191827, 57420 191575) (165290 184073, 164827 184880, 164791 184986, 164453 185556, 164463 185850, 164402 186257, 164651 186575, 164403 187010, 164390 187662, 164391 188197, 164361 188592, 164432 188961, 164385 189473, 164730 189655, 164410 190039, 164378 190523, 164434 190983, 164810 191183, 164441 191582, 164457 192900, 164564 193377, 164521 193588, 164263 194046, 164563 194352, 164963 194288, 165032 194350, 165261 194321, 165402 194510, 165581 194460, 165670 193944, 165418 192540, 165588 191822, 165614 191397, 165185 191080, 165466 190228, 165299 189498, 165299 188978, 165345 188635, 165326 188512, 165298 187948, 165362 187278, 165334 187009, 165315 186393, 165409 186049, 165425 185587, 165517 185141, 165136 184891, 165506 184436, 165447 184030, 165488 183604) (39449 193702, 39335 194021, 39332 194178, 39436 194509, 39867 194249, 39744 193950, 39694 193691, 39453 193262) (35693 185464, 35733 186248, 35666 187042, 35756 187792, 35653 188210, 35631 188488, 35687 188898, 35661 188982, 35742 189347, 35639 189763, 35652 190416, 35606 190547, 35663 190919, 35641 191313, 35587 191530, 35649 191955, 35577 192106, 35616 192482, 35585 192878, 35606 193648, 35284 194124, 35480 194459, 35906 194503, 36146 194276, 36080 193913, 35815 193591, 35848 193194, 35951 192536, 35903 192126, 35934 192008, 35882 191360, 35917 190967, 35908 190465, 35865 190205, 35901 189691, 35851 189009, 35882 188922, 35843 188545, 35866 188268, 35782 187132, 35849 186714, 35851 186216, 35736 185496, 35745 185055) (59075 193980, 58921 194085, 58863 194252, 58964 194256, 59421 194497, 59576 194444, 59631 194291, 59505 193836) (37069 194022, 37140 194391, 37419 194490, 37620 194472, 37792 194386, 37872 194190, 37206 193720) (31530 193835, 31455 194011, 31480 194203, 31555 194371, 31802 194469, 32013 194460, 32166 194359, 32179 194200, 32055 193706, 31906 193659) (168521 193823, 168458 194059, 168478 194442, 168857 194366, 168983 194466, 168968 194221, 168737 193757) (156902 193996, 156853 194139, 157080 194465, 157260 194415, 157354 194076, 157660 193918, 157338 193881) (161631 193182, 161248 193226, 161085 193754, 161097 194139, 161346 194459, 161479 194465, 161701 194361, 161801 194259, 161885 193923, 161752 193571, 161717 193089) (64030 185814, 63951 186243, 64014 186638, 64160 186984, 63967 187769, 64008 188189, 64129 188544, 64032 188905, 63932 188985, 63905 189209, 63961 189365, 63901 189565, 64059 189967, 64188 190078, 64069 190450, 63997 190518, 63915 190732, 63923 191121, 64197 191626, 64057 191981, 63978 192074, 63917 192246, 63995 192845, 63914 193286, 64070 193600, 63797 193826, 63666 194098, 63812 194446, 64198 194369, 64551 194243, 64244 193552, 64273 193256, 64037 193221, 64287 193117, 64296 192612, 64226 192393, 64266 192116, 64299 191553, 64238 191227, 64270 191064, 64231 190841, 64288 190116, 64202 189589, 64123 189320, 64271 188586, 64184 188140, 64212 187977, 64079 187781, 64168 187476, 64139 187378, 64213 186928, 64175 186447, 64027 186245, 64118 185912, 64094 185840, 64156 185428) (47874 193775, 47671 193857, 47796 194184, 48137 194440, 48343 194267, 48413 193787, 48708 193830, 48407 193482, 48184 193444) (62442 194433, 62734 194353, 62667 194173, 62344 194085) (29773 193309, 29541 193874, 29214 193807, 29232 194232, 29582 194288, 29814 194159, 30093 194385, 30249 194423, 30335 194160, 30128 193987, 29784 193307, 29789 193047) (42266 193592, 42239 193769, 41916 194086, 41853 194262, 42114 194375, 42438 194420, 42539 193803, 42450 193365) (175714 194126, 175722 194394, 176015 194394, 175964 194107) (61163 194009, 61203 194385, 61626 194321, 61848 194208, 61777 193840, 61553 193739, 61230 193722) (33350 193879, 33328 194273, 33488 194346, 33761 194297, 33782 193761, 33543 193469) (46073 193881, 46125 194254, 46556 194344, 46730 194273, 46924 194034, 46246 193516) (158081 192731, 158197 192995, 158095 193411, 157684 193911, 157875 194247, 158021 194319, 158262 194344, 158405 194226, 158489 194078, 158465 193697, 158185 193386, 158294 192918, 158209 192604, 158227 192466, 158045 192345) (159606 193665, 159488 194192, 159785 194343, 160152 194217, 160277 193976, 160165 193721, 159756 193643) (44271 193392, 44004 193379, 44254 193874, 44231 193998, 44374 194038, 44517 194307, 44804 194341, 45072 194232, 45162 194130, 45040 193776, 44842 193569, 44649 193138) (163144 192776, 163068 192823, 162975 193075, 163009 193227, 162828 193660, 162720 194082, 162877 194300, 163205 194316, 163455 194073, 163470 193876, 163243 193550, 163162 193185, 163253 192518) (26004 193508, 25922 193589, 25951 193694, 26057 193801, 26238 194279, 26420 194296, 26551 194193, 26223 193678, 26053 193185) (27439 193844, 27542 194044, 27814 194235, 27961 194228, 28203 194030, 28218 193736, 27697 193402) (24493 185403, 24479 185887, 24541 186990, 24509 187727, 24430 188269, 24481 189333, 24422 189740, 24452 190503, 24451 191171, 24397 192123, 24503 193203, 24449 193496, 24284 193754, 24185 194065, 24558 194220, 24865 194198, 25045 193943, 25055 193827, 24932 193545, 24839 193498, 24653 193162, 24771 192577, 24764 191969, 24714 191595, 24707 190978, 24727 190816, 24710 189658, 24642 189289, 24678 188174, 24608 187420, 24547 186989, 24636 186277, 24621 185500, 24544 185238) (49842 193859, 49657 194061, 49978 194217, 50100 194045, 50131 193931, 49879 193245) (23018 191672, 22943 192080, 22932 192471, 23060 193128, 23090 192459, 23060 191118) (26043 190067, 26015 191212, 26035 192008, 26017 192761, 26051 193120, 26093 192818, 26110 191988, 26089 191219, 26102 190439, 26058 190069, 26041 189459) (44476 192139, 44668 192327, 44655 193023, 44756 192765, 44727 192699, 44817 192375, 44694 191992) (159598 192107, 159671 192592, 159647 192999, 160017 192873, 159961 192512, 160066 192284, 160052 192033, 159805 192007) (31991 191129, 32052 191898, 32005 192683, 32022 192755, 32068 191910, 32011 191004) (37262 192419, 37268 192670, 37351 192428, 37316 192090) (42281 192071, 42458 192623, 42447 191718) (29579 185477, 29703 186302, 29524 186923, 29515 187178, 29676 187884, 29510 188456, 29500 188733, 29632 189398, 29528 190016, 29530 190275, 29803 190975, 29583 191605, 29576 191813, 29812 192500, 30042 191949, 30027 191690, 29812 190973, 30065 190421, 29989 189374, 30059 188755, 29916 187933, 30011 187200, 29884 186404, 29918 185683, 29772 185070) (161196 192009, 161202 192336, 161456 192401, 161350 192131, 161450 191795) (170763 191756, 170736 192146, 170891 191972, 170854 191852, 170887 191712) (159881 190521, 159635 190771, 159644 191339, 159781 191399, 160016 191369, 160066 190841, 160005 190520) (163143 190705, 163179 190854, 163092 191124, 163299 190965, 163299 190653) (161589 189739, 161154 190610, 161192 190706, 161380 190809, 161290 190597, 161773 189833, 161836 189672, 161765 189552, 161495 189434) (44755 189912, 44788 189969, 44725 190777, 44855 189982, 44735 189364) (49935 189333, 49487 189800, 49438 190214, 49462 190717, 49815 190775, 49941 190680, 49938 190108, 49971 189300, 49926 189296) (22994 187415, 23006 188131, 23047 188563, 23038 189319, 22984 190130, 23058 190731, 23080 190104, 23061 188559, 23075 188184, 23073 187005, 23058 186673) (57410 190727, 57778 190678, 57745 190293, 57421 190132) (170864 189523, 170735 190290, 170744 190441, 170865 190429, 170833 190307, 171216 189818, 171101 189459, 170853 189190) (46273 189561, 46219 190366, 46652 189848, 46339 189220, 46418 189135, 46253 189085) (158089 190319, 158129 190356, 158093 190311, 158228 189934, 158225 189841, 158160 189790) (31985 189581, 32045 190194, 32004 189439) (142628 185723, 142888 186338, 142558 186796, 142628 187184, 142576 187611, 142845 187901, 142621 188368, 142669 188724, 142641 189099, 142921 189430, 142968 189968, 143357 189637, 143359 188953, 143292 188552, 143367 188157, 143405 187249, 143350 186986, 143385 186202, 143309 185469) (159607 189243, 159635 189500, 159611 189802, 159699 189871, 159995 189839, 159993 189661, 159842 189443, 159946 189026) (163150 188821, 163029 189067, 163085 189330, 163041 189619, 163187 189782, 163372 189755, 163312 189267, 163371 188864, 163354 188747) (44706 188030, 44801 188414, 44776 188712, 44823 188420, 44709 187756) (46278 187978, 46223 188368, 46238 188565, 46328 188422, 46374 187984, 46267 187725) (163224 187312, 162843 187350, 162868 187451, 162822 187849, 162846 188366, 163129 188309, 163330 188171, 163275 187726, 163318 187231) (170841 188301, 171059 188117, 171000 187936, 170864 187788) (44701 187254, 44704 187604, 44799 187315, 44794 186900) (177618 186130, 177419 186565, 177371 186827, 177566 187314, 177526 186963, 177626 186122, 177455 185383) (57537 186474, 57428 187289, 57676 186550, 57495 186090) (53693 186336, 53653 186763, 53757 187140, 53688 186768, 53783 186392, 53780 186140) (161523 186449, 161546 186650, 161453 187000, 161722 186778, 161714 186432) (155590 186345, 155567 186630, 155615 186726, 155593 186809, 155684 186836, 155665 186712, 155779 186336, 155774 186202) (163174 185763, 162816 185810, 162768 186315, 162835 186685, 162819 186817, 163186 186813, 163329 186722, 163305 186168, 163319 185558) (170825 186705, 170949 186486, 170819 186173) (49677 186003, 49801 186269, 49965 186474, 50089 186338, 50017 186210, 49967 185923) (141011 185896, 140982 186084, 141020 186255, 141238 186264, 141191 186028, 141363 185497) (35720 183697, 35761 183560, 35763 183112) (165480 180095, 165380 180532, 165318 180577, 165198 180808, 165227 181148, 165304 181357, 165532 181681, 165380 182066, 165300 182433, 165303 182607, 165411 182912, 165499 182967, 165419 182487, 165551 181684, 165408 180939, 165535 180053) (44586 182124, 44668 182248, 44714 182500, 44812 182284, 44698 181912) (136162 182001, 136254 182342, 136394 182479, 136409 182156, 136226 181961, 136340 181596, 136348 181416) (23017 180389, 23035 181174, 23015 182369, 23070 182439, 23062 179954) (158220 181360, 158095 181758, 158081 181996, 158182 181825, 158244 181340, 158206 181265) (48339 180080, 48302 180423, 48367 180847, 48454 181017, 48369 180480, 48442 180094, 48437 179871) (44645 180626, 44710 180854, 44769 180714, 44678 180351) (143611 179937, 143294 180644, 143707 180012, 143708 179790, 143545 179764) (136215 179946, 136222 180155, 136352 180125, 136330 179995, 136389 179572) (52087 176988, 52120 177105, 51989 177457, 51913 177837, 52195 178625, 52114 179032, 51970 179350, 51985 179468, 52125 179712, 52147 179036, 52215 178630, 52125 177951, 52177 177477, 52212 176932) (165350 178440, 165421 178611, 165360 178814, 165555 178822, 165564 178245) (143527 178410, 143446 178743, 143709 178566, 143708 178123, 143426 178119) (143314 176484, 143312 176919, 143273 177065, 143271 177467, 143779 177295, 143732 176802, 143779 176492, 143759 176275) (165449 176605, 165350 176927, 165362 177137, 165295 177335, 165552 177366, 165540 177028, 165598 176688, 165582 176489) (39530 176961, 39587 176664, 39471 176107) (165360 175423, 165367 175621, 165475 175920, 165561 175952, 165480 175493, 165484 175278) (143396 175088, 143461 175327, 143437 175544, 143607 175733, 143733 175731, 143643 175022) (44687 174858, 44791 175237, 44731 175686, 44795 175239, 44679 174577) (136370 174556, 136280 174976, 136417 174503) (44657 173310, 44753 173697, 44665 174078, 44676 174456, 44760 174133, 44795 173709, 44677 173137) (137774 171960, 137979 172178, 137837 172568, 137847 172646, 137987 172170, 137969 171792, 137756 171616) (152083 171801, 152018 172261, 152160 171813, 152171 171648) (141575 171563, 141422 171621, 141312 171780, 141426 172007, 141398 172155, 141553 172174, 141529 171980, 141624 171488) (155577 171618, 155554 172044, 155607 172103, 155601 171999, 155724 171646, 155737 171334) (38656 163287, 38350 163400, 38268 163378, 38214 163473, 38392 163932, 38651 164128, 38559 164541, 38566 164927, 38634 165150, 38481 165411, 38551 165706, 38548 166094, 38680 166718, 38544 167003, 38484 167388, 38614 167872, 38472 168053, 38819 168346, 38509 168819, 38496 168933, 38586 169185, 38545 169708, 38744 170692, 38624 171113, 38591 171428, 38632 171886, 38737 172072, 38766 171850, 38716 171476, 38768 170981, 38695 169976, 38805 169650, 38777 169521, 38836 168729, 38818 168003, 38798 167650, 38885 167178, 38793 166109, 38883 165774, 38851 165624, 38867 164959, 38783 164565, 38791 164089, 39089 163621, 39201 163292, 39142 163218) (148457 170801, 148364 171277, 148515 170778) (152025 170266, 151961 170613, 152022 171043, 152183 171199, 152165 170935, 152035 170650, 152141 170287, 152143 170086) (137890 170651, 137818 171074, 138018 170727, 138007 170518, 137831 170353) (44670 170557, 44701 170611, 44697 170908, 44764 170622, 44682 170280) (141487 170053, 141433 170435, 141540 170814, 141610 170872, 141604 170762, 141460 170448, 141599 170075, 141666 169670) (33504 166659, 33479 167051, 33489 167836, 33542 168227, 33477 169012, 33526 169757, 33500 170191, 33495 170754, 33586 170222, 33601 169777, 33520 169045, 33573 168234, 33496 167488, 33579 166681, 33488 166037) (158069 170132, 158053 170419, 158163 170200, 158202 169766) (146912 169728, 146797 170091, 146799 170278, 146914 170230, 146897 170121, 146972 169674, 146846 169438) (34994 168973, 35034 169350, 35021 169930, 35200 169338, 35160 168962, 34994 168630) (151900 164557, 151889 164875, 151832 165136, 151878 165267, 151840 165422, 151898 165649, 151844 166148, 151902 166423, 151893 166626, 151959 166795, 151903 167001, 151923 167192, 151860 167486, 151857 167722, 151925 167968, 152116 168302, 151883 169017, 151897 169249, 151986 169502, 152159 169681, 152198 169278, 152137 169072, 152189 168836, 152144 168682, 152225 168196, 152184 167895, 152219 167640, 152165 167513, 152215 167360, 152180 167122, 152241 166857, 152226 166595, 152157 166352, 151986 166013, 152185 165570, 152240 165350, 152232 164988, 152174 164797, 152246 164401) (148361 169084, 148388 169514, 148645 169642, 148717 169636, 148573 169273, 148715 168922, 148718 168805, 148587 168802) (137804 169125, 137756 169617, 137891 169488, 138019 169237, 138014 169067, 138114 168698, 137718 168623) (159637 169617, 159909 169552, 159834 169288, 159859 169054, 159583 168898) (141864 163286, 141587 163273, 141434 163320, 141183 163482, 141105 163479, 141070 163577, 141299 163903, 141303 164299, 141335 164839, 141380 165044, 141319 165238, 141260 165727, 141271 165965, 141362 166212, 141303 166506, 141355 166601, 141294 166706, 141364 166985, 141325 167469, 141382 167757, 141643 168071, 141443 168461, 141354 168539, 141326 168805, 141359 168925, 141328 169071, 141403 169301, 141671 169583, 141600 169161, 141488 168890, 141609 168589, 141647 168073, 141601 167696, 141664 167433, 141559 167319, 141672 167169, 141607 166919, 141692 166375, 141623 166139, 141639 165873, 141597 165758, 141654 165647, 141649 165357, 141702 165146, 141665 164965, 141685 164782, 141587 164599, 141675 164200, 141560 164218, 141680 164179, 141986 163434, 141962 163164) (41997 168589, 42010 168852, 42379 169053, 42396 168635, 42281 168339) (158040 167732, 158030 167869, 158156 168198, 158071 168666, 158192 168204, 158104 167823, 158172 167658) (155746 167656, 155427 167766, 155425 167837, 155563 168133, 155407 168406, 155414 168621, 155551 168601, 155830 168452, 155754 168080, 155849 167520) (34980 167460, 35015 167798, 34994 168232, 34994 168611, 35142 168191, 35199 167788, 35199 167400, 34983 167077) (136341 167976, 136235 168440, 136272 168415, 136395 167926, 136266 167607, 136301 167483, 136176 167478) (159559 167397, 159593 167804, 159563 168277, 159600 168201, 159869 167997, 159856 167732, 159988 167479, 159988 167239, 159787 167238) (148451 167369, 148331 167555, 148338 168036, 148680 168091, 148758 167600, 148699 167237) (150453 167595, 150416 168031, 150465 168061, 150562 167498) (137720 167181, 137781 167581, 137737 168015, 138125 167876, 138017 167515, 138132 167168, 138130 167057, 137970 167038) (44641 167525, 44666 167766, 44751 167554, 44809 166797) (28173 167388, 28287 167762, 28321 167400, 28282 167017) (158109 166659, 158019 167050, 158033 167165, 158151 167168, 158097 167051, 158179 166598, 158107 166505) (35302 164207, 34992 164324, 34994 164743, 34941 165145, 34961 165914, 35013 166288, 34986 166683, 34983 167070, 35406 166592, 35402 166398, 35253 166222, 35265 166072, 35404 165996, 35409 165759, 34978 165522, 35423 165069, 35405 164691, 35124 164440, 35391 164441, 35401 164207) (155697 166108, 155402 166229, 155496 166601, 155441 166978, 155844 167054, 155765 166527, 155854 165827) (144789 165936, 144779 166343, 144934 166395, 144789 166546, 144820 166813, 144787 166972, 145021 166867, 145160 166432, 145226 165927) (136333 166426, 136208 166864, 136338 166428, 136316 166375) (159548 166669, 159763 166369, 159765 166032, 159568 165981) (148343 166141, 148319 166439, 148470 166341, 148442 166208, 148595 165826) (137689 165654, 137733 166043, 137717 166418, 138113 166365, 138130 166183, 138084 165946, 138126 165705, 138104 165498) (28148 163377, 27772 163478, 27736 163631, 27901 163928, 27982 163952, 28206 164278, 28179 164623, 28275 165014, 28153 165815, 28286 166291, 28326 165859, 28307 165026, 28340 164693, 28289 164255, 28359 163943, 28637 163384, 28281 163301) (43965 163427, 43888 163397, 43474 163474, 43530 163651, 43845 163698, 44003 163622, 44369 163910, 44580 164441, 44569 164752, 44663 165069, 44734 165175, 44678 165539, 44694 165901, 44795 165607, 44844 165192, 44700 164408, 44808 164093, 45024 163839, 45089 163526, 45067 163450, 44834 163209, 44710 163208) (33087 163294, 32745 163421, 33417 164013, 33459 164776, 33449 165486, 33483 165873, 33623 165213, 33504 164376, 33571 164052, 33754 163787, 33831 163511, 33515 163431, 33269 163277) (158037 165129, 158015 165573, 158077 165575, 158054 165512, 158188 165180, 158176 165011, 158006 164722) (136197 164757, 136230 164904, 136135 165253, 136135 165451, 136290 165449, 136287 165276, 136383 164990, 136343 164873, 136358 164680) (150327 164843, 150418 165280, 150545 165402, 150531 165197, 150416 164891, 150467 164544) (146780 165346, 146957 165229, 146918 165076, 146936 164930, 146755 164841) (144826 164480, 144816 164877, 144768 165037, 144806 165332, 145245 165214, 145176 164777, 145201 164398) (42363 164969, 42468 165261, 42485 164622) (139739 164614, 139691 164920, 139786 165092, 139974 165134, 139974 164989, 139873 164681, 139916 164309) (159605 164663, 159603 164750, 160160 163772, 160159 163756) (156939 163901, 156948 163967, 157246 164184, 157084 164515, 157077 164732, 157596 164475, 157252 164174, 157138 163824, 157327 163709, 157466 163347, 157352 163210, 157172 163198) (178576 164017, 178620 164138, 178577 164538, 178633 164718, 178756 164101, 178677 163848) (157727 163649, 157700 163603, 157569 163707, 157943 164225, 158183 164179, 158234 163912, 158345 163842, 158458 163463, 158168 163433) (177401 163625, 177538 164063, 177557 163655, 177477 163564) (42039 163918, 42055 164030, 42506 164026, 42621 163613, 42777 163385, 42417 163441, 42277 163359, 42060 163432, 41705 163291) (37140 163326, 36819 163429, 36717 163382, 36506 163553, 36811 163918, 37250 163858, 37493 163283) (163316 163542, 163302 163913, 163474 163639, 163504 163416) (35027 163889, 35602 163689, 35673 163394, 35366 163435, 35212 163348) (40231 163266, 39875 163405, 40214 163806, 40379 163857, 40774 163756, 40911 163509, 40621 163420, 40445 163248) (134976 163447, 135128 163749, 135237 163626, 135248 163274) (165497 159946, 165290 160753, 165485 161496, 165299 162341, 165570 162971, 165549 162368, 165688 161587, 165497 160857, 165598 159977, 165429 159537) (46189 156962, 46282 156684, 46058 156363) (72014 149212, 72042 149548, 71951 149946, 72015 150332, 71963 150596, 72017 151106, 72010 151507, 72055 151871, 72011 152423, 72025 152655, 72007 153158, 72061 153420, 72028 153629, 72081 154190, 72062 154662, 72106 154959, 72076 155555, 72143 155847, 71960 156492, 72029 156586, 72339 156530, 72632 156752, 72952 156710, 73070 156856, 73230 156588, 73084 155852, 73085 155443, 73012 155097, 73221 154265, 72875 153570, 73079 152753, 72829 152043, 72976 151231, 72700 150590, 72578 150564, 72713 150401, 72916 149697, 72679 149054) (76012 156600, 76214 156766, 76451 156744, 76631 156432, 76435 156222, 76129 156180) (68803 155863, 68667 156289, 68825 156633, 69051 156741, 69393 156562, 69487 156451, 69353 155672, 68812 155616) (65655 154692, 65621 155020, 65858 155120, 65665 155322, 65766 155532, 65413 156017, 65296 156279, 65306 156434, 65628 156668, 65991 156651, 66143 156205, 65918 155949, 65805 155909, 65861 155621, 65843 155512, 65945 155084, 65741 154764, 65916 154326) (67526 154954, 67624 155030, 67182 155806, 67014 156354, 67071 156431, 67696 156584, 67789 156521, 67358 155888, 67706 155072, 67701 154936, 67288 154501) (51234 147818, 51198 148021, 51427 148610, 51053 149132, 51090 149476, 51062 149845, 51514 150136, 50897 150476, 50854 151092, 50903 151466, 50837 151815, 51378 151724, 50837 151926, 50862 152455, 50889 152633, 50891 153313, 51468 153250, 51067 153688, 51213 154095, 50916 154527, 51032 155061, 50908 155143, 50873 155279, 50889 155444, 51349 155609, 51137 156416, 51305 156573, 52008 156222, 52010 156167, 51603 155538, 52019 154821, 52012 154481, 51731 153953, 51623 153275, 51602 153213, 51841 152372, 51578 151653, 51734 150851, 51524 150133, 51750 149296, 51541 148569, 51717 148205, 51724 147752, 51324 147690) (70457 155407, 70600 155759, 70395 155991, 70310 156225, 70362 156418, 70992 156476, 71069 156406, 70945 155889, 70787 155707, 70863 155211) (63732 155747, 63840 156256, 64085 156353, 64012 156014, 64054 155690) (53588 153375, 53471 153818, 53398 153884, 53329 154115, 53343 154451, 53592 154993, 53452 155344, 53375 155440, 53345 155641, 53380 155982, 53496 156183, 53629 156286, 53612 155762, 53683 155501, 53651 155365, 53705 154908, 53575 154222, 53624 153929, 53685 153219) (57235 153680, 57329 153970, 57197 154780, 57257 155153, 57237 155276, 57278 155534, 57257 156222, 57476 156070, 57492 155863, 57576 155657, 57606 155178, 57202 154779, 57396 154397, 57487 154314, 57538 154109, 57502 153922, 57657 153484, 57225 153423) (46263 151562, 46125 152377, 46288 153109, 46147 153921, 46303 154650, 46095 155971, 46482 155780, 46388 155417, 46447 155267, 46401 155026, 46427 154768, 46338 154268, 46234 153909, 46333 153728, 46410 153228, 46357 152713, 46288 152475, 46206 152366, 46272 152227, 46384 151679, 46277 151255, 46307 151176, 46141 150982) (63743 152778, 63749 153373, 63718 154237, 63777 154527, 63678 154929, 63717 155662, 64025 155544, 63882 155274, 64000 154947, 63737 154926, 64026 154757, 63961 154477, 64124 154045, 63807 153743, 64102 153275, 63910 152940, 63997 152536) (68831 154157, 68853 154511, 68935 154665, 68861 154859, 68823 155294, 69159 155148, 69341 154998, 69319 154108) (47717 154277, 47674 155049, 48183 154621, 48172 154277, 48081 154081, 48170 154031, 48167 153688, 47653 153550) (78490 153983, 78372 154126, 78395 154397, 78360 154795, 78784 154793, 78803 154464, 78711 154310, 78765 154059, 78730 153918, 78751 153796) (70710 153740, 70602 153819, 70493 153977, 70538 154225, 70496 154517, 70606 154594, 70854 154635, 70789 154155, 70896 153432) (69037 152560, 68793 152624, 68804 152991, 68882 153129, 68813 153309, 68817 153682, 69123 153612, 69302 153465, 69308 153011, 69360 152780, 69360 152303) (47856 152110, 47679 152215, 47697 152733, 47653 153508, 48209 153128, 48231 152586, 48180 152082) (70408 148868, 70473 149204, 70433 149748, 70471 149979, 70403 150238, 70412 150532, 70473 150754, 70432 150939, 70447 151357, 70512 151519, 70815 151823, 70537 152287, 70444 152994, 70475 153080, 70909 153309, 70908 152701, 70850 152588, 70914 152464, 70888 152191, 70919 151856, 70862 151422, 70886 151112, 70848 151038, 70888 150955, 70941 150187, 70841 149877, 70613 149552, 70820 149217, 70902 148698, 70884 148315, 70408 148189) (78545 152349, 78390 152715, 78335 153158, 78454 153219, 78723 153239, 78716 153033, 78637 152780, 78737 152562, 78736 152177) (57275 149332, 57541 150035, 57325 150858, 57466 151606, 57321 152420, 57232 152783, 57228 152979, 57338 152847, 57646 152732, 57454 152384, 57644 151656, 57633 151471, 57341 150865, 57547 150037, 57329 149297, 57376 149023) (74479 151949, 74536 152354, 74462 152912, 74790 152499, 74761 152292, 74869 151866) (67528 151948, 67377 152363, 67632 152025, 67622 151831, 67466 151766) (68878 149395, 68985 149612, 68912 149828, 68855 150348, 68892 150412, 69342 150676, 69067 151048, 68869 151245, 68918 151567, 68853 151982, 69357 152144, 69325 151675, 69263 151473, 69298 151219, 69347 150675, 69278 150305, 69288 150120, 69216 149935, 69282 149722, 69302 149134, 68856 148700) (53629 151451, 53544 151818, 53547 151994, 53674 152109, 53650 151877, 53734 151510, 53724 151378) (63741 151287, 63764 151429, 63720 151637, 63961 151716, 63874 151426, 63940 151381, 63929 151093) (47904 150608, 47847 150753, 48053 151003, 47733 150994, 47731 151398, 47881 151684, 48153 151552, 48163 151071, 48120 150596) (74517 150581, 74548 150799, 74523 151057, 74841 151108, 74731 150749, 74739 150511) (46255 150027, 46169 150509, 46259 150031, 46203 149654, 46151 149581) (63739 149111, 63881 149848, 63832 150253, 63972 149852, 63811 149478, 64105 149010, 63819 148746) (136812 149201, 136658 149819, 136793 149767, 136888 149605, 137001 149187) (65792 149323, 65714 149689, 65857 149351, 65852 149265, 65771 149181) (74569 149249, 74581 149258, 74769 148808) (72802 146626, 72577 147464, 72045 147978, 72063 148380, 72019 148575, 72012 149123, 72648 148921, 73014 148120, 72586 147462, 73053 146715, 73118 146142) (46124 149076, 46217 148908, 46230 148472) (67273 148777, 67294 149013, 67454 149069, 67414 148879, 67549 148451) (69177 147490, 69198 147615, 69009 148116, 69292 147675, 69294 147483) (70644 147044, 70626 147223, 70455 147463, 70407 147915, 70809 147754, 70848 147162, 70807 147009) (63912 147513, 63860 147762, 64010 147516, 64033 147374, 63872 147325) (179641 143901, 179269 144018, 178732 144497, 178796 144708, 178685 145126, 178868 145464, 178579 145612, 178731 146391, 178677 146679, 178925 146788, 179068 146714, 179193 146150, 179120 145937, 179508 145842, 179438 145472, 179811 145368, 180208 144892, 180234 144458, 180520 144273, 180440 143870, 180023 143838) (72854 144925, 72847 145230, 73096 145356, 73002 145022, 73091 144594) (29369 143801, 29414 144177, 29775 144161, 30074 144289, 29846 144059, 29741 143724) (72836 143128, 72748 143306, 72761 143536, 72673 143972, 73103 143923, 73102 143746, 73004 143469, 73096 143165, 73109 142870) (214087 143097, 213856 143626, 214142 143746, 214285 143897, 214509 143890, 214833 143746, 214531 143156, 214400 143089, 214172 142774) (215788 143249, 215606 143533, 215825 143862, 216001 143875, 216421 143745, 216392 142954) (196122 143060, 196145 143128, 196033 143726, 196105 143863, 196783 143655, 196187 142712) (210363 137606, 210295 138013, 210362 138859, 210273 139830, 210325 140248, 210287 140340, 210324 140717, 210219 141522, 210334 142654, 210280 142925, 210070 143158, 209988 143524, 210048 143550, 210253 143839, 210439 143846, 210806 143687, 210743 143317, 210486 142999, 210474 142615, 210568 141965, 210541 141434, 210531 140661, 210501 139895, 210556 139360, 210468 138353, 210511 138072, 210500 137657, 210380 136798) (208834 133733, 208849 134125, 208130 134105, 207982 134235, 207983 134382, 207914 134623, 207881 135185, 207785 135986, 207808 136755, 207765 137542, 207813 138305, 207766 139099, 207830 139509, 207762 139869, 207857 140231, 207873 141083, 207789 141388, 207860 141782, 207900 142282, 207957 142686, 207938 142922, 207678 143247, 207641 143391, 207955 143694, 208155 143668, 208252 143708, 208532 143593, 208830 143841, 208926 143843, 209133 143756, 208946 142640, 208963 141932, 208922 141491, 208943 141097, 208939 140097, 208805 139584, 208817 139525, 208806 138809, 208814 138770, 208741 137874, 208725 137280, 208732 137201, 208712 136508, 208673 136281, 208810 135706, 208841 134922, 208786 134815, 208878 134320, 208902 133760, 208906 133321) (211852 143319, 211732 143619, 211818 143797, 211917 143805, 212291 143684, 212355 143717, 212455 143459, 212051 143027, 211912 142911) (197247 143463, 197159 143551, 197275 143538, 197655 143804, 197723 143784, 197651 143379) (199039 143036, 198644 143375, 198594 143545, 199089 143798, 199253 143787, 199404 143711, 199403 143324, 199201 142992, 199195 142416) (192401 135137, 192451 135538, 192409 136552, 192478 137081, 192380 137496, 192344 138668, 192357 139440, 192301 140158, 192347 140994, 192303 141696, 192314 142165, 192368 142443, 192337 142935, 192016 143412, 192058 143782, 192445 143739, 192606 143792, 192880 143561, 192771 143139, 192529 142881, 192590 142478, 192582 142237, 192680 142065, 192627 141923, 192722 141196, 192568 140689, 192620 140531, 192578 140352, 192453 140190, 192619 139907, 192677 139620, 192505 139110, 192620 138981, 192362 138664, 192648 138058, 192569 137832, 192596 137577, 192519 136683, 192424 136321, 192569 135506, 192522 135131, 192415 134726) (204464 143160, 204482 143482, 204792 143784, 205070 143709, 205147 143630, 205151 142910) (190046 143400, 189933 143593, 190176 143603, 190456 143770, 190518 143433, 190470 143059, 190180 142766) (193816 143304, 193791 143699, 193977 143679, 194089 143743, 194339 143692, 194615 143473, 193921 143077) (188625 138913, 188485 139340, 188433 139740, 188487 140114, 188696 140444, 188479 140891, 188419 141295, 188461 141671, 188655 142005, 188595 142797, 188421 143108, 188396 143322, 188194 143417, 188161 143692, 188356 143669, 188466 143734, 188716 143686, 188952 143733, 188920 143484, 188806 143127, 188646 142802, 188751 142017, 188688 141291, 188746 140921, 188725 140824, 188717 140110, 188662 139736, 188732 139373, 188717 139275, 188747 138408) (202785 143172, 202878 143534, 203301 143711, 203536 143601, 203671 143310, 202949 142873) (201195 142717, 200890 142760, 201032 143162, 200957 143285, 201088 143286, 201240 143596, 201428 143619, 201616 143697, 201801 143542, 201869 143424, 201795 143055, 201410 142548) (206282 142731, 206250 142949, 206137 143232, 206122 143420, 206313 143632, 206542 143694, 206752 143636, 206870 143402, 206891 143210, 206662 142685) (181212 142495, 181065 142923, 180983 143333, 181147 143519, 181380 143612, 181584 143589, 181727 143345, 181749 143124, 181475 142985, 181236 142489, 181151 142092) (182863 143594, 183201 143612, 183286 143478, 182775 143100) (200234 143484, 200516 143602, 200647 143370, 200257 143328) (184893 142960, 184222 143169, 184102 143139, 184470 143541, 184630 143589, 184988 143082, 185158 143063, 184932 142716) (179573 143332, 179653 143398, 179928 143235, 179932 143101, 179675 142630) (51816 142917, 51852 143065, 51828 143222, 52000 143273, 51971 143033, 52026 142632) (214134 138896, 214126 140401, 214118 140477, 214138 141223, 214090 142012, 214172 142736, 214298 142482, 214369 142160, 214246 141969, 214230 141198, 214185 140435, 214229 139648, 214140 138897, 214165 138119, 214157 138007) (69390 142136, 69233 142635, 69412 142115, 69226 141773) (72913 139495, 72959 139583, 72733 140370, 72739 140512, 73116 141101, 72723 141810, 72733 142185, 73017 142321, 72922 141942, 72970 141825, 73161 141097, 72849 140402, 73175 139699, 73208 139294, 72753 138960) (201355 141206, 201321 141508, 201399 141613, 201362 141977, 201412 142168, 201498 142056, 201536 141667, 201467 141207, 201416 141161) (198788 141158, 198757 141556, 198796 141945, 199199 142075, 199227 141871, 199169 141480, 199205 141092, 199184 140881) (202921 141605, 202964 141185, 202941 141081) (199074 138325, 199190 139117, 199082 139872, 199125 140279, 199179 140431, 199152 139928, 199194 139119, 199156 138740, 199142 138062) (206426 134601, 206427 134809, 206586 135462, 206571 135892, 206431 136168, 206605 137019, 206563 137800, 206576 137868, 206576 138544, 206552 139334, 206683 140304, 206697 140150, 206673 139430, 206723 138652, 206771 138591, 206722 138558, 206655 137873, 206700 137089, 206730 137051, 206698 137032, 206700 136285, 206668 135906, 206697 135544, 206736 135499, 206705 135464, 206729 134764, 206636 134371) (182757 140117, 182978 139890, 182970 139688, 182756 139415) (46050 139560, 46244 139854, 46241 139565, 46121 139382) (72777 137718, 72692 138174, 72813 138483, 72738 138845, 72970 138501, 73088 138408, 73181 138255, 73130 137816, 72994 137658, 72760 137538) (182758 138438, 182931 138316, 182897 138157, 182758 137977) (188636 137310, 188685 137711, 188752 137882, 188755 137737, 188698 137158) (46121 137256, 46077 137283, 46084 137516, 46224 137243, 46194 136964) (210344 135647, 210405 136230, 210462 135641, 210385 135274, 210391 134870) (72906 134969, 72941 134937, 72764 134691) (74361 134456, 74384 134644, 74477 134648, 74470 134540, 74596 134115) (81455 133200, 81485 133392, 81339 133738, 81316 133962, 81478 133782, 81614 133460, 81630 133195) (70938 133183, 70805 133615, 71002 133220, 71022 133051, 70779 132835) (77847 131676, 77788 131955, 77850 132063, 77837 132269, 77906 132435, 77887 132550, 78169 132097, 78162 131851, 78033 131625, 77812 131490) (81292 131487, 81392 131868, 81389 132130, 81624 132031, 81603 131810, 81657 131454) (70718 131287, 70767 131679, 70750 132085, 71085 131900, 71044 131602, 71079 131244) (74386 131074, 74260 131394, 74268 131595, 74367 131855, 74604 131960, 74588 131629, 74422 131452, 74550 131149, 74551 130893) (77804 130253, 77939 130489, 77817 130784, 77812 131076, 78037 130849, 78132 130586, 78105 130443, 78157 130204, 78076 130062, 77802 130024) (81410 129924, 81311 130059, 81347 130329, 81269 130759, 81676 130674, 81578 130265, 81695 129686) (67444 130264, 67351 130615, 67542 130306, 67569 130084, 67344 129992) (70929 129619, 70760 129920, 70776 130126, 70693 130553, 71090 130462, 71066 130046, 71137 129825, 71099 129649, 71138 129420) (72724 130290, 72720 130466, 72864 130522, 72802 130346, 72915 129980) (74571 129085, 74220 129878, 74223 130039, 74422 130211, 74330 129927, 74637 129110, 74642 129003, 74406 128733) (79869 129183, 79730 129613, 79936 129208, 79941 129100, 79831 129039) (77774 128527, 77877 128955, 77793 129458, 78176 129201, 78123 128887, 78203 128434) (67151 128626, 67245 128768, 67173 128978, 67212 129164, 67177 129363, 67386 129198, 67560 128903, 67538 128483, 67444 128325, 67161 128256) (69288 128983, 69201 129289, 69346 129014, 69360 128877, 69243 128841) (81431 126754, 81150 126887, 81276 127434, 81376 127608, 81664 127916, 81464 128283, 81297 128404, 81253 128508, 81311 128788, 81309 129010, 81413 129149, 81700 129270, 81685 128903, 81604 128707, 81682 128490, 81662 128305, 81768 127937, 81656 127530, 81721 127167, 81598 126772, 81607 126582) (208804 128730, 208921 129178, 208937 128306, 208923 127968) (63990 128884, 63952 129150, 64113 128851, 63954 128684) (71047 127649, 71106 127709, 70819 128176, 70735 128764, 70831 128948, 71126 129085, 71096 128690, 70982 128518, 71111 128334, 71107 128097, 71183 127640, 70808 127105) (74255 125580, 73924 125774, 74301 126447, 74409 126804, 74283 127081, 74184 127651, 74255 128010, 74242 128326, 74529 128031, 74643 127670, 74630 127369, 74527 127158, 74609 126900, 74590 126715, 74858 125845, 74824 125528) (76402 127808, 76269 128267, 76330 128302, 76303 128223, 76481 127840, 76480 127726, 76330 127582) (65665 127994, 65663 128172, 65795 128146, 65782 128006, 65853 127725) (79797 127653, 79770 127860, 79953 127790, 79910 127516, 79752 127456) (77925 127003, 77798 127121, 77819 127420, 77781 127821, 78208 127795, 78237 127505, 78174 127322, 78198 127060, 78158 126885) (67259 125562, 66855 125773, 67081 126243, 67294 126429, 67179 126862, 67244 127218, 67169 127718, 67609 127555, 67622 127420, 67558 127130, 67552 126756, 67434 126777, 67547 126728, 67479 126378, 67675 126237, 67811 125899, 67704 125541) (69195 127624, 69365 127599, 69335 127262, 69160 127259) (63943 127346, 63911 127582, 64034 127383, 64190 127279, 64022 127265, 63912 127201) (72779 126862, 72701 127179, 72871 126906, 72865 126775, 72686 126594) (75992 125549, 75668 125683, 75799 126035, 76147 126328, 76186 126813, 76344 127049, 76463 127062, 76465 126956, 76298 126673, 76510 126432, 76690 125791, 76598 125786, 76470 125622, 76345 125596, 76310 125507) (46081 126428, 46176 126790, 46166 127047, 46379 126947, 46496 126702, 46439 126403, 46153 126355) (70541 125538, 70628 125685, 70609 126055, 70678 126401, 70863 126613, 70776 126992, 70805 127017, 71162 126966, 71169 126845, 71030 126566, 71233 126363, 71390 125689, 70936 125751, 70707 125486) (49675 126499, 49703 126669, 49842 126852, 49872 126552, 49820 126308) (68981 125524, 68651 125668, 68769 126024, 69026 126341, 69205 126680, 69170 126850, 69299 126767, 69277 126660, 69475 126343, 69661 125780, 69593 125776, 69369 125472) (65589 125667, 65253 125812, 65212 125765, 65142 125855, 65215 125900, 65405 126242, 65608 126503, 65578 126680, 65836 126784, 65735 126468, 65953 126284, 66138 125876, 66124 125586) (72563 125677, 72242 125847, 72643 126501, 72945 126299, 73144 125912, 73113 125609, 72943 125584) (77678 125907, 77647 126146, 77696 126374, 77872 126335, 78283 125907, 78337 125728, 77918 125800, 77792 125661) (64671 125560, 64367 125680, 64504 126021, 64818 125824, 64900 125534) (61578 125669, 61661 125862, 61853 126013, 62126 125713, 62132 125518) (57307 125677, 57331 125713, 57818 125704, 57827 125535) (50780 119092, 50641 119591, 50387 119820, 50572 119976, 50753 119874, 51023 119515, 51061 119248, 51035 118923) (52440 110342, 52318 110762, 52658 110283, 52481 110291, 52381 110176) (90492 73880, 90508 74097, 90745 74443, 90898 74412, 91006 74251, 91250 74080, 91317 73938, 90648 73370) (95409 74279, 95803 74309, 96000 74157, 95493 73769) (89095 73380, 89036 73436, 89041 73726, 88737 73881, 88840 74250, 89211 74302, 89346 74254, 89588 74015, 89348 73541, 89359 73292) (101213 71532, 101237 72214, 101296 72603, 101323 73291, 101161 73606, 101101 73936, 101134 74004, 101499 74244, 101612 74263, 101733 74170, 101926 73735, 101714 73229, 101616 72809, 101711 72599, 101678 72155, 101756 72135, 101745 71291, 101226 71130) (92948 73383, 92727 73994, 92893 74248, 93180 74242, 93302 74116, 93081 73553, 93314 73641, 93055 73379, 92931 73057) (96900 73796, 96690 73802, 96952 74201, 97020 74037, 97505 74035, 97612 73826, 97137 73654) (98362 73445, 97755 73851, 97925 74101, 98106 74134, 98210 74086, 98432 73470, 98397 73368) (99658 71587, 99664 72041, 99726 72328, 99707 72423, 99859 73116, 99716 73360, 99566 73417, 99467 73644, 99544 74021, 99650 74082, 100045 74129, 100243 73875, 100126 73509, 99968 73194, 99934 72477, 100006 72364, 100018 72192, 99907 71767, 99985 71590, 99917 71429, 100081 71347, 100079 71161, 99631 70867) (93951 73986, 94226 74112, 94284 73920, 94076 73750) (102889 72361, 102983 73121, 102920 73391, 102831 73543, 102790 73943, 103141 74099, 103377 74057, 103545 73782, 103350 73432, 103069 73103, 102980 72343, 102892 72123) (98110 71878, 98302 72616, 98266 71965, 98116 71143) (90761 71701, 90857 72063, 90827 72078, 90900 72333, 90888 72068, 90955 71667, 90812 71636) (95501 69458, 95481 69538, 95570 70204, 95530 70315, 95579 70560, 95545 70704, 95624 70940, 95723 71065, 95824 71437, 95810 71834, 95894 71964, 95828 71439, 95789 70716, 95801 70659, 95728 69976, 95753 69884, 95722 69623, 95746 69494, 95652 69119, 95502 68753, 95470 68554) (102856 66392, 102874 66939, 102964 67569, 102958 67907, 102886 68094, 102956 68591, 102847 68705, 102839 68908, 103170 69206, 103375 69813, 103364 69213, 103331 68484, 103270 67742, 103310 67551, 103243 67012, 103320 66728, 103311 66326, 103019 66098, 102850 65661) (101279 66021, 101325 66687, 101328 67182, 101446 67817, 101369 67957, 101441 68505, 101282 68592, 101267 69247, 101725 69460, 101797 69595, 101872 69518, 101820 69431, 101714 68364, 101664 67981, 101624 67258, 101656 67131, 101556 66517, 101681 66350, 101653 66245, 101750 66153, 101748 65922, 101289 65615) (99721 65930, 99940 67172, 99889 66588, 99841 65848, 99720 65436) (98163 65632, 98248 66055, 98212 65657, 98113 64989) (98218 59856, 98262 60034, 98199 59533) (97930 57562, 97989 57883, 98264 57538, 98224 57226) (98274 57069, 98352 56767, 98340 56650, 98212 56572)), ((225644 179887, 225630 181166, 225501 181198, 225501 201627, 225491 202402, 225469 202910, 225469 214698, 189190 214698, 189122 214369, 189502 214263, 189441 213910, 189797 213801, 189863 213394, 190234 213290, 190305 212881, 190232 212521, 190597 212416, 190527 212045, 190904 211955, 190968 211543, 191333 211450, 191398 211033, 191769 210929, 191702 210561, 192075 210458, 192010 210090, 192387 209987, 192509 209189, 192779 209101, 192659 208948, 192840 208898, 192807 208707, 193184 208605, 193131 208320, 192997 208265, 192914 208042, 193133 208105, 193491 208130, 193607 207330, 193975 207223, 194033 206825, 194399 206727, 194460 206322, 194830 206217, 194769 205845, 195094 205753, 195088 205710, 195137 205727, 195088 205374, 195460 205270, 195555 204465, 195925 204377, 195870 203991, 196248 203890, 196189 203517, 196562 203414, 196571 202978, 196982 202909, 197032 202509, 196980 202140, 197349 202039, 197301 201665, 197550 201591, 197462 201369, 197687 201403, 197718 201161, 198088 201065, 198164 200648, 198098 200293, 198459 200201, 198419 199815, 198786 199740, 198819 199692, 198820 199339, 198731 199328, 198742 199230, 199210 199075, 199243 198805, 199612 198706, 199570 198329, 199940 198226, 199894 197850, 200267 197748, 200313 197351, 200344 197336, 200361 196961, 200721 196845, 200705 196490, 201051 196387, 201007 195994, 201379 195890, 201419 195494, 201681 195420, 201733 195337, 201797 195323, 201850 195374, 202914 195085, 203286 195013, 203608 195279, 204380 195071, 204758 194997, 205145 195245, 205915 195038, 206292 194965, 206675 195213, 207472 195028, 207513 194984, 207433 194326, 208139 194763, 208187 194751, 208198 194796, 209310 194493, 209652 194785, 210783 194487, 211127 194769, 211887 194564, 211904 194572, 212647 194363, 212663 193969, 213028 193869, 213040 193607, 212897 193507, 212880 193203, 213194 193427, 213421 193365, 213402 192984, 213778 192883, 213784 192115, 214174 191995, 214180 191626, 214532 191562, 214522 191129, 214893 191026, 214877 190640, 215252 190538, 215271 190150, 215642 190045, 215655 189653, 215771 189619, 215781 189353, 216031 189376, 216044 189162, 216112 189138, 216050 188786, 216008 188778, 216004 188689, 216072 188762, 216421 188730, 216428 188669, 216798 188563, 216789 188184, 217163 188081, 217146 187723, 217067 187713, 217038 187607, 217146 187610, 217311 187424, 217524 187367, 217531 187200, 217904 187096, 217905 186326, 218274 186231, 218267 185837, 218640 185733, 218649 185345, 219023 185239, 219029 184851, 219401 184748, 219396 183984, 219761 183882, 219768 183486, 220141 183382, 220142 183149, 220015 183028, 219880 182796, 220142 182801, 220210 182976, 220523 182895, 220515 182507, 220895 182408, 220888 182020, 221261 181916, 221267 181139, 221642 181032, 221644 180654, 222008 180546, 222009 180160, 222387 180058, 222385 179669, 222756 179566)), ((188743 194702, 188639 195415, 187979 195596, 187463 195051, 187300 194412, 187962 194231)), ((191618 194689, 191729 195343, 191069 195524, 190334 195040, 190395 194339, 191054 194158)), ((185622 194782, 185772 195404, 185067 194934, 185117 194659, 185378 194526)), ((202513 194804, 202501 195148, 202174 195210, 201897 194972, 201465 194406, 202129 194224)), ((205441 194777, 205470 195090, 205161 195195, 204822 194945, 204525 194343, 205184 194161)), ((115949 193379, 115652 193181, 115715 193005, 116038 192923)), ((116700 192741, 116596 193015, 116359 193081, 116203 192877, 116394 192683, 116521 192667)), ((77515 185401, 77725 185593, 77537 185918, 77288 185961, 76960 185801, 77113 185262)), ((222757 179018, 222796 179176, 222834 179180, 222757 179400, 222524 179239, 222523 178999)), ((126075 177767, 125917 178099, 125649 178316, 125278 178528, 125164 178494, 125215 178384, 125585 178287, 125820 177765)), ((22835 173891, 22683 174001, 22336 173940, 22684 173657)), ((23062 172597, 23098 172656, 23435 172783, 23506 173007, 23433 173045, 23083 173072, 23138 173420, 23058 173608, 22788 173515, 22816 173257, 22943 173086, 22915 172943, 22945 172697, 22921 172558)), ((24493 172273, 23903 172529, 23686 172494, 23808 172066)), ((24475 170728, 24357 171043, 24352 171329, 23809 171154, 23712 170835, 23808 170583)), ((131176 170166, 130997 170524, 130804 170766, 130591 170824, 130405 170764, 130636 170654, 130806 170268, 130873 170243, 130909 170143)), ((87703 170065, 87660 170256, 87487 170304, 87320 169991, 87664 169896)), ((131726 168823, 131426 168980, 131353 168974, 131586 168499, 131745 168460)), ((91043 165273, 90853 165457, 90718 165509, 90523 165236, 90869 165141)), ((22740 165058, 22708 165423, 22614 165405, 22458 165000, 22685 164907)), ((152546 163146, 152437 163506, 152211 163429, 152010 163292, 152388 163115)), ((23180 162555, 23054 162803, 22692 162698, 22885 163023, 22753 163130, 22685 163270, 22142 163084, 22674 162691, 22697 162314, 23054 162234)), ((206641 162618, 206796 162618, 206808 162777, 206650 162820, 206360 162428)), ((30210 162566, 30322 162719, 29848 162664, 29897 162422, 30111 162273)), ((30545 162087, 30625 162207, 30181 162185, 30267 161930, 30497 161755)), ((31148 161146, 30929 161241, 30951 161675, 30542 161699, 30589 161371, 30882 160992)), ((31592 160378, 31742 160596, 31624 160760, 31258 160726, 31138 160372, 31214 160276)), ((32017 159366, 31997 159750, 32042 159807, 31822 159797, 31884 159673, 31940 159378, 32014 159263, 32380 159258)), ((32534 158827, 32462 158906, 32382 159256, 32162 158929, 32434 158544)), ((152430 153099, 152546 153564, 152446 153974, 152343 154012, 152176 154193, 151922 154317, 151807 154302, 151802 154433, 151495 154905, 151309 155116, 150914 155802, 150871 155804, 150870 155851, 150646 156077, 150562 156324, 150073 157020, 149641 157496, 149567 157759, 149356 158130, 149274 158138, 149254 158232, 149011 158461, 148837 158735, 148458 159215, 148556 158811, 148724 158379, 148883 158222, 148958 157926, 149103 157735, 149316 157655, 149359 157429, 149737 156738, 150003 156403, 150135 156024, 150417 155818, 150505 155564, 150599 155434, 150859 154975, 151128 154586, 151413 154383, 151556 154020, 151815 153788, 151902 153242, 151911 152990, 152256 152794)), ((209437 158793, 209460 159173, 209128 158877, 209263 158588)), ((83131 157752, 82774 158528, 82105 158742, 81770 158123, 82047 157317, 82720 157208)), ((32851 158392, 32811 158440, 32565 158430, 32715 158295, 32793 158110)), ((33547 157387, 33627 157494, 33315 157450, 33355 157287, 33511 157131)), ((39116 145521, 39364 145607, 39465 145590, 39635 145639, 39593 145824, 39925 146523, 40177 146819, 40363 146603, 40306 146231, 40480 145992, 40628 146143, 40835 146156, 41032 146419, 41083 146572, 40564 146585, 40726 146890, 40702 147036, 40562 147117, 40287 147099, 40358 147379, 40157 147822, 40193 147892, 40111 147893, 39957 148076, 39861 148291, 39896 148368, 39807 148367, 39593 148514, 39544 148835, 39480 148838, 39246 149007, 39189 149406, 39031 149520, 38731 149427, 38695 149473, 38370 148754, 38200 147828, 38271 147564, 38208 147453, 38235 147390, 38584 147478, 38709 147555, 38773 147426, 38757 147127, 38603 146698, 38544 146326, 38576 145772, 38732 145464)), ((43859 142156, 43963 142503, 43646 142341, 43370 142289, 43457 141959)), ((44171 141682, 44007 141948, 43683 141581, 43880 141391)), ((24416 45497, 24693 45678, 25200 45679, 25466 45668, 25974 45669, 26239 45658, 26747 45659, 27020 45680, 27527 45681, 27792 45669, 28300 45670, 28566 45658, 29073 45659, 29338 45646, 29845 45647, 30119 45671, 30626 45672, 30892 45658, 31399 45659, 31664 45644, 32172 45645, 32446 45673, 32953 45674, 33218 45658, 33725 45659, 33989 45642, 34497 45643, 34773 45678, 35280 45679, 35544 45658, 36051 45659, 36315 45638, 36822 45639, 37086 45618, 37593 45619, 37870 45658, 38377 45659, 38639 45631, 39147 45632, 39409 45604, 39917 45605, 40196 45658, 40703 45658, 40963 45619, 41730 45617, 42226 45683, 42524 45767, 42787 45684, 43283 45687, 43545 45602, 44533 45603, 44832 45795, 59563 45794, 59688 45676, 60180 45673, 60322 45630, 60554 45847, 60716 46268, 60907 46296, 61682 46292, 61904 46485, 62076 46292, 63233 46292, 63455 46488, 67332 46486, 67504 46292, 68660 46292, 68883 46489, 69658 46488, 70039 46678, 78962 46675, 79133 46472, 79903 46483, 80127 48386, 80383 48432, 80159 48711, 80166 48815, 79153 49961, 79190 50343, 78293 51384, 78522 51502, 78206 51657, 78225 51863, 77930 52172, 78046 52480, 78186 52613, 77967 52832, 77830 52716, 77559 52668, 77515 52628, 76871 53397, 76911 53776, 76580 54130, 76297 54514, 76422 54717, 76353 54952, 75925 55085, 75942 55355, 75261 56022, 75284 56139, 75631 56439, 75354 56695, 75182 56552, 74638 57171, 74637 57198, 74304 57591, 73293 58838, 73343 59217, 73068 59463, 73003 59568, 73039 59902, 72696 60203, 72359 60608, 71013 62293, 71062 62667, 70726 63087, 70378 63374, 70424 63748, 70078 64026, 69343 64944, 69460 65598, 69208 65831, 68818 66330, 68532 66440, 68117 66973, 68167 67352, 67460 67858, 67504 68234, 67291 68267, 67356 68464, 67153 68491, 67216 69045, 66837 69105, 66881 69479, 66510 69535, 66538 69906, 66176 69964, 65816 70214, 65862 70591, 65510 70828, 65553 71203, 65254 71251, 65281 71726, 65668 72320, 64891 72061, 64935 72458, 64607 72515, 64612 72559, 64564 72547, 64598 72895, 64228 72956, 64272 73342, 63897 73399, 63944 73789, 63565 73847, 63609 74236, 63165 74504, 63485 74913, 62921 74883, 62936 75038, 62560 75104, 62624 75596, 62911 75825, 62944 76077, 62690 76122, 62461 76069, 62300 76096, 62320 76311, 61948 76379, 61984 76755, 61615 76819, 61663 77214, 61464 77254, 61486 77432, 61304 77417, 61330 77666, 60940 77749, 60997 78122, 60812 78228, 60856 78585, 61066 78879, 60326 78884, 60370 79264, 59992 79337, 60033 79627, 60176 79697, 60192 79828, 60061 79854, 59948 79740, 59662 79792, 59710 80174, 59417 80237, 59426 80317, 59344 80316, 59380 80631, 59006 80706, 59051 81093, 58935 81120, 58967 81381, 58707 81408, 58722 81553, 58336 81640, 58391 82016, 58246 82090, 58251 82304, 58053 82367, 58069 82570, 57710 82723, 57757 83119, 57543 83168, 57563 83329, 57396 83309, 57426 83580, 57212 83632, 57509 84009, 57085 83905, 57100 84046, 56906 84091, 56905 84257, 56745 84291, 56771 84511, 56557 84561, 56757 84851, 56409 84700, 56434 84976, 56076 85132, 56109 85511, 55749 85672, 55804 86049, 55424 86133, 55470 86511, 55094 86599, 55145 86982, 54763 87067, 54814 87449, 54438 87539, 54486 87922, 54111 88013, 54155 88392, 53782 88487, 53829 88871, 53459 89006, 53510 89393, 53137 89521, 53187 89903, 52802 89990, 52859 90376, 52703 90419, 52710 90624, 52515 90692, 52533 90854, 52151 90944, 52201 91272, 52306 91308, 52250 91667, 52034 91376, 51831 91427, 51879 91810, 51495 91900, 51551 92263, 51626 92274, 51566 92388, 51440 92321, 51177 92389, 51224 92772, 50962 92858, 50975 92967, 51310 93535, 50936 93537, 50649 93353, 50528 93387, 50577 93769, 50267 93859, 50165 94288, 50128 94307, 49991 94714, 49647 94794, 49270 95699, 48904 95815, 48694 96638, 48743 97052, 48853 97371, 48734 97692, 48458 97769, 48332 97513, 48248 97434, 48196 97549, 47810 97630, 47535 98478, 47611 98487, 47576 98586, 47522 98510, 47124 98568, 46867 99452, 46666 99899, 46336 99929, 46100 100429, 46451 100333, 46537 100189, 46563 100324, 46492 100589, 46239 100659, 46047 100588, 45956 100874, 45560 100944, 45274 101782, 45602 101736, 45688 101585, 45774 101826, 45571 101825, 45016 102298, 44728 102233, 44593 102414, 44398 103233, 44170 103691, 43893 103620, 43786 103749, 43552 104250, 43393 104889, 43475 105047, 43290 105457, 43260 105105, 42999 105123, 42516 105998, 42898 105981, 42778 106445, 42451 106217, 42462 106099, 42175 106075, 42048 106213, 41901 107029, 41647 107479, 41328 107496, 41263 107547, 40991 108053, 40938 108396, 41320 108589, 40870 108695, 40821 108864, 40461 108966, 40166 109442, 39916 109898, 39829 110305, 39431 110378, 39382 110798, 39549 110775, 39417 110972, 39457 111172, 39104 111284, 39169 111630, 38792 111757, 38588 111998, 38485 112383, 38346 112377, 38285 112664, 37909 112761, 37845 113179, 37734 113547, 37423 113581, 37397 113690, 37482 114047, 37105 114157, 37190 114514, 37029 114567, 37004 114799, 36791 114846, 36754 115023, 36402 115058, 36360 115100, 36322 115532, 35926 115607, 36030 116002, 35610 116075, 35729 116457, 35880 116433, 35978 116715, 35708 116634, 35719 116476, 35304 116542, 35299 116972, 35376 116958, 35363 117042, 35287 117063, 35230 117373, 34881 117419, 34856 117488, 34934 117850, 34546 117940, 34628 118322, 34232 118411, 34196 118820, 33802 118904, 33785 119312, 33929 119293, 33978 119588, 34239 119951, 33966 119909, 33504 120034, 33504 120164, 33090 120298, 33318 120877, 32753 120620, 32685 121180, 32362 121273, 32332 121391, 32369 121657, 31958 121737, 32041 122132, 31617 122202, 31633 122600, 31865 122572, 31839 122824, 31605 122889, 31559 123007, 31223 123099, 31217 123135, 30926 123216, 31072 123565, 31093 123746, 30912 123795, 30926 123985, 30558 124091, 30513 124480, 30154 124540, 30114 124986, 29712 125062, 29777 125465, 29366 125541, 29439 125946, 29018 126018, 29002 126835, 28643 126893, 28609 127338, 28206 127410, 28214 127831, 27819 127911, 27875 128275, 28093 128258, 28109 128478, 27946 128686, 27937 129141, 27518 129029, 27487 129175, 27139 129261, 27110 129681, 26752 129730, 26720 129765, 26763 130166, 26373 130253, 26413 130652, 26000 130726, 26028 131148, 25959 131496, 25646 131601, 25652 132019, 25406 132095, 25410 132217, 25290 132235, 25292 132505, 24925 132562, 24912 133001, 24503 133074, 24535 133496, 24127 133567, 24169 133977, 23759 134053, 23800 134466, 23409 134555, 23407 135337, 23055 135414, 23048 135448, 21448 135412, 21466 134830, 21477 133090, 21471 132505, 21483 127274, 21477 126689, 20543 126499, 20554 125724, 20740 125475, 20742 123147, 20552 123002, 20549 121848, 20739 121598, 20551 121452, 20549 120297, 20739 120048, 20551 119901, 20549 118747, 20739 118497, 20551 118351, 20549 117196, 20738 116947, 20742 113068, 20552 112923, 20549 111769, 20741 111519, 20551 111373, 20549 110219, 20739 109969, 20551 109823, 20549 108668, 20739 108419, 20551 108272, 20546 106531, 20263 106323, 20289 105938, 19975 105771, 19971 105529, 19902 105384, 19903 104888, 20107 104860, 20043 104711, 20055 104570, 20058 103937, 20048 103797, 20057 103019, 20053 101752, 19921 101506, 19914 101119, 20734 100873, 20732 80715, 20725 78390, 20733 77861, 20683 77391, 20673 74375, 20791 74122, 20766 73599, 20920 73346, 20888 72825, 20780 72572, 20826 72049, 20943 71796, 21012 71314, 21026 70499, 21067 69857, 21108 68560, 21174 68195, 21159 67397, 20693 67144, 20633 66757, 20627 65980, 20612 65460, 20611 64297, 20643 63656, 20651 62880, 20644 62747, 20643 61329, 20626 60556, 20633 60033, 20616 59647, 20612 59006, 20626 58617, 20635 57452, 20621 56933, 20637 56543, 20635 55902, 20623 55771, 20605 55130, 20613 54993, 20488 53580, 20498 53443, 20502 52802, 20483 52673, 20484 52032, 20495 51895, 20488 51253, 20464 51125, 20462 50484, 20438 50222, 20439 49193, 20980 48996, 20972 48796, 21054 48617, 22249 48387, 22365 48176, 22528 47991, 22803 46284, 23023 45522, 23179 45567, 23686 45577, 23908 45496) (27459 128386, 27528 128768, 27898 128695, 27847 128326)), ((46309 131406, 46100 132193, 45817 132066, 45755 131944, 45798 131545, 45735 131174, 46083 130719)), ((46265 129867, 46083 130664, 45720 130403, 45769 130003, 45853 129772, 46158 129536)), ((54828 117709, 54891 117423, 55016 117220)), ((56066 115552, 56016 115584, 55910 115981, 55820 116114, 55765 116020, 55985 115528, 56047 115473)), ((59963 111769, 59714 112290, 59647 112321, 59601 112256, 59642 112169, 59706 111568, 59949 111540)), ((62416 108104, 62244 108298, 62197 108054, 62278 107868, 62506 107656)), ((57993 100763, 57795 101073, 57770 100618, 58007 100553)), ((49407 98770, 49043 99607, 48336 99801, 48010 99151, 48287 98338, 48992 98144)), ((53524 90588, 53555 90831, 53318 90908, 53153 90576, 53273 90546)), ((56329 85838, 56370 86162, 55836 86037, 56054 85835)), ((222336 47944, 222395 48012, 222777 48153, 222736 48544, 222779 49314, 222736 49687, 222806 51559, 222701 52375, 222699 53594, 222734 53973, 222663 54767, 222651 55437, 222681 55925, 222655 56215, 222654 57483, 222627 58132, 222624 58654, 222568 59144, 222623 59817, 222677 60190, 222569 60413, 222370 60649, 222312 61066, 222756 61068, 223426 61317, 223377 61372, 222756 61414, 222007 61657, 221730 61613, 221633 61475, 221483 61525, 221260 61479, 221073 61600, 220593 61536, 220524 61179, 220568 61156, 220425 61014, 220480 61180, 220318 61410, 220141 61322, 219901 61479, 219414 61586, 219414 49194, 217175 49194, 217219 49066, 217149 48897, 217135 48627, 217222 48422, 217177 48323, 217350 48304, 218065 47960, 218125 47964, 218516 48221, 218898 48295, 219284 48120, 219664 47874, 220022 48066, 220456 48162, 220840 48174, 221181 48040, 221560 47983, 221979 47772)), ((86963 56778, 86303 57198, 86321 57587, 85769 57802, 85799 57221, 86214 56722, 86685 56693)), ((174552 46418, 188121 46412, 188256 46418, 191222 46411, 191357 46418, 194323 46409, 194458 46417, 197425 46407, 197560 46416, 199751 46409, 199886 46418, 201049 46413, 201302 46688, 201824 46740, 202094 46910, 202987 46913, 204017 46885, 204149 46822, 206044 46809, 206360 46660, 206474 46659, 206748 46390, 206861 46384, 207135 46236, 207249 46235, 207522 46465, 207636 46459, 207910 46560, 208023 46555, 208243 46722, 208436 48071, 208472 48065, 208520 48292, 209213 47870, 209605 48229, 209954 48401, 209935 48462, 210024 48635, 210019 48398, 210342 48113, 210415 48115, 210759 47945, 211151 48229, 211538 48432, 211577 48654, 211555 48434, 212313 47984, 212701 48021, 213120 48192, 213452 48383, 213454 48696, 213563 48746, 213515 48380, 213863 48181, 214304 47874, 214692 48624, 214728 48633, 215442 48174, 215865 47811, 216185 47831, 216603 48152, 216919 48328, 216984 48875, 216970 49194, 167425 49194, 168129 48436, 168490 46070, 168738 45582, 168888 45717, 170945 45706, 171214 45716, 174047 45702, 174299 45581))) \ No newline at end of file +MULTIPOLYGON (((99345 45800, 99640 46892, 99895 48430, 99533 48811, 99754 50319, 99482 50643, 99467 50724, 99719 50808, 99843 50755, 99865 50639, 99705 49954, 99827 49570, 100002 49260, 99911 48847, 99897 48429, 100280 48073, 100663 47826, 101099 47951, 101445 48274, 101834 48333, 102216 47947, 102603 47911, 102995 48278, 103387 48397, 103796 48170, 104154 47911, 104588 47964, 104933 48205, 105322 48264, 105706 48005, 106093 47968, 106484 48242, 106878 48388, 107643 47912, 108031 47909, 108422 48169, 108811 48307, 109581 47879, 109973 48193, 110364 48430, 110770 48202, 111132 47899, 111520 47915, 112300 48366, 112685 48089, 113071 47880, 113855 48400, 114256 48236, 114621 47912, 115058 47917, 115790 48310, 116202 48153, 116560 47912, 116983 48089, 117341 48362, 117739 48302, 118111 47966, 118542 47991, 118880 47387, 119256 46484, 119637 46480, 119663 46673, 120031 46476, 120222 47192, 127010 47210, 129336 47204, 130302 47216, 130502 47358, 130647 47521, 130909 48432, 130325 49083, 130401 49194, 104681 49194, 104681 66303, 104485 66253, 104426 67081, 104497 67968, 104434 68318, 104504 68792, 104426 68928, 104406 69103, 104448 69444, 104445 69999, 104681 70128, 104681 72342, 104459 72248, 104438 72651, 104526 73040, 104323 73868, 104359 73974, 104618 74190, 104681 74196, 104681 87981, 104494 88321, 104285 89144, 103946 89111, 103678 89708, 103449 90150, 103398 90172, 103313 90560, 103010 90493, 102825 91098, 102781 91116, 102720 91849, 102350 91412, 102210 91621, 101960 92117, 101741 92951, 101384 92965, 100900 93958, 100806 94311, 101018 94313, 100884 94504, 100741 94527, 100768 94381, 100388 94450, 100156 95315, 100225 95351, 100144 95357, 100147 95327, 99763 95409, 99643 95846, 99195 96743, 98881 96739, 98816 96833, 98559 97699, 98166 97777, 97947 98256, 97708 98709, 97606 99122, 97204 99188, 97085 99634, 96893 100072, 96952 100132, 96789 100511, 96838 100788, 96609 100706, 96614 100559, 96302 100615, 96042 101411, 96254 101435, 96114 101720, 95839 102043, 95736 102071, 95784 101950, 95452 101927, 95167 102507, 95081 102881, 95444 103057, 94988 103170, 94921 103335, 94572 103370, 94198 104191, 94316 104291, 94256 104523, 94052 104859, 93943 104904, 93975 104772, 93590 104840, 93469 105293, 93027 106147, 92786 106056, 92652 106298, 92543 106685, 92681 106678, 92624 106847, 92458 106942, 92389 107142, 92204 107196, 92125 107475, 91996 107289, 91596 108138, 91452 108563, 91123 108541, 91052 108627, 90813 109456, 90910 109489, 90746 109656, 90775 109525, 90399 109599, 90056 110462, 90314 110606, 89936 110770, 89853 110933, 89548 110901, 89469 111015, 89186 111896, 89172 111903, 89150 112679, 88728 112186, 88562 112458, 88357 113023, 88624 113454, 88095 113737, 87821 113564, 87326 114734, 87313 114739, 87236 115250, 86938 114880, 86750 115280, 86644 115685, 86237 115789, 85860 116688, 85772 116981, 86087 117014, 85876 117336, 85621 117407, 85563 117529, 85260 117468, 85171 117606, 84920 118267, 85317 118388, 85105 118977, 84717 118772, 84627 118925, 84352 118849, 84236 119070, 84133 119451, 84337 119432, 84111 119945, 84060 120251, 83449 120266, 83327 120483, 83037 121329, 82708 121331, 82639 121395, 82309 122264, 82434 122279, 82307 122622, 82241 122330, 81905 122408, 81704 122866, 81600 123264, 81953 123186, 81745 123519, 81460 123639, 81430 123715, 81100 123704, 81036 123786, 80887 124239, 80486 125072, 80212 125075, 80068 125253, 79996 125626, 80230 125365, 80553 125184, 80879 125062, 81135 125121, 81609 124906, 81593 125429, 81437 125368, 81233 125554, 81115 125740, 81191 125983, 81567 126136, 81545 126011, 81891 125207, 82592 124977, 82816 125275, 82611 125719, 82799 126055, 82483 126916, 82664 127255, 82480 127692, 82685 128025, 82519 128457, 82711 128793, 82518 129233, 82736 129562, 82580 129991, 82763 130329, 82583 130766, 82787 131098, 82628 131528, 82813 131866, 82453 132739, 82675 133067, 82479 133507, 82663 133845, 82517 134272, 82723 134604, 82554 135037, 82764 135369, 82758 135415, 83117 136047, 82776 136915, 82461 137772, 82805 138458, 82472 139236, 82451 139480, 82728 140030, 82517 140763, 82185 140567, 82130 140968, 82152 141058, 82206 140971, 82566 140854, 82968 141507, 82253 141654, 82135 141566, 82085 141756, 82148 141913, 82260 141772, 82967 141522, 82616 142376, 82279 142410, 82156 142331, 82103 142526, 82159 142713, 82283 142546, 82616 142396, 83019 143044, 82309 143180, 82178 143087, 82145 143290, 82193 143468, 82612 143895, 82622 144054, 83001 144607, 82515 145824, 82340 145951, 82553 145900, 82751 146226, 82581 146652, 82425 146702, 82582 146665, 82783 146993, 82609 147422, 82273 147441, 82141 147370, 82095 147568, 82145 147763, 82276 147594, 82610 147431, 82807 147762, 82632 148186, 82297 148216, 82161 148124, 82128 148334, 82178 148514, 82433 148639, 82494 149400, 82862 150072, 82521 150880, 82448 150960, 82528 150991, 82864 151566, 82733 151657, 82476 152253, 82202 151921, 82100 152606, 82155 152767, 82274 152635, 82605 152477, 82983 153130, 82283 153254, 82160 153190, 82120 153376, 82165 153554, 82279 153393, 82986 153145, 82661 153997, 82315 154041, 82194 153951, 82159 154140, 82202 154317, 82441 154451, 82200 154708, 82155 154916, 82214 155096, 82498 155228, 82702 155543, 82696 155587, 83041 156225, 82713 156988, 82038 157237, 82010 157260, 81299 157423, 81227 157409, 80553 157625, 80509 157656, 79948 157437, 79934 157458, 78822 157751, 78600 157441, 78691 157223, 78718 156971, 78622 156661, 78841 156505, 78811 156297, 78597 155892, 78769 155515, 78778 155384, 78344 155517, 78344 155625, 78491 155922, 78283 156171, 78191 156391, 78187 156780, 77836 157609, 77309 157380, 76917 157506, 76183 157699, 76018 157374, 76028 157309, 76000 157372, 75286 157565, 74872 156913, 75041 156505, 74820 156190, 74756 156170, 74667 155807, 74793 155450, 74795 155307, 74477 154696, 74674 154325, 74777 154226, 74834 154033, 74793 153834, 74812 153633, 74664 153481, 74476 153383, 74507 153524, 74469 153671, 74511 153911, 74436 154101, 74472 154309, 74373 154724, 74405 155012, 74589 155441, 74515 155688, 74563 155835, 74326 156288, 74238 156699, 74555 156755, 74766 156943, 75236 157573, 74520 157770, 74284 157454, 73165 157755, 72939 157443, 72971 157348, 72919 157439, 72554 157539, 72507 157460, 72513 157534, 71808 157737, 71687 157389, 70900 157607, 70751 157241, 70693 157205, 70018 157408, 69984 157456, 69370 157241, 69251 157677, 68886 157760, 68644 157457, 67888 157662, 67637 157346, 67275 157426, 67241 157393, 67256 157445, 66147 157742, 66036 157396, 65608 157514, 65751 157863, 65619 158286, 65886 158601, 65651 159053, 65796 159402, 65556 160266, 65831 160943, 65529 161792, 65597 161798, 65843 162102, 65737 162505, 65858 162873, 65692 163221, 65876 163256, 65720 163421, 65885 163640, 65774 164075, 65910 164410, 65658 164866, 65544 165258, 65473 165304, 65561 165285, 65819 165598, 65578 166046, 65531 166063, 65577 166056, 65703 166405, 65593 166815, 65559 166832, 65847 167140, 65606 167593, 65738 167946, 65614 168367, 65876 168683, 65637 169136, 65772 169487, 65557 170316, 65533 170292, 65781 171067, 65583 171871, 65818 172575, 65625 173403, 65880 173721, 65782 174148, 65898 174492, 65656 174945, 65903 175266, 65820 175675, 65558 176151, 65668 176493, 65546 176914, 65843 177220, 65592 177680, 65716 178031, 65617 178436, 65570 178457, 65620 178454, 65882 178761, 65632 179194, 65533 179243, 65626 179237, 65745 179574, 65649 179978, 65615 179996, 65653 179994, 65925 180299, 65659 180761, 65776 181115, 65577 181932, 65808 182657, 65603 183467, 65545 183504, 65605 183508, 65838 184200, 65639 185035, 65915 185341, 65827 185752, 65480 186343, 65632 186582, 65501 186891, 65545 186992, 66202 187201, 65560 187763, 65701 188114, 65576 188534, 66234 188743, 65566 189323, 65614 189322, 65730 189656, 65620 190069, 66264 190285, 65652 190835, 65758 191199, 65666 191602, 65608 191627, 65530 191968, 65565 192027, 65534 192103, 65621 192400, 65685 192385, 65787 192742, 65594 193569, 65824 194283, 66195 194191, 66470 194493, 67598 194194, 67871 194496, 68992 194200, 69102 194547, 70603 194146, 70717 194491, 71479 194286, 71490 194293, 72225 194092, 72736 193165, 72767 193153, 72621 192486, 73196 192721, 73327 192226, 73576 191776, 73682 191740, 73842 191370, 74184 191229, 74218 191123, 74147 190836, 74194 190661, 74369 190553, 74419 190378, 74790 190279, 75282 189363, 75397 188951, 75761 188857, 75873 188403, 76160 187895, 76325 187333, 76389 187509, 76729 187442, 76911 186779, 76572 186683, 76823 186204, 77093 186336, 77080 186545, 77348 186477, 77812 185569, 77935 185151, 78187 185078, 78087 184767, 78356 184872, 78431 184624, 78661 184180, 78730 184154, 78821 183852, 78590 183804, 78689 183468, 78936 183555, 79069 183375, 79373 183238, 79520 182788, 79650 182739, 79645 182111, 80076 182291, 80335 181780, 80465 181356, 80622 181310, 80708 181083, 80909 181009, 81245 179994, 81607 179878, 81695 179369, 81893 178777, 82087 178846, 82185 178562, 82544 178484, 82695 178028, 82910 177587, 83278 177484, 83494 177034, 83785 176194, 84063 176102, 83996 175759, 84215 175940, 84568 175193, 84711 174763, 84994 174530, 85148 174474, 85437 173794, 85802 173699, 86008 173243, 86315 172396, 86681 172288, 87080 171399, 87230 170971, 87600 170873, 87762 170437, 88141 169559, 88510 169460, 88809 168650, 88644 168644, 88738 168425, 88866 168506, 89018 168160, 89386 168058, 89504 167778, 89434 167652, 89734 167183, 90101 167096, 90305 166561, 90238 166135, 90861 165988, 91458 164535, 91312 164423, 91392 164176, 91601 164140, 91696 164319, 91882 164273, 91989 164003, 91899 163875, 91888 163551, 92118 163678, 92232 163401, 92607 163297, 93132 161992, 93502 161888, 94024 160582, 94396 160480, 94749 159613, 95102 159509, 95655 158201, 95921 158121, 95957 157983, 96052 158024, 96359 157230, 96733 157124, 97204 156023, 96890 155669, 97362 155556, 97431 155387, 97801 155285, 98183 154406, 98552 154303, 99041 153014, 99407 152906, 99573 152468, 99955 151598, 100324 151489, 100642 150633, 101006 150534, 101391 149663, 101355 149653, 101531 149174, 101630 149192, 101928 149112, 102082 148679, 102482 147800, 102850 147701, 103158 146838, 103528 146736, 103645 146479, 103526 146201, 103886 145859, 104011 145391, 104094 145381, 104235 144994, 104605 144886, 105015 144003, 105131 143658, 105068 143597, 105135 143534, 105066 143210, 105331 142639, 105595 143065, 105437 143330, 105195 143562, 105533 143476, 105682 143043, 106054 142941, 106418 142161, 106377 142075, 106509 141472, 106681 141424, 106788 141575, 106990 141522, 107138 141092, 107557 140201, 107703 139785, 108067 139684, 108363 138833, 108624 138746, 108604 138547, 108801 138492, 108870 138291, 109320 137398, 109669 137308, 109947 136450, 110315 136349, 110754 135449, 110890 135030, 111240 134928, 111397 134497, 111616 134054, 111811 133996, 111889 133726, 112140 133638, 112331 133108, 112303 133062, 112349 133049, 112476 132653, 112848 132550, 113294 131655, 113426 131231, 113800 131128, 113932 130701, 114382 129802, 114512 129385, 114877 129295, 115015 128858, 115241 128410, 115371 128374, 117026 129315, 120530 130977, 124387 132501, 128548 133870, 132944 135062, 137562 136077, 142293 136898, 147340 137558, 147017 138014, 146860 138296, 146399 138935, 146209 139365, 145835 139873, 145634 140056, 145550 140254, 145315 140588, 145226 140647, 144845 141272, 144597 141521, 144407 141978, 144121 142347, 143642 143102, 143386 143392, 142990 144083, 142651 144537, 142428 144986, 142059 145352, 141994 145492, 141721 145955, 141311 146521, 141075 146907, 140678 147411, 140490 147843, 140135 148328, 139911 148545, 139761 148914, 139515 149171, 139144 149762, 139048 150044, 138623 150624, 138349 150927, 138250 151170, 137886 151689, 137650 152136, 137393 152379, 137061 153047, 136777 153304, 136609 153660, 136240 153932, 135775 154562, 135501 154829, 135137 155319, 134997 155429, 134778 155726, 134378 156427, 133836 157068, 133657 157533, 133391 157773, 133165 158121, 132928 158563, 132646 158891, 132022 159869, 131754 160196, 131521 160639, 131028 161226, 130851 161583, 130351 162280, 130135 162698, 129687 163327, 129220 164012, 128902 164587, 128519 165061, 128177 165672, 127820 166088, 127596 166517, 127367 166811, 127179 167163, 126719 167757, 126403 168372, 126040 168766, 125987 168874, 125644 169463, 125337 169779, 125055 170292, 124774 170757, 124682 170931, 124187 171560, 123859 172171, 123488 172539, 123205 173126, 122847 173669, 122552 174080, 122246 174551, 121896 175064, 121654 175352, 121245 176061, 120966 176353, 120722 176718, 120526 177123, 120106 177823, 119830 178086, 119298 178849, 119016 179313, 118723 179871, 118439 180145, 118189 180487, 118083 180732, 117733 181289, 117481 181536, 116854 182505, 116636 182878, 116374 183188, 116151 183588, 115853 184057, 115588 184517, 115290 184957, 115012 185295, 114915 185477, 114580 186012, 114182 186802, 113908 187085, 113509 187800, 113229 188112, 112787 188840, 112515 189119, 112184 189714, 111859 190184, 111625 190643, 111163 191217, 111025 191583, 110743 191957, 110373 192537, 110032 192950, 109726 193489, 109084 194440, 108694 194935, 108850 195238, 109218 195146, 109428 195465, 110149 195306, 110529 195194, 110745 195487, 111481 195312, 111862 195193, 112074 195501, 112807 195337, 113201 195189, 113405 195509, 114112 195371, 114466 195233, 114667 194866, 115018 194821, 115639 195010, 116361 194787, 116547 195136, 116970 195062, 117650 194877, 117704 194835, 118410 194642, 118461 194642, 119127 194520, 119481 194861, 119751 194647, 119954 194228, 120650 194038, 121050 194650, 121085 194674, 121408 195328, 121356 195424, 121124 196188, 121233 196325, 121164 196169, 121505 195364, 121527 195295, 121884 194489, 122577 194279, 122642 194299, 123322 194086, 123666 194814, 123722 194710, 124078 194613, 124114 194635, 124461 194491, 125020 194725, 124593 195229, 124697 195603, 125075 195480, 125074 194722, 126165 194440, 126390 194752, 126496 195248, 126693 195429, 126677 195618, 126805 195495, 126762 195021, 126465 194763, 127116 194599, 127324 194481, 127405 194254, 127602 194199, 127675 193999, 127793 193964, 127896 193673, 128166 193552, 128403 193026, 128776 192924, 128981 192475, 129276 191623, 129643 191528, 130063 190633, 130212 190210, 130575 190114, 130869 189248, 131242 189143, 131351 188809, 131289 188741, 131301 188545, 131434 188605, 131809 187835, 132160 187793, 132459 186874, 132549 186846, 132580 186231, 132970 186475, 133266 185874, 133396 185452, 133772 185348, 133867 185042, 133812 184949, 133850 184801, 133952 184827, 134345 184038, 134387 184017, 134280 183270, 134309 183134, 134013 182568, 134468 182109, 134446 182062, 134579 181638, 134425 181292, 134650 180843, 134175 180218, 134633 179297, 134144 178656, 134589 177753, 134357 177434, 134478 177065, 134457 177019, 134594 176541, 134362 176270, 134577 175877, 134414 175480, 134678 174633, 134543 174282, 134551 174219, 134074 174023, 134527 173562, 134631 173107, 134505 172693, 134035 172483, 134493 172027, 134596 171555, 134449 171206, 134682 170755, 134187 170128, 134672 169197, 134172 168569, 134640 167665, 134141 167027, 134569 166177, 134564 166102, 134351 165806, 134468 165449, 134444 165394, 134563 164934, 134362 164659, 134867 163332, 135646 163086, 135707 163109, 135778 163310, 135718 163493, 135858 163702, 136156 163548, 136383 163651, 136396 163308, 137035 163054, 137190 163091, 137266 163266, 137467 163402, 137643 163798, 137828 164079, 137672 164909, 138121 164879, 138130 164514, 137984 164423, 138085 164266, 138162 163987, 138262 163918, 138350 163548, 138117 163475, 137942 163271, 138390 162955, 138609 162989, 138712 162949, 138722 163058, 138859 163281, 139115 163228, 139527 163223, 139950 163026, 140269 163023, 140264 163053, 140277 163022, 140733 163024, 141114 162848, 141589 162660, 141565 162512, 141693 162413, 142172 161725, 142240 161686, 142238 161626, 142276 161616, 142650 161074, 142786 160969, 143119 160373, 143649 159728, 143688 159715, 143999 158920, 144034 158888, 144644 157689, 144747 157285, 145292 156911, 145368 156880, 145451 156620, 145683 156111, 145758 155884, 145973 155762, 146056 155650, 146134 155212, 146344 154766, 146736 154271, 147174 153872, 147391 153316, 147528 152892, 147758 152580, 148061 152317, 148203 151882, 148503 151759, 148952 151037, 149189 150370, 149415 150048, 149616 149930, 149685 149587, 149864 149120, 150203 149018, 150570 148569, 150653 148508, 150751 148258, 151041 147664, 151147 147523, 151239 147222, 151382 146938, 151520 146900, 151598 146737, 152092 146340, 152213 145792, 152277 145711, 152425 145305, 152677 145122, 152803 144856, 153029 144581, 153303 144453, 153504 143888, 153888 143618, 154069 143597, 154054 143275, 154158 142934, 154405 142478, 154714 142006, 154837 141897, 154994 141479, 155364 141452, 155548 141002, 155749 140685, 155985 140036, 156219 139845, 156321 139627, 156471 139499, 156725 139380, 156869 139089, 156956 138794, 157276 138354, 157269 138228, 158822 138256, 158803 138559, 158509 138773, 158437 139047, 158278 139309, 158133 139373, 158081 139532, 157956 139640, 157922 139800, 157784 139854, 157812 139993, 157672 140101, 157645 140263, 157504 140316, 157522 140461, 157373 140582, 157247 140835, 157171 140869, 157155 140949, 156957 141143, 156869 141414, 156786 141517, 156502 141945, 156178 142559, 156007 142646, 155956 142828, 155832 142965, 155698 143287, 155364 143645, 155286 143787, 154975 144260, 154836 144414, 154642 144822, 154469 145036, 154411 145190, 154227 145357, 153632 146289, 153443 146448, 153380 146635, 153269 146771, 153126 147093, 152870 147551, 152540 148028, 152295 148235, 152229 148502, 152150 148593, 152019 148893, 151724 149156, 151545 149427, 151238 149657, 151139 149963, 151216 150269, 151188 150725, 151286 151087, 151798 151949, 151977 152406, 152177 152684, 151938 152577, 151804 152789, 151386 152843, 151134 153113, 150919 153512, 150751 153719, 150559 153866, 150334 154215, 150073 154721, 149949 154834, 149909 154952, 149504 155451, 149250 155908, 149015 156359, 148745 156557, 148636 156891, 148230 157457, 148004 157667, 147776 157703, 147659 157507, 147610 157133, 147496 156922, 147217 156646, 146882 156598, 146558 156703, 146394 157151, 146174 157335, 146098 157547, 145961 157677, 145503 158443, 145191 158768, 145094 158985, 144976 159057, 144861 159437, 144746 159618, 144550 159779, 144466 159933, 144261 160123, 144004 160497, 143866 160852, 143789 160851, 143846 160878, 143580 161088, 143494 161362, 143202 161830, 143146 161894, 142880 162327, 142645 162568, 142502 162797, 142739 162854, 142774 163111, 142876 163400, 142749 163505, 142888 163588, 143012 163821, 143247 164091, 143247 164253, 143372 164280, 143349 164116, 143672 163640, 143547 163286, 144051 163134, 144338 163366, 144653 163371, 144674 163450, 144958 163448, 144923 163849, 145284 163879, 145409 163551, 145462 163220, 145589 163461, 145909 163323, 145973 163342, 146541 163241, 146366 163676, 146705 163960, 147074 163864, 147176 163455, 147527 163256, 147600 163276, 147971 163180, 148189 163177, 148142 163577, 148177 163661, 148667 163821, 148655 163942, 148315 164708, 148425 164786, 148359 164681, 148889 163898, 148954 163354, 149282 163201, 149602 163177, 149640 163396, 149971 163469, 150107 163789, 150241 163916, 150565 164014, 150688 163655, 150611 163457, 150601 163290, 151114 163083, 151224 163121, 151312 163338, 151600 163388, 151825 163343, 151825 163551, 151744 163753, 151915 164093, 151905 164382, 152242 164377, 152234 164006, 152326 163941, 152501 163545, 152761 163246, 152947 163246, 153209 163339, 153973 163107, 154022 163129, 154087 163303, 153625 163307, 153670 163762, 154075 163890, 154055 164003, 154145 163930, 154331 163431, 154495 163238, 154620 163271, 155363 163094, 155512 163108, 155453 163267, 155206 163579, 155380 163919, 155474 164280, 155476 164669, 155431 164754, 155497 165049, 155388 165476, 155862 165664, 155779 164972, 155822 164669, 155801 164385, 155483 164277, 155819 164081, 156041 163483, 156057 163346, 156270 163138, 156810 162905, 157036 162950, 157345 162774, 157308 162616, 156948 161938, 156933 161798, 156734 161570, 156689 161234, 156542 160893, 156609 160765, 156534 160873, 156403 160578, 156205 160042, 156378 159924, 156484 160128, 156525 160366, 156799 160404, 157141 161038, 157137 161111, 157440 161467, 157756 162105, 158218 162805, 158271 162806, 158743 162985, 158919 163222, 159178 163134, 159330 162836, 159400 162509, 159484 162406, 159393 162364, 159315 162064, 159452 161640, 159317 161288, 159376 160977, 159489 160854, 159372 160796, 159306 160516, 159391 160106, 159280 159748, 159358 159461, 159488 159305, 159352 159223, 159283 158972, 159411 158424, 159602 157723, 159342 157017, 159577 156179, 159298 155498, 159503 154623, 159426 154422, 159284 153932, 159493 153101, 159403 152872, 159272 152385, 159491 151551, 159368 151196, 159421 150983, 159624 150739, 159415 150599, 159360 150422, 159443 150013, 159344 149652, 159395 149440, 159598 149195, 159387 149066, 159329 148881, 159405 148473, 159316 148109, 159368 147889, 159631 147890, 159542 147661, 159357 147547, 159285 147342, 159390 146926, 159495 146399, 159583 146099, 159421 145638, 159510 145515, 159782 145529, 159710 145288, 159507 145155, 159459 144969, 159562 144553, 159398 144096, 159489 143988, 159782 143999, 159700 143741, 159482 143611, 159413 143431, 159499 143020, 159370 142551, 159464 142448, 159762 142458, 159678 142196, 159457 142064, 159387 141887, 159467 141479, 159344 141007, 159439 140901, 159718 140905, 159639 140656, 159431 140525, 159360 140344, 159439 139936, 159406 139820, 159506 139707, 159797 139727, 159713 139472, 159761 139399, 159631 138962, 159700 138701, 159487 138579, 159183 138262, 161310 138300, 165974 138218, 170748 137963, 175585 137525, 180428 136898, 181209 136764, 181125 137713, 181203 138621, 181160 138921, 181173 139792, 181227 140165, 181128 140875, 181127 141502, 181372 141424, 181550 141273, 181579 140839, 181439 140495, 181455 140273, 181386 139854, 181458 139715, 181195 139399, 181407 138953, 181439 138728, 181314 138274, 181332 138198, 181214 137843, 181386 137408, 181415 137012, 181279 136751, 185219 136077, 186357 135831, 186193 136213, 186214 136472, 186370 137063, 186097 137658, 186215 138023, 186369 138599, 186248 138789, 186139 139229, 186210 139575, 185932 139933, 185942 140917, 186255 141114, 185947 141479, 185977 142434, 186325 142645, 185876 142945, 185797 143177, 185968 143518, 186406 143598, 186679 143711, 186878 143719, 187223 143562, 187209 143252, 187255 143165, 187167 142862, 186746 142528, 186854 142168, 187134 141800, 187160 141685, 187129 141502, 186830 140955, 186793 140767, 186845 140625, 187119 140249, 187144 140136, 187111 139985, 186797 139413, 186799 138944, 186750 138651, 186761 138172, 186863 137846, 186800 137412, 186710 137112, 186717 136607, 186848 136299, 186660 135765, 189894 135066, 194392 133870, 198657 132499, 201412 131440, 201451 131614, 201484 131541, 201469 131417, 202618 130977, 205127 129826, 205173 130479, 205126 131289, 205178 131708, 205158 131280, 205206 130492, 205157 129812, 206243 129315, 209488 127541, 212324 125679, 214742 123750, 216717 121794, 217547 120809, 218272 119823, 218893 118840, 219414 117863, 219414 83293, 219920 83818, 220188 83799, 220136 83469, 220008 83405, 220138 83209, 220266 83335, 220548 83294, 220522 82885, 220601 82855, 220568 82536, 220674 82339, 220674 81843, 220766 81259, 220885 80785, 220977 80621, 220969 80532, 221533 80172, 221578 79395, 221753 78663, 222157 78320, 222262 78074, 222494 77800, 222527 77676, 222756 77313, 222839 77618, 222890 78396, 223018 79157, 223040 79544, 223166 79577, 222757 79792, 222589 79812, 222631 79973, 222756 79963, 224897 80276, 224891 82016, 224702 82266, 224697 91951, 224889 92293, 224374 92482, 224375 92680, 224313 92870, 224313 93068, 224373 93258, 224374 93456, 224300 93645, 224274 94231, 224355 94421, 224374 95006, 224286 95196, 224259 95782, 224321 95971, 224322 96169, 224380 96359, 224381 96557, 224318 96746, 224318 96944, 224248 97134, 224281 97720, 224362 97909, 224331 98495, 224245 98685, 224269 99270, 224359 99460, 224341 100046, 224235 100235, 224246 100821, 224276 101011, 224305 101596, 224354 101786, 224350 102371, 224279 102561, 224264 103147, 224343 103337, 224387 103922, 224308 104112, 224290 104697, 224311 104887, 224330 105473, 224348 105662, 224346 106248, 224270 106438, 224259 107023, 224328 107213, 224329 107411, 224387 107600, 224388 107798, 224319 107988, 224278 108574, 224323 108764, 224336 109349, 224353 109539, 224362 110125, 224284 110314, 224294 110900, 224337 111089, 224302 111477, 224317 112063, 224384 112252, 224385 112450, 224328 112640, 224329 112838, 224263 113028, 224279 113613, 224363 113803, 224362 114389, 224267 114578, 224268 114776, 224360 114966, 224361 115164, 224305 115353, 224268 115939, 224347 116129, 224381 116714, 224317 116904, 224318 117102, 224257 117292, 224291 117877, 224374 118067, 224350 118653, 224255 118842, 224269 119428, 224356 119618, 224344 120203, 224254 120393, 224263 120978, 224349 121168, 224348 121754, 224263 121944, 224226 122529, 224277 122719, 224286 123304, 224343 123494, 224352 124080, 224283 124269, 224264 124855, 224330 125045, 224331 125243, 224387 125432, 224388 125630, 224314 125820, 224284 126405, 224317 126595, 224337 127181, 224355 127370, 224352 127956, 224290 128146, 224259 128731, 224315 128921, 224316 129119, 224389 129309, 224389 129507, 224325 129696, 224277 130084, 224327 130543, 224365 131832, 224307 132022, 224279 132608, 224330 132798, 224310 133771, 224386 133961, 224344 134546, 224263 134736, 224273 135321, 224357 135511, 224351 136097, 224162 136285, 224170 136484, 223690 136646, 223677 137033, 222752 137306, 222753 137695, 222378 137797, 222381 138123, 222459 138167, 222501 138666, 222383 138698, 222007 138337, 222005 138676, 221632 138779, 221619 139543, 221259 139656, 221260 139861, 221416 140004, 221418 140330, 221042 140105, 220883 140149, 220882 140532, 220510 140636, 220517 141024, 220144 141127, 220128 141898, 219763 141991, 219750 142390, 219379 142496, 219375 142886, 218996 142986, 219000 143371, 218632 143478, 218638 143862, 218265 143966, 218253 144350, 218162 144384, 218206 144710, 217879 144846, 217882 145231, 217506 145334, 217517 145720, 217146 145825, 217133 146210, 216766 146315, 216764 147092, 216390 147188, 216399 147578, 216029 147682, 216022 147975, 216060 148062, 215820 148315, 215638 148403, 215631 148565, 215251 148663, 215280 149433, 214910 149523, 214902 149844, 215267 150022, 214894 150125, 214829 149949, 214525 150014, 214508 150420, 214353 150468, 214581 150847, 214143 150671, 214146 150905, 213775 151011, 213789 151393, 213412 151492, 213388 152277, 213012 152385, 213027 152604, 213214 152718, 213161 153366, 212934 153182, 212999 153112, 212944 152792, 212652 152863, 212675 153249, 212297 153349, 212287 153744, 211913 153846, 211896 154238, 211522 154341, 211536 154720, 211182 154826, 211189 155210, 210817 155310, 210813 155433, 210943 155667, 210953 155830, 210793 155880, 210773 156091, 210402 156196, 210382 156588, 210011 156692, 210013 157468, 209642 157565, 209664 157939, 209709 157991, 209649 157959, 209286 158054, 209268 158448, 208888 158547, 208866 158939, 208497 159050, 208521 159429, 208146 159529, 208171 159910, 207794 160011, 207767 160621, 207930 160757, 207954 161109, 207614 160843, 207378 160904, 207404 161226, 207571 161323, 207411 161327, 207383 161294, 207023 161382, 207057 161766, 206682 161867, 206657 162260, 206290 162369, 206260 162760, 205886 162863, 205915 163243, 205541 163347, 205574 163728, 205537 164111, 205169 164220, 205154 164539, 205414 164426, 205703 164468, 205732 164833, 205158 164751, 205033 164651, 204770 164720, 204795 165095, 204512 165182, 204584 165308, 204436 165272, 204453 165576, 204081 165678, 204059 166078, 203685 166180, 203655 166580, 203679 166810, 203940 167012, 203703 167077, 203574 166989, 203313 167061, 203344 167431, 203043 167523, 203152 167686, 202956 167869, 202950 167936, 202576 168039, 202520 168442, 202565 168803, 202187 168719, 202204 168913, 201830 169016, 201868 169392, 201495 169494, 201429 170288, 201058 170393, 201021 170788, 200712 170876, 200875 171089, 200644 170958, 200612 171289, 200239 171393, 200319 172145, 199946 172245, 199905 172642, 199531 172744, 199512 173004, 199646 173106, 199728 173470, 199291 173203, 199122 173247, 199164 173623, 198825 173749, 198984 174062, 198985 174449, 198847 174544, 198443 174414, 198421 174601, 198047 174704, 198002 175107, 198049 175476, 197670 175586, 197722 175954, 197352 176052, 197311 176456, 196940 176558, 196894 176957, 196518 177059, 196567 177435, 196190 177535, 196243 177915, 196199 178309, 195823 178409, 195783 178812, 195408 178914, 195457 179288, 195082 179389, 195137 179765, 194761 179866, 194720 180268, 194347 180370, 194297 180774, 194349 181142, 194257 181173, 194297 181447, 194021 181522, 194031 181618, 193663 181718, 193611 182120, 193234 182219, 193190 182624, 192819 182730, 192867 183096, 192497 183200, 192557 183573, 192185 183676, 192083 184478, 191710 184582, 191658 184983, 191286 185088, 191230 185491, 191288 185858, 190918 185953, 190974 186296, 191059 186314, 191116 186460, 190971 186419, 190903 186356, 190606 186433, 190549 186836, 190258 186921, 190299 187297, 190530 187593, 189800 187434, 189749 187448, 189809 187815, 189613 187873, 189642 188044, 189874 188640, 189471 188525, 189259 188357, 189128 188393, 189072 188794, 188692 188893, 188648 189257, 188785 189263, 188860 189435, 188657 189394, 188704 189670, 188332 189774, 188393 190139, 188020 190242, 187964 190646, 187596 190749, 187527 191158, 187597 191521, 187229 191623, 187293 191992, 186924 192092, 186862 192499, 186486 192601, 186424 193005, 186055 193112, 186121 193477, 185748 193580, 185821 193947, 185450 194051, 185386 194454, 185009 194553, 184943 194968, 185021 195330, 184650 195435, 184721 195797, 184537 195854, 184682 196226, 184321 196119, 184287 196308, 183909 196405, 183869 196697, 184047 196765, 184088 196958, 183889 197012, 183921 197182, 183546 197289, 183623 197647, 183256 197743, 183185 198155, 182813 198251, 182671 199072, 182305 199172, 182228 199583, 181845 199678, 181934 200052, 181562 200157, 181644 200520, 181260 200617, 181122 201435, 180750 201544, 180789 201697, 181025 201857, 181067 202038, 180880 202089, 180652 201958, 180460 202008, 180544 202370, 180176 202475, 180095 202878, 179729 202981, 179633 203401, 179730 203753, 178989 203963, 179076 204324, 178998 204731, 178755 204804, 178703 204915, 178611 204941, 178547 205244, 178380 205295, 178682 205634, 178217 205517, 178263 205710, 177883 205810, 177982 206175, 177598 206272, 177445 207094, 177074 207203, 177165 207560, 176996 207612, 177046 207804, 176849 207858, 176889 208025, 176520 208123, 176430 208532, 176068 208625, 175976 209051, 175428 209973, 175072 210060, 174998 210370, 175169 210440, 175123 210657, 174925 210711, 174880 210901, 174505 211003, 174235 211454, 173964 211932, 173784 212750, 173418 212850, 173344 213184, 173402 213250, 173419 213632, 173152 214093, 173044 213735, 173270 213286, 172945 213370, 172852 213788, 172323 214698, 155836 214698, 155808 214583, 155857 214296, 155679 214476, 155661 214698, 154486 214698, 154447 214569, 154466 214349, 154309 214698, 150462 214698, 150557 214639, 150571 214234, 150345 214296, 150390 214518, 150365 214698, 148599 214698, 148466 214404, 147917 214662, 147923 214698, 146434 214698, 146753 213964, 146735 213889, 146374 213526, 146641 213980, 146244 214698, 145085 214698, 145088 214639, 144986 214698, 127633 214698, 127633 200302, 53651 200302, 53784 199534, 54142 199451, 54217 199016, 54592 198913, 54515 198547, 54895 198447, 54810 198079, 55181 197977, 55254 197572, 55406 197525, 55447 197288, 55676 197166, 55704 197056, 55627 196700, 55995 196588, 55928 196239, 56281 196134, 56360 195726, 56721 195634, 56806 195213, 57169 195121, 57093 194741, 57132 194726, 57075 194683, 57057 194720, 56709 194825, 55928 194677, 55640 193971, 55196 193707, 55164 194005, 55069 194128, 55229 194351, 55739 194638, 55157 194768, 55124 194873, 54408 195069, 54470 194680, 54416 194640, 54096 194727, 53981 194426, 54036 194311, 53971 194042, 53732 193720, 53734 193331, 53823 193001, 53809 192535, 53737 192285, 53790 191446, 53685 190724, 53733 190342, 53849 189981, 53706 189523, 53742 189453, 53658 189177, 53592 189107, 53643 189014, 53700 188689, 53806 188417, 53783 187794, 53594 188203, 53584 188721, 53521 189084, 53600 189779, 53565 190276, 53500 190585, 53565 191051, 53675 191409, 53499 192105, 53528 192612, 53654 192966, 53637 193327, 53485 193787, 53346 194046, 53566 194357, 53564 194440, 53021 194647, 52283 194890, 52309 193865, 52247 193430, 52104 193390, 52219 193142, 52181 192594, 52204 192030, 52106 191839, 52182 191518, 52155 190656, 52007 190338, 52077 189574, 52041 188755, 51827 188040, 51893 187815, 51945 187232, 51866 186478, 51914 186278, 51851 186085, 51960 185677, 51711 185181, 51635 184991, 51545 184955, 51124 185544, 51028 185921, 51033 186424, 51342 186623, 51029 186976, 51011 187428, 51026 188012, 51409 188155, 51041 188494, 51040 189264, 51064 189412, 50959 190121, 51076 190571, 51032 190968, 51097 191449, 51044 191735, 51054 192520, 51116 192887, 51183 193033, 51130 193269, 51293 193613, 50941 193930, 50907 194106, 51296 194388, 51436 194716, 50336 195029, 49906 194767, 49915 194635, 49759 194640, 49209 194959, 49252 195038, 49164 195062, 49044 194946, 48408 194737, 48444 194781, 48385 195162, 48035 195258, 47713 194981, 47679 194991, 47701 195373, 47760 195446, 47667 195443, 47317 195245, 47191 195124, 46967 195180, 46855 195082, 46612 195148, 46418 194948, 45896 195087, 45823 195046, 45509 195117, 45110 194919, 44344 195124, 43916 194859, 43177 195009, 42985 194896, 42879 194983, 42444 195101, 42280 194901, 41351 195168, 41250 195087, 40961 195437, 40494 195022, 40259 195000, 39805 194781, 39909 195007, 39500 195117, 39322 194955, 38729 195106, 38515 194975, 38341 195063, 38351 195215, 38222 195257, 38246 195495, 37995 195433, 37994 195679, 37649 195800, 37613 196196, 37240 196298, 37205 196691, 36989 196758, 37213 197050, 36859 197019, 36873 197175, 36501 197279, 36718 197608, 36867 197940, 36526 197815, 36489 198038, 36134 198134, 36096 198546, 35791 198637, 35989 198829, 35734 198708, 35755 199026, 35390 199134, 35442 199555, 35409 199516, 35044 199613, 35028 199922, 35249 200071, 35013 200138, 34981 200302, 20742 200302, 20744 197971, 20553 197628, 20546 197240, 20759 197051, 20949 196801, 20930 196420, 20932 195645, 20744 195302, 20737 195112, 20857 194911, 21062 194748, 22089 194491, 22169 194439, 22687 194173, 23062 194242, 23232 194116, 23298 193921, 23060 193221, 22685 193510, 22590 193316, 22602 192927, 22595 192144, 22536 190992, 22569 190593, 22558 189427, 22518 189054, 22529 188263, 22574 187778, 22532 186712, 22494 186341, 22491 185568, 22510 184772, 22486 184403, 22466 183309, 22549 182850, 22596 182074, 22575 181298, 22570 179360, 22545 178974, 22551 177819, 22593 177801, 22537 177425, 22684 177294, 23019 177290, 22990 176949, 23224 176670, 23224 176497, 23359 176384, 23363 176072, 23187 175868, 23431 175976, 23712 175883, 23685 175596, 23595 175407, 24103 175411, 24113 175028, 24175 174928, 24543 174969, 24568 174191, 24498 173435, 24575 173026, 24557 172597, 24620 172167, 24627 171073, 24581 170311, 24667 169208, 24612 168364, 24689 167180, 24689 166553, 24711 165023, 24650 164090, 24954 163619, 24698 163300, 25193 163063, 25633 163045, 25657 163241, 25767 163121, 26023 163291, 26250 163264, 26539 163464, 26455 163207, 26690 163062, 27138 162950, 27520 163186, 27771 163107, 27896 163124, 28216 163058, 28637 162871, 29392 162872, 29764 162750, 29954 163024, 30027 163271, 29648 163368, 29388 163566, 29719 163864, 29748 163953, 29847 163930, 30131 163999, 30306 163504, 30271 163324, 30372 163145, 30637 162954, 30886 163056, 31159 163081, 31198 163424, 31167 163465, 31250 163740, 31454 163604, 31888 163783, 32056 163304, 31975 163178, 31916 163200, 31613 163151, 31409 163012, 31631 162856, 31918 162783, 32022 162505, 32083 162137, 32399 161966, 32450 161676, 32717 161625, 32832 161459, 32736 161100, 33092 161157, 33190 161070, 33206 160969, 33096 160572, 33555 160537, 33485 160236, 33424 160134, 33469 160073, 33905 160057, 33753 159656, 33812 159557, 33918 159612, 34237 159580, 34262 159188, 34336 159109, 34298 158792, 34600 158834, 34703 158718, 34623 158254, 34656 158212, 35091 158198, 35028 157720, 35298 157549, 35431 157288, 35542 157228, 35743 156938, 35873 156488, 36210 156355, 36178 155889, 36630 155855, 36633 155765, 36513 155418, 36978 155373, 36798 154945, 36831 154900, 37301 154898, 37220 154441, 37409 154144, 37703 153922, 37776 153663, 38009 153472, 38029 153147, 38382 153034, 38406 152635, 38799 152550, 38815 152117, 39196 152020, 39165 151652, 39548 151556, 39487 151186, 39856 151082, 39842 151010, 39941 150739, 40108 150549, 39917 150261, 40208 150437, 40377 150241, 40393 150083, 40199 149760, 40585 149785, 40728 149752, 40695 149613, 40505 149288, 40890 149314, 41032 149281, 41006 148856, 41390 148767, 41455 148366, 41522 148223, 41288 147910, 41252 147909, 41279 147862, 41295 147898, 41688 147964, 41811 147891, 41812 147756, 41589 147451, 41507 147451, 41612 147245, 41604 147425, 41987 147486, 42320 147229, 42254 147156, 42326 147222, 42506 146937, 42535 146497, 42838 146326, 42849 146006, 43283 145940, 43054 145486, 43539 145451, 43457 145118, 43264 145227, 43048 145457, 42962 145398, 42680 145550, 42693 145188, 42769 144734, 42677 144417, 42524 144312, 42273 144244, 42204 144648, 41881 144798, 41865 145028, 41781 145170, 41734 145588, 41604 145624, 41264 145594, 41383 146102, 41220 146127, 40890 146070, 40957 145758, 41232 145563, 41396 145157, 41265 144417, 41259 144031, 41189 143894, 41270 143611, 41707 143270, 41753 143147, 41503 142801, 41481 142535, 41423 142436, 41372 142148, 41293 141961, 41130 141740, 41052 141406, 40816 141051, 40755 140524, 40923 140221, 41306 140198, 41678 140428, 41920 140749, 41974 140970, 42118 141267, 42297 141421, 42410 141650, 42540 141742, 42588 141899, 42733 142077, 42901 142524, 43088 142581, 43276 142419, 43318 142692, 43565 142805, 43645 143089, 43548 143115, 43286 143088, 43200 142862, 43047 143017, 43091 143141, 43376 143451, 43414 143592, 43194 143784, 43277 144085, 43378 144226, 43539 144633, 43582 144598, 43887 144674, 44002 144544, 44035 144434, 44026 144089, 44438 144027, 44420 143535, 44644 143346, 44711 143070, 44971 142901, 44968 142627, 45029 142540, 45428 142297, 46089 142293, 45516 141839, 45500 141670, 45751 141497, 45670 141272, 45665 141137, 45773 141013, 46200 141131, 46088 140768, 45780 140628, 45731 140479, 45515 140168, 45091 140033, 44753 140032, 45077 140607, 45058 140711, 44746 140816, 44439 140988, 44447 141219, 44337 141325, 44296 141479, 43892 141371, 44138 140679, 44330 140420, 44588 139939, 44694 139684, 44801 139571, 45065 139143, 45481 138553, 46203 138369, 46174 138033, 46015 137687, 45721 137570, 45651 137400, 45687 137293, 45607 136830, 45758 136630, 46151 136821, 46043 136518, 46111 136493, 45929 136161, 46098 135727, 45786 135563, 45678 135454, 45620 135309, 46175 135318, 46146 135527, 46249 135379, 46260 135193, 46144 134939, 46088 134941, 45909 134615, 46072 134203, 46116 134194, 46256 133609, 46109 133397, 46206 133163, 46060 133409, 45872 133204, 45851 133081, 45993 132655, 45970 132557, 46118 132296, 46329 132443, 46280 131801, 46313 131408, 46279 131025, 46185 130664, 46352 130231, 46361 129727, 46325 129462, 46163 129120, 46366 128676, 46354 128292, 46426 128021, 46394 127892, 46128 127891, 46238 128324, 46139 128703, 45825 128677, 45691 128726, 45639 128875, 45368 129174, 45201 129207, 45197 129383, 45015 129656, 44744 130123, 44516 130124, 44637 130313, 44552 130526, 44338 130731, 44266 130722, 44272 130801, 44081 131022, 43977 131269, 44010 131373, 43660 131488, 43780 131865, 43389 131959, 43346 132264, 43057 132455, 43001 132886, 42811 132998, 42630 132990, 42652 133183, 42553 133395, 42350 133593, 42201 133516, 42273 133674, 42097 133892, 42070 134117, 42112 134290, 41934 134331, 41594 134306, 41795 134581, 41844 134768, 41648 134814, 41363 134806, 41455 135061, 41430 135212, 41286 135284, 41044 135301, 41094 135548, 40922 135983, 40951 136094, 40596 136206, 40643 136554, 40284 136665, 40192 136817, 39909 136765, 40025 137004, 39907 137111, 39954 137411, 40303 138091, 40431 138443, 40521 139194, 40548 139239, 40521 139370, 40374 139458, 40131 139385, 39856 139474, 39678 139425, 39674 139039, 39459 138930, 39338 139012, 39194 139557, 39496 139909, 39046 139841, 38913 139883, 38918 140021, 39153 140362, 38737 140298, 38610 140357, 38430 140542, 38740 140626, 38845 140817, 38835 140976, 38684 141034, 38549 140897, 38386 140579, 38170 140801, 38164 141003, 38440 141316, 38455 141466, 38305 141504, 37913 141464, 38131 141787, 38161 141948, 37996 141984, 37574 141777, 37251 141717, 37439 141977, 37812 142263, 37623 142577, 37478 142353, 37260 142252, 36934 142187, 37128 142450, 37189 142820, 37229 142849, 37399 143344, 37209 143381, 36991 143262, 36837 143099, 36582 143099, 36657 143354, 37036 143639, 37079 143814, 36893 143843, 36471 143622, 36110 143543, 36302 143839, 36712 144115, 36709 144305, 36528 144350, 36359 144210, 35906 143947, 35709 143708, 35453 143802, 35420 144120, 35041 144221, 35079 144595, 34707 144699, 34704 145134, 34616 145264, 34361 145262, 34397 145524, 34243 145745, 33932 145728, 34084 145997, 33916 146228, 33600 146204, 33721 146485, 33626 146582, 33546 146943, 33213 147082, 33225 147396, 33103 147585, 32812 147587, 32875 147880, 32791 147995, 32683 148324, 32391 148479, 32344 148776, 32263 148744, 32306 148811, 32023 148935, 32001 149191, 31873 149187, 31925 149303, 31684 149423, 31667 149831, 31599 149887, 31272 149912, 31338 150239, 31302 150340, 31218 150409, 30875 150404, 31000 150719, 30962 150819, 30879 150881, 30531 150882, 30649 151203, 30513 151452, 30221 151396, 30293 151688, 30180 151778, 30125 152142, 29770 152255, 29855 152676, 29431 152741, 29485 153152, 29063 153215, 29095 153652, 28668 153710, 28718 154148, 28635 154233, 28302 154218, 28397 154534, 28283 154694, 27951 154702, 28007 155029, 27914 155256, 27651 155237, 27720 155494, 27570 155576, 27582 155984, 27165 156054, 27252 156486, 26809 156539, 26902 156882, 26886 156974, 26801 157037, 26438 157017, 26530 157372, 26413 157583, 26079 157533, 26157 157862, 26083 157931, 26092 158312, 25724 158418, 25701 158778, 25336 158889, 25372 159315, 24939 159372, 25022 159723, 25010 159817, 24923 159913, 24604 159896, 24689 160202, 24625 160290, 24561 160566, 24392 160497, 24501 160642, 24249 160776, 24184 160994, 23963 160947, 23923 161187, 23823 161230, 23864 161656, 23453 161727, 23512 162166, 23426 162246, 23083 162193, 23104 161848, 23396 161683, 23395 161293, 23769 161189, 23760 160791, 23981 160574, 24148 160316, 24213 159984, 24501 159818, 24609 159507, 24906 159347, 24911 158979, 24868 158922, 24935 158950, 25263 158834, 25271 158492, 25241 158441, 25300 158448, 25582 158314, 25624 157967, 25941 157822, 26022 157487, 26254 157272, 26417 157015, 26533 156711, 26762 156505, 26908 156238, 27118 156017, 27235 155628, 27445 155475, 27498 155117, 27821 154979, 27860 154637, 28074 154423, 28170 154208, 28436 153927, 28754 153371, 28990 153161, 28971 152783, 29302 152651, 29356 152327, 29665 152173, 29720 151806, 29922 151562, 30246 151043, 30458 150832, 30606 150574, 30799 150346, 30883 150000, 31181 149834, 31203 149443, 31522 149304, 31523 148950, 31866 148829, 31899 148492, 32132 148270, 32304 147997, 32428 147678, 32688 147479, 32744 147141, 32716 147076, 32782 147087, 33060 146949, 33104 146655, 33049 146539, 33180 146542, 33402 146421, 33445 146102, 33515 146092, 33715 145931, 33803 145633, 34062 145229, 34195 145115, 34298 144806, 34610 144629, 34523 144459, 34768 144387, 34974 144464, 34925 144146, 34959 143859, 35017 143862, 34971 143816, 35190 143598, 35384 143163, 35590 143080, 35676 142848, 35922 142563, 35952 142385, 36088 142201, 36247 142093, 36270 141910, 36364 141813, 36464 141527, 36760 141288, 36797 140990, 36741 140867, 36881 140870, 37144 140783, 37124 140513, 37068 140402, 37196 140409, 37462 140312, 37442 139943, 37791 139822, 37916 139485, 37949 139124, 37808 138992, 37991 139062, 38306 138967, 38125 138692, 38288 138625, 38662 138798, 38602 138489, 38631 138267, 38707 138224, 38687 138147, 38898 137983, 38953 137685, 38938 137562, 39067 137477, 39368 137515, 39389 137178, 39636 136926, 39665 136715, 39639 136603, 39759 136596, 40037 136182, 40115 135817, 40083 135759, 40139 135790, 40485 135689, 40495 135325, 40313 135151, 40556 135225, 40758 135091, 40804 134852, 40653 134709, 40854 134774, 41039 134616, 41134 134375, 41116 134326, 41160 134344, 41448 134187, 41751 133540, 41896 133390, 42097 132930, 42435 132467, 42397 132340, 42539 132343, 42669 132180, 42742 131995, 42616 131835, 42823 131864, 42973 131724, 43019 131387, 43281 131168, 43304 131066, 43568 130606, 43388 130428, 43636 130481, 43801 130347, 43795 130156, 43605 129929, 43904 129974, 44094 129892, 44147 129672, 44107 129536, 44231 129574, 44446 129400, 44464 128917, 44736 128646, 45001 128164, 45079 128181, 45337 127936, 45449 127764, 45583 127340, 45514 127020, 45601 126559, 45710 126404, 45990 125678, 45845 125361, 46150 125435, 46524 125322, 46735 125318, 46891 125248, 46994 125088, 47200 124959, 47051 124833, 47012 124622, 47332 123974, 47551 123712, 47636 124064, 47612 124395, 47862 124128, 47948 123978, 47899 123704, 47588 123688, 47848 123507, 47809 123241, 48226 122573, 48401 122692, 48180 123139, 48348 123290, 48552 123258, 48582 123030, 49060 122106, 48949 121956, 48769 121814, 48842 121560, 49093 121400, 49357 121705, 49400 121685, 49526 121284, 49597 121201, 49511 121126, 49365 120875, 49462 120651, 49683 120493, 49754 120770, 49897 120977, 50075 120840, 50111 120672, 50092 120298, 50293 119758, 50309 119455, 50552 118804, 50523 118620, 50712 118324, 50902 117773, 51108 117446, 51379 117246, 51510 117575, 51517 117961, 51449 118367, 51490 118548, 51632 118705, 51703 119073, 51913 119241, 52174 119720, 52266 119918, 52518 120220, 52747 120204, 52902 120084, 53122 120235, 52899 120400, 52921 120677, 52607 121083, 52419 120554, 52090 120510, 52030 120145, 51884 120043, 51747 120083, 51541 120042, 51332 120133, 51295 120347, 51204 120546, 51014 120678, 50859 120682, 50848 120857, 50589 121474, 50352 121769, 50063 122035, 49944 122268, 49676 122729, 49629 122904, 49445 123056, 49316 123078, 49294 123221, 49148 123421, 48978 123837, 48379 124456, 48045 125115, 48247 125384, 48522 125372, 48465 125595, 48696 125636, 48722 125699, 49504 125424, 49740 125426, 49729 125598, 49922 125637, 49973 125734, 50683 125475, 51119 125379, 51328 125378, 51370 125669, 51685 125623, 51716 125654, 52431 125418, 52730 125382, 52774 125564, 52916 125456, 53103 125610, 53852 125381, 54198 125365, 54361 125677, 55145 125393, 55431 125345, 55889 125188, 56038 125250, 56065 125485, 56292 125407, 56410 125441, 56650 125267, 56842 124761, 57158 124609, 57469 123748, 57586 123662, 57714 123400, 57990 123218, 58250 122759, 58316 122687, 58422 122362, 58563 122232, 58646 122048, 58806 121989, 59114 121369, 59204 121281, 59334 120967, 59561 120795, 59610 120702, 59690 120667, 60008 119990, 60333 119818, 60553 119361, 60834 118896, 60938 118614, 61094 118437, 61163 118287, 61281 118270, 61465 118078, 61716 117491, 61734 117122, 61801 117080, 61683 116724, 61502 116386, 61243 115807, 61128 115713, 61060 115437, 61066 115267, 61160 115194, 61444 115178, 61523 114830, 61592 114694, 61497 114342, 61378 113623, 61571 113222, 61856 113438, 62189 113437, 62461 113595, 62773 114101, 63065 114408, 63100 114495, 63338 114735, 63280 114348, 63292 113958, 63198 113596, 63208 113205, 63248 113111, 63610 113484, 63790 113605, 63881 113797, 63865 114139, 63828 114198, 63879 114212, 64146 113724, 64300 113404, 64437 113257, 64451 112935, 64662 112807, 64460 112758, 64399 112491, 64248 112144, 64176 111813, 64013 111417, 64362 110612, 64355 110177, 64265 109919, 64286 109761, 64205 109229, 63927 108435, 64121 108622, 64333 108918, 64580 109126, 64683 109313, 64955 109626, 65204 110078, 65439 110315, 65767 110778, 65887 110856, 66091 110595, 66354 110516, 66426 110428, 66971 109142, 67304 108987, 67666 108123, 67868 107716, 68206 107630, 68557 106719, 68909 106627, 69127 106156, 69469 105309, 69830 105183, 70092 104527, 70164 104281, 70381 103893, 70736 103755, 71007 102927, 71354 102671, 71631 102297, 71957 101514, 72324 101447, 72552 100953, 72626 100668, 72538 100569, 72817 100144, 73198 100022, 73597 99116, 73792 98745, 74099 98656, 74284 98158, 74484 97723, 74863 97584, 75067 97162, 75204 96738, 75442 96435, 75710 96262, 75960 95755, 76329 94963, 76621 94885, 77005 93991, 77388 93827, 77781 93010, 77992 92872, 78050 92754, 78153 92712, 78589 91933, 78720 91630, 78839 91477, 78859 91160, 79028 91037, 78871 90928, 78732 90731, 78677 90577, 78338 90063, 78274 89693, 78140 89295, 78212 89205, 78439 89084, 78466 88866, 78608 88688, 78536 88071, 78526 87750, 78617 87662, 78655 87448, 79177 87641, 79385 87768, 79521 87602, 79581 87785, 79745 87824, 79979 87811, 80102 87329, 80218 87223, 80250 87099, 80362 87095, 80620 87347, 80928 87386, 81115 87683, 81346 87440, 81668 87230, 81710 87111, 81678 86822, 81393 86505, 81274 86145, 81099 85911, 80908 85434, 80970 85125, 81171 84913, 81591 84843, 81481 84518, 81505 84440, 81349 84159, 81323 83774, 81224 83555, 81373 83369, 81378 83311, 81434 83307, 82465 84233, 82768 84665, 82979 84878, 83214 84851, 83185 84481, 83518 84355, 83507 83999, 83839 83873, 83798 83497, 84160 83392, 84115 83014, 84272 82955, 84410 82842, 84433 82505, 84806 82375, 84729 81997, 84752 81962, 85137 81900, 85085 81512, 85355 81348, 85364 81048, 85448 80712, 85726 80466, 85886 80135, 86019 79713, 86265 79534, 86409 79231, 86689 78877, 86768 78830, 86771 78741, 86890 78545, 86992 78247, 87334 77847, 87457 77806, 87441 77677, 87514 77495, 87660 77360, 87829 77021, 87985 76863, 88001 76795, 88069 76754, 88623 75779, 88818 75637, 88927 75371, 89228 75239, 89363 74974, 89285 74879, 89251 74910, 88898 74902, 88554 74696, 88473 74597, 88369 74625, 88086 74603, 87944 74666, 87694 74578, 87315 74644, 87168 74800, 86954 74854, 86860 74954, 86226 75230, 85738 75348, 85795 75735, 85515 75736, 85002 75861, 84746 76025, 84658 76311, 84429 76344, 83935 76519, 83754 76737, 83754 76822, 83658 76781, 83200 76830, 83112 76977, 83115 77116, 82793 77233, 82233 77373, 81764 77567, 81492 77647, 81129 77849, 81018 77870, 80828 78024, 80817 78072, 80482 78183, 80526 78479, 80461 78693, 80221 78693, 80333 78912, 80198 79023, 80132 79155, 79888 79153, 79959 79385, 79856 79479, 79868 79835, 79501 79926, 79601 80252, 79713 80425, 79614 80642, 79630 80715, 79849 80983, 79881 81240, 79640 81402, 79591 81388, 79777 81867, 79700 81868, 79284 81638, 79048 81744, 79016 82012, 79380 82280, 79298 82308, 78969 82216, 78734 82518, 78978 82764, 78639 82679, 78453 82990, 78596 83232, 78304 83093, 78065 83218, 78022 83487, 78174 83640, 77974 83553, 77737 83690, 77790 83937, 78029 84238, 77659 84124, 77416 84170, 77488 84407, 77662 84688, 77336 84639, 77098 84654, 77290 85135, 77005 85085, 76756 85122, 76815 85368, 77156 85679, 77180 85762, 77092 85776, 76679 85565, 76428 85621, 76485 85864, 76822 86162, 76841 86236, 76764 86247, 76361 86118, 76114 86127, 76175 86360, 76422 86601, 76479 86707, 76436 86716, 75849 86452, 75607 86288, 75351 86318, 75420 86713, 75271 86695, 74943 86742, 75027 87150, 74616 87225, 74722 87647, 74267 87692, 74382 88122, 73941 88179, 74052 88606, 73966 88648, 73629 88681, 73733 89000, 73422 89482, 73091 89649, 73000 89976, 72898 90081, 72741 90505, 72573 90809, 72488 90785, 72483 90893, 72217 91040, 72113 91382, 71898 91897, 71810 91966, 71541 92034, 71236 92785, 71002 93089, 70815 93064, 70735 93310, 70609 93419, 70534 93753, 70455 93871, 70048 94745, 69688 94832, 69606 95170, 69377 95717, 69238 95848, 69014 95841, 68757 96566, 68628 96701, 68391 97113, 68112 97263, 68024 97542, 67922 97661, 67789 97994, 67543 98530, 67442 98615, 67182 98652, 67103 98958, 67012 99070, 66845 99506, 66645 99795, 66561 99772, 66526 99891, 66290 100061, 66188 100372, 65929 100903, 65793 101098, 65624 101113, 65568 101316, 65395 101455, 65280 101783, 65037 102340, 64885 102508, 64681 102470, 64627 102738, 64482 102852, 64369 103196, 64108 103683, 63749 103812, 63422 104716, 63297 104824, 63023 104777, 62908 105147, 62852 105207, 62722 105705, 62630 105998, 62894 106702, 63153 106862, 63219 107001, 63235 107280, 62987 107287, 62854 107100, 62865 106744, 62561 107180, 62508 107523, 62020 107442, 61972 107730, 61728 108413, 61608 108604, 61740 108724, 61768 108949, 61516 109505, 61379 109632, 61269 109050, 60951 109294, 60873 109581, 60942 109889, 61018 109930, 60938 109999, 60790 110379, 60585 110863, 60535 110905, 60473 110854, 60536 110780, 60665 110413, 60487 110190, 60232 110275, 60113 110803, 59939 111236, 59695 111343, 59551 111309, 59516 111504, 59345 111690, 59201 112158, 58978 112343, 58766 112023, 58674 112009, 58653 112127, 58406 112277, 58212 112613, 58152 112560, 58157 112651, 57871 112813, 57759 113148, 57671 113232, 57494 113681, 57315 114009, 57114 113773, 56985 114136, 56928 114153, 56840 114563, 56597 115057, 56490 115219, 56382 115076, 56599 114316, 56925 114149, 57218 113297, 57425 112785, 57539 112629, 57704 112544, 57842 112350, 57972 112277, 58099 111784, 58333 111438, 58675 111287, 58757 110937, 58969 110491, 58976 110351, 59328 110217, 59541 109851, 59711 109411, 59969 109115, 60184 108608, 60437 108439, 60779 107669, 60765 107536, 60870 107565, 61137 107430, 61237 107156, 61469 106704, 61488 106555, 61669 106414, 61809 106362, 61884 106204, 62048 106030, 62168 105738, 62416 105282, 62420 105217, 62726 105004, 62866 104771, 62757 104641, 62751 104132, 63120 104224, 63333 103841, 63647 103635, 64018 102810, 64222 102487, 64545 102243, 64658 101954, 64951 101486, 64936 101414, 65027 101347, 65264 101013, 65460 100856, 65863 100067, 66203 99592, 66377 99453, 66513 99120, 66178 98940, 66334 98782, 66363 98505, 66688 98552, 66779 98600, 67066 98457, 67196 98157, 67442 97702, 67448 97599, 67754 97391, 68092 96749, 68380 96282, 68607 95832, 68903 95654, 69201 94894, 69212 94759, 69582 94650, 69800 94251, 69976 93799, 70484 93230, 70587 92964, 70873 92498, 71078 92053, 71066 91968, 71134 91991, 71410 91818, 71605 91448, 71722 91102, 71727 90972, 71839 90970, 72095 90860, 72434 90132, 72661 89682, 72648 89619, 72703 89621, 72977 89426, 73095 89175, 73363 88855, 73498 88595, 73700 88374, 73823 88102, 73848 87772, 73776 87718, 73855 87757, 74112 87588, 74158 87269, 74366 87056, 74509 86800, 74751 86614, 74842 86321, 75052 86118, 75172 85910, 75414 85663, 75586 85342, 75753 85195, 75831 84986, 75890 84935, 75892 84867, 76051 84683, 76151 84452, 76400 84186, 76416 83886, 76045 83614, 76455 83800, 76693 83674, 76742 83404, 76493 83186, 76788 83356, 77054 83222, 77088 82926, 76818 82710, 77116 82887, 77368 82740, 77440 82448, 77383 82402, 77447 82439, 77697 82269, 77769 81978, 77711 81932, 77775 81971, 78020 81796, 78084 81513, 77892 81361, 78102 81489, 78338 81321, 78351 81060, 78077 80795, 78424 80965, 78699 80838, 78675 80543, 78386 80310, 78744 80431, 79000 80292, 79000 80005, 78699 79770, 79064 79897, 79354 79822, 79306 79528, 78978 79218, 78848 79262, 78973 79173, 79389 79407, 79628 79318, 79632 79063, 79392 78802, 79719 78942, 79941 78842, 79980 78596, 79874 78447, 80051 78504, 80310 78408, 80284 78140, 79913 78126, 79601 78254, 79207 78320, 78862 78307, 78495 78475, 78090 78328, 77955 78416, 77909 78599, 77741 78644, 77503 78511, 77333 78476, 76820 78521, 76577 78635, 76490 78634, 76402 78919, 76238 79022, 76065 79028, 76124 79193, 76079 79388, 75729 79527, 75782 79695, 75741 79889, 75589 80020, 75403 80067, 75460 80241, 75425 80432, 75263 80507, 75018 80523, 75115 80938, 74695 80991, 74795 81409, 74623 81581, 74533 81575, 74570 81658, 74462 81873, 74295 82050, 74210 82046, 74238 82126, 73966 82515, 73882 82516, 73911 82597, 73638 82987, 73553 82987, 73587 83066, 73309 83445, 73196 83456, 73245 83555, 73134 83775, 72983 83943, 72837 83958, 72892 84090, 72809 84293, 72663 84467, 72532 84469, 72576 84591, 72411 85023, 72437 85100, 72355 85103, 72163 85263, 72097 85495, 72123 85584, 72029 85591, 71839 85740, 71752 85974, 71774 86045, 71699 86048, 71486 86200, 71424 86509, 71162 86681, 71059 86962, 70845 87169, 70713 87431, 70505 87654, 70422 87957, 70178 88152, 70088 88445, 69853 88639, 69913 89027, 69752 89045, 69542 89131, 69584 89509, 69425 89528, 69216 89616, 69204 89844, 69239 89981, 68860 90081, 68869 90333, 68811 90469, 68467 90626, 68208 91289, 67924 91755, 67889 91859, 67614 92110, 67586 92235, 67399 92455, 67230 92871, 67048 93012, 66897 93037, 66861 93210, 66695 93431, 66593 93670, 66371 94119, 66317 94292, 66134 94416, 65977 94447, 65926 94628, 65786 94834, 65618 95279, 65360 95558, 65142 96006, 64885 96268, 64693 96653, 64456 96973, 64179 97250, 64108 97453, 63799 98093, 63580 98287, 63484 98289, 63457 98407, 63274 98651, 63205 98864, 62769 99521, 62560 99662, 62509 99829, 62285 100278, 61994 100746, 61964 100827, 61669 101067, 61619 101236, 61463 101463, 61284 101891, 61057 102231, 60771 102476, 60726 102644, 60564 102859, 60370 103268, 60131 103601, 59835 103829, 59471 104666, 59279 104871, 59183 104915, 59165 105010, 58967 105284, 58896 105471, 58612 105937, 58574 106077, 58277 106306, 58237 106427, 58040 106637, 57870 107078, 57662 107450, 57339 107630, 57289 107850, 57002 108493, 56792 108641, 56660 108643, 56618 108809, 56446 109020, 56283 109471, 55796 110063, 55763 110206, 55149 111046, 55057 111046, 55093 111165, 54918 111601, 54739 111901, 54466 112068, 54283 111621, 53961 111087, 53952 110845, 53872 110725, 53693 110678, 53332 110313, 53381 110472, 53115 110638, 53065 110946, 52785 111411, 52561 111950, 52215 112089, 52082 112517, 51884 112870, 51572 113104, 51511 113310, 51346 113528, 51151 113945, 50940 114261, 50649 114467, 50578 114729, 50290 115196, 50066 115645, 50042 115752, 49679 115868, 49567 116299, 49390 116681, 49047 116850, 48923 117121, 48671 117578, 48439 118029, 48434 118074, 48128 118259, 48069 118518, 47780 118984, 47433 119476, 47132 119666, 47044 120102, 46553 120871, 46272 121137, 45929 121818, 45924 121913, 45580 122047, 45551 122309, 45488 122467, 45325 122635, 45169 122626, 45168 122802, 45016 122973, 44947 123250, 44577 123772, 44408 124172, 44399 124309, 44020 124404, 43929 124811, 43764 125153, 43440 125428, 43152 125835, 42871 125863, 42992 126112, 42948 126271, 42757 126560, 42488 126775, 42464 127032, 42514 127191, 42050 127241, 42166 127617, 41770 127708, 41824 128091, 41467 128209, 41470 128467, 41302 128901, 41348 128996, 41239 129002, 40994 129108, 40901 129250, 40695 129252, 40792 129428, 40610 129707, 40394 129713, 40495 129897, 40365 130056, 40330 130495, 39925 130565, 39967 130994, 39797 131046, 39517 131051, 39642 131294, 39669 131462, 39206 131510, 39327 131768, 39284 131926, 39129 132056, 38922 132043, 38941 132262, 38837 132424, 38777 132694, 38829 132820, 38416 132897, 38471 133255, 38132 133381, 38142 133744, 37792 133869, 37741 134279, 37605 134345, 37360 134374, 37358 134634, 37301 134773, 37169 134912, 36983 134925, 37001 135119, 36884 135285, 36838 135551, 36879 135680, 36473 135759, 36491 136105, 36156 136227, 36149 136575, 35821 136719, 35844 136987, 35800 137143, 35652 137268, 35446 137262, 35471 137477, 35410 137628, 35292 137742, 35065 137746, 35152 137952, 35090 138101, 34972 138208, 34739 138216, 34824 138429, 34734 138584, 34658 138955, 34318 139085, 34333 139491, 33904 139557, 34003 139964, 33585 140038, 33654 140300, 33636 140444, 33491 140611, 33338 140613, 33362 140768, 33220 140941, 33107 141226, 33122 141272, 32815 141416, 32815 141764, 32486 141894, 32439 142220, 32147 142395, 32109 142786, 31985 142882, 31768 142917, 31804 143134, 31751 143295, 31617 143402, 31401 143411, 31469 143613, 31406 143768, 31278 143877, 31056 143886, 31124 144095, 30896 144489, 30815 144482, 30829 144564, 30624 144738, 30573 145021, 30600 145117, 30221 145216, 30305 145630, 29882 145700, 29932 146114, 29517 146182, 29530 146608, 29397 146674, 29140 146695, 29136 147087, 29026 147227, 28847 147248, 28868 147427, 28676 147675, 28486 147724, 28501 147916, 28403 148041, 28319 148382, 28012 148539, 28002 148939, 27892 149048, 27675 149078, 27736 149288, 27643 149457, 27503 149570, 27271 149560, 27325 149789, 27141 150187, 27073 150175, 27098 150238, 26888 150412, 26785 150663, 26720 150662, 26746 150722, 26538 150912, 26492 151278, 26131 151389, 26171 151808, 26024 151878, 25775 151892, 25836 152135, 25803 152287, 25665 152359, 25419 152381, 25474 152622, 25430 152774, 25294 152920, 25105 152914, 25146 153099, 25038 153258, 24951 153583, 24649 153736, 24677 154136, 24304 154238, 24300 154620, 23915 154714, 23960 154975, 23940 155126, 23800 155238, 23583 155241, 23631 155453, 23438 155900, 23166 156080, 23172 156471, 22797 156572, 22780 156964, 22089 156891, 22096 156834, 21811 156510, 22079 156115, 21751 156033, 22130 155726, 22312 155687, 21437 155357, 21606 155241, 21213 154979, 21671 154823, 22703 154562, 22683 153811, 23054 153981, 23059 153675, 23426 153602, 23674 153763, 23456 153563, 23432 153199, 23284 153222, 23281 152914, 23442 153180, 23805 153124, 24028 153254, 23850 153067, 23800 152701, 23563 152635, 23799 152586, 23879 152284, 23876 151586, 24112 151606, 24545 151548, 24558 151331, 24995 151279, 24947 151216, 24917 150840, 25287 150782, 25398 150818, 25333 150722, 25279 150355, 25647 150303, 25844 150397, 25685 150239, 25652 149897, 25393 149930, 25400 149656, 25662 149540, 25692 149849, 26025 149796, 26267 149952, 26071 149745, 26036 149417, 25722 149452, 25494 148935, 26045 149108, 26063 148985, 26442 148888, 26442 148485, 26901 148450, 26854 148367, 26796 147997, 27173 147930, 27344 148016, 27206 147884, 27151 147529, 26950 147565, 26986 147182, 27164 147508, 27525 147452, 27840 147633, 27570 147396, 27538 147056, 27012 146882, 27555 146653, 27930 146541, 27916 146142, 28287 146083, 28407 146123, 28333 146024, 28270 145663, 28636 145603, 28756 145641, 28661 145546, 28655 145163, 29024 145104, 29153 145164, 29070 145046, 29051 144666, 29420 144609, 29605 144714, 29484 144546, 29399 144206, 29168 144244, 29151 144011, 29369 143803, 29265 143303, 29756 143432, 29770 143309, 29868 143277, 29887 142993, 30150 142990, 30175 142817, 30586 142747, 30557 142701, 30881 142238, 31068 142353, 30890 142222, 30848 141850, 31220 141800, 31588 141996, 31257 141733, 31247 141351, 31614 141269, 31818 141422, 31636 141242, 31647 140871, 31525 140884, 31547 140782, 31636 140709, 31622 140479, 31716 140445, 31688 140173, 31962 140162, 31972 140013, 32323 139962, 32378 139876, 32360 139507, 32708 139537, 32775 139441, 32760 138998, 33124 138960, 33252 139002, 33174 138882, 33091 138520, 33466 138474, 33793 138634, 33511 138403, 33417 138082, 33126 138120, 32896 137582, 33438 137777, 33451 138032, 33789 137993, 34081 138135, 33834 137926, 33823 137543, 33887 137163, 34207 137313, 34277 137077, 34190 136668, 34563 136590, 34651 136623, 34584 136557, 34508 136193, 34880 136119, 34967 136149, 34904 136082, 34923 135692, 35283 135648, 35400 135689, 35338 135575, 35337 135198, 35182 135229, 35191 135051, 35353 135066, 35394 134794, 35759 134695, 35813 134285, 36178 134236, 36376 134356, 36238 134166, 36135 133813, 36509 133762, 36808 133896, 36544 133694, 36441 133337, 36816 133267, 37067 133392, 36842 133226, 36862 132834, 36820 132842, 36874 132751, 36864 132831, 37231 132779, 37502 132981, 37327 132705, 37306 132337, 37342 132313, 37249 131969, 37609 131881, 37547 131493, 37760 131423, 37706 131192, 37939 131148, 37966 130980, 38327 130933, 38457 130994, 38369 130868, 38401 130474, 38764 130423, 39004 130597, 38821 130357, 38702 130004, 39083 129945, 39387 130085, 39117 129888, 38999 129543, 38849 129573, 38875 129413, 39011 129440, 39004 129532, 39378 129483, 39623 129581, 39442 129411, 39431 129040, 39313 129059, 39276 128870, 39495 128645, 39681 128959, 39815 128934, 39900 128543, 39803 128155, 40170 128066, 40330 128144, 40183 128045, 40088 127686, 40509 127614, 40523 127184, 40452 127196, 40533 127129, 40527 127176, 40881 127171, 41059 127240, 40935 127064, 40963 126708, 40711 126737, 40333 126299, 40933 126503, 40911 126317, 41090 126246, 40977 126040, 41196 125947, 41178 125843, 41341 125789, 41225 125410, 41623 125279, 41555 125730, 41920 125681, 42177 125785, 41957 125621, 42070 124820, 42488 124766, 42344 124353, 42726 124285, 42986 124400, 42748 124241, 42622 123892, 42997 123825, 43043 123772, 43057 123444, 42546 123213, 43137 123050, 43128 123362, 43427 123341, 43561 123407, 43481 123265, 43610 122474, 43585 122460, 43621 122422, 43618 122452, 43980 122396, 44076 122444, 44017 122342, 44084 121941, 44189 121908, 44171 121782, 43937 121257, 44505 121202, 44726 121367, 45035 120900, 45071 120537, 44717 120612, 44687 120698, 44447 120520, 44503 120271, 44715 119904, 44906 120006, 44904 120162, 45131 120285, 45185 120094, 45647 120091, 45595 119951, 46071 119082, 46196 119135, 46288 119006, 46681 118717, 46569 118542, 46655 118144, 46803 117844, 46678 117736, 46786 117368, 46872 117295, 47051 116795, 47168 117215, 47434 117265, 47536 117186, 47737 116287, 47977 115840, 48224 115960, 48363 115769, 48591 115299, 48935 115180, 48699 114858, 48989 115044, 49282 114846, 49249 114409, 49697 114510, 49883 114317, 49947 114127, 49883 113997, 49654 113909, 49752 113684, 49871 113624, 50022 113344, 50274 112493, 50638 112399, 50867 112712, 50862 112779, 50929 112695, 50886 112700, 50648 112383, 51075 111498, 51098 111541, 51583 110951, 51720 110540, 51962 110086, 52146 109687, 52456 109639, 52502 109561, 52638 109614, 52567 109532, 52503 109544, 52787 108702, 53157 108600, 53458 107738, 53660 107306, 54016 107213, 54218 106754, 54542 105900, 54906 105798, 55275 104920, 55645 104819, 56148 103523, 56524 103420, 56639 103132, 56554 103011, 56782 102774, 57061 102110, 57386 102009, 57383 101920, 57439 101973, 57773 101129, 58149 101028, 58685 99735, 59046 99619, 59376 98796, 59332 98717, 59419 98693, 59584 98316, 59946 98241, 60279 97362, 60246 97348, 60267 97298, 60303 97303, 60479 96912, 60848 96794, 61385 95497, 61728 95408, 61908 94984, 61879 94962, 61943 94900, 62284 94098, 62637 94003, 62811 93545, 63183 93446, 63510 92581, 63891 91709, 64251 91616, 64220 91221, 64595 91117, 64541 90734, 64914 90634, 64871 90254, 65112 90180, 64828 89959, 64518 89948, 64479 89645, 64779 89567, 64966 89826, 65213 89938, 65193 89759, 65565 89645, 65551 89544, 65132 89188, 65379 88903, 65369 88814, 65456 88785, 65680 89216, 65894 89163, 65845 88779, 66222 88683, 66173 88300, 66551 88205, 66499 87820, 66873 87724, 66625 87293, 66817 87278, 66940 87312, 67201 87247, 67154 86869, 67327 86823, 67077 86468, 67510 86636, 67483 86396, 67780 86289, 67704 86178, 67835 86144, 67804 85882, 68179 85752, 68128 85366, 68503 85274, 68455 84891, 68831 84801, 68789 84423, 69160 84330, 69072 83571, 69236 83523, 69211 83321, 69268 83124, 69118 82908, 69358 82854, 69688 83379, 69807 83333, 69761 82950, 70131 82801, 70079 82413, 70384 82277, 70435 82173, 70368 81565, 70737 81491, 70692 81095, 71064 81009, 71023 80630, 71397 80543, 71353 80169, 71722 80085, 71677 79703, 72072 79612, 72007 79244, 72372 79093, 72346 78703, 72690 78542, 72652 78139, 73397 77980, 73301 77214, 73681 77141, 73630 76756, 74010 76685, 73960 76302, 74290 76236, 74326 76151, 74289 75847, 74667 75784, 74620 75398, 75345 75012, 75329 74888, 74936 74629, 75270 74416, 75250 74241, 75507 74193, 75520 74093, 75619 74109, 75581 73790, 75904 73731, 75636 73136, 75893 73218, 76287 73273, 76246 72895, 76622 72829, 76576 72451, 76954 72386, 76903 72002, 77287 71942, 77237 71563, 77610 71335, 77549 70989, 77504 70990, 77498 70581, 77575 70947, 77907 70756, 77863 70363, 78241 70302, 78192 69917, 78570 69860, 78523 69479, 78903 69421, 78808 68675, 78761 68663, 78750 68574, 78849 68651, 79195 68601, 79150 68231, 79521 68175, 79494 67807, 79853 67743, 80071 67589, 80108 67462, 80198 67402, 80163 67118, 80404 66950, 80330 66807, 80505 66764, 80472 66489, 80852 66439, 80805 66056, 81041 66024, 81148 65720, 81136 65624, 81335 65368, 81419 65158, 81502 65155, 81806 64771, 82158 64512, 82113 64131, 82464 63868, 83473 62574, 83432 62202, 83753 61793, 83753 61782, 84441 60932, 84391 60574, 85077 59989, 85376 59613, 85405 59527, 85372 59187, 85913 58509, 85793 58165, 86115 58231, 86710 57583, 87085 57139, 86994 56761, 87344 56466, 87701 56111, 87653 55739, 88314 54933, 89017 54108, 88945 53799, 88710 53884, 88924 53632, 89046 53628, 89457 53147, 89436 52970, 89592 52789, 89773 52806, 89962 52619, 89914 52239, 90259 51889, 90909 51129, 90882 51104, 90928 51081, 90892 50722, 91559 49947, 92249 49196, 92201 48820, 92534 48456, 92896 46537, 93135 45885, 93274 45832, 93915 45830, 94437 45851, 94824 45830, 95063 46013, 95473 45629, 99087 45628, 99345 45800), (143176 214170, 143101 214582, 143307 214236, 143295 214045, 143080 213805, 143176 214170), (148068 213383, 148076 213601, 147968 214050, 148426 214061, 148793 213405, 148359 213075, 148068 213383), (144676 213608, 144677 213926, 144905 213970, 144846 213711, 144909 213384, 144676 213608), (148802 210301, 148740 210555, 148923 210390, 148917 210148, 148762 210131, 148802 210301), (145180 209356, 145037 209868, 145189 210129, 145253 210139, 145114 209760, 145239 209287, 145180 209356), (155600 209489, 155731 209728, 155803 209579, 155857 209278, 155600 209489), (155588 208940, 155851 209008, 155784 208741, 155703 208627, 155588 208940), (148541 207104, 148535 207485, 148713 207395, 148676 207235, 148724 207017, 148541 207104), (155679 204372, 155689 204701, 155825 204500, 155860 204252, 155679 204372), (155601 201072, 155748 201322, 155870 200999, 155646 200780, 155601 201072), (155572 200305, 155641 200567, 155853 200228, 155699 199919, 155572 200305), (128324 199634, 128234 200049, 128475 199744, 128437 199603, 128511 199343, 128245 199340, 128324 199634), (155529 199377, 155697 199845, 155833 199458, 155866 199216, 155529 199377), (121190 199160, 121198 199362, 121436 199587, 121345 199219, 121411 198810, 121190 199160), (155517 198935, 155860 198910, 155805 198653, 155699 198472, 155517 198935), (130227 198243, 130242 198409, 130405 198566, 130318 198312, 130362 198087, 130227 198243), (128414 197670, 128231 197868, 128283 198240, 128524 198349, 128418 198057, 128557 197596, 128414 197670), (131709 195216, 131716 195481, 131855 195564, 131764 195780, 131802 195966, 131728 196386, 132070 197055, 131745 197863, 131753 197969, 131941 198237, 131828 197898, 132074 197051, 131747 196364, 132039 195901, 132112 195640, 132089 195500, 132255 195067, 131709 195216), (155499 197838, 155693 198192, 155789 197957, 155825 197697, 155499 197838), (121129 197605, 121123 197886, 121334 197957, 121288 197685, 121411 197139, 121129 197605), (124642 196588, 124760 196734, 124666 196965, 124706 197227, 124824 197155, 125005 196794, 125033 196438, 124959 196291, 124666 196263, 124642 196588), (128170 196186, 128158 196281, 128234 196557, 128189 196833, 128480 196816, 128462 196495, 128599 196309, 128576 195912, 128170 196186), (130113 195267, 130122 195398, 130394 195651, 130395 195189, 130113 195267), (104353 195349, 104482 195523, 104782 195376, 104876 195268, 104845 195211, 104353 195349), (128199 195015, 128201 195125, 128329 195368, 128545 195442, 128546 195309, 128471 195322, 128246 194998, 128199 195015), (177330 188306, 177371 188515, 177312 188772, 177326 189690, 177391 189949, 177317 190298, 177351 190459, 177305 190772, 177375 191156, 177307 191246, 177357 191460, 177250 191750, 177263 192250, 177324 192791, 177423 193028, 177380 193164, 177386 193409, 177437 193537, 177149 194091, 177090 194406, 177495 194684, 177589 194691, 177813 194597, 177858 194196, 177818 194155, 177785 193828, 177558 193504, 177654 193197, 177634 192707, 177559 192478, 177658 192167, 177610 191939, 177634 191657, 177557 191259, 177578 191172, 177500 190914, 177596 190583, 177557 190402, 177608 190110, 177532 189634, 177394 189284, 177568 188549, 177564 188124, 177330 188306), (174621 193971, 174571 194413, 174731 194665, 175180 194542, 175146 193934, 174621 193971), (170728 193079, 170795 193419, 170733 193823, 170528 194267, 170606 194305, 170689 194641, 171295 194445, 171256 194067, 171121 193717, 171127 193635, 170946 193377, 171137 193097, 171151 192856, 170913 192849, 170728 193079), (172355 194245, 172312 194553, 172708 194480, 172790 194522, 172996 194366, 172519 194228, 172355 194245), (166988 186294, 166942 186721, 167149 187441, 167015 187837, 166934 188274, 166994 188695, 167130 188997, 166916 189715, 166913 189957, 166978 190201, 167140 190544, 167057 190918, 166948 190985, 166868 191174, 166947 191372, 166866 191687, 166790 192190, 166867 192558, 166840 192724, 166909 192934, 166910 193398, 166645 194169, 166698 194542, 167076 194474, 167159 194518, 167370 194358, 167371 193944, 167193 193705, 167030 193674, 167051 193282, 167166 193014, 167201 192644, 167161 192476, 166907 192159, 167038 191796, 167119 191713, 167157 191491, 167125 191324, 167248 190566, 167199 190005, 167126 189772, 167213 189017, 167152 188602, 167208 188398, 167082 188233, 167165 187965, 167124 187835, 167155 187443, 166950 186719, 167110 186391, 167115 185868, 166988 186294), (57360 192252, 57298 192742, 57323 192770, 57448 193411, 57316 193900, 57196 194090, 57149 194333, 57420 194466, 57847 194530, 57979 194301, 57805 193855, 57691 193797, 57682 193617, 57558 193160, 57819 192977, 57420 192708, 57829 192249, 57846 191965, 57805 191827, 57420 191575, 57360 192252), (165290 184073, 164827 184880, 164791 184986, 164453 185556, 164463 185850, 164402 186257, 164651 186575, 164403 187010, 164390 187662, 164391 188197, 164361 188592, 164432 188961, 164385 189473, 164730 189655, 164410 190039, 164378 190523, 164434 190983, 164810 191183, 164441 191582, 164457 192900, 164564 193377, 164521 193588, 164263 194046, 164563 194352, 164963 194288, 165032 194350, 165261 194321, 165402 194510, 165581 194460, 165670 193944, 165418 192540, 165588 191822, 165614 191397, 165185 191080, 165466 190228, 165299 189498, 165299 188978, 165345 188635, 165326 188512, 165298 187948, 165362 187278, 165334 187009, 165315 186393, 165409 186049, 165425 185587, 165517 185141, 165136 184891, 165506 184436, 165447 184030, 165488 183604, 165290 184073), (39449 193702, 39335 194021, 39332 194178, 39436 194509, 39867 194249, 39744 193950, 39694 193691, 39453 193262, 39449 193702), (35693 185464, 35733 186248, 35666 187042, 35756 187792, 35653 188210, 35631 188488, 35687 188898, 35661 188982, 35742 189347, 35639 189763, 35652 190416, 35606 190547, 35663 190919, 35641 191313, 35587 191530, 35649 191955, 35577 192106, 35616 192482, 35585 192878, 35606 193648, 35284 194124, 35480 194459, 35906 194503, 36146 194276, 36080 193913, 35815 193591, 35848 193194, 35951 192536, 35903 192126, 35934 192008, 35882 191360, 35917 190967, 35908 190465, 35865 190205, 35901 189691, 35851 189009, 35882 188922, 35843 188545, 35866 188268, 35782 187132, 35849 186714, 35851 186216, 35736 185496, 35745 185055, 35693 185464), (59075 193980, 58921 194085, 58863 194252, 58964 194256, 59421 194497, 59576 194444, 59631 194291, 59505 193836, 59075 193980), (37069 194022, 37140 194391, 37419 194490, 37620 194472, 37792 194386, 37872 194190, 37206 193720, 37069 194022), (31530 193835, 31455 194011, 31480 194203, 31555 194371, 31802 194469, 32013 194460, 32166 194359, 32179 194200, 32055 193706, 31906 193659, 31530 193835), (168521 193823, 168458 194059, 168478 194442, 168857 194366, 168983 194466, 168968 194221, 168737 193757, 168521 193823), (156902 193996, 156853 194139, 157080 194465, 157260 194415, 157354 194076, 157660 193918, 157338 193881, 156902 193996), (161631 193182, 161248 193226, 161085 193754, 161097 194139, 161346 194459, 161479 194465, 161701 194361, 161801 194259, 161885 193923, 161752 193571, 161717 193089, 161631 193182), (64030 185814, 63951 186243, 64014 186638, 64160 186984, 63967 187769, 64008 188189, 64129 188544, 64032 188905, 63932 188985, 63905 189209, 63961 189365, 63901 189565, 64059 189967, 64188 190078, 64069 190450, 63997 190518, 63915 190732, 63923 191121, 64197 191626, 64057 191981, 63978 192074, 63917 192246, 63995 192845, 63914 193286, 64070 193600, 63797 193826, 63666 194098, 63812 194446, 64198 194369, 64551 194243, 64244 193552, 64273 193256, 64037 193221, 64287 193117, 64296 192612, 64226 192393, 64266 192116, 64299 191553, 64238 191227, 64270 191064, 64231 190841, 64288 190116, 64202 189589, 64123 189320, 64271 188586, 64184 188140, 64212 187977, 64079 187781, 64168 187476, 64139 187378, 64213 186928, 64175 186447, 64027 186245, 64118 185912, 64094 185840, 64156 185428, 64030 185814), (47874 193775, 47671 193857, 47796 194184, 48137 194440, 48343 194267, 48413 193787, 48708 193830, 48407 193482, 48184 193444, 47874 193775), (62442 194433, 62734 194353, 62667 194173, 62344 194085, 62442 194433), (29773 193309, 29541 193874, 29214 193807, 29232 194232, 29582 194288, 29814 194159, 30093 194385, 30249 194423, 30335 194160, 30128 193987, 29784 193307, 29789 193047, 29773 193309), (42266 193592, 42239 193769, 41916 194086, 41853 194262, 42114 194375, 42438 194420, 42539 193803, 42450 193365, 42266 193592), (175714 194126, 175722 194394, 176015 194394, 175964 194107, 175714 194126), (61163 194009, 61203 194385, 61626 194321, 61848 194208, 61777 193840, 61553 193739, 61230 193722, 61163 194009), (33350 193879, 33328 194273, 33488 194346, 33761 194297, 33782 193761, 33543 193469, 33350 193879), (46073 193881, 46125 194254, 46556 194344, 46730 194273, 46924 194034, 46246 193516, 46073 193881), (158081 192731, 158197 192995, 158095 193411, 157684 193911, 157875 194247, 158021 194319, 158262 194344, 158405 194226, 158489 194078, 158465 193697, 158185 193386, 158294 192918, 158209 192604, 158227 192466, 158045 192345, 158081 192731), (159606 193665, 159488 194192, 159785 194343, 160152 194217, 160277 193976, 160165 193721, 159756 193643, 159606 193665), (44271 193392, 44004 193379, 44254 193874, 44231 193998, 44374 194038, 44517 194307, 44804 194341, 45072 194232, 45162 194130, 45040 193776, 44842 193569, 44649 193138, 44271 193392), (163144 192776, 163068 192823, 162975 193075, 163009 193227, 162828 193660, 162720 194082, 162877 194300, 163205 194316, 163455 194073, 163470 193876, 163243 193550, 163162 193185, 163253 192518, 163144 192776), (26004 193508, 25922 193589, 25951 193694, 26057 193801, 26238 194279, 26420 194296, 26551 194193, 26223 193678, 26053 193185, 26004 193508), (27439 193844, 27542 194044, 27814 194235, 27961 194228, 28203 194030, 28218 193736, 27697 193402, 27439 193844), (24493 185403, 24479 185887, 24541 186990, 24509 187727, 24430 188269, 24481 189333, 24422 189740, 24452 190503, 24451 191171, 24397 192123, 24503 193203, 24449 193496, 24284 193754, 24185 194065, 24558 194220, 24865 194198, 25045 193943, 25055 193827, 24932 193545, 24839 193498, 24653 193162, 24771 192577, 24764 191969, 24714 191595, 24707 190978, 24727 190816, 24710 189658, 24642 189289, 24678 188174, 24608 187420, 24547 186989, 24636 186277, 24621 185500, 24544 185238, 24493 185403), (49842 193859, 49657 194061, 49978 194217, 50100 194045, 50131 193931, 49879 193245, 49842 193859), (23018 191672, 22943 192080, 22932 192471, 23060 193128, 23090 192459, 23060 191118, 23018 191672), (26043 190067, 26015 191212, 26035 192008, 26017 192761, 26051 193120, 26093 192818, 26110 191988, 26089 191219, 26102 190439, 26058 190069, 26041 189459, 26043 190067), (44476 192139, 44668 192327, 44655 193023, 44756 192765, 44727 192699, 44817 192375, 44694 191992, 44476 192139), (159598 192107, 159671 192592, 159647 192999, 160017 192873, 159961 192512, 160066 192284, 160052 192033, 159805 192007, 159598 192107), (31991 191129, 32052 191898, 32005 192683, 32022 192755, 32068 191910, 32011 191004, 31991 191129), (37262 192419, 37268 192670, 37351 192428, 37316 192090, 37262 192419), (42281 192071, 42458 192623, 42447 191718, 42281 192071), (29579 185477, 29703 186302, 29524 186923, 29515 187178, 29676 187884, 29510 188456, 29500 188733, 29632 189398, 29528 190016, 29530 190275, 29803 190975, 29583 191605, 29576 191813, 29812 192500, 30042 191949, 30027 191690, 29812 190973, 30065 190421, 29989 189374, 30059 188755, 29916 187933, 30011 187200, 29884 186404, 29918 185683, 29772 185070, 29579 185477), (161196 192009, 161202 192336, 161456 192401, 161350 192131, 161450 191795, 161196 192009), (170763 191756, 170736 192146, 170891 191972, 170854 191852, 170887 191712, 170763 191756), (159881 190521, 159635 190771, 159644 191339, 159781 191399, 160016 191369, 160066 190841, 160005 190520, 159881 190521), (163143 190705, 163179 190854, 163092 191124, 163299 190965, 163299 190653, 163143 190705), (161589 189739, 161154 190610, 161192 190706, 161380 190809, 161290 190597, 161773 189833, 161836 189672, 161765 189552, 161495 189434, 161589 189739), (44755 189912, 44788 189969, 44725 190777, 44855 189982, 44735 189364, 44755 189912), (49935 189333, 49487 189800, 49438 190214, 49462 190717, 49815 190775, 49941 190680, 49938 190108, 49971 189300, 49926 189296, 49935 189333), (22994 187415, 23006 188131, 23047 188563, 23038 189319, 22984 190130, 23058 190731, 23080 190104, 23061 188559, 23075 188184, 23073 187005, 23058 186673, 22994 187415), (57410 190727, 57778 190678, 57745 190293, 57421 190132, 57410 190727), (170864 189523, 170735 190290, 170744 190441, 170865 190429, 170833 190307, 171216 189818, 171101 189459, 170853 189190, 170864 189523), (46273 189561, 46219 190366, 46652 189848, 46339 189220, 46418 189135, 46253 189085, 46273 189561), (158089 190319, 158129 190356, 158093 190311, 158228 189934, 158225 189841, 158160 189790, 158089 190319), (31985 189581, 32045 190194, 32004 189439, 31985 189581), (142628 185723, 142888 186338, 142558 186796, 142628 187184, 142576 187611, 142845 187901, 142621 188368, 142669 188724, 142641 189099, 142921 189430, 142968 189968, 143357 189637, 143359 188953, 143292 188552, 143367 188157, 143405 187249, 143350 186986, 143385 186202, 143309 185469, 142628 185723), (159607 189243, 159635 189500, 159611 189802, 159699 189871, 159995 189839, 159993 189661, 159842 189443, 159946 189026, 159607 189243), (163150 188821, 163029 189067, 163085 189330, 163041 189619, 163187 189782, 163372 189755, 163312 189267, 163371 188864, 163354 188747, 163150 188821), (44706 188030, 44801 188414, 44776 188712, 44823 188420, 44709 187756, 44706 188030), (46278 187978, 46223 188368, 46238 188565, 46328 188422, 46374 187984, 46267 187725, 46278 187978), (163224 187312, 162843 187350, 162868 187451, 162822 187849, 162846 188366, 163129 188309, 163330 188171, 163275 187726, 163318 187231, 163224 187312), (170841 188301, 171059 188117, 171000 187936, 170864 187788, 170841 188301), (44701 187254, 44704 187604, 44799 187315, 44794 186900, 44701 187254), (177618 186130, 177419 186565, 177371 186827, 177566 187314, 177526 186963, 177626 186122, 177455 185383, 177618 186130), (57537 186474, 57428 187289, 57676 186550, 57495 186090, 57537 186474), (53693 186336, 53653 186763, 53757 187140, 53688 186768, 53783 186392, 53780 186140, 53693 186336), (161523 186449, 161546 186650, 161453 187000, 161722 186778, 161714 186432, 161523 186449), (155590 186345, 155567 186630, 155615 186726, 155593 186809, 155684 186836, 155665 186712, 155779 186336, 155774 186202, 155590 186345), (163174 185763, 162816 185810, 162768 186315, 162835 186685, 162819 186817, 163186 186813, 163329 186722, 163305 186168, 163319 185558, 163174 185763), (170825 186705, 170949 186486, 170819 186173, 170825 186705), (49677 186003, 49801 186269, 49965 186474, 50089 186338, 50017 186210, 49967 185923, 49677 186003), (141011 185896, 140982 186084, 141020 186255, 141238 186264, 141191 186028, 141363 185497, 141011 185896), (35720 183697, 35761 183560, 35763 183112, 35720 183697), (165480 180095, 165380 180532, 165318 180577, 165198 180808, 165227 181148, 165304 181357, 165532 181681, 165380 182066, 165300 182433, 165303 182607, 165411 182912, 165499 182967, 165419 182487, 165551 181684, 165408 180939, 165535 180053, 165480 180095), (44586 182124, 44668 182248, 44714 182500, 44812 182284, 44698 181912, 44586 182124), (136162 182001, 136254 182342, 136394 182479, 136409 182156, 136226 181961, 136340 181596, 136348 181416, 136162 182001), (23017 180389, 23035 181174, 23015 182369, 23070 182439, 23062 179954, 23017 180389), (158220 181360, 158095 181758, 158081 181996, 158182 181825, 158244 181340, 158206 181265, 158220 181360), (48339 180080, 48302 180423, 48367 180847, 48454 181017, 48369 180480, 48442 180094, 48437 179871, 48339 180080), (44645 180626, 44710 180854, 44769 180714, 44678 180351, 44645 180626), (143611 179937, 143294 180644, 143707 180012, 143708 179790, 143545 179764, 143611 179937), (136215 179946, 136222 180155, 136352 180125, 136330 179995, 136389 179572, 136215 179946), (52087 176988, 52120 177105, 51989 177457, 51913 177837, 52195 178625, 52114 179032, 51970 179350, 51985 179468, 52125 179712, 52147 179036, 52215 178630, 52125 177951, 52177 177477, 52212 176932, 52087 176988), (165350 178440, 165421 178611, 165360 178814, 165555 178822, 165564 178245, 165350 178440), (143527 178410, 143446 178743, 143709 178566, 143708 178123, 143426 178119, 143527 178410), (143314 176484, 143312 176919, 143273 177065, 143271 177467, 143779 177295, 143732 176802, 143779 176492, 143759 176275, 143314 176484), (165449 176605, 165350 176927, 165362 177137, 165295 177335, 165552 177366, 165540 177028, 165598 176688, 165582 176489, 165449 176605), (39530 176961, 39587 176664, 39471 176107, 39530 176961), (165360 175423, 165367 175621, 165475 175920, 165561 175952, 165480 175493, 165484 175278, 165360 175423), (143396 175088, 143461 175327, 143437 175544, 143607 175733, 143733 175731, 143643 175022, 143396 175088), (44687 174858, 44791 175237, 44731 175686, 44795 175239, 44679 174577, 44687 174858), (136370 174556, 136280 174976, 136417 174503, 136370 174556), (44657 173310, 44753 173697, 44665 174078, 44676 174456, 44760 174133, 44795 173709, 44677 173137, 44657 173310), (137774 171960, 137979 172178, 137837 172568, 137847 172646, 137987 172170, 137969 171792, 137756 171616, 137774 171960), (152083 171801, 152018 172261, 152160 171813, 152171 171648, 152083 171801), (141575 171563, 141422 171621, 141312 171780, 141426 172007, 141398 172155, 141553 172174, 141529 171980, 141624 171488, 141575 171563), (155577 171618, 155554 172044, 155607 172103, 155601 171999, 155724 171646, 155737 171334, 155577 171618), (38656 163287, 38350 163400, 38268 163378, 38214 163473, 38392 163932, 38651 164128, 38559 164541, 38566 164927, 38634 165150, 38481 165411, 38551 165706, 38548 166094, 38680 166718, 38544 167003, 38484 167388, 38614 167872, 38472 168053, 38819 168346, 38509 168819, 38496 168933, 38586 169185, 38545 169708, 38744 170692, 38624 171113, 38591 171428, 38632 171886, 38737 172072, 38766 171850, 38716 171476, 38768 170981, 38695 169976, 38805 169650, 38777 169521, 38836 168729, 38818 168003, 38798 167650, 38885 167178, 38793 166109, 38883 165774, 38851 165624, 38867 164959, 38783 164565, 38791 164089, 39089 163621, 39201 163292, 39142 163218, 38656 163287), (148457 170801, 148364 171277, 148515 170778, 148457 170801), (152025 170266, 151961 170613, 152022 171043, 152183 171199, 152165 170935, 152035 170650, 152141 170287, 152143 170086, 152025 170266), (137890 170651, 137818 171074, 138018 170727, 138007 170518, 137831 170353, 137890 170651), (44670 170557, 44701 170611, 44697 170908, 44764 170622, 44682 170280, 44670 170557), (141487 170053, 141433 170435, 141540 170814, 141610 170872, 141604 170762, 141460 170448, 141599 170075, 141666 169670, 141487 170053), (33504 166659, 33479 167051, 33489 167836, 33542 168227, 33477 169012, 33526 169757, 33500 170191, 33495 170754, 33586 170222, 33601 169777, 33520 169045, 33573 168234, 33496 167488, 33579 166681, 33488 166037, 33504 166659), (158069 170132, 158053 170419, 158163 170200, 158202 169766, 158069 170132), (146912 169728, 146797 170091, 146799 170278, 146914 170230, 146897 170121, 146972 169674, 146846 169438, 146912 169728), (34994 168973, 35034 169350, 35021 169930, 35200 169338, 35160 168962, 34994 168630, 34994 168973), (151900 164557, 151889 164875, 151832 165136, 151878 165267, 151840 165422, 151898 165649, 151844 166148, 151902 166423, 151893 166626, 151959 166795, 151903 167001, 151923 167192, 151860 167486, 151857 167722, 151925 167968, 152116 168302, 151883 169017, 151897 169249, 151986 169502, 152159 169681, 152198 169278, 152137 169072, 152189 168836, 152144 168682, 152225 168196, 152184 167895, 152219 167640, 152165 167513, 152215 167360, 152180 167122, 152241 166857, 152226 166595, 152157 166352, 151986 166013, 152185 165570, 152240 165350, 152232 164988, 152174 164797, 152246 164401, 151900 164557), (148361 169084, 148388 169514, 148645 169642, 148717 169636, 148573 169273, 148715 168922, 148718 168805, 148587 168802, 148361 169084), (137804 169125, 137756 169617, 137891 169488, 138019 169237, 138014 169067, 138114 168698, 137718 168623, 137804 169125), (159637 169617, 159909 169552, 159834 169288, 159859 169054, 159583 168898, 159637 169617), (141864 163286, 141587 163273, 141434 163320, 141183 163482, 141105 163479, 141070 163577, 141299 163903, 141303 164299, 141335 164839, 141380 165044, 141319 165238, 141260 165727, 141271 165965, 141362 166212, 141303 166506, 141355 166601, 141294 166706, 141364 166985, 141325 167469, 141382 167757, 141643 168071, 141443 168461, 141354 168539, 141326 168805, 141359 168925, 141328 169071, 141403 169301, 141671 169583, 141600 169161, 141488 168890, 141609 168589, 141647 168073, 141601 167696, 141664 167433, 141559 167319, 141672 167169, 141607 166919, 141692 166375, 141623 166139, 141639 165873, 141597 165758, 141654 165647, 141649 165357, 141702 165146, 141665 164965, 141685 164782, 141587 164599, 141675 164200, 141560 164218, 141680 164179, 141986 163434, 141962 163164, 141864 163286), (41997 168589, 42010 168852, 42379 169053, 42396 168635, 42281 168339, 41997 168589), (158040 167732, 158030 167869, 158156 168198, 158071 168666, 158192 168204, 158104 167823, 158172 167658, 158040 167732), (155746 167656, 155427 167766, 155425 167837, 155563 168133, 155407 168406, 155414 168621, 155551 168601, 155830 168452, 155754 168080, 155849 167520, 155746 167656), (34980 167460, 35015 167798, 34994 168232, 34994 168611, 35142 168191, 35199 167788, 35199 167400, 34983 167077, 34980 167460), (136341 167976, 136235 168440, 136272 168415, 136395 167926, 136266 167607, 136301 167483, 136176 167478, 136341 167976), (159559 167397, 159593 167804, 159563 168277, 159600 168201, 159869 167997, 159856 167732, 159988 167479, 159988 167239, 159787 167238, 159559 167397), (148451 167369, 148331 167555, 148338 168036, 148680 168091, 148758 167600, 148699 167237, 148451 167369), (150453 167595, 150416 168031, 150465 168061, 150562 167498, 150453 167595), (137720 167181, 137781 167581, 137737 168015, 138125 167876, 138017 167515, 138132 167168, 138130 167057, 137970 167038, 137720 167181), (44641 167525, 44666 167766, 44751 167554, 44809 166797, 44641 167525), (28173 167388, 28287 167762, 28321 167400, 28282 167017, 28173 167388), (158109 166659, 158019 167050, 158033 167165, 158151 167168, 158097 167051, 158179 166598, 158107 166505, 158109 166659), (35302 164207, 34992 164324, 34994 164743, 34941 165145, 34961 165914, 35013 166288, 34986 166683, 34983 167070, 35406 166592, 35402 166398, 35253 166222, 35265 166072, 35404 165996, 35409 165759, 34978 165522, 35423 165069, 35405 164691, 35124 164440, 35391 164441, 35401 164207, 35302 164207), (155697 166108, 155402 166229, 155496 166601, 155441 166978, 155844 167054, 155765 166527, 155854 165827, 155697 166108), (144789 165936, 144779 166343, 144934 166395, 144789 166546, 144820 166813, 144787 166972, 145021 166867, 145160 166432, 145226 165927, 144789 165936), (136333 166426, 136208 166864, 136338 166428, 136316 166375, 136333 166426), (159548 166669, 159763 166369, 159765 166032, 159568 165981, 159548 166669), (148343 166141, 148319 166439, 148470 166341, 148442 166208, 148595 165826, 148343 166141), (137689 165654, 137733 166043, 137717 166418, 138113 166365, 138130 166183, 138084 165946, 138126 165705, 138104 165498, 137689 165654), (28148 163377, 27772 163478, 27736 163631, 27901 163928, 27982 163952, 28206 164278, 28179 164623, 28275 165014, 28153 165815, 28286 166291, 28326 165859, 28307 165026, 28340 164693, 28289 164255, 28359 163943, 28637 163384, 28281 163301, 28148 163377), (43965 163427, 43888 163397, 43474 163474, 43530 163651, 43845 163698, 44003 163622, 44369 163910, 44580 164441, 44569 164752, 44663 165069, 44734 165175, 44678 165539, 44694 165901, 44795 165607, 44844 165192, 44700 164408, 44808 164093, 45024 163839, 45089 163526, 45067 163450, 44834 163209, 44710 163208, 43965 163427), (33087 163294, 32745 163421, 33417 164013, 33459 164776, 33449 165486, 33483 165873, 33623 165213, 33504 164376, 33571 164052, 33754 163787, 33831 163511, 33515 163431, 33269 163277, 33087 163294), (158037 165129, 158015 165573, 158077 165575, 158054 165512, 158188 165180, 158176 165011, 158006 164722, 158037 165129), (136197 164757, 136230 164904, 136135 165253, 136135 165451, 136290 165449, 136287 165276, 136383 164990, 136343 164873, 136358 164680, 136197 164757), (150327 164843, 150418 165280, 150545 165402, 150531 165197, 150416 164891, 150467 164544, 150327 164843), (146780 165346, 146957 165229, 146918 165076, 146936 164930, 146755 164841, 146780 165346), (144826 164480, 144816 164877, 144768 165037, 144806 165332, 145245 165214, 145176 164777, 145201 164398, 144826 164480), (42363 164969, 42468 165261, 42485 164622, 42363 164969), (139739 164614, 139691 164920, 139786 165092, 139974 165134, 139974 164989, 139873 164681, 139916 164309, 139739 164614), (159605 164663, 159603 164750, 160160 163772, 160159 163756, 159605 164663), (156939 163901, 156948 163967, 157246 164184, 157084 164515, 157077 164732, 157596 164475, 157252 164174, 157138 163824, 157327 163709, 157466 163347, 157352 163210, 157172 163198, 156939 163901), (178576 164017, 178620 164138, 178577 164538, 178633 164718, 178756 164101, 178677 163848, 178576 164017), (157727 163649, 157700 163603, 157569 163707, 157943 164225, 158183 164179, 158234 163912, 158345 163842, 158458 163463, 158168 163433, 157727 163649), (177401 163625, 177538 164063, 177557 163655, 177477 163564, 177401 163625), (42039 163918, 42055 164030, 42506 164026, 42621 163613, 42777 163385, 42417 163441, 42277 163359, 42060 163432, 41705 163291, 42039 163918), (37140 163326, 36819 163429, 36717 163382, 36506 163553, 36811 163918, 37250 163858, 37493 163283, 37140 163326), (163316 163542, 163302 163913, 163474 163639, 163504 163416, 163316 163542), (35027 163889, 35602 163689, 35673 163394, 35366 163435, 35212 163348, 35027 163889), (40231 163266, 39875 163405, 40214 163806, 40379 163857, 40774 163756, 40911 163509, 40621 163420, 40445 163248, 40231 163266), (134976 163447, 135128 163749, 135237 163626, 135248 163274, 134976 163447), (165497 159946, 165290 160753, 165485 161496, 165299 162341, 165570 162971, 165549 162368, 165688 161587, 165497 160857, 165598 159977, 165429 159537, 165497 159946), (46189 156962, 46282 156684, 46058 156363, 46189 156962), (72014 149212, 72042 149548, 71951 149946, 72015 150332, 71963 150596, 72017 151106, 72010 151507, 72055 151871, 72011 152423, 72025 152655, 72007 153158, 72061 153420, 72028 153629, 72081 154190, 72062 154662, 72106 154959, 72076 155555, 72143 155847, 71960 156492, 72029 156586, 72339 156530, 72632 156752, 72952 156710, 73070 156856, 73230 156588, 73084 155852, 73085 155443, 73012 155097, 73221 154265, 72875 153570, 73079 152753, 72829 152043, 72976 151231, 72700 150590, 72578 150564, 72713 150401, 72916 149697, 72679 149054, 72014 149212), (76012 156600, 76214 156766, 76451 156744, 76631 156432, 76435 156222, 76129 156180, 76012 156600), (68803 155863, 68667 156289, 68825 156633, 69051 156741, 69393 156562, 69487 156451, 69353 155672, 68812 155616, 68803 155863), (65655 154692, 65621 155020, 65858 155120, 65665 155322, 65766 155532, 65413 156017, 65296 156279, 65306 156434, 65628 156668, 65991 156651, 66143 156205, 65918 155949, 65805 155909, 65861 155621, 65843 155512, 65945 155084, 65741 154764, 65916 154326, 65655 154692), (67526 154954, 67624 155030, 67182 155806, 67014 156354, 67071 156431, 67696 156584, 67789 156521, 67358 155888, 67706 155072, 67701 154936, 67288 154501, 67526 154954), (51234 147818, 51198 148021, 51427 148610, 51053 149132, 51090 149476, 51062 149845, 51514 150136, 50897 150476, 50854 151092, 50903 151466, 50837 151815, 51378 151724, 50837 151926, 50862 152455, 50889 152633, 50891 153313, 51468 153250, 51067 153688, 51213 154095, 50916 154527, 51032 155061, 50908 155143, 50873 155279, 50889 155444, 51349 155609, 51137 156416, 51305 156573, 52008 156222, 52010 156167, 51603 155538, 52019 154821, 52012 154481, 51731 153953, 51623 153275, 51602 153213, 51841 152372, 51578 151653, 51734 150851, 51524 150133, 51750 149296, 51541 148569, 51717 148205, 51724 147752, 51324 147690, 51234 147818), (70457 155407, 70600 155759, 70395 155991, 70310 156225, 70362 156418, 70992 156476, 71069 156406, 70945 155889, 70787 155707, 70863 155211, 70457 155407), (63732 155747, 63840 156256, 64085 156353, 64012 156014, 64054 155690, 63732 155747), (53588 153375, 53471 153818, 53398 153884, 53329 154115, 53343 154451, 53592 154993, 53452 155344, 53375 155440, 53345 155641, 53380 155982, 53496 156183, 53629 156286, 53612 155762, 53683 155501, 53651 155365, 53705 154908, 53575 154222, 53624 153929, 53685 153219, 53588 153375), (57235 153680, 57329 153970, 57197 154780, 57257 155153, 57237 155276, 57278 155534, 57257 156222, 57476 156070, 57492 155863, 57576 155657, 57606 155178, 57202 154779, 57396 154397, 57487 154314, 57538 154109, 57502 153922, 57657 153484, 57225 153423, 57235 153680), (46263 151562, 46125 152377, 46288 153109, 46147 153921, 46303 154650, 46095 155971, 46482 155780, 46388 155417, 46447 155267, 46401 155026, 46427 154768, 46338 154268, 46234 153909, 46333 153728, 46410 153228, 46357 152713, 46288 152475, 46206 152366, 46272 152227, 46384 151679, 46277 151255, 46307 151176, 46141 150982, 46263 151562), (63743 152778, 63749 153373, 63718 154237, 63777 154527, 63678 154929, 63717 155662, 64025 155544, 63882 155274, 64000 154947, 63737 154926, 64026 154757, 63961 154477, 64124 154045, 63807 153743, 64102 153275, 63910 152940, 63997 152536, 63743 152778), (68831 154157, 68853 154511, 68935 154665, 68861 154859, 68823 155294, 69159 155148, 69341 154998, 69319 154108, 68831 154157), (47717 154277, 47674 155049, 48183 154621, 48172 154277, 48081 154081, 48170 154031, 48167 153688, 47653 153550, 47717 154277), (78490 153983, 78372 154126, 78395 154397, 78360 154795, 78784 154793, 78803 154464, 78711 154310, 78765 154059, 78730 153918, 78751 153796, 78490 153983), (70710 153740, 70602 153819, 70493 153977, 70538 154225, 70496 154517, 70606 154594, 70854 154635, 70789 154155, 70896 153432, 70710 153740), (69037 152560, 68793 152624, 68804 152991, 68882 153129, 68813 153309, 68817 153682, 69123 153612, 69302 153465, 69308 153011, 69360 152780, 69360 152303, 69037 152560), (47856 152110, 47679 152215, 47697 152733, 47653 153508, 48209 153128, 48231 152586, 48180 152082, 47856 152110), (70408 148868, 70473 149204, 70433 149748, 70471 149979, 70403 150238, 70412 150532, 70473 150754, 70432 150939, 70447 151357, 70512 151519, 70815 151823, 70537 152287, 70444 152994, 70475 153080, 70909 153309, 70908 152701, 70850 152588, 70914 152464, 70888 152191, 70919 151856, 70862 151422, 70886 151112, 70848 151038, 70888 150955, 70941 150187, 70841 149877, 70613 149552, 70820 149217, 70902 148698, 70884 148315, 70408 148189, 70408 148868), (78545 152349, 78390 152715, 78335 153158, 78454 153219, 78723 153239, 78716 153033, 78637 152780, 78737 152562, 78736 152177, 78545 152349), (57275 149332, 57541 150035, 57325 150858, 57466 151606, 57321 152420, 57232 152783, 57228 152979, 57338 152847, 57646 152732, 57454 152384, 57644 151656, 57633 151471, 57341 150865, 57547 150037, 57329 149297, 57376 149023, 57275 149332), (74479 151949, 74536 152354, 74462 152912, 74790 152499, 74761 152292, 74869 151866, 74479 151949), (67528 151948, 67377 152363, 67632 152025, 67622 151831, 67466 151766, 67528 151948), (68878 149395, 68985 149612, 68912 149828, 68855 150348, 68892 150412, 69342 150676, 69067 151048, 68869 151245, 68918 151567, 68853 151982, 69357 152144, 69325 151675, 69263 151473, 69298 151219, 69347 150675, 69278 150305, 69288 150120, 69216 149935, 69282 149722, 69302 149134, 68856 148700, 68878 149395), (53629 151451, 53544 151818, 53547 151994, 53674 152109, 53650 151877, 53734 151510, 53724 151378, 53629 151451), (63741 151287, 63764 151429, 63720 151637, 63961 151716, 63874 151426, 63940 151381, 63929 151093, 63741 151287), (47904 150608, 47847 150753, 48053 151003, 47733 150994, 47731 151398, 47881 151684, 48153 151552, 48163 151071, 48120 150596, 47904 150608), (74517 150581, 74548 150799, 74523 151057, 74841 151108, 74731 150749, 74739 150511, 74517 150581), (46255 150027, 46169 150509, 46259 150031, 46203 149654, 46151 149581, 46255 150027), (63739 149111, 63881 149848, 63832 150253, 63972 149852, 63811 149478, 64105 149010, 63819 148746, 63739 149111), (136812 149201, 136658 149819, 136793 149767, 136888 149605, 137001 149187, 136812 149201), (65792 149323, 65714 149689, 65857 149351, 65852 149265, 65771 149181, 65792 149323), (74569 149249, 74581 149258, 74769 148808, 74569 149249), (72802 146626, 72577 147464, 72045 147978, 72063 148380, 72019 148575, 72012 149123, 72648 148921, 73014 148120, 72586 147462, 73053 146715, 73118 146142, 72802 146626), (46124 149076, 46217 148908, 46230 148472, 46124 149076), (67273 148777, 67294 149013, 67454 149069, 67414 148879, 67549 148451, 67273 148777), (69177 147490, 69198 147615, 69009 148116, 69292 147675, 69294 147483, 69177 147490), (70644 147044, 70626 147223, 70455 147463, 70407 147915, 70809 147754, 70848 147162, 70807 147009, 70644 147044), (63912 147513, 63860 147762, 64010 147516, 64033 147374, 63872 147325, 63912 147513), (179641 143901, 179269 144018, 178732 144497, 178796 144708, 178685 145126, 178868 145464, 178579 145612, 178731 146391, 178677 146679, 178925 146788, 179068 146714, 179193 146150, 179120 145937, 179508 145842, 179438 145472, 179811 145368, 180208 144892, 180234 144458, 180520 144273, 180440 143870, 180023 143838, 179641 143901), (72854 144925, 72847 145230, 73096 145356, 73002 145022, 73091 144594, 72854 144925), (29369 143801, 29414 144177, 29775 144161, 30074 144289, 29846 144059, 29741 143724, 29369 143801), (72836 143128, 72748 143306, 72761 143536, 72673 143972, 73103 143923, 73102 143746, 73004 143469, 73096 143165, 73109 142870, 72836 143128), (214087 143097, 213856 143626, 214142 143746, 214285 143897, 214509 143890, 214833 143746, 214531 143156, 214400 143089, 214172 142774, 214087 143097), (215788 143249, 215606 143533, 215825 143862, 216001 143875, 216421 143745, 216392 142954, 215788 143249), (196122 143060, 196145 143128, 196033 143726, 196105 143863, 196783 143655, 196187 142712, 196122 143060), (210363 137606, 210295 138013, 210362 138859, 210273 139830, 210325 140248, 210287 140340, 210324 140717, 210219 141522, 210334 142654, 210280 142925, 210070 143158, 209988 143524, 210048 143550, 210253 143839, 210439 143846, 210806 143687, 210743 143317, 210486 142999, 210474 142615, 210568 141965, 210541 141434, 210531 140661, 210501 139895, 210556 139360, 210468 138353, 210511 138072, 210500 137657, 210380 136798, 210363 137606), (208834 133733, 208849 134125, 208130 134105, 207982 134235, 207983 134382, 207914 134623, 207881 135185, 207785 135986, 207808 136755, 207765 137542, 207813 138305, 207766 139099, 207830 139509, 207762 139869, 207857 140231, 207873 141083, 207789 141388, 207860 141782, 207900 142282, 207957 142686, 207938 142922, 207678 143247, 207641 143391, 207955 143694, 208155 143668, 208252 143708, 208532 143593, 208830 143841, 208926 143843, 209133 143756, 208946 142640, 208963 141932, 208922 141491, 208943 141097, 208939 140097, 208805 139584, 208817 139525, 208806 138809, 208814 138770, 208741 137874, 208725 137280, 208732 137201, 208712 136508, 208673 136281, 208810 135706, 208841 134922, 208786 134815, 208878 134320, 208902 133760, 208906 133321, 208834 133733), (211852 143319, 211732 143619, 211818 143797, 211917 143805, 212291 143684, 212355 143717, 212455 143459, 212051 143027, 211912 142911, 211852 143319), (197247 143463, 197159 143551, 197275 143538, 197655 143804, 197723 143784, 197651 143379, 197247 143463), (199039 143036, 198644 143375, 198594 143545, 199089 143798, 199253 143787, 199404 143711, 199403 143324, 199201 142992, 199195 142416, 199039 143036), (192401 135137, 192451 135538, 192409 136552, 192478 137081, 192380 137496, 192344 138668, 192357 139440, 192301 140158, 192347 140994, 192303 141696, 192314 142165, 192368 142443, 192337 142935, 192016 143412, 192058 143782, 192445 143739, 192606 143792, 192880 143561, 192771 143139, 192529 142881, 192590 142478, 192582 142237, 192680 142065, 192627 141923, 192722 141196, 192568 140689, 192620 140531, 192578 140352, 192453 140190, 192619 139907, 192677 139620, 192505 139110, 192620 138981, 192362 138664, 192648 138058, 192569 137832, 192596 137577, 192519 136683, 192424 136321, 192569 135506, 192522 135131, 192415 134726, 192401 135137), (204464 143160, 204482 143482, 204792 143784, 205070 143709, 205147 143630, 205151 142910, 204464 143160), (190046 143400, 189933 143593, 190176 143603, 190456 143770, 190518 143433, 190470 143059, 190180 142766, 190046 143400), (193816 143304, 193791 143699, 193977 143679, 194089 143743, 194339 143692, 194615 143473, 193921 143077, 193816 143304), (188625 138913, 188485 139340, 188433 139740, 188487 140114, 188696 140444, 188479 140891, 188419 141295, 188461 141671, 188655 142005, 188595 142797, 188421 143108, 188396 143322, 188194 143417, 188161 143692, 188356 143669, 188466 143734, 188716 143686, 188952 143733, 188920 143484, 188806 143127, 188646 142802, 188751 142017, 188688 141291, 188746 140921, 188725 140824, 188717 140110, 188662 139736, 188732 139373, 188717 139275, 188747 138408, 188625 138913), (202785 143172, 202878 143534, 203301 143711, 203536 143601, 203671 143310, 202949 142873, 202785 143172), (201195 142717, 200890 142760, 201032 143162, 200957 143285, 201088 143286, 201240 143596, 201428 143619, 201616 143697, 201801 143542, 201869 143424, 201795 143055, 201410 142548, 201195 142717), (206282 142731, 206250 142949, 206137 143232, 206122 143420, 206313 143632, 206542 143694, 206752 143636, 206870 143402, 206891 143210, 206662 142685, 206282 142731), (181212 142495, 181065 142923, 180983 143333, 181147 143519, 181380 143612, 181584 143589, 181727 143345, 181749 143124, 181475 142985, 181236 142489, 181151 142092, 181212 142495), (182863 143594, 183201 143612, 183286 143478, 182775 143100, 182863 143594), (200234 143484, 200516 143602, 200647 143370, 200257 143328, 200234 143484), (184893 142960, 184222 143169, 184102 143139, 184470 143541, 184630 143589, 184988 143082, 185158 143063, 184932 142716, 184893 142960), (179573 143332, 179653 143398, 179928 143235, 179932 143101, 179675 142630, 179573 143332), (51816 142917, 51852 143065, 51828 143222, 52000 143273, 51971 143033, 52026 142632, 51816 142917), (214134 138896, 214126 140401, 214118 140477, 214138 141223, 214090 142012, 214172 142736, 214298 142482, 214369 142160, 214246 141969, 214230 141198, 214185 140435, 214229 139648, 214140 138897, 214165 138119, 214157 138007, 214134 138896), (69390 142136, 69233 142635, 69412 142115, 69226 141773, 69390 142136), (72913 139495, 72959 139583, 72733 140370, 72739 140512, 73116 141101, 72723 141810, 72733 142185, 73017 142321, 72922 141942, 72970 141825, 73161 141097, 72849 140402, 73175 139699, 73208 139294, 72753 138960, 72913 139495), (201355 141206, 201321 141508, 201399 141613, 201362 141977, 201412 142168, 201498 142056, 201536 141667, 201467 141207, 201416 141161, 201355 141206), (198788 141158, 198757 141556, 198796 141945, 199199 142075, 199227 141871, 199169 141480, 199205 141092, 199184 140881, 198788 141158), (202921 141605, 202964 141185, 202941 141081, 202921 141605), (199074 138325, 199190 139117, 199082 139872, 199125 140279, 199179 140431, 199152 139928, 199194 139119, 199156 138740, 199142 138062, 199074 138325), (206426 134601, 206427 134809, 206586 135462, 206571 135892, 206431 136168, 206605 137019, 206563 137800, 206576 137868, 206576 138544, 206552 139334, 206683 140304, 206697 140150, 206673 139430, 206723 138652, 206771 138591, 206722 138558, 206655 137873, 206700 137089, 206730 137051, 206698 137032, 206700 136285, 206668 135906, 206697 135544, 206736 135499, 206705 135464, 206729 134764, 206636 134371, 206426 134601), (182757 140117, 182978 139890, 182970 139688, 182756 139415, 182757 140117), (46050 139560, 46244 139854, 46241 139565, 46121 139382, 46050 139560), (72777 137718, 72692 138174, 72813 138483, 72738 138845, 72970 138501, 73088 138408, 73181 138255, 73130 137816, 72994 137658, 72760 137538, 72777 137718), (182758 138438, 182931 138316, 182897 138157, 182758 137977, 182758 138438), (188636 137310, 188685 137711, 188752 137882, 188755 137737, 188698 137158, 188636 137310), (46121 137256, 46077 137283, 46084 137516, 46224 137243, 46194 136964, 46121 137256), (210344 135647, 210405 136230, 210462 135641, 210385 135274, 210391 134870, 210344 135647), (72906 134969, 72941 134937, 72764 134691, 72906 134969), (74361 134456, 74384 134644, 74477 134648, 74470 134540, 74596 134115, 74361 134456), (81455 133200, 81485 133392, 81339 133738, 81316 133962, 81478 133782, 81614 133460, 81630 133195, 81455 133200), (70938 133183, 70805 133615, 71002 133220, 71022 133051, 70779 132835, 70938 133183), (77847 131676, 77788 131955, 77850 132063, 77837 132269, 77906 132435, 77887 132550, 78169 132097, 78162 131851, 78033 131625, 77812 131490, 77847 131676), (81292 131487, 81392 131868, 81389 132130, 81624 132031, 81603 131810, 81657 131454, 81292 131487), (70718 131287, 70767 131679, 70750 132085, 71085 131900, 71044 131602, 71079 131244, 70718 131287), (74386 131074, 74260 131394, 74268 131595, 74367 131855, 74604 131960, 74588 131629, 74422 131452, 74550 131149, 74551 130893, 74386 131074), (77804 130253, 77939 130489, 77817 130784, 77812 131076, 78037 130849, 78132 130586, 78105 130443, 78157 130204, 78076 130062, 77802 130024, 77804 130253), (81410 129924, 81311 130059, 81347 130329, 81269 130759, 81676 130674, 81578 130265, 81695 129686, 81410 129924), (67444 130264, 67351 130615, 67542 130306, 67569 130084, 67344 129992, 67444 130264), (70929 129619, 70760 129920, 70776 130126, 70693 130553, 71090 130462, 71066 130046, 71137 129825, 71099 129649, 71138 129420, 70929 129619), (72724 130290, 72720 130466, 72864 130522, 72802 130346, 72915 129980, 72724 130290), (74571 129085, 74220 129878, 74223 130039, 74422 130211, 74330 129927, 74637 129110, 74642 129003, 74406 128733, 74571 129085), (79869 129183, 79730 129613, 79936 129208, 79941 129100, 79831 129039, 79869 129183), (77774 128527, 77877 128955, 77793 129458, 78176 129201, 78123 128887, 78203 128434, 77774 128527), (67151 128626, 67245 128768, 67173 128978, 67212 129164, 67177 129363, 67386 129198, 67560 128903, 67538 128483, 67444 128325, 67161 128256, 67151 128626), (69288 128983, 69201 129289, 69346 129014, 69360 128877, 69243 128841, 69288 128983), (81431 126754, 81150 126887, 81276 127434, 81376 127608, 81664 127916, 81464 128283, 81297 128404, 81253 128508, 81311 128788, 81309 129010, 81413 129149, 81700 129270, 81685 128903, 81604 128707, 81682 128490, 81662 128305, 81768 127937, 81656 127530, 81721 127167, 81598 126772, 81607 126582, 81431 126754), (208804 128730, 208921 129178, 208937 128306, 208923 127968, 208804 128730), (63990 128884, 63952 129150, 64113 128851, 63954 128684, 63990 128884), (71047 127649, 71106 127709, 70819 128176, 70735 128764, 70831 128948, 71126 129085, 71096 128690, 70982 128518, 71111 128334, 71107 128097, 71183 127640, 70808 127105, 71047 127649), (74255 125580, 73924 125774, 74301 126447, 74409 126804, 74283 127081, 74184 127651, 74255 128010, 74242 128326, 74529 128031, 74643 127670, 74630 127369, 74527 127158, 74609 126900, 74590 126715, 74858 125845, 74824 125528, 74255 125580), (76402 127808, 76269 128267, 76330 128302, 76303 128223, 76481 127840, 76480 127726, 76330 127582, 76402 127808), (65665 127994, 65663 128172, 65795 128146, 65782 128006, 65853 127725, 65665 127994), (79797 127653, 79770 127860, 79953 127790, 79910 127516, 79752 127456, 79797 127653), (77925 127003, 77798 127121, 77819 127420, 77781 127821, 78208 127795, 78237 127505, 78174 127322, 78198 127060, 78158 126885, 77925 127003), (67259 125562, 66855 125773, 67081 126243, 67294 126429, 67179 126862, 67244 127218, 67169 127718, 67609 127555, 67622 127420, 67558 127130, 67552 126756, 67434 126777, 67547 126728, 67479 126378, 67675 126237, 67811 125899, 67704 125541, 67259 125562), (69195 127624, 69365 127599, 69335 127262, 69160 127259, 69195 127624), (63943 127346, 63911 127582, 64034 127383, 64190 127279, 64022 127265, 63912 127201, 63943 127346), (72779 126862, 72701 127179, 72871 126906, 72865 126775, 72686 126594, 72779 126862), (75992 125549, 75668 125683, 75799 126035, 76147 126328, 76186 126813, 76344 127049, 76463 127062, 76465 126956, 76298 126673, 76510 126432, 76690 125791, 76598 125786, 76470 125622, 76345 125596, 76310 125507, 75992 125549), (46081 126428, 46176 126790, 46166 127047, 46379 126947, 46496 126702, 46439 126403, 46153 126355, 46081 126428), (70541 125538, 70628 125685, 70609 126055, 70678 126401, 70863 126613, 70776 126992, 70805 127017, 71162 126966, 71169 126845, 71030 126566, 71233 126363, 71390 125689, 70936 125751, 70707 125486, 70541 125538), (49675 126499, 49703 126669, 49842 126852, 49872 126552, 49820 126308, 49675 126499), (68981 125524, 68651 125668, 68769 126024, 69026 126341, 69205 126680, 69170 126850, 69299 126767, 69277 126660, 69475 126343, 69661 125780, 69593 125776, 69369 125472, 68981 125524), (65589 125667, 65253 125812, 65212 125765, 65142 125855, 65215 125900, 65405 126242, 65608 126503, 65578 126680, 65836 126784, 65735 126468, 65953 126284, 66138 125876, 66124 125586, 65589 125667), (72563 125677, 72242 125847, 72643 126501, 72945 126299, 73144 125912, 73113 125609, 72943 125584, 72563 125677), (77678 125907, 77647 126146, 77696 126374, 77872 126335, 78283 125907, 78337 125728, 77918 125800, 77792 125661, 77678 125907), (64671 125560, 64367 125680, 64504 126021, 64818 125824, 64900 125534, 64671 125560), (61578 125669, 61661 125862, 61853 126013, 62126 125713, 62132 125518, 61578 125669), (57307 125677, 57331 125713, 57818 125704, 57827 125535, 57307 125677), (50780 119092, 50641 119591, 50387 119820, 50572 119976, 50753 119874, 51023 119515, 51061 119248, 51035 118923, 50780 119092), (52440 110342, 52318 110762, 52658 110283, 52481 110291, 52381 110176, 52440 110342), (90492 73880, 90508 74097, 90745 74443, 90898 74412, 91006 74251, 91250 74080, 91317 73938, 90648 73370, 90492 73880), (95409 74279, 95803 74309, 96000 74157, 95493 73769, 95409 74279), (89095 73380, 89036 73436, 89041 73726, 88737 73881, 88840 74250, 89211 74302, 89346 74254, 89588 74015, 89348 73541, 89359 73292, 89095 73380), (101213 71532, 101237 72214, 101296 72603, 101323 73291, 101161 73606, 101101 73936, 101134 74004, 101499 74244, 101612 74263, 101733 74170, 101926 73735, 101714 73229, 101616 72809, 101711 72599, 101678 72155, 101756 72135, 101745 71291, 101226 71130, 101213 71532), (92948 73383, 92727 73994, 92893 74248, 93180 74242, 93302 74116, 93081 73553, 93314 73641, 93055 73379, 92931 73057, 92948 73383), (96900 73796, 96690 73802, 96952 74201, 97020 74037, 97505 74035, 97612 73826, 97137 73654, 96900 73796), (98362 73445, 97755 73851, 97925 74101, 98106 74134, 98210 74086, 98432 73470, 98397 73368, 98362 73445), (99658 71587, 99664 72041, 99726 72328, 99707 72423, 99859 73116, 99716 73360, 99566 73417, 99467 73644, 99544 74021, 99650 74082, 100045 74129, 100243 73875, 100126 73509, 99968 73194, 99934 72477, 100006 72364, 100018 72192, 99907 71767, 99985 71590, 99917 71429, 100081 71347, 100079 71161, 99631 70867, 99658 71587), (93951 73986, 94226 74112, 94284 73920, 94076 73750, 93951 73986), (102889 72361, 102983 73121, 102920 73391, 102831 73543, 102790 73943, 103141 74099, 103377 74057, 103545 73782, 103350 73432, 103069 73103, 102980 72343, 102892 72123, 102889 72361), (98110 71878, 98302 72616, 98266 71965, 98116 71143, 98110 71878), (90761 71701, 90857 72063, 90827 72078, 90900 72333, 90888 72068, 90955 71667, 90812 71636, 90761 71701), (95501 69458, 95481 69538, 95570 70204, 95530 70315, 95579 70560, 95545 70704, 95624 70940, 95723 71065, 95824 71437, 95810 71834, 95894 71964, 95828 71439, 95789 70716, 95801 70659, 95728 69976, 95753 69884, 95722 69623, 95746 69494, 95652 69119, 95502 68753, 95470 68554, 95501 69458), (102856 66392, 102874 66939, 102964 67569, 102958 67907, 102886 68094, 102956 68591, 102847 68705, 102839 68908, 103170 69206, 103375 69813, 103364 69213, 103331 68484, 103270 67742, 103310 67551, 103243 67012, 103320 66728, 103311 66326, 103019 66098, 102850 65661, 102856 66392), (101279 66021, 101325 66687, 101328 67182, 101446 67817, 101369 67957, 101441 68505, 101282 68592, 101267 69247, 101725 69460, 101797 69595, 101872 69518, 101820 69431, 101714 68364, 101664 67981, 101624 67258, 101656 67131, 101556 66517, 101681 66350, 101653 66245, 101750 66153, 101748 65922, 101289 65615, 101279 66021), (99721 65930, 99940 67172, 99889 66588, 99841 65848, 99720 65436, 99721 65930), (98163 65632, 98248 66055, 98212 65657, 98113 64989, 98163 65632), (98218 59856, 98262 60034, 98199 59533, 98218 59856), (97930 57562, 97989 57883, 98264 57538, 98224 57226, 97930 57562), (98274 57069, 98352 56767, 98340 56650, 98212 56572, 98274 57069)), ((225644 179887, 225630 181166, 225501 181198, 225501 201627, 225491 202402, 225469 202910, 225469 214698, 189190 214698, 189122 214369, 189502 214263, 189441 213910, 189797 213801, 189863 213394, 190234 213290, 190305 212881, 190232 212521, 190597 212416, 190527 212045, 190904 211955, 190968 211543, 191333 211450, 191398 211033, 191769 210929, 191702 210561, 192075 210458, 192010 210090, 192387 209987, 192509 209189, 192779 209101, 192659 208948, 192840 208898, 192807 208707, 193184 208605, 193131 208320, 192997 208265, 192914 208042, 193133 208105, 193491 208130, 193607 207330, 193975 207223, 194033 206825, 194399 206727, 194460 206322, 194830 206217, 194769 205845, 195094 205753, 195088 205710, 195137 205727, 195088 205374, 195460 205270, 195555 204465, 195925 204377, 195870 203991, 196248 203890, 196189 203517, 196562 203414, 196571 202978, 196982 202909, 197032 202509, 196980 202140, 197349 202039, 197301 201665, 197550 201591, 197462 201369, 197687 201403, 197718 201161, 198088 201065, 198164 200648, 198098 200293, 198459 200201, 198419 199815, 198786 199740, 198819 199692, 198820 199339, 198731 199328, 198742 199230, 199210 199075, 199243 198805, 199612 198706, 199570 198329, 199940 198226, 199894 197850, 200267 197748, 200313 197351, 200344 197336, 200361 196961, 200721 196845, 200705 196490, 201051 196387, 201007 195994, 201379 195890, 201419 195494, 201681 195420, 201733 195337, 201797 195323, 201850 195374, 202914 195085, 203286 195013, 203608 195279, 204380 195071, 204758 194997, 205145 195245, 205915 195038, 206292 194965, 206675 195213, 207472 195028, 207513 194984, 207433 194326, 208139 194763, 208187 194751, 208198 194796, 209310 194493, 209652 194785, 210783 194487, 211127 194769, 211887 194564, 211904 194572, 212647 194363, 212663 193969, 213028 193869, 213040 193607, 212897 193507, 212880 193203, 213194 193427, 213421 193365, 213402 192984, 213778 192883, 213784 192115, 214174 191995, 214180 191626, 214532 191562, 214522 191129, 214893 191026, 214877 190640, 215252 190538, 215271 190150, 215642 190045, 215655 189653, 215771 189619, 215781 189353, 216031 189376, 216044 189162, 216112 189138, 216050 188786, 216008 188778, 216004 188689, 216072 188762, 216421 188730, 216428 188669, 216798 188563, 216789 188184, 217163 188081, 217146 187723, 217067 187713, 217038 187607, 217146 187610, 217311 187424, 217524 187367, 217531 187200, 217904 187096, 217905 186326, 218274 186231, 218267 185837, 218640 185733, 218649 185345, 219023 185239, 219029 184851, 219401 184748, 219396 183984, 219761 183882, 219768 183486, 220141 183382, 220142 183149, 220015 183028, 219880 182796, 220142 182801, 220210 182976, 220523 182895, 220515 182507, 220895 182408, 220888 182020, 221261 181916, 221267 181139, 221642 181032, 221644 180654, 222008 180546, 222009 180160, 222387 180058, 222385 179669, 222756 179566, 225644 179887)), ((188743 194702, 188639 195415, 187979 195596, 187463 195051, 187300 194412, 187962 194231, 188743 194702)), ((191618 194689, 191729 195343, 191069 195524, 190334 195040, 190395 194339, 191054 194158, 191618 194689)), ((185622 194782, 185772 195404, 185067 194934, 185117 194659, 185378 194526, 185622 194782)), ((202513 194804, 202501 195148, 202174 195210, 201897 194972, 201465 194406, 202129 194224, 202513 194804)), ((205441 194777, 205470 195090, 205161 195195, 204822 194945, 204525 194343, 205184 194161, 205441 194777)), ((115949 193379, 115652 193181, 115715 193005, 116038 192923, 115949 193379)), ((116700 192741, 116596 193015, 116359 193081, 116203 192877, 116394 192683, 116521 192667, 116700 192741)), ((77515 185401, 77725 185593, 77537 185918, 77288 185961, 76960 185801, 77113 185262, 77515 185401)), ((222757 179018, 222796 179176, 222834 179180, 222757 179400, 222524 179239, 222523 178999, 222757 179018)), ((126075 177767, 125917 178099, 125649 178316, 125278 178528, 125164 178494, 125215 178384, 125585 178287, 125820 177765, 126075 177767)), ((22835 173891, 22683 174001, 22336 173940, 22684 173657, 22835 173891)), ((23062 172597, 23098 172656, 23435 172783, 23506 173007, 23433 173045, 23083 173072, 23138 173420, 23058 173608, 22788 173515, 22816 173257, 22943 173086, 22915 172943, 22945 172697, 22921 172558, 23062 172597)), ((24493 172273, 23903 172529, 23686 172494, 23808 172066, 24493 172273)), ((24475 170728, 24357 171043, 24352 171329, 23809 171154, 23712 170835, 23808 170583, 24475 170728)), ((131176 170166, 130997 170524, 130804 170766, 130591 170824, 130405 170764, 130636 170654, 130806 170268, 130873 170243, 130909 170143, 131176 170166)), ((87703 170065, 87660 170256, 87487 170304, 87320 169991, 87664 169896, 87703 170065)), ((131726 168823, 131426 168980, 131353 168974, 131586 168499, 131745 168460, 131726 168823)), ((91043 165273, 90853 165457, 90718 165509, 90523 165236, 90869 165141, 91043 165273)), ((22740 165058, 22708 165423, 22614 165405, 22458 165000, 22685 164907, 22740 165058)), ((152546 163146, 152437 163506, 152211 163429, 152010 163292, 152388 163115, 152546 163146)), ((23180 162555, 23054 162803, 22692 162698, 22885 163023, 22753 163130, 22685 163270, 22142 163084, 22674 162691, 22697 162314, 23054 162234, 23180 162555)), ((206641 162618, 206796 162618, 206808 162777, 206650 162820, 206360 162428, 206641 162618)), ((30210 162566, 30322 162719, 29848 162664, 29897 162422, 30111 162273, 30210 162566)), ((30545 162087, 30625 162207, 30181 162185, 30267 161930, 30497 161755, 30545 162087)), ((31148 161146, 30929 161241, 30951 161675, 30542 161699, 30589 161371, 30882 160992, 31148 161146)), ((31592 160378, 31742 160596, 31624 160760, 31258 160726, 31138 160372, 31214 160276, 31592 160378)), ((32017 159366, 31997 159750, 32042 159807, 31822 159797, 31884 159673, 31940 159378, 32014 159263, 32380 159258, 32017 159366)), ((32534 158827, 32462 158906, 32382 159256, 32162 158929, 32434 158544, 32534 158827)), ((152430 153099, 152546 153564, 152446 153974, 152343 154012, 152176 154193, 151922 154317, 151807 154302, 151802 154433, 151495 154905, 151309 155116, 150914 155802, 150871 155804, 150870 155851, 150646 156077, 150562 156324, 150073 157020, 149641 157496, 149567 157759, 149356 158130, 149274 158138, 149254 158232, 149011 158461, 148837 158735, 148458 159215, 148556 158811, 148724 158379, 148883 158222, 148958 157926, 149103 157735, 149316 157655, 149359 157429, 149737 156738, 150003 156403, 150135 156024, 150417 155818, 150505 155564, 150599 155434, 150859 154975, 151128 154586, 151413 154383, 151556 154020, 151815 153788, 151902 153242, 151911 152990, 152256 152794, 152430 153099)), ((209437 158793, 209460 159173, 209128 158877, 209263 158588, 209437 158793)), ((83131 157752, 82774 158528, 82105 158742, 81770 158123, 82047 157317, 82720 157208, 83131 157752)), ((32851 158392, 32811 158440, 32565 158430, 32715 158295, 32793 158110, 32851 158392)), ((33547 157387, 33627 157494, 33315 157450, 33355 157287, 33511 157131, 33547 157387)), ((39116 145521, 39364 145607, 39465 145590, 39635 145639, 39593 145824, 39925 146523, 40177 146819, 40363 146603, 40306 146231, 40480 145992, 40628 146143, 40835 146156, 41032 146419, 41083 146572, 40564 146585, 40726 146890, 40702 147036, 40562 147117, 40287 147099, 40358 147379, 40157 147822, 40193 147892, 40111 147893, 39957 148076, 39861 148291, 39896 148368, 39807 148367, 39593 148514, 39544 148835, 39480 148838, 39246 149007, 39189 149406, 39031 149520, 38731 149427, 38695 149473, 38370 148754, 38200 147828, 38271 147564, 38208 147453, 38235 147390, 38584 147478, 38709 147555, 38773 147426, 38757 147127, 38603 146698, 38544 146326, 38576 145772, 38732 145464, 39116 145521)), ((43859 142156, 43963 142503, 43646 142341, 43370 142289, 43457 141959, 43859 142156)), ((44171 141682, 44007 141948, 43683 141581, 43880 141391, 44171 141682)), ((24416 45497, 24693 45678, 25200 45679, 25466 45668, 25974 45669, 26239 45658, 26747 45659, 27020 45680, 27527 45681, 27792 45669, 28300 45670, 28566 45658, 29073 45659, 29338 45646, 29845 45647, 30119 45671, 30626 45672, 30892 45658, 31399 45659, 31664 45644, 32172 45645, 32446 45673, 32953 45674, 33218 45658, 33725 45659, 33989 45642, 34497 45643, 34773 45678, 35280 45679, 35544 45658, 36051 45659, 36315 45638, 36822 45639, 37086 45618, 37593 45619, 37870 45658, 38377 45659, 38639 45631, 39147 45632, 39409 45604, 39917 45605, 40196 45658, 40703 45658, 40963 45619, 41730 45617, 42226 45683, 42524 45767, 42787 45684, 43283 45687, 43545 45602, 44533 45603, 44832 45795, 59563 45794, 59688 45676, 60180 45673, 60322 45630, 60554 45847, 60716 46268, 60907 46296, 61682 46292, 61904 46485, 62076 46292, 63233 46292, 63455 46488, 67332 46486, 67504 46292, 68660 46292, 68883 46489, 69658 46488, 70039 46678, 78962 46675, 79133 46472, 79903 46483, 80127 48386, 80383 48432, 80159 48711, 80166 48815, 79153 49961, 79190 50343, 78293 51384, 78522 51502, 78206 51657, 78225 51863, 77930 52172, 78046 52480, 78186 52613, 77967 52832, 77830 52716, 77559 52668, 77515 52628, 76871 53397, 76911 53776, 76580 54130, 76297 54514, 76422 54717, 76353 54952, 75925 55085, 75942 55355, 75261 56022, 75284 56139, 75631 56439, 75354 56695, 75182 56552, 74638 57171, 74637 57198, 74304 57591, 73293 58838, 73343 59217, 73068 59463, 73003 59568, 73039 59902, 72696 60203, 72359 60608, 71013 62293, 71062 62667, 70726 63087, 70378 63374, 70424 63748, 70078 64026, 69343 64944, 69460 65598, 69208 65831, 68818 66330, 68532 66440, 68117 66973, 68167 67352, 67460 67858, 67504 68234, 67291 68267, 67356 68464, 67153 68491, 67216 69045, 66837 69105, 66881 69479, 66510 69535, 66538 69906, 66176 69964, 65816 70214, 65862 70591, 65510 70828, 65553 71203, 65254 71251, 65281 71726, 65668 72320, 64891 72061, 64935 72458, 64607 72515, 64612 72559, 64564 72547, 64598 72895, 64228 72956, 64272 73342, 63897 73399, 63944 73789, 63565 73847, 63609 74236, 63165 74504, 63485 74913, 62921 74883, 62936 75038, 62560 75104, 62624 75596, 62911 75825, 62944 76077, 62690 76122, 62461 76069, 62300 76096, 62320 76311, 61948 76379, 61984 76755, 61615 76819, 61663 77214, 61464 77254, 61486 77432, 61304 77417, 61330 77666, 60940 77749, 60997 78122, 60812 78228, 60856 78585, 61066 78879, 60326 78884, 60370 79264, 59992 79337, 60033 79627, 60176 79697, 60192 79828, 60061 79854, 59948 79740, 59662 79792, 59710 80174, 59417 80237, 59426 80317, 59344 80316, 59380 80631, 59006 80706, 59051 81093, 58935 81120, 58967 81381, 58707 81408, 58722 81553, 58336 81640, 58391 82016, 58246 82090, 58251 82304, 58053 82367, 58069 82570, 57710 82723, 57757 83119, 57543 83168, 57563 83329, 57396 83309, 57426 83580, 57212 83632, 57509 84009, 57085 83905, 57100 84046, 56906 84091, 56905 84257, 56745 84291, 56771 84511, 56557 84561, 56757 84851, 56409 84700, 56434 84976, 56076 85132, 56109 85511, 55749 85672, 55804 86049, 55424 86133, 55470 86511, 55094 86599, 55145 86982, 54763 87067, 54814 87449, 54438 87539, 54486 87922, 54111 88013, 54155 88392, 53782 88487, 53829 88871, 53459 89006, 53510 89393, 53137 89521, 53187 89903, 52802 89990, 52859 90376, 52703 90419, 52710 90624, 52515 90692, 52533 90854, 52151 90944, 52201 91272, 52306 91308, 52250 91667, 52034 91376, 51831 91427, 51879 91810, 51495 91900, 51551 92263, 51626 92274, 51566 92388, 51440 92321, 51177 92389, 51224 92772, 50962 92858, 50975 92967, 51310 93535, 50936 93537, 50649 93353, 50528 93387, 50577 93769, 50267 93859, 50165 94288, 50128 94307, 49991 94714, 49647 94794, 49270 95699, 48904 95815, 48694 96638, 48743 97052, 48853 97371, 48734 97692, 48458 97769, 48332 97513, 48248 97434, 48196 97549, 47810 97630, 47535 98478, 47611 98487, 47576 98586, 47522 98510, 47124 98568, 46867 99452, 46666 99899, 46336 99929, 46100 100429, 46451 100333, 46537 100189, 46563 100324, 46492 100589, 46239 100659, 46047 100588, 45956 100874, 45560 100944, 45274 101782, 45602 101736, 45688 101585, 45774 101826, 45571 101825, 45016 102298, 44728 102233, 44593 102414, 44398 103233, 44170 103691, 43893 103620, 43786 103749, 43552 104250, 43393 104889, 43475 105047, 43290 105457, 43260 105105, 42999 105123, 42516 105998, 42898 105981, 42778 106445, 42451 106217, 42462 106099, 42175 106075, 42048 106213, 41901 107029, 41647 107479, 41328 107496, 41263 107547, 40991 108053, 40938 108396, 41320 108589, 40870 108695, 40821 108864, 40461 108966, 40166 109442, 39916 109898, 39829 110305, 39431 110378, 39382 110798, 39549 110775, 39417 110972, 39457 111172, 39104 111284, 39169 111630, 38792 111757, 38588 111998, 38485 112383, 38346 112377, 38285 112664, 37909 112761, 37845 113179, 37734 113547, 37423 113581, 37397 113690, 37482 114047, 37105 114157, 37190 114514, 37029 114567, 37004 114799, 36791 114846, 36754 115023, 36402 115058, 36360 115100, 36322 115532, 35926 115607, 36030 116002, 35610 116075, 35729 116457, 35880 116433, 35978 116715, 35708 116634, 35719 116476, 35304 116542, 35299 116972, 35376 116958, 35363 117042, 35287 117063, 35230 117373, 34881 117419, 34856 117488, 34934 117850, 34546 117940, 34628 118322, 34232 118411, 34196 118820, 33802 118904, 33785 119312, 33929 119293, 33978 119588, 34239 119951, 33966 119909, 33504 120034, 33504 120164, 33090 120298, 33318 120877, 32753 120620, 32685 121180, 32362 121273, 32332 121391, 32369 121657, 31958 121737, 32041 122132, 31617 122202, 31633 122600, 31865 122572, 31839 122824, 31605 122889, 31559 123007, 31223 123099, 31217 123135, 30926 123216, 31072 123565, 31093 123746, 30912 123795, 30926 123985, 30558 124091, 30513 124480, 30154 124540, 30114 124986, 29712 125062, 29777 125465, 29366 125541, 29439 125946, 29018 126018, 29002 126835, 28643 126893, 28609 127338, 28206 127410, 28214 127831, 27819 127911, 27875 128275, 28093 128258, 28109 128478, 27946 128686, 27937 129141, 27518 129029, 27487 129175, 27139 129261, 27110 129681, 26752 129730, 26720 129765, 26763 130166, 26373 130253, 26413 130652, 26000 130726, 26028 131148, 25959 131496, 25646 131601, 25652 132019, 25406 132095, 25410 132217, 25290 132235, 25292 132505, 24925 132562, 24912 133001, 24503 133074, 24535 133496, 24127 133567, 24169 133977, 23759 134053, 23800 134466, 23409 134555, 23407 135337, 23055 135414, 23048 135448, 21448 135412, 21466 134830, 21477 133090, 21471 132505, 21483 127274, 21477 126689, 20543 126499, 20554 125724, 20740 125475, 20742 123147, 20552 123002, 20549 121848, 20739 121598, 20551 121452, 20549 120297, 20739 120048, 20551 119901, 20549 118747, 20739 118497, 20551 118351, 20549 117196, 20738 116947, 20742 113068, 20552 112923, 20549 111769, 20741 111519, 20551 111373, 20549 110219, 20739 109969, 20551 109823, 20549 108668, 20739 108419, 20551 108272, 20546 106531, 20263 106323, 20289 105938, 19975 105771, 19971 105529, 19902 105384, 19903 104888, 20107 104860, 20043 104711, 20055 104570, 20058 103937, 20048 103797, 20057 103019, 20053 101752, 19921 101506, 19914 101119, 20734 100873, 20732 80715, 20725 78390, 20733 77861, 20683 77391, 20673 74375, 20791 74122, 20766 73599, 20920 73346, 20888 72825, 20780 72572, 20826 72049, 20943 71796, 21012 71314, 21026 70499, 21067 69857, 21108 68560, 21174 68195, 21159 67397, 20693 67144, 20633 66757, 20627 65980, 20612 65460, 20611 64297, 20643 63656, 20651 62880, 20644 62747, 20643 61329, 20626 60556, 20633 60033, 20616 59647, 20612 59006, 20626 58617, 20635 57452, 20621 56933, 20637 56543, 20635 55902, 20623 55771, 20605 55130, 20613 54993, 20488 53580, 20498 53443, 20502 52802, 20483 52673, 20484 52032, 20495 51895, 20488 51253, 20464 51125, 20462 50484, 20438 50222, 20439 49193, 20980 48996, 20972 48796, 21054 48617, 22249 48387, 22365 48176, 22528 47991, 22803 46284, 23023 45522, 23179 45567, 23686 45577, 23908 45496, 24416 45497), (27459 128386, 27528 128768, 27898 128695, 27847 128326, 27459 128386)), ((46309 131406, 46100 132193, 45817 132066, 45755 131944, 45798 131545, 45735 131174, 46083 130719, 46309 131406)), ((46265 129867, 46083 130664, 45720 130403, 45769 130003, 45853 129772, 46158 129536, 46265 129867)), ((54828 117709, 54891 117423, 55016 117220, 54828 117709)), ((56066 115552, 56016 115584, 55910 115981, 55820 116114, 55765 116020, 55985 115528, 56047 115473, 56066 115552)), ((59963 111769, 59714 112290, 59647 112321, 59601 112256, 59642 112169, 59706 111568, 59949 111540, 59963 111769)), ((62416 108104, 62244 108298, 62197 108054, 62278 107868, 62506 107656, 62416 108104)), ((57993 100763, 57795 101073, 57770 100618, 58007 100553, 57993 100763)), ((49407 98770, 49043 99607, 48336 99801, 48010 99151, 48287 98338, 48992 98144, 49407 98770)), ((53524 90588, 53555 90831, 53318 90908, 53153 90576, 53273 90546, 53524 90588)), ((56329 85838, 56370 86162, 55836 86037, 56054 85835, 56329 85838)), ((222336 47944, 222395 48012, 222777 48153, 222736 48544, 222779 49314, 222736 49687, 222806 51559, 222701 52375, 222699 53594, 222734 53973, 222663 54767, 222651 55437, 222681 55925, 222655 56215, 222654 57483, 222627 58132, 222624 58654, 222568 59144, 222623 59817, 222677 60190, 222569 60413, 222370 60649, 222312 61066, 222756 61068, 223426 61317, 223377 61372, 222756 61414, 222007 61657, 221730 61613, 221633 61475, 221483 61525, 221260 61479, 221073 61600, 220593 61536, 220524 61179, 220568 61156, 220425 61014, 220480 61180, 220318 61410, 220141 61322, 219901 61479, 219414 61586, 219414 49194, 217175 49194, 217219 49066, 217149 48897, 217135 48627, 217222 48422, 217177 48323, 217350 48304, 218065 47960, 218125 47964, 218516 48221, 218898 48295, 219284 48120, 219664 47874, 220022 48066, 220456 48162, 220840 48174, 221181 48040, 221560 47983, 221979 47772, 222336 47944)), ((86963 56778, 86303 57198, 86321 57587, 85769 57802, 85799 57221, 86214 56722, 86685 56693, 86963 56778)), ((174552 46418, 188121 46412, 188256 46418, 191222 46411, 191357 46418, 194323 46409, 194458 46417, 197425 46407, 197560 46416, 199751 46409, 199886 46418, 201049 46413, 201302 46688, 201824 46740, 202094 46910, 202987 46913, 204017 46885, 204149 46822, 206044 46809, 206360 46660, 206474 46659, 206748 46390, 206861 46384, 207135 46236, 207249 46235, 207522 46465, 207636 46459, 207910 46560, 208023 46555, 208243 46722, 208436 48071, 208472 48065, 208520 48292, 209213 47870, 209605 48229, 209954 48401, 209935 48462, 210024 48635, 210019 48398, 210342 48113, 210415 48115, 210759 47945, 211151 48229, 211538 48432, 211577 48654, 211555 48434, 212313 47984, 212701 48021, 213120 48192, 213452 48383, 213454 48696, 213563 48746, 213515 48380, 213863 48181, 214304 47874, 214692 48624, 214728 48633, 215442 48174, 215865 47811, 216185 47831, 216603 48152, 216919 48328, 216984 48875, 216970 49194, 167425 49194, 168129 48436, 168490 46070, 168738 45582, 168888 45717, 170945 45706, 171214 45716, 174047 45702, 174299 45581, 174552 46418))) \ No newline at end of file diff --git a/stress_benchmark/resources/034.settings b/stress_benchmark/resources/034.settings index ef2d14e75c..a339aa7504 100644 --- a/stress_benchmark/resources/034.settings +++ b/stress_benchmark/resources/034.settings @@ -156,6 +156,7 @@ machine_settings=0 raft_base_extruder_nr=0 z_seam_y=235 wall_overhang_angle=90 +seam_overhang_angle=30 draft_shield_height=10 _plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 travel_retract_before_outer_wall=True @@ -531,7 +532,6 @@ skirt_brim_minimal_length=250 cooling=0 brim_replaces_support=False wall_x_extruder_nr=-1 -support_interface_skip_height=0.2 machine_nozzle_head_distance=3 support_bottom_pattern=grid raft_base_wall_count=1 diff --git a/stress_benchmark/resources/034.wkt b/stress_benchmark/resources/034.wkt index 1fd9aae3aa..d99a6215d8 100644 --- a/stress_benchmark/resources/034.wkt +++ b/stress_benchmark/resources/034.wkt @@ -1 +1 @@ -MULTIPOLYGON (((147289 101492, 147197 101776, 147218 102093, 147259 102076, 147389 102138, 147398 102467, 147648 102288, 147623 102181, 148137 102295, 148172 102346, 148465 102254, 148577 102197, 148901 102061, 149036 102086, 149463 102125, 149272 102163, 148937 102366, 148938 102449, 149117 102596, 149219 102465, 149345 102594, 149476 102549, 149777 102548, 149863 102511, 150134 102496, 150233 102538, 150557 102570, 150547 102600, 150750 102934, 150801 102912, 151257 103199, 151451 103115, 151457 102826, 151757 102643, 152047 102912, 152261 103054, 152386 103243, 152530 103190, 152880 103207, 153247 103211, 154056 103406, 154393 103447, 154973 103599, 155060 103545, 155100 103604, 155982 103648, 156531 103905, 156918 103881, 157384 103888, 157677 103949, 157902 103873, 158295 103870, 158377 103782, 158054 103621, 158326 103620, 158921 103328, 158926 103578, 159080 103506, 159208 103335, 159407 103114, 159605 103018, 160226 102526, 160454 102824, 160833 102936, 161042 102897, 161218 103011, 161202 103295, 161303 103361, 162081 103119, 162153 102960, 162231 103020, 162468 102787, 162676 102742, 162742 102646, 162776 102466, 162854 102390, 162962 102559, 163249 102661, 163345 102847, 163504 102878, 163575 102980, 163720 102792, 164156 102649, 164176 102627, 164599 102346, 165092 102152, 165205 102150, 165383 102040, 165411 101809, 165746 101644, 165778 101795, 165696 102013, 165720 102318, 165786 102277, 166045 102366, 166018 102482, 166117 102372, 166544 102347, 166785 102276, 167055 102137, 167095 102097, 167417 101900, 167985 101878, 167815 101926, 167483 102191, 167483 102296, 167637 102372, 167713 102283, 167818 102353, 167973 102293, 168276 102247, 168355 102202, 168634 102137, 168729 102164, 169044 102134, 169038 102172, 169224 102475, 169279 102434, 169730 102645, 169936 102500, 169916 102187, 170186 101926, 170336 101993, 170532 102185, 170689 102264, 170892 102592, 170596 102599, 170492 102690, 170436 102843, 170787 103124, 170795 103080, 171025 103006, 171096 103077, 171105 103274, 171006 103584, 171207 103683, 171275 103662, 171241 103706, 171403 103852, 171735 103762, 171903 103865, 171927 103976, 171705 104095, 171743 104184, 172213 104283, 172262 104237, 172156 103914, 172619 103682, 172830 103639, 172900 103529, 173094 103391, 173509 103035, 173525 103033, 173757 102815, 173949 102709, 174009 102739, 173927 103058, 173943 103287, 173660 103472, 173661 103525, 173920 103551, 174155 103396, 174209 103301, 174318 103340, 174376 103452, 174456 103374, 174621 103431, 174679 103247, 174853 103089, 175105 103011, 175263 102982, 175356 102906, 175714 102690, 175405 102553, 175611 102412, 176108 102435, 176166 102572, 176510 102732, 176632 102730, 176986 102606, 177088 102927, 177133 102959, 177479 102784, 177730 102912, 178167 103227, 178270 103212, 178415 103103, 178539 103533, 178699 103628, 178735 103533, 178909 103540, 179152 103666, 179293 103595, 179307 103474, 179240 103402, 179321 103154, 179015 102954, 179038 102804, 179405 102930, 179596 103044, 179720 103036, 179802 103097, 180130 102994, 180399 102953, 180492 102849, 180553 102866, 180918 103314, 181124 103658, 181476 103909, 181365 103996, 181444 104116, 181416 104349, 181196 104523, 181401 104621, 181087 104844, 181307 105052, 181639 105108, 181766 104929, 181781 104659, 181904 104457, 182004 104371, 181932 104386, 181860 104168, 181689 104083, 181716 104147, 181611 104066, 181633 104042, 181561 103645, 181772 103522, 182052 103455, 182231 103334, 182687 103358, 182810 103445, 182509 103884, 182265 104017, 182458 104020, 182604 104079, 182724 103953, 182909 103883, 183029 103627, 183041 103537, 182807 103418, 183104 103015, 183072 102882, 183095 102773, 183434 102398, 183774 102329, 184013 102268, 184150 102313, 183900 102554, 183714 102959, 184390 102785, 184555 102987, 184729 103061, 184795 103005, 184985 103022, 185172 102952, 185044 102843, 185017 102948, 184776 102837, 184878 102638, 184946 102590, 185175 102594, 185526 102578, 185595 102639, 185644 102816, 185402 102978, 185495 103165, 185364 103320, 185415 103356, 185993 103497, 186163 103449, 186612 103530, 186680 103465, 186766 103478, 186777 103584, 187095 103697, 187163 103665, 187066 103457, 186900 103293, 186898 102946, 187172 103041, 187449 103056, 187568 103029, 187841 103144, 187874 103185, 188271 103377, 188289 103270, 188431 103097, 188494 103281, 188577 103346, 188718 103324, 188798 103355, 188824 103659, 188957 104299, 188699 104528, 188627 104557, 188605 104774, 188682 104938, 188386 105092, 188546 105183, 188772 105026, 188991 104966, 188852 105161, 188506 105245, 188520 105468, 188639 105778, 188726 105719, 188976 105697, 188978 105558, 189162 105369, 189126 105211, 189352 105060, 189442 105105, 189423 105158, 189636 105486, 189980 105363, 190089 105603, 190257 105596, 190431 105473, 190635 105410, 190804 105487, 190925 105394, 191167 105346, 191407 105385, 191426 105475, 191362 105505, 191270 105644, 191419 105725, 191378 106026, 191441 106239, 191247 106397, 191280 106566, 191357 106635, 191712 106619, 191707 106824, 191589 107117, 191591 107166, 191438 107518, 191486 107489, 191842 107548, 191945 107386, 192289 107018, 192412 106980, 192617 107052, 192768 107194, 192617 107366, 192273 107654, 192528 107597, 192618 107650, 192457 108077, 192327 108078, 192227 108154, 192315 108527, 192460 108725, 192530 108695, 192654 108509, 192824 108653, 192991 108649, 193128 108723, 193342 109074, 193377 109066, 193385 108738, 193412 108477, 193256 108025, 193338 107868, 193523 107742, 193774 108134, 193856 108785, 193928 109098, 193921 109623, 194041 109726, 194014 109968, 194186 109989, 194145 110534, 193970 110609, 193981 111037, 194090 111179, 194208 111406, 194186 111772, 194114 112237, 194141 112431, 193957 112520, 193762 112515, 193785 112803, 193721 112792, 193983 113062, 194376 113386, 194193 113681, 193803 114209, 193782 114331, 193977 114716, 194075 114877, 194258 115254, 194301 115516, 194336 115853, 194190 116248, 193808 116627, 193635 116898, 193616 117188, 193733 117256, 193797 117473, 193881 118035, 194031 118525, 194060 118432, 194108 118157, 194177 118380, 194186 118880, 194156 119052, 194084 119101, 194031 119307, 194017 119558, 194088 120051, 193901 120195, 193881 120255, 193983 120694, 193859 121226, 193808 121271, 193746 121535, 193908 121772, 193921 121907, 194002 121948, 194003 122292, 193919 122553, 193960 122713, 193902 123111, 193803 123527, 193912 124308, 193949 124428, 193696 124892, 193504 125134, 193367 125613, 193270 125520, 193126 125503, 193027 125235, 192970 125483, 192847 125120, 192753 125333, 192676 125797, 192772 125873, 193218 125870, 193261 125628, 193254 125811, 193502 125640, 193600 125861, 193876 125817, 193818 126110, 193718 126306, 193601 126318, 193680 126631, 193663 126855, 193715 126921, 193657 126955, 193649 127144, 193583 127153, 193513 127044, 193313 127280, 193067 127163, 193090 127406, 193269 127607, 193200 127699, 193042 127467, 192830 127658, 192849 127794, 192802 127831, 192756 127762, 192702 127763, 192870 128032, 192668 128408, 192444 128240, 192358 128149, 192245 128156, 192101 128238, 192095 128495, 192108 128781, 192122 128882, 192138 129206, 192122 129242, 192129 129802, 192277 130104, 191858 130546, 191556 130801, 191602 130860, 191494 131002, 191565 131169, 191466 131164, 191423 131224, 191143 131156, 191069 131173, 190979 131391, 191008 131524, 190728 131683, 190703 131723, 191109 131900, 190786 132216, 190699 132356, 190197 132439, 190033 132391, 189869 132499, 189476 132278, 189146 132444, 188863 132755, 188988 132913, 188790 133104, 188982 133184, 189187 133074, 189508 133076, 189871 133116, 190198 133123, 190478 133381, 190250 133530, 190102 133558, 189825 133438, 189535 133412, 189184 133729, 189013 133705, 188688 133186, 188417 133400, 188466 133800, 188343 133827, 188191 134088, 188443 133966, 188634 134119, 188473 134253, 188554 134441, 188748 134657, 188561 134858, 188196 134878, 188048 134714, 187913 134768, 187564 134617, 187037 134670, 186970 134843, 186426 134944, 186325 135023, 185814 134980, 185359 135030, 184937 135137, 184614 135285, 184509 135270, 184229 135295, 184054 135332, 183574 135274, 183031 135044, 182917 135076, 182745 135040, 182557 135142, 182388 135164, 182322 135235, 182611 135504, 182447 135467, 182050 135620, 182111 135323, 182091 135263, 181968 135321, 181618 135392, 181390 135620, 181116 135809, 180936 135876, 180546 136059, 180255 135599, 180163 135526, 179859 135421, 179759 135446, 179567 135417, 179486 135360, 179526 134997, 179438 134867, 179239 134691, 179081 134606, 178876 134648, 178566 134828, 178248 135146, 178103 135168, 178055 135464, 177807 135658, 177624 135329, 177652 135295, 177531 135243, 177372 135070, 177298 134846, 177067 134512, 176768 134856, 176657 134825, 176729 134889, 176593 134881, 176206 135111, 175924 135211, 175953 135492, 175788 135834, 175713 135442, 175715 135305, 175387 135299, 175289 135344, 175387 135388, 175293 135727, 175146 135656, 175151 135572, 175059 135428, 174951 135453, 174890 135224, 174820 135317, 174654 135173, 174554 135176, 174526 135533, 174328 135628, 174253 135554, 174341 135231, 174315 135183, 174377 135009, 174262 135070, 174318 135010, 174226 135030, 173986 134985, 173626 135116, 173525 135006, 173212 135289, 173185 135293, 173246 135038, 173338 134960, 173105 134747, 172823 134798, 172466 134944, 172110 135050, 172058 135122, 171899 135165, 171707 135114, 171739 134916, 171597 134656, 171452 134782, 171125 134705, 171063 134585, 170889 134653, 171053 134748, 170891 134901, 170633 134936, 170627 134984, 170357 135357, 170243 135310, 169999 135031, 170160 134980, 170330 134756, 170245 134710, 169763 134820, 169567 134677, 169650 134401, 169619 134343, 169695 134147, 169843 133896, 169706 133812, 169600 133874, 169504 133838, 169485 133732, 169348 133673, 169205 133740, 169071 133988, 169041 133807, 169099 133767, 169055 133580, 168495 133612, 168605 134014, 168099 134245, 167911 134560, 167522 134827, 167355 134991, 167175 135008, 166950 135205, 167010 134953, 166956 134754, 167304 134541, 167310 134511, 166920 134471, 166584 134722, 166503 134544, 166459 134577, 166188 134555, 166033 134684, 165978 134858, 165644 134971, 165513 134969, 165457 135112, 165298 135211, 165549 135401, 165275 135495, 164789 135472, 164656 135327, 164463 135262, 164191 135369, 163909 135388, 163842 135067, 163510 135313, 163449 135268, 163371 135354, 162878 135311, 162672 135246, 162452 135360, 162432 135304, 162561 135111, 162011 135115, 161929 135004, 161647 135029, 161618 135049, 161277 135037, 161390 135170, 161367 135272, 161047 135108, 160951 135204, 160784 135006, 160680 134934, 160618 135007, 160677 135147, 160984 135287, 161300 135544, 161713 135737, 161331 135585, 161067 135607, 160888 135453, 160693 135449, 160366 135346, 160138 135548, 160013 135259, 159835 134959, 159454 135107, 159302 135156, 158877 135405, 158833 135403, 158563 135456, 158353 135531, 157772 135541, 157337 135409, 157176 135474, 156947 135451, 156609 135642, 156715 135774, 156893 135886, 156671 135870, 156198 136100, 156259 135837, 156229 135744, 156127 135803, 155829 135893, 155574 136163, 155349 136334, 154918 136528, 154714 136680, 154542 136500, 154353 136231, 153984 136113, 153652 136120, 153552 136060, 153593 135690, 153306 135419, 153053 135341, 152580 135581, 152424 135744, 152010 136078, 151973 136256, 151750 136416, 151665 136297, 151649 136165, 151319 135935, 151244 135715, 150941 135293, 150655 135636, 150553 135647, 150201 135755, 150161 135787, 149841 135908, 149141 135992, 148757 136104, 148867 136170, 148843 136326, 148639 136420, 148607 136196, 148634 136111, 148587 135746, 148415 135444, 148211 135379, 148050 135457, 148114 135730, 147652 135706, 147599 135643, 147195 135813, 146749 136022, 146448 136017, 146441 135964, 146753 135735, 146754 135594, 146534 135468, 146203 135523, 146003 135606, 145554 135726, 145105 135802, 144993 135772, 145004 135675, 144940 135517, 144856 135457, 144819 135353, 144738 135411, 144258 135273, 144244 135247, 144182 135276, 144239 135309, 144026 135482, 143898 135483, 143882 135641, 143572 135967, 143240 135766, 143044 135494, 143258 135460, 143461 135255, 143530 134972, 142808 135181, 142614 135003, 142703 134579, 142911 134207, 142805 134129, 142630 134203, 142475 134117, 142442 133928, 142364 133881, 142278 133907, 142160 134105, 142168 134201, 142008 134222, 141982 133986, 142086 133926, 142018 133734, 141547 133613, 141440 133711, 141550 134115, 140958 134288, 140799 134562, 140406 134762, 140183 134934, 140023 134920, 139718 135114, 139790 134861, 139755 134588, 140088 134453, 140094 134400, 139750 134286, 139351 134492, 139248 134284, 138934 134214, 138818 134290, 138777 134473, 138691 134549, 138319 134615, 138165 134492, 138144 134732, 137948 134822, 138223 135040, 137946 135112, 137552 135086, 137343 135004, 137322 134941, 137022 134843, 136645 134999, 136493 135002, 136348 134700, 135940 134954, 135577 135006, 135229 134925, 135039 134916, 134877 135044, 134792 134959, 135057 134672, 134591 134852, 134455 134932, 134172 134918, 133779 135004, 133556 135085, 133748 135061, 133804 135177, 133694 135392, 133421 135386, 133726 135424, 134098 135563, 134086 135641, 133686 135616, 133556 135571, 133360 135662, 133229 135581, 132893 135712, 132594 135774, 132456 135925, 132364 135912, 132064 135512, 131960 135530, 131449 135373, 131078 135348, 130574 135691, 130880 135933, 130811 135921, 130474 136087, 130566 135694, 130433 135488, 130058 135503, 130241 135641, 130311 135805, 129948 135956, 129770 136171, 129365 136500, 128949 136741, 128626 136251, 128497 136199, 128446 136104, 128148 136173, 127886 136127, 127908 135993, 127839 135960, 127716 135989, 127651 136138, 127575 136144, 127158 135990, 126750 136006, 126603 136045, 126590 136114, 126404 136287, 126174 136390, 126088 136272, 126079 136077, 125907 135956, 125420 136013, 125204 136108, 125018 135838, 124939 135792, 124563 135511, 124353 135466, 124189 135599, 124265 135634, 124639 135626, 124729 135776, 124430 135901, 123754 135988, 123703 136011, 123347 136074, 123273 136052, 123213 135680, 123096 135477, 122819 135391, 122756 135337, 122691 135437, 122643 135651, 122510 135631, 121999 135800, 121844 135668, 121573 135898, 121568 135811, 121622 135769, 121623 135583, 121842 135658, 121902 135401, 121762 135410, 121620 135574, 121417 135449, 121133 135476, 121049 135569, 120658 135651, 120447 135748, 120258 135904, 120154 135874, 120086 136053, 119789 136279, 119473 136548, 119452 136500, 119534 136164, 119652 135882, 119635 135791, 119395 135980, 119227 135779, 118829 135851, 118509 136127, 118507 136190, 118428 136136, 118318 136180, 118197 136376, 118305 136615, 118228 136767, 117982 137027, 117776 137191, 117740 136950, 117886 136638, 118130 136633, 118132 136389, 117856 136399, 117602 136628, 117223 136550, 117160 136572, 117126 136516, 117339 136288, 117514 136185, 117251 136082, 117149 136004, 116952 136134, 116884 136454, 116808 136303, 116687 136216, 116557 136220, 116387 136459, 116383 136518, 116338 136531, 116224 136732, 116048 136740, 115806 136673, 115623 136472, 115752 136469, 115765 136210, 115875 136046, 115726 135924, 115616 135998, 115573 136442, 115313 136656, 115197 136803, 114946 136606, 114421 136372, 114395 136106, 114671 135974, 114756 135965, 114950 135593, 114637 135496, 114495 135317, 114420 135283, 114264 135411, 114337 135508, 114237 135738, 114010 135683, 114047 135454, 113922 135387, 114084 135177, 113709 135347, 113585 135286, 113801 134932, 113474 135105, 113328 135292, 113311 135076, 113061 135023, 112988 134932, 112800 135031, 112663 135274, 112815 135369, 112848 135467, 112723 135575, 112282 135653, 112477 135987, 112468 136249, 112200 136411, 112030 136397, 111744 136605, 111606 136329, 111528 136219, 111495 135947, 111474 135955, 111198 135736, 111206 135609, 111344 135288, 111483 135126, 111378 135091, 111296 135276, 110948 135073, 110853 135147, 110801 135336, 110750 135379, 110126 135364, 109900 135563, 109826 135582, 109902 135675, 109930 135813, 109898 135977, 109361 136059, 109070 135973, 108982 135753, 109018 135678, 108572 135701, 108359 135989, 108183 135787, 108007 135903, 108134 135651, 107993 135488, 107824 135440, 107510 135317, 107500 135251, 107380 135207, 107222 135217, 107036 135399, 106858 135430, 106661 135198, 106441 135242, 106302 135206, 106211 135075, 106038 135009, 106034 135111, 105955 135137, 105923 135311, 105951 135404, 106093 135454, 106136 135385, 106276 135341, 106506 135358, 106737 135520, 106855 135713, 106749 135924, 106291 135738, 106290 135663, 106137 135531, 106056 135633, 106235 135744, 106183 136032, 105943 136048, 105739 135953, 105482 136067, 105360 136075, 105289 136216, 105312 136288, 105166 136376, 104952 136050, 104665 136071, 104604 135981, 104366 135871, 104515 135755, 104145 135234, 104041 135248, 104085 135307, 103970 135500, 103984 135672, 103676 135965, 103449 135625, 103475 135258, 103084 135277, 102423 135413, 102316 135482, 101926 135658, 101223 136046, 101049 136013, 100672 136006, 100404 135965, 100242 135976, 100191 136146, 99730 135992, 99269 136011, 99195 136002, 98823 136033, 98693 135957, 98012 135998, 97790 136098, 97612 135850, 97310 135619, 96993 135447, 96728 135226, 96725 134880, 96456 134773, 96152 134807, 95843 134931, 95367 135283, 95072 135605, 94874 135414, 94584 135321, 94485 135118, 94285 134980, 93918 135156, 93644 135203, 93621 135244, 93579 135231, 93264 135493, 93001 135580, 92834 135678, 92670 136057, 92054 136536, 92030 136488, 92073 136227, 92244 135948, 92190 135752, 91918 136007, 91900 135879, 91802 135771, 91661 135828, 91347 135880, 91131 136093, 91116 136159, 91047 136117, 90919 136159, 90759 136374, 90872 136615, 90797 136764, 90339 137184, 90307 136950, 90453 136639, 90695 136634, 90694 136388, 90423 136398, 90176 136632, 89794 136550, 89727 136573, 89681 136498, 89972 136246, 90064 136244, 90142 136168, 90077 136100, 89848 135965, 89492 136145, 89455 136416, 89371 136306, 89125 136172, 89029 136302, 88890 136646, 88616 136740, 88374 136672, 88233 136483, 88321 136465, 88333 136214, 88462 136053, 88219 135897, 88161 136116, 88126 136435, 87745 136787, 87523 136611, 86989 136371, 86963 136104, 87240 135974, 87326 135965, 87517 135593, 87207 135496, 86971 135254, 86904 135507, 86806 135738, 86609 135713, 86527 135539, 86543 135406, 86505 135345, 86587 135239, 86398 135331, 86209 135346, 86166 135299, 86313 135035, 86129 134966, 86072 134981, 86005 134907, 85524 134979, 85431 135193, 85222 135242, 85375 135344, 85363 135419, 85430 135509, 85349 135505, 85235 135590, 84944 135622, 84874 135666, 85110 136117, 84884 136377, 84590 136411, 84297 136563, 84146 136283, 84165 136654, 84073 136578, 84008 136352, 83879 136374, 83968 136325, 83982 136146, 83780 136341, 83944 136147, 84002 136108, 84028 135950, 83831 135806, 83748 135631, 83148 135941, 82702 136044, 82544 136113, 82485 136088, 82156 136110, 81742 136005, 81304 136319, 81199 136183, 81247 136069, 81111 136096, 81017 136168, 81122 136274, 81174 136215, 81398 136618, 80878 136583, 80988 136446, 80919 136464, 80688 136602, 80607 136305, 80260 136390, 79838 136780, 79352 136963, 79204 137074, 78889 136647, 78575 136452, 78214 136412, 78091 136286, 78104 136094, 77898 136077, 77858 136221, 77880 136293, 77736 136379, 77573 136136, 77356 136219, 77570 136404, 77218 136500, 77255 136280, 77348 136219, 76993 136083, 76834 136041, 76765 135943, 76670 135934, 76675 136033, 76453 136336, 76225 136116, 76069 135927, 75919 135837, 75731 135667, 75605 135619, 75565 135543, 75543 135288, 75369 135409, 75321 135349, 75126 135313, 75060 135146, 74935 135097, 74810 135110, 74619 135231, 74763 135254, 75062 135388, 74744 135552, 73980 135632, 73536 135753, 73480 135413, 73331 135175, 73090 135141, 72995 135227, 72949 135405, 72736 135400, 72236 135639, 72169 135593, 71848 135917, 71689 135933, 71673 135823, 71862 135663, 71864 135511, 71654 135425, 71367 135493, 71288 135568, 71040 135604, 70993 135634, 70360 135763, 70193 135696, 70220 135539, 70079 135246, 69950 135326, 69544 135136, 69495 135038, 69386 135073, 69489 135154, 69314 135263, 69145 135215, 69111 135345, 69305 135639, 69276 135684, 68888 135662, 68444 135761, 68640 135448, 68572 135408, 68355 135051, 68640 134987, 68769 134819, 68580 134663, 68374 134979, 68064 135234, 67989 135225, 67971 135087, 68120 134737, 67881 134421, 67639 134362, 67512 134397, 67456 134334, 67372 134362, 67111 134592, 67228 134742, 67182 134910, 66807 135079, 66690 135304, 66570 135323, 66126 135241, 66073 135302, 66004 135591, 65754 135734, 65537 135657, 65272 135853, 65027 135919, 65005 135988, 65058 136145, 64870 136361, 64656 136047, 64453 136137, 64643 136213, 64809 136374, 64490 136586, 64183 136707, 64278 136212, 63953 136111, 63861 136118, 63817 136044, 63870 135938, 64210 135619, 63866 135287, 63785 135135, 63681 135233, 63617 135505, 63636 135779, 63183 136382, 62995 135952, 62927 135832, 62946 135473, 62925 135342, 62808 135451, 62588 135515, 62483 135489, 62333 135146, 62578 134986, 62457 134920, 62208 134847, 61895 134946, 61753 134798, 61578 134975, 61937 135253, 62069 135289, 61697 135292, 61571 135314, 61428 135229, 61397 135335, 61004 135622, 60241 135442, 60653 135209, 60659 135133, 60604 135054, 60260 134980, 60168 134994, 59960 135125, 59926 135360, 60026 135769, 60016 135836, 59667 135644, 59627 135507, 59680 135450, 59386 135416, 59179 135363, 59074 135411, 58765 135445, 58517 135731, 58152 135190, 58085 135149, 57916 134851, 57712 134842, 57447 135170, 57427 135213, 57215 135379, 57082 135597, 57001 135535, 56963 135331, 56899 135248, 56720 135236, 56064 134715, 55605 134667, 55515 134762, 55853 134970, 55757 135450, 55717 135488, 55293 135441, 55267 135392, 54937 135422, 54608 135618, 54543 135725, 54338 136007, 54046 135793, 53530 135623, 53191 135328, 53035 135288, 52979 135480, 53018 135612, 52670 135470, 52383 135414, 52152 135464, 52475 135204, 52428 135144, 52295 135118, 51984 135181, 51773 135125, 51500 135243, 50834 135326, 50687 135287, 50434 135276, 50007 135088, 49585 134979, 49066 134911, 48468 134977, 48441 134957, 47881 134850, 47829 134737, 47239 134728, 47050 134814, 46849 134739, 46622 134986, 46413 134986, 46104 134687, 46275 134378, 46224 134151, 46139 134047, 46249 133899, 46238 133784, 45899 133657, 45626 133769, 45444 133622, 45475 133565, 45347 133384, 44976 133405, 44788 133508, 44529 133467, 44104 133693, 44000 133560, 44091 133436, 44206 133376, 44307 133392, 44335 133296, 44590 133071, 45463 133039, 46008 133156, 45961 133109, 45997 132799, 46025 132770, 45976 132712, 45725 132659, 45581 132482, 45236 132696, 45414 133008, 44857 132757, 44977 132539, 44958 132473, 44826 132404, 44601 132411, 44171 132353, 43769 131871, 43981 131810, 44119 131716, 43838 131518, 43861 131195, 43582 131142, 43466 131189, 43302 131170, 43324 131094, 43161 130950, 43196 130752, 43155 130663, 43383 130419, 43398 130353, 43323 130074, 43239 130062, 43301 129994, 43359 129445, 43225 129258, 43140 128928, 43217 128724, 43144 128657, 42940 128748, 42735 128567, 42877 128329, 42755 128222, 42669 128220, 42706 128570, 42589 128595, 42378 128809, 42407 128597, 42614 128199, 42483 128185, 42245 128300, 42148 128040, 42073 127995, 42155 127678, 42024 127417, 41939 127445, 41801 127704, 41694 127430, 41860 127106, 41683 126831, 41577 126917, 41452 127192, 41401 127192, 41263 126609, 41298 126498, 41365 125897, 41421 125628, 41539 125708, 41655 125570, 41501 125574, 41381 125345, 41326 125721, 41338 125846, 41251 125989, 41168 125910, 41230 125788, 41146 125605, 41042 125635, 40885 125517, 41079 125226, 41275 125115, 41340 125126, 41344 125038, 40969 124437, 40961 124074, 40972 123976, 40753 123596, 40812 123528, 40853 123552, 40876 123274, 40961 123455, 41052 123377, 40945 122880, 40909 122549, 41037 122550, 41096 122750, 41233 122723, 41310 122893, 41447 122850, 41470 122764, 41329 122150, 41112 121736, 41210 121353, 41117 121282, 40935 120693, 41055 120283, 40984 120078, 40891 120080, 40927 119761, 40902 119326, 40808 118962, 40775 118936, 40690 119317, 40642 119292, 40617 119136, 40666 118864, 40733 118575, 40747 118274, 40765 118204, 40822 118479, 40855 118554, 40940 118159, 41015 117994, 41038 117660, 41078 117340, 41284 116909, 41231 116854, 41170 116552, 41279 116484, 41140 116433, 40929 116541, 40868 116284, 40897 116124, 40745 116071, 40634 115906, 40632 115767, 40705 115521, 40730 115062, 40927 115022, 40990 115139, 40968 115320, 41035 115494, 41054 115226, 41119 115118, 41169 114738, 41259 114825, 41472 114524, 41525 114208, 41451 114180, 40917 113420, 40937 113343, 41219 113156, 41362 112973, 41270 112849, 41254 112554, 41194 112394, 41062 112384, 40975 112475, 40838 112528, 40816 112401, 40718 112361, 40745 112192, 40690 111957, 40598 111447, 40890 110922, 40889 110737, 40836 110775, 40757 110641, 40757 110459, 40731 110070, 40799 109881, 40874 109845, 40904 109699, 40875 109313, 40974 109296, 40990 109049, 41118 108830, 41130 108710, 41238 108243, 41150 107885, 41279 107595, 41556 107763, 41693 107879, 41557 108359, 41595 108818, 41673 108695, 41919 108567, 42073 108574, 42132 108654, 42286 108579, 42330 108646, 42440 108693, 42350 108523, 42438 108401, 42579 108519, 42637 108229, 42424 108110, 42221 107667, 42411 107536, 42181 107261, 42537 106908, 42767 107048, 42936 107335, 43055 107368, 43097 107513, 43366 107437, 43306 107073, 43182 106849, 43123 106812, 43063 106560, 43083 106441, 43331 106232, 43509 105528, 43637 105160, 43807 105021, 44351 104509, 44803 104559, 45345 104667, 45660 104709, 45785 104635, 46197 104955, 46251 104962, 46215 104945, 46234 104628, 46193 104483, 46273 104392, 46445 104532, 46628 104818, 46807 104657, 46802 104408, 46536 104297, 46374 104104, 46424 104051, 46462 103793, 46414 103721, 46151 103924, 46246 104365, 46082 104371, 46014 104302, 46079 103798, 46092 103325, 46245 103267, 46320 103282, 46370 103240, 46466 102961, 46654 103216, 46984 103089, 47079 103117, 47153 102995, 47334 102916, 47398 102930, 47791 102908, 47842 102889, 48162 102825, 48214 102889, 48058 102998, 48060 103341, 47898 103671, 48048 103640, 48074 103360, 48304 103328, 48459 103485, 48675 103443, 48921 103487, 48971 103424, 49012 103489, 49517 103390, 49313 103137, 49322 103118, 49073 102855, 49329 102621, 49495 102572, 49800 102575, 50067 102637, 50227 102894, 50528 102716, 50971 102866, 51195 102861, 51121 102672, 50655 102231, 51226 102367, 51573 102497, 51601 102525, 51897 102661, 51821 103018, 51929 103206, 52348 103245, 52419 103082, 52872 103051, 53058 103002, 53396 103083, 53372 102914, 53495 102723, 53679 102970, 53652 103076, 54044 103042, 54297 103001, 54488 102914, 54460 102886, 54772 102835, 54989 102481, 55098 102519, 55176 102722, 55297 102770, 55169 102855, 55529 102907, 55885 102741, 55913 102928, 55881 103089, 56057 103132, 56097 103022, 56248 102854, 56401 102766, 56440 102841, 56715 102836, 57049 102691, 57122 102419, 57278 102597, 57290 102727, 57353 102766, 57302 102812, 57354 102803, 57439 102630, 57593 102515, 57585 102421, 57664 102434, 57617 102266, 57786 101936, 57868 102121, 57971 102427, 58260 102239, 58317 101953, 58389 101991, 58462 102115, 58439 102199, 58521 102252, 58907 102200, 58954 102445, 59046 102440, 59109 102376, 59151 102163, 59105 102169, 59146 102062, 59356 102113, 59338 102205, 59260 102274, 59335 102416, 59345 102374, 59505 102441, 59446 102506, 59439 102771, 59465 102798, 59508 102742, 59616 102722, 59677 102788, 59543 102874, 59665 102972, 59914 102988, 60241 102811, 60840 102283, 61082 102235, 61133 101982, 61256 101889, 61397 102096, 61731 102268, 61738 102342, 61969 102451, 62118 102641, 62319 102503, 62687 102504, 63194 102340, 63358 102348, 63760 102288, 63878 102311, 64214 102268, 64083 102141, 64090 102040, 64390 101954, 64426 102126, 64367 102265, 64389 102596, 64543 102642, 64489 102807, 64596 102940, 64810 102777, 64823 102707, 65313 102750, 65707 102604, 66086 102383, 66205 102382, 66480 102342, 66088 102710, 66230 102849, 66332 102750, 66499 102802, 66889 102649, 66991 102574, 67293 102447, 67360 102447, 67701 102324, 67773 102544, 67887 102633, 67922 102597, 68384 102610, 68597 102382, 68614 102129, 68909 101754, 69031 101768, 69191 101854, 69327 101871, 69537 102127, 69233 102238, 69011 102701, 69384 102672, 69683 102467, 69779 102550, 69782 102799, 69655 103141, 69818 103191, 69618 103248, 69591 103373, 69858 103211, 70062 103377, 70373 103214, 70474 103282, 70555 103452, 70344 103586, 70391 103728, 70782 103798, 70905 103793, 70806 103354, 71297 103174, 71380 103089, 71462 103114, 71547 102957, 71793 102809, 72140 102520, 72186 102525, 72389 102362, 72580 102289, 72611 102315, 72535 102670, 72544 102884, 72236 103047, 72237 103073, 72525 103168, 72779 103052, 72823 102984, 72898 103039, 72928 103153, 73222 103288, 73295 103018, 73450 103029, 73644 102977, 73847 103010, 73875 102978, 74186 102898, 73915 102651, 74090 102604, 74571 102715, 74661 102889, 75004 103075, 75258 102974, 75439 102956, 75574 103240, 75956 103031, 76299 103060, 76515 103140, 76538 103184, 76809 103118, 76849 103084, 77240 102993, 77126 102706, 77356 102978, 77510 102976, 77507 102741, 77545 102710, 77663 102759, 77668 102946, 77858 102996, 77952 102741, 77609 102635, 77617 102522, 78023 102499, 78169 102538, 78325 102498, 78414 102540, 78762 102372, 79051 102271, 79150 102138, 79262 102170, 79478 102422, 79801 102043, 79885 102001, 80155 101803, 80254 101746, 80463 101586, 80611 101435, 80893 101793, 81238 101890, 81507 101843, 81662 101912, 81631 102200, 81719 102293, 81773 102114, 82047 101849, 82564 101937, 82706 102044, 82503 102174, 82391 102373, 82538 102309, 82913 101946, 83139 101911, 83193 101633, 83349 101514, 83440 101736, 83685 101935, 83760 101964, 83767 102077, 84077 102548, 84232 102322, 84631 102230, 84758 102536, 84960 102557, 85068 102451, 84941 102429, 84633 102228, 85126 102036, 85398 102015, 85573 101974, 85741 102024, 85931 101954, 86115 101955, 86016 101867, 86041 101723, 86244 101661, 86275 101877, 86245 101972, 86283 102339, 86450 102662, 86643 102768, 86769 102683, 86710 102436, 87155 102575, 87202 102648, 87595 102571, 87633 102615, 87740 102547, 87998 102474, 88271 102533, 88261 102606, 87960 102785, 88128 103007, 88202 102956, 88359 103045, 88680 102998, 89222 102938, 89243 102945, 89515 102924, 89615 102963, 89597 103055, 89690 103240, 89800 103320, 90333 103420, 90539 103256, 90597 103254, 90617 103077, 90900 102750, 91275 102945, 91463 103176, 91227 103240, 91092 103378, 91052 103481, 91291 103610, 91450 103581, 91650 103467, 91780 103562, 91783 103738, 91573 104311, 91611 104328, 91828 104210, 92044 104293, 92381 104155, 92471 104306, 92325 104416, 92377 104554, 92824 104574, 92899 104492, 92802 104159, 93307 103878, 93406 103844, 93510 103666, 93781 103441, 94089 103147, 94193 103134, 94364 102956, 94571 102807, 94470 103223, 94514 103381, 94248 103537, 94233 103632, 94499 103667, 94804 103460, 94827 103413, 94875 103437, 94915 103557, 95238 103695, 95351 103341, 95871 103225, 95882 103192, 96179 103030, 95913 102815, 96138 102733, 96544 102770, 96659 102821, 96700 102937, 97014 103062, 97223 102945, 97520 102892, 97608 103156, 97855 103060, 97955 102968, 98727 102806, 99483 102970, 99748 103059, 100038 102960, 99956 102800, 100051 102566, 100266 102601, 100058 102551, 100064 102492, 100030 102541, 99694 102416, 99708 102322, 100109 102392, 100361 102334, 100532 102386, 100784 102279, 101072 102229, 101240 102046, 101637 102556, 101816 102918, 102184 103285, 102019 103454, 102085 103588, 102066 103736, 101839 103973, 102074 104144, 101846 104344, 101760 104385, 101864 104564, 101945 104543, 102014 104450, 102275 104489, 102405 104459, 102376 104629, 102411 104678, 102451 104256, 102680 103942, 102346 103467, 102341 103247, 102250 102982, 102397 102895, 102731 102853, 102740 102888, 102996 102768, 103387 102987, 103486 103101, 103596 102948, 103455 102870, 103467 102836, 103736 102747, 103805 102415, 104035 102223, 104464 102286, 104663 102434, 104518 102525, 104297 102945, 104345 102967, 104680 102838, 105340 102801, 106125 102719, 106282 102724, 106681 102516, 106957 102500, 107141 102447, 107720 102513, 108053 102656, 108224 102608, 108469 102660, 108685 102551, 108635 102442, 108419 102265, 108640 102325, 108840 102275, 109154 102140, 109114 102339, 109152 102472, 109410 102392, 109797 102037, 110142 101906, 110458 101691, 110661 101924, 110765 102084, 111114 102197, 111396 102219, 111501 102275, 111484 102645, 111727 102914, 112139 102810, 112410 102597, 112739 102249, 112982 102181, 113035 101905, 113178 101773, 113348 102030, 113410 102047, 113648 102337, 113692 102355, 113916 102639, 114059 102420, 114483 102266, 114973 102008, 115149 101988, 115499 101861, 115628 101866, 116006 101756, 115861 101625, 115867 101540, 116101 101437, 116138 101639, 116099 101740, 116127 102098, 116295 102422, 116429 102475, 116596 102410, 116547 102246, 116621 102164, 117011 102215, 117057 102284, 117824 102077, 118150 102196, 118156 102230, 117818 102363, 117817 102486, 118028 102702, 118051 102670, 118271 102766, 118416 102736, 119023 102833, 119058 102857, 119321 102918, 119410 102985, 119393 103074, 119563 103446, 119649 103408, 120081 103746, 120339 103633, 120339 103450, 120649 103177, 121048 103536, 121230 103840, 120986 103834, 120856 103931, 120813 104036, 121072 104265, 121171 104277, 121402 104204, 121525 104322, 121508 104565, 121326 105001, 121363 105024, 121595 104957, 121781 105075, 122112 104983, 122173 105016, 122181 105173, 122280 105173, 122155 105241, 122165 105339, 122595 105444, 122672 105409, 122547 105080, 122838 105009, 123056 104896, 123159 104884, 123260 104743, 123520 104572, 123827 104332, 123913 104329, 124291 104057, 124200 104427, 124245 104553, 124007 104664, 123989 104751, 124252 104784, 124514 104627, 124538 104582, 124626 104611, 124694 104710, 124941 104777, 124983 104567, 125106 104449, 125553 104351, 125575 104284, 125845 104127, 125573 103988, 125783 103882, 126295 103875, 126431 103973, 126632 104017, 126860 103899, 127125 103831, 127269 104068, 127597 103827, 127626 103849, 127675 103799, 128244 103837, 128406 103915, 128605 103677, 128716 103854, 128759 104020, 128874 103995, 128916 104046, 128974 104043, 129029 103893, 129275 103787, 129447 103791, 129671 103577, 129602 103440, 129713 103206, 129320 103146, 129335 103050, 129719 103003, 129862 103020, 130041 102895, 130164 102932, 130487 102739, 130799 102594, 130951 102403, 131045 102444, 131276 102732, 131415 102812, 131561 103097, 131815 103267, 131982 103425, 131825 103585, 131872 103711, 131816 103924, 131616 104110, 131841 104234, 131829 104315, 131938 104364, 132261 104347, 132445 104089, 132609 104040, 132419 104033, 132330 103782, 132117 103600, 132132 103546, 132005 103154, 132245 103050, 132452 103073, 132708 102981, 133070 103149, 133247 103344, 133509 103064, 133475 102915, 133554 102723, 133791 102553, 134312 102774, 134819 103028, 134408 102897, 134285 102945, 134096 103200, 134206 103391, 134413 103369, 134601 103463, 135139 103493, 135192 103373, 135744 103302, 135773 103279, 136353 103379, 136882 103330, 137201 103288, 137623 103123, 137969 103106, 138563 103213, 138786 103317, 138974 103260, 139246 103310, 139402 103231, 139102 102993, 139340 103043, 139565 102966, 139877 102792, 139845 102935, 139898 103096, 140036 103041, 140375 102674, 140862 102398, 141105 102152, 141382 102472, 141741 102568, 142001 102545, 142150 102604, 142135 102943, 142396 103154, 142942 102885, 143193 102610, 143529 102283, 143763 102185, 143838 102080, 143878 101879, 143969 101790, 144119 101959, 144311 102032, 144524 102223, 144678 102262, 144829 102401, 144974 102233, 145163 102159, 145511 102099, 145541 102073, 145998 101872, 146354 101835, 146500 101798, 146645 101832, 146867 101744, 146901 101517, 147271 101389) (143581 135001, 143976 135192, 143940 135078, 144043 134952, 144013 134901, 143594 134807) (68879 134758, 69248 134988, 69214 134862, 69298 134787, 69215 134663, 68774 134519) (65782 134382, 65714 134660, 65735 134790, 65796 134809, 66043 134707, 66253 134741, 66493 134669, 66828 134926, 67017 134614, 66814 134713, 66601 134499, 66540 134559, 66487 134521, 66270 134667, 66058 134661, 65904 134347, 65827 134312) (164793 134568, 164770 134690, 164905 134902, 164993 134817, 165283 134808, 165433 134869, 165622 134594, 165601 134517, 165139 134610, 164916 134441) (143356 134540, 143449 134773, 143588 134782, 143708 134502, 143559 134451) (170249 134097, 170241 134167, 170413 134497, 170597 134585, 170823 134629, 170854 134376, 170475 134334, 170593 134042, 170406 134003) (137415 134174, 137526 134449, 137609 134353, 138162 134483, 138362 134150, 137891 134139, 137765 134170, 137577 134038) (45978 133615, 46251 133757, 46366 133686, 46383 133467, 46213 133333) (189640 132105, 190033 132258, 190139 132148, 189973 132090) (193713 118969, 193757 118982, 193790 118915, 193726 118073, 193676 118023) (191372 108040, 191400 108103, 191304 108436, 191327 108481, 191556 108335, 191594 108247, 191510 107981, 191407 107912) (188119 105974, 188080 106056, 188126 106140, 188400 105920, 188318 105909) (188652 105805, 188679 106125, 189087 106087, 188973 105793) (189497 105786, 189534 105812, 189535 105925, 189583 105823, 189784 105774, 189926 105683, 189733 105606) (131571 104488, 131787 104761, 131925 104881, 132137 104879, 132179 104738, 132085 104738, 131680 104507, 131686 104442) (188398 103912, 188405 103992, 188567 104111, 188360 104298, 188335 104303, 188064 104441, 188048 104640, 188235 104846, 188465 104447, 188408 104330, 188567 104256, 188638 104158, 188640 104046, 188713 103903, 188484 103780) (126133 104488, 125891 104479, 125575 104527, 125512 104660, 125931 104638, 126033 104613, 126166 104672, 126253 104598, 126251 104514, 126186 104425) (187466 104348, 187379 104462, 187442 104536, 187763 104398, 187558 104297, 187570 104259, 187375 104173) (120287 104169, 120666 104304, 120664 104164, 120395 103967) (133346 103832, 133312 103838, 133367 104088, 133469 104201, 133668 104192, 133560 104017, 133663 103708, 133512 103644) (182922 103927, 182951 104078, 183087 104160, 183256 104093, 183573 103898, 183598 103833, 183459 103611, 183514 103412) (133024 103609, 132839 103701, 132613 103652, 132648 103884, 132899 103876, 133002 103960, 133310 103833, 133476 103591, 133254 103347) (90511 103764, 90906 103803, 90904 103660, 90610 103549) (95768 103681, 96057 103732, 96358 103662, 96506 103784, 96595 103702, 96614 103587, 96533 103461, 96475 103535, 96214 103469, 95938 103429) (183989 103559, 184007 103692, 183892 103752, 184037 103736, 184199 103460, 184055 103448) (73775 103408, 73759 103427, 74218 103505, 74486 103509, 74513 103446, 74456 103334, 74390 103386, 74146 103310) (103243 103402, 103363 103347, 103697 103417, 103838 103273, 103639 103293, 103500 103088) (175394 103184, 175246 103409, 175829 103298, 175863 103262, 176009 103310, 176077 103263, 176079 103189, 176037 103148) (59468 102800, 59496 102829, 59618 102772) (114617 102545, 114800 102539, 114898 102432, 114783 102428, 114493 102288)), ((108850 136644, 108348 136570, 108610 136156)), ((104897 136284, 104997 136403, 104652 136500, 104722 136201)), ((174305 135194, 174168 135529, 174037 135603, 174086 135371, 174158 135328, 174135 135113)), ((136146 135168, 135649 135133, 135649 135090, 135940 134969)), ((41043 121936, 41186 122120, 41202 122554, 40944 122100, 40904 121929, 40928 121890)), ((123856 103788, 123975 104015, 123854 104135, 123736 103997, 123463 103841, 123678 103718)), ((181388 103391, 181538 103439, 181342 103486, 181240 103467, 181357 103063)), ((119724 102830, 119639 103036, 119662 103128, 119569 103134, 119480 102926, 119554 102702)), ((173519 102386, 173602 102512, 173609 102599, 173728 102771, 173514 102996, 173313 102755, 172941 102588, 173164 102419, 173266 102414, 173364 102332)), ((94131 102562, 94237 102760, 94123 102883, 94024 102765, 93841 102777, 93907 102672, 93790 102609, 93947 102512)), ((150965 102382, 150913 102507, 150983 102711, 150743 102752, 150574 102561, 150694 102218)), ((68054 101957, 67990 102150, 68030 102280, 67838 102396, 67733 102292, 67830 101952)), ((72160 101873, 72322 102233, 72151 102379, 71998 102153, 71724 102100, 71823 101958, 71736 101883, 71999 101784)), ((169448 101850, 169401 101987, 169460 102194, 169226 102286, 169062 102121, 169154 101882, 169174 101745))) \ No newline at end of file +MULTIPOLYGON (((147289 101492, 147197 101776, 147218 102093, 147259 102076, 147389 102138, 147398 102467, 147648 102288, 147623 102181, 148137 102295, 148172 102346, 148465 102254, 148577 102197, 148901 102061, 149036 102086, 149463 102125, 149272 102163, 148937 102366, 148938 102449, 149117 102596, 149219 102465, 149345 102594, 149476 102549, 149777 102548, 149863 102511, 150134 102496, 150233 102538, 150557 102570, 150547 102600, 150750 102934, 150801 102912, 151257 103199, 151451 103115, 151457 102826, 151757 102643, 152047 102912, 152261 103054, 152386 103243, 152530 103190, 152880 103207, 153247 103211, 154056 103406, 154393 103447, 154973 103599, 155060 103545, 155100 103604, 155982 103648, 156531 103905, 156918 103881, 157384 103888, 157677 103949, 157902 103873, 158295 103870, 158377 103782, 158054 103621, 158326 103620, 158921 103328, 158926 103578, 159080 103506, 159208 103335, 159407 103114, 159605 103018, 160226 102526, 160454 102824, 160833 102936, 161042 102897, 161218 103011, 161202 103295, 161303 103361, 162081 103119, 162153 102960, 162231 103020, 162468 102787, 162676 102742, 162742 102646, 162776 102466, 162854 102390, 162962 102559, 163249 102661, 163345 102847, 163504 102878, 163575 102980, 163720 102792, 164156 102649, 164176 102627, 164599 102346, 165092 102152, 165205 102150, 165383 102040, 165411 101809, 165746 101644, 165778 101795, 165696 102013, 165720 102318, 165786 102277, 166045 102366, 166018 102482, 166117 102372, 166544 102347, 166785 102276, 167055 102137, 167095 102097, 167417 101900, 167985 101878, 167815 101926, 167483 102191, 167483 102296, 167637 102372, 167713 102283, 167818 102353, 167973 102293, 168276 102247, 168355 102202, 168634 102137, 168729 102164, 169044 102134, 169038 102172, 169224 102475, 169279 102434, 169730 102645, 169936 102500, 169916 102187, 170186 101926, 170336 101993, 170532 102185, 170689 102264, 170892 102592, 170596 102599, 170492 102690, 170436 102843, 170787 103124, 170795 103080, 171025 103006, 171096 103077, 171105 103274, 171006 103584, 171207 103683, 171275 103662, 171241 103706, 171403 103852, 171735 103762, 171903 103865, 171927 103976, 171705 104095, 171743 104184, 172213 104283, 172262 104237, 172156 103914, 172619 103682, 172830 103639, 172900 103529, 173094 103391, 173509 103035, 173525 103033, 173757 102815, 173949 102709, 174009 102739, 173927 103058, 173943 103287, 173660 103472, 173661 103525, 173920 103551, 174155 103396, 174209 103301, 174318 103340, 174376 103452, 174456 103374, 174621 103431, 174679 103247, 174853 103089, 175105 103011, 175263 102982, 175356 102906, 175714 102690, 175405 102553, 175611 102412, 176108 102435, 176166 102572, 176510 102732, 176632 102730, 176986 102606, 177088 102927, 177133 102959, 177479 102784, 177730 102912, 178167 103227, 178270 103212, 178415 103103, 178539 103533, 178699 103628, 178735 103533, 178909 103540, 179152 103666, 179293 103595, 179307 103474, 179240 103402, 179321 103154, 179015 102954, 179038 102804, 179405 102930, 179596 103044, 179720 103036, 179802 103097, 180130 102994, 180399 102953, 180492 102849, 180553 102866, 180918 103314, 181124 103658, 181476 103909, 181365 103996, 181444 104116, 181416 104349, 181196 104523, 181401 104621, 181087 104844, 181307 105052, 181639 105108, 181766 104929, 181781 104659, 181904 104457, 182004 104371, 181932 104386, 181860 104168, 181689 104083, 181716 104147, 181611 104066, 181633 104042, 181561 103645, 181772 103522, 182052 103455, 182231 103334, 182687 103358, 182810 103445, 182509 103884, 182265 104017, 182458 104020, 182604 104079, 182724 103953, 182909 103883, 183029 103627, 183041 103537, 182807 103418, 183104 103015, 183072 102882, 183095 102773, 183434 102398, 183774 102329, 184013 102268, 184150 102313, 183900 102554, 183714 102959, 184390 102785, 184555 102987, 184729 103061, 184795 103005, 184985 103022, 185172 102952, 185044 102843, 185017 102948, 184776 102837, 184878 102638, 184946 102590, 185175 102594, 185526 102578, 185595 102639, 185644 102816, 185402 102978, 185495 103165, 185364 103320, 185415 103356, 185993 103497, 186163 103449, 186612 103530, 186680 103465, 186766 103478, 186777 103584, 187095 103697, 187163 103665, 187066 103457, 186900 103293, 186898 102946, 187172 103041, 187449 103056, 187568 103029, 187841 103144, 187874 103185, 188271 103377, 188289 103270, 188431 103097, 188494 103281, 188577 103346, 188718 103324, 188798 103355, 188824 103659, 188957 104299, 188699 104528, 188627 104557, 188605 104774, 188682 104938, 188386 105092, 188546 105183, 188772 105026, 188991 104966, 188852 105161, 188506 105245, 188520 105468, 188639 105778, 188726 105719, 188976 105697, 188978 105558, 189162 105369, 189126 105211, 189352 105060, 189442 105105, 189423 105158, 189636 105486, 189980 105363, 190089 105603, 190257 105596, 190431 105473, 190635 105410, 190804 105487, 190925 105394, 191167 105346, 191407 105385, 191426 105475, 191362 105505, 191270 105644, 191419 105725, 191378 106026, 191441 106239, 191247 106397, 191280 106566, 191357 106635, 191712 106619, 191707 106824, 191589 107117, 191591 107166, 191438 107518, 191486 107489, 191842 107548, 191945 107386, 192289 107018, 192412 106980, 192617 107052, 192768 107194, 192617 107366, 192273 107654, 192528 107597, 192618 107650, 192457 108077, 192327 108078, 192227 108154, 192315 108527, 192460 108725, 192530 108695, 192654 108509, 192824 108653, 192991 108649, 193128 108723, 193342 109074, 193377 109066, 193385 108738, 193412 108477, 193256 108025, 193338 107868, 193523 107742, 193774 108134, 193856 108785, 193928 109098, 193921 109623, 194041 109726, 194014 109968, 194186 109989, 194145 110534, 193970 110609, 193981 111037, 194090 111179, 194208 111406, 194186 111772, 194114 112237, 194141 112431, 193957 112520, 193762 112515, 193785 112803, 193721 112792, 193983 113062, 194376 113386, 194193 113681, 193803 114209, 193782 114331, 193977 114716, 194075 114877, 194258 115254, 194301 115516, 194336 115853, 194190 116248, 193808 116627, 193635 116898, 193616 117188, 193733 117256, 193797 117473, 193881 118035, 194031 118525, 194060 118432, 194108 118157, 194177 118380, 194186 118880, 194156 119052, 194084 119101, 194031 119307, 194017 119558, 194088 120051, 193901 120195, 193881 120255, 193983 120694, 193859 121226, 193808 121271, 193746 121535, 193908 121772, 193921 121907, 194002 121948, 194003 122292, 193919 122553, 193960 122713, 193902 123111, 193803 123527, 193912 124308, 193949 124428, 193696 124892, 193504 125134, 193367 125613, 193270 125520, 193126 125503, 193027 125235, 192970 125483, 192847 125120, 192753 125333, 192676 125797, 192772 125873, 193218 125870, 193261 125628, 193254 125811, 193502 125640, 193600 125861, 193876 125817, 193818 126110, 193718 126306, 193601 126318, 193680 126631, 193663 126855, 193715 126921, 193657 126955, 193649 127144, 193583 127153, 193513 127044, 193313 127280, 193067 127163, 193090 127406, 193269 127607, 193200 127699, 193042 127467, 192830 127658, 192849 127794, 192802 127831, 192756 127762, 192702 127763, 192870 128032, 192668 128408, 192444 128240, 192358 128149, 192245 128156, 192101 128238, 192095 128495, 192108 128781, 192122 128882, 192138 129206, 192122 129242, 192129 129802, 192277 130104, 191858 130546, 191556 130801, 191602 130860, 191494 131002, 191565 131169, 191466 131164, 191423 131224, 191143 131156, 191069 131173, 190979 131391, 191008 131524, 190728 131683, 190703 131723, 191109 131900, 190786 132216, 190699 132356, 190197 132439, 190033 132391, 189869 132499, 189476 132278, 189146 132444, 188863 132755, 188988 132913, 188790 133104, 188982 133184, 189187 133074, 189508 133076, 189871 133116, 190198 133123, 190478 133381, 190250 133530, 190102 133558, 189825 133438, 189535 133412, 189184 133729, 189013 133705, 188688 133186, 188417 133400, 188466 133800, 188343 133827, 188191 134088, 188443 133966, 188634 134119, 188473 134253, 188554 134441, 188748 134657, 188561 134858, 188196 134878, 188048 134714, 187913 134768, 187564 134617, 187037 134670, 186970 134843, 186426 134944, 186325 135023, 185814 134980, 185359 135030, 184937 135137, 184614 135285, 184509 135270, 184229 135295, 184054 135332, 183574 135274, 183031 135044, 182917 135076, 182745 135040, 182557 135142, 182388 135164, 182322 135235, 182611 135504, 182447 135467, 182050 135620, 182111 135323, 182091 135263, 181968 135321, 181618 135392, 181390 135620, 181116 135809, 180936 135876, 180546 136059, 180255 135599, 180163 135526, 179859 135421, 179759 135446, 179567 135417, 179486 135360, 179526 134997, 179438 134867, 179239 134691, 179081 134606, 178876 134648, 178566 134828, 178248 135146, 178103 135168, 178055 135464, 177807 135658, 177624 135329, 177652 135295, 177531 135243, 177372 135070, 177298 134846, 177067 134512, 176768 134856, 176657 134825, 176729 134889, 176593 134881, 176206 135111, 175924 135211, 175953 135492, 175788 135834, 175713 135442, 175715 135305, 175387 135299, 175289 135344, 175387 135388, 175293 135727, 175146 135656, 175151 135572, 175059 135428, 174951 135453, 174890 135224, 174820 135317, 174654 135173, 174554 135176, 174526 135533, 174328 135628, 174253 135554, 174341 135231, 174315 135183, 174377 135009, 174262 135070, 174318 135010, 174226 135030, 173986 134985, 173626 135116, 173525 135006, 173212 135289, 173185 135293, 173246 135038, 173338 134960, 173105 134747, 172823 134798, 172466 134944, 172110 135050, 172058 135122, 171899 135165, 171707 135114, 171739 134916, 171597 134656, 171452 134782, 171125 134705, 171063 134585, 170889 134653, 171053 134748, 170891 134901, 170633 134936, 170627 134984, 170357 135357, 170243 135310, 169999 135031, 170160 134980, 170330 134756, 170245 134710, 169763 134820, 169567 134677, 169650 134401, 169619 134343, 169695 134147, 169843 133896, 169706 133812, 169600 133874, 169504 133838, 169485 133732, 169348 133673, 169205 133740, 169071 133988, 169041 133807, 169099 133767, 169055 133580, 168495 133612, 168605 134014, 168099 134245, 167911 134560, 167522 134827, 167355 134991, 167175 135008, 166950 135205, 167010 134953, 166956 134754, 167304 134541, 167310 134511, 166920 134471, 166584 134722, 166503 134544, 166459 134577, 166188 134555, 166033 134684, 165978 134858, 165644 134971, 165513 134969, 165457 135112, 165298 135211, 165549 135401, 165275 135495, 164789 135472, 164656 135327, 164463 135262, 164191 135369, 163909 135388, 163842 135067, 163510 135313, 163449 135268, 163371 135354, 162878 135311, 162672 135246, 162452 135360, 162432 135304, 162561 135111, 162011 135115, 161929 135004, 161647 135029, 161618 135049, 161277 135037, 161390 135170, 161367 135272, 161047 135108, 160951 135204, 160784 135006, 160680 134934, 160618 135007, 160677 135147, 160984 135287, 161300 135544, 161713 135737, 161331 135585, 161067 135607, 160888 135453, 160693 135449, 160366 135346, 160138 135548, 160013 135259, 159835 134959, 159454 135107, 159302 135156, 158877 135405, 158833 135403, 158563 135456, 158353 135531, 157772 135541, 157337 135409, 157176 135474, 156947 135451, 156609 135642, 156715 135774, 156893 135886, 156671 135870, 156198 136100, 156259 135837, 156229 135744, 156127 135803, 155829 135893, 155574 136163, 155349 136334, 154918 136528, 154714 136680, 154542 136500, 154353 136231, 153984 136113, 153652 136120, 153552 136060, 153593 135690, 153306 135419, 153053 135341, 152580 135581, 152424 135744, 152010 136078, 151973 136256, 151750 136416, 151665 136297, 151649 136165, 151319 135935, 151244 135715, 150941 135293, 150655 135636, 150553 135647, 150201 135755, 150161 135787, 149841 135908, 149141 135992, 148757 136104, 148867 136170, 148843 136326, 148639 136420, 148607 136196, 148634 136111, 148587 135746, 148415 135444, 148211 135379, 148050 135457, 148114 135730, 147652 135706, 147599 135643, 147195 135813, 146749 136022, 146448 136017, 146441 135964, 146753 135735, 146754 135594, 146534 135468, 146203 135523, 146003 135606, 145554 135726, 145105 135802, 144993 135772, 145004 135675, 144940 135517, 144856 135457, 144819 135353, 144738 135411, 144258 135273, 144244 135247, 144182 135276, 144239 135309, 144026 135482, 143898 135483, 143882 135641, 143572 135967, 143240 135766, 143044 135494, 143258 135460, 143461 135255, 143530 134972, 142808 135181, 142614 135003, 142703 134579, 142911 134207, 142805 134129, 142630 134203, 142475 134117, 142442 133928, 142364 133881, 142278 133907, 142160 134105, 142168 134201, 142008 134222, 141982 133986, 142086 133926, 142018 133734, 141547 133613, 141440 133711, 141550 134115, 140958 134288, 140799 134562, 140406 134762, 140183 134934, 140023 134920, 139718 135114, 139790 134861, 139755 134588, 140088 134453, 140094 134400, 139750 134286, 139351 134492, 139248 134284, 138934 134214, 138818 134290, 138777 134473, 138691 134549, 138319 134615, 138165 134492, 138144 134732, 137948 134822, 138223 135040, 137946 135112, 137552 135086, 137343 135004, 137322 134941, 137022 134843, 136645 134999, 136493 135002, 136348 134700, 135940 134954, 135577 135006, 135229 134925, 135039 134916, 134877 135044, 134792 134959, 135057 134672, 134591 134852, 134455 134932, 134172 134918, 133779 135004, 133556 135085, 133748 135061, 133804 135177, 133694 135392, 133421 135386, 133726 135424, 134098 135563, 134086 135641, 133686 135616, 133556 135571, 133360 135662, 133229 135581, 132893 135712, 132594 135774, 132456 135925, 132364 135912, 132064 135512, 131960 135530, 131449 135373, 131078 135348, 130574 135691, 130880 135933, 130811 135921, 130474 136087, 130566 135694, 130433 135488, 130058 135503, 130241 135641, 130311 135805, 129948 135956, 129770 136171, 129365 136500, 128949 136741, 128626 136251, 128497 136199, 128446 136104, 128148 136173, 127886 136127, 127908 135993, 127839 135960, 127716 135989, 127651 136138, 127575 136144, 127158 135990, 126750 136006, 126603 136045, 126590 136114, 126404 136287, 126174 136390, 126088 136272, 126079 136077, 125907 135956, 125420 136013, 125204 136108, 125018 135838, 124939 135792, 124563 135511, 124353 135466, 124189 135599, 124265 135634, 124639 135626, 124729 135776, 124430 135901, 123754 135988, 123703 136011, 123347 136074, 123273 136052, 123213 135680, 123096 135477, 122819 135391, 122756 135337, 122691 135437, 122643 135651, 122510 135631, 121999 135800, 121844 135668, 121573 135898, 121568 135811, 121622 135769, 121623 135583, 121842 135658, 121902 135401, 121762 135410, 121620 135574, 121417 135449, 121133 135476, 121049 135569, 120658 135651, 120447 135748, 120258 135904, 120154 135874, 120086 136053, 119789 136279, 119473 136548, 119452 136500, 119534 136164, 119652 135882, 119635 135791, 119395 135980, 119227 135779, 118829 135851, 118509 136127, 118507 136190, 118428 136136, 118318 136180, 118197 136376, 118305 136615, 118228 136767, 117982 137027, 117776 137191, 117740 136950, 117886 136638, 118130 136633, 118132 136389, 117856 136399, 117602 136628, 117223 136550, 117160 136572, 117126 136516, 117339 136288, 117514 136185, 117251 136082, 117149 136004, 116952 136134, 116884 136454, 116808 136303, 116687 136216, 116557 136220, 116387 136459, 116383 136518, 116338 136531, 116224 136732, 116048 136740, 115806 136673, 115623 136472, 115752 136469, 115765 136210, 115875 136046, 115726 135924, 115616 135998, 115573 136442, 115313 136656, 115197 136803, 114946 136606, 114421 136372, 114395 136106, 114671 135974, 114756 135965, 114950 135593, 114637 135496, 114495 135317, 114420 135283, 114264 135411, 114337 135508, 114237 135738, 114010 135683, 114047 135454, 113922 135387, 114084 135177, 113709 135347, 113585 135286, 113801 134932, 113474 135105, 113328 135292, 113311 135076, 113061 135023, 112988 134932, 112800 135031, 112663 135274, 112815 135369, 112848 135467, 112723 135575, 112282 135653, 112477 135987, 112468 136249, 112200 136411, 112030 136397, 111744 136605, 111606 136329, 111528 136219, 111495 135947, 111474 135955, 111198 135736, 111206 135609, 111344 135288, 111483 135126, 111378 135091, 111296 135276, 110948 135073, 110853 135147, 110801 135336, 110750 135379, 110126 135364, 109900 135563, 109826 135582, 109902 135675, 109930 135813, 109898 135977, 109361 136059, 109070 135973, 108982 135753, 109018 135678, 108572 135701, 108359 135989, 108183 135787, 108007 135903, 108134 135651, 107993 135488, 107824 135440, 107510 135317, 107500 135251, 107380 135207, 107222 135217, 107036 135399, 106858 135430, 106661 135198, 106441 135242, 106302 135206, 106211 135075, 106038 135009, 106034 135111, 105955 135137, 105923 135311, 105951 135404, 106093 135454, 106136 135385, 106276 135341, 106506 135358, 106737 135520, 106855 135713, 106749 135924, 106291 135738, 106290 135663, 106137 135531, 106056 135633, 106235 135744, 106183 136032, 105943 136048, 105739 135953, 105482 136067, 105360 136075, 105289 136216, 105312 136288, 105166 136376, 104952 136050, 104665 136071, 104604 135981, 104366 135871, 104515 135755, 104145 135234, 104041 135248, 104085 135307, 103970 135500, 103984 135672, 103676 135965, 103449 135625, 103475 135258, 103084 135277, 102423 135413, 102316 135482, 101926 135658, 101223 136046, 101049 136013, 100672 136006, 100404 135965, 100242 135976, 100191 136146, 99730 135992, 99269 136011, 99195 136002, 98823 136033, 98693 135957, 98012 135998, 97790 136098, 97612 135850, 97310 135619, 96993 135447, 96728 135226, 96725 134880, 96456 134773, 96152 134807, 95843 134931, 95367 135283, 95072 135605, 94874 135414, 94584 135321, 94485 135118, 94285 134980, 93918 135156, 93644 135203, 93621 135244, 93579 135231, 93264 135493, 93001 135580, 92834 135678, 92670 136057, 92054 136536, 92030 136488, 92073 136227, 92244 135948, 92190 135752, 91918 136007, 91900 135879, 91802 135771, 91661 135828, 91347 135880, 91131 136093, 91116 136159, 91047 136117, 90919 136159, 90759 136374, 90872 136615, 90797 136764, 90339 137184, 90307 136950, 90453 136639, 90695 136634, 90694 136388, 90423 136398, 90176 136632, 89794 136550, 89727 136573, 89681 136498, 89972 136246, 90064 136244, 90142 136168, 90077 136100, 89848 135965, 89492 136145, 89455 136416, 89371 136306, 89125 136172, 89029 136302, 88890 136646, 88616 136740, 88374 136672, 88233 136483, 88321 136465, 88333 136214, 88462 136053, 88219 135897, 88161 136116, 88126 136435, 87745 136787, 87523 136611, 86989 136371, 86963 136104, 87240 135974, 87326 135965, 87517 135593, 87207 135496, 86971 135254, 86904 135507, 86806 135738, 86609 135713, 86527 135539, 86543 135406, 86505 135345, 86587 135239, 86398 135331, 86209 135346, 86166 135299, 86313 135035, 86129 134966, 86072 134981, 86005 134907, 85524 134979, 85431 135193, 85222 135242, 85375 135344, 85363 135419, 85430 135509, 85349 135505, 85235 135590, 84944 135622, 84874 135666, 85110 136117, 84884 136377, 84590 136411, 84297 136563, 84146 136283, 84165 136654, 84073 136578, 84008 136352, 83879 136374, 83968 136325, 83982 136146, 83780 136341, 83944 136147, 84002 136108, 84028 135950, 83831 135806, 83748 135631, 83148 135941, 82702 136044, 82544 136113, 82485 136088, 82156 136110, 81742 136005, 81304 136319, 81199 136183, 81247 136069, 81111 136096, 81017 136168, 81122 136274, 81174 136215, 81398 136618, 80878 136583, 80988 136446, 80919 136464, 80688 136602, 80607 136305, 80260 136390, 79838 136780, 79352 136963, 79204 137074, 78889 136647, 78575 136452, 78214 136412, 78091 136286, 78104 136094, 77898 136077, 77858 136221, 77880 136293, 77736 136379, 77573 136136, 77356 136219, 77570 136404, 77218 136500, 77255 136280, 77348 136219, 76993 136083, 76834 136041, 76765 135943, 76670 135934, 76675 136033, 76453 136336, 76225 136116, 76069 135927, 75919 135837, 75731 135667, 75605 135619, 75565 135543, 75543 135288, 75369 135409, 75321 135349, 75126 135313, 75060 135146, 74935 135097, 74810 135110, 74619 135231, 74763 135254, 75062 135388, 74744 135552, 73980 135632, 73536 135753, 73480 135413, 73331 135175, 73090 135141, 72995 135227, 72949 135405, 72736 135400, 72236 135639, 72169 135593, 71848 135917, 71689 135933, 71673 135823, 71862 135663, 71864 135511, 71654 135425, 71367 135493, 71288 135568, 71040 135604, 70993 135634, 70360 135763, 70193 135696, 70220 135539, 70079 135246, 69950 135326, 69544 135136, 69495 135038, 69386 135073, 69489 135154, 69314 135263, 69145 135215, 69111 135345, 69305 135639, 69276 135684, 68888 135662, 68444 135761, 68640 135448, 68572 135408, 68355 135051, 68640 134987, 68769 134819, 68580 134663, 68374 134979, 68064 135234, 67989 135225, 67971 135087, 68120 134737, 67881 134421, 67639 134362, 67512 134397, 67456 134334, 67372 134362, 67111 134592, 67228 134742, 67182 134910, 66807 135079, 66690 135304, 66570 135323, 66126 135241, 66073 135302, 66004 135591, 65754 135734, 65537 135657, 65272 135853, 65027 135919, 65005 135988, 65058 136145, 64870 136361, 64656 136047, 64453 136137, 64643 136213, 64809 136374, 64490 136586, 64183 136707, 64278 136212, 63953 136111, 63861 136118, 63817 136044, 63870 135938, 64210 135619, 63866 135287, 63785 135135, 63681 135233, 63617 135505, 63636 135779, 63183 136382, 62995 135952, 62927 135832, 62946 135473, 62925 135342, 62808 135451, 62588 135515, 62483 135489, 62333 135146, 62578 134986, 62457 134920, 62208 134847, 61895 134946, 61753 134798, 61578 134975, 61937 135253, 62069 135289, 61697 135292, 61571 135314, 61428 135229, 61397 135335, 61004 135622, 60241 135442, 60653 135209, 60659 135133, 60604 135054, 60260 134980, 60168 134994, 59960 135125, 59926 135360, 60026 135769, 60016 135836, 59667 135644, 59627 135507, 59680 135450, 59386 135416, 59179 135363, 59074 135411, 58765 135445, 58517 135731, 58152 135190, 58085 135149, 57916 134851, 57712 134842, 57447 135170, 57427 135213, 57215 135379, 57082 135597, 57001 135535, 56963 135331, 56899 135248, 56720 135236, 56064 134715, 55605 134667, 55515 134762, 55853 134970, 55757 135450, 55717 135488, 55293 135441, 55267 135392, 54937 135422, 54608 135618, 54543 135725, 54338 136007, 54046 135793, 53530 135623, 53191 135328, 53035 135288, 52979 135480, 53018 135612, 52670 135470, 52383 135414, 52152 135464, 52475 135204, 52428 135144, 52295 135118, 51984 135181, 51773 135125, 51500 135243, 50834 135326, 50687 135287, 50434 135276, 50007 135088, 49585 134979, 49066 134911, 48468 134977, 48441 134957, 47881 134850, 47829 134737, 47239 134728, 47050 134814, 46849 134739, 46622 134986, 46413 134986, 46104 134687, 46275 134378, 46224 134151, 46139 134047, 46249 133899, 46238 133784, 45899 133657, 45626 133769, 45444 133622, 45475 133565, 45347 133384, 44976 133405, 44788 133508, 44529 133467, 44104 133693, 44000 133560, 44091 133436, 44206 133376, 44307 133392, 44335 133296, 44590 133071, 45463 133039, 46008 133156, 45961 133109, 45997 132799, 46025 132770, 45976 132712, 45725 132659, 45581 132482, 45236 132696, 45414 133008, 44857 132757, 44977 132539, 44958 132473, 44826 132404, 44601 132411, 44171 132353, 43769 131871, 43981 131810, 44119 131716, 43838 131518, 43861 131195, 43582 131142, 43466 131189, 43302 131170, 43324 131094, 43161 130950, 43196 130752, 43155 130663, 43383 130419, 43398 130353, 43323 130074, 43239 130062, 43301 129994, 43359 129445, 43225 129258, 43140 128928, 43217 128724, 43144 128657, 42940 128748, 42735 128567, 42877 128329, 42755 128222, 42669 128220, 42706 128570, 42589 128595, 42378 128809, 42407 128597, 42614 128199, 42483 128185, 42245 128300, 42148 128040, 42073 127995, 42155 127678, 42024 127417, 41939 127445, 41801 127704, 41694 127430, 41860 127106, 41683 126831, 41577 126917, 41452 127192, 41401 127192, 41263 126609, 41298 126498, 41365 125897, 41421 125628, 41539 125708, 41655 125570, 41501 125574, 41381 125345, 41326 125721, 41338 125846, 41251 125989, 41168 125910, 41230 125788, 41146 125605, 41042 125635, 40885 125517, 41079 125226, 41275 125115, 41340 125126, 41344 125038, 40969 124437, 40961 124074, 40972 123976, 40753 123596, 40812 123528, 40853 123552, 40876 123274, 40961 123455, 41052 123377, 40945 122880, 40909 122549, 41037 122550, 41096 122750, 41233 122723, 41310 122893, 41447 122850, 41470 122764, 41329 122150, 41112 121736, 41210 121353, 41117 121282, 40935 120693, 41055 120283, 40984 120078, 40891 120080, 40927 119761, 40902 119326, 40808 118962, 40775 118936, 40690 119317, 40642 119292, 40617 119136, 40666 118864, 40733 118575, 40747 118274, 40765 118204, 40822 118479, 40855 118554, 40940 118159, 41015 117994, 41038 117660, 41078 117340, 41284 116909, 41231 116854, 41170 116552, 41279 116484, 41140 116433, 40929 116541, 40868 116284, 40897 116124, 40745 116071, 40634 115906, 40632 115767, 40705 115521, 40730 115062, 40927 115022, 40990 115139, 40968 115320, 41035 115494, 41054 115226, 41119 115118, 41169 114738, 41259 114825, 41472 114524, 41525 114208, 41451 114180, 40917 113420, 40937 113343, 41219 113156, 41362 112973, 41270 112849, 41254 112554, 41194 112394, 41062 112384, 40975 112475, 40838 112528, 40816 112401, 40718 112361, 40745 112192, 40690 111957, 40598 111447, 40890 110922, 40889 110737, 40836 110775, 40757 110641, 40757 110459, 40731 110070, 40799 109881, 40874 109845, 40904 109699, 40875 109313, 40974 109296, 40990 109049, 41118 108830, 41130 108710, 41238 108243, 41150 107885, 41279 107595, 41556 107763, 41693 107879, 41557 108359, 41595 108818, 41673 108695, 41919 108567, 42073 108574, 42132 108654, 42286 108579, 42330 108646, 42440 108693, 42350 108523, 42438 108401, 42579 108519, 42637 108229, 42424 108110, 42221 107667, 42411 107536, 42181 107261, 42537 106908, 42767 107048, 42936 107335, 43055 107368, 43097 107513, 43366 107437, 43306 107073, 43182 106849, 43123 106812, 43063 106560, 43083 106441, 43331 106232, 43509 105528, 43637 105160, 43807 105021, 44351 104509, 44803 104559, 45345 104667, 45660 104709, 45785 104635, 46197 104955, 46251 104962, 46215 104945, 46234 104628, 46193 104483, 46273 104392, 46445 104532, 46628 104818, 46807 104657, 46802 104408, 46536 104297, 46374 104104, 46424 104051, 46462 103793, 46414 103721, 46151 103924, 46246 104365, 46082 104371, 46014 104302, 46079 103798, 46092 103325, 46245 103267, 46320 103282, 46370 103240, 46466 102961, 46654 103216, 46984 103089, 47079 103117, 47153 102995, 47334 102916, 47398 102930, 47791 102908, 47842 102889, 48162 102825, 48214 102889, 48058 102998, 48060 103341, 47898 103671, 48048 103640, 48074 103360, 48304 103328, 48459 103485, 48675 103443, 48921 103487, 48971 103424, 49012 103489, 49517 103390, 49313 103137, 49322 103118, 49073 102855, 49329 102621, 49495 102572, 49800 102575, 50067 102637, 50227 102894, 50528 102716, 50971 102866, 51195 102861, 51121 102672, 50655 102231, 51226 102367, 51573 102497, 51601 102525, 51897 102661, 51821 103018, 51929 103206, 52348 103245, 52419 103082, 52872 103051, 53058 103002, 53396 103083, 53372 102914, 53495 102723, 53679 102970, 53652 103076, 54044 103042, 54297 103001, 54488 102914, 54460 102886, 54772 102835, 54989 102481, 55098 102519, 55176 102722, 55297 102770, 55169 102855, 55529 102907, 55885 102741, 55913 102928, 55881 103089, 56057 103132, 56097 103022, 56248 102854, 56401 102766, 56440 102841, 56715 102836, 57049 102691, 57122 102419, 57278 102597, 57290 102727, 57353 102766, 57302 102812, 57354 102803, 57439 102630, 57593 102515, 57585 102421, 57664 102434, 57617 102266, 57786 101936, 57868 102121, 57971 102427, 58260 102239, 58317 101953, 58389 101991, 58462 102115, 58439 102199, 58521 102252, 58907 102200, 58954 102445, 59046 102440, 59109 102376, 59151 102163, 59105 102169, 59146 102062, 59356 102113, 59338 102205, 59260 102274, 59335 102416, 59345 102374, 59505 102441, 59446 102506, 59439 102771, 59465 102798, 59508 102742, 59616 102722, 59677 102788, 59543 102874, 59665 102972, 59914 102988, 60241 102811, 60840 102283, 61082 102235, 61133 101982, 61256 101889, 61397 102096, 61731 102268, 61738 102342, 61969 102451, 62118 102641, 62319 102503, 62687 102504, 63194 102340, 63358 102348, 63760 102288, 63878 102311, 64214 102268, 64083 102141, 64090 102040, 64390 101954, 64426 102126, 64367 102265, 64389 102596, 64543 102642, 64489 102807, 64596 102940, 64810 102777, 64823 102707, 65313 102750, 65707 102604, 66086 102383, 66205 102382, 66480 102342, 66088 102710, 66230 102849, 66332 102750, 66499 102802, 66889 102649, 66991 102574, 67293 102447, 67360 102447, 67701 102324, 67773 102544, 67887 102633, 67922 102597, 68384 102610, 68597 102382, 68614 102129, 68909 101754, 69031 101768, 69191 101854, 69327 101871, 69537 102127, 69233 102238, 69011 102701, 69384 102672, 69683 102467, 69779 102550, 69782 102799, 69655 103141, 69818 103191, 69618 103248, 69591 103373, 69858 103211, 70062 103377, 70373 103214, 70474 103282, 70555 103452, 70344 103586, 70391 103728, 70782 103798, 70905 103793, 70806 103354, 71297 103174, 71380 103089, 71462 103114, 71547 102957, 71793 102809, 72140 102520, 72186 102525, 72389 102362, 72580 102289, 72611 102315, 72535 102670, 72544 102884, 72236 103047, 72237 103073, 72525 103168, 72779 103052, 72823 102984, 72898 103039, 72928 103153, 73222 103288, 73295 103018, 73450 103029, 73644 102977, 73847 103010, 73875 102978, 74186 102898, 73915 102651, 74090 102604, 74571 102715, 74661 102889, 75004 103075, 75258 102974, 75439 102956, 75574 103240, 75956 103031, 76299 103060, 76515 103140, 76538 103184, 76809 103118, 76849 103084, 77240 102993, 77126 102706, 77356 102978, 77510 102976, 77507 102741, 77545 102710, 77663 102759, 77668 102946, 77858 102996, 77952 102741, 77609 102635, 77617 102522, 78023 102499, 78169 102538, 78325 102498, 78414 102540, 78762 102372, 79051 102271, 79150 102138, 79262 102170, 79478 102422, 79801 102043, 79885 102001, 80155 101803, 80254 101746, 80463 101586, 80611 101435, 80893 101793, 81238 101890, 81507 101843, 81662 101912, 81631 102200, 81719 102293, 81773 102114, 82047 101849, 82564 101937, 82706 102044, 82503 102174, 82391 102373, 82538 102309, 82913 101946, 83139 101911, 83193 101633, 83349 101514, 83440 101736, 83685 101935, 83760 101964, 83767 102077, 84077 102548, 84232 102322, 84631 102230, 84758 102536, 84960 102557, 85068 102451, 84941 102429, 84633 102228, 85126 102036, 85398 102015, 85573 101974, 85741 102024, 85931 101954, 86115 101955, 86016 101867, 86041 101723, 86244 101661, 86275 101877, 86245 101972, 86283 102339, 86450 102662, 86643 102768, 86769 102683, 86710 102436, 87155 102575, 87202 102648, 87595 102571, 87633 102615, 87740 102547, 87998 102474, 88271 102533, 88261 102606, 87960 102785, 88128 103007, 88202 102956, 88359 103045, 88680 102998, 89222 102938, 89243 102945, 89515 102924, 89615 102963, 89597 103055, 89690 103240, 89800 103320, 90333 103420, 90539 103256, 90597 103254, 90617 103077, 90900 102750, 91275 102945, 91463 103176, 91227 103240, 91092 103378, 91052 103481, 91291 103610, 91450 103581, 91650 103467, 91780 103562, 91783 103738, 91573 104311, 91611 104328, 91828 104210, 92044 104293, 92381 104155, 92471 104306, 92325 104416, 92377 104554, 92824 104574, 92899 104492, 92802 104159, 93307 103878, 93406 103844, 93510 103666, 93781 103441, 94089 103147, 94193 103134, 94364 102956, 94571 102807, 94470 103223, 94514 103381, 94248 103537, 94233 103632, 94499 103667, 94804 103460, 94827 103413, 94875 103437, 94915 103557, 95238 103695, 95351 103341, 95871 103225, 95882 103192, 96179 103030, 95913 102815, 96138 102733, 96544 102770, 96659 102821, 96700 102937, 97014 103062, 97223 102945, 97520 102892, 97608 103156, 97855 103060, 97955 102968, 98727 102806, 99483 102970, 99748 103059, 100038 102960, 99956 102800, 100051 102566, 100266 102601, 100058 102551, 100064 102492, 100030 102541, 99694 102416, 99708 102322, 100109 102392, 100361 102334, 100532 102386, 100784 102279, 101072 102229, 101240 102046, 101637 102556, 101816 102918, 102184 103285, 102019 103454, 102085 103588, 102066 103736, 101839 103973, 102074 104144, 101846 104344, 101760 104385, 101864 104564, 101945 104543, 102014 104450, 102275 104489, 102405 104459, 102376 104629, 102411 104678, 102451 104256, 102680 103942, 102346 103467, 102341 103247, 102250 102982, 102397 102895, 102731 102853, 102740 102888, 102996 102768, 103387 102987, 103486 103101, 103596 102948, 103455 102870, 103467 102836, 103736 102747, 103805 102415, 104035 102223, 104464 102286, 104663 102434, 104518 102525, 104297 102945, 104345 102967, 104680 102838, 105340 102801, 106125 102719, 106282 102724, 106681 102516, 106957 102500, 107141 102447, 107720 102513, 108053 102656, 108224 102608, 108469 102660, 108685 102551, 108635 102442, 108419 102265, 108640 102325, 108840 102275, 109154 102140, 109114 102339, 109152 102472, 109410 102392, 109797 102037, 110142 101906, 110458 101691, 110661 101924, 110765 102084, 111114 102197, 111396 102219, 111501 102275, 111484 102645, 111727 102914, 112139 102810, 112410 102597, 112739 102249, 112982 102181, 113035 101905, 113178 101773, 113348 102030, 113410 102047, 113648 102337, 113692 102355, 113916 102639, 114059 102420, 114483 102266, 114973 102008, 115149 101988, 115499 101861, 115628 101866, 116006 101756, 115861 101625, 115867 101540, 116101 101437, 116138 101639, 116099 101740, 116127 102098, 116295 102422, 116429 102475, 116596 102410, 116547 102246, 116621 102164, 117011 102215, 117057 102284, 117824 102077, 118150 102196, 118156 102230, 117818 102363, 117817 102486, 118028 102702, 118051 102670, 118271 102766, 118416 102736, 119023 102833, 119058 102857, 119321 102918, 119410 102985, 119393 103074, 119563 103446, 119649 103408, 120081 103746, 120339 103633, 120339 103450, 120649 103177, 121048 103536, 121230 103840, 120986 103834, 120856 103931, 120813 104036, 121072 104265, 121171 104277, 121402 104204, 121525 104322, 121508 104565, 121326 105001, 121363 105024, 121595 104957, 121781 105075, 122112 104983, 122173 105016, 122181 105173, 122280 105173, 122155 105241, 122165 105339, 122595 105444, 122672 105409, 122547 105080, 122838 105009, 123056 104896, 123159 104884, 123260 104743, 123520 104572, 123827 104332, 123913 104329, 124291 104057, 124200 104427, 124245 104553, 124007 104664, 123989 104751, 124252 104784, 124514 104627, 124538 104582, 124626 104611, 124694 104710, 124941 104777, 124983 104567, 125106 104449, 125553 104351, 125575 104284, 125845 104127, 125573 103988, 125783 103882, 126295 103875, 126431 103973, 126632 104017, 126860 103899, 127125 103831, 127269 104068, 127597 103827, 127626 103849, 127675 103799, 128244 103837, 128406 103915, 128605 103677, 128716 103854, 128759 104020, 128874 103995, 128916 104046, 128974 104043, 129029 103893, 129275 103787, 129447 103791, 129671 103577, 129602 103440, 129713 103206, 129320 103146, 129335 103050, 129719 103003, 129862 103020, 130041 102895, 130164 102932, 130487 102739, 130799 102594, 130951 102403, 131045 102444, 131276 102732, 131415 102812, 131561 103097, 131815 103267, 131982 103425, 131825 103585, 131872 103711, 131816 103924, 131616 104110, 131841 104234, 131829 104315, 131938 104364, 132261 104347, 132445 104089, 132609 104040, 132419 104033, 132330 103782, 132117 103600, 132132 103546, 132005 103154, 132245 103050, 132452 103073, 132708 102981, 133070 103149, 133247 103344, 133509 103064, 133475 102915, 133554 102723, 133791 102553, 134312 102774, 134819 103028, 134408 102897, 134285 102945, 134096 103200, 134206 103391, 134413 103369, 134601 103463, 135139 103493, 135192 103373, 135744 103302, 135773 103279, 136353 103379, 136882 103330, 137201 103288, 137623 103123, 137969 103106, 138563 103213, 138786 103317, 138974 103260, 139246 103310, 139402 103231, 139102 102993, 139340 103043, 139565 102966, 139877 102792, 139845 102935, 139898 103096, 140036 103041, 140375 102674, 140862 102398, 141105 102152, 141382 102472, 141741 102568, 142001 102545, 142150 102604, 142135 102943, 142396 103154, 142942 102885, 143193 102610, 143529 102283, 143763 102185, 143838 102080, 143878 101879, 143969 101790, 144119 101959, 144311 102032, 144524 102223, 144678 102262, 144829 102401, 144974 102233, 145163 102159, 145511 102099, 145541 102073, 145998 101872, 146354 101835, 146500 101798, 146645 101832, 146867 101744, 146901 101517, 147271 101389, 147289 101492), (143581 135001, 143976 135192, 143940 135078, 144043 134952, 144013 134901, 143594 134807, 143581 135001), (68879 134758, 69248 134988, 69214 134862, 69298 134787, 69215 134663, 68774 134519, 68879 134758), (65782 134382, 65714 134660, 65735 134790, 65796 134809, 66043 134707, 66253 134741, 66493 134669, 66828 134926, 67017 134614, 66814 134713, 66601 134499, 66540 134559, 66487 134521, 66270 134667, 66058 134661, 65904 134347, 65827 134312, 65782 134382), (164793 134568, 164770 134690, 164905 134902, 164993 134817, 165283 134808, 165433 134869, 165622 134594, 165601 134517, 165139 134610, 164916 134441, 164793 134568), (143356 134540, 143449 134773, 143588 134782, 143708 134502, 143559 134451, 143356 134540), (170249 134097, 170241 134167, 170413 134497, 170597 134585, 170823 134629, 170854 134376, 170475 134334, 170593 134042, 170406 134003, 170249 134097), (137415 134174, 137526 134449, 137609 134353, 138162 134483, 138362 134150, 137891 134139, 137765 134170, 137577 134038, 137415 134174), (45978 133615, 46251 133757, 46366 133686, 46383 133467, 46213 133333, 45978 133615), (189640 132105, 190033 132258, 190139 132148, 189973 132090, 189640 132105), (193713 118969, 193757 118982, 193790 118915, 193726 118073, 193676 118023, 193713 118969), (191372 108040, 191400 108103, 191304 108436, 191327 108481, 191556 108335, 191594 108247, 191510 107981, 191407 107912, 191372 108040), (188119 105974, 188080 106056, 188126 106140, 188400 105920, 188318 105909, 188119 105974), (188652 105805, 188679 106125, 189087 106087, 188973 105793, 188652 105805), (189497 105786, 189534 105812, 189535 105925, 189583 105823, 189784 105774, 189926 105683, 189733 105606, 189497 105786), (131571 104488, 131787 104761, 131925 104881, 132137 104879, 132179 104738, 132085 104738, 131680 104507, 131686 104442, 131571 104488), (188398 103912, 188405 103992, 188567 104111, 188360 104298, 188335 104303, 188064 104441, 188048 104640, 188235 104846, 188465 104447, 188408 104330, 188567 104256, 188638 104158, 188640 104046, 188713 103903, 188484 103780, 188398 103912), (126133 104488, 125891 104479, 125575 104527, 125512 104660, 125931 104638, 126033 104613, 126166 104672, 126253 104598, 126251 104514, 126186 104425, 126133 104488), (187466 104348, 187379 104462, 187442 104536, 187763 104398, 187558 104297, 187570 104259, 187375 104173, 187466 104348), (120287 104169, 120666 104304, 120664 104164, 120395 103967, 120287 104169), (133346 103832, 133312 103838, 133367 104088, 133469 104201, 133668 104192, 133560 104017, 133663 103708, 133512 103644, 133346 103832), (182922 103927, 182951 104078, 183087 104160, 183256 104093, 183573 103898, 183598 103833, 183459 103611, 183514 103412, 182922 103927), (133024 103609, 132839 103701, 132613 103652, 132648 103884, 132899 103876, 133002 103960, 133310 103833, 133476 103591, 133254 103347, 133024 103609), (90511 103764, 90906 103803, 90904 103660, 90610 103549, 90511 103764), (95768 103681, 96057 103732, 96358 103662, 96506 103784, 96595 103702, 96614 103587, 96533 103461, 96475 103535, 96214 103469, 95938 103429, 95768 103681), (183989 103559, 184007 103692, 183892 103752, 184037 103736, 184199 103460, 184055 103448, 183989 103559), (73775 103408, 73759 103427, 74218 103505, 74486 103509, 74513 103446, 74456 103334, 74390 103386, 74146 103310, 73775 103408), (103243 103402, 103363 103347, 103697 103417, 103838 103273, 103639 103293, 103500 103088, 103243 103402), (175394 103184, 175246 103409, 175829 103298, 175863 103262, 176009 103310, 176077 103263, 176079 103189, 176037 103148, 175394 103184), (59468 102800, 59496 102829, 59618 102772, 59468 102800), (114617 102545, 114800 102539, 114898 102432, 114783 102428, 114493 102288, 114617 102545)), ((108850 136644, 108348 136570, 108610 136156, 108850 136644)), ((104897 136284, 104997 136403, 104652 136500, 104722 136201, 104897 136284)), ((174305 135194, 174168 135529, 174037 135603, 174086 135371, 174158 135328, 174135 135113, 174305 135194)), ((136146 135168, 135649 135133, 135649 135090, 135940 134969, 136146 135168)), ((41043 121936, 41186 122120, 41202 122554, 40944 122100, 40904 121929, 40928 121890, 41043 121936)), ((123856 103788, 123975 104015, 123854 104135, 123736 103997, 123463 103841, 123678 103718, 123856 103788)), ((181388 103391, 181538 103439, 181342 103486, 181240 103467, 181357 103063, 181388 103391)), ((119724 102830, 119639 103036, 119662 103128, 119569 103134, 119480 102926, 119554 102702, 119724 102830)), ((173519 102386, 173602 102512, 173609 102599, 173728 102771, 173514 102996, 173313 102755, 172941 102588, 173164 102419, 173266 102414, 173364 102332, 173519 102386)), ((94131 102562, 94237 102760, 94123 102883, 94024 102765, 93841 102777, 93907 102672, 93790 102609, 93947 102512, 94131 102562)), ((150965 102382, 150913 102507, 150983 102711, 150743 102752, 150574 102561, 150694 102218, 150965 102382)), ((68054 101957, 67990 102150, 68030 102280, 67838 102396, 67733 102292, 67830 101952, 68054 101957)), ((72160 101873, 72322 102233, 72151 102379, 71998 102153, 71724 102100, 71823 101958, 71736 101883, 71999 101784, 72160 101873)), ((169448 101850, 169401 101987, 169460 102194, 169226 102286, 169062 102121, 169154 101882, 169174 101745, 169448 101850))) \ No newline at end of file diff --git a/stress_benchmark/resources/035.settings b/stress_benchmark/resources/035.settings index 07cfade33e..fa8458c460 100644 --- a/stress_benchmark/resources/035.settings +++ b/stress_benchmark/resources/035.settings @@ -156,6 +156,7 @@ machine_settings=0 raft_base_extruder_nr=0 z_seam_y=300 wall_overhang_angle=90 +seam_overhang_angle=30 draft_shield_height=10 _plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 travel_retract_before_outer_wall=True @@ -533,7 +534,6 @@ skirt_brim_minimal_length=250 cooling=0 brim_replaces_support=False wall_x_extruder_nr=-1 -support_interface_skip_height=0.2 machine_nozzle_head_distance=3 support_bottom_pattern=grid raft_base_wall_count=1 diff --git a/stress_benchmark/resources/035.wkt b/stress_benchmark/resources/035.wkt index 2437697235..06f2061417 100644 --- a/stress_benchmark/resources/035.wkt +++ b/stress_benchmark/resources/035.wkt @@ -1 +1 @@ -MULTIPOLYGON (((105538 100642, 105460 100865, 105332 100671, 105324 100395))) \ No newline at end of file +MULTIPOLYGON (((105538 100642, 105460 100865, 105332 100671, 105324 100395, 105538 100642))) \ No newline at end of file diff --git a/stress_benchmark/resources/036.settings b/stress_benchmark/resources/036.settings index 5a87f6f72f..8143588de7 100644 --- a/stress_benchmark/resources/036.settings +++ b/stress_benchmark/resources/036.settings @@ -156,6 +156,7 @@ machine_settings=0 raft_base_extruder_nr=0 z_seam_y=0 wall_overhang_angle=90 +seam_overhang_angle=30 draft_shield_height=10 _plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 travel_retract_before_outer_wall=True @@ -532,7 +533,6 @@ skirt_brim_minimal_length=250 cooling=0 brim_replaces_support=False wall_x_extruder_nr=-1 -support_interface_skip_height=0.12 machine_nozzle_head_distance=3 support_bottom_pattern=grid raft_base_wall_count=1 diff --git a/stress_benchmark/resources/036.wkt b/stress_benchmark/resources/036.wkt index b446df5126..2e6f0ae4a7 100644 --- a/stress_benchmark/resources/036.wkt +++ b/stress_benchmark/resources/036.wkt @@ -1 +1 @@ -MULTIPOLYGON (((121388 114032, 121864 114082, 122072 114095, 122751 114286, 123176 114526, 123628 115013, 123660 115052, 123686 115064, 124108 115321, 124414 115470, 125223 116018, 125499 116259, 125729 116424, 126182 116776, 126279 116928, 126493 117177, 126607 117388, 126679 117838, 126648 118351, 126483 118764, 126431 118936, 126176 119342, 126107 119410, 125957 119769, 125849 120186, 125789 120699, 125629 120953, 125359 121178, 125203 121271, 124971 121431, 124460 121712, 124334 121817, 123797 121962, 123166 122179, 122754 122238, 122089 122409, 121296 122573, 121147 122612, 120003 122710, 118982 122698, 118634 122712, 118143 122674, 117670 122751, 117333 122786, 116462 122746, 115663 122601, 115265 122396, 114854 122220, 114347 121911, 113956 121494, 113812 121290, 113687 120672, 113765 120296, 113322 119208, 113269 118000, 113483 117108, 113604 116860, 113909 116508, 114406 115892, 114825 115607, 115154 115399, 115949 115145, 116618 115084, 117232 114925, 118095 114619, 118395 114533, 119157 114269, 119722 114149, 120298 114060, 120912 114029) (121263 114638, 120566 114766, 119835 114963, 119063 115234, 118193 115571, 117603 115895, 117303 116186, 117605 116222, 117921 116412, 118252 116777, 118419 117050, 118566 117498, 118948 118551, 118965 118880, 118812 119617, 118364 119738, 117904 119832, 116763 120138, 116484 120172, 115931 120196, 115199 120569, 114801 120598, 114879 120686, 115473 121094, 116247 121402, 117043 121434, 117516 121274, 117778 121152, 118062 120974, 118426 120523, 118677 120173, 118771 119812, 118812 119617, 118887 119597, 119360 119454, 120054 119224, 120519 119045, 121009 118829, 120921 118129, 121443 116921, 121675 116410, 122014 116103, 122426 115920, 123157 115934, 124016 116102, 123930 116424, 123816 116745, 123690 116914, 123553 117161, 123230 117517, 122857 117830, 122367 118159, 121933 118398, 121517 118604, 121009 118829, 121095 119514, 121241 119796, 121469 120081, 121754 120588, 122072 120846, 122598 121111, 122735 121130, 123182 121220, 123860 121105, 124594 120695, 124751 120557, 125112 120027, 125361 119552, 125531 118873, 125454 117597, 125355 116997, 125170 116591, 124654 116227, 124016 116102, 124034 115771, 123922 115376, 123660 115052, 123015 114765, 122542 114637, 121940 114594) (115382 116201, 114771 116440, 114478 116880, 114275 117562, 114204 117858, 114059 118691, 114152 119452, 114214 119608, 113835 119958, 113765 120296, 113869 120552, 114085 120649, 114801 120598, 114736 120524, 114581 120250, 114351 119951, 114214 119608, 114290 119538, 114389 119466, 114703 119029, 114876 118930, 115043 118770, 115316 118297, 115622 117898, 116337 117236, 116671 116799, 117303 116186, 116865 116134)), ((112971 116946, 112971 116987, 113166 117294, 113249 117705, 113208 118014, 113124 118151, 113003 118233, 112971 118240, 112971 118261, 112876 118284, 112876 116900, 112901 116893))) \ No newline at end of file +MULTIPOLYGON (((121388 114032, 121864 114082, 122072 114095, 122751 114286, 123176 114526, 123628 115013, 123660 115052, 123686 115064, 124108 115321, 124414 115470, 125223 116018, 125499 116259, 125729 116424, 126182 116776, 126279 116928, 126493 117177, 126607 117388, 126679 117838, 126648 118351, 126483 118764, 126431 118936, 126176 119342, 126107 119410, 125957 119769, 125849 120186, 125789 120699, 125629 120953, 125359 121178, 125203 121271, 124971 121431, 124460 121712, 124334 121817, 123797 121962, 123166 122179, 122754 122238, 122089 122409, 121296 122573, 121147 122612, 120003 122710, 118982 122698, 118634 122712, 118143 122674, 117670 122751, 117333 122786, 116462 122746, 115663 122601, 115265 122396, 114854 122220, 114347 121911, 113956 121494, 113812 121290, 113687 120672, 113765 120296, 113322 119208, 113269 118000, 113483 117108, 113604 116860, 113909 116508, 114406 115892, 114825 115607, 115154 115399, 115949 115145, 116618 115084, 117232 114925, 118095 114619, 118395 114533, 119157 114269, 119722 114149, 120298 114060, 120912 114029, 121388 114032), (121263 114638, 120566 114766, 119835 114963, 119063 115234, 118193 115571, 117603 115895, 117303 116186, 117605 116222, 117921 116412, 118252 116777, 118419 117050, 118566 117498, 118948 118551, 118965 118880, 118812 119617, 118364 119738, 117904 119832, 116763 120138, 116484 120172, 115931 120196, 115199 120569, 114801 120598, 114879 120686, 115473 121094, 116247 121402, 117043 121434, 117516 121274, 117778 121152, 118062 120974, 118426 120523, 118677 120173, 118771 119812, 118812 119617, 118887 119597, 119360 119454, 120054 119224, 120519 119045, 121009 118829, 120921 118129, 121443 116921, 121675 116410, 122014 116103, 122426 115920, 123157 115934, 124016 116102, 123930 116424, 123816 116745, 123690 116914, 123553 117161, 123230 117517, 122857 117830, 122367 118159, 121933 118398, 121517 118604, 121009 118829, 121095 119514, 121241 119796, 121469 120081, 121754 120588, 122072 120846, 122598 121111, 122735 121130, 123182 121220, 123860 121105, 124594 120695, 124751 120557, 125112 120027, 125361 119552, 125531 118873, 125454 117597, 125355 116997, 125170 116591, 124654 116227, 124016 116102, 124034 115771, 123922 115376, 123660 115052, 123015 114765, 122542 114637, 121940 114594, 121263 114638), (115382 116201, 114771 116440, 114478 116880, 114275 117562, 114204 117858, 114059 118691, 114152 119452, 114214 119608, 113835 119958, 113765 120296, 113869 120552, 114085 120649, 114801 120598, 114736 120524, 114581 120250, 114351 119951, 114214 119608, 114290 119538, 114389 119466, 114703 119029, 114876 118930, 115043 118770, 115316 118297, 115622 117898, 116337 117236, 116671 116799, 117303 116186, 116865 116134, 115382 116201)), ((112971 116946, 112971 116987, 113166 117294, 113249 117705, 113208 118014, 113124 118151, 113003 118233, 112971 118240, 112971 118261, 112876 118284, 112876 116900, 112901 116893, 112971 116946))) \ No newline at end of file diff --git a/stress_benchmark/resources/037.settings b/stress_benchmark/resources/037.settings index c3b00ba245..95e29b5c7c 100644 --- a/stress_benchmark/resources/037.settings +++ b/stress_benchmark/resources/037.settings @@ -156,6 +156,7 @@ machine_settings=0 raft_base_extruder_nr=0 z_seam_y=225 wall_overhang_angle=90 +seam_overhang_angle=30 draft_shield_height=10 _plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 travel_retract_before_outer_wall=True @@ -532,7 +533,6 @@ skirt_brim_minimal_length=250 cooling=0 brim_replaces_support=False wall_x_extruder_nr=-1 -support_interface_skip_height=0.1 machine_nozzle_head_distance=3 support_bottom_pattern=grid raft_base_wall_count=1 diff --git a/stress_benchmark/resources/037.wkt b/stress_benchmark/resources/037.wkt index 81e2c480a0..46c9b013fc 100644 --- a/stress_benchmark/resources/037.wkt +++ b/stress_benchmark/resources/037.wkt @@ -1 +1 @@ -MULTIPOLYGON (((107638 61798, 107744 62158, 108015 62180, 108062 62230, 108158 62595, 108629 62124, 108298 62134, 108653 62014, 109074 62244, 109253 61956, 109398 62376, 109778 62263, 110656 62109, 110664 62166, 111427 62029, 111455 62046, 111909 62070, 111589 62212, 111811 62557, 112026 62552, 112468 62660, 112801 62720, 113487 62365, 113536 62295, 113672 62301, 113685 62442, 113789 62647, 113875 62653, 114231 62320, 114654 62279, 115076 62173, 115173 62437, 115478 62555, 115710 62416, 115765 62591, 116266 62673, 116360 62845, 116641 62839, 116922 62956, 117235 62822, 117458 63223, 117459 62791, 117998 62730, 117546 62587, 117967 62033, 118261 61840, 118748 61934, 119096 62353, 119359 62691, 119801 62728, 120175 62684, 120280 62944, 120774 62898, 120901 62842, 121043 63014, 121518 63116, 121805 63356, 122041 63450, 122526 63294, 122632 63225, 123064 63424, 123244 63527, 123317 63515, 124068 63678, 124174 63956, 124422 63794, 124995 63832, 125404 64201, 126132 64693, 126089 64441, 126457 64147, 126777 64239, 127418 64478, 128049 64082, 128275 64819, 128762 64965, 128929 64780, 128811 65015, 129252 65023, 130043 64726, 130423 64443, 130492 64314, 130544 64398, 130731 64407, 131153 64554, 131278 64749, 131377 65183, 131928 65221, 132241 65138, 132370 65393, 132667 65433, 132789 65394, 133284 65774, 133424 65732, 133566 65611, 134116 65771, 134053 66534, 134180 66604, 134271 66552, 134167 65762, 134697 65797, 134853 65990, 134596 66599, 134863 66665, 135169 66580, 135312 66469, 135630 66611, 135871 66841, 136072 66764, 136384 66966, 136641 67299, 136703 67429, 136850 67448, 137216 67207, 137434 67416, 137720 67474, 137803 67771, 137931 67972, 138182 67790, 138010 67383, 138471 67543, 138462 67769, 138718 68077, 139093 67699, 139253 67684, 139313 67819, 139270 68249, 139653 68632, 139943 68770, 140305 68715, 140118 68196, 140039 68075, 140343 68073, 140824 68399, 140847 68453, 140689 68774, 141071 69419, 141379 69254, 141750 69433, 141961 69711, 142034 69702, 143056 70297, 143079 70701, 143137 70925, 143207 70998, 143671 70858, 144069 70888, 144063 70756, 144170 70669, 144256 70867, 144197 71122, 143918 71390, 143754 71388, 143741 71894, 143973 71983, 144178 71866, 144287 71644, 144585 71807, 145227 72064, 145344 72079, 145422 72196, 145734 72514, 146087 72750, 146266 73205, 146504 73286, 146903 72997, 147138 73558, 147258 73710, 147374 73949, 147816 74245, 148300 74404, 148262 73694, 148482 73644, 148546 74002, 148808 73791, 148947 73748, 149399 74308, 149320 74843, 149861 75048, 150004 75194, 150297 75228, 150697 75742, 150898 76141, 151018 76209, 151055 76307, 151091 76961, 151179 77070, 151126 77332, 151570 77909, 151580 78020, 151677 78055, 152478 78580, 152696 78890, 153246 78969, 153380 79090, 153611 79598, 153792 79860, 153905 79874, 153936 79591, 154122 79201, 154206 79214, 154328 79854, 154605 79798, 154504 80124, 154638 80595, 154936 80806, 155128 80869, 155269 81264, 155431 81461, 155986 81903, 156258 82619, 156519 82902, 156556 83165, 157009 83410, 157167 83650, 157544 83967, 157864 84528, 158004 84588, 158073 85144, 158021 85262, 158066 85649, 158272 85891, 158599 86346, 158557 86503, 158724 86951, 158727 86979, 158994 87451, 158791 87519, 158896 87858, 159613 88094, 159336 88273, 159649 88589, 159739 88888, 160231 89076, 160204 89377, 160601 89355, 160838 89733, 161221 90494, 161383 90683, 161672 91308, 161571 91396, 161971 91966, 162496 92318, 162462 92594, 162351 92817, 162180 92856, 161919 93082, 162058 93324, 162016 93586, 162077 93918, 161818 93768, 161505 94100, 161903 94483, 162130 94357, 162118 94570, 162029 94651, 161900 95118, 162044 95320, 162237 95693, 162398 96260, 162247 96429, 162428 97079, 162416 97087, 162649 97642, 162676 97681, 162746 98177, 162913 98358, 162884 98734, 162808 98875, 163144 99515, 163166 99796, 163123 100064, 163535 100638, 163830 100958, 163875 101096, 164441 101577, 164657 102608, 164595 102645, 164362 103065, 164983 103275, 165146 103843, 164874 103985, 165021 104245, 165545 104603, 165903 105016, 165782 105809, 165812 105910, 165682 106040, 165320 106161, 165251 107010, 165111 107456, 165237 108118, 165064 108353, 165277 108600, 165182 108913, 165174 109503, 165333 109641, 165308 109854, 165320 110236, 165568 110298, 165474 110446, 165754 111299, 165547 111687, 165981 111636, 165974 111657, 165481 111804, 165584 111929, 165889 112497, 165964 112767, 165945 113418, 166046 114684, 165503 115419, 165817 116075, 165383 116036, 165285 116518, 165742 116536, 165617 116819, 165673 117116, 165822 117431, 165683 117658, 165526 117986, 165568 118331, 165417 118612, 165467 118745, 165151 118758, 164957 118933, 164905 119163, 165368 119289, 165490 119256, 165516 119450, 165484 119467, 165217 120121, 165067 120571, 165157 121003, 165172 121288, 165011 121820, 164765 121800, 164445 121913, 164355 122565, 164523 122609, 164201 122923, 164910 123207, 164748 123566, 165050 124082, 164563 125083, 164392 125386, 164152 125996, 163871 126297, 163547 126535, 163469 126722, 163349 126839, 163017 127240, 162763 127834, 162564 127878, 162590 127731, 162175 127658, 162065 127927, 162342 128096, 162190 128472, 162603 128759, 162611 128912, 162760 129315, 162472 129764, 162485 130421, 162416 130697, 162248 130937, 162311 131118, 162261 132151, 162371 132801, 162325 132903, 162382 133095, 162566 133491, 162586 133703, 162446 133854, 162530 133985, 162238 134286, 161767 134062, 161670 134133, 161712 134452, 160591 134891, 160035 135235, 159899 135389, 159790 135615, 159612 135650, 159146 136137, 158963 136445, 158739 136611, 158161 136703, 157900 137055, 157994 137249, 157778 137593, 158521 137562, 158398 137737, 158264 137783, 157781 138194, 157602 138122, 157415 138501, 157068 138911, 156974 139057, 156760 139345, 156410 139507, 156292 139768, 155917 139738, 155750 139652, 155490 139865, 155149 140040, 155280 140188, 155685 140146, 155753 140218, 155589 140305, 155221 140427, 155160 140620, 155287 141386, 155238 141436, 155052 142258, 154966 142371, 154495 143275, 154456 143369, 154201 143734, 154049 144255, 153871 144409, 153698 144744, 153645 145119, 153283 144989, 152823 145452, 152842 145920, 152754 146154, 152301 146979, 152110 147120, 152044 147501, 151917 147924, 151659 148182, 151360 148687, 151430 149144, 151420 149256, 151372 149220, 150907 149175, 150656 149553, 150614 149805, 150902 150066, 151046 150526, 150329 151460, 150202 151491, 149753 151374, 149417 151668, 149174 152094, 148972 151942, 148562 152188, 148517 152674, 148526 152895, 148418 152955, 148350 153100, 148103 153019, 147353 153203, 147243 153213, 147088 153415, 147014 153879, 146967 153867, 146071 154506, 145993 154466, 145495 154367, 145205 154083, 145100 154068, 144872 153638, 144729 153643, 144741 154034, 144882 154200, 144749 154383, 144397 154504, 144154 154600, 143646 154758, 143366 154743, 143275 155263, 143228 155261, 143174 155353, 142516 155406, 142285 156030, 142168 156078, 142060 156390, 142113 156052, 141577 156346, 141933 156689, 141829 157065, 141794 157330, 141700 157397, 141716 157431, 140903 157507, 140293 157893, 140034 158441, 140068 157709, 140640 157507, 140116 157450, 139847 157552, 139436 158276, 139837 158458, 139336 158461, 138686 158872, 137909 158995, 137861 158740, 137635 158791, 137532 158912, 137450 159332, 137196 159858, 135972 160278, 135835 160233, 135518 160665, 135594 160729, 135517 160742, 135391 160690, 135007 160607, 134864 160622, 134745 160899, 134671 161326, 134448 161485, 134359 161330, 134092 161332, 133701 161441, 133695 161585, 133506 161665, 133254 161563, 132782 161658, 132173 162159, 132000 162484, 131789 162307, 131500 162273, 131201 162404, 130891 162617, 130781 162604, 130708 162672, 130305 162626, 130092 162964, 129726 162769, 129546 162178, 129065 162143, 129020 162183, 128325 162112, 128244 162139, 128097 162067, 128237 162029, 128235 161603, 128399 161569, 128252 161425, 127574 161299, 127228 161617, 127387 161818, 127212 161733, 127046 162124, 126770 162433, 126418 162319, 126131 162762, 125819 162784, 125715 163046, 125310 163312, 125114 163304, 125127 163483, 124763 163835, 124536 163765, 124474 163510, 124167 163601, 124074 163593, 123247 163771, 122981 163958, 122697 164085, 122335 164007, 121863 164241, 121858 164227, 121137 164199, 121067 164467, 120021 164611, 119693 163971, 119739 163581, 119366 163183, 119105 163154, 119020 163401, 119114 163896, 118883 163770, 118631 163914, 118470 163732, 118453 163882, 118177 163847, 118321 164160, 117915 164427, 118067 164735, 117856 164553, 117582 164442, 117481 164518, 117068 164577, 116939 164916, 116709 165055, 116192 165087, 116027 164799, 116062 164641, 116039 164238, 115539 163917, 115085 163960, 115015 163931, 114539 163932, 114354 164048, 114197 164264, 114091 164522, 114280 165180, 113539 164858, 113371 164716, 113113 164784, 112690 164606, 111994 165075, 111490 165262, 111219 165331, 110298 164515, 110557 165316, 110477 165308, 110032 164930, 109991 164995, 109892 164947, 109392 164932, 109305 165141, 109136 165242, 109037 165177, 108134 165011, 107889 165174, 107890 165207, 107535 165027, 107281 164788, 107097 164792, 106984 164860, 106574 164973, 106296 164837, 105829 164535, 105493 164437, 105167 164174, 104876 164084, 104653 164317, 103974 164179, 103578 163873, 103532 164101, 102784 163889, 102609 163627, 102484 163388, 101939 163456, 101877 163716, 101795 163419, 101351 163304, 101293 163693, 101638 163863, 101453 164071, 101246 163822, 100885 163533, 101153 162796, 101934 163113, 102341 163186, 102017 162680, 101132 162568, 100907 162322, 101047 162652, 100880 163530, 100496 163549, 100135 163399, 99760 163287, 99423 163126, 99214 162951, 98920 163149, 98490 163059, 98142 162563, 97901 162928, 97559 162428, 97072 162026, 96310 161931, 96778 162238, 96736 162288, 96671 162241, 96623 162260, 96193 161924, 95762 161666, 95631 161693, 95338 161385, 94738 161327, 94356 161354, 94035 161322, 94213 161133, 93952 160952, 93626 161035, 93167 160833, 92458 160573, 92483 160542, 91980 160109, 91620 160219, 91635 160057, 91176 159840, 91294 159570, 91504 159403, 91193 159130, 90531 159379, 89536 159374, 89282 159293, 89299 159127, 89111 158789, 89120 158769, 88695 158394, 88407 158566, 88150 158607, 87522 158118, 87379 158052, 86752 157585, 86554 157572, 86219 157667, 85893 157358, 85559 157215, 85735 156690, 85727 156510, 85591 156449, 85593 156521, 85081 156933, 85053 156526, 85152 156226, 84432 156133, 84073 156466, 84088 156721, 83864 156586, 83664 156539, 83838 156454, 84155 156068, 83957 155828, 83676 155305, 83334 155100, 82732 154931, 82745 154765, 82658 154885, 82135 154847, 81814 154578, 81757 154250, 81376 154469, 80767 154183, 80818 153959, 80751 153846, 80146 153555, 79859 153068, 79693 152867, 79265 152780, 78962 152586, 78662 152546, 78113 152225, 78048 152007, 77743 151619, 77425 151154, 77646 150887, 77376 150978, 76961 150958, 76693 150973, 76627 150905, 76689 150795, 76621 150181, 76183 149989, 76111 149562, 75871 149735, 75370 150201, 75322 149778, 75193 149701, 74914 149472, 74486 148900, 74513 148800, 74464 148427, 74190 148322, 74076 148230, 73738 148245, 73618 148397, 73659 148164, 73500 147713, 73666 146997, 73648 146658, 73301 146188, 73129 146033, 72780 145897, 72312 146251, 72276 145911, 72056 145754, 71945 145570, 71284 145039, 70815 144606, 70801 144331, 70597 144262, 70424 144117, 70432 143568, 70647 143304, 70680 142891, 70297 142497, 69982 143003, 69855 143086, 69805 143064, 69791 142923, 70270 142480, 69746 142313, 69407 142467, 69113 141754, 68871 141327, 68720 141118, 68511 140871, 68561 140310, 68669 140001, 68576 139702, 68364 139591, 68332 139947, 67868 139424, 67407 139393, 67186 139323, 66959 138724, 66983 138469, 66424 138353, 66486 137934, 66538 137653, 66020 137484, 65843 136947, 65627 136590, 65374 136286, 65343 135432, 65250 135015, 65159 134751, 64778 134435, 64885 134175, 64196 133775, 64179 133680, 64333 133269, 64195 132998, 63970 132896, 63712 132872, 63225 132438, 63375 131948, 63074 131185, 63119 131037, 63074 130981, 62915 130326, 62777 130148, 62721 129550, 62657 129309, 62584 129210, 62057 128796, 62203 128478, 61955 128412, 61929 128235, 62047 127661, 61699 127364, 61684 127190, 61755 127070, 61773 126640, 62035 126030, 62009 125911, 61436 125556, 61432 125520, 61857 125167, 61540 125052, 61054 124897, 61013 124414, 61229 123732, 61206 123700, 60717 123715, 60734 123292, 60628 123041, 60716 122373, 60480 121823, 60265 121578, 60217 120990, 60468 120094, 60238 119458, 60004 119090, 59981 118793, 59828 118448, 59823 117850, 59701 117599, 59670 117391, 59759 116940, 59654 116786, 59793 116138, 59588 115572, 59575 115355, 59731 114955, 59857 114376, 59599 113591, 59856 112715, 59776 112139, 59887 111652, 60011 111355, 59808 111014, 59734 110646, 59686 110483, 59827 109878, 59940 109779, 59994 109528, 59940 109297, 59649 109152, 59583 108877, 59915 108894, 60079 108737, 60252 108998, 60478 109100, 60548 108936, 60481 108729, 60268 108467, 60596 108248, 60714 108136, 60701 108075, 60857 108020, 61222 107710, 61301 107710, 61218 107408, 60219 106833, 60044 107052, 59763 107001, 60192 106806, 60291 106190, 60565 105774, 60593 105609, 60659 105643, 60655 105497, 60723 105129, 60848 104635, 60874 104340, 61021 104090, 61048 102967, 61091 102932, 61011 102630, 61123 102383, 61004 102171, 60910 101701, 60885 101387, 61199 100818, 61145 100707, 61376 100410, 61494 100173, 61688 100090, 61820 99750, 61972 99564, 61858 99159, 61816 98760, 61950 98612, 62065 98263, 62079 97386, 62111 97085, 62311 96552, 62332 96320, 62505 96335, 62659 95923, 62637 95813, 63041 95281, 63354 95070, 63339 94378, 63390 94042, 63886 93811, 64211 93100, 64312 93017, 64288 92830, 64368 92463, 64531 92378, 64728 91633, 64661 91444, 64750 90969, 64664 90595, 64752 90411, 64803 90087, 64957 90200, 64961 90453, 65257 90882, 65490 90727, 65715 90836, 66168 90639, 66220 90569, 66181 90244, 65966 89980, 65606 89857, 65511 90282, 65388 90350, 65269 89946, 65367 89777, 65311 89403, 65365 89082, 65784 88998, 65968 88879, 65801 88198, 66423 87757, 66470 87783, 66483 87703, 66672 87366, 67092 87078, 67525 86514, 67736 86138, 68038 85312, 68331 85212, 68766 84683, 68658 84425, 69008 84286, 69551 83796, 69773 82646, 69905 82334, 70278 81957, 70394 81760, 70475 81723, 70809 81300, 71241 81463, 71389 81277, 71375 80953, 70861 81223, 71346 80613, 71462 80697, 71682 80604, 71981 80583, 72016 80532, 72447 80372, 72659 80263, 72576 80080, 72447 79614, 72736 79324, 73032 78853, 73318 78735, 73314 78631, 73465 78597, 73725 78275, 73833 78183, 73800 77861, 73687 77683, 73900 77542, 74015 77407, 74281 77286, 74665 77314, 75150 77680, 75233 76974, 75746 76759, 75853 76678, 76135 76806, 76072 76387, 76293 75934, 76542 75750, 76961 75829, 77021 75669, 77140 75787, 77293 75861, 78094 75293, 78260 75090, 78560 74838, 78138 74243, 78580 74003, 79071 73679, 79173 73665, 79896 73332, 80217 73357, 80228 73057, 80593 73050, 80682 72879, 80725 72331, 81188 71782, 81414 71643, 82167 71556, 82415 71469, 82405 71348, 82702 70919, 82725 70678, 83050 70397, 83858 69751, 84248 69190, 84308 69050, 84388 69066, 84411 68405, 84266 68336, 84248 68033, 84547 68005, 84744 67907, 85257 68266, 85370 68279, 86119 68437, 86165 67866, 86320 67645, 86362 67230, 86722 67072, 87027 66667, 87459 66643, 88121 66513, 88125 66307, 88576 66447, 89015 66728, 89248 66285, 89680 65979, 89710 65827, 90025 65647, 90292 65288, 91699 65040, 91843 65174, 91803 65479, 92197 65569, 92568 65917, 92697 65862, 92474 65523, 92616 65436, 92809 65182, 93354 65118, 93778 65542, 93951 65570, 94671 65348, 94694 65251, 94819 65197, 95130 64605, 95165 64605, 95181 64525, 94977 64273, 95382 64182, 95570 64205, 96162 63962, 96461 63772, 96690 63543, 96787 63371, 97676 63653, 97902 63476, 98374 63151, 98461 62855, 98556 62844, 98610 62901, 98658 63205, 99056 63088, 99395 63359, 99804 63559, 100333 63509, 100415 63772, 100805 63361, 101010 62939, 101252 62919, 101611 62855, 102073 62624, 102333 62846, 102565 62800, 103215 62762, 103198 62253, 102993 61820, 102934 61788, 102919 61678, 103019 61612, 103775 61530, 103877 61422, 103926 61511, 104386 61511, 104682 61620, 104751 62166, 105231 62050, 105494 61705, 105716 61970, 105985 62345, 106404 62038, 106632 62045, 107082 62232, 107223 61822, 107320 61394) (107405 163123, 107658 163399, 107872 163671, 108234 163678, 108544 163668, 108569 163577, 108562 163262, 108410 163315, 108084 163236, 107876 163248, 107574 163068, 107392 163009) (104025 163306, 104223 163629, 104453 163662, 104530 163378, 104357 163119) (118332 64249, 117941 64298, 117861 64327, 116702 64337, 116338 64265, 115949 64310, 115152 64290, 114927 64232, 113840 64171, 113565 64190, 113494 64076, 113018 64133, 112030 64137, 111788 64178, 110986 64242, 109716 64235, 109400 64280, 109212 64269, 107898 64604, 106933 64043, 106712 64278, 106557 64475, 106399 64460, 105159 64515, 104534 64856, 103577 64886, 103375 64972, 103091 64974, 102518 65034, 101601 65102, 100399 65081, 100307 65042, 99991 65061, 99430 65219, 99351 65274, 98751 65234, 98501 65229, 97418 65711, 96438 66211, 95855 66285, 95702 66424, 95166 66789, 95003 66784, 93994 67300, 93565 67491, 93450 67561, 93275 67551, 92746 67656, 92677 67642, 92602 67697, 92389 68016, 92034 68146, 91538 68520, 91054 68778, 90543 68507, 90189 68638, 89572 68818, 89431 68894, 89600 69240, 89152 69427, 88704 69395, 88043 69758, 87655 69861, 87129 69892, 86755 69902, 86660 69960, 85555 70291, 85627 70909, 84995 71379, 84372 71916, 84189 72110, 83892 72549, 83540 72778, 83195 72953, 83119 73024, 81636 74220, 81427 74422, 80402 74743, 80336 74845, 80131 75541, 79908 75972, 79451 76296, 79219 76480, 78370 77063, 77598 77965, 77425 78059, 77134 78291, 76996 78386, 76762 78693, 76494 78814, 76366 79273, 75559 80110, 75523 80171, 75071 80725, 74926 80792, 74274 81543, 74046 81739, 73512 82236, 73432 82394, 73287 82441, 73195 83047, 72690 83547, 72675 83599, 72014 84512, 71734 85155, 71464 85491, 71166 85735, 70684 86870, 70468 87225, 69999 87689, 69674 88209, 69360 88868, 69222 89131, 68714 89882, 68209 90916, 67841 91761, 67500 92602, 67136 93381, 66926 93690, 66526 94671, 66412 95158, 66303 95397, 65974 96510, 65766 97083, 65441 97653, 65284 98604, 65214 98882, 65143 99712, 64590 100407, 64500 100809, 64418 101321, 64408 101545, 64072 102139, 63842 102588, 63716 103865, 63684 104077, 63644 104860, 63652 105000, 63568 105413, 63591 105916, 63628 106423, 63570 106622, 63393 107695, 63431 107873, 63516 108445, 63492 108902, 63314 109220, 63445 109770, 63410 110098, 63355 111041, 63337 111208, 63322 111967, 63234 112230, 63222 112796, 63356 113665, 63268 114234, 63233 115222, 63268 115478, 63252 116059, 63179 117013, 63251 117207, 63404 118524, 63430 118819, 63622 119082, 63693 120009, 63900 120454, 63854 120862, 64062 121653, 64175 121995, 64201 122326, 64402 123143, 64545 123670, 64562 123809, 65015 125370, 65101 125609, 65173 126317, 65233 126683, 65422 127154, 65697 127749, 65835 127942, 66039 128414, 65981 128841, 66105 129353, 66362 130142, 66715 130892, 66819 131198, 66966 131728, 67741 133316, 67863 133501, 68490 134853, 68571 135075, 68746 135211, 69075 135718, 69459 136475, 69570 136810, 69745 137069, 69822 137324, 70255 138093, 70518 138490, 70762 138734, 70950 139101, 71035 139601, 72216 140772, 72578 141326, 72855 141789, 73131 142910, 73205 142988, 73201 142906, 73804 142853, 74067 142994, 73804 143344, 74120 143350, 74567 143816, 74944 144274, 75672 145048, 75809 145220, 76382 145873, 76660 146129, 77248 146760, 77838 147367, 77561 147882, 77986 148080, 78110 148405, 78588 148758, 78812 149017, 79004 149291, 79293 149580, 80175 150357, 80996 150861, 81132 150999, 81469 151225, 82383 152190, 82961 152145, 83411 152379, 83602 152383, 83776 152532, 84030 152705, 84332 153022, 84989 153522, 85236 153680, 85811 153977, 86088 154147, 87503 155176, 87941 155484, 88037 155644, 88509 155894, 88649 156026, 88896 156464, 89256 156693, 89976 156860, 90298 156903, 90826 157231, 91428 157487, 92466 157794, 93189 157931, 94452 158517, 94652 158574, 95101 158783, 95323 158911, 96117 159087, 96193 159084, 96735 159292, 97287 159520, 97997 159705, 99238 160198, 99530 160345, 100146 160544, 100454 160282, 100923 160136, 101193 160173, 102820 160613, 103521 161372, 103640 161587, 104564 161534, 105113 161583, 106008 161762, 106274 161772, 106554 161984, 107012 162164, 107372 161803, 107580 161665, 108231 161557, 108698 161681, 109450 162234, 109527 162340, 110191 162230, 110362 162249, 110745 162246, 111519 162512, 111975 162605, 112070 162538, 112267 162685, 112569 162368, 113001 162209, 113297 162148, 113753 162246, 114120 162432, 114284 162624, 115492 162998, 115842 163021, 115936 163094, 115995 163083, 116014 162936, 116562 162232, 116741 162045, 117010 161708, 117549 161399, 117916 161394, 118641 161286, 119454 161150, 120071 161144, 120446 161289, 121097 161718, 122237 161336, 122955 161373, 123198 161502, 123406 161454, 123904 161418, 124372 161282, 124564 161268, 125138 160939, 125848 160412, 127286 160207, 127539 160206, 127987 160160, 128492 160038, 129097 160282, 129479 160041, 129849 159927, 130055 159748, 130325 159620, 130993 159527, 131266 159365, 132113 159153, 132375 159132, 132663 158903, 132893 158953, 133028 158471, 133350 158246, 134054 157389, 134145 157158, 134631 156874, 135563 156265, 135868 156297, 136264 156301, 136527 156485, 136855 156983, 137067 156746, 137396 156838, 137538 156827, 137765 156737, 138488 156186, 138769 156047, 139205 155497, 139329 155768, 139746 155523, 139996 155443, 140685 154981, 140785 154271, 141249 153702, 141374 153163, 141450 153050, 141575 153016, 142406 152562, 142670 152365, 143077 152360, 143404 152460, 144087 152220, 144265 152108, 144932 151865, 145318 151417, 145450 151382, 145672 151218, 146028 151007, 146462 150661, 146538 150476, 146782 150375, 147350 149983, 147657 149637, 148380 148989, 149170 148735, 149406 148492, 149427 148299, 149553 147781, 149546 147627, 149170 147541, 149179 147259, 149621 147344, 149776 147059, 150031 146436, 150062 146160, 150227 145713, 150261 145330, 150362 145027, 150515 144747, 151115 144003, 151850 142957, 152578 141858, 152779 141599, 153416 140855, 153547 140649, 153820 140336, 153833 139718, 153854 139343, 153971 139212, 154216 139230, 154439 139371, 154816 139041, 155069 138562, 155892 137302, 156253 136712, 156316 136456, 156763 135491, 157157 134559, 157716 134034, 158304 133462, 158783 132859, 158935 132748, 159680 132397, 159798 132167, 160053 131875, 160621 131758, 160572 130952, 160533 130837, 160892 130141, 160799 129900, 160781 129657, 160903 129457, 160982 128990, 160987 128625, 161176 128257, 161166 128110, 161557 127571, 161669 127305, 161738 127185, 161887 126263, 161440 125660, 161501 125490, 161901 125130, 161852 124508, 161726 124351, 161996 123695, 161765 122827, 161848 122322, 162041 121681, 162146 120906, 162238 120500, 162328 119792, 162466 119524, 162556 118576, 162558 118218, 162658 118233, 162887 117852, 162861 117560, 162940 117257, 162949 116670, 162815 116087, 162691 115786, 162653 115598, 162949 115117, 162837 114936, 162467 114521, 162421 114072, 162851 113620, 162914 113675, 162895 113588, 163052 113137, 163096 112475, 162816 112337, 162767 111631, 162838 111282, 162788 111154, 162883 110292, 162829 110177, 162773 109418, 162575 108764, 162593 107705, 162642 107502, 162602 106746, 162630 106378, 162654 105255, 162643 104845, 162461 104012, 162598 103620, 162538 103199, 162269 102862, 162168 102299, 161936 102017, 161825 101733, 161994 101331, 161460 100585, 161389 100509, 160987 99974, 160702 99563, 160116 98162, 160078 97301, 160030 97091, 160163 96953, 160030 96835, 160213 96249, 159915 95619, 159709 95519, 159606 95087, 159662 94582, 159780 94567, 159737 94166, 159880 93232, 159554 92811, 159278 92701, 158941 92375, 158735 91583, 158056 90671, 158031 90487, 157694 89655, 157567 89499, 157393 89087, 157390 89026, 157289 88594, 156872 88218, 156632 88097, 156472 87979, 155579 87725, 155415 87548, 155195 86858, 155225 86781, 155151 86730, 154982 85908, 154180 84810, 154167 84709, 153923 84142, 153010 84035, 152679 83755, 152641 83063, 152862 82895, 152628 83030, 152354 82668, 152259 81794, 151577 81214, 151511 81185, 151083 80454, 150987 80241, 150883 80216, 150151 79183, 150120 79110, 149967 78910, 149525 78717, 149453 78432, 149224 78487, 148997 78170, 148806 78022, 148269 77129, 148047 76893, 147812 76854, 147700 76878, 146995 76693, 146742 76644, 146492 76505, 146216 76178, 145992 76002, 145365 75304, 145041 74457, 144978 74075, 144709 74103, 144229 74193, 143949 74147, 143396 74395, 143274 74409, 142661 74114, 142150 73737, 141928 73607, 141257 72838, 141262 72776, 140917 72224, 140786 71965, 140761 71988, 139847 71919, 139375 71573, 139008 71533, 138453 71257, 137972 70699, 137711 70457, 137577 70044, 137637 69671, 137000 68917, 136714 69035, 136514 69048, 136292 68757, 135873 68740, 135567 68510, 135344 68283, 134919 68430, 134676 68453, 134236 68218, 134057 68154, 133281 67841, 132775 67687, 131954 67617, 131716 67520, 131452 67203, 131068 67053, 130761 66919, 130344 66928, 129949 66616, 129054 66515, 128832 66803, 128529 66715, 127661 66437, 126795 66102, 126468 66087, 125917 66030, 125027 65716, 124646 65610, 123784 65289, 123550 65306, 122980 65095, 122571 65075, 121657 64533, 121195 64627, 119556 64070, 119199 64016) (97747 161636, 98038 161957, 98138 161655, 97891 161358) (137167 158299, 137516 158370, 137528 158041, 137367 157993) (164383 121157, 164460 121458, 164643 121522, 164651 121052) (165315 113634, 165369 114218, 165799 114380, 165940 113417) (163783 104411, 164070 104509, 163958 104846, 164043 104979, 164418 104902, 164321 104595, 164220 104404, 163754 104362) (164371 103476, 164497 103574, 164952 103288, 164357 103226) (164030 102190, 164349 102398, 164361 101710) (62343 97288, 62705 97711, 62815 97991, 63011 97994, 62946 97661, 63191 97365, 62735 96934) (63712 97384, 63444 97446, 63704 97768, 63836 97639, 63840 97309) (161996 97262, 161982 97442, 162590 97623, 162361 97115) (62940 96740, 63290 97296, 63423 96919, 63229 96594) (161250 96057, 161332 96219, 161509 96299, 161675 96146, 161399 95965) (161528 92489, 161412 92579, 161881 92672, 161810 92403, 161531 92208) (67036 87741, 67287 87743, 67496 87568, 67116 87236) (157512 86791, 157894 87140, 157806 86746, 157543 86569) (68660 85381, 68873 85485, 68972 85478, 69044 85346, 68962 84984) (157148 84782, 157317 85047, 157841 85054, 157744 84588, 157505 84507) (154475 81612, 154617 81963, 154688 82040, 155046 82077, 155312 81938, 154902 81489, 154793 81079) (148148 74973, 148185 75238, 148290 75288, 148587 75136, 148667 74723, 148333 74586) (84059 69892, 84210 70181, 84431 70204, 84386 70094, 84499 69920, 84353 69654) (139600 69184, 139319 69556, 139738 69340, 139806 69096, 139661 69025) (87096 68038, 87328 67948, 87495 67797, 87062 67638) (88318 67155, 89083 66978, 88634 66696) (96357 64276, 96536 64491, 96761 64482, 96798 64312, 96649 64269) (110797 62370, 110959 62617, 111135 62607, 111268 62228)), ((75815 150408, 75891 150745, 75537 150700, 75397 150390)), ((156372 140873, 156236 141029, 156017 141039, 155807 140986, 155929 140815)), ((71837 79997, 71743 80151, 71603 79971, 71504 80015, 71541 79854, 72177 79688)), ((78017 74627, 77871 74674, 77757 74502, 78127 74251)), ((146743 71850, 146863 71919, 146785 72533, 146546 72150, 146620 71955, 146542 71809)), ((125944 63739, 126212 63938, 125900 64280, 125410 64170, 125556 63785, 125754 63696))) \ No newline at end of file +MULTIPOLYGON (((107638 61798, 107744 62158, 108015 62180, 108062 62230, 108158 62595, 108629 62124, 108298 62134, 108653 62014, 109074 62244, 109253 61956, 109398 62376, 109778 62263, 110656 62109, 110664 62166, 111427 62029, 111455 62046, 111909 62070, 111589 62212, 111811 62557, 112026 62552, 112468 62660, 112801 62720, 113487 62365, 113536 62295, 113672 62301, 113685 62442, 113789 62647, 113875 62653, 114231 62320, 114654 62279, 115076 62173, 115173 62437, 115478 62555, 115710 62416, 115765 62591, 116266 62673, 116360 62845, 116641 62839, 116922 62956, 117235 62822, 117458 63223, 117459 62791, 117998 62730, 117546 62587, 117967 62033, 118261 61840, 118748 61934, 119096 62353, 119359 62691, 119801 62728, 120175 62684, 120280 62944, 120774 62898, 120901 62842, 121043 63014, 121518 63116, 121805 63356, 122041 63450, 122526 63294, 122632 63225, 123064 63424, 123244 63527, 123317 63515, 124068 63678, 124174 63956, 124422 63794, 124995 63832, 125404 64201, 126132 64693, 126089 64441, 126457 64147, 126777 64239, 127418 64478, 128049 64082, 128275 64819, 128762 64965, 128929 64780, 128811 65015, 129252 65023, 130043 64726, 130423 64443, 130492 64314, 130544 64398, 130731 64407, 131153 64554, 131278 64749, 131377 65183, 131928 65221, 132241 65138, 132370 65393, 132667 65433, 132789 65394, 133284 65774, 133424 65732, 133566 65611, 134116 65771, 134053 66534, 134180 66604, 134271 66552, 134167 65762, 134697 65797, 134853 65990, 134596 66599, 134863 66665, 135169 66580, 135312 66469, 135630 66611, 135871 66841, 136072 66764, 136384 66966, 136641 67299, 136703 67429, 136850 67448, 137216 67207, 137434 67416, 137720 67474, 137803 67771, 137931 67972, 138182 67790, 138010 67383, 138471 67543, 138462 67769, 138718 68077, 139093 67699, 139253 67684, 139313 67819, 139270 68249, 139653 68632, 139943 68770, 140305 68715, 140118 68196, 140039 68075, 140343 68073, 140824 68399, 140847 68453, 140689 68774, 141071 69419, 141379 69254, 141750 69433, 141961 69711, 142034 69702, 143056 70297, 143079 70701, 143137 70925, 143207 70998, 143671 70858, 144069 70888, 144063 70756, 144170 70669, 144256 70867, 144197 71122, 143918 71390, 143754 71388, 143741 71894, 143973 71983, 144178 71866, 144287 71644, 144585 71807, 145227 72064, 145344 72079, 145422 72196, 145734 72514, 146087 72750, 146266 73205, 146504 73286, 146903 72997, 147138 73558, 147258 73710, 147374 73949, 147816 74245, 148300 74404, 148262 73694, 148482 73644, 148546 74002, 148808 73791, 148947 73748, 149399 74308, 149320 74843, 149861 75048, 150004 75194, 150297 75228, 150697 75742, 150898 76141, 151018 76209, 151055 76307, 151091 76961, 151179 77070, 151126 77332, 151570 77909, 151580 78020, 151677 78055, 152478 78580, 152696 78890, 153246 78969, 153380 79090, 153611 79598, 153792 79860, 153905 79874, 153936 79591, 154122 79201, 154206 79214, 154328 79854, 154605 79798, 154504 80124, 154638 80595, 154936 80806, 155128 80869, 155269 81264, 155431 81461, 155986 81903, 156258 82619, 156519 82902, 156556 83165, 157009 83410, 157167 83650, 157544 83967, 157864 84528, 158004 84588, 158073 85144, 158021 85262, 158066 85649, 158272 85891, 158599 86346, 158557 86503, 158724 86951, 158727 86979, 158994 87451, 158791 87519, 158896 87858, 159613 88094, 159336 88273, 159649 88589, 159739 88888, 160231 89076, 160204 89377, 160601 89355, 160838 89733, 161221 90494, 161383 90683, 161672 91308, 161571 91396, 161971 91966, 162496 92318, 162462 92594, 162351 92817, 162180 92856, 161919 93082, 162058 93324, 162016 93586, 162077 93918, 161818 93768, 161505 94100, 161903 94483, 162130 94357, 162118 94570, 162029 94651, 161900 95118, 162044 95320, 162237 95693, 162398 96260, 162247 96429, 162428 97079, 162416 97087, 162649 97642, 162676 97681, 162746 98177, 162913 98358, 162884 98734, 162808 98875, 163144 99515, 163166 99796, 163123 100064, 163535 100638, 163830 100958, 163875 101096, 164441 101577, 164657 102608, 164595 102645, 164362 103065, 164983 103275, 165146 103843, 164874 103985, 165021 104245, 165545 104603, 165903 105016, 165782 105809, 165812 105910, 165682 106040, 165320 106161, 165251 107010, 165111 107456, 165237 108118, 165064 108353, 165277 108600, 165182 108913, 165174 109503, 165333 109641, 165308 109854, 165320 110236, 165568 110298, 165474 110446, 165754 111299, 165547 111687, 165981 111636, 165974 111657, 165481 111804, 165584 111929, 165889 112497, 165964 112767, 165945 113418, 166046 114684, 165503 115419, 165817 116075, 165383 116036, 165285 116518, 165742 116536, 165617 116819, 165673 117116, 165822 117431, 165683 117658, 165526 117986, 165568 118331, 165417 118612, 165467 118745, 165151 118758, 164957 118933, 164905 119163, 165368 119289, 165490 119256, 165516 119450, 165484 119467, 165217 120121, 165067 120571, 165157 121003, 165172 121288, 165011 121820, 164765 121800, 164445 121913, 164355 122565, 164523 122609, 164201 122923, 164910 123207, 164748 123566, 165050 124082, 164563 125083, 164392 125386, 164152 125996, 163871 126297, 163547 126535, 163469 126722, 163349 126839, 163017 127240, 162763 127834, 162564 127878, 162590 127731, 162175 127658, 162065 127927, 162342 128096, 162190 128472, 162603 128759, 162611 128912, 162760 129315, 162472 129764, 162485 130421, 162416 130697, 162248 130937, 162311 131118, 162261 132151, 162371 132801, 162325 132903, 162382 133095, 162566 133491, 162586 133703, 162446 133854, 162530 133985, 162238 134286, 161767 134062, 161670 134133, 161712 134452, 160591 134891, 160035 135235, 159899 135389, 159790 135615, 159612 135650, 159146 136137, 158963 136445, 158739 136611, 158161 136703, 157900 137055, 157994 137249, 157778 137593, 158521 137562, 158398 137737, 158264 137783, 157781 138194, 157602 138122, 157415 138501, 157068 138911, 156974 139057, 156760 139345, 156410 139507, 156292 139768, 155917 139738, 155750 139652, 155490 139865, 155149 140040, 155280 140188, 155685 140146, 155753 140218, 155589 140305, 155221 140427, 155160 140620, 155287 141386, 155238 141436, 155052 142258, 154966 142371, 154495 143275, 154456 143369, 154201 143734, 154049 144255, 153871 144409, 153698 144744, 153645 145119, 153283 144989, 152823 145452, 152842 145920, 152754 146154, 152301 146979, 152110 147120, 152044 147501, 151917 147924, 151659 148182, 151360 148687, 151430 149144, 151420 149256, 151372 149220, 150907 149175, 150656 149553, 150614 149805, 150902 150066, 151046 150526, 150329 151460, 150202 151491, 149753 151374, 149417 151668, 149174 152094, 148972 151942, 148562 152188, 148517 152674, 148526 152895, 148418 152955, 148350 153100, 148103 153019, 147353 153203, 147243 153213, 147088 153415, 147014 153879, 146967 153867, 146071 154506, 145993 154466, 145495 154367, 145205 154083, 145100 154068, 144872 153638, 144729 153643, 144741 154034, 144882 154200, 144749 154383, 144397 154504, 144154 154600, 143646 154758, 143366 154743, 143275 155263, 143228 155261, 143174 155353, 142516 155406, 142285 156030, 142168 156078, 142060 156390, 142113 156052, 141577 156346, 141933 156689, 141829 157065, 141794 157330, 141700 157397, 141716 157431, 140903 157507, 140293 157893, 140034 158441, 140068 157709, 140640 157507, 140116 157450, 139847 157552, 139436 158276, 139837 158458, 139336 158461, 138686 158872, 137909 158995, 137861 158740, 137635 158791, 137532 158912, 137450 159332, 137196 159858, 135972 160278, 135835 160233, 135518 160665, 135594 160729, 135517 160742, 135391 160690, 135007 160607, 134864 160622, 134745 160899, 134671 161326, 134448 161485, 134359 161330, 134092 161332, 133701 161441, 133695 161585, 133506 161665, 133254 161563, 132782 161658, 132173 162159, 132000 162484, 131789 162307, 131500 162273, 131201 162404, 130891 162617, 130781 162604, 130708 162672, 130305 162626, 130092 162964, 129726 162769, 129546 162178, 129065 162143, 129020 162183, 128325 162112, 128244 162139, 128097 162067, 128237 162029, 128235 161603, 128399 161569, 128252 161425, 127574 161299, 127228 161617, 127387 161818, 127212 161733, 127046 162124, 126770 162433, 126418 162319, 126131 162762, 125819 162784, 125715 163046, 125310 163312, 125114 163304, 125127 163483, 124763 163835, 124536 163765, 124474 163510, 124167 163601, 124074 163593, 123247 163771, 122981 163958, 122697 164085, 122335 164007, 121863 164241, 121858 164227, 121137 164199, 121067 164467, 120021 164611, 119693 163971, 119739 163581, 119366 163183, 119105 163154, 119020 163401, 119114 163896, 118883 163770, 118631 163914, 118470 163732, 118453 163882, 118177 163847, 118321 164160, 117915 164427, 118067 164735, 117856 164553, 117582 164442, 117481 164518, 117068 164577, 116939 164916, 116709 165055, 116192 165087, 116027 164799, 116062 164641, 116039 164238, 115539 163917, 115085 163960, 115015 163931, 114539 163932, 114354 164048, 114197 164264, 114091 164522, 114280 165180, 113539 164858, 113371 164716, 113113 164784, 112690 164606, 111994 165075, 111490 165262, 111219 165331, 110298 164515, 110557 165316, 110477 165308, 110032 164930, 109991 164995, 109892 164947, 109392 164932, 109305 165141, 109136 165242, 109037 165177, 108134 165011, 107889 165174, 107890 165207, 107535 165027, 107281 164788, 107097 164792, 106984 164860, 106574 164973, 106296 164837, 105829 164535, 105493 164437, 105167 164174, 104876 164084, 104653 164317, 103974 164179, 103578 163873, 103532 164101, 102784 163889, 102609 163627, 102484 163388, 101939 163456, 101877 163716, 101795 163419, 101351 163304, 101293 163693, 101638 163863, 101453 164071, 101246 163822, 100885 163533, 101153 162796, 101934 163113, 102341 163186, 102017 162680, 101132 162568, 100907 162322, 101047 162652, 100880 163530, 100496 163549, 100135 163399, 99760 163287, 99423 163126, 99214 162951, 98920 163149, 98490 163059, 98142 162563, 97901 162928, 97559 162428, 97072 162026, 96310 161931, 96778 162238, 96736 162288, 96671 162241, 96623 162260, 96193 161924, 95762 161666, 95631 161693, 95338 161385, 94738 161327, 94356 161354, 94035 161322, 94213 161133, 93952 160952, 93626 161035, 93167 160833, 92458 160573, 92483 160542, 91980 160109, 91620 160219, 91635 160057, 91176 159840, 91294 159570, 91504 159403, 91193 159130, 90531 159379, 89536 159374, 89282 159293, 89299 159127, 89111 158789, 89120 158769, 88695 158394, 88407 158566, 88150 158607, 87522 158118, 87379 158052, 86752 157585, 86554 157572, 86219 157667, 85893 157358, 85559 157215, 85735 156690, 85727 156510, 85591 156449, 85593 156521, 85081 156933, 85053 156526, 85152 156226, 84432 156133, 84073 156466, 84088 156721, 83864 156586, 83664 156539, 83838 156454, 84155 156068, 83957 155828, 83676 155305, 83334 155100, 82732 154931, 82745 154765, 82658 154885, 82135 154847, 81814 154578, 81757 154250, 81376 154469, 80767 154183, 80818 153959, 80751 153846, 80146 153555, 79859 153068, 79693 152867, 79265 152780, 78962 152586, 78662 152546, 78113 152225, 78048 152007, 77743 151619, 77425 151154, 77646 150887, 77376 150978, 76961 150958, 76693 150973, 76627 150905, 76689 150795, 76621 150181, 76183 149989, 76111 149562, 75871 149735, 75370 150201, 75322 149778, 75193 149701, 74914 149472, 74486 148900, 74513 148800, 74464 148427, 74190 148322, 74076 148230, 73738 148245, 73618 148397, 73659 148164, 73500 147713, 73666 146997, 73648 146658, 73301 146188, 73129 146033, 72780 145897, 72312 146251, 72276 145911, 72056 145754, 71945 145570, 71284 145039, 70815 144606, 70801 144331, 70597 144262, 70424 144117, 70432 143568, 70647 143304, 70680 142891, 70297 142497, 69982 143003, 69855 143086, 69805 143064, 69791 142923, 70270 142480, 69746 142313, 69407 142467, 69113 141754, 68871 141327, 68720 141118, 68511 140871, 68561 140310, 68669 140001, 68576 139702, 68364 139591, 68332 139947, 67868 139424, 67407 139393, 67186 139323, 66959 138724, 66983 138469, 66424 138353, 66486 137934, 66538 137653, 66020 137484, 65843 136947, 65627 136590, 65374 136286, 65343 135432, 65250 135015, 65159 134751, 64778 134435, 64885 134175, 64196 133775, 64179 133680, 64333 133269, 64195 132998, 63970 132896, 63712 132872, 63225 132438, 63375 131948, 63074 131185, 63119 131037, 63074 130981, 62915 130326, 62777 130148, 62721 129550, 62657 129309, 62584 129210, 62057 128796, 62203 128478, 61955 128412, 61929 128235, 62047 127661, 61699 127364, 61684 127190, 61755 127070, 61773 126640, 62035 126030, 62009 125911, 61436 125556, 61432 125520, 61857 125167, 61540 125052, 61054 124897, 61013 124414, 61229 123732, 61206 123700, 60717 123715, 60734 123292, 60628 123041, 60716 122373, 60480 121823, 60265 121578, 60217 120990, 60468 120094, 60238 119458, 60004 119090, 59981 118793, 59828 118448, 59823 117850, 59701 117599, 59670 117391, 59759 116940, 59654 116786, 59793 116138, 59588 115572, 59575 115355, 59731 114955, 59857 114376, 59599 113591, 59856 112715, 59776 112139, 59887 111652, 60011 111355, 59808 111014, 59734 110646, 59686 110483, 59827 109878, 59940 109779, 59994 109528, 59940 109297, 59649 109152, 59583 108877, 59915 108894, 60079 108737, 60252 108998, 60478 109100, 60548 108936, 60481 108729, 60268 108467, 60596 108248, 60714 108136, 60701 108075, 60857 108020, 61222 107710, 61301 107710, 61218 107408, 60219 106833, 60044 107052, 59763 107001, 60192 106806, 60291 106190, 60565 105774, 60593 105609, 60659 105643, 60655 105497, 60723 105129, 60848 104635, 60874 104340, 61021 104090, 61048 102967, 61091 102932, 61011 102630, 61123 102383, 61004 102171, 60910 101701, 60885 101387, 61199 100818, 61145 100707, 61376 100410, 61494 100173, 61688 100090, 61820 99750, 61972 99564, 61858 99159, 61816 98760, 61950 98612, 62065 98263, 62079 97386, 62111 97085, 62311 96552, 62332 96320, 62505 96335, 62659 95923, 62637 95813, 63041 95281, 63354 95070, 63339 94378, 63390 94042, 63886 93811, 64211 93100, 64312 93017, 64288 92830, 64368 92463, 64531 92378, 64728 91633, 64661 91444, 64750 90969, 64664 90595, 64752 90411, 64803 90087, 64957 90200, 64961 90453, 65257 90882, 65490 90727, 65715 90836, 66168 90639, 66220 90569, 66181 90244, 65966 89980, 65606 89857, 65511 90282, 65388 90350, 65269 89946, 65367 89777, 65311 89403, 65365 89082, 65784 88998, 65968 88879, 65801 88198, 66423 87757, 66470 87783, 66483 87703, 66672 87366, 67092 87078, 67525 86514, 67736 86138, 68038 85312, 68331 85212, 68766 84683, 68658 84425, 69008 84286, 69551 83796, 69773 82646, 69905 82334, 70278 81957, 70394 81760, 70475 81723, 70809 81300, 71241 81463, 71389 81277, 71375 80953, 70861 81223, 71346 80613, 71462 80697, 71682 80604, 71981 80583, 72016 80532, 72447 80372, 72659 80263, 72576 80080, 72447 79614, 72736 79324, 73032 78853, 73318 78735, 73314 78631, 73465 78597, 73725 78275, 73833 78183, 73800 77861, 73687 77683, 73900 77542, 74015 77407, 74281 77286, 74665 77314, 75150 77680, 75233 76974, 75746 76759, 75853 76678, 76135 76806, 76072 76387, 76293 75934, 76542 75750, 76961 75829, 77021 75669, 77140 75787, 77293 75861, 78094 75293, 78260 75090, 78560 74838, 78138 74243, 78580 74003, 79071 73679, 79173 73665, 79896 73332, 80217 73357, 80228 73057, 80593 73050, 80682 72879, 80725 72331, 81188 71782, 81414 71643, 82167 71556, 82415 71469, 82405 71348, 82702 70919, 82725 70678, 83050 70397, 83858 69751, 84248 69190, 84308 69050, 84388 69066, 84411 68405, 84266 68336, 84248 68033, 84547 68005, 84744 67907, 85257 68266, 85370 68279, 86119 68437, 86165 67866, 86320 67645, 86362 67230, 86722 67072, 87027 66667, 87459 66643, 88121 66513, 88125 66307, 88576 66447, 89015 66728, 89248 66285, 89680 65979, 89710 65827, 90025 65647, 90292 65288, 91699 65040, 91843 65174, 91803 65479, 92197 65569, 92568 65917, 92697 65862, 92474 65523, 92616 65436, 92809 65182, 93354 65118, 93778 65542, 93951 65570, 94671 65348, 94694 65251, 94819 65197, 95130 64605, 95165 64605, 95181 64525, 94977 64273, 95382 64182, 95570 64205, 96162 63962, 96461 63772, 96690 63543, 96787 63371, 97676 63653, 97902 63476, 98374 63151, 98461 62855, 98556 62844, 98610 62901, 98658 63205, 99056 63088, 99395 63359, 99804 63559, 100333 63509, 100415 63772, 100805 63361, 101010 62939, 101252 62919, 101611 62855, 102073 62624, 102333 62846, 102565 62800, 103215 62762, 103198 62253, 102993 61820, 102934 61788, 102919 61678, 103019 61612, 103775 61530, 103877 61422, 103926 61511, 104386 61511, 104682 61620, 104751 62166, 105231 62050, 105494 61705, 105716 61970, 105985 62345, 106404 62038, 106632 62045, 107082 62232, 107223 61822, 107320 61394, 107638 61798), (107405 163123, 107658 163399, 107872 163671, 108234 163678, 108544 163668, 108569 163577, 108562 163262, 108410 163315, 108084 163236, 107876 163248, 107574 163068, 107392 163009, 107405 163123), (104025 163306, 104223 163629, 104453 163662, 104530 163378, 104357 163119, 104025 163306), (118332 64249, 117941 64298, 117861 64327, 116702 64337, 116338 64265, 115949 64310, 115152 64290, 114927 64232, 113840 64171, 113565 64190, 113494 64076, 113018 64133, 112030 64137, 111788 64178, 110986 64242, 109716 64235, 109400 64280, 109212 64269, 107898 64604, 106933 64043, 106712 64278, 106557 64475, 106399 64460, 105159 64515, 104534 64856, 103577 64886, 103375 64972, 103091 64974, 102518 65034, 101601 65102, 100399 65081, 100307 65042, 99991 65061, 99430 65219, 99351 65274, 98751 65234, 98501 65229, 97418 65711, 96438 66211, 95855 66285, 95702 66424, 95166 66789, 95003 66784, 93994 67300, 93565 67491, 93450 67561, 93275 67551, 92746 67656, 92677 67642, 92602 67697, 92389 68016, 92034 68146, 91538 68520, 91054 68778, 90543 68507, 90189 68638, 89572 68818, 89431 68894, 89600 69240, 89152 69427, 88704 69395, 88043 69758, 87655 69861, 87129 69892, 86755 69902, 86660 69960, 85555 70291, 85627 70909, 84995 71379, 84372 71916, 84189 72110, 83892 72549, 83540 72778, 83195 72953, 83119 73024, 81636 74220, 81427 74422, 80402 74743, 80336 74845, 80131 75541, 79908 75972, 79451 76296, 79219 76480, 78370 77063, 77598 77965, 77425 78059, 77134 78291, 76996 78386, 76762 78693, 76494 78814, 76366 79273, 75559 80110, 75523 80171, 75071 80725, 74926 80792, 74274 81543, 74046 81739, 73512 82236, 73432 82394, 73287 82441, 73195 83047, 72690 83547, 72675 83599, 72014 84512, 71734 85155, 71464 85491, 71166 85735, 70684 86870, 70468 87225, 69999 87689, 69674 88209, 69360 88868, 69222 89131, 68714 89882, 68209 90916, 67841 91761, 67500 92602, 67136 93381, 66926 93690, 66526 94671, 66412 95158, 66303 95397, 65974 96510, 65766 97083, 65441 97653, 65284 98604, 65214 98882, 65143 99712, 64590 100407, 64500 100809, 64418 101321, 64408 101545, 64072 102139, 63842 102588, 63716 103865, 63684 104077, 63644 104860, 63652 105000, 63568 105413, 63591 105916, 63628 106423, 63570 106622, 63393 107695, 63431 107873, 63516 108445, 63492 108902, 63314 109220, 63445 109770, 63410 110098, 63355 111041, 63337 111208, 63322 111967, 63234 112230, 63222 112796, 63356 113665, 63268 114234, 63233 115222, 63268 115478, 63252 116059, 63179 117013, 63251 117207, 63404 118524, 63430 118819, 63622 119082, 63693 120009, 63900 120454, 63854 120862, 64062 121653, 64175 121995, 64201 122326, 64402 123143, 64545 123670, 64562 123809, 65015 125370, 65101 125609, 65173 126317, 65233 126683, 65422 127154, 65697 127749, 65835 127942, 66039 128414, 65981 128841, 66105 129353, 66362 130142, 66715 130892, 66819 131198, 66966 131728, 67741 133316, 67863 133501, 68490 134853, 68571 135075, 68746 135211, 69075 135718, 69459 136475, 69570 136810, 69745 137069, 69822 137324, 70255 138093, 70518 138490, 70762 138734, 70950 139101, 71035 139601, 72216 140772, 72578 141326, 72855 141789, 73131 142910, 73205 142988, 73201 142906, 73804 142853, 74067 142994, 73804 143344, 74120 143350, 74567 143816, 74944 144274, 75672 145048, 75809 145220, 76382 145873, 76660 146129, 77248 146760, 77838 147367, 77561 147882, 77986 148080, 78110 148405, 78588 148758, 78812 149017, 79004 149291, 79293 149580, 80175 150357, 80996 150861, 81132 150999, 81469 151225, 82383 152190, 82961 152145, 83411 152379, 83602 152383, 83776 152532, 84030 152705, 84332 153022, 84989 153522, 85236 153680, 85811 153977, 86088 154147, 87503 155176, 87941 155484, 88037 155644, 88509 155894, 88649 156026, 88896 156464, 89256 156693, 89976 156860, 90298 156903, 90826 157231, 91428 157487, 92466 157794, 93189 157931, 94452 158517, 94652 158574, 95101 158783, 95323 158911, 96117 159087, 96193 159084, 96735 159292, 97287 159520, 97997 159705, 99238 160198, 99530 160345, 100146 160544, 100454 160282, 100923 160136, 101193 160173, 102820 160613, 103521 161372, 103640 161587, 104564 161534, 105113 161583, 106008 161762, 106274 161772, 106554 161984, 107012 162164, 107372 161803, 107580 161665, 108231 161557, 108698 161681, 109450 162234, 109527 162340, 110191 162230, 110362 162249, 110745 162246, 111519 162512, 111975 162605, 112070 162538, 112267 162685, 112569 162368, 113001 162209, 113297 162148, 113753 162246, 114120 162432, 114284 162624, 115492 162998, 115842 163021, 115936 163094, 115995 163083, 116014 162936, 116562 162232, 116741 162045, 117010 161708, 117549 161399, 117916 161394, 118641 161286, 119454 161150, 120071 161144, 120446 161289, 121097 161718, 122237 161336, 122955 161373, 123198 161502, 123406 161454, 123904 161418, 124372 161282, 124564 161268, 125138 160939, 125848 160412, 127286 160207, 127539 160206, 127987 160160, 128492 160038, 129097 160282, 129479 160041, 129849 159927, 130055 159748, 130325 159620, 130993 159527, 131266 159365, 132113 159153, 132375 159132, 132663 158903, 132893 158953, 133028 158471, 133350 158246, 134054 157389, 134145 157158, 134631 156874, 135563 156265, 135868 156297, 136264 156301, 136527 156485, 136855 156983, 137067 156746, 137396 156838, 137538 156827, 137765 156737, 138488 156186, 138769 156047, 139205 155497, 139329 155768, 139746 155523, 139996 155443, 140685 154981, 140785 154271, 141249 153702, 141374 153163, 141450 153050, 141575 153016, 142406 152562, 142670 152365, 143077 152360, 143404 152460, 144087 152220, 144265 152108, 144932 151865, 145318 151417, 145450 151382, 145672 151218, 146028 151007, 146462 150661, 146538 150476, 146782 150375, 147350 149983, 147657 149637, 148380 148989, 149170 148735, 149406 148492, 149427 148299, 149553 147781, 149546 147627, 149170 147541, 149179 147259, 149621 147344, 149776 147059, 150031 146436, 150062 146160, 150227 145713, 150261 145330, 150362 145027, 150515 144747, 151115 144003, 151850 142957, 152578 141858, 152779 141599, 153416 140855, 153547 140649, 153820 140336, 153833 139718, 153854 139343, 153971 139212, 154216 139230, 154439 139371, 154816 139041, 155069 138562, 155892 137302, 156253 136712, 156316 136456, 156763 135491, 157157 134559, 157716 134034, 158304 133462, 158783 132859, 158935 132748, 159680 132397, 159798 132167, 160053 131875, 160621 131758, 160572 130952, 160533 130837, 160892 130141, 160799 129900, 160781 129657, 160903 129457, 160982 128990, 160987 128625, 161176 128257, 161166 128110, 161557 127571, 161669 127305, 161738 127185, 161887 126263, 161440 125660, 161501 125490, 161901 125130, 161852 124508, 161726 124351, 161996 123695, 161765 122827, 161848 122322, 162041 121681, 162146 120906, 162238 120500, 162328 119792, 162466 119524, 162556 118576, 162558 118218, 162658 118233, 162887 117852, 162861 117560, 162940 117257, 162949 116670, 162815 116087, 162691 115786, 162653 115598, 162949 115117, 162837 114936, 162467 114521, 162421 114072, 162851 113620, 162914 113675, 162895 113588, 163052 113137, 163096 112475, 162816 112337, 162767 111631, 162838 111282, 162788 111154, 162883 110292, 162829 110177, 162773 109418, 162575 108764, 162593 107705, 162642 107502, 162602 106746, 162630 106378, 162654 105255, 162643 104845, 162461 104012, 162598 103620, 162538 103199, 162269 102862, 162168 102299, 161936 102017, 161825 101733, 161994 101331, 161460 100585, 161389 100509, 160987 99974, 160702 99563, 160116 98162, 160078 97301, 160030 97091, 160163 96953, 160030 96835, 160213 96249, 159915 95619, 159709 95519, 159606 95087, 159662 94582, 159780 94567, 159737 94166, 159880 93232, 159554 92811, 159278 92701, 158941 92375, 158735 91583, 158056 90671, 158031 90487, 157694 89655, 157567 89499, 157393 89087, 157390 89026, 157289 88594, 156872 88218, 156632 88097, 156472 87979, 155579 87725, 155415 87548, 155195 86858, 155225 86781, 155151 86730, 154982 85908, 154180 84810, 154167 84709, 153923 84142, 153010 84035, 152679 83755, 152641 83063, 152862 82895, 152628 83030, 152354 82668, 152259 81794, 151577 81214, 151511 81185, 151083 80454, 150987 80241, 150883 80216, 150151 79183, 150120 79110, 149967 78910, 149525 78717, 149453 78432, 149224 78487, 148997 78170, 148806 78022, 148269 77129, 148047 76893, 147812 76854, 147700 76878, 146995 76693, 146742 76644, 146492 76505, 146216 76178, 145992 76002, 145365 75304, 145041 74457, 144978 74075, 144709 74103, 144229 74193, 143949 74147, 143396 74395, 143274 74409, 142661 74114, 142150 73737, 141928 73607, 141257 72838, 141262 72776, 140917 72224, 140786 71965, 140761 71988, 139847 71919, 139375 71573, 139008 71533, 138453 71257, 137972 70699, 137711 70457, 137577 70044, 137637 69671, 137000 68917, 136714 69035, 136514 69048, 136292 68757, 135873 68740, 135567 68510, 135344 68283, 134919 68430, 134676 68453, 134236 68218, 134057 68154, 133281 67841, 132775 67687, 131954 67617, 131716 67520, 131452 67203, 131068 67053, 130761 66919, 130344 66928, 129949 66616, 129054 66515, 128832 66803, 128529 66715, 127661 66437, 126795 66102, 126468 66087, 125917 66030, 125027 65716, 124646 65610, 123784 65289, 123550 65306, 122980 65095, 122571 65075, 121657 64533, 121195 64627, 119556 64070, 119199 64016, 118332 64249), (97747 161636, 98038 161957, 98138 161655, 97891 161358, 97747 161636), (137167 158299, 137516 158370, 137528 158041, 137367 157993, 137167 158299), (164383 121157, 164460 121458, 164643 121522, 164651 121052, 164383 121157), (165315 113634, 165369 114218, 165799 114380, 165940 113417, 165315 113634), (163783 104411, 164070 104509, 163958 104846, 164043 104979, 164418 104902, 164321 104595, 164220 104404, 163754 104362, 163783 104411), (164371 103476, 164497 103574, 164952 103288, 164357 103226, 164371 103476), (164030 102190, 164349 102398, 164361 101710, 164030 102190), (62343 97288, 62705 97711, 62815 97991, 63011 97994, 62946 97661, 63191 97365, 62735 96934, 62343 97288), (63712 97384, 63444 97446, 63704 97768, 63836 97639, 63840 97309, 63712 97384), (161996 97262, 161982 97442, 162590 97623, 162361 97115, 161996 97262), (62940 96740, 63290 97296, 63423 96919, 63229 96594, 62940 96740), (161250 96057, 161332 96219, 161509 96299, 161675 96146, 161399 95965, 161250 96057), (161528 92489, 161412 92579, 161881 92672, 161810 92403, 161531 92208, 161528 92489), (67036 87741, 67287 87743, 67496 87568, 67116 87236, 67036 87741), (157512 86791, 157894 87140, 157806 86746, 157543 86569, 157512 86791), (68660 85381, 68873 85485, 68972 85478, 69044 85346, 68962 84984, 68660 85381), (157148 84782, 157317 85047, 157841 85054, 157744 84588, 157505 84507, 157148 84782), (154475 81612, 154617 81963, 154688 82040, 155046 82077, 155312 81938, 154902 81489, 154793 81079, 154475 81612), (148148 74973, 148185 75238, 148290 75288, 148587 75136, 148667 74723, 148333 74586, 148148 74973), (84059 69892, 84210 70181, 84431 70204, 84386 70094, 84499 69920, 84353 69654, 84059 69892), (139600 69184, 139319 69556, 139738 69340, 139806 69096, 139661 69025, 139600 69184), (87096 68038, 87328 67948, 87495 67797, 87062 67638, 87096 68038), (88318 67155, 89083 66978, 88634 66696, 88318 67155), (96357 64276, 96536 64491, 96761 64482, 96798 64312, 96649 64269, 96357 64276), (110797 62370, 110959 62617, 111135 62607, 111268 62228, 110797 62370)), ((75815 150408, 75891 150745, 75537 150700, 75397 150390, 75815 150408)), ((156372 140873, 156236 141029, 156017 141039, 155807 140986, 155929 140815, 156372 140873)), ((71837 79997, 71743 80151, 71603 79971, 71504 80015, 71541 79854, 72177 79688, 71837 79997)), ((78017 74627, 77871 74674, 77757 74502, 78127 74251, 78017 74627)), ((146743 71850, 146863 71919, 146785 72533, 146546 72150, 146620 71955, 146542 71809, 146743 71850)), ((125944 63739, 126212 63938, 125900 64280, 125410 64170, 125556 63785, 125754 63696, 125944 63739))) \ No newline at end of file diff --git a/stress_benchmark/resources/038.settings b/stress_benchmark/resources/038.settings index 4fa621641d..6c110a5496 100644 --- a/stress_benchmark/resources/038.settings +++ b/stress_benchmark/resources/038.settings @@ -156,6 +156,7 @@ machine_settings=0 raft_base_extruder_nr=0 z_seam_y=300 wall_overhang_angle=90 +seam_overhang_angle=30 draft_shield_height=10 _plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 travel_retract_before_outer_wall=True @@ -533,7 +534,6 @@ skirt_brim_minimal_length=250 cooling=0 brim_replaces_support=False wall_x_extruder_nr=-1 -support_interface_skip_height=0.2 machine_nozzle_head_distance=3 support_bottom_pattern=grid raft_base_wall_count=1 diff --git a/stress_benchmark/resources/038.wkt b/stress_benchmark/resources/038.wkt index 2749e28665..a56eaae993 100644 --- a/stress_benchmark/resources/038.wkt +++ b/stress_benchmark/resources/038.wkt @@ -1 +1 @@ -MULTIPOLYGON (((141255 74687, 140348 76216, 139171 78161, 138898 78604, 139063 78598, 139133 78603, 138844 78788, 138737 78863, 138482 79276, 138535 79320, 139006 79418, 139737 79539, 142371 79929, 142124 79838, 141799 79570, 141613 79217, 141614 78873, 141393 78843, 139719 78644, 139133 78603, 139976 78064, 141025 77414, 141504 77131, 141773 76992, 142142 76883, 142446 76864, 143051 76945, 143921 77095, 145247 77346, 146648 77626, 147378 77787, 147700 77867, 147941 77940, 148197 78069, 148268 78153, 148301 78344, 148178 78783, 148073 79095, 147909 79533, 147854 79665, 147662 79679, 147298 79661, 146845 79611, 143958 79194, 143744 79165, 143769 79105, 143769 78710, 143698 78526, 143436 78212, 143073 78001, 142647 77923, 142440 77947, 142066 78128, 141777 78439, 141614 78822, 141614 78873, 143744 79165, 143606 79489, 143316 79802, 142944 79982, 142758 79984, 144732 80261, 146033 80426, 146499 80474, 146856 80496, 147247 80487, 147447 80393, 147579 80272, 147740 79937, 147854 79665, 148048 79650, 148409 79522, 148759 79307, 150434 78109, 151208 77595, 151926 77158, 152580 76802, 152913 76638, 153249 76486, 153587 76348, 153926 76227, 154262 76121, 154597 76029, 155254 75884, 155919 75780, 156536 75713, 157105 75673, 157555 75654, 158195 75644, 158584 75648, 158864 75665, 159239 75729, 159566 75837, 160017 76042, 160504 76296, 164911 78715, 165647 79108, 166026 79300, 166334 79442, 166712 79583, 167016 79611, 167461 79570, 169882 79086, 170623 78958, 170935 79053, 171175 79330, 171396 79711, 171661 80281, 172002 81101, 172405 82119, 175045 88942, 176915 93676, 178101 96603, 179701 100462, 180886 103236, 182027 105842, 183099 108221, 183763 109655, 184903 112052, 185559 113368, 185901 114015, 186177 114494, 186400 114826, 186576 115023, 186736 115127, 186892 115159, 187263 115119, 188763 114861, 189027 114831, 189250 114861, 189567 115170, 189991 115848, 190208 116233, 191107 117926, 193734 123000, 195736 126814, 198669 132311, 204627 143337, 205859 145646, 207109 148020, 208364 150452, 209617 152941, 210865 155485, 212102 158078, 213324 160716, 214530 163393, 215715 166100, 216876 168832, 218011 171577, 219122 174347, 220188 177073, 221226 179802, 222227 182504, 223188 185167, 224111 187788, 224990 190351, 225826 192845, 226619 195264, 227369 197608, 228076 199879, 228744 202079, 229374 204212, 229968 206280, 230528 208289, 231056 210242, 231556 212143, 232027 213995, 232475 215805, 232899 217576, 233692 221023, 234419 224368, 235100 227642, 235916 231800, 231831 231800, 231174 228481, 230569 225558, 229854 222255, 229078 218851, 228659 217101, 228177 215143, 227755 213481, 227264 211604, 226743 209673, 226190 207686, 225604 205637, 224982 203524, 224321 201342, 223621 199088, 222878 196759, 222092 194353, 221262 191870, 220389 189320, 219474 186714, 218519 184057, 217526 181363, 216476 178581, 215440 175910, 214351 173174, 213235 170442, 212097 167733, 210884 164922, 209767 162400, 208581 159797, 207389 157246, 206193 154752, 204998 152320, 203809 149955, 202634 147655, 196965 136752, 195740 134370, 193277 129494, 191619 126134, 189012 120757, 188522 119789, 188160 119136, 187945 118800, 187774 118611, 187575 118478, 187325 118447, 186920 118476, 185580 118622, 185076 118664, 184809 118620, 184575 118462, 184266 118071, 184116 117849, 183747 117255, 183260 116415, 182369 114817, 181624 113446, 180792 111885, 179901 110175, 178971 108347, 178020 106433, 177071 104469, 176144 102481, 175694 101486, 174792 99429, 174026 97599, 173648 96660, 172936 94828, 172267 93021, 171688 91396, 171149 89822, 170666 88360, 169502 84707, 169126 83587, 168936 83093, 168779 82768, 168642 82582, 168509 82506, 168371 82510, 168121 82600, 166644 83275, 166277 83423, 166039 83472, 165785 83463, 165420 83333, 165167 83223, 164583 82937, 163809 82534, 159471 80221, 158667 79817, 158271 79645, 157807 79511, 157271 79494, 156705 79515, 156178 79579, 155785 79656, 155352 79773, 154882 79937, 154373 80160, 153828 80444, 153545 80607, 152971 80960, 152398 81336, 151841 81718, 150057 82995, 149762 83191, 149499 83333, 149239 83423, 148954 83466, 148620 83466, 147968 83401, 143735 82803, 141376 82503, 140544 82416, 140137 82390, 139745 82395, 139491 82461, 139327 82552, 139116 82770, 138610 83493, 137773 84739, 137486 85146, 137123 85605, 136904 85718, 136788 85723, 136550 85636, 136222 85436, 135865 85191, 135332 84804, 135082 84611, 134322 85767, 133647 86771, 131649 85654, 132483 84438, 133637 82721, 134784 80978, 135925 79207, 137058 77410, 138183 75589, 139198 73913))) \ No newline at end of file +MULTIPOLYGON (((141255 74687, 140348 76216, 139171 78161, 138898 78604, 139063 78598, 139133 78603, 138844 78788, 138737 78863, 138482 79276, 138535 79320, 139006 79418, 139737 79539, 142371 79929, 142124 79838, 141799 79570, 141613 79217, 141614 78873, 141393 78843, 139719 78644, 139133 78603, 139976 78064, 141025 77414, 141504 77131, 141773 76992, 142142 76883, 142446 76864, 143051 76945, 143921 77095, 145247 77346, 146648 77626, 147378 77787, 147700 77867, 147941 77940, 148197 78069, 148268 78153, 148301 78344, 148178 78783, 148073 79095, 147909 79533, 147854 79665, 147662 79679, 147298 79661, 146845 79611, 143958 79194, 143744 79165, 143769 79105, 143769 78710, 143698 78526, 143436 78212, 143073 78001, 142647 77923, 142440 77947, 142066 78128, 141777 78439, 141614 78822, 141614 78873, 143744 79165, 143606 79489, 143316 79802, 142944 79982, 142758 79984, 144732 80261, 146033 80426, 146499 80474, 146856 80496, 147247 80487, 147447 80393, 147579 80272, 147740 79937, 147854 79665, 148048 79650, 148409 79522, 148759 79307, 150434 78109, 151208 77595, 151926 77158, 152580 76802, 152913 76638, 153249 76486, 153587 76348, 153926 76227, 154262 76121, 154597 76029, 155254 75884, 155919 75780, 156536 75713, 157105 75673, 157555 75654, 158195 75644, 158584 75648, 158864 75665, 159239 75729, 159566 75837, 160017 76042, 160504 76296, 164911 78715, 165647 79108, 166026 79300, 166334 79442, 166712 79583, 167016 79611, 167461 79570, 169882 79086, 170623 78958, 170935 79053, 171175 79330, 171396 79711, 171661 80281, 172002 81101, 172405 82119, 175045 88942, 176915 93676, 178101 96603, 179701 100462, 180886 103236, 182027 105842, 183099 108221, 183763 109655, 184903 112052, 185559 113368, 185901 114015, 186177 114494, 186400 114826, 186576 115023, 186736 115127, 186892 115159, 187263 115119, 188763 114861, 189027 114831, 189250 114861, 189567 115170, 189991 115848, 190208 116233, 191107 117926, 193734 123000, 195736 126814, 198669 132311, 204627 143337, 205859 145646, 207109 148020, 208364 150452, 209617 152941, 210865 155485, 212102 158078, 213324 160716, 214530 163393, 215715 166100, 216876 168832, 218011 171577, 219122 174347, 220188 177073, 221226 179802, 222227 182504, 223188 185167, 224111 187788, 224990 190351, 225826 192845, 226619 195264, 227369 197608, 228076 199879, 228744 202079, 229374 204212, 229968 206280, 230528 208289, 231056 210242, 231556 212143, 232027 213995, 232475 215805, 232899 217576, 233692 221023, 234419 224368, 235100 227642, 235916 231800, 231831 231800, 231174 228481, 230569 225558, 229854 222255, 229078 218851, 228659 217101, 228177 215143, 227755 213481, 227264 211604, 226743 209673, 226190 207686, 225604 205637, 224982 203524, 224321 201342, 223621 199088, 222878 196759, 222092 194353, 221262 191870, 220389 189320, 219474 186714, 218519 184057, 217526 181363, 216476 178581, 215440 175910, 214351 173174, 213235 170442, 212097 167733, 210884 164922, 209767 162400, 208581 159797, 207389 157246, 206193 154752, 204998 152320, 203809 149955, 202634 147655, 196965 136752, 195740 134370, 193277 129494, 191619 126134, 189012 120757, 188522 119789, 188160 119136, 187945 118800, 187774 118611, 187575 118478, 187325 118447, 186920 118476, 185580 118622, 185076 118664, 184809 118620, 184575 118462, 184266 118071, 184116 117849, 183747 117255, 183260 116415, 182369 114817, 181624 113446, 180792 111885, 179901 110175, 178971 108347, 178020 106433, 177071 104469, 176144 102481, 175694 101486, 174792 99429, 174026 97599, 173648 96660, 172936 94828, 172267 93021, 171688 91396, 171149 89822, 170666 88360, 169502 84707, 169126 83587, 168936 83093, 168779 82768, 168642 82582, 168509 82506, 168371 82510, 168121 82600, 166644 83275, 166277 83423, 166039 83472, 165785 83463, 165420 83333, 165167 83223, 164583 82937, 163809 82534, 159471 80221, 158667 79817, 158271 79645, 157807 79511, 157271 79494, 156705 79515, 156178 79579, 155785 79656, 155352 79773, 154882 79937, 154373 80160, 153828 80444, 153545 80607, 152971 80960, 152398 81336, 151841 81718, 150057 82995, 149762 83191, 149499 83333, 149239 83423, 148954 83466, 148620 83466, 147968 83401, 143735 82803, 141376 82503, 140544 82416, 140137 82390, 139745 82395, 139491 82461, 139327 82552, 139116 82770, 138610 83493, 137773 84739, 137486 85146, 137123 85605, 136904 85718, 136788 85723, 136550 85636, 136222 85436, 135865 85191, 135332 84804, 135082 84611, 134322 85767, 133647 86771, 131649 85654, 132483 84438, 133637 82721, 134784 80978, 135925 79207, 137058 77410, 138183 75589, 139198 73913, 141255 74687))) \ No newline at end of file diff --git a/stress_benchmark/resources/039.settings b/stress_benchmark/resources/039.settings index be719c02d9..54dba7528d 100644 --- a/stress_benchmark/resources/039.settings +++ b/stress_benchmark/resources/039.settings @@ -156,6 +156,7 @@ machine_settings=0 raft_base_extruder_nr=0 z_seam_y=220 wall_overhang_angle=90 +seam_overhang_angle=30 draft_shield_height=10 _plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 travel_retract_before_outer_wall=True @@ -533,7 +534,6 @@ skirt_brim_minimal_length=250 cooling=0 brim_replaces_support=False wall_x_extruder_nr=-1 -support_interface_skip_height=0.2 machine_nozzle_head_distance=3 support_bottom_pattern=grid raft_base_wall_count=1 diff --git a/stress_benchmark/resources/039.wkt b/stress_benchmark/resources/039.wkt index 752d94d3bd..b4fd615bbc 100644 --- a/stress_benchmark/resources/039.wkt +++ b/stress_benchmark/resources/039.wkt @@ -1 +1 @@ -MULTIPOLYGON (((120264 173957, 120384 174108, 110615 174109, 110736 173957, 111261 172596, 119739 172595)), ((109264 173957, 109384 174108, 99615 174109, 99736 173957, 100261 172596, 108739 172595)), ((98264 173957, 98384 174108, 88616 174108, 88736 173957, 89261 172596, 97739 172595)), ((131264 173957, 131384 174108, 121616 174108, 121736 173957, 122261 172596, 130739 172595)), ((174108 131384, 173957 131264, 172596 130739, 172596 122260, 173957 121736, 174108 121616)), ((46043 121736, 47404 122261, 47405 130739, 46043 131264, 45892 131384, 45892 121616)), ((174109 120385, 173957 120264, 172596 119739, 172596 111260, 173957 110736, 174108 110616)), ((46043 110736, 47404 111261, 47405 119739, 46043 120264, 45892 120384, 45891 110615)), ((174109 109385, 173957 109264, 172596 108739, 172596 100260, 173957 99736, 174108 99616)), ((46043 99736, 47404 100261, 47405 108739, 46043 109264, 45892 109384, 45891 99615)), ((46043 88736, 47404 89261, 47405 97739, 46043 98264, 45892 98384, 45892 88616)), ((174108 98384, 173957 98264, 172596 97739, 172596 89260, 173957 88736, 174108 88616)), ((120264 46043, 119739 47404, 111260 47404, 110736 46043, 110616 45892, 120385 45891)), ((109264 46043, 108739 47404, 100260 47404, 99736 46043, 99616 45892, 109385 45891)), ((131264 46043, 130739 47404, 122260 47404, 121736 46043, 121616 45892, 131384 45892)), ((98264 46043, 97739 47404, 89260 47404, 88736 46043, 88616 45892, 98384 45892)), ((165002 41351, 165002 42361, 177640 42360, 177639 55002, 178648 55002, 178655 55358, 178649 77573, 178655 77646, 178649 78002, 177639 78002, 177639 80000, 176630 80000, 176630 81000, 177639 81000, 177640 139000, 176630 139000, 176630 140000, 177639 140000, 177640 142002, 178648 142002, 178655 142358, 178649 164573, 178655 164646, 178649 165002, 177639 165002, 177640 177640, 164998 177639, 164998 178648, 164642 178655, 142427 178649, 142354 178655, 141998 178649, 141998 177639, 140000 177639, 140000 176630, 139000 176630, 139000 177639, 81000 177640, 81000 176630, 80000 176630, 80000 177639, 77998 177640, 77998 178648, 77642 178655, 55427 178649, 55354 178655, 54998 178649, 54998 177639, 42360 177640, 42361 164998, 41352 164998, 41345 164642, 41351 142427, 41345 142354, 41351 141998, 42361 141998, 42361 140000, 43369 140000, 43370 139000, 42361 139000, 42360 81000, 43370 81000, 43370 80000, 42361 80000, 42360 77998, 41352 77998, 41345 77642, 41351 55427, 41345 55354, 41351 54998, 42361 54998, 42360 42360, 55002 42361, 55002 41352, 55358 41345, 77573 41351, 77646 41345, 78002 41351, 78002 42361, 80000 42361, 80000 43370, 81000 43370, 81000 42361, 139000 42360, 139000 43370, 140000 43370, 140000 42361, 142002 42360, 142002 41352, 142358 41345, 164573 41351, 164646 41345) (80000 45891, 87384 45892, 87264 46043, 86739 47404, 47405 47405, 47405 86739, 46043 87264, 45892 87384, 45891 80000, 44379 80000, 44378 140000, 45891 140000, 45892 132616, 46043 132736, 47404 133261, 47404 172596, 86739 172595, 87264 173957, 87384 174108, 80000 174109, 80000 175621, 140000 175622, 140000 174109, 132616 174108, 132736 173957, 133261 172596, 172596 172596, 172595 133261, 173957 132736, 174108 132616, 174109 140000, 175621 140000, 175622 80000, 174109 80000, 174108 87384, 173957 87264, 172596 86739, 172596 47404, 133261 47405, 132736 46043, 132616 45892, 140000 45891, 140000 44379, 80000 44378))) \ No newline at end of file +MULTIPOLYGON (((120264 173957, 120384 174108, 110615 174109, 110736 173957, 111261 172596, 119739 172595, 120264 173957)), ((109264 173957, 109384 174108, 99615 174109, 99736 173957, 100261 172596, 108739 172595, 109264 173957)), ((98264 173957, 98384 174108, 88616 174108, 88736 173957, 89261 172596, 97739 172595, 98264 173957)), ((131264 173957, 131384 174108, 121616 174108, 121736 173957, 122261 172596, 130739 172595, 131264 173957)), ((174108 131384, 173957 131264, 172596 130739, 172596 122260, 173957 121736, 174108 121616, 174108 131384)), ((46043 121736, 47404 122261, 47405 130739, 46043 131264, 45892 131384, 45892 121616, 46043 121736)), ((174109 120385, 173957 120264, 172596 119739, 172596 111260, 173957 110736, 174108 110616, 174109 120385)), ((46043 110736, 47404 111261, 47405 119739, 46043 120264, 45892 120384, 45891 110615, 46043 110736)), ((174109 109385, 173957 109264, 172596 108739, 172596 100260, 173957 99736, 174108 99616, 174109 109385)), ((46043 99736, 47404 100261, 47405 108739, 46043 109264, 45892 109384, 45891 99615, 46043 99736)), ((46043 88736, 47404 89261, 47405 97739, 46043 98264, 45892 98384, 45892 88616, 46043 88736)), ((174108 98384, 173957 98264, 172596 97739, 172596 89260, 173957 88736, 174108 88616, 174108 98384)), ((120264 46043, 119739 47404, 111260 47404, 110736 46043, 110616 45892, 120385 45891, 120264 46043)), ((109264 46043, 108739 47404, 100260 47404, 99736 46043, 99616 45892, 109385 45891, 109264 46043)), ((131264 46043, 130739 47404, 122260 47404, 121736 46043, 121616 45892, 131384 45892, 131264 46043)), ((98264 46043, 97739 47404, 89260 47404, 88736 46043, 88616 45892, 98384 45892, 98264 46043)), ((165002 41351, 165002 42361, 177640 42360, 177639 55002, 178648 55002, 178655 55358, 178649 77573, 178655 77646, 178649 78002, 177639 78002, 177639 80000, 176630 80000, 176630 81000, 177639 81000, 177640 139000, 176630 139000, 176630 140000, 177639 140000, 177640 142002, 178648 142002, 178655 142358, 178649 164573, 178655 164646, 178649 165002, 177639 165002, 177640 177640, 164998 177639, 164998 178648, 164642 178655, 142427 178649, 142354 178655, 141998 178649, 141998 177639, 140000 177639, 140000 176630, 139000 176630, 139000 177639, 81000 177640, 81000 176630, 80000 176630, 80000 177639, 77998 177640, 77998 178648, 77642 178655, 55427 178649, 55354 178655, 54998 178649, 54998 177639, 42360 177640, 42361 164998, 41352 164998, 41345 164642, 41351 142427, 41345 142354, 41351 141998, 42361 141998, 42361 140000, 43369 140000, 43370 139000, 42361 139000, 42360 81000, 43370 81000, 43370 80000, 42361 80000, 42360 77998, 41352 77998, 41345 77642, 41351 55427, 41345 55354, 41351 54998, 42361 54998, 42360 42360, 55002 42361, 55002 41352, 55358 41345, 77573 41351, 77646 41345, 78002 41351, 78002 42361, 80000 42361, 80000 43370, 81000 43370, 81000 42361, 139000 42360, 139000 43370, 140000 43370, 140000 42361, 142002 42360, 142002 41352, 142358 41345, 164573 41351, 164646 41345, 165002 41351), (80000 45891, 87384 45892, 87264 46043, 86739 47404, 47405 47405, 47405 86739, 46043 87264, 45892 87384, 45891 80000, 44379 80000, 44378 140000, 45891 140000, 45892 132616, 46043 132736, 47404 133261, 47404 172596, 86739 172595, 87264 173957, 87384 174108, 80000 174109, 80000 175621, 140000 175622, 140000 174109, 132616 174108, 132736 173957, 133261 172596, 172596 172596, 172595 133261, 173957 132736, 174108 132616, 174109 140000, 175621 140000, 175622 80000, 174109 80000, 174108 87384, 173957 87264, 172596 86739, 172596 47404, 133261 47405, 132736 46043, 132616 45892, 140000 45891, 140000 44379, 80000 44378, 80000 45891))) \ No newline at end of file diff --git a/stress_benchmark/resources/040.settings b/stress_benchmark/resources/040.settings index 86c045c3f9..c0b2b89dd1 100644 --- a/stress_benchmark/resources/040.settings +++ b/stress_benchmark/resources/040.settings @@ -156,6 +156,7 @@ machine_settings=0 raft_base_extruder_nr=0 z_seam_y=-2000 wall_overhang_angle=90 +seam_overhang_angle=30 draft_shield_height=10 _plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 travel_retract_before_outer_wall=False @@ -532,7 +533,6 @@ skirt_brim_minimal_length=250 cooling=0 brim_replaces_support=True wall_x_extruder_nr=-1 -support_interface_skip_height=0.25 machine_nozzle_head_distance=3 support_bottom_pattern=concentric raft_base_wall_count=1 diff --git a/stress_benchmark/resources/040.wkt b/stress_benchmark/resources/040.wkt index 130784e163..005f1ca57b 100644 --- a/stress_benchmark/resources/040.wkt +++ b/stress_benchmark/resources/040.wkt @@ -1 +1 @@ -MULTIPOLYGON (((402121 100550, 402567 100684, 402759 100844, 402807 101064, 401914 110025, 400645 123031, 400840 125036, 412494 125403, 412515 125536, 412689 125681, 412692 125682, 412697 125681, 412886 125554, 412921 125416, 412494 125403, 412482 125323, 412824 123054, 412443 115525, 411786 101283, 411841 101065, 412038 100914, 412374 100830, 412847 100812, 413937 100844, 415387 100946, 415816 101100, 415997 101269, 416032 101492, 414220 113794, 412824 123054, 412940 125344, 412921 125416, 417267 125553, 426762 126450, 426775 126570, 426932 126714, 427112 126603, 427148 126487, 426762 126450, 426751 126354, 427169 124222, 427138 113717, 427083 102299, 427152 102085, 427359 101944, 427819 101854, 429295 101967, 430768 102138, 431204 102315, 431380 102493, 431406 102716, 429574 111944, 427169 124222, 427175 126397, 427148 126487, 434465 127178, 438949 127888, 438957 128037, 439116 128200, 439121 128202, 439139 128201, 439338 128092, 439387 127958, 438949 127888, 438946 127822, 439526 125509, 439883 118011, 440616 103833, 440691 103621, 440900 103490, 441350 103419, 442776 103601, 444194 103840, 444602 104034, 444763 104219, 444776 104444, 441784 116510, 439526 125509, 439413 127888, 439387 127958, 451528 129881, 453033 130218, 453033 130219, 453037 130437, 453189 130606, 453204 130612, 453217 130612, 453421 130512, 453500 130322, 453033 130218, 453735 127862, 454687 117762, 455749 106320, 455838 106115, 456054 105994, 456514 105947, 457942 106195, 459360 106501, 459772 106719, 459927 106913, 459930 107138, 457215 116176, 453735 127862, 453504 130312, 453500 130322, 465054 132905, 465046 133079, 465187 133256, 465208 133266, 465235 133267, 465444 133176, 465522 133010, 465054 132905, 465056 132863, 465895 130508, 466965 123133, 469045 109151, 469142 108948, 469360 108836, 469816 108811, 471211 109126, 472593 109500, 472981 109732, 473123 109933, 473114 110157, 468964 121890, 465895 130508, 465536 132980, 465522 133010, 468387 133650, 478829 136684, 478819 136820, 478954 137004, 478982 137019, 479010 137021, 479223 136940, 479289 136817, 478829 136684, 478835 136602, 479825 134163, 481707 124432, 483880 113088, 483987 112892, 484212 112791, 484668 112787, 486052 113167, 487422 113606, 487801 113860, 487935 114067, 487915 114291, 484347 123023, 479825 134163, 479325 136749, 479289 136817, 484977 138470, 490555 140478, 490535 140616, 490658 140806, 490677 140817, 490703 140821, 490919 140751, 490989 140635, 490555 140478, 490566 140402, 491622 138152, 493407 130870, 496812 117182, 496927 116988, 497157 116899, 497614 116918, 498978 117368, 500325 117876, 500688 118145, 500811 118358, 500781 118581, 495501 129890, 491622 138152, 491031 140565, 490989 140635, 501231 144322, 503912 145482, 503880 145664, 503996 145860, 504027 145880, 504057 145886, 504276 145826, 504372 145681, 503912 145482, 503918 145450, 505153 143088, 507945 133654, 511214 122536, 511340 122350, 511572 122271, 512024 122311, 513360 122820, 514675 123386, 515028 123675, 515139 123893, 515099 124114, 510728 132424, 505153 143088, 504396 145645, 504372 145681, 515236 150382, 515187 150582, 515293 150782, 515299 150787, 515309 150789, 515531 150741, 515660 150567, 515660 150566, 515236 150382, 515239 150372, 516429 148368, 518954 141146, 523657 127844, 523790 127663, 524030 127597, 524486 127662, 525818 128250, 527119 128887, 527464 129196, 527568 129421, 527518 129640, 521140 140434, 516429 148368, 515660 150566, 517085 151182, 528024 156756, 527986 156893, 528083 157099, 528106 157117, 528123 157122, 528347 157083, 528441 156968, 528024 156756, 528044 156684, 529450 154528, 533167 145343, 537498 134570, 537642 134398, 537881 134342, 538331 134426, 539613 135064, 540873 135757, 541196 136078, 541286 136307, 541225 136523, 536114 144308, 529450 154528, 528484 156915, 528441 156968, 532478 159025, 538810 162770, 538769 162884, 538847 163072, 539049 163048, 539129 162959, 538810 162770, 538842 162681, 540043 161044, 543360 153855, 549332 141033, 549483 140867, 549730 140826, 550192 140942, 551479 141667, 552739 142442, 553059 142786, 553144 143022, 553072 143235, 545636 153423, 540043 161044, 539193 162887, 539129 162959, 547347 167819, 550927 170252, 550876 170385, 550956 170601, 550969 170613, 550983 170619, 551211 170605, 551307 170510, 550927 170252, 550954 170182, 552536 168209, 557140 159389, 562488 149077, 562648 148919, 562893 148889, 563332 149016, 564565 149785, 565763 150605, 566059 150959, 566129 151196, 566048 151406, 560268 158565, 552536 168209, 551365 170452, 551307 170510, 560945 177060, 560942 177064, 560852 177260, 560903 177435, 561088 177430, 561247 177285, 561255 177271, 560945 177060, 562203 175648, 566108 168965, 573440 156507, 573607 156356, 573857 156340, 574300 156495, 575510 157341, 576685 158230, 576970 158601, 577031 158844, 576940 159050, 568764 168284, 562203 175648, 561255 177271, 561635 177529, 572499 185956, 572428 186095, 572486 186318, 572497 186331, 572512 186339, 572741 186349, 572870 186244, 572499 185956, 572526 185902, 574302 184091, 579493 176182, 586095 166048, 586270 165906, 586518 165900, 586941 166069, 588093 166956, 589208 167890, 589465 168269, 589511 168512, 589410 168713, 583298 174914, 574302 184091, 572910 186211, 572870 186244, 575285 188117, 581473 193572, 581414 193674, 581453 193873, 581657 193888, 581751 193818, 581473 193572, 581522 193487, 583026 192096, 587296 186159, 595929 174219, 596110 174084, 596360 174092, 596791 174293, 597915 175252, 599003 176253, 599252 176653, 599290 176900, 599180 177097, 590390 185285, 583026 192096, 581830 193759, 581751 193818, 588244 199542, 592330 203628, 592260 203741, 592292 203967, 592303 203983, 592326 203998, 592553 204028, 592659 203957, 592330 203628, 592375 203557, 594360 201890, 600242 194598, 607827 185134, 608015 185010, 608261 185026, 608666 185235, 609712 186217, 610717 187240, 610936 187642, 610958 187887, 610837 188077, 604107 193705, 594360 201890, 592733 203907, 592659 203957, 600459 211757, 600650 211973, 600621 211995, 600495 212171, 600517 212397, 600521 212404, 600531 212411, 600755 212449, 600939 212336, 600954 212319, 600650 211973, 602485 210576, 607188 205222, 616865 194255, 617056 194138, 617301 194166, 617702 194400, 618713 195443, 619680 196524, 619883 196940, 619895 197188, 619766 197372, 610235 204676, 602485 210576, 600954 212319, 610434 223073, 610312 223232, 610321 223460, 610336 223487, 610366 223511, 610589 223562, 610776 223460, 610434 223073, 610444 223060, 612660 221538, 619121 214942, 627611 206226, 627810 206120, 628052 206159, 628436 206405, 629378 207478, 630277 208591, 630456 209011, 630453 209257, 630314 209433, 623059 214398, 612660 221538, 610780 223458, 610776 223460, 611883 224716, 617790 232330, 617705 232426, 617705 232653, 617715 232674, 617735 232691, 617954 232751, 618072 232694, 617790 232330, 617849 232263, 619975 230946, 625107 226135, 635748 216201, 635950 216102, 636190 216153, 636562 216419, 637459 217543, 638096 218411, 638347 218807, 638467 219129, 638453 219375, 638306 219545, 628109 225907, 619975 230946, 618150 232657, 618072 232694, 622471 238365, 626502 244297, 626412 244391, 626401 244618, 626414 244649, 626436 244670, 626653 244740, 626770 244691, 626502 244297, 626562 244233, 628874 242955, 635949 237000, 645263 229120, 645471 229035, 645709 229097, 646070 229384, 646907 230546, 647699 231746, 647836 232181, 647809 232425, 647654 232588, 639979 236816, 628874 242955, 626853 244656, 626770 244691, 632181 252654, 633039 254105, 632884 254250, 632863 254477, 632873 254503, 632890 254521, 633102 254600, 633291 254530, 633039 254105, 633042 254102, 635301 252988, 640883 248688, 652412 239848, 652621 239770, 652856 239843, 653199 240141, 653981 241341, 654709 242569, 654826 243010, 654788 243252, 654625 243407, 643848 248771, 635301 252988, 633305 254525, 633291 254530, 640590 266871, 640569 266880, 640405 267022, 640374 267248, 640380 267266, 640388 267276, 640597 267367, 640805 267303, 640834 267283, 640590 266871, 642848 265895, 650574 260568, 660621 253605, 660837 253540, 661069 253627, 661401 253948, 662131 255203, 662812 256492, 662909 256940, 662860 257182, 662691 257330, 654711 260765, 642848 265895, 640834 267283, 640976 267523, 645990 277364, 645888 277443, 645846 277666, 645850 277683, 645857 277691, 646060 277790, 646190 277756, 645990 277364, 646059 277310, 648302 276461, 654364 272661, 666704 264972, 666920 264913, 667147 265010, 667382 265258, 667627 265659, 668125 266614, 668735 267912, 668808 268363, 668747 268602, 668570 268740, 657295 273058, 648302 276461, 646270 277735, 646190 277756, 648819 282916, 652252 290851, 652156 290919, 652107 291127, 652292 291232, 652407 291208, 652252 290851, 652332 290794, 654418 290123, 662858 285428, 673543 279448, 673764 279405, 673988 279518, 674293 279879, 674907 281223, 675473 282592, 675530 283060, 675459 283300, 675277 283431, 667120 286039, 654418 290123, 652504 291188, 652407 291208, 655679 298770, 656720 301662, 656581 301751, 656517 301969, 656517 301971, 656521 301977, 656715 302100, 656869 302076, 656720 301662, 656764 301634, 658999 301031, 665426 297816, 678499 291333, 678720 291297, 678937 291417, 679217 291778, 679762 293127, 680248 294490, 680280 294952, 680197 295185, 680008 295308, 668352 298508, 658999 301031, 656928 302067, 656869 302076, 661531 315024, 661657 315456, 661640 315460, 661453 315567, 661390 315749, 661547 315858, 661761 315833, 661765 315831, 661657 315456, 663614 315025, 672997 310933, 683834 306177, 684059 306155, 684270 306288, 684536 306674, 685018 308067, 685448 309478, 685459 309947, 685366 310180, 685172 310293, 676374 312213, 663614 315025, 661765 315831, 665018 327028, 664898 327089, 664813 327299, 664816 327306, 664995 327447, 665137 327438, 665018 327028, 665092 326991, 667355 326615, 674397 323926, 687739 318900, 687963 318886, 688167 319026, 688412 319417, 688822 320810, 689171 322213, 689158 322677, 689052 322901, 688852 323004, 676591 325082, 667355 326615, 665211 327434, 665137 327438, 666350 331614, 668431 340921, 668321 340970, 668234 341163, 668394 341301, 668515 341298, 668431 340921, 668518 340881, 670671 340620, 680657 337344, 691499 333763, 691725 333763, 691923 333915, 692094 334223, 692239 334686, 692498 335764, 692791 337217, 692758 337687, 692643 337909, 692439 338003, 683096 339113, 670671 340620, 668610 341296, 668515 341298, 670119 348473, 670829 352957, 670690 353010, 670585 353210, 670585 353217, 670591 353233, 670756 353389, 670899 353394, 672822 365536, 672967 367070, 672964 367070, 672759 367140, 672645 367338, 672644 367353, 672649 367368, 672807 367531, 673012 367546, 674126 379333, 673957 379380, 673832 379568, 673829 379590, 673837 379618, 673987 379788, 674171 379812, 674447 382734, 674789 393602, 674656 393633, 674523 393819, 674517 393852, 674523 393878, 674666 394055, 674804 394080, 674990 400000, 674804 405926, 674666 405951, 674523 406126, 674518 406147, 674523 406173, 674656 406357, 674789 406388, 674447 417267, 674172 420176, 673988 420202, 673837 420373, 673828 420406, 673832 420438, 673957 420629, 674125 420676, 673011 432459, 672806 432475, 672648 432637, 672645 432645, 672646 432654, 672760 432851, 672966 432920, 672967 432920, 672821 434465, 670901 446591, 670758 446598, 670592 446756, 670583 446781, 670583 446797, 670689 446999, 670828 447053, 670119 451528, 668514 458708, 668608 458710, 670538 459347, 678399 460280, 692438 461998, 692643 462090, 692758 462313, 692792 462786, 692498 464236, 692152 465673, 691923 466085, 691725 466237, 691500 466236, 679513 462311, 670538 459347, 668521 459108, 668433 459069, 668514 458708, 668393 458705, 668239 458836, 668324 459020, 668433 459069, 666350 468387, 665142 472544, 665217 472548, 667582 473443, 677393 475097, 688853 476995, 689052 477099, 689158 477323, 689171 477783, 688822 479190, 688414 480580, 688167 480974, 687963 481114, 687738 481101, 679143 477816, 667582 473443, 665088 473022, 665014 472984, 665142 472544, 665000 472537, 664819 472680, 664811 472697, 664810 472710, 664895 472923, 665014 472984, 661763 484175, 663496 484936, 671060 486585, 685171 489708, 685366 489820, 685460 490053, 685449 490522, 685018 491933, 684535 493328, 684270 493712, 684059 493845, 683835 493822, 672526 488900, 663496 484936, 661658 484535, 661763 484175, 661758 484173, 661544 484149, 661393 484252, 661455 484426, 661643 484532, 661658 484535, 661530 484977, 656873 497913, 656933 497922, 659203 499051, 668330 501545, 680009 504692, 680197 504815, 680280 505048, 680248 505507, 679762 506873, 679219 508220, 678937 508583, 678720 508703, 678498 508668, 670712 504772, 659203 499051, 656757 498382, 656714 498354, 656873 497913, 656718 497890, 656526 498012, 656514 498031, 656512 498044, 656575 498265, 656714 498354, 655678 501231, 652402 508801, 652499 508822, 654288 509823, 661252 512049, 675276 516570, 675459 516700, 675530 516940, 675472 517412, 674907 518777, 674293 520120, 673988 520482, 673764 520595, 673544 520551, 663040 514721, 654288 509823, 652335 509199, 652255 509142, 652402 508801, 652288 508776, 652111 508875, 652159 509075, 652255 509142, 648818 517085, 646194 522235, 646275 522255, 648471 523626, 657227 526969, 668571 531258, 668747 531398, 668808 531637, 668735 532086, 668125 533386, 667463 534656, 667147 534990, 666920 535086, 666703 535029, 659271 530369, 648471 523626, 646053 522703, 645983 522649, 646194 522235, 646064 522202, 645860 522303, 645847 522320, 645840 522345, 645882 522570, 645983 522649, 640975 532478, 640829 532726, 642728 534042, 649269 536858, 662690 542671, 662860 542818, 662909 543060, 662812 543510, 662131 544797, 661399 546053, 661069 546373, 660837 546460, 660622 546394, 650730 539587, 642728 534042, 640594 533123, 640829 532726, 640799 532705, 640593 532639, 640385 532730, 640380 532736, 640376 532748, 640408 532972, 640573 533114, 640594 533123, 633295 545464, 633309 545469, 635428 547096, 643713 551210, 654626 556592, 654788 556748, 654826 556990, 654710 557430, 653981 558659, 653200 559858, 652856 560157, 652621 560230, 652411 560153, 645448 554789, 635428 547096, 633036 545908, 633033 545906, 633295 545464, 633105 545395, 632892 545475, 632869 545499, 632857 545532, 632878 545759, 633033 545906, 632181 547347, 626764 555317, 626846 555353, 628746 556960, 634917 560360, 647653 567413, 647809 567575, 647836 567819, 647698 568255, 646907 569454, 646069 570617, 645709 570903, 645470 570966, 645264 570879, 636062 563148, 628746 556960, 626566 555759, 626506 555697, 626764 555317, 626648 555266, 626432 555336, 626414 555353, 626404 555377, 626415 555604, 626506 555697, 622470 561635, 618075 567301, 618154 567339, 620082 569141, 627935 574031, 638307 580454, 638452 580626, 638467 580871, 638306 581302, 637459 582457, 636564 583580, 636191 583847, 635950 583897, 635747 583799, 629355 577807, 620082 569141, 617842 567746, 617783 567678, 618075 567301, 617958 567245, 617738 567304, 617713 567326, 617700 567353, 617700 567582, 617783 567678, 611883 575285, 610768 576549, 610771 576551, 612524 578350, 618342 582333, 630313 590568, 630453 590743, 630456 590989, 630277 591409, 629378 592522, 628432 593597, 628052 593841, 627810 593880, 627612 593773, 619180 585181, 612524 578350, 610451 576931, 610442 576920, 610768 576549, 610581 576447, 610359 576495, 610339 576511, 610326 576535, 610316 576761, 610442 576920, 600959 587675, 602586 589521, 610039 595223, 619767 602626, 619895 602812, 619883 603060, 619680 603474, 618713 604557, 617701 605601, 617301 605833, 617056 605862, 616864 605746, 611130 599219, 602586 589521, 600642 588035, 600959 587675, 600944 587658, 600758 587547, 600534 587586, 600519 587597, 600512 587608, 600489 587835, 600614 588013, 600642 588035, 600458 588244, 592649 596053, 592722 596103, 594220 597971, 599709 602564, 610836 611924, 610958 612112, 610936 612358, 610717 612760, 609712 613783, 608670 614762, 608261 614974, 608015 614990, 607828 614865, 600237 605475, 594220 597971, 592383 596434, 592338 596364, 592649 596053, 592543 595981, 592318 596009, 592305 596017, 592298 596028, 592265 596253, 592338 596364, 588243 600459, 581757 606177, 581837 606236, 583121 608015, 590192 614589, 599181 622902, 599290 623100, 599252 623347, 599003 623747, 597915 624748, 597070 625469, 596680 625759, 596360 625908, 596110 625915, 595928 625782, 590928 618831, 583121 608015, 581514 606521, 581465 606434, 581757 606177, 581662 606108, 581449 606124, 581407 606332, 581465 606434, 575284 611883, 572856 613767, 572896 613800, 574158 615736, 579203 620856, 589409 631288, 589511 631488, 589465 631731, 589208 632109, 588093 633044, 586942 633930, 586518 634100, 586270 634093, 586096 633952, 579450 623855, 574158 615736, 572536 614090, 572509 614036, 572856 613767, 572729 613662, 572501 613669, 572495 613676, 572438 613896, 572509 614036, 561635 622471, 561262 622724, 562280 624457, 569068 632112, 576941 640949, 577031 641156, 576970 641399, 576685 641771, 575510 642659, 574299 643505, 573857 643660, 573607 643644, 573439 643494, 568895 635719, 562280 624457, 560939 622944, 561262 622724, 561254 622710, 561093 622566, 560901 622562, 560846 622744, 560936 622941, 560939 622944, 551295 629497, 551353 629556, 552411 631595, 557144 637459, 566047 648595, 566129 648804, 566059 649041, 565764 649395, 564564 650215, 563334 650984, 562893 651111, 562648 651080, 562488 650922, 556723 639904, 552411 631595, 550969 629808, 550942 629738, 551295 629497, 551201 629402, 550975 629387, 550972 629388, 550968 629392, 550890 629606, 550942 629738, 547346 632181, 539138 637036, 539203 637107, 540120 639081, 546317 647559, 553073 656764, 553144 656978, 553059 657214, 552819 657472, 552424 657752, 551479 658332, 550190 659059, 549730 659173, 549484 659133, 549331 658968, 545389 650425, 540120 639081, 538835 637323, 538804 637233, 539138 637036, 539056 636948, 538845 636924, 538765 637119, 538804 637233, 532477 640976, 528432 643037, 528475 643090, 529366 645306, 533482 651576, 541224 663478, 541286 663693, 541196 663922, 540874 664241, 539613 664936, 538333 665573, 537881 665658, 537642 665602, 537499 665429, 532828 653909, 529366 645306, 528056 643309, 528036 643239, 528432 643037, 528339 642921, 528115 642883, 528108 642885, 528094 642896, 527997 643101, 528036 643239, 517084 648819, 515671 649430, 516491 651759, 521652 660480, 527518 670359, 527568 670579, 527464 670804, 527118 671114, 525818 671750, 524484 672338, 524030 672403, 523791 672337, 523656 672157, 520540 663247, 516491 651759, 515233 649632, 515230 649621, 515671 649430, 515670 649428, 515539 649255, 515315 649208, 515301 649212, 515289 649220, 515182 649422, 515230 649621, 504365 654323, 504388 654358, 505096 656762, 508563 663353, 515098 675886, 515139 676107, 515028 676325, 514674 676613, 513360 677180, 512026 677689, 511572 677729, 511340 677650, 511215 677463, 507676 665531, 505096 656762, 503929 654545, 503923 654514, 504365 654323, 504269 654177, 504051 654116, 504029 654120, 504005 654136, 503890 654331, 503923 654514, 501230 655679, 491000 659362, 491042 659431, 491675 661988, 495873 670964, 500782 681418, 500811 681642, 500688 681855, 500323 682126, 498978 682632, 497611 683082, 497157 683101, 496927 683012, 496811 682819, 494565 673657, 491675 661988, 490559 659601, 490549 659525, 491000 659362, 490928 659246, 490710 659177, 490675 659182, 490653 659195, 490530 659386, 490549 659525, 484976 661531, 479282 663185, 479318 663253, 479786 665695, 482622 672634, 487914 685710, 487935 685933, 487801 686140, 487423 686393, 486052 686832, 484668 687213, 484212 687209, 483987 687108, 483880 686911, 481505 674658, 479786 665695, 478846 663394, 478839 663314, 479282 663185, 479217 663061, 479006 662980, 478984 662982, 478961 662994, 478828 663178, 478839 663314, 468386 666350, 465535 666987, 465549 667016, 465939 669656, 469225 678927, 473115 689843, 473123 690067, 472981 690268, 472589 690503, 471211 690873, 469814 691189, 469360 691164, 469142 691052, 469044 690850, 467696 681557, 465939 669656, 465047 667140, 465045 667097, 465535 666987, 465453 666821, 465244 666731, 465208 666733, 465180 666746, 465039 666923, 465045 667097, 453494 669679, 453498 669690, 453713 672009, 455915 679337, 459929 692863, 459927 693087, 459772 693281, 459364 693497, 457942 693805, 456869 693992, 456398 694041, 456054 694006, 455838 693885, 455749 693679, 454565 681197, 453713 672009, 453043 669780, 453494 669679, 453416 669489, 453213 669388, 453207 669388, 453197 669392, 453044 669562, 453043 669779, 453043 669780, 451527 670119, 439401 672040, 439427 672108, 439557 674672, 441950 684295, 444777 695555, 444763 695781, 444601 695966, 444191 696162, 442776 696399, 441345 696580, 440899 696510, 440691 696379, 440615 696168, 440173 686864, 439557 674672, 438937 672181, 438941 672113, 439401 672040, 439351 671906, 439150 671797, 439124 671796, 439107 671802, 438949 671964, 438941 672113, 434464 672822, 427141 673514, 427168 673605, 427158 675639, 428700 683400, 431405 697285, 431380 697507, 431204 697685, 430772 697861, 429295 698033, 427824 698147, 427359 698056, 427152 697915, 427084 697700, 427113 685088, 427158 675639, 426762 673644, 426772 673549, 427141 673514, 427106 673397, 426933 673290, 426784 673429, 426772 673549, 417266 674447, 412939 674583, 412958 674654, 412839 677168, 414300 687025, 416033 698507, 415997 698731, 415816 698900, 415383 699056, 413937 699156, 412484 699197, 412038 699086, 411842 698935, 411785 698718, 412253 689528, 412839 677168, 412470 674679, 412482 674597, 412939 674583, 412902 674446, 412711 674318, 412693 674316, 412679 674319, 412502 674465, 412482 674597, 400833 674964, 400646 676836, 401416 684547, 402806 698935, 402759 699156, 402567 699316, 402231 699417, 401750 699458, 400642 699478, 399173 699451, 398719 699315, 398527 699155, 398480 698935, 399665 686658, 400646 676836, 400460 674976, 400833 674964, 400833 674959, 400792 674747, 400647 674635, 400500 674747, 400458 674959, 400460 674976, 400000 674990, 386256 674558, 386232 674403, 386056 674257, 386038 674253, 386022 674255, 385831 674382, 385789 674543, 386256 674558, 386266 674618, 385896 677117, 386344 686577, 386959 698656, 386901 698872, 386705 699023, 386264 699135, 384809 699096, 383363 698995, 382928 698839, 382747 698669, 382711 698447, 384011 689838, 385896 677117, 385776 674592, 385789 674543, 382734 674447, 374522 673671, 374509 673554, 374360 673415, 374185 673523, 374150 673636, 374522 673671, 374532 673768, 374131 675786, 374167 683091, 374201 697825, 374133 698040, 373927 698181, 373463 698272, 371988 698156, 370515 697985, 370082 697809, 369905 697631, 369878 697408, 372178 685618, 374131 675786, 374121 673730, 374150 673636, 365535 672822, 359825 671917, 359817 671783, 359658 671621, 359635 671613, 359611 671614, 359412 671724, 359367 671845, 359825 671917, 359830 672001, 359206 674510, 358733 683872, 358159 695988, 358081 696198, 357872 696329, 357424 696399, 355998 696220, 354585 695983, 354169 695786, 354008 695600, 353995 695376, 356130 686869, 359206 674510, 359336 671927, 359367 671845, 348472 670119, 348190 670056, 348201 670021, 348200 669805, 348050 669636, 348040 669632, 348030 669632, 347827 669733, 347743 669933, 347741 669956, 348190 670056, 347527 672267, 346869 679360, 345487 693921, 345400 694128, 345185 694249, 344720 694296, 343293 694045, 341873 693738, 341466 693523, 341311 693329, 341307 693104, 344726 681593, 347527 672267, 347741 669956, 333749 666827, 333756 666626, 333613 666448, 333583 666434, 333548 666432, 333338 666522, 333246 666715, 333749 666827, 333748 666843, 332854 669367, 331502 678511, 329756 690554, 329658 690755, 329439 690866, 328991 690892, 327591 690579, 326212 690208, 325818 689971, 325675 689771, 325685 689546, 328636 681266, 332854 669367, 333245 666718, 333246 666715, 331613 666350, 322358 663661, 322370 663535, 322238 663351, 322218 663340, 322191 663338, 321978 663418, 321917 663533, 322358 663661, 322350 663750, 321407 666059, 320082 672973, 317310 687265, 317204 687464, 316980 687565, 316521 687568, 315138 687186, 313770 686747, 313390 686495, 313256 686288, 313275 686064, 317785 674924, 321407 666059, 321876 663609, 321917 663533, 315023 661530, 308277 659101, 308293 658972, 308169 658781, 308141 658764, 308110 658760, 307893 658830, 307827 658939, 308277 659101, 308266 659188, 307143 661590, 304921 670558, 302018 682407, 301900 682598, 301672 682687, 301215 682668, 299851 682220, 298508 681716, 298138 681442, 298016 681229, 298046 681006, 301770 673074, 307143 661590, 307780 659016, 307827 658939, 298770 655678, 297222 655008, 297263 654800, 297148 654604, 297127 654590, 297099 654585, 296880 654645, 296769 654812, 297222 655008, 297221 655012, 296050 657240, 294061 664001, 289930 677929, 289806 678116, 289573 678195, 289119 678155, 287783 677644, 286470 677078, 286118 676790, 286006 676572, 286047 676351, 291614 665676, 296050 657240, 296760 654825, 296769 654812, 283610 649118, 283621 649099, 283669 648887, 283563 648687, 283546 648675, 283535 648672, 283312 648720, 283182 648894, 283170 648928, 283610 649118, 282357 651236, 279237 660086, 275202 671626, 275066 671805, 274826 671870, 274367 671804, 273041 671220, 271737 670582, 271391 670272, 271288 670047, 271339 669828, 275774 662359, 282357 651236, 283170 648928, 282916 648818, 273074 643804, 273110 643681, 273014 643476, 273002 643467, 272990 643463, 272766 643500, 272682 643604, 273074 643804, 273050 643888, 271734 645892, 269064 652530, 263600 666005, 263459 666180, 263219 666235, 262769 666151, 261484 665510, 260225 664816, 259904 664498, 259812 664269, 259874 664053, 266458 653932, 271734 645892, 272629 643669, 272682 643604, 267523 640975, 260080 636573, 260118 636462, 260036 636265, 259825 636289, 259746 636375, 260080 636573, 260048 636667, 258756 638435, 254686 647195, 249558 658313, 249403 658478, 249156 658518, 248699 658405, 247410 657679, 246151 656906, 245827 656559, 245743 656323, 245814 656110, 250880 649206, 258756 638435, 259678 636449, 259746 636375, 252654 632181, 250111 630453, 250171 630300, 250094 630086, 250093 630085, 250086 630082, 249858 630096, 249748 630206, 250111 630453, 250092 630501, 248642 632298, 245331 638680, 238563 651610, 238405 651770, 238159 651801, 237719 651673, 236486 650902, 235290 650083, 234994 649730, 234924 649492, 235005 649282, 242555 639842, 248642 632298, 249705 630249, 249748 630206, 238365 622471, 238009 622195, 238020 622183, 238108 621985, 238052 621801, 237862 621805, 237703 621952, 237701 621956, 238009 622195, 236679 623695, 231494 632521, 225521 642738, 225353 642887, 225103 642904, 224661 642750, 223453 641906, 222274 641015, 221990 640643, 221928 640400, 222019 640194, 228009 633470, 236679 623695, 237701 621956, 228488 614809, 228550 614690, 228494 614469, 228487 614465, 228259 614457, 228149 614547, 228488 614809, 228450 614882, 226837 616519, 222723 622831, 214883 634740, 214710 634883, 214463 634890, 214035 634718, 212886 633830, 211776 632901, 211516 632519, 211469 632276, 211571 632075, 220268 623187, 226837 616519, 228092 614594, 228149 614547, 224715 611883, 217561 605576, 217621 605471, 217577 605263, 217367 605247, 217270 605320, 217561 605576, 217514 605660, 215919 607143, 209772 615657, 203105 624926, 202923 625058, 202673 625051, 202245 624852, 201121 623894, 200029 622890, 199781 622490, 199743 622244, 199853 622047, 206759 615659, 215919 607143, 217194 605377, 217270 605320, 211756 600458, 208546 597248, 208627 597124, 208595 596900, 208591 596894, 208576 596884, 208351 596855, 208233 596934, 208546 597248, 208509 597305, 206681 598835, 201985 604690, 193058 615731, 192872 615857, 192627 615842, 192222 615633, 191173 614649, 190169 613625, 189953 613226, 189931 612980, 190052 612791, 199564 604788, 206681 598835, 208171 596976, 208233 596934, 199542 588243, 198522 587087, 198523 587086, 198647 586907, 198624 586680, 198616 586668, 198603 586658, 198379 586619, 198205 586727, 198522 587087, 196563 588585, 189862 596191, 182278 604823, 182085 604938, 181839 604908, 181440 604678, 180430 603636, 179458 602548, 179257 602136, 179246 601889, 179375 601705, 186884 595989, 196563 588585, 198195 586733, 198205 586727, 190375 577846, 190484 577711, 190475 577484, 190465 577466, 190443 577448, 190220 577398, 190057 577486, 190375 577846, 190349 577879, 188282 579294, 183084 584629, 173184 594718, 172987 594825, 172745 594787, 172364 594543, 171417 593465, 170520 592353, 170342 591934, 170345 591689, 170484 591512, 180738 584459, 188282 579294, 190029 577501, 190057 577486, 188117 575285, 181452 566693, 181541 566589, 181540 566360, 181527 566333, 181504 566313, 181285 566254, 181159 566315, 181452 566693, 181400 566754, 179166 568145, 171924 574913, 163499 582812, 163295 582909, 163054 582858, 162682 582593, 161787 581471, 160937 580313, 160778 579884, 160792 579638, 160939 579468, 168957 574502, 179166 568145, 181089 566348, 181159 566315, 177529 561635, 174196 556730, 174293 556630, 174305 556404, 174296 556384, 174278 556366, 174062 556296, 173937 556349, 174196 556730, 174142 556786, 171963 557987, 166241 562827, 155440 571900, 155235 571989, 154996 571926, 154638 571643, 153798 570476, 153009 569280, 152871 568842, 152898 568598, 153053 568435, 163971 562390, 171963 557987, 173862 556380, 173937 556349, 167819 547346, 166332 544831, 166464 544702, 166485 544476, 166471 544439, 166452 544419, 166239 544340, 166076 544399, 166332 544831, 166308 544854, 163917 546041, 156116 552030, 146937 559103, 146726 559180, 146491 559107, 146234 558883, 145952 558509, 145368 557611, 144820 556688, 144608 556270, 144520 555940, 144559 555698, 144721 555542, 153142 551389, 163917 546041, 166036 544414, 166076 544399, 160051 534212, 160207 534079, 160240 533854, 160237 533845, 160232 533839, 160023 533747, 159816 533813, 159815 533813, 160051 534212, 160042 534219, 157898 535143, 151613 539498, 139990 547495, 139776 547563, 139544 547475, 139213 547156, 138480 545897, 137801 544611, 137705 544163, 137753 543920, 137922 543772, 149426 538791, 157898 535143, 159815 533813, 159025 532477, 153451 521537, 153562 521448, 153603 521223, 153596 521197, 153586 521184, 153382 521084, 153239 521122, 153451 521537, 153393 521584, 150990 522501, 142583 527748, 132747 533917, 132529 533972, 132302 533877, 131990 533548, 131326 532276, 130715 530975, 130640 530524, 130701 530286, 130878 530147, 139590 526853, 150990 522501, 153173 521139, 153239 521122, 151182 517084, 148260 510332, 148360 510264, 148408 510067, 148231 509968, 148113 509993, 148260 510332, 148182 510386, 146247 511004, 139339 514871, 126971 521734, 126751 521779, 126527 521667, 126223 521304, 125607 519959, 125044 518595, 124986 518124, 125057 517884, 125240 517753, 137244 513883, 146247 511004, 148019 510013, 148113 509993, 144321 501230, 142855 497157, 142974 497079, 143036 496858, 143033 496841, 143025 496828, 142832 496705, 142699 496725, 142855 497157, 142793 497198, 140351 497865, 131443 502294, 121056 507493, 120834 507526, 120616 507407, 120334 507042, 119793 505699, 119304 504328, 119272 503871, 119356 503638, 119544 503517, 128429 501122, 140351 497865, 142618 496738, 142699 496725, 138751 485761, 138756 485760, 138945 485654, 139007 485482, 138855 485377, 138640 485402, 138624 485409, 138751 485761, 136906 486163, 129817 489276, 116562 495045, 116339 495068, 116127 494935, 115862 494550, 115377 493154, 114949 491742, 114938 491276, 115032 491043, 115226 490930, 127267 488265, 136906 486163, 138624 485409, 138469 484977, 134634 471774, 134773 471701, 134856 471488, 134854 471467, 134848 471454, 134668 471313, 134503 471323, 134634 471774, 134581 471801, 132080 472222, 123230 475569, 111933 479887, 111707 479899, 111503 479759, 111259 479370, 110850 477978, 110586 476922, 110501 476453, 110512 476109, 110617 475885, 110817 475783, 119407 474358, 132080 472222, 134451 471326, 134503 471323, 133650 468387, 131850 460336, 131958 460289, 132043 460106, 131887 459972, 131769 459974, 131850 460336, 131759 460375, 129731 460616, 122782 462911, 108778 467496, 108554 467499, 108356 467346, 108126 466930, 107779 465494, 107560 464405, 107497 463926, 107522 463575, 107636 463351, 107841 463257, 119764 461799, 129731 460616, 131671 459975, 131769 459974, 129881 451528, 128977 445818, 129101 445768, 129206 445567, 129207 445545, 129198 445522, 129032 445365, 128904 445360, 127178 434464, 127151 434178, 127187 434177, 127394 434109, 127508 433914, 127509 433905, 127505 433894, 127347 433732, 127131 433714, 127108 433719, 127151 434178, 124846 434229, 117894 435797, 103619 438982, 103395 438963, 103214 438796, 103028 438375, 102821 436933, 102711 435850, 102696 435375, 102756 435035, 102892 434827, 103105 434754, 115108 434447, 124846 434229, 127108 433719, 125759 419445, 125953 419390, 126078 419199, 126082 419165, 126073 419132, 125922 418961, 125711 418933, 125553 417266, 125250 407635, 125375 407607, 125509 407423, 125513 407400, 125507 407374, 125365 407197, 125236 407174, 125010 400000, 125235 392832, 125364 392809, 125508 392631, 125515 392601, 125509 392569, 125375 392384, 125250 392355, 125553 382733, 125712 381055, 125923 381029, 126074 380858, 126081 380834, 126077 380807, 125952 380617, 125758 380563, 127107 366288, 124707 365751, 115326 365519, 103104 365247, 102892 365173, 102756 364965, 102676 364509, 102821 363066, 103026 361629, 103214 361204, 103395 361037, 103620 361017, 112094 362927, 124707 365751, 127152 365811, 127107 366288, 127129 366293, 127346 366274, 127504 366111, 127510 366093, 127509 366079, 127394 365882, 127189 365812, 127152 365811, 127178 365535, 128906 354625, 129034 354621, 129200 354467, 129205 354453, 129205 354440, 129100 354239, 128975 354191, 129881 348472, 131768 340033, 131669 340032, 129594 339351, 119997 338186, 107840 336744, 107636 336649, 107522 336425, 107489 335956, 107779 334506, 108124 333073, 108356 332654, 108554 332501, 108779 332502, 116910 335187, 129594 339351, 131762 339614, 131852 339654, 131768 340033, 131886 340034, 132047 339894, 131960 339702, 131852 339654, 133650 331613, 134508 328661, 134457 328658, 132296 327833, 125206 326657, 110818 324216, 110617 324114, 110512 323890, 110497 323429, 110850 322022, 111261 320627, 111503 320241, 111707 320101, 111932 320113, 123244 324376, 132296 327833, 134577 328211, 134630 328239, 134508 328661, 134672 328671, 134851 328532, 134852 328529, 134853 328522, 134769 328310, 134630 328239, 138470 315023, 138622 314600, 136783 313797, 126788 311593, 115225 309071, 115032 308957, 114939 308724, 114950 308258, 115377 306846, 115860 305453, 116127 305065, 116339 304932, 116563 304954, 124809 308573, 136783 313797, 138755 314232, 138622 314600, 138637 314606, 138852 314629, 139010 314519, 138947 314339, 138759 314233, 138755 314232, 142704 303262, 142623 303249, 140566 302220, 133293 300258, 119545 296483, 119356 296362, 119272 296129, 119304 295670, 119793 294301, 120336 292956, 120616 292593, 120834 292474, 121055 292508, 132196 298033, 140566 302220, 142786 302819, 142849 302860, 142704 303262, 142836 303284, 143029 303163, 143030 303162, 143031 303155, 142968 302936, 142849 302860, 144322 298770, 148109 290017, 148015 289997, 146115 288940, 136115 285723, 125239 282248, 125057 282116, 124986 281876, 125044 281408, 125607 280041, 126221 278698, 126527 278333, 126751 278221, 126972 278265, 135182 282859, 146115 288940, 148185 289606, 148263 289661, 148109 290017, 148227 290041, 148412 289936, 148362 289731, 148263 289661, 151182 282915, 153243 278870, 153178 278852, 151161 277587, 144139 274931, 130879 269851, 130701 269714, 130640 269475, 130713 269027, 131326 267724, 131990 266453, 132302 266123, 132529 266027, 132746 266083, 143297 272657, 151161 277587, 153386 278429, 153445 278475, 153243 278870, 153386 278908, 153590 278809, 153593 278806, 153598 278786, 153557 278562, 153445 278475, 159025 267523, 159810 266195, 157779 264795, 148478 260773, 137921 256228, 137753 256080, 137705 255836, 137800 255391, 138480 254103, 139212 252845, 139544 252525, 139776 252438, 139991 252504, 147748 257878, 157779 264795, 160046 265775, 160054 265782, 159810 266195, 159811 266196, 160019 266259, 160228 266167, 160237 266156, 160242 266141, 160210 265916, 160054 265782, 166080 255593, 166041 255578, 164061 254053, 157377 250756, 144722 244457, 144559 244302, 144520 244060, 144638 243618, 145368 242389, 146148 241191, 146491 240893, 146726 240820, 146936 240898, 156813 248471, 164061 254053, 166301 255158, 166325 255180, 166080 255593, 166243 255654, 166455 255575, 166470 255559, 166480 255533, 166459 255306, 166325 255180, 167819 252653, 173931 243660, 173855 243629, 171839 241932, 163168 237138, 153052 231566, 152898 231402, 152871 231158, 153008 230722, 153798 229524, 154637 228358, 154996 228074, 155235 228011, 155441 228099, 162643 234191, 171839 241932, 174147 243208, 174200 243264, 173931 243660, 174057 243711, 174274 243640, 174297 243618, 174308 243592, 174296 243365, 174200 243264, 177529 238365, 181163 233680, 181093 233646, 179276 231943, 172907 227998, 160940 220531, 160792 220361, 160778 220116, 160937 219687, 161787 218528, 162681 217408, 163054 217142, 163295 217091, 163498 217188, 172622 225705, 179276 231943, 181393 233254, 181446 233315, 181163 233680, 181288 233742, 181507 233684, 181522 233670, 181534 233647, 181535 233419, 181446 233315, 188117 224715, 190050 222523, 190021 222508, 188153 220600, 180047 215032, 170483 208489, 170345 208311, 170342 208066, 170520 207645, 171417 206535, 172361 205459, 172745 205213, 172987 205175, 173185 205281, 179737 212006, 188153 220600, 190355 222113, 190381 222147, 190050 222523, 190214 222609, 190436 222560, 190465 222537, 190479 222511, 190489 222283, 190381 222147, 198209 213268, 198200 213262, 196662 211512, 190574 206877, 179376 198294, 179245 198112, 179257 197864, 179463 197445, 180430 196364, 181439 195323, 181839 195091, 182085 195062, 182278 195177, 190571 204578, 196662 211512, 198514 212922, 198209 213268, 198383 213376, 198607 213338, 198612 213334, 198618 213325, 198642 213098, 198515 212922, 198514 212922, 199542 211756, 208223 203075, 208161 203034, 206545 201031, 198957 194658, 190051 187210, 189931 187019, 189953 186774, 190168 186376, 191173 185351, 192223 184367, 192627 184158, 192872 184143, 193059 184268, 198884 191535, 206545 201031, 208517 202687, 208554 202744, 208223 203075, 208342 203154, 208569 203123, 208591 203108, 208601 203094, 208634 202869, 208554 202744, 211757 199541, 217276 194676, 217200 194618, 216010 192963, 210203 187593, 199854 177952, 199743 177756, 199781 177509, 200028 177111, 201121 176106, 202243 175150, 202673 174949, 202923 174941, 203104 175075, 210495 185296, 216010 192963, 217506 194347, 217554 194430, 217276 194676, 217371 194749, 217573 194735, 217614 194534, 217554 194430, 224716 188117, 228136 185464, 228077 185417, 226689 183302, 219725 176197, 211570 167926, 211469 167724, 211516 167481, 211711 167196, 212052 166868, 212886 166170, 214036 165282, 214463 165110, 214710 165117, 214884 165259, 219907 172969, 226689 183302, 228460 185109, 228498 185183, 228136 185464, 228247 185553, 228476 185543, 228494 185533, 228502 185524, 228559 185302, 228498 185183, 237707 178040, 236754 176411, 231603 170629, 222020 159805, 221928 159600, 221990 159357, 222274 158986, 223453 158094, 224660 157251, 225103 157096, 225353 157113, 225520 157263, 231776 167891, 236754 176411, 238002 177811, 237707 178040, 237709 178044, 237867 178190, 238051 178195, 238103 178019, 238013 177823, 238002 177811, 238365 177529, 249738 169801, 249694 169758, 248522 167512, 242603 160128, 235005 150718, 234924 150507, 234994 150270, 235291 149916, 236486 149098, 237721 148326, 238159 148199, 238405 148230, 238564 148389, 242573 156118, 248522 167512, 250106 169489, 250125 169538, 249738 169801, 249849 169910, 250077 169924, 250097 169916, 250106 169907, 250185 169691, 250125 169538, 252654 167819, 259754 163620, 259687 163546, 258826 161681, 254503 155790, 245815 143889, 245743 143677, 245827 143441, 246149 143096, 247411 142320, 248698 141596, 249156 141482, 249404 141522, 249557 141688, 254626 152577, 258826 161681, 260042 163337, 260074 163431, 259754 163620, 259832 163707, 260034 163731, 260111 163542, 260074 163431, 267523 159025, 272674 156400, 272621 156336, 271652 153940, 266530 146086, 259873 135947, 259813 135731, 259904 135502, 260226 135183, 261484 134489, 262773 133849, 263219 133765, 263459 133820, 263601 133994, 266875 142132, 271652 153940, 273063 156104, 273087 156190, 272674 156400, 272759 156503, 272983 156541, 273004 156535, 273024 156519, 273122 156312, 273087 156190, 282916 151181, 283179 151067, 282417 148889, 278779 142763, 271340 130171, 271288 129953, 271391 129728, 271736 129419, 273041 128780, 274364 128196, 274826 128130, 275066 128195, 275202 128375, 279202 139697, 282417 148889, 283602 150884, 283179 151067, 283191 151101, 283320 151276, 283541 151325, 283549 151323, 283559 151316, 283665 151115, 283614 150904, 283602 150884, 296761 145190, 296753 145178, 295994 142611, 291711 134417, 286046 123649, 286006 123428, 286118 123209, 286473 122920, 287783 122356, 289117 121845, 289573 121805, 289806 121884, 289931 122070, 292412 130503, 295994 142611, 297233 144982, 297234 144986, 296761 145190, 296874 145358, 297093 145418, 297126 145412, 297156 145392, 297273 145196, 297234 144986, 298770 144321, 307837 141057, 307792 140980, 307198 138557, 304205 132183, 298047 118993, 298016 118771, 298138 118558, 298506 118286, 299851 117780, 301212 117332, 301672 117313, 301901 117402, 302017 117594, 304917 129257, 307198 138557, 308258 140815, 308270 140901, 307837 141057, 307902 141167, 308117 141237, 308141 141234, 308164 141220, 308289 141030, 308270 140901, 315024 138469, 321910 136469, 321869 136393, 321368 133799, 317890 125229, 313274 113937, 313257 113712, 313390 113505, 313772 113251, 315138 112814, 316525 112431, 316980 112435, 317204 112536, 317312 112734, 318961 121340, 321368 133799, 322361 136246, 322368 136336, 321910 136469, 321972 136584, 322185 136664, 322219 136661, 322245 136647, 322379 136462, 322368 136336, 331614 133650, 333259 133282, 333257 133278, 332896 130791, 330530 124151, 325686 110452, 325675 110229, 325818 110029, 326209 109794, 327591 109421, 328637 109186, 329099 109114, 329439 109134, 329658 109245, 329755 109447, 331526 121355, 332896 130791, 333740 133160, 333741 133175, 333259 133282, 333349 133475, 333557 133566, 333582 133565, 333607 133553, 333748 133377, 333741 133175, 347734 130046, 347503 127600, 344824 118604, 341306 106897, 341311 106671, 341466 106477, 341876 106260, 343293 105955, 344366 105767, 344840 105716, 345185 105750, 345400 105872, 345488 106078, 346291 114729, 347503 127600, 348201 129942, 347734 130046, 347736 130069, 347821 130268, 348025 130368, 348044 130368, 348056 130363, 348208 130193, 348211 129976, 348201 129942, 348472 129881, 359381 128153, 359351 128069, 359237 125678, 357496 118736, 353996 104623, 354008 104400, 354169 104214, 354580 104019, 355998 103779, 357421 103600, 357872 103671, 358081 103802, 358158 104013, 358780 116071, 359237 125678, 359820 128002, 359816 128084, 359381 128153, 359424 128274, 359623 128384, 359636 128385, 359649 128380, 359809 128218, 359816 128084, 365536 127178, 374143 126365, 374114 126272, 374121 124079, 372264 114602, 369878 102593, 369905 102368, 370082 102191, 370409 102058, 370885 101971, 371988 101844, 373467 101729, 373927 101818, 374133 101959, 374202 102174, 374161 110738, 374121 124079, 374542 126230, 374531 126328, 374143 126365, 374179 126477, 374361 126589, 374518 126445, 374531 126328, 382734 125553, 385807 125456, 385794 125406, 385911 123101, 384838 115989, 382712 101552, 382747 101331, 382928 101161, 383359 101007, 384809 100904, 386259 100864, 386705 100977, 386901 101128, 386959 101345, 386401 113422, 385911 123101, 386255 125384, 386246 125443, 385807 125456, 385848 125617, 386036 125745, 386044 125743, 386221 125598, 386246 125443, 400000 125010, 400451 125024, 400449 125042, 400494 125253, 400647 125369, 400798 125253, 400841 125042, 400840 125036, 400451 125024, 400645 123031, 399653 112841, 398479 101064, 398526 100845, 398719 100685, 399055 100584, 399537 100543, 400642 100522) (400683 674518, 401566 674424, 400639 674448, 399705 674415) (411964 674186, 412596 674222, 412700 674223, 413216 674142) (385923 674150, 386021 674161, 386546 674132, 385306 674053) (374375 673307, 374501 673311, 375300 673310, 374174 673229, 373423 673119) (426913 673119, 425968 673179, 426948 673183, 427848 673003) (438602 671730, 439015 671711, 439143 671700, 439816 671528) (359520 671499, 359615 671519, 360134 671544, 358926 671349) (348057 669539, 348198 669558, 348984 669638, 348060 669481, 347134 669268) (453171 669240, 452237 669391, 453193 669296, 453289 669272, 454089 669036) (464477 666755, 465078 666666, 465200 666643, 465668 666477) (333467 666306, 333590 666344, 334294 666450, 333088 666173) (322250 663254, 322383 663285, 323155 663441, 322252 663196, 321354 662898) (478933 662843, 478020 663084, 478947 662898, 479062 662857, 479823 662553) (489947 659275, 490539 659128, 490654 659094, 491118 658879) (308037 658625, 308165 658678, 308854 658851, 307678 658459) (297180 654514, 297294 654553, 297847 654720, 296527 654178) (503960 653989, 503076 654315, 503975 654045, 504092 653989, 504816 653616) (514755 649310, 515163 649167, 515251 649132, 515873 648766) (283468 648526, 283592 648593, 284259 648827, 283128 648326) (273077 643401, 273162 643439, 273914 643742, 273073 643331, 272254 642866) (528020 642757, 527168 643166, 528034 642818, 528141 642754, 528832 642304) (538301 637063, 538714 636876, 538775 636845, 539366 636409) (259984 636105, 260087 636174, 260737 636470, 259649 635858) (250162 630018, 250240 630062, 250971 630438, 250170 629946, 249394 629397) (550875 629262, 550061 629753, 550909 629316, 550990 629256, 551647 628725) (560206 622832, 560811 622488, 561205 622128) (238150 621724, 238732 622056, 237724 621354) (228540 614385, 228623 614444, 229331 614905, 228582 614337, 227863 613714) (572392 613554, 571630 614122, 572453 613588, 572524 613523, 573108 612944) (580945 606363, 581282 606123, 581379 606047, 581861 605520) (217583 605123, 217634 605174, 218227 605599, 217280 604792) (208632 596804, 208726 596885, 209366 597403, 208684 596770, 208033 596086) (592198 595908, 591504 596543, 592266 595926, 592328 595858, 592848 595236) (600050 587894, 600353 587626, 600455 587528, 600883 586968) (198615 586523, 198674 586594, 199216 587074, 198355 586182) (190522 577393, 190608 577484, 191188 578059, 190568 577360, 189984 576618) (610225 576419, 609593 577121, 610279 576443, 610356 576340, 610809 575689) (617282 567669, 617549 567381, 617637 567279, 618016 566674) (181533 566183, 181600 566282, 182082 566800, 181317 565838) (174363 556321, 174440 556420, 174964 557050, 174413 556293, 173901 555498) (626290 555275, 625727 556037, 626344 555295, 626415 555178, 626802 554491) (632472 545884, 632713 545569, 632784 545468, 633104 544827) (166496 544297, 166556 544407, 166983 544964, 166315 543933) (160321 533804, 160375 533890, 160846 534578, 160368 533768, 159936 532927) (640241 532672, 639752 533487, 640297 532691, 640357 532566, 640676 531842) (645477 522753, 645702 522397, 645750 522312, 646008 521632) (153643 521069, 153692 521183, 154065 521774, 153493 520673) (148515 510047, 148964 510848, 148564 509994, 148216 509114) (651876 508997, 651539 509675, 652011 508830, 652055 508709, 652301 507948) (656188 498486, 656382 498104, 656423 498012, 656610 497309) (143092 496718, 143124 496821, 143477 497525, 143158 496767, 142930 496107) (139124 485467, 139491 486291, 139182 485417, 138924 484519) (661213 484201, 660894 485080, 661288 484192, 661477 483312) (664534 473170, 664693 472759, 664724 472667, 664840 471952) (134919 471329, 134941 471432, 135202 472107, 134851 470903) (132149 460080, 132185 460207, 132435 460966, 132209 460057, 132036 459122) (668029 459004, 667833 459719, 668134 458804, 668146 458725, 668247 457878) (670361 447255, 670469 446858, 670498 446735, 670543 446041) (129280 445399, 129291 445497, 129483 446197, 129253 444973) (127601 433888, 127627 434031, 127795 434803, 127628 433664, 127575 432929) (672473 432836, 672349 433566, 672552 432627, 672558 432529, 672583 431695) (673657 420911, 673724 420512, 673740 420388, 673724 419686) (126168 419016, 126170 419142, 126289 419847, 126178 418610) (125603 407404, 125614 407542, 125706 408324, 125660 407389, 125667 406442) (674371 406339, 674318 407097, 674426 406158, 674422 406034, 674370 405217) (674394 394384, 674424 393966, 674427 393848, 674342 393146) (125615 392458, 125604 392594, 125653 393304, 125662 392065) (126170 380858, 126168 380982, 126185 381775, 126237 380644, 126326 379902) (673683 379615, 673720 380557, 673741 379615, 673725 379490, 673592 378684) (672569 367909, 672559 367471, 672552 367368, 672397 366671) (127627 365971, 127602 366106, 127590 366611, 127755 365390) (129291 354503, 129281 354595, 129239 355196, 129484 353786) (670436 353262, 670561 354198, 670499 353266, 670471 353145, 670256 352350) (668218 341916, 668141 341217, 667973 340715) (132184 339798, 132150 339917, 132069 340626, 132314 339409) (134939 328571, 134920 328664, 134788 329475, 135008 328561, 135290 327653) (664664 327355, 664879 328282, 664727 327337, 664695 327244, 664392 326455) (661394 316309, 661265 315754, 660989 315144) (139126 314527, 139018 315049, 139413 313891) (143123 303181, 143093 303277, 142873 304093, 143183 303205, 143553 302329) (656373 302037, 656680 302939, 656425 301991, 656385 301902, 656014 301168) (652176 291675, 652054 291286, 652012 291170, 651659 290549) (148501 290001, 148293 290657, 148768 289506) (153692 278816, 153645 278928, 153350 279697, 153740 278853, 154189 278022) (645713 277747, 646101 278604, 645742 277666, 645274 276921) (640516 267800, 640356 267432, 640296 267307, 639893 266725) (160375 266110, 160323 266191, 160036 266852, 160620 265755) (166559 255589, 166497 255703, 166129 256431, 166712 255441, 167127 254841) (632748 254581, 633221 255398, 632784 254531, 632714 254432, 632234 253800) (626607 245167, 626415 244822, 626343 244705, 625886 244160) (174441 243579, 174366 243675, 174023 244291, 174700 243270) (181603 233715, 181534 233817, 181096 234509, 181646 233751, 182244 233019) (617603 232770, 618154 233539, 617636 232720, 617550 232619, 617016 232040) (610693 224149, 610357 223661, 610280 223559, 609919 223204) (190610 222514, 190521 222608, 190124 223184, 190900 222229) (198678 213401, 198615 213477, 198106 214138, 198728 213433, 199395 212762) (600417 212515, 601041 213232, 600455 212472, 600351 212372, 599762 211846) (592602 204472, 592332 204146, 592264 204071, 591698 203618) (208728 203113, 208635 203194, 208313 203581, 209207 202729) (217640 194821, 217583 194878, 217003 195504, 217841 194722, 218421 194257) (581347 194009, 582036 194664, 581376 193950, 581278 193874, 580629 193406) (572841 186793, 572529 186482, 572455 186414, 571843 186019) (228626 185554, 228540 185615, 228174 185980, 229158 185210) (238097 178306, 237431 178906, 238166 178343, 238941 177819) (560967 177707, 561536 178166, 560824 177525, 560747 177477, 560036 177066) (551335 171024, 550992 170745, 550910 170684, 550270 170357) (250247 169934, 250160 169984, 249595 170444, 250393 169901, 250864 169614) (260087 163826, 259981 163897, 259335 164370, 260130 163874, 260966 163421) (538763 163222, 539561 163729, 538787 163163, 538712 163125, 537938 162767) (528657 157585, 528144 157248, 528041 157186, 527577 157000) (273166 156559, 273079 156598, 272469 156998, 273554 156405) (283593 151406, 283467 151474, 282784 151873, 283623 151456, 284498 151084) (515425 151008, 516083 151354, 515252 150869, 515162 150833, 514376 150553) (504456 146200, 504094 146012, 503977 145956, 503307 145757) (297296 145446, 297179 145486, 296542 145818, 297691 145329) (308165 141321, 308038 141374, 307322 141703, 308198 141370, 309099 141084) (490637 140959, 491518 141301, 490654 140906, 490540 140873, 489746 140670) (479437 137295, 479063 137144, 478949 137103, 478258 136966) (322384 136713, 322247 136746, 321590 137012, 322781 136635) (333587 133656, 333468 133693, 332720 133954, 333622 133707, 334544 133510) (465368 133452, 466093 133668, 465206 133360, 465078 133336, 464272 133211) (453692 130850, 453288 130729, 453197 130706, 452478 130635) (348195 130442, 348057 130461, 347574 130606, 348788 130386) (359597 128481, 358740 128697, 359659 128536, 360595 128430) (439119 128356, 440049 128527, 439140 128299, 439018 128289, 438196 128246) (426210 126823, 427460 126921, 426899 126819) (374370 126692, 373874 126795, 375106 126694, 374495 126688) (385118 125975, 386056 125902, 387007 125890, 386010 125837) (412600 125778, 411756 125821, 412696 125841, 413644 125922, 412696 125777) (400160 125539, 401369 125559, 400672 125482)), ((673461 447259, 683344 447956, 694928 448746, 695135 448830, 695263 449040, 695321 449489, 695113 450910, 694842 452321, 694636 452729, 694447 452886, 694223 452894, 685239 450439, 673461 447259, 670891 447078, 670828 447053, 670901 446591, 670975 446588)), ((128904 445360, 128977 445818, 128900 445849, 126322 446030, 117269 448474, 105570 451672, 105345 451662, 105155 451505, 104948 451093, 104681 449688, 104470 448265, 104528 447816, 104655 447605, 104864 447523, 113615 446924, 126322 446030, 128816 445357)), ((675302 432972, 682946 433143, 697047 433503, 697262 433575, 697397 433783, 697478 434241, 697329 435684, 697125 437123, 696939 437543, 696757 437711, 696533 437731, 684298 435000, 675302 432972, 672967 432920, 673011 432459, 673021 432458)), ((698467 420091, 698613 420288, 698715 420727, 698644 422158, 698512 423583, 698346 424009, 698173 424182, 697950 424213, 688697 422623, 676833 420617, 686667 420357, 698251 420030)), ((110448 419045, 123071 419378, 113953 420919, 101962 422980, 101738 422949, 101565 422775, 101399 422350, 101268 420928, 101196 419493, 101297 419055, 101444 418857, 101660 418797)), ((676833 420617, 674166 420687, 674125 420676, 674172 420176, 674204 420172)), ((125711 418933, 125759 419445, 125745 419449, 123071 419378, 125707 418933)), ((113126 406765, 122672 407470, 115691 408346, 101241 410127, 101021 410088, 100856 409905, 100712 409477, 100644 408036, 100639 406609, 100763 406160, 100919 405970, 101138 405918)), ((699112 404728, 699268 404918, 699392 405363, 699384 406795, 699318 408236, 699175 408662, 699010 408845, 698789 408885, 686401 407358, 677348 406223, 684822 405670, 698892 404678)), ((125236 407174, 125250 407635, 125162 407654, 122672 407470, 125151 407159)), ((677348 406223, 674868 406406, 674789 406388, 674804 405926, 674879 405913)), ((699010 391155, 699175 391338, 699320 391769, 699384 393205, 699391 394642, 699268 395082, 699112 395272, 698893 395323, 689486 394628, 677491 393771, 687329 392552, 698788 391114)), ((677491 393771, 674880 394094, 674804 394080, 674789 393602, 674867 393583)), ((109936 390962, 122529 392523, 113304 393182, 101137 394083, 100919 394029, 100763 393839, 100640 393396, 100644 391964, 100711 390527, 100856 390095, 101021 389912, 101242 389871)), ((125250 392355, 125235 392832, 125150 392848, 122529 392523, 125164 392335)), ((113833 379017, 123231 380630, 116185 380828, 101661 381202, 101444 381142, 101297 380945, 101195 380503, 101268 379072, 101400 377646, 101565 377225, 101738 377051, 101961 377021)), ((125758 380563, 125712 381055, 125709 381055, 123231 380630, 125744 380559)), ((698173 375818, 698346 375991, 698511 376413, 698644 377841, 698716 379268, 698613 379711, 698467 379909, 698250 379969, 685809 379648, 676670 379392, 684012 378131, 697951 375788)), ((676670 379392, 674202 379816, 674171 379812, 674126 379333, 674167 379322)), ((696757 362289, 696939 362457, 697079 362773, 697177 363238, 697329 364316, 697440 365401, 697457 365877, 697397 366217, 697262 366424, 697048 366498, 687613 366709, 675426 367009, 673023 367547, 673012 367546, 672967 367070, 675426 367009, 685323 364795, 696532 362268)), ((117229 351464, 126509 353997, 128898 354161, 128975 354191, 128906 354625, 128819 354628, 126509 353997, 119368 353508, 104865 352476, 104655 352395, 104528 352184, 104469 351731, 104681 350312, 104950 348904, 105155 348495, 105345 348338, 105569 348329)), ((694447 347114, 694636 347271, 694840 347673, 695113 349090, 695322 350507, 695263 350960, 695135 351170, 694927 351253, 682527 352136, 673265 352771, 670972 353397, 670899 353394, 670829 352957, 670893 352933, 673265 352771, 680510 350791, 694224 347106))) \ No newline at end of file +MULTIPOLYGON (((402121 100550, 402567 100684, 402759 100844, 402807 101064, 401914 110025, 400645 123031, 400840 125036, 412494 125403, 412515 125536, 412689 125681, 412692 125682, 412697 125681, 412886 125554, 412921 125416, 412494 125403, 412482 125323, 412824 123054, 412443 115525, 411786 101283, 411841 101065, 412038 100914, 412374 100830, 412847 100812, 413937 100844, 415387 100946, 415816 101100, 415997 101269, 416032 101492, 414220 113794, 412824 123054, 412940 125344, 412921 125416, 417267 125553, 426762 126450, 426775 126570, 426932 126714, 427112 126603, 427148 126487, 426762 126450, 426751 126354, 427169 124222, 427138 113717, 427083 102299, 427152 102085, 427359 101944, 427819 101854, 429295 101967, 430768 102138, 431204 102315, 431380 102493, 431406 102716, 429574 111944, 427169 124222, 427175 126397, 427148 126487, 434465 127178, 438949 127888, 438957 128037, 439116 128200, 439121 128202, 439139 128201, 439338 128092, 439387 127958, 438949 127888, 438946 127822, 439526 125509, 439883 118011, 440616 103833, 440691 103621, 440900 103490, 441350 103419, 442776 103601, 444194 103840, 444602 104034, 444763 104219, 444776 104444, 441784 116510, 439526 125509, 439413 127888, 439387 127958, 451528 129881, 453033 130218, 453033 130219, 453037 130437, 453189 130606, 453204 130612, 453217 130612, 453421 130512, 453500 130322, 453033 130218, 453735 127862, 454687 117762, 455749 106320, 455838 106115, 456054 105994, 456514 105947, 457942 106195, 459360 106501, 459772 106719, 459927 106913, 459930 107138, 457215 116176, 453735 127862, 453504 130312, 453500 130322, 465054 132905, 465046 133079, 465187 133256, 465208 133266, 465235 133267, 465444 133176, 465522 133010, 465054 132905, 465056 132863, 465895 130508, 466965 123133, 469045 109151, 469142 108948, 469360 108836, 469816 108811, 471211 109126, 472593 109500, 472981 109732, 473123 109933, 473114 110157, 468964 121890, 465895 130508, 465536 132980, 465522 133010, 468387 133650, 478829 136684, 478819 136820, 478954 137004, 478982 137019, 479010 137021, 479223 136940, 479289 136817, 478829 136684, 478835 136602, 479825 134163, 481707 124432, 483880 113088, 483987 112892, 484212 112791, 484668 112787, 486052 113167, 487422 113606, 487801 113860, 487935 114067, 487915 114291, 484347 123023, 479825 134163, 479325 136749, 479289 136817, 484977 138470, 490555 140478, 490535 140616, 490658 140806, 490677 140817, 490703 140821, 490919 140751, 490989 140635, 490555 140478, 490566 140402, 491622 138152, 493407 130870, 496812 117182, 496927 116988, 497157 116899, 497614 116918, 498978 117368, 500325 117876, 500688 118145, 500811 118358, 500781 118581, 495501 129890, 491622 138152, 491031 140565, 490989 140635, 501231 144322, 503912 145482, 503880 145664, 503996 145860, 504027 145880, 504057 145886, 504276 145826, 504372 145681, 503912 145482, 503918 145450, 505153 143088, 507945 133654, 511214 122536, 511340 122350, 511572 122271, 512024 122311, 513360 122820, 514675 123386, 515028 123675, 515139 123893, 515099 124114, 510728 132424, 505153 143088, 504396 145645, 504372 145681, 515236 150382, 515187 150582, 515293 150782, 515299 150787, 515309 150789, 515531 150741, 515660 150567, 515660 150566, 515236 150382, 515239 150372, 516429 148368, 518954 141146, 523657 127844, 523790 127663, 524030 127597, 524486 127662, 525818 128250, 527119 128887, 527464 129196, 527568 129421, 527518 129640, 521140 140434, 516429 148368, 515660 150566, 517085 151182, 528024 156756, 527986 156893, 528083 157099, 528106 157117, 528123 157122, 528347 157083, 528441 156968, 528024 156756, 528044 156684, 529450 154528, 533167 145343, 537498 134570, 537642 134398, 537881 134342, 538331 134426, 539613 135064, 540873 135757, 541196 136078, 541286 136307, 541225 136523, 536114 144308, 529450 154528, 528484 156915, 528441 156968, 532478 159025, 538810 162770, 538769 162884, 538847 163072, 539049 163048, 539129 162959, 538810 162770, 538842 162681, 540043 161044, 543360 153855, 549332 141033, 549483 140867, 549730 140826, 550192 140942, 551479 141667, 552739 142442, 553059 142786, 553144 143022, 553072 143235, 545636 153423, 540043 161044, 539193 162887, 539129 162959, 547347 167819, 550927 170252, 550876 170385, 550956 170601, 550969 170613, 550983 170619, 551211 170605, 551307 170510, 550927 170252, 550954 170182, 552536 168209, 557140 159389, 562488 149077, 562648 148919, 562893 148889, 563332 149016, 564565 149785, 565763 150605, 566059 150959, 566129 151196, 566048 151406, 560268 158565, 552536 168209, 551365 170452, 551307 170510, 560945 177060, 560942 177064, 560852 177260, 560903 177435, 561088 177430, 561247 177285, 561255 177271, 560945 177060, 562203 175648, 566108 168965, 573440 156507, 573607 156356, 573857 156340, 574300 156495, 575510 157341, 576685 158230, 576970 158601, 577031 158844, 576940 159050, 568764 168284, 562203 175648, 561255 177271, 561635 177529, 572499 185956, 572428 186095, 572486 186318, 572497 186331, 572512 186339, 572741 186349, 572870 186244, 572499 185956, 572526 185902, 574302 184091, 579493 176182, 586095 166048, 586270 165906, 586518 165900, 586941 166069, 588093 166956, 589208 167890, 589465 168269, 589511 168512, 589410 168713, 583298 174914, 574302 184091, 572910 186211, 572870 186244, 575285 188117, 581473 193572, 581414 193674, 581453 193873, 581657 193888, 581751 193818, 581473 193572, 581522 193487, 583026 192096, 587296 186159, 595929 174219, 596110 174084, 596360 174092, 596791 174293, 597915 175252, 599003 176253, 599252 176653, 599290 176900, 599180 177097, 590390 185285, 583026 192096, 581830 193759, 581751 193818, 588244 199542, 592330 203628, 592260 203741, 592292 203967, 592303 203983, 592326 203998, 592553 204028, 592659 203957, 592330 203628, 592375 203557, 594360 201890, 600242 194598, 607827 185134, 608015 185010, 608261 185026, 608666 185235, 609712 186217, 610717 187240, 610936 187642, 610958 187887, 610837 188077, 604107 193705, 594360 201890, 592733 203907, 592659 203957, 600459 211757, 600650 211973, 600621 211995, 600495 212171, 600517 212397, 600521 212404, 600531 212411, 600755 212449, 600939 212336, 600954 212319, 600650 211973, 602485 210576, 607188 205222, 616865 194255, 617056 194138, 617301 194166, 617702 194400, 618713 195443, 619680 196524, 619883 196940, 619895 197188, 619766 197372, 610235 204676, 602485 210576, 600954 212319, 610434 223073, 610312 223232, 610321 223460, 610336 223487, 610366 223511, 610589 223562, 610776 223460, 610434 223073, 610444 223060, 612660 221538, 619121 214942, 627611 206226, 627810 206120, 628052 206159, 628436 206405, 629378 207478, 630277 208591, 630456 209011, 630453 209257, 630314 209433, 623059 214398, 612660 221538, 610780 223458, 610776 223460, 611883 224716, 617790 232330, 617705 232426, 617705 232653, 617715 232674, 617735 232691, 617954 232751, 618072 232694, 617790 232330, 617849 232263, 619975 230946, 625107 226135, 635748 216201, 635950 216102, 636190 216153, 636562 216419, 637459 217543, 638096 218411, 638347 218807, 638467 219129, 638453 219375, 638306 219545, 628109 225907, 619975 230946, 618150 232657, 618072 232694, 622471 238365, 626502 244297, 626412 244391, 626401 244618, 626414 244649, 626436 244670, 626653 244740, 626770 244691, 626502 244297, 626562 244233, 628874 242955, 635949 237000, 645263 229120, 645471 229035, 645709 229097, 646070 229384, 646907 230546, 647699 231746, 647836 232181, 647809 232425, 647654 232588, 639979 236816, 628874 242955, 626853 244656, 626770 244691, 632181 252654, 633039 254105, 632884 254250, 632863 254477, 632873 254503, 632890 254521, 633102 254600, 633291 254530, 633039 254105, 633042 254102, 635301 252988, 640883 248688, 652412 239848, 652621 239770, 652856 239843, 653199 240141, 653981 241341, 654709 242569, 654826 243010, 654788 243252, 654625 243407, 643848 248771, 635301 252988, 633305 254525, 633291 254530, 640590 266871, 640569 266880, 640405 267022, 640374 267248, 640380 267266, 640388 267276, 640597 267367, 640805 267303, 640834 267283, 640590 266871, 642848 265895, 650574 260568, 660621 253605, 660837 253540, 661069 253627, 661401 253948, 662131 255203, 662812 256492, 662909 256940, 662860 257182, 662691 257330, 654711 260765, 642848 265895, 640834 267283, 640976 267523, 645990 277364, 645888 277443, 645846 277666, 645850 277683, 645857 277691, 646060 277790, 646190 277756, 645990 277364, 646059 277310, 648302 276461, 654364 272661, 666704 264972, 666920 264913, 667147 265010, 667382 265258, 667627 265659, 668125 266614, 668735 267912, 668808 268363, 668747 268602, 668570 268740, 657295 273058, 648302 276461, 646270 277735, 646190 277756, 648819 282916, 652252 290851, 652156 290919, 652107 291127, 652292 291232, 652407 291208, 652252 290851, 652332 290794, 654418 290123, 662858 285428, 673543 279448, 673764 279405, 673988 279518, 674293 279879, 674907 281223, 675473 282592, 675530 283060, 675459 283300, 675277 283431, 667120 286039, 654418 290123, 652504 291188, 652407 291208, 655679 298770, 656720 301662, 656581 301751, 656517 301969, 656517 301971, 656521 301977, 656715 302100, 656869 302076, 656720 301662, 656764 301634, 658999 301031, 665426 297816, 678499 291333, 678720 291297, 678937 291417, 679217 291778, 679762 293127, 680248 294490, 680280 294952, 680197 295185, 680008 295308, 668352 298508, 658999 301031, 656928 302067, 656869 302076, 661531 315024, 661657 315456, 661640 315460, 661453 315567, 661390 315749, 661547 315858, 661761 315833, 661765 315831, 661657 315456, 663614 315025, 672997 310933, 683834 306177, 684059 306155, 684270 306288, 684536 306674, 685018 308067, 685448 309478, 685459 309947, 685366 310180, 685172 310293, 676374 312213, 663614 315025, 661765 315831, 665018 327028, 664898 327089, 664813 327299, 664816 327306, 664995 327447, 665137 327438, 665018 327028, 665092 326991, 667355 326615, 674397 323926, 687739 318900, 687963 318886, 688167 319026, 688412 319417, 688822 320810, 689171 322213, 689158 322677, 689052 322901, 688852 323004, 676591 325082, 667355 326615, 665211 327434, 665137 327438, 666350 331614, 668431 340921, 668321 340970, 668234 341163, 668394 341301, 668515 341298, 668431 340921, 668518 340881, 670671 340620, 680657 337344, 691499 333763, 691725 333763, 691923 333915, 692094 334223, 692239 334686, 692498 335764, 692791 337217, 692758 337687, 692643 337909, 692439 338003, 683096 339113, 670671 340620, 668610 341296, 668515 341298, 670119 348473, 670829 352957, 670690 353010, 670585 353210, 670585 353217, 670591 353233, 670756 353389, 670899 353394, 672822 365536, 672967 367070, 672964 367070, 672759 367140, 672645 367338, 672644 367353, 672649 367368, 672807 367531, 673012 367546, 674126 379333, 673957 379380, 673832 379568, 673829 379590, 673837 379618, 673987 379788, 674171 379812, 674447 382734, 674789 393602, 674656 393633, 674523 393819, 674517 393852, 674523 393878, 674666 394055, 674804 394080, 674990 400000, 674804 405926, 674666 405951, 674523 406126, 674518 406147, 674523 406173, 674656 406357, 674789 406388, 674447 417267, 674172 420176, 673988 420202, 673837 420373, 673828 420406, 673832 420438, 673957 420629, 674125 420676, 673011 432459, 672806 432475, 672648 432637, 672645 432645, 672646 432654, 672760 432851, 672966 432920, 672967 432920, 672821 434465, 670901 446591, 670758 446598, 670592 446756, 670583 446781, 670583 446797, 670689 446999, 670828 447053, 670119 451528, 668514 458708, 668608 458710, 670538 459347, 678399 460280, 692438 461998, 692643 462090, 692758 462313, 692792 462786, 692498 464236, 692152 465673, 691923 466085, 691725 466237, 691500 466236, 679513 462311, 670538 459347, 668521 459108, 668433 459069, 668514 458708, 668393 458705, 668239 458836, 668324 459020, 668433 459069, 666350 468387, 665142 472544, 665217 472548, 667582 473443, 677393 475097, 688853 476995, 689052 477099, 689158 477323, 689171 477783, 688822 479190, 688414 480580, 688167 480974, 687963 481114, 687738 481101, 679143 477816, 667582 473443, 665088 473022, 665014 472984, 665142 472544, 665000 472537, 664819 472680, 664811 472697, 664810 472710, 664895 472923, 665014 472984, 661763 484175, 663496 484936, 671060 486585, 685171 489708, 685366 489820, 685460 490053, 685449 490522, 685018 491933, 684535 493328, 684270 493712, 684059 493845, 683835 493822, 672526 488900, 663496 484936, 661658 484535, 661763 484175, 661758 484173, 661544 484149, 661393 484252, 661455 484426, 661643 484532, 661658 484535, 661530 484977, 656873 497913, 656933 497922, 659203 499051, 668330 501545, 680009 504692, 680197 504815, 680280 505048, 680248 505507, 679762 506873, 679219 508220, 678937 508583, 678720 508703, 678498 508668, 670712 504772, 659203 499051, 656757 498382, 656714 498354, 656873 497913, 656718 497890, 656526 498012, 656514 498031, 656512 498044, 656575 498265, 656714 498354, 655678 501231, 652402 508801, 652499 508822, 654288 509823, 661252 512049, 675276 516570, 675459 516700, 675530 516940, 675472 517412, 674907 518777, 674293 520120, 673988 520482, 673764 520595, 673544 520551, 663040 514721, 654288 509823, 652335 509199, 652255 509142, 652402 508801, 652288 508776, 652111 508875, 652159 509075, 652255 509142, 648818 517085, 646194 522235, 646275 522255, 648471 523626, 657227 526969, 668571 531258, 668747 531398, 668808 531637, 668735 532086, 668125 533386, 667463 534656, 667147 534990, 666920 535086, 666703 535029, 659271 530369, 648471 523626, 646053 522703, 645983 522649, 646194 522235, 646064 522202, 645860 522303, 645847 522320, 645840 522345, 645882 522570, 645983 522649, 640975 532478, 640829 532726, 642728 534042, 649269 536858, 662690 542671, 662860 542818, 662909 543060, 662812 543510, 662131 544797, 661399 546053, 661069 546373, 660837 546460, 660622 546394, 650730 539587, 642728 534042, 640594 533123, 640829 532726, 640799 532705, 640593 532639, 640385 532730, 640380 532736, 640376 532748, 640408 532972, 640573 533114, 640594 533123, 633295 545464, 633309 545469, 635428 547096, 643713 551210, 654626 556592, 654788 556748, 654826 556990, 654710 557430, 653981 558659, 653200 559858, 652856 560157, 652621 560230, 652411 560153, 645448 554789, 635428 547096, 633036 545908, 633033 545906, 633295 545464, 633105 545395, 632892 545475, 632869 545499, 632857 545532, 632878 545759, 633033 545906, 632181 547347, 626764 555317, 626846 555353, 628746 556960, 634917 560360, 647653 567413, 647809 567575, 647836 567819, 647698 568255, 646907 569454, 646069 570617, 645709 570903, 645470 570966, 645264 570879, 636062 563148, 628746 556960, 626566 555759, 626506 555697, 626764 555317, 626648 555266, 626432 555336, 626414 555353, 626404 555377, 626415 555604, 626506 555697, 622470 561635, 618075 567301, 618154 567339, 620082 569141, 627935 574031, 638307 580454, 638452 580626, 638467 580871, 638306 581302, 637459 582457, 636564 583580, 636191 583847, 635950 583897, 635747 583799, 629355 577807, 620082 569141, 617842 567746, 617783 567678, 618075 567301, 617958 567245, 617738 567304, 617713 567326, 617700 567353, 617700 567582, 617783 567678, 611883 575285, 610768 576549, 610771 576551, 612524 578350, 618342 582333, 630313 590568, 630453 590743, 630456 590989, 630277 591409, 629378 592522, 628432 593597, 628052 593841, 627810 593880, 627612 593773, 619180 585181, 612524 578350, 610451 576931, 610442 576920, 610768 576549, 610581 576447, 610359 576495, 610339 576511, 610326 576535, 610316 576761, 610442 576920, 600959 587675, 602586 589521, 610039 595223, 619767 602626, 619895 602812, 619883 603060, 619680 603474, 618713 604557, 617701 605601, 617301 605833, 617056 605862, 616864 605746, 611130 599219, 602586 589521, 600642 588035, 600959 587675, 600944 587658, 600758 587547, 600534 587586, 600519 587597, 600512 587608, 600489 587835, 600614 588013, 600642 588035, 600458 588244, 592649 596053, 592722 596103, 594220 597971, 599709 602564, 610836 611924, 610958 612112, 610936 612358, 610717 612760, 609712 613783, 608670 614762, 608261 614974, 608015 614990, 607828 614865, 600237 605475, 594220 597971, 592383 596434, 592338 596364, 592649 596053, 592543 595981, 592318 596009, 592305 596017, 592298 596028, 592265 596253, 592338 596364, 588243 600459, 581757 606177, 581837 606236, 583121 608015, 590192 614589, 599181 622902, 599290 623100, 599252 623347, 599003 623747, 597915 624748, 597070 625469, 596680 625759, 596360 625908, 596110 625915, 595928 625782, 590928 618831, 583121 608015, 581514 606521, 581465 606434, 581757 606177, 581662 606108, 581449 606124, 581407 606332, 581465 606434, 575284 611883, 572856 613767, 572896 613800, 574158 615736, 579203 620856, 589409 631288, 589511 631488, 589465 631731, 589208 632109, 588093 633044, 586942 633930, 586518 634100, 586270 634093, 586096 633952, 579450 623855, 574158 615736, 572536 614090, 572509 614036, 572856 613767, 572729 613662, 572501 613669, 572495 613676, 572438 613896, 572509 614036, 561635 622471, 561262 622724, 562280 624457, 569068 632112, 576941 640949, 577031 641156, 576970 641399, 576685 641771, 575510 642659, 574299 643505, 573857 643660, 573607 643644, 573439 643494, 568895 635719, 562280 624457, 560939 622944, 561262 622724, 561254 622710, 561093 622566, 560901 622562, 560846 622744, 560936 622941, 560939 622944, 551295 629497, 551353 629556, 552411 631595, 557144 637459, 566047 648595, 566129 648804, 566059 649041, 565764 649395, 564564 650215, 563334 650984, 562893 651111, 562648 651080, 562488 650922, 556723 639904, 552411 631595, 550969 629808, 550942 629738, 551295 629497, 551201 629402, 550975 629387, 550972 629388, 550968 629392, 550890 629606, 550942 629738, 547346 632181, 539138 637036, 539203 637107, 540120 639081, 546317 647559, 553073 656764, 553144 656978, 553059 657214, 552819 657472, 552424 657752, 551479 658332, 550190 659059, 549730 659173, 549484 659133, 549331 658968, 545389 650425, 540120 639081, 538835 637323, 538804 637233, 539138 637036, 539056 636948, 538845 636924, 538765 637119, 538804 637233, 532477 640976, 528432 643037, 528475 643090, 529366 645306, 533482 651576, 541224 663478, 541286 663693, 541196 663922, 540874 664241, 539613 664936, 538333 665573, 537881 665658, 537642 665602, 537499 665429, 532828 653909, 529366 645306, 528056 643309, 528036 643239, 528432 643037, 528339 642921, 528115 642883, 528108 642885, 528094 642896, 527997 643101, 528036 643239, 517084 648819, 515671 649430, 516491 651759, 521652 660480, 527518 670359, 527568 670579, 527464 670804, 527118 671114, 525818 671750, 524484 672338, 524030 672403, 523791 672337, 523656 672157, 520540 663247, 516491 651759, 515233 649632, 515230 649621, 515671 649430, 515670 649428, 515539 649255, 515315 649208, 515301 649212, 515289 649220, 515182 649422, 515230 649621, 504365 654323, 504388 654358, 505096 656762, 508563 663353, 515098 675886, 515139 676107, 515028 676325, 514674 676613, 513360 677180, 512026 677689, 511572 677729, 511340 677650, 511215 677463, 507676 665531, 505096 656762, 503929 654545, 503923 654514, 504365 654323, 504269 654177, 504051 654116, 504029 654120, 504005 654136, 503890 654331, 503923 654514, 501230 655679, 491000 659362, 491042 659431, 491675 661988, 495873 670964, 500782 681418, 500811 681642, 500688 681855, 500323 682126, 498978 682632, 497611 683082, 497157 683101, 496927 683012, 496811 682819, 494565 673657, 491675 661988, 490559 659601, 490549 659525, 491000 659362, 490928 659246, 490710 659177, 490675 659182, 490653 659195, 490530 659386, 490549 659525, 484976 661531, 479282 663185, 479318 663253, 479786 665695, 482622 672634, 487914 685710, 487935 685933, 487801 686140, 487423 686393, 486052 686832, 484668 687213, 484212 687209, 483987 687108, 483880 686911, 481505 674658, 479786 665695, 478846 663394, 478839 663314, 479282 663185, 479217 663061, 479006 662980, 478984 662982, 478961 662994, 478828 663178, 478839 663314, 468386 666350, 465535 666987, 465549 667016, 465939 669656, 469225 678927, 473115 689843, 473123 690067, 472981 690268, 472589 690503, 471211 690873, 469814 691189, 469360 691164, 469142 691052, 469044 690850, 467696 681557, 465939 669656, 465047 667140, 465045 667097, 465535 666987, 465453 666821, 465244 666731, 465208 666733, 465180 666746, 465039 666923, 465045 667097, 453494 669679, 453498 669690, 453713 672009, 455915 679337, 459929 692863, 459927 693087, 459772 693281, 459364 693497, 457942 693805, 456869 693992, 456398 694041, 456054 694006, 455838 693885, 455749 693679, 454565 681197, 453713 672009, 453043 669780, 453494 669679, 453416 669489, 453213 669388, 453207 669388, 453197 669392, 453044 669562, 453043 669779, 453043 669780, 451527 670119, 439401 672040, 439427 672108, 439557 674672, 441950 684295, 444777 695555, 444763 695781, 444601 695966, 444191 696162, 442776 696399, 441345 696580, 440899 696510, 440691 696379, 440615 696168, 440173 686864, 439557 674672, 438937 672181, 438941 672113, 439401 672040, 439351 671906, 439150 671797, 439124 671796, 439107 671802, 438949 671964, 438941 672113, 434464 672822, 427141 673514, 427168 673605, 427158 675639, 428700 683400, 431405 697285, 431380 697507, 431204 697685, 430772 697861, 429295 698033, 427824 698147, 427359 698056, 427152 697915, 427084 697700, 427113 685088, 427158 675639, 426762 673644, 426772 673549, 427141 673514, 427106 673397, 426933 673290, 426784 673429, 426772 673549, 417266 674447, 412939 674583, 412958 674654, 412839 677168, 414300 687025, 416033 698507, 415997 698731, 415816 698900, 415383 699056, 413937 699156, 412484 699197, 412038 699086, 411842 698935, 411785 698718, 412253 689528, 412839 677168, 412470 674679, 412482 674597, 412939 674583, 412902 674446, 412711 674318, 412693 674316, 412679 674319, 412502 674465, 412482 674597, 400833 674964, 400646 676836, 401416 684547, 402806 698935, 402759 699156, 402567 699316, 402231 699417, 401750 699458, 400642 699478, 399173 699451, 398719 699315, 398527 699155, 398480 698935, 399665 686658, 400646 676836, 400460 674976, 400833 674964, 400833 674959, 400792 674747, 400647 674635, 400500 674747, 400458 674959, 400460 674976, 400000 674990, 386256 674558, 386232 674403, 386056 674257, 386038 674253, 386022 674255, 385831 674382, 385789 674543, 386256 674558, 386266 674618, 385896 677117, 386344 686577, 386959 698656, 386901 698872, 386705 699023, 386264 699135, 384809 699096, 383363 698995, 382928 698839, 382747 698669, 382711 698447, 384011 689838, 385896 677117, 385776 674592, 385789 674543, 382734 674447, 374522 673671, 374509 673554, 374360 673415, 374185 673523, 374150 673636, 374522 673671, 374532 673768, 374131 675786, 374167 683091, 374201 697825, 374133 698040, 373927 698181, 373463 698272, 371988 698156, 370515 697985, 370082 697809, 369905 697631, 369878 697408, 372178 685618, 374131 675786, 374121 673730, 374150 673636, 365535 672822, 359825 671917, 359817 671783, 359658 671621, 359635 671613, 359611 671614, 359412 671724, 359367 671845, 359825 671917, 359830 672001, 359206 674510, 358733 683872, 358159 695988, 358081 696198, 357872 696329, 357424 696399, 355998 696220, 354585 695983, 354169 695786, 354008 695600, 353995 695376, 356130 686869, 359206 674510, 359336 671927, 359367 671845, 348472 670119, 348190 670056, 348201 670021, 348200 669805, 348050 669636, 348040 669632, 348030 669632, 347827 669733, 347743 669933, 347741 669956, 348190 670056, 347527 672267, 346869 679360, 345487 693921, 345400 694128, 345185 694249, 344720 694296, 343293 694045, 341873 693738, 341466 693523, 341311 693329, 341307 693104, 344726 681593, 347527 672267, 347741 669956, 333749 666827, 333756 666626, 333613 666448, 333583 666434, 333548 666432, 333338 666522, 333246 666715, 333749 666827, 333748 666843, 332854 669367, 331502 678511, 329756 690554, 329658 690755, 329439 690866, 328991 690892, 327591 690579, 326212 690208, 325818 689971, 325675 689771, 325685 689546, 328636 681266, 332854 669367, 333245 666718, 333246 666715, 331613 666350, 322358 663661, 322370 663535, 322238 663351, 322218 663340, 322191 663338, 321978 663418, 321917 663533, 322358 663661, 322350 663750, 321407 666059, 320082 672973, 317310 687265, 317204 687464, 316980 687565, 316521 687568, 315138 687186, 313770 686747, 313390 686495, 313256 686288, 313275 686064, 317785 674924, 321407 666059, 321876 663609, 321917 663533, 315023 661530, 308277 659101, 308293 658972, 308169 658781, 308141 658764, 308110 658760, 307893 658830, 307827 658939, 308277 659101, 308266 659188, 307143 661590, 304921 670558, 302018 682407, 301900 682598, 301672 682687, 301215 682668, 299851 682220, 298508 681716, 298138 681442, 298016 681229, 298046 681006, 301770 673074, 307143 661590, 307780 659016, 307827 658939, 298770 655678, 297222 655008, 297263 654800, 297148 654604, 297127 654590, 297099 654585, 296880 654645, 296769 654812, 297222 655008, 297221 655012, 296050 657240, 294061 664001, 289930 677929, 289806 678116, 289573 678195, 289119 678155, 287783 677644, 286470 677078, 286118 676790, 286006 676572, 286047 676351, 291614 665676, 296050 657240, 296760 654825, 296769 654812, 283610 649118, 283621 649099, 283669 648887, 283563 648687, 283546 648675, 283535 648672, 283312 648720, 283182 648894, 283170 648928, 283610 649118, 282357 651236, 279237 660086, 275202 671626, 275066 671805, 274826 671870, 274367 671804, 273041 671220, 271737 670582, 271391 670272, 271288 670047, 271339 669828, 275774 662359, 282357 651236, 283170 648928, 282916 648818, 273074 643804, 273110 643681, 273014 643476, 273002 643467, 272990 643463, 272766 643500, 272682 643604, 273074 643804, 273050 643888, 271734 645892, 269064 652530, 263600 666005, 263459 666180, 263219 666235, 262769 666151, 261484 665510, 260225 664816, 259904 664498, 259812 664269, 259874 664053, 266458 653932, 271734 645892, 272629 643669, 272682 643604, 267523 640975, 260080 636573, 260118 636462, 260036 636265, 259825 636289, 259746 636375, 260080 636573, 260048 636667, 258756 638435, 254686 647195, 249558 658313, 249403 658478, 249156 658518, 248699 658405, 247410 657679, 246151 656906, 245827 656559, 245743 656323, 245814 656110, 250880 649206, 258756 638435, 259678 636449, 259746 636375, 252654 632181, 250111 630453, 250171 630300, 250094 630086, 250093 630085, 250086 630082, 249858 630096, 249748 630206, 250111 630453, 250092 630501, 248642 632298, 245331 638680, 238563 651610, 238405 651770, 238159 651801, 237719 651673, 236486 650902, 235290 650083, 234994 649730, 234924 649492, 235005 649282, 242555 639842, 248642 632298, 249705 630249, 249748 630206, 238365 622471, 238009 622195, 238020 622183, 238108 621985, 238052 621801, 237862 621805, 237703 621952, 237701 621956, 238009 622195, 236679 623695, 231494 632521, 225521 642738, 225353 642887, 225103 642904, 224661 642750, 223453 641906, 222274 641015, 221990 640643, 221928 640400, 222019 640194, 228009 633470, 236679 623695, 237701 621956, 228488 614809, 228550 614690, 228494 614469, 228487 614465, 228259 614457, 228149 614547, 228488 614809, 228450 614882, 226837 616519, 222723 622831, 214883 634740, 214710 634883, 214463 634890, 214035 634718, 212886 633830, 211776 632901, 211516 632519, 211469 632276, 211571 632075, 220268 623187, 226837 616519, 228092 614594, 228149 614547, 224715 611883, 217561 605576, 217621 605471, 217577 605263, 217367 605247, 217270 605320, 217561 605576, 217514 605660, 215919 607143, 209772 615657, 203105 624926, 202923 625058, 202673 625051, 202245 624852, 201121 623894, 200029 622890, 199781 622490, 199743 622244, 199853 622047, 206759 615659, 215919 607143, 217194 605377, 217270 605320, 211756 600458, 208546 597248, 208627 597124, 208595 596900, 208591 596894, 208576 596884, 208351 596855, 208233 596934, 208546 597248, 208509 597305, 206681 598835, 201985 604690, 193058 615731, 192872 615857, 192627 615842, 192222 615633, 191173 614649, 190169 613625, 189953 613226, 189931 612980, 190052 612791, 199564 604788, 206681 598835, 208171 596976, 208233 596934, 199542 588243, 198522 587087, 198523 587086, 198647 586907, 198624 586680, 198616 586668, 198603 586658, 198379 586619, 198205 586727, 198522 587087, 196563 588585, 189862 596191, 182278 604823, 182085 604938, 181839 604908, 181440 604678, 180430 603636, 179458 602548, 179257 602136, 179246 601889, 179375 601705, 186884 595989, 196563 588585, 198195 586733, 198205 586727, 190375 577846, 190484 577711, 190475 577484, 190465 577466, 190443 577448, 190220 577398, 190057 577486, 190375 577846, 190349 577879, 188282 579294, 183084 584629, 173184 594718, 172987 594825, 172745 594787, 172364 594543, 171417 593465, 170520 592353, 170342 591934, 170345 591689, 170484 591512, 180738 584459, 188282 579294, 190029 577501, 190057 577486, 188117 575285, 181452 566693, 181541 566589, 181540 566360, 181527 566333, 181504 566313, 181285 566254, 181159 566315, 181452 566693, 181400 566754, 179166 568145, 171924 574913, 163499 582812, 163295 582909, 163054 582858, 162682 582593, 161787 581471, 160937 580313, 160778 579884, 160792 579638, 160939 579468, 168957 574502, 179166 568145, 181089 566348, 181159 566315, 177529 561635, 174196 556730, 174293 556630, 174305 556404, 174296 556384, 174278 556366, 174062 556296, 173937 556349, 174196 556730, 174142 556786, 171963 557987, 166241 562827, 155440 571900, 155235 571989, 154996 571926, 154638 571643, 153798 570476, 153009 569280, 152871 568842, 152898 568598, 153053 568435, 163971 562390, 171963 557987, 173862 556380, 173937 556349, 167819 547346, 166332 544831, 166464 544702, 166485 544476, 166471 544439, 166452 544419, 166239 544340, 166076 544399, 166332 544831, 166308 544854, 163917 546041, 156116 552030, 146937 559103, 146726 559180, 146491 559107, 146234 558883, 145952 558509, 145368 557611, 144820 556688, 144608 556270, 144520 555940, 144559 555698, 144721 555542, 153142 551389, 163917 546041, 166036 544414, 166076 544399, 160051 534212, 160207 534079, 160240 533854, 160237 533845, 160232 533839, 160023 533747, 159816 533813, 159815 533813, 160051 534212, 160042 534219, 157898 535143, 151613 539498, 139990 547495, 139776 547563, 139544 547475, 139213 547156, 138480 545897, 137801 544611, 137705 544163, 137753 543920, 137922 543772, 149426 538791, 157898 535143, 159815 533813, 159025 532477, 153451 521537, 153562 521448, 153603 521223, 153596 521197, 153586 521184, 153382 521084, 153239 521122, 153451 521537, 153393 521584, 150990 522501, 142583 527748, 132747 533917, 132529 533972, 132302 533877, 131990 533548, 131326 532276, 130715 530975, 130640 530524, 130701 530286, 130878 530147, 139590 526853, 150990 522501, 153173 521139, 153239 521122, 151182 517084, 148260 510332, 148360 510264, 148408 510067, 148231 509968, 148113 509993, 148260 510332, 148182 510386, 146247 511004, 139339 514871, 126971 521734, 126751 521779, 126527 521667, 126223 521304, 125607 519959, 125044 518595, 124986 518124, 125057 517884, 125240 517753, 137244 513883, 146247 511004, 148019 510013, 148113 509993, 144321 501230, 142855 497157, 142974 497079, 143036 496858, 143033 496841, 143025 496828, 142832 496705, 142699 496725, 142855 497157, 142793 497198, 140351 497865, 131443 502294, 121056 507493, 120834 507526, 120616 507407, 120334 507042, 119793 505699, 119304 504328, 119272 503871, 119356 503638, 119544 503517, 128429 501122, 140351 497865, 142618 496738, 142699 496725, 138751 485761, 138756 485760, 138945 485654, 139007 485482, 138855 485377, 138640 485402, 138624 485409, 138751 485761, 136906 486163, 129817 489276, 116562 495045, 116339 495068, 116127 494935, 115862 494550, 115377 493154, 114949 491742, 114938 491276, 115032 491043, 115226 490930, 127267 488265, 136906 486163, 138624 485409, 138469 484977, 134634 471774, 134773 471701, 134856 471488, 134854 471467, 134848 471454, 134668 471313, 134503 471323, 134634 471774, 134581 471801, 132080 472222, 123230 475569, 111933 479887, 111707 479899, 111503 479759, 111259 479370, 110850 477978, 110586 476922, 110501 476453, 110512 476109, 110617 475885, 110817 475783, 119407 474358, 132080 472222, 134451 471326, 134503 471323, 133650 468387, 131850 460336, 131958 460289, 132043 460106, 131887 459972, 131769 459974, 131850 460336, 131759 460375, 129731 460616, 122782 462911, 108778 467496, 108554 467499, 108356 467346, 108126 466930, 107779 465494, 107560 464405, 107497 463926, 107522 463575, 107636 463351, 107841 463257, 119764 461799, 129731 460616, 131671 459975, 131769 459974, 129881 451528, 128977 445818, 129101 445768, 129206 445567, 129207 445545, 129198 445522, 129032 445365, 128904 445360, 127178 434464, 127151 434178, 127187 434177, 127394 434109, 127508 433914, 127509 433905, 127505 433894, 127347 433732, 127131 433714, 127108 433719, 127151 434178, 124846 434229, 117894 435797, 103619 438982, 103395 438963, 103214 438796, 103028 438375, 102821 436933, 102711 435850, 102696 435375, 102756 435035, 102892 434827, 103105 434754, 115108 434447, 124846 434229, 127108 433719, 125759 419445, 125953 419390, 126078 419199, 126082 419165, 126073 419132, 125922 418961, 125711 418933, 125553 417266, 125250 407635, 125375 407607, 125509 407423, 125513 407400, 125507 407374, 125365 407197, 125236 407174, 125010 400000, 125235 392832, 125364 392809, 125508 392631, 125515 392601, 125509 392569, 125375 392384, 125250 392355, 125553 382733, 125712 381055, 125923 381029, 126074 380858, 126081 380834, 126077 380807, 125952 380617, 125758 380563, 127107 366288, 124707 365751, 115326 365519, 103104 365247, 102892 365173, 102756 364965, 102676 364509, 102821 363066, 103026 361629, 103214 361204, 103395 361037, 103620 361017, 112094 362927, 124707 365751, 127152 365811, 127107 366288, 127129 366293, 127346 366274, 127504 366111, 127510 366093, 127509 366079, 127394 365882, 127189 365812, 127152 365811, 127178 365535, 128906 354625, 129034 354621, 129200 354467, 129205 354453, 129205 354440, 129100 354239, 128975 354191, 129881 348472, 131768 340033, 131669 340032, 129594 339351, 119997 338186, 107840 336744, 107636 336649, 107522 336425, 107489 335956, 107779 334506, 108124 333073, 108356 332654, 108554 332501, 108779 332502, 116910 335187, 129594 339351, 131762 339614, 131852 339654, 131768 340033, 131886 340034, 132047 339894, 131960 339702, 131852 339654, 133650 331613, 134508 328661, 134457 328658, 132296 327833, 125206 326657, 110818 324216, 110617 324114, 110512 323890, 110497 323429, 110850 322022, 111261 320627, 111503 320241, 111707 320101, 111932 320113, 123244 324376, 132296 327833, 134577 328211, 134630 328239, 134508 328661, 134672 328671, 134851 328532, 134852 328529, 134853 328522, 134769 328310, 134630 328239, 138470 315023, 138622 314600, 136783 313797, 126788 311593, 115225 309071, 115032 308957, 114939 308724, 114950 308258, 115377 306846, 115860 305453, 116127 305065, 116339 304932, 116563 304954, 124809 308573, 136783 313797, 138755 314232, 138622 314600, 138637 314606, 138852 314629, 139010 314519, 138947 314339, 138759 314233, 138755 314232, 142704 303262, 142623 303249, 140566 302220, 133293 300258, 119545 296483, 119356 296362, 119272 296129, 119304 295670, 119793 294301, 120336 292956, 120616 292593, 120834 292474, 121055 292508, 132196 298033, 140566 302220, 142786 302819, 142849 302860, 142704 303262, 142836 303284, 143029 303163, 143030 303162, 143031 303155, 142968 302936, 142849 302860, 144322 298770, 148109 290017, 148015 289997, 146115 288940, 136115 285723, 125239 282248, 125057 282116, 124986 281876, 125044 281408, 125607 280041, 126221 278698, 126527 278333, 126751 278221, 126972 278265, 135182 282859, 146115 288940, 148185 289606, 148263 289661, 148109 290017, 148227 290041, 148412 289936, 148362 289731, 148263 289661, 151182 282915, 153243 278870, 153178 278852, 151161 277587, 144139 274931, 130879 269851, 130701 269714, 130640 269475, 130713 269027, 131326 267724, 131990 266453, 132302 266123, 132529 266027, 132746 266083, 143297 272657, 151161 277587, 153386 278429, 153445 278475, 153243 278870, 153386 278908, 153590 278809, 153593 278806, 153598 278786, 153557 278562, 153445 278475, 159025 267523, 159810 266195, 157779 264795, 148478 260773, 137921 256228, 137753 256080, 137705 255836, 137800 255391, 138480 254103, 139212 252845, 139544 252525, 139776 252438, 139991 252504, 147748 257878, 157779 264795, 160046 265775, 160054 265782, 159810 266195, 159811 266196, 160019 266259, 160228 266167, 160237 266156, 160242 266141, 160210 265916, 160054 265782, 166080 255593, 166041 255578, 164061 254053, 157377 250756, 144722 244457, 144559 244302, 144520 244060, 144638 243618, 145368 242389, 146148 241191, 146491 240893, 146726 240820, 146936 240898, 156813 248471, 164061 254053, 166301 255158, 166325 255180, 166080 255593, 166243 255654, 166455 255575, 166470 255559, 166480 255533, 166459 255306, 166325 255180, 167819 252653, 173931 243660, 173855 243629, 171839 241932, 163168 237138, 153052 231566, 152898 231402, 152871 231158, 153008 230722, 153798 229524, 154637 228358, 154996 228074, 155235 228011, 155441 228099, 162643 234191, 171839 241932, 174147 243208, 174200 243264, 173931 243660, 174057 243711, 174274 243640, 174297 243618, 174308 243592, 174296 243365, 174200 243264, 177529 238365, 181163 233680, 181093 233646, 179276 231943, 172907 227998, 160940 220531, 160792 220361, 160778 220116, 160937 219687, 161787 218528, 162681 217408, 163054 217142, 163295 217091, 163498 217188, 172622 225705, 179276 231943, 181393 233254, 181446 233315, 181163 233680, 181288 233742, 181507 233684, 181522 233670, 181534 233647, 181535 233419, 181446 233315, 188117 224715, 190050 222523, 190021 222508, 188153 220600, 180047 215032, 170483 208489, 170345 208311, 170342 208066, 170520 207645, 171417 206535, 172361 205459, 172745 205213, 172987 205175, 173185 205281, 179737 212006, 188153 220600, 190355 222113, 190381 222147, 190050 222523, 190214 222609, 190436 222560, 190465 222537, 190479 222511, 190489 222283, 190381 222147, 198209 213268, 198200 213262, 196662 211512, 190574 206877, 179376 198294, 179245 198112, 179257 197864, 179463 197445, 180430 196364, 181439 195323, 181839 195091, 182085 195062, 182278 195177, 190571 204578, 196662 211512, 198514 212922, 198209 213268, 198383 213376, 198607 213338, 198612 213334, 198618 213325, 198642 213098, 198515 212922, 198514 212922, 199542 211756, 208223 203075, 208161 203034, 206545 201031, 198957 194658, 190051 187210, 189931 187019, 189953 186774, 190168 186376, 191173 185351, 192223 184367, 192627 184158, 192872 184143, 193059 184268, 198884 191535, 206545 201031, 208517 202687, 208554 202744, 208223 203075, 208342 203154, 208569 203123, 208591 203108, 208601 203094, 208634 202869, 208554 202744, 211757 199541, 217276 194676, 217200 194618, 216010 192963, 210203 187593, 199854 177952, 199743 177756, 199781 177509, 200028 177111, 201121 176106, 202243 175150, 202673 174949, 202923 174941, 203104 175075, 210495 185296, 216010 192963, 217506 194347, 217554 194430, 217276 194676, 217371 194749, 217573 194735, 217614 194534, 217554 194430, 224716 188117, 228136 185464, 228077 185417, 226689 183302, 219725 176197, 211570 167926, 211469 167724, 211516 167481, 211711 167196, 212052 166868, 212886 166170, 214036 165282, 214463 165110, 214710 165117, 214884 165259, 219907 172969, 226689 183302, 228460 185109, 228498 185183, 228136 185464, 228247 185553, 228476 185543, 228494 185533, 228502 185524, 228559 185302, 228498 185183, 237707 178040, 236754 176411, 231603 170629, 222020 159805, 221928 159600, 221990 159357, 222274 158986, 223453 158094, 224660 157251, 225103 157096, 225353 157113, 225520 157263, 231776 167891, 236754 176411, 238002 177811, 237707 178040, 237709 178044, 237867 178190, 238051 178195, 238103 178019, 238013 177823, 238002 177811, 238365 177529, 249738 169801, 249694 169758, 248522 167512, 242603 160128, 235005 150718, 234924 150507, 234994 150270, 235291 149916, 236486 149098, 237721 148326, 238159 148199, 238405 148230, 238564 148389, 242573 156118, 248522 167512, 250106 169489, 250125 169538, 249738 169801, 249849 169910, 250077 169924, 250097 169916, 250106 169907, 250185 169691, 250125 169538, 252654 167819, 259754 163620, 259687 163546, 258826 161681, 254503 155790, 245815 143889, 245743 143677, 245827 143441, 246149 143096, 247411 142320, 248698 141596, 249156 141482, 249404 141522, 249557 141688, 254626 152577, 258826 161681, 260042 163337, 260074 163431, 259754 163620, 259832 163707, 260034 163731, 260111 163542, 260074 163431, 267523 159025, 272674 156400, 272621 156336, 271652 153940, 266530 146086, 259873 135947, 259813 135731, 259904 135502, 260226 135183, 261484 134489, 262773 133849, 263219 133765, 263459 133820, 263601 133994, 266875 142132, 271652 153940, 273063 156104, 273087 156190, 272674 156400, 272759 156503, 272983 156541, 273004 156535, 273024 156519, 273122 156312, 273087 156190, 282916 151181, 283179 151067, 282417 148889, 278779 142763, 271340 130171, 271288 129953, 271391 129728, 271736 129419, 273041 128780, 274364 128196, 274826 128130, 275066 128195, 275202 128375, 279202 139697, 282417 148889, 283602 150884, 283179 151067, 283191 151101, 283320 151276, 283541 151325, 283549 151323, 283559 151316, 283665 151115, 283614 150904, 283602 150884, 296761 145190, 296753 145178, 295994 142611, 291711 134417, 286046 123649, 286006 123428, 286118 123209, 286473 122920, 287783 122356, 289117 121845, 289573 121805, 289806 121884, 289931 122070, 292412 130503, 295994 142611, 297233 144982, 297234 144986, 296761 145190, 296874 145358, 297093 145418, 297126 145412, 297156 145392, 297273 145196, 297234 144986, 298770 144321, 307837 141057, 307792 140980, 307198 138557, 304205 132183, 298047 118993, 298016 118771, 298138 118558, 298506 118286, 299851 117780, 301212 117332, 301672 117313, 301901 117402, 302017 117594, 304917 129257, 307198 138557, 308258 140815, 308270 140901, 307837 141057, 307902 141167, 308117 141237, 308141 141234, 308164 141220, 308289 141030, 308270 140901, 315024 138469, 321910 136469, 321869 136393, 321368 133799, 317890 125229, 313274 113937, 313257 113712, 313390 113505, 313772 113251, 315138 112814, 316525 112431, 316980 112435, 317204 112536, 317312 112734, 318961 121340, 321368 133799, 322361 136246, 322368 136336, 321910 136469, 321972 136584, 322185 136664, 322219 136661, 322245 136647, 322379 136462, 322368 136336, 331614 133650, 333259 133282, 333257 133278, 332896 130791, 330530 124151, 325686 110452, 325675 110229, 325818 110029, 326209 109794, 327591 109421, 328637 109186, 329099 109114, 329439 109134, 329658 109245, 329755 109447, 331526 121355, 332896 130791, 333740 133160, 333741 133175, 333259 133282, 333349 133475, 333557 133566, 333582 133565, 333607 133553, 333748 133377, 333741 133175, 347734 130046, 347503 127600, 344824 118604, 341306 106897, 341311 106671, 341466 106477, 341876 106260, 343293 105955, 344366 105767, 344840 105716, 345185 105750, 345400 105872, 345488 106078, 346291 114729, 347503 127600, 348201 129942, 347734 130046, 347736 130069, 347821 130268, 348025 130368, 348044 130368, 348056 130363, 348208 130193, 348211 129976, 348201 129942, 348472 129881, 359381 128153, 359351 128069, 359237 125678, 357496 118736, 353996 104623, 354008 104400, 354169 104214, 354580 104019, 355998 103779, 357421 103600, 357872 103671, 358081 103802, 358158 104013, 358780 116071, 359237 125678, 359820 128002, 359816 128084, 359381 128153, 359424 128274, 359623 128384, 359636 128385, 359649 128380, 359809 128218, 359816 128084, 365536 127178, 374143 126365, 374114 126272, 374121 124079, 372264 114602, 369878 102593, 369905 102368, 370082 102191, 370409 102058, 370885 101971, 371988 101844, 373467 101729, 373927 101818, 374133 101959, 374202 102174, 374161 110738, 374121 124079, 374542 126230, 374531 126328, 374143 126365, 374179 126477, 374361 126589, 374518 126445, 374531 126328, 382734 125553, 385807 125456, 385794 125406, 385911 123101, 384838 115989, 382712 101552, 382747 101331, 382928 101161, 383359 101007, 384809 100904, 386259 100864, 386705 100977, 386901 101128, 386959 101345, 386401 113422, 385911 123101, 386255 125384, 386246 125443, 385807 125456, 385848 125617, 386036 125745, 386044 125743, 386221 125598, 386246 125443, 400000 125010, 400451 125024, 400449 125042, 400494 125253, 400647 125369, 400798 125253, 400841 125042, 400840 125036, 400451 125024, 400645 123031, 399653 112841, 398479 101064, 398526 100845, 398719 100685, 399055 100584, 399537 100543, 400642 100522, 402121 100550), (400683 674518, 401566 674424, 400639 674448, 399705 674415, 400683 674518), (411964 674186, 412596 674222, 412700 674223, 413216 674142, 411964 674186), (385923 674150, 386021 674161, 386546 674132, 385306 674053, 385923 674150), (374375 673307, 374501 673311, 375300 673310, 374174 673229, 373423 673119, 374375 673307), (426913 673119, 425968 673179, 426948 673183, 427848 673003, 426913 673119), (438602 671730, 439015 671711, 439143 671700, 439816 671528, 438602 671730), (359520 671499, 359615 671519, 360134 671544, 358926 671349, 359520 671499), (348057 669539, 348198 669558, 348984 669638, 348060 669481, 347134 669268, 348057 669539), (453171 669240, 452237 669391, 453193 669296, 453289 669272, 454089 669036, 453171 669240), (464477 666755, 465078 666666, 465200 666643, 465668 666477, 464477 666755), (333467 666306, 333590 666344, 334294 666450, 333088 666173, 333467 666306), (322250 663254, 322383 663285, 323155 663441, 322252 663196, 321354 662898, 322250 663254), (478933 662843, 478020 663084, 478947 662898, 479062 662857, 479823 662553, 478933 662843), (489947 659275, 490539 659128, 490654 659094, 491118 658879, 489947 659275), (308037 658625, 308165 658678, 308854 658851, 307678 658459, 308037 658625), (297180 654514, 297294 654553, 297847 654720, 296527 654178, 297180 654514), (503960 653989, 503076 654315, 503975 654045, 504092 653989, 504816 653616, 503960 653989), (514755 649310, 515163 649167, 515251 649132, 515873 648766, 514755 649310), (283468 648526, 283592 648593, 284259 648827, 283128 648326, 283468 648526), (273077 643401, 273162 643439, 273914 643742, 273073 643331, 272254 642866, 273077 643401), (528020 642757, 527168 643166, 528034 642818, 528141 642754, 528832 642304, 528020 642757), (538301 637063, 538714 636876, 538775 636845, 539366 636409, 538301 637063), (259984 636105, 260087 636174, 260737 636470, 259649 635858, 259984 636105), (250162 630018, 250240 630062, 250971 630438, 250170 629946, 249394 629397, 250162 630018), (550875 629262, 550061 629753, 550909 629316, 550990 629256, 551647 628725, 550875 629262), (560206 622832, 560811 622488, 561205 622128, 560206 622832), (238150 621724, 238732 622056, 237724 621354, 238150 621724), (228540 614385, 228623 614444, 229331 614905, 228582 614337, 227863 613714, 228540 614385), (572392 613554, 571630 614122, 572453 613588, 572524 613523, 573108 612944, 572392 613554), (580945 606363, 581282 606123, 581379 606047, 581861 605520, 580945 606363), (217583 605123, 217634 605174, 218227 605599, 217280 604792, 217583 605123), (208632 596804, 208726 596885, 209366 597403, 208684 596770, 208033 596086, 208632 596804), (592198 595908, 591504 596543, 592266 595926, 592328 595858, 592848 595236, 592198 595908), (600050 587894, 600353 587626, 600455 587528, 600883 586968, 600050 587894), (198615 586523, 198674 586594, 199216 587074, 198355 586182, 198615 586523), (190522 577393, 190608 577484, 191188 578059, 190568 577360, 189984 576618, 190522 577393), (610225 576419, 609593 577121, 610279 576443, 610356 576340, 610809 575689, 610225 576419), (617282 567669, 617549 567381, 617637 567279, 618016 566674, 617282 567669), (181533 566183, 181600 566282, 182082 566800, 181317 565838, 181533 566183), (174363 556321, 174440 556420, 174964 557050, 174413 556293, 173901 555498, 174363 556321), (626290 555275, 625727 556037, 626344 555295, 626415 555178, 626802 554491, 626290 555275), (632472 545884, 632713 545569, 632784 545468, 633104 544827, 632472 545884), (166496 544297, 166556 544407, 166983 544964, 166315 543933, 166496 544297), (160321 533804, 160375 533890, 160846 534578, 160368 533768, 159936 532927, 160321 533804), (640241 532672, 639752 533487, 640297 532691, 640357 532566, 640676 531842, 640241 532672), (645477 522753, 645702 522397, 645750 522312, 646008 521632, 645477 522753), (153643 521069, 153692 521183, 154065 521774, 153493 520673, 153643 521069), (148515 510047, 148964 510848, 148564 509994, 148216 509114, 148515 510047), (651876 508997, 651539 509675, 652011 508830, 652055 508709, 652301 507948, 651876 508997), (656188 498486, 656382 498104, 656423 498012, 656610 497309, 656188 498486), (143092 496718, 143124 496821, 143477 497525, 143158 496767, 142930 496107, 143092 496718), (139124 485467, 139491 486291, 139182 485417, 138924 484519, 139124 485467), (661213 484201, 660894 485080, 661288 484192, 661477 483312, 661213 484201), (664534 473170, 664693 472759, 664724 472667, 664840 471952, 664534 473170), (134919 471329, 134941 471432, 135202 472107, 134851 470903, 134919 471329), (132149 460080, 132185 460207, 132435 460966, 132209 460057, 132036 459122, 132149 460080), (668029 459004, 667833 459719, 668134 458804, 668146 458725, 668247 457878, 668029 459004), (670361 447255, 670469 446858, 670498 446735, 670543 446041, 670361 447255), (129280 445399, 129291 445497, 129483 446197, 129253 444973, 129280 445399), (127601 433888, 127627 434031, 127795 434803, 127628 433664, 127575 432929, 127601 433888), (672473 432836, 672349 433566, 672552 432627, 672558 432529, 672583 431695, 672473 432836), (673657 420911, 673724 420512, 673740 420388, 673724 419686, 673657 420911), (126168 419016, 126170 419142, 126289 419847, 126178 418610, 126168 419016), (125603 407404, 125614 407542, 125706 408324, 125660 407389, 125667 406442, 125603 407404), (674371 406339, 674318 407097, 674426 406158, 674422 406034, 674370 405217, 674371 406339), (674394 394384, 674424 393966, 674427 393848, 674342 393146, 674394 394384), (125615 392458, 125604 392594, 125653 393304, 125662 392065, 125615 392458), (126170 380858, 126168 380982, 126185 381775, 126237 380644, 126326 379902, 126170 380858), (673683 379615, 673720 380557, 673741 379615, 673725 379490, 673592 378684, 673683 379615), (672569 367909, 672559 367471, 672552 367368, 672397 366671, 672569 367909), (127627 365971, 127602 366106, 127590 366611, 127755 365390, 127627 365971), (129291 354503, 129281 354595, 129239 355196, 129484 353786, 129291 354503), (670436 353262, 670561 354198, 670499 353266, 670471 353145, 670256 352350, 670436 353262), (668218 341916, 668141 341217, 667973 340715, 668218 341916), (132184 339798, 132150 339917, 132069 340626, 132314 339409, 132184 339798), (134939 328571, 134920 328664, 134788 329475, 135008 328561, 135290 327653, 134939 328571), (664664 327355, 664879 328282, 664727 327337, 664695 327244, 664392 326455, 664664 327355), (661394 316309, 661265 315754, 660989 315144, 661394 316309), (139126 314527, 139018 315049, 139413 313891, 139126 314527), (143123 303181, 143093 303277, 142873 304093, 143183 303205, 143553 302329, 143123 303181), (656373 302037, 656680 302939, 656425 301991, 656385 301902, 656014 301168, 656373 302037), (652176 291675, 652054 291286, 652012 291170, 651659 290549, 652176 291675), (148501 290001, 148293 290657, 148768 289506, 148501 290001), (153692 278816, 153645 278928, 153350 279697, 153740 278853, 154189 278022, 153692 278816), (645713 277747, 646101 278604, 645742 277666, 645274 276921, 645713 277747), (640516 267800, 640356 267432, 640296 267307, 639893 266725, 640516 267800), (160375 266110, 160323 266191, 160036 266852, 160620 265755, 160375 266110), (166559 255589, 166497 255703, 166129 256431, 166712 255441, 167127 254841, 166559 255589), (632748 254581, 633221 255398, 632784 254531, 632714 254432, 632234 253800, 632748 254581), (626607 245167, 626415 244822, 626343 244705, 625886 244160, 626607 245167), (174441 243579, 174366 243675, 174023 244291, 174700 243270, 174441 243579), (181603 233715, 181534 233817, 181096 234509, 181646 233751, 182244 233019, 181603 233715), (617603 232770, 618154 233539, 617636 232720, 617550 232619, 617016 232040, 617603 232770), (610693 224149, 610357 223661, 610280 223559, 609919 223204, 610693 224149), (190610 222514, 190521 222608, 190124 223184, 190900 222229, 190610 222514), (198678 213401, 198615 213477, 198106 214138, 198728 213433, 199395 212762, 198678 213401), (600417 212515, 601041 213232, 600455 212472, 600351 212372, 599762 211846, 600417 212515), (592602 204472, 592332 204146, 592264 204071, 591698 203618, 592602 204472), (208728 203113, 208635 203194, 208313 203581, 209207 202729, 208728 203113), (217640 194821, 217583 194878, 217003 195504, 217841 194722, 218421 194257, 217640 194821), (581347 194009, 582036 194664, 581376 193950, 581278 193874, 580629 193406, 581347 194009), (572841 186793, 572529 186482, 572455 186414, 571843 186019, 572841 186793), (228626 185554, 228540 185615, 228174 185980, 229158 185210, 228626 185554), (238097 178306, 237431 178906, 238166 178343, 238941 177819, 238097 178306), (560967 177707, 561536 178166, 560824 177525, 560747 177477, 560036 177066, 560967 177707), (551335 171024, 550992 170745, 550910 170684, 550270 170357, 551335 171024), (250247 169934, 250160 169984, 249595 170444, 250393 169901, 250864 169614, 250247 169934), (260087 163826, 259981 163897, 259335 164370, 260130 163874, 260966 163421, 260087 163826), (538763 163222, 539561 163729, 538787 163163, 538712 163125, 537938 162767, 538763 163222), (528657 157585, 528144 157248, 528041 157186, 527577 157000, 528657 157585), (273166 156559, 273079 156598, 272469 156998, 273554 156405, 273166 156559), (283593 151406, 283467 151474, 282784 151873, 283623 151456, 284498 151084, 283593 151406), (515425 151008, 516083 151354, 515252 150869, 515162 150833, 514376 150553, 515425 151008), (504456 146200, 504094 146012, 503977 145956, 503307 145757, 504456 146200), (297296 145446, 297179 145486, 296542 145818, 297691 145329, 297296 145446), (308165 141321, 308038 141374, 307322 141703, 308198 141370, 309099 141084, 308165 141321), (490637 140959, 491518 141301, 490654 140906, 490540 140873, 489746 140670, 490637 140959), (479437 137295, 479063 137144, 478949 137103, 478258 136966, 479437 137295), (322384 136713, 322247 136746, 321590 137012, 322781 136635, 322384 136713), (333587 133656, 333468 133693, 332720 133954, 333622 133707, 334544 133510, 333587 133656), (465368 133452, 466093 133668, 465206 133360, 465078 133336, 464272 133211, 465368 133452), (453692 130850, 453288 130729, 453197 130706, 452478 130635, 453692 130850), (348195 130442, 348057 130461, 347574 130606, 348788 130386, 348195 130442), (359597 128481, 358740 128697, 359659 128536, 360595 128430, 359597 128481), (439119 128356, 440049 128527, 439140 128299, 439018 128289, 438196 128246, 439119 128356), (426210 126823, 427460 126921, 426899 126819, 426210 126823), (374370 126692, 373874 126795, 375106 126694, 374495 126688, 374370 126692), (385118 125975, 386056 125902, 387007 125890, 386010 125837, 385118 125975), (412600 125778, 411756 125821, 412696 125841, 413644 125922, 412696 125777, 412600 125778), (400160 125539, 401369 125559, 400672 125482, 400160 125539)), ((673461 447259, 683344 447956, 694928 448746, 695135 448830, 695263 449040, 695321 449489, 695113 450910, 694842 452321, 694636 452729, 694447 452886, 694223 452894, 685239 450439, 673461 447259, 670891 447078, 670828 447053, 670901 446591, 670975 446588, 673461 447259)), ((128904 445360, 128977 445818, 128900 445849, 126322 446030, 117269 448474, 105570 451672, 105345 451662, 105155 451505, 104948 451093, 104681 449688, 104470 448265, 104528 447816, 104655 447605, 104864 447523, 113615 446924, 126322 446030, 128816 445357, 128904 445360)), ((675302 432972, 682946 433143, 697047 433503, 697262 433575, 697397 433783, 697478 434241, 697329 435684, 697125 437123, 696939 437543, 696757 437711, 696533 437731, 684298 435000, 675302 432972, 672967 432920, 673011 432459, 673021 432458, 675302 432972)), ((698467 420091, 698613 420288, 698715 420727, 698644 422158, 698512 423583, 698346 424009, 698173 424182, 697950 424213, 688697 422623, 676833 420617, 686667 420357, 698251 420030, 698467 420091)), ((110448 419045, 123071 419378, 113953 420919, 101962 422980, 101738 422949, 101565 422775, 101399 422350, 101268 420928, 101196 419493, 101297 419055, 101444 418857, 101660 418797, 110448 419045)), ((676833 420617, 674166 420687, 674125 420676, 674172 420176, 674204 420172, 676833 420617)), ((125711 418933, 125759 419445, 125745 419449, 123071 419378, 125707 418933, 125711 418933)), ((113126 406765, 122672 407470, 115691 408346, 101241 410127, 101021 410088, 100856 409905, 100712 409477, 100644 408036, 100639 406609, 100763 406160, 100919 405970, 101138 405918, 113126 406765)), ((699112 404728, 699268 404918, 699392 405363, 699384 406795, 699318 408236, 699175 408662, 699010 408845, 698789 408885, 686401 407358, 677348 406223, 684822 405670, 698892 404678, 699112 404728)), ((125236 407174, 125250 407635, 125162 407654, 122672 407470, 125151 407159, 125236 407174)), ((677348 406223, 674868 406406, 674789 406388, 674804 405926, 674879 405913, 677348 406223)), ((699010 391155, 699175 391338, 699320 391769, 699384 393205, 699391 394642, 699268 395082, 699112 395272, 698893 395323, 689486 394628, 677491 393771, 687329 392552, 698788 391114, 699010 391155)), ((677491 393771, 674880 394094, 674804 394080, 674789 393602, 674867 393583, 677491 393771)), ((109936 390962, 122529 392523, 113304 393182, 101137 394083, 100919 394029, 100763 393839, 100640 393396, 100644 391964, 100711 390527, 100856 390095, 101021 389912, 101242 389871, 109936 390962)), ((125250 392355, 125235 392832, 125150 392848, 122529 392523, 125164 392335, 125250 392355)), ((113833 379017, 123231 380630, 116185 380828, 101661 381202, 101444 381142, 101297 380945, 101195 380503, 101268 379072, 101400 377646, 101565 377225, 101738 377051, 101961 377021, 113833 379017)), ((125758 380563, 125712 381055, 125709 381055, 123231 380630, 125744 380559, 125758 380563)), ((698173 375818, 698346 375991, 698511 376413, 698644 377841, 698716 379268, 698613 379711, 698467 379909, 698250 379969, 685809 379648, 676670 379392, 684012 378131, 697951 375788, 698173 375818)), ((676670 379392, 674202 379816, 674171 379812, 674126 379333, 674167 379322, 676670 379392)), ((696757 362289, 696939 362457, 697079 362773, 697177 363238, 697329 364316, 697440 365401, 697457 365877, 697397 366217, 697262 366424, 697048 366498, 687613 366709, 675426 367009, 673023 367547, 673012 367546, 672967 367070, 675426 367009, 685323 364795, 696532 362268, 696757 362289)), ((117229 351464, 126509 353997, 128898 354161, 128975 354191, 128906 354625, 128819 354628, 126509 353997, 119368 353508, 104865 352476, 104655 352395, 104528 352184, 104469 351731, 104681 350312, 104950 348904, 105155 348495, 105345 348338, 105569 348329, 117229 351464)), ((694447 347114, 694636 347271, 694840 347673, 695113 349090, 695322 350507, 695263 350960, 695135 351170, 694927 351253, 682527 352136, 673265 352771, 670972 353397, 670899 353394, 670829 352957, 670893 352933, 673265 352771, 680510 350791, 694224 347106, 694447 347114))) \ No newline at end of file diff --git a/stress_benchmark/resources/041.settings b/stress_benchmark/resources/041.settings index 68d1e291d4..07ee1c2630 100644 --- a/stress_benchmark/resources/041.settings +++ b/stress_benchmark/resources/041.settings @@ -158,6 +158,7 @@ machine_settings=0 raft_base_extruder_nr=0 z_seam_y=110 wall_overhang_angle=90 +seam_overhang_angle=30 draft_shield_height=10 _plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 travel_retract_before_outer_wall=False @@ -536,7 +537,6 @@ skirt_brim_minimal_length=450 cooling=0 brim_replaces_support=False wall_x_extruder_nr=-1 -support_interface_skip_height=0.1 machine_nozzle_head_distance=3 support_bottom_pattern=triangles raft_base_wall_count=1 diff --git a/stress_benchmark/resources/041.wkt b/stress_benchmark/resources/041.wkt index d4f4854cea..8f26fb1c9e 100644 --- a/stress_benchmark/resources/041.wkt +++ b/stress_benchmark/resources/041.wkt @@ -1 +1 @@ -MULTIPOLYGON (((79120 127292, 79224 127278, 79336 127282, 79528 127350, 79629 127367, 79848 127505, 79926 127530, 80372 128226, 80774 129260, 81174 130451, 81674 131726, 82375 134464, 82461 135843, 82643 137089, 82750 138193, 82963 139968, 82948 139942, 82875 140325, 82735 140623, 82542 140828, 82288 140924, 82007 140896, 81894 140826, 81527 141166, 81202 140623, 80700 139600, 80189 137690, 79790 136498, 79407 135193, 78360 133995, 78752 132443, 78502 131105, 78321 129860, 78048 128411, 78254 128446, 78320 128150, 78513 128186, 78618 128185, 78431 127668, 78474 127632, 78535 127473, 78606 127434, 78714 127343, 78948 127275)), ((83389 130103, 83478 130248, 83796 130463, 83818 130707, 83859 130807, 83802 130835, 83755 130991, 83579 130819, 83122 130741, 82774 130701, 82671 130642, 82545 130613, 82433 130446, 82727 130221, 82865 130151, 83132 130083)), ((97619 124430, 98131 124848, 98376 125088, 98389 125104, 98638 125442, 98677 125472, 99409 126405, 99851 126891, 100473 127465, 100956 127793, 101443 128332, 101908 128704, 102198 128999, 102374 129230, 102698 129762, 101340 129409, 100722 129165, 99040 128367, 98417 128039, 98633 128311, 98604 128664, 98812 129096, 98889 129461, 98125 129283, 97370 129064, 97039 128952, 96335 128767, 95896 128602, 95980 128816, 95851 129152, 95866 129587, 95806 129789, 94999 129543, 94079 129361, 93524 129193, 92967 128442, 93413 129252, 93528 129618, 93478 129881, 93363 130326, 93349 130457, 93185 130409, 92283 130197, 92041 130101, 91887 130021, 91764 129778, 91383 129164, 91447 128284, 91533 127807, 91656 126941, 92086 127342, 92888 128306, 93106 126673, 93167 126035, 93235 125848, 93363 125914, 93716 126150, 94228 126612, 94598 126917, 94767 126444, 94944 125904, 95015 125734, 95281 125207, 95415 125059, 95524 125132, 96098 125568, 96331 125795, 96930 126426, 97122 126605, 96989 125178, 97021 124617, 97215 124124)), ((109692 100044, 111513 100230, 111714 100266, 112574 100596, 113175 100782, 114293 101234, 114709 101453, 115529 101710, 117418 102497, 117666 102669, 119616 104773, 119906 105092, 120184 105783, 120705 106824, 121535 110116, 120882 112825, 120085 114761, 119981 114962, 119891 115057, 119121 116010, 118313 116547, 117558 117151, 116926 117724, 116574 118089, 116074 118654, 115781 119026, 114898 120328, 114317 121059, 113580 121436, 113266 121566, 112687 121534, 111361 121616, 109756 121473, 109291 121419, 109129 121461, 108708 121532, 108678 121795, 108695 121805, 108838 122281, 109063 122896, 109021 123430, 108902 124017, 108838 124389, 108252 125185, 107971 125546, 106584 126460, 105446 126917, 105091 127026, 104801 127052, 103923 127221, 103117 127242, 102608 127187, 101709 127169, 100463 126777, 100365 126737, 100293 126673, 99946 126448, 98677 125472, 98389 125104, 97962 124526, 97090 123478, 96939 122871, 96805 120972, 96909 120677, 97385 120348, 97593 120219, 97964 120052, 98237 119914, 98469 119273, 99200 118646, 99529 118345, 99870 118004, 101017 117704, 101853 117663, 103575 117979, 105120 119682, 106843 121200, 107770 121634, 107994 121756, 108533 121953, 108677 121806, 108678 121795, 108117 121464, 108006 121416, 107598 121285, 107578 121204, 107130 120585, 106939 120243, 106337 119096, 104614 118313, 103749 117422, 102433 115545, 102232 115280, 101095 113080, 100940 112750, 100742 111942, 100367 110675, 100368 109151, 100549 108698, 100648 108346, 100798 107954, 101111 107003, 101336 106482, 101674 105779, 102104 105069, 102358 104725, 102537 104510, 102716 104433, 103093 104221, 103554 104171, 103722 104183, 103781 103995, 103971 103631, 104079 103259, 104087 103198, 104323 102842, 104557 102657, 104690 102483, 104846 102230, 105146 101931, 105333 101609, 105631 101213, 105746 101100, 105881 101004, 106262 100611, 106771 100236, 106882 100187, 107164 100165, 108405 99980)), ((102856 116674, 103420 117404, 104003 118058, 104085 118073, 104614 118313, 105063 118776, 105559 119223, 105748 119349, 106140 119634, 106367 119890, 106467 120069, 105387 119570, 105299 119560, 104795 118946, 104003 118058, 103575 117979, 103429 117818, 102979 117279, 102847 117046, 102474 116516, 102256 115983)), ((111979 98048, 112640 98165, 114894 98757, 116554 100122, 117825 101324, 118551 102149, 120011 103750, 120517 104181, 120948 104476, 121480 104934, 121869 105433, 122266 105911, 122398 106118, 122538 106978, 122565 107526, 122448 108026, 122397 108330, 122312 108422, 122071 108594, 121829 108632, 121738 108717, 121614 108507, 121475 108242, 121452 107882, 121370 107371, 120931 106491, 120759 106056, 120433 105672, 119906 105092, 119837 104921, 119625 104354, 118732 103524, 118601 103249, 118490 103049, 117962 102723, 117418 102497, 116041 101538, 114943 100723, 113715 100386, 112653 100196, 111239 99730, 110995 99706, 110863 99705, 110703 99664, 109853 99360, 109531 99105, 109226 98937, 109504 98678, 109811 98368, 111163 97983)), ((113590 77519, 114718 77643, 114776 77694, 115017 77881, 114957 77842, 115114 77973, 115623 78315, 116242 78690, 116925 79083, 118875 80173, 119285 80412, 119755 81105, 120657 82492, 120971 82992, 121375 83720, 121636 84159, 121799 84325, 122004 84513, 122038 84567, 122230 84788, 122444 84933, 123436 85194, 123585 85190, 124020 85242, 123609 84818, 123120 84253, 123306 84064, 123458 83893, 124225 83636, 125320 84424, 126745 85831, 126872 85938, 128212 87377, 129072 88321, 129622 88941, 131671 91334, 132012 91715, 132077 91784, 131707 91847, 131407 91881, 131591 92747, 131648 93329, 131745 93717, 132323 95142, 132510 96186, 132564 96338, 132560 96544, 132458 97262, 132155 97896, 131934 98397, 131222 99404, 130709 99737, 130492 99776, 130356 99760, 129990 99775, 129687 99931, 129494 100079, 128874 100439, 128527 100729, 128267 100932, 127519 101262, 127061 101259, 126943 101275, 126370 101390, 125467 102144, 125284 102273, 124152 103137, 123055 103364, 122879 103414, 121993 103257, 121918 103005, 121768 102255, 121641 102189, 121452 101995, 120579 101023, 120326 100233, 120093 99955, 119948 99760, 118919 98580, 118248 97980, 118271 97689, 118384 97046, 118492 96921, 119378 96178, 121005 95573, 121673 95365, 122491 95094, 123023 94650, 123403 94379, 123492 94331, 124432 94269, 122932 92966, 121228 91461, 119935 90290, 119642 90012, 119392 89740, 118531 88850, 118250 88240, 118557 88108, 119202 88404, 119569 88592, 119238 88124, 119181 88078, 118640 87535, 118314 87364, 118281 87360, 117934 87236, 117836 87181, 116956 86534, 115714 86010, 115604 86006, 115423 85918, 114951 85293, 114733 84976, 114872 84580, 114917 83952, 115035 83619, 114940 83614, 114752 83589, 114563 83550, 114375 83497, 114190 83431, 114011 83354, 113836 83265, 113670 83166, 113372 82941, 113244 82816, 113131 82685, 113036 82548, 112961 82407, 112910 82262, 112877 82113, 112865 81964, 112878 81778, 112900 81665, 112943 81518, 113010 81365, 113082 81237, 113177 81101, 113282 80980, 113403 80863, 113537 80759, 113682 80666, 113838 80589, 114005 80529, 114180 80488, 114365 80465, 114555 80464, 114750 80480, 114947 80513, 115145 80561, 115340 80622, 115709 80778, 115761 81235, 115681 81854, 115528 82227, 115383 82780, 115179 83214, 115035 83619, 115125 83623, 115306 83617, 115479 83593, 115646 83553, 115804 83497, 115953 83428, 116093 83344, 116224 83248, 116340 83143, 116451 83025, 116564 82877, 116704 82628, 116761 82484, 116800 82338, 116822 82190, 116823 82041, 116804 81894, 116760 81749, 116693 81607, 116604 81470, 116495 81339, 116367 81213, 116224 81093, 115997 80937, 115719 80782, 115709 80778, 115551 79387, 115495 79243, 115588 79126, 115470 78944, 115019 78738, 114164 78461, 113464 78431, 113117 78185, 112795 78000, 112885 77893, 112859 77727, 113247 77548, 113451 77477) (125243 93587, 125095 93738, 124875 94240, 124432 94269, 124727 94525, 124832 94338, 124875 94240, 124877 94240, 126199 94299, 126478 94452, 126504 94493, 126596 94534, 126617 94528, 126478 94452, 126109 93872, 125506 93344) (115588 79126, 115605 79152, 115663 79170, 115749 79224, 115616 79090)), ((115584 75422, 115860 75454, 116152 75509, 116458 75585, 116780 75682, 117116 75798, 117631 76008, 117606 75949, 117754 75980, 118059 76081, 118362 76202, 119070 76524, 119801 76894, 119962 77007, 120145 77088, 120335 77276, 120494 77382, 120585 77461, 120731 77624, 120928 77783, 120979 77804, 121357 78105, 121705 78349, 121864 78285, 122041 78367, 122216 78484, 122758 78928, 123094 79169, 123375 79307, 123433 79309, 123553 79349, 123616 79335, 123759 79333, 123894 79393, 124274 79675, 124464 79766, 124571 79839, 124658 79930, 124768 79979, 124818 80022, 125026 80121, 125168 80205, 125784 80641, 125942 80617, 126439 80929, 126963 81287, 127187 81473, 127358 81634, 127744 82027, 128252 82576, 128405 82773, 129166 83530, 130073 84471, 130180 84597, 130170 84665, 130199 84836, 130348 84985, 130405 85067, 130505 85137, 130758 85352, 130989 85491, 131156 85642, 131771 86336, 131783 86534, 131769 86624, 131836 86734, 131938 86849, 132188 87053, 132292 87160, 132322 87211, 132466 87366, 132679 87530, 133018 87840, 133140 87985, 133497 88459, 133730 88792, 133973 89187, 134040 89343, 133979 89316, 134295 89775, 134648 90363, 134883 90830, 135042 91218, 135127 91480, 135186 91738, 135220 91967, 135230 92189, 135218 92396, 135186 92584, 135133 92754, 135060 92906, 134970 93036, 134862 93145, 134739 93228, 134601 93289, 134448 93323, 134283 93328, 134119 93309, 133915 93255, 133717 93170, 133489 93042, 133288 92904, 133035 92705, 132627 92345, 132438 92165, 132077 91784, 132124 91776, 132621 91923, 133094 92076, 133717 91823, 134195 91246, 133525 90688, 132083 89526, 128898 87048, 126511 85280, 125320 84424, 125113 84219, 124838 83980, 124599 83803, 123525 83089, 123006 82733, 122825 82598, 122718 82500, 121275 81606, 119797 80710, 119285 80412, 119055 80072, 118741 79655, 118601 79490, 118468 79384, 118180 78998, 117865 78516, 117521 78095, 117092 77768, 116678 77597, 116366 77625, 115926 77709, 114808 77653, 114718 77643, 114553 77499, 114364 77309, 114206 77125, 114079 76947, 113990 76775, 113938 76606, 113903 76438, 113906 76283, 113997 75999, 114083 75871, 114192 75759, 114485 75576, 114664 75506, 114866 75455, 115086 75424, 115327 75411)), ((111598 82831, 112129 83423, 112139 84189, 111689 84729, 111577 84684, 110990 84372, 110827 84186, 110509 83784, 110597 83254, 110605 83126, 110722 83027, 110999 82741)), ((112226 78193, 112723 78420, 112919 79118, 112795 79462, 112375 79815, 112036 80226, 111729 80617, 111679 80900, 111917 81136, 112273 81651, 112348 81782, 112395 82029, 112506 82450, 112400 82595, 112241 82928, 111994 82962, 111789 82855, 111372 82752, 110864 82130, 110601 81840, 110475 81456, 110426 81221, 110315 80805, 110378 79940, 110460 79774, 110794 79328, 111852 78212, 111875 78152, 111986 78087, 112129 78060))) \ No newline at end of file +MULTIPOLYGON (((79120 127292, 79224 127278, 79336 127282, 79528 127350, 79629 127367, 79848 127505, 79926 127530, 80372 128226, 80774 129260, 81174 130451, 81674 131726, 82375 134464, 82461 135843, 82643 137089, 82750 138193, 82963 139968, 82948 139942, 82875 140325, 82735 140623, 82542 140828, 82288 140924, 82007 140896, 81894 140826, 81527 141166, 81202 140623, 80700 139600, 80189 137690, 79790 136498, 79407 135193, 78360 133995, 78752 132443, 78502 131105, 78321 129860, 78048 128411, 78254 128446, 78320 128150, 78513 128186, 78618 128185, 78431 127668, 78474 127632, 78535 127473, 78606 127434, 78714 127343, 78948 127275, 79120 127292)), ((83389 130103, 83478 130248, 83796 130463, 83818 130707, 83859 130807, 83802 130835, 83755 130991, 83579 130819, 83122 130741, 82774 130701, 82671 130642, 82545 130613, 82433 130446, 82727 130221, 82865 130151, 83132 130083, 83389 130103)), ((97619 124430, 98131 124848, 98376 125088, 98389 125104, 98638 125442, 98677 125472, 99409 126405, 99851 126891, 100473 127465, 100956 127793, 101443 128332, 101908 128704, 102198 128999, 102374 129230, 102698 129762, 101340 129409, 100722 129165, 99040 128367, 98417 128039, 98633 128311, 98604 128664, 98812 129096, 98889 129461, 98125 129283, 97370 129064, 97039 128952, 96335 128767, 95896 128602, 95980 128816, 95851 129152, 95866 129587, 95806 129789, 94999 129543, 94079 129361, 93524 129193, 92967 128442, 93413 129252, 93528 129618, 93478 129881, 93363 130326, 93349 130457, 93185 130409, 92283 130197, 92041 130101, 91887 130021, 91764 129778, 91383 129164, 91447 128284, 91533 127807, 91656 126941, 92086 127342, 92888 128306, 93106 126673, 93167 126035, 93235 125848, 93363 125914, 93716 126150, 94228 126612, 94598 126917, 94767 126444, 94944 125904, 95015 125734, 95281 125207, 95415 125059, 95524 125132, 96098 125568, 96331 125795, 96930 126426, 97122 126605, 96989 125178, 97021 124617, 97215 124124, 97619 124430)), ((109692 100044, 111513 100230, 111714 100266, 112574 100596, 113175 100782, 114293 101234, 114709 101453, 115529 101710, 117418 102497, 117666 102669, 119616 104773, 119906 105092, 120184 105783, 120705 106824, 121535 110116, 120882 112825, 120085 114761, 119981 114962, 119891 115057, 119121 116010, 118313 116547, 117558 117151, 116926 117724, 116574 118089, 116074 118654, 115781 119026, 114898 120328, 114317 121059, 113580 121436, 113266 121566, 112687 121534, 111361 121616, 109756 121473, 109291 121419, 109129 121461, 108708 121532, 108678 121795, 108695 121805, 108838 122281, 109063 122896, 109021 123430, 108902 124017, 108838 124389, 108252 125185, 107971 125546, 106584 126460, 105446 126917, 105091 127026, 104801 127052, 103923 127221, 103117 127242, 102608 127187, 101709 127169, 100463 126777, 100365 126737, 100293 126673, 99946 126448, 98677 125472, 98389 125104, 97962 124526, 97090 123478, 96939 122871, 96805 120972, 96909 120677, 97385 120348, 97593 120219, 97964 120052, 98237 119914, 98469 119273, 99200 118646, 99529 118345, 99870 118004, 101017 117704, 101853 117663, 103575 117979, 105120 119682, 106843 121200, 107770 121634, 107994 121756, 108533 121953, 108677 121806, 108678 121795, 108117 121464, 108006 121416, 107598 121285, 107578 121204, 107130 120585, 106939 120243, 106337 119096, 104614 118313, 103749 117422, 102433 115545, 102232 115280, 101095 113080, 100940 112750, 100742 111942, 100367 110675, 100368 109151, 100549 108698, 100648 108346, 100798 107954, 101111 107003, 101336 106482, 101674 105779, 102104 105069, 102358 104725, 102537 104510, 102716 104433, 103093 104221, 103554 104171, 103722 104183, 103781 103995, 103971 103631, 104079 103259, 104087 103198, 104323 102842, 104557 102657, 104690 102483, 104846 102230, 105146 101931, 105333 101609, 105631 101213, 105746 101100, 105881 101004, 106262 100611, 106771 100236, 106882 100187, 107164 100165, 108405 99980, 109692 100044)), ((102856 116674, 103420 117404, 104003 118058, 104085 118073, 104614 118313, 105063 118776, 105559 119223, 105748 119349, 106140 119634, 106367 119890, 106467 120069, 105387 119570, 105299 119560, 104795 118946, 104003 118058, 103575 117979, 103429 117818, 102979 117279, 102847 117046, 102474 116516, 102256 115983, 102856 116674)), ((111979 98048, 112640 98165, 114894 98757, 116554 100122, 117825 101324, 118551 102149, 120011 103750, 120517 104181, 120948 104476, 121480 104934, 121869 105433, 122266 105911, 122398 106118, 122538 106978, 122565 107526, 122448 108026, 122397 108330, 122312 108422, 122071 108594, 121829 108632, 121738 108717, 121614 108507, 121475 108242, 121452 107882, 121370 107371, 120931 106491, 120759 106056, 120433 105672, 119906 105092, 119837 104921, 119625 104354, 118732 103524, 118601 103249, 118490 103049, 117962 102723, 117418 102497, 116041 101538, 114943 100723, 113715 100386, 112653 100196, 111239 99730, 110995 99706, 110863 99705, 110703 99664, 109853 99360, 109531 99105, 109226 98937, 109504 98678, 109811 98368, 111163 97983, 111979 98048)), ((113590 77519, 114718 77643, 114776 77694, 115017 77881, 114957 77842, 115114 77973, 115623 78315, 116242 78690, 116925 79083, 118875 80173, 119285 80412, 119755 81105, 120657 82492, 120971 82992, 121375 83720, 121636 84159, 121799 84325, 122004 84513, 122038 84567, 122230 84788, 122444 84933, 123436 85194, 123585 85190, 124020 85242, 123609 84818, 123120 84253, 123306 84064, 123458 83893, 124225 83636, 125320 84424, 126745 85831, 126872 85938, 128212 87377, 129072 88321, 129622 88941, 131671 91334, 132012 91715, 132077 91784, 131707 91847, 131407 91881, 131591 92747, 131648 93329, 131745 93717, 132323 95142, 132510 96186, 132564 96338, 132560 96544, 132458 97262, 132155 97896, 131934 98397, 131222 99404, 130709 99737, 130492 99776, 130356 99760, 129990 99775, 129687 99931, 129494 100079, 128874 100439, 128527 100729, 128267 100932, 127519 101262, 127061 101259, 126943 101275, 126370 101390, 125467 102144, 125284 102273, 124152 103137, 123055 103364, 122879 103414, 121993 103257, 121918 103005, 121768 102255, 121641 102189, 121452 101995, 120579 101023, 120326 100233, 120093 99955, 119948 99760, 118919 98580, 118248 97980, 118271 97689, 118384 97046, 118492 96921, 119378 96178, 121005 95573, 121673 95365, 122491 95094, 123023 94650, 123403 94379, 123492 94331, 124432 94269, 122932 92966, 121228 91461, 119935 90290, 119642 90012, 119392 89740, 118531 88850, 118250 88240, 118557 88108, 119202 88404, 119569 88592, 119238 88124, 119181 88078, 118640 87535, 118314 87364, 118281 87360, 117934 87236, 117836 87181, 116956 86534, 115714 86010, 115604 86006, 115423 85918, 114951 85293, 114733 84976, 114872 84580, 114917 83952, 115035 83619, 114940 83614, 114752 83589, 114563 83550, 114375 83497, 114190 83431, 114011 83354, 113836 83265, 113670 83166, 113372 82941, 113244 82816, 113131 82685, 113036 82548, 112961 82407, 112910 82262, 112877 82113, 112865 81964, 112878 81778, 112900 81665, 112943 81518, 113010 81365, 113082 81237, 113177 81101, 113282 80980, 113403 80863, 113537 80759, 113682 80666, 113838 80589, 114005 80529, 114180 80488, 114365 80465, 114555 80464, 114750 80480, 114947 80513, 115145 80561, 115340 80622, 115709 80778, 115761 81235, 115681 81854, 115528 82227, 115383 82780, 115179 83214, 115035 83619, 115125 83623, 115306 83617, 115479 83593, 115646 83553, 115804 83497, 115953 83428, 116093 83344, 116224 83248, 116340 83143, 116451 83025, 116564 82877, 116704 82628, 116761 82484, 116800 82338, 116822 82190, 116823 82041, 116804 81894, 116760 81749, 116693 81607, 116604 81470, 116495 81339, 116367 81213, 116224 81093, 115997 80937, 115719 80782, 115709 80778, 115551 79387, 115495 79243, 115588 79126, 115470 78944, 115019 78738, 114164 78461, 113464 78431, 113117 78185, 112795 78000, 112885 77893, 112859 77727, 113247 77548, 113451 77477, 113590 77519), (125243 93587, 125095 93738, 124875 94240, 124432 94269, 124727 94525, 124832 94338, 124875 94240, 124877 94240, 126199 94299, 126478 94452, 126504 94493, 126596 94534, 126617 94528, 126478 94452, 126109 93872, 125506 93344, 125243 93587), (115588 79126, 115605 79152, 115663 79170, 115749 79224, 115616 79090, 115588 79126)), ((115584 75422, 115860 75454, 116152 75509, 116458 75585, 116780 75682, 117116 75798, 117631 76008, 117606 75949, 117754 75980, 118059 76081, 118362 76202, 119070 76524, 119801 76894, 119962 77007, 120145 77088, 120335 77276, 120494 77382, 120585 77461, 120731 77624, 120928 77783, 120979 77804, 121357 78105, 121705 78349, 121864 78285, 122041 78367, 122216 78484, 122758 78928, 123094 79169, 123375 79307, 123433 79309, 123553 79349, 123616 79335, 123759 79333, 123894 79393, 124274 79675, 124464 79766, 124571 79839, 124658 79930, 124768 79979, 124818 80022, 125026 80121, 125168 80205, 125784 80641, 125942 80617, 126439 80929, 126963 81287, 127187 81473, 127358 81634, 127744 82027, 128252 82576, 128405 82773, 129166 83530, 130073 84471, 130180 84597, 130170 84665, 130199 84836, 130348 84985, 130405 85067, 130505 85137, 130758 85352, 130989 85491, 131156 85642, 131771 86336, 131783 86534, 131769 86624, 131836 86734, 131938 86849, 132188 87053, 132292 87160, 132322 87211, 132466 87366, 132679 87530, 133018 87840, 133140 87985, 133497 88459, 133730 88792, 133973 89187, 134040 89343, 133979 89316, 134295 89775, 134648 90363, 134883 90830, 135042 91218, 135127 91480, 135186 91738, 135220 91967, 135230 92189, 135218 92396, 135186 92584, 135133 92754, 135060 92906, 134970 93036, 134862 93145, 134739 93228, 134601 93289, 134448 93323, 134283 93328, 134119 93309, 133915 93255, 133717 93170, 133489 93042, 133288 92904, 133035 92705, 132627 92345, 132438 92165, 132077 91784, 132124 91776, 132621 91923, 133094 92076, 133717 91823, 134195 91246, 133525 90688, 132083 89526, 128898 87048, 126511 85280, 125320 84424, 125113 84219, 124838 83980, 124599 83803, 123525 83089, 123006 82733, 122825 82598, 122718 82500, 121275 81606, 119797 80710, 119285 80412, 119055 80072, 118741 79655, 118601 79490, 118468 79384, 118180 78998, 117865 78516, 117521 78095, 117092 77768, 116678 77597, 116366 77625, 115926 77709, 114808 77653, 114718 77643, 114553 77499, 114364 77309, 114206 77125, 114079 76947, 113990 76775, 113938 76606, 113903 76438, 113906 76283, 113997 75999, 114083 75871, 114192 75759, 114485 75576, 114664 75506, 114866 75455, 115086 75424, 115327 75411, 115584 75422)), ((111598 82831, 112129 83423, 112139 84189, 111689 84729, 111577 84684, 110990 84372, 110827 84186, 110509 83784, 110597 83254, 110605 83126, 110722 83027, 110999 82741, 111598 82831)), ((112226 78193, 112723 78420, 112919 79118, 112795 79462, 112375 79815, 112036 80226, 111729 80617, 111679 80900, 111917 81136, 112273 81651, 112348 81782, 112395 82029, 112506 82450, 112400 82595, 112241 82928, 111994 82962, 111789 82855, 111372 82752, 110864 82130, 110601 81840, 110475 81456, 110426 81221, 110315 80805, 110378 79940, 110460 79774, 110794 79328, 111852 78212, 111875 78152, 111986 78087, 112129 78060, 112226 78193))) \ No newline at end of file diff --git a/stress_benchmark/resources/042.settings b/stress_benchmark/resources/042.settings index 6407e893e6..8b81269ccd 100644 --- a/stress_benchmark/resources/042.settings +++ b/stress_benchmark/resources/042.settings @@ -156,6 +156,7 @@ machine_settings=0 raft_base_extruder_nr=0 z_seam_y=240.0 wall_overhang_angle=90 +seam_overhang_angle=30 draft_shield_height=10 _plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 travel_retract_before_outer_wall=True @@ -533,7 +534,6 @@ skirt_brim_minimal_length=25 cooling=0 brim_replaces_support=True wall_x_extruder_nr=-1 -support_interface_skip_height=0.2 machine_nozzle_head_distance=3 support_bottom_pattern=concentric raft_base_wall_count=1 diff --git a/stress_benchmark/resources/042.wkt b/stress_benchmark/resources/042.wkt index ae4001d6e9..41792ec32b 100644 --- a/stress_benchmark/resources/042.wkt +++ b/stress_benchmark/resources/042.wkt @@ -1 +1 @@ -MULTIPOLYGON (((179969 66896, 100031 66896, 100000 66756, 180000 66755))) \ No newline at end of file +MULTIPOLYGON (((179969 66896, 100031 66896, 100000 66756, 180000 66755, 179969 66896))) \ No newline at end of file diff --git a/stress_benchmark/resources/043.settings b/stress_benchmark/resources/043.settings index 74cf037495..117014d94d 100644 --- a/stress_benchmark/resources/043.settings +++ b/stress_benchmark/resources/043.settings @@ -157,6 +157,7 @@ machine_settings=0 raft_base_extruder_nr=0 z_seam_y=215 wall_overhang_angle=90 +seam_overhang_angle=30 draft_shield_height=10 _plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 travel_retract_before_outer_wall=False @@ -535,7 +536,6 @@ skirt_brim_minimal_length=250 cooling=0 brim_replaces_support=True wall_x_extruder_nr=-1 -support_interface_skip_height=0.1 machine_nozzle_head_distance=3 support_bottom_pattern=zigzag raft_base_wall_count=1 diff --git a/stress_benchmark/resources/043.wkt b/stress_benchmark/resources/043.wkt index 030bcf1fe0..46fd803726 100644 --- a/stress_benchmark/resources/043.wkt +++ b/stress_benchmark/resources/043.wkt @@ -1 +1 @@ -MULTIPOLYGON (((116557 108997, 116571 109003, 116623 108979, 116612 109036, 116622 109048, 116681 109050, 116647 109098, 116650 109113, 116701 109140, 116651 109165, 116647 109180, 116682 109228, 116623 109230, 116613 109242, 116624 109299, 116571 109275, 116557 109281, 116542 109339, 116505 109295, 116489 109295, 116453 109339, 116437 109282, 116423 109276, 116369 109299, 116380 109243, 116370 109231, 116311 109229, 116347 109181, 116343 109166, 116291 109140, 116344 109113, 116347 109098, 116311 109050, 116370 109048, 116380 109036, 116369 108980, 116423 109003, 116437 108997, 116452 108940, 116489 108984, 116505 108984, 116541 108940))) \ No newline at end of file +MULTIPOLYGON (((116557 108997, 116571 109003, 116623 108979, 116612 109036, 116622 109048, 116681 109050, 116647 109098, 116650 109113, 116701 109140, 116651 109165, 116647 109180, 116682 109228, 116623 109230, 116613 109242, 116624 109299, 116571 109275, 116557 109281, 116542 109339, 116505 109295, 116489 109295, 116453 109339, 116437 109282, 116423 109276, 116369 109299, 116380 109243, 116370 109231, 116311 109229, 116347 109181, 116343 109166, 116291 109140, 116344 109113, 116347 109098, 116311 109050, 116370 109048, 116380 109036, 116369 108980, 116423 109003, 116437 108997, 116452 108940, 116489 108984, 116505 108984, 116541 108940, 116557 108997))) \ No newline at end of file diff --git a/stress_benchmark/resources/044.settings b/stress_benchmark/resources/044.settings index 6c76fcfa34..60f96d07d8 100644 --- a/stress_benchmark/resources/044.settings +++ b/stress_benchmark/resources/044.settings @@ -157,6 +157,7 @@ machine_settings=0 raft_base_extruder_nr=0 z_seam_y=240 wall_overhang_angle=90 +seam_overhang_angle=30 draft_shield_height=10 _plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 travel_retract_before_outer_wall=False @@ -535,7 +536,6 @@ skirt_brim_minimal_length=250 cooling=0 brim_replaces_support=True wall_x_extruder_nr=-1 -support_interface_skip_height=0.06 machine_nozzle_head_distance=3 support_bottom_pattern=zigzag raft_base_wall_count=1 diff --git a/stress_benchmark/resources/044.wkt b/stress_benchmark/resources/044.wkt index ea468ef16f..1a53adf607 100644 --- a/stress_benchmark/resources/044.wkt +++ b/stress_benchmark/resources/044.wkt @@ -1 +1 @@ -MULTIPOLYGON (((227245 67099, 226990 67099, 226984 67105, 226984 67290, 226990 67296, 227245 67296, 227245 67697, 226990 67698, 226984 67704, 226984 68048, 226990 68054, 227245 68072, 227245 68581, 226990 68582, 226984 68588, 226984 68884, 226990 68890, 227245 68890, 227245 69003, 226990 69003, 226984 69009, 226984 69360, 226990 69366, 227245 69367, 227245 70541, 226990 70539, 226984 70545, 226984 70742, 226990 70748, 227245 70747, 227245 71180, 226990 71182, 226984 71188, 226984 71484, 226990 71490, 227245 71490, 227245 72218, 226990 72218, 226984 72224, 226984 72306, 226990 72312, 227245 72313, 227245 72607, 226990 72607, 226984 72613, 226984 72773, 226990 72779, 227245 72778, 227245 73542, 226903 73542, 226897 73548, 226897 112385, 226903 112391, 227245 112391, 227245 112790, 226990 112790, 226984 112796, 226984 112979, 226990 112985, 227245 112989, 227245 113386, 226990 113389, 226984 113395, 226984 113743, 226990 113749, 227245 113759, 227245 114272, 226990 114273, 226984 114279, 226984 114574, 226990 114580, 227245 114580, 227245 114694, 226990 114690, 226984 114696, 226984 115050, 226990 115056, 227245 115057, 227245 117739, 226990 117759, 226984 117765, 226990 117771, 227245 117771, 227245 119233, 226903 119233, 226897 119239, 226897 121400, 226648 121400, 226642 121406, 226642 126757, 226648 126763, 226897 126764, 226897 142132, 226648 142132, 226642 142138, 226642 147076, 226648 147082, 226897 147081, 226897 158077, 226903 158083, 227245 158083, 227245 158481, 226990 158481, 226984 158487, 226984 158670, 226990 158676, 227245 158681, 227245 159080, 226990 159081, 226984 159087, 226984 159435, 226990 159441, 227245 159455, 227245 159963, 226990 159964, 226984 159970, 226984 160265, 226990 160271, 227245 160271, 227245 160385, 226990 160381, 226984 160387, 226984 160741, 226990 160747, 227245 160748, 227245 163336, 226990 163335, 226984 163341, 226984 164237, 226990 164243, 227245 164243, 227245 168043, 226989 168071, 226984 168077, 226990 168083, 227245 168085, 227245 169495, 225466 169495, 225466 169241, 225460 169235, 224455 169235, 224449 169241, 224448 169495, 222558 169495, 222557 169241, 222551 169235, 221522 169235, 221516 169241, 221516 169495, 220883 169495, 220883 169241, 220877 169235, 220638 169235, 220632 169241, 220631 169495, 220128 169495, 220128 169241, 220122 169235, 219361 169235, 219355 169241, 219354 169495, 219261 169495, 219261 169042, 219255 169036, 196409 169036, 196403 169042, 196403 169269, 196295 169269, 196300 169063, 196295 169057, 196101 169008, 196094 169014, 196095 169269, 195747 169269, 195748 169014, 195742 169008, 195314 169008, 195308 169014, 195308 169269, 194469 169269, 194468 169014, 194462 169008, 193990 169008, 193984 169014, 193984 169269, 192318 169269, 192318 169014, 192312 169008, 191312 169008, 191306 169014, 191306 169269, 189562 169269, 189562 169042, 189556 169036, 157003 169036, 156997 169042, 156997 169269, 156153 169269, 156153 169014, 156147 169008, 155748 169008, 155742 169014, 155745 169269, 154863 169269, 154866 169014, 154860 169008, 154274 169008, 154268 169014, 154268 169269, 152761 169269, 152761 169014, 152755 169008, 152631 169008, 152625 169014, 152624 169269, 151991 169269, 151991 169014, 151985 169008, 151700 169008, 151694 169014, 151689 169269, 150150 169269, 150150 168798, 150144 168792, 127296 168783, 127290 168789, 127290 169495, 126347 169495, 126347 169241, 126341 169235, 125910 169235, 125904 169241, 125905 169495, 124956 169495, 124954 169241, 124948 169235, 124108 169235, 124102 169241, 124102 169495, 122887 169495, 122886 169241, 122880 169235, 122194 169235, 122188 169241, 122188 169495, 121911 169495, 121911 169241, 121905 169235, 121084 169235, 121078 169241, 121077 169495, 119308 169495, 119308 166571, 119591 166571, 119597 166565, 119597 166318, 119591 166312, 119308 166311, 119308 165504, 119591 165504, 119597 165498, 119597 165322, 119591 165316, 119308 165315, 119308 163863, 119591 163864, 119597 163858, 119597 163645, 119591 163639, 119308 163640, 119308 162766, 119450 162769, 119456 162762, 119308 162017, 119295 161713, 119289 161708, 119010 161698, 119007 161699, 118933 161748, 118933 161715, 118927 161709, 118678 161708, 118672 161714, 118676 161804, 117215 161801, 117212 161105, 117313 161105, 117319 161099, 117321 160796, 117315 160790, 117215 160791, 117207 160695, 117315 160693, 117321 160688, 117315 160681, 117209 160679, 117213 160044, 117318 160045, 117324 160039, 117321 159761, 117315 159755, 117209 159753, 117212 158880, 118222 158877, 118228 158871, 118228 157366, 118307 157366, 118313 157361, 118308 157354, 118228 157345, 118230 157201, 118297 157197, 118303 157191, 118303 156920, 118297 156914, 118228 156914, 118228 156413, 118297 156415, 118303 156409, 118303 155716, 118297 155710, 118228 155712, 118228 154560, 118297 154560, 118303 154554, 118303 154036, 118297 154030, 118228 154026, 118228 151728, 118297 151728, 118303 151722, 118303 150373, 118297 150367, 118228 150367, 118229 147946, 119315 147934, 119319 148278, 119325 148284, 119382 148288, 119388 148282, 119387 147935, 120519 147936, 120515 158077, 120521 158083, 127290 158083, 127290 158535, 127043 158535, 127037 158541, 127037 159010, 127043 159016, 127290 159017, 127290 159086, 127043 159087, 127037 159093, 127037 159810, 127043 159816, 127290 159816, 127290 159997, 127043 159997, 127037 160003, 127037 160447, 127043 160453, 127290 160454, 127290 163320, 127294 163326, 127886 163509, 127887 163509, 128497 163562, 128500 163562, 128789 163471, 129397 163467, 129400 163466, 129719 163295, 130270 163393, 130275 163392, 130471 163222, 130473 163217, 130477 162585, 131027 162612, 131029 162612, 131620 162387, 132217 162618, 132851 162618, 133466 162511, 134047 162435, 134658 162510, 135266 162530, 135906 162519, 136516 162573, 137092 162581, 137094 162581, 137714 162434, 138344 162574, 138346 162574, 138931 162484, 138957 162490, 138958 162490, 139564 162440, 140786 162555, 140788 162555, 141402 162412, 141568 162474, 141657 162847, 141427 163427, 140910 163427, 140904 163432, 140906 163438, 141312 163742, 141321 163740, 141606 163324, 141926 163252, 142211 163397, 142215 163398, 142821 163294, 143146 163384, 143150 163384, 143760 163209, 144038 163490, 144039 163491, 144365 163650, 144371 163650, 144528 163566, 144530 163558, 144415 163347, 144429 163109, 144539 162936, 144743 162818, 144968 162818, 145181 162946, 145286 163127, 145229 163478, 145233 163485, 145239 163484, 145590 163226, 146193 163518, 146196 163519, 146813 163563, 146817 163562, 147103 163329, 147417 163402, 147706 163645, 147713 163645, 148032 163448, 148318 163441, 148639 163543, 148642 163543, 148810 163514, 148814 163505, 148745 163367, 148745 163127, 148853 162932, 149053 162818, 149289 162818, 149495 162932, 149615 163249, 149617 163252, 149857 163430, 149862 163431, 150145 163393, 150150 163387, 150150 161511, 151728 161511, 151729 161761, 151735 161767, 151813 161767, 151819 161761, 151820 161511, 152435 161511, 152438 161761, 152444 161767, 152649 161767, 152655 161761, 152654 161511, 153232 161511, 153233 161761, 153239 161767, 153287 161767, 153293 161761, 153293 161511, 154291 161511, 154292 161761, 154298 161767, 154378 161767, 154384 161761, 154385 161511, 154521 161511, 154521 161761, 154527 161767, 154607 161767, 154613 161761, 154608 161511, 155626 161511, 155624 161761, 155630 161767, 156083 161767, 156089 161761, 156088 161511, 156997 161511, 156997 162074, 157003 162080, 164857 162080, 164856 162337, 164862 162343, 169796 162343, 169802 162337, 169803 162080, 185170 162080, 185171 162337, 185177 162343, 189556 162343, 189562 162337, 189562 161511, 192161 161511, 192161 161761, 192167 161767, 192292 161767, 192298 161761, 192297 161511, 192684 161511, 192685 161761, 192691 161767, 192865 161767, 192871 161761, 192871 161511, 194015 161511, 194016 161761, 194022 161767, 194092 161767, 194098 161761, 194098 161511, 194638 161511, 194641 161761, 194647 161767, 195305 161767, 195311 161761, 195311 161511, 196403 161511, 196403 162738, 196409 162744, 196644 162743, 196645 162743, 197227 162596, 197836 162693, 197838 162693, 198446 162632, 199057 162756, 199058 162756, 199669 162705, 200279 162685, 200885 162595, 201497 162749, 201498 162749, 202107 162746, 202746 162645, 203356 162696, 203963 162644, 204551 162661, 205184 162708, 205185 162708, 205768 162574, 206357 162765, 206359 162765, 207018 162761, 207020 162761, 207602 162550, 208210 162660, 208212 162660, 208236 162656, 208820 162757, 208821 162757, 209400 162711, 209399 163107, 209402 163112, 209660 163268, 209669 163263, 209677 162677, 210650 162665, 210676 162674, 210678 162674, 211263 162662, 211897 162671, 212512 162716, 213123 162734, 213730 162670, 214340 162749, 215558 162588, 216175 162678, 216784 162615, 217366 162721, 218001 162736, 218002 162736, 218610 162716, 219255 162637, 219261 162631, 219261 161508, 219513 161353, 219515 161346, 219510 161342, 219261 161342, 219261 159406, 219510 159406, 219516 159400, 219516 159301, 219510 159295, 219261 159294, 219261 158083, 219835 158083, 219841 158077, 219841 155916, 220090 155916, 220096 155910, 220096 150562, 220090 150556, 219841 150555, 219841 135181, 220090 135181, 220096 135175, 220096 130245, 220090 130239, 219841 130240, 219841 119239, 219835 119233, 219261 119233, 219261 118781, 219510 118781, 219516 118775, 219516 118306, 219510 118300, 219261 118299, 219261 118230, 219510 118229, 219516 118223, 219516 117507, 219510 117501, 219261 117501, 219261 117321, 219510 117321, 219516 117315, 219516 116869, 219510 116863, 219261 116862, 219261 115202, 219510 115195, 219516 115189, 219516 115095, 219510 115089, 219261 115088, 219261 114695, 219510 114692, 219516 114686, 219516 114619, 219510 114613, 219261 114612, 219261 112391, 220658 112391, 220664 112385, 220720 111042, 220720 111041, 220639 110454, 220645 109847, 220669 109263, 220681 108657, 220708 108073, 220708 108072, 220590 107468, 220588 106882, 220710 106250, 221229 106248, 221235 106243, 221301 105820, 221300 105289, 221294 105282, 221078 105283, 220807 105075, 220803 105074, 220680 105069, 220694 104494, 220638 103891, 220558 102701, 220649 101513, 220666 100318, 220651 99130, 220623 98545, 220652 97939, 220707 97355, 220709 96749, 220709 96748, 220589 96164, 220515 95560, 220563 94973, 220636 94364, 220632 93780, 220584 93174, 220642 92590, 220616 91984, 220567 91399, 220597 90793, 220642 90208, 220673 89601, 220674 89016, 220674 89015, 220546 87828, 220643 87224, 220665 86640, 220665 86639, 220630 86033, 220683 85445, 220614 84835, 220668 83645, 220587 83062, 220582 82458, 220655 81267, 220603 80683, 220560 79490, 220553 78883, 220667 78299, 220707 77693, 220707 77692, 220628 76504, 220637 75313, 220655 74727, 220714 74119, 220699 73548, 220693 73542, 219261 73542, 219261 73501, 219459 73498, 219464 73495, 219515 73393, 219510 73384, 219261 73385, 219261 73216, 219510 73218, 219516 73212, 219516 72988, 219510 72982, 219261 72982, 219261 72567, 219510 72566, 219516 72560, 219516 72343, 219510 72337, 219261 72337, 219261 71505, 219510 71505, 219516 71499, 219516 70977, 219510 70971, 219261 70970, 219261 70128, 219513 69970, 219515 69962, 219510 69959, 219261 69958, 219261 68031, 219510 68031, 219516 68025, 219516 67914, 219510 67908, 219261 67907, 219261 66700, 227245 66700) (139214 163427, 139208 163432, 139210 163437, 139479 163732, 139484 163734, 140093 163681, 140095 163680, 140501 163438, 140503 163431, 140498 163427) (133165 163427, 133159 163432, 133163 163439, 133375 163505, 133378 163505, 133913 163439, 133918 163433, 133912 163427) (118359 160726, 118273 160861, 118272 160866, 118357 161089, 118362 161093, 118577 161127, 118581 161126, 118711 161050, 118711 161040, 118579 160973, 118575 160972, 118421 161001, 118508 160868, 118509 160863, 118481 160768, 118477 160764, 118366 160723) (119036 158531, 119011 158970, 119017 158976, 119283 158976, 119289 158971, 119299 158888, 119293 158881, 119162 158889, 119159 158535, 119153 158529, 119042 158525)), ((100547 157629, 100554 157814, 100554 161524, 100440 161529, 99949 161382, 99941 161388, 99947 161529, 98886 161531, 98886 161316, 98880 161310, 98418 161308, 98412 161314, 98406 161382, 98406 161314, 98400 161308, 98019 161309, 98013 161315, 98013 161530, 96282 161534, 96282 159761, 96416 159759, 96422 159753, 96422 159186, 96416 159180, 96282 159181, 96282 158926, 96416 158925, 96422 158919, 96422 158829, 96416 158823, 96282 158823, 96276 157372, 96416 157371, 96422 157365, 96418 156729, 96412 156723, 96275 156723, 96275 154698, 98240 154696, 98240 154914, 98246 154920, 98417 154918, 98423 154912, 98423 154697, 98629 154697, 98631 154914, 98637 154920, 98872 154919, 98878 154913, 98883 154697, 99978 154698, 99979 154860, 99987 154866, 100547 154669)), ((126470 135168, 126478 135376, 126484 135382, 126941 135380, 126945 135377, 126948 135380, 127330 135382, 127336 135376, 127340 135159, 129115 135160, 129103 136921, 128969 136920, 128963 136926, 128959 137505, 128965 137511, 129093 137511, 129096 137765, 128964 137765, 128958 137771, 128955 137850, 128961 137856, 129096 137857, 129087 139310, 128955 139307, 128949 139313, 128943 139948, 128949 139954, 129081 139955, 129068 141997, 127128 142001, 127131 141784, 127125 141778, 126909 141777, 126903 141782, 126884 141999, 126739 142000, 126739 141780, 126733 141774, 126451 141778, 126445 141784, 126440 142000, 125336 142000, 125337 141841, 125329 141835, 124747 142016, 124761 139306, 124771 138890, 124788 135687, 124918 135661, 124881 136134, 124886 136140, 124890 136139, 125205 135951, 125207 135950, 125436 135643, 125437 135638, 125386 135360, 125381 135355, 125207 135328, 125202 135330, 124959 135594, 124986 135204, 125393 135312, 125401 135306, 125400 135155) (125456 138080, 125394 138216, 125393 138218, 125429 138686, 125439 138691, 125483 138657, 125485 138652, 125523 138127, 125521 138122, 125465 138077)), ((97497 63734, 97501 63737, 97644 63765, 97647 63765, 97912 63658, 98179 63907, 98188 63907, 98453 63584, 98930 64024, 99014 64326, 99023 64329, 99425 64109, 99811 64348, 99818 64347, 100066 64083, 100340 63977, 100344 63973, 100363 63903, 100360 63896, 100164 63776, 100160 63775, 99870 63817, 99804 63698, 99797 63695, 99532 63764, 99406 63703, 99312 63505, 99383 63322, 99380 63315, 99373 63316, 99259 63422, 99155 63255, 100377 63255, 100377 63468, 100382 63474, 100388 63472, 100554 63267, 100559 66864, 100565 66870, 101097 66830, 101103 66824, 101100 66819, 100713 66623, 119301 71007, 119308 71001, 119308 70131, 127290 70131, 127290 71171, 127043 71171, 127037 71177, 127037 71622, 127043 71628, 127290 71627, 127290 71813, 127043 71813, 127037 71819, 127037 72532, 127043 72538, 127290 72539, 127290 72607, 127043 72608, 127037 72614, 127037 73084, 127043 73090, 127290 73089, 127290 73542, 126961 73542, 126955 73548, 126955 75709, 126700 75709, 126694 75715, 126694 81065, 126700 81071, 126955 81072, 126955 96444, 126700 96444, 126694 96450, 126694 101382, 126700 101388, 126955 101387, 126955 112385, 126961 112391, 127290 112391, 127290 113603, 127043 113604, 127037 113610, 127037 113708, 127043 113714, 127290 113714, 127290 115648, 127043 115648, 127037 115653, 127040 115659, 127285 115814, 127040 115964, 127038 115971, 127043 115975, 127290 115975, 127290 117912, 127043 117912, 127037 117918, 127037 118019, 127043 118025, 127290 118026, 127290 119233, 119308 119233, 119308 118834, 119563 118834, 119569 118828, 119569 118643, 119563 118637, 119308 118641, 119308 118241, 119563 118242, 119569 118236, 119569 117873, 119563 117867, 119308 117867, 119308 117351, 119563 117350, 119569 117344, 119569 117051, 119563 117045, 119308 117045, 119308 116934, 119563 116934, 119569 116928, 119569 116579, 119563 116573, 119312 116570, 119312 115057, 119563 115057, 119569 115051, 119569 114697, 119563 114691, 119308 114690, 119308 114580, 119563 114580, 119569 114574, 119569 114279, 119563 114273, 119308 114272, 119308 113762, 119563 113762, 119569 113756, 119569 113395, 119563 113389, 119308 113385, 119308 112989, 119563 112984, 119569 112978, 119569 112795, 119563 112789, 119308 112789, 119308 112391, 119643 112391, 119649 112385, 119649 101387, 119905 101388, 119911 101382, 119911 96450, 119905 96444, 119649 96443, 119649 81072, 119905 81071, 119911 81065, 119911 75734, 119904 75728, 119649 75780, 119649 74101, 119644 74095, 117527 73594, 117520 73600, 117518 75077, 117370 75274, 115698 74836, 115654 74564, 115648 74559, 115642 74565, 115641 74826, 114825 74618, 114816 74348, 114811 74342, 114804 74348, 114785 74603, 113950 74384, 113799 74111, 113792 74108, 113789 74111, 113639 74422, 113101 74282, 113099 74020, 113095 74014, 112771 73930, 112763 73936, 112763 74197, 112538 74135, 112539 73872, 112534 73866, 112459 73848, 112452 73854, 112453 74113, 111877 73967, 111879 73705, 111875 73699, 111795 73669, 111787 73675, 111788 73939, 111595 73887, 111593 73628, 111589 73622, 111534 73604, 111526 73610, 111527 73873, 110228 73534, 110069 73139, 110060 73136, 109919 73215, 109461 73094, 109461 72833, 109457 72827, 109228 72766, 109220 72772, 109221 73034, 108713 72888, 108712 72638, 108708 72632, 108568 72595, 108560 72601, 108560 72863, 107742 72652, 107723 72380, 107717 72374, 107711 72380, 107712 72645, 107402 72559, 107396 72298, 107392 72292, 107291 72264, 107283 72270, 107277 72533, 106484 72322, 106341 72170, 106332 72171, 106189 72483, 105802 72384, 105794 72119, 105789 72113, 105628 72072, 105621 72078, 105621 72338, 105264 72239, 105260 71981, 105256 71975, 104815 71861, 104807 71867, 104806 72127, 104306 71998, 104305 71736, 104301 71730, 104022 71651, 104014 71657, 104015 71795, 104001 71652, 103997 71647, 103631 71550, 103623 71556, 103623 71818, 102761 71591, 102614 71199, 102616 70519, 102612 70513, 102567 70501, 102565 70071, 102560 70065, 100566 69596, 100559 69602, 100559 70083, 99473 70085, 99432 69870, 99426 69865, 99420 69871, 99417 70084, 98445 70086, 98421 69873, 98415 69868, 98409 69874, 98410 70084, 96287 70090, 96286 68662, 96421 68660, 96427 68654, 96427 68322, 96515 68327, 96545 68662, 96350 69095, 96350 69101, 96473 69251, 96561 69577, 96568 69581, 96572 69579, 96972 69101, 96972 69094, 96843 68850, 96836 68847, 96692 68901, 96598 68630, 96623 68239, 96842 67828, 96978 67808, 96983 67802, 96983 67581, 97064 67374, 97064 67370, 96880 66941, 96875 66516, 97109 65993, 97156 66009, 97162 66008, 97573 65659, 97571 65648, 97420 65589, 97384 65328, 97374 65324, 97105 65552, 96965 65452, 96962 65451, 96696 65449, 96572 65227, 96569 65226, 96574 65224, 97030 64787, 97352 64950, 97372 65052, 97380 65057, 97527 64995, 97530 64992, 97648 64820, 97914 64796, 97915 64796, 98275 64657, 98449 64768, 98458 64765, 98621 64370, 98621 64369, 98673 64018, 98669 64011, 98664 64012, 98451 64125, 98345 64104, 98188 63946, 98180 63945, 97674 64363, 97672 64367, 97641 64563, 97564 64503, 97588 64369, 97585 64363, 97412 64270, 97107 63255, 97244 63255) (97615 66125, 97205 66512, 97203 66517, 97224 66749, 97225 66751, 97327 66943, 97129 67369, 97128 67372, 97132 67802, 97134 67807, 97297 67931, 97304 67931, 97378 67895, 97642 68064, 97649 68064, 97918 67866, 97920 67863, 97969 67724, 97966 67717, 97960 67717, 97917 67738, 97845 67489, 97841 67485, 97647 67407, 97641 67409, 97592 67453, 97419 66943, 97676 66519, 97677 66515, 97625 66128, 97619 66123) (98530 67798, 98528 67804, 98599 67992, 98608 67995, 98977 67807, 98980 67800, 98976 67796, 98774 67723, 98727 67627, 98718 67626) (98273 67368, 98272 67373, 98302 67605, 98305 67609, 98449 67708, 98458 67705, 98589 67374, 98588 67369, 98457 67146, 98447 67145) (99252 66120, 99092 66773, 99093 66777, 99253 67002, 99261 67004, 99264 67000, 99368 66354, 99367 66351, 99263 66119, 99256 66115) (98257 66395, 98188 66340, 98178 66343, 98050 66716, 98053 66723, 98059 66723, 98184 66664, 98451 66719, 98457 66716, 98580 66519, 98581 66516, 98574 66330, 98567 66324) (99793 65873, 99713 66084, 99713 66087, 99770 66553, 99778 66558, 99893 66522, 99895 66512, 99840 66458, 99887 65953, 99885 65948, 99803 65871) (98987 65329, 98868 65840, 98870 65845, 98989 65972, 98997 65973, 98999 65969, 99063 65655, 99063 65653, 98999 65329, 98993 65324) (97907 64803, 97843 65224, 97844 65224, 97686 65579, 97688 65586, 97695 65585, 97914 65353, 98182 65428, 98185 65428, 98343 65403, 98448 65492, 98455 65492, 98935 65230, 98938 65224, 98884 64975, 98878 64970, 98606 64978, 98427 64839, 98420 64839, 98037 65027, 97918 64801, 97911 64798) (99793 64580, 99769 64795, 99528 65031, 99526 65034, 99467 65313, 99470 65319, 99529 65347, 99537 65345, 99849 64800, 99850 64796, 99805 64580, 99799 64575)), ((96564 65219, 96569 65226, 96565 65224, 96561 65228, 96398 65652, 96398 65656, 96460 65818, 96465 65822, 96711 65853, 96781 66086, 96735 66239, 96735 66242, 96805 66515, 96526 66940, 96525 66942, 96415 67376, 96415 67377, 96424 67601, 96427 67606, 96571 67674, 96577 67674, 96709 67586, 96783 67801, 96572 68025, 96427 68041, 96427 67991, 96421 67985, 96287 67983, 96282 66876, 96476 66519, 96477 66514, 96416 66336, 96409 66332, 96282 66364, 96282 66282, 96416 66282, 96422 66276, 96422 66184, 96416 66178, 96282 66177, 96283 65387, 96416 65389, 96422 65383, 96422 65302, 96559 65230, 96560 65221, 96422 65068, 96432 64801, 96612 64725))) \ No newline at end of file +MULTIPOLYGON (((227245 67099, 226990 67099, 226984 67105, 226984 67290, 226990 67296, 227245 67296, 227245 67697, 226990 67698, 226984 67704, 226984 68048, 226990 68054, 227245 68072, 227245 68581, 226990 68582, 226984 68588, 226984 68884, 226990 68890, 227245 68890, 227245 69003, 226990 69003, 226984 69009, 226984 69360, 226990 69366, 227245 69367, 227245 70541, 226990 70539, 226984 70545, 226984 70742, 226990 70748, 227245 70747, 227245 71180, 226990 71182, 226984 71188, 226984 71484, 226990 71490, 227245 71490, 227245 72218, 226990 72218, 226984 72224, 226984 72306, 226990 72312, 227245 72313, 227245 72607, 226990 72607, 226984 72613, 226984 72773, 226990 72779, 227245 72778, 227245 73542, 226903 73542, 226897 73548, 226897 112385, 226903 112391, 227245 112391, 227245 112790, 226990 112790, 226984 112796, 226984 112979, 226990 112985, 227245 112989, 227245 113386, 226990 113389, 226984 113395, 226984 113743, 226990 113749, 227245 113759, 227245 114272, 226990 114273, 226984 114279, 226984 114574, 226990 114580, 227245 114580, 227245 114694, 226990 114690, 226984 114696, 226984 115050, 226990 115056, 227245 115057, 227245 117739, 226990 117759, 226984 117765, 226990 117771, 227245 117771, 227245 119233, 226903 119233, 226897 119239, 226897 121400, 226648 121400, 226642 121406, 226642 126757, 226648 126763, 226897 126764, 226897 142132, 226648 142132, 226642 142138, 226642 147076, 226648 147082, 226897 147081, 226897 158077, 226903 158083, 227245 158083, 227245 158481, 226990 158481, 226984 158487, 226984 158670, 226990 158676, 227245 158681, 227245 159080, 226990 159081, 226984 159087, 226984 159435, 226990 159441, 227245 159455, 227245 159963, 226990 159964, 226984 159970, 226984 160265, 226990 160271, 227245 160271, 227245 160385, 226990 160381, 226984 160387, 226984 160741, 226990 160747, 227245 160748, 227245 163336, 226990 163335, 226984 163341, 226984 164237, 226990 164243, 227245 164243, 227245 168043, 226989 168071, 226984 168077, 226990 168083, 227245 168085, 227245 169495, 225466 169495, 225466 169241, 225460 169235, 224455 169235, 224449 169241, 224448 169495, 222558 169495, 222557 169241, 222551 169235, 221522 169235, 221516 169241, 221516 169495, 220883 169495, 220883 169241, 220877 169235, 220638 169235, 220632 169241, 220631 169495, 220128 169495, 220128 169241, 220122 169235, 219361 169235, 219355 169241, 219354 169495, 219261 169495, 219261 169042, 219255 169036, 196409 169036, 196403 169042, 196403 169269, 196295 169269, 196300 169063, 196295 169057, 196101 169008, 196094 169014, 196095 169269, 195747 169269, 195748 169014, 195742 169008, 195314 169008, 195308 169014, 195308 169269, 194469 169269, 194468 169014, 194462 169008, 193990 169008, 193984 169014, 193984 169269, 192318 169269, 192318 169014, 192312 169008, 191312 169008, 191306 169014, 191306 169269, 189562 169269, 189562 169042, 189556 169036, 157003 169036, 156997 169042, 156997 169269, 156153 169269, 156153 169014, 156147 169008, 155748 169008, 155742 169014, 155745 169269, 154863 169269, 154866 169014, 154860 169008, 154274 169008, 154268 169014, 154268 169269, 152761 169269, 152761 169014, 152755 169008, 152631 169008, 152625 169014, 152624 169269, 151991 169269, 151991 169014, 151985 169008, 151700 169008, 151694 169014, 151689 169269, 150150 169269, 150150 168798, 150144 168792, 127296 168783, 127290 168789, 127290 169495, 126347 169495, 126347 169241, 126341 169235, 125910 169235, 125904 169241, 125905 169495, 124956 169495, 124954 169241, 124948 169235, 124108 169235, 124102 169241, 124102 169495, 122887 169495, 122886 169241, 122880 169235, 122194 169235, 122188 169241, 122188 169495, 121911 169495, 121911 169241, 121905 169235, 121084 169235, 121078 169241, 121077 169495, 119308 169495, 119308 166571, 119591 166571, 119597 166565, 119597 166318, 119591 166312, 119308 166311, 119308 165504, 119591 165504, 119597 165498, 119597 165322, 119591 165316, 119308 165315, 119308 163863, 119591 163864, 119597 163858, 119597 163645, 119591 163639, 119308 163640, 119308 162766, 119450 162769, 119456 162762, 119308 162017, 119295 161713, 119289 161708, 119010 161698, 119007 161699, 118933 161748, 118933 161715, 118927 161709, 118678 161708, 118672 161714, 118676 161804, 117215 161801, 117212 161105, 117313 161105, 117319 161099, 117321 160796, 117315 160790, 117215 160791, 117207 160695, 117315 160693, 117321 160688, 117315 160681, 117209 160679, 117213 160044, 117318 160045, 117324 160039, 117321 159761, 117315 159755, 117209 159753, 117212 158880, 118222 158877, 118228 158871, 118228 157366, 118307 157366, 118313 157361, 118308 157354, 118228 157345, 118230 157201, 118297 157197, 118303 157191, 118303 156920, 118297 156914, 118228 156914, 118228 156413, 118297 156415, 118303 156409, 118303 155716, 118297 155710, 118228 155712, 118228 154560, 118297 154560, 118303 154554, 118303 154036, 118297 154030, 118228 154026, 118228 151728, 118297 151728, 118303 151722, 118303 150373, 118297 150367, 118228 150367, 118229 147946, 119315 147934, 119319 148278, 119325 148284, 119382 148288, 119388 148282, 119387 147935, 120519 147936, 120515 158077, 120521 158083, 127290 158083, 127290 158535, 127043 158535, 127037 158541, 127037 159010, 127043 159016, 127290 159017, 127290 159086, 127043 159087, 127037 159093, 127037 159810, 127043 159816, 127290 159816, 127290 159997, 127043 159997, 127037 160003, 127037 160447, 127043 160453, 127290 160454, 127290 163320, 127294 163326, 127886 163509, 127887 163509, 128497 163562, 128500 163562, 128789 163471, 129397 163467, 129400 163466, 129719 163295, 130270 163393, 130275 163392, 130471 163222, 130473 163217, 130477 162585, 131027 162612, 131029 162612, 131620 162387, 132217 162618, 132851 162618, 133466 162511, 134047 162435, 134658 162510, 135266 162530, 135906 162519, 136516 162573, 137092 162581, 137094 162581, 137714 162434, 138344 162574, 138346 162574, 138931 162484, 138957 162490, 138958 162490, 139564 162440, 140786 162555, 140788 162555, 141402 162412, 141568 162474, 141657 162847, 141427 163427, 140910 163427, 140904 163432, 140906 163438, 141312 163742, 141321 163740, 141606 163324, 141926 163252, 142211 163397, 142215 163398, 142821 163294, 143146 163384, 143150 163384, 143760 163209, 144038 163490, 144039 163491, 144365 163650, 144371 163650, 144528 163566, 144530 163558, 144415 163347, 144429 163109, 144539 162936, 144743 162818, 144968 162818, 145181 162946, 145286 163127, 145229 163478, 145233 163485, 145239 163484, 145590 163226, 146193 163518, 146196 163519, 146813 163563, 146817 163562, 147103 163329, 147417 163402, 147706 163645, 147713 163645, 148032 163448, 148318 163441, 148639 163543, 148642 163543, 148810 163514, 148814 163505, 148745 163367, 148745 163127, 148853 162932, 149053 162818, 149289 162818, 149495 162932, 149615 163249, 149617 163252, 149857 163430, 149862 163431, 150145 163393, 150150 163387, 150150 161511, 151728 161511, 151729 161761, 151735 161767, 151813 161767, 151819 161761, 151820 161511, 152435 161511, 152438 161761, 152444 161767, 152649 161767, 152655 161761, 152654 161511, 153232 161511, 153233 161761, 153239 161767, 153287 161767, 153293 161761, 153293 161511, 154291 161511, 154292 161761, 154298 161767, 154378 161767, 154384 161761, 154385 161511, 154521 161511, 154521 161761, 154527 161767, 154607 161767, 154613 161761, 154608 161511, 155626 161511, 155624 161761, 155630 161767, 156083 161767, 156089 161761, 156088 161511, 156997 161511, 156997 162074, 157003 162080, 164857 162080, 164856 162337, 164862 162343, 169796 162343, 169802 162337, 169803 162080, 185170 162080, 185171 162337, 185177 162343, 189556 162343, 189562 162337, 189562 161511, 192161 161511, 192161 161761, 192167 161767, 192292 161767, 192298 161761, 192297 161511, 192684 161511, 192685 161761, 192691 161767, 192865 161767, 192871 161761, 192871 161511, 194015 161511, 194016 161761, 194022 161767, 194092 161767, 194098 161761, 194098 161511, 194638 161511, 194641 161761, 194647 161767, 195305 161767, 195311 161761, 195311 161511, 196403 161511, 196403 162738, 196409 162744, 196644 162743, 196645 162743, 197227 162596, 197836 162693, 197838 162693, 198446 162632, 199057 162756, 199058 162756, 199669 162705, 200279 162685, 200885 162595, 201497 162749, 201498 162749, 202107 162746, 202746 162645, 203356 162696, 203963 162644, 204551 162661, 205184 162708, 205185 162708, 205768 162574, 206357 162765, 206359 162765, 207018 162761, 207020 162761, 207602 162550, 208210 162660, 208212 162660, 208236 162656, 208820 162757, 208821 162757, 209400 162711, 209399 163107, 209402 163112, 209660 163268, 209669 163263, 209677 162677, 210650 162665, 210676 162674, 210678 162674, 211263 162662, 211897 162671, 212512 162716, 213123 162734, 213730 162670, 214340 162749, 215558 162588, 216175 162678, 216784 162615, 217366 162721, 218001 162736, 218002 162736, 218610 162716, 219255 162637, 219261 162631, 219261 161508, 219513 161353, 219515 161346, 219510 161342, 219261 161342, 219261 159406, 219510 159406, 219516 159400, 219516 159301, 219510 159295, 219261 159294, 219261 158083, 219835 158083, 219841 158077, 219841 155916, 220090 155916, 220096 155910, 220096 150562, 220090 150556, 219841 150555, 219841 135181, 220090 135181, 220096 135175, 220096 130245, 220090 130239, 219841 130240, 219841 119239, 219835 119233, 219261 119233, 219261 118781, 219510 118781, 219516 118775, 219516 118306, 219510 118300, 219261 118299, 219261 118230, 219510 118229, 219516 118223, 219516 117507, 219510 117501, 219261 117501, 219261 117321, 219510 117321, 219516 117315, 219516 116869, 219510 116863, 219261 116862, 219261 115202, 219510 115195, 219516 115189, 219516 115095, 219510 115089, 219261 115088, 219261 114695, 219510 114692, 219516 114686, 219516 114619, 219510 114613, 219261 114612, 219261 112391, 220658 112391, 220664 112385, 220720 111042, 220720 111041, 220639 110454, 220645 109847, 220669 109263, 220681 108657, 220708 108073, 220708 108072, 220590 107468, 220588 106882, 220710 106250, 221229 106248, 221235 106243, 221301 105820, 221300 105289, 221294 105282, 221078 105283, 220807 105075, 220803 105074, 220680 105069, 220694 104494, 220638 103891, 220558 102701, 220649 101513, 220666 100318, 220651 99130, 220623 98545, 220652 97939, 220707 97355, 220709 96749, 220709 96748, 220589 96164, 220515 95560, 220563 94973, 220636 94364, 220632 93780, 220584 93174, 220642 92590, 220616 91984, 220567 91399, 220597 90793, 220642 90208, 220673 89601, 220674 89016, 220674 89015, 220546 87828, 220643 87224, 220665 86640, 220665 86639, 220630 86033, 220683 85445, 220614 84835, 220668 83645, 220587 83062, 220582 82458, 220655 81267, 220603 80683, 220560 79490, 220553 78883, 220667 78299, 220707 77693, 220707 77692, 220628 76504, 220637 75313, 220655 74727, 220714 74119, 220699 73548, 220693 73542, 219261 73542, 219261 73501, 219459 73498, 219464 73495, 219515 73393, 219510 73384, 219261 73385, 219261 73216, 219510 73218, 219516 73212, 219516 72988, 219510 72982, 219261 72982, 219261 72567, 219510 72566, 219516 72560, 219516 72343, 219510 72337, 219261 72337, 219261 71505, 219510 71505, 219516 71499, 219516 70977, 219510 70971, 219261 70970, 219261 70128, 219513 69970, 219515 69962, 219510 69959, 219261 69958, 219261 68031, 219510 68031, 219516 68025, 219516 67914, 219510 67908, 219261 67907, 219261 66700, 227245 66700, 227245 67099), (139214 163427, 139208 163432, 139210 163437, 139479 163732, 139484 163734, 140093 163681, 140095 163680, 140501 163438, 140503 163431, 140498 163427, 139214 163427), (133165 163427, 133159 163432, 133163 163439, 133375 163505, 133378 163505, 133913 163439, 133918 163433, 133912 163427, 133165 163427), (118359 160726, 118273 160861, 118272 160866, 118357 161089, 118362 161093, 118577 161127, 118581 161126, 118711 161050, 118711 161040, 118579 160973, 118575 160972, 118421 161001, 118508 160868, 118509 160863, 118481 160768, 118477 160764, 118366 160723, 118359 160726), (119036 158531, 119011 158970, 119017 158976, 119283 158976, 119289 158971, 119299 158888, 119293 158881, 119162 158889, 119159 158535, 119153 158529, 119042 158525, 119036 158531)), ((100547 157629, 100554 157814, 100554 161524, 100440 161529, 99949 161382, 99941 161388, 99947 161529, 98886 161531, 98886 161316, 98880 161310, 98418 161308, 98412 161314, 98406 161382, 98406 161314, 98400 161308, 98019 161309, 98013 161315, 98013 161530, 96282 161534, 96282 159761, 96416 159759, 96422 159753, 96422 159186, 96416 159180, 96282 159181, 96282 158926, 96416 158925, 96422 158919, 96422 158829, 96416 158823, 96282 158823, 96276 157372, 96416 157371, 96422 157365, 96418 156729, 96412 156723, 96275 156723, 96275 154698, 98240 154696, 98240 154914, 98246 154920, 98417 154918, 98423 154912, 98423 154697, 98629 154697, 98631 154914, 98637 154920, 98872 154919, 98878 154913, 98883 154697, 99978 154698, 99979 154860, 99987 154866, 100547 154669, 100547 157629)), ((126470 135168, 126478 135376, 126484 135382, 126941 135380, 126945 135377, 126948 135380, 127330 135382, 127336 135376, 127340 135159, 129115 135160, 129103 136921, 128969 136920, 128963 136926, 128959 137505, 128965 137511, 129093 137511, 129096 137765, 128964 137765, 128958 137771, 128955 137850, 128961 137856, 129096 137857, 129087 139310, 128955 139307, 128949 139313, 128943 139948, 128949 139954, 129081 139955, 129068 141997, 127128 142001, 127131 141784, 127125 141778, 126909 141777, 126903 141782, 126884 141999, 126739 142000, 126739 141780, 126733 141774, 126451 141778, 126445 141784, 126440 142000, 125336 142000, 125337 141841, 125329 141835, 124747 142016, 124761 139306, 124771 138890, 124788 135687, 124918 135661, 124881 136134, 124886 136140, 124890 136139, 125205 135951, 125207 135950, 125436 135643, 125437 135638, 125386 135360, 125381 135355, 125207 135328, 125202 135330, 124959 135594, 124986 135204, 125393 135312, 125401 135306, 125400 135155, 126470 135168), (125456 138080, 125394 138216, 125393 138218, 125429 138686, 125439 138691, 125483 138657, 125485 138652, 125523 138127, 125521 138122, 125465 138077, 125456 138080)), ((97497 63734, 97501 63737, 97644 63765, 97647 63765, 97912 63658, 98179 63907, 98188 63907, 98453 63584, 98930 64024, 99014 64326, 99023 64329, 99425 64109, 99811 64348, 99818 64347, 100066 64083, 100340 63977, 100344 63973, 100363 63903, 100360 63896, 100164 63776, 100160 63775, 99870 63817, 99804 63698, 99797 63695, 99532 63764, 99406 63703, 99312 63505, 99383 63322, 99380 63315, 99373 63316, 99259 63422, 99155 63255, 100377 63255, 100377 63468, 100382 63474, 100388 63472, 100554 63267, 100559 66864, 100565 66870, 101097 66830, 101103 66824, 101100 66819, 100713 66623, 119301 71007, 119308 71001, 119308 70131, 127290 70131, 127290 71171, 127043 71171, 127037 71177, 127037 71622, 127043 71628, 127290 71627, 127290 71813, 127043 71813, 127037 71819, 127037 72532, 127043 72538, 127290 72539, 127290 72607, 127043 72608, 127037 72614, 127037 73084, 127043 73090, 127290 73089, 127290 73542, 126961 73542, 126955 73548, 126955 75709, 126700 75709, 126694 75715, 126694 81065, 126700 81071, 126955 81072, 126955 96444, 126700 96444, 126694 96450, 126694 101382, 126700 101388, 126955 101387, 126955 112385, 126961 112391, 127290 112391, 127290 113603, 127043 113604, 127037 113610, 127037 113708, 127043 113714, 127290 113714, 127290 115648, 127043 115648, 127037 115653, 127040 115659, 127285 115814, 127040 115964, 127038 115971, 127043 115975, 127290 115975, 127290 117912, 127043 117912, 127037 117918, 127037 118019, 127043 118025, 127290 118026, 127290 119233, 119308 119233, 119308 118834, 119563 118834, 119569 118828, 119569 118643, 119563 118637, 119308 118641, 119308 118241, 119563 118242, 119569 118236, 119569 117873, 119563 117867, 119308 117867, 119308 117351, 119563 117350, 119569 117344, 119569 117051, 119563 117045, 119308 117045, 119308 116934, 119563 116934, 119569 116928, 119569 116579, 119563 116573, 119312 116570, 119312 115057, 119563 115057, 119569 115051, 119569 114697, 119563 114691, 119308 114690, 119308 114580, 119563 114580, 119569 114574, 119569 114279, 119563 114273, 119308 114272, 119308 113762, 119563 113762, 119569 113756, 119569 113395, 119563 113389, 119308 113385, 119308 112989, 119563 112984, 119569 112978, 119569 112795, 119563 112789, 119308 112789, 119308 112391, 119643 112391, 119649 112385, 119649 101387, 119905 101388, 119911 101382, 119911 96450, 119905 96444, 119649 96443, 119649 81072, 119905 81071, 119911 81065, 119911 75734, 119904 75728, 119649 75780, 119649 74101, 119644 74095, 117527 73594, 117520 73600, 117518 75077, 117370 75274, 115698 74836, 115654 74564, 115648 74559, 115642 74565, 115641 74826, 114825 74618, 114816 74348, 114811 74342, 114804 74348, 114785 74603, 113950 74384, 113799 74111, 113792 74108, 113789 74111, 113639 74422, 113101 74282, 113099 74020, 113095 74014, 112771 73930, 112763 73936, 112763 74197, 112538 74135, 112539 73872, 112534 73866, 112459 73848, 112452 73854, 112453 74113, 111877 73967, 111879 73705, 111875 73699, 111795 73669, 111787 73675, 111788 73939, 111595 73887, 111593 73628, 111589 73622, 111534 73604, 111526 73610, 111527 73873, 110228 73534, 110069 73139, 110060 73136, 109919 73215, 109461 73094, 109461 72833, 109457 72827, 109228 72766, 109220 72772, 109221 73034, 108713 72888, 108712 72638, 108708 72632, 108568 72595, 108560 72601, 108560 72863, 107742 72652, 107723 72380, 107717 72374, 107711 72380, 107712 72645, 107402 72559, 107396 72298, 107392 72292, 107291 72264, 107283 72270, 107277 72533, 106484 72322, 106341 72170, 106332 72171, 106189 72483, 105802 72384, 105794 72119, 105789 72113, 105628 72072, 105621 72078, 105621 72338, 105264 72239, 105260 71981, 105256 71975, 104815 71861, 104807 71867, 104806 72127, 104306 71998, 104305 71736, 104301 71730, 104022 71651, 104014 71657, 104015 71795, 104001 71652, 103997 71647, 103631 71550, 103623 71556, 103623 71818, 102761 71591, 102614 71199, 102616 70519, 102612 70513, 102567 70501, 102565 70071, 102560 70065, 100566 69596, 100559 69602, 100559 70083, 99473 70085, 99432 69870, 99426 69865, 99420 69871, 99417 70084, 98445 70086, 98421 69873, 98415 69868, 98409 69874, 98410 70084, 96287 70090, 96286 68662, 96421 68660, 96427 68654, 96427 68322, 96515 68327, 96545 68662, 96350 69095, 96350 69101, 96473 69251, 96561 69577, 96568 69581, 96572 69579, 96972 69101, 96972 69094, 96843 68850, 96836 68847, 96692 68901, 96598 68630, 96623 68239, 96842 67828, 96978 67808, 96983 67802, 96983 67581, 97064 67374, 97064 67370, 96880 66941, 96875 66516, 97109 65993, 97156 66009, 97162 66008, 97573 65659, 97571 65648, 97420 65589, 97384 65328, 97374 65324, 97105 65552, 96965 65452, 96962 65451, 96696 65449, 96572 65227, 96569 65226, 96574 65224, 97030 64787, 97352 64950, 97372 65052, 97380 65057, 97527 64995, 97530 64992, 97648 64820, 97914 64796, 97915 64796, 98275 64657, 98449 64768, 98458 64765, 98621 64370, 98621 64369, 98673 64018, 98669 64011, 98664 64012, 98451 64125, 98345 64104, 98188 63946, 98180 63945, 97674 64363, 97672 64367, 97641 64563, 97564 64503, 97588 64369, 97585 64363, 97412 64270, 97107 63255, 97244 63255, 97497 63734), (97615 66125, 97205 66512, 97203 66517, 97224 66749, 97225 66751, 97327 66943, 97129 67369, 97128 67372, 97132 67802, 97134 67807, 97297 67931, 97304 67931, 97378 67895, 97642 68064, 97649 68064, 97918 67866, 97920 67863, 97969 67724, 97966 67717, 97960 67717, 97917 67738, 97845 67489, 97841 67485, 97647 67407, 97641 67409, 97592 67453, 97419 66943, 97676 66519, 97677 66515, 97625 66128, 97619 66123, 97615 66125), (98530 67798, 98528 67804, 98599 67992, 98608 67995, 98977 67807, 98980 67800, 98976 67796, 98774 67723, 98727 67627, 98718 67626, 98530 67798), (98273 67368, 98272 67373, 98302 67605, 98305 67609, 98449 67708, 98458 67705, 98589 67374, 98588 67369, 98457 67146, 98447 67145, 98273 67368), (99252 66120, 99092 66773, 99093 66777, 99253 67002, 99261 67004, 99264 67000, 99368 66354, 99367 66351, 99263 66119, 99256 66115, 99252 66120), (98257 66395, 98188 66340, 98178 66343, 98050 66716, 98053 66723, 98059 66723, 98184 66664, 98451 66719, 98457 66716, 98580 66519, 98581 66516, 98574 66330, 98567 66324, 98257 66395), (99793 65873, 99713 66084, 99713 66087, 99770 66553, 99778 66558, 99893 66522, 99895 66512, 99840 66458, 99887 65953, 99885 65948, 99803 65871, 99793 65873), (98987 65329, 98868 65840, 98870 65845, 98989 65972, 98997 65973, 98999 65969, 99063 65655, 99063 65653, 98999 65329, 98993 65324, 98987 65329), (97907 64803, 97843 65224, 97844 65224, 97686 65579, 97688 65586, 97695 65585, 97914 65353, 98182 65428, 98185 65428, 98343 65403, 98448 65492, 98455 65492, 98935 65230, 98938 65224, 98884 64975, 98878 64970, 98606 64978, 98427 64839, 98420 64839, 98037 65027, 97918 64801, 97911 64798, 97907 64803), (99793 64580, 99769 64795, 99528 65031, 99526 65034, 99467 65313, 99470 65319, 99529 65347, 99537 65345, 99849 64800, 99850 64796, 99805 64580, 99799 64575, 99793 64580)), ((96564 65219, 96569 65226, 96565 65224, 96561 65228, 96398 65652, 96398 65656, 96460 65818, 96465 65822, 96711 65853, 96781 66086, 96735 66239, 96735 66242, 96805 66515, 96526 66940, 96525 66942, 96415 67376, 96415 67377, 96424 67601, 96427 67606, 96571 67674, 96577 67674, 96709 67586, 96783 67801, 96572 68025, 96427 68041, 96427 67991, 96421 67985, 96287 67983, 96282 66876, 96476 66519, 96477 66514, 96416 66336, 96409 66332, 96282 66364, 96282 66282, 96416 66282, 96422 66276, 96422 66184, 96416 66178, 96282 66177, 96283 65387, 96416 65389, 96422 65383, 96422 65302, 96559 65230, 96560 65221, 96422 65068, 96432 64801, 96612 64725, 96564 65219))) \ No newline at end of file diff --git a/stress_benchmark/resources/045.settings b/stress_benchmark/resources/045.settings index 442c9a56b7..8952ed5dc0 100644 --- a/stress_benchmark/resources/045.settings +++ b/stress_benchmark/resources/045.settings @@ -156,6 +156,7 @@ machine_settings=0 raft_base_extruder_nr=0 z_seam_y=310 wall_overhang_angle=90 +seam_overhang_angle=30 draft_shield_height=10 _plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 travel_retract_before_outer_wall=False @@ -534,7 +535,6 @@ skirt_brim_minimal_length=250 cooling=0 brim_replaces_support=True wall_x_extruder_nr=-1 -support_interface_skip_height=0.2 machine_nozzle_head_distance=3 support_bottom_pattern=concentric raft_base_wall_count=1 diff --git a/stress_benchmark/resources/045.wkt b/stress_benchmark/resources/045.wkt index 5811a3c9c1..9a93baeaa6 100644 --- a/stress_benchmark/resources/045.wkt +++ b/stress_benchmark/resources/045.wkt @@ -1 +1 @@ -MULTIPOLYGON (((302030 234958, 302026 234978, 302005 234946)), ((302414 234417, 302456 234464, 302244 234612, 302232 234624, 302254 234461, 302238 234162)), ((302610 234480, 302659 234533, 302572 234595, 302456 234464, 302497 234436, 302561 234409)), ((304291 234278, 304213 234268, 304209 234256)), ((303386 234037, 303762 234137, 303742 234134, 303322 234200, 303292 234178, 302566 233851)), ((261951 233033, 261878 233014, 261873 233007, 261913 232965)), ((262907 232282, 262967 232628, 262960 232632, 262400 232746, 262069 232713, 261974 232459, 261695 232330, 261767 232262, 261783 232237, 262224 232153, 262682 231886, 262912 231700)), ((261976 232704, 262069 232713, 262077 232734, 261867 232713, 261836 232635)), ((263149 232614, 263148 232634, 262998 232699, 262963 232706, 262964 232698, 263148 232615, 262970 232644, 262967 232628, 263142 232543)), ((261348 232329, 261441 232372, 261502 232439, 261348 232329, 261314 232313, 261317 232307)), ((261783 232237, 261655 232261, 261624 232297, 261615 232293, 261479 232148, 261491 232138, 261896 232053)), ((299479 230332, 299507 230343, 299507 230350, 299403 230309)), ((299508 79655, 299479 79666, 299438 79678, 299508 79652)), ((262957 77366, 262964 77370, 262906 77716, 262914 78301, 262683 78114, 262224 77843, 261781 77760, 261767 77737, 261649 77624, 261695 77513, 262043 77288, 262396 77252)), ((261658 77737, 261781 77760, 261894 77945, 261600 77885, 261615 77705, 261620 77693)), ((262054 77281, 262043 77288, 261974 77295, 261619 77469, 261578 77532, 261557 77500, 261619 77469, 261665 77400, 261834 77290, 262061 77267)), ((263124 77377, 263123 77447, 262964 77370, 262969 77342, 262951 77331)), ((262992 77297, 263124 77354, 263124 77373, 263147 77383, 263124 77377, 263124 77373, 262944 77291, 262944 77287)), ((262946 77330, 262946 77335, 262861 77308)), ((303745 75860, 303776 75856, 303387 75956, 302604 76139, 303293 75819, 303316 75802)), ((302460 75532, 302421 75575, 302239 75837, 302255 75537, 302228 75340)), ((304210 75744, 304213 75732, 304293 75722)), ((302660 75466, 302618 75511, 302565 75588, 302495 75561, 302460 75532, 302573 75405)), ((302030 75040, 302005 75052, 302026 75021)), ((261929 231714, 261987 231728, 262024 231737, 261965 231743, 261964 231744)), ((250196 167964, 249781 166859, 249410 165810, 249081 164806, 248793 163847, 248543 162928, 248439 162511, 262246 162511, 262246 168087, 250245 168087)), ((305216 72882, 305560 73066, 305700 73216, 305897 73538, 306025 73910, 306110 74342, 306156 75147, 306100 75885, 305989 76355, 305715 76779, 305339 76921, 304832 76999, 304294 77123, 304267 77144, 304080 77197, 303969 77285, 303697 77688, 303528 78403, 303414 79639, 303369 80568, 303339 81658, 303323 82898, 303325 84270, 303369 86547, 303397 87358, 303528 89914, 303591 90804, 303668 91710, 303854 93596, 304101 95597, 304408 97735, 304779 100038, 305211 102530, 306306 108720, 306487 109788, 307077 113114, 307393 114843, 307734 116601, 307905 117411, 308096 118380, 308491 120165, 308913 121954, 309364 123737, 309834 125506, 310319 127258, 310813 128987, 312343 134172, 313076 136688, 313419 137910, 314054 140279, 314339 141436, 314606 142579, 314850 143690, 315071 144790, 315270 145874, 315445 146948, 315600 148007, 315798 149673, 315895 150763, 315971 151836, 316025 152897, 316055 153951, 316066 155001, 316056 156050, 316026 157103, 315972 158163, 315899 159238, 315800 160328, 315672 161438, 315523 162570, 315342 163732, 315128 164926, 314883 166156, 314606 167431, 314341 168572, 314053 169732, 313415 172123, 313070 173356, 310757 181334, 309795 184805, 309319 186608, 308844 188503, 308440 190211, 308048 191988, 307688 193743, 307350 195468, 307020 197265, 305399 206425, 304634 210849, 304318 212884, 304177 213866, 303972 215419, 303855 216403, 303735 217578, 303582 219329, 303523 220188, 303395 222678, 303368 223473, 303325 225730, 303323 227102, 303339 228345, 303369 229447, 303415 230384, 303515 231442, 303696 232309, 303969 232714, 304079 232800, 304253 232843, 304293 232874, 304846 233003, 305339 233077, 305714 233219, 305988 233642, 306101 234115, 306157 234852, 306111 235657, 306025 236088, 305896 236459, 305699 236782, 305560 236932, 305216 237117, 304835 237208, 304239 237208, 302574 236772, 301388 236477, 301232 236389, 300898 236109, 300621 235716, 300542 235522, 300465 235050, 300404 234233, 300146 233851, 299605 233489, 299409 233416, 299403 233412, 298276 232989, 296892 232594, 296145 232401, 294585 232023, 292872 231635, 291692 231379, 289967 231021, 288559 230741, 287192 230491, 285869 230262, 284591 230057, 283361 229876, 282181 229725, 281049 229604, 279970 229519, 278939 229465, 277941 229438, 277759 229440, 277753 229440, 276812 229450, 275737 229502, 275048 229557, 274219 229649, 273422 229764, 272629 229903, 271914 230058, 271196 230236, 270499 230430, 269819 230644, 269273 230830, 268608 231079, 267813 231406, 267049 231756, 266203 232196, 265990 232357, 265887 232417, 265332 232837, 265209 233013, 265059 233419, 265036 234114, 264979 234392, 264857 234696, 264634 235032, 264177 235377, 263873 235517, 263334 235629, 262603 235728, 262046 235760, 261408 235740, 260889 235690, 260723 235616, 260343 235428, 260134 235267, 259792 234815, 259562 234352, 259380 233797, 259269 233264, 259181 232697, 259113 232069, 259074 231561, 259016 230110, 259004 228898, 259019 227750, 259041 226885, 259099 225548, 259181 224640, 259274 224177, 259396 224038, 259698 224941, 259733 225006, 260028 226214, 260202 226811, 260392 227378, 260616 227890, 260905 228396, 261193 228637, 261323 228675, 261482 228422, 261563 228144, 261683 227331, 261746 226527, 261789 225624, 261826 224293, 261851 222906, 261879 218451, 261871 215290, 261836 212973, 261804 211948, 261757 210868, 261691 209746, 261598 208543, 261478 207374, 261315 206101, 261104 204760, 260825 203337, 260468 201827, 260035 200241, 259521 198591, 258935 196896, 258288 195182, 257604 193474, 256880 191776, 256141 190108, 255388 188464, 253865 185263, 249426 176269, 248752 174867, 248111 173501, 247507 172176, 246951 170901, 246435 169668, 245966 168488, 245553 167371, 245176 166292, 244841 165262, 244549 164268, 244287 163311, 244066 162387, 243870 161495, 243710 160626, 243573 159781, 243460 158954, 243370 158145, 243301 157347, 243254 156559, 243228 155776, 243218 155001, 243229 154221, 243256 153438, 243302 152651, 243371 151852, 243462 151043, 243574 150218, 243711 149371, 243867 148549, 244066 147611, 244291 146686, 244550 145729, 244847 144738, 245180 143706, 245554 142627, 245982 141486, 246438 140330, 246950 139104, 247511 137822, 248115 136498, 249429 133729, 250130 132296, 252346 127832, 253868 124737, 254631 123148, 255390 121532, 256143 119889, 256889 118205, 257607 116522, 258294 114814, 258938 113103, 259524 111405, 260036 109754, 260471 108169, 260824 106661, 261103 105239, 261317 103895, 261479 102623, 261602 101406, 261708 99998, 261807 98046, 261837 97000, 261871 94990, 261879 91213, 261850 87057, 261827 85704, 261794 84484, 261747 83470, 261662 82420, 261525 81647, 261325 81326, 261194 81362, 260906 81601, 260615 82106, 260392 82622, 260201 83187, 260027 83785, 259733 84992, 259698 85057, 259396 85960, 259274 85820, 259181 85358, 259098 84451, 259040 83114, 259018 82250, 259004 81100, 259011 80104, 259061 78666, 259113 77929, 259182 77301, 259268 76736, 259387 76177, 259561 75647, 259729 75291, 260122 74745, 260153 74715, 260341 74571, 260866 74311, 261407 74258, 262046 74239, 262609 74271, 263179 74346, 263857 74475, 264177 74623, 264650 74985, 264857 75302, 265017 75700, 265059 76580, 265209 76986, 265329 77159, 265886 77581, 265990 77641, 266195 77797, 267048 78243, 267813 78593, 268607 78920, 269272 79167, 269817 79355, 270497 79567, 271195 79762, 271913 79941, 272653 80097, 273422 80236, 274218 80348, 275047 80440, 275911 80508, 276812 80546, 277398 80553, 277967 80560, 279057 80528, 279970 80480, 281049 80394, 282180 80273, 283361 80122, 284591 79941, 285869 79736, 287192 79508, 288645 79241, 291414 78680, 292898 78358, 294678 77955, 296227 77578, 296892 77405, 298273 77010, 299404 76585, 299412 76580, 299607 76507, 300146 76147, 300403 75767, 300449 75372, 300472 74861, 300543 74475, 300621 74281, 300898 73889, 301233 73608, 301383 73524, 302575 73228, 304239 72792, 304833 72791) (261929 231714, 261815 231869, 261491 232138, 261473 232142, 261479 232148, 261464 232161, 261514 232364, 261537 232399, 261527 232412, 261555 232425, 261580 232463, 261557 232499, 261535 232489, 261503 232440, 261527 232412, 261441 232372, 261397 232324, 261324 232296, 261340 232264, 261464 232161, 261460 232145, 261473 232142, 261454 232121, 261434 232040, 261433 231585, 261202 231130, 261143 231064, 260943 230531, 261123 231113, 261372 231789, 261434 232040, 261434 232100, 261454 232121, 261460 232145, 261313 232176, 261267 232173, 261255 231907, 261235 231842, 261235 231735, 261148 231561, 261235 231842, 261234 232171, 260707 232135, 260500 232146, 260195 232032, 260659 232224, 260839 232270, 260514 232266, 260846 232412, 261315 232529, 261207 233099, 260978 233427, 260959 233960, 261147 233615, 261169 233592, 261165 233955, 261254 233874, 261275 233908, 261585 233447, 261797 233294, 261851 233321, 261931 233281, 262078 233066, 262020 233051, 262384 232996, 262385 232995, 262025 233047, 261913 232965, 261724 232680, 261771 232703, 261867 232713, 261926 232855, 262382 232816, 262475 232788, 262557 232782, 262583 232785, 262839 232732, 262385 232995, 262394 233015, 262556 233386, 262910 233532, 262915 233420, 263131 233508, 263126 232977, 263148 232634, 263928 232297, 264009 232272, 264592 231851, 264957 231443, 265357 230738, 265627 229813, 265721 229181, 265913 229104, 266100 228983, 266701 228705, 267340 228435, 268028 228170, 268512 227998, 269299 227742, 270122 227506, 270978 227290, 271873 227097, 272803 226929, 273771 226788, 274774 226679, 275815 226599, 276892 226553, 277816 226542, 278959 226567, 280151 226631, 281382 226730, 282647 226864, 283937 227027, 285258 227221, 286608 227438, 288091 227699, 289400 227941, 291118 228283, 292176 228505, 294154 228941, 295925 229357, 297482 229751, 298179 229946, 299323 230286, 299323 230339, 299442 231105, 299579 231856, 299709 232345, 300025 233088, 300296 233534, 300712 234052, 301305 234598, 301680 234847, 302102 235029, 302808 235463, 303548 235703, 303554 235704, 303748 235767, 304317 235856, 304836 235961, 304392 235839, 304060 235608, 303624 235362, 303007 234909, 302659 234533, 302674 234522, 303082 234345, 303350 234301, 303775 234619, 304101 234785, 304116 234755, 304296 234865, 304455 234488, 304318 234025, 304030 233437, 303593 232824, 303030 232249, 302406 231755, 301776 231353, 301176 231036, 300591 230769, 299507 230343, 299520 229894, 299471 228916, 299441 227799, 299427 226543, 299436 225160, 299463 223659, 299516 222050, 299604 220352, 299661 219447, 299804 217648, 299894 216704, 299999 215734, 300253 213713, 300560 211563, 300930 209263, 301170 207855, 301828 204138, 302909 198139, 303548 194805, 303904 193073, 304289 191305, 304706 189509, 305157 187694, 305632 185874, 306130 184059, 307164 180480, 307431 179607, 307684 178736, 309375 173174, 310066 170803, 310686 168545, 310964 167452, 311218 166379, 311454 165324, 311664 164286, 311854 163268, 312029 162194, 312165 161267, 312308 160063, 312408 159027, 312482 158007, 312535 156998, 312567 155996, 312577 155001, 312568 154000, 312536 152999, 312483 151991, 312407 150970, 312309 149933, 312185 148879, 312031 147803, 311848 146697, 311634 145556, 311385 144375, 311106 143154, 310793 141885, 310443 140566, 310061 139193, 309381 136884, 307711 131444, 306649 127914, 306174 126251, 305681 124470, 305206 122672, 304755 120864, 304339 119061, 303952 117271, 303592 115506, 303236 113668, 302644 110456, 301573 104465, 300985 101076, 300561 98442, 300344 96958, 300091 95041, 299982 94112, 299800 92300, 299659 90526, 299604 89698, 299520 88038, 299487 87131, 299437 84951, 299427 83561, 299440 82287, 299469 81144, 299521 80105, 299508 79655, 299667 79592, 299817 79536, 300221 79375, 300591 79230, 301176 78964, 301782 78641, 302407 78243, 303023 77755, 303592 77174, 304035 76560, 304319 75974, 304456 75509, 304295 75136, 304114 75245, 304100 75216, 303775 75379, 303330 75713, 303268 75705, 302672 75475, 302660 75466, 303011 75089, 303617 74641, 304057 74392, 304390 74161, 304835 74040, 304314 74144, 303758 74230, 303561 74294, 303558 74294, 302800 74539, 302101 74970, 301684 75151, 301309 75399, 300708 75953, 300297 76464, 300025 76908, 299709 77653, 299511 78397, 299386 79390, 299324 79658, 299324 79712, 298179 80053, 296732 80442, 295714 80693, 294020 81087, 292835 81349, 290841 81770, 289400 82057, 287861 82342, 286607 82560, 285258 82777, 283937 82970, 282646 83135, 281382 83270, 280152 83366, 278959 83431, 277848 83458, 276893 83446, 275816 83400, 274775 83322, 273772 83211, 272804 83069, 271874 82902, 270979 82709, 270123 82494, 269300 82258, 268512 82001, 268033 81832, 267341 81565, 266702 81295, 266101 81017, 265914 80894, 265722 80818, 265658 80316, 265520 79737, 265291 79067, 264957 78554, 264588 78147, 264013 77728, 263927 77701, 263124 77354, 263131 76492, 262915 76579, 262910 76468, 262554 76613, 262397 76981, 262387 77004, 262839 77266, 262578 77214, 262555 77216, 262499 77213, 262382 77182, 261924 77144, 261853 77278, 261834 77290, 261769 77297, 261715 77323, 261904 77034, 261869 76995, 261880 76978, 261956 76954, 261904 77034, 261909 77039, 262035 76947, 262281 76986, 262387 77004, 262386 77003, 262281 76986, 262003 76940, 262072 76918, 261930 76715, 261850 76676, 261802 76706, 261586 76552, 261274 76089, 261252 76122, 261164 76044, 261169 76404, 261148 76382, 260961 76066, 260979 76573, 261206 76901, 261316 77469, 260842 77586, 260521 77727, 260763 77740, 260634 77771, 260475 77844, 260970 77874, 261266 77830, 261254 78095, 261150 78432, 261262 78203, 261294 77826, 261300 77825, 261457 77857, 261371 78209, 261121 78884, 260937 79484, 261203 78868, 261202 78777, 261431 78236, 261583 78083, 261594 77947, 261496 77864, 261457 77857, 261462 77836, 261339 77733, 261318 77692, 261397 77673, 261502 77559, 261317 77691, 261307 77671, 261311 77629, 261362 77596, 261532 77512, 261502 77559, 261536 77598, 261512 77634, 261462 77836, 261496 77864, 261600 77885, 261594 77947, 261811 78129, 261928 78287, 261987 78273, 261965 78258, 262027 78264, 261987 78273, 262471 78615, 263191 79238, 263821 79697, 264400 80082, 264448 80111, 264597 80211, 265106 80514, 265254 80631, 265398 80688, 265516 80758, 265530 80850, 265610 81669, 265674 82772, 265715 83889, 265752 85703, 265768 87402, 265780 90850, 265772 94751, 265736 97143, 265702 98213, 265653 99316, 265585 100463, 265489 101662, 265362 102915, 265197 104237, 264970 105638, 264684 107126, 264304 108745, 263853 110392, 263296 112182, 262634 114092, 261875 116100, 261025 118181, 260125 120263, 259217 122286, 258065 124756, 256995 126990, 253465 134224, 252118 137065, 251506 138403, 250948 139681, 250437 140899, 249970 142057, 249559 143157, 249189 144206, 248865 145195, 248575 146164, 248322 147084, 248104 147968, 247915 148836, 247760 149647, 247627 150451, 247518 151237, 247434 152008, 247367 152768, 247321 153516, 247294 154260, 247284 155001, 247293 155738, 247322 156482, 247368 157233, 247434 157991, 247519 158761, 247626 159549, 247761 160354, 247933 161257, 248102 162032, 248221 162511, 247648 162511, 248072 164408, 248073 168087, 250026 168087, 250431 169099, 250941 170318, 251504 171594, 252113 172933, 252767 174325, 254190 177277, 256994 183015, 258309 185769, 259046 187350, 260121 189733, 261019 191813, 261869 193894, 262631 195905, 263274 197756, 263848 199603, 264309 201286, 264683 202870, 264970 204360, 265197 205762, 265362 207083, 265490 208337, 265585 209535, 265653 210682, 265702 211786, 265737 212856, 265770 214883, 265781 216800, 265767 222819, 265753 224298, 265711 226256, 265668 227372, 265595 228581, 265515 229242, 265310 229337, 265286 229354, 265255 229367, 265128 229467, 264596 229789, 264428 229902, 264401 229918, 263818 230302, 263194 230755, 262829 231086, 262433 231417, 261989 231726, 262091 231654))) \ No newline at end of file +MULTIPOLYGON (((302030 234958, 302026 234978, 302005 234946, 302030 234958)), ((302414 234417, 302456 234464, 302244 234612, 302232 234624, 302254 234461, 302238 234162, 302414 234417)), ((302610 234480, 302659 234533, 302572 234595, 302456 234464, 302497 234436, 302561 234409, 302610 234480)), ((304291 234278, 304213 234268, 304209 234256, 304291 234278)), ((303386 234037, 303762 234137, 303742 234134, 303322 234200, 303292 234178, 302566 233851, 303386 234037)), ((261951 233033, 261878 233014, 261873 233007, 261913 232965, 261951 233033)), ((262907 232282, 262967 232628, 262960 232632, 262400 232746, 262069 232713, 261974 232459, 261695 232330, 261767 232262, 261783 232237, 262224 232153, 262682 231886, 262912 231700, 262907 232282)), ((261976 232704, 262069 232713, 262077 232734, 261867 232713, 261836 232635, 261976 232704)), ((263149 232614, 263148 232634, 262998 232699, 262963 232706, 262964 232698, 263148 232615, 262970 232644, 262967 232628, 263142 232543, 263149 232614)), ((261348 232329, 261441 232372, 261502 232439, 261348 232329, 261314 232313, 261317 232307, 261348 232329)), ((261783 232237, 261655 232261, 261624 232297, 261615 232293, 261479 232148, 261491 232138, 261896 232053, 261783 232237)), ((299479 230332, 299507 230343, 299507 230350, 299403 230309, 299479 230332)), ((299508 79655, 299479 79666, 299438 79678, 299508 79652, 299508 79655)), ((262957 77366, 262964 77370, 262906 77716, 262914 78301, 262683 78114, 262224 77843, 261781 77760, 261767 77737, 261649 77624, 261695 77513, 262043 77288, 262396 77252, 262957 77366)), ((261658 77737, 261781 77760, 261894 77945, 261600 77885, 261615 77705, 261620 77693, 261658 77737)), ((262054 77281, 262043 77288, 261974 77295, 261619 77469, 261578 77532, 261557 77500, 261619 77469, 261665 77400, 261834 77290, 262061 77267, 262054 77281)), ((263124 77377, 263123 77447, 262964 77370, 262969 77342, 262951 77331, 263124 77377)), ((262992 77297, 263124 77354, 263124 77373, 263147 77383, 263124 77377, 263124 77373, 262944 77291, 262944 77287, 262992 77297)), ((262946 77330, 262946 77335, 262861 77308, 262946 77330)), ((303745 75860, 303776 75856, 303387 75956, 302604 76139, 303293 75819, 303316 75802, 303745 75860)), ((302460 75532, 302421 75575, 302239 75837, 302255 75537, 302228 75340, 302460 75532)), ((304210 75744, 304213 75732, 304293 75722, 304210 75744)), ((302660 75466, 302618 75511, 302565 75588, 302495 75561, 302460 75532, 302573 75405, 302660 75466)), ((302030 75040, 302005 75052, 302026 75021, 302030 75040)), ((261929 231714, 261987 231728, 262024 231737, 261965 231743, 261964 231744, 261929 231714)), ((250196 167964, 249781 166859, 249410 165810, 249081 164806, 248793 163847, 248543 162928, 248439 162511, 262246 162511, 262246 168087, 250245 168087, 250196 167964)), ((305216 72882, 305560 73066, 305700 73216, 305897 73538, 306025 73910, 306110 74342, 306156 75147, 306100 75885, 305989 76355, 305715 76779, 305339 76921, 304832 76999, 304294 77123, 304267 77144, 304080 77197, 303969 77285, 303697 77688, 303528 78403, 303414 79639, 303369 80568, 303339 81658, 303323 82898, 303325 84270, 303369 86547, 303397 87358, 303528 89914, 303591 90804, 303668 91710, 303854 93596, 304101 95597, 304408 97735, 304779 100038, 305211 102530, 306306 108720, 306487 109788, 307077 113114, 307393 114843, 307734 116601, 307905 117411, 308096 118380, 308491 120165, 308913 121954, 309364 123737, 309834 125506, 310319 127258, 310813 128987, 312343 134172, 313076 136688, 313419 137910, 314054 140279, 314339 141436, 314606 142579, 314850 143690, 315071 144790, 315270 145874, 315445 146948, 315600 148007, 315798 149673, 315895 150763, 315971 151836, 316025 152897, 316055 153951, 316066 155001, 316056 156050, 316026 157103, 315972 158163, 315899 159238, 315800 160328, 315672 161438, 315523 162570, 315342 163732, 315128 164926, 314883 166156, 314606 167431, 314341 168572, 314053 169732, 313415 172123, 313070 173356, 310757 181334, 309795 184805, 309319 186608, 308844 188503, 308440 190211, 308048 191988, 307688 193743, 307350 195468, 307020 197265, 305399 206425, 304634 210849, 304318 212884, 304177 213866, 303972 215419, 303855 216403, 303735 217578, 303582 219329, 303523 220188, 303395 222678, 303368 223473, 303325 225730, 303323 227102, 303339 228345, 303369 229447, 303415 230384, 303515 231442, 303696 232309, 303969 232714, 304079 232800, 304253 232843, 304293 232874, 304846 233003, 305339 233077, 305714 233219, 305988 233642, 306101 234115, 306157 234852, 306111 235657, 306025 236088, 305896 236459, 305699 236782, 305560 236932, 305216 237117, 304835 237208, 304239 237208, 302574 236772, 301388 236477, 301232 236389, 300898 236109, 300621 235716, 300542 235522, 300465 235050, 300404 234233, 300146 233851, 299605 233489, 299409 233416, 299403 233412, 298276 232989, 296892 232594, 296145 232401, 294585 232023, 292872 231635, 291692 231379, 289967 231021, 288559 230741, 287192 230491, 285869 230262, 284591 230057, 283361 229876, 282181 229725, 281049 229604, 279970 229519, 278939 229465, 277941 229438, 277759 229440, 277753 229440, 276812 229450, 275737 229502, 275048 229557, 274219 229649, 273422 229764, 272629 229903, 271914 230058, 271196 230236, 270499 230430, 269819 230644, 269273 230830, 268608 231079, 267813 231406, 267049 231756, 266203 232196, 265990 232357, 265887 232417, 265332 232837, 265209 233013, 265059 233419, 265036 234114, 264979 234392, 264857 234696, 264634 235032, 264177 235377, 263873 235517, 263334 235629, 262603 235728, 262046 235760, 261408 235740, 260889 235690, 260723 235616, 260343 235428, 260134 235267, 259792 234815, 259562 234352, 259380 233797, 259269 233264, 259181 232697, 259113 232069, 259074 231561, 259016 230110, 259004 228898, 259019 227750, 259041 226885, 259099 225548, 259181 224640, 259274 224177, 259396 224038, 259698 224941, 259733 225006, 260028 226214, 260202 226811, 260392 227378, 260616 227890, 260905 228396, 261193 228637, 261323 228675, 261482 228422, 261563 228144, 261683 227331, 261746 226527, 261789 225624, 261826 224293, 261851 222906, 261879 218451, 261871 215290, 261836 212973, 261804 211948, 261757 210868, 261691 209746, 261598 208543, 261478 207374, 261315 206101, 261104 204760, 260825 203337, 260468 201827, 260035 200241, 259521 198591, 258935 196896, 258288 195182, 257604 193474, 256880 191776, 256141 190108, 255388 188464, 253865 185263, 249426 176269, 248752 174867, 248111 173501, 247507 172176, 246951 170901, 246435 169668, 245966 168488, 245553 167371, 245176 166292, 244841 165262, 244549 164268, 244287 163311, 244066 162387, 243870 161495, 243710 160626, 243573 159781, 243460 158954, 243370 158145, 243301 157347, 243254 156559, 243228 155776, 243218 155001, 243229 154221, 243256 153438, 243302 152651, 243371 151852, 243462 151043, 243574 150218, 243711 149371, 243867 148549, 244066 147611, 244291 146686, 244550 145729, 244847 144738, 245180 143706, 245554 142627, 245982 141486, 246438 140330, 246950 139104, 247511 137822, 248115 136498, 249429 133729, 250130 132296, 252346 127832, 253868 124737, 254631 123148, 255390 121532, 256143 119889, 256889 118205, 257607 116522, 258294 114814, 258938 113103, 259524 111405, 260036 109754, 260471 108169, 260824 106661, 261103 105239, 261317 103895, 261479 102623, 261602 101406, 261708 99998, 261807 98046, 261837 97000, 261871 94990, 261879 91213, 261850 87057, 261827 85704, 261794 84484, 261747 83470, 261662 82420, 261525 81647, 261325 81326, 261194 81362, 260906 81601, 260615 82106, 260392 82622, 260201 83187, 260027 83785, 259733 84992, 259698 85057, 259396 85960, 259274 85820, 259181 85358, 259098 84451, 259040 83114, 259018 82250, 259004 81100, 259011 80104, 259061 78666, 259113 77929, 259182 77301, 259268 76736, 259387 76177, 259561 75647, 259729 75291, 260122 74745, 260153 74715, 260341 74571, 260866 74311, 261407 74258, 262046 74239, 262609 74271, 263179 74346, 263857 74475, 264177 74623, 264650 74985, 264857 75302, 265017 75700, 265059 76580, 265209 76986, 265329 77159, 265886 77581, 265990 77641, 266195 77797, 267048 78243, 267813 78593, 268607 78920, 269272 79167, 269817 79355, 270497 79567, 271195 79762, 271913 79941, 272653 80097, 273422 80236, 274218 80348, 275047 80440, 275911 80508, 276812 80546, 277398 80553, 277967 80560, 279057 80528, 279970 80480, 281049 80394, 282180 80273, 283361 80122, 284591 79941, 285869 79736, 287192 79508, 288645 79241, 291414 78680, 292898 78358, 294678 77955, 296227 77578, 296892 77405, 298273 77010, 299404 76585, 299412 76580, 299607 76507, 300146 76147, 300403 75767, 300449 75372, 300472 74861, 300543 74475, 300621 74281, 300898 73889, 301233 73608, 301383 73524, 302575 73228, 304239 72792, 304833 72791, 305216 72882), (261929 231714, 261815 231869, 261491 232138, 261473 232142, 261479 232148, 261464 232161, 261514 232364, 261537 232399, 261527 232412, 261555 232425, 261580 232463, 261557 232499, 261535 232489, 261503 232440, 261527 232412, 261441 232372, 261397 232324, 261324 232296, 261340 232264, 261464 232161, 261460 232145, 261473 232142, 261454 232121, 261434 232040, 261433 231585, 261202 231130, 261143 231064, 260943 230531, 261123 231113, 261372 231789, 261434 232040, 261434 232100, 261454 232121, 261460 232145, 261313 232176, 261267 232173, 261255 231907, 261235 231842, 261235 231735, 261148 231561, 261235 231842, 261234 232171, 260707 232135, 260500 232146, 260195 232032, 260659 232224, 260839 232270, 260514 232266, 260846 232412, 261315 232529, 261207 233099, 260978 233427, 260959 233960, 261147 233615, 261169 233592, 261165 233955, 261254 233874, 261275 233908, 261585 233447, 261797 233294, 261851 233321, 261931 233281, 262078 233066, 262020 233051, 262384 232996, 262385 232995, 262025 233047, 261913 232965, 261724 232680, 261771 232703, 261867 232713, 261926 232855, 262382 232816, 262475 232788, 262557 232782, 262583 232785, 262839 232732, 262385 232995, 262394 233015, 262556 233386, 262910 233532, 262915 233420, 263131 233508, 263126 232977, 263148 232634, 263928 232297, 264009 232272, 264592 231851, 264957 231443, 265357 230738, 265627 229813, 265721 229181, 265913 229104, 266100 228983, 266701 228705, 267340 228435, 268028 228170, 268512 227998, 269299 227742, 270122 227506, 270978 227290, 271873 227097, 272803 226929, 273771 226788, 274774 226679, 275815 226599, 276892 226553, 277816 226542, 278959 226567, 280151 226631, 281382 226730, 282647 226864, 283937 227027, 285258 227221, 286608 227438, 288091 227699, 289400 227941, 291118 228283, 292176 228505, 294154 228941, 295925 229357, 297482 229751, 298179 229946, 299323 230286, 299323 230339, 299442 231105, 299579 231856, 299709 232345, 300025 233088, 300296 233534, 300712 234052, 301305 234598, 301680 234847, 302102 235029, 302808 235463, 303548 235703, 303554 235704, 303748 235767, 304317 235856, 304836 235961, 304392 235839, 304060 235608, 303624 235362, 303007 234909, 302659 234533, 302674 234522, 303082 234345, 303350 234301, 303775 234619, 304101 234785, 304116 234755, 304296 234865, 304455 234488, 304318 234025, 304030 233437, 303593 232824, 303030 232249, 302406 231755, 301776 231353, 301176 231036, 300591 230769, 299507 230343, 299520 229894, 299471 228916, 299441 227799, 299427 226543, 299436 225160, 299463 223659, 299516 222050, 299604 220352, 299661 219447, 299804 217648, 299894 216704, 299999 215734, 300253 213713, 300560 211563, 300930 209263, 301170 207855, 301828 204138, 302909 198139, 303548 194805, 303904 193073, 304289 191305, 304706 189509, 305157 187694, 305632 185874, 306130 184059, 307164 180480, 307431 179607, 307684 178736, 309375 173174, 310066 170803, 310686 168545, 310964 167452, 311218 166379, 311454 165324, 311664 164286, 311854 163268, 312029 162194, 312165 161267, 312308 160063, 312408 159027, 312482 158007, 312535 156998, 312567 155996, 312577 155001, 312568 154000, 312536 152999, 312483 151991, 312407 150970, 312309 149933, 312185 148879, 312031 147803, 311848 146697, 311634 145556, 311385 144375, 311106 143154, 310793 141885, 310443 140566, 310061 139193, 309381 136884, 307711 131444, 306649 127914, 306174 126251, 305681 124470, 305206 122672, 304755 120864, 304339 119061, 303952 117271, 303592 115506, 303236 113668, 302644 110456, 301573 104465, 300985 101076, 300561 98442, 300344 96958, 300091 95041, 299982 94112, 299800 92300, 299659 90526, 299604 89698, 299520 88038, 299487 87131, 299437 84951, 299427 83561, 299440 82287, 299469 81144, 299521 80105, 299508 79655, 299667 79592, 299817 79536, 300221 79375, 300591 79230, 301176 78964, 301782 78641, 302407 78243, 303023 77755, 303592 77174, 304035 76560, 304319 75974, 304456 75509, 304295 75136, 304114 75245, 304100 75216, 303775 75379, 303330 75713, 303268 75705, 302672 75475, 302660 75466, 303011 75089, 303617 74641, 304057 74392, 304390 74161, 304835 74040, 304314 74144, 303758 74230, 303561 74294, 303558 74294, 302800 74539, 302101 74970, 301684 75151, 301309 75399, 300708 75953, 300297 76464, 300025 76908, 299709 77653, 299511 78397, 299386 79390, 299324 79658, 299324 79712, 298179 80053, 296732 80442, 295714 80693, 294020 81087, 292835 81349, 290841 81770, 289400 82057, 287861 82342, 286607 82560, 285258 82777, 283937 82970, 282646 83135, 281382 83270, 280152 83366, 278959 83431, 277848 83458, 276893 83446, 275816 83400, 274775 83322, 273772 83211, 272804 83069, 271874 82902, 270979 82709, 270123 82494, 269300 82258, 268512 82001, 268033 81832, 267341 81565, 266702 81295, 266101 81017, 265914 80894, 265722 80818, 265658 80316, 265520 79737, 265291 79067, 264957 78554, 264588 78147, 264013 77728, 263927 77701, 263124 77354, 263131 76492, 262915 76579, 262910 76468, 262554 76613, 262397 76981, 262387 77004, 262839 77266, 262578 77214, 262555 77216, 262499 77213, 262382 77182, 261924 77144, 261853 77278, 261834 77290, 261769 77297, 261715 77323, 261904 77034, 261869 76995, 261880 76978, 261956 76954, 261904 77034, 261909 77039, 262035 76947, 262281 76986, 262387 77004, 262386 77003, 262281 76986, 262003 76940, 262072 76918, 261930 76715, 261850 76676, 261802 76706, 261586 76552, 261274 76089, 261252 76122, 261164 76044, 261169 76404, 261148 76382, 260961 76066, 260979 76573, 261206 76901, 261316 77469, 260842 77586, 260521 77727, 260763 77740, 260634 77771, 260475 77844, 260970 77874, 261266 77830, 261254 78095, 261150 78432, 261262 78203, 261294 77826, 261300 77825, 261457 77857, 261371 78209, 261121 78884, 260937 79484, 261203 78868, 261202 78777, 261431 78236, 261583 78083, 261594 77947, 261496 77864, 261457 77857, 261462 77836, 261339 77733, 261318 77692, 261397 77673, 261502 77559, 261317 77691, 261307 77671, 261311 77629, 261362 77596, 261532 77512, 261502 77559, 261536 77598, 261512 77634, 261462 77836, 261496 77864, 261600 77885, 261594 77947, 261811 78129, 261928 78287, 261987 78273, 261965 78258, 262027 78264, 261987 78273, 262471 78615, 263191 79238, 263821 79697, 264400 80082, 264448 80111, 264597 80211, 265106 80514, 265254 80631, 265398 80688, 265516 80758, 265530 80850, 265610 81669, 265674 82772, 265715 83889, 265752 85703, 265768 87402, 265780 90850, 265772 94751, 265736 97143, 265702 98213, 265653 99316, 265585 100463, 265489 101662, 265362 102915, 265197 104237, 264970 105638, 264684 107126, 264304 108745, 263853 110392, 263296 112182, 262634 114092, 261875 116100, 261025 118181, 260125 120263, 259217 122286, 258065 124756, 256995 126990, 253465 134224, 252118 137065, 251506 138403, 250948 139681, 250437 140899, 249970 142057, 249559 143157, 249189 144206, 248865 145195, 248575 146164, 248322 147084, 248104 147968, 247915 148836, 247760 149647, 247627 150451, 247518 151237, 247434 152008, 247367 152768, 247321 153516, 247294 154260, 247284 155001, 247293 155738, 247322 156482, 247368 157233, 247434 157991, 247519 158761, 247626 159549, 247761 160354, 247933 161257, 248102 162032, 248221 162511, 247648 162511, 248072 164408, 248073 168087, 250026 168087, 250431 169099, 250941 170318, 251504 171594, 252113 172933, 252767 174325, 254190 177277, 256994 183015, 258309 185769, 259046 187350, 260121 189733, 261019 191813, 261869 193894, 262631 195905, 263274 197756, 263848 199603, 264309 201286, 264683 202870, 264970 204360, 265197 205762, 265362 207083, 265490 208337, 265585 209535, 265653 210682, 265702 211786, 265737 212856, 265770 214883, 265781 216800, 265767 222819, 265753 224298, 265711 226256, 265668 227372, 265595 228581, 265515 229242, 265310 229337, 265286 229354, 265255 229367, 265128 229467, 264596 229789, 264428 229902, 264401 229918, 263818 230302, 263194 230755, 262829 231086, 262433 231417, 261989 231726, 262091 231654, 261929 231714))) \ No newline at end of file diff --git a/stress_benchmark/resources/046.settings b/stress_benchmark/resources/046.settings index 8d590679fb..48d30b0005 100644 --- a/stress_benchmark/resources/046.settings +++ b/stress_benchmark/resources/046.settings @@ -156,6 +156,7 @@ machine_settings=0 raft_base_extruder_nr=0 z_seam_y=300 wall_overhang_angle=90 +seam_overhang_angle=30 draft_shield_height=10 _plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 travel_retract_before_outer_wall=True @@ -534,7 +535,6 @@ skirt_brim_minimal_length=250 cooling=0 brim_replaces_support=False wall_x_extruder_nr=-1 -support_interface_skip_height=0.2 machine_nozzle_head_distance=3 support_bottom_pattern=grid raft_base_wall_count=1 diff --git a/stress_benchmark/resources/046.wkt b/stress_benchmark/resources/046.wkt index c6e4284486..02547f5844 100644 --- a/stress_benchmark/resources/046.wkt +++ b/stress_benchmark/resources/046.wkt @@ -1 +1 @@ -MULTIPOLYGON (((110044 85277, 110072 85286, 110079 85299, 110063 85329, 110019 85734, 109934 85891, 109885 86013, 109904 86228, 109784 86283, 109721 86258, 109628 86250, 109536 86203, 109391 86107, 109325 86033, 109323 86000, 109285 85941, 109308 85859, 109612 85364, 109753 85277, 109893 85263, 110004 85229))) \ No newline at end of file +MULTIPOLYGON (((110044 85277, 110072 85286, 110079 85299, 110063 85329, 110019 85734, 109934 85891, 109885 86013, 109904 86228, 109784 86283, 109721 86258, 109628 86250, 109536 86203, 109391 86107, 109325 86033, 109323 86000, 109285 85941, 109308 85859, 109612 85364, 109753 85277, 109893 85263, 110004 85229, 110044 85277))) \ No newline at end of file diff --git a/stress_benchmark/resources/047.settings b/stress_benchmark/resources/047.settings index 0d58cef982..7f0aebca43 100644 --- a/stress_benchmark/resources/047.settings +++ b/stress_benchmark/resources/047.settings @@ -156,6 +156,7 @@ machine_settings=0 raft_base_extruder_nr=0 z_seam_y=210 wall_overhang_angle=90 +seam_overhang_angle=30 draft_shield_height=10 _plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 travel_retract_before_outer_wall=False @@ -534,7 +535,6 @@ skirt_brim_minimal_length=250 cooling=0 brim_replaces_support=True wall_x_extruder_nr=-1 -support_interface_skip_height=0.2 machine_nozzle_head_distance=3 support_bottom_pattern=concentric raft_base_wall_count=1 diff --git a/stress_benchmark/resources/047.wkt b/stress_benchmark/resources/047.wkt index b6f942f9a9..75972e1ab8 100644 --- a/stress_benchmark/resources/047.wkt +++ b/stress_benchmark/resources/047.wkt @@ -1 +1 @@ -MULTIPOLYGON (((106032 105050, 106062 105402, 105490 106002, 105085 106091, 104982 105403, 105068 105298, 105825 104922))) \ No newline at end of file +MULTIPOLYGON (((106032 105050, 106062 105402, 105490 106002, 105085 106091, 104982 105403, 105068 105298, 105825 104922, 106032 105050))) \ No newline at end of file diff --git a/stress_benchmark/resources/048.settings b/stress_benchmark/resources/048.settings index d293d5f621..5367dac44d 100644 --- a/stress_benchmark/resources/048.settings +++ b/stress_benchmark/resources/048.settings @@ -156,6 +156,7 @@ machine_settings=0 raft_base_extruder_nr=0 z_seam_y=235 wall_overhang_angle=90 +seam_overhang_angle=30 draft_shield_height=10 _plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 travel_retract_before_outer_wall=True @@ -532,7 +533,6 @@ skirt_brim_minimal_length=250 cooling=0 brim_replaces_support=False wall_x_extruder_nr=-1 -support_interface_skip_height=0.12 machine_nozzle_head_distance=3 support_bottom_pattern=grid raft_base_wall_count=1 diff --git a/stress_benchmark/resources/048.wkt b/stress_benchmark/resources/048.wkt index 43558a40ee..1b3b39da47 100644 --- a/stress_benchmark/resources/048.wkt +++ b/stress_benchmark/resources/048.wkt @@ -1 +1 @@ -MULTIPOLYGON (((134260 189842, 134788 191162, 136083 191813, 136689 193182, 134663 194101, 134353 193972, 134066 193721, 134214 191386, 133525 190548, 133455 189673)), ((151951 164738, 151585 166602, 151120 167119, 150266 167129, 150880 167732, 151138 168002, 151077 168451, 151213 168456, 151413 168570, 151780 168929, 151790 169443, 148149 171233, 146304 172747, 145689 173444, 144933 174436, 144692 174950, 144146 177004, 143942 178651, 143902 179598, 143995 180168, 144292 181448, 144704 182221, 145662 183599, 146909 184895, 149006 186636, 150224 187468, 150301 187562, 150080 188002, 149850 188210, 149960 188778, 150285 189906, 150196 190308, 148763 190905, 148689 190874, 147060 188925, 146876 188623, 146310 188676, 146223 188600, 146149 189095, 147162 189971, 147200 189965, 147297 189689, 147470 190452, 147620 190792, 147331 192040, 146971 192347, 145953 192259, 145519 192071, 144963 190770, 144714 190236, 144386 189439, 144753 188875, 144566 188392, 144530 188204, 144449 188052, 144248 187853, 143920 187621, 143713 187564, 143437 187212, 143165 186984, 143109 186875, 142958 187214, 142822 187383, 142474 187851, 141683 187600, 140961 187324, 140487 185840, 139941 185505, 139528 185183, 140075 184823, 139918 184437, 139848 184100, 139816 184065, 140099 183694, 139872 183570, 139324 183235, 139254 183279, 138582 183042, 137548 182065, 137405 181698, 137162 180851, 137427 180362, 137490 180019, 138988 177624, 140139 177691, 140171 176540, 140188 175002, 139833 174913, 137962 174561, 137944 174112, 137835 173498, 137944 173276, 138561 172355, 139739 171777, 140700 171579, 140705 171538, 140858 171533, 141133 171415, 141211 171275, 140416 170506, 140444 170212, 141495 169784, 141400 169218, 142228 167585, 143700 167343, 143809 167488, 144208 168248, 144275 168156, 144194 167515, 145151 166514, 146341 166978, 146464 166923, 146919 167347, 147506 166635, 148307 166502, 149089 166351, 149381 166315, 149468 166256, 149799 165307, 151848 164097) (144399 168763, 143810 169870, 143570 170218, 143488 170513, 143549 170619, 144499 170356, 144786 170302, 144941 169066, 144800 168941, 144603 168886, 144375 168637)), ((140190 163235, 140244 164334, 139810 165623, 138070 167102, 138231 167349, 138932 168076, 138925 168140, 135253 169405, 134378 169803, 132435 170854, 132181 171044, 131159 172124, 131096 172297, 130798 172668, 129655 175435, 129529 175963, 129111 178371, 129168 180278, 129537 181207, 129949 182317, 130095 182572, 131860 184968, 132166 185298, 134525 187424, 134599 187535, 134393 187697, 134090 187904, 134060 188007, 134138 188576, 134053 188809, 133707 188800, 132941 188839, 132339 188895, 131826 188089, 131318 188381, 131406 189351, 131839 190821, 131755 191044, 130749 191693, 130158 191563, 129047 190322, 128936 189933, 128811 190227, 128250 190365, 127819 190068, 127555 189580, 127555 189044, 127391 189369, 126667 189801, 125596 188987, 126834 188035, 127556 189041, 127544 188657, 126846 188009, 126855 187448, 126672 186968, 126659 186403, 126879 186277, 126947 186198, 127442 186027, 127773 186368, 127984 186721, 128478 186112, 127836 185298, 127560 185383, 127350 185587, 126835 186056, 126307 185804, 125334 185276, 125146 184242, 125062 184103, 124796 183889, 124144 183230, 124373 183119, 124258 182683, 123170 181786, 122482 181179, 122174 180377, 122104 179917, 122308 179505, 122446 179318, 122589 179207, 123467 179340, 123833 179246, 124540 179523, 126138 175954, 126424 174323, 126694 172602, 126677 171247, 125534 171036, 124437 170542, 124368 170131, 124297 169954, 124401 169681, 124992 168918, 125295 168809, 126011 168585, 126979 168318, 126777 168069, 127388 167889, 128050 167717, 128044 167518, 129160 165906, 130276 165877, 130744 165874, 130952 166461, 131129 166997, 131030 167376, 130721 168025, 132054 167912, 132147 167721, 131880 167505, 131809 167476, 131626 167207, 131408 166794, 131518 166679, 131468 166399, 131468 166097, 131712 165884, 132338 165387, 132616 165145, 132822 165172, 133856 165749, 134269 165630, 134402 165791, 134619 165588, 134939 165509, 136094 165501, 136440 165137, 137086 163866, 137306 163621, 137513 163448, 139723 162966) (128151 188066, 128342 188274, 128379 188268, 128448 188405, 128215 187618, 128072 187185)), ((144595 191292, 144560 191449, 144511 191468, 144408 191416, 144032 190795, 144441 190410)), ((142894 190693, 142856 190798, 142657 190956, 142304 190753, 142639 190418)), ((143542 188621, 143691 188757, 143941 189122, 144081 189811, 144007 190101, 143573 190362, 143061 190198, 142717 189953, 142523 188683, 142909 188395, 142939 188348, 143142 188196)), ((160542 166051, 161855 166825, 162212 167461, 162144 167844, 161788 168147, 161327 168575, 161380 168697, 161290 168615, 161228 168820, 160884 168990, 160933 169064, 160989 169015, 161553 169160, 161497 168790, 161833 168167, 162319 168244, 162493 168080, 162709 168085, 162969 168070, 163042 168311, 163478 169219, 161733 170819, 159869 172742, 159600 173198, 158915 174436, 158762 174906, 158604 175173, 158336 176286, 158358 176781, 158595 178373, 159483 180068, 159851 180696, 160869 181691, 162672 183113, 164951 184368, 165000 184959, 164749 185584, 164603 185666, 163577 185132, 163568 185196, 164057 185811, 165096 186668, 165365 187457, 165334 188673, 164902 188962, 163002 188572, 162831 188410, 161947 186845, 160810 186855, 160611 186823, 160355 186603, 160079 186657, 160012 186641, 159988 186702, 159656 186915, 158980 186968, 158687 186978, 158284 186924, 158058 187650, 156857 187510, 156588 187463, 155822 186084, 155904 185633, 154825 185249, 154821 185100, 155606 184337, 155431 184078, 155371 183817, 155489 183551, 156419 183586, 155895 183062, 155854 182943, 155681 182555, 155794 182463, 155674 182558, 155447 182898, 155373 182922, 155243 183113, 154811 182970, 154654 182885, 154462 182851, 154238 182412, 154211 182436, 153753 182332, 153652 182188, 153599 182335, 153396 182593, 152952 182610, 152755 182287, 152944 181942, 153094 181925, 153023 181892, 152959 181603, 153007 181476, 152996 181138, 152393 180428, 151673 179260, 151468 178090, 151557 177271, 151713 176247, 152014 175446, 152341 174920, 152520 174655, 152882 174271, 153451 173612, 153814 173641, 153959 173781, 154391 173562, 154768 173286, 154860 173238, 155279 172973, 155170 172889, 155123 172737, 155135 172631, 155286 172538, 155647 172451, 155436 172058, 154877 172297, 154925 172686, 154567 173275, 153864 173383, 153609 173397, 153358 173231, 153272 172791, 153335 172650, 153620 172297, 153259 172021, 153320 171318, 153734 171145, 153674 170533, 154012 170321, 154142 170326, 153723 169646, 153588 169279, 153714 168842, 154461 167907, 155162 167752, 155713 168256, 155857 168978, 155947 169244, 155891 169516, 155777 169916, 155706 170004, 154810 170437, 155426 170806, 155632 170892, 155952 170853, 156112 170858, 156302 170657, 156429 170093, 156351 168670, 156091 168535, 155962 168202, 155900 167615, 156292 167166, 156871 167194, 156949 167259, 157471 166895, 157715 166963, 158226 167176, 158265 167052, 158905 165983) (159084 169291, 159220 169417, 159295 169601, 159620 169849, 160050 169271, 159758 169154, 159022 168770)), ((123806 158287, 124448 159275, 124113 160713, 123585 161383, 123473 161410, 123580 161465, 123909 161335, 124694 161730, 125513 162507, 125679 162694, 125629 162863, 125269 163527, 125151 163678, 125896 163724, 125026 164437, 124336 164748, 123793 164829, 123334 164925, 121425 165424, 120013 165813, 117697 166960, 117170 167309, 116776 167714, 115922 168501, 115560 169080, 114774 170755, 113959 173030, 113775 173912, 113663 175083, 113720 175503, 113799 176325, 113917 176538, 114472 178189, 114619 178432, 114998 179243, 117255 182216, 117610 182650, 117727 182833, 117908 183026, 118301 183541, 118325 183663, 118604 184464, 118632 184620, 118190 184683, 117412 183986, 117111 184258, 116895 184226, 116771 184261, 117107 184658, 116722 186507, 115917 187105, 114566 186686, 114071 185953, 113919 185067, 113784 184563, 113813 184539, 113481 184279, 112959 183945, 112722 183750, 112372 184037, 111629 183861, 111481 183756, 111272 183514, 111043 182881, 111028 182653, 110417 182537, 109722 182429, 109084 182247, 107881 181362, 107276 180933, 106841 180315, 106624 180465, 105831 180947, 105637 181030, 104354 180063, 104193 178937, 104137 178434, 103352 178327, 102728 178213, 102296 177478, 102378 177987, 102137 178403, 100715 179315, 100211 179294, 99949 178851, 100050 177177, 100312 176725, 102078 176120, 102186 176790, 102222 175986, 102264 175888, 102132 175936, 101572 175669, 101173 175343, 101403 174377, 101873 174181, 100917 172405, 100974 172185, 102876 172553, 103080 172557, 103068 172606, 103709 172740, 104731 171594, 106206 169152, 106357 168845, 106806 166457, 106868 165216, 106852 164568, 106754 163839, 106631 163737, 106265 163655, 106151 163969, 105751 163814, 105039 163214, 105119 163024, 104583 162708, 104359 162613, 104386 162506, 104546 162312, 104596 162278, 104786 162086, 106947 161481, 107392 160131, 108263 159681, 109582 160366, 109920 160533, 110558 159343, 112014 159185, 112704 160425, 113133 160088, 113800 159951, 116580 159332, 117519 160168, 117950 161360, 117718 162149, 117616 162398, 118000 162463, 117926 162376, 119159 161490, 119528 161646, 120271 162058, 120313 162152, 119775 162510, 120580 162324, 120723 162439, 120903 162747, 121535 162059, 121668 161875, 121190 161950, 120945 161473, 120658 160962, 120473 160765, 120406 160383, 120471 160183, 121935 158087) (106651 178570, 106683 178839, 107036 178472, 107323 178424, 106690 178489, 106582 178402)), ((171881 166614, 171984 167370, 172340 167245, 172844 167466, 172870 167582, 173039 167453, 173150 167426, 173275 168175, 173121 169321, 173031 169687, 172928 169881, 172499 170367, 171975 171216, 172773 171191, 172402 172240, 172415 172422, 172684 172460, 173057 172632, 173571 173137, 173795 173778, 173773 174488, 173628 174868, 173329 175261, 172995 175426, 173231 175883, 173441 176142, 174291 176765, 173591 177232, 173434 177274, 173481 177532, 173949 177485, 174159 177515, 174905 177783, 175331 177997, 175894 178749, 176327 179266, 176593 179884, 176563 179897, 176201 179790, 176275 180391, 176045 180530, 175607 180774, 175583 180821, 175916 181019, 176105 181025, 176339 181408, 176329 181694, 175424 183173, 174481 183653, 174396 183652, 174150 183703, 173383 183240, 173140 183081, 172673 183619, 172113 183509, 171873 183655, 171555 183743, 171440 183661, 171565 184023, 171349 184508, 170755 184618, 169683 184002, 169551 183835, 169555 183608, 169746 182718, 169592 182772, 169332 182717, 169017 181376, 169096 181275, 169047 181245, 168855 180931, 168840 180679, 168906 180183, 168757 179790, 168460 179308, 168201 178972, 168127 178761, 167945 178733, 167589 178636, 167507 178224, 167837 177887, 168129 177993, 168482 178249, 168976 177932, 168935 177585, 168957 177362, 169186 176994, 168066 177117, 167811 177167, 167855 177323, 167854 177773, 167723 177715, 167608 177881, 167272 178206, 166928 178329, 166012 177922, 165897 177582, 165943 177489, 165874 177354, 165893 177054, 166037 176918, 166288 177093, 166540 177008, 166660 176930, 166563 176382, 166969 175912, 167018 176004, 167141 175864, 167196 175660, 167028 175631, 167013 175466, 167146 175305, 166617 175004, 166417 174955, 166340 174669, 166534 174164, 166621 174121, 166507 173868, 166604 173712, 166883 173427, 166797 173429, 166339 173629, 165391 173110, 165365 173059, 165614 172365, 166370 172397, 166696 172659, 167041 172971, 166998 173280, 167473 173279, 167723 173356, 167908 173494, 167977 173715, 168156 173598, 168131 173405, 167991 173420, 167915 173269, 167709 173070, 167473 172737, 167671 172469, 167661 172430, 167462 172374, 167240 172369, 166558 172168, 166322 171164, 167108 170543, 167187 170422, 167528 170133, 167514 170071, 167483 170117, 166558 170543, 166603 169502, 167096 169707, 167451 169907, 167358 169519, 167303 169226, 167398 168677, 167790 167926, 169699 167191, 170158 167339, 170284 167405, 171321 166382, 171630 166337) (170734 182279, 170332 182481, 170683 182482, 171051 182619, 170902 182238) (173016 180413, 172822 180460, 173195 181440, 173558 180676, 173655 180573, 173069 180286) (174607 179244, 174725 179685, 175283 179382, 174742 179002) (171186 169258, 171886 169346, 172186 168744, 172190 168654)), ((106826 182956, 106268 183987, 105877 184119, 105364 183759, 105089 183143, 105167 182208, 105808 181844, 106010 181668)), ((97555 178676, 97879 180294, 99212 181309, 99610 182991, 97539 183494, 97041 183169, 96617 182629, 97178 180428, 96576 179333, 96684 178332)), ((154126 182797, 154114 182988, 153781 183301, 153622 183350, 153337 183238, 153266 182933, 153328 182793, 153560 182537, 154101 182517)), ((168309 180100, 168358 180244, 168326 180321, 168192 180349, 168054 180265, 168078 180027)), ((108442 154069, 108265 155305, 107703 156320, 105644 157530, 105732 157735, 106296 158577, 103309 158996, 102508 159167, 100911 159658, 99439 160151, 99036 160349, 97982 161111, 97853 161320, 97395 161700, 95818 164090, 95525 164753, 94706 166908, 94432 168663, 94454 169012, 94824 171035, 96271 174000, 98371 176735, 98418 176841, 98206 176916, 97929 177071, 97812 177260, 97798 177574, 97651 177821, 97263 177744, 96627 177656, 95964 177603, 95695 176934, 95049 177160, 94971 177988, 95137 179616, 95067 179731, 93898 180212, 93434 180016, 92461 178417, 92439 178226, 92302 178402, 91674 178435, 91380 178141, 91162 177471, 91228 177118, 91078 177309, 90242 177616, 89278 176558, 90758 175812, 90877 175229, 90777 174686, 90861 174184, 91157 174041, 91649 173874, 91768 174114, 92065 174491, 92083 174562, 92663 174169, 92252 173378, 91841 173443, 91104 173931, 90899 173773, 90649 173597, 89765 172883, 89771 171890, 89710 171729, 89507 171492, 88966 170699, 89171 170644, 89144 170274, 87688 168433, 87609 168258, 87517 167601, 87529 167237, 87897 166761, 88148 166637, 88593 166792, 89350 166743, 90096 167209, 90223 166975, 92316 164028, 93348 161367, 93478 161010, 93774 159467, 93552 159372, 92646 159186, 91955 158544, 91704 158394, 91669 157834, 91833 157563, 92380 157075, 92595 156986, 94395 156811, 94327 156688, 95230 156585, 95616 156557, 95633 156447, 97007 155055, 98625 155258, 98796 156414, 98662 156696, 98325 157152, 99419 157233, 99589 157357, 99725 157235, 99489 156975, 99411 156927, 99190 156219, 99297 156138, 99301 155829, 99348 155585, 99668 155385, 100296 155029, 100740 154819, 100889 154860, 101784 155556, 102251 155499, 102321 155623, 102497 155509, 102871 155508, 103617 155596, 103976 155406, 103958 155569, 104360 155269, 105053 154354, 105477 154017, 105858 153790, 107979 153689) (91263 176860, 91338 176505, 91260 176561, 91148 176347, 90794 175869) (92043 176234, 92107 176231, 92162 176330, 92099 175513)), ((167986 179623, 167846 179893, 167448 180062, 167003 179820, 167124 179353, 167441 179273)), ((149349 176284, 149398 176350, 149696 176645, 150036 177396, 150027 178219, 149704 179032, 149350 179398, 148638 179764, 147683 179815, 146797 179249, 146401 178407, 146588 176853, 147281 176094, 147428 175980, 148672 175914)), ((167109 178864, 167088 179317, 166799 179609, 166645 179608, 166464 179370, 166453 179119, 166875 178740)), ((178260 164385, 178705 164890, 178892 165577, 178889 165705, 178945 165627, 179347 165481, 180774 165643, 181060 165836, 181186 165976, 181335 166948, 180674 167673, 181281 168176, 181342 168122, 181508 167687, 181508 167591, 181639 167505, 182137 167456, 182611 167542, 182951 167841, 182972 168299, 183019 168546, 183033 169103, 183056 169171, 183130 169627, 183522 169975, 183600 170015, 183983 170453, 184055 170551, 184421 170869, 184438 171064, 184323 171330, 184001 171977, 183791 172126, 183379 172003, 183238 172402, 183432 172871, 183485 173174, 183374 173319, 183706 173467, 184023 173579, 184623 173501, 185228 174025, 185135 174278, 185159 174320, 185279 175144, 185302 175425, 184674 175953, 183824 176004, 183766 176278, 182795 176702, 183632 176940, 183811 177234, 183898 178526, 183926 179082, 183784 179331, 183509 179328, 182396 178638, 181996 178216, 182006 177900, 182033 177523, 181951 177422, 181686 177347, 181633 177251, 181261 177676, 180454 176643, 180792 176580, 180689 176538, 180693 176499, 180507 176316, 180258 175864, 179873 176120, 179652 176095, 179029 176175, 178839 176024, 178393 175322, 178488 175100, 178312 174962, 178360 174731, 178578 174797, 178637 174582, 178751 174664, 178923 174543, 178846 174147, 179117 173958, 179107 173805, 179270 173418, 179286 173281, 179204 173086, 179103 173405, 178943 173682, 178380 173851, 178102 173960, 177669 174093, 177263 173518, 177175 173286, 176989 172989, 176979 172493, 177061 172133, 177209 171797, 177814 171609, 177733 171272, 177549 170598, 177943 169849, 178191 169724, 178251 169452, 177352 169678, 177167 169338, 177114 169334, 176708 168906, 176609 169021, 176040 168826, 175873 168365, 176186 167997, 176693 168016, 176763 168131, 176927 167919, 177250 167591, 177439 167634, 178051 168070, 178054 168178, 178295 167919, 178456 167894, 178120 167469, 178198 166611, 177631 167167, 177442 167339, 177292 167198, 177023 167105, 176662 166837, 176242 166058, 176275 165891, 177048 164868, 177915 164338) (180212 172397, 180383 172546, 180465 172912, 180715 172518, 180314 172086)), ((135075 174969, 135232 175100, 135714 175448, 135769 175545, 136029 175878, 136276 176673, 136204 177314, 136157 177570, 135898 178096, 135649 178397, 135128 178796, 134474 178988, 133490 178921, 132650 178213, 132556 177965, 132328 177246, 132670 175904, 132762 175639, 133268 175162, 133508 175022, 134103 174818)), ((161813 175235, 161849 175267, 162185 175487, 162597 176037, 162786 176837, 162607 177683, 162390 178034, 161957 178435, 160978 178732, 160061 178369, 159565 177693, 159458 176223, 160031 175299, 161165 175024)), ((186306 176536, 186360 176911, 186075 177651, 185547 178054, 184724 178230, 184165 178062, 184075 177921, 184598 176142, 185126 175935, 185548 176012, 185611 175933)), ((165238 176727, 165211 176954, 165060 176991, 164958 176964, 164929 176830, 165061 176650)), ((165541 174222, 166037 174451, 166184 174553, 166265 175055, 166078 175208, 166365 175127, 166668 175306, 166659 175648, 166676 175804, 166506 176151, 166433 176202, 165790 176373, 165639 176434, 165545 176414, 165296 175951, 165308 175837, 165542 175432, 165314 175285, 165228 175252, 165165 175115, 165119 174541, 165166 174504, 164870 174456, 164821 173970, 165326 173871)), ((186722 174501, 186888 175144, 186778 175296, 186356 175668, 185594 175567, 185560 175382, 185383 174833, 185952 174343)), ((121167 171759, 121609 171832, 122400 172670, 122641 173704, 122458 174301, 122327 174643, 121999 174900, 121036 175470, 120693 175488, 119689 175116, 119451 174987, 119388 174879, 119205 174670, 119046 174365, 118912 173837, 118872 173309, 119069 172870, 119256 172415, 119581 172154, 120027 171822, 120596 171695)), ((177275 174169, 177416 174285, 177321 174533, 177092 174637, 176740 174516, 176682 174414, 176716 174251, 176936 174111)), ((153258 173597, 153008 173968, 152683 173809, 152709 173669, 152946 173374)), ((164709 173101, 164633 173299, 164442 173239, 164398 173083, 164479 172977, 164627 172975)), ((87659 149905, 87838 150844, 87900 150643, 88181 150168, 89062 149977, 89739 150532, 89782 150722, 90117 150734, 90460 151292, 91174 150987, 91608 150787, 92149 150938, 92657 151108, 93212 151560, 93968 153356, 93910 153799, 93690 154157, 93588 154130, 93219 154154, 93433 154377, 93491 154505, 93793 154631, 93949 154860, 93851 155369, 93657 155797, 92333 155805, 90703 155971, 88983 156251, 88134 156452, 85963 157365, 84586 158486, 83416 160645, 83113 162532, 83058 163003, 83210 164061, 83451 165532, 83666 166336, 85308 169959, 85243 170060, 84958 170271, 84434 170617, 84305 170609, 84207 170441, 84211 170553, 84418 171338, 84347 171733, 83338 173015, 82460 172965, 81598 171994, 81360 171066, 81279 170147, 81321 169756, 81227 169855, 81092 169801, 80723 169174, 79856 170096, 79502 169076, 79727 168775, 79755 168691, 79873 168582, 79859 168505, 79415 168135, 79140 167971, 78862 167784, 78691 167229, 78637 167145, 78451 167324, 78194 167508, 77869 167682, 77094 166947, 76786 166620, 77010 165024, 77209 164838, 76537 163821, 77599 163683, 77618 163409, 77672 163192, 77638 163087, 78084 162866, 78861 163497, 78914 162751, 78690 162503, 78606 162587, 78451 162633, 78269 162483, 78179 162303, 78146 162046, 77965 161721, 77362 161788, 77017 161450, 77135 161310, 77276 161059, 77328 161039, 76931 160765, 76977 160367, 77145 160302, 76918 159309, 76932 158916, 77107 157817, 77916 156167, 78326 155614, 78607 155017, 79741 153812, 79994 153660, 81106 153255, 82052 153079, 82218 152923, 82391 152878, 82852 152916, 82925 153142, 83042 152849, 83220 152756, 82911 152716, 82808 152581, 82781 152367, 82918 152181, 83109 152158, 83375 152354, 83407 152495, 83474 152361, 83838 151955, 83851 151962, 84332 151181, 84965 151228, 85227 150320, 86169 149605, 86684 149468) (84655 153555, 85262 153594, 85275 153488, 84726 153409) (87379 151637, 86847 152026, 86416 152269, 85911 152265, 86043 152545, 86048 152622, 86204 152902, 86267 152917, 86579 153166, 87051 152879, 87746 152037, 88003 151647, 87691 151360)), ((176311 172505, 176290 172816, 176014 172963, 175901 172799, 175982 172597, 176211 172475)), ((80664 171473, 80167 172305, 79412 172061, 79037 171624, 79055 171206, 80242 170463)), ((187933 161034, 188036 161336, 187993 161722, 187725 161915, 188341 162067, 188973 162507, 189098 162671, 189128 162895, 189187 162902, 189520 162778, 189918 162451, 190168 162656, 190260 162616, 190598 162794, 190697 163133, 191085 163559, 191488 164276, 191871 164523, 192120 165106, 191900 165380, 191979 165987, 191995 166263, 191940 166643, 192337 167225, 191651 168828, 191724 168864, 191674 168823, 192363 168258, 192719 168200, 192825 167645, 193114 167522, 193584 167559, 193876 167862, 193815 168190, 193378 168534, 194170 169184, 194202 169289, 194151 169349, 193904 169408, 192262 169201, 192588 169883, 192438 170312, 191469 171153, 190645 171319, 190170 171223, 189540 170470, 189473 170050, 189536 169736, 189804 169596, 190077 169411, 189592 169064, 189349 168984, 189247 168824, 189144 168877, 189419 169514, 189461 169712, 188806 170339, 188751 170338, 188754 170383, 188629 170637, 188064 170766, 187613 170388, 187669 169644, 187704 169571, 187621 169311, 188130 168685, 188079 168472, 188240 168464, 188231 168438, 187825 168279, 187763 168130, 187551 167805, 187552 167548, 187606 167490, 187015 167271, 187536 167653, 187347 169030, 186795 169174, 186190 169032, 185578 168432, 185433 168219, 185377 167928, 185391 167589, 186451 167005, 186263 166919, 185788 165929, 186034 165138, 186409 164950, 186406 164575, 186887 164381, 187289 164665, 187188 165061, 188251 165387, 188669 166201, 188519 167202, 188583 167252, 188797 167790, 188913 167738, 189094 167768, 189324 167961, 189660 167165, 189458 167009, 189380 166896, 189436 166685, 189491 166359, 188839 165835, 188302 165366, 187585 164999, 188218 164302, 186642 164006, 186558 164122, 186393 164137, 186308 164002, 186418 163858, 186625 163935, 186614 163116, 186674 162743, 186637 162689, 187036 162213, 186451 162678, 186322 162571, 186204 162134, 186791 161313, 187330 160985, 187783 160955)), ((78254 168869, 78014 169931, 77916 170047, 77869 170052, 77792 169979, 77666 169358, 78026 168855, 78233 168814)), ((101228 164615, 101381 164796, 101816 165213, 101843 165301, 102043 165701, 102139 166503, 101896 167310, 101498 167847, 101192 168098, 100690 168354, 99914 168450, 98964 168188, 98279 167360, 98233 167097, 98141 166357, 98721 165117, 98867 164872, 99447 164498, 99718 164401, 100371 164302)), ((168226 167199, 168080 167562, 167866 167584, 167739 167349, 167660 166194)), ((173068 165832, 173151 165966, 173104 166184, 172693 166426, 172536 166053, 172861 165808)), ((134593 165161, 134445 165231, 134116 165268, 134111 164846, 134527 164591)), ((170746 164740, 170794 164800, 170791 164994, 170632 165121, 170085 165057, 170229 164829, 170426 164704, 170598 164683)), ((77719 143344, 77721 143872, 76825 145101, 76680 145168, 75468 144686, 75680 145695, 76029 145989, 76032 146090, 76233 146029, 76458 146031, 76852 145806, 78066 144556, 78015 144382, 78126 144156, 78398 143849, 78811 143837, 79071 144147, 79073 144197, 79908 144380, 80227 145203, 80372 145145, 81097 144984, 81578 145197, 82461 146241, 82726 147480, 82539 148058, 81876 148480, 81288 148424, 81175 148478, 80497 148185, 80328 148307, 80490 148508, 80539 148855, 80610 149190, 80998 149206, 81263 148684, 81675 148578, 81831 148817, 82374 148858, 82781 149308, 82585 149675, 82379 150007, 82287 150003, 82105 150327, 81810 150627, 79005 150393, 76909 150545, 75844 150772, 75055 151134, 74527 151244, 73854 151626, 73293 152192, 72612 153038, 71978 154806, 71711 155659, 71690 156409, 71928 159571, 72355 161303, 71764 161947, 71391 162096, 71146 162021, 71071 161946, 70958 161443, 70876 160906, 70647 161254, 70428 161258, 70384 161533, 70471 163013, 69736 164361, 69197 164831, 68902 164758, 68220 163620, 67962 162771, 68457 161263, 68081 160905, 67568 160356, 67456 160173, 67443 159659, 67356 159592, 67264 159420, 67083 159480, 66933 159450, 66700 159333, 66236 158936, 66046 158735, 65873 158498, 65131 158870, 64295 157730, 64790 156242, 65268 155936, 64890 155039, 65147 154767, 66112 154825, 66169 154590, 66147 154423, 66571 154283, 66963 154746, 66985 154221, 67089 154034, 67206 153760, 67590 153819, 67537 154146, 67659 154321, 67857 154269, 68077 153723, 67670 153635, 67208 153722, 67179 153744, 66801 153826, 66613 153717, 66271 153148, 66507 152488, 66409 152480, 66165 152120, 66326 151673, 66107 151582, 66076 151856, 65644 151928, 65341 151621, 65446 151245, 65827 151174, 66036 151359, 65994 151218, 66090 151080, 66453 150935, 66616 151299, 66813 151153, 67045 151055, 67075 150637, 67042 150149, 67129 149917, 67175 149592, 67204 149517, 67333 149038, 67596 148589, 68044 148127, 68246 147782, 68682 147461, 69023 147228, 70562 146606, 70648 146590, 70942 146120, 71597 146243, 71717 146581, 71749 146355, 71841 146202, 72122 146084, 72400 146149, 72519 146299, 72492 146621, 72372 146733, 72522 146756, 72538 146838, 72656 146781, 73761 146870, 73949 147348, 74005 147211, 73980 146931, 74178 146748, 74275 146777, 74524 146962, 74772 146930, 74787 146497, 74174 146185, 74112 146281, 73845 146534, 73283 146657, 72927 146356, 72505 145945, 72489 145818, 72733 145382, 72841 145333, 72964 145346, 73398 145319, 73396 144740, 73691 144509, 73962 144377, 74446 144574, 74494 144726, 74936 144234, 75184 144300, 75308 144443, 75377 144285, 75692 143175, 77303 143054) (73188 148727, 73265 148673, 73508 148695, 73849 148649, 73830 148472, 73305 148461, 72960 148357) (79059 147339, 79058 147513, 79168 147561, 79280 147980, 79926 147905, 80062 147919, 79993 147601, 79949 147318, 79740 146543)), ((185075 163636, 185117 163808, 184918 163939, 184762 163807, 184897 163569)), ((88213 159493, 88616 160061, 88764 160522, 88755 161347, 88429 161998, 88032 162399, 87728 162589, 87222 162776, 86544 162763, 85756 162433, 85227 161578, 85236 160704, 86046 159432, 87099 159019)), ((193569 162119, 193474 162468, 193157 162559, 193033 162250, 193254 162011)), ((194075 155047, 194631 155139, 194984 155287, 195198 155524, 195345 155936, 195306 156096, 195219 156216, 195377 156139, 195677 155830, 195938 155520, 196192 155565, 196583 155788, 196913 156033, 197298 156290, 198034 157116, 198113 157410, 198114 157929, 198008 158060, 198079 158072, 198561 157984, 198710 158155, 198809 158472, 198960 159103, 198967 159296, 198809 159962, 198396 160066, 198436 160126, 198370 160733, 197960 161314, 197132 161761, 197035 161730, 196731 161360, 196869 160771, 197237 159902, 197112 159576, 197082 159377, 196791 158958, 196522 159066, 195599 158553, 195289 158408, 194502 158176, 194864 157592, 194806 156933, 194739 156994, 194168 156992, 193781 156967, 193298 157079, 193200 156485, 193192 156299, 192955 156044, 193332 155386, 193395 155077, 193581 155012)), ((195710 161231, 195731 161391, 195566 161458, 195430 161350, 195321 161329, 195575 161130)), ((195336 160912, 195110 161286, 194594 161323, 194377 160957, 194598 160603, 195030 160499)), ((194394 159185, 194607 159472, 194625 159902, 194391 160055, 193732 159944, 193465 159561, 193489 159228, 193772 159072)), ((113743 157076, 113809 157713, 113576 158381, 112517 158788, 112447 158533, 112033 157737, 112196 157278, 112729 156697, 113303 156619)), ((76631 152936, 76723 153620, 76610 154298, 76160 154945, 75504 155372, 74643 155481, 73584 154889, 73244 153996, 73398 153203, 74395 152142, 75437 151939)), ((102833 155210, 102314 155221, 102042 155241, 102061 154959, 102138 154520, 102923 154200)), ((100833 153494, 100861 153535, 100829 153689, 100095 154703, 99827 154773, 99621 154179, 99891 153904, 100748 153490)), ((67346 137182, 67266 137778, 67142 138267, 67361 138135, 67476 137912, 67689 137934, 68184 137723, 68474 137698, 68822 137482, 69186 136954, 69529 136721, 70724 136478, 71330 136371, 71751 136557, 71823 137007, 71491 137739, 71066 138638, 70632 138977, 69871 138960, 70599 139601, 70579 140034, 70812 140053, 71120 140148, 71213 140208, 71503 140334, 71950 141104, 71733 141472, 71523 141970, 72000 142082, 71851 141804, 72314 141202, 73199 141374, 73401 142086, 73062 142554, 72715 142612, 72552 142574, 72337 142780, 71420 143397, 71013 143279, 70489 143160, 69353 143026, 67652 142788, 67597 142843, 67474 142805, 67483 142849, 67287 142807, 65883 143046, 65573 143048, 65884 143051, 66804 144212, 66775 144881, 66564 145412, 65979 146006, 65195 146295, 64811 146274, 64137 146017, 63578 145466, 63422 144559, 63722 143851, 64525 143284, 63697 143841, 63545 144091, 63373 144607, 62766 145479, 62288 146581, 62225 146854, 62123 147122, 61661 150931, 60548 151721, 60305 151486, 60314 150909, 60339 150518, 59788 150092, 59783 150127, 59995 150705, 59808 150959, 59502 151271, 59322 151238, 57777 151130, 58946 151863, 58897 152198, 58252 152968, 57412 153269, 57266 151715, 57571 151090, 56925 150165, 56660 149723, 56813 148699, 56657 148678, 56365 148553, 56349 148471, 55977 148179, 55656 147756, 55574 147579, 55215 147703, 54735 147678, 54150 146730, 54174 146546, 54825 145399, 55568 145114, 55448 144487, 56141 144010, 56807 144194, 56861 143902, 57197 143827, 57314 144040, 57208 143806, 57524 143430, 57718 143539, 57800 143876, 57896 143832, 58612 143131, 58913 142728, 58696 142655, 58445 142868, 58131 142981, 57743 143268, 57358 143261, 56975 142694, 57344 142137, 57351 141846, 57302 141833, 57084 141466, 57394 140952, 57904 140717, 58476 140918, 58865 141112, 58932 140880, 58973 140625, 58992 140228, 59313 140009, 59386 140016, 59509 139849, 59751 139698, 59781 139627, 60080 139380, 60141 139440, 60488 139603, 60356 139946, 60065 140088, 60291 140247, 60503 139914, 60611 139683, 60243 139303, 60236 139258, 59977 139411, 59622 139215, 59528 139088, 59491 138760, 59508 138628, 59963 138438, 60059 138455, 60433 138735, 60436 138800, 60501 138721, 60583 138699, 60478 138654, 60398 138499, 60465 138112, 60535 138065, 60911 138099, 60922 138339, 61190 138475, 61570 138261, 61638 138299, 62047 138396, 62444 138270, 62023 138007, 62012 137956, 62226 137619, 62318 137534, 62654 137622, 62803 138077, 62587 138280, 62556 138346, 62438 138394, 62099 138424, 62148 138670, 62217 138918, 62157 138983, 62312 139020, 62382 138914, 62397 138721, 62763 138603, 62935 138785, 62982 138895, 62909 138995, 63128 139005, 62869 138570, 62910 138062, 62908 137661, 62991 137572, 62512 137503, 62496 137276, 62410 136939, 62796 136519, 63321 136647, 63465 137183, 63228 137471, 63349 137520, 63901 137553, 64280 138010, 64924 137707, 65023 137734, 64875 138281, 64636 138489, 64632 138545, 64420 138868, 64350 138841, 64077 139342, 64194 139668, 64743 139801, 64988 139639, 64963 139229, 64908 139082, 64937 138826, 64908 138681, 65036 138461, 65083 138419, 65266 138197, 65497 138035, 65699 138025, 66060 138235, 66935 138392, 67128 138276, 66784 138271, 66298 137847, 65839 137420, 65715 137341, 65860 137181, 65881 137015, 67241 136032, 67358 135990) (59066 147937, 59377 147992, 59281 147849, 59442 147596)), ((65755 152230, 65921 152438, 65716 152616, 65469 152620, 65185 152453, 65150 152362, 65206 152280, 65513 152178)), ((200587 148457, 201394 148832, 201726 148973, 202121 149289, 202364 149733, 202428 150030, 202185 150498, 202411 150487, 203200 150202, 203888 151425, 203894 151584, 203786 152014, 203532 152137, 202987 152338, 202640 152333, 202498 152098, 201725 151367, 202010 151075, 202121 150596, 201887 150940, 201350 151374, 200948 151260, 199958 151149, 199506 151036, 199323 151021, 199469 150607, 199376 150248, 199025 149582, 199385 149250, 199421 149230, 199559 149006, 199892 148389, 200336 148374)), ((199174 148285, 199239 148396, 199219 149069, 199020 149521, 198749 149542, 197795 149983, 197678 149586, 197191 149242, 197293 148921, 197353 148159, 198764 147989)), ((206352 143153, 206381 143494, 205794 144050, 205128 143807, 204738 143583, 204734 143146, 204832 142741, 205735 142456)), ((203891 141343, 204076 141424, 204509 141909, 204567 142026, 204297 142913, 204199 143166, 203984 143434, 203659 143425, 202797 143530, 202078 143647, 202114 143385, 202011 143213, 201375 142511, 201554 142255, 201836 141219, 202446 141055)), ((200799 141193, 201101 141962, 200740 142371, 200214 142787, 200190 142741, 199659 142527, 199472 142387, 199561 141390, 200461 141087)), ((56785 140318, 57002 140633, 56855 141002, 56452 140990, 56223 140645, 56400 140310)), ((58278 140135, 58419 140128, 58775 140608, 58705 140670, 58610 140927, 57942 140722, 57703 140309, 57986 140050)), ((72263 137832, 73157 138469, 73546 139176, 73555 139925, 73380 140236, 72537 140556, 71711 140080, 71476 139232, 71465 138578, 71480 138070, 71883 137766)), ((58676 127906, 58782 128652, 58575 129030, 58319 129439, 58028 129452, 58115 129902, 58068 130222, 57837 130392, 57818 130491, 57903 130611, 58045 130566, 58017 130478, 58169 130275, 58294 130189, 58616 129809, 58934 129962, 58975 129943, 58987 129630, 59048 128835, 59170 128748, 59981 128392, 60724 129045, 60890 129115, 61217 129381, 61240 129371, 60600 128468, 61683 128318, 61566 128864, 61420 129312, 61753 129121, 62058 129009, 62574 128972, 63433 129233, 64523 131004, 64462 131444, 64409 131609, 65564 132416, 65692 132753, 65447 133073, 64757 133295, 64932 133602, 64857 133960, 64841 134140, 64739 134184, 64913 134343, 64953 134437, 64186 134716, 62947 134776, 62648 134760, 62480 134705, 61819 134307, 60948 133968, 61110 134715, 59981 134536, 59833 134577, 59845 134890, 59723 135338, 59316 135919, 58765 136230, 58191 136347, 57535 136234, 57066 135920, 56908 135693, 56827 135759, 55850 137199, 55654 137029, 55286 136644, 55226 136516, 55010 136596, 55124 136989, 55133 137230, 54978 138151, 54872 138510, 54200 139234, 53784 139735, 53168 140144, 53189 139697, 52658 139861, 52164 139272, 52113 139256, 51981 139609, 52010 139811, 51649 140136, 51400 140173, 49752 139536, 49152 138748, 49134 138644, 49018 138359, 49444 137259, 48838 136910, 48846 136342, 48659 136126, 48510 135817, 48566 135696, 48259 135884, 47707 135743, 47496 135167, 47895 134036, 48066 133841, 48337 133798, 49186 133826, 49107 133693, 49113 133411, 50368 132871, 50508 132944, 50532 132879, 50780 132654, 51048 132589, 51523 132564, 51862 132406, 51933 132285, 52441 131834, 52628 131647, 52785 131557, 52717 130980, 53275 130804, 53621 131088, 53573 131386, 53496 131493, 53380 131799, 53753 132198, 53929 132204, 54346 132108, 54588 132206, 54749 132244, 54353 130943, 54197 131018, 53723 131133, 53761 130956, 53259 130715, 53202 130591, 53017 130280, 53250 129302, 53573 129130, 53680 129161, 53887 129003, 54054 128986, 54268 129143, 54144 129461, 54349 129759, 54840 129571, 55078 129696, 55375 129873, 55302 129928, 55428 130019, 55660 130120, 55693 130001, 55863 129829, 56039 129931, 56226 129381, 56241 129163, 56522 129031, 57073 129133, 57118 129224, 57378 129040, 57834 129350, 57813 129252, 57535 128833, 57834 127958, 57862 127827, 57932 127777) (53082 138202, 53463 138683, 53633 138357, 53212 138149) (51103 137014, 51886 137214, 52020 137303, 52197 136682, 52066 136651, 51988 136470) (49620 134754, 49556 135103, 49874 134909, 49796 134732, 49554 134408) (62760 133505, 63337 133669, 63420 133660, 62725 132884)), ((59103 139236, 59417 139747, 59406 139846, 59226 140020, 58985 140162, 58478 139954, 58529 139395, 58739 139150)), ((65191 136608, 65536 137034, 65504 137273, 65195 137509, 64852 137481, 64397 136829, 64709 136536)), ((66233 135818, 66263 136090, 65964 136366, 65644 136147, 65801 135782, 66074 135713)), ((204568 133765, 205115 134114, 205153 134965, 205113 135392, 203401 136067, 203392 135955, 202476 135285, 202527 134397, 202631 134019, 203259 133740)), ((69763 135230, 69817 135286, 69801 135366, 69586 135564, 68010 135845, 69509 135198)), ((201061 134317, 201155 134462, 201019 134700, 200842 134618, 200818 134410, 200988 134310)), ((66450 133845, 66466 134074, 66338 134190, 66092 134181, 65751 133788, 66120 133543)), ((51539 131953, 51390 132037, 51297 132018, 51238 131872, 51310 131699, 51576 131679)), ((66915 131046, 67097 131240, 67154 131427, 67121 131604, 67064 131669, 66847 131707, 66704 131561, 66629 130929)), ((52625 130299, 52546 130568, 52073 130638, 52194 130937, 51946 131585, 51643 131490, 51394 131111, 51552 130595, 52043 130626, 51701 130386, 51677 130229, 51893 129996, 52150 129935)), ((64276 129587, 63820 129497, 63751 129251, 64002 129051, 65282 128730)), ((56960 127442, 57138 127900, 56844 128160, 56778 128134, 56814 128165, 56679 128698, 56599 128875, 56126 129040, 55958 128897, 56076 129144, 55953 129478, 55624 129529, 55423 129573, 55094 129474, 55026 129406, 54747 128814, 54655 128669, 54658 128568, 55070 128240, 55189 128230, 55623 128385, 55736 128059, 55869 127966, 56422 127817, 56482 127871, 56463 127559, 56922 127423)), ((203915 126975, 204087 127786, 203074 128572, 202336 128030, 202429 127162, 202775 126934, 203557 126821)), ((54373 128134, 54327 128343, 54071 128355, 54000 128199, 54010 128084, 54151 128026)), ((51152 111683, 51417 111718, 51589 112027, 51799 112523, 51944 112496, 52297 112355, 53147 112700, 53391 113240, 53312 113740, 53390 113742, 53670 114279, 53605 114428, 53725 114340, 53899 114326, 53780 114255, 53877 113784, 53877 113538, 54122 113330, 54702 112959, 55409 113368, 55370 113796, 55716 113971, 55863 114379, 56114 114236, 56511 114414, 56552 114403, 56219 113590, 56630 113346, 56065 113441, 55446 112600, 56238 111958, 57040 112297, 57144 112842, 56988 113066, 57378 112939, 57617 113055, 58026 113204, 58214 113636, 57784 114325, 57482 114536, 57253 114631, 57442 114757, 57565 114982, 58056 115192, 58527 115785, 59279 116960, 59350 117163, 58951 118151, 58671 118440, 58290 118653, 58462 118826, 58186 118947, 58515 119008, 58640 118852, 59119 119672, 58967 119841, 59170 119719, 59363 119675, 59165 119381, 58666 118709, 58719 118459, 58830 118384, 59667 118140, 59737 118186, 59689 118442, 60184 118431, 60572 118751, 60585 119148, 60064 119689, 59949 119636, 59951 119691, 60828 119749, 61275 120107, 62517 120965, 62758 121317, 62728 121862, 62303 122490, 61551 122869, 61284 122810, 60776 122783, 60817 123313, 60832 123760, 60645 124359, 60406 124472, 60586 124753, 60783 125022, 60006 125234, 59407 125305, 58785 124785, 56256 123246, 55760 123060, 54267 122833, 54717 123249, 55018 123931, 54763 124786, 54215 125305, 53530 125467, 52442 124867, 52242 123757, 52348 123422, 52611 123155, 52272 123286, 51585 123719, 51020 124011, 50908 124028, 50741 124259, 50629 124354, 50253 124854, 49035 126539, 48602 127384, 47751 127693, 47397 127711, 47128 127695, 47077 127646, 46339 127787, 46701 125546, 46567 125593, 46010 125020, 45955 124914, 46174 123986, 46460 123793, 46667 123703, 46427 123541, 46425 123482, 46347 123443, 46532 122616, 46858 122570, 47108 122521, 47045 122464, 47064 122341, 46316 122472, 45690 121886, 45889 121332, 45457 120107, 45466 119986, 45974 119089, 46476 118852, 46265 118621, 46284 118399, 46403 118049, 46386 118023, 46245 118094, 45180 118393, 44675 118156, 44579 117705, 45045 116923, 45014 116932, 44655 116014, 44746 115751, 45290 115177, 45452 115075, 44820 114214, 45202 113070, 46501 112733, 46852 113161, 46906 113107, 46970 113154, 47579 113351, 47911 113446, 47965 113842, 48166 113374, 48326 113175, 48000 113228, 47718 112983, 47451 112622, 47747 111963, 48489 111875, 48743 112225, 48972 111824, 49083 111716, 49743 111869, 49969 111583) (48409 122600, 48324 122624, 47654 122748, 47338 122777, 47502 123168, 47804 122864, 48364 122686, 48744 122696, 48722 122569) (57951 122695, 57903 122751, 58112 122882, 58067 122534, 58034 122352) (48493 121301, 48417 121465, 48415 121933, 48553 121976, 48928 121728, 49147 121436, 48729 121124) (54925 118138, 54898 118285, 54460 118942, 54509 119258, 54884 119573, 55618 119311, 56326 119377, 56609 119307, 56945 119345, 57331 119293, 57548 119318, 57886 119012, 57384 119031, 57260 119161, 57095 118981, 56465 118759, 56139 118532, 55772 118872, 55682 118520, 55561 118503, 55319 118349, 54972 118094) (47758 118280, 47674 118233, 47822 118480, 47464 118893, 47649 119069, 48018 119340, 48258 119023, 48383 118578, 48704 118568, 48430 118459, 48173 118264, 48176 118157) (47443 115224, 47197 115404, 47115 115407, 46384 115117, 46104 115131, 46521 115254, 46591 116556, 46500 116654, 46146 116837, 46405 116838, 46436 117009, 46432 117814, 46496 117790, 46755 117326, 47019 117278, 46805 116686, 46858 116485, 47038 116290, 46914 116125, 47288 115356, 48033 115210, 48239 115203, 48358 115275, 48563 115559, 48479 115258, 48648 115157, 48108 114884, 48024 114597) (50998 115762, 51078 115727, 51707 115703, 51027 115617)), ((57869 126896, 57900 127057, 57780 127172, 57549 127127, 57577 126908, 57738 126828)), ((46488 125644, 46093 125968, 45969 125787, 46102 125552, 46429 125461)), ((45087 122615, 45140 122739, 45024 122944, 44727 122934, 44568 122742, 44645 122374, 45112 122153)), ((201341 120196, 201688 120940, 200883 121922, 200051 121567, 199946 120704, 200230 120409, 200963 120126)), ((60320 116035, 60348 116286, 60151 116446, 59779 116447, 59549 116012, 60012 115846)), ((197744 115003, 197353 115911, 196659 115820, 196402 115199, 196554 114920, 197037 114558, 197336 114532)), ((55148 110708, 55264 111219, 54792 111618, 55012 112115, 54702 112627, 54000 112714, 53812 112588, 53484 111970, 54141 111391, 54669 111536, 54242 111110, 54360 110689, 54754 110497)), ((192929 110244, 192730 111200, 192042 111253, 191667 110704, 191756 110402, 192152 109954, 192436 109866)), ((44842 110127, 45126 110772, 44655 111238, 44241 111219, 43944 110815, 44005 110438, 44152 110124)), ((49428 102630, 49804 102853, 49992 103032, 49981 103345, 49994 103879, 50069 103820, 51123 103865, 51715 104465, 51740 104737, 52199 105018, 52208 105191, 52339 104908, 52911 104872, 53269 105376, 53060 105650, 53428 105874, 53473 105744, 53708 105642, 54070 105506, 55047 105914, 55106 106028, 55166 106772, 55189 107283, 54764 108233, 54569 108391, 54444 108447, 53727 108335, 53332 108070, 53165 107784, 52325 108203, 52265 108190, 52249 108233, 52445 108598, 52426 108814, 52503 108844, 52596 109140, 52539 109304, 52173 109591, 51675 109886, 51547 109860, 51013 109546, 50796 109589, 50064 109595, 49504 110162, 49408 110211, 49006 110128, 48742 110053, 48247 109620, 48428 109363, 48359 109239, 48093 109134, 47666 108814, 47094 108878, 46932 108858, 46591 108436, 46633 108699, 46342 109023, 46379 109052, 46311 109402, 46235 109874, 45589 110280, 45040 109860, 44922 109886, 44219 109766, 44015 109274, 44268 108287, 43960 108147, 43850 108029, 43738 107546, 43613 106423, 43649 106401, 43550 106015, 43694 105801, 43976 105749, 44450 105179, 44652 105072, 45411 104923, 45262 104403, 45354 103903, 45470 103472, 45771 103350, 46379 103184, 46807 103576, 47056 103740, 47002 103783, 47037 103892, 46992 103942, 47322 103909, 47350 104080, 47514 104466, 47832 104544, 48028 104672, 48420 104647, 48558 104712, 47926 104269, 47736 104083, 47736 103708, 47719 103275, 47778 103037, 47983 102852, 48316 102749, 49103 102577) (48511 105872, 47892 105814, 47842 105898, 48349 106520, 48790 106286, 49064 106185, 49396 106434, 49191 106170, 48642 105789) (51347 106336, 51685 105895, 51549 105964, 51141 105787)), ((43434 109166, 43146 109805, 42726 110067, 42524 110033, 42209 109774, 42071 109431, 42113 108978, 42359 108626)), ((187470 106675, 187464 107206, 187100 107308, 186841 107052, 186856 106882, 187021 106600, 187164 106524)), ((43562 106464, 43192 107023, 41725 106917, 43050 106280)), ((56179 104758, 56627 105384, 56775 105976, 56685 106165, 56317 106328, 55689 106304, 54954 105308, 54683 104776, 55108 104206, 55158 104189)), ((53778 103300, 53696 103532, 53404 103598, 53747 104091, 53892 104364, 53826 104482, 53420 104785, 53126 104718, 53001 104673, 52616 104680, 52675 104307, 52761 104262, 52725 104066, 52790 103922, 53397 103595, 53241 103345, 53414 103110, 53651 103102)), ((159727 97323, 161091 99112, 161138 99300, 160980 99455, 160047 101472, 159871 101425, 157595 101654, 156772 100525, 156618 98721, 156938 97976, 157189 97448, 159607 97275)), ((152469 97104, 153905 97767, 153870 97873, 154075 100203, 152879 100955, 152368 100991, 151002 100877, 149984 100230, 149887 98302, 151514 96867)), ((145896 97388, 146431 99647, 144920 100151, 143349 99951, 142614 99482, 142499 98236, 143586 97174)), ((46501 92984, 46428 93160, 47013 93156, 47086 93426, 47224 94049, 47437 94147, 47831 93905, 48128 93988, 48379 94008, 48490 94085, 48529 94265, 49053 93974, 49680 93566, 50799 93809, 51257 94482, 51123 95098, 51199 95163, 51126 95423, 50879 95495, 50738 95291, 50371 95544, 49708 96024, 48852 95846, 48155 95103, 47606 94945, 47563 95126, 47505 95180, 46960 95291, 46914 95348, 47367 96169, 47782 96063, 48163 96570, 48820 96423, 49186 96328, 49633 96253, 49775 96179, 50399 95896, 50544 96752, 50666 96869, 51773 95903, 51843 95802, 52514 96335, 52700 96529, 52844 96541, 53077 97662, 52450 98149, 52230 98288, 51645 98503, 51450 98483, 51109 98289, 51009 98465, 50985 99173, 50910 99220, 50297 99344, 49680 99426, 48341 99277, 48200 99323, 47944 99288, 47693 99275, 47605 99091, 47575 98828, 47451 98984, 46942 98680, 46629 98463, 46413 98230, 46327 98071, 45855 97910, 44948 96670, 44933 96547, 45024 96317, 44792 96475, 44400 96611, 43657 96442, 43480 96163, 43434 95220, 43930 94229, 44166 94039, 44863 94015, 45021 94101, 45378 94399, 45298 95277, 45679 95170, 46150 94855, 46520 94892, 46704 95047, 46550 94833, 46632 94526, 46552 94575, 45764 94182, 45697 93501, 45854 93315, 45692 93206, 45616 93046, 45771 92720, 46132 92645)), ((44760 98565, 44523 98822, 44370 98837, 44291 98745, 44290 98543, 44521 98376)), ((53409 97651, 53497 97946, 53474 98137, 53350 98271, 53173 98158, 53187 97852, 53227 97573)), ((48971 92063, 49555 92376, 49613 92782, 49475 93614, 48350 93934, 47934 93508, 47637 92913, 47926 92315, 48122 92155, 48440 92040)), ((46911 85788, 47013 85995, 47348 87219, 47704 87412, 47844 87548, 48381 87711, 48514 87464, 49659 87271, 49913 87192, 50290 87032, 50649 86894, 50722 87543, 51121 87994, 51206 88053, 51225 87971, 51638 87652, 51956 87428, 52283 87023, 52700 87395, 52766 87485, 53245 87556, 53302 88332, 53453 88632, 53341 88808, 52950 89073, 52436 89358, 52091 89462, 51770 89408, 51416 89187, 51330 89003, 51321 88821, 51229 89028, 51193 89427, 51179 89850, 50945 89977, 50376 90059, 49400 90081, 48646 89922, 48302 89720, 47989 89321, 47990 89133, 47919 89172, 47586 89554, 47352 89511, 47088 89332, 46564 88915, 46446 88778, 46213 88280, 46182 88137, 46460 87778, 46377 87753, 46085 87292, 46053 86660, 46386 85883, 46743 85752)), ((50548 85205, 50713 85448, 50604 85706, 50117 85968, 49815 85886, 49568 85601, 49643 85368, 50160 85084)), ((49008 84641, 49053 85013, 48805 85326, 48364 85206, 48310 84816, 48653 84504)), ((49211 82755, 49191 83006, 48952 83090, 48843 82833, 48987 82629)), ((48523 77969, 48895 78220, 49015 78364, 49563 78596, 49729 78365, 50554 78321, 51175 78241, 51548 78125, 51905 78031, 51906 78674, 52273 79186, 52351 79254, 52382 79177, 52801 78919, 53143 78733, 53526 78348, 53904 78779, 54007 78926, 54373 79022, 54401 79735, 54525 80065, 54387 80238, 53984 80453, 53427 80686, 53084 80747, 52760 80656, 52443 80402, 52371 80190, 52383 79989, 52261 80197, 52182 80592, 52120 81024, 51863 81129, 51302 81144, 50312 81060, 49819 80893, 49512 80801, 49274 80582, 49005 80160, 49031 79954, 48949 79988, 48567 80337, 48332 80264, 48097 80067, 47608 79584, 47510 79436, 47339 78936, 47321 78776, 47665 78416, 47582 78378, 47363 77929, 47398 77348, 47774 76674, 48294 76555)), ((51956 76355, 52079 76589, 51950 76813, 51495 76997, 51230 76893, 51037 76612, 51128 76411, 51619 76207)), ((50509 75601, 50512 75943, 50260 76206, 49865 76049, 49861 75691, 50202 75443)), ((50306 69871, 51206 70401, 50984 70773, 50982 71165, 51103 70854, 51546 70292, 51909 70307, 52807 70204, 53416 70207, 53626 70174, 53571 70620, 53761 70994, 54231 71532, 53947 71951, 53916 71977, 53823 72242, 53644 72904, 53226 73014, 52867 72975, 51707 72731, 51229 72506, 50917 72145, 50788 71855, 50908 71368, 50703 71424, 50005 71872, 49073 70847, 49020 70656, 49028 70231, 49286 70023, 49725 69736, 50095 69655)), ((55556 71177, 56131 71416, 56068 71801, 56179 72534, 54895 72996, 54786 73002, 54365 72821, 54264 72717, 54138 72085, 54240 71557, 54576 71445, 55339 70858)), ((58257 63274, 58858 63668, 58786 63867, 58748 64771, 57674 64941, 57335 64985, 56907 64705, 56900 63842, 56998 63592, 57147 63573, 58181 63048)), ((54996 61855, 56569 61979, 56455 62334, 56538 62591, 56845 63098, 56964 63343, 56682 63619, 56630 63652, 56193 64551, 55688 64587, 55092 64384, 54320 64065, 53961 63811, 53676 63328, 53621 63100, 53858 62584, 54150 62118, 54568 61754)), ((53188 60896, 54066 61658, 53893 61852, 53763 62528, 53617 62540, 52739 62895, 52467 62453, 52002 61658, 52053 61148, 52927 60783, 53108 60777)), ((59912 56093, 59895 56134, 60427 57196, 59584 58121, 58985 58086, 57987 57545, 57703 57058, 58198 55975, 58704 55962)), ((72187 50456, 73380 52070, 73664 53098, 73791 53592, 73615 54190, 73475 54586, 72909 55356, 71768 55782, 70993 56504, 70166 56607, 69369 56374, 69050 55037, 68908 54569, 68538 54097, 68002 53279, 68431 52727, 68723 52377, 69154 50967, 69319 50325, 71192 50004)), ((63590 50632, 62993 52613, 62509 52671, 62140 52800, 61340 52119, 61218 51845, 60976 51445, 61527 50604, 61738 50533, 63606 50455)), ((72012 49394, 72042 49663, 71905 49790, 71641 49703, 71727 49364)), ((66693 47247, 66268 49233, 66099 49389, 65183 49338, 64609 48821, 64521 48606, 64453 47562, 66455 47192)), ((65433 42590, 64278 43177, 63534 42833, 63723 43261, 63805 43400, 63821 43970, 63810 45111, 62144 45902, 61273 46927, 59816 46319, 58710 46288, 57977 46244, 57683 45699, 57549 45508, 57464 44721, 57903 44023, 58071 42886, 58183 42534, 58821 41820, 59562 41411, 61145 41368, 63011 42136, 63454 42713, 63295 42175, 63778 41344, 65060 41269)), ((69531 44365, 69737 44420, 69578 45755, 69331 45981, 68632 46320, 68227 45773, 67773 45569, 67678 45292, 67794 44443, 69436 44057)), ((71756 41595, 72451 41761, 72403 42192, 72161 42318, 71695 42718, 71374 42386, 71224 41822, 71310 41586, 71650 41513)), ((62426 39835, 62518 39966, 61621 41300, 61426 41292, 59976 40081, 59886 39819, 59966 39640, 60468 39374, 61893 39297))) \ No newline at end of file +MULTIPOLYGON (((134260 189842, 134788 191162, 136083 191813, 136689 193182, 134663 194101, 134353 193972, 134066 193721, 134214 191386, 133525 190548, 133455 189673, 134260 189842)), ((151951 164738, 151585 166602, 151120 167119, 150266 167129, 150880 167732, 151138 168002, 151077 168451, 151213 168456, 151413 168570, 151780 168929, 151790 169443, 148149 171233, 146304 172747, 145689 173444, 144933 174436, 144692 174950, 144146 177004, 143942 178651, 143902 179598, 143995 180168, 144292 181448, 144704 182221, 145662 183599, 146909 184895, 149006 186636, 150224 187468, 150301 187562, 150080 188002, 149850 188210, 149960 188778, 150285 189906, 150196 190308, 148763 190905, 148689 190874, 147060 188925, 146876 188623, 146310 188676, 146223 188600, 146149 189095, 147162 189971, 147200 189965, 147297 189689, 147470 190452, 147620 190792, 147331 192040, 146971 192347, 145953 192259, 145519 192071, 144963 190770, 144714 190236, 144386 189439, 144753 188875, 144566 188392, 144530 188204, 144449 188052, 144248 187853, 143920 187621, 143713 187564, 143437 187212, 143165 186984, 143109 186875, 142958 187214, 142822 187383, 142474 187851, 141683 187600, 140961 187324, 140487 185840, 139941 185505, 139528 185183, 140075 184823, 139918 184437, 139848 184100, 139816 184065, 140099 183694, 139872 183570, 139324 183235, 139254 183279, 138582 183042, 137548 182065, 137405 181698, 137162 180851, 137427 180362, 137490 180019, 138988 177624, 140139 177691, 140171 176540, 140188 175002, 139833 174913, 137962 174561, 137944 174112, 137835 173498, 137944 173276, 138561 172355, 139739 171777, 140700 171579, 140705 171538, 140858 171533, 141133 171415, 141211 171275, 140416 170506, 140444 170212, 141495 169784, 141400 169218, 142228 167585, 143700 167343, 143809 167488, 144208 168248, 144275 168156, 144194 167515, 145151 166514, 146341 166978, 146464 166923, 146919 167347, 147506 166635, 148307 166502, 149089 166351, 149381 166315, 149468 166256, 149799 165307, 151848 164097, 151951 164738), (144399 168763, 143810 169870, 143570 170218, 143488 170513, 143549 170619, 144499 170356, 144786 170302, 144941 169066, 144800 168941, 144603 168886, 144375 168637, 144399 168763)), ((140190 163235, 140244 164334, 139810 165623, 138070 167102, 138231 167349, 138932 168076, 138925 168140, 135253 169405, 134378 169803, 132435 170854, 132181 171044, 131159 172124, 131096 172297, 130798 172668, 129655 175435, 129529 175963, 129111 178371, 129168 180278, 129537 181207, 129949 182317, 130095 182572, 131860 184968, 132166 185298, 134525 187424, 134599 187535, 134393 187697, 134090 187904, 134060 188007, 134138 188576, 134053 188809, 133707 188800, 132941 188839, 132339 188895, 131826 188089, 131318 188381, 131406 189351, 131839 190821, 131755 191044, 130749 191693, 130158 191563, 129047 190322, 128936 189933, 128811 190227, 128250 190365, 127819 190068, 127555 189580, 127555 189044, 127391 189369, 126667 189801, 125596 188987, 126834 188035, 127556 189041, 127544 188657, 126846 188009, 126855 187448, 126672 186968, 126659 186403, 126879 186277, 126947 186198, 127442 186027, 127773 186368, 127984 186721, 128478 186112, 127836 185298, 127560 185383, 127350 185587, 126835 186056, 126307 185804, 125334 185276, 125146 184242, 125062 184103, 124796 183889, 124144 183230, 124373 183119, 124258 182683, 123170 181786, 122482 181179, 122174 180377, 122104 179917, 122308 179505, 122446 179318, 122589 179207, 123467 179340, 123833 179246, 124540 179523, 126138 175954, 126424 174323, 126694 172602, 126677 171247, 125534 171036, 124437 170542, 124368 170131, 124297 169954, 124401 169681, 124992 168918, 125295 168809, 126011 168585, 126979 168318, 126777 168069, 127388 167889, 128050 167717, 128044 167518, 129160 165906, 130276 165877, 130744 165874, 130952 166461, 131129 166997, 131030 167376, 130721 168025, 132054 167912, 132147 167721, 131880 167505, 131809 167476, 131626 167207, 131408 166794, 131518 166679, 131468 166399, 131468 166097, 131712 165884, 132338 165387, 132616 165145, 132822 165172, 133856 165749, 134269 165630, 134402 165791, 134619 165588, 134939 165509, 136094 165501, 136440 165137, 137086 163866, 137306 163621, 137513 163448, 139723 162966, 140190 163235), (128151 188066, 128342 188274, 128379 188268, 128448 188405, 128215 187618, 128072 187185, 128151 188066)), ((144595 191292, 144560 191449, 144511 191468, 144408 191416, 144032 190795, 144441 190410, 144595 191292)), ((142894 190693, 142856 190798, 142657 190956, 142304 190753, 142639 190418, 142894 190693)), ((143542 188621, 143691 188757, 143941 189122, 144081 189811, 144007 190101, 143573 190362, 143061 190198, 142717 189953, 142523 188683, 142909 188395, 142939 188348, 143142 188196, 143542 188621)), ((160542 166051, 161855 166825, 162212 167461, 162144 167844, 161788 168147, 161327 168575, 161380 168697, 161290 168615, 161228 168820, 160884 168990, 160933 169064, 160989 169015, 161553 169160, 161497 168790, 161833 168167, 162319 168244, 162493 168080, 162709 168085, 162969 168070, 163042 168311, 163478 169219, 161733 170819, 159869 172742, 159600 173198, 158915 174436, 158762 174906, 158604 175173, 158336 176286, 158358 176781, 158595 178373, 159483 180068, 159851 180696, 160869 181691, 162672 183113, 164951 184368, 165000 184959, 164749 185584, 164603 185666, 163577 185132, 163568 185196, 164057 185811, 165096 186668, 165365 187457, 165334 188673, 164902 188962, 163002 188572, 162831 188410, 161947 186845, 160810 186855, 160611 186823, 160355 186603, 160079 186657, 160012 186641, 159988 186702, 159656 186915, 158980 186968, 158687 186978, 158284 186924, 158058 187650, 156857 187510, 156588 187463, 155822 186084, 155904 185633, 154825 185249, 154821 185100, 155606 184337, 155431 184078, 155371 183817, 155489 183551, 156419 183586, 155895 183062, 155854 182943, 155681 182555, 155794 182463, 155674 182558, 155447 182898, 155373 182922, 155243 183113, 154811 182970, 154654 182885, 154462 182851, 154238 182412, 154211 182436, 153753 182332, 153652 182188, 153599 182335, 153396 182593, 152952 182610, 152755 182287, 152944 181942, 153094 181925, 153023 181892, 152959 181603, 153007 181476, 152996 181138, 152393 180428, 151673 179260, 151468 178090, 151557 177271, 151713 176247, 152014 175446, 152341 174920, 152520 174655, 152882 174271, 153451 173612, 153814 173641, 153959 173781, 154391 173562, 154768 173286, 154860 173238, 155279 172973, 155170 172889, 155123 172737, 155135 172631, 155286 172538, 155647 172451, 155436 172058, 154877 172297, 154925 172686, 154567 173275, 153864 173383, 153609 173397, 153358 173231, 153272 172791, 153335 172650, 153620 172297, 153259 172021, 153320 171318, 153734 171145, 153674 170533, 154012 170321, 154142 170326, 153723 169646, 153588 169279, 153714 168842, 154461 167907, 155162 167752, 155713 168256, 155857 168978, 155947 169244, 155891 169516, 155777 169916, 155706 170004, 154810 170437, 155426 170806, 155632 170892, 155952 170853, 156112 170858, 156302 170657, 156429 170093, 156351 168670, 156091 168535, 155962 168202, 155900 167615, 156292 167166, 156871 167194, 156949 167259, 157471 166895, 157715 166963, 158226 167176, 158265 167052, 158905 165983, 160542 166051), (159084 169291, 159220 169417, 159295 169601, 159620 169849, 160050 169271, 159758 169154, 159022 168770, 159084 169291)), ((123806 158287, 124448 159275, 124113 160713, 123585 161383, 123473 161410, 123580 161465, 123909 161335, 124694 161730, 125513 162507, 125679 162694, 125629 162863, 125269 163527, 125151 163678, 125896 163724, 125026 164437, 124336 164748, 123793 164829, 123334 164925, 121425 165424, 120013 165813, 117697 166960, 117170 167309, 116776 167714, 115922 168501, 115560 169080, 114774 170755, 113959 173030, 113775 173912, 113663 175083, 113720 175503, 113799 176325, 113917 176538, 114472 178189, 114619 178432, 114998 179243, 117255 182216, 117610 182650, 117727 182833, 117908 183026, 118301 183541, 118325 183663, 118604 184464, 118632 184620, 118190 184683, 117412 183986, 117111 184258, 116895 184226, 116771 184261, 117107 184658, 116722 186507, 115917 187105, 114566 186686, 114071 185953, 113919 185067, 113784 184563, 113813 184539, 113481 184279, 112959 183945, 112722 183750, 112372 184037, 111629 183861, 111481 183756, 111272 183514, 111043 182881, 111028 182653, 110417 182537, 109722 182429, 109084 182247, 107881 181362, 107276 180933, 106841 180315, 106624 180465, 105831 180947, 105637 181030, 104354 180063, 104193 178937, 104137 178434, 103352 178327, 102728 178213, 102296 177478, 102378 177987, 102137 178403, 100715 179315, 100211 179294, 99949 178851, 100050 177177, 100312 176725, 102078 176120, 102186 176790, 102222 175986, 102264 175888, 102132 175936, 101572 175669, 101173 175343, 101403 174377, 101873 174181, 100917 172405, 100974 172185, 102876 172553, 103080 172557, 103068 172606, 103709 172740, 104731 171594, 106206 169152, 106357 168845, 106806 166457, 106868 165216, 106852 164568, 106754 163839, 106631 163737, 106265 163655, 106151 163969, 105751 163814, 105039 163214, 105119 163024, 104583 162708, 104359 162613, 104386 162506, 104546 162312, 104596 162278, 104786 162086, 106947 161481, 107392 160131, 108263 159681, 109582 160366, 109920 160533, 110558 159343, 112014 159185, 112704 160425, 113133 160088, 113800 159951, 116580 159332, 117519 160168, 117950 161360, 117718 162149, 117616 162398, 118000 162463, 117926 162376, 119159 161490, 119528 161646, 120271 162058, 120313 162152, 119775 162510, 120580 162324, 120723 162439, 120903 162747, 121535 162059, 121668 161875, 121190 161950, 120945 161473, 120658 160962, 120473 160765, 120406 160383, 120471 160183, 121935 158087, 123806 158287), (106651 178570, 106683 178839, 107036 178472, 107323 178424, 106690 178489, 106582 178402, 106651 178570)), ((171881 166614, 171984 167370, 172340 167245, 172844 167466, 172870 167582, 173039 167453, 173150 167426, 173275 168175, 173121 169321, 173031 169687, 172928 169881, 172499 170367, 171975 171216, 172773 171191, 172402 172240, 172415 172422, 172684 172460, 173057 172632, 173571 173137, 173795 173778, 173773 174488, 173628 174868, 173329 175261, 172995 175426, 173231 175883, 173441 176142, 174291 176765, 173591 177232, 173434 177274, 173481 177532, 173949 177485, 174159 177515, 174905 177783, 175331 177997, 175894 178749, 176327 179266, 176593 179884, 176563 179897, 176201 179790, 176275 180391, 176045 180530, 175607 180774, 175583 180821, 175916 181019, 176105 181025, 176339 181408, 176329 181694, 175424 183173, 174481 183653, 174396 183652, 174150 183703, 173383 183240, 173140 183081, 172673 183619, 172113 183509, 171873 183655, 171555 183743, 171440 183661, 171565 184023, 171349 184508, 170755 184618, 169683 184002, 169551 183835, 169555 183608, 169746 182718, 169592 182772, 169332 182717, 169017 181376, 169096 181275, 169047 181245, 168855 180931, 168840 180679, 168906 180183, 168757 179790, 168460 179308, 168201 178972, 168127 178761, 167945 178733, 167589 178636, 167507 178224, 167837 177887, 168129 177993, 168482 178249, 168976 177932, 168935 177585, 168957 177362, 169186 176994, 168066 177117, 167811 177167, 167855 177323, 167854 177773, 167723 177715, 167608 177881, 167272 178206, 166928 178329, 166012 177922, 165897 177582, 165943 177489, 165874 177354, 165893 177054, 166037 176918, 166288 177093, 166540 177008, 166660 176930, 166563 176382, 166969 175912, 167018 176004, 167141 175864, 167196 175660, 167028 175631, 167013 175466, 167146 175305, 166617 175004, 166417 174955, 166340 174669, 166534 174164, 166621 174121, 166507 173868, 166604 173712, 166883 173427, 166797 173429, 166339 173629, 165391 173110, 165365 173059, 165614 172365, 166370 172397, 166696 172659, 167041 172971, 166998 173280, 167473 173279, 167723 173356, 167908 173494, 167977 173715, 168156 173598, 168131 173405, 167991 173420, 167915 173269, 167709 173070, 167473 172737, 167671 172469, 167661 172430, 167462 172374, 167240 172369, 166558 172168, 166322 171164, 167108 170543, 167187 170422, 167528 170133, 167514 170071, 167483 170117, 166558 170543, 166603 169502, 167096 169707, 167451 169907, 167358 169519, 167303 169226, 167398 168677, 167790 167926, 169699 167191, 170158 167339, 170284 167405, 171321 166382, 171630 166337, 171881 166614), (170734 182279, 170332 182481, 170683 182482, 171051 182619, 170902 182238, 170734 182279), (173016 180413, 172822 180460, 173195 181440, 173558 180676, 173655 180573, 173069 180286, 173016 180413), (174607 179244, 174725 179685, 175283 179382, 174742 179002, 174607 179244), (171186 169258, 171886 169346, 172186 168744, 172190 168654, 171186 169258)), ((106826 182956, 106268 183987, 105877 184119, 105364 183759, 105089 183143, 105167 182208, 105808 181844, 106010 181668, 106826 182956)), ((97555 178676, 97879 180294, 99212 181309, 99610 182991, 97539 183494, 97041 183169, 96617 182629, 97178 180428, 96576 179333, 96684 178332, 97555 178676)), ((154126 182797, 154114 182988, 153781 183301, 153622 183350, 153337 183238, 153266 182933, 153328 182793, 153560 182537, 154101 182517, 154126 182797)), ((168309 180100, 168358 180244, 168326 180321, 168192 180349, 168054 180265, 168078 180027, 168309 180100)), ((108442 154069, 108265 155305, 107703 156320, 105644 157530, 105732 157735, 106296 158577, 103309 158996, 102508 159167, 100911 159658, 99439 160151, 99036 160349, 97982 161111, 97853 161320, 97395 161700, 95818 164090, 95525 164753, 94706 166908, 94432 168663, 94454 169012, 94824 171035, 96271 174000, 98371 176735, 98418 176841, 98206 176916, 97929 177071, 97812 177260, 97798 177574, 97651 177821, 97263 177744, 96627 177656, 95964 177603, 95695 176934, 95049 177160, 94971 177988, 95137 179616, 95067 179731, 93898 180212, 93434 180016, 92461 178417, 92439 178226, 92302 178402, 91674 178435, 91380 178141, 91162 177471, 91228 177118, 91078 177309, 90242 177616, 89278 176558, 90758 175812, 90877 175229, 90777 174686, 90861 174184, 91157 174041, 91649 173874, 91768 174114, 92065 174491, 92083 174562, 92663 174169, 92252 173378, 91841 173443, 91104 173931, 90899 173773, 90649 173597, 89765 172883, 89771 171890, 89710 171729, 89507 171492, 88966 170699, 89171 170644, 89144 170274, 87688 168433, 87609 168258, 87517 167601, 87529 167237, 87897 166761, 88148 166637, 88593 166792, 89350 166743, 90096 167209, 90223 166975, 92316 164028, 93348 161367, 93478 161010, 93774 159467, 93552 159372, 92646 159186, 91955 158544, 91704 158394, 91669 157834, 91833 157563, 92380 157075, 92595 156986, 94395 156811, 94327 156688, 95230 156585, 95616 156557, 95633 156447, 97007 155055, 98625 155258, 98796 156414, 98662 156696, 98325 157152, 99419 157233, 99589 157357, 99725 157235, 99489 156975, 99411 156927, 99190 156219, 99297 156138, 99301 155829, 99348 155585, 99668 155385, 100296 155029, 100740 154819, 100889 154860, 101784 155556, 102251 155499, 102321 155623, 102497 155509, 102871 155508, 103617 155596, 103976 155406, 103958 155569, 104360 155269, 105053 154354, 105477 154017, 105858 153790, 107979 153689, 108442 154069), (91263 176860, 91338 176505, 91260 176561, 91148 176347, 90794 175869, 91263 176860), (92043 176234, 92107 176231, 92162 176330, 92099 175513, 92043 176234)), ((167986 179623, 167846 179893, 167448 180062, 167003 179820, 167124 179353, 167441 179273, 167986 179623)), ((149349 176284, 149398 176350, 149696 176645, 150036 177396, 150027 178219, 149704 179032, 149350 179398, 148638 179764, 147683 179815, 146797 179249, 146401 178407, 146588 176853, 147281 176094, 147428 175980, 148672 175914, 149349 176284)), ((167109 178864, 167088 179317, 166799 179609, 166645 179608, 166464 179370, 166453 179119, 166875 178740, 167109 178864)), ((178260 164385, 178705 164890, 178892 165577, 178889 165705, 178945 165627, 179347 165481, 180774 165643, 181060 165836, 181186 165976, 181335 166948, 180674 167673, 181281 168176, 181342 168122, 181508 167687, 181508 167591, 181639 167505, 182137 167456, 182611 167542, 182951 167841, 182972 168299, 183019 168546, 183033 169103, 183056 169171, 183130 169627, 183522 169975, 183600 170015, 183983 170453, 184055 170551, 184421 170869, 184438 171064, 184323 171330, 184001 171977, 183791 172126, 183379 172003, 183238 172402, 183432 172871, 183485 173174, 183374 173319, 183706 173467, 184023 173579, 184623 173501, 185228 174025, 185135 174278, 185159 174320, 185279 175144, 185302 175425, 184674 175953, 183824 176004, 183766 176278, 182795 176702, 183632 176940, 183811 177234, 183898 178526, 183926 179082, 183784 179331, 183509 179328, 182396 178638, 181996 178216, 182006 177900, 182033 177523, 181951 177422, 181686 177347, 181633 177251, 181261 177676, 180454 176643, 180792 176580, 180689 176538, 180693 176499, 180507 176316, 180258 175864, 179873 176120, 179652 176095, 179029 176175, 178839 176024, 178393 175322, 178488 175100, 178312 174962, 178360 174731, 178578 174797, 178637 174582, 178751 174664, 178923 174543, 178846 174147, 179117 173958, 179107 173805, 179270 173418, 179286 173281, 179204 173086, 179103 173405, 178943 173682, 178380 173851, 178102 173960, 177669 174093, 177263 173518, 177175 173286, 176989 172989, 176979 172493, 177061 172133, 177209 171797, 177814 171609, 177733 171272, 177549 170598, 177943 169849, 178191 169724, 178251 169452, 177352 169678, 177167 169338, 177114 169334, 176708 168906, 176609 169021, 176040 168826, 175873 168365, 176186 167997, 176693 168016, 176763 168131, 176927 167919, 177250 167591, 177439 167634, 178051 168070, 178054 168178, 178295 167919, 178456 167894, 178120 167469, 178198 166611, 177631 167167, 177442 167339, 177292 167198, 177023 167105, 176662 166837, 176242 166058, 176275 165891, 177048 164868, 177915 164338, 178260 164385), (180212 172397, 180383 172546, 180465 172912, 180715 172518, 180314 172086, 180212 172397)), ((135075 174969, 135232 175100, 135714 175448, 135769 175545, 136029 175878, 136276 176673, 136204 177314, 136157 177570, 135898 178096, 135649 178397, 135128 178796, 134474 178988, 133490 178921, 132650 178213, 132556 177965, 132328 177246, 132670 175904, 132762 175639, 133268 175162, 133508 175022, 134103 174818, 135075 174969)), ((161813 175235, 161849 175267, 162185 175487, 162597 176037, 162786 176837, 162607 177683, 162390 178034, 161957 178435, 160978 178732, 160061 178369, 159565 177693, 159458 176223, 160031 175299, 161165 175024, 161813 175235)), ((186306 176536, 186360 176911, 186075 177651, 185547 178054, 184724 178230, 184165 178062, 184075 177921, 184598 176142, 185126 175935, 185548 176012, 185611 175933, 186306 176536)), ((165238 176727, 165211 176954, 165060 176991, 164958 176964, 164929 176830, 165061 176650, 165238 176727)), ((165541 174222, 166037 174451, 166184 174553, 166265 175055, 166078 175208, 166365 175127, 166668 175306, 166659 175648, 166676 175804, 166506 176151, 166433 176202, 165790 176373, 165639 176434, 165545 176414, 165296 175951, 165308 175837, 165542 175432, 165314 175285, 165228 175252, 165165 175115, 165119 174541, 165166 174504, 164870 174456, 164821 173970, 165326 173871, 165541 174222)), ((186722 174501, 186888 175144, 186778 175296, 186356 175668, 185594 175567, 185560 175382, 185383 174833, 185952 174343, 186722 174501)), ((121167 171759, 121609 171832, 122400 172670, 122641 173704, 122458 174301, 122327 174643, 121999 174900, 121036 175470, 120693 175488, 119689 175116, 119451 174987, 119388 174879, 119205 174670, 119046 174365, 118912 173837, 118872 173309, 119069 172870, 119256 172415, 119581 172154, 120027 171822, 120596 171695, 121167 171759)), ((177275 174169, 177416 174285, 177321 174533, 177092 174637, 176740 174516, 176682 174414, 176716 174251, 176936 174111, 177275 174169)), ((153258 173597, 153008 173968, 152683 173809, 152709 173669, 152946 173374, 153258 173597)), ((164709 173101, 164633 173299, 164442 173239, 164398 173083, 164479 172977, 164627 172975, 164709 173101)), ((87659 149905, 87838 150844, 87900 150643, 88181 150168, 89062 149977, 89739 150532, 89782 150722, 90117 150734, 90460 151292, 91174 150987, 91608 150787, 92149 150938, 92657 151108, 93212 151560, 93968 153356, 93910 153799, 93690 154157, 93588 154130, 93219 154154, 93433 154377, 93491 154505, 93793 154631, 93949 154860, 93851 155369, 93657 155797, 92333 155805, 90703 155971, 88983 156251, 88134 156452, 85963 157365, 84586 158486, 83416 160645, 83113 162532, 83058 163003, 83210 164061, 83451 165532, 83666 166336, 85308 169959, 85243 170060, 84958 170271, 84434 170617, 84305 170609, 84207 170441, 84211 170553, 84418 171338, 84347 171733, 83338 173015, 82460 172965, 81598 171994, 81360 171066, 81279 170147, 81321 169756, 81227 169855, 81092 169801, 80723 169174, 79856 170096, 79502 169076, 79727 168775, 79755 168691, 79873 168582, 79859 168505, 79415 168135, 79140 167971, 78862 167784, 78691 167229, 78637 167145, 78451 167324, 78194 167508, 77869 167682, 77094 166947, 76786 166620, 77010 165024, 77209 164838, 76537 163821, 77599 163683, 77618 163409, 77672 163192, 77638 163087, 78084 162866, 78861 163497, 78914 162751, 78690 162503, 78606 162587, 78451 162633, 78269 162483, 78179 162303, 78146 162046, 77965 161721, 77362 161788, 77017 161450, 77135 161310, 77276 161059, 77328 161039, 76931 160765, 76977 160367, 77145 160302, 76918 159309, 76932 158916, 77107 157817, 77916 156167, 78326 155614, 78607 155017, 79741 153812, 79994 153660, 81106 153255, 82052 153079, 82218 152923, 82391 152878, 82852 152916, 82925 153142, 83042 152849, 83220 152756, 82911 152716, 82808 152581, 82781 152367, 82918 152181, 83109 152158, 83375 152354, 83407 152495, 83474 152361, 83838 151955, 83851 151962, 84332 151181, 84965 151228, 85227 150320, 86169 149605, 86684 149468, 87659 149905), (84655 153555, 85262 153594, 85275 153488, 84726 153409, 84655 153555), (87379 151637, 86847 152026, 86416 152269, 85911 152265, 86043 152545, 86048 152622, 86204 152902, 86267 152917, 86579 153166, 87051 152879, 87746 152037, 88003 151647, 87691 151360, 87379 151637)), ((176311 172505, 176290 172816, 176014 172963, 175901 172799, 175982 172597, 176211 172475, 176311 172505)), ((80664 171473, 80167 172305, 79412 172061, 79037 171624, 79055 171206, 80242 170463, 80664 171473)), ((187933 161034, 188036 161336, 187993 161722, 187725 161915, 188341 162067, 188973 162507, 189098 162671, 189128 162895, 189187 162902, 189520 162778, 189918 162451, 190168 162656, 190260 162616, 190598 162794, 190697 163133, 191085 163559, 191488 164276, 191871 164523, 192120 165106, 191900 165380, 191979 165987, 191995 166263, 191940 166643, 192337 167225, 191651 168828, 191724 168864, 191674 168823, 192363 168258, 192719 168200, 192825 167645, 193114 167522, 193584 167559, 193876 167862, 193815 168190, 193378 168534, 194170 169184, 194202 169289, 194151 169349, 193904 169408, 192262 169201, 192588 169883, 192438 170312, 191469 171153, 190645 171319, 190170 171223, 189540 170470, 189473 170050, 189536 169736, 189804 169596, 190077 169411, 189592 169064, 189349 168984, 189247 168824, 189144 168877, 189419 169514, 189461 169712, 188806 170339, 188751 170338, 188754 170383, 188629 170637, 188064 170766, 187613 170388, 187669 169644, 187704 169571, 187621 169311, 188130 168685, 188079 168472, 188240 168464, 188231 168438, 187825 168279, 187763 168130, 187551 167805, 187552 167548, 187606 167490, 187015 167271, 187536 167653, 187347 169030, 186795 169174, 186190 169032, 185578 168432, 185433 168219, 185377 167928, 185391 167589, 186451 167005, 186263 166919, 185788 165929, 186034 165138, 186409 164950, 186406 164575, 186887 164381, 187289 164665, 187188 165061, 188251 165387, 188669 166201, 188519 167202, 188583 167252, 188797 167790, 188913 167738, 189094 167768, 189324 167961, 189660 167165, 189458 167009, 189380 166896, 189436 166685, 189491 166359, 188839 165835, 188302 165366, 187585 164999, 188218 164302, 186642 164006, 186558 164122, 186393 164137, 186308 164002, 186418 163858, 186625 163935, 186614 163116, 186674 162743, 186637 162689, 187036 162213, 186451 162678, 186322 162571, 186204 162134, 186791 161313, 187330 160985, 187783 160955, 187933 161034)), ((78254 168869, 78014 169931, 77916 170047, 77869 170052, 77792 169979, 77666 169358, 78026 168855, 78233 168814, 78254 168869)), ((101228 164615, 101381 164796, 101816 165213, 101843 165301, 102043 165701, 102139 166503, 101896 167310, 101498 167847, 101192 168098, 100690 168354, 99914 168450, 98964 168188, 98279 167360, 98233 167097, 98141 166357, 98721 165117, 98867 164872, 99447 164498, 99718 164401, 100371 164302, 101228 164615)), ((168226 167199, 168080 167562, 167866 167584, 167739 167349, 167660 166194, 168226 167199)), ((173068 165832, 173151 165966, 173104 166184, 172693 166426, 172536 166053, 172861 165808, 173068 165832)), ((134593 165161, 134445 165231, 134116 165268, 134111 164846, 134527 164591, 134593 165161)), ((170746 164740, 170794 164800, 170791 164994, 170632 165121, 170085 165057, 170229 164829, 170426 164704, 170598 164683, 170746 164740)), ((77719 143344, 77721 143872, 76825 145101, 76680 145168, 75468 144686, 75680 145695, 76029 145989, 76032 146090, 76233 146029, 76458 146031, 76852 145806, 78066 144556, 78015 144382, 78126 144156, 78398 143849, 78811 143837, 79071 144147, 79073 144197, 79908 144380, 80227 145203, 80372 145145, 81097 144984, 81578 145197, 82461 146241, 82726 147480, 82539 148058, 81876 148480, 81288 148424, 81175 148478, 80497 148185, 80328 148307, 80490 148508, 80539 148855, 80610 149190, 80998 149206, 81263 148684, 81675 148578, 81831 148817, 82374 148858, 82781 149308, 82585 149675, 82379 150007, 82287 150003, 82105 150327, 81810 150627, 79005 150393, 76909 150545, 75844 150772, 75055 151134, 74527 151244, 73854 151626, 73293 152192, 72612 153038, 71978 154806, 71711 155659, 71690 156409, 71928 159571, 72355 161303, 71764 161947, 71391 162096, 71146 162021, 71071 161946, 70958 161443, 70876 160906, 70647 161254, 70428 161258, 70384 161533, 70471 163013, 69736 164361, 69197 164831, 68902 164758, 68220 163620, 67962 162771, 68457 161263, 68081 160905, 67568 160356, 67456 160173, 67443 159659, 67356 159592, 67264 159420, 67083 159480, 66933 159450, 66700 159333, 66236 158936, 66046 158735, 65873 158498, 65131 158870, 64295 157730, 64790 156242, 65268 155936, 64890 155039, 65147 154767, 66112 154825, 66169 154590, 66147 154423, 66571 154283, 66963 154746, 66985 154221, 67089 154034, 67206 153760, 67590 153819, 67537 154146, 67659 154321, 67857 154269, 68077 153723, 67670 153635, 67208 153722, 67179 153744, 66801 153826, 66613 153717, 66271 153148, 66507 152488, 66409 152480, 66165 152120, 66326 151673, 66107 151582, 66076 151856, 65644 151928, 65341 151621, 65446 151245, 65827 151174, 66036 151359, 65994 151218, 66090 151080, 66453 150935, 66616 151299, 66813 151153, 67045 151055, 67075 150637, 67042 150149, 67129 149917, 67175 149592, 67204 149517, 67333 149038, 67596 148589, 68044 148127, 68246 147782, 68682 147461, 69023 147228, 70562 146606, 70648 146590, 70942 146120, 71597 146243, 71717 146581, 71749 146355, 71841 146202, 72122 146084, 72400 146149, 72519 146299, 72492 146621, 72372 146733, 72522 146756, 72538 146838, 72656 146781, 73761 146870, 73949 147348, 74005 147211, 73980 146931, 74178 146748, 74275 146777, 74524 146962, 74772 146930, 74787 146497, 74174 146185, 74112 146281, 73845 146534, 73283 146657, 72927 146356, 72505 145945, 72489 145818, 72733 145382, 72841 145333, 72964 145346, 73398 145319, 73396 144740, 73691 144509, 73962 144377, 74446 144574, 74494 144726, 74936 144234, 75184 144300, 75308 144443, 75377 144285, 75692 143175, 77303 143054, 77719 143344), (73188 148727, 73265 148673, 73508 148695, 73849 148649, 73830 148472, 73305 148461, 72960 148357, 73188 148727), (79059 147339, 79058 147513, 79168 147561, 79280 147980, 79926 147905, 80062 147919, 79993 147601, 79949 147318, 79740 146543, 79059 147339)), ((185075 163636, 185117 163808, 184918 163939, 184762 163807, 184897 163569, 185075 163636)), ((88213 159493, 88616 160061, 88764 160522, 88755 161347, 88429 161998, 88032 162399, 87728 162589, 87222 162776, 86544 162763, 85756 162433, 85227 161578, 85236 160704, 86046 159432, 87099 159019, 88213 159493)), ((193569 162119, 193474 162468, 193157 162559, 193033 162250, 193254 162011, 193569 162119)), ((194075 155047, 194631 155139, 194984 155287, 195198 155524, 195345 155936, 195306 156096, 195219 156216, 195377 156139, 195677 155830, 195938 155520, 196192 155565, 196583 155788, 196913 156033, 197298 156290, 198034 157116, 198113 157410, 198114 157929, 198008 158060, 198079 158072, 198561 157984, 198710 158155, 198809 158472, 198960 159103, 198967 159296, 198809 159962, 198396 160066, 198436 160126, 198370 160733, 197960 161314, 197132 161761, 197035 161730, 196731 161360, 196869 160771, 197237 159902, 197112 159576, 197082 159377, 196791 158958, 196522 159066, 195599 158553, 195289 158408, 194502 158176, 194864 157592, 194806 156933, 194739 156994, 194168 156992, 193781 156967, 193298 157079, 193200 156485, 193192 156299, 192955 156044, 193332 155386, 193395 155077, 193581 155012, 194075 155047)), ((195710 161231, 195731 161391, 195566 161458, 195430 161350, 195321 161329, 195575 161130, 195710 161231)), ((195336 160912, 195110 161286, 194594 161323, 194377 160957, 194598 160603, 195030 160499, 195336 160912)), ((194394 159185, 194607 159472, 194625 159902, 194391 160055, 193732 159944, 193465 159561, 193489 159228, 193772 159072, 194394 159185)), ((113743 157076, 113809 157713, 113576 158381, 112517 158788, 112447 158533, 112033 157737, 112196 157278, 112729 156697, 113303 156619, 113743 157076)), ((76631 152936, 76723 153620, 76610 154298, 76160 154945, 75504 155372, 74643 155481, 73584 154889, 73244 153996, 73398 153203, 74395 152142, 75437 151939, 76631 152936)), ((102833 155210, 102314 155221, 102042 155241, 102061 154959, 102138 154520, 102923 154200, 102833 155210)), ((100833 153494, 100861 153535, 100829 153689, 100095 154703, 99827 154773, 99621 154179, 99891 153904, 100748 153490, 100833 153494)), ((67346 137182, 67266 137778, 67142 138267, 67361 138135, 67476 137912, 67689 137934, 68184 137723, 68474 137698, 68822 137482, 69186 136954, 69529 136721, 70724 136478, 71330 136371, 71751 136557, 71823 137007, 71491 137739, 71066 138638, 70632 138977, 69871 138960, 70599 139601, 70579 140034, 70812 140053, 71120 140148, 71213 140208, 71503 140334, 71950 141104, 71733 141472, 71523 141970, 72000 142082, 71851 141804, 72314 141202, 73199 141374, 73401 142086, 73062 142554, 72715 142612, 72552 142574, 72337 142780, 71420 143397, 71013 143279, 70489 143160, 69353 143026, 67652 142788, 67597 142843, 67474 142805, 67483 142849, 67287 142807, 65883 143046, 65573 143048, 65884 143051, 66804 144212, 66775 144881, 66564 145412, 65979 146006, 65195 146295, 64811 146274, 64137 146017, 63578 145466, 63422 144559, 63722 143851, 64525 143284, 63697 143841, 63545 144091, 63373 144607, 62766 145479, 62288 146581, 62225 146854, 62123 147122, 61661 150931, 60548 151721, 60305 151486, 60314 150909, 60339 150518, 59788 150092, 59783 150127, 59995 150705, 59808 150959, 59502 151271, 59322 151238, 57777 151130, 58946 151863, 58897 152198, 58252 152968, 57412 153269, 57266 151715, 57571 151090, 56925 150165, 56660 149723, 56813 148699, 56657 148678, 56365 148553, 56349 148471, 55977 148179, 55656 147756, 55574 147579, 55215 147703, 54735 147678, 54150 146730, 54174 146546, 54825 145399, 55568 145114, 55448 144487, 56141 144010, 56807 144194, 56861 143902, 57197 143827, 57314 144040, 57208 143806, 57524 143430, 57718 143539, 57800 143876, 57896 143832, 58612 143131, 58913 142728, 58696 142655, 58445 142868, 58131 142981, 57743 143268, 57358 143261, 56975 142694, 57344 142137, 57351 141846, 57302 141833, 57084 141466, 57394 140952, 57904 140717, 58476 140918, 58865 141112, 58932 140880, 58973 140625, 58992 140228, 59313 140009, 59386 140016, 59509 139849, 59751 139698, 59781 139627, 60080 139380, 60141 139440, 60488 139603, 60356 139946, 60065 140088, 60291 140247, 60503 139914, 60611 139683, 60243 139303, 60236 139258, 59977 139411, 59622 139215, 59528 139088, 59491 138760, 59508 138628, 59963 138438, 60059 138455, 60433 138735, 60436 138800, 60501 138721, 60583 138699, 60478 138654, 60398 138499, 60465 138112, 60535 138065, 60911 138099, 60922 138339, 61190 138475, 61570 138261, 61638 138299, 62047 138396, 62444 138270, 62023 138007, 62012 137956, 62226 137619, 62318 137534, 62654 137622, 62803 138077, 62587 138280, 62556 138346, 62438 138394, 62099 138424, 62148 138670, 62217 138918, 62157 138983, 62312 139020, 62382 138914, 62397 138721, 62763 138603, 62935 138785, 62982 138895, 62909 138995, 63128 139005, 62869 138570, 62910 138062, 62908 137661, 62991 137572, 62512 137503, 62496 137276, 62410 136939, 62796 136519, 63321 136647, 63465 137183, 63228 137471, 63349 137520, 63901 137553, 64280 138010, 64924 137707, 65023 137734, 64875 138281, 64636 138489, 64632 138545, 64420 138868, 64350 138841, 64077 139342, 64194 139668, 64743 139801, 64988 139639, 64963 139229, 64908 139082, 64937 138826, 64908 138681, 65036 138461, 65083 138419, 65266 138197, 65497 138035, 65699 138025, 66060 138235, 66935 138392, 67128 138276, 66784 138271, 66298 137847, 65839 137420, 65715 137341, 65860 137181, 65881 137015, 67241 136032, 67358 135990, 67346 137182), (59066 147937, 59377 147992, 59281 147849, 59442 147596, 59066 147937)), ((65755 152230, 65921 152438, 65716 152616, 65469 152620, 65185 152453, 65150 152362, 65206 152280, 65513 152178, 65755 152230)), ((200587 148457, 201394 148832, 201726 148973, 202121 149289, 202364 149733, 202428 150030, 202185 150498, 202411 150487, 203200 150202, 203888 151425, 203894 151584, 203786 152014, 203532 152137, 202987 152338, 202640 152333, 202498 152098, 201725 151367, 202010 151075, 202121 150596, 201887 150940, 201350 151374, 200948 151260, 199958 151149, 199506 151036, 199323 151021, 199469 150607, 199376 150248, 199025 149582, 199385 149250, 199421 149230, 199559 149006, 199892 148389, 200336 148374, 200587 148457)), ((199174 148285, 199239 148396, 199219 149069, 199020 149521, 198749 149542, 197795 149983, 197678 149586, 197191 149242, 197293 148921, 197353 148159, 198764 147989, 199174 148285)), ((206352 143153, 206381 143494, 205794 144050, 205128 143807, 204738 143583, 204734 143146, 204832 142741, 205735 142456, 206352 143153)), ((203891 141343, 204076 141424, 204509 141909, 204567 142026, 204297 142913, 204199 143166, 203984 143434, 203659 143425, 202797 143530, 202078 143647, 202114 143385, 202011 143213, 201375 142511, 201554 142255, 201836 141219, 202446 141055, 203891 141343)), ((200799 141193, 201101 141962, 200740 142371, 200214 142787, 200190 142741, 199659 142527, 199472 142387, 199561 141390, 200461 141087, 200799 141193)), ((56785 140318, 57002 140633, 56855 141002, 56452 140990, 56223 140645, 56400 140310, 56785 140318)), ((58278 140135, 58419 140128, 58775 140608, 58705 140670, 58610 140927, 57942 140722, 57703 140309, 57986 140050, 58278 140135)), ((72263 137832, 73157 138469, 73546 139176, 73555 139925, 73380 140236, 72537 140556, 71711 140080, 71476 139232, 71465 138578, 71480 138070, 71883 137766, 72263 137832)), ((58676 127906, 58782 128652, 58575 129030, 58319 129439, 58028 129452, 58115 129902, 58068 130222, 57837 130392, 57818 130491, 57903 130611, 58045 130566, 58017 130478, 58169 130275, 58294 130189, 58616 129809, 58934 129962, 58975 129943, 58987 129630, 59048 128835, 59170 128748, 59981 128392, 60724 129045, 60890 129115, 61217 129381, 61240 129371, 60600 128468, 61683 128318, 61566 128864, 61420 129312, 61753 129121, 62058 129009, 62574 128972, 63433 129233, 64523 131004, 64462 131444, 64409 131609, 65564 132416, 65692 132753, 65447 133073, 64757 133295, 64932 133602, 64857 133960, 64841 134140, 64739 134184, 64913 134343, 64953 134437, 64186 134716, 62947 134776, 62648 134760, 62480 134705, 61819 134307, 60948 133968, 61110 134715, 59981 134536, 59833 134577, 59845 134890, 59723 135338, 59316 135919, 58765 136230, 58191 136347, 57535 136234, 57066 135920, 56908 135693, 56827 135759, 55850 137199, 55654 137029, 55286 136644, 55226 136516, 55010 136596, 55124 136989, 55133 137230, 54978 138151, 54872 138510, 54200 139234, 53784 139735, 53168 140144, 53189 139697, 52658 139861, 52164 139272, 52113 139256, 51981 139609, 52010 139811, 51649 140136, 51400 140173, 49752 139536, 49152 138748, 49134 138644, 49018 138359, 49444 137259, 48838 136910, 48846 136342, 48659 136126, 48510 135817, 48566 135696, 48259 135884, 47707 135743, 47496 135167, 47895 134036, 48066 133841, 48337 133798, 49186 133826, 49107 133693, 49113 133411, 50368 132871, 50508 132944, 50532 132879, 50780 132654, 51048 132589, 51523 132564, 51862 132406, 51933 132285, 52441 131834, 52628 131647, 52785 131557, 52717 130980, 53275 130804, 53621 131088, 53573 131386, 53496 131493, 53380 131799, 53753 132198, 53929 132204, 54346 132108, 54588 132206, 54749 132244, 54353 130943, 54197 131018, 53723 131133, 53761 130956, 53259 130715, 53202 130591, 53017 130280, 53250 129302, 53573 129130, 53680 129161, 53887 129003, 54054 128986, 54268 129143, 54144 129461, 54349 129759, 54840 129571, 55078 129696, 55375 129873, 55302 129928, 55428 130019, 55660 130120, 55693 130001, 55863 129829, 56039 129931, 56226 129381, 56241 129163, 56522 129031, 57073 129133, 57118 129224, 57378 129040, 57834 129350, 57813 129252, 57535 128833, 57834 127958, 57862 127827, 57932 127777, 58676 127906), (53082 138202, 53463 138683, 53633 138357, 53212 138149, 53082 138202), (51103 137014, 51886 137214, 52020 137303, 52197 136682, 52066 136651, 51988 136470, 51103 137014), (49620 134754, 49556 135103, 49874 134909, 49796 134732, 49554 134408, 49620 134754), (62760 133505, 63337 133669, 63420 133660, 62725 132884, 62760 133505)), ((59103 139236, 59417 139747, 59406 139846, 59226 140020, 58985 140162, 58478 139954, 58529 139395, 58739 139150, 59103 139236)), ((65191 136608, 65536 137034, 65504 137273, 65195 137509, 64852 137481, 64397 136829, 64709 136536, 65191 136608)), ((66233 135818, 66263 136090, 65964 136366, 65644 136147, 65801 135782, 66074 135713, 66233 135818)), ((204568 133765, 205115 134114, 205153 134965, 205113 135392, 203401 136067, 203392 135955, 202476 135285, 202527 134397, 202631 134019, 203259 133740, 204568 133765)), ((69763 135230, 69817 135286, 69801 135366, 69586 135564, 68010 135845, 69509 135198, 69763 135230)), ((201061 134317, 201155 134462, 201019 134700, 200842 134618, 200818 134410, 200988 134310, 201061 134317)), ((66450 133845, 66466 134074, 66338 134190, 66092 134181, 65751 133788, 66120 133543, 66450 133845)), ((51539 131953, 51390 132037, 51297 132018, 51238 131872, 51310 131699, 51576 131679, 51539 131953)), ((66915 131046, 67097 131240, 67154 131427, 67121 131604, 67064 131669, 66847 131707, 66704 131561, 66629 130929, 66915 131046)), ((52625 130299, 52546 130568, 52073 130638, 52194 130937, 51946 131585, 51643 131490, 51394 131111, 51552 130595, 52043 130626, 51701 130386, 51677 130229, 51893 129996, 52150 129935, 52625 130299)), ((64276 129587, 63820 129497, 63751 129251, 64002 129051, 65282 128730, 64276 129587)), ((56960 127442, 57138 127900, 56844 128160, 56778 128134, 56814 128165, 56679 128698, 56599 128875, 56126 129040, 55958 128897, 56076 129144, 55953 129478, 55624 129529, 55423 129573, 55094 129474, 55026 129406, 54747 128814, 54655 128669, 54658 128568, 55070 128240, 55189 128230, 55623 128385, 55736 128059, 55869 127966, 56422 127817, 56482 127871, 56463 127559, 56922 127423, 56960 127442)), ((203915 126975, 204087 127786, 203074 128572, 202336 128030, 202429 127162, 202775 126934, 203557 126821, 203915 126975)), ((54373 128134, 54327 128343, 54071 128355, 54000 128199, 54010 128084, 54151 128026, 54373 128134)), ((51152 111683, 51417 111718, 51589 112027, 51799 112523, 51944 112496, 52297 112355, 53147 112700, 53391 113240, 53312 113740, 53390 113742, 53670 114279, 53605 114428, 53725 114340, 53899 114326, 53780 114255, 53877 113784, 53877 113538, 54122 113330, 54702 112959, 55409 113368, 55370 113796, 55716 113971, 55863 114379, 56114 114236, 56511 114414, 56552 114403, 56219 113590, 56630 113346, 56065 113441, 55446 112600, 56238 111958, 57040 112297, 57144 112842, 56988 113066, 57378 112939, 57617 113055, 58026 113204, 58214 113636, 57784 114325, 57482 114536, 57253 114631, 57442 114757, 57565 114982, 58056 115192, 58527 115785, 59279 116960, 59350 117163, 58951 118151, 58671 118440, 58290 118653, 58462 118826, 58186 118947, 58515 119008, 58640 118852, 59119 119672, 58967 119841, 59170 119719, 59363 119675, 59165 119381, 58666 118709, 58719 118459, 58830 118384, 59667 118140, 59737 118186, 59689 118442, 60184 118431, 60572 118751, 60585 119148, 60064 119689, 59949 119636, 59951 119691, 60828 119749, 61275 120107, 62517 120965, 62758 121317, 62728 121862, 62303 122490, 61551 122869, 61284 122810, 60776 122783, 60817 123313, 60832 123760, 60645 124359, 60406 124472, 60586 124753, 60783 125022, 60006 125234, 59407 125305, 58785 124785, 56256 123246, 55760 123060, 54267 122833, 54717 123249, 55018 123931, 54763 124786, 54215 125305, 53530 125467, 52442 124867, 52242 123757, 52348 123422, 52611 123155, 52272 123286, 51585 123719, 51020 124011, 50908 124028, 50741 124259, 50629 124354, 50253 124854, 49035 126539, 48602 127384, 47751 127693, 47397 127711, 47128 127695, 47077 127646, 46339 127787, 46701 125546, 46567 125593, 46010 125020, 45955 124914, 46174 123986, 46460 123793, 46667 123703, 46427 123541, 46425 123482, 46347 123443, 46532 122616, 46858 122570, 47108 122521, 47045 122464, 47064 122341, 46316 122472, 45690 121886, 45889 121332, 45457 120107, 45466 119986, 45974 119089, 46476 118852, 46265 118621, 46284 118399, 46403 118049, 46386 118023, 46245 118094, 45180 118393, 44675 118156, 44579 117705, 45045 116923, 45014 116932, 44655 116014, 44746 115751, 45290 115177, 45452 115075, 44820 114214, 45202 113070, 46501 112733, 46852 113161, 46906 113107, 46970 113154, 47579 113351, 47911 113446, 47965 113842, 48166 113374, 48326 113175, 48000 113228, 47718 112983, 47451 112622, 47747 111963, 48489 111875, 48743 112225, 48972 111824, 49083 111716, 49743 111869, 49969 111583, 51152 111683), (48409 122600, 48324 122624, 47654 122748, 47338 122777, 47502 123168, 47804 122864, 48364 122686, 48744 122696, 48722 122569, 48409 122600), (57951 122695, 57903 122751, 58112 122882, 58067 122534, 58034 122352, 57951 122695), (48493 121301, 48417 121465, 48415 121933, 48553 121976, 48928 121728, 49147 121436, 48729 121124, 48493 121301), (54925 118138, 54898 118285, 54460 118942, 54509 119258, 54884 119573, 55618 119311, 56326 119377, 56609 119307, 56945 119345, 57331 119293, 57548 119318, 57886 119012, 57384 119031, 57260 119161, 57095 118981, 56465 118759, 56139 118532, 55772 118872, 55682 118520, 55561 118503, 55319 118349, 54972 118094, 54925 118138), (47758 118280, 47674 118233, 47822 118480, 47464 118893, 47649 119069, 48018 119340, 48258 119023, 48383 118578, 48704 118568, 48430 118459, 48173 118264, 48176 118157, 47758 118280), (47443 115224, 47197 115404, 47115 115407, 46384 115117, 46104 115131, 46521 115254, 46591 116556, 46500 116654, 46146 116837, 46405 116838, 46436 117009, 46432 117814, 46496 117790, 46755 117326, 47019 117278, 46805 116686, 46858 116485, 47038 116290, 46914 116125, 47288 115356, 48033 115210, 48239 115203, 48358 115275, 48563 115559, 48479 115258, 48648 115157, 48108 114884, 48024 114597, 47443 115224), (50998 115762, 51078 115727, 51707 115703, 51027 115617, 50998 115762)), ((57869 126896, 57900 127057, 57780 127172, 57549 127127, 57577 126908, 57738 126828, 57869 126896)), ((46488 125644, 46093 125968, 45969 125787, 46102 125552, 46429 125461, 46488 125644)), ((45087 122615, 45140 122739, 45024 122944, 44727 122934, 44568 122742, 44645 122374, 45112 122153, 45087 122615)), ((201341 120196, 201688 120940, 200883 121922, 200051 121567, 199946 120704, 200230 120409, 200963 120126, 201341 120196)), ((60320 116035, 60348 116286, 60151 116446, 59779 116447, 59549 116012, 60012 115846, 60320 116035)), ((197744 115003, 197353 115911, 196659 115820, 196402 115199, 196554 114920, 197037 114558, 197336 114532, 197744 115003)), ((55148 110708, 55264 111219, 54792 111618, 55012 112115, 54702 112627, 54000 112714, 53812 112588, 53484 111970, 54141 111391, 54669 111536, 54242 111110, 54360 110689, 54754 110497, 55148 110708)), ((192929 110244, 192730 111200, 192042 111253, 191667 110704, 191756 110402, 192152 109954, 192436 109866, 192929 110244)), ((44842 110127, 45126 110772, 44655 111238, 44241 111219, 43944 110815, 44005 110438, 44152 110124, 44842 110127)), ((49428 102630, 49804 102853, 49992 103032, 49981 103345, 49994 103879, 50069 103820, 51123 103865, 51715 104465, 51740 104737, 52199 105018, 52208 105191, 52339 104908, 52911 104872, 53269 105376, 53060 105650, 53428 105874, 53473 105744, 53708 105642, 54070 105506, 55047 105914, 55106 106028, 55166 106772, 55189 107283, 54764 108233, 54569 108391, 54444 108447, 53727 108335, 53332 108070, 53165 107784, 52325 108203, 52265 108190, 52249 108233, 52445 108598, 52426 108814, 52503 108844, 52596 109140, 52539 109304, 52173 109591, 51675 109886, 51547 109860, 51013 109546, 50796 109589, 50064 109595, 49504 110162, 49408 110211, 49006 110128, 48742 110053, 48247 109620, 48428 109363, 48359 109239, 48093 109134, 47666 108814, 47094 108878, 46932 108858, 46591 108436, 46633 108699, 46342 109023, 46379 109052, 46311 109402, 46235 109874, 45589 110280, 45040 109860, 44922 109886, 44219 109766, 44015 109274, 44268 108287, 43960 108147, 43850 108029, 43738 107546, 43613 106423, 43649 106401, 43550 106015, 43694 105801, 43976 105749, 44450 105179, 44652 105072, 45411 104923, 45262 104403, 45354 103903, 45470 103472, 45771 103350, 46379 103184, 46807 103576, 47056 103740, 47002 103783, 47037 103892, 46992 103942, 47322 103909, 47350 104080, 47514 104466, 47832 104544, 48028 104672, 48420 104647, 48558 104712, 47926 104269, 47736 104083, 47736 103708, 47719 103275, 47778 103037, 47983 102852, 48316 102749, 49103 102577, 49428 102630), (48511 105872, 47892 105814, 47842 105898, 48349 106520, 48790 106286, 49064 106185, 49396 106434, 49191 106170, 48642 105789, 48511 105872), (51347 106336, 51685 105895, 51549 105964, 51141 105787, 51347 106336)), ((43434 109166, 43146 109805, 42726 110067, 42524 110033, 42209 109774, 42071 109431, 42113 108978, 42359 108626, 43434 109166)), ((187470 106675, 187464 107206, 187100 107308, 186841 107052, 186856 106882, 187021 106600, 187164 106524, 187470 106675)), ((43562 106464, 43192 107023, 41725 106917, 43050 106280, 43562 106464)), ((56179 104758, 56627 105384, 56775 105976, 56685 106165, 56317 106328, 55689 106304, 54954 105308, 54683 104776, 55108 104206, 55158 104189, 56179 104758)), ((53778 103300, 53696 103532, 53404 103598, 53747 104091, 53892 104364, 53826 104482, 53420 104785, 53126 104718, 53001 104673, 52616 104680, 52675 104307, 52761 104262, 52725 104066, 52790 103922, 53397 103595, 53241 103345, 53414 103110, 53651 103102, 53778 103300)), ((159727 97323, 161091 99112, 161138 99300, 160980 99455, 160047 101472, 159871 101425, 157595 101654, 156772 100525, 156618 98721, 156938 97976, 157189 97448, 159607 97275, 159727 97323)), ((152469 97104, 153905 97767, 153870 97873, 154075 100203, 152879 100955, 152368 100991, 151002 100877, 149984 100230, 149887 98302, 151514 96867, 152469 97104)), ((145896 97388, 146431 99647, 144920 100151, 143349 99951, 142614 99482, 142499 98236, 143586 97174, 145896 97388)), ((46501 92984, 46428 93160, 47013 93156, 47086 93426, 47224 94049, 47437 94147, 47831 93905, 48128 93988, 48379 94008, 48490 94085, 48529 94265, 49053 93974, 49680 93566, 50799 93809, 51257 94482, 51123 95098, 51199 95163, 51126 95423, 50879 95495, 50738 95291, 50371 95544, 49708 96024, 48852 95846, 48155 95103, 47606 94945, 47563 95126, 47505 95180, 46960 95291, 46914 95348, 47367 96169, 47782 96063, 48163 96570, 48820 96423, 49186 96328, 49633 96253, 49775 96179, 50399 95896, 50544 96752, 50666 96869, 51773 95903, 51843 95802, 52514 96335, 52700 96529, 52844 96541, 53077 97662, 52450 98149, 52230 98288, 51645 98503, 51450 98483, 51109 98289, 51009 98465, 50985 99173, 50910 99220, 50297 99344, 49680 99426, 48341 99277, 48200 99323, 47944 99288, 47693 99275, 47605 99091, 47575 98828, 47451 98984, 46942 98680, 46629 98463, 46413 98230, 46327 98071, 45855 97910, 44948 96670, 44933 96547, 45024 96317, 44792 96475, 44400 96611, 43657 96442, 43480 96163, 43434 95220, 43930 94229, 44166 94039, 44863 94015, 45021 94101, 45378 94399, 45298 95277, 45679 95170, 46150 94855, 46520 94892, 46704 95047, 46550 94833, 46632 94526, 46552 94575, 45764 94182, 45697 93501, 45854 93315, 45692 93206, 45616 93046, 45771 92720, 46132 92645, 46501 92984)), ((44760 98565, 44523 98822, 44370 98837, 44291 98745, 44290 98543, 44521 98376, 44760 98565)), ((53409 97651, 53497 97946, 53474 98137, 53350 98271, 53173 98158, 53187 97852, 53227 97573, 53409 97651)), ((48971 92063, 49555 92376, 49613 92782, 49475 93614, 48350 93934, 47934 93508, 47637 92913, 47926 92315, 48122 92155, 48440 92040, 48971 92063)), ((46911 85788, 47013 85995, 47348 87219, 47704 87412, 47844 87548, 48381 87711, 48514 87464, 49659 87271, 49913 87192, 50290 87032, 50649 86894, 50722 87543, 51121 87994, 51206 88053, 51225 87971, 51638 87652, 51956 87428, 52283 87023, 52700 87395, 52766 87485, 53245 87556, 53302 88332, 53453 88632, 53341 88808, 52950 89073, 52436 89358, 52091 89462, 51770 89408, 51416 89187, 51330 89003, 51321 88821, 51229 89028, 51193 89427, 51179 89850, 50945 89977, 50376 90059, 49400 90081, 48646 89922, 48302 89720, 47989 89321, 47990 89133, 47919 89172, 47586 89554, 47352 89511, 47088 89332, 46564 88915, 46446 88778, 46213 88280, 46182 88137, 46460 87778, 46377 87753, 46085 87292, 46053 86660, 46386 85883, 46743 85752, 46911 85788)), ((50548 85205, 50713 85448, 50604 85706, 50117 85968, 49815 85886, 49568 85601, 49643 85368, 50160 85084, 50548 85205)), ((49008 84641, 49053 85013, 48805 85326, 48364 85206, 48310 84816, 48653 84504, 49008 84641)), ((49211 82755, 49191 83006, 48952 83090, 48843 82833, 48987 82629, 49211 82755)), ((48523 77969, 48895 78220, 49015 78364, 49563 78596, 49729 78365, 50554 78321, 51175 78241, 51548 78125, 51905 78031, 51906 78674, 52273 79186, 52351 79254, 52382 79177, 52801 78919, 53143 78733, 53526 78348, 53904 78779, 54007 78926, 54373 79022, 54401 79735, 54525 80065, 54387 80238, 53984 80453, 53427 80686, 53084 80747, 52760 80656, 52443 80402, 52371 80190, 52383 79989, 52261 80197, 52182 80592, 52120 81024, 51863 81129, 51302 81144, 50312 81060, 49819 80893, 49512 80801, 49274 80582, 49005 80160, 49031 79954, 48949 79988, 48567 80337, 48332 80264, 48097 80067, 47608 79584, 47510 79436, 47339 78936, 47321 78776, 47665 78416, 47582 78378, 47363 77929, 47398 77348, 47774 76674, 48294 76555, 48523 77969)), ((51956 76355, 52079 76589, 51950 76813, 51495 76997, 51230 76893, 51037 76612, 51128 76411, 51619 76207, 51956 76355)), ((50509 75601, 50512 75943, 50260 76206, 49865 76049, 49861 75691, 50202 75443, 50509 75601)), ((50306 69871, 51206 70401, 50984 70773, 50982 71165, 51103 70854, 51546 70292, 51909 70307, 52807 70204, 53416 70207, 53626 70174, 53571 70620, 53761 70994, 54231 71532, 53947 71951, 53916 71977, 53823 72242, 53644 72904, 53226 73014, 52867 72975, 51707 72731, 51229 72506, 50917 72145, 50788 71855, 50908 71368, 50703 71424, 50005 71872, 49073 70847, 49020 70656, 49028 70231, 49286 70023, 49725 69736, 50095 69655, 50306 69871)), ((55556 71177, 56131 71416, 56068 71801, 56179 72534, 54895 72996, 54786 73002, 54365 72821, 54264 72717, 54138 72085, 54240 71557, 54576 71445, 55339 70858, 55556 71177)), ((58257 63274, 58858 63668, 58786 63867, 58748 64771, 57674 64941, 57335 64985, 56907 64705, 56900 63842, 56998 63592, 57147 63573, 58181 63048, 58257 63274)), ((54996 61855, 56569 61979, 56455 62334, 56538 62591, 56845 63098, 56964 63343, 56682 63619, 56630 63652, 56193 64551, 55688 64587, 55092 64384, 54320 64065, 53961 63811, 53676 63328, 53621 63100, 53858 62584, 54150 62118, 54568 61754, 54996 61855)), ((53188 60896, 54066 61658, 53893 61852, 53763 62528, 53617 62540, 52739 62895, 52467 62453, 52002 61658, 52053 61148, 52927 60783, 53108 60777, 53188 60896)), ((59912 56093, 59895 56134, 60427 57196, 59584 58121, 58985 58086, 57987 57545, 57703 57058, 58198 55975, 58704 55962, 59912 56093)), ((72187 50456, 73380 52070, 73664 53098, 73791 53592, 73615 54190, 73475 54586, 72909 55356, 71768 55782, 70993 56504, 70166 56607, 69369 56374, 69050 55037, 68908 54569, 68538 54097, 68002 53279, 68431 52727, 68723 52377, 69154 50967, 69319 50325, 71192 50004, 72187 50456)), ((63590 50632, 62993 52613, 62509 52671, 62140 52800, 61340 52119, 61218 51845, 60976 51445, 61527 50604, 61738 50533, 63606 50455, 63590 50632)), ((72012 49394, 72042 49663, 71905 49790, 71641 49703, 71727 49364, 72012 49394)), ((66693 47247, 66268 49233, 66099 49389, 65183 49338, 64609 48821, 64521 48606, 64453 47562, 66455 47192, 66693 47247)), ((65433 42590, 64278 43177, 63534 42833, 63723 43261, 63805 43400, 63821 43970, 63810 45111, 62144 45902, 61273 46927, 59816 46319, 58710 46288, 57977 46244, 57683 45699, 57549 45508, 57464 44721, 57903 44023, 58071 42886, 58183 42534, 58821 41820, 59562 41411, 61145 41368, 63011 42136, 63454 42713, 63295 42175, 63778 41344, 65060 41269, 65433 42590)), ((69531 44365, 69737 44420, 69578 45755, 69331 45981, 68632 46320, 68227 45773, 67773 45569, 67678 45292, 67794 44443, 69436 44057, 69531 44365)), ((71756 41595, 72451 41761, 72403 42192, 72161 42318, 71695 42718, 71374 42386, 71224 41822, 71310 41586, 71650 41513, 71756 41595)), ((62426 39835, 62518 39966, 61621 41300, 61426 41292, 59976 40081, 59886 39819, 59966 39640, 60468 39374, 61893 39297, 62426 39835))) \ No newline at end of file diff --git a/stress_benchmark/resources/049.settings b/stress_benchmark/resources/049.settings index cc70c56c37..7971cfb8ec 100644 --- a/stress_benchmark/resources/049.settings +++ b/stress_benchmark/resources/049.settings @@ -73,7 +73,6 @@ raft_surface_margin=15 support_tree_branch_diameter_angle=7 prime_tower_base_height=0.12 machine_nozzle_head_distance=3 -support_interface_skip_height=0.12 support_bottom_pattern=grid bottom_thickness=0.8 cool_fan_enabled=True @@ -298,6 +297,7 @@ mold_angle=40 raft_base_extruder_nr=0 z_seam_y=235 wall_overhang_angle=90 +seam_overhang_angle=30 machine_steps_per_mm_e=1600 gradual_support_infill_step_height=1 cross_infill_pocket_size=3.0 diff --git a/stress_benchmark/resources/049.wkt b/stress_benchmark/resources/049.wkt index 325b9054ab..8f4f91c12b 100644 --- a/stress_benchmark/resources/049.wkt +++ b/stress_benchmark/resources/049.wkt @@ -1 +1 @@ -MULTIPOLYGON (((117969 83306, 118266 83540, 118465 83841, 118650 84265, 118676 84997, 118624 85323, 118493 85579, 118125 86063, 117970 86152, 117516 86283, 117283 86263, 117053 86172, 116697 85881, 116522 85610, 116327 85193, 116343 84382, 116448 84020, 116614 83691, 117008 83299, 117252 83184, 117540 83126))) \ No newline at end of file +MULTIPOLYGON (((117969 83306, 118266 83540, 118465 83841, 118650 84265, 118676 84997, 118624 85323, 118493 85579, 118125 86063, 117970 86152, 117516 86283, 117283 86263, 117053 86172, 116697 85881, 116522 85610, 116327 85193, 116343 84382, 116448 84020, 116614 83691, 117008 83299, 117252 83184, 117540 83126, 117969 83306))) \ No newline at end of file diff --git a/stress_benchmark/resources/050.settings b/stress_benchmark/resources/050.settings index a16b860daf..d26a8aac12 100644 --- a/stress_benchmark/resources/050.settings +++ b/stress_benchmark/resources/050.settings @@ -73,7 +73,6 @@ raft_surface_margin=15 support_tree_branch_diameter_angle=7 prime_tower_base_height=0.2 machine_nozzle_head_distance=3 -support_interface_skip_height=0.2 support_bottom_pattern=concentric bottom_thickness=0 cool_fan_enabled=True @@ -298,6 +297,7 @@ mold_angle=40 raft_base_extruder_nr=0 z_seam_y=0 wall_overhang_angle=90 +seam_overhang_angle=30 machine_steps_per_mm_e=1600 gradual_support_infill_step_height=1 cross_infill_pocket_size=0 diff --git a/stress_benchmark/resources/050.wkt b/stress_benchmark/resources/050.wkt index 627bcdec01..f782c8a783 100644 --- a/stress_benchmark/resources/050.wkt +++ b/stress_benchmark/resources/050.wkt @@ -1 +1 @@ -MULTIPOLYGON (((71733 150298, 71941 150653, 71944 151277, 71703 151857, 71377 152111, 71223 152111, 70730 151719, 70575 151264, 70692 150684, 71081 150281, 71517 150214)), ((74068 132097, 76884 132875, 79516 134287, 81338 135740, 82072 136518, 82654 137208, 83350 138173, 84021 139298, 84573 140346, 85012 141235, 85750 142918, 86335 144785, 86567 146606, 86555 148197, 86485 149260, 86349 150728, 86045 152292, 85485 153850, 84781 155382, 84237 156492, 83040 158241, 81051 160435, 78859 162178, 77305 163039, 76276 163332, 74820 163616, 72636 163894, 70621 163995, 69527 163958, 68876 163800, 67782 163395, 65854 162592, 63956 161700, 63003 161200, 62234 160651, 60723 159402, 59157 157694, 57897 155680, 57023 153783, 56646 152808, 56290 151816, 56036 150769, 55937 149535, 55921 148094, 55921 147198, 55941 146002, 56014 144787, 56156 143861, 56316 143259, 56596 142450, 57385 140631, 58608 138509, 60062 136694, 61758 135183, 63706 133964, 65919 133032, 68403 132375, 70476 132050, 71888 131929) (70185 133335, 69314 133491, 68649 133668, 67529 134020, 66279 134466, 65005 134964, 63805 135471, 62786 135948, 61775 136501, 61633 136752, 61210 137298, 60306 138396, 59841 138934, 58640 140715, 57558 143204, 57016 146018, 56927 148490, 56987 149665, 57069 150730, 57260 151750, 57653 152773, 58177 153851, 58811 155108, 60601 157597, 63510 160215, 67038 162035, 70106 162891, 71536 163074, 73509 163027, 75531 162588, 76264 162329, 77190 161915, 78343 161218, 79527 160257, 80544 159274, 81193 158590, 82095 157491, 83155 155983, 83899 154634, 84182 153912, 84182 153615, 84373 153031, 84582 152479, 84929 151621, 85173 150938, 85366 150098, 85452 149072, 85473 147972, 85473 147087, 85385 145530, 85052 143770, 84362 141941, 83511 140223, 82985 139254, 82245 138066, 81236 136833, 79975 135760, 78699 134907, 77806 134370, 76347 133703, 74366 133207, 72152 133129)), ((118943 15475, 120025 15601, 120991 15889, 121532 16348, 121701 16833, 121675 17234, 121579 17448, 121382 17656, 121055 17875, 120567 18124, 119861 18429, 118966 18785, 116792 19609, 114025 20685, 111301 21871, 109036 23081, 107176 24237, 105653 25245, 102888 27218, 99289 30020, 95895 32956, 93553 35178, 92422 36342, 91304 37554, 90053 39098, 88783 40945, 87595 42843, 85814 45767, 86646 47345, 87632 49097, 88342 50324, 89785 52762, 90396 53768, 91029 54774, 91141 54900, 91513 54807, 92370 54048, 93817 52426, 95476 50430, 96827 48780, 98698 46590, 101380 43537, 102316 42449, 103582 40934, 105075 39292, 106675 37856, 107880 37215, 108550 37266, 108709 37435, 108923 37967, 109397 39281, 110034 41191, 111017 44298, 111851 46827, 112646 48804, 113272 49597, 113774 49611, 113969 49512, 114660 49264, 116444 48691, 119708 47684, 125353 45970, 127922 45243, 130836 44526, 133128 44099, 134302 43971, 136196 44061, 136282 44993, 136252 45386, 136095 46023, 135779 46814, 135283 47799, 134584 49015, 133665 50502, 132468 52353, 131426 53926, 130037 55986, 126837 60570, 123092 65630, 119661 69858, 117215 72610, 116093 73773, 115365 74545, 114608 75366, 113905 76173, 113951 76219, 114711 76347, 116463 76587, 116985 76647, 118547 76885, 121241 77363, 124564 78021, 127267 78586, 128810 78924, 130746 79491, 133715 80540, 136930 81865, 140261 83402, 143579 85088, 146751 86858, 149644 88650, 151526 89940, 153225 91229, 153875 90558, 154099 90250, 154334 89667, 154533 88750, 154691 87693, 154860 86391, 155464 83531, 156710 79047, 158375 74199, 159834 70494, 161138 67513, 163693 62319, 167168 56301, 170835 51158, 173699 47836, 174965 46589, 175663 45930, 176380 45378, 177091 45027, 177933 44755, 178849 44548, 179420 44467, 179767 44501, 179971 44601, 180135 44740, 180333 45176, 180384 45974, 180189 46957, 179882 47783, 179099 49349, 180281 51676, 180808 52569, 181682 53768, 182993 55273, 184507 56882, 186503 58963, 187689 60221, 188618 61229, 189410 62128, 190008 62854, 190515 63528, 190950 64175, 191260 64680, 191680 65403, 192514 67168, 193510 69829, 194286 72659, 194700 74779, 194819 75758, 194887 76785, 194987 78870, 195074 81459, 195121 83584, 195147 85302, 195206 88033, 195319 90386, 195513 91966, 195749 93073, 195968 93935, 196408 95463, 197035 97261, 197796 98929, 198760 100582, 200004 102334, 201598 104300, 203620 106593, 205528 108674, 207171 110440, 210056 113958, 212936 118385, 214970 122963, 216086 126755, 216352 128051, 216887 130519, 217252 132122, 217350 132513, 217469 133069, 217669 134101, 217873 135272, 218014 136161, 218183 137323, 218698 139933, 219487 142597, 220412 144422, 221158 145240, 221577 145442, 222408 145777, 222781 145777, 223834 146201, 224547 146546, 224853 146813, 225000 147264, 225000 148896, 223427 149128, 221724 149191, 218487 149206, 215042 149122, 212945 149014, 211285 148841, 208309 148383, 204068 147531, 200006 146499, 197412 145703, 195783 145093, 193463 144120, 189913 142497, 186230 140671, 183565 139257, 181547 138122, 178043 136056, 174349 133639, 171183 131214, 168840 129166, 167807 128195, 167053 127523, 166136 126756, 165169 126041, 164842 126060, 164666 126145, 164494 126339, 164302 126689, 164070 127240, 163777 128038, 163390 129163, 162642 131395, 161872 133599, 160848 136301, 159800 138749, 158679 141042, 157440 143272, 156031 145533, 154408 147921, 152981 149904, 148920 155415, 148312 156158, 147217 157407, 145901 158827, 144436 160340, 142903 161870, 141373 163338, 139924 164669, 138950 165518, 138381 165990, 137607 166599, 136384 167514, 135211 168353, 134453 168876, 133296 169626, 132583 170116, 131933 170606, 131933 170712, 132667 171422, 133489 172179, 134840 173364, 136008 174441, 137806 176161, 139761 178101, 141799 180184, 143848 182333, 145830 184472, 147715 186573, 148915 187951, 149760 188960, 151109 190618, 152400 192314, 153349 193740, 153951 194794, 154666 196222, 155033 197051, 155216 197663, 155203 198097, 154979 198389, 154535 198576, 153857 198698, 152642 198815, 151430 198850, 148904 198880, 145617 198877, 143039 198853, 133590 198718, 133754 200211, 133810 201115, 133917 203200, 134036 205812, 134185 209802, 134241 213090, 134244 217826, 134172 222649, 134034 227296, 133838 231505, 133595 235013, 133313 237554, 133156 238579, 132937 239008, 132576 239432, 132076 239574, 131789 239574, 131432 239484, 130857 239137, 130040 238424, 129125 237527, 128322 236709, 126822 235077, 124480 232393, 121897 229291, 119151 225871, 116327 222236, 113507 218489, 110771 214733, 108815 211962, 105833 207656, 105077 206592, 104530 205852, 104150 205381, 103894 205123, 103705 205004, 103518 204978, 103174 205361, 102830 205797, 102400 206373, 101897 207069, 100734 208738, 99429 210675, 97601 213328, 95539 216164, 93708 218459, 92350 220002, 91563 220837, 90553 221789, 89444 222616, 88591 222962, 88118 222901, 87959 222743, 87775 221928, 87636 221093, 87545 220408, 87429 219348, 87371 216827, 87605 212596, 88239 207200, 89021 202000, 89902 196742, 90419 193803, 90802 191730, 90972 190890, 91222 190117, 89129 190117, 88366 190095, 87623 189953, 86871 189584, 85557 188721, 84882 188224, 84107 187560, 83425 186840, 82942 186235, 82118 185108, 81601 184442, 81148 183928, 80742 183558, 80345 183305, 79917 183141, 79316 183010, 77125 182772, 72063 181944, 65631 180404, 59515 178324, 55120 176421, 52462 175055, 51432 174494, 50430 173911, 49422 173274, 48333 172538, 47091 171657, 45579 170546, 43367 168898, 41981 167661, 39643 165393, 37354 162983, 36032 161483, 35488 160777, 35079 160191, 34515 159333, 33944 158404, 33570 157755, 32939 156583, 32533 155869, 32168 155295, 31825 154847, 31472 154488, 31079 154180, 30601 153880, 29878 153485, 29391 153187, 28688 152700, 27971 152146, 27250 151532, 26606 150930, 26062 150368, 25458 149648, 25223 149198, 25058 148573, 25000 147602, 25138 146571, 25362 145812, 25775 145023, 26157 144592, 26736 144195, 27414 143837, 29003 143112, 29762 142799, 30141 142704, 30871 141626, 31944 138713, 33031 134099, 33875 129414, 34749 123655, 32967 122002, 31605 120355, 29887 117708, 28445 114747, 27600 112452, 27300 111346, 27077 110359, 26907 108877, 26832 106568, 26810 103692, 26811 100222, 26839 98334, 26912 96760, 27050 95414, 27274 94142, 27607 92795, 28085 91166, 28826 88802, 29239 87561, 29765 86101, 30354 84639, 31024 83146, 31814 81542, 32763 79744, 33942 77610, 35821 74313, 37342 71463, 39289 67505, 41092 63463, 42712 59432, 44118 55506, 45271 51775, 46139 48335, 46584 46048, 46755 44718, 46835 43017, 46814 40310, 46638 37585, 46430 35821, 46225 34800, 45866 33413, 45276 31524, 44618 29796, 44139 28742, 43830 28202, 43418 27257, 43287 26480, 43362 25908, 43490 25671, 43752 25587, 44352 25604, 44724 25696, 45230 25975, 45857 26516, 46509 27182, 47034 27734, 47921 28817, 48928 30395, 49842 32338, 50568 34239, 50892 35182, 51205 36179, 51432 37304, 51520 38728, 51535 40443, 51535 41906, 51387 44793, 50904 48476, 50024 52308, 49049 55544, 48257 57866, 47867 58950, 47452 60011, 46917 61266, 46182 62892, 45237 64919, 39641 76637, 38761 78515, 38050 80080, 37453 81462, 36883 82855, 35183 87223, 34421 89254, 33556 91688, 32866 93817, 32337 95709, 31948 97425, 31683 99031, 31527 100590, 31466 101787, 31456 102669, 31518 103987, 31703 105612, 31980 106830, 32196 107357, 32362 107461, 32578 107442, 33015 107295, 33570 107026, 34191 106662, 34828 106241, 35427 105793, 36130 105182, 38244 102320, 39719 100414, 41028 98854, 42118 97649, 43718 95959, 47710 92261, 53183 88094, 59207 84563, 64348 82158, 66321 81372, 66913 81126, 67576 80834, 68211 80518, 68283 80403, 68446 79287, 68587 78141, 68795 76201, 69143 73298, 69503 70574, 69664 69512, 69927 67572, 70020 65865, 69830 64609, 69481 63670, 69238 63150, 67036 58188, 66354 56549, 65769 54890, 65534 53722, 65668 53018, 66193 52749, 67126 52888, 68486 53403, 69862 54050, 73390 55854, 74436 53418, 75202 51752, 76357 49388, 77612 46965, 78922 44562, 80242 42259, 81527 40137, 82733 38276, 83543 37114, 84947 35265, 88618 31008, 93658 26107, 98973 22029, 103144 19474, 105424 18333, 108015 17295, 111644 16227, 115245 15597, 117779 15426) (130143 171932, 129342 172334, 128882 172586, 128293 172933, 127356 173508, 126385 174131, 125303 174855, 124692 175233, 123648 175841, 122464 176494, 121241 177142, 120072 177733, 119057 178219, 118012 178667, 117802 178667, 116080 179263, 114558 179827, 113070 180341, 110879 181032, 108582 181689, 106288 182286, 104100 182795, 102130 183190, 100481 183449, 99568 183539, 99042 183539, 98380 183613, 97691 183928, 97000 184619, 96331 185522, 95988 186029, 95566 186606, 94946 187374, 94341 188047, 93963 188422, 93677 188656, 92984 189391, 92526 190087, 92409 190446, 92228 191232, 91880 192928, 91470 195144, 91017 197744, 90550 200589, 90087 203546, 89654 206476, 89364 208552, 89147 210211, 88787 213116, 88511 215735, 88410 217513, 88421 218529, 88536 219947, 88627 220727, 88751 221215, 88938 221418, 89219 221346, 89623 221004, 90183 220402, 91170 219273, 91881 218440, 92791 217337, 93706 216180, 94670 214905, 95730 213450, 96933 211755, 98322 209755, 101496 205142, 102769 203316, 103796 201877, 104604 200787, 105221 200006, 105679 199495, 106004 199217, 106172 199132, 106301 199132, 106519 199224, 106528 199567, 106236 200273, 105779 201156, 105242 202162, 104932 202796, 104646 203476, 104652 203590, 104936 204152, 105339 204801, 112862 215160, 115122 218257, 118582 223081, 118957 223619, 120137 225198, 122043 227626, 124140 230176, 126265 232665, 128256 234905, 129952 236714, 131192 237900, 131699 238319, 131841 238271, 132072 238036, 132447 237400, 132492 236852, 132589 235360, 132665 233188, 132719 230443, 132753 227233, 132766 223670, 132762 219861, 132740 215916, 132700 211942, 132646 208051, 132576 204347, 132491 200947, 132393 197951, 132282 195475, 132161 193623, 132083 192782, 132012 192408, 132005 192018, 132097 191823, 132162 191823, 132269 192012, 132463 192523, 132683 193283, 132907 194210, 133113 195155, 133315 195986, 133549 196830, 133687 197074, 134305 197278, 136185 197503, 139616 197642, 143629 197709, 146093 197731, 149470 197738, 152182 197668, 153507 197484, 153860 197241, 153860 197043, 153696 196696, 153230 195919, 152497 194866, 151532 193582, 150371 192106, 149048 190480, 147600 188743, 146060 186939, 144465 185108, 142852 183290, 141254 181525, 139706 179858, 138246 178327, 136906 176973, 135724 175840, 134987 175175, 133850 174215, 133048 173518, 132180 172741, 131910 172435, 131432 171982, 130861 171764) (84619 84690, 82464 84923, 80882 85217, 78763 85912, 77858 86231, 77281 86448, 75484 87160, 75277 91989, 75124 94707, 74850 97688, 74429 100529, 73971 102930, 73569 104840, 72775 108161, 71649 112049, 70346 115632, 69201 118282, 68635 119465, 68150 120393, 67419 121469, 66324 122719, 65031 124048, 64247 124832, 63181 125849, 61773 127121, 60503 128184, 59762 128750, 58458 129599, 57711 129981, 57055 130149, 56216 130200, 55144 130121, 54303 129889, 53629 129435, 53140 128894, 52868 128517, 52439 127695, 52266 126968, 52266 126408, 52431 125452, 53110 124253, 54579 122778, 56471 121195, 58036 119955, 60521 117411, 63363 113496, 65528 109125, 66669 105664, 67005 103977, 67221 102061, 67529 98437, 67764 94515, 67858 92032, 67858 89693, 66972 89920, 66312 90188, 65066 90788, 63553 91610, 61871 92597, 60112 93689, 58374 94829, 56749 95961, 55682 96751, 54772 97471, 53105 98834, 50978 100641, 49006 102401, 47235 104064, 45715 105587, 44495 106918, 43625 108011, 43239 108605, 43126 108897, 43097 109151, 43154 109562, 43338 110100, 43578 110640, 43833 111154, 44293 112187, 44798 113594, 45249 115258, 45604 116859, 45820 117939, 46035 119596, 46123 121939, 45970 124720, 45683 127359, 45391 129567, 44772 133545, 43910 137771, 42901 141224, 42016 143488, 41524 144514, 41063 145388, 40480 146304, 39797 147134, 39123 147823, 38703 148221, 38116 148730, 37288 149387, 36506 149938, 36034 150230, 35699 150400, 34646 151016, 33616 151680, 32288 152622, 33622 155237, 34813 157321, 36573 159887, 38693 162422, 40650 164466, 42161 165931, 44736 168289, 47737 170723, 50669 172676, 53058 174002, 55003 174960, 58441 176529, 62678 178241, 66635 179550, 69426 180280, 70662 180531, 71548 180693, 73299 180993, 77741 181704, 80045 182056, 82149 182364, 83861 182602, 84703 182709, 85255 182761, 86057 182923, 86270 183157, 85670 183380, 84647 183518, 82403 183662, 83922 185496, 84752 186332, 85975 187353, 87256 188192, 88192 188661, 88702 188846, 89267 189024, 89842 189095, 90412 188983, 90968 188764, 91555 188497, 92667 187706, 94173 186186, 95642 184166, 97050 181695, 98374 178818, 99590 175587, 100674 172044, 101395 169197, 101936 166701, 102798 162054, 103875 155206, 104728 148431, 105162 143959, 105255 142463, 105427 140004, 102579 139671, 101500 139495, 100140 139155, 98807 138664, 97446 137991, 96004 137106, 94424 135980, 92653 134586, 91136 133318, 90073 132397, 88360 130943, 86288 129250, 84327 127727, 82868 126641, 82089 126082, 81238 125444, 80499 124789, 80011 124171, 79712 123624, 79454 123071, 79079 121771, 78560 119480, 78214 117341, 78127 116292, 78221 116046, 78507 115874, 78916 116322, 79356 117375, 79686 118537, 79837 119235, 80050 120146, 80334 121137, 80669 121971, 81106 122718, 81691 123447, 82471 124226, 83497 125125, 84483 125945, 90398 130722, 92660 132529, 94581 134044, 96166 135275, 97425 136229, 98365 136909, 98832 137229, 100504 138225, 127259 138579, 133504 138630, 139210 138653, 144297 138645, 148684 138608, 152293 138541, 155045 138446, 156404 138369, 157046 138301, 157616 138225, 157973 138131, 157997 138004, 157552 137667, 156856 137349, 155535 136900, 153893 136492, 152499 136225, 151651 136100, 150500 135987, 148268 135834, 145308 135693, 141598 135564, 137114 135445, 131832 135339, 125727 135242, 110057 135048, 107293 134996, 105341 134936, 104013 134857, 103126 134750, 102489 134609, 101204 134184, 99181 133123, 96065 130873, 92372 127517, 89000 124077, 87573 122536, 86575 121432, 85529 120217, 84736 119194, 84162 118298, 83775 117470, 83537 116642, 83415 115752, 83378 114993, 83383 113609, 83465 112860, 83662 112290, 84017 111662, 84469 111086, 85071 110455, 85886 109748, 86983 108918, 88431 107919, 90301 106694, 92661 105201, 95898 103192, 96844 102616, 97755 102020, 98337 101499, 98608 100958, 98586 100304, 98292 99436, 97749 98262, 96751 96235, 96020 94910, 94876 93038, 93607 91162, 92284 89371, 90977 87757, 89753 86408, 88682 85416, 88063 84964, 87567 84761, 86555 84665) (110240 167948, 108953 168099, 107818 168256, 105360 168633, 104300 168811, 103245 169008, 103160 169062, 102892 169709, 102677 170359, 102505 170944, 102314 171667, 101839 173238, 101031 175710, 100154 178187, 99552 179777, 99262 180469, 99059 180984, 98860 181569, 98732 182176, 98829 182280, 99439 182290, 100952 182103, 103174 181659, 105286 181162, 106584 180827, 108376 180348, 110269 179807, 111753 179316, 112914 178832, 113842 178315, 114623 177721, 115346 177008, 115914 176358, 116337 175845, 116989 174921, 117540 173873, 117734 173036, 117649 172561, 117399 172265, 116237 171412, 115152 170676, 113947 169899, 112743 169162, 111665 168539, 110523 167948) (129680 140055, 125913 140065, 123118 140084, 121060 140117, 119626 140162, 118702 140227, 118018 140337, 117643 140680, 117295 141056, 116913 141505, 116529 141983, 116175 142450, 115882 142864, 115609 143319, 115609 143449, 115771 143700, 116291 144271, 116579 144722, 117146 145725, 117808 147025, 118509 148497, 119186 150011, 119780 151439, 120232 152653, 120440 153303, 120649 154415, 120655 155038, 120465 155667, 120152 156347, 119818 157033, 118988 158405, 117394 160815, 115589 163326, 114343 164944, 112491 167167, 113355 167807, 114296 168463, 115918 169562, 116473 169956, 117251 170530, 117968 171085, 118396 171433, 119126 172096, 119406 172442, 119427 172699, 118838 173536, 118490 174124, 118333 174441, 117729 175285, 117181 175991, 116584 176718, 115122 178398, 116699 177852, 117665 177464, 118423 177090, 118600 176973, 119678 176371, 121329 175506, 122102 175116, 123644 174271, 125935 172920, 128367 171383, 130857 169717, 133323 167980, 135683 166227, 137854 164518, 139288 163318, 141682 161181, 143165 159828, 144275 158769, 145083 157920, 145659 157202, 146077 156536, 146408 155840, 146647 155239, 147003 154279, 147770 151977, 148569 149085, 149164 146183, 149508 143871, 149730 141901, 149845 141021, 149986 140052) (109923 143804, 108894 143896, 107755 144014, 106655 144158, 106559 144219, 106419 144633, 106352 145235, 106352 145696, 106299 146477, 106154 148097, 105935 150161, 105654 152526, 105331 155056, 104985 157612, 104629 160055, 104372 161701, 103496 167049, 103428 167556, 103589 167626, 103909 167619, 104370 167535, 105014 167438, 107234 167153, 108784 166923, 110149 166587, 111127 166089, 111816 165525, 112289 165065, 113034 164266, 114147 162978, 115300 161545, 116428 160054, 117467 158596, 118349 157259, 119010 156132, 119317 155517, 119451 155095, 119424 154400, 119159 153110, 118644 151555, 117936 149854, 117090 148137, 116165 146523, 115214 145134, 114547 144332, 113660 143511) (155876 139525, 153993 139650, 152685 139775, 151252 139979, 150498 144680, 150134 146690, 149736 148685, 149345 150441, 149106 151405, 148551 153376, 148379 154060, 148427 154060, 148885 153500, 149365 152889, 150175 151826, 150857 150868, 152040 149141, 153366 147141, 154718 145057, 155976 143070, 157021 141369, 157736 140137, 158001 139708, 158001 139545, 157383 139487) (36659 107665, 36029 107814, 35526 107948, 34658 108248, 33802 108710, 33152 109335, 32724 109980, 32432 110529, 32140 111617, 32079 113146, 32397 114534, 32847 115336, 33289 115647, 33473 115607, 33659 115371, 33990 114721, 34402 114220, 35039 113905, 35797 113965, 36471 114263, 37059 114658, 37961 115821, 38809 118111, 39240 121363, 39313 124601, 39255 126505, 39092 128984, 38723 131954, 38139 134802, 37537 137012, 37108 138352, 36338 140142, 35108 141783, 33340 142912, 31411 143604, 30413 143871, 29400 144174, 28464 144520, 27800 144880, 27392 145196, 26993 145580, 26333 146555, 26039 147848, 26386 149179, 27080 150230, 27559 150727, 28188 151270, 29173 152024, 30069 152608, 30491 152842, 30690 152842, 30862 152606, 31119 152149, 31246 151845, 31582 151309, 32227 150684, 33182 150110, 34188 149661, 35132 149289, 36810 148236, 38842 146325, 40525 143903, 41526 141805, 42088 140108, 42875 137144, 43742 132807, 44339 128238, 44604 124766, 44668 122673, 44659 119865, 44425 116992, 43883 114631, 43244 112958, 42767 111988, 42021 110727, 41003 109443, 39886 108529, 38951 108048, 38431 107874, 37852 107694, 37267 107605) (178893 45646, 178348 45863, 177360 46464, 176179 47391, 174872 48575, 173506 49955, 172147 51463, 170863 53037, 169991 54209, 169035 55633, 167131 58796, 164626 63451, 162281 68378, 160178 73377, 158393 78252, 157005 82802, 156093 86828, 155751 89306, 155687 92617, 157233 94086, 157755 94642, 158440 95437, 159072 96246, 159618 97018, 160044 97706, 160316 98258, 160402 98624, 160301 98757, 160224 98757, 159721 98347, 159208 97905, 158610 97368, 157691 96504, 154759 94098, 150208 90768, 145477 87738, 142215 85895, 138461 84111, 136853 83375, 136050 83045, 135831 83017, 135831 83072, 135966 83233, 136338 83752, 137391 85161, 138216 86240, 140050 88921, 142180 92670, 144169 97061, 145748 101155, 146844 104269, 147328 105686, 147720 106907, 148051 108058, 148357 109260, 148670 110640, 149023 112319, 149667 115491, 150270 118705, 150807 122279, 151135 125763, 151293 128769, 151349 130483, 151436 132620, 151547 134142, 151720 134763, 151931 134901, 155080 135442, 155819 135595, 156801 135838, 157664 136097, 158143 136273, 159438 136933, 160438 133718, 162375 127630, 162985 125418, 163784 122127, 164414 119046, 164701 117315, 164772 116463, 164874 115642, 165038 114965, 165253 114660, 165475 114658, 165614 114745, 165725 115556, 165797 117416, 165741 119655, 165628 121162, 165335 123218, 166454 124685, 166836 125126, 167451 125788, 168097 126431, 168543 126840, 170201 128242, 172744 130441, 175495 132462, 180229 135527, 185726 138675, 190131 140968, 193386 142534, 198862 144706, 206105 146819, 213295 148010, 218606 148318, 220606 148254, 222172 148173, 223074 148107, 223349 148046, 223647 147900, 223584 147663, 223464 147512, 223124 147332, 222133 147048, 220224 146676, 217849 146272, 216375 146032, 214341 145652, 211593 145051, 208526 144269, 205767 143506, 203462 142842, 197243 140573, 192024 137952, 191135 137372, 190283 136839, 185921 134175, 183977 132946, 181809 131404, 179597 129569, 177535 127700, 176474 126713, 175352 125619, 173758 123991, 172163 122277, 170650 120577, 169305 118989, 168210 117608, 167451 116532, 167153 116038, 167072 115670, 166741 114822, 166413 114061, 165795 112736, 165127 111151, 164259 108804, 163496 106397, 163030 104692, 162707 103251, 162170 100642, 161759 97953, 161575 95209, 161534 92479, 161534 90643, 161591 87860, 161811 84934, 162263 82159, 162817 79712, 163169 78311, 163757 76577, 164979 73365, 166536 69597, 168282 65602, 170069 61709, 171749 58246, 173176 55542, 173902 54298, 174439 53633, 175123 52720, 176060 51381, 176960 50003, 177772 48673, 178440 47484, 178916 46523, 179146 45880, 179093 45646) (169208 116463, 169582 117028, 170607 118345, 172132 120077, 174014 122070, 176102 124171, 178253 126227, 180316 128088, 181677 129237, 182643 129989, 184178 131106, 186704 132838, 189616 134730, 192011 136226, 193315 137019, 194913 137827, 197847 139172, 201072 140515, 203296 141360, 204772 141859, 206968 142533, 210260 143454, 213440 144253, 215382 144686, 217899 145133, 218729 145258, 219032 145233, 219110 145162, 219098 145044, 218817 144375, 218235 142843, 217604 140798, 217084 138520, 216721 136473, 216496 135011, 216090 132687, 215495 129653, 214895 126988, 214508 125488, 213768 123095, 211770 123315, 210936 123361, 209306 123422, 207343 123459, 205784 123465, 203889 123457, 199764 123279, 194460 122718, 188772 121701, 183775 120565, 176535 118727, 174633 118225, 173200 117825, 172140 117498, 171358 117218, 170762 116957, 170110 116602, 169512 116316, 169208 116273) (109542 139727, 108355 139759, 107781 139790, 106596 139954, 106596 142684, 110292 142524, 111296 142465, 112487 142369, 113750 142218, 114229 141977, 114655 141676, 115292 141160, 116706 139809, 112275 139727, 111041 139715) (35360 128458, 34735 132197, 34335 134199, 33662 137183, 32965 139885, 32544 141313, 32319 141955, 32382 142035, 32643 141946, 33294 141618, 33988 141166, 34560 140692, 34829 140394, 35291 139472, 36026 137515, 36755 134971, 37262 132793, 37693 130603, 37925 129348, 38135 128083, 38135 127831, 37929 127420, 37527 126836, 37337 126616, 36840 125956, 36430 125331, 36041 124533) (119874 88611, 119167 89039, 117361 90214, 116413 90848, 114958 91850, 113494 92888, 111852 94095, 110797 94856, 109044 96093, 107162 97388, 105827 98291, 103776 99642, 102392 100582, 101375 101297, 100937 101619, 100802 101747, 100130 102218, 99225 102735, 99043 102825, 97559 103648, 96689 104155, 90350 107996, 88783 109006, 87147 110177, 85995 111176, 85470 111762, 85251 112254, 85417 112381, 85994 112391, 88247 112210, 91595 111844, 95784 111186, 100347 110204, 104544 109145, 106203 108698, 107000 108494, 107882 108287, 108923 108082, 109351 108097, 109422 108181, 109268 108339, 108684 108681, 107298 109156, 105960 109578, 104378 110052, 102645 110551, 100854 111045, 99095 111510, 97089 112003, 95966 112227, 94060 112556, 91991 112862, 90501 113052, 88218 113309, 86694 113499, 85199 113716, 84981 113804, 84715 114024, 84720 114383, 85108 114853, 85893 115440, 87086 116152, 88700 116999, 90749 117988, 92617 118846, 93695 119325, 95061 119890, 97111 120686, 99296 121481, 101524 122243, 103701 122941, 105732 123545, 107523 124020, 108832 124322, 110373 124531, 115286 125160, 121965 125995, 132050 127230, 134528 127519, 134613 127706, 134613 127803, 134344 127892, 133577 127931, 132370 127899, 130785 127802, 128878 127647, 126711 127440, 124342 127191, 121828 126903, 119230 126585, 116609 126243, 114022 125887, 111527 125519, 109186 125149, 107057 124784, 105199 124430, 104051 124186, 102779 123881, 100122 123152, 96947 122072, 93681 120683, 90805 119291, 89420 118587, 88102 117941, 86688 117282, 85743 116893, 85400 116834, 85546 117282, 85874 118028, 86288 118594, 87099 119616, 88176 120892, 89425 122313, 90749 123775, 92052 125171, 93241 126392, 93968 127105, 96232 129159, 97820 130560, 99071 131601, 100078 132344, 100929 132851, 101714 133183, 102526 133403, 103617 133601, 105482 133692, 107430 133759, 112788 133897, 119553 134026, 139231 134327, 143384 134400, 145134 134470, 148378 134570, 145571 133067, 143989 132132, 141702 130646, 139452 129026, 137928 127828, 137087 127108, 136053 126186, 134488 124729, 132818 123114, 131119 121418, 129467 119718, 127939 118093, 126607 116618, 125808 115689, 125108 114817, 123833 113109, 122571 111113, 121555 109011, 120805 107082, 120441 106035, 120053 104834, 119766 103559, 119630 102015, 119570 100211, 119541 98987, 119525 97118, 119611 95267, 119872 93443, 120232 91635, 120415 90778, 120573 89636, 120560 88848, 120456 88613, 120359 88521, 120211 88504) (96982 76766, 94112 77174, 91138 77728, 88466 78251, 85125 78878, 84798 78931, 84243 79067, 83858 79260, 83847 79464, 84129 79626, 84373 79695, 84945 80089, 85433 80479, 85936 80923, 87105 82019, 90516 81295, 93070 80884, 95614 80607, 98970 80436, 101870 82140, 102735 82684, 103961 83511, 105109 84348, 105811 84897, 107887 86672, 107642 95541, 109525 94250, 111772 92651, 115001 90253, 115674 89777, 116428 89265, 117169 88785, 117641 88494, 120249 86980, 120654 86865, 120988 86893, 121508 87080, 121794 87246, 122077 87517, 122257 87872, 122340 88336, 122323 88930, 122210 89677, 122002 90597, 121779 91438, 121583 92128, 121252 93370, 121030 94695, 120973 96376, 121032 99781, 121089 101829, 121219 103505, 121504 104809, 121902 106027, 122140 106719, 122461 107580, 122918 108712, 123357 109703, 123624 110251, 124031 110980, 125122 112552, 127186 115117, 129893 118102, 132379 120654, 133809 122061, 135576 123774, 137594 125673, 139360 127251, 140959 128574, 142476 129709, 143995 130720, 145601 131678, 146931 132409, 149596 133815, 149968 132497, 150079 131956, 150142 131072, 150108 129817, 150020 128448, 149902 126959, 149609 123864, 149172 120342, 148612 117023, 148066 114375, 147634 112488, 146902 109473, 146019 106270, 145056 103317, 144158 100862, 143483 99110, 142356 96311, 141136 93558, 139961 91322, 138959 89672, 138148 88438, 136686 86402, 134838 84112, 133181 82402, 132202 81596, 131353 81166, 129832 80586, 127187 79802, 123980 79071, 120290 78407, 116200 77825, 111789 77334, 107140 76949, 103534 76733, 101619 76657, 99479 76628) (115805 16248, 114337 16415, 113257 16624, 111487 17096, 109019 17942, 106605 18985, 104936 19841, 103252 20847, 102023 21562, 100157 22618, 99427 23011, 98021 23955, 95866 25634, 93554 27679, 91189 29984, 88869 32445, 86699 34958, 84777 37420, 83574 39133, 82543 40799, 80661 44084, 78112 48852, 75850 53461, 74551 56356, 73925 57949, 73284 59982, 72231 63729, 71215 67797, 70610 70492, 70401 71604, 70301 72227, 70174 73255, 70049 74588, 69919 76335, 69778 78602, 69615 81501, 69121 91094, 68857 95506, 68497 100481, 68128 104387, 67881 106401, 67638 107710, 66551 110923, 64818 114124, 63990 115314, 62717 116886, 60604 119250, 58427 121434, 57066 122661, 56283 123241, 55411 123913, 54509 124664, 53857 125305, 53438 125864, 53235 126369, 53230 126850, 53409 127332, 53926 128071, 54593 128638, 55551 128934, 56688 128740, 57808 128230, 58699 127653, 59346 127218, 60116 126677, 63205 124149, 65567 121707, 67493 118875, 68335 117263, 69551 114229, 71192 109139, 72592 103543, 73390 99413, 73648 97559, 73771 96146, 73934 93348, 74073 89564, 74168 85934, 74274 80903, 74356 77990, 74461 75762, 74618 73996, 74854 72467, 75193 70955, 75661 69235, 76758 65500, 78289 60782, 80387 54989, 82475 49983, 83907 46995, 84773 45465, 85756 43758, 86887 41859, 87900 40259, 88849 38876, 89796 37632, 90797 36446, 91911 35238, 92872 34252, 94103 33014, 99198 28576, 105060 24273, 107032 22978, 109149 21739, 112327 20067, 115457 18620, 117442 17821, 118418 17509, 119312 17207, 119998 16928, 120267 16713, 120244 16544, 120123 16392, 119402 16248, 117792 16161) (35218 115010, 35026 115461, 34968 116071, 34968 116649, 35060 117775, 35364 119251, 35914 120830, 36524 122190, 38014 125191, 38097 123016, 38098 122331, 38065 121295, 38001 120264, 37896 119140, 37614 117817, 37194 116557, 36680 115631, 36260 115176, 35967 115016, 35564 114893) (190497 67748, 190137 67886, 188917 68742, 187784 69603, 186499 70625, 185154 71735, 183836 72863, 182632 73935, 181878 74640, 181105 75409, 179595 77066, 177318 79748, 175072 82604, 173594 84619, 172838 85741, 171943 87236, 170322 90087, 168546 93363, 167296 95758, 166619 97109, 165900 98796, 165152 100992, 164714 102923, 164605 104009, 164683 104567, 164929 105534, 165155 106338, 165407 107162, 166020 109032, 166638 110973, 166845 111506, 167152 112203, 167581 113030, 167934 113451, 168606 114028, 169857 114903, 171368 115770, 172590 116368, 173232 116633, 173921 116871, 175289 117305, 177004 117816, 178959 118372, 181042 118944, 183149 119499, 185169 120008, 186536 120336, 188496 120777, 193068 121513, 199722 122209, 206213 122472, 210407 122383, 212019 122218, 212765 122054, 213061 121831, 213061 121496, 212716 120711, 211839 118992, 210666 117014, 209759 115641, 209202 114906, 208488 114040, 207159 112479, 205621 110728, 204445 109419, 203322 108205, 201181 105821, 199190 103420, 197841 101490, 197114 100185, 196721 99316, 196184 98059, 195601 96522, 195141 95004, 194782 93386, 194504 91548, 194284 89371, 194102 86738, 193795 80815, 193658 78583, 193513 76738, 193345 75192, 193143 73848, 192895 72615, 192586 71399, 192113 69786, 191771 68841, 191349 68072, 190897 67743) (44248 26155, 44245 26344, 44425 26855, 44754 27615, 45085 28313, 45637 29391, 46651 32082, 47597 36031, 48027 40305, 48018 43695, 47893 45281, 47594 47750, 47222 49818, 46853 51206, 45865 54556, 44385 58920, 42649 63336, 41130 66815, 40076 69081, 39596 70083, 39110 71061, 38571 72104, 37930 73303, 37139 74747, 34480 79509, 33216 81874, 31910 84587, 30896 87094, 30257 88985, 29864 90340, 29350 92529, 28781 95660, 28371 98898, 28125 102134, 28049 105252, 28148 108138, 28431 110682, 28743 112258, 29065 113304, 29684 114884, 30708 117026, 31845 118964, 32719 120201, 34348 121902, 34394 121902, 34423 121566, 34359 120915, 34279 120361, 33793 118689, 32989 117371, 32436 116798, 31613 115548, 30893 113694, 30659 111756, 30806 110336, 31007 109696, 31166 109106, 31228 108505, 31126 107819, 30852 106772, 30699 106252, 30396 104647, 30169 102284, 30179 99893, 30335 98230, 30575 96948, 31159 94767, 32316 91213, 33825 87252, 35137 84141, 36494 81139, 37221 79492, 37711 78347, 37892 77994, 37892 77788, 38313 76736, 38792 75599, 39405 74187, 40902 70834, 42337 67722, 43323 65629, 45565 60632, 47776 55190, 49266 50726, 49966 47949, 50157 46774, 50229 46032, 50319 44645, 50379 43033, 50394 41795, 50391 40621, 50301 38338, 49960 35913, 49269 33653, 48434 31727, 47903 30649, 47131 29342, 46014 27751, 44982 26600, 44433 26155) (56360 88409, 55723 88449, 55148 88562, 54550 88787, 53850 89159, 52964 89718, 51815 90501, 49836 91878, 48471 92984, 46425 94836, 44316 96948, 42282 99163, 40461 101323, 38989 103273, 38006 104858, 37648 105654, 37648 106010, 37991 106285, 38739 106596, 39110 106705, 40038 107071, 40834 107461, 41668 108015, 46262 103469, 47648 102135, 49607 100310, 51451 98660, 52567 97701, 53304 97110, 54397 96286, 56114 95045, 57888 93826, 59093 93038, 59847 92571, 60876 91910, 61999 91159, 63035 90417, 63028 90316, 62740 90078, 61838 89602, 61069 89231, 60036 88818, 59179 88565, 58293 88443, 57426 88406) (177809 51172, 177141 52167, 176158 53688, 175069 55409, 173987 57152, 173046 58698, 172382 59832, 172131 60210, 172131 60374, 171818 60957, 171276 61837, 171011 62341, 170571 63267, 170115 64329, 169794 65135, 169572 65741, 168499 68529, 167118 72002, 166554 73384, 165530 76084, 164406 79420, 163549 82470, 163088 84521, 162908 85569, 162793 86659, 162683 88491, 162635 90560, 162649 92721, 162717 94824, 162842 96723, 163016 98270, 163157 99065, 163532 100159, 163846 100706, 163903 100706, 164217 100100, 164492 99442, 164724 98838, 165102 97801, 165370 97106, 165643 96464, 165961 95790, 166369 95002, 166908 94010, 169018 90255, 170456 87787, 172134 85108, 173836 82675, 175306 80750, 176511 79245, 178708 76697, 181705 73518, 184650 70739, 186673 69041, 187678 68306, 188553 67636, 189514 66863, 190404 66064, 190404 65721, 189914 64921, 188611 63096, 186734 60822, 185098 59000, 184171 58041, 183110 56908, 181724 55370, 180530 53982, 179887 53199, 178102 50811) (101418 99341, 100686 99658, 100333 99860, 100283 100150, 100428 100195, 100805 100057, 101612 99665, 102454 99193, 102454 99121, 102132 99118) (95691 81798, 94841 81894, 93929 82020, 93059 82164, 92521 82268, 89688 82946, 88518 83213, 91369 86130, 94943 90534, 98104 95523, 98962 97150, 99210 97544, 99472 97808, 99798 97955, 100238 97999, 100842 97953, 101662 97827, 102967 97595, 103627 97449, 104421 97234, 105263 96943, 105504 96749, 105687 96346, 105955 95446, 106188 94249, 106376 92880, 106503 91457, 106559 90104, 106530 88939, 106458 88293, 106310 87799, 105700 87046, 104198 85722, 101970 84182, 99821 82886, 98864 82359, 98174 82003, 97495 81767, 96762 81719) (67620 82190, 66459 82588, 65344 83017, 64067 83543, 62734 84118, 61450 84699, 60322 85239, 59666 85577, 58679 86130, 58009 86490, 57280 86859, 57357 86915, 58240 87204, 59216 87495, 59892 87709, 60906 88050, 61905 88407, 64707 89489, 65294 89277, 66494 88768, 68102 88036, 68102 84762, 68087 83702, 68034 82802, 67938 82329, 67824 82190) (77844 79325, 76382 79486, 75648 79663, 75447 79831, 75306 80041, 75204 80509, 75193 81361, 75242 82421, 75341 83834, 75419 84721, 75522 85579, 75567 85647, 75897 85624, 76910 85331, 78011 84968, 80067 84389, 82378 83835, 83954 83499, 84921 83275, 85836 83044, 85874 83006, 85755 82813, 85314 82421, 84625 81905, 83778 81319, 82863 80727, 81971 80188, 80894 79607, 80320 79414, 79411 79324) (76163 74393, 75939 74650, 75624 75311, 75354 76213, 75214 76949, 75024 78761, 76559 78397, 77079 78256, 77493 78075, 77707 77846, 77808 77447, 77630 76819, 77421 76312, 77164 75771, 76890 75252, 76496 74597, 76278 74393) (107931 38580, 107567 38965, 106465 40070, 104931 41700, 103090 43716, 101080 45961, 99043 48283, 97115 50527, 95851 52033, 94246 53995, 93193 55235, 92391 56135, 92026 56511, 91659 56725, 91364 56742, 91025 56554, 90591 56098, 90018 55319, 89257 54155, 88261 52551, 85083 47327, 84258 48789, 83639 50090, 82579 52551, 81394 55541, 80164 58845, 78966 62248, 77882 65532, 76986 68484, 76497 70281, 76069 72128, 77424 74146, 78375 75503, 79312 76703, 80051 77436, 80544 77773, 81333 78141, 81665 78253, 81934 78214, 82512 77991, 83807 77707, 85044 77467, 86816 77154, 89394 76678, 91380 76293, 92483 76062, 95147 75742, 99652 75454, 104522 75403, 107998 75520, 110200 75692, 111001 75724, 111638 75670, 112193 75497, 112744 75165, 113374 74640, 114164 73883, 115503 72553, 116401 71606, 117741 70120, 119189 68438, 120715 66600, 122294 64641, 123893 62602, 125488 60519, 127051 58430, 128552 56375, 129962 54389, 131256 52512, 132404 50782, 133378 49236, 134150 47912, 134692 46850, 134930 46281, 135046 45721, 135014 45515, 134854 45423, 134160 45402, 133018 45574, 130550 46106, 127050 47017, 123583 47990, 119714 49118, 117518 49747, 115784 50229, 114459 50576, 113482 50805, 112797 50926, 112346 50956, 112028 50890, 111753 50516, 111504 49885, 111391 49427, 111139 48497, 110677 46876, 110138 45042, 109026 41411, 108559 39950, 108097 38580) (67112 54469, 67230 55169, 67404 55732, 67808 56873, 68347 58252, 68957 59716, 69573 61116, 70129 62302, 70724 63431, 70865 63431, 71217 62591, 71542 61684, 71816 60857, 72566 58469, 72912 57402, 72740 57228, 72235 56857, 71458 56380, 70734 55979, 68431 54788, 67819 54495, 67429 54347, 67215 54332))) \ No newline at end of file +MULTIPOLYGON (((71733 150298, 71941 150653, 71944 151277, 71703 151857, 71377 152111, 71223 152111, 70730 151719, 70575 151264, 70692 150684, 71081 150281, 71517 150214, 71733 150298)), ((74068 132097, 76884 132875, 79516 134287, 81338 135740, 82072 136518, 82654 137208, 83350 138173, 84021 139298, 84573 140346, 85012 141235, 85750 142918, 86335 144785, 86567 146606, 86555 148197, 86485 149260, 86349 150728, 86045 152292, 85485 153850, 84781 155382, 84237 156492, 83040 158241, 81051 160435, 78859 162178, 77305 163039, 76276 163332, 74820 163616, 72636 163894, 70621 163995, 69527 163958, 68876 163800, 67782 163395, 65854 162592, 63956 161700, 63003 161200, 62234 160651, 60723 159402, 59157 157694, 57897 155680, 57023 153783, 56646 152808, 56290 151816, 56036 150769, 55937 149535, 55921 148094, 55921 147198, 55941 146002, 56014 144787, 56156 143861, 56316 143259, 56596 142450, 57385 140631, 58608 138509, 60062 136694, 61758 135183, 63706 133964, 65919 133032, 68403 132375, 70476 132050, 71888 131929, 74068 132097), (70185 133335, 69314 133491, 68649 133668, 67529 134020, 66279 134466, 65005 134964, 63805 135471, 62786 135948, 61775 136501, 61633 136752, 61210 137298, 60306 138396, 59841 138934, 58640 140715, 57558 143204, 57016 146018, 56927 148490, 56987 149665, 57069 150730, 57260 151750, 57653 152773, 58177 153851, 58811 155108, 60601 157597, 63510 160215, 67038 162035, 70106 162891, 71536 163074, 73509 163027, 75531 162588, 76264 162329, 77190 161915, 78343 161218, 79527 160257, 80544 159274, 81193 158590, 82095 157491, 83155 155983, 83899 154634, 84182 153912, 84182 153615, 84373 153031, 84582 152479, 84929 151621, 85173 150938, 85366 150098, 85452 149072, 85473 147972, 85473 147087, 85385 145530, 85052 143770, 84362 141941, 83511 140223, 82985 139254, 82245 138066, 81236 136833, 79975 135760, 78699 134907, 77806 134370, 76347 133703, 74366 133207, 72152 133129, 70185 133335)), ((118943 15475, 120025 15601, 120991 15889, 121532 16348, 121701 16833, 121675 17234, 121579 17448, 121382 17656, 121055 17875, 120567 18124, 119861 18429, 118966 18785, 116792 19609, 114025 20685, 111301 21871, 109036 23081, 107176 24237, 105653 25245, 102888 27218, 99289 30020, 95895 32956, 93553 35178, 92422 36342, 91304 37554, 90053 39098, 88783 40945, 87595 42843, 85814 45767, 86646 47345, 87632 49097, 88342 50324, 89785 52762, 90396 53768, 91029 54774, 91141 54900, 91513 54807, 92370 54048, 93817 52426, 95476 50430, 96827 48780, 98698 46590, 101380 43537, 102316 42449, 103582 40934, 105075 39292, 106675 37856, 107880 37215, 108550 37266, 108709 37435, 108923 37967, 109397 39281, 110034 41191, 111017 44298, 111851 46827, 112646 48804, 113272 49597, 113774 49611, 113969 49512, 114660 49264, 116444 48691, 119708 47684, 125353 45970, 127922 45243, 130836 44526, 133128 44099, 134302 43971, 136196 44061, 136282 44993, 136252 45386, 136095 46023, 135779 46814, 135283 47799, 134584 49015, 133665 50502, 132468 52353, 131426 53926, 130037 55986, 126837 60570, 123092 65630, 119661 69858, 117215 72610, 116093 73773, 115365 74545, 114608 75366, 113905 76173, 113951 76219, 114711 76347, 116463 76587, 116985 76647, 118547 76885, 121241 77363, 124564 78021, 127267 78586, 128810 78924, 130746 79491, 133715 80540, 136930 81865, 140261 83402, 143579 85088, 146751 86858, 149644 88650, 151526 89940, 153225 91229, 153875 90558, 154099 90250, 154334 89667, 154533 88750, 154691 87693, 154860 86391, 155464 83531, 156710 79047, 158375 74199, 159834 70494, 161138 67513, 163693 62319, 167168 56301, 170835 51158, 173699 47836, 174965 46589, 175663 45930, 176380 45378, 177091 45027, 177933 44755, 178849 44548, 179420 44467, 179767 44501, 179971 44601, 180135 44740, 180333 45176, 180384 45974, 180189 46957, 179882 47783, 179099 49349, 180281 51676, 180808 52569, 181682 53768, 182993 55273, 184507 56882, 186503 58963, 187689 60221, 188618 61229, 189410 62128, 190008 62854, 190515 63528, 190950 64175, 191260 64680, 191680 65403, 192514 67168, 193510 69829, 194286 72659, 194700 74779, 194819 75758, 194887 76785, 194987 78870, 195074 81459, 195121 83584, 195147 85302, 195206 88033, 195319 90386, 195513 91966, 195749 93073, 195968 93935, 196408 95463, 197035 97261, 197796 98929, 198760 100582, 200004 102334, 201598 104300, 203620 106593, 205528 108674, 207171 110440, 210056 113958, 212936 118385, 214970 122963, 216086 126755, 216352 128051, 216887 130519, 217252 132122, 217350 132513, 217469 133069, 217669 134101, 217873 135272, 218014 136161, 218183 137323, 218698 139933, 219487 142597, 220412 144422, 221158 145240, 221577 145442, 222408 145777, 222781 145777, 223834 146201, 224547 146546, 224853 146813, 225000 147264, 225000 148896, 223427 149128, 221724 149191, 218487 149206, 215042 149122, 212945 149014, 211285 148841, 208309 148383, 204068 147531, 200006 146499, 197412 145703, 195783 145093, 193463 144120, 189913 142497, 186230 140671, 183565 139257, 181547 138122, 178043 136056, 174349 133639, 171183 131214, 168840 129166, 167807 128195, 167053 127523, 166136 126756, 165169 126041, 164842 126060, 164666 126145, 164494 126339, 164302 126689, 164070 127240, 163777 128038, 163390 129163, 162642 131395, 161872 133599, 160848 136301, 159800 138749, 158679 141042, 157440 143272, 156031 145533, 154408 147921, 152981 149904, 148920 155415, 148312 156158, 147217 157407, 145901 158827, 144436 160340, 142903 161870, 141373 163338, 139924 164669, 138950 165518, 138381 165990, 137607 166599, 136384 167514, 135211 168353, 134453 168876, 133296 169626, 132583 170116, 131933 170606, 131933 170712, 132667 171422, 133489 172179, 134840 173364, 136008 174441, 137806 176161, 139761 178101, 141799 180184, 143848 182333, 145830 184472, 147715 186573, 148915 187951, 149760 188960, 151109 190618, 152400 192314, 153349 193740, 153951 194794, 154666 196222, 155033 197051, 155216 197663, 155203 198097, 154979 198389, 154535 198576, 153857 198698, 152642 198815, 151430 198850, 148904 198880, 145617 198877, 143039 198853, 133590 198718, 133754 200211, 133810 201115, 133917 203200, 134036 205812, 134185 209802, 134241 213090, 134244 217826, 134172 222649, 134034 227296, 133838 231505, 133595 235013, 133313 237554, 133156 238579, 132937 239008, 132576 239432, 132076 239574, 131789 239574, 131432 239484, 130857 239137, 130040 238424, 129125 237527, 128322 236709, 126822 235077, 124480 232393, 121897 229291, 119151 225871, 116327 222236, 113507 218489, 110771 214733, 108815 211962, 105833 207656, 105077 206592, 104530 205852, 104150 205381, 103894 205123, 103705 205004, 103518 204978, 103174 205361, 102830 205797, 102400 206373, 101897 207069, 100734 208738, 99429 210675, 97601 213328, 95539 216164, 93708 218459, 92350 220002, 91563 220837, 90553 221789, 89444 222616, 88591 222962, 88118 222901, 87959 222743, 87775 221928, 87636 221093, 87545 220408, 87429 219348, 87371 216827, 87605 212596, 88239 207200, 89021 202000, 89902 196742, 90419 193803, 90802 191730, 90972 190890, 91222 190117, 89129 190117, 88366 190095, 87623 189953, 86871 189584, 85557 188721, 84882 188224, 84107 187560, 83425 186840, 82942 186235, 82118 185108, 81601 184442, 81148 183928, 80742 183558, 80345 183305, 79917 183141, 79316 183010, 77125 182772, 72063 181944, 65631 180404, 59515 178324, 55120 176421, 52462 175055, 51432 174494, 50430 173911, 49422 173274, 48333 172538, 47091 171657, 45579 170546, 43367 168898, 41981 167661, 39643 165393, 37354 162983, 36032 161483, 35488 160777, 35079 160191, 34515 159333, 33944 158404, 33570 157755, 32939 156583, 32533 155869, 32168 155295, 31825 154847, 31472 154488, 31079 154180, 30601 153880, 29878 153485, 29391 153187, 28688 152700, 27971 152146, 27250 151532, 26606 150930, 26062 150368, 25458 149648, 25223 149198, 25058 148573, 25000 147602, 25138 146571, 25362 145812, 25775 145023, 26157 144592, 26736 144195, 27414 143837, 29003 143112, 29762 142799, 30141 142704, 30871 141626, 31944 138713, 33031 134099, 33875 129414, 34749 123655, 32967 122002, 31605 120355, 29887 117708, 28445 114747, 27600 112452, 27300 111346, 27077 110359, 26907 108877, 26832 106568, 26810 103692, 26811 100222, 26839 98334, 26912 96760, 27050 95414, 27274 94142, 27607 92795, 28085 91166, 28826 88802, 29239 87561, 29765 86101, 30354 84639, 31024 83146, 31814 81542, 32763 79744, 33942 77610, 35821 74313, 37342 71463, 39289 67505, 41092 63463, 42712 59432, 44118 55506, 45271 51775, 46139 48335, 46584 46048, 46755 44718, 46835 43017, 46814 40310, 46638 37585, 46430 35821, 46225 34800, 45866 33413, 45276 31524, 44618 29796, 44139 28742, 43830 28202, 43418 27257, 43287 26480, 43362 25908, 43490 25671, 43752 25587, 44352 25604, 44724 25696, 45230 25975, 45857 26516, 46509 27182, 47034 27734, 47921 28817, 48928 30395, 49842 32338, 50568 34239, 50892 35182, 51205 36179, 51432 37304, 51520 38728, 51535 40443, 51535 41906, 51387 44793, 50904 48476, 50024 52308, 49049 55544, 48257 57866, 47867 58950, 47452 60011, 46917 61266, 46182 62892, 45237 64919, 39641 76637, 38761 78515, 38050 80080, 37453 81462, 36883 82855, 35183 87223, 34421 89254, 33556 91688, 32866 93817, 32337 95709, 31948 97425, 31683 99031, 31527 100590, 31466 101787, 31456 102669, 31518 103987, 31703 105612, 31980 106830, 32196 107357, 32362 107461, 32578 107442, 33015 107295, 33570 107026, 34191 106662, 34828 106241, 35427 105793, 36130 105182, 38244 102320, 39719 100414, 41028 98854, 42118 97649, 43718 95959, 47710 92261, 53183 88094, 59207 84563, 64348 82158, 66321 81372, 66913 81126, 67576 80834, 68211 80518, 68283 80403, 68446 79287, 68587 78141, 68795 76201, 69143 73298, 69503 70574, 69664 69512, 69927 67572, 70020 65865, 69830 64609, 69481 63670, 69238 63150, 67036 58188, 66354 56549, 65769 54890, 65534 53722, 65668 53018, 66193 52749, 67126 52888, 68486 53403, 69862 54050, 73390 55854, 74436 53418, 75202 51752, 76357 49388, 77612 46965, 78922 44562, 80242 42259, 81527 40137, 82733 38276, 83543 37114, 84947 35265, 88618 31008, 93658 26107, 98973 22029, 103144 19474, 105424 18333, 108015 17295, 111644 16227, 115245 15597, 117779 15426, 118943 15475), (130143 171932, 129342 172334, 128882 172586, 128293 172933, 127356 173508, 126385 174131, 125303 174855, 124692 175233, 123648 175841, 122464 176494, 121241 177142, 120072 177733, 119057 178219, 118012 178667, 117802 178667, 116080 179263, 114558 179827, 113070 180341, 110879 181032, 108582 181689, 106288 182286, 104100 182795, 102130 183190, 100481 183449, 99568 183539, 99042 183539, 98380 183613, 97691 183928, 97000 184619, 96331 185522, 95988 186029, 95566 186606, 94946 187374, 94341 188047, 93963 188422, 93677 188656, 92984 189391, 92526 190087, 92409 190446, 92228 191232, 91880 192928, 91470 195144, 91017 197744, 90550 200589, 90087 203546, 89654 206476, 89364 208552, 89147 210211, 88787 213116, 88511 215735, 88410 217513, 88421 218529, 88536 219947, 88627 220727, 88751 221215, 88938 221418, 89219 221346, 89623 221004, 90183 220402, 91170 219273, 91881 218440, 92791 217337, 93706 216180, 94670 214905, 95730 213450, 96933 211755, 98322 209755, 101496 205142, 102769 203316, 103796 201877, 104604 200787, 105221 200006, 105679 199495, 106004 199217, 106172 199132, 106301 199132, 106519 199224, 106528 199567, 106236 200273, 105779 201156, 105242 202162, 104932 202796, 104646 203476, 104652 203590, 104936 204152, 105339 204801, 112862 215160, 115122 218257, 118582 223081, 118957 223619, 120137 225198, 122043 227626, 124140 230176, 126265 232665, 128256 234905, 129952 236714, 131192 237900, 131699 238319, 131841 238271, 132072 238036, 132447 237400, 132492 236852, 132589 235360, 132665 233188, 132719 230443, 132753 227233, 132766 223670, 132762 219861, 132740 215916, 132700 211942, 132646 208051, 132576 204347, 132491 200947, 132393 197951, 132282 195475, 132161 193623, 132083 192782, 132012 192408, 132005 192018, 132097 191823, 132162 191823, 132269 192012, 132463 192523, 132683 193283, 132907 194210, 133113 195155, 133315 195986, 133549 196830, 133687 197074, 134305 197278, 136185 197503, 139616 197642, 143629 197709, 146093 197731, 149470 197738, 152182 197668, 153507 197484, 153860 197241, 153860 197043, 153696 196696, 153230 195919, 152497 194866, 151532 193582, 150371 192106, 149048 190480, 147600 188743, 146060 186939, 144465 185108, 142852 183290, 141254 181525, 139706 179858, 138246 178327, 136906 176973, 135724 175840, 134987 175175, 133850 174215, 133048 173518, 132180 172741, 131910 172435, 131432 171982, 130861 171764, 130143 171932), (84619 84690, 82464 84923, 80882 85217, 78763 85912, 77858 86231, 77281 86448, 75484 87160, 75277 91989, 75124 94707, 74850 97688, 74429 100529, 73971 102930, 73569 104840, 72775 108161, 71649 112049, 70346 115632, 69201 118282, 68635 119465, 68150 120393, 67419 121469, 66324 122719, 65031 124048, 64247 124832, 63181 125849, 61773 127121, 60503 128184, 59762 128750, 58458 129599, 57711 129981, 57055 130149, 56216 130200, 55144 130121, 54303 129889, 53629 129435, 53140 128894, 52868 128517, 52439 127695, 52266 126968, 52266 126408, 52431 125452, 53110 124253, 54579 122778, 56471 121195, 58036 119955, 60521 117411, 63363 113496, 65528 109125, 66669 105664, 67005 103977, 67221 102061, 67529 98437, 67764 94515, 67858 92032, 67858 89693, 66972 89920, 66312 90188, 65066 90788, 63553 91610, 61871 92597, 60112 93689, 58374 94829, 56749 95961, 55682 96751, 54772 97471, 53105 98834, 50978 100641, 49006 102401, 47235 104064, 45715 105587, 44495 106918, 43625 108011, 43239 108605, 43126 108897, 43097 109151, 43154 109562, 43338 110100, 43578 110640, 43833 111154, 44293 112187, 44798 113594, 45249 115258, 45604 116859, 45820 117939, 46035 119596, 46123 121939, 45970 124720, 45683 127359, 45391 129567, 44772 133545, 43910 137771, 42901 141224, 42016 143488, 41524 144514, 41063 145388, 40480 146304, 39797 147134, 39123 147823, 38703 148221, 38116 148730, 37288 149387, 36506 149938, 36034 150230, 35699 150400, 34646 151016, 33616 151680, 32288 152622, 33622 155237, 34813 157321, 36573 159887, 38693 162422, 40650 164466, 42161 165931, 44736 168289, 47737 170723, 50669 172676, 53058 174002, 55003 174960, 58441 176529, 62678 178241, 66635 179550, 69426 180280, 70662 180531, 71548 180693, 73299 180993, 77741 181704, 80045 182056, 82149 182364, 83861 182602, 84703 182709, 85255 182761, 86057 182923, 86270 183157, 85670 183380, 84647 183518, 82403 183662, 83922 185496, 84752 186332, 85975 187353, 87256 188192, 88192 188661, 88702 188846, 89267 189024, 89842 189095, 90412 188983, 90968 188764, 91555 188497, 92667 187706, 94173 186186, 95642 184166, 97050 181695, 98374 178818, 99590 175587, 100674 172044, 101395 169197, 101936 166701, 102798 162054, 103875 155206, 104728 148431, 105162 143959, 105255 142463, 105427 140004, 102579 139671, 101500 139495, 100140 139155, 98807 138664, 97446 137991, 96004 137106, 94424 135980, 92653 134586, 91136 133318, 90073 132397, 88360 130943, 86288 129250, 84327 127727, 82868 126641, 82089 126082, 81238 125444, 80499 124789, 80011 124171, 79712 123624, 79454 123071, 79079 121771, 78560 119480, 78214 117341, 78127 116292, 78221 116046, 78507 115874, 78916 116322, 79356 117375, 79686 118537, 79837 119235, 80050 120146, 80334 121137, 80669 121971, 81106 122718, 81691 123447, 82471 124226, 83497 125125, 84483 125945, 90398 130722, 92660 132529, 94581 134044, 96166 135275, 97425 136229, 98365 136909, 98832 137229, 100504 138225, 127259 138579, 133504 138630, 139210 138653, 144297 138645, 148684 138608, 152293 138541, 155045 138446, 156404 138369, 157046 138301, 157616 138225, 157973 138131, 157997 138004, 157552 137667, 156856 137349, 155535 136900, 153893 136492, 152499 136225, 151651 136100, 150500 135987, 148268 135834, 145308 135693, 141598 135564, 137114 135445, 131832 135339, 125727 135242, 110057 135048, 107293 134996, 105341 134936, 104013 134857, 103126 134750, 102489 134609, 101204 134184, 99181 133123, 96065 130873, 92372 127517, 89000 124077, 87573 122536, 86575 121432, 85529 120217, 84736 119194, 84162 118298, 83775 117470, 83537 116642, 83415 115752, 83378 114993, 83383 113609, 83465 112860, 83662 112290, 84017 111662, 84469 111086, 85071 110455, 85886 109748, 86983 108918, 88431 107919, 90301 106694, 92661 105201, 95898 103192, 96844 102616, 97755 102020, 98337 101499, 98608 100958, 98586 100304, 98292 99436, 97749 98262, 96751 96235, 96020 94910, 94876 93038, 93607 91162, 92284 89371, 90977 87757, 89753 86408, 88682 85416, 88063 84964, 87567 84761, 86555 84665, 84619 84690), (110240 167948, 108953 168099, 107818 168256, 105360 168633, 104300 168811, 103245 169008, 103160 169062, 102892 169709, 102677 170359, 102505 170944, 102314 171667, 101839 173238, 101031 175710, 100154 178187, 99552 179777, 99262 180469, 99059 180984, 98860 181569, 98732 182176, 98829 182280, 99439 182290, 100952 182103, 103174 181659, 105286 181162, 106584 180827, 108376 180348, 110269 179807, 111753 179316, 112914 178832, 113842 178315, 114623 177721, 115346 177008, 115914 176358, 116337 175845, 116989 174921, 117540 173873, 117734 173036, 117649 172561, 117399 172265, 116237 171412, 115152 170676, 113947 169899, 112743 169162, 111665 168539, 110523 167948, 110240 167948), (129680 140055, 125913 140065, 123118 140084, 121060 140117, 119626 140162, 118702 140227, 118018 140337, 117643 140680, 117295 141056, 116913 141505, 116529 141983, 116175 142450, 115882 142864, 115609 143319, 115609 143449, 115771 143700, 116291 144271, 116579 144722, 117146 145725, 117808 147025, 118509 148497, 119186 150011, 119780 151439, 120232 152653, 120440 153303, 120649 154415, 120655 155038, 120465 155667, 120152 156347, 119818 157033, 118988 158405, 117394 160815, 115589 163326, 114343 164944, 112491 167167, 113355 167807, 114296 168463, 115918 169562, 116473 169956, 117251 170530, 117968 171085, 118396 171433, 119126 172096, 119406 172442, 119427 172699, 118838 173536, 118490 174124, 118333 174441, 117729 175285, 117181 175991, 116584 176718, 115122 178398, 116699 177852, 117665 177464, 118423 177090, 118600 176973, 119678 176371, 121329 175506, 122102 175116, 123644 174271, 125935 172920, 128367 171383, 130857 169717, 133323 167980, 135683 166227, 137854 164518, 139288 163318, 141682 161181, 143165 159828, 144275 158769, 145083 157920, 145659 157202, 146077 156536, 146408 155840, 146647 155239, 147003 154279, 147770 151977, 148569 149085, 149164 146183, 149508 143871, 149730 141901, 149845 141021, 149986 140052, 129680 140055), (109923 143804, 108894 143896, 107755 144014, 106655 144158, 106559 144219, 106419 144633, 106352 145235, 106352 145696, 106299 146477, 106154 148097, 105935 150161, 105654 152526, 105331 155056, 104985 157612, 104629 160055, 104372 161701, 103496 167049, 103428 167556, 103589 167626, 103909 167619, 104370 167535, 105014 167438, 107234 167153, 108784 166923, 110149 166587, 111127 166089, 111816 165525, 112289 165065, 113034 164266, 114147 162978, 115300 161545, 116428 160054, 117467 158596, 118349 157259, 119010 156132, 119317 155517, 119451 155095, 119424 154400, 119159 153110, 118644 151555, 117936 149854, 117090 148137, 116165 146523, 115214 145134, 114547 144332, 113660 143511, 109923 143804), (155876 139525, 153993 139650, 152685 139775, 151252 139979, 150498 144680, 150134 146690, 149736 148685, 149345 150441, 149106 151405, 148551 153376, 148379 154060, 148427 154060, 148885 153500, 149365 152889, 150175 151826, 150857 150868, 152040 149141, 153366 147141, 154718 145057, 155976 143070, 157021 141369, 157736 140137, 158001 139708, 158001 139545, 157383 139487, 155876 139525), (36659 107665, 36029 107814, 35526 107948, 34658 108248, 33802 108710, 33152 109335, 32724 109980, 32432 110529, 32140 111617, 32079 113146, 32397 114534, 32847 115336, 33289 115647, 33473 115607, 33659 115371, 33990 114721, 34402 114220, 35039 113905, 35797 113965, 36471 114263, 37059 114658, 37961 115821, 38809 118111, 39240 121363, 39313 124601, 39255 126505, 39092 128984, 38723 131954, 38139 134802, 37537 137012, 37108 138352, 36338 140142, 35108 141783, 33340 142912, 31411 143604, 30413 143871, 29400 144174, 28464 144520, 27800 144880, 27392 145196, 26993 145580, 26333 146555, 26039 147848, 26386 149179, 27080 150230, 27559 150727, 28188 151270, 29173 152024, 30069 152608, 30491 152842, 30690 152842, 30862 152606, 31119 152149, 31246 151845, 31582 151309, 32227 150684, 33182 150110, 34188 149661, 35132 149289, 36810 148236, 38842 146325, 40525 143903, 41526 141805, 42088 140108, 42875 137144, 43742 132807, 44339 128238, 44604 124766, 44668 122673, 44659 119865, 44425 116992, 43883 114631, 43244 112958, 42767 111988, 42021 110727, 41003 109443, 39886 108529, 38951 108048, 38431 107874, 37852 107694, 37267 107605, 36659 107665), (178893 45646, 178348 45863, 177360 46464, 176179 47391, 174872 48575, 173506 49955, 172147 51463, 170863 53037, 169991 54209, 169035 55633, 167131 58796, 164626 63451, 162281 68378, 160178 73377, 158393 78252, 157005 82802, 156093 86828, 155751 89306, 155687 92617, 157233 94086, 157755 94642, 158440 95437, 159072 96246, 159618 97018, 160044 97706, 160316 98258, 160402 98624, 160301 98757, 160224 98757, 159721 98347, 159208 97905, 158610 97368, 157691 96504, 154759 94098, 150208 90768, 145477 87738, 142215 85895, 138461 84111, 136853 83375, 136050 83045, 135831 83017, 135831 83072, 135966 83233, 136338 83752, 137391 85161, 138216 86240, 140050 88921, 142180 92670, 144169 97061, 145748 101155, 146844 104269, 147328 105686, 147720 106907, 148051 108058, 148357 109260, 148670 110640, 149023 112319, 149667 115491, 150270 118705, 150807 122279, 151135 125763, 151293 128769, 151349 130483, 151436 132620, 151547 134142, 151720 134763, 151931 134901, 155080 135442, 155819 135595, 156801 135838, 157664 136097, 158143 136273, 159438 136933, 160438 133718, 162375 127630, 162985 125418, 163784 122127, 164414 119046, 164701 117315, 164772 116463, 164874 115642, 165038 114965, 165253 114660, 165475 114658, 165614 114745, 165725 115556, 165797 117416, 165741 119655, 165628 121162, 165335 123218, 166454 124685, 166836 125126, 167451 125788, 168097 126431, 168543 126840, 170201 128242, 172744 130441, 175495 132462, 180229 135527, 185726 138675, 190131 140968, 193386 142534, 198862 144706, 206105 146819, 213295 148010, 218606 148318, 220606 148254, 222172 148173, 223074 148107, 223349 148046, 223647 147900, 223584 147663, 223464 147512, 223124 147332, 222133 147048, 220224 146676, 217849 146272, 216375 146032, 214341 145652, 211593 145051, 208526 144269, 205767 143506, 203462 142842, 197243 140573, 192024 137952, 191135 137372, 190283 136839, 185921 134175, 183977 132946, 181809 131404, 179597 129569, 177535 127700, 176474 126713, 175352 125619, 173758 123991, 172163 122277, 170650 120577, 169305 118989, 168210 117608, 167451 116532, 167153 116038, 167072 115670, 166741 114822, 166413 114061, 165795 112736, 165127 111151, 164259 108804, 163496 106397, 163030 104692, 162707 103251, 162170 100642, 161759 97953, 161575 95209, 161534 92479, 161534 90643, 161591 87860, 161811 84934, 162263 82159, 162817 79712, 163169 78311, 163757 76577, 164979 73365, 166536 69597, 168282 65602, 170069 61709, 171749 58246, 173176 55542, 173902 54298, 174439 53633, 175123 52720, 176060 51381, 176960 50003, 177772 48673, 178440 47484, 178916 46523, 179146 45880, 179093 45646, 178893 45646), (169208 116463, 169582 117028, 170607 118345, 172132 120077, 174014 122070, 176102 124171, 178253 126227, 180316 128088, 181677 129237, 182643 129989, 184178 131106, 186704 132838, 189616 134730, 192011 136226, 193315 137019, 194913 137827, 197847 139172, 201072 140515, 203296 141360, 204772 141859, 206968 142533, 210260 143454, 213440 144253, 215382 144686, 217899 145133, 218729 145258, 219032 145233, 219110 145162, 219098 145044, 218817 144375, 218235 142843, 217604 140798, 217084 138520, 216721 136473, 216496 135011, 216090 132687, 215495 129653, 214895 126988, 214508 125488, 213768 123095, 211770 123315, 210936 123361, 209306 123422, 207343 123459, 205784 123465, 203889 123457, 199764 123279, 194460 122718, 188772 121701, 183775 120565, 176535 118727, 174633 118225, 173200 117825, 172140 117498, 171358 117218, 170762 116957, 170110 116602, 169512 116316, 169208 116273, 169208 116463), (109542 139727, 108355 139759, 107781 139790, 106596 139954, 106596 142684, 110292 142524, 111296 142465, 112487 142369, 113750 142218, 114229 141977, 114655 141676, 115292 141160, 116706 139809, 112275 139727, 111041 139715, 109542 139727), (35360 128458, 34735 132197, 34335 134199, 33662 137183, 32965 139885, 32544 141313, 32319 141955, 32382 142035, 32643 141946, 33294 141618, 33988 141166, 34560 140692, 34829 140394, 35291 139472, 36026 137515, 36755 134971, 37262 132793, 37693 130603, 37925 129348, 38135 128083, 38135 127831, 37929 127420, 37527 126836, 37337 126616, 36840 125956, 36430 125331, 36041 124533, 35360 128458), (119874 88611, 119167 89039, 117361 90214, 116413 90848, 114958 91850, 113494 92888, 111852 94095, 110797 94856, 109044 96093, 107162 97388, 105827 98291, 103776 99642, 102392 100582, 101375 101297, 100937 101619, 100802 101747, 100130 102218, 99225 102735, 99043 102825, 97559 103648, 96689 104155, 90350 107996, 88783 109006, 87147 110177, 85995 111176, 85470 111762, 85251 112254, 85417 112381, 85994 112391, 88247 112210, 91595 111844, 95784 111186, 100347 110204, 104544 109145, 106203 108698, 107000 108494, 107882 108287, 108923 108082, 109351 108097, 109422 108181, 109268 108339, 108684 108681, 107298 109156, 105960 109578, 104378 110052, 102645 110551, 100854 111045, 99095 111510, 97089 112003, 95966 112227, 94060 112556, 91991 112862, 90501 113052, 88218 113309, 86694 113499, 85199 113716, 84981 113804, 84715 114024, 84720 114383, 85108 114853, 85893 115440, 87086 116152, 88700 116999, 90749 117988, 92617 118846, 93695 119325, 95061 119890, 97111 120686, 99296 121481, 101524 122243, 103701 122941, 105732 123545, 107523 124020, 108832 124322, 110373 124531, 115286 125160, 121965 125995, 132050 127230, 134528 127519, 134613 127706, 134613 127803, 134344 127892, 133577 127931, 132370 127899, 130785 127802, 128878 127647, 126711 127440, 124342 127191, 121828 126903, 119230 126585, 116609 126243, 114022 125887, 111527 125519, 109186 125149, 107057 124784, 105199 124430, 104051 124186, 102779 123881, 100122 123152, 96947 122072, 93681 120683, 90805 119291, 89420 118587, 88102 117941, 86688 117282, 85743 116893, 85400 116834, 85546 117282, 85874 118028, 86288 118594, 87099 119616, 88176 120892, 89425 122313, 90749 123775, 92052 125171, 93241 126392, 93968 127105, 96232 129159, 97820 130560, 99071 131601, 100078 132344, 100929 132851, 101714 133183, 102526 133403, 103617 133601, 105482 133692, 107430 133759, 112788 133897, 119553 134026, 139231 134327, 143384 134400, 145134 134470, 148378 134570, 145571 133067, 143989 132132, 141702 130646, 139452 129026, 137928 127828, 137087 127108, 136053 126186, 134488 124729, 132818 123114, 131119 121418, 129467 119718, 127939 118093, 126607 116618, 125808 115689, 125108 114817, 123833 113109, 122571 111113, 121555 109011, 120805 107082, 120441 106035, 120053 104834, 119766 103559, 119630 102015, 119570 100211, 119541 98987, 119525 97118, 119611 95267, 119872 93443, 120232 91635, 120415 90778, 120573 89636, 120560 88848, 120456 88613, 120359 88521, 120211 88504, 119874 88611), (96982 76766, 94112 77174, 91138 77728, 88466 78251, 85125 78878, 84798 78931, 84243 79067, 83858 79260, 83847 79464, 84129 79626, 84373 79695, 84945 80089, 85433 80479, 85936 80923, 87105 82019, 90516 81295, 93070 80884, 95614 80607, 98970 80436, 101870 82140, 102735 82684, 103961 83511, 105109 84348, 105811 84897, 107887 86672, 107642 95541, 109525 94250, 111772 92651, 115001 90253, 115674 89777, 116428 89265, 117169 88785, 117641 88494, 120249 86980, 120654 86865, 120988 86893, 121508 87080, 121794 87246, 122077 87517, 122257 87872, 122340 88336, 122323 88930, 122210 89677, 122002 90597, 121779 91438, 121583 92128, 121252 93370, 121030 94695, 120973 96376, 121032 99781, 121089 101829, 121219 103505, 121504 104809, 121902 106027, 122140 106719, 122461 107580, 122918 108712, 123357 109703, 123624 110251, 124031 110980, 125122 112552, 127186 115117, 129893 118102, 132379 120654, 133809 122061, 135576 123774, 137594 125673, 139360 127251, 140959 128574, 142476 129709, 143995 130720, 145601 131678, 146931 132409, 149596 133815, 149968 132497, 150079 131956, 150142 131072, 150108 129817, 150020 128448, 149902 126959, 149609 123864, 149172 120342, 148612 117023, 148066 114375, 147634 112488, 146902 109473, 146019 106270, 145056 103317, 144158 100862, 143483 99110, 142356 96311, 141136 93558, 139961 91322, 138959 89672, 138148 88438, 136686 86402, 134838 84112, 133181 82402, 132202 81596, 131353 81166, 129832 80586, 127187 79802, 123980 79071, 120290 78407, 116200 77825, 111789 77334, 107140 76949, 103534 76733, 101619 76657, 99479 76628, 96982 76766), (115805 16248, 114337 16415, 113257 16624, 111487 17096, 109019 17942, 106605 18985, 104936 19841, 103252 20847, 102023 21562, 100157 22618, 99427 23011, 98021 23955, 95866 25634, 93554 27679, 91189 29984, 88869 32445, 86699 34958, 84777 37420, 83574 39133, 82543 40799, 80661 44084, 78112 48852, 75850 53461, 74551 56356, 73925 57949, 73284 59982, 72231 63729, 71215 67797, 70610 70492, 70401 71604, 70301 72227, 70174 73255, 70049 74588, 69919 76335, 69778 78602, 69615 81501, 69121 91094, 68857 95506, 68497 100481, 68128 104387, 67881 106401, 67638 107710, 66551 110923, 64818 114124, 63990 115314, 62717 116886, 60604 119250, 58427 121434, 57066 122661, 56283 123241, 55411 123913, 54509 124664, 53857 125305, 53438 125864, 53235 126369, 53230 126850, 53409 127332, 53926 128071, 54593 128638, 55551 128934, 56688 128740, 57808 128230, 58699 127653, 59346 127218, 60116 126677, 63205 124149, 65567 121707, 67493 118875, 68335 117263, 69551 114229, 71192 109139, 72592 103543, 73390 99413, 73648 97559, 73771 96146, 73934 93348, 74073 89564, 74168 85934, 74274 80903, 74356 77990, 74461 75762, 74618 73996, 74854 72467, 75193 70955, 75661 69235, 76758 65500, 78289 60782, 80387 54989, 82475 49983, 83907 46995, 84773 45465, 85756 43758, 86887 41859, 87900 40259, 88849 38876, 89796 37632, 90797 36446, 91911 35238, 92872 34252, 94103 33014, 99198 28576, 105060 24273, 107032 22978, 109149 21739, 112327 20067, 115457 18620, 117442 17821, 118418 17509, 119312 17207, 119998 16928, 120267 16713, 120244 16544, 120123 16392, 119402 16248, 117792 16161, 115805 16248), (35218 115010, 35026 115461, 34968 116071, 34968 116649, 35060 117775, 35364 119251, 35914 120830, 36524 122190, 38014 125191, 38097 123016, 38098 122331, 38065 121295, 38001 120264, 37896 119140, 37614 117817, 37194 116557, 36680 115631, 36260 115176, 35967 115016, 35564 114893, 35218 115010), (190497 67748, 190137 67886, 188917 68742, 187784 69603, 186499 70625, 185154 71735, 183836 72863, 182632 73935, 181878 74640, 181105 75409, 179595 77066, 177318 79748, 175072 82604, 173594 84619, 172838 85741, 171943 87236, 170322 90087, 168546 93363, 167296 95758, 166619 97109, 165900 98796, 165152 100992, 164714 102923, 164605 104009, 164683 104567, 164929 105534, 165155 106338, 165407 107162, 166020 109032, 166638 110973, 166845 111506, 167152 112203, 167581 113030, 167934 113451, 168606 114028, 169857 114903, 171368 115770, 172590 116368, 173232 116633, 173921 116871, 175289 117305, 177004 117816, 178959 118372, 181042 118944, 183149 119499, 185169 120008, 186536 120336, 188496 120777, 193068 121513, 199722 122209, 206213 122472, 210407 122383, 212019 122218, 212765 122054, 213061 121831, 213061 121496, 212716 120711, 211839 118992, 210666 117014, 209759 115641, 209202 114906, 208488 114040, 207159 112479, 205621 110728, 204445 109419, 203322 108205, 201181 105821, 199190 103420, 197841 101490, 197114 100185, 196721 99316, 196184 98059, 195601 96522, 195141 95004, 194782 93386, 194504 91548, 194284 89371, 194102 86738, 193795 80815, 193658 78583, 193513 76738, 193345 75192, 193143 73848, 192895 72615, 192586 71399, 192113 69786, 191771 68841, 191349 68072, 190897 67743, 190497 67748), (44248 26155, 44245 26344, 44425 26855, 44754 27615, 45085 28313, 45637 29391, 46651 32082, 47597 36031, 48027 40305, 48018 43695, 47893 45281, 47594 47750, 47222 49818, 46853 51206, 45865 54556, 44385 58920, 42649 63336, 41130 66815, 40076 69081, 39596 70083, 39110 71061, 38571 72104, 37930 73303, 37139 74747, 34480 79509, 33216 81874, 31910 84587, 30896 87094, 30257 88985, 29864 90340, 29350 92529, 28781 95660, 28371 98898, 28125 102134, 28049 105252, 28148 108138, 28431 110682, 28743 112258, 29065 113304, 29684 114884, 30708 117026, 31845 118964, 32719 120201, 34348 121902, 34394 121902, 34423 121566, 34359 120915, 34279 120361, 33793 118689, 32989 117371, 32436 116798, 31613 115548, 30893 113694, 30659 111756, 30806 110336, 31007 109696, 31166 109106, 31228 108505, 31126 107819, 30852 106772, 30699 106252, 30396 104647, 30169 102284, 30179 99893, 30335 98230, 30575 96948, 31159 94767, 32316 91213, 33825 87252, 35137 84141, 36494 81139, 37221 79492, 37711 78347, 37892 77994, 37892 77788, 38313 76736, 38792 75599, 39405 74187, 40902 70834, 42337 67722, 43323 65629, 45565 60632, 47776 55190, 49266 50726, 49966 47949, 50157 46774, 50229 46032, 50319 44645, 50379 43033, 50394 41795, 50391 40621, 50301 38338, 49960 35913, 49269 33653, 48434 31727, 47903 30649, 47131 29342, 46014 27751, 44982 26600, 44433 26155, 44248 26155), (56360 88409, 55723 88449, 55148 88562, 54550 88787, 53850 89159, 52964 89718, 51815 90501, 49836 91878, 48471 92984, 46425 94836, 44316 96948, 42282 99163, 40461 101323, 38989 103273, 38006 104858, 37648 105654, 37648 106010, 37991 106285, 38739 106596, 39110 106705, 40038 107071, 40834 107461, 41668 108015, 46262 103469, 47648 102135, 49607 100310, 51451 98660, 52567 97701, 53304 97110, 54397 96286, 56114 95045, 57888 93826, 59093 93038, 59847 92571, 60876 91910, 61999 91159, 63035 90417, 63028 90316, 62740 90078, 61838 89602, 61069 89231, 60036 88818, 59179 88565, 58293 88443, 57426 88406, 56360 88409), (177809 51172, 177141 52167, 176158 53688, 175069 55409, 173987 57152, 173046 58698, 172382 59832, 172131 60210, 172131 60374, 171818 60957, 171276 61837, 171011 62341, 170571 63267, 170115 64329, 169794 65135, 169572 65741, 168499 68529, 167118 72002, 166554 73384, 165530 76084, 164406 79420, 163549 82470, 163088 84521, 162908 85569, 162793 86659, 162683 88491, 162635 90560, 162649 92721, 162717 94824, 162842 96723, 163016 98270, 163157 99065, 163532 100159, 163846 100706, 163903 100706, 164217 100100, 164492 99442, 164724 98838, 165102 97801, 165370 97106, 165643 96464, 165961 95790, 166369 95002, 166908 94010, 169018 90255, 170456 87787, 172134 85108, 173836 82675, 175306 80750, 176511 79245, 178708 76697, 181705 73518, 184650 70739, 186673 69041, 187678 68306, 188553 67636, 189514 66863, 190404 66064, 190404 65721, 189914 64921, 188611 63096, 186734 60822, 185098 59000, 184171 58041, 183110 56908, 181724 55370, 180530 53982, 179887 53199, 178102 50811, 177809 51172), (101418 99341, 100686 99658, 100333 99860, 100283 100150, 100428 100195, 100805 100057, 101612 99665, 102454 99193, 102454 99121, 102132 99118, 101418 99341), (95691 81798, 94841 81894, 93929 82020, 93059 82164, 92521 82268, 89688 82946, 88518 83213, 91369 86130, 94943 90534, 98104 95523, 98962 97150, 99210 97544, 99472 97808, 99798 97955, 100238 97999, 100842 97953, 101662 97827, 102967 97595, 103627 97449, 104421 97234, 105263 96943, 105504 96749, 105687 96346, 105955 95446, 106188 94249, 106376 92880, 106503 91457, 106559 90104, 106530 88939, 106458 88293, 106310 87799, 105700 87046, 104198 85722, 101970 84182, 99821 82886, 98864 82359, 98174 82003, 97495 81767, 96762 81719, 95691 81798), (67620 82190, 66459 82588, 65344 83017, 64067 83543, 62734 84118, 61450 84699, 60322 85239, 59666 85577, 58679 86130, 58009 86490, 57280 86859, 57357 86915, 58240 87204, 59216 87495, 59892 87709, 60906 88050, 61905 88407, 64707 89489, 65294 89277, 66494 88768, 68102 88036, 68102 84762, 68087 83702, 68034 82802, 67938 82329, 67824 82190, 67620 82190), (77844 79325, 76382 79486, 75648 79663, 75447 79831, 75306 80041, 75204 80509, 75193 81361, 75242 82421, 75341 83834, 75419 84721, 75522 85579, 75567 85647, 75897 85624, 76910 85331, 78011 84968, 80067 84389, 82378 83835, 83954 83499, 84921 83275, 85836 83044, 85874 83006, 85755 82813, 85314 82421, 84625 81905, 83778 81319, 82863 80727, 81971 80188, 80894 79607, 80320 79414, 79411 79324, 77844 79325), (76163 74393, 75939 74650, 75624 75311, 75354 76213, 75214 76949, 75024 78761, 76559 78397, 77079 78256, 77493 78075, 77707 77846, 77808 77447, 77630 76819, 77421 76312, 77164 75771, 76890 75252, 76496 74597, 76278 74393, 76163 74393), (107931 38580, 107567 38965, 106465 40070, 104931 41700, 103090 43716, 101080 45961, 99043 48283, 97115 50527, 95851 52033, 94246 53995, 93193 55235, 92391 56135, 92026 56511, 91659 56725, 91364 56742, 91025 56554, 90591 56098, 90018 55319, 89257 54155, 88261 52551, 85083 47327, 84258 48789, 83639 50090, 82579 52551, 81394 55541, 80164 58845, 78966 62248, 77882 65532, 76986 68484, 76497 70281, 76069 72128, 77424 74146, 78375 75503, 79312 76703, 80051 77436, 80544 77773, 81333 78141, 81665 78253, 81934 78214, 82512 77991, 83807 77707, 85044 77467, 86816 77154, 89394 76678, 91380 76293, 92483 76062, 95147 75742, 99652 75454, 104522 75403, 107998 75520, 110200 75692, 111001 75724, 111638 75670, 112193 75497, 112744 75165, 113374 74640, 114164 73883, 115503 72553, 116401 71606, 117741 70120, 119189 68438, 120715 66600, 122294 64641, 123893 62602, 125488 60519, 127051 58430, 128552 56375, 129962 54389, 131256 52512, 132404 50782, 133378 49236, 134150 47912, 134692 46850, 134930 46281, 135046 45721, 135014 45515, 134854 45423, 134160 45402, 133018 45574, 130550 46106, 127050 47017, 123583 47990, 119714 49118, 117518 49747, 115784 50229, 114459 50576, 113482 50805, 112797 50926, 112346 50956, 112028 50890, 111753 50516, 111504 49885, 111391 49427, 111139 48497, 110677 46876, 110138 45042, 109026 41411, 108559 39950, 108097 38580, 107931 38580), (67112 54469, 67230 55169, 67404 55732, 67808 56873, 68347 58252, 68957 59716, 69573 61116, 70129 62302, 70724 63431, 70865 63431, 71217 62591, 71542 61684, 71816 60857, 72566 58469, 72912 57402, 72740 57228, 72235 56857, 71458 56380, 70734 55979, 68431 54788, 67819 54495, 67429 54347, 67215 54332, 67112 54469))) \ No newline at end of file diff --git a/stress_benchmark/resources/051.settings b/stress_benchmark/resources/051.settings index 78c8abbd15..35938d489c 100644 --- a/stress_benchmark/resources/051.settings +++ b/stress_benchmark/resources/051.settings @@ -73,7 +73,6 @@ raft_surface_margin=0 support_tree_branch_diameter_angle=7 prime_tower_base_height=0.12 machine_nozzle_head_distance=3 -support_interface_skip_height=0.12 support_bottom_pattern=lines bottom_thickness=0.96 cool_fan_enabled=True @@ -299,6 +298,7 @@ mold_angle=40 raft_base_extruder_nr=0 z_seam_y=350 wall_overhang_angle=90 +seam_overhang_angle=30 machine_steps_per_mm_e=1600 gradual_support_infill_step_height=1 cross_infill_pocket_size=2.0 diff --git a/stress_benchmark/resources/051.wkt b/stress_benchmark/resources/051.wkt index ab7d7e5a2c..4054510a69 100644 --- a/stress_benchmark/resources/051.wkt +++ b/stress_benchmark/resources/051.wkt @@ -1 +1 @@ -MULTIPOLYGON (((176710 110618, 178664 110709, 180381 110834, 181547 110937, 183639 111186, 185334 111428, 186649 111665, 187395 111817, 187970 111982, 188399 112046, 189525 112331, 189710 112622, 189924 112626, 189992 112740, 190425 112975, 190744 113499, 191416 113698, 192007 114025, 191936 114546, 192005 115423, 191992 115665, 192100 116841, 192117 117406, 192194 117757, 192382 118858, 192571 119535, 192873 120515, 192924 120589, 193157 121136, 193345 121353, 193529 121803, 193796 122038, 193880 122185, 194077 122215, 194212 122563, 194454 122145, 194220 121869, 194014 121763, 193969 121245, 193817 120997, 193647 120375, 193430 119872, 193198 118362, 193167 117831, 193169 116505, 193254 115316, 193411 114343, 193716 113427, 194183 113538, 194805 113753, 195123 113824, 197308 114591, 198309 114977, 199575 115484, 200429 115844, 202078 116577, 202929 116981, 203957 117484, 205474 118281, 207238 119251, 208856 120224, 209655 120726, 211387 121864, 213095 123082, 214696 124293, 215897 125255, 217674 126774, 218788 127789, 219811 128759, 220452 129384, 221418 130359, 222729 131771, 223957 133167, 224394 133708, 224840 134356, 224820 134633, 225185 134760, 225458 135086, 226081 135779, 226373 136341, 225987 136465, 225527 136124, 224972 135359, 224621 134786, 223968 134890, 223468 135254, 222714 135884, 221854 136460, 221477 136806, 220419 137462, 219807 137727, 219096 138136, 218932 138189, 218294 138445, 218103 138732, 218119 139073, 217657 139582, 217787 139533, 218428 139153, 218900 138995, 219689 138592, 220045 138490, 220724 138202, 221169 137948, 221724 137673, 222571 137195, 223008 137008, 223289 137084, 223450 137188, 224302 138073, 225438 138709, 226195 139062, 226004 139648, 225214 140439, 224847 140944, 224352 141522, 223790 142206, 223440 142652, 222865 143437, 222672 143760, 221992 144708, 221929 145017, 221801 145285, 221823 145434, 222527 144523, 222953 144190, 223828 143234, 225502 141662, 226812 140506, 227743 139750, 228172 139472, 228487 139304, 229188 140214, 230383 142142, 230726 142806, 231000 143273, 231143 143495, 231217 143793, 231469 144270, 231185 144589, 230841 145167, 230393 145665, 230262 145905, 229992 146235, 229363 147172, 229456 147228, 228996 147840, 228834 148312, 229680 147336, 230368 146811, 230500 146594, 230753 146353, 231103 145963, 231221 145918, 231409 145720, 231705 145510, 231861 145338, 232135 145412, 232247 145652, 232599 146236, 232949 147011, 233256 147593, 233343 147888, 233635 148394, 233731 148755, 233835 148949, 233905 149435, 233660 149622, 233401 150052, 233240 150206, 232942 150641, 232816 150788, 232291 151469, 231841 152255, 231587 152730, 231363 153191, 231123 153655, 231035 154057, 230793 154514, 230735 154899, 230619 155246, 230657 155289, 230567 155404, 230468 155693, 230488 156066, 230441 156318, 230526 156410, 230359 156773, 230346 157216, 230494 157710, 230452 157972, 230693 158125, 230648 158227, 230804 158186, 230777 157635, 230815 157433, 230742 157051, 230462 156832, 230996 156666, 231087 156224, 231089 155862, 231276 155436, 231493 154718, 231489 154628, 231754 154164, 231910 153732, 232365 152999, 232787 152469, 232924 152326, 233523 151611, 233707 151441, 234177 150954, 234627 150955, 234946 151543, 235337 152513, 235743 153632, 236488 155879, 236793 156897, 236931 157393, 237078 158172, 237365 159009, 237559 159929, 237799 161196, 238022 161857, 238023 162426, 238248 163070, 238414 163818, 238441 164564, 238531 165058, 238657 165549, 238808 166403, 238825 166672, 238922 167533, 239008 168002, 239068 168560, 239255 170781, 239336 172289, 239385 174204, 239371 175287, 239374 176359, 239333 177731, 239278 178760, 239114 180903, 239017 181898, 238851 182982, 238837 183245, 238740 183786, 238675 183919, 238692 184026, 237194 184974, 236152 185408, 235004 185737, 234597 185904, 233463 186195, 233102 186240, 232971 186298, 231999 186447, 230968 186644, 230086 186753, 229320 186802, 228863 186953, 228853 187025, 229223 187165, 230009 187183, 230163 187238, 230667 187209, 231311 187245, 231992 187190, 232577 187168, 233304 187126, 233965 187046, 234673 187016, 235795 186869, 237264 186638, 238140 186815, 238113 187684, 237956 188210, 237877 188826, 237655 189463, 237247 189466, 236960 189608, 236800 189793, 236599 189899, 236731 190085, 236838 190467, 237320 190847, 237128 191919, 237008 192205, 236938 192573, 236226 194935, 235445 197201, 234750 199005, 234037 200710, 233751 201138, 233552 201739, 233292 202211, 233217 202467, 232847 203065, 232627 203022, 232141 202559, 231717 202271, 231318 201872, 230220 201005, 229509 200505, 229251 200355, 228811 200047, 228533 199901, 227887 199485, 227379 199187, 226648 198818, 225174 198187, 226073 198954, 226086 198999, 227219 199710, 227625 200113, 228460 200767, 229163 201465, 229366 201653, 230245 202643, 230772 203472, 231543 204861, 231520 205235, 231555 205652, 231382 205876, 231105 206519, 230800 207091, 230694 207239, 230434 207743, 230174 208195, 229271 209651, 228611 210653, 228080 211415, 227535 212229, 227005 212969, 225793 214564, 224847 215763, 222958 217974, 221221 219822, 220391 220667, 219470 221562, 218565 222404, 217856 223048, 215921 224715, 214678 225709, 213412 226669, 212693 227200, 212048 227659, 210633 228628, 210043 229016, 208025 230276, 205517 231694, 204047 232460, 203162 232896, 201452 233713, 199881 234390, 199338 234532, 198820 234796, 198668 234847, 198164 235063, 197662 235071, 197524 235025, 196631 235185, 196304 235262, 195503 235028, 195036 234980, 194668 234753, 194346 234634, 193871 234361, 193333 233979, 192544 233265, 192023 232686, 191658 232248, 191339 231818, 190618 230719, 190018 229546, 189805 229222, 189656 228890, 189592 229441, 189812 230041, 190070 230883, 190796 232548, 191097 233082, 191357 233570, 191464 233709, 192289 234966, 192747 235445, 193186 235984, 193422 236616, 192620 236906, 191580 237223, 189165 237805, 188021 238064, 185756 238485, 183779 238784, 181965 239007, 180126 239180, 178157 239308, 176289 239371, 175583 239383, 174798 239375, 174426 239343, 173618 239341, 172626 239296, 172370 238974, 172125 238977, 172053 238898, 171766 238831, 171590 238727, 171194 238323, 170915 238308, 170238 238216, 170063 238012, 170038 237813, 169935 237654, 169817 236930, 169619 236329, 169494 235668, 169316 235243, 169251 234906, 168839 233783, 168333 232624, 168283 232562, 167901 231876, 167729 231728, 167608 231508, 167316 231159, 167154 231074, 166973 230764, 166836 230643, 166575 230531, 166442 230363, 166263 230432, 166035 229957, 165668 229819, 165143 229770, 165082 229728, 164507 229682, 165093 229829, 165238 229941, 165706 230142, 165988 230002, 166009 230592, 166200 230742, 166437 230843, 166673 231402, 166983 231654, 167151 232148, 167308 232376, 167549 232837, 167952 234132, 168109 234597, 168326 235441, 168497 236715, 168563 237625, 168448 238276, 168446 238703, 168276 239014, 167138 238884, 166876 238870, 165802 238721, 164466 238516, 163551 238358, 162346 238130, 160328 237692, 157830 237061, 155560 236385, 153430 235671, 151282 234861, 150270 234448, 149515 234126, 148079 233486, 147283 233119, 146784 232878, 144635 231781, 142712 230707, 141756 230142, 139842 228942, 138701 228177, 137673 227469, 135102 225550, 134040 224628, 133955 224428, 133739 224237, 132570 223422, 132048 222921, 132315 222599, 132921 222900, 133800 223742, 133867 223851, 133957 223857, 134205 224060, 134708 223811, 134895 223538, 135141 223362, 135527 222823, 136463 221679, 137007 221073, 137636 220519, 138091 220169, 139753 218953, 139757 218893, 139477 218327, 139549 218195, 138827 218899, 138166 219253, 136602 220355, 135594 221230, 134941 221518, 133728 220693, 131977 220153, 131676 219970, 131604 219870, 131797 219468, 132043 219141, 132326 218528, 132688 217914, 132818 217750, 132872 217526, 133332 216698, 133453 216524, 133477 216401, 133987 215467, 134342 214601, 134637 213954, 134842 213312, 134926 212867, 134633 213328, 134357 213591, 134092 214027, 133856 214438, 133651 214653, 133255 215284, 133120 215530, 132998 215658, 132394 216610, 131797 217479, 131644 217640, 131282 218238, 130942 218635, 130765 218858, 130479 219116, 130302 219385, 129871 219718, 129738 219915, 129560 220064, 129246 220174, 128633 219675, 127672 218656, 126844 217745, 126583 217380, 125921 216685, 125776 216195, 125621 215951, 125737 215717, 125850 215281, 125986 215051, 126173 214548, 126514 213814, 126531 213756, 126842 213180, 127072 212660, 127165 212398, 127416 211850, 127756 211067, 128038 210354, 128062 210272, 127947 210471, 127660 211029, 127542 211230, 127318 211724, 127116 211971, 126945 212470, 126511 212758, 126167 213297, 125751 213768, 125302 214409, 124927 214714, 124759 214950, 124563 214884, 124496 214770, 124209 214549, 123641 213764, 123168 213198, 123008 212875, 122517 212278, 122473 212187, 122169 211669, 122100 211632, 122303 211164, 122316 211035, 122620 210535, 122673 210351, 122924 209882, 122991 209703, 123252 209100, 123319 208876, 123666 207985, 123837 207460, 123894 207013, 124038 206515, 124070 206200, 124043 206107, 124119 205948, 124183 205621, 124132 205253, 124240 204736, 124206 204220, 124127 204076, 124161 203740, 124055 203729, 124167 203510, 124151 203281, 123983 202844, 123896 202484, 123764 202373, 123751 202207, 123464 202215, 123487 202479, 123653 202865, 123621 203351, 123762 203505, 123570 203749, 123517 203979, 123572 204115, 123586 204661, 123639 204749, 123473 205242, 123486 205636, 123343 206125, 123279 206572, 123074 207108, 122934 207613, 122665 208247, 121917 209475, 121274 210028, 121223 210105, 120846 209777, 120079 208616, 118901 206609, 118809 206430, 118204 205352, 118070 205028, 117815 204525, 117698 204323, 117480 203862, 117466 203794, 117071 202977, 116878 202671, 116502 201794, 116152 200903, 115903 200343, 115643 199822, 115369 199163, 114920 198194, 114683 197157, 114174 196119, 113383 193711, 112775 191570, 112209 189276, 112126 188848, 111835 187520, 111604 186291, 111314 184522, 111190 183649, 111072 182681, 110874 180860, 110873 180385, 110816 179814, 110770 179175, 110788 178576, 110774 178544, 111283 177894, 111308 177837, 111762 177471, 112932 176618, 113314 176392, 113906 176002, 114589 175663, 115444 175263, 116078 175035, 117360 174494, 118247 174181, 119050 173922, 119599 173697, 119438 173592, 118603 173659, 118554 173937, 117922 173840, 117376 173876, 116596 174079, 116183 174137, 115653 174288, 114881 174488, 114225 174675, 112516 175217, 112067 175443, 111702 175484, 110907 175384, 111034 175697, 110689 175700, 110784 175360, 110622 175020, 110657 174311, 110647 173304, 110677 172740, 111127 172695, 111709 172398, 111545 172023, 111126 171675, 110808 171627, 110774 171487, 110799 171197, 110758 170878, 110846 169659, 110859 169298, 111056 167418, 111336 165341, 111463 164544, 111827 162519, 112020 161576, 112141 161047, 112277 160696, 112369 160142, 112569 159616, 112575 159270, 112682 158873, 112868 158601, 113183 158757, 113447 158745, 113697 158943, 114309 159326, 114517 159381, 115165 159770, 115636 160112, 116003 160216, 116550 160454, 116899 160678, 118687 161278, 120154 161681, 120727 161746, 121043 161627, 120526 161444, 120310 161345, 119728 161142, 119420 161048, 119167 160815, 118539 160532, 117951 160251, 117442 159903, 116821 159577, 116282 159167, 115835 158865, 114947 158010, 114141 157060, 113780 156293, 113645 156127, 113711 155872, 113711 155593, 113842 154944, 113999 154495, 114155 153959, 114349 153431, 114677 152459, 115404 150603, 115652 150012, 116006 149232, 116099 148978, 116549 147979, 116920 147191, 117622 145770, 118287 144500, 118905 143376, 119684 142029, 120429 140794, 121895 138580, 122556 137641, 123730 136035, 124856 134599, 125786 133455, 127159 131896, 127874 131116, 128490 130464, 129781 129160, 130681 128278, 132346 126742, 133969 125361, 135117 124431, 136981 123024, 137469 122671, 139101 121531, 139581 121289, 140055 120929, 140319 120776, 140770 120478, 140887 120486, 140961 120440, 141174 120496, 142123 120160, 142174 120048, 143013 120048, 143598 120022, 144057 120212, 144532 120228, 145106 120450, 145757 120793, 146247 121065, 146790 121396, 147673 122162, 148195 122646, 148639 123104, 149369 123914, 150052 124824, 150150 124465, 149471 123283, 148977 122464, 148023 121172, 146888 119920, 146188 119398, 146135 119330, 145166 118500, 144937 118146, 145748 117665, 145912 117552, 146794 117114, 148105 116493, 148896 116137, 150429 115475, 151447 115068, 152577 114633, 154616 113914, 156781 113233, 158916 112638, 160083 112355, 162456 111834, 164783 111411, 167092 111089, 169246 110860, 171322 110705, 172640 110648, 174617 110604) (160937 228872, 161003 229587, 161107 229822, 161203 229764, 161583 229725, 161478 229219, 161303 228933, 161188 228446, 161126 228338) (161978 229488, 162157 229375, 162312 229342, 162857 229428, 163541 229507, 163051 229406, 162885 229284, 161950 229123) (173793 127868, 172229 127929, 170529 128061, 169069 128225, 167819 128406, 166375 128657, 165358 128849, 163800 129199, 162888 129433, 161364 129866, 160391 130178, 158845 130702, 157305 131298, 155437 132097, 153711 132930, 151908 133887, 150312 134831, 148927 135716, 147645 136598, 146362 137545, 145493 138216, 144062 139419, 142670 140692, 141577 141746, 140406 142963, 139994 143416, 138887 144682, 137857 145958, 136869 147271, 135761 148848, 134883 150227, 134087 151570, 133733 152191, 133173 153245, 132389 154838, 131694 156363, 131072 157883, 130435 159610, 130022 160868, 129666 162063, 129414 162971, 129061 164393, 128774 165734, 128587 166727, 128424 167708, 128196 169315, 128074 170570, 128020 171030, 127922 172499, 127854 174330, 127875 176407, 127950 177915, 127997 178672, 128157 180264, 128274 181278, 128516 182851, 128783 184302, 129080 185661, 129451 187148, 130005 189072, 130667 191055, 131280 192629, 131827 193937, 132405 195185, 132888 196186, 133526 197427, 133880 198058, 134821 199664, 135342 200485, 135796 201159, 136172 201741, 137365 203394, 138309 204599, 138840 205238, 139933 206508, 140990 207644, 141699 208376, 142654 209293, 143867 210403, 144919 211282, 145243 211563, 146547 212585, 148388 213913, 149787 214829, 150794 215449, 151853 216063, 153317 216859, 154777 217582, 156196 218223, 157941 218946, 159647 219571, 161241 220085, 163086 220612, 164414 220932, 165510 221164, 165775 221228, 168011 221623, 169712 221841, 170929 221960, 172459 222072, 174485 222137, 176147 222123, 177489 222075, 179008 221967, 180179 221849, 181732 221659, 183641 221340, 185401 220979, 186888 220615, 188388 220195, 189323 219908, 190949 219360, 192613 218727, 193725 218259, 195543 217433, 197389 216481, 198783 215698, 200168 214863, 201579 213921, 202394 213365, 203649 212431, 204616 211663, 205607 210849, 206646 209928, 208389 208274, 209324 207297, 210193 206365, 211463 204867, 212420 203669, 213356 202404, 214251 201111, 215054 199857, 215781 198616, 216042 198189, 216964 196459, 217743 194887, 218498 193172, 219104 191640, 219560 190386, 220150 188563, 220557 187120, 220866 185883, 221185 184446, 221407 183270, 221601 182107, 221866 180127, 222013 178474, 222066 177489, 222096 177121, 222136 175821, 222140 174522, 222121 173554, 222099 173007, 222016 171508, 221860 169820, 221604 167879, 221448 166948, 221102 165144, 220785 163773, 220394 162276, 219889 160591, 219378 159113, 218797 157562, 218056 155789, 217357 154299, 216756 153118, 216132 151955, 215452 150810, 215282 150507, 214473 149218, 213711 148092, 213192 147361, 212426 146331, 211238 144840, 210013 143427, 209141 142496, 208180 141521, 207176 140539, 205814 139316, 204438 138172, 203677 137575, 202668 136834, 201484 135995, 200650 135437, 199525 134735, 198146 133928, 196510 133045, 195309 132451, 193989 131845, 192301 131136, 190438 130452, 189168 130037, 187660 129584, 186320 129231, 185288 128988, 184040 128725, 182756 128490, 181376 128285, 180300 128151, 178613 127989, 176932 127890, 175228 127847) (123359 200683, 123667 201269, 123659 201306, 123729 201317, 123422 200631, 123290 200430) (230447 159418, 230653 160069, 230693 160145, 230538 159385, 230547 159320, 230389 159051) (196981 123831, 197179 123983, 198193 124391, 198620 123956, 198546 124329, 198711 124527, 198867 124947, 198971 124938, 198999 124729, 199139 124378, 199189 124109, 199025 123868, 198643 123854, 198154 124197, 198054 124008, 197802 124024, 197309 123862, 197034 123798, 196376 123567) (194344 122776, 194643 122994, 195735 123317, 194938 122907, 194680 122512, 194556 122484))) \ No newline at end of file +MULTIPOLYGON (((176710 110618, 178664 110709, 180381 110834, 181547 110937, 183639 111186, 185334 111428, 186649 111665, 187395 111817, 187970 111982, 188399 112046, 189525 112331, 189710 112622, 189924 112626, 189992 112740, 190425 112975, 190744 113499, 191416 113698, 192007 114025, 191936 114546, 192005 115423, 191992 115665, 192100 116841, 192117 117406, 192194 117757, 192382 118858, 192571 119535, 192873 120515, 192924 120589, 193157 121136, 193345 121353, 193529 121803, 193796 122038, 193880 122185, 194077 122215, 194212 122563, 194454 122145, 194220 121869, 194014 121763, 193969 121245, 193817 120997, 193647 120375, 193430 119872, 193198 118362, 193167 117831, 193169 116505, 193254 115316, 193411 114343, 193716 113427, 194183 113538, 194805 113753, 195123 113824, 197308 114591, 198309 114977, 199575 115484, 200429 115844, 202078 116577, 202929 116981, 203957 117484, 205474 118281, 207238 119251, 208856 120224, 209655 120726, 211387 121864, 213095 123082, 214696 124293, 215897 125255, 217674 126774, 218788 127789, 219811 128759, 220452 129384, 221418 130359, 222729 131771, 223957 133167, 224394 133708, 224840 134356, 224820 134633, 225185 134760, 225458 135086, 226081 135779, 226373 136341, 225987 136465, 225527 136124, 224972 135359, 224621 134786, 223968 134890, 223468 135254, 222714 135884, 221854 136460, 221477 136806, 220419 137462, 219807 137727, 219096 138136, 218932 138189, 218294 138445, 218103 138732, 218119 139073, 217657 139582, 217787 139533, 218428 139153, 218900 138995, 219689 138592, 220045 138490, 220724 138202, 221169 137948, 221724 137673, 222571 137195, 223008 137008, 223289 137084, 223450 137188, 224302 138073, 225438 138709, 226195 139062, 226004 139648, 225214 140439, 224847 140944, 224352 141522, 223790 142206, 223440 142652, 222865 143437, 222672 143760, 221992 144708, 221929 145017, 221801 145285, 221823 145434, 222527 144523, 222953 144190, 223828 143234, 225502 141662, 226812 140506, 227743 139750, 228172 139472, 228487 139304, 229188 140214, 230383 142142, 230726 142806, 231000 143273, 231143 143495, 231217 143793, 231469 144270, 231185 144589, 230841 145167, 230393 145665, 230262 145905, 229992 146235, 229363 147172, 229456 147228, 228996 147840, 228834 148312, 229680 147336, 230368 146811, 230500 146594, 230753 146353, 231103 145963, 231221 145918, 231409 145720, 231705 145510, 231861 145338, 232135 145412, 232247 145652, 232599 146236, 232949 147011, 233256 147593, 233343 147888, 233635 148394, 233731 148755, 233835 148949, 233905 149435, 233660 149622, 233401 150052, 233240 150206, 232942 150641, 232816 150788, 232291 151469, 231841 152255, 231587 152730, 231363 153191, 231123 153655, 231035 154057, 230793 154514, 230735 154899, 230619 155246, 230657 155289, 230567 155404, 230468 155693, 230488 156066, 230441 156318, 230526 156410, 230359 156773, 230346 157216, 230494 157710, 230452 157972, 230693 158125, 230648 158227, 230804 158186, 230777 157635, 230815 157433, 230742 157051, 230462 156832, 230996 156666, 231087 156224, 231089 155862, 231276 155436, 231493 154718, 231489 154628, 231754 154164, 231910 153732, 232365 152999, 232787 152469, 232924 152326, 233523 151611, 233707 151441, 234177 150954, 234627 150955, 234946 151543, 235337 152513, 235743 153632, 236488 155879, 236793 156897, 236931 157393, 237078 158172, 237365 159009, 237559 159929, 237799 161196, 238022 161857, 238023 162426, 238248 163070, 238414 163818, 238441 164564, 238531 165058, 238657 165549, 238808 166403, 238825 166672, 238922 167533, 239008 168002, 239068 168560, 239255 170781, 239336 172289, 239385 174204, 239371 175287, 239374 176359, 239333 177731, 239278 178760, 239114 180903, 239017 181898, 238851 182982, 238837 183245, 238740 183786, 238675 183919, 238692 184026, 237194 184974, 236152 185408, 235004 185737, 234597 185904, 233463 186195, 233102 186240, 232971 186298, 231999 186447, 230968 186644, 230086 186753, 229320 186802, 228863 186953, 228853 187025, 229223 187165, 230009 187183, 230163 187238, 230667 187209, 231311 187245, 231992 187190, 232577 187168, 233304 187126, 233965 187046, 234673 187016, 235795 186869, 237264 186638, 238140 186815, 238113 187684, 237956 188210, 237877 188826, 237655 189463, 237247 189466, 236960 189608, 236800 189793, 236599 189899, 236731 190085, 236838 190467, 237320 190847, 237128 191919, 237008 192205, 236938 192573, 236226 194935, 235445 197201, 234750 199005, 234037 200710, 233751 201138, 233552 201739, 233292 202211, 233217 202467, 232847 203065, 232627 203022, 232141 202559, 231717 202271, 231318 201872, 230220 201005, 229509 200505, 229251 200355, 228811 200047, 228533 199901, 227887 199485, 227379 199187, 226648 198818, 225174 198187, 226073 198954, 226086 198999, 227219 199710, 227625 200113, 228460 200767, 229163 201465, 229366 201653, 230245 202643, 230772 203472, 231543 204861, 231520 205235, 231555 205652, 231382 205876, 231105 206519, 230800 207091, 230694 207239, 230434 207743, 230174 208195, 229271 209651, 228611 210653, 228080 211415, 227535 212229, 227005 212969, 225793 214564, 224847 215763, 222958 217974, 221221 219822, 220391 220667, 219470 221562, 218565 222404, 217856 223048, 215921 224715, 214678 225709, 213412 226669, 212693 227200, 212048 227659, 210633 228628, 210043 229016, 208025 230276, 205517 231694, 204047 232460, 203162 232896, 201452 233713, 199881 234390, 199338 234532, 198820 234796, 198668 234847, 198164 235063, 197662 235071, 197524 235025, 196631 235185, 196304 235262, 195503 235028, 195036 234980, 194668 234753, 194346 234634, 193871 234361, 193333 233979, 192544 233265, 192023 232686, 191658 232248, 191339 231818, 190618 230719, 190018 229546, 189805 229222, 189656 228890, 189592 229441, 189812 230041, 190070 230883, 190796 232548, 191097 233082, 191357 233570, 191464 233709, 192289 234966, 192747 235445, 193186 235984, 193422 236616, 192620 236906, 191580 237223, 189165 237805, 188021 238064, 185756 238485, 183779 238784, 181965 239007, 180126 239180, 178157 239308, 176289 239371, 175583 239383, 174798 239375, 174426 239343, 173618 239341, 172626 239296, 172370 238974, 172125 238977, 172053 238898, 171766 238831, 171590 238727, 171194 238323, 170915 238308, 170238 238216, 170063 238012, 170038 237813, 169935 237654, 169817 236930, 169619 236329, 169494 235668, 169316 235243, 169251 234906, 168839 233783, 168333 232624, 168283 232562, 167901 231876, 167729 231728, 167608 231508, 167316 231159, 167154 231074, 166973 230764, 166836 230643, 166575 230531, 166442 230363, 166263 230432, 166035 229957, 165668 229819, 165143 229770, 165082 229728, 164507 229682, 165093 229829, 165238 229941, 165706 230142, 165988 230002, 166009 230592, 166200 230742, 166437 230843, 166673 231402, 166983 231654, 167151 232148, 167308 232376, 167549 232837, 167952 234132, 168109 234597, 168326 235441, 168497 236715, 168563 237625, 168448 238276, 168446 238703, 168276 239014, 167138 238884, 166876 238870, 165802 238721, 164466 238516, 163551 238358, 162346 238130, 160328 237692, 157830 237061, 155560 236385, 153430 235671, 151282 234861, 150270 234448, 149515 234126, 148079 233486, 147283 233119, 146784 232878, 144635 231781, 142712 230707, 141756 230142, 139842 228942, 138701 228177, 137673 227469, 135102 225550, 134040 224628, 133955 224428, 133739 224237, 132570 223422, 132048 222921, 132315 222599, 132921 222900, 133800 223742, 133867 223851, 133957 223857, 134205 224060, 134708 223811, 134895 223538, 135141 223362, 135527 222823, 136463 221679, 137007 221073, 137636 220519, 138091 220169, 139753 218953, 139757 218893, 139477 218327, 139549 218195, 138827 218899, 138166 219253, 136602 220355, 135594 221230, 134941 221518, 133728 220693, 131977 220153, 131676 219970, 131604 219870, 131797 219468, 132043 219141, 132326 218528, 132688 217914, 132818 217750, 132872 217526, 133332 216698, 133453 216524, 133477 216401, 133987 215467, 134342 214601, 134637 213954, 134842 213312, 134926 212867, 134633 213328, 134357 213591, 134092 214027, 133856 214438, 133651 214653, 133255 215284, 133120 215530, 132998 215658, 132394 216610, 131797 217479, 131644 217640, 131282 218238, 130942 218635, 130765 218858, 130479 219116, 130302 219385, 129871 219718, 129738 219915, 129560 220064, 129246 220174, 128633 219675, 127672 218656, 126844 217745, 126583 217380, 125921 216685, 125776 216195, 125621 215951, 125737 215717, 125850 215281, 125986 215051, 126173 214548, 126514 213814, 126531 213756, 126842 213180, 127072 212660, 127165 212398, 127416 211850, 127756 211067, 128038 210354, 128062 210272, 127947 210471, 127660 211029, 127542 211230, 127318 211724, 127116 211971, 126945 212470, 126511 212758, 126167 213297, 125751 213768, 125302 214409, 124927 214714, 124759 214950, 124563 214884, 124496 214770, 124209 214549, 123641 213764, 123168 213198, 123008 212875, 122517 212278, 122473 212187, 122169 211669, 122100 211632, 122303 211164, 122316 211035, 122620 210535, 122673 210351, 122924 209882, 122991 209703, 123252 209100, 123319 208876, 123666 207985, 123837 207460, 123894 207013, 124038 206515, 124070 206200, 124043 206107, 124119 205948, 124183 205621, 124132 205253, 124240 204736, 124206 204220, 124127 204076, 124161 203740, 124055 203729, 124167 203510, 124151 203281, 123983 202844, 123896 202484, 123764 202373, 123751 202207, 123464 202215, 123487 202479, 123653 202865, 123621 203351, 123762 203505, 123570 203749, 123517 203979, 123572 204115, 123586 204661, 123639 204749, 123473 205242, 123486 205636, 123343 206125, 123279 206572, 123074 207108, 122934 207613, 122665 208247, 121917 209475, 121274 210028, 121223 210105, 120846 209777, 120079 208616, 118901 206609, 118809 206430, 118204 205352, 118070 205028, 117815 204525, 117698 204323, 117480 203862, 117466 203794, 117071 202977, 116878 202671, 116502 201794, 116152 200903, 115903 200343, 115643 199822, 115369 199163, 114920 198194, 114683 197157, 114174 196119, 113383 193711, 112775 191570, 112209 189276, 112126 188848, 111835 187520, 111604 186291, 111314 184522, 111190 183649, 111072 182681, 110874 180860, 110873 180385, 110816 179814, 110770 179175, 110788 178576, 110774 178544, 111283 177894, 111308 177837, 111762 177471, 112932 176618, 113314 176392, 113906 176002, 114589 175663, 115444 175263, 116078 175035, 117360 174494, 118247 174181, 119050 173922, 119599 173697, 119438 173592, 118603 173659, 118554 173937, 117922 173840, 117376 173876, 116596 174079, 116183 174137, 115653 174288, 114881 174488, 114225 174675, 112516 175217, 112067 175443, 111702 175484, 110907 175384, 111034 175697, 110689 175700, 110784 175360, 110622 175020, 110657 174311, 110647 173304, 110677 172740, 111127 172695, 111709 172398, 111545 172023, 111126 171675, 110808 171627, 110774 171487, 110799 171197, 110758 170878, 110846 169659, 110859 169298, 111056 167418, 111336 165341, 111463 164544, 111827 162519, 112020 161576, 112141 161047, 112277 160696, 112369 160142, 112569 159616, 112575 159270, 112682 158873, 112868 158601, 113183 158757, 113447 158745, 113697 158943, 114309 159326, 114517 159381, 115165 159770, 115636 160112, 116003 160216, 116550 160454, 116899 160678, 118687 161278, 120154 161681, 120727 161746, 121043 161627, 120526 161444, 120310 161345, 119728 161142, 119420 161048, 119167 160815, 118539 160532, 117951 160251, 117442 159903, 116821 159577, 116282 159167, 115835 158865, 114947 158010, 114141 157060, 113780 156293, 113645 156127, 113711 155872, 113711 155593, 113842 154944, 113999 154495, 114155 153959, 114349 153431, 114677 152459, 115404 150603, 115652 150012, 116006 149232, 116099 148978, 116549 147979, 116920 147191, 117622 145770, 118287 144500, 118905 143376, 119684 142029, 120429 140794, 121895 138580, 122556 137641, 123730 136035, 124856 134599, 125786 133455, 127159 131896, 127874 131116, 128490 130464, 129781 129160, 130681 128278, 132346 126742, 133969 125361, 135117 124431, 136981 123024, 137469 122671, 139101 121531, 139581 121289, 140055 120929, 140319 120776, 140770 120478, 140887 120486, 140961 120440, 141174 120496, 142123 120160, 142174 120048, 143013 120048, 143598 120022, 144057 120212, 144532 120228, 145106 120450, 145757 120793, 146247 121065, 146790 121396, 147673 122162, 148195 122646, 148639 123104, 149369 123914, 150052 124824, 150150 124465, 149471 123283, 148977 122464, 148023 121172, 146888 119920, 146188 119398, 146135 119330, 145166 118500, 144937 118146, 145748 117665, 145912 117552, 146794 117114, 148105 116493, 148896 116137, 150429 115475, 151447 115068, 152577 114633, 154616 113914, 156781 113233, 158916 112638, 160083 112355, 162456 111834, 164783 111411, 167092 111089, 169246 110860, 171322 110705, 172640 110648, 174617 110604, 176710 110618), (160937 228872, 161003 229587, 161107 229822, 161203 229764, 161583 229725, 161478 229219, 161303 228933, 161188 228446, 161126 228338, 160937 228872), (161978 229488, 162157 229375, 162312 229342, 162857 229428, 163541 229507, 163051 229406, 162885 229284, 161950 229123, 161978 229488), (173793 127868, 172229 127929, 170529 128061, 169069 128225, 167819 128406, 166375 128657, 165358 128849, 163800 129199, 162888 129433, 161364 129866, 160391 130178, 158845 130702, 157305 131298, 155437 132097, 153711 132930, 151908 133887, 150312 134831, 148927 135716, 147645 136598, 146362 137545, 145493 138216, 144062 139419, 142670 140692, 141577 141746, 140406 142963, 139994 143416, 138887 144682, 137857 145958, 136869 147271, 135761 148848, 134883 150227, 134087 151570, 133733 152191, 133173 153245, 132389 154838, 131694 156363, 131072 157883, 130435 159610, 130022 160868, 129666 162063, 129414 162971, 129061 164393, 128774 165734, 128587 166727, 128424 167708, 128196 169315, 128074 170570, 128020 171030, 127922 172499, 127854 174330, 127875 176407, 127950 177915, 127997 178672, 128157 180264, 128274 181278, 128516 182851, 128783 184302, 129080 185661, 129451 187148, 130005 189072, 130667 191055, 131280 192629, 131827 193937, 132405 195185, 132888 196186, 133526 197427, 133880 198058, 134821 199664, 135342 200485, 135796 201159, 136172 201741, 137365 203394, 138309 204599, 138840 205238, 139933 206508, 140990 207644, 141699 208376, 142654 209293, 143867 210403, 144919 211282, 145243 211563, 146547 212585, 148388 213913, 149787 214829, 150794 215449, 151853 216063, 153317 216859, 154777 217582, 156196 218223, 157941 218946, 159647 219571, 161241 220085, 163086 220612, 164414 220932, 165510 221164, 165775 221228, 168011 221623, 169712 221841, 170929 221960, 172459 222072, 174485 222137, 176147 222123, 177489 222075, 179008 221967, 180179 221849, 181732 221659, 183641 221340, 185401 220979, 186888 220615, 188388 220195, 189323 219908, 190949 219360, 192613 218727, 193725 218259, 195543 217433, 197389 216481, 198783 215698, 200168 214863, 201579 213921, 202394 213365, 203649 212431, 204616 211663, 205607 210849, 206646 209928, 208389 208274, 209324 207297, 210193 206365, 211463 204867, 212420 203669, 213356 202404, 214251 201111, 215054 199857, 215781 198616, 216042 198189, 216964 196459, 217743 194887, 218498 193172, 219104 191640, 219560 190386, 220150 188563, 220557 187120, 220866 185883, 221185 184446, 221407 183270, 221601 182107, 221866 180127, 222013 178474, 222066 177489, 222096 177121, 222136 175821, 222140 174522, 222121 173554, 222099 173007, 222016 171508, 221860 169820, 221604 167879, 221448 166948, 221102 165144, 220785 163773, 220394 162276, 219889 160591, 219378 159113, 218797 157562, 218056 155789, 217357 154299, 216756 153118, 216132 151955, 215452 150810, 215282 150507, 214473 149218, 213711 148092, 213192 147361, 212426 146331, 211238 144840, 210013 143427, 209141 142496, 208180 141521, 207176 140539, 205814 139316, 204438 138172, 203677 137575, 202668 136834, 201484 135995, 200650 135437, 199525 134735, 198146 133928, 196510 133045, 195309 132451, 193989 131845, 192301 131136, 190438 130452, 189168 130037, 187660 129584, 186320 129231, 185288 128988, 184040 128725, 182756 128490, 181376 128285, 180300 128151, 178613 127989, 176932 127890, 175228 127847, 173793 127868), (123359 200683, 123667 201269, 123659 201306, 123729 201317, 123422 200631, 123290 200430, 123359 200683), (230447 159418, 230653 160069, 230693 160145, 230538 159385, 230547 159320, 230389 159051, 230447 159418), (196981 123831, 197179 123983, 198193 124391, 198620 123956, 198546 124329, 198711 124527, 198867 124947, 198971 124938, 198999 124729, 199139 124378, 199189 124109, 199025 123868, 198643 123854, 198154 124197, 198054 124008, 197802 124024, 197309 123862, 197034 123798, 196376 123567, 196981 123831), (194344 122776, 194643 122994, 195735 123317, 194938 122907, 194680 122512, 194556 122484, 194344 122776))) \ No newline at end of file diff --git a/stress_benchmark/resources/052.settings b/stress_benchmark/resources/052.settings index dfab6c8c61..113431270d 100644 --- a/stress_benchmark/resources/052.settings +++ b/stress_benchmark/resources/052.settings @@ -73,7 +73,6 @@ raft_surface_margin=5 support_tree_branch_diameter_angle=7 prime_tower_base_height=0.28 machine_nozzle_head_distance=3 -support_interface_skip_height=0.28 support_bottom_pattern=grid bottom_thickness=1.4000000000000001 cool_fan_enabled=True @@ -298,6 +297,7 @@ mold_angle=40 raft_base_extruder_nr=0 z_seam_y=230 wall_overhang_angle=90 +seam_overhang_angle=30 machine_steps_per_mm_e=1600 gradual_support_infill_step_height=1 cross_infill_pocket_size=2.5600000000000005 diff --git a/stress_benchmark/resources/052.wkt b/stress_benchmark/resources/052.wkt index f450090e1b..bc1f9abfbc 100644 --- a/stress_benchmark/resources/052.wkt +++ b/stress_benchmark/resources/052.wkt @@ -1 +1 @@ -MULTIPOLYGON (((109686 134536, 110121 134814, 110298 135133, 110200 135485, 110046 135493, 109381 134967, 109147 134698, 109303 134480)), ((120122 134632, 120345 134758, 120510 134935, 120548 135030, 120509 135169, 119847 135094, 119796 135068, 119486 135018, 119099 134934, 119177 134715, 119344 134639, 119746 134569)), ((100620 129691, 100943 129932, 101187 130371, 101216 130615, 101170 130827, 100902 130979, 100786 130956, 100302 129995, 100240 129702, 100359 129629)), ((129246 129822, 129409 129941, 129444 130214, 128289 130485, 128125 130464, 128095 130254, 128342 130035, 128585 129866, 128933 129788)), ((95134 121371, 95310 121876, 95325 122158, 95174 122609, 94896 122722, 94706 122567, 94658 122101, 94649 121537, 94706 121335, 94858 121231)), ((134942 121391, 135047 121583, 134511 122036, 134133 122480, 134012 122494, 133981 122130, 134176 121632, 134669 121339)), ((135939 111231, 136020 111393, 136015 111732, 135790 112410, 135661 112592, 135439 112519, 135364 112406, 135292 112050, 135402 111476, 135714 111197)), ((94025 111307, 94132 111642, 93957 112231, 93671 112538, 93573 112583, 93391 112589, 93193 112351, 93223 112052, 93382 111679, 93669 111305, 93920 111234)), ((132189 101709, 132349 101945, 132537 102911, 132475 103105, 132390 103133, 132141 103099, 132018 103012, 131743 102506, 131681 102019, 131986 101678, 132059 101647)), ((97784 101951, 97823 102204, 97533 102675, 97221 102899, 96920 102942, 96780 102887, 96589 102635, 96684 102462, 96895 102195, 97331 101927, 97653 101854)), ((124763 95326, 125080 95729, 125243 95968, 125187 96177, 124878 96244, 124543 96174, 124273 95957, 124021 95528, 124016 95219, 124128 95099, 124409 95051)), ((105426 95274, 105542 95448, 105508 95702, 105341 95875, 105153 95990, 104872 96059, 104486 96084, 104239 95944, 104087 95679, 104183 95492, 104464 95310, 104881 95222, 105322 95222)), ((114616 92779, 114903 92893, 115025 92959, 115297 93068, 115410 93207, 115430 93451, 115302 93573, 114903 93688, 114352 93557, 114071 93247, 114038 92946, 114340 92758))) \ No newline at end of file +MULTIPOLYGON (((109686 134536, 110121 134814, 110298 135133, 110200 135485, 110046 135493, 109381 134967, 109147 134698, 109303 134480, 109686 134536)), ((120122 134632, 120345 134758, 120510 134935, 120548 135030, 120509 135169, 119847 135094, 119796 135068, 119486 135018, 119099 134934, 119177 134715, 119344 134639, 119746 134569, 120122 134632)), ((100620 129691, 100943 129932, 101187 130371, 101216 130615, 101170 130827, 100902 130979, 100786 130956, 100302 129995, 100240 129702, 100359 129629, 100620 129691)), ((129246 129822, 129409 129941, 129444 130214, 128289 130485, 128125 130464, 128095 130254, 128342 130035, 128585 129866, 128933 129788, 129246 129822)), ((95134 121371, 95310 121876, 95325 122158, 95174 122609, 94896 122722, 94706 122567, 94658 122101, 94649 121537, 94706 121335, 94858 121231, 95134 121371)), ((134942 121391, 135047 121583, 134511 122036, 134133 122480, 134012 122494, 133981 122130, 134176 121632, 134669 121339, 134942 121391)), ((135939 111231, 136020 111393, 136015 111732, 135790 112410, 135661 112592, 135439 112519, 135364 112406, 135292 112050, 135402 111476, 135714 111197, 135939 111231)), ((94025 111307, 94132 111642, 93957 112231, 93671 112538, 93573 112583, 93391 112589, 93193 112351, 93223 112052, 93382 111679, 93669 111305, 93920 111234, 94025 111307)), ((132189 101709, 132349 101945, 132537 102911, 132475 103105, 132390 103133, 132141 103099, 132018 103012, 131743 102506, 131681 102019, 131986 101678, 132059 101647, 132189 101709)), ((97784 101951, 97823 102204, 97533 102675, 97221 102899, 96920 102942, 96780 102887, 96589 102635, 96684 102462, 96895 102195, 97331 101927, 97653 101854, 97784 101951)), ((124763 95326, 125080 95729, 125243 95968, 125187 96177, 124878 96244, 124543 96174, 124273 95957, 124021 95528, 124016 95219, 124128 95099, 124409 95051, 124763 95326)), ((105426 95274, 105542 95448, 105508 95702, 105341 95875, 105153 95990, 104872 96059, 104486 96084, 104239 95944, 104087 95679, 104183 95492, 104464 95310, 104881 95222, 105322 95222, 105426 95274)), ((114616 92779, 114903 92893, 115025 92959, 115297 93068, 115410 93207, 115430 93451, 115302 93573, 114903 93688, 114352 93557, 114071 93247, 114038 92946, 114340 92758, 114616 92779))) \ No newline at end of file diff --git a/stress_benchmark/resources/053.settings b/stress_benchmark/resources/053.settings index b8cdb66682..6baab571ca 100644 --- a/stress_benchmark/resources/053.settings +++ b/stress_benchmark/resources/053.settings @@ -73,7 +73,6 @@ raft_surface_margin=15 support_tree_branch_diameter_angle=7 prime_tower_base_height=0.1 machine_nozzle_head_distance=5 -support_interface_skip_height=0.1 support_bottom_pattern=zigzag bottom_thickness=0.8 cool_fan_enabled=True @@ -300,6 +299,7 @@ mold_angle=40 raft_base_extruder_nr=0 z_seam_y=223 wall_overhang_angle=90 +seam_overhang_angle=30 machine_steps_per_mm_e=1600 gradual_support_infill_step_height=0.4 cross_infill_pocket_size=0 diff --git a/stress_benchmark/resources/053.wkt b/stress_benchmark/resources/053.wkt index 011e7091b9..f0ab2aaf77 100644 --- a/stress_benchmark/resources/053.wkt +++ b/stress_benchmark/resources/053.wkt @@ -1 +1 @@ -MULTIPOLYGON (((112612 86866, 113832 86959, 113832 86958, 114807 87070, 115782 87222, 116744 87411, 116744 87412, 117704 87641, 118647 87906, 119586 88211, 119586 88210, 120505 88550, 121413 88928, 122309 89343, 123184 89791, 124248 90392, 124248 90393, 125506 91206, 126484 91925, 127251 92534, 127994 93178, 128714 93853, 129584 94737, 130386 95654, 131001 96418, 131587 97208, 132141 98020, 132662 98854, 133149 99708, 133604 100584, 134020 101471, 134499 102605, 134907 103764, 135197 104703, 135516 105903, 135756 107095, 135913 108067, 136031 109043, 136030 109043, 136107 110025, 136147 111006, 136147 112231, 136057 113735, 135913 114930, 135757 115901, 135516 117096, 135198 118294, 134908 119233, 134498 120396, 134020 121530, 133604 122417, 133151 123289, 132664 124143, 132143 124977, 131589 125789, 131001 126582, 130386 127346, 129739 128086, 129063 128800, 128152 129686, 127251 130466, 126484 131076, 125491 131805, 124246 132609, 124246 132610, 123184 133209, 122309 133657, 121413 134072, 120505 134450, 119586 134790, 119586 134789, 118647 135094, 117704 135359, 116744 135588, 116744 135589, 115782 135778, 114554 135969, 113340 136083, 112358 136138, 111377 136153, 110395 136128, 109413 136064, 108431 135961, 107214 135784, 105753 135480, 104585 135163, 103646 134869, 102720 134537, 101812 134169, 100912 133764, 100035 133325, 99175 132851, 98330 132341, 97509 131799, 96511 131081, 95557 130305, 94630 129487, 93763 128624, 93095 127903, 92301 126976, 91553 125990, 90995 125184, 90462 124353, 89837 123282, 89183 121991, 88688 120848, 88332 119930, 88014 119000, 87734 118057, 87491 117104, 87287 116142, 87122 115173, 86995 114201, 86907 113218, 86858 112237, 86846 111014, 86907 109781, 86995 108798, 87122 107827, 87287 106858, 87491 105896, 87734 104943, 88014 104000, 88333 103069, 88688 102152, 89183 101009, 89837 99718, 90579 98445, 91420 97186, 92298 96027, 93095 95096, 93765 94376, 94645 93499, 95558 92695, 96509 91920, 97509 91201, 98330 90659, 99175 90148, 100035 89674, 100912 89235, 101812 88830, 102720 88463, 103646 88131, 104585 87837, 105533 87580, 106496 87361, 106496 87360, 107459 87180, 108431 87039, 109413 86936, 110395 86872, 111377 86847))) \ No newline at end of file +MULTIPOLYGON (((112612 86866, 113832 86959, 113832 86958, 114807 87070, 115782 87222, 116744 87411, 116744 87412, 117704 87641, 118647 87906, 119586 88211, 119586 88210, 120505 88550, 121413 88928, 122309 89343, 123184 89791, 124248 90392, 124248 90393, 125506 91206, 126484 91925, 127251 92534, 127994 93178, 128714 93853, 129584 94737, 130386 95654, 131001 96418, 131587 97208, 132141 98020, 132662 98854, 133149 99708, 133604 100584, 134020 101471, 134499 102605, 134907 103764, 135197 104703, 135516 105903, 135756 107095, 135913 108067, 136031 109043, 136030 109043, 136107 110025, 136147 111006, 136147 112231, 136057 113735, 135913 114930, 135757 115901, 135516 117096, 135198 118294, 134908 119233, 134498 120396, 134020 121530, 133604 122417, 133151 123289, 132664 124143, 132143 124977, 131589 125789, 131001 126582, 130386 127346, 129739 128086, 129063 128800, 128152 129686, 127251 130466, 126484 131076, 125491 131805, 124246 132609, 124246 132610, 123184 133209, 122309 133657, 121413 134072, 120505 134450, 119586 134790, 119586 134789, 118647 135094, 117704 135359, 116744 135588, 116744 135589, 115782 135778, 114554 135969, 113340 136083, 112358 136138, 111377 136153, 110395 136128, 109413 136064, 108431 135961, 107214 135784, 105753 135480, 104585 135163, 103646 134869, 102720 134537, 101812 134169, 100912 133764, 100035 133325, 99175 132851, 98330 132341, 97509 131799, 96511 131081, 95557 130305, 94630 129487, 93763 128624, 93095 127903, 92301 126976, 91553 125990, 90995 125184, 90462 124353, 89837 123282, 89183 121991, 88688 120848, 88332 119930, 88014 119000, 87734 118057, 87491 117104, 87287 116142, 87122 115173, 86995 114201, 86907 113218, 86858 112237, 86846 111014, 86907 109781, 86995 108798, 87122 107827, 87287 106858, 87491 105896, 87734 104943, 88014 104000, 88333 103069, 88688 102152, 89183 101009, 89837 99718, 90579 98445, 91420 97186, 92298 96027, 93095 95096, 93765 94376, 94645 93499, 95558 92695, 96509 91920, 97509 91201, 98330 90659, 99175 90148, 100035 89674, 100912 89235, 101812 88830, 102720 88463, 103646 88131, 104585 87837, 105533 87580, 106496 87361, 106496 87360, 107459 87180, 108431 87039, 109413 86936, 110395 86872, 111377 86847, 112612 86866))) \ No newline at end of file diff --git a/stress_benchmark/resources/054.settings b/stress_benchmark/resources/054.settings deleted file mode 100644 index 4903e9647f..0000000000 --- a/stress_benchmark/resources/054.settings +++ /dev/null @@ -1,633 +0,0 @@ -adaptive_layer_height_enabled=False -meshfix_fluid_motion_angle=15 -speed_wall_0=25.0 -machine_acceleration=4000 -bridge_sparse_infill_max_density=0 -support_line_width=0.4 -bottom_skin_preshrink=1.2000000000000002 -small_skin_on_surface=False -nozzle_disallowed_areas=[] -bridge_skin_material_flow_2=100 -machine_nozzle_heat_up_speed=2.0 -top_thickness=1.2 -coasting_speed=90 -nozzle_offsetting_for_disallowed_areas=True -top_bottom_extruder_nr=-1 -machine_buildplate_type=glass -ironing_pattern=zigzag -material_standby_temperature=120 -wipe_brush_pos_x=100 -extruder_prime_pos_abs=False -support_bottom_stair_step_min_slope=10.0 -machine_scale_fan_speed_zero_to_one=False -adaptive_layer_height_threshold=0.2 -machine_height=240.0 -support_interface_material_flow=98 -z_seam_relative=False -top_skin_expand_distance=1.2000000000000002 -machine_shape=rectangular -speed_travel_layer_0=75.0 -raft_surface_extruder_nr=0 -material_print_temperature_layer_0=235.0 -raft_jerk=8 -support_xy_distance=0.5 -bridge_skin_speed_2=10 -ooze_shield_angle=60 -machine_extruders_share_nozzle=False -min_feature_size=0.1 -bottom_skin_expand_distance=1.2000000000000002 -speed_prime_tower=35.0 -speed_support=30 -speed_roofing=14 -raft_fan_speed=0 -wall_transition_filter_distance=100 -magic_spiralize=False -support_skip_zag_per_mm=20 -infill_pattern=zigzag -extruders_enabled_count=1 -machine_heated_bed=True -gradual_support_infill_steps=0 -wall_line_width=0.4 -raft_surface_jerk=8 -print_bed_temperature=70 -support_bottom_material_flow=98 -bridge_skin_material_flow_3=110 -command_line_settings=0 -prime_tower_base_size=4.0 -material_print_temp_wait=True -cool_min_layer_time_fan_speed_max=10 -machine_max_acceleration_e=10000 -jerk_support_roof=8 -date=04-12-2023 -support_use_towers=True -minimum_support_area=0.0 -wall_x_material_flow_layer_0=100 -material_adhesion_tendency=10 -material_initial_print_temperature=225.0 -layer_0_z_overlap=0.15 -support_roof_enable=False -acceleration_wall_x_roofing=1800 -raft_base_margin=15 -raft_interface_margin=15 -raft_surface_margin=15 -support_tree_branch_diameter_angle=7 -prime_tower_base_height=0.2 -machine_nozzle_head_distance=3 -support_interface_skip_height=0.2 -support_bottom_pattern=concentric -bottom_thickness=1.2 -cool_fan_enabled=True -ironing_flow=10.0 -support_fan_enable=False -layer_start_y=0.0 -acceleration_support_interface=1800 -skin_material_flow=98 -default_material_bed_temperature=70 -support_xy_distance_overhang=0.2 -anti_overhang_mesh=False -infill_material_flow=98 -prime_tower_size=20 -machine_nozzle_id=unknown -small_feature_speed_factor_0=50 -travel_avoid_other_parts=True -_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 -brim_inside_margin=2.5 -speed_z_hop=10 -wall_thickness=1.2 -top_bottom_pattern_0=lines -resolution=0 -support_angle=60 -retraction_min_travel=1.5 -prime_blob_enable=False -wipe_retraction_extra_prime_amount=0 -wipe_retraction_enable=True -switch_extruder_retraction_amount=16 -machine_max_feedrate_e=299792458000 -wipe_retraction_amount=6 -machine_max_acceleration_y=9000 -optimize_wall_printing_order=True -retraction_hop_after_extruder_switch_height=0.075 -machine_feeder_wheel_diameter=10.0 -infill_overlap=15 -support_mesh_drop_down=True -small_feature_speed_factor=50 -skin_overlap_mm=0.02 -sub_div_rad_add=0.4 -roofing_line_width=0.4 -material_flow_layer_0=100 -support_roof_pattern=concentric -cool_fan_speed_min=40.0 -retraction_combing_max_distance=0 -conical_overhang_enabled=False -remove_empty_first_layers=True -cool_fan_speed=40.0 -raft_base_jerk=8 -min_infill_area=0 -meshfix_maximum_travel_resolution=0.8 -switch_extruder_retraction_speed=20 -machine_max_jerk_z=0.4 -raft_interface_speed=13.125 -speed_ironing=9.333333333333334 -gantry_height=0 -material_break_temperature=50 -machine_endstop_positive_direction_z=True -dual=0 -raft_interface_layers=1 -ooze_shield_dist=2 -support_line_distance=0 -infill_enable_travel_optimization=True -machine_nozzle_temp_enabled=True -machine_min_cool_heat_time_window=50.0 -jerk_skirt_brim=8 -support_roof_density=100 -support_bottom_line_width=0.4 -initial_layer_line_width_factor=140 -support_skip_some_zags=False -meshfix_maximum_deviation=0.025 -support_infill_sparse_thickness=0.2 -material_end_of_filament_purge_length=20 -raft_interface_acceleration=1800 -machine_steps_per_mm_z=50 -prime_tower_raft_base_line_spacing=1.6 -material_bed_temp_prepend=True -wipe_move_distance=20 -ironing_enabled=False -infill_support_angle=40 -support_interface_height=1 -wall_extruder_nr=-1 -mold_enabled=False -magic_fuzzy_skin_enabled=False -skirt_brim_speed=40 -raft_acceleration=1800 -bridge_fan_speed_3=0 -support_tree_angle_slow=40.0 -raft_speed=17.5 -support_tree_branch_reach_limit=30 -support_structure=tree -machine_max_jerk_xy=20.0 -roofing_material_flow=98 -acceleration_infill=1800 -machine_extruder_count=1 -support_roof_line_distance=0.4 -zig_zaggify_support=True -hole_xy_offset_max_diameter=0 -cool_fan_full_layer=3 -speed_print_layer_0=17.5 -alternate_carve_order=True -support_infill_extruder_nr=0 -wipe_retraction_prime_speed=25 -initial_bottom_layers=6 -material_brand=empty_brand -skin_monotonic=False -default_material_print_temperature=215 -meshfix_maximum_extrusion_area_deviation=50000 -roofing_layer_count=0 -minimum_roof_area=1.0 -bridge_wall_speed=12.5 -support_interface_density=100 -line_width=0.4 -acceleration_ironing=1800 -magic_fuzzy_skin_point_dist=0.8 -_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 -infill_randomize_start_location=False -wall_x_material_flow=98 -prime_tower_position_x=215.0 -speed_slowdown_layers=2 -bridge_wall_min_length=1.9 -wipe_pause=0 -lightning_infill_overhang_angle=40 -support_bottom_enable=True -magic_fuzzy_skin_thickness=0.3 -support_conical_enabled=True -machine_max_acceleration_z=100 -xy_offset_layer_0=0 -support_tree_limit_branch_reach=True -speed_wall_x_roofing=35.0 -speed_layer_0=17.5 -infill=0 -bridge_skin_speed_3=10 -machine_steps_per_mm_x=50 -lightning_infill_support_angle=40 -infill_line_distance=1.6 -jerk_layer_0=8 -minimum_interface_area=1.0 -wall_0_material_flow_layer_0=100 -support_wall_count=1 -raft_base_line_spacing=1.6 -support_supported_skin_fan_speed=100 -machine_firmware_retract=False -support_mesh=False -support=0 -machine_heated_build_volume=False -extruder_prime_pos_z=0 -support_bottom_line_distance=0.4 -support_enable=True -adhesion_extruder_nr=-1 -print_temperature=210 -raft_base_remove_inside_corners=False -raft_interface_remove_inside_corners=False -raft_surface_remove_inside_corners=False -wipe_retraction_retract_speed=25 -material_anti_ooze_retracted_position=-4 -layer_height=0.2 -material_shrinkage_percentage_xy=100.0 -wipe_hop_amount=0.075 -jerk_print_layer_0=8 -lightning_infill_prune_angle=40 -material_diameter=1.75 -bridge_enable_more_layers=True -raft_surface_line_spacing=0.4 -retraction_retract_speed=25 -brim_line_count=9 -raft_interface_extruder_nr=0 -interlocking_orientation=22.5 -interlocking_beam_width=0.8 -machine_extruders_shared_nozzle_initial_retraction=0 -jerk_ironing=8 -support_tree_tip_diameter=0.8 -bridge_skin_speed=10 -bridge_fan_speed=100 -support_xy_overrides_z=z_overrides_xy -machine_show_variants=False -meshfix_fluid_motion_enabled=True -blackmagic=0 -min_even_wall_line_width=0.34 -support_tree_max_diameter=25 -infill_mesh=False -adhesion_type=brim -min_odd_wall_line_width=0.34 -skirt_line_count=3 -support_tree_angle=60 -support_interface_priority=interface_area_overwrite_support_area -fill_outline_gaps=True -acceleration_wall_0=1800 -day=Mon -support_bottom_stair_step_width=5.0 -wipe_hop_enable=True -cool_min_temperature=235.0 -material_print_temp_prepend=True -infill_offset_y=0 -cool_fan_speed_max=100 -magic_mesh_surface_mode=normal -zig_zaggify_infill=False -support_interface_line_width=0.4 -bridge_wall_coast=100 -slicing_tolerance=middle -infill_wipe_dist=0.1 -support_bottom_height=1 -machine_depth=220.0 -acceleration_skirt_brim=1800 -skin_overlap=5 -material_break_speed=25 -machine_settings=0 -flow_rate_extrusion_offset_factor=100 -mesh_position_z=0 -quality_changes_name=empty -support_bottom_wall_count=0 -speed_support_roof=20.0 -z_seam_x=110.0 -material_bed_temp_wait=True -support_tower_roof_angle=65 -raft_interface_fan_speed=0 -material_bed_temperature=70 -coasting_volume=0.064 -interlocking_boundary_avoidance=2 -raft_smoothing=5 -machine_width=220.0 -raft_airgap=0.3 -mold_angle=40 -raft_base_extruder_nr=0 -z_seam_y=220.0 -wall_overhang_angle=90 -machine_steps_per_mm_e=1600 -gradual_support_infill_step_height=1 -cross_infill_pocket_size=1.6 -infill_sparse_thickness=0.2 -prime_tower_brim_enable=True -ironing_monotonic=False -small_skin_width=0.8 -support_join_distance=2.0 -material_type=empty -initial_extruder_nr=0 -connect_infill_polygons=False -acceleration_print_layer_0=1800 -center_object=False -skirt_height=3 -cool_fan_speed_0=0 -wall_line_count=3 -jerk_wall_0=8 -material_surface_energy=100 -material=0 -material_crystallinity=False -top_bottom_thickness=1.2 -material_guid=69386c85-5b6c-421a-bec5-aeb1fb33f060 -platform_adhesion=0 -bridge_skin_density=100 -infill_sparse_density=25 -support_bottom_stair_step_height=0 -machine_steps_per_mm_y=50 -acceleration_travel_layer_0=3000.0 -machine_max_acceleration_x=9000 -wall_transition_filter_deviation=0.1 -meshfix_keep_open_polygons=False -mold_width=5 -retraction_hop_only_when_collides=False -raft_base_thickness=0.24 -shell=0 -support_conical_min_width=5.0 -conical_overhang_angle=50 -draft_shield_height_limitation=full -skin_outline_count=1 -_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 -smooth_spiralized_contours=True -jerk_topbottom=8 -brim_gap=0 -acceleration_enabled=True -wall_material_flow=98 -acceleration_wall=1800 -draft_shield_dist=10 -raft_surface_acceleration=1800 -switch_extruder_retraction_speeds=20 -support_pattern=zigzag -infill_before_walls=True -inset_direction=inside_out -wall_x_material_flow_roofing=98 -speed_equalize_flow_width_factor=100.0 -material_flush_purge_length=60 -support_conical_angle=30 -jerk_prime_tower=8 -retraction_hop=0.075 -support_meshes_present=False -material_anti_ooze_retraction_speed=5 -raft_base_wall_count=1 -prime_tower_base_curve_magnitude=4 -support_roof_material_flow=98 -infill_mesh_order=0 -raft_surface_fan_speed=0 -material_id=empty_material -raft_surface_layers=2 -speed_support_bottom=20.0 -support_material_flow=98 -bridge_skin_support_threshold=50 -jerk_wall_0_roofing=8 -material_break_retracted_position=-50 -small_feature_max_length=0.0 -support_roof_extruder_nr=0 -interlocking_enable=False -interlocking_beam_layer_count=2 -travel_avoid_supports=False -min_skin_width_for_expansion=7.34788079488412e-17 -experimental=0 -skin_material_flow_layer_0=100 -material_bed_temperature_layer_0=70 -adaptive_layer_height_variation=0.1 -meshfix_union_all=True -travel=0 -bridge_skin_density_3=80 -support_connect_zigzags=True -support_top_distance=0.3 -support_bottom_distance=0 -wall_x_extruder_nr=-1 -support_bottom_extruder_nr=0 -support_tree_rest_preference=buildplate -cool_lift_head=False -raft_interface_line_width=0.8 -support_type=buildplate -support_zag_skip_count=0 -retraction_combing=noskin -raft_interface_line_spacing=1.0 -draft_shield_enabled=False -material_break_preparation_temperature=235.0 -material_alternate_walls=False -wall_0_wipe_dist=0.2 -switch_extruder_prime_speed=20 -speed_infill=35.0 -raft_surface_thickness=0.2 -machine_center_is_zero=False -roofing_monotonic=True -bottom_layers=6 -alternate_extra_perimeter=False -support_bottom_offset=0.0 -speed_wall_x=35.0 -infill_line_width=0.4 -wall_line_width_0=0.4 -support_extruder_nr_layer_0=0 -retraction_count_max=90 -jerk_infill=8 -skin_edge_support_layers=0 -ironing_line_spacing=0.1 -meshfix_fluid_motion_small_distance=0.01 -prime_tower_line_width=0.4 -material_print_temperature=235.0 -acceleration_prime_tower=1800 -travel_avoid_distance=0.625 -cool_min_speed=10 -wall_0_material_flow=98 -extruder_prime_pos_y=0 -jerk_print=8 -support_brim_enable=True -support_bottom_density=100 -brim_width=5 -ironing_only_highest_layer=False -wall_transition_length=0.4 -wall_distribution_count=1 -material_shrinkage_percentage=100.0 -brim_smart_ordering=True -machine_use_extruder_offset_to_offset_coords=True -support_interface_extruder_nr=0 -infill_support_enabled=False -bridge_skin_material_flow=60 -mold_roof_height=0.5 -machine_nozzle_tip_outer_diameter=1 -raft_base_acceleration=1800 -wall_line_width_x=0.4 -meshfix_union_all_remove_holes=False -cool_fan_full_at_height=0.5 -travel_retract_before_outer_wall=False -_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 -bridge_settings_enabled=False -jerk_enabled=True -speed_wall_0_roofing=25.0 -skin_preshrink=1.2000000000000002 -layer_height_0=0.2 -z_seam_position=back -support_interface_offset=0.0 -cool_min_layer_time=5 -bridge_wall_material_flow=50 -lightning_infill_straightening_angle=40 -speed_travel=150.0 -group_outer_walls=True -material_is_support_material=False -material_flow=98 -jerk_roofing=8 -jerk_travel_enabled=True -jerk_wall_x=8 -machine_always_write_active_tool=False -retraction_amount=6 -machine_minimum_feedrate=0.0 -acceleration_print=1800 -retraction_hop_after_extruder_switch=True -mesh_position_y=0 -machine_heat_zone_length=16 -switch_extruder_extra_prime_amount=0 -prime_tower_min_volume=6 -wipe_retraction_speed=25 -material_end_of_filament_purge_speed=0.5 -extruder_prime_pos_x=0 -acceleration_topbottom=1800 -material_maximum_park_duration=300 -wipe_repeat_count=5 -infill_extruder_nr=-1 -skin_no_small_gaps_heuristic=False -z_seam_type=sharpest_corner -conical_overhang_hole_size=0 -roofing_extruder_nr=-1 -minimum_polygon_circumference=1.0 -machine_extruders_share_heater=False -jerk_support_infill=8 -infill_offset_x=0 -jerk_wall=8 -machine_nozzle_cool_down_speed=2.0 -raft_surface_speed=17.5 -min_bead_width=0.34 -meshfix_extensive_stitching=False -mesh_position_x=0 -speed_wall=35.0 -quality_name=Normal -support_offset=0.0 -wall_overhang_speed_factor=100 -top_layers=6 -meshfix_fluid_motion_shift_distance=0.1 -machine_max_jerk_e=5.0 -raft_base_line_width=0.8 -machine_max_feedrate_y=299792458000 -meshfix=0 -ooze_shield_enabled=False -max_skin_angle_for_expansion=90 -raft_base_fan_speed=0 -magic_fuzzy_skin_point_density=1.25 -hole_xy_offset=0 -infill_wall_line_count=0 -speed_print=35.0 -machine_endstop_positive_direction_x=False -prime_tower_enable=False -wipe_hop_speed=10 -raft_interface_thickness=0.30000000000000004 -retraction_prime_speed=25 -acceleration_travel_enabled=True -brim_outside_only=False -relative_extrusion=False -magic_fuzzy_skin_outside_only=False -minimum_bottom_area=1.0 -raft_surface_line_width=0.4 -jerk_support_interface=8 -support_tree_bp_diameter=7.5 -support_interface_pattern=concentric -xy_offset=0 -support_roof_offset=0.0 -print_sequence=all_at_once -material_extrusion_cool_down_speed=0.7 -gradual_infill_step_height=1.5 -cutting_mesh=False -acceleration_layer_0=1800 -material_no_load_move_factor=0.940860215 -travel_speed=100 -z_seam_corner=z_seam_corner_inner -machine_max_feedrate_z=299792458000 -speed=0 -coasting_enable=True -retraction_enable=True -jerk_support_bottom=8 -max_extrusion_before_wipe=10 -top_bottom_pattern=lines -material_shrinkage_percentage_z=100.0 -top_bottom=0 -infill_multiplier=1 -machine_nozzle_size=0.4 -material_break_preparation_speed=2 -skin_line_width=0.4 -skirt_brim_extruder_nr=-1 -multiple_mesh_overlap=0.15 -machine_nozzle_expansion_angle=45 -gradual_infill_steps=0 -support_brim_width=1.6800000000000002 -support_tree_branch_diameter=5 -support_initial_layer_line_distance=0 -support_z_distance=0.15 -raft_base_speed=13.125 -jerk_travel_layer_0=10.0 -speed_support_interface=20.0 -support_tree_max_diameter_increase_by_merges_when_support_to_model=1 -clean_between_layers=False -ironing_inset=0.38 -material_flush_purge_speed=0.5 -acceleration_travel=3000 -support_roof_height=1 -wall_0_inset=0 -interlocking_depth=2 -prime_tower_position_y=195.0 -jerk_support=8 -roofing_pattern=lines -jerk_wall_x_roofing=8 -top_skin_preshrink=1.2000000000000002 -acceleration_wall_0_roofing=1800 -machine_max_feedrate_x=299792458000 -material_final_print_temperature=220.0 -acceleration_roofing=1800 -raft_interface_jerk=8 -retraction_speed=25 -prime_tower_flow=98 -acceleration_wall_x=1800 -infill_overlap_mm=0.06 -wall_0_material_flow_roofing=98 -brim_replaces_support=True -skirt_brim_minimal_length=250 -cooling=0 -speed_topbottom=14 -support_roof_wall_count=0 -skirt_gap=5 -support_extruder_nr=0 -machine_endstop_positive_direction_y=False -bridge_fan_speed_2=0 -retraction_extrusion_window=6 -skin_edge_support_thickness=0 -retraction_extra_prime_amount=0 -expand_skins_expand_distance=1.2000000000000002 -support_infill_rate=0 -meshfix_maximum_resolution=0.5 -support_tree_min_height_to_model=3 -min_wall_line_width=0.34 -acceleration_support_infill=1800 -material_break_preparation_retracted_position=-16 -support_interface_wall_count=0 -support_tree_top_rate=10 -jerk_travel=10 -retract_at_layer_change=False -support_roof_line_width=0.4 -machine_disallowed_areas=[] -coasting_min_volume=0.8 -wall_transition_angle=10 -support_tower_diameter=3.0 -carve_multiple_volumes=False -support_interface_enable=False -skirt_brim_line_width=0.4 -skirt_brim_material_flow=98 -draft_shield_height=10 -adaptive_layer_height_variation_step=0.01 -acceleration_support_roof=1800 -support_brim_line_count=3 -build_volume_temperature=0 -small_hole_max_size=0 -connect_skin_polygons=False -flow_rate_max_extrusion_offset=0 -_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False -speed_support_infill=30 -wall_0_extruder_nr=-1 -retraction_hop_enabled=True -prime_tower_wipe_enabled=True -acceleration_support_bottom=1800 -bridge_skin_density_2=75 -support_tower_maximum_supported_diameter=3.0 -acceleration_support=1800 -layer_start_x=0.0 -material_name=empty diff --git a/stress_benchmark/resources/054.wkt b/stress_benchmark/resources/054.wkt deleted file mode 100644 index 4c7c9843c2..0000000000 --- a/stress_benchmark/resources/054.wkt +++ /dev/null @@ -1 +0,0 @@ -MULTIPOLYGON () \ No newline at end of file diff --git a/stress_benchmark/resources/055.settings b/stress_benchmark/resources/055.settings index 6868231de8..1e35ccf641 100644 --- a/stress_benchmark/resources/055.settings +++ b/stress_benchmark/resources/055.settings @@ -73,7 +73,6 @@ raft_surface_margin=15 support_tree_branch_diameter_angle=7 prime_tower_base_height=0.2 machine_nozzle_head_distance=3 -support_interface_skip_height=0.2 support_bottom_pattern=concentric bottom_thickness=0.8 cool_fan_enabled=True @@ -300,6 +299,7 @@ mold_angle=40 raft_base_extruder_nr=0 z_seam_y=185.0 wall_overhang_angle=90 +seam_overhang_angle=30 machine_steps_per_mm_e=1600 gradual_support_infill_step_height=1 cross_infill_pocket_size=7.0 diff --git a/stress_benchmark/resources/055.wkt b/stress_benchmark/resources/055.wkt index 521eb670b4..090deda773 100644 --- a/stress_benchmark/resources/055.wkt +++ b/stress_benchmark/resources/055.wkt @@ -1 +1 @@ -MULTIPOLYGON (((1536 -3019, 1607 -2843, 1801 -2796, 2138 -2394, 2179 -2003, 2330 -1927, 2384 -1793, 2151 -1361, 1550 -1273, 1528 -1498, 1222 -1686, 1202 -1789, 1065 -1927, 1240 -2309, 1383 -2780, 1248 -3220, 1506 -3507)), ((-161 -2857, -136 -2927, -2 -2639, 123 -2650, 244 -2812, 365 -2732, 554 -2793, 686 -2662, 777 -2898, 612 -1891, 459 -1852, 355 -1932, 333 -2108, 270 -2093, 136 -2160, 113 -2072, -10 -2292, -74 -2211, -182 -2318, -293 -2784, -283 -2953)), ((851 -2133, 762 -2062, 1018 -2719)), ((1156 -4291, 1222 -4049, 1158 -3801, 1119 -3279, 967 -3206, 963 -3493, 719 -3539, 521 -3831, 271 -3964, 165 -4229, 332 -4224, 924 -4613, 1002 -4616))) \ No newline at end of file +MULTIPOLYGON (((1536 -3019, 1607 -2843, 1801 -2796, 2138 -2394, 2179 -2003, 2330 -1927, 2384 -1793, 2151 -1361, 1550 -1273, 1528 -1498, 1222 -1686, 1202 -1789, 1065 -1927, 1240 -2309, 1383 -2780, 1248 -3220, 1506 -3507, 1536 -3019)), ((-161 -2857, -136 -2927, -2 -2639, 123 -2650, 244 -2812, 365 -2732, 554 -2793, 686 -2662, 777 -2898, 612 -1891, 459 -1852, 355 -1932, 333 -2108, 270 -2093, 136 -2160, 113 -2072, -10 -2292, -74 -2211, -182 -2318, -293 -2784, -283 -2953, -161 -2857)), ((851 -2133, 762 -2062, 1018 -2719, 851 -2133)), ((1156 -4291, 1222 -4049, 1158 -3801, 1119 -3279, 967 -3206, 963 -3493, 719 -3539, 521 -3831, 271 -3964, 165 -4229, 332 -4224, 924 -4613, 1002 -4616, 1156 -4291))) \ No newline at end of file diff --git a/stress_benchmark/resources/056.settings b/stress_benchmark/resources/056.settings index 8973474b86..de8686097c 100644 --- a/stress_benchmark/resources/056.settings +++ b/stress_benchmark/resources/056.settings @@ -73,7 +73,6 @@ raft_surface_margin=15 support_tree_branch_diameter_angle=7 prime_tower_base_height=0.1 machine_nozzle_head_distance=3 -support_interface_skip_height=0.1 support_bottom_pattern=concentric bottom_thickness=0.8 cool_fan_enabled=True @@ -298,6 +297,7 @@ mold_angle=40 raft_base_extruder_nr=0 z_seam_y=255 wall_overhang_angle=90 +seam_overhang_angle=30 machine_steps_per_mm_e=1600 gradual_support_infill_step_height=1 cross_infill_pocket_size=5.333333333333333 diff --git a/stress_benchmark/resources/056.wkt b/stress_benchmark/resources/056.wkt index b3f5ea60ac..5d3d26d98b 100644 --- a/stress_benchmark/resources/056.wkt +++ b/stress_benchmark/resources/056.wkt @@ -1 +1 @@ -MULTIPOLYGON (((186009 58534, 186103 58577, 186419 59548, 186633 59803, 186788 59503, 187003 58586, 187107 58533, 188081 58531, 188150 58622, 188407 59325, 188561 59555, 188656 59485, 188805 59118, 188990 58549, 189156 58551, 189524 59270, 189721 59554, 189777 59536, 189865 59369, 190044 58565, 190155 58532, 191302 58532, 191764 59135, 191763 60033, 191419 60283, 191762 60538, 191764 61896, 191726 62023, 190842 62302, 190710 62425, 190810 62524, 191728 62843, 191764 62948, 191765 63973, 191369 64217, 191761 64515, 191761 64892, 191135 65609, 190943 65590, 190772 65345, 190745 65705, 189895 65890, 189760 65964, 189760 66085, 189849 66223, 190717 66765, 190770 66856, 190768 67640, 190640 67671, 189870 67693, 189695 67785, 189659 67868, 189872 68104, 190770 68800, 190770 69445, 190696 69546, 190076 69785, 189806 69972, 189803 70066, 190052 70238, 190717 70491, 190765 70563, 190770 70900, 190728 71011, 190384 71383, 190259 71502, 190054 71826, 190143 71886, 190698 71904, 190772 71970, 190770 72281, 191872 72282, 192228 72741, 192228 74042, 192186 74161, 191404 74298, 191253 74392, 191283 74493, 191531 74701, 192197 75058, 192228 75168, 192228 76245, 192179 76377, 191496 76431, 191114 76508, 190978 76592, 191022 76735, 191982 77262, 192199 77415, 192228 77532, 192211 77929, 191437 78378, 190904 78578, 189993 78581, 189703 78715, 189605 78897, 189845 79096, 190701 79358, 190768 79450, 190769 80538, 190720 80673, 190156 80957, 190073 81107, 190670 81435, 190773 81529, 190767 83988, 190677 84097, 189802 84433, 189581 84639, 189707 84806, 190395 85088, 190612 85161, 190773 85271, 190777 87386, 190749 87728, 190610 87811, 189910 88060, 189591 88220, 189512 88329, 189582 88450, 189930 88623, 190735 88885, 190772 89025, 190772 89427, 191536 89294, 192038 89185, 194076 88814, 195111 88487, 196049 88331, 196574 88443, 197192 88699, 197371 89009, 197571 89484, 197641 90786, 197708 91649, 197958 91647, 197915 91388, 197885 90860, 197904 90481, 198046 90076, 198370 89519, 198698 89382, 199169 89253, 200495 89323, 201737 89367, 202620 89362, 203493 89296, 204386 89305, 204929 89355, 205342 89589, 205413 89728, 205535 90506, 205473 91456, 205413 91936, 205354 92879, 205284 93685, 205302 94391, 205350 95013, 205397 96013, 205389 96558, 205324 97215, 205270 97912, 205352 98268, 205482 98927, 205489 99494, 205421 100067, 205247 100792, 204862 101314, 204465 101324, 203954 101298, 203404 101225, 202442 101011, 201838 101083, 201423 101092, 200988 101029, 200988 101411, 201479 101469, 202180 101380, 202774 101415, 203072 101541, 203204 101678, 203511 102419, 203632 103158, 203609 103579, 203449 104452, 203315 104655, 203241 105302, 203268 105460, 203264 106351, 203311 106643, 203342 107239, 203586 107407, 203779 107189, 203968 107186, 204181 107354, 204389 107162, 205325 107193, 205659 107186, 206043 107592, 205987 107823, 206041 107953, 206067 108676, 205741 108928, 206096 109183, 206111 109923, 205863 110136, 205903 110236, 206090 110385, 206084 110889, 205807 111055, 205697 111168, 206084 111408, 206093 111706, 205590 111946, 205842 112165, 206081 112297, 206076 112782, 205746 113069, 205233 113059, 205058 112859, 204838 113061, 204425 113058, 204250 112946, 204103 113073, 203504 113059, 203312 113377, 202696 113612, 202492 113650, 200988 113575, 200988 113886, 202011 114051, 202752 114073, 203350 114200, 203742 114406, 203951 114607, 204106 114893, 204133 115093, 203976 117137, 203934 117268, 203980 117787, 203859 118602, 203644 119593, 203568 120092, 203559 120465, 203321 121332, 203097 121571, 202407 121620, 201991 121567, 201435 121518, 200988 121517, 200988 121732, 201843 121720, 202409 121803, 202720 121951, 202846 122099, 203099 122560, 203217 123394, 203097 123982, 203132 125013, 203103 125357, 203137 125592, 203190 126187, 203065 127326, 203103 127550, 203128 128315, 203097 129090, 203231 130454, 203194 131231, 203108 132388, 203022 132638, 202758 132750, 201886 132859, 200988 132837, 200988 133341, 201680 133319, 201879 133349, 202182 133475, 202314 133616, 202621 134364, 202742 135108, 202719 135461, 202765 135393, 203443 135417, 203647 135616, 203854 135437, 204473 135448, 204752 135721, 204971 135451, 206040 135387, 206320 135600, 206296 135819, 205952 136183, 205887 136314, 206310 136424, 206321 137032, 205856 137287, 205945 137399, 206277 137585, 206248 138146, 205882 138408, 205894 138502, 206286 138757, 206306 139423, 206011 139669, 206290 139900, 206291 140194, 206168 140385, 206295 140553, 206320 140919, 206159 141241, 205666 141226, 205330 140792, 205103 141213, 204521 141217, 204356 141241, 204138 141067, 203939 141233, 203327 141210, 203198 141191, 202586 141161, 202665 142321, 202871 143391, 202905 144017, 202888 144416, 202746 144841, 202420 145427, 202092 145570, 201629 145704, 200988 145673, 200988 145762, 201298 145762, 201792 145875, 202074 146014, 202335 146350, 202409 146550, 202458 147001, 202383 147351, 202369 147898, 202305 148468, 202406 148771, 202465 149541, 202460 150545, 202382 151006, 202350 152558, 202042 153121, 201763 153269, 201336 153397, 200988 153374, 200988 153709, 201260 153778, 201925 154157, 202403 154616, 202434 154696, 202425 155078, 202285 155925, 202235 156620, 202243 157174, 202284 157824, 202154 159503, 201791 159956, 201692 159999, 200988 160048, 200988 160249, 201483 160356, 202264 160728, 202421 160848, 202569 161308, 202685 161819, 202786 163215, 202852 163753, 202958 163475, 203064 163449, 203384 163482, 203573 163628, 203756 163536, 204436 163557, 204605 163773, 204787 163577, 204969 163577, 205183 163741, 205307 163555, 205772 163499, 205932 163629, 206056 163905, 206038 164160, 205750 164411, 206030 164633, 206020 165305, 205850 165488, 206002 165684, 205996 166035, 205729 166285, 206009 166530, 206012 166652, 205853 166885, 206053 167076, 206061 167257, 205876 167487, 206085 167701, 206051 168661, 206060 168952, 205655 169339, 205430 169282, 205301 169334, 204566 169362, 204318 169053, 204071 169389, 203326 169406, 203118 169154, 203010 169218, 202873 169386, 202788 169385, 202846 169888, 202852 170566, 202735 171347, 202792 171740, 202716 172408, 202462 173363, 202288 173734, 201537 173961, 200988 174002, 200988 174161, 201622 174152, 202001 174313, 202134 174452, 202440 175201, 202560 175946, 202541 176356, 202378 177254, 202237 177508, 202171 178112, 202196 178271, 202198 178879, 202238 179433, 202300 180576, 202351 181082, 202481 183135, 202692 184239, 202725 184855, 202708 185255, 202564 185678, 202240 186263, 201489 186528, 200988 186521, 200988 186583, 201527 186575, 202098 186646, 202821 186818, 203344 187204, 203367 187516, 203311 188357, 203044 189623, 203114 190228, 203122 190644, 203061 191012, 203035 191652, 202994 191824, 203084 192565, 203052 193151, 202932 193456, 202798 193589, 202084 193897, 201375 194015, 200984 193996, 200130 193833, 199888 193694, 199312 193628, 199161 193653, 198300 193646, 198051 193693, 196964 193757, 196224 193823, 194516 193939, 193499 194144, 192891 194182, 192526 194168, 192106 194019, 191548 193697, 191323 193081, 191287 192877, 191362 191310, 191272 191503, 191153 191633, 190431 191797, 189879 191829, 189132 191681, 188722 191560, 188395 191608, 187908 191763, 187626 191810, 186317 191797, 185845 191649, 185125 191616, 184723 191639, 184602 191698, 184132 191644, 183698 191188, 183635 190602, 183532 191433, 183122 191817, 182845 191867, 181881 191819, 180926 191861, 180491 191906, 180123 191810, 179983 191719, 179833 191484, 179598 190820, 179529 189467, 179448 189467, 179484 190641, 179437 191517, 179350 191891, 179081 192574, 178837 192880, 178666 192969, 178248 193082, 177347 193150, 176632 193142, 175910 193204, 175139 193340, 174091 193314, 173577 193333, 173070 193301, 172927 193280, 172261 193234, 172118 193215, 171606 193262, 170899 193345, 170361 193275, 169411 193244, 169275 193280, 168702 193220, 168400 192928, 167914 192736, 167516 192938, 167177 192939, 167077 193032, 166402 192853, 166262 192833, 166119 192689, 165763 191802, 165618 191164, 165542 190424, 165565 189859, 165608 189467, 165469 189467, 165490 190349, 165342 191221, 165291 192180, 165117 192386, 165299 192562, 165329 193022, 165187 193194, 165338 193340, 165377 194112, 165299 194261, 165151 194412, 164628 194372, 164430 194185, 164303 194265, 164243 194358, 163855 194368, 163761 194324, 163629 194176, 163557 194249, 163436 194290, 163282 194280, 163231 194397, 162517 194409, 162239 193891, 162197 193910, 161894 194344, 161600 194304, 161382 194043, 161155 194295, 160548 194282, 160308 193936, 160004 194320, 159882 194329, 159670 194215, 159490 193962, 159507 193122, 159589 192946, 159518 192805, 159564 192163, 160030 191985, 160005 191867, 159550 191625, 159541 191485, 159390 191253, 159388 190940, 159251 191481, 159175 191619, 158869 191882, 158689 191954, 158277 192004, 157961 191930, 157463 191913, 156943 191850, 156708 191928, 155970 192009, 155056 192005, 154636 191927, 153224 191895, 152716 191588, 152580 191309, 152464 190881, 152505 190138, 152454 189467, 151856 189467, 151800 189903, 151887 190611, 151852 191205, 151734 191502, 151600 191637, 150895 191941, 150179 192063, 149787 192043, 148933 191881, 148692 191739, 148115 191674, 147965 191701, 147091 191698, 146851 191741, 146200 191776, 145025 191871, 143315 191987, 142286 192192, 141694 192228, 141329 192216, 140910 192066, 140352 191743, 140215 191413, 140088 190946, 140160 189467, 139600 189467, 139545 189892, 139631 190611, 139598 191205, 139478 191503, 139346 191637, 138643 191941, 137925 192063, 137532 192043, 136678 191881, 136436 191739, 135860 191674, 135707 191701, 135128 191702, 133512 191805, 132769 191872, 131061 191987, 130029 192192, 129149 192243, 128655 192068, 128098 191743, 127871 191129, 127828 190886, 127906 189467, 127452 189467, 127467 190692, 127117 191541, 126957 191741, 126818 191766, 126816 191838, 126300 192118, 126319 192162, 126754 192463, 126713 192759, 126450 192973, 126704 193201, 126690 193812, 126326 194046, 126734 194352, 126746 194518, 126673 194661, 126378 194870, 125505 194851, 125340 194769, 125205 194840, 124560 194799, 124384 194369, 124253 194377, 123997 194809, 123506 194830, 123226 194394, 123105 194309, 122887 194906, 122260 194894, 122029 194416, 121920 194492, 121673 194889, 121282 194913, 120962 194528, 120962 194326, 121258 194002, 120941 193816, 120908 193194, 121381 192928, 121334 192826, 120883 192591, 120882 191842, 119592 191859, 119259 191643, 119131 191646, 118826 191884, 118254 191800, 118050 191715, 117920 191557, 117753 191203, 117738 191021, 117941 190114, 117982 190000, 118106 189467, 117285 189467, 117210 190847, 117044 191697, 116845 192256, 116721 192491, 116442 192770, 116297 192813, 115562 192774, 115012 192489, 114457 192362, 113844 192312, 113770 192443, 113739 192392, 113657 192561, 112459 192625, 112065 192676, 111393 192669, 110723 192557, 110117 192398, 109659 192392, 109318 192450, 108552 192528, 107965 192525, 106725 192412, 105945 192271, 104956 191937, 104653 191740, 103842 191012, 103606 188967, 103728 188223, 103708 187477, 103669 187070, 103738 186219, 103817 185770, 104029 185144, 104344 184506, 104474 184340, 104941 184201, 105522 184091, 106859 184061, 107313 184012, 107837 184052, 108461 184148, 109188 184380, 109362 184406, 109506 184563, 109619 184583, 109736 184781, 109887 184690, 110394 184639, 110465 184583, 110530 184411, 111315 184317, 112212 184437, 113777 184321, 114351 184395, 114977 184534, 115372 184491, 116036 184612, 116975 184940, 117311 185135, 117414 185467, 117521 185984, 117526 186704, 117482 187171, 118132 187171, 118007 186608, 117834 186229, 117732 185838, 117714 185566, 117752 185266, 117985 184939, 118199 184749, 118618 184662, 121112 184640, 120931 184530, 120932 184324, 121180 184085, 121888 184103, 122167 184584, 122266 184549, 122509 184093, 123116 184072, 123321 184245, 123486 184086, 124602 184143, 124818 184329, 124997 184134, 125447 184108, 125619 184249, 125773 184089, 126563 184070, 126813 184310, 126789 184606, 127196 184739, 127298 184812, 127502 185096, 127553 185294, 127561 185908, 127589 186004, 127568 186634, 127525 186963, 127541 187171, 127916 187171, 127874 186620, 127884 185727, 127932 185185, 128166 184773, 128307 184700, 128906 184606, 129314 184591, 130035 184638, 130513 184701, 131457 184760, 132272 184831, 132968 184813, 134039 184728, 134243 184750, 134896 184710, 136338 184846, 136576 184835, 136847 184761, 137506 184633, 138073 184623, 138646 184694, 139375 184867, 139891 185251, 139914 185563, 139855 186428, 139699 187171, 140171 187171, 140130 186620, 140138 185728, 140188 185185, 140420 184773, 140563 184700, 141161 184606, 141570 184591, 142291 184638, 142768 184701, 143713 184760, 144527 184831, 145224 184813, 146294 184728, 146497 184750, 147232 184708, 148735 184861, 149102 184762, 149762 184633, 150329 184623, 150900 184694, 151627 184866, 152147 185252, 152170 185562, 152112 186419, 151955 187171, 152396 187171, 152418 186573, 152374 185991, 152433 185418, 152583 185031, 152744 184817, 152987 184643, 153168 184599, 155018 184548, 155167 184568, 155765 184489, 156365 184518, 157085 184600, 157137 184623, 157740 184644, 158079 184619, 158886 184759, 159122 184942, 159231 185585, 159220 185980, 159229 186505, 159257 186664, 159254 186172, 159327 185681, 159731 184969, 160183 184504, 160263 184473, 160645 184481, 161655 184647, 162187 184672, 162740 184663, 163389 184623, 165071 184753, 165523 185116, 165566 185214, 165622 185710, 165569 187171, 165710 187171, 165673 186674, 165771 186031, 166048 185270, 166189 184990, 166347 184810, 166733 184596, 167032 184512, 168041 184377, 169983 184399, 170501 184378, 171226 184402, 172272 184660, 172812 184680, 173529 184788, 173961 184874, 174917 184954, 174963 184911, 175724 184755, 177037 184746, 177741 184726, 178152 184763, 178664 184918, 178831 185046, 179016 185750, 179157 186501, 179259 187171, 179626 187171, 179614 186407, 179626 185902, 179645 185643, 179604 185280, 179631 185009, 179690 184856, 179866 184647, 180149 184527, 180618 184515, 181660 184623, 182078 184609, 182894 184462, 183078 184483, 183608 184762, 183652 185065, 183794 184874, 184152 184718, 184580 184655, 186086 184606, 187222 184733, 187911 184827, 187971 184863, 188682 185021, 188997 184982, 189071 185061, 189252 185065, 189462 184899, 189989 184685, 190593 184670, 190899 184784, 191050 184925, 191401 185432, 191464 185709, 191525 186297, 191563 186819, 191618 186725, 191760 186654, 192537 186530, 193488 186592, 193967 186653, 194910 186713, 195725 186783, 196422 186765, 197042 186715, 198008 186668, 198692 186688, 198692 186420, 197966 186428, 197119 186497, 196225 186489, 195681 186435, 195269 186190, 195159 185965, 195090 184987, 195137 184228, 195196 183726, 195256 182735, 195327 181888, 195308 181147, 195260 180494, 195213 179492, 195221 178873, 195286 178181, 195340 177452, 195259 177077, 195110 176288, 195122 175786, 195189 175188, 195366 174420, 195748 173880, 196147 173868, 196904 173911, 198168 174195, 198692 174130, 198692 173905, 197376 173904, 196522 173844, 195810 173609, 195591 173498, 195327 173231, 195283 173091, 195282 172359, 195541 171730, 195629 170956, 195620 170615, 195495 170547, 195543 170514, 195366 170433, 195323 169697, 195251 169131, 195142 169261, 194866 169289, 194695 169161, 194536 169311, 194052 169353, 193682 169145, 193732 168655, 194347 168354, 194457 168264, 194482 168147, 193726 167939, 193719 167327, 194478 167067, 194582 166958, 194477 166853, 193724 166560, 193699 166457, 193732 166135, 193884 165946, 193790 165764, 193814 165092, 194041 164921, 193828 164729, 193827 164535, 193970 164333, 193824 164237, 193754 163772, 193916 163575, 194153 163470, 194436 163479, 194686 163727, 194901 163484, 195200 163491, 195290 162724, 195547 161719, 195684 161460, 196333 160560, 197949 160262, 198375 160243, 198692 160283, 198692 159963, 198209 159922, 197550 159900, 196551 159925, 195620 159759, 195051 159418, 194967 158799, 194921 158031, 195015 156858, 194932 155252, 195013 154725, 195239 154169, 195481 153921, 195654 153825, 196174 153795, 196908 153829, 197381 153711, 197476 153725, 197994 153730, 198692 153700, 198692 153532, 197155 153444, 196446 153493, 195873 153432, 195486 153264, 195271 153088, 195098 152819, 195054 152623, 195003 150574, 195028 150438, 194937 149923, 194971 149106, 195099 147795, 195074 147208, 195212 146331, 195398 146071, 196041 145953, 196434 145964, 196959 145954, 197199 145907, 197721 145896, 198692 145906, 198692 145586, 197995 145603, 197297 145659, 196405 145650, 195862 145599, 195450 145354, 195377 145207, 195258 144390, 195318 143392, 195378 142888, 195437 141897, 195497 141176, 195302 140931, 195101 141193, 194738 141218, 194525 141015, 194300 141224, 193954 141219, 193535 140898, 193505 140837, 193510 140494, 193718 140348, 193743 140262, 193561 140045, 193665 139587, 194141 139406, 194300 139309, 193976 138925, 193978 138883, 193699 138680, 193627 138219, 194066 137917, 194012 137841, 193529 137636, 193528 137057, 194050 136730, 194033 136620, 193490 136411, 193453 135516, 193768 135338, 194390 135339, 194587 135545, 194630 135543, 194800 135335, 195119 135352, 195343 135737, 195273 135191, 195371 134350, 195545 133588, 195906 133044, 196241 133018, 197083 133076, 198350 133359, 198692 133317, 198692 132757, 198274 132755, 197264 132823, 196234 132722, 195893 132536, 195520 132165, 195379 131604, 195462 130427, 195554 129855, 195546 129451, 195589 128604, 195626 128183, 195556 127303, 195548 127072, 195341 125182, 195410 124360, 195426 123761, 195353 122846, 195526 122272, 195610 122107, 196288 121873, 197264 121673, 198692 121771, 198692 121342, 198211 121346, 197621 121312, 196836 121238, 196234 121040, 196046 120904, 195803 120540, 195746 120326, 195764 119750, 195856 119543, 195928 118997, 196053 118432, 195997 118170, 195987 117463, 196098 116368, 196253 115730, 196424 114363, 196806 113837, 197116 113722, 197580 113638, 198287 113763, 198692 113780, 198692 113569, 198187 113607, 197296 113599, 196752 113547, 196340 113307, 196221 112922, 196091 113040, 195612 113082, 195245 112866, 195293 112381, 196007 112033, 196042 111873, 195290 111667, 195282 111055, 196038 110794, 196143 110687, 196030 110579, 195284 110290, 195259 110190, 195294 109865, 195446 109675, 195353 109490, 195378 108826, 195607 108653, 195389 108453, 195389 108253, 195520 108059, 195393 107975, 195317 107508, 195490 107297, 195712 107199, 196008 107206, 196247 107446, 196338 107336, 196277 106308, 196412 104650, 196330 104277, 196200 103592, 196192 103000, 196261 102408, 196435 101647, 196820 101108, 196959 101074, 197981 101144, 198692 101300, 198692 100940, 198476 100767, 198171 100055, 198050 99346, 198069 98954, 198232 98099, 198373 97857, 198439 97282, 198412 97128, 198412 96550, 198372 96024, 198310 94935, 198259 94447, 198224 93943, 198034 93943, 198109 94648, 198119 95193, 197923 95631, 197786 95721, 197169 95885, 196748 95949, 195991 95989, 195482 95986, 194493 96041, 194143 96050, 193559 96082, 193015 96155, 192265 96298, 191715 96388, 191589 96389, 190913 96506, 189235 96568, 188870 96693, 188098 96930, 187286 96986, 186454 96937, 186163 96861, 185639 96576, 185589 96443, 185541 95407, 185674 94137, 185631 93943, 185236 93943, 185213 94534, 185260 95117, 185198 95690, 185031 96077, 184855 96291, 184584 96465, 184388 96507, 182341 96558, 182205 96532, 182065 96577, 181529 96619, 180871 96590, 180079 96508, 180021 96484, 179358 96464, 178977 96489, 178097 96347, 177816 96151, 177718 95523, 177729 95128, 177721 94603, 177672 94364, 177671 93943, 177386 93943, 177426 94488, 177418 95381, 177366 95923, 177123 96335, 176978 96408, 176354 96501, 175932 96515, 175179 96467, 174680 96407, 173700 96348, 172854 96277, 172128 96295, 171481 96345, 170928 96371, 170805 96358, 170041 96397, 169190 96319, 168962 96280, 168377 96273, 168094 96346, 167411 96475, 166818 96483, 166225 96414, 165466 96240, 164927 95855, 164907 95627, 164626 96131, 164171 96602, 164093 96635, 163709 96625, 162692 96458, 162168 96436, 161613 96444, 160963 96485, 159280 96352, 158831 95992, 158786 95893, 158732 95398, 158785 93943, 158457 93943, 158384 94887, 158198 95746, 157774 96601, 157645 96766, 157183 96904, 156601 97016, 155261 97047, 154807 97095, 154283 97055, 153659 96958, 152933 96726, 152758 96700, 152614 96545, 152501 96525, 152384 96327, 152233 96416, 151726 96469, 151654 96524, 151590 96697, 150813 96790, 149907 96671, 148594 96768, 147915 96739, 147141 96572, 146748 96615, 146084 96495, 145145 96167, 144809 95973, 144706 95641, 144599 95124, 144594 94402, 144636 93943, 143991 93943, 144114 94498, 144288 94875, 144388 95269, 144406 95542, 144368 95842, 144136 96169, 143921 96358, 143502 96446, 142795 96445, 141078 96470, 140262 96441, 139868 96362, 139641 96058, 139177 96034, 139026 95956, 138875 95756, 138625 95679, 138295 95650, 138189 95760, 137772 95961, 137361 95899, 137290 95977, 136623 96270, 136481 96413, 135590 96547, 135060 96427, 134822 96296, 134620 96011, 134567 95814, 134559 95198, 134531 95103, 134550 94474, 134579 93943, 134204 93943, 134246 94488, 134236 95379, 134188 95923, 133954 96335, 133813 96408, 133029 96528, 132226 96480, 131607 96407, 130663 96348, 129848 96277, 129152 96295, 128530 96345, 127997 96371, 127877 96358, 127133 96398, 126326 96319, 125631 96263, 125274 96346, 124614 96475, 124045 96483, 123474 96414, 122747 96241, 122229 95856, 122206 95544, 122261 94708, 122418 93943, 121948 93943, 121990 94488, 121982 95380, 121932 95923, 121698 96335, 121557 96408, 120959 96500, 120552 96515, 119829 96467, 119352 96407, 118407 96348, 117593 96277, 116559 96304, 116418 97075, 116435 97645, 116490 97821, 116593 98337, 116374 98685, 115787 98830, 114742 98766, 114205 98874, 113858 98890, 113782 98928, 112692 99213, 112039 99270, 111075 98988, 110627 98937, 109469 98970, 109006 98954, 108322 99024, 107549 98907, 107220 98918, 106989 98779, 106917 98677, 106857 98290, 106900 98049, 106839 97608, 106862 97363, 106672 96862, 106610 96473, 106649 95613, 106799 94863, 107516 94863, 107516 94843, 110504 93831, 110504 90791, 107516 89779, 107514 89759, 106996 89759, 106905 89137, 106989 88349, 106965 86995, 106932 86653, 106978 86135, 107045 85982, 107225 85840, 107387 85792, 107903 85826, 108351 85902, 108865 85864, 109463 85838, 109847 85777, 110404 85841, 110628 85900, 111055 85903, 111439 85961, 111939 85956, 112041 85944, 112619 86022, 113261 85938, 113682 85812, 114532 85725, 114692 85763, 115249 85772, 115804 85853, 116325 85975, 116583 86243, 116620 86358, 116498 86984, 116525 87767, 116625 89267, 118799 89122, 119818 88916, 120426 88880, 120791 88892, 121210 89040, 121768 89365, 121905 89694, 122032 90158, 121958 91647, 122520 91649, 122574 91201, 122488 90495, 122522 89903, 122641 89604, 122774 89471, 123487 89163, 124195 89045, 124590 89064, 125442 89227, 125637 89360, 126260 89434, 126413 89407, 126992 89406, 128608 89303, 129349 89236, 131051 89122, 132089 88916, 132682 88880, 133046 88892, 133466 89040, 134024 89365, 134249 89979, 134285 90183, 134214 91647, 134670 91647, 134650 90418, 135007 89559, 135163 89367, 135665 89272, 136355 89268, 136879 89295, 138316 89531, 139834 89428, 140017 89471, 140127 89547, 140300 89391, 140960 89270, 142527 89247, 142861 89465, 142988 89461, 143293 89224, 143868 89308, 144069 89393, 144167 89493, 144367 89904, 144381 90085, 144179 90994, 144138 91107, 144012 91647, 144836 91647, 144907 90275, 145076 89410, 145274 88849, 145401 88617, 145678 88336, 145823 88295, 146555 88332, 147108 88619, 147847 88787, 148276 88793, 148349 88662, 148379 88713, 148472 88523, 148758 88530, 149662 88481, 150055 88432, 150720 88437, 151397 88551, 151755 88670, 152461 88716, 152802 88656, 153569 88580, 154158 88583, 155396 88695, 156178 88838, 157138 89151, 157413 89333, 158177 90001, 158283 90137, 158460 91648, 158885 91649, 158861 90753, 159021 89837, 159371 89252, 160098 89152, 160990 89141, 161778 89203, 162386 89199, 163350 89116, 164064 89216, 164616 89440, 164866 89682, 164962 89853, 164991 90375, 164959 91072, 165066 91648, 165232 91648, 165289 91198, 165197 90496, 165234 89901, 165358 89603, 165497 89471, 166236 89164, 166975 89043, 167391 89065, 168271 89227, 168475 89361, 169121 89434, 169280 89407, 170170 89411, 170430 89367, 171562 89303, 172068 89252, 174119 89121, 175163 88916, 175800 88880, 176180 88892, 176616 89040, 177196 89365, 177431 89979, 177468 90173, 177395 91649, 177573 91647, 177534 91006, 177529 90264, 177644 89769, 177780 89487, 178115 89227, 178317 89152, 178768 89104, 179116 89178, 179664 89194, 180233 89258, 180534 89159, 181306 89096, 182308 89102, 182947 89185, 184330 89213, 184886 89519, 185035 89799, 185163 90227, 185118 90970, 185173 91647, 185385 91648, 185292 91219, 185260 90625, 185350 90314, 185446 90188, 186175 89778, 187007 89542, 188105 89593, 187391 89296, 187344 89186, 187349 88221, 187423 88145, 187973 87974, 188225 87843, 188255 87715, 187952 87495, 187346 87197, 187342 86379, 187377 86244, 188145 86052, 188295 85903, 188074 85677, 187423 85308, 187352 85204, 187380 85077, 188062 84739, 188109 84631, 188024 84520, 187347 84195, 187342 83376, 187398 83219, 188273 82918, 188590 82691, 188501 82564, 188317 82445, 187402 82126, 187345 82020, 187346 81783, 187612 81295, 187558 81201, 187342 81086, 187637 80670, 187344 80374, 187344 79711, 187381 79586, 188126 79251, 188279 79077, 188115 78915, 187396 78581, 186709 78581, 186017 78285, 186057 78063, 186895 77771, 187123 77584, 187174 77478, 187065 77372, 186816 77295, 186115 77199, 186051 77157, 186018 77060, 186018 76474, 186054 76357, 186855 76144, 187045 75984, 187038 75932, 186857 75775, 186052 75465, 186020 75303, 186049 75224, 186494 74890, 186758 74528, 186756 74426, 186638 74367, 186060 74345, 186018 74234, 186018 73269, 186085 73131, 186316 72941, 186533 72646, 187619 72281, 187848 72281, 188292 71788, 188325 71658, 188121 71590, 187376 71662, 187343 71568, 187342 69585, 187409 69513, 188060 69189, 188116 69063, 187943 68921, 187344 68628, 187347 67493, 187905 67152, 187928 67075, 187892 67001, 187349 66658, 187363 66228, 187807 65763, 187826 65681, 187678 65609, 187192 65579, 186981 64640, 186807 64313, 186641 64466, 186269 65556, 186188 65604, 185498 65610, 185075 65230, 184931 65121, 184697 64431, 184691 64299, 184622 64190, 184585 63964, 184616 63905, 185283 63597, 185446 63479, 185418 63397, 185324 63321, 184865 63172, 184715 63614, 184618 63761, 183706 63754, 183458 62918, 183316 62828, 183208 62978, 182905 63647, 182809 63755, 182127 63756, 182036 63725, 181916 63172, 181815 62867, 181731 62816, 181560 62997, 181226 63680, 181111 63753, 181023 63734, 180715 63013, 180571 63009, 180228 63753, 179578 63759, 179421 63708, 179164 62881, 179004 62549, 178908 62527, 178710 62870, 178458 63721, 178156 63755, 178104 63725, 178002 64266, 177827 64760, 177632 65082, 177253 65177, 176297 65175, 176220 65073, 175987 64339, 175838 64237, 175672 64470, 175474 65101, 175393 65175, 174513 65177, 174426 65132, 174254 64415, 174115 64213, 173901 64361, 173502 65148, 173065 65159, 172481 64586, 172481 64494, 172069 63760, 171627 63759, 171543 63723, 171268 63031, 171155 62856, 171087 62868, 170969 63065, 170774 63579, 170667 63754, 170453 63759, 170330 63702, 169715 62979, 169528 62809, 169402 62771, 169346 62999, 169413 63728, 169288 63758, 167573 63758, 167279 63063, 167175 62987, 167040 63139, 166786 63755, 165815 63753, 165467 63152, 165370 63213, 165060 63755, 164719 63750, 164373 63376, 164225 63266, 164081 63719, 163970 63755, 163970 64828, 163529 65167, 162124 65169, 162036 65098, 161932 64458, 161858 64200, 161783 64145, 161724 64154, 161484 64427, 161147 65135, 161043 65167, 159928 65167, 159801 65127, 159749 64370, 159668 64003, 159560 63881, 159394 64099, 158898 64951, 158746 65137, 158642 65168, 158314 65151, 157859 64417, 157706 64005, 157682 63759, 157505 63755, 157429 63575, 157294 62815, 157207 62727, 157142 62740, 156980 62896, 156514 63760, 155769 63755, 155729 62812, 155619 62650, 155337 62910, 155220 63109, 154893 63611, 154740 63755, 154227 63755, 154132 63670, 153872 62916, 153713 62778, 153569 62986, 153308 63712, 153213 63759, 152932 63744, 152519 63324, 152171 63050, 152110 63105, 152105 63669, 152052 63754, 151282 63758, 151177 63697, 150908 62845, 150777 62548, 150669 62485, 150564 62584, 150426 62890, 150169 63711, 150056 63759, 149032 63757, 148962 63602, 148818 63021, 148816 64726, 148533 65096, 148436 65165, 148346 65131, 148181 64545, 147982 64159, 147812 64046, 147711 64145, 147488 64922, 147351 65148, 146892 65166, 146808 65130, 146573 64210, 146404 63959, 146223 64124, 145854 65142, 145757 65176, 144978 65175, 144852 65129, 144672 64471, 144676 65218, 144590 65256, 144530 65092, 144531 64469, 144610 64383, 144668 64458, 144509 64089, 144407 64026, 144242 64199, 143946 65143, 143841 65175, 143479 65159, 143394 64827, 143330 64774, 143017 64848, 142931 64832, 142664 64329, 142518 63759, 141687 63759, 141571 63725, 141231 62782, 141098 62574, 141015 62595, 140896 62764, 140684 63379, 140619 63605, 140525 63749, 138412 63758, 138329 63609, 138025 62648, 137882 62511, 137790 62545, 137645 62838, 137400 63685, 137320 63754, 136629 63759, 136533 63707, 136300 63177, 136188 63092, 136075 63215, 135822 63755, 135174 63749, 135170 63715, 134853 63953, 135296 64214, 135302 64762, 134531 65610, 133867 65609, 133780 65559, 133461 64595, 133274 64326, 133138 64507, 132872 65572, 132765 65609, 131867 65608, 131755 65565, 131453 64757, 131310 64588, 131183 64732, 130960 65413, 130867 65600, 130726 65594, 130281 64721, 130132 64594, 129981 64910, 129840 65611, 128581 65608, 128122 65010, 128128 64103, 128446 63878, 128360 63752, 128127 63605, 128120 62240, 128150 62134, 128965 61870, 129180 61706, 128946 61557, 128250 61335, 128127 61260, 128122 60163, 128376 60033, 128513 59913, 128139 59652, 128124 59251, 128756 58531, 128958 58563, 129302 59103, 129521 59330, 129615 59193, 129742 58533, 130441 58532, 130793 59299, 130912 59421, 131042 59222, 131248 58532, 132686 58532, 132937 59607, 133019 59767, 133120 59826, 133298 59496, 133615 58580, 133689 58538, 134386 58532, 134963 59042, 135111 59448, 135200 59839, 135263 59952, 135289 60219, 134587 60541, 134414 60695, 134454 60764, 135118 61000, 135143 60329, 136062 60327, 136187 60370, 136431 61117, 136539 61302, 136637 61350, 136688 61299, 137022 60423, 137107 60330, 138012 60329, 138240 61100, 138351 61256, 138498 61120, 138818 60415, 138909 60329, 139582 60328, 139673 60357, 139834 61065, 139943 61271, 140112 61168, 140505 60387, 140606 60329, 140691 60358, 140989 61074, 141110 61074, 141186 60981, 141454 60333, 142204 60329, 142302 60399, 142518 61119, 142518 60428, 142625 59871, 142799 59376, 142991 59073, 143379 58965, 144331 58968, 144404 59052, 144564 59610, 144660 59810, 144766 59903, 144848 59847, 144960 59659, 145137 59067, 145250 58967, 146187 58968, 146379 59781, 146514 59924, 146674 59831, 147118 58998, 147207 58967, 147586 59003, 148149 59554, 148138 59626, 148630 60534, 148829 60327, 150073 60326, 150186 60357, 150409 60988, 150531 61207, 150637 61217, 150790 60910, 150974 60415, 151058 60333, 151353 60352, 152088 61224, 152304 61327, 152361 61063, 152312 60382, 152363 60328, 154084 60327, 154164 60403, 154424 61003, 154517 61094, 154593 61073, 154701 60878, 154907 60364, 154986 60329, 155929 60328, 156228 60905, 156324 60908, 156618 60357, 156991 60333, 157388 60763, 157521 60810, 157633 60329, 157670 60329, 157672 59626, 157953 58961, 158198 58991, 158327 59413, 158522 59900, 158749 60157, 158845 60063, 158924 59866, 158998 59238, 159091 58961, 159808 58963, 159891 58999, 160128 59888, 160271 60070, 160344 60044, 160483 59876, 160804 58990, 161016 58983, 161390 59545, 161639 59752, 161796 59800, 161863 59692, 161894 59183, 161963 58966, 162949 58961, 163079 59010, 163293 59245, 163592 59425, 163899 60327, 164228 60346, 164274 60428, 164399 61217, 164482 61346, 164614 61321, 164792 61088, 165031 60599, 165213 60331, 165839 60327, 165943 60376, 165978 61233, 166061 61414, 166198 61378, 166442 61062, 166890 60375, 167052 60327, 167479 60329, 167566 60394, 167809 61065, 167955 61318, 168109 61192, 168395 60388, 168460 60336, 168754 60333, 168840 60372, 169350 60926, 169517 61023, 169593 61026, 169607 60421, 169663 60327, 170400 60327, 170532 60367, 170773 61170, 170928 61529, 171023 61606, 171112 61547, 171283 61222, 171517 60433, 171571 60353, 171810 60327, 171810 59418, 172117 59026, 172249 58977, 172295 59047, 172465 59654, 172671 60005, 172810 60095, 172921 59983, 173131 59269, 173257 59005, 173342 58967, 173813 58996, 173950 59549, 173947 58971, 173982 58832, 174140 58664, 174237 58643, 174393 58782, 174451 58908, 174453 59603, 174386 59686, 174015 59691, 173970 59630, 174100 60038, 174210 60171, 174352 60087, 174504 59755, 174774 59003, 174869 58967, 175655 58967, 175771 59007, 176022 59891, 176187 60115, 176270 60085, 176400 59866, 176683 59000, 176784 58967, 177149 58982, 177228 59310, 177295 59370, 177606 59295, 177701 59312, 177947 59763, 178123 60329, 180015 60327, 180142 60364, 180526 61420, 180678 61504, 180873 61186, 180929 60996, 181145 60360, 181246 60327, 183300 60327, 183381 60471, 183617 61246, 183769 61541, 183872 61567, 184016 61415, 184319 60384, 184409 60329, 184878 60327, 185037 60201, 184584 59944, 184585 59364, 185353 58529) (134522 62416, 134259 62575, 134363 62683, 135128 62931, 135122 62204)), ((97620 189481, 98105 189484, 98402 189880, 98682 189506, 99133 189521, 99353 189904, 99488 190052, 99540 190011, 99773 189535, 100163 189528, 100376 189655, 100554 189537, 100854 189538, 101149 189934, 101106 190665, 100816 190880, 100783 191000, 101119 191255, 101128 191724, 100890 191986, 101148 192215, 101177 192747, 100878 192978, 100918 193081, 101189 193251, 101183 193525, 100895 193807, 101076 193895, 101193 194005, 101173 194469, 100968 194762, 100526 194774, 100347 194705, 100248 194778, 99908 194791, 99743 194631, 99590 194728, 99023 194731, 98879 194546, 98826 194535, 98614 194743, 98399 194740, 98200 194532, 98025 194721, 97550 194724, 97310 194305, 97216 194327, 97017 194752, 96489 194711, 96408 194766, 96068 194771, 95847 194601, 95895 194054, 96197 193802, 95917 193543, 95921 192959, 96176 192732, 95913 192503, 95878 191901, 96343 191670, 96544 191528, 96451 191422, 95828 191193, 95845 190514, 95972 190369, 95841 190222, 95820 189796, 96005 189459, 96540 189443, 96614 189520, 96819 189420)), ((78409 85926, 79170 86070, 79497 86153, 80092 86140, 81112 86055, 81408 86248, 81455 86364, 81440 86451, 81496 87114, 81472 87500, 81531 88107, 81737 89051, 81809 89759, 81022 89759, 81016 89779, 78028 90791, 78028 93831, 81016 94843, 81016 94863, 81683 94863, 81614 95675, 81585 95794, 81573 96378, 81457 96934, 81447 98258, 81249 98659, 81186 98704, 80655 98710, 80286 98680, 79616 98706, 78875 98832, 78365 98932, 77941 98931, 77158 98992, 76469 98945, 75813 98846, 75016 98889, 74483 98879, 73245 98829, 73005 98883, 72366 98914, 72116 98854, 71862 98708, 71548 98227, 71547 97582, 71531 97460, 71556 96933, 71502 96426, 71115 96245, 70719 95676, 70656 95399, 70594 94811, 70559 94281, 70502 94382, 70127 94505, 69356 94563, 68633 94514, 68154 94455, 67210 94395, 66395 94324, 65698 94343, 65077 94393, 64546 94417, 64426 94404, 63828 94441, 63828 94704, 65001 94611, 65894 94619, 66438 94671, 66851 94917, 66923 95063, 67015 95694, 67032 96121, 66984 96879, 66922 97382, 66864 98372, 66793 99226, 66810 99959, 66860 100613, 66886 101171, 66873 101296, 66912 102082, 66777 103497, 66790 103747, 66862 104031, 66990 104724, 66999 105320, 66931 105920, 66756 106678, 66397 107222, 65975 107239, 65229 107198, 63952 106913, 63828 106930, 63828 107202, 65003 107205, 65421 107250, 66003 107388, 66529 107610, 66793 107875, 66838 108017, 66838 108749, 66581 109372, 66491 110150, 66500 110492, 66623 110561, 66578 110592, 66754 110676, 66766 111034, 66848 111859, 66913 112251, 66938 112906, 66866 113597, 66750 114211, 66766 114668, 66834 115005, 66941 115766, 66966 116355, 66920 117598, 66830 118384, 66573 119389, 66437 119646, 65789 120547, 64171 120846, 63828 120866, 63828 121182, 64570 121206, 65557 121183, 66482 121339, 67070 121691, 67172 122504, 67180 123310, 67105 124249, 67188 125855, 67109 126383, 66881 126935, 66639 127186, 66410 127291, 65946 127311, 65214 127278, 64740 127396, 64584 127373, 63828 127384, 63828 127596, 64953 127663, 65674 127611, 66247 127675, 66636 127842, 66850 128018, 67020 128289, 67065 128485, 67117 130532, 67090 130669, 67183 131180, 67149 132000, 67019 133313, 67045 133906, 66906 134776, 66707 135057, 66080 135154, 65685 135144, 65159 135152, 64921 135201, 64400 135210, 63828 135205, 63828 135528, 64823 135447, 65714 135455, 66258 135509, 66670 135753, 66741 135901, 66835 136530, 66850 136957, 66801 137715, 66742 138218, 66682 139209, 66612 140065, 66630 140797, 66680 141450, 66727 142454, 66717 143071, 66598 144492, 66680 144867, 66810 145560, 66818 146156, 66749 146756, 66574 147524, 66190 148064, 65793 148076, 65048 148033, 63828 147763, 63828 148354, 64846 148282, 65886 148386, 66227 148571, 66600 148941, 66741 149503, 66659 150678, 66566 151253, 66574 151657, 66530 152523, 66491 152921, 66564 153804, 66572 154036, 66780 155918, 66709 156746, 66694 157347, 66766 158262, 66594 158836, 66510 159000, 65827 159237, 64859 159434, 63828 159367, 63828 159763, 64500 159794, 65282 159870, 65940 160107, 66075 160203, 66317 160566, 66374 160782, 66356 161358, 66264 161565, 66193 162108, 66067 162676, 66124 162935, 66133 163645, 66021 164751, 65868 165378, 65696 166745, 65314 167269, 65004 167386, 64540 167468, 63828 167351, 63828 167498, 64825 167507, 65368 167559, 65780 167801, 65851 167947, 65975 168760, 65913 169745, 65852 170243, 65792 171225, 65722 172074, 65740 172798, 65790 173444, 65837 174436, 65829 175051, 65762 175737, 65708 176458, 65790 176829, 65920 177516, 65927 178106, 65859 178700, 65687 179455, 65300 179996, 64903 180008, 64396 179979, 63828 179894, 63828 180752, 63951 181065, 64070 181762, 64049 182155, 63887 183009, 63828 183107, 63828 186367, 63898 187171, 64087 187171, 64012 186459, 64000 185913, 64198 185475, 64334 185387, 65141 185172, 66129 185117, 66638 185121, 67627 185065, 67975 185058, 68561 185026, 69210 184934, 70322 184721, 70531 184719, 71300 184588, 72154 184568, 72885 184539, 73248 184415, 73921 184205, 74512 184128, 75115 184127, 75896 184214, 76472 184508, 76531 184665, 76579 185701, 76446 186971, 76490 187171, 76884 187171, 76907 186573, 76860 185991, 76922 185418, 77089 185031, 77265 184817, 77534 184643, 77733 184599, 79779 184548, 79916 184575, 79751 184409, 79719 183942, 79862 183773, 79712 183631, 79641 182911, 79781 182649, 79886 182543, 80410 182579, 80604 182780, 80731 182700, 80797 182598, 81172 182589, 81253 182627, 81438 182837, 81745 182857, 81884 182552, 82527 182548, 82818 183085, 83147 182613, 83446 182658, 83659 182931, 83882 182664, 84497 182677, 84728 183040, 85037 182633, 85197 182621, 85351 182706, 85552 182991, 85537 183849, 85453 184020, 85527 184159, 85479 184804, 85023 184978, 85044 185098, 85494 185343, 85520 185859, 85080 186139, 85022 186267, 85614 185978, 86147 185818, 86504 185650, 87571 185333, 87811 185231, 88526 185006, 89376 184753, 89521 184697, 90341 184668, 90755 185169, 90909 185452, 90957 185831, 90938 185994, 90889 186719, 92208 186868, 92617 186870, 93313 187086, 93999 187255, 94482 187551, 94566 187654, 94659 188455, 94578 188929, 94498 189074, 94364 189636, 94259 189949, 94127 190785, 93999 191189, 93775 191601, 93496 192440, 93348 193272, 93063 194083, 92471 194350, 92092 194380, 91740 194349, 90117 193952, 89801 193817, 89237 193115, 89186 192958, 89256 192555, 89484 191957, 89675 191634, 89664 191472, 89702 191349, 89583 190912, 89505 190282, 89554 189909, 89713 189637, 89620 189575, 87632 190309, 86893 190596, 85591 190918, 85143 190836, 84986 190998, 85592 191209, 85581 191841, 85098 192074, 85170 192179, 85580 192435, 85597 192858, 85236 193135, 85015 193144, 84697 192828, 84653 192836, 84474 193164, 83877 193198, 83616 192727, 83515 192771, 83276 193224, 82525 193224, 82244 192838, 81983 193215, 81591 193208, 81274 192657, 81190 192630, 80928 193206, 80609 193200, 80386 192873, 80302 192903, 80132 193181, 79931 193181, 79681 192916, 79700 192232, 80092 192008, 79824 192007, 79346 191927, 77793 191895, 77234 191589, 77086 191309, 76957 190881, 77003 190138, 76948 189467, 76737 189467, 76828 189889, 76860 190483, 76770 190792, 76675 190920, 75985 191316, 75215 191538, 74804 191564, 73892 191506, 73625 191397, 73018 191401, 72862 191444, 72257 191516, 71699 191622, 70584 191813, 70082 191923, 69033 192109, 67955 192318, 67008 192618, 66383 192727, 65985 192757, 65545 192663, 64928 192407, 64558 191651, 64479 190321, 64409 189467, 64165 189467, 64216 189856, 64216 190627, 64074 191032, 63750 191589, 63134 191814, 62864 191857, 61625 191784, 60383 191738, 59522 191739, 58711 191812, 57734 191803, 57190 191752, 56778 191519, 56707 191379, 56585 190602, 56647 189650, 56707 189171, 56766 188228, 56836 187428, 56824 186816, 56770 186095, 56723 185124, 56731 184549, 56850 183196, 56768 182840, 56638 182181, 56630 181610, 56701 181041, 56873 180311, 57258 179793, 57655 179782, 58400 179823, 59678 180095, 60282 180023, 60697 180015, 61066 180076, 61534 180092, 61534 179713, 60853 179677, 60690 179633, 59940 179727, 59353 179693, 59048 179567, 58916 179430, 58607 178683, 58490 177950, 58509 177541, 58672 176654, 58811 176403, 58877 175805, 58852 175648, 58855 174756, 58810 174492, 58748 173363, 58697 172857, 58583 171073, 58508 170507, 58359 169747, 58323 169125, 58337 168746, 58486 168310, 58808 167731, 59424 167494, 59678 167449, 60933 167526, 61534 167546, 61534 167275, 60995 167203, 60148 167060, 59645 167025, 59368 167031, 58770 166908, 58378 166699, 58168 166501, 58016 166215, 57987 166013, 58144 163971, 58184 163838, 58140 163320, 58261 162506, 58470 161557, 58552 161016, 58564 160630, 58802 159775, 59023 159533, 59714 159486, 60129 159541, 60684 159589, 60939 159566, 61534 159619, 61534 159353, 60816 159387, 60273 159387, 59712 159305, 59398 159157, 59274 159009, 59024 158554, 58903 157715, 59024 157120, 58988 156095, 59018 155910, 58930 154895, 59055 153781, 59017 153558, 58992 152791, 59022 152017, 58887 150654, 58926 149876, 59016 148670, 59097 148470, 59362 148358, 60224 148247, 61534 148282, 61534 147717, 60830 147793, 60243 147759, 59938 147631, 59826 147521, 59498 146745, 59380 145998, 59399 145588, 59562 144690, 59701 144437, 59769 143831, 59742 143674, 59745 142757, 59702 142508, 59638 141369, 59587 140857, 59456 138788, 59249 137719, 59214 137022, 59232 136688, 59375 136266, 59698 135681, 60026 135538, 60509 135397, 61534 135460, 61534 135339, 60821 135344, 60328 135230, 60046 135093, 59785 134757, 59711 134558, 59662 134107, 59737 133757, 59753 133210, 59815 132640, 59714 132329, 59655 131567, 59659 130565, 59744 129926, 59770 128548, 60078 127987, 60358 127838, 60784 127711, 61534 127765, 61534 127417, 60882 127344, 60189 126945, 59717 126492, 59686 126412, 59695 126030, 59835 125181, 59885 124488, 59877 123933, 59836 123283, 59966 121605, 60329 121151, 60923 121053, 61534 121071, 61534 120901, 61028 120842, 60450 120663, 59856 120380, 59698 120259, 59551 119800, 59435 119286, 59333 117890, 59268 117442, 59280 116916, 59339 116286, 59514 115550, 59532 115374, 59666 115223, 59676 115108, 59854 114979, 59764 114835, 59694 114330, 59639 114263, 59480 114207, 59357 113432, 59422 112581, 59276 111218, 59269 110541, 59386 109760, 59328 109367, 59405 108699, 59659 107743, 59833 107369, 60696 107111, 61534 107115, 61534 106891, 61009 106957, 60421 106921, 60119 106795, 59988 106654, 59682 105910, 59558 105162, 59580 104746, 59742 103854, 59882 103600, 59949 102995, 59922 102835, 59923 102228, 59882 101672, 59818 100531, 59769 100038, 59638 97970, 59431 96889, 59395 96252, 59413 95852, 59555 95429, 59880 94845, 60208 94700, 60678 94564, 61534 94615, 61534 94455, 60841 94560, 60024 94462, 59293 94285, 58776 93903, 58765 93506, 58807 92750, 59076 91483, 59006 90879, 58998 90463, 59059 90095, 59103 89094, 59035 88543, 59070 87947, 59188 87650, 59323 87517, 60036 87212, 60745 87091, 61155 87114, 61990 87275, 62233 87414, 62808 87480, 62959 87455, 63820 87462, 64071 87413, 65155 87351, 65897 87283, 67591 87169, 68629 86962, 69229 86926, 69594 86937, 70014 87087, 70570 87411, 70797 88027, 70842 88280, 70765 89537, 70759 89796, 70849 89600, 70969 89472, 71569 89337, 71620 87736, 71621 87050, 71597 86595, 71763 86063, 71875 86010, 72281 85959, 74150 85927, 74579 85971, 74724 85942, 75288 85962, 75774 86015, 76166 86001, 76666 86013, 77070 85953, 77967 85908)), ((97565 183305, 97783 183586, 98019 183365, 98383 183398, 98687 183854, 98762 183779, 98917 183418, 99111 183376, 99632 183344, 99840 183568, 100035 183318, 100423 183323, 100645 183614, 100749 183543, 100886 183313, 101216 183316, 101412 183511, 101561 183347, 101962 183323, 102135 183644, 102134 183878, 101898 184189, 102150 184354, 102115 185209, 101766 185374, 101759 185412, 102097 185630, 102025 186362, 101532 186586, 101478 186687, 102022 186970, 102029 187730, 101781 187942, 102064 188166, 102079 188449, 101910 188701, 101546 188667, 101205 188688, 100982 188608, 100849 188680, 100301 188659, 100065 188337, 99827 188624, 99292 188617, 99064 188253, 98985 188269, 98814 188644, 98141 188606, 97904 188183, 97849 188218, 97629 188610, 97023 188605, 96807 188236, 96812 188090, 96779 187572, 97059 187339, 96817 187134, 96820 186700, 97034 186492, 97035 186435, 96801 186228, 96826 185834, 97160 185582, 96805 185407, 96786 184618, 97216 184403, 97287 184311, 96761 184068, 96751 183577, 96933 183342, 97111 183268)), ((57963 141999, 58423 142303, 58842 142721, 58945 142922, 59033 143496, 59083 143635, 59023 143742, 58896 143787, 58445 144036, 57673 144116, 57126 144116, 56714 143978, 56568 143771, 56514 143408, 56673 142711, 57110 142098, 57350 141976)), ((186677 76038, 185935 76030, 186676 75992))) \ No newline at end of file +MULTIPOLYGON (((186009 58534, 186103 58577, 186419 59548, 186633 59803, 186788 59503, 187003 58586, 187107 58533, 188081 58531, 188150 58622, 188407 59325, 188561 59555, 188656 59485, 188805 59118, 188990 58549, 189156 58551, 189524 59270, 189721 59554, 189777 59536, 189865 59369, 190044 58565, 190155 58532, 191302 58532, 191764 59135, 191763 60033, 191419 60283, 191762 60538, 191764 61896, 191726 62023, 190842 62302, 190710 62425, 190810 62524, 191728 62843, 191764 62948, 191765 63973, 191369 64217, 191761 64515, 191761 64892, 191135 65609, 190943 65590, 190772 65345, 190745 65705, 189895 65890, 189760 65964, 189760 66085, 189849 66223, 190717 66765, 190770 66856, 190768 67640, 190640 67671, 189870 67693, 189695 67785, 189659 67868, 189872 68104, 190770 68800, 190770 69445, 190696 69546, 190076 69785, 189806 69972, 189803 70066, 190052 70238, 190717 70491, 190765 70563, 190770 70900, 190728 71011, 190384 71383, 190259 71502, 190054 71826, 190143 71886, 190698 71904, 190772 71970, 190770 72281, 191872 72282, 192228 72741, 192228 74042, 192186 74161, 191404 74298, 191253 74392, 191283 74493, 191531 74701, 192197 75058, 192228 75168, 192228 76245, 192179 76377, 191496 76431, 191114 76508, 190978 76592, 191022 76735, 191982 77262, 192199 77415, 192228 77532, 192211 77929, 191437 78378, 190904 78578, 189993 78581, 189703 78715, 189605 78897, 189845 79096, 190701 79358, 190768 79450, 190769 80538, 190720 80673, 190156 80957, 190073 81107, 190670 81435, 190773 81529, 190767 83988, 190677 84097, 189802 84433, 189581 84639, 189707 84806, 190395 85088, 190612 85161, 190773 85271, 190777 87386, 190749 87728, 190610 87811, 189910 88060, 189591 88220, 189512 88329, 189582 88450, 189930 88623, 190735 88885, 190772 89025, 190772 89427, 191536 89294, 192038 89185, 194076 88814, 195111 88487, 196049 88331, 196574 88443, 197192 88699, 197371 89009, 197571 89484, 197641 90786, 197708 91649, 197958 91647, 197915 91388, 197885 90860, 197904 90481, 198046 90076, 198370 89519, 198698 89382, 199169 89253, 200495 89323, 201737 89367, 202620 89362, 203493 89296, 204386 89305, 204929 89355, 205342 89589, 205413 89728, 205535 90506, 205473 91456, 205413 91936, 205354 92879, 205284 93685, 205302 94391, 205350 95013, 205397 96013, 205389 96558, 205324 97215, 205270 97912, 205352 98268, 205482 98927, 205489 99494, 205421 100067, 205247 100792, 204862 101314, 204465 101324, 203954 101298, 203404 101225, 202442 101011, 201838 101083, 201423 101092, 200988 101029, 200988 101411, 201479 101469, 202180 101380, 202774 101415, 203072 101541, 203204 101678, 203511 102419, 203632 103158, 203609 103579, 203449 104452, 203315 104655, 203241 105302, 203268 105460, 203264 106351, 203311 106643, 203342 107239, 203586 107407, 203779 107189, 203968 107186, 204181 107354, 204389 107162, 205325 107193, 205659 107186, 206043 107592, 205987 107823, 206041 107953, 206067 108676, 205741 108928, 206096 109183, 206111 109923, 205863 110136, 205903 110236, 206090 110385, 206084 110889, 205807 111055, 205697 111168, 206084 111408, 206093 111706, 205590 111946, 205842 112165, 206081 112297, 206076 112782, 205746 113069, 205233 113059, 205058 112859, 204838 113061, 204425 113058, 204250 112946, 204103 113073, 203504 113059, 203312 113377, 202696 113612, 202492 113650, 200988 113575, 200988 113886, 202011 114051, 202752 114073, 203350 114200, 203742 114406, 203951 114607, 204106 114893, 204133 115093, 203976 117137, 203934 117268, 203980 117787, 203859 118602, 203644 119593, 203568 120092, 203559 120465, 203321 121332, 203097 121571, 202407 121620, 201991 121567, 201435 121518, 200988 121517, 200988 121732, 201843 121720, 202409 121803, 202720 121951, 202846 122099, 203099 122560, 203217 123394, 203097 123982, 203132 125013, 203103 125357, 203137 125592, 203190 126187, 203065 127326, 203103 127550, 203128 128315, 203097 129090, 203231 130454, 203194 131231, 203108 132388, 203022 132638, 202758 132750, 201886 132859, 200988 132837, 200988 133341, 201680 133319, 201879 133349, 202182 133475, 202314 133616, 202621 134364, 202742 135108, 202719 135461, 202765 135393, 203443 135417, 203647 135616, 203854 135437, 204473 135448, 204752 135721, 204971 135451, 206040 135387, 206320 135600, 206296 135819, 205952 136183, 205887 136314, 206310 136424, 206321 137032, 205856 137287, 205945 137399, 206277 137585, 206248 138146, 205882 138408, 205894 138502, 206286 138757, 206306 139423, 206011 139669, 206290 139900, 206291 140194, 206168 140385, 206295 140553, 206320 140919, 206159 141241, 205666 141226, 205330 140792, 205103 141213, 204521 141217, 204356 141241, 204138 141067, 203939 141233, 203327 141210, 203198 141191, 202586 141161, 202665 142321, 202871 143391, 202905 144017, 202888 144416, 202746 144841, 202420 145427, 202092 145570, 201629 145704, 200988 145673, 200988 145762, 201298 145762, 201792 145875, 202074 146014, 202335 146350, 202409 146550, 202458 147001, 202383 147351, 202369 147898, 202305 148468, 202406 148771, 202465 149541, 202460 150545, 202382 151006, 202350 152558, 202042 153121, 201763 153269, 201336 153397, 200988 153374, 200988 153709, 201260 153778, 201925 154157, 202403 154616, 202434 154696, 202425 155078, 202285 155925, 202235 156620, 202243 157174, 202284 157824, 202154 159503, 201791 159956, 201692 159999, 200988 160048, 200988 160249, 201483 160356, 202264 160728, 202421 160848, 202569 161308, 202685 161819, 202786 163215, 202852 163753, 202958 163475, 203064 163449, 203384 163482, 203573 163628, 203756 163536, 204436 163557, 204605 163773, 204787 163577, 204969 163577, 205183 163741, 205307 163555, 205772 163499, 205932 163629, 206056 163905, 206038 164160, 205750 164411, 206030 164633, 206020 165305, 205850 165488, 206002 165684, 205996 166035, 205729 166285, 206009 166530, 206012 166652, 205853 166885, 206053 167076, 206061 167257, 205876 167487, 206085 167701, 206051 168661, 206060 168952, 205655 169339, 205430 169282, 205301 169334, 204566 169362, 204318 169053, 204071 169389, 203326 169406, 203118 169154, 203010 169218, 202873 169386, 202788 169385, 202846 169888, 202852 170566, 202735 171347, 202792 171740, 202716 172408, 202462 173363, 202288 173734, 201537 173961, 200988 174002, 200988 174161, 201622 174152, 202001 174313, 202134 174452, 202440 175201, 202560 175946, 202541 176356, 202378 177254, 202237 177508, 202171 178112, 202196 178271, 202198 178879, 202238 179433, 202300 180576, 202351 181082, 202481 183135, 202692 184239, 202725 184855, 202708 185255, 202564 185678, 202240 186263, 201489 186528, 200988 186521, 200988 186583, 201527 186575, 202098 186646, 202821 186818, 203344 187204, 203367 187516, 203311 188357, 203044 189623, 203114 190228, 203122 190644, 203061 191012, 203035 191652, 202994 191824, 203084 192565, 203052 193151, 202932 193456, 202798 193589, 202084 193897, 201375 194015, 200984 193996, 200130 193833, 199888 193694, 199312 193628, 199161 193653, 198300 193646, 198051 193693, 196964 193757, 196224 193823, 194516 193939, 193499 194144, 192891 194182, 192526 194168, 192106 194019, 191548 193697, 191323 193081, 191287 192877, 191362 191310, 191272 191503, 191153 191633, 190431 191797, 189879 191829, 189132 191681, 188722 191560, 188395 191608, 187908 191763, 187626 191810, 186317 191797, 185845 191649, 185125 191616, 184723 191639, 184602 191698, 184132 191644, 183698 191188, 183635 190602, 183532 191433, 183122 191817, 182845 191867, 181881 191819, 180926 191861, 180491 191906, 180123 191810, 179983 191719, 179833 191484, 179598 190820, 179529 189467, 179448 189467, 179484 190641, 179437 191517, 179350 191891, 179081 192574, 178837 192880, 178666 192969, 178248 193082, 177347 193150, 176632 193142, 175910 193204, 175139 193340, 174091 193314, 173577 193333, 173070 193301, 172927 193280, 172261 193234, 172118 193215, 171606 193262, 170899 193345, 170361 193275, 169411 193244, 169275 193280, 168702 193220, 168400 192928, 167914 192736, 167516 192938, 167177 192939, 167077 193032, 166402 192853, 166262 192833, 166119 192689, 165763 191802, 165618 191164, 165542 190424, 165565 189859, 165608 189467, 165469 189467, 165490 190349, 165342 191221, 165291 192180, 165117 192386, 165299 192562, 165329 193022, 165187 193194, 165338 193340, 165377 194112, 165299 194261, 165151 194412, 164628 194372, 164430 194185, 164303 194265, 164243 194358, 163855 194368, 163761 194324, 163629 194176, 163557 194249, 163436 194290, 163282 194280, 163231 194397, 162517 194409, 162239 193891, 162197 193910, 161894 194344, 161600 194304, 161382 194043, 161155 194295, 160548 194282, 160308 193936, 160004 194320, 159882 194329, 159670 194215, 159490 193962, 159507 193122, 159589 192946, 159518 192805, 159564 192163, 160030 191985, 160005 191867, 159550 191625, 159541 191485, 159390 191253, 159388 190940, 159251 191481, 159175 191619, 158869 191882, 158689 191954, 158277 192004, 157961 191930, 157463 191913, 156943 191850, 156708 191928, 155970 192009, 155056 192005, 154636 191927, 153224 191895, 152716 191588, 152580 191309, 152464 190881, 152505 190138, 152454 189467, 151856 189467, 151800 189903, 151887 190611, 151852 191205, 151734 191502, 151600 191637, 150895 191941, 150179 192063, 149787 192043, 148933 191881, 148692 191739, 148115 191674, 147965 191701, 147091 191698, 146851 191741, 146200 191776, 145025 191871, 143315 191987, 142286 192192, 141694 192228, 141329 192216, 140910 192066, 140352 191743, 140215 191413, 140088 190946, 140160 189467, 139600 189467, 139545 189892, 139631 190611, 139598 191205, 139478 191503, 139346 191637, 138643 191941, 137925 192063, 137532 192043, 136678 191881, 136436 191739, 135860 191674, 135707 191701, 135128 191702, 133512 191805, 132769 191872, 131061 191987, 130029 192192, 129149 192243, 128655 192068, 128098 191743, 127871 191129, 127828 190886, 127906 189467, 127452 189467, 127467 190692, 127117 191541, 126957 191741, 126818 191766, 126816 191838, 126300 192118, 126319 192162, 126754 192463, 126713 192759, 126450 192973, 126704 193201, 126690 193812, 126326 194046, 126734 194352, 126746 194518, 126673 194661, 126378 194870, 125505 194851, 125340 194769, 125205 194840, 124560 194799, 124384 194369, 124253 194377, 123997 194809, 123506 194830, 123226 194394, 123105 194309, 122887 194906, 122260 194894, 122029 194416, 121920 194492, 121673 194889, 121282 194913, 120962 194528, 120962 194326, 121258 194002, 120941 193816, 120908 193194, 121381 192928, 121334 192826, 120883 192591, 120882 191842, 119592 191859, 119259 191643, 119131 191646, 118826 191884, 118254 191800, 118050 191715, 117920 191557, 117753 191203, 117738 191021, 117941 190114, 117982 190000, 118106 189467, 117285 189467, 117210 190847, 117044 191697, 116845 192256, 116721 192491, 116442 192770, 116297 192813, 115562 192774, 115012 192489, 114457 192362, 113844 192312, 113770 192443, 113739 192392, 113657 192561, 112459 192625, 112065 192676, 111393 192669, 110723 192557, 110117 192398, 109659 192392, 109318 192450, 108552 192528, 107965 192525, 106725 192412, 105945 192271, 104956 191937, 104653 191740, 103842 191012, 103606 188967, 103728 188223, 103708 187477, 103669 187070, 103738 186219, 103817 185770, 104029 185144, 104344 184506, 104474 184340, 104941 184201, 105522 184091, 106859 184061, 107313 184012, 107837 184052, 108461 184148, 109188 184380, 109362 184406, 109506 184563, 109619 184583, 109736 184781, 109887 184690, 110394 184639, 110465 184583, 110530 184411, 111315 184317, 112212 184437, 113777 184321, 114351 184395, 114977 184534, 115372 184491, 116036 184612, 116975 184940, 117311 185135, 117414 185467, 117521 185984, 117526 186704, 117482 187171, 118132 187171, 118007 186608, 117834 186229, 117732 185838, 117714 185566, 117752 185266, 117985 184939, 118199 184749, 118618 184662, 121112 184640, 120931 184530, 120932 184324, 121180 184085, 121888 184103, 122167 184584, 122266 184549, 122509 184093, 123116 184072, 123321 184245, 123486 184086, 124602 184143, 124818 184329, 124997 184134, 125447 184108, 125619 184249, 125773 184089, 126563 184070, 126813 184310, 126789 184606, 127196 184739, 127298 184812, 127502 185096, 127553 185294, 127561 185908, 127589 186004, 127568 186634, 127525 186963, 127541 187171, 127916 187171, 127874 186620, 127884 185727, 127932 185185, 128166 184773, 128307 184700, 128906 184606, 129314 184591, 130035 184638, 130513 184701, 131457 184760, 132272 184831, 132968 184813, 134039 184728, 134243 184750, 134896 184710, 136338 184846, 136576 184835, 136847 184761, 137506 184633, 138073 184623, 138646 184694, 139375 184867, 139891 185251, 139914 185563, 139855 186428, 139699 187171, 140171 187171, 140130 186620, 140138 185728, 140188 185185, 140420 184773, 140563 184700, 141161 184606, 141570 184591, 142291 184638, 142768 184701, 143713 184760, 144527 184831, 145224 184813, 146294 184728, 146497 184750, 147232 184708, 148735 184861, 149102 184762, 149762 184633, 150329 184623, 150900 184694, 151627 184866, 152147 185252, 152170 185562, 152112 186419, 151955 187171, 152396 187171, 152418 186573, 152374 185991, 152433 185418, 152583 185031, 152744 184817, 152987 184643, 153168 184599, 155018 184548, 155167 184568, 155765 184489, 156365 184518, 157085 184600, 157137 184623, 157740 184644, 158079 184619, 158886 184759, 159122 184942, 159231 185585, 159220 185980, 159229 186505, 159257 186664, 159254 186172, 159327 185681, 159731 184969, 160183 184504, 160263 184473, 160645 184481, 161655 184647, 162187 184672, 162740 184663, 163389 184623, 165071 184753, 165523 185116, 165566 185214, 165622 185710, 165569 187171, 165710 187171, 165673 186674, 165771 186031, 166048 185270, 166189 184990, 166347 184810, 166733 184596, 167032 184512, 168041 184377, 169983 184399, 170501 184378, 171226 184402, 172272 184660, 172812 184680, 173529 184788, 173961 184874, 174917 184954, 174963 184911, 175724 184755, 177037 184746, 177741 184726, 178152 184763, 178664 184918, 178831 185046, 179016 185750, 179157 186501, 179259 187171, 179626 187171, 179614 186407, 179626 185902, 179645 185643, 179604 185280, 179631 185009, 179690 184856, 179866 184647, 180149 184527, 180618 184515, 181660 184623, 182078 184609, 182894 184462, 183078 184483, 183608 184762, 183652 185065, 183794 184874, 184152 184718, 184580 184655, 186086 184606, 187222 184733, 187911 184827, 187971 184863, 188682 185021, 188997 184982, 189071 185061, 189252 185065, 189462 184899, 189989 184685, 190593 184670, 190899 184784, 191050 184925, 191401 185432, 191464 185709, 191525 186297, 191563 186819, 191618 186725, 191760 186654, 192537 186530, 193488 186592, 193967 186653, 194910 186713, 195725 186783, 196422 186765, 197042 186715, 198008 186668, 198692 186688, 198692 186420, 197966 186428, 197119 186497, 196225 186489, 195681 186435, 195269 186190, 195159 185965, 195090 184987, 195137 184228, 195196 183726, 195256 182735, 195327 181888, 195308 181147, 195260 180494, 195213 179492, 195221 178873, 195286 178181, 195340 177452, 195259 177077, 195110 176288, 195122 175786, 195189 175188, 195366 174420, 195748 173880, 196147 173868, 196904 173911, 198168 174195, 198692 174130, 198692 173905, 197376 173904, 196522 173844, 195810 173609, 195591 173498, 195327 173231, 195283 173091, 195282 172359, 195541 171730, 195629 170956, 195620 170615, 195495 170547, 195543 170514, 195366 170433, 195323 169697, 195251 169131, 195142 169261, 194866 169289, 194695 169161, 194536 169311, 194052 169353, 193682 169145, 193732 168655, 194347 168354, 194457 168264, 194482 168147, 193726 167939, 193719 167327, 194478 167067, 194582 166958, 194477 166853, 193724 166560, 193699 166457, 193732 166135, 193884 165946, 193790 165764, 193814 165092, 194041 164921, 193828 164729, 193827 164535, 193970 164333, 193824 164237, 193754 163772, 193916 163575, 194153 163470, 194436 163479, 194686 163727, 194901 163484, 195200 163491, 195290 162724, 195547 161719, 195684 161460, 196333 160560, 197949 160262, 198375 160243, 198692 160283, 198692 159963, 198209 159922, 197550 159900, 196551 159925, 195620 159759, 195051 159418, 194967 158799, 194921 158031, 195015 156858, 194932 155252, 195013 154725, 195239 154169, 195481 153921, 195654 153825, 196174 153795, 196908 153829, 197381 153711, 197476 153725, 197994 153730, 198692 153700, 198692 153532, 197155 153444, 196446 153493, 195873 153432, 195486 153264, 195271 153088, 195098 152819, 195054 152623, 195003 150574, 195028 150438, 194937 149923, 194971 149106, 195099 147795, 195074 147208, 195212 146331, 195398 146071, 196041 145953, 196434 145964, 196959 145954, 197199 145907, 197721 145896, 198692 145906, 198692 145586, 197995 145603, 197297 145659, 196405 145650, 195862 145599, 195450 145354, 195377 145207, 195258 144390, 195318 143392, 195378 142888, 195437 141897, 195497 141176, 195302 140931, 195101 141193, 194738 141218, 194525 141015, 194300 141224, 193954 141219, 193535 140898, 193505 140837, 193510 140494, 193718 140348, 193743 140262, 193561 140045, 193665 139587, 194141 139406, 194300 139309, 193976 138925, 193978 138883, 193699 138680, 193627 138219, 194066 137917, 194012 137841, 193529 137636, 193528 137057, 194050 136730, 194033 136620, 193490 136411, 193453 135516, 193768 135338, 194390 135339, 194587 135545, 194630 135543, 194800 135335, 195119 135352, 195343 135737, 195273 135191, 195371 134350, 195545 133588, 195906 133044, 196241 133018, 197083 133076, 198350 133359, 198692 133317, 198692 132757, 198274 132755, 197264 132823, 196234 132722, 195893 132536, 195520 132165, 195379 131604, 195462 130427, 195554 129855, 195546 129451, 195589 128604, 195626 128183, 195556 127303, 195548 127072, 195341 125182, 195410 124360, 195426 123761, 195353 122846, 195526 122272, 195610 122107, 196288 121873, 197264 121673, 198692 121771, 198692 121342, 198211 121346, 197621 121312, 196836 121238, 196234 121040, 196046 120904, 195803 120540, 195746 120326, 195764 119750, 195856 119543, 195928 118997, 196053 118432, 195997 118170, 195987 117463, 196098 116368, 196253 115730, 196424 114363, 196806 113837, 197116 113722, 197580 113638, 198287 113763, 198692 113780, 198692 113569, 198187 113607, 197296 113599, 196752 113547, 196340 113307, 196221 112922, 196091 113040, 195612 113082, 195245 112866, 195293 112381, 196007 112033, 196042 111873, 195290 111667, 195282 111055, 196038 110794, 196143 110687, 196030 110579, 195284 110290, 195259 110190, 195294 109865, 195446 109675, 195353 109490, 195378 108826, 195607 108653, 195389 108453, 195389 108253, 195520 108059, 195393 107975, 195317 107508, 195490 107297, 195712 107199, 196008 107206, 196247 107446, 196338 107336, 196277 106308, 196412 104650, 196330 104277, 196200 103592, 196192 103000, 196261 102408, 196435 101647, 196820 101108, 196959 101074, 197981 101144, 198692 101300, 198692 100940, 198476 100767, 198171 100055, 198050 99346, 198069 98954, 198232 98099, 198373 97857, 198439 97282, 198412 97128, 198412 96550, 198372 96024, 198310 94935, 198259 94447, 198224 93943, 198034 93943, 198109 94648, 198119 95193, 197923 95631, 197786 95721, 197169 95885, 196748 95949, 195991 95989, 195482 95986, 194493 96041, 194143 96050, 193559 96082, 193015 96155, 192265 96298, 191715 96388, 191589 96389, 190913 96506, 189235 96568, 188870 96693, 188098 96930, 187286 96986, 186454 96937, 186163 96861, 185639 96576, 185589 96443, 185541 95407, 185674 94137, 185631 93943, 185236 93943, 185213 94534, 185260 95117, 185198 95690, 185031 96077, 184855 96291, 184584 96465, 184388 96507, 182341 96558, 182205 96532, 182065 96577, 181529 96619, 180871 96590, 180079 96508, 180021 96484, 179358 96464, 178977 96489, 178097 96347, 177816 96151, 177718 95523, 177729 95128, 177721 94603, 177672 94364, 177671 93943, 177386 93943, 177426 94488, 177418 95381, 177366 95923, 177123 96335, 176978 96408, 176354 96501, 175932 96515, 175179 96467, 174680 96407, 173700 96348, 172854 96277, 172128 96295, 171481 96345, 170928 96371, 170805 96358, 170041 96397, 169190 96319, 168962 96280, 168377 96273, 168094 96346, 167411 96475, 166818 96483, 166225 96414, 165466 96240, 164927 95855, 164907 95627, 164626 96131, 164171 96602, 164093 96635, 163709 96625, 162692 96458, 162168 96436, 161613 96444, 160963 96485, 159280 96352, 158831 95992, 158786 95893, 158732 95398, 158785 93943, 158457 93943, 158384 94887, 158198 95746, 157774 96601, 157645 96766, 157183 96904, 156601 97016, 155261 97047, 154807 97095, 154283 97055, 153659 96958, 152933 96726, 152758 96700, 152614 96545, 152501 96525, 152384 96327, 152233 96416, 151726 96469, 151654 96524, 151590 96697, 150813 96790, 149907 96671, 148594 96768, 147915 96739, 147141 96572, 146748 96615, 146084 96495, 145145 96167, 144809 95973, 144706 95641, 144599 95124, 144594 94402, 144636 93943, 143991 93943, 144114 94498, 144288 94875, 144388 95269, 144406 95542, 144368 95842, 144136 96169, 143921 96358, 143502 96446, 142795 96445, 141078 96470, 140262 96441, 139868 96362, 139641 96058, 139177 96034, 139026 95956, 138875 95756, 138625 95679, 138295 95650, 138189 95760, 137772 95961, 137361 95899, 137290 95977, 136623 96270, 136481 96413, 135590 96547, 135060 96427, 134822 96296, 134620 96011, 134567 95814, 134559 95198, 134531 95103, 134550 94474, 134579 93943, 134204 93943, 134246 94488, 134236 95379, 134188 95923, 133954 96335, 133813 96408, 133029 96528, 132226 96480, 131607 96407, 130663 96348, 129848 96277, 129152 96295, 128530 96345, 127997 96371, 127877 96358, 127133 96398, 126326 96319, 125631 96263, 125274 96346, 124614 96475, 124045 96483, 123474 96414, 122747 96241, 122229 95856, 122206 95544, 122261 94708, 122418 93943, 121948 93943, 121990 94488, 121982 95380, 121932 95923, 121698 96335, 121557 96408, 120959 96500, 120552 96515, 119829 96467, 119352 96407, 118407 96348, 117593 96277, 116559 96304, 116418 97075, 116435 97645, 116490 97821, 116593 98337, 116374 98685, 115787 98830, 114742 98766, 114205 98874, 113858 98890, 113782 98928, 112692 99213, 112039 99270, 111075 98988, 110627 98937, 109469 98970, 109006 98954, 108322 99024, 107549 98907, 107220 98918, 106989 98779, 106917 98677, 106857 98290, 106900 98049, 106839 97608, 106862 97363, 106672 96862, 106610 96473, 106649 95613, 106799 94863, 107516 94863, 107516 94843, 110504 93831, 110504 90791, 107516 89779, 107514 89759, 106996 89759, 106905 89137, 106989 88349, 106965 86995, 106932 86653, 106978 86135, 107045 85982, 107225 85840, 107387 85792, 107903 85826, 108351 85902, 108865 85864, 109463 85838, 109847 85777, 110404 85841, 110628 85900, 111055 85903, 111439 85961, 111939 85956, 112041 85944, 112619 86022, 113261 85938, 113682 85812, 114532 85725, 114692 85763, 115249 85772, 115804 85853, 116325 85975, 116583 86243, 116620 86358, 116498 86984, 116525 87767, 116625 89267, 118799 89122, 119818 88916, 120426 88880, 120791 88892, 121210 89040, 121768 89365, 121905 89694, 122032 90158, 121958 91647, 122520 91649, 122574 91201, 122488 90495, 122522 89903, 122641 89604, 122774 89471, 123487 89163, 124195 89045, 124590 89064, 125442 89227, 125637 89360, 126260 89434, 126413 89407, 126992 89406, 128608 89303, 129349 89236, 131051 89122, 132089 88916, 132682 88880, 133046 88892, 133466 89040, 134024 89365, 134249 89979, 134285 90183, 134214 91647, 134670 91647, 134650 90418, 135007 89559, 135163 89367, 135665 89272, 136355 89268, 136879 89295, 138316 89531, 139834 89428, 140017 89471, 140127 89547, 140300 89391, 140960 89270, 142527 89247, 142861 89465, 142988 89461, 143293 89224, 143868 89308, 144069 89393, 144167 89493, 144367 89904, 144381 90085, 144179 90994, 144138 91107, 144012 91647, 144836 91647, 144907 90275, 145076 89410, 145274 88849, 145401 88617, 145678 88336, 145823 88295, 146555 88332, 147108 88619, 147847 88787, 148276 88793, 148349 88662, 148379 88713, 148472 88523, 148758 88530, 149662 88481, 150055 88432, 150720 88437, 151397 88551, 151755 88670, 152461 88716, 152802 88656, 153569 88580, 154158 88583, 155396 88695, 156178 88838, 157138 89151, 157413 89333, 158177 90001, 158283 90137, 158460 91648, 158885 91649, 158861 90753, 159021 89837, 159371 89252, 160098 89152, 160990 89141, 161778 89203, 162386 89199, 163350 89116, 164064 89216, 164616 89440, 164866 89682, 164962 89853, 164991 90375, 164959 91072, 165066 91648, 165232 91648, 165289 91198, 165197 90496, 165234 89901, 165358 89603, 165497 89471, 166236 89164, 166975 89043, 167391 89065, 168271 89227, 168475 89361, 169121 89434, 169280 89407, 170170 89411, 170430 89367, 171562 89303, 172068 89252, 174119 89121, 175163 88916, 175800 88880, 176180 88892, 176616 89040, 177196 89365, 177431 89979, 177468 90173, 177395 91649, 177573 91647, 177534 91006, 177529 90264, 177644 89769, 177780 89487, 178115 89227, 178317 89152, 178768 89104, 179116 89178, 179664 89194, 180233 89258, 180534 89159, 181306 89096, 182308 89102, 182947 89185, 184330 89213, 184886 89519, 185035 89799, 185163 90227, 185118 90970, 185173 91647, 185385 91648, 185292 91219, 185260 90625, 185350 90314, 185446 90188, 186175 89778, 187007 89542, 188105 89593, 187391 89296, 187344 89186, 187349 88221, 187423 88145, 187973 87974, 188225 87843, 188255 87715, 187952 87495, 187346 87197, 187342 86379, 187377 86244, 188145 86052, 188295 85903, 188074 85677, 187423 85308, 187352 85204, 187380 85077, 188062 84739, 188109 84631, 188024 84520, 187347 84195, 187342 83376, 187398 83219, 188273 82918, 188590 82691, 188501 82564, 188317 82445, 187402 82126, 187345 82020, 187346 81783, 187612 81295, 187558 81201, 187342 81086, 187637 80670, 187344 80374, 187344 79711, 187381 79586, 188126 79251, 188279 79077, 188115 78915, 187396 78581, 186709 78581, 186017 78285, 186057 78063, 186895 77771, 187123 77584, 187174 77478, 187065 77372, 186816 77295, 186115 77199, 186051 77157, 186018 77060, 186018 76474, 186054 76357, 186855 76144, 187045 75984, 187038 75932, 186857 75775, 186052 75465, 186020 75303, 186049 75224, 186494 74890, 186758 74528, 186756 74426, 186638 74367, 186060 74345, 186018 74234, 186018 73269, 186085 73131, 186316 72941, 186533 72646, 187619 72281, 187848 72281, 188292 71788, 188325 71658, 188121 71590, 187376 71662, 187343 71568, 187342 69585, 187409 69513, 188060 69189, 188116 69063, 187943 68921, 187344 68628, 187347 67493, 187905 67152, 187928 67075, 187892 67001, 187349 66658, 187363 66228, 187807 65763, 187826 65681, 187678 65609, 187192 65579, 186981 64640, 186807 64313, 186641 64466, 186269 65556, 186188 65604, 185498 65610, 185075 65230, 184931 65121, 184697 64431, 184691 64299, 184622 64190, 184585 63964, 184616 63905, 185283 63597, 185446 63479, 185418 63397, 185324 63321, 184865 63172, 184715 63614, 184618 63761, 183706 63754, 183458 62918, 183316 62828, 183208 62978, 182905 63647, 182809 63755, 182127 63756, 182036 63725, 181916 63172, 181815 62867, 181731 62816, 181560 62997, 181226 63680, 181111 63753, 181023 63734, 180715 63013, 180571 63009, 180228 63753, 179578 63759, 179421 63708, 179164 62881, 179004 62549, 178908 62527, 178710 62870, 178458 63721, 178156 63755, 178104 63725, 178002 64266, 177827 64760, 177632 65082, 177253 65177, 176297 65175, 176220 65073, 175987 64339, 175838 64237, 175672 64470, 175474 65101, 175393 65175, 174513 65177, 174426 65132, 174254 64415, 174115 64213, 173901 64361, 173502 65148, 173065 65159, 172481 64586, 172481 64494, 172069 63760, 171627 63759, 171543 63723, 171268 63031, 171155 62856, 171087 62868, 170969 63065, 170774 63579, 170667 63754, 170453 63759, 170330 63702, 169715 62979, 169528 62809, 169402 62771, 169346 62999, 169413 63728, 169288 63758, 167573 63758, 167279 63063, 167175 62987, 167040 63139, 166786 63755, 165815 63753, 165467 63152, 165370 63213, 165060 63755, 164719 63750, 164373 63376, 164225 63266, 164081 63719, 163970 63755, 163970 64828, 163529 65167, 162124 65169, 162036 65098, 161932 64458, 161858 64200, 161783 64145, 161724 64154, 161484 64427, 161147 65135, 161043 65167, 159928 65167, 159801 65127, 159749 64370, 159668 64003, 159560 63881, 159394 64099, 158898 64951, 158746 65137, 158642 65168, 158314 65151, 157859 64417, 157706 64005, 157682 63759, 157505 63755, 157429 63575, 157294 62815, 157207 62727, 157142 62740, 156980 62896, 156514 63760, 155769 63755, 155729 62812, 155619 62650, 155337 62910, 155220 63109, 154893 63611, 154740 63755, 154227 63755, 154132 63670, 153872 62916, 153713 62778, 153569 62986, 153308 63712, 153213 63759, 152932 63744, 152519 63324, 152171 63050, 152110 63105, 152105 63669, 152052 63754, 151282 63758, 151177 63697, 150908 62845, 150777 62548, 150669 62485, 150564 62584, 150426 62890, 150169 63711, 150056 63759, 149032 63757, 148962 63602, 148818 63021, 148816 64726, 148533 65096, 148436 65165, 148346 65131, 148181 64545, 147982 64159, 147812 64046, 147711 64145, 147488 64922, 147351 65148, 146892 65166, 146808 65130, 146573 64210, 146404 63959, 146223 64124, 145854 65142, 145757 65176, 144978 65175, 144852 65129, 144672 64471, 144676 65218, 144590 65256, 144530 65092, 144531 64469, 144610 64383, 144668 64458, 144509 64089, 144407 64026, 144242 64199, 143946 65143, 143841 65175, 143479 65159, 143394 64827, 143330 64774, 143017 64848, 142931 64832, 142664 64329, 142518 63759, 141687 63759, 141571 63725, 141231 62782, 141098 62574, 141015 62595, 140896 62764, 140684 63379, 140619 63605, 140525 63749, 138412 63758, 138329 63609, 138025 62648, 137882 62511, 137790 62545, 137645 62838, 137400 63685, 137320 63754, 136629 63759, 136533 63707, 136300 63177, 136188 63092, 136075 63215, 135822 63755, 135174 63749, 135170 63715, 134853 63953, 135296 64214, 135302 64762, 134531 65610, 133867 65609, 133780 65559, 133461 64595, 133274 64326, 133138 64507, 132872 65572, 132765 65609, 131867 65608, 131755 65565, 131453 64757, 131310 64588, 131183 64732, 130960 65413, 130867 65600, 130726 65594, 130281 64721, 130132 64594, 129981 64910, 129840 65611, 128581 65608, 128122 65010, 128128 64103, 128446 63878, 128360 63752, 128127 63605, 128120 62240, 128150 62134, 128965 61870, 129180 61706, 128946 61557, 128250 61335, 128127 61260, 128122 60163, 128376 60033, 128513 59913, 128139 59652, 128124 59251, 128756 58531, 128958 58563, 129302 59103, 129521 59330, 129615 59193, 129742 58533, 130441 58532, 130793 59299, 130912 59421, 131042 59222, 131248 58532, 132686 58532, 132937 59607, 133019 59767, 133120 59826, 133298 59496, 133615 58580, 133689 58538, 134386 58532, 134963 59042, 135111 59448, 135200 59839, 135263 59952, 135289 60219, 134587 60541, 134414 60695, 134454 60764, 135118 61000, 135143 60329, 136062 60327, 136187 60370, 136431 61117, 136539 61302, 136637 61350, 136688 61299, 137022 60423, 137107 60330, 138012 60329, 138240 61100, 138351 61256, 138498 61120, 138818 60415, 138909 60329, 139582 60328, 139673 60357, 139834 61065, 139943 61271, 140112 61168, 140505 60387, 140606 60329, 140691 60358, 140989 61074, 141110 61074, 141186 60981, 141454 60333, 142204 60329, 142302 60399, 142518 61119, 142518 60428, 142625 59871, 142799 59376, 142991 59073, 143379 58965, 144331 58968, 144404 59052, 144564 59610, 144660 59810, 144766 59903, 144848 59847, 144960 59659, 145137 59067, 145250 58967, 146187 58968, 146379 59781, 146514 59924, 146674 59831, 147118 58998, 147207 58967, 147586 59003, 148149 59554, 148138 59626, 148630 60534, 148829 60327, 150073 60326, 150186 60357, 150409 60988, 150531 61207, 150637 61217, 150790 60910, 150974 60415, 151058 60333, 151353 60352, 152088 61224, 152304 61327, 152361 61063, 152312 60382, 152363 60328, 154084 60327, 154164 60403, 154424 61003, 154517 61094, 154593 61073, 154701 60878, 154907 60364, 154986 60329, 155929 60328, 156228 60905, 156324 60908, 156618 60357, 156991 60333, 157388 60763, 157521 60810, 157633 60329, 157670 60329, 157672 59626, 157953 58961, 158198 58991, 158327 59413, 158522 59900, 158749 60157, 158845 60063, 158924 59866, 158998 59238, 159091 58961, 159808 58963, 159891 58999, 160128 59888, 160271 60070, 160344 60044, 160483 59876, 160804 58990, 161016 58983, 161390 59545, 161639 59752, 161796 59800, 161863 59692, 161894 59183, 161963 58966, 162949 58961, 163079 59010, 163293 59245, 163592 59425, 163899 60327, 164228 60346, 164274 60428, 164399 61217, 164482 61346, 164614 61321, 164792 61088, 165031 60599, 165213 60331, 165839 60327, 165943 60376, 165978 61233, 166061 61414, 166198 61378, 166442 61062, 166890 60375, 167052 60327, 167479 60329, 167566 60394, 167809 61065, 167955 61318, 168109 61192, 168395 60388, 168460 60336, 168754 60333, 168840 60372, 169350 60926, 169517 61023, 169593 61026, 169607 60421, 169663 60327, 170400 60327, 170532 60367, 170773 61170, 170928 61529, 171023 61606, 171112 61547, 171283 61222, 171517 60433, 171571 60353, 171810 60327, 171810 59418, 172117 59026, 172249 58977, 172295 59047, 172465 59654, 172671 60005, 172810 60095, 172921 59983, 173131 59269, 173257 59005, 173342 58967, 173813 58996, 173950 59549, 173947 58971, 173982 58832, 174140 58664, 174237 58643, 174393 58782, 174451 58908, 174453 59603, 174386 59686, 174015 59691, 173970 59630, 174100 60038, 174210 60171, 174352 60087, 174504 59755, 174774 59003, 174869 58967, 175655 58967, 175771 59007, 176022 59891, 176187 60115, 176270 60085, 176400 59866, 176683 59000, 176784 58967, 177149 58982, 177228 59310, 177295 59370, 177606 59295, 177701 59312, 177947 59763, 178123 60329, 180015 60327, 180142 60364, 180526 61420, 180678 61504, 180873 61186, 180929 60996, 181145 60360, 181246 60327, 183300 60327, 183381 60471, 183617 61246, 183769 61541, 183872 61567, 184016 61415, 184319 60384, 184409 60329, 184878 60327, 185037 60201, 184584 59944, 184585 59364, 185353 58529, 186009 58534), (134522 62416, 134259 62575, 134363 62683, 135128 62931, 135122 62204, 134522 62416)), ((97620 189481, 98105 189484, 98402 189880, 98682 189506, 99133 189521, 99353 189904, 99488 190052, 99540 190011, 99773 189535, 100163 189528, 100376 189655, 100554 189537, 100854 189538, 101149 189934, 101106 190665, 100816 190880, 100783 191000, 101119 191255, 101128 191724, 100890 191986, 101148 192215, 101177 192747, 100878 192978, 100918 193081, 101189 193251, 101183 193525, 100895 193807, 101076 193895, 101193 194005, 101173 194469, 100968 194762, 100526 194774, 100347 194705, 100248 194778, 99908 194791, 99743 194631, 99590 194728, 99023 194731, 98879 194546, 98826 194535, 98614 194743, 98399 194740, 98200 194532, 98025 194721, 97550 194724, 97310 194305, 97216 194327, 97017 194752, 96489 194711, 96408 194766, 96068 194771, 95847 194601, 95895 194054, 96197 193802, 95917 193543, 95921 192959, 96176 192732, 95913 192503, 95878 191901, 96343 191670, 96544 191528, 96451 191422, 95828 191193, 95845 190514, 95972 190369, 95841 190222, 95820 189796, 96005 189459, 96540 189443, 96614 189520, 96819 189420, 97620 189481)), ((78409 85926, 79170 86070, 79497 86153, 80092 86140, 81112 86055, 81408 86248, 81455 86364, 81440 86451, 81496 87114, 81472 87500, 81531 88107, 81737 89051, 81809 89759, 81022 89759, 81016 89779, 78028 90791, 78028 93831, 81016 94843, 81016 94863, 81683 94863, 81614 95675, 81585 95794, 81573 96378, 81457 96934, 81447 98258, 81249 98659, 81186 98704, 80655 98710, 80286 98680, 79616 98706, 78875 98832, 78365 98932, 77941 98931, 77158 98992, 76469 98945, 75813 98846, 75016 98889, 74483 98879, 73245 98829, 73005 98883, 72366 98914, 72116 98854, 71862 98708, 71548 98227, 71547 97582, 71531 97460, 71556 96933, 71502 96426, 71115 96245, 70719 95676, 70656 95399, 70594 94811, 70559 94281, 70502 94382, 70127 94505, 69356 94563, 68633 94514, 68154 94455, 67210 94395, 66395 94324, 65698 94343, 65077 94393, 64546 94417, 64426 94404, 63828 94441, 63828 94704, 65001 94611, 65894 94619, 66438 94671, 66851 94917, 66923 95063, 67015 95694, 67032 96121, 66984 96879, 66922 97382, 66864 98372, 66793 99226, 66810 99959, 66860 100613, 66886 101171, 66873 101296, 66912 102082, 66777 103497, 66790 103747, 66862 104031, 66990 104724, 66999 105320, 66931 105920, 66756 106678, 66397 107222, 65975 107239, 65229 107198, 63952 106913, 63828 106930, 63828 107202, 65003 107205, 65421 107250, 66003 107388, 66529 107610, 66793 107875, 66838 108017, 66838 108749, 66581 109372, 66491 110150, 66500 110492, 66623 110561, 66578 110592, 66754 110676, 66766 111034, 66848 111859, 66913 112251, 66938 112906, 66866 113597, 66750 114211, 66766 114668, 66834 115005, 66941 115766, 66966 116355, 66920 117598, 66830 118384, 66573 119389, 66437 119646, 65789 120547, 64171 120846, 63828 120866, 63828 121182, 64570 121206, 65557 121183, 66482 121339, 67070 121691, 67172 122504, 67180 123310, 67105 124249, 67188 125855, 67109 126383, 66881 126935, 66639 127186, 66410 127291, 65946 127311, 65214 127278, 64740 127396, 64584 127373, 63828 127384, 63828 127596, 64953 127663, 65674 127611, 66247 127675, 66636 127842, 66850 128018, 67020 128289, 67065 128485, 67117 130532, 67090 130669, 67183 131180, 67149 132000, 67019 133313, 67045 133906, 66906 134776, 66707 135057, 66080 135154, 65685 135144, 65159 135152, 64921 135201, 64400 135210, 63828 135205, 63828 135528, 64823 135447, 65714 135455, 66258 135509, 66670 135753, 66741 135901, 66835 136530, 66850 136957, 66801 137715, 66742 138218, 66682 139209, 66612 140065, 66630 140797, 66680 141450, 66727 142454, 66717 143071, 66598 144492, 66680 144867, 66810 145560, 66818 146156, 66749 146756, 66574 147524, 66190 148064, 65793 148076, 65048 148033, 63828 147763, 63828 148354, 64846 148282, 65886 148386, 66227 148571, 66600 148941, 66741 149503, 66659 150678, 66566 151253, 66574 151657, 66530 152523, 66491 152921, 66564 153804, 66572 154036, 66780 155918, 66709 156746, 66694 157347, 66766 158262, 66594 158836, 66510 159000, 65827 159237, 64859 159434, 63828 159367, 63828 159763, 64500 159794, 65282 159870, 65940 160107, 66075 160203, 66317 160566, 66374 160782, 66356 161358, 66264 161565, 66193 162108, 66067 162676, 66124 162935, 66133 163645, 66021 164751, 65868 165378, 65696 166745, 65314 167269, 65004 167386, 64540 167468, 63828 167351, 63828 167498, 64825 167507, 65368 167559, 65780 167801, 65851 167947, 65975 168760, 65913 169745, 65852 170243, 65792 171225, 65722 172074, 65740 172798, 65790 173444, 65837 174436, 65829 175051, 65762 175737, 65708 176458, 65790 176829, 65920 177516, 65927 178106, 65859 178700, 65687 179455, 65300 179996, 64903 180008, 64396 179979, 63828 179894, 63828 180752, 63951 181065, 64070 181762, 64049 182155, 63887 183009, 63828 183107, 63828 186367, 63898 187171, 64087 187171, 64012 186459, 64000 185913, 64198 185475, 64334 185387, 65141 185172, 66129 185117, 66638 185121, 67627 185065, 67975 185058, 68561 185026, 69210 184934, 70322 184721, 70531 184719, 71300 184588, 72154 184568, 72885 184539, 73248 184415, 73921 184205, 74512 184128, 75115 184127, 75896 184214, 76472 184508, 76531 184665, 76579 185701, 76446 186971, 76490 187171, 76884 187171, 76907 186573, 76860 185991, 76922 185418, 77089 185031, 77265 184817, 77534 184643, 77733 184599, 79779 184548, 79916 184575, 79751 184409, 79719 183942, 79862 183773, 79712 183631, 79641 182911, 79781 182649, 79886 182543, 80410 182579, 80604 182780, 80731 182700, 80797 182598, 81172 182589, 81253 182627, 81438 182837, 81745 182857, 81884 182552, 82527 182548, 82818 183085, 83147 182613, 83446 182658, 83659 182931, 83882 182664, 84497 182677, 84728 183040, 85037 182633, 85197 182621, 85351 182706, 85552 182991, 85537 183849, 85453 184020, 85527 184159, 85479 184804, 85023 184978, 85044 185098, 85494 185343, 85520 185859, 85080 186139, 85022 186267, 85614 185978, 86147 185818, 86504 185650, 87571 185333, 87811 185231, 88526 185006, 89376 184753, 89521 184697, 90341 184668, 90755 185169, 90909 185452, 90957 185831, 90938 185994, 90889 186719, 92208 186868, 92617 186870, 93313 187086, 93999 187255, 94482 187551, 94566 187654, 94659 188455, 94578 188929, 94498 189074, 94364 189636, 94259 189949, 94127 190785, 93999 191189, 93775 191601, 93496 192440, 93348 193272, 93063 194083, 92471 194350, 92092 194380, 91740 194349, 90117 193952, 89801 193817, 89237 193115, 89186 192958, 89256 192555, 89484 191957, 89675 191634, 89664 191472, 89702 191349, 89583 190912, 89505 190282, 89554 189909, 89713 189637, 89620 189575, 87632 190309, 86893 190596, 85591 190918, 85143 190836, 84986 190998, 85592 191209, 85581 191841, 85098 192074, 85170 192179, 85580 192435, 85597 192858, 85236 193135, 85015 193144, 84697 192828, 84653 192836, 84474 193164, 83877 193198, 83616 192727, 83515 192771, 83276 193224, 82525 193224, 82244 192838, 81983 193215, 81591 193208, 81274 192657, 81190 192630, 80928 193206, 80609 193200, 80386 192873, 80302 192903, 80132 193181, 79931 193181, 79681 192916, 79700 192232, 80092 192008, 79824 192007, 79346 191927, 77793 191895, 77234 191589, 77086 191309, 76957 190881, 77003 190138, 76948 189467, 76737 189467, 76828 189889, 76860 190483, 76770 190792, 76675 190920, 75985 191316, 75215 191538, 74804 191564, 73892 191506, 73625 191397, 73018 191401, 72862 191444, 72257 191516, 71699 191622, 70584 191813, 70082 191923, 69033 192109, 67955 192318, 67008 192618, 66383 192727, 65985 192757, 65545 192663, 64928 192407, 64558 191651, 64479 190321, 64409 189467, 64165 189467, 64216 189856, 64216 190627, 64074 191032, 63750 191589, 63134 191814, 62864 191857, 61625 191784, 60383 191738, 59522 191739, 58711 191812, 57734 191803, 57190 191752, 56778 191519, 56707 191379, 56585 190602, 56647 189650, 56707 189171, 56766 188228, 56836 187428, 56824 186816, 56770 186095, 56723 185124, 56731 184549, 56850 183196, 56768 182840, 56638 182181, 56630 181610, 56701 181041, 56873 180311, 57258 179793, 57655 179782, 58400 179823, 59678 180095, 60282 180023, 60697 180015, 61066 180076, 61534 180092, 61534 179713, 60853 179677, 60690 179633, 59940 179727, 59353 179693, 59048 179567, 58916 179430, 58607 178683, 58490 177950, 58509 177541, 58672 176654, 58811 176403, 58877 175805, 58852 175648, 58855 174756, 58810 174492, 58748 173363, 58697 172857, 58583 171073, 58508 170507, 58359 169747, 58323 169125, 58337 168746, 58486 168310, 58808 167731, 59424 167494, 59678 167449, 60933 167526, 61534 167546, 61534 167275, 60995 167203, 60148 167060, 59645 167025, 59368 167031, 58770 166908, 58378 166699, 58168 166501, 58016 166215, 57987 166013, 58144 163971, 58184 163838, 58140 163320, 58261 162506, 58470 161557, 58552 161016, 58564 160630, 58802 159775, 59023 159533, 59714 159486, 60129 159541, 60684 159589, 60939 159566, 61534 159619, 61534 159353, 60816 159387, 60273 159387, 59712 159305, 59398 159157, 59274 159009, 59024 158554, 58903 157715, 59024 157120, 58988 156095, 59018 155910, 58930 154895, 59055 153781, 59017 153558, 58992 152791, 59022 152017, 58887 150654, 58926 149876, 59016 148670, 59097 148470, 59362 148358, 60224 148247, 61534 148282, 61534 147717, 60830 147793, 60243 147759, 59938 147631, 59826 147521, 59498 146745, 59380 145998, 59399 145588, 59562 144690, 59701 144437, 59769 143831, 59742 143674, 59745 142757, 59702 142508, 59638 141369, 59587 140857, 59456 138788, 59249 137719, 59214 137022, 59232 136688, 59375 136266, 59698 135681, 60026 135538, 60509 135397, 61534 135460, 61534 135339, 60821 135344, 60328 135230, 60046 135093, 59785 134757, 59711 134558, 59662 134107, 59737 133757, 59753 133210, 59815 132640, 59714 132329, 59655 131567, 59659 130565, 59744 129926, 59770 128548, 60078 127987, 60358 127838, 60784 127711, 61534 127765, 61534 127417, 60882 127344, 60189 126945, 59717 126492, 59686 126412, 59695 126030, 59835 125181, 59885 124488, 59877 123933, 59836 123283, 59966 121605, 60329 121151, 60923 121053, 61534 121071, 61534 120901, 61028 120842, 60450 120663, 59856 120380, 59698 120259, 59551 119800, 59435 119286, 59333 117890, 59268 117442, 59280 116916, 59339 116286, 59514 115550, 59532 115374, 59666 115223, 59676 115108, 59854 114979, 59764 114835, 59694 114330, 59639 114263, 59480 114207, 59357 113432, 59422 112581, 59276 111218, 59269 110541, 59386 109760, 59328 109367, 59405 108699, 59659 107743, 59833 107369, 60696 107111, 61534 107115, 61534 106891, 61009 106957, 60421 106921, 60119 106795, 59988 106654, 59682 105910, 59558 105162, 59580 104746, 59742 103854, 59882 103600, 59949 102995, 59922 102835, 59923 102228, 59882 101672, 59818 100531, 59769 100038, 59638 97970, 59431 96889, 59395 96252, 59413 95852, 59555 95429, 59880 94845, 60208 94700, 60678 94564, 61534 94615, 61534 94455, 60841 94560, 60024 94462, 59293 94285, 58776 93903, 58765 93506, 58807 92750, 59076 91483, 59006 90879, 58998 90463, 59059 90095, 59103 89094, 59035 88543, 59070 87947, 59188 87650, 59323 87517, 60036 87212, 60745 87091, 61155 87114, 61990 87275, 62233 87414, 62808 87480, 62959 87455, 63820 87462, 64071 87413, 65155 87351, 65897 87283, 67591 87169, 68629 86962, 69229 86926, 69594 86937, 70014 87087, 70570 87411, 70797 88027, 70842 88280, 70765 89537, 70759 89796, 70849 89600, 70969 89472, 71569 89337, 71620 87736, 71621 87050, 71597 86595, 71763 86063, 71875 86010, 72281 85959, 74150 85927, 74579 85971, 74724 85942, 75288 85962, 75774 86015, 76166 86001, 76666 86013, 77070 85953, 77967 85908, 78409 85926)), ((97565 183305, 97783 183586, 98019 183365, 98383 183398, 98687 183854, 98762 183779, 98917 183418, 99111 183376, 99632 183344, 99840 183568, 100035 183318, 100423 183323, 100645 183614, 100749 183543, 100886 183313, 101216 183316, 101412 183511, 101561 183347, 101962 183323, 102135 183644, 102134 183878, 101898 184189, 102150 184354, 102115 185209, 101766 185374, 101759 185412, 102097 185630, 102025 186362, 101532 186586, 101478 186687, 102022 186970, 102029 187730, 101781 187942, 102064 188166, 102079 188449, 101910 188701, 101546 188667, 101205 188688, 100982 188608, 100849 188680, 100301 188659, 100065 188337, 99827 188624, 99292 188617, 99064 188253, 98985 188269, 98814 188644, 98141 188606, 97904 188183, 97849 188218, 97629 188610, 97023 188605, 96807 188236, 96812 188090, 96779 187572, 97059 187339, 96817 187134, 96820 186700, 97034 186492, 97035 186435, 96801 186228, 96826 185834, 97160 185582, 96805 185407, 96786 184618, 97216 184403, 97287 184311, 96761 184068, 96751 183577, 96933 183342, 97111 183268, 97565 183305)), ((57963 141999, 58423 142303, 58842 142721, 58945 142922, 59033 143496, 59083 143635, 59023 143742, 58896 143787, 58445 144036, 57673 144116, 57126 144116, 56714 143978, 56568 143771, 56514 143408, 56673 142711, 57110 142098, 57350 141976, 57963 141999)), ((186677 76038, 185935 76030, 186676 75992, 186677 76038))) \ No newline at end of file diff --git a/stress_benchmark/resources/057.settings b/stress_benchmark/resources/057.settings deleted file mode 100644 index bb247ec669..0000000000 --- a/stress_benchmark/resources/057.settings +++ /dev/null @@ -1,632 +0,0 @@ -adaptive_layer_height_enabled=False -meshfix_fluid_motion_angle=15 -speed_wall_0=30.0 -machine_acceleration=500 -bridge_sparse_infill_max_density=0 -support_line_width=0.8 -bottom_skin_preshrink=0.6 -small_skin_on_surface=False -nozzle_disallowed_areas=[] -bridge_skin_material_flow_2=100 -machine_nozzle_heat_up_speed=2.0 -top_thickness=1.7 -coasting_speed=90 -nozzle_offsetting_for_disallowed_areas=True -top_bottom_extruder_nr=-1 -machine_buildplate_type=glass -ironing_pattern=zigzag -material_standby_temperature=180 -wipe_brush_pos_x=100 -extruder_prime_pos_abs=False -support_bottom_stair_step_min_slope=10.0 -machine_scale_fan_speed_zero_to_one=False -adaptive_layer_height_threshold=0.2 -machine_height=270 -support_interface_material_flow=100 -z_seam_relative=False -top_skin_expand_distance=1.0 -machine_shape=rectangular -speed_travel_layer_0=100.0 -raft_surface_extruder_nr=0 -material_print_temperature_layer_0=185 -raft_jerk=8 -support_xy_distance=2 -bridge_skin_speed_2=15.0 -ooze_shield_angle=60 -machine_extruders_share_nozzle=False -min_feature_size=0.2 -bottom_skin_expand_distance=1.0 -speed_prime_tower=30.0 -speed_support=30.0 -speed_roofing=30.0 -raft_fan_speed=0 -wall_transition_filter_distance=100 -magic_spiralize=False -support_skip_zag_per_mm=20 -infill_pattern=gyroid -extruders_enabled_count=1 -machine_heated_bed=True -gradual_support_infill_steps=0 -wall_line_width=0.8 -raft_surface_jerk=8 -print_bed_temperature=56 -support_bottom_material_flow=100 -bridge_skin_material_flow_3=110 -command_line_settings=0 -prime_tower_base_size=8.0 -material_print_temp_wait=True -cool_min_layer_time_fan_speed_max=10 -machine_max_acceleration_e=5000 -jerk_support_roof=8 -date=04-12-2023 -support_use_towers=True -minimum_support_area=2 -wall_x_material_flow_layer_0=100 -material_adhesion_tendency=0 -material_initial_print_temperature=183 -layer_0_z_overlap=0.15 -support_roof_enable=True -acceleration_wall_x_roofing=500 -raft_base_margin=15 -raft_interface_margin=15 -raft_surface_margin=15 -support_tree_branch_diameter_angle=7 -prime_tower_base_height=0.5 -machine_nozzle_head_distance=3 -support_interface_skip_height=0.2 -support_bottom_pattern=grid -bottom_thickness=1.7 -cool_fan_enabled=True -ironing_flow=10.0 -support_fan_enable=False -layer_start_y=0.0 -acceleration_support_interface=500 -skin_material_flow=100 -default_material_bed_temperature=60 -support_xy_distance_overhang=0.8 -anti_overhang_mesh=False -infill_material_flow=100 -prime_tower_size=20 -machine_nozzle_id=unknown -small_feature_speed_factor_0=50 -travel_avoid_other_parts=True -_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 -brim_inside_margin=2.5 -speed_z_hop=5 -wall_thickness=1.6 -top_bottom_pattern_0=zigzag -resolution=0 -support_angle=75 -retraction_min_travel=1.5 -prime_blob_enable=False -wipe_retraction_extra_prime_amount=0 -wipe_retraction_enable=True -switch_extruder_retraction_amount=16 -machine_max_feedrate_e=75 -wipe_retraction_amount=2 -machine_max_acceleration_y=500 -optimize_wall_printing_order=True -retraction_hop_after_extruder_switch_height=0.2 -machine_feeder_wheel_diameter=10.0 -infill_overlap=700 -support_mesh_drop_down=True -small_feature_speed_factor=50 -skin_overlap_mm=0.522 -sub_div_rad_add=0.94 -roofing_line_width=0.8 -material_flow_layer_0=100 -support_roof_pattern=grid -cool_fan_speed_min=70 -retraction_combing_max_distance=30 -conical_overhang_enabled=False -remove_empty_first_layers=True -cool_fan_speed=70 -raft_base_jerk=8 -min_infill_area=0 -meshfix_maximum_travel_resolution=0.25 -switch_extruder_retraction_speed=20 -machine_max_jerk_z=0.4 -raft_interface_speed=22.5 -speed_ironing=20.0 -gantry_height=250 -material_break_temperature=50 -machine_endstop_positive_direction_z=True -dual=0 -raft_interface_layers=1 -ooze_shield_dist=2 -support_line_distance=10 -infill_enable_travel_optimization=False -machine_nozzle_temp_enabled=True -machine_min_cool_heat_time_window=50.0 -jerk_skirt_brim=8 -support_roof_density=30 -support_bottom_line_width=0.8 -initial_layer_line_width_factor=100.0 -support_skip_some_zags=False -meshfix_maximum_deviation=0.025 -support_infill_sparse_thickness=0.5 -material_end_of_filament_purge_length=20 -raft_interface_acceleration=500 -machine_steps_per_mm_z=50 -prime_tower_raft_base_line_spacing=3.2 -material_bed_temp_prepend=False -wipe_move_distance=20 -ironing_enabled=False -infill_support_angle=40 -support_interface_height=2.0 -wall_extruder_nr=-1 -mold_enabled=False -magic_fuzzy_skin_enabled=False -skirt_brim_speed=20.0 -raft_acceleration=500 -bridge_fan_speed_3=0 -support_tree_angle_slow=50.0 -raft_speed=30.0 -support_tree_branch_reach_limit=30 -support_structure=normal -machine_max_jerk_xy=10 -roofing_material_flow=94 -acceleration_infill=500 -machine_extruder_count=1 -support_roof_line_distance=5.333333333333333 -zig_zaggify_support=False -hole_xy_offset_max_diameter=0 -cool_fan_full_layer=4 -speed_print_layer_0=20.0 -alternate_carve_order=True -support_infill_extruder_nr=0 -wipe_retraction_prime_speed=70 -initial_bottom_layers=4 -material_brand=empty_brand -skin_monotonic=False -default_material_print_temperature=180 -meshfix_maximum_extrusion_area_deviation=50000 -roofing_layer_count=2 -minimum_roof_area=10 -bridge_wall_speed=15.0 -support_interface_density=30 -line_width=0.8 -acceleration_ironing=500 -magic_fuzzy_skin_point_dist=0.8 -_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 -infill_randomize_start_location=False -wall_x_material_flow=100 -prime_tower_position_x=233.175 -speed_slowdown_layers=2 -bridge_wall_min_length=3.4 -wipe_pause=0 -lightning_infill_overhang_angle=40 -support_bottom_enable=True -magic_fuzzy_skin_thickness=0.3 -support_conical_enabled=False -machine_max_acceleration_z=100 -xy_offset_layer_0=-0.3 -support_tree_limit_branch_reach=True -speed_wall_x_roofing=30.0 -speed_layer_0=20.0 -infill=0 -bridge_skin_speed_3=15.0 -machine_steps_per_mm_x=50 -lightning_infill_support_angle=40 -infill_line_distance=12.0 -jerk_layer_0=8 -minimum_interface_area=10 -wall_0_material_flow_layer_0=100 -support_wall_count=1 -raft_base_line_spacing=3.2 -support_supported_skin_fan_speed=100 -machine_firmware_retract=False -support_mesh=False -support=0 -machine_heated_build_volume=False -extruder_prime_pos_z=0 -support_bottom_line_distance=5.333333333333333 -support_enable=True -adhesion_extruder_nr=-1 -print_temperature=210 -raft_base_remove_inside_corners=False -raft_interface_remove_inside_corners=False -raft_surface_remove_inside_corners=False -wipe_retraction_retract_speed=70 -material_anti_ooze_retracted_position=-4 -layer_height=0.5 -material_shrinkage_percentage_xy=100.0 -wipe_hop_amount=0.2 -jerk_print_layer_0=8 -lightning_infill_prune_angle=40 -material_diameter=1.75 -bridge_enable_more_layers=True -raft_surface_line_spacing=0.8 -retraction_retract_speed=70 -brim_line_count=10 -raft_interface_extruder_nr=0 -interlocking_orientation=22.5 -interlocking_beam_width=1.6 -machine_extruders_shared_nozzle_initial_retraction=0 -jerk_ironing=8 -support_tree_tip_diameter=1.6 -bridge_skin_speed=15.0 -bridge_fan_speed=100 -support_xy_overrides_z=xy_overrides_z -machine_show_variants=False -meshfix_fluid_motion_enabled=True -blackmagic=0 -min_even_wall_line_width=0.68 -support_tree_max_diameter=25 -infill_mesh=False -adhesion_type=none -min_odd_wall_line_width=0.68 -skirt_line_count=3 -support_tree_angle=75 -support_interface_priority=interface_area_overwrite_support_area -fill_outline_gaps=False -acceleration_wall_0=500 -day=Mon -support_bottom_stair_step_width=5.0 -wipe_hop_enable=False -cool_min_temperature=183 -material_print_temp_prepend=False -infill_offset_y=0 -cool_fan_speed_max=70 -magic_mesh_surface_mode=normal -zig_zaggify_infill=False -support_interface_line_width=0.8 -bridge_wall_coast=100 -slicing_tolerance=exclusive -infill_wipe_dist=0.0 -support_bottom_height=2.0 -machine_depth=235 -acceleration_skirt_brim=500 -skin_overlap=60 -material_break_speed=25 -machine_settings=0 -flow_rate_extrusion_offset_factor=100 -mesh_position_z=0 -support_bottom_wall_count=0 -speed_support_roof=30.0 -z_seam_x=117.5 -material_bed_temp_wait=True -support_tower_roof_angle=65 -raft_interface_fan_speed=0 -material_bed_temperature=56 -coasting_volume=0.064 -interlocking_boundary_avoidance=2 -raft_smoothing=5 -machine_width=235 -raft_airgap=0.3 -mold_angle=40 -raft_base_extruder_nr=0 -z_seam_y=235 -wall_overhang_angle=90 -machine_steps_per_mm_e=1600 -gradual_support_infill_step_height=1 -cross_infill_pocket_size=12.0 -infill_sparse_thickness=0.5 -prime_tower_brim_enable=False -ironing_monotonic=False -small_skin_width=1.6 -support_join_distance=2.0 -material_type=empty -initial_extruder_nr=0 -connect_infill_polygons=False -acceleration_print_layer_0=500 -center_object=False -skirt_height=3 -cool_fan_speed_0=0 -wall_line_count=2 -jerk_wall_0=8 -material_surface_energy=100 -material=0 -material_crystallinity=False -top_bottom_thickness=1.7 -material_guid=2a3155ed-2199-44c8-8630-c6ea31f60df4 -platform_adhesion=0 -bridge_skin_density=100 -infill_sparse_density=8 -support_bottom_stair_step_height=0.5 -machine_steps_per_mm_y=50 -acceleration_travel_layer_0=500 -machine_max_acceleration_x=500 -wall_transition_filter_deviation=0.2 -meshfix_keep_open_polygons=False -mold_width=5 -retraction_hop_only_when_collides=False -raft_base_thickness=0.24 -shell=0 -support_conical_min_width=5.0 -conical_overhang_angle=50 -draft_shield_height_limitation=full -skin_outline_count=1 -_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 -smooth_spiralized_contours=True -jerk_topbottom=8 -brim_gap=0 -acceleration_enabled=False -wall_material_flow=100 -acceleration_wall=500 -draft_shield_dist=10 -raft_surface_acceleration=500 -switch_extruder_retraction_speeds=20 -support_pattern=zigzag -infill_before_walls=False -inset_direction=inside_out -wall_x_material_flow_roofing=100 -speed_equalize_flow_width_factor=100.0 -material_flush_purge_length=60 -support_conical_angle=30 -jerk_prime_tower=8 -retraction_hop=0.2 -support_meshes_present=False -material_anti_ooze_retraction_speed=5 -raft_base_wall_count=1 -prime_tower_base_curve_magnitude=4 -support_roof_material_flow=100 -infill_mesh_order=0 -raft_surface_fan_speed=0 -material_id=empty_material -raft_surface_layers=2 -speed_support_bottom=30.0 -support_material_flow=100 -bridge_skin_support_threshold=50 -jerk_wall_0_roofing=8 -material_break_retracted_position=-50 -small_feature_max_length=43.982297150257104 -support_roof_extruder_nr=0 -interlocking_enable=False -interlocking_beam_layer_count=2 -travel_avoid_supports=True -min_skin_width_for_expansion=1.2246467991473532e-16 -experimental=0 -skin_material_flow_layer_0=100 -material_bed_temperature_layer_0=56 -adaptive_layer_height_variation=0.04 -meshfix_union_all=True -travel=0 -bridge_skin_density_3=80 -support_connect_zigzags=True -support_top_distance=0.5 -support_bottom_distance=0 -wall_x_extruder_nr=-1 -support_bottom_extruder_nr=0 -support_tree_rest_preference=buildplate -cool_lift_head=False -raft_interface_line_width=1.6 -support_type=buildplate -support_zag_skip_count=2 -retraction_combing=infill -support_infill_angles=[45] -raft_interface_line_spacing=1.8 -draft_shield_enabled=False -material_break_preparation_temperature=183 -material_alternate_walls=False -wall_0_wipe_dist=0.0 -switch_extruder_prime_speed=20 -speed_infill=60 -raft_surface_thickness=0.5 -machine_center_is_zero=False -roofing_monotonic=True -bottom_layers=4 -alternate_extra_perimeter=False -support_bottom_offset=0.0 -speed_wall_x=30.0 -infill_line_width=0.96 -wall_line_width_0=0.8 -support_extruder_nr_layer_0=0 -retraction_count_max=100 -jerk_infill=8 -skin_edge_support_layers=4 -ironing_line_spacing=0.1 -meshfix_fluid_motion_small_distance=0.01 -prime_tower_line_width=0.8 -material_print_temperature=183 -acceleration_prime_tower=500 -travel_avoid_distance=0.625 -cool_min_speed=10 -wall_0_material_flow=100 -extruder_prime_pos_y=0 -jerk_print=8 -support_brim_enable=True -support_bottom_density=30 -brim_width=8.0 -ironing_only_highest_layer=False -wall_transition_length=0.8 -wall_distribution_count=1 -material_shrinkage_percentage=100.0 -brim_smart_ordering=True -machine_use_extruder_offset_to_offset_coords=True -support_interface_extruder_nr=0 -infill_support_enabled=False -bridge_skin_material_flow=60 -mold_roof_height=0.5 -machine_nozzle_tip_outer_diameter=1 -raft_base_acceleration=500 -wall_line_width_x=0.94 -meshfix_union_all_remove_holes=False -cool_fan_full_at_height=1.2 -travel_retract_before_outer_wall=False -_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 -bridge_settings_enabled=False -jerk_enabled=False -speed_wall_0_roofing=30.0 -skin_preshrink=0.6 -layer_height_0=0.2 -z_seam_position=back -support_interface_offset=0.0 -cool_min_layer_time=10 -bridge_wall_material_flow=50 -lightning_infill_straightening_angle=40 -speed_travel=120 -group_outer_walls=True -material_is_support_material=False -material_flow=100 -jerk_roofing=8 -jerk_travel_enabled=True -jerk_wall_x=8 -machine_always_write_active_tool=False -retraction_amount=2 -machine_minimum_feedrate=0.0 -acceleration_print=500 -retraction_hop_after_extruder_switch=True -mesh_position_y=0 -machine_heat_zone_length=16 -switch_extruder_extra_prime_amount=0 -prime_tower_min_volume=6 -wipe_retraction_speed=70 -material_end_of_filament_purge_speed=0.5 -extruder_prime_pos_x=0 -acceleration_topbottom=500 -material_maximum_park_duration=300 -wipe_repeat_count=5 -infill_extruder_nr=-1 -skin_no_small_gaps_heuristic=False -z_seam_type=sharpest_corner -conical_overhang_hole_size=0 -roofing_extruder_nr=-1 -minimum_polygon_circumference=1.0 -machine_extruders_share_heater=False -jerk_support_infill=8 -infill_offset_x=0 -jerk_wall=8 -machine_nozzle_cool_down_speed=2.0 -raft_surface_speed=30.0 -min_bead_width=0.68 -meshfix_extensive_stitching=False -mesh_position_x=0 -speed_wall=30.0 -support_offset=1.2000000000000002 -wall_overhang_speed_factor=100 -top_layers=4 -meshfix_fluid_motion_shift_distance=0.1 -machine_max_jerk_e=5 -raft_base_line_width=1.6 -machine_max_feedrate_y=500 -meshfix=0 -ooze_shield_enabled=False -max_skin_angle_for_expansion=90 -raft_base_fan_speed=0 -magic_fuzzy_skin_point_density=1.25 -hole_xy_offset=0.14 -infill_wall_line_count=0 -speed_print=60 -machine_endstop_positive_direction_x=False -prime_tower_enable=False -wipe_hop_speed=5 -raft_interface_thickness=0.75 -retraction_prime_speed=70 -acceleration_travel_enabled=True -brim_outside_only=True -relative_extrusion=False -magic_fuzzy_skin_outside_only=False -minimum_bottom_area=10 -raft_surface_line_width=0.8 -jerk_support_interface=8 -support_tree_bp_diameter=7.5 -support_interface_pattern=grid -xy_offset=0.14 -support_roof_offset=0.0 -print_sequence=all_at_once -material_extrusion_cool_down_speed=0.7 -gradual_infill_step_height=1.5 -cutting_mesh=False -acceleration_layer_0=500 -material_no_load_move_factor=0.940860215 -travel_speed=150.0 -z_seam_corner=z_seam_corner_weighted -machine_max_feedrate_z=10 -speed=0 -coasting_enable=True -retraction_enable=True -jerk_support_bottom=8 -max_extrusion_before_wipe=10 -top_bottom_pattern=zigzag -material_shrinkage_percentage_z=100.0 -top_bottom=0 -infill_multiplier=1 -machine_nozzle_size=0.8 -material_break_preparation_speed=2 -skin_line_width=0.8 -skirt_brim_extruder_nr=-1 -multiple_mesh_overlap=0.15 -machine_nozzle_expansion_angle=45 -gradual_infill_steps=0 -support_brim_width=4 -support_tree_branch_diameter=5 -support_initial_layer_line_distance=10 -support_z_distance=0.5 -raft_base_speed=22.5 -jerk_travel_layer_0=8 -speed_support_interface=30.0 -support_tree_max_diameter_increase_by_merges_when_support_to_model=1 -clean_between_layers=False -ironing_inset=0.76 -material_flush_purge_speed=0.5 -acceleration_travel=500 -support_roof_height=2.0 -wall_0_inset=0 -interlocking_depth=2 -prime_tower_position_y=213.175 -jerk_support=8 -roofing_pattern=zigzag -jerk_wall_x_roofing=8 -top_skin_preshrink=0.6 -acceleration_wall_0_roofing=500 -machine_max_feedrate_x=500 -material_final_print_temperature=183 -acceleration_roofing=500 -raft_interface_jerk=8 -retraction_speed=70 -prime_tower_flow=100 -acceleration_wall_x=500 -infill_overlap_mm=0.5 -wall_0_material_flow_roofing=100 -brim_replaces_support=False -skirt_brim_minimal_length=250 -cooling=0 -speed_topbottom=30.0 -support_roof_wall_count=0 -skirt_gap=10.0 -support_extruder_nr=0 -machine_endstop_positive_direction_y=False -bridge_fan_speed_2=0 -retraction_extrusion_window=10 -skin_edge_support_thickness=0 -retraction_extra_prime_amount=0 -expand_skins_expand_distance=1.0 -support_infill_rate=10 -meshfix_maximum_resolution=0.25 -support_tree_min_height_to_model=3 -min_wall_line_width=0.68 -acceleration_support_infill=500 -material_break_preparation_retracted_position=-16 -support_interface_wall_count=0 -support_tree_top_rate=30 -jerk_travel=8 -retract_at_layer_change=False -support_roof_line_width=0.8 -machine_disallowed_areas=[] -coasting_min_volume=0.8 -wall_transition_angle=10 -support_tower_diameter=3.0 -carve_multiple_volumes=False -support_interface_enable=True -skirt_brim_line_width=0.8 -skirt_brim_material_flow=100 -draft_shield_height=10 -adaptive_layer_height_variation_step=0.04 -acceleration_support_roof=500 -support_brim_line_count=5 -build_volume_temperature=28 -small_hole_max_size=14 -connect_skin_polygons=False -flow_rate_max_extrusion_offset=0 -_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False -speed_support_infill=30.0 -wall_0_extruder_nr=-1 -retraction_hop_enabled=False -prime_tower_wipe_enabled=True -acceleration_support_bottom=500 -bridge_skin_density_2=75 -support_tower_maximum_supported_diameter=3.0 -acceleration_support=500 -layer_start_x=0.0 -material_name=empty diff --git a/stress_benchmark/resources/057.wkt b/stress_benchmark/resources/057.wkt deleted file mode 100644 index 4c7c9843c2..0000000000 --- a/stress_benchmark/resources/057.wkt +++ /dev/null @@ -1 +0,0 @@ -MULTIPOLYGON () \ No newline at end of file diff --git a/stress_benchmark/resources/058.settings b/stress_benchmark/resources/058.settings index 39446ad26e..2e325cc8c4 100644 --- a/stress_benchmark/resources/058.settings +++ b/stress_benchmark/resources/058.settings @@ -73,7 +73,6 @@ raft_surface_margin=15 support_tree_branch_diameter_angle=7 prime_tower_base_height=0.12 machine_nozzle_head_distance=3 -support_interface_skip_height=0.12 support_bottom_pattern=grid bottom_thickness=0.96 cool_fan_enabled=True @@ -298,6 +297,7 @@ mold_angle=40 raft_base_extruder_nr=0 z_seam_y=220 wall_overhang_angle=90 +seam_overhang_angle=30 machine_steps_per_mm_e=1600 gradual_support_infill_step_height=1 cross_infill_pocket_size=4.0 diff --git a/stress_benchmark/resources/058.wkt b/stress_benchmark/resources/058.wkt index a98e540d04..1f626966f7 100644 --- a/stress_benchmark/resources/058.wkt +++ b/stress_benchmark/resources/058.wkt @@ -1 +1 @@ -MULTIPOLYGON (((91317 121314, 90263 123129, 89646 123124, 89562 123156, 89223 123187, 89257 123154, 88871 123236, 88861 123093, 87422 123266, 87172 123070, 86120 123132, 85755 122947, 85416 122823, 85100 122761, 84807 122761, 84542 122822, 84307 122944, 84103 123127, 83190 123076, 82531 123090, 82061 123117, 79799 123129, 78743 121312))) \ No newline at end of file +MULTIPOLYGON (((91317 121314, 90263 123129, 89646 123124, 89562 123156, 89223 123187, 89257 123154, 88871 123236, 88861 123093, 87422 123266, 87172 123070, 86120 123132, 85755 122947, 85416 122823, 85100 122761, 84807 122761, 84542 122822, 84307 122944, 84103 123127, 83190 123076, 82531 123090, 82061 123117, 79799 123129, 78743 121312, 91317 121314))) \ No newline at end of file diff --git a/stress_benchmark/resources/059.settings b/stress_benchmark/resources/059.settings index 97eb1229c2..90b732ad2c 100644 --- a/stress_benchmark/resources/059.settings +++ b/stress_benchmark/resources/059.settings @@ -248,6 +248,7 @@ z_seam_corner=z_seam_corner_weighted meshfix_fluid_motion_enabled=True machine_show_variants=False wall_overhang_angle=90 +seam_overhang_angle=30 z_seam_y=220 acceleration_skirt_brim=500 skin_no_small_gaps_heuristic=False @@ -613,7 +614,6 @@ machine_firmware_retract=False support_tree_angle=45 support_tree_bp_diameter=7.5 skirt_brim_speed=25 -support_interface_skip_height=0.2 machine_nozzle_head_distance=3 support_bottom_pattern=grid raft_base_wall_count=1 diff --git a/stress_benchmark/resources/059.wkt b/stress_benchmark/resources/059.wkt index c5700df863..8d39cb2c13 100644 --- a/stress_benchmark/resources/059.wkt +++ b/stress_benchmark/resources/059.wkt @@ -1 +1 @@ -MULTIPOLYGON (((84002 36515, 83870 36674, 84000 36783, 83990 38101, 83956 38164, 82287 38370, 78936 38594, 76367 38680, 74287 38697, 71540 38700, 67910 38681, 64513 38625, 62501 38703, 62637 38729, 62389 38851, 64083 38916, 64432 38948, 68107 38937, 69081 38891, 74645 38882, 77180 38945, 79276 38930, 81273 38800, 83408 38611, 83518 38587, 83834 38569, 84071 38598, 83995 39612, 80864 39809, 80928 39827, 80879 39934, 83822 40000, 84029 40044, 84110 40294, 84107 40462, 83799 40587, 79357 40554, 59468 40547, 59459 41106, 62742 41115, 77106 41122, 82193 41084, 100117 41126, 111401 41123, 111562 41820, 111240 41972, 109670 41959, 108712 41941, 107106 41961, 106395 42045, 107192 42138, 109526 42169, 110763 42151, 111388 42192, 111500 42282, 111463 43882, 111617 44000, 111263 43986, 106901 43550, 106654 43505, 106169 43392, 105650 43232, 104125 43182, 101526 43363, 101480 43460, 99825 43707, 97130 44045, 95146 44269, 92962 44346, 88955 44378, 88388 44374, 87835 44386, 85325 44476, 80723 44493, 79521 44508, 74572 44504, 73216 44489, 70920 44434, 69370 44366, 68816 44313, 66917 44444, 66682 44453, 66151 44645, 65924 44648, 65521 44747, 65700 44802, 65510 44865, 67886 44772, 68632 44709, 71448 44648, 78276 44612, 77886 44584, 79960 44578, 80946 44611, 85577 44655, 86532 44651, 88093 44696, 92467 44673, 92754 44665, 95250 44708, 98126 44614, 101310 44602, 101885 44575, 101513 44521, 98824 44500, 96363 44353, 96318 44268, 99786 43831, 102566 43550, 104993 43459, 106432 43552, 111195 44075, 111633 44139, 111544 44201, 111416 44426, 111205 44591, 111492 44837, 111417 45202, 111462 46486, 111012 46569, 102459 46585, 62084 46593, 59414 46583, 59413 47106, 66021 47095, 74553 47101, 73384 48341, 71963 48250, 70106 48187, 67701 48137, 62362 48140, 60033 48127, 59411 48165, 59409 48353, 59870 48382, 65641 48405, 66989 48347, 68767 48363, 70063 48354, 72516 48449, 73232 48502, 71364 50481, 68716 50472, 67397 50504, 63029 50519, 61601 50579, 61135 50660, 62321 50751, 68719 50781, 69279 50792, 71073 50790, 69382 52577, 59399 52571, 59392 53096, 61902 53083, 67688 53091, 68177 53303, 68518 53421, 68885 53393, 69105 53329, 69105 53858, 64849 53832, 59270 53857, 59269 53868, 62043 53909, 63485 53893, 64137 53897, 69105 53865, 69105 55359, 68659 55408, 66656 55365, 65716 55390, 64768 55469, 64495 55529, 65113 55599, 66743 55637, 67064 55625, 69105 55478, 69105 57214, 60970 57222, 59409 57184, 59332 57378, 61035 57336, 69105 57348, 69105 58586, 59323 58600, 59340 59089, 69105 59091, 69105 64525, 68695 64518, 59113 64556, 59113 63270, 59616 63250, 59113 63252, 59113 61679, 61680 61681, 65921 61626, 62894 61570, 59113 61571, 59040 61678, 59055 62113, 59023 62702, 58979 63079, 58978 63576, 58653 63984, 58650 64748, 58539 65085, 58471 65701, 58480 66565, 58014 67192, 57968 67927, 57954 68516, 58585 68879, 58871 68995, 58905 69387, 59067 69569, 59194 71078, 69105 71080, 69105 71542, 64022 71551, 59934 71481, 59504 71284, 59405 71286, 59504 71292, 59885 71545, 65791 71665, 69105 71672, 69105 73461, 67975 73310, 66908 73239, 66541 73278, 66938 73347, 67749 73448, 69105 73591, 69105 73949, 69054 74659, 69097 74795, 69072 75094, 68669 75051, 68232 75164, 67862 75244, 67583 75547, 67423 75876, 67478 75970, 67074 76282, 67042 76388, 66795 76495, 66180 76573, 65963 76544, 61840 76546, 61800 77099, 69105 77098, 69105 82559, 62256 82551, 62263 83081, 69105 83070, 69105 84786, 62231 84775, 62243 84906, 69105 84884, 69105 86551, 68472 86546, 67829 86527, 64216 86480, 62262 86519, 62262 86660, 63186 86666, 66592 86741, 69105 86770, 69105 88553, 62260 88549, 62259 89073, 69105 89087, 69105 90270, 67921 90267, 63819 90154, 62251 90089, 62124 90449, 61771 90174, 61482 90282, 61437 90543, 62245 90489, 64823 90456, 69105 90442, 69105 93051, 67943 93171, 66058 93192, 65171 93232, 61802 93249, 61875 93381, 64402 93378, 66857 93402, 67576 93465, 67820 93499, 68791 93445, 69105 93409, 69105 94521, 64740 94543, 62281 94546, 62281 95101, 69105 95099, 69105 96639, 68813 96630, 68074 96579, 63750 96529, 62279 96466, 62279 96686, 62621 96762, 63717 96820, 64784 96815, 67321 96826, 69105 96759, 69105 97424, 66616 97372, 65560 97423, 67856 97531, 69105 97607, 69105 98687, 67788 98678, 64510 98623, 62500 98703, 62636 98730, 62393 98850, 64083 98914, 64429 98946, 68001 98936, 69105 98885, 69105 100549, 62055 100547, 61996 100703, 62016 101115, 69105 101119, 69105 102022, 68548 102017, 68149 102049, 69105 102081, 69105 104352, 68691 104311, 66435 104443, 66101 104452, 65458 104647, 65187 104648, 64693 104749, 64915 104803, 64686 104864, 67634 104773, 68421 104710, 69105 104691, 69105 106591, 62052 106591, 62021 107096, 69407 107103, 70541 108339, 69041 108248, 67188 108187, 64553 108138, 62047 108140, 62065 108403, 62580 108406, 64060 108347, 65981 108361, 67423 108353, 69913 108449, 70690 108502, 72501 110479, 69596 110472, 68105 110505, 62595 110518, 62252 110529, 62252 110752, 70246 110783, 70929 110794, 72781 110790, 74419 112578, 62256 112574, 62260 113085, 67473 113091, 68094 113303, 68553 113422, 69018 113395, 69552 113235, 70043 113199, 70359 113210, 70520 113086, 74383 113086, 78440 113130, 80415 113120, 85895 113065, 109057 113122, 111516 113165, 111617 114378, 111246 114633, 98580 114589, 97684 114618, 93654 114818, 92306 114929, 89190 115153, 88363 115254, 85510 115263, 85696 115331, 88462 115279, 91830 115086, 94697 114905, 97936 114674, 111239 114643, 111584 114812, 111607 115453, 111604 115855, 111578 116375, 111460 116504, 111557 116715, 111575 118330, 111413 118513, 111174 118580, 95388 118596, 93255 118528, 92938 118563, 92946 118600, 76809 118581, 62279 118593, 62279 119085, 66370 119084, 75934 119109, 79546 119063, 83780 119109, 83988 119232, 84012 119407, 83792 119551, 83127 119574, 79721 119647, 78166 119728, 77903 119765, 77242 119830, 77673 119897, 78926 119903, 83788 119634, 83994 119802, 83972 121045, 84022 121532, 83766 121705, 82810 121694, 80127 121739, 79774 121824, 80965 121862, 83712 121878, 83956 121996, 83607 122295, 83625 122797, 83597 122895, 83507 123431, 83774 123526, 83750 123685, 83991 123971, 84008 124360, 83934 124479, 83732 124547, 71064 124556, 68907 124517, 62286 124540, 62282 124882, 62577 124887, 62755 124950, 63106 124875, 63377 125039, 63545 124889, 65096 124899, 65265 125025, 65161 125377, 65213 125673, 65506 125758, 65604 125708, 65626 125100, 65684 124987, 65741 125002, 66041 124875, 66304 124874, 66370 124954, 66392 125438, 66541 125205, 66572 124952, 66633 124869, 67928 124873, 69205 124931, 69513 125093, 70510 125093, 70514 124958, 71413 124882, 71571 124952, 71566 125094, 71871 125094, 71872 125068, 72020 125094, 72816 125093, 73014 124979, 73398 124905, 76771 124872, 79039 124875, 79060 125096, 79313 125083, 79938 124984, 80152 124988, 80190 124934, 81361 124931, 81519 124965, 81550 124916, 81926 124911, 82145 124994, 82179 124963, 82365 125095, 111454 125102, 111660 125250, 111699 125400, 111455 125668, 111351 125675, 111455 125680, 111718 125879, 111677 126386, 111554 126757, 111258 126784, 110703 126853, 108768 126850, 106450 126929, 110532 127006, 110902 127071, 111525 127107, 111606 127290, 111398 127418, 110650 127638, 110534 127708, 110268 127805, 109950 127858, 109436 127923, 109173 127889, 108764 127910, 108487 128061, 108501 128280, 108304 128375, 108036 128398, 108248 128448, 108866 128505, 109730 128497, 110199 128590, 110372 128709, 111091 128756, 111680 128770, 112043 128499, 112166 128360, 112481 128352, 112487 127566, 112519 127504, 114089 127307, 114504 127272, 116621 127135, 116787 126764, 115223 126866, 113067 127056, 112958 127081, 112642 127099, 112405 127070, 112481 126057, 115610 125860, 115548 125842, 115597 125734, 112654 125668, 112447 125623, 112366 125374, 112369 125206, 112675 125083, 117485 125114, 117770 125099, 117940 125003, 118160 124982, 118705 125035, 118915 124824, 120513 124944, 120682 125115, 124106 125116, 124132 125066, 126672 125087, 126662 125119, 136882 125123, 136878 125100, 137173 125058, 137387 125123, 138822 125121, 139460 125054, 139523 125124, 146725 125117, 146818 125061, 148375 125061, 148420 125114, 148981 125113, 149011 125072, 151019 125085, 151191 125108, 152449 125104, 152622 125060, 154093 125072, 154084 125101, 154161 125103, 154160 124894, 159221 124887, 159564 124950, 160235 124875, 160769 125044, 161075 124889, 164082 124899, 164379 125028, 164353 125106, 165081 125106, 165170 124987, 165279 125002, 165855 124875, 166358 124874, 166484 124954, 166500 125104, 166837 125105, 166873 124952, 166966 124875, 169468 124873, 171913 124931, 172514 125098, 173832 125098, 174305 125381, 174395 125802, 174551 125741, 174411 125116, 174421 124958, 176146 124882, 176449 124952, 176438 125064, 178929 125063, 179211 124979, 179945 124905, 187160 124872, 192014 124875, 192024 125096, 192237 125096, 192237 184077, 144094 184077, 144089 183978, 143597 183967, 143595 184077, 84967 184077, 84925 183841, 85236 183698, 87764 183728, 89370 183708, 90081 183624, 89284 183532, 86950 183499, 85713 183518, 85089 183478, 84978 183388, 85013 181785, 84858 181667, 85212 181680, 89575 182118, 89822 182164, 90307 182276, 90826 182438, 92351 182486, 94952 182307, 94997 182208, 96652 181960, 99346 181625, 101330 181401, 103514 181322, 107521 181288, 108088 181293, 111154 181194, 116132 181172, 116134 181080, 115540 181059, 110899 181015, 109944 181017, 108383 180970, 103722 181003, 101226 180961, 98350 181054, 95166 181067, 94591 181095, 94963 181149, 97652 181170, 100113 181316, 100158 181402, 96690 181836, 93910 182116, 91483 182207, 90044 182116, 85281 181591, 84841 181529, 84930 181469, 85060 181240, 85271 181078, 84984 180832, 85059 180467, 85015 179181, 85464 179101, 94016 179084, 116232 179079, 116232 178583, 104400 178598, 102267 178526, 101950 178562, 101958 178598, 83709 178582, 83705 179101, 83758 179102, 83959 179353, 84032 180592, 83898 180732, 83897 180891, 84046 180975, 83990 181811, 83801 181887, 83600 181883, 83424 182115, 83803 182108, 84005 182176, 84003 182427, 84047 182787, 83837 182990, 83967 183139, 84006 184077, 52457 184077, 51410 184112, 51165 184037, 51135 184159, 50135 184106, 49715 184059, 49376 184166, 49126 184130, 48821 184072, 48410 184032, 48005 184022, 47844 184150, 47717 184177, 47284 184149, 47062 184231, 46983 184210, 46675 184230, 46568 184186, 46421 183664, 46412 183517, 46127 183051, 46239 182724, 46240 166827, 46346 166844, 46444 166290, 46478 165953, 46491 165486, 46319 165268, 46352 164778, 46305 164645, 46218 164560, 46139 164175, 46244 163941, 47004 163900, 47310 163710, 47492 163702, 47794 163809, 47954 163815, 47948 162974, 14721 162990, 14257 162935, 14197 161777, 14314 161698, 14998 161745, 15471 161743, 16818 161765, 18231 161737, 22531 161690, 24039 161689, 24687 161742, 26116 161670, 27712 161482, 29604 161139, 31068 160839, 33422 160598, 47944 160655, 47944 160592, 43563 160502, 40976 160470, 37111 160493, 33491 160586, 33763 160517, 32250 160521, 31409 160575, 30776 160672, 29422 160840, 28798 160954, 25886 161329, 24657 161421, 24147 161495, 19954 161512, 18123 161484, 15956 161488, 14369 161470, 14276 161342, 14195 158762, 14357 158699, 15586 158768, 16986 158800, 22607 158737, 27544 158927, 30347 159080, 31910 159262, 34420 159418, 34916 159438, 38248 159461, 39624 159347, 40314 159311, 44981 159230, 46706 159165, 45010 159125, 38018 159162, 34839 159085, 33556 158992, 31331 158981, 28376 158837, 20392 158568, 16515 158550, 15834 158524, 14407 158498, 14286 158326, 14356 157533, 21940 157501, 47958 157504, 47941 157203, 48069 156736, 26202 156725, 27363 155564, 28103 155551, 27387 155541, 28308 154620, 30348 154651, 30875 154619, 31062 154578, 29687 154555, 28347 154581, 31694 151234, 48047 151238, 48011 150955, 31191 150954, 31191 147771, 31543 147745, 33870 147650, 41024 147635, 42153 147625, 39430 147525, 32674 147497, 31191 147539, 31191 146364, 32766 146256, 33003 146255, 34007 146185, 34421 146011, 34183 145694, 34113 145490, 34153 145444, 39619 145446, 42886 145486, 47946 145481, 47956 144963, 44954 144978, 31191 144985, 31191 143038, 32887 143044, 35929 143009, 36306 142894, 34489 142853, 31191 142841, 31191 142033, 34366 142053, 36911 141979, 37365 141983, 41945 141925, 42732 141903, 48210 141839, 48210 141822, 48734 141640, 48757 141597, 46125 141545, 42483 141546, 39886 141614, 38845 141658, 35155 141754, 32938 141760, 31191 141734, 31191 139493, 47984 139492, 47965 138960, 31191 138961, 31191 136811, 33389 136585, 48173 136640, 48180 136578, 44134 136488, 41621 136456, 37404 136479, 33491 136572, 33763 136503, 32250 136507, 31191 136576, 31191 135164, 31909 135248, 34420 135404, 34930 135424, 38483 135447, 39880 135333, 40569 135297, 45064 135216, 46701 135157, 46463 135142, 45222 135111, 38205 135148, 34839 135071, 33556 134978, 31191 134961, 31191 133488, 47962 133490, 47960 132959, 37902 132985, 31191 132983, 31191 131677, 37951 131859, 41421 131919, 47957 131933, 47955 131687, 37134 131749, 31191 131556, 31191 129376, 32859 129154, 34088 129067, 34599 128993, 41715 128975, 45033 129003, 47944 128998, 47942 128720, 45512 128747, 37378 128796, 34707 128797, 34059 128742, 32629 128816, 31191 128984, 31191 127507, 47937 127497, 47935 126984, 31191 126977, 31191 123628, 32161 123609, 31191 123592, 31191 121484, 47932 121492, 47933 121003, 39606 120974, 34043 120973, 33573 120864, 33289 120860, 32643 120910, 31191 120899, 31191 118794, 31946 118859, 34169 119138, 36374 119212, 36664 119242, 37528 119257, 37795 119228, 37758 119190, 38015 119118, 35122 118979, 32366 118791, 31482 118718, 31191 118704, 31191 115485, 31603 115492, 32325 115521, 33582 115539, 35015 115655, 36706 115651, 37784 115613, 38123 115659, 41105 115664, 42845 115612, 43766 115555, 44869 115644, 45502 115648, 46435 115435, 47942 115466, 47942 114962, 31191 114981, 31191 113519, 34314 113532, 35148 113615, 34903 113497, 35351 113431, 33974 113234, 31191 113223, 31191 112632, 32475 112552, 32391 112543, 47948 112548, 47949 112470, 31883 112433, 31191 112438, 31191 111613, 36305 111597, 42818 111603, 46429 111632, 47949 111666, 47949 111433, 45405 111386, 42272 111416, 34247 111456, 31191 111444, 31191 109486, 47955 109487, 47956 109023, 47985 108957, 47667 108879, 48011 108837, 48022 108804, 46960 108848, 45422 108784, 40522 108839, 36730 108635, 34307 108417, 31910 108268, 31191 108163, 31191 106949, 33077 107044, 34889 107199, 48053 107612, 48043 107516, 38502 107212, 36756 107087, 34455 106972, 33407 106804, 31191 106616, 31191 103515, 47931 103513, 47931 102948, 31191 102935, 31191 97567, 31520 97515, 31837 97518, 33898 97583, 34762 97467, 35161 97456, 36246 97478, 48986 97467, 49088 97259, 48953 96963, 37966 96990, 31191 96986, 31191 95678, 38013 95861, 41484 95922, 47989 95937, 47980 95690, 37197 95751, 32251 95586, 31191 95558, 31191 93387, 32922 93159, 34187 93069, 34869 92995, 42468 92970, 46578 93006, 48171 93003, 48189 92724, 45576 92753, 37690 92800, 35019 92801, 34122 92748, 32695 92819, 31191 92996, 31191 91510, 48161 91501, 48033 90957, 31191 90955, 31191 87769, 31543 87744, 33870 87649, 42153 87625, 39428 87526, 32674 87496, 31191 87538, 31191 86362, 32766 86258, 33003 86256, 34007 86183, 34421 86011, 34183 85693, 34113 85490, 34153 85444, 39619 85446, 42886 85484, 47944 85480, 47942 84962, 44954 84976, 31191 84984, 31191 83040, 32887 83043, 35928 83009, 36306 82895, 34489 82853, 31191 82842, 31191 82031, 34366 82055, 36911 81981, 37365 81985, 41945 81926, 42732 81905, 47931 81844, 47930 81580, 46125 81545, 42483 81545, 39886 81613, 38845 81656, 35155 81753, 32938 81760, 31191 81733, 31191 79495, 47933 79492, 47932 78961, 31191 78963, 31191 76811, 33389 76587, 48730 76642, 48727 76592, 44137 76486, 41621 76454, 37404 76477, 33491 76574, 33763 76501, 32250 76505, 31191 76574, 31191 75162, 31909 75247, 34420 75403, 34930 75424, 38483 75447, 39880 75333, 40569 75297, 45079 75217, 46774 75156, 45222 75112, 38205 75147, 34839 75070, 33556 74978, 31191 74959, 31191 73490, 49908 73490, 50609 72961, 51515 72977, 51507 71735, 51373 71788, 50142 71718, 48044 71686, 37134 71749, 32189 71584, 31191 71558, 31191 69374, 32859 69156, 34088 69065, 34599 68991, 41715 68974, 45033 69002, 48621 68998, 51358 69016, 51451 69145, 51500 70699, 51499 68731, 51414 68789, 50729 68741, 48053 68721, 45513 68749, 37378 68796, 34707 68797, 34059 68744, 32629 68815, 31191 68986, 31191 67509, 51005 67495, 51468 67552, 51499 68128, 51510 64125, 51461 62134, 51461 62599, 50828 62634, 41275 62603, 34320 62618, 31377 62657, 33545 62701, 35190 62720, 42676 62716, 50915 62682, 51461 62713, 51461 63537, 47822 63565, 50810 63648, 51461 63641, 51461 65963, 49693 65967, 51461 65972, 51461 66983, 31191 66978, 31191 63629, 31696 63610, 31191 63593, 31191 61482, 51461 61494, 51469 60917, 51157 61003, 50329 61011, 38922 60973, 34043 60973, 33573 60863, 33289 60860, 32643 60909, 31191 60899, 31191 58793, 31946 58859, 34169 59138, 36374 59210, 36664 59240, 37528 59255, 37795 59226, 37758 59188, 38015 59118, 35122 58981, 32366 58791, 31482 58717, 31191 58704, 31191 55483, 32325 55522, 33582 55538, 35015 55655, 36706 55650, 37784 55611, 38123 55658, 41105 55666, 42845 55614, 43766 55556, 44869 55645, 45502 55648, 46435 55434, 48532 55477, 51447 55501, 51510 55549, 51542 54251, 51469 51294, 51552 48055, 51530 46822, 51425 47469, 51164 47563, 50124 47579, 38502 47211, 36756 47087, 34455 46971, 33407 46803, 31191 46615, 31191 43517, 51227 43515, 51465 43649, 51451 42951, 31191 42937, 31191 37566, 31520 37516, 31837 37519, 33893 37585, 34825 37456, 34987 37477, 48393 37466, 48381 37276, 48584 37089, 48574 36962, 37966 36989, 31191 36987, 31191 35677, 38013 35860, 41484 35920, 48980 35938, 51384 35990, 51452 36084, 52397 36119, 52397 35295, 84007 35295) (115138 183433, 114051 183518, 112864 183593, 111696 183682, 110614 183720, 102788 183724, 101179 183788, 102187 183903, 102902 183930, 105142 183923, 108014 183940, 109837 183995, 110561 184029, 112607 183998, 114790 183854, 115735 183805, 118094 183712, 117688 183595, 117546 183427) (140403 183731, 141284 183731, 141906 183718, 141854 183564, 140346 183531) (119101 183680, 120059 183678, 120050 183504, 119277 183469) (152086 183189, 152064 183287, 153087 183287, 153046 183226, 152661 183161, 152318 183138) (189370 182688, 189080 182681, 188142 182734, 190965 182771, 190776 182721, 190539 182718, 189682 182655) (90699 177110, 89982 177131, 85049 177198, 83725 177204, 83724 177352, 88341 177384, 89540 177339, 91146 177260, 94355 177060, 97202 177001, 103816 176969, 106142 176933, 103853 176899, 96055 176879) (106462 176429, 113537 176473, 116230 176588, 116230 176372, 113815 176358) (83721 175341, 84245 175340, 83721 175320) (106695 174616, 102664 174816, 101316 174928, 98202 175152, 97375 175252, 94523 175262, 94706 175332, 97474 175278, 100840 175085, 103707 174903, 106946 174672, 116236 174653, 116235 174624, 107591 174587) (91718 173813, 91308 173850, 88345 173825, 86377 173826, 83892 173848, 83891 173883, 88334 173923, 92385 174029, 95019 174279, 96785 174536, 97164 174616, 97663 174621, 98830 174667, 101281 174646, 101544 174623, 102191 174523, 101710 174464, 101743 174438, 98365 174359, 97733 174327, 96529 174175, 95437 173988, 93415 173746, 92063 173693) (107621 172548, 102538 172604, 83891 172559, 83891 173092, 87454 173130, 89429 173121, 94907 173065, 116122 173120, 116115 172891, 116501 172581, 113659 172581, 109596 172538) (95768 171022, 95504 171046, 94859 171146, 95337 171206, 95301 171234, 98682 171310, 99313 171341, 100517 171494, 101609 171681, 103632 171923, 104983 171977, 105329 171856, 105740 171818, 108703 171845, 110670 171844, 114913 171802, 108714 171747, 104663 171639, 102029 171389, 100263 171133, 99884 171054, 99386 171048, 98218 171003) (115766 171765, 116526 171645, 116872 171683, 116873 171611, 116412 171591) (99574 170389, 96206 170585, 93339 170767, 90100 170998, 83884 171009, 83884 171057, 89456 171083, 90351 171054, 94382 170852, 95730 170742, 98844 170515, 99673 170414, 102525 170405, 102340 170337) (112785 170328, 113695 170363, 116129 170369, 116129 170323) (83869 169307, 90586 169240, 83867 169204) (107508 168331, 105900 168410, 102692 168608, 99844 168668, 93231 168701, 90906 168737, 93193 168770, 100993 168789, 106349 168560, 107066 168539, 111975 168470, 117637 168457, 117618 168320, 113204 168315, 108708 168285) (46395 168049, 46435 167285, 46351 167027) (83040 166590, 83062 166772, 83695 166858, 83658 167081, 92648 167072, 94781 167140, 95098 167105, 95090 167068, 111227 167091, 116363 167084, 116366 166736, 116290 166579) (112642 163363, 112595 163461, 110941 163707, 108246 164045, 106261 164269, 104077 164348, 100071 164379, 99504 164374, 98951 164386, 96440 164476, 91839 164494, 90635 164507, 85686 164505, 83640 164472, 83623 164642, 89399 164609, 89003 164583, 91077 164576, 92063 164609, 96691 164653, 97648 164651, 99211 164698, 103872 164665, 106364 164709, 109240 164616, 112424 164602, 112999 164573, 112627 164519, 109939 164499, 107478 164352, 107434 164268, 110901 163830, 113680 163552, 116149 163462, 116181 163397, 116714 163227, 115240 163185) (94987 161671, 92800 161814, 91857 161864, 88793 161986, 83893 162007, 83893 162132, 87197 162147, 89111 162245, 92481 162235, 93610 162147, 94762 162074, 95895 161987, 96977 161950, 104803 161944, 106413 161882, 105406 161767, 104691 161738, 102450 161744, 99578 161730, 97755 161673, 97031 161639) (83892 160859, 83812 160931, 83328 160955, 83554 161120, 88262 161122, 93310 161084, 111233 161125, 117965 161123, 117999 161057, 118015 160658, 117944 160574, 83886 160572) (97343 157297, 96214 157340, 94893 157456, 93407 157504, 93888 157570, 95575 157523, 97160 157433, 98020 157357, 98163 157294) (105481 155765, 99918 156171, 94391 156486, 93609 156522, 88900 156656, 87279 156747, 87245 156835, 88424 156886, 90677 156831, 94926 156584, 101523 156123, 105432 155798, 113951 155447) (94674 154109, 94181 154558, 88633 154565, 83873 154535, 83875 155110, 91990 155083, 98646 155086, 99235 155213, 99493 155347, 101300 155341, 101562 155274, 102306 155134, 102784 155078, 116224 155074, 116126 154854, 116124 154534, 113134 154507, 104031 154568, 100235 154560, 98718 154329, 98731 154262, 98136 154137, 97245 154124, 96168 154054) (44056 154197, 43410 154269, 35027 154305, 34765 154298, 35005 154310, 41750 154409, 45263 154414, 47949 154485, 47950 154171) (97177 152599, 97985 152694, 99977 152704, 103065 152693, 105445 152855, 108197 153105, 108748 153142, 109860 153307, 111539 153488, 111841 153507, 113005 153617, 114107 153643, 114433 153586, 115106 153506, 115952 153456, 115950 153254, 115241 153274, 113831 153295, 112906 153221, 112229 153154, 110220 152996, 109410 152998, 108948 152936, 106272 152828, 103396 152630, 101050 152512, 99145 152501) (86252 152194, 86028 152213, 83658 152332, 83591 152597, 83415 152671, 84559 152485, 87537 152314, 91885 152283, 93826 152284, 94750 152238, 91228 152185) (41483 152435, 47973 152652, 48026 152464, 42942 152374) (103435 152252, 104921 152313, 107259 152311, 110774 152270, 108855 152222, 106266 152215) (113605 152266, 115947 152279, 115946 152222) (83701 150259, 83703 150441, 87925 150470, 90881 150480, 92283 150531, 93640 150622, 95661 150818, 98165 150880, 100698 150809, 101999 150783, 103413 150781, 108935 150704, 108831 150682, 108140 150687, 99327 150609, 96985 150549, 94918 150473, 94725 150443, 92874 150322, 91651 150265, 89315 150232) (82903 148601, 82836 148860, 82735 149087, 115952 149091, 115957 148573, 111113 148575, 105842 148595, 99317 148573, 95681 148588, 83619 148591, 83588 148736, 83112 148546) (45879 148717, 45396 148782, 46277 148834, 47929 148848, 47929 148698) (104462 148131, 103165 148184, 101382 148193, 97832 148231, 101174 148283, 103370 148293, 106284 148361, 108221 148346, 108915 148297, 109202 148301, 109621 148233, 108452 148128) (81811 147312, 82216 147310, 83716 147237, 82596 147189, 81814 147186) (95528 147166, 95753 147226, 96086 147240, 97579 147235, 99614 147171, 98071 147115, 95905 147101) (82198 146434, 84381 146516, 87356 146572, 87062 146498, 84557 146466, 82358 146334) (98241 145415, 99095 145521, 104401 145555, 106291 145603, 104490 145537, 102513 145370, 99692 145345) (88231 144698, 87186 144748, 85700 144836, 84830 144868, 82804 144912, 82830 145004, 84788 145022, 88771 144927, 90354 144874, 91355 144760, 90159 144676) (111283 144490, 111044 144521, 111295 144561, 113661 144552, 114202 144510, 112236 144479) (98072 143582, 97128 143591, 92467 143683, 99212 143771, 100672 143823, 103531 143819, 106060 143701, 105136 143542, 100300 143538) (93753 142570, 82618 142559, 82524 143106, 87044 143107, 98765 143087, 102275 143165, 103380 143167, 105438 143098, 116827 143108, 117089 142861, 116831 142560, 116479 142560, 116050 142615, 116020 142562, 100387 142581, 96876 142503, 95771 142501) (95623 141853, 93092 141967, 94017 142126, 98852 142130, 101080 142086, 102024 142077, 106684 141985, 99941 141899, 98480 141846) (85488 141116, 84947 141158, 86916 141191, 87870 141178, 88108 141147, 87857 141107) (110381 140741, 108798 140795, 107797 140911, 108993 140992, 110921 140971, 113452 140833, 114323 140801, 116183 140761, 116194 140660, 114364 140646) (43662 140745, 44708 140835, 47433 140921, 47967 140930, 49087 140929, 48952 140636, 46355 140635) (94662 140131, 96639 140298, 99458 140325, 100912 140253, 100059 140148, 94751 140113, 92861 140065) (112090 139170, 114595 139202, 115968 139284, 115971 139199, 114771 139152, 111796 139100) (101573 138433, 99536 138497, 101082 138553, 103247 138567, 103624 138503, 103399 138442, 103066 138428) (115436 138431, 115958 138454, 115959 138404) (90931 137322, 90236 137371, 89948 137367, 89530 137436, 90698 137541, 94690 137537, 95987 137485, 97770 137476, 101320 137439, 97978 137386, 95782 137377, 92868 137307) (48053 137433, 48694 137447, 48603 137411) (83829 134522, 83858 134826, 84070 134917, 83897 135073, 83898 135957, 83724 136273, 83180 136987, 83558 137095, 88001 137094, 93308 137073, 99834 137097, 103471 137080, 115823 137077, 115945 137105, 115941 136581, 85172 136581, 84957 136438, 84933 136252, 84987 136031, 84954 134619, 84719 134479) (106893 134859, 105594 134885, 104179 134887, 98655 134967, 98759 134989, 99450 134985, 108266 135059, 110608 135119, 112672 135195, 112867 135225, 114718 135348, 115935 135403, 115934 135160, 115272 135135, 113954 135046, 111933 134850, 109425 134788) (85986 130416, 85681 130719, 85497 131092, 85421 131525, 85470 131937, 85640 132304, 85930 132590, 86296 132772, 86691 132816, 87097 132759, 87495 132561, 87723 132334, 87689 132334, 87879 131962, 87945 131557, 87871 131107, 87965 131106, 87781 130721, 87491 130442, 87131 130268, 86663 130196) (35304 122616, 31377 122657, 34286 122701, 36647 122719, 44134 122713, 47932 122699, 47933 122620, 42755 122602) (62288 121655, 65235 121624, 62286 121581) (77266 120920, 74274 121018, 72174 121039, 74983 121073, 77764 121137, 80935 121099, 81501 120999, 80452 120939, 78958 120914) (42252 119874, 42350 119945, 45935 120038, 47954 120047, 47955 119863, 43532 119803) (81686 117108, 80970 117129, 76059 117198, 71458 117213, 62276 117215, 62279 117341, 74832 117353, 79327 117383, 80526 117339, 82135 117259, 85344 117061, 88192 117000, 94805 116967, 97130 116934, 94843 116898, 87043 116879) (44319 116671, 44315 116682, 39135 116754, 45051 116796, 46642 116797, 47944 116851, 47943 116568, 47592 116561) (97450 116428, 104501 116470, 107972 116619, 109431 116599, 110926 116505, 109718 116424, 108188 116381, 104805 116358) (70867 115328, 69027 115365, 68714 115409, 66151 115365, 64959 115389, 63776 115468, 63437 115527, 64203 115598, 66262 115635, 66954 115610, 69215 115480, 69471 115453, 70101 115435, 71734 115348, 75250 115342, 74341 115306, 71754 115298) (82707 113813, 82296 113850, 79333 113823, 77365 113824, 73121 113866, 79322 113921, 83373 114029, 86006 114281, 87772 114537, 88152 114616, 88650 114622, 89818 114669, 92267 114648, 92530 114624, 93177 114524, 92698 114464, 92733 114439, 89354 114358, 88723 114327, 87519 114174, 86427 113988, 84403 113745, 83052 113693) (71309 114065, 71624 114079, 72268 113903, 71510 114025, 70106 113867) (62264 113834, 62264 113895, 69903 113861, 63888 113833) (62255 111629, 68952 111609, 70706 111566, 62254 111529) (62198 109180, 63373 109165, 64582 109108, 64789 109077, 62188 109051) (45260 106425, 47933 106455, 47931 106372, 45986 106370) (41161 104890, 39726 104877, 34783 104917, 35147 104980, 36190 105024, 44910 105069, 47929 105056, 47929 104876) (62739 102284, 62192 102513, 62238 102620, 63044 102396, 64100 102161, 63365 102058) (62270 97356, 62271 97393, 62810 97390, 62498 97356) (45879 88716, 45396 88783, 46277 88836, 47958 88848, 47957 88698) (43662 80746, 44708 80837, 47433 80920, 47933 80927, 47932 80638, 46355 80634) (67726 74836, 65975 74926, 65054 75048, 61703 75405, 61691 75528, 62936 75447, 66296 75034, 66620 75020, 67710 74895, 67933 75012, 68472 75010, 68507 74817) (59259 72057, 59383 72489, 60257 72555, 61989 72571, 64285 72489, 63755 72400, 61708 72370, 60104 72397, 59415 72388, 59373 72127, 59241 71516, 59222 71494) (42252 59874, 42350 59944, 45935 60036, 50151 60057, 51407 60075, 51474 60140, 51476 59882, 51332 59958, 47980 59864, 43532 59803) (44319 56671, 44315 56682, 39135 56753, 45051 56794, 46643 56795, 49933 56930, 50748 56899, 51315 56923, 51491 56988, 51491 56685, 51434 56728, 50235 56645, 49784 56602, 47593 56562) (59056 54750, 59113 55059, 59113 54534) (59403 51528, 59403 51638, 66696 51607, 68158 51566, 61849 51528) (60698 49042, 59407 49102, 59408 49245, 65332 49164, 66594 49109, 66798 49078, 62757 49031) (51492 45161, 51505 46377, 51326 46537, 49728 46398, 48741 46373, 45978 46370, 45253 46423, 48343 46459, 51327 46540, 51529 46796, 51499 45130) (51387 44866, 41161 44890, 39726 44878, 34783 44918, 35147 44982, 36190 45026, 44910 45069, 51301 45034, 51499 45099, 51487 44578) (54807 42335, 54447 42520, 54159 42805, 53975 43167, 53911 43569, 53974 43964, 54159 44329, 54447 44615, 54807 44799, 55209 44863, 55609 44799, 55969 44615, 56257 44329, 56441 43967, 56505 43569, 56441 43167, 56472 43000, 56295 42884, 56257 42805, 55969 42518, 55609 42335, 55209 42273) (59419 43537, 59681 43520, 60398 43519, 61189 43503, 60664 43438, 60439 43432, 59418 43370) (63930 42283, 63490 42513, 63526 42618, 64177 42394, 65031 42162, 64437 42057) (83870 41672, 81685 41815, 80741 41864, 77677 41984, 69346 42023, 68701 42018, 68371 42051, 70099 42093, 70430 42119, 76079 42149, 77995 42246, 81348 42238, 82493 42146, 83627 42074, 84779 41986, 85862 41948, 93688 41945, 95297 41882, 94289 41766, 93574 41738, 91334 41745, 88462 41729, 86639 41674, 85903 41641) (59430 41939, 59421 42149, 60625 42114, 60816 42043, 60759 41938) (51461 40732, 51485 41779, 51654 41555, 51604 40723) (65577 37422, 69032 37592, 71940 37776, 75014 37820, 75835 37742, 75264 37652, 72293 37509, 70829 37479, 69086 37417, 66671 37371) (61791 37372, 61791 37391, 62829 37389, 62646 37369) (75855 36625, 73095 36700, 73432 36717, 77272 36800, 78592 36838, 81427 36833, 83375 36783, 83647 36675, 82520 36562, 77812 36544) (61710 36590, 61927 36611, 62630 36763, 63717 36819, 64802 36815, 67397 36826, 69848 36738, 71926 36709, 68934 36630, 68174 36579, 63758 36531, 62535 36481, 61686 36436)), ((205778 119109, 205987 119234, 206013 119407, 205792 119551, 205127 119574, 201722 119647, 200168 119728, 199904 119765, 199243 119830, 199674 119897, 200927 119903, 205788 119634, 205993 119798, 205974 121057, 206022 121532, 205765 121705, 204810 121694, 202128 121739, 201775 121824, 202965 121862, 205712 121878, 205956 121996, 205607 122295, 205625 122797, 205598 122895, 205532 123295, 192237 123295, 192237 124540, 190905 124517, 178876 124558, 159393 124539, 158209 124574, 157063 124555, 156135 124515, 155319 124503, 153735 124370, 153171 124373, 152319 124434, 152058 124362, 150765 124355, 149679 124416, 149111 124485, 148316 124362, 147658 124621, 146550 124582, 144196 124557, 144140 124515, 144074 123740, 144067 123452, 144198 123357, 145263 123428, 145781 123478, 147239 123524, 149051 123409, 150294 123401, 154169 123313, 148637 123253, 147409 123252, 145707 123133, 144979 123162, 144332 123134, 144087 123027, 144093 120274, 144194 120184, 144328 120135, 145938 120218, 148580 120288, 149334 120206, 149218 120126, 147074 120020, 145100 120000, 144226 119975, 144067 119824, 144169 119166, 144505 119077, 144828 119070, 150787 119109, 154567 119111, 155054 119223, 155306 119225, 155885 119182, 157452 119193, 158182 119268, 158708 119181, 159547 119114, 159983 119109, 160851 119231, 161347 119159, 161742 119163, 163483 119218, 163875 119207, 164592 119111, 165320 119090, 166137 119105, 188291 119084, 197834 119110, 201545 119063) (176385 123260, 172711 123299, 176669 123323, 177543 123316, 179351 123250) (166823 121584, 171268 121591, 170324 121661, 174090 121680, 181957 121679, 187229 121624, 183469 121569) (151227 120838, 151342 120949, 155977 121273, 157233 121377, 159906 121496, 157527 121260, 156573 121176, 154595 120927, 152809 120863, 152361 120818, 151418 120794) (199267 120920, 196274 121018, 194175 121039, 196983 121073, 199763 121137, 202937 121099, 203503 120999, 202453 120939, 200958 120914)), ((143148 119097, 143547 119179, 143631 121509, 143591 121842, 143466 121931, 138992 122147, 138105 122149, 137126 122164, 137772 122230, 138051 122236, 139577 122311, 140471 122298, 141116 122254, 143489 122175, 143627 122202, 143623 123411, 143398 123583, 142565 123578, 139555 123513, 137831 123555, 137589 123625, 137661 123730, 141281 123730, 143392 123682, 143600 123826, 143597 124086, 143569 124473, 143360 124553, 139988 124563, 119514 124545, 114283 124584, 96359 124543, 85074 124545, 84915 123847, 85236 123697, 87764 123728, 89370 123707, 90081 123625, 89284 123532, 86950 123498, 85713 123516, 85089 123476, 84978 123386, 85013 121785, 84858 121668, 85212 121681, 89575 122119, 89822 122165, 90307 122276, 90826 122438, 92351 122488, 94952 122305, 94997 122208, 96652 121961, 99346 121623, 101330 121399, 103514 121324, 107521 121290, 108088 121294, 108641 121282, 111154 121192, 115754 121176, 116955 121162, 121904 121166, 123260 121181, 125557 121234, 127108 121304, 127660 121357, 129989 121226, 130331 121217, 130990 121023, 131270 121021, 131770 120921, 131547 120867, 131781 120805, 128759 120897, 127945 120960, 124988 121022, 118194 121058, 118590 121086, 116516 121092, 115530 121059, 110899 121015, 109944 121017, 108383 120970, 103722 121005, 101226 120960, 98350 121056, 95166 121068, 94591 121095, 94963 121149, 97652 121169, 100113 121317, 100158 121400, 96690 121838, 93910 122117, 91483 122208, 90044 122118, 85281 121593, 84841 121530, 84930 121469, 85060 121242, 85271 121078, 84984 120832, 85059 120467, 85014 119180, 85464 119099, 94016 119083, 134996 119075) (115136 123432, 114052 123516, 112864 123592, 111696 123683, 110614 123720, 102788 123724, 101179 123786, 102187 123903, 102902 123932, 105142 123925, 108014 123939, 109837 123995, 110561 124029, 112606 123998, 114791 123853, 115734 123804, 118799 123684, 127130 123645, 127814 123650, 128226 123617, 126750 123577, 126379 123551, 120397 123521, 118480 123423) (133432 123274, 132376 123508, 133110 123612, 133737 123386, 134282 123156, 134236 123049)), ((173969 113113, 174262 113216, 174263 114309, 174171 114437, 173569 114421, 171766 114337, 167935 114209, 164202 114215, 163813 114251, 160147 114268, 167252 114296, 170212 114483, 171734 114568, 172845 114579, 174129 114547, 174126 114654, 174280 114714, 174347 116125, 174157 116235, 173167 116107, 171485 116026, 168940 116051, 168504 116117, 164275 116147, 161175 116056, 164061 116212, 166553 116282, 169745 116291, 171465 116377, 172899 116356, 174150 116409, 174275 116478, 174219 117563, 174260 118146, 174092 118529, 173753 118587, 142657 118563, 135927 118572, 123063 118564, 118366 118615, 112463 118546, 112332 118099, 112301 117870, 112561 117761, 116313 117730, 118248 117747, 119806 117737, 120742 117667, 121240 117515, 115240 117534, 112673 117598, 112315 117502, 112262 116423, 112459 116370, 113078 116340, 115070 116360, 116056 116413, 121295 116786, 121946 116842, 125105 117168, 126308 117271, 128660 117418, 130467 117481, 133024 117532, 139049 117529, 141689 117541, 143185 117461, 147279 117486, 154045 117466, 157454 117433, 158145 117415, 157720 117386, 155443 117353, 152223 117329, 146215 117335, 143003 117361, 141721 117287, 135149 117265, 133665 117323, 131786 117306, 130373 117314, 127965 117218, 127234 117166, 122785 116802, 122338 116756, 117093 116345, 113983 116115, 112533 116095, 112261 115994, 112261 115785, 112372 115093, 112538 114987, 117238 114967, 119298 115039, 121025 115131, 122599 115167, 125398 115185, 130025 115197, 131482 115165, 136642 115150, 138285 115089, 138780 115008, 137312 114919, 129653 114887, 129045 114876, 125429 114880, 124883 114894, 122494 114908, 121049 114891, 117553 114745, 117100 114692, 113528 114688, 112632 114761, 112342 114646, 112456 113187, 113003 113086) (134946 116502, 133715 116560, 133491 116592, 138007 116639, 140364 116628, 142135 116552, 146506 116506, 145122 116444, 145136 116414, 143708 116402) (155424 116462, 159699 116532, 160425 116486, 160692 116428, 158777 116396) (149645 115695, 151936 115707, 154846 115808, 153938 115725, 151809 115677) (131482 114062, 129841 114102, 137313 114141, 141384 114140, 148260 114119, 154703 114218, 154676 114187, 152897 114105, 150653 114058, 140332 114029) (122961 113937, 124054 113980, 123870 113953, 123010 113928, 121838 113866)), ((159010 107145, 159234 107302, 159728 107797, 159606 107932, 159337 107965, 158955 108062, 159155 108163, 159240 108158, 160141 108237, 160194 108224, 160969 109024, 161322 109351, 161594 110167, 160604 110167, 159172 110098, 159048 110084, 156843 109975, 154846 110001, 154367 109977, 153100 109957, 151543 109994, 147973 109992, 146968 110032, 147665 110077, 147863 110122, 148150 110156, 153090 110144, 153806 110257, 154690 110313, 157283 110323, 157402 110337, 158734 110402, 159458 110485, 160228 110485, 161255 110409, 161532 110408, 161448 110517, 161443 110598, 161230 111032, 160312 111036, 159943 111139, 159893 111240, 160769 111348, 162255 111382, 162152 110133, 162116 109797, 162247 109757, 164034 109634, 164960 109508, 166153 109505, 168297 109461, 168198 109437, 165823 109371, 165557 109372, 164456 109324, 164027 109377, 162914 109398, 164004 108271, 164228 108124, 164740 108131, 165883 108177, 166864 108152, 166893 108065, 166681 107988, 165278 107959, 164359 107993, 164420 107854, 165118 107147, 167035 107145, 168449 107197, 173540 107159, 178307 107164, 184638 107207, 189131 107160, 189801 107829, 189824 107985, 188705 107960, 188202 108012, 188023 108072, 188161 108159, 189118 108167, 189975 108148, 190080 108262, 190442 108565, 191881 109878, 191566 109889, 188702 109362, 188432 109226, 188394 109184, 187542 109141, 186288 109329, 186436 109420, 185815 109625, 184514 109911, 183626 110121, 183224 110201, 182105 110240, 182000 110264, 180558 110296, 180147 110289, 179742 110306, 178668 110382, 174030 110395, 172202 110350, 171824 110331, 171002 110322, 170645 110247, 169387 110356, 169227 110533, 168956 110656, 169073 110697, 169011 110760, 170254 110644, 170626 110597, 171494 110573, 172048 110576, 176278 110544, 178712 110571, 179786 110617, 182057 110590, 183296 110637, 184470 110553, 188215 110534, 191836 110534, 191836 110744, 191749 111098, 191889 112076, 191903 112362, 191672 112435, 185409 112400, 167759 112410, 167716 112356, 167575 112354, 167609 112409, 162581 112379, 162331 112300, 162262 111470, 162200 111654, 162154 112127, 161658 112417, 152006 112419, 147443 112395, 138176 112449, 134654 112452, 132430 112478, 132213 112306, 132162 111936, 132213 111901, 133447 111837, 133288 111793, 133196 111702, 132899 111661, 132689 111520, 132593 111514, 132577 111281, 132416 110545, 132754 110541, 133602 110760, 134295 110871, 135496 110886, 137024 110825, 140133 110818, 140468 110876, 141545 110862, 142152 110832, 142365 110771, 143112 110736, 142973 110613, 143059 110590, 142030 110539, 140363 110617, 136668 110609, 135588 110523, 133818 110306, 132718 110113, 133318 109012, 133557 108779, 133734 108694, 133930 108783, 134575 108851, 135963 108854, 137324 108792, 138682 108775, 139880 108795, 140534 108870, 142303 108852, 143022 108778, 143288 108645, 144060 108498, 144001 108876, 144014 108912, 143745 109323, 141375 109312, 139839 109386, 138895 109459, 138266 109488, 137529 109581, 136714 109618, 136280 109720, 136760 109804, 138275 109763, 139817 109555, 140188 109535, 141688 109408, 142697 109432, 143752 109432, 143840 109377, 144286 109389, 144352 109447, 146389 109483, 147285 109392, 147522 109353, 149125 109270, 149851 109212, 153288 109206, 155163 109264, 155826 109217, 156626 109223, 157207 109171, 157232 109023, 155744 108946, 153846 108955, 152331 109028, 151614 109028, 150769 108951, 149390 108946, 148315 108982, 147094 109181, 145995 109270, 145163 109271, 145126 109248, 144506 109278, 144518 108863, 145073 108673, 145134 108715, 145257 108350, 145355 108416, 148996 108398, 150534 108409, 150631 108363, 150491 108334, 148483 108328, 146407 108288, 145276 108294, 145175 108258, 144676 108184, 144445 108196, 143973 108384, 143130 108479, 142442 108541, 140520 108583, 138917 108642, 138372 108642, 137210 108620, 136577 108542, 134321 108563, 133754 108673, 133793 108538, 135053 107302, 135294 107191, 136401 107145, 140012 107186, 142035 107141, 146145 107142, 151406 107184, 157701 107141) (152019 110746, 151366 110977, 150605 111286, 149841 111562, 150677 111382, 151978 111067, 152618 111043, 154278 111013, 154658 110914, 154450 110825, 153863 110735) (144211 110440, 144077 110740, 144397 110824, 144851 110909, 144939 110460, 144828 110334, 144597 110313) (176791 107863, 176491 107904, 175284 108001, 171031 108016, 169946 108119, 169283 108117, 169284 108059, 169146 108117, 168700 108156, 168391 108285, 168129 108467, 168088 108543, 169123 108183, 169927 108146, 174458 108180, 175129 108269, 176784 108261, 177351 108165, 177690 108125, 178255 108031, 178692 107977, 182178 107974, 183162 107908, 182216 107818, 181932 107777, 179155 107746, 178667 107685, 177815 107680)), ((98915 107130, 99146 107235, 100177 108242, 100253 108365, 99924 108342, 100094 108511, 100349 108500, 100455 108616, 100576 108635, 100908 108932, 101340 109634, 101521 109683, 101365 109676, 101459 109831, 101777 109811, 101754 109883, 101852 109946, 101744 110339, 101903 110365, 101880 110689, 102146 110584, 102154 110415, 102001 109761, 102055 109718, 102204 109714, 102269 109523, 102904 109169, 103409 108665, 103622 108630, 103947 108278, 103836 108211, 104823 107184, 105115 107133, 107978 107113, 111160 107132, 128883 107133, 129138 107284, 129173 107296, 131343 109462, 131644 109797, 131361 109854, 131401 109897, 131026 110115, 127214 110106, 125858 110135, 125947 110159, 127764 110204, 129488 110201, 130988 110164, 130998 110211, 131690 110198, 131647 110445, 131399 111203, 131794 111212, 131772 111674, 131873 111741, 131816 112323, 131653 112448, 128596 112449, 126602 112399, 120755 112437, 115849 112432, 109488 112389, 102207 112436, 102216 112325, 102047 112310, 101941 111290, 101931 110981, 101882 110954, 101881 111394, 102001 111870, 101953 112322, 101701 112336, 101644 112361, 93766 112371, 93180 112345, 90270 112356, 88684 112421, 80711 112399, 80169 112432, 79671 112358, 76805 112366, 76104 112346, 76077 112380, 75800 112402, 74788 112378, 73731 111335, 73755 111304, 74031 111310, 73685 110971, 73304 110932, 73269 110892, 73314 110609, 72973 110268, 73235 110264, 72989 109912, 72711 109904, 72594 109866, 72773 109607, 72635 109385, 73683 108277, 73859 108169, 74007 108179, 74199 107999, 74050 107988, 74133 107852, 74775 107236, 75001 107156, 75203 107153, 75383 107099) (125717 111185, 125194 111356, 125654 111424, 126049 111311, 126306 111111, 126133 111090) (74948 111341, 74614 111369, 75011 111381, 75589 111330) (87821 111146, 82785 111199, 80450 111194, 80558 111207, 87462 111220, 87858 111213, 87948 111226, 89158 111144, 88280 111133) (101881 110918, 102294 111011, 102229 110743, 101879 110689) (88984 109561, 88904 109585, 89077 109600, 91071 109624, 91564 109659, 92986 109641, 92678 109608, 90853 109534) (76264 108798, 76033 108929, 76226 108969, 77050 109045, 77709 109074, 78383 109091, 78011 108892, 77113 108854, 76893 108797)), ((188855 109509, 189201 109527, 191054 109895, 191689 110012, 191847 110125, 191828 110397, 191667 110471, 189050 110429, 185038 110418, 184491 110370, 184059 110257, 183994 110199, 187068 109513, 188137 109434)), ((132088 80351, 132100 80698, 131668 82937, 131570 83294, 131434 83512, 131392 83547, 131349 84410, 131537 85661, 131628 85512, 131833 86135, 132119 87435, 132329 88323, 132410 88724, 132451 89846, 132474 89949, 132505 91392, 132497 91803, 132514 92207, 132592 93280, 132603 97920, 132559 99748, 132541 100125, 132532 100946, 132456 101304, 132564 102563, 132742 102723, 132866 102993, 132908 102876, 132971 102937, 132853 101697, 132806 101324, 132781 100455, 132784 99901, 132754 95668, 132780 93237, 132827 92162, 132800 89891, 132847 88652, 132762 87479, 132742 84557, 132742 81104, 132953 81167, 133307 81537, 134284 82442, 134570 82722, 134644 82977, 134608 86909, 134618 103536, 134564 103579, 134562 103672, 134617 103645, 134587 106715, 134508 106965, 132343 109101, 132007 109405, 131965 109303, 131844 107913, 131716 106990, 131713 105797, 131669 103653, 131645 103752, 131579 106127, 131581 106393, 131535 107493, 131588 107920, 131606 109039, 130479 107944, 130332 107720, 130339 107208, 130388 106065, 130360 105084, 130275 105055, 130198 105267, 130169 106670, 130201 107590, 130062 107530, 129356 106833, 129355 104915, 129407 103501, 129367 98408, 129372 93641, 129415 87312, 129369 82818, 130048 82147, 130193 82123, 130185 82785, 130168 83243, 130220 83747, 130280 83926, 130367 83789, 130376 82791, 130356 81920, 130501 81687, 130773 81419, 132045 80344) (130028 89735, 129988 90019, 129969 92116, 129954 92794, 129893 93283, 129891 94134, 130071 95159, 130113 95459, 130209 96666, 130227 100918, 130329 102004, 130327 102664, 130269 102662, 130326 102800, 130364 103250, 130493 103558, 130675 103821, 130751 103862, 130394 102822, 130356 102023, 130390 97490, 130480 96819, 130470 95163, 130373 94597, 130334 94257, 130240 93694, 130187 93257, 130184 89773, 130118 88788)), ((162514 80880, 162638 81057, 162558 81767, 162517 82495, 162485 83800, 162499 85365, 162548 86299, 162564 92260, 162545 95954, 162523 96426, 162529 97064, 162578 97072, 162566 92262, 162603 85065, 162644 84157, 162754 82802, 162735 82077, 162655 81072, 162829 81158, 164387 82691, 164614 82943, 164605 87896, 164219 87649, 164178 87742, 164400 88225, 164012 88242, 163727 87669, 163575 87536, 163067 87302, 163024 87588, 163038 87749, 162985 90035, 162978 92695, 163204 95265, 163245 95456, 163240 96220, 163315 97903, 163327 99623, 163330 104516, 163310 105624, 163284 106464, 163219 106762, 162803 107018, 162309 107495, 162080 107602, 161747 107898, 161779 107977, 161784 108230, 161756 108271, 161802 108775, 161864 109009, 162044 109283, 161662 109211, 161427 108906, 160814 108383, 160613 108185, 160473 107965, 160292 107863, 160127 107626, 160166 103244, 160144 100619, 160129 100234, 160300 99798, 160314 99623, 160130 99240, 160150 98709, 160190 96160, 160286 94642, 160295 94381, 160412 93860, 160504 93302, 160711 92494, 160833 92221, 160896 91519, 160869 90235, 160815 90377, 160742 89793, 160695 90321, 160658 90241, 160550 92039, 160397 92632, 160224 93079, 159978 94043, 159950 94605, 160051 94812, 160054 97362, 160083 99295, 160218 99682, 160075 100157, 160057 102516, 160087 107587, 159939 107500, 159488 107071, 159407 106902, 159354 101060, 159576 100875, 159722 100716, 159718 100563, 159505 100233, 159396 99806, 159354 98442, 159375 96776, 159359 93507, 159418 84180, 159411 82884, 160611 81733, 160810 81657, 160758 81779, 160800 82029, 160788 86686, 160777 87518, 160791 88053, 160845 88268, 161104 90329, 161297 91487, 161344 91823, 161426 92165, 161448 96639, 161476 99983, 161464 100068, 161512 101339, 161588 101568, 161545 102732, 161525 102761, 161543 103460, 161637 103981, 161707 103987, 161780 103832, 161812 103083, 161829 102871, 161806 102457, 161783 102385, 161733 102023, 161653 101302, 161622 100681, 161552 99922, 161546 97115, 161556 93767, 161550 93426, 161494 92025, 161344 90663, 161127 89039, 160929 87718, 160921 81528, 161025 81337, 161664 80710, 161948 80647)), ((101982 94980, 102787 94938, 102896 94892, 102918 98067, 102954 101184, 102958 104691, 102978 105075, 102977 106241, 103011 108181, 102887 108404, 102116 109124, 102023 108988, 102144 106880, 102107 105872, 101995 104857, 101942 106962, 101821 107960, 101789 108501, 101799 108816, 101711 108809, 101531 108631, 101168 108300, 100963 108007, 101163 107419, 101190 107169, 101314 106857, 101421 103786, 101413 103667, 101407 101790, 101473 99485, 101424 98534, 101442 96445, 101472 96107, 101661 94816)), ((31584 108412, 35792 108665, 36397 108724, 38847 108856, 38447 108902, 37214 108990, 35497 109037, 34203 109018, 32537 109049, 31191 109043, 31191 108380)), ((70286 79814, 70527 80081, 70754 80006, 71579 79901, 72899 81068, 72977 81196, 72930 82540, 72914 82716, 73008 84778, 73091 84696, 73144 84286, 73148 83827, 73219 83388, 73211 81700, 73136 81385, 73239 81465, 73407 81676, 73610 81789, 74764 82969, 74744 95230, 74793 96104, 74793 96465, 74752 98120, 74780 102349, 74775 106961, 74682 107201, 74308 107524, 73755 108130, 73620 108162, 73535 107563, 73505 107251, 73451 107488, 73418 107884, 73430 108326, 73214 108626, 73051 108631, 73034 106166, 73078 104948, 73085 104496, 73189 103562, 73249 103194, 73245 102391, 73179 101498, 73040 102157, 72918 104625, 72887 105087, 72902 105742, 72927 108640, 72967 108656, 72962 108702, 72766 108937, 71932 109038, 71046 108578, 70835 108442, 70877 107978, 70845 105935, 70816 105430, 70791 105245, 70762 105336, 70711 106221, 70711 106747, 70792 108412, 70535 108167, 70165 107883, 70008 107646, 69776 107264, 69666 107235, 69495 106969, 69497 106308, 69530 106135, 69948 106309, 69953 106352, 69970 106328, 69932 105940, 69821 105305, 69756 105349, 69515 104618, 69501 103800, 69517 99441, 69534 97942, 69507 95158, 69529 92815, 69541 79951, 69611 79761) (71423 103241, 71403 103336, 71406 104048, 71461 105319, 71610 107272, 71704 107843, 71747 107585, 71757 107133, 71557 105220, 71498 102385) (69775 93625, 69692 93891, 69687 94937, 69757 96028, 69754 97698, 69774 98304, 69819 99010, 69825 102676, 69862 104020, 69875 103597, 69868 99038, 69859 98979, 69894 98438, 69917 97578, 69875 96176, 69953 95836, 69964 93752, 69880 93631, 69840 93230) (74082 95383, 74056 96106, 74057 97367, 74127 98634, 74162 100733, 74202 102239, 74228 100960, 74300 99277, 74301 98326, 74351 97499, 74348 95249, 74193 94847) (70840 97385, 70806 98878, 70811 99568, 70861 99912, 70906 99499, 70900 98719, 70861 97352, 70853 95478) (72206 89101, 72203 89896, 72222 92789, 72389 96033, 72433 98394, 72548 99048, 72635 98048, 72601 96638, 72472 95825, 72442 95507, 72263 92763, 72255 92409, 72259 89241, 72237 88998) (73370 91468, 73365 92491, 73399 92670, 73423 92474, 73437 92117, 73418 90084)), ((103884 81751, 104632 82462, 104728 82685, 104676 85904, 104671 95701, 104709 103114, 104672 106559, 104427 106874, 103489 107841, 103249 108074, 103045 108152, 103034 107866, 103074 97329, 103093 96375, 103138 94944, 103160 94555, 103267 94128, 103115 93811, 103203 92615, 103163 91729, 103138 90727, 103234 89932, 103291 89632, 103292 88813, 103448 87550, 103544 86203, 103709 84580, 103729 84488, 103720 82610, 103781 81697)), ((100628 81448, 100585 81797, 100574 82704, 100596 83749, 100654 84821, 100655 85564, 100611 85805, 100693 86455, 100883 87066, 101264 87838, 101479 88179, 101544 88423, 101672 89034, 101689 89293, 101698 89767, 101654 92971, 101631 93455, 101353 96330, 101349 96667, 101190 100623, 101149 102559, 101148 103282, 101032 104729, 100996 106188, 101003 107273, 100960 108006, 100823 107968, 99511 106683, 99471 106487, 99489 95678, 99488 89261, 99446 87738, 99429 82751, 99540 82499, 100601 81421) (100890 93175, 100849 93650, 100855 94403, 100908 94674, 100953 94651, 100992 94168, 100986 93400, 100949 93145)), ((164607 106391, 164641 106350, 164653 106781, 164517 107112, 164142 107479, 163739 107841, 163933 107383, 163897 107364, 163937 106859, 164158 106590, 164599 106346)), ((163391 89582, 163600 90326, 163989 90450, 164341 90540, 164375 90503, 164390 90577, 164642 90614, 164659 98032, 164641 104837, 164617 105828, 164638 106234, 164159 106583, 163994 106645, 163853 106767, 163582 106958, 163495 106500, 163466 105493, 163458 104441, 163477 97986, 163554 96295, 163485 95431, 163381 95042, 163191 93578, 163140 92300, 163156 88953, 163300 88931)), ((141712 105172, 143385 106869, 142215 106869, 141588 106217, 137152 101749, 137152 101762, 135007 99623, 135007 98462)), ((137650 102410, 140561 105306, 141865 106681, 142015 106869, 140218 106869, 139270 105973, 139208 105935, 139418 106164, 139427 106164, 140127 106869, 139234 106869, 137234 104821, 135007 102687, 135007 101031, 136167 102149, 136412 102267, 135715 101443, 135007 100749, 135007 99753)), ((135867 91710, 135562 91810, 135708 92040, 136068 92193, 136030 92683, 135672 92551, 135271 92682, 135058 92964, 135267 93203, 137381 95381, 139877 97890, 142359 100075, 142554 100220, 143276 100948, 144942 102513, 146460 104018, 149311 106869, 147276 106869, 146602 106364, 146072 105872, 145373 105271, 139674 99573, 138357 98332, 136990 97160, 135007 95490, 135007 93656, 135533 94107, 138405 96965, 135007 93543, 135007 91499, 135019 91219, 135007 90853) (142663 101249, 142992 101603, 143454 102059, 143496 102048, 140146 98709)), ((189007 91828, 185473 95408, 183327 97465, 182985 97541, 182818 97740, 182903 97788, 183008 97597, 183354 97568, 186289 94789, 189007 92104, 189007 94298, 188593 94629, 188089 95090, 187939 95270, 188007 95271, 188566 94867, 188592 94832, 189007 94523, 189007 96265, 188630 96748, 186604 99440, 186319 99763, 183281 102903, 180267 105905, 179999 106142, 180024 106142, 179167 106869, 176612 106869, 177259 106029, 177974 105214, 180550 102622, 180639 102383, 177483 105460, 176889 106088, 176904 106088, 176155 106869, 174441 106869, 174768 106676, 174901 106681, 175105 106527, 175358 106385, 176008 105640, 176891 104515, 177191 104254, 177311 104104, 177330 104005, 177192 103699, 176883 103699, 176775 103497, 177161 103102, 177824 102388, 178722 101542, 180848 99415, 181000 99186, 182098 98136, 182370 97887, 189007 91254) (182802 100710, 182932 100970, 183227 101276, 182914 101540, 182712 101734, 182436 101875, 182450 102065, 182201 102328, 181948 102258, 182057 102496, 181650 102922, 181326 103320, 181632 103104, 182570 102220, 182787 102004, 183136 101563, 183285 101289, 182994 100574, 183070 100512, 183915 100785, 183984 100701, 184114 100410, 183850 100721, 183370 100501, 183343 100531, 183024 100394) (186138 98465, 184252 100293, 184584 100105, 185094 99578, 186706 97969) (182015 98404, 181812 98488, 181390 98884, 181199 99169, 181142 99356, 180963 99826, 180678 100114, 180554 100282, 180682 100210, 181087 99828, 181338 99358, 181732 98795, 182373 98258, 182374 98193, 182492 98042) (186402 95726, 186101 95916, 185871 96130, 184811 97166, 184118 97887, 183671 98320, 182911 97778, 182840 97884, 182373 98273, 182369 98384, 182426 98456, 182508 98417, 182849 97994, 182824 97913, 183306 98144, 183737 98427, 184191 98043, 185095 97161, 186091 96087, 187205 94941)), ((135792 96382, 136482 96965, 138040 98207, 138421 98476, 142381 102393, 142467 102490, 145397 105383, 145461 105462, 146597 106532, 146936 106788, 147011 106869, 145157 106869, 144817 106353, 144664 106184, 144246 106000, 141275 102966, 139625 101178, 139199 100588, 138739 100005, 138145 99140, 138002 98849, 137395 98150, 136191 96983, 136270 97133, 135690 96651, 136100 97118, 135988 97054, 137584 98790, 138019 99427, 138305 99942, 139061 101023, 139594 101593, 139844 101719, 140053 101917, 142327 104187, 144259 106074, 144689 106328, 145014 106869, 144136 106869, 143061 105836, 141137 103859, 141106 103858, 138055 100837, 135007 97761, 135007 95770)), ((136478 94170, 136490 94079, 137145 94613, 137647 94934, 137917 95005, 138244 94593, 138136 94319, 138434 94540, 138533 94359, 145449 101273, 145434 101273, 151023 106869, 149510 106869, 149094 106475, 145168 102534, 143581 100839, 142708 100061, 142271 99762, 140787 98531, 139575 97386, 136953 94747, 136239 94053)), ((139545 87764, 140458 88792, 143138 91446, 144815 93040, 153086 101343, 153697 101909, 154437 102811, 155176 103768, 155866 104259, 155910 104390, 156556 104997, 156882 105338, 157171 105534, 157390 105921, 157854 106136, 158380 106574, 158667 106869, 157319 106869, 157139 106760, 156647 106322, 153456 103283, 150950 100779, 153473 103308, 156942 106869, 154067 106869, 153286 105813, 152455 104861, 151939 104191, 150938 102963, 149845 101829, 149013 100923, 142196 94037, 139717 91595, 139514 91531, 141364 93435, 149611 101638, 150901 103128, 151712 104139, 152100 104653, 152467 105335, 153301 106220, 153491 106481, 153842 106869, 151689 106869, 151540 106702, 151483 106417, 151126 106157, 150468 105482, 150225 105129, 149988 105006, 149641 104736, 149399 104567, 149149 104102, 148875 103976, 148732 103780, 148133 103107, 147890 102882, 147575 102677, 147339 102506, 140507 95647, 140491 95610, 138246 93352, 138222 93366, 135007 90228, 135007 87897, 135135 87968, 135925 88726, 136568 89367, 138533 91283, 138253 90976, 135007 87562, 135007 83246) (145008 94910, 149680 99510, 145388 95199, 145012 94832, 144933 94736, 143217 93188)), ((189007 105513, 188856 105669, 188602 106012, 188255 106416, 188781 106108, 189007 105884, 189007 106438, 188582 106869, 185141 106869, 187894 104407, 188719 103769, 189007 103506)), ((189007 87385, 188791 87601, 188615 87798, 187154 89256, 184679 91699, 183890 92543, 184284 92214, 184559 91998, 185288 91297, 187212 89328, 189007 87528, 189007 88782, 188619 89210, 187979 89678, 186928 90501, 186593 90849, 186340 91013, 185299 91920, 183835 93107, 183524 93410, 182528 94288, 181905 94859, 181074 95760, 181143 95860, 181526 95543, 182398 94683, 183695 93365, 184603 92634, 186107 91489, 186435 91225, 186944 90918, 187787 90316, 187886 90234, 188510 89772, 189007 89297, 189007 90561, 188777 90739, 184921 94630, 183783 95754, 182966 96254, 182865 96095, 182718 96169, 182686 95987, 182339 96377, 182136 96450, 181799 96770, 181705 97039, 181014 97762, 181227 98321, 179560 99994, 176872 102643, 173632 105887, 172953 106624, 172698 106869, 171139 106869, 171826 106181, 172653 105320, 172926 105049, 173500 104549, 173970 104124, 174469 103586, 174616 103351, 174874 103091, 175071 102787, 175104 102682, 174856 102818, 174778 102714, 175007 102392, 175598 101409, 175732 101057, 176911 99659, 179493 97009, 179619 96826, 179576 96841, 179047 97322, 176268 100093, 175335 101195, 175198 101421, 174988 101637, 174233 103187, 174338 103167, 174114 103447, 172960 104706, 172883 104807, 172025 105754, 170912 106869, 167560 106869, 168260 106172, 168912 105352, 169011 105214, 169545 104660, 169677 104457, 170671 103427, 173320 100756, 177090 97035, 177677 96513, 178399 95930, 179300 95291, 180386 94256, 181559 92974, 182790 91741, 185066 89413, 185081 89260, 184805 89515, 180656 93622, 179704 94477, 178826 95284, 178717 95352, 177102 96748, 176503 97297, 176536 97242, 176250 97514, 173104 100721, 171828 101987, 170167 103496, 169452 104130, 168827 104851, 168246 105594, 167945 106016, 167651 106375, 167129 106869, 165402 106869, 165885 106346, 167975 104243, 170717 101517, 174653 97576, 174662 97576, 189007 83298)), ((135659 103546, 136041 103874, 138773 106527, 139111 106869, 138084 106869, 137695 106484, 136436 105280, 135574 104373, 135488 104261, 135007 103774, 135007 102902)), ((174641 105965, 175104 106270, 174947 106425, 174684 106406, 174358 106663, 174119 106869, 173382 106869, 174408 105799)), ((135409 104419, 135525 104512, 136409 105354, 137869 106869, 136513 106869, 135718 106080, 135351 105762, 135007 105418, 135007 104058)), ((189007 99625, 187903 100672, 186370 102207, 185200 103276, 184287 104230, 184065 104559, 183962 104637, 183894 104788, 184239 104618, 186289 102553, 186582 102151, 187095 101623, 189007 99728, 189007 101043, 187470 102610, 188250 101834, 188937 101180, 189007 101171, 189007 103197, 187941 104265, 185111 106869, 181387 106869, 185304 102923, 188152 100108, 189007 99230)), ((189007 98574, 184481 103113, 180716 106869, 179264 106869, 179467 106699, 180295 105960, 181975 104291, 183301 102908, 184055 102221, 186204 100058, 186697 99522, 187435 98646, 187842 98077, 187842 98052, 188826 96670, 189007 96484)), ((129077 103720, 128692 104109, 127488 105370, 126581 106231, 126470 106317, 125984 106797, 125110 106797, 125754 106145, 126082 105764, 128735 103031, 129077 102693)), ((129077 101586, 128182 102534, 128145 102596, 128373 102386, 128373 102377, 129077 101677, 129076 102574, 127029 104574, 124897 106797, 123240 106797, 124359 105637, 124476 105392, 123655 106089, 122958 106797, 121960 106797, 124620 104154, 127514 101243, 128889 99941, 129077 99792)), ((129077 99589, 128426 100216, 123957 104652, 123970 104652, 121831 106797, 120672 106797, 127380 100092, 129077 98419)), ((129077 105292, 128290 106086, 127974 106453, 127629 106797, 126266 106797, 126630 106395, 126721 106279, 127563 105396, 129077 103935)), ((129077 84485, 128968 84666, 128534 85157, 125495 88348, 122988 90854, 125520 88331, 129077 84871, 129077 87737, 128025 88519, 127072 89352, 126401 89868, 125171 90866, 124037 91959, 123131 92791, 116247 99608, 113803 102087, 113739 102290, 115645 100441, 119278 96778, 123846 92193, 125336 90903, 126348 90096, 126862 89707, 127543 89339, 128428 88504, 128689 88313, 129077 87962, 129077 90102, 128914 90266, 128625 90321, 128365 90678, 127691 91336, 127339 91579, 127214 91816, 126945 92165, 126775 92406, 126311 92657, 126184 92929, 125988 93072, 125315 93671, 125090 93914, 124885 94230, 124714 94466, 117855 101297, 117818 101313, 115560 103558, 115574 103582, 112445 106797, 110107 106797, 110178 106670, 110935 105880, 111576 105237, 113495 103271, 113187 103551, 109773 106797, 105454 106797, 109974 102259, 111001 101349, 113681 98642, 115248 96989, 123552 88718, 124118 88108, 125023 87367, 125977 86632, 126468 85938, 126598 85895, 127207 85251, 127548 84924, 127745 84635, 128129 84414, 128344 83953, 128782 83425, 129077 83139) (117408 96419, 117041 96794, 116946 96872, 115396 98587, 117120 96798, 121718 92124)), ((76615 100711, 79026 103093, 81839 105941, 82719 106797, 82327 106797, 81278 105696, 79743 104160, 78674 102990, 77718 102078, 77389 101855, 77311 101752, 77161 101684, 77331 102029, 79397 104078, 79799 104372, 80327 104886, 82222 106797, 80907 106797, 79339 105263, 80114 106044, 80769 106727, 80780 106797, 78751 106797, 77683 105731, 75079 102898, 75079 99177)), ((75272 92559, 75267 92693, 75423 92895, 75565 93150, 76330 93818, 77434 94682, 77696 94983, 77846 95102, 77944 95121, 78249 94982, 78251 94674, 78452 94565, 78846 94951, 79560 95617, 80407 96513, 82534 98640, 82762 98792, 83814 99889, 84063 100162, 90696 106797, 90120 106797, 86540 103263, 84486 101119, 84409 100775, 84209 100611, 84161 100694, 84353 100798, 84384 101145, 87159 104081, 89846 106797, 87650 106797, 87322 106383, 86859 105879, 86679 105729, 86679 105798, 87083 106356, 87117 106382, 87426 106797, 85683 106797, 85201 106421, 82508 104396, 82186 104110, 79049 101071, 76043 98059, 75806 97791, 75806 97816, 75079 96958, 75079 94404, 75921 95051, 76736 95768, 79327 98341, 79567 98432, 76489 95274, 75860 94680, 75860 94694, 75079 93946, 75079 92234) (83492 100216, 83550 100339, 83990 100627, 84035 100614, 83805 101096, 83523 101527, 83906 101981, 84788 102885, 85862 103882, 87008 104997, 86222 104194, 86032 103895, 84782 102601, 84063 101908, 83630 101461, 84170 100703, 84066 100630, 83684 100175, 83564 100159) (81843 102376, 82370 102886, 83980 104498, 83483 103929, 81658 102044) (78846 99425, 79730 100360, 79946 100577, 80387 100927, 80661 101077, 81376 100787, 81438 100864, 81163 101708, 81247 101776, 81542 101906, 81227 101642, 81447 101160, 81417 101133, 81554 100814, 81238 100593, 80978 100723, 80673 101019, 80263 100545, 80216 100504, 80075 100227, 79884 100242, 79621 99994, 79692 99738, 79454 99848, 79028 99441, 78629 99117) (81739 98474, 82120 98879, 82590 99128, 83153 99523, 83695 100172, 83763 100173, 83907 100284, 83712 100018, 83544 99808, 83460 99605, 83064 99181, 82779 98991, 82593 98933, 82123 98755, 81834 98470, 81666 98345)), ((75602 83675, 77708 85764, 80431 88507, 84370 92445, 98651 106797, 94563 106797, 94347 106581, 94152 106405, 92694 104946, 90250 102469, 89406 101680, 89736 102076, 89950 102350, 90652 103078, 92624 105004, 94421 106797, 93167 106797, 92738 106409, 92270 105769, 91448 104719, 91100 104384, 90936 104132, 90029 103090, 88842 101625, 88540 101315, 87661 100320, 87089 99695, 86189 98864, 86088 98933, 86406 99317, 87266 100188, 88584 101485, 89315 102393, 90459 103899, 90724 104226, 91031 104735, 91634 105578, 92177 106302, 92651 106797, 91387 106797, 91211 106567, 87318 102711, 86195 101574, 85696 100756, 85853 100655, 85779 100508, 85961 100479, 85571 100129, 85498 99927, 85178 99592, 84909 99497, 84186 98804, 83627 99020, 81955 97353, 79307 94665, 76061 91421, 75325 90744, 75079 90495, 75079 88929, 75767 89618, 76628 90446, 76899 90720, 77824 91764, 78363 92261, 78597 92408, 78857 92665, 79162 92862, 79266 92894, 79131 92647, 79235 92569, 79557 92799, 80540 93390, 80893 93523, 82291 94703, 84939 97283, 85122 97409, 85108 97367, 84626 96838, 81855 94059, 80753 93128, 80528 92991, 80313 92778, 78761 92022, 78782 92128, 78503 91904, 77241 90749, 77141 90674, 76194 89817, 75079 88698, 75079 85351, 75778 86050, 76598 86703, 76738 86803, 77289 87336, 77492 87468, 79275 89201, 81192 91112, 84913 94881, 85437 95468, 86020 96189, 86658 97090, 87694 98178, 88976 99351, 90209 100582, 92537 102858, 92688 102873, 92433 102597, 88328 98447, 87473 97494, 86666 96616, 86598 96508, 85200 94894, 84651 94296, 84706 94330, 84434 94043, 81228 90894, 79961 89619, 78452 87959, 77818 87244, 77098 86618, 76356 86036, 75931 85734, 75574 85441, 75079 84921, 75079 83196)), ((129077 96647, 128561 96988, 128393 97140, 128208 97560, 125174 100529, 123386 102179, 122796 102605, 122214 103065, 121351 103659, 121035 103816, 120360 104409, 119192 105614, 119343 105535, 118859 106114, 119328 105704, 119264 105816, 120999 104220, 121636 103785, 122151 103499, 123231 102744, 123801 102210, 123927 101960, 124125 101752, 126395 99477, 128282 97546, 128536 97115, 129077 96790, 129077 97668, 128045 98743, 126070 100668, 126070 100698, 123042 103752, 119971 106797, 117978 106797, 118594 106013, 119176 105322, 120415 103764, 120684 103383, 124601 99423, 124698 99337, 127594 96408, 127674 96343, 128741 95208, 128997 94870, 129077 94795)), ((77541 105684, 78179 106509, 78442 106797, 76437 106797, 76281 106647, 75937 106392, 75532 106045, 75840 106573, 76064 106797, 75510 106797, 75079 106372, 75079 102934)), ((75249 97259, 75988 98087, 77658 99766, 79043 101091, 79728 101846, 81890 103996, 82426 104488, 83302 105228, 83872 105635, 83896 105635, 85280 106616, 85464 106797, 83375 106797, 78835 102271, 75079 98507, 75079 97056)), ((129077 94528, 128575 95202, 128084 95732, 127483 96431, 121781 102130, 120540 103448, 119368 104814, 117698 106797, 115864 106797, 116315 106271, 119173 103399, 115748 106797, 113060 106797, 113918 105937, 114018 106242, 114250 106097, 114405 105738, 114891 105778, 114761 106136, 114893 106536, 115172 106746, 115411 106537, 117591 104423, 120099 101927, 122285 99445, 122430 99250, 123158 98528, 124721 96862, 129077 92487) (120917 101658, 123457 99141, 123811 98812, 124267 98350, 124256 98308)), ((183845 83166, 183798 83199, 182709 84542, 182854 84525, 182347 85322, 181515 86562, 180626 87831, 179661 88851, 179593 88951, 178321 90266, 177978 90597, 177660 90939, 176753 91956, 175431 93333, 172135 96634, 170492 98223, 169972 98652, 169629 98891, 168550 100118, 168443 100477, 168235 100846, 168341 100794, 168288 100935, 169389 99677, 169713 99284, 170505 98458, 170981 97987, 174666 94253, 176945 92016, 177696 91302, 177959 91064, 179968 89019, 181125 87927, 182108 86824, 186028 82869, 188651 82869, 185098 86393, 167744 103756, 165007 106509, 165007 102504, 165315 102182, 165286 102190, 165479 101961, 165393 101955, 165007 102284, 165007 99307, 169716 94563, 169716 94544, 174416 89852, 180898 83425, 181439 82869, 184162 82869) (178607 86566, 178302 86817, 175577 89495, 175062 89927, 174213 90769, 173333 91898, 173071 92217, 171957 93469, 167925 97526, 166977 98627, 166318 99279, 166266 99272, 166219 99377, 165833 99811, 165705 100111, 165699 100362, 165758 100404, 166264 99399, 167011 98602, 171328 94340, 172056 93736, 173611 92170, 174084 91564, 174382 91210, 174862 90601, 175256 90133, 178612 86775, 179475 85821)), ((79767 83105, 79758 83076, 79987 83269, 79993 83185, 79666 82797, 82641 82797, 87385 87506, 87404 87507, 92096 92208, 98525 98688, 99079 99231, 99079 101952, 98784 101637, 98751 101590, 97406 100499, 97424 100644, 96628 100138, 95388 99305, 94119 98416, 93099 97451, 92998 97383, 91683 96112, 91351 95769, 91010 95451, 89994 94546, 88617 93224, 85314 89926, 83727 88282, 83298 87762, 83059 87419, 81832 86340, 81472 86233, 81102 86025, 81154 86132, 81013 86079, 82274 87181, 82665 87505, 83492 88297, 83962 88772, 87695 92458, 89934 94736, 90884 95751, 92916 97748, 94021 98917, 95124 99898, 99079 103820, 99079 106442, 95175 102507, 78194 85534, 75428 82797, 79444 82797) (81544 83551, 82551 84057, 83348 84802, 87608 89118, 88212 89846, 89778 91401, 90384 91875, 90738 92173, 91348 92654, 91817 93050, 95174 96402, 96127 97265, 95131 96094, 92454 93368, 92023 92853, 91179 92004, 90051 91122, 89733 90861, 88480 89748, 84422 85717, 83322 84769, 82669 84110, 82676 84058, 82571 84011, 82137 83625, 81837 83497, 81586 83490)), ((137921 82962, 138917 83910, 137933 82869, 142437 82869, 147773 88161, 147947 88683, 148722 89444, 148898 89524, 149398 89811, 158676 99074, 159007 99422, 159007 100720, 158649 100367, 159007 100771, 159007 104458, 158432 103880, 157431 102920, 154925 100363, 154639 100154, 155001 100589, 156617 102199, 157635 103244, 158785 104445, 159007 104659, 159007 106332, 156953 104299, 156014 103337, 155923 103052, 156042 102817, 156230 102661, 156327 102643, 156292 102526, 156164 102461, 156018 102529, 155758 102411, 155741 102362, 155556 102146, 155494 101994, 155671 101926, 155441 101869, 155292 101618, 155231 101309, 154980 101129, 154851 101154, 154766 101228, 154639 101203, 154538 101243, 154341 101155, 154046 101054, 153839 100862, 153769 100755, 153301 100565, 153377 100666, 137188 84471, 135555 82869, 137764 82869) (141672 84279, 142226 84903, 143531 86176, 144855 87210, 145304 87592, 148626 90290, 150302 91599, 153575 94499, 153997 94887, 158514 99368, 154060 94889, 153662 94501, 150413 91600, 149943 91211, 147453 89217, 145191 87307, 144544 86741, 144399 86630, 142591 84937, 141766 84248) (143975 87547, 144979 88454, 145637 89008, 146128 89385, 146247 89410, 145832 88999, 145230 88462, 144643 88005, 144244 87681, 143913 87458, 143173 86723) (141153 84673, 140135 83612, 139978 83494)), ((122577 83155, 122979 82797, 126666 82797, 126088 83372, 125128 84373, 122572 86881, 122363 87167, 122798 86806, 124407 85187, 125452 84169, 126653 83019, 126868 82797, 128540 82797, 126508 84851, 125546 85790, 125260 85882, 125025 85762, 124869 85574, 124851 85477, 124734 85512, 124670 85640, 124737 85786, 124621 86046, 124572 86063, 124355 86248, 124203 86310, 124134 86135, 124077 86363, 123826 86516, 123519 86575, 123339 86825, 123362 86954, 123436 87038, 123411 87165, 123451 87266, 123363 87463, 123263 87758, 123071 87965, 122965 88035, 122773 88503, 122874 88427, 106724 104570, 105081 106248, 105081 104040, 105173 103883, 106122 102887, 105081 103871, 105081 99367, 110369 94033, 110891 93859, 111652 93082, 111732 92906, 112021 92406, 121283 83128, 121632 82797, 122929 82797) (105823 101669, 105705 101827, 106883 100652) (117097 87744, 116709 88142, 113808 91391, 113419 91861, 111425 94351, 109516 96614, 108949 97262, 108838 97406, 107145 99213, 106457 100038, 106489 100132, 107111 99578, 108385 98276, 109418 96950, 109800 96500, 112498 93178, 113807 91502, 116707 88229, 117095 87808, 121579 83290) (111207 95972, 110670 96574, 110213 97161, 109889 97560, 109666 97891, 108931 98632, 109755 97829, 110664 96825, 111217 96167, 111594 95676, 111620 95557)), ((115888 105508, 115465 105785, 115001 105401, 115348 105085, 115911 105006)), ((129077 92296, 128683 92714, 124742 96636, 123049 98223, 122271 99095, 121970 99535, 120739 101017, 119594 102229, 116955 104851, 116261 105565, 116380 105326, 116291 105314, 116821 104659, 117145 104157, 117216 103887, 116801 103560, 116527 103668, 116748 103370, 116569 103271, 123481 96355, 123481 96370, 129077 90781)), ((115336 105062, 114995 105396, 114838 105171, 115434 104446)), ((96503 100221, 97853 101199, 98830 102069, 99079 102414, 99079 103724, 98238 102860, 95635 100233, 95155 99684, 94802 99179, 94759 99052)), ((147637 83544, 148660 84515, 148761 84584, 150078 85861, 150412 86205, 150754 86524, 151772 87437, 153153 88765, 156464 92072, 158058 93719, 158493 94239, 158813 94600, 159007 94770, 159007 97606, 158544 97164, 154240 92806, 153630 92079, 152058 90517, 151454 90038, 151101 89739, 150492 89252, 150023 88855, 146654 85490, 145699 84622, 146703 85793, 148737 87854, 149390 88527, 149825 89041, 150670 89893, 151797 90780, 152116 91044, 153370 92165, 157440 96214, 158540 97167, 159007 97693, 159007 98863, 153121 93030, 149770 89670, 143315 83167, 143007 82869, 146691 82869)), ((119376 83260, 115017 87567, 114287 88174, 112726 89747, 112247 90349, 111948 90703, 111462 91314, 111064 91783, 107698 95151, 106832 96106, 107699 95353, 108002 95101, 110736 92414, 111250 91979, 112101 91134, 112989 90007, 113254 89688, 114377 88434, 118422 84364, 119379 83264, 119903 82797, 121072 82797, 115239 88685, 111879 92034, 105375 98489, 105081 98797, 105081 95113, 105755 94167, 106724 93144, 106793 93044, 108069 91726, 108413 91392, 108733 91050, 109646 90034, 110973 88654, 114280 85340, 115928 83747, 116448 83312, 116809 82991, 116980 82797, 119815 82797)), ((175910 87849, 175381 88015, 174622 88789, 174546 88966, 174263 89468, 165290 98457, 165007 98723, 165007 98262, 169190 94105, 169577 93708, 172460 90461, 172845 89990, 174823 87495, 176717 85233, 177279 84586, 177327 84505, 178790 82869, 180845 82869)), ((87843 86984, 88240 87370, 91487 90252, 91958 90637, 94453 92613, 96719 94507, 97366 95070, 97446 95118, 99079 96581, 99079 98639, 94099 93702, 93935 93171, 93161 92413, 92982 92337, 92480 92055, 83491 83080, 83226 82797, 83686 82797)), ((178149 83295, 177829 83563, 176805 84890, 176426 85339, 173756 88666, 172458 90347, 169576 93618, 169190 94040, 168649 94596, 165007 98258, 165007 91516, 173650 82869, 178563 82869) (176521 83913, 176439 83982, 175536 84986, 174988 85645, 174615 86137, 174592 86258, 175003 85844, 175538 85243, 175989 84654, 176309 84254, 176528 83921, 177274 83170)), ((99079 91440, 99079 96356, 98654 95940, 98386 95619, 97058 94597, 96609 94218, 93282 91547, 91602 90250, 88330 87370, 87909 86984, 87352 86443, 83690 82797, 90435 82797) (96105 92793, 96706 93328, 97295 93779, 97694 94100, 98027 94318, 98778 95065, 98035 94311, 97966 94229, 96963 93328, 96304 92779, 95812 92407, 95691 92384)), ((102985 81273, 103431 81326, 103516 81457, 103409 82170, 103417 84258, 103491 84868, 103367 86192, 103305 86994, 103156 88168, 103015 88595, 102831 89952, 102807 90936, 102840 91021, 102948 91457, 103061 93165, 103024 93291, 103052 93312, 103086 93846, 102889 94144, 102837 94377, 102710 94466, 102635 94385, 102367 94487, 102090 94165, 101878 94135, 101736 94023, 101846 92478, 101891 91504, 101878 89698, 101849 88705, 101775 88202, 101651 87866, 101553 87316, 101356 86911, 101253 86671, 101054 86100, 100946 85652, 100886 85469, 100869 83843, 100908 82600, 100907 82133, 100978 81163, 101021 81075, 101844 80237)), ((159007 92011, 159007 94417, 158123 93563, 157816 93235, 154070 89536, 151825 87249, 150870 86233, 148819 84218, 147686 83018, 147456 82869, 149858 82869)), ((115771 83681, 115443 83989, 111744 87734, 109459 89982, 108441 90934, 106426 92985, 105236 94110, 105081 94349, 105081 91937, 114223 82797, 116627 82797)), ((136730 93148, 136798 93703, 136300 93678, 136018 93257, 136403 92789)), ((137358 93224, 136746 93128, 136408 92783, 136635 92630)), ((76149 92200, 75983 92433, 75679 92896, 75525 92741, 75544 92474, 75287 92150, 75079 91910, 75079 91175)), ((105081 91284, 105081 89262, 105864 88501, 106819 87638, 107698 86828, 107806 86759, 109422 85352, 110021 84799, 109987 84853, 110273 84580, 112055 82797, 113473 82797)), ((153303 83655, 154166 84610, 154979 85489, 155047 85598, 156452 87211, 157005 87812, 156951 87779, 157224 88065, 159007 89845, 159007 91265, 150520 82869, 152542 82869)), ((172405 83061, 171404 84178, 168684 86828, 165007 90484, 165007 88861, 168651 85230, 169018 84854, 169113 84777, 170837 82869, 172594 82869)), ((96719 86442, 97095 86808, 97173 86903, 99079 88628, 99070 88929, 99079 89093, 99079 90384, 98887 90195, 97770 89195, 95121 86476, 91465 82797, 93088 82797)), ((155450 83367, 155554 83302, 155200 82869, 156788 82869, 157348 83410, 157890 83213, 159007 84347, 159007 87183, 156650 84880, 156483 84794, 156967 85324, 157591 85935, 159007 87358, 159007 89551, 157805 88338, 157804 88314, 156734 87233, 156207 86646, 155620 85924, 154974 85025, 153932 83936, 153167 83249, 152796 82869, 154945 82869)), ((164460 88822, 164494 89151, 164293 88913, 164277 88689)), ((164208 88612, 164189 88920, 163820 89074, 163471 88653, 163581 88341)), ((107089 85157, 107002 85324, 107532 84840, 108143 84216, 109566 82797, 111759 82797, 110546 84000, 110523 84001, 109441 85071, 108854 85597, 108134 86184, 107236 86830, 106146 87875, 105460 88639, 105081 89008, 105081 86859, 105577 86354, 105513 86252, 105081 86604, 105081 85016, 105620 84456, 105423 83915, 106555 82797, 109392 82797)), ((170652 83063, 168937 84848, 165007 88846, 165007 86732, 165651 86103, 166987 84740, 168495 83251, 168919 82869, 170827 82869)), ((95846 83441, 97210 84777, 98697 86285, 99079 86708, 99079 88617, 98885 88442, 97102 86727, 93103 82797, 95216 82797)), ((132605 80942, 132679 81240, 132639 83885, 132626 86911, 132579 87457, 132468 87891, 132408 87955, 131721 84879, 131642 83865, 131717 83332, 131736 83090, 132223 80744, 132332 80573)), ((185068 83712, 182443 86315, 181894 86793, 181388 87146, 181262 87190, 182429 85447, 183409 84096, 184279 83118, 184620 82869, 185934 82869)), ((165668 85880, 165007 86517, 165007 83298, 165433 82869, 168633 82869)), ((99079 83223, 99079 86425, 96069 83458, 95431 82797, 98652 82797)), ((189382 77634, 189533 77902, 189432 77951, 189621 77992, 189859 78147, 190259 78566, 190297 78633, 190571 78957, 190300 79070, 187503 79152, 187480 79162, 190367 79269, 190451 79291, 190930 79332, 191126 79496, 191115 79588, 190925 79808, 190944 79902, 190723 80018, 190502 80042, 190207 80102, 190101 80069, 189896 80085, 189558 80254, 189480 80459, 189264 80559, 188835 80586, 188798 80658, 189144 80686, 189070 80817, 188721 81173, 188444 81377, 187634 82080, 187525 82189, 186916 82527, 186359 82610, 179792 82660, 179515 82396, 178753 82406, 178617 82481, 178227 82637, 166761 82652, 166518 82434, 166424 82332, 166024 81948, 165775 81641, 168140 81662, 168180 81654, 166510 81514, 165591 81354, 165127 81404, 164558 81322, 164278 81434, 163970 81485, 163174 80658, 163113 80549, 165122 80420, 165647 80415, 165898 80346, 164225 80293, 163542 80303, 163484 80329, 162931 80374, 162762 80259, 163298 78955, 163539 78757, 164001 78202, 164175 78019, 164399 77870, 164809 77837, 164747 77814, 164488 77781, 164603 77599, 164875 77395, 168390 77388, 168474 77531, 168358 77799, 168168 78060, 168062 78152, 168101 78217, 168242 78167, 168385 78007, 168585 77913, 168883 77942, 168769 78146, 168714 78116, 168745 78205, 168984 78069, 169140 78143, 169213 78339, 169485 78278, 169672 78042, 169884 77856, 170071 77773, 170347 77624, 170627 77643, 171092 77414, 186849 77418, 189060 77382) (183570 80945, 182236 81159, 181723 81216, 179273 81566, 178434 81696, 176909 81968, 173954 82244, 173486 82276, 167994 82306, 172463 82332, 173277 82385, 173908 82321, 176853 82064, 179673 81615, 181888 81355, 182602 81288, 182762 81260, 184628 81173, 185504 81069, 185646 80974, 185122 80895) (182672 80254, 181737 80310, 181038 80388, 180511 80478, 180415 80551, 180887 80548, 181555 80498, 182171 80402, 183547 80335, 183404 80292, 184320 80257, 182872 80234) (185857 80305, 186996 80307, 187879 80274, 186964 80281, 185356 80267) (164582 78676, 163640 78757, 164183 78859, 166471 78868, 166748 78852, 167131 78863, 169650 78821, 169954 78760, 169535 78704, 167814 78708, 165430 78653)), ((165215 81692, 165379 81780, 165353 81891, 165483 82027, 165383 82128, 165287 82130, 165123 82410, 165129 82581, 165090 82597, 164457 82001, 164242 81784, 164184 81691, 164710 81711, 164822 81570)), ((144475 80866, 145429 80884, 147249 80950, 147676 81059, 147995 80907, 149189 80995, 150078 80952, 151077 80929, 151703 81000, 152174 81080, 152991 81083, 154257 81240, 155601 81336, 157224 81501, 157316 81521, 159195 81511, 160107 81571, 160054 81676, 159342 82423, 159123 82520, 155899 82467, 146251 82463, 138690 82501, 135245 82464, 134930 82219, 133963 81280, 133730 81041, 133654 80833, 133940 80822)), ((92122 77157, 94146 77202, 97757 77158, 98867 77205, 99105 77316, 100366 78547, 100403 78678, 99837 78569, 97581 78550, 96948 78628, 95787 78649, 95242 78650, 93639 78588, 91715 78546, 91028 78485, 90186 78391, 89714 78206, 89483 78192, 88983 78266, 88882 78301, 87752 78298, 85672 78335, 83666 78341, 83527 78371, 83625 78416, 85160 78406, 88802 78424, 88900 78357, 89024 78721, 89087 78678, 89640 78870, 89647 79282, 89034 79251, 88998 79275, 88164 79272, 87065 79185, 85844 78988, 84768 78952, 83389 78957, 82545 79030, 81829 79032, 80314 78959, 78416 78951, 76924 79029, 76950 79176, 77531 79227, 78330 79221, 78995 79268, 80869 79210, 84307 79214, 85033 79272, 86635 79354, 86872 79394, 87769 79482, 89806 79457, 89860 79410, 90104 79373, 90330 79396, 90407 79446, 91356 79442, 92471 79410, 93971 79538, 94339 79556, 95881 79762, 97398 79804, 97877 79720, 97444 79618, 96630 79583, 95891 79489, 95264 79459, 94320 79391, 92901 79318, 90412 79329, 90145 78917, 90156 78879, 90099 78506, 90869 78649, 91135 78784, 91853 78857, 93623 78874, 94278 78799, 95687 78778, 96834 78800, 98195 78858, 99584 78857, 100227 78788, 100424 78700, 100601 78786, 100785 79017, 101357 80061, 101288 80116, 100287 80307, 98569 80520, 97490 80602, 93792 80625, 92135 80563, 91122 80624, 90920 80787, 91813 80813, 92020 80867, 92623 80888, 93694 80882, 94027 80822, 96539 80818, 97447 80882, 98470 80866, 99385 80755, 100797 80517, 100863 80539, 100184 81271, 99936 81505, 99734 81510, 98721 81651, 98279 81693, 98273 81782, 98213 81825, 99436 81888, 99470 81923, 99167 82280, 98876 82462, 97325 82438, 86733 82431, 82152 82405, 75266 82403, 74771 82121, 73976 81375, 75354 81341, 75916 81234, 75734 81133, 74690 81028, 73684 81024, 73160 80507, 73131 80406, 73461 80405, 74325 80482, 75449 80479, 75815 80413, 77367 80321, 79468 80312, 80350 80252, 81066 80141, 86007 80156, 86295 80121, 86495 80078, 87190 80032, 86184 79991, 82616 79990, 81058 79956, 79791 79976, 79312 80001, 77313 79974, 75111 80083, 73874 80163, 72874 80164, 72719 80055, 72952 79352, 73188 79028, 73966 78231, 74018 78245, 74915 78171, 75001 78175, 75203 78072, 74821 77975, 74553 77944, 74430 77809, 74923 77317, 75147 77158, 76457 77157, 82752 77198, 88012 77155) (79707 80819, 79499 80909, 79881 81005, 81539 81035, 82181 81060, 83479 81374, 84317 81550, 83552 81279, 82793 80972, 82138 80741, 80295 80729) (89334 80366, 89237 80481, 89289 81073, 90046 80861, 90283 81008, 90091 80707, 90039 80520, 89576 80344)), ((110104 77200, 109859 77585, 109951 77626, 110433 77405, 110450 77792, 109877 78077, 109745 78229, 109512 78737, 109800 78780, 109961 78766, 112243 78819, 114906 78826, 117476 78600, 117665 78560, 118428 78565, 120113 78490, 121833 78477, 126725 78475, 127832 78494, 128672 78520, 128970 78585, 129228 79001, 129703 79495, 129811 79724, 130106 80058, 130185 80026, 130438 80023, 130479 80050, 130986 80001, 131218 79940, 131494 79760, 131419 80142, 131114 80377, 130591 80990, 130394 81191, 130174 81334, 130073 81511, 129834 81677, 125453 81640, 122828 81660, 122442 81675, 122006 81504, 121831 81490, 121449 81673, 120917 81655, 118368 81614, 116850 81518, 116589 81509, 116069 81393, 115510 81300, 114702 81093, 114449 80980, 113729 80908, 112446 80938, 112586 80991, 112003 81066, 112529 81111, 112449 81148, 114248 81254, 114841 81408, 115287 81582, 116255 81826, 116813 81856, 117020 81753, 119571 81750, 121503 81721, 121890 81586, 122366 81729, 124725 81748, 126717 81743, 129795 81717, 129710 81868, 129279 82320, 129110 82399, 123268 82450, 123084 82228, 122924 82082, 122771 82086, 122441 82299, 122014 82410, 120650 82450, 118956 82429, 115719 82445, 106388 82388, 105093 82393, 103941 81195, 103867 80994, 103989 81046, 104239 81004, 108895 81016, 109727 81027, 110262 81013, 110476 80960, 112539 80702, 113698 80507, 114034 80460, 114374 80379, 118849 80356, 122191 80328, 122276 80340, 123547 80292, 123776 80218, 124941 80261, 124969 80280, 125670 80261, 126189 80170, 126195 80099, 126040 80025, 125082 79975, 124668 79998, 124596 80021, 123510 80152, 122889 80184, 122130 80252, 119325 80258, 115979 80248, 115638 80254, 114233 80310, 112873 80460, 111249 80677, 109926 80875, 103738 80883, 103545 80780, 102917 80138, 102854 79857, 103089 79292, 103267 79170, 103975 79246, 104704 79287, 106010 79319, 107575 79305, 108507 79256, 114470 79240, 118164 79263, 118636 79284, 119274 79278, 119282 79230, 114472 79238, 107273 79201, 106366 79161, 105012 79051, 104285 79069, 103282 79153, 103367 78976, 104898 77424, 105153 77190)), ((165705 81671, 165679 81794, 165514 81793, 165243 81676, 165631 81631)), ((159204 78697, 159671 78696, 160640 78770, 160729 78813, 161566 79634, 160532 80776, 160478 81223, 160347 81308, 159638 81201, 157550 81208, 156937 81283, 155613 81158, 154810 81095, 153636 80948, 153209 80806, 151853 80622, 150867 80598, 150783 80632, 150347 80740, 148643 80853, 148513 80816, 148492 80844, 147961 80878, 147661 80681, 147427 80628, 147338 80502, 147419 80427, 147317 80159, 147640 79882, 147669 79670, 147781 79527, 149327 79637, 150301 79683, 152108 79666, 153099 79639, 153604 79566, 153938 79441, 154487 79343, 154894 79145, 155134 79043, 155704 78845, 156154 78738, 156336 78678, 157961 78659)), ((134385 78952, 134635 78978, 134948 79102, 138022 79213, 138141 79205, 140016 79199, 142319 79263, 143270 79216, 145359 79233, 145698 79264, 146988 79453, 146825 79772, 146866 80579, 146912 80688, 143737 80708, 140620 80746, 137113 80750, 136730 80770, 135564 80767, 133624 80799, 133400 80674, 132680 79908, 132816 79814, 133900 79883, 134924 79936, 135932 79899, 136947 79787, 134842 79734, 133844 79613, 133303 79581, 132988 79590, 132995 79502, 133174 79323, 133504 78959, 133801 78755)), ((159305 77332, 160383 78391, 160356 78419, 160008 78377, 159123 78365, 158056 78388, 156983 78445, 156240 78446, 155999 78403, 155348 78483, 154738 78673, 153967 79053, 153625 79269, 153381 79336, 152773 79464, 152515 79480, 152040 79490, 148833 79446, 148349 79422, 145474 79145, 145137 79141, 141181 78982, 139245 78941, 138522 78940, 137076 78821, 135617 78787, 134531 78795, 133802 78752, 133836 78613, 135122 77304, 135317 77261, 146131 77280, 152543 77278, 154065 77237, 159056 77217) (147401 78645, 147130 78698, 147153 78743, 147636 78782, 148404 78777, 148661 78740, 148629 78681, 148154 78639)), ((72405 50527, 72323 50845, 72236 51628, 72263 52963, 72330 53108, 72347 55010, 72185 57403, 71998 58807, 71963 59128, 71887 60953, 71914 62820, 71939 62898, 71954 62726, 71976 60761, 72207 57556, 72384 56283, 72500 55341, 72520 55030, 72520 52606, 72601 52007, 72597 51351, 72653 50791, 72718 50811, 73748 51864, 74223 52278, 74409 52473, 74689 52801, 74718 74998, 74670 76696, 74054 77378, 73925 77404, 73895 75852, 73907 75089, 73897 74427, 73826 74074, 73716 74202, 73683 76490, 73696 76854, 73756 77582, 73665 77770, 72611 78839, 72618 78356, 72585 77672, 72660 76950, 72973 74647, 73077 74016, 73349 72626, 73467 71947, 73598 70975, 73713 69666, 73690 66704, 73704 65454, 73628 64796, 73643 62785, 73643 60040, 73620 58660, 73588 57805, 73553 58600, 73471 64517, 73479 65073, 73448 65260, 73448 68166, 73518 68961, 73477 70233, 73383 71317, 73317 71770, 73003 73660, 72929 74044, 72469 77224, 72377 77427, 72287 78034, 72257 79091, 72220 79209, 72056 79235, 71358 79066, 71261 79287, 71248 78286, 71259 76684, 71400 74777, 71429 74095, 71458 72925, 71477 70616, 71431 70084, 71424 69087, 71372 66703, 71274 66503, 71156 67205, 71136 70986, 71140 72671, 71176 74078, 71160 74793, 71105 76195, 71044 76888, 70981 77332, 70953 78776, 71035 79418, 71028 79456, 70943 79333, 70577 79329, 69556 79395, 69453 79327, 69482 52891, 69589 52660, 70593 51627, 70717 51551, 70519 54028, 70500 54173, 70483 54492, 70490 58439, 70338 61664, 70309 65729, 70328 71338, 70233 72949, 69788 77936, 69981 76642, 70273 73529, 70422 71805, 70442 65590, 70434 62644, 70558 59385, 70577 59247, 70602 55383, 70625 54521, 70859 52475, 70873 51954, 70854 51454, 70969 51348, 70995 51200, 72325 50391) (72596 57078, 72576 57754, 72621 59615, 72620 62514, 72589 64641, 72649 66523, 72686 68446, 72706 70168, 72721 68999, 72752 68139, 72794 68393, 72828 67015, 72820 66207, 72780 65823, 72722 62853, 72722 59701, 72746 58291, 72750 57395, 72722 56855)), ((162452 50745, 162776 50980, 163573 51755, 163559 51807, 163635 52707, 163631 52793, 163732 52995, 163829 52611, 163860 52345, 163995 52222, 164487 52715, 164645 52939, 164648 54248, 164607 60658, 164648 65801, 164647 69910, 164602 71938, 164645 75547, 164601 76656, 164490 76897, 163258 78155, 163126 78193, 163235 77629, 163254 75373, 163178 74740, 163155 73577, 163154 73032, 163216 71431, 163258 69506, 163320 68819, 163413 67977, 163598 67504, 163612 67274, 163539 66775, 163504 66674, 163507 65544, 163469 63462, 163463 61456, 163433 61317, 163388 61416, 163398 62950, 163381 66594, 163449 66688, 163083 66815, 163126 66878, 162934 67431, 162525 67439, 162553 66824, 162529 66788, 162532 65953, 162619 64853, 162816 63632, 162852 62560, 162847 61181, 162774 60337, 162772 59620, 162845 58103, 162853 56207, 162775 54716, 162631 54740, 162579 55322, 162586 56121, 162538 56787, 162595 58661, 162590 62099, 162532 62824, 162450 64427, 162410 64663, 162322 65561, 162347 67598, 162394 67652, 162431 67895, 162408 68122, 162358 68199, 162362 69148, 162394 70263, 162266 71763, 162248 72131, 162042 73673, 162000 75189, 162085 75667, 162186 75235, 162223 74422, 162317 73683, 162345 73056, 162413 72112, 162488 70691, 162475 68204, 162887 67936, 162925 67946, 163298 67891, 163155 68661, 163020 68927, 162947 69645, 162932 71415, 163006 72070, 163026 73477, 163006 74626, 162948 75985, 162947 77375, 163017 78019, 163104 78214, 163019 78393, 162786 78576, 161741 79146, 161688 79078, 161497 78077, 161287 76360, 161202 75281, 161181 71581, 161241 69927, 161181 68912, 161017 68712, 160991 69604, 160937 69811, 160916 70415, 160922 71486, 160982 71819, 160986 74331, 160923 75237, 160939 76261, 161049 77177, 161287 78587, 161265 78653, 160531 77974, 160299 77727, 160294 77526, 160156 76513, 160114 76071, 160025 76062, 159981 76001, 159915 77227, 159881 77261, 159524 76957, 159343 76667, 159366 75117, 159373 64522, 159403 59944, 159401 53058, 159674 52592, 159683 52562, 160432 51767, 160466 53146, 160572 53708, 160673 53525, 160776 52482, 160780 51476, 161297 50952, 161398 50923, 161399 51253, 161321 52117, 161324 53239, 161404 53719, 161483 55159, 161492 57260, 161551 58141, 161663 58858, 161652 63799, 161687 64086, 161727 64286, 161772 64982, 161813 63976, 161814 60408, 161848 58850, 161829 57581, 161803 57104, 161831 55105, 161721 52902, 161641 51666, 161640 50666, 161749 50511) (160731 67079, 160945 67838, 160798 68075, 161099 67883, 161284 67829, 161460 67367, 161438 67126, 161323 67029) (160799 57670, 160769 59330, 160744 59973, 160430 61271, 160254 62109, 160525 61343, 160832 60585, 161064 59931, 161075 58087, 160985 57497, 160897 57292)), ((101796 50689, 102016 50881, 102110 50861, 102227 51081, 102250 51302, 102310 51597, 102278 51705, 102294 51910, 102462 52246, 102667 52325, 102767 52542, 102794 52970, 102866 53008, 102894 52662, 103025 52734, 103381 53083, 103585 53360, 104291 54172, 104401 54281, 104738 54890, 104819 55437, 104869 62013, 104604 62289, 104617 63052, 104691 63188, 104845 63579, 104860 75043, 104644 75288, 104540 75382, 104159 75781, 103850 76029, 103870 73664, 103862 73624, 103724 75294, 103562 76213, 103612 76677, 103530 77248, 103643 77526, 103693 77833, 102869 78632, 102759 78693, 102633 76740, 102626 76158, 102556 75906, 102502 77579, 102514 78263, 102539 78320, 102582 78874, 102469 79042, 101166 78511, 100966 78269, 100410 77803, 100227 77629, 100078 77405, 100046 76995, 100022 77057, 99989 77316, 99807 77201, 99607 76929, 99596 73414, 99740 73330, 100007 73447, 100268 73636, 100360 73742, 100426 73703, 100376 73563, 100216 73420, 100122 73222, 100150 72921, 100356 73035, 100325 73090, 100415 73059, 100277 72822, 100351 72664, 100547 72591, 100487 72321, 100251 72132, 100064 71920, 99981 71733, 99832 71457, 99851 71177, 99624 70714, 99630 54991, 99591 52745, 99845 52421, 100110 52271, 100159 52373, 100200 52183, 100356 51945, 100778 51545, 100845 51507, 101167 51233, 101279 51504, 101360 54301, 101370 54324, 101479 51437, 101501 51353, 101540 50874, 101704 50678) (100912 72272, 100918 73991, 100862 76374, 100884 77223, 100965 78168, 101067 77621, 101076 75333, 101061 75056, 101071 74674, 101029 72157, 100968 71853) (103103 56686, 103153 58235, 103367 59568, 103424 60081, 103775 62533, 103906 63373, 104176 64896, 104452 67850, 104484 68318, 104484 69368, 104516 73810, 104541 69341, 104593 68528, 104529 67896, 104272 64951, 103825 62132, 103563 59916, 103496 59203, 103468 59042, 103379 57154, 103278 56300, 103182 56158) (102442 58936, 102462 59136, 102518 60068, 102600 60767, 102689 61294, 102762 61389, 102759 60917, 102709 60250, 102610 59634, 102543 58258, 102500 58403, 102465 57485) (102491 54840, 102476 56448, 102515 55948, 102517 54808, 102484 53925)), ((133527 51475, 133644 51663, 133568 52293, 133531 53296, 133598 53567, 133661 53974, 133765 52972, 133788 52232, 133817 51841, 133951 51922, 134573 52569, 134650 52795, 134663 54998, 134661 56693, 134485 56745, 134556 57088, 134544 57739, 134461 57981, 134547 58197, 134649 58771, 134526 58974, 134516 59062, 134611 59264, 134570 59416, 134512 60000, 134528 60248, 134665 60689, 134638 67296, 134596 67378, 134586 69545, 134641 69531, 134663 74825, 134658 76472, 134406 76808, 134232 76879, 134199 76512, 134130 75350, 134045 74537, 133942 74609, 133893 74789, 133865 75253, 134112 76994, 133975 77198, 132763 78420, 132220 78936, 132121 78931, 132151 78318, 132137 77191, 132099 77138, 132017 77273, 131963 77600, 131960 78094, 131984 78959, 131859 79019, 131478 78343, 131082 78006, 130405 77247, 130263 77276, 130027 77232, 129593 76780, 129443 76518, 129433 71558, 129471 70680, 129448 68059, 129383 66476, 129408 58501, 129374 57960, 129507 57046, 129665 56145, 129512 55674, 129580 55535, 129549 54961, 129559 54617, 129488 54432, 129617 54033, 129425 53866, 129402 53590, 129426 52580, 130469 51523, 130500 51548, 130491 51976, 130440 52252, 130423 52802, 130479 53465, 130596 56710, 130586 65222, 130594 65650, 130580 65747, 130697 67533, 130870 69811, 130710 67424, 130661 65613, 130605 60590, 130616 56489, 130678 53333, 130678 52663, 130793 51908, 130872 51097, 130912 51060, 131387 51135, 132409 50418) (132739 71982, 132714 74097, 132657 75584, 132707 77327, 132823 77552, 132921 77110, 132960 76039, 132947 74878, 132866 74092, 132864 73347, 132825 70941) (132655 54911, 132565 55842, 132444 56463, 132269 57649, 132236 58879, 132181 59830, 132150 63573, 132151 64629, 132131 66866, 132158 70737, 132173 70855, 132192 70806, 132277 70862, 132308 68659, 132277 59192, 132430 57635, 132581 56700, 132679 56240, 132914 55803, 132951 54903, 133007 54684, 133006 54053, 132875 53825)), ((127045 77163, 128036 77187, 128442 77166, 128791 77645, 128853 77810, 128976 77951, 129167 78222, 128709 78309, 127701 78340, 126649 78348, 120195 78327, 118505 78250, 117638 78320, 117250 78423, 115786 78613, 114508 78664, 111161 78648, 111141 78504, 111790 78413, 112536 78204, 112660 77815, 112750 77463, 112713 77429, 112787 77414, 112822 77162, 120240 77144)), ((111127 77617, 111283 77985, 110861 78333, 110550 78223, 110820 77596)), ((129325 77292, 129687 77663, 130049 78066, 129591 77874, 129572 77910, 129067 77867, 128799 77646, 128555 77205, 128599 77197, 128558 77163, 128989 77151)), ((104336 76421, 104338 76517, 104620 76683, 104792 76678, 104808 76717, 104210 77346, 103992 77562, 103900 77620, 103920 77095, 103780 76982, 103901 76590, 103990 76425, 104100 76451, 104235 76321)), ((111121 77512, 110897 77527, 111030 77344, 111359 77310)), ((159007 57236, 158699 57558, 158728 57550, 158535 57779, 158620 57785, 159007 57456, 159007 60433, 154298 65175, 154297 65195, 149595 69888, 143105 76329, 142575 76869, 139852 76869, 140167 76574, 140214 76541, 141306 75196, 141160 75215, 141666 74420, 142499 73178, 143388 71910, 144353 70890, 144421 70790, 145693 69475, 146036 69143, 146354 68802, 147261 67786, 148583 66409, 151878 63106, 153522 61518, 154042 61088, 154385 60849, 155464 59621, 155571 59262, 155779 58894, 155672 58946, 155725 58805, 154626 60063, 154301 60456, 153509 61282, 153033 61753, 149346 65487, 147069 67725, 146053 68676, 144008 70756, 142888 71813, 141906 72916, 137986 76869, 135363 76869, 139299 72965, 156270 55984, 159007 53220) (157749 60340, 157003 61140, 152686 65400, 151958 66004, 150404 67570, 149929 68174, 149631 68528, 149152 69140, 148757 69609, 145402 72965, 144539 73919, 145407 73173, 145711 72923, 148436 70246, 148952 69814, 149798 68972, 150680 67843, 150942 67524, 152057 66271, 156089 62214, 157037 61114, 157694 60461, 157746 60468, 157793 60363, 158179 59929, 158307 59629, 158314 59378, 158254 59336)), ((159007 68227, 150364 76869, 145449 76869, 145864 76445, 146185 76178, 147207 74849, 147586 74399, 150258 71073, 151555 69393, 154436 66121, 154822 65701, 155363 65144, 159007 61482) (149011 73896, 148476 74498, 148025 75087, 147704 75486, 147486 75817, 146739 76568, 147493 75825, 147575 75756, 148478 74755, 149026 74096, 149399 73603, 149422 73481)), ((141584 74295, 140605 75643, 139735 76620, 139394 76869, 138080 76869, 138944 76030, 141571 73426, 142121 72945, 142628 72593, 142752 72550)), ((159007 73008, 158363 73637, 157027 75000, 155519 76488, 155096 76869, 153187 76869, 153362 76677, 155077 74893, 159007 70892)), ((159007 61478, 154822 65635, 154435 66032, 151552 69279, 151167 69750, 149191 72245, 147297 74507, 146735 75155, 146687 75234, 145224 76869, 143167 76869, 148103 71891, 148633 71725, 149391 70951, 149467 70774, 149749 70272, 158724 61283, 159007 61018)), ((159007 76442, 158581 76869, 155380 76869, 158346 73859, 159007 73221)), ((165383 61425, 165384 61466, 165949 62044, 166186 62393, 166422 62514, 166767 62778, 167008 62944, 167250 63407, 167521 63528, 167661 63723, 168251 64389, 168493 64610, 168807 64809, 169041 64976, 169398 65326, 175777 71745, 175793 71782, 178009 74011, 178034 73996, 181001 76869, 178459 76869, 177680 76108, 178359 76869, 173866 76869, 173022 76038, 171991 75126, 170759 73849, 169199 72288, 169199 72264, 165007 68048, 165007 66449, 165574 67014, 165007 66440, 165007 64056, 165421 64593, 166496 65717, 167314 66610, 174040 73405, 176478 75805, 176667 75840, 174865 73994, 166728 65904, 165459 64431, 165007 63856, 165007 61178) (170847 72303, 171217 72664, 171294 72759, 172989 74284, 171223 72586, 166611 68054)), ((172819 76869, 166942 76869, 165812 76043, 165007 75331, 165007 69056)), ((166008 54094, 168719 56788, 170662 58752, 170806 59203, 170934 59529, 171086 59674, 171475 59772, 171934 60084, 171945 60084, 173282 61371, 175000 63120, 176147 64269, 178384 66476, 188706 76869, 186812 76869, 183571 73624, 182725 72749, 182245 72288, 182008 72119, 179866 70326, 178322 69106, 177945 68845, 174036 64983, 173950 64888, 171063 62032, 170999 61953, 169876 60902, 169667 60782, 168735 59794, 168647 59683, 168055 59118, 167569 58753, 167556 58831, 167676 59050, 168325 59741, 168487 59925, 168815 60225, 168878 60259, 169868 61068, 170392 61552, 171083 62144, 176457 67523, 178007 68990, 179361 70140, 180967 71459, 182392 72610, 186665 76869, 184541 76869, 183270 75621, 182406 74824, 177924 70363, 183389 75875, 183871 76392, 184287 76869, 181631 76869, 180370 75613, 180680 75504, 180540 75275, 180183 75128, 180232 74634, 180590 74758, 180996 74617, 181035 74123, 178926 71943, 176463 69467, 174007 67320, 173815 67177, 173103 66458, 171458 64917, 169959 63433, 165608 59084, 165007 58463, 165007 54136, 167404 56559, 168386 57569, 170986 60136, 171296 60430, 171667 61040, 171817 61208, 172252 61392, 175165 64380, 176789 66147, 177208 66731, 177658 67309, 178238 68168, 178390 68484, 178971 69150, 180162 70300, 180085 70151, 180656 70624, 180256 70162, 180368 70224, 178796 68509, 178372 67876, 178095 67362, 177357 66288, 176831 65726, 176582 65605, 176376 65411, 174131 63172, 172224 61310, 171795 61064, 171372 60445, 169064 58111, 165007 54091, 165007 53152) (172904 65356, 176211 68647, 173728 66143, 173403 65793, 172947 65343)), ((159007 70877, 155363 74511, 154996 74887, 154901 74964, 153177 76869, 151420 76869, 151609 76679, 152610 75561, 155331 72912, 159007 69256)), ((165807 76115, 165808 76134, 166068 76346, 166091 76346, 166754 76869, 165734 76869, 165007 76144, 165007 75406)), ((105269 69399, 106388 70400, 109036 73121, 112696 76797, 111071 76797, 107438 73153, 107062 72787, 106985 72691, 105081 70969, 105081 69212)), ((99079 63346, 98316 64124, 99079 63445, 99079 67938, 98246 68784, 97336 69814, 96059 71046, 94498 72604, 94473 72605, 90255 76797, 88661 76797, 89225 76230, 88652 76797, 86266 76797, 86801 76383, 87925 75308, 88820 74490, 95614 67764, 98013 65326, 98048 65137, 96203 66939, 88112 75076, 86639 76345, 86064 76797, 83386 76797, 83633 76421, 83675 76420, 84253 75855, 84602 75618, 84722 75382, 84986 75037, 85152 74796, 85615 74556, 85736 74284, 85931 74143, 86597 73553, 86818 73312, 87017 72998, 87185 72764, 93953 66027, 93990 66011, 96219 63799, 96204 63774, 99079 60804) (94795 70581, 90262 75193, 94513 70957, 94875 70587, 94969 70510, 96492 68815)), ((108983 57089, 125964 74060, 128728 76797, 124712 76797, 124390 76489, 124398 76519, 124169 76325, 124168 76417, 124493 76797, 121515 76797, 116775 72091, 116756 72091, 112060 67388, 105633 60906, 105081 60365, 105081 57642, 105376 57961, 105409 58008, 106752 59098, 106734 58952, 107532 59458, 108770 60290, 110039 61178, 111060 62143, 111160 62212, 112475 63484, 112808 63828, 113148 64147, 114165 65052, 115542 66373, 118842 69670, 120431 71314, 120860 71834, 121099 72178, 122328 73254, 122686 73362, 123054 73571, 123002 73464, 123145 73516, 121885 72416, 121492 72091, 120666 71301, 120195 70825, 116461 67138, 114225 64862, 113510 64108, 113272 63845, 111229 61838, 110135 60679, 109033 59696, 105081 55776, 105081 53168) (108777 63198, 109027 63503, 111054 65556, 111705 66227, 112135 66741, 112976 67590, 114107 68471, 114426 68733, 115678 69847, 119734 73879, 120835 74827, 121487 75486, 121480 75538, 121585 75585, 122020 75973, 122320 76101, 122570 76106, 122612 76047, 121607 75540, 120810 74793, 116549 70477, 115947 69749, 114379 68193, 113774 67720, 113421 67423, 112809 66942, 112341 66548, 108984 63192, 108029 62331)), ((110058 65894, 110223 66423, 110997 67182, 111175 67258, 111678 67541, 120665 76514, 120931 76797, 120472 76797, 116315 72614, 115918 72228, 112669 69345, 112198 68959, 109705 66981, 107441 65090, 106794 64528, 106714 64480, 105081 63015, 105081 60959)), ((105505 63655, 105772 63975, 107101 64999, 107551 65378, 110876 68048, 112555 69346, 115828 72228, 116249 72614, 116806 73155, 120468 76797, 113722 76797, 105081 68154, 105081 63241) (106125 65283, 106194 65365, 107195 66268, 107853 66819, 108345 67191, 108467 67214, 108052 66805, 107451 66270, 106464 65496, 106133 65276, 105382 64530)), ((95353 61995, 95445 62008, 94921 62659, 94607 63157, 94542 63427, 94967 63766, 95240 63663, 95024 63960, 95206 64062, 88370 70902, 88355 70902, 82456 76797, 80875 76797, 81524 76136, 87109 70576, 88784 69012, 89549 68149, 89842 67712, 91050 66245, 92178 65047, 94781 62462, 95465 61758)), ((108091 76140, 108729 76797, 105506 76797, 105081 76371, 105081 73171)), ((105271 71152, 107057 72867, 111056 76797, 108941 76797, 108311 76154, 106948 74820, 105462 73309, 105081 72886, 105081 70979)), ((99079 76070, 98352 76797, 97616 76797, 98323 75997, 98342 75996, 98554 75736, 98554 75713, 99079 75050)), ((99079 74862, 98251 75992, 97541 76797, 91266 76797, 99079 68985)), ((99079 54992, 95832 58233, 94958 59079, 94496 59559, 94327 59796, 92535 61939, 91317 63482, 91053 63860, 87191 67768, 87096 67854, 84240 70743, 84161 70807, 83110 71928, 82992 72139, 82002 73070, 81891 73157, 81326 73751, 80961 74235, 81039 74249, 81258 74128, 81949 73479, 82134 73317, 82433 72989, 82467 72926, 83278 71936, 83762 71412, 84352 70722, 89975 65102, 91198 63799, 92348 62446, 93667 60840, 94818 59412, 99079 55139, 99079 57263, 97829 58534, 97034 59402, 92571 63881, 98085 58418, 98602 57936, 99079 57517, 99079 60173, 97821 61434, 97712 61124, 97484 61266, 97337 61625, 96844 61572, 96968 61214, 96826 60808, 96331 60770, 94152 62880, 91675 65341, 89528 67797, 89385 67989, 88665 68701, 87125 70346, 85641 71845, 81294 76196, 80671 76797, 76348 76797, 78768 74400, 79777 73419, 82348 70818, 82641 70508, 83250 70137, 83418 69987, 83600 69552, 86588 66639, 88357 65016, 88939 64597, 89517 64147, 90377 63567, 90667 63428, 91360 62833, 92511 61641, 92360 61719, 92834 61148, 92370 61550, 92432 61439, 90717 63008, 90085 63432, 89572 63709, 88500 64447, 87933 64976, 87815 65222, 87620 65429, 85380 67673, 83518 69580, 83274 70009, 82657 70432, 80319 72740, 76303 76797, 75361 76797, 76306 75796, 78998 73085, 80960 71142, 81411 70998, 81737 70870, 81884 70718, 81984 70329, 82293 69871, 82292 69859, 83579 68522, 85329 66803, 86477 65657, 88672 63434, 99079 53101) (88351 68077, 88001 68401, 87551 68857, 87564 68900, 90855 65593)), ((104002 76127, 104002 76290, 103884 76562, 103839 76173, 103879 76099)), ((152188 53559, 151361 54420, 151088 54691, 150513 55191, 150043 55617, 149545 56151, 149398 56388, 149140 56649, 148942 56953, 148910 57058, 149157 56922, 149235 57026, 149006 57348, 148417 58330, 148282 58682, 147103 60081, 144521 62731, 144395 62914, 144437 62899, 144967 62418, 147745 59645, 148679 58545, 148816 58319, 149026 58103, 149782 56552, 149676 56573, 149900 56293, 151055 55031, 151131 54931, 151988 53986, 153102 52871, 156454 52871, 155753 53568, 155101 54387, 155002 54527, 154468 55081, 154336 55284, 152603 57066, 150692 58984, 146924 62705, 146337 63227, 145615 63810, 144714 64448, 143625 65485, 142453 66767, 141222 68001, 138946 70325, 138933 70480, 139209 70225, 143357 66120, 144310 65263, 145188 64457, 145296 64390, 146912 62992, 147511 62443, 147478 62498, 147764 62226, 150910 59020, 152185 57753, 153845 56245, 154562 55608, 155187 54889, 155653 54298, 156069 53722, 156363 53364, 156885 52871, 158610 52871, 158130 53394, 156040 55499, 153295 58224, 149355 62161, 135007 76442, 135007 72355, 135223 72139, 135399 71944, 136859 70486, 139335 68041, 140124 67197, 139456 67742, 138727 68443, 136800 70414, 135007 72212, 135007 70956, 135395 70530, 136035 70063, 137086 69239, 137420 68892, 137674 68728, 138715 67821, 140179 66634, 140490 66332, 141486 65452, 142109 64881, 142940 63980, 142871 63880, 142488 64198, 141616 65058, 140319 66376, 139411 67106, 137905 68251, 137578 68515, 137070 68821, 136227 69426, 136128 69508, 135501 69968, 135007 70443, 135007 69178, 135236 69000, 139093 65110, 140231 63986, 141048 63488, 141149 63643, 141296 63569, 141328 63751, 141675 63359, 141878 63288, 142215 62970, 142309 62701, 143000 61978, 142785 61419, 144452 59747, 147140 57099, 150382 53853, 151060 53116, 151311 52871, 152875 52871)), ((167953 53896, 168022 53989, 168269 54257, 171991 57970, 174923 61108, 178821 65042, 184148 70341, 185808 72167, 187829 74618, 188152 74988, 187699 74376, 185961 72247, 184563 70646, 178809 64860, 175937 62005, 172882 58773, 172791 58661, 169199 55034, 168513 54319, 167670 53300, 167596 53191, 167331 52871, 169404 52871, 170607 54050, 170622 54079, 170886 54347, 172904 56585, 174192 58174, 175655 59740, 177254 61302, 177316 61339, 177216 61225, 175575 59554, 172988 56650, 172396 55926, 171149 54433, 170714 53958, 169616 52871, 172579 52871, 175352 55586, 181021 61292, 183806 64073, 183806 64086, 189007 69267, 189007 70455, 188933 70397, 188868 70529, 189007 70704, 189007 71781, 188396 71004, 188395 70980, 188089 70575, 187144 69257, 186670 68626, 185906 67681, 184719 66344, 182005 63656, 180806 62435, 180127 61864, 178227 59942, 175689 57403, 174376 56124, 174240 56032, 174313 56144, 176572 58446, 180099 61940, 180720 62665, 183136 65113, 183957 65836, 185093 67028, 185992 68053, 186314 68459, 187686 70266, 187921 70593, 188697 71598, 189007 72031, 189007 73984, 188753 73728, 188045 72892, 187404 72156, 186821 71533, 185696 70374, 183780 68428, 183291 68005, 182400 67120, 180299 65090, 180056 64977, 180738 65789, 184007 69112, 185539 70638, 186678 71734, 187215 72289, 188007 73156, 188827 74110, 189007 74294, 189007 76406, 165455 52871, 167049 52871) (172685 55779, 172869 56006, 173281 56437, 174992 58079, 177365 60454, 179284 62420, 179613 62727, 182744 65744, 183867 66845, 183152 66114, 182455 65380, 182711 65574, 181552 64367, 180844 63671, 180464 63351, 177766 60732, 175042 58008, 173014 55940, 172545 55507)), ((109809 53013, 110006 53189, 111464 54650, 113907 57125, 114751 57915, 114422 57520, 114207 57246, 113506 56518, 111536 54592, 109736 52797, 110993 52797, 111418 53185, 111886 53825, 112709 54877, 113057 55211, 113222 55464, 114128 56505, 115316 57971, 115618 58281, 116497 59276, 117067 59903, 117969 60730, 118069 60662, 117752 60280, 116892 59408, 115573 58111, 114842 57201, 113698 55699, 113435 55371, 113128 54860, 112524 54018, 111982 53293, 111505 52797, 112771 52797, 112948 53027, 116838 56885, 117962 58024, 118462 58838, 118307 58939, 118381 59086, 118199 59118, 118589 59465, 118661 59668, 118980 60006, 119249 60101, 119970 60790, 120529 60578, 122202 62245, 124851 64932, 128096 68172, 128832 68852, 129077 69096, 129077 70665, 128390 69978, 127531 69151, 127260 68878, 126331 67833, 125798 67335, 125562 67188, 125300 66930, 124996 66733, 124891 66700, 125027 66948, 124922 67026, 124600 66797, 123617 66206, 123266 66072, 121867 64893, 119217 62311, 119034 62186, 119049 62228, 119530 62757, 122305 65537, 123404 66469, 123630 66606, 123845 66816, 125395 67571, 125375 67466, 125655 67690, 126919 68845, 127019 68921, 127962 69781, 129077 70895, 129077 74244, 128381 73545, 127560 72893, 127422 72793, 126868 72258, 126666 72128, 124882 70393, 122964 68484, 119243 64714, 118721 64127, 118138 63406, 117500 62507, 116463 61418, 115182 60245, 113949 59015, 111623 56740, 111468 56723, 111724 56999, 115830 61148, 116685 62100, 117492 62978, 117560 63087, 118957 64702, 119505 65301, 119450 65268, 119722 65554, 122929 68701, 124195 69977, 126364 72372, 127060 72976, 127651 73442, 128224 73860, 128584 74153, 129077 74675, 129077 76402, 128554 75919, 126128 73509, 123726 71088, 119786 67144, 105506 52797, 109594 52797)), ((92605 52871, 92737 52937, 92912 52797, 93990 52797, 93215 53410, 93190 53411, 92785 53716, 91466 54660, 90834 55134, 89889 55898, 88552 57087, 85864 59799, 84644 61000, 84072 61680, 82150 63579, 79611 66116, 78334 67428, 78242 67564, 78354 67491, 80655 65234, 84148 61708, 84874 61085, 87321 58668, 88044 57847, 89236 56711, 90264 55812, 90670 55491, 92476 54118, 92803 53883, 93806 53108, 94241 52797, 96195 52797, 95938 53051, 95100 53759, 94364 54400, 93742 54983, 92582 56108, 90637 58024, 90214 58513, 89329 59404, 87299 61505, 87186 61750, 88002 61064, 91321 57797, 92852 56258, 93942 55126, 94497 54589, 95364 53797, 96318 52977, 96503 52797, 98614 52797, 75079 76356, 75079 74755, 76104 73851, 76198 73783, 76465 73535, 80180 69813, 83316 66881, 87252 62983, 92549 57656, 94375 55997, 96828 53975, 97197 53655, 96584 54109, 94455 55843, 92854 57241, 87068 62995, 84213 65867, 80981 68922, 80870 69013, 77242 72605, 76527 73291, 75508 74135, 75399 74209, 75079 74476, 75079 72400, 76260 71197, 76288 71182, 76557 70918, 78793 68900, 80382 67612, 81948 66149, 83510 64552, 83547 64490, 83250 64764, 81762 66229, 78858 68816, 78135 69408, 76643 70655, 76167 71090, 75079 72188, 75079 69225, 77794 66452, 83500 60783, 86282 57997, 86295 57997, 91476 52797, 92663 52797) (88322 58654, 87588 59349, 87782 59095, 86575 60255, 85879 60962, 85559 61340, 82940 64038, 80216 66764, 78926 68019, 78148 68790, 77715 69260, 77987 69119, 78215 68935, 78645 68523, 80287 66812, 82662 64439, 84628 62520, 87952 59062, 89053 57939)), ((179518 74202, 179848 74539, 179618 74702, 178904 74118)), ((179980 73638, 180254 74056, 179853 74533, 179542 74188, 179476 73622)), ((165668 59316, 171228 64901, 172793 66576, 173653 67339, 174092 67633, 175559 68842, 176757 69970, 179342 72573, 180046 73257, 179809 73144, 179796 73235, 179145 72711, 178647 72397, 178377 72332, 178038 72757, 178141 73030, 177844 72814, 177742 72998, 170902 66161, 170902 66146, 165007 60246, 165007 58667)), ((37951 71858, 41421 71918, 48916 71936, 51320 71988, 51441 72160, 51370 72954, 37902 72987, 31191 72983, 31191 71677)), ((62510 65079, 63147 65094, 63581 65270, 63548 65301, 63613 65612, 63616 65836, 63568 65896, 63662 65937, 63858 65897, 63959 65752, 64183 65681, 64224 65584, 64389 65646, 64707 65664, 64873 65722, 64890 65860, 65055 65787, 65547 65881, 65887 66055, 66209 66013, 66297 65902, 66306 65769, 66452 65685, 66507 65580, 66754 65499, 66951 65369, 67534 65322, 67661 65346, 67909 65282, 68053 65200, 67740 65164, 67763 65085, 68386 65096, 69105 65095, 69105 70595, 59402 70598, 59465 70564, 59351 70342, 59383 70243, 59278 69993, 59177 69828, 59183 69492, 59607 69507, 62260 69504, 60562 69420, 59113 69226, 59113 68249, 59930 68170, 59113 68148, 59113 66598, 60926 66600, 62148 66558, 63955 66585, 66839 66569, 67225 66518, 66891 66439, 61888 66468, 59400 66415, 59113 66420, 59113 65062)), ((177610 54049, 181840 58298, 182096 58509, 182309 58663, 182350 58648, 182109 58350, 179000 55243, 177757 53955, 176652 52871, 177659 52871, 178399 53580, 180968 56154, 181582 56848, 182946 58326, 183124 58555, 183816 59359, 185600 61106, 185744 61145, 186020 61385, 186106 61315, 186175 61592, 187931 63378, 189007 64611, 189007 66110, 188421 65518, 186980 63997, 186027 63129, 186067 63188, 185848 63165, 186602 63956, 186770 64196, 187311 64769, 188288 65738, 188601 65969, 188814 66158, 189007 66350, 189007 68540, 180856 60404, 176258 55838, 173962 53525, 173355 52871, 176274 52871) (184438 61350, 184205 61884, 185074 62441, 185138 62077, 184822 61539, 184599 61345) (175609 53091, 175595 53210, 177123 54779, 177660 55347, 178568 56684, 179096 57403, 178704 56708, 178363 56022, 178237 55798, 178273 55819, 177930 55188, 176288 53529, 175720 53091)), ((146755 53712, 146040 54528, 143464 57118, 143375 57357, 146530 54280, 147124 53652, 147110 53652, 147858 52871, 149571 52871, 149245 53064, 149111 53059, 148909 53214, 148654 53357, 147991 54117, 147122 55225, 146821 55486, 146702 55636, 146683 55735, 146822 56041, 147130 56042, 147239 56242, 146853 56637, 146190 57351, 145292 58198, 143163 60326, 143012 60554, 141915 61604, 141643 61854, 135007 68488, 135007 67912, 138541 64332, 140685 62277, 141029 62199, 141194 62000, 141110 61952, 141006 62143, 140659 62174, 137723 64951, 135007 67637, 135007 65442, 135421 65113, 135925 64651, 136075 64471, 136007 64471, 135448 64875, 135422 64909, 135007 65217, 135007 63475, 135384 62991, 137408 60300, 137694 59978, 140737 56837, 143746 53835, 144014 53598, 143990 53598, 144846 52871, 147403 52871) (141505 61323, 141273 61608, 141177 61782, 141189 61828, 140708 61597, 140277 61313, 139823 61698, 138919 62580, 137922 63654, 136807 64800, 137610 64014, 137913 63824, 138143 63610, 139203 62574, 139896 61853, 140343 61420, 141102 61962, 141173 61855, 141634 61473, 141645 61356, 141588 61284) (139430 59635, 138920 60162, 137308 61772, 137876 61275, 139762 59447) (143330 59530, 142925 59912, 142676 60382, 142281 60945, 141631 61487, 141634 61555, 141527 61694, 141999 61335, 142201 61251, 142623 60856, 142814 60571, 142872 60384, 143050 59914, 143334 59626, 143459 59458) (142381 56638, 141444 57522, 141227 57738, 140877 58178, 140727 58451, 141018 59166, 140943 59228, 140097 58955, 140028 59039, 139900 59330, 140162 59019, 140644 59239, 140671 59208, 140990 59344, 141211 59030, 141081 58769, 140785 58464, 141259 58054, 141300 58007, 141577 57865, 141562 57674, 141812 57413, 142066 57484, 141957 57245, 142364 56820, 142688 56421)), ((87726 53383, 86205 54824, 85338 55780, 85397 55741, 85373 55957, 86166 55202, 86403 55035, 86977 54493, 87947 53516, 88177 53203, 88366 52990, 88558 52797, 90752 52797, 83488 60070, 78047 65544, 75733 67843, 75079 68449, 75079 65530, 76259 64194, 80508 59964, 80719 59708, 80871 59497, 80857 59457, 80558 59698, 77451 62805, 76163 64047, 75079 65154, 75079 64145, 75788 63405, 78363 60836, 79059 60222, 80536 58858, 80763 58680, 81567 57988, 83314 56204, 83353 56060, 83594 55784, 83523 55698, 83800 55629, 85588 53873, 86819 52797, 88324 52797) (78916 63100, 78230 63441, 78006 63567, 78027 63531, 77396 63876, 75739 65516, 75300 66083, 75300 66195, 75419 66208, 76987 64681, 77556 64144, 78892 63236, 79611 62708) (83748 56982, 83554 57205, 83561 57366, 84092 57599, 84649 56730, 84286 56668)), ((128633 66857, 128614 67120, 128871 67446, 129077 67685, 129077 68432, 128008 67398, 128175 67164, 128479 66700)), ((117618 56333, 119673 58477, 119749 58822, 119948 58984, 119997 58902, 119805 58799, 119776 58450, 116999 55515, 114312 52797, 116506 52797, 116835 53211, 117300 53715, 117478 53865, 117479 53797, 117075 53238, 117040 53212, 116731 52797, 118473 52797, 118959 53175, 121648 55200, 121971 55485, 125111 58527, 128113 61538, 128350 61806, 128350 61782, 129077 62639, 129077 65193, 128237 64545, 127422 63830, 124830 61254, 124589 61164, 127668 64322, 128296 64916, 128296 64901, 129077 65649, 129077 67363, 128884 67036, 128890 66904, 128736 66700, 128594 66447, 127945 65881, 127929 65858, 126726 64916, 126462 64615, 126312 64495, 126214 64476, 125909 64612, 125907 64922, 125708 65030, 125313 64643, 124597 63980, 123750 63081, 121624 60956, 121394 60804, 120344 59709, 120099 59438, 113462 52797, 114038 52797) (120446 59578, 120614 59789, 120698 59992, 121093 60415, 121378 60605, 121566 60662, 122034 60842, 122322 61127, 122490 61250, 122418 61122, 122036 60717, 121568 60466, 121005 60073, 120464 59424, 120395 59425, 120256 59317) (122929 57954, 122709 58434, 122740 58461, 122605 58780, 122918 59004, 123180 58873, 123484 58577, 123748 58890, 123943 59092, 124084 59368, 124276 59354, 124538 59603, 124466 59856, 124704 59748, 125130 60156, 125528 60478, 125312 60172, 124428 59234, 124212 59017, 123771 58668, 123497 58519, 122782 58810, 122720 58734, 122993 57889, 122909 57820, 122618 57690) (117936 55402, 118124 55703, 119376 56993, 120095 57686, 120528 58133, 119987 58895, 120095 58966, 120477 59424, 120592 59435, 120664 59378, 120625 59296, 120204 58953, 120123 58980, 120353 58499, 120635 58067, 120252 57613, 119370 56709, 118296 55713, 117150 54599) (120673 55668, 122501 57552, 122313 57220, 121786 56710, 120177 55098)), ((187250 61669, 187365 61970, 187941 62645, 188417 63085, 189007 63685, 189007 64405, 188330 63662, 186222 61571, 186351 61122, 186385 61116, 186666 60885)), ((84605 53694, 83968 54251, 83135 54953, 82835 55178, 81954 55968, 81881 56085, 80871 57091, 78916 59102, 77067 60961, 76980 61082, 77099 61017, 78561 59538, 81877 56246, 81920 56107, 82236 55758, 81980 56115, 82239 56277, 82267 56198, 82960 55799, 83234 56143, 82527 56761, 81783 57500, 80775 58391, 79550 59345, 78565 60284, 77334 61520, 76649 62307, 76070 62888, 75079 63859, 75079 61373, 78843 57522, 81560 54854, 83073 53341, 83662 52797, 85536 52797)), ((184284 56635, 186953 59352, 188466 60865, 189007 61450, 189007 63326, 188110 62397, 187553 61760, 186851 60925, 186627 60625, 185836 59746, 185719 59673, 184714 58663, 182703 56708, 180843 54855, 180722 54769, 180788 54887, 182267 56353, 185558 59668, 185697 59711, 186057 60036, 185689 59770, 185530 60030, 185610 60059, 186005 60752, 185661 61026, 185043 60318, 184306 59573, 183415 58567, 182459 57342, 181520 56354, 180284 55125, 179497 54441, 178911 53862, 177938 52871, 180433 52871)), ((144547 53041, 143718 53780, 142039 55450, 140716 56832, 139958 57520, 137808 59682, 137316 60218, 136579 61094, 136172 61663, 136172 61688, 135188 63070, 135007 63256, 135007 61167, 139533 56627, 143297 52871, 144750 52871)), ((96910 62186, 96326 62900, 96412 62286, 96749 61956)), ((125321 57323, 129077 61088, 129077 62540, 128907 62338, 128168 61511, 126499 59829, 125116 58506, 124429 57749, 122266 55600, 121730 55107, 120854 54369, 120285 53962, 120260 53962, 118880 52980, 118693 52797, 120782 52797)), ((96743 61951, 96398 62262, 95832 62328, 95846 61824, 96266 61554)), ((185247 53945, 185581 54313, 187922 57028, 188154 57258, 189007 58165, 189007 60670, 188765 60405, 185386 57071, 181232 52871, 184195 52871) (184785 54523, 185180 54972, 185862 55647, 186138 55852, 186144 55798, 185742 55343, 185063 54672, 184807 54465)), ((82617 53039, 79279 56418, 75079 60571, 75079 57609, 76153 56557, 76521 56223, 79237 53882, 79466 53650, 80373 52797, 82881 52797) (77551 56063, 76880 56742, 76673 56997, 76731 57019, 77180 56624, 77855 55942, 78060 55667, 78006 55660)), ((105920 56736, 108524 59361, 109004 59910, 109354 60418, 109398 60543, 107657 59376, 106306 58395, 105330 57525, 105081 57184, 105081 55870)), ((141086 54414, 138711 56817, 135831 59664, 135007 60510, 135007 60116, 136109 59069, 137644 57533, 138814 56466, 139728 55507, 139949 55180, 140052 55103, 140120 54953, 139775 55121, 137726 57186, 137432 57589, 136918 58117, 135007 60014, 135007 58697, 136543 57130, 135762 57906, 135077 58560, 135007 58570, 135007 56543, 136073 55475, 138903 52871, 142627 52871)), ((122880 53901, 124415 55436, 125484 56606, 126442 57517, 126771 57739, 126849 57842, 126999 57910, 126827 57568, 124761 55516, 124359 55223, 123831 54711, 121938 52797, 123251 52797, 124820 54334, 124044 53554, 123388 52867, 123379 52797, 125406 52797, 126473 53863, 129077 56697, 129077 60417, 127538 58880, 125132 56501, 122317 53657, 121439 52797, 121833 52797)), ((186313 53101, 186381 53180, 186893 53644, 186937 53773, 187298 54289, 187286 54632, 187033 54602, 186983 54730, 186521 54641, 186370 54745, 186800 55441, 187130 55377, 187419 55062, 187546 54796, 187594 54514, 187801 54811, 189007 56006, 189007 58050, 188155 57189, 188055 57054, 187813 56776, 186703 55393, 186336 54757, 186150 54750, 184935 53377, 184466 52871, 186046 52871)), ((79398 53649, 79262 53750, 78984 53991, 77604 55101, 76965 55468, 76958 55654, 75585 56872, 75079 57341, 75079 55758, 75311 55491, 75390 55423, 75852 54911, 75981 54867, 76499 54506, 76840 54518, 76810 54771, 76938 54821, 76849 55285, 76953 55435, 77652 55004, 77587 54674, 77272 54385, 77005 54258, 76725 54210, 77021 54003, 78214 52797, 80258 52797)), ((127878 52948, 128221 53202, 128626 53549, 128316 53024, 128095 52797, 128646 52797, 129077 53222, 129077 56663, 126841 54172, 126615 53910, 125978 53085, 125716 52797, 127721 52797)), ((136120 55333, 135295 55971, 135007 56234, 135007 54227, 135157 54071, 135412 53728, 135759 53324, 135231 53632, 135007 53853, 135016 53294, 135432 52871, 138870 52871)), ((189007 53607, 189007 55778, 187953 54656, 187710 54458, 187531 54250, 187362 54011, 187000 53674, 186884 53619, 186210 52871, 188280 52871)), ((76864 53851, 76668 54094, 76462 54273, 76220 54442, 75882 54804, 75827 54920, 75079 55594, 75079 53527, 75815 52797, 77987 52797)), ((85870 53476, 83779 55583, 83330 55455, 83324 55421, 83093 55140, 83877 54554, 84179 54439, 84854 53863, 85293 53387, 85893 52797, 86613 52797)), ((41362 51603, 44970 51632, 50644 51757, 51461 51798, 51461 54959, 31191 54979, 31191 53519, 34314 53534, 35148 53617, 34903 53497, 35351 53430, 33974 53235, 31191 53222, 31191 52634, 32475 52554, 32391 52545, 48553 52549, 49282 52519, 48721 52477, 31605 52431, 31191 52437, 31191 51613, 36010 51597)), ((149605 53940, 149372 53774, 148908 53471, 149067 53315, 149330 53335, 149656 53078, 149894 52871, 150632 52871)), ((151049 48205, 151509 48242, 154740 48581, 154801 48576, 156809 48682, 159295 48751, 161732 48700, 161583 48755, 161690 49948, 161471 50080, 160866 49988, 160817 49972, 160158 49933, 157516 49889, 157546 49917, 158531 50023, 158771 50021, 160084 50053, 160964 50120, 161312 50180, 161038 50354, 160373 51025, 160234 51081, 159784 51074, 158903 50955, 157379 50722, 157085 50640, 156464 50507, 156186 50372, 155381 50206, 154704 50172, 154610 50141, 154300 50134, 153236 50290, 152354 50360, 149370 50372, 149176 50487, 152687 50544, 153549 50512, 154782 50527, 155548 50608, 155756 50652, 156907 50853, 158400 51070, 159607 51296, 160022 51346, 159931 51471, 159382 51921, 158611 52197, 157966 52308, 157800 52249, 157099 52278, 156670 52311, 156350 52210, 155907 52090, 155472 51922, 154994 51819, 154613 51762, 154311 51626, 154295 51517, 153968 51409, 153061 51489, 152054 51649, 151737 51612, 151584 51667, 151359 52036, 151441 52258, 151314 52478, 150872 52486, 150236 52522, 149406 52486, 147343 52486, 147152 52543, 146249 52521, 146206 52495, 137251 52485, 136707 52453, 136419 52500, 136017 52490, 135730 52354, 135823 52307, 136148 52292, 136038 52152, 136198 52060, 142993 52041, 145134 52106, 145369 52301, 145544 52274, 145515 52170, 145379 52233, 145162 52004, 142246 51889, 136460 51885, 136111 51866, 135701 51684, 135499 51367, 135724 51206, 136658 51185, 138129 51120, 135683 51110, 135356 51015, 135026 50987, 134135 50492, 133869 50315, 133604 50287, 133898 50578, 134092 50847, 134100 50970, 134061 51046, 133896 51052, 133488 50986, 133055 50738, 132133 49845, 132089 49730, 132317 49594, 132554 49538, 132487 49335, 132762 49271, 132943 49166, 135556 49156, 138149 49126, 138487 49095, 138515 49083, 140253 48921, 140659 48895, 140973 48849, 141688 48777, 144334 48297, 144682 48268, 147939 48200) (147077 52166, 146761 52236, 146593 52289, 146010 52213, 145921 52304, 146281 52371, 146428 52460, 146825 52481, 147053 52416, 147179 52316, 147499 52111, 147813 52107, 147979 52072, 147875 52028, 147431 52009) (142770 51092, 141211 51120, 142343 51134, 142612 51213, 142960 51230, 144059 51243, 144792 51228, 145281 51239, 145515 52171, 145597 52146, 146014 52204, 146084 52108, 146089 51979, 145990 51935, 145632 52004, 145603 52105, 145427 51619, 145288 51107, 144833 51054, 143851 51040) (137547 49874, 139210 50134, 140251 50342, 140828 50372, 141012 50351, 140954 50299, 139596 50060, 138056 49849) (146352 49272, 146066 49406, 146444 49363, 146578 49862, 146612 49860, 146723 50187, 146807 50057, 146759 50049, 146445 49260) (147739 49201, 147320 49265, 147080 49353, 146898 49905, 147087 49592, 147124 49437, 147647 49460, 147909 49554, 148004 49401, 148290 49392, 148418 49639, 148445 49928, 148434 49626, 148557 49441, 148948 49362, 149352 49306, 149038 49240, 148072 49201) (144663 49291, 143187 49352, 146064 49406, 145685 49268)), ((154072 51890, 155300 52140, 155999 52339, 155730 52422, 154886 52479, 153571 52528, 153891 51698, 154059 51695)), ((191898 47272, 192121 47381, 192107 48385, 192233 48507, 191108 48420, 189084 48311, 188896 48292, 188333 48275, 183367 48281, 180143 48130, 176075 48101, 170466 48120, 169006 48023, 164040 47578, 165432 47773, 170003 48214, 176215 48234, 179161 48226, 182419 48346, 182557 48366, 187074 48394, 187986 48417, 189586 48566, 190813 48651, 191483 48665, 192157 48644, 191918 48761, 191953 48782, 191959 49076, 191728 50115, 191531 50195, 191278 50115, 190341 50028, 188895 50055, 188718 50122, 186794 50139, 184401 49976, 182997 49788, 182676 49753, 180851 49679, 178984 49705, 178906 49731, 179079 49746, 181043 49768, 184248 49999, 185521 50176, 186463 50292, 186775 50311, 189227 50311, 189861 50393, 190596 50389, 191190 50445, 191177 50491, 190044 51540, 189572 52014, 189356 52200, 189002 52481, 166806 52510, 165108 52461, 164415 51830, 164400 51717, 165953 51686, 166716 51697, 167377 51687, 167730 51617, 167602 51507, 165314 51472, 164950 51486, 164222 51548, 164024 51457, 162923 50403, 163407 50410, 164097 50374, 164825 50449, 167159 50765, 167790 50869, 169179 51141, 169858 51259, 170829 51390, 172142 51505, 175100 51482, 176350 51495, 177008 51420, 179019 51434, 181764 51434, 183144 51411, 183999 51380, 183204 51343, 177287 51262, 176731 51271, 176544 51240, 173638 51239, 172843 51310, 171571 51267, 170487 51174, 170034 51109, 168144 50795, 167762 50721, 165394 50376, 164531 50259, 164292 50168, 163653 50079, 162537 50048, 162413 50011, 162378 49848, 162398 49148, 162218 49051, 163254 49039, 164912 49050, 167015 49190, 167709 49220, 168879 49248, 171190 49269, 171721 49223, 172718 49216, 175101 49164, 175304 49066, 174599 48948, 170822 48928, 169133 48932, 167819 48965, 167077 48951, 165546 48897, 164798 48836, 164386 48773, 162857 48740, 162111 48831, 162265 48733, 162312 48368, 162165 47348, 162515 47241) (182189 50413, 179290 50412, 177163 50381, 175281 50440, 173358 50478, 171638 50498, 172806 50513, 173665 50544, 173412 50584, 174789 50618, 175597 50610, 175981 50572, 178953 50513, 182104 50514, 183514 50538, 184409 50540, 184949 50512, 184725 50388, 184050 50368)), ((159232 52189, 158997 52421, 158573 52475, 158182 52496, 158197 52371, 158652 52236, 159242 52028)), ((92995 50946, 93017 51091, 92367 51182, 91624 51390, 91499 51780, 91408 52133, 91446 52167, 91371 52182, 91335 52436, 83921 52450, 77113 52431, 76121 52407, 75716 52429, 75369 51951, 75305 51785, 75182 51644, 74991 51375, 75448 51289, 76455 51257, 77507 51250, 83963 51269, 85653 51346, 86517 51274, 86906 51172, 88372 50981, 89649 50933)), ((74567 51723, 74586 51687, 75091 51727, 75361 51950, 75603 52389, 75559 52397, 75600 52431, 75169 52443, 74836 52307, 74469 51932, 74109 51529)), ((105392 47155, 117427 47165, 122004 47193, 131981 47194, 131945 47468, 131972 47478, 131991 48234, 131181 48265, 130995 48263, 130404 48367, 130620 48467, 131431 48576, 131827 48584, 132056 49015, 132055 49099, 131976 49222, 131043 49112, 130053 49114, 129353 49194, 127101 49263, 126981 49276, 124690 49282, 123806 49340, 123091 49453, 118149 49442, 117862 49477, 117664 49517, 116968 49562, 117974 49603, 121542 49604, 123100 49638, 124368 49619, 124847 49594, 126847 49624, 129122 49511, 129247 49498, 130757 49436, 131993 49435, 131965 49545, 131426 50248, 131167 50567, 130292 51362, 130235 51349, 129281 51427, 129189 51423, 128958 51523, 129343 51620, 129609 51653, 129739 51788, 129295 52237, 129010 52437, 127898 52439, 121408 52398, 116148 52439, 112039 52438, 110010 52396, 106400 52437, 105291 52390, 105051 52280, 103669 51047, 103603 50918, 104238 51026, 106575 51046, 107209 50968, 108916 50947, 110519 51007, 112443 51049, 113132 51110, 113972 51207, 114446 51392, 114676 51405, 115173 51329, 115275 51295, 116404 51299, 118962 51258, 120492 51253, 120631 51223, 120532 51179, 119000 51191, 115354 51171, 115260 51239, 115134 50874, 115071 50917, 114518 50728, 114509 50315, 115126 50344, 115162 50320, 115995 50326, 117095 50411, 118316 50607, 119388 50642, 120768 50640, 121613 50567, 122330 50564, 123846 50635, 125744 50644, 127234 50569, 127209 50421, 126627 50369, 125829 50376, 125162 50329, 123287 50385, 119850 50380, 119125 50322, 117523 50242, 117287 50204, 116389 50113, 114354 50137, 114299 50185, 114053 50225, 113827 50199, 113751 50149, 112802 50153, 111687 50186, 110186 50056, 109817 50038, 108275 49832, 106758 49789, 106246 49874, 106716 49976, 107528 50013, 108267 50107, 108894 50136, 109838 50205, 111257 50278, 113745 50267, 114013 50677, 114002 50715, 114057 51092, 113288 50947, 113022 50814, 112303 50737, 110534 50723, 109879 50796, 108471 50818, 107325 50796, 105961 50739, 104443 50737, 103768 50805, 103575 50896, 103361 50809, 103148 50577, 102464 49533, 102521 49480, 103627 49289, 105500 49076, 106635 48994, 110367 48972, 112023 49035, 113035 48974, 113236 48807, 112345 48781, 112138 48727, 111533 48708, 110461 48714, 110129 48774, 107619 48779, 106706 48713, 105360 48729, 105056 48803, 104736 48843, 103282 49078, 103162 49055, 103608 48325, 103611 48113, 104743 47905, 104534 47771, 102306 47706, 102219 47663, 102134 48401, 102205 48600, 102098 48551, 101581 48593, 95401 48581, 94432 48570, 93896 48584, 93682 48638, 91619 48894, 90461 49089, 90125 49136, 89783 49216, 81967 49267, 81882 49254, 80609 49302, 80381 49378, 79216 49335, 79187 49316, 78490 49333, 77969 49428, 77962 49498, 78118 49571, 78865 49602, 79077 49619, 79491 49596, 79563 49574, 79926 49524, 80646 49444, 81267 49412, 82027 49342, 88522 49340, 89923 49284, 91285 49137, 92909 48921, 94233 48720, 102189 48712, 102033 48818, 102093 49457, 101994 49740, 101452 50303, 101216 50428, 100425 50350, 99609 50309, 98186 50279, 96585 50292, 95649 50340, 89688 50356, 85995 50335, 85524 50314, 84886 50319, 84878 50368, 89686 50358, 96884 50395, 97798 50436, 99207 50547, 100033 50527, 101194 50445, 101061 50620, 99262 52173, 99007 52404, 94053 52395, 94299 52009, 94206 51969, 93723 52192, 93706 51802, 94279 51520, 94412 51369, 94646 50857, 94360 50814, 94199 50829, 91913 50778, 89253 50768, 86684 50998, 86494 51038, 85728 51033, 84045 51105, 82325 51118, 77432 51121, 75485 51076, 75186 51009, 74930 50594, 74453 50102, 74346 49870, 74051 49537, 73973 49569, 73722 49574, 73680 49546, 73175 49593, 72940 49657, 72666 49837, 72738 49454, 73042 49221, 73566 48606, 73763 48407, 73984 48264, 74086 48083, 74322 47917, 78704 47956, 81331 47935, 81715 47919, 82151 48090, 82326 48105, 82710 47922, 83241 47940, 85790 47980, 87568 48086, 88088 48205, 88646 48298, 89455 48505, 89729 48626, 90431 48688, 91712 48658, 91572 48605, 92157 48532, 91629 48486, 91709 48450, 89910 48343, 89317 48188, 88870 48015, 87904 47767, 87344 47739, 87134 47842, 84587 47845, 82655 47874, 82268 48009, 81792 47865, 79432 47848, 77439 47853, 74361 47877, 74448 47729, 74879 47278, 75048 47197, 80890 47147, 81073 47370, 81232 47516, 81385 47511, 81717 47298, 82144 47188, 83507 47146, 85173 47167, 86272 47168, 88441 47149, 99647 47208, 102228 47205, 102269 47246, 102449 47133) (114110 48735, 113873 48588, 114065 48889, 114121 49076, 114583 49252, 114824 49232, 114921 49116, 114871 48524) (120605 48315, 121404 48640, 122019 48853, 123863 48869, 124451 48779, 124658 48687, 124278 48590, 122619 48561, 121977 48536, 120677 48220, 119841 48044)), ((93126 52250, 92797 52284, 93035 52083, 93259 52068)), ((93607 51371, 93336 52000, 93028 51979, 92874 51610, 93297 51263)), ((51461 49486, 51461 50723, 50634 50731, 51461 50734, 51461 51674, 50563 51620, 46517 51435, 43948 51387, 40815 51417, 33014 51458, 31191 51444, 31191 49484)), ((134408 51334, 134628 51483, 134788 51629, 134501 51638, 134228 51627, 134211 51539, 134060 51372, 134200 51294)), ((138713 47251, 138475 47456, 137963 48114, 137988 48328, 138093 48422, 138471 48422, 138420 48547, 138574 48622, 138878 48465, 139200 48539, 139460 48543, 139712 48586, 139986 48468, 140055 48630, 140236 48692, 140170 48877, 138439 49042, 138118 49065, 135607 49144, 132901 49111, 132576 49034, 132297 48953, 132212 48784, 132366 48667, 132747 48594, 132823 48360, 132544 48219, 135087 48221, 135754 48102, 135392 48022, 133270 48003, 132386 48010, 132178 47981, 132169 47794, 132370 47584, 132517 47473, 132593 47270, 133152 47195) (133086 47631, 133167 47684, 133386 47643, 133473 47552, 133443 47499, 133034 47498)), ((35792 48667, 36397 48725, 38847 48856, 38447 48902, 37214 48990, 35497 49036, 34203 49016, 32537 49048, 31191 49044, 31191 48382)), ((33077 47044, 34889 47199, 46662 47563, 49626 47665, 50322 47748, 50554 47796, 51223 47789, 51301 47940, 50952 48441, 51397 48714, 51364 48835, 51168 48976, 48223 49014, 47670 48878, 48396 48790, 46960 48848, 45422 48785, 40522 48839, 36730 48637, 34307 48419, 31910 48266, 31191 48163, 31191 46949)), ((142440 47210, 145614 47210, 154116 47260, 157083 47254, 161630 47207, 161824 47320, 161842 47902, 161871 48158, 161779 48503, 161043 48451, 159306 48453, 159087 48520, 154868 48543, 151700 48194, 151048 48133, 150723 48138, 148758 48118, 147910 48143, 147460 48112, 144928 48130, 144361 48163, 143508 48260, 141544 48674, 140713 48803, 140638 48716, 140273 48688, 140759 48515, 141078 48177, 141292 47878, 141306 47765, 141640 47461, 141735 47299, 142270 47178)), ((171926 41086, 174281 41112, 174335 41156, 174403 41928, 174409 42217, 174277 42312, 173213 42240, 172696 42190, 171239 42144, 169425 42259, 168182 42267, 164306 42355, 169841 42415, 171069 42417, 172770 42537, 173497 42508, 174142 42536, 174387 42641, 174381 45396, 174282 45486, 174150 45535, 172538 45451, 169896 45380, 169141 45462, 169258 45543, 171401 45649, 173378 45670, 174252 45695, 174410 45845, 174309 46500, 173969 46592, 173646 46598, 167947 46562, 163910 46559, 163422 46446, 163169 46443, 162591 46486, 161025 46475, 160296 46400, 159769 46487, 158929 46552, 158494 46559, 157627 46437, 157129 46510, 156733 46506, 154994 46450, 154603 46461, 153882 46557, 153155 46578, 152339 46563, 130010 46585, 120641 46560, 116929 46607, 112696 46559, 112487 46436, 112464 46261, 112684 46117, 113349 46095, 116755 46023, 118310 45942, 118573 45905, 119233 45840, 118803 45772, 117550 45767, 112688 46034, 112482 45871, 112505 44623, 112456 44136, 112711 43965, 113667 43976, 116349 43931, 116702 43845, 115511 43807, 112763 43792, 112519 43674, 112869 43373, 112850 42871, 112877 42773, 112967 42237, 112701 42142, 112726 41984, 112484 41699, 112468 41310, 112544 41191, 112743 41123, 125412 41113, 127569 41151, 139744 41110, 159082 41129, 160266 41095, 161412 41115, 162340 41154, 163156 41166, 164740 41297, 165304 41295, 166156 41236, 166418 41308, 167713 41314, 168799 41252, 169366 41183, 170158 41304, 170819 41048) (160948 44410, 161902 44494, 163882 44742, 165666 44807, 166113 44852, 167057 44875, 167247 44831, 167134 44719, 162498 44396, 161242 44292, 158568 44174) (115540 44571, 114975 44668, 116024 44730, 117518 44756, 119210 44749, 122202 44650, 124302 44629, 122324 44610, 118712 44532) (131247 44042, 135006 44098, 146494 44096, 151655 44086, 147210 44079, 148154 44008, 144387 43988, 136519 43987) (140933 42350, 139126 42416, 142091 42406, 145766 42368, 141807 42343)), ((107932 35347, 109743 35341, 109924 35295, 139376 35295, 139360 35427, 139491 35675, 139616 35842, 139607 36176, 139083 36161, 135802 36164, 137901 36250, 139571 36430, 140622 36385, 142593 36356, 143286 36308, 143354 36356, 143361 37203, 143242 37293, 139777 37413, 138686 37497, 140555 37538, 141775 37529, 141916 37507, 143266 37461, 143423 37512, 143379 38960, 143274 39151, 143406 39701, 143432 39935, 143203 40118, 143011 40126, 143200 40138, 143371 40361, 143358 40481, 143209 40594, 141553 40611, 135492 40589, 134704 40575, 134170 40398, 134211 40367, 134130 40056, 134126 39832, 134185 39772, 134069 39731, 133827 39772, 133702 39918, 133423 39989, 133372 40084, 133168 40023, 132777 40005, 132569 39947, 132548 39808, 132344 39883, 131736 39789, 131315 39613, 130905 39655, 130792 39766, 130775 39899, 130587 39983, 130518 40088, 130202 40169, 129951 40299, 129204 40346, 129041 40322, 128727 40386, 128544 40469, 128939 40504, 128908 40583, 128209 40575, 85022 40567, 84816 40420, 84777 40269, 85021 40002, 85125 39995, 85021 39990, 84758 39790, 84799 39282, 84922 38911, 85218 38885, 85773 38816, 87708 38820, 90026 38741, 85944 38664, 85574 38597, 84952 38560, 84873 38380, 85078 38252, 85826 38030, 85941 37960, 86207 37863, 86526 37811, 87040 37747, 87303 37780, 87712 37759, 87989 37607, 87975 37386, 88172 37292, 88823 37240, 88794 37183, 88195 37162, 87946 37021, 88206 36589, 88365 36441, 88963 35534, 89144 35448, 89372 35295, 107830 35295) (135939 39114, 133697 39084, 130096 39099, 129614 39150, 130029 39229, 136260 39203, 139341 39252, 141002 39230, 142204 39153, 141150 39073, 137451 39069) (105784 37299, 104654 37341, 103335 37454, 101848 37502, 102328 37568, 104017 37521, 105601 37434, 106460 37358, 106603 37296) (113920 35767, 108358 36171, 102831 36486, 102050 36522, 97340 36654, 95719 36746, 95685 36837, 96866 36884, 99117 36830, 103364 36582, 109963 36123, 113872 35800, 122305 35452, 122755 35451, 122324 35449)), ((206000 36515, 205872 36674, 206002 36783, 205990 38102, 205956 38164, 204385 38359, 203970 38395, 200934 38594, 198367 38680, 196289 38697, 193540 38700, 189908 38681, 186512 38625, 184500 38702, 184637 38729, 184389 38851, 186082 38916, 186430 38948, 190106 38937, 191082 38891, 196644 38882, 199168 38945, 201268 38930, 203252 38802, 205407 38611, 205517 38587, 205832 38570, 206070 38599, 205995 39612, 202862 39809, 202926 39827, 202880 39935, 205820 40000, 206027 40044, 206111 40294, 206109 40462, 205799 40587, 201358 40554, 175322 40543, 162606 40568, 152823 40561, 144643 40570, 144171 40289, 144070 39814, 144032 39448, 147479 39440, 149058 39325, 148458 39231, 146755 39140, 144130 39129, 144152 39065, 144103 38548, 144313 38450, 144877 38449, 146906 38532, 149180 38527, 150577 38462, 151022 38427, 153545 38326, 156048 38319, 158324 38354, 160137 38297, 162281 38166, 172945 38166, 174143 38122, 173212 38052, 162021 38011, 158117 38037, 154179 38010, 152211 38082, 152035 38079, 149446 38140, 149028 38160, 146288 38218, 144267 38219, 144134 38179, 144107 36193, 146124 36115, 146211 36019, 145656 35905, 144817 35907, 144121 35773, 144185 35295, 206005 35295) (158630 38900, 158095 38987, 158680 39114, 163979 39139, 166840 39459, 167325 39502, 166536 39355, 165165 39228, 164857 39074, 165046 39030, 163863 38828, 159933 38816) (180201 38403, 180036 38513, 180120 38680, 180388 38971, 182009 38830, 181457 38491, 180691 38383) (187577 37422, 191032 37592, 193942 37776, 197013 37820, 197834 37742, 197264 37652, 194294 37509, 192830 37479, 191086 37417, 188672 37371) (181067 37342, 179194 37305, 177395 37312, 175339 37236, 171932 37025, 170398 36971, 168510 37006, 164951 37042, 155751 37015, 152914 37056, 152871 37178, 154129 37227, 157088 37243, 165598 37207, 168936 37212, 171012 37238, 174599 37350, 175056 37386, 176691 37460, 181203 37435, 181711 37257, 181917 37268, 182040 37390, 182072 37250, 182483 37396, 184823 37390, 184504 37356, 182791 37357, 182517 37345, 182168 36984, 182036 36916, 181868 37112, 181544 37189, 181281 36879) (197854 36625, 195095 36700, 195431 36717, 199271 36800, 200587 36838, 203430 36833, 205380 36784, 205651 36675, 204519 36562, 199813 36543) (179470 36264, 171993 36332, 167653 36337, 167558 36347, 167642 36361, 172414 36344, 179371 36372, 179559 36316, 180507 36287, 181228 36308, 182131 36456, 183927 36611, 184628 36763, 185717 36819, 186802 36815, 189396 36826, 191848 36738, 193926 36709, 190936 36630, 190176 36579, 185758 36531, 184535 36480, 182417 36370, 181721 36259, 179761 36211) (179785 36497, 179813 36624, 181051 36792, 181204 36510, 180330 36445)), ((143407 35721, 143410 36018, 143307 36102, 142107 36088, 141770 36180, 141038 36122, 139775 36178, 139726 36155, 140066 36012, 140500 36005, 140562 36035, 140859 36111, 140681 36014, 141017 35886, 141003 35763, 141484 35648, 141686 35646, 142115 35542, 142699 35350, 142815 35295, 143312 35295)), ((51599 35727, 51435 35789, 50205 35720, 48107 35688, 37197 35751, 31191 35557, 31191 35295, 51581 35295))) \ No newline at end of file +MULTIPOLYGON (((84002 36515, 83870 36674, 84000 36783, 83990 38101, 83956 38164, 82287 38370, 78936 38594, 76367 38680, 74287 38697, 71540 38700, 67910 38681, 64513 38625, 62501 38703, 62637 38729, 62389 38851, 64083 38916, 64432 38948, 68107 38937, 69081 38891, 74645 38882, 77180 38945, 79276 38930, 81273 38800, 83408 38611, 83518 38587, 83834 38569, 84071 38598, 83995 39612, 80864 39809, 80928 39827, 80879 39934, 83822 40000, 84029 40044, 84110 40294, 84107 40462, 83799 40587, 79357 40554, 59468 40547, 59459 41106, 62742 41115, 77106 41122, 82193 41084, 100117 41126, 111401 41123, 111562 41820, 111240 41972, 109670 41959, 108712 41941, 107106 41961, 106395 42045, 107192 42138, 109526 42169, 110763 42151, 111388 42192, 111500 42282, 111463 43882, 111617 44000, 111263 43986, 106901 43550, 106654 43505, 106169 43392, 105650 43232, 104125 43182, 101526 43363, 101480 43460, 99825 43707, 97130 44045, 95146 44269, 92962 44346, 88955 44378, 88388 44374, 87835 44386, 85325 44476, 80723 44493, 79521 44508, 74572 44504, 73216 44489, 70920 44434, 69370 44366, 68816 44313, 66917 44444, 66682 44453, 66151 44645, 65924 44648, 65521 44747, 65700 44802, 65510 44865, 67886 44772, 68632 44709, 71448 44648, 78276 44612, 77886 44584, 79960 44578, 80946 44611, 85577 44655, 86532 44651, 88093 44696, 92467 44673, 92754 44665, 95250 44708, 98126 44614, 101310 44602, 101885 44575, 101513 44521, 98824 44500, 96363 44353, 96318 44268, 99786 43831, 102566 43550, 104993 43459, 106432 43552, 111195 44075, 111633 44139, 111544 44201, 111416 44426, 111205 44591, 111492 44837, 111417 45202, 111462 46486, 111012 46569, 102459 46585, 62084 46593, 59414 46583, 59413 47106, 66021 47095, 74553 47101, 73384 48341, 71963 48250, 70106 48187, 67701 48137, 62362 48140, 60033 48127, 59411 48165, 59409 48353, 59870 48382, 65641 48405, 66989 48347, 68767 48363, 70063 48354, 72516 48449, 73232 48502, 71364 50481, 68716 50472, 67397 50504, 63029 50519, 61601 50579, 61135 50660, 62321 50751, 68719 50781, 69279 50792, 71073 50790, 69382 52577, 59399 52571, 59392 53096, 61902 53083, 67688 53091, 68177 53303, 68518 53421, 68885 53393, 69105 53329, 69105 53858, 64849 53832, 59270 53857, 59269 53868, 62043 53909, 63485 53893, 64137 53897, 69105 53865, 69105 55359, 68659 55408, 66656 55365, 65716 55390, 64768 55469, 64495 55529, 65113 55599, 66743 55637, 67064 55625, 69105 55478, 69105 57214, 60970 57222, 59409 57184, 59332 57378, 61035 57336, 69105 57348, 69105 58586, 59323 58600, 59340 59089, 69105 59091, 69105 64525, 68695 64518, 59113 64556, 59113 63270, 59616 63250, 59113 63252, 59113 61679, 61680 61681, 65921 61626, 62894 61570, 59113 61571, 59040 61678, 59055 62113, 59023 62702, 58979 63079, 58978 63576, 58653 63984, 58650 64748, 58539 65085, 58471 65701, 58480 66565, 58014 67192, 57968 67927, 57954 68516, 58585 68879, 58871 68995, 58905 69387, 59067 69569, 59194 71078, 69105 71080, 69105 71542, 64022 71551, 59934 71481, 59504 71284, 59405 71286, 59504 71292, 59885 71545, 65791 71665, 69105 71672, 69105 73461, 67975 73310, 66908 73239, 66541 73278, 66938 73347, 67749 73448, 69105 73591, 69105 73949, 69054 74659, 69097 74795, 69072 75094, 68669 75051, 68232 75164, 67862 75244, 67583 75547, 67423 75876, 67478 75970, 67074 76282, 67042 76388, 66795 76495, 66180 76573, 65963 76544, 61840 76546, 61800 77099, 69105 77098, 69105 82559, 62256 82551, 62263 83081, 69105 83070, 69105 84786, 62231 84775, 62243 84906, 69105 84884, 69105 86551, 68472 86546, 67829 86527, 64216 86480, 62262 86519, 62262 86660, 63186 86666, 66592 86741, 69105 86770, 69105 88553, 62260 88549, 62259 89073, 69105 89087, 69105 90270, 67921 90267, 63819 90154, 62251 90089, 62124 90449, 61771 90174, 61482 90282, 61437 90543, 62245 90489, 64823 90456, 69105 90442, 69105 93051, 67943 93171, 66058 93192, 65171 93232, 61802 93249, 61875 93381, 64402 93378, 66857 93402, 67576 93465, 67820 93499, 68791 93445, 69105 93409, 69105 94521, 64740 94543, 62281 94546, 62281 95101, 69105 95099, 69105 96639, 68813 96630, 68074 96579, 63750 96529, 62279 96466, 62279 96686, 62621 96762, 63717 96820, 64784 96815, 67321 96826, 69105 96759, 69105 97424, 66616 97372, 65560 97423, 67856 97531, 69105 97607, 69105 98687, 67788 98678, 64510 98623, 62500 98703, 62636 98730, 62393 98850, 64083 98914, 64429 98946, 68001 98936, 69105 98885, 69105 100549, 62055 100547, 61996 100703, 62016 101115, 69105 101119, 69105 102022, 68548 102017, 68149 102049, 69105 102081, 69105 104352, 68691 104311, 66435 104443, 66101 104452, 65458 104647, 65187 104648, 64693 104749, 64915 104803, 64686 104864, 67634 104773, 68421 104710, 69105 104691, 69105 106591, 62052 106591, 62021 107096, 69407 107103, 70541 108339, 69041 108248, 67188 108187, 64553 108138, 62047 108140, 62065 108403, 62580 108406, 64060 108347, 65981 108361, 67423 108353, 69913 108449, 70690 108502, 72501 110479, 69596 110472, 68105 110505, 62595 110518, 62252 110529, 62252 110752, 70246 110783, 70929 110794, 72781 110790, 74419 112578, 62256 112574, 62260 113085, 67473 113091, 68094 113303, 68553 113422, 69018 113395, 69552 113235, 70043 113199, 70359 113210, 70520 113086, 74383 113086, 78440 113130, 80415 113120, 85895 113065, 109057 113122, 111516 113165, 111617 114378, 111246 114633, 98580 114589, 97684 114618, 93654 114818, 92306 114929, 89190 115153, 88363 115254, 85510 115263, 85696 115331, 88462 115279, 91830 115086, 94697 114905, 97936 114674, 111239 114643, 111584 114812, 111607 115453, 111604 115855, 111578 116375, 111460 116504, 111557 116715, 111575 118330, 111413 118513, 111174 118580, 95388 118596, 93255 118528, 92938 118563, 92946 118600, 76809 118581, 62279 118593, 62279 119085, 66370 119084, 75934 119109, 79546 119063, 83780 119109, 83988 119232, 84012 119407, 83792 119551, 83127 119574, 79721 119647, 78166 119728, 77903 119765, 77242 119830, 77673 119897, 78926 119903, 83788 119634, 83994 119802, 83972 121045, 84022 121532, 83766 121705, 82810 121694, 80127 121739, 79774 121824, 80965 121862, 83712 121878, 83956 121996, 83607 122295, 83625 122797, 83597 122895, 83507 123431, 83774 123526, 83750 123685, 83991 123971, 84008 124360, 83934 124479, 83732 124547, 71064 124556, 68907 124517, 62286 124540, 62282 124882, 62577 124887, 62755 124950, 63106 124875, 63377 125039, 63545 124889, 65096 124899, 65265 125025, 65161 125377, 65213 125673, 65506 125758, 65604 125708, 65626 125100, 65684 124987, 65741 125002, 66041 124875, 66304 124874, 66370 124954, 66392 125438, 66541 125205, 66572 124952, 66633 124869, 67928 124873, 69205 124931, 69513 125093, 70510 125093, 70514 124958, 71413 124882, 71571 124952, 71566 125094, 71871 125094, 71872 125068, 72020 125094, 72816 125093, 73014 124979, 73398 124905, 76771 124872, 79039 124875, 79060 125096, 79313 125083, 79938 124984, 80152 124988, 80190 124934, 81361 124931, 81519 124965, 81550 124916, 81926 124911, 82145 124994, 82179 124963, 82365 125095, 111454 125102, 111660 125250, 111699 125400, 111455 125668, 111351 125675, 111455 125680, 111718 125879, 111677 126386, 111554 126757, 111258 126784, 110703 126853, 108768 126850, 106450 126929, 110532 127006, 110902 127071, 111525 127107, 111606 127290, 111398 127418, 110650 127638, 110534 127708, 110268 127805, 109950 127858, 109436 127923, 109173 127889, 108764 127910, 108487 128061, 108501 128280, 108304 128375, 108036 128398, 108248 128448, 108866 128505, 109730 128497, 110199 128590, 110372 128709, 111091 128756, 111680 128770, 112043 128499, 112166 128360, 112481 128352, 112487 127566, 112519 127504, 114089 127307, 114504 127272, 116621 127135, 116787 126764, 115223 126866, 113067 127056, 112958 127081, 112642 127099, 112405 127070, 112481 126057, 115610 125860, 115548 125842, 115597 125734, 112654 125668, 112447 125623, 112366 125374, 112369 125206, 112675 125083, 117485 125114, 117770 125099, 117940 125003, 118160 124982, 118705 125035, 118915 124824, 120513 124944, 120682 125115, 124106 125116, 124132 125066, 126672 125087, 126662 125119, 136882 125123, 136878 125100, 137173 125058, 137387 125123, 138822 125121, 139460 125054, 139523 125124, 146725 125117, 146818 125061, 148375 125061, 148420 125114, 148981 125113, 149011 125072, 151019 125085, 151191 125108, 152449 125104, 152622 125060, 154093 125072, 154084 125101, 154161 125103, 154160 124894, 159221 124887, 159564 124950, 160235 124875, 160769 125044, 161075 124889, 164082 124899, 164379 125028, 164353 125106, 165081 125106, 165170 124987, 165279 125002, 165855 124875, 166358 124874, 166484 124954, 166500 125104, 166837 125105, 166873 124952, 166966 124875, 169468 124873, 171913 124931, 172514 125098, 173832 125098, 174305 125381, 174395 125802, 174551 125741, 174411 125116, 174421 124958, 176146 124882, 176449 124952, 176438 125064, 178929 125063, 179211 124979, 179945 124905, 187160 124872, 192014 124875, 192024 125096, 192237 125096, 192237 184077, 144094 184077, 144089 183978, 143597 183967, 143595 184077, 84967 184077, 84925 183841, 85236 183698, 87764 183728, 89370 183708, 90081 183624, 89284 183532, 86950 183499, 85713 183518, 85089 183478, 84978 183388, 85013 181785, 84858 181667, 85212 181680, 89575 182118, 89822 182164, 90307 182276, 90826 182438, 92351 182486, 94952 182307, 94997 182208, 96652 181960, 99346 181625, 101330 181401, 103514 181322, 107521 181288, 108088 181293, 111154 181194, 116132 181172, 116134 181080, 115540 181059, 110899 181015, 109944 181017, 108383 180970, 103722 181003, 101226 180961, 98350 181054, 95166 181067, 94591 181095, 94963 181149, 97652 181170, 100113 181316, 100158 181402, 96690 181836, 93910 182116, 91483 182207, 90044 182116, 85281 181591, 84841 181529, 84930 181469, 85060 181240, 85271 181078, 84984 180832, 85059 180467, 85015 179181, 85464 179101, 94016 179084, 116232 179079, 116232 178583, 104400 178598, 102267 178526, 101950 178562, 101958 178598, 83709 178582, 83705 179101, 83758 179102, 83959 179353, 84032 180592, 83898 180732, 83897 180891, 84046 180975, 83990 181811, 83801 181887, 83600 181883, 83424 182115, 83803 182108, 84005 182176, 84003 182427, 84047 182787, 83837 182990, 83967 183139, 84006 184077, 52457 184077, 51410 184112, 51165 184037, 51135 184159, 50135 184106, 49715 184059, 49376 184166, 49126 184130, 48821 184072, 48410 184032, 48005 184022, 47844 184150, 47717 184177, 47284 184149, 47062 184231, 46983 184210, 46675 184230, 46568 184186, 46421 183664, 46412 183517, 46127 183051, 46239 182724, 46240 166827, 46346 166844, 46444 166290, 46478 165953, 46491 165486, 46319 165268, 46352 164778, 46305 164645, 46218 164560, 46139 164175, 46244 163941, 47004 163900, 47310 163710, 47492 163702, 47794 163809, 47954 163815, 47948 162974, 14721 162990, 14257 162935, 14197 161777, 14314 161698, 14998 161745, 15471 161743, 16818 161765, 18231 161737, 22531 161690, 24039 161689, 24687 161742, 26116 161670, 27712 161482, 29604 161139, 31068 160839, 33422 160598, 47944 160655, 47944 160592, 43563 160502, 40976 160470, 37111 160493, 33491 160586, 33763 160517, 32250 160521, 31409 160575, 30776 160672, 29422 160840, 28798 160954, 25886 161329, 24657 161421, 24147 161495, 19954 161512, 18123 161484, 15956 161488, 14369 161470, 14276 161342, 14195 158762, 14357 158699, 15586 158768, 16986 158800, 22607 158737, 27544 158927, 30347 159080, 31910 159262, 34420 159418, 34916 159438, 38248 159461, 39624 159347, 40314 159311, 44981 159230, 46706 159165, 45010 159125, 38018 159162, 34839 159085, 33556 158992, 31331 158981, 28376 158837, 20392 158568, 16515 158550, 15834 158524, 14407 158498, 14286 158326, 14356 157533, 21940 157501, 47958 157504, 47941 157203, 48069 156736, 26202 156725, 27363 155564, 28103 155551, 27387 155541, 28308 154620, 30348 154651, 30875 154619, 31062 154578, 29687 154555, 28347 154581, 31694 151234, 48047 151238, 48011 150955, 31191 150954, 31191 147771, 31543 147745, 33870 147650, 41024 147635, 42153 147625, 39430 147525, 32674 147497, 31191 147539, 31191 146364, 32766 146256, 33003 146255, 34007 146185, 34421 146011, 34183 145694, 34113 145490, 34153 145444, 39619 145446, 42886 145486, 47946 145481, 47956 144963, 44954 144978, 31191 144985, 31191 143038, 32887 143044, 35929 143009, 36306 142894, 34489 142853, 31191 142841, 31191 142033, 34366 142053, 36911 141979, 37365 141983, 41945 141925, 42732 141903, 48210 141839, 48210 141822, 48734 141640, 48757 141597, 46125 141545, 42483 141546, 39886 141614, 38845 141658, 35155 141754, 32938 141760, 31191 141734, 31191 139493, 47984 139492, 47965 138960, 31191 138961, 31191 136811, 33389 136585, 48173 136640, 48180 136578, 44134 136488, 41621 136456, 37404 136479, 33491 136572, 33763 136503, 32250 136507, 31191 136576, 31191 135164, 31909 135248, 34420 135404, 34930 135424, 38483 135447, 39880 135333, 40569 135297, 45064 135216, 46701 135157, 46463 135142, 45222 135111, 38205 135148, 34839 135071, 33556 134978, 31191 134961, 31191 133488, 47962 133490, 47960 132959, 37902 132985, 31191 132983, 31191 131677, 37951 131859, 41421 131919, 47957 131933, 47955 131687, 37134 131749, 31191 131556, 31191 129376, 32859 129154, 34088 129067, 34599 128993, 41715 128975, 45033 129003, 47944 128998, 47942 128720, 45512 128747, 37378 128796, 34707 128797, 34059 128742, 32629 128816, 31191 128984, 31191 127507, 47937 127497, 47935 126984, 31191 126977, 31191 123628, 32161 123609, 31191 123592, 31191 121484, 47932 121492, 47933 121003, 39606 120974, 34043 120973, 33573 120864, 33289 120860, 32643 120910, 31191 120899, 31191 118794, 31946 118859, 34169 119138, 36374 119212, 36664 119242, 37528 119257, 37795 119228, 37758 119190, 38015 119118, 35122 118979, 32366 118791, 31482 118718, 31191 118704, 31191 115485, 31603 115492, 32325 115521, 33582 115539, 35015 115655, 36706 115651, 37784 115613, 38123 115659, 41105 115664, 42845 115612, 43766 115555, 44869 115644, 45502 115648, 46435 115435, 47942 115466, 47942 114962, 31191 114981, 31191 113519, 34314 113532, 35148 113615, 34903 113497, 35351 113431, 33974 113234, 31191 113223, 31191 112632, 32475 112552, 32391 112543, 47948 112548, 47949 112470, 31883 112433, 31191 112438, 31191 111613, 36305 111597, 42818 111603, 46429 111632, 47949 111666, 47949 111433, 45405 111386, 42272 111416, 34247 111456, 31191 111444, 31191 109486, 47955 109487, 47956 109023, 47985 108957, 47667 108879, 48011 108837, 48022 108804, 46960 108848, 45422 108784, 40522 108839, 36730 108635, 34307 108417, 31910 108268, 31191 108163, 31191 106949, 33077 107044, 34889 107199, 48053 107612, 48043 107516, 38502 107212, 36756 107087, 34455 106972, 33407 106804, 31191 106616, 31191 103515, 47931 103513, 47931 102948, 31191 102935, 31191 97567, 31520 97515, 31837 97518, 33898 97583, 34762 97467, 35161 97456, 36246 97478, 48986 97467, 49088 97259, 48953 96963, 37966 96990, 31191 96986, 31191 95678, 38013 95861, 41484 95922, 47989 95937, 47980 95690, 37197 95751, 32251 95586, 31191 95558, 31191 93387, 32922 93159, 34187 93069, 34869 92995, 42468 92970, 46578 93006, 48171 93003, 48189 92724, 45576 92753, 37690 92800, 35019 92801, 34122 92748, 32695 92819, 31191 92996, 31191 91510, 48161 91501, 48033 90957, 31191 90955, 31191 87769, 31543 87744, 33870 87649, 42153 87625, 39428 87526, 32674 87496, 31191 87538, 31191 86362, 32766 86258, 33003 86256, 34007 86183, 34421 86011, 34183 85693, 34113 85490, 34153 85444, 39619 85446, 42886 85484, 47944 85480, 47942 84962, 44954 84976, 31191 84984, 31191 83040, 32887 83043, 35928 83009, 36306 82895, 34489 82853, 31191 82842, 31191 82031, 34366 82055, 36911 81981, 37365 81985, 41945 81926, 42732 81905, 47931 81844, 47930 81580, 46125 81545, 42483 81545, 39886 81613, 38845 81656, 35155 81753, 32938 81760, 31191 81733, 31191 79495, 47933 79492, 47932 78961, 31191 78963, 31191 76811, 33389 76587, 48730 76642, 48727 76592, 44137 76486, 41621 76454, 37404 76477, 33491 76574, 33763 76501, 32250 76505, 31191 76574, 31191 75162, 31909 75247, 34420 75403, 34930 75424, 38483 75447, 39880 75333, 40569 75297, 45079 75217, 46774 75156, 45222 75112, 38205 75147, 34839 75070, 33556 74978, 31191 74959, 31191 73490, 49908 73490, 50609 72961, 51515 72977, 51507 71735, 51373 71788, 50142 71718, 48044 71686, 37134 71749, 32189 71584, 31191 71558, 31191 69374, 32859 69156, 34088 69065, 34599 68991, 41715 68974, 45033 69002, 48621 68998, 51358 69016, 51451 69145, 51500 70699, 51499 68731, 51414 68789, 50729 68741, 48053 68721, 45513 68749, 37378 68796, 34707 68797, 34059 68744, 32629 68815, 31191 68986, 31191 67509, 51005 67495, 51468 67552, 51499 68128, 51510 64125, 51461 62134, 51461 62599, 50828 62634, 41275 62603, 34320 62618, 31377 62657, 33545 62701, 35190 62720, 42676 62716, 50915 62682, 51461 62713, 51461 63537, 47822 63565, 50810 63648, 51461 63641, 51461 65963, 49693 65967, 51461 65972, 51461 66983, 31191 66978, 31191 63629, 31696 63610, 31191 63593, 31191 61482, 51461 61494, 51469 60917, 51157 61003, 50329 61011, 38922 60973, 34043 60973, 33573 60863, 33289 60860, 32643 60909, 31191 60899, 31191 58793, 31946 58859, 34169 59138, 36374 59210, 36664 59240, 37528 59255, 37795 59226, 37758 59188, 38015 59118, 35122 58981, 32366 58791, 31482 58717, 31191 58704, 31191 55483, 32325 55522, 33582 55538, 35015 55655, 36706 55650, 37784 55611, 38123 55658, 41105 55666, 42845 55614, 43766 55556, 44869 55645, 45502 55648, 46435 55434, 48532 55477, 51447 55501, 51510 55549, 51542 54251, 51469 51294, 51552 48055, 51530 46822, 51425 47469, 51164 47563, 50124 47579, 38502 47211, 36756 47087, 34455 46971, 33407 46803, 31191 46615, 31191 43517, 51227 43515, 51465 43649, 51451 42951, 31191 42937, 31191 37566, 31520 37516, 31837 37519, 33893 37585, 34825 37456, 34987 37477, 48393 37466, 48381 37276, 48584 37089, 48574 36962, 37966 36989, 31191 36987, 31191 35677, 38013 35860, 41484 35920, 48980 35938, 51384 35990, 51452 36084, 52397 36119, 52397 35295, 84007 35295, 84002 36515), (115138 183433, 114051 183518, 112864 183593, 111696 183682, 110614 183720, 102788 183724, 101179 183788, 102187 183903, 102902 183930, 105142 183923, 108014 183940, 109837 183995, 110561 184029, 112607 183998, 114790 183854, 115735 183805, 118094 183712, 117688 183595, 117546 183427, 115138 183433), (140403 183731, 141284 183731, 141906 183718, 141854 183564, 140346 183531, 140403 183731), (119101 183680, 120059 183678, 120050 183504, 119277 183469, 119101 183680), (152086 183189, 152064 183287, 153087 183287, 153046 183226, 152661 183161, 152318 183138, 152086 183189), (189370 182688, 189080 182681, 188142 182734, 190965 182771, 190776 182721, 190539 182718, 189682 182655, 189370 182688), (90699 177110, 89982 177131, 85049 177198, 83725 177204, 83724 177352, 88341 177384, 89540 177339, 91146 177260, 94355 177060, 97202 177001, 103816 176969, 106142 176933, 103853 176899, 96055 176879, 90699 177110), (106462 176429, 113537 176473, 116230 176588, 116230 176372, 113815 176358, 106462 176429), (83721 175341, 84245 175340, 83721 175320, 83721 175341), (106695 174616, 102664 174816, 101316 174928, 98202 175152, 97375 175252, 94523 175262, 94706 175332, 97474 175278, 100840 175085, 103707 174903, 106946 174672, 116236 174653, 116235 174624, 107591 174587, 106695 174616), (91718 173813, 91308 173850, 88345 173825, 86377 173826, 83892 173848, 83891 173883, 88334 173923, 92385 174029, 95019 174279, 96785 174536, 97164 174616, 97663 174621, 98830 174667, 101281 174646, 101544 174623, 102191 174523, 101710 174464, 101743 174438, 98365 174359, 97733 174327, 96529 174175, 95437 173988, 93415 173746, 92063 173693, 91718 173813), (107621 172548, 102538 172604, 83891 172559, 83891 173092, 87454 173130, 89429 173121, 94907 173065, 116122 173120, 116115 172891, 116501 172581, 113659 172581, 109596 172538, 107621 172548), (95768 171022, 95504 171046, 94859 171146, 95337 171206, 95301 171234, 98682 171310, 99313 171341, 100517 171494, 101609 171681, 103632 171923, 104983 171977, 105329 171856, 105740 171818, 108703 171845, 110670 171844, 114913 171802, 108714 171747, 104663 171639, 102029 171389, 100263 171133, 99884 171054, 99386 171048, 98218 171003, 95768 171022), (115766 171765, 116526 171645, 116872 171683, 116873 171611, 116412 171591, 115766 171765), (99574 170389, 96206 170585, 93339 170767, 90100 170998, 83884 171009, 83884 171057, 89456 171083, 90351 171054, 94382 170852, 95730 170742, 98844 170515, 99673 170414, 102525 170405, 102340 170337, 99574 170389), (112785 170328, 113695 170363, 116129 170369, 116129 170323, 112785 170328), (83869 169307, 90586 169240, 83867 169204, 83869 169307), (107508 168331, 105900 168410, 102692 168608, 99844 168668, 93231 168701, 90906 168737, 93193 168770, 100993 168789, 106349 168560, 107066 168539, 111975 168470, 117637 168457, 117618 168320, 113204 168315, 108708 168285, 107508 168331), (46395 168049, 46435 167285, 46351 167027, 46395 168049), (83040 166590, 83062 166772, 83695 166858, 83658 167081, 92648 167072, 94781 167140, 95098 167105, 95090 167068, 111227 167091, 116363 167084, 116366 166736, 116290 166579, 83040 166590), (112642 163363, 112595 163461, 110941 163707, 108246 164045, 106261 164269, 104077 164348, 100071 164379, 99504 164374, 98951 164386, 96440 164476, 91839 164494, 90635 164507, 85686 164505, 83640 164472, 83623 164642, 89399 164609, 89003 164583, 91077 164576, 92063 164609, 96691 164653, 97648 164651, 99211 164698, 103872 164665, 106364 164709, 109240 164616, 112424 164602, 112999 164573, 112627 164519, 109939 164499, 107478 164352, 107434 164268, 110901 163830, 113680 163552, 116149 163462, 116181 163397, 116714 163227, 115240 163185, 112642 163363), (94987 161671, 92800 161814, 91857 161864, 88793 161986, 83893 162007, 83893 162132, 87197 162147, 89111 162245, 92481 162235, 93610 162147, 94762 162074, 95895 161987, 96977 161950, 104803 161944, 106413 161882, 105406 161767, 104691 161738, 102450 161744, 99578 161730, 97755 161673, 97031 161639, 94987 161671), (83892 160859, 83812 160931, 83328 160955, 83554 161120, 88262 161122, 93310 161084, 111233 161125, 117965 161123, 117999 161057, 118015 160658, 117944 160574, 83886 160572, 83892 160859), (97343 157297, 96214 157340, 94893 157456, 93407 157504, 93888 157570, 95575 157523, 97160 157433, 98020 157357, 98163 157294, 97343 157297), (105481 155765, 99918 156171, 94391 156486, 93609 156522, 88900 156656, 87279 156747, 87245 156835, 88424 156886, 90677 156831, 94926 156584, 101523 156123, 105432 155798, 113951 155447, 105481 155765), (94674 154109, 94181 154558, 88633 154565, 83873 154535, 83875 155110, 91990 155083, 98646 155086, 99235 155213, 99493 155347, 101300 155341, 101562 155274, 102306 155134, 102784 155078, 116224 155074, 116126 154854, 116124 154534, 113134 154507, 104031 154568, 100235 154560, 98718 154329, 98731 154262, 98136 154137, 97245 154124, 96168 154054, 94674 154109), (44056 154197, 43410 154269, 35027 154305, 34765 154298, 35005 154310, 41750 154409, 45263 154414, 47949 154485, 47950 154171, 44056 154197), (97177 152599, 97985 152694, 99977 152704, 103065 152693, 105445 152855, 108197 153105, 108748 153142, 109860 153307, 111539 153488, 111841 153507, 113005 153617, 114107 153643, 114433 153586, 115106 153506, 115952 153456, 115950 153254, 115241 153274, 113831 153295, 112906 153221, 112229 153154, 110220 152996, 109410 152998, 108948 152936, 106272 152828, 103396 152630, 101050 152512, 99145 152501, 97177 152599), (86252 152194, 86028 152213, 83658 152332, 83591 152597, 83415 152671, 84559 152485, 87537 152314, 91885 152283, 93826 152284, 94750 152238, 91228 152185, 86252 152194), (41483 152435, 47973 152652, 48026 152464, 42942 152374, 41483 152435), (103435 152252, 104921 152313, 107259 152311, 110774 152270, 108855 152222, 106266 152215, 103435 152252), (113605 152266, 115947 152279, 115946 152222, 113605 152266), (83701 150259, 83703 150441, 87925 150470, 90881 150480, 92283 150531, 93640 150622, 95661 150818, 98165 150880, 100698 150809, 101999 150783, 103413 150781, 108935 150704, 108831 150682, 108140 150687, 99327 150609, 96985 150549, 94918 150473, 94725 150443, 92874 150322, 91651 150265, 89315 150232, 83701 150259), (82903 148601, 82836 148860, 82735 149087, 115952 149091, 115957 148573, 111113 148575, 105842 148595, 99317 148573, 95681 148588, 83619 148591, 83588 148736, 83112 148546, 82903 148601), (45879 148717, 45396 148782, 46277 148834, 47929 148848, 47929 148698, 45879 148717), (104462 148131, 103165 148184, 101382 148193, 97832 148231, 101174 148283, 103370 148293, 106284 148361, 108221 148346, 108915 148297, 109202 148301, 109621 148233, 108452 148128, 104462 148131), (81811 147312, 82216 147310, 83716 147237, 82596 147189, 81814 147186, 81811 147312), (95528 147166, 95753 147226, 96086 147240, 97579 147235, 99614 147171, 98071 147115, 95905 147101, 95528 147166), (82198 146434, 84381 146516, 87356 146572, 87062 146498, 84557 146466, 82358 146334, 82198 146434), (98241 145415, 99095 145521, 104401 145555, 106291 145603, 104490 145537, 102513 145370, 99692 145345, 98241 145415), (88231 144698, 87186 144748, 85700 144836, 84830 144868, 82804 144912, 82830 145004, 84788 145022, 88771 144927, 90354 144874, 91355 144760, 90159 144676, 88231 144698), (111283 144490, 111044 144521, 111295 144561, 113661 144552, 114202 144510, 112236 144479, 111283 144490), (98072 143582, 97128 143591, 92467 143683, 99212 143771, 100672 143823, 103531 143819, 106060 143701, 105136 143542, 100300 143538, 98072 143582), (93753 142570, 82618 142559, 82524 143106, 87044 143107, 98765 143087, 102275 143165, 103380 143167, 105438 143098, 116827 143108, 117089 142861, 116831 142560, 116479 142560, 116050 142615, 116020 142562, 100387 142581, 96876 142503, 95771 142501, 93753 142570), (95623 141853, 93092 141967, 94017 142126, 98852 142130, 101080 142086, 102024 142077, 106684 141985, 99941 141899, 98480 141846, 95623 141853), (85488 141116, 84947 141158, 86916 141191, 87870 141178, 88108 141147, 87857 141107, 85488 141116), (110381 140741, 108798 140795, 107797 140911, 108993 140992, 110921 140971, 113452 140833, 114323 140801, 116183 140761, 116194 140660, 114364 140646, 110381 140741), (43662 140745, 44708 140835, 47433 140921, 47967 140930, 49087 140929, 48952 140636, 46355 140635, 43662 140745), (94662 140131, 96639 140298, 99458 140325, 100912 140253, 100059 140148, 94751 140113, 92861 140065, 94662 140131), (112090 139170, 114595 139202, 115968 139284, 115971 139199, 114771 139152, 111796 139100, 112090 139170), (101573 138433, 99536 138497, 101082 138553, 103247 138567, 103624 138503, 103399 138442, 103066 138428, 101573 138433), (115436 138431, 115958 138454, 115959 138404, 115436 138431), (90931 137322, 90236 137371, 89948 137367, 89530 137436, 90698 137541, 94690 137537, 95987 137485, 97770 137476, 101320 137439, 97978 137386, 95782 137377, 92868 137307, 90931 137322), (48053 137433, 48694 137447, 48603 137411, 48053 137433), (83829 134522, 83858 134826, 84070 134917, 83897 135073, 83898 135957, 83724 136273, 83180 136987, 83558 137095, 88001 137094, 93308 137073, 99834 137097, 103471 137080, 115823 137077, 115945 137105, 115941 136581, 85172 136581, 84957 136438, 84933 136252, 84987 136031, 84954 134619, 84719 134479, 83829 134522), (106893 134859, 105594 134885, 104179 134887, 98655 134967, 98759 134989, 99450 134985, 108266 135059, 110608 135119, 112672 135195, 112867 135225, 114718 135348, 115935 135403, 115934 135160, 115272 135135, 113954 135046, 111933 134850, 109425 134788, 106893 134859), (85986 130416, 85681 130719, 85497 131092, 85421 131525, 85470 131937, 85640 132304, 85930 132590, 86296 132772, 86691 132816, 87097 132759, 87495 132561, 87723 132334, 87689 132334, 87879 131962, 87945 131557, 87871 131107, 87965 131106, 87781 130721, 87491 130442, 87131 130268, 86663 130196, 85986 130416), (35304 122616, 31377 122657, 34286 122701, 36647 122719, 44134 122713, 47932 122699, 47933 122620, 42755 122602, 35304 122616), (62288 121655, 65235 121624, 62286 121581, 62288 121655), (77266 120920, 74274 121018, 72174 121039, 74983 121073, 77764 121137, 80935 121099, 81501 120999, 80452 120939, 78958 120914, 77266 120920), (42252 119874, 42350 119945, 45935 120038, 47954 120047, 47955 119863, 43532 119803, 42252 119874), (81686 117108, 80970 117129, 76059 117198, 71458 117213, 62276 117215, 62279 117341, 74832 117353, 79327 117383, 80526 117339, 82135 117259, 85344 117061, 88192 117000, 94805 116967, 97130 116934, 94843 116898, 87043 116879, 81686 117108), (44319 116671, 44315 116682, 39135 116754, 45051 116796, 46642 116797, 47944 116851, 47943 116568, 47592 116561, 44319 116671), (97450 116428, 104501 116470, 107972 116619, 109431 116599, 110926 116505, 109718 116424, 108188 116381, 104805 116358, 97450 116428), (70867 115328, 69027 115365, 68714 115409, 66151 115365, 64959 115389, 63776 115468, 63437 115527, 64203 115598, 66262 115635, 66954 115610, 69215 115480, 69471 115453, 70101 115435, 71734 115348, 75250 115342, 74341 115306, 71754 115298, 70867 115328), (82707 113813, 82296 113850, 79333 113823, 77365 113824, 73121 113866, 79322 113921, 83373 114029, 86006 114281, 87772 114537, 88152 114616, 88650 114622, 89818 114669, 92267 114648, 92530 114624, 93177 114524, 92698 114464, 92733 114439, 89354 114358, 88723 114327, 87519 114174, 86427 113988, 84403 113745, 83052 113693, 82707 113813), (71309 114065, 71624 114079, 72268 113903, 71510 114025, 70106 113867, 71309 114065), (62264 113834, 62264 113895, 69903 113861, 63888 113833, 62264 113834), (62255 111629, 68952 111609, 70706 111566, 62254 111529, 62255 111629), (62198 109180, 63373 109165, 64582 109108, 64789 109077, 62188 109051, 62198 109180), (45260 106425, 47933 106455, 47931 106372, 45986 106370, 45260 106425), (41161 104890, 39726 104877, 34783 104917, 35147 104980, 36190 105024, 44910 105069, 47929 105056, 47929 104876, 41161 104890), (62739 102284, 62192 102513, 62238 102620, 63044 102396, 64100 102161, 63365 102058, 62739 102284), (62270 97356, 62271 97393, 62810 97390, 62498 97356, 62270 97356), (45879 88716, 45396 88783, 46277 88836, 47958 88848, 47957 88698, 45879 88716), (43662 80746, 44708 80837, 47433 80920, 47933 80927, 47932 80638, 46355 80634, 43662 80746), (67726 74836, 65975 74926, 65054 75048, 61703 75405, 61691 75528, 62936 75447, 66296 75034, 66620 75020, 67710 74895, 67933 75012, 68472 75010, 68507 74817, 67726 74836), (59259 72057, 59383 72489, 60257 72555, 61989 72571, 64285 72489, 63755 72400, 61708 72370, 60104 72397, 59415 72388, 59373 72127, 59241 71516, 59222 71494, 59259 72057), (42252 59874, 42350 59944, 45935 60036, 50151 60057, 51407 60075, 51474 60140, 51476 59882, 51332 59958, 47980 59864, 43532 59803, 42252 59874), (44319 56671, 44315 56682, 39135 56753, 45051 56794, 46643 56795, 49933 56930, 50748 56899, 51315 56923, 51491 56988, 51491 56685, 51434 56728, 50235 56645, 49784 56602, 47593 56562, 44319 56671), (59056 54750, 59113 55059, 59113 54534, 59056 54750), (59403 51528, 59403 51638, 66696 51607, 68158 51566, 61849 51528, 59403 51528), (60698 49042, 59407 49102, 59408 49245, 65332 49164, 66594 49109, 66798 49078, 62757 49031, 60698 49042), (51492 45161, 51505 46377, 51326 46537, 49728 46398, 48741 46373, 45978 46370, 45253 46423, 48343 46459, 51327 46540, 51529 46796, 51499 45130, 51492 45161), (51387 44866, 41161 44890, 39726 44878, 34783 44918, 35147 44982, 36190 45026, 44910 45069, 51301 45034, 51499 45099, 51487 44578, 51387 44866), (54807 42335, 54447 42520, 54159 42805, 53975 43167, 53911 43569, 53974 43964, 54159 44329, 54447 44615, 54807 44799, 55209 44863, 55609 44799, 55969 44615, 56257 44329, 56441 43967, 56505 43569, 56441 43167, 56472 43000, 56295 42884, 56257 42805, 55969 42518, 55609 42335, 55209 42273, 54807 42335), (59419 43537, 59681 43520, 60398 43519, 61189 43503, 60664 43438, 60439 43432, 59418 43370, 59419 43537), (63930 42283, 63490 42513, 63526 42618, 64177 42394, 65031 42162, 64437 42057, 63930 42283), (83870 41672, 81685 41815, 80741 41864, 77677 41984, 69346 42023, 68701 42018, 68371 42051, 70099 42093, 70430 42119, 76079 42149, 77995 42246, 81348 42238, 82493 42146, 83627 42074, 84779 41986, 85862 41948, 93688 41945, 95297 41882, 94289 41766, 93574 41738, 91334 41745, 88462 41729, 86639 41674, 85903 41641, 83870 41672), (59430 41939, 59421 42149, 60625 42114, 60816 42043, 60759 41938, 59430 41939), (51461 40732, 51485 41779, 51654 41555, 51604 40723, 51461 40732), (65577 37422, 69032 37592, 71940 37776, 75014 37820, 75835 37742, 75264 37652, 72293 37509, 70829 37479, 69086 37417, 66671 37371, 65577 37422), (61791 37372, 61791 37391, 62829 37389, 62646 37369, 61791 37372), (75855 36625, 73095 36700, 73432 36717, 77272 36800, 78592 36838, 81427 36833, 83375 36783, 83647 36675, 82520 36562, 77812 36544, 75855 36625), (61710 36590, 61927 36611, 62630 36763, 63717 36819, 64802 36815, 67397 36826, 69848 36738, 71926 36709, 68934 36630, 68174 36579, 63758 36531, 62535 36481, 61686 36436, 61710 36590)), ((205778 119109, 205987 119234, 206013 119407, 205792 119551, 205127 119574, 201722 119647, 200168 119728, 199904 119765, 199243 119830, 199674 119897, 200927 119903, 205788 119634, 205993 119798, 205974 121057, 206022 121532, 205765 121705, 204810 121694, 202128 121739, 201775 121824, 202965 121862, 205712 121878, 205956 121996, 205607 122295, 205625 122797, 205598 122895, 205532 123295, 192237 123295, 192237 124540, 190905 124517, 178876 124558, 159393 124539, 158209 124574, 157063 124555, 156135 124515, 155319 124503, 153735 124370, 153171 124373, 152319 124434, 152058 124362, 150765 124355, 149679 124416, 149111 124485, 148316 124362, 147658 124621, 146550 124582, 144196 124557, 144140 124515, 144074 123740, 144067 123452, 144198 123357, 145263 123428, 145781 123478, 147239 123524, 149051 123409, 150294 123401, 154169 123313, 148637 123253, 147409 123252, 145707 123133, 144979 123162, 144332 123134, 144087 123027, 144093 120274, 144194 120184, 144328 120135, 145938 120218, 148580 120288, 149334 120206, 149218 120126, 147074 120020, 145100 120000, 144226 119975, 144067 119824, 144169 119166, 144505 119077, 144828 119070, 150787 119109, 154567 119111, 155054 119223, 155306 119225, 155885 119182, 157452 119193, 158182 119268, 158708 119181, 159547 119114, 159983 119109, 160851 119231, 161347 119159, 161742 119163, 163483 119218, 163875 119207, 164592 119111, 165320 119090, 166137 119105, 188291 119084, 197834 119110, 201545 119063, 205778 119109), (176385 123260, 172711 123299, 176669 123323, 177543 123316, 179351 123250, 176385 123260), (166823 121584, 171268 121591, 170324 121661, 174090 121680, 181957 121679, 187229 121624, 183469 121569, 166823 121584), (151227 120838, 151342 120949, 155977 121273, 157233 121377, 159906 121496, 157527 121260, 156573 121176, 154595 120927, 152809 120863, 152361 120818, 151418 120794, 151227 120838), (199267 120920, 196274 121018, 194175 121039, 196983 121073, 199763 121137, 202937 121099, 203503 120999, 202453 120939, 200958 120914, 199267 120920)), ((143148 119097, 143547 119179, 143631 121509, 143591 121842, 143466 121931, 138992 122147, 138105 122149, 137126 122164, 137772 122230, 138051 122236, 139577 122311, 140471 122298, 141116 122254, 143489 122175, 143627 122202, 143623 123411, 143398 123583, 142565 123578, 139555 123513, 137831 123555, 137589 123625, 137661 123730, 141281 123730, 143392 123682, 143600 123826, 143597 124086, 143569 124473, 143360 124553, 139988 124563, 119514 124545, 114283 124584, 96359 124543, 85074 124545, 84915 123847, 85236 123697, 87764 123728, 89370 123707, 90081 123625, 89284 123532, 86950 123498, 85713 123516, 85089 123476, 84978 123386, 85013 121785, 84858 121668, 85212 121681, 89575 122119, 89822 122165, 90307 122276, 90826 122438, 92351 122488, 94952 122305, 94997 122208, 96652 121961, 99346 121623, 101330 121399, 103514 121324, 107521 121290, 108088 121294, 108641 121282, 111154 121192, 115754 121176, 116955 121162, 121904 121166, 123260 121181, 125557 121234, 127108 121304, 127660 121357, 129989 121226, 130331 121217, 130990 121023, 131270 121021, 131770 120921, 131547 120867, 131781 120805, 128759 120897, 127945 120960, 124988 121022, 118194 121058, 118590 121086, 116516 121092, 115530 121059, 110899 121015, 109944 121017, 108383 120970, 103722 121005, 101226 120960, 98350 121056, 95166 121068, 94591 121095, 94963 121149, 97652 121169, 100113 121317, 100158 121400, 96690 121838, 93910 122117, 91483 122208, 90044 122118, 85281 121593, 84841 121530, 84930 121469, 85060 121242, 85271 121078, 84984 120832, 85059 120467, 85014 119180, 85464 119099, 94016 119083, 134996 119075, 143148 119097), (115136 123432, 114052 123516, 112864 123592, 111696 123683, 110614 123720, 102788 123724, 101179 123786, 102187 123903, 102902 123932, 105142 123925, 108014 123939, 109837 123995, 110561 124029, 112606 123998, 114791 123853, 115734 123804, 118799 123684, 127130 123645, 127814 123650, 128226 123617, 126750 123577, 126379 123551, 120397 123521, 118480 123423, 115136 123432), (133432 123274, 132376 123508, 133110 123612, 133737 123386, 134282 123156, 134236 123049, 133432 123274)), ((173969 113113, 174262 113216, 174263 114309, 174171 114437, 173569 114421, 171766 114337, 167935 114209, 164202 114215, 163813 114251, 160147 114268, 167252 114296, 170212 114483, 171734 114568, 172845 114579, 174129 114547, 174126 114654, 174280 114714, 174347 116125, 174157 116235, 173167 116107, 171485 116026, 168940 116051, 168504 116117, 164275 116147, 161175 116056, 164061 116212, 166553 116282, 169745 116291, 171465 116377, 172899 116356, 174150 116409, 174275 116478, 174219 117563, 174260 118146, 174092 118529, 173753 118587, 142657 118563, 135927 118572, 123063 118564, 118366 118615, 112463 118546, 112332 118099, 112301 117870, 112561 117761, 116313 117730, 118248 117747, 119806 117737, 120742 117667, 121240 117515, 115240 117534, 112673 117598, 112315 117502, 112262 116423, 112459 116370, 113078 116340, 115070 116360, 116056 116413, 121295 116786, 121946 116842, 125105 117168, 126308 117271, 128660 117418, 130467 117481, 133024 117532, 139049 117529, 141689 117541, 143185 117461, 147279 117486, 154045 117466, 157454 117433, 158145 117415, 157720 117386, 155443 117353, 152223 117329, 146215 117335, 143003 117361, 141721 117287, 135149 117265, 133665 117323, 131786 117306, 130373 117314, 127965 117218, 127234 117166, 122785 116802, 122338 116756, 117093 116345, 113983 116115, 112533 116095, 112261 115994, 112261 115785, 112372 115093, 112538 114987, 117238 114967, 119298 115039, 121025 115131, 122599 115167, 125398 115185, 130025 115197, 131482 115165, 136642 115150, 138285 115089, 138780 115008, 137312 114919, 129653 114887, 129045 114876, 125429 114880, 124883 114894, 122494 114908, 121049 114891, 117553 114745, 117100 114692, 113528 114688, 112632 114761, 112342 114646, 112456 113187, 113003 113086, 173969 113113), (134946 116502, 133715 116560, 133491 116592, 138007 116639, 140364 116628, 142135 116552, 146506 116506, 145122 116444, 145136 116414, 143708 116402, 134946 116502), (155424 116462, 159699 116532, 160425 116486, 160692 116428, 158777 116396, 155424 116462), (149645 115695, 151936 115707, 154846 115808, 153938 115725, 151809 115677, 149645 115695), (131482 114062, 129841 114102, 137313 114141, 141384 114140, 148260 114119, 154703 114218, 154676 114187, 152897 114105, 150653 114058, 140332 114029, 131482 114062), (122961 113937, 124054 113980, 123870 113953, 123010 113928, 121838 113866, 122961 113937)), ((159010 107145, 159234 107302, 159728 107797, 159606 107932, 159337 107965, 158955 108062, 159155 108163, 159240 108158, 160141 108237, 160194 108224, 160969 109024, 161322 109351, 161594 110167, 160604 110167, 159172 110098, 159048 110084, 156843 109975, 154846 110001, 154367 109977, 153100 109957, 151543 109994, 147973 109992, 146968 110032, 147665 110077, 147863 110122, 148150 110156, 153090 110144, 153806 110257, 154690 110313, 157283 110323, 157402 110337, 158734 110402, 159458 110485, 160228 110485, 161255 110409, 161532 110408, 161448 110517, 161443 110598, 161230 111032, 160312 111036, 159943 111139, 159893 111240, 160769 111348, 162255 111382, 162152 110133, 162116 109797, 162247 109757, 164034 109634, 164960 109508, 166153 109505, 168297 109461, 168198 109437, 165823 109371, 165557 109372, 164456 109324, 164027 109377, 162914 109398, 164004 108271, 164228 108124, 164740 108131, 165883 108177, 166864 108152, 166893 108065, 166681 107988, 165278 107959, 164359 107993, 164420 107854, 165118 107147, 167035 107145, 168449 107197, 173540 107159, 178307 107164, 184638 107207, 189131 107160, 189801 107829, 189824 107985, 188705 107960, 188202 108012, 188023 108072, 188161 108159, 189118 108167, 189975 108148, 190080 108262, 190442 108565, 191881 109878, 191566 109889, 188702 109362, 188432 109226, 188394 109184, 187542 109141, 186288 109329, 186436 109420, 185815 109625, 184514 109911, 183626 110121, 183224 110201, 182105 110240, 182000 110264, 180558 110296, 180147 110289, 179742 110306, 178668 110382, 174030 110395, 172202 110350, 171824 110331, 171002 110322, 170645 110247, 169387 110356, 169227 110533, 168956 110656, 169073 110697, 169011 110760, 170254 110644, 170626 110597, 171494 110573, 172048 110576, 176278 110544, 178712 110571, 179786 110617, 182057 110590, 183296 110637, 184470 110553, 188215 110534, 191836 110534, 191836 110744, 191749 111098, 191889 112076, 191903 112362, 191672 112435, 185409 112400, 167759 112410, 167716 112356, 167575 112354, 167609 112409, 162581 112379, 162331 112300, 162262 111470, 162200 111654, 162154 112127, 161658 112417, 152006 112419, 147443 112395, 138176 112449, 134654 112452, 132430 112478, 132213 112306, 132162 111936, 132213 111901, 133447 111837, 133288 111793, 133196 111702, 132899 111661, 132689 111520, 132593 111514, 132577 111281, 132416 110545, 132754 110541, 133602 110760, 134295 110871, 135496 110886, 137024 110825, 140133 110818, 140468 110876, 141545 110862, 142152 110832, 142365 110771, 143112 110736, 142973 110613, 143059 110590, 142030 110539, 140363 110617, 136668 110609, 135588 110523, 133818 110306, 132718 110113, 133318 109012, 133557 108779, 133734 108694, 133930 108783, 134575 108851, 135963 108854, 137324 108792, 138682 108775, 139880 108795, 140534 108870, 142303 108852, 143022 108778, 143288 108645, 144060 108498, 144001 108876, 144014 108912, 143745 109323, 141375 109312, 139839 109386, 138895 109459, 138266 109488, 137529 109581, 136714 109618, 136280 109720, 136760 109804, 138275 109763, 139817 109555, 140188 109535, 141688 109408, 142697 109432, 143752 109432, 143840 109377, 144286 109389, 144352 109447, 146389 109483, 147285 109392, 147522 109353, 149125 109270, 149851 109212, 153288 109206, 155163 109264, 155826 109217, 156626 109223, 157207 109171, 157232 109023, 155744 108946, 153846 108955, 152331 109028, 151614 109028, 150769 108951, 149390 108946, 148315 108982, 147094 109181, 145995 109270, 145163 109271, 145126 109248, 144506 109278, 144518 108863, 145073 108673, 145134 108715, 145257 108350, 145355 108416, 148996 108398, 150534 108409, 150631 108363, 150491 108334, 148483 108328, 146407 108288, 145276 108294, 145175 108258, 144676 108184, 144445 108196, 143973 108384, 143130 108479, 142442 108541, 140520 108583, 138917 108642, 138372 108642, 137210 108620, 136577 108542, 134321 108563, 133754 108673, 133793 108538, 135053 107302, 135294 107191, 136401 107145, 140012 107186, 142035 107141, 146145 107142, 151406 107184, 157701 107141, 159010 107145), (152019 110746, 151366 110977, 150605 111286, 149841 111562, 150677 111382, 151978 111067, 152618 111043, 154278 111013, 154658 110914, 154450 110825, 153863 110735, 152019 110746), (144211 110440, 144077 110740, 144397 110824, 144851 110909, 144939 110460, 144828 110334, 144597 110313, 144211 110440), (176791 107863, 176491 107904, 175284 108001, 171031 108016, 169946 108119, 169283 108117, 169284 108059, 169146 108117, 168700 108156, 168391 108285, 168129 108467, 168088 108543, 169123 108183, 169927 108146, 174458 108180, 175129 108269, 176784 108261, 177351 108165, 177690 108125, 178255 108031, 178692 107977, 182178 107974, 183162 107908, 182216 107818, 181932 107777, 179155 107746, 178667 107685, 177815 107680, 176791 107863)), ((98915 107130, 99146 107235, 100177 108242, 100253 108365, 99924 108342, 100094 108511, 100349 108500, 100455 108616, 100576 108635, 100908 108932, 101340 109634, 101521 109683, 101365 109676, 101459 109831, 101777 109811, 101754 109883, 101852 109946, 101744 110339, 101903 110365, 101880 110689, 102146 110584, 102154 110415, 102001 109761, 102055 109718, 102204 109714, 102269 109523, 102904 109169, 103409 108665, 103622 108630, 103947 108278, 103836 108211, 104823 107184, 105115 107133, 107978 107113, 111160 107132, 128883 107133, 129138 107284, 129173 107296, 131343 109462, 131644 109797, 131361 109854, 131401 109897, 131026 110115, 127214 110106, 125858 110135, 125947 110159, 127764 110204, 129488 110201, 130988 110164, 130998 110211, 131690 110198, 131647 110445, 131399 111203, 131794 111212, 131772 111674, 131873 111741, 131816 112323, 131653 112448, 128596 112449, 126602 112399, 120755 112437, 115849 112432, 109488 112389, 102207 112436, 102216 112325, 102047 112310, 101941 111290, 101931 110981, 101882 110954, 101881 111394, 102001 111870, 101953 112322, 101701 112336, 101644 112361, 93766 112371, 93180 112345, 90270 112356, 88684 112421, 80711 112399, 80169 112432, 79671 112358, 76805 112366, 76104 112346, 76077 112380, 75800 112402, 74788 112378, 73731 111335, 73755 111304, 74031 111310, 73685 110971, 73304 110932, 73269 110892, 73314 110609, 72973 110268, 73235 110264, 72989 109912, 72711 109904, 72594 109866, 72773 109607, 72635 109385, 73683 108277, 73859 108169, 74007 108179, 74199 107999, 74050 107988, 74133 107852, 74775 107236, 75001 107156, 75203 107153, 75383 107099, 98915 107130), (125717 111185, 125194 111356, 125654 111424, 126049 111311, 126306 111111, 126133 111090, 125717 111185), (74948 111341, 74614 111369, 75011 111381, 75589 111330, 74948 111341), (87821 111146, 82785 111199, 80450 111194, 80558 111207, 87462 111220, 87858 111213, 87948 111226, 89158 111144, 88280 111133, 87821 111146), (101881 110918, 102294 111011, 102229 110743, 101879 110689, 101881 110918), (88984 109561, 88904 109585, 89077 109600, 91071 109624, 91564 109659, 92986 109641, 92678 109608, 90853 109534, 88984 109561), (76264 108798, 76033 108929, 76226 108969, 77050 109045, 77709 109074, 78383 109091, 78011 108892, 77113 108854, 76893 108797, 76264 108798)), ((188855 109509, 189201 109527, 191054 109895, 191689 110012, 191847 110125, 191828 110397, 191667 110471, 189050 110429, 185038 110418, 184491 110370, 184059 110257, 183994 110199, 187068 109513, 188137 109434, 188855 109509)), ((132088 80351, 132100 80698, 131668 82937, 131570 83294, 131434 83512, 131392 83547, 131349 84410, 131537 85661, 131628 85512, 131833 86135, 132119 87435, 132329 88323, 132410 88724, 132451 89846, 132474 89949, 132505 91392, 132497 91803, 132514 92207, 132592 93280, 132603 97920, 132559 99748, 132541 100125, 132532 100946, 132456 101304, 132564 102563, 132742 102723, 132866 102993, 132908 102876, 132971 102937, 132853 101697, 132806 101324, 132781 100455, 132784 99901, 132754 95668, 132780 93237, 132827 92162, 132800 89891, 132847 88652, 132762 87479, 132742 84557, 132742 81104, 132953 81167, 133307 81537, 134284 82442, 134570 82722, 134644 82977, 134608 86909, 134618 103536, 134564 103579, 134562 103672, 134617 103645, 134587 106715, 134508 106965, 132343 109101, 132007 109405, 131965 109303, 131844 107913, 131716 106990, 131713 105797, 131669 103653, 131645 103752, 131579 106127, 131581 106393, 131535 107493, 131588 107920, 131606 109039, 130479 107944, 130332 107720, 130339 107208, 130388 106065, 130360 105084, 130275 105055, 130198 105267, 130169 106670, 130201 107590, 130062 107530, 129356 106833, 129355 104915, 129407 103501, 129367 98408, 129372 93641, 129415 87312, 129369 82818, 130048 82147, 130193 82123, 130185 82785, 130168 83243, 130220 83747, 130280 83926, 130367 83789, 130376 82791, 130356 81920, 130501 81687, 130773 81419, 132045 80344, 132088 80351), (130028 89735, 129988 90019, 129969 92116, 129954 92794, 129893 93283, 129891 94134, 130071 95159, 130113 95459, 130209 96666, 130227 100918, 130329 102004, 130327 102664, 130269 102662, 130326 102800, 130364 103250, 130493 103558, 130675 103821, 130751 103862, 130394 102822, 130356 102023, 130390 97490, 130480 96819, 130470 95163, 130373 94597, 130334 94257, 130240 93694, 130187 93257, 130184 89773, 130118 88788, 130028 89735)), ((162514 80880, 162638 81057, 162558 81767, 162517 82495, 162485 83800, 162499 85365, 162548 86299, 162564 92260, 162545 95954, 162523 96426, 162529 97064, 162578 97072, 162566 92262, 162603 85065, 162644 84157, 162754 82802, 162735 82077, 162655 81072, 162829 81158, 164387 82691, 164614 82943, 164605 87896, 164219 87649, 164178 87742, 164400 88225, 164012 88242, 163727 87669, 163575 87536, 163067 87302, 163024 87588, 163038 87749, 162985 90035, 162978 92695, 163204 95265, 163245 95456, 163240 96220, 163315 97903, 163327 99623, 163330 104516, 163310 105624, 163284 106464, 163219 106762, 162803 107018, 162309 107495, 162080 107602, 161747 107898, 161779 107977, 161784 108230, 161756 108271, 161802 108775, 161864 109009, 162044 109283, 161662 109211, 161427 108906, 160814 108383, 160613 108185, 160473 107965, 160292 107863, 160127 107626, 160166 103244, 160144 100619, 160129 100234, 160300 99798, 160314 99623, 160130 99240, 160150 98709, 160190 96160, 160286 94642, 160295 94381, 160412 93860, 160504 93302, 160711 92494, 160833 92221, 160896 91519, 160869 90235, 160815 90377, 160742 89793, 160695 90321, 160658 90241, 160550 92039, 160397 92632, 160224 93079, 159978 94043, 159950 94605, 160051 94812, 160054 97362, 160083 99295, 160218 99682, 160075 100157, 160057 102516, 160087 107587, 159939 107500, 159488 107071, 159407 106902, 159354 101060, 159576 100875, 159722 100716, 159718 100563, 159505 100233, 159396 99806, 159354 98442, 159375 96776, 159359 93507, 159418 84180, 159411 82884, 160611 81733, 160810 81657, 160758 81779, 160800 82029, 160788 86686, 160777 87518, 160791 88053, 160845 88268, 161104 90329, 161297 91487, 161344 91823, 161426 92165, 161448 96639, 161476 99983, 161464 100068, 161512 101339, 161588 101568, 161545 102732, 161525 102761, 161543 103460, 161637 103981, 161707 103987, 161780 103832, 161812 103083, 161829 102871, 161806 102457, 161783 102385, 161733 102023, 161653 101302, 161622 100681, 161552 99922, 161546 97115, 161556 93767, 161550 93426, 161494 92025, 161344 90663, 161127 89039, 160929 87718, 160921 81528, 161025 81337, 161664 80710, 161948 80647, 162514 80880)), ((101982 94980, 102787 94938, 102896 94892, 102918 98067, 102954 101184, 102958 104691, 102978 105075, 102977 106241, 103011 108181, 102887 108404, 102116 109124, 102023 108988, 102144 106880, 102107 105872, 101995 104857, 101942 106962, 101821 107960, 101789 108501, 101799 108816, 101711 108809, 101531 108631, 101168 108300, 100963 108007, 101163 107419, 101190 107169, 101314 106857, 101421 103786, 101413 103667, 101407 101790, 101473 99485, 101424 98534, 101442 96445, 101472 96107, 101661 94816, 101982 94980)), ((31584 108412, 35792 108665, 36397 108724, 38847 108856, 38447 108902, 37214 108990, 35497 109037, 34203 109018, 32537 109049, 31191 109043, 31191 108380, 31584 108412)), ((70286 79814, 70527 80081, 70754 80006, 71579 79901, 72899 81068, 72977 81196, 72930 82540, 72914 82716, 73008 84778, 73091 84696, 73144 84286, 73148 83827, 73219 83388, 73211 81700, 73136 81385, 73239 81465, 73407 81676, 73610 81789, 74764 82969, 74744 95230, 74793 96104, 74793 96465, 74752 98120, 74780 102349, 74775 106961, 74682 107201, 74308 107524, 73755 108130, 73620 108162, 73535 107563, 73505 107251, 73451 107488, 73418 107884, 73430 108326, 73214 108626, 73051 108631, 73034 106166, 73078 104948, 73085 104496, 73189 103562, 73249 103194, 73245 102391, 73179 101498, 73040 102157, 72918 104625, 72887 105087, 72902 105742, 72927 108640, 72967 108656, 72962 108702, 72766 108937, 71932 109038, 71046 108578, 70835 108442, 70877 107978, 70845 105935, 70816 105430, 70791 105245, 70762 105336, 70711 106221, 70711 106747, 70792 108412, 70535 108167, 70165 107883, 70008 107646, 69776 107264, 69666 107235, 69495 106969, 69497 106308, 69530 106135, 69948 106309, 69953 106352, 69970 106328, 69932 105940, 69821 105305, 69756 105349, 69515 104618, 69501 103800, 69517 99441, 69534 97942, 69507 95158, 69529 92815, 69541 79951, 69611 79761, 70286 79814), (71423 103241, 71403 103336, 71406 104048, 71461 105319, 71610 107272, 71704 107843, 71747 107585, 71757 107133, 71557 105220, 71498 102385, 71423 103241), (69775 93625, 69692 93891, 69687 94937, 69757 96028, 69754 97698, 69774 98304, 69819 99010, 69825 102676, 69862 104020, 69875 103597, 69868 99038, 69859 98979, 69894 98438, 69917 97578, 69875 96176, 69953 95836, 69964 93752, 69880 93631, 69840 93230, 69775 93625), (74082 95383, 74056 96106, 74057 97367, 74127 98634, 74162 100733, 74202 102239, 74228 100960, 74300 99277, 74301 98326, 74351 97499, 74348 95249, 74193 94847, 74082 95383), (70840 97385, 70806 98878, 70811 99568, 70861 99912, 70906 99499, 70900 98719, 70861 97352, 70853 95478, 70840 97385), (72206 89101, 72203 89896, 72222 92789, 72389 96033, 72433 98394, 72548 99048, 72635 98048, 72601 96638, 72472 95825, 72442 95507, 72263 92763, 72255 92409, 72259 89241, 72237 88998, 72206 89101), (73370 91468, 73365 92491, 73399 92670, 73423 92474, 73437 92117, 73418 90084, 73370 91468)), ((103884 81751, 104632 82462, 104728 82685, 104676 85904, 104671 95701, 104709 103114, 104672 106559, 104427 106874, 103489 107841, 103249 108074, 103045 108152, 103034 107866, 103074 97329, 103093 96375, 103138 94944, 103160 94555, 103267 94128, 103115 93811, 103203 92615, 103163 91729, 103138 90727, 103234 89932, 103291 89632, 103292 88813, 103448 87550, 103544 86203, 103709 84580, 103729 84488, 103720 82610, 103781 81697, 103884 81751)), ((100628 81448, 100585 81797, 100574 82704, 100596 83749, 100654 84821, 100655 85564, 100611 85805, 100693 86455, 100883 87066, 101264 87838, 101479 88179, 101544 88423, 101672 89034, 101689 89293, 101698 89767, 101654 92971, 101631 93455, 101353 96330, 101349 96667, 101190 100623, 101149 102559, 101148 103282, 101032 104729, 100996 106188, 101003 107273, 100960 108006, 100823 107968, 99511 106683, 99471 106487, 99489 95678, 99488 89261, 99446 87738, 99429 82751, 99540 82499, 100601 81421, 100628 81448), (100890 93175, 100849 93650, 100855 94403, 100908 94674, 100953 94651, 100992 94168, 100986 93400, 100949 93145, 100890 93175)), ((164607 106391, 164641 106350, 164653 106781, 164517 107112, 164142 107479, 163739 107841, 163933 107383, 163897 107364, 163937 106859, 164158 106590, 164599 106346, 164607 106391)), ((163391 89582, 163600 90326, 163989 90450, 164341 90540, 164375 90503, 164390 90577, 164642 90614, 164659 98032, 164641 104837, 164617 105828, 164638 106234, 164159 106583, 163994 106645, 163853 106767, 163582 106958, 163495 106500, 163466 105493, 163458 104441, 163477 97986, 163554 96295, 163485 95431, 163381 95042, 163191 93578, 163140 92300, 163156 88953, 163300 88931, 163391 89582)), ((141712 105172, 143385 106869, 142215 106869, 141588 106217, 137152 101749, 137152 101762, 135007 99623, 135007 98462, 141712 105172)), ((137650 102410, 140561 105306, 141865 106681, 142015 106869, 140218 106869, 139270 105973, 139208 105935, 139418 106164, 139427 106164, 140127 106869, 139234 106869, 137234 104821, 135007 102687, 135007 101031, 136167 102149, 136412 102267, 135715 101443, 135007 100749, 135007 99753, 137650 102410)), ((135867 91710, 135562 91810, 135708 92040, 136068 92193, 136030 92683, 135672 92551, 135271 92682, 135058 92964, 135267 93203, 137381 95381, 139877 97890, 142359 100075, 142554 100220, 143276 100948, 144942 102513, 146460 104018, 149311 106869, 147276 106869, 146602 106364, 146072 105872, 145373 105271, 139674 99573, 138357 98332, 136990 97160, 135007 95490, 135007 93656, 135533 94107, 138405 96965, 135007 93543, 135007 91499, 135019 91219, 135007 90853, 135867 91710), (142663 101249, 142992 101603, 143454 102059, 143496 102048, 140146 98709, 142663 101249)), ((189007 91828, 185473 95408, 183327 97465, 182985 97541, 182818 97740, 182903 97788, 183008 97597, 183354 97568, 186289 94789, 189007 92104, 189007 94298, 188593 94629, 188089 95090, 187939 95270, 188007 95271, 188566 94867, 188592 94832, 189007 94523, 189007 96265, 188630 96748, 186604 99440, 186319 99763, 183281 102903, 180267 105905, 179999 106142, 180024 106142, 179167 106869, 176612 106869, 177259 106029, 177974 105214, 180550 102622, 180639 102383, 177483 105460, 176889 106088, 176904 106088, 176155 106869, 174441 106869, 174768 106676, 174901 106681, 175105 106527, 175358 106385, 176008 105640, 176891 104515, 177191 104254, 177311 104104, 177330 104005, 177192 103699, 176883 103699, 176775 103497, 177161 103102, 177824 102388, 178722 101542, 180848 99415, 181000 99186, 182098 98136, 182370 97887, 189007 91254, 189007 91828), (182802 100710, 182932 100970, 183227 101276, 182914 101540, 182712 101734, 182436 101875, 182450 102065, 182201 102328, 181948 102258, 182057 102496, 181650 102922, 181326 103320, 181632 103104, 182570 102220, 182787 102004, 183136 101563, 183285 101289, 182994 100574, 183070 100512, 183915 100785, 183984 100701, 184114 100410, 183850 100721, 183370 100501, 183343 100531, 183024 100394, 182802 100710), (186138 98465, 184252 100293, 184584 100105, 185094 99578, 186706 97969, 186138 98465), (182015 98404, 181812 98488, 181390 98884, 181199 99169, 181142 99356, 180963 99826, 180678 100114, 180554 100282, 180682 100210, 181087 99828, 181338 99358, 181732 98795, 182373 98258, 182374 98193, 182492 98042, 182015 98404), (186402 95726, 186101 95916, 185871 96130, 184811 97166, 184118 97887, 183671 98320, 182911 97778, 182840 97884, 182373 98273, 182369 98384, 182426 98456, 182508 98417, 182849 97994, 182824 97913, 183306 98144, 183737 98427, 184191 98043, 185095 97161, 186091 96087, 187205 94941, 186402 95726)), ((135792 96382, 136482 96965, 138040 98207, 138421 98476, 142381 102393, 142467 102490, 145397 105383, 145461 105462, 146597 106532, 146936 106788, 147011 106869, 145157 106869, 144817 106353, 144664 106184, 144246 106000, 141275 102966, 139625 101178, 139199 100588, 138739 100005, 138145 99140, 138002 98849, 137395 98150, 136191 96983, 136270 97133, 135690 96651, 136100 97118, 135988 97054, 137584 98790, 138019 99427, 138305 99942, 139061 101023, 139594 101593, 139844 101719, 140053 101917, 142327 104187, 144259 106074, 144689 106328, 145014 106869, 144136 106869, 143061 105836, 141137 103859, 141106 103858, 138055 100837, 135007 97761, 135007 95770, 135792 96382)), ((136478 94170, 136490 94079, 137145 94613, 137647 94934, 137917 95005, 138244 94593, 138136 94319, 138434 94540, 138533 94359, 145449 101273, 145434 101273, 151023 106869, 149510 106869, 149094 106475, 145168 102534, 143581 100839, 142708 100061, 142271 99762, 140787 98531, 139575 97386, 136953 94747, 136239 94053, 136478 94170)), ((139545 87764, 140458 88792, 143138 91446, 144815 93040, 153086 101343, 153697 101909, 154437 102811, 155176 103768, 155866 104259, 155910 104390, 156556 104997, 156882 105338, 157171 105534, 157390 105921, 157854 106136, 158380 106574, 158667 106869, 157319 106869, 157139 106760, 156647 106322, 153456 103283, 150950 100779, 153473 103308, 156942 106869, 154067 106869, 153286 105813, 152455 104861, 151939 104191, 150938 102963, 149845 101829, 149013 100923, 142196 94037, 139717 91595, 139514 91531, 141364 93435, 149611 101638, 150901 103128, 151712 104139, 152100 104653, 152467 105335, 153301 106220, 153491 106481, 153842 106869, 151689 106869, 151540 106702, 151483 106417, 151126 106157, 150468 105482, 150225 105129, 149988 105006, 149641 104736, 149399 104567, 149149 104102, 148875 103976, 148732 103780, 148133 103107, 147890 102882, 147575 102677, 147339 102506, 140507 95647, 140491 95610, 138246 93352, 138222 93366, 135007 90228, 135007 87897, 135135 87968, 135925 88726, 136568 89367, 138533 91283, 138253 90976, 135007 87562, 135007 83246, 139545 87764), (145008 94910, 149680 99510, 145388 95199, 145012 94832, 144933 94736, 143217 93188, 145008 94910)), ((189007 105513, 188856 105669, 188602 106012, 188255 106416, 188781 106108, 189007 105884, 189007 106438, 188582 106869, 185141 106869, 187894 104407, 188719 103769, 189007 103506, 189007 105513)), ((189007 87385, 188791 87601, 188615 87798, 187154 89256, 184679 91699, 183890 92543, 184284 92214, 184559 91998, 185288 91297, 187212 89328, 189007 87528, 189007 88782, 188619 89210, 187979 89678, 186928 90501, 186593 90849, 186340 91013, 185299 91920, 183835 93107, 183524 93410, 182528 94288, 181905 94859, 181074 95760, 181143 95860, 181526 95543, 182398 94683, 183695 93365, 184603 92634, 186107 91489, 186435 91225, 186944 90918, 187787 90316, 187886 90234, 188510 89772, 189007 89297, 189007 90561, 188777 90739, 184921 94630, 183783 95754, 182966 96254, 182865 96095, 182718 96169, 182686 95987, 182339 96377, 182136 96450, 181799 96770, 181705 97039, 181014 97762, 181227 98321, 179560 99994, 176872 102643, 173632 105887, 172953 106624, 172698 106869, 171139 106869, 171826 106181, 172653 105320, 172926 105049, 173500 104549, 173970 104124, 174469 103586, 174616 103351, 174874 103091, 175071 102787, 175104 102682, 174856 102818, 174778 102714, 175007 102392, 175598 101409, 175732 101057, 176911 99659, 179493 97009, 179619 96826, 179576 96841, 179047 97322, 176268 100093, 175335 101195, 175198 101421, 174988 101637, 174233 103187, 174338 103167, 174114 103447, 172960 104706, 172883 104807, 172025 105754, 170912 106869, 167560 106869, 168260 106172, 168912 105352, 169011 105214, 169545 104660, 169677 104457, 170671 103427, 173320 100756, 177090 97035, 177677 96513, 178399 95930, 179300 95291, 180386 94256, 181559 92974, 182790 91741, 185066 89413, 185081 89260, 184805 89515, 180656 93622, 179704 94477, 178826 95284, 178717 95352, 177102 96748, 176503 97297, 176536 97242, 176250 97514, 173104 100721, 171828 101987, 170167 103496, 169452 104130, 168827 104851, 168246 105594, 167945 106016, 167651 106375, 167129 106869, 165402 106869, 165885 106346, 167975 104243, 170717 101517, 174653 97576, 174662 97576, 189007 83298, 189007 87385)), ((135659 103546, 136041 103874, 138773 106527, 139111 106869, 138084 106869, 137695 106484, 136436 105280, 135574 104373, 135488 104261, 135007 103774, 135007 102902, 135659 103546)), ((174641 105965, 175104 106270, 174947 106425, 174684 106406, 174358 106663, 174119 106869, 173382 106869, 174408 105799, 174641 105965)), ((135409 104419, 135525 104512, 136409 105354, 137869 106869, 136513 106869, 135718 106080, 135351 105762, 135007 105418, 135007 104058, 135409 104419)), ((189007 99625, 187903 100672, 186370 102207, 185200 103276, 184287 104230, 184065 104559, 183962 104637, 183894 104788, 184239 104618, 186289 102553, 186582 102151, 187095 101623, 189007 99728, 189007 101043, 187470 102610, 188250 101834, 188937 101180, 189007 101171, 189007 103197, 187941 104265, 185111 106869, 181387 106869, 185304 102923, 188152 100108, 189007 99230, 189007 99625)), ((189007 98574, 184481 103113, 180716 106869, 179264 106869, 179467 106699, 180295 105960, 181975 104291, 183301 102908, 184055 102221, 186204 100058, 186697 99522, 187435 98646, 187842 98077, 187842 98052, 188826 96670, 189007 96484, 189007 98574)), ((129077 103720, 128692 104109, 127488 105370, 126581 106231, 126470 106317, 125984 106797, 125110 106797, 125754 106145, 126082 105764, 128735 103031, 129077 102693, 129077 103720)), ((129077 101586, 128182 102534, 128145 102596, 128373 102386, 128373 102377, 129077 101677, 129076 102574, 127029 104574, 124897 106797, 123240 106797, 124359 105637, 124476 105392, 123655 106089, 122958 106797, 121960 106797, 124620 104154, 127514 101243, 128889 99941, 129077 99792, 129077 101586)), ((129077 99589, 128426 100216, 123957 104652, 123970 104652, 121831 106797, 120672 106797, 127380 100092, 129077 98419, 129077 99589)), ((129077 105292, 128290 106086, 127974 106453, 127629 106797, 126266 106797, 126630 106395, 126721 106279, 127563 105396, 129077 103935, 129077 105292)), ((129077 84485, 128968 84666, 128534 85157, 125495 88348, 122988 90854, 125520 88331, 129077 84871, 129077 87737, 128025 88519, 127072 89352, 126401 89868, 125171 90866, 124037 91959, 123131 92791, 116247 99608, 113803 102087, 113739 102290, 115645 100441, 119278 96778, 123846 92193, 125336 90903, 126348 90096, 126862 89707, 127543 89339, 128428 88504, 128689 88313, 129077 87962, 129077 90102, 128914 90266, 128625 90321, 128365 90678, 127691 91336, 127339 91579, 127214 91816, 126945 92165, 126775 92406, 126311 92657, 126184 92929, 125988 93072, 125315 93671, 125090 93914, 124885 94230, 124714 94466, 117855 101297, 117818 101313, 115560 103558, 115574 103582, 112445 106797, 110107 106797, 110178 106670, 110935 105880, 111576 105237, 113495 103271, 113187 103551, 109773 106797, 105454 106797, 109974 102259, 111001 101349, 113681 98642, 115248 96989, 123552 88718, 124118 88108, 125023 87367, 125977 86632, 126468 85938, 126598 85895, 127207 85251, 127548 84924, 127745 84635, 128129 84414, 128344 83953, 128782 83425, 129077 83139, 129077 84485), (117408 96419, 117041 96794, 116946 96872, 115396 98587, 117120 96798, 121718 92124, 117408 96419)), ((76615 100711, 79026 103093, 81839 105941, 82719 106797, 82327 106797, 81278 105696, 79743 104160, 78674 102990, 77718 102078, 77389 101855, 77311 101752, 77161 101684, 77331 102029, 79397 104078, 79799 104372, 80327 104886, 82222 106797, 80907 106797, 79339 105263, 80114 106044, 80769 106727, 80780 106797, 78751 106797, 77683 105731, 75079 102898, 75079 99177, 76615 100711)), ((75272 92559, 75267 92693, 75423 92895, 75565 93150, 76330 93818, 77434 94682, 77696 94983, 77846 95102, 77944 95121, 78249 94982, 78251 94674, 78452 94565, 78846 94951, 79560 95617, 80407 96513, 82534 98640, 82762 98792, 83814 99889, 84063 100162, 90696 106797, 90120 106797, 86540 103263, 84486 101119, 84409 100775, 84209 100611, 84161 100694, 84353 100798, 84384 101145, 87159 104081, 89846 106797, 87650 106797, 87322 106383, 86859 105879, 86679 105729, 86679 105798, 87083 106356, 87117 106382, 87426 106797, 85683 106797, 85201 106421, 82508 104396, 82186 104110, 79049 101071, 76043 98059, 75806 97791, 75806 97816, 75079 96958, 75079 94404, 75921 95051, 76736 95768, 79327 98341, 79567 98432, 76489 95274, 75860 94680, 75860 94694, 75079 93946, 75079 92234, 75272 92559), (83492 100216, 83550 100339, 83990 100627, 84035 100614, 83805 101096, 83523 101527, 83906 101981, 84788 102885, 85862 103882, 87008 104997, 86222 104194, 86032 103895, 84782 102601, 84063 101908, 83630 101461, 84170 100703, 84066 100630, 83684 100175, 83564 100159, 83492 100216), (81843 102376, 82370 102886, 83980 104498, 83483 103929, 81658 102044, 81843 102376), (78846 99425, 79730 100360, 79946 100577, 80387 100927, 80661 101077, 81376 100787, 81438 100864, 81163 101708, 81247 101776, 81542 101906, 81227 101642, 81447 101160, 81417 101133, 81554 100814, 81238 100593, 80978 100723, 80673 101019, 80263 100545, 80216 100504, 80075 100227, 79884 100242, 79621 99994, 79692 99738, 79454 99848, 79028 99441, 78629 99117, 78846 99425), (81739 98474, 82120 98879, 82590 99128, 83153 99523, 83695 100172, 83763 100173, 83907 100284, 83712 100018, 83544 99808, 83460 99605, 83064 99181, 82779 98991, 82593 98933, 82123 98755, 81834 98470, 81666 98345, 81739 98474)), ((75602 83675, 77708 85764, 80431 88507, 84370 92445, 98651 106797, 94563 106797, 94347 106581, 94152 106405, 92694 104946, 90250 102469, 89406 101680, 89736 102076, 89950 102350, 90652 103078, 92624 105004, 94421 106797, 93167 106797, 92738 106409, 92270 105769, 91448 104719, 91100 104384, 90936 104132, 90029 103090, 88842 101625, 88540 101315, 87661 100320, 87089 99695, 86189 98864, 86088 98933, 86406 99317, 87266 100188, 88584 101485, 89315 102393, 90459 103899, 90724 104226, 91031 104735, 91634 105578, 92177 106302, 92651 106797, 91387 106797, 91211 106567, 87318 102711, 86195 101574, 85696 100756, 85853 100655, 85779 100508, 85961 100479, 85571 100129, 85498 99927, 85178 99592, 84909 99497, 84186 98804, 83627 99020, 81955 97353, 79307 94665, 76061 91421, 75325 90744, 75079 90495, 75079 88929, 75767 89618, 76628 90446, 76899 90720, 77824 91764, 78363 92261, 78597 92408, 78857 92665, 79162 92862, 79266 92894, 79131 92647, 79235 92569, 79557 92799, 80540 93390, 80893 93523, 82291 94703, 84939 97283, 85122 97409, 85108 97367, 84626 96838, 81855 94059, 80753 93128, 80528 92991, 80313 92778, 78761 92022, 78782 92128, 78503 91904, 77241 90749, 77141 90674, 76194 89817, 75079 88698, 75079 85351, 75778 86050, 76598 86703, 76738 86803, 77289 87336, 77492 87468, 79275 89201, 81192 91112, 84913 94881, 85437 95468, 86020 96189, 86658 97090, 87694 98178, 88976 99351, 90209 100582, 92537 102858, 92688 102873, 92433 102597, 88328 98447, 87473 97494, 86666 96616, 86598 96508, 85200 94894, 84651 94296, 84706 94330, 84434 94043, 81228 90894, 79961 89619, 78452 87959, 77818 87244, 77098 86618, 76356 86036, 75931 85734, 75574 85441, 75079 84921, 75079 83196, 75602 83675)), ((129077 96647, 128561 96988, 128393 97140, 128208 97560, 125174 100529, 123386 102179, 122796 102605, 122214 103065, 121351 103659, 121035 103816, 120360 104409, 119192 105614, 119343 105535, 118859 106114, 119328 105704, 119264 105816, 120999 104220, 121636 103785, 122151 103499, 123231 102744, 123801 102210, 123927 101960, 124125 101752, 126395 99477, 128282 97546, 128536 97115, 129077 96790, 129077 97668, 128045 98743, 126070 100668, 126070 100698, 123042 103752, 119971 106797, 117978 106797, 118594 106013, 119176 105322, 120415 103764, 120684 103383, 124601 99423, 124698 99337, 127594 96408, 127674 96343, 128741 95208, 128997 94870, 129077 94795, 129077 96647)), ((77541 105684, 78179 106509, 78442 106797, 76437 106797, 76281 106647, 75937 106392, 75532 106045, 75840 106573, 76064 106797, 75510 106797, 75079 106372, 75079 102934, 77541 105684)), ((75249 97259, 75988 98087, 77658 99766, 79043 101091, 79728 101846, 81890 103996, 82426 104488, 83302 105228, 83872 105635, 83896 105635, 85280 106616, 85464 106797, 83375 106797, 78835 102271, 75079 98507, 75079 97056, 75249 97259)), ((129077 94528, 128575 95202, 128084 95732, 127483 96431, 121781 102130, 120540 103448, 119368 104814, 117698 106797, 115864 106797, 116315 106271, 119173 103399, 115748 106797, 113060 106797, 113918 105937, 114018 106242, 114250 106097, 114405 105738, 114891 105778, 114761 106136, 114893 106536, 115172 106746, 115411 106537, 117591 104423, 120099 101927, 122285 99445, 122430 99250, 123158 98528, 124721 96862, 129077 92487, 129077 94528), (120917 101658, 123457 99141, 123811 98812, 124267 98350, 124256 98308, 120917 101658)), ((183845 83166, 183798 83199, 182709 84542, 182854 84525, 182347 85322, 181515 86562, 180626 87831, 179661 88851, 179593 88951, 178321 90266, 177978 90597, 177660 90939, 176753 91956, 175431 93333, 172135 96634, 170492 98223, 169972 98652, 169629 98891, 168550 100118, 168443 100477, 168235 100846, 168341 100794, 168288 100935, 169389 99677, 169713 99284, 170505 98458, 170981 97987, 174666 94253, 176945 92016, 177696 91302, 177959 91064, 179968 89019, 181125 87927, 182108 86824, 186028 82869, 188651 82869, 185098 86393, 167744 103756, 165007 106509, 165007 102504, 165315 102182, 165286 102190, 165479 101961, 165393 101955, 165007 102284, 165007 99307, 169716 94563, 169716 94544, 174416 89852, 180898 83425, 181439 82869, 184162 82869, 183845 83166), (178607 86566, 178302 86817, 175577 89495, 175062 89927, 174213 90769, 173333 91898, 173071 92217, 171957 93469, 167925 97526, 166977 98627, 166318 99279, 166266 99272, 166219 99377, 165833 99811, 165705 100111, 165699 100362, 165758 100404, 166264 99399, 167011 98602, 171328 94340, 172056 93736, 173611 92170, 174084 91564, 174382 91210, 174862 90601, 175256 90133, 178612 86775, 179475 85821, 178607 86566)), ((79767 83105, 79758 83076, 79987 83269, 79993 83185, 79666 82797, 82641 82797, 87385 87506, 87404 87507, 92096 92208, 98525 98688, 99079 99231, 99079 101952, 98784 101637, 98751 101590, 97406 100499, 97424 100644, 96628 100138, 95388 99305, 94119 98416, 93099 97451, 92998 97383, 91683 96112, 91351 95769, 91010 95451, 89994 94546, 88617 93224, 85314 89926, 83727 88282, 83298 87762, 83059 87419, 81832 86340, 81472 86233, 81102 86025, 81154 86132, 81013 86079, 82274 87181, 82665 87505, 83492 88297, 83962 88772, 87695 92458, 89934 94736, 90884 95751, 92916 97748, 94021 98917, 95124 99898, 99079 103820, 99079 106442, 95175 102507, 78194 85534, 75428 82797, 79444 82797, 79767 83105), (81544 83551, 82551 84057, 83348 84802, 87608 89118, 88212 89846, 89778 91401, 90384 91875, 90738 92173, 91348 92654, 91817 93050, 95174 96402, 96127 97265, 95131 96094, 92454 93368, 92023 92853, 91179 92004, 90051 91122, 89733 90861, 88480 89748, 84422 85717, 83322 84769, 82669 84110, 82676 84058, 82571 84011, 82137 83625, 81837 83497, 81586 83490, 81544 83551)), ((137921 82962, 138917 83910, 137933 82869, 142437 82869, 147773 88161, 147947 88683, 148722 89444, 148898 89524, 149398 89811, 158676 99074, 159007 99422, 159007 100720, 158649 100367, 159007 100771, 159007 104458, 158432 103880, 157431 102920, 154925 100363, 154639 100154, 155001 100589, 156617 102199, 157635 103244, 158785 104445, 159007 104659, 159007 106332, 156953 104299, 156014 103337, 155923 103052, 156042 102817, 156230 102661, 156327 102643, 156292 102526, 156164 102461, 156018 102529, 155758 102411, 155741 102362, 155556 102146, 155494 101994, 155671 101926, 155441 101869, 155292 101618, 155231 101309, 154980 101129, 154851 101154, 154766 101228, 154639 101203, 154538 101243, 154341 101155, 154046 101054, 153839 100862, 153769 100755, 153301 100565, 153377 100666, 137188 84471, 135555 82869, 137764 82869, 137921 82962), (141672 84279, 142226 84903, 143531 86176, 144855 87210, 145304 87592, 148626 90290, 150302 91599, 153575 94499, 153997 94887, 158514 99368, 154060 94889, 153662 94501, 150413 91600, 149943 91211, 147453 89217, 145191 87307, 144544 86741, 144399 86630, 142591 84937, 141766 84248, 141672 84279), (143975 87547, 144979 88454, 145637 89008, 146128 89385, 146247 89410, 145832 88999, 145230 88462, 144643 88005, 144244 87681, 143913 87458, 143173 86723, 143975 87547), (141153 84673, 140135 83612, 139978 83494, 141153 84673)), ((122577 83155, 122979 82797, 126666 82797, 126088 83372, 125128 84373, 122572 86881, 122363 87167, 122798 86806, 124407 85187, 125452 84169, 126653 83019, 126868 82797, 128540 82797, 126508 84851, 125546 85790, 125260 85882, 125025 85762, 124869 85574, 124851 85477, 124734 85512, 124670 85640, 124737 85786, 124621 86046, 124572 86063, 124355 86248, 124203 86310, 124134 86135, 124077 86363, 123826 86516, 123519 86575, 123339 86825, 123362 86954, 123436 87038, 123411 87165, 123451 87266, 123363 87463, 123263 87758, 123071 87965, 122965 88035, 122773 88503, 122874 88427, 106724 104570, 105081 106248, 105081 104040, 105173 103883, 106122 102887, 105081 103871, 105081 99367, 110369 94033, 110891 93859, 111652 93082, 111732 92906, 112021 92406, 121283 83128, 121632 82797, 122929 82797, 122577 83155), (105823 101669, 105705 101827, 106883 100652, 105823 101669), (117097 87744, 116709 88142, 113808 91391, 113419 91861, 111425 94351, 109516 96614, 108949 97262, 108838 97406, 107145 99213, 106457 100038, 106489 100132, 107111 99578, 108385 98276, 109418 96950, 109800 96500, 112498 93178, 113807 91502, 116707 88229, 117095 87808, 121579 83290, 117097 87744), (111207 95972, 110670 96574, 110213 97161, 109889 97560, 109666 97891, 108931 98632, 109755 97829, 110664 96825, 111217 96167, 111594 95676, 111620 95557, 111207 95972)), ((115888 105508, 115465 105785, 115001 105401, 115348 105085, 115911 105006, 115888 105508)), ((129077 92296, 128683 92714, 124742 96636, 123049 98223, 122271 99095, 121970 99535, 120739 101017, 119594 102229, 116955 104851, 116261 105565, 116380 105326, 116291 105314, 116821 104659, 117145 104157, 117216 103887, 116801 103560, 116527 103668, 116748 103370, 116569 103271, 123481 96355, 123481 96370, 129077 90781, 129077 92296)), ((115336 105062, 114995 105396, 114838 105171, 115434 104446, 115336 105062)), ((96503 100221, 97853 101199, 98830 102069, 99079 102414, 99079 103724, 98238 102860, 95635 100233, 95155 99684, 94802 99179, 94759 99052, 96503 100221)), ((147637 83544, 148660 84515, 148761 84584, 150078 85861, 150412 86205, 150754 86524, 151772 87437, 153153 88765, 156464 92072, 158058 93719, 158493 94239, 158813 94600, 159007 94770, 159007 97606, 158544 97164, 154240 92806, 153630 92079, 152058 90517, 151454 90038, 151101 89739, 150492 89252, 150023 88855, 146654 85490, 145699 84622, 146703 85793, 148737 87854, 149390 88527, 149825 89041, 150670 89893, 151797 90780, 152116 91044, 153370 92165, 157440 96214, 158540 97167, 159007 97693, 159007 98863, 153121 93030, 149770 89670, 143315 83167, 143007 82869, 146691 82869, 147637 83544)), ((119376 83260, 115017 87567, 114287 88174, 112726 89747, 112247 90349, 111948 90703, 111462 91314, 111064 91783, 107698 95151, 106832 96106, 107699 95353, 108002 95101, 110736 92414, 111250 91979, 112101 91134, 112989 90007, 113254 89688, 114377 88434, 118422 84364, 119379 83264, 119903 82797, 121072 82797, 115239 88685, 111879 92034, 105375 98489, 105081 98797, 105081 95113, 105755 94167, 106724 93144, 106793 93044, 108069 91726, 108413 91392, 108733 91050, 109646 90034, 110973 88654, 114280 85340, 115928 83747, 116448 83312, 116809 82991, 116980 82797, 119815 82797, 119376 83260)), ((175910 87849, 175381 88015, 174622 88789, 174546 88966, 174263 89468, 165290 98457, 165007 98723, 165007 98262, 169190 94105, 169577 93708, 172460 90461, 172845 89990, 174823 87495, 176717 85233, 177279 84586, 177327 84505, 178790 82869, 180845 82869, 175910 87849)), ((87843 86984, 88240 87370, 91487 90252, 91958 90637, 94453 92613, 96719 94507, 97366 95070, 97446 95118, 99079 96581, 99079 98639, 94099 93702, 93935 93171, 93161 92413, 92982 92337, 92480 92055, 83491 83080, 83226 82797, 83686 82797, 87843 86984)), ((178149 83295, 177829 83563, 176805 84890, 176426 85339, 173756 88666, 172458 90347, 169576 93618, 169190 94040, 168649 94596, 165007 98258, 165007 91516, 173650 82869, 178563 82869, 178149 83295), (176521 83913, 176439 83982, 175536 84986, 174988 85645, 174615 86137, 174592 86258, 175003 85844, 175538 85243, 175989 84654, 176309 84254, 176528 83921, 177274 83170, 176521 83913)), ((99079 91440, 99079 96356, 98654 95940, 98386 95619, 97058 94597, 96609 94218, 93282 91547, 91602 90250, 88330 87370, 87909 86984, 87352 86443, 83690 82797, 90435 82797, 99079 91440), (96105 92793, 96706 93328, 97295 93779, 97694 94100, 98027 94318, 98778 95065, 98035 94311, 97966 94229, 96963 93328, 96304 92779, 95812 92407, 95691 92384, 96105 92793)), ((102985 81273, 103431 81326, 103516 81457, 103409 82170, 103417 84258, 103491 84868, 103367 86192, 103305 86994, 103156 88168, 103015 88595, 102831 89952, 102807 90936, 102840 91021, 102948 91457, 103061 93165, 103024 93291, 103052 93312, 103086 93846, 102889 94144, 102837 94377, 102710 94466, 102635 94385, 102367 94487, 102090 94165, 101878 94135, 101736 94023, 101846 92478, 101891 91504, 101878 89698, 101849 88705, 101775 88202, 101651 87866, 101553 87316, 101356 86911, 101253 86671, 101054 86100, 100946 85652, 100886 85469, 100869 83843, 100908 82600, 100907 82133, 100978 81163, 101021 81075, 101844 80237, 102985 81273)), ((159007 92011, 159007 94417, 158123 93563, 157816 93235, 154070 89536, 151825 87249, 150870 86233, 148819 84218, 147686 83018, 147456 82869, 149858 82869, 159007 92011)), ((115771 83681, 115443 83989, 111744 87734, 109459 89982, 108441 90934, 106426 92985, 105236 94110, 105081 94349, 105081 91937, 114223 82797, 116627 82797, 115771 83681)), ((136730 93148, 136798 93703, 136300 93678, 136018 93257, 136403 92789, 136730 93148)), ((137358 93224, 136746 93128, 136408 92783, 136635 92630, 137358 93224)), ((76149 92200, 75983 92433, 75679 92896, 75525 92741, 75544 92474, 75287 92150, 75079 91910, 75079 91175, 76149 92200)), ((105081 91284, 105081 89262, 105864 88501, 106819 87638, 107698 86828, 107806 86759, 109422 85352, 110021 84799, 109987 84853, 110273 84580, 112055 82797, 113473 82797, 105081 91284)), ((153303 83655, 154166 84610, 154979 85489, 155047 85598, 156452 87211, 157005 87812, 156951 87779, 157224 88065, 159007 89845, 159007 91265, 150520 82869, 152542 82869, 153303 83655)), ((172405 83061, 171404 84178, 168684 86828, 165007 90484, 165007 88861, 168651 85230, 169018 84854, 169113 84777, 170837 82869, 172594 82869, 172405 83061)), ((96719 86442, 97095 86808, 97173 86903, 99079 88628, 99070 88929, 99079 89093, 99079 90384, 98887 90195, 97770 89195, 95121 86476, 91465 82797, 93088 82797, 96719 86442)), ((155450 83367, 155554 83302, 155200 82869, 156788 82869, 157348 83410, 157890 83213, 159007 84347, 159007 87183, 156650 84880, 156483 84794, 156967 85324, 157591 85935, 159007 87358, 159007 89551, 157805 88338, 157804 88314, 156734 87233, 156207 86646, 155620 85924, 154974 85025, 153932 83936, 153167 83249, 152796 82869, 154945 82869, 155450 83367)), ((164460 88822, 164494 89151, 164293 88913, 164277 88689, 164460 88822)), ((164208 88612, 164189 88920, 163820 89074, 163471 88653, 163581 88341, 164208 88612)), ((107089 85157, 107002 85324, 107532 84840, 108143 84216, 109566 82797, 111759 82797, 110546 84000, 110523 84001, 109441 85071, 108854 85597, 108134 86184, 107236 86830, 106146 87875, 105460 88639, 105081 89008, 105081 86859, 105577 86354, 105513 86252, 105081 86604, 105081 85016, 105620 84456, 105423 83915, 106555 82797, 109392 82797, 107089 85157)), ((170652 83063, 168937 84848, 165007 88846, 165007 86732, 165651 86103, 166987 84740, 168495 83251, 168919 82869, 170827 82869, 170652 83063)), ((95846 83441, 97210 84777, 98697 86285, 99079 86708, 99079 88617, 98885 88442, 97102 86727, 93103 82797, 95216 82797, 95846 83441)), ((132605 80942, 132679 81240, 132639 83885, 132626 86911, 132579 87457, 132468 87891, 132408 87955, 131721 84879, 131642 83865, 131717 83332, 131736 83090, 132223 80744, 132332 80573, 132605 80942)), ((185068 83712, 182443 86315, 181894 86793, 181388 87146, 181262 87190, 182429 85447, 183409 84096, 184279 83118, 184620 82869, 185934 82869, 185068 83712)), ((165668 85880, 165007 86517, 165007 83298, 165433 82869, 168633 82869, 165668 85880)), ((99079 83223, 99079 86425, 96069 83458, 95431 82797, 98652 82797, 99079 83223)), ((189382 77634, 189533 77902, 189432 77951, 189621 77992, 189859 78147, 190259 78566, 190297 78633, 190571 78957, 190300 79070, 187503 79152, 187480 79162, 190367 79269, 190451 79291, 190930 79332, 191126 79496, 191115 79588, 190925 79808, 190944 79902, 190723 80018, 190502 80042, 190207 80102, 190101 80069, 189896 80085, 189558 80254, 189480 80459, 189264 80559, 188835 80586, 188798 80658, 189144 80686, 189070 80817, 188721 81173, 188444 81377, 187634 82080, 187525 82189, 186916 82527, 186359 82610, 179792 82660, 179515 82396, 178753 82406, 178617 82481, 178227 82637, 166761 82652, 166518 82434, 166424 82332, 166024 81948, 165775 81641, 168140 81662, 168180 81654, 166510 81514, 165591 81354, 165127 81404, 164558 81322, 164278 81434, 163970 81485, 163174 80658, 163113 80549, 165122 80420, 165647 80415, 165898 80346, 164225 80293, 163542 80303, 163484 80329, 162931 80374, 162762 80259, 163298 78955, 163539 78757, 164001 78202, 164175 78019, 164399 77870, 164809 77837, 164747 77814, 164488 77781, 164603 77599, 164875 77395, 168390 77388, 168474 77531, 168358 77799, 168168 78060, 168062 78152, 168101 78217, 168242 78167, 168385 78007, 168585 77913, 168883 77942, 168769 78146, 168714 78116, 168745 78205, 168984 78069, 169140 78143, 169213 78339, 169485 78278, 169672 78042, 169884 77856, 170071 77773, 170347 77624, 170627 77643, 171092 77414, 186849 77418, 189060 77382, 189382 77634), (183570 80945, 182236 81159, 181723 81216, 179273 81566, 178434 81696, 176909 81968, 173954 82244, 173486 82276, 167994 82306, 172463 82332, 173277 82385, 173908 82321, 176853 82064, 179673 81615, 181888 81355, 182602 81288, 182762 81260, 184628 81173, 185504 81069, 185646 80974, 185122 80895, 183570 80945), (182672 80254, 181737 80310, 181038 80388, 180511 80478, 180415 80551, 180887 80548, 181555 80498, 182171 80402, 183547 80335, 183404 80292, 184320 80257, 182872 80234, 182672 80254), (185857 80305, 186996 80307, 187879 80274, 186964 80281, 185356 80267, 185857 80305), (164582 78676, 163640 78757, 164183 78859, 166471 78868, 166748 78852, 167131 78863, 169650 78821, 169954 78760, 169535 78704, 167814 78708, 165430 78653, 164582 78676)), ((165215 81692, 165379 81780, 165353 81891, 165483 82027, 165383 82128, 165287 82130, 165123 82410, 165129 82581, 165090 82597, 164457 82001, 164242 81784, 164184 81691, 164710 81711, 164822 81570, 165215 81692)), ((144475 80866, 145429 80884, 147249 80950, 147676 81059, 147995 80907, 149189 80995, 150078 80952, 151077 80929, 151703 81000, 152174 81080, 152991 81083, 154257 81240, 155601 81336, 157224 81501, 157316 81521, 159195 81511, 160107 81571, 160054 81676, 159342 82423, 159123 82520, 155899 82467, 146251 82463, 138690 82501, 135245 82464, 134930 82219, 133963 81280, 133730 81041, 133654 80833, 133940 80822, 144475 80866)), ((92122 77157, 94146 77202, 97757 77158, 98867 77205, 99105 77316, 100366 78547, 100403 78678, 99837 78569, 97581 78550, 96948 78628, 95787 78649, 95242 78650, 93639 78588, 91715 78546, 91028 78485, 90186 78391, 89714 78206, 89483 78192, 88983 78266, 88882 78301, 87752 78298, 85672 78335, 83666 78341, 83527 78371, 83625 78416, 85160 78406, 88802 78424, 88900 78357, 89024 78721, 89087 78678, 89640 78870, 89647 79282, 89034 79251, 88998 79275, 88164 79272, 87065 79185, 85844 78988, 84768 78952, 83389 78957, 82545 79030, 81829 79032, 80314 78959, 78416 78951, 76924 79029, 76950 79176, 77531 79227, 78330 79221, 78995 79268, 80869 79210, 84307 79214, 85033 79272, 86635 79354, 86872 79394, 87769 79482, 89806 79457, 89860 79410, 90104 79373, 90330 79396, 90407 79446, 91356 79442, 92471 79410, 93971 79538, 94339 79556, 95881 79762, 97398 79804, 97877 79720, 97444 79618, 96630 79583, 95891 79489, 95264 79459, 94320 79391, 92901 79318, 90412 79329, 90145 78917, 90156 78879, 90099 78506, 90869 78649, 91135 78784, 91853 78857, 93623 78874, 94278 78799, 95687 78778, 96834 78800, 98195 78858, 99584 78857, 100227 78788, 100424 78700, 100601 78786, 100785 79017, 101357 80061, 101288 80116, 100287 80307, 98569 80520, 97490 80602, 93792 80625, 92135 80563, 91122 80624, 90920 80787, 91813 80813, 92020 80867, 92623 80888, 93694 80882, 94027 80822, 96539 80818, 97447 80882, 98470 80866, 99385 80755, 100797 80517, 100863 80539, 100184 81271, 99936 81505, 99734 81510, 98721 81651, 98279 81693, 98273 81782, 98213 81825, 99436 81888, 99470 81923, 99167 82280, 98876 82462, 97325 82438, 86733 82431, 82152 82405, 75266 82403, 74771 82121, 73976 81375, 75354 81341, 75916 81234, 75734 81133, 74690 81028, 73684 81024, 73160 80507, 73131 80406, 73461 80405, 74325 80482, 75449 80479, 75815 80413, 77367 80321, 79468 80312, 80350 80252, 81066 80141, 86007 80156, 86295 80121, 86495 80078, 87190 80032, 86184 79991, 82616 79990, 81058 79956, 79791 79976, 79312 80001, 77313 79974, 75111 80083, 73874 80163, 72874 80164, 72719 80055, 72952 79352, 73188 79028, 73966 78231, 74018 78245, 74915 78171, 75001 78175, 75203 78072, 74821 77975, 74553 77944, 74430 77809, 74923 77317, 75147 77158, 76457 77157, 82752 77198, 88012 77155, 92122 77157), (79707 80819, 79499 80909, 79881 81005, 81539 81035, 82181 81060, 83479 81374, 84317 81550, 83552 81279, 82793 80972, 82138 80741, 80295 80729, 79707 80819), (89334 80366, 89237 80481, 89289 81073, 90046 80861, 90283 81008, 90091 80707, 90039 80520, 89576 80344, 89334 80366)), ((110104 77200, 109859 77585, 109951 77626, 110433 77405, 110450 77792, 109877 78077, 109745 78229, 109512 78737, 109800 78780, 109961 78766, 112243 78819, 114906 78826, 117476 78600, 117665 78560, 118428 78565, 120113 78490, 121833 78477, 126725 78475, 127832 78494, 128672 78520, 128970 78585, 129228 79001, 129703 79495, 129811 79724, 130106 80058, 130185 80026, 130438 80023, 130479 80050, 130986 80001, 131218 79940, 131494 79760, 131419 80142, 131114 80377, 130591 80990, 130394 81191, 130174 81334, 130073 81511, 129834 81677, 125453 81640, 122828 81660, 122442 81675, 122006 81504, 121831 81490, 121449 81673, 120917 81655, 118368 81614, 116850 81518, 116589 81509, 116069 81393, 115510 81300, 114702 81093, 114449 80980, 113729 80908, 112446 80938, 112586 80991, 112003 81066, 112529 81111, 112449 81148, 114248 81254, 114841 81408, 115287 81582, 116255 81826, 116813 81856, 117020 81753, 119571 81750, 121503 81721, 121890 81586, 122366 81729, 124725 81748, 126717 81743, 129795 81717, 129710 81868, 129279 82320, 129110 82399, 123268 82450, 123084 82228, 122924 82082, 122771 82086, 122441 82299, 122014 82410, 120650 82450, 118956 82429, 115719 82445, 106388 82388, 105093 82393, 103941 81195, 103867 80994, 103989 81046, 104239 81004, 108895 81016, 109727 81027, 110262 81013, 110476 80960, 112539 80702, 113698 80507, 114034 80460, 114374 80379, 118849 80356, 122191 80328, 122276 80340, 123547 80292, 123776 80218, 124941 80261, 124969 80280, 125670 80261, 126189 80170, 126195 80099, 126040 80025, 125082 79975, 124668 79998, 124596 80021, 123510 80152, 122889 80184, 122130 80252, 119325 80258, 115979 80248, 115638 80254, 114233 80310, 112873 80460, 111249 80677, 109926 80875, 103738 80883, 103545 80780, 102917 80138, 102854 79857, 103089 79292, 103267 79170, 103975 79246, 104704 79287, 106010 79319, 107575 79305, 108507 79256, 114470 79240, 118164 79263, 118636 79284, 119274 79278, 119282 79230, 114472 79238, 107273 79201, 106366 79161, 105012 79051, 104285 79069, 103282 79153, 103367 78976, 104898 77424, 105153 77190, 110104 77200)), ((165705 81671, 165679 81794, 165514 81793, 165243 81676, 165631 81631, 165705 81671)), ((159204 78697, 159671 78696, 160640 78770, 160729 78813, 161566 79634, 160532 80776, 160478 81223, 160347 81308, 159638 81201, 157550 81208, 156937 81283, 155613 81158, 154810 81095, 153636 80948, 153209 80806, 151853 80622, 150867 80598, 150783 80632, 150347 80740, 148643 80853, 148513 80816, 148492 80844, 147961 80878, 147661 80681, 147427 80628, 147338 80502, 147419 80427, 147317 80159, 147640 79882, 147669 79670, 147781 79527, 149327 79637, 150301 79683, 152108 79666, 153099 79639, 153604 79566, 153938 79441, 154487 79343, 154894 79145, 155134 79043, 155704 78845, 156154 78738, 156336 78678, 157961 78659, 159204 78697)), ((134385 78952, 134635 78978, 134948 79102, 138022 79213, 138141 79205, 140016 79199, 142319 79263, 143270 79216, 145359 79233, 145698 79264, 146988 79453, 146825 79772, 146866 80579, 146912 80688, 143737 80708, 140620 80746, 137113 80750, 136730 80770, 135564 80767, 133624 80799, 133400 80674, 132680 79908, 132816 79814, 133900 79883, 134924 79936, 135932 79899, 136947 79787, 134842 79734, 133844 79613, 133303 79581, 132988 79590, 132995 79502, 133174 79323, 133504 78959, 133801 78755, 134385 78952)), ((159305 77332, 160383 78391, 160356 78419, 160008 78377, 159123 78365, 158056 78388, 156983 78445, 156240 78446, 155999 78403, 155348 78483, 154738 78673, 153967 79053, 153625 79269, 153381 79336, 152773 79464, 152515 79480, 152040 79490, 148833 79446, 148349 79422, 145474 79145, 145137 79141, 141181 78982, 139245 78941, 138522 78940, 137076 78821, 135617 78787, 134531 78795, 133802 78752, 133836 78613, 135122 77304, 135317 77261, 146131 77280, 152543 77278, 154065 77237, 159056 77217, 159305 77332), (147401 78645, 147130 78698, 147153 78743, 147636 78782, 148404 78777, 148661 78740, 148629 78681, 148154 78639, 147401 78645)), ((72405 50527, 72323 50845, 72236 51628, 72263 52963, 72330 53108, 72347 55010, 72185 57403, 71998 58807, 71963 59128, 71887 60953, 71914 62820, 71939 62898, 71954 62726, 71976 60761, 72207 57556, 72384 56283, 72500 55341, 72520 55030, 72520 52606, 72601 52007, 72597 51351, 72653 50791, 72718 50811, 73748 51864, 74223 52278, 74409 52473, 74689 52801, 74718 74998, 74670 76696, 74054 77378, 73925 77404, 73895 75852, 73907 75089, 73897 74427, 73826 74074, 73716 74202, 73683 76490, 73696 76854, 73756 77582, 73665 77770, 72611 78839, 72618 78356, 72585 77672, 72660 76950, 72973 74647, 73077 74016, 73349 72626, 73467 71947, 73598 70975, 73713 69666, 73690 66704, 73704 65454, 73628 64796, 73643 62785, 73643 60040, 73620 58660, 73588 57805, 73553 58600, 73471 64517, 73479 65073, 73448 65260, 73448 68166, 73518 68961, 73477 70233, 73383 71317, 73317 71770, 73003 73660, 72929 74044, 72469 77224, 72377 77427, 72287 78034, 72257 79091, 72220 79209, 72056 79235, 71358 79066, 71261 79287, 71248 78286, 71259 76684, 71400 74777, 71429 74095, 71458 72925, 71477 70616, 71431 70084, 71424 69087, 71372 66703, 71274 66503, 71156 67205, 71136 70986, 71140 72671, 71176 74078, 71160 74793, 71105 76195, 71044 76888, 70981 77332, 70953 78776, 71035 79418, 71028 79456, 70943 79333, 70577 79329, 69556 79395, 69453 79327, 69482 52891, 69589 52660, 70593 51627, 70717 51551, 70519 54028, 70500 54173, 70483 54492, 70490 58439, 70338 61664, 70309 65729, 70328 71338, 70233 72949, 69788 77936, 69981 76642, 70273 73529, 70422 71805, 70442 65590, 70434 62644, 70558 59385, 70577 59247, 70602 55383, 70625 54521, 70859 52475, 70873 51954, 70854 51454, 70969 51348, 70995 51200, 72325 50391, 72405 50527), (72596 57078, 72576 57754, 72621 59615, 72620 62514, 72589 64641, 72649 66523, 72686 68446, 72706 70168, 72721 68999, 72752 68139, 72794 68393, 72828 67015, 72820 66207, 72780 65823, 72722 62853, 72722 59701, 72746 58291, 72750 57395, 72722 56855, 72596 57078)), ((162452 50745, 162776 50980, 163573 51755, 163559 51807, 163635 52707, 163631 52793, 163732 52995, 163829 52611, 163860 52345, 163995 52222, 164487 52715, 164645 52939, 164648 54248, 164607 60658, 164648 65801, 164647 69910, 164602 71938, 164645 75547, 164601 76656, 164490 76897, 163258 78155, 163126 78193, 163235 77629, 163254 75373, 163178 74740, 163155 73577, 163154 73032, 163216 71431, 163258 69506, 163320 68819, 163413 67977, 163598 67504, 163612 67274, 163539 66775, 163504 66674, 163507 65544, 163469 63462, 163463 61456, 163433 61317, 163388 61416, 163398 62950, 163381 66594, 163449 66688, 163083 66815, 163126 66878, 162934 67431, 162525 67439, 162553 66824, 162529 66788, 162532 65953, 162619 64853, 162816 63632, 162852 62560, 162847 61181, 162774 60337, 162772 59620, 162845 58103, 162853 56207, 162775 54716, 162631 54740, 162579 55322, 162586 56121, 162538 56787, 162595 58661, 162590 62099, 162532 62824, 162450 64427, 162410 64663, 162322 65561, 162347 67598, 162394 67652, 162431 67895, 162408 68122, 162358 68199, 162362 69148, 162394 70263, 162266 71763, 162248 72131, 162042 73673, 162000 75189, 162085 75667, 162186 75235, 162223 74422, 162317 73683, 162345 73056, 162413 72112, 162488 70691, 162475 68204, 162887 67936, 162925 67946, 163298 67891, 163155 68661, 163020 68927, 162947 69645, 162932 71415, 163006 72070, 163026 73477, 163006 74626, 162948 75985, 162947 77375, 163017 78019, 163104 78214, 163019 78393, 162786 78576, 161741 79146, 161688 79078, 161497 78077, 161287 76360, 161202 75281, 161181 71581, 161241 69927, 161181 68912, 161017 68712, 160991 69604, 160937 69811, 160916 70415, 160922 71486, 160982 71819, 160986 74331, 160923 75237, 160939 76261, 161049 77177, 161287 78587, 161265 78653, 160531 77974, 160299 77727, 160294 77526, 160156 76513, 160114 76071, 160025 76062, 159981 76001, 159915 77227, 159881 77261, 159524 76957, 159343 76667, 159366 75117, 159373 64522, 159403 59944, 159401 53058, 159674 52592, 159683 52562, 160432 51767, 160466 53146, 160572 53708, 160673 53525, 160776 52482, 160780 51476, 161297 50952, 161398 50923, 161399 51253, 161321 52117, 161324 53239, 161404 53719, 161483 55159, 161492 57260, 161551 58141, 161663 58858, 161652 63799, 161687 64086, 161727 64286, 161772 64982, 161813 63976, 161814 60408, 161848 58850, 161829 57581, 161803 57104, 161831 55105, 161721 52902, 161641 51666, 161640 50666, 161749 50511, 162452 50745), (160731 67079, 160945 67838, 160798 68075, 161099 67883, 161284 67829, 161460 67367, 161438 67126, 161323 67029, 160731 67079), (160799 57670, 160769 59330, 160744 59973, 160430 61271, 160254 62109, 160525 61343, 160832 60585, 161064 59931, 161075 58087, 160985 57497, 160897 57292, 160799 57670)), ((101796 50689, 102016 50881, 102110 50861, 102227 51081, 102250 51302, 102310 51597, 102278 51705, 102294 51910, 102462 52246, 102667 52325, 102767 52542, 102794 52970, 102866 53008, 102894 52662, 103025 52734, 103381 53083, 103585 53360, 104291 54172, 104401 54281, 104738 54890, 104819 55437, 104869 62013, 104604 62289, 104617 63052, 104691 63188, 104845 63579, 104860 75043, 104644 75288, 104540 75382, 104159 75781, 103850 76029, 103870 73664, 103862 73624, 103724 75294, 103562 76213, 103612 76677, 103530 77248, 103643 77526, 103693 77833, 102869 78632, 102759 78693, 102633 76740, 102626 76158, 102556 75906, 102502 77579, 102514 78263, 102539 78320, 102582 78874, 102469 79042, 101166 78511, 100966 78269, 100410 77803, 100227 77629, 100078 77405, 100046 76995, 100022 77057, 99989 77316, 99807 77201, 99607 76929, 99596 73414, 99740 73330, 100007 73447, 100268 73636, 100360 73742, 100426 73703, 100376 73563, 100216 73420, 100122 73222, 100150 72921, 100356 73035, 100325 73090, 100415 73059, 100277 72822, 100351 72664, 100547 72591, 100487 72321, 100251 72132, 100064 71920, 99981 71733, 99832 71457, 99851 71177, 99624 70714, 99630 54991, 99591 52745, 99845 52421, 100110 52271, 100159 52373, 100200 52183, 100356 51945, 100778 51545, 100845 51507, 101167 51233, 101279 51504, 101360 54301, 101370 54324, 101479 51437, 101501 51353, 101540 50874, 101704 50678, 101796 50689), (100912 72272, 100918 73991, 100862 76374, 100884 77223, 100965 78168, 101067 77621, 101076 75333, 101061 75056, 101071 74674, 101029 72157, 100968 71853, 100912 72272), (103103 56686, 103153 58235, 103367 59568, 103424 60081, 103775 62533, 103906 63373, 104176 64896, 104452 67850, 104484 68318, 104484 69368, 104516 73810, 104541 69341, 104593 68528, 104529 67896, 104272 64951, 103825 62132, 103563 59916, 103496 59203, 103468 59042, 103379 57154, 103278 56300, 103182 56158, 103103 56686), (102442 58936, 102462 59136, 102518 60068, 102600 60767, 102689 61294, 102762 61389, 102759 60917, 102709 60250, 102610 59634, 102543 58258, 102500 58403, 102465 57485, 102442 58936), (102491 54840, 102476 56448, 102515 55948, 102517 54808, 102484 53925, 102491 54840)), ((133527 51475, 133644 51663, 133568 52293, 133531 53296, 133598 53567, 133661 53974, 133765 52972, 133788 52232, 133817 51841, 133951 51922, 134573 52569, 134650 52795, 134663 54998, 134661 56693, 134485 56745, 134556 57088, 134544 57739, 134461 57981, 134547 58197, 134649 58771, 134526 58974, 134516 59062, 134611 59264, 134570 59416, 134512 60000, 134528 60248, 134665 60689, 134638 67296, 134596 67378, 134586 69545, 134641 69531, 134663 74825, 134658 76472, 134406 76808, 134232 76879, 134199 76512, 134130 75350, 134045 74537, 133942 74609, 133893 74789, 133865 75253, 134112 76994, 133975 77198, 132763 78420, 132220 78936, 132121 78931, 132151 78318, 132137 77191, 132099 77138, 132017 77273, 131963 77600, 131960 78094, 131984 78959, 131859 79019, 131478 78343, 131082 78006, 130405 77247, 130263 77276, 130027 77232, 129593 76780, 129443 76518, 129433 71558, 129471 70680, 129448 68059, 129383 66476, 129408 58501, 129374 57960, 129507 57046, 129665 56145, 129512 55674, 129580 55535, 129549 54961, 129559 54617, 129488 54432, 129617 54033, 129425 53866, 129402 53590, 129426 52580, 130469 51523, 130500 51548, 130491 51976, 130440 52252, 130423 52802, 130479 53465, 130596 56710, 130586 65222, 130594 65650, 130580 65747, 130697 67533, 130870 69811, 130710 67424, 130661 65613, 130605 60590, 130616 56489, 130678 53333, 130678 52663, 130793 51908, 130872 51097, 130912 51060, 131387 51135, 132409 50418, 133527 51475), (132739 71982, 132714 74097, 132657 75584, 132707 77327, 132823 77552, 132921 77110, 132960 76039, 132947 74878, 132866 74092, 132864 73347, 132825 70941, 132739 71982), (132655 54911, 132565 55842, 132444 56463, 132269 57649, 132236 58879, 132181 59830, 132150 63573, 132151 64629, 132131 66866, 132158 70737, 132173 70855, 132192 70806, 132277 70862, 132308 68659, 132277 59192, 132430 57635, 132581 56700, 132679 56240, 132914 55803, 132951 54903, 133007 54684, 133006 54053, 132875 53825, 132655 54911)), ((127045 77163, 128036 77187, 128442 77166, 128791 77645, 128853 77810, 128976 77951, 129167 78222, 128709 78309, 127701 78340, 126649 78348, 120195 78327, 118505 78250, 117638 78320, 117250 78423, 115786 78613, 114508 78664, 111161 78648, 111141 78504, 111790 78413, 112536 78204, 112660 77815, 112750 77463, 112713 77429, 112787 77414, 112822 77162, 120240 77144, 127045 77163)), ((111127 77617, 111283 77985, 110861 78333, 110550 78223, 110820 77596, 111127 77617)), ((129325 77292, 129687 77663, 130049 78066, 129591 77874, 129572 77910, 129067 77867, 128799 77646, 128555 77205, 128599 77197, 128558 77163, 128989 77151, 129325 77292)), ((104336 76421, 104338 76517, 104620 76683, 104792 76678, 104808 76717, 104210 77346, 103992 77562, 103900 77620, 103920 77095, 103780 76982, 103901 76590, 103990 76425, 104100 76451, 104235 76321, 104336 76421)), ((111121 77512, 110897 77527, 111030 77344, 111359 77310, 111121 77512)), ((159007 57236, 158699 57558, 158728 57550, 158535 57779, 158620 57785, 159007 57456, 159007 60433, 154298 65175, 154297 65195, 149595 69888, 143105 76329, 142575 76869, 139852 76869, 140167 76574, 140214 76541, 141306 75196, 141160 75215, 141666 74420, 142499 73178, 143388 71910, 144353 70890, 144421 70790, 145693 69475, 146036 69143, 146354 68802, 147261 67786, 148583 66409, 151878 63106, 153522 61518, 154042 61088, 154385 60849, 155464 59621, 155571 59262, 155779 58894, 155672 58946, 155725 58805, 154626 60063, 154301 60456, 153509 61282, 153033 61753, 149346 65487, 147069 67725, 146053 68676, 144008 70756, 142888 71813, 141906 72916, 137986 76869, 135363 76869, 139299 72965, 156270 55984, 159007 53220, 159007 57236), (157749 60340, 157003 61140, 152686 65400, 151958 66004, 150404 67570, 149929 68174, 149631 68528, 149152 69140, 148757 69609, 145402 72965, 144539 73919, 145407 73173, 145711 72923, 148436 70246, 148952 69814, 149798 68972, 150680 67843, 150942 67524, 152057 66271, 156089 62214, 157037 61114, 157694 60461, 157746 60468, 157793 60363, 158179 59929, 158307 59629, 158314 59378, 158254 59336, 157749 60340)), ((159007 68227, 150364 76869, 145449 76869, 145864 76445, 146185 76178, 147207 74849, 147586 74399, 150258 71073, 151555 69393, 154436 66121, 154822 65701, 155363 65144, 159007 61482, 159007 68227), (149011 73896, 148476 74498, 148025 75087, 147704 75486, 147486 75817, 146739 76568, 147493 75825, 147575 75756, 148478 74755, 149026 74096, 149399 73603, 149422 73481, 149011 73896)), ((141584 74295, 140605 75643, 139735 76620, 139394 76869, 138080 76869, 138944 76030, 141571 73426, 142121 72945, 142628 72593, 142752 72550, 141584 74295)), ((159007 73008, 158363 73637, 157027 75000, 155519 76488, 155096 76869, 153187 76869, 153362 76677, 155077 74893, 159007 70892, 159007 73008)), ((159007 61478, 154822 65635, 154435 66032, 151552 69279, 151167 69750, 149191 72245, 147297 74507, 146735 75155, 146687 75234, 145224 76869, 143167 76869, 148103 71891, 148633 71725, 149391 70951, 149467 70774, 149749 70272, 158724 61283, 159007 61018, 159007 61478)), ((159007 76442, 158581 76869, 155380 76869, 158346 73859, 159007 73221, 159007 76442)), ((165383 61425, 165384 61466, 165949 62044, 166186 62393, 166422 62514, 166767 62778, 167008 62944, 167250 63407, 167521 63528, 167661 63723, 168251 64389, 168493 64610, 168807 64809, 169041 64976, 169398 65326, 175777 71745, 175793 71782, 178009 74011, 178034 73996, 181001 76869, 178459 76869, 177680 76108, 178359 76869, 173866 76869, 173022 76038, 171991 75126, 170759 73849, 169199 72288, 169199 72264, 165007 68048, 165007 66449, 165574 67014, 165007 66440, 165007 64056, 165421 64593, 166496 65717, 167314 66610, 174040 73405, 176478 75805, 176667 75840, 174865 73994, 166728 65904, 165459 64431, 165007 63856, 165007 61178, 165383 61425), (170847 72303, 171217 72664, 171294 72759, 172989 74284, 171223 72586, 166611 68054, 170847 72303)), ((172819 76869, 166942 76869, 165812 76043, 165007 75331, 165007 69056, 172819 76869)), ((166008 54094, 168719 56788, 170662 58752, 170806 59203, 170934 59529, 171086 59674, 171475 59772, 171934 60084, 171945 60084, 173282 61371, 175000 63120, 176147 64269, 178384 66476, 188706 76869, 186812 76869, 183571 73624, 182725 72749, 182245 72288, 182008 72119, 179866 70326, 178322 69106, 177945 68845, 174036 64983, 173950 64888, 171063 62032, 170999 61953, 169876 60902, 169667 60782, 168735 59794, 168647 59683, 168055 59118, 167569 58753, 167556 58831, 167676 59050, 168325 59741, 168487 59925, 168815 60225, 168878 60259, 169868 61068, 170392 61552, 171083 62144, 176457 67523, 178007 68990, 179361 70140, 180967 71459, 182392 72610, 186665 76869, 184541 76869, 183270 75621, 182406 74824, 177924 70363, 183389 75875, 183871 76392, 184287 76869, 181631 76869, 180370 75613, 180680 75504, 180540 75275, 180183 75128, 180232 74634, 180590 74758, 180996 74617, 181035 74123, 178926 71943, 176463 69467, 174007 67320, 173815 67177, 173103 66458, 171458 64917, 169959 63433, 165608 59084, 165007 58463, 165007 54136, 167404 56559, 168386 57569, 170986 60136, 171296 60430, 171667 61040, 171817 61208, 172252 61392, 175165 64380, 176789 66147, 177208 66731, 177658 67309, 178238 68168, 178390 68484, 178971 69150, 180162 70300, 180085 70151, 180656 70624, 180256 70162, 180368 70224, 178796 68509, 178372 67876, 178095 67362, 177357 66288, 176831 65726, 176582 65605, 176376 65411, 174131 63172, 172224 61310, 171795 61064, 171372 60445, 169064 58111, 165007 54091, 165007 53152, 166008 54094), (172904 65356, 176211 68647, 173728 66143, 173403 65793, 172947 65343, 172904 65356)), ((159007 70877, 155363 74511, 154996 74887, 154901 74964, 153177 76869, 151420 76869, 151609 76679, 152610 75561, 155331 72912, 159007 69256, 159007 70877)), ((165807 76115, 165808 76134, 166068 76346, 166091 76346, 166754 76869, 165734 76869, 165007 76144, 165007 75406, 165807 76115)), ((105269 69399, 106388 70400, 109036 73121, 112696 76797, 111071 76797, 107438 73153, 107062 72787, 106985 72691, 105081 70969, 105081 69212, 105269 69399)), ((99079 63346, 98316 64124, 99079 63445, 99079 67938, 98246 68784, 97336 69814, 96059 71046, 94498 72604, 94473 72605, 90255 76797, 88661 76797, 89225 76230, 88652 76797, 86266 76797, 86801 76383, 87925 75308, 88820 74490, 95614 67764, 98013 65326, 98048 65137, 96203 66939, 88112 75076, 86639 76345, 86064 76797, 83386 76797, 83633 76421, 83675 76420, 84253 75855, 84602 75618, 84722 75382, 84986 75037, 85152 74796, 85615 74556, 85736 74284, 85931 74143, 86597 73553, 86818 73312, 87017 72998, 87185 72764, 93953 66027, 93990 66011, 96219 63799, 96204 63774, 99079 60804, 99079 63346), (94795 70581, 90262 75193, 94513 70957, 94875 70587, 94969 70510, 96492 68815, 94795 70581)), ((108983 57089, 125964 74060, 128728 76797, 124712 76797, 124390 76489, 124398 76519, 124169 76325, 124168 76417, 124493 76797, 121515 76797, 116775 72091, 116756 72091, 112060 67388, 105633 60906, 105081 60365, 105081 57642, 105376 57961, 105409 58008, 106752 59098, 106734 58952, 107532 59458, 108770 60290, 110039 61178, 111060 62143, 111160 62212, 112475 63484, 112808 63828, 113148 64147, 114165 65052, 115542 66373, 118842 69670, 120431 71314, 120860 71834, 121099 72178, 122328 73254, 122686 73362, 123054 73571, 123002 73464, 123145 73516, 121885 72416, 121492 72091, 120666 71301, 120195 70825, 116461 67138, 114225 64862, 113510 64108, 113272 63845, 111229 61838, 110135 60679, 109033 59696, 105081 55776, 105081 53168, 108983 57089), (108777 63198, 109027 63503, 111054 65556, 111705 66227, 112135 66741, 112976 67590, 114107 68471, 114426 68733, 115678 69847, 119734 73879, 120835 74827, 121487 75486, 121480 75538, 121585 75585, 122020 75973, 122320 76101, 122570 76106, 122612 76047, 121607 75540, 120810 74793, 116549 70477, 115947 69749, 114379 68193, 113774 67720, 113421 67423, 112809 66942, 112341 66548, 108984 63192, 108029 62331, 108777 63198)), ((110058 65894, 110223 66423, 110997 67182, 111175 67258, 111678 67541, 120665 76514, 120931 76797, 120472 76797, 116315 72614, 115918 72228, 112669 69345, 112198 68959, 109705 66981, 107441 65090, 106794 64528, 106714 64480, 105081 63015, 105081 60959, 110058 65894)), ((105505 63655, 105772 63975, 107101 64999, 107551 65378, 110876 68048, 112555 69346, 115828 72228, 116249 72614, 116806 73155, 120468 76797, 113722 76797, 105081 68154, 105081 63241, 105505 63655), (106125 65283, 106194 65365, 107195 66268, 107853 66819, 108345 67191, 108467 67214, 108052 66805, 107451 66270, 106464 65496, 106133 65276, 105382 64530, 106125 65283)), ((95353 61995, 95445 62008, 94921 62659, 94607 63157, 94542 63427, 94967 63766, 95240 63663, 95024 63960, 95206 64062, 88370 70902, 88355 70902, 82456 76797, 80875 76797, 81524 76136, 87109 70576, 88784 69012, 89549 68149, 89842 67712, 91050 66245, 92178 65047, 94781 62462, 95465 61758, 95353 61995)), ((108091 76140, 108729 76797, 105506 76797, 105081 76371, 105081 73171, 108091 76140)), ((105271 71152, 107057 72867, 111056 76797, 108941 76797, 108311 76154, 106948 74820, 105462 73309, 105081 72886, 105081 70979, 105271 71152)), ((99079 76070, 98352 76797, 97616 76797, 98323 75997, 98342 75996, 98554 75736, 98554 75713, 99079 75050, 99079 76070)), ((99079 74862, 98251 75992, 97541 76797, 91266 76797, 99079 68985, 99079 74862)), ((99079 54992, 95832 58233, 94958 59079, 94496 59559, 94327 59796, 92535 61939, 91317 63482, 91053 63860, 87191 67768, 87096 67854, 84240 70743, 84161 70807, 83110 71928, 82992 72139, 82002 73070, 81891 73157, 81326 73751, 80961 74235, 81039 74249, 81258 74128, 81949 73479, 82134 73317, 82433 72989, 82467 72926, 83278 71936, 83762 71412, 84352 70722, 89975 65102, 91198 63799, 92348 62446, 93667 60840, 94818 59412, 99079 55139, 99079 57263, 97829 58534, 97034 59402, 92571 63881, 98085 58418, 98602 57936, 99079 57517, 99079 60173, 97821 61434, 97712 61124, 97484 61266, 97337 61625, 96844 61572, 96968 61214, 96826 60808, 96331 60770, 94152 62880, 91675 65341, 89528 67797, 89385 67989, 88665 68701, 87125 70346, 85641 71845, 81294 76196, 80671 76797, 76348 76797, 78768 74400, 79777 73419, 82348 70818, 82641 70508, 83250 70137, 83418 69987, 83600 69552, 86588 66639, 88357 65016, 88939 64597, 89517 64147, 90377 63567, 90667 63428, 91360 62833, 92511 61641, 92360 61719, 92834 61148, 92370 61550, 92432 61439, 90717 63008, 90085 63432, 89572 63709, 88500 64447, 87933 64976, 87815 65222, 87620 65429, 85380 67673, 83518 69580, 83274 70009, 82657 70432, 80319 72740, 76303 76797, 75361 76797, 76306 75796, 78998 73085, 80960 71142, 81411 70998, 81737 70870, 81884 70718, 81984 70329, 82293 69871, 82292 69859, 83579 68522, 85329 66803, 86477 65657, 88672 63434, 99079 53101, 99079 54992), (88351 68077, 88001 68401, 87551 68857, 87564 68900, 90855 65593, 88351 68077)), ((104002 76127, 104002 76290, 103884 76562, 103839 76173, 103879 76099, 104002 76127)), ((152188 53559, 151361 54420, 151088 54691, 150513 55191, 150043 55617, 149545 56151, 149398 56388, 149140 56649, 148942 56953, 148910 57058, 149157 56922, 149235 57026, 149006 57348, 148417 58330, 148282 58682, 147103 60081, 144521 62731, 144395 62914, 144437 62899, 144967 62418, 147745 59645, 148679 58545, 148816 58319, 149026 58103, 149782 56552, 149676 56573, 149900 56293, 151055 55031, 151131 54931, 151988 53986, 153102 52871, 156454 52871, 155753 53568, 155101 54387, 155002 54527, 154468 55081, 154336 55284, 152603 57066, 150692 58984, 146924 62705, 146337 63227, 145615 63810, 144714 64448, 143625 65485, 142453 66767, 141222 68001, 138946 70325, 138933 70480, 139209 70225, 143357 66120, 144310 65263, 145188 64457, 145296 64390, 146912 62992, 147511 62443, 147478 62498, 147764 62226, 150910 59020, 152185 57753, 153845 56245, 154562 55608, 155187 54889, 155653 54298, 156069 53722, 156363 53364, 156885 52871, 158610 52871, 158130 53394, 156040 55499, 153295 58224, 149355 62161, 135007 76442, 135007 72355, 135223 72139, 135399 71944, 136859 70486, 139335 68041, 140124 67197, 139456 67742, 138727 68443, 136800 70414, 135007 72212, 135007 70956, 135395 70530, 136035 70063, 137086 69239, 137420 68892, 137674 68728, 138715 67821, 140179 66634, 140490 66332, 141486 65452, 142109 64881, 142940 63980, 142871 63880, 142488 64198, 141616 65058, 140319 66376, 139411 67106, 137905 68251, 137578 68515, 137070 68821, 136227 69426, 136128 69508, 135501 69968, 135007 70443, 135007 69178, 135236 69000, 139093 65110, 140231 63986, 141048 63488, 141149 63643, 141296 63569, 141328 63751, 141675 63359, 141878 63288, 142215 62970, 142309 62701, 143000 61978, 142785 61419, 144452 59747, 147140 57099, 150382 53853, 151060 53116, 151311 52871, 152875 52871, 152188 53559)), ((167953 53896, 168022 53989, 168269 54257, 171991 57970, 174923 61108, 178821 65042, 184148 70341, 185808 72167, 187829 74618, 188152 74988, 187699 74376, 185961 72247, 184563 70646, 178809 64860, 175937 62005, 172882 58773, 172791 58661, 169199 55034, 168513 54319, 167670 53300, 167596 53191, 167331 52871, 169404 52871, 170607 54050, 170622 54079, 170886 54347, 172904 56585, 174192 58174, 175655 59740, 177254 61302, 177316 61339, 177216 61225, 175575 59554, 172988 56650, 172396 55926, 171149 54433, 170714 53958, 169616 52871, 172579 52871, 175352 55586, 181021 61292, 183806 64073, 183806 64086, 189007 69267, 189007 70455, 188933 70397, 188868 70529, 189007 70704, 189007 71781, 188396 71004, 188395 70980, 188089 70575, 187144 69257, 186670 68626, 185906 67681, 184719 66344, 182005 63656, 180806 62435, 180127 61864, 178227 59942, 175689 57403, 174376 56124, 174240 56032, 174313 56144, 176572 58446, 180099 61940, 180720 62665, 183136 65113, 183957 65836, 185093 67028, 185992 68053, 186314 68459, 187686 70266, 187921 70593, 188697 71598, 189007 72031, 189007 73984, 188753 73728, 188045 72892, 187404 72156, 186821 71533, 185696 70374, 183780 68428, 183291 68005, 182400 67120, 180299 65090, 180056 64977, 180738 65789, 184007 69112, 185539 70638, 186678 71734, 187215 72289, 188007 73156, 188827 74110, 189007 74294, 189007 76406, 165455 52871, 167049 52871, 167953 53896), (172685 55779, 172869 56006, 173281 56437, 174992 58079, 177365 60454, 179284 62420, 179613 62727, 182744 65744, 183867 66845, 183152 66114, 182455 65380, 182711 65574, 181552 64367, 180844 63671, 180464 63351, 177766 60732, 175042 58008, 173014 55940, 172545 55507, 172685 55779)), ((109809 53013, 110006 53189, 111464 54650, 113907 57125, 114751 57915, 114422 57520, 114207 57246, 113506 56518, 111536 54592, 109736 52797, 110993 52797, 111418 53185, 111886 53825, 112709 54877, 113057 55211, 113222 55464, 114128 56505, 115316 57971, 115618 58281, 116497 59276, 117067 59903, 117969 60730, 118069 60662, 117752 60280, 116892 59408, 115573 58111, 114842 57201, 113698 55699, 113435 55371, 113128 54860, 112524 54018, 111982 53293, 111505 52797, 112771 52797, 112948 53027, 116838 56885, 117962 58024, 118462 58838, 118307 58939, 118381 59086, 118199 59118, 118589 59465, 118661 59668, 118980 60006, 119249 60101, 119970 60790, 120529 60578, 122202 62245, 124851 64932, 128096 68172, 128832 68852, 129077 69096, 129077 70665, 128390 69978, 127531 69151, 127260 68878, 126331 67833, 125798 67335, 125562 67188, 125300 66930, 124996 66733, 124891 66700, 125027 66948, 124922 67026, 124600 66797, 123617 66206, 123266 66072, 121867 64893, 119217 62311, 119034 62186, 119049 62228, 119530 62757, 122305 65537, 123404 66469, 123630 66606, 123845 66816, 125395 67571, 125375 67466, 125655 67690, 126919 68845, 127019 68921, 127962 69781, 129077 70895, 129077 74244, 128381 73545, 127560 72893, 127422 72793, 126868 72258, 126666 72128, 124882 70393, 122964 68484, 119243 64714, 118721 64127, 118138 63406, 117500 62507, 116463 61418, 115182 60245, 113949 59015, 111623 56740, 111468 56723, 111724 56999, 115830 61148, 116685 62100, 117492 62978, 117560 63087, 118957 64702, 119505 65301, 119450 65268, 119722 65554, 122929 68701, 124195 69977, 126364 72372, 127060 72976, 127651 73442, 128224 73860, 128584 74153, 129077 74675, 129077 76402, 128554 75919, 126128 73509, 123726 71088, 119786 67144, 105506 52797, 109594 52797, 109809 53013)), ((92605 52871, 92737 52937, 92912 52797, 93990 52797, 93215 53410, 93190 53411, 92785 53716, 91466 54660, 90834 55134, 89889 55898, 88552 57087, 85864 59799, 84644 61000, 84072 61680, 82150 63579, 79611 66116, 78334 67428, 78242 67564, 78354 67491, 80655 65234, 84148 61708, 84874 61085, 87321 58668, 88044 57847, 89236 56711, 90264 55812, 90670 55491, 92476 54118, 92803 53883, 93806 53108, 94241 52797, 96195 52797, 95938 53051, 95100 53759, 94364 54400, 93742 54983, 92582 56108, 90637 58024, 90214 58513, 89329 59404, 87299 61505, 87186 61750, 88002 61064, 91321 57797, 92852 56258, 93942 55126, 94497 54589, 95364 53797, 96318 52977, 96503 52797, 98614 52797, 75079 76356, 75079 74755, 76104 73851, 76198 73783, 76465 73535, 80180 69813, 83316 66881, 87252 62983, 92549 57656, 94375 55997, 96828 53975, 97197 53655, 96584 54109, 94455 55843, 92854 57241, 87068 62995, 84213 65867, 80981 68922, 80870 69013, 77242 72605, 76527 73291, 75508 74135, 75399 74209, 75079 74476, 75079 72400, 76260 71197, 76288 71182, 76557 70918, 78793 68900, 80382 67612, 81948 66149, 83510 64552, 83547 64490, 83250 64764, 81762 66229, 78858 68816, 78135 69408, 76643 70655, 76167 71090, 75079 72188, 75079 69225, 77794 66452, 83500 60783, 86282 57997, 86295 57997, 91476 52797, 92663 52797, 92605 52871), (88322 58654, 87588 59349, 87782 59095, 86575 60255, 85879 60962, 85559 61340, 82940 64038, 80216 66764, 78926 68019, 78148 68790, 77715 69260, 77987 69119, 78215 68935, 78645 68523, 80287 66812, 82662 64439, 84628 62520, 87952 59062, 89053 57939, 88322 58654)), ((179518 74202, 179848 74539, 179618 74702, 178904 74118, 179518 74202)), ((179980 73638, 180254 74056, 179853 74533, 179542 74188, 179476 73622, 179980 73638)), ((165668 59316, 171228 64901, 172793 66576, 173653 67339, 174092 67633, 175559 68842, 176757 69970, 179342 72573, 180046 73257, 179809 73144, 179796 73235, 179145 72711, 178647 72397, 178377 72332, 178038 72757, 178141 73030, 177844 72814, 177742 72998, 170902 66161, 170902 66146, 165007 60246, 165007 58667, 165668 59316)), ((37951 71858, 41421 71918, 48916 71936, 51320 71988, 51441 72160, 51370 72954, 37902 72987, 31191 72983, 31191 71677, 37951 71858)), ((62510 65079, 63147 65094, 63581 65270, 63548 65301, 63613 65612, 63616 65836, 63568 65896, 63662 65937, 63858 65897, 63959 65752, 64183 65681, 64224 65584, 64389 65646, 64707 65664, 64873 65722, 64890 65860, 65055 65787, 65547 65881, 65887 66055, 66209 66013, 66297 65902, 66306 65769, 66452 65685, 66507 65580, 66754 65499, 66951 65369, 67534 65322, 67661 65346, 67909 65282, 68053 65200, 67740 65164, 67763 65085, 68386 65096, 69105 65095, 69105 70595, 59402 70598, 59465 70564, 59351 70342, 59383 70243, 59278 69993, 59177 69828, 59183 69492, 59607 69507, 62260 69504, 60562 69420, 59113 69226, 59113 68249, 59930 68170, 59113 68148, 59113 66598, 60926 66600, 62148 66558, 63955 66585, 66839 66569, 67225 66518, 66891 66439, 61888 66468, 59400 66415, 59113 66420, 59113 65062, 62510 65079)), ((177610 54049, 181840 58298, 182096 58509, 182309 58663, 182350 58648, 182109 58350, 179000 55243, 177757 53955, 176652 52871, 177659 52871, 178399 53580, 180968 56154, 181582 56848, 182946 58326, 183124 58555, 183816 59359, 185600 61106, 185744 61145, 186020 61385, 186106 61315, 186175 61592, 187931 63378, 189007 64611, 189007 66110, 188421 65518, 186980 63997, 186027 63129, 186067 63188, 185848 63165, 186602 63956, 186770 64196, 187311 64769, 188288 65738, 188601 65969, 188814 66158, 189007 66350, 189007 68540, 180856 60404, 176258 55838, 173962 53525, 173355 52871, 176274 52871, 177610 54049), (184438 61350, 184205 61884, 185074 62441, 185138 62077, 184822 61539, 184599 61345, 184438 61350), (175609 53091, 175595 53210, 177123 54779, 177660 55347, 178568 56684, 179096 57403, 178704 56708, 178363 56022, 178237 55798, 178273 55819, 177930 55188, 176288 53529, 175720 53091, 175609 53091)), ((146755 53712, 146040 54528, 143464 57118, 143375 57357, 146530 54280, 147124 53652, 147110 53652, 147858 52871, 149571 52871, 149245 53064, 149111 53059, 148909 53214, 148654 53357, 147991 54117, 147122 55225, 146821 55486, 146702 55636, 146683 55735, 146822 56041, 147130 56042, 147239 56242, 146853 56637, 146190 57351, 145292 58198, 143163 60326, 143012 60554, 141915 61604, 141643 61854, 135007 68488, 135007 67912, 138541 64332, 140685 62277, 141029 62199, 141194 62000, 141110 61952, 141006 62143, 140659 62174, 137723 64951, 135007 67637, 135007 65442, 135421 65113, 135925 64651, 136075 64471, 136007 64471, 135448 64875, 135422 64909, 135007 65217, 135007 63475, 135384 62991, 137408 60300, 137694 59978, 140737 56837, 143746 53835, 144014 53598, 143990 53598, 144846 52871, 147403 52871, 146755 53712), (141505 61323, 141273 61608, 141177 61782, 141189 61828, 140708 61597, 140277 61313, 139823 61698, 138919 62580, 137922 63654, 136807 64800, 137610 64014, 137913 63824, 138143 63610, 139203 62574, 139896 61853, 140343 61420, 141102 61962, 141173 61855, 141634 61473, 141645 61356, 141588 61284, 141505 61323), (139430 59635, 138920 60162, 137308 61772, 137876 61275, 139762 59447, 139430 59635), (143330 59530, 142925 59912, 142676 60382, 142281 60945, 141631 61487, 141634 61555, 141527 61694, 141999 61335, 142201 61251, 142623 60856, 142814 60571, 142872 60384, 143050 59914, 143334 59626, 143459 59458, 143330 59530), (142381 56638, 141444 57522, 141227 57738, 140877 58178, 140727 58451, 141018 59166, 140943 59228, 140097 58955, 140028 59039, 139900 59330, 140162 59019, 140644 59239, 140671 59208, 140990 59344, 141211 59030, 141081 58769, 140785 58464, 141259 58054, 141300 58007, 141577 57865, 141562 57674, 141812 57413, 142066 57484, 141957 57245, 142364 56820, 142688 56421, 142381 56638)), ((87726 53383, 86205 54824, 85338 55780, 85397 55741, 85373 55957, 86166 55202, 86403 55035, 86977 54493, 87947 53516, 88177 53203, 88366 52990, 88558 52797, 90752 52797, 83488 60070, 78047 65544, 75733 67843, 75079 68449, 75079 65530, 76259 64194, 80508 59964, 80719 59708, 80871 59497, 80857 59457, 80558 59698, 77451 62805, 76163 64047, 75079 65154, 75079 64145, 75788 63405, 78363 60836, 79059 60222, 80536 58858, 80763 58680, 81567 57988, 83314 56204, 83353 56060, 83594 55784, 83523 55698, 83800 55629, 85588 53873, 86819 52797, 88324 52797, 87726 53383), (78916 63100, 78230 63441, 78006 63567, 78027 63531, 77396 63876, 75739 65516, 75300 66083, 75300 66195, 75419 66208, 76987 64681, 77556 64144, 78892 63236, 79611 62708, 78916 63100), (83748 56982, 83554 57205, 83561 57366, 84092 57599, 84649 56730, 84286 56668, 83748 56982)), ((128633 66857, 128614 67120, 128871 67446, 129077 67685, 129077 68432, 128008 67398, 128175 67164, 128479 66700, 128633 66857)), ((117618 56333, 119673 58477, 119749 58822, 119948 58984, 119997 58902, 119805 58799, 119776 58450, 116999 55515, 114312 52797, 116506 52797, 116835 53211, 117300 53715, 117478 53865, 117479 53797, 117075 53238, 117040 53212, 116731 52797, 118473 52797, 118959 53175, 121648 55200, 121971 55485, 125111 58527, 128113 61538, 128350 61806, 128350 61782, 129077 62639, 129077 65193, 128237 64545, 127422 63830, 124830 61254, 124589 61164, 127668 64322, 128296 64916, 128296 64901, 129077 65649, 129077 67363, 128884 67036, 128890 66904, 128736 66700, 128594 66447, 127945 65881, 127929 65858, 126726 64916, 126462 64615, 126312 64495, 126214 64476, 125909 64612, 125907 64922, 125708 65030, 125313 64643, 124597 63980, 123750 63081, 121624 60956, 121394 60804, 120344 59709, 120099 59438, 113462 52797, 114038 52797, 117618 56333), (120446 59578, 120614 59789, 120698 59992, 121093 60415, 121378 60605, 121566 60662, 122034 60842, 122322 61127, 122490 61250, 122418 61122, 122036 60717, 121568 60466, 121005 60073, 120464 59424, 120395 59425, 120256 59317, 120446 59578), (122929 57954, 122709 58434, 122740 58461, 122605 58780, 122918 59004, 123180 58873, 123484 58577, 123748 58890, 123943 59092, 124084 59368, 124276 59354, 124538 59603, 124466 59856, 124704 59748, 125130 60156, 125528 60478, 125312 60172, 124428 59234, 124212 59017, 123771 58668, 123497 58519, 122782 58810, 122720 58734, 122993 57889, 122909 57820, 122618 57690, 122929 57954), (117936 55402, 118124 55703, 119376 56993, 120095 57686, 120528 58133, 119987 58895, 120095 58966, 120477 59424, 120592 59435, 120664 59378, 120625 59296, 120204 58953, 120123 58980, 120353 58499, 120635 58067, 120252 57613, 119370 56709, 118296 55713, 117150 54599, 117936 55402), (120673 55668, 122501 57552, 122313 57220, 121786 56710, 120177 55098, 120673 55668)), ((187250 61669, 187365 61970, 187941 62645, 188417 63085, 189007 63685, 189007 64405, 188330 63662, 186222 61571, 186351 61122, 186385 61116, 186666 60885, 187250 61669)), ((84605 53694, 83968 54251, 83135 54953, 82835 55178, 81954 55968, 81881 56085, 80871 57091, 78916 59102, 77067 60961, 76980 61082, 77099 61017, 78561 59538, 81877 56246, 81920 56107, 82236 55758, 81980 56115, 82239 56277, 82267 56198, 82960 55799, 83234 56143, 82527 56761, 81783 57500, 80775 58391, 79550 59345, 78565 60284, 77334 61520, 76649 62307, 76070 62888, 75079 63859, 75079 61373, 78843 57522, 81560 54854, 83073 53341, 83662 52797, 85536 52797, 84605 53694)), ((184284 56635, 186953 59352, 188466 60865, 189007 61450, 189007 63326, 188110 62397, 187553 61760, 186851 60925, 186627 60625, 185836 59746, 185719 59673, 184714 58663, 182703 56708, 180843 54855, 180722 54769, 180788 54887, 182267 56353, 185558 59668, 185697 59711, 186057 60036, 185689 59770, 185530 60030, 185610 60059, 186005 60752, 185661 61026, 185043 60318, 184306 59573, 183415 58567, 182459 57342, 181520 56354, 180284 55125, 179497 54441, 178911 53862, 177938 52871, 180433 52871, 184284 56635)), ((144547 53041, 143718 53780, 142039 55450, 140716 56832, 139958 57520, 137808 59682, 137316 60218, 136579 61094, 136172 61663, 136172 61688, 135188 63070, 135007 63256, 135007 61167, 139533 56627, 143297 52871, 144750 52871, 144547 53041)), ((96910 62186, 96326 62900, 96412 62286, 96749 61956, 96910 62186)), ((125321 57323, 129077 61088, 129077 62540, 128907 62338, 128168 61511, 126499 59829, 125116 58506, 124429 57749, 122266 55600, 121730 55107, 120854 54369, 120285 53962, 120260 53962, 118880 52980, 118693 52797, 120782 52797, 125321 57323)), ((96743 61951, 96398 62262, 95832 62328, 95846 61824, 96266 61554, 96743 61951)), ((185247 53945, 185581 54313, 187922 57028, 188154 57258, 189007 58165, 189007 60670, 188765 60405, 185386 57071, 181232 52871, 184195 52871, 185247 53945), (184785 54523, 185180 54972, 185862 55647, 186138 55852, 186144 55798, 185742 55343, 185063 54672, 184807 54465, 184785 54523)), ((82617 53039, 79279 56418, 75079 60571, 75079 57609, 76153 56557, 76521 56223, 79237 53882, 79466 53650, 80373 52797, 82881 52797, 82617 53039), (77551 56063, 76880 56742, 76673 56997, 76731 57019, 77180 56624, 77855 55942, 78060 55667, 78006 55660, 77551 56063)), ((105920 56736, 108524 59361, 109004 59910, 109354 60418, 109398 60543, 107657 59376, 106306 58395, 105330 57525, 105081 57184, 105081 55870, 105920 56736)), ((141086 54414, 138711 56817, 135831 59664, 135007 60510, 135007 60116, 136109 59069, 137644 57533, 138814 56466, 139728 55507, 139949 55180, 140052 55103, 140120 54953, 139775 55121, 137726 57186, 137432 57589, 136918 58117, 135007 60014, 135007 58697, 136543 57130, 135762 57906, 135077 58560, 135007 58570, 135007 56543, 136073 55475, 138903 52871, 142627 52871, 141086 54414)), ((122880 53901, 124415 55436, 125484 56606, 126442 57517, 126771 57739, 126849 57842, 126999 57910, 126827 57568, 124761 55516, 124359 55223, 123831 54711, 121938 52797, 123251 52797, 124820 54334, 124044 53554, 123388 52867, 123379 52797, 125406 52797, 126473 53863, 129077 56697, 129077 60417, 127538 58880, 125132 56501, 122317 53657, 121439 52797, 121833 52797, 122880 53901)), ((186313 53101, 186381 53180, 186893 53644, 186937 53773, 187298 54289, 187286 54632, 187033 54602, 186983 54730, 186521 54641, 186370 54745, 186800 55441, 187130 55377, 187419 55062, 187546 54796, 187594 54514, 187801 54811, 189007 56006, 189007 58050, 188155 57189, 188055 57054, 187813 56776, 186703 55393, 186336 54757, 186150 54750, 184935 53377, 184466 52871, 186046 52871, 186313 53101)), ((79398 53649, 79262 53750, 78984 53991, 77604 55101, 76965 55468, 76958 55654, 75585 56872, 75079 57341, 75079 55758, 75311 55491, 75390 55423, 75852 54911, 75981 54867, 76499 54506, 76840 54518, 76810 54771, 76938 54821, 76849 55285, 76953 55435, 77652 55004, 77587 54674, 77272 54385, 77005 54258, 76725 54210, 77021 54003, 78214 52797, 80258 52797, 79398 53649)), ((127878 52948, 128221 53202, 128626 53549, 128316 53024, 128095 52797, 128646 52797, 129077 53222, 129077 56663, 126841 54172, 126615 53910, 125978 53085, 125716 52797, 127721 52797, 127878 52948)), ((136120 55333, 135295 55971, 135007 56234, 135007 54227, 135157 54071, 135412 53728, 135759 53324, 135231 53632, 135007 53853, 135016 53294, 135432 52871, 138870 52871, 136120 55333)), ((189007 53607, 189007 55778, 187953 54656, 187710 54458, 187531 54250, 187362 54011, 187000 53674, 186884 53619, 186210 52871, 188280 52871, 189007 53607)), ((76864 53851, 76668 54094, 76462 54273, 76220 54442, 75882 54804, 75827 54920, 75079 55594, 75079 53527, 75815 52797, 77987 52797, 76864 53851)), ((85870 53476, 83779 55583, 83330 55455, 83324 55421, 83093 55140, 83877 54554, 84179 54439, 84854 53863, 85293 53387, 85893 52797, 86613 52797, 85870 53476)), ((41362 51603, 44970 51632, 50644 51757, 51461 51798, 51461 54959, 31191 54979, 31191 53519, 34314 53534, 35148 53617, 34903 53497, 35351 53430, 33974 53235, 31191 53222, 31191 52634, 32475 52554, 32391 52545, 48553 52549, 49282 52519, 48721 52477, 31605 52431, 31191 52437, 31191 51613, 36010 51597, 41362 51603)), ((149605 53940, 149372 53774, 148908 53471, 149067 53315, 149330 53335, 149656 53078, 149894 52871, 150632 52871, 149605 53940)), ((151049 48205, 151509 48242, 154740 48581, 154801 48576, 156809 48682, 159295 48751, 161732 48700, 161583 48755, 161690 49948, 161471 50080, 160866 49988, 160817 49972, 160158 49933, 157516 49889, 157546 49917, 158531 50023, 158771 50021, 160084 50053, 160964 50120, 161312 50180, 161038 50354, 160373 51025, 160234 51081, 159784 51074, 158903 50955, 157379 50722, 157085 50640, 156464 50507, 156186 50372, 155381 50206, 154704 50172, 154610 50141, 154300 50134, 153236 50290, 152354 50360, 149370 50372, 149176 50487, 152687 50544, 153549 50512, 154782 50527, 155548 50608, 155756 50652, 156907 50853, 158400 51070, 159607 51296, 160022 51346, 159931 51471, 159382 51921, 158611 52197, 157966 52308, 157800 52249, 157099 52278, 156670 52311, 156350 52210, 155907 52090, 155472 51922, 154994 51819, 154613 51762, 154311 51626, 154295 51517, 153968 51409, 153061 51489, 152054 51649, 151737 51612, 151584 51667, 151359 52036, 151441 52258, 151314 52478, 150872 52486, 150236 52522, 149406 52486, 147343 52486, 147152 52543, 146249 52521, 146206 52495, 137251 52485, 136707 52453, 136419 52500, 136017 52490, 135730 52354, 135823 52307, 136148 52292, 136038 52152, 136198 52060, 142993 52041, 145134 52106, 145369 52301, 145544 52274, 145515 52170, 145379 52233, 145162 52004, 142246 51889, 136460 51885, 136111 51866, 135701 51684, 135499 51367, 135724 51206, 136658 51185, 138129 51120, 135683 51110, 135356 51015, 135026 50987, 134135 50492, 133869 50315, 133604 50287, 133898 50578, 134092 50847, 134100 50970, 134061 51046, 133896 51052, 133488 50986, 133055 50738, 132133 49845, 132089 49730, 132317 49594, 132554 49538, 132487 49335, 132762 49271, 132943 49166, 135556 49156, 138149 49126, 138487 49095, 138515 49083, 140253 48921, 140659 48895, 140973 48849, 141688 48777, 144334 48297, 144682 48268, 147939 48200, 151049 48205), (147077 52166, 146761 52236, 146593 52289, 146010 52213, 145921 52304, 146281 52371, 146428 52460, 146825 52481, 147053 52416, 147179 52316, 147499 52111, 147813 52107, 147979 52072, 147875 52028, 147431 52009, 147077 52166), (142770 51092, 141211 51120, 142343 51134, 142612 51213, 142960 51230, 144059 51243, 144792 51228, 145281 51239, 145515 52171, 145597 52146, 146014 52204, 146084 52108, 146089 51979, 145990 51935, 145632 52004, 145603 52105, 145427 51619, 145288 51107, 144833 51054, 143851 51040, 142770 51092), (137547 49874, 139210 50134, 140251 50342, 140828 50372, 141012 50351, 140954 50299, 139596 50060, 138056 49849, 137547 49874), (146352 49272, 146066 49406, 146444 49363, 146578 49862, 146612 49860, 146723 50187, 146807 50057, 146759 50049, 146445 49260, 146352 49272), (147739 49201, 147320 49265, 147080 49353, 146898 49905, 147087 49592, 147124 49437, 147647 49460, 147909 49554, 148004 49401, 148290 49392, 148418 49639, 148445 49928, 148434 49626, 148557 49441, 148948 49362, 149352 49306, 149038 49240, 148072 49201, 147739 49201), (144663 49291, 143187 49352, 146064 49406, 145685 49268, 144663 49291)), ((154072 51890, 155300 52140, 155999 52339, 155730 52422, 154886 52479, 153571 52528, 153891 51698, 154059 51695, 154072 51890)), ((191898 47272, 192121 47381, 192107 48385, 192233 48507, 191108 48420, 189084 48311, 188896 48292, 188333 48275, 183367 48281, 180143 48130, 176075 48101, 170466 48120, 169006 48023, 164040 47578, 165432 47773, 170003 48214, 176215 48234, 179161 48226, 182419 48346, 182557 48366, 187074 48394, 187986 48417, 189586 48566, 190813 48651, 191483 48665, 192157 48644, 191918 48761, 191953 48782, 191959 49076, 191728 50115, 191531 50195, 191278 50115, 190341 50028, 188895 50055, 188718 50122, 186794 50139, 184401 49976, 182997 49788, 182676 49753, 180851 49679, 178984 49705, 178906 49731, 179079 49746, 181043 49768, 184248 49999, 185521 50176, 186463 50292, 186775 50311, 189227 50311, 189861 50393, 190596 50389, 191190 50445, 191177 50491, 190044 51540, 189572 52014, 189356 52200, 189002 52481, 166806 52510, 165108 52461, 164415 51830, 164400 51717, 165953 51686, 166716 51697, 167377 51687, 167730 51617, 167602 51507, 165314 51472, 164950 51486, 164222 51548, 164024 51457, 162923 50403, 163407 50410, 164097 50374, 164825 50449, 167159 50765, 167790 50869, 169179 51141, 169858 51259, 170829 51390, 172142 51505, 175100 51482, 176350 51495, 177008 51420, 179019 51434, 181764 51434, 183144 51411, 183999 51380, 183204 51343, 177287 51262, 176731 51271, 176544 51240, 173638 51239, 172843 51310, 171571 51267, 170487 51174, 170034 51109, 168144 50795, 167762 50721, 165394 50376, 164531 50259, 164292 50168, 163653 50079, 162537 50048, 162413 50011, 162378 49848, 162398 49148, 162218 49051, 163254 49039, 164912 49050, 167015 49190, 167709 49220, 168879 49248, 171190 49269, 171721 49223, 172718 49216, 175101 49164, 175304 49066, 174599 48948, 170822 48928, 169133 48932, 167819 48965, 167077 48951, 165546 48897, 164798 48836, 164386 48773, 162857 48740, 162111 48831, 162265 48733, 162312 48368, 162165 47348, 162515 47241, 191898 47272), (182189 50413, 179290 50412, 177163 50381, 175281 50440, 173358 50478, 171638 50498, 172806 50513, 173665 50544, 173412 50584, 174789 50618, 175597 50610, 175981 50572, 178953 50513, 182104 50514, 183514 50538, 184409 50540, 184949 50512, 184725 50388, 184050 50368, 182189 50413)), ((159232 52189, 158997 52421, 158573 52475, 158182 52496, 158197 52371, 158652 52236, 159242 52028, 159232 52189)), ((92995 50946, 93017 51091, 92367 51182, 91624 51390, 91499 51780, 91408 52133, 91446 52167, 91371 52182, 91335 52436, 83921 52450, 77113 52431, 76121 52407, 75716 52429, 75369 51951, 75305 51785, 75182 51644, 74991 51375, 75448 51289, 76455 51257, 77507 51250, 83963 51269, 85653 51346, 86517 51274, 86906 51172, 88372 50981, 89649 50933, 92995 50946)), ((74567 51723, 74586 51687, 75091 51727, 75361 51950, 75603 52389, 75559 52397, 75600 52431, 75169 52443, 74836 52307, 74469 51932, 74109 51529, 74567 51723)), ((105392 47155, 117427 47165, 122004 47193, 131981 47194, 131945 47468, 131972 47478, 131991 48234, 131181 48265, 130995 48263, 130404 48367, 130620 48467, 131431 48576, 131827 48584, 132056 49015, 132055 49099, 131976 49222, 131043 49112, 130053 49114, 129353 49194, 127101 49263, 126981 49276, 124690 49282, 123806 49340, 123091 49453, 118149 49442, 117862 49477, 117664 49517, 116968 49562, 117974 49603, 121542 49604, 123100 49638, 124368 49619, 124847 49594, 126847 49624, 129122 49511, 129247 49498, 130757 49436, 131993 49435, 131965 49545, 131426 50248, 131167 50567, 130292 51362, 130235 51349, 129281 51427, 129189 51423, 128958 51523, 129343 51620, 129609 51653, 129739 51788, 129295 52237, 129010 52437, 127898 52439, 121408 52398, 116148 52439, 112039 52438, 110010 52396, 106400 52437, 105291 52390, 105051 52280, 103669 51047, 103603 50918, 104238 51026, 106575 51046, 107209 50968, 108916 50947, 110519 51007, 112443 51049, 113132 51110, 113972 51207, 114446 51392, 114676 51405, 115173 51329, 115275 51295, 116404 51299, 118962 51258, 120492 51253, 120631 51223, 120532 51179, 119000 51191, 115354 51171, 115260 51239, 115134 50874, 115071 50917, 114518 50728, 114509 50315, 115126 50344, 115162 50320, 115995 50326, 117095 50411, 118316 50607, 119388 50642, 120768 50640, 121613 50567, 122330 50564, 123846 50635, 125744 50644, 127234 50569, 127209 50421, 126627 50369, 125829 50376, 125162 50329, 123287 50385, 119850 50380, 119125 50322, 117523 50242, 117287 50204, 116389 50113, 114354 50137, 114299 50185, 114053 50225, 113827 50199, 113751 50149, 112802 50153, 111687 50186, 110186 50056, 109817 50038, 108275 49832, 106758 49789, 106246 49874, 106716 49976, 107528 50013, 108267 50107, 108894 50136, 109838 50205, 111257 50278, 113745 50267, 114013 50677, 114002 50715, 114057 51092, 113288 50947, 113022 50814, 112303 50737, 110534 50723, 109879 50796, 108471 50818, 107325 50796, 105961 50739, 104443 50737, 103768 50805, 103575 50896, 103361 50809, 103148 50577, 102464 49533, 102521 49480, 103627 49289, 105500 49076, 106635 48994, 110367 48972, 112023 49035, 113035 48974, 113236 48807, 112345 48781, 112138 48727, 111533 48708, 110461 48714, 110129 48774, 107619 48779, 106706 48713, 105360 48729, 105056 48803, 104736 48843, 103282 49078, 103162 49055, 103608 48325, 103611 48113, 104743 47905, 104534 47771, 102306 47706, 102219 47663, 102134 48401, 102205 48600, 102098 48551, 101581 48593, 95401 48581, 94432 48570, 93896 48584, 93682 48638, 91619 48894, 90461 49089, 90125 49136, 89783 49216, 81967 49267, 81882 49254, 80609 49302, 80381 49378, 79216 49335, 79187 49316, 78490 49333, 77969 49428, 77962 49498, 78118 49571, 78865 49602, 79077 49619, 79491 49596, 79563 49574, 79926 49524, 80646 49444, 81267 49412, 82027 49342, 88522 49340, 89923 49284, 91285 49137, 92909 48921, 94233 48720, 102189 48712, 102033 48818, 102093 49457, 101994 49740, 101452 50303, 101216 50428, 100425 50350, 99609 50309, 98186 50279, 96585 50292, 95649 50340, 89688 50356, 85995 50335, 85524 50314, 84886 50319, 84878 50368, 89686 50358, 96884 50395, 97798 50436, 99207 50547, 100033 50527, 101194 50445, 101061 50620, 99262 52173, 99007 52404, 94053 52395, 94299 52009, 94206 51969, 93723 52192, 93706 51802, 94279 51520, 94412 51369, 94646 50857, 94360 50814, 94199 50829, 91913 50778, 89253 50768, 86684 50998, 86494 51038, 85728 51033, 84045 51105, 82325 51118, 77432 51121, 75485 51076, 75186 51009, 74930 50594, 74453 50102, 74346 49870, 74051 49537, 73973 49569, 73722 49574, 73680 49546, 73175 49593, 72940 49657, 72666 49837, 72738 49454, 73042 49221, 73566 48606, 73763 48407, 73984 48264, 74086 48083, 74322 47917, 78704 47956, 81331 47935, 81715 47919, 82151 48090, 82326 48105, 82710 47922, 83241 47940, 85790 47980, 87568 48086, 88088 48205, 88646 48298, 89455 48505, 89729 48626, 90431 48688, 91712 48658, 91572 48605, 92157 48532, 91629 48486, 91709 48450, 89910 48343, 89317 48188, 88870 48015, 87904 47767, 87344 47739, 87134 47842, 84587 47845, 82655 47874, 82268 48009, 81792 47865, 79432 47848, 77439 47853, 74361 47877, 74448 47729, 74879 47278, 75048 47197, 80890 47147, 81073 47370, 81232 47516, 81385 47511, 81717 47298, 82144 47188, 83507 47146, 85173 47167, 86272 47168, 88441 47149, 99647 47208, 102228 47205, 102269 47246, 102449 47133, 105392 47155), (114110 48735, 113873 48588, 114065 48889, 114121 49076, 114583 49252, 114824 49232, 114921 49116, 114871 48524, 114110 48735), (120605 48315, 121404 48640, 122019 48853, 123863 48869, 124451 48779, 124658 48687, 124278 48590, 122619 48561, 121977 48536, 120677 48220, 119841 48044, 120605 48315)), ((93126 52250, 92797 52284, 93035 52083, 93259 52068, 93126 52250)), ((93607 51371, 93336 52000, 93028 51979, 92874 51610, 93297 51263, 93607 51371)), ((51461 49486, 51461 50723, 50634 50731, 51461 50734, 51461 51674, 50563 51620, 46517 51435, 43948 51387, 40815 51417, 33014 51458, 31191 51444, 31191 49484, 51461 49486)), ((134408 51334, 134628 51483, 134788 51629, 134501 51638, 134228 51627, 134211 51539, 134060 51372, 134200 51294, 134408 51334)), ((138713 47251, 138475 47456, 137963 48114, 137988 48328, 138093 48422, 138471 48422, 138420 48547, 138574 48622, 138878 48465, 139200 48539, 139460 48543, 139712 48586, 139986 48468, 140055 48630, 140236 48692, 140170 48877, 138439 49042, 138118 49065, 135607 49144, 132901 49111, 132576 49034, 132297 48953, 132212 48784, 132366 48667, 132747 48594, 132823 48360, 132544 48219, 135087 48221, 135754 48102, 135392 48022, 133270 48003, 132386 48010, 132178 47981, 132169 47794, 132370 47584, 132517 47473, 132593 47270, 133152 47195, 138713 47251), (133086 47631, 133167 47684, 133386 47643, 133473 47552, 133443 47499, 133034 47498, 133086 47631)), ((35792 48667, 36397 48725, 38847 48856, 38447 48902, 37214 48990, 35497 49036, 34203 49016, 32537 49048, 31191 49044, 31191 48382, 35792 48667)), ((33077 47044, 34889 47199, 46662 47563, 49626 47665, 50322 47748, 50554 47796, 51223 47789, 51301 47940, 50952 48441, 51397 48714, 51364 48835, 51168 48976, 48223 49014, 47670 48878, 48396 48790, 46960 48848, 45422 48785, 40522 48839, 36730 48637, 34307 48419, 31910 48266, 31191 48163, 31191 46949, 33077 47044)), ((142440 47210, 145614 47210, 154116 47260, 157083 47254, 161630 47207, 161824 47320, 161842 47902, 161871 48158, 161779 48503, 161043 48451, 159306 48453, 159087 48520, 154868 48543, 151700 48194, 151048 48133, 150723 48138, 148758 48118, 147910 48143, 147460 48112, 144928 48130, 144361 48163, 143508 48260, 141544 48674, 140713 48803, 140638 48716, 140273 48688, 140759 48515, 141078 48177, 141292 47878, 141306 47765, 141640 47461, 141735 47299, 142270 47178, 142440 47210)), ((171926 41086, 174281 41112, 174335 41156, 174403 41928, 174409 42217, 174277 42312, 173213 42240, 172696 42190, 171239 42144, 169425 42259, 168182 42267, 164306 42355, 169841 42415, 171069 42417, 172770 42537, 173497 42508, 174142 42536, 174387 42641, 174381 45396, 174282 45486, 174150 45535, 172538 45451, 169896 45380, 169141 45462, 169258 45543, 171401 45649, 173378 45670, 174252 45695, 174410 45845, 174309 46500, 173969 46592, 173646 46598, 167947 46562, 163910 46559, 163422 46446, 163169 46443, 162591 46486, 161025 46475, 160296 46400, 159769 46487, 158929 46552, 158494 46559, 157627 46437, 157129 46510, 156733 46506, 154994 46450, 154603 46461, 153882 46557, 153155 46578, 152339 46563, 130010 46585, 120641 46560, 116929 46607, 112696 46559, 112487 46436, 112464 46261, 112684 46117, 113349 46095, 116755 46023, 118310 45942, 118573 45905, 119233 45840, 118803 45772, 117550 45767, 112688 46034, 112482 45871, 112505 44623, 112456 44136, 112711 43965, 113667 43976, 116349 43931, 116702 43845, 115511 43807, 112763 43792, 112519 43674, 112869 43373, 112850 42871, 112877 42773, 112967 42237, 112701 42142, 112726 41984, 112484 41699, 112468 41310, 112544 41191, 112743 41123, 125412 41113, 127569 41151, 139744 41110, 159082 41129, 160266 41095, 161412 41115, 162340 41154, 163156 41166, 164740 41297, 165304 41295, 166156 41236, 166418 41308, 167713 41314, 168799 41252, 169366 41183, 170158 41304, 170819 41048, 171926 41086), (160948 44410, 161902 44494, 163882 44742, 165666 44807, 166113 44852, 167057 44875, 167247 44831, 167134 44719, 162498 44396, 161242 44292, 158568 44174, 160948 44410), (115540 44571, 114975 44668, 116024 44730, 117518 44756, 119210 44749, 122202 44650, 124302 44629, 122324 44610, 118712 44532, 115540 44571), (131247 44042, 135006 44098, 146494 44096, 151655 44086, 147210 44079, 148154 44008, 144387 43988, 136519 43987, 131247 44042), (140933 42350, 139126 42416, 142091 42406, 145766 42368, 141807 42343, 140933 42350)), ((107932 35347, 109743 35341, 109924 35295, 139376 35295, 139360 35427, 139491 35675, 139616 35842, 139607 36176, 139083 36161, 135802 36164, 137901 36250, 139571 36430, 140622 36385, 142593 36356, 143286 36308, 143354 36356, 143361 37203, 143242 37293, 139777 37413, 138686 37497, 140555 37538, 141775 37529, 141916 37507, 143266 37461, 143423 37512, 143379 38960, 143274 39151, 143406 39701, 143432 39935, 143203 40118, 143011 40126, 143200 40138, 143371 40361, 143358 40481, 143209 40594, 141553 40611, 135492 40589, 134704 40575, 134170 40398, 134211 40367, 134130 40056, 134126 39832, 134185 39772, 134069 39731, 133827 39772, 133702 39918, 133423 39989, 133372 40084, 133168 40023, 132777 40005, 132569 39947, 132548 39808, 132344 39883, 131736 39789, 131315 39613, 130905 39655, 130792 39766, 130775 39899, 130587 39983, 130518 40088, 130202 40169, 129951 40299, 129204 40346, 129041 40322, 128727 40386, 128544 40469, 128939 40504, 128908 40583, 128209 40575, 85022 40567, 84816 40420, 84777 40269, 85021 40002, 85125 39995, 85021 39990, 84758 39790, 84799 39282, 84922 38911, 85218 38885, 85773 38816, 87708 38820, 90026 38741, 85944 38664, 85574 38597, 84952 38560, 84873 38380, 85078 38252, 85826 38030, 85941 37960, 86207 37863, 86526 37811, 87040 37747, 87303 37780, 87712 37759, 87989 37607, 87975 37386, 88172 37292, 88823 37240, 88794 37183, 88195 37162, 87946 37021, 88206 36589, 88365 36441, 88963 35534, 89144 35448, 89372 35295, 107830 35295, 107932 35347), (135939 39114, 133697 39084, 130096 39099, 129614 39150, 130029 39229, 136260 39203, 139341 39252, 141002 39230, 142204 39153, 141150 39073, 137451 39069, 135939 39114), (105784 37299, 104654 37341, 103335 37454, 101848 37502, 102328 37568, 104017 37521, 105601 37434, 106460 37358, 106603 37296, 105784 37299), (113920 35767, 108358 36171, 102831 36486, 102050 36522, 97340 36654, 95719 36746, 95685 36837, 96866 36884, 99117 36830, 103364 36582, 109963 36123, 113872 35800, 122305 35452, 122755 35451, 122324 35449, 113920 35767)), ((206000 36515, 205872 36674, 206002 36783, 205990 38102, 205956 38164, 204385 38359, 203970 38395, 200934 38594, 198367 38680, 196289 38697, 193540 38700, 189908 38681, 186512 38625, 184500 38702, 184637 38729, 184389 38851, 186082 38916, 186430 38948, 190106 38937, 191082 38891, 196644 38882, 199168 38945, 201268 38930, 203252 38802, 205407 38611, 205517 38587, 205832 38570, 206070 38599, 205995 39612, 202862 39809, 202926 39827, 202880 39935, 205820 40000, 206027 40044, 206111 40294, 206109 40462, 205799 40587, 201358 40554, 175322 40543, 162606 40568, 152823 40561, 144643 40570, 144171 40289, 144070 39814, 144032 39448, 147479 39440, 149058 39325, 148458 39231, 146755 39140, 144130 39129, 144152 39065, 144103 38548, 144313 38450, 144877 38449, 146906 38532, 149180 38527, 150577 38462, 151022 38427, 153545 38326, 156048 38319, 158324 38354, 160137 38297, 162281 38166, 172945 38166, 174143 38122, 173212 38052, 162021 38011, 158117 38037, 154179 38010, 152211 38082, 152035 38079, 149446 38140, 149028 38160, 146288 38218, 144267 38219, 144134 38179, 144107 36193, 146124 36115, 146211 36019, 145656 35905, 144817 35907, 144121 35773, 144185 35295, 206005 35295, 206000 36515), (158630 38900, 158095 38987, 158680 39114, 163979 39139, 166840 39459, 167325 39502, 166536 39355, 165165 39228, 164857 39074, 165046 39030, 163863 38828, 159933 38816, 158630 38900), (180201 38403, 180036 38513, 180120 38680, 180388 38971, 182009 38830, 181457 38491, 180691 38383, 180201 38403), (187577 37422, 191032 37592, 193942 37776, 197013 37820, 197834 37742, 197264 37652, 194294 37509, 192830 37479, 191086 37417, 188672 37371, 187577 37422), (181067 37342, 179194 37305, 177395 37312, 175339 37236, 171932 37025, 170398 36971, 168510 37006, 164951 37042, 155751 37015, 152914 37056, 152871 37178, 154129 37227, 157088 37243, 165598 37207, 168936 37212, 171012 37238, 174599 37350, 175056 37386, 176691 37460, 181203 37435, 181711 37257, 181917 37268, 182040 37390, 182072 37250, 182483 37396, 184823 37390, 184504 37356, 182791 37357, 182517 37345, 182168 36984, 182036 36916, 181868 37112, 181544 37189, 181281 36879, 181067 37342), (197854 36625, 195095 36700, 195431 36717, 199271 36800, 200587 36838, 203430 36833, 205380 36784, 205651 36675, 204519 36562, 199813 36543, 197854 36625), (179470 36264, 171993 36332, 167653 36337, 167558 36347, 167642 36361, 172414 36344, 179371 36372, 179559 36316, 180507 36287, 181228 36308, 182131 36456, 183927 36611, 184628 36763, 185717 36819, 186802 36815, 189396 36826, 191848 36738, 193926 36709, 190936 36630, 190176 36579, 185758 36531, 184535 36480, 182417 36370, 181721 36259, 179761 36211, 179470 36264), (179785 36497, 179813 36624, 181051 36792, 181204 36510, 180330 36445, 179785 36497)), ((143407 35721, 143410 36018, 143307 36102, 142107 36088, 141770 36180, 141038 36122, 139775 36178, 139726 36155, 140066 36012, 140500 36005, 140562 36035, 140859 36111, 140681 36014, 141017 35886, 141003 35763, 141484 35648, 141686 35646, 142115 35542, 142699 35350, 142815 35295, 143312 35295, 143407 35721)), ((51599 35727, 51435 35789, 50205 35720, 48107 35688, 37197 35751, 31191 35557, 31191 35295, 51581 35295, 51599 35727))) \ No newline at end of file diff --git a/stress_benchmark/resources/060.settings b/stress_benchmark/resources/060.settings index f07e7c3030..69be168932 100644 --- a/stress_benchmark/resources/060.settings +++ b/stress_benchmark/resources/060.settings @@ -248,6 +248,7 @@ z_seam_corner=z_seam_corner_weighted meshfix_fluid_motion_enabled=True machine_show_variants=False wall_overhang_angle=90 +seam_overhang_angle=30 z_seam_y=350 acceleration_skirt_brim=500 skin_no_small_gaps_heuristic=False @@ -612,7 +613,6 @@ machine_firmware_retract=False support_tree_angle=63 support_tree_bp_diameter=7.5 skirt_brim_speed=20.0 -support_interface_skip_height=0.1 machine_nozzle_head_distance=3 support_bottom_pattern=grid raft_base_wall_count=1 diff --git a/stress_benchmark/resources/060.wkt b/stress_benchmark/resources/060.wkt index b11f88495c..9d47009bc3 100644 --- a/stress_benchmark/resources/060.wkt +++ b/stress_benchmark/resources/060.wkt @@ -1 +1 @@ -MULTIPOLYGON (((154509 180190, 154892 180261, 155289 180256, 156229 180714, 156422 182869, 156875 182872, 156659 181573, 157335 181613, 157638 181851, 158114 181771, 158285 181576, 158383 181547, 158434 181291, 159101 181192, 159840 181300, 160175 181370, 160948 181772, 161003 181885, 161037 182887, 161493 182885, 161796 182521, 162119 182435, 162149 182255, 162386 181805, 162412 181703, 163178 181298, 163226 181239, 163578 181136, 164708 181173, 165538 181240, 166046 181168, 166171 181406, 166277 181665, 166277 181756, 166167 181890, 166163 182068, 166257 182563, 166253 182888, 168126 182892, 168106 182217, 168145 181980, 168277 181725, 168533 181642, 169371 181691, 170403 181784, 170618 182031, 170744 182031, 170870 181953, 171902 182195, 172160 182514, 172354 182503, 172733 182705, 173007 182878, 173154 183010, 173210 183187, 173287 183814, 173273 184285, 173788 184119, 174809 183914, 174674 183559, 174635 183292, 174674 183019, 174783 182934, 175036 183056, 175276 183033, 175569 183025, 175946 182631, 175933 182400, 176069 182286, 176449 182354, 176601 182330, 176973 182358, 176976 182279, 177321 182253, 177616 182285, 178012 182397, 178447 182473, 179356 183027, 179481 182973, 179541 183020, 179582 182972, 179925 183062, 179968 183030, 180626 183282, 180717 183402, 180751 183663, 180821 183846, 180918 183913, 180994 184043, 181256 184392, 181368 184620, 181592 185176, 181836 185079, 182919 184982, 183343 184972, 184412 185020, 184485 185012, 186415 185010, 187394 184829, 188025 184806, 188299 184681, 188664 184670, 188837 183559, 188930 183272, 189150 183093, 189158 181134, 189471 180981, 189797 180956, 190248 180977, 190905 180983, 191593 180914, 191856 180975, 192007 180917, 192417 180925, 192547 180948, 192751 180834, 193787 180860, 193355 182887, 193935 182885, 194111 180750, 194631 180459, 194970 180281, 196071 180210, 196489 180401, 196880 180762, 197144 181084, 196780 183724, 196685 184070, 196529 184460, 196846 185001, 196992 185300, 197680 186374, 198545 188061, 198598 188096, 198807 188370, 199326 187247, 199583 187131, 199935 187144, 200209 187233, 200398 187324, 200444 187441, 200551 187549, 200618 187562, 200769 187729, 200944 187736, 201522 188119, 201809 188278, 201915 188821, 201820 189752, 201481 190391, 201744 190423, 201937 190431, 202502 190586, 203153 191030, 203331 191118, 203452 191000, 203705 190855, 204932 189706, 206127 190034, 206987 190894, 207054 191085, 207159 191316, 207150 191796, 207104 192359, 206941 192738, 206656 193261, 204617 193429, 204601 193996, 206516 193587, 206526 194273, 206542 194626, 206427 194830, 206451 194958, 206457 195370, 206400 195521, 206463 195790, 206392 196469, 206399 197128, 206417 197578, 206397 197885, 206242 198216, 205460 198227, 204594 198222, 204592 198469, 205099 198474, 205604 198625, 205907 198839, 206080 199174, 206071 199774, 206177 200430, 206252 200741, 206777 201023, 206861 201246, 206905 201917, 206607 202658, 206459 203567, 206448 203750, 206343 204113, 205997 204638, 205904 204655, 205518 204890, 205411 205127, 205055 205138, 204597 205109, 204597 205492, 204869 205499, 205025 205527, 205517 205558, 205878 205629, 206048 205917, 206355 205955, 206542 206044, 206551 207247, 206570 207499, 206446 207651, 206143 207919, 206183 208027, 206493 208321, 206554 208498, 206455 209332, 206192 209870, 205947 210043, 205568 210095, 204600 210097, 204539 211001, 204500 211136, 204797 211225, 204998 211296, 205649 211460, 205826 211879, 205772 212220, 205473 212355, 205694 212743, 205668 213079, 205558 213405, 205172 214372, 204865 214921, 204306 216005, 204105 216165, 203845 216182, 203781 216197, 203519 216199, 202084 215771, 201984 216204, 201888 216444, 201058 218068, 201135 218437, 201073 218542, 201480 219050, 201577 219298, 201609 219555, 201725 219953, 201799 220438, 201913 220861, 202173 221432, 202597 221964, 202860 222328, 203031 222533, 203217 223461, 203164 224398, 203359 225948, 203550 226351, 205151 226355, 205490 226371, 205605 226427, 206005 227200, 206074 227532, 206185 228270, 206081 228943, 205827 228993, 205799 229090, 205603 229262, 205525 229740, 205761 230040, 205804 230716, 204603 230518, 204601 230971, 206238 231114, 206462 231223, 206912 231801, 207149 232397, 207194 233100, 206966 233517, 206215 234311, 204866 234703, 204501 234609, 204226 234437, 203550 233931, 203269 233663, 202967 233397, 202754 233608, 202951 233775, 202212 234517, 201914 234430, 201599 234722, 201667 235253, 200672 236173, 200267 236248, 200075 235788, 200142 235305, 200129 235033, 200270 234870, 200103 234751, 199471 234723, 199117 234975, 198596 235164, 198514 235249, 198121 236549, 198081 236705, 197654 237676, 197009 238126, 196995 238450, 196761 238762, 196795 239104, 196737 239371, 197306 238808, 197471 238894, 197788 239273, 197635 239528, 197344 239726, 196979 240029, 196636 240262, 196483 240089, 196360 240285, 196406 240496, 196616 240828, 197149 241389, 197626 241927, 197289 243241, 196954 243551, 196689 243877, 196322 244069, 196048 244181, 195518 244200, 195057 244143, 194680 243948, 194121 243640, 193969 241915, 193924 241508, 193485 241502, 193702 242817, 193305 242798, 193027 242774, 192725 242537, 192248 242615, 192079 242812, 191981 242840, 191928 243095, 191259 243195, 190521 243086, 190187 243016, 189416 242616, 189359 242503, 189341 242162, 189330 241498, 188866 241506, 188566 241868, 188242 241964, 188215 242133, 187976 242583, 187950 242685, 187186 243090, 187138 243148, 186786 243252, 185656 243213, 184824 243146, 184316 243218, 184191 242982, 184085 242723, 184085 242632, 184195 242498, 184199 242319, 184100 241801, 184103 241510, 183609 241508, 183638 242016, 183554 242250, 183129 242251, 183177 242698, 183082 243146, 182944 243301, 182476 243398, 182142 243451, 181004 243482, 180812 243255, 180587 243290, 180431 243396, 179897 243310, 179567 243060, 179451 242871, 179331 243018, 179190 243099, 178856 242964, 178604 242424, 178422 242091, 178398 241494, 178331 241494, 178252 242077, 178219 242414, 178105 242762, 177962 243090, 177659 243250, 177429 243350, 176643 243466, 176335 243433, 176158 243550, 176128 243635, 175883 243703, 175615 243727, 175360 243657, 175290 243653, 175053 243440, 174964 243396, 174767 243741, 174156 243621, 174135 243565, 173941 243354, 173797 243086, 173479 242734, 173378 242486, 173344 242257, 173356 241467, 172734 241471, 172591 241879, 172360 242061, 171868 242163, 171250 242151, 170718 242088, 170431 241672, 170213 241863, 169959 241983, 169655 241954, 168608 241819, 168522 241775, 168474 241644, 168493 241374, 168389 241276, 168191 241217, 168202 240964, 168189 240906, 168250 240314, 168322 239956, 167684 239792, 166923 239773, 166735 239663, 165427 239050, 165398 239027, 163899 238476, 163609 238141, 163476 237905, 163229 237672, 163159 237748, 163084 237645, 162919 237852, 162261 237815, 162241 237344, 162058 237355, 161377 237777, 160668 238244, 160447 238363, 159626 238866, 158867 239589, 158503 240055, 158225 240600, 157942 240981, 157406 241295, 157050 241393, 156393 241772, 156239 243121, 156088 243563, 156113 243707, 155320 244145, 154130 244158, 154034 244121, 153711 243805, 153046 243205, 152759 242102, 152897 241335, 153004 241053, 153976 239978, 153081 239104, 152832 238200, 152763 238089, 152730 237925, 152836 236551, 153108 235879, 153042 235593, 152844 235165, 152543 234972, 152270 234667, 151858 234439, 151075 234082, 150561 233790, 149859 233526, 148098 233703, 147720 233534, 147144 233324, 145813 234195, 145751 234269, 144999 234537, 144185 234329, 143121 233062, 143267 232060, 143736 231125, 144870 231030, 145472 230934, 145552 230970, 145749 230953, 145747 230395, 143848 230801, 143838 230106, 143822 229761, 143935 229558, 143911 229430, 143906 229018, 143962 228867, 143902 228597, 143970 227919, 143965 227258, 143946 226811, 143966 226503, 144120 226172, 144921 226163, 145774 226178, 145774 225924, 145265 225914, 144759 225763, 144453 225548, 144282 225212, 144293 224614, 144185 223957, 144110 223646, 143583 223365, 143501 223141, 143450 222490, 143755 221730, 143904 220819, 143915 220637, 144020 220275, 144366 219750, 144460 219733, 144834 219502, 144963 219252, 145516 219255, 146031 219295, 146924 219302, 147007 219378, 147011 220312, 147906 220164, 148725 220129, 148994 219968, 149774 218989, 150223 218351, 150431 217992, 150443 217801, 150348 217379, 150242 217165, 149215 217177, 148929 217081, 147657 216697, 147247 216418, 146981 216008, 146904 213562, 146940 212519, 146960 212238, 146741 210401, 146669 210039, 146436 209373, 145951 207702, 145775 206171, 145778 204178, 146015 203442, 145065 203400, 144828 203084, 144370 201413, 144318 201097, 144471 200910, 144415 200444, 144451 200291, 144520 199631, 144703 199373, 144822 199302, 145079 199078, 145192 198913, 145468 198703, 145826 198573, 145813 198298, 145813 198037, 145213 198031, 144874 198016, 144759 197959, 144357 197187, 144289 196852, 144179 196113, 144283 195443, 144535 195395, 144563 195298, 144759 195126, 144839 194649, 144600 194348, 144554 193674, 145793 193877, 145759 193415, 144984 193354, 144295 193281, 143368 193221, 143705 193220, 143242 192301, 143152 191285, 143390 190880, 144189 190047, 145154 189802, 146476 190280, 146849 190471, 147439 190874, 147849 190876, 148664 190971, 148809 190948, 149227 191053, 150360 191391, 151254 191386, 151608 190965, 151657 190766, 151582 189507, 151616 189230, 151713 188625, 152536 187574, 152602 187368, 152810 187038, 152988 186732, 153421 186197, 153683 185715, 153952 185457, 154054 185230, 154062 184700, 154046 184603, 154211 184023, 153266 183011, 153074 182834, 152733 182466, 152939 181587, 153158 180966, 153514 180717, 153833 180418, 154261 180175) (165182 233311, 174738 233272, 174286 233252, 173993 233224, 165211 233147) (165789 190760, 165532 190830, 164757 191002, 164883 191084, 164916 191534, 164530 191679, 164576 192005, 164986 192247, 165040 192748, 164608 192843, 164627 193190, 164891 193340, 164775 193459, 165120 193560, 165052 193926, 164575 194039, 164474 193753, 164265 193696, 164157 194031, 163443 194020, 163228 193751, 163068 194047, 162705 194037, 162538 193779, 162482 193827, 162351 194048, 161891 194032, 161753 193795, 161287 193758, 161112 194033, 160688 194039, 160427 194032, 160250 193675, 159915 193660, 159475 194112, 159436 194010, 158069 195371, 156464 196997, 156500 197207, 156444 197735, 156022 197791, 155988 198032, 156225 198299, 156250 198410, 156350 198487, 156269 199171, 155838 199179, 155793 199507, 156025 199683, 155865 199769, 156190 199945, 156074 200877, 155574 200932, 155541 201384, 155794 201619, 155618 201739, 155950 201896, 155956 202355, 155918 202437, 155822 202503, 155392 202543, 155282 202209, 154986 202049, 155009 204208, 154697 204731, 154597 204860, 154531 206345, 154531 206730, 154709 206890, 155004 207068, 155009 207867, 154568 208431, 154545 208856, 154783 209174, 155011 209149, 155009 210406, 154533 210922, 154539 211550, 154791 211679, 154693 211937, 155010 211971, 155015 213167, 154937 213436, 154523 214012, 154527 214767, 154815 214866, 154713 215124, 154852 215122, 154963 215175, 155008 215365, 155009 215788, 154852 216096, 154772 216378, 154655 216592, 154553 216663, 154481 217189, 154244 217355, 154057 218987, 153841 220139, 153475 221047, 153403 221373, 153567 222095, 153723 222436, 153880 222880, 154096 222863, 154372 222401, 154731 222376, 154845 222882, 154971 222942, 155173 222850, 155551 222731, 155744 222967, 155312 223228, 155308 223543, 155405 223582, 155748 223618, 155732 223942, 155483 224069, 155477 224114, 155343 224179, 155311 224412, 155725 224452, 155753 224707, 155296 225001, 155279 225195, 155734 225229, 155775 225494, 155279 225747, 155239 226258, 155275 226340, 155712 226411, 155746 226570, 155725 227034, 155272 227212, 155278 227720, 155363 227871, 154323 227897, 154163 227982, 154169 228196, 154476 228539, 154915 228085, 155888 228364, 157161 230041, 157507 229587, 158877 230906, 160240 232270, 160344 232092, 160296 231663, 160606 231375, 160669 231847, 160976 231848, 161188 231608, 161240 231472, 161602 231517, 161651 231932, 161911 231996, 162092 231574, 162362 231570, 162437 231709, 162482 232029, 162698 232064, 162885 231652, 163175 231649, 163273 232141, 163865 232250, 164094 231772, 164735 231870, 164804 232287, 164910 232295, 165033 231337, 165439 231329, 169258 231373, 170473 231460, 171810 231408, 174058 231460, 175321 231605, 175129 231896, 174828 232009, 174968 232232, 175020 232209, 175125 232269, 175228 232581, 175497 232793, 175752 233034, 175728 233086, 175775 233201, 176965 233216, 177551 233300, 178382 233280, 178578 233247, 178520 233047, 178444 232999, 178276 232982, 178151 232860, 178187 232850, 178088 232168, 179635 231816, 180018 231703, 181038 231578, 181535 231546, 181639 231365, 181448 231279, 185311 231282, 185425 230864, 185578 230824, 185944 230811, 185983 230970, 186101 231025, 186197 231168, 186304 230815, 186522 230789, 186862 230790, 187039 231044, 187162 231076, 187267 230784, 187633 230781, 187831 231036, 187981 230787, 188412 230775, 188553 231031, 189176 231068, 189291 230769, 190052 230769, 190307 231131, 191701 229720, 192655 228776, 193858 227623, 194404 227423, 194370 227064, 194018 226996, 193864 227214, 193773 227044, 193630 227356, 193226 227140, 193285 226307, 193688 226267, 193741 225950, 193503 225712, 193382 225511, 193482 224863, 193907 224855, 193948 224492, 193707 224366, 193845 224246, 193562 224090, 193682 223142, 194162 223098, 194218 222656, 193973 222429, 194157 222309, 193823 222131, 193815 221656, 193849 221574, 193966 221510, 194375 221470, 194489 221844, 194741 221958, 195016 221952, 195170 221637, 195436 221683, 195475 218291, 195477 209363, 195411 208350, 195416 203449, 195476 203452, 195476 201644, 195360 201614, 194835 201851, 194587 201578, 195013 201349, 195076 201090, 195055 201011, 194954 200951, 194636 200918, 194625 200592, 194801 200518, 195029 200336, 195043 200155, 194635 200108, 194596 199816, 195041 199603, 195078 199354, 194651 199338, 194574 199037, 194850 198881, 195100 198765, 195131 198371, 195093 198180, 194643 198119, 194606 197952, 194634 197495, 195036 197337, 195069 197203, 195003 197000, 191865 193845, 190130 192124, 190184 192679, 189886 192865, 189824 192730, 189773 192441, 189481 192409, 189316 192609, 189244 192807, 188889 192763, 188862 192502, 188794 192343, 188574 192297, 188393 192710, 188126 192715, 188019 192445, 187982 192218, 187771 192197, 187591 192640, 187303 192638, 187216 192155, 186614 192025, 186395 192497, 186255 192512, 185742 192435, 185704 192003, 185471 191952, 185331 193050, 184924 193057, 181106 193013, 179889 192926, 178553 192979, 176934 192966, 176688 192943, 175830 192922, 174794 192957, 174004 192910, 172749 192891, 172129 192894, 170629 193022, 170246 193085, 169757 191998, 169619 191415, 168929 191401, 168742 191409, 168150 191363, 167796 191396, 167938 191206, 167356 190987, 167048 190813, 166687 190550, 166266 190539) (159586 233271, 159967 233240, 160003 232967, 159924 232909) (165376 232489, 165314 232763, 167115 232710, 172995 232597, 170111 232431, 168709 232415) (195016 227564, 195990 228478, 196157 228311, 196232 227898, 196224 227711, 196092 227851, 195623 227764, 195539 227347, 195263 227297) (194314 228000, 194327 228019, 194864 227610, 194718 227579) (159481 191755, 159444 191550, 159139 191415) (178731 186109, 178897 186247, 179107 186318, 179534 186141, 179832 186169, 178460 185933)), ((204427 220837, 205250 221810, 205317 222313, 205215 222564, 204679 222605, 204583 222622, 203384 222713, 203336 222551, 203370 220240, 203486 220091))) \ No newline at end of file +MULTIPOLYGON (((154509 180190, 154892 180261, 155289 180256, 156229 180714, 156422 182869, 156875 182872, 156659 181573, 157335 181613, 157638 181851, 158114 181771, 158285 181576, 158383 181547, 158434 181291, 159101 181192, 159840 181300, 160175 181370, 160948 181772, 161003 181885, 161037 182887, 161493 182885, 161796 182521, 162119 182435, 162149 182255, 162386 181805, 162412 181703, 163178 181298, 163226 181239, 163578 181136, 164708 181173, 165538 181240, 166046 181168, 166171 181406, 166277 181665, 166277 181756, 166167 181890, 166163 182068, 166257 182563, 166253 182888, 168126 182892, 168106 182217, 168145 181980, 168277 181725, 168533 181642, 169371 181691, 170403 181784, 170618 182031, 170744 182031, 170870 181953, 171902 182195, 172160 182514, 172354 182503, 172733 182705, 173007 182878, 173154 183010, 173210 183187, 173287 183814, 173273 184285, 173788 184119, 174809 183914, 174674 183559, 174635 183292, 174674 183019, 174783 182934, 175036 183056, 175276 183033, 175569 183025, 175946 182631, 175933 182400, 176069 182286, 176449 182354, 176601 182330, 176973 182358, 176976 182279, 177321 182253, 177616 182285, 178012 182397, 178447 182473, 179356 183027, 179481 182973, 179541 183020, 179582 182972, 179925 183062, 179968 183030, 180626 183282, 180717 183402, 180751 183663, 180821 183846, 180918 183913, 180994 184043, 181256 184392, 181368 184620, 181592 185176, 181836 185079, 182919 184982, 183343 184972, 184412 185020, 184485 185012, 186415 185010, 187394 184829, 188025 184806, 188299 184681, 188664 184670, 188837 183559, 188930 183272, 189150 183093, 189158 181134, 189471 180981, 189797 180956, 190248 180977, 190905 180983, 191593 180914, 191856 180975, 192007 180917, 192417 180925, 192547 180948, 192751 180834, 193787 180860, 193355 182887, 193935 182885, 194111 180750, 194631 180459, 194970 180281, 196071 180210, 196489 180401, 196880 180762, 197144 181084, 196780 183724, 196685 184070, 196529 184460, 196846 185001, 196992 185300, 197680 186374, 198545 188061, 198598 188096, 198807 188370, 199326 187247, 199583 187131, 199935 187144, 200209 187233, 200398 187324, 200444 187441, 200551 187549, 200618 187562, 200769 187729, 200944 187736, 201522 188119, 201809 188278, 201915 188821, 201820 189752, 201481 190391, 201744 190423, 201937 190431, 202502 190586, 203153 191030, 203331 191118, 203452 191000, 203705 190855, 204932 189706, 206127 190034, 206987 190894, 207054 191085, 207159 191316, 207150 191796, 207104 192359, 206941 192738, 206656 193261, 204617 193429, 204601 193996, 206516 193587, 206526 194273, 206542 194626, 206427 194830, 206451 194958, 206457 195370, 206400 195521, 206463 195790, 206392 196469, 206399 197128, 206417 197578, 206397 197885, 206242 198216, 205460 198227, 204594 198222, 204592 198469, 205099 198474, 205604 198625, 205907 198839, 206080 199174, 206071 199774, 206177 200430, 206252 200741, 206777 201023, 206861 201246, 206905 201917, 206607 202658, 206459 203567, 206448 203750, 206343 204113, 205997 204638, 205904 204655, 205518 204890, 205411 205127, 205055 205138, 204597 205109, 204597 205492, 204869 205499, 205025 205527, 205517 205558, 205878 205629, 206048 205917, 206355 205955, 206542 206044, 206551 207247, 206570 207499, 206446 207651, 206143 207919, 206183 208027, 206493 208321, 206554 208498, 206455 209332, 206192 209870, 205947 210043, 205568 210095, 204600 210097, 204539 211001, 204500 211136, 204797 211225, 204998 211296, 205649 211460, 205826 211879, 205772 212220, 205473 212355, 205694 212743, 205668 213079, 205558 213405, 205172 214372, 204865 214921, 204306 216005, 204105 216165, 203845 216182, 203781 216197, 203519 216199, 202084 215771, 201984 216204, 201888 216444, 201058 218068, 201135 218437, 201073 218542, 201480 219050, 201577 219298, 201609 219555, 201725 219953, 201799 220438, 201913 220861, 202173 221432, 202597 221964, 202860 222328, 203031 222533, 203217 223461, 203164 224398, 203359 225948, 203550 226351, 205151 226355, 205490 226371, 205605 226427, 206005 227200, 206074 227532, 206185 228270, 206081 228943, 205827 228993, 205799 229090, 205603 229262, 205525 229740, 205761 230040, 205804 230716, 204603 230518, 204601 230971, 206238 231114, 206462 231223, 206912 231801, 207149 232397, 207194 233100, 206966 233517, 206215 234311, 204866 234703, 204501 234609, 204226 234437, 203550 233931, 203269 233663, 202967 233397, 202754 233608, 202951 233775, 202212 234517, 201914 234430, 201599 234722, 201667 235253, 200672 236173, 200267 236248, 200075 235788, 200142 235305, 200129 235033, 200270 234870, 200103 234751, 199471 234723, 199117 234975, 198596 235164, 198514 235249, 198121 236549, 198081 236705, 197654 237676, 197009 238126, 196995 238450, 196761 238762, 196795 239104, 196737 239371, 197306 238808, 197471 238894, 197788 239273, 197635 239528, 197344 239726, 196979 240029, 196636 240262, 196483 240089, 196360 240285, 196406 240496, 196616 240828, 197149 241389, 197626 241927, 197289 243241, 196954 243551, 196689 243877, 196322 244069, 196048 244181, 195518 244200, 195057 244143, 194680 243948, 194121 243640, 193969 241915, 193924 241508, 193485 241502, 193702 242817, 193305 242798, 193027 242774, 192725 242537, 192248 242615, 192079 242812, 191981 242840, 191928 243095, 191259 243195, 190521 243086, 190187 243016, 189416 242616, 189359 242503, 189341 242162, 189330 241498, 188866 241506, 188566 241868, 188242 241964, 188215 242133, 187976 242583, 187950 242685, 187186 243090, 187138 243148, 186786 243252, 185656 243213, 184824 243146, 184316 243218, 184191 242982, 184085 242723, 184085 242632, 184195 242498, 184199 242319, 184100 241801, 184103 241510, 183609 241508, 183638 242016, 183554 242250, 183129 242251, 183177 242698, 183082 243146, 182944 243301, 182476 243398, 182142 243451, 181004 243482, 180812 243255, 180587 243290, 180431 243396, 179897 243310, 179567 243060, 179451 242871, 179331 243018, 179190 243099, 178856 242964, 178604 242424, 178422 242091, 178398 241494, 178331 241494, 178252 242077, 178219 242414, 178105 242762, 177962 243090, 177659 243250, 177429 243350, 176643 243466, 176335 243433, 176158 243550, 176128 243635, 175883 243703, 175615 243727, 175360 243657, 175290 243653, 175053 243440, 174964 243396, 174767 243741, 174156 243621, 174135 243565, 173941 243354, 173797 243086, 173479 242734, 173378 242486, 173344 242257, 173356 241467, 172734 241471, 172591 241879, 172360 242061, 171868 242163, 171250 242151, 170718 242088, 170431 241672, 170213 241863, 169959 241983, 169655 241954, 168608 241819, 168522 241775, 168474 241644, 168493 241374, 168389 241276, 168191 241217, 168202 240964, 168189 240906, 168250 240314, 168322 239956, 167684 239792, 166923 239773, 166735 239663, 165427 239050, 165398 239027, 163899 238476, 163609 238141, 163476 237905, 163229 237672, 163159 237748, 163084 237645, 162919 237852, 162261 237815, 162241 237344, 162058 237355, 161377 237777, 160668 238244, 160447 238363, 159626 238866, 158867 239589, 158503 240055, 158225 240600, 157942 240981, 157406 241295, 157050 241393, 156393 241772, 156239 243121, 156088 243563, 156113 243707, 155320 244145, 154130 244158, 154034 244121, 153711 243805, 153046 243205, 152759 242102, 152897 241335, 153004 241053, 153976 239978, 153081 239104, 152832 238200, 152763 238089, 152730 237925, 152836 236551, 153108 235879, 153042 235593, 152844 235165, 152543 234972, 152270 234667, 151858 234439, 151075 234082, 150561 233790, 149859 233526, 148098 233703, 147720 233534, 147144 233324, 145813 234195, 145751 234269, 144999 234537, 144185 234329, 143121 233062, 143267 232060, 143736 231125, 144870 231030, 145472 230934, 145552 230970, 145749 230953, 145747 230395, 143848 230801, 143838 230106, 143822 229761, 143935 229558, 143911 229430, 143906 229018, 143962 228867, 143902 228597, 143970 227919, 143965 227258, 143946 226811, 143966 226503, 144120 226172, 144921 226163, 145774 226178, 145774 225924, 145265 225914, 144759 225763, 144453 225548, 144282 225212, 144293 224614, 144185 223957, 144110 223646, 143583 223365, 143501 223141, 143450 222490, 143755 221730, 143904 220819, 143915 220637, 144020 220275, 144366 219750, 144460 219733, 144834 219502, 144963 219252, 145516 219255, 146031 219295, 146924 219302, 147007 219378, 147011 220312, 147906 220164, 148725 220129, 148994 219968, 149774 218989, 150223 218351, 150431 217992, 150443 217801, 150348 217379, 150242 217165, 149215 217177, 148929 217081, 147657 216697, 147247 216418, 146981 216008, 146904 213562, 146940 212519, 146960 212238, 146741 210401, 146669 210039, 146436 209373, 145951 207702, 145775 206171, 145778 204178, 146015 203442, 145065 203400, 144828 203084, 144370 201413, 144318 201097, 144471 200910, 144415 200444, 144451 200291, 144520 199631, 144703 199373, 144822 199302, 145079 199078, 145192 198913, 145468 198703, 145826 198573, 145813 198298, 145813 198037, 145213 198031, 144874 198016, 144759 197959, 144357 197187, 144289 196852, 144179 196113, 144283 195443, 144535 195395, 144563 195298, 144759 195126, 144839 194649, 144600 194348, 144554 193674, 145793 193877, 145759 193415, 144984 193354, 144295 193281, 143368 193221, 143705 193220, 143242 192301, 143152 191285, 143390 190880, 144189 190047, 145154 189802, 146476 190280, 146849 190471, 147439 190874, 147849 190876, 148664 190971, 148809 190948, 149227 191053, 150360 191391, 151254 191386, 151608 190965, 151657 190766, 151582 189507, 151616 189230, 151713 188625, 152536 187574, 152602 187368, 152810 187038, 152988 186732, 153421 186197, 153683 185715, 153952 185457, 154054 185230, 154062 184700, 154046 184603, 154211 184023, 153266 183011, 153074 182834, 152733 182466, 152939 181587, 153158 180966, 153514 180717, 153833 180418, 154261 180175, 154509 180190), (165182 233311, 174738 233272, 174286 233252, 173993 233224, 165211 233147, 165182 233311), (165789 190760, 165532 190830, 164757 191002, 164883 191084, 164916 191534, 164530 191679, 164576 192005, 164986 192247, 165040 192748, 164608 192843, 164627 193190, 164891 193340, 164775 193459, 165120 193560, 165052 193926, 164575 194039, 164474 193753, 164265 193696, 164157 194031, 163443 194020, 163228 193751, 163068 194047, 162705 194037, 162538 193779, 162482 193827, 162351 194048, 161891 194032, 161753 193795, 161287 193758, 161112 194033, 160688 194039, 160427 194032, 160250 193675, 159915 193660, 159475 194112, 159436 194010, 158069 195371, 156464 196997, 156500 197207, 156444 197735, 156022 197791, 155988 198032, 156225 198299, 156250 198410, 156350 198487, 156269 199171, 155838 199179, 155793 199507, 156025 199683, 155865 199769, 156190 199945, 156074 200877, 155574 200932, 155541 201384, 155794 201619, 155618 201739, 155950 201896, 155956 202355, 155918 202437, 155822 202503, 155392 202543, 155282 202209, 154986 202049, 155009 204208, 154697 204731, 154597 204860, 154531 206345, 154531 206730, 154709 206890, 155004 207068, 155009 207867, 154568 208431, 154545 208856, 154783 209174, 155011 209149, 155009 210406, 154533 210922, 154539 211550, 154791 211679, 154693 211937, 155010 211971, 155015 213167, 154937 213436, 154523 214012, 154527 214767, 154815 214866, 154713 215124, 154852 215122, 154963 215175, 155008 215365, 155009 215788, 154852 216096, 154772 216378, 154655 216592, 154553 216663, 154481 217189, 154244 217355, 154057 218987, 153841 220139, 153475 221047, 153403 221373, 153567 222095, 153723 222436, 153880 222880, 154096 222863, 154372 222401, 154731 222376, 154845 222882, 154971 222942, 155173 222850, 155551 222731, 155744 222967, 155312 223228, 155308 223543, 155405 223582, 155748 223618, 155732 223942, 155483 224069, 155477 224114, 155343 224179, 155311 224412, 155725 224452, 155753 224707, 155296 225001, 155279 225195, 155734 225229, 155775 225494, 155279 225747, 155239 226258, 155275 226340, 155712 226411, 155746 226570, 155725 227034, 155272 227212, 155278 227720, 155363 227871, 154323 227897, 154163 227982, 154169 228196, 154476 228539, 154915 228085, 155888 228364, 157161 230041, 157507 229587, 158877 230906, 160240 232270, 160344 232092, 160296 231663, 160606 231375, 160669 231847, 160976 231848, 161188 231608, 161240 231472, 161602 231517, 161651 231932, 161911 231996, 162092 231574, 162362 231570, 162437 231709, 162482 232029, 162698 232064, 162885 231652, 163175 231649, 163273 232141, 163865 232250, 164094 231772, 164735 231870, 164804 232287, 164910 232295, 165033 231337, 165439 231329, 169258 231373, 170473 231460, 171810 231408, 174058 231460, 175321 231605, 175129 231896, 174828 232009, 174968 232232, 175020 232209, 175125 232269, 175228 232581, 175497 232793, 175752 233034, 175728 233086, 175775 233201, 176965 233216, 177551 233300, 178382 233280, 178578 233247, 178520 233047, 178444 232999, 178276 232982, 178151 232860, 178187 232850, 178088 232168, 179635 231816, 180018 231703, 181038 231578, 181535 231546, 181639 231365, 181448 231279, 185311 231282, 185425 230864, 185578 230824, 185944 230811, 185983 230970, 186101 231025, 186197 231168, 186304 230815, 186522 230789, 186862 230790, 187039 231044, 187162 231076, 187267 230784, 187633 230781, 187831 231036, 187981 230787, 188412 230775, 188553 231031, 189176 231068, 189291 230769, 190052 230769, 190307 231131, 191701 229720, 192655 228776, 193858 227623, 194404 227423, 194370 227064, 194018 226996, 193864 227214, 193773 227044, 193630 227356, 193226 227140, 193285 226307, 193688 226267, 193741 225950, 193503 225712, 193382 225511, 193482 224863, 193907 224855, 193948 224492, 193707 224366, 193845 224246, 193562 224090, 193682 223142, 194162 223098, 194218 222656, 193973 222429, 194157 222309, 193823 222131, 193815 221656, 193849 221574, 193966 221510, 194375 221470, 194489 221844, 194741 221958, 195016 221952, 195170 221637, 195436 221683, 195475 218291, 195477 209363, 195411 208350, 195416 203449, 195476 203452, 195476 201644, 195360 201614, 194835 201851, 194587 201578, 195013 201349, 195076 201090, 195055 201011, 194954 200951, 194636 200918, 194625 200592, 194801 200518, 195029 200336, 195043 200155, 194635 200108, 194596 199816, 195041 199603, 195078 199354, 194651 199338, 194574 199037, 194850 198881, 195100 198765, 195131 198371, 195093 198180, 194643 198119, 194606 197952, 194634 197495, 195036 197337, 195069 197203, 195003 197000, 191865 193845, 190130 192124, 190184 192679, 189886 192865, 189824 192730, 189773 192441, 189481 192409, 189316 192609, 189244 192807, 188889 192763, 188862 192502, 188794 192343, 188574 192297, 188393 192710, 188126 192715, 188019 192445, 187982 192218, 187771 192197, 187591 192640, 187303 192638, 187216 192155, 186614 192025, 186395 192497, 186255 192512, 185742 192435, 185704 192003, 185471 191952, 185331 193050, 184924 193057, 181106 193013, 179889 192926, 178553 192979, 176934 192966, 176688 192943, 175830 192922, 174794 192957, 174004 192910, 172749 192891, 172129 192894, 170629 193022, 170246 193085, 169757 191998, 169619 191415, 168929 191401, 168742 191409, 168150 191363, 167796 191396, 167938 191206, 167356 190987, 167048 190813, 166687 190550, 166266 190539, 165789 190760), (159586 233271, 159967 233240, 160003 232967, 159924 232909, 159586 233271), (165376 232489, 165314 232763, 167115 232710, 172995 232597, 170111 232431, 168709 232415, 165376 232489), (195016 227564, 195990 228478, 196157 228311, 196232 227898, 196224 227711, 196092 227851, 195623 227764, 195539 227347, 195263 227297, 195016 227564), (194314 228000, 194327 228019, 194864 227610, 194718 227579, 194314 228000), (159481 191755, 159444 191550, 159139 191415, 159481 191755), (178731 186109, 178897 186247, 179107 186318, 179534 186141, 179832 186169, 178460 185933, 178731 186109)), ((204427 220837, 205250 221810, 205317 222313, 205215 222564, 204679 222605, 204583 222622, 203384 222713, 203336 222551, 203370 220240, 203486 220091, 204427 220837))) \ No newline at end of file diff --git a/stress_benchmark/resources/061.settings b/stress_benchmark/resources/061.settings deleted file mode 100644 index 9a2e6f80a8..0000000000 --- a/stress_benchmark/resources/061.settings +++ /dev/null @@ -1,633 +0,0 @@ -material_maximum_park_duration=300 -support_bottom_stair_step_min_slope=10.0 -wipe_brush_pos_x=100 -extruder_prime_pos_abs=False -machine_scale_fan_speed_zero_to_one=False -support_zag_skip_count=0 -retraction_combing=noskin -material_bed_temperature=65 -ironing_inset=0.07999999999999999 -speed_support_roof=13.333333333333334 -support_bottom_wall_count=0 -machine_max_feedrate_z=299792458000 -wall_transition_angle=10 -coasting_min_volume=0.8 -wall_0_inset=0 -xy_offset_layer_0=0 -support_tree_limit_branch_reach=True -bridge_skin_speed_2=10 -ooze_shield_angle=60 -expand_skins_expand_distance=1.6 -support_infill_rate=0 -ironing_flow=10.0 -cool_fan_enabled=True -minimum_bottom_area=1.0 -skirt_height=3 -material_extrusion_cool_down_speed=0.7 -wall_x_material_flow_layer_0=100 -minimum_support_area=0.0 -support_roof_wall_count=0 -lightning_infill_overhang_angle=40 -support_xy_overrides_z=z_overrides_xy -material_no_load_move_factor=0.940860215 -material_flow=100 -jerk_roofing=20 -material_is_support_material=False -support_fan_enable=False -machine_buildplate_type=glass -ironing_pattern=concentric -acceleration_print=3000 -machine_minimum_feedrate=0.0 -material_surface_energy=100 -jerk_wall_0_roofing=20 -support_tower_diameter=3.0 -carve_multiple_volumes=False -travel_avoid_supports=False -interlocking_beam_layer_count=2 -min_skin_width_for_expansion=3.91886975727153e-17 -material_break_temperature=50 -support_extruder_nr=0 -jerk_enabled=False -bridge_settings_enabled=True -material_final_print_temperature=195 -machine_max_feedrate_x=299792458000 -clean_between_layers=False -support_tree_max_diameter_increase_by_merges_when_support_to_model=1 -speed_support_interface=13.333333333333334 -wall_0_material_flow_roofing=100 -speed_travel=150 -machine_max_acceleration_z=100 -layer_height_0=0.3 -skin_preshrink=1.6 -machine_depth=220 -small_skin_on_surface=False -nozzle_disallowed_areas=[] -bottom_skin_preshrink=1.6 -skirt_line_count=3 -skin_monotonic=False -skin_line_width=0.4 -material_break_preparation_speed=2 -infill_sparse_thickness=0.16 -wipe_retraction_extra_prime_amount=0 -coasting_speed=90 -nozzle_offsetting_for_disallowed_areas=True -brim_replaces_support=True -skirt_brim_minimal_length=250 -cooling=0 -default_material_print_temperature=200 -meshfix_maximum_extrusion_area_deviation=50000 -top_thickness=0.8 -group_outer_walls=True -cool_fan_speed=100 -raft_base_jerk=20 -retraction_enable=True -jerk_support_bottom=20 -skin_outline_count=1 -_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 -cool_min_speed=10 -travel_avoid_distance=0.625 -cool_min_layer_time_fan_speed_max=10 -machine_max_acceleration_e=10000 -infill_randomize_start_location=False -jerk_wall_x=20 -cool_min_layer_time=5 -speed_layer_0=10.0 -speed_wall_x_roofing=25 -_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False -raft_base_thickness=0.36 -retraction_hop_only_when_collides=False -infill_support_angle=40 -acceleration_prime_tower=3000 -material_print_temperature=210 -machine_disallowed_areas=[] -retract_at_layer_change=True -support_roof_line_width=0.4 -travel=0 -meshfix_union_all=True -gradual_support_infill_step_height=1 -machine_steps_per_mm_e=1600 -raft_interface_layers=1 -raft_base_extruder_nr=0 -wipe_retraction_enable=True -switch_extruder_retraction_amount=16 -acceleration_travel_layer_0=5000.0 -material_bed_temp_wait=True -support_tower_roof_angle=65 -raft_interface_fan_speed=0 -z_seam_x=110.0 -support_interface_material_flow=100 -support_enable=False -extruder_prime_pos_z=0 -machine_heated_build_volume=False -support_bottom_line_distance=0.4 -initial_layer_line_width_factor=100.0 -conical_overhang_angle=50 -acceleration_support_infill=3000 -min_wall_line_width=0.34 -draft_shield_height_limitation=full -bottom_layers=4 -wipe_retraction_retract_speed=45 -material_anti_ooze_retracted_position=-4 -layer_height=0.16 -support_roof_pattern=concentric -raft_interface_extruder_nr=0 -mesh_position_x=0 -meshfix_extensive_stitching=False -speed_wall=10.0 -support_bottom_distance=0 -material_shrinkage_percentage=100.0 -wall_distribution_count=1 -jerk_layer_0=20 -minimum_interface_area=1.0 -command_line_settings=0 -prime_tower_raft_base_line_spacing=1.6 -material_bed_temp_prepend=True -cool_fan_full_at_height=0.3 -meshfix_union_all_remove_holes=False -raft_interface_speed=7.5 -support_tree_branch_reach_limit=30 -support_structure=normal -machine_feeder_wheel_diameter=10.0 -skin_material_flow=100 -cutting_mesh=False -support_tower_maximum_supported_diameter=3.0 -material_name=empty -acceleration_support=3000 -layer_start_x=0.0 -support_infill_sparse_thickness=0.16 -magic_spiralize=False -wall_transition_filter_distance=100 -jerk_travel=30 -support_tree_top_rate=10 -ironing_monotonic=False -support_interface_offset=0.0 -z_seam_position=back -raft_surface_fan_speed=0 -support_mesh_drop_down=True -infill_overlap=33 -speed_support_infill=20 -support_offset=0.8 -magic_fuzzy_skin_outside_only=True -interlocking_boundary_avoidance=2 -coasting_volume=0.064 -skin_overlap=5 -material_break_speed=25 -machine_width=220 -raft_smoothing=5 -material_break_preparation_temperature=210 -material_alternate_walls=False -retraction_extra_prime_amount=0 -skin_edge_support_thickness=0 -speed_topbottom=10.0 -wall_x_material_flow=100 -prime_tower_position_x=214.375 -acceleration_layer_0=3000 -retraction_amount=5 -material_break_preparation_retracted_position=-16 -prime_tower_position_y=194.375 -jerk_support=20 -jerk_skirt_brim=20 -support_roof_density=100 -roofing_line_width=0.4 -material_flow_layer_0=100 -minimum_roof_area=1.0 -blackmagic=0 -raft_base_remove_inside_corners=False -raft_interface_remove_inside_corners=False -raft_surface_remove_inside_corners=False -support_interface_pattern=concentric -xy_offset=0 -prime_tower_brim_enable=False -support_xy_distance=0.7 -acceleration_travel_enabled=True -brim_outside_only=True -retraction_prime_speed=45 -roofing_pattern=concentric -machine_nozzle_size=0.4 -support_bottom_height=1 -infill_wipe_dist=0.1 -raft_fan_speed=0 -machine_endstop_positive_direction_z=True -support_join_distance=2.0 -interlocking_orientation=22.5 -mold_width=5 -interlocking_depth=2 -roofing_layer_count=2 -support_infill_extruder_nr=0 -alternate_carve_order=True -hole_xy_offset=0 -magic_fuzzy_skin_point_density=1.25 -infill_sparse_density=10 -bridge_skin_density_2=75 -acceleration_support_bottom=3000 -bridge_skin_density=100 -raft_airgap=0.3 -mold_angle=40 -quality_name=Draft -raft_base_margin=15 -raft_interface_margin=15 -raft_surface_margin=15 -speed_print_layer_0=10.0 -hole_xy_offset_max_diameter=0 -cool_fan_full_layer=2 -ooze_shield_dist=2 -support_line_distance=0 -zig_zaggify_infill=False -support_interface_line_width=0.4 -magic_mesh_surface_mode=normal -material_shrinkage_percentage_z=100.0 -machine_nozzle_expansion_angle=45 -multiple_mesh_overlap=0.15 -jerk_support_interface=20 -raft_surface_line_width=0.4 -support_supported_skin_fan_speed=100 -support_initial_layer_line_distance=0 -acceleration_enabled=False -smooth_spiralized_contours=True -travel_speed=120 -z_seam_corner=z_seam_corner_inner -meshfix_fluid_motion_enabled=True -machine_show_variants=False -wall_overhang_angle=90 -z_seam_y=220 -acceleration_skirt_brim=3000 -skin_no_small_gaps_heuristic=False -wall_line_width=0.4 -gradual_support_infill_steps=0 -machine_heated_bed=True -print_bed_temperature=65 -raft_surface_jerk=20 -machine_max_feedrate_y=299792458000 -meshfix=0 -prime_tower_wipe_enabled=True -retraction_hop_enabled=True -wall_0_extruder_nr=-1 -support_interface_height=1 -wall_extruder_nr=-1 -adaptive_layer_height_enabled=True -material_type=empty -support_skip_zag_per_mm=20 -speed=0 -day=Mon -support_bottom_stair_step_width=5.0 -support_type=buildplate -raft_interface_line_width=0.8 -material_shrinkage_percentage_xy=100.0 -wipe_pause=0 -speed_slowdown_layers=2 -bridge_wall_min_length=2.1 -support_roof_line_distance=0.4 -zig_zaggify_support=False -support_z_distance=0.1 -support_bottom_enable=True -retraction_combing_max_distance=0 -conical_overhang_enabled=True -remove_empty_first_layers=True -machine_height=250 -acceleration_topbottom=3000 -extruder_prime_pos_x=0 -coasting_enable=True -retraction_hop=1 -jerk_prime_tower=20 -cool_lift_head=False -support_tree_rest_preference=buildplate -material_brand=empty_brand -initial_bottom_layers=4 -wipe_retraction_prime_speed=45 -wall_overhang_speed_factor=100 -machine_heat_zone_length=16 -support_bottom_stair_step_height=0 -machine_nozzle_id=unknown -prime_tower_size=20 -speed_wall_0_roofing=10.0 -machine_always_write_active_tool=False -raft_base_fan_speed=0 -ooze_shield_enabled=False -max_skin_angle_for_expansion=90 -meshfix_maximum_travel_resolution=0.8 -infill_offset_y=0 -cool_fan_speed_max=100 -material_print_temp_prepend=True -adhesion_extruder_nr=-1 -machine_name=Unknown -skirt_gap=3 -bridge_fan_speed=100 -bridge_skin_speed=10 -infill_mesh_order=0 -support_roof_material_flow=100 -prime_tower_base_curve_magnitude=4 -jerk_print_layer_0=20 -infill_extruder_nr=-1 -wipe_repeat_count=5 -skin_material_flow_layer_0=100 -alternate_extra_perimeter=False -wall_0_material_flow_layer_0=100 -roofing_monotonic=True -machine_center_is_zero=False -support_wall_count=1 -raft_base_line_spacing=1.6 -jerk_wall_0=20 -machine_nozzle_heat_up_speed=2.0 -cool_fan_speed_0=0 -wall_line_count=4 -material_print_temperature_layer_0=210 -raft_surface_extruder_nr=0 -relative_extrusion=False -infill_before_walls=True -inset_direction=inside_out -wall_x_material_flow_roofing=100 -support_tree_tip_diameter=0.8 -jerk_ironing=20 -machine_max_feedrate_e=299792458000 -wipe_retraction_amount=5 -support_use_towers=True -support_bottom_offset=0.0 -speed_wall_x=25 -infill_line_width=0.4 -wall_line_width_0=0.4 -acceleration_print_layer_0=3000 -brim_gap=0 -jerk_topbottom=20 -center_object=False -connect_infill_polygons=False -material_flush_purge_speed=0.5 -acceleration_travel=5000 -support_roof_height=1 -cool_fan_speed_min=100 -support_material_flow=100 -bridge_skin_support_threshold=50 -adaptive_layer_height_threshold=0.2 -support_extruder_nr_layer_0=0 -brim_width=8.0 -support_bottom_density=100 -print_temperature=210 -acceleration_wall=3000 -wall_material_flow=100 -raft_acceleration=3000 -raft_interface_thickness=0.24 -support_meshes_present=False -dual=0 -jerk_travel_enabled=True -support_interface_wall_count=0 -bridge_wall_material_flow=50 -lightning_infill_straightening_angle=40 -z_seam_relative=False -top_skin_expand_distance=1.6 -switch_extruder_extra_prime_amount=0 -prime_tower_line_width=0.4 -meshfix_fluid_motion_small_distance=0.01 -machine_endstop_positive_direction_y=False -mold_enabled=False -magic_fuzzy_skin_enabled=False -print_sequence=all_at_once -date=04-12-2023 -jerk_support_roof=20 -raft_surface_speed=10.0 -support_pattern=lines -switch_extruder_retraction_speeds=20 -sub_div_rad_add=0.4 -skin_overlap_mm=0.02 -small_feature_speed_factor=50 -wipe_hop_enable=True -support_xy_distance_overhang=0.2 -default_material_bed_temperature=60 -fill_outline_gaps=True -acceleration_wall_0=3000 -support_interface_priority=interface_area_overwrite_support_area -bridge_skin_material_flow_2=100 -material_anti_ooze_retraction_speed=5 -support_bottom_material_flow=100 -prime_tower_flow=100 -acceleration_wall_x=3000 -infill_overlap_mm=0.132 -support_tree_branch_diameter=5 -support_brim_width=1.2000000000000002 -gradual_infill_steps=0 -top_skin_preshrink=1.6 -jerk_wall_x_roofing=20 -machine_min_cool_heat_time_window=50.0 -machine_nozzle_temp_enabled=True -infill_enable_travel_optimization=True -machine_max_jerk_e=5.0 -top_layers=4 -meshfix_fluid_motion_shift_distance=0.1 -support_connect_zigzags=True -bridge_skin_density_3=80 -machine_max_acceleration_x=9000 -support_roof_offset=0.0 -support_bottom_line_width=0.4 -machine_max_jerk_z=0.4 -switch_extruder_retraction_speed=20 -machine_settings=0 -flow_rate_extrusion_offset_factor=100 -material_initial_print_temperature=200 -layer_0_z_overlap=0.15 -material_adhesion_tendency=0 -cool_min_temperature=210 -material_end_of_filament_purge_length=20 -raft_interface_acceleration=3000 -speed_travel_layer_0=75.0 -speed_ironing=6.666666666666667 -gantry_height=30.1 -bottom_skin_expand_distance=1.6 -min_feature_size=0.1 -z_seam_type=back -prime_tower_base_size=8.0 -material_print_temp_wait=True -retraction_min_travel=0.8 -machine_extruders_shared_nozzle_initial_retraction=0 -interlocking_beam_width=0.8 -extruders_enabled_count=1 -raft_jerk=20 -max_extrusion_before_wipe=10 -draft_shield_height=10 -bottom_thickness=0.6 -skirt_brim_extruder_nr=-1 -support_brim_line_count=3 -build_volume_temperature=28 -wall_0_wipe_dist=0.2 -switch_extruder_prime_speed=20 -speed_infill=20 -raft_surface_thickness=0.16 -retraction_hop_after_extruder_switch_height=1 -machine_max_acceleration_y=9000 -optimize_wall_printing_order=False -support_top_distance=0.1 -infill=0 -bridge_skin_speed_3=10 -machine_steps_per_mm_x=50 -material_bed_temperature_layer_0=65 -machine_acceleration=4000 -machine_steps_per_mm_z=50 -skirt_brim_line_width=0.4 -skirt_brim_material_flow=100 -brim_line_count=20 -retraction_retract_speed=45 -raft_surface_line_spacing=0.4 -material=0 -material_crystallinity=False -top_bottom_pattern=lines -material_end_of_filament_purge_speed=0.5 -prime_tower_min_volume=6 -wipe_retraction_speed=45 -line_width=0.4 -acceleration_ironing=3000 -bridge_wall_speed=10 -support_interface_density=100 -support_brim_enable=True -small_feature_speed_factor_0=50 -_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 -travel_avoid_other_parts=True -flow_rate_max_extrusion_offset=0 -connect_skin_polygons=False -wipe_hop_amount=1 -mesh_position_y=0 -retraction_hop_after_extruder_switch=True -machine_max_jerk_xy=20.0 -machine_extruder_count=1 -acceleration_infill=3000 -roofing_material_flow=100 -gradual_infill_step_height=1.5 -adaptive_layer_height_variation=0.1 -small_feature_max_length=0.0 -material_break_retracted_position=-50 -skin_edge_support_layers=0 -ironing_line_spacing=0.1 -jerk_support_infill=20 -infill_offset_x=0 -min_odd_wall_line_width=0.34 -adhesion_type=skirt -speed_z_hop=10 -brim_inside_margin=2.5 -wall_x_extruder_nr=-1 -initial_extruder_nr=0 -speed_equalize_flow_width_factor=100.0 -infill_line_distance=8.0 -lightning_infill_support_angle=40 -meshfix_maximum_deviation=0.025 -support_skip_some_zags=False -material_flush_purge_length=60 -support_conical_angle=30 -shell=0 -support_conical_min_width=5.0 -bridge_wall_coast=100 -slicing_tolerance=middle -mesh_position_z=0 -raft_surface_acceleration=3000 -anti_overhang_mesh=False -infill_material_flow=100 -conical_overhang_hole_size=0 -roofing_extruder_nr=-1 -machine_extruders_share_heater=False -minimum_polygon_circumference=1.0 -draft_shield_enabled=False -raft_interface_line_spacing=1.0 -raft_base_acceleration=3000 -wall_line_width_x=0.4 -acceleration_support_interface=3000 -layer_start_y=0.0 -magic_fuzzy_skin_thickness=0.3 -support_conical_enabled=False -bridge_fan_speed_2=0 -retraction_extrusion_window=5 -speed_wall_0=10.0 -meshfix_fluid_motion_angle=15 -speed_support_bottom=13.333333333333334 -material_id=empty_material -raft_surface_layers=2 -experimental=0 -wall_transition_filter_deviation=0.1 -meshfix_keep_open_polygons=False -support_roof_extruder_nr=0 -interlocking_enable=False -material_diameter=1.75 -bridge_enable_more_layers=True -lightning_infill_prune_angle=40 -resolution=0 -support_angle=50 -top_bottom_pattern_0=lines -wall_thickness=1.2 -wall_transition_length=0.4 -ironing_only_highest_layer=False -raft_base_line_width=0.8 -acceleration_support_roof=3000 -support_tree_max_diameter=25 -min_even_wall_line_width=0.34 -prime_blob_enable=False -top_bottom_extruder_nr=-1 -support_tree_min_height_to_model=3 -ironing_enabled=True -wipe_move_distance=20 -speed_print=20 -infill_wall_line_count=0 -bridge_fan_speed_3=0 -support_tree_angle_slow=33.333333333333336 -raft_speed=10.0 -support_bottom_extruder_nr=0 -_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 -travel_retract_before_outer_wall=True -small_skin_width=0.8 -speed_roofing=10.0 -speed_prime_tower=20 -speed_support=20 -small_hole_max_size=0 -jerk_wall=20 -machine_nozzle_cool_down_speed=2.0 -material_standby_temperature=175 -cross_infill_pocket_size=8.0 -machine_shape=rectangular -infill_multiplier=1 -top_bottom=0 -draft_shield_dist=10 -machine_extruders_share_nozzle=False -meshfix_maximum_resolution=0.5 -min_bead_width=0.34 -support_interface_enable=False -_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 -magic_fuzzy_skin_point_dist=0.8 -jerk_print=20 -brim_smart_ordering=True -machine_use_extruder_offset_to_offset_coords=True -support_interface_extruder_nr=0 -infill_support_enabled=False -top_bottom_thickness=0.8 -material_guid=0ff92885-617b-4144-a03c-9989872454bc -platform_adhesion=0 -raft_base_speed=7.5 -jerk_travel_layer_0=30.0 -bridge_skin_material_flow_3=110 -wipe_hop_speed=10 -prime_tower_enable=False -acceleration_wall_x_roofing=3000 -support_roof_enable=False -acceleration_wall_0_roofing=3000 -machine_endstop_positive_direction_x=False -infill_mesh=False -bridge_skin_material_flow=60 -mold_roof_height=0.5 -machine_nozzle_tip_outer_diameter=1 -support_tree_branch_diameter_angle=7 -prime_tower_base_height=0.16 -support=0 -support_mesh=False -machine_firmware_retract=False -support_tree_angle=50 -support_tree_bp_diameter=7.5 -skirt_brim_speed=10.0 -support_interface_skip_height=0.16 -machine_nozzle_head_distance=3 -support_bottom_pattern=concentric -raft_base_wall_count=1 -min_infill_area=0 -support_line_width=0.4 -bridge_sparse_infill_max_density=0 -retraction_count_max=90 -jerk_infill=20 -infill_pattern=grid -adaptive_layer_height_variation_step=0.01 -acceleration_roofing=3000 -raft_interface_jerk=20 -retraction_speed=45 -extruder_prime_pos_y=0 -wall_0_material_flow=100 -machine_steps_per_mm_y=50 diff --git a/stress_benchmark/resources/061.wkt b/stress_benchmark/resources/061.wkt deleted file mode 100644 index 4c7c9843c2..0000000000 --- a/stress_benchmark/resources/061.wkt +++ /dev/null @@ -1 +0,0 @@ -MULTIPOLYGON () \ No newline at end of file diff --git a/stress_benchmark/resources/062.settings b/stress_benchmark/resources/062.settings index 19969a024d..cea763d01a 100644 --- a/stress_benchmark/resources/062.settings +++ b/stress_benchmark/resources/062.settings @@ -248,6 +248,7 @@ z_seam_corner=z_seam_corner_inner meshfix_fluid_motion_enabled=True machine_show_variants=False wall_overhang_angle=90 +seam_overhang_angle=30 z_seam_y=235.0 acceleration_skirt_brim=3000 skin_no_small_gaps_heuristic=False @@ -614,7 +615,6 @@ machine_firmware_retract=False support_tree_angle=50 support_tree_bp_diameter=7.5 skirt_brim_speed=30.0 -support_interface_skip_height=0.32 machine_nozzle_head_distance=3 support_bottom_pattern=concentric raft_base_wall_count=1 diff --git a/stress_benchmark/resources/062.wkt b/stress_benchmark/resources/062.wkt index e175d28303..5af57f9f58 100644 --- a/stress_benchmark/resources/062.wkt +++ b/stress_benchmark/resources/062.wkt @@ -1 +1 @@ -MULTIPOLYGON (((117731 159004, 118355 159216, 119096 159772, 119579 160364, 119988 161000, 120285 161602, 120591 162374, 120839 163186, 121007 164009, 121112 164827, 121135 165660, 121123 166475, 121064 167310, 120920 168160, 120772 168872, 120505 169745, 120087 170769, 119554 171662, 119032 172264, 118534 172693, 117932 172994, 117761 173021, 117503 172994, 117246 173022, 117075 172993, 116473 172692, 115948 172236, 115276 171409, 114901 170662, 114564 169932, 114256 168983, 114043 167998, 113942 167317, 113869 166505, 113867 165659, 113914 164837, 113997 164018, 114180 163180, 114413 162375, 114719 161603, 115020 161002, 115428 160366, 115903 159780, 116650 159212, 117241 158991))) \ No newline at end of file +MULTIPOLYGON (((117731 159004, 118355 159216, 119096 159772, 119579 160364, 119988 161000, 120285 161602, 120591 162374, 120839 163186, 121007 164009, 121112 164827, 121135 165660, 121123 166475, 121064 167310, 120920 168160, 120772 168872, 120505 169745, 120087 170769, 119554 171662, 119032 172264, 118534 172693, 117932 172994, 117761 173021, 117503 172994, 117246 173022, 117075 172993, 116473 172692, 115948 172236, 115276 171409, 114901 170662, 114564 169932, 114256 168983, 114043 167998, 113942 167317, 113869 166505, 113867 165659, 113914 164837, 113997 164018, 114180 163180, 114413 162375, 114719 161603, 115020 161002, 115428 160366, 115903 159780, 116650 159212, 117241 158991, 117731 159004))) \ No newline at end of file diff --git a/stress_benchmark/resources/063.settings b/stress_benchmark/resources/063.settings deleted file mode 100644 index f31688e84e..0000000000 --- a/stress_benchmark/resources/063.settings +++ /dev/null @@ -1,634 +0,0 @@ -material_maximum_park_duration=300 -support_bottom_stair_step_min_slope=10.0 -wipe_brush_pos_x=100 -extruder_prime_pos_abs=False -machine_scale_fan_speed_zero_to_one=False -support_zag_skip_count=0 -retraction_combing=off -material_bed_temperature=60 -ironing_inset=0.355 -speed_support_roof=100.0 -support_bottom_wall_count=0 -machine_max_feedrate_z=10 -wall_transition_angle=10 -coasting_min_volume=0.8 -wall_0_inset=0.025000000000000022 -xy_offset_layer_0=0 -support_tree_limit_branch_reach=True -bridge_skin_speed_2=37.5 -ooze_shield_angle=60 -expand_skins_expand_distance=1.15 -support_infill_rate=0 -ironing_flow=10.0 -cool_fan_enabled=True -minimum_bottom_area=1.0 -skirt_height=3 -material_extrusion_cool_down_speed=0.7 -wall_x_material_flow_layer_0=100 -minimum_support_area=0.0 -support_roof_wall_count=0 -lightning_infill_overhang_angle=40 -support_xy_overrides_z=z_overrides_xy -material_no_load_move_factor=0.940860215 -material_flow=100 -jerk_roofing=5 -material_is_support_material=False -support_fan_enable=False -machine_buildplate_type=glass -ironing_pattern=zigzag -acceleration_print=500 -machine_minimum_feedrate=0.0 -material_surface_energy=100 -jerk_wall_0_roofing=5 -support_tower_diameter=3.0 -carve_multiple_volumes=False -travel_avoid_supports=False -interlocking_beam_layer_count=2 -min_skin_width_for_expansion=4.898587196589413e-17 -material_break_temperature=50 -support_extruder_nr=0 -jerk_enabled=True -bridge_settings_enabled=False -material_final_print_temperature=185 -machine_max_feedrate_x=500 -clean_between_layers=False -support_tree_max_diameter_increase_by_merges_when_support_to_model=1 -speed_support_interface=100.0 -wall_0_material_flow_roofing=100 -speed_travel=200 -machine_max_acceleration_z=100 -layer_height_0=0.3 -skin_preshrink=1.15 -machine_depth=220 -small_skin_on_surface=False -nozzle_disallowed_areas=[] -bottom_skin_preshrink=1.15 -skirt_line_count=3 -skin_monotonic=False -skin_line_width=0.4 -material_break_preparation_speed=2 -infill_sparse_thickness=0.2 -wipe_retraction_extra_prime_amount=0 -coasting_speed=90 -nozzle_offsetting_for_disallowed_areas=True -brim_replaces_support=True -skirt_brim_minimal_length=250 -cooling=0 -default_material_print_temperature=200 -meshfix_maximum_extrusion_area_deviation=50000 -top_thickness=0.8 -group_outer_walls=True -cool_fan_speed=100 -raft_base_jerk=5 -retraction_enable=True -jerk_support_bottom=5 -skin_outline_count=1 -_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 -cool_min_speed=10 -travel_avoid_distance=0.625 -cool_min_layer_time_fan_speed_max=10 -machine_max_acceleration_e=5000 -infill_randomize_start_location=False -jerk_wall_x=5 -cool_min_layer_time=5 -speed_layer_0=75.0 -speed_wall_x_roofing=30 -_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False -raft_base_thickness=0.36 -retraction_hop_only_when_collides=False -infill_support_angle=40 -acceleration_prime_tower=500 -material_print_temperature=185 -machine_disallowed_areas=[] -retract_at_layer_change=True -support_roof_line_width=0.4 -travel=0 -meshfix_union_all=True -gradual_support_infill_step_height=1 -machine_steps_per_mm_e=1600 -raft_interface_layers=1 -raft_base_extruder_nr=0 -wipe_retraction_enable=True -switch_extruder_retraction_amount=16 -acceleration_travel_layer_0=1000 -material_bed_temp_wait=True -support_tower_roof_angle=65 -raft_interface_fan_speed=0 -z_seam_x=110.0 -support_interface_material_flow=100 -support_enable=True -extruder_prime_pos_z=0 -machine_heated_build_volume=False -support_bottom_line_distance=0.4 -initial_layer_line_width_factor=150 -conical_overhang_angle=50 -acceleration_support_infill=500 -min_wall_line_width=0.34 -draft_shield_height_limitation=full -bottom_layers=4 -wipe_retraction_retract_speed=30 -material_anti_ooze_retracted_position=-4 -layer_height=0.2 -support_roof_pattern=concentric -raft_interface_extruder_nr=0 -mesh_position_x=0 -meshfix_extensive_stitching=False -speed_wall=75.0 -support_bottom_distance=0 -material_shrinkage_percentage=100.0 -wall_distribution_count=1 -jerk_layer_0=5 -minimum_interface_area=1.0 -command_line_settings=0 -prime_tower_raft_base_line_spacing=1.6 -material_bed_temp_prepend=True -cool_fan_full_at_height=0.3 -meshfix_union_all_remove_holes=False -raft_interface_speed=56.25 -support_tree_branch_reach_limit=30 -support_structure=tree -machine_feeder_wheel_diameter=10.0 -skin_material_flow=100 -cutting_mesh=False -support_tower_maximum_supported_diameter=3.0 -material_name=empty -acceleration_support=500 -layer_start_x=0.0 -support_infill_sparse_thickness=0.2 -magic_spiralize=False -wall_transition_filter_distance=100 -jerk_travel=5 -support_tree_top_rate=30 -ironing_monotonic=False -support_interface_offset=0.0 -z_seam_position=back -raft_surface_fan_speed=0 -support_mesh_drop_down=True -infill_overlap=30.0 -speed_support_infill=150 -support_offset=0.0 -magic_fuzzy_skin_outside_only=False -interlocking_boundary_avoidance=2 -coasting_volume=0.064 -skin_overlap=10.0 -material_break_speed=25 -machine_width=220 -raft_smoothing=5 -material_break_preparation_temperature=185 -material_alternate_walls=False -retraction_extra_prime_amount=0 -skin_edge_support_thickness=0 -speed_topbottom=75.0 -wall_x_material_flow=100 -prime_tower_position_x=217.575 -acceleration_layer_0=500 -retraction_amount=0.5 -material_break_preparation_retracted_position=-16 -prime_tower_position_y=197.575 -jerk_support=5 -jerk_skirt_brim=5 -support_roof_density=100 -roofing_line_width=0.4 -material_flow_layer_0=100 -minimum_roof_area=1.0 -blackmagic=0 -raft_base_remove_inside_corners=False -raft_interface_remove_inside_corners=False -raft_surface_remove_inside_corners=False -support_interface_pattern=concentric -xy_offset=0 -prime_tower_brim_enable=False -support_xy_distance=0.7 -acceleration_travel_enabled=True -brim_outside_only=True -retraction_prime_speed=30 -roofing_pattern=lines -machine_nozzle_size=0.4 -support_bottom_height=1 -infill_wipe_dist=0.0 -raft_fan_speed=0 -machine_endstop_positive_direction_z=True -support_join_distance=2.0 -interlocking_orientation=22.5 -mold_width=5 -interlocking_depth=2 -roofing_layer_count=0 -support_infill_extruder_nr=0 -alternate_carve_order=True -hole_xy_offset=0 -magic_fuzzy_skin_point_density=1.25 -infill_sparse_density=15 -bridge_skin_density_2=75 -acceleration_support_bottom=500 -bridge_skin_density=100 -raft_airgap=0.3 -mold_angle=40 -quality_name=Draft -raft_base_margin=15 -raft_interface_margin=15 -raft_surface_margin=15 -speed_print_layer_0=75.0 -hole_xy_offset_max_diameter=0 -cool_fan_full_layer=2 -ooze_shield_dist=2 -support_line_distance=0 -zig_zaggify_infill=True -support_interface_line_width=0.4 -magic_mesh_surface_mode=normal -material_shrinkage_percentage_z=100.0 -machine_nozzle_expansion_angle=45 -multiple_mesh_overlap=0.15 -jerk_support_interface=5 -raft_surface_line_width=0.4 -support_supported_skin_fan_speed=100 -support_initial_layer_line_distance=0 -acceleration_enabled=True -smooth_spiralized_contours=True -travel_speed=120 -z_seam_corner=z_seam_corner_weighted -meshfix_fluid_motion_enabled=True -machine_show_variants=False -wall_overhang_angle=90 -z_seam_y=220 -acceleration_skirt_brim=500 -skin_no_small_gaps_heuristic=False -wall_line_width=0.4 -gradual_support_infill_steps=0 -machine_heated_bed=True -print_bed_temperature=60 -raft_surface_jerk=5 -machine_max_feedrate_y=500 -meshfix=0 -prime_tower_wipe_enabled=True -retraction_hop_enabled=True -wall_0_extruder_nr=-1 -support_interface_height=1 -wall_extruder_nr=-1 -adaptive_layer_height_enabled=False -material_type=empty -support_skip_zag_per_mm=20 -speed=0 -day=Mon -support_bottom_stair_step_width=5.0 -support_type=buildplate -raft_interface_line_width=0.8 -material_shrinkage_percentage_xy=100.0 -wipe_pause=0 -speed_slowdown_layers=2 -bridge_wall_min_length=2.1 -support_roof_line_distance=0.4 -zig_zaggify_support=False -support_z_distance=0.1 -support_bottom_enable=True -retraction_combing_max_distance=0 -conical_overhang_enabled=False -remove_empty_first_layers=True -machine_height=250 -acceleration_topbottom=500 -extruder_prime_pos_x=0 -coasting_enable=False -retraction_hop=0.4 -jerk_prime_tower=5 -cool_lift_head=False -support_tree_rest_preference=buildplate -material_brand=empty_brand -initial_bottom_layers=4 -wipe_retraction_prime_speed=30 -wall_overhang_speed_factor=100 -machine_heat_zone_length=16 -support_bottom_stair_step_height=0 -machine_nozzle_id=unknown -prime_tower_size=20 -speed_wall_0_roofing=25 -machine_always_write_active_tool=False -raft_base_fan_speed=0 -ooze_shield_enabled=False -max_skin_angle_for_expansion=90 -meshfix_maximum_travel_resolution=0.6666666666666666 -infill_offset_y=0 -cool_fan_speed_max=100 -material_print_temp_prepend=True -adhesion_extruder_nr=-1 -machine_name=SV01 -skirt_gap=0 -quality_changes_name=SV06 -bridge_fan_speed=100 -bridge_skin_speed=37.5 -infill_mesh_order=0 -support_roof_material_flow=100 -prime_tower_base_curve_magnitude=4 -jerk_print_layer_0=5 -infill_extruder_nr=-1 -wipe_repeat_count=5 -skin_material_flow_layer_0=100 -alternate_extra_perimeter=False -wall_0_material_flow_layer_0=100 -roofing_monotonic=True -machine_center_is_zero=False -support_wall_count=1 -raft_base_line_spacing=1.6 -jerk_wall_0=5 -machine_nozzle_heat_up_speed=2.0 -cool_fan_speed_0=0 -wall_line_count=3 -material_print_temperature_layer_0=185 -raft_surface_extruder_nr=0 -relative_extrusion=False -infill_before_walls=False -inset_direction=inside_out -wall_x_material_flow_roofing=100 -support_tree_tip_diameter=0.8 -jerk_ironing=5 -machine_max_feedrate_e=50 -wipe_retraction_amount=0.5 -support_use_towers=True -support_bottom_offset=0.0 -speed_wall_x=30 -infill_line_width=0.4 -wall_line_width_0=0.35 -acceleration_print_layer_0=500 -brim_gap=0 -jerk_topbottom=5 -center_object=False -connect_infill_polygons=False -material_flush_purge_speed=0.5 -acceleration_travel=1000 -support_roof_height=1 -cool_fan_speed_min=100 -support_material_flow=100 -bridge_skin_support_threshold=50 -adaptive_layer_height_threshold=0.2 -support_extruder_nr_layer_0=0 -brim_width=8.0 -support_bottom_density=100 -print_temperature=210 -acceleration_wall=500 -wall_material_flow=100 -raft_acceleration=500 -raft_interface_thickness=0.30000000000000004 -support_meshes_present=False -dual=0 -jerk_travel_enabled=True -support_interface_wall_count=0 -bridge_wall_material_flow=50 -lightning_infill_straightening_angle=40 -z_seam_relative=False -top_skin_expand_distance=1.15 -switch_extruder_extra_prime_amount=0 -prime_tower_line_width=0.4 -meshfix_fluid_motion_small_distance=0.01 -machine_endstop_positive_direction_y=False -mold_enabled=False -magic_fuzzy_skin_enabled=False -print_sequence=all_at_once -date=04-12-2023 -jerk_support_roof=5 -raft_surface_speed=75.0 -support_pattern=zigzag -switch_extruder_retraction_speeds=20 -sub_div_rad_add=0.4 -skin_overlap_mm=0.04 -small_feature_speed_factor=50 -wipe_hop_enable=True -support_xy_distance_overhang=0.2 -default_material_bed_temperature=60 -fill_outline_gaps=True -acceleration_wall_0=500 -support_interface_priority=interface_area_overwrite_support_area -bridge_skin_material_flow_2=100 -material_anti_ooze_retraction_speed=5 -support_bottom_material_flow=100 -prime_tower_flow=100 -acceleration_wall_x=500 -infill_overlap_mm=0.12 -support_tree_branch_diameter=5 -support_brim_width=1.7999999999999998 -gradual_infill_steps=0 -top_skin_preshrink=1.15 -jerk_wall_x_roofing=5 -machine_min_cool_heat_time_window=50.0 -machine_nozzle_temp_enabled=True -infill_enable_travel_optimization=False -machine_max_jerk_e=5 -top_layers=4 -meshfix_fluid_motion_shift_distance=0.1 -support_connect_zigzags=True -bridge_skin_density_3=80 -machine_max_acceleration_x=500 -support_roof_offset=0.0 -support_bottom_line_width=0.4 -machine_max_jerk_z=0.4 -switch_extruder_retraction_speed=20 -machine_settings=0 -flow_rate_extrusion_offset_factor=100 -material_initial_print_temperature=185 -layer_0_z_overlap=0.15 -material_adhesion_tendency=0 -cool_min_temperature=185 -material_end_of_filament_purge_length=20 -raft_interface_acceleration=500 -speed_travel_layer_0=100.0 -speed_ironing=50.0 -gantry_height=250 -bottom_skin_expand_distance=1.15 -min_feature_size=0.0875 -z_seam_type=back -prime_tower_base_size=8.0 -material_print_temp_wait=True -retraction_min_travel=0.8 -machine_extruders_shared_nozzle_initial_retraction=0 -interlocking_beam_width=0.7 -extruders_enabled_count=1 -raft_jerk=5 -max_extrusion_before_wipe=10 -draft_shield_height=10 -bottom_thickness=0.8 -skirt_brim_extruder_nr=-1 -support_brim_line_count=3 -build_volume_temperature=28 -wall_0_wipe_dist=0.0 -switch_extruder_prime_speed=20 -speed_infill=150 -raft_surface_thickness=0.2 -retraction_hop_after_extruder_switch_height=0.4 -machine_max_acceleration_y=500 -optimize_wall_printing_order=True -support_top_distance=0.1 -infill=0 -bridge_skin_speed_3=37.5 -machine_steps_per_mm_x=50 -material_bed_temperature_layer_0=60 -machine_acceleration=500 -machine_steps_per_mm_z=50 -skirt_brim_line_width=0.4 -skirt_brim_material_flow=100 -brim_line_count=14 -retraction_retract_speed=30 -raft_surface_line_spacing=0.4 -material=0 -material_crystallinity=False -top_bottom_pattern=lines -material_end_of_filament_purge_speed=0.5 -prime_tower_min_volume=6 -wipe_retraction_speed=30 -line_width=0.4 -acceleration_ironing=500 -bridge_wall_speed=12.5 -support_interface_density=100 -support_brim_enable=True -small_feature_speed_factor_0=50 -_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 -travel_avoid_other_parts=True -flow_rate_max_extrusion_offset=0 -connect_skin_polygons=False -wipe_hop_amount=0.4 -mesh_position_y=0 -retraction_hop_after_extruder_switch=True -machine_max_jerk_xy=10 -machine_extruder_count=1 -acceleration_infill=500 -roofing_material_flow=100 -gradual_infill_step_height=1.5 -adaptive_layer_height_variation=0.1 -small_feature_max_length=0.0 -material_break_retracted_position=-50 -skin_edge_support_layers=0 -ironing_line_spacing=0.1 -jerk_support_infill=5 -infill_offset_x=0 -min_odd_wall_line_width=0.34 -adhesion_type=skirt -speed_z_hop=10 -brim_inside_margin=2.5 -wall_x_extruder_nr=-1 -initial_extruder_nr=0 -speed_equalize_flow_width_factor=100.0 -infill_line_distance=2.6666666666666665 -lightning_infill_support_angle=40 -meshfix_maximum_deviation=0.025 -support_skip_some_zags=False -material_flush_purge_length=60 -support_conical_angle=30 -shell=0 -support_conical_min_width=5.0 -bridge_wall_coast=100 -slicing_tolerance=middle -mesh_position_z=0 -raft_surface_acceleration=500 -anti_overhang_mesh=False -infill_material_flow=100 -conical_overhang_hole_size=0 -roofing_extruder_nr=-1 -machine_extruders_share_heater=False -minimum_polygon_circumference=1.0 -draft_shield_enabled=False -raft_interface_line_spacing=1.0 -raft_base_acceleration=500 -wall_line_width_x=0.4 -acceleration_support_interface=500 -layer_start_y=0.0 -magic_fuzzy_skin_thickness=0.3 -support_conical_enabled=False -bridge_fan_speed_2=0 -retraction_extrusion_window=0.5 -speed_wall_0=25 -meshfix_fluid_motion_angle=15 -speed_support_bottom=100.0 -material_id=empty_material -raft_surface_layers=2 -experimental=0 -wall_transition_filter_deviation=0.1 -meshfix_keep_open_polygons=False -support_roof_extruder_nr=0 -interlocking_enable=False -material_diameter=1.75 -bridge_enable_more_layers=True -lightning_infill_prune_angle=40 -resolution=0 -support_angle=50 -top_bottom_pattern_0=lines -wall_thickness=0.8 -wall_transition_length=0.4 -ironing_only_highest_layer=False -raft_base_line_width=0.8 -acceleration_support_roof=500 -support_tree_max_diameter=25 -min_even_wall_line_width=0.34 -prime_blob_enable=False -top_bottom_extruder_nr=-1 -support_tree_min_height_to_model=3 -ironing_enabled=False -wipe_move_distance=20 -speed_print=150 -infill_wall_line_count=0 -bridge_fan_speed_3=0 -support_tree_angle_slow=33.333333333333336 -raft_speed=75.0 -support_bottom_extruder_nr=0 -_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 -travel_retract_before_outer_wall=False -small_skin_width=0.8 -speed_roofing=75.0 -speed_prime_tower=150 -speed_support=150 -small_hole_max_size=0 -jerk_wall=5 -machine_nozzle_cool_down_speed=2.0 -material_standby_temperature=175 -cross_infill_pocket_size=2.6666666666666665 -machine_shape=rectangular -infill_multiplier=1 -top_bottom=0 -draft_shield_dist=10 -machine_extruders_share_nozzle=False -meshfix_maximum_resolution=0.5 -min_bead_width=0.34 -support_interface_enable=True -_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 -magic_fuzzy_skin_point_dist=0.8 -jerk_print=5 -brim_smart_ordering=True -machine_use_extruder_offset_to_offset_coords=True -support_interface_extruder_nr=0 -infill_support_enabled=False -top_bottom_thickness=0.8 -material_guid=0ff92885-617b-4144-a03c-9989872454bc -platform_adhesion=0 -raft_base_speed=56.25 -jerk_travel_layer_0=5 -bridge_skin_material_flow_3=110 -wipe_hop_speed=10 -prime_tower_enable=False -acceleration_wall_x_roofing=500 -support_roof_enable=True -acceleration_wall_0_roofing=500 -machine_endstop_positive_direction_x=False -infill_mesh=False -bridge_skin_material_flow=60 -mold_roof_height=0.5 -machine_nozzle_tip_outer_diameter=1 -support_tree_branch_diameter_angle=7 -prime_tower_base_height=0.2 -support=0 -support_mesh=False -machine_firmware_retract=False -support_tree_angle=50 -support_tree_bp_diameter=7.5 -skirt_brim_speed=75.0 -support_interface_skip_height=0.2 -machine_nozzle_head_distance=3 -support_bottom_pattern=concentric -raft_base_wall_count=1 -min_infill_area=0 -support_line_width=0.4 -bridge_sparse_infill_max_density=0 -retraction_count_max=90 -jerk_infill=5 -infill_pattern=lines -adaptive_layer_height_variation_step=0.01 -acceleration_roofing=500 -raft_interface_jerk=5 -retraction_speed=30 -extruder_prime_pos_y=0 -wall_0_material_flow=100 -machine_steps_per_mm_y=50 diff --git a/stress_benchmark/resources/063.wkt b/stress_benchmark/resources/063.wkt deleted file mode 100644 index 4c7c9843c2..0000000000 --- a/stress_benchmark/resources/063.wkt +++ /dev/null @@ -1 +0,0 @@ -MULTIPOLYGON () \ No newline at end of file diff --git a/stress_benchmark/resources/064.settings b/stress_benchmark/resources/064.settings deleted file mode 100644 index 7cf1a24790..0000000000 --- a/stress_benchmark/resources/064.settings +++ /dev/null @@ -1,630 +0,0 @@ -material_maximum_park_duration=300 -support_bottom_stair_step_min_slope=20 -wipe_brush_pos_x=100 -extruder_prime_pos_abs=False -machine_scale_fan_speed_zero_to_one=False -support_zag_skip_count=10 -retraction_combing=noskin -material_bed_temperature=65 -ironing_inset=0.3 -speed_support_roof=25.0 -support_bottom_wall_count=0 -machine_max_feedrate_z=10 -wall_transition_angle=30 -coasting_min_volume=0.8 -wall_0_inset=0 -xy_offset_layer_0=0 -support_tree_limit_branch_reach=True -bridge_skin_speed_2=12.5 -ooze_shield_angle=60 -expand_skins_expand_distance=0.4 -support_infill_rate=20 -ironing_flow=14 -cool_fan_enabled=True -minimum_bottom_area=2 -skirt_height=3 -material_extrusion_cool_down_speed=0.7 -wall_x_material_flow_layer_0=85 -minimum_support_area=0 -support_roof_wall_count=0 -lightning_infill_overhang_angle=40 -support_xy_overrides_z=xy_overrides_z -material_no_load_move_factor=0.940860215 -material_flow=90 -jerk_roofing=8 -material_is_support_material=False -support_fan_enable=False -machine_buildplate_type=glass -ironing_pattern=concentric -acceleration_print=400 -machine_minimum_feedrate=0.0 -material_surface_energy=100 -jerk_wall_0_roofing=8 -support_tower_diameter=3.0 -carve_multiple_volumes=False -travel_avoid_supports=True -interlocking_beam_layer_count=2 -min_skin_width_for_expansion=9.797174393178826e-18 -material_break_temperature=50 -support_extruder_nr=0 -jerk_enabled=False -bridge_settings_enabled=False -material_final_print_temperature=185 -machine_max_feedrate_x=500 -clean_between_layers=False -support_tree_max_diameter_increase_by_merges_when_support_to_model=1 -speed_support_interface=25.0 -wall_0_material_flow_roofing=85.0 -speed_travel=100 -machine_max_acceleration_z=100 -layer_height_0=0.28 -skin_preshrink=0.4 -machine_depth=235 -small_skin_on_surface=False -nozzle_disallowed_areas=[] -bottom_skin_preshrink=0.4 -skirt_line_count=3 -skin_monotonic=True -skin_line_width=0.4 -material_break_preparation_speed=2 -infill_sparse_thickness=0.16 -wipe_retraction_extra_prime_amount=0 -coasting_speed=90 -nozzle_offsetting_for_disallowed_areas=True -brim_replaces_support=True -skirt_brim_minimal_length=250 -cooling=0 -default_material_print_temperature=200 -meshfix_maximum_extrusion_area_deviation=50000 -top_thickness=0.4 -group_outer_walls=True -cool_fan_speed=100 -raft_base_jerk=8 -retraction_enable=True -jerk_support_bottom=8 -skin_outline_count=1 -_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 -cool_min_speed=10 -travel_avoid_distance=0.625 -cool_min_layer_time_fan_speed_max=10 -machine_max_acceleration_e=5000 -infill_randomize_start_location=False -jerk_wall_x=8 -cool_min_layer_time=10 -speed_layer_0=10 -speed_wall_x_roofing=25 -_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False -raft_base_thickness=0.336 -retraction_hop_only_when_collides=False -infill_support_angle=40 -acceleration_prime_tower=400 -material_print_temperature=185 -retract_at_layer_change=False -support_roof_line_width=0.4 -travel=0 -meshfix_union_all=True -gradual_support_infill_step_height=1 -machine_steps_per_mm_e=1600 -raft_interface_layers=1 -raft_base_extruder_nr=0 -wipe_retraction_enable=True -switch_extruder_retraction_amount=16 -acceleration_travel_layer_0=250 -material_bed_temp_wait=True -support_tower_roof_angle=65 -raft_interface_fan_speed=0 -z_seam_x=117.5 -support_interface_material_flow=90 -support_enable=False -extruder_prime_pos_z=0 -machine_heated_build_volume=False -support_bottom_line_distance=2.4000240002400024 -initial_layer_line_width_factor=150 -conical_overhang_angle=50 -acceleration_support_infill=400 -min_wall_line_width=0.34 -draft_shield_height_limitation=full -bottom_layers=2 -wipe_retraction_retract_speed=45 -material_anti_ooze_retracted_position=-4 -layer_height=0.04 -support_roof_pattern=grid -raft_interface_extruder_nr=0 -mesh_position_x=0 -meshfix_extensive_stitching=False -speed_wall=25.0 -support_bottom_distance=0.08 -material_shrinkage_percentage=100.0 -wall_distribution_count=2 -jerk_layer_0=2 -minimum_interface_area=2 -command_line_settings=0 -prime_tower_raft_base_line_spacing=1.6 -material_bed_temp_prepend=True -cool_fan_full_at_height=2 -meshfix_union_all_remove_holes=False -raft_interface_speed=18.75 -support_tree_branch_reach_limit=30 -support_structure=tree -machine_feeder_wheel_diameter=10.0 -skin_material_flow=85 -cutting_mesh=False -support_tower_maximum_supported_diameter=3.0 -material_name=empty -acceleration_support=400 -layer_start_x=0.0 -support_infill_sparse_thickness=0.04 -magic_spiralize=False -wall_transition_filter_distance=100 -jerk_travel=8 -support_tree_top_rate=30 -ironing_monotonic=True -support_interface_offset=0.0 -z_seam_position=back -raft_surface_fan_speed=0 -support_mesh_drop_down=False -infill_overlap=30.0 -speed_support_infill=40 -support_offset=0.0 -magic_fuzzy_skin_outside_only=False -interlocking_boundary_avoidance=2 -coasting_volume=0.064 -skin_overlap=10.0 -material_break_speed=25 -machine_width=235 -raft_smoothing=5 -material_break_preparation_temperature=185 -material_alternate_walls=True -retraction_extra_prime_amount=0 -skin_edge_support_thickness=0 -speed_topbottom=25.0 -wall_x_material_flow=85.0 -prime_tower_position_x=226.0 -acceleration_layer_0=400 -retraction_amount=5 -material_break_preparation_retracted_position=-16 -prime_tower_position_y=206.0 -jerk_support=8 -jerk_skirt_brim=8 -support_roof_density=33.333 -roofing_line_width=0.4 -material_flow_layer_0=85 -minimum_roof_area=2 -blackmagic=0 -raft_base_remove_inside_corners=False -raft_interface_remove_inside_corners=False -raft_surface_remove_inside_corners=False -support_interface_pattern=grid -xy_offset=0 -prime_tower_brim_enable=True -support_xy_distance=0.0 -acceleration_travel_enabled=True -brim_outside_only=False -retraction_prime_speed=45 -roofing_pattern=concentric -machine_nozzle_size=0.4 -support_bottom_height=0.16 -infill_wipe_dist=0.0 -raft_fan_speed=0 -machine_endstop_positive_direction_z=True -support_join_distance=2.0 -interlocking_orientation=22.5 -mold_width=5 -interlocking_depth=2 -roofing_layer_count=1 -support_infill_extruder_nr=0 -alternate_carve_order=False -hole_xy_offset=0 -magic_fuzzy_skin_point_density=1.25 -infill_sparse_density=100 -bridge_skin_density_2=75 -acceleration_support_bottom=400 -bridge_skin_density=100 -raft_airgap=0.3 -mold_angle=40 -raft_base_margin=15 -raft_interface_margin=15 -raft_surface_margin=15 -speed_print_layer_0=10 -hole_xy_offset_max_diameter=0 -cool_fan_full_layer=45 -ooze_shield_dist=2 -support_line_distance=2.0 -zig_zaggify_infill=True -support_interface_line_width=0.4 -magic_mesh_surface_mode=normal -material_shrinkage_percentage_z=100.0 -machine_nozzle_expansion_angle=45 -multiple_mesh_overlap=0.15 -jerk_support_interface=8 -raft_surface_line_width=0.4 -support_supported_skin_fan_speed=100 -support_initial_layer_line_distance=2.0 -acceleration_enabled=True -smooth_spiralized_contours=True -travel_speed=150.0 -z_seam_corner=z_seam_corner_weighted -meshfix_fluid_motion_enabled=True -machine_show_variants=False -wall_overhang_angle=90 -z_seam_y=235 -acceleration_skirt_brim=400 -skin_no_small_gaps_heuristic=False -wall_line_width=0.4 -gradual_support_infill_steps=0 -machine_heated_bed=True -print_bed_temperature=65 -raft_surface_jerk=8 -machine_max_feedrate_y=500 -meshfix=0 -prime_tower_wipe_enabled=True -retraction_hop_enabled=False -wall_0_extruder_nr=-1 -support_interface_height=0.16 -wall_extruder_nr=-1 -adaptive_layer_height_enabled=False -material_type=empty -support_skip_zag_per_mm=20 -speed=0 -day=Mon -support_bottom_stair_step_width=5.0 -support_type=everywhere -raft_interface_line_width=0.8 -material_shrinkage_percentage_xy=100.0 -wipe_pause=0 -speed_slowdown_layers=2 -bridge_wall_min_length=1.4 -support_roof_line_distance=2.4000240002400024 -zig_zaggify_support=False -support_z_distance=0.08 -support_bottom_enable=True -retraction_combing_max_distance=30 -conical_overhang_enabled=False -remove_empty_first_layers=True -machine_height=250 -acceleration_topbottom=400 -extruder_prime_pos_x=0 -coasting_enable=True -retraction_hop=0.2 -jerk_prime_tower=8 -cool_lift_head=False -support_tree_rest_preference=graceful -material_brand=empty_brand -initial_bottom_layers=2 -wipe_retraction_prime_speed=45 -wall_overhang_speed_factor=100 -machine_heat_zone_length=16 -support_bottom_stair_step_height=0 -machine_nozzle_id=unknown -prime_tower_size=20 -speed_wall_0_roofing=20 -machine_always_write_active_tool=False -raft_base_fan_speed=0 -ooze_shield_enabled=False -max_skin_angle_for_expansion=90 -meshfix_maximum_travel_resolution=0.25 -infill_offset_y=0 -cool_fan_speed_max=100 -material_print_temp_prepend=True -adhesion_extruder_nr=-1 -skirt_gap=10.0 -bridge_fan_speed=100 -bridge_skin_speed=12.5 -infill_mesh_order=0 -support_roof_material_flow=90 -prime_tower_base_curve_magnitude=4 -jerk_print_layer_0=2 -infill_extruder_nr=-1 -wipe_repeat_count=5 -skin_material_flow_layer_0=80 -alternate_extra_perimeter=True -wall_0_material_flow_layer_0=85 -roofing_monotonic=True -machine_center_is_zero=False -support_wall_count=0 -raft_base_line_spacing=1.6 -jerk_wall_0=8 -machine_nozzle_heat_up_speed=2.0 -cool_fan_speed_0=0 -wall_line_count=1 -material_print_temperature_layer_0=185 -raft_surface_extruder_nr=0 -relative_extrusion=False -infill_before_walls=False -inset_direction=outside_in -wall_x_material_flow_roofing=85.0 -support_tree_tip_diameter=0.8 -jerk_ironing=8 -machine_max_feedrate_e=50 -wipe_retraction_amount=5 -support_use_towers=True -support_bottom_offset=0.0 -speed_wall_x=25 -infill_line_width=0.4 -wall_line_width_0=0.4 -acceleration_print_layer_0=400 -brim_gap=0.8 -jerk_topbottom=8 -center_object=False -connect_infill_polygons=False -material_flush_purge_speed=0.5 -acceleration_travel=250 -support_roof_height=0.16 -cool_fan_speed_min=100 -support_material_flow=90 -bridge_skin_support_threshold=50 -adaptive_layer_height_threshold=0.1 -support_extruder_nr_layer_0=0 -brim_width=8.0 -support_bottom_density=33.333 -print_temperature=210 -acceleration_wall=400 -wall_material_flow=85.0 -raft_acceleration=400 -raft_interface_thickness=0.06 -support_meshes_present=True -dual=0 -jerk_travel_enabled=True -support_interface_wall_count=0 -bridge_wall_material_flow=50 -lightning_infill_straightening_angle=40 -z_seam_relative=False -top_skin_expand_distance=0.4 -switch_extruder_extra_prime_amount=0 -prime_tower_line_width=0.4 -meshfix_fluid_motion_small_distance=0.01 -machine_endstop_positive_direction_y=False -mold_enabled=False -magic_fuzzy_skin_enabled=False -print_sequence=all_at_once -date=04-12-2023 -jerk_support_roof=8 -raft_surface_speed=25.0 -support_pattern=zigzag -switch_extruder_retraction_speeds=20 -sub_div_rad_add=0.4 -skin_overlap_mm=0 -small_feature_speed_factor=50 -wipe_hop_enable=False -support_xy_distance_overhang=0.4 -default_material_bed_temperature=50 -fill_outline_gaps=False -acceleration_wall_0=400 -support_interface_priority=interface_area_overwrite_support_area -bridge_skin_material_flow_2=100 -material_anti_ooze_retraction_speed=5 -support_bottom_material_flow=90 -prime_tower_flow=90 -acceleration_wall_x=400 -infill_overlap_mm=0 -support_tree_branch_diameter=5 -support_brim_width=4 -gradual_infill_steps=0 -top_skin_preshrink=0.4 -jerk_wall_x_roofing=8 -machine_min_cool_heat_time_window=50.0 -machine_nozzle_temp_enabled=True -infill_enable_travel_optimization=False -machine_max_jerk_e=5 -top_layers=4 -meshfix_fluid_motion_shift_distance=0.1 -support_connect_zigzags=True -bridge_skin_density_3=80 -machine_max_acceleration_x=500 -support_roof_offset=0.0 -support_bottom_line_width=0.4 -machine_max_jerk_z=0.4 -switch_extruder_retraction_speed=20 -machine_settings=0 -flow_rate_extrusion_offset_factor=100 -material_initial_print_temperature=185 -layer_0_z_overlap=0.15 -material_adhesion_tendency=0 -cool_min_temperature=185 -material_end_of_filament_purge_length=20 -raft_interface_acceleration=400 -speed_travel_layer_0=50 -speed_ironing=10 -gantry_height=25 -bottom_skin_expand_distance=0.4 -min_feature_size=0 -z_seam_type=shortest -prime_tower_base_size=8.0 -material_print_temp_wait=True -retraction_min_travel=1.5 -machine_extruders_shared_nozzle_initial_retraction=0 -interlocking_beam_width=0.8 -extruders_enabled_count=1 -raft_jerk=8 -max_extrusion_before_wipe=10 -draft_shield_height=10 -bottom_thickness=0.4 -skirt_brim_extruder_nr=-1 -support_brim_line_count=7 -build_volume_temperature=28 -wall_0_wipe_dist=0.0 -switch_extruder_prime_speed=20 -speed_infill=75 -raft_surface_thickness=0.04 -retraction_hop_after_extruder_switch_height=0.2 -machine_max_acceleration_y=500 -optimize_wall_printing_order=True -support_top_distance=0.2 -infill=0 -bridge_skin_speed_3=12.5 -machine_steps_per_mm_x=50 -material_bed_temperature_layer_0=70 -machine_acceleration=500 -machine_steps_per_mm_z=50 -skirt_brim_line_width=0.4 -skirt_brim_material_flow=90 -brim_line_count=14 -retraction_retract_speed=45 -raft_surface_line_spacing=0.4 -material=0 -material_crystallinity=False -top_bottom_pattern=concentric -material_end_of_filament_purge_speed=0.5 -prime_tower_min_volume=6 -wipe_retraction_speed=45 -line_width=0.4 -acceleration_ironing=400 -bridge_wall_speed=10 -support_interface_density=33.333 -support_brim_enable=True -small_feature_speed_factor_0=50 -_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 -travel_avoid_other_parts=True -flow_rate_max_extrusion_offset=0 -connect_skin_polygons=False -wipe_hop_amount=0.2 -mesh_position_y=0 -retraction_hop_after_extruder_switch=True -machine_max_jerk_xy=10 -machine_extruder_count=1 -acceleration_infill=400 -roofing_material_flow=85 -gradual_infill_step_height=1.5 -adaptive_layer_height_variation=0.06 -small_feature_max_length=0.0 -material_break_retracted_position=-50 -skin_edge_support_layers=0 -ironing_line_spacing=0.1 -jerk_support_infill=8 -infill_offset_x=0 -min_odd_wall_line_width=0.34 -adhesion_type=brim -speed_z_hop=5 -brim_inside_margin=2.5 -wall_x_extruder_nr=-1 -initial_extruder_nr=0 -speed_equalize_flow_width_factor=100.0 -infill_line_distance=0.4 -lightning_infill_support_angle=40 -meshfix_maximum_deviation=0.01 -support_skip_some_zags=False -material_flush_purge_length=60 -support_conical_angle=30 -shell=0 -support_conical_min_width=5.0 -bridge_wall_coast=100 -slicing_tolerance=inclusive -mesh_position_z=0 -raft_surface_acceleration=400 -anti_overhang_mesh=False -infill_material_flow=90 -conical_overhang_hole_size=0 -roofing_extruder_nr=-1 -machine_extruders_share_heater=False -minimum_polygon_circumference=1.0 -draft_shield_enabled=False -raft_interface_line_spacing=1.0 -raft_base_acceleration=400 -wall_line_width_x=0.4 -acceleration_support_interface=400 -layer_start_y=0.0 -magic_fuzzy_skin_thickness=0.3 -support_conical_enabled=False -bridge_fan_speed_2=0 -retraction_extrusion_window=10 -speed_wall_0=20 -meshfix_fluid_motion_angle=15 -speed_support_bottom=25.0 -material_id=empty_material -raft_surface_layers=2 -experimental=0 -wall_transition_filter_deviation=0.1 -meshfix_keep_open_polygons=False -support_roof_extruder_nr=0 -interlocking_enable=False -material_diameter=1.75 -bridge_enable_more_layers=True -lightning_infill_prune_angle=40 -resolution=0 -support_angle=60 -top_bottom_pattern_0=concentric -wall_thickness=0.8 -wall_transition_length=0.4 -ironing_only_highest_layer=False -raft_base_line_width=0.8 -acceleration_support_roof=400 -support_tree_max_diameter=25 -min_even_wall_line_width=0.34 -prime_blob_enable=False -top_bottom_extruder_nr=-1 -support_tree_min_height_to_model=3 -ironing_enabled=True -wipe_move_distance=20 -speed_print=50 -infill_wall_line_count=0 -bridge_fan_speed_3=0 -support_tree_angle_slow=40.0 -raft_speed=25.0 -support_bottom_extruder_nr=0 -_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 -travel_retract_before_outer_wall=True -small_skin_width=0.8 -speed_roofing=25.0 -speed_prime_tower=25.0 -speed_support=40 -small_hole_max_size=0 -jerk_wall=8 -machine_nozzle_cool_down_speed=2.0 -material_standby_temperature=180 -cross_infill_pocket_size=0.4 -machine_shape=rectangular -infill_multiplier=1 -top_bottom=0 -draft_shield_dist=10 -machine_extruders_share_nozzle=False -meshfix_maximum_resolution=0.25 -min_bead_width=0.2 -support_interface_enable=True -_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 -magic_fuzzy_skin_point_dist=0.8 -jerk_print=8 -brim_smart_ordering=True -machine_use_extruder_offset_to_offset_coords=True -support_interface_extruder_nr=0 -infill_support_enabled=False -top_bottom_thickness=0.4 -material_guid=0ff92885-617b-4144-a03c-9989872454bc -platform_adhesion=0 -raft_base_speed=18.75 -jerk_travel_layer_0=8 -bridge_skin_material_flow_3=110 -wipe_hop_speed=5 -prime_tower_enable=False -acceleration_wall_x_roofing=400 -support_roof_enable=True -acceleration_wall_0_roofing=400 -machine_endstop_positive_direction_x=False -infill_mesh=False -bridge_skin_material_flow=60 -mold_roof_height=0.5 -machine_nozzle_tip_outer_diameter=1 -support_tree_branch_diameter_angle=7 -prime_tower_base_height=0.04 -support=0 -support_mesh=True -machine_firmware_retract=False -support_tree_angle=60 -support_tree_bp_diameter=7.5 -skirt_brim_speed=30 -support_interface_skip_height=0.04 -machine_nozzle_head_distance=3 -support_bottom_pattern=grid -raft_base_wall_count=1 -min_infill_area=0 -support_line_width=0.4 -bridge_sparse_infill_max_density=0 -retraction_count_max=100 -jerk_infill=8 -infill_pattern=concentric -adaptive_layer_height_variation_step=0.02 -acceleration_roofing=400 -raft_interface_jerk=8 -retraction_speed=45 -extruder_prime_pos_y=0 -wall_0_material_flow=85.0 -machine_steps_per_mm_y=50 diff --git a/stress_benchmark/resources/064.wkt b/stress_benchmark/resources/064.wkt deleted file mode 100644 index 4c7c9843c2..0000000000 --- a/stress_benchmark/resources/064.wkt +++ /dev/null @@ -1 +0,0 @@ -MULTIPOLYGON () \ No newline at end of file diff --git a/stress_benchmark/resources/065.settings b/stress_benchmark/resources/065.settings index 0515cd4b53..8cda003e03 100644 --- a/stress_benchmark/resources/065.settings +++ b/stress_benchmark/resources/065.settings @@ -251,6 +251,7 @@ z_seam_corner=z_seam_corner_none meshfix_fluid_motion_enabled=True machine_show_variants=False wall_overhang_angle=90 +seam_overhang_angle=30 z_seam_y=240 acceleration_skirt_brim=1000 skin_no_small_gaps_heuristic=False @@ -616,7 +617,6 @@ support_tree_angle=45 skin_angles=[] support_tree_bp_diameter=7.5 skirt_brim_speed=12.5 -support_interface_skip_height=0.1 machine_nozzle_head_distance=3 support_bottom_pattern=zigzag raft_base_wall_count=1 diff --git a/stress_benchmark/resources/065.wkt b/stress_benchmark/resources/065.wkt index 2bd28248dc..257e50a616 100644 --- a/stress_benchmark/resources/065.wkt +++ b/stress_benchmark/resources/065.wkt @@ -1 +1 @@ -MULTIPOLYGON (((274498 215057, 273516 215059, 273386 154809, 274368 154807))) \ No newline at end of file +MULTIPOLYGON (((274498 215057, 273516 215059, 273386 154809, 274368 154807, 274498 215057))) \ No newline at end of file diff --git a/stress_benchmark/resources/066.settings b/stress_benchmark/resources/066.settings index 79f3d54d8b..664a9c8519 100644 --- a/stress_benchmark/resources/066.settings +++ b/stress_benchmark/resources/066.settings @@ -251,6 +251,7 @@ z_seam_corner=z_seam_corner_none meshfix_fluid_motion_enabled=True machine_show_variants=False wall_overhang_angle=90 +seam_overhang_angle=30 z_seam_y=240 acceleration_skirt_brim=1000 skin_no_small_gaps_heuristic=False @@ -616,7 +617,6 @@ support_tree_angle=45 skin_angles=[] support_tree_bp_diameter=7.5 skirt_brim_speed=16.0 -support_interface_skip_height=0.1 machine_nozzle_head_distance=3 support_bottom_pattern=zigzag raft_base_wall_count=1 diff --git a/stress_benchmark/resources/066.wkt b/stress_benchmark/resources/066.wkt index d6e42e98b8..2b8fd20a1c 100644 --- a/stress_benchmark/resources/066.wkt +++ b/stress_benchmark/resources/066.wkt @@ -1 +1 @@ -MULTIPOLYGON (((165244 101743, 166738 102904, 168150 104230, 169007 105191, 169408 105703, 170133 106774, 170747 107915, 171234 109121, 171233 109121, 171566 110378, 171739 111665, 171739 112964, 171566 114255, 171420 114890, 171007 116119, 170456 117295, 170134 117856, 169408 118928, 169007 119437, 168148 120402, 166736 121725, 165241 122886, 163055 124308, 160799 125534, 159056 126359, 154895 128035, 151213 129265, 151213 127699, 154394 126638, 158466 124997, 158467 124997, 160131 124206, 162297 123030, 162298 123029, 164381 121675, 165773 120594, 165775 120593, 167084 119362, 167868 118486, 167869 118485, 168206 118053, 168874 117070, 168875 117069, 169138 116606, 169627 115567, 169627 115565, 169988 114484, 170105 113988, 170106 113986, 170256 112867, 170256 111761, 170108 110664, 170108 110662, 169823 109589, 169822 109588, 169403 108545, 169403 108544, 168863 107543, 168862 107542, 168206 106577, 167869 106146, 167868 106145, 167083 105265, 165773 104035, 165772 104034, 164378 102952, 163199 102179, 163200 100401))) \ No newline at end of file +MULTIPOLYGON (((165244 101743, 166738 102904, 168150 104230, 169007 105191, 169408 105703, 170133 106774, 170747 107915, 171234 109121, 171233 109121, 171566 110378, 171739 111665, 171739 112964, 171566 114255, 171420 114890, 171007 116119, 170456 117295, 170134 117856, 169408 118928, 169007 119437, 168148 120402, 166736 121725, 165241 122886, 163055 124308, 160799 125534, 159056 126359, 154895 128035, 151213 129265, 151213 127699, 154394 126638, 158466 124997, 158467 124997, 160131 124206, 162297 123030, 162298 123029, 164381 121675, 165773 120594, 165775 120593, 167084 119362, 167868 118486, 167869 118485, 168206 118053, 168874 117070, 168875 117069, 169138 116606, 169627 115567, 169627 115565, 169988 114484, 170105 113988, 170106 113986, 170256 112867, 170256 111761, 170108 110664, 170108 110662, 169823 109589, 169822 109588, 169403 108545, 169403 108544, 168863 107543, 168862 107542, 168206 106577, 167869 106146, 167868 106145, 167083 105265, 165773 104035, 165772 104034, 164378 102952, 163199 102179, 163200 100401, 165244 101743))) \ No newline at end of file diff --git a/stress_benchmark/resources/067.settings b/stress_benchmark/resources/067.settings deleted file mode 100644 index 1f04d38ae0..0000000000 --- a/stress_benchmark/resources/067.settings +++ /dev/null @@ -1,633 +0,0 @@ -material_maximum_park_duration=300 -support_bottom_stair_step_min_slope=10.0 -wipe_brush_pos_x=100 -extruder_prime_pos_abs=False -machine_scale_fan_speed_zero_to_one=False -support_zag_skip_count=0 -retraction_combing=noskin -material_bed_temperature=60.0 -ironing_inset=0.4275 -speed_support_roof=45 -support_bottom_wall_count=0 -machine_max_feedrate_z=10 -wall_transition_angle=10 -coasting_min_volume=0.8 -wall_0_inset=0 -xy_offset_layer_0=-0.15 -support_tree_limit_branch_reach=True -bridge_skin_speed_2=22.5 -ooze_shield_angle=60 -expand_skins_expand_distance=1.45 -support_infill_rate=0 -ironing_flow=10.0 -cool_fan_enabled=True -minimum_bottom_area=10 -skirt_height=3 -material_extrusion_cool_down_speed=0.7 -wall_x_material_flow_layer_0=100 -minimum_support_area=0 -support_roof_wall_count=0 -lightning_infill_overhang_angle=40 -support_xy_overrides_z=xy_overrides_z -material_no_load_move_factor=0.940860215 -material_flow=100 -jerk_roofing=20 -material_is_support_material=False -support_fan_enable=False -machine_buildplate_type=glass -ironing_pattern=zigzag -acceleration_print=500.0 -machine_minimum_feedrate=0.0 -material_surface_energy=100 -jerk_wall_0_roofing=20 -support_tower_diameter=3.0 -carve_multiple_volumes=False -travel_avoid_supports=True -interlocking_beam_layer_count=2 -min_skin_width_for_expansion=5.143516556418884e-17 -material_break_temperature=50 -support_extruder_nr=0 -jerk_enabled=True -bridge_settings_enabled=False -material_final_print_temperature=205.0 -machine_max_feedrate_x=500 -clean_between_layers=False -support_tree_max_diameter_increase_by_merges_when_support_to_model=1 -speed_support_interface=45 -wall_0_material_flow_roofing=90 -speed_travel=150.0 -machine_max_acceleration_z=100 -layer_height_0=0.28 -skin_preshrink=1.45 -machine_depth=235 -small_skin_on_surface=False -nozzle_disallowed_areas=[] -bottom_skin_preshrink=1.45 -skirt_line_count=3 -skin_monotonic=False -skin_line_width=0.45 -material_break_preparation_speed=2 -infill_sparse_thickness=0.3 -wipe_retraction_extra_prime_amount=0 -coasting_speed=90 -nozzle_offsetting_for_disallowed_areas=True -brim_replaces_support=False -skirt_brim_minimal_length=250 -cooling=0 -default_material_print_temperature=200 -meshfix_maximum_extrusion_area_deviation=50000 -top_thickness=1.12 -group_outer_walls=True -cool_fan_speed=100 -raft_base_jerk=20 -retraction_enable=True -jerk_support_bottom=20 -skin_outline_count=1 -_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 -cool_min_speed=10 -travel_avoid_distance=0.625 -cool_min_layer_time_fan_speed_max=10 -machine_max_acceleration_e=5000 -infill_randomize_start_location=False -jerk_wall_x=20 -cool_min_layer_time=10 -speed_layer_0=25 -speed_wall_x_roofing=65 -_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False -raft_base_thickness=0.336 -retraction_hop_only_when_collides=False -infill_support_angle=40 -acceleration_prime_tower=500.0 -material_print_temperature=205.0 -machine_disallowed_areas=[] -retract_at_layer_change=False -support_roof_line_width=0.45 -travel=0 -meshfix_union_all=True -gradual_support_infill_step_height=1 -machine_steps_per_mm_e=1600 -raft_interface_layers=1 -raft_base_extruder_nr=0 -wipe_retraction_enable=True -switch_extruder_retraction_amount=16 -acceleration_travel_layer_0=500.0 -material_bed_temp_wait=True -support_tower_roof_angle=65 -raft_interface_fan_speed=0 -z_seam_x=117.5 -support_interface_material_flow=100 -support_enable=True -extruder_prime_pos_z=0 -machine_heated_build_volume=False -support_bottom_line_distance=2.7000270002700026 -initial_layer_line_width_factor=100.0 -conical_overhang_angle=50 -acceleration_support_infill=500.0 -min_wall_line_width=0.34 -draft_shield_height_limitation=full -bottom_layers=3 -wipe_retraction_retract_speed=35.0 -material_anti_ooze_retracted_position=-4 -layer_height=0.28 -support_roof_pattern=grid -raft_interface_extruder_nr=0 -mesh_position_x=0 -meshfix_extensive_stitching=False -speed_wall=30.0 -support_bottom_distance=0 -material_shrinkage_percentage=100.0 -wall_distribution_count=1 -jerk_layer_0=8 -minimum_interface_area=10 -command_line_settings=0 -prime_tower_raft_base_line_spacing=1.6 -material_bed_temp_prepend=False -cool_fan_full_at_height=0.8400000000000001 -meshfix_union_all_remove_holes=False -raft_interface_speed=22.5 -support_tree_branch_reach_limit=30 -support_structure=tree -machine_feeder_wheel_diameter=10.0 -skin_material_flow=100 -cutting_mesh=False -support_tower_maximum_supported_diameter=3.0 -material_name=empty -acceleration_support=500.0 -layer_start_x=0.0 -support_infill_sparse_thickness=0.28 -magic_spiralize=False -wall_transition_filter_distance=100 -jerk_travel=20 -support_tree_top_rate=30 -ironing_monotonic=False -support_interface_offset=0.0 -z_seam_position=back -raft_surface_fan_speed=0 -support_mesh_drop_down=True -infill_overlap=0 -speed_support_infill=50 -support_offset=0.0 -magic_fuzzy_skin_outside_only=False -interlocking_boundary_avoidance=2 -coasting_volume=0.064 -skin_overlap=30.0 -material_break_speed=25 -machine_width=235 -raft_smoothing=5 -material_break_preparation_temperature=205.0 -material_alternate_walls=False -retraction_extra_prime_amount=0 -skin_edge_support_thickness=0 -speed_topbottom=45 -wall_x_material_flow=90 -prime_tower_position_x=223.025 -acceleration_layer_0=500.0 -retraction_amount=1.4 -material_break_preparation_retracted_position=-16 -prime_tower_position_y=203.025 -jerk_support=20 -jerk_skirt_brim=8 -support_roof_density=33.333 -roofing_line_width=0.45 -material_flow_layer_0=100 -minimum_roof_area=10 -blackmagic=0 -raft_base_remove_inside_corners=False -raft_interface_remove_inside_corners=False -raft_surface_remove_inside_corners=False -support_interface_pattern=grid -xy_offset=0 -prime_tower_brim_enable=False -support_xy_distance=0.9 -acceleration_travel_enabled=True -brim_outside_only=True -retraction_prime_speed=35.0 -roofing_pattern=lines -machine_nozzle_size=0.4 -support_bottom_height=1.12 -infill_wipe_dist=0.0 -raft_fan_speed=0 -machine_endstop_positive_direction_z=True -support_join_distance=2.0 -interlocking_orientation=22.5 -mold_width=5 -interlocking_depth=2 -roofing_layer_count=1 -support_infill_extruder_nr=0 -alternate_carve_order=True -hole_xy_offset=0 -magic_fuzzy_skin_point_density=1.25 -infill_sparse_density=20.0 -bridge_skin_density_2=75 -acceleration_support_bottom=500.0 -bridge_skin_density=100 -raft_airgap=0.3 -mold_angle=40 -raft_base_margin=15 -raft_interface_margin=15 -raft_surface_margin=15 -speed_print_layer_0=25 -roofing_angles=[45,135] -hole_xy_offset_max_diameter=0 -cool_fan_full_layer=4 -ooze_shield_dist=2 -support_line_distance=0 -zig_zaggify_infill=False -support_interface_line_width=0.45 -magic_mesh_surface_mode=normal -material_shrinkage_percentage_z=100.0 -machine_nozzle_expansion_angle=45 -multiple_mesh_overlap=0.15 -jerk_support_interface=20 -raft_surface_line_width=0.45 -support_supported_skin_fan_speed=100 -support_initial_layer_line_distance=0 -acceleration_enabled=True -smooth_spiralized_contours=True -travel_speed=150.0 -z_seam_corner=z_seam_corner_weighted -meshfix_fluid_motion_enabled=True -machine_show_variants=False -wall_overhang_angle=90 -z_seam_y=235 -acceleration_skirt_brim=500.0 -skin_no_small_gaps_heuristic=False -wall_line_width=0.45 -gradual_support_infill_steps=0 -machine_heated_bed=True -print_bed_temperature=60.0 -raft_surface_jerk=20 -machine_max_feedrate_y=500 -meshfix=0 -prime_tower_wipe_enabled=True -retraction_hop_enabled=False -wall_0_extruder_nr=-1 -support_interface_height=1.12 -wall_extruder_nr=-1 -adaptive_layer_height_enabled=False -material_type=empty -support_skip_zag_per_mm=20 -speed=0 -day=Mon -support_bottom_stair_step_width=5.0 -support_type=buildplate -raft_interface_line_width=0.9 -material_shrinkage_percentage_xy=100.0 -wipe_pause=0 -speed_slowdown_layers=2 -bridge_wall_min_length=2.3 -support_roof_line_distance=2.7000270002700026 -zig_zaggify_support=False -support_z_distance=0.28 -support_bottom_enable=True -retraction_combing_max_distance=30 -conical_overhang_enabled=False -remove_empty_first_layers=True -machine_height=250 -acceleration_topbottom=500.0 -extruder_prime_pos_x=0 -coasting_enable=True -retraction_hop=0.2 -jerk_prime_tower=20 -cool_lift_head=False -support_tree_rest_preference=buildplate -material_brand=empty_brand -initial_bottom_layers=3 -wipe_retraction_prime_speed=35.0 -wall_overhang_speed_factor=100 -machine_heat_zone_length=16 -support_bottom_stair_step_height=0 -machine_nozzle_id=unknown -prime_tower_size=20 -speed_wall_0_roofing=50 -machine_always_write_active_tool=False -raft_base_fan_speed=0 -ooze_shield_enabled=False -max_skin_angle_for_expansion=90 -meshfix_maximum_travel_resolution=0.25 -infill_offset_y=0 -cool_fan_speed_max=100 -material_print_temp_prepend=False -adhesion_extruder_nr=-1 -skirt_gap=10.0 -bridge_fan_speed=100 -bridge_skin_speed=22.5 -infill_mesh_order=0 -support_roof_material_flow=100 -prime_tower_base_curve_magnitude=4 -jerk_print_layer_0=8 -infill_extruder_nr=-1 -wipe_repeat_count=5 -skin_material_flow_layer_0=100 -alternate_extra_perimeter=False -wall_0_material_flow_layer_0=100 -roofing_monotonic=True -machine_center_is_zero=False -support_wall_count=1 -raft_base_line_spacing=1.6 -jerk_wall_0=20 -machine_nozzle_heat_up_speed=2.0 -cool_fan_speed_0=0 -wall_line_count=3 -material_print_temperature_layer_0=205.0 -raft_surface_extruder_nr=0 -relative_extrusion=False -infill_before_walls=False -inset_direction=inside_out -wall_x_material_flow_roofing=90 -support_tree_tip_diameter=0.9 -jerk_ironing=20 -machine_max_feedrate_e=50 -wipe_retraction_amount=1.4 -support_use_towers=True -support_bottom_offset=0.0 -speed_wall_x=65 -infill_line_width=0.57 -wall_line_width_0=0.45 -acceleration_print_layer_0=500.0 -brim_gap=0 -jerk_topbottom=20 -center_object=False -connect_infill_polygons=False -material_flush_purge_speed=0.5 -acceleration_travel=500.0 -support_roof_height=1.12 -cool_fan_speed_min=100 -support_material_flow=100 -bridge_skin_support_threshold=50 -adaptive_layer_height_threshold=0.2 -support_extruder_nr_layer_0=0 -brim_width=8.0 -support_bottom_density=33.333 -print_temperature=210 -acceleration_wall=500.0 -wall_material_flow=90 -raft_acceleration=500.0 -raft_interface_thickness=0.42000000000000004 -support_meshes_present=False -dual=0 -jerk_travel_enabled=True -support_interface_wall_count=0 -bridge_wall_material_flow=50 -lightning_infill_straightening_angle=40 -z_seam_relative=False -top_skin_expand_distance=1.45 -switch_extruder_extra_prime_amount=0 -prime_tower_line_width=0.45 -meshfix_fluid_motion_small_distance=0.01 -machine_endstop_positive_direction_y=False -mold_enabled=False -magic_fuzzy_skin_enabled=False -print_sequence=all_at_once -date=04-12-2023 -jerk_support_roof=20 -raft_surface_speed=30.0 -support_pattern=zigzag -switch_extruder_retraction_speeds=20 -sub_div_rad_add=0.5 -skin_overlap_mm=0.1425 -small_feature_speed_factor=50 -wipe_hop_enable=False -support_xy_distance_overhang=0.45 -default_material_bed_temperature=60 -fill_outline_gaps=True -acceleration_wall_0=500.0 -support_interface_priority=interface_area_overwrite_support_area -bridge_skin_material_flow_2=100 -material_anti_ooze_retraction_speed=5 -support_bottom_material_flow=100 -prime_tower_flow=100 -acceleration_wall_x=500.0 -infill_overlap_mm=0.0 -support_tree_branch_diameter=5 -support_brim_width=4 -gradual_infill_steps=0 -top_skin_preshrink=1.45 -jerk_wall_x_roofing=20 -machine_min_cool_heat_time_window=50.0 -machine_nozzle_temp_enabled=True -infill_enable_travel_optimization=False -machine_max_jerk_e=5 -top_layers=3 -meshfix_fluid_motion_shift_distance=0.1 -support_connect_zigzags=True -bridge_skin_density_3=80 -machine_max_acceleration_x=500 -support_roof_offset=0.0 -support_bottom_line_width=0.45 -machine_max_jerk_z=0.4 -switch_extruder_retraction_speed=20 -machine_settings=0 -flow_rate_extrusion_offset_factor=100 -material_initial_print_temperature=205.0 -layer_0_z_overlap=0.15 -material_adhesion_tendency=0 -cool_min_temperature=205.0 -material_end_of_filament_purge_length=20 -raft_interface_acceleration=500.0 -speed_travel_layer_0=125.0 -speed_ironing=30.0 -gantry_height=25 -bottom_skin_expand_distance=1.45 -min_feature_size=0.1125 -z_seam_type=sharpest_corner -prime_tower_base_size=8.0 -material_print_temp_wait=True -retraction_min_travel=1.5 -machine_extruders_shared_nozzle_initial_retraction=0 -interlocking_beam_width=0.9 -extruders_enabled_count=1 -raft_jerk=20 -max_extrusion_before_wipe=10 -draft_shield_height=10 -bottom_thickness=1.12 -skirt_brim_extruder_nr=-1 -support_brim_line_count=9 -build_volume_temperature=28 -wall_0_wipe_dist=0.2 -switch_extruder_prime_speed=20 -speed_infill=60.0 -raft_surface_thickness=0.28 -retraction_hop_after_extruder_switch_height=0.2 -machine_max_acceleration_y=500 -optimize_wall_printing_order=True -support_top_distance=0.28 -infill=0 -bridge_skin_speed_3=22.5 -machine_steps_per_mm_x=50 -material_bed_temperature_layer_0=60.0 -machine_acceleration=500 -machine_steps_per_mm_z=50 -skirt_brim_line_width=0.45 -skirt_brim_material_flow=100 -brim_line_count=18 -retraction_retract_speed=35.0 -raft_surface_line_spacing=0.45 -material=0 -material_crystallinity=False -top_bottom_pattern=lines -material_end_of_filament_purge_speed=0.5 -prime_tower_min_volume=6 -wipe_retraction_speed=35.0 -line_width=0.45 -acceleration_ironing=500.0 -bridge_wall_speed=25.0 -support_interface_density=33.333 -support_brim_enable=True -small_feature_speed_factor_0=50 -_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 -travel_avoid_other_parts=True -flow_rate_max_extrusion_offset=0 -connect_skin_polygons=False -wipe_hop_amount=0.2 -mesh_position_y=0 -retraction_hop_after_extruder_switch=True -machine_max_jerk_xy=10 -machine_extruder_count=1 -acceleration_infill=500.0 -roofing_material_flow=100 -gradual_infill_step_height=1.5 -adaptive_layer_height_variation=0.04 -small_feature_max_length=0.0 -material_break_retracted_position=-50 -skin_edge_support_layers=0 -ironing_line_spacing=0.1 -jerk_support_infill=20 -infill_offset_x=0 -min_odd_wall_line_width=0.34 -adhesion_type=skirt -speed_z_hop=10 -brim_inside_margin=2.5 -wall_x_extruder_nr=-1 -initial_extruder_nr=0 -speed_equalize_flow_width_factor=100.0 -infill_line_distance=8.549999999999999 -lightning_infill_support_angle=40 -meshfix_maximum_deviation=0.025 -support_skip_some_zags=False -material_flush_purge_length=60 -support_conical_angle=30 -shell=0 -support_conical_min_width=5.0 -bridge_wall_coast=100 -slicing_tolerance=middle -mesh_position_z=0 -raft_surface_acceleration=500.0 -anti_overhang_mesh=False -infill_material_flow=100 -conical_overhang_hole_size=0 -roofing_extruder_nr=-1 -machine_extruders_share_heater=False -minimum_polygon_circumference=1.0 -draft_shield_enabled=False -raft_interface_line_spacing=1.1 -raft_base_acceleration=500.0 -wall_line_width_x=0.5 -acceleration_support_interface=500.0 -layer_start_y=0.0 -magic_fuzzy_skin_thickness=0.3 -support_conical_enabled=False -bridge_fan_speed_2=0 -retraction_extrusion_window=10 -speed_wall_0=50 -meshfix_fluid_motion_angle=15 -speed_support_bottom=45 -material_id=empty_material -raft_surface_layers=2 -experimental=0 -wall_transition_filter_deviation=0.1 -meshfix_keep_open_polygons=False -support_roof_extruder_nr=0 -interlocking_enable=False -material_diameter=1.75 -bridge_enable_more_layers=True -lightning_infill_prune_angle=40 -resolution=0 -support_angle=38 -top_bottom_pattern_0=lines -wall_thickness=0.9 -wall_transition_length=0.45 -ironing_only_highest_layer=False -raft_base_line_width=0.8 -acceleration_support_roof=500.0 -support_tree_max_diameter=25 -min_even_wall_line_width=0.34 -prime_blob_enable=False -top_bottom_extruder_nr=-1 -support_tree_min_height_to_model=3 -ironing_enabled=False -wipe_move_distance=20 -speed_print=60.0 -infill_wall_line_count=0 -bridge_fan_speed_3=0 -support_tree_angle_slow=25.333333333333332 -raft_speed=30.0 -support_bottom_extruder_nr=0 -_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 -travel_retract_before_outer_wall=True -small_skin_width=0.9 -speed_roofing=50 -speed_prime_tower=45 -speed_support=50 -small_hole_max_size=0 -jerk_wall=20 -machine_nozzle_cool_down_speed=2.0 -material_standby_temperature=175 -cross_infill_pocket_size=8.549999999999999 -machine_shape=rectangular -infill_multiplier=1 -top_bottom=0 -draft_shield_dist=10 -machine_extruders_share_nozzle=False -meshfix_maximum_resolution=0.25 -min_bead_width=0.34 -support_interface_enable=True -_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 -magic_fuzzy_skin_point_dist=0.8 -jerk_print=20 -brim_smart_ordering=True -machine_use_extruder_offset_to_offset_coords=True -support_interface_extruder_nr=0 -infill_support_enabled=False -top_bottom_thickness=1.12 -material_guid=0ff92885-617b-4144-a03c-9989872454bc -platform_adhesion=0 -raft_base_speed=22.5 -jerk_travel_layer_0=5 -bridge_skin_material_flow_3=110 -wipe_hop_speed=10 -prime_tower_enable=False -acceleration_wall_x_roofing=500.0 -support_roof_enable=True -acceleration_wall_0_roofing=500.0 -machine_endstop_positive_direction_x=False -infill_mesh=False -bridge_skin_material_flow=60 -mold_roof_height=0.5 -machine_nozzle_tip_outer_diameter=1 -support_tree_branch_diameter_angle=7 -prime_tower_base_height=0.28 -support=0 -support_mesh=False -machine_firmware_retract=False -support_tree_angle=38 -skin_angles=[45,135] -support_tree_bp_diameter=7.5 -skirt_brim_speed=25.0 -support_interface_skip_height=0.28 -machine_nozzle_head_distance=3 -support_bottom_pattern=grid -raft_base_wall_count=1 -min_infill_area=0 -support_line_width=0.45 -bridge_sparse_infill_max_density=0 -retraction_count_max=100 -jerk_infill=20 -infill_pattern=cubic -adaptive_layer_height_variation_step=0.04 -acceleration_roofing=500.0 -raft_interface_jerk=20 -retraction_speed=35.0 -extruder_prime_pos_y=0 -wall_0_material_flow=90 -machine_steps_per_mm_y=50 diff --git a/stress_benchmark/resources/067.wkt b/stress_benchmark/resources/067.wkt deleted file mode 100644 index 4c7c9843c2..0000000000 --- a/stress_benchmark/resources/067.wkt +++ /dev/null @@ -1 +0,0 @@ -MULTIPOLYGON () \ No newline at end of file diff --git a/stress_benchmark/stress_benchmark.cpp b/stress_benchmark/stress_benchmark.cpp index c2dc5614bf..cd3cd4ce33 100644 --- a/stress_benchmark/stress_benchmark.cpp +++ b/stress_benchmark/stress_benchmark.cpp @@ -20,12 +20,13 @@ #include #include "WallsComputation.h" +#include "geometry/OpenPolyline.h" +#include "geometry/Polygon.h" #include "rapidjson/document.h" #include "rapidjson/stringbuffer.h" #include "rapidjson/writer.h" #include "settings/Settings.h" #include "sliceDataStorage.h" -#include "utils/polygon.h" constexpr std::string_view USAGE = R"(Stress Benchmark. @@ -53,7 +54,7 @@ struct Resource return wkt_file.stem().string(); } - std::vector polygons() const + std::vector polygons() const { using point_type = boost::geometry::model::d2::point_xy; using polygon_type = boost::geometry::model::polygon; @@ -71,27 +72,27 @@ struct Resource boost::geometry::read_wkt(buffer.str(), boost_polygons); - std::vector polygons; + std::vector polygons; for (const auto& boost_polygon : boost_polygons) { - cura::Polygons polygon; + cura::Shape polygon; cura::Polygon outer; for (const auto& point : boost_polygon.outer()) { - outer.add(cura::Point2LL(point.x(), point.y())); + outer.push_back(cura::Point2LL(point.x(), point.y())); } - polygon.add(outer); + polygon.push_back(outer); for (const auto& hole : boost_polygon.inners()) { cura::Polygon inner; for (const auto& point : hole) { - inner.add(cura::Point2LL(point.x(), point.y())); + inner.push_back(cura::Point2LL(point.x(), point.y())); } - polygon.add(inner); + polygon.push_back(inner); } polygons.push_back(polygon); @@ -145,11 +146,11 @@ std::vector getResources() void handleChildProcess(const auto& shapes, const auto& settings) { cura::SliceLayer layer; - for (const cura::Polygons& shape : shapes) + for (const cura::Shape& shape : shapes) { layer.parts.emplace_back(); cura::SliceLayerPart& part = layer.parts.back(); - part.outline.add(shape); + part.outline.push_back(shape); } cura::LayerIndex layer_idx(100); cura::WallsComputation walls_computation(settings, layer_idx); diff --git a/tests/ClipperTest.cpp b/tests/ClipperTest.cpp index 14e54ac6ed..7bcc755eda 100644 --- a/tests/ClipperTest.cpp +++ b/tests/ClipperTest.cpp @@ -9,7 +9,7 @@ // #define TEST_INFILL_SVG_OUTPUT #ifdef TEST_INFILL_SVG_OUTPUT #include "utils/SVG.h" -#include "utils/polygon.h" +#include "geometry/Polygon.h" #include #endif // TEST_INFILL_SVG_OUTPUT diff --git a/tests/GCodeExportTest.cpp b/tests/GCodeExportTest.cpp index 4435285791..e2d7ef15e0 100644 --- a/tests/GCodeExportTest.cpp +++ b/tests/GCodeExportTest.cpp @@ -51,7 +51,6 @@ class GCodeExportTest : public testing::Test gcode.current_e_value_ = 0; gcode.current_e_offset_ = 0; gcode.current_extruder_ = 0; - gcode.current_fan_speed_ = -1; gcode.total_print_times_ = std::vector(static_cast(PrintFeatureType::NumPrintFeatureTypes), 0.0); gcode.current_speed_ = 1.0; gcode.current_print_acceleration_ = -1.0; @@ -61,7 +60,6 @@ class GCodeExportTest : public testing::Test gcode.setFlavor(EGCodeFlavor::MARLIN); gcode.bed_temperature_ = 0; gcode.initial_bed_temp_ = 0; - gcode.fan_number_ = 0; gcode.total_bounding_box_ = AABB3D(); gcode.current_layer_z_ = 0; gcode.relative_extrusion_ = false; @@ -211,7 +209,6 @@ class GriffinHeaderTest : public testing::TestWithParam gcode.layer_nr_ = 0; gcode.current_e_value_ = 0; gcode.current_extruder_ = 0; - gcode.current_fan_speed_ = -1; gcode.total_print_times_ = std::vector(static_cast(PrintFeatureType::NumPrintFeatureTypes), 0.0); gcode.current_speed_ = 1.0; gcode.current_print_acceleration_ = -1.0; @@ -221,7 +218,6 @@ class GriffinHeaderTest : public testing::TestWithParam gcode.setFlavor(EGCodeFlavor::MARLIN); gcode.initial_bed_temp_ = 0; gcode.bed_temperature_ = 0; - gcode.fan_number_ = 0; gcode.total_bounding_box_ = AABB3D(); gcode.new_line_ = "\n"; // Not BFB flavour by default. diff --git a/tests/InfillTest.cpp b/tests/InfillTest.cpp index 8d95705934..ef6e730fdf 100644 --- a/tests/InfillTest.cpp +++ b/tests/InfillTest.cpp @@ -2,20 +2,25 @@ // CuraEngine is released under the terms of the AGPLv3 or higher #include "infill.h" -#include "ReadTestPolygons.h" -#include "slicer.h" -#include "utils/Coord_t.h" -#include + #include #include -#include +#include #include +#include + +#include "ReadTestPolygons.h" +#include "geometry/OpenPolyline.h" +#include "slicer.h" +#include "utils/Coord_t.h" + // #define TEST_INFILL_SVG_OUTPUT #ifdef TEST_INFILL_SVG_OUTPUT -#include "utils/SVG.h" #include + +#include "utils/SVG.h" #endif // TEST_INFILL_SVG_OUTPUT // NOLINTBEGIN(*-magic-numbers) @@ -69,19 +74,23 @@ class InfillTestParameters // Parameters used to generate the infill: InfillParameters params; - Polygons outline_polygons; + Shape outline_polygons; // Resulting infill: - Polygons result_lines; - Polygons result_polygons; + OpenLinesSet result_lines; + Shape result_polygons; std::string name; - InfillTestParameters() : valid(false), fail_reason("Read of file with test polygons failed (see generateInfillTests), can't continue tests."), params(InfillParameters(EFillMethod::NONE, false, false, 0)), name("UNNAMED") + InfillTestParameters() + : valid(false) + , fail_reason("Read of file with test polygons failed (see generateInfillTests), can't continue tests.") + , params(InfillParameters(EFillMethod::NONE, false, false, 0)) + , name("UNNAMED") { } - InfillTestParameters(const InfillParameters& params, const size_t& test_polygon_id, Polygons outline_polygons, Polygons result_lines, Polygons result_polygons) + InfillTestParameters(const InfillParameters& params, const size_t& test_polygon_id, Shape outline_polygons, OpenLinesSet result_lines, Shape result_polygons) : valid(true) , fail_reason("__") , params(params) @@ -89,7 +98,13 @@ class InfillTestParameters , result_lines(std::move(result_lines)) , result_polygons(std::move(result_polygons)) { - name = fmt::format("InfillTestParameters_P{:d}_Z{:d}_C{:d}_L{:d}__{:d}", static_cast(params.pattern), params.zig_zagify, params.connect_polygons, params.line_distance, test_polygon_id); + name = fmt::format( + "InfillTestParameters_P{:d}_Z{:d}_C{:d}_L{:d}__{:d}", + static_cast(params.pattern), + params.zig_zagify, + params.connect_polygons, + params.line_distance, + test_polygon_id); } friend std::ostream& operator<<(std::ostream& os, const InfillTestParameters& params) @@ -108,11 +123,12 @@ constexpr coord_t Z = 100; // Future improvement: Also take an uneven layer, so constexpr coord_t SHIFT = 0; constexpr coord_t MAX_RESOLUTION = 10; constexpr coord_t MAX_DEVIATION = 5; -const std::vector POLYGON_FILENAMES = { - std::filesystem::path(__FILE__).parent_path().append("resources/polygon_concave.txt").string(), std::filesystem::path(__FILE__).parent_path().append("resources/polygon_concave_hole.txt").string(), - std::filesystem::path(__FILE__).parent_path().append("resources/polygon_square.txt").string(), std::filesystem::path(__FILE__).parent_path().append("resources/polygon_square_hole.txt").string(), - std::filesystem::path(__FILE__).parent_path().append("resources/polygon_triangle.txt").string(), std::filesystem::path(__FILE__).parent_path().append("resources/polygon_two_squares.txt").string() -}; +const std::vector POLYGON_FILENAMES = { std::filesystem::path(__FILE__).parent_path().append("resources/polygon_concave.txt").string(), + std::filesystem::path(__FILE__).parent_path().append("resources/polygon_concave_hole.txt").string(), + std::filesystem::path(__FILE__).parent_path().append("resources/polygon_square.txt").string(), + std::filesystem::path(__FILE__).parent_path().append("resources/polygon_square_hole.txt").string(), + std::filesystem::path(__FILE__).parent_path().append("resources/polygon_triangle.txt").string(), + std::filesystem::path(__FILE__).parent_path().append("resources/polygon_two_squares.txt").string() }; #ifdef TEST_INFILL_SVG_OUTPUT void writeTestcaseSVG(const InfillTestParameters& params) @@ -134,7 +150,7 @@ void writeTestcaseSVG(const InfillTestParameters& params) } #endif // TEST_INFILL_SVG_OUTPUT -InfillTestParameters generateInfillToTest(const InfillParameters& params, const size_t& test_polygon_id, const Polygons& outline_polygons) +InfillTestParameters generateInfillToTest(const InfillParameters& params, const size_t& test_polygon_id, const Shape& outline_polygons) { auto layers = std::vector(200, SlicerLayer{}); scripta::setAll(layers); @@ -144,24 +160,25 @@ InfillTestParameters generateInfillToTest(const InfillParameters& params, const const bool connect_polygons = params.connect_polygons; const coord_t line_distance = params.line_distance; - Infill infill(pattern, - zig_zagify, - connect_polygons, - outline_polygons, - INFILL_LINE_WIDTH, - line_distance, - INFILL_OVERLAP, - INFILL_MULTIPLIER, - FILL_ANGLE, - Z, - SHIFT, - MAX_RESOLUTION, - MAX_DEVIATION); // There are some optional parameters, but these will do for now (future improvement?). + Infill infill( + pattern, + zig_zagify, + connect_polygons, + outline_polygons, + INFILL_LINE_WIDTH, + line_distance, + INFILL_OVERLAP, + INFILL_MULTIPLIER, + FILL_ANGLE, + Z, + SHIFT, + MAX_RESOLUTION, + MAX_DEVIATION); // There are some optional parameters, but these will do for now (future improvement?). Settings infill_settings; std::vector result_paths; - Polygons result_polygons; - Polygons result_lines; + Shape result_polygons; + OpenLinesSet result_lines; infill.generate(result_paths, result_polygons, result_lines, infill_settings, 1, SectionType::INFILL, nullptr, nullptr); InfillTestParameters result = InfillTestParameters(params, test_polygon_id, outline_polygons, result_lines, result_polygons); @@ -174,7 +191,7 @@ std::vector generateInfillTests() constexpr bool do_connect_polygons = true; constexpr bool dont_connect_polygons = false; - std::vector shapes; + std::vector shapes; if (! readTestPolygons(POLYGON_FILENAMES, shapes)) { return { InfillTestParameters() }; // return an invalid singleton, that'll trip up the 'file read' assertion in the TEST_P's @@ -187,7 +204,8 @@ std::vector generateInfillTests() * - Gyroid, since it doesn't handle the 100% infill and related cases well * - Concentric and ZigZag, since they now use a method that starts from an extra infill wall, which fail these tests (TODO!) */ - std::vector skip_methods = { EFillMethod::CONCENTRIC, EFillMethod::ZIG_ZAG, EFillMethod::CROSS, EFillMethod::CROSS_3D, EFillMethod::CUBICSUBDIV, EFillMethod::GYROID, EFillMethod::LIGHTNING }; + std::vector skip_methods + = { EFillMethod::CONCENTRIC, EFillMethod::ZIG_ZAG, EFillMethod::CROSS, EFillMethod::CROSS_3D, EFillMethod::CUBICSUBDIV, EFillMethod::GYROID, EFillMethod::LIGHTNING }; std::vector methods; for (int i_method = 0; i_method < static_cast(EFillMethod::NONE); ++i_method) @@ -203,7 +221,7 @@ std::vector generateInfillTests() std::vector parameters_list; size_t test_polygon_id = 0; - for (const Polygons& polygons : shapes) + for (const Shape& polygons : shapes) { for (const EFillMethod& method : methods) { @@ -227,7 +245,14 @@ class InfillTest : public testing::TestWithParam { }; -INSTANTIATE_TEST_SUITE_P(InfillTestcases, InfillTest, testing::ValuesIn(generateInfillTests()), [](const testing::TestParamInfo& info) { return info.param.name; }); +INSTANTIATE_TEST_SUITE_P( + InfillTestcases, + InfillTest, + testing::ValuesIn(generateInfillTests()), + [](const testing::TestParamInfo& info) + { + return info.param.name; + }); TEST_P(InfillTest, TestInfillSanity) { @@ -243,7 +268,7 @@ TEST_P(InfillTest, TestInfillSanity) long double worst_case_zig_zag_added_area = 0; if (params.params.zig_zagify || params.params.pattern == EFillMethod::ZIG_ZAG) { - worst_case_zig_zag_added_area = params.outline_polygons.polygonLength() * INFILL_LINE_WIDTH; + worst_case_zig_zag_added_area = params.outline_polygons.length() * INFILL_LINE_WIDTH; } const double min_available_area = std::abs(params.outline_polygons.offset(static_cast(-params.params.line_distance) / 2).area()); @@ -251,23 +276,26 @@ TEST_P(InfillTest, TestInfillSanity) const long double min_expected_infill_area = (min_available_area * static_cast(INFILL_LINE_WIDTH)) / params.params.line_distance; const long double max_expected_infill_area = (max_available_area * INFILL_LINE_WIDTH) / params.params.line_distance + worst_case_zig_zag_added_area; - const long double out_infill_area = ((params.result_polygons.polygonLength() + params.result_lines.polyLineLength()) * static_cast(INFILL_LINE_WIDTH)) / getPatternMultiplier(params.params.pattern); + const long double out_infill_area + = ((params.result_polygons.length() + params.result_lines.length()) * static_cast(INFILL_LINE_WIDTH)) / getPatternMultiplier(params.params.pattern); ASSERT_GT((coord_t)max_available_area, (coord_t)out_infill_area) << "Infill area should allways be less than the total area available."; ASSERT_GT((coord_t)out_infill_area, (coord_t)min_expected_infill_area) << "Infill area should be greater than the minimum area expected to be covered."; ASSERT_LT((coord_t)out_infill_area, (coord_t)max_expected_infill_area) << "Infill area should be less than the maximum area to be covered."; const coord_t maximum_error = 10_mu; // potential rounding error - const Polygons padded_shape_outline = params.outline_polygons.offset(INFILL_LINE_WIDTH / 2); + const Shape padded_shape_outline = params.outline_polygons.offset(INFILL_LINE_WIDTH / 2); constexpr bool restitch = false; // No need to restitch polylines - that would introduce stitching errors. - ASSERT_LE(std::abs(padded_shape_outline.intersectionPolyLines(params.result_lines, restitch).polyLineLength() - params.result_lines.polyLineLength()), maximum_error) << "Infill (lines) should not be outside target polygon."; - Polygons result_polygon_lines = params.result_polygons; - for (PolygonRef poly : result_polygon_lines) + ASSERT_LE(std::abs(padded_shape_outline.intersection(params.result_lines, restitch).length() - params.result_lines.length()), maximum_error) + << "Infill (lines) should not be outside target polygon."; + Shape result_polygon_lines = params.result_polygons; + for (Polygon& poly : result_polygon_lines) { - poly.add(poly.front()); + poly.push_back(poly.front()); } - ASSERT_LE(std::abs(padded_shape_outline.intersectionPolyLines(result_polygon_lines, restitch).polyLineLength() - result_polygon_lines.polyLineLength()), maximum_error) << "Infill (lines) should not be outside target polygon."; + ASSERT_LE(std::abs(padded_shape_outline.intersection(result_polygon_lines, restitch).length() - result_polygon_lines.length()), maximum_error) + << "Infill (lines) should not be outside target polygon."; } } // namespace cura -// NOLINTEND(*-magic-numbers) \ No newline at end of file +// NOLINTEND(*-magic-numbers) diff --git a/tests/LayerPlanTest.cpp b/tests/LayerPlanTest.cpp index 455e59c82a..da6a783644 100644 --- a/tests/LayerPlanTest.cpp +++ b/tests/LayerPlanTest.cpp @@ -1,15 +1,17 @@ -// Copyright (c) 2023 UltiMaker +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher #include "LayerPlan.h" //The code under test. + +#include + #include "Application.h" //To provide settings for the layer plan. #include "RetractionConfig.h" //To provide retraction settings. #include "Slice.h" //To provide settings for the layer plan. #include "pathPlanning/Comb.h" //To create a combing path around the layer plan. -#include "sliceDataStorage.h" //To provide slice data as input for the planning stage. #include "pathPlanning/NozzleTempInsert.h" //To provide nozzle temperature commands. +#include "sliceDataStorage.h" //To provide slice data as input for the planning stage. #include "utils/Coord_t.h" -#include // NOLINTBEGIN(*-magic-numbers) namespace cura @@ -59,7 +61,9 @@ class LayerPlanTest : public testing::Test */ Mesh mesh; - LayerPlanTest() : storage(setUpStorage()), layer_plan(*storage, 100, 10000, 100, 0, fan_speed_layer_time_settings, 20, 10, 5000) + LayerPlanTest() + : storage(setUpStorage()) + , layer_plan(*storage, 100, 10000, 100, 0, fan_speed_layer_time_settings, 20, 10, 5000) { } @@ -119,26 +123,34 @@ class LayerPlanTest : public testing::Test settings->add("machine_width", "1000"); settings->add("material_flow_layer_0", "100"); settings->add("meshfix_maximum_travel_resolution", "0"); - settings->add("prime_tower_enable", "true"); + settings->add("prime_tower_enable", "false"); + settings->add("prime_tower_mode", "normal"); settings->add("prime_tower_flow", "108"); settings->add("prime_tower_line_width", "0.48"); settings->add("prime_tower_min_volume", "10"); settings->add("prime_tower_size", "40"); + settings->add("raft_interface_layers", "1"); + settings->add("raft_surface_layers", "1"); settings->add("raft_base_line_width", "0.401"); settings->add("raft_base_acceleration", "5001"); + settings->add("raft_base_flow", "100"); settings->add("raft_base_jerk", "5.1"); settings->add("raft_base_speed", "51"); settings->add("raft_base_thickness", "0.101"); settings->add("raft_interface_acceleration", "5002"); + settings->add("raft_interface_flow", "100"); settings->add("raft_interface_jerk", "5.2"); settings->add("raft_interface_line_width", "0.402"); settings->add("raft_interface_speed", "52"); settings->add("raft_interface_thickness", "0.102"); + settings->add("raft_interface_layers", "3"); settings->add("raft_surface_acceleration", "5003"); + settings->add("raft_surface_flow", "100"); settings->add("raft_surface_jerk", "5.3"); settings->add("raft_surface_line_width", "0.403"); settings->add("raft_surface_speed", "53"); settings->add("raft_surface_thickness", "0.103"); + settings->add("raft_surface_layers", "3"); settings->add("retraction_amount", "8"); settings->add("retraction_combing", "off"); settings->add("retraction_count_max", "30"); @@ -308,32 +320,33 @@ class AddTravelTest : public LayerPlanTest, public testing::WithParamInterface("false", "false", "off", false, false, AddTravelTestScene::OPEN)) + AddTravelTest() + : parameters(std::make_tuple("false", "false", "off", false, false, AddTravelTestScene::OPEN)) { - around_start_end.add(Point2LL(-100, -100)); - around_start_end.add(Point2LL(500100, -100)); - around_start_end.add(Point2LL(500100, 500100)); - around_start_end.add(Point2LL(-100, 500100)); - - around_start.add(Point2LL(-100, -100)); - around_start.add(Point2LL(100, -100)); - around_start.add(Point2LL(100, 100)); - around_start.add(Point2LL(-100, 100)); - - around_end.add(Point2LL(249900, 249900)); - around_end.add(Point2LL(250100, 249900)); - around_end.add(Point2LL(250100, 250100)); - around_end.add(Point2LL(249900, 249900)); - - between.add(Point2LL(250000, 240000)); - between.add(Point2LL(260000, 240000)); - between.add(Point2LL(260000, 300000)); - between.add(Point2LL(250000, 300000)); - - between_hole.add(Point2LL(250000, 240000)); - between_hole.add(Point2LL(250000, 300000)); - between_hole.add(Point2LL(260000, 300000)); - between_hole.add(Point2LL(260000, 240000)); + around_start_end.push_back(Point2LL(-100, -100)); + around_start_end.push_back(Point2LL(500100, -100)); + around_start_end.push_back(Point2LL(500100, 500100)); + around_start_end.push_back(Point2LL(-100, 500100)); + + around_start.push_back(Point2LL(-100, -100)); + around_start.push_back(Point2LL(100, -100)); + around_start.push_back(Point2LL(100, 100)); + around_start.push_back(Point2LL(-100, 100)); + + around_end.push_back(Point2LL(249900, 249900)); + around_end.push_back(Point2LL(250100, 249900)); + around_end.push_back(Point2LL(250100, 250100)); + around_end.push_back(Point2LL(249900, 249900)); + + between.push_back(Point2LL(250000, 240000)); + between.push_back(Point2LL(260000, 240000)); + between.push_back(Point2LL(260000, 300000)); + between.push_back(Point2LL(250000, 300000)); + + between_hole.push_back(Point2LL(250000, 240000)); + between_hole.push_back(Point2LL(250000, 300000)); + between_hole.push_back(Point2LL(260000, 300000)); + between_hole.push_back(Point2LL(260000, 240000)); } /*! @@ -349,10 +362,11 @@ class AddTravelTest : public LayerPlanTest, public testing::WithParamInterfaceadd("retraction_hop_enabled", parameters.hop_enable); settings->add("retraction_combing", parameters.combing); settings->add("retraction_min_travel", parameters.is_long ? "1" : "10000"); // If disabled, give it a high minimum travel so we're sure that our travel move is shorter. - storage->retraction_wipe_config_per_extruder[0].retraction_config.retraction_min_travel_distance = settings->get("retraction_min_travel"); // Update the copy that the storage has of this. + storage->retraction_wipe_config_per_extruder[0].retraction_config.retraction_min_travel_distance + = settings->get("retraction_min_travel"); // Update the copy that the storage has of this. settings->add("retraction_combing_max_distance", parameters.is_long_combing ? "1" : "10000"); - Polygons slice_data; + Shape slice_data; switch (parameters.scene) { case OPEN: @@ -360,24 +374,24 @@ class AddTravelTest : public LayerPlanTest, public testing::WithParamInterface nozzle_temp_inserts { - { .path_idx = 1, .extruder = 1, .temperature = 100., .wait = true }, - { .path_idx = 2, .extruder = 1, .temperature = 110., .wait = false, .time_after_path_start = 2. }, - { .path_idx = 1, .extruder = 1, .temperature = 120., .wait = true }, - { .path_idx = 5, .extruder = 1, .temperature = 130., .wait = false, .time_after_path_start = 1. }, - { .path_idx = 5, .extruder = 1, .temperature = 140., .wait = true }, - { .path_idx = 2, .extruder = 1, .temperature = 150., .wait = false, .time_after_path_start = 1. }, + std::vector nozzle_temp_inserts{ + { .path_idx = 1, .extruder = 1, .temperature = 100., .wait = true }, { .path_idx = 2, .extruder = 1, .temperature = 110., .wait = false, .time_after_path_start = 2. }, + { .path_idx = 1, .extruder = 1, .temperature = 120., .wait = true }, { .path_idx = 5, .extruder = 1, .temperature = 130., .wait = false, .time_after_path_start = 1. }, + { .path_idx = 5, .extruder = 1, .temperature = 140., .wait = true }, { .path_idx = 2, .extruder = 1, .temperature = 150., .wait = false, .time_after_path_start = 1. }, }; std::sort(nozzle_temp_inserts.begin(), nozzle_temp_inserts.end()); EXPECT_EQ(nozzle_temp_inserts[0].temperature, 100.); @@ -572,4 +590,4 @@ TEST(NozzleTempInsertTest, SortNozzleTempInsterts) } } // namespace cura -// NOLINTEND(*-magic-numbers) \ No newline at end of file +// NOLINTEND(*-magic-numbers) diff --git a/tests/PathOrderMonotonicTest.cpp b/tests/PathOrderMonotonicTest.cpp index aaf9505c95..b344d58f48 100644 --- a/tests/PathOrderMonotonicTest.cpp +++ b/tests/PathOrderMonotonicTest.cpp @@ -1,25 +1,31 @@ -// Copyright (c) 2023 UltiMaker +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher #include "PathOrderMonotonic.h" -#include "ReadTestPolygons.h" -#include "infill.h" -#include "slicer.h" -#include "utils/Coord_t.h" -#include "utils/math.h" -#include "utils/polygon.h" -#include + #include +#include #include #include #include +#include + +#include "ReadTestPolygons.h" +#include "geometry/OpenPolyline.h" +#include "geometry/Polygon.h" +#include "infill.h" +#include "slicer.h" +#include "utils/Coord_t.h" +#include "utils/math.h" + // To diagnose failing tests with visual images, uncomment the following line: // #define TEST_PATHS_SVG_OUTPUT #ifdef TEST_PATHS_SVG_OUTPUT -#include "utils/SVG.h" #include + +#include "utils/SVG.h" #endif // TEST_PATHS_SVG_OUTPUT namespace cura @@ -30,22 +36,22 @@ class PathOrderMonotonicTest : public testing::TestWithParam& path) +inline Point2LL startVertex(const PathOrdering& path) { return (*path.vertices_)[path.start_vertex_]; } -inline Point2LL endVertex(const PathOrdering& path) +inline Point2LL endVertex(const PathOrdering& path) { return (*path.vertices_)[path.vertices_->size() - (1 + path.start_vertex_)]; } -coord_t projectPathAlongAxis(const PathOrdering& path, const Point2LL& vector) +coord_t projectPathAlongAxis(const PathOrdering& path, const Point2LL& vector) { return dot(startVertex(path), vector); } -coord_t projectEndAlongAxis(const PathOrdering& path, const Point2LL& vector) +coord_t projectEndAlongAxis(const PathOrdering& path, const Point2LL& vector) { return dot(endVertex(path), vector); } @@ -54,7 +60,8 @@ bool rangeOverlaps(const std::pair& range_b, const std::pair shapes; + std::vector shapes; if (! readTestPolygons(filename, shapes)) { return false; @@ -81,17 +88,34 @@ bool getInfillLines(const std::string& filename, const AngleRadians& angle, Poly for (const auto& shape : shapes) { - Infill infill_comp(pattern, zig_zagify, connect_polygons, shape, infill_line_width, line_distance, infill_overlap, infill_multiplier, AngleDegrees(angle), z, shift, max_resolution, max_deviation); + Infill infill_comp( + pattern, + zig_zagify, + connect_polygons, + shape, + infill_line_width, + line_distance, + infill_overlap, + infill_multiplier, + AngleDegrees(angle), + z, + shift, + max_resolution, + max_deviation); Settings infill_settings; std::vector result_paths; - Polygons dummy_polys; + Shape dummy_polys; infill_comp.generate(result_paths, dummy_polys, output, infill_settings, 1, SectionType::INFILL, nullptr, nullptr); } return true; } #ifdef TEST_PATHS_SVG_OUTPUT -void writeDebugSVG(const std::string& original_filename, const AngleRadians& angle, const Point& monotonic_vec, const std::vector>>& sections) +void writeDebugSVG( + const std::string& original_filename, + const AngleRadians& angle, + const Point& monotonic_vec, + const std::vector>>& sections) { constexpr int buff_size = 1024; char buff[buff_size]; @@ -136,7 +160,7 @@ TEST_P(PathOrderMonotonicTest, SectionsTest) const auto params = GetParam(); const double angle_radians{ std::get<1>(params) }; const auto& filename = std::get<0>(params); - Polygons polylines; + OpenLinesSet polylines; ASSERT_TRUE(getInfillLines(filename, angle_radians, polylines)) << "Input test-file could not be read, check setup."; const Point2LL& pt_r = polylines.begin()->at(0); @@ -146,15 +170,15 @@ TEST_P(PathOrderMonotonicTest, SectionsTest) const Point2LL perpendicular_axis{ turn90CCW(monotonic_axis) }; constexpr coord_t max_adjacent_distance = line_distance + 1; - PathOrderMonotonic object_under_test(angle_from_first_line, max_adjacent_distance, monotonic_axis * -1000); + PathOrderMonotonic object_under_test(angle_from_first_line, max_adjacent_distance, monotonic_axis * -1000); for (const auto& polyline : polylines) { - object_under_test.addPolyline(ConstPolygonPointer(polyline)); + object_under_test.addPolyline(&polyline); } object_under_test.optimize(); // Collect sections: - std::vector>> sections; + std::vector>> sections; sections.emplace_back(); coord_t last_path_mono_projection = projectPathAlongAxis(object_under_test.paths_.front(), monotonic_axis); for (const auto& path : object_under_test.paths_) @@ -202,7 +226,8 @@ TEST_P(PathOrderMonotonicTest, SectionsTest) const coord_t mono_b = projectPathAlongAxis(*it_b, monotonic_axis); if (mono_a < mono_b) { - EXPECT_FALSE(rangeOverlaps(perp_b_range, perp_a_range)) << "Perpendicular range overlaps for neighboring lines in different sections (next line of A / line in B)."; + EXPECT_FALSE(rangeOverlaps(perp_b_range, perp_a_range)) + << "Perpendicular range overlaps for neighboring lines in different sections (next line of A / line in B)."; } } } @@ -210,14 +235,28 @@ TEST_P(PathOrderMonotonicTest, SectionsTest) } } -const std::vector polygon_filenames = { - std::filesystem::path(__FILE__).parent_path().append("resources/polygon_concave.txt").string(), std::filesystem::path(__FILE__).parent_path().append("resources/polygon_concave_hole.txt").string(), - std::filesystem::path(__FILE__).parent_path().append("resources/polygon_square.txt").string(), std::filesystem::path(__FILE__).parent_path().append("resources/polygon_square_hole.txt").string(), - std::filesystem::path(__FILE__).parent_path().append("resources/polygon_triangle.txt").string(), std::filesystem::path(__FILE__).parent_path().append("resources/polygon_two_squares.txt").string(), - std::filesystem::path(__FILE__).parent_path().append("resources/polygon_slant_gap.txt").string(), std::filesystem::path(__FILE__).parent_path().append("resources/polygon_sawtooth.txt").string(), - std::filesystem::path(__FILE__).parent_path().append("resources/polygon_letter_y.txt").string() -}; -const std::vector angle_radians = { 0, 0.1, 0.25 * std::numbers::pi, 1.0, 0.5 * std::numbers::pi, 0.75 * std::numbers::pi, std::numbers::pi, 1.25 * std::numbers::pi, 4.0, 1.5 * std::numbers::pi, 1.75 * std::numbers::pi, 5.0, (2.0 * std::numbers::pi) - 0.1 }; +const std::vector polygon_filenames = { std::filesystem::path(__FILE__).parent_path().append("resources/polygon_concave.txt").string(), + std::filesystem::path(__FILE__).parent_path().append("resources/polygon_concave_hole.txt").string(), + std::filesystem::path(__FILE__).parent_path().append("resources/polygon_square.txt").string(), + std::filesystem::path(__FILE__).parent_path().append("resources/polygon_square_hole.txt").string(), + std::filesystem::path(__FILE__).parent_path().append("resources/polygon_triangle.txt").string(), + std::filesystem::path(__FILE__).parent_path().append("resources/polygon_two_squares.txt").string(), + std::filesystem::path(__FILE__).parent_path().append("resources/polygon_slant_gap.txt").string(), + std::filesystem::path(__FILE__).parent_path().append("resources/polygon_sawtooth.txt").string(), + std::filesystem::path(__FILE__).parent_path().append("resources/polygon_letter_y.txt").string() }; +const std::vector angle_radians = { 0, + 0.1, + 0.25 * std::numbers::pi, + 1.0, + 0.5 * std::numbers::pi, + 0.75 * std::numbers::pi, + std::numbers::pi, + 1.25 * std::numbers::pi, + 4.0, + 1.5 * std::numbers::pi, + 1.75 * std::numbers::pi, + 5.0, + (2.0 * std::numbers::pi) - 0.1 }; INSTANTIATE_TEST_SUITE_P(PathOrderMonotonicTestInstantiation, PathOrderMonotonicTest, testing::Combine(testing::ValuesIn(polygon_filenames), testing::ValuesIn(angle_radians))); // NOLINTEND(*-magic-numbers) diff --git a/tests/PathOrderOptimizerTest.cpp b/tests/PathOrderOptimizerTest.cpp index b4d4a32ee1..c8621ba3d8 100644 --- a/tests/PathOrderOptimizerTest.cpp +++ b/tests/PathOrderOptimizerTest.cpp @@ -15,7 +15,7 @@ class PathOrderOptimizerTest : public testing::Test /*! * A blank optimizer with no polygons added yet. Fresh and virgin. */ - PathOrderOptimizer optimizer; + PathOrderOptimizer optimizer; /*! * A simple isosceles triangle. Base length and height 50. @@ -29,12 +29,12 @@ class PathOrderOptimizerTest : public testing::Test void SetUp() override { - optimizer = PathOrderOptimizer(Point2LL(0, 0)); + optimizer = PathOrderOptimizer(Point2LL(0, 0)); triangle.clear(); - triangle.add(Point2LL(0, 0)); - triangle.add(Point2LL(50, 0)); - triangle.add(Point2LL(25, 50)); + triangle.push_back(Point2LL(0, 0)); + triangle.push_back(Point2LL(50, 0)); + triangle.push_back(Point2LL(25, 50)); } }; // NOLINTEND(misc-non-private-member-variables-in-classes) @@ -62,9 +62,9 @@ TEST_F(PathOrderOptimizerTest, ThreeTrianglesShortestOrder) far.translate(Point2LL(1000, 1000)); // Add them out of order so that it's clear that the optimization changes the order. - optimizer.addPolygon(middle); - optimizer.addPolygon(far); - optimizer.addPolygon(near); + optimizer.addPolygon(&middle); + optimizer.addPolygon(&far); + optimizer.addPolygon(&near); optimizer.optimize(); diff --git a/tests/ReadTestPolygons.cpp b/tests/ReadTestPolygons.cpp index baa3d71147..be4b5bbe87 100644 --- a/tests/ReadTestPolygons.cpp +++ b/tests/ReadTestPolygons.cpp @@ -2,16 +2,19 @@ // CuraEngine is released under the terms of the AGPLv3 or higher. #include "ReadTestPolygons.h" -#include "utils/Coord_t.h" + #include +#include "geometry/Shape.h" +#include "utils/Coord_t.h" + // NOTE: See the documentation in the header-file for an explanation of this simple file format. namespace cura { // Read multiple files to the collection of polygons. // Returns boolean success/failure (read errors, not found, etc.). -bool readTestPolygons(const std::vector& filenames, std::vector& polygons_out) +bool readTestPolygons(const std::vector& filenames, std::vector& polygons_out) { for (const std::string& filename : filenames) { @@ -25,7 +28,7 @@ bool readTestPolygons(const std::vector& filenames, std::vector& polygons_out) +bool readTestPolygons(const std::string& filename, std::vector& polygons_out) { FILE* handle = std::fopen(filename.c_str(), "r"); if (! handle) @@ -34,7 +37,7 @@ bool readTestPolygons(const std::string& filename, std::vector& polygo } Polygon next_path; - Polygons next_shape; + Shape next_shape; char command = '_'; int read = 0; @@ -68,7 +71,7 @@ bool readTestPolygons(const std::string& filename, std::vector& polygo case '#': // end of file if (! next_path.empty()) { - next_shape.add(Polygon(next_path)); // copy and add + next_shape.push_back(Polygon(next_path)); // copy and add next_path.clear(); } if (command != 'x' && ! next_shape.empty()) diff --git a/tests/ReadTestPolygons.h b/tests/ReadTestPolygons.h index cf7f7b2884..5c237025b1 100644 --- a/tests/ReadTestPolygons.h +++ b/tests/ReadTestPolygons.h @@ -4,7 +4,7 @@ #ifndef READ_TEST_POLYGONS_H #define READ_TEST_POLYGONS_H -#include "utils/polygon.h" +#include "geometry/Polygon.h" #include #include @@ -34,8 +34,8 @@ v 50000 50000 namespace cura { -bool readTestPolygons(const std::vector& filenames, std::vector& polygons_out); -bool readTestPolygons(const std::string& filename, std::vector& polygons_out); +bool readTestPolygons(const std::vector& filenames, std::vector& polygons_out); +bool readTestPolygons(const std::string& filename, std::vector& polygons_out); } // namespace cura #endif // READ_TEST_POLYGONS_H diff --git a/tests/WallsComputationTest.cpp b/tests/WallsComputationTest.cpp index 3f58b3de1d..98061d4cdc 100644 --- a/tests/WallsComputationTest.cpp +++ b/tests/WallsComputationTest.cpp @@ -2,21 +2,25 @@ // CuraEngine is released under the terms of the AGPLv3 or higher #include "WallsComputation.h" //Unit under test. + +#include + +#include +#include + +#include + #include "InsetOrderOptimizer.h" //Unit also under test. +#include "geometry/OpenPolyline.h" +#include "geometry/Polygon.h" //To create example polygons. #include "settings/Settings.h" //Settings to generate walls with. #include "sliceDataStorage.h" //Sl #include "slicer.h" -#include "utils/polygon.h" //To create example polygons. -#include -#include -#include - -#include #ifdef WALLS_COMPUTATION_TEST_SVG_OUTPUT -#include "utils/SVG.h" -#include "utils/polygon.h" #include + +#include "utils/SVG.h" #endif // WALLS_COMPUTATION_TEST_SVG_OUTPUT // NOLINTBEGIN(*-magic-numbers) @@ -41,14 +45,15 @@ class WallsComputationTest : public testing::Test /*! * Basic 10x10mm square shape to work with. */ - Polygons square_shape; + Shape square_shape; /*! * A rectangle enclosing two triangular holes; */ - Polygons ff_holes; + Shape ff_holes; - WallsComputationTest() : walls_computation(settings, LayerIndex(100)) + WallsComputationTest() + : walls_computation(settings, LayerIndex(100)) { square_shape.emplace_back(); square_shape.back().emplace_back(0, 0); @@ -104,7 +109,7 @@ TEST_F(WallsComputationTest, GenerateWallsForLayerSinglePart) SliceLayer layer; layer.parts.emplace_back(); SliceLayerPart& part = layer.parts.back(); - part.outline.add(square_shape); + part.outline.push_back(square_shape); // Run the test. walls_computation.generateWalls(&layer, SectionType::WALL); @@ -113,7 +118,8 @@ TEST_F(WallsComputationTest, GenerateWallsForLayerSinglePart) EXPECT_FALSE(part.wall_toolpaths.empty()) << "There must be some walls."; EXPECT_GT(part.print_outline.area(), 0) << "The print outline must encompass the outer wall, so it must be more than 0."; EXPECT_LE(part.print_outline.area(), square_shape.area()) << "The print outline must stay within the bounds of the original part."; - EXPECT_GT(part.inner_area.area(), 0) << "The inner area must be within the innermost wall. There are not enough walls to fill the entire part, so there is a positive inner area."; + EXPECT_GT(part.inner_area.area(), 0) + << "The inner area must be within the innermost wall. There are not enough walls to fill the entire part, so there is a positive inner area."; EXPECT_EQ(layer.parts.size(), 1) << "There is still just 1 part."; } @@ -126,7 +132,7 @@ TEST_F(WallsComputationTest, GenerateWallsZeroWalls) SliceLayer layer; layer.parts.emplace_back(); SliceLayerPart& part = layer.parts.back(); - part.outline.add(square_shape); + part.outline.push_back(square_shape); // Run the test. walls_computation.generateWalls(&layer, SectionType::WALL); @@ -147,7 +153,7 @@ TEST_F(WallsComputationTest, WallToolPathsGetWeakOrder) SliceLayer layer; layer.parts.emplace_back(); SliceLayerPart& part = layer.parts.back(); - part.outline.add(ff_holes); + part.outline.push_back(ff_holes); // Run the test. walls_computation.generateWalls(&layer, SectionType::WALL); @@ -212,6 +218,13 @@ TEST_F(WallsComputationTest, WallToolPathsGetWeakOrder) } } EXPECT_GT(order.size(), 0) << "There should be ordered pairs!"; + std::unordered_set has_order_info(part.wall_toolpaths.size()); + for (auto [from, to] : order) + { + has_order_info.emplace(from); + has_order_info.emplace(to); + } + EXPECT_EQ(has_order_info.size(), n_paths) << "Every path should have order information."; } } // namespace cura diff --git a/tests/arcus/ArcusCommunicationTest.cpp b/tests/arcus/ArcusCommunicationTest.cpp index 7c1036166e..a05b88d98d 100644 --- a/tests/arcus/ArcusCommunicationTest.cpp +++ b/tests/arcus/ArcusCommunicationTest.cpp @@ -1,15 +1,19 @@ -// Copyright (c) 2022 Ultimaker B.V. +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher. +#include +#include +#include + +#include + #include "FffProcessor.h" #include "MockSocket.h" //To mock out the communication with the front-end. #include "communication/ArcusCommunicationPrivate.h" //To access the private fields of this communication class. +#include "geometry/Polygon.h" //Create test shapes to send over the socket. +#include "geometry/Shape.h" #include "settings/types/LayerIndex.h" #include "utils/Coord_t.h" -#include "utils/polygon.h" //Create test shapes to send over the socket. -#include -#include -#include // NOLINTBEGIN(*-magic-numbers) namespace cura @@ -33,7 +37,7 @@ class ArcusCommunicationTest : public testing::Test Polygon test_circle; Polygon test_convex_shape; - Polygons test_shapes; // all above polygons + Shape test_shapes; // all above polygons void SetUp() override { @@ -47,24 +51,24 @@ class ArcusCommunicationTest : public testing::Test test_square.emplace_back(1000, 0); test_square.emplace_back(1000, 1000); test_square.emplace_back(0, 1000); - test_shapes.add(test_square); + test_shapes.push_back(test_square); test_square2.emplace_back(1100, 1500); test_square2.emplace_back(2000, 1500); test_square2.emplace_back(2000, -500); test_square2.emplace_back(1100, -500); - test_shapes.add(test_square2); + test_shapes.push_back(test_square2); test_triangle.emplace_back(0, 2100); test_triangle.emplace_back(500, 1100); test_triangle.emplace_back(1500, 2100); - test_shapes.add(test_triangle); + test_shapes.push_back(test_triangle); for (double a = 0; a < 1.0; a += .05) { - test_circle.add(Point2LL(2050, 2050) + Point2LL(std::cos(a * 2 * std::numbers::pi) * 500, std::sin(a * 2 * std::numbers::pi) * 500)); + test_circle.push_back(Point2LL(2050, 2050) + Point2LL(std::cos(a * 2 * std::numbers::pi) * 500, std::sin(a * 2 * std::numbers::pi) * 500)); } - test_shapes.add(test_circle); + test_shapes.push_back(test_circle); test_convex_shape.emplace_back(-300, 0); test_convex_shape.emplace_back(-100, 500); @@ -75,7 +79,7 @@ class ArcusCommunicationTest : public testing::Test test_convex_shape.emplace_back(-1500, 1500); test_convex_shape.emplace_back(-1600, 1100); test_convex_shape.emplace_back(-700, 200); - test_shapes.add(test_convex_shape); + test_shapes.push_back(test_convex_shape); } void TearDown() override @@ -170,4 +174,4 @@ TEST_F(ArcusCommunicationTest, SendProgress) } } // namespace cura -// NOLINTEND(*-magic-numbers) \ No newline at end of file +// NOLINTEND(*-magic-numbers) diff --git a/tests/arcus/MockCommunication.h b/tests/arcus/MockCommunication.h index f2401025fd..0f95cee769 100644 --- a/tests/arcus/MockCommunication.h +++ b/tests/arcus/MockCommunication.h @@ -7,9 +7,10 @@ #include #include "communication/Communication.h" //The interface we're implementing. +#include "geometry/Polygon.h" //In the signature of Communication. +#include "geometry/Shape.h" #include "settings/types/LayerIndex.h" #include "utils/Coord_t.h" -#include "utils/polygon.h" //In the signature of Communication. namespace cura { @@ -24,10 +25,8 @@ class MockCommunication : public Communication MOCK_CONST_METHOD0(isSequential, bool()); MOCK_CONST_METHOD1(sendProgress, void(double progress)); MOCK_METHOD3(sendLayerComplete, void(const LayerIndex::value_type& layer_nr, const coord_t& z, const coord_t& thickness)); - MOCK_METHOD5(sendPolygons, void(const PrintFeatureType& type, const Polygons& polygons, const coord_t& line_width, const coord_t& line_thickness, const Velocity& velocity)); - MOCK_METHOD5( - sendPolygon, - void(const PrintFeatureType& type, const ConstPolygonRef& polygon, const coord_t& line_width, const coord_t& line_thickness, const Velocity& velocity)); + MOCK_METHOD5(sendPolygons, void(const PrintFeatureType& type, const Shape& polygons, const coord_t& line_width, const coord_t& line_thickness, const Velocity& velocity)); + MOCK_METHOD5(sendPolygon, void(const PrintFeatureType& type, const Polygon& polygon, const coord_t& line_width, const coord_t& line_thickness, const Velocity& velocity)); MOCK_METHOD5(sendLineTo, void(const PrintFeatureType& type, const Point2LL& to, const coord_t& line_width, const coord_t& line_thickness, const Velocity& velocity)); MOCK_METHOD1(sendCurrentPosition, void(const Point2LL& position)); MOCK_METHOD1(setExtruderForSend, void(const ExtruderTrain& extruder)); diff --git a/tests/integration/SlicePhaseTest.cpp b/tests/integration/SlicePhaseTest.cpp index 95fd638fa1..cfb9557024 100644 --- a/tests/integration/SlicePhaseTest.cpp +++ b/tests/integration/SlicePhaseTest.cpp @@ -1,17 +1,18 @@ -// Copyright (c) 2023 UltiMaker +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher #include +#include #include #include "Application.h" // To set up a slice with settings. #include "Slice.h" // To set up a scene to slice. +#include "geometry/Polygon.h" // Creating polygons to compare to sliced layers. #include "slicer.h" // Starts the slicing phase that we want to test. #include "utils/Coord_t.h" #include "utils/Matrix4x3D.h" // To load STL files. -#include "utils/polygon.h" // Creating polygons to compare to sliced layers. -#include "utils/polygonUtils.h" // Comparing similarity of polygons. +#include "utils/polygonUtils.h" // Comparing similarity of polygons_. namespace cura { @@ -44,6 +45,7 @@ class SlicePhaseTest : public testing::Test scene.settings.add("raft_interface_layers", "1"); scene.settings.add("raft_surface_thickness", "0.2"); scene.settings.add("raft_surface_layers", "1"); + scene.settings.add("raft_surface_extruder_nr", "0"); scene.settings.add("magic_mesh_surface_mode", "normal"); scene.settings.add("meshfix_extensive_stitching", "false"); scene.settings.add("meshfix_keep_open_polygons", "false"); @@ -94,10 +96,10 @@ TEST_F(SlicePhaseTest, Cube) for (size_t layer_nr = 0; layer_nr < num_layers; layer_nr++) { const SlicerLayer& layer = slicer.layers[layer_nr]; - EXPECT_EQ(layer.polygons.size(), 1); - if (layer.polygons.size() == 1) + EXPECT_EQ(layer.polygons_.size(), 1); + if (layer.polygons_.size() == 1) { - Polygon sliced_polygon = layer.polygons[0]; + Polygon sliced_polygon = layer.polygons_[0]; EXPECT_EQ(sliced_polygon.size(), square.size()); if (sliced_polygon.size() == square.size()) { @@ -156,19 +158,19 @@ TEST_F(SlicePhaseTest, Cylinder1000) const coord_t y = std::sin(std::numbers::pi * 2 / num_vertices * i) * radius; circle.emplace_back(x, y); } - Polygons circles; - circles.add(circle); + Shape circles; + circles.push_back(circle); for (size_t layer_nr = 0; layer_nr < num_layers; layer_nr++) { const SlicerLayer& layer = slicer.layers[layer_nr]; - EXPECT_EQ(layer.polygons.size(), 1); - if (layer.polygons.size() == 1) + EXPECT_EQ(layer.polygons_.size(), 1); + if (layer.polygons_.size() == 1) { - Polygon sliced_polygon = layer.polygons[0]; + Polygon sliced_polygon = layer.polygons_[0]; // Due to the reduction in resolution, the final slice will not have the same vertices as the input. // Let's say that are allowed to be up to 1/500th of the surface area off. - EXPECT_LE(PolygonUtils::relativeHammingDistance(layer.polygons, circles), 0.002); + EXPECT_LE(PolygonUtils::relativeHammingDistance(layer.polygons_, circles), 0.002); } } } diff --git a/tests/settings/SettingsTest.cpp b/tests/settings/SettingsTest.cpp index c8f7814db8..0c6c98f458 100644 --- a/tests/settings/SettingsTest.cpp +++ b/tests/settings/SettingsTest.cpp @@ -1,10 +1,11 @@ -// Copyright (c) 2023 UltiMaker +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher #include "settings/Settings.h" //The class under test. -#include //For std::numbers::pi. +#include #include //For shared_ptr. +#include #include diff --git a/tests/test_global_settings.txt b/tests/test_global_settings.txt index 7861bc4139..7ce4594a03 100644 --- a/tests/test_global_settings.txt +++ b/tests/test_global_settings.txt @@ -79,7 +79,6 @@ support_conical_angle=30 speed_roofing=20 anti_overhang_mesh=False meshfix_union_all_remove_holes=False -support_interface_skip_height=0.3 draft_shield_height=10 top_thickness=1 machine_endstop_positive_direction_y=False diff --git a/tests/utils/AABB3DTest.cpp b/tests/utils/AABB3DTest.cpp index 711e20849c..31c12017dc 100644 --- a/tests/utils/AABB3DTest.cpp +++ b/tests/utils/AABB3DTest.cpp @@ -4,7 +4,7 @@ #include "utils/AABB3D.h" #include "utils/AABB.h" #include "utils/Coord_t.h" -#include "utils/polygon.h" +#include "geometry/Polygon.h" #include #include diff --git a/tests/utils/AABBTest.cpp b/tests/utils/AABBTest.cpp index bb39a91b4f..cc2968d3f1 100644 --- a/tests/utils/AABBTest.cpp +++ b/tests/utils/AABBTest.cpp @@ -2,10 +2,14 @@ // CuraEngine is released under the terms of the AGPLv3 or higher. #include "utils/AABB.h" -#include "utils/polygon.h" -#include + #include +#include + +#include "geometry/Polygon.h" +#include "geometry/Shape.h" + namespace cura { // NOLINTBEGIN(*-magic-numbers) @@ -34,15 +38,18 @@ TEST(AABBTest, TestConstructPoint) TEST(AABBTest, TestConstructPolygons) { - Polygons empty_polygon; + Shape empty_polygon; AABB polygons_box_a(empty_polygon); EXPECT_FALSE(polygons_box_a.contains(Point2LL(0, 0))) << "Box constructed from empty polygon shouldn't contain anything."; - Polygons polygons; - polygons.add(Polygon(ClipperLib::Path({ ClipperLib::IntPoint{ -10, -10 }, ClipperLib::IntPoint{ 10, -10 }, ClipperLib::IntPoint{ -5, -5 }, ClipperLib::IntPoint{ -10, 10 } }))); - polygons.add(Polygon(ClipperLib::Path({ ClipperLib::IntPoint{ 11, 11 }, ClipperLib::IntPoint{ -11, 11 }, ClipperLib::IntPoint{ 4, 4 }, ClipperLib::IntPoint{ 11, -11 } }))); - polygons.add(Polygon(ClipperLib::Path({ ClipperLib::IntPoint{ 2, 2 }, ClipperLib::IntPoint{ 2, 3 }, ClipperLib::IntPoint{ 3, 3 }, ClipperLib::IntPoint{ 3, 2 } }))); + Shape polygons; + polygons.push_back( + Polygon(ClipperLib::Path({ ClipperLib::IntPoint{ -10, -10 }, ClipperLib::IntPoint{ 10, -10 }, ClipperLib::IntPoint{ -5, -5 }, ClipperLib::IntPoint{ -10, 10 } }), false)); + polygons.push_back( + Polygon(ClipperLib::Path({ ClipperLib::IntPoint{ 11, 11 }, ClipperLib::IntPoint{ -11, 11 }, ClipperLib::IntPoint{ 4, 4 }, ClipperLib::IntPoint{ 11, -11 } }), false)); + polygons.push_back( + Polygon(ClipperLib::Path({ ClipperLib::IntPoint{ 2, 2 }, ClipperLib::IntPoint{ 2, 3 }, ClipperLib::IntPoint{ 3, 3 }, ClipperLib::IntPoint{ 3, 2 } }), false)); AABB polygons_box_b(polygons); @@ -161,4 +168,4 @@ TEST(AABBTest, TestToPolygon) } // NOLINTEND(*-magic-numbers) -} // namespace cura \ No newline at end of file +} // namespace cura diff --git a/tests/utils/IntPointTest.cpp b/tests/utils/IntPointTest.cpp index 1332e1b8db..742991be3f 100644 --- a/tests/utils/IntPointTest.cpp +++ b/tests/utils/IntPointTest.cpp @@ -1,9 +1,12 @@ // Copyright (c) 2022 Ultimaker B.V. // CuraEngine is released under the terms of the AGPLv3 or higher. -#include "utils/Point2LL.h" #include +#include "geometry/Point2LL.h" +#include "geometry/Point3Matrix.h" +#include "geometry/PointMatrix.h" + // NOLINTBEGIN(*-magic-numbers) namespace cura { diff --git a/tests/utils/LinearAlg2DTest.cpp b/tests/utils/LinearAlg2DTest.cpp index b9e4f41bb0..afa754b9fb 100644 --- a/tests/utils/LinearAlg2DTest.cpp +++ b/tests/utils/LinearAlg2DTest.cpp @@ -1,12 +1,15 @@ -// Copyright (c) 2022 Ultimaker B.V. +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher. #include "utils/linearAlg2D.h" #include +#include #include +#include "geometry/Point3Matrix.h" + // NOLINTBEGIN(*-magic-numbers) namespace cura { diff --git a/tests/utils/PolygonConnectorTest.cpp b/tests/utils/PolygonConnectorTest.cpp index b423d74d31..b2b08af3c0 100644 --- a/tests/utils/PolygonConnectorTest.cpp +++ b/tests/utils/PolygonConnectorTest.cpp @@ -2,11 +2,14 @@ // CuraEngine is released under the terms of the AGPLv3 or higher. #include "utils/PolygonConnector.h" // The class under test. -#include "utils/Coord_t.h" -#include "utils/polygon.h" // To create polygons to test with. -#include + #include +#include + +#include "geometry/Polygon.h" // To create polygons to test with. +#include "utils/Coord_t.h" + // NOLINTBEGIN(*-magic-numbers) namespace cura { @@ -21,10 +24,10 @@ class PolygonConnectorTest : public testing::Test Polygon test_triangle; Polygon test_circle; Polygon test_convex_shape; - Polygons test_shapes; // All above polygons! As well as an inset of 100 microns of them. + Shape test_shapes; // All above polygons! As well as an inset of 100 microns of them. PolygonConnector* pc; - Polygons connected_polygons; + Shape connected_polygons; std::vector connected_paths; virtual void SetUp() override @@ -70,7 +73,8 @@ TEST_F(PolygonConnectorTest, getBridgeNestedSquares) EXPECT_EQ(vSize(bridge->a_.from_point_ - bridge->a_.to_point_), 100) << "The polygons are 100 units spaced out concentrically, so this is the shortest possible bridge."; EXPECT_EQ(vSize(bridge->b_.from_point_ - bridge->b_.to_point_), 100) << "The second bridge should also be equally short in this case."; - EXPECT_EQ(LinearAlg2D::getDist2BetweenLineSegments(bridge->a_.from_point_, bridge->a_.to_point_, bridge->b_.from_point_, bridge->b_.to_point_), 100 * 100) << "The bridges should be spaced 1 line width (100 units) apart."; + EXPECT_EQ(LinearAlg2D::getDist2BetweenLineSegments(bridge->a_.from_point_, bridge->a_.to_point_, bridge->b_.from_point_, bridge->b_.to_point_), 100 * 100) + << "The bridges should be spaced 1 line width (100 units) apart."; EXPECT_LT(LinearAlg2D::pointIsLeftOfLine(bridge->b_.from_point_, bridge->a_.from_point_, bridge->a_.to_point_), 0) << "Connection B should be to the right of connection A."; EXPECT_LT(LinearAlg2D::pointIsLeftOfLine(bridge->b_.to_point_, bridge->a_.from_point_, bridge->a_.to_point_), 0) << "Connection B should be to the right of connection A."; } @@ -90,7 +94,8 @@ TEST_F(PolygonConnectorTest, getBridgeAdjacentSquares) EXPECT_EQ(vSize(bridge->a_.from_point_ - bridge->a_.to_point_), 100) << "The polygons are 100 units spaced apart, so this is the shortest possible bridge."; EXPECT_EQ(vSize(bridge->b_.from_point_ - bridge->b_.to_point_), 100) << "The second bridge should also be equally short in this case."; - EXPECT_EQ(LinearAlg2D::getDist2BetweenLineSegments(bridge->a_.from_point_, bridge->a_.to_point_, bridge->b_.from_point_, bridge->b_.to_point_), 100 * 100) << "The bridges should be spaced 1 line width (100 units) apart."; + EXPECT_EQ(LinearAlg2D::getDist2BetweenLineSegments(bridge->a_.from_point_, bridge->a_.to_point_, bridge->b_.from_point_, bridge->b_.to_point_), 100 * 100) + << "The bridges should be spaced 1 line width (100 units) apart."; EXPECT_LT(LinearAlg2D::pointIsLeftOfLine(bridge->b_.from_point_, bridge->a_.from_point_, bridge->a_.to_point_), 0) << "Connection B should be to the right of connection A."; EXPECT_LT(LinearAlg2D::pointIsLeftOfLine(bridge->b_.to_point_, bridge->a_.from_point_, bridge->a_.to_point_), 0) << "Connection B should be to the right of connection A."; } @@ -113,8 +118,10 @@ TEST_F(PolygonConnectorTest, getBridgeClosest) ASSERT_NE(bridge, std::nullopt) << "The two polygons are adjacent and spaced closely enough to bridge along their entire side, even with the slant."; - EXPECT_EQ(bridge->b_.from_point_, Point2LL(1000, 200)) << "The closest connection is [1000,200] -> [1100,200]. There is no space to the right of that, so bridge B should be there."; - EXPECT_EQ(bridge->b_.to_point_, Point2LL(1100, 200)) << "The closest connection is [1000,200] -> [1100,200]. There is no space to the right of that, so bridge B should be there."; + EXPECT_EQ(bridge->b_.from_point_, Point2LL(1000, 200)) + << "The closest connection is [1000,200] -> [1100,200]. There is no space to the right of that, so bridge B should be there."; + EXPECT_EQ(bridge->b_.to_point_, Point2LL(1100, 200)) + << "The closest connection is [1000,200] -> [1100,200]. There is no space to the right of that, so bridge B should be there."; EXPECT_GT(LinearAlg2D::pointIsLeftOfLine(bridge->a_.from_point_, bridge->b_.from_point_, bridge->b_.to_point_), 0) << "Connection A should be to the left of connection B."; EXPECT_GT(LinearAlg2D::pointIsLeftOfLine(bridge->a_.to_point_, bridge->b_.from_point_, bridge->b_.to_point_), 0) << "Connection A should be to the left of connection B."; } @@ -133,7 +140,8 @@ TEST_F(PolygonConnectorTest, getBridgeTooFar) std::optional> bridge = pc->getBridge(test_square, to_connect); - EXPECT_EQ(bridge, std::nullopt) << "The two polygons are 200 units apart where they are closest, which is more than 1.5 times the line width (100), so they can't be connected."; + EXPECT_EQ(bridge, std::nullopt) + << "The two polygons are 200 units apart where they are closest, which is more than 1.5 times the line width (100), so they can't be connected."; } /*! @@ -154,7 +162,8 @@ TEST_F(PolygonConnectorTest, getBridgeTooNarrow) std::optional> bridge = pc->getBridge(test_square, to_connect); - EXPECT_EQ(bridge, std::nullopt) << "Where the two polygons are adjacent is only 80 units wide. This is not enough to create a bridge with the connecting lines spaced 1 line width (100 units) apart."; + EXPECT_EQ(bridge, std::nullopt) + << "Where the two polygons are adjacent is only 80 units wide. This is not enough to create a bridge with the connecting lines spaced 1 line width (100 units) apart."; } /*! @@ -164,14 +173,14 @@ TEST_F(PolygonConnectorTest, getBridgeTooNarrow) */ TEST_F(PolygonConnectorTest, connectFourNested) { - Polygons connecting; - connecting.add(test_square_around); // 1200-wide square. - connecting.add(test_square); // 1000-wide square. - connecting.add(test_square.offset(-100)); // 800-wide square. - connecting.add(test_square.offset(-200)); // 600-wide square. + Shape connecting; + connecting.push_back(test_square_around); // 1200-wide square. + connecting.push_back(test_square); // 1000-wide square. + connecting.push_back(test_square.offset(-100)); // 800-wide square. + connecting.push_back(test_square.offset(-200)); // 600-wide square. pc->add(connecting); - Polygons output_polygons; + Shape output_polygons; std::vector output_paths; pc->connect(output_polygons, output_paths); diff --git a/tests/utils/PolygonTest.cpp b/tests/utils/PolygonTest.cpp index bdf84466e1..fec93cad6b 100644 --- a/tests/utils/PolygonTest.cpp +++ b/tests/utils/PolygonTest.cpp @@ -1,11 +1,17 @@ -// Copyright (c) 2022 Ultimaker B.V. +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher. -#include "utils/polygon.h" // The class under test. +#include "geometry/Polygon.h" // The class under test. + +#include + +#include + +#include "geometry/OpenPolyline.h" +#include "geometry/SingleShape.h" #include "utils/Coord_t.h" #include "utils/SVG.h" // helper functions #include "utils/polygonUtils.h" // helper functions -#include // NOLINTBEGIN(*-magic-numbers) namespace cura @@ -21,7 +27,7 @@ class PolygonTest : public testing::Test Polygon clipper_bug; Polygon clockwise_large; Polygon clockwise_small; - Polygons clockwise_donut; + Shape clockwise_donut; Polygon line; Polygon small_area; @@ -63,10 +69,10 @@ class PolygonTest : public testing::Test clockwise_small.emplace_back(50, 50); clockwise_small.emplace_back(50, -50); - Polygons outer; - Polygons inner; - outer.add(clockwise_large); - inner.add(clockwise_small); + Shape outer; + Shape inner; + outer.push_back(clockwise_large); + inner.push_back(clockwise_small); clockwise_donut = outer.difference(inner); line.emplace_back(0, 0); @@ -77,18 +83,29 @@ class PolygonTest : public testing::Test small_area.emplace_back(10, 10); small_area.emplace_back(0, 10); } - void twoPolygonsAreEqual(Polygons& polygon1, Polygons& polygon2) const + void twoPolygonsAreEqual(Shape& shape1, Shape& shape2) const { - auto poly_cmp = [](const ClipperLib::Path& a, const ClipperLib::Path& b) { return std::lexicographical_compare(a.begin(), a.end(), b.begin(), b.end(), [](const Point2LL& p1, const Point2LL& p2) { return p1 < p2; }); }; - std::sort(polygon1.begin(), polygon1.end(), poly_cmp); - std::sort(polygon2.begin(), polygon2.end(), poly_cmp); - - std::vector difference; - std::set_difference(polygon1.begin(), polygon1.end(), polygon2.begin(), polygon2.end(), std::back_inserter(difference), poly_cmp); + auto poly_cmp = [](const Polygon& a, const Polygon& b) + { + return std::lexicographical_compare( + a.begin(), + a.end(), + b.begin(), + b.end(), + [](const Point2LL& p1, const Point2LL& p2) + { + return p1 < p2; + }); + }; + std::sort(shape1.begin(), shape1.end(), poly_cmp); + std::sort(shape2.begin(), shape2.end(), poly_cmp); + + LinesSet difference; + std::set_difference(shape1.begin(), shape1.end(), shape2.begin(), shape2.end(), std::back_inserter(difference), poly_cmp); ASSERT_TRUE(difference.empty()) << "Paths in polygon1 not found in polygon2:" << difference; difference.clear(); - std::set_difference(polygon2.begin(), polygon2.end(), polygon1.begin(), polygon1.end(), std::back_inserter(difference), poly_cmp); + std::set_difference(shape2.begin(), shape2.end(), shape1.begin(), shape1.end(), std::back_inserter(difference), poly_cmp); ASSERT_TRUE(difference.empty()) << "Paths in polygon2 not found in polygon1:" << difference; } }; @@ -96,30 +113,30 @@ class PolygonTest : public testing::Test TEST_F(PolygonTest, polygonOffsetTest) { - Polygons test_squares; - test_squares.add(test_square); - const Polygons expanded = test_squares.offset(25); - const coord_t expanded_length = expanded.polygonLength(); + Shape test_squares; + test_squares.push_back(test_square); + const Shape expanded = test_squares.offset(25); + const coord_t expanded_length = expanded.length(); - Polygons square_hole; - PolygonRef square_inverted = square_hole.newPoly(); + Shape square_hole; + Polygon& square_inverted = square_hole.newLine(); for (int i = test_square.size() - 1; i >= 0; i--) { - square_inverted.add(test_square[i]); + square_inverted.push_back(test_square[i]); } - const Polygons contracted = square_hole.offset(25); - const coord_t contracted_length = contracted.polygonLength(); + const Shape contracted = square_hole.offset(25); + const coord_t contracted_length = contracted.length(); ASSERT_NEAR(expanded_length, contracted_length, 5) << "Offset on outside poly is different from offset on inverted poly!"; } TEST_F(PolygonTest, polygonOffsetBugTest) { - Polygons polys; - polys.add(clipper_bug); - const Polygons offsetted = polys.offset(-20); + Shape polys; + polys.push_back(clipper_bug); + const Shape offsetted = polys.offset(-20); - for (const ConstPolygonRef poly : offsetted) + for (const Polygon& poly : offsetted) { for (const Point2LL& p : poly) { @@ -130,8 +147,8 @@ TEST_F(PolygonTest, polygonOffsetBugTest) TEST_F(PolygonTest, isOutsideTest) { - Polygons test_triangle; - test_triangle.add(triangle); + Shape test_triangle; + test_triangle.push_back(triangle); EXPECT_FALSE(test_triangle.inside(Point2LL(0, 100))) << "Left point should be outside the triangle."; EXPECT_FALSE(test_triangle.inside(Point2LL(100, 100))) << "Middle left point should be outside the triangle."; @@ -143,28 +160,28 @@ TEST_F(PolygonTest, isOutsideTest) TEST_F(PolygonTest, isInsideTest) { - Polygons test_polys; - PolygonRef poly = test_polys.newPoly(); - poly.add(Point2LL(82124, 98235)); - poly.add(Point2LL(83179, 98691)); - poly.add(Point2LL(83434, 98950)); - poly.add(Point2LL(82751, 99026)); - poly.add(Point2LL(82528, 99019)); - poly.add(Point2LL(81605, 98854)); - poly.add(Point2LL(80401, 98686)); - poly.add(Point2LL(79191, 98595)); - poly.add(Point2LL(78191, 98441)); - poly.add(Point2LL(78998, 98299)); - poly.add(Point2LL(79747, 98179)); - poly.add(Point2LL(80960, 98095)); + Shape test_polys; + Polygon& poly = test_polys.newLine(); + poly.push_back(Point2LL(82124, 98235)); + poly.push_back(Point2LL(83179, 98691)); + poly.push_back(Point2LL(83434, 98950)); + poly.push_back(Point2LL(82751, 99026)); + poly.push_back(Point2LL(82528, 99019)); + poly.push_back(Point2LL(81605, 98854)); + poly.push_back(Point2LL(80401, 98686)); + poly.push_back(Point2LL(79191, 98595)); + poly.push_back(Point2LL(78191, 98441)); + poly.push_back(Point2LL(78998, 98299)); + poly.push_back(Point2LL(79747, 98179)); + poly.push_back(Point2LL(80960, 98095)); EXPECT_TRUE(test_polys.inside(Point2LL(78315, 98440))) << "Point should be inside the polygons!"; } TEST_F(PolygonTest, isOnBorderTest) { - Polygons test_triangle; - test_triangle.add(triangle); + Shape test_triangle; + test_triangle.push_back(triangle); EXPECT_FALSE(test_triangle.inside(Point2LL(200, 0), false)) << "Point is on the bottom edge of the triangle."; EXPECT_TRUE(test_triangle.inside(Point2LL(200, 0), true)) << "Point is on the bottom edge of the triangle."; @@ -174,8 +191,8 @@ TEST_F(PolygonTest, isOnBorderTest) TEST_F(PolygonTest, DISABLED_isInsideLineTest) // Disabled because this fails due to a bug in Clipper. { - Polygons polys; - polys.add(line); + Shape polys; + polys.push_back(line); EXPECT_FALSE(polys.inside(Point2LL(50, 0), false)) << "Should be outside since it is on the border and border is considered outside."; EXPECT_TRUE(polys.inside(Point2LL(50, 0), true)) << "Should be inside since it is on the border and border is considered inside."; @@ -183,25 +200,25 @@ TEST_F(PolygonTest, DISABLED_isInsideLineTest) // Disabled because this fails du TEST_F(PolygonTest, splitIntoPartsWithHoleTest) { - const std::vector parts = clockwise_donut.splitIntoParts(); + const std::vector parts = clockwise_donut.splitIntoParts(); - EXPECT_EQ(parts.size(), 1) << "Difference between two polygons should be one PolygonsPart!"; + EXPECT_EQ(parts.size(), 1) << "Difference between two polygons should be one SingleShape!"; } TEST_F(PolygonTest, differenceContainsOriginalPointTest) { - const PolygonsPart part = clockwise_donut.splitIntoParts()[0]; - const ConstPolygonRef outer = part.outerPolygon(); + const SingleShape part = clockwise_donut.splitIntoParts()[0]; + const Polygon& outer = part.outerPolygon(); EXPECT_NE(std::find(outer.begin(), outer.end(), clockwise_large[0]), outer.end()) << "Outer vertex must be in polygons difference."; - const ConstPolygonRef inner = part[1]; + const Polygon& inner = part[1]; EXPECT_NE(std::find(inner.begin(), inner.end(), clockwise_small[0]), inner.end()) << "Inner vertex must be in polygons difference."; } TEST_F(PolygonTest, differenceClockwiseTest) { - const PolygonsPart part = clockwise_donut.splitIntoParts()[0]; + const SingleShape part = clockwise_donut.splitIntoParts()[0]; - const ConstPolygonRef outer = part.outerPolygon(); + const Polygon& outer = part.outerPolygon(); // Apply the shoelace formula to determine surface area. If it's negative, the polygon is counterclockwise. coord_t area = 0; for (size_t point_index = 0; point_index < outer.size(); point_index++) @@ -213,7 +230,7 @@ TEST_F(PolygonTest, differenceClockwiseTest) } EXPECT_LT(area, 0) << "Outer polygon should be counter-clockwise."; - const ConstPolygonRef inner = part[1]; + const Polygon& inner = part[1]; area = 0; for (size_t point_index = 0; point_index < inner.size(); point_index++) { @@ -225,29 +242,17 @@ TEST_F(PolygonTest, differenceClockwiseTest) EXPECT_GT(area, 0) << "Inner polygon should be clockwise."; } -TEST_F(PolygonTest, getEmptyHolesTest) -{ - const Polygons holes = clockwise_donut.getEmptyHoles(); - - ASSERT_EQ(holes.size(), 1); - ASSERT_EQ(holes[0].size(), clockwise_small.size()) << "Empty hole should have the same amount of vertices as the original polygon."; - for (size_t point_index = 0; point_index < holes[0].size(); point_index++) - { - EXPECT_EQ(holes[0][point_index], clockwise_small[point_index]) << "Coordinates of the empty hole must be the same as the original polygon."; - } -} - /* * The convex hull of a cube should still be a cube */ TEST_F(PolygonTest, convexTestCube) { - Polygons d_polygons; - PolygonRef d = d_polygons.newPoly(); - d.add(Point2LL(0, 0)); - d.add(Point2LL(10, 0)); - d.add(Point2LL(10, 10)); - d.add(Point2LL(0, 10)); + Shape d_polygons; + Polygon& d = d_polygons.newLine(); + d.push_back(Point2LL(0, 0)); + d.push_back(Point2LL(10, 0)); + d.push_back(Point2LL(10, 10)); + d.push_back(Point2LL(0, 10)); d_polygons.makeConvex(); @@ -263,8 +268,8 @@ TEST_F(PolygonTest, convexTestCube) */ TEST_F(PolygonTest, convexHullStar) { - Polygons d_polygons; - PolygonRef d = d_polygons.newPoly(); + Shape d_polygons; + Polygon& d = d_polygons.newLine(); const int num_points = 10; const int outer_radius = 20; @@ -274,11 +279,11 @@ TEST_F(PolygonTest, convexHullStar) { coord_t x_outer = -std::cos(angle_step * i) * outer_radius; coord_t y_outer = -std::sin(angle_step * i) * outer_radius; - d.add(Point2LL(x_outer, y_outer)); + d.push_back(Point2LL(x_outer, y_outer)); coord_t x_inner = -std::cos(angle_step * (i + 0.5)) * inner_radius; coord_t y_inner = -std::sin(angle_step * (i + 0.5)) * inner_radius; - d.add(Point2LL(x_inner, y_inner)); + d.push_back(Point2LL(x_inner, y_inner)); } d_polygons.makeConvex(); @@ -299,12 +304,12 @@ TEST_F(PolygonTest, convexHullStar) */ TEST_F(PolygonTest, convexHullMultipleMinX) { - Polygons d_polygons; - PolygonRef d = d_polygons.newPoly(); - d.add(Point2LL(0, 0)); - d.add(Point2LL(0, -10)); - d.add(Point2LL(10, 0)); - d.add(Point2LL(0, 10)); + Shape d_polygons; + Polygon& d = d_polygons.newLine(); + d.push_back(Point2LL(0, 0)); + d.push_back(Point2LL(0, -10)); + d.push_back(Point2LL(10, 0)); + d.push_back(Point2LL(0, 10)); /* * x\ x\ @@ -325,16 +330,16 @@ TEST_F(PolygonTest, convexHullMultipleMinX) */ TEST_F(PolygonTest, convexTestCubeColinear) { - Polygons d_polygons; - PolygonRef d = d_polygons.newPoly(); - d.add(Point2LL(0, 0)); - d.add(Point2LL(5, 0)); - d.add(Point2LL(10, 0)); - d.add(Point2LL(10, 5)); - d.add(Point2LL(10, 10)); - d.add(Point2LL(5, 10)); - d.add(Point2LL(0, 10)); - d.add(Point2LL(0, 5)); + Shape d_polygons; + Polygon& d = d_polygons.newLine(); + d.push_back(Point2LL(0, 0)); + d.push_back(Point2LL(5, 0)); + d.push_back(Point2LL(10, 0)); + d.push_back(Point2LL(10, 5)); + d.push_back(Point2LL(10, 10)); + d.push_back(Point2LL(5, 10)); + d.push_back(Point2LL(0, 10)); + d.push_back(Point2LL(0, 5)); d_polygons.makeConvex(); @@ -350,16 +355,16 @@ TEST_F(PolygonTest, convexTestCubeColinear) */ TEST_F(PolygonTest, convexHullRemoveDuplicatePoints) { - Polygons d_polygons; - PolygonRef d = d_polygons.newPoly(); - d.add(Point2LL(0, 0)); - d.add(Point2LL(0, 0)); - d.add(Point2LL(10, 0)); - d.add(Point2LL(10, 0)); - d.add(Point2LL(10, 10)); - d.add(Point2LL(10, 10)); - d.add(Point2LL(0, 10)); - d.add(Point2LL(0, 10)); + Shape d_polygons; + Polygon& d = d_polygons.newLine(); + d.push_back(Point2LL(0, 0)); + d.push_back(Point2LL(0, 0)); + d.push_back(Point2LL(10, 0)); + d.push_back(Point2LL(10, 0)); + d.push_back(Point2LL(10, 10)); + d.push_back(Point2LL(10, 10)); + d.push_back(Point2LL(0, 10)); + d.push_back(Point2LL(0, 10)); d_polygons.makeConvex(); @@ -379,10 +384,10 @@ TEST_F(PolygonTest, removeSmallAreas_simple) // basic set of polygons auto test_square_2 = test_square; test_square_2.translate(Point2LL(0, 500)); - auto d_polygons = Polygons{}; - d_polygons.add(test_square); - d_polygons.add(test_square_2); - d_polygons.add(triangle); + auto d_polygons = Shape{}; + d_polygons.push_back(test_square); + d_polygons.push_back(test_square_2); + d_polygons.push_back(triangle); // for the simple case there should be no change. auto act_polygons = d_polygons; @@ -410,16 +415,16 @@ TEST_F(PolygonTest, removeSmallAreas_small_area) triangle_1.translate(Point2LL(50, 0)); // add areas to polygons - auto d_polygons = Polygons{}; - d_polygons.add(small_area_1); - d_polygons.add(small_area_2); - d_polygons.add(test_square); // area = 10000 micron^2 = 1e-2 mm^2 - d_polygons.add(triangle_1); + auto d_polygons = Shape{}; + d_polygons.push_back(small_area_1); + d_polygons.push_back(small_area_2); + d_polygons.push_back(test_square); // area = 10000 micron^2 = 1e-2 mm^2 + d_polygons.push_back(triangle_1); - // make an expected Polygons - auto exp_polygons = Polygons{}; - exp_polygons.add(test_square); - exp_polygons.add(triangle_1); + // make an expected Shape + auto exp_polygons = Shape{}; + exp_polygons.push_back(test_square); + exp_polygons.push_back(triangle_1); // for remove_holes == false, 2 poly removed auto act_polygons = d_polygons; @@ -444,9 +449,9 @@ TEST_F(PolygonTest, removeSmallAreas_hole) small_hole_1.translate(Point2LL(10, 10)); // add areas to polygons - auto d_polygons = Polygons{}; - d_polygons.add(test_square); // area = 10000 micron^2 = 1e-2 mm^2 - d_polygons.add(small_hole_1); + auto d_polygons = Shape{}; + d_polygons.push_back(test_square); // area = 10000 micron^2 = 1e-2 mm^2 + d_polygons.push_back(small_hole_1); // for remove_holes == false there should be no change. @@ -455,9 +460,9 @@ TEST_F(PolygonTest, removeSmallAreas_hole) twoPolygonsAreEqual(act_polygons, d_polygons); // for remove_holes == true there should be one less poly. - // make an expected Polygons - auto exp_polygons = Polygons{}; - exp_polygons.add(test_square); + // make an expected Shape + auto exp_polygons = Shape{}; + exp_polygons.push_back(test_square); act_polygons = d_polygons; act_polygons.removeSmallAreas(1e-3, true); twoPolygonsAreEqual(act_polygons, exp_polygons); @@ -475,33 +480,33 @@ TEST_F(PolygonTest, removeSmallAreas_hole_2) small_hole_1.translate(Point2LL(10, 10)); small_hole_2.translate(Point2LL(160, 160)); auto med_square_1 = Polygon{}; // area = 2500 micron^2 = 2.5e-3 mm^2 - med_square_1.add(Point2LL(0, 0)); - med_square_1.add(Point2LL(50, 0)); - med_square_1.add(Point2LL(50, 50)); - med_square_1.add(Point2LL(0, 50)); + med_square_1.push_back(Point2LL(0, 0)); + med_square_1.push_back(Point2LL(50, 0)); + med_square_1.push_back(Point2LL(50, 50)); + med_square_1.push_back(Point2LL(0, 50)); med_square_1.translate(Point2LL(150, 150)); // add areas to polygons - auto d_polygons = Polygons{}; - d_polygons.add(test_square); // area = 10000 micron^2 = 1e-2 mm^2 - d_polygons.add(small_hole_1); - d_polygons.add(med_square_1); - d_polygons.add(small_hole_2); + auto d_polygons = Shape{}; + d_polygons.push_back(test_square); // area = 10000 micron^2 = 1e-2 mm^2 + d_polygons.push_back(small_hole_1); + d_polygons.push_back(med_square_1); + d_polygons.push_back(small_hole_2); // for remove_holes == false, two polygons removed. auto act_polygons = d_polygons; - // make an expected Polygons - auto exp_polygons = Polygons{}; - exp_polygons.add(test_square); - exp_polygons.add(small_hole_1); + // make an expected Shape + auto exp_polygons = Shape{}; + exp_polygons.push_back(test_square); + exp_polygons.push_back(small_hole_1); act_polygons.removeSmallAreas(3e-3, false); twoPolygonsAreEqual(act_polygons, exp_polygons); // for remove_holes == true, three polygons removed. act_polygons = d_polygons; // make an expected Polygons - exp_polygons = Polygons{}; - exp_polygons.add(test_square); + exp_polygons = Shape{}; + exp_polygons.push_back(test_square); act_polygons.removeSmallAreas(3e-3, true); twoPolygonsAreEqual(act_polygons, exp_polygons); } @@ -528,33 +533,60 @@ TEST_F(PolygonTest, removeSmallAreas_complex) triangle_1.translate(Point2LL(600, 0)); // add areas to polygons - auto d_polygons = Polygons{}; - d_polygons.add(small_area_1); - d_polygons.add(small_area_2); - d_polygons.add(test_square); // area = 10000 micron^2 = 1e-2 mm^2 - d_polygons.add(small_hole_1); - d_polygons.add(small_hole_2); - d_polygons.add(triangle_1); + auto d_polygons = Shape{}; + d_polygons.push_back(small_area_1); + d_polygons.push_back(small_area_2); + d_polygons.push_back(test_square); // area = 10000 micron^2 = 1e-2 mm^2 + d_polygons.push_back(small_hole_1); + d_polygons.push_back(small_hole_2); + d_polygons.push_back(triangle_1); // for remove_holes == false there should be 2 small areas removed. auto act_polygons = d_polygons; - // make an expected Polygons - auto exp_polygons = Polygons{}; - exp_polygons.add(test_square); // area = 10000 micron^2 = 1e-2 mm^2 - exp_polygons.add(small_hole_1); - exp_polygons.add(small_hole_2); - exp_polygons.add(triangle_1); + // make an expected Shape + auto exp_polygons = Shape{}; + exp_polygons.push_back(test_square); // area = 10000 micron^2 = 1e-2 mm^2 + exp_polygons.push_back(small_hole_1); + exp_polygons.push_back(small_hole_2); + exp_polygons.push_back(triangle_1); act_polygons.removeSmallAreas(1e-3, false); twoPolygonsAreEqual(act_polygons, exp_polygons); // for remove_holes == true there should be 2 small areas and 2 small holes removed. act_polygons = d_polygons; // make an expected Polygons - exp_polygons = Polygons{}; - exp_polygons.add(test_square); - exp_polygons.add(triangle_1); // area = 10000 micron^2 = 1e-2 mm^2 + exp_polygons = Shape{}; + exp_polygons.push_back(test_square); + exp_polygons.push_back(triangle_1); // area = 10000 micron^2 = 1e-2 mm^2 act_polygons.removeSmallAreas(1e-3, true); twoPolygonsAreEqual(act_polygons, exp_polygons); } + +/* + * Test that we can iterate over segments of open/closed polylines and convert them to each other + */ +TEST_F(PolygonTest, openCloseLines) +{ + // make some line + OpenPolyline open_polyline; + open_polyline.emplace_back(0, 0); + open_polyline.emplace_back(1000, 0); + open_polyline.emplace_back(1000, 1000); + open_polyline.emplace_back(0, 1000); + + // Make some casts and check that the results are consistent + EXPECT_EQ(open_polyline.length(), 3000); + + ClosedPolyline closed_polyline(open_polyline.getPoints(), false); + EXPECT_EQ(closed_polyline.length(), 4000); + + Polygon polygon(closed_polyline.getPoints(), false); + EXPECT_EQ(polygon.area(), 1000000); + + // Check advanced calculations on segment length + EXPECT_TRUE(open_polyline.shorterThan(3500)); + EXPECT_FALSE(closed_polyline.shorterThan(3500)); +} + } // namespace cura // NOLINTEND(*-magic-numbers) diff --git a/tests/utils/PolygonUtilsTest.cpp b/tests/utils/PolygonUtilsTest.cpp index f859a48c08..dd13f1e5ad 100644 --- a/tests/utils/PolygonUtilsTest.cpp +++ b/tests/utils/PolygonUtilsTest.cpp @@ -5,9 +5,9 @@ #include +#include "geometry/Point2LL.h" // Creating and testing with points. +#include "geometry/Polygon.h" // Creating polygons to test with. #include "utils/Coord_t.h" -#include "utils/Point2LL.h" // Creating and testing with points. -#include "utils/polygon.h" // Creating polygons to test with. // NOLINTBEGIN(*-magic-numbers) namespace cura @@ -56,7 +56,7 @@ class MoveInsideTest : public testing::TestWithParam TEST_P(MoveInsideTest, MoveInside) { const MoveInsideParameters parameters = GetParam(); - const ClosestPolygonPoint cpp = PolygonUtils::findClosest(parameters.close_to, test_square); + const ClosestPointPolygon cpp = PolygonUtils::findClosest(parameters.close_to, test_square); Point2LL result = PolygonUtils::moveInside(cpp, parameters.distance); // FIXME: Clean-up message with ftm when CURA-8258 is implemented or when we use C++20 @@ -70,8 +70,8 @@ TEST_P(MoveInsideTest, MoveInside) TEST_P(MoveInsideTest, MoveInside2) { const MoveInsideParameters parameters = GetParam(); - Polygons polys; - polys.add(test_square); + Shape polys; + polys.push_back(test_square); Point2LL result = parameters.close_to; PolygonUtils::moveInside2(polys, result, parameters.distance); ASSERT_LE(vSize(result - parameters.supposed), 10) << parameters.close_to << " moved with " << parameters.distance << " micron inside to " << result << "rather than " @@ -99,7 +99,7 @@ TEST_F(MoveInsideTest, cornerEdgeTest) const Point2LL supposed1(80, 80); // Allow two possible values here, since the behaviour for this edge case is not specified. const Point2LL supposed2(72, 100); constexpr coord_t distance = 28; - const ClosestPolygonPoint cpp = PolygonUtils::findClosest(close_to, test_square); + const ClosestPointPolygon cpp = PolygonUtils::findClosest(close_to, test_square); const Point2LL result = PolygonUtils::moveInside(cpp, distance); constexpr coord_t maximum_error = 10; @@ -120,7 +120,7 @@ TEST_F(MoveInsideTest, middleTest) const Point2LL supposed3(20, 50); const Point2LL supposed4(50, 20); constexpr coord_t distance = 20; - const ClosestPolygonPoint cpp = PolygonUtils::findClosest(close_to, test_square); + const ClosestPointPolygon cpp = PolygonUtils::findClosest(close_to, test_square); const Point2LL result = PolygonUtils::moveInside(cpp, distance); constexpr coord_t maximum_error = 10; @@ -142,7 +142,7 @@ TEST_F(MoveInsideTest, middleTestPenalty) const Point2LL supposed(80, 50); const Point2LL preferred_dir(120, 60); constexpr coord_t distance = 20; - const ClosestPolygonPoint cpp = PolygonUtils::findClosest( + const ClosestPointPolygon cpp = PolygonUtils::findClosest( close_to, test_square, [preferred_dir](Point2LL candidate) @@ -164,8 +164,8 @@ TEST_F(MoveInsideTest, cornerEdgeTest2) const Point2LL supposed1(80, 80); // Allow two possible values here, since the behaviour for this edge case is not specified. const Point2LL supposed2(72, 100); constexpr coord_t distance = 28; - Polygons polys; - polys.add(test_square); + Shape polys; + polys.push_back(test_square); Point2LL result = close_to; PolygonUtils::moveInside2(polys, result, distance); @@ -178,9 +178,9 @@ TEST_F(MoveInsideTest, pointyCorner) { const Point2LL from(55, 100); // Above pointy bit. Point2LL result(from); - Polygons inside; - inside.add(pointy_square); - ClosestPolygonPoint cpp = PolygonUtils::ensureInsideOrOutside(inside, result, 10); + Shape inside; + inside.push_back(pointy_square); + ClosestPointPolygon cpp = PolygonUtils::ensureInsideOrOutside(inside, result, 10); ASSERT_NE(cpp.point_idx_, NO_INDEX) << "Couldn't ensure point inside close to " << from << "."; ASSERT_NE(cpp.poly_idx_, NO_INDEX) << "Couldn't ensure point inside close to " << from << "."; @@ -192,10 +192,10 @@ TEST_F(MoveInsideTest, pointyCornerFail) // Should fail with normal moveInside2 (and the like). const Point2LL from(55, 170); // Above pointy bit. Point2LL result(from); - Polygons inside; - inside.add(pointy_square); + Shape inside; + inside.push_back(pointy_square); - ClosestPolygonPoint cpp = PolygonUtils::moveInside2(inside, result, 10); + ClosestPointPolygon cpp = PolygonUtils::moveInside2(inside, result, 10); ASSERT_NE(cpp.point_idx_, NO_INDEX) << "Couldn't ensure point inside close to " << from << "."; ASSERT_NE(cpp.poly_idx_, NO_INDEX) << "Couldn't ensure point inside close to " << from << "."; ASSERT_FALSE(inside.inside(result)) << from << " could be moved inside, while it was designed to fail."; @@ -206,10 +206,10 @@ TEST_F(MoveInsideTest, outsidePointyCorner) const Point2LL from(60, 70); // Above pointy bit. Point2LL result(from); const Point2LL supposed(50, 70); // 10 below pointy bit. - Polygons inside; - inside.add(pointy_square); + Shape inside; + inside.push_back(pointy_square); - const ClosestPolygonPoint cpp = PolygonUtils::ensureInsideOrOutside(inside, result, -10); + const ClosestPointPolygon cpp = PolygonUtils::ensureInsideOrOutside(inside, result, -10); ASSERT_NE(cpp.point_idx_, NO_INDEX) << "Couldn't ensure point inside close to " << from << "."; ASSERT_NE(cpp.poly_idx_, NO_INDEX) << "Couldn't ensure point inside close to " << from << "."; ASSERT_TRUE(! inside.inside(result)) << from << " couldn't be moved outside."; @@ -221,10 +221,10 @@ TEST_F(MoveInsideTest, outsidePointyCornerFail) const Point2LL from(60, 70); // Above pointy bit. Point2LL result(from); const Point2LL supposed(50, 70); // 10 below pointy bit. - Polygons inside; - inside.add(pointy_square); + Shape inside; + inside.push_back(pointy_square); - const ClosestPolygonPoint cpp = PolygonUtils::moveInside2(inside, result, -10); + const ClosestPointPolygon cpp = PolygonUtils::moveInside2(inside, result, -10); ASSERT_NE(cpp.point_idx_, NO_INDEX) << "Couldn't ensure point inside close to " << from << "."; ASSERT_NE(cpp.poly_idx_, NO_INDEX) << "Couldn't ensure point inside close to " << from << "."; ASSERT_FALSE(! inside.inside(result)) << from << " could be moved outside to " << result << ", while it was designed to fail."; @@ -265,11 +265,11 @@ class FindCloseTest : public testing::TestWithParam TEST_P(FindCloseTest, FindClose) { const FindCloseParameters parameters = GetParam(); - Polygons polygons; - polygons.add(test_square); + Shape polygons; + polygons.push_back(test_square); auto loc_to_line = PolygonUtils::createLocToLineGrid(polygons, parameters.cell_size); - std::optional cpp; + std::optional cpp; if (parameters.penalty_function) { cpp = PolygonUtils::findClose(parameters.close_to, polygons, *loc_to_line, *parameters.penalty_function); @@ -312,9 +312,9 @@ INSTANTIATE_TEST_SUITE_P( class PolygonUtilsTest : public testing::Test { public: - Polygons test_squares; - Polygons test_line; - Polygons test_line_extra_vertices; // Line that has extra vertices along it that are technically unnecessary. + Shape test_squares; + Shape test_line; + Shape test_line_extra_vertices; // Line that has extra vertices along it that are technically unnecessary. PolygonUtilsTest() { @@ -323,61 +323,22 @@ class PolygonUtilsTest : public testing::Test test_square.emplace_back(100, 0); test_square.emplace_back(100, 100); test_square.emplace_back(0, 100); - test_squares.add(test_square); + test_squares.push_back(test_square); Polygon line; line.emplace_back(0, 0); line.emplace_back(100, 0); - test_line.add(line); + test_line.push_back(line); Polygon line_extra_vertices; line_extra_vertices.emplace_back(100, 0); line_extra_vertices.emplace_back(25, 0); line_extra_vertices.emplace_back(0, 0); line_extra_vertices.emplace_back(75, 0); - test_line_extra_vertices.add(line_extra_vertices); + test_line_extra_vertices.push_back(line_extra_vertices); } }; -TEST_F(PolygonUtilsTest, spreadDotsSegment) -{ - std::vector supposed; - supposed.emplace_back(Point2LL(50, 0), 0, test_squares[0], 0); - supposed.emplace_back(Point2LL(100, 0), 1, test_squares[0], 0); - supposed.emplace_back(Point2LL(100, 50), 1, test_squares[0], 0); - - std::vector result; - PolygonUtils::spreadDots(PolygonsPointIndex(&test_squares, 0, 0), PolygonsPointIndex(&test_squares, 0, 2), 3, result); - - ASSERT_EQ(result.size(), supposed.size()); - for (size_t point_idx = 0; point_idx < result.size(); point_idx++) - { - EXPECT_EQ(result[point_idx].p(), supposed[point_idx].p()); - } -} - -TEST_F(PolygonUtilsTest, spreadDotsFull) -{ - std::vector supposed; - supposed.emplace_back(Point2LL(0, 0), 0, test_squares[0], 0); - supposed.emplace_back(Point2LL(50, 0), 0, test_squares[0], 0); - supposed.emplace_back(Point2LL(100, 0), 1, test_squares[0], 0); - supposed.emplace_back(Point2LL(100, 50), 1, test_squares[0], 0); - supposed.emplace_back(Point2LL(100, 100), 2, test_squares[0], 0); - supposed.emplace_back(Point2LL(50, 100), 2, test_squares[0], 0); - supposed.emplace_back(Point2LL(0, 100), 3, test_squares[0], 0); - supposed.emplace_back(Point2LL(0, 50), 3, test_squares[0], 0); - - std::vector result; - PolygonUtils::spreadDots(PolygonsPointIndex(&test_squares, 0, 0), PolygonsPointIndex(&test_squares, 0, 0), 8, result); - - ASSERT_EQ(result.size(), supposed.size()); - for (size_t point_idx = 0; point_idx < result.size(); point_idx++) - { - EXPECT_EQ(result[point_idx].p(), supposed[point_idx].p()); - } -} - struct GetNextParallelIntersectionParameters { std::optional predicted; @@ -399,7 +360,7 @@ struct GetNextParallelIntersectionParameters class GetNextParallelIntersectionTest : public testing::TestWithParam { public: - Polygons test_squares; + Shape test_squares; GetNextParallelIntersectionTest() { @@ -408,7 +369,7 @@ class GetNextParallelIntersectionTest : public testing::TestWithParam computed = PolygonUtils::getNextParallelIntersection(start, parameters.line_to, parameters.dist, parameters.forward); + const ClosestPointPolygon start = PolygonUtils::findClosest(parameters.start_point, test_squares); + std::optional computed = PolygonUtils::getNextParallelIntersection(start, parameters.line_to, parameters.dist, parameters.forward); ASSERT_EQ(bool(parameters.predicted), bool(computed)) << "An answer was predicted but not computed, or computed but not predicted."; if (parameters.predicted) @@ -448,7 +409,7 @@ TEST_F(PolygonUtilsTest, RelativeHammingSquaresOverlap) TEST_F(PolygonUtilsTest, RelativeHammingDisjunct) { - Polygons shifted_polys = test_squares; // Make a copy. + Shape shifted_polys = test_squares; // Make a copy. shifted_polys[0].translate(Point2LL(200, 0)); ASSERT_EQ(PolygonUtils::relativeHammingDistance(test_squares, shifted_polys), 1.0); @@ -456,7 +417,7 @@ TEST_F(PolygonUtilsTest, RelativeHammingDisjunct) TEST_F(PolygonUtilsTest, RelativeHammingHalfOverlap) { - Polygons shifted_polys = test_squares; // Make a copy. + Shape shifted_polys = test_squares; // Make a copy. shifted_polys[0].translate(Point2LL(50, 0)); ASSERT_EQ(PolygonUtils::relativeHammingDistance(test_squares, shifted_polys), 0.5); @@ -469,7 +430,7 @@ TEST_F(PolygonUtilsTest, RelativeHammingHalfOverlap) */ TEST_F(PolygonUtilsTest, RelativeHammingQuarterOverlap) { - Polygons shifted_polys = test_squares; // Make a copy. + Shape shifted_polys = test_squares; // Make a copy. shifted_polys[0].translate(Point2LL(50, 50)); ASSERT_EQ(PolygonUtils::relativeHammingDistance(test_squares, shifted_polys), 0.75); @@ -506,7 +467,7 @@ TEST_F(PolygonUtilsTest, TEST_F(PolygonUtilsTest, RelativeHammingLineLineDisjunct) { - Polygons shifted_line = test_line; // Make a copy. + Shape shifted_line = test_line; // Make a copy. shifted_line[0].translate(Point2LL(0, 1)); ASSERT_EQ(PolygonUtils::relativeHammingDistance(test_line, test_line), 1.0); diff --git a/tests/utils/SimplifyTest.cpp b/tests/utils/SimplifyTest.cpp index 3b80885267..00cb98f0b6 100644 --- a/tests/utils/SimplifyTest.cpp +++ b/tests/utils/SimplifyTest.cpp @@ -3,6 +3,8 @@ #include "utils/Simplify.h" // The unit under test. +#include + #include #include "utils/Coord_t.h" @@ -50,7 +52,7 @@ class SimplifyTest : public testing::Test const double increment = segment_length / radius; // Segments of 990 units. for (double angle = 0; angle < tau; angle += increment) { - circle.add(Point2LL(std::cos(angle) * radius, std::sin(angle) * radius)); + circle.push_back(Point2LL(std::cos(angle) * radius, std::sin(angle) * radius)); } square_collinear.clear(); @@ -66,16 +68,16 @@ class SimplifyTest : public testing::Test switch (side) { case 0: - square_collinear.add(Point2LL(longitude, latitude)); + square_collinear.push_back(Point2LL(longitude, latitude)); break; case 1: - square_collinear.add(Point2LL(width + latitude, longitude)); + square_collinear.push_back(Point2LL(width + latitude, longitude)); break; case 2: - square_collinear.add(Point2LL(width - longitude, width + latitude)); + square_collinear.push_back(Point2LL(width - longitude, width + latitude)); break; case 3: - square_collinear.add(Point2LL(latitude, width - longitude)); + square_collinear.push_back(Point2LL(latitude, width - longitude)); break; } } @@ -88,7 +90,7 @@ class SimplifyTest : public testing::Test constexpr size_t periods = 10; // How many waves of the sine to construct. for (double current_sine = 0; current_sine < std::numbers::pi * periods; current_sine += sine_step) { - sine.add(Point2LL(std::sin(current_sine) * amplitude, y_step * sine.size())); + sine.push_back(Point2LL(std::sin(current_sine) * amplitude, y_step * sine.size())); } spiral.clear(); @@ -99,7 +101,7 @@ class SimplifyTest : public testing::Test radius = 0; for (size_t i = 0; i < vertex_count; ++i) { - spiral.add(Point2LL(std::cos(angle) * radius, std::sin(angle) * radius)); + spiral.push_back(Point2LL(std::cos(angle) * radius, std::sin(angle) * radius)); angle += angle_step; radius += radius_step; } @@ -108,7 +110,7 @@ class SimplifyTest : public testing::Test constexpr coord_t invfreq = 30; for (size_t i = 0; i < vertex_count; ++i) { - zigzag.add(Point2LL(-amplitude + (i % 2) * 2 * amplitude, i * invfreq)); + zigzag.push_back(Point2LL(-amplitude + (i % 2) * 2 * amplitude, i * invfreq)); } } }; @@ -172,7 +174,7 @@ TEST_F(SimplifyTest, CircleMaxDeviation) TEST_F(SimplifyTest, Zigzag) { simplifier.max_resolution_ = 9999999; - Polygon simplified = simplifier.polyline(zigzag); + ClosedPolyline simplified = simplifier.polyline(zigzag); EXPECT_EQ(simplified.size(), 2) << "All zigzagged lines can be erased because they deviate less than the maximum deviation, leaving only the endpoints."; } @@ -197,7 +199,7 @@ TEST_F(SimplifyTest, LimitedLength) } } - Polygon simplified = simplifier.polyline(spiral); + ClosedPolyline simplified = simplifier.polyline(spiral); // Look backwards until the limit vertex is reached to verify that the polygon is unaltered there. for (size_t i = 0; i < simplified.size(); ++i) @@ -224,19 +226,19 @@ TEST_F(SimplifyTest, LimitedError) // Generate a zig-zag with gradually increasing deviation. Polygon increasing_zigzag; - increasing_zigzag.add(Point2LL(0, 0)); + increasing_zigzag.push_back(Point2LL(0, 0)); constexpr coord_t amplitude_step = 1; // Every 2 vertices, the amplitude increases by this much. constexpr coord_t y_step = 100; const coord_t amplitude_limit = simplifier.max_deviation_ * 2; // Increase amplitude up to this point. About half of the vertices should get removed. for (coord_t amplitude = 0; amplitude < amplitude_limit; amplitude += amplitude_step) { - increasing_zigzag.add(Point2LL(amplitude, increasing_zigzag.size() * y_step)); - increasing_zigzag.add(Point2LL(0, increasing_zigzag.size() * y_step)); + increasing_zigzag.push_back(Point2LL(amplitude, increasing_zigzag.size() * y_step)); + increasing_zigzag.push_back(Point2LL(0, increasing_zigzag.size() * y_step)); } size_t limit_vertex = 2 * simplifier.max_deviation_ / amplitude_step + 3; // 2 vertices per zag. Deviation/step zags. Add 3 since deviation equal to max +- epsilon is allowed. - Polygon simplified = simplifier.polyline(increasing_zigzag); + ClosedPolyline simplified = simplifier.polyline(increasing_zigzag); // Look backwards until the limit vertex is reached to verify that the polygon is unaltered there. for (size_t i = 0; i < simplified.size(); ++i) @@ -260,12 +262,12 @@ TEST_F(SimplifyTest, LimitedError) TEST_F(SimplifyTest, LongEdgesNotMoved) { Polygon polyline; - polyline.add(Point2LL(0, 0)); - polyline.add(Point2LL(10000, 10000)); // Long edge. - polyline.add(Point2LL(10010, 10000)); // Short edge. - polyline.add(Point2LL(21010, 0)); // Long edge. + polyline.push_back(Point2LL(0, 0)); + polyline.push_back(Point2LL(10000, 10000)); // Long edge. + polyline.push_back(Point2LL(10010, 10000)); // Short edge. + polyline.push_back(Point2LL(21010, 0)); // Long edge. - Polygon simplified = simplifier.polyline(polyline); + ClosedPolyline simplified = simplifier.polyline(polyline); // Verify that all small segments are removed. for (size_t i = 1; i < simplified.size(); ++i) @@ -297,12 +299,12 @@ TEST_F(SimplifyTest, LongEdgesNotMoved) TEST_F(SimplifyTest, LongEdgesButTooMuchDeviation) { Polygon polyline; - polyline.add(Point2LL(0, 0)); - polyline.add(Point2LL(0, 10000)); // Long edge. - polyline.add(Point2LL(10, 10000)); // Short edge. - polyline.add(Point2LL(20, 0)); // Long edge. Intersection with previous long edge is at 0,20000, which is too far. + polyline.push_back(Point2LL(0, 0)); + polyline.push_back(Point2LL(0, 10000)); // Long edge. + polyline.push_back(Point2LL(10, 10000)); // Short edge. + polyline.push_back(Point2LL(20, 0)); // Long edge. Intersection with previous long edge is at 0,20000, which is too far. - Polygon simplified = simplifier.polyline(polyline); + ClosedPolyline simplified = simplifier.polyline(polyline); // Verify that the polyline is unchanged. ASSERT_EQ(polyline.size(), simplified.size()) << "The polyline may not have been simplified because that would introduce vertices that deviate too much."; @@ -312,7 +314,7 @@ TEST_F(SimplifyTest, LongEdgesButTooMuchDeviation) } polyline.pop_back(); - polyline.add(Point2LL(10, 0)); // Replace last vertex with one that makes the two long edges exactly parallel. + polyline.push_back(Point2LL(10, 0)); // Replace last vertex with one that makes the two long edges exactly parallel. simplified = simplifier.polyline(polyline); @@ -335,7 +337,7 @@ TEST_F(SimplifyTest, LongEdgesButTooMuchDeviation) TEST_F(SimplifyTest, Sine) { simplifier.max_resolution_ = 9999999; - Polygon simplified = simplifier.polyline(sine); + ClosedPolyline simplified = simplifier.polyline(sine); EXPECT_EQ(simplified.size(), 2) << "All zigzagged lines can be erased because they deviate less than the maximum deviation, leaving only the endpoints."; } @@ -364,13 +366,13 @@ TEST_F(SimplifyTest, IdenticalVertices) switch (vertex) { case 0: - polygon.add(Point2LL(0, 0)); + polygon.push_back(Point2LL(0, 0)); break; case 1: - polygon.add(Point2LL(10000, 0)); + polygon.push_back(Point2LL(10000, 0)); break; case 2: - polygon.add(Point2LL(5000, 10000)); + polygon.push_back(Point2LL(5000, 10000)); break; } } @@ -387,17 +389,17 @@ TEST_F(SimplifyTest, ToDegenerate) { // Create a triangle where one of the vertices could be removed. Polygon triangle; - triangle.add(Point2LL(0, 0)); - triangle.add(Point2LL(1100, 0)); - triangle.add(Point2LL(550, 50)); // Deviates by 50, and both adjacent edges are just over 550 long. Could be removed. + triangle.push_back(Point2LL(0, 0)); + triangle.push_back(Point2LL(1100, 0)); + triangle.push_back(Point2LL(550, 50)); // Deviates by 50, and both adjacent edges are just over 550 long. Could be removed. triangle = simplifier.polygon(triangle); EXPECT_EQ(triangle.size(), 3) << "The triangle did not get simplified because that would reduce its vertices to less than 3, making it degenerate."; // Create a polyline that is shorter than the minimum resolution. - Polygon segment; - segment.add(Point2LL(0, 0)); - segment.add(Point2LL(4, 0)); // Less than 5 micron long, so vertices would always be removed. + ClosedPolyline segment; + segment.push_back(Point2LL(0, 0)); + segment.push_back(Point2LL(4, 0)); // Less than 5 micron long, so vertices would always be removed. segment = simplifier.polyline(segment); EXPECT_EQ(segment.size(), 0) << "The segment got removed entirely, because simplification would reduce its vertices to less than 2, making it degenerate."; diff --git a/tests/utils/SmoothTest.cpp b/tests/utils/SmoothTest.cpp index 1864e4b706..3fbcda11f1 100644 --- a/tests/utils/SmoothTest.cpp +++ b/tests/utils/SmoothTest.cpp @@ -1,15 +1,16 @@ -// Copyright (c) 2023 UltiMaker +// Copyright (c) 2024 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher -#include +#include "utils/actions/smooth.h" -#include +#include #include -#include "utils/Point2LL.h" -#include "utils/actions/smooth.h" -#include "utils/polygon.h" +#include + +#include "geometry/Point2LL.h" +#include "geometry/Polygon.h" namespace cura { @@ -30,10 +31,10 @@ TEST(SmoothTest, TestSmooth) * */ - auto A = cura::Point2LL { 0, 0 }; - auto B = cura::Point2LL { 0, 100 }; - auto C = cura::Point2LL { 1, 100 }; - auto D = cura::Point2LL { 1, 200 }; + auto A = cura::Point2LL{ 0, 0 }; + auto B = cura::Point2LL{ 0, 100 }; + auto C = cura::Point2LL{ 1, 100 }; + auto D = cura::Point2LL{ 1, 200 }; const auto is_smooth = smooth.isSmooth(A, B, C, D, COS_FLUID_ANGLE); EXPECT_EQ(is_smooth, false); @@ -51,10 +52,10 @@ TEST(SmoothTest, TestSmooth) * D * */ - auto A = cura::Point2LL { 0, 0 }; - auto B = cura::Point2LL { 100, 0 }; - auto C = cura::Point2LL { 101, 1 }; - auto D = cura::Point2LL { 101, 101 }; + auto A = cura::Point2LL{ 0, 0 }; + auto B = cura::Point2LL{ 100, 0 }; + auto C = cura::Point2LL{ 101, 1 }; + auto D = cura::Point2LL{ 101, 101 }; const auto is_smooth = smooth.isSmooth(A, B, C, D, COS_FLUID_ANGLE); EXPECT_EQ(is_smooth, true); @@ -66,10 +67,10 @@ TEST(SmoothTest, TestSmooth) * A ----------- B - C -------------D * */ - auto A = cura::Point2LL { 0, 0 }; - auto B = cura::Point2LL { 100, 0 }; - auto C = cura::Point2LL { 101, 0 }; - auto D = cura::Point2LL { 201, 0 }; + auto A = cura::Point2LL{ 0, 0 }; + auto B = cura::Point2LL{ 100, 0 }; + auto C = cura::Point2LL{ 101, 0 }; + auto D = cura::Point2LL{ 201, 0 }; const auto is_smooth = smooth.isSmooth(A, B, C, D, COS_FLUID_ANGLE); EXPECT_EQ(is_smooth, true); @@ -81,10 +82,10 @@ TEST(SmoothTest, TestSmooth) * D ----------- C - B -------------A * */ - auto A = cura::Point2LL { 201, 0 }; - auto B = cura::Point2LL { 101, 0 }; - auto C = cura::Point2LL { 100, 0 }; - auto D = cura::Point2LL { 0, 0 }; + auto A = cura::Point2LL{ 201, 0 }; + auto B = cura::Point2LL{ 101, 0 }; + auto C = cura::Point2LL{ 100, 0 }; + auto D = cura::Point2LL{ 0, 0 }; const auto is_smooth = smooth.isSmooth(A, B, C, D, COS_FLUID_ANGLE); EXPECT_EQ(is_smooth, true); @@ -105,10 +106,10 @@ TEST(SmoothTest, TestSmooth) * D * */ - auto A = cura::Point2LL { 0, 0 }; - auto B = cura::Point2LL { 100, 0 }; - auto C = cura::Point2LL { 99, -1 }; - auto D = cura::Point2LL { 199, 99 }; + auto A = cura::Point2LL{ 0, 0 }; + auto B = cura::Point2LL{ 100, 0 }; + auto C = cura::Point2LL{ 99, -1 }; + auto D = cura::Point2LL{ 199, 99 }; const auto is_smooth = smooth.isSmooth(A, B, C, D, COS_FLUID_ANGLE); EXPECT_EQ(is_smooth, false); @@ -127,10 +128,10 @@ TEST(SmoothTest, TestSmooth) * D * */ - auto A = cura::Point2LL { 0, 0 }; - auto B = cura::Point2LL { 100, 0 }; - auto C = cura::Point2LL { 101, 1 }; - auto D = cura::Point2LL { 201, 101 }; + auto A = cura::Point2LL{ 0, 0 }; + auto B = cura::Point2LL{ 100, 0 }; + auto C = cura::Point2LL{ 101, 1 }; + auto D = cura::Point2LL{ 201, 101 }; const auto is_smooth = smooth.isSmooth(A, B, C, D, COS_FLUID_ANGLE); EXPECT_EQ(is_smooth, true); @@ -166,6 +167,5 @@ TEST(SmoothTest, TestSmooth) const auto is_smooth = smooth.isSmooth(A, B, C, D, COS_FLUID_ANGLE); EXPECT_EQ(is_smooth, false); }; - } -} // namespace cura \ No newline at end of file +} // namespace cura diff --git a/tests/utils/StringTest.cpp b/tests/utils/StringTest.cpp index 829c4c3da7..a0c172fbc8 100644 --- a/tests/utils/StringTest.cpp +++ b/tests/utils/StringTest.cpp @@ -2,7 +2,7 @@ // CuraEngine is released under the terms of the AGPLv3 or higher. #include "utils/string.h" // The file under test. -#include "utils/Point2LL.h" +#include "geometry/Point2LL.h" #include // NOLINTBEGIN(*-magic-numbers)