diff --git a/.github/workflows/debug-client.yml b/.github/workflows/debug-client.yml index de92c121db7..56304db88f2 100644 --- a/.github/workflows/debug-client.yml +++ b/.github/workflows/debug-client.yml @@ -42,6 +42,7 @@ jobs: run: | npm install npm run build -- --base https://cdn.jsdelivr.net/gh/opentripplanner/debug-client-assets@main/${VERSION}/ + npm run coverage - name: Deploy compiled assets to repo if: github.event_name == 'push' && github.ref == 'refs/heads/dev-2.x' diff --git a/.github/workflows/performance-test.yml b/.github/workflows/performance-test.yml index 1b8201a01ae..3c2ffdba465 100644 --- a/.github/workflows/performance-test.yml +++ b/.github/workflows/performance-test.yml @@ -32,10 +32,11 @@ jobs: jfr-delay: "35s" profile: core - - location: skanetrafiken - iterations: 1 - jfr-delay: "50s" - profile: core + # disabled due to https://github.com/opentripplanner/OpenTripPlanner/issues/5702 + #- location: skanetrafiken + # iterations: 1 + # jfr-delay: "50s" + # profile: core # extended locations that are run only after merging to dev-2.x diff --git a/.github/workflows/post-merge.yml b/.github/workflows/post-merge.yml index a2f29f0d1b0..86f3741aada 100644 --- a/.github/workflows/post-merge.yml +++ b/.github/workflows/post-merge.yml @@ -54,6 +54,7 @@ jobs: - name: Install xmllint run: | + sudo apt-get update sudo apt-get install -y libxml2-utils - name: Configure git user diff --git a/client-next/package-lock.json b/client-next/package-lock.json index 11894b5b246..7f01598ad30 100644 --- a/client-next/package-lock.json +++ b/client-next/package-lock.json @@ -10,9 +10,9 @@ "dependencies": { "@googlemaps/polyline-codec": "1.0.28", "bootstrap": "5.3.1", - "graphql": "16.8.0", + "graphql": "16.8.1", "graphql-request": "6.1.0", - "maplibre-gl": "3.6.2", + "maplibre-gl": "4.0.1", "react": "18.2.0", "react-bootstrap": "2.8.0", "react-dom": "18.2.0", @@ -23,21 +23,25 @@ "@graphql-codegen/client-preset": "4.1.0", "@graphql-codegen/introspection": "4.0.0", "@parcel/watcher": "2.3.0", + "@testing-library/react": "14.1.2", "@types/react": "18.2.21", "@types/react-dom": "18.2.7", - "@typescript-eslint/eslint-plugin": "6.5.0", - "@typescript-eslint/parser": "6.5.0", + "@typescript-eslint/eslint-plugin": "7.1.0", + "@typescript-eslint/parser": "7.1.0", "@vitejs/plugin-react": "4.0.4", - "eslint": "8.48.0", + "@vitest/coverage-v8": "1.1.3", + "eslint": "8.56.0", "eslint-config-prettier": "9.0.0", "eslint-plugin-import": "2.28.1", "eslint-plugin-jsx-a11y": "6.7.1", "eslint-plugin-react": "7.33.2", "eslint-plugin-react-hooks": "4.6.0", "eslint-plugin-react-refresh": "0.4.3", + "jsdom": "24.0.0", "prettier": "3.0.3", "typescript": "5.2.2", - "vite": "4.4.9" + "vite": "4.5.2", + "vitest": "1.1.3" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -93,37 +97,6 @@ "graphql": "*" } }, - "node_modules/@ardatan/relay-compiler/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@ardatan/relay-compiler/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/@ardatan/relay-compiler/node_modules/cliui": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", @@ -135,24 +108,6 @@ "wrap-ansi": "^6.2.0" } }, - "node_modules/@ardatan/relay-compiler/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@ardatan/relay-compiler/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/@ardatan/relay-compiler/node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -166,15 +121,6 @@ "node": ">=8" } }, - "node_modules/@ardatan/relay-compiler/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/@ardatan/relay-compiler/node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -214,18 +160,6 @@ "node": ">=8" } }, - "node_modules/@ardatan/relay-compiler/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@ardatan/relay-compiler/node_modules/y18n": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", @@ -280,44 +214,115 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", "dev": true, "dependencies": { - "@babel/highlight": "^7.22.13", + "@babel/highlight": "^7.23.4", "chalk": "^2.4.2" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/compat-data": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", - "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", + "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.11.tgz", - "integrity": "sha512-lh7RJrtPdhibbxndr6/xx0w8+CVlY5FJZiaSz908Fpy+G0xkBFTvwLcKJFF4PJxVfGhVWNebikpWGnOoC71juQ==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz", + "integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.10", - "@babel/generator": "^7.22.10", - "@babel/helper-compilation-targets": "^7.22.10", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helpers": "^7.22.11", - "@babel/parser": "^7.22.11", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.11", - "@babel/types": "^7.22.11", - "convert-source-map": "^1.7.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.9", + "@babel/parser": "^7.23.9", + "@babel/template": "^7.23.9", + "@babel/traverse": "^7.23.9", + "@babel/types": "^7.23.9", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", @@ -331,22 +336,13 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/generator": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.10.tgz", - "integrity": "sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", "dev": true, "dependencies": { - "@babel/types": "^7.22.10", + "@babel/types": "^7.23.6", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -368,14 +364,14 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz", - "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.9", + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -383,27 +379,18 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.11.tgz", - "integrity": "sha512-y1grdYL4WzmUDBRGK0pDbIoFd7UZKoDurDzWEoNMYoj1EL+foGRQNyPWDcC+YyegN5y1DUsFFmzjGijB3nSVAQ==", + "version": "7.23.10", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.10.tgz", + "integrity": "sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-member-expression-to-functions": "^7.23.0", "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-replace-supers": "^7.22.20", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", "semver": "^6.3.1" @@ -415,32 +402,23 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" @@ -459,40 +437,40 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", - "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", + "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", - "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", "@babel/helper-simple-access": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.5" + "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -523,13 +501,13 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", - "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", + "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.22.15", "@babel/helper-optimise-call-expression": "^7.22.5" }, "engines": { @@ -576,53 +554,53 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.11.tgz", - "integrity": "sha512-vyOXC8PBWaGc5h7GMsNx68OH33cypkEDJCHvYVVgVbbxJDROYVtexSk0gK5iCF1xNjRIN2s8ai7hwkWDq5szWg==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.9.tgz", + "integrity": "sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==", "dev": true, "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.11", - "@babel/types": "^7.22.11" + "@babel/template": "^7.23.9", + "@babel/traverse": "^7.23.9", + "@babel/types": "^7.23.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", - "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, @@ -630,10 +608,81 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/parser": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.13.tgz", - "integrity": "sha512-3l6+4YOvc9wx7VlCSw4yQfcBo01ECA8TicQfbnCPuCEpRQrf+gTUyGdxNw+pyTUyywp6JRD1w0YQs9TpBXYlkw==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz", + "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -646,6 +695,7 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", "dev": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", @@ -662,6 +712,7 @@ "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.", "dev": true, "dependencies": { "@babel/compat-data": "^7.20.5", @@ -690,9 +741,9 @@ } }, "node_modules/@babel/plugin-syntax-flow": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.22.5.tgz", - "integrity": "sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.23.3.tgz", + "integrity": "sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -705,9 +756,9 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", - "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz", + "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -720,9 +771,9 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", - "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", + "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -747,9 +798,9 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz", + "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -762,9 +813,9 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz", + "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -777,9 +828,9 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.10.tgz", - "integrity": "sha512-1+kVpGAOOI1Albt6Vse7c8pHzcZQdQKW+wJH+g8mCaszOdDVwRXa/slHPqIw+oJAJANTKDMuM2cBdV0Dg618Vg==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz", + "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -792,18 +843,17 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", - "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz", + "integrity": "sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", "@babel/helper-split-export-declaration": "^7.22.6", "globals": "^11.1.0" }, @@ -815,13 +865,13 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz", + "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" + "@babel/template": "^7.22.15" }, "engines": { "node": ">=6.9.0" @@ -831,9 +881,9 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.10.tgz", - "integrity": "sha512-dPJrL0VOyxqLM9sritNbMSGx/teueHF/htMKrPT7DNxccXxRDPYqlgPFFdr8u+F+qUZOkZoXue/6rL5O5GduEw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz", + "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -846,13 +896,13 @@ } }, "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.22.5.tgz", - "integrity": "sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.23.3.tgz", + "integrity": "sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-flow": "^7.22.5" + "@babel/plugin-syntax-flow": "^7.23.3" }, "engines": { "node": ">=6.9.0" @@ -862,12 +912,13 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", - "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz", + "integrity": "sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -877,13 +928,13 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz", + "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==", "dev": true, "dependencies": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-function-name": "^7.23.0", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { @@ -894,9 +945,9 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz", + "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -909,9 +960,9 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz", + "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -924,12 +975,12 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.11.tgz", - "integrity": "sha512-o2+bg7GDS60cJMgz9jWqRUsWkMzLCxp+jFDeDUT5sjRlAxcJWZ2ylNdI7QQ2+CH5hWu7OnN+Cv3htt7AkSf96g==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", + "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.22.9", + "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-simple-access": "^7.22.5" }, @@ -941,13 +992,13 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz", + "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" + "@babel/helper-replace-supers": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -957,9 +1008,9 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", - "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz", + "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -972,9 +1023,9 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz", + "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -987,9 +1038,9 @@ } }, "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz", - "integrity": "sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.23.3.tgz", + "integrity": "sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1002,16 +1053,16 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.5.tgz", - "integrity": "sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz", + "integrity": "sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-module-imports": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/plugin-syntax-jsx": "^7.23.3", + "@babel/types": "^7.23.4" }, "engines": { "node": ">=6.9.0" @@ -1021,9 +1072,9 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.22.5.tgz", - "integrity": "sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.23.3.tgz", + "integrity": "sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1036,9 +1087,9 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.22.5.tgz", - "integrity": "sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.23.3.tgz", + "integrity": "sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1051,9 +1102,9 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz", + "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1066,9 +1117,9 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", - "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz", + "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1082,9 +1133,9 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz", + "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1097,9 +1148,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.11.tgz", - "integrity": "sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz", + "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -1108,34 +1159,34 @@ } }, "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.23.9.tgz", + "integrity": "sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.23.9", + "@babel/types": "^7.23.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.11.tgz", - "integrity": "sha512-mzAenteTfomcB7mfPtyi+4oe5BZ6MXxWcn4CX+h4IRJ+OOGXBrWU6jDQavkQI9Vuc5P+donFabBfFCcmWka9lQ==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.9.tgz", + "integrity": "sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.22.10", - "@babel/generator": "^7.22.10", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.11", - "@babel/types": "^7.22.11", - "debug": "^4.1.0", + "@babel/parser": "^7.23.9", + "@babel/types": "^7.23.9", + "debug": "^4.3.1", "globals": "^11.1.0" }, "engines": { @@ -1143,19 +1194,41 @@ } }, "node_modules/@babel/types": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.11.tgz", - "integrity": "sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz", + "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@esbuild/android-arm": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", @@ -1524,18 +1597,18 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.0.tgz", - "integrity": "sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", - "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -1556,9 +1629,9 @@ } }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.21.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", - "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -1570,10 +1643,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@eslint/js": { - "version": "8.48.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.48.0.tgz", - "integrity": "sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1585,24 +1670,18 @@ "integrity": "sha512-m7rh8sbxlrHvebXEweBHX8r1uPtToPRYxWDD6p6k2YG8hyhBe0Wi6xRUVFpxpEseMNgF+OBotFQC5senj8K7TQ==" }, "node_modules/@graphql-codegen/add": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@graphql-codegen/add/-/add-5.0.0.tgz", - "integrity": "sha512-ynWDOsK2yxtFHwcJTB9shoSkUd7YXd6ZE57f0nk7W5cu/nAgxZZpEsnTPEpZB/Mjf14YRGe2uJHQ7AfElHjqUQ==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@graphql-codegen/add/-/add-5.0.2.tgz", + "integrity": "sha512-ouBkSvMFUhda5VoKumo/ZvsZM9P5ZTyDsI8LW18VxSNWOjrTeLXBWHG8Gfaai0HwhflPtCYVABbriEcOmrRShQ==", "dev": true, "dependencies": { - "@graphql-codegen/plugin-helpers": "^5.0.0", - "tslib": "~2.5.0" + "@graphql-codegen/plugin-helpers": "^5.0.3", + "tslib": "~2.6.0" }, "peerDependencies": { "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, - "node_modules/@graphql-codegen/add/node_modules/tslib": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==", - "dev": true - }, "node_modules/@graphql-codegen/cli": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/@graphql-codegen/cli/-/cli-5.0.0.tgz", @@ -1660,76 +1739,6 @@ } } }, - "node_modules/@graphql-codegen/cli/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@graphql-codegen/cli/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@graphql-codegen/cli/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@graphql-codegen/cli/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@graphql-codegen/cli/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@graphql-codegen/cli/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@graphql-codegen/client-preset": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/@graphql-codegen/client-preset/-/client-preset-4.1.0.tgz", @@ -1761,26 +1770,20 @@ "dev": true }, "node_modules/@graphql-codegen/core": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@graphql-codegen/core/-/core-4.0.0.tgz", - "integrity": "sha512-JAGRn49lEtSsZVxeIlFVIRxts2lWObR+OQo7V2LHDJ7ohYYw3ilv7nJ8pf8P4GTg/w6ptcYdSdVVdkI8kUHB/Q==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@graphql-codegen/core/-/core-4.0.2.tgz", + "integrity": "sha512-IZbpkhwVqgizcjNiaVzNAzm/xbWT6YnGgeOLwVjm4KbJn3V2jchVtuzHH09G5/WkkLSk2wgbXNdwjM41JxO6Eg==", "dev": true, "dependencies": { - "@graphql-codegen/plugin-helpers": "^5.0.0", + "@graphql-codegen/plugin-helpers": "^5.0.3", "@graphql-tools/schema": "^10.0.0", "@graphql-tools/utils": "^10.0.0", - "tslib": "~2.5.0" + "tslib": "~2.6.0" }, "peerDependencies": { "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, - "node_modules/@graphql-codegen/core/node_modules/tslib": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==", - "dev": true - }, "node_modules/@graphql-codegen/gql-tag-operations": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@graphql-codegen/gql-tag-operations/-/gql-tag-operations-4.0.1.tgz", @@ -1797,6 +1800,27 @@ "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, + "node_modules/@graphql-codegen/gql-tag-operations/node_modules/@graphql-codegen/visitor-plugin-common": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-4.0.1.tgz", + "integrity": "sha512-Bi/1z0nHg4QMsAqAJhds+ForyLtk7A3HQOlkrZNm3xEkY7lcBzPtiOTLBtvziwopBsXUxqeSwVjOOFPLS5Yw1Q==", + "dev": true, + "dependencies": { + "@graphql-codegen/plugin-helpers": "^5.0.0", + "@graphql-tools/optimize": "^2.0.0", + "@graphql-tools/relay-operation-optimizer": "^7.0.0", + "@graphql-tools/utils": "^10.0.0", + "auto-bind": "~4.0.0", + "change-case-all": "1.0.15", + "dependency-graph": "^0.11.0", + "graphql-tag": "^2.11.0", + "parse-filepath": "^1.0.2", + "tslib": "~2.5.0" + }, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, "node_modules/@graphql-codegen/gql-tag-operations/node_modules/tslib": { "version": "2.5.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", @@ -1824,9 +1848,9 @@ "dev": true }, "node_modules/@graphql-codegen/plugin-helpers": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-5.0.1.tgz", - "integrity": "sha512-6L5sb9D8wptZhnhLLBcheSPU7Tg//DGWgc5tQBWX46KYTOTQHGqDpv50FxAJJOyFVJrveN9otWk9UT9/yfY4ww==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-5.0.3.tgz", + "integrity": "sha512-yZ1rpULIWKBZqCDlvGIJRSyj1B2utkEdGmXZTBT/GVayP4hyRYlkd36AJV/LfEsVD8dnsKL5rLz2VTYmRNlJ5Q==", "dev": true, "dependencies": { "@graphql-tools/utils": "^10.0.0", @@ -1834,111 +1858,81 @@ "common-tags": "1.8.2", "import-from": "4.0.0", "lodash": "~4.17.0", - "tslib": "~2.5.0" + "tslib": "~2.6.0" }, "peerDependencies": { "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, - "node_modules/@graphql-codegen/plugin-helpers/node_modules/tslib": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==", - "dev": true - }, "node_modules/@graphql-codegen/schema-ast": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@graphql-codegen/schema-ast/-/schema-ast-4.0.0.tgz", - "integrity": "sha512-WIzkJFa9Gz28FITAPILbt+7A8+yzOyd1NxgwFh7ie+EmO9a5zQK6UQ3U/BviirguXCYnn+AR4dXsoDrSrtRA1g==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@graphql-codegen/schema-ast/-/schema-ast-4.0.2.tgz", + "integrity": "sha512-5mVAOQQK3Oz7EtMl/l3vOQdc2aYClUzVDHHkMvZlunc+KlGgl81j8TLa+X7ANIllqU4fUEsQU3lJmk4hXP6K7Q==", "dev": true, "dependencies": { - "@graphql-codegen/plugin-helpers": "^5.0.0", + "@graphql-codegen/plugin-helpers": "^5.0.3", "@graphql-tools/utils": "^10.0.0", - "tslib": "~2.5.0" + "tslib": "~2.6.0" }, "peerDependencies": { "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, - "node_modules/@graphql-codegen/schema-ast/node_modules/tslib": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==", - "dev": true - }, "node_modules/@graphql-codegen/typed-document-node": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@graphql-codegen/typed-document-node/-/typed-document-node-5.0.1.tgz", - "integrity": "sha512-VFkhCuJnkgtbbgzoCAwTdJe2G1H6sd3LfCrDqWUrQe53y2ukfSb5Ov1PhAIkCBStKCMQBUY9YgGz9GKR40qQ8g==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@graphql-codegen/typed-document-node/-/typed-document-node-5.0.4.tgz", + "integrity": "sha512-t66Z6erQ4Dh1j6f9pRZmc8uYtHoUI3A49tLmJAlg9/3IV0kCmwrWKJut/G8SeOefDLG8cXBTVtI/YuZOe1Te+w==", "dev": true, "dependencies": { - "@graphql-codegen/plugin-helpers": "^5.0.0", - "@graphql-codegen/visitor-plugin-common": "4.0.1", + "@graphql-codegen/plugin-helpers": "^5.0.3", + "@graphql-codegen/visitor-plugin-common": "4.1.2", "auto-bind": "~4.0.0", "change-case-all": "1.0.15", - "tslib": "~2.5.0" + "tslib": "~2.6.0" }, "peerDependencies": { "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, - "node_modules/@graphql-codegen/typed-document-node/node_modules/tslib": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==", - "dev": true - }, "node_modules/@graphql-codegen/typescript": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript/-/typescript-4.0.1.tgz", - "integrity": "sha512-3YziQ21dCVdnHb+Us1uDb3pA6eG5Chjv0uTK+bt9dXeMlwYBU8MbtzvQTo4qvzWVC1AxSOKj0rgfNu1xCXqJyA==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript/-/typescript-4.0.4.tgz", + "integrity": "sha512-x79CKLfP9UQCX+/I78qxQlMs2Mmq3pF1lKafZo7lAno0f/fvJ+qWUduzdgjRNz+YL+5blGeWcC0pWEDxniO7hw==", "dev": true, "dependencies": { - "@graphql-codegen/plugin-helpers": "^5.0.0", - "@graphql-codegen/schema-ast": "^4.0.0", - "@graphql-codegen/visitor-plugin-common": "4.0.1", + "@graphql-codegen/plugin-helpers": "^5.0.3", + "@graphql-codegen/schema-ast": "^4.0.2", + "@graphql-codegen/visitor-plugin-common": "4.1.2", "auto-bind": "~4.0.0", - "tslib": "~2.5.0" + "tslib": "~2.6.0" }, "peerDependencies": { "graphql": "^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, "node_modules/@graphql-codegen/typescript-operations": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript-operations/-/typescript-operations-4.0.1.tgz", - "integrity": "sha512-GpUWWdBVUec/Zqo23aFLBMrXYxN2irypHqDcKjN78JclDPdreasAEPcIpMfqf4MClvpmvDLy4ql+djVAwmkjbw==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript-operations/-/typescript-operations-4.1.2.tgz", + "integrity": "sha512-CtCWK+gW7hS+Ely3lohr8CL1HVLswQzMcaUk3k1sxdWCWKTNq7abMsWa31rTVwRCJ+WNEkM/7S8sIBTpEG683A==", "dev": true, "dependencies": { - "@graphql-codegen/plugin-helpers": "^5.0.0", - "@graphql-codegen/typescript": "^4.0.1", - "@graphql-codegen/visitor-plugin-common": "4.0.1", + "@graphql-codegen/plugin-helpers": "^5.0.3", + "@graphql-codegen/typescript": "^4.0.4", + "@graphql-codegen/visitor-plugin-common": "4.1.2", "auto-bind": "~4.0.0", - "tslib": "~2.5.0" + "tslib": "~2.6.0" }, "peerDependencies": { "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, - "node_modules/@graphql-codegen/typescript-operations/node_modules/tslib": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==", - "dev": true - }, - "node_modules/@graphql-codegen/typescript/node_modules/tslib": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==", - "dev": true - }, "node_modules/@graphql-codegen/visitor-plugin-common": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-4.0.1.tgz", - "integrity": "sha512-Bi/1z0nHg4QMsAqAJhds+ForyLtk7A3HQOlkrZNm3xEkY7lcBzPtiOTLBtvziwopBsXUxqeSwVjOOFPLS5Yw1Q==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-4.1.2.tgz", + "integrity": "sha512-yk7iEAL1kYZ2Gi/pvVjdsZhul5WsYEM4Zcgh2Ev15VicMdJmPHsMhNUsZWyVJV0CaQCYpNOFlGD/11Ea3pn4GA==", "dev": true, "dependencies": { - "@graphql-codegen/plugin-helpers": "^5.0.0", + "@graphql-codegen/plugin-helpers": "^5.0.3", "@graphql-tools/optimize": "^2.0.0", "@graphql-tools/relay-operation-optimizer": "^7.0.0", "@graphql-tools/utils": "^10.0.0", @@ -1947,18 +1941,12 @@ "dependency-graph": "^0.11.0", "graphql-tag": "^2.11.0", "parse-filepath": "^1.0.2", - "tslib": "~2.5.0" + "tslib": "~2.6.0" }, "peerDependencies": { "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, - "node_modules/@graphql-codegen/visitor-plugin-common/node_modules/tslib": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==", - "dev": true - }, "node_modules/@graphql-tools/apollo-engine-loader": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/@graphql-tools/apollo-engine-loader/-/apollo-engine-loader-8.0.0.tgz", @@ -1987,28 +1975,28 @@ } }, "node_modules/@graphql-tools/apollo-engine-loader/node_modules/@whatwg-node/fetch": { - "version": "0.9.9", - "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.9.tgz", - "integrity": "sha512-OTVoDm039CNyAWSRc2WBimMl/N9J4Fk2le21Xzcf+3OiWPNNSIbMnpWKBUyraPh2d9SAEgoBdQxTfVNihXgiUw==", + "version": "0.9.16", + "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.16.tgz", + "integrity": "sha512-mqasZiUNquRe3ea9+aCAuo81BR6vq5opUKprPilIHTnrg8a21Z1T1OrI+KiMFX8OmwO5HUJe/vro47lpj2JPWQ==", "dev": true, "dependencies": { - "@whatwg-node/node-fetch": "^0.4.8", - "urlpattern-polyfill": "^9.0.0" + "@whatwg-node/node-fetch": "^0.5.5", + "urlpattern-polyfill": "^10.0.0" }, "engines": { "node": ">=16.0.0" } }, "node_modules/@graphql-tools/apollo-engine-loader/node_modules/@whatwg-node/node-fetch": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.4.14.tgz", - "integrity": "sha512-ii/eZz2PcjLGj9D6WfsmfzlTzZV1Kz6MxYpq2Vc5P21J8vkKfENWC9B2ISsFCKovxElLukIwPg8HTrHFsLNflg==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.5.6.tgz", + "integrity": "sha512-cmAsGMHoI0S3AHi3CmD3ma1Q234ZI2JNmXyDyM9rLtbXejBKxU3ZWdhS+mzRIAyUxZCMGlFW1tHmROv0MDdxpw==", "dev": true, "dependencies": { + "@kamilkisiela/fast-url-parser": "^1.1.4", "@whatwg-node/events": "^0.1.0", "busboy": "^1.6.0", "fast-querystring": "^1.1.1", - "fast-url-parser": "^1.1.3", "tslib": "^2.3.1" }, "engines": { @@ -2016,9 +2004,9 @@ } }, "node_modules/@graphql-tools/apollo-engine-loader/node_modules/urlpattern-polyfill": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-9.0.0.tgz", - "integrity": "sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", + "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==", "dev": true }, "node_modules/@graphql-tools/batch-execute": { @@ -2040,13 +2028,13 @@ } }, "node_modules/@graphql-tools/code-file-loader": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@graphql-tools/code-file-loader/-/code-file-loader-8.0.2.tgz", - "integrity": "sha512-AKNpkElUL2cWocYpC4DzNEpo6qJw8Lp+L3bKQ/mIfmbsQxgLz5uve6zHBMhDaFPdlwfIox41N3iUSvi77t9e8A==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/code-file-loader/-/code-file-loader-8.1.0.tgz", + "integrity": "sha512-HKWW/B2z15ves8N9+xnVbGmFEVGyHEK80a4ghrjeTa6nwNZaKDVfq5CoYFfF0xpfjtH6gOVUExo2XCOEz4B8mQ==", "dev": true, "dependencies": { - "@graphql-tools/graphql-tag-pluck": "8.0.2", - "@graphql-tools/utils": "^10.0.0", + "@graphql-tools/graphql-tag-pluck": "8.2.0", + "@graphql-tools/utils": "^10.0.13", "globby": "^11.0.3", "tslib": "^2.4.0", "unixify": "^1.0.0" @@ -2059,9 +2047,9 @@ } }, "node_modules/@graphql-tools/delegate": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/@graphql-tools/delegate/-/delegate-10.0.2.tgz", - "integrity": "sha512-ZU7VnR2xFgHrGnsuw6+nRJkcvSucn7w5ooxb/lTKlVfrNJfTwJevNcNKMnbtPUSajG3+CaFym/nU6v44GXCmNw==", + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@graphql-tools/delegate/-/delegate-10.0.3.tgz", + "integrity": "sha512-Jor9oazZ07zuWkykD3OOhT/2XD74Zm6Ar0ENZMk75MDD51wB2UWUIMljtHxbJhV5A6UBC2v8x6iY0xdCGiIlyw==", "dev": true, "dependencies": { "@graphql-tools/batch-execute": "^9.0.1", @@ -2134,9 +2122,9 @@ } }, "node_modules/@graphql-tools/executor-http": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@graphql-tools/executor-http/-/executor-http-1.0.2.tgz", - "integrity": "sha512-JKTB4E3kdQM2/1NEcyrVPyQ8057ZVthCV5dFJiKktqY9IdmF00M8gupFcW3jlbM/Udn78ickeUBsUzA3EouqpA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@graphql-tools/executor-http/-/executor-http-1.0.7.tgz", + "integrity": "sha512-/MoRYzQS50Tz5mxRfq3ZmeZ2SOins9wGZAGetsJ55F3PxL0PmHdSGlCq12KzffZDbwHV5YMlwigBsSGWq4y9Iw==", "dev": true, "dependencies": { "@graphql-tools/utils": "^10.0.2", @@ -2164,28 +2152,28 @@ } }, "node_modules/@graphql-tools/executor-http/node_modules/@whatwg-node/fetch": { - "version": "0.9.9", - "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.9.tgz", - "integrity": "sha512-OTVoDm039CNyAWSRc2WBimMl/N9J4Fk2le21Xzcf+3OiWPNNSIbMnpWKBUyraPh2d9SAEgoBdQxTfVNihXgiUw==", + "version": "0.9.16", + "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.16.tgz", + "integrity": "sha512-mqasZiUNquRe3ea9+aCAuo81BR6vq5opUKprPilIHTnrg8a21Z1T1OrI+KiMFX8OmwO5HUJe/vro47lpj2JPWQ==", "dev": true, "dependencies": { - "@whatwg-node/node-fetch": "^0.4.8", - "urlpattern-polyfill": "^9.0.0" + "@whatwg-node/node-fetch": "^0.5.5", + "urlpattern-polyfill": "^10.0.0" }, "engines": { "node": ">=16.0.0" } }, "node_modules/@graphql-tools/executor-http/node_modules/@whatwg-node/node-fetch": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.4.14.tgz", - "integrity": "sha512-ii/eZz2PcjLGj9D6WfsmfzlTzZV1Kz6MxYpq2Vc5P21J8vkKfENWC9B2ISsFCKovxElLukIwPg8HTrHFsLNflg==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.5.6.tgz", + "integrity": "sha512-cmAsGMHoI0S3AHi3CmD3ma1Q234ZI2JNmXyDyM9rLtbXejBKxU3ZWdhS+mzRIAyUxZCMGlFW1tHmROv0MDdxpw==", "dev": true, "dependencies": { + "@kamilkisiela/fast-url-parser": "^1.1.4", "@whatwg-node/events": "^0.1.0", "busboy": "^1.6.0", "fast-querystring": "^1.1.1", - "fast-url-parser": "^1.1.3", "tslib": "^2.3.1" }, "engines": { @@ -2193,22 +2181,22 @@ } }, "node_modules/@graphql-tools/executor-http/node_modules/urlpattern-polyfill": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-9.0.0.tgz", - "integrity": "sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", + "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==", "dev": true }, "node_modules/@graphql-tools/executor-legacy-ws": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/executor-legacy-ws/-/executor-legacy-ws-1.0.1.tgz", - "integrity": "sha512-PQrTJ+ncHMEQspBARc2lhwiQFfRAX/z/CsOdZTFjIljOHgRWGAA1DAx7pEN0j6PflbLCfZ3NensNq2jCBwF46w==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@graphql-tools/executor-legacy-ws/-/executor-legacy-ws-1.0.5.tgz", + "integrity": "sha512-w54AZ7zkNuvpyV09FH+eGHnnAmaxhBVHg4Yh2ICcsMfRg0brkLt77PlbjBuxZ4HY8XZnKJaYWf+tKazQZtkQtg==", "dev": true, "dependencies": { "@graphql-tools/utils": "^10.0.0", "@types/ws": "^8.0.0", - "isomorphic-ws": "5.0.0", + "isomorphic-ws": "^5.0.0", "tslib": "^2.4.0", - "ws": "8.13.0" + "ws": "^8.15.0" }, "engines": { "node": ">=16.0.0" @@ -2218,13 +2206,13 @@ } }, "node_modules/@graphql-tools/git-loader": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@graphql-tools/git-loader/-/git-loader-8.0.2.tgz", - "integrity": "sha512-AuCB0nlPvsHh8u42zRZdlD/ZMaWP9A44yAkQUVCZir1E/LG63fsZ9svTWJ+CbusW3Hd0ZP9qpxEhlHxnd4Tlsg==", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@graphql-tools/git-loader/-/git-loader-8.0.4.tgz", + "integrity": "sha512-fBmKtnOVqzMT2N8L6nggM4skPq3y2t0eBITZJXCOuxeIlIRAeCOdjNLPKgyGb0rezIyGsn55DKMua5101VN0Sg==", "dev": true, "dependencies": { - "@graphql-tools/graphql-tag-pluck": "8.0.2", - "@graphql-tools/utils": "^10.0.0", + "@graphql-tools/graphql-tag-pluck": "8.2.0", + "@graphql-tools/utils": "^10.0.13", "is-glob": "4.0.3", "micromatch": "^4.0.4", "tslib": "^2.4.0", @@ -2268,28 +2256,28 @@ } }, "node_modules/@graphql-tools/github-loader/node_modules/@whatwg-node/fetch": { - "version": "0.9.9", - "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.9.tgz", - "integrity": "sha512-OTVoDm039CNyAWSRc2WBimMl/N9J4Fk2le21Xzcf+3OiWPNNSIbMnpWKBUyraPh2d9SAEgoBdQxTfVNihXgiUw==", + "version": "0.9.16", + "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.16.tgz", + "integrity": "sha512-mqasZiUNquRe3ea9+aCAuo81BR6vq5opUKprPilIHTnrg8a21Z1T1OrI+KiMFX8OmwO5HUJe/vro47lpj2JPWQ==", "dev": true, "dependencies": { - "@whatwg-node/node-fetch": "^0.4.8", - "urlpattern-polyfill": "^9.0.0" + "@whatwg-node/node-fetch": "^0.5.5", + "urlpattern-polyfill": "^10.0.0" }, "engines": { "node": ">=16.0.0" } }, "node_modules/@graphql-tools/github-loader/node_modules/@whatwg-node/node-fetch": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.4.14.tgz", - "integrity": "sha512-ii/eZz2PcjLGj9D6WfsmfzlTzZV1Kz6MxYpq2Vc5P21J8vkKfENWC9B2ISsFCKovxElLukIwPg8HTrHFsLNflg==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.5.6.tgz", + "integrity": "sha512-cmAsGMHoI0S3AHi3CmD3ma1Q234ZI2JNmXyDyM9rLtbXejBKxU3ZWdhS+mzRIAyUxZCMGlFW1tHmROv0MDdxpw==", "dev": true, "dependencies": { + "@kamilkisiela/fast-url-parser": "^1.1.4", "@whatwg-node/events": "^0.1.0", "busboy": "^1.6.0", "fast-querystring": "^1.1.1", - "fast-url-parser": "^1.1.3", "tslib": "^2.3.1" }, "engines": { @@ -2297,9 +2285,9 @@ } }, "node_modules/@graphql-tools/github-loader/node_modules/urlpattern-polyfill": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-9.0.0.tgz", - "integrity": "sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", + "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==", "dev": true }, "node_modules/@graphql-tools/graphql-file-loader": { @@ -2322,9 +2310,9 @@ } }, "node_modules/@graphql-tools/graphql-tag-pluck": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-8.0.2.tgz", - "integrity": "sha512-U6fE4yEHxuk/nqmPixHpw1WhqdS6aYuaV60m1bEmUmGJNbpAhaMBy01JncpvpF15yZR5LZ0UjkHg+A3Lhoc8YQ==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-8.2.0.tgz", + "integrity": "sha512-aGIuHxyrJB+LlUfXrH73NVlQTA6LkFbLKQzHojFuwXZJpf7wPkxceN2yp7VjMedARkLJg589IoXgZeMb1EztGQ==", "dev": true, "dependencies": { "@babel/core": "^7.22.9", @@ -2332,7 +2320,7 @@ "@babel/plugin-syntax-import-assertions": "^7.20.0", "@babel/traverse": "^7.16.8", "@babel/types": "^7.16.8", - "@graphql-tools/utils": "^10.0.0", + "@graphql-tools/utils": "^10.0.13", "tslib": "^2.4.0" }, "engines": { @@ -2359,15 +2347,6 @@ "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@graphql-tools/import/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/@graphql-tools/json-file-loader": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/@graphql-tools/json-file-loader/-/json-file-loader-8.0.0.tgz", @@ -2387,13 +2366,13 @@ } }, "node_modules/@graphql-tools/load": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/load/-/load-8.0.0.tgz", - "integrity": "sha512-Cy874bQJH0FP2Az7ELPM49iDzOljQmK1PPH6IuxsWzLSTxwTqd8dXA09dcVZrI7/LsN26heTY2R8q2aiiv0GxQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/load/-/load-8.0.1.tgz", + "integrity": "sha512-qSMsKngJhDqRbuWyo3NvakEFqFL6+eSjy8ooJ1o5qYD26N7dqXkKzIMycQsX7rBK19hOuINAUSaRcVWH6hTccw==", "dev": true, "dependencies": { "@graphql-tools/schema": "^10.0.0", - "@graphql-tools/utils": "^10.0.0", + "@graphql-tools/utils": "^10.0.11", "p-limit": "3.1.0", "tslib": "^2.4.0" }, @@ -2405,12 +2384,12 @@ } }, "node_modules/@graphql-tools/merge": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-9.0.0.tgz", - "integrity": "sha512-J7/xqjkGTTwOJmaJQJ2C+VDBDOWJL3lKrHJN4yMaRLAJH3PosB7GiPRaSDZdErs0+F77sH2MKs2haMMkywzx7Q==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-9.0.1.tgz", + "integrity": "sha512-hIEExWO9fjA6vzsVjJ3s0cCQ+Q/BEeMVJZtMXd7nbaVefVy0YDyYlEkeoYYNV3NVVvu1G9lr6DM1Qd0DGo9Caw==", "dev": true, "dependencies": { - "@graphql-tools/utils": "^10.0.0", + "@graphql-tools/utils": "^10.0.10", "tslib": "^2.4.0" }, "engines": { @@ -2436,13 +2415,13 @@ } }, "node_modules/@graphql-tools/prisma-loader": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/prisma-loader/-/prisma-loader-8.0.1.tgz", - "integrity": "sha512-bl6e5sAYe35Z6fEbgKXNrqRhXlCJYeWKBkarohgYA338/SD9eEhXtg3Cedj7fut3WyRLoQFpHzfiwxKs7XrgXg==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@graphql-tools/prisma-loader/-/prisma-loader-8.0.2.tgz", + "integrity": "sha512-8d28bIB0bZ9Bj0UOz9sHagVPW+6AHeqvGljjERtwCnWl8OCQw2c2pNboYXISLYUG5ub76r4lDciLLTU+Ks7Q0w==", "dev": true, "dependencies": { "@graphql-tools/url-loader": "^8.0.0", - "@graphql-tools/utils": "^10.0.0", + "@graphql-tools/utils": "^10.0.8", "@types/js-yaml": "^4.0.0", "@types/json-stable-stringify": "^1.0.32", "@whatwg-node/fetch": "^0.9.0", @@ -2452,7 +2431,7 @@ "graphql-request": "^6.0.0", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.0", - "jose": "^4.11.4", + "jose": "^5.0.0", "js-yaml": "^4.0.0", "json-stable-stringify": "^1.0.1", "lodash": "^4.17.20", @@ -2477,137 +2456,67 @@ } }, "node_modules/@graphql-tools/prisma-loader/node_modules/@whatwg-node/fetch": { - "version": "0.9.9", - "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.9.tgz", - "integrity": "sha512-OTVoDm039CNyAWSRc2WBimMl/N9J4Fk2le21Xzcf+3OiWPNNSIbMnpWKBUyraPh2d9SAEgoBdQxTfVNihXgiUw==", + "version": "0.9.16", + "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.16.tgz", + "integrity": "sha512-mqasZiUNquRe3ea9+aCAuo81BR6vq5opUKprPilIHTnrg8a21Z1T1OrI+KiMFX8OmwO5HUJe/vro47lpj2JPWQ==", "dev": true, "dependencies": { - "@whatwg-node/node-fetch": "^0.4.8", - "urlpattern-polyfill": "^9.0.0" + "@whatwg-node/node-fetch": "^0.5.5", + "urlpattern-polyfill": "^10.0.0" }, "engines": { "node": ">=16.0.0" } }, "node_modules/@graphql-tools/prisma-loader/node_modules/@whatwg-node/node-fetch": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.4.14.tgz", - "integrity": "sha512-ii/eZz2PcjLGj9D6WfsmfzlTzZV1Kz6MxYpq2Vc5P21J8vkKfENWC9B2ISsFCKovxElLukIwPg8HTrHFsLNflg==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.5.6.tgz", + "integrity": "sha512-cmAsGMHoI0S3AHi3CmD3ma1Q234ZI2JNmXyDyM9rLtbXejBKxU3ZWdhS+mzRIAyUxZCMGlFW1tHmROv0MDdxpw==", "dev": true, "dependencies": { + "@kamilkisiela/fast-url-parser": "^1.1.4", "@whatwg-node/events": "^0.1.0", "busboy": "^1.6.0", "fast-querystring": "^1.1.1", - "fast-url-parser": "^1.1.3", "tslib": "^2.3.1" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@graphql-tools/prisma-loader/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@graphql-tools/prisma-loader/node_modules/urlpattern-polyfill": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", + "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==", + "dev": true + }, + "node_modules/@graphql-tools/relay-operation-optimizer": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/relay-operation-optimizer/-/relay-operation-optimizer-7.0.0.tgz", + "integrity": "sha512-UNlJi5y3JylhVWU4MBpL0Hun4Q7IoJwv9xYtmAz+CgRa066szzY7dcuPfxrA7cIGgG/Q6TVsKsYaiF4OHPs1Fw==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "@ardatan/relay-compiler": "12.0.0", + "@graphql-tools/utils": "^10.0.0", + "tslib": "^2.4.0" }, "engines": { - "node": ">=8" + "node": ">=16.0.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@graphql-tools/prisma-loader/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@graphql-tools/schema": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-10.0.2.tgz", + "integrity": "sha512-TbPsIZnWyDCLhgPGnDjt4hosiNU2mF/rNtSk5BVaXWnZqvKJ6gzJV4fcHcvhRIwtscDMW2/YTnK6dLVnk8pc4w==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@graphql-tools/prisma-loader/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@graphql-tools/prisma-loader/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@graphql-tools/prisma-loader/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@graphql-tools/prisma-loader/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@graphql-tools/prisma-loader/node_modules/urlpattern-polyfill": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-9.0.0.tgz", - "integrity": "sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g==", - "dev": true - }, - "node_modules/@graphql-tools/relay-operation-optimizer": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/relay-operation-optimizer/-/relay-operation-optimizer-7.0.0.tgz", - "integrity": "sha512-UNlJi5y3JylhVWU4MBpL0Hun4Q7IoJwv9xYtmAz+CgRa066szzY7dcuPfxrA7cIGgG/Q6TVsKsYaiF4OHPs1Fw==", - "dev": true, - "dependencies": { - "@ardatan/relay-compiler": "12.0.0", - "@graphql-tools/utils": "^10.0.0", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@graphql-tools/schema": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-10.0.0.tgz", - "integrity": "sha512-kf3qOXMFcMs2f/S8Y3A8fm/2w+GaHAkfr3Gnhh2LOug/JgpY/ywgFVxO3jOeSpSEdoYcDKLcXVjMigNbY4AdQg==", - "dev": true, - "dependencies": { - "@graphql-tools/merge": "^9.0.0", - "@graphql-tools/utils": "^10.0.0", - "tslib": "^2.4.0", - "value-or-promise": "^1.0.12" + "@graphql-tools/merge": "^9.0.1", + "@graphql-tools/utils": "^10.0.10", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.12" }, "engines": { "node": ">=16.0.0" @@ -2617,15 +2526,15 @@ } }, "node_modules/@graphql-tools/url-loader": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/url-loader/-/url-loader-8.0.0.tgz", - "integrity": "sha512-rPc9oDzMnycvz+X+wrN3PLrhMBQkG4+sd8EzaFN6dypcssiefgWKToXtRKI8HHK68n2xEq1PyrOpkjHFJB+GwA==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/url-loader/-/url-loader-8.0.1.tgz", + "integrity": "sha512-B2k8KQEkEQmfV1zhurT5GLoXo8jbXP+YQHUayhCSxKYlRV7j/1Fhp1b21PDM8LXIDGlDRXaZ0FbWKOs7eYXDuQ==", "dev": true, "dependencies": { "@ardatan/sync-fetch": "^0.0.1", "@graphql-tools/delegate": "^10.0.0", "@graphql-tools/executor-graphql-ws": "^1.0.0", - "@graphql-tools/executor-http": "^1.0.0", + "@graphql-tools/executor-http": "^1.0.5", "@graphql-tools/executor-legacy-ws": "^1.0.0", "@graphql-tools/utils": "^10.0.0", "@graphql-tools/wrap": "^10.0.0", @@ -2653,28 +2562,28 @@ } }, "node_modules/@graphql-tools/url-loader/node_modules/@whatwg-node/fetch": { - "version": "0.9.9", - "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.9.tgz", - "integrity": "sha512-OTVoDm039CNyAWSRc2WBimMl/N9J4Fk2le21Xzcf+3OiWPNNSIbMnpWKBUyraPh2d9SAEgoBdQxTfVNihXgiUw==", + "version": "0.9.16", + "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.16.tgz", + "integrity": "sha512-mqasZiUNquRe3ea9+aCAuo81BR6vq5opUKprPilIHTnrg8a21Z1T1OrI+KiMFX8OmwO5HUJe/vro47lpj2JPWQ==", "dev": true, "dependencies": { - "@whatwg-node/node-fetch": "^0.4.8", - "urlpattern-polyfill": "^9.0.0" + "@whatwg-node/node-fetch": "^0.5.5", + "urlpattern-polyfill": "^10.0.0" }, "engines": { "node": ">=16.0.0" } }, "node_modules/@graphql-tools/url-loader/node_modules/@whatwg-node/node-fetch": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.4.14.tgz", - "integrity": "sha512-ii/eZz2PcjLGj9D6WfsmfzlTzZV1Kz6MxYpq2Vc5P21J8vkKfENWC9B2ISsFCKovxElLukIwPg8HTrHFsLNflg==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.5.6.tgz", + "integrity": "sha512-cmAsGMHoI0S3AHi3CmD3ma1Q234ZI2JNmXyDyM9rLtbXejBKxU3ZWdhS+mzRIAyUxZCMGlFW1tHmROv0MDdxpw==", "dev": true, "dependencies": { + "@kamilkisiela/fast-url-parser": "^1.1.4", "@whatwg-node/events": "^0.1.0", "busboy": "^1.6.0", "fast-querystring": "^1.1.1", - "fast-url-parser": "^1.1.3", "tslib": "^2.3.1" }, "engines": { @@ -2682,18 +2591,19 @@ } }, "node_modules/@graphql-tools/url-loader/node_modules/urlpattern-polyfill": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-9.0.0.tgz", - "integrity": "sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", + "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==", "dev": true }, "node_modules/@graphql-tools/utils": { - "version": "10.0.5", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-10.0.5.tgz", - "integrity": "sha512-ZTioQqg9z9eCG3j+KDy54k1gp6wRIsLqkx5yi163KVvXVkfjsrdErCyZjrEug21QnKE9piP4tyxMpMMOT1RuRw==", + "version": "10.0.13", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-10.0.13.tgz", + "integrity": "sha512-fMILwGr5Dm2zefNItjQ6C2rauigklv69LIwppccICuGTnGaOp3DspLt/6Lxj72cbg5d9z60Sr+Egco3CJKLsNg==", "dev": true, "dependencies": { "@graphql-typed-document-node/core": "^3.1.1", + "cross-inspect": "1.0.0", "dset": "^3.1.2", "tslib": "^2.4.0" }, @@ -2705,12 +2615,12 @@ } }, "node_modules/@graphql-tools/wrap": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/wrap/-/wrap-10.0.0.tgz", - "integrity": "sha512-HDOeUUh6UhpiH0WPJUQl44ODt1x5pnMUbOJZ7GjTdGQ7LK0AgVt3ftaAQ9duxLkiAtYJmu5YkULirfZGj4HzDg==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/wrap/-/wrap-10.0.1.tgz", + "integrity": "sha512-Cw6hVrKGM2OKBXeuAGltgy4tzuqQE0Nt7t/uAqnuokSXZhMHXJUb124Bnvxc2gPZn5chfJSDafDe4Cp8ZAVJgg==", "dev": true, "dependencies": { - "@graphql-tools/delegate": "^10.0.0", + "@graphql-tools/delegate": "^10.0.3", "@graphql-tools/schema": "^10.0.0", "@graphql-tools/utils": "^10.0.0", "tslib": "^2.4.0", @@ -2732,13 +2642,13 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", "minimatch": "^3.0.5" }, "engines": { @@ -2759,11 +2669,32 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", "dev": true }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", @@ -2803,15 +2734,21 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", + "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@kamilkisiela/fast-url-parser": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@kamilkisiela/fast-url-parser/-/fast-url-parser-1.1.4.tgz", + "integrity": "sha512-gbkePEBupNydxCelHCESvFSFM8XPh1Zs/OAVRW/rKpEqPAl5PbOM90Si8mv9bvnR53uPD2s/FiRxdvSejpRJew==", + "dev": true + }, "node_modules/@mapbox/geojson-rewind": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/@mapbox/geojson-rewind/-/geojson-rewind-0.5.2.tgz", @@ -3191,14 +3128,14 @@ } }, "node_modules/@peculiar/asn1-schema": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.3.6.tgz", - "integrity": "sha512-izNRxPoaeJeg/AyH8hER6s+H7p4itk+03QCa4sbxI3lNdseQYCuxzgsuNK8bTXChtLTjpJz6NmXKA73qLa3rCA==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.3.8.tgz", + "integrity": "sha512-ULB1XqHKx1WBU/tTFIA+uARuRoBVZ4pNdOA878RDrRbBfBGcSzi5HBkdScC6ZbHn8z7L8gmKCgPC1LHRrP46tA==", "dev": true, "dependencies": { "asn1js": "^3.0.5", - "pvtsutils": "^1.3.2", - "tslib": "^2.4.0" + "pvtsutils": "^1.3.5", + "tslib": "^2.6.2" } }, "node_modules/@peculiar/json-schema": { @@ -3214,16 +3151,16 @@ } }, "node_modules/@peculiar/webcrypto": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.4.3.tgz", - "integrity": "sha512-VtaY4spKTdN5LjJ04im/d/joXuvLbQdgy5Z4DXF4MFZhQ+MTrejbNMkfZBp1Bs3O5+bFqnJgyGdPuZQflvIa5A==", + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.4.5.tgz", + "integrity": "sha512-oDk93QCDGdxFRM8382Zdminzs44dg3M2+E5Np+JWkpqLDyJC9DviMh8F8mEJkYuUcUOGA5jHO5AJJ10MFWdbZw==", "dev": true, "dependencies": { - "@peculiar/asn1-schema": "^2.3.6", + "@peculiar/asn1-schema": "^2.3.8", "@peculiar/json-schema": "^1.1.12", - "pvtsutils": "^1.3.2", - "tslib": "^2.5.0", - "webcrypto-core": "^1.7.7" + "pvtsutils": "^1.3.5", + "tslib": "^2.6.2", + "webcrypto-core": "^1.7.8" }, "engines": { "node": ">=10.12.0" @@ -3239,9 +3176,9 @@ } }, "node_modules/@react-aria/ssr": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.7.1.tgz", - "integrity": "sha512-ovVPSD1WlRpZHt7GI9DqJrWG3OIYS+NXQ9y5HIewMJpSe+jPQmMQfyRmgX4EnvmxSlp0u04Wg/7oItcoSIb/RA==", + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.1.tgz", + "integrity": "sha512-NqzkLFP8ZVI4GSorS0AYljC13QW2sc8bDqJOkBvkAt3M8gbcAXJWVRGtZBCRscki9RZF+rNlnPdg0G0jYkhJcg==", "dependencies": { "@swc/helpers": "^0.5.0" }, @@ -3253,15 +3190,15 @@ } }, "node_modules/@repeaterjs/repeater": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@repeaterjs/repeater/-/repeater-3.0.4.tgz", - "integrity": "sha512-AW8PKd6iX3vAZ0vA43nOUOnbq/X5ihgU+mSXXqunMkeQADGiqw/PY0JNeYtD5sr0PAy51YPgAPbDoeapv9r8WA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@repeaterjs/repeater/-/repeater-3.0.5.tgz", + "integrity": "sha512-l3YHBLAol6d/IKnB9LhpD0cEZWAoe3eFKUyTYWmFmCO2Q/WOckxLQAUyMZWwZV2M/m3+4vgRoaolFqaII82/TA==", "dev": true }, "node_modules/@restart/hooks": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.4.11.tgz", - "integrity": "sha512-Ft/ncTULZN6ldGHiF/k5qt72O8JyRMOeg0tApvCni8LkoiEahO+z3TNxfXIVGy890YtWVDvJAl662dVJSJXvMw==", + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.4.16.tgz", + "integrity": "sha512-f7aCv7c+nU/3mF7NWLtVVr0Ra80RqsO89hO72r+Y/nvQr5+q0UFGkocElTH6MJApvReVh6JHUFYn2cw1WdHF3w==", "dependencies": { "dequal": "^2.0.3" }, @@ -3297,35 +3234,273 @@ "react": ">=16.14.0" } }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.10.0.tgz", + "integrity": "sha512-/MeDQmcD96nVoRumKUljsYOLqfv1YFJps+0pTrb2Z9Nl/w5qNUysMaWQsrd1mvAlNT4yza1iVyIu4Q4AgF6V3A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.10.0.tgz", + "integrity": "sha512-lvu0jK97mZDJdpZKDnZI93I0Om8lSDaiPx3OiCk0RXn3E8CMPJNS/wxjAvSJJzhhZpfjXsjLWL8LnS6qET4VNQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.10.0.tgz", + "integrity": "sha512-uFpayx8I8tyOvDkD7X6n0PriDRWxcqEjqgtlxnUA/G9oS93ur9aZ8c8BEpzFmsed1TH5WZNG5IONB8IiW90TQg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.10.0.tgz", + "integrity": "sha512-nIdCX03qFKoR/MwQegQBK+qZoSpO3LESurVAC6s6jazLA1Mpmgzo3Nj3H1vydXp/JM29bkCiuF7tDuToj4+U9Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.10.0.tgz", + "integrity": "sha512-Fz7a+y5sYhYZMQFRkOyCs4PLhICAnxRX/GnWYReaAoruUzuRtcf+Qnw+T0CoAWbHCuz2gBUwmWnUgQ67fb3FYw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.10.0.tgz", + "integrity": "sha512-yPtF9jIix88orwfTi0lJiqINnlWo6p93MtZEoaehZnmCzEmLL0eqjA3eGVeyQhMtxdV+Mlsgfwhh0+M/k1/V7Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.10.0.tgz", + "integrity": "sha512-9GW9yA30ib+vfFiwjX+N7PnjTnCMiUffhWj4vkG4ukYv1kJ4T9gHNg8zw+ChsOccM27G9yXrEtMScf1LaCuoWQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.10.0.tgz", + "integrity": "sha512-X1ES+V4bMq2ws5fF4zHornxebNxMXye0ZZjUrzOrf7UMx1d6wMQtfcchZ8SqUnQPPHdOyOLW6fTcUiFgHFadRA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.10.0.tgz", + "integrity": "sha512-w/5OpT2EnI/Xvypw4FIhV34jmNqU5PZjZue2l2Y3ty1Ootm3SqhI+AmfhlUYGBTd9JnpneZCDnt3uNOiOBkMyw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.10.0.tgz", + "integrity": "sha512-q/meftEe3QlwQiGYxD9rWwB21DoKQ9Q8wA40of/of6yGHhZuGfZO0c3WYkN9dNlopHlNT3mf5BPsUSxoPuVQaw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.10.0.tgz", + "integrity": "sha512-NrR6667wlUfP0BHaEIKgYM/2va+Oj+RjZSASbBMnszM9k+1AmliRjHc3lJIiOehtSSjqYiO7R6KLNrWOX+YNSQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.10.0.tgz", + "integrity": "sha512-FV0Tpt84LPYDduIDcXvEC7HKtyXxdvhdAOvOeWMWbQNulxViH2O07QXkT/FffX4FqEI02jEbCJbr+YcuKdyyMg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.10.0.tgz", + "integrity": "sha512-OZoJd+o5TaTSQeFFQ6WjFCiltiYVjIdsXxwu/XZ8qRpsvMQr4UsVrE5UyT9RIvsnuF47DqkJKhhVZ2Q9YW9IpQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, "node_modules/@swc/helpers": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.1.tgz", - "integrity": "sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.6.tgz", + "integrity": "sha512-aYX01Ke9hunpoCexYAgQucEpARGQ5w/cqHFrIR+e9gdKb1QWTsVJuTJ2ozQzIAxLyRQe/m+2RqzkyOOGiMKRQA==", "dependencies": { "tslib": "^2.4.0" } }, + "node_modules/@testing-library/dom": { + "version": "9.3.4", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.4.tgz", + "integrity": "sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.1.3", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@testing-library/react": { + "version": "14.1.2", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-14.1.2.tgz", + "integrity": "sha512-z4p7DVBTPjKM5qDZ0t5ZjzkpSNb+fZy1u6bzO7kk8oeGagpPCAtgh4cx1syrfp7a+QWkM021jGqjJaxJJnXAZg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^9.0.0", + "@types/react-dom": "^18.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "dev": true + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, "node_modules/@types/geojson": { - "version": "7946.0.13", - "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.13.tgz", - "integrity": "sha512-bmrNrgKMOhM3WsafmbGmC+6dsF2Z308vLFsQ3a/bT8X8Sv5clVYpPars/UPq+sAaJP+5OoLAYgwbkS5QEJdLUQ==" + "version": "7946.0.14", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.14.tgz", + "integrity": "sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==" + }, + "node_modules/@types/geojson-vt": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/@types/geojson-vt/-/geojson-vt-3.2.5.tgz", + "integrity": "sha512-qDO7wqtprzlpe8FfQ//ClPV9xiuoh2nkIgiouIptON9w5jvD/fA4szvP9GBlDVdJ5dldAl0kX/sy3URbWwLx0g==", + "dependencies": { + "@types/geojson": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true }, "node_modules/@types/js-yaml": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.5.tgz", - "integrity": "sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==", + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", + "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==", "dev": true }, "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, "node_modules/@types/json-stable-stringify": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/@types/json-stable-stringify/-/json-stable-stringify-1.0.34.tgz", - "integrity": "sha512-s2cfwagOQAS8o06TcwKfr9Wx11dNGbH2E9vJz1cqV+a/LOyhWNLUNd6JSRYNzvB4d29UuJX2M0Dj9vE1T8fRXw==", + "version": "1.0.36", + "resolved": "https://registry.npmjs.org/@types/json-stable-stringify/-/json-stable-stringify-1.0.36.tgz", + "integrity": "sha512-b7bq23s4fgBB76n34m2b3RBf6M369B0Z9uRR8aHTMd8kZISRkmDEpPD8hhpYvDFzr3bJCPES96cm3Q6qRNDbQw==", "dev": true }, "node_modules/@types/json5": { @@ -3350,28 +3525,31 @@ } }, "node_modules/@types/mapbox-gl": { - "version": "2.7.13", - "resolved": "https://registry.npmjs.org/@types/mapbox-gl/-/mapbox-gl-2.7.13.tgz", - "integrity": "sha512-qNffhTdYkeFl8QG9Q1zPPJmcs8PvHgmLa1PcwP1rxvcfMsIgcFr/FnrCttG0ZnH7Kzdd7xfECSRNTWSr4jC3PQ==", + "version": "2.7.21", + "resolved": "https://registry.npmjs.org/@types/mapbox-gl/-/mapbox-gl-2.7.21.tgz", + "integrity": "sha512-Dx9MuF2kKgT/N22LsMUB4b3acFZh9clVqz9zv1fomoiPoBrJolwYxpWA/9LPO/2N0xWbKi4V+pkjTaFkkx/4wA==", "dependencies": { "@types/geojson": "*" } }, "node_modules/@types/node": { - "version": "20.5.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.7.tgz", - "integrity": "sha512-dP7f3LdZIysZnmvP3ANJYTSwg+wLLl8p7RqniVlV7j+oXSXAbt9h0WIBFmJy5inWZoX9wZN6eXx+YXd9Rh3RBA==", - "dev": true - }, + "version": "20.11.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.17.tgz", + "integrity": "sha512-QmgQZGWu1Yw9TDyAP9ZzpFJKynYNeOvwMJmaxABfieQoVoiVOS6MN1WSpqpRcbeA5+RW82kraAVxCCJg+780Qw==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, "node_modules/@types/pbf": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@types/pbf/-/pbf-3.0.5.tgz", "integrity": "sha512-j3pOPiEcWZ34R6a6mN07mUkM4o4Lwf6hPNt8eilOeZhTFbxFXmKhvXl9Y28jotFPaI1bpPDJsbCprUoNke6OrA==" }, "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + "version": "15.7.11", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", + "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==" }, "node_modules/@types/react": { "version": "18.2.21", @@ -3393,22 +3571,22 @@ } }, "node_modules/@types/react-transition-group": { - "version": "4.4.6", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.6.tgz", - "integrity": "sha512-VnCdSxfcm08KjsJVQcfBmhEQAPnLB8G08hAxn39azX1qYBQ/5RVQuoHuKIcfKOdncuaUvEpFKFzEvbtIMsfVew==", + "version": "4.4.10", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.10.tgz", + "integrity": "sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==", "dependencies": { "@types/react": "*" } }, "node_modules/@types/scheduler": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", - "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", + "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==" }, "node_modules/@types/semver": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.1.tgz", - "integrity": "sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg==", + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", "dev": true }, "node_modules/@types/supercluster": { @@ -3420,30 +3598,30 @@ } }, "node_modules/@types/warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/warning/-/warning-3.0.0.tgz", - "integrity": "sha512-t/Tvs5qR47OLOr+4E9ckN8AmP2Tf16gWq+/qA4iUGS/OOyHVO8wv2vjJuX8SNOUTJyWb+2t7wJm6cXILFnOROA==" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/warning/-/warning-3.0.3.tgz", + "integrity": "sha512-D1XC7WK8K+zZEveUPY+cf4+kgauk8N4eHr/XIHXGlGYkHLud6hK9lYfZk1ry1TNh798cZUCgb6MqGEG8DkJt6Q==" }, "node_modules/@types/ws": { - "version": "8.5.5", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", - "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.5.0.tgz", - "integrity": "sha512-2pktILyjvMaScU6iK3925uvGU87E+N9rh372uGZgiMYwafaw9SXq86U04XPq3UH6tzRvNgBsub6x2DacHc33lw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.1.0.tgz", + "integrity": "sha512-j6vT/kCulhG5wBmGtstKeiVr1rdXE4nk+DT1k6trYkwlrvW9eOF5ZbgKnd/YR6PcM4uTEXa0h6Fcvf6X7Dxl0w==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.5.0", - "@typescript-eslint/type-utils": "6.5.0", - "@typescript-eslint/utils": "6.5.0", - "@typescript-eslint/visitor-keys": "6.5.0", + "@typescript-eslint/scope-manager": "7.1.0", + "@typescript-eslint/type-utils": "7.1.0", + "@typescript-eslint/utils": "7.1.0", + "@typescript-eslint/visitor-keys": "7.1.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -3459,8 +3637,8 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" }, "peerDependenciesMeta": { "typescript": { @@ -3468,16 +3646,49 @@ } } }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/@typescript-eslint/parser": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.5.0.tgz", - "integrity": "sha512-LMAVtR5GN8nY0G0BadkG0XIe4AcNMeyEy3DyhKGAh9k4pLSMBO7rF29JvDBpZGCmp5Pgz5RLHP6eCpSYZJQDuQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.1.0.tgz", + "integrity": "sha512-V1EknKUubZ1gWFjiOZhDSNToOjs63/9O0puCgGS8aDOgpZY326fzFu15QAUjwaXzRZjf/qdsdBrckYdv9YxB8w==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.5.0", - "@typescript-eslint/types": "6.5.0", - "@typescript-eslint/typescript-estree": "6.5.0", - "@typescript-eslint/visitor-keys": "6.5.0", + "@typescript-eslint/scope-manager": "7.1.0", + "@typescript-eslint/types": "7.1.0", + "@typescript-eslint/typescript-estree": "7.1.0", + "@typescript-eslint/visitor-keys": "7.1.0", "debug": "^4.3.4" }, "engines": { @@ -3488,7 +3699,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "^8.56.0" }, "peerDependenciesMeta": { "typescript": { @@ -3497,13 +3708,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.5.0.tgz", - "integrity": "sha512-A8hZ7OlxURricpycp5kdPTH3XnjG85UpJS6Fn4VzeoH4T388gQJ/PGP4ole5NfKt4WDVhmLaQ/dBLNDC4Xl/Kw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.1.0.tgz", + "integrity": "sha512-6TmN4OJiohHfoOdGZ3huuLhpiUgOGTpgXNUPJgeZOZR3DnIpdSgtt83RS35OYNNXxM4TScVlpVKC9jyQSETR1A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.5.0", - "@typescript-eslint/visitor-keys": "6.5.0" + "@typescript-eslint/types": "7.1.0", + "@typescript-eslint/visitor-keys": "7.1.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -3514,13 +3725,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.5.0.tgz", - "integrity": "sha512-f7OcZOkRivtujIBQ4yrJNIuwyCQO1OjocVqntl9dgSIZAdKqicj3xFDqDOzHDlGCZX990LqhLQXWRnQvsapq8A==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.1.0.tgz", + "integrity": "sha512-UZIhv8G+5b5skkcuhgvxYWHjk7FW7/JP5lPASMEUoliAPwIH/rxoUSQPia2cuOj9AmDZmwUl1usKm85t5VUMew==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "6.5.0", - "@typescript-eslint/utils": "6.5.0", + "@typescript-eslint/typescript-estree": "7.1.0", + "@typescript-eslint/utils": "7.1.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -3532,7 +3743,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "^8.56.0" }, "peerDependenciesMeta": { "typescript": { @@ -3541,9 +3752,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.5.0.tgz", - "integrity": "sha512-eqLLOEF5/lU8jW3Bw+8auf4lZSbbljHR2saKnYqON12G/WsJrGeeDHWuQePoEf9ro22+JkbPfWQwKEC5WwLQ3w==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.1.0.tgz", + "integrity": "sha512-qTWjWieJ1tRJkxgZYXx6WUYtWlBc48YRxgY2JN1aGeVpkhmnopq+SUC8UEVGNXIvWH7XyuTjwALfG6bFEgCkQA==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -3554,16 +3765,17 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.5.0.tgz", - "integrity": "sha512-q0rGwSe9e5Kk/XzliB9h2LBc9tmXX25G0833r7kffbl5437FPWb2tbpIV9wAATebC/018pGa9fwPDuvGN+LxWQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.1.0.tgz", + "integrity": "sha512-k7MyrbD6E463CBbSpcOnwa8oXRdHzH1WiVzOipK3L5KSML92ZKgUBrTlehdi7PEIMT8k0bQixHUGXggPAlKnOQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.5.0", - "@typescript-eslint/visitor-keys": "6.5.0", + "@typescript-eslint/types": "7.1.0", + "@typescript-eslint/visitor-keys": "7.1.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", + "minimatch": "9.0.3", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" }, @@ -3580,18 +3792,75 @@ } } }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/@typescript-eslint/utils": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.5.0.tgz", - "integrity": "sha512-9nqtjkNykFzeVtt9Pj6lyR9WEdd8npPhhIPM992FWVkZuS6tmxHfGVnlUcjpUP2hv8r4w35nT33mlxd+Be1ACQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.1.0.tgz", + "integrity": "sha512-WUFba6PZC5OCGEmbweGpnNJytJiLG7ZvDBJJoUcX4qZYf1mGZ97mO2Mps6O2efxJcJdRNpqweCistDbZMwIVHw==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.5.0", - "@typescript-eslint/types": "6.5.0", - "@typescript-eslint/typescript-estree": "6.5.0", + "@typescript-eslint/scope-manager": "7.1.0", + "@typescript-eslint/types": "7.1.0", + "@typescript-eslint/typescript-estree": "7.1.0", "semver": "^7.5.4" }, "engines": { @@ -3602,16 +3871,49 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "^8.56.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, + "node_modules/@typescript-eslint/utils/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.5.0.tgz", - "integrity": "sha512-yCB/2wkbv3hPsh02ZS8dFQnij9VVQXJMN/gbQsaaY+zxALkZnxa/wagvLEFsAWMPv7d7lxQmNsIzGU1w/T/WyA==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.1.0.tgz", + "integrity": "sha512-FhUqNWluiGNzlvnDZiXad4mZRhtghdoKW6e98GoEOYSu5cND+E39rG5KwJMUzeENwm1ztYBRqof8wMLP+wNPIA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.5.0", + "@typescript-eslint/types": "7.1.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -3622,6 +3924,12 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, "node_modules/@vitejs/plugin-react": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.0.4.tgz", @@ -3640,6 +3948,193 @@ "vite": "^4.2.0" } }, + "node_modules/@vitest/coverage-v8": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-1.1.3.tgz", + "integrity": "sha512-Uput7t3eIcbSTOTQBzGtS+0kah96bX+szW9qQrLeGe3UmgL2Akn8POnyC2lH7XsnREZOds9aCUTxgXf+4HX5RA==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.1", + "@bcoe/v8-coverage": "^0.2.3", + "debug": "^4.3.4", + "istanbul-lib-coverage": "^3.2.2", + "istanbul-lib-report": "^3.0.1", + "istanbul-lib-source-maps": "^4.0.1", + "istanbul-reports": "^3.1.6", + "magic-string": "^0.30.5", + "magicast": "^0.3.2", + "picocolors": "^1.0.0", + "std-env": "^3.5.0", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^9.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "vitest": "^1.0.0" + } + }, + "node_modules/@vitest/expect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.1.3.tgz", + "integrity": "sha512-MnJqsKc1Ko04lksF9XoRJza0bGGwTtqfbyrsYv5on4rcEkdo+QgUdITenBQBUltKzdxW7K3rWh+nXRULwsdaVg==", + "dev": true, + "dependencies": { + "@vitest/spy": "1.1.3", + "@vitest/utils": "1.1.3", + "chai": "^4.3.10" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.1.3.tgz", + "integrity": "sha512-Va2XbWMnhSdDEh/OFxyUltgQuuDRxnarK1hW5QNN4URpQrqq6jtt8cfww/pQQ4i0LjoYxh/3bYWvDFlR9tU73g==", + "dev": true, + "dependencies": { + "@vitest/utils": "1.1.3", + "p-limit": "^5.0.0", + "pathe": "^1.1.1" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner/node_modules/p-limit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz", + "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vitest/runner/node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vitest/snapshot": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.1.3.tgz", + "integrity": "sha512-U0r8pRXsLAdxSVAyGNcqOU2H3Z4Y2dAAGGelL50O0QRMdi1WWeYHdrH/QWpN1e8juWfVKsb8B+pyJwTC+4Gy9w==", + "dev": true, + "dependencies": { + "magic-string": "^0.30.5", + "pathe": "^1.1.1", + "pretty-format": "^29.7.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@vitest/snapshot/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@vitest/snapshot/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/@vitest/spy": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.1.3.tgz", + "integrity": "sha512-Ec0qWyGS5LhATFQtldvChPTAHv08yHIOZfiNcjwRQbFPHpkih0md9KAbs7TfeIfL7OFKoe7B/6ukBTqByubXkQ==", + "dev": true, + "dependencies": { + "tinyspy": "^2.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.1.3.tgz", + "integrity": "sha512-Dyt3UMcdElTll2H75vhxfpZu03uFpXRCHxWnzcrFjZxT1kTbq8ALUYIeBgGolo1gldVdI0YSlQRacsqxTwNqwg==", + "dev": true, + "dependencies": { + "diff-sequences": "^29.6.3", + "estree-walker": "^3.0.3", + "loupe": "^2.3.7", + "pretty-format": "^29.7.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@vitest/utils/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@vitest/utils/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, "node_modules/@whatwg-node/events": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/@whatwg-node/events/-/events-0.0.3.tgz", @@ -3673,9 +4168,9 @@ } }, "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -3693,6 +4188,15 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/acorn-walk": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/agent-base": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", @@ -3749,18 +4253,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -3771,15 +4263,18 @@ } }, "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/argparse": { @@ -3789,12 +4284,12 @@ "dev": true }, "node_modules/aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", "dev": true, "dependencies": { - "dequal": "^2.0.3" + "deep-equal": "^2.0.5" } }, "node_modules/arr-union": { @@ -3806,28 +4301,31 @@ } }, "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", "is-string": "^1.0.7" }, "engines": { @@ -3846,17 +4344,36 @@ "node": ">=8" } }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", - "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "node_modules/array.prototype.filter": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz", + "integrity": "sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz", + "integrity": "sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -3866,14 +4383,14 @@ } }, "node_modules/array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" }, "engines": { @@ -3884,14 +4401,14 @@ } }, "node_modules/array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" }, "engines": { @@ -3902,29 +4419,31 @@ } }, "node_modules/array.prototype.tosorted": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", - "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz", + "integrity": "sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.1.0", + "es-shim-unscopables": "^1.0.2" } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", - "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", "is-shared-array-buffer": "^1.0.2" }, "engines": { @@ -3954,6 +4473,15 @@ "node": ">=12.0.0" } }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", @@ -3986,6 +4514,12 @@ "has-symbols": "^1.0.3" } }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, "node_modules/auto-bind": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/auto-bind/-/auto-bind-4.0.0.tgz", @@ -3999,9 +4533,9 @@ } }, "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz", + "integrity": "sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==", "dev": true, "engines": { "node": ">= 0.4" @@ -4011,9 +4545,9 @@ } }, "node_modules/axe-core": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.2.tgz", - "integrity": "sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==", + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.8.4.tgz", + "integrity": "sha512-CZLSKisu/bhJ2awW4kJndluz2HLZYIHh5Uy1+ZwDRkJi69811xgIXXfdU9HSLX0Th+ILrHj8qfL/5wzamsFtQg==", "dev": true, "engines": { "node": ">=4" @@ -4150,9 +4684,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.10", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", - "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "version": "4.22.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.3.tgz", + "integrity": "sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==", "dev": true, "funding": [ { @@ -4169,10 +4703,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001517", - "electron-to-chromium": "^1.4.477", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.11" + "caniuse-lite": "^1.0.30001580", + "electron-to-chromium": "^1.4.648", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" }, "bin": { "browserslist": "cli.js" @@ -4243,14 +4777,29 @@ "typewise-core": "^1.2" } }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4285,9 +4834,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001524", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001524.tgz", - "integrity": "sha512-Jj917pJtYg9HSJBF95HVX3Cdr89JUyLT4IZ8SvM5aDRni95swKgYi3TgYLH5hnGfPE/U1dg6IfZ50UsIlLkwSA==", + "version": "1.0.30001587", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001587.tgz", + "integrity": "sha512-HMFNotUmLXn71BQxg8cijvqxnIAofforZOwGsxyXJ0qugTdspUF4sPSJ2vhgprHCB996tIDzEq1ubumPDV8ULA==", "dev": true, "funding": [ { @@ -4315,20 +4864,40 @@ "upper-case-first": "^2.0.2" } }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/chai": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", + "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.0.8" }, "engines": { "node": ">=4" } }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/change-case": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz", @@ -4373,10 +4942,22 @@ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, + "node_modules/check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.2" + }, + "engines": { + "node": "*" + } + }, "node_modules/classnames": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", - "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" }, "node_modules/clean-stack": { "version": "2.2.0", @@ -4400,9 +4981,9 @@ } }, "node_modules/cli-spinners": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", - "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", "dev": true, "engines": { "node": ">=6" @@ -4450,39 +5031,6 @@ "node": ">=12" } }, - "node_modules/cliui/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/cliui/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/cliui/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/cliui/node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -4510,18 +5058,21 @@ } }, "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "color-name": "1.1.3" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/colorette": { @@ -4530,6 +5081,18 @@ "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", "dev": true }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/common-tags": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", @@ -4557,20 +5120,20 @@ } }, "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, "node_modules/cosmiconfig": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", - "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", "dev": true, "dependencies": { - "import-fresh": "^3.2.1", + "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", + "parse-json": "^5.2.0", "path-type": "^4.0.0" }, "engines": { @@ -4578,6 +5141,14 @@ }, "funding": { "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/cross-fetch": { @@ -4588,6 +5159,18 @@ "node-fetch": "^2.6.12" } }, + "node_modules/cross-inspect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cross-inspect/-/cross-inspect-1.0.0.tgz", + "integrity": "sha512-4PFfn4b5ZN6FMNGSZlyb7wUhuN8wvj8t/VQHZdM4JsDcruGJ8L2kf9zao98QIrBPFCpdk27qst/AGTl7pL3ypQ==", + "dev": true, + "dependencies": { + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -4602,10 +5185,22 @@ "node": ">= 8" } }, + "node_modules/cssstyle": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.0.1.tgz", + "integrity": "sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==", + "dev": true, + "dependencies": { + "rrweb-cssom": "^0.6.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, "node_modules/damerau-levenshtein": { "version": "1.0.8", @@ -4613,6 +5208,19 @@ "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", "dev": true }, + "node_modules/data-urls": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "dev": true, + "dependencies": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/dataloader": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-2.2.2.tgz", @@ -4651,6 +5259,56 @@ "node": ">=0.10.0" } }, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", + "dev": true + }, + "node_modules/deep-eql": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/deep-equal": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", + "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.5", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.2", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -4669,12 +5327,30 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "dependencies": { + "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" }, @@ -4685,6 +5361,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/dependency-graph": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", @@ -4723,6 +5408,15 @@ "node": ">=0.10" } }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -4747,6 +5441,12 @@ "node": ">=6.0.0" } }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true + }, "node_modules/dom-helpers": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", @@ -4767,21 +5467,21 @@ } }, "node_modules/dotenv": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", - "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", + "version": "16.4.4", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.4.tgz", + "integrity": "sha512-XvPXc8XAQThSjAbY6cQ/9PcBXmFoWuw1sQ3b8HqUCR6ziGXjkTi//kB9SWa2UwqlgdAIuRqAa/9hVljzPehbYg==", "dev": true, "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/motdotla/dotenv?sponsor=1" + "url": "https://dotenvx.com" } }, "node_modules/dset": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.2.tgz", - "integrity": "sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.3.tgz", + "integrity": "sha512-20TuZZHCEZ2O71q9/+8BwKwZ0QtD9D8ObhrihJPr+vLLYlSuAU3/zL4cSlgbfeoGHTjCSJBa7NGcrF9/Bx/WJQ==", "dev": true, "engines": { "node": ">=4" @@ -4793,17 +5493,29 @@ "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==" }, "node_modules/electron-to-chromium": { - "version": "1.4.504", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.504.tgz", - "integrity": "sha512-cSMwIAd8yUh54VwitVRVvHK66QqHWE39C3DRj8SWiXitEpVSY3wNPD9y1pxQtLIi4w3UdzF9klLsmuPshz09DQ==", + "version": "1.4.668", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.668.tgz", + "integrity": "sha512-ZOBocMYCehr9W31+GpMclR+KBaDZOoAEabLdhpZ8oU1JFDwIaFY0UDbpXVEUFc0BIP2O2Qn3rkfCjQmMR4T/bQ==", "dev": true }, "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -4814,101 +5526,154 @@ } }, "node_modules/es-abstract": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", - "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.4.tgz", + "integrity": "sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg==", "dev": true, "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.1", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.6", + "call-bind": "^1.0.7", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.2", "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.1", - "get-symbol-description": "^1.0.0", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", + "has-property-descriptors": "^1.0.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", + "hasown": "^2.0.1", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", + "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", + "object-inspect": "^1.13.1", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.0", - "safe-array-concat": "^1.0.0", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-buffer": "^1.0.0", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.0", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.1", "typed-array-byte-length": "^1.0.0", "typed-array-byte-offset": "^1.0.0", "typed-array-length": "^1.0.4", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.10" + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "dev": true + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" }, "engines": { "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/es-iterator-helpers": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.14.tgz", - "integrity": "sha512-JgtVnwiuoRuzLvqelrvN3Xu7H9bu2ap/kQ2CrM62iidP8SKuD99rWU3CJy++s7IVL2qb/AjXPGR/E7i9ngd/Cw==", + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.17.tgz", + "integrity": "sha512-lh7BsUqelv4KUbR5a/ZTaGGIMLCjPGPqJ6q+Oq24YP0RdyptX1uzm4vvaqzk7Zx3bpl/76YLTTDj9L7uYQ92oQ==", "dev": true, "dependencies": { "asynciterator.prototype": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-set-tostringtag": "^2.0.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.4", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.2", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.0", + "has-property-descriptors": "^1.0.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "iterator.prototype": "^1.1.0", - "safe-array-concat": "^1.0.0" + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", + "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" + "get-intrinsic": "^1.2.2", + "has-tostringtag": "^1.0.0", + "hasown": "^2.0.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" } }, "node_modules/es-to-primitive": { @@ -4966,36 +5731,40 @@ } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "engines": { - "node": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint": { - "version": "8.48.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.48.0.tgz", - "integrity": "sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.48.0", - "@humanwhocodes/config-array": "^0.11.10", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.56.0", + "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -5147,15 +5916,6 @@ "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/eslint-plugin-jsx-a11y": { "version": "6.7.1", "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", @@ -5186,21 +5946,6 @@ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/eslint-plugin-react": { "version": "7.33.2", "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", @@ -5265,12 +6010,12 @@ } }, "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, "dependencies": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -5281,15 +6026,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/eslint-scope": { "version": "7.2.2", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", @@ -5318,71 +6054,10 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/eslint/node_modules/globals": { - "version": "13.21.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", - "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -5394,25 +6069,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" + "node": ">=10" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/espree": { @@ -5465,6 +6131,15 @@ "node": ">=4.0" } }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0" + } + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -5474,6 +6149,80 @@ "node": ">=0.10.0" } }, + "node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/execa/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/execa/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/execa/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", @@ -5524,9 +6273,9 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -5581,16 +6330,10 @@ "punycode": "^1.3.2" } }, - "node_modules/fast-url-parser/node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true - }, "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, "dependencies": { "reusify": "^1.0.4" @@ -5641,6 +6384,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -5682,23 +6434,23 @@ } }, "node_modules/flat-cache": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", - "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, "dependencies": { - "flatted": "^3.2.7", + "flatted": "^3.2.9", "keyv": "^4.5.3", "rimraf": "^3.0.2" }, "engines": { - "node": ">=12.0.0" + "node": "^10.12.0 || >=12.0.0" } }, "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", "dev": true }, "node_modules/for-each": { @@ -5710,6 +6462,20 @@ "is-callable": "^1.1.3" } }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -5731,10 +6497,13 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/function.prototype.name": { "version": "1.1.6", @@ -5786,16 +6555,29 @@ "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5813,13 +6595,14 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" }, "engines": { "node": ">= 0.4" @@ -5960,17 +6743,17 @@ "dev": true }, "node_modules/graphql": { - "version": "16.8.0", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.0.tgz", - "integrity": "sha512-0oKGaR+y3qcS5mCu1vb7KG+a89vjn06C7Ihq/dDl3jA+A8B3TKomvi3CiEcVLJQGalbu8F52LxkOym7U5sSfbg==", + "version": "16.8.1", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.1.tgz", + "integrity": "sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==", "engines": { "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" } }, "node_modules/graphql-config": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/graphql-config/-/graphql-config-5.0.2.tgz", - "integrity": "sha512-7TPxOrlbiG0JplSZYCyxn2XQtqVhXomEjXUmWJVSS5ET1nPhOJSsIb/WTwqWhcYX6G0RlHXSj9PLtGTKmxLNGg==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/graphql-config/-/graphql-config-5.0.3.tgz", + "integrity": "sha512-BNGZaoxIBkv9yy6Y7omvsaBUHOzfFcII3UN++tpH8MGOKFPFkCPZuwx09ggANMt8FgyWP1Od8SWPmrUEZca4NQ==", "dev": true, "dependencies": { "@graphql-tools/graphql-file-loader": "^8.0.0", @@ -6038,9 +6821,9 @@ } }, "node_modules/graphql-ws": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/graphql-ws/-/graphql-ws-5.14.0.tgz", - "integrity": "sha512-itrUTQZP/TgswR4GSSYuwWUzrE/w5GhbwM2GX3ic2U7aw33jgEsayfIlvaj7/GcIvZgNMzsPTrE5hqPuFUiE5g==", + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/graphql-ws/-/graphql-ws-5.15.0.tgz", + "integrity": "sha512-xWGAtm3fig9TIhSaNsg0FaDZ8Pyn/3re3RFlP4rhQcmjRDIPpk1EhRuNB+YSJtLzttyuToaDiNhwT1OMoGnJnw==", "dev": true, "engines": { "node": ">=10" @@ -6050,13 +6833,10 @@ } }, "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", + "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, "engines": { "node": ">= 0.4.0" } @@ -6071,21 +6851,21 @@ } }, "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.1" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6116,12 +6896,12 @@ } }, "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "dependencies": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -6130,6 +6910,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hasown": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", + "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/header-case": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz", @@ -6140,10 +6932,28 @@ "tslib": "^2.0.3" } }, + "node_modules/html-encoding-sniffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^3.1.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, "node_modules/http-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", - "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.1.tgz", + "integrity": "sha512-My1KCEPs6A0hb4qCVzYp8iEvA8j8YqcvXLZZH8C9OFuTYpYjHE7N2dtG3mRl1HMD4+VGXpF3XcDVcxGBT7yDZQ==", "dev": true, "dependencies": { "agent-base": "^7.1.0", @@ -6154,9 +6964,9 @@ } }, "node_modules/https-proxy-agent": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.1.tgz", - "integrity": "sha512-Eun8zV0kcYS1g19r78osiQLEFIRspRUDd9tIfBCTBPBeMieF/EsJNL8VI3xOIdYRDEkjQnqOYPsZ2DsWsVsFwQ==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.3.tgz", + "integrity": "sha512-kCnwztfX0KZJSLOBrcL0emLeFako55NWMovvyPP2AjsghNk9RB1yjSI+jVumPHYZsNXegNoqupSW9IY3afSH8w==", "dev": true, "dependencies": { "agent-base": "^7.0.2", @@ -6166,6 +6976,15 @@ "node": ">= 14" } }, + "node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true, + "engines": { + "node": ">=16.17.0" + } + }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -6198,9 +7017,9 @@ ] }, "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, "engines": { "node": ">= 4" @@ -6231,6 +7050,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/import-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/import-from/-/import-from-4.0.0.tgz", @@ -6308,84 +7136,14 @@ "node": ">=12.0.0" } }, - "node_modules/inquirer/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/inquirer/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/inquirer/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/inquirer/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/inquirer/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/inquirer/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", + "es-errors": "^1.3.0", + "hasown": "^2.0.0", "side-channel": "^1.0.4" }, "engines": { @@ -6413,15 +7171,33 @@ "node": ">=0.10.0" } }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6489,12 +7265,12 @@ } }, "node_modules/is-core-module": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6663,6 +7439,12 @@ "node": ">=0.10.0" } }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -6712,6 +7494,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", @@ -6743,12 +7537,12 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, "dependencies": { - "which-typed-array": "^1.1.11" + "which-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -6861,32 +7655,82 @@ "ws": "*" } }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/iterator.prototype": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.0.tgz", - "integrity": "sha512-rjuhAk1AJ1fssphHD0IFV6TWL40CwRZ53FrztKx43yk2v6rguBYsY4Bj1VU4HmoMmKwZUlx7mfnhDf9cOp4YTw==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", "dev": true, "dependencies": { - "define-properties": "^1.1.4", - "get-intrinsic": "^1.1.3", + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", "has-symbols": "^1.0.3", - "has-tostringtag": "^1.0.0", - "reflect.getprototypeof": "^1.0.3" + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" } }, "node_modules/jiti": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.19.3.tgz", - "integrity": "sha512-5eEbBDQT/jF1xg6l36P+mWGGoH9Spuy0PCdSr2dtWRDGC6ph/w9ZCL4lmESW8f8F7MwT3XKescfP0wnZWAKL9w==", + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", "dev": true, "bin": { "jiti": "bin/jiti.js" } }, "node_modules/jose": { - "version": "4.14.4", - "resolved": "https://registry.npmjs.org/jose/-/jose-4.14.4.tgz", - "integrity": "sha512-j8GhLiKmUAh+dsFXlX1aJCbt5KMibuKb+d7j1JaOJG6s2UjX1PQlW+OKB/sD4a/5ZYF4RcmYmLSndOoU3Lt/3g==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/jose/-/jose-5.2.2.tgz", + "integrity": "sha512-/WByRr4jDcsKlvMd1dRJnPfS1GVO3WuKyaurJ/vvXcOaUQO8rnNObCQMlv/5uCceVQIq5Q4WLF44ohsdiTohdg==", "dev": true, "funding": { "url": "https://github.com/sponsors/panva" @@ -6909,6 +7753,46 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsdom": { + "version": "24.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.0.0.tgz", + "integrity": "sha512-UDS2NayCvmXSXVP6mpTj+73JnNQadZlr9N68189xib2tx5Mls7swlTNao26IoHv46BZJFvXygyRtyXd1feAk1A==", + "dev": true, + "dependencies": { + "cssstyle": "^4.0.1", + "data-urls": "^5.0.0", + "decimal.js": "^10.4.3", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.2", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.7", + "parse5": "^7.1.2", + "rrweb-cssom": "^0.6.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.3", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0", + "ws": "^8.16.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "canvas": "^2.11.2" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -6940,12 +7824,18 @@ "dev": true }, "node_modules/json-stable-stringify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.2.tgz", - "integrity": "sha512-eunSSaEnxV12z+Z73y/j5N37/In40GK4GmsSy+tEHJMxknvqnA7/djeYtAgW0GsWHUfg+847WJjKaEylk2y09g==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.1.1.tgz", + "integrity": "sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg==", "dev": true, "dependencies": { - "jsonify": "^0.0.1" + "call-bind": "^1.0.5", + "isarray": "^2.0.5", + "jsonify": "^0.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6987,6 +7877,12 @@ "node": ">=6" } }, + "node_modules/jsonc-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", + "dev": true + }, "node_modules/jsonify": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", @@ -7017,9 +7913,9 @@ "integrity": "sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==" }, "node_modules/keyv": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", - "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, "dependencies": { "json-buffer": "3.0.1" @@ -7094,54 +7990,37 @@ } } }, - "node_modules/listr2/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/listr2/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/listr2/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/local-pkg": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz", + "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", "dev": true, "dependencies": { - "color-name": "~1.1.4" + "mlly": "^1.4.2", + "pkg-types": "^1.0.3" }, "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/listr2/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/listr2/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" } }, "node_modules/locate-path": { @@ -7193,76 +8072,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/log-update": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", @@ -7281,39 +8090,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-update/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-update/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/log-update/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/log-update/node_modules/slice-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", @@ -7342,6 +8118,15 @@ "loose-envify": "cli.js" } }, + "node_modules/loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.1" + } + }, "node_modules/lower-case": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", @@ -7369,6 +8154,86 @@ "yallist": "^3.0.2" } }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "0.30.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.7.tgz", + "integrity": "sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/magicast": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.3.tgz", + "integrity": "sha512-ZbrP1Qxnpoes8sz47AM0z08U+jW6TyRgZzcWy3Ma3vDhJttwMwAFDMMQFobwdBxByBD46JYmxRzeF7w2+wJEuw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.23.6", + "@babel/types": "^7.23.6", + "source-map-js": "^1.0.2" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -7379,9 +8244,9 @@ } }, "node_modules/maplibre-gl": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-3.6.2.tgz", - "integrity": "sha512-krg2KFIdOpLPngONDhP6ixCoWl5kbdMINP0moMSJFVX7wX1Clm2M9hlNKXS8vBGlVWwR5R3ZfI6IPrYz7c+aCQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-4.0.1.tgz", + "integrity": "sha512-UF+wI2utIciFXNg6+gYaMe7IGa9fMLzAZM3vdlGilqyWYmuibjcN40yGVgkz2r28//aOLphvtli3TbDEjEqHww==", "dependencies": { "@mapbox/geojson-rewind": "^0.5.2", "@mapbox/jsonlint-lines-primitives": "^2.0.2", @@ -7390,8 +8255,9 @@ "@mapbox/unitbezier": "^0.0.1", "@mapbox/vector-tile": "^1.3.1", "@mapbox/whoots-js": "^3.1.0", - "@maplibre/maplibre-gl-style-spec": "^19.3.3", - "@types/geojson": "^7946.0.13", + "@maplibre/maplibre-gl-style-spec": "^20.1.1", + "@types/geojson": "^7946.0.14", + "@types/geojson-vt": "3.2.5", "@types/mapbox__point-geometry": "^0.1.4", "@types/mapbox__vector-tile": "^1.3.4", "@types/pbf": "^3.0.5", @@ -7417,6 +8283,35 @@ "url": "https://github.com/maplibre/maplibre-gl-js?sponsor=1" } }, + "node_modules/maplibre-gl/node_modules/@maplibre/maplibre-gl-style-spec": { + "version": "20.1.1", + "resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-20.1.1.tgz", + "integrity": "sha512-z85ARNPCBI2Cs5cPOS3DSbraTN+ue8zrcYVoSWBuNrD/mA+2SKAJ+hIzI22uN7gac6jBMnCdpPKRxS/V0KSZVQ==", + "dependencies": { + "@mapbox/jsonlint-lines-primitives": "~2.0.2", + "@mapbox/unitbezier": "^0.0.1", + "json-stringify-pretty-compact": "^4.0.0", + "minimist": "^1.2.8", + "rw": "^1.3.3", + "sort-object": "^3.0.3" + }, + "bin": { + "gl-style-format": "dist/gl-style-format.mjs", + "gl-style-migrate": "dist/gl-style-migrate.mjs", + "gl-style-validate": "dist/gl-style-validate.mjs" + } + }, + "node_modules/maplibre-gl/node_modules/json-stringify-pretty-compact": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-4.0.0.tgz", + "integrity": "sha512-3CNZ2DnrpByG9Nqj6Xo8vqbjT4F6N+tb4Gb28ESAZjYZ5yqvmc56J+/kuIwkaAMOyblTQhUW7PxMkUb8Q36N3Q==" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -7456,6 +8351,27 @@ "node": ">=8.6" } }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", @@ -7485,6 +8401,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/mlly": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.5.0.tgz", + "integrity": "sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ==", + "dev": true, + "dependencies": { + "acorn": "^8.11.3", + "pathe": "^1.1.2", + "pkg-types": "^1.0.3", + "ufo": "^1.3.2" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -7503,9 +8431,9 @@ "dev": true }, "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "dev": true, "funding": [ { @@ -7537,10 +8465,13 @@ } }, "node_modules/node-addon-api": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.0.0.tgz", - "integrity": "sha512-vgbBJTS4m5/KkE16t5Ly0WW9hz46swAstv0hYYwMtbG7AznRhNyfLRe8HZAiWIpcHzoO7HxhLuBQj9rJ/Ho0ZA==", - "dev": true + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.0.tgz", + "integrity": "sha512-mNcltoe1R8o7STTegSOHdnJNN7s5EUvhoS7ShnTHDyOSd+8H+UdWODq6qSv67PjC8Zc5JRT8+oLAMCr0SIXw7g==", + "dev": true, + "engines": { + "node": "^16 || ^18 || >= 20" + } }, "node_modules/node-fetch": { "version": "2.7.0", @@ -7561,6 +8492,25 @@ } } }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -7568,9 +8518,9 @@ "dev": true }, "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", "dev": true }, "node_modules/normalize-path": { @@ -7585,12 +8535,45 @@ "node": ">=0.10.0" } }, + "node_modules/npm-run-path": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.2.0.tgz", + "integrity": "sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/nullthrows": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", "dev": true }, + "node_modules/nwsapi": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", + "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", + "dev": true + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -7600,16 +8583,32 @@ } }, "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object-keys": { - "version": "1.1.1", + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, @@ -7618,13 +8617,13 @@ } }, "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", "has-symbols": "^1.0.3", "object-keys": "^1.1.1" }, @@ -7667,15 +8666,16 @@ } }, "node_modules/object.groupby": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", - "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.2.tgz", + "integrity": "sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1" + "array.prototype.filter": "^1.0.3", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.0.0" } }, "node_modules/object.hasown": { @@ -7772,76 +8772,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ora/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ora/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ora/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ora/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/ora/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -7959,6 +8889,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, "node_modules/pascal-case": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", @@ -8042,6 +8984,21 @@ "node": ">=8" } }, + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/pbf": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz", @@ -8072,10 +9029,21 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pkg-types": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", + "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", + "dev": true, + "dependencies": { + "jsonc-parser": "^3.2.0", + "mlly": "^1.2.0", + "pathe": "^1.1.0" + } + }, "node_modules/postcss": { - "version": "8.4.28", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.28.tgz", - "integrity": "sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw==", + "version": "8.4.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", + "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", "dev": true, "funding": [ { @@ -8092,7 +9060,7 @@ } ], "dependencies": { - "nanoid": "^3.3.6", + "nanoid": "^3.3.7", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, @@ -8129,6 +9097,32 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/promise": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", @@ -8160,19 +9154,32 @@ "react": ">=0.14.0" } }, + "node_modules/prop-types-extra/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, "node_modules/protocol-buffers-schema": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==" }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true, - "engines": { - "node": ">=6" - } + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true }, "node_modules/pvtsutils": { "version": "1.3.5", @@ -8192,6 +9199,12 @@ "node": ">=6.0.0" } }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -8270,9 +9283,10 @@ } }, "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true }, "node_modules/react-lifecycles-compat": { "version": "3.0.4", @@ -8341,15 +9355,16 @@ } }, "node_modules/reflect.getprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.3.tgz", - "integrity": "sha512-TTAOZpkJ2YLxl7mVHWrNo3iDMEkYlva/kgFcXndqMgbo/AZUmmavEkdXV+hXtE4P8xdyEKRzalaFqZVuwIk/Nw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.5.tgz", + "integrity": "sha512-62wgfC8dJWrmxv44CA36pLDnP6KKl3Vhxb7PL+8+qrrFMMoJij4vgiMP8zV4O8+CBMXY1mHxI5fITGHXFHVmQQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.0.0", + "get-intrinsic": "^1.2.3", "globalthis": "^1.0.3", "which-builtin-type": "^1.1.3" }, @@ -8361,19 +9376,20 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, "node_modules/regexp.prototype.flags": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", - "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "functions-have-names": "^1.2.3" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -8429,10 +9445,16 @@ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, "node_modules/resolve": { - "version": "1.22.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", - "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "dependencies": { "is-core-module": "^2.13.0", @@ -8447,12 +9469,12 @@ } }, "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/resolve-protobuf-schema": { @@ -8487,9 +9509,9 @@ } }, "node_modules/rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", + "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", "dev": true }, "node_modules/rimraf": { @@ -8508,9 +9530,9 @@ } }, "node_modules/rollup": { - "version": "3.28.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.28.1.tgz", - "integrity": "sha512-R9OMQmIHJm9znrU3m3cpE8uhN0fGdXiawME7aZIpQqvpS/85+Vt1Hq1/yVIcYfOmaQiHjvXkQAoJukvLpau6Yw==", + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -8523,6 +9545,12 @@ "fsevents": "~2.3.2" } }, + "node_modules/rrweb-cssom": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", + "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==", + "dev": true + }, "node_modules/run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", @@ -8570,13 +9598,13 @@ } }, "node_modules/safe-array-concat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", - "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", + "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", + "call-bind": "^1.0.5", + "get-intrinsic": "^1.2.2", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -8608,15 +9636,18 @@ ] }, "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", "is-regex": "^1.1.4" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -8627,6 +9658,18 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, "node_modules/scheduler": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", @@ -8642,38 +9685,14 @@ "dev": true }, "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" } }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/sentence-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz", @@ -8691,6 +9710,37 @@ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, + "node_modules/set-function-length": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", + "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.2", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", @@ -8742,19 +9792,29 @@ } }, "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", + "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true + }, "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -8790,47 +9850,14 @@ "node": ">=8" } }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/snake-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", + "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/snake-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", - "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", - "dev": true, - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" + "dot-case": "^3.0.4", + "tslib": "^2.0.3" } }, "node_modules/sort-asc": { @@ -8865,6 +9892,15 @@ "node": ">=0.10.0" } }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", @@ -8917,6 +9953,30 @@ "tslib": "^2.0.3" } }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true + }, + "node_modules/std-env": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", + "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", + "dev": true + }, + "node_modules/stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "dev": true, + "dependencies": { + "internal-slot": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/streamsearch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", @@ -8955,10 +10015,16 @@ "node": ">=8" } }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, "node_modules/string.prototype.matchall": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.9.tgz", - "integrity": "sha512-6i5hL3MqG/K2G43mWXWgP+qizFW/QH/7kCNN13JrJS5q48FN5IKksLDscexKP3dnmB6cdm9jlNgAsWNLpSykmA==", + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", + "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", @@ -8968,6 +10034,7 @@ "has-symbols": "^1.0.3", "internal-slot": "^1.0.5", "regexp.prototype.flags": "^1.5.0", + "set-function-name": "^2.0.0", "side-channel": "^1.0.4" }, "funding": { @@ -8975,14 +10042,14 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", - "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" @@ -8992,28 +10059,28 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -9040,6 +10107,18 @@ "node": ">=4" } }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -9052,6 +10131,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/strip-literal": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.3.0.tgz", + "integrity": "sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==", + "dev": true, + "dependencies": { + "acorn": "^8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, "node_modules/supercluster": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-8.0.1.tgz", @@ -9061,15 +10152,15 @@ } }, "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/supports-preserve-symlinks-flag": { @@ -9093,6 +10184,26 @@ "tslib": "^2.0.3" } }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -9105,11 +10216,35 @@ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true }, + "node_modules/tinybench": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.6.0.tgz", + "integrity": "sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==", + "dev": true + }, + "node_modules/tinypool": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.2.tgz", + "integrity": "sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/tinyqueue": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==" }, + "node_modules/tinyspy": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz", + "integrity": "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/title-case": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/title-case/-/title-case-3.0.3.tgz", @@ -9152,18 +10287,58 @@ "node": ">=8.0" } }, + "node_modules/tough-cookie": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "dev": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz", + "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==", + "dev": true, + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/tr46/node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } }, "node_modules/ts-api-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.2.tgz", - "integrity": "sha512-Cbu4nIqnEdd+THNEsBdkolnOXhg0I8XteoHaEKgvsxpsbWda4IsUut2c187HxywQCvveojow0Dgw/amxtSKVkQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.2.1.tgz", + "integrity": "sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA==", "dev": true, "engines": { - "node": ">=16.13.0" + "node": ">=16" }, "peerDependencies": { "typescript": ">=4.2.0" @@ -9176,9 +10351,9 @@ "dev": true }, "node_modules/tsconfig-paths": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", - "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, "dependencies": { "@types/json5": "^0.0.29", @@ -9216,10 +10391,19 @@ "node": ">= 0.8.0" } }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, "engines": { "node": ">=10" @@ -9229,14 +10413,14 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.1.tgz", + "integrity": "sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -9320,9 +10504,9 @@ "integrity": "sha512-2SCC/WLzj2SbUwzFOzqMCkz5amXLlxtJqDKTICqg30x+2DZxcfZN2MvQZmGfXWKNWaKK9pBPsvkcwv8bF/gxKg==" }, "node_modules/ua-parser-js": { - "version": "1.0.35", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.35.tgz", - "integrity": "sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA==", + "version": "1.0.37", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.37.tgz", + "integrity": "sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==", "dev": true, "funding": [ { @@ -9332,12 +10516,22 @@ { "type": "paypal", "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" } ], "engines": { "node": "*" } }, + "node_modules/ufo": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.4.0.tgz", + "integrity": "sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ==", + "dev": true + }, "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", @@ -9376,6 +10570,12 @@ "react": ">=15.0.0" } }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, "node_modules/union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", @@ -9390,6 +10590,15 @@ "node": ">=0.10.0" } }, + "node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/unixify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unixify/-/unixify-1.0.0.tgz", @@ -9403,9 +10612,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "dev": true, "funding": [ { @@ -9459,6 +10668,25 @@ "punycode": "^2.1.0" } }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, "node_modules/urlpattern-polyfill": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-8.0.2.tgz", @@ -9471,6 +10699,20 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, + "node_modules/v8-to-istanbul": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", + "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, "node_modules/value-or-promise": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.12.tgz", @@ -9481,9 +10723,9 @@ } }, "node_modules/vite": { - "version": "4.4.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz", - "integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.2.tgz", + "integrity": "sha512-tBCZBNSBbHQkaGyhGCDUGqeo2ph8Fstyp6FMSvTtsXeZSPpSMGlviAOav2hxVTqFcx8Hj/twtWKsMJXNY0xI8w==", "dev": true, "dependencies": { "esbuild": "^0.18.10", @@ -9535,67 +10777,1162 @@ } } }, - "node_modules/vt-pbf": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.3.tgz", - "integrity": "sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA==", + "node_modules/vite-node": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.1.3.tgz", + "integrity": "sha512-BLSO72YAkIUuNrOx+8uznYICJfTEbvBAmWClY3hpath5+h1mbPS5OMn42lrTxXuyCazVyZoDkSRnju78GiVCqA==", + "dev": true, "dependencies": { - "@mapbox/point-geometry": "0.1.0", - "@mapbox/vector-tile": "^1.3.1", - "pbf": "^3.2.1" + "cac": "^6.7.14", + "debug": "^4.3.4", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "vite": "^5.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/warning": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", - "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", - "dependencies": { - "loose-envify": "^1.0.0" + "node_modules/vite-node/node_modules/@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" } }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "node_modules/vite-node/node_modules/@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "defaults": "^1.0.3" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" } }, - "node_modules/web-streams-polyfill": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", - "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", + "node_modules/vite-node/node_modules/@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "cpu": [ + "x64" + ], "dev": true, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">= 8" + "node": ">=12" } }, - "node_modules/webcrypto-core": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.7.7.tgz", - "integrity": "sha512-7FjigXNsBfopEj+5DV2nhNpfic2vumtjjgPmeDKk45z+MJwXKKfhPB7118Pfzrmh4jqOMST6Ch37iPAHoImg5g==", + "node_modules/vite-node/node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@peculiar/asn1-schema": "^2.3.6", - "@peculiar/json-schema": "^1.1.12", - "asn1js": "^3.0.1", - "pvtsutils": "^1.3.2", - "tslib": "^2.4.0" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/win32-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/esbuild": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" + } + }, + "node_modules/vite-node/node_modules/rollup": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.10.0.tgz", + "integrity": "sha512-t2v9G2AKxcQ8yrG+WGxctBes1AomT0M4ND7jTFBCVPXQ/WFTvNSefIrNSmLKhIKBrvN8SG+CZslimJcT3W2u2g==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.10.0", + "@rollup/rollup-android-arm64": "4.10.0", + "@rollup/rollup-darwin-arm64": "4.10.0", + "@rollup/rollup-darwin-x64": "4.10.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.10.0", + "@rollup/rollup-linux-arm64-gnu": "4.10.0", + "@rollup/rollup-linux-arm64-musl": "4.10.0", + "@rollup/rollup-linux-riscv64-gnu": "4.10.0", + "@rollup/rollup-linux-x64-gnu": "4.10.0", + "@rollup/rollup-linux-x64-musl": "4.10.0", + "@rollup/rollup-win32-arm64-msvc": "4.10.0", + "@rollup/rollup-win32-ia32-msvc": "4.10.0", + "@rollup/rollup-win32-x64-msvc": "4.10.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/vite-node/node_modules/vite": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.1.tgz", + "integrity": "sha512-wclpAgY3F1tR7t9LL5CcHC41YPkQIpKUGeIuT8MdNwNZr6OqOTLs7JX5vIHAtzqLWXts0T+GDrh9pN2arneKqg==", + "dev": true, + "dependencies": { + "esbuild": "^0.19.3", + "postcss": "^8.4.35", + "rollup": "^4.2.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vitest": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.1.3.tgz", + "integrity": "sha512-2l8om1NOkiA90/Y207PsEvJLYygddsOyr81wLQ20Ra8IlLKbyQncWsGZjnbkyG2KwwuTXLQjEPOJuxGMG8qJBQ==", + "dev": true, + "dependencies": { + "@vitest/expect": "1.1.3", + "@vitest/runner": "1.1.3", + "@vitest/snapshot": "1.1.3", + "@vitest/spy": "1.1.3", + "@vitest/utils": "1.1.3", + "acorn-walk": "^8.3.1", + "cac": "^6.7.14", + "chai": "^4.3.10", + "debug": "^4.3.4", + "execa": "^8.0.1", + "local-pkg": "^0.5.0", + "magic-string": "^0.30.5", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "std-env": "^3.5.0", + "strip-literal": "^1.3.0", + "tinybench": "^2.5.1", + "tinypool": "^0.8.1", + "vite": "^5.0.0", + "vite-node": "1.1.3", + "why-is-node-running": "^2.2.2" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/node": "^18.0.0 || >=20.0.0", + "@vitest/browser": "^1.0.0", + "@vitest/ui": "^1.0.0", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/vitest/node_modules/@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/win32-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/esbuild": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" + } + }, + "node_modules/vitest/node_modules/rollup": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.10.0.tgz", + "integrity": "sha512-t2v9G2AKxcQ8yrG+WGxctBes1AomT0M4ND7jTFBCVPXQ/WFTvNSefIrNSmLKhIKBrvN8SG+CZslimJcT3W2u2g==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.10.0", + "@rollup/rollup-android-arm64": "4.10.0", + "@rollup/rollup-darwin-arm64": "4.10.0", + "@rollup/rollup-darwin-x64": "4.10.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.10.0", + "@rollup/rollup-linux-arm64-gnu": "4.10.0", + "@rollup/rollup-linux-arm64-musl": "4.10.0", + "@rollup/rollup-linux-riscv64-gnu": "4.10.0", + "@rollup/rollup-linux-x64-gnu": "4.10.0", + "@rollup/rollup-linux-x64-musl": "4.10.0", + "@rollup/rollup-win32-arm64-msvc": "4.10.0", + "@rollup/rollup-win32-ia32-msvc": "4.10.0", + "@rollup/rollup-win32-x64-msvc": "4.10.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/vitest/node_modules/vite": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.1.tgz", + "integrity": "sha512-wclpAgY3F1tR7t9LL5CcHC41YPkQIpKUGeIuT8MdNwNZr6OqOTLs7JX5vIHAtzqLWXts0T+GDrh9pN2arneKqg==", + "dev": true, + "dependencies": { + "esbuild": "^0.19.3", + "postcss": "^8.4.35", + "rollup": "^4.2.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vt-pbf": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.3.tgz", + "integrity": "sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA==", + "dependencies": { + "@mapbox/point-geometry": "0.1.0", + "@mapbox/vector-tile": "^1.3.1", + "pbf": "^3.2.1" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dev": true, + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.2.tgz", + "integrity": "sha512-3pRGuxRF5gpuZc0W+EpwQRmCD7gRqcDOMt688KmdlDAgAyaB1XlN0zq2njfDNm44XVdIouE7pZ6GzbdyH47uIQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/webcrypto-core": { + "version": "1.7.8", + "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.7.8.tgz", + "integrity": "sha512-eBR98r9nQXTqXt/yDRtInszPMjTaSAMJAFDg2AHsgrnczawT1asx9YNBX6k5p+MekbPF4+s/UJJrr88zsTqkSg==", + "dev": true, + "dependencies": { + "@peculiar/asn1-schema": "^2.3.8", + "@peculiar/json-schema": "^1.1.12", + "asn1js": "^3.0.1", + "pvtsutils": "^1.3.5", + "tslib": "^2.6.2" } }, "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "dev": true, + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "dev": true, + "engines": { + "node": ">=18" + } }, "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.0.0.tgz", + "integrity": "sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==", + "dev": true, "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "tr46": "^5.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" } }, "node_modules/which": { @@ -9677,16 +12014,16 @@ "dev": true }, "node_modules/which-typed-array": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", - "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz", + "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.6", + "call-bind": "^1.0.5", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "has-tostringtag": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -9695,53 +12032,36 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "node_modules/why-is-node-running": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", + "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==", "dev": true, "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "siginfo": "^2.0.0", + "stackback": "0.0.2" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" + "bin": { + "why-is-node-running": "cli.js" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "dependencies": { - "color-name": "~1.1.4" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=8" } }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -9749,9 +12069,9 @@ "dev": true }, "node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", "dev": true, "engines": { "node": ">=10.0.0" @@ -9769,6 +12089,21 @@ } } }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -9785,9 +12120,9 @@ "dev": true }, "node_modules/yaml": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.2.tgz", - "integrity": "sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", + "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", "dev": true, "engines": { "node": ">= 14" diff --git a/client-next/package.json b/client-next/package.json index 6388122befc..ad3f1fa10a5 100644 --- a/client-next/package.json +++ b/client-next/package.json @@ -6,6 +6,8 @@ "scripts": { "dev": "vite", "build": "tsc && vite build", + "test": "vitest --root src/", + "coverage": "vitest run --root src/ --coverage", "lint": "eslint . --report-unused-disable-directives --max-warnings 0", "check-format": "prettier --check \"**/*.{js,jsx,ts,tsx,json,css,scss,md}\"", "format": "prettier --write \"**/*.{js,jsx,ts,tsx,json,css,scss,md}\"", @@ -17,9 +19,9 @@ "dependencies": { "@googlemaps/polyline-codec": "1.0.28", "bootstrap": "5.3.1", - "graphql": "16.8.0", + "graphql": "16.8.1", "graphql-request": "6.1.0", - "maplibre-gl": "3.6.2", + "maplibre-gl": "4.0.1", "react": "18.2.0", "react-bootstrap": "2.8.0", "react-dom": "18.2.0", @@ -30,20 +32,24 @@ "@graphql-codegen/client-preset": "4.1.0", "@graphql-codegen/introspection": "4.0.0", "@parcel/watcher": "2.3.0", + "@testing-library/react": "14.1.2", "@types/react": "18.2.21", "@types/react-dom": "18.2.7", - "@typescript-eslint/eslint-plugin": "6.5.0", - "@typescript-eslint/parser": "6.5.0", + "@typescript-eslint/eslint-plugin": "7.1.0", + "@typescript-eslint/parser": "7.1.0", "@vitejs/plugin-react": "4.0.4", - "eslint": "8.48.0", + "@vitest/coverage-v8": "1.1.3", + "eslint": "8.56.0", "eslint-config-prettier": "9.0.0", "eslint-plugin-import": "2.28.1", "eslint-plugin-jsx-a11y": "6.7.1", "eslint-plugin-react": "7.33.2", "eslint-plugin-react-hooks": "4.6.0", "eslint-plugin-react-refresh": "0.4.3", + "jsdom": "24.0.0", "prettier": "3.0.3", "typescript": "5.2.2", - "vite": "4.4.9" + "vite": "4.5.2", + "vitest": "1.1.3" } } diff --git a/client-next/src/components/ItineraryList/ItineraryList.test.tsx b/client-next/src/components/ItineraryList/ItineraryList.test.tsx new file mode 100644 index 00000000000..d1d13b36bf3 --- /dev/null +++ b/client-next/src/components/ItineraryList/ItineraryList.test.tsx @@ -0,0 +1,2394 @@ +import { it } from 'vitest'; +import { ItineraryListContainer } from './ItineraryListContainer'; +import { render } from '@testing-library/react'; +import { QueryType } from '../../gql/graphql.ts'; + +const tripQueryResult = { + trip: { + previousPageCursor: + 'MXxQUkVWSU9VU19QQUdFfDIwMjQtMDEtMTJUMTA6MzI6MThafHwxaHxTVFJFRVRfQU5EX0FSUklWQUxfVElNRXxmYWxzZXwyMDI0LTAxLTEyVDExOjQxOjAwWnwyMDI0LTAxLTEyVDEzOjE4OjUwWnwzfDExMTM0fA==', + nextPageCursor: + 'MXxORVhUX1BBR0V8MjAyNC0wMS0xMlQxMTozOTowN1p8fDFofFNUUkVFVF9BTkRfQVJSSVZBTF9USU1FfGZhbHNlfDIwMjQtMDEtMTJUMTE6NDE6MDBafDIwMjQtMDEtMTJUMTM6MTg6NTBafDN8MTExMzR8', + tripPatterns: [ + { + aimedStartTime: '2024-01-12T12:39:07+01:00', + aimedEndTime: '2024-01-12T13:54:09+01:00', + expectedEndTime: '2024-01-12T13:54:09+01:00', + expectedStartTime: '2024-01-12T12:39:07+01:00', + duration: 4502, + distance: 26616.219999999998, + legs: [ + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T12:39:07+01:00', + aimedEndTime: '2024-01-12T12:50:00+01:00', + expectedEndTime: '2024-01-12T12:50:00+01:00', + expectedStartTime: '2024-01-12T12:39:07+01:00', + realtime: false, + distance: 727.21, + duration: 653, + fromPlace: { + name: 'Origin', + }, + toPlace: { + name: 'IKEA Slependen', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: + 'o`nlJaac_AZ|@\\z@On@MAk@~@UZ@J@HEX@RLv@@DJVVd@LRNR\\^p@t@|@fA\\b@JTAHGVCJ@LBHDPP`@Tb@Xp@f@zAj@nBLd@Hj@@`ACz@@J?JDR@H?D?BAD?BEPAF?D?D@HBCNQDA@BBLDEHKd@a@BAD??O?M@KBKBGBIFGdAeA@?HIZ[??', + }, + }, + { + id: 'rO0ABXeSABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAAB0AAAAmABBSQjpOU1I6UXVheTo3OTQ0ABFSQjpOU1I6UXVheToxMTk2OQA7UkI6UlVUOkRhdGVkU2VydmljZUpvdXJuZXk6ODIyMzhhN2VmZmNhMzY2YzAwZmNkYmJjMWU2MWQ2N2E=', + mode: 'bus', + aimedStartTime: '2024-01-12T12:50:00+01:00', + aimedEndTime: '2024-01-12T13:13:00+01:00', + expectedEndTime: '2024-01-12T13:13:00+01:00', + expectedStartTime: '2024-01-12T12:50:00+01:00', + realtime: true, + distance: 17846.09, + duration: 1380, + fromPlace: { + name: 'IKEA Slependen', + }, + toPlace: { + name: 'Oslo bussterminal', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Oslo bussterminal', + }, + }, + line: { + publicCode: '250', + name: 'Sætre - Slemmestad - Oslo bussterminal', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + '{lmlJa|a_AFEJKHEFEH?FEFKBM@MASDSLe@@KFSHWFYH[F[Nw@JSHWFMDKDIDABABEL@F@FBDBHHDJFPBP?P@RARERCNGNGFIFI@K@KAw@Sg@o@c@k@m@q@o@m@aA_Aq@o@s@s@k@m@c@e@e@i@]c@]g@U_@S_@Q_@Ue@Uc@]y@[{@_@gA[gA_@qAa@{A[sAmAyEs@uCaAgDwAmEqC{G}DaIgGkKmBiDcAcBcBqCqFeJc@q@U_@mAwB{@wA}@cBO[mA_CcAqB[q@Ys@k@uAQa@GOYs@o@iBe@wAg@{AY_Ag@iBYeAYeAS_A]}A_@_BYyAWqAQeAQcAO}@{@_GaAeIgAiKmAwLaAgJ{@qGmA{H]kBc@_CaAgFYgBMeAIk@Io@Gs@Gy@Gy@Ey@Cw@Ey@A}@Cu@C_BCkDAiACgAAaAE_AC{@Ew@Gy@G{@MsACQUaCuB}SmAoLOyAcBuP}@eIk@mEmA}Iy@_Iu@wLKaBKmAK_AK_AM_AS}ASmASkAMm@ScAq@_DY}A[_BKs@My@Iq@QkAOqAKcAE_@KiAIiAIiAGcAOaCa@sHS_DIwAGsAImAG{@Gu@KgAIcAK}@I_AK{@WsBaAuGcA}GaBaLwBwN{@gGKmAAk@CeCAoACs@E}@MiASsASwA_@yC]}B_@aCEc@Im@SuAM_AKq@CQEWOmAUwBOeBc@qFO_CKkBa@gFo@gFiBsL}A_KoBwMg@iFMuA[}FCY??Iu@QaASe@AGo@oBq@iBg@qBe@yCw@wEm@}Dq@mE_@eCO_A[uBO{@QaAUcAk@}BSw@Uw@e@cB}@sCeB_G}@yCWy@]wAI[[gAK]SaAOs@McAMyA_AyMSiCKyA??OsBKwAG}@Ea@UsBWuBUqBm@qES{AoAsJS}ASmASmAUkA_@mBg@_CYsAYyAYkBQkAMkAKcAKeAWcCIcA??EYKiAYyCUaCUoCSoBUuBKeAQyAW}BYyBc@gDa@_D[wBeC}PSqAMaAIg@Iy@Gm@Ei@Ek@EaAEcAG_BGoAEm@Ec@I{@Ee@EYE_@Mu@Kk@Ki@Mm@Qk@I[Sq@aAsDSm@W{@W}@U{@Sy@Qy@Mq@Ii@Ee@Ge@C_@Ea@Ce@Ci@K_BGwAOkCA[AO?Q@U@U@E@E?G?G?GAEAEAO@K?MBk@JsBFsA???KB]Ba@Dq@Dq@D]D{@LaBr@yFLy@PcAReAVaAPa@Pe@P[n@gAh@}@`@s@Tc@Vm@DOHUZqALq@PgAJ}@D}@DeABeA?eA?iA?q@Ay@Cm@Ew@GqAM}AEo@Aa@Ac@@c@Bk@Fk@D]DYLg@LYJYLSRWd@c@~@gA`AgAPUNSPYP]\\u@Rk@Pe@Le@Pu@Nw@Hc@Jy@LgAHsAF{@H}BF_AFy@NqAPkAVqA^mAf@{AVm@Zm@fB_DpJcP\\k@Tc@d@aAh@}AV{@d@uBZqAXsAJm@Lq@Hm@LaANsAJkAP}BRwCr@iL^eGT_DNmCHsADgA@i@@i@@y@?s@HwADgA?yA?i@Ac@A[A[Ca@E]Ky@_@iCG]EQESKUu@aBGMM[EQGYKc@CSESAO@M?O?MCKCKEGEEAAC?E[EYCY?Y?q@Ac@D{A@o@????Be@BaA@_A?a@?u@Ae@AUAKASCSEa@Ge@G]Ic@GWI[Uq@a@gAcAmCCGGEECCAGOACGOKUQKY{@EIu@kBUq@Oc@KWCEKUMWO_@KWAGGMiA}CiAwCEMGOUo@KWWq@Sk@AA??EMIU]{@MYKOMOEIIKIGAK?GCGCGGIECM?GIEIGOWy@EKEKCGIKCCCCOQCCAA[a@QSQU_@c@QU[_@i@o@KMCEOQIKkAyAMQY]KMAAAAACKKCEcAmAUU?M?IAOGyGAg@AQHQDK`AuBx@gB@Eh@cAh@gA??`@y@JSHSHWFOHWJ_@Lg@Pw@Lu@H_@De@Dg@Ba@@s@?s@Eq@GuAEs@MsBGqAEm@E}@C}@AcBAgA?e@?]?Q?U@_@@k@HoANiAT}B@SHu@F]D[J_@H[j@uBBK@EDOFe@@EDYH[VaAJ]@CFODIFG`AwAZa@??@AHKLOFC?A@?DA@?FA@?B?H@??D@F@NBF?D?FADCFCHGl@m@\\[LOFGFEBEDCDE@APMFChC_ALCNEDDB@F?BADEBIBK@OAOJy@VwCBWL_BD[DEBI@I?IAKB]Fi@JsAD{@HiALoAJ_AFg@@G??LeBLyANkBBSBQHk@BEBG@I?I?G?IAGCIACCAECA?C?C@C@ADCDAHAH?H?H@HBF?F?NAL?RMRILEHABINATKhAIbAIbAO`BALE`@ABGt@KlAKvAAL', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:13:00+01:00', + aimedEndTime: '2024-01-12T13:16:42+01:00', + expectedEndTime: '2024-01-12T13:16:42+01:00', + expectedStartTime: '2024-01-12T13:13:00+01:00', + realtime: false, + distance: 213.19, + duration: 222, + fromPlace: { + name: 'Oslo bussterminal', + }, + toPlace: { + name: 'Oslo bussterminal', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: 'sptlJm|s`A??LoAB[@EPqB@MBa@JD@@FQ??D@HDJsA@@B@DBB@DBDB@@Fu@LwAHwA??', + }, + }, + { + id: 'rO0ABXeTABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAAAAAAAANABFSQjpOU1I6UXVheToxMTk2MAARUkI6TlNSOlF1YXk6MTE0NDIAO1JCOlJVVDpEYXRlZFNlcnZpY2VKb3VybmV5OmY0M2E3ZDUxNmY5ZDljMzUyMDFlYzU2ZDk4NjM5M2Jh', + mode: 'bus', + aimedStartTime: '2024-01-12T13:20:00+01:00', + aimedEndTime: '2024-01-12T13:39:00+01:00', + expectedEndTime: '2024-01-12T13:39:00+01:00', + expectedStartTime: '2024-01-12T13:20:00+01:00', + realtime: false, + distance: 6755.19, + duration: 1140, + fromPlace: { + name: 'Oslo bussterminal', + }, + toPlace: { + name: 'Alfaset', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Kjeller', + }, + }, + line: { + publicCode: '100', + name: 'Kjeller - Oslo bussterminal', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + '}ktlJynt`ADi@BQBSBQHk@BEBG@I?I?G?IAG@QBQBKH_@Ji@BNBN?DDUBGJm@BM?ARy@d@{Bt@mDZ{ANo@H[@E`@oBt@mDFUBM?CJe@DSFU@KHc@?GDe@Nq@TgAj@mC@A@KBMFa@x@wE@E??F_@l@iDXcB`@eCV_BDYV_@BE??LUBM?OOaBBa@VuC`@}D@KZwCb@iEZgDFk@BUKa@CKGWWqAe@{BOu@EMIc@C_@G[YwAAGM[EQI]EQMm@ScAG[Mq@??OaAKo@Ik@Is@Io@MqAQ_BC]YeCs@}GEi@Gi@KeAEY??E[Iu@Gc@Ga@G]Ic@Kc@i@aCa@aBMk@Kc@[sAIa@Kc@S_A?C??I[C_@AKAa@?W@G@E?GHSBMFYN_@Rm@FUDUBOBQ@O@Q@O?MD]@g@?_@BG@I@KAIAICIEEEAE?EDADADO?I?E?C?E@C@CBEFCBCDSd@EHEFCDEDCBE@E@A@C?I?EAIEECs@q@Uw@WcAe@qBeD_OS{ASgAOiAEy@Ca@?U?O@I@G?IAKCICECCCAA?C?CBEIKUKc@COG[Ge@OkAEU??AIGg@M_AIc@K]GUMc@Uo@q@gBo@yA{B_G_BeEeCyGiBaFeAqC]_Ae@qAY_AMa@??IWSu@Mi@Ke@Mk@Oq@Ki@[iB[cBk@iDqAyHc@eCMs@??Ii@i@wCKi@Ke@COMk@Ou@YsAk@oCoAcGBUGk@Ce@Ao@Ao@AWA[AQC]CWIe@COOgAMo@OaAGWcA}FCMUgA??AESaASu@WaA[gAUu@]cAWy@W{@K]wAsEIYKWMa@Qo@K_@I[CIAMCKAQ@M?Q@Y@QA]KKEGEEEIEOM_@AOK_AKaAIw@Ek@??CSGgAEy@Cs@AaAAs@Ay@As@?q@@yA@gDBsD@wD@_C?oDByD?_@@iB@gB@i@@m@@[@Y?EHg@@U@A@E@E?EAEAEACAAA?A?IIECGCOBG?C?[@[BYB_@FSDy@J??C@OBSEE?KAI?AEACCEEACAC@A@KIGKEGUa@KYQ_@o@oAeAuBiAyBS[MW]o@Wc@[c@[c@i@q@EG??c@i@[_@[]s@w@GIIIYc@EIGKIMGMAAAKAGCEEEEAC@A@KIGEEGQOYk@]s@[w@Um@Sk@IYIUESIYEWGYEYEWE_@Ge@Gk@Ec@C]C_@C_@A]GcBC_@A[Ca@EWCWE]G[G]Qy@Qy@e@yBS_AMq@GSCOEQCMKe@S_AAC', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:39:00+01:00', + aimedEndTime: '2024-01-12T13:54:09+01:00', + expectedEndTime: '2024-01-12T13:54:09+01:00', + expectedStartTime: '2024-01-12T13:39:00+01:00', + realtime: false, + distance: 1074.54, + duration: 909, + fromPlace: { + name: 'Alfaset', + }, + toPlace: { + name: 'Destination', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: + 'egxlJeigaA@A?BRz@DZA@ILEDA@}@aEAECIACCGAE?IUiA?CAEMaA_Br@KBI?GBGHKNW^w@jA]f@ORSRQLMHMBAbD@fA@`ADtADv@s@?ODm@l@SPGJENGNEPI\\GGC?C?ORGZHLCJ?BV\\BDBH@J@NANAJEJEJUf@IN@@DLcApBmA`CIPKREREX@XBXSm@}@iCaAmCgAaE', + }, + }, + ], + systemNotices: [], + }, + { + aimedStartTime: '2024-01-12T12:39:07+01:00', + aimedEndTime: '2024-01-12T14:03:50+01:00', + expectedEndTime: '2024-01-12T14:03:50+01:00', + expectedStartTime: '2024-01-12T12:39:07+01:00', + duration: 5083, + distance: 30479.82, + legs: [ + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T12:39:07+01:00', + aimedEndTime: '2024-01-12T12:50:00+01:00', + expectedEndTime: '2024-01-12T12:50:00+01:00', + expectedStartTime: '2024-01-12T12:39:07+01:00', + realtime: false, + distance: 727.21, + duration: 653, + fromPlace: { + name: 'Origin', + }, + toPlace: { + name: 'IKEA Slependen', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: + 'o`nlJaac_AZ|@\\z@On@MAk@~@UZ@J@HEX@RLv@@DJVVd@LRNR\\^p@t@|@fA\\b@JTAHGVCJ@LBHDPP`@Tb@Xp@f@zAj@nBLd@Hj@@`ACz@@J?JDR@H?D?BAD?BEPAF?D?D@HBCNQDA@BBLDEHKd@a@BAD??O?M@KBKBGBIFGdAeA@?HIZ[??', + }, + }, + { + id: 'rO0ABXeSABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAAB0AAAAmABBSQjpOU1I6UXVheTo3OTQ0ABFSQjpOU1I6UXVheToxMTk2OQA7UkI6UlVUOkRhdGVkU2VydmljZUpvdXJuZXk6ODIyMzhhN2VmZmNhMzY2YzAwZmNkYmJjMWU2MWQ2N2E=', + mode: 'bus', + aimedStartTime: '2024-01-12T12:50:00+01:00', + aimedEndTime: '2024-01-12T13:13:00+01:00', + expectedEndTime: '2024-01-12T13:13:00+01:00', + expectedStartTime: '2024-01-12T12:50:00+01:00', + realtime: true, + distance: 17846.09, + duration: 1380, + fromPlace: { + name: 'IKEA Slependen', + }, + toPlace: { + name: 'Oslo bussterminal', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Oslo bussterminal', + }, + }, + line: { + publicCode: '250', + name: 'Sætre - Slemmestad - Oslo bussterminal', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + '{lmlJa|a_AFEJKHEFEH?FEFKBM@MASDSLe@@KFSHWFYH[F[Nw@JSHWFMDKDIDABABEL@F@FBDBHHDJFPBP?P@RARERCNGNGFIFI@K@KAw@Sg@o@c@k@m@q@o@m@aA_Aq@o@s@s@k@m@c@e@e@i@]c@]g@U_@S_@Q_@Ue@Uc@]y@[{@_@gA[gA_@qAa@{A[sAmAyEs@uCaAgDwAmEqC{G}DaIgGkKmBiDcAcBcBqCqFeJc@q@U_@mAwB{@wA}@cBO[mA_CcAqB[q@Ys@k@uAQa@GOYs@o@iBe@wAg@{AY_Ag@iBYeAYeAS_A]}A_@_BYyAWqAQeAQcAO}@{@_GaAeIgAiKmAwLaAgJ{@qGmA{H]kBc@_CaAgFYgBMeAIk@Io@Gs@Gy@Gy@Ey@Cw@Ey@A}@Cu@C_BCkDAiACgAAaAE_AC{@Ew@Gy@G{@MsACQUaCuB}SmAoLOyAcBuP}@eIk@mEmA}Iy@_Iu@wLKaBKmAK_AK_AM_AS}ASmASkAMm@ScAq@_DY}A[_BKs@My@Iq@QkAOqAKcAE_@KiAIiAIiAGcAOaCa@sHS_DIwAGsAImAG{@Gu@KgAIcAK}@I_AK{@WsBaAuGcA}GaBaLwBwN{@gGKmAAk@CeCAoACs@E}@MiASsASwA_@yC]}B_@aCEc@Im@SuAM_AKq@CQEWOmAUwBOeBc@qFO_CKkBa@gFo@gFiBsL}A_KoBwMg@iFMuA[}FCY??Iu@QaASe@AGo@oBq@iBg@qBe@yCw@wEm@}Dq@mE_@eCO_A[uBO{@QaAUcAk@}BSw@Uw@e@cB}@sCeB_G}@yCWy@]wAI[[gAK]SaAOs@McAMyA_AyMSiCKyA??OsBKwAG}@Ea@UsBWuBUqBm@qES{AoAsJS}ASmASmAUkA_@mBg@_CYsAYyAYkBQkAMkAKcAKeAWcCIcA??EYKiAYyCUaCUoCSoBUuBKeAQyAW}BYyBc@gDa@_D[wBeC}PSqAMaAIg@Iy@Gm@Ei@Ek@EaAEcAG_BGoAEm@Ec@I{@Ee@EYE_@Mu@Kk@Ki@Mm@Qk@I[Sq@aAsDSm@W{@W}@U{@Sy@Qy@Mq@Ii@Ee@Ge@C_@Ea@Ce@Ci@K_BGwAOkCA[AO?Q@U@U@E@E?G?G?GAEAEAO@K?MBk@JsBFsA???KB]Ba@Dq@Dq@D]D{@LaBr@yFLy@PcAReAVaAPa@Pe@P[n@gAh@}@`@s@Tc@Vm@DOHUZqALq@PgAJ}@D}@DeABeA?eA?iA?q@Ay@Cm@Ew@GqAM}AEo@Aa@Ac@@c@Bk@Fk@D]DYLg@LYJYLSRWd@c@~@gA`AgAPUNSPYP]\\u@Rk@Pe@Le@Pu@Nw@Hc@Jy@LgAHsAF{@H}BF_AFy@NqAPkAVqA^mAf@{AVm@Zm@fB_DpJcP\\k@Tc@d@aAh@}AV{@d@uBZqAXsAJm@Lq@Hm@LaANsAJkAP}BRwCr@iL^eGT_DNmCHsADgA@i@@i@@y@?s@HwADgA?yA?i@Ac@A[A[Ca@E]Ky@_@iCG]EQESKUu@aBGMM[EQGYKc@CSESAO@M?O?MCKCKEGEEAAC?E[EYCY?Y?q@Ac@D{A@o@????Be@BaA@_A?a@?u@Ae@AUAKASCSEa@Ge@G]Ic@GWI[Uq@a@gAcAmCCGGEECCAGOACGOKUQKY{@EIu@kBUq@Oc@KWCEKUMWO_@KWAGGMiA}CiAwCEMGOUo@KWWq@Sk@AA??EMIU]{@MYKOMOEIIKIGAK?GCGCGGIECM?GIEIGOWy@EKEKCGIKCCCCOQCCAA[a@QSQU_@c@QU[_@i@o@KMCEOQIKkAyAMQY]KMAAAAACKKCEcAmAUU?M?IAOGyGAg@AQHQDK`AuBx@gB@Eh@cAh@gA??`@y@JSHSHWFOHWJ_@Lg@Pw@Lu@H_@De@Dg@Ba@@s@?s@Eq@GuAEs@MsBGqAEm@E}@C}@AcBAgA?e@?]?Q?U@_@@k@HoANiAT}B@SHu@F]D[J_@H[j@uBBK@EDOFe@@EDYH[VaAJ]@CFODIFG`AwAZa@??@AHKLOFC?A@?DA@?FA@?B?H@??D@F@NBF?D?FADCFCHGl@m@\\[LOFGFEBEDCDE@APMFChC_ALCNEDDB@F?BADEBIBK@OAOJy@VwCBWL_BD[DEBI@I?IAKB]Fi@JsAD{@HiALoAJ_AFg@@G??LeBLyANkBBSBQHk@BEBG@I?I?G?IAGCIACCAECA?C?C@C@ADCDAHAH?H?H@HBF?F?NAL?RMRILEHABINATKhAIbAIbAO`BALE`@ABGt@KlAKvAAL', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:13:00+01:00', + aimedEndTime: '2024-01-12T13:13:39+01:00', + expectedEndTime: '2024-01-12T13:13:39+01:00', + expectedStartTime: '2024-01-12T13:13:00+01:00', + realtime: false, + distance: 30.41, + duration: 39, + fromPlace: { + name: 'Oslo bussterminal', + }, + toPlace: { + name: 'Oslo bussterminal', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: 'sptlJm|s`A@@@SAAGCGC?ACACACA@W@K', + }, + }, + { + id: 'rO0ABXeTABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAAAAAAAANABFSQjpOU1I6UXVheToxMTk3OQARUkI6TlNSOlF1YXk6MTA2NDMAO1JCOlJVVDpEYXRlZFNlcnZpY2VKb3VybmV5OjY3YzVkMTllZmMyOWI1MDdmMzkxYmYzY2Q3NDRiZDY1', + mode: 'bus', + aimedStartTime: '2024-01-12T13:25:00+01:00', + aimedEndTime: '2024-01-12T13:44:00+01:00', + expectedEndTime: '2024-01-12T13:44:00+01:00', + expectedStartTime: '2024-01-12T13:25:00+01:00', + realtime: false, + distance: 8619.48, + duration: 1140, + fromPlace: { + name: 'Oslo bussterminal', + }, + toPlace: { + name: 'Rødtvet T', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Hellerudhaugen', + }, + }, + line: { + publicCode: '390', + name: 'Kongskog/Hellerudhaugen - Oslo bussterminal', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + 'qqtlJu~s`A??Be@AKIMCWJwA@UBUBW@SBWBW@WBU@UBUBW@WBU@I@M@UBUBW@UBUDE^W@AZUNDH@D?@?D?FAB?BABBB@B?@?BABCBEBG@I?I?G?IAGCIACCAECA?C?C@C@ADGAE?MEc@UEAGAIBIFGBC@EDEDEHCLENCLCTYpDSfCId@ENELELGJEBCFKAI?KCGCIEKIYUWSmBaB_BuA]YYYSSY[QSGGOQEE??EEKMACEIEIKSAKCIEGECEAGKCGGKGQI]K[W_AyAiFGUQo@_@wAc@cBKUIUEOEOE_@I]Su@Wo@GSCMCOEW]sAQ_@CICMIY_AjAI@G?EACAECIGW_@cAiBqCeF}C}FOe@EIGIIOGIEGKOSO{BoCKWGKSYMKGEKISK{@gAGIGO??KSIOGKIOOUGK]]IOyAwC_@s@mAcCMc@GQEI_AgBGKCGIQEIAIAOAOAK?IAC?I?Wc@G{AKyBQIAWAOCYIIAiAIMCCAEC@]AKAGACACG?YCC?C@ABADAB?BIKIGKKc@[MK??m@c@[UIIQKYUeAq@eAm@YOYQYOIEKCEAICKAMAyEe@[EgAKm@G??[C_@EoAKg@Cm@CoAK_@Ce@E]CWCWEMAIAGCAEAIAIAIEIEIEEEEGAE@G@EBCBCFQEg@UiAo@gAk@}@q@SQa@a@UUm@y@_@q@g@aAEGo@yBs@{BIS??IS_@iAyAkEw@}BG[Ie@?OAQCOEUIQIOKGGCI?A?S[OYK[m@iBWu@??Ma@_@oAY}@q@sBm@cDSoAUsAWaBQiAYqBYsBK{BQ{AUcCCu@C}@Gs@MqAUeBYqCQgBSkBGk@??AIGm@QkAGa@a@qB{@{IyBeTUaCMyAY_DIiDCaBI}CIyCCyA?k@?_@@c@Fo@@C@E?E?I?ICGAEECAAC?C?EEGKK[I_@OiAKw@OiA??SeBs@{DqAgKgAiIk@qEKq@??Ge@MiAI{@GcAE}@CaAA{@AcA@cAB}@BmAHgAJkANsAJu@N_AVgA~@mDXgAR{@Lo@PmALkAHiAFeABoA@oA?yAAoAAo@C_@??A]KoBK}AMaBWyBi@aFIy@Iw@IcAG{AGuACcBByB?}B?cA??AcAEyCGoBI_BCi@AQIw@SeBQkAO{@SeA[sAu@{FeB}Mm@mEUmBGc@??c@gD_@sCQcAMs@WkAQu@Sy@y@sCcAwDcCaJi@kBUu@Sq@Wm@Wi@We@U]_@e@[]a@g@Y]W]SWUa@S_@Q]Qe@Wq@So@Qo@Og@Ou@Os@O_AMs@K{@KaAIu@IaAGkAEy@C}@GqA', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:44:00+01:00', + aimedEndTime: '2024-01-12T13:49:09+01:00', + expectedEndTime: '2024-01-12T13:49:09+01:00', + expectedStartTime: '2024-01-12T13:44:00+01:00', + realtime: false, + distance: 367.92, + duration: 309, + fromPlace: { + name: 'Rødtvet T', + }, + toPlace: { + name: 'Kalbakkstubben', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: 'cd|lJ}ghaA??DWGw@Cm@Co@MsDAs@?m@AcA?e@Ci@Cs@E}@GaAGo@Ei@K{@SgBAQ@IBIDKFEFAJ?D?N@J@d@F??', + }, + }, + { + id: 'rO0ABXeTABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAAAMAAAAIABFSQjpOU1I6UXVheToxMDY2OAARUkI6TlNSOlF1YXk6MTAyNTkAO1JCOlJVVDpEYXRlZFNlcnZpY2VKb3VybmV5OmQ5OTFhMTk1NGQzYjkyNjRhMTk5ZGY1OTA5YTBlMmE5', + mode: 'bus', + aimedStartTime: '2024-01-12T13:55:00+01:00', + aimedEndTime: '2024-01-12T13:59:00+01:00', + expectedEndTime: '2024-01-12T13:59:00+01:00', + expectedStartTime: '2024-01-12T13:55:00+01:00', + realtime: false, + distance: 2578.69, + duration: 240, + fromPlace: { + name: 'Kalbakkstubben', + }, + toPlace: { + name: 'Postnord', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Helsfyr', + }, + }, + line: { + publicCode: '68', + name: 'Helsfyr T - Grorud T via Alfaset', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + 'sc|lJijiaA@?HBPNHBHBDBFBJBDBFBXDHFf@b@JLHHNPTXRZXd@`@r@^l@`@r@T`@PXPVTXNRVTZTVPTLZLXJVFVDVDz@JNBx@H^DRHH@l@B??J@X@RBH?LBHBT@`@TVN\\VVRXVTTLNNPX`@\\f@T`@Zn@Rd@lCnGR`@P^PZR\\PVJLNPNN??B@LLFDNF\\JXRFBFBFDDHDFLR?FBD@DBDD@DABC@C`@[TIH@ZErAL|@Jp@FlAHh@BH@RJHFHHJLDJBFFFD@FADCDEDKBKHIHGHCNMF?PARANANAPCd@Ib@Gh@K^Il@@PCjA[TG??`A[JALCH?RBBDBBBVBT@HBPDb@?TBbABlBFvBBf@Fr@Dh@Ht@Jr@Np@Lj@Nd@N`@Rb@Td@PZh@x@NP~@nAzAjBHLVZRVNVI\\Sd@Q^GN??KTcApBmA`CIPKREREX@XBXDPdAxCJ\\l@bB', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:59:00+01:00', + aimedEndTime: '2024-01-12T14:03:50+01:00', + expectedEndTime: '2024-01-12T14:03:50+01:00', + expectedStartTime: '2024-01-12T13:59:00+01:00', + realtime: false, + distance: 310.02, + duration: 290, + fromPlace: { + name: 'Postnord', + }, + toPlace: { + name: 'Destination', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: 'q|xlJmweaACFA?m@aBBEDKK]eAyCEQSm@}@iCaAmCgAaE', + }, + }, + ], + systemNotices: [], + }, + { + aimedStartTime: '2024-01-12T12:54:07+01:00', + aimedEndTime: '2024-01-12T14:03:50+01:00', + expectedEndTime: '2024-01-12T14:03:50+01:00', + expectedStartTime: '2024-01-12T12:54:07+01:00', + duration: 4183, + distance: 27503.719999999998, + legs: [ + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T12:54:07+01:00', + aimedEndTime: '2024-01-12T13:05:00+01:00', + expectedEndTime: '2024-01-12T13:05:00+01:00', + expectedStartTime: '2024-01-12T12:54:07+01:00', + realtime: false, + distance: 727.21, + duration: 653, + fromPlace: { + name: 'Origin', + }, + toPlace: { + name: 'IKEA Slependen', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: + 'o`nlJaac_AZ|@\\z@On@MAk@~@UZ@J@HEX@RLv@@DJVVd@LRNR\\^p@t@|@fA\\b@JTAHGVCJ@LBHDPP`@Tb@Xp@f@zAj@nBLd@Hj@@`ACz@@J?JDR@H?D?BAD?BEPAF?D?D@HBCNQDA@BBLDEHKd@a@BAD??O?M@KBKBGBIFGdAeA@?HIZ[??', + }, + }, + { + id: 'rO0ABXeRABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAADUAAAA7ABBSQjpOU1I6UXVheTo3OTQ0ABBSQjpOU1I6UXVheTo3MzczADtSQjpSVVQ6RGF0ZWRTZXJ2aWNlSm91cm5leTplNjBjM2M1ODE2ZjUxNGExZjk2NTdiZjEwYmQ3ZmJhNw==', + mode: 'bus', + aimedStartTime: '2024-01-12T13:05:00+01:00', + aimedEndTime: '2024-01-12T13:21:00+01:00', + expectedEndTime: '2024-01-12T13:21:00+01:00', + expectedStartTime: '2024-01-12T13:05:00+01:00', + realtime: true, + distance: 15329.9, + duration: 960, + fromPlace: { + name: 'IKEA Slependen', + }, + toPlace: { + name: 'Nationaltheatret', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Oslo bussterminal', + }, + }, + line: { + publicCode: '250', + name: 'Sætre - Slemmestad - Oslo bussterminal', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + '{lmlJa|a_AFEJKHEFEH?FEFKBM@MASDSLe@@KFSHWFYH[F[Nw@JSHWFMDKDIDABABEL@F@FBDBHHDJFPBP?P@RARERCNGNGFIFI@K@KAw@Sg@o@c@k@m@q@o@m@aA_Aq@o@s@s@k@m@c@e@e@i@]c@]g@U_@S_@Q_@Ue@Uc@]y@[{@_@gA[gA_@qAa@{A[sAmAyEs@uCaAgDwAmEqC{G}DaIgGkKmBiDcAcBcBqCqFeJc@q@U_@mAwB{@wA}@cBO[mA_CcAqB[q@Ys@k@uAQa@GOYs@o@iBe@wAg@{AY_Ag@iBYeAYeAS_A]}A_@_BYyAWqAQeAQcAO}@{@_GaAeIgAiKmAwLaAgJ{@qGmA{H]kBc@_CaAgFYgBMeAIk@Io@Gs@Gy@Gy@Ey@Cw@Ey@A}@Cu@C_BCkDAiACgAAaAE_AC{@Ew@Gy@G{@MsACQUaCuB}SmAoLOyAcBuP}@eIk@mEmA}Iy@_Iu@wLKaBKmAK_AK_AM_AS}ASmASkAMm@ScAq@_DY}A[_BKs@My@Iq@QkAOqAKcAE_@KiAIiAIiAGcAOaCa@sHS_DIwAGsAImAG{@Gu@KgAIcAK}@I_AK{@WsBaAuGcA}GaBaLwBwN{@gGKmAAk@CeCAoACs@E}@MiASsASwA_@yC]}B_@aCEc@Im@SuAM_AKq@CQEWOmAUwBOeBc@qFO_CKkBa@gFo@gFiBsL}A_KoBwMg@iFMuA[}FCY??Iu@QaASe@AGo@oBq@iBg@qBe@yCw@wEm@}Dq@mE_@eCO_A[uBO{@QaAUcAk@}BSw@Uw@e@cB}@sCeB_G}@yCWy@]wAI[[gAK]SaAOs@McAMyA_AyMSiCKyA??OsBKwAG}@Ea@UsBWuBUqBm@qES{AoAsJS}ASmASmAUkA_@mBg@_CYsAYyAYkBQkAMkAKcAKeAWcCIcA??EYKiAYyCUaCUoCSoBUuBKeAQyAW}BYyBc@gDa@_D[wBeC}PSqAMaAIg@Iy@Gm@Ei@Ek@EaAEcAG_BGoAEm@Ec@I{@Ee@EYE_@Mu@Kk@Ki@Mm@Qk@I[Sq@aAsDSm@W{@W}@U{@Sy@Qy@Mq@Ii@Ee@Ge@C_@Ea@Ce@Ci@K_BGwAOkCA[AO?Q@U@U@E@E?G?G?GAEAEAO@K?MBk@JsBFsA???KB]Ba@Dq@Dq@D]D{@LaBr@yFLy@PcAReAVaAPa@Pe@P[n@gAh@}@`@s@Tc@Vm@DOHUZqALq@PgAJ}@D}@DeABeA?eA?iA?q@Ay@Cm@Ew@GqAM}AEo@Aa@Ac@@c@Bk@Fk@D]DYLg@LYJYLSRWd@c@~@gA`AgAPUNSPYP]\\u@Rk@Pe@Le@Pu@Nw@Hc@Jy@LgAHsAF{@H}BF_AFy@NqAPkAVqA^mAf@{AVm@Zm@fB_DpJcP\\k@Tc@d@aAh@}AV{@d@uBZqAXsAJm@Lq@Hm@LaANsAJkAP}BRwCr@iL^eGT_DNmCHsADgA@i@@i@@y@?s@HwADgA?yA?i@Ac@A[A[Ca@E]Ky@_@iCG]EQESKUu@aBGMM[EQGYKc@CSESAO@M?O?MCKCKEGEEAAC?E[EYCY?Y?q@Ac@D{A@o@????Be@BaA@_A?a@?u@Ae@AUAKASCSEa@Ge@G]Ic@GWI[Uq@a@gAcAmCCGGEECCAGOACGOKUQKY{@EIu@kBUq@Oc@KWCEKUMWO_@KWAGGMiA}CiAwCEMGOUo@KWWq@Sk@AA', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:21:00+01:00', + aimedEndTime: '2024-01-12T13:24:57+01:00', + expectedEndTime: '2024-01-12T13:24:57+01:00', + expectedStartTime: '2024-01-12T13:21:00+01:00', + realtime: false, + distance: 234.7, + duration: 237, + fromPlace: { + name: 'Nationaltheatret', + }, + toPlace: { + name: 'Nationaltheatret', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: + 'u~tlJ{}n`A??GYEKIS[w@GKMSOUGKAEAE?G?G@EAECGCGACAAACCGAC?AAECECGAEFOTo@ISEKAFKl@IJO^GRCAIRGRc@p@??', + }, + }, + { + id: 'rO0ABXeSABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAABAAAAAWABBSQjpOU1I6UXVheTo3MzMzABFSQjpOU1I6UXVheToxMTEzNAA7UkI6UlVUOkRhdGVkU2VydmljZUpvdXJuZXk6YzRjM2QwMjI1YWI5OGFhYjQ4NWNmZjAwZDExM2E0NzA=', + mode: 'metro', + aimedStartTime: '2024-01-12T13:27:00+01:00', + aimedEndTime: '2024-01-12T13:37:00+01:00', + expectedEndTime: '2024-01-12T13:37:00+01:00', + expectedStartTime: '2024-01-12T13:27:00+01:00', + realtime: true, + distance: 4410.74, + duration: 600, + fromPlace: { + name: 'Nationaltheatret', + }, + toPlace: { + name: 'Helsfyr', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Mortensrud', + }, + }, + line: { + publicCode: '3', + name: 'Kolsås - Mortensrud', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + 'seulJ{co`AHMTm@FKBa@@KJu@NuAL{@Jw@Lu@Ls@Hk@Lo@?AVyAf@oCLs@Lw@Ho@Js@Fs@Hu@HwADaADkAD}@?WP{EDo@Fm@LiELeD??By@NmEBy@Du@Bk@JgAJcAL_APeAX{A\\aBd@iCL_AJ{@H{@Bi@@g@@e@FgCBcA?OHuD??@[JyE@uA@oAAiAGaAGy@Iy@M{@{@sEOeAIo@IiAEkAAeA?qAH}H??@i@D}DDqC@y@@e@B{@Be@H_ArAeMR}BFuA@yAEwAIsAO{ASqAWgAa@mAe@_Ag@m@mByB]k@[q@Yy@YkASkAQsAYkCKy@Ko@Ms@Ka@Me@Ma@O_@O_@Sa@Yi@uAeCa@u@??w@yAQc@Oa@K[K_@Ma@Mg@g@uBOk@Oi@Mc@Oa@O[Q[QYEc@Cs@Am@Am@@o@@g@@g@Bi@Di@De@Fc@Fc@Hg@Nm@Ja@La@N_@N]R_@RYPYVUTSRMPIPIl@WRITKNKNMLKNQPSRYLULUHSJUHUJYHUNc@Lg@Pk@Lg@Lg@P{@Ha@n@{CH]R}@??`@mBH_@Lq@DYDYD]Da@B]Dg@@_@Bi@@g@?c@?c@Ae@A_@Ck@Eo@?AWwCEq@Eq@Cu@Cw@Cc@Ao@?m@?k@?q@?y@@k@B{@j@oOD}@FgAHw@LuANgAn@uFHw@', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:37:00+01:00', + aimedEndTime: '2024-01-12T13:37:32+01:00', + expectedEndTime: '2024-01-12T13:37:32+01:00', + expectedStartTime: '2024-01-12T13:37:00+01:00', + realtime: false, + distance: 33.93, + duration: 32, + fromPlace: { + name: 'Helsfyr', + }, + toPlace: { + name: 'Helsfyr T', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: '_utlJws|`ABBAb@i@G??', + }, + }, + { + id: 'rO0ABXeTABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAAAIAAAAFABFSQjpOU1I6UXVheToxMTE0MgARUkI6TlNSOlF1YXk6MTA0MDIAO1JCOlJVVDpEYXRlZFNlcnZpY2VKb3VybmV5OmIzNDRjZDFmM2FjZWU2MTE5ZGE2N2M3MDNjMTViYmQ1', + mode: 'bus', + aimedStartTime: '2024-01-12T13:40:00+01:00', + aimedEndTime: '2024-01-12T13:44:00+01:00', + expectedEndTime: '2024-01-12T13:44:00+01:00', + expectedStartTime: '2024-01-12T13:40:00+01:00', + realtime: false, + distance: 4040.73, + duration: 240, + fromPlace: { + name: 'Helsfyr T', + }, + toPlace: { + name: 'Trosterud', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Blystadlia', + }, + }, + line: { + publicCode: '300', + name: 'Blystadlia - Ahus - Oslo bussterminal', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + 'wvtlJsr|`AAIGg@M_AIc@K]GUMc@Uo@q@gBo@yA{B_G_BeEeCyGiBaFeAqC]_Ae@qAY_AMa@??IWSu@Mi@Ke@Mk@Oq@Ki@[iB[cBk@iDqAyHc@eCMs@??Ii@i@wCKi@Ke@COMk@Ou@YsAk@oCoAcGo@{CWiAYiAcAmDqBeHgBiGqBcHc@cBc@eBUgASiAQoAIi@Gi@ScCKaBKmBMuBCw@CiB?{BAiBAuA?yA?sA@yB@gC@{D?{A?{A?qA?sAAuAAqACuACqAEwAEkACiAGmAGqAI{AKkBKsAKoAKqAMmAMqAGm@K{@MgAM{@UeBWaBSsAc@oCa@kCSwAYsBQqAQ}AQ{AMqAMkAQuBm@yGOcB]cDMoAYwBWmBc@mC_@qB_@mBi@sDSiAe@}BOu@Oq@YeAOk@Qg@Wu@Oe@Q[M[Wk@We@EI', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:44:00+01:00', + aimedEndTime: '2024-01-12T13:47:21+01:00', + expectedEndTime: '2024-01-12T13:47:21+01:00', + expectedStartTime: '2024-01-12T13:44:00+01:00', + realtime: false, + distance: 178.32, + duration: 201, + fromPlace: { + name: 'Trosterud', + }, + toPlace: { + name: 'Trosterudkrysset', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: 'sywlJw}haA?A?ECOAM@K?G@E@I@EBCBEFCPEBABCBC@E@G@K@YBSBSDKJQ`@y@HMVv@DPBJ@LBXU[??', + }, + }, + { + id: 'rO0ABXeTABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAAAIAAAAFABFSQjpOU1I6UXVheToxMDM3NQARUkI6TlNSOlF1YXk6MTAzOTYAO1JCOlJVVDpEYXRlZFNlcnZpY2VKb3VybmV5OjliZTdhODEwN2RjMGEyODQ5NGVkNTRhNzQ3ZThjYzZi', + mode: 'bus', + aimedStartTime: '2024-01-12T13:51:00+01:00', + aimedEndTime: '2024-01-12T13:53:00+01:00', + expectedEndTime: '2024-01-12T13:53:00+01:00', + expectedStartTime: '2024-01-12T13:51:00+01:00', + realtime: false, + distance: 1203.14, + duration: 120, + fromPlace: { + name: 'Trosterudkrysset', + }, + toPlace: { + name: 'Alfasetveien', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Majorstuen', + }, + }, + line: { + publicCode: '25', + name: 'Majorstuen-Haugerud', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + 'iuwlJ_diaAEIOg@Us@EKIWOi@IQKIKIIEMCCGCECACAE?C@C@ABCDADADAFORQTKNKNMVMZ??MXO\\qAbDGLMXGNKLKPE@CBCDCDAHAFAF?HGRGVGTMZqBbFm@vASh@A???Sf@OZMVKTMVQVKJKJMHQHE?E@GBCFEHAJAD?DGPGHGHKH]TIFSH[LQDWDc@HwCh@uB^qDz@i@JM@MAQ?GKGCGAGBGFEJCNKNIHIFMDODo@RcAZE@', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:53:00+01:00', + aimedEndTime: '2024-01-12T13:55:31+01:00', + expectedEndTime: '2024-01-12T13:55:31+01:00', + expectedStartTime: '2024-01-12T13:53:00+01:00', + realtime: false, + distance: 162.35, + duration: 151, + fromPlace: { + name: 'Alfasetveien', + }, + toPlace: { + name: 'Alfasetveien', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: 'wnylJqygaA??^QTIHAPGTG@?f@S@P?B@FAJ?J?LAFADEHCHUFk@RAEJO??', + }, + }, + { + id: 'rO0ABXeTABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAAAYAAAAIABFSQjpOU1I6UXVheToxMDM5NAARUkI6TlNSOlF1YXk6MTAyNTkAO1JCOlJVVDpEYXRlZFNlcnZpY2VKb3VybmV5OmQ5OTFhMTk1NGQzYjkyNjRhMTk5ZGY1OTA5YTBlMmE5', + mode: 'bus', + aimedStartTime: '2024-01-12T13:58:00+01:00', + aimedEndTime: '2024-01-12T13:59:00+01:00', + expectedEndTime: '2024-01-12T13:59:00+01:00', + expectedStartTime: '2024-01-12T13:58:00+01:00', + realtime: false, + distance: 872.68, + duration: 60, + fromPlace: { + name: 'Alfasetveien', + }, + toPlace: { + name: 'Postnord', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Helsfyr', + }, + }, + line: { + publicCode: '68', + name: 'Helsfyr T - Grorud T via Alfaset', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + 'elylJaygaA`A[JALCH?RBBDBBBVBT@HBPDb@?TBbABlBFvBBf@Fr@Dh@Ht@Jr@Np@Lj@Nd@N`@Rb@Td@PZh@x@NP~@nAzAjBHLVZRVNVI\\Sd@Q^GN??KTcApBmA`CIPKREREX@XBXDPdAxCJ\\l@bB', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:59:00+01:00', + aimedEndTime: '2024-01-12T14:03:50+01:00', + expectedEndTime: '2024-01-12T14:03:50+01:00', + expectedStartTime: '2024-01-12T13:59:00+01:00', + realtime: false, + distance: 310.02, + duration: 290, + fromPlace: { + name: 'Postnord', + }, + toPlace: { + name: 'Destination', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: 'q|xlJmweaACFA?m@aBBEDKK]eAyCEQSm@}@iCaAmCgAaE', + }, + }, + ], + systemNotices: [], + }, + { + aimedStartTime: '2024-01-12T12:54:07+01:00', + aimedEndTime: '2024-01-12T14:07:28+01:00', + expectedEndTime: '2024-01-12T14:07:28+01:00', + expectedStartTime: '2024-01-12T12:54:07+01:00', + duration: 4401, + distance: 26472.179999999997, + legs: [ + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T12:54:07+01:00', + aimedEndTime: '2024-01-12T13:05:00+01:00', + expectedEndTime: '2024-01-12T13:05:00+01:00', + expectedStartTime: '2024-01-12T12:54:07+01:00', + realtime: false, + distance: 727.21, + duration: 653, + fromPlace: { + name: 'Origin', + }, + toPlace: { + name: 'IKEA Slependen', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: + 'o`nlJaac_AZ|@\\z@On@MAk@~@UZ@J@HEX@RLv@@DJVVd@LRNR\\^p@t@|@fA\\b@JTAHGVCJ@LBHDPP`@Tb@Xp@f@zAj@nBLd@Hj@@`ACz@@J?JDR@H?D?BAD?BEPAF?D?D@HBCNQDA@BBLDEHKd@a@BAD??O?M@KBKBGBIFGdAeA@?HIZ[??', + }, + }, + { + id: 'rO0ABXeRABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAADUAAAA7ABBSQjpOU1I6UXVheTo3OTQ0ABBSQjpOU1I6UXVheTo3MzczADtSQjpSVVQ6RGF0ZWRTZXJ2aWNlSm91cm5leTplNjBjM2M1ODE2ZjUxNGExZjk2NTdiZjEwYmQ3ZmJhNw==', + mode: 'bus', + aimedStartTime: '2024-01-12T13:05:00+01:00', + aimedEndTime: '2024-01-12T13:21:00+01:00', + expectedEndTime: '2024-01-12T13:21:00+01:00', + expectedStartTime: '2024-01-12T13:05:00+01:00', + realtime: true, + distance: 15329.9, + duration: 960, + fromPlace: { + name: 'IKEA Slependen', + }, + toPlace: { + name: 'Nationaltheatret', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Oslo bussterminal', + }, + }, + line: { + publicCode: '250', + name: 'Sætre - Slemmestad - Oslo bussterminal', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + '{lmlJa|a_AFEJKHEFEH?FEFKBM@MASDSLe@@KFSHWFYH[F[Nw@JSHWFMDKDIDABABEL@F@FBDBHHDJFPBP?P@RARERCNGNGFIFI@K@KAw@Sg@o@c@k@m@q@o@m@aA_Aq@o@s@s@k@m@c@e@e@i@]c@]g@U_@S_@Q_@Ue@Uc@]y@[{@_@gA[gA_@qAa@{A[sAmAyEs@uCaAgDwAmEqC{G}DaIgGkKmBiDcAcBcBqCqFeJc@q@U_@mAwB{@wA}@cBO[mA_CcAqB[q@Ys@k@uAQa@GOYs@o@iBe@wAg@{AY_Ag@iBYeAYeAS_A]}A_@_BYyAWqAQeAQcAO}@{@_GaAeIgAiKmAwLaAgJ{@qGmA{H]kBc@_CaAgFYgBMeAIk@Io@Gs@Gy@Gy@Ey@Cw@Ey@A}@Cu@C_BCkDAiACgAAaAE_AC{@Ew@Gy@G{@MsACQUaCuB}SmAoLOyAcBuP}@eIk@mEmA}Iy@_Iu@wLKaBKmAK_AK_AM_AS}ASmASkAMm@ScAq@_DY}A[_BKs@My@Iq@QkAOqAKcAE_@KiAIiAIiAGcAOaCa@sHS_DIwAGsAImAG{@Gu@KgAIcAK}@I_AK{@WsBaAuGcA}GaBaLwBwN{@gGKmAAk@CeCAoACs@E}@MiASsASwA_@yC]}B_@aCEc@Im@SuAM_AKq@CQEWOmAUwBOeBc@qFO_CKkBa@gFo@gFiBsL}A_KoBwMg@iFMuA[}FCY??Iu@QaASe@AGo@oBq@iBg@qBe@yCw@wEm@}Dq@mE_@eCO_A[uBO{@QaAUcAk@}BSw@Uw@e@cB}@sCeB_G}@yCWy@]wAI[[gAK]SaAOs@McAMyA_AyMSiCKyA??OsBKwAG}@Ea@UsBWuBUqBm@qES{AoAsJS}ASmASmAUkA_@mBg@_CYsAYyAYkBQkAMkAKcAKeAWcCIcA??EYKiAYyCUaCUoCSoBUuBKeAQyAW}BYyBc@gDa@_D[wBeC}PSqAMaAIg@Iy@Gm@Ei@Ek@EaAEcAG_BGoAEm@Ec@I{@Ee@EYE_@Mu@Kk@Ki@Mm@Qk@I[Sq@aAsDSm@W{@W}@U{@Sy@Qy@Mq@Ii@Ee@Ge@C_@Ea@Ce@Ci@K_BGwAOkCA[AO?Q@U@U@E@E?G?G?GAEAEAO@K?MBk@JsBFsA???KB]Ba@Dq@Dq@D]D{@LaBr@yFLy@PcAReAVaAPa@Pe@P[n@gAh@}@`@s@Tc@Vm@DOHUZqALq@PgAJ}@D}@DeABeA?eA?iA?q@Ay@Cm@Ew@GqAM}AEo@Aa@Ac@@c@Bk@Fk@D]DYLg@LYJYLSRWd@c@~@gA`AgAPUNSPYP]\\u@Rk@Pe@Le@Pu@Nw@Hc@Jy@LgAHsAF{@H}BF_AFy@NqAPkAVqA^mAf@{AVm@Zm@fB_DpJcP\\k@Tc@d@aAh@}AV{@d@uBZqAXsAJm@Lq@Hm@LaANsAJkAP}BRwCr@iL^eGT_DNmCHsADgA@i@@i@@y@?s@HwADgA?yA?i@Ac@A[A[Ca@E]Ky@_@iCG]EQESKUu@aBGMM[EQGYKc@CSESAO@M?O?MCKCKEGEEAAC?E[EYCY?Y?q@Ac@D{A@o@????Be@BaA@_A?a@?u@Ae@AUAKASCSEa@Ge@G]Ic@GWI[Uq@a@gAcAmCCGGEECCAGOACGOKUQKY{@EIu@kBUq@Oc@KWCEKUMWO_@KWAGGMiA}CiAwCEMGOUo@KWWq@Sk@AA', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:21:00+01:00', + aimedEndTime: '2024-01-12T13:24:57+01:00', + expectedEndTime: '2024-01-12T13:24:57+01:00', + expectedStartTime: '2024-01-12T13:21:00+01:00', + realtime: false, + distance: 234.7, + duration: 237, + fromPlace: { + name: 'Nationaltheatret', + }, + toPlace: { + name: 'Nationaltheatret', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: + 'u~tlJ{}n`A??GYEKIS[w@GKMSOUGKAEAE?G?G@EAECGCGACAAACCGAC?AAECECGAEFOTo@ISEKAFKl@IJO^GRCAIRGRc@p@??', + }, + }, + { + id: 'rO0ABXeSABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAABAAAAAWABBSQjpOU1I6UXVheTo3MzMzABFSQjpOU1I6UXVheToxMTEzNAA7UkI6UlVUOkRhdGVkU2VydmljZUpvdXJuZXk6YzRjM2QwMjI1YWI5OGFhYjQ4NWNmZjAwZDExM2E0NzA=', + mode: 'metro', + aimedStartTime: '2024-01-12T13:27:00+01:00', + aimedEndTime: '2024-01-12T13:37:00+01:00', + expectedEndTime: '2024-01-12T13:37:00+01:00', + expectedStartTime: '2024-01-12T13:27:00+01:00', + realtime: true, + distance: 4410.74, + duration: 600, + fromPlace: { + name: 'Nationaltheatret', + }, + toPlace: { + name: 'Helsfyr', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Mortensrud', + }, + }, + line: { + publicCode: '3', + name: 'Kolsås - Mortensrud', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + 'seulJ{co`AHMTm@FKBa@@KJu@NuAL{@Jw@Lu@Ls@Hk@Lo@?AVyAf@oCLs@Lw@Ho@Js@Fs@Hu@HwADaADkAD}@?WP{EDo@Fm@LiELeD??By@NmEBy@Du@Bk@JgAJcAL_APeAX{A\\aBd@iCL_AJ{@H{@Bi@@g@@e@FgCBcA?OHuD??@[JyE@uA@oAAiAGaAGy@Iy@M{@{@sEOeAIo@IiAEkAAeA?qAH}H??@i@D}DDqC@y@@e@B{@Be@H_ArAeMR}BFuA@yAEwAIsAO{ASqAWgAa@mAe@_Ag@m@mByB]k@[q@Yy@YkASkAQsAYkCKy@Ko@Ms@Ka@Me@Ma@O_@O_@Sa@Yi@uAeCa@u@??w@yAQc@Oa@K[K_@Ma@Mg@g@uBOk@Oi@Mc@Oa@O[Q[QYEc@Cs@Am@Am@@o@@g@@g@Bi@Di@De@Fc@Fc@Hg@Nm@Ja@La@N_@N]R_@RYPYVUTSRMPIPIl@WRITKNKNMLKNQPSRYLULUHSJUHUJYHUNc@Lg@Pk@Lg@Lg@P{@Ha@n@{CH]R}@??`@mBH_@Lq@DYDYD]Da@B]Dg@@_@Bi@@g@?c@?c@Ae@A_@Ck@Eo@?AWwCEq@Eq@Cu@Cw@Cc@Ao@?m@?k@?q@?y@@k@B{@j@oOD}@FgAHw@LuANgAn@uFHw@', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:37:00+01:00', + aimedEndTime: '2024-01-12T13:37:32+01:00', + expectedEndTime: '2024-01-12T13:37:32+01:00', + expectedStartTime: '2024-01-12T13:37:00+01:00', + realtime: false, + distance: 33.93, + duration: 32, + fromPlace: { + name: 'Helsfyr', + }, + toPlace: { + name: 'Helsfyr T', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: '_utlJws|`ABBAb@i@G??', + }, + }, + { + id: 'rO0ABXeTABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAAAIAAAAFABFSQjpOU1I6UXVheToxMTE0MgARUkI6TlNSOlF1YXk6MTA0MDIAO1JCOlJVVDpEYXRlZFNlcnZpY2VKb3VybmV5OmIzNDRjZDFmM2FjZWU2MTE5ZGE2N2M3MDNjMTViYmQ1', + mode: 'bus', + aimedStartTime: '2024-01-12T13:40:00+01:00', + aimedEndTime: '2024-01-12T13:44:00+01:00', + expectedEndTime: '2024-01-12T13:44:00+01:00', + expectedStartTime: '2024-01-12T13:40:00+01:00', + realtime: false, + distance: 4040.73, + duration: 240, + fromPlace: { + name: 'Helsfyr T', + }, + toPlace: { + name: 'Trosterud', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Blystadlia', + }, + }, + line: { + publicCode: '300', + name: 'Blystadlia - Ahus - Oslo bussterminal', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + 'wvtlJsr|`AAIGg@M_AIc@K]GUMc@Uo@q@gBo@yA{B_G_BeEeCyGiBaFeAqC]_Ae@qAY_AMa@??IWSu@Mi@Ke@Mk@Oq@Ki@[iB[cBk@iDqAyHc@eCMs@??Ii@i@wCKi@Ke@COMk@Ou@YsAk@oCoAcGo@{CWiAYiAcAmDqBeHgBiGqBcHc@cBc@eBUgASiAQoAIi@Gi@ScCKaBKmBMuBCw@CiB?{BAiBAuA?yA?sA@yB@gC@{D?{A?{A?qA?sAAuAAqACuACqAEwAEkACiAGmAGqAI{AKkBKsAKoAKqAMmAMqAGm@K{@MgAM{@UeBWaBSsAc@oCa@kCSwAYsBQqAQ}AQ{AMqAMkAQuBm@yGOcB]cDMoAYwBWmBc@mC_@qB_@mBi@sDSiAe@}BOu@Oq@YeAOk@Qg@Wu@Oe@Q[M[Wk@We@EI', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:44:00+01:00', + aimedEndTime: '2024-01-12T14:07:28+01:00', + expectedEndTime: '2024-01-12T14:07:28+01:00', + expectedStartTime: '2024-01-12T13:44:00+01:00', + realtime: false, + distance: 1694.97, + duration: 1408, + fromPlace: { + name: 'Trosterud', + }, + toPlace: { + name: 'Destination', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: + 'sywlJw}haA?A?ECOAM@K?G@E@I@EBCBEFCPEBABCBC@E@G@K@YBSBSDKJQIMCCCCCAE?G@k@JG?IAKESMGCK?I?GDGFGLYt@_@|@Ul@c@bAOZCFAFAFAFAPAVCZAF?HCNGAI@IFIHILKTUh@iA`Cc@dAw@rBQd@M^Od@Mh@Mh@Mb@GPGNINGDI@i@b@YPC@OHQFUHUHu@TBz@BlALADAD?DBFBJHHPCHIx@ABK`AIh@CNIb@Ir@Y~CO~BAbD@fA@`ADtADv@s@?ODm@l@SPGJENGNEPI\\GGC?C?ORGZHLCJ?BV\\BDBH@J@NANAJEJEJUf@IN@@DLcApBmA`CIPKREREX@XBXSm@}@iCaAmCgAaE', + }, + }, + ], + systemNotices: [], + }, + { + aimedStartTime: '2024-01-12T12:42:00+01:00', + aimedEndTime: '2024-01-12T14:09:19+01:00', + expectedEndTime: '2024-01-12T14:09:19+01:00', + expectedStartTime: '2024-01-12T12:42:00+01:00', + duration: 5239, + distance: 28576.019999999997, + legs: [ + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T12:42:00+01:00', + aimedEndTime: '2024-01-12T12:59:00+01:00', + expectedEndTime: '2024-01-12T12:59:00+01:00', + expectedStartTime: '2024-01-12T12:42:00+01:00', + realtime: false, + distance: 1019.02, + duration: 1020, + fromPlace: { + name: 'Origin', + }, + toPlace: { + name: 'Slependen stasjon', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: + 'o`nlJaac_AZ|@\\z@On@MAk@~@UZ@J@HEX@REDCDMLAFERQSy@a@_@IM@sAHkDJcADa@B]Hg@Va@Zc@b@u@n@_ChCcA|@_@h@w@rAA@CICIu@jAq@bAQX_@d@QVMFWFG?GAGCIGCQAI?ICO[iDCQCSEe@AEQHKD_@@??', + }, + }, + { + id: 'rO0ABXeFABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAAAUAAAAQABBSQjpOU1I6UXVheToxMDYxAA9SQjpOU1I6UXVheTo1MDQAMFJCOk5TQjpEYXRlZFNlcnZpY2VKb3VybmV5OjIxMzRfQVNSLUxMU18yNC0wMS0xMg==', + mode: 'rail', + aimedStartTime: '2024-01-12T12:59:00+01:00', + aimedEndTime: '2024-01-12T13:36:00+01:00', + expectedEndTime: '2024-01-12T13:35:30+01:00', + expectedStartTime: '2024-01-12T12:59:00+01:00', + realtime: true, + distance: 25116.17, + duration: 2190, + fromPlace: { + name: 'Slependen stasjon', + }, + toPlace: { + name: 'Nyland stasjon', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Lillestrøm', + }, + }, + line: { + publicCode: 'L1', + name: 'Spikkestad-Oslo S-Lillestrøm', + }, + authority: { + name: 'Vy', + }, + pointsOnLink: { + points: + 'glolJ}ib_AC@aA^IBUJUHWFYHUFWBUBY?Y?YA[CYGg@K[IWIm@M]K[M[OYQYSYW[_@Y]U_@Ua@[m@Um@Yu@Oe@Me@Mk@Me@Ki@Ms@Ks@Gk@Im@Gw@Em@G_AEu@Co@QcEC]??Q}DEiACw@C}@AmAA_AAqAAcH?mHAoB?uCAiA?m@Am@As@C}@Cw@EcAEgAIkAG}@Gs@Gw@Iu@Gq@McAKu@Ku@Kk@Kk@Ik@Mm@Os@Mo@Ki@??[yAYqA[sAc@mBaAgE????kBeIi@_C]yAYmAc@kBWgAYoAaBkH{@oDmAmFUcAu@_D_@}A??u@gDi@yBEWOq@YkAUaA{@iDc@eBU{@WcAOo@Mm@Mq@Kk@Ig@Ii@Im@Io@I{@I_AEs@Es@Ew@CeACgAAy@?s@@w@@y@@o@By@B}@F}@F}@F{@Hy@J{@Ju@RqAz@iFRkAJm@Js@De@Fc@De@Dc@Dm@Fo@Bo@Ds@@k@Bk@@m@@k@?i@?m@?i@Ak@Au@Cq@Cq@Cu@Es@Gw@AI????Iy@Gi@Gg@Gi@Ig@Ig@Ie@Kg@G]Ka@K]W_AQm@Qi@c@qAQk@M]Ka@K_@Ke@Mg@I_@Ki@Kk@Ik@Im@Gi@Gm@Gm@Ek@Cm@Eo@Cy@Cw@Aq@Am@?_A?q@?{@HeTFyO@i@F}L?_A?o@?o@Ai@Ak@Ck@Ag@Ce@Ck@Cg@Ek@Gi@Ei@Iq@M_AO_AIg@SuAO{@CUw@gFa@mCm@kEMy@mByM????q@mEk@}DQkAQgA]qBUuAWsAUuAIc@g@uCQgAQiAk@aE??a@wC]gCSoASoAMy@Q}@UoAQw@Qy@Sw@U{@W}@Sq@Og@Qk@Oc@Wq@Si@Uk@i@sAUk@Ys@Um@Qe@Oe@Sm@Om@Sq@Oi@Qu@Oo@Ou@Mq@Mo@Kq@Ms@Ks@K{@[{Bo@aFWkBSaBUgBMy@My@Ku@Ku@Mw@O_AO}@Ms@Q}@UkACK????ESOm@Qq@Mi@Og@_@mASs@Uw@a@wAUy@]kAs@cC]kAQs@]oAYeAWiAyA{F}AgGwAuFYmAUy@Sw@a@aB{AcGuAqFyA}F[kAWaAS{@Qq@U{@GYQq@[mAMe@I]Kc@Ka@Ig@Ke@Gc@Ii@Gg@Io@Ee@Gw@Ek@Cm@Ag@Ak@As@As@?s@@s@Bu@@m@Dm@Bq@Fu@Do@Fq@Fo@Fg@Hq@Z{B??JaAFk@Dg@??Jg@DWHc@Jm@??Js@Hq@RsAPsAJu@NiALgAHmAHoADkABeA@iA?E?????u@?aAAs@Cs@Cm@Ce@A_@Ce@Ei@IaAKgAG{@YmDK_AI}@Is@Iu@IcAYcDEo@KiAKcAIs@Kq@MaAQgASoAO{@SeAWkAc@qBm@eC[iAQs@Oo@Om@Mm@Kg@Mo@Ko@Ku@Ks@Iu@I}@I_AGeAEw@GiAEcAIyBEs@Eq@GcAIy@Ek@Iw@Ii@Im@Ig@O{@Km@S_AUaAU}@[aAY{@Ww@u@yBQi@Wo@k@cBe@wAYy@Y{@sAwD{@eCSm@??Sm@I_@Ka@IYMc@Si@??Mi@IYI[EU??Oc@GQMa@i@{AmEoMe@qA[}@Qo@Oc@Oo@Ka@Mk@Kg@Mk@G[E[M_A??Ig@Ic@CO??AOCYC]Kw@OsAE_@Ec@Eo@Ac@Cg@Ao@A}@A_A@cA?}@Bw@@o@??D}@Dy@H_AHy@H{@Hk@Ju@L}@x@cFJq@????BMDQj@eD|@kFX}AZgBXcBf@qCVuAN}@Nu@Nu@R{@XqA`@iBLo@Lm@??VsANu@RgAJm@Jq@NaANmAR_BN_BNeBL_BHqADeAD}@DgABu@B{@@_A@y@@y@@cA?iAA{AAeAA_AAy@C_ACy@C_AMsDKkCGiB??KyCKiDE_BC{AAkA?eAAeA@oA@kA@gABwADoAD_BH{AFaAFiAHgAFaAl@}Jn@}JPoCLuBPeCLuALsALoALkANkATaBn@oE|@_GfAqH@KVcBNaAP}@f@kCTmAVsA??XyAb@aCLo@NcALw@Ho@Hq@Hw@HgAHaADu@Dw@H}Ab@_K????d@gKF_BBs@Dw@DaBBaABs@Bm@Bm@@_@B[B_@Bg@Do@B_@D]Fu@??Fs@Fq@J_AJw@Fk@Hk@Jo@Jq@F_@Lu@Nw@??ZcBPeA\\gBN_ANu@Lu@L{@Jm@Ly@L_ANkAHw@Hs@H_AL}AHqAHkAFsAF{ADoABmAHgDDuABgADcAFy@F_AF}@H_AH{@LqAJ{@??@[B]@]??F[DUFa@Fe@Hs@He@L{@Ny@??RuALw@Jk@Jg@Ji@\\{AR}@Ns@N{@L_AVcB??^gCf@cD????p@qE|@eGh@iD??j@uDb@yCn@aE`@oCNaANgALiAJiADi@Fo@Dw@LwBFiA??Fm@Hu@PcBLsARoB??Z}CH}@`@wDXcDb@}DH_A??Dc@B_@Dq@@]Fk@H}@??Z{C??Ba@D_@@WB]@WDm@??TqBViCTgCL{ALyANiBLaBJqAHuAD_AHkADgADgADeAFqB@[Bu@BoA@y@BcA@mA@uA@}A?aA?_A?{A?}HAsF?mJA_F?qH?qBAsC?aB?oC?{BAoC?eH?mD?sD?gBAoB?kA?qB?qA?}@?k@Ak@?m@Aq@Ai@Ag@As@Cw@Cs@Cs@Ew@Eu@Ci@Gq@Eu@G{@KmAQmBYkDO_BOkBQuBw@aJScCQqBS_CS{BKwAOyAa@eFEe@??C_@C[Cq@AUCY??I_AGu@KmAGq@Gw@KaAIy@Go@Io@Im@ES????G_@Ko@Ke@[sAMg@Mk@Ok@Og@Qi@Sm@Oc@Oc@O]O_@Qa@Sa@Qa@k@kAQ_@u@{A??]o@Uc@S_@]m@Wc@OWEGYe@QW[c@W]QWSUMQSSUYOOo@o@c@a@[W[UWS]U[SUM_@Ue@Wq@][QYQYM_Ag@}BoAsEaCwC}AcAi@s@_@c@Wc@Uk@Yk@[u@a@w@a@cFkCyEgC??gCsA_B{@w@_@e@S]O]OWKWKSGsBs@SGWI[K[I[I_@GUEWE[C[C[C[AU?[@Y?W@a@BWD]DUBwATy@NoB\\a@F[Fa@F_@DO@I@W@[@Y?YAUAYCWE]G_@IYK]Ma@O_@Sa@Si@[MIQKu@c@yD}B????]S}D_Ci@]c@Y_@Wa@[_@Y[[_@[e@g@WYSUSYW]W]U_@Wa@Yc@Yg@Yi@Wi@Wi@Uk@Ug@Qe@Si@Um@Qi@Qk@So@Qo@Mc@Kc@EQKa@Mk@Sy@Qw@ScASaAOu@Qy@QaAO{@O_AOaAMy@MgAM_AKgAMkAIaAI_AIeAIcAImAIwAs@iL_BoXMuBK}AG{@Em@Gs@Gq@I_AIu@E_@Gi@Kw@Iq@Iq@M}@M}@Oy@QgAQcAk@yCWoA]gBI_@??u@}DmDwQcEkTMm@QaA_@iBSaAOw@CI??', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:35:30+01:00', + aimedEndTime: '2024-01-12T14:09:19+01:00', + expectedEndTime: '2024-01-12T14:09:19+01:00', + expectedStartTime: '2024-01-12T13:35:30+01:00', + realtime: false, + distance: 2440.83, + duration: 2029, + fromPlace: { + name: 'Nyland stasjon', + }, + toPlace: { + name: 'Destination', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: + 'kxzlJakjaA??~@`EPfAJf@BNUDA?K?GCIGMXIXc@tACNBLFJNZJNFFHHD@FBFANd@Pb@Ph@Lf@Pr@Pt@Nt@VrAhGp[DXL|@BPBPp@hDDVDZ?H@JA`@@D@DBDANEJCHEHEDGFWRIFGHGJGLENENCLCRUhBCPB@@?r@LB?xBZ|@Ll@FlAH^@R@J?BABCBCDIDN?D?H?H?B?DAF?FAHETDBJJBDBDDDBDD@B@B@B?B?B?B?BABCBABEBCBCDCBADA?E?C@C@CBCDEBAFAFAb@APAPAPCb@Id@Ih@MRGLCF?RBJ?N?LAPEt@Uj@STGPAFTLf@HVHRJTMp@ITAX@ZLlAJhA?rA\\bDVrAXlAh@r@Tl@Zb@f@d@^LnAzAj@|@h@jAd@jAEJUf@IN@@DLcApBmA`CIPKREREX@XBXSm@}@iCaAmCgAaE', + }, + }, + ], + systemNotices: [], + }, + { + aimedStartTime: '2024-01-12T12:54:07+01:00', + aimedEndTime: '2024-01-12T14:10:09+01:00', + expectedEndTime: '2024-01-12T14:10:09+01:00', + expectedStartTime: '2024-01-12T12:54:07+01:00', + duration: 4562, + distance: 26424.149999999998, + legs: [ + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T12:54:07+01:00', + aimedEndTime: '2024-01-12T13:05:00+01:00', + expectedEndTime: '2024-01-12T13:05:00+01:00', + expectedStartTime: '2024-01-12T12:54:07+01:00', + realtime: false, + distance: 727.21, + duration: 653, + fromPlace: { + name: 'Origin', + }, + toPlace: { + name: 'IKEA Slependen', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: + 'o`nlJaac_AZ|@\\z@On@MAk@~@UZ@J@HEX@RLv@@DJVVd@LRNR\\^p@t@|@fA\\b@JTAHGVCJ@LBHDPP`@Tb@Xp@f@zAj@nBLd@Hj@@`ACz@@J?JDR@H?D?BAD?BEPAF?D?D@HBCNQDA@BBLDEHKd@a@BAD??O?M@KBKBGBIFGdAeA@?HIZ[??', + }, + }, + { + id: 'rO0ABXeRABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAADUAAAA7ABBSQjpOU1I6UXVheTo3OTQ0ABBSQjpOU1I6UXVheTo3MzczADtSQjpSVVQ6RGF0ZWRTZXJ2aWNlSm91cm5leTplNjBjM2M1ODE2ZjUxNGExZjk2NTdiZjEwYmQ3ZmJhNw==', + mode: 'bus', + aimedStartTime: '2024-01-12T13:05:00+01:00', + aimedEndTime: '2024-01-12T13:21:00+01:00', + expectedEndTime: '2024-01-12T13:21:00+01:00', + expectedStartTime: '2024-01-12T13:05:00+01:00', + realtime: true, + distance: 15329.9, + duration: 960, + fromPlace: { + name: 'IKEA Slependen', + }, + toPlace: { + name: 'Nationaltheatret', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Oslo bussterminal', + }, + }, + line: { + publicCode: '250', + name: 'Sætre - Slemmestad - Oslo bussterminal', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + '{lmlJa|a_AFEJKHEFEH?FEFKBM@MASDSLe@@KFSHWFYH[F[Nw@JSHWFMDKDIDABABEL@F@FBDBHHDJFPBP?P@RARERCNGNGFIFI@K@KAw@Sg@o@c@k@m@q@o@m@aA_Aq@o@s@s@k@m@c@e@e@i@]c@]g@U_@S_@Q_@Ue@Uc@]y@[{@_@gA[gA_@qAa@{A[sAmAyEs@uCaAgDwAmEqC{G}DaIgGkKmBiDcAcBcBqCqFeJc@q@U_@mAwB{@wA}@cBO[mA_CcAqB[q@Ys@k@uAQa@GOYs@o@iBe@wAg@{AY_Ag@iBYeAYeAS_A]}A_@_BYyAWqAQeAQcAO}@{@_GaAeIgAiKmAwLaAgJ{@qGmA{H]kBc@_CaAgFYgBMeAIk@Io@Gs@Gy@Gy@Ey@Cw@Ey@A}@Cu@C_BCkDAiACgAAaAE_AC{@Ew@Gy@G{@MsACQUaCuB}SmAoLOyAcBuP}@eIk@mEmA}Iy@_Iu@wLKaBKmAK_AK_AM_AS}ASmASkAMm@ScAq@_DY}A[_BKs@My@Iq@QkAOqAKcAE_@KiAIiAIiAGcAOaCa@sHS_DIwAGsAImAG{@Gu@KgAIcAK}@I_AK{@WsBaAuGcA}GaBaLwBwN{@gGKmAAk@CeCAoACs@E}@MiASsASwA_@yC]}B_@aCEc@Im@SuAM_AKq@CQEWOmAUwBOeBc@qFO_CKkBa@gFo@gFiBsL}A_KoBwMg@iFMuA[}FCY??Iu@QaASe@AGo@oBq@iBg@qBe@yCw@wEm@}Dq@mE_@eCO_A[uBO{@QaAUcAk@}BSw@Uw@e@cB}@sCeB_G}@yCWy@]wAI[[gAK]SaAOs@McAMyA_AyMSiCKyA??OsBKwAG}@Ea@UsBWuBUqBm@qES{AoAsJS}ASmASmAUkA_@mBg@_CYsAYyAYkBQkAMkAKcAKeAWcCIcA??EYKiAYyCUaCUoCSoBUuBKeAQyAW}BYyBc@gDa@_D[wBeC}PSqAMaAIg@Iy@Gm@Ei@Ek@EaAEcAG_BGoAEm@Ec@I{@Ee@EYE_@Mu@Kk@Ki@Mm@Qk@I[Sq@aAsDSm@W{@W}@U{@Sy@Qy@Mq@Ii@Ee@Ge@C_@Ea@Ce@Ci@K_BGwAOkCA[AO?Q@U@U@E@E?G?G?GAEAEAO@K?MBk@JsBFsA???KB]Ba@Dq@Dq@D]D{@LaBr@yFLy@PcAReAVaAPa@Pe@P[n@gAh@}@`@s@Tc@Vm@DOHUZqALq@PgAJ}@D}@DeABeA?eA?iA?q@Ay@Cm@Ew@GqAM}AEo@Aa@Ac@@c@Bk@Fk@D]DYLg@LYJYLSRWd@c@~@gA`AgAPUNSPYP]\\u@Rk@Pe@Le@Pu@Nw@Hc@Jy@LgAHsAF{@H}BF_AFy@NqAPkAVqA^mAf@{AVm@Zm@fB_DpJcP\\k@Tc@d@aAh@}AV{@d@uBZqAXsAJm@Lq@Hm@LaANsAJkAP}BRwCr@iL^eGT_DNmCHsADgA@i@@i@@y@?s@HwADgA?yA?i@Ac@A[A[Ca@E]Ky@_@iCG]EQESKUu@aBGMM[EQGYKc@CSESAO@M?O?MCKCKEGEEAAC?E[EYCY?Y?q@Ac@D{A@o@????Be@BaA@_A?a@?u@Ae@AUAKASCSEa@Ge@G]Ic@GWI[Uq@a@gAcAmCCGGEECCAGOACGOKUQKY{@EIu@kBUq@Oc@KWCEKUMWO_@KWAGGMiA}CiAwCEMGOUo@KWWq@Sk@AA', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:21:00+01:00', + aimedEndTime: '2024-01-12T13:24:57+01:00', + expectedEndTime: '2024-01-12T13:24:57+01:00', + expectedStartTime: '2024-01-12T13:21:00+01:00', + realtime: false, + distance: 234.7, + duration: 237, + fromPlace: { + name: 'Nationaltheatret', + }, + toPlace: { + name: 'Nationaltheatret', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: + 'u~tlJ{}n`A??GYEKIS[w@GKMSOUGKAEAE?G?G@EAECGCGACAAACCGAC?AAECECGAEFOTo@ISEKAFKl@IJO^GRCAIRGRc@p@??', + }, + }, + { + id: 'rO0ABXeSABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAABAAAAAWABBSQjpOU1I6UXVheTo3MzMzABFSQjpOU1I6UXVheToxMTEzNAA7UkI6UlVUOkRhdGVkU2VydmljZUpvdXJuZXk6YzRjM2QwMjI1YWI5OGFhYjQ4NWNmZjAwZDExM2E0NzA=', + mode: 'metro', + aimedStartTime: '2024-01-12T13:27:00+01:00', + aimedEndTime: '2024-01-12T13:37:00+01:00', + expectedEndTime: '2024-01-12T13:37:00+01:00', + expectedStartTime: '2024-01-12T13:27:00+01:00', + realtime: true, + distance: 4410.74, + duration: 600, + fromPlace: { + name: 'Nationaltheatret', + }, + toPlace: { + name: 'Helsfyr', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Mortensrud', + }, + }, + line: { + publicCode: '3', + name: 'Kolsås - Mortensrud', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + 'seulJ{co`AHMTm@FKBa@@KJu@NuAL{@Jw@Lu@Ls@Hk@Lo@?AVyAf@oCLs@Lw@Ho@Js@Fs@Hu@HwADaADkAD}@?WP{EDo@Fm@LiELeD??By@NmEBy@Du@Bk@JgAJcAL_APeAX{A\\aBd@iCL_AJ{@H{@Bi@@g@@e@FgCBcA?OHuD??@[JyE@uA@oAAiAGaAGy@Iy@M{@{@sEOeAIo@IiAEkAAeA?qAH}H??@i@D}DDqC@y@@e@B{@Be@H_ArAeMR}BFuA@yAEwAIsAO{ASqAWgAa@mAe@_Ag@m@mByB]k@[q@Yy@YkASkAQsAYkCKy@Ko@Ms@Ka@Me@Ma@O_@O_@Sa@Yi@uAeCa@u@??w@yAQc@Oa@K[K_@Ma@Mg@g@uBOk@Oi@Mc@Oa@O[Q[QYEc@Cs@Am@Am@@o@@g@@g@Bi@Di@De@Fc@Fc@Hg@Nm@Ja@La@N_@N]R_@RYPYVUTSRMPIPIl@WRITKNKNMLKNQPSRYLULUHSJUHUJYHUNc@Lg@Pk@Lg@Lg@P{@Ha@n@{CH]R}@??`@mBH_@Lq@DYDYD]Da@B]Dg@@_@Bi@@g@?c@?c@Ae@A_@Ck@Eo@?AWwCEq@Eq@Cu@Cw@Cc@Ao@?m@?k@?q@?y@@k@B{@j@oOD}@FgAHw@LuANgAn@uFHw@', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:37:00+01:00', + aimedEndTime: '2024-01-12T13:37:47+01:00', + expectedEndTime: '2024-01-12T13:37:47+01:00', + expectedStartTime: '2024-01-12T13:37:00+01:00', + realtime: false, + distance: 57.17, + duration: 47, + fromPlace: { + name: 'Helsfyr', + }, + toPlace: { + name: 'Helsfyr T', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: '_utlJws|`ABBOtBPhA??', + }, + }, + { + id: 'rO0ABXeTABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAAAAAAAAJABFSQjpOU1I6UXVheToxMTE0OAARUkI6TlNSOlF1YXk6MTE0NDIAO1JCOlJVVDpEYXRlZFNlcnZpY2VKb3VybmV5OmM4MzJiNGVkODUyYmE0ZDQwMTc0YmM3ODRkNWZkZGVm', + mode: 'bus', + aimedStartTime: '2024-01-12T13:45:00+01:00', + aimedEndTime: '2024-01-12T13:55:00+01:00', + expectedEndTime: '2024-01-12T13:55:00+01:00', + expectedStartTime: '2024-01-12T13:45:00+01:00', + realtime: false, + distance: 4589.89, + duration: 600, + fromPlace: { + name: 'Helsfyr T', + }, + toPlace: { + name: 'Alfaset', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Grorud T via Ikea', + }, + }, + line: { + publicCode: '66', + name: 'Helsfyr T - Grorud T', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + 'yttlJun|`A?@Jn@DZ?N?J?JC?CBCDCHAL?J@JBFDFD@DADCBG@I@GDUFWFs@?AFk@Bi@Bi@@W@S?]?e@CeA?c@Ci@Ae@C]CYKiAGe@CMEa@Cc@AEl@yGDq@Be@B_@Di@Bc@DM@O?OAQEKGGEAC?E@GGEGCICKCMAQiAsNIoA?AG{@Co@Am@Ai@@e@?g@@[Bi@\\eH??HcB@_@D{@DaA@m@@]@cABi@@Q@IFa@@ADEBK?K?KAGCECCCAG_@AQASA[Aa@CiDA]AqA?KA}@EuC?Q????As@?ACg@Ae@C}@GsAGeAMoCMoCC_@?g@@W?Q?CBa@BK@M?K?MAMEKGIGEA?E?GDEFCHI?GEECECCAAEEEGKGOQe@EKQSM_@ISK]M[GO??IQIMEMQWSYUW[YYSWO[KSEUEm@EaAGOCQCQEMEQIQMOMMOMQ[i@iAyB??CC]m@MSQWYa@QSY_@]a@A?Y[g@e@SQeAy@kAcAwAeAa@_@QMe@_@????UOUMQK[MQGECWGe@Ia@G}AOKA}C]k@Ii@GUC[EKKEGEEEIEOM_@AOK_AKaAIw@Ek@??CSGgAEy@Cs@AaAAs@Ay@As@?q@@yA@gDBsD@wD@_C?oDByD?_@@iB@gB@i@@m@@[@Y?EHg@@U@A@E@E?EAEAEACAAA?A?IIECGCOBG?C?[@[BYB_@FSDy@J??C@OBSEE?KAI?AEACCEEACAC@A@KIGKEGUa@KYQ_@o@oAeAuBiAyBS[MW]o@Wc@[c@[c@i@q@EG??c@i@[_@[]s@w@GIIIYc@EIGKIMGMAAAKAGCEEEEAC@A@KIGEEGQOYk@]s@[w@Um@Sk@IYIUESIYEWGYEYEWE_@Ge@Gk@Ec@C]C_@C_@A]GcBC_@A[Ca@EWCWE]G[G]Qy@Qy@e@yBS_AMq@GSCOEQCMKe@S_AAC', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:55:00+01:00', + aimedEndTime: '2024-01-12T14:10:09+01:00', + expectedEndTime: '2024-01-12T14:10:09+01:00', + expectedStartTime: '2024-01-12T13:55:00+01:00', + realtime: false, + distance: 1074.54, + duration: 909, + fromPlace: { + name: 'Alfaset', + }, + toPlace: { + name: 'Destination', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: + 'egxlJeigaA@A?BRz@DZA@ILEDA@}@aEAECIACCGAE?IUiA?CAEMaA_Br@KBI?GBGHKNW^w@jA]f@ORSRQLMHMBAbD@fA@`ADtADv@s@?ODm@l@SPGJENGNEPI\\GGC?C?ORGZHLCJ?BV\\BDBH@J@NANAJEJEJUf@IN@@DLcApBmA`CIPKREREX@XBXSm@}@iCaAmCgAaE', + }, + }, + ], + systemNotices: [], + }, + { + aimedStartTime: '2024-01-12T12:54:07+01:00', + aimedEndTime: '2024-01-12T14:13:28+01:00', + expectedEndTime: '2024-01-12T14:13:28+01:00', + expectedStartTime: '2024-01-12T12:54:07+01:00', + duration: 4761, + distance: 27352.32, + legs: [ + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T12:54:07+01:00', + aimedEndTime: '2024-01-12T13:05:00+01:00', + expectedEndTime: '2024-01-12T13:05:00+01:00', + expectedStartTime: '2024-01-12T12:54:07+01:00', + realtime: false, + distance: 727.21, + duration: 653, + fromPlace: { + name: 'Origin', + }, + toPlace: { + name: 'IKEA Slependen', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: + 'o`nlJaac_AZ|@\\z@On@MAk@~@UZ@J@HEX@RLv@@DJVVd@LRNR\\^p@t@|@fA\\b@JTAHGVCJ@LBHDPP`@Tb@Xp@f@zAj@nBLd@Hj@@`ACz@@J?JDR@H?D?BAD?BEPAF?D?D@HBCNQDA@BBLDEHKd@a@BAD??O?M@KBKBGBIFGdAeA@?HIZ[??', + }, + }, + { + id: 'rO0ABXeSABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAADUAAAA-ABBSQjpOU1I6UXVheTo3OTQ0ABFSQjpOU1I6UXVheToxMTk2OQA7UkI6UlVUOkRhdGVkU2VydmljZUpvdXJuZXk6ZTYwYzNjNTgxNmY1MTRhMWY5NjU3YmYxMGJkN2ZiYTc=', + mode: 'bus', + aimedStartTime: '2024-01-12T13:05:00+01:00', + aimedEndTime: '2024-01-12T13:28:00+01:00', + expectedEndTime: '2024-01-12T13:28:00+01:00', + expectedStartTime: '2024-01-12T13:05:00+01:00', + realtime: true, + distance: 17846.09, + duration: 1380, + fromPlace: { + name: 'IKEA Slependen', + }, + toPlace: { + name: 'Oslo bussterminal', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Oslo bussterminal', + }, + }, + line: { + publicCode: '250', + name: 'Sætre - Slemmestad - Oslo bussterminal', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + '{lmlJa|a_AFEJKHEFEH?FEFKBM@MASDSLe@@KFSHWFYH[F[Nw@JSHWFMDKDIDABABEL@F@FBDBHHDJFPBP?P@RARERCNGNGFIFI@K@KAw@Sg@o@c@k@m@q@o@m@aA_Aq@o@s@s@k@m@c@e@e@i@]c@]g@U_@S_@Q_@Ue@Uc@]y@[{@_@gA[gA_@qAa@{A[sAmAyEs@uCaAgDwAmEqC{G}DaIgGkKmBiDcAcBcBqCqFeJc@q@U_@mAwB{@wA}@cBO[mA_CcAqB[q@Ys@k@uAQa@GOYs@o@iBe@wAg@{AY_Ag@iBYeAYeAS_A]}A_@_BYyAWqAQeAQcAO}@{@_GaAeIgAiKmAwLaAgJ{@qGmA{H]kBc@_CaAgFYgBMeAIk@Io@Gs@Gy@Gy@Ey@Cw@Ey@A}@Cu@C_BCkDAiACgAAaAE_AC{@Ew@Gy@G{@MsACQUaCuB}SmAoLOyAcBuP}@eIk@mEmA}Iy@_Iu@wLKaBKmAK_AK_AM_AS}ASmASkAMm@ScAq@_DY}A[_BKs@My@Iq@QkAOqAKcAE_@KiAIiAIiAGcAOaCa@sHS_DIwAGsAImAG{@Gu@KgAIcAK}@I_AK{@WsBaAuGcA}GaBaLwBwN{@gGKmAAk@CeCAoACs@E}@MiASsASwA_@yC]}B_@aCEc@Im@SuAM_AKq@CQEWOmAUwBOeBc@qFO_CKkBa@gFo@gFiBsL}A_KoBwMg@iFMuA[}FCY??Iu@QaASe@AGo@oBq@iBg@qBe@yCw@wEm@}Dq@mE_@eCO_A[uBO{@QaAUcAk@}BSw@Uw@e@cB}@sCeB_G}@yCWy@]wAI[[gAK]SaAOs@McAMyA_AyMSiCKyA??OsBKwAG}@Ea@UsBWuBUqBm@qES{AoAsJS}ASmASmAUkA_@mBg@_CYsAYyAYkBQkAMkAKcAKeAWcCIcA??EYKiAYyCUaCUoCSoBUuBKeAQyAW}BYyBc@gDa@_D[wBeC}PSqAMaAIg@Iy@Gm@Ei@Ek@EaAEcAG_BGoAEm@Ec@I{@Ee@EYE_@Mu@Kk@Ki@Mm@Qk@I[Sq@aAsDSm@W{@W}@U{@Sy@Qy@Mq@Ii@Ee@Ge@C_@Ea@Ce@Ci@K_BGwAOkCA[AO?Q@U@U@E@E?G?G?GAEAEAO@K?MBk@JsBFsA???KB]Ba@Dq@Dq@D]D{@LaBr@yFLy@PcAReAVaAPa@Pe@P[n@gAh@}@`@s@Tc@Vm@DOHUZqALq@PgAJ}@D}@DeABeA?eA?iA?q@Ay@Cm@Ew@GqAM}AEo@Aa@Ac@@c@Bk@Fk@D]DYLg@LYJYLSRWd@c@~@gA`AgAPUNSPYP]\\u@Rk@Pe@Le@Pu@Nw@Hc@Jy@LgAHsAF{@H}BF_AFy@NqAPkAVqA^mAf@{AVm@Zm@fB_DpJcP\\k@Tc@d@aAh@}AV{@d@uBZqAXsAJm@Lq@Hm@LaANsAJkAP}BRwCr@iL^eGT_DNmCHsADgA@i@@i@@y@?s@HwADgA?yA?i@Ac@A[A[Ca@E]Ky@_@iCG]EQESKUu@aBGMM[EQGYKc@CSESAO@M?O?MCKCKEGEEAAC?E[EYCY?Y?q@Ac@D{A@o@????Be@BaA@_A?a@?u@Ae@AUAKASCSEa@Ge@G]Ic@GWI[Uq@a@gAcAmCCGGEECCAGOACGOKUQKY{@EIu@kBUq@Oc@KWCEKUMWO_@KWAGGMiA}CiAwCEMGOUo@KWWq@Sk@AA??EMIU]{@MYKOMOEIIKIGAK?GCGCGGIECM?GIEIGOWy@EKEKCGIKCCCCOQCCAA[a@QSQU_@c@QU[_@i@o@KMCEOQIKkAyAMQY]KMAAAAACKKCEcAmAUU?M?IAOGyGAg@AQHQDK`AuBx@gB@Eh@cAh@gA??`@y@JSHSHWFOHWJ_@Lg@Pw@Lu@H_@De@Dg@Ba@@s@?s@Eq@GuAEs@MsBGqAEm@E}@C}@AcBAgA?e@?]?Q?U@_@@k@HoANiAT}B@SHu@F]D[J_@H[j@uBBK@EDOFe@@EDYH[VaAJ]@CFODIFG`AwAZa@??@AHKLOFC?A@?DA@?FA@?B?H@??D@F@NBF?D?FADCFCHGl@m@\\[LOFGFEBEDCDE@APMFChC_ALCNEDDB@F?BADEBIBK@OAOJy@VwCBWL_BD[DEBI@I?IAKB]Fi@JsAD{@HiALoAJ_AFg@@G??LeBLyANkBBSBQHk@BEBG@I?I?G?IAGCIACCAECA?C?C@C@ADCDAHAH?H?H@HBF?F?NAL?RMRILEHABINATKhAIbAIbAO`BALE`@ABGt@KlAKvAAL', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:28:00+01:00', + aimedEndTime: '2024-01-12T13:31:42+01:00', + expectedEndTime: '2024-01-12T13:31:42+01:00', + expectedStartTime: '2024-01-12T13:28:00+01:00', + realtime: false, + distance: 213.19, + duration: 222, + fromPlace: { + name: 'Oslo bussterminal', + }, + toPlace: { + name: 'Oslo bussterminal', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: 'sptlJm|s`A??LoAB[@EPqB@MBa@JD@@FQ??D@HDJsA@@B@DBB@DBDB@@Fu@LwAHwA??', + }, + }, + { + id: 'rO0ABXeTABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAAAAAAAAJABFSQjpOU1I6UXVheToxMTk2MAARUkI6TlNSOlF1YXk6MTA0MDIAO1JCOlJVVDpEYXRlZFNlcnZpY2VKb3VybmV5OmY4MDE0ZDY1OWI3ZWY3ODNhZTdjYjU4NjBiMWMyNzg3', + mode: 'bus', + aimedStartTime: '2024-01-12T13:35:00+01:00', + aimedEndTime: '2024-01-12T13:50:00+01:00', + expectedEndTime: '2024-01-12T13:50:00+01:00', + expectedStartTime: '2024-01-12T13:35:00+01:00', + realtime: false, + distance: 6870.86, + duration: 900, + fromPlace: { + name: 'Oslo bussterminal', + }, + toPlace: { + name: 'Trosterud', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Lillestrøm', + }, + }, + line: { + publicCode: '110', + name: 'Lillestrøm - Oslo bussterminal', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + '}ktlJynt`ADi@BQBSBQHk@BEBG@I?I?G?IAG@QBQBKH_@Ji@BNBN?DDUBGJm@BM?ARy@d@{Bt@mDZ{ANo@H[@E`@oBt@mDFUBM?CJe@DSFU@KHc@?GDe@Nq@TgAj@mC@A@KBMFa@x@wE@E??F_@l@iDXcB`@eCV_BDYV_@BE??LUBM?OOaBBa@VuC`@}D@KZwCb@iEZgDFk@BUKa@CKGWWqAe@{BOu@EMIc@C_@G[YwAAGM[EQI]EQMm@ScAG[Mq@??OaAKo@Ik@Is@Io@MqAQ_BC]YeCs@}GEi@Gi@KeAEY??E[Iu@Gc@Ga@G]Ic@Kc@i@aCa@aBMk@Kc@[sAIa@Kc@S_A?C??I[C_@AKAa@?W@G@E?GHSBMFYN_@Rm@FUDUBOBQ@O@Q@O?MD]@g@?_@BG@I@KAIAICIEEEAE?EDADADO?I?E?C?E@C@CBEFCBCDSd@EHEFCDEDCBE@E@A@C?I?EAIEECs@q@Uw@WcAe@qBeD_OS{ASgAOiAEy@Ca@?U?O@I@G?IAKCICECCCAA?C?CBEIKUKc@COG[Ge@OkAEU??AIGg@M_AIc@K]GUMc@Uo@q@gBo@yA{B_G_BeEeCyGiBaFeAqC]_Ae@qAY_AMa@??IWSu@Mi@Ke@Mk@Oq@Ki@[iB[cBk@iDqAyHc@eCMs@??Ii@i@wCKi@Ke@COMk@Ou@YsAk@oCoAcGo@{CWiAYiAcAmDqBeHgBiGqBcHc@cBc@eBUgASiAQoAIi@Gi@ScCKaBKmBMuBCw@CiB?{BAiBAuA?yA?sA@yB@gC@{D?{A?{A?qA?sAAuAAqACuACqAEwAEkACiAGmAGqAI{AKkBKsAKoAKqAMmAMqAGm@K{@MgAM{@UeBWaBSsAc@oCa@kCSwAYsBQqAQ}AQ{AMqAMkAQuBm@yGOcB]cDMoAYwBWmBc@mC_@qB_@mBi@sDSiAe@}BOu@Oq@YeAOk@Qg@Wu@Oe@Q[M[Wk@We@EI', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:50:00+01:00', + aimedEndTime: '2024-01-12T14:13:28+01:00', + expectedEndTime: '2024-01-12T14:13:28+01:00', + expectedStartTime: '2024-01-12T13:50:00+01:00', + realtime: false, + distance: 1694.97, + duration: 1408, + fromPlace: { + name: 'Trosterud', + }, + toPlace: { + name: 'Destination', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: + 'sywlJw}haA?A?ECOAM@K?G@E@I@EBCBEFCPEBABCBC@E@G@K@YBSBSDKJQIMCCCCCAE?G@k@JG?IAKESMGCK?I?GDGFGLYt@_@|@Ul@c@bAOZCFAFAFAFAPAVCZAF?HCNGAI@IFIHILKTUh@iA`Cc@dAw@rBQd@M^Od@Mh@Mh@Mb@GPGNINGDI@i@b@YPC@OHQFUHUHu@TBz@BlALADAD?DBFBJHHPCHIx@ABK`AIh@CNIb@Ir@Y~CO~BAbD@fA@`ADtADv@s@?ODm@l@SPGJENGNEPI\\GGC?C?ORGZHLCJ?BV\\BDBH@J@NANAJEJEJUf@IN@@DLcApBmA`CIPKREREX@XBXSm@}@iCaAmCgAaE', + }, + }, + ], + systemNotices: [], + }, + { + aimedStartTime: '2024-01-12T12:54:07+01:00', + aimedEndTime: '2024-01-12T14:13:45+01:00', + expectedEndTime: '2024-01-12T14:13:45+01:00', + expectedStartTime: '2024-01-12T12:54:07+01:00', + duration: 4778, + distance: 30258.55, + legs: [ + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T12:54:07+01:00', + aimedEndTime: '2024-01-12T13:05:00+01:00', + expectedEndTime: '2024-01-12T13:05:00+01:00', + expectedStartTime: '2024-01-12T12:54:07+01:00', + realtime: false, + distance: 727.21, + duration: 653, + fromPlace: { + name: 'Origin', + }, + toPlace: { + name: 'IKEA Slependen', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: + 'o`nlJaac_AZ|@\\z@On@MAk@~@UZ@J@HEX@RLv@@DJVVd@LRNR\\^p@t@|@fA\\b@JTAHGVCJ@LBHDPP`@Tb@Xp@f@zAj@nBLd@Hj@@`ACz@@J?JDR@H?D?BAD?BEPAF?D?D@HBCNQDA@BBLDEHKd@a@BAD??O?M@KBKBGBIFGdAeA@?HIZ[??', + }, + }, + { + id: 'rO0ABXeSABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAADUAAAA-ABBSQjpOU1I6UXVheTo3OTQ0ABFSQjpOU1I6UXVheToxMTk2OQA7UkI6UlVUOkRhdGVkU2VydmljZUpvdXJuZXk6ZTYwYzNjNTgxNmY1MTRhMWY5NjU3YmYxMGJkN2ZiYTc=', + mode: 'bus', + aimedStartTime: '2024-01-12T13:05:00+01:00', + aimedEndTime: '2024-01-12T13:28:00+01:00', + expectedEndTime: '2024-01-12T13:28:00+01:00', + expectedStartTime: '2024-01-12T13:05:00+01:00', + realtime: true, + distance: 17846.09, + duration: 1380, + fromPlace: { + name: 'IKEA Slependen', + }, + toPlace: { + name: 'Oslo bussterminal', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Oslo bussterminal', + }, + }, + line: { + publicCode: '250', + name: 'Sætre - Slemmestad - Oslo bussterminal', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + '{lmlJa|a_AFEJKHEFEH?FEFKBM@MASDSLe@@KFSHWFYH[F[Nw@JSHWFMDKDIDABABEL@F@FBDBHHDJFPBP?P@RARERCNGNGFIFI@K@KAw@Sg@o@c@k@m@q@o@m@aA_Aq@o@s@s@k@m@c@e@e@i@]c@]g@U_@S_@Q_@Ue@Uc@]y@[{@_@gA[gA_@qAa@{A[sAmAyEs@uCaAgDwAmEqC{G}DaIgGkKmBiDcAcBcBqCqFeJc@q@U_@mAwB{@wA}@cBO[mA_CcAqB[q@Ys@k@uAQa@GOYs@o@iBe@wAg@{AY_Ag@iBYeAYeAS_A]}A_@_BYyAWqAQeAQcAO}@{@_GaAeIgAiKmAwLaAgJ{@qGmA{H]kBc@_CaAgFYgBMeAIk@Io@Gs@Gy@Gy@Ey@Cw@Ey@A}@Cu@C_BCkDAiACgAAaAE_AC{@Ew@Gy@G{@MsACQUaCuB}SmAoLOyAcBuP}@eIk@mEmA}Iy@_Iu@wLKaBKmAK_AK_AM_AS}ASmASkAMm@ScAq@_DY}A[_BKs@My@Iq@QkAOqAKcAE_@KiAIiAIiAGcAOaCa@sHS_DIwAGsAImAG{@Gu@KgAIcAK}@I_AK{@WsBaAuGcA}GaBaLwBwN{@gGKmAAk@CeCAoACs@E}@MiASsASwA_@yC]}B_@aCEc@Im@SuAM_AKq@CQEWOmAUwBOeBc@qFO_CKkBa@gFo@gFiBsL}A_KoBwMg@iFMuA[}FCY??Iu@QaASe@AGo@oBq@iBg@qBe@yCw@wEm@}Dq@mE_@eCO_A[uBO{@QaAUcAk@}BSw@Uw@e@cB}@sCeB_G}@yCWy@]wAI[[gAK]SaAOs@McAMyA_AyMSiCKyA??OsBKwAG}@Ea@UsBWuBUqBm@qES{AoAsJS}ASmASmAUkA_@mBg@_CYsAYyAYkBQkAMkAKcAKeAWcCIcA??EYKiAYyCUaCUoCSoBUuBKeAQyAW}BYyBc@gDa@_D[wBeC}PSqAMaAIg@Iy@Gm@Ei@Ek@EaAEcAG_BGoAEm@Ec@I{@Ee@EYE_@Mu@Kk@Ki@Mm@Qk@I[Sq@aAsDSm@W{@W}@U{@Sy@Qy@Mq@Ii@Ee@Ge@C_@Ea@Ce@Ci@K_BGwAOkCA[AO?Q@U@U@E@E?G?G?GAEAEAO@K?MBk@JsBFsA???KB]Ba@Dq@Dq@D]D{@LaBr@yFLy@PcAReAVaAPa@Pe@P[n@gAh@}@`@s@Tc@Vm@DOHUZqALq@PgAJ}@D}@DeABeA?eA?iA?q@Ay@Cm@Ew@GqAM}AEo@Aa@Ac@@c@Bk@Fk@D]DYLg@LYJYLSRWd@c@~@gA`AgAPUNSPYP]\\u@Rk@Pe@Le@Pu@Nw@Hc@Jy@LgAHsAF{@H}BF_AFy@NqAPkAVqA^mAf@{AVm@Zm@fB_DpJcP\\k@Tc@d@aAh@}AV{@d@uBZqAXsAJm@Lq@Hm@LaANsAJkAP}BRwCr@iL^eGT_DNmCHsADgA@i@@i@@y@?s@HwADgA?yA?i@Ac@A[A[Ca@E]Ky@_@iCG]EQESKUu@aBGMM[EQGYKc@CSESAO@M?O?MCKCKEGEEAAC?E[EYCY?Y?q@Ac@D{A@o@????Be@BaA@_A?a@?u@Ae@AUAKASCSEa@Ge@G]Ic@GWI[Uq@a@gAcAmCCGGEECCAGOACGOKUQKY{@EIu@kBUq@Oc@KWCEKUMWO_@KWAGGMiA}CiAwCEMGOUo@KWWq@Sk@AA??EMIU]{@MYKOMOEIIKIGAK?GCGCGGIECM?GIEIGOWy@EKEKCGIKCCCCOQCCAA[a@QSQU_@c@QU[_@i@o@KMCEOQIKkAyAMQY]KMAAAAACKKCEcAmAUU?M?IAOGyGAg@AQHQDK`AuBx@gB@Eh@cAh@gA??`@y@JSHSHWFOHWJ_@Lg@Pw@Lu@H_@De@Dg@Ba@@s@?s@Eq@GuAEs@MsBGqAEm@E}@C}@AcBAgA?e@?]?Q?U@_@@k@HoANiAT}B@SHu@F]D[J_@H[j@uBBK@EDOFe@@EDYH[VaAJ]@CFODIFG`AwAZa@??@AHKLOFC?A@?DA@?FA@?B?H@??D@F@NBF?D?FADCFCHGl@m@\\[LOFGFEBEDCDE@APMFChC_ALCNEDDB@F?BADEBIBK@OAOJy@VwCBWL_BD[DEBI@I?IAKB]Fi@JsAD{@HiALoAJ_AFg@@G??LeBLyANkBBSBQHk@BEBG@I?I?G?IAGCIACCAECA?C?C@C@ADCDAHAH?H?H@HBF?F?NAL?RMRILEHABINATKhAIbAIbAO`BALE`@ABGt@KlAKvAAL', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:28:00+01:00', + aimedEndTime: '2024-01-12T13:28:32+01:00', + expectedEndTime: '2024-01-12T13:28:32+01:00', + expectedStartTime: '2024-01-12T13:28:00+01:00', + realtime: false, + distance: 24.25, + duration: 32, + fromPlace: { + name: 'Oslo bussterminal', + }, + toPlace: { + name: 'Oslo bussterminal', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: 'sptlJm|s`A@@@SAAGCGC?A?W@A??', + }, + }, + { + id: 'rO0ABXeTABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAAAAAAAAMABFSQjpOU1I6UXVheToxMTk4NQARUkI6TlNSOlF1YXk6MTA5NDMAO1JCOlJVVDpEYXRlZFNlcnZpY2VKb3VybmV5OjU0ZTUxNjljOTBiOTVlZTA0Y2JkMTliOTkzNTA2MGMz', + mode: 'bus', + aimedStartTime: '2024-01-12T13:36:00+01:00', + aimedEndTime: '2024-01-12T13:54:00+01:00', + expectedEndTime: '2024-01-12T13:54:00+01:00', + expectedStartTime: '2024-01-12T13:36:00+01:00', + realtime: false, + distance: 7593.08, + duration: 1080, + fromPlace: { + name: 'Oslo bussterminal', + }, + toPlace: { + name: 'Veitvet', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Lillestrøm', + }, + }, + line: { + publicCode: '380', + name: 'Lillestrøm - Rv4 - Oslo bussterminal', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + 'gqtlJg~s`A@[CMCIAKIMCWJwA@UBUBW@SBWBW@WBU@UBUBW@WBU@I@M@UBUBW@UBUDE^W@AZUNDH@D?@?D?FAB?BABBB@B?@?BABCBEBG@I?I?G?IAGCIACCAECA?C?C@C@ADGAE?MEc@UEAGAIBIFGBC@EDEDEHCLENCLCTYpDSfCId@ENELELGJEBCFKAI?KCGCIEKIYUWSmBaB_BuA]YYYSSY[QSGGOQEE??EEKMACEIEIKSAKCIEGECEAGKCGGKGQI]K[W_AyAiFGUQo@_@wAc@cBKUIUEOEOE_@I]Su@Wo@GSCMCOEW]sAQ_@CICMIY_AjAI@G?EACAECIGW_@cAiBqCeF}C}FOe@EIGIIOGIEGKOSO{BoCKWGKSYMKGEKISK{@gAGIGO??KSIOGKIOOUGK]]IOyAwC_@s@mAcCMc@GQEI_AgBGKCGIQEIAIAOAOAK?IAC?I?Wc@G{AKyBQIAWAOCYIIAiAIMCCAEC@]AKAGACACG?YCC?C@ABADAB?BIKIGKKc@[MK??m@c@[UIIQKYUeAq@eAm@YOYQYOIEKCEAICKAMAyEe@[EgAKm@G??[C_@EoAKg@Cm@CoAK_@Ce@E]CWCWEMAIAGCAEAIAIAIEIEIEEEEGAE@G@EBCBCFQEg@UiAo@gAk@}@q@SQa@a@UUm@y@_@q@g@aAEGo@yBs@{BIS??IS_@iAyAkEw@}BG[Ie@?OAQCOEUIQIOKGGCI?A?S[OYK[m@iBWu@??Ma@_@oAY}@q@sBm@cDSoAUsAWaBQiAYqBYsBK{BQ{AUcCCu@C}@Gs@MqAUeBYqCQgBSkBGk@??AIGm@QkAGa@a@qB{@{IyBeTUaCMyAY_DIiDCaBI}CIyCCyA?k@?_@@c@Fo@@C@E?E?I?ICGAEECAAC?C?EEGKK[I_@OiAKw@OiA??SeBs@{DqAgKgAiIk@qEKq@??Ge@MiAI{@GcAE}@CaAA{@AcA@cAB}@BmAHgAJkANsAJu@N_AVgA~@mDXgAR{@Lo@PmALkAHiAFeABoA@oA?yAAoAAo@C_@??A]KoBK}AMaBWyBi@aFIy@Iw@IcAG{AGuACcBByB?}B?cA??AcAEyCGoBI_BCi@AQIw@SeBQkAO{@SeA[sAu@{FeB}Mm@mEUmBGc@', + }, + }, + { + id: 'rO0ABXeTABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAACMAAAAoABFSQjpOU1I6UXVheToxMDk0MwARUkI6TlNSOlF1YXk6MTAzOTQAO1JCOlJVVDpEYXRlZFNlcnZpY2VKb3VybmV5OjQyM2U4OWFhYjNjOTM2MzUwOTlkNzJkOWFiYmVkY2M0', + mode: 'bus', + aimedStartTime: '2024-01-12T13:56:00+01:00', + aimedEndTime: '2024-01-12T14:01:00+01:00', + expectedEndTime: '2024-01-12T14:01:00+01:00', + expectedStartTime: '2024-01-12T13:56:00+01:00', + realtime: false, + distance: 3132.07, + duration: 300, + fromPlace: { + name: 'Veitvet', + }, + toPlace: { + name: 'Alfasetveien', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Haugerud T', + }, + }, + line: { + publicCode: '25', + name: 'Majorstuen-Haugerud', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + 'uc{lJmkeaAc@gD_@sCQcAMs@WkAQu@Sy@y@sCcAwDcCaJi@kBUu@Sq@Wm@Wi@We@U]_@e@[]a@g@Y]W]SWUa@S_@Q]Qe@Wq@So@Qo@Og@Ou@Os@O_AMs@K{@KaAIu@IaAGkAEy@C}@GqA????]{J@gCAcAC{@Cq@Co@Gu@Iq@OqAGi@Is@AMAMAOAS?Y@E@E?E@EFCDCF?PBF@HCFAd@LRD??@?HBPNHBHBDBFBJBDBFBXDHFf@b@JLHHNPTXRZXd@`@r@^l@`@r@T`@PXPVTXNRVTZTVPTLZLXJVFVDVDz@JNBx@H^DRHH@l@B??J@X@RBH?LBHBT@`@TVN\\VVRXVTTLNNPX`@\\f@T`@Zn@Rd@lCnGR`@P^PZR\\PVJLNPNN??B@LLFDNF\\JXRFBFBFDDHDFLR?FBD@DBDD@DABC@C`@[TIH@ZErAL|@Jp@FlAHh@BH@RJHFHHJLDJBFFFD@FADCDEDKBKHIHGHCNMF?PARANANAPCd@Ib@Gh@K^Il@@PCjA[TG', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T14:01:00+01:00', + aimedEndTime: '2024-01-12T14:13:45+01:00', + expectedEndTime: '2024-01-12T14:13:45+01:00', + expectedStartTime: '2024-01-12T14:01:00+01:00', + realtime: false, + distance: 935.85, + duration: 765, + fromPlace: { + name: 'Alfasetveien', + }, + toPlace: { + name: 'Destination', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: + 'ilylJgxgaA??KN@Dj@STGPAFTLf@HVHRJTMp@ITAX@ZLlAJhA?rA\\bDVrAXlAh@r@Tl@Zb@f@d@^LnAzAj@|@h@jAd@jAEJUf@IN@@DLcApBmA`CIPKREREX@XBXSm@}@iCaAmCgAaE', + }, + }, + ], + systemNotices: [], + }, + { + aimedStartTime: '2024-01-12T12:54:07+01:00', + aimedEndTime: '2024-01-12T14:14:09+01:00', + expectedEndTime: '2024-01-12T14:14:09+01:00', + expectedStartTime: '2024-01-12T12:54:07+01:00', + duration: 4802, + distance: 26616.219999999998, + legs: [ + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T12:54:07+01:00', + aimedEndTime: '2024-01-12T13:05:00+01:00', + expectedEndTime: '2024-01-12T13:05:00+01:00', + expectedStartTime: '2024-01-12T12:54:07+01:00', + realtime: false, + distance: 727.21, + duration: 653, + fromPlace: { + name: 'Origin', + }, + toPlace: { + name: 'IKEA Slependen', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: + 'o`nlJaac_AZ|@\\z@On@MAk@~@UZ@J@HEX@RLv@@DJVVd@LRNR\\^p@t@|@fA\\b@JTAHGVCJ@LBHDPP`@Tb@Xp@f@zAj@nBLd@Hj@@`ACz@@J?JDR@H?D?BAD?BEPAF?D?D@HBCNQDA@BBLDEHKd@a@BAD??O?M@KBKBGBIFGdAeA@?HIZ[??', + }, + }, + { + id: 'rO0ABXeSABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAADUAAAA-ABBSQjpOU1I6UXVheTo3OTQ0ABFSQjpOU1I6UXVheToxMTk2OQA7UkI6UlVUOkRhdGVkU2VydmljZUpvdXJuZXk6ZTYwYzNjNTgxNmY1MTRhMWY5NjU3YmYxMGJkN2ZiYTc=', + mode: 'bus', + aimedStartTime: '2024-01-12T13:05:00+01:00', + aimedEndTime: '2024-01-12T13:28:00+01:00', + expectedEndTime: '2024-01-12T13:28:00+01:00', + expectedStartTime: '2024-01-12T13:05:00+01:00', + realtime: true, + distance: 17846.09, + duration: 1380, + fromPlace: { + name: 'IKEA Slependen', + }, + toPlace: { + name: 'Oslo bussterminal', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Oslo bussterminal', + }, + }, + line: { + publicCode: '250', + name: 'Sætre - Slemmestad - Oslo bussterminal', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + '{lmlJa|a_AFEJKHEFEH?FEFKBM@MASDSLe@@KFSHWFYH[F[Nw@JSHWFMDKDIDABABEL@F@FBDBHHDJFPBP?P@RARERCNGNGFIFI@K@KAw@Sg@o@c@k@m@q@o@m@aA_Aq@o@s@s@k@m@c@e@e@i@]c@]g@U_@S_@Q_@Ue@Uc@]y@[{@_@gA[gA_@qAa@{A[sAmAyEs@uCaAgDwAmEqC{G}DaIgGkKmBiDcAcBcBqCqFeJc@q@U_@mAwB{@wA}@cBO[mA_CcAqB[q@Ys@k@uAQa@GOYs@o@iBe@wAg@{AY_Ag@iBYeAYeAS_A]}A_@_BYyAWqAQeAQcAO}@{@_GaAeIgAiKmAwLaAgJ{@qGmA{H]kBc@_CaAgFYgBMeAIk@Io@Gs@Gy@Gy@Ey@Cw@Ey@A}@Cu@C_BCkDAiACgAAaAE_AC{@Ew@Gy@G{@MsACQUaCuB}SmAoLOyAcBuP}@eIk@mEmA}Iy@_Iu@wLKaBKmAK_AK_AM_AS}ASmASkAMm@ScAq@_DY}A[_BKs@My@Iq@QkAOqAKcAE_@KiAIiAIiAGcAOaCa@sHS_DIwAGsAImAG{@Gu@KgAIcAK}@I_AK{@WsBaAuGcA}GaBaLwBwN{@gGKmAAk@CeCAoACs@E}@MiASsASwA_@yC]}B_@aCEc@Im@SuAM_AKq@CQEWOmAUwBOeBc@qFO_CKkBa@gFo@gFiBsL}A_KoBwMg@iFMuA[}FCY??Iu@QaASe@AGo@oBq@iBg@qBe@yCw@wEm@}Dq@mE_@eCO_A[uBO{@QaAUcAk@}BSw@Uw@e@cB}@sCeB_G}@yCWy@]wAI[[gAK]SaAOs@McAMyA_AyMSiCKyA??OsBKwAG}@Ea@UsBWuBUqBm@qES{AoAsJS}ASmASmAUkA_@mBg@_CYsAYyAYkBQkAMkAKcAKeAWcCIcA??EYKiAYyCUaCUoCSoBUuBKeAQyAW}BYyBc@gDa@_D[wBeC}PSqAMaAIg@Iy@Gm@Ei@Ek@EaAEcAG_BGoAEm@Ec@I{@Ee@EYE_@Mu@Kk@Ki@Mm@Qk@I[Sq@aAsDSm@W{@W}@U{@Sy@Qy@Mq@Ii@Ee@Ge@C_@Ea@Ce@Ci@K_BGwAOkCA[AO?Q@U@U@E@E?G?G?GAEAEAO@K?MBk@JsBFsA???KB]Ba@Dq@Dq@D]D{@LaBr@yFLy@PcAReAVaAPa@Pe@P[n@gAh@}@`@s@Tc@Vm@DOHUZqALq@PgAJ}@D}@DeABeA?eA?iA?q@Ay@Cm@Ew@GqAM}AEo@Aa@Ac@@c@Bk@Fk@D]DYLg@LYJYLSRWd@c@~@gA`AgAPUNSPYP]\\u@Rk@Pe@Le@Pu@Nw@Hc@Jy@LgAHsAF{@H}BF_AFy@NqAPkAVqA^mAf@{AVm@Zm@fB_DpJcP\\k@Tc@d@aAh@}AV{@d@uBZqAXsAJm@Lq@Hm@LaANsAJkAP}BRwCr@iL^eGT_DNmCHsADgA@i@@i@@y@?s@HwADgA?yA?i@Ac@A[A[Ca@E]Ky@_@iCG]EQESKUu@aBGMM[EQGYKc@CSESAO@M?O?MCKCKEGEEAAC?E[EYCY?Y?q@Ac@D{A@o@????Be@BaA@_A?a@?u@Ae@AUAKASCSEa@Ge@G]Ic@GWI[Uq@a@gAcAmCCGGEECCAGOACGOKUQKY{@EIu@kBUq@Oc@KWCEKUMWO_@KWAGGMiA}CiAwCEMGOUo@KWWq@Sk@AA??EMIU]{@MYKOMOEIIKIGAK?GCGCGGIECM?GIEIGOWy@EKEKCGIKCCCCOQCCAA[a@QSQU_@c@QU[_@i@o@KMCEOQIKkAyAMQY]KMAAAAACKKCEcAmAUU?M?IAOGyGAg@AQHQDK`AuBx@gB@Eh@cAh@gA??`@y@JSHSHWFOHWJ_@Lg@Pw@Lu@H_@De@Dg@Ba@@s@?s@Eq@GuAEs@MsBGqAEm@E}@C}@AcBAgA?e@?]?Q?U@_@@k@HoANiAT}B@SHu@F]D[J_@H[j@uBBK@EDOFe@@EDYH[VaAJ]@CFODIFG`AwAZa@??@AHKLOFC?A@?DA@?FA@?B?H@??D@F@NBF?D?FADCFCHGl@m@\\[LOFGFEBEDCDE@APMFChC_ALCNEDDB@F?BADEBIBK@OAOJy@VwCBWL_BD[DEBI@I?IAKB]Fi@JsAD{@HiALoAJ_AFg@@G??LeBLyANkBBSBQHk@BEBG@I?I?G?IAGCIACCAECA?C?C@C@ADCDAHAH?H?H@HBF?F?NAL?RMRILEHABINATKhAIbAIbAO`BALE`@ABGt@KlAKvAAL', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:28:00+01:00', + aimedEndTime: '2024-01-12T13:31:42+01:00', + expectedEndTime: '2024-01-12T13:31:42+01:00', + expectedStartTime: '2024-01-12T13:28:00+01:00', + realtime: false, + distance: 213.19, + duration: 222, + fromPlace: { + name: 'Oslo bussterminal', + }, + toPlace: { + name: 'Oslo bussterminal', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: 'sptlJm|s`A??LoAB[@EPqB@MBa@JD@@FQ??D@HDJsA@@B@DBB@DBDB@@Fu@LwAHwA??', + }, + }, + { + id: 'rO0ABXeTABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAAAAAAAANABFSQjpOU1I6UXVheToxMTk2MAARUkI6TlNSOlF1YXk6MTE0NDIAO1JCOlJVVDpEYXRlZFNlcnZpY2VKb3VybmV5OjZlMjFkOWY5OGIyYmQ4MDg4YjlhN2M4ZjUzNGExOTg2', + mode: 'bus', + aimedStartTime: '2024-01-12T13:40:00+01:00', + aimedEndTime: '2024-01-12T13:59:00+01:00', + expectedEndTime: '2024-01-12T13:59:00+01:00', + expectedStartTime: '2024-01-12T13:40:00+01:00', + realtime: false, + distance: 6755.19, + duration: 1140, + fromPlace: { + name: 'Oslo bussterminal', + }, + toPlace: { + name: 'Alfaset', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Kjeller', + }, + }, + line: { + publicCode: '100', + name: 'Kjeller - Oslo bussterminal', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + '}ktlJynt`ADi@BQBSBQHk@BEBG@I?I?G?IAG@QBQBKH_@Ji@BNBN?DDUBGJm@BM?ARy@d@{Bt@mDZ{ANo@H[@E`@oBt@mDFUBM?CJe@DSFU@KHc@?GDe@Nq@TgAj@mC@A@KBMFa@x@wE@E??F_@l@iDXcB`@eCV_BDYV_@BE??LUBM?OOaBBa@VuC`@}D@KZwCb@iEZgDFk@BUKa@CKGWWqAe@{BOu@EMIc@C_@G[YwAAGM[EQI]EQMm@ScAG[Mq@??OaAKo@Ik@Is@Io@MqAQ_BC]YeCs@}GEi@Gi@KeAEY??E[Iu@Gc@Ga@G]Ic@Kc@i@aCa@aBMk@Kc@[sAIa@Kc@S_A?C??I[C_@AKAa@?W@G@E?GHSBMFYN_@Rm@FUDUBOBQ@O@Q@O?MD]@g@?_@BG@I@KAIAICIEEEAE?EDADADO?I?E?C?E@C@CBEFCBCDSd@EHEFCDEDCBE@E@A@C?I?EAIEECs@q@Uw@WcAe@qBeD_OS{ASgAOiAEy@Ca@?U?O@I@G?IAKCICECCCAA?C?CBEIKUKc@COG[Ge@OkAEU??AIGg@M_AIc@K]GUMc@Uo@q@gBo@yA{B_G_BeEeCyGiBaFeAqC]_Ae@qAY_AMa@??IWSu@Mi@Ke@Mk@Oq@Ki@[iB[cBk@iDqAyHc@eCMs@??Ii@i@wCKi@Ke@COMk@Ou@YsAk@oCoAcGBUGk@Ce@Ao@Ao@AWA[AQC]CWIe@COOgAMo@OaAGWcA}FCMUgA??AESaASu@WaA[gAUu@]cAWy@W{@K]wAsEIYKWMa@Qo@K_@I[CIAMCKAQ@M?Q@Y@QA]KKEGEEEIEOM_@AOK_AKaAIw@Ek@??CSGgAEy@Cs@AaAAs@Ay@As@?q@@yA@gDBsD@wD@_C?oDByD?_@@iB@gB@i@@m@@[@Y?EHg@@U@A@E@E?EAEAEACAAA?A?IIECGCOBG?C?[@[BYB_@FSDy@J??C@OBSEE?KAI?AEACCEEACAC@A@KIGKEGUa@KYQ_@o@oAeAuBiAyBS[MW]o@Wc@[c@[c@i@q@EG??c@i@[_@[]s@w@GIIIYc@EIGKIMGMAAAKAGCEEEEAC@A@KIGEEGQOYk@]s@[w@Um@Sk@IYIUESIYEWGYEYEWE_@Ge@Gk@Ec@C]C_@C_@A]GcBC_@A[Ca@EWCWE]G[G]Qy@Qy@e@yBS_AMq@GSCOEQCMKe@S_AAC', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:59:00+01:00', + aimedEndTime: '2024-01-12T14:14:09+01:00', + expectedEndTime: '2024-01-12T14:14:09+01:00', + expectedStartTime: '2024-01-12T13:59:00+01:00', + realtime: false, + distance: 1074.54, + duration: 909, + fromPlace: { + name: 'Alfaset', + }, + toPlace: { + name: 'Destination', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: + 'egxlJeigaA@A?BRz@DZA@ILEDA@}@aEAECIACCGAE?IUiA?CAEMaA_Br@KBI?GBGHKNW^w@jA]f@ORSRQLMHMBAbD@fA@`ADtADv@s@?ODm@l@SPGJENGNEPI\\GGC?C?ORGZHLCJ?BV\\BDBH@J@NANAJEJEJUf@IN@@DLcApBmA`CIPKREREX@XBXSm@}@iCaAmCgAaE', + }, + }, + ], + systemNotices: [], + }, + { + aimedStartTime: '2024-01-12T12:56:02+01:00', + aimedEndTime: '2024-01-12T14:14:09+01:00', + expectedEndTime: '2024-01-12T14:14:09+01:00', + expectedStartTime: '2024-01-12T12:56:02+01:00', + duration: 4687, + distance: 26193.91, + legs: [ + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T12:56:02+01:00', + aimedEndTime: '2024-01-12T13:00:09+01:00', + expectedEndTime: '2024-01-12T13:00:09+01:00', + expectedStartTime: '2024-01-12T12:56:02+01:00', + realtime: false, + distance: 291.84, + duration: 247, + fromPlace: { + name: 'Origin', + }, + toPlace: { + name: 'Slependen', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: 'o`nlJaac_AZ|@\\z@On@MAk@~@UZ@J@HEX@RLv@@DJVVd@LRNR\\^p@t@|@fA??', + }, + }, + { + id: 'rO0ABXeRABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAABkAAAAeABBSQjpOU1I6UXVheTo3OTI4ABBSQjpOU1I6UXVheTo3MjYzADtSQjpSVVQ6RGF0ZWRTZXJ2aWNlSm91cm5leToyOWIyODMyMDdlZDg3YmRmZjJlYWM4ODdiMTNlZGE2OA==', + mode: 'bus', + aimedStartTime: '2024-01-12T13:00:00+01:00', + aimedEndTime: '2024-01-12T13:07:00+01:00', + expectedEndTime: '2024-01-12T13:07:09+01:00', + expectedStartTime: '2024-01-12T13:00:09+01:00', + realtime: true, + distance: 3475.48, + duration: 420, + fromPlace: { + name: 'Slependen', + }, + toPlace: { + name: 'Sandvika bussterminal', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Sandvika', + }, + }, + line: { + publicCode: '265', + name: 'Sandvika - Nesøya - Sandvika', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + 'yzmlJelb_A[a@QUo@y@WYIKIKQUGKCCEIIOQ]GKEKAGCEAEAICQMi@@I@MAOCKGIK_@E[AYCY?[?_@Dc@Di@LaAJs@B_@BYBY@k@AgAAa@Gi@CUEWG_@EOCMe@{ASq@GUGUMk@EUCSKs@G_@Ek@K_BGiAGg@G_@E[IYEWISO_@KQGKIIMQMKQOWSYSe@]WQOQIKQSOSU]Yg@QYOW??S[]m@y@wAq@mAa@s@Ua@Q_@MUQ[Wo@Yo@M[Ug@Q[CGCCCECEOQOSCKYWMIECCAKEMAIAOAS?I?KBM@]LWLCHe@PODMDQDG@G?K@M?I?IAMAMAKEKCICIE[MCKYOIEECCC?IAGAGCECECCA?C?A?EKCICGCICKIWEKCIUa@??aEaI[k@S]EKEKCIAGGMGK?GAOCMGKGEG?GBGHCHAJAJKLML}@jAe@\\EMGGGAEk@AS?S@QBOFO~AoDzAoDz@wBP]HBHCFIDM@Q?QAOEMGIICIBOOOSSQQ_@Q_@???AO[O]o@eBWu@Ws@k@iBe@aBMYEIIMGEEAEAG@GDIFUV??UZKHSHKBO?SCQGKGKMOQKYK_@E]C[ASA[A}BB[@_@@]?M?MAKEKEECAE?EBCFCFALMPU\\WLUPYV[\\e@l@s@lAq@nAmAnBY\\_@Zc@^[V]@WJCCEAE?C@EFCHCL?F?D@F@F@FBFBBD@D?PX\\l@b@nBRDFDFNd@hB^xALb@d@nBBL?LALCJCFEBE@E?EGEIi@_CI_@[kA]uA', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:07:09+01:00', + aimedEndTime: '2024-01-12T13:09:59+01:00', + expectedEndTime: '2024-01-12T13:09:59+01:00', + expectedStartTime: '2024-01-12T13:07:09+01:00', + realtime: false, + distance: 189.05, + duration: 170, + fromPlace: { + name: 'Sandvika bussterminal', + }, + toPlace: { + name: 'Sandvika stasjon', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: 'm{plJ}uf_A??nAbD@DB?@DH?L?LOVYS_As@_E@?', + }, + }, + { + id: 'rO0ABXeDABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAAAEAAAAEAA9SQjpOU1I6UXVheTo5OTMAD1JCOk5TUjpRdWF5OjQ3NwAvUkI6TlNCOkRhdGVkU2VydmljZUpvdXJuZXk6MzE5X0FTUi1MSE1fMjQtMDEtMTI=', + mode: 'rail', + aimedStartTime: '2024-01-12T13:15:00+01:00', + aimedEndTime: '2024-01-12T13:27:00+01:00', + expectedEndTime: '2024-01-12T13:27:10+01:00', + expectedStartTime: '2024-01-12T13:15:00+01:00', + realtime: true, + distance: 12466.92, + duration: 730, + fromPlace: { + name: 'Sandvika stasjon', + }, + toPlace: { + name: 'Nationaltheatret stasjon', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Lillehammer', + }, + }, + line: { + publicCode: 'RE10', + name: 'Drammen-Oslo S-Lillehammer', + }, + authority: { + name: 'Vy', + }, + pointsOnLink: { + points: + '{xplJ{yf_AAEo@kC_@yA]uAo@aC_@wAYgAc@gBWiAWmAa@aBGYQu@q@uCe@oB??e@sB[yAUeAOs@UkA]cBQcAOw@O}@My@o@}Dk@sDuA{I{B{NqAoIe@yCq@{DcAoFs@aDq@iCs@mCw@eCi@cBs@qByAsD}DqI}CgGiAyB}@gB{@kBu@cBs@_By@qBu@kBm@_B{@cCo@kBs@wBq@uBcAiDq@aCe@iBe@kBg@qBe@oBk@iCe@wBc@wB_@sBY{Ae@iCm@qDi@oD_@eCi@}De@uDi@aFi@gF_@eEi@_Hq@wJeCy]k@iIqNarBc@yGWaFUqEMuCMeDIeDI}CGiCGkCCcCEwDGcGs@ax@EsGCwBAqB@_A?w@@o@B{@Bk@@o@Du@Do@Fw@Fq@Fs@Fm@Fi@Ju@Z{B\\iC`@{CJq@Js@NmAPsAHw@JeAHmALgBF}ABsABsA?G?????u@?_AAuAAy@Ai@Ac@Cq@A_@Ci@Ck@Ei@G{@IgAOgBOqB[}D??YcDEo@KiAKcAIs@Kq@MaAQgASoAO{@SeAWkAc@qBm@eC[iAQs@Oo@Om@Mm@Kg@Mo@Ko@Ku@Ks@Iu@I}@I_AGeAEw@GiAEcAIyBEs@Eq@GcAIy@Ek@Iw@Ii@Im@Ig@O{@Km@S_AUaAU}@[aAY{@Ww@u@yBQi@Wo@k@cBe@wAYy@Y{@??a@sAOg@uA_F_@oAYeAi@mBi@iBi@gBe@wA[}@qDoKc@qAY_Aa@sASw@Qu@Oo@Om@Ms@O{@Mq@Ii@MaAKw@Gk@Ee@C]Ee@Cc@Ci@Co@Cs@?[Aa@??AaA?o@?i@@]@q@@m@D}@F{@H}@Hy@Ju@PeARmA~@cFLo@????BMp@wD^uBN}@PcARmARwAZ_CPuAPiAPcARgAVuATmAHa@Lq@Lo@ReALo@Lm@??VsANu@RgAJm@Jq@NaANmAR_BN_BNeBL_BHqADeAD}@DgABu@B{@@_A@y@@y@@cA?iAA{AAeAA_AAy@C_ACy@C_AMsDKkCGiB??KyCKiDE_BC{AAkA?eAAeA@oA@kA@gABwADoAD_BH{AFaAFiAHgAFaAl@}Jn@}JPoCLuBPeCLuALsALoALkANkATaBn@oE|@_GfAqH@KVcBNaAP}@f@kCTmAVsA??XyAb@aCLo@NcALw@Ho@Hq@Hw@HgAHaADu@Dw@H}Ab@_K??', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:27:10+01:00', + aimedEndTime: '2024-01-12T13:32:00+01:00', + expectedEndTime: '2024-01-12T13:32:00+01:00', + expectedStartTime: '2024-01-12T13:27:10+01:00', + realtime: false, + distance: 326.35, + duration: 290, + fromPlace: { + name: 'Nationaltheatret stasjon', + }, + toPlace: { + name: 'Nationaltheatret', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: '_fulJefn`A??l@yJNqD@OCSCWWeCCQKcAEOEQ]f@SCt@cB??', + }, + }, + { + id: 'rO0ABXeSABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAAAsAAAARABBSQjpOU1I6UXVheTo3MzMzABFSQjpOU1I6UXVheToxMTEzNAA7UkI6UlVUOkRhdGVkU2VydmljZUpvdXJuZXk6NzQzMTQyMWUzM2FlNDU2YmMzOTQ5OWEyMTAyN2M2Mzg=', + mode: 'metro', + aimedStartTime: '2024-01-12T13:34:00+01:00', + aimedEndTime: '2024-01-12T13:44:00+01:00', + expectedEndTime: '2024-01-12T13:44:00+01:00', + expectedStartTime: '2024-01-12T13:34:00+01:00', + realtime: true, + distance: 4410.74, + duration: 600, + fromPlace: { + name: 'Nationaltheatret', + }, + toPlace: { + name: 'Helsfyr', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Ellingsrudåsen', + }, + }, + line: { + publicCode: '2', + name: 'Østerås - Ellingsrudåsen', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + 'seulJ{co`AHMTm@FKBa@@KJu@NuAL{@Jw@Lu@Ls@Hk@Lo@?AVyAf@oCLs@Lw@Ho@Js@Fs@Hu@HwADaADkAD}@?WP{EDo@Fm@LiELeD??By@NmEBy@Du@Bk@JgAJcAL_APeAX{A\\aBd@iCL_AJ{@H{@Bi@@g@@e@FgCBcA?OHuD??@[JyE@uA@oAAiAGaAGy@Iy@M{@{@sEOeAIo@IiAEkAAeA?qAH}H??@i@D}DDqC@y@@e@B{@Be@H_ArAeMR}BFuA@yAEwAIsAO{ASqAWgAa@mAe@_Ag@m@mByB]k@[q@Yy@YkASkAQsAYkCKy@Ko@Ms@Ka@Me@Ma@O_@O_@Sa@Yi@uAeCa@u@??w@yAQc@Oa@K[K_@Ma@Mg@g@uBOk@Oi@Mc@Oa@O[Q[QYEc@Cs@Am@Am@@o@@g@@g@Bi@Di@De@Fc@Fc@Hg@Nm@Ja@La@N_@N]R_@RYPYVUTSRMPIPIl@WRITKNKNMLKNQPSRYLULUHSJUHUJYHUNc@Lg@Pk@Lg@Lg@P{@Ha@n@{CH]R}@??`@mBH_@Lq@DYDYD]Da@B]Dg@@_@Bi@@g@?c@?c@Ae@A_@Ck@Eo@?AWwCEq@Eq@Cu@Cw@Cc@Ao@?m@?k@?q@?y@@k@B{@j@oOD}@FgAHw@LuANgAn@uFHw@', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:44:00+01:00', + aimedEndTime: '2024-01-12T13:44:32+01:00', + expectedEndTime: '2024-01-12T13:44:32+01:00', + expectedStartTime: '2024-01-12T13:44:00+01:00', + realtime: false, + distance: 33.93, + duration: 32, + fromPlace: { + name: 'Helsfyr', + }, + toPlace: { + name: 'Helsfyr T', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: '_utlJws|`ABBAb@i@G??', + }, + }, + { + id: 'rO0ABXeTABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAAAYAAAANABFSQjpOU1I6UXVheToxMTE0MgARUkI6TlNSOlF1YXk6MTE0NDIAO1JCOlJVVDpEYXRlZFNlcnZpY2VKb3VybmV5OjZlMjFkOWY5OGIyYmQ4MDg4YjlhN2M4ZjUzNGExOTg2', + mode: 'bus', + aimedStartTime: '2024-01-12T13:49:00+01:00', + aimedEndTime: '2024-01-12T13:59:00+01:00', + expectedEndTime: '2024-01-12T13:59:00+01:00', + expectedStartTime: '2024-01-12T13:49:00+01:00', + realtime: false, + distance: 3925.06, + duration: 600, + fromPlace: { + name: 'Helsfyr T', + }, + toPlace: { + name: 'Alfaset', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Kjeller', + }, + }, + line: { + publicCode: '100', + name: 'Kjeller - Oslo bussterminal', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + 'wvtlJsr|`AAIGg@M_AIc@K]GUMc@Uo@q@gBo@yA{B_G_BeEeCyGiBaFeAqC]_Ae@qAY_AMa@??IWSu@Mi@Ke@Mk@Oq@Ki@[iB[cBk@iDqAyHc@eCMs@??Ii@i@wCKi@Ke@COMk@Ou@YsAk@oCoAcGBUGk@Ce@Ao@Ao@AWA[AQC]CWIe@COOgAMo@OaAGWcA}FCMUgA??AESaASu@WaA[gAUu@]cAWy@W{@K]wAsEIYKWMa@Qo@K_@I[CIAMCKAQ@M?Q@Y@QA]KKEGEEEIEOM_@AOK_AKaAIw@Ek@??CSGgAEy@Cs@AaAAs@Ay@As@?q@@yA@gDBsD@wD@_C?oDByD?_@@iB@gB@i@@m@@[@Y?EHg@@U@A@E@E?EAEAEACAAA?A?IIECGCOBG?C?[@[BYB_@FSDy@J??C@OBSEE?KAI?AEACCEEACAC@A@KIGKEGUa@KYQ_@o@oAeAuBiAyBS[MW]o@Wc@[c@[c@i@q@EG??c@i@[_@[]s@w@GIIIYc@EIGKIMGMAAAKAGCEEEEAC@A@KIGEEGQOYk@]s@[w@Um@Sk@IYIUESIYEWGYEYEWE_@Ge@Gk@Ec@C]C_@C_@A]GcBC_@A[Ca@EWCWE]G[G]Qy@Qy@e@yBS_AMq@GSCOEQCMKe@S_AAC', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:59:00+01:00', + aimedEndTime: '2024-01-12T14:14:09+01:00', + expectedEndTime: '2024-01-12T14:14:09+01:00', + expectedStartTime: '2024-01-12T13:59:00+01:00', + realtime: false, + distance: 1074.54, + duration: 909, + fromPlace: { + name: 'Alfaset', + }, + toPlace: { + name: 'Destination', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: + 'egxlJeigaA@A?BRz@DZA@ILEDA@}@aEAECIACCGAE?IUiA?CAEMaA_Br@KBI?GBGHKNW^w@jA]f@ORSRQLMHMBAbD@fA@`ADtADv@s@?ODm@l@SPGJENGNEPI\\GGC?C?ORGZHLCJ?BV\\BDBH@J@NANAJEJEJUf@IN@@DLcApBmA`CIPKREREX@XBXSm@}@iCaAmCgAaE', + }, + }, + ], + systemNotices: [], + }, + { + aimedStartTime: '2024-01-12T12:56:02+01:00', + aimedEndTime: '2024-01-12T14:17:28+01:00', + expectedEndTime: '2024-01-12T14:17:28+01:00', + expectedStartTime: '2024-01-12T12:56:02+01:00', + duration: 4886, + distance: 28471.820000000003, + legs: [ + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T12:56:02+01:00', + aimedEndTime: '2024-01-12T13:00:09+01:00', + expectedEndTime: '2024-01-12T13:00:09+01:00', + expectedStartTime: '2024-01-12T12:56:02+01:00', + realtime: false, + distance: 291.84, + duration: 247, + fromPlace: { + name: 'Origin', + }, + toPlace: { + name: 'Slependen', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: 'o`nlJaac_AZ|@\\z@On@MAk@~@UZ@J@HEX@RLv@@DJVVd@LRNR\\^p@t@|@fA??', + }, + }, + { + id: 'rO0ABXeRABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAABkAAAAeABBSQjpOU1I6UXVheTo3OTI4ABBSQjpOU1I6UXVheTo3MjYzADtSQjpSVVQ6RGF0ZWRTZXJ2aWNlSm91cm5leToyOWIyODMyMDdlZDg3YmRmZjJlYWM4ODdiMTNlZGE2OA==', + mode: 'bus', + aimedStartTime: '2024-01-12T13:00:00+01:00', + aimedEndTime: '2024-01-12T13:07:00+01:00', + expectedEndTime: '2024-01-12T13:07:09+01:00', + expectedStartTime: '2024-01-12T13:00:09+01:00', + realtime: true, + distance: 3475.48, + duration: 420, + fromPlace: { + name: 'Slependen', + }, + toPlace: { + name: 'Sandvika bussterminal', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Sandvika', + }, + }, + line: { + publicCode: '265', + name: 'Sandvika - Nesøya - Sandvika', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + 'yzmlJelb_A[a@QUo@y@WYIKIKQUGKCCEIIOQ]GKEKAGCEAEAICQMi@@I@MAOCKGIK_@E[AYCY?[?_@Dc@Di@LaAJs@B_@BYBY@k@AgAAa@Gi@CUEWG_@EOCMe@{ASq@GUGUMk@EUCSKs@G_@Ek@K_BGiAGg@G_@E[IYEWISO_@KQGKIIMQMKQOWSYSe@]WQOQIKQSOSU]Yg@QYOW??S[]m@y@wAq@mAa@s@Ua@Q_@MUQ[Wo@Yo@M[Ug@Q[CGCCCECEOQOSCKYWMIECCAKEMAIAOAS?I?KBM@]LWLCHe@PODMDQDG@G?K@M?I?IAMAMAKEKCICIE[MCKYOIEECCC?IAGAGCECECCA?C?A?EKCICGCICKIWEKCIUa@??aEaI[k@S]EKEKCIAGGMGK?GAOCMGKGEG?GBGHCHAJAJKLML}@jAe@\\EMGGGAEk@AS?S@QBOFO~AoDzAoDz@wBP]HBHCFIDM@Q?QAOEMGIICIBOOOSSQQ_@Q_@???AO[O]o@eBWu@Ws@k@iBe@aBMYEIIMGEEAEAG@GDIFUV??UZKHSHKBO?SCQGKGKMOQKYK_@E]C[ASA[A}BB[@_@@]?M?MAKEKEECAE?EBCFCFALMPU\\WLUPYV[\\e@l@s@lAq@nAmAnBY\\_@Zc@^[V]@WJCCEAE?C@EFCHCL?F?D@F@F@FBFBBD@D?PX\\l@b@nBRDFDFNd@hB^xALb@d@nBBL?LALCJCFEBE@E?EGEIi@_CI_@[kA]uA', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:07:09+01:00', + aimedEndTime: '2024-01-12T13:09:59+01:00', + expectedEndTime: '2024-01-12T13:09:59+01:00', + expectedStartTime: '2024-01-12T13:07:09+01:00', + realtime: false, + distance: 189.05, + duration: 170, + fromPlace: { + name: 'Sandvika bussterminal', + }, + toPlace: { + name: 'Sandvika stasjon', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: 'm{plJ}uf_A??nAbD@DB?@DH?L?LOVYS_As@_E@?', + }, + }, + { + id: 'rO0ABXeDABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAAAEAAAAFAA9SQjpOU1I6UXVheTo5OTMAD1JCOk5TUjpRdWF5OjU3MQAvUkI6TlNCOkRhdGVkU2VydmljZUpvdXJuZXk6MzE5X0FTUi1MSE1fMjQtMDEtMTI=', + mode: 'rail', + aimedStartTime: '2024-01-12T13:15:00+01:00', + aimedEndTime: '2024-01-12T13:31:00+01:00', + expectedEndTime: '2024-01-12T13:31:00+01:00', + expectedStartTime: '2024-01-12T13:15:00+01:00', + realtime: true, + distance: 14113.62, + duration: 960, + fromPlace: { + name: 'Sandvika stasjon', + }, + toPlace: { + name: 'Oslo S', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Lillehammer', + }, + }, + line: { + publicCode: 'RE10', + name: 'Drammen-Oslo S-Lillehammer', + }, + authority: { + name: 'Vy', + }, + pointsOnLink: { + points: + '{xplJ{yf_AAEo@kC_@yA]uAo@aC_@wAYgAc@gBWiAWmAa@aBGYQu@q@uCe@oB??e@sB[yAUeAOs@UkA]cBQcAOw@O}@My@o@}Dk@sDuA{I{B{NqAoIe@yCq@{DcAoFs@aDq@iCs@mCw@eCi@cBs@qByAsD}DqI}CgGiAyB}@gB{@kBu@cBs@_By@qBu@kBm@_B{@cCo@kBs@wBq@uBcAiDq@aCe@iBe@kBg@qBe@oBk@iCe@wBc@wB_@sBY{Ae@iCm@qDi@oD_@eCi@}De@uDi@aFi@gF_@eEi@_Hq@wJeCy]k@iIqNarBc@yGWaFUqEMuCMeDIeDI}CGiCGkCCcCEwDGcGs@ax@EsGCwBAqB@_A?w@@o@B{@Bk@@o@Du@Do@Fw@Fq@Fs@Fm@Fi@Ju@Z{B\\iC`@{CJq@Js@NmAPsAHw@JeAHmALgBF}ABsABsA?G?????u@?_AAuAAy@Ai@Ac@Cq@A_@Ci@Ck@Ei@G{@IgAOgBOqB[}D??YcDEo@KiAKcAIs@Kq@MaAQgASoAO{@SeAWkAc@qBm@eC[iAQs@Oo@Om@Mm@Kg@Mo@Ko@Ku@Ks@Iu@I}@I_AGeAEw@GiAEcAIyBEs@Eq@GcAIy@Ek@Iw@Ii@Im@Ig@O{@Km@S_AUaAU}@[aAY{@Ww@u@yBQi@Wo@k@cBe@wAYy@Y{@??a@sAOg@uA_F_@oAYeAi@mBi@iBi@gBe@wA[}@qDoKc@qAY_Aa@sASw@Qu@Oo@Om@Ms@O{@Mq@Ii@MaAKw@Gk@Ee@C]Ee@Cc@Ci@Co@Cs@?[Aa@??AaA?o@?i@@]@q@@m@D}@F{@H}@Hy@Ju@PeARmA~@cFLo@????BMp@wD^uBN}@PcARmARwAZ_CPuAPiAPcARgAVuATmAHa@Lq@Lo@ReALo@Lm@??VsANu@RgAJm@Jq@NaANmAR_BN_BNeBL_BHqADeAD}@DgABu@B{@@_A@y@@y@@cA?iAA{AAeAA_AAy@C_ACy@C_AMsDKkCGiB??KyCKiDE_BC{AAkA?eAAeA@oA@kA@gABwADoAD_BH{AFaAFiAHgAFaAl@}Jn@}JPoCLuBPeCLuALsALoALkANkATaBn@oE|@_GfAqH@KVcBNaAP}@f@kCTmAVsA??XyAb@aCLo@NcALw@Ho@Hq@Hw@HgAHaADu@Dw@H}Ab@_K????d@gKF_BBs@Dw@DaBBaABs@Bm@Bm@@_@B[B_@Bg@Do@B_@D]Fu@??Fs@Fq@J_AJw@Fk@Hk@Jo@Jq@F_@Lu@Nw@??ZcBPeA\\gBN_ANu@Lu@L{@Jm@Ly@L_ANkAHw@Hs@H_AL}AHqAHkAFsAF{ADoABmAHgDDuABgADcAFy@F_AF}@H_AH{@LqAJ{@??@[B]@]??F[DUFa@Fe@Hs@He@L{@Ny@??P_AJg@Lk@Lk@Rs@Po@J_@H[J]Nk@Lo@Pq@Jm@Lm@Lw@??^iCf@_D??', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:31:00+01:00', + aimedEndTime: '2024-01-12T13:38:59+01:00', + expectedEndTime: '2024-01-12T13:38:59+01:00', + expectedStartTime: '2024-01-12T13:31:00+01:00', + realtime: false, + distance: 436.66, + duration: 479, + fromPlace: { + name: 'Oslo S', + }, + toPlace: { + name: 'Bjørvika', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: + '_gtlJuqs`A??FHER?BCH\\ZZXZXXXBG?EDSb@{B@@@OB@D?F?B?b@yCBMDSXqALFP@BAD?DCDEBGBKBKBIB?@?NJHHLNHH@@@@?@?@BB?BAFADNJp@`@NJ@K?CFc@?G??CC?A?A@A@A?A?ACC????AAAAFc@FYF]AA', + }, + }, + { + id: 'rO0ABXeSABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAAAEAAAAFABBSQjpOU1I6UXVheTo3MTY5ABFSQjpOU1I6UXVheToxMDQwMgA7UkI6UlVUOkRhdGVkU2VydmljZUpvdXJuZXk6YzA3MTEwYjI3YjM5N2VmZmUwMTRjZDgxYTEzNzhhODI=', + mode: 'bus', + aimedStartTime: '2024-01-12T13:43:00+01:00', + aimedEndTime: '2024-01-12T13:54:00+01:00', + expectedEndTime: '2024-01-12T13:54:00+01:00', + expectedStartTime: '2024-01-12T13:43:00+01:00', + realtime: false, + distance: 8270.2, + duration: 660, + fromPlace: { + name: 'Bjørvika', + }, + toPlace: { + name: 'Trosterud', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Blystadlia', + }, + }, + line: { + publicCode: '300', + name: 'Blystadlia - Ahus - Oslo bussterminal', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + 'wwslJe~s`ADU`@oCF[`@mCRuAFa@Hg@XeBPiAFc@Fc@ZsBPgAHk@PJr@`@lHhEJFxEnCLHPHPJNFNDHBH@PBP@ZCPCNEPEFANGPIRKZQv@a@pCyAVMHCDABAB?BAD?DFDBD@DADCDGBK@KXQ\\ID?Z?VGBGDI\\s@b@gAl@oB^yAXwARkAPuAL_AJaALwBHwBBmBAoBEuCKmBWcDMoAKqA}BeToAsLg@mEi@wFm@iF[wBi@cCi@sBg@yAe@eAKQk@cAeDyD[]IKSU_BgBs@y@{@cAe@k@k@m@a@e@a@g@uAkB]e@_@m@a@w@Wq@So@WaAM{@QkAM{AKeBMwCQiGGuBG_BKyAMiAOw@Os@Ws@[q@_@i@]]]UYMWEYCW?UDSDUJSLULWT}AtA[VWPYLUFG@]DUCMCMG[SWWSYUa@Qc@Uw@WcAe@qBeD_OS{ASgAOiAEy@Ca@?U?O@I@G?IAKCICECCCAA?C?CBEIKUKc@COG[Ge@OkAEU??AIGg@M_AIc@K]GUMc@Uo@q@gBo@yA{B_G_BeEeCyGiBaFeAqC]_Ae@qAY_AMa@??IWSu@Mi@Ke@Mk@Oq@Ki@[iB[cBk@iDqAyHc@eCMs@??Ii@i@wCKi@Ke@COMk@Ou@YsAk@oCoAcGo@{CWiAYiAcAmDqBeHgBiGqBcHc@cBc@eBUgASiAQoAIi@Gi@ScCKaBKmBMuBCw@CiB?{BAiBAuA?yA?sA@yB@gC@{D?{A?{A?qA?sAAuAAqACuACqAEwAEkACiAGmAGqAI{AKkBKsAKoAKqAMmAMqAGm@K{@MgAM{@UeBWaBSsAc@oCa@kCSwAYsBQqAQ}AQ{AMqAMkAQuBm@yGOcB]cDMoAYwBWmBc@mC_@qB_@mBi@sDSiAe@}BOu@Oq@YeAOk@Qg@Wu@Oe@Q[M[Wk@We@EI', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:54:00+01:00', + aimedEndTime: '2024-01-12T14:17:28+01:00', + expectedEndTime: '2024-01-12T14:17:28+01:00', + expectedStartTime: '2024-01-12T13:54:00+01:00', + realtime: false, + distance: 1694.97, + duration: 1408, + fromPlace: { + name: 'Trosterud', + }, + toPlace: { + name: 'Destination', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: + 'sywlJw}haA?A?ECOAM@K?G@E@I@EBCBEFCPEBABCBC@E@G@K@YBSBSDKJQIMCCCCCAE?G@k@JG?IAKESMGCK?I?GDGFGLYt@_@|@Ul@c@bAOZCFAFAFAFAPAVCZAF?HCNGAI@IFIHILKTUh@iA`Cc@dAw@rBQd@M^Od@Mh@Mh@Mb@GPGNINGDI@i@b@YPC@OHQFUHUHu@TBz@BlALADAD?DBFBJHHPCHIx@ABK`AIh@CNIb@Ir@Y~CO~BAbD@fA@`ADtADv@s@?ODm@l@SPGJENGNEPI\\GGC?C?ORGZHLCJ?BV\\BDBH@J@NANAJEJEJUf@IN@@DLcApBmA`CIPKREREX@XBXSm@}@iCaAmCgAaE', + }, + }, + ], + systemNotices: [], + }, + { + aimedStartTime: '2024-01-12T12:41:00+01:00', + aimedEndTime: '2024-01-12T14:18:50+01:00', + expectedEndTime: '2024-01-12T14:18:50+01:00', + expectedStartTime: '2024-01-12T12:41:00+01:00', + duration: 5870, + distance: 35115.93, + legs: [ + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T12:41:00+01:00', + aimedEndTime: '2024-01-12T12:45:07+01:00', + expectedEndTime: '2024-01-12T12:45:07+01:00', + expectedStartTime: '2024-01-12T12:41:00+01:00', + realtime: false, + distance: 291.84, + duration: 247, + fromPlace: { + name: 'Origin', + }, + toPlace: { + name: 'Slependen', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: 'o`nlJaac_AZ|@\\z@On@MAk@~@UZ@J@HEX@RLv@@DJVVd@LRNR\\^p@t@|@fA??', + }, + }, + { + id: 'rO0ABXeRABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAAA8AAAAUABBSQjpOU1I6UXVheTo3OTI4ABBSQjpOU1I6UXVheTo3MjY1ADtSQjpSVVQ6RGF0ZWRTZXJ2aWNlSm91cm5leTpiYzAwOGYwN2YxYzRhMDQ1YzE5ZjEwY2Q3MTQyZDliMQ==', + mode: 'bus', + aimedStartTime: '2024-01-12T12:43:00+01:00', + aimedEndTime: '2024-01-12T12:48:00+01:00', + expectedEndTime: '2024-01-12T12:50:07+01:00', + expectedStartTime: '2024-01-12T12:45:07+01:00', + realtime: true, + distance: 3232.21, + duration: 300, + fromPlace: { + name: 'Slependen', + }, + toPlace: { + name: 'Sandvika bussterminal', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Sandvika', + }, + }, + line: { + publicCode: '270', + name: 'Asker - Sandvika (- Fornebu)', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + 'yzmlJelb_A[a@QUo@y@WYIKIKQUGKCCEIIOQ]GKEKAGCEAEAICQMi@@I@MAOCKGIK_@E[AYCY?[?_@Dc@Di@LaAJs@B_@BYBY@k@AgAAa@Gi@CUEWG_@EOCMe@{ASq@GUGUMk@EUCSKs@G_@Ek@K_BGiAGg@G_@E[IYEWISO_@KQGKIIMQMKQOWSYSe@]WQOQIKQSOSU]Yg@QYOW??S[]m@y@wAq@mAa@s@Ua@Q_@MUQ[Wo@Yo@M[Ug@Q[CGCCCECEOQOSCKYWMIECCAKEMAIAOAS?I?KBM@]LWLCHe@PODMDQDG@G?K@M?I?IAMAMAKEKCICIE[MCKYOIEECCC?IAGAGCECECCA?C?A?EKCICGCICKIWEKCIUa@??aEaI[k@S]EKEKCIAGGMGK?GAOCMGKGEG?GBGHCHAJAJKLML}@jAe@\\EMGGGAMDEJEPAPBV[jAYzA]nB]bBs@lCYv@E@EBEHCJCL?L@F?D@DEVCNEP{@jCm@|A??O\\MZKRIRCDKGMKOQ?A?AAAAC?AAECUCUAM?A??C_@AIASCY]}E?MC]AKEm@AOCa@ASAKAUCUCQCQAMAKIk@_@cCMy@Eg@?C@C?GAEAEAAEOM_AU{ASuAKi@K_@IUUUMOI?{@aBWi@M_@I[GSK]Qw@UcAYuAQy@IYIUKUGq@EY@MLWnA_BNQBBD@D?PX\\l@b@nBRDFDFNd@hB^xABJ', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T12:50:07+01:00', + aimedEndTime: '2024-01-12T12:52:07+01:00', + expectedEndTime: '2024-01-12T12:52:07+01:00', + expectedStartTime: '2024-01-12T12:50:07+01:00', + realtime: false, + distance: 125.59, + duration: 120, + fromPlace: { + name: 'Sandvika bussterminal', + }, + toPlace: { + name: 'Sandvika stasjon', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: '}xplJ{pf_A?@@DB?@DH?L?LOVYS_A_AqD??', + }, + }, + { + id: 'rO0ABXeEABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAAAYAAAARAA9SQjpOU1I6UXVheTo5OTAAD1JCOk5TUjpRdWF5OjYwNAAwUkI6TlNCOkRhdGVkU2VydmljZUpvdXJuZXk6MjEzNF9BU1ItTExTXzI0LTAxLTEy', + mode: 'rail', + aimedStartTime: '2024-01-12T13:02:00+01:00', + aimedEndTime: '2024-01-12T13:37:00+01:00', + expectedEndTime: '2024-01-12T13:37:20+01:00', + expectedStartTime: '2024-01-12T13:02:00+01:00', + realtime: true, + distance: 24463.5, + duration: 2120, + fromPlace: { + name: 'Sandvika stasjon', + }, + toPlace: { + name: 'Grorud stasjon', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Lillestrøm', + }, + }, + line: { + publicCode: 'L1', + name: 'Spikkestad-Oslo S-Lillestrøm', + }, + authority: { + name: 'Vy', + }, + pointsOnLink: { + points: + 'qyplJcyf_AkBeIi@_C]yAYmAc@kBWgAYoAaBkH{@oDmAmFUcAu@_D_@}A??u@gDi@yBEWOq@YkAUaA{@iDc@eBU{@WcAOo@Mm@Mq@Kk@Ig@Ii@Im@Io@I{@I_AEs@Es@Ew@CeACgAAy@?s@@w@@y@@o@By@B}@F}@F}@F{@Hy@J{@Ju@RqAz@iFRkAJm@Js@De@Fc@De@Dc@Dm@Fo@Bo@Ds@@k@Bk@@m@@k@?i@?m@?i@Ak@Au@Cq@Cq@Cu@Es@Gw@AI????Iy@Gi@Gg@Gi@Ig@Ig@Ie@Kg@G]Ka@K]W_AQm@Qi@c@qAQk@M]Ka@K_@Ke@Mg@I_@Ki@Kk@Ik@Im@Gi@Gm@Gm@Ek@Cm@Eo@Cy@Cw@Aq@Am@?_A?q@?{@HeTFyO@i@F}L?_A?o@?o@Ai@Ak@Ck@Ag@Ce@Ck@Cg@Ek@Gi@Ei@Iq@M_AO_AIg@SuAO{@CUw@gFa@mCm@kEMy@mByM????q@mEk@}DQkAQgA]qBUuAWsAUuAIc@g@uCQgAQiAk@aE??a@wC]gCSoASoAMy@Q}@UoAQw@Qy@Sw@U{@W}@Sq@Og@Qk@Oc@Wq@Si@Uk@i@sAUk@Ys@Um@Qe@Oe@Sm@Om@Sq@Oi@Qu@Oo@Ou@Mq@Mo@Kq@Ms@Ks@K{@[{Bo@aFWkBSaBUgBMy@My@Ku@Ku@Mw@O_AO}@Ms@Q}@UkACK????ESOm@Qq@Mi@Og@_@mASs@Uw@a@wAUy@]kAs@cC]kAQs@]oAYeAWiAyA{F}AgGwAuFYmAUy@Sw@a@aB{AcGuAqFyA}F[kAWaAS{@Qq@U{@GYQq@[mAMe@I]Kc@Ka@Ig@Ke@Gc@Ii@Gg@Io@Ee@Gw@Ek@Cm@Ag@Ak@As@As@?s@@s@Bu@@m@Dm@Bq@Fu@Do@Fq@Fo@Fg@Hq@Z{B??JaAFk@Dg@??Jg@DWHc@Jm@??Js@Hq@RsAPsAJu@NiALgAHmAHoADkABeA@iA?E?????u@?aAAs@Cs@Cm@Ce@A_@Ce@Ei@IaAKgAG{@YmDK_AI}@Is@Iu@IcAYcDEo@KiAKcAIs@Kq@MaAQgASoAO{@SeAWkAc@qBm@eC[iAQs@Oo@Om@Mm@Kg@Mo@Ko@Ku@Ks@Iu@I}@I_AGeAEw@GiAEcAIyBEs@Eq@GcAIy@Ek@Iw@Ii@Im@Ig@O{@Km@S_AUaAU}@[aAY{@Ww@u@yBQi@Wo@k@cBe@wAYy@Y{@sAwD{@eCSm@??Sm@I_@Ka@IYMc@Si@??Mi@IYI[EU??Oc@GQMa@i@{AmEoMe@qA[}@Qo@Oc@Oo@Ka@Mk@Kg@Mk@G[E[M_A??Ig@Ic@CO??AOCYC]Kw@OsAE_@Ec@Eo@Ac@Cg@Ao@A}@A_A@cA?}@Bw@@o@??D}@Dy@H_AHy@H{@Hk@Ju@L}@x@cFJq@????BMDQj@eD|@kFX}AZgBXcBf@qCVuAN}@Nu@Nu@R{@XqA`@iBLo@Lm@??VsANu@RgAJm@Jq@NaANmAR_BN_BNeBL_BHqADeAD}@DgABu@B{@@_A@y@@y@@cA?iAA{AAeAA_AAy@C_ACy@C_AMsDKkCGiB??KyCKiDE_BC{AAkA?eAAeA@oA@kA@gABwADoAD_BH{AFaAFiAHgAFaAl@}Jn@}JPoCLuBPeCLuALsALoALkANkATaBn@oE|@_GfAqH@KVcBNaAP}@f@kCTmAVsA??XyAb@aCLo@NcALw@Ho@Hq@Hw@HgAHaADu@Dw@H}Ab@_K????d@gKF_BBs@Dw@DaBBaABs@Bm@Bm@@_@B[B_@Bg@Do@B_@D]Fu@??Fs@Fq@J_AJw@Fk@Hk@Jo@Jq@F_@Lu@Nw@??ZcBPeA\\gBN_ANu@Lu@L{@Jm@Ly@L_ANkAHw@Hs@H_AL}AHqAHkAFsAF{ADoABmAHgDDuABgADcAFy@F_AF}@H_AH{@LqAJ{@??@[B]@]??F[DUFa@Fe@Hs@He@L{@Ny@??RuALw@Jk@Jg@Ji@\\{AR}@Ns@N{@L_AVcB??^gCf@cD????p@qE|@eGh@iD??j@uDb@yCn@aE`@oCNaANgALiAJiADi@Fo@Dw@LwBFiA??Fm@Hu@PcBLsARoB??Z}CH}@`@wDXcDb@}DH_A??Dc@B_@Dq@@]Fk@H}@??Z{C??Ba@D_@@WB]@WDm@??TqBViCTgCL{ALyANiBLaBJqAHuAD_AHkADgADgADeAFqB@[Bu@BoA@y@BcA@mA@uA@}A?aA?_A?{A?}HAsF?mJA_F?qH?qBAsC?aB?oC?{BAoC?eH?mD?sD?gBAoB?kA?qB?qA?}@?k@Ak@?m@Aq@Ai@Ag@As@Cw@Cs@Cs@Ew@Eu@Ci@Gq@Eu@G{@KmAQmBYkDO_BOkBQuBw@aJScCQqBS_CS{BKwAOyAa@eFEe@??C_@C[Cq@AUCY??I_AGu@KmAGq@Gw@KaAIy@Go@Io@Im@ES????G_@Ko@Ke@[sAMg@Mk@Ok@Og@Qi@Sm@Oc@Oc@O]O_@Qa@Sa@Qa@k@kAQ_@u@{A??]o@Uc@S_@]m@Wc@OWEGYe@QW[c@W]QWSUMQSSUYOOo@o@c@a@[W[UWS]U[SUM_@Ue@Wq@][QYQYM_Ag@}BoAsEaCwC}AcAi@s@_@c@Wc@Uk@Yk@[u@a@w@a@cFkCyEgC??gCsA_B{@w@_@e@S]O]OWKWKSGsBs@SGWI[K[I[I_@GUEWE[C[C[C[AU?[@Y?W@a@BWD]DUBwATy@NoB\\a@F[Fa@F_@DO@I@W@[@Y?YAUAYCWE]G_@IYK]Ma@O_@Sa@Si@[MIQKu@c@yD}B????]S}D_Ci@]c@Y_@Wa@[_@Y[[_@[e@g@WYSUSYW]W]U_@Wa@Yc@Yg@Yi@Wi@Wi@Uk@Ug@Qe@Si@Um@Qi@Qk@So@Qo@Mc@Kc@EQKa@Mk@Sy@Qw@ScASaAOu@Qy@QaAO{@O_AOaAMy@MgAM_AKgAMkAIaAI_AIeAIcAImAIwAs@iL_BoXMuBK}AG{@Em@Gs@Gq@I_AIu@E_@Gi@Kw@Iq@Iq@M}@M}@Oy@QgAQcAk@yCWoA]gBI_@??u@}DmDwQcEkTMm@QaA_@iBSaAOw@CI????Kg@]aBQs@Qs@Oo@Oi@Ok@Mi@Sq@Qm@Sw@]iAgBeGe@_Be@aBW{@Qs@Qk@Ok@Mi@Kc@Mk@Qu@Mk@Ow@Mm@Kq@Kg@Mu@Kq@Ik@Ks@Ky@EWGe@YuBOeAKw@UuAEY??I]ESGSK_@EOK]Mc@GWOg@Kc@GQ??So@ESGQGYIUUo@??IQ[q@Q_@Sa@U_@w@oAY_@UYMQ??', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:37:20+01:00', + aimedEndTime: '2024-01-12T13:39:50+01:00', + expectedEndTime: '2024-01-12T13:39:50+01:00', + expectedStartTime: '2024-01-12T13:37:20+01:00', + realtime: false, + distance: 144.57, + duration: 150, + fromPlace: { + name: 'Grorud stasjon', + }, + toPlace: { + name: 'Stjerneblokkveien', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: '}|{lJaomaA??c@m@Y[He@ACEEEEACFSHSLUR[V[DGBEBE@G@E@I?I?I?K?C??', + }, + }, + { + id: 'rO0ABXeTABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAADYAAAA7ABFSQjpOU1I6UXVheToxMDMyNgARUkI6TlNSOlF1YXk6MTA3MjcAO1JCOlJVVDpEYXRlZFNlcnZpY2VKb3VybmV5OjZiZjc4NDcxYThmNmMxZTA3YzUyZmM0MmU1NmM5YmI0', + mode: 'bus', + aimedStartTime: '2024-01-12T13:45:00+01:00', + aimedEndTime: '2024-01-12T13:50:00+01:00', + expectedEndTime: '2024-01-12T13:50:00+01:00', + expectedStartTime: '2024-01-12T13:45:00+01:00', + realtime: false, + distance: 2078.2, + duration: 300, + fromPlace: { + name: 'Stjerneblokkveien', + }, + toPlace: { + name: 'Grorud T', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Grorud T', + }, + }, + line: { + publicCode: '79', + name: 'Grorud T - Åsbråten', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + 'w{{lJ_zmaA?FCd@@N?J@RA?KNKHKJKJQVMTGNGTERERc@dCKXEPGTINCBCDAFMZQZINQZKHMFQHQF??A?QDS?Y@gBFsBH]BO@G?O@K@A?m@B??M?e@BI@G@IDGFGJIPGPETGVEVY~AE\\APCR?N?T@TBJDLDNDJ`@v@NXDLHRJZJ\\d@lBH\\DZB^?V?ZAVEXEPIXGNIPKRKNORONKHGBCBMFSJMDQHIB??GDEBIFMJKJOTGFGLMVK\\CJAFEVEVC\\?JARGAA?E@MBMFLGLCDAH@?`@?v@E^CRADCHCFCDCBEDEBGFG?GCKGMIKKIKIKKSIQGQGWEOAGEWAUE]IsAG_AAUCYCUCOCKEKGGGGGGKEMAcACM?IAGCCAGEIGGKGMEOEQEUC[MaCC[CYEWESIQGMIIIEKCK?M@w@JOBI@G@o@FUB????C?WBi@BS?SGGAIAGAA?C?_@D[BS@S@W?S@MAG@I@I@mA?U??]Ag@?kA?a@M@QBK@I@BrB?V@R', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:50:00+01:00', + aimedEndTime: '2024-01-12T13:50:20+01:00', + expectedEndTime: '2024-01-12T13:50:20+01:00', + expectedStartTime: '2024-01-12T13:50:00+01:00', + realtime: false, + distance: 12.76, + duration: 20, + fromPlace: { + name: 'Grorud T', + }, + toPlace: { + name: 'Grorud T', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: '}a~lJ_qlaA??CDC?A?C@A?C??E??', + }, + }, + { + id: 'rO0ABXeTABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAAAAAAAAIABFSQjpOU1I6UXVheToxMDcyNAARUkI6TlNSOlF1YXk6MTAyNTkAO1JCOlJVVDpEYXRlZFNlcnZpY2VKb3VybmV5OmVhYzk2YWEyZjg0ZmY1ZTdmNDEzYTk5YjRmY2RlMzBk', + mode: 'bus', + aimedStartTime: '2024-01-12T14:07:00+01:00', + aimedEndTime: '2024-01-12T14:14:00+01:00', + expectedEndTime: '2024-01-12T14:14:00+01:00', + expectedStartTime: '2024-01-12T14:07:00+01:00', + realtime: false, + distance: 4457.24, + duration: 420, + fromPlace: { + name: 'Grorud T', + }, + toPlace: { + name: 'Postnord', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Helsfyr', + }, + }, + line: { + publicCode: '68', + name: 'Helsfyr T - Grorud T via Alfaset', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + 'mb~lJcplaA???TH?H?F?DAH?JHL@?W?]Ag@?kA?a@?_C?OAS?O?}@?O@K@IBEBG@IHEFALENCHAFAH?F?HBDDDFDFBHFZBJBTBb@NrHHlDF|BBx@D|@Dp@D~@HvAJzAFt@Fz@LrALpAPxARdBRxAVzAPbAN~@XtAR~@Pv@Pt@Nl@ZjATx@Ph@FPPjALp@BJ??Jd@HNFNd@nAJVNTRTRRb@\\b@t@^n@x@tAr@dApAnBhA`BT\\PVRXRZ^b@NN??XZb@\\`@ZVLX`@\\XTNd@Vt@\\\\L\\NRJPFVFR@R@TAZCTCH?HB@BBD@BDBD@DADCDG@E@E?E@EFCDC@?D?PBF@HCFAd@LRD??@?HBPNHBHBDBFBJBDBFBXDHFf@b@JLHHNPTXRZXd@`@r@^l@`@r@T`@PXPVTXNRVTZTVPTLZLXJVFVDVDz@JNBx@H^DRHH@l@B??J@X@RBH?LBHBT@`@TVN\\VVRXVTTLNNPX`@\\f@T`@Zn@Rd@lCnGR`@P^PZR\\PVJLNPNN??B@LLFDNF\\JXRFBFBFDDHDFLR?FBD@DBDD@DABC@C`@[TIH@ZErAL|@Jp@FlAHh@BH@RJHFHHJLDJBFFFD@FADCDEDKBKHIHGHCNMF?PARANANAPCd@Ib@Gh@K^Il@@PCjA[TG??`A[JALCH?RBBDBBBVBT@HBPDb@?TBbABlBFvBBf@Fr@Dh@Ht@Jr@Np@Lj@Nd@N`@Rb@Td@PZh@x@NP~@nAzAjBHLVZRVNVI\\Sd@Q^GN??KTcApBmA`CIPKREREX@XBXDPdAxCJ\\l@bB', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T14:14:00+01:00', + aimedEndTime: '2024-01-12T14:18:50+01:00', + expectedEndTime: '2024-01-12T14:18:50+01:00', + expectedStartTime: '2024-01-12T14:14:00+01:00', + realtime: false, + distance: 310.02, + duration: 290, + fromPlace: { + name: 'Postnord', + }, + toPlace: { + name: 'Destination', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: 'q|xlJmweaACFA?m@aBBEDKK]eAyCEQSm@}@iCaAmCgAaE', + }, + }, + ], + systemNotices: [], + }, + ], + }, +}; + +it('renders without crashing', () => { + render( + {}} + pageResults={() => {}} + loading={false} + />, + ); +}); diff --git a/client-next/src/components/MapView/MapView.tsx b/client-next/src/components/MapView/MapView.tsx index 96b4e820bae..36d98be79b6 100644 --- a/client-next/src/components/MapView/MapView.tsx +++ b/client-next/src/components/MapView/MapView.tsx @@ -75,7 +75,7 @@ export function MapView({ }} // it's unfortunate that you have to list these layers here. // maybe there is a way around it: https://github.com/visgl/react-map-gl/discussions/2343 - interactiveLayerIds={['regular-stop', 'area-stop', 'vertex', 'edge', 'link']} + interactiveLayerIds={['regular-stop', 'area-stop', 'group-stop', 'vertex', 'edge', 'link']} onClick={showFeaturePropPopup} // put lat/long in URL and pan to it on page reload hash={true} diff --git a/client-next/src/components/SearchBar/SearchBar.test.tsx b/client-next/src/components/SearchBar/SearchBar.test.tsx new file mode 100644 index 00000000000..88932190288 --- /dev/null +++ b/client-next/src/components/SearchBar/SearchBar.test.tsx @@ -0,0 +1,14 @@ +import { it } from 'vitest'; +import { render } from '@testing-library/react'; +import { SearchBar } from './SearchBar.tsx'; +import { TripQueryVariables } from '../../gql/graphql.ts'; + +const variables: TripQueryVariables = { + from: { coordinates: { longitude: 9.795206, latitude: 60.13776 } }, + to: { coordinates: { longitude: 11.50907, latitude: 59.85208 } }, + dateTime: new Date().toISOString(), +}; + +it('renders without crashing', () => { + render( {}} setTripQueryVariables={() => {}} tripQueryVariables={variables} />); +}); diff --git a/client-next/vite.config.ts b/client-next/vite.config.ts index 8d3ba8000c7..69bfec7f396 100644 --- a/client-next/vite.config.ts +++ b/client-next/vite.config.ts @@ -9,4 +9,8 @@ export default defineConfig({ outDir: 'output', emptyOutDir: true, }, + // @ts-ignore + test: { + environment: 'jsdom', + }, }); diff --git a/doc-templates/Flex.md b/doc-templates/Flex.md index 0811ee03f1e..2015e898cae 100644 --- a/doc-templates/Flex.md +++ b/doc-templates/Flex.md @@ -10,8 +10,8 @@ To enable this turn on `FlexRouting` as a feature in `otp-config.json`. -The GTFS feeds should conform to -the [GTFS-Flex v2.1 draft](https://github.com/MobilityData/gtfs-flex/blob/master/spec/reference.md) +The GTFS feeds should conform to the +[GTFS-Flex v2 draft PR](https://github.com/google/transit/pull/388) ## Configuration diff --git a/doc-templates/UpdaterConfig.md b/doc-templates/UpdaterConfig.md index 57152671ec7..b0444f038af 100644 --- a/doc-templates/UpdaterConfig.md +++ b/doc-templates/UpdaterConfig.md @@ -82,7 +82,7 @@ GBFS form factors: ## Other updaters in sandboxes - [Vehicle parking](sandbox/VehicleParking.md) -- [Siri over HTTP](sandbox/SiriUpdater.md) -- [Siri over Azure Message Bus](sandbox/SiriAzureUpdater.md) +- [Siri over HTTP](sandbox/siri/SiriUpdater.md) +- [Siri over Azure Message Bus](sandbox/siri/SiriAzureUpdater.md) - [VehicleRentalServiceDirectory](sandbox/VehicleRentalServiceDirectory.md) diff --git a/doc-templates/sandbox/MapboxVectorTilesApi.md b/doc-templates/sandbox/MapboxVectorTilesApi.md index dfec1ed085a..35211eff00b 100644 --- a/doc-templates/sandbox/MapboxVectorTilesApi.md +++ b/doc-templates/sandbox/MapboxVectorTilesApi.md @@ -49,6 +49,15 @@ The feature must be configured in `router-config.json` as follows "minZoom": 14, "cacheMaxSeconds": 600 }, + // flex zones + { + "name": "areaStops", + "type": "AreaStop", + "mapper": "OTPRR", + "maxZoom": 20, + "minZoom": 14, + "cacheMaxSeconds": 600 + }, { "name": "stations", "type": "Station", @@ -136,6 +145,7 @@ For each layer, the configuration includes: - `name` which is used in the url to fetch tiles, and as the layer name in the vector tiles. - `type` which tells the type of the layer. Currently supported: - `Stop` + - `AreaStop`: Flex zones - `Station` - `VehicleRental`: all rental places: stations and free-floating vehicles - `VehicleRentalVehicle`: free-floating rental vehicles @@ -191,4 +201,5 @@ key, and a function to create the mapper, with a `Graph` object as a parameter, * Added DigitransitRealtime for vehicle rental stations * Changed old vehicle parking mapper to be Stadtnavi * Added a new Digitransit vehicle parking mapper with no real-time information and less fields -- 2024-01-22: Make `basePath` configurable [#5627](https://github.com/opentripplanner/OpenTripPlanner/pull/5627) \ No newline at end of file +- 2024-01-22: Make `basePath` configurable [#5627](https://github.com/opentripplanner/OpenTripPlanner/pull/5627) +- 2024-02-27: Add layer for flex zones [#5704](https://github.com/opentripplanner/OpenTripPlanner/pull/5704) diff --git a/docs/sandbox/SiriAzureUpdater.md b/doc-templates/sandbox/siri/SiriAzureUpdater.md similarity index 60% rename from docs/sandbox/SiriAzureUpdater.md rename to doc-templates/sandbox/siri/SiriAzureUpdater.md index 3af3b7ee854..eb092ddd08d 100644 --- a/docs/sandbox/SiriAzureUpdater.md +++ b/doc-templates/sandbox/siri/SiriAzureUpdater.md @@ -8,17 +8,26 @@ IT also OTP to download historical data from en HTTP endpoint on startup. Skånetrafiken, Sweden developer.otp@skanetrafiken.se +## Documentation + +Documentation available [here](../../examples/skanetrafiken/Readme.md). + +## Configuration + +To enable the SIRI updater you need to add it to the updaters section of the `router-config.json`. + +### Siri Azure ET Updater + + + +### Siri Azure SX Updater + + + ## Changelog -- Added configuration for turning off stop arrival time match feature. +- Added configuration for turning off stop arrival time match feature. - Initial version (April 2022) - Minor changes in logging (November 2022) - Retry fetch from history endpoint if it failed (February 2023) - Solve a bug in SiriAzureETUpdater and improve error logging (March 2023) - -## Documentation - -Documentation available [here](../examples/skanetrafiken/Readme.md). - -### Configuration - -See example configuration in `examples/skanetrafiken/router-config.json`. \ No newline at end of file +- Add support with federated identity authentication (February 2024) \ No newline at end of file diff --git a/doc-templates/SiriUpdater.md b/doc-templates/sandbox/siri/SiriUpdater.md similarity index 100% rename from doc-templates/SiriUpdater.md rename to doc-templates/sandbox/siri/SiriUpdater.md diff --git a/docs/BuildConfiguration.md b/docs/BuildConfiguration.md index 05da4cf4d0a..3a3a6ff7ee4 100644 --- a/docs/BuildConfiguration.md +++ b/docs/BuildConfiguration.md @@ -40,7 +40,7 @@ Sections follow that describe particular settings in more depth. | [readCachedElevations](#readCachedElevations) | `boolean` | Whether to read cached elevation data. | *Optional* | `true` | 2.0 | | staticBikeParkAndRide | `boolean` | Whether we should create bike P+R stations from OSM data. | *Optional* | `false` | 1.5 | | staticParkAndRide | `boolean` | Whether we should create car P+R stations from OSM data. | *Optional* | `true` | 1.5 | -| stopConsolidationFile | `string` | Name of the CSV-formatted file in the build directory which contains the configuration for stop consolidation. | *Optional* | | 2.5 | +| stopConsolidationFile | `uri` | Name of the CSV-formatted file in the build directory which contains the configuration for stop consolidation. | *Optional* | | 2.5 | | [streetGraph](#streetGraph) | `uri` | URI to the street graph object file for reading and writing. | *Optional* | | 2.0 | | [subwayAccessTime](#subwayAccessTime) | `double` | Minutes necessary to reach stops served by trips on routes of route_type=1 (subway) from the street. | *Optional* | `2.0` | 1.5 | | [transitModelTimeZone](#transitModelTimeZone) | `time-zone` | Time zone for the graph. | *Optional* | | 2.2 | @@ -945,7 +945,7 @@ the local filesystem. **Since version:** `2.2` ∙ **Type:** `enum` ∙ **Cardinality:** `Optional` ∙ **Default value:** `"default"` **Path:** /osm/[0] -**Enum values:** `default` | `norway` | `uk` | `finland` | `germany` | `atlanta` | `houston` | `portland` | `constant-speed-finland` +**Enum values:** `default` | `norway` | `uk` | `finland` | `germany` | `hamburg` | `atlanta` | `houston` | `portland` | `constant-speed-finland` The named set of mapping rules applied when parsing OSM tags. Overrides the value specified in `osmDefaults`. @@ -953,7 +953,7 @@ The named set of mapping rules applied when parsing OSM tags. Overrides the valu **Since version:** `2.2` ∙ **Type:** `enum` ∙ **Cardinality:** `Optional` ∙ **Default value:** `"default"` **Path:** /osmDefaults -**Enum values:** `default` | `norway` | `uk` | `finland` | `germany` | `atlanta` | `houston` | `portland` | `constant-speed-finland` +**Enum values:** `default` | `norway` | `uk` | `finland` | `germany` | `hamburg` | `atlanta` | `houston` | `portland` | `constant-speed-finland` The named set of mapping rules applied when parsing OSM tags. diff --git a/docs/Changelog.md b/docs/Changelog.md index df2ecd4b8fc..9e2e515c463 100644 --- a/docs/Changelog.md +++ b/docs/Changelog.md @@ -89,6 +89,16 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Remove "fare" [#5645](https://github.com/opentripplanner/OpenTripPlanner/pull/5645) - Refactor GroupStopBuilder addLocation method [#5651](https://github.com/opentripplanner/OpenTripPlanner/pull/5651) - Remove `VehicleToStopHeuristics` [#5381](https://github.com/opentripplanner/OpenTripPlanner/pull/5381) +- Set defaults of the modes WALK, even if one and not the others are set [#5675](https://github.com/opentripplanner/OpenTripPlanner/pull/5675) +- Reduce flex default access/egress penalty [#5674](https://github.com/opentripplanner/OpenTripPlanner/pull/5674) +- Add scooter preferences [#5632](https://github.com/opentripplanner/OpenTripPlanner/pull/5632) +- Add GroupStop layer to new debug frontend [#5666](https://github.com/opentripplanner/OpenTripPlanner/pull/5666) +- Update to newest version of GTFS Flex location groups [#5655](https://github.com/opentripplanner/OpenTripPlanner/pull/5655) +- Use NeTEx authority short name if name is not present [#5698](https://github.com/opentripplanner/OpenTripPlanner/pull/5698) +- Add Hamburg OSM mapper [#5701](https://github.com/opentripplanner/OpenTripPlanner/pull/5701) +- Remove configurable car speed and determine it in graph build [#5657](https://github.com/opentripplanner/OpenTripPlanner/pull/5657) +- Avoid cumulative real-time updates [#5705](https://github.com/opentripplanner/OpenTripPlanner/pull/5705) +- Fix time penalty [#5715](https://github.com/opentripplanner/OpenTripPlanner/pull/5715) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.4.0 (2023-09-13) diff --git a/docs/Frontends.md b/docs/Frontends.md new file mode 100644 index 00000000000..e8b299a52ac --- /dev/null +++ b/docs/Frontends.md @@ -0,0 +1,76 @@ +# Frontends (User Interfaces) for OpenTripPlanner + +## Introduction + +OpenTripPlanner is a client-server system. A backend service written in Java is accessed over an API by some client software, which is generally embedded in a web page or a mobile app. When OpenTripPlanner developers refer to OpenTripPlanner or OTP, they often specifically mean the Java backend service. But for this service to be useful to end users who want to plan their journeys, you will typically also want to deploy a user interface as well as a few other components providing mapping capabilities and address lookup functionality. + +For the purposes of this document and in many OpenTripPlanner development discussions, the terms frontend, UI, and client will be used interchangeably. In reality many kinds of clients are possible, not all of them being user interfaces (UIs). The OpenTripPlanner API may be called by various scripts and microservices, potentially all within what would traditionally be called a "backend" with no user interface at all. For example, updates to trip plans could be requested, summarized and sent as text messages over a mobile network. But in this documentation page, we are exclusively talking about graphical user interfaces, usually written in Javascript for execution and display in web browsers. + +## Two Kinds of Frontends + +Broadly speaking there are two kinds of frontends for OTP: debug frontends and production frontends. + +**Debug frontends** are included in the main OpenTripPlanner repository, and are intended to work "out of the box" with little to no configuration. They are served by OTP itself or a simple local web server, or set up such that a single deployment is usable by anyone via a content delivery network (CDN). The primary purpose of debug frontends is to allow OTP developers (as well as people evaluating OpenTripPlanner for their organization) to observe, test, and debug an OTP instance they're working on. Debug frontends will expose some internal details of OTP operation such as graph nodes and edges, traversal permissions, or transit data entity identifiers. Their primary role is as a development and deployment tool. + +On the other hand, **production frontends** are intended to be a component of larger public-facing deployments of OTP, with a more polished appearance and user experience. They generally do not work "out of the box", and require a significant amount of configuration and coordination with external components such as map tile servers and geocoders. They are designed to be components of a large professionally maintained and managed OTP deployment, and present a simpler view of OpenTripPlanner options and results to a non-technical audience of end users. + +## Debug Frontends + +The main OpenTripPlanner repository currently contains two debug web frontends: the original one in [`/src/client`](https://github.com/opentripplanner/OpenTripPlanner/tree/dev-2.x/src/client) and a newer one currently under development at [`/client-next`](https://github.com/opentripplanner/OpenTripPlanner/tree/dev-2.x/client-next). + +The **original debug client** is a jQuery and Backbone based UI whose history can be traced back over a decade to the first days of the OTP project. It connects to the OTP Java backend via a REST API using the GTFS vocabulary. Historically this was the default OTP interface, and it continues to be available by default on any running OTP instance at the root URL. + +The **new debug client** is a React/TypeScript Single Page App (SPA) that can be served locally or accessed over a content delivery network (CDN). Unlike the original debug client, it connects to the OTP Java backend via the GraphQL API using the Transmodel vocabulary. It is currently under development, but expected to replace the original debug client once it reaches effective feature parity. + +There is a third piece of software that might qualify as an OTP client: a Java Swing application making use of the Processing visualization library, located in the [GraphVisualizer class](https://github.com/opentripplanner/OpenTripPlanner/blob/dev-2.x/src/main/java/org/opentripplanner/visualizer/GraphVisualizer.java). While it would not be accurate to call this a "native" desktop application (as it's cross-platform Java) it is not a web app. This very developer-centric UI is also over a decade old and has been very sparsely maintained, but continues to exist because it can visualize the progress of searches through the street network, providing some insight into the internals of the routing algorithms that are not otherwise visible. + +## Working with Debug Frontends + +While the "classic" (i.e. old) debug frontend is enabled by default as of this writing, it may not be in the future, or you may wish to disable it if you've chosen to use a different frontend. Also, to get full use of the existing debug frontends you may want to enable OTP's built-in simple testing geocoder which performs fuzzy searches for transit stops by name, supplying their coordinates to the routing engine. Without it, you will be limited to origins and destinations selected on a map or specified in terms of latitude and longitude coordinates. The debug frontend and the geocoder can be toggled in `otp-config.json`: + +```json5 +// otp-config.json +{ + "otpFeatures": { + "DebugClient": true, + "SandboxAPIGeocoder": true + } +} +``` + +## Production Frontends + +Many different production OTP frontends exist. Any number of agencies and consultancies may have built new frontends, whether in Javascript or as native mobile apps, without the OpenTripPlanner development team even being aware of them. + +That said, there are two main Javascript-based web user interfaces that are generally recommended by members of the OTP development team who also work on professional, public-facing OpenTripPlanner deployments: +- The [Digitransit UI](https://github.com/HSLdevcom/digitransit-ui), part of the Finnish Digitransit project. +- The [OpenTripPlanner React UI](https://github.com/opentripplanner/otp-react-redux), developed and maintained by [Arcadis IBI](https://www.ibigroup.com)'s [transit routing team](https://www.ibigroup.com/ibi-products/transit-routing/). + +**Digitransit** is an open-source public transportation project, originally created in Finland to replace existing nationwide and regional journey planning solutions in 2014. Digitransit has since been used around the world in other projects, for example in Germany. It is a joint project of Helsinki Regional Transport Authority (HSL), Fintraffic, and Waltti Solutions. + +**Arcadis IBI** has for several years actively developed, deployed, and maintained instances of the React-based OTP UI, systematically contributing their improvements back to the original repositories under the OpenTripPlanner organization: +- https://github.com/opentripplanner/otp-ui +- https://github.com/opentripplanner/otp-react-redux + +Both major frontend projects mentioned above support internationalization and have several translations already available. + +## Deploying a Production Frontend + +Deploying a full OpenTripPlanner-based system including a web UI can be quite complex, as there are many "moving parts". Such a system needs to remain responsive and function smoothly under load that varies wildly from one time of day to another, constantly refresh input data, and meet customer expectations in recognizing addresses and names of landmarks etc. Because deployment and management of such a system demands long term commitment by a professional team with sufficient experience and knowledge about the component parts, the major production frontend projects do not really aim to work "out of the box". There's a working assumption that they'll be actively customized for any large regional deployment. + +Unfortunately this creates a bit of a barrier for organizations evaluating such components. Please don't hesitate to join the OpenTripPlanner Gitter chat and ask if you need any information on this subject. Several organizations that manage multiple large OTP deployments are active there and will be happy to engage with you. + +While you are welcome to stand up an instance of one of these UIs for testing or evaluation, and there has been some effort to make this more straightforward especially on the Arcadis IBI projects, it is still strongly recommended to collaborate with a specialist. The process of tailoring a deployment to a specific region and deployment environment is estimated to take at least several full days even for an experienced professional, and while it may start off looking deceptively simple, can rapidly grow into a seemingly never-ending project for those who are not aware of the pitfalls. The goal here is not by any means to discourage you from using or learning about any of these projects, but to set expectations that the process will be much smoother if you work with someone who's done it before. Be aware that both of these systems rely on multiple additional backend services other than the OTP Java backend. To get either one working, you will need to configure a source of map tiles and a geocoder that translates geographic names to latitude and longitude coordinates, among other components. + +That said, as of this writing (early 2024) it may now be possible to get a minimal, non-production test deployment of OTP-React-Redux working with only a few adjustments to the example configuration file. See the README and `example-config.yml` in [the OTP-RR repo](https://github.com/opentripplanner/otp-react-redux). + +## Historical Background + +The history of the more widely used OpenTripPlanner interfaces is roughly as follows: + +- From the beginning, OpenTripPlanner included a Javascript UI module. This jQuery and Backbone based UI was deployed as the main interface in several locations in the early to mid 2010s. +- As of early 2024, this UI is still present in the main OpenTripPlanner repository under `src/client`, but is not intended for use by the general public. It has long been regarded as a "debug" UI, serving as a built-in, readily available and familiar interface for OTP developers to test and debug the behavior of the backend. It uses the older OTP REST API which is slated for deprecation. +- In the late 2010s people started developing a new React-based UI as a more modular, modern interface for public consumption. This project is located at https://github.com/opentripplanner/otp-react-redux under the OpenTripPlanner Github organization, and is developed and maintainted by Arcadis IBI. +- Some React components were factored out of that UI project, allowing them to be integrated in different ways with different OTP deployments. This component library is in a separate repository at https://github.com/opentripplanner/otp-ui. Likewise, it is developed and maintained by Arcadis IBI. +- Meanwhile, starting in 2014, HSL (the Helsinki Regional Transport Authority) and Finntrafic (the Finnish national transportation authority) began the Digitransit project, a set of open-source microservices to replace their existing national and regional scale trip planners. This includes a Javascript web UI module. In addition to Finland, the Digitransit system has been deployed in various places around the world including Germany. +- As of 2024, a completely new debug UI (again, intended for developer use rather than public consumption) is being developed in the main OpenTripPlanner repository under `src/debug-client-preview`. This new UI follows a more conventional contemporary Javascript development style, and uses the most recent OpenTripPlanner GraphQL API which is expected to fully replace the older REST API. diff --git a/docs/README-DOCS.txt b/docs/README-DOCS.txt index 3450a616124..52f7aa1a62d 100644 --- a/docs/README-DOCS.txt +++ b/docs/README-DOCS.txt @@ -8,3 +8,5 @@ In short, to preview the documentation as you work on it: $ pip install -r docs/requirements.txt $ mkdocs serve + +If you create any new documentation pages, be sure to update the `nav:` section of `mkdocs.yml` in the root of the repository to ensure that your page is included in the table of contents and documentation navigation tree. diff --git a/docs/RouteRequest.md b/docs/RouteRequest.md index 4ef1e17a7d8..ad7dc366bcf 100644 --- a/docs/RouteRequest.md +++ b/docs/RouteRequest.md @@ -90,7 +90,6 @@ and in the [transferRequests in build-config.json](BuildConfiguration.md#transfe |    pickupCost | `integer` | Add a cost for car pickup changes when a pickup or drop off takes place | *Optional* | `120` | 2.1 | |    pickupTime | `duration` | Add a time for car pickup changes when a pickup or drop off takes place | *Optional* | `"PT1M"` | 2.1 | |    reluctance | `double` | A multiplier for how bad driving is, compared to being in transit for equal lengths of time. | *Optional* | `2.0` | 2.0 | -|    speed | `double` | Max car speed along streets, in meters per second | *Optional* | `40.0` | 2.0 | |    parking | `object` | Preferences for parking a vehicle. | *Optional* | | 2.5 | |       cost | `integer` | Cost to park a vehicle. | *Optional* | `120` | 2.0 | |       time | `duration` | Time to park a vehicle. | *Optional* | `"PT1M"` | 2.0 | @@ -125,6 +124,24 @@ and in the [transferRequests in build-config.json](BuildConfiguration.md#transfe |       [costLimitFunction](#rd_if_transitGeneralizedCostLimit_costLimitFunction) | `cost-linear-function` | The base function used by the filter. | *Optional* | `"15m + 1.50 t"` | 2.2 | |       [intervalRelaxFactor](#rd_if_transitGeneralizedCostLimit_intervalRelaxFactor) | `double` | How much the filter should be relaxed for itineraries that do not overlap in time. | *Optional* | `0.4` | 2.2 | | [maxDirectStreetDurationForMode](#rd_maxDirectStreetDurationForMode) | `enum map of duration` | Limit direct route duration per street mode. | *Optional* | | 2.2 | +| scooter | `object` | Scooter preferences. | *Optional* | | 2.5 | +|    [optimization](#rd_scooter_optimization) | `enum` | The set of characteristics that the user wants to optimize for. | *Optional* | `"safe-streets"` | 2.0 | +|    reluctance | `double` | A multiplier for how bad scooter travel is, compared to being in transit for equal lengths of time. | *Optional* | `2.0` | 2.0 | +|    speed | `double` | Max scooter speed along streets, in meters per second | *Optional* | `5.0` | 2.0 | +|    rental | `object` | Vehicle rental options | *Optional* | | 2.3 | +|       allowKeepingAtDestination | `boolean` | If a vehicle should be allowed to be kept at the end of a station-based rental. | *Optional* | `false` | 2.2 | +|       dropOffCost | `integer` | Cost to drop-off a rented vehicle. | *Optional* | `30` | 2.0 | +|       dropOffTime | `duration` | Time to drop-off a rented vehicle. | *Optional* | `"PT30S"` | 2.0 | +|       keepingAtDestinationCost | `integer` | The cost of arriving at the destination with the rented vehicle, to discourage doing so. | *Optional* | `0` | 2.2 | +|       pickupCost | `integer` | Cost to rent a vehicle. | *Optional* | `120` | 2.0 | +|       pickupTime | `duration` | Time to rent a vehicle. | *Optional* | `"PT1M"` | 2.0 | +|       useAvailabilityInformation | `boolean` | Whether or not vehicle rental availability information will be used to plan vehicle rental trips. | *Optional* | `false` | 2.0 | +|       [allowedNetworks](#rd_scooter_rental_allowedNetworks) | `string[]` | The vehicle rental networks which may be used. If empty all networks may be used. | *Optional* | | 2.1 | +|       [bannedNetworks](#rd_scooter_rental_bannedNetworks) | `string[]` | The vehicle rental networks which may not be used. If empty, no networks are banned. | *Optional* | | 2.1 | +|    [triangle](#rd_scooter_triangle) | `object` | Triangle optimization criteria. | *Optional* | | 2.5 | +|       flatness | `double` | Relative importance of flat terrain (range 0-1). | *Optional* | `0.0` | 2.0 | +|       [safety](#rd_scooter_triangle_safety) | `double` | Relative importance of safety (range 0-1). | *Optional* | `0.0` | 2.0 | +|       time | `double` | Relative importance of duration of travel (range 0-1). | *Optional* | `0.0` | 2.0 | | [transferOptimization](#rd_transferOptimization) | `object` | Optimize where a transfer between to trip happens. | *Optional* | | 2.1 | |    [backTravelWaitTimeFactor](#rd_to_backTravelWaitTimeFactor) | `double` | To reduce back-travel we favor waiting, this reduces the cost of waiting. | *Optional* | `1.0` | 2.1 | |    [extraStopBoardAlightCostsFactor](#rd_to_extraStopBoardAlightCostsFactor) | `double` | Add an extra board- and alight-cost for prioritized stops. | *Optional* | `0.0` | 2.1 | @@ -411,7 +428,7 @@ The default values are - `car-to-park` = (timePenalty: 20m + 2.0 t, costFactor: 1.50) - `car-rental` = (timePenalty: 20m + 2.0 t, costFactor: 1.50) - `car-hailing` = (timePenalty: 20m + 2.0 t, costFactor: 1.50) -- `flexible` = (timePenalty: 20m + 2.0 t, costFactor: 1.50) +- `flexible` = (timePenalty: 10m + 1.30 t, costFactor: 1.30) Example: `"car-to-park" : { "timePenalty": "10m + 1.5t", "costFactor": 2.5 }` @@ -832,6 +849,50 @@ Override the settings in `maxDirectStreetDuration` for specific street modes. Th done because some street modes searches are much more resource intensive than others. +

optimization

+ +**Since version:** `2.0` ∙ **Type:** `enum` ∙ **Cardinality:** `Optional` ∙ **Default value:** `"safe-streets"` +**Path:** /routingDefaults/scooter +**Enum values:** `shortest-duration` | `safe-streets` | `flat-streets` | `safest-streets` | `triangle` + +The set of characteristics that the user wants to optimize for. + +If the triangle optimization is used, it's enough to just define the triangle parameters + +

allowedNetworks

+ +**Since version:** `2.1` ∙ **Type:** `string[]` ∙ **Cardinality:** `Optional` +**Path:** /routingDefaults/scooter/rental + +The vehicle rental networks which may be used. If empty all networks may be used. + +

bannedNetworks

+ +**Since version:** `2.1` ∙ **Type:** `string[]` ∙ **Cardinality:** `Optional` +**Path:** /routingDefaults/scooter/rental + +The vehicle rental networks which may not be used. If empty, no networks are banned. + +

triangle

+ +**Since version:** `2.5` ∙ **Type:** `object` ∙ **Cardinality:** `Optional` +**Path:** /routingDefaults/scooter + +Triangle optimization criteria. + +Optimization type doesn't need to be defined if these values are defined. + +

safety

+ +**Since version:** `2.0` ∙ **Type:** `double` ∙ **Cardinality:** `Optional` ∙ **Default value:** `0.0` +**Path:** /routingDefaults/scooter/triangle + +Relative importance of safety (range 0-1). + +This factor can also include other concerns such as convenience and general cyclist +preferences by taking into account road surface etc. + +

transferOptimization

**Since version:** `2.1` ∙ **Type:** `object` ∙ **Cardinality:** `Optional` @@ -1084,7 +1145,6 @@ include stairs as a last result. } }, "car" : { - "speed" : 40, "reluctance" : 10, "decelerationSpeed" : 2.9, "accelerationSpeed" : 2.9, @@ -1098,6 +1158,20 @@ include stairs as a last result. "cost" : 600 } }, + "scooter" : { + "speed" : 5, + "reluctance" : 5.0, + "rental" : { + "pickupCost" : 120, + "dropOffTime" : "30s", + "dropOffCost" : 30 + }, + "triangle" : { + "safety" : 0.4, + "flatness" : 0.3, + "time" : 0.3 + } + }, "walk" : { "speed" : 1.3, "reluctance" : 4.0, diff --git a/docs/RouterConfiguration.md b/docs/RouterConfiguration.md index 62fb5d9617a..503b8c7370f 100644 --- a/docs/RouterConfiguration.md +++ b/docs/RouterConfiguration.md @@ -482,7 +482,6 @@ Used to group requests when monitoring OTP. } }, "car" : { - "speed" : 40, "reluctance" : 10, "decelerationSpeed" : 2.9, "accelerationSpeed" : 2.9, @@ -496,6 +495,20 @@ Used to group requests when monitoring OTP. "cost" : 600 } }, + "scooter" : { + "speed" : 5, + "reluctance" : 5.0, + "rental" : { + "pickupCost" : 120, + "dropOffTime" : "30s", + "dropOffCost" : 30 + }, + "triangle" : { + "safety" : 0.4, + "flatness" : 0.3, + "time" : 0.3 + } + }, "walk" : { "speed" : 1.3, "reluctance" : 4.0, @@ -636,6 +649,14 @@ Used to group requests when monitoring OTP. "minZoom" : 14, "cacheMaxSeconds" : 600 }, + { + "name" : "areaStops", + "type" : "AreaStop", + "mapper" : "OTPRR", + "maxZoom" : 20, + "minZoom" : 14, + "cacheMaxSeconds" : 600 + }, { "name" : "stations", "type" : "Station", @@ -803,6 +824,20 @@ Used to group requests when monitoring OTP. "toDateTime" : "P1D", "timeout" : 300000 } + }, + { + "type" : "siri-azure-et-updater", + "topic" : "some_topic", + "authenticationType" : "SharedAccessKey", + "fullyQualifiedNamespace" : "fully_qualified_namespace", + "servicebus-url" : "service_bus_url", + "feedId" : "feed_id", + "customMidnight" : 4, + "history" : { + "url" : "endpoint_url", + "fromDateTime" : "-P1D", + "timeout" : 300000 + } } ], "rideHailingServices" : [ diff --git a/docs/SandboxExtension.md b/docs/SandboxExtension.md index 914be238da4..0d05518fd56 100644 --- a/docs/SandboxExtension.md +++ b/docs/SandboxExtension.md @@ -4,31 +4,6 @@ - This should not be used for bug fixes and smaller changes. - Consider forking if the feature is valuable to one deployment only. -## Available extensions - -Here is a list of features implemented as OTP Sandbox Extensions. The Sandbox extensions are -provided "as is". - -- [Google Cloud Storage](sandbox/GoogleCloudStorage.md) - Enable Google Cloud Storage as a OTP Data Source -- [Actuator API](sandbox/ActuatorAPI.md) - API used to check the health status of the OTP instance. -- [Geocoder API](sandbox/GeocoderAPI.md) - Adds an API to search for stops and stations. -- [Transfer analyser](sandbox/transferanalyzer.md) - Module used for analyzing the transfers between -nearby stops generated by routing via OSM data. -- [SIRI Updater](sandbox/SiriUpdater.md) - Update OTP with real-time information from a Transmodel SIRI data source. -- [SIRI Azure Updater](sandbox/SiriAzureUpdater.md) - fetch SIRI real-time data through *Azure Service Bus* -- [VehicleRentalServiceDirectory](sandbox/VehicleRentalServiceDirectory.md) - GBFS service directory endpoint. -- [Smoove Bike Rental Updator Support](sandbox/SmooveBikeRental.md) - Smoove Bike Rental Updator(HSL) -- [Mapbox Vector Tiles API](sandbox/MapboxVectorTilesApi.md) - Mapbox Vector Tiles API -- [Flex Routing](sandbox/Flex.md) - Flexible transit routing for GTFS and Netex data sources -- [Park and Ride API](sandbox/ParkAndRideApi.md) - Park and Ride API -- [Data Overlay](sandbox/DataOverlay.md) - StreetEdge grid data populating affecting the route planning -- [Vehicle Parking](sandbox/VehicleParking.md) - Vehicle Parking updaters -- [Travel Time (Isochrone & Surface) API](sandbox/TravelTime.md) - Travel Time API -- [IBI accessibility score](sandbox/IBIAccessibilityScore.md) - IBI accessibility score -- [Fares](sandbox/Fares.md) - Fare calculation -- [Ride hailing](sandbox/RideHailing.md) - Ride hailing services like Uber - - ## Terminology **Main/core** -- All OTP code and additional files, NOT part of the sandbox. diff --git a/docs/UpdaterConfig.md b/docs/UpdaterConfig.md index a819a898240..973874be66a 100644 --- a/docs/UpdaterConfig.md +++ b/docs/UpdaterConfig.md @@ -414,7 +414,7 @@ HTTP headers to add to the request. Any header key, value can be inserted. ## Other updaters in sandboxes - [Vehicle parking](sandbox/VehicleParking.md) -- [Siri over HTTP](sandbox/SiriUpdater.md) -- [Siri over Azure Message Bus](sandbox/SiriAzureUpdater.md) +- [Siri over HTTP](sandbox/siri/SiriUpdater.md) +- [Siri over Azure Message Bus](sandbox/siri/SiriAzureUpdater.md) - [VehicleRentalServiceDirectory](sandbox/VehicleRentalServiceDirectory.md) diff --git a/docs/apis/GTFS-GraphQL-API.md b/docs/apis/GTFS-GraphQL-API.md index b67b2882ec9..f2cc32e2888 100644 --- a/docs/apis/GTFS-GraphQL-API.md +++ b/docs/apis/GTFS-GraphQL-API.md @@ -5,6 +5,9 @@ used heavily by [digitransit-ui](https://github.com/HSLdevcom/digitransit-ui). [otp-react-redux](https://github.com/opentripplanner/otp-react-redux) has also migrated to this API in 2023. +There is also a [Java client](https://github.com/opentripplanner/otp-java-client) available which +makes it easy to use this API in a Java application. + ## URLs - GraphQL endpoint: [`http://localhost:8080/otp/gtfs/v1`](http://localhost:8080/otp/gtfs/v1) - HTML schema documentation: [https://docs.opentripplanner.org/api/dev-2.x/graphql-gtfs/](https://docs.opentripplanner.org/api/dev-2.x/graphql-gtfs/) diff --git a/docs/examples/entur/router-config.json b/docs/examples/entur/router-config.json index ffdec9ded79..652f43f74bc 100644 --- a/docs/examples/entur/router-config.json +++ b/docs/examples/entur/router-config.json @@ -26,7 +26,6 @@ } }, "car": { - "speed": 40, "reluctance": 4.0, "decelerationSpeed": 2.9, "accelerationSpeed": 2.9, @@ -36,6 +35,15 @@ "dropOffCost": 30 } }, + "scooter": { + "speed": 5, + "reluctance": 5.0, + "rental": { + "pickupCost": 120, + "dropOffTime": "30s", + "dropOffCost": 30 + } + }, "walk": { "speed": 1.3, "reluctance": 4.0, diff --git a/docs/examples/ibi/atlanta/router-config.json b/docs/examples/ibi/atlanta/router-config.json index 909c164ec43..7d6e7272fcd 100644 --- a/docs/examples/ibi/atlanta/router-config.json +++ b/docs/examples/ibi/atlanta/router-config.json @@ -17,6 +17,17 @@ "pickupCost": 850 } }, + "scooter": { + "triangle": { + "time": 0.3, + "flatness": 0.3, + "safety": 0.4 + }, + "rental": { + "pickupTime": "3m", + "pickupCost": 850 + } + }, "itineraryFilters": { // only show non-transit (ie. walking) when it's at least as good as the transit option "nonTransitGeneralizedCostLimit": "0 + 1.0 x", diff --git a/docs/examples/skanetrafiken/Readme.md b/docs/examples/skanetrafiken/Readme.md index fc342f4192b..a611c839140 100644 --- a/docs/examples/skanetrafiken/Readme.md +++ b/docs/examples/skanetrafiken/Readme.md @@ -93,6 +93,9 @@ id from the message. In case OTP was not able to find corresponding trip additio performed based on arrival-times/stop-patterns from the ET message. This feature turned off by default but can be activated by adding *fuzzyTripMatching* property to updater configuration. +### FederatedIdentity +It is also possible to connect to Service Bus through FederatedIdentity. Change **authenticationType** to +**FederatedIdentity** and provide **fullyQualifiedNamespace** in router-config. diff --git a/docs/examples/skanetrafiken/router-config.json b/docs/examples/skanetrafiken/router-config.json index d65604aaa00..74042d68e31 100644 --- a/docs/examples/skanetrafiken/router-config.json +++ b/docs/examples/skanetrafiken/router-config.json @@ -44,7 +44,8 @@ "type": "siri-azure-sx-updater", "topic": "", "feedId": "", - "servicebus-url": "", + "authenticationType": "FederatedIdentity", + "fullyQualifiedNamespace": "", "customMidnight": 4, "history": { "url": "", diff --git a/docs/sandbox/Flex.md b/docs/sandbox/Flex.md index cafbc7956bf..61d15851a56 100644 --- a/docs/sandbox/Flex.md +++ b/docs/sandbox/Flex.md @@ -10,8 +10,8 @@ To enable this turn on `FlexRouting` as a feature in `otp-config.json`. -The GTFS feeds should conform to -the [GTFS-Flex v2.1 draft](https://github.com/MobilityData/gtfs-flex/blob/master/spec/reference.md) +The GTFS feeds should conform to the +[GTFS-Flex v2 draft PR](https://github.com/google/transit/pull/388) ## Configuration diff --git a/docs/sandbox/MapboxVectorTilesApi.md b/docs/sandbox/MapboxVectorTilesApi.md index da9fd1120e1..45feec03d47 100644 --- a/docs/sandbox/MapboxVectorTilesApi.md +++ b/docs/sandbox/MapboxVectorTilesApi.md @@ -49,6 +49,15 @@ The feature must be configured in `router-config.json` as follows "minZoom": 14, "cacheMaxSeconds": 600 }, + // flex zones + { + "name": "areaStops", + "type": "AreaStop", + "mapper": "OTPRR", + "maxZoom": 20, + "minZoom": 14, + "cacheMaxSeconds": 600 + }, { "name": "stations", "type": "Station", @@ -136,6 +145,7 @@ For each layer, the configuration includes: - `name` which is used in the url to fetch tiles, and as the layer name in the vector tiles. - `type` which tells the type of the layer. Currently supported: - `Stop` + - `AreaStop`: Flex zones - `Station` - `VehicleRental`: all rental places: stations and free-floating vehicles - `VehicleRentalVehicle`: free-floating rental vehicles @@ -148,6 +158,7 @@ For each layer, the configuration includes: | Config Parameter | Type | Summary | Req./Opt. | Default Value | Since | |----------------------------------------------------------------|:----------:|--------------------------------------------------------------------------------------------|:----------:|---------------|:-----:| +| [attribution](#vectorTiles_attribution) | `string` | Custom attribution to be returned in `tilejson.json` | *Optional* | | 2.5 | | [basePath](#vectorTiles_basePath) | `string` | The path of the vector tile source URLs in `tilejson.json`. | *Optional* | | 2.5 | | [layers](#vectorTiles_layers) | `object[]` | Configuration of the individual layers for the Mapbox vector tiles. | *Optional* | | 2.0 | |       type = "stop" | `enum` | Type of the layer. | *Required* | | 2.0 | @@ -161,6 +172,22 @@ For each layer, the configuration includes: #### Details +

attribution

+ +**Since version:** `2.5` ∙ **Type:** `string` ∙ **Cardinality:** `Optional` +**Path:** /vectorTiles + +Custom attribution to be returned in `tilejson.json` + +By default the, `attribution` property in `tilejson.json` is computed from the names and +URLs of the feed publishers. +If the OTP deployment contains many feeds, this can become very unwieldy. + +This configuration parameter allows you to set the `attribution` to any string you wish +including HTML tags, +for example `Regional Partners`. + +

basePath

**Since version:** `2.5` ∙ **Type:** `string` ∙ **Cardinality:** `Optional` @@ -269,4 +296,5 @@ key, and a function to create the mapper, with a `Graph` object as a parameter, * Added DigitransitRealtime for vehicle rental stations * Changed old vehicle parking mapper to be Stadtnavi * Added a new Digitransit vehicle parking mapper with no real-time information and less fields -- 2024-01-22: Make `basePath` configurable [#5627](https://github.com/opentripplanner/OpenTripPlanner/pull/5627) \ No newline at end of file +- 2024-01-22: Make `basePath` configurable [#5627](https://github.com/opentripplanner/OpenTripPlanner/pull/5627) +- 2024-02-27: Add layer for flex zones [#5704](https://github.com/opentripplanner/OpenTripPlanner/pull/5704) diff --git a/docs/sandbox/VehicleParking.md b/docs/sandbox/VehicleParking.md index a9b32770b95..4bfc2f6bd36 100644 --- a/docs/sandbox/VehicleParking.md +++ b/docs/sandbox/VehicleParking.md @@ -196,7 +196,7 @@ Tags to add to the parking lots. | [feedId](#u__4__feedId) | `string` | The name of the data source. | *Required* | | 2.2 | | frequency | `duration` | How often to update the source. | *Optional* | `"PT1M"` | 2.3 | | [sourceType](#u__4__sourceType) | `enum` | The source of the vehicle updates. | *Required* | | 2.2 | -| url | `string` | URL of the locations endpoint. | *Optional* | | 2.3 | +| url | `uri` | URL of the locations endpoint. | *Optional* | | 2.3 | | [headers](#u__4__headers) | `map of string` | HTTP headers to add to the request. Any header key, value can be inserted. | *Optional* | | 2.3 | diff --git a/docs/sandbox/siri/SiriAzureUpdater.md b/docs/sandbox/siri/SiriAzureUpdater.md new file mode 100644 index 00000000000..75aa58897ec --- /dev/null +++ b/docs/sandbox/siri/SiriAzureUpdater.md @@ -0,0 +1,197 @@ +# Siri Azure Updater + +It is sandbox extension developed by Skånetrafiken that allows OTP to fetch Siri ET & SX messages through *Azure Service Bus*. +IT also OTP to download historical data from en HTTP endpoint on startup. + +## Contact Info + +Skånetrafiken, Sweden +developer.otp@skanetrafiken.se + +## Documentation + +Documentation available [here](../../examples/skanetrafiken/Readme.md). + +## Configuration + +To enable the SIRI updater you need to add it to the updaters section of the `router-config.json`. + +### Siri Azure ET Updater + + + + +| Config Parameter | Type | Summary | Req./Opt. | Default Value | Since | +|------------------------------------------------------------|:---------:|----------------------------------------------------------------|:----------:|---------------------|:-----:| +| type = "siri-azure-et-updater" | `enum` | The type of the updater. | *Required* | | 1.5 | +| [authenticationType](#u__11__authenticationType) | `enum` | Which authentication type to use | *Optional* | `"sharedaccesskey"` | 2.5 | +| [customMidnight](#u__11__customMidnight) | `integer` | Time on which time breaks into new day. | *Optional* | `0` | 2.2 | +| feedId | `string` | The ID of the feed to apply the updates to. | *Optional* | | 2.2 | +| [fullyQualifiedNamespace](#u__11__fullyQualifiedNamespace) | `string` | Service Bus fully qualified namespace used for authentication. | *Optional* | | 2.5 | +| fuzzyTripMatching | `boolean` | Whether to apply fuzzyTripMatching on the updates | *Optional* | `false` | 2.2 | +| [servicebus-url](#u__11__servicebus_url) | `string` | Service Bus connection used for authentication. | *Optional* | | 2.2 | +| topic | `string` | Service Bus topic to connect to. | *Optional* | | 2.2 | +| history | `object` | Configuration for fetching historical data on startup | *Optional* | | 2.2 | +|    fromDateTime | `string` | Datetime boundary for historical data | *Optional* | `"-P1D"` | 2.2 | +|    timeout | `integer` | Timeout in milliseconds | *Optional* | `300000` | na | +|    url | `string` | Endpoint to fetch from | *Optional* | | na | + + +##### Parameter details + +

authenticationType

+ +**Since version:** `2.5` ∙ **Type:** `enum` ∙ **Cardinality:** `Optional` ∙ **Default value:** `"sharedaccesskey"` +**Path:** /updaters/[11] +**Enum values:** `sharedaccesskey` | `federatedidentity` + +Which authentication type to use + +

customMidnight

+ +**Since version:** `2.2` ∙ **Type:** `integer` ∙ **Cardinality:** `Optional` ∙ **Default value:** `0` +**Path:** /updaters/[11] + +Time on which time breaks into new day. + +It is common that operating day date breaks a little bit later than midnight so that the switch happens when traffic is at the lowest point. Parameter uses 24-hour format. If the switch happens on 4 am then set this field to 4. + +

fullyQualifiedNamespace

+ +**Since version:** `2.5` ∙ **Type:** `string` ∙ **Cardinality:** `Optional` +**Path:** /updaters/[11] + +Service Bus fully qualified namespace used for authentication. + +Has to be present for authenticationMethod FederatedIdentity. + +

servicebus-url

+ +**Since version:** `2.2` ∙ **Type:** `string` ∙ **Cardinality:** `Optional` +**Path:** /updaters/[11] + +Service Bus connection used for authentication. + +Has to be present for authenticationMethod SharedAccessKey. This should be Primary/Secondary connection string from service bus. + + + +##### Example configuration + +```JSON +// router-config.json +{ + "updaters" : [ + { + "type" : "siri-azure-et-updater", + "topic" : "some_topic", + "authenticationType" : "SharedAccessKey", + "fullyQualifiedNamespace" : "fully_qualified_namespace", + "servicebus-url" : "service_bus_url", + "feedId" : "feed_id", + "customMidnight" : 4, + "history" : { + "url" : "endpoint_url", + "fromDateTime" : "-P1D", + "timeout" : 300000 + } + } + ] +} +``` + + + +### Siri Azure SX Updater + + + + +| Config Parameter | Type | Summary | Req./Opt. | Default Value | Since | +|------------------------------------------------------------|:---------:|----------------------------------------------------------------|:----------:|---------------------|:-----:| +| type = "siri-azure-sx-updater" | `enum` | The type of the updater. | *Required* | | 1.5 | +| [authenticationType](#u__10__authenticationType) | `enum` | Which authentication type to use | *Optional* | `"sharedaccesskey"` | 2.5 | +| [customMidnight](#u__10__customMidnight) | `integer` | Time on which time breaks into new day. | *Optional* | `0` | 2.2 | +| feedId | `string` | The ID of the feed to apply the updates to. | *Optional* | | 2.2 | +| [fullyQualifiedNamespace](#u__10__fullyQualifiedNamespace) | `string` | Service Bus fully qualified namespace used for authentication. | *Optional* | | 2.5 | +| fuzzyTripMatching | `boolean` | Whether to apply fuzzyTripMatching on the updates | *Optional* | `false` | 2.2 | +| [servicebus-url](#u__10__servicebus_url) | `string` | Service Bus connection used for authentication. | *Optional* | | 2.2 | +| topic | `string` | Service Bus topic to connect to. | *Optional* | | 2.2 | +| history | `object` | Configuration for fetching historical data on startup | *Optional* | | 2.2 | +|    fromDateTime | `string` | Datetime boundary for historical data. | *Optional* | `"-P1D"` | 2.2 | +|    timeout | `integer` | Timeout in milliseconds | *Optional* | `300000` | na | +|    toDateTime | `string` | Datetime boundary for historical data. | *Optional* | `"P1D"` | 2.2 | +|    url | `string` | Endpoint to fetch from | *Optional* | | na | + + +##### Parameter details + +

authenticationType

+ +**Since version:** `2.5` ∙ **Type:** `enum` ∙ **Cardinality:** `Optional` ∙ **Default value:** `"sharedaccesskey"` +**Path:** /updaters/[10] +**Enum values:** `sharedaccesskey` | `federatedidentity` + +Which authentication type to use + +

customMidnight

+ +**Since version:** `2.2` ∙ **Type:** `integer` ∙ **Cardinality:** `Optional` ∙ **Default value:** `0` +**Path:** /updaters/[10] + +Time on which time breaks into new day. + +It is common that operating day date breaks a little bit later than midnight so that the switch happens when traffic is at the lowest point. Parameter uses 24-hour format. If the switch happens on 4 am then set this field to 4. + +

fullyQualifiedNamespace

+ +**Since version:** `2.5` ∙ **Type:** `string` ∙ **Cardinality:** `Optional` +**Path:** /updaters/[10] + +Service Bus fully qualified namespace used for authentication. + +Has to be present for authenticationMethod FederatedIdentity. + +

servicebus-url

+ +**Since version:** `2.2` ∙ **Type:** `string` ∙ **Cardinality:** `Optional` +**Path:** /updaters/[10] + +Service Bus connection used for authentication. + +Has to be present for authenticationMethod SharedAccessKey. This should be Primary/Secondary connection string from service bus. + + + +##### Example configuration + +```JSON +// router-config.json +{ + "updaters" : [ + { + "type" : "siri-azure-sx-updater", + "topic" : "some_topic", + "servicebus-url" : "service_bus_url", + "feedId" : "feed_id", + "customMidnight" : 4, + "history" : { + "url" : "endpoint_url", + "fromDateTime" : "-P1D", + "toDateTime" : "P1D", + "timeout" : 300000 + } + } + ] +} +``` + + + +## Changelog +- Added configuration for turning off stop arrival time match feature. +- Initial version (April 2022) +- Minor changes in logging (November 2022) +- Retry fetch from history endpoint if it failed (February 2023) +- Solve a bug in SiriAzureETUpdater and improve error logging (March 2023) +- Add support with federated identity authentication (February 2024) \ No newline at end of file diff --git a/docs/sandbox/SiriUpdater.md b/docs/sandbox/siri/SiriUpdater.md similarity index 100% rename from docs/sandbox/SiriUpdater.md rename to docs/sandbox/siri/SiriUpdater.md diff --git a/mkdocs.yml b/mkdocs.yml index 36ea39050ac..3fbcf849a03 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -64,6 +64,7 @@ nav: - Netex and SIRI: 'Netex-Norway.md' - Troubleshooting: 'Troubleshooting-Routing.md' - Comparing OTP2 to OTP1: 'Version-Comparison.md' + - Frontends: 'Frontends.md' - APIs: - Introduction: 'apis/Apis.md' - GraphQL Tutorial: 'apis/GraphQL-Tutorial.md' @@ -96,8 +97,8 @@ nav: - Actuator API: 'sandbox/ActuatorAPI.md' - Direct Transfer Analyzer: 'sandbox/transferanalyzer.md' - Google Cloud Storage: 'sandbox/GoogleCloudStorage.md' - - SIRI Updaters: 'sandbox/SiriUpdater.md' - - SIRI Updater (Azure): 'sandbox/SiriAzureUpdater.md' + - SIRI Updaters: 'sandbox/siri/SiriUpdater.md' + - SIRI Updater (Azure): 'sandbox/siri/SiriAzureUpdater.md' - Vehicle Rental Service Directory API support: 'sandbox/VehicleRentalServiceDirectory.md' - Smoove Bike Rental Updator Support: 'sandbox/SmooveBikeRental.md' - Mapbox Vector Tiles API: 'sandbox/MapboxVectorTilesApi.md' diff --git a/pom.xml b/pom.xml index c066d35e112..a087b091d46 100644 --- a/pom.xml +++ b/pom.xml @@ -56,21 +56,21 @@ - 144 + 148 30.2 - 2.50 + 2.51 2.16.1 3.1.5 5.10.2 - 1.12.2 + 1.12.3 5.5.3 - 1.4.14 + 1.5.3 9.9.1 2.0.12 2.0.15 1.26 - 4.0.4 + 4.0.5 UTF-8 opentripplanner/OpenTripPlanner @@ -321,7 +321,7 @@ but we need the Maven project version as well, so we perform substitution. --> io.github.git-commit-id git-commit-id-maven-plugin - 7.0.0 + 8.0.0 @@ -363,7 +363,7 @@ properly if some input files are missing a terminating newline) --> org.apache.maven.plugins maven-shade-plugin - 3.5.1 + 3.5.2 package @@ -444,7 +444,7 @@ com.google.cloud.tools jib-maven-plugin - 3.4.0 + 3.4.1 org.opentripplanner.standalone.OTPMain @@ -545,7 +545,7 @@ com.google.cloud libraries-bom - 26.31.0 + 26.34.0 pom import @@ -688,7 +688,7 @@ org.entur.gbfs gbfs-java-model - 3.0.20 + 3.0.24 @@ -713,7 +713,7 @@ org.mockito mockito-core - 5.10.0 + 5.11.0 test @@ -831,7 +831,7 @@ org.onebusaway onebusaway-gtfs - 1.4.10 + 1.4.15 org.slf4j @@ -907,17 +907,18 @@ com.azure azure-core - 1.45.0 + 1.46.0 com.azure azure-messaging-servicebus - 7.14.5 + 7.15.0 - com.azure.resourcemanager - azure-resourcemanager-servicebus - 2.32.0 + com.azure + azure-identity + 1.11.2 + compile ch.poole @@ -929,7 +930,7 @@ org.apache.commons commons-compress - 1.25.0 + 1.26.0 test diff --git a/renovate.json5 b/renovate.json5 index 42e7552c338..8ecbbeb565e 100644 --- a/renovate.json5 +++ b/renovate.json5 @@ -26,18 +26,27 @@ "com.azure.resourcemanager:azure-resourcemanager-servicebus", "com.azure:azure-core", "com.azure:azure-messaging-servicebus", - "io.netty:netty-bom" + "com.azure:azure-identity" ], "enabled": false }, { "matchFiles": ["client-next/package.json"], - "enabled": false + "matchUpdateTypes": ["patch", "minor"], + "groupName": "Debug UI dependencies (non-major)", + "schedule": ["on the first day of the week"], + "assignees": ["testower"] + }, + { + "matchFiles": ["client-next/package.json"], + "matchUpdateTypes": ["major"], + "assignees": ["testower"] }, // gbfs-java-model patch releases are automatic dependency upgrades so we automerge { "matchPackageNames": [ - "org.entur.gbfs:gbfs-java-model" + "org.entur.gbfs:gbfs-java-model", + "ch.qos.logback:logback-classic" ], "matchUpdateTypes": ["patch"], "schedule": "on the 18th day of the month", @@ -97,7 +106,6 @@ "org.apache.maven.plugins:maven-surefire-plugin", "org.jacoco:jacoco-maven-plugin", // coverage plugin "org.apache.commons:commons-compress", // only used by tests - "ch.qos.logback:logback-classic", // maven plugins "org.codehaus.mojo:build-helper-maven-plugin", "org.apache.maven.plugins:maven-gpg-plugin", @@ -114,6 +122,13 @@ ], "automerge": true, "schedule": "after 11pm and before 5am every weekday" + }, + { + "description": "give some projects time to publish a changelog before opening the PR", + "matchPackagePrefixes": [ + "com.google.dagger:" + ], + "minimumReleaseAge": "1 week" } ], "timezone": "Europe/Berlin" diff --git a/src/client/debug-client-preview/index.html b/src/client/debug-client-preview/index.html index 2653fdf36c2..a7b15bef13b 100644 --- a/src/client/debug-client-preview/index.html +++ b/src/client/debug-client-preview/index.html @@ -5,8 +5,8 @@ OTP Debug Client - - + +
diff --git a/src/ext-test/java/org/opentripplanner/ext/fares/impl/CombinedInterlinedLegsFareServiceTest.java b/src/ext-test/java/org/opentripplanner/ext/fares/impl/CombinedInterlinedLegsFareServiceTest.java index 3f237cf509f..407cd0f11e9 100644 --- a/src/ext-test/java/org/opentripplanner/ext/fares/impl/CombinedInterlinedLegsFareServiceTest.java +++ b/src/ext-test/java/org/opentripplanner/ext/fares/impl/CombinedInterlinedLegsFareServiceTest.java @@ -16,12 +16,12 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import org.opentripplanner.ext.fares.impl.CombinedInterlinedLegsFareService.CombinationMode; import org.opentripplanner.model.plan.Itinerary; import org.opentripplanner.model.plan.Place; import org.opentripplanner.model.plan.PlanTestConstants; import org.opentripplanner.routing.core.FareType; -import org.opentripplanner.test.support.VariableSource; import org.opentripplanner.transit.model._data.TransitModelForTest; import org.opentripplanner.transit.model.basic.Money; import org.opentripplanner.transit.model.network.Route; @@ -44,17 +44,19 @@ class CombinedInterlinedLegsFareServiceTest implements PlanTestConstants { static Money tenDollars = Money.usDollars(10); static Money twentyDollars = Money.usDollars(20); - static Stream testCases = Stream.of( - Arguments.of(ALWAYS, interlinedWithSameRoute, tenDollars, "same routes"), - Arguments.of(ALWAYS, interlinedWithDifferentRoute, tenDollars, "different routes"), - Arguments.of(SAME_ROUTE, interlinedWithSameRoute, tenDollars, "same routes"), - Arguments.of(SAME_ROUTE, interlinedWithDifferentRoute, twentyDollars, "different routes") - ); + static Stream testCases() { + return Stream.of( + Arguments.of(ALWAYS, interlinedWithSameRoute, tenDollars, "same routes"), + Arguments.of(ALWAYS, interlinedWithDifferentRoute, tenDollars, "different routes"), + Arguments.of(SAME_ROUTE, interlinedWithSameRoute, tenDollars, "same routes"), + Arguments.of(SAME_ROUTE, interlinedWithDifferentRoute, twentyDollars, "different routes") + ); + } @ParameterizedTest( name = "Itinerary with {3} and combination mode {0} should lead to a fare of {2}" ) - @VariableSource("testCases") + @MethodSource("testCases") void modes(CombinationMode mode, Itinerary itinerary, Money totalPrice, String hint) { var service = new CombinedInterlinedLegsFareService(mode); service.addFareRules( diff --git a/src/ext-test/java/org/opentripplanner/ext/fares/model/FareProductTest.java b/src/ext-test/java/org/opentripplanner/ext/fares/model/FareProductTest.java index 9edcecb7567..089bac64c11 100644 --- a/src/ext-test/java/org/opentripplanner/ext/fares/model/FareProductTest.java +++ b/src/ext-test/java/org/opentripplanner/ext/fares/model/FareProductTest.java @@ -9,10 +9,10 @@ import javax.annotation.Nonnull; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import org.opentripplanner.model.fare.FareMedium; import org.opentripplanner.model.fare.FareProduct; import org.opentripplanner.model.fare.RiderCategory; -import org.opentripplanner.test.support.VariableSource; import org.opentripplanner.transit.model.basic.Money; import org.opentripplanner.transit.model.framework.FeedScopedId; @@ -28,27 +28,29 @@ class FareProductTest { static FareMedium MEDIUM = new FareMedium(new FeedScopedId("1", "app"), "App"); - static Stream testCases = Stream.of( - Arguments.of(fareProduct(null, null, null), ZDT, "b18a083d-ee82-3c83-af07-2b8bb11bff9e"), - Arguments.of( - fareProduct(null, null, null), - ZDT.plusHours(1), - "2a60adcf-3e56-338a-ab7d-8407a3bc529b" - ), - Arguments.of( - fareProduct(Duration.ofHours(2), CATEGORY, null), - ZDT, - "ca4a45b5-b837-34d8-b987-4e06fa5a3317" - ), - Arguments.of( - fareProduct(Duration.ofHours(2), CATEGORY, MEDIUM), - ZDT, - "b59e7eef-c118-37b1-8f53-bf2a97c5dae9" - ) - ); + static Stream testCases() { + return Stream.of( + Arguments.of(fareProduct(null, null, null), ZDT, "b18a083d-ee82-3c83-af07-2b8bb11bff9e"), + Arguments.of( + fareProduct(null, null, null), + ZDT.plusHours(1), + "2a60adcf-3e56-338a-ab7d-8407a3bc529b" + ), + Arguments.of( + fareProduct(Duration.ofHours(2), CATEGORY, null), + ZDT, + "ca4a45b5-b837-34d8-b987-4e06fa5a3317" + ), + Arguments.of( + fareProduct(Duration.ofHours(2), CATEGORY, MEDIUM), + ZDT, + "b59e7eef-c118-37b1-8f53-bf2a97c5dae9" + ) + ); + } @ParameterizedTest - @VariableSource("testCases") + @MethodSource("testCases") void instanceId(FareProduct fareProduct, ZonedDateTime startTime, String expectedInstanceId) { var instanceId = fareProduct.uniqueInstanceId(startTime); diff --git a/src/ext-test/java/org/opentripplanner/ext/flex/FlexTest.java b/src/ext-test/java/org/opentripplanner/ext/flex/FlexTest.java index 48b66eb54dd..26cedae79ee 100644 --- a/src/ext-test/java/org/opentripplanner/ext/flex/FlexTest.java +++ b/src/ext-test/java/org/opentripplanner/ext/flex/FlexTest.java @@ -24,13 +24,11 @@ public abstract class FlexTest { private static final ResourceLoader RES = ResourceLoader.of(FlexTest.class); - protected static final File ASPEN_GTFS = RES.file("aspen-flex-on-demand.gtfs.zip"); - protected static final File COBB_FLEX_GTFS = RES.file( - "cobblinc-scheduled-deviated-flex.gtfs.zip" - ); + protected static final File ASPEN_GTFS = RES.file("aspen-flex-on-demand.gtfs"); + protected static final File COBB_FLEX_GTFS = RES.file("cobblinc-scheduled-deviated-flex.gtfs"); protected static final File COBB_BUS_30_GTFS = RES.file("cobblinc-bus-30-only.gtfs.zip"); protected static final File MARTA_BUS_856_GTFS = RES.file("marta-bus-856-only.gtfs.zip"); - protected static final File LINCOLN_COUNTY_GBFS = RES.file("lincoln-county-flex.gtfs.zip"); + protected static final File LINCOLN_COUNTY_GTFS = RES.file("lincoln-county-flex.gtfs"); protected static final File COBB_OSM = RES.file("cobb-county.filtered.osm.pbf"); protected static final DirectFlexPathCalculator calculator = new DirectFlexPathCalculator(); diff --git a/src/ext-test/java/org/opentripplanner/ext/flex/trip/ScheduledDeviatedTripTest.java b/src/ext-test/java/org/opentripplanner/ext/flex/trip/ScheduledDeviatedTripTest.java index e0f85676034..143388cac0f 100644 --- a/src/ext-test/java/org/opentripplanner/ext/flex/trip/ScheduledDeviatedTripTest.java +++ b/src/ext-test/java/org/opentripplanner/ext/flex/trip/ScheduledDeviatedTripTest.java @@ -220,7 +220,7 @@ void shouldNotInterpolateFlexTimes() { */ @Test void parseContinuousPickup() { - var lincolnGraph = FlexTest.buildFlexGraph(LINCOLN_COUNTY_GBFS); + var lincolnGraph = FlexTest.buildFlexGraph(LINCOLN_COUNTY_GTFS); assertNotNull(lincolnGraph); } diff --git a/src/ext-test/java/org/opentripplanner/ext/ridehailing/RideHailingAccessShifterTest.java b/src/ext-test/java/org/opentripplanner/ext/ridehailing/RideHailingAccessShifterTest.java index 465697bf197..3e6df7135e5 100644 --- a/src/ext-test/java/org/opentripplanner/ext/ridehailing/RideHailingAccessShifterTest.java +++ b/src/ext-test/java/org/opentripplanner/ext/ridehailing/RideHailingAccessShifterTest.java @@ -16,6 +16,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import org.opentripplanner._support.time.ZoneIds; import org.opentripplanner.model.GenericLocation; import org.opentripplanner.routing.algorithm.raptoradapter.transit.DefaultAccessEgress; @@ -24,7 +25,6 @@ import org.opentripplanner.routing.api.request.StreetMode; import org.opentripplanner.street.search.state.State; import org.opentripplanner.street.search.state.TestStateBuilder; -import org.opentripplanner.test.support.VariableSource; class RideHailingAccessShifterTest { @@ -42,21 +42,23 @@ class RideHailingAccessShifterTest { List.of() ); - static Stream testCases = Stream.of( - // leave now, so shift by 10 minutes - Arguments.of(TIME, DEFAULT_ARRIVAL_DURATION), - // only shift by 9 minutes because we are wanting to leave in 1 minute - Arguments.of(TIME.plus(ofMinutes(1)), ofMinutes(9)), - // only shift by 7 minutes because we are wanting to leave in 3 minutes - Arguments.of(TIME.plus(ofMinutes(3)), ofMinutes(7)), - // no shifting because it's far in the future - Arguments.of(TIME.plus(ofMinutes(15)), ZERO), - Arguments.of(TIME.plus(ofMinutes(30)), ZERO), - Arguments.of(TIME.plus(ofMinutes(40)), ZERO) - ); + static Stream testCases() { + return Stream.of( + // leave now, so shift by 10 minutes + Arguments.of(TIME, DEFAULT_ARRIVAL_DURATION), + // only shift by 9 minutes because we are wanting to leave in 1 minute + Arguments.of(TIME.plus(ofMinutes(1)), ofMinutes(9)), + // only shift by 7 minutes because we are wanting to leave in 3 minutes + Arguments.of(TIME.plus(ofMinutes(3)), ofMinutes(7)), + // no shifting because it's far in the future + Arguments.of(TIME.plus(ofMinutes(15)), ZERO), + Arguments.of(TIME.plus(ofMinutes(30)), ZERO), + Arguments.of(TIME.plus(ofMinutes(40)), ZERO) + ); + } @ParameterizedTest - @VariableSource("testCases") + @MethodSource("testCases") void testArrivalDelay(Instant searchTime, Duration expectedArrival) { var req = new RouteRequest(); req.setTo(FROM); @@ -73,14 +75,16 @@ void testArrivalDelay(Instant searchTime, Duration expectedArrival) { assertEquals(expectedArrival, actualArrival); } - static Stream accessShiftCases = Stream.of( - // leave now, so shift by 10 minutes - Arguments.of(TIME, TIME.plus(DEFAULT_ARRIVAL_DURATION)), - Arguments.of(TIME.plus(Duration.ofHours(4)), TIME) - ); + static Stream accessShiftCases() { + return Stream.of( + // leave now, so shift by 10 minutes + Arguments.of(TIME, TIME.plus(DEFAULT_ARRIVAL_DURATION)), + Arguments.of(TIME.plus(Duration.ofHours(4)), TIME) + ); + } @ParameterizedTest - @VariableSource("accessShiftCases") + @MethodSource("accessShiftCases") void shiftAccesses(Instant startTime, Instant expectedStartTime) { var drivingState = TestStateBuilder.ofDriving().streetEdge().streetEdge().build(); var access = new DefaultAccessEgress(0, drivingState); diff --git a/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/areastops/AreaStopPropertyMapperTest.java b/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/areastops/AreaStopPropertyMapperTest.java new file mode 100644 index 00000000000..2cf0804b630 --- /dev/null +++ b/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/areastops/AreaStopPropertyMapperTest.java @@ -0,0 +1,44 @@ +package org.opentripplanner.ext.vectortiles.layers.areastops; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.opentripplanner.inspector.vector.KeyValue.kv; + +import java.util.List; +import java.util.Locale; +import org.junit.jupiter.api.Test; +import org.opentripplanner._support.geometry.Polygons; +import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model.network.Route; +import org.opentripplanner.transit.model.site.AreaStop; +import org.opentripplanner.transit.service.StopModel; + +class AreaStopPropertyMapperTest { + + private static final TransitModelForTest MODEL = new TransitModelForTest(StopModel.of()); + private static final AreaStop STOP = MODEL.areaStopForTest("123", Polygons.BERLIN); + private static final Route ROUTE_WITH_COLOR = TransitModelForTest + .route("123") + .withColor("ffffff") + .build(); + private static final Route ROUTE_WITHOUT_COLOR = TransitModelForTest.route("456").build(); + + @Test + void map() { + var mapper = new AreaStopPropertyMapper( + ignored -> List.of(ROUTE_WITH_COLOR, ROUTE_WITHOUT_COLOR), + Locale.ENGLISH + ); + + var kv = mapper.map(STOP); + + assertEquals( + List.of( + kv("gtfsId", "F:123"), + kv("name", "123"), + kv("code", null), + kv("routeColors", "ffffff") + ), + kv + ); + } +} diff --git a/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/areastops/AreaStopsLayerBuilderTest.java b/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/areastops/AreaStopsLayerBuilderTest.java new file mode 100644 index 00000000000..2e6c4e16c40 --- /dev/null +++ b/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/areastops/AreaStopsLayerBuilderTest.java @@ -0,0 +1,74 @@ +package org.opentripplanner.ext.vectortiles.layers.areastops; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.opentripplanner.standalone.config.framework.json.JsonSupport.newNodeAdapterForTest; + +import java.util.List; +import java.util.Locale; +import org.junit.jupiter.api.Test; +import org.opentripplanner._support.geometry.Polygons; +import org.opentripplanner.ext.vectortiles.VectorTilesResource; +import org.opentripplanner.framework.i18n.I18NString; +import org.opentripplanner.inspector.vector.LayerParameters; +import org.opentripplanner.standalone.config.routerconfig.VectorTileConfig; +import org.opentripplanner.transit.model.framework.Deduplicator; +import org.opentripplanner.transit.model.framework.FeedScopedId; +import org.opentripplanner.transit.model.site.AreaStop; +import org.opentripplanner.transit.service.DefaultTransitService; +import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.StopModelBuilder; +import org.opentripplanner.transit.service.TransitModel; + +class AreaStopsLayerBuilderTest { + + private static final FeedScopedId ID = new FeedScopedId("FEED", "ID"); + private static final I18NString NAME = I18NString.of("Test stop"); + private static final String CONFIG = + """ + { + "vectorTiles": { + "layers" : [ + { + "name": "areaStops", + "type": "AreaStop", + "mapper": "OTPRR", + "maxZoom": 20, + "minZoom": 14, + "cacheMaxSeconds": 60, + "expansionFactor": 0 + } + ] + } + } + """; + private static final LayerParameters LAYER_CONFIG = VectorTileConfig + .mapVectorTilesParameters(newNodeAdapterForTest(CONFIG), "vectorTiles") + .layers() + .getFirst(); + + private final StopModelBuilder stopModelBuilder = StopModel.of(); + + private final AreaStop AREA_STOP = stopModelBuilder + .areaStop(ID) + .withName(NAME) + .withGeometry(Polygons.BERLIN) + .build(); + + private final TransitModel transitModel = new TransitModel( + stopModelBuilder.withAreaStop(AREA_STOP).build(), + new Deduplicator() + ); + + @Test + void getAreaStops() { + transitModel.index(); + + var subject = new AreaStopsLayerBuilder( + new DefaultTransitService(transitModel), + LAYER_CONFIG, + Locale.ENGLISH + ); + var geometries = subject.getGeometries(AREA_STOP.getGeometry().getEnvelopeInternal()); + assertEquals(List.of(Polygons.BERLIN), geometries); + } +} diff --git a/src/ext-test/java/org/opentripplanner/ext/vehicleparking/bikely/BikelyUpdaterTest.java b/src/ext-test/java/org/opentripplanner/ext/vehicleparking/bikely/BikelyUpdaterTest.java index 771836c67f2..569db85f33b 100644 --- a/src/ext-test/java/org/opentripplanner/ext/vehicleparking/bikely/BikelyUpdaterTest.java +++ b/src/ext-test/java/org/opentripplanner/ext/vehicleparking/bikely/BikelyUpdaterTest.java @@ -3,14 +3,13 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; import java.time.Duration; import java.util.Locale; import org.junit.jupiter.api.Test; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; import org.opentripplanner.routing.vehicle_parking.VehicleParkingState; +import org.opentripplanner.test.support.ResourceLoader; import org.opentripplanner.transit.model.basic.Locales; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.updater.spi.HttpHeaders; @@ -19,10 +18,10 @@ public class BikelyUpdaterTest { @Test void parseBikeBoxes() { - var url = "file:src/ext-test/resources/vehicleparking/bikely/bikely.json"; + var uri = ResourceLoader.of(this).uri("bikely.json"); var parameters = new BikelyUpdaterParameters( "", - url, + uri, "bikely", Duration.ofSeconds(30), HttpHeaders.empty() @@ -32,50 +31,40 @@ void parseBikeBoxes() { assertTrue(updater.update()); var parkingLots = updater.getUpdates(); - assertEquals(100, parkingLots.size()); + assertEquals(8, parkingLots.size()); - var first = parkingLots.get(0); - assertEquals(new FeedScopedId("bikely", "164"), first.getId()); - assertEquals("Husebybadet", first.getName().toString()); + var first = parkingLots.getFirst(); + assertEquals(new FeedScopedId("bikely", "7"), first.getId()); + assertEquals("Gjettum T-banestasjon", first.getName().toString()); assertFalse(first.hasAnyCarPlaces()); assertTrue(first.hasBicyclePlaces()); assertEquals( - "First 4 hour(s) is NOK0.00, afterwards NOK10.00 per 1 hour(s)", + "First 12 hour(s) is NOK0.00, afterwards NOK10.00 per 1 hour(s)", first.getNote().toString(Locale.ENGLISH) ); assertEquals( - "Første 4 time(r) er kr 0,00. Deretter kr 10,00 per 1 time(r)", + "Første 12 time(r) er kr 0,00. Deretter kr 10,00 per 1 time(r)", first.getNote().toString(Locales.NORWEGIAN_BOKMAL) ); assertEquals( - "Første 4 time(r) er kr 0,00. Deretter kr 10,00 per 1 time(r)", + "Første 12 time(r) er kr 0,00. Deretter kr 10,00 per 1 time(r)", first.getNote().toString(Locales.NORWAY) ); var availibility = first.getAvailability(); - assertEquals(4, availibility.getBicycleSpaces()); + assertEquals(8, availibility.getBicycleSpaces()); var capacity = first.getCapacity(); assertEquals(10, capacity.getBicycleSpaces()); var freeParkingLots = parkingLots.get(2); - assertEquals("Free of charge", freeParkingLots.getNote().toString(Locale.ENGLISH)); + assertEquals( + "First 12 hour(s) is NOK0.00, afterwards NOK10.00 per 1 hour(s)", + freeParkingLots.getNote().toString(Locale.ENGLISH) + ); assertEquals(VehicleParkingState.OPERATIONAL, first.getState()); - var last = parkingLots.get(99); - assertEquals("Hamar Stasjon", last.getName().toString()); - assertNull(last.getOpeningHours()); - assertFalse(last.hasAnyCarPlaces()); - assertFalse(last.hasWheelchairAccessibleCarPlaces()); - - var closed = parkingLots - .stream() - .map(VehicleParking::getState) - .filter(x -> x == VehicleParkingState.TEMPORARILY_CLOSED) - .count(); - assertEquals(2, closed); - parkingLots.forEach(lot -> { assertNotNull(lot.getNote().toString()); }); diff --git a/src/ext-test/java/org/opentripplanner/ext/vehicleparking/hslpark/HslParkUpdaterTest.java b/src/ext-test/java/org/opentripplanner/ext/vehicleparking/hslpark/HslParkUpdaterTest.java index de7f23922d6..2226a988d20 100644 --- a/src/ext-test/java/org/opentripplanner/ext/vehicleparking/hslpark/HslParkUpdaterTest.java +++ b/src/ext-test/java/org/opentripplanner/ext/vehicleparking/hslpark/HslParkUpdaterTest.java @@ -15,27 +15,30 @@ import org.opentripplanner.model.calendar.openinghours.OpeningHoursCalendarService; import org.opentripplanner.model.calendar.openinghours.OsmOpeningHoursSupport; import org.opentripplanner.routing.vehicle_parking.VehicleParkingState; +import org.opentripplanner.test.support.ResourceLoader; import org.opentripplanner.transit.model.framework.Deduplicator; public class HslParkUpdaterTest { + private static final ResourceLoader LOADER = ResourceLoader.of(HslParkUpdaterTest.class); + private static final String UTILIZATIONS_URL = LOADER.url("utilizations.json").toString(); + private static final String HUBS_URL = LOADER.url("hubs.json").toString(); + private static final String FACILITIES_URL = LOADER.url("facilities.json").toString(); + @Test void parseParks() { - var facilitiesUrl = "file:src/ext-test/resources/vehicleparking/hslpark/facilities.json"; - var hubsUrl = "file:src/ext-test/resources/vehicleparking/hslpark/hubs.json"; - var utilizationsUrl = "file:src/ext-test/resources/vehicleparking/hslpark/utilizations.json"; var timeZone = ZoneIds.HELSINKI; var parameters = new HslParkUpdaterParameters( "", 3000, - facilitiesUrl, + FACILITIES_URL, "hslpark", null, 30, - utilizationsUrl, + UTILIZATIONS_URL, timeZone, - hubsUrl + HUBS_URL ); var openingHoursCalendarService = new OpeningHoursCalendarService( new Deduplicator(), @@ -149,21 +152,18 @@ void parseParks() { @Test void parseParksWithoutTimeZone() { - var facilitiesUrl = "file:src/ext-test/resources/vehicleparking/hslpark/facilities.json"; - var hubsUrl = "file:src/ext-test/resources/vehicleparking/hslpark/hubs.json"; - var utilizationsUrl = "file:src/ext-test/resources/vehicleparking/hslpark/utilizations.json"; ZoneId timeZone = null; var parameters = new HslParkUpdaterParameters( "", 3000, - facilitiesUrl, + FACILITIES_URL, "hslpark", null, 30, - utilizationsUrl, + UTILIZATIONS_URL, timeZone, - hubsUrl + HUBS_URL ); var openingHoursCalendarService = new OpeningHoursCalendarService( new Deduplicator(), diff --git a/src/ext-test/java/org/opentripplanner/ext/vehicleparking/parkapi/ParkAPIUpdaterTest.java b/src/ext-test/java/org/opentripplanner/ext/vehicleparking/parkapi/ParkAPIUpdaterTest.java index 3fae4eb0f9d..d1e8bfe9c5f 100644 --- a/src/ext-test/java/org/opentripplanner/ext/vehicleparking/parkapi/ParkAPIUpdaterTest.java +++ b/src/ext-test/java/org/opentripplanner/ext/vehicleparking/parkapi/ParkAPIUpdaterTest.java @@ -13,20 +13,23 @@ import org.opentripplanner._support.time.ZoneIds; import org.opentripplanner.model.calendar.openinghours.OpeningHoursCalendarService; import org.opentripplanner.model.calendar.openinghours.OsmOpeningHoursSupport; +import org.opentripplanner.test.support.ResourceLoader; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.updater.spi.HttpHeaders; public class ParkAPIUpdaterTest { private static final Duration FREQUENCY = Duration.ofSeconds(30); + private static final ResourceLoader LOADER = ResourceLoader.of(ParkAPIUpdaterTest.class); + private static final String REUTLINGEN_URL = LOADER.uri("parkapi-reutlingen.json").toString(); + private static final String HERRENBERG_URL = LOADER.uri("herrenberg.json").toString(); @Test void parseCars() { - var url = "file:src/ext-test/resources/vehicleparking/parkapi/parkapi-reutlingen.json"; var timeZone = ZoneIds.BERLIN; var parameters = new ParkAPIUpdaterParameters( "", - url, + REUTLINGEN_URL, "park-api", FREQUENCY, HttpHeaders.empty(), @@ -66,11 +69,10 @@ void parseCars() { @Test void parseCarsWithoutTimeZone() { - var url = "file:src/ext-test/resources/vehicleparking/parkapi/parkapi-reutlingen.json"; ZoneId timeZone = null; var parameters = new ParkAPIUpdaterParameters( "", - url, + REUTLINGEN_URL, "park-api", FREQUENCY, HttpHeaders.empty(), @@ -99,10 +101,9 @@ void parseCarsWithoutTimeZone() { @Test void parseHerrenbergOpeningHours() { - var url = "file:src/ext-test/resources/vehicleparking/parkapi/herrenberg.json"; var parameters = new ParkAPIUpdaterParameters( "", - url, + HERRENBERG_URL, "park-api", FREQUENCY, HttpHeaders.empty(), diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/aspen-flex-on-demand.gtfs.zip b/src/ext-test/resources/org/opentripplanner/ext/flex/aspen-flex-on-demand.gtfs.zip deleted file mode 100644 index 2f5d4d32e61..00000000000 Binary files a/src/ext-test/resources/org/opentripplanner/ext/flex/aspen-flex-on-demand.gtfs.zip and /dev/null differ diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/aspen-flex-on-demand.gtfs/agency.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/aspen-flex-on-demand.gtfs/agency.txt new file mode 100644 index 00000000000..397266ca173 --- /dev/null +++ b/src/ext-test/resources/org/opentripplanner/ext/flex/aspen-flex-on-demand.gtfs/agency.txt @@ -0,0 +1,2 @@ +agency_id,agency_url,agency_lang,agency_name,agency_phone,agency_timezone,agency_fare_url +1696,https://www.cityofaspen.com/215/Transportation,en,City of Aspen,970-920-5267,America/Denver, diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/aspen-flex-on-demand.gtfs/booking_rules.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/aspen-flex-on-demand.gtfs/booking_rules.txt new file mode 100644 index 00000000000..e14b78c4752 --- /dev/null +++ b/src/ext-test/resources/org/opentripplanner/ext/flex/aspen-flex-on-demand.gtfs/booking_rules.txt @@ -0,0 +1,2 @@ +booking_rule_id,booking_type,prior_notice_duration_min,prior_notice_duration_max,prior_notice_start_day,prior_notice_start_time,prior_notice_last_day,prior_notice_last_time,prior_notice_service_id,message,pickup_message,drop_off_message,phone_number,info_url,booking_url +booking_route_17102,0,,,,,,,,"The Downtowner provides free door-to-door transportation within the downtown area of Aspen. To schedule a ride, use the Downtowner Android/iOS mobile app. You may also request a ride by calling (877) 230-6045.",,,877-230-6045,https://www.cityofaspen.com/270/Downtowner, diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/aspen-flex-on-demand.gtfs/calendar.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/aspen-flex-on-demand.gtfs/calendar.txt new file mode 100644 index 00000000000..11faeb78351 --- /dev/null +++ b/src/ext-test/resources/org/opentripplanner/ext/flex/aspen-flex-on-demand.gtfs/calendar.txt @@ -0,0 +1,3 @@ +service_id,service_name,monday,tuesday,wednesday,thursday,friday,saturday,sunday,start_date,end_date +c_20808_b_29084_d_127,Downtowner Off Season (Flex) (All days of week),1,1,1,1,1,1,1,20210415,20211124 +c_20806_b_28352_d_127,Downtowner Winter (Flex) (All days of week),1,1,1,1,1,1,1,20201126,20210414 diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/aspen-flex-on-demand.gtfs/calendar_attributes.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/aspen-flex-on-demand.gtfs/calendar_attributes.txt new file mode 100644 index 00000000000..b1e77a5f7d6 --- /dev/null +++ b/src/ext-test/resources/org/opentripplanner/ext/flex/aspen-flex-on-demand.gtfs/calendar_attributes.txt @@ -0,0 +1,22 @@ +service_id,service_description +c_15228_b_30138_d_127,Summer (All days of week) +c_15228_b_30138_d_31,Summer (Weekday) +c_15228_b_30138_d_96,Summer (Weekend) +c_20732_b_28107_d_127,Winter (All days of week) +c_20733_b_28108_d_127,Winter - Aspen (All days of week) +c_20733_b_28108_d_31,Winter - Aspen (Weekday) +c_20733_b_28108_d_32,Winter - Aspen (Saturday only) +c_20733_b_28108_d_64,Winter - Aspen (Sunday only) +c_20806_b_28352_d_127,Downtowner Winter (Flex) (All days of week) +c_20808_b_29084_d_127,Downtowner Off Season (Flex) (All days of week) +c_21117_b_29087_d_127,BM & AH ending 4/4/21 (All days of week) +c_21540_b_30150_d_127,Summer Local X Route (All days of week) +c_2670_b_29268_d_127,Spring (All days of week) +c_2670_b_29268_d_31,Spring (Weekday) +c_2670_b_29268_d_32,Spring (Saturday only) +c_2670_b_29268_d_64,Spring (Sunday only) +c_2675_b_29280_d_127,Spring - Aspen (All days of week) +c_2675_b_29280_d_31,Spring - Aspen (Weekday) +c_2675_b_29280_d_32,Spring - Aspen (Saturday only) +c_2675_b_29280_d_64,Spring - Aspen (Sunday only) +c_2927_b_30137_d_127,Summer - Aspen (All days of week) diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/aspen-flex-on-demand.gtfs/calendar_dates.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/aspen-flex-on-demand.gtfs/calendar_dates.txt new file mode 100644 index 00000000000..bb359e8aa10 --- /dev/null +++ b/src/ext-test/resources/org/opentripplanner/ext/flex/aspen-flex-on-demand.gtfs/calendar_dates.txt @@ -0,0 +1 @@ +date,service_id,holiday_name,exception_type diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/aspen-flex-on-demand.gtfs/feed_info.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/aspen-flex-on-demand.gtfs/feed_info.txt new file mode 100644 index 00000000000..8c82e396ed3 --- /dev/null +++ b/src/ext-test/resources/org/opentripplanner/ext/flex/aspen-flex-on-demand.gtfs/feed_info.txt @@ -0,0 +1,2 @@ +feed_publisher_url,feed_publisher_name,feed_lang,feed_version,feed_license,feed_contact_email,feed_contact_url,feed_start_date,feed_end_date,feed_id +http://www.trilliumtransit.com,"Trillium Solutions, Inc.",en,UTC: 03-Aug-2021 18:42,,support+test+rfta-co-us@trilliumtransit.com,http://support.trilliumtransit.com,20201126,20211124,1696 diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/aspen-flex-on-demand.gtfs/location_groups.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/aspen-flex-on-demand.gtfs/location_groups.txt new file mode 100644 index 00000000000..45845294fa8 --- /dev/null +++ b/src/ext-test/resources/org/opentripplanner/ext/flex/aspen-flex-on-demand.gtfs/location_groups.txt @@ -0,0 +1 @@ +location_group_id,location_id,location_group_name diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/aspen-flex-on-demand.gtfs/locations.geojson b/src/ext-test/resources/org/opentripplanner/ext/flex/aspen-flex-on-demand.gtfs/locations.geojson new file mode 100644 index 00000000000..7360d892031 --- /dev/null +++ b/src/ext-test/resources/org/opentripplanner/ext/flex/aspen-flex-on-demand.gtfs/locations.geojson @@ -0,0 +1,469 @@ +{ + "type": "FeatureCollection", + "features": [ + { + "id": "area_294", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -106.8313489, + 39.1981031 + ], + [ + -106.8314352, + 39.1975852 + ], + [ + -106.8313557, + 39.1970026 + ], + [ + -106.8315428, + 39.1960976 + ], + [ + -106.8319559, + 39.1950874 + ], + [ + -106.832068, + 39.194878 + ], + [ + -106.832796, + 39.194778 + ], + [ + -106.832751, + 39.194501 + ], + [ + -106.833142, + 39.193595 + ], + [ + -106.832841, + 39.193158 + ], + [ + -106.832758, + 39.192838 + ], + [ + -106.8327928, + 39.1922519 + ], + [ + -106.833074, + 39.192176 + ], + [ + -106.833416, + 39.192268 + ], + [ + -106.834328, + 39.19216 + ], + [ + -106.834475, + 39.191264 + ], + [ + -106.83486, + 39.190991 + ], + [ + -106.835149, + 39.190509 + ], + [ + -106.83517, + 39.190069 + ], + [ + -106.834445, + 39.18915 + ], + [ + -106.833305, + 39.189681 + ], + [ + -106.8322134, + 39.1904725 + ], + [ + -106.831157, + 39.191375 + ], + [ + -106.828169, + 39.191196 + ], + [ + -106.826591, + 39.1901729 + ], + [ + -106.8248905, + 39.1891214 + ], + [ + -106.8251345, + 39.1881633 + ], + [ + -106.8245203, + 39.1869057 + ], + [ + -106.8241183, + 39.1859367 + ], + [ + -106.823531, + 39.1853192 + ], + [ + -106.8218709, + 39.1841195 + ], + [ + -106.812301, + 39.180876 + ], + [ + -106.811534, + 39.180186 + ], + [ + -106.811157, + 39.180003 + ], + [ + -106.809824, + 39.179728 + ], + [ + -106.808473, + 39.179329 + ], + [ + -106.808052, + 39.179583 + ], + [ + -106.808461, + 39.18003 + ], + [ + -106.809052, + 39.180477 + ], + [ + -106.808772, + 39.181044 + ], + [ + -106.8101126, + 39.1820394 + ], + [ + -106.8107416, + 39.1820944 + ], + [ + -106.8108395, + 39.1821203 + ], + [ + -106.811148, + 39.1822184 + ], + [ + -106.8112942, + 39.1823467 + ], + [ + -106.8113252, + 39.1824544 + ], + [ + -106.8113302, + 39.1827777 + ], + [ + -106.8113648, + 39.1828668 + ], + [ + -106.8114986, + 39.1830702 + ], + [ + -106.8115538, + 39.1832859 + ], + [ + -106.8114051, + 39.1841169 + ], + [ + -106.8108255, + 39.1841795 + ], + [ + -106.8110293, + 39.1851109 + ], + [ + -106.8107879, + 39.18535 + ], + [ + -106.810513, + 39.1856317 + ], + [ + -106.8099457, + 39.1860652 + ], + [ + -106.8098867, + 39.186165 + ], + [ + -106.8093422, + 39.1859249 + ], + [ + -106.8090378, + 39.1862305 + ], + [ + -106.8091142, + 39.1863147 + ], + [ + -106.8091035, + 39.186534 + ], + [ + -106.8089359, + 39.1867273 + ], + [ + -106.8083256, + 39.1861941 + ], + [ + -106.8080628, + 39.1863105 + ], + [ + -106.8078697, + 39.1865267 + ], + [ + -106.8075827, + 39.1866785 + ], + [ + -106.8070918, + 39.1864727 + ], + [ + -106.8068907, + 39.1864872 + ], + [ + -106.8063475, + 39.1869082 + ], + [ + -106.8056971, + 39.1873208 + ], + [ + -106.8056274, + 39.1874706 + ], + [ + -106.8060189, + 39.1877575 + ], + [ + -106.8065768, + 39.188298 + ], + [ + -106.8070597, + 39.1888925 + ], + [ + -106.8074405, + 39.1891503 + ], + [ + -106.8081848, + 39.1893499 + ], + [ + -106.8084034, + 39.1894747 + ], + [ + -106.8090552, + 39.1896992 + ], + [ + -106.8093637, + 39.1895204 + ], + [ + -106.8093677, + 39.1894518 + ], + [ + -106.8101516, + 39.1896035 + ], + [ + -106.810509, + 39.1895744 + ], + [ + -106.8107718, + 39.1896867 + ], + [ + -106.8108577, + 39.1898197 + ], + [ + -106.8119037, + 39.1903852 + ], + [ + -106.8125212, + 39.1905366 + ], + [ + -106.8134499, + 39.190688 + ], + [ + -106.8135848, + 39.1908177 + ], + [ + -106.813827, + 39.190964 + ], + [ + -106.814601, + 39.191173 + ], + [ + -106.815364, + 39.191457 + ], + [ + -106.815479, + 39.191692 + ], + [ + -106.815516, + 39.191988 + ], + [ + -106.815509, + 39.192317 + ], + [ + -106.815655, + 39.192792 + ], + [ + -106.8159265, + 39.1929961 + ], + [ + -106.816198, + 39.193142 + ], + [ + -106.8172, + 39.193179 + ], + [ + -106.81733, + 39.193222 + ], + [ + -106.817386, + 39.193299 + ], + [ + -106.81744, + 39.193561 + ], + [ + -106.817408, + 39.194114 + ], + [ + -106.8169679, + 39.1942598 + ], + [ + -106.8170644, + 39.1944367 + ], + [ + -106.817472, + 39.194547 + ], + [ + -106.818395, + 39.194979 + ], + [ + -106.8219298, + 39.1953344 + ], + [ + -106.8234262, + 39.1962219 + ], + [ + -106.8235007, + 39.1972818 + ], + [ + -106.8240269, + 39.1975731 + ], + [ + -106.8294418, + 39.1977022 + ], + [ + -106.830769, + 39.1980723 + ], + [ + -106.8313489, + 39.1981031 + ] + ] + ] + }, + "properties": {} + } + ] +} \ No newline at end of file diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/aspen-flex-on-demand.gtfs/routes.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/aspen-flex-on-demand.gtfs/routes.txt new file mode 100644 index 00000000000..5fd172c73da --- /dev/null +++ b/src/ext-test/resources/org/opentripplanner/ext/flex/aspen-flex-on-demand.gtfs/routes.txt @@ -0,0 +1,2 @@ +agency_id,route_id,route_short_name,route_long_name,route_desc,route_type,route_url,route_color,route_text_color,route_sort_order,min_headway_minutes,continuous_pickup,continuous_drop_off +1696,17102,,Downtowner,,3,http://driveless.net,,,22,,1,1 diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/aspen-flex-on-demand.gtfs/shapes.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/aspen-flex-on-demand.gtfs/shapes.txt new file mode 100644 index 00000000000..dd192f5306b --- /dev/null +++ b/src/ext-test/resources/org/opentripplanner/ext/flex/aspen-flex-on-demand.gtfs/shapes.txt @@ -0,0 +1 @@ +shape_id,shape_pt_lat,shape_pt_lon,shape_pt_sequence,shape_dist_traveled diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/aspen-flex-on-demand.gtfs/stop_times.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/aspen-flex-on-demand.gtfs/stop_times.txt new file mode 100644 index 00000000000..a08d3aa64b1 --- /dev/null +++ b/src/ext-test/resources/org/opentripplanner/ext/flex/aspen-flex-on-demand.gtfs/stop_times.txt @@ -0,0 +1,3 @@ +trip_id,arrival_time,departure_time,stop_id,stop_sequence,stop_headsign,pickup_type,drop_off_type,shape_dist_traveled,timepoint,continuous_pickup,continuous_drop_off,pickup_booking_rule_id,drop_off_booking_rule_id,start_pickup_drop_off_window,end_pickup_drop_off_window,mean_duration_factor,mean_duration_offset,safe_duration_factor,safe_duration_offset +t_1289257_b_28352_tn_0,,,area_294,1,,2,2,0,0,1,1,booking_route_17102,booking_route_17102,08:00:00,23:00:00,1,9.00,1,20.00 +t_1289262_b_29084_tn_0,,,area_294,1,,2,2,0,0,1,1,booking_route_17102,booking_route_17102,11:00:00,23:00:00,1,9.00,1,20.00 \ No newline at end of file diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/aspen-flex-on-demand.gtfs/stops.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/aspen-flex-on-demand.gtfs/stops.txt new file mode 100644 index 00000000000..2b030c2628a --- /dev/null +++ b/src/ext-test/resources/org/opentripplanner/ext/flex/aspen-flex-on-demand.gtfs/stops.txt @@ -0,0 +1,210 @@ +stop_id,stop_code,platform_code,stop_name,stop_desc,stop_lat,stop_lon,zone_id,stop_url,location_type,parent_station,stop_timezone,position,direction,wheelchair_boarding +2328350,1,,Burlingame,,39.2121564,-106.8540989,1106,,0,,America/Denver,,,0 +2328351,3,,Railroad Ave + 4th St,,39.5327769,-107.7832192,1098,,0,,America/Denver,,,0 +2328352,4,,Rifle Park & Ride,,39.5295802,-107.7839413,1098,,0,,America/Denver,,,0 +2328353,5,,Rifle Park & Ride,,39.5297863,-107.782801,1098,,0,,America/Denver,,,0 +2328354,6,,Cottonwood,,39.5351465,-107.7514352,1098,,0,,America/Denver,,,0 +2328355,7,,Cottonwood,,39.5347469,-107.752879,1098,,0,,America/Denver,,,0 +2328356,8,,Firehouse,,39.5469135,-107.6559429,1099,,0,,America/Denver,,,0 +2328357,9,,Firehouse,,39.5471145,-107.656117,1099,,0,,America/Denver,,,0 +2328358,11,,Main St + 6th St,,39.5715695,-107.5367173,1100,,0,,America/Denver,,,0 +2328359,13,,New Castle Park & Ride,,39.5686094,-107.5177807,1100,,0,,America/Denver,,,0 +2328360,14,,Hwy 82 + Spring Valley Rd DV,,39.4731844,-107.2698784,1101,,0,,America/Denver,,,0 +2328361,16,,Aspen Glen UV,,39.4338934,-107.2481524,1102,,0,,America/Denver,,,0 +2328362,17,,Aspen Glen DV,,39.4334914,-107.2471423,1102,,0,,America/Denver,,,0 +2328363,18,,Ranch at Roaring Fork UV,,39.4096122,-107.1680813,1103,,0,,America/Denver,,,0 +2328364,19,,Ranch at Roaring Fork DV,,39.4100434,-107.1686952,1103,,0,,America/Denver,,,0 +2328365,20,,Hwy 82 + Catherine Store Rd UV,,39.4074331,-107.1515694,1103,,0,,America/Denver,,,0 +2328366,21,,Hwy 82 + Catherine Store Rd DV,,39.4079187,-107.1519757,1103,,0,,America/Denver,,,0 +2328367,24,,JW Dr + Buckskin Dr,,39.402235,-107.1060161,1103,,0,,America/Denver,,,0 +2328368,23,,JW Dr + Buckskin Dr,,39.4023175,-107.1061259,1103,,0,,America/Denver,,,0 +2328370,26,,JW Dr + El Jebel Rd,,39.399166,-107.0906096,1103,,0,,America/Denver,,,0 +2328371,27,,JW Dr + El Jebel Rd,,39.3992904,-107.0905679,1103,,0,,America/Denver,,,0 +2328372,32,,Holland Hills UV,,39.3502804,-107.0164364,1104,,0,,America/Denver,,,0 +2328373,33,,Holland Hills DV,,39.3505342,-107.0161299,1104,,0,,America/Denver,,,0 +2328374,34,,Basalt Park & Ride UV,,39.3637262,-107.0342952,1104,,0,,America/Denver,,,0 +2328375,35,,Basalt Park & Ride DV,,39.3641702,-107.0343771,1104,,0,,America/Denver,,,0 +2328376,36,,Downtown Basalt,,39.3682789,-107.0352647,1104,,0,,America/Denver,,,0 +2328377,38,,Two Rivers Rd + Hillcrest Dr UV,,39.3703228,-107.0694615,1104,,0,,America/Denver,,,0 +2328378,39,,Two Rivers Rd + Hillcrest Dr DV,,39.3704106,-107.0693268,1104,,0,,America/Denver,,,0 +2328379,40,,Hwy 82 + Original Rd UV,,39.374812,-107.0761848,1104,,0,,America/Denver,,,0 +2328380,41,,Hwy 82 + Original Rd DV,,39.3755531,-107.0762178,1104,,0,,America/Denver,,,0 +2328381,42,,Wingo Junction UV,,39.3445621,-107.0092657,1104,,0,,America/Denver,,,0 +2328382,43,,Wingo Junction DV,,39.3447255,-107.00883,1104,,0,,America/Denver,,,0 +2328383,45,,Hwy 82 + Lazy Glen Way DV,,39.3411738,-107.001078,1104,,0,,America/Denver,,,0 +2328384,47,,Old Snowmass DV,,39.3310756,-106.9841513,1104,,0,,America/Denver,,,0 +2328385,48,,Hwy 82 + Smith Way,,39.2601978,-106.8872061,1105,,0,,America/Denver,,,0 +2328386,49,,Hwy 82 + Juniper Hill Rd,,39.2602783,-106.8882142,1105,,0,,America/Denver,,,0 +2328387,50,,Hwy 82 + Aspen Village Rd UV,,39.2938112,-106.9192436,1105,,0,,America/Denver,,,0 +2328388,52,,Hallam St + 8th St,,39.1948303,-106.831528,1106,,0,,America/Denver,,,0 +2328389,53,,Hallam St + 8th St,,39.1949386,-106.8311884,1106,,0,,America/Denver,,,0 +2328390,57,,Aspen High School,,39.1896615,-106.850021,1106,,0,,America/Denver,,,0 +2328391,58,,River Bend,,39.3044015,-106.9313321,1105,,0,,America/Denver,,,0 +2328392,59,,Woody Creek Tavern,,39.2750759,-106.8872046,1105,,0,,America/Denver,,,0 +2328393,60,,Truscott DV,,39.2004047,-106.8471105,1106,,0,,America/Denver,,,0 +2328394,61,,Cemetery Ln + Pitkin Mesa Dr,,39.2057283,-106.8388666,1106,,0,,America/Denver,,,0 +2328395,62,,Cemetery Ln + Silver King Dr,,39.2040241,-106.8393728,1106,,0,,America/Denver,,,0 +2328396,63,,Cemetery Ln + Alta Vista Dr,,39.2017705,-106.8372785,1106,,0,,America/Denver,,,0 +2328398,65,,Hwy 82 + Cemetery Ln,,39.1956562,-106.8361109,1106,,0,,America/Denver,,,0 +2328399,66,,Main St + 2nd St,,39.1920549,-106.8253224,1106,,0,,America/Denver,,,0 +2328400,67,,Main St + Galena St,,39.1903625,-106.818294,1106,,0,,America/Denver,,,0 +2328401,68,,Brush Creek Rd + Meadow Rd Downhill,,39.221685,-106.9322302,1106,,0,,America/Denver,,,0 +2328402,71,,W/J Ranch,,39.2546177,-106.8774285,1106,,0,,America/Denver,,,0 +2328403,72,,Brush Creek Rd + Medicine Bow Rd Uphill,,39.2480963,-106.8873063,1106,,0,,America/Denver,,,0 +2328404,73,,Grand Ave + 20th St,,39.5317353,-107.3254169,1101,,0,,America/Denver,,,0 +2328405,74,,Grand Ave + 20th St,,39.5314066,-107.3251664,1101,,0,,America/Denver,,,0 +2328406,75,,Grand Ave + 14th St,,39.5386515,-107.3251589,1101,,0,,America/Denver,,,0 +2328407,76,,Grand Ave + 14th St,,39.538779,-107.3249128,1101,,0,,America/Denver,,,0 +2328408,77,,Grand Ave + 9th St,,39.5450443,-107.324664,1101,,0,,America/Denver,,,0 +2328409,78,,Grand Ave + 9th St,,39.5445299,-107.3249808,1101,,0,,America/Denver,,,0 +2328411,81,,West Glenwood Mall,,39.561712,-107.362008,1101,,0,,America/Denver,,,0 +2328412,82,,AABC Airport DV,,39.2199816,-106.8624272,1106,,0,,America/Denver,,,0 +2328413,83,,Hwy 82 + Service Center Rd DV,,39.2250182,-106.8661367,1106,,0,,America/Denver,,,0 +2328414,84,,Hwy 82 + Service Center Rd UV,,39.2236535,-106.8659236,1106,,0,,America/Denver,,,0 +2328419,95,,Brush Creek Ranch Uphill,,39.239445,-106.8967031,1106,,0,,America/Denver,,,0 +2328420,96,,West Glenwood Park & Ride,,39.557798,-107.353762,1101,,0,,America/Denver,,,0 +2328421,97,,Rubey Park Transit Center,,39.1874678,-106.8196421,1106,,0,,America/Denver,,,0 +2328422,98,,Castle Ridge,,39.1898496,-106.8378997,1106,,0,,America/Denver,,,0 +2328423,99,,Aspen Chapel,,39.1941664,-106.8397086,1106,,0,,America/Denver,,,0 +2328424,100,,Main St + 4th St,,39.192663,-106.8282863,1106,,0,,America/Denver,,,0 +2328426,102,,Hunter Creek II,,39.1937907,-106.8143236,1106,,0,,America/Denver,,,0 +2328427,103,,Centennial,,39.1929926,-106.810668,1106,,0,,America/Denver,,,0 +2328428,104,,Park Cir + Park Ave,,39.1895546,-106.8101613,1106,,0,,America/Denver,,,0 +2328429,105,,Walking Bridge,,39.1879874,-106.8103618,1106,,0,,America/Denver,,,0 +2328430,106,,Hwy 82 + Crystal Lake Rd,,39.1837517,-106.8076383,1106,,0,,America/Denver,,,0 +2328431,109,,7th St + Bleeker St,,39.1934403,-106.8311076,1106,,0,,America/Denver,,,0 +2328433,111,,Aspen Highlands,,39.1820227,-106.856464,1106,,0,,America/Denver,,,0 +2328435,113,,Maroon Creek Rd + Glenn Gary Dr,,39.1865452,-106.852944,1106,,0,,America/Denver,,,0 +2328436,115,,Parks Department,,39.1962437,-106.8354984,1106,,0,,America/Denver,,,0 +2328437,116,,Spring St + Durant Ave,,39.1869466,-106.8168396,1106,,0,,America/Denver,,,0 +2328438,117,,Glenwood Rec Center,,39.5521217,-107.340499,1101,,0,,America/Denver,,,0 +2328439,118,,Rio Grande Park,,39.1928982,-106.8181745,1106,,0,,America/Denver,,,0 +2328440,119,,Smuggler,,39.1929372,-106.8121559,1106,,0,,America/Denver,,,0 +2328441,120,,Chateau Eau Claire,,39.1866579,-106.8116507,1106,,0,,America/Denver,,,0 +2328442,121,,Hwy 82 + Aspen Village Rd DV,,39.2949182,-106.9200341,1105,,0,,America/Denver,,,0 +2328443,122,,Hwy 82 + Twining Flats Rd UV,,39.2689549,-106.8908455,1105,,0,,America/Denver,,,0 +2328444,123,,Hwy 82 + Twining Flats Rd DV,,39.2682433,-106.8900234,1105,,0,,America/Denver,,,0 +2328446,346,,Brush Creek Park & Ride,,39.2506932,-106.883231,1106,,0,,America/Denver,,,0 +2328447,126,,Maroon Creek Rd + Hwy 82,,39.194943,-106.8407215,1106,,0,,America/Denver,,,0 +2328448,127,,Paepcke Park,,39.1914793,-106.8225732,1106,,0,,America/Denver,,,0 +2328449,128,,Paepcke Park,,39.1911959,-106.8223149,1106,,0,,America/Denver,,,0 +2328450,129,,Main St + 2nd St,,39.1916809,-106.8246537,1106,,0,,America/Denver,,,0 +2328451,130,,Highlands Villas,,39.1848176,-106.8545617,1106,,0,,America/Denver,,,0 +2328452,131,,Highlands Villas,,39.1855944,-106.8539912,1106,,0,,America/Denver,,,0 +2328453,132,,Cemetery Ln + Red Butte Dr,,39.2100919,-106.8396737,1106,,0,,America/Denver,,,0 +2328454,133,,Main St + Spring St,,39.1898705,-106.8158966,1106,,0,,America/Denver,,,0 +2328455,134,,Town Park Station Uphill,,39.2255451,-106.923751,1106,,0,,America/Denver,,,0 +2328456,135,,Town Park Station Downhill,,39.2253084,-106.924154,1106,,0,,America/Denver,,,0 +2328457,137,,Brush Creek Rd + Sinclair Rd Uphill,,39.2170702,-106.9353096,1106,,0,,America/Denver,,,0 +2328458,138,,Brush Creek Rd + Sinclair Rd Downhill,,39.217094,-106.9349678,1106,,0,,America/Denver,,,0 +2328459,139,,Brush Creek Rd + Meadow Rd Uphill,,39.2217927,-106.9324063,1106,,0,,America/Denver,,,0 +2328460,141,,Brush Creek Rd + Wood Rd Downhill,,39.2102772,-106.9465938,1106,,0,,America/Denver,,,0 +2328461,142,,Castle Creek Rd + Marolt Pl,,39.193134,-106.83921,1106,,0,,America/Denver,,,0 +2328462,143,,Maroon Creek Rd + Hwy 82,,39.1949944,-106.8409735,1106,,0,,America/Denver,,,0 +2328463,144,,Aspen Country Inn DV,,39.2031618,-106.8533951,1106,,0,,America/Denver,,,0 +2328464,145,,Aspen Country Inn UV,,39.2028028,-106.8532723,1106,,0,,America/Denver,,,0 +2328465,146,,Buttermilk UV,,39.2072058,-106.8598525,1106,,0,,America/Denver,,,0 +2328466,147,,Buttermilk DV,,39.208812,-106.8606625,1106,,0,,America/Denver,,,0 +2328467,148,,Truscott UV,,39.2005864,-106.8480043,1106,,0,,America/Denver,,,0 +2328468,149,,Brush Creek Rd + Faraway Rd Downhill,,39.2112077,-106.9420585,1106,,0,,America/Denver,,,0 +2328469,150,,Brush Creek Rd + Faraway Rd Uphill,,39.2112199,-106.9427912,1106,,0,,America/Denver,,,0 +2328470,151,,Snowmass Mall,,39.2072349,-106.9547481,1106,,0,,America/Denver,,,0 +2328471,152,,Stonebridge Inn Downhill,,39.2082865,-106.9527745,1106,,0,,America/Denver,,,0 +2328472,153,,Metro Park,,39.544295,-107.7824,1098,,0,,America/Denver,,,0 +2328473,154,,Railroad Ave + 5th St,,39.5335664,-107.7837327,1098,,0,,America/Denver,,,0 +2328474,155,,Original St + Durant Ave,,39.1867946,-106.8154369,1106,,0,,America/Denver,,,0 +2328475,156,,Main St + Hunter St,,39.1902534,-106.8166637,1106,,0,,America/Denver,,,0 +2328476,157,,Gondola,,39.1871681,-106.8182175,1106,,0,,America/Denver,,,0 +2328477,158,,Harmony Rd,,39.2095751,-106.8595612,1106,,0,,America/Denver,,,0 +2328478,159,,Harmony Rd,,39.2093693,-106.8594527,1106,,0,,America/Denver,,,0 +2328479,160,,Hwy 82 + Roundabout DV,,39.1968561,-106.841764,1106,,0,,America/Denver,,,0 +2328480,161,,Hwy 82 + Roundabout UV,,39.1947723,-106.8412705,1106,,0,,America/Denver,,,0 +2328481,162,,Hunter Creek,,39.1949297,-106.8154434,1106,,0,,America/Denver,,,0 +2328482,163,,Hyman Ave + Mill St,,39.1890676,-106.8197908,1106,,0,,America/Denver,,,0 +2328483,164,,Main St + 6th St,,39.1929374,-106.8296259,1106,,0,,America/Denver,,,0 +2328484,167,,Cemetery Ln + Pitkin Mesa Dr,,39.205825,-106.838745,1106,,0,,America/Denver,,,0 +2328485,169,,Glenwood Meadows,,39.5544092,-107.3445613,1101,,0,,America/Denver,,,0 +2328486,170,,Hwy 6 + Lyon Blvd,,39.5470657,-107.6438244,1099,,0,,America/Denver,,,0 +2328487,171,,Cemetery,,39.2004645,-106.8360138,1106,,0,,America/Denver,,,0 +2328488,172,,Aspen Rec Center,,39.1887653,-106.8507134,1106,,0,,America/Denver,,,0 +2328489,174,,Cemetery Ln + Snowbunny Ln,,39.203973,-106.8391687,1106,,0,,America/Denver,,,0 +2328490,176,,Aspen City Market,,39.1874027,-106.8160947,1106,,0,,America/Denver,,,0 +2328491,177,,Hwy 6 + Lyon Blvd,,39.5468426,-107.6435272,1099,,0,,America/Denver,,,0 +2328492,178,,Main St + 6th St,,39.5713661,-107.5367143,1100,,0,,America/Denver,,,0 +2328493,179,,New Castle Park & Ride,,39.568165,-107.5171804,1100,,0,,America/Denver,,,0 +2328496,183,,Grand Ave + 11th St,,39.5429828,-107.3247399,1101,,0,,America/Denver,,,0 +2328497,184,,Parks Department,,39.1960218,-106.8357036,1106,,0,,America/Denver,,,0 +2328498,185,,W 6th St,,39.5513964,-107.3280704,1101,,0,,America/Denver,,,0 +2328499,186,,Hwy 6 + Traver Trail,,39.5545434,-107.331408,1101,,0,,America/Denver,,,0 +2328500,187,,Elks Lodge,,39.5605603,-107.3466953,1101,,0,,America/Denver,,,0 +2328501,188,,Johnson Park,,39.5612665,-107.3527267,1101,,0,,America/Denver,,,0 +2328503,191,,Cemetery Ln + Castle Creek Dr,,39.1984287,-106.8353835,1106,,0,,America/Denver,,,0 +2328505,193,,Cemetery Ln + Sierra Vista Dr,,39.2034239,-106.8387359,1106,,0,,America/Denver,,,0 +2328507,197,,Hwy 6 + Traver Trail,,39.5541458,-107.3309757,1101,,0,,America/Denver,,,0 +2328508,198,,W 6th St,,39.5507987,-107.3278873,1101,,0,,America/Denver,,,0 +2328509,199,,Grand Ave + 11th St,,39.5425682,-107.3250401,1101,,0,,America/Denver,,,0 +2328510,200,,27th St Station,,39.5249492,-107.3219652,1101,,0,,America/Denver,,,0 +2328511,201,,LUPINE DR,,39.1811732,-106.8009104,1106,,0,,America/Denver,,,0 +2328512,202,,Carbondale Park & Ride,,39.4096699,-107.2222285,1102,,0,,America/Denver,,,0 +2328513,203,,Main St + Hwy 133,,39.4012301,-107.2188748,1102,,0,,America/Denver,,,0 +2328514,204,,Downtown Basalt,,39.3684948,-107.0352083,1104,,0,,America/Denver,,,0 +2328515,206,,JW Dr + Deer Run,,39.4014793,-107.1012168,1103,,0,,America/Denver,,,0 +2328516,207,,Carbondale Pool,,39.4004717,-107.2137067,1102,,0,,America/Denver,,,0 +2328517,208,,Roaring Fork Marketplace,,39.5198855,-107.3195571,1101,,0,,America/Denver,,,0 +2328518,209,,Hwy 82 + Spring Valley Rd UV,,39.4735932,-107.270835,1101,,0,,America/Denver,,,0 +2328519,210,,JW Dr + Deer Run,,39.4019035,-107.1016194,1103,,0,,America/Denver,,,0 +2328520,211,,Hwy 82 + Lazy Glen Way UV,,39.3403638,-106.9997386,1104,,0,,America/Denver,,,0 +2328521,212,,Old Snowmass UV,,39.3309901,-106.9854632,1104,,0,,America/Denver,,,0 +2328522,213,,AABC Airport UV,,39.2187319,-106.8622598,1106,,0,,America/Denver,,,0 +2328523,214,,Glenwood Meadows,,39.5541727,-107.3449144,1101,,0,,America/Denver,,,0 +2328524,215,,Glenwood Rec Center,,39.55186,-107.339869,1101,,0,,America/Denver,,,0 +2328525,216,,Base Village,,39.209691898128,-106.948203760519,1106,,0,,America/Denver,,,0 +2328526,217,,Brush Creek Rd + Owl Creek Rd Downhill,,39.2136065,-106.9392528,1106,,0,,America/Denver,,,0 +2328527,218,,Brush Creek Rd + Owl Creek Rd Uphill,,39.2135251,-106.9395856,1106,,0,,America/Denver,,,0 +2328528,219,,Brush Creek Rd + Wood Rd Uphill,,39.2106934,-106.9476109,1106,,0,,America/Denver,,,0 +2328529,220,,Brush Creek Rd + Hawk Ridge Ln Uphill,,39.2098893,-106.955459,1106,,0,,America/Denver,,,0 +2328530,221,,Brush Creek Rd + Divide Rd Uphill,,39.2080861,-106.9571466,1106,,0,,America/Denver,,,0 +2328531,326,,8th St + Colorado Ave,,39.5466454,-107.3261772,1101,,0,,America/Denver,,,0 +2328532,223,,Brush Creek Ranch Downhill,,39.2395362,-106.8963172,1106,,0,,America/Denver,,,0 +2328533,224,,Hwy 82 + Watson Divide Rd DV,,39.3000647,-106.9296864,1105,,0,,America/Denver,,,0 +2328534,225,,Main St + 4th St,,39.1921931,-106.8271134,1106,,0,,America/Denver,,,0 +2328535,227,,Hwy 82 + Watson Divide Rd UV,,39.2997221,-106.9298881,1105,,0,,America/Denver,,,0 +2328536,229,,Main St + Hwy 133,,39.4010951,-107.218188,1102,,0,,America/Denver,,,0 +2328537,231,,Phillips Trailer Park,,39.311609,-106.9347202,1105,,0,,America/Denver,,,0 +2328538,233,,Benedict Music Tent,,39.1981463,-106.8271564,1106,,0,,America/Denver,,,0 +2328539,234,,Ute Ave,,39.1807928,-106.81081,1106,,0,,America/Denver,,,0 +2328540,235,,Buttermilk Base Area,,39.2062243,-106.86119,1106,,0,,America/Denver,,,0 +2328541,236,,Aspen St + Cooper Ave,,39.1888368,-106.822267,1106,,0,,America/Denver,,,0 +2328542,237,,Main St + 1st St,,39.1915349,-106.824,1106,,0,,America/Denver,,,0 +2328543,238,,Main St + 1st St,,39.1918428,-106.8243008,1106,,0,,America/Denver,,,0 +2328545,240,,Chateau Eau Claire,,39.1865658,-106.8118884,1106,,0,,America/Denver,,,0 +2328546,241,,Hwy 82 + Stillwater Rd,,39.1807373,-106.8017657,1106,,0,,America/Denver,,,0 +2328547,242,,Hwy 82 + Roaring Fork Dr,,39.1817241,-106.8029377,1106,,0,,America/Denver,,,0 +2328548,243,,Hwy 82 + McSkimming Rd,,39.1844416,-106.807849,1106,,0,,America/Denver,,,0 +2328550,245,,Aspen Library,,39.1909714,-106.819035,1106,,0,,America/Denver,,,0 +2328551,247,,Original St + Durant Ave,,39.186897,-106.8155864,1106,,0,,America/Denver,,,0 +2328552,248,,Garmisch St + Hopkins Ave,,39.1910095,-106.8230207,1106,,0,,America/Denver,,,0 +2328553,249,,Lift 1,,39.1879681,-106.8228492,1106,,0,,America/Denver,,,0 +2328554,250,,Rio Grande Parking Garage,,39.1908435,-106.8180475,1106,,0,,America/Denver,,,0 +2328555,251,,Gondola,,39.1868741,-106.8174943,1106,,0,,America/Denver,,,0 +2328556,253,,Rio Grande Park,,39.1925874,-106.8186136,1106,,0,,America/Denver,,,0 +2328558,301,,Hwy 6 + 135 Rd,,39.5613028,-107.3549464,1101,,0,,America/Denver,,,0 +2328559,302,,Woody Creek Tavern,,39.2749804,-106.8869906,1105,,0,,America/Denver,,,0 +2328562,307,,River Bend,,39.3044949,-106.9313009,1105,,0,,America/Denver,,,0 +2328564,309,,El Jebel Park & Ride DV,,39.3935995,-107.0893553,1103,,0,,America/Denver,,,0 +2328565,310,,El Jebel Park & Ride UV,,39.3931003,-107.0893221,1103,,0,,America/Denver,,,0 +2328566,311,,Willits DV,,39.387427,-107.0816453,1103,,0,,America/Denver,,,0 +2328567,312,,Willits UV,,39.3862914,-107.081463,1103,,0,,America/Denver,,,0 +2328568,313,,Hwy 6 + Soccer Field Rd,,39.5614344,-107.3596361,1101,,0,,America/Denver,,,0 +2328569,314,,Hwy 6 + Soccer Field Rd,,39.5616058,-107.3588267,1101,,0,,America/Denver,,,0 +2328571,317,,6th St + Colorado Ave,,39.4015975,-107.2127926,1102,,0,,America/Denver,,,0 +2328573,320,,9th St + Colorado Ave,,39.5454955,-107.3257079,1101,,0,,America/Denver,,,0 +2329757,,,Gilstrap Court,,39.5598297,-107.3635161,,,0,,America/Denver,,,0 +2329758,,,Kids Plex,,39.5581672,-107.3564402,,,0,,America/Denver,,,0 +2329759,,,Valley View Hospital,,39.5321645,-107.322841,1101,,0,,America/Denver,,,0 +2335852,195,,Maroon Bells,,39.0997929,-106.9422779,,,0,,America/Denver,,,0 +2526385,246,,Bucksbaum Campus,,39.1786345,-106.8394966,,,0,,America/Denver,,,0 +2613904,85,,Roaring Fork Marketplace,,39.5203575,-107.3199738,,,0,,America/Denver,,,0 +2613905,252,,Burlingame MAA Housing,,39.209949,-106.8603257,,,0,,America/Denver,,,0 +2618227,348,,Cemetery,,39.199796,-106.83593,1106,,0,,America/Denver,,,0 +2735292,350,,Maroon Creek Rd + High School Rd,,39.1931844406718,-106.845075900748,1106,,0,,America/Denver,,,0 diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/aspen-flex-on-demand.gtfs/trips.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/aspen-flex-on-demand.gtfs/trips.txt new file mode 100644 index 00000000000..be86d3847ad --- /dev/null +++ b/src/ext-test/resources/org/opentripplanner/ext/flex/aspen-flex-on-demand.gtfs/trips.txt @@ -0,0 +1,3 @@ +route_id,service_id,trip_id,trip_short_name,trip_headsign,direction_id,block_id,shape_id,bikes_allowed,wheelchair_accessible,trip_type +17102,c_20806_b_28352_d_127,t_1289257_b_28352_tn_0,,,0,,,,, +17102,c_20808_b_29084_d_127,t_1289262_b_29084_tn_0,,,0,,,,, \ No newline at end of file diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/cobblinc-scheduled-deviated-flex.gtfs.zip b/src/ext-test/resources/org/opentripplanner/ext/flex/cobblinc-scheduled-deviated-flex.gtfs.zip deleted file mode 100644 index f47936b3b5e..00000000000 Binary files a/src/ext-test/resources/org/opentripplanner/ext/flex/cobblinc-scheduled-deviated-flex.gtfs.zip and /dev/null differ diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/cobblinc-scheduled-deviated-flex.gtfs/agency.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/cobblinc-scheduled-deviated-flex.gtfs/agency.txt new file mode 100644 index 00000000000..30325a16880 --- /dev/null +++ b/src/ext-test/resources/org/opentripplanner/ext/flex/cobblinc-scheduled-deviated-flex.gtfs/agency.txt @@ -0,0 +1,2 @@ +agency_id,agency_name,agency_url,agency_timezone,agency_lang,agency_phone,agency_branding_url,agency_fare_url,agency_email +1,Cobblinc,https://www.cobbcounty.org/transportation/cobblinc,America/New_York,en,,,, diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/cobblinc-scheduled-deviated-flex.gtfs/booking_rules.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/cobblinc-scheduled-deviated-flex.gtfs/booking_rules.txt new file mode 100644 index 00000000000..541e13197c2 --- /dev/null +++ b/src/ext-test/resources/org/opentripplanner/ext/flex/cobblinc-scheduled-deviated-flex.gtfs/booking_rules.txt @@ -0,0 +1,2 @@ +booking_rule_id,booking_type,prior_notice_duration_min,prior_notice_duration_max,prior_notice_start_day,prior_notice_start_time,prior_notice_last_day,prior_notice_last_time,prior_notice_service_id,message,pickup_message,drop_off_message,phone_number,info_url,booking_url +1,1,120,1440,,,,,,Call reservationist to schedule.,,,(770) 528-1053,, diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/cobblinc-scheduled-deviated-flex.gtfs/calendar.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/cobblinc-scheduled-deviated-flex.gtfs/calendar.txt new file mode 100644 index 00000000000..d055defc895 --- /dev/null +++ b/src/ext-test/resources/org/opentripplanner/ext/flex/cobblinc-scheduled-deviated-flex.gtfs/calendar.txt @@ -0,0 +1,2 @@ +service_id,monday,tuesday,wednesday,thursday,friday,saturday,sunday,start_date,end_date +1,1,1,1,1,1,0,0,20211019,20220119 diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/cobblinc-scheduled-deviated-flex.gtfs/fare_attributes.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/cobblinc-scheduled-deviated-flex.gtfs/fare_attributes.txt new file mode 100644 index 00000000000..3ebb041bcb3 --- /dev/null +++ b/src/ext-test/resources/org/opentripplanner/ext/flex/cobblinc-scheduled-deviated-flex.gtfs/fare_attributes.txt @@ -0,0 +1,2 @@ +fare_id,price,currency_type,payment_method,transfers,agency_id,transfer_duration +flex-adult,2.50,USD,0,0,1, diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/cobblinc-scheduled-deviated-flex.gtfs/fare_rules.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/cobblinc-scheduled-deviated-flex.gtfs/fare_rules.txt new file mode 100644 index 00000000000..62e8c4f518f --- /dev/null +++ b/src/ext-test/resources/org/opentripplanner/ext/flex/cobblinc-scheduled-deviated-flex.gtfs/fare_rules.txt @@ -0,0 +1,10 @@ +fare_id,route_id,origin_id,destination_id,contains_id +flex-adult,,Z4,Z3, +flex-adult,,Z3,Z4, +flex-adult,,Z3,Z3, +flex-adult,,Z4,Z2, +flex-adult,,Z2,Z4, +flex-adult,,Z2,Z2, +flex-adult,,Z4,Z1, +flex-adult,,Z1,Z4, +flex-adult,,Z1,Z1, diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/cobblinc-scheduled-deviated-flex.gtfs/feed_info.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/cobblinc-scheduled-deviated-flex.gtfs/feed_info.txt new file mode 100644 index 00000000000..0ec181c3a8e --- /dev/null +++ b/src/ext-test/resources/org/opentripplanner/ext/flex/cobblinc-scheduled-deviated-flex.gtfs/feed_info.txt @@ -0,0 +1,2 @@ +feed_publisher_name,feed_id,feed_publisher_url,feed_lang,feed_start_date,feed_end_date,feed_version,default_lang,feed_contact_email,feed_contact_url +Cobblinc,,https://www.cobbcounty.org/transportation/cobblinc,en,20211018,20211111,,,, diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/cobblinc-scheduled-deviated-flex.gtfs/location_groups.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/cobblinc-scheduled-deviated-flex.gtfs/location_groups.txt new file mode 100644 index 00000000000..45845294fa8 --- /dev/null +++ b/src/ext-test/resources/org/opentripplanner/ext/flex/cobblinc-scheduled-deviated-flex.gtfs/location_groups.txt @@ -0,0 +1 @@ +location_group_id,location_id,location_group_name diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/cobblinc-scheduled-deviated-flex.gtfs/locations.geojson b/src/ext-test/resources/org/opentripplanner/ext/flex/cobblinc-scheduled-deviated-flex.gtfs/locations.geojson new file mode 100644 index 00000000000..3f2f8665c30 --- /dev/null +++ b/src/ext-test/resources/org/opentripplanner/ext/flex/cobblinc-scheduled-deviated-flex.gtfs/locations.geojson @@ -0,0 +1,597 @@ +{ + "type": "FeatureCollection", + "features": [ + { + "id": "zone_1", + "type": "Feature", + "properties": { + "stop_name": "Flex Zone 1", + "stop_desc": "PUBLIX to Route 30 Transfer Points", + "zone_id": "Z1" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -84.70458984375, + 33.867796513389074 + ], + [ + -84.69547033309937, + 33.8646963242773 + ], + [ + -84.68733787536621, + 33.86157820443925 + ], + [ + -84.68567490577698, + 33.85978746128715 + ], + [ + -84.68505263328552, + 33.85972509642107 + ], + [ + -84.6845269203186, + 33.859600366552314 + ], + [ + -84.68194127082825, + 33.859502364384745 + ], + [ + -84.67999935150146, + 33.85926181313301 + ], + [ + -84.67733860015869, + 33.858762889858156 + ], + [ + -84.67227458953857, + 33.85890543966268 + ], + [ + -84.67103004455566, + 33.858941077076636 + ], + [ + -84.66673851013184, + 33.860722928812585 + ], + [ + -84.66090202331543, + 33.85990328163186 + ], + [ + -84.65712547302246, + 33.85972509642107 + ], + [ + -84.65373516082764, + 33.859760733492976 + ], + [ + -84.65064525604248, + 33.85883416479016 + ], + [ + -84.64862823486327, + 33.8583708766687 + ], + [ + -84.64648246765137, + 33.858620339815644 + ], + [ + -84.64356422424316, + 33.86058038204195 + ], + [ + -84.63223457336426, + 33.86695911708288 + ], + [ + -84.61893081665039, + 33.849175869452154 + ], + [ + -84.61481094360352, + 33.85145689379216 + ], + [ + -84.61360931396484, + 33.85045895313795 + ], + [ + -84.61172103881836, + 33.85145689379216 + ], + [ + -84.61219310760498, + 33.85236572245879 + ], + [ + -84.60996150970459, + 33.85245482278801 + ], + [ + -84.61004734039307, + 33.85311416233549 + ], + [ + -84.60442543029785, + 33.8533101812195 + ], + [ + -84.60004806518555, + 33.85886980223386 + ], + [ + -84.60760116577148, + 33.85986764461944 + ], + [ + -84.60691452026367, + 33.85423680985424 + ], + [ + -84.61309432983397, + 33.85423680985424 + ], + [ + -84.6152400970459, + 33.85566237273956 + ], + [ + -84.62450981140137, + 33.86556937742616 + ], + [ + -84.62665557861328, + 33.86628206725556 + ], + [ + -84.63197708129883, + 33.86806376580027 + ], + [ + -84.63343620300293, + 33.869132767078476 + ], + [ + -84.63480949401854, + 33.87112820031405 + ], + [ + -84.64622497558594, + 33.876187839766146 + ], + [ + -84.65120315551758, + 33.8767579211837 + ], + [ + -84.69695091247557, + 33.876187839766146 + ], + [ + -84.69695091247557, + 33.867493626311635 + ], + [ + -84.6994400024414, + 33.868491367917954 + ], + [ + -84.70407485961914, + 33.869702895619845 + ], + [ + -84.70458984375, + 33.867796513389074 + ] + ] + ] + } + }, + { + "id": "zone_2", + "type": "Feature", + "properties": { + "stop_name": "Flex Zone 2", + "stop_desc": "Horseshoe Bend Plaza to Route 30 Transfer Point", + "zone_id": "Z2" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -84.63489532470703, + 33.87198337170695 + ], + [ + -84.6346378326416, + 33.871146016472125 + ], + [ + -84.63341474533081, + 33.869204033354386 + ], + [ + -84.63199853897095, + 33.86817957491865 + ], + [ + -84.63159084320068, + 33.86797468175618 + ], + [ + -84.62459564208984, + 33.86599699203773 + ], + [ + -84.61957454681396, + 33.86063383710883 + ], + [ + -84.61506843566893, + 33.855680192125064 + ], + [ + -84.61308360099792, + 33.8542991787282 + ], + [ + -84.60694670677185, + 33.854263539377236 + ], + [ + -84.60761189460754, + 33.859885463127526 + ], + [ + -84.60001587867737, + 33.85888762095013 + ], + [ + -84.59524154663086, + 33.864143979919355 + ], + [ + -84.60494041442871, + 33.87419252481561 + ], + [ + -84.6045970916748, + 33.88024958676915 + ], + [ + -84.60253715515137, + 33.88195973819444 + ], + [ + -84.59258079528809, + 33.88509492678373 + ], + [ + -84.58974838256835, + 33.888871250976955 + ], + [ + -84.58356857299805, + 33.895283493992615 + ], + [ + -84.5854139328003, + 33.89563971558044 + ], + [ + -84.59129333496094, + 33.89649464132018 + ], + [ + -84.593825340271, + 33.902265165877225 + ], + [ + -84.59554195404053, + 33.907696938616645 + ], + [ + -84.59605693817139, + 33.908462701690695 + ], + [ + -84.59650754928589, + 33.909549004947415 + ], + [ + -84.59644317626953, + 33.91116952997516 + ], + [ + -84.59884643554688, + 33.90988735887179 + ], + [ + -84.60433959960938, + 33.905755787445045 + ], + [ + -84.60850238800047, + 33.9048297181011 + ], + [ + -84.61399555206299, + 33.90368992663683 + ], + [ + -84.62034702301024, + 33.902585739124085 + ], + [ + -84.62815761566162, + 33.899771777255694 + ], + [ + -84.62824344635008, + 33.89841819289737 + ], + [ + -84.62893009185791, + 33.897420801199644 + ], + [ + -84.63056087493896, + 33.89613842330356 + ], + [ + -84.63219165802, + 33.893644855523824 + ], + [ + -84.63532447814941, + 33.89182806737398 + ], + [ + -84.63708400726318, + 33.89068810210888 + ], + [ + -84.63759899139404, + 33.88940562297412 + ], + [ + -84.63734149932861, + 33.88548681725667 + ], + [ + -84.6369981765747, + 33.881817226884806 + ], + [ + -84.63489532470703, + 33.87198337170695 + ] + ] + ] + } + }, + { + "id": "zone_3", + "type": "Feature", + "properties": { + "stop_name": "Flex Zone 3", + "stop_desc": "Downtown Austell to Route 30 Transfer Point", + "zone_id": "Z3" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -84.60438251495361, + 33.85341710042116 + ], + [ + -84.60449516773222, + 33.8533101812195 + ], + [ + -84.61005806922913, + 33.85311416233549 + ], + [ + -84.60994005203247, + 33.85244591275925 + ], + [ + -84.61217164993286, + 33.85235681242077 + ], + [ + -84.6117103099823, + 33.85143907352557 + ], + [ + -84.61360931396484, + 33.85045895313795 + ], + [ + -84.61481094360352, + 33.851447983659334 + ], + [ + -84.61609840393066, + 33.85074408022878 + ], + [ + -84.62133407592772, + 33.84575421874202 + ], + [ + -84.62442398071289, + 33.84603936153525 + ], + [ + -84.62167739868163, + 33.83919567185717 + ], + [ + -84.62356567382812, + 33.83919567185717 + ], + [ + -84.62871551513672, + 33.838910506226014 + ], + [ + -84.63489532470703, + 33.8397660002649 + ], + [ + -84.63815689086914, + 33.838910506226014 + ], + [ + -84.6470832824707, + 33.84033632486645 + ], + [ + -84.65841293334961, + 33.83933825431594 + ], + [ + -84.65309143066406, + 33.83363477042082 + ], + [ + -84.64828491210936, + 33.831923651036924 + ], + [ + -84.64279174804688, + 33.82636227649246 + ], + [ + -84.6554946899414, + 33.817769954707906 + ], + [ + -84.65510845184326, + 33.81054959781494 + ], + [ + -84.65390682220458, + 33.809515521507386 + ], + [ + -84.65309143066406, + 33.80632406926795 + ], + [ + -84.62339401245117, + 33.8085349203599 + ], + [ + -84.62094783782959, + 33.81388351734996 + ], + [ + -84.61901664733885, + 33.81388351734996 + ], + [ + -84.61785793304443, + 33.81673596567925 + ], + [ + -84.62090492248535, + 33.81577327500237 + ], + [ + -84.62236404418945, + 33.826825738188624 + ], + [ + -84.62116241455078, + 33.82839435913459 + ], + [ + -84.6163558959961, + 33.82850130951472 + ], + [ + -84.61622714996338, + 33.82946385691532 + ], + [ + -84.61747169494629, + 33.83003425026114 + ], + [ + -84.61785793304443, + 33.83302875288965 + ], + [ + -84.61395263671875, + 33.83641526636492 + ], + [ + -84.61326599121094, + 33.84144131795057 + ], + [ + -84.61678504943848, + 33.84144131795057 + ], + [ + -84.61657047271729, + 33.84646707394075 + ], + [ + -84.61489677429199, + 33.847785840378656 + ], + [ + -84.61416721343994, + 33.84757198774456 + ], + [ + -84.6126651763916, + 33.84896202029756 + ], + [ + -84.61142063140869, + 33.84896202029756 + ], + [ + -84.61103439331055, + 33.847001711436604 + ], + [ + -84.61004734039307, + 33.846787856839725 + ], + [ + -84.60944652557373, + 33.84881945389713 + ], + [ + -84.60803031921387, + 33.848926378719746 + ], + [ + -84.60438251495361, + 33.85341710042116 + ] + ] + ] + } + } + ] +} \ No newline at end of file diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/cobblinc-scheduled-deviated-flex.gtfs/routes.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/cobblinc-scheduled-deviated-flex.gtfs/routes.txt new file mode 100644 index 00000000000..4e488ca9422 --- /dev/null +++ b/src/ext-test/resources/org/opentripplanner/ext/flex/cobblinc-scheduled-deviated-flex.gtfs/routes.txt @@ -0,0 +1,4 @@ +route_id,agency_id,route_short_name,route_long_name,route_desc,route_type,route_url,route_branding_url,route_color,route_text_color,route_sort_order,continuous_pickup,continuous_drop_off +090z,1,Zone 1,PUBLIX Super Market,,3,,,7eafd7,FFFFFF,,2,2 +aamr,1,Zone 2,Horseshoe Bend Pizza,,3,,,a9ca95,FFFFFF,,2,2 +po0p,1,Zone 3,Downtown Austell,,3,,,e18160,FFFFFF,,2,2 diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/cobblinc-scheduled-deviated-flex.gtfs/shapes.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/cobblinc-scheduled-deviated-flex.gtfs/shapes.txt new file mode 100644 index 00000000000..d2edbc6290a --- /dev/null +++ b/src/ext-test/resources/org/opentripplanner/ext/flex/cobblinc-scheduled-deviated-flex.gtfs/shapes.txt @@ -0,0 +1,351 @@ +shape_id,shape_pt_sequence,shape_pt_lat,shape_pt_lon,shape_dist_traveled +1603,0,33.864160,-84.674340,0 +1603,1,33.864310,-84.674750,41.3676553616532772 +1603,2,33.864450,-84.675240,89.2135886238208826 +1603,3,33.864470,-84.675420,105.981431995762449 +1603,4,33.864460,-84.675670,129.091131151471473 +1603,5,33.862850,-84.675710,308.153303093688692 +1603,6,33.861310,-84.670790,793.64064397774564 +1603,7,33.861230,-84.670500,821.856781782056942 +1603,8,33.861050,-84.669670,901.065599474204191 +1603,9,33.860970,-84.669210,944.46144211700198 +1603,10,33.860430,-84.665250,1315.00860103015407 +1603,11,33.860450,-84.665020,1336.36202220561586 +1603,12,33.859770,-84.660040,1802.37267252520996 +1603,13,33.859680,-84.659240,1876.91696686866931 +1603,14,33.859650,-84.658580,1937.95056407665402 +1603,15,33.859750,-84.654950,2273.31783540791594 +1603,16,33.859720,-84.654320,2331.5856147646009 +1603,17,33.859690,-84.654020,2359.48681178299285 +1603,18,33.859610,-84.653630,2396.58065355784629 +1603,19,33.859440,-84.652960,2461.26999921240213 +1603,20,33.858670,-84.650340,2717.89864844431168 +1603,21,33.858500,-84.649620,2787.01720676967261 +1603,22,33.858440,-84.649220,2824.55021752373341 +1603,23,33.858420,-84.648570,2884.61126988275237 +1603,24,33.858470,-84.648020,2935.70071922413217 +1603,25,33.858510,-84.647780,2958.30382108636786 +1603,26,33.858640,-84.647270,3007.56490521255773 +1603,27,33.858820,-84.646790,3056.19681660850665 +1603,28,33.859040,-84.646360,3102.83305365301112 +1603,29,33.867630,-84.631050,4808.89751699588669 +1603,30,33.867510,-84.630680,4845.57250132258559 +1603,31,33.867050,-84.629100,5000.15927979081607 +1603,32,33.866740,-84.628070,5101.31276957639147 +1603,33,33.866350,-84.626740,5231.54339896257443 +1603,34,33.865890,-84.625110,5390.49585608849611 +1603,35,33.865740,-84.624700,5431.86287035937767 +1603,36,33.865580,-84.624380,5466.35167998693578 +1603,37,33.865410,-84.624090,5499.12784904032833 +1603,38,33.865220,-84.623820,5531.80542258516834 +1603,39,33.864990,-84.623550,5567.52023576729516 +1603,40,33.864170,-84.622780,5683.14174282334079 +1603,41,33.855180,-84.614540,6939.40195187243262 +1603,42,33.854810,-84.614140,6994.69214287862087 +1603,43,33.854740,-84.614050,7006.07874325375178 +1603,44,33.854590,-84.613820,7033.08395833279792 +1603,45,33.854400,-84.613450,7073.2550700937345 +1603,46,33.854240,-84.613020,7116.76600806439819 +1603,47,33.854170,-84.612800,7138.52150453755439 +1603,48,33.854090,-84.612430,7173.82741232934131 +1603,49,33.854050,-84.612140,7200.97372852915487 +1603,50,33.854030,-84.611080,7298.88257001024522 +1603,51,33.853990,-84.608370,7549.1717147238478 +1603,52,33.853980,-84.606030,7765.25733788839898 +1603,53,33.854000,-84.602300,8109.70411364922438 +1603,54,33.854070,-84.601760,8160.17317170635761 +1603,55,33.854170,-84.601290,8204.97612933502569 +1603,56,33.854690,-84.599810,8353.37152312560647 +1603,57,33.854800,-84.599870,8366.79933403518226 +1603,58,33.854620,-84.600380,8417.97063950866686 +5mw2,0,33.883310,-84.620270,0 +5mw2,1,33.883100,-84.620380,25.4632412848342753 +5mw2,2,33.882770,-84.619380,124.800729087131458 +5mw2,3,33.881920,-84.619930,232.090136550085901 +5mw2,4,33.878200,-84.622150,693.720674651098534 +5mw2,5,33.875140,-84.623950,1072.38724479474945 +5mw2,6,33.874410,-84.624310,1160.1001415742428 +5mw2,7,33.873860,-84.624640,1228.42578060626147 +5mw2,8,33.873140,-84.625040,1316.59273529802135 +5mw2,9,33.873010,-84.625140,1333.74475359342864 +5mw2,10,33.872650,-84.625320,1377.08734117159929 +5mw2,11,33.871900,-84.625800,1471.52663025872175 +5mw2,12,33.871020,-84.626500,1588.79379329057519 +5mw2,13,33.870240,-84.627250,1699.77654563159331 +5mw2,14,33.869520,-84.628020,1806.84472985877164 +5mw2,15,33.868520,-84.629500,1983.01464183445728 +5mw2,16,33.867990,-84.630390,2084.13494192404596 +5mw2,17,33.867630,-84.631050,2157.04367103032746 +5mw2,18,33.867510,-84.630680,2193.71865535702636 +5mw2,19,33.867050,-84.629100,2348.30543382525684 +5mw2,20,33.866740,-84.628070,2449.4589236108327 +5mw2,21,33.866350,-84.626740,2579.68955299701611 +5mw2,22,33.865890,-84.625110,2738.64201012293779 +5mw2,23,33.865740,-84.624700,2780.00902439381935 +5mw2,24,33.865580,-84.624380,2814.497834021377 +5mw2,25,33.865410,-84.624090,2847.2740030747691 +5mw2,26,33.865220,-84.623820,2879.95157661960911 +5mw2,27,33.864990,-84.623550,2915.66638980173593 +5mw2,28,33.864170,-84.622780,3031.28789685778111 +5mw2,29,33.855180,-84.614540,4287.54810590687339 +5mw2,30,33.854810,-84.614140,4342.83829691306164 +5mw2,31,33.854740,-84.614050,4354.22489728819255 +5mw2,32,33.854590,-84.613820,4381.23011236723869 +5mw2,33,33.854400,-84.613450,4421.40122412817527 +5mw2,34,33.854240,-84.613020,4464.91216209883896 +5mw2,35,33.854170,-84.612800,4486.66765857199516 +5mw2,36,33.854090,-84.612430,4521.97356636378208 +5mw2,37,33.854050,-84.612140,4549.11988256359564 +5mw2,38,33.854030,-84.611080,4647.02872404468599 +5mw2,39,33.853990,-84.608370,4897.31786875828857 +5mw2,40,33.853980,-84.606030,5113.40349192283975 +5mw2,41,33.854000,-84.602300,5457.85026768366515 +5mw2,42,33.854070,-84.601760,5508.31932574079838 +5mw2,43,33.854170,-84.601290,5553.12228336946646 +5mw2,44,33.854690,-84.599810,5701.51767716004724 +5mw2,45,33.854800,-84.599870,5714.94548806962302 +5mw2,46,33.854620,-84.600380,5766.11679354310763 +cizy,0,33.854620,-84.600380,0 +cizy,1,33.854800,-84.599870,51.1713054734841535 +cizy,2,33.854690,-84.599810,64.5991163830600641 +cizy,3,33.854170,-84.601290,212.99451017364089 +cizy,4,33.854070,-84.601760,257.797467802309143 +cizy,5,33.854000,-84.602300,308.266525859442254 +cizy,6,33.853980,-84.606030,652.713301620267202 +cizy,7,33.853990,-84.608370,868.798924784818155 +cizy,8,33.854030,-84.611080,1119.08806949842074 +cizy,9,33.854050,-84.612140,1216.99691097951154 +cizy,10,33.854090,-84.612430,1244.14322717932464 +cizy,11,33.854170,-84.612800,1279.44913497111179 +cizy,12,33.854240,-84.613020,1301.20463144426776 +cizy,13,33.854400,-84.613450,1344.715569414931 +cizy,14,33.854590,-84.613820,1384.88668117586758 +cizy,15,33.854740,-84.614050,1411.89189625491349 +cizy,16,33.854810,-84.614140,1423.27849663004486 +cizy,17,33.855180,-84.614540,1478.56868763623311 +cizy,18,33.864170,-84.622780,2734.82889668532516 +cizy,19,33.864990,-84.623550,2850.45040374137034 +cizy,20,33.865220,-84.623820,2886.16521692349716 +cizy,21,33.865410,-84.624090,2918.84279046833717 +cizy,22,33.865580,-84.624380,2951.61895952172927 +cizy,23,33.865740,-84.624700,2986.10776914928692 +cizy,24,33.865890,-84.625110,3027.47478342016848 +cizy,25,33.866350,-84.626740,3186.42724054609016 +cizy,26,33.866740,-84.628070,3316.65786993227357 +cizy,27,33.867050,-84.629100,3417.81135971784943 +cizy,28,33.867510,-84.630680,3572.3981381860799 +cizy,29,33.867630,-84.631050,3609.07312251277881 +cizy,30,33.859040,-84.646360,5315.13758585565392 +cizy,31,33.858820,-84.646790,5361.77382290015794 +cizy,32,33.858640,-84.647270,5410.40573429610686 +cizy,33,33.858510,-84.647780,5459.66681842229718 +cizy,34,33.858470,-84.648020,5482.26992028453242 +cizy,35,33.858420,-84.648570,5533.35936962591222 +cizy,36,33.858440,-84.649220,5593.42042198493164 +cizy,37,33.858500,-84.649620,5630.95343273899198 +cizy,38,33.858670,-84.650340,5700.07199106435291 +cizy,39,33.859440,-84.652960,5956.70064029626246 +cizy,40,33.859610,-84.653630,6021.3899859508183 +cizy,41,33.859690,-84.654020,6058.48382772567129 +cizy,42,33.859720,-84.654320,6086.38502474406323 +cizy,43,33.859750,-84.654950,6144.65280410074774 +cizy,44,33.859650,-84.658580,6480.02007543200943 +cizy,45,33.859680,-84.659240,6541.05367263999415 +cizy,46,33.859770,-84.660040,6615.59796698345326 +cizy,47,33.860450,-84.665020,7081.60861730304714 +cizy,48,33.860430,-84.665250,7102.96203847850938 +cizy,49,33.860970,-84.669210,7473.50919739166147 +cizy,50,33.861050,-84.669670,7516.90504003445949 +cizy,51,33.861230,-84.670500,7596.11385772660651 +cizy,52,33.861310,-84.670790,7624.32999553091759 +cizy,53,33.862850,-84.675710,8109.81733641497431 +cizy,54,33.864460,-84.675670,8288.8795083571913 +cizy,55,33.864470,-84.675420,8311.98920751290098 +cizy,56,33.864450,-84.675240,8328.7570508848421 +cizy,57,33.864310,-84.674750,8376.60298414700992 +cizy,58,33.864160,-84.674340,8417.97063950866323 +fj8w,0,33.812130,-84.634480,0 +fj8w,1,33.812170,-84.634360,11.9455210030212005 +fj8w,2,33.812710,-84.634610,76.279913916894813 +fj8w,3,33.812850,-84.634650,92.279849053187931 +fj8w,4,33.813260,-84.633250,229.421571582750914 +fj8w,5,33.813330,-84.632900,262.680664666869916 +fj8w,6,33.813470,-84.631130,426.94482553777982 +fj8w,7,33.813580,-84.629890,542.155555480363091 +fj8w,8,33.813700,-84.629120,614.533884663003732 +fj8w,9,33.813850,-84.628330,689.400820648105878 +fj8w,10,33.814020,-84.627630,756.777336790232653 +fj8w,11,33.815340,-84.622650,1239.70300436535308 +fj8w,12,33.816710,-84.617700,1721.71029261900571 +fj8w,13,33.816980,-84.616660,1822.37033079301045 +fj8w,14,33.816830,-84.616620,1839.45404263526211 +fj8w,15,33.816640,-84.616600,1860.66174775616264 +fj8w,16,33.816430,-84.616610,1884.0309823274722 +fj8w,17,33.816150,-84.616680,1915.83011858231112 +fj8w,18,33.816000,-84.616780,1934.89699733012708 +fj8w,19,33.815840,-84.616960,1959.24973939017377 +fj8w,20,33.815700,-84.617250,1990.23560192697937 +fj8w,21,33.815660,-84.617460,2010.13965870778543 +fj8w,22,33.815650,-84.617750,2036.95422308684397 +fj8w,23,33.815680,-84.617870,2048.53136993844828 +fj8w,24,33.815730,-84.617940,2057.05966327484066 +fj8w,25,33.815830,-84.618000,2069.48419467573149 +fj8w,26,33.815900,-84.618010,2077.32248401577999 +fj8w,27,33.816590,-84.617830,2155.82848224535564 +fj8w,28,33.817020,-84.617780,2203.86497053938547 +fj8w,29,33.817450,-84.617790,2251.68777899641691 +fj8w,30,33.818280,-84.617920,2344.75780688978466 +fj8w,31,33.818580,-84.617950,2378.23125954415173 +fj8w,32,33.818970,-84.617960,2421.60717951736524 +fj8w,33,33.819610,-84.617940,2492.79601104468929 +fj8w,34,33.820250,-84.617840,2564.55795400538045 +fj8w,35,33.820570,-84.617740,2601.32000575365601 +fj8w,36,33.821140,-84.617530,2667.60363081003698 +fj8w,37,33.822000,-84.617110,2770.80255010889414 +fj8w,38,33.822450,-84.616910,2824.14224711326233 +fj8w,39,33.824120,-84.616290,3018.46968055592561 +fj8w,40,33.824610,-84.616070,3076.62192977544873 +fj8w,41,33.825150,-84.615800,3141.64117829165889 +fj8w,42,33.829950,-84.613300,3723.19321138423675 +fj8w,43,33.830700,-84.612930,3813.3207347007874 +fj8w,44,33.832430,-84.612080,4021.09324516900551 +fj8w,45,33.833230,-84.611770,4114.5440614867648 +fj8w,46,33.833860,-84.611600,4186.33517561256576 +fj8w,47,33.834760,-84.611440,4287.49602809629869 +fj8w,48,33.837440,-84.611330,4585.67198383807136 +fj8w,49,33.838680,-84.611160,4724.4449904067551 +fj8w,50,33.839410,-84.610990,4807.12197254783678 +fj8w,51,33.843350,-84.609680,5261.6294821976544 +fj8w,52,33.843890,-84.609530,5323.25214634696658 +fj8w,53,33.844970,-84.609300,5445.20691247350896 +fj8w,54,33.846290,-84.609110,5593.02954218924333 +fj8w,55,33.846600,-84.609050,5627.9425358250528 +fj8w,56,33.847280,-84.608850,5705.77838507436354 +fj8w,57,33.847640,-84.608680,5748.77715408244603 +fj8w,58,33.848230,-84.608340,5821.50897298361815 +fj8w,59,33.848860,-84.607870,5903.91841611216842 +fj8w,60,33.851630,-84.605380,6288.29422883609277 +fj8w,61,33.852830,-84.604320,6453.78217286460767 +fj8w,62,33.853990,-84.603350,6610.81991596658008 +fj8w,63,33.854000,-84.602300,6707.78649418878922 +fj8w,64,33.854070,-84.601760,6758.25555224592244 +fj8w,65,33.854170,-84.601290,6803.05850987459053 +fj8w,66,33.854690,-84.599810,6951.45390366517131 +fj8w,67,33.854800,-84.599870,6964.88171457474709 +fj8w,68,33.854620,-84.600380,7016.0530200482317 +swh2,0,33.854620,-84.600380,0 +swh2,1,33.854800,-84.599870,51.1713054734841535 +swh2,2,33.854690,-84.599810,64.5991163830600641 +swh2,3,33.854170,-84.601290,212.99451017364089 +swh2,4,33.854070,-84.601760,257.797467802309143 +swh2,5,33.854000,-84.602300,308.266525859442254 +swh2,6,33.853990,-84.603350,405.233104081651106 +swh2,7,33.852830,-84.604320,562.270847183623459 +swh2,8,33.851630,-84.605380,727.758791212138476 +swh2,9,33.848860,-84.607870,1112.1346039360626 +swh2,10,33.848230,-84.608340,1194.54404706461241 +swh2,11,33.847640,-84.608680,1267.27586596578431 +swh2,12,33.847280,-84.608850,1310.27463497386657 +swh2,13,33.846600,-84.609050,1388.11048422317776 +swh2,14,33.846290,-84.609110,1423.02347785898746 +swh2,15,33.844970,-84.609300,1570.84610757472137 +swh2,16,33.843890,-84.609530,1692.80087370126375 +swh2,17,33.843350,-84.609680,1754.42353785057549 +swh2,18,33.839410,-84.610990,2208.93104750039311 +swh2,19,33.838680,-84.611160,2291.60802964147479 +swh2,20,33.837440,-84.611330,2430.38103621015898 +swh2,21,33.834760,-84.611440,2728.55699195193165 +swh2,22,33.833860,-84.611600,2829.71784443566457 +swh2,23,33.833230,-84.611770,2901.50895856146553 +swh2,24,33.832430,-84.612080,2994.95977487922482 +swh2,25,33.830700,-84.612930,3202.73228534744294 +swh2,26,33.829950,-84.613300,3292.85980866399359 +swh2,27,33.825150,-84.615800,3874.41184175657145 +swh2,28,33.824610,-84.616070,3939.4310902727816 +swh2,29,33.824120,-84.616290,3997.58333949230473 +swh2,30,33.822450,-84.616910,4191.91077293496801 +swh2,31,33.822000,-84.617110,4245.25046993933665 +swh2,32,33.821140,-84.617530,4348.44938923819336 +swh2,33,33.820570,-84.617740,4414.73301429457388 +swh2,34,33.820250,-84.617840,4451.49506604284943 +swh2,35,33.819610,-84.617940,4523.25700900354059 +swh2,36,33.818970,-84.617960,4594.4458405308651 +swh2,37,33.818580,-84.617950,4637.82176050407907 +swh2,38,33.818280,-84.617920,4671.29521315844613 +swh2,39,33.817450,-84.617790,4764.36524105181434 +swh2,40,33.817020,-84.617780,4812.18804950884532 +swh2,41,33.816590,-84.617830,4860.22453780287469 +swh2,42,33.815900,-84.618010,4938.73053603244989 +swh2,43,33.815830,-84.618000,4946.5688253724984 +swh2,44,33.815730,-84.617940,4958.99335677338877 +swh2,45,33.815680,-84.617870,4967.52165010978115 +swh2,46,33.815650,-84.617750,4979.09879696138523 +swh2,47,33.815660,-84.617460,5005.91336134044377 +swh2,48,33.815700,-84.617250,5025.81741812124983 +swh2,49,33.815840,-84.616960,5056.80328065805497 +swh2,50,33.816000,-84.616780,5081.15602271810167 +swh2,51,33.816150,-84.616680,5100.22290146591786 +swh2,52,33.816430,-84.616610,5132.022037720757 +swh2,53,33.816640,-84.616600,5155.39127229206679 +swh2,54,33.816830,-84.616620,5176.59897741296754 +swh2,55,33.816980,-84.616660,5193.68268925521897 +swh2,56,33.816710,-84.617700,5294.34272742922349 +swh2,57,33.815340,-84.622650,5776.35001568287589 +swh2,58,33.814020,-84.627630,6259.27568325799621 +swh2,59,33.813850,-84.628330,6326.65219940012321 +swh2,60,33.813700,-84.629120,6401.51913538522513 +swh2,61,33.813580,-84.629890,6473.89746456786543 +swh2,62,33.813470,-84.631130,6589.10819451044881 +swh2,63,33.813330,-84.632900,6753.37235538135883 +swh2,64,33.813260,-84.633250,6786.63144846547766 +swh2,65,33.812850,-84.634650,6923.77317099504035 +swh2,66,33.812710,-84.634610,6939.77310613133341 +swh2,67,33.812170,-84.634360,7004.10749904520708 +swh2,68,33.812130,-84.634480,7016.05302004822806 +wm2h,0,33.854620,-84.600380,0 +wm2h,1,33.854800,-84.599870,51.1713054734841535 +wm2h,2,33.854690,-84.599810,64.5991163830600641 +wm2h,3,33.854170,-84.601290,212.99451017364089 +wm2h,4,33.854070,-84.601760,257.797467802309143 +wm2h,5,33.854000,-84.602300,308.266525859442254 +wm2h,6,33.853980,-84.606030,652.713301620267202 +wm2h,7,33.853990,-84.608370,868.798924784818155 +wm2h,8,33.854030,-84.611080,1119.08806949842074 +wm2h,9,33.854050,-84.612140,1216.99691097951154 +wm2h,10,33.854090,-84.612430,1244.14322717932464 +wm2h,11,33.854170,-84.612800,1279.44913497111179 +wm2h,12,33.854240,-84.613020,1301.20463144426776 +wm2h,13,33.854400,-84.613450,1344.715569414931 +wm2h,14,33.854590,-84.613820,1384.88668117586758 +wm2h,15,33.854740,-84.614050,1411.89189625491349 +wm2h,16,33.854810,-84.614140,1423.27849663004486 +wm2h,17,33.855180,-84.614540,1478.56868763623311 +wm2h,18,33.864170,-84.622780,2734.82889668532516 +wm2h,19,33.864990,-84.623550,2850.45040374137034 +wm2h,20,33.865220,-84.623820,2886.16521692349716 +wm2h,21,33.865410,-84.624090,2918.84279046833717 +wm2h,22,33.865580,-84.624380,2951.61895952172927 +wm2h,23,33.865740,-84.624700,2986.10776914928692 +wm2h,24,33.865890,-84.625110,3027.47478342016848 +wm2h,25,33.866350,-84.626740,3186.42724054609016 +wm2h,26,33.866740,-84.628070,3316.65786993227357 +wm2h,27,33.867050,-84.629100,3417.81135971784943 +wm2h,28,33.867510,-84.630680,3572.3981381860799 +wm2h,29,33.867630,-84.631050,3609.07312251277881 +wm2h,30,33.867990,-84.630390,3681.98185161906031 +wm2h,31,33.868520,-84.629500,3783.10215170864876 +wm2h,32,33.869520,-84.628020,3959.27206368433463 +wm2h,33,33.870240,-84.627250,4066.34024791151296 +wm2h,34,33.871020,-84.626500,4177.32300025253153 +wm2h,35,33.871900,-84.625800,4294.5901632843852 +wm2h,36,33.872650,-84.625320,4389.02945237150743 +wm2h,37,33.873010,-84.625140,4432.37203994967786 +wm2h,38,33.873140,-84.625040,4449.52405824508514 +wm2h,39,33.873860,-84.624640,4537.69101293684525 +wm2h,40,33.874410,-84.624310,4606.0166519688637 +wm2h,41,33.875140,-84.623950,4693.72954874835705 +wm2h,42,33.878200,-84.622150,5072.39611889200751 +wm2h,43,33.881920,-84.619930,5534.02665699301997 +wm2h,44,33.882770,-84.619380,5641.31606445597481 +wm2h,45,33.883100,-84.620380,5740.6535522582717 +wm2h,46,33.883310,-84.620270,5766.11679354310581 diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/cobblinc-scheduled-deviated-flex.gtfs/stop_times.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/cobblinc-scheduled-deviated-flex.gtfs/stop_times.txt new file mode 100644 index 00000000000..bfeb52654d8 --- /dev/null +++ b/src/ext-test/resources/org/opentripplanner/ext/flex/cobblinc-scheduled-deviated-flex.gtfs/stop_times.txt @@ -0,0 +1,289 @@ +trip_id,stop_sequence,stop_id,arrival_time,departure_time,stop_headsign,pickup_type,drop_off_type,continuous_pickup,continuous_drop_off,shape_dist_traveled,timepoint,start_pickup_drop_off_window,end_pickup_drop_off_window,mean_duration_factor,mean_duration_offset,safe_duration_factor,safe_duration_offset,pickup_booking_rule_id,dropoff_booking_rule_id +4d838cf4-d44d-4e08-a364-f22c34a8c89e,0,yz85,7:30:00,7:30:00,,,,,,,0,,,,,,,, +4d838cf4-d44d-4e08-a364-f22c34a8c89e,1,zone_1,,,,2,2,,,,0,7:30:00,8:00:00,,,,,1,1 +4d838cf4-d44d-4e08-a364-f22c34a8c89e,2,zone_1,,,,2,2,,,,0,7:30:00,8:00:00,,,,,1,1 +4d838cf4-d44d-4e08-a364-f22c34a8c89e,3,cujv,8:00:00,8:00:00,,,,,,,0,,,,,,,, +48071338-a326-4da6-aca6-b1e0de935e5e,0,yz85,8:30:00,8:30:00,,,,,,,0,,,,,,,, +48071338-a326-4da6-aca6-b1e0de935e5e,1,zone_1,,,,2,2,,,,0,8:30:00,9:00:00,,,,,1,1 +48071338-a326-4da6-aca6-b1e0de935e5e,2,zone_1,,,,2,2,,,,0,8:30:00,9:00:00,,,,,1,1 +48071338-a326-4da6-aca6-b1e0de935e5e,3,cujv,9:00:00,9:00:00,,,,,,,0,,,,,,,, +3a4c1a1e-bbfd-46cc-8b2c-f68c7b0dca7c,0,yz85,10:30:00,10:30:00,,,,,,,0,,,,,,,, +3a4c1a1e-bbfd-46cc-8b2c-f68c7b0dca7c,1,zone_1,,,,2,2,,,,0,10:30:00,11:00:00,,,,,1,1 +3a4c1a1e-bbfd-46cc-8b2c-f68c7b0dca7c,2,zone_1,,,,2,2,,,,0,10:30:00,11:00:00,,,,,1,1 +3a4c1a1e-bbfd-46cc-8b2c-f68c7b0dca7c,3,cujv,11:00:00,11:00:00,,,,,,,0,,,,,,,, +55db7288-4c30-47ba-b766-16a09b1d5020,0,yz85,9:30:00,9:30:00,,,,,,,0,,,,,,,, +55db7288-4c30-47ba-b766-16a09b1d5020,1,zone_1,,,,2,2,,,,0,9:30:00,10:00:00,,,,,1,1 +55db7288-4c30-47ba-b766-16a09b1d5020,2,zone_1,,,,2,2,,,,0,9:30:00,10:00:00,,,,,1,1 +55db7288-4c30-47ba-b766-16a09b1d5020,3,cujv,10:00:00,10:00:00,,,,,,,0,,,,,,,, +3570424a-a8ae-4a7c-8137-c6f6245ddfca,0,yz85,12:30:00,12:30:00,,,,,,,0,,,,,,,, +3570424a-a8ae-4a7c-8137-c6f6245ddfca,1,zone_1,,,,2,2,,,,0,12:30:00,13:00:00,,,,,1,1 +3570424a-a8ae-4a7c-8137-c6f6245ddfca,2,zone_1,,,,2,2,,,,0,12:30:00,13:00:00,,,,,1,1 +3570424a-a8ae-4a7c-8137-c6f6245ddfca,3,cujv,13:00:00,13:00:00,,,,,,,0,,,,,,,, +d0cc6a8d-78c6-496a-aa3e-66c0829930f1,0,yz85,13:30:00,13:30:00,,,,,,,0,,,,,,,, +d0cc6a8d-78c6-496a-aa3e-66c0829930f1,1,zone_1,,,,2,2,,,,0,13:30:00,14:00:00,,,,,1,1 +d0cc6a8d-78c6-496a-aa3e-66c0829930f1,2,zone_1,,,,2,2,,,,0,13:30:00,14:00:00,,,,,1,1 +d0cc6a8d-78c6-496a-aa3e-66c0829930f1,3,cujv,14:00:00,14:00:00,,,,,,,0,,,,,,,, +50dfb2c0-d8ba-4dc6-a104-a3cc058feae9,0,yz85,11:30:00,11:30:00,,,,,,,0,,,,,,,, +50dfb2c0-d8ba-4dc6-a104-a3cc058feae9,1,zone_1,,,,2,2,,,,0,11:30:00,12:00:00,,,,,1,1 +50dfb2c0-d8ba-4dc6-a104-a3cc058feae9,2,zone_1,,,,2,2,,,,0,11:30:00,12:00:00,,,,,1,1 +50dfb2c0-d8ba-4dc6-a104-a3cc058feae9,3,cujv,12:00:00,12:00:00,,,,,,,0,,,,,,,, +1d32fa36-c9db-4ca2-a26b-574935e99081,0,yz85,15:30:00,15:30:00,,,,,,,0,,,,,,,, +1d32fa36-c9db-4ca2-a26b-574935e99081,1,zone_1,,,,2,2,,,,0,15:30:00,16:00:00,,,,,1,1 +1d32fa36-c9db-4ca2-a26b-574935e99081,2,zone_1,,,,2,2,,,,0,15:30:00,16:00:00,,,,,1,1 +1d32fa36-c9db-4ca2-a26b-574935e99081,3,cujv,16:00:00,16:00:00,,,,,,,0,,,,,,,, +273d01f4-1adb-4c9d-9fef-54c861fd15d0,0,yz85,14:30:00,14:30:00,,,,,,,0,,,,,,,, +273d01f4-1adb-4c9d-9fef-54c861fd15d0,1,zone_1,,,,2,2,,,,0,14:30:00,15:00:00,,,,,1,1 +273d01f4-1adb-4c9d-9fef-54c861fd15d0,2,zone_1,,,,2,2,,,,0,14:30:00,15:00:00,,,,,1,1 +273d01f4-1adb-4c9d-9fef-54c861fd15d0,3,cujv,15:00:00,15:00:00,,,,,,,0,,,,,,,, +a642849a-c0e1-4308-b6c4-0ad12c56744c,0,yz85,16:30:00,16:30:00,,,,,,,0,,,,,,,, +a642849a-c0e1-4308-b6c4-0ad12c56744c,1,zone_1,,,,2,2,,,,0,16:30:00,17:00:00,,,,,1,1 +a642849a-c0e1-4308-b6c4-0ad12c56744c,2,zone_1,,,,2,2,,,,0,16:30:00,17:00:00,,,,,1,1 +a642849a-c0e1-4308-b6c4-0ad12c56744c,3,cujv,17:00:00,17:00:00,,,,,,,0,,,,,,,, +adef9bc9-98ee-4ae1-99a9-5b55bb01bf52,0,yz85,17:30:00,17:30:00,,,,,,,0,,,,,,,, +adef9bc9-98ee-4ae1-99a9-5b55bb01bf52,1,zone_1,,,,2,2,,,,0,17:30:00,18:00:00,,,,,1,1 +adef9bc9-98ee-4ae1-99a9-5b55bb01bf52,2,zone_1,,,,2,2,,,,0,17:30:00,18:00:00,,,,,1,1 +adef9bc9-98ee-4ae1-99a9-5b55bb01bf52,3,cujv,18:00:00,18:00:00,,,,,,,0,,,,,,,, +a62fe28a-b95b-4f37-b72c-db27af73e6fe,0,yz85,18:30:00,18:30:00,,,,,,,0,,,,,,,, +a62fe28a-b95b-4f37-b72c-db27af73e6fe,1,zone_1,,,,2,2,,,,0,18:30:00,19:00:00,,,,,1,1 +a62fe28a-b95b-4f37-b72c-db27af73e6fe,2,zone_1,,,,2,2,,,,0,18:30:00,19:00:00,,,,,1,1 +a62fe28a-b95b-4f37-b72c-db27af73e6fe,3,cujv,19:00:00,19:00:00,,,,,,,0,,,,,,,, +b43131c7-63c2-4127-a837-6987dcc428ae,0,cujv,7:00:00,7:00:00,,,,,,,0,,,,,,,, +b43131c7-63c2-4127-a837-6987dcc428ae,1,zone_1,,,,2,2,,,,0,7:00:00,7:30:00,,,,,1,1 +b43131c7-63c2-4127-a837-6987dcc428ae,2,zone_1,,,,2,2,,,,0,7:00:00,7:30:00,,,,,1,1 +b43131c7-63c2-4127-a837-6987dcc428ae,3,yz85,7:30:00,7:30:00,,,,,,,0,,,,,,,, +5ad42b7b-30df-47ad-8264-b9c1119d954a,0,cujv,9:00:00,9:00:00,,,,,,,0,,,,,,,, +5ad42b7b-30df-47ad-8264-b9c1119d954a,1,zone_1,,,,2,2,,,,0,9:00:00,9:30:00,,,,,1,1 +5ad42b7b-30df-47ad-8264-b9c1119d954a,2,zone_1,,,,2,2,,,,0,9:00:00,9:30:00,,,,,1,1 +5ad42b7b-30df-47ad-8264-b9c1119d954a,3,yz85,9:30:00,9:30:00,,,,,,,0,,,,,,,, +0ef63de2-f001-423e-b2c8-cb362db810dc,0,cujv,10:00:00,10:00:00,,,,,,,0,,,,,,,, +0ef63de2-f001-423e-b2c8-cb362db810dc,1,zone_1,,,,2,2,,,,0,10:00:00,10:30:00,,,,,1,1 +0ef63de2-f001-423e-b2c8-cb362db810dc,2,zone_1,,,,2,2,,,,0,10:00:00,10:30:00,,,,,1,1 +0ef63de2-f001-423e-b2c8-cb362db810dc,3,yz85,10:30:00,10:30:00,,,,,,,0,,,,,,,, +580c504a-d9e8-446f-8a79-efedbeda8dab,0,cujv,8:00:00,8:00:00,,,,,,,0,,,,,,,, +580c504a-d9e8-446f-8a79-efedbeda8dab,1,zone_1,,,,2,2,,,,0,8:00:00,8:30:00,,,,,1,1 +580c504a-d9e8-446f-8a79-efedbeda8dab,2,zone_1,,,,2,2,,,,0,8:00:00,8:30:00,,,,,1,1 +580c504a-d9e8-446f-8a79-efedbeda8dab,3,yz85,8:30:00,8:30:00,,,,,,,0,,,,,,,, +54c6c881-ec67-4a66-bd9f-3b61c83b326b,0,cujv,11:00:00,11:00:00,,,,,,,0,,,,,,,, +54c6c881-ec67-4a66-bd9f-3b61c83b326b,1,zone_1,,,,2,2,,,,0,11:00:00,11:30:00,,,,,1,1 +54c6c881-ec67-4a66-bd9f-3b61c83b326b,2,zone_1,,,,2,2,,,,0,11:00:00,11:30:00,,,,,1,1 +54c6c881-ec67-4a66-bd9f-3b61c83b326b,3,yz85,11:30:00,11:30:00,,,,,,,0,,,,,,,, +ac07359f-3afa-4de6-a076-d746cbc83ded,0,cujv,13:00:00,13:00:00,,,,,,,0,,,,,,,, +ac07359f-3afa-4de6-a076-d746cbc83ded,1,zone_1,,,,2,2,,,,0,13:00:00,13:30:00,,,,,1,1 +ac07359f-3afa-4de6-a076-d746cbc83ded,2,zone_1,,,,2,2,,,,0,13:00:00,13:30:00,,,,,1,1 +ac07359f-3afa-4de6-a076-d746cbc83ded,3,yz85,13:30:00,13:30:00,,,,,,,0,,,,,,,, +89367b3a-da78-4420-b497-01aa9017068d,0,cujv,12:00:00,12:00:00,,,,,,,0,,,,,,,, +89367b3a-da78-4420-b497-01aa9017068d,1,zone_1,,,,2,2,,,,0,12:00:00,12:30:00,,,,,1,1 +89367b3a-da78-4420-b497-01aa9017068d,2,zone_1,,,,2,2,,,,0,12:00:00,12:30:00,,,,,1,1 +89367b3a-da78-4420-b497-01aa9017068d,3,yz85,12:30:00,12:30:00,,,,,,,0,,,,,,,, +c8bd2ce1-eff7-4504-8fd7-2416de4d9413,0,cujv,14:00:00,14:00:00,,,,,,,0,,,,,,,, +c8bd2ce1-eff7-4504-8fd7-2416de4d9413,1,zone_1,,,,2,2,,,,0,14:00:00,14:30:00,,,,,1,1 +c8bd2ce1-eff7-4504-8fd7-2416de4d9413,2,zone_1,,,,2,2,,,,0,14:00:00,14:30:00,,,,,1,1 +c8bd2ce1-eff7-4504-8fd7-2416de4d9413,3,yz85,14:30:00,14:30:00,,,,,,,0,,,,,,,, +202bd60a-a979-4bba-86b0-d0b1e870bdfc,0,cujv,17:00:00,17:00:00,,,,,,,0,,,,,,,, +202bd60a-a979-4bba-86b0-d0b1e870bdfc,1,zone_1,,,,2,2,,,,0,17:00:00,17:30:00,,,,,1,1 +202bd60a-a979-4bba-86b0-d0b1e870bdfc,2,zone_1,,,,2,2,,,,0,17:00:00,17:30:00,,,,,1,1 +202bd60a-a979-4bba-86b0-d0b1e870bdfc,3,yz85,17:30:00,17:30:00,,,,,,,0,,,,,,,, +6cd8ea48-276d-45d7-852c-167a8f2b13fa,0,cujv,15:00:00,15:00:00,,,,,,,0,,,,,,,, +6cd8ea48-276d-45d7-852c-167a8f2b13fa,1,zone_1,,,,2,2,,,,0,15:00:00,15:30:00,,,,,1,1 +6cd8ea48-276d-45d7-852c-167a8f2b13fa,2,zone_1,,,,2,2,,,,0,15:00:00,15:30:00,,,,,1,1 +6cd8ea48-276d-45d7-852c-167a8f2b13fa,3,yz85,15:30:00,15:30:00,,,,,,,0,,,,,,,, +19290d0c-323c-499b-aa37-65cb80505d6b,0,cujv,16:00:00,16:00:00,,,,,,,0,,,,,,,, +19290d0c-323c-499b-aa37-65cb80505d6b,1,zone_1,,,,2,2,,,,0,16:00:00,16:30:00,,,,,1,1 +19290d0c-323c-499b-aa37-65cb80505d6b,2,zone_1,,,,2,2,,,,0,16:00:00,16:30:00,,,,,1,1 +19290d0c-323c-499b-aa37-65cb80505d6b,3,yz85,16:30:00,16:30:00,,,,,,,0,,,,,,,, +f665bd4d-6f7a-4fbf-97ba-e602c17620c2,0,cujv,18:00:00,18:00:00,,,,,,,0,,,,,,,, +f665bd4d-6f7a-4fbf-97ba-e602c17620c2,1,zone_1,,,,2,2,,,,0,18:00:00,18:30:00,,,,,1,1 +f665bd4d-6f7a-4fbf-97ba-e602c17620c2,2,zone_1,,,,2,2,,,,0,18:00:00,18:30:00,,,,,1,1 +f665bd4d-6f7a-4fbf-97ba-e602c17620c2,3,yz85,18:30:00,18:30:00,,,,,,,0,,,,,,,, +9d80fb21-203f-4e0f-b79c-5d584ebe4ffd,0,7y7t,7:30:00,7:30:00,,,,,,,0,,,,,,,, +9d80fb21-203f-4e0f-b79c-5d584ebe4ffd,1,zone_2,,,,2,2,,,,0,7:30:00,8:00:00,,,,,1,1 +9d80fb21-203f-4e0f-b79c-5d584ebe4ffd,2,zone_2,,,,2,2,,,,0,7:30:00,8:00:00,,,,,1,1 +9d80fb21-203f-4e0f-b79c-5d584ebe4ffd,3,cujv,8:00:00,8:00:00,,,,,,,0,,,,,,,, +679e1454-ae4b-4c5d-a594-78c30b76843e,0,7y7t,8:30:00,8:30:00,,,,,,,0,,,,,,,, +679e1454-ae4b-4c5d-a594-78c30b76843e,1,zone_2,,,,2,2,,,,0,8:30:00,9:00:00,,,,,1,1 +679e1454-ae4b-4c5d-a594-78c30b76843e,2,zone_2,,,,2,2,,,,0,8:30:00,9:00:00,,,,,1,1 +679e1454-ae4b-4c5d-a594-78c30b76843e,3,cujv,9:00:00,9:00:00,,,,,,,0,,,,,,,, +dcb9e29e-9e7a-4b65-ae2a-8c9efa816dec,0,7y7t,9:30:00,9:30:00,,,,,,,0,,,,,,,, +dcb9e29e-9e7a-4b65-ae2a-8c9efa816dec,1,zone_2,,,,2,2,,,,0,9:30:00,10:00:00,,,,,1,1 +dcb9e29e-9e7a-4b65-ae2a-8c9efa816dec,2,zone_2,,,,2,2,,,,0,9:30:00,10:00:00,,,,,1,1 +dcb9e29e-9e7a-4b65-ae2a-8c9efa816dec,3,cujv,10:00:00,10:00:00,,,,,,,0,,,,,,,, +d2a823f2-798b-476a-a222-555711ae36f9,0,7y7t,10:30:00,10:30:00,,,,,,,0,,,,,,,, +d2a823f2-798b-476a-a222-555711ae36f9,1,zone_2,,,,2,2,,,,0,10:30:00,11:00:00,,,,,1,1 +d2a823f2-798b-476a-a222-555711ae36f9,2,zone_2,,,,2,2,,,,0,10:30:00,11:00:00,,,,,1,1 +d2a823f2-798b-476a-a222-555711ae36f9,3,cujv,11:00:00,11:00:00,,,,,,,0,,,,,,,, +c4f27c33-48bb-479e-b5de-454b4eb35cdd,0,7y7t,11:30:00,11:30:00,,,,,,,0,,,,,,,, +c4f27c33-48bb-479e-b5de-454b4eb35cdd,1,zone_2,,,,2,2,,,,0,11:30:00,12:00:00,,,,,1,1 +c4f27c33-48bb-479e-b5de-454b4eb35cdd,2,zone_2,,,,2,2,,,,0,11:30:00,12:00:00,,,,,1,1 +c4f27c33-48bb-479e-b5de-454b4eb35cdd,3,cujv,12:00:00,12:00:00,,,,,,,0,,,,,,,, +ef307aa7-77da-4d0b-997f-b48493f21329,0,7y7t,14:30:00,14:30:00,,,,,,,0,,,,,,,, +ef307aa7-77da-4d0b-997f-b48493f21329,1,zone_2,,,,2,2,,,,0,14:30:00,15:00:00,,,,,1,1 +ef307aa7-77da-4d0b-997f-b48493f21329,2,zone_2,,,,2,2,,,,0,14:30:00,15:00:00,,,,,1,1 +ef307aa7-77da-4d0b-997f-b48493f21329,3,cujv,15:00:00,15:00:00,,,,,,,0,,,,,,,, +792effa3-a3a4-4cde-9246-3e70474643a1,0,7y7t,15:30:00,15:30:00,,,,,,,0,,,,,,,, +792effa3-a3a4-4cde-9246-3e70474643a1,1,zone_2,,,,2,2,,,,0,15:30:00,16:00:00,,,,,1,1 +792effa3-a3a4-4cde-9246-3e70474643a1,2,zone_2,,,,2,2,,,,0,15:30:00,16:00:00,,,,,1,1 +792effa3-a3a4-4cde-9246-3e70474643a1,3,cujv,16:00:00,16:00:00,,,,,,,0,,,,,,,, +ef5a5ad2-1db7-4005-96e6-bffbcdb50ff2,0,7y7t,12:30:00,12:30:00,,,,,,,0,,,,,,,, +ef5a5ad2-1db7-4005-96e6-bffbcdb50ff2,1,zone_2,,,,2,2,,,,0,12:30:00,13:00:00,,,,,1,1 +ef5a5ad2-1db7-4005-96e6-bffbcdb50ff2,2,zone_2,,,,2,2,,,,0,12:30:00,13:00:00,,,,,1,1 +ef5a5ad2-1db7-4005-96e6-bffbcdb50ff2,3,cujv,13:00:00,13:00:00,,,,,,,0,,,,,,,, +f2e5cf8d-290b-4da3-bc9d-b1d7ead3d6c6,0,7y7t,13:30:00,13:30:00,,,,,,,0,,,,,,,, +f2e5cf8d-290b-4da3-bc9d-b1d7ead3d6c6,1,zone_2,,,,2,2,,,,0,13:30:00,14:00:00,,,,,1,1 +f2e5cf8d-290b-4da3-bc9d-b1d7ead3d6c6,2,zone_2,,,,2,2,,,,0,13:30:00,14:00:00,,,,,1,1 +f2e5cf8d-290b-4da3-bc9d-b1d7ead3d6c6,3,cujv,14:00:00,14:00:00,,,,,,,0,,,,,,,, +c9fbc38d-4f91-46dc-bfd3-4a0460da2974,0,7y7t,16:30:00,16:30:00,,,,,,,0,,,,,,,, +c9fbc38d-4f91-46dc-bfd3-4a0460da2974,1,zone_2,,,,2,2,,,,0,16:30:00,17:00:00,,,,,1,1 +c9fbc38d-4f91-46dc-bfd3-4a0460da2974,2,zone_2,,,,2,2,,,,0,16:30:00,17:00:00,,,,,1,1 +c9fbc38d-4f91-46dc-bfd3-4a0460da2974,3,cujv,17:00:00,17:00:00,,,,,,,0,,,,,,,, +06671d42-4558-42fb-ad0f-00680b157ab7,0,7y7t,17:30:00,17:30:00,,,,,,,0,,,,,,,, +06671d42-4558-42fb-ad0f-00680b157ab7,1,zone_2,,,,2,2,,,,0,17:30:00,18:00:00,,,,,1,1 +06671d42-4558-42fb-ad0f-00680b157ab7,2,zone_2,,,,2,2,,,,0,17:30:00,18:00:00,,,,,1,1 +06671d42-4558-42fb-ad0f-00680b157ab7,3,cujv,18:00:00,18:00:00,,,,,,,0,,,,,,,, +b86afa6f-467e-4c46-8a09-5916d1cf9733,0,7y7t,18:30:00,18:30:00,,,,,,,0,,,,,,,, +b86afa6f-467e-4c46-8a09-5916d1cf9733,1,zone_2,,,,2,2,,,,0,18:30:00,19:00:00,,,,,1,1 +b86afa6f-467e-4c46-8a09-5916d1cf9733,2,zone_2,,,,2,2,,,,0,18:30:00,19:00:00,,,,,1,1 +b86afa6f-467e-4c46-8a09-5916d1cf9733,3,cujv,19:00:00,19:00:00,,,,,,,0,,,,,,,, +fe470cdb-09e4-42f9-b182-e14ddb13c15e,0,cujv,7:00:00,7:00:00,,,,,,,0,,,,,,,, +fe470cdb-09e4-42f9-b182-e14ddb13c15e,1,zone_2,,,,2,2,,,,0,7:00:00,7:30:00,,,,,1,1 +fe470cdb-09e4-42f9-b182-e14ddb13c15e,2,zone_2,,,,2,2,,,,0,7:00:00,7:30:00,,,,,1,1 +fe470cdb-09e4-42f9-b182-e14ddb13c15e,3,7y7t,7:30:00,7:30:00,,,,,,,0,,,,,,,, +d5774d48-8a06-46e0-9469-c2f881155dd6,0,cujv,8:00:00,8:00:00,,,,,,,0,,,,,,,, +d5774d48-8a06-46e0-9469-c2f881155dd6,1,zone_2,,,,2,2,,,,0,8:00:00,8:30:00,,,,,1,1 +d5774d48-8a06-46e0-9469-c2f881155dd6,2,zone_2,,,,2,2,,,,0,8:00:00,8:30:00,,,,,1,1 +d5774d48-8a06-46e0-9469-c2f881155dd6,3,7y7t,8:30:00,8:30:00,,,,,,,0,,,,,,,, +6edc3666-eee7-45fa-95d5-2d10e4923870,0,cujv,9:00:00,9:00:00,,,,,,,0,,,,,,,, +6edc3666-eee7-45fa-95d5-2d10e4923870,1,zone_2,,,,2,2,,,,0,9:00:00,9:30:00,,,,,1,1 +6edc3666-eee7-45fa-95d5-2d10e4923870,2,zone_2,,,,2,2,,,,0,9:00:00,9:30:00,,,,,1,1 +6edc3666-eee7-45fa-95d5-2d10e4923870,3,7y7t,9:30:00,9:30:00,,,,,,,0,,,,,,,, +e6a21333-9744-44d5-a926-cd92f24b1f5c,0,cujv,10:00:00,10:00:00,,,,,,,0,,,,,,,, +e6a21333-9744-44d5-a926-cd92f24b1f5c,1,zone_2,,,,2,2,,,,0,10:00:00,10:30:00,,,,,1,1 +e6a21333-9744-44d5-a926-cd92f24b1f5c,2,zone_2,,,,2,2,,,,0,10:00:00,10:30:00,,,,,1,1 +e6a21333-9744-44d5-a926-cd92f24b1f5c,3,7y7t,10:30:00,10:30:00,,,,,,,0,,,,,,,, +2e1be2a2-a953-4ae9-9d44-f1f93b0a9801,0,cujv,11:00:00,11:00:00,,,,,,,0,,,,,,,, +2e1be2a2-a953-4ae9-9d44-f1f93b0a9801,1,zone_2,,,,2,2,,,,0,11:00:00,11:30:00,,,,,1,1 +2e1be2a2-a953-4ae9-9d44-f1f93b0a9801,2,zone_2,,,,2,2,,,,0,11:00:00,11:30:00,,,,,1,1 +2e1be2a2-a953-4ae9-9d44-f1f93b0a9801,3,7y7t,11:30:00,11:30:00,,,,,,,0,,,,,,,, +e2c9bd09-af14-4e82-b6a2-ae1508e85458,0,cujv,12:00:00,12:00:00,,,,,,,0,,,,,,,, +e2c9bd09-af14-4e82-b6a2-ae1508e85458,1,zone_2,,,,2,2,,,,0,12:00:00,12:30:00,,,,,1,1 +e2c9bd09-af14-4e82-b6a2-ae1508e85458,2,zone_2,,,,2,2,,,,0,12:00:00,12:30:00,,,,,1,1 +e2c9bd09-af14-4e82-b6a2-ae1508e85458,3,7y7t,12:30:00,12:30:00,,,,,,,0,,,,,,,, +064d8fdf-7616-4ff1-b6eb-2a1f961dffd5,0,cujv,14:00:00,14:00:00,,,,,,,0,,,,,,,, +064d8fdf-7616-4ff1-b6eb-2a1f961dffd5,1,zone_2,,,,2,2,,,,0,14:00:00,14:30:00,,,,,1,1 +064d8fdf-7616-4ff1-b6eb-2a1f961dffd5,2,zone_2,,,,2,2,,,,0,14:00:00,14:30:00,,,,,1,1 +064d8fdf-7616-4ff1-b6eb-2a1f961dffd5,3,7y7t,14:30:00,14:30:00,,,,,,,0,,,,,,,, +6e9dcf78-99fe-44d5-9d1b-8f5f35bc814c,0,cujv,13:00:00,13:00:00,,,,,,,0,,,,,,,, +6e9dcf78-99fe-44d5-9d1b-8f5f35bc814c,1,zone_2,,,,2,2,,,,0,13:00:00,13:30:00,,,,,1,1 +6e9dcf78-99fe-44d5-9d1b-8f5f35bc814c,2,zone_2,,,,2,2,,,,0,13:00:00,13:30:00,,,,,1,1 +6e9dcf78-99fe-44d5-9d1b-8f5f35bc814c,3,7y7t,13:30:00,13:30:00,,,,,,,0,,,,,,,, +a77552e4-413f-4a0b-a638-0ff99b9b411d,0,cujv,15:00:00,15:00:00,,,,,,,0,,,,,,,, +a77552e4-413f-4a0b-a638-0ff99b9b411d,1,zone_2,,,,2,2,,,,0,15:00:00,15:30:00,,,,,1,1 +a77552e4-413f-4a0b-a638-0ff99b9b411d,2,zone_2,,,,2,2,,,,0,15:00:00,15:30:00,,,,,1,1 +a77552e4-413f-4a0b-a638-0ff99b9b411d,3,7y7t,15:30:00,15:30:00,,,,,,,0,,,,,,,, +21f51e8c-43f7-44ea-9f6f-c145a3c58203,0,cujv,16:00:00,16:00:00,,,,,,,0,,,,,,,, +21f51e8c-43f7-44ea-9f6f-c145a3c58203,1,zone_2,,,,2,2,,,,0,16:00:00,16:30:00,,,,,1,1 +21f51e8c-43f7-44ea-9f6f-c145a3c58203,2,zone_2,,,,2,2,,,,0,16:00:00,16:30:00,,,,,1,1 +21f51e8c-43f7-44ea-9f6f-c145a3c58203,3,7y7t,16:30:00,16:30:00,,,,,,,0,,,,,,,, +1cd920d7-e402-4e99-960c-06caaeea60b5,0,cujv,17:00:00,17:00:00,,,,,,,0,,,,,,,, +1cd920d7-e402-4e99-960c-06caaeea60b5,1,zone_2,,,,2,2,,,,0,17:00:00,17:30:00,,,,,1,1 +1cd920d7-e402-4e99-960c-06caaeea60b5,2,zone_2,,,,2,2,,,,0,17:00:00,17:30:00,,,,,1,1 +1cd920d7-e402-4e99-960c-06caaeea60b5,3,7y7t,17:30:00,17:30:00,,,,,,,0,,,,,,,, +194001c3-3e55-45b1-a8ff-3fde406bc3f1,0,cujv,18:00:00,18:00:00,,,,,,,0,,,,,,,, +194001c3-3e55-45b1-a8ff-3fde406bc3f1,1,zone_2,,,,2,2,,,,0,18:00:00,18:30:00,,,,,1,1 +194001c3-3e55-45b1-a8ff-3fde406bc3f1,2,zone_2,,,,2,2,,,,0,18:00:00,18:30:00,,,,,1,1 +194001c3-3e55-45b1-a8ff-3fde406bc3f1,3,7y7t,18:30:00,18:30:00,,,,,,,0,,,,,,,, +53f5d74e-6ee1-4cb9-a0f7-dc9ec3007ee0,0,cujv,7:00:00,7:00:00,,,,,,,0,,,,,,,, +53f5d74e-6ee1-4cb9-a0f7-dc9ec3007ee0,1,zone_3,,,,2,2,,,,0,7:00:00,7:30:00,,,,,1,1 +53f5d74e-6ee1-4cb9-a0f7-dc9ec3007ee0,2,zone_3,,,,2,2,,,,0,7:00:00,7:30:00,,,,,1,1 +53f5d74e-6ee1-4cb9-a0f7-dc9ec3007ee0,3,urnz,7:30:00,7:30:00,,,,,,,0,,,,,,,, +a326c618-d42c-4bd1-9624-c314fbf8ecd8,0,cujv,8:00:00,8:00:00,,,,,,,0,,,,,,,, +a326c618-d42c-4bd1-9624-c314fbf8ecd8,1,zone_3,,,,2,2,,,,0,8:00:00,8:30:00,,,,,1,1 +a326c618-d42c-4bd1-9624-c314fbf8ecd8,2,zone_3,,,,2,2,,,,0,8:00:00,8:30:00,,,,,1,1 +a326c618-d42c-4bd1-9624-c314fbf8ecd8,3,urnz,8:30:00,8:30:00,,,,,,,0,,,,,,,, +5e1d5f1c-6d00-49a6-bcb4-102e23473ef1,0,cujv,9:00:00,9:00:00,,,,,,,0,,,,,,,, +5e1d5f1c-6d00-49a6-bcb4-102e23473ef1,1,zone_3,,,,2,2,,,,0,9:00:00,9:30:00,,,,,1,1 +5e1d5f1c-6d00-49a6-bcb4-102e23473ef1,2,zone_3,,,,2,2,,,,0,9:00:00,9:30:00,,,,,1,1 +5e1d5f1c-6d00-49a6-bcb4-102e23473ef1,3,urnz,9:30:00,9:30:00,,,,,,,0,,,,,,,, +73c4a35b-7d18-424a-af12-9e5cb4020a82,0,cujv,10:00:00,10:00:00,,,,,,,0,,,,,,,, +73c4a35b-7d18-424a-af12-9e5cb4020a82,1,zone_3,,,,2,2,,,,0,10:00:00,10:30:00,,,,,1,1 +73c4a35b-7d18-424a-af12-9e5cb4020a82,2,zone_3,,,,2,2,,,,0,10:00:00,10:30:00,,,,,1,1 +73c4a35b-7d18-424a-af12-9e5cb4020a82,3,urnz,10:30:00,10:30:00,,,,,,,0,,,,,,,, +8327b802-1c0f-4a0f-99dd-57e2e5a5f9c5,0,cujv,11:00:00,11:00:00,,,,,,,0,,,,,,,, +8327b802-1c0f-4a0f-99dd-57e2e5a5f9c5,1,zone_3,,,,2,2,,,,0,11:00:00,11:30:00,,,,,1,1 +8327b802-1c0f-4a0f-99dd-57e2e5a5f9c5,2,zone_3,,,,2,2,,,,0,11:00:00,11:30:00,,,,,1,1 +8327b802-1c0f-4a0f-99dd-57e2e5a5f9c5,3,urnz,11:30:00,11:30:00,,,,,,,0,,,,,,,, +d8a01791-b8e2-4677-bc70-b4750a6d038a,0,cujv,12:00:00,12:00:00,,,,,,,0,,,,,,,, +d8a01791-b8e2-4677-bc70-b4750a6d038a,1,zone_3,,,,2,2,,,,0,12:00:00,12:30:00,,,,,1,1 +d8a01791-b8e2-4677-bc70-b4750a6d038a,2,zone_3,,,,2,2,,,,0,12:00:00,12:30:00,,,,,1,1 +d8a01791-b8e2-4677-bc70-b4750a6d038a,3,urnz,12:30:00,12:30:00,,,,,,,0,,,,,,,, +f53a1465-6030-4885-9f05-243867071272,0,cujv,13:00:00,13:00:00,,,,,,,0,,,,,,,, +f53a1465-6030-4885-9f05-243867071272,1,zone_3,,,,2,2,,,,0,13:00:00,13:30:00,,,,,1,1 +f53a1465-6030-4885-9f05-243867071272,2,zone_3,,,,2,2,,,,0,13:00:00,13:30:00,,,,,1,1 +f53a1465-6030-4885-9f05-243867071272,3,urnz,13:30:00,13:30:00,,,,,,,0,,,,,,,, +86e55114-94ea-4716-bbe4-7382452e83a4,0,cujv,14:00:00,14:00:00,,,,,,,0,,,,,,,, +86e55114-94ea-4716-bbe4-7382452e83a4,1,zone_3,,,,2,2,,,,0,14:00:00,14:30:00,,,,,1,1 +86e55114-94ea-4716-bbe4-7382452e83a4,2,zone_3,,,,2,2,,,,0,14:00:00,14:30:00,,,,,1,1 +86e55114-94ea-4716-bbe4-7382452e83a4,3,urnz,14:30:00,14:30:00,,,,,,,0,,,,,,,, +ef126e29-8527-407d-b3fe-b363bca9ab57,0,cujv,16:00:00,16:00:00,,,,,,,0,,,,,,,, +ef126e29-8527-407d-b3fe-b363bca9ab57,1,zone_3,,,,2,2,,,,0,16:00:00,16:30:00,,,,,1,1 +ef126e29-8527-407d-b3fe-b363bca9ab57,2,zone_3,,,,2,2,,,,0,16:00:00,16:30:00,,,,,1,1 +ef126e29-8527-407d-b3fe-b363bca9ab57,3,urnz,16:30:00,16:30:00,,,,,,,0,,,,,,,, +c11bfab9-25b8-4390-8df4-424505cbda8f,0,cujv,17:00:00,17:00:00,,,,,,,0,,,,,,,, +c11bfab9-25b8-4390-8df4-424505cbda8f,1,zone_3,,,,2,2,,,,0,17:00:00,17:30:00,,,,,1,1 +c11bfab9-25b8-4390-8df4-424505cbda8f,2,zone_3,,,,2,2,,,,0,17:00:00,17:30:00,,,,,1,1 +c11bfab9-25b8-4390-8df4-424505cbda8f,3,urnz,17:30:00,17:30:00,,,,,,,0,,,,,,,, +e5dc18ca-b8fb-49a4-8902-b13b87f738b7,0,cujv,15:00:00,15:00:00,,,,,,,0,,,,,,,, +e5dc18ca-b8fb-49a4-8902-b13b87f738b7,1,zone_3,,,,2,2,,,,0,15:00:00,15:30:00,,,,,1,1 +e5dc18ca-b8fb-49a4-8902-b13b87f738b7,2,zone_3,,,,2,2,,,,0,15:00:00,15:30:00,,,,,1,1 +e5dc18ca-b8fb-49a4-8902-b13b87f738b7,3,urnz,15:30:00,15:30:00,,,,,,,0,,,,,,,, +9fdd99ae-e7df-4439-ab9c-b91f863a6eb8,0,cujv,18:00:00,18:00:00,,,,,,,0,,,,,,,, +9fdd99ae-e7df-4439-ab9c-b91f863a6eb8,1,zone_3,,,,2,2,,,,0,18:00:00,18:30:00,,,,,1,1 +9fdd99ae-e7df-4439-ab9c-b91f863a6eb8,2,zone_3,,,,2,2,,,,0,18:00:00,18:30:00,,,,,1,1 +9fdd99ae-e7df-4439-ab9c-b91f863a6eb8,3,urnz,18:30:00,18:30:00,,,,,,,0,,,,,,,, +4c890d38-1b3a-44ca-9800-106abbdc2d7f,0,urnz,7:30:00,7:30:00,,,,,,,0,,,,,,,, +4c890d38-1b3a-44ca-9800-106abbdc2d7f,1,zone_3,,,,2,2,,,,0,7:30:00,8:00:00,,,,,1,1 +4c890d38-1b3a-44ca-9800-106abbdc2d7f,2,zone_3,,,,2,2,,,,0,7:30:00,8:00:00,,,,,1,1 +4c890d38-1b3a-44ca-9800-106abbdc2d7f,3,cujv,8:00:00,8:00:00,,,,,,,0,,,,,,,, +099936e9-ebc8-48b4-b658-a4d6ca172360,0,urnz,8:30:00,8:30:00,,,,,,,0,,,,,,,, +099936e9-ebc8-48b4-b658-a4d6ca172360,1,zone_3,,,,2,2,,,,0,8:30:00,9:00:00,,,,,1,1 +099936e9-ebc8-48b4-b658-a4d6ca172360,2,zone_3,,,,2,2,,,,0,8:30:00,9:00:00,,,,,1,1 +099936e9-ebc8-48b4-b658-a4d6ca172360,3,cujv,9:00:00,9:00:00,,,,,,,0,,,,,,,, +5f6f34cc-01c8-4f9d-a232-91072eecb085,0,urnz,11:30:00,11:30:00,,,,,,,0,,,,,,,, +5f6f34cc-01c8-4f9d-a232-91072eecb085,1,zone_3,,,,2,2,,,,0,11:30:00,12:00:00,,,,,1,1 +5f6f34cc-01c8-4f9d-a232-91072eecb085,2,zone_3,,,,2,2,,,,0,11:30:00,12:00:00,,,,,1,1 +5f6f34cc-01c8-4f9d-a232-91072eecb085,3,cujv,12:00:00,12:00:00,,,,,,,0,,,,,,,, +15122227-203e-4652-b84d-e7f6879cd93e,0,urnz,12:30:00,12:30:00,,,,,,,0,,,,,,,, +15122227-203e-4652-b84d-e7f6879cd93e,1,zone_3,,,,2,2,,,,0,12:30:00,13:00:00,,,,,1,1 +15122227-203e-4652-b84d-e7f6879cd93e,2,zone_3,,,,2,2,,,,0,12:30:00,13:00:00,,,,,1,1 +15122227-203e-4652-b84d-e7f6879cd93e,3,cujv,13:00:00,13:00:00,,,,,,,0,,,,,,,, +a562a0b1-38e5-403d-8a3c-1dab58aeac80,0,urnz,9:30:00,9:30:00,,,,,,,0,,,,,,,, +a562a0b1-38e5-403d-8a3c-1dab58aeac80,1,zone_3,,,,2,2,,,,0,9:30:00,10:00:00,,,,,1,1 +a562a0b1-38e5-403d-8a3c-1dab58aeac80,2,zone_3,,,,2,2,,,,0,9:30:00,10:00:00,,,,,1,1 +a562a0b1-38e5-403d-8a3c-1dab58aeac80,3,cujv,10:00:00,10:00:00,,,,,,,0,,,,,,,, +8823f7f0-a737-49fd-94ab-7e52cb6d1bc6,0,urnz,10:30:00,10:30:00,,,,,,,0,,,,,,,, +8823f7f0-a737-49fd-94ab-7e52cb6d1bc6,1,zone_3,,,,2,2,,,,0,10:30:00,11:00:00,,,,,1,1 +8823f7f0-a737-49fd-94ab-7e52cb6d1bc6,2,zone_3,,,,2,2,,,,0,10:30:00,11:00:00,,,,,1,1 +8823f7f0-a737-49fd-94ab-7e52cb6d1bc6,3,cujv,11:00:00,11:00:00,,,,,,,0,,,,,,,, +9657b71d-dd67-4018-adfa-50a39e6c8d96,0,urnz,13:30:00,13:30:00,,,,,,,0,,,,,,,, +9657b71d-dd67-4018-adfa-50a39e6c8d96,1,zone_3,,,,2,2,,,,0,13:30:00,14:00:00,,,,,1,1 +9657b71d-dd67-4018-adfa-50a39e6c8d96,2,zone_3,,,,2,2,,,,0,13:30:00,14:00:00,,,,,1,1 +9657b71d-dd67-4018-adfa-50a39e6c8d96,3,cujv,14:00:00,14:00:00,,,,,,,0,,,,,,,, +9b814859-a7a2-499e-9132-12439865c2e3,0,urnz,14:30:00,14:30:00,,,,,,,0,,,,,,,, +9b814859-a7a2-499e-9132-12439865c2e3,1,zone_3,,,,2,2,,,,0,14:30:00,15:00:00,,,,,1,1 +9b814859-a7a2-499e-9132-12439865c2e3,2,zone_3,,,,2,2,,,,0,14:30:00,15:00:00,,,,,1,1 +9b814859-a7a2-499e-9132-12439865c2e3,3,cujv,15:00:00,15:00:00,,,,,,,0,,,,,,,, +ae72c875-e838-4be5-a610-7fd1d204c96a,0,urnz,15:30:00,15:30:00,,,,,,,0,,,,,,,, +ae72c875-e838-4be5-a610-7fd1d204c96a,1,zone_3,,,,2,2,,,,0,15:30:00,16:00:00,,,,,1,1 +ae72c875-e838-4be5-a610-7fd1d204c96a,2,zone_3,,,,2,2,,,,0,15:30:00,16:00:00,,,,,1,1 +ae72c875-e838-4be5-a610-7fd1d204c96a,3,cujv,16:00:00,16:00:00,,,,,,,0,,,,,,,, +4fb5949c-0916-4c3d-9210-0887d632baf1,0,urnz,16:30:00,16:30:00,,,,,,,0,,,,,,,, +4fb5949c-0916-4c3d-9210-0887d632baf1,1,zone_3,,,,2,2,,,,0,16:30:00,17:00:00,,,,,1,1 +4fb5949c-0916-4c3d-9210-0887d632baf1,2,zone_3,,,,2,2,,,,0,16:30:00,17:00:00,,,,,1,1 +4fb5949c-0916-4c3d-9210-0887d632baf1,3,cujv,17:00:00,17:00:00,,,,,,,0,,,,,,,, +04c8b180-b8ec-4786-ae01-b7a15eeaeb90,0,urnz,17:30:00,17:30:00,,,,,,,0,,,,,,,, +04c8b180-b8ec-4786-ae01-b7a15eeaeb90,1,zone_3,,,,2,2,,,,0,17:30:00,18:00:00,,,,,1,1 +04c8b180-b8ec-4786-ae01-b7a15eeaeb90,2,zone_3,,,,2,2,,,,0,17:30:00,18:00:00,,,,,1,1 +04c8b180-b8ec-4786-ae01-b7a15eeaeb90,3,cujv,18:00:00,18:00:00,,,,,,,0,,,,,,,, +a92ebee3-8f29-49f0-bb57-f1c1662172f0,0,urnz,18:30:00,18:30:00,,,,,,,0,,,,,,,, +a92ebee3-8f29-49f0-bb57-f1c1662172f0,1,zone_3,,,,2,2,,,,0,18:30:00,19:00:00,,,,,1,1 +a92ebee3-8f29-49f0-bb57-f1c1662172f0,2,zone_3,,,,2,2,,,,0,18:30:00,19:00:00,,,,,1,1 +a92ebee3-8f29-49f0-bb57-f1c1662172f0,3,cujv,19:00:00,19:00:00,,,,,,,0,,,,,,,, diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/cobblinc-scheduled-deviated-flex.gtfs/stops.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/cobblinc-scheduled-deviated-flex.gtfs/stops.txt new file mode 100644 index 00000000000..0e1854c2e4c --- /dev/null +++ b/src/ext-test/resources/org/opentripplanner/ext/flex/cobblinc-scheduled-deviated-flex.gtfs/stops.txt @@ -0,0 +1,5 @@ +stop_id,stop_code,stop_name,stop_desc,stop_lat,stop_lon,zone_id,stop_url,location_type,parent_station,stop_timezone,wheelchair_boarding,platform_code +cujv,,Transfer Point for Route 30,,33.854650,-84.600390,Z4,,,,,, +yz85,,Zone 1 - PUBLIX Super Market,Zone 1 Collection Point,33.864460,-84.674200,Z1,,,,,, +7y7t,,Zone 2 - Horseshoe Bend Plaza,Zone 2 Collection Point,33.883320,-84.620270,Z2,,,,,, +urnz,,Zone 3 - Downtown Austell,Zone 3 Collection Point,33.812190,-84.634500,Z3,,,,,, diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/cobblinc-scheduled-deviated-flex.gtfs/trips.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/cobblinc-scheduled-deviated-flex.gtfs/trips.txt new file mode 100644 index 00000000000..8888cd8f6c6 --- /dev/null +++ b/src/ext-test/resources/org/opentripplanner/ext/flex/cobblinc-scheduled-deviated-flex.gtfs/trips.txt @@ -0,0 +1,73 @@ +trip_id,route_id,service_id,trip_headsign,trip_short_name,direction_id,block_id,shape_id,wheelchair_accessible,bikes_allowed +4d838cf4-d44d-4e08-a364-f22c34a8c89e,090z,1,,,1,,1603,, +48071338-a326-4da6-aca6-b1e0de935e5e,090z,1,,,1,,1603,, +3a4c1a1e-bbfd-46cc-8b2c-f68c7b0dca7c,090z,1,,,1,,1603,, +55db7288-4c30-47ba-b766-16a09b1d5020,090z,1,,,1,,1603,, +3570424a-a8ae-4a7c-8137-c6f6245ddfca,090z,1,,,1,,1603,, +d0cc6a8d-78c6-496a-aa3e-66c0829930f1,090z,1,,,1,,1603,, +50dfb2c0-d8ba-4dc6-a104-a3cc058feae9,090z,1,,,1,,1603,, +1d32fa36-c9db-4ca2-a26b-574935e99081,090z,1,,,1,,1603,, +273d01f4-1adb-4c9d-9fef-54c861fd15d0,090z,1,,,1,,1603,, +a642849a-c0e1-4308-b6c4-0ad12c56744c,090z,1,,,1,,1603,, +adef9bc9-98ee-4ae1-99a9-5b55bb01bf52,090z,1,,,1,,1603,, +a62fe28a-b95b-4f37-b72c-db27af73e6fe,090z,1,,,1,,1603,, +b43131c7-63c2-4127-a837-6987dcc428ae,090z,1,,,0,,cizy,, +5ad42b7b-30df-47ad-8264-b9c1119d954a,090z,1,,,0,,cizy,, +0ef63de2-f001-423e-b2c8-cb362db810dc,090z,1,,,0,,cizy,, +580c504a-d9e8-446f-8a79-efedbeda8dab,090z,1,,,0,,cizy,, +54c6c881-ec67-4a66-bd9f-3b61c83b326b,090z,1,,,0,,cizy,, +ac07359f-3afa-4de6-a076-d746cbc83ded,090z,1,,,0,,cizy,, +89367b3a-da78-4420-b497-01aa9017068d,090z,1,,,0,,cizy,, +c8bd2ce1-eff7-4504-8fd7-2416de4d9413,090z,1,,,0,,cizy,, +202bd60a-a979-4bba-86b0-d0b1e870bdfc,090z,1,,,0,,cizy,, +6cd8ea48-276d-45d7-852c-167a8f2b13fa,090z,1,,,0,,cizy,, +19290d0c-323c-499b-aa37-65cb80505d6b,090z,1,,,0,,cizy,, +f665bd4d-6f7a-4fbf-97ba-e602c17620c2,090z,1,,,0,,cizy,, +9d80fb21-203f-4e0f-b79c-5d584ebe4ffd,aamr,1,,,1,,5mw2,, +679e1454-ae4b-4c5d-a594-78c30b76843e,aamr,1,,,1,,5mw2,, +dcb9e29e-9e7a-4b65-ae2a-8c9efa816dec,aamr,1,,,1,,5mw2,, +d2a823f2-798b-476a-a222-555711ae36f9,aamr,1,,,1,,5mw2,, +c4f27c33-48bb-479e-b5de-454b4eb35cdd,aamr,1,,,1,,5mw2,, +ef307aa7-77da-4d0b-997f-b48493f21329,aamr,1,,,1,,5mw2,, +792effa3-a3a4-4cde-9246-3e70474643a1,aamr,1,,,1,,5mw2,, +ef5a5ad2-1db7-4005-96e6-bffbcdb50ff2,aamr,1,,,1,,5mw2,, +f2e5cf8d-290b-4da3-bc9d-b1d7ead3d6c6,aamr,1,,,1,,5mw2,, +c9fbc38d-4f91-46dc-bfd3-4a0460da2974,aamr,1,,,1,,5mw2,, +06671d42-4558-42fb-ad0f-00680b157ab7,aamr,1,,,1,,5mw2,, +b86afa6f-467e-4c46-8a09-5916d1cf9733,aamr,1,,,1,,5mw2,, +fe470cdb-09e4-42f9-b182-e14ddb13c15e,aamr,1,,,0,,wm2h,, +d5774d48-8a06-46e0-9469-c2f881155dd6,aamr,1,,,0,,wm2h,, +6edc3666-eee7-45fa-95d5-2d10e4923870,aamr,1,,,0,,wm2h,, +e6a21333-9744-44d5-a926-cd92f24b1f5c,aamr,1,,,0,,wm2h,, +2e1be2a2-a953-4ae9-9d44-f1f93b0a9801,aamr,1,,,0,,wm2h,, +e2c9bd09-af14-4e82-b6a2-ae1508e85458,aamr,1,,,0,,wm2h,, +064d8fdf-7616-4ff1-b6eb-2a1f961dffd5,aamr,1,,,0,,wm2h,, +6e9dcf78-99fe-44d5-9d1b-8f5f35bc814c,aamr,1,,,0,,wm2h,, +a77552e4-413f-4a0b-a638-0ff99b9b411d,aamr,1,,,0,,wm2h,, +21f51e8c-43f7-44ea-9f6f-c145a3c58203,aamr,1,,,0,,wm2h,, +1cd920d7-e402-4e99-960c-06caaeea60b5,aamr,1,,,0,,wm2h,, +194001c3-3e55-45b1-a8ff-3fde406bc3f1,aamr,1,,,0,,wm2h,, +53f5d74e-6ee1-4cb9-a0f7-dc9ec3007ee0,po0p,1,,,0,,swh2,, +a326c618-d42c-4bd1-9624-c314fbf8ecd8,po0p,1,,,0,,swh2,, +5e1d5f1c-6d00-49a6-bcb4-102e23473ef1,po0p,1,,,0,,swh2,, +73c4a35b-7d18-424a-af12-9e5cb4020a82,po0p,1,,,0,,swh2,, +8327b802-1c0f-4a0f-99dd-57e2e5a5f9c5,po0p,1,,,0,,swh2,, +d8a01791-b8e2-4677-bc70-b4750a6d038a,po0p,1,,,0,,swh2,, +f53a1465-6030-4885-9f05-243867071272,po0p,1,,,0,,swh2,, +86e55114-94ea-4716-bbe4-7382452e83a4,po0p,1,,,0,,swh2,, +ef126e29-8527-407d-b3fe-b363bca9ab57,po0p,1,,,0,,swh2,, +c11bfab9-25b8-4390-8df4-424505cbda8f,po0p,1,,,0,,swh2,, +e5dc18ca-b8fb-49a4-8902-b13b87f738b7,po0p,1,,,0,,swh2,, +9fdd99ae-e7df-4439-ab9c-b91f863a6eb8,po0p,1,,,0,,swh2,, +4c890d38-1b3a-44ca-9800-106abbdc2d7f,po0p,1,,,1,,fj8w,, +099936e9-ebc8-48b4-b658-a4d6ca172360,po0p,1,,,1,,fj8w,, +5f6f34cc-01c8-4f9d-a232-91072eecb085,po0p,1,,,1,,fj8w,, +15122227-203e-4652-b84d-e7f6879cd93e,po0p,1,,,1,,fj8w,, +a562a0b1-38e5-403d-8a3c-1dab58aeac80,po0p,1,,,1,,fj8w,, +8823f7f0-a737-49fd-94ab-7e52cb6d1bc6,po0p,1,,,1,,fj8w,, +9657b71d-dd67-4018-adfa-50a39e6c8d96,po0p,1,,,1,,fj8w,, +9b814859-a7a2-499e-9132-12439865c2e3,po0p,1,,,1,,fj8w,, +ae72c875-e838-4be5-a610-7fd1d204c96a,po0p,1,,,1,,fj8w,, +4fb5949c-0916-4c3d-9210-0887d632baf1,po0p,1,,,1,,fj8w,, +04c8b180-b8ec-4786-ae01-b7a15eeaeb90,po0p,1,,,1,,fj8w,, +a92ebee3-8f29-49f0-bb57-f1c1662172f0,po0p,1,,,1,,fj8w,, diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs.zip b/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs.zip deleted file mode 100644 index f63a0bf736a..00000000000 Binary files a/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs.zip and /dev/null differ diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/agency.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/agency.txt new file mode 100644 index 00000000000..21af34a258c --- /dev/null +++ b/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/agency.txt @@ -0,0 +1,2 @@ +agency_id,agency_url,agency_lang,agency_name,agency_phone,agency_timezone,agency_fare_url +89,http://www.co.lincoln.or.us/transit/,en,Lincoln County Transit,541-265-4900,America/Los_Angeles,http://www.co.lincoln.or.us/transit/page/fare-schedule diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/areas.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/areas.txt new file mode 100644 index 00000000000..cac45c7d043 --- /dev/null +++ b/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/areas.txt @@ -0,0 +1 @@ +area_id,wkt diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/booking_rules.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/booking_rules.txt new file mode 100644 index 00000000000..43369cdba8d --- /dev/null +++ b/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/booking_rules.txt @@ -0,0 +1,7 @@ +booking_rule_id,booking_type,prior_notice_duration_min,prior_notice_duration_max,prior_notice_start_day,prior_notice_start_time,prior_notice_last_day,prior_notice_last_time,prior_notice_service_id,message,pickup_message,drop_off_message,phone_number,info_url,booking_url +booking_route_13317,2,24:00:00,,,,,,,,Lincoln County Transit's Dial-A-Ride is a “curb to curb” accessible transit service available to everyone. Call (541) 265-4900 at least one day in advance to request your ride.,Lincoln County Transit's Dial-A-Ride is a “curb to curb” accessible transit service available to everyone. Call (541) 265-4900 at least one day in advance to request your ride.,,, +booking_route_491,1,00:30:00,,,,,,,,Newport City Loop allows deviated service pickups that are scheduled at least 30 minutes in advance and do not deviate more than 3/4 mile off the scheduled route to retain normal schedule. Please call (541) 265-4900 to schedule a deviated pickup.,Newport City Loop allows deviated service drop offs that are scheduled at least 30 minutes in advance and do not deviate more than 3/4 mile off the scheduled route to retain normal schedule. Please call (541) 265-4900 to schedule a deviated drop off.,,, +booking_route_492,1,00:30:00,,,,,,,,Lincoln City Loop allows deviated service pickups that are scheduled at least 30 minutes in advance and do not deviate more than 3/4 mile off the scheduled route to retain normal schedule. Please call (541) 265-4900 to schedule a deviated pickup.,Lincoln City Loop allows deviated service drop offs that are scheduled at least 30 minutes in advance and do not deviate more than 3/4 mile off the scheduled route to retain normal schedule. Please call (541) 265-4900 to schedule a deviated drop off.,,, +booking_route_493,1,00:30:00,,,,,,,,East County allows deviated service pickups that are scheduled at least 30 minutes in advance and do not deviate more than 3/4 mile off the scheduled route to retain normal schedule. Please call (541) 265-4900 to schedule a deviated pickup.,East County allows deviated service drop offs that are scheduled at least 30 minutes in advance and do not deviate more than 3/4 mile off the scheduled route to retain normal schedule. Please call (541) 265-4900 to schedule a deviated drop off.,,, +booking_route_495,1,00:30:00,,,,,,,,North County allows deviated service pickups that are scheduled at least 30 minutes in advance and do not deviate more than 3/4 mile off the scheduled route to retain normal schedule. Please call (541) 265-4900 to schedule a deviated pickup.,North County allows deviated service drop offs that are scheduled at least 30 minutes in advance and do not deviate more than 3/4 mile off the scheduled route to retain normal schedule. Please call (541) 265-4900 to schedule a deviated drop off.,,, +booking_route_497,1,00:30:00,,,,,,,,South County allows deviated service pickups that are scheduled at least 30 minutes in advance and do not deviate more than 3/4 mile off the scheduled route to retain normal schedule. Please call (541) 265-4900 to schedule a deviated pickup.,South County allows deviated service drop offs that are scheduled at least 30 minutes in advance and do not deviate more than 3/4 mile off the scheduled route to retain normal schedule. Please call (541) 265-4900 to schedule a deviated drop off.,,, diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/calendar.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/calendar.txt new file mode 100644 index 00000000000..a60858e8722 --- /dev/null +++ b/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/calendar.txt @@ -0,0 +1,4 @@ +service_id,service_name,monday,tuesday,wednesday,thursday,friday,saturday,sunday,start_date,end_date +c_15353_b_26748_d_63,Year Round (No Sunday),1,1,1,1,1,1,0,20200607,20220101 +c_15353_b_26748_d_31,Year Round (Weekday),1,1,1,1,1,0,0,20200607,20220101 +c_15353_b_26748_d_127,Year Round (All days of week),1,1,1,1,1,1,1,20200607,20220101 diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/calendar_attributes.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/calendar_attributes.txt new file mode 100644 index 00000000000..4d5c9e1804a --- /dev/null +++ b/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/calendar_attributes.txt @@ -0,0 +1,4 @@ +service_id,service_description +c_15353_b_26748_d_63,Year Round (No Sunday) +c_15353_b_26748_d_31,Year Round (Weekday) +c_15353_b_26748_d_127,Year Round (All days of week) diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/calendar_dates.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/calendar_dates.txt new file mode 100644 index 00000000000..9f5444a98e0 --- /dev/null +++ b/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/calendar_dates.txt @@ -0,0 +1,14 @@ +service_id,date,holiday_name,exception_type +c_15353_b_26748_d_63,20220101,New Year's Day,2 +c_15353_b_26748_d_63,20211225,Christmas Day,2 +c_15353_b_26748_d_63,20211125,Thanksgiving Day,2 +c_15353_b_26748_d_63,20210101,New Year's Day,2 +c_15353_b_26748_d_63,20201225,Christmas Day,2 +c_15353_b_26748_d_31,20211125,Thanksgiving Day,2 +c_15353_b_26748_d_31,20210101,New Year's Day,2 +c_15353_b_26748_d_31,20201225,Christmas Day,2 +c_15353_b_26748_d_127,20220101,New Year's Day,2 +c_15353_b_26748_d_127,20211225,Christmas Day,2 +c_15353_b_26748_d_127,20211125,Thanksgiving Day,2 +c_15353_b_26748_d_127,20210101,New Year's Day,2 +c_15353_b_26748_d_127,20201225,Christmas Day,2 diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/directions.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/directions.txt new file mode 100644 index 00000000000..141511296b4 --- /dev/null +++ b/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/directions.txt @@ -0,0 +1,11 @@ +route_id,direction_id,direction +491,0,No direction +492,0,Northbound +492,1,Southbound +493,0,Westbound +493,1,Eastbound +495,0,Northbound +495,1,Southbound +497,0,Northbound +497,1,Southbound +13317,0,No direction diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/feed_info.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/feed_info.txt new file mode 100644 index 00000000000..036a20fbb91 --- /dev/null +++ b/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/feed_info.txt @@ -0,0 +1,2 @@ +feed_publisher_url,feed_publisher_name,feed_lang,feed_version,feed_license,feed_contact_email,feed_contact_url,feed_start_date,feed_end_date,feed_id +http://www.trilliumtransit.com,"Trillium Solutions, Inc.",en,UTC: 22-Dec-2020 22:38,,support+test+lincolncounty-or-us@trilliumtransit.com,http://support.trilliumtransit.com,20201222,20220101,lincolncounty-or-us diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/locations.geojson b/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/locations.geojson new file mode 100644 index 00000000000..5530bd15ffc --- /dev/null +++ b/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/locations.geojson @@ -0,0 +1,93139 @@ +{ + "type": "FeatureCollection", + "features": [ + { + "id": "area_271", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0269929, + 44.6327988 + ], + [ + -124.027794, + 44.6327786 + ], + [ + -124.0277106, + 44.6311308 + ], + [ + -124.0268959, + 44.6311389 + ], + [ + -124.0269929, + 44.6327988 + ], + [ + -124.024068, + 44.6328757 + ], + [ + -124.0241089, + 44.6334103 + ], + [ + -124.0237571, + 44.6334298 + ], + [ + -124.0236022, + 44.633649 + ], + [ + -124.0235327, + 44.6328955 + ], + [ + -124.0221969, + 44.6329293 + ], + [ + -124.0222013, + 44.6336919 + ], + [ + -124.0215448, + 44.633856 + ], + [ + -124.0208617, + 44.6340437 + ], + [ + -124.020617, + 44.6340929 + ], + [ + -124.0203916, + 44.6341172 + ], + [ + -124.0201635, + 44.6341321 + ], + [ + -124.0199219, + 44.6341367 + ], + [ + -124.0197633, + 44.6341362 + ], + [ + -124.0196546, + 44.6341268 + ], + [ + -124.0196749, + 44.6339464 + ], + [ + -124.0192138, + 44.6339536 + ], + [ + -124.0191906, + 44.6339039 + ], + [ + -124.01918, + 44.6338844 + ], + [ + -124.0191597, + 44.6338544 + ], + [ + -124.0191363, + 44.6338295 + ], + [ + -124.0191129, + 44.6338105 + ], + [ + -124.0190998, + 44.6338017 + ], + [ + -124.019082, + 44.6337913 + ], + [ + -124.0190656, + 44.6337828 + ], + [ + -124.0190514, + 44.6337764 + ], + [ + -124.0190373, + 44.6337707 + ], + [ + -124.019024, + 44.6337658 + ], + [ + -124.0189643, + 44.6337447 + ], + [ + -124.0188263, + 44.6336892 + ], + [ + -124.0187485, + 44.6336601 + ], + [ + -124.0186902, + 44.6336187 + ], + [ + -124.018678, + 44.6335858 + ], + [ + -124.0186435, + 44.6334335 + ], + [ + -124.018641, + 44.6334185 + ], + [ + -124.0186395, + 44.6334077 + ], + [ + -124.0186363, + 44.6333554 + ], + [ + -124.0186453, + 44.6331262 + ], + [ + -124.0186603, + 44.6330391 + ], + [ + -124.0186618, + 44.6330199 + ], + [ + -124.0186632, + 44.6329217 + ], + [ + -124.0186825, + 44.632819 + ], + [ + -124.0186874, + 44.6327572 + ], + [ + -124.018685, + 44.6327279 + ], + [ + -124.0186438, + 44.6326013 + ], + [ + -124.0186334, + 44.6325672 + ], + [ + -124.0194447, + 44.6324527 + ], + [ + -124.0193717, + 44.6325982 + ], + [ + -124.0202495, + 44.6325828 + ], + [ + -124.0202947, + 44.6331294 + ], + [ + -124.0211169, + 44.6331041 + ], + [ + -124.0213096, + 44.6325633 + ], + [ + -124.0212887, + 44.6321591 + ], + [ + -124.0210921, + 44.6316437 + ], + [ + -124.020963, + 44.6314776 + ], + [ + -124.0208095, + 44.6313452 + ], + [ + -124.0206373, + 44.6312324 + ], + [ + -124.0203394, + 44.6311451 + ], + [ + -124.0203054, + 44.6315401 + ], + [ + -124.0201846, + 44.6315844 + ], + [ + -124.0193062, + 44.6314385 + ], + [ + -124.0194084, + 44.6320106 + ], + [ + -124.0187452, + 44.6317468 + ], + [ + -124.0188009, + 44.6317258 + ], + [ + -124.0188313, + 44.6317083 + ], + [ + -124.0188708, + 44.6316744 + ], + [ + -124.0189021, + 44.6316338 + ], + [ + -124.0189207, + 44.6315925 + ], + [ + -124.0189093, + 44.6314746 + ], + [ + -124.0188532, + 44.6313461 + ], + [ + -124.018805, + 44.6312558 + ], + [ + -124.0187443, + 44.6311227 + ], + [ + -124.0187328, + 44.6310641 + ], + [ + -124.0187194, + 44.6309961 + ], + [ + -124.0187151, + 44.6309176 + ], + [ + -124.01874, + 44.6308656 + ], + [ + -124.0188237, + 44.6307647 + ], + [ + -124.0189053, + 44.6306917 + ], + [ + -124.0190049, + 44.630646 + ], + [ + -124.0191298, + 44.6305913 + ], + [ + -124.0191939, + 44.6305615 + ], + [ + -124.0192531, + 44.6305247 + ], + [ + -124.0196607, + 44.6307533 + ], + [ + -124.0198394, + 44.6303829 + ], + [ + -124.0202117, + 44.6303457 + ], + [ + -124.0203068, + 44.6301086 + ], + [ + -124.0207851, + 44.6299569 + ], + [ + -124.0208023, + 44.6296833 + ], + [ + -124.0209365, + 44.6296809 + ], + [ + -124.0209255, + 44.6299546 + ], + [ + -124.0217663, + 44.6299354 + ], + [ + -124.0217709, + 44.6296539 + ], + [ + -124.0222225, + 44.6296401 + ], + [ + -124.0222103, + 44.6290281 + ], + [ + -124.0222203, + 44.6145375 + ], + [ + -124.0266336, + 44.6144827 + ], + [ + -124.0267072, + 44.6144877 + ], + [ + -124.0271157, + 44.6145043 + ], + [ + -124.0276094, + 44.6145243 + ], + [ + -124.0276518, + 44.6145258 + ], + [ + -124.0276942, + 44.6145268 + ], + [ + -124.0277792, + 44.6145284 + ], + [ + -124.0278254, + 44.6145284 + ], + [ + -124.0278717, + 44.614527 + ], + [ + -124.0279024, + 44.6145253 + ], + [ + -124.0279435, + 44.6145222 + ], + [ + -124.027998, + 44.6145167 + ], + [ + -124.0280292, + 44.6145129 + ], + [ + -124.0280647, + 44.6145081 + ], + [ + -124.0281048, + 44.6145018 + ], + [ + -124.0281446, + 44.6144943 + ], + [ + -124.0281707, + 44.6144885 + ], + [ + -124.0282049, + 44.6144797 + ], + [ + -124.0282241, + 44.6144741 + ], + [ + -124.0282455, + 44.6144671 + ], + [ + -124.0282694, + 44.6144582 + ], + [ + -124.0282958, + 44.614447 + ], + [ + -124.0283094, + 44.6144404 + ], + [ + -124.0285542, + 44.6143179 + ], + [ + -124.0288106, + 44.6141894 + ], + [ + -124.0288679, + 44.6141602 + ], + [ + -124.0289247, + 44.6141305 + ], + [ + -124.0290377, + 44.6140705 + ], + [ + -124.0291136, + 44.614031 + ], + [ + -124.0293646, + 44.613907 + ], + [ + -124.0296186, + 44.6137859 + ], + [ + -124.0298441, + 44.6136819 + ], + [ + -124.030073, + 44.6135819 + ], + [ + -124.0302271, + 44.613517 + ], + [ + -124.0304338, + 44.6134322 + ], + [ + -124.0304869, + 44.6134125 + ], + [ + -124.0305417, + 44.6133953 + ], + [ + -124.0305789, + 44.613385 + ], + [ + -124.0306293, + 44.6133722 + ], + [ + -124.030833, + 44.6133245 + ], + [ + -124.0308903, + 44.6133094 + ], + [ + -124.0309543, + 44.6132898 + ], + [ + -124.0309876, + 44.6132781 + ], + [ + -124.0310223, + 44.6132644 + ], + [ + -124.0310644, + 44.6132464 + ], + [ + -124.0311059, + 44.6132276 + ], + [ + -124.0311873, + 44.6131886 + ], + [ + -124.0312406, + 44.6131616 + ], + [ + -124.0313107, + 44.6131246 + ], + [ + -124.031403, + 44.613074 + ], + [ + -124.0314641, + 44.6130386 + ], + [ + -124.0315237, + 44.6130021 + ], + [ + -124.0316415, + 44.6129279 + ], + [ + -124.0317217, + 44.6128794 + ], + [ + -124.0317691, + 44.6128527 + ], + [ + -124.0318098, + 44.6128313 + ], + [ + -124.0318513, + 44.6128112 + ], + [ + -124.0318796, + 44.6127986 + ], + [ + -124.0319179, + 44.6127825 + ], + [ + -124.0319705, + 44.6127626 + ], + [ + -124.0320012, + 44.6127518 + ], + [ + -124.0320371, + 44.6127402 + ], + [ + -124.0320791, + 44.6127275 + ], + [ + -124.0321285, + 44.6127143 + ], + [ + -124.0321782, + 44.612703 + ], + [ + -124.0322116, + 44.6126965 + ], + [ + -124.0322562, + 44.6126889 + ], + [ + -124.032316, + 44.6126805 + ], + [ + -124.0323504, + 44.6126766 + ], + [ + -124.0323898, + 44.6126727 + ], + [ + -124.032435, + 44.6126691 + ], + [ + -124.0326973, + 44.6126709 + ], + [ + -124.0327366, + 44.612668 + ], + [ + -124.0327759, + 44.6126646 + ], + [ + -124.032802, + 44.6126616 + ], + [ + -124.0328365, + 44.6126567 + ], + [ + -124.0328561, + 44.6126532 + ], + [ + -124.0328782, + 44.6126485 + ], + [ + -124.0329031, + 44.6126421 + ], + [ + -124.0329162, + 44.6126382 + ], + [ + -124.03293, + 44.6126336 + ], + [ + -124.0329446, + 44.6126281 + ], + [ + -124.0329686, + 44.6126185 + ], + [ + -124.0329921, + 44.6126087 + ], + [ + -124.0330378, + 44.6125885 + ], + [ + -124.0330674, + 44.6125748 + ], + [ + -124.0331065, + 44.6125561 + ], + [ + -124.0331582, + 44.6125304 + ], + [ + -124.0333918, + 44.6124128 + ], + [ + -124.0335832, + 44.6123149 + ], + [ + -124.033648, + 44.6122822 + ], + [ + -124.0336659, + 44.6122736 + ], + [ + -124.0336845, + 44.6122655 + ], + [ + -124.0336971, + 44.6122604 + ], + [ + -124.0337143, + 44.6122542 + ], + [ + -124.0337242, + 44.612251 + ], + [ + -124.0337356, + 44.6122477 + ], + [ + -124.0337486, + 44.6122443 + ], + [ + -124.0337635, + 44.6122411 + ], + [ + -124.0337799, + 44.6122386 + ], + [ + -124.0337888, + 44.6122379 + ], + [ + -124.0337976, + 44.6122381 + ], + [ + -124.0338035, + 44.6122385 + ], + [ + -124.0338115, + 44.6122396 + ], + [ + -124.033822, + 44.6122418 + ], + [ + -124.0338361, + 44.6122457 + ], + [ + -124.0338442, + 44.6122483 + ], + [ + -124.033866, + 44.6122561 + ], + [ + -124.0338952, + 44.6122668 + ], + [ + -124.0339121, + 44.6122721 + ], + [ + -124.0339212, + 44.6122745 + ], + [ + -124.033931, + 44.6122765 + ], + [ + -124.0339414, + 44.6122779 + ], + [ + -124.0339526, + 44.6122786 + ], + [ + -124.0342926, + 44.6122808 + ], + [ + -124.034559, + 44.6122877 + ], + [ + -124.0345761, + 44.6122876 + ], + [ + -124.034593, + 44.6122872 + ], + [ + -124.0346268, + 44.6122851 + ], + [ + -124.0346492, + 44.612283 + ], + [ + -124.034679, + 44.6122792 + ], + [ + -124.0347186, + 44.6122727 + ], + [ + -124.0347411, + 44.6122684 + ], + [ + -124.0347668, + 44.6122631 + ], + [ + -124.0347961, + 44.6122564 + ], + [ + -124.0348296, + 44.6122483 + ], + [ + -124.0348799, + 44.6122349 + ], + [ + -124.0349287, + 44.6122202 + ], + [ + -124.0349605, + 44.6122094 + ], + [ + -124.0350018, + 44.6121939 + ], + [ + -124.0350248, + 44.6121844 + ], + [ + -124.0350507, + 44.6121729 + ], + [ + -124.0350796, + 44.6121589 + ], + [ + -124.0351118, + 44.6121418 + ], + [ + -124.0351475, + 44.6121207 + ], + [ + -124.0351734, + 44.6121034 + ], + [ + -124.0351976, + 44.6120853 + ], + [ + -124.0352131, + 44.6120729 + ], + [ + -124.0352331, + 44.612056 + ], + [ + -124.0353109, + 44.6119877 + ], + [ + -124.0353342, + 44.6119688 + ], + [ + -124.0353624, + 44.611948 + ], + [ + -124.0353898, + 44.6119282 + ], + [ + -124.0354169, + 44.6119077 + ], + [ + -124.0354712, + 44.6118661 + ], + [ + -124.0355082, + 44.6118393 + ], + [ + -124.03553, + 44.6118246 + ], + [ + -124.0355555, + 44.6118089 + ], + [ + -124.0355859, + 44.6117924 + ], + [ + -124.0356027, + 44.6117845 + ], + [ + -124.0356212, + 44.6117767 + ], + [ + -124.0356415, + 44.6117693 + ], + [ + -124.0356639, + 44.6117625 + ], + [ + -124.0356888, + 44.6117567 + ], + [ + -124.0361841, + 44.6116577 + ], + [ + -124.0367832, + 44.6116038 + ], + [ + -124.0368172, + 44.6116016 + ], + [ + -124.0368438, + 44.6116004 + ], + [ + -124.036897, + 44.6116002 + ], + [ + -124.0369325, + 44.6116016 + ], + [ + -124.0369798, + 44.611605 + ], + [ + -124.0370428, + 44.611612 + ], + [ + -124.0370788, + 44.6116171 + ], + [ + -124.0371198, + 44.6116237 + ], + [ + -124.0371667, + 44.6116321 + ], + [ + -124.0372916, + 44.6116568 + ], + [ + -124.0373495, + 44.6116696 + ], + [ + -124.0374059, + 44.6116838 + ], + [ + -124.0374429, + 44.6116939 + ], + [ + -124.0374919, + 44.6117079 + ], + [ + -124.0375569, + 44.6117275 + ], + [ + -124.0375852, + 44.6117373 + ], + [ + -124.0376125, + 44.6117486 + ], + [ + -124.0376303, + 44.6117568 + ], + [ + -124.0377006, + 44.6117907 + ], + [ + -124.0377212, + 44.6117998 + ], + [ + -124.0377454, + 44.6118093 + ], + [ + -124.0377586, + 44.6118139 + ], + [ + -124.0377731, + 44.6118183 + ], + [ + -124.037789, + 44.6118224 + ], + [ + -124.0378065, + 44.611826 + ], + [ + -124.0378242, + 44.611829 + ], + [ + -124.0378418, + 44.6118315 + ], + [ + -124.0378771, + 44.6118352 + ], + [ + -124.0379006, + 44.6118369 + ], + [ + -124.0379319, + 44.6118383 + ], + [ + -124.0379737, + 44.6118389 + ], + [ + -124.0380293, + 44.6118382 + ], + [ + -124.0381035, + 44.6118361 + ], + [ + -124.0382373, + 44.6118315 + ], + [ + -124.038371, + 44.6118252 + ], + [ + -124.03846, + 44.61182 + ], + [ + -124.0385784, + 44.6118119 + ], + [ + -124.0386017, + 44.6118098 + ], + [ + -124.0386248, + 44.611807 + ], + [ + -124.0386709, + 44.6117997 + ], + [ + -124.0387014, + 44.611794 + ], + [ + -124.0388228, + 44.6117695 + ], + [ + -124.0388575, + 44.6117635 + ], + [ + -124.0388974, + 44.611758 + ], + [ + -124.0389187, + 44.6117558 + ], + [ + -124.0389332, + 44.6117549 + ], + [ + -124.0389477, + 44.6117545 + ], + [ + -124.0389573, + 44.6117546 + ], + [ + -124.0389702, + 44.6117553 + ], + [ + -124.0389874, + 44.6117568 + ], + [ + -124.0389972, + 44.6117582 + ], + [ + -124.0390084, + 44.61176 + ], + [ + -124.0390212, + 44.6117626 + ], + [ + -124.0390358, + 44.6117663 + ], + [ + -124.0390524, + 44.6117713 + ], + [ + -124.0390612, + 44.6117743 + ], + [ + -124.0390706, + 44.6117778 + ], + [ + -124.0390806, + 44.6117819 + ], + [ + -124.0390881, + 44.6117854 + ], + [ + -124.0390951, + 44.6117892 + ], + [ + -124.0390994, + 44.6117918 + ], + [ + -124.0391048, + 44.6117956 + ], + [ + -124.0391116, + 44.6118007 + ], + [ + -124.0391199, + 44.6118079 + ], + [ + -124.0391302, + 44.6118177 + ], + [ + -124.0391439, + 44.6118307 + ], + [ + -124.0391522, + 44.6118378 + ], + [ + -124.0391569, + 44.6118413 + ], + [ + -124.0391623, + 44.611845 + ], + [ + -124.0391684, + 44.6118486 + ], + [ + -124.0391971, + 44.6118648 + ], + [ + -124.0392285, + 44.6118822 + ], + [ + -124.0392492, + 44.6118927 + ], + [ + -124.0392613, + 44.6118984 + ], + [ + -124.0392755, + 44.6119043 + ], + [ + -124.0392922, + 44.6119105 + ], + [ + -124.0393013, + 44.6119134 + ], + [ + -124.0393113, + 44.6119162 + ], + [ + -124.0393222, + 44.6119188 + ], + [ + -124.0393388, + 44.6119223 + ], + [ + -124.0393554, + 44.6119254 + ], + [ + -124.039389, + 44.6119307 + ], + [ + -124.0394564, + 44.6119399 + ], + [ + -124.039501, + 44.6119463 + ], + [ + -124.0395263, + 44.6119507 + ], + [ + -124.0395711, + 44.6119596 + ], + [ + -124.0396157, + 44.6119691 + ], + [ + -124.0397049, + 44.6119886 + ], + [ + -124.0397649, + 44.6120011 + ], + [ + -124.0397996, + 44.6120077 + ], + [ + -124.0398196, + 44.612011 + ], + [ + -124.0398397, + 44.6120139 + ], + [ + -124.0398803, + 44.6120184 + ], + [ + -124.0399075, + 44.6120206 + ], + [ + -124.0399438, + 44.6120225 + ], + [ + -124.0399923, + 44.6120238 + ], + [ + -124.0400563, + 44.6120238 + ], + [ + -124.0400923, + 44.6120234 + ], + [ + -124.0403284, + 44.6119724 + ], + [ + -124.0403538, + 44.6119724 + ], + [ + -124.0403792, + 44.6119734 + ], + [ + -124.0403961, + 44.6119746 + ], + [ + -124.0404187, + 44.6119769 + ], + [ + -124.0404488, + 44.6119813 + ], + [ + -124.040466, + 44.6119844 + ], + [ + -124.0404857, + 44.6119886 + ], + [ + -124.0405081, + 44.6119941 + ], + [ + -124.0405336, + 44.6120015 + ], + [ + -124.0405626, + 44.6120114 + ], + [ + -124.040578, + 44.6120173 + ], + [ + -124.0405945, + 44.6120241 + ], + [ + -124.0406221, + 44.612037 + ], + [ + -124.0406478, + 44.6120508 + ], + [ + -124.0406639, + 44.6120605 + ], + [ + -124.0406844, + 44.6120738 + ], + [ + -124.0407102, + 44.6120921 + ], + [ + -124.0407429, + 44.6121169 + ], + [ + -124.0407854, + 44.6121499 + ], + [ + -124.0408103, + 44.6121679 + ], + [ + -124.0408401, + 44.6121874 + ], + [ + -124.0408568, + 44.6121972 + ], + [ + -124.0408756, + 44.612207 + ], + [ + -124.0408967, + 44.6122166 + ], + [ + -124.0413571, + 44.6124103 + ], + [ + -124.0416952, + 44.6125534 + ], + [ + -124.0417058, + 44.6125577 + ], + [ + -124.0417171, + 44.6125619 + ], + [ + -124.0417415, + 44.6125702 + ], + [ + -124.0417588, + 44.6125757 + ], + [ + -124.0417826, + 44.612583 + ], + [ + -124.041815, + 44.6125929 + ], + [ + -124.0418576, + 44.6126067 + ], + [ + -124.0418806, + 44.612615 + ], + [ + -124.0419049, + 44.6126251 + ], + [ + -124.0419167, + 44.6126307 + ], + [ + -124.0419282, + 44.612637 + ], + [ + -124.0419392, + 44.612644 + ], + [ + -124.0419491, + 44.6126518 + ], + [ + -124.0419576, + 44.6126607 + ], + [ + -124.0419609, + 44.6126654 + ], + [ + -124.0419637, + 44.6126705 + ], + [ + -124.0419657, + 44.6126759 + ], + [ + -124.0419668, + 44.6126817 + ], + [ + -124.041967, + 44.6126879 + ], + [ + -124.041966, + 44.6126945 + ], + [ + -124.0419636, + 44.6127016 + ], + [ + -124.0419417, + 44.6127527 + ], + [ + -124.0419194, + 44.6128037 + ], + [ + -124.0418564, + 44.6129499 + ], + [ + -124.0418541, + 44.6129559 + ], + [ + -124.0418525, + 44.6129621 + ], + [ + -124.0418519, + 44.6129663 + ], + [ + -124.0418515, + 44.6129719 + ], + [ + -124.0418515, + 44.6129751 + ], + [ + -124.0418518, + 44.6129788 + ], + [ + -124.0418525, + 44.6129831 + ], + [ + -124.0418538, + 44.6129878 + ], + [ + -124.0418559, + 44.6129933 + ], + [ + -124.0418572, + 44.6129961 + ], + [ + -124.0418589, + 44.6129991 + ], + [ + -124.041861, + 44.6130023 + ], + [ + -124.0418635, + 44.6130056 + ], + [ + -124.0418666, + 44.613009 + ], + [ + -124.0418702, + 44.6130126 + ], + [ + -124.0418746, + 44.6130163 + ], + [ + -124.0418813, + 44.6130212 + ], + [ + -124.0418882, + 44.6130258 + ], + [ + -124.0419025, + 44.6130337 + ], + [ + -124.0419123, + 44.6130383 + ], + [ + -124.0419259, + 44.6130435 + ], + [ + -124.0419445, + 44.6130492 + ], + [ + -124.0419554, + 44.6130519 + ], + [ + -124.041968, + 44.6130546 + ], + [ + -124.0419826, + 44.6130573 + ], + [ + -124.0419994, + 44.6130599 + ], + [ + -124.0420442, + 44.6130664 + ], + [ + -124.0420693, + 44.6130707 + ], + [ + -124.0420823, + 44.6130735 + ], + [ + -124.042096, + 44.613077 + ], + [ + -124.0421101, + 44.6130814 + ], + [ + -124.0421245, + 44.6130871 + ], + [ + -124.0422083, + 44.6131242 + ], + [ + -124.0422358, + 44.613137 + ], + [ + -124.0422718, + 44.6131551 + ], + [ + -124.0422919, + 44.6131661 + ], + [ + -124.0423144, + 44.6131794 + ], + [ + -124.0423395, + 44.6131958 + ], + [ + -124.0423525, + 44.6132052 + ], + [ + -124.042366, + 44.6132156 + ], + [ + -124.0423733, + 44.6132216 + ], + [ + -124.0423801, + 44.6132277 + ], + [ + -124.0423927, + 44.6132401 + ], + [ + -124.0424004, + 44.6132486 + ], + [ + -124.0424097, + 44.6132601 + ], + [ + -124.042421, + 44.6132758 + ], + [ + -124.0424268, + 44.613285 + ], + [ + -124.0424331, + 44.6132955 + ], + [ + -124.0424399, + 44.6133076 + ], + [ + -124.0424566, + 44.6133405 + ], + [ + -124.0424597, + 44.6133479 + ], + [ + -124.0424619, + 44.6133554 + ], + [ + -124.0424629, + 44.6133605 + ], + [ + -124.0424638, + 44.6133674 + ], + [ + -124.0424644, + 44.6133767 + ], + [ + -124.0424645, + 44.6133892 + ], + [ + -124.0424645, + 44.6134059 + ], + [ + -124.0424649, + 44.6134153 + ], + [ + -124.0424661, + 44.6134258 + ], + [ + -124.0424673, + 44.6134313 + ], + [ + -124.0424689, + 44.613437 + ], + [ + -124.0424713, + 44.613443 + ], + [ + -124.0424741, + 44.6134481 + ], + [ + -124.0424779, + 44.6134528 + ], + [ + -124.0424809, + 44.6134558 + ], + [ + -124.0424853, + 44.6134596 + ], + [ + -124.042492, + 44.6134644 + ], + [ + -124.0425021, + 44.6134703 + ], + [ + -124.0425083, + 44.6134736 + ], + [ + -124.0425259, + 44.6134818 + ], + [ + -124.0425494, + 44.6134927 + ], + [ + -124.0425619, + 44.6134993 + ], + [ + -124.042568, + 44.613503 + ], + [ + -124.0425739, + 44.6135071 + ], + [ + -124.0425794, + 44.6135117 + ], + [ + -124.0425842, + 44.6135171 + ], + [ + -124.0425862, + 44.61352 + ], + [ + -124.042588, + 44.6135231 + ], + [ + -124.0425893, + 44.6135264 + ], + [ + -124.042592, + 44.6135354 + ], + [ + -124.042594, + 44.6135446 + ], + [ + -124.042595, + 44.6135509 + ], + [ + -124.0425959, + 44.6135594 + ], + [ + -124.0425963, + 44.613571 + ], + [ + -124.0426829, + 44.6132934 + ], + [ + -124.0426831, + 44.6125278 + ], + [ + -124.0428166, + 44.612574 + ], + [ + -124.0434451, + 44.6125845 + ], + [ + -124.0426738, + 44.6121514 + ], + [ + -124.0426488, + 44.6118259 + ], + [ + -124.0443559, + 44.6117848 + ], + [ + -124.0443478, + 44.6109338 + ], + [ + -124.044849, + 44.6109128 + ], + [ + -124.0451079, + 44.6110361 + ], + [ + -124.0454275, + 44.6111207 + ], + [ + -124.0459181, + 44.6111544 + ], + [ + -124.0463236, + 44.6111339 + ], + [ + -124.0463813, + 44.6119601 + ], + [ + -124.0468269, + 44.6119491 + ], + [ + -124.0468301, + 44.6120086 + ], + [ + -124.0473667, + 44.6119945 + ], + [ + -124.0473424, + 44.6117319 + ], + [ + -124.0476805, + 44.6117268 + ], + [ + -124.0476598, + 44.6091853 + ], + [ + -124.0453757, + 44.6091065 + ], + [ + -124.0453641, + 44.6091062 + ], + [ + -124.0449731, + 44.6090928 + ], + [ + -124.0442027, + 44.6090661 + ], + [ + -124.0441873, + 44.6090656 + ], + [ + -124.0427752, + 44.6090169 + ], + [ + -124.0422637, + 44.6084214 + ], + [ + -124.042233, + 44.6071636 + ], + [ + -124.0419163, + 44.6058809 + ], + [ + -124.0418953, + 44.6050181 + ], + [ + -124.0426775, + 44.6032982 + ], + [ + -124.0427226, + 44.6019886 + ], + [ + -124.0453402, + 44.6020595 + ], + [ + -124.0479252, + 44.6021297 + ], + [ + -124.0477944, + 44.6056576 + ], + [ + -124.0477738, + 44.6061975 + ], + [ + -124.0477704, + 44.6062968 + ], + [ + -124.0477694, + 44.6063123 + ], + [ + -124.0477497, + 44.606837 + ], + [ + -124.0477398, + 44.6071109 + ], + [ + -124.050208, + 44.6071705 + ], + [ + -124.0502298, + 44.6063327 + ], + [ + -124.0503264, + 44.606335 + ], + [ + -124.0511671, + 44.6063554 + ], + [ + -124.0511669, + 44.6057699 + ], + [ + -124.0511906, + 44.6057706 + ], + [ + -124.0512829, + 44.6057735 + ], + [ + -124.0515011, + 44.6057802 + ], + [ + -124.0515254, + 44.6057809 + ], + [ + -124.0515251, + 44.6057836 + ], + [ + -124.0515248, + 44.6057863 + ], + [ + -124.0515245, + 44.605789 + ], + [ + -124.0515243, + 44.6057917 + ], + [ + -124.051524, + 44.6057944 + ], + [ + -124.0515237, + 44.6057971 + ], + [ + -124.0515235, + 44.6057998 + ], + [ + -124.0515232, + 44.6058025 + ], + [ + -124.0515229, + 44.6058052 + ], + [ + -124.0515226, + 44.6058079 + ], + [ + -124.0515224, + 44.6058106 + ], + [ + -124.0515221, + 44.6058133 + ], + [ + -124.0515218, + 44.605816 + ], + [ + -124.0515216, + 44.6058187 + ], + [ + -124.0515213, + 44.6058215 + ], + [ + -124.0515211, + 44.6058242 + ], + [ + -124.0515208, + 44.6058269 + ], + [ + -124.0515205, + 44.6058296 + ], + [ + -124.0515203, + 44.6058323 + ], + [ + -124.05152, + 44.605835 + ], + [ + -124.0515198, + 44.6058377 + ], + [ + -124.0515195, + 44.6058404 + ], + [ + -124.0515193, + 44.6058431 + ], + [ + -124.051519, + 44.6058458 + ], + [ + -124.0515188, + 44.6058485 + ], + [ + -124.0515185, + 44.6058512 + ], + [ + -124.0515183, + 44.6058539 + ], + [ + -124.051518, + 44.6058566 + ], + [ + -124.0515178, + 44.6058593 + ], + [ + -124.0515176, + 44.605862 + ], + [ + -124.0515173, + 44.6058647 + ], + [ + -124.0515171, + 44.6058674 + ], + [ + -124.0515168, + 44.6058701 + ], + [ + -124.0515166, + 44.6058728 + ], + [ + -124.0515164, + 44.6058755 + ], + [ + -124.0515161, + 44.6058782 + ], + [ + -124.0515159, + 44.6058809 + ], + [ + -124.0515157, + 44.6058836 + ], + [ + -124.0515155, + 44.6058863 + ], + [ + -124.0515152, + 44.605889 + ], + [ + -124.051515, + 44.6058917 + ], + [ + -124.0515148, + 44.6058944 + ], + [ + -124.0515145, + 44.6058971 + ], + [ + -124.0515143, + 44.6058998 + ], + [ + -124.0515141, + 44.6059025 + ], + [ + -124.0515139, + 44.6059052 + ], + [ + -124.0515137, + 44.6059079 + ], + [ + -124.0515134, + 44.6059107 + ], + [ + -124.0515132, + 44.6059134 + ], + [ + -124.051513, + 44.6059161 + ], + [ + -124.0515128, + 44.6059188 + ], + [ + -124.0515126, + 44.6059215 + ], + [ + -124.0515124, + 44.6059242 + ], + [ + -124.0515122, + 44.6059269 + ], + [ + -124.051512, + 44.6059296 + ], + [ + -124.0515118, + 44.6059323 + ], + [ + -124.0515116, + 44.605935 + ], + [ + -124.0515113, + 44.6059377 + ], + [ + -124.0515111, + 44.6059404 + ], + [ + -124.0515109, + 44.6059431 + ], + [ + -124.0515107, + 44.6059458 + ], + [ + -124.0515105, + 44.6059485 + ], + [ + -124.0515103, + 44.6059512 + ], + [ + -124.0515102, + 44.6059539 + ], + [ + -124.05151, + 44.6059566 + ], + [ + -124.0515098, + 44.6059593 + ], + [ + -124.0515096, + 44.605962 + ], + [ + -124.0515094, + 44.6059647 + ], + [ + -124.0515092, + 44.6059675 + ], + [ + -124.051509, + 44.6059702 + ], + [ + -124.0515088, + 44.6059729 + ], + [ + -124.0515086, + 44.6059756 + ], + [ + -124.0515084, + 44.6059783 + ], + [ + -124.0515083, + 44.605981 + ], + [ + -124.0515081, + 44.6059837 + ], + [ + -124.0515079, + 44.6059864 + ], + [ + -124.0515077, + 44.6059891 + ], + [ + -124.0515075, + 44.6059918 + ], + [ + -124.0515074, + 44.6059945 + ], + [ + -124.0515072, + 44.6059972 + ], + [ + -124.051507, + 44.6059999 + ], + [ + -124.0515069, + 44.6060026 + ], + [ + -124.0515067, + 44.6060053 + ], + [ + -124.0515065, + 44.606008 + ], + [ + -124.0515063, + 44.6060107 + ], + [ + -124.0515062, + 44.6060134 + ], + [ + -124.051506, + 44.6060162 + ], + [ + -124.0515058, + 44.6060189 + ], + [ + -124.0515057, + 44.6060216 + ], + [ + -124.0515055, + 44.6060243 + ], + [ + -124.0515054, + 44.606027 + ], + [ + -124.0515052, + 44.6060297 + ], + [ + -124.051505, + 44.6060324 + ], + [ + -124.0515049, + 44.6060351 + ], + [ + -124.0515047, + 44.6060378 + ], + [ + -124.0515046, + 44.6060405 + ], + [ + -124.0515044, + 44.6060432 + ], + [ + -124.0515043, + 44.6060459 + ], + [ + -124.0515041, + 44.6060486 + ], + [ + -124.051504, + 44.6060513 + ], + [ + -124.0515038, + 44.606054 + ], + [ + -124.0515037, + 44.6060567 + ], + [ + -124.0515035, + 44.6060595 + ], + [ + -124.0515034, + 44.6060622 + ], + [ + -124.0515033, + 44.6060649 + ], + [ + -124.0515031, + 44.6060676 + ], + [ + -124.051503, + 44.6060703 + ], + [ + -124.0515028, + 44.606073 + ], + [ + -124.0515027, + 44.6060757 + ], + [ + -124.0515026, + 44.6060784 + ], + [ + -124.0515024, + 44.6060811 + ], + [ + -124.0515023, + 44.6060838 + ], + [ + -124.0515022, + 44.6060865 + ], + [ + -124.0515021, + 44.6060892 + ], + [ + -124.0515019, + 44.6060919 + ], + [ + -124.0515018, + 44.6060946 + ], + [ + -124.0515017, + 44.6060973 + ], + [ + -124.0515015, + 44.6061001 + ], + [ + -124.0515014, + 44.6061028 + ], + [ + -124.0515013, + 44.6061055 + ], + [ + -124.0515012, + 44.6061082 + ], + [ + -124.0515011, + 44.6061109 + ], + [ + -124.0515009, + 44.6061136 + ], + [ + -124.0515008, + 44.6061163 + ], + [ + -124.0515007, + 44.606119 + ], + [ + -124.0515006, + 44.6061217 + ], + [ + -124.0515005, + 44.6061244 + ], + [ + -124.0515004, + 44.6061271 + ], + [ + -124.0515003, + 44.6061298 + ], + [ + -124.0515002, + 44.6061325 + ], + [ + -124.0515001, + 44.6061352 + ], + [ + -124.0515, + 44.606138 + ], + [ + -124.0514998, + 44.6061407 + ], + [ + -124.0514997, + 44.6061434 + ], + [ + -124.0514996, + 44.6061461 + ], + [ + -124.0514995, + 44.6061488 + ], + [ + -124.0514994, + 44.6061515 + ], + [ + -124.0514994, + 44.6061542 + ], + [ + -124.0514993, + 44.6061569 + ], + [ + -124.0514992, + 44.6061596 + ], + [ + -124.0514991, + 44.6061623 + ], + [ + -124.051499, + 44.606165 + ], + [ + -124.0514989, + 44.6061677 + ], + [ + -124.0514988, + 44.6061704 + ], + [ + -124.0514987, + 44.6061732 + ], + [ + -124.0514986, + 44.6061759 + ], + [ + -124.0514985, + 44.6061786 + ], + [ + -124.0514985, + 44.6061813 + ], + [ + -124.0514984, + 44.606184 + ], + [ + -124.0514983, + 44.6061867 + ], + [ + -124.0514982, + 44.6061894 + ], + [ + -124.0514981, + 44.6061921 + ], + [ + -124.0514981, + 44.6061948 + ], + [ + -124.051498, + 44.6061975 + ], + [ + -124.0514979, + 44.6062002 + ], + [ + -124.0514978, + 44.6062029 + ], + [ + -124.0514978, + 44.6062057 + ], + [ + -124.0514977, + 44.6062084 + ], + [ + -124.0514976, + 44.6062111 + ], + [ + -124.0514975, + 44.6062138 + ], + [ + -124.0514975, + 44.6062165 + ], + [ + -124.0514974, + 44.6062192 + ], + [ + -124.0514974, + 44.6062219 + ], + [ + -124.0514973, + 44.6062246 + ], + [ + -124.0514972, + 44.6062273 + ], + [ + -124.0514972, + 44.60623 + ], + [ + -124.0514971, + 44.6062327 + ], + [ + -124.0514971, + 44.6062354 + ], + [ + -124.051497, + 44.6062381 + ], + [ + -124.0514969, + 44.6062409 + ], + [ + -124.0514969, + 44.6062436 + ], + [ + -124.0514968, + 44.6062463 + ], + [ + -124.0514968, + 44.606249 + ], + [ + -124.0514967, + 44.6062517 + ], + [ + -124.0514967, + 44.6062544 + ], + [ + -124.0514966, + 44.6062571 + ], + [ + -124.0514966, + 44.6062598 + ], + [ + -124.0514966, + 44.6062625 + ], + [ + -124.0514965, + 44.6062652 + ], + [ + -124.0514965, + 44.6062679 + ], + [ + -124.0514964, + 44.6062706 + ], + [ + -124.0514964, + 44.6062734 + ], + [ + -124.0514964, + 44.6062761 + ], + [ + -124.0514963, + 44.6062788 + ], + [ + -124.0514963, + 44.6062815 + ], + [ + -124.0514963, + 44.6062842 + ], + [ + -124.0514962, + 44.6062869 + ], + [ + -124.0514962, + 44.6062896 + ], + [ + -124.0514962, + 44.6062923 + ], + [ + -124.0514961, + 44.606295 + ], + [ + -124.0514961, + 44.6062977 + ], + [ + -124.0514961, + 44.6063004 + ], + [ + -124.0514961, + 44.6063032 + ], + [ + -124.051496, + 44.6063059 + ], + [ + -124.051496, + 44.6063086 + ], + [ + -124.051496, + 44.6063113 + ], + [ + -124.051496, + 44.606314 + ], + [ + -124.051496, + 44.6063167 + ], + [ + -124.0514959, + 44.6063194 + ], + [ + -124.0514959, + 44.6063221 + ], + [ + -124.0514959, + 44.6063248 + ], + [ + -124.0514959, + 44.6063275 + ], + [ + -124.0514959, + 44.6063302 + ], + [ + -124.0514959, + 44.6063329 + ], + [ + -124.0514959, + 44.6063357 + ], + [ + -124.0514959, + 44.6063384 + ], + [ + -124.0514959, + 44.6063411 + ], + [ + -124.0514959, + 44.6063438 + ], + [ + -124.0514959, + 44.6063465 + ], + [ + -124.0514959, + 44.6063492 + ], + [ + -124.0514959, + 44.6063519 + ], + [ + -124.0514959, + 44.6063546 + ], + [ + -124.0514959, + 44.6063573 + ], + [ + -124.0514959, + 44.60636 + ], + [ + -124.0514959, + 44.6063627 + ], + [ + -124.0514959, + 44.6063654 + ], + [ + -124.0514959, + 44.6063682 + ], + [ + -124.0514959, + 44.6063709 + ], + [ + -124.0514959, + 44.6063736 + ], + [ + -124.0514959, + 44.6063763 + ], + [ + -124.0514959, + 44.606379 + ], + [ + -124.0514959, + 44.6063817 + ], + [ + -124.051496, + 44.6063844 + ], + [ + -124.051496, + 44.6063871 + ], + [ + -124.051496, + 44.6063898 + ], + [ + -124.051496, + 44.6063925 + ], + [ + -124.051496, + 44.6063952 + ], + [ + -124.0514961, + 44.6063979 + ], + [ + -124.0514961, + 44.6064007 + ], + [ + -124.0514961, + 44.6064034 + ], + [ + -124.0514961, + 44.6064061 + ], + [ + -124.0514962, + 44.6064088 + ], + [ + -124.0514962, + 44.6064115 + ], + [ + -124.0514962, + 44.6064142 + ], + [ + -124.0514963, + 44.6064169 + ], + [ + -124.0514963, + 44.6064196 + ], + [ + -124.0514963, + 44.6064223 + ], + [ + -124.0514964, + 44.606425 + ], + [ + -124.0514964, + 44.6064277 + ], + [ + -124.0514964, + 44.6064304 + ], + [ + -124.0514965, + 44.6064332 + ], + [ + -124.0514965, + 44.6064359 + ], + [ + -124.0514966, + 44.6064386 + ], + [ + -124.0514966, + 44.6064413 + ], + [ + -124.0514967, + 44.606444 + ], + [ + -124.0514967, + 44.6064467 + ], + [ + -124.0514968, + 44.6064494 + ], + [ + -124.0514968, + 44.6064521 + ], + [ + -124.0514969, + 44.6064548 + ], + [ + -124.0514969, + 44.6064575 + ], + [ + -124.051497, + 44.6064602 + ], + [ + -124.051497, + 44.6064629 + ], + [ + -124.0514971, + 44.6064657 + ], + [ + -124.0514971, + 44.6064684 + ], + [ + -124.0514972, + 44.6064711 + ], + [ + -124.0514973, + 44.6064738 + ], + [ + -124.0514973, + 44.6064765 + ], + [ + -124.0514974, + 44.6064792 + ], + [ + -124.0514974, + 44.6064819 + ], + [ + -124.0514975, + 44.6064846 + ], + [ + -124.0514976, + 44.6064873 + ], + [ + -124.0514976, + 44.60649 + ], + [ + -124.0514977, + 44.6064927 + ], + [ + -124.0514978, + 44.6064954 + ], + [ + -124.0514979, + 44.6064982 + ], + [ + -124.0514979, + 44.6065009 + ], + [ + -124.051498, + 44.6065036 + ], + [ + -124.0514981, + 44.6065063 + ], + [ + -124.0514982, + 44.606509 + ], + [ + -124.0514982, + 44.6065117 + ], + [ + -124.0514983, + 44.6065144 + ], + [ + -124.0514984, + 44.6065171 + ], + [ + -124.0514985, + 44.6065198 + ], + [ + -124.0514986, + 44.6065225 + ], + [ + -124.0514987, + 44.6065252 + ], + [ + -124.0514987, + 44.6065279 + ], + [ + -124.0514988, + 44.6065306 + ], + [ + -124.0514989, + 44.6065334 + ], + [ + -124.051499, + 44.6065361 + ], + [ + -124.0514991, + 44.6065388 + ], + [ + -124.0514992, + 44.6065415 + ], + [ + -124.0514999, + 44.606688 + ], + [ + -124.0515041, + 44.6076178 + ], + [ + -124.0515059, + 44.6080232 + ], + [ + -124.0515106, + 44.6090486 + ], + [ + -124.0515144, + 44.6090487 + ], + [ + -124.0515182, + 44.6090488 + ], + [ + -124.0515221, + 44.6090488 + ], + [ + -124.0515259, + 44.6090489 + ], + [ + -124.0515297, + 44.609049 + ], + [ + -124.0515335, + 44.6090491 + ], + [ + -124.0515374, + 44.6090492 + ], + [ + -124.0515412, + 44.6090493 + ], + [ + -124.051545, + 44.6090494 + ], + [ + -124.0515488, + 44.6090495 + ], + [ + -124.0515526, + 44.6090496 + ], + [ + -124.0515565, + 44.6090497 + ], + [ + -124.0515603, + 44.6090498 + ], + [ + -124.0515641, + 44.6090499 + ], + [ + -124.0515679, + 44.6090501 + ], + [ + -124.0515717, + 44.6090502 + ], + [ + -124.0515756, + 44.6090503 + ], + [ + -124.0515794, + 44.6090504 + ], + [ + -124.0515832, + 44.6090506 + ], + [ + -124.051587, + 44.6090507 + ], + [ + -124.0515908, + 44.6090508 + ], + [ + -124.0515947, + 44.609051 + ], + [ + -124.0515985, + 44.6090511 + ], + [ + -124.0516023, + 44.6090513 + ], + [ + -124.0516061, + 44.6090514 + ], + [ + -124.0516099, + 44.6090516 + ], + [ + -124.0516137, + 44.6090518 + ], + [ + -124.0516176, + 44.6090519 + ], + [ + -124.0516214, + 44.6090521 + ], + [ + -124.0516252, + 44.6090523 + ], + [ + -124.051629, + 44.6090524 + ], + [ + -124.0516328, + 44.6090526 + ], + [ + -124.0516366, + 44.6090528 + ], + [ + -124.0516405, + 44.609053 + ], + [ + -124.0516443, + 44.6090532 + ], + [ + -124.0516481, + 44.6090534 + ], + [ + -124.0516519, + 44.6090536 + ], + [ + -124.0516557, + 44.6090538 + ], + [ + -124.0516595, + 44.609054 + ], + [ + -124.0516633, + 44.6090542 + ], + [ + -124.0516672, + 44.6090544 + ], + [ + -124.051671, + 44.6090546 + ], + [ + -124.0516748, + 44.6090548 + ], + [ + -124.0516786, + 44.609055 + ], + [ + -124.0516824, + 44.6090552 + ], + [ + -124.0516862, + 44.6090555 + ], + [ + -124.05169, + 44.6090557 + ], + [ + -124.0516938, + 44.6090559 + ], + [ + -124.0516977, + 44.6090562 + ], + [ + -124.0517015, + 44.6090564 + ], + [ + -124.0517053, + 44.6090566 + ], + [ + -124.0517091, + 44.6090569 + ], + [ + -124.0517129, + 44.6090571 + ], + [ + -124.0517167, + 44.6090574 + ], + [ + -124.0517205, + 44.6090577 + ], + [ + -124.0517243, + 44.6090579 + ], + [ + -124.0517281, + 44.6090582 + ], + [ + -124.0517319, + 44.6090584 + ], + [ + -124.0517357, + 44.6090587 + ], + [ + -124.0517395, + 44.609059 + ], + [ + -124.0517433, + 44.6090593 + ], + [ + -124.0517471, + 44.6090595 + ], + [ + -124.0517509, + 44.6090598 + ], + [ + -124.0517547, + 44.6090601 + ], + [ + -124.0517585, + 44.6090604 + ], + [ + -124.0517623, + 44.6090607 + ], + [ + -124.0517661, + 44.609061 + ], + [ + -124.05177, + 44.6090613 + ], + [ + -124.0517738, + 44.6090616 + ], + [ + -124.0517776, + 44.6090619 + ], + [ + -124.0517814, + 44.6090622 + ], + [ + -124.0517852, + 44.6090625 + ], + [ + -124.0517889, + 44.6090628 + ], + [ + -124.0517927, + 44.6090632 + ], + [ + -124.0517965, + 44.6090635 + ], + [ + -124.0518003, + 44.6090638 + ], + [ + -124.0518041, + 44.6090641 + ], + [ + -124.0518079, + 44.6090645 + ], + [ + -124.0518117, + 44.6090648 + ], + [ + -124.0518155, + 44.6090652 + ], + [ + -124.0518193, + 44.6090655 + ], + [ + -124.0518231, + 44.6090659 + ], + [ + -124.0518269, + 44.6090662 + ], + [ + -124.0518307, + 44.6090666 + ], + [ + -124.0518345, + 44.6090669 + ], + [ + -124.0518383, + 44.6090673 + ], + [ + -124.0518421, + 44.6090676 + ], + [ + -124.0518459, + 44.609068 + ], + [ + -124.0518496, + 44.6090684 + ], + [ + -124.0518534, + 44.6090688 + ], + [ + -124.0518572, + 44.6090691 + ], + [ + -124.051861, + 44.6090695 + ], + [ + -124.0518648, + 44.6090699 + ], + [ + -124.0518686, + 44.6090703 + ], + [ + -124.0518724, + 44.6090707 + ], + [ + -124.0518761, + 44.6090711 + ], + [ + -124.0518799, + 44.6090715 + ], + [ + -124.0518837, + 44.6090719 + ], + [ + -124.0518875, + 44.6090723 + ], + [ + -124.0518913, + 44.6090727 + ], + [ + -124.051895, + 44.6090731 + ], + [ + -124.0518988, + 44.6090735 + ], + [ + -124.0519026, + 44.6090739 + ], + [ + -124.0519064, + 44.6090744 + ], + [ + -124.0519102, + 44.6090748 + ], + [ + -124.0519139, + 44.6090752 + ], + [ + -124.0519177, + 44.6090756 + ], + [ + -124.0519215, + 44.6090761 + ], + [ + -124.0519253, + 44.6090765 + ], + [ + -124.051929, + 44.609077 + ], + [ + -124.0519328, + 44.6090774 + ], + [ + -124.0519366, + 44.6090779 + ], + [ + -124.0519404, + 44.6090783 + ], + [ + -124.0519441, + 44.6090788 + ], + [ + -124.0519479, + 44.6090792 + ], + [ + -124.0519517, + 44.6090797 + ], + [ + -124.0519554, + 44.6090802 + ], + [ + -124.0519592, + 44.6090806 + ], + [ + -124.051963, + 44.6090811 + ], + [ + -124.0519667, + 44.6090816 + ], + [ + -124.0519705, + 44.6090821 + ], + [ + -124.0521425, + 44.609104 + ], + [ + -124.0520302, + 44.609251 + ], + [ + -124.0519757, + 44.609334 + ], + [ + -124.051394, + 44.6102184 + ], + [ + -124.0503269, + 44.61018 + ], + [ + -124.0503253, + 44.609278 + ], + [ + -124.0501731, + 44.6092727 + ], + [ + -124.0501843, + 44.6116086 + ], + [ + -124.0506455, + 44.6110933 + ], + [ + -124.0509521, + 44.6107507 + ], + [ + -124.0511281, + 44.6105513 + ], + [ + -124.051541, + 44.6105767 + ], + [ + -124.052768, + 44.6106215 + ], + [ + -124.0527672, + 44.6119822 + ], + [ + -124.0527286, + 44.6121975 + ], + [ + -124.0528071, + 44.6119998 + ], + [ + -124.0528433, + 44.6118761 + ], + [ + -124.0528456, + 44.6102913 + ], + [ + -124.0528463, + 44.6093641 + ], + [ + -124.0558192, + 44.609488 + ], + [ + -124.0559053, + 44.6075211 + ], + [ + -124.0559275, + 44.6069463 + ], + [ + -124.0559572, + 44.6061791 + ], + [ + -124.0555452, + 44.6061707 + ], + [ + -124.0544257, + 44.6061465 + ], + [ + -124.0540908, + 44.6061397 + ], + [ + -124.0539378, + 44.6063726 + ], + [ + -124.0532389, + 44.6062725 + ], + [ + -124.0529285, + 44.6062807 + ], + [ + -124.0529407, + 44.6058244 + ], + [ + -124.0529422, + 44.605786 + ], + [ + -124.0529467, + 44.6056698 + ], + [ + -124.0530026, + 44.6056698 + ], + [ + -124.0530173, + 44.6052975 + ], + [ + -124.0533716, + 44.6052977 + ], + [ + -124.0535067, + 44.6052978 + ], + [ + -124.0546436, + 44.6052986 + ], + [ + -124.0543996, + 44.6056699 + ], + [ + -124.0541255, + 44.606087 + ], + [ + -124.0544603, + 44.6060938 + ], + [ + -124.0575908, + 44.6061574 + ], + [ + -124.0581383, + 44.6061685 + ], + [ + -124.0582447, + 44.6036342 + ], + [ + -124.0573334, + 44.6036267 + ], + [ + -124.0575738, + 44.6032557 + ], + [ + -124.0563094, + 44.6032568 + ], + [ + -124.0566361, + 44.6027579 + ], + [ + -124.0582774, + 44.6027563 + ], + [ + -124.0584, + 44.6001391 + ], + [ + -124.058432, + 44.5994111 + ], + [ + -124.0581672, + 44.5993232 + ], + [ + -124.0581819, + 44.5990018 + ], + [ + -124.0584467, + 44.59909 + ], + [ + -124.0584586, + 44.5988158 + ], + [ + -124.0592648, + 44.5988333 + ], + [ + -124.0636439, + 44.5988961 + ], + [ + -124.0657723, + 44.5989088 + ], + [ + -124.0658197, + 44.5981275 + ], + [ + -124.0596802, + 44.5981718 + ], + [ + -124.0596367, + 44.5977608 + ], + [ + -124.0585058, + 44.5977423 + ], + [ + -124.0584586, + 44.5988158 + ], + [ + -124.0542084, + 44.5987232 + ], + [ + -124.0540673, + 44.6022958 + ], + [ + -124.056551, + 44.602363 + ], + [ + -124.0563752, + 44.6026403 + ], + [ + -124.0558324, + 44.6034659 + ], + [ + -124.0530842, + 44.6034623 + ], + [ + -124.0531261, + 44.6022703 + ], + [ + -124.0479252, + 44.6021297 + ], + [ + -124.0480512, + 44.598582 + ], + [ + -124.0480675, + 44.598288 + ], + [ + -124.0459838, + 44.5978053 + ], + [ + -124.0464429, + 44.5969909 + ], + [ + -124.0458864, + 44.5967514 + ], + [ + -124.0427806, + 44.6003371 + ], + [ + -124.042846, + 44.5984619 + ], + [ + -124.0412385, + 44.5984734 + ], + [ + -124.0413324, + 44.5949635 + ], + [ + -124.0429676, + 44.5949354 + ], + [ + -124.0473862, + 44.5950197 + ], + [ + -124.0481883, + 44.595035 + ], + [ + -124.0480975, + 44.5914965 + ], + [ + -124.0533429, + 44.5915663 + ], + [ + -124.0532787, + 44.5879977 + ], + [ + -124.0479848, + 44.5879452 + ], + [ + -124.0481485, + 44.5736475 + ], + [ + -124.0534213, + 44.5736332 + ], + [ + -124.0534026, + 44.570986 + ], + [ + -124.05584, + 44.5709713 + ], + [ + -124.0560788, + 44.566409 + ], + [ + -124.0542291, + 44.5663902 + ], + [ + -124.0542197, + 44.5634813 + ], + [ + -124.0539144, + 44.5632787 + ], + [ + -124.0533081, + 44.5628369 + ], + [ + -124.0531502, + 44.5625452 + ], + [ + -124.0531104, + 44.5623158 + ], + [ + -124.0531379, + 44.5621317 + ], + [ + -124.0531531, + 44.5621095 + ], + [ + -124.0533669, + 44.5617982 + ], + [ + -124.0533969, + 44.5616766 + ], + [ + -124.0532968, + 44.5611959 + ], + [ + -124.053306, + 44.5610875 + ], + [ + -124.0533272, + 44.5609633 + ], + [ + -124.0533343, + 44.5609229 + ], + [ + -124.0532939, + 44.5608652 + ], + [ + -124.0532204, + 44.5608195 + ], + [ + -124.0529154, + 44.5608027 + ], + [ + -124.0526261, + 44.5609084 + ], + [ + -124.0523888, + 44.5610748 + ], + [ + -124.0518987, + 44.5615846 + ], + [ + -124.0514846, + 44.5618046 + ], + [ + -124.0510696, + 44.5620554 + ], + [ + -124.0509799, + 44.5621081 + ], + [ + -124.0507144, + 44.562264 + ], + [ + -124.0502902, + 44.5625325 + ], + [ + -124.0499237, + 44.5628557 + ], + [ + -124.0494612, + 44.5632441 + ], + [ + -124.0490476, + 44.5633926 + ], + [ + -124.0490464, + 44.5633931 + ], + [ + -124.0490475, + 44.5632699 + ], + [ + -124.0493645, + 44.563156 + ], + [ + -124.0498056, + 44.5627855 + ], + [ + -124.050179, + 44.5624564 + ], + [ + -124.0506148, + 44.5621805 + ], + [ + -124.0507384, + 44.5621079 + ], + [ + -124.0490465, + 44.5621011 + ], + [ + -124.0490445, + 44.5609061 + ], + [ + -124.049043, + 44.5600246 + ], + [ + -124.0490429, + 44.5579433 + ], + [ + -124.051636, + 44.5579251 + ], + [ + -124.0516216, + 44.5549724 + ], + [ + -124.0516178, + 44.5542089 + ], + [ + -124.0490382, + 44.5542068 + ], + [ + -124.0490302, + 44.5504703 + ], + [ + -124.0509424, + 44.5504869 + ], + [ + -124.0541999, + 44.5505153 + ], + [ + -124.0540665, + 44.5469839 + ], + [ + -124.0592328, + 44.5468935 + ], + [ + -124.059184, + 44.5451392 + ], + [ + -124.0604621, + 44.5451544 + ], + [ + -124.060178, + 44.545718 + ], + [ + -124.0603059, + 44.5459905 + ], + [ + -124.0606418, + 44.5467674 + ], + [ + -124.0605188, + 44.5469357 + ], + [ + -124.0606346, + 44.5472057 + ], + [ + -124.0610449, + 44.5474428 + ], + [ + -124.0611829, + 44.547882 + ], + [ + -124.0614395, + 44.5480984 + ], + [ + -124.0616392, + 44.5483127 + ], + [ + -124.0620749, + 44.5480952 + ], + [ + -124.0623087, + 44.5479421 + ], + [ + -124.0624676, + 44.5478394 + ], + [ + -124.0625279, + 44.547784 + ], + [ + -124.0625682, + 44.5476883 + ], + [ + -124.0625777, + 44.5475921 + ], + [ + -124.0623978, + 44.5471833 + ], + [ + -124.0627068, + 44.5471309 + ], + [ + -124.0628926, + 44.5470661 + ], + [ + -124.0631938, + 44.5471949 + ], + [ + -124.0636768, + 44.5470615 + ], + [ + -124.0641771, + 44.5471989 + ], + [ + -124.0642955, + 44.547195 + ], + [ + -124.0643831, + 44.5488009 + ], + [ + -124.0632357, + 44.5488149 + ], + [ + -124.0624067, + 44.552321 + ], + [ + -124.0618569, + 44.5523304 + ], + [ + -124.061863, + 44.5563705 + ], + [ + -124.0714813, + 44.5563959 + ], + [ + -124.0710625, + 44.5581415 + ], + [ + -124.0689219, + 44.5581518 + ], + [ + -124.068916, + 44.5590524 + ], + [ + -124.07088, + 44.5590363 + ], + [ + -124.0706478, + 44.5600297 + ], + [ + -124.0716923, + 44.5600267 + ], + [ + -124.071693, + 44.5600743 + ], + [ + -124.0716929, + 44.5601235 + ], + [ + -124.0716911, + 44.5601892 + ], + [ + -124.0716848, + 44.5602799 + ], + [ + -124.0716743, + 44.5603702 + ], + [ + -124.0716652, + 44.5604304 + ], + [ + -124.0716507, + 44.5605104 + ], + [ + -124.0716276, + 44.5606168 + ], + [ + -124.0716155, + 44.5606621 + ], + [ + -124.0716012, + 44.5607069 + ], + [ + -124.07157, + 44.5607961 + ], + [ + -124.0715505, + 44.5608558 + ], + [ + -124.0715409, + 44.5608903 + ], + [ + -124.0715307, + 44.560934 + ], + [ + -124.0715222, + 44.5609779 + ], + [ + -124.0715173, + 44.5610072 + ], + [ + -124.0715115, + 44.5610463 + ], + [ + -124.0715048, + 44.5610985 + ], + [ + -124.0715019, + 44.5611242 + ], + [ + -124.0715, + 44.5611501 + ], + [ + -124.0714996, + 44.5611674 + ], + [ + -124.0715009, + 44.5611884 + ], + [ + -124.0715027, + 44.5612011 + ], + [ + -124.071506, + 44.5612155 + ], + [ + -124.0715084, + 44.5612231 + ], + [ + -124.0715114, + 44.5612312 + ], + [ + -124.0715211, + 44.5612542 + ], + [ + -124.0715313, + 44.561277 + ], + [ + -124.0715531, + 44.5613223 + ], + [ + -124.0715683, + 44.5613523 + ], + [ + -124.0715892, + 44.5613921 + ], + [ + -124.0716703, + 44.561545 + ], + [ + -124.0716044, + 44.561624 + ], + [ + -124.0716014, + 44.5616272 + ], + [ + -124.071598, + 44.56163 + ], + [ + -124.0715954, + 44.5616318 + ], + [ + -124.0715918, + 44.5616339 + ], + [ + -124.0715866, + 44.5616364 + ], + [ + -124.0715834, + 44.5616377 + ], + [ + -124.0715796, + 44.561639 + ], + [ + -124.0715751, + 44.5616403 + ], + [ + -124.0715697, + 44.5616417 + ], + [ + -124.0715633, + 44.561643 + ], + [ + -124.0715557, + 44.5616442 + ], + [ + -124.0715469, + 44.5616454 + ], + [ + -124.0715366, + 44.5616464 + ], + [ + -124.071525, + 44.5616473 + ], + [ + -124.071512, + 44.5616482 + ], + [ + -124.0715053, + 44.5616488 + ], + [ + -124.0714778, + 44.5616509 + ], + [ + -124.0714501, + 44.5616527 + ], + [ + -124.0714317, + 44.5616536 + ], + [ + -124.0714071, + 44.5616542 + ], + [ + -124.071393, + 44.5616541 + ], + [ + -124.071377, + 44.5616537 + ], + [ + -124.0713588, + 44.5616528 + ], + [ + -124.0713365, + 44.5616508 + ], + [ + -124.0713142, + 44.5616483 + ], + [ + -124.0712697, + 44.5616424 + ], + [ + -124.07124, + 44.5616387 + ], + [ + -124.071223, + 44.561637 + ], + [ + -124.0712029, + 44.5616351 + ], + [ + -124.0711826, + 44.5616334 + ], + [ + -124.071169, + 44.5616326 + ], + [ + -124.0711509, + 44.5616319 + ], + [ + -124.0711405, + 44.5616317 + ], + [ + -124.0711287, + 44.5616318 + ], + [ + -124.0711153, + 44.5616324 + ], + [ + -124.0711, + 44.5616337 + ], + [ + -124.0710919, + 44.5616347 + ], + [ + -124.0710845, + 44.561636 + ], + [ + -124.0710772, + 44.5616378 + ], + [ + -124.0710724, + 44.5616392 + ], + [ + -124.0710661, + 44.5616415 + ], + [ + -124.071058, + 44.561645 + ], + [ + -124.0710535, + 44.5616472 + ], + [ + -124.0710486, + 44.56165 + ], + [ + -124.0710432, + 44.5616534 + ], + [ + -124.0710374, + 44.5616575 + ], + [ + -124.0710314, + 44.5616626 + ], + [ + -124.0710284, + 44.5616655 + ], + [ + -124.0710255, + 44.5616687 + ], + [ + -124.0710226, + 44.5616721 + ], + [ + -124.0710199, + 44.5616759 + ], + [ + -124.0710174, + 44.56168 + ], + [ + -124.0710152, + 44.5616845 + ], + [ + -124.0710134, + 44.5616893 + ], + [ + -124.0710113, + 44.5616972 + ], + [ + -124.0710094, + 44.5617051 + ], + [ + -124.0710067, + 44.5617209 + ], + [ + -124.0710054, + 44.5617314 + ], + [ + -124.0710042, + 44.5617454 + ], + [ + -124.0710034, + 44.5617641 + ], + [ + -124.071003, + 44.5617891 + ], + [ + -124.0710018, + 44.561897 + ], + [ + -124.0710022, + 44.561933 + ], + [ + -124.071015, + 44.5622646 + ], + [ + -124.0710156, + 44.5623461 + ], + [ + -124.0710141, + 44.5624277 + ], + [ + -124.071008, + 44.5625908 + ], + [ + -124.0710044, + 44.5626544 + ], + [ + -124.0709985, + 44.5627178 + ], + [ + -124.0709931, + 44.56276 + ], + [ + -124.0709838, + 44.5628162 + ], + [ + -124.0709773, + 44.5628483 + ], + [ + -124.0709687, + 44.562885 + ], + [ + -124.0709625, + 44.562908 + ], + [ + -124.0709554, + 44.5629307 + ], + [ + -124.0709392, + 44.5629757 + ], + [ + -124.0709268, + 44.5630054 + ], + [ + -124.0709088, + 44.5630446 + ], + [ + -124.0708824, + 44.5630964 + ], + [ + -124.070844, + 44.5631649 + ], + [ + -124.0707516, + 44.5633118 + ], + [ + -124.070719, + 44.5633599 + ], + [ + -124.070675, + 44.5634239 + ], + [ + -124.0706643, + 44.5634387 + ], + [ + -124.0706288, + 44.5634822 + ], + [ + -124.0705777, + 44.5635387 + ], + [ + -124.0705444, + 44.5635766 + ], + [ + -124.0705266, + 44.5635987 + ], + [ + -124.0705078, + 44.5636246 + ], + [ + -124.0705023, + 44.5636341 + ], + [ + -124.0704982, + 44.5636438 + ], + [ + -124.0704961, + 44.5636505 + ], + [ + -124.0704942, + 44.5636595 + ], + [ + -124.0704927, + 44.5636718 + ], + [ + -124.0704924, + 44.5636885 + ], + [ + -124.0704956, + 44.5637414 + ], + [ + -124.0704956, + 44.5637584 + ], + [ + -124.070495, + 44.5637674 + ], + [ + -124.0704936, + 44.5637768 + ], + [ + -124.0704912, + 44.5637867 + ], + [ + -124.0704874, + 44.5637971 + ], + [ + -124.0704817, + 44.5638077 + ], + [ + -124.0704667, + 44.5638311 + ], + [ + -124.0704509, + 44.5638543 + ], + [ + -124.0704177, + 44.5639 + ], + [ + -124.0703945, + 44.5639301 + ], + [ + -124.0703627, + 44.5639698 + ], + [ + -124.0703192, + 44.5640223 + ], + [ + -124.0703139, + 44.5640284 + ], + [ + -124.0703084, + 44.5640342 + ], + [ + -124.0702965, + 44.5640455 + ], + [ + -124.0702714, + 44.5640675 + ], + [ + -124.0702549, + 44.5640824 + ], + [ + -124.0702461, + 44.5640913 + ], + [ + -124.0702367, + 44.5641019 + ], + [ + -124.0702322, + 44.5641078 + ], + [ + -124.0702277, + 44.5641144 + ], + [ + -124.0702235, + 44.5641217 + ], + [ + -124.0702179, + 44.5641337 + ], + [ + -124.0702164, + 44.5641378 + ], + [ + -124.0702137, + 44.5641458 + ], + [ + -124.0702117, + 44.5641539 + ], + [ + -124.0702099, + 44.5641647 + ], + [ + -124.0702087, + 44.5641791 + ], + [ + -124.0702087, + 44.5641873 + ], + [ + -124.0702092, + 44.5641967 + ], + [ + -124.0702102, + 44.5642075 + ], + [ + -124.070212, + 44.5642198 + ], + [ + -124.0702147, + 44.5642338 + ], + [ + -124.0702233, + 44.5642708 + ], + [ + -124.0702356, + 44.5643192 + ], + [ + -124.0702486, + 44.5643676 + ], + [ + -124.0702747, + 44.5644644 + ], + [ + -124.0702912, + 44.5645342 + ], + [ + -124.0702922, + 44.5645394 + ], + [ + -124.0702942, + 44.5645498 + ], + [ + -124.0702957, + 44.5645566 + ], + [ + -124.0703083, + 44.5646037 + ], + [ + -124.0703231, + 44.5646505 + ], + [ + -124.0703555, + 44.5647437 + ], + [ + -124.0703763, + 44.5648059 + ], + [ + -124.0703868, + 44.5648416 + ], + [ + -124.0703976, + 44.5648864 + ], + [ + -124.0704061, + 44.5649316 + ], + [ + -124.0704205, + 44.5650223 + ], + [ + -124.0704312, + 44.5650826 + ], + [ + -124.0704389, + 44.5651168 + ], + [ + -124.070441, + 44.5651244 + ], + [ + -124.0704437, + 44.5651319 + ], + [ + -124.0704502, + 44.5651468 + ], + [ + -124.0704551, + 44.5651567 + ], + [ + -124.0704763, + 44.5651958 + ], + [ + -124.0704816, + 44.5652071 + ], + [ + -124.0704867, + 44.5652201 + ], + [ + -124.0704889, + 44.5652271 + ], + [ + -124.0704906, + 44.5652347 + ], + [ + -124.0704919, + 44.5652428 + ], + [ + -124.0704957, + 44.5652851 + ], + [ + -124.0704986, + 44.5653274 + ], + [ + -124.0705012, + 44.5653928 + ], + [ + -124.069634, + 44.5653988 + ], + [ + -124.0691868, + 44.5656699 + ], + [ + -124.06876, + 44.5674117 + ], + [ + -124.0684991, + 44.5673729 + ], + [ + -124.0681813, + 44.5673265 + ], + [ + -124.0681329, + 44.5675095 + ], + [ + -124.0683708, + 44.5675427 + ], + [ + -124.0683131, + 44.5677619 + ], + [ + -124.0664969, + 44.5674668 + ], + [ + -124.0661184, + 44.5673938 + ], + [ + -124.0657495, + 44.5672999 + ], + [ + -124.0653921, + 44.5671856 + ], + [ + -124.0650523, + 44.5670531 + ], + [ + -124.0648684, + 44.5669742 + ], + [ + -124.0647829, + 44.5669399 + ], + [ + -124.0646948, + 44.5669089 + ], + [ + -124.0616805, + 44.5659182 + ], + [ + -124.061572, + 44.5658864 + ], + [ + -124.0614649, + 44.5658622 + ], + [ + -124.0613552, + 44.5658444 + ], + [ + -124.0612439, + 44.5658332 + ], + [ + -124.0611317, + 44.5658287 + ], + [ + -124.0610193, + 44.5658309 + ], + [ + -124.0609076, + 44.5658397 + ], + [ + -124.0607972, + 44.5658552 + ], + [ + -124.0606891, + 44.5658772 + ], + [ + -124.060584, + 44.5659054 + ], + [ + -124.059632, + 44.5661964 + ], + [ + -124.059636, + 44.5664516 + ], + [ + -124.0598811, + 44.5664536 + ], + [ + -124.0598842, + 44.5665471 + ], + [ + -124.0611794, + 44.5665454 + ], + [ + -124.0607711, + 44.5700801 + ], + [ + -124.0638257, + 44.5700923 + ], + [ + -124.0638531, + 44.5717509 + ], + [ + -124.0671196, + 44.5717499 + ], + [ + -124.067063, + 44.5720131 + ], + [ + -124.0670281, + 44.5722221 + ], + [ + -124.06699, + 44.5724855 + ], + [ + -124.0669891, + 44.5724905 + ], + [ + -124.0661149, + 44.5748307 + ], + [ + -124.0660222, + 44.5750947 + ], + [ + -124.0659453, + 44.5753473 + ], + [ + -124.0658786, + 44.5756083 + ], + [ + -124.0658247, + 44.5758654 + ], + [ + -124.0657813, + 44.5761243 + ], + [ + -124.0657484, + 44.5763988 + ], + [ + -124.0656819, + 44.5770811 + ], + [ + -124.0655259, + 44.5786801 + ], + [ + -124.0655257, + 44.5786891 + ], + [ + -124.0655312, + 44.5787595 + ], + [ + -124.0655334, + 44.5788152 + ], + [ + -124.0655315, + 44.5788847 + ], + [ + -124.0655278, + 44.5789373 + ], + [ + -124.0655183, + 44.5790087 + ], + [ + -124.0655074, + 44.57907 + ], + [ + -124.0654177, + 44.5794345 + ], + [ + -124.0654032, + 44.5795118 + ], + [ + -124.0653932, + 44.579555 + ], + [ + -124.0653765, + 44.5796159 + ], + [ + -124.0653532, + 44.5796935 + ], + [ + -124.0653345, + 44.5797471 + ], + [ + -124.0653146, + 44.5797985 + ], + [ + -124.0652069, + 44.579979 + ], + [ + -124.0651736, + 44.5800385 + ], + [ + -124.0651362, + 44.5801116 + ], + [ + -124.0651039, + 44.5801818 + ], + [ + -124.0650751, + 44.5802508 + ], + [ + -124.0650498, + 44.5803222 + ], + [ + -124.0650295, + 44.5803868 + ], + [ + -124.0650059, + 44.5804724 + ], + [ + -124.0647907, + 44.5813567 + ], + [ + -124.0645885, + 44.5822772 + ], + [ + -124.0645883, + 44.5822807 + ], + [ + -124.0644274, + 44.583212 + ], + [ + -124.0643101, + 44.5841383 + ], + [ + -124.0643099, + 44.5841424 + ], + [ + -124.0642412, + 44.5848138 + ], + [ + -124.0639928, + 44.5848176 + ], + [ + -124.0640239, + 44.5852335 + ], + [ + -124.0641984, + 44.5852226 + ], + [ + -124.0641346, + 44.5858471 + ], + [ + -124.0640138, + 44.5867371 + ], + [ + -124.063889, + 44.587408 + ], + [ + -124.0638419, + 44.5876379 + ], + [ + -124.0638216, + 44.5877464 + ], + [ + -124.0638077, + 44.5878529 + ], + [ + -124.0637995, + 44.5879646 + ], + [ + -124.0637971, + 44.5880707 + ], + [ + -124.0637998, + 44.5881796 + ], + [ + -124.0637999, + 44.588181 + ], + [ + -124.0638084, + 44.5882823 + ], + [ + -124.0638078, + 44.5882846 + ], + [ + -124.0638098, + 44.5882993 + ], + [ + -124.0638238, + 44.5883975 + ], + [ + -124.0638242, + 44.5884032 + ], + [ + -124.0638461, + 44.5885173 + ], + [ + -124.063872, + 44.5886209 + ], + [ + -124.0639062, + 44.5887349 + ], + [ + -124.0641331, + 44.5894204 + ], + [ + -124.0641611, + 44.5895143 + ], + [ + -124.0641907, + 44.5896339 + ], + [ + -124.0642098, + 44.5897333 + ], + [ + -124.0642257, + 44.5898498 + ], + [ + -124.064234, + 44.5899547 + ], + [ + -124.0642376, + 44.5900589 + ], + [ + -124.0642349, + 44.5901779 + ], + [ + -124.0642268, + 44.5902789 + ], + [ + -124.0642111, + 44.5903997 + ], + [ + -124.0641915, + 44.5905069 + ], + [ + -124.0641644, + 44.5906178 + ], + [ + -124.0641328, + 44.5907245 + ], + [ + -124.064081, + 44.5908708 + ], + [ + -124.0644385, + 44.5909484 + ], + [ + -124.0659013, + 44.5909 + ], + [ + -124.0658454, + 44.5908086 + ], + [ + -124.0658067, + 44.5905322 + ], + [ + -124.0658182, + 44.5905319 + ], + [ + -124.06583, + 44.5905304 + ], + [ + -124.065841, + 44.5905284 + ], + [ + -124.065852, + 44.5905253 + ], + [ + -124.0658621, + 44.5905214 + ], + [ + -124.0658718, + 44.590517 + ], + [ + -124.0658807, + 44.5905115 + ], + [ + -124.0658888, + 44.5905058 + ], + [ + -124.0658961, + 44.5904992 + ], + [ + -124.0659026, + 44.5904922 + ], + [ + -124.0659079, + 44.5904849 + ], + [ + -124.0659117, + 44.5904771 + ], + [ + -124.0659147, + 44.590469 + ], + [ + -124.0659165, + 44.590461 + ], + [ + -124.0659171, + 44.5904527 + ], + [ + -124.0659162, + 44.5904442 + ], + [ + -124.0659146, + 44.5904361 + ], + [ + -124.0659114, + 44.5904282 + ], + [ + -124.0659071, + 44.5904204 + ], + [ + -124.065902, + 44.5904131 + ], + [ + -124.0658955, + 44.5904062 + ], + [ + -124.0658881, + 44.5903995 + ], + [ + -124.0658831, + 44.5903959 + ], + [ + -124.0658674, + 44.590387 + ], + [ + -124.0659973, + 44.5896771 + ], + [ + -124.0665748, + 44.5898438 + ], + [ + -124.0674253, + 44.5900893 + ], + [ + -124.0675566, + 44.5902658 + ], + [ + -124.0678176, + 44.5902658 + ], + [ + -124.0678026, + 44.5903856 + ], + [ + -124.0677873, + 44.5904762 + ], + [ + -124.0677473, + 44.5907122 + ], + [ + -124.0677075, + 44.5909476 + ], + [ + -124.0676949, + 44.5910217 + ], + [ + -124.0676836, + 44.5911089 + ], + [ + -124.0676751, + 44.5911963 + ], + [ + -124.0676624, + 44.5913712 + ], + [ + -124.067659, + 44.5914826 + ], + [ + -124.0676425, + 44.5916164 + ], + [ + -124.0676264, + 44.5917342 + ], + [ + -124.0675963, + 44.5919579 + ], + [ + -124.0675621, + 44.5921899 + ], + [ + -124.0675313, + 44.5923431 + ], + [ + -124.067493, + 44.5925044 + ], + [ + -124.0674696, + 44.5926121 + ], + [ + -124.0673748, + 44.5931126 + ], + [ + -124.0673097, + 44.5934066 + ], + [ + -124.0673026, + 44.5934488 + ], + [ + -124.067292, + 44.5935258 + ], + [ + -124.0672827, + 44.5936028 + ], + [ + -124.0672641, + 44.593757 + ], + [ + -124.0672018, + 44.5942175 + ], + [ + -124.0671366, + 44.5946177 + ], + [ + -124.067127, + 44.5946994 + ], + [ + -124.0671163, + 44.5949086 + ], + [ + -124.0671373, + 44.595235 + ], + [ + -124.0670825, + 44.5957807 + ], + [ + -124.0670188, + 44.5963577 + ], + [ + -124.0670088, + 44.5964925 + ], + [ + -124.0670028, + 44.5966274 + ], + [ + -124.0669957, + 44.5968974 + ], + [ + -124.0669888, + 44.5970773 + ], + [ + -124.0669766, + 44.5973073 + ], + [ + -124.0669615, + 44.5975373 + ], + [ + -124.0669003, + 44.5981749 + ], + [ + -124.066853, + 44.5987679 + ], + [ + -124.0668338, + 44.5989793 + ], + [ + -124.0668105, + 44.5991904 + ], + [ + -124.0667831, + 44.5993843 + ], + [ + -124.066772, + 44.5994371 + ], + [ + -124.0667443, + 44.5995423 + ], + [ + -124.066678, + 44.5997514 + ], + [ + -124.0666356, + 44.5998912 + ], + [ + -124.0666153, + 44.5999717 + ], + [ + -124.0665842, + 44.6001031 + ], + [ + -124.0665552, + 44.6002347 + ], + [ + -124.0665406, + 44.6003226 + ], + [ + -124.0665319, + 44.6004305 + ], + [ + -124.0665673, + 44.6009462 + ], + [ + -124.0665901, + 44.601207 + ], + [ + -124.0665966, + 44.601294 + ], + [ + -124.0665987, + 44.60134 + ], + [ + -124.066599, + 44.6013859 + ], + [ + -124.0665952, + 44.6014778 + ], + [ + -124.0665902, + 44.6015391 + ], + [ + -124.0665626, + 44.6017841 + ], + [ + -124.0665057, + 44.6021944 + ], + [ + -124.0665012, + 44.6022532 + ], + [ + -124.0664878, + 44.602677 + ], + [ + -124.0664661, + 44.6030978 + ], + [ + -124.0664525, + 44.6033636 + ], + [ + -124.0664243, + 44.6036245 + ], + [ + -124.0663794, + 44.6039643 + ], + [ + -124.0663591, + 44.604132 + ], + [ + -124.0663548, + 44.6041855 + ], + [ + -124.0663535, + 44.6042391 + ], + [ + -124.0663547, + 44.6043464 + ], + [ + -124.0663544, + 44.6044179 + ], + [ + -124.0663525, + 44.6044587 + ], + [ + -124.0663058, + 44.6049243 + ], + [ + -124.0662994, + 44.60506 + ], + [ + -124.0662866, + 44.6054672 + ], + [ + -124.0662817, + 44.605544 + ], + [ + -124.0662748, + 44.6056209 + ], + [ + -124.066259, + 44.6057746 + ], + [ + -124.0662506, + 44.6058771 + ], + [ + -124.0662478, + 44.6059355 + ], + [ + -124.066248, + 44.6059595 + ], + [ + -124.0662499, + 44.6059833 + ], + [ + -124.066252, + 44.6059992 + ], + [ + -124.0662557, + 44.6060204 + ], + [ + -124.0662618, + 44.6060486 + ], + [ + -124.0662715, + 44.6060862 + ], + [ + -124.0662854, + 44.6061362 + ], + [ + -124.0662911, + 44.6061571 + ], + [ + -124.0662971, + 44.6061779 + ], + [ + -124.066305, + 44.6061993 + ], + [ + -124.0663089, + 44.6062081 + ], + [ + -124.0663208, + 44.6062291 + ], + [ + -124.0663378, + 44.6062521 + ], + [ + -124.0663511, + 44.6062689 + ], + [ + -124.0663788, + 44.6063017 + ], + [ + -124.0663978, + 44.6063233 + ], + [ + -124.0664761, + 44.6064082 + ], + [ + -124.0665036, + 44.6064373 + ], + [ + -124.0665318, + 44.6064659 + ], + [ + -124.0665891, + 44.6065227 + ], + [ + -124.066627, + 44.6065612 + ], + [ + -124.0666481, + 44.6065838 + ], + [ + -124.0666717, + 44.6066103 + ], + [ + -124.066691, + 44.606634 + ], + [ + -124.0667085, + 44.6066583 + ], + [ + -124.0667191, + 44.6066748 + ], + [ + -124.066732, + 44.6066971 + ], + [ + -124.066747, + 44.6067274 + ], + [ + -124.0667543, + 44.6067448 + ], + [ + -124.0667617, + 44.606765 + ], + [ + -124.0667686, + 44.6067882 + ], + [ + -124.0667748, + 44.6068149 + ], + [ + -124.0667794, + 44.6068456 + ], + [ + -124.0667808, + 44.606862 + ], + [ + -124.0667714, + 44.6071361 + ], + [ + -124.0667956, + 44.6074643 + ], + [ + -124.0668061, + 44.6076421 + ], + [ + -124.0668125, + 44.6077012 + ], + [ + -124.0668179, + 44.6077349 + ], + [ + -124.0668263, + 44.6077734 + ], + [ + -124.0668342, + 44.6078027 + ], + [ + -124.0668431, + 44.6078318 + ], + [ + -124.0668631, + 44.6078896 + ], + [ + -124.0668776, + 44.6079278 + ], + [ + -124.0669384, + 44.6080802 + ], + [ + -124.0670754, + 44.6084362 + ], + [ + -124.0671385, + 44.6086018 + ], + [ + -124.0672001, + 44.6087676 + ], + [ + -124.0672034, + 44.6087784 + ], + [ + -124.0672054, + 44.6087893 + ], + [ + -124.0672063, + 44.6087966 + ], + [ + -124.0672068, + 44.6088064 + ], + [ + -124.0672067, + 44.6088195 + ], + [ + -124.0672058, + 44.6088371 + ], + [ + -124.0672042, + 44.6088606 + ], + [ + -124.0672039, + 44.608874 + ], + [ + -124.0672045, + 44.6088892 + ], + [ + -124.0672054, + 44.6088973 + ], + [ + -124.067207, + 44.6089058 + ], + [ + -124.0672179, + 44.6089533 + ], + [ + -124.0672297, + 44.6090007 + ], + [ + -124.0672383, + 44.6090323 + ], + [ + -124.0672512, + 44.6090741 + ], + [ + -124.0672594, + 44.6090978 + ], + [ + -124.0673083, + 44.6092322 + ], + [ + -124.0673895, + 44.6094595 + ], + [ + -124.0673962, + 44.6094764 + ], + [ + -124.0674039, + 44.6094931 + ], + [ + -124.0674214, + 44.6095259 + ], + [ + -124.0674344, + 44.6095475 + ], + [ + -124.0674889, + 44.6096332 + ], + [ + -124.0675033, + 44.6096579 + ], + [ + -124.0675181, + 44.6096866 + ], + [ + -124.0675249, + 44.6097022 + ], + [ + -124.067585, + 44.6098485 + ], + [ + -124.0676439, + 44.6099951 + ], + [ + -124.0677411, + 44.6102414 + ], + [ + -124.0678104, + 44.6104358 + ], + [ + -124.0678219, + 44.6104633 + ], + [ + -124.0678316, + 44.6104845 + ], + [ + -124.0678419, + 44.6105055 + ], + [ + -124.067864, + 44.6105472 + ], + [ + -124.0678796, + 44.6105748 + ], + [ + -124.0679445, + 44.6106843 + ], + [ + -124.0681261, + 44.6109835 + ], + [ + -124.0683375, + 44.6114375 + ], + [ + -124.0683488, + 44.6114557 + ], + [ + -124.0683608, + 44.6114736 + ], + [ + -124.0683869, + 44.6115089 + ], + [ + -124.0684054, + 44.6115321 + ], + [ + -124.0684813, + 44.6116239 + ], + [ + -124.0685019, + 44.6116504 + ], + [ + -124.0685238, + 44.6116813 + ], + [ + -124.0685456, + 44.6117163 + ], + [ + -124.0685652, + 44.611752 + ], + [ + -124.0686019, + 44.6118243 + ], + [ + -124.0686275, + 44.6118723 + ], + [ + -124.0686436, + 44.6118993 + ], + [ + -124.0686639, + 44.6119296 + ], + [ + -124.0686794, + 44.6119504 + ], + [ + -124.0686958, + 44.6119709 + ], + [ + -124.0687072, + 44.6119844 + ], + [ + -124.068723, + 44.612002 + ], + [ + -124.0687454, + 44.6120248 + ], + [ + -124.0687589, + 44.6120375 + ], + [ + -124.0687749, + 44.6120516 + ], + [ + -124.0687941, + 44.6120672 + ], + [ + -124.0689366, + 44.6121766 + ], + [ + -124.0660195, + 44.6133543 + ], + [ + -124.0661675, + 44.6134867 + ], + [ + -124.066263, + 44.6134694 + ], + [ + -124.0673297, + 44.6131829 + ], + [ + -124.0679565, + 44.6131167 + ], + [ + -124.067982, + 44.6134284 + ], + [ + -124.0682876, + 44.6133953 + ], + [ + -124.0687354, + 44.6134072 + ], + [ + -124.0689433, + 44.6137098 + ], + [ + -124.0813143, + 44.6088557 + ], + [ + -124.0818463, + 44.6114344 + ], + [ + -124.066998, + 44.6174677 + ], + [ + -124.0637072, + 44.621303 + ], + [ + -124.063893, + 44.6214054 + ], + [ + -124.0647338, + 44.6204187 + ], + [ + -124.0647453, + 44.6204649 + ], + [ + -124.0652587, + 44.6225354 + ], + [ + -124.0653228, + 44.622795 + ], + [ + -124.0658191, + 44.6239498 + ], + [ + -124.0661689, + 44.6244771 + ], + [ + -124.0659163, + 44.6250555 + ], + [ + -124.0661252, + 44.6258223 + ], + [ + -124.066995, + 44.6258384 + ], + [ + -124.0670722, + 44.6261028 + ], + [ + -124.0670952, + 44.6262324 + ], + [ + -124.0671136, + 44.6263625 + ], + [ + -124.0671232, + 44.6264493 + ], + [ + -124.0671327, + 44.6265652 + ], + [ + -124.0671392, + 44.6267198 + ], + [ + -124.0671398, + 44.6268081 + ], + [ + -124.067138, + 44.6269591 + ], + [ + -124.0671332, + 44.6271103 + ], + [ + -124.0671271, + 44.627211 + ], + [ + -124.067114, + 44.627345 + ], + [ + -124.0671033, + 44.6274214 + ], + [ + -124.0670878, + 44.6275083 + ], + [ + -124.066787, + 44.629003 + ], + [ + -124.0666764, + 44.6295617 + ], + [ + -124.0666474, + 44.6296959 + ], + [ + -124.066613, + 44.6298296 + ], + [ + -124.0665864, + 44.6299181 + ], + [ + -124.0665453, + 44.6300352 + ], + [ + -124.0665187, + 44.6301014 + ], + [ + -124.066485, + 44.6301764 + ], + [ + -124.0661772, + 44.6308129 + ], + [ + -124.0658122, + 44.6315767 + ], + [ + -124.0656294, + 44.6319622 + ], + [ + -124.0654516, + 44.632349 + ], + [ + -124.0654079, + 44.63245 + ], + [ + -124.0653667, + 44.6325515 + ], + [ + -124.0652897, + 44.6327555 + ], + [ + -124.065144, + 44.6331654 + ], + [ + -124.0650727, + 44.6333631 + ], + [ + -124.0650034, + 44.6335611 + ], + [ + -124.0649598, + 44.6336936 + ], + [ + -124.0649066, + 44.6338711 + ], + [ + -124.0648513, + 44.6340931 + ], + [ + -124.064806, + 44.6343163 + ], + [ + -124.0647266, + 44.6347638 + ], + [ + -124.0646667, + 44.6350612 + ], + [ + -124.0645402, + 44.6355453 + ], + [ + -124.064525, + 44.6356148 + ], + [ + -124.0645082, + 44.6357156 + ], + [ + -124.064497, + 44.6358167 + ], + [ + -124.0644823, + 44.6360196 + ], + [ + -124.064471, + 44.6361548 + ], + [ + -124.0644614, + 44.6362319 + ], + [ + -124.064447, + 44.6363398 + ], + [ + -124.064431, + 44.6364476 + ], + [ + -124.0644168, + 44.636519 + ], + [ + -124.0644068, + 44.6365596 + ], + [ + -124.064393, + 44.6366056 + ], + [ + -124.0643739, + 44.6366578 + ], + [ + -124.0643327, + 44.6367553 + ], + [ + -124.0642897, + 44.6368522 + ], + [ + -124.0642009, + 44.6370451 + ], + [ + -124.0640087, + 44.6374578 + ], + [ + -124.0639687, + 44.6375491 + ], + [ + -124.0639305, + 44.6376408 + ], + [ + -124.0638587, + 44.6378252 + ], + [ + -124.0638135, + 44.6379487 + ], + [ + -124.0637556, + 44.6381137 + ], + [ + -124.0635716, + 44.6387272 + ], + [ + -124.0635409, + 44.638814 + ], + [ + -124.0633874, + 44.639218 + ], + [ + -124.063303, + 44.6394365 + ], + [ + -124.0632767, + 44.6395098 + ], + [ + -124.0632522, + 44.6395835 + ], + [ + -124.0632075, + 44.6397315 + ], + [ + -124.0631267, + 44.6400288 + ], + [ + -124.0629318, + 44.640765 + ], + [ + -124.0628407, + 44.6411135 + ], + [ + -124.0627519, + 44.6414623 + ], + [ + -124.0627296, + 44.6415562 + ], + [ + -124.0627086, + 44.6416503 + ], + [ + -124.0626679, + 44.6418386 + ], + [ + -124.0626152, + 44.6420875 + ], + [ + -124.0625647, + 44.6423367 + ], + [ + -124.0625532, + 44.642399 + ], + [ + -124.0625434, + 44.6424615 + ], + [ + -124.0625274, + 44.6425867 + ], + [ + -124.0625005, + 44.6428374 + ], + [ + -124.0624968, + 44.6428776 + ], + [ + -124.0624947, + 44.642918 + ], + [ + -124.0624943, + 44.642945 + ], + [ + -124.062495, + 44.6429809 + ], + [ + -124.0624982, + 44.6430287 + ], + [ + -124.0625012, + 44.6430559 + ], + [ + -124.0625057, + 44.6430868 + ], + [ + -124.062508, + 44.6430959 + ], + [ + -124.0625116, + 44.6431045 + ], + [ + -124.0625148, + 44.6431101 + ], + [ + -124.0625197, + 44.6431174 + ], + [ + -124.0625276, + 44.6431266 + ], + [ + -124.0625401, + 44.6431385 + ], + [ + -124.062548, + 44.643145 + ], + [ + -124.0625576, + 44.6431524 + ], + [ + -124.0625692, + 44.6431606 + ], + [ + -124.0625829, + 44.6431698 + ], + [ + -124.0626196, + 44.6431945 + ], + [ + -124.0626389, + 44.6432092 + ], + [ + -124.0626483, + 44.6432173 + ], + [ + -124.0626573, + 44.6432262 + ], + [ + -124.0626655, + 44.6432361 + ], + [ + -124.0626724, + 44.6432472 + ], + [ + -124.0626818, + 44.6432668 + ], + [ + -124.06269, + 44.6432873 + ], + [ + -124.0626946, + 44.6433014 + ], + [ + -124.0626995, + 44.6433203 + ], + [ + -124.0627016, + 44.6433312 + ], + [ + -124.0627032, + 44.6433437 + ], + [ + -124.0627041, + 44.6433579 + ], + [ + -124.0627037, + 44.6433739 + ], + [ + -124.0627028, + 44.6433823 + ], + [ + -124.0627013, + 44.6433912 + ], + [ + -124.062699, + 44.6434005 + ], + [ + -124.0626958, + 44.6434102 + ], + [ + -124.0626923, + 44.6434184 + ], + [ + -124.0626883, + 44.6434265 + ], + [ + -124.0626787, + 44.6434425 + ], + [ + -124.0626713, + 44.6434529 + ], + [ + -124.0626606, + 44.6434668 + ], + [ + -124.0626131, + 44.6435216 + ], + [ + -124.0626002, + 44.6435374 + ], + [ + -124.0625868, + 44.6435559 + ], + [ + -124.0625805, + 44.6435659 + ], + [ + -124.0625746, + 44.6435768 + ], + [ + -124.0625693, + 44.6435886 + ], + [ + -124.0625651, + 44.6436015 + ], + [ + -124.0625254, + 44.643756 + ], + [ + -124.0624885, + 44.6439111 + ], + [ + -124.0624287, + 44.6441701 + ], + [ + -124.0624122, + 44.644257 + ], + [ + -124.0624045, + 44.644307 + ], + [ + -124.0624011, + 44.6443368 + ], + [ + -124.0623988, + 44.6443666 + ], + [ + -124.0623974, + 44.6444262 + ], + [ + -124.0623983, + 44.6444659 + ], + [ + -124.0624013, + 44.6445188 + ], + [ + -124.062421, + 44.6447302 + ], + [ + -124.0624686, + 44.6451203 + ], + [ + -124.0624712, + 44.6451583 + ], + [ + -124.0624727, + 44.6451968 + ], + [ + -124.0624726, + 44.6452226 + ], + [ + -124.0624707, + 44.6452568 + ], + [ + -124.0624686, + 44.6452762 + ], + [ + -124.0624649, + 44.6452983 + ], + [ + -124.0624591, + 44.6453231 + ], + [ + -124.0624499, + 44.645351 + ], + [ + -124.0624438, + 44.6453656 + ], + [ + -124.0624362, + 44.645381 + ], + [ + -124.062427, + 44.645397 + ], + [ + -124.0622731, + 44.6456434 + ], + [ + -124.062084, + 44.6458929 + ], + [ + -124.0620623, + 44.645924 + ], + [ + -124.0620434, + 44.645956 + ], + [ + -124.0620321, + 44.6459777 + ], + [ + -124.0620185, + 44.6460071 + ], + [ + -124.0620023, + 44.6460468 + ], + [ + -124.0619458, + 44.646208 + ], + [ + -124.0617654, + 44.6467005 + ], + [ + -124.0616965, + 44.6468827 + ], + [ + -124.061625, + 44.6470644 + ], + [ + -124.0615736, + 44.6471848 + ], + [ + -124.0615319, + 44.6472752 + ], + [ + -124.061488, + 44.647365 + ], + [ + -124.0613978, + 44.6475441 + ], + [ + -124.0613389, + 44.6476638 + ], + [ + -124.0611725, + 44.6480002 + ], + [ + -124.0611211, + 44.6481132 + ], + [ + -124.0610941, + 44.6481783 + ], + [ + -124.0610662, + 44.6482533 + ], + [ + -124.0610173, + 44.6483983 + ], + [ + -124.0609703, + 44.6485436 + ], + [ + -124.0608781, + 44.6488344 + ], + [ + -124.0607098, + 44.649363 + ], + [ + -124.0605292, + 44.6497976 + ], + [ + -124.060509, + 44.6498617 + ], + [ + -124.0604904, + 44.6499261 + ], + [ + -124.0604569, + 44.6500552 + ], + [ + -124.0604365, + 44.6501416 + ], + [ + -124.0604106, + 44.6502571 + ], + [ + -124.0603939, + 44.6503355 + ], + [ + -124.0603789, + 44.650414 + ], + [ + -124.0603702, + 44.6504664 + ], + [ + -124.0603607, + 44.6505365 + ], + [ + -124.0603586, + 44.6510792 + ], + [ + -124.060344, + 44.6512071 + ], + [ + -124.0603267, + 44.6513349 + ], + [ + -124.0603128, + 44.6514198 + ], + [ + -124.0602904, + 44.6515328 + ], + [ + -124.0601797, + 44.652028 + ], + [ + -124.0600691, + 44.6525123 + ], + [ + -124.0599466, + 44.6529524 + ], + [ + -124.0598319, + 44.653445 + ], + [ + -124.0596831, + 44.654098 + ], + [ + -124.0595464, + 44.6544764 + ], + [ + -124.0595411, + 44.6545022 + ], + [ + -124.0594797, + 44.6548536 + ], + [ + -124.0594035, + 44.655302 + ], + [ + -124.0593459, + 44.6556327 + ], + [ + -124.0592855, + 44.6559633 + ], + [ + -124.0591523, + 44.6565306 + ], + [ + -124.0590374, + 44.6571224 + ], + [ + -124.0589388, + 44.6576208 + ], + [ + -124.0588884, + 44.6578728 + ], + [ + -124.0588356, + 44.6581246 + ], + [ + -124.0588285, + 44.6581537 + ], + [ + -124.0588203, + 44.6581826 + ], + [ + -124.0588007, + 44.6582399 + ], + [ + -124.0587861, + 44.6582778 + ], + [ + -124.0587247, + 44.6584294 + ], + [ + -124.058709, + 44.6584731 + ], + [ + -124.0586877, + 44.6585351 + ], + [ + -124.0586672, + 44.6585972 + ], + [ + -124.0586555, + 44.6586388 + ], + [ + -124.0586497, + 44.6586628 + ], + [ + -124.0586443, + 44.6586902 + ], + [ + -124.0586423, + 44.6587048 + ], + [ + -124.0586399, + 44.6587219 + ], + [ + -124.0586371, + 44.6587676 + ], + [ + -124.058638, + 44.6588133 + ], + [ + -124.0586402, + 44.6588437 + ], + [ + -124.0586447, + 44.6588842 + ], + [ + -124.0586686, + 44.659046 + ], + [ + -124.0586737, + 44.6590923 + ], + [ + -124.0586764, + 44.6591453 + ], + [ + -124.0586778, + 44.6593156 + ], + [ + -124.0586767, + 44.659486 + ], + [ + -124.0586736, + 44.6595996 + ], + [ + -124.0586205, + 44.6600639 + ], + [ + -124.0586208, + 44.6601303 + ], + [ + -124.05863, + 44.6602903 + ], + [ + -124.0586424, + 44.6604501 + ], + [ + -124.0586731, + 44.6607696 + ], + [ + -124.0587033, + 44.66107 + ], + [ + -124.0587365, + 44.6613702 + ], + [ + -124.0587568, + 44.6615252 + ], + [ + -124.0587788, + 44.66168 + ], + [ + -124.0588234, + 44.6619897 + ], + [ + -124.0588473, + 44.6621753 + ], + [ + -124.0588677, + 44.6623611 + ], + [ + -124.0588793, + 44.662485 + ], + [ + -124.0588818, + 44.6625406 + ], + [ + -124.0588801, + 44.6625962 + ], + [ + -124.058877, + 44.6626333 + ], + [ + -124.0588709, + 44.6626827 + ], + [ + -124.05886, + 44.6627485 + ], + [ + -124.0588425, + 44.6628362 + ], + [ + -124.0588185, + 44.6629526 + ], + [ + -124.0588148, + 44.6629687 + ], + [ + -124.0588102, + 44.6629846 + ], + [ + -124.0587986, + 44.6630163 + ], + [ + -124.0587896, + 44.6630373 + ], + [ + -124.0587513, + 44.6631207 + ], + [ + -124.0587418, + 44.6631445 + ], + [ + -124.058733, + 44.6631717 + ], + [ + -124.0587294, + 44.6631862 + ], + [ + -124.0587266, + 44.6632018 + ], + [ + -124.058726, + 44.6632101 + ], + [ + -124.0587263, + 44.6632185 + ], + [ + -124.058727, + 44.6632241 + ], + [ + -124.0587284, + 44.6632316 + ], + [ + -124.0587312, + 44.6632416 + ], + [ + -124.0587331, + 44.6632474 + ], + [ + -124.0587357, + 44.6632539 + ], + [ + -124.0587389, + 44.6632613 + ], + [ + -124.058743, + 44.6632698 + ], + [ + -124.058748, + 44.6632794 + ], + [ + -124.058754, + 44.6632902 + ], + [ + -124.0587626, + 44.6633035 + ], + [ + -124.058773, + 44.6633162 + ], + [ + -124.0587806, + 44.6633244 + ], + [ + -124.0587914, + 44.663335 + ], + [ + -124.0588378, + 44.663376 + ], + [ + -124.0588504, + 44.6633878 + ], + [ + -124.0588635, + 44.6634016 + ], + [ + -124.0588698, + 44.6634092 + ], + [ + -124.0588758, + 44.6634174 + ], + [ + -124.0588814, + 44.6634265 + ], + [ + -124.0588861, + 44.6634366 + ], + [ + -124.0588897, + 44.6634477 + ], + [ + -124.0589061, + 44.6635207 + ], + [ + -124.0589199, + 44.6635938 + ], + [ + -124.0589279, + 44.6636427 + ], + [ + -124.0589371, + 44.6637079 + ], + [ + -124.0590002, + 44.6641948 + ], + [ + -124.0590491, + 44.6645994 + ], + [ + -124.0590676, + 44.6647342 + ], + [ + -124.0590828, + 44.6648135 + ], + [ + -124.0591041, + 44.664892 + ], + [ + -124.059121, + 44.664944 + ], + [ + -124.0591458, + 44.6650131 + ], + [ + -124.0592523, + 44.6652885 + ], + [ + -124.0592785, + 44.6653678 + ], + [ + -124.059347, + 44.6655915 + ], + [ + -124.0594134, + 44.6658155 + ], + [ + -124.0594541, + 44.6659654 + ], + [ + -124.0594919, + 44.6661197 + ], + [ + -124.059527, + 44.6662743 + ], + [ + -124.0595947, + 44.6665839 + ], + [ + -124.0596424, + 44.6667899 + ], + [ + -124.0597653, + 44.6672542 + ], + [ + -124.0598024, + 44.6674094 + ], + [ + -124.0598466, + 44.667625 + ], + [ + -124.0598871, + 44.6678409 + ], + [ + -124.059968, + 44.6682729 + ], + [ + -124.0600365, + 44.6686063 + ], + [ + -124.0601093, + 44.6689393 + ], + [ + -124.0601391, + 44.6690623 + ], + [ + -124.0601728, + 44.6691847 + ], + [ + -124.0601978, + 44.6692659 + ], + [ + -124.0602346, + 44.6693736 + ], + [ + -124.0602576, + 44.6694348 + ], + [ + -124.0605463, + 44.6701645 + ], + [ + -124.0607219, + 44.6706157 + ], + [ + -124.0607458, + 44.6706737 + ], + [ + -124.0607713, + 44.6707313 + ], + [ + -124.0608272, + 44.6708454 + ], + [ + -124.0608676, + 44.6709207 + ], + [ + -124.0609247, + 44.6710203 + ], + [ + -124.0610058, + 44.671152 + ], + [ + -124.0610266, + 44.6711838 + ], + [ + -124.0610482, + 44.6712151 + ], + [ + -124.0610937, + 44.6712769 + ], + [ + -124.0611253, + 44.6713176 + ], + [ + -124.0611685, + 44.6713713 + ], + [ + -124.0612271, + 44.6714426 + ], + [ + -124.061241, + 44.6714582 + ], + [ + -124.0612562, + 44.6714734 + ], + [ + -124.0612881, + 44.6715029 + ], + [ + -124.0613089, + 44.6715228 + ], + [ + -124.0613201, + 44.6715345 + ], + [ + -124.0613319, + 44.6715483 + ], + [ + -124.0613377, + 44.6715559 + ], + [ + -124.0613434, + 44.6715642 + ], + [ + -124.0613645, + 44.6715992 + ], + [ + -124.0613836, + 44.6716346 + ], + [ + -124.0613955, + 44.6716585 + ], + [ + -124.0614103, + 44.6716905 + ], + [ + -124.0614289, + 44.6717334 + ], + [ + -124.0614526, + 44.6717909 + ], + [ + -124.0615811, + 44.67212 + ], + [ + -124.0616136, + 44.6721964 + ], + [ + -124.0616477, + 44.6722724 + ], + [ + -124.0616721, + 44.6723227 + ], + [ + -124.0617075, + 44.672389 + ], + [ + -124.0617295, + 44.6724263 + ], + [ + -124.0617567, + 44.6724686 + ], + [ + -124.0617899, + 44.672515 + ], + [ + -124.0618255, + 44.6725605 + ], + [ + -124.0618995, + 44.6726502 + ], + [ + -124.0619478, + 44.6727103 + ], + [ + -124.061974, + 44.6727452 + ], + [ + -124.0621051, + 44.6729288 + ], + [ + -124.0622342, + 44.6731131 + ], + [ + -124.0622634, + 44.6731573 + ], + [ + -124.0622908, + 44.6732022 + ], + [ + -124.0623439, + 44.6732924 + ], + [ + -124.0623811, + 44.673352 + ], + [ + -124.0624042, + 44.6733855 + ], + [ + -124.0624328, + 44.673423 + ], + [ + -124.0624726, + 44.6734694 + ], + [ + -124.0625151, + 44.6735144 + ], + [ + -124.0625447, + 44.6735438 + ], + [ + -124.0625852, + 44.6735824 + ], + [ + -124.0627512, + 44.6737352 + ], + [ + -124.0628082, + 44.6737894 + ], + [ + -124.0628658, + 44.6738429 + ], + [ + -124.0629051, + 44.6738782 + ], + [ + -124.0629594, + 44.6739246 + ], + [ + -124.0629917, + 44.6739508 + ], + [ + -124.0630045, + 44.6739605 + ], + [ + -124.0630178, + 44.6739696 + ], + [ + -124.0630454, + 44.6739867 + ], + [ + -124.0630647, + 44.6739971 + ], + [ + -124.0630914, + 44.67401 + ], + [ + -124.0631285, + 44.6740257 + ], + [ + -124.0631504, + 44.674034 + ], + [ + -124.063176, + 44.674043 + ], + [ + -124.063206, + 44.6740528 + ], + [ + -124.0632409, + 44.6740636 + ], + [ + -124.0633367, + 44.6740919 + ], + [ + -124.0633949, + 44.674109 + ], + [ + -124.0634531, + 44.6741248 + ], + [ + -124.0634919, + 44.6741339 + ], + [ + -124.0635393, + 44.6741429 + ], + [ + -124.0635681, + 44.674147 + ], + [ + -124.0636009, + 44.6741501 + ], + [ + -124.0636183, + 44.674151 + ], + [ + -124.0636368, + 44.6741513 + ], + [ + -124.0636564, + 44.6741509 + ], + [ + -124.0636773, + 44.6741495 + ], + [ + -124.0636952, + 44.6741476 + ], + [ + -124.0637132, + 44.6741452 + ], + [ + -124.063749, + 44.6741393 + ], + [ + -124.0637728, + 44.6741344 + ], + [ + -124.0638045, + 44.6741268 + ], + [ + -124.0638466, + 44.6741152 + ], + [ + -124.0638704, + 44.6741078 + ], + [ + -124.0638976, + 44.6740988 + ], + [ + -124.0639284, + 44.6740879 + ], + [ + -124.0639633, + 44.6740747 + ], + [ + -124.0640028, + 44.6740589 + ], + [ + -124.0640411, + 44.6740427 + ], + [ + -124.0641159, + 44.6740104 + ], + [ + -124.064166, + 44.6739893 + ], + [ + -124.0641952, + 44.6739777 + ], + [ + -124.0645512, + 44.6738445 + ], + [ + -124.0646156, + 44.6738186 + ], + [ + -124.0646788, + 44.6737915 + ], + [ + -124.0647204, + 44.6737727 + ], + [ + -124.0647755, + 44.6737471 + ], + [ + -124.0648483, + 44.6737117 + ], + [ + -124.0648856, + 44.6736922 + ], + [ + -124.0649214, + 44.6736714 + ], + [ + -124.0649445, + 44.6736569 + ], + [ + -124.0649743, + 44.6736369 + ], + [ + -124.0650126, + 44.673609 + ], + [ + -124.0650338, + 44.6735926 + ], + [ + -124.0650575, + 44.6735735 + ], + [ + -124.065084, + 44.6735512 + ], + [ + -124.0650898, + 44.6735458 + ], + [ + -124.065095, + 44.6735402 + ], + [ + -124.0650981, + 44.6735364 + ], + [ + -124.0651022, + 44.6735312 + ], + [ + -124.0651172, + 44.6735097 + ], + [ + -124.0651217, + 44.6735037 + ], + [ + -124.0651273, + 44.6734969 + ], + [ + -124.0651305, + 44.6734934 + ], + [ + -124.0651342, + 44.6734898 + ], + [ + -124.0651802, + 44.6734486 + ], + [ + -124.0652285, + 44.6734096 + ], + [ + -124.0652619, + 44.6733847 + ], + [ + -124.065308, + 44.6733525 + ], + [ + -124.0653723, + 44.6733112 + ], + [ + -124.0654105, + 44.6732881 + ], + [ + -124.0654555, + 44.673262 + ], + [ + -124.0655087, + 44.6732324 + ], + [ + -124.0655337, + 44.6732191 + ], + [ + -124.0655598, + 44.6732061 + ], + [ + -124.0655777, + 44.6731978 + ], + [ + -124.0656022, + 44.6731876 + ], + [ + -124.0656163, + 44.6731822 + ], + [ + -124.0656327, + 44.6731767 + ], + [ + -124.0656515, + 44.6731712 + ], + [ + -124.0656732, + 44.6731662 + ], + [ + -124.0656847, + 44.6731641 + ], + [ + -124.0656971, + 44.6731624 + ], + [ + -124.0657102, + 44.6731613 + ], + [ + -124.0657242, + 44.6731608 + ], + [ + -124.0657391, + 44.6731613 + ], + [ + -124.0657548, + 44.6731629 + ], + [ + -124.0657714, + 44.673166 + ], + [ + -124.0657766, + 44.6731673 + ], + [ + -124.0657822, + 44.6731686 + ], + [ + -124.065794, + 44.6731717 + ], + [ + -124.0658023, + 44.6731739 + ], + [ + -124.0658135, + 44.6731772 + ], + [ + -124.0658284, + 44.673182 + ], + [ + -124.0658367, + 44.6731849 + ], + [ + -124.0658457, + 44.6731885 + ], + [ + -124.0658553, + 44.6731928 + ], + [ + -124.06586, + 44.6731952 + ], + [ + -124.0658646, + 44.6731978 + ], + [ + -124.065869, + 44.6732006 + ], + [ + -124.0658731, + 44.6732037 + ], + [ + -124.0658768, + 44.6732071 + ], + [ + -124.0658796, + 44.6732108 + ], + [ + -124.0658807, + 44.6732128 + ], + [ + -124.0658814, + 44.6732148 + ], + [ + -124.0658818, + 44.6732169 + ], + [ + -124.0658818, + 44.6732192 + ], + [ + -124.0658813, + 44.6732215 + ], + [ + -124.0658804, + 44.6732239 + ], + [ + -124.0658765, + 44.6732304 + ], + [ + -124.0658718, + 44.673237 + ], + [ + -124.0658682, + 44.6732415 + ], + [ + -124.065863, + 44.6732474 + ], + [ + -124.0658554, + 44.6732553 + ], + [ + -124.0658442, + 44.673266 + ], + [ + -124.0658283, + 44.6732801 + ], + [ + -124.065807, + 44.673299 + ], + [ + -124.0657955, + 44.6733097 + ], + [ + -124.0657936, + 44.6733115 + ], + [ + -124.0657915, + 44.6733132 + ], + [ + -124.0657867, + 44.6733167 + ], + [ + -124.0657831, + 44.6733191 + ], + [ + -124.0657781, + 44.6733223 + ], + [ + -124.0657563, + 44.6733348 + ], + [ + -124.0657503, + 44.6733384 + ], + [ + -124.065744, + 44.6733424 + ], + [ + -124.0657409, + 44.6733445 + ], + [ + -124.065738, + 44.6733467 + ], + [ + -124.0657353, + 44.6733491 + ], + [ + -124.0657329, + 44.6733515 + ], + [ + -124.0657309, + 44.6733541 + ], + [ + -124.0657303, + 44.6733554 + ], + [ + -124.0657298, + 44.6733567 + ], + [ + -124.0657295, + 44.6733581 + ], + [ + -124.0657296, + 44.6733595 + ], + [ + -124.0657299, + 44.6733609 + ], + [ + -124.0657307, + 44.6733623 + ], + [ + -124.0657318, + 44.6733637 + ], + [ + -124.0657335, + 44.6733652 + ], + [ + -124.0657396, + 44.6733691 + ], + [ + -124.0657464, + 44.6733723 + ], + [ + -124.0657513, + 44.6733741 + ], + [ + -124.0657583, + 44.673376 + ], + [ + -124.0657684, + 44.6733779 + ], + [ + -124.0657745, + 44.6733787 + ], + [ + -124.0657816, + 44.6733793 + ], + [ + -124.0657901, + 44.6733796 + ], + [ + -124.0658001, + 44.6733797 + ], + [ + -124.0658119, + 44.6733793 + ], + [ + -124.0658256, + 44.6733784 + ], + [ + -124.0658414, + 44.673377 + ], + [ + -124.0658594, + 44.673375 + ], + [ + -124.0658794, + 44.6733727 + ], + [ + -124.0658896, + 44.6733715 + ], + [ + -124.0659001, + 44.6733704 + ], + [ + -124.0659291, + 44.6733677 + ], + [ + -124.0659582, + 44.6733647 + ], + [ + -124.0659775, + 44.6733623 + ], + [ + -124.0660032, + 44.6733583 + ], + [ + -124.0660179, + 44.6733556 + ], + [ + -124.0660345, + 44.6733519 + ], + [ + -124.0660534, + 44.6733468 + ], + [ + -124.0660634, + 44.6733437 + ], + [ + -124.0660741, + 44.6733401 + ], + [ + -124.0661061, + 44.6733277 + ], + [ + -124.0661364, + 44.6733144 + ], + [ + -124.0661559, + 44.673305 + ], + [ + -124.0661808, + 44.6732919 + ], + [ + -124.0662127, + 44.6732735 + ], + [ + -124.0662531, + 44.6732475 + ], + [ + -124.0662754, + 44.6732321 + ], + [ + -124.0663003, + 44.673214 + ], + [ + -124.0663284, + 44.6731928 + ], + [ + -124.0663603, + 44.6731681 + ], + [ + -124.0663791, + 44.6731521 + ], + [ + -124.0663957, + 44.6731353 + ], + [ + -124.0664059, + 44.6731238 + ], + [ + -124.0664185, + 44.6731082 + ], + [ + -124.0664655, + 44.6730435 + ], + [ + -124.06648, + 44.673025 + ], + [ + -124.0664983, + 44.6730042 + ], + [ + -124.0665091, + 44.6729933 + ], + [ + -124.0665215, + 44.6729819 + ], + [ + -124.066536, + 44.6729701 + ], + [ + -124.066553, + 44.6729578 + ], + [ + -124.0665824, + 44.6729382 + ], + [ + -124.0666123, + 44.6729191 + ], + [ + -124.0666326, + 44.6729069 + ], + [ + -124.0666601, + 44.672892 + ], + [ + -124.066676, + 44.6728843 + ], + [ + -124.0666944, + 44.6728764 + ], + [ + -124.0667156, + 44.6728687 + ], + [ + -124.066727, + 44.6728652 + ], + [ + -124.0667393, + 44.6728621 + ], + [ + -124.0667525, + 44.6728595 + ], + [ + -124.0667666, + 44.6728575 + ], + [ + -124.0667819, + 44.6728564 + ], + [ + -124.0667983, + 44.6728564 + ], + [ + -124.0668159, + 44.6728579 + ], + [ + -124.0668272, + 44.6728596 + ], + [ + -124.0668385, + 44.6728615 + ], + [ + -124.0668611, + 44.672866 + ], + [ + -124.0668762, + 44.6728693 + ], + [ + -124.0669368, + 44.6728836 + ], + [ + -124.0669542, + 44.6728874 + ], + [ + -124.0669742, + 44.6728912 + ], + [ + -124.0670381, + 44.672902 + ], + [ + -124.0671024, + 44.6729122 + ], + [ + -124.0671452, + 44.6729186 + ], + [ + -124.0671574, + 44.6729198 + ], + [ + -124.0671696, + 44.6729201 + ], + [ + -124.0671779, + 44.6729198 + ], + [ + -124.0671889, + 44.672919 + ], + [ + -124.0672037, + 44.6729173 + ], + [ + -124.0672631, + 44.6729082 + ], + [ + -124.06728, + 44.6729065 + ], + [ + -124.0672889, + 44.672906 + ], + [ + -124.0672985, + 44.672906 + ], + [ + -124.0673085, + 44.6729065 + ], + [ + -124.0673192, + 44.6729077 + ], + [ + -124.0673305, + 44.6729101 + ], + [ + -124.0673407, + 44.6729132 + ], + [ + -124.0673499, + 44.6729172 + ], + [ + -124.0673555, + 44.6729203 + ], + [ + -124.0673625, + 44.6729248 + ], + [ + -124.0673708, + 44.6729316 + ], + [ + -124.0673752, + 44.6729358 + ], + [ + -124.06738, + 44.6729409 + ], + [ + -124.0673851, + 44.6729469 + ], + [ + -124.0673907, + 44.6729541 + ], + [ + -124.0673969, + 44.6729626 + ], + [ + -124.0674132, + 44.6729856 + ], + [ + -124.0674235, + 44.6729982 + ], + [ + -124.0674296, + 44.6730046 + ], + [ + -124.0674367, + 44.673011 + ], + [ + -124.0674449, + 44.6730174 + ], + [ + -124.0674548, + 44.6730235 + ], + [ + -124.0674681, + 44.6730304 + ], + [ + -124.0674816, + 44.673037 + ], + [ + -124.0674907, + 44.6730411 + ], + [ + -124.0675029, + 44.6730464 + ], + [ + -124.0675195, + 44.6730529 + ], + [ + -124.067529, + 44.6730563 + ], + [ + -124.06754, + 44.6730599 + ], + [ + -124.0675526, + 44.6730637 + ], + [ + -124.0675672, + 44.6730675 + ], + [ + -124.0675696, + 44.673068 + ], + [ + -124.0675721, + 44.6730683 + ], + [ + -124.067577, + 44.6730685 + ], + [ + -124.0675803, + 44.6730684 + ], + [ + -124.0675848, + 44.6730678 + ], + [ + -124.0675908, + 44.6730665 + ], + [ + -124.0675942, + 44.6730655 + ], + [ + -124.0675981, + 44.6730641 + ], + [ + -124.0676027, + 44.6730624 + ], + [ + -124.0676389, + 44.6730456 + ], + [ + -124.0676437, + 44.6730437 + ], + [ + -124.0676488, + 44.6730419 + ], + [ + -124.0676542, + 44.6730404 + ], + [ + -124.0676599, + 44.6730393 + ], + [ + -124.0676628, + 44.673039 + ], + [ + -124.0676658, + 44.6730389 + ], + [ + -124.0676688, + 44.673039 + ], + [ + -124.067672, + 44.6730393 + ], + [ + -124.0676752, + 44.67304 + ], + [ + -124.0676802, + 44.6730415 + ], + [ + -124.0676849, + 44.6730435 + ], + [ + -124.0676878, + 44.6730451 + ], + [ + -124.0676914, + 44.6730475 + ], + [ + -124.0676959, + 44.6730512 + ], + [ + -124.0677012, + 44.6730567 + ], + [ + -124.0677041, + 44.6730602 + ], + [ + -124.0677071, + 44.6730644 + ], + [ + -124.0677105, + 44.6730693 + ], + [ + -124.0677141, + 44.6730752 + ], + [ + -124.0677237, + 44.6730911 + ], + [ + -124.0677296, + 44.6730997 + ], + [ + -124.0677331, + 44.673104 + ], + [ + -124.067737, + 44.6731083 + ], + [ + -124.0677415, + 44.6731124 + ], + [ + -124.0677468, + 44.6731162 + ], + [ + -124.0677498, + 44.6731179 + ], + [ + -124.0677531, + 44.6731195 + ], + [ + -124.0677567, + 44.6731209 + ], + [ + -124.0677606, + 44.673122 + ], + [ + -124.0677649, + 44.6731229 + ], + [ + -124.0677913, + 44.6731269 + ], + [ + -124.0678179, + 44.6731307 + ], + [ + -124.0678357, + 44.673133 + ], + [ + -124.0678595, + 44.6731356 + ], + [ + -124.0678731, + 44.6731368 + ], + [ + -124.0679514, + 44.673143 + ], + [ + -124.0679775, + 44.6731448 + ], + [ + -124.0681985, + 44.6731586 + ], + [ + -124.0684223, + 44.6731307 + ], + [ + -124.0684266, + 44.6731301 + ], + [ + -124.0684308, + 44.6731292 + ], + [ + -124.0684388, + 44.673127 + ], + [ + -124.0684438, + 44.6731251 + ], + [ + -124.0684502, + 44.6731222 + ], + [ + -124.0684583, + 44.6731176 + ], + [ + -124.0684627, + 44.6731147 + ], + [ + -124.0684675, + 44.6731111 + ], + [ + -124.0684729, + 44.6731068 + ], + [ + -124.0684788, + 44.6731015 + ], + [ + -124.0684853, + 44.6730953 + ], + [ + -124.0685022, + 44.673078 + ], + [ + -124.068512, + 44.6730684 + ], + [ + -124.0685174, + 44.6730636 + ], + [ + -124.0685234, + 44.6730587 + ], + [ + -124.0685416, + 44.6730438 + ], + [ + -124.0685592, + 44.6730286 + ], + [ + -124.0685935, + 44.6729975 + ], + [ + -124.0686166, + 44.6729771 + ], + [ + -124.0686303, + 44.6729658 + ], + [ + -124.0686466, + 44.6729532 + ], + [ + -124.0686531, + 44.672949 + ], + [ + -124.0686601, + 44.6729454 + ], + [ + -124.0686651, + 44.6729434 + ], + [ + -124.068672, + 44.672941 + ], + [ + -124.0686816, + 44.6729385 + ], + [ + -124.0686953, + 44.672936 + ], + [ + -124.0687033, + 44.672935 + ], + [ + -124.0687128, + 44.6729341 + ], + [ + -124.0687239, + 44.6729333 + ], + [ + -124.0687368, + 44.6729327 + ], + [ + -124.0687714, + 44.6729311 + ], + [ + -124.0687909, + 44.6729294 + ], + [ + -124.068801, + 44.672928 + ], + [ + -124.0688114, + 44.6729261 + ], + [ + -124.0688221, + 44.6729234 + ], + [ + -124.068833, + 44.6729196 + ], + [ + -124.0688383, + 44.6729172 + ], + [ + -124.0688436, + 44.6729145 + ], + [ + -124.0688532, + 44.6729087 + ], + [ + -124.0688622, + 44.6729025 + ], + [ + -124.0688678, + 44.6728982 + ], + [ + -124.0688749, + 44.6728923 + ], + [ + -124.0688839, + 44.672884 + ], + [ + -124.0688887, + 44.6728792 + ], + [ + -124.068894, + 44.6728736 + ], + [ + -124.0688998, + 44.6728671 + ], + [ + -124.0689062, + 44.6728595 + ], + [ + -124.0689132, + 44.6728508 + ], + [ + -124.0689163, + 44.6728465 + ], + [ + -124.0689191, + 44.6728421 + ], + [ + -124.0689235, + 44.672833 + ], + [ + -124.0689257, + 44.6728267 + ], + [ + -124.068928, + 44.6728182 + ], + [ + -124.06893, + 44.6728065 + ], + [ + -124.0689331, + 44.6727583 + ], + [ + -124.0689349, + 44.6727449 + ], + [ + -124.0689364, + 44.6727378 + ], + [ + -124.0689385, + 44.6727305 + ], + [ + -124.0689415, + 44.6727229 + ], + [ + -124.0689457, + 44.6727151 + ], + [ + -124.0689514, + 44.6727071 + ], + [ + -124.0689551, + 44.6727033 + ], + [ + -124.0689595, + 44.6726997 + ], + [ + -124.0689629, + 44.6726974 + ], + [ + -124.0689678, + 44.6726945 + ], + [ + -124.068975, + 44.672691 + ], + [ + -124.0689795, + 44.6726892 + ], + [ + -124.0689848, + 44.6726873 + ], + [ + -124.0689911, + 44.6726854 + ], + [ + -124.0689986, + 44.6726835 + ], + [ + -124.0690074, + 44.6726818 + ], + [ + -124.0690175, + 44.6726805 + ], + [ + -124.069023, + 44.6726801 + ], + [ + -124.0690287, + 44.6726799 + ], + [ + -124.0690347, + 44.67268 + ], + [ + -124.069041, + 44.6726804 + ], + [ + -124.0690475, + 44.6726813 + ], + [ + -124.0690541, + 44.6726826 + ], + [ + -124.0690607, + 44.6726846 + ], + [ + -124.0690639, + 44.6726858 + ], + [ + -124.069067, + 44.6726873 + ], + [ + -124.06907, + 44.6726889 + ], + [ + -124.0690729, + 44.6726909 + ], + [ + -124.0690756, + 44.6726931 + ], + [ + -124.0690868, + 44.6727037 + ], + [ + -124.0690971, + 44.6727146 + ], + [ + -124.0691033, + 44.6727221 + ], + [ + -124.0691109, + 44.6727322 + ], + [ + -124.0691148, + 44.6727381 + ], + [ + -124.0691189, + 44.6727449 + ], + [ + -124.0691231, + 44.6727527 + ], + [ + -124.0691272, + 44.6727618 + ], + [ + -124.0691309, + 44.6727723 + ], + [ + -124.0691325, + 44.672778 + ], + [ + -124.0691339, + 44.6727841 + ], + [ + -124.0691359, + 44.6727978 + ], + [ + -124.0691368, + 44.6728119 + ], + [ + -124.0691368, + 44.6728214 + ], + [ + -124.0691361, + 44.6728341 + ], + [ + -124.0691342, + 44.6728511 + ], + [ + -124.0691326, + 44.6728607 + ], + [ + -124.0691304, + 44.6728715 + ], + [ + -124.0691274, + 44.6728836 + ], + [ + -124.0691235, + 44.672897 + ], + [ + -124.0691186, + 44.6729114 + ], + [ + -124.0691147, + 44.6729192 + ], + [ + -124.069109, + 44.6729269 + ], + [ + -124.0691044, + 44.6729321 + ], + [ + -124.0690971, + 44.6729389 + ], + [ + -124.069086, + 44.6729479 + ], + [ + -124.069069, + 44.6729599 + ], + [ + -124.069044, + 44.6729756 + ], + [ + -124.06901, + 44.6729963 + ], + [ + -124.0689918, + 44.6730079 + ], + [ + -124.0689829, + 44.6730141 + ], + [ + -124.0689742, + 44.6730206 + ], + [ + -124.0689661, + 44.6730274 + ], + [ + -124.0689589, + 44.6730347 + ], + [ + -124.0689532, + 44.6730424 + ], + [ + -124.0689512, + 44.6730463 + ], + [ + -124.0689498, + 44.6730503 + ], + [ + -124.0689492, + 44.6730538 + ], + [ + -124.0689493, + 44.6730587 + ], + [ + -124.0689505, + 44.6730631 + ], + [ + -124.068953, + 44.6730676 + ], + [ + -124.0689567, + 44.6730721 + ], + [ + -124.0689676, + 44.6730825 + ], + [ + -124.0689797, + 44.6730928 + ], + [ + -124.0689883, + 44.6730997 + ], + [ + -124.0690004, + 44.6731087 + ], + [ + -124.0690174, + 44.6731208 + ], + [ + -124.0690409, + 44.6731367 + ], + [ + -124.0690728, + 44.6731578 + ], + [ + -124.06908, + 44.6731625 + ], + [ + -124.0690873, + 44.673167 + ], + [ + -124.0691022, + 44.6731757 + ], + [ + -124.0691321, + 44.6731924 + ], + [ + -124.0691515, + 44.6732036 + ], + [ + -124.0691622, + 44.6732102 + ], + [ + -124.0691683, + 44.6732147 + ], + [ + -124.0691735, + 44.6732196 + ], + [ + -124.0691766, + 44.6732232 + ], + [ + -124.0691801, + 44.6732282 + ], + [ + -124.0691842, + 44.6732352 + ], + [ + -124.0691884, + 44.6732452 + ], + [ + -124.0691904, + 44.6732512 + ], + [ + -124.0691948, + 44.6732676 + ], + [ + -124.0692003, + 44.6732896 + ], + [ + -124.0692044, + 44.6733016 + ], + [ + -124.0692072, + 44.6733077 + ], + [ + -124.0692107, + 44.673314 + ], + [ + -124.0692151, + 44.6733202 + ], + [ + -124.0692208, + 44.6733263 + ], + [ + -124.0692242, + 44.6733292 + ], + [ + -124.0692281, + 44.673332 + ], + [ + -124.0692307, + 44.6733335 + ], + [ + -124.0692336, + 44.6733346 + ], + [ + -124.0692355, + 44.673335 + ], + [ + -124.0692383, + 44.6733355 + ], + [ + -124.0692421, + 44.6733356 + ], + [ + -124.0692443, + 44.6733354 + ], + [ + -124.0692469, + 44.6733351 + ], + [ + -124.06925, + 44.6733346 + ], + [ + -124.0692537, + 44.6733338 + ], + [ + -124.0692579, + 44.6733325 + ], + [ + -124.0692629, + 44.6733308 + ], + [ + -124.0692686, + 44.6733286 + ], + [ + -124.0692842, + 44.673322 + ], + [ + -124.069293, + 44.6733183 + ], + [ + -124.0692976, + 44.6733165 + ], + [ + -124.0693025, + 44.6733149 + ], + [ + -124.0693074, + 44.6733134 + ], + [ + -124.0693125, + 44.6733123 + ], + [ + -124.069315, + 44.6733119 + ], + [ + -124.0693176, + 44.6733118 + ], + [ + -124.0693201, + 44.6733118 + ], + [ + -124.0693226, + 44.673312 + ], + [ + -124.0693251, + 44.6733125 + ], + [ + -124.0693293, + 44.673314 + ], + [ + -124.0693334, + 44.673316 + ], + [ + -124.069336, + 44.6733176 + ], + [ + -124.0693394, + 44.67332 + ], + [ + -124.0693437, + 44.6733237 + ], + [ + -124.0693491, + 44.6733293 + ], + [ + -124.0693521, + 44.6733328 + ], + [ + -124.06936, + 44.6733427 + ], + [ + -124.0693705, + 44.6733562 + ], + [ + -124.0693769, + 44.6733634 + ], + [ + -124.0693805, + 44.673367 + ], + [ + -124.0693845, + 44.6733706 + ], + [ + -124.069389, + 44.6733739 + ], + [ + -124.0693941, + 44.673377 + ], + [ + -124.0693969, + 44.6733783 + ], + [ + -124.0693998, + 44.6733795 + ], + [ + -124.069403, + 44.6733805 + ], + [ + -124.0694064, + 44.6733813 + ], + [ + -124.0694101, + 44.6733818 + ], + [ + -124.0694136, + 44.673382 + ], + [ + -124.0694171, + 44.6733819 + ], + [ + -124.0694194, + 44.6733817 + ], + [ + -124.0694226, + 44.6733813 + ], + [ + -124.0694269, + 44.6733804 + ], + [ + -124.0694326, + 44.673379 + ], + [ + -124.0694403, + 44.6733768 + ], + [ + -124.0694507, + 44.6733737 + ], + [ + -124.0694565, + 44.6733722 + ], + [ + -124.0694596, + 44.6733715 + ], + [ + -124.0694629, + 44.6733709 + ], + [ + -124.0694664, + 44.6733704 + ], + [ + -124.0694701, + 44.6733702 + ], + [ + -124.069474, + 44.6733703 + ], + [ + -124.069476, + 44.6733704 + ], + [ + -124.0694817, + 44.6733713 + ], + [ + -124.0694873, + 44.6733727 + ], + [ + -124.0694911, + 44.6733737 + ], + [ + -124.069496, + 44.6733754 + ], + [ + -124.0695027, + 44.6733778 + ], + [ + -124.0695115, + 44.6733814 + ], + [ + -124.0695233, + 44.6733864 + ], + [ + -124.0695301, + 44.673389 + ], + [ + -124.0695379, + 44.6733916 + ], + [ + -124.0695421, + 44.6733928 + ], + [ + -124.0695466, + 44.6733939 + ], + [ + -124.0695515, + 44.6733948 + ], + [ + -124.0695567, + 44.6733954 + ], + [ + -124.0695623, + 44.6733955 + ], + [ + -124.0695652, + 44.6733954 + ], + [ + -124.0695803, + 44.6733942 + ], + [ + -124.0695955, + 44.6733926 + ], + [ + -124.0696257, + 44.6733887 + ], + [ + -124.0696865, + 44.67338 + ], + [ + -124.0697038, + 44.6733779 + ], + [ + -124.0697238, + 44.6733759 + ], + [ + -124.0697564, + 44.6733737 + ], + [ + -124.0697891, + 44.6733723 + ], + [ + -124.0698986, + 44.6733686 + ], + [ + -124.0699236, + 44.6733671 + ], + [ + -124.0699521, + 44.6733647 + ], + [ + -124.0699727, + 44.6733622 + ], + [ + -124.0699928, + 44.6733586 + ], + [ + -124.0700059, + 44.6733557 + ], + [ + -124.070023, + 44.673351 + ], + [ + -124.0700325, + 44.6733479 + ], + [ + -124.0700433, + 44.673344 + ], + [ + -124.0700553, + 44.6733391 + ], + [ + -124.0700688, + 44.6733327 + ], + [ + -124.0700837, + 44.6733245 + ], + [ + -124.0700915, + 44.6733197 + ], + [ + -124.0700996, + 44.6733142 + ], + [ + -124.0701081, + 44.673308 + ], + [ + -124.070117, + 44.6733009 + ], + [ + -124.0701262, + 44.6732929 + ], + [ + -124.0701321, + 44.673287 + ], + [ + -124.070137, + 44.6732811 + ], + [ + -124.0701398, + 44.673277 + ], + [ + -124.070143, + 44.6732716 + ], + [ + -124.0701464, + 44.6732642 + ], + [ + -124.0701479, + 44.6732599 + ], + [ + -124.0701493, + 44.673255 + ], + [ + -124.0701504, + 44.6732493 + ], + [ + -124.0701512, + 44.6732429 + ], + [ + -124.0701514, + 44.6732355 + ], + [ + -124.070151, + 44.673227 + ], + [ + -124.0701497, + 44.6732165 + ], + [ + -124.0701478, + 44.6732068 + ], + [ + -124.0701449, + 44.6731949 + ], + [ + -124.0701414, + 44.673182 + ], + [ + -124.0701383, + 44.6731736 + ], + [ + -124.0701336, + 44.6731653 + ], + [ + -124.0701298, + 44.6731598 + ], + [ + -124.070124, + 44.6731524 + ], + [ + -124.0701152, + 44.6731427 + ], + [ + -124.0700752, + 44.673104 + ], + [ + -124.0700648, + 44.6730929 + ], + [ + -124.0700598, + 44.673087 + ], + [ + -124.0700551, + 44.6730806 + ], + [ + -124.0700509, + 44.6730738 + ], + [ + -124.0700474, + 44.6730665 + ], + [ + -124.070045, + 44.6730587 + ], + [ + -124.0700444, + 44.6730546 + ], + [ + -124.0700438, + 44.6730452 + ], + [ + -124.070044, + 44.6730356 + ], + [ + -124.0700446, + 44.6730291 + ], + [ + -124.0700459, + 44.6730204 + ], + [ + -124.0700489, + 44.6730087 + ], + [ + -124.0700512, + 44.673002 + ], + [ + -124.0700545, + 44.6729943 + ], + [ + -124.070059, + 44.6729856 + ], + [ + -124.0700653, + 44.6729755 + ], + [ + -124.0700692, + 44.6729702 + ], + [ + -124.0700738, + 44.6729646 + ], + [ + -124.0700792, + 44.6729586 + ], + [ + -124.0700855, + 44.6729523 + ], + [ + -124.0700929, + 44.6729456 + ], + [ + -124.0701016, + 44.6729386 + ], + [ + -124.070106, + 44.6729352 + ], + [ + -124.0701106, + 44.6729322 + ], + [ + -124.0701197, + 44.6729266 + ], + [ + -124.0701258, + 44.6729233 + ], + [ + -124.0701341, + 44.6729193 + ], + [ + -124.0701452, + 44.6729149 + ], + [ + -124.0701516, + 44.6729126 + ], + [ + -124.070159, + 44.6729104 + ], + [ + -124.0701675, + 44.6729081 + ], + [ + -124.0701773, + 44.6729057 + ], + [ + -124.0701886, + 44.6729033 + ], + [ + -124.0702192, + 44.6728976 + ], + [ + -124.070237, + 44.672894 + ], + [ + -124.07025, + 44.6728916 + ], + [ + -124.0702632, + 44.6728898 + ], + [ + -124.0702721, + 44.6728889 + ], + [ + -124.0702841, + 44.672888 + ], + [ + -124.0703323, + 44.6728855 + ], + [ + -124.0703458, + 44.6728844 + ], + [ + -124.0703611, + 44.6728826 + ], + [ + -124.0703691, + 44.6728813 + ], + [ + -124.0703775, + 44.6728796 + ], + [ + -124.0703863, + 44.6728774 + ], + [ + -124.0703955, + 44.6728745 + ], + [ + -124.0704012, + 44.6728724 + ], + [ + -124.0704067, + 44.67287 + ], + [ + -124.0704169, + 44.6728646 + ], + [ + -124.0704233, + 44.6728607 + ], + [ + -124.0704313, + 44.672855 + ], + [ + -124.0704414, + 44.6728469 + ], + [ + -124.0704541, + 44.6728353 + ], + [ + -124.0704707, + 44.6728193 + ], + [ + -124.0704805, + 44.6728103 + ], + [ + -124.0704924, + 44.6728005 + ], + [ + -124.0704991, + 44.6727955 + ], + [ + -124.0705068, + 44.6727906 + ], + [ + -124.0705156, + 44.6727857 + ], + [ + -124.0705375, + 44.6727749 + ], + [ + -124.07056, + 44.6727649 + ], + [ + -124.0705752, + 44.6727587 + ], + [ + -124.0705957, + 44.672751 + ], + [ + -124.0706075, + 44.6727469 + ], + [ + -124.0706211, + 44.6727425 + ], + [ + -124.0706366, + 44.672738 + ], + [ + -124.0706544, + 44.6727333 + ], + [ + -124.0706753, + 44.6727287 + ], + [ + -124.0706971, + 44.672725 + ], + [ + -124.0707119, + 44.6727231 + ], + [ + -124.0707321, + 44.6727215 + ], + [ + -124.0707437, + 44.6727211 + ], + [ + -124.0707571, + 44.6727211 + ], + [ + -124.0707725, + 44.6727217 + ], + [ + -124.0707901, + 44.6727233 + ], + [ + -124.0708102, + 44.6727264 + ], + [ + -124.0708209, + 44.6727287 + ], + [ + -124.0708322, + 44.6727315 + ], + [ + -124.0708441, + 44.6727352 + ], + [ + -124.0708568, + 44.6727397 + ], + [ + -124.07087, + 44.6727454 + ], + [ + -124.070884, + 44.6727523 + ], + [ + -124.0708985, + 44.6727609 + ], + [ + -124.070904, + 44.6727646 + ], + [ + -124.0709089, + 44.6727686 + ], + [ + -124.0709119, + 44.6727713 + ], + [ + -124.0709155, + 44.672775 + ], + [ + -124.0709197, + 44.6727801 + ], + [ + -124.0709218, + 44.672783 + ], + [ + -124.0709238, + 44.6727865 + ], + [ + -124.0709259, + 44.6727905 + ], + [ + -124.0709277, + 44.6727951 + ], + [ + -124.0709293, + 44.6728004 + ], + [ + -124.0709304, + 44.6728065 + ], + [ + -124.0709307, + 44.6728135 + ], + [ + -124.0709305, + 44.6728172 + ], + [ + -124.07093, + 44.6728211 + ], + [ + -124.0709292, + 44.6728252 + ], + [ + -124.0709281, + 44.6728295 + ], + [ + -124.0709264, + 44.6728341 + ], + [ + -124.0709243, + 44.6728388 + ], + [ + -124.0709216, + 44.6728436 + ], + [ + -124.070909, + 44.672864 + ], + [ + -124.0708958, + 44.6728844 + ], + [ + -124.070868, + 44.672925 + ], + [ + -124.0708486, + 44.672952 + ], + [ + -124.0708219, + 44.6729876 + ], + [ + -124.0708067, + 44.6730066 + ], + [ + -124.0707906, + 44.6730253 + ], + [ + -124.0707577, + 44.6730622 + ], + [ + -124.0707366, + 44.6730868 + ], + [ + -124.0707253, + 44.673101 + ], + [ + -124.0707216, + 44.6731063 + ], + [ + -124.0707184, + 44.673112 + ], + [ + -124.0707166, + 44.6731159 + ], + [ + -124.0707145, + 44.6731214 + ], + [ + -124.0707125, + 44.6731289 + ], + [ + -124.0707117, + 44.6731332 + ], + [ + -124.0707112, + 44.6731383 + ], + [ + -124.070711, + 44.6731441 + ], + [ + -124.0707114, + 44.6731508 + ], + [ + -124.0707128, + 44.6731583 + ], + [ + -124.070714, + 44.6731622 + ], + [ + -124.0707155, + 44.6731663 + ], + [ + -124.0707174, + 44.6731706 + ], + [ + -124.07072, + 44.673175 + ], + [ + -124.0707231, + 44.6731795 + ], + [ + -124.0707271, + 44.6731841 + ], + [ + -124.070732, + 44.6731887 + ], + [ + -124.070738, + 44.6731931 + ], + [ + -124.0707414, + 44.6731952 + ], + [ + -124.0707484, + 44.6731988 + ], + [ + -124.0707556, + 44.6732017 + ], + [ + -124.0707607, + 44.6732033 + ], + [ + -124.0707675, + 44.6732051 + ], + [ + -124.070777, + 44.6732067 + ], + [ + -124.0707825, + 44.6732073 + ], + [ + -124.0707889, + 44.6732078 + ], + [ + -124.0707964, + 44.6732079 + ], + [ + -124.0708049, + 44.6732076 + ], + [ + -124.0708148, + 44.6732068 + ], + [ + -124.070826, + 44.6732052 + ], + [ + -124.0708388, + 44.6732027 + ], + [ + -124.070853, + 44.673199 + ], + [ + -124.0708604, + 44.6731967 + ], + [ + -124.070868, + 44.6731941 + ], + [ + -124.0708759, + 44.6731911 + ], + [ + -124.0708839, + 44.6731877 + ], + [ + -124.070892, + 44.673184 + ], + [ + -124.0709923, + 44.6731348 + ], + [ + -124.0710924, + 44.673085 + ], + [ + -124.0711587, + 44.6730513 + ], + [ + -124.0713787, + 44.6729364 + ], + [ + -124.0714526, + 44.6728985 + ], + [ + -124.0714926, + 44.6728789 + ], + [ + -124.0715333, + 44.6728599 + ], + [ + -124.0716161, + 44.672824 + ], + [ + -124.0716723, + 44.672801 + ], + [ + -124.0717481, + 44.6727713 + ], + [ + -124.0718504, + 44.6727321 + ], + [ + -124.0718879, + 44.6727186 + ], + [ + -124.0719261, + 44.6727063 + ], + [ + -124.0719863, + 44.672689 + ], + [ + -124.0720326, + 44.6726766 + ], + [ + -124.0720942, + 44.6726603 + ], + [ + -124.0721258, + 44.6726516 + ], + [ + -124.0721585, + 44.6726431 + ], + [ + -124.0721808, + 44.6726381 + ], + [ + -124.0721936, + 44.6726358 + ], + [ + -124.0722082, + 44.6726336 + ], + [ + -124.072225, + 44.672632 + ], + [ + -124.0722339, + 44.6726316 + ], + [ + -124.0722434, + 44.6726315 + ], + [ + -124.0722535, + 44.6726319 + ], + [ + -124.0722642, + 44.6726328 + ], + [ + -124.0722755, + 44.6726345 + ], + [ + -124.0722874, + 44.6726372 + ], + [ + -124.0723, + 44.6726411 + ], + [ + -124.0723064, + 44.6726435 + ], + [ + -124.0723149, + 44.6726474 + ], + [ + -124.0723227, + 44.6726516 + ], + [ + -124.0723276, + 44.6726546 + ], + [ + -124.0723337, + 44.6726589 + ], + [ + -124.0723411, + 44.672665 + ], + [ + -124.072345, + 44.6726686 + ], + [ + -124.0723492, + 44.6726729 + ], + [ + -124.0723535, + 44.672678 + ], + [ + -124.072358, + 44.6726841 + ], + [ + -124.0723626, + 44.6726912 + ], + [ + -124.0723671, + 44.6726995 + ], + [ + -124.0723714, + 44.6727092 + ], + [ + -124.0723752, + 44.6727205 + ], + [ + -124.0723769, + 44.6727265 + ], + [ + -124.0723861, + 44.672766 + ], + [ + -124.0723939, + 44.6728056 + ], + [ + -124.0723984, + 44.672832 + ], + [ + -124.0724039, + 44.6728673 + ], + [ + -124.0724201, + 44.673025 + ], + [ + -124.0724214, + 44.6730317 + ], + [ + -124.0724231, + 44.6730382 + ], + [ + -124.0724246, + 44.6730425 + ], + [ + -124.0724269, + 44.6730482 + ], + [ + -124.0724306, + 44.6730557 + ], + [ + -124.0724331, + 44.6730599 + ], + [ + -124.0724362, + 44.6730646 + ], + [ + -124.0724402, + 44.6730699 + ], + [ + -124.0724452, + 44.6730758 + ], + [ + -124.0724518, + 44.6730824 + ], + [ + -124.0724556, + 44.6730858 + ], + [ + -124.0724599, + 44.6730894 + ], + [ + -124.0724647, + 44.6730931 + ], + [ + -124.0724703, + 44.673097 + ], + [ + -124.072476, + 44.6731005 + ], + [ + -124.0724821, + 44.6731035 + ], + [ + -124.0724863, + 44.6731051 + ], + [ + -124.0724921, + 44.673107 + ], + [ + -124.0725002, + 44.673109 + ], + [ + -124.0725049, + 44.6731098 + ], + [ + -124.0725104, + 44.6731105 + ], + [ + -124.0725168, + 44.673111 + ], + [ + -124.0725242, + 44.6731112 + ], + [ + -124.0725328, + 44.673111 + ], + [ + -124.0725427, + 44.6731102 + ], + [ + -124.0725539, + 44.6731086 + ], + [ + -124.0725666, + 44.6731061 + ], + [ + -124.0725732, + 44.6731044 + ], + [ + -124.0725801, + 44.6731025 + ], + [ + -124.0725873, + 44.6731002 + ], + [ + -124.0725947, + 44.6730976 + ], + [ + -124.0726021, + 44.6730947 + ], + [ + -124.0726096, + 44.6730913 + ], + [ + -124.0726297, + 44.6730818 + ], + [ + -124.0726496, + 44.6730717 + ], + [ + -124.0726625, + 44.6730647 + ], + [ + -124.0726792, + 44.6730547 + ], + [ + -124.0726884, + 44.6730487 + ], + [ + -124.0726984, + 44.6730415 + ], + [ + -124.0727093, + 44.6730328 + ], + [ + -124.0727147, + 44.673028 + ], + [ + -124.0727203, + 44.6730226 + ], + [ + -124.0727259, + 44.6730166 + ], + [ + -124.072731, + 44.6730107 + ], + [ + -124.0727356, + 44.6730047 + ], + [ + -124.0727439, + 44.6729925 + ], + [ + -124.0727489, + 44.6729844 + ], + [ + -124.0727677, + 44.6729514 + ], + [ + -124.0727737, + 44.672942 + ], + [ + -124.0727813, + 44.6729313 + ], + [ + -124.0727859, + 44.6729256 + ], + [ + -124.0727912, + 44.6729196 + ], + [ + -124.0727949, + 44.6729153 + ], + [ + -124.0727986, + 44.6729107 + ], + [ + -124.072806, + 44.6729012 + ], + [ + -124.0728109, + 44.672895 + ], + [ + -124.0728137, + 44.6728916 + ], + [ + -124.072817, + 44.6728881 + ], + [ + -124.0728187, + 44.6728864 + ], + [ + -124.0728206, + 44.6728847 + ], + [ + -124.0728226, + 44.6728831 + ], + [ + -124.0728248, + 44.6728816 + ], + [ + -124.0728271, + 44.6728803 + ], + [ + -124.0728296, + 44.6728792 + ], + [ + -124.0728309, + 44.6728788 + ], + [ + -124.0728323, + 44.6728786 + ], + [ + -124.0728337, + 44.6728784 + ], + [ + -124.0728391, + 44.6728786 + ], + [ + -124.0728446, + 44.6728795 + ], + [ + -124.0728483, + 44.6728806 + ], + [ + -124.0728532, + 44.6728826 + ], + [ + -124.0728599, + 44.672886 + ], + [ + -124.0728637, + 44.6728884 + ], + [ + -124.0728681, + 44.6728914 + ], + [ + -124.0728731, + 44.6728952 + ], + [ + -124.0728789, + 44.6729 + ], + [ + -124.0728855, + 44.672906 + ], + [ + -124.0728931, + 44.6729133 + ], + [ + -124.0729019, + 44.6729222 + ], + [ + -124.0729253, + 44.672947 + ], + [ + -124.0729387, + 44.6729607 + ], + [ + -124.0729459, + 44.6729674 + ], + [ + -124.0729535, + 44.6729741 + ], + [ + -124.0729615, + 44.6729805 + ], + [ + -124.0729679, + 44.6729851 + ], + [ + -124.0729745, + 44.67299 + ], + [ + -124.0729884, + 44.6730001 + ], + [ + -124.072998, + 44.6730069 + ], + [ + -124.0730112, + 44.6730158 + ], + [ + -124.0730188, + 44.6730205 + ], + [ + -124.0730275, + 44.6730256 + ], + [ + -124.0730374, + 44.6730309 + ], + [ + -124.0730426, + 44.6730334 + ], + [ + -124.0730482, + 44.6730358 + ], + [ + -124.073054, + 44.673038 + ], + [ + -124.0730601, + 44.6730399 + ], + [ + -124.0730665, + 44.6730414 + ], + [ + -124.0730687, + 44.6730417 + ], + [ + -124.0730709, + 44.6730417 + ], + [ + -124.0730723, + 44.6730415 + ], + [ + -124.0730743, + 44.673041 + ], + [ + -124.0730768, + 44.6730401 + ], + [ + -124.0730782, + 44.6730394 + ], + [ + -124.0730798, + 44.6730385 + ], + [ + -124.0730817, + 44.6730373 + ], + [ + -124.0730837, + 44.6730358 + ], + [ + -124.0730861, + 44.6730338 + ], + [ + -124.0730887, + 44.6730313 + ], + [ + -124.0730916, + 44.6730281 + ], + [ + -124.0730948, + 44.6730243 + ], + [ + -124.0730984, + 44.6730197 + ], + [ + -124.0731024, + 44.6730143 + ], + [ + -124.0731067, + 44.6730083 + ], + [ + -124.0731089, + 44.6730053 + ], + [ + -124.0731153, + 44.6729955 + ], + [ + -124.0731203, + 44.6729856 + ], + [ + -124.0731229, + 44.6729791 + ], + [ + -124.0731255, + 44.6729704 + ], + [ + -124.0731278, + 44.6729587 + ], + [ + -124.0731292, + 44.6729432 + ], + [ + -124.0731293, + 44.6729225 + ], + [ + -124.0731288, + 44.6728951 + ], + [ + -124.0731297, + 44.6728795 + ], + [ + -124.0731309, + 44.6728712 + ], + [ + -124.0731328, + 44.6728624 + ], + [ + -124.0731358, + 44.6728531 + ], + [ + -124.0731429, + 44.6728351 + ], + [ + -124.0731506, + 44.6728174 + ], + [ + -124.0731563, + 44.6728058 + ], + [ + -124.0731646, + 44.6727905 + ], + [ + -124.0731699, + 44.6727818 + ], + [ + -124.0731765, + 44.672772 + ], + [ + -124.0731848, + 44.6727608 + ], + [ + -124.0731953, + 44.6727481 + ], + [ + -124.0732015, + 44.6727413 + ], + [ + -124.0732086, + 44.6727341 + ], + [ + -124.0732149, + 44.6727284 + ], + [ + -124.0732219, + 44.6727229 + ], + [ + -124.0732269, + 44.6727194 + ], + [ + -124.0732339, + 44.6727149 + ], + [ + -124.0732439, + 44.6727094 + ], + [ + -124.0732499, + 44.6727064 + ], + [ + -124.0732569, + 44.6727034 + ], + [ + -124.0732651, + 44.6727002 + ], + [ + -124.0732745, + 44.6726971 + ], + [ + -124.0732855, + 44.6726942 + ], + [ + -124.0732913, + 44.672693 + ], + [ + -124.0732975, + 44.672692 + ], + [ + -124.073304, + 44.6726913 + ], + [ + -124.0733109, + 44.6726909 + ], + [ + -124.073318, + 44.6726909 + ], + [ + -124.0733254, + 44.6726915 + ], + [ + -124.073333, + 44.6726928 + ], + [ + -124.0733367, + 44.6726937 + ], + [ + -124.0733405, + 44.6726949 + ], + [ + -124.0733491, + 44.6726982 + ], + [ + -124.0733575, + 44.672702 + ], + [ + -124.0733631, + 44.6727048 + ], + [ + -124.0733703, + 44.6727089 + ], + [ + -124.0733796, + 44.6727149 + ], + [ + -124.0733848, + 44.6727186 + ], + [ + -124.0733905, + 44.672723 + ], + [ + -124.0733968, + 44.6727282 + ], + [ + -124.0734036, + 44.6727346 + ], + [ + -124.0734109, + 44.6727421 + ], + [ + -124.0734184, + 44.6727511 + ], + [ + -124.0734221, + 44.6727561 + ], + [ + -124.0734257, + 44.6727614 + ], + [ + -124.0734317, + 44.6727722 + ], + [ + -124.073436, + 44.6727831 + ], + [ + -124.0734381, + 44.6727905 + ], + [ + -124.0734399, + 44.6728005 + ], + [ + -124.073441, + 44.6728139 + ], + [ + -124.0734406, + 44.672832 + ], + [ + -124.0734379, + 44.6728562 + ], + [ + -124.0734338, + 44.6728883 + ], + [ + -124.0734328, + 44.6729063 + ], + [ + -124.073433, + 44.6729157 + ], + [ + -124.073434, + 44.6729256 + ], + [ + -124.0734361, + 44.672936 + ], + [ + -124.0734397, + 44.6729468 + ], + [ + -124.0734454, + 44.672958 + ], + [ + -124.0734513, + 44.6729666 + ], + [ + -124.0734578, + 44.672975 + ], + [ + -124.0734626, + 44.6729806 + ], + [ + -124.0734692, + 44.6729879 + ], + [ + -124.0734965, + 44.673017 + ], + [ + -124.0735038, + 44.6730254 + ], + [ + -124.0735113, + 44.6730353 + ], + [ + -124.0735199, + 44.6730475 + ], + [ + -124.0735286, + 44.6730603 + ], + [ + -124.0735341, + 44.6730691 + ], + [ + -124.0735407, + 44.6730809 + ], + [ + -124.073544, + 44.6730876 + ], + [ + -124.0735471, + 44.6730953 + ], + [ + -124.0735498, + 44.6731041 + ], + [ + -124.0735508, + 44.6731086 + ], + [ + -124.0735515, + 44.6731135 + ], + [ + -124.0735517, + 44.6731186 + ], + [ + -124.0735513, + 44.6731239 + ], + [ + -124.0735502, + 44.6731294 + ], + [ + -124.0735472, + 44.673137 + ], + [ + -124.0735427, + 44.6731443 + ], + [ + -124.073539, + 44.6731489 + ], + [ + -124.0735331, + 44.6731548 + ], + [ + -124.073524, + 44.6731623 + ], + [ + -124.0735182, + 44.6731664 + ], + [ + -124.0735111, + 44.673171 + ], + [ + -124.0735024, + 44.6731761 + ], + [ + -124.073492, + 44.6731818 + ], + [ + -124.0734795, + 44.6731883 + ], + [ + -124.0734452, + 44.6732055 + ], + [ + -124.0734262, + 44.6732157 + ], + [ + -124.0734166, + 44.6732214 + ], + [ + -124.0734069, + 44.6732278 + ], + [ + -124.0733975, + 44.6732349 + ], + [ + -124.0733886, + 44.6732429 + ], + [ + -124.0733816, + 44.6732496 + ], + [ + -124.0733742, + 44.6732567 + ], + [ + -124.0733588, + 44.6732713 + ], + [ + -124.0733488, + 44.6732814 + ], + [ + -124.0733436, + 44.6732872 + ], + [ + -124.073338, + 44.6732939 + ], + [ + -124.0733325, + 44.6733015 + ], + [ + -124.0733301, + 44.6733055 + ], + [ + -124.0733278, + 44.6733098 + ], + [ + -124.0733259, + 44.6733143 + ], + [ + -124.0733245, + 44.6733191 + ], + [ + -124.0733238, + 44.6733241 + ], + [ + -124.073324, + 44.6733293 + ], + [ + -124.0733245, + 44.6733319 + ], + [ + -124.0733253, + 44.6733346 + ], + [ + -124.0733266, + 44.6733373 + ], + [ + -124.0733298, + 44.6733425 + ], + [ + -124.0733338, + 44.6733476 + ], + [ + -124.0733369, + 44.673351 + ], + [ + -124.0733416, + 44.6733554 + ], + [ + -124.0733487, + 44.673361 + ], + [ + -124.0733531, + 44.6733642 + ], + [ + -124.0733584, + 44.6733677 + ], + [ + -124.0733648, + 44.6733715 + ], + [ + -124.0733725, + 44.6733757 + ], + [ + -124.0733817, + 44.6733802 + ], + [ + -124.0733926, + 44.6733849 + ], + [ + -124.0734054, + 44.6733896 + ], + [ + -124.0734123, + 44.6733918 + ], + [ + -124.0734196, + 44.673394 + ], + [ + -124.0734273, + 44.6733959 + ], + [ + -124.0734353, + 44.6733977 + ], + [ + -124.0734443, + 44.673399 + ], + [ + -124.0734534, + 44.6733996 + ], + [ + -124.0734595, + 44.6733995 + ], + [ + -124.0734677, + 44.673399 + ], + [ + -124.0734787, + 44.6733975 + ], + [ + -124.073485, + 44.6733964 + ], + [ + -124.0734922, + 44.6733947 + ], + [ + -124.0735005, + 44.6733925 + ], + [ + -124.0735098, + 44.6733896 + ], + [ + -124.0735205, + 44.6733858 + ], + [ + -124.0735326, + 44.673381 + ], + [ + -124.0735461, + 44.6733751 + ], + [ + -124.0735611, + 44.6733681 + ], + [ + -124.0735776, + 44.6733601 + ], + [ + -124.0735859, + 44.6733559 + ], + [ + -124.0735941, + 44.6733514 + ], + [ + -124.0736016, + 44.6733462 + ], + [ + -124.0736064, + 44.6733424 + ], + [ + -124.0736125, + 44.673337 + ], + [ + -124.0736201, + 44.6733294 + ], + [ + -124.0736298, + 44.6733187 + ], + [ + -124.0736421, + 44.6733042 + ], + [ + -124.0736492, + 44.6732963 + ], + [ + -124.0736575, + 44.6732877 + ], + [ + -124.0736621, + 44.6732835 + ], + [ + -124.0736672, + 44.6732794 + ], + [ + -124.0736728, + 44.6732754 + ], + [ + -124.0736791, + 44.6732717 + ], + [ + -124.0736863, + 44.6732686 + ], + [ + -124.0736902, + 44.6732673 + ], + [ + -124.0736943, + 44.6732663 + ], + [ + -124.0736986, + 44.6732657 + ], + [ + -124.0737017, + 44.6732654 + ], + [ + -124.0737059, + 44.6732653 + ], + [ + -124.0737118, + 44.6732656 + ], + [ + -124.0737152, + 44.6732658 + ], + [ + -124.0737192, + 44.6732663 + ], + [ + -124.0737238, + 44.673267 + ], + [ + -124.0737292, + 44.673268 + ], + [ + -124.0737353, + 44.6732693 + ], + [ + -124.0737422, + 44.6732711 + ], + [ + -124.07375, + 44.6732734 + ], + [ + -124.0737585, + 44.6732762 + ], + [ + -124.0737628, + 44.6732778 + ], + [ + -124.0737671, + 44.6732794 + ], + [ + -124.0737715, + 44.6732812 + ], + [ + -124.0737787, + 44.6732848 + ], + [ + -124.0737855, + 44.673289 + ], + [ + -124.0737899, + 44.6732922 + ], + [ + -124.0737955, + 44.6732969 + ], + [ + -124.0738026, + 44.6733037 + ], + [ + -124.0738117, + 44.6733136 + ], + [ + -124.0738232, + 44.6733277 + ], + [ + -124.0738378, + 44.6733465 + ], + [ + -124.0738462, + 44.6733565 + ], + [ + -124.0738507, + 44.6733615 + ], + [ + -124.0738556, + 44.6733665 + ], + [ + -124.0738609, + 44.6733712 + ], + [ + -124.0738667, + 44.6733756 + ], + [ + -124.0738732, + 44.6733794 + ], + [ + -124.0738766, + 44.673381 + ], + [ + -124.0738803, + 44.6733823 + ], + [ + -124.0738841, + 44.6733833 + ], + [ + -124.0738882, + 44.6733839 + ], + [ + -124.073891, + 44.6733841 + ], + [ + -124.0738939, + 44.6733841 + ], + [ + -124.0739001, + 44.6733839 + ], + [ + -124.0739044, + 44.6733835 + ], + [ + -124.0739105, + 44.6733826 + ], + [ + -124.073919, + 44.6733808 + ], + [ + -124.0739239, + 44.6733795 + ], + [ + -124.0739297, + 44.6733778 + ], + [ + -124.0739363, + 44.6733756 + ], + [ + -124.0739437, + 44.6733727 + ], + [ + -124.0739521, + 44.673369 + ], + [ + -124.0739613, + 44.6733642 + ], + [ + -124.0739659, + 44.6733615 + ], + [ + -124.0739707, + 44.6733584 + ], + [ + -124.0739754, + 44.6733549 + ], + [ + -124.07398, + 44.6733511 + ], + [ + -124.0739844, + 44.6733468 + ], + [ + -124.0739884, + 44.673342 + ], + [ + -124.0739941, + 44.6733341 + ], + [ + -124.0739993, + 44.6733261 + ], + [ + -124.0740083, + 44.6733099 + ], + [ + -124.0740135, + 44.673299 + ], + [ + -124.0740196, + 44.6732845 + ], + [ + -124.0740406, + 44.6732263 + ], + [ + -124.0740472, + 44.6732099 + ], + [ + -124.0740562, + 44.6731913 + ], + [ + -124.0740617, + 44.6731816 + ], + [ + -124.0740699, + 44.6731676 + ], + [ + -124.0740775, + 44.6731537 + ], + [ + -124.0740926, + 44.6731259 + ], + [ + -124.0741033, + 44.6731082 + ], + [ + -124.0741102, + 44.6730979 + ], + [ + -124.074119, + 44.6730864 + ], + [ + -124.0741305, + 44.6730732 + ], + [ + -124.0741374, + 44.6730663 + ], + [ + -124.0741454, + 44.673059 + ], + [ + -124.0741547, + 44.6730512 + ], + [ + -124.0741657, + 44.673043 + ], + [ + -124.0741809, + 44.6730328 + ], + [ + -124.0741966, + 44.6730236 + ], + [ + -124.0742072, + 44.673018 + ], + [ + -124.0742216, + 44.6730113 + ], + [ + -124.0742524, + 44.6729995 + ], + [ + -124.0742654, + 44.6729955 + ], + [ + -124.0742805, + 44.6729914 + ], + [ + -124.0742978, + 44.6729875 + ], + [ + -124.0743178, + 44.6729838 + ], + [ + -124.0743409, + 44.6729807 + ], + [ + -124.0743673, + 44.6729782 + ], + [ + -124.0743975, + 44.6729767 + ], + [ + -124.0744254, + 44.6729763 + ], + [ + -124.0744535, + 44.6729766 + ], + [ + -124.0744724, + 44.6729773 + ], + [ + -124.0744976, + 44.6729789 + ], + [ + -124.0745314, + 44.6729822 + ], + [ + -124.0745506, + 44.6729848 + ], + [ + -124.0745726, + 44.6729884 + ], + [ + -124.0745976, + 44.6729934 + ], + [ + -124.074626, + 44.6730003 + ], + [ + -124.074641, + 44.6730046 + ], + [ + -124.074657, + 44.6730096 + ], + [ + -124.0746951, + 44.6730226 + ], + [ + -124.0747317, + 44.673036 + ], + [ + -124.0747553, + 44.6730453 + ], + [ + -124.0747858, + 44.6730583 + ], + [ + -124.0748028, + 44.6730661 + ], + [ + -124.0748217, + 44.6730754 + ], + [ + -124.0748429, + 44.6730867 + ], + [ + -124.0748665, + 44.6731006 + ], + [ + -124.0749966, + 44.6731818 + ], + [ + -124.0752633, + 44.6733497 + ], + [ + -124.0753087, + 44.6733789 + ], + [ + -124.0753682, + 44.6734191 + ], + [ + -124.0754016, + 44.6734431 + ], + [ + -124.0754143, + 44.6734534 + ], + [ + -124.0754263, + 44.6734651 + ], + [ + -124.0754324, + 44.6734718 + ], + [ + -124.0754407, + 44.6734823 + ], + [ + -124.0754505, + 44.6734967 + ], + [ + -124.0754617, + 44.6735167 + ], + [ + -124.0754674, + 44.6735285 + ], + [ + -124.0754733, + 44.6735421 + ], + [ + -124.0754797, + 44.6735578 + ], + [ + -124.0754961, + 44.6735998 + ], + [ + -124.0755065, + 44.6736233 + ], + [ + -124.0755086, + 44.6736281 + ], + [ + -124.0755104, + 44.673633 + ], + [ + -124.0755132, + 44.6736431 + ], + [ + -124.0755147, + 44.6736499 + ], + [ + -124.07552, + 44.6736773 + ], + [ + -124.075522, + 44.673685 + ], + [ + -124.075525, + 44.6736934 + ], + [ + -124.075527, + 44.6736978 + ], + [ + -124.0755295, + 44.6737024 + ], + [ + -124.0755326, + 44.6737071 + ], + [ + -124.0755365, + 44.673712 + ], + [ + -124.0755414, + 44.6737169 + ], + [ + -124.0755514, + 44.6737255 + ], + [ + -124.0755616, + 44.6737339 + ], + [ + -124.0755824, + 44.6737503 + ], + [ + -124.0755961, + 44.6737614 + ], + [ + -124.0756455, + 44.6738029 + ], + [ + -124.0756622, + 44.6738167 + ], + [ + -124.0756664, + 44.6738201 + ], + [ + -124.075671, + 44.6738236 + ], + [ + -124.0756807, + 44.6738306 + ], + [ + -124.0756877, + 44.6738352 + ], + [ + -124.0756974, + 44.6738413 + ], + [ + -124.0757109, + 44.673849 + ], + [ + -124.0757189, + 44.673853 + ], + [ + -124.0757281, + 44.6738572 + ], + [ + -124.0757385, + 44.6738613 + ], + [ + -124.0757441, + 44.6738631 + ], + [ + -124.0757499, + 44.6738648 + ], + [ + -124.0757561, + 44.6738663 + ], + [ + -124.0757625, + 44.6738674 + ], + [ + -124.0757691, + 44.673868 + ], + [ + -124.0757759, + 44.673868 + ], + [ + -124.0757793, + 44.6738677 + ], + [ + -124.0757827, + 44.6738672 + ], + [ + -124.0757861, + 44.6738664 + ], + [ + -124.0757878, + 44.6738659 + ], + [ + -124.0757895, + 44.6738653 + ], + [ + -124.0757927, + 44.6738638 + ], + [ + -124.0757948, + 44.6738626 + ], + [ + -124.0757976, + 44.6738608 + ], + [ + -124.0758012, + 44.6738581 + ], + [ + -124.0758031, + 44.6738564 + ], + [ + -124.0758054, + 44.6738543 + ], + [ + -124.0758079, + 44.6738518 + ], + [ + -124.0758106, + 44.6738488 + ], + [ + -124.0758137, + 44.6738453 + ], + [ + -124.0758217, + 44.6738356 + ], + [ + -124.075826, + 44.6738302 + ], + [ + -124.0758283, + 44.6738275 + ], + [ + -124.0758323, + 44.6738223 + ], + [ + -124.0758356, + 44.6738168 + ], + [ + -124.0758375, + 44.6738131 + ], + [ + -124.0758398, + 44.6738079 + ], + [ + -124.0758423, + 44.6738008 + ], + [ + -124.0758452, + 44.6737913 + ], + [ + -124.0758486, + 44.6737787 + ], + [ + -124.0758507, + 44.6737717 + ], + [ + -124.0758535, + 44.673764 + ], + [ + -124.0758552, + 44.6737602 + ], + [ + -124.0758572, + 44.6737563 + ], + [ + -124.0758598, + 44.6737523 + ], + [ + -124.0758629, + 44.6737484 + ], + [ + -124.0758668, + 44.6737447 + ], + [ + -124.075869, + 44.6737432 + ], + [ + -124.0758716, + 44.6737419 + ], + [ + -124.0758735, + 44.6737412 + ], + [ + -124.0758763, + 44.6737405 + ], + [ + -124.0758803, + 44.6737399 + ], + [ + -124.0758827, + 44.6737398 + ], + [ + -124.0758856, + 44.6737397 + ], + [ + -124.0758891, + 44.6737398 + ], + [ + -124.0758931, + 44.6737401 + ], + [ + -124.075898, + 44.6737408 + ], + [ + -124.0759036, + 44.6737418 + ], + [ + -124.07591, + 44.6737434 + ], + [ + -124.0759174, + 44.6737457 + ], + [ + -124.0759211, + 44.6737471 + ], + [ + -124.0759252, + 44.6737487 + ], + [ + -124.0759292, + 44.6737506 + ], + [ + -124.0759334, + 44.6737527 + ], + [ + -124.0759375, + 44.6737551 + ], + [ + -124.0759415, + 44.6737577 + ], + [ + -124.0759452, + 44.6737607 + ], + [ + -124.0759468, + 44.6737622 + ], + [ + -124.0759484, + 44.6737639 + ], + [ + -124.0759607, + 44.6737783 + ], + [ + -124.0759727, + 44.6737929 + ], + [ + -124.0759963, + 44.673822 + ], + [ + -124.0760124, + 44.6738413 + ], + [ + -124.0760219, + 44.6738522 + ], + [ + -124.0762081, + 44.6740598 + ], + [ + -124.0763947, + 44.6742726 + ], + [ + -124.0764209, + 44.6743018 + ], + [ + -124.076448, + 44.6743305 + ], + [ + -124.0764668, + 44.6743493 + ], + [ + -124.0764931, + 44.6743737 + ], + [ + -124.0765088, + 44.6743874 + ], + [ + -124.0765275, + 44.6744027 + ], + [ + -124.0765499, + 44.6744197 + ], + [ + -124.0765772, + 44.6744385 + ], + [ + -124.0765886, + 44.6744454 + ], + [ + -124.0766003, + 44.6744517 + ], + [ + -124.0766084, + 44.6744556 + ], + [ + -124.0766194, + 44.6744604 + ], + [ + -124.0766344, + 44.6744663 + ], + [ + -124.076655, + 44.6744735 + ], + [ + -124.0767207, + 44.6744936 + ], + [ + -124.0767314, + 44.6744968 + ], + [ + -124.0767422, + 44.6744996 + ], + [ + -124.0767641, + 44.6745046 + ], + [ + -124.0768085, + 44.6745134 + ], + [ + -124.0768381, + 44.6745195 + ], + [ + -124.0768548, + 44.6745236 + ], + [ + -124.0768736, + 44.6745289 + ], + [ + -124.0768835, + 44.6745322 + ], + [ + -124.0769013, + 44.6745388 + ], + [ + -124.0769185, + 44.674546 + ], + [ + -124.0769296, + 44.6745512 + ], + [ + -124.0769439, + 44.6745587 + ], + [ + -124.0769518, + 44.6745631 + ], + [ + -124.0769605, + 44.6745685 + ], + [ + -124.07697, + 44.6745749 + ], + [ + -124.0769802, + 44.6745827 + ], + [ + -124.0769964, + 44.6745974 + ], + [ + -124.0770072, + 44.6746097 + ], + [ + -124.0770385, + 44.6746512 + ], + [ + -124.0770675, + 44.6746931 + ], + [ + -124.0770857, + 44.6747212 + ], + [ + -124.0771089, + 44.6747589 + ], + [ + -124.077138, + 44.6748095 + ], + [ + -124.0771748, + 44.6748779 + ], + [ + -124.0773307, + 44.675193 + ], + [ + -124.0773414, + 44.6752146 + ], + [ + -124.0773514, + 44.6752368 + ], + [ + -124.0773712, + 44.6752819 + ], + [ + -124.0773855, + 44.6753115 + ], + [ + -124.0773946, + 44.6753279 + ], + [ + -124.0774061, + 44.6753462 + ], + [ + -124.077421, + 44.675366 + ], + [ + -124.0774299, + 44.675376 + ], + [ + -124.0774401, + 44.6753863 + ], + [ + -124.077452, + 44.6753966 + ], + [ + -124.0774658, + 44.675407 + ], + [ + -124.0774822, + 44.675417 + ], + [ + -124.0776802, + 44.6755279 + ], + [ + -124.0779121, + 44.6756129 + ], + [ + -124.0779317, + 44.6756201 + ], + [ + -124.0779514, + 44.6756275 + ], + [ + -124.0779644, + 44.6756327 + ], + [ + -124.0779812, + 44.6756401 + ], + [ + -124.0779904, + 44.6756447 + ], + [ + -124.0780006, + 44.6756503 + ], + [ + -124.0780116, + 44.6756572 + ], + [ + -124.0780172, + 44.6756611 + ], + [ + -124.0780228, + 44.6756655 + ], + [ + -124.0780286, + 44.6756704 + ], + [ + -124.0780343, + 44.6756759 + ], + [ + -124.0780399, + 44.6756823 + ], + [ + -124.078046, + 44.6756902 + ], + [ + -124.0780517, + 44.6756982 + ], + [ + -124.0780616, + 44.6757144 + ], + [ + -124.0780673, + 44.6757254 + ], + [ + -124.0780739, + 44.6757401 + ], + [ + -124.0780814, + 44.6757599 + ], + [ + -124.0781065, + 44.67584 + ], + [ + -124.078112, + 44.6758574 + ], + [ + -124.0781165, + 44.6758748 + ], + [ + -124.0781248, + 44.6759099 + ], + [ + -124.0781311, + 44.6759333 + ], + [ + -124.0781355, + 44.6759465 + ], + [ + -124.0781416, + 44.6759617 + ], + [ + -124.0781444, + 44.6759673 + ], + [ + -124.0781478, + 44.6759727 + ], + [ + -124.0781503, + 44.6759762 + ], + [ + -124.078154, + 44.6759808 + ], + [ + -124.0781595, + 44.6759867 + ], + [ + -124.078163, + 44.6759899 + ], + [ + -124.0781672, + 44.6759934 + ], + [ + -124.0781723, + 44.6759973 + ], + [ + -124.0781785, + 44.6760015 + ], + [ + -124.0781861, + 44.676006 + ], + [ + -124.0781953, + 44.6760107 + ], + [ + -124.0782004, + 44.676013 + ], + [ + -124.0782061, + 44.6760153 + ], + [ + -124.0782123, + 44.6760175 + ], + [ + -124.078219, + 44.6760197 + ], + [ + -124.0782239, + 44.676021 + ], + [ + -124.0782287, + 44.676022 + ], + [ + -124.0782383, + 44.6760232 + ], + [ + -124.0782447, + 44.6760234 + ], + [ + -124.0782532, + 44.6760231 + ], + [ + -124.0782645, + 44.6760218 + ], + [ + -124.0782709, + 44.6760206 + ], + [ + -124.0782783, + 44.6760189 + ], + [ + -124.0782867, + 44.6760166 + ], + [ + -124.0783539, + 44.6759934 + ], + [ + -124.0783628, + 44.6759908 + ], + [ + -124.0783723, + 44.6759886 + ], + [ + -124.0783825, + 44.675987 + ], + [ + -124.0783934, + 44.6759861 + ], + [ + -124.078399, + 44.6759861 + ], + [ + -124.0784048, + 44.6759864 + ], + [ + -124.0784358, + 44.6759893 + ], + [ + -124.0784667, + 44.6759928 + ], + [ + -124.0784873, + 44.6759956 + ], + [ + -124.0785147, + 44.676 + ], + [ + -124.0785304, + 44.676003 + ], + [ + -124.0785482, + 44.676007 + ], + [ + -124.0785687, + 44.6760121 + ], + [ + -124.0785921, + 44.6760189 + ], + [ + -124.0786034, + 44.6760227 + ], + [ + -124.0786179, + 44.6760278 + ], + [ + -124.0786351, + 44.6760346 + ], + [ + -124.0786514, + 44.6760418 + ], + [ + -124.0786619, + 44.6760467 + ], + [ + -124.0786752, + 44.6760536 + ], + [ + -124.0786919, + 44.6760633 + ], + [ + -124.078701, + 44.6760691 + ], + [ + -124.0787111, + 44.676076 + ], + [ + -124.078722, + 44.6760843 + ], + [ + -124.078734, + 44.6760943 + ], + [ + -124.0787469, + 44.6761064 + ], + [ + -124.0787536, + 44.6761131 + ], + [ + -124.0787592, + 44.67612 + ], + [ + -124.0787637, + 44.6761271 + ], + [ + -124.078766, + 44.6761319 + ], + [ + -124.0787685, + 44.6761385 + ], + [ + -124.0787707, + 44.6761476 + ], + [ + -124.078772, + 44.67616 + ], + [ + -124.0787722, + 44.6761672 + ], + [ + -124.07877, + 44.6762123 + ], + [ + -124.0787707, + 44.6762278 + ], + [ + -124.0787718, + 44.6762355 + ], + [ + -124.0787739, + 44.6762437 + ], + [ + -124.0787771, + 44.6762522 + ], + [ + -124.078782, + 44.676261 + ], + [ + -124.0787852, + 44.6762654 + ], + [ + -124.0787928, + 44.6762749 + ], + [ + -124.0788009, + 44.6762841 + ], + [ + -124.0788065, + 44.67629 + ], + [ + -124.0788145, + 44.6762976 + ], + [ + -124.0788194, + 44.6763017 + ], + [ + -124.0788251, + 44.6763063 + ], + [ + -124.0788321, + 44.6763112 + ], + [ + -124.0788406, + 44.6763163 + ], + [ + -124.0788454, + 44.6763189 + ], + [ + -124.0788507, + 44.6763215 + ], + [ + -124.0788567, + 44.676324 + ], + [ + -124.0788633, + 44.6763265 + ], + [ + -124.0788707, + 44.6763289 + ], + [ + -124.0788768, + 44.6763304 + ], + [ + -124.078883, + 44.6763312 + ], + [ + -124.0788871, + 44.6763314 + ], + [ + -124.0788926, + 44.6763313 + ], + [ + -124.0788999, + 44.6763306 + ], + [ + -124.0789041, + 44.6763299 + ], + [ + -124.0789089, + 44.676329 + ], + [ + -124.0789143, + 44.6763277 + ], + [ + -124.078958, + 44.6763147 + ], + [ + -124.0789638, + 44.6763134 + ], + [ + -124.0789699, + 44.6763122 + ], + [ + -124.0789764, + 44.6763115 + ], + [ + -124.0789833, + 44.6763113 + ], + [ + -124.0789869, + 44.6763114 + ], + [ + -124.0789906, + 44.6763118 + ], + [ + -124.0789943, + 44.6763124 + ], + [ + -124.0790419, + 44.6763222 + ], + [ + -124.0790894, + 44.6763324 + ], + [ + -124.0791843, + 44.6763535 + ], + [ + -124.0791886, + 44.6763546 + ], + [ + -124.079193, + 44.676356 + ], + [ + -124.0791959, + 44.6763571 + ], + [ + -124.0791998, + 44.6763587 + ], + [ + -124.0792156, + 44.6763655 + ], + [ + -124.07922, + 44.6763672 + ], + [ + -124.079225, + 44.6763691 + ], + [ + -124.0792276, + 44.6763699 + ], + [ + -124.0792304, + 44.6763706 + ], + [ + -124.0792334, + 44.6763713 + ], + [ + -124.0792364, + 44.6763717 + ], + [ + -124.0792397, + 44.676372 + ], + [ + -124.079243, + 44.6763718 + ], + [ + -124.0792447, + 44.6763716 + ], + [ + -124.0792464, + 44.6763713 + ], + [ + -124.0792482, + 44.6763708 + ], + [ + -124.07925, + 44.6763701 + ], + [ + -124.0792535, + 44.6763683 + ], + [ + -124.0792566, + 44.6763663 + ], + [ + -124.0792584, + 44.6763647 + ], + [ + -124.0792604, + 44.6763625 + ], + [ + -124.0792626, + 44.6763593 + ], + [ + -124.0792637, + 44.6763573 + ], + [ + -124.0792646, + 44.6763549 + ], + [ + -124.0792655, + 44.676352 + ], + [ + -124.0792663, + 44.6763486 + ], + [ + -124.0792668, + 44.6763445 + ], + [ + -124.0792671, + 44.6763396 + ], + [ + -124.0792672, + 44.6763339 + ], + [ + -124.0792668, + 44.6763182 + ], + [ + -124.0792669, + 44.6763093 + ], + [ + -124.0792672, + 44.6763048 + ], + [ + -124.079268, + 44.6763001 + ], + [ + -124.0792692, + 44.6762954 + ], + [ + -124.0792946, + 44.6762117 + ], + [ + -124.0792991, + 44.6761999 + ], + [ + -124.0793051, + 44.6761865 + ], + [ + -124.0793131, + 44.6761713 + ], + [ + -124.0793181, + 44.6761633 + ], + [ + -124.079324, + 44.6761549 + ], + [ + -124.0793309, + 44.676146 + ], + [ + -124.0793364, + 44.6761403 + ], + [ + -124.0793426, + 44.6761353 + ], + [ + -124.0793471, + 44.6761324 + ], + [ + -124.0793536, + 44.6761289 + ], + [ + -124.0793628, + 44.6761249 + ], + [ + -124.0793685, + 44.6761229 + ], + [ + -124.0793751, + 44.6761208 + ], + [ + -124.079383, + 44.6761187 + ], + [ + -124.0793923, + 44.6761165 + ], + [ + -124.0794032, + 44.6761143 + ], + [ + -124.0794328, + 44.6761088 + ], + [ + -124.0794494, + 44.6761053 + ], + [ + -124.079458, + 44.6761032 + ], + [ + -124.0794669, + 44.6761006 + ], + [ + -124.079476, + 44.6760974 + ], + [ + -124.0794851, + 44.6760934 + ], + [ + -124.0794955, + 44.6760885 + ], + [ + -124.0795063, + 44.6760838 + ], + [ + -124.0795284, + 44.6760743 + ], + [ + -124.079543, + 44.6760678 + ], + [ + -124.079551, + 44.6760638 + ], + [ + -124.0795597, + 44.6760591 + ], + [ + -124.0795689, + 44.6760533 + ], + [ + -124.0795735, + 44.6760501 + ], + [ + -124.079578, + 44.6760465 + ], + [ + -124.0795824, + 44.6760424 + ], + [ + -124.0795865, + 44.6760378 + ], + [ + -124.0795903, + 44.6760325 + ], + [ + -124.0795934, + 44.6760266 + ], + [ + -124.0795982, + 44.6760152 + ], + [ + -124.0796026, + 44.6760039 + ], + [ + -124.0796107, + 44.6759811 + ], + [ + -124.0796253, + 44.6759354 + ], + [ + -124.0796356, + 44.675905 + ], + [ + -124.0796635, + 44.6758238 + ], + [ + -124.0796739, + 44.6757968 + ], + [ + -124.0796805, + 44.6757813 + ], + [ + -124.0796889, + 44.6757636 + ], + [ + -124.0796961, + 44.6757513 + ], + [ + -124.0797048, + 44.6757391 + ], + [ + -124.0797115, + 44.6757312 + ], + [ + -124.0797214, + 44.6757208 + ], + [ + -124.0797359, + 44.6757076 + ], + [ + -124.0797448, + 44.6757004 + ], + [ + -124.0797555, + 44.6756925 + ], + [ + -124.0797683, + 44.6756839 + ], + [ + -124.0797833, + 44.6756749 + ], + [ + -124.0798009, + 44.6756658 + ], + [ + -124.0798104, + 44.6756615 + ], + [ + -124.0798205, + 44.6756573 + ], + [ + -124.0798313, + 44.6756533 + ], + [ + -124.0798426, + 44.6756498 + ], + [ + -124.0798545, + 44.6756468 + ], + [ + -124.0798668, + 44.6756446 + ], + [ + -124.0798752, + 44.6756439 + ], + [ + -124.0798839, + 44.6756439 + ], + [ + -124.0798898, + 44.6756444 + ], + [ + -124.0798978, + 44.6756455 + ], + [ + -124.0799087, + 44.6756478 + ], + [ + -124.0799149, + 44.6756496 + ], + [ + -124.0799222, + 44.6756519 + ], + [ + -124.0799305, + 44.6756549 + ], + [ + -124.07994, + 44.6756589 + ], + [ + -124.0799509, + 44.6756641 + ], + [ + -124.0799633, + 44.6756706 + ], + [ + -124.0799772, + 44.6756789 + ], + [ + -124.0799927, + 44.6756891 + ], + [ + -124.0800095, + 44.6757015 + ], + [ + -124.0800181, + 44.6757083 + ], + [ + -124.0800307, + 44.6757192 + ], + [ + -124.0800421, + 44.6757302 + ], + [ + -124.080049, + 44.6757376 + ], + [ + -124.0800568, + 44.6757465 + ], + [ + -124.0800676, + 44.6757606 + ], + [ + -124.0800792, + 44.6757783 + ], + [ + -124.0800851, + 44.6757885 + ], + [ + -124.0800913, + 44.6758002 + ], + [ + -124.0800978, + 44.6758137 + ], + [ + -124.0801048, + 44.6758293 + ], + [ + -124.0801231, + 44.6758714 + ], + [ + -124.0801284, + 44.6758855 + ], + [ + -124.080132, + 44.6758998 + ], + [ + -124.0801336, + 44.6759094 + ], + [ + -124.080135, + 44.6759223 + ], + [ + -124.0801379, + 44.6759744 + ], + [ + -124.0801396, + 44.6759893 + ], + [ + -124.0801431, + 44.6760063 + ], + [ + -124.0801459, + 44.6760153 + ], + [ + -124.0801496, + 44.6760248 + ], + [ + -124.0801546, + 44.6760349 + ], + [ + -124.0801614, + 44.6760457 + ], + [ + -124.0801703, + 44.676057 + ], + [ + -124.0801778, + 44.6760655 + ], + [ + -124.0801857, + 44.6760743 + ], + [ + -124.0802024, + 44.6760919 + ], + [ + -124.080214, + 44.6761031 + ], + [ + -124.0802208, + 44.6761091 + ], + [ + -124.0802285, + 44.6761153 + ], + [ + -124.0802378, + 44.676122 + ], + [ + -124.0802427, + 44.6761251 + ], + [ + -124.0802479, + 44.6761281 + ], + [ + -124.0802534, + 44.6761308 + ], + [ + -124.0802594, + 44.6761332 + ], + [ + -124.0802657, + 44.6761352 + ], + [ + -124.0802723, + 44.6761365 + ], + [ + -124.0802758, + 44.6761368 + ], + [ + -124.0802793, + 44.6761369 + ], + [ + -124.0802829, + 44.6761367 + ], + [ + -124.080288, + 44.6761359 + ], + [ + -124.0802932, + 44.6761345 + ], + [ + -124.0802967, + 44.6761334 + ], + [ + -124.0803015, + 44.6761315 + ], + [ + -124.0803078, + 44.6761284 + ], + [ + -124.0803115, + 44.6761264 + ], + [ + -124.0803156, + 44.6761239 + ], + [ + -124.0803204, + 44.6761208 + ], + [ + -124.0803258, + 44.676117 + ], + [ + -124.0803318, + 44.6761123 + ], + [ + -124.0803387, + 44.6761067 + ], + [ + -124.0803462, + 44.6761 + ], + [ + -124.0803544, + 44.6760921 + ], + [ + -124.0803632, + 44.6760832 + ], + [ + -124.0803675, + 44.6760786 + ], + [ + -124.0803776, + 44.6760672 + ], + [ + -124.0803872, + 44.6760559 + ], + [ + -124.0804053, + 44.6760332 + ], + [ + -124.0804391, + 44.6759878 + ], + [ + -124.0804618, + 44.6759576 + ], + [ + -124.0804756, + 44.6759404 + ], + [ + -124.0805056, + 44.6759034 + ], + [ + -124.0805361, + 44.6758662 + ], + [ + -124.0805566, + 44.6758421 + ], + [ + -124.0805685, + 44.6758288 + ], + [ + -124.0805822, + 44.6758142 + ], + [ + -124.0805981, + 44.6757986 + ], + [ + -124.0806066, + 44.6757907 + ], + [ + -124.0806074, + 44.6757901 + ], + [ + -124.0806082, + 44.6757897 + ], + [ + -124.0806089, + 44.6757895 + ], + [ + -124.0806097, + 44.6757893 + ], + [ + -124.0806108, + 44.6757892 + ], + [ + -124.0806115, + 44.6757893 + ], + [ + -124.0806123, + 44.6757894 + ], + [ + -124.0806132, + 44.6757897 + ], + [ + -124.0806143, + 44.6757901 + ], + [ + -124.0806156, + 44.6757907 + ], + [ + -124.0806171, + 44.6757915 + ], + [ + -124.0806189, + 44.6757926 + ], + [ + -124.0806209, + 44.6757942 + ], + [ + -124.0806232, + 44.6757961 + ], + [ + -124.0806259, + 44.6757986 + ], + [ + -124.0806289, + 44.6758015 + ], + [ + -124.0806322, + 44.6758049 + ], + [ + -124.0806339, + 44.6758066 + ], + [ + -124.0806357, + 44.6758084 + ], + [ + -124.0806374, + 44.6758101 + ], + [ + -124.0806447, + 44.6758175 + ], + [ + -124.0806514, + 44.6758248 + ], + [ + -124.0806555, + 44.6758297 + ], + [ + -124.0806607, + 44.6758362 + ], + [ + -124.0806669, + 44.675845 + ], + [ + -124.08067, + 44.67585 + ], + [ + -124.0806734, + 44.6758559 + ], + [ + -124.0806767, + 44.6758626 + ], + [ + -124.0806801, + 44.6758705 + ], + [ + -124.0806833, + 44.6758797 + ], + [ + -124.0806847, + 44.6758847 + ], + [ + -124.0806909, + 44.6759111 + ], + [ + -124.0806958, + 44.6759377 + ], + [ + -124.0806983, + 44.6759554 + ], + [ + -124.0807005, + 44.6759791 + ], + [ + -124.0807011, + 44.6759926 + ], + [ + -124.0807011, + 44.676008 + ], + [ + -124.0807002, + 44.6760256 + ], + [ + -124.080674, + 44.6762774 + ], + [ + -124.080667, + 44.6764518 + ], + [ + -124.0806656, + 44.676464 + ], + [ + -124.0806632, + 44.6764766 + ], + [ + -124.080661, + 44.6764847 + ], + [ + -124.0806573, + 44.6764954 + ], + [ + -124.0806547, + 44.6765014 + ], + [ + -124.0806513, + 44.6765082 + ], + [ + -124.0806469, + 44.676516 + ], + [ + -124.0806409, + 44.6765247 + ], + [ + -124.0806331, + 44.6765346 + ], + [ + -124.0806283, + 44.6765398 + ], + [ + -124.0806228, + 44.6765453 + ], + [ + -124.0806165, + 44.6765512 + ], + [ + -124.0806092, + 44.6765574 + ], + [ + -124.0806019, + 44.6765629 + ], + [ + -124.0805943, + 44.6765679 + ], + [ + -124.0805892, + 44.6765709 + ], + [ + -124.0805821, + 44.6765746 + ], + [ + -124.0805726, + 44.6765789 + ], + [ + -124.080567, + 44.6765812 + ], + [ + -124.0805606, + 44.6765835 + ], + [ + -124.0805531, + 44.676586 + ], + [ + -124.0805444, + 44.6765885 + ], + [ + -124.0805343, + 44.676591 + ], + [ + -124.0805227, + 44.6765935 + ], + [ + -124.0805092, + 44.6765961 + ], + [ + -124.0804936, + 44.6765989 + ], + [ + -124.0804763, + 44.6766015 + ], + [ + -124.0804588, + 44.6766034 + ], + [ + -124.0804471, + 44.6766043 + ], + [ + -124.0804313, + 44.676605 + ], + [ + -124.0804222, + 44.6766052 + ], + [ + -124.0804118, + 44.676605 + ], + [ + -124.0804, + 44.6766046 + ], + [ + -124.0803865, + 44.6766035 + ], + [ + -124.0803711, + 44.6766017 + ], + [ + -124.0803629, + 44.6766004 + ], + [ + -124.0803543, + 44.6765988 + ], + [ + -124.080343, + 44.6765963 + ], + [ + -124.080332, + 44.6765935 + ], + [ + -124.0803248, + 44.6765915 + ], + [ + -124.0803155, + 44.6765885 + ], + [ + -124.0803034, + 44.676584 + ], + [ + -124.0802967, + 44.6765812 + ], + [ + -124.0802892, + 44.6765777 + ], + [ + -124.0802809, + 44.6765735 + ], + [ + -124.0802717, + 44.6765683 + ], + [ + -124.0802616, + 44.6765617 + ], + [ + -124.0802564, + 44.676558 + ], + [ + -124.080251, + 44.6765538 + ], + [ + -124.0802454, + 44.6765492 + ], + [ + -124.0802428, + 44.6765467 + ], + [ + -124.0802407, + 44.6765441 + ], + [ + -124.0802395, + 44.6765423 + ], + [ + -124.0802383, + 44.6765399 + ], + [ + -124.0802371, + 44.6765366 + ], + [ + -124.0802361, + 44.676532 + ], + [ + -124.0802358, + 44.6765293 + ], + [ + -124.0802357, + 44.6765262 + ], + [ + -124.0802358, + 44.6765226 + ], + [ + -124.0802361, + 44.6765185 + ], + [ + -124.0802369, + 44.6765074 + ], + [ + -124.0802368, + 44.6765011 + ], + [ + -124.0802364, + 44.6764978 + ], + [ + -124.0802356, + 44.6764943 + ], + [ + -124.0802343, + 44.6764906 + ], + [ + -124.0802323, + 44.6764868 + ], + [ + -124.080231, + 44.6764849 + ], + [ + -124.0802294, + 44.676483 + ], + [ + -124.0802278, + 44.6764811 + ], + [ + -124.0802261, + 44.6764792 + ], + [ + -124.0802225, + 44.6764751 + ], + [ + -124.0802199, + 44.6764721 + ], + [ + -124.0802164, + 44.6764681 + ], + [ + -124.0802114, + 44.6764627 + ], + [ + -124.0802046, + 44.6764557 + ], + [ + -124.0802007, + 44.676452 + ], + [ + -124.0801963, + 44.676448 + ], + [ + -124.0801939, + 44.6764462 + ], + [ + -124.0801915, + 44.6764443 + ], + [ + -124.0801889, + 44.6764426 + ], + [ + -124.0801862, + 44.6764411 + ], + [ + -124.0801835, + 44.6764398 + ], + [ + -124.0801821, + 44.6764393 + ], + [ + -124.0801807, + 44.676439 + ], + [ + -124.0801794, + 44.6764387 + ], + [ + -124.080178, + 44.6764386 + ], + [ + -124.0801766, + 44.6764387 + ], + [ + -124.0801753, + 44.676439 + ], + [ + -124.0801739, + 44.6764395 + ], + [ + -124.0801727, + 44.6764403 + ], + [ + -124.0801714, + 44.6764414 + ], + [ + -124.080169, + 44.676444 + ], + [ + -124.0801666, + 44.6764468 + ], + [ + -124.0801618, + 44.6764528 + ], + [ + -124.0801587, + 44.6764571 + ], + [ + -124.0801546, + 44.6764631 + ], + [ + -124.0801493, + 44.6764715 + ], + [ + -124.0801424, + 44.6764832 + ], + [ + -124.0801337, + 44.676499 + ], + [ + -124.0801289, + 44.6765078 + ], + [ + -124.0801241, + 44.6765173 + ], + [ + -124.0801198, + 44.6765269 + ], + [ + -124.0801115, + 44.676546 + ], + [ + -124.0801057, + 44.6765586 + ], + [ + -124.0801021, + 44.6765657 + ], + [ + -124.0801, + 44.6765694 + ], + [ + -124.0800977, + 44.676573 + ], + [ + -124.0800925, + 44.67658 + ], + [ + -124.0800887, + 44.6765845 + ], + [ + -124.0800833, + 44.6765904 + ], + [ + -124.0800602, + 44.6766137 + ], + [ + -124.0800538, + 44.6766205 + ], + [ + -124.0800471, + 44.6766286 + ], + [ + -124.0800439, + 44.6766331 + ], + [ + -124.0800407, + 44.6766379 + ], + [ + -124.0800369, + 44.676645 + ], + [ + -124.0800337, + 44.6766522 + ], + [ + -124.080032, + 44.6766571 + ], + [ + -124.0800302, + 44.6766637 + ], + [ + -124.0800284, + 44.6766726 + ], + [ + -124.0800278, + 44.6766777 + ], + [ + -124.0800273, + 44.6766835 + ], + [ + -124.0800271, + 44.6766901 + ], + [ + -124.0800273, + 44.6766976 + ], + [ + -124.0800279, + 44.6767059 + ], + [ + -124.0800292, + 44.6767152 + ], + [ + -124.0800298, + 44.6767179 + ], + [ + -124.0800307, + 44.6767205 + ], + [ + -124.080033, + 44.6767257 + ], + [ + -124.080035, + 44.6767292 + ], + [ + -124.0800382, + 44.6767338 + ], + [ + -124.080043, + 44.6767398 + ], + [ + -124.0800652, + 44.6767638 + ], + [ + -124.0800708, + 44.6767707 + ], + [ + -124.0800734, + 44.6767744 + ], + [ + -124.0800758, + 44.6767784 + ], + [ + -124.0800779, + 44.6767826 + ], + [ + -124.0800794, + 44.6767872 + ], + [ + -124.0800805, + 44.6767926 + ], + [ + -124.0800812, + 44.6767981 + ], + [ + -124.0800813, + 44.6768018 + ], + [ + -124.0800812, + 44.6768069 + ], + [ + -124.0800804, + 44.6768138 + ], + [ + -124.0800797, + 44.6768177 + ], + [ + -124.0800786, + 44.6768222 + ], + [ + -124.080077, + 44.6768274 + ], + [ + -124.0800747, + 44.6768332 + ], + [ + -124.0800714, + 44.6768399 + ], + [ + -124.0800695, + 44.6768433 + ], + [ + -124.0800672, + 44.676847 + ], + [ + -124.0800645, + 44.6768508 + ], + [ + -124.0800608, + 44.6768552 + ], + [ + -124.0800564, + 44.676859 + ], + [ + -124.0800532, + 44.6768614 + ], + [ + -124.0800486, + 44.6768642 + ], + [ + -124.0800418, + 44.6768676 + ], + [ + -124.0800319, + 44.6768715 + ], + [ + -124.0800265, + 44.6768732 + ], + [ + -124.0800187, + 44.6768755 + ], + [ + -124.0800103, + 44.6768776 + ], + [ + -124.0800004, + 44.6768798 + ], + [ + -124.0799743, + 44.6768854 + ], + [ + -124.0799602, + 44.6768889 + ], + [ + -124.0799532, + 44.676891 + ], + [ + -124.0799462, + 44.6768936 + ], + [ + -124.0799394, + 44.6768967 + ], + [ + -124.079933, + 44.6769005 + ], + [ + -124.0799301, + 44.6769028 + ], + [ + -124.0799274, + 44.6769052 + ], + [ + -124.0799251, + 44.676908 + ], + [ + -124.079923, + 44.6769111 + ], + [ + -124.0799214, + 44.6769146 + ], + [ + -124.0799163, + 44.6769285 + ], + [ + -124.0799119, + 44.6769424 + ], + [ + -124.0799093, + 44.6769517 + ], + [ + -124.079906, + 44.6769642 + ], + [ + -124.0799019, + 44.6769808 + ], + [ + -124.079894, + 44.677031 + ], + [ + -124.079892, + 44.6770381 + ], + [ + -124.0798906, + 44.6770419 + ], + [ + -124.0798894, + 44.6770447 + ], + [ + -124.0798879, + 44.6770474 + ], + [ + -124.0798842, + 44.6770525 + ], + [ + -124.0798813, + 44.6770557 + ], + [ + -124.0798768, + 44.6770598 + ], + [ + -124.07987, + 44.6770648 + ], + [ + -124.0798658, + 44.6770675 + ], + [ + -124.0798607, + 44.6770705 + ], + [ + -124.0798166, + 44.677093 + ], + [ + -124.0798111, + 44.6770962 + ], + [ + -124.0798056, + 44.6770998 + ], + [ + -124.0798002, + 44.6771039 + ], + [ + -124.079795, + 44.6771086 + ], + [ + -124.0797904, + 44.6771139 + ], + [ + -124.079752, + 44.6771668 + ], + [ + -124.079728, + 44.677199 + ], + [ + -124.0797034, + 44.6772311 + ], + [ + -124.0796865, + 44.6772525 + ], + [ + -124.0796808, + 44.677259 + ], + [ + -124.0796744, + 44.6772651 + ], + [ + -124.0796698, + 44.6772691 + ], + [ + -124.0796633, + 44.6772742 + ], + [ + -124.079654, + 44.6772806 + ], + [ + -124.0796484, + 44.6772841 + ], + [ + -124.0796419, + 44.6772879 + ], + [ + -124.0796343, + 44.677292 + ], + [ + -124.0796254, + 44.6772963 + ], + [ + -124.0796152, + 44.6773009 + ], + [ + -124.0796036, + 44.6773056 + ], + [ + -124.0795975, + 44.6773078 + ], + [ + -124.0795915, + 44.6773096 + ], + [ + -124.0795851, + 44.6773109 + ], + [ + -124.0795807, + 44.6773115 + ], + [ + -124.0795746, + 44.6773121 + ], + [ + -124.0795662, + 44.6773123 + ], + [ + -124.0795612, + 44.6773122 + ], + [ + -124.0795555, + 44.6773118 + ], + [ + -124.0795489, + 44.6773111 + ], + [ + -124.0795414, + 44.6773099 + ], + [ + -124.0795328, + 44.6773081 + ], + [ + -124.0795231, + 44.6773054 + ], + [ + -124.0795181, + 44.6773037 + ], + [ + -124.0795129, + 44.6773017 + ], + [ + -124.0795075, + 44.6772994 + ], + [ + -124.0795019, + 44.6772967 + ], + [ + -124.0794963, + 44.6772935 + ], + [ + -124.0794907, + 44.6772899 + ], + [ + -124.0794853, + 44.6772857 + ], + [ + -124.0794837, + 44.6772844 + ], + [ + -124.0794823, + 44.677283 + ], + [ + -124.0794798, + 44.6772802 + ], + [ + -124.0794783, + 44.6772783 + ], + [ + -124.0794766, + 44.6772757 + ], + [ + -124.0794745, + 44.6772721 + ], + [ + -124.0794675, + 44.677258 + ], + [ + -124.0794651, + 44.6772541 + ], + [ + -124.0794637, + 44.677252 + ], + [ + -124.0794619, + 44.6772499 + ], + [ + -124.0794543, + 44.6772409 + ], + [ + -124.0794469, + 44.677232 + ], + [ + -124.0794416, + 44.6772262 + ], + [ + -124.0794384, + 44.6772229 + ], + [ + -124.0794345, + 44.6772192 + ], + [ + -124.0794296, + 44.677215 + ], + [ + -124.0794268, + 44.6772129 + ], + [ + -124.0794236, + 44.6772105 + ], + [ + -124.0794199, + 44.6772081 + ], + [ + -124.0794157, + 44.6772055 + ], + [ + -124.079409, + 44.6772017 + ], + [ + -124.0794021, + 44.6771982 + ], + [ + -124.0793975, + 44.6771961 + ], + [ + -124.0793914, + 44.6771935 + ], + [ + -124.0793831, + 44.6771904 + ], + [ + -124.0793783, + 44.6771888 + ], + [ + -124.0793729, + 44.6771871 + ], + [ + -124.0793666, + 44.6771855 + ], + [ + -124.0793595, + 44.6771839 + ], + [ + -124.0793513, + 44.6771825 + ], + [ + -124.079342, + 44.6771813 + ], + [ + -124.079337, + 44.6771809 + ], + [ + -124.0793317, + 44.6771807 + ], + [ + -124.0793261, + 44.6771806 + ], + [ + -124.07931, + 44.6771809 + ], + [ + -124.0792938, + 44.6771818 + ], + [ + -124.0792828, + 44.6771829 + ], + [ + -124.0792682, + 44.6771848 + ], + [ + -124.0792486, + 44.6771883 + ], + [ + -124.0792375, + 44.6771907 + ], + [ + -124.0792248, + 44.677194 + ], + [ + -124.0792104, + 44.6771982 + ], + [ + -124.0791943, + 44.6772039 + ], + [ + -124.0791763, + 44.6772114 + ], + [ + -124.079167, + 44.6772158 + ], + [ + -124.0791572, + 44.6772209 + ], + [ + -124.079147, + 44.6772267 + ], + [ + -124.0791365, + 44.6772334 + ], + [ + -124.0791233, + 44.6772428 + ], + [ + -124.0791112, + 44.6772522 + ], + [ + -124.0791036, + 44.6772586 + ], + [ + -124.0790941, + 44.6772672 + ], + [ + -124.0790822, + 44.6772786 + ], + [ + -124.0790671, + 44.6772939 + ], + [ + -124.0790473, + 44.6773142 + ], + [ + -124.0790354, + 44.6773257 + ], + [ + -124.0790209, + 44.6773386 + ], + [ + -124.0789854, + 44.6773692 + ], + [ + -124.07895, + 44.6773994 + ], + [ + -124.0789253, + 44.6774191 + ], + [ + -124.0789105, + 44.6774301 + ], + [ + -124.0788927, + 44.6774424 + ], + [ + -124.0788711, + 44.6774562 + ], + [ + -124.0788588, + 44.6774634 + ], + [ + -124.0788496, + 44.6774682 + ], + [ + -124.07884, + 44.6774723 + ], + [ + -124.0788334, + 44.6774747 + ], + [ + -124.078812, + 44.6774806 + ], + [ + -124.0788048, + 44.677482 + ], + [ + -124.0787964, + 44.6774833 + ], + [ + -124.0787867, + 44.6774845 + ], + [ + -124.0787755, + 44.6774853 + ], + [ + -124.0787627, + 44.6774858 + ], + [ + -124.078748, + 44.6774857 + ], + [ + -124.0787312, + 44.6774849 + ], + [ + -124.0787124, + 44.677483 + ], + [ + -124.0787026, + 44.6774817 + ], + [ + -124.0786924, + 44.6774801 + ], + [ + -124.0786507, + 44.6774727 + ], + [ + -124.078609, + 44.6774645 + ], + [ + -124.0785813, + 44.6774586 + ], + [ + -124.0785444, + 44.6774504 + ], + [ + -124.0784951, + 44.6774387 + ], + [ + -124.0784431, + 44.6774267 + ], + [ + -124.0783916, + 44.6774147 + ], + [ + -124.0783578, + 44.6774059 + ], + [ + -124.0783386, + 44.6774004 + ], + [ + -124.078317, + 44.6773933 + ], + [ + -124.0782925, + 44.6773843 + ], + [ + -124.0782796, + 44.677379 + ], + [ + -124.078266, + 44.6773728 + ], + [ + -124.0782595, + 44.6773696 + ], + [ + -124.0782533, + 44.6773662 + ], + [ + -124.0782417, + 44.677359 + ], + [ + -124.0782345, + 44.6773539 + ], + [ + -124.0782256, + 44.6773467 + ], + [ + -124.0782146, + 44.6773366 + ], + [ + -124.0782088, + 44.6773306 + ], + [ + -124.0782024, + 44.6773235 + ], + [ + -124.0781955, + 44.6773152 + ], + [ + -124.078188, + 44.6773056 + ], + [ + -124.0781797, + 44.6772945 + ], + [ + -124.0781577, + 44.6772647 + ], + [ + -124.0781513, + 44.6772559 + ], + [ + -124.0781454, + 44.6772471 + ], + [ + -124.0781347, + 44.677229 + ], + [ + -124.0781281, + 44.6772168 + ], + [ + -124.0781031, + 44.6771676 + ], + [ + -124.0780951, + 44.6771537 + ], + [ + -124.078085, + 44.6771379 + ], + [ + -124.078079, + 44.6771297 + ], + [ + -124.078072, + 44.677121 + ], + [ + -124.0780648, + 44.6771131 + ], + [ + -124.078057, + 44.6771056 + ], + [ + -124.0780514, + 44.6771008 + ], + [ + -124.0780437, + 44.6770947 + ], + [ + -124.0780328, + 44.677087 + ], + [ + -124.0780263, + 44.6770828 + ], + [ + -124.0780186, + 44.6770782 + ], + [ + -124.0780095, + 44.6770731 + ], + [ + -124.0779988, + 44.6770675 + ], + [ + -124.0779862, + 44.6770614 + ], + [ + -124.0779713, + 44.6770547 + ], + [ + -124.0779651, + 44.6770521 + ], + [ + -124.0779583, + 44.6770498 + ], + [ + -124.0779536, + 44.6770484 + ], + [ + -124.0779472, + 44.6770467 + ], + [ + -124.0779383, + 44.6770449 + ], + [ + -124.0779332, + 44.677044 + ], + [ + -124.0779273, + 44.6770433 + ], + [ + -124.0779206, + 44.6770428 + ], + [ + -124.0779131, + 44.6770427 + ], + [ + -124.0779091, + 44.6770428 + ], + [ + -124.077905, + 44.6770431 + ], + [ + -124.0779007, + 44.6770437 + ], + [ + -124.0778963, + 44.6770445 + ], + [ + -124.0778918, + 44.6770456 + ], + [ + -124.0778872, + 44.6770471 + ], + [ + -124.0778827, + 44.6770492 + ], + [ + -124.0778784, + 44.6770518 + ], + [ + -124.0778645, + 44.677062 + ], + [ + -124.0778512, + 44.6770727 + ], + [ + -124.0778427, + 44.6770801 + ], + [ + -124.0778316, + 44.6770901 + ], + [ + -124.0778175, + 44.6771039 + ], + [ + -124.0778097, + 44.6771119 + ], + [ + -124.0778011, + 44.6771212 + ], + [ + -124.0777777, + 44.6771474 + ], + [ + -124.0777552, + 44.6771738 + ], + [ + -124.0777111, + 44.6772268 + ], + [ + -124.0776806, + 44.677262 + ], + [ + -124.0776623, + 44.677282 + ], + [ + -124.077644, + 44.6773009 + ], + [ + -124.0776245, + 44.6773195 + ], + [ + -124.077611, + 44.6773316 + ], + [ + -124.0775923, + 44.6773471 + ], + [ + -124.0775814, + 44.6773555 + ], + [ + -124.0775697, + 44.6773639 + ], + [ + -124.0775538, + 44.6773745 + ], + [ + -124.0775366, + 44.6773848 + ], + [ + -124.0775273, + 44.6773898 + ], + [ + -124.0775226, + 44.6773918 + ], + [ + -124.0775176, + 44.6773934 + ], + [ + -124.0775142, + 44.6773942 + ], + [ + -124.0775095, + 44.6773949 + ], + [ + -124.077503, + 44.6773953 + ], + [ + -124.0774991, + 44.6773953 + ], + [ + -124.0774946, + 44.677395 + ], + [ + -124.0774894, + 44.6773944 + ], + [ + -124.0774833, + 44.6773934 + ], + [ + -124.0774763, + 44.6773918 + ], + [ + -124.077468, + 44.6773895 + ], + [ + -124.0774586, + 44.6773863 + ], + [ + -124.0774477, + 44.6773821 + ], + [ + -124.0774355, + 44.6773765 + ], + [ + -124.0774218, + 44.6773696 + ], + [ + -124.0774069, + 44.6773612 + ], + [ + -124.0773994, + 44.6773567 + ], + [ + -124.0773861, + 44.6773482 + ], + [ + -124.0773736, + 44.6773397 + ], + [ + -124.0773657, + 44.677334 + ], + [ + -124.077356, + 44.6773263 + ], + [ + -124.0773509, + 44.6773217 + ], + [ + -124.0773454, + 44.6773165 + ], + [ + -124.0773397, + 44.6773103 + ], + [ + -124.0773339, + 44.6773031 + ], + [ + -124.0773311, + 44.6772991 + ], + [ + -124.0773285, + 44.6772948 + ], + [ + -124.0773261, + 44.67729 + ], + [ + -124.0773238, + 44.6772849 + ], + [ + -124.0773219, + 44.6772792 + ], + [ + -124.0773197, + 44.6772698 + ], + [ + -124.0773184, + 44.6772603 + ], + [ + -124.0773179, + 44.6772539 + ], + [ + -124.0773177, + 44.6772453 + ], + [ + -124.0773182, + 44.6772338 + ], + [ + -124.0773199, + 44.6772185 + ], + [ + -124.0773235, + 44.6771981 + ], + [ + -124.0773292, + 44.6771713 + ], + [ + -124.0773305, + 44.6771661 + ], + [ + -124.0773322, + 44.6771609 + ], + [ + -124.0773367, + 44.6771505 + ], + [ + -124.0773403, + 44.6771436 + ], + [ + -124.0773457, + 44.6771344 + ], + [ + -124.0773697, + 44.6770978 + ], + [ + -124.077376, + 44.6770875 + ], + [ + -124.077382, + 44.6770757 + ], + [ + -124.0773845, + 44.6770694 + ], + [ + -124.0773866, + 44.6770628 + ], + [ + -124.0773881, + 44.6770557 + ], + [ + -124.0773886, + 44.6770482 + ], + [ + -124.0773878, + 44.6770402 + ], + [ + -124.0773867, + 44.6770361 + ], + [ + -124.0773853, + 44.6770321 + ], + [ + -124.0773833, + 44.6770281 + ], + [ + -124.0773817, + 44.6770255 + ], + [ + -124.0773792, + 44.6770219 + ], + [ + -124.0773754, + 44.6770173 + ], + [ + -124.0773731, + 44.6770147 + ], + [ + -124.0773701, + 44.6770117 + ], + [ + -124.0773666, + 44.6770085 + ], + [ + -124.0773623, + 44.677005 + ], + [ + -124.0773572, + 44.6770012 + ], + [ + -124.0773511, + 44.6769972 + ], + [ + -124.0773478, + 44.6769953 + ], + [ + -124.0773442, + 44.6769935 + ], + [ + -124.0773405, + 44.6769917 + ], + [ + -124.0773365, + 44.67699 + ], + [ + -124.0773323, + 44.6769886 + ], + [ + -124.0773261, + 44.6769871 + ], + [ + -124.0773198, + 44.6769864 + ], + [ + -124.0773156, + 44.6769863 + ], + [ + -124.0773098, + 44.6769866 + ], + [ + -124.0773021, + 44.6769878 + ], + [ + -124.0772976, + 44.6769888 + ], + [ + -124.0772925, + 44.6769903 + ], + [ + -124.0772866, + 44.6769924 + ], + [ + -124.0772798, + 44.6769953 + ], + [ + -124.0772721, + 44.6769991 + ], + [ + -124.0772633, + 44.6770042 + ], + [ + -124.0772532, + 44.6770106 + ], + [ + -124.077242, + 44.6770187 + ], + [ + -124.0772294, + 44.6770288 + ], + [ + -124.0772156, + 44.6770408 + ], + [ + -124.0772008, + 44.6770546 + ], + [ + -124.0771934, + 44.6770618 + ], + [ + -124.0771859, + 44.6770692 + ], + [ + -124.0771784, + 44.6770771 + ], + [ + -124.0771715, + 44.6770852 + ], + [ + -124.0771593, + 44.6771015 + ], + [ + -124.0771521, + 44.6771125 + ], + [ + -124.0771434, + 44.6771273 + ], + [ + -124.0771329, + 44.6771471 + ], + [ + -124.0771192, + 44.6771735 + ], + [ + -124.0771108, + 44.6771883 + ], + [ + -124.0771002, + 44.6772051 + ], + [ + -124.0770939, + 44.6772138 + ], + [ + -124.0770865, + 44.677223 + ], + [ + -124.0770778, + 44.6772327 + ], + [ + -124.0770505, + 44.6772601 + ], + [ + -124.0770222, + 44.6772865 + ], + [ + -124.0770025, + 44.6773034 + ], + [ + -124.0769751, + 44.6773251 + ], + [ + -124.0769586, + 44.6773369 + ], + [ + -124.0769391, + 44.6773501 + ], + [ + -124.0769156, + 44.6773644 + ], + [ + -124.0768872, + 44.6773799 + ], + [ + -124.0768713, + 44.6773878 + ], + [ + -124.0768538, + 44.6773959 + ], + [ + -124.076842, + 44.6774006 + ], + [ + -124.0768299, + 44.6774048 + ], + [ + -124.0768216, + 44.6774072 + ], + [ + -124.0768103, + 44.67741 + ], + [ + -124.0767949, + 44.677413 + ], + [ + -124.076786, + 44.6774144 + ], + [ + -124.0767758, + 44.6774156 + ], + [ + -124.0767641, + 44.6774165 + ], + [ + -124.0767506, + 44.6774171 + ], + [ + -124.0767354, + 44.677417 + ], + [ + -124.0767182, + 44.677416 + ], + [ + -124.0767091, + 44.6774151 + ], + [ + -124.0766997, + 44.6774138 + ], + [ + -124.0766898, + 44.677412 + ], + [ + -124.0766795, + 44.6774098 + ], + [ + -124.0766585, + 44.6774044 + ], + [ + -124.0766377, + 44.6773982 + ], + [ + -124.0765966, + 44.6773843 + ], + [ + -124.0765695, + 44.677374 + ], + [ + -124.0764609, + 44.6773316 + ], + [ + -124.0764292, + 44.6773206 + ], + [ + -124.0763924, + 44.6773095 + ], + [ + -124.0763723, + 44.6773044 + ], + [ + -124.0763506, + 44.6772998 + ], + [ + -124.0761886, + 44.6772686 + ], + [ + -124.0760259, + 44.6772384 + ], + [ + -124.075917, + 44.6772196 + ], + [ + -124.0753588, + 44.6771288 + ], + [ + -124.0752129, + 44.6771051 + ], + [ + -124.0750667, + 44.6770826 + ], + [ + -124.0749688, + 44.6770696 + ], + [ + -124.0749125, + 44.6770633 + ], + [ + -124.0748479, + 44.6770573 + ], + [ + -124.0748124, + 44.6770555 + ], + [ + -124.0747769, + 44.6770557 + ], + [ + -124.0747217, + 44.6770591 + ], + [ + -124.0746797, + 44.6770636 + ], + [ + -124.0745118, + 44.6770869 + ], + [ + -124.0744637, + 44.6770919 + ], + [ + -124.074438, + 44.6770937 + ], + [ + -124.0739157, + 44.6771019 + ], + [ + -124.0738415, + 44.6771078 + ], + [ + -124.0737866, + 44.6771145 + ], + [ + -124.0737321, + 44.677123 + ], + [ + -124.0736961, + 44.6771298 + ], + [ + -124.0736485, + 44.67714 + ], + [ + -124.0735859, + 44.6771556 + ], + [ + -124.0735506, + 44.6771655 + ], + [ + -124.0735107, + 44.6771776 + ], + [ + -124.0734657, + 44.6771925 + ], + [ + -124.0734151, + 44.6772107 + ], + [ + -124.0733585, + 44.677233 + ], + [ + -124.072844, + 44.6774489 + ], + [ + -124.0723111, + 44.6776653 + ], + [ + -124.0722353, + 44.6776986 + ], + [ + -124.0721614, + 44.6777341 + ], + [ + -124.0721133, + 44.677759 + ], + [ + -124.0720507, + 44.6777937 + ], + [ + -124.07197, + 44.6778425 + ], + [ + -124.0719254, + 44.6778717 + ], + [ + -124.0718758, + 44.6779062 + ], + [ + -124.0718212, + 44.677947 + ], + [ + -124.0717613, + 44.6779954 + ], + [ + -124.0716966, + 44.6780529 + ], + [ + -124.0716223, + 44.6781238 + ], + [ + -124.07155, + 44.6781953 + ], + [ + -124.0714102, + 44.6783399 + ], + [ + -124.0713193, + 44.6784373 + ], + [ + -124.0711992, + 44.6785682 + ], + [ + -124.0709178, + 44.6788571 + ], + [ + -124.0708804, + 44.6788994 + ], + [ + -124.0708403, + 44.6789486 + ], + [ + -124.0707987, + 44.6790063 + ], + [ + -124.0707787, + 44.6790379 + ], + [ + -124.0707593, + 44.6790723 + ], + [ + -124.0705822, + 44.679407 + ], + [ + -124.0703701, + 44.6796893 + ], + [ + -124.0703612, + 44.6797001 + ], + [ + -124.0703514, + 44.6797105 + ], + [ + -124.0703444, + 44.6797172 + ], + [ + -124.0703347, + 44.679726 + ], + [ + -124.0702945, + 44.6797606 + ], + [ + -124.0702835, + 44.6797707 + ], + [ + -124.0702718, + 44.6797826 + ], + [ + -124.0702661, + 44.6797892 + ], + [ + -124.07025, + 44.6798105 + ], + [ + -124.0702364, + 44.6798327 + ], + [ + -124.0702285, + 44.6798479 + ], + [ + -124.0702189, + 44.6798686 + ], + [ + -124.0701855, + 44.679953 + ], + [ + -124.0701751, + 44.6799769 + ], + [ + -124.0701615, + 44.6800035 + ], + [ + -124.0701532, + 44.6800173 + ], + [ + -124.0701434, + 44.6800317 + ], + [ + -124.0701317, + 44.6800465 + ], + [ + -124.0701134, + 44.6800671 + ], + [ + -124.0700942, + 44.6800872 + ], + [ + -124.0700538, + 44.6801266 + ], + [ + -124.0699708, + 44.6802047 + ], + [ + -124.069948, + 44.6802274 + ], + [ + -124.069923, + 44.680254 + ], + [ + -124.0698637, + 44.6803188 + ], + [ + -124.0698053, + 44.6803839 + ], + [ + -124.069769, + 44.6804283 + ], + [ + -124.0697497, + 44.6804542 + ], + [ + -124.0697295, + 44.6804845 + ], + [ + -124.069709, + 44.68052 + ], + [ + -124.0696995, + 44.6805394 + ], + [ + -124.0696908, + 44.6805593 + ], + [ + -124.0696831, + 44.6805794 + ], + [ + -124.06967, + 44.6806198 + ], + [ + -124.0696625, + 44.680647 + ], + [ + -124.0696537, + 44.6806833 + ], + [ + -124.0696426, + 44.6807318 + ], + [ + -124.0696266, + 44.6807963 + ], + [ + -124.0696154, + 44.6808328 + ], + [ + -124.0695888, + 44.6809094 + ], + [ + -124.0695604, + 44.6809856 + ], + [ + -124.0695402, + 44.6810363 + ], + [ + -124.0695114, + 44.6811038 + ], + [ + -124.0695024, + 44.6811221 + ], + [ + -124.0694919, + 44.68114 + ], + [ + -124.0694841, + 44.6811517 + ], + [ + -124.0694729, + 44.6811669 + ], + [ + -124.0694567, + 44.6811869 + ], + [ + -124.0694333, + 44.6812127 + ], + [ + -124.0693997, + 44.6812462 + ], + [ + -124.0693534, + 44.6812896 + ], + [ + -124.0693453, + 44.6812961 + ], + [ + -124.069336, + 44.6813018 + ], + [ + -124.0693292, + 44.6813052 + ], + [ + -124.0693194, + 44.6813093 + ], + [ + -124.0693053, + 44.681314 + ], + [ + -124.0692852, + 44.6813194 + ], + [ + -124.069257, + 44.6813255 + ], + [ + -124.0692191, + 44.6813332 + ], + [ + -124.0691986, + 44.6813379 + ], + [ + -124.0691882, + 44.6813408 + ], + [ + -124.0691778, + 44.6813442 + ], + [ + -124.0691676, + 44.6813482 + ], + [ + -124.0691578, + 44.6813531 + ], + [ + -124.0691487, + 44.6813592 + ], + [ + -124.0691447, + 44.6813626 + ], + [ + -124.0691411, + 44.6813665 + ], + [ + -124.069138, + 44.6813708 + ], + [ + -124.0691354, + 44.6813756 + ], + [ + -124.0691334, + 44.681381 + ], + [ + -124.0691302, + 44.6813935 + ], + [ + -124.0691274, + 44.681406 + ], + [ + -124.0691229, + 44.681431 + ], + [ + -124.0691205, + 44.6814477 + ], + [ + -124.0691176, + 44.68147 + ], + [ + -124.0691141, + 44.6814997 + ], + [ + -124.0691115, + 44.6815268 + ], + [ + -124.0691097, + 44.681554 + ], + [ + -124.0691071, + 44.6816084 + ], + [ + -124.0691044, + 44.6816446 + ], + [ + -124.0691019, + 44.6816652 + ], + [ + -124.0690979, + 44.6816887 + ], + [ + -124.0690915, + 44.6817154 + ], + [ + -124.0690838, + 44.6817395 + ], + [ + -124.0690749, + 44.6817632 + ], + [ + -124.0690535, + 44.6818099 + ], + [ + -124.0690371, + 44.6818405 + ], + [ + -124.0690132, + 44.6818807 + ], + [ + -124.0689091, + 44.6820398 + ], + [ + -124.0688814, + 44.6820857 + ], + [ + -124.0688533, + 44.6821391 + ], + [ + -124.0686841, + 44.6824959 + ], + [ + -124.0686298, + 44.6826153 + ], + [ + -124.06838, + 44.683183 + ], + [ + -124.0681723, + 44.683634 + ], + [ + -124.0681556, + 44.6836738 + ], + [ + -124.0681402, + 44.6837138 + ], + [ + -124.0681125, + 44.6837943 + ], + [ + -124.0680958, + 44.6838484 + ], + [ + -124.0680346, + 44.6840653 + ], + [ + -124.0679315, + 44.6845526 + ], + [ + -124.0679186, + 44.6845917 + ], + [ + -124.0679028, + 44.6846302 + ], + [ + -124.0678909, + 44.6846556 + ], + [ + -124.0678735, + 44.6846891 + ], + [ + -124.0678482, + 44.6847332 + ], + [ + -124.067812, + 44.6847914 + ], + [ + -124.0677618, + 44.6848682 + ], + [ + -124.067751, + 44.6848826 + ], + [ + -124.0677385, + 44.6848963 + ], + [ + -124.0677294, + 44.684905 + ], + [ + -124.0677164, + 44.6849164 + ], + [ + -124.0676607, + 44.6849603 + ], + [ + -124.0676452, + 44.6849731 + ], + [ + -124.0676307, + 44.6849864 + ], + [ + -124.0676206, + 44.6849965 + ], + [ + -124.0676127, + 44.6850057 + ], + [ + -124.067605, + 44.6850158 + ], + [ + -124.067598, + 44.6850272 + ], + [ + -124.0675921, + 44.6850399 + ], + [ + -124.0675877, + 44.6850517 + ], + [ + -124.0675839, + 44.6850635 + ], + [ + -124.0675779, + 44.6850871 + ], + [ + -124.0675749, + 44.6851028 + ], + [ + -124.067572, + 44.6851238 + ], + [ + -124.0675698, + 44.6851518 + ], + [ + -124.0675689, + 44.6851892 + ], + [ + -124.0675696, + 44.6852391 + ], + [ + -124.067572, + 44.6852745 + ], + [ + -124.0675766, + 44.6853066 + ], + [ + -124.0675909, + 44.6853808 + ], + [ + -124.067599, + 44.6854279 + ], + [ + -124.067602, + 44.6854549 + ], + [ + -124.0676031, + 44.6854856 + ], + [ + -124.0676025, + 44.685502 + ], + [ + -124.0676007, + 44.6855195 + ], + [ + -124.0675974, + 44.6855381 + ], + [ + -124.0675909, + 44.6855647 + ], + [ + -124.0675834, + 44.685591 + ], + [ + -124.067578, + 44.6856084 + ], + [ + -124.0675703, + 44.6856317 + ], + [ + -124.0675596, + 44.6856626 + ], + [ + -124.0674509, + 44.685959 + ], + [ + -124.0674174, + 44.6860583 + ], + [ + -124.0673997, + 44.6861167 + ], + [ + -124.0673832, + 44.6861754 + ], + [ + -124.0673514, + 44.6862929 + ], + [ + -124.0673295, + 44.686371 + ], + [ + -124.067313, + 44.6864231 + ], + [ + -124.0672947, + 44.6864749 + ], + [ + -124.0672567, + 44.6865784 + ], + [ + -124.0672332, + 44.6866477 + ], + [ + -124.0672215, + 44.6866875 + ], + [ + -124.0672103, + 44.6867334 + ], + [ + -124.0672025, + 44.6867749 + ], + [ + -124.0671967, + 44.6868166 + ], + [ + -124.067189, + 44.6869002 + ], + [ + -124.0671779, + 44.6870677 + ], + [ + -124.0671727, + 44.6871154 + ], + [ + -124.0671509, + 44.6872718 + ], + [ + -124.0671271, + 44.6874282 + ], + [ + -124.0671199, + 44.6874729 + ], + [ + -124.0671115, + 44.6875173 + ], + [ + -124.067105, + 44.6875467 + ], + [ + -124.0670945, + 44.6875859 + ], + [ + -124.0670876, + 44.6876083 + ], + [ + -124.0670785, + 44.6876338 + ], + [ + -124.0670666, + 44.687663 + ], + [ + -124.0670507, + 44.6876964 + ], + [ + -124.0670442, + 44.6877073 + ], + [ + -124.0670363, + 44.6877175 + ], + [ + -124.0670303, + 44.6877239 + ], + [ + -124.0670216, + 44.6877321 + ], + [ + -124.0670086, + 44.6877422 + ], + [ + -124.0670007, + 44.6877477 + ], + [ + -124.0669911, + 44.6877537 + ], + [ + -124.0669797, + 44.6877603 + ], + [ + -124.066966, + 44.6877673 + ], + [ + -124.0669499, + 44.687775 + ], + [ + -124.066931, + 44.6877832 + ], + [ + -124.0669091, + 44.6877921 + ], + [ + -124.0668843, + 44.6878018 + ], + [ + -124.0668793, + 44.6878034 + ], + [ + -124.0668742, + 44.6878045 + ], + [ + -124.0668707, + 44.687805 + ], + [ + -124.0668659, + 44.6878053 + ], + [ + -124.0668593, + 44.6878053 + ], + [ + -124.0668504, + 44.6878045 + ], + [ + -124.0668452, + 44.6878039 + ], + [ + -124.0668311, + 44.6878014 + ], + [ + -124.0668122, + 44.6877979 + ], + [ + -124.0668015, + 44.6877964 + ], + [ + -124.0667959, + 44.6877959 + ], + [ + -124.06679, + 44.6877956 + ], + [ + -124.0667838, + 44.6877957 + ], + [ + -124.0667774, + 44.6877964 + ], + [ + -124.0667741, + 44.687797 + ], + [ + -124.0667708, + 44.6877979 + ], + [ + -124.0667675, + 44.687799 + ], + [ + -124.0667641, + 44.6878003 + ], + [ + -124.0667608, + 44.687802 + ], + [ + -124.0667517, + 44.6878073 + ], + [ + -124.0667428, + 44.6878128 + ], + [ + -124.0667372, + 44.6878167 + ], + [ + -124.0667301, + 44.687822 + ], + [ + -124.0667263, + 44.6878251 + ], + [ + -124.0667223, + 44.6878288 + ], + [ + -124.0667181, + 44.6878331 + ], + [ + -124.066714, + 44.6878381 + ], + [ + -124.0667121, + 44.6878408 + ], + [ + -124.0667103, + 44.6878438 + ], + [ + -124.0667088, + 44.687847 + ], + [ + -124.0667075, + 44.6878505 + ], + [ + -124.0667065, + 44.6878542 + ], + [ + -124.0667061, + 44.6878583 + ], + [ + -124.0667063, + 44.6878628 + ], + [ + -124.0667129, + 44.6879085 + ], + [ + -124.0667208, + 44.6879542 + ], + [ + -124.0667383, + 44.6880455 + ], + [ + -124.0667714, + 44.6881944 + ], + [ + -124.0667809, + 44.6882441 + ], + [ + -124.0667852, + 44.6882725 + ], + [ + -124.0667868, + 44.688293 + ], + [ + -124.0667865, + 44.6883134 + ], + [ + -124.0667853, + 44.688327 + ], + [ + -124.0667826, + 44.6883451 + ], + [ + -124.0667773, + 44.6883693 + ], + [ + -124.0667679, + 44.6884014 + ], + [ + -124.0667204, + 44.6885296 + ], + [ + -124.0667162, + 44.6885409 + ], + [ + -124.0667115, + 44.6885522 + ], + [ + -124.0667008, + 44.6885744 + ], + [ + -124.066677, + 44.6886182 + ], + [ + -124.0666618, + 44.6886474 + ], + [ + -124.0666541, + 44.6886642 + ], + [ + -124.0666468, + 44.6886837 + ], + [ + -124.0666438, + 44.6886942 + ], + [ + -124.0666413, + 44.6887055 + ], + [ + -124.0666395, + 44.6887178 + ], + [ + -124.0666385, + 44.6887311 + ], + [ + -124.066638, + 44.6887445 + ], + [ + -124.0666385, + 44.6887713 + ], + [ + -124.0666421, + 44.6888249 + ], + [ + -124.066644, + 44.6888606 + ], + [ + -124.066644, + 44.688881 + ], + [ + -124.0666422, + 44.688926 + ], + [ + -124.0666393, + 44.6889709 + ], + [ + -124.0666336, + 44.6890609 + ], + [ + -124.0666322, + 44.6891209 + ], + [ + -124.066633, + 44.6891551 + ], + [ + -124.0666359, + 44.6892023 + ], + [ + -124.0666398, + 44.6892495 + ], + [ + -124.0666485, + 44.6893439 + ], + [ + -124.0666534, + 44.6894068 + ], + [ + -124.0666586, + 44.6894898 + ], + [ + -124.0666632, + 44.6895727 + ], + [ + -124.0666653, + 44.6896281 + ], + [ + -124.0666664, + 44.6897 + ], + [ + -124.0666655, + 44.6897855 + ], + [ + -124.0666628, + 44.6899159 + ], + [ + -124.0666622, + 44.6900246 + ], + [ + -124.0666598, + 44.6901558 + ], + [ + -124.0666544, + 44.6902357 + ], + [ + -124.0666491, + 44.6902814 + ], + [ + -124.0666405, + 44.6903335 + ], + [ + -124.0666322, + 44.6903697 + ], + [ + -124.0666217, + 44.6904054 + ], + [ + -124.0666137, + 44.6904291 + ], + [ + -124.0666022, + 44.6904605 + ], + [ + -124.0665524, + 44.6905855 + ], + [ + -124.0665088, + 44.6907025 + ], + [ + -124.0664641, + 44.6908191 + ], + [ + -124.0664309, + 44.6908961 + ], + [ + -124.06641, + 44.6909398 + ], + [ + -124.0663965, + 44.6909658 + ], + [ + -124.0663823, + 44.6909917 + ], + [ + -124.0663526, + 44.6910428 + ], + [ + -124.0662908, + 44.6911445 + ], + [ + -124.0660047, + 44.6915944 + ], + [ + -124.0659672, + 44.6916598 + ], + [ + -124.0659492, + 44.691694 + ], + [ + -124.0659327, + 44.6917286 + ], + [ + -124.0659033, + 44.6917986 + ], + [ + -124.0658856, + 44.6918457 + ], + [ + -124.065819, + 44.6920351 + ], + [ + -124.065798, + 44.6920888 + ], + [ + -124.0657711, + 44.6921494 + ], + [ + -124.0656173, + 44.6924623 + ], + [ + -124.0655386, + 44.6926308 + ], + [ + -124.0654625, + 44.6927999 + ], + [ + -124.0654134, + 44.6929132 + ], + [ + -124.0653861, + 44.692979 + ], + [ + -124.0653608, + 44.6930452 + ], + [ + -124.0653454, + 44.6930896 + ], + [ + -124.0653274, + 44.6931491 + ], + [ + -124.0653185, + 44.6931833 + ], + [ + -124.0653099, + 44.6932225 + ], + [ + -124.0653022, + 44.6932676 + ], + [ + -124.0652378, + 44.6937213 + ], + [ + -124.0651927, + 44.6940423 + ], + [ + -124.0651881, + 44.6940828 + ], + [ + -124.0651852, + 44.6941234 + ], + [ + -124.0651837, + 44.6942046 + ], + [ + -124.065189, + 44.6943644 + ], + [ + -124.0651914, + 44.6944759 + ], + [ + -124.0651898, + 44.6945378 + ], + [ + -124.0651764, + 44.6947465 + ], + [ + -124.0651573, + 44.694955 + ], + [ + -124.0651409, + 44.695094 + ], + [ + -124.0651289, + 44.6951821 + ], + [ + -124.065115, + 44.6952699 + ], + [ + -124.0651042, + 44.6953284 + ], + [ + -124.0650871, + 44.695406 + ], + [ + -124.0650758, + 44.6954501 + ], + [ + -124.0650613, + 44.6955004 + ], + [ + -124.0650438, + 44.6955562 + ], + [ + -124.0648906, + 44.6955568 + ], + [ + -124.0627989, + 44.6955646 + ], + [ + -124.0629488, + 44.6947835 + ], + [ + -124.0631386, + 44.6948024 + ], + [ + -124.0632425, + 44.6942723 + ], + [ + -124.0628997, + 44.6942383 + ], + [ + -124.0631673, + 44.6928704 + ], + [ + -124.0633237, + 44.6920705 + ], + [ + -124.0634286, + 44.6915256 + ], + [ + -124.0635318, + 44.690986 + ], + [ + -124.0630662, + 44.6909866 + ], + [ + -124.0628682, + 44.6920181 + ], + [ + -124.0628419, + 44.692145 + ], + [ + -124.0627888, + 44.6924169 + ], + [ + -124.0626897, + 44.6929287 + ], + [ + -124.062573, + 44.6935317 + ], + [ + -124.0625099, + 44.6938477 + ], + [ + -124.0624457, + 44.6941795 + ], + [ + -124.0622928, + 44.6941647 + ], + [ + -124.0622214, + 44.6945356 + ], + [ + -124.0621528, + 44.6948885 + ], + [ + -124.062087, + 44.6952255 + ], + [ + -124.0620195, + 44.6955678 + ], + [ + -124.0607227, + 44.6955726 + ], + [ + -124.0607219, + 44.6955908 + ], + [ + -124.060586, + 44.6991531 + ], + [ + -124.0543888, + 44.6991649 + ], + [ + -124.0544975, + 44.6963438 + ], + [ + -124.0556176, + 44.6963408 + ], + [ + -124.0556464, + 44.6955916 + ], + [ + -124.0556814, + 44.693851 + ], + [ + -124.0556801, + 44.692802 + ], + [ + -124.0608752, + 44.6928723 + ], + [ + -124.0609229, + 44.6920872 + ], + [ + -124.0595765, + 44.6920695 + ], + [ + -124.0572013, + 44.6920356 + ], + [ + -124.0572139, + 44.6901816 + ], + [ + -124.0571853, + 44.690187 + ], + [ + -124.0569565, + 44.6902198 + ], + [ + -124.0569316, + 44.6902233 + ], + [ + -124.0568041, + 44.6902468 + ], + [ + -124.0566791, + 44.6902795 + ], + [ + -124.0565699, + 44.6903182 + ], + [ + -124.0548564, + 44.6903185 + ], + [ + -124.0543046, + 44.6903187 + ], + [ + -124.0543034, + 44.6899827 + ], + [ + -124.0548632, + 44.6896449 + ], + [ + -124.0548784, + 44.6882324 + ], + [ + -124.0521876, + 44.6882263 + ], + [ + -124.0522576, + 44.6811543 + ], + [ + -124.0530428, + 44.6811561 + ], + [ + -124.0538662, + 44.6811581 + ], + [ + -124.053867, + 44.6793873 + ], + [ + -124.0538854, + 44.6766304 + ], + [ + -124.0569895, + 44.6766405 + ], + [ + -124.0569932, + 44.6760456 + ], + [ + -124.0573319, + 44.6760464 + ], + [ + -124.0573666, + 44.6705331 + ], + [ + -124.0573672, + 44.6702924 + ], + [ + -124.0573734, + 44.6693033 + ], + [ + -124.057375, + 44.6690802 + ], + [ + -124.0573794, + 44.6689324 + ], + [ + -124.0573764, + 44.6689253 + ], + [ + -124.0572031, + 44.6685138 + ], + [ + -124.0568033, + 44.6686063 + ], + [ + -124.0563464, + 44.6687023 + ], + [ + -124.0559888, + 44.6678479 + ], + [ + -124.0557626, + 44.6672978 + ], + [ + -124.0558728, + 44.6672748 + ], + [ + -124.0547511, + 44.6646225 + ], + [ + -124.054396, + 44.6646987 + ], + [ + -124.052542, + 44.6652973 + ], + [ + -124.0517759, + 44.6653529 + ], + [ + -124.0507118, + 44.6656899 + ], + [ + -124.0503519, + 44.6658455 + ], + [ + -124.0499791, + 44.6659755 + ], + [ + -124.0494619, + 44.6661998 + ], + [ + -124.0492616, + 44.6666028 + ], + [ + -124.0496024, + 44.6669499 + ], + [ + -124.0492262, + 44.6670868 + ], + [ + -124.049192, + 44.6671898 + ], + [ + -124.0493764, + 44.6674961 + ], + [ + -124.0499453, + 44.6672997 + ], + [ + -124.0504438, + 44.6678981 + ], + [ + -124.0501871, + 44.6679455 + ], + [ + -124.0509074, + 44.6702704 + ], + [ + -124.0472013, + 44.6702574 + ], + [ + -124.0471937, + 44.6666336 + ], + [ + -124.0471237, + 44.6593112 + ], + [ + -124.0466641, + 44.6593123 + ], + [ + -124.0412752, + 44.6593229 + ], + [ + -124.0413266, + 44.6575506 + ], + [ + -124.0413097, + 44.6575703 + ], + [ + -124.0412817, + 44.6576019 + ], + [ + -124.0412525, + 44.6576336 + ], + [ + -124.0412217, + 44.6576649 + ], + [ + -124.0411898, + 44.6576956 + ], + [ + -124.0411568, + 44.6577256 + ], + [ + -124.0411229, + 44.6577548 + ], + [ + -124.0411051, + 44.6577695 + ], + [ + -124.0410866, + 44.6577843 + ], + [ + -124.0410496, + 44.6578125 + ], + [ + -124.041028, + 44.6578277 + ], + [ + -124.0409851, + 44.6578549 + ], + [ + -124.0409401, + 44.6578798 + ], + [ + -124.0409148, + 44.6578925 + ], + [ + -124.0408892, + 44.6579039 + ], + [ + -124.0408631, + 44.6579147 + ], + [ + -124.0408364, + 44.6579245 + ], + [ + -124.0408085, + 44.6579339 + ], + [ + -124.0407803, + 44.6579419 + ], + [ + -124.0407514, + 44.6579495 + ], + [ + -124.04072, + 44.6579559 + ], + [ + -124.0406756, + 44.6579631 + ], + [ + -124.0406174, + 44.6579692 + ], + [ + -124.040584, + 44.657971 + ], + [ + -124.0405238, + 44.657971 + ], + [ + -124.0404637, + 44.6579671 + ], + [ + -124.0404323, + 44.6579631 + ], + [ + -124.0404038, + 44.6579588 + ], + [ + -124.0403753, + 44.6579538 + ], + [ + -124.0403477, + 44.6579481 + ], + [ + -124.0402988, + 44.6579373 + ], + [ + -124.0402763, + 44.6579324 + ], + [ + -124.0402544, + 44.657928 + ], + [ + -124.0402338, + 44.6579242 + ], + [ + -124.0402144, + 44.6579213 + ], + [ + -124.0401946, + 44.657919 + ], + [ + -124.0401777, + 44.6579175 + ], + [ + -124.0401611, + 44.6579173 + ], + [ + -124.0401436, + 44.6579176 + ], + [ + -124.0401137, + 44.65792 + ], + [ + -124.0400931, + 44.6579224 + ], + [ + -124.0400711, + 44.6579253 + ], + [ + -124.0400484, + 44.6579288 + ], + [ + -124.0400255, + 44.6579324 + ], + [ + -124.0400029, + 44.6579364 + ], + [ + -124.0399796, + 44.6579407 + ], + [ + -124.0399566, + 44.6579451 + ], + [ + -124.0399336, + 44.6579497 + ], + [ + -124.0399105, + 44.6579545 + ], + [ + -124.0398878, + 44.6579595 + ], + [ + -124.039865, + 44.6579647 + ], + [ + -124.0398423, + 44.65797 + ], + [ + -124.0398199, + 44.6579756 + ], + [ + -124.0397976, + 44.6579813 + ], + [ + -124.0397753, + 44.6579872 + ], + [ + -124.0397533, + 44.6579933 + ], + [ + -124.0397314, + 44.6579997 + ], + [ + -124.0397102, + 44.658006 + ], + [ + -124.0396675, + 44.6580198 + ], + [ + -124.0396253, + 44.6580346 + ], + [ + -124.039583, + 44.6580506 + ], + [ + -124.0395682, + 44.6580564 + ], + [ + -124.0395401, + 44.6580674 + ], + [ + -124.0394967, + 44.6580848 + ], + [ + -124.0394532, + 44.6581024 + ], + [ + -124.0394095, + 44.6581201 + ], + [ + -124.0393002, + 44.6581647 + ], + [ + -124.0392567, + 44.6581824 + ], + [ + -124.0391922, + 44.6582091 + ], + [ + -124.0391498, + 44.6582271 + ], + [ + -124.0391288, + 44.6582362 + ], + [ + -124.0391078, + 44.6582453 + ], + [ + -124.0390873, + 44.6582544 + ], + [ + -124.0390671, + 44.6582636 + ], + [ + -124.0390474, + 44.6582727 + ], + [ + -124.0390277, + 44.6582823 + ], + [ + -124.0389895, + 44.6583017 + ], + [ + -124.0389716, + 44.6583112 + ], + [ + -124.0389534, + 44.6583215 + ], + [ + -124.0389351, + 44.6583319 + ], + [ + -124.0389172, + 44.6583427 + ], + [ + -124.0388989, + 44.6583538 + ], + [ + -124.038881, + 44.658365 + ], + [ + -124.0388633, + 44.6583762 + ], + [ + -124.038846, + 44.6583876 + ], + [ + -124.0388291, + 44.6583991 + ], + [ + -124.0387948, + 44.6584233 + ], + [ + -124.0387784, + 44.6584352 + ], + [ + -124.038762, + 44.6584475 + ], + [ + -124.0387283, + 44.6584733 + ], + [ + -124.0386948, + 44.6584993 + ], + [ + -124.0386613, + 44.6585258 + ], + [ + -124.0386447, + 44.658539 + ], + [ + -124.0386113, + 44.6585656 + ], + [ + -124.0385781, + 44.6585922 + ], + [ + -124.038545, + 44.6586191 + ], + [ + -124.0385282, + 44.6586328 + ], + [ + -124.0385111, + 44.6586466 + ], + [ + -124.0384768, + 44.6586738 + ], + [ + -124.0384591, + 44.6586876 + ], + [ + -124.0384238, + 44.6587146 + ], + [ + -124.0384055, + 44.6587283 + ], + [ + -124.0383872, + 44.6587417 + ], + [ + -124.0383682, + 44.6587554 + ], + [ + -124.03833, + 44.6587817 + ], + [ + -124.0383099, + 44.6587949 + ], + [ + -124.0382895, + 44.658808 + ], + [ + -124.038249, + 44.6588326 + ], + [ + -124.0382276, + 44.6588451 + ], + [ + -124.0382059, + 44.6588571 + ], + [ + -124.0381835, + 44.6588692 + ], + [ + -124.0381599, + 44.658881 + ], + [ + -124.0381362, + 44.6588922 + ], + [ + -124.0381125, + 44.6589027 + ], + [ + -124.0380887, + 44.6589128 + ], + [ + -124.0380652, + 44.6589223 + ], + [ + -124.0380415, + 44.6589316 + ], + [ + -124.038018, + 44.6589404 + ], + [ + -124.0379951, + 44.6589489 + ], + [ + -124.0379721, + 44.6589574 + ], + [ + -124.0379641, + 44.6589602 + ], + [ + -124.0379669, + 44.6593387 + ], + [ + -124.0378132, + 44.659339 + ], + [ + -124.0376817, + 44.6594337 + ], + [ + -124.0377302, + 44.6594835 + ], + [ + -124.0380705, + 44.6598327 + ], + [ + -124.038398, + 44.6598164 + ], + [ + -124.0385684, + 44.6600661 + ], + [ + -124.0380403, + 44.6604237 + ], + [ + -124.0373254, + 44.6596902 + ], + [ + -124.0370491, + 44.6598891 + ], + [ + -124.0370555, + 44.6606545 + ], + [ + -124.0272345, + 44.6607196 + ], + [ + -124.0272256, + 44.6616303 + ], + [ + -124.0268463, + 44.6616326 + ], + [ + -124.0268214, + 44.6629782 + ], + [ + -124.0267546, + 44.6665967 + ], + [ + -124.0240385, + 44.6665819 + ], + [ + -124.0218657, + 44.6665701 + ], + [ + -124.0219909, + 44.6595599 + ], + [ + -124.0194708, + 44.658917 + ], + [ + -124.0181971, + 44.6608633 + ], + [ + -124.0170122, + 44.660863 + ], + [ + -124.0170217, + 44.6593393 + ], + [ + -124.0170364, + 44.6569857 + ], + [ + -124.0154744, + 44.6565504 + ], + [ + -124.0153613, + 44.6565472 + ], + [ + -124.0149906, + 44.6562393 + ], + [ + -124.0140327, + 44.6562303 + ], + [ + -124.0135828, + 44.6560918 + ], + [ + -124.0131617, + 44.656127 + ], + [ + -124.0130597, + 44.6567379 + ], + [ + -124.0127962, + 44.657248 + ], + [ + -124.0121266, + 44.6575469 + ], + [ + -124.0121271, + 44.657442 + ], + [ + -124.0121699, + 44.6571766 + ], + [ + -124.0121281, + 44.6572069 + ], + [ + -124.0121344, + 44.6557523 + ], + [ + -124.0121346, + 44.6556975 + ], + [ + -124.0127825, + 44.6557001 + ], + [ + -124.0127824, + 44.655724 + ], + [ + -124.0134508, + 44.6553628 + ], + [ + -124.0135328, + 44.6548974 + ], + [ + -124.0138327, + 44.6548493 + ], + [ + -124.013892, + 44.6553219 + ], + [ + -124.014773, + 44.655763 + ], + [ + -124.017044, + 44.6557721 + ], + [ + -124.0219689, + 44.6557916 + ], + [ + -124.0268938, + 44.655811 + ], + [ + -124.0306983, + 44.6557939 + ], + [ + -124.0370149, + 44.6557653 + ], + [ + -124.0405365, + 44.6557492 + ], + [ + -124.0405361, + 44.6539517 + ], + [ + -124.0407899, + 44.6539517 + ], + [ + -124.0420579, + 44.6539515 + ], + [ + -124.0438333, + 44.6539512 + ], + [ + -124.043822, + 44.6521317 + ], + [ + -124.0428396, + 44.6521386 + ], + [ + -124.0426035, + 44.6484754 + ], + [ + -124.0417331, + 44.6484777 + ], + [ + -124.0416204, + 44.6487914 + ], + [ + -124.0362624, + 44.6488204 + ], + [ + -124.0309025, + 44.6488493 + ], + [ + -124.0310251, + 44.6480862 + ], + [ + -124.0313005, + 44.6463674 + ], + [ + -124.0314698, + 44.6453015 + ], + [ + -124.0355531, + 44.6452831 + ], + [ + -124.035552, + 44.6446066 + ], + [ + -124.0348694, + 44.6446073 + ], + [ + -124.0348655, + 44.6417839 + ], + [ + -124.0343636, + 44.6417845 + ], + [ + -124.0339041, + 44.6417849 + ], + [ + -124.0338137, + 44.641785 + ], + [ + -124.0337368, + 44.6417849 + ], + [ + -124.0320332, + 44.6417862 + ], + [ + -124.0320414, + 44.6417331 + ], + [ + -124.0320919, + 44.6414253 + ], + [ + -124.0315659, + 44.6410327 + ], + [ + -124.0307851, + 44.6410302 + ], + [ + -124.030175, + 44.6406446 + ], + [ + -124.0302209, + 44.640577 + ], + [ + -124.0302273, + 44.6399915 + ], + [ + -124.0298191, + 44.6399828 + ], + [ + -124.0298453, + 44.639971 + ], + [ + -124.0299386, + 44.6398614 + ], + [ + -124.0301568, + 44.6394682 + ], + [ + -124.0303992, + 44.6396269 + ], + [ + -124.0305202, + 44.6396561 + ], + [ + -124.0306253, + 44.6396457 + ], + [ + -124.0307888, + 44.6395837 + ], + [ + -124.0310147, + 44.6394724 + ], + [ + -124.0311247, + 44.6393859 + ], + [ + -124.0311721, + 44.6393127 + ], + [ + -124.0326102, + 44.63956 + ], + [ + -124.0326108, + 44.6394443 + ], + [ + -124.0331356, + 44.6394443 + ], + [ + -124.0334145, + 44.6394439 + ], + [ + -124.0334135, + 44.6398366 + ], + [ + -124.0337193, + 44.6398369 + ], + [ + -124.0337353, + 44.6398374 + ], + [ + -124.0337351, + 44.6397186 + ], + [ + -124.03486, + 44.6397184 + ], + [ + -124.0348597, + 44.6396827 + ], + [ + -124.0348603, + 44.6394403 + ], + [ + -124.0397838, + 44.6394268 + ], + [ + -124.0397851, + 44.6394188 + ], + [ + -124.0399736, + 44.6394192 + ], + [ + -124.0399742, + 44.6390543 + ], + [ + -124.0397819, + 44.6390544 + ], + [ + -124.0397821, + 44.6381475 + ], + [ + -124.0377715, + 44.6381524 + ], + [ + -124.0377659, + 44.637911 + ], + [ + -124.0377004, + 44.6379089 + ], + [ + -124.0376597, + 44.6379026 + ], + [ + -124.0376323, + 44.6378955 + ], + [ + -124.0376087, + 44.6378873 + ], + [ + -124.0375791, + 44.6378745 + ], + [ + -124.0375532, + 44.6378595 + ], + [ + -124.0375311, + 44.6378441 + ], + [ + -124.0375148, + 44.6378291 + ], + [ + -124.0375025, + 44.6378158 + ], + [ + -124.0374919, + 44.6378017 + ], + [ + -124.0374813, + 44.6377845 + ], + [ + -124.0374237, + 44.637661 + ], + [ + -124.037413, + 44.6376435 + ], + [ + -124.0373982, + 44.6376213 + ], + [ + -124.0373836, + 44.6376025 + ], + [ + -124.0373671, + 44.6375838 + ], + [ + -124.0373405, + 44.6375568 + ], + [ + -124.0373078, + 44.6375269 + ], + [ + -124.0372795, + 44.6375048 + ], + [ + -124.0372434, + 44.6374795 + ], + [ + -124.0372035, + 44.637456 + ], + [ + -124.0371718, + 44.6374401 + ], + [ + -124.0371342, + 44.6374224 + ], + [ + -124.037081, + 44.6374021 + ], + [ + -124.0370241, + 44.637385 + ], + [ + -124.0369812, + 44.6373746 + ], + [ + -124.0369442, + 44.6373675 + ], + [ + -124.0369034, + 44.6373612 + ], + [ + -124.0368648, + 44.6373573 + ], + [ + -124.0368281, + 44.6373546 + ], + [ + -124.0368418, + 44.6364813 + ], + [ + -124.037766, + 44.6365026 + ], + [ + -124.0377068, + 44.6358509 + ], + [ + -124.0363646, + 44.6358174 + ], + [ + -124.0363616, + 44.6352978 + ], + [ + -124.0353216, + 44.6353003 + ], + [ + -124.0353229, + 44.6350397 + ], + [ + -124.0353273, + 44.6346105 + ], + [ + -124.0353271, + 44.6345425 + ], + [ + -124.0346623, + 44.6345458 + ], + [ + -124.0346613, + 44.6346282 + ], + [ + -124.0346537, + 44.6351629 + ], + [ + -124.0340612, + 44.6351581 + ], + [ + -124.0340708, + 44.6346234 + ], + [ + -124.0340712, + 44.6345487 + ], + [ + -124.0335895, + 44.634551 + ], + [ + -124.0335863, + 44.633496 + ], + [ + -124.0325848, + 44.6334986 + ], + [ + -124.0326027, + 44.6310949 + ], + [ + -124.0299787, + 44.6311114 + ], + [ + -124.0300761, + 44.633707 + ], + [ + -124.0310652, + 44.633706 + ], + [ + -124.0310753, + 44.6346323 + ], + [ + -124.0284322, + 44.6346167 + ], + [ + -124.0275999, + 44.6342386 + ], + [ + -124.0271011, + 44.6340175 + ], + [ + -124.0269929, + 44.6327988 + ] + ] + ] + } + }, + { + "id": "area_272", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0090805, + 45.0239254 + ], + [ + -124.0083172, + 45.0237164 + ], + [ + -124.0083328, + 45.0237952 + ], + [ + -124.0082493, + 45.0238718 + ], + [ + -124.0081378, + 45.0239374 + ], + [ + -124.0080998, + 45.0238785 + ], + [ + -124.0078721, + 45.0235267 + ], + [ + -124.0077542, + 45.0231876 + ], + [ + -124.0077432, + 45.0231562 + ], + [ + -124.007849, + 45.0231264 + ], + [ + -124.007902, + 45.0231037 + ], + [ + -124.0078052, + 45.0229854 + ], + [ + -124.0078297, + 45.0229698 + ], + [ + -124.0078512, + 45.0228668 + ], + [ + -124.0078059, + 45.0228538 + ], + [ + -124.0073414, + 45.0227205 + ], + [ + -124.0073186, + 45.0227045 + ], + [ + -124.0072648, + 45.0224401 + ], + [ + -124.0067411, + 45.0223699 + ], + [ + -124.0067239, + 45.0223416 + ], + [ + -124.0069235, + 45.0222128 + ], + [ + -124.0068194, + 45.0221317 + ], + [ + -124.0068923, + 45.0220846 + ], + [ + -124.0069044, + 45.022001 + ], + [ + -124.0069193, + 45.021898 + ], + [ + -124.0069253, + 45.021857 + ], + [ + -124.0065346, + 45.0218699 + ], + [ + -124.0065405, + 45.0218292 + ], + [ + -124.0065612, + 45.0216859 + ], + [ + -124.0065879, + 45.0215018 + ], + [ + -124.0066146, + 45.0213176 + ], + [ + -124.0066412, + 45.0211332 + ], + [ + -124.0066592, + 45.0210094 + ], + [ + -124.0066614, + 45.0209941 + ], + [ + -124.0066851, + 45.0208303 + ], + [ + -124.0068731, + 45.020815 + ], + [ + -124.0068602, + 45.0206336 + ], + [ + -124.0068363, + 45.0202974 + ], + [ + -124.0067922, + 45.0202059 + ], + [ + -124.0067615, + 45.0201108 + ], + [ + -124.0067611, + 45.0201088 + ], + [ + -124.0067607, + 45.0201068 + ], + [ + -124.0067603, + 45.0201049 + ], + [ + -124.0067599, + 45.020103 + ], + [ + -124.0067594, + 45.020101 + ], + [ + -124.006759, + 45.0200991 + ], + [ + -124.0067586, + 45.0200972 + ], + [ + -124.0067582, + 45.0200952 + ], + [ + -124.0067578, + 45.0200933 + ], + [ + -124.0067574, + 45.0200914 + ], + [ + -124.006757, + 45.0200894 + ], + [ + -124.0067566, + 45.0200875 + ], + [ + -124.0067561, + 45.0200856 + ], + [ + -124.0067557, + 45.0200836 + ], + [ + -124.0067553, + 45.0200817 + ], + [ + -124.0067549, + 45.0200798 + ], + [ + -124.0067545, + 45.0200778 + ], + [ + -124.0067541, + 45.0200759 + ], + [ + -124.0067537, + 45.020074 + ], + [ + -124.0067532, + 45.020072 + ], + [ + -124.0067528, + 45.0200701 + ], + [ + -124.0067332, + 45.0199622 + ], + [ + -124.0067077, + 45.0198261 + ], + [ + -124.0066825, + 45.0196901 + ], + [ + -124.0066574, + 45.0195542 + ], + [ + -124.0066323, + 45.0194182 + ], + [ + -124.0066082, + 45.0192876 + ], + [ + -124.0065595, + 45.0191605 + ], + [ + -124.0065088, + 45.0190281 + ], + [ + -124.0064878, + 45.018973 + ], + [ + -124.0064582, + 45.0188957 + ], + [ + -124.0068291, + 45.0188243 + ], + [ + -124.0068314, + 45.0188239 + ], + [ + -124.0066041, + 45.0182391 + ], + [ + -124.0061604, + 45.0176441 + ], + [ + -124.0058226, + 45.0162651 + ], + [ + -124.0057813, + 45.0160965 + ], + [ + -124.0045632, + 45.0160969 + ], + [ + -124.0045643, + 45.0159446 + ], + [ + -124.0045367, + 45.0159411 + ], + [ + -124.0045348, + 45.0154158 + ], + [ + -124.0030417, + 45.0154169 + ], + [ + -124.0030384, + 45.0160418 + ], + [ + -124.0030381, + 45.0160979 + ], + [ + -124.003037, + 45.0163177 + ], + [ + -124.0045684, + 45.0163211 + ], + [ + -124.0046592, + 45.0196434 + ], + [ + -124.0021219, + 45.0196451 + ], + [ + -123.9995845, + 45.0196468 + ], + [ + -123.9996135, + 45.0232029 + ], + [ + -123.9970624, + 45.0231913 + ], + [ + -123.994521, + 45.0231955 + ], + [ + -123.9919821, + 45.0231996 + ], + [ + -123.9919627, + 45.0196361 + ], + [ + -123.9919878, + 45.0160732 + ], + [ + -123.9894335, + 45.0160721 + ], + [ + -123.9868792, + 45.0160711 + ], + [ + -123.9843375, + 45.0160132 + ], + [ + -123.981771, + 45.0160184 + ], + [ + -123.9817019, + 45.0124952 + ], + [ + -123.9792936, + 45.0124907 + ], + [ + -123.9790371, + 45.0124903 + ], + [ + -123.9790332, + 45.012445 + ], + [ + -123.9794459, + 45.0124458 + ], + [ + -123.9794435, + 45.0119751 + ], + [ + -123.9794408, + 45.0114457 + ], + [ + -123.9791577, + 45.0108139 + ], + [ + -123.978341, + 45.0110094 + ], + [ + -123.9781753, + 45.0107348 + ], + [ + -123.978172, + 45.0107294 + ], + [ + -123.9781691, + 45.010724 + ], + [ + -123.9780981, + 45.0105919 + ], + [ + -123.9780243, + 45.0104047 + ], + [ + -123.9779785, + 45.010213 + ], + [ + -123.9779612, + 45.0100189 + ], + [ + -123.9805007, + 45.0100244 + ], + [ + -123.9805033, + 45.0106814 + ], + [ + -123.98115, + 45.0106671 + ], + [ + -123.9810611, + 45.0108914 + ], + [ + -123.9810596, + 45.0111702 + ], + [ + -123.9811245, + 45.0114366 + ], + [ + -123.9814009, + 45.0116144 + ], + [ + -123.9816986, + 45.0116798 + ], + [ + -123.981699, + 45.011766 + ], + [ + -123.981752, + 45.0117777 + ], + [ + -123.9819804, + 45.0117697 + ], + [ + -123.9823381, + 45.0116303 + ], + [ + -123.9830037, + 45.011574 + ], + [ + -123.9830159, + 45.0124976 + ], + [ + -123.9842645, + 45.0124999 + ], + [ + -123.9867114, + 45.0125043 + ], + [ + -123.986703, + 45.0104888 + ], + [ + -123.986819, + 45.010489 + ], + [ + -123.9868271, + 45.0125045 + ], + [ + -123.9868313, + 45.0127897 + ], + [ + -123.9872335, + 45.0127893 + ], + [ + -123.9872293, + 45.012504 + ], + [ + -123.9893767, + 45.0125016 + ], + [ + -123.9919263, + 45.0124987 + ], + [ + -123.9944798, + 45.0124958 + ], + [ + -123.9944362, + 45.0089171 + ], + [ + -123.991895, + 45.0089249 + ], + [ + -123.9893538, + 45.0089328 + ], + [ + -123.9868127, + 45.0089407 + ], + [ + -123.9867295, + 45.0053074 + ], + [ + -123.9867291, + 45.0052894 + ], + [ + -123.9860718, + 45.0052901 + ], + [ + -123.9853373, + 45.0052901 + ], + [ + -123.9853373, + 45.0053239 + ], + [ + -123.984857, + 45.005357 + ], + [ + -123.9844731, + 45.0054241 + ], + [ + -123.9833699, + 45.0056392 + ], + [ + -123.9833372, + 45.0054162 + ], + [ + -123.9824299, + 45.0054141 + ], + [ + -123.9823779, + 45.0052936 + ], + [ + -123.98221, + 45.0052938 + ], + [ + -123.9822022, + 45.0052938 + ], + [ + -123.9826103, + 45.0051739 + ], + [ + -123.9831877, + 45.0050043 + ], + [ + -123.9833341, + 45.0049562 + ], + [ + -123.9834724, + 45.0048975 + ], + [ + -123.9836013, + 45.0048289 + ], + [ + -123.9837193, + 45.0047511 + ], + [ + -123.9838252, + 45.004665 + ], + [ + -123.9838521, + 45.00464 + ], + [ + -123.9842213, + 45.0042909 + ], + [ + -123.984502, + 45.0040256 + ], + [ + -123.9869851, + 45.0016782 + ], + [ + -123.9870295, + 45.0016362 + ], + [ + -123.9871003, + 45.001559 + ], + [ + -123.9871028, + 45.0015566 + ], + [ + -123.9871053, + 45.0015543 + ], + [ + -123.9871078, + 45.001552 + ], + [ + -123.9871103, + 45.0015496 + ], + [ + -123.9871128, + 45.0015473 + ], + [ + -123.9871153, + 45.001545 + ], + [ + -123.9871178, + 45.0015427 + ], + [ + -123.9871203, + 45.0015403 + ], + [ + -123.9871228, + 45.001538 + ], + [ + -123.9871253, + 45.0015357 + ], + [ + -123.9871278, + 45.0015334 + ], + [ + -123.9871303, + 45.0015311 + ], + [ + -123.9871328, + 45.0015287 + ], + [ + -123.9871354, + 45.0015264 + ], + [ + -123.9871379, + 45.0015241 + ], + [ + -123.9871404, + 45.0015218 + ], + [ + -123.9871429, + 45.0015195 + ], + [ + -123.9871455, + 45.0015172 + ], + [ + -123.987148, + 45.0015149 + ], + [ + -123.9871505, + 45.0015126 + ], + [ + -123.987153, + 45.0015102 + ], + [ + -123.9871556, + 45.0015079 + ], + [ + -123.9871581, + 45.0015056 + ], + [ + -123.9871607, + 45.0015033 + ], + [ + -123.9871632, + 45.001501 + ], + [ + -123.9871658, + 45.0014987 + ], + [ + -123.9871683, + 45.0014964 + ], + [ + -123.9871709, + 45.0014941 + ], + [ + -123.9871734, + 45.0014918 + ], + [ + -123.987176, + 45.0014895 + ], + [ + -123.9871785, + 45.0014873 + ], + [ + -123.9871811, + 45.001485 + ], + [ + -123.9871837, + 45.0014827 + ], + [ + -123.9871862, + 45.0014804 + ], + [ + -123.9871888, + 45.0014781 + ], + [ + -123.9871914, + 45.0014758 + ], + [ + -123.987194, + 45.0014735 + ], + [ + -123.9871965, + 45.0014712 + ], + [ + -123.9871991, + 45.001469 + ], + [ + -123.9872017, + 45.0014667 + ], + [ + -123.9872043, + 45.0014644 + ], + [ + -123.9872069, + 45.0014621 + ], + [ + -123.9872094, + 45.0014599 + ], + [ + -123.987212, + 45.0014576 + ], + [ + -123.9872146, + 45.0014553 + ], + [ + -123.9872172, + 45.001453 + ], + [ + -123.9872198, + 45.0014508 + ], + [ + -123.9872224, + 45.0014485 + ], + [ + -123.987225, + 45.0014462 + ], + [ + -123.9872276, + 45.001444 + ], + [ + -123.9872303, + 45.0014417 + ], + [ + -123.9872329, + 45.0014394 + ], + [ + -123.9872355, + 45.0014372 + ], + [ + -123.9872381, + 45.0014349 + ], + [ + -123.9872407, + 45.0014327 + ], + [ + -123.9872433, + 45.0014304 + ], + [ + -123.987246, + 45.0014281 + ], + [ + -123.9872486, + 45.0014259 + ], + [ + -123.9872512, + 45.0014236 + ], + [ + -123.9872538, + 45.0014214 + ], + [ + -123.9872565, + 45.0014191 + ], + [ + -123.9872591, + 45.0014169 + ], + [ + -123.9872618, + 45.0014146 + ], + [ + -123.9872644, + 45.0014124 + ], + [ + -123.987267, + 45.0014101 + ], + [ + -123.9872697, + 45.0014079 + ], + [ + -123.9872723, + 45.0014057 + ], + [ + -123.987275, + 45.0014034 + ], + [ + -123.9872776, + 45.0014012 + ], + [ + -123.9872803, + 45.0013989 + ], + [ + -123.9872829, + 45.0013967 + ], + [ + -123.9872856, + 45.0013945 + ], + [ + -123.9872883, + 45.0013922 + ], + [ + -123.9872909, + 45.00139 + ], + [ + -123.9872936, + 45.0013878 + ], + [ + -123.9872963, + 45.0013855 + ], + [ + -123.9872989, + 45.0013833 + ], + [ + -123.9873016, + 45.0013811 + ], + [ + -123.9873043, + 45.0013789 + ], + [ + -123.987307, + 45.0013766 + ], + [ + -123.9873097, + 45.0013744 + ], + [ + -123.9873123, + 45.0013722 + ], + [ + -123.987315, + 45.00137 + ], + [ + -123.9873177, + 45.0013678 + ], + [ + -123.9873204, + 45.0013656 + ], + [ + -123.9873231, + 45.0013633 + ], + [ + -123.9873258, + 45.0013611 + ], + [ + -123.9873285, + 45.0013589 + ], + [ + -123.9873312, + 45.0013567 + ], + [ + -123.9873339, + 45.0013545 + ], + [ + -123.9873366, + 45.0013523 + ], + [ + -123.9873393, + 45.0013501 + ], + [ + -123.987342, + 45.0013479 + ], + [ + -123.9873447, + 45.0013457 + ], + [ + -123.9873475, + 45.0013435 + ], + [ + -123.9873502, + 45.0013413 + ], + [ + -123.9873529, + 45.0013391 + ], + [ + -123.9873556, + 45.0013369 + ], + [ + -123.9873583, + 45.0013347 + ], + [ + -123.9873611, + 45.0013325 + ], + [ + -123.9873638, + 45.0013303 + ], + [ + -123.9873665, + 45.0013281 + ], + [ + -123.9873693, + 45.0013259 + ], + [ + -123.987372, + 45.0013237 + ], + [ + -123.9873747, + 45.0013216 + ], + [ + -123.9873775, + 45.0013194 + ], + [ + -123.9873802, + 45.0013172 + ], + [ + -123.987383, + 45.001315 + ], + [ + -123.9873857, + 45.0013128 + ], + [ + -123.9873885, + 45.0013106 + ], + [ + -123.9873912, + 45.0013085 + ], + [ + -123.987394, + 45.0013063 + ], + [ + -123.9873967, + 45.0013041 + ], + [ + -123.9873995, + 45.0013019 + ], + [ + -123.9874023, + 45.0012998 + ], + [ + -123.987405, + 45.0012976 + ], + [ + -123.9874078, + 45.0012954 + ], + [ + -123.9874106, + 45.0012933 + ], + [ + -123.9874133, + 45.0012911 + ], + [ + -123.9874161, + 45.0012889 + ], + [ + -123.9874189, + 45.0012868 + ], + [ + -123.9874217, + 45.0012846 + ], + [ + -123.9874244, + 45.0012825 + ], + [ + -123.9874272, + 45.0012803 + ], + [ + -123.98743, + 45.0012781 + ], + [ + -123.9874328, + 45.001276 + ], + [ + -123.9874356, + 45.0012738 + ], + [ + -123.9874384, + 45.0012717 + ], + [ + -123.9874412, + 45.0012695 + ], + [ + -123.987444, + 45.0012674 + ], + [ + -123.9874468, + 45.0012652 + ], + [ + -123.9874496, + 45.0012631 + ], + [ + -123.9874524, + 45.001261 + ], + [ + -123.9874552, + 45.0012588 + ], + [ + -123.987458, + 45.0012567 + ], + [ + -123.9874608, + 45.0012545 + ], + [ + -123.9874636, + 45.0012524 + ], + [ + -123.9874664, + 45.0012503 + ], + [ + -123.9874693, + 45.0012481 + ], + [ + -123.9874721, + 45.001246 + ], + [ + -123.9874749, + 45.0012439 + ], + [ + -123.9874777, + 45.0012417 + ], + [ + -123.9874806, + 45.0012396 + ], + [ + -123.9874834, + 45.0012375 + ], + [ + -123.9874862, + 45.0012353 + ], + [ + -123.987489, + 45.0012332 + ], + [ + -123.9874919, + 45.0012311 + ], + [ + -123.9874947, + 45.001229 + ], + [ + -123.9874976, + 45.0012269 + ], + [ + -123.9875004, + 45.0012247 + ], + [ + -123.9875033, + 45.0012226 + ], + [ + -123.9875061, + 45.0012205 + ], + [ + -123.987509, + 45.0012184 + ], + [ + -123.9875118, + 45.0012163 + ], + [ + -123.9875147, + 45.0012142 + ], + [ + -123.9875175, + 45.0012121 + ], + [ + -123.9875204, + 45.00121 + ], + [ + -123.9875232, + 45.0012079 + ], + [ + -123.9875261, + 45.0012058 + ], + [ + -123.987529, + 45.0012036 + ], + [ + -123.9875318, + 45.0012015 + ], + [ + -123.9875347, + 45.0011994 + ], + [ + -123.9875376, + 45.0011973 + ], + [ + -123.9875405, + 45.0011953 + ], + [ + -123.9875433, + 45.0011932 + ], + [ + -123.9875462, + 45.0011911 + ], + [ + -123.9875491, + 45.001189 + ], + [ + -123.987552, + 45.0011869 + ], + [ + -123.9875549, + 45.0011848 + ], + [ + -123.9875578, + 45.0011827 + ], + [ + -123.9875606, + 45.0011806 + ], + [ + -123.9875635, + 45.0011785 + ], + [ + -123.9875664, + 45.0011765 + ], + [ + -123.9875693, + 45.0011744 + ], + [ + -123.9875722, + 45.0011723 + ], + [ + -123.9875751, + 45.0011702 + ], + [ + -123.987578, + 45.0011681 + ], + [ + -123.9875809, + 45.0011661 + ], + [ + -123.9875839, + 45.001164 + ], + [ + -123.9875868, + 45.0011619 + ], + [ + -123.9875897, + 45.0011599 + ], + [ + -123.9875926, + 45.0011578 + ], + [ + -123.9875955, + 45.0011557 + ], + [ + -123.9875984, + 45.0011537 + ], + [ + -123.9876014, + 45.0011516 + ], + [ + -123.9876043, + 45.0011495 + ], + [ + -123.9876072, + 45.0011475 + ], + [ + -123.9876101, + 45.0011454 + ], + [ + -123.9876131, + 45.0011434 + ], + [ + -123.987616, + 45.0011413 + ], + [ + -123.9876189, + 45.0011393 + ], + [ + -123.9876219, + 45.0011372 + ], + [ + -123.9876248, + 45.0011352 + ], + [ + -123.9876278, + 45.0011331 + ], + [ + -123.9876307, + 45.0011311 + ], + [ + -123.9876336, + 45.001129 + ], + [ + -123.9876366, + 45.001127 + ], + [ + -123.9876395, + 45.0011249 + ], + [ + -123.9876425, + 45.0011229 + ], + [ + -123.9876455, + 45.0011208 + ], + [ + -123.9876484, + 45.0011188 + ], + [ + -123.9876514, + 45.0011168 + ], + [ + -123.9876543, + 45.0011147 + ], + [ + -123.9876573, + 45.0011127 + ], + [ + -123.9876603, + 45.0011107 + ], + [ + -123.9876632, + 45.0011086 + ], + [ + -123.9876662, + 45.0011066 + ], + [ + -123.9876692, + 45.0011046 + ], + [ + -123.9876722, + 45.0011026 + ], + [ + -123.9876751, + 45.0011005 + ], + [ + -123.9876781, + 45.0010985 + ], + [ + -123.9876811, + 45.0010965 + ], + [ + -123.9876841, + 45.0010945 + ], + [ + -123.9876871, + 45.0010925 + ], + [ + -123.9876901, + 45.0010905 + ], + [ + -123.987693, + 45.0010884 + ], + [ + -123.987696, + 45.0010864 + ], + [ + -123.987699, + 45.0010844 + ], + [ + -123.987702, + 45.0010824 + ], + [ + -123.987705, + 45.0010804 + ], + [ + -123.987708, + 45.0010784 + ], + [ + -123.987711, + 45.0010764 + ], + [ + -123.987714, + 45.0010744 + ], + [ + -123.987717, + 45.0010724 + ], + [ + -123.9877201, + 45.0010704 + ], + [ + -123.9877231, + 45.0010684 + ], + [ + -123.9877261, + 45.0010664 + ], + [ + -123.9877291, + 45.0010644 + ], + [ + -123.9877321, + 45.0010624 + ], + [ + -123.9877351, + 45.0010604 + ], + [ + -123.9877382, + 45.0010584 + ], + [ + -123.9877412, + 45.0010565 + ], + [ + -123.9877442, + 45.0010545 + ], + [ + -123.9877472, + 45.0010525 + ], + [ + -123.9877503, + 45.0010505 + ], + [ + -123.9877533, + 45.0010485 + ], + [ + -123.9877563, + 45.0010465 + ], + [ + -123.9877594, + 45.0010446 + ], + [ + -123.9877624, + 45.0010426 + ], + [ + -123.9877655, + 45.0010406 + ], + [ + -123.9877685, + 45.0010386 + ], + [ + -123.9877716, + 45.0010367 + ], + [ + -123.9877746, + 45.0010347 + ], + [ + -123.9877777, + 45.0010327 + ], + [ + -123.9877807, + 45.0010308 + ], + [ + -123.9877838, + 45.0010288 + ], + [ + -123.9877868, + 45.0010268 + ], + [ + -123.9877899, + 45.0010249 + ], + [ + -123.9877929, + 45.0010229 + ], + [ + -123.987796, + 45.001021 + ], + [ + -123.9877991, + 45.001019 + ], + [ + -123.9878021, + 45.0010171 + ], + [ + -123.9878052, + 45.0010151 + ], + [ + -123.9878083, + 45.0010132 + ], + [ + -123.9878114, + 45.0010112 + ], + [ + -123.9878144, + 45.0010093 + ], + [ + -123.9878175, + 45.0010073 + ], + [ + -123.9878206, + 45.0010054 + ], + [ + -123.9878237, + 45.0010034 + ], + [ + -123.9878268, + 45.0010015 + ], + [ + -123.9878298, + 45.0009995 + ], + [ + -123.9878329, + 45.0009976 + ], + [ + -123.987836, + 45.0009957 + ], + [ + -123.9878391, + 45.0009937 + ], + [ + -123.9878422, + 45.0009918 + ], + [ + -123.9878453, + 45.0009899 + ], + [ + -123.9878484, + 45.0009879 + ], + [ + -123.9878515, + 45.000986 + ], + [ + -123.9878546, + 45.0009841 + ], + [ + -123.9878577, + 45.0009822 + ], + [ + -123.9878608, + 45.0009802 + ], + [ + -123.9878639, + 45.0009783 + ], + [ + -123.987867, + 45.0009764 + ], + [ + -123.9878702, + 45.0009745 + ], + [ + -123.9878733, + 45.0009726 + ], + [ + -123.9878764, + 45.0009707 + ], + [ + -123.9878795, + 45.0009688 + ], + [ + -123.9878826, + 45.0009668 + ], + [ + -123.9878858, + 45.0009649 + ], + [ + -123.9878889, + 45.000963 + ], + [ + -123.987892, + 45.0009611 + ], + [ + -123.9878951, + 45.0009592 + ], + [ + -123.9878983, + 45.0009573 + ], + [ + -123.9879014, + 45.0009554 + ], + [ + -123.9879045, + 45.0009535 + ], + [ + -123.9879077, + 45.0009516 + ], + [ + -123.9879108, + 45.0009497 + ], + [ + -123.987914, + 45.0009478 + ], + [ + -123.9879171, + 45.0009459 + ], + [ + -123.9879203, + 45.0009441 + ], + [ + -123.9879234, + 45.0009422 + ], + [ + -123.9879266, + 45.0009403 + ], + [ + -123.9879297, + 45.0009384 + ], + [ + -123.9879329, + 45.0009365 + ], + [ + -123.987936, + 45.0009346 + ], + [ + -123.9879392, + 45.0009327 + ], + [ + -123.9879423, + 45.0009309 + ], + [ + -123.9879455, + 45.000929 + ], + [ + -123.9879487, + 45.0009271 + ], + [ + -123.9879518, + 45.0009252 + ], + [ + -123.987955, + 45.0009234 + ], + [ + -123.9879582, + 45.0009215 + ], + [ + -123.9879613, + 45.0009196 + ], + [ + -123.9879645, + 45.0009178 + ], + [ + -123.9879677, + 45.0009159 + ], + [ + -123.9879709, + 45.000914 + ], + [ + -123.9879741, + 45.0009122 + ], + [ + -123.9879772, + 45.0009103 + ], + [ + -123.9879804, + 45.0009085 + ], + [ + -123.9879836, + 45.0009066 + ], + [ + -123.9879868, + 45.0009048 + ], + [ + -123.98799, + 45.0009029 + ], + [ + -123.9879932, + 45.0009011 + ], + [ + -123.9879964, + 45.0008992 + ], + [ + -123.9879996, + 45.0008974 + ], + [ + -123.9880028, + 45.0008955 + ], + [ + -123.988006, + 45.0008937 + ], + [ + -123.9880092, + 45.0008918 + ], + [ + -123.9880124, + 45.00089 + ], + [ + -123.9880156, + 45.0008882 + ], + [ + -123.9880188, + 45.0008863 + ], + [ + -123.988022, + 45.0008845 + ], + [ + -123.9880252, + 45.0008827 + ], + [ + -123.9880284, + 45.0008808 + ], + [ + -123.9880317, + 45.000879 + ], + [ + -123.9880349, + 45.0008772 + ], + [ + -123.9880381, + 45.0008753 + ], + [ + -123.9880413, + 45.0008735 + ], + [ + -123.9880445, + 45.0008717 + ], + [ + -123.9880478, + 45.0008699 + ], + [ + -123.988051, + 45.0008681 + ], + [ + -123.9880542, + 45.0008662 + ], + [ + -123.9880575, + 45.0008644 + ], + [ + -123.9880607, + 45.0008626 + ], + [ + -123.9880639, + 45.0008608 + ], + [ + -123.9880672, + 45.000859 + ], + [ + -123.9880704, + 45.0008572 + ], + [ + -123.9880737, + 45.0008554 + ], + [ + -123.9880769, + 45.0008536 + ], + [ + -123.9880801, + 45.0008518 + ], + [ + -123.9880834, + 45.00085 + ], + [ + -123.9880866, + 45.0008482 + ], + [ + -123.9880899, + 45.0008464 + ], + [ + -123.9880931, + 45.0008446 + ], + [ + -123.9880964, + 45.0008428 + ], + [ + -123.9880997, + 45.000841 + ], + [ + -123.9881029, + 45.0008392 + ], + [ + -123.9881062, + 45.0008374 + ], + [ + -123.9881094, + 45.0008356 + ], + [ + -123.9881127, + 45.0008338 + ], + [ + -123.988116, + 45.000832 + ], + [ + -123.9881193, + 45.0008303 + ], + [ + -123.9881225, + 45.0008285 + ], + [ + -123.9881258, + 45.0008267 + ], + [ + -123.9881291, + 45.0008249 + ], + [ + -123.9881323, + 45.0008232 + ], + [ + -123.9881356, + 45.0008214 + ], + [ + -123.9879111, + 45.0006671 + ], + [ + -123.9873562, + 45.0003196 + ], + [ + -123.9869959, + 45.0000809 + ], + [ + -123.9869638, + 45.0000653 + ], + [ + -123.9869686, + 45.0000588 + ], + [ + -123.9876764, + 44.9991043 + ], + [ + -123.9877738, + 44.9989729 + ], + [ + -123.9887466, + 44.9980164 + ], + [ + -123.9888379, + 44.9979365 + ], + [ + -123.9891099, + 44.9977307 + ], + [ + -123.9894107, + 44.9975462 + ], + [ + -123.9895569, + 44.9974695 + ], + [ + -123.9898937, + 44.9973196 + ], + [ + -123.9900062, + 44.9972768 + ], + [ + -123.9901317, + 44.9972311 + ], + [ + -123.9903711, + 44.9971439 + ], + [ + -123.9906579, + 44.9970395 + ], + [ + -123.9909847, + 44.9969204 + ], + [ + -123.9914004, + 44.996769 + ], + [ + -123.9915395, + 44.9967184 + ], + [ + -123.9914161, + 44.996367 + ], + [ + -123.9913345, + 44.9961343 + ], + [ + -123.9912625, + 44.9959291 + ], + [ + -123.9913274, + 44.9957363 + ], + [ + -123.9914016, + 44.9955161 + ], + [ + -123.9914753, + 44.9952958 + ], + [ + -123.9914756, + 44.9952951 + ], + [ + -123.9915542, + 44.9950501 + ], + [ + -123.9915542, + 44.99505 + ], + [ + -123.9915569, + 44.9950417 + ], + [ + -123.9916244, + 44.9948324 + ], + [ + -123.9920276, + 44.9948274 + ], + [ + -123.99252, + 44.9948213 + ], + [ + -123.9931476, + 44.9948132 + ], + [ + -123.9932141, + 44.9948123 + ], + [ + -123.9932257, + 44.9948122 + ], + [ + -123.9932458, + 44.9948734 + ], + [ + -123.9932369, + 44.9949417 + ], + [ + -123.9932439, + 44.9950084 + ], + [ + -123.9932682, + 44.9950491 + ], + [ + -123.993292, + 44.9951687 + ], + [ + -123.9932893, + 44.9952368 + ], + [ + -123.9932049, + 44.9953186 + ], + [ + -123.9931717, + 44.9953965 + ], + [ + -123.9931746, + 44.995452 + ], + [ + -123.9932112, + 44.9954782 + ], + [ + -123.9932341, + 44.995524 + ], + [ + -123.9933358, + 44.9955503 + ], + [ + -123.9934576, + 44.9955534 + ], + [ + -123.9936026, + 44.9955978 + ], + [ + -123.9936973, + 44.9956305 + ], + [ + -123.9938282, + 44.9956403 + ], + [ + -123.9939275, + 44.9956421 + ], + [ + -123.9939991, + 44.9956688 + ], + [ + -123.9941097, + 44.995691 + ], + [ + -123.9941948, + 44.9957618 + ], + [ + -123.9942105, + 44.9958079 + ], + [ + -123.994206, + 44.9958585 + ], + [ + -123.9942039, + 44.9958944 + ], + [ + -123.9941826, + 44.9959501 + ], + [ + -123.9940854, + 44.9960575 + ], + [ + -123.9940274, + 44.9961359 + ], + [ + -123.9939853, + 44.9962226 + ], + [ + -123.9939164, + 44.9962895 + ], + [ + -123.9938347, + 44.9963623 + ], + [ + -123.9937533, + 44.9964412 + ], + [ + -123.9937058, + 44.9965196 + ], + [ + -123.993638, + 44.9965894 + ], + [ + -123.9936112, + 44.9966714 + ], + [ + -123.9936026, + 44.9967462 + ], + [ + -123.993616, + 44.9968249 + ], + [ + -123.9936513, + 44.9969097 + ], + [ + -123.9937054, + 44.9969961 + ], + [ + -123.9937561, + 44.9970761 + ], + [ + -123.9937964, + 44.9971366 + ], + [ + -123.9938364, + 44.9971904 + ], + [ + -123.9938921, + 44.9972483 + ], + [ + -123.9939255, + 44.9972933 + ], + [ + -123.9939919, + 44.9973226 + ], + [ + -123.9940669, + 44.9973333 + ], + [ + -123.9941553, + 44.9973176 + ], + [ + -123.9942316, + 44.9973193 + ], + [ + -123.9942943, + 44.9973528 + ], + [ + -123.9944344, + 44.9975046 + ], + [ + -123.9944452, + 44.9975176 + ], + [ + -123.9945291, + 44.9976182 + ], + [ + -123.9946906, + 44.9976819 + ], + [ + -123.9949486, + 44.9976691 + ], + [ + -123.9950548, + 44.9975654 + ], + [ + -123.9951688, + 44.9974919 + ], + [ + -123.9953383, + 44.9973559 + ], + [ + -123.995613, + 44.9972102 + ], + [ + -123.9958511, + 44.9970912 + ], + [ + -123.9958931, + 44.9970938 + ], + [ + -123.9959031, + 44.9970944 + ], + [ + -123.9959929, + 44.997055 + ], + [ + -123.996241, + 44.9969706 + ], + [ + -123.9962641, + 44.9969628 + ], + [ + -123.9962818, + 44.9969567 + ], + [ + -123.9963155, + 44.9969208 + ], + [ + -123.996354, + 44.99688 + ], + [ + -123.9963582, + 44.9968565 + ], + [ + -123.9963775, + 44.99675 + ], + [ + -123.9963344, + 44.9966699 + ], + [ + -123.9964043, + 44.9964875 + ], + [ + -123.9964598, + 44.9963645 + ], + [ + -123.9965408, + 44.9963636 + ], + [ + -123.9966294, + 44.9963769 + ], + [ + -123.9966739, + 44.9964058 + ], + [ + -123.9966932, + 44.9963542 + ], + [ + -123.9965457, + 44.9963332 + ], + [ + -123.9964342, + 44.9963143 + ], + [ + -123.9963845, + 44.996238 + ], + [ + -123.9963845, + 44.9960945 + ], + [ + -123.9963845, + 44.9960529 + ], + [ + -123.9964155, + 44.9958971 + ], + [ + -123.996415, + 44.9958934 + ], + [ + -123.996395, + 44.9957294 + ], + [ + -123.9963468, + 44.9957317 + ], + [ + -123.9963804, + 44.9955704 + ], + [ + -123.9964096, + 44.9954298 + ], + [ + -123.9964674, + 44.9952334 + ], + [ + -123.9964149, + 44.9952222 + ], + [ + -123.9964095, + 44.9951806 + ], + [ + -123.9964022, + 44.9951253 + ], + [ + -123.9963982, + 44.9949483 + ], + [ + -123.9963566, + 44.9948236 + ], + [ + -123.9963387, + 44.99477 + ], + [ + -123.9963184, + 44.9947098 + ], + [ + -123.9962559, + 44.9946377 + ], + [ + -123.9962262, + 44.9946032 + ], + [ + -123.9961759, + 44.9945578 + ], + [ + -123.9961238, + 44.9945107 + ], + [ + -123.9959827, + 44.994523 + ], + [ + -123.9959619, + 44.9945073 + ], + [ + -123.9958717, + 44.9944397 + ], + [ + -123.9956884, + 44.9942787 + ], + [ + -123.9955975, + 44.9942178 + ], + [ + -123.9955335, + 44.9941749 + ], + [ + -123.9954341, + 44.9940879 + ], + [ + -123.9952958, + 44.9939668 + ], + [ + -123.9952187, + 44.9938915 + ], + [ + -123.9950995, + 44.993775 + ], + [ + -123.9951007, + 44.9936438 + ], + [ + -123.9951009, + 44.9936273 + ], + [ + -123.9951017, + 44.9935422 + ], + [ + -123.9950676, + 44.9935001 + ], + [ + -123.9950559, + 44.9934468 + ], + [ + -123.9950551, + 44.9934431 + ], + [ + -123.9951821, + 44.9933115 + ], + [ + -123.9952071, + 44.9932331 + ], + [ + -123.9952123, + 44.9932165 + ], + [ + -123.9952712, + 44.9931492 + ], + [ + -123.9954119, + 44.9930663 + ], + [ + -123.9954168, + 44.9930634 + ], + [ + -123.9956273, + 44.9930091 + ], + [ + -123.9957435, + 44.9929657 + ], + [ + -123.9959111, + 44.992903 + ], + [ + -123.9960135, + 44.9928882 + ], + [ + -123.996073, + 44.992857 + ], + [ + -123.9960807, + 44.9928445 + ], + [ + -123.9960992, + 44.9928144 + ], + [ + -123.9962009, + 44.9926495 + ], + [ + -123.9963126, + 44.9924683 + ], + [ + -123.9963232, + 44.9922875 + ], + [ + -123.9963289, + 44.9921892 + ], + [ + -123.9963303, + 44.9921664 + ], + [ + -123.9963351, + 44.9920253 + ], + [ + -123.9963377, + 44.9919485 + ], + [ + -123.9961159, + 44.9918581 + ], + [ + -123.9959173, + 44.9917771 + ], + [ + -123.9958901, + 44.9917712 + ], + [ + -123.9958519, + 44.99176 + ], + [ + -123.9956669, + 44.9916896 + ], + [ + -123.9956764, + 44.9916581 + ], + [ + -123.9955933, + 44.9916352 + ], + [ + -123.9955458, + 44.9916068 + ], + [ + -123.9955088, + 44.9915702 + ], + [ + -123.9954965, + 44.9915241 + ], + [ + -123.9954748, + 44.9915145 + ], + [ + -123.9954425, + 44.9915097 + ], + [ + -123.9954328, + 44.9915009 + ], + [ + -123.9954019, + 44.9914901 + ], + [ + -123.9952043, + 44.9914245 + ], + [ + -123.9952017, + 44.9914237 + ], + [ + -123.9951469, + 44.9914076 + ], + [ + -123.9949821, + 44.9912732 + ], + [ + -123.9950345, + 44.9911926 + ], + [ + -123.9950522, + 44.9910924 + ], + [ + -123.9951018, + 44.9910196 + ], + [ + -123.9951133, + 44.990977 + ], + [ + -123.9951587, + 44.9908526 + ], + [ + -123.9951625, + 44.9908423 + ], + [ + -123.9952328, + 44.9907189 + ], + [ + -123.9952424, + 44.990689 + ], + [ + -123.9952634, + 44.9906237 + ], + [ + -123.9952998, + 44.9905356 + ], + [ + -123.9953025, + 44.9905238 + ], + [ + -123.9953101, + 44.9904909 + ], + [ + -123.9953322, + 44.990383 + ], + [ + -123.9953326, + 44.9903614 + ], + [ + -123.9953349, + 44.9902572 + ], + [ + -123.9953252, + 44.9902087 + ], + [ + -123.9952975, + 44.9900709 + ], + [ + -123.9952966, + 44.9899711 + ], + [ + -123.9952643, + 44.9898685 + ], + [ + -123.9951627, + 44.9897829 + ], + [ + -123.9951176, + 44.989727 + ], + [ + -123.9950865, + 44.989705 + ], + [ + -123.995076, + 44.9896976 + ], + [ + -123.9949297, + 44.9895941 + ], + [ + -123.9948284, + 44.9895139 + ], + [ + -123.9947666, + 44.9894282 + ], + [ + -123.9946717, + 44.9890261 + ], + [ + -123.994655, + 44.9889804 + ], + [ + -123.9946203, + 44.9888854 + ], + [ + -123.9945431, + 44.988833 + ], + [ + -123.9942248, + 44.9886834 + ], + [ + -123.9939067, + 44.9885316 + ], + [ + -123.9936628, + 44.9883255 + ], + [ + -123.993581, + 44.988211 + ], + [ + -123.9935425, + 44.9880885 + ], + [ + -123.9935606, + 44.9878692 + ], + [ + -123.9935338, + 44.987734 + ], + [ + -123.9935634, + 44.9876837 + ], + [ + -123.9936021, + 44.9876178 + ], + [ + -123.9935782, + 44.9874838 + ], + [ + -123.9935824, + 44.9874727 + ], + [ + -123.9936123, + 44.9873953 + ], + [ + -123.993611, + 44.9872689 + ], + [ + -123.9936096, + 44.9871257 + ], + [ + -123.9935966, + 44.9870975 + ], + [ + -123.9935525, + 44.9870017 + ], + [ + -123.9935234, + 44.9869485 + ], + [ + -123.9934934, + 44.9869295 + ], + [ + -123.9933298, + 44.9868255 + ], + [ + -123.9933274, + 44.9868248 + ], + [ + -123.9931274, + 44.9867658 + ], + [ + -123.9930713, + 44.986722 + ], + [ + -123.9929055, + 44.9865927 + ], + [ + -123.9928884, + 44.9865795 + ], + [ + -123.9926881, + 44.9864255 + ], + [ + -123.9926315, + 44.9863391 + ], + [ + -123.9925995, + 44.9862903 + ], + [ + -123.9925446, + 44.9862063 + ], + [ + -123.9925248, + 44.9861761 + ], + [ + -123.9924468, + 44.9860954 + ], + [ + -123.9923642, + 44.9860099 + ], + [ + -123.992241, + 44.9858825 + ], + [ + -123.9921954, + 44.9858354 + ], + [ + -123.9921116, + 44.9857761 + ], + [ + -123.991951, + 44.9856625 + ], + [ + -123.9918949, + 44.9856227 + ], + [ + -123.9917268, + 44.9854454 + ], + [ + -123.9915967, + 44.9853081 + ], + [ + -123.9915877, + 44.9852872 + ], + [ + -123.9915217, + 44.9851578 + ], + [ + -123.9915023, + 44.9850477 + ], + [ + -123.9914923, + 44.9848833 + ], + [ + -123.9914934, + 44.984841 + ], + [ + -123.9915286, + 44.9847635 + ], + [ + -123.9915265, + 44.9847037 + ], + [ + -123.991503, + 44.9846518 + ], + [ + -123.9914725, + 44.9845919 + ], + [ + -123.9914116, + 44.9844721 + ], + [ + -123.9914069, + 44.9844629 + ], + [ + -123.9913002, + 44.9843569 + ], + [ + -123.9912224, + 44.9842796 + ], + [ + -123.9909872, + 44.9841669 + ], + [ + -123.9908182, + 44.9841738 + ], + [ + -123.990692, + 44.984179 + ], + [ + -123.990326, + 44.9842082 + ], + [ + -123.9902491, + 44.9841956 + ], + [ + -123.9902348, + 44.9841001 + ], + [ + -123.9903126, + 44.9839898 + ], + [ + -123.9905042, + 44.9838729 + ], + [ + -123.9907595, + 44.9837602 + ], + [ + -123.9910111, + 44.9836549 + ], + [ + -123.9910814, + 44.9836703 + ], + [ + -123.9911082, + 44.9836546 + ], + [ + -123.9912988, + 44.9835281 + ], + [ + -123.9913105, + 44.9835253 + ], + [ + -123.9915697, + 44.9834628 + ], + [ + -123.9916386, + 44.9834288 + ], + [ + -123.9917129, + 44.983426 + ], + [ + -123.9917924, + 44.9833727 + ], + [ + -123.9918618, + 44.9833642 + ], + [ + -123.9919316, + 44.9833467 + ], + [ + -123.9923182, + 44.9833322 + ], + [ + -123.9923565, + 44.9833307 + ], + [ + -123.9925108, + 44.9833079 + ], + [ + -123.9925869, + 44.9832967 + ], + [ + -123.9926739, + 44.983198 + ], + [ + -123.9926999, + 44.9831867 + ], + [ + -123.992851, + 44.9831207 + ], + [ + -123.9928927, + 44.9830082 + ], + [ + -123.9928982, + 44.9829933 + ], + [ + -123.9931065, + 44.982804 + ], + [ + -123.9932762, + 44.9827026 + ], + [ + -123.9933921, + 44.9826333 + ], + [ + -123.9936471, + 44.9825865 + ], + [ + -123.9936588, + 44.982587 + ], + [ + -123.9939396, + 44.9825985 + ], + [ + -123.9939686, + 44.9826074 + ], + [ + -123.9943058, + 44.9827102 + ], + [ + -123.9943623, + 44.9826949 + ], + [ + -123.9947674, + 44.9825851 + ], + [ + -123.9949088, + 44.9825573 + ], + [ + -123.9951424, + 44.9825663 + ], + [ + -123.9951741, + 44.9825775 + ], + [ + -123.9954647, + 44.9826809 + ], + [ + -123.995561, + 44.9825868 + ], + [ + -123.9956107, + 44.9825383 + ], + [ + -123.9956748, + 44.9821932 + ], + [ + -123.9956989, + 44.982064 + ], + [ + -123.9957014, + 44.9820553 + ], + [ + -123.9958015, + 44.9817157 + ], + [ + -123.9958489, + 44.9815566 + ], + [ + -123.9958439, + 44.9815554 + ], + [ + -123.9955702, + 44.9814911 + ], + [ + -123.9955664, + 44.9814873 + ], + [ + -123.9955632, + 44.9814865 + ], + [ + -123.9954336, + 44.9813585 + ], + [ + -123.9954262, + 44.9813551 + ], + [ + -123.9953405, + 44.981316 + ], + [ + -123.9953363, + 44.9813127 + ], + [ + -123.9953336, + 44.9813115 + ], + [ + -123.9952021, + 44.9812095 + ], + [ + -123.9950278, + 44.9812477 + ], + [ + -123.9949263, + 44.9812478 + ], + [ + -123.9948922, + 44.9812313 + ], + [ + -123.9948604, + 44.9812158 + ], + [ + -123.9948043, + 44.9811886 + ], + [ + -123.9948032, + 44.9811869 + ], + [ + -123.9947973, + 44.981184 + ], + [ + -123.9947179, + 44.9810606 + ], + [ + -123.9946752, + 44.980915 + ], + [ + -123.9946853, + 44.9808847 + ], + [ + -123.994695, + 44.9808554 + ], + [ + -123.9947395, + 44.9807211 + ], + [ + -123.9947388, + 44.9806682 + ], + [ + -123.9947385, + 44.980639 + ], + [ + -123.9947368, + 44.9805018 + ], + [ + -123.9947363, + 44.9804604 + ], + [ + -123.9947358, + 44.9803108 + ], + [ + -123.9947334, + 44.980297 + ], + [ + -123.9947038, + 44.9801319 + ], + [ + -123.9946057, + 44.979979 + ], + [ + -123.9943212, + 44.9797509 + ], + [ + -123.9941648, + 44.9795428 + ], + [ + -123.9941486, + 44.9794962 + ], + [ + -123.9940981, + 44.97935 + ], + [ + -123.9940164, + 44.9792429 + ], + [ + -123.9939609, + 44.97917 + ], + [ + -123.9937611, + 44.9790484 + ], + [ + -123.9937612, + 44.9790481 + ], + [ + -123.9937541, + 44.9790438 + ], + [ + -123.9938087, + 44.9788293 + ], + [ + -123.9939463, + 44.9787291 + ], + [ + -123.9940199, + 44.9786124 + ], + [ + -123.9940581, + 44.9785518 + ], + [ + -123.9942692, + 44.9784176 + ], + [ + -123.994286, + 44.9784069 + ], + [ + -123.9944971, + 44.9782685 + ], + [ + -123.9946315, + 44.9781804 + ], + [ + -123.9946737, + 44.978162 + ], + [ + -123.9947248, + 44.9781397 + ], + [ + -123.9949239, + 44.9780451 + ], + [ + -123.9950703, + 44.9779755 + ], + [ + -123.9951489, + 44.9779565 + ], + [ + -123.9953634, + 44.9778613 + ], + [ + -123.9955125, + 44.9777951 + ], + [ + -123.9955687, + 44.9777817 + ], + [ + -123.9955996, + 44.9777634 + ], + [ + -123.9957704, + 44.9776153 + ], + [ + -123.9957665, + 44.9775515 + ], + [ + -123.9957611, + 44.9774627 + ], + [ + -123.9957004, + 44.9771618 + ], + [ + -123.9956655, + 44.9770065 + ], + [ + -123.9955797, + 44.976915 + ], + [ + -123.9955498, + 44.9768409 + ], + [ + -123.9954725, + 44.9767359 + ], + [ + -123.9953672, + 44.9765929 + ], + [ + -123.995365, + 44.9765899 + ], + [ + -123.995173, + 44.976514 + ], + [ + -123.995166, + 44.9765094 + ], + [ + -123.9950829, + 44.9764554 + ], + [ + -123.9950759, + 44.9764508 + ], + [ + -123.9950657, + 44.9763715 + ], + [ + -123.9950558, + 44.9762941 + ], + [ + -123.9950561, + 44.9762449 + ], + [ + -123.9950335, + 44.9762212 + ], + [ + -123.9950142, + 44.9761835 + ], + [ + -123.9950196, + 44.9761438 + ], + [ + -123.9950532, + 44.976132 + ], + [ + -123.9950582, + 44.9761372 + ], + [ + -123.9950602, + 44.9761365 + ], + [ + -123.9950774, + 44.9761545 + ], + [ + -123.9951213, + 44.9761688 + ], + [ + -123.9951452, + 44.9761659 + ], + [ + -123.9951622, + 44.9761555 + ], + [ + -123.9951908, + 44.9761277 + ], + [ + -123.9952102, + 44.9760927 + ], + [ + -123.9952398, + 44.9759528 + ], + [ + -123.9953008, + 44.9758436 + ], + [ + -123.995357, + 44.9757431 + ], + [ + -123.9953728, + 44.9757136 + ], + [ + -123.9953766, + 44.9757066 + ], + [ + -123.9954348, + 44.9755983 + ], + [ + -123.9954385, + 44.9755949 + ], + [ + -123.9955709, + 44.9754727 + ], + [ + -123.9955777, + 44.9754555 + ], + [ + -123.9956186, + 44.9753528 + ], + [ + -123.9956383, + 44.9753252 + ], + [ + -123.9957218, + 44.9752087 + ], + [ + -123.995729, + 44.9751958 + ], + [ + -123.995845, + 44.9749888 + ], + [ + -123.9958455, + 44.9749878 + ], + [ + -123.9958069, + 44.9749651 + ], + [ + -123.9958071, + 44.9749648 + ], + [ + -123.9957999, + 44.9749605 + ], + [ + -123.9959123, + 44.9748281 + ], + [ + -123.9959232, + 44.9747259 + ], + [ + -123.9959257, + 44.9747018 + ], + [ + -123.9960057, + 44.9745224 + ], + [ + -123.9960397, + 44.9744409 + ], + [ + -123.9960665, + 44.9743767 + ], + [ + -123.9959967, + 44.9742261 + ], + [ + -123.9960009, + 44.9741372 + ], + [ + -123.9960022, + 44.974109 + ], + [ + -123.9960659, + 44.9739327 + ], + [ + -123.9961726, + 44.9738901 + ], + [ + -123.9961917, + 44.9738824 + ], + [ + -123.9964838, + 44.9736456 + ], + [ + -123.9965504, + 44.9736217 + ], + [ + -123.9965957, + 44.9736054 + ], + [ + -123.9966757, + 44.9735692 + ], + [ + -123.9967025, + 44.9735234 + ], + [ + -123.9967665, + 44.9735334 + ], + [ + -123.9969471, + 44.973498 + ], + [ + -123.9971654, + 44.9734552 + ], + [ + -123.9971286, + 44.9733857 + ], + [ + -123.9972116, + 44.9733983 + ], + [ + -123.9973303, + 44.9734266 + ], + [ + -123.9973663, + 44.973393 + ], + [ + -123.9974186, + 44.9733834 + ], + [ + -123.997467, + 44.9734095 + ], + [ + -123.9975291, + 44.9734488 + ], + [ + -123.9976359, + 44.9734516 + ], + [ + -123.9976998, + 44.9734727 + ], + [ + -123.9977384, + 44.9734853 + ], + [ + -123.9977902, + 44.9734825 + ], + [ + -123.9978252, + 44.9734735 + ], + [ + -123.9978575, + 44.9734921 + ], + [ + -123.9978578, + 44.9734928 + ], + [ + -123.9978645, + 44.9734967 + ], + [ + -123.9978736, + 44.9735191 + ], + [ + -123.997855, + 44.9735406 + ], + [ + -123.9978869, + 44.9735757 + ], + [ + -123.9979132, + 44.9736093 + ], + [ + -123.9979114, + 44.9736163 + ], + [ + -123.9979062, + 44.9736366 + ], + [ + -123.9979187, + 44.973675 + ], + [ + -123.9979443, + 44.9736884 + ], + [ + -123.9980037, + 44.9736687 + ], + [ + -123.9980446, + 44.9736853 + ], + [ + -123.9980021, + 44.9737271 + ], + [ + -123.9980042, + 44.9737474 + ], + [ + -123.9980325, + 44.9737614 + ], + [ + -123.9980613, + 44.9737757 + ], + [ + -123.9981624, + 44.9738081 + ], + [ + -123.9982106, + 44.9738134 + ], + [ + -123.9982418, + 44.9738167 + ], + [ + -123.9983454, + 44.9738111 + ], + [ + -123.9983889, + 44.9738147 + ], + [ + -123.9984553, + 44.9738073 + ], + [ + -123.998571, + 44.9737944 + ], + [ + -123.9985674, + 44.973772 + ], + [ + -123.998636, + 44.9737592 + ], + [ + -123.9986922, + 44.9737536 + ], + [ + -123.9989209, + 44.9737609 + ], + [ + -123.9991139, + 44.9737504 + ], + [ + -123.9992017, + 44.9737431 + ], + [ + -123.9993007, + 44.9737431 + ], + [ + -123.9995335, + 44.9737235 + ], + [ + -123.9996152, + 44.9737225 + ], + [ + -123.9996627, + 44.973689 + ], + [ + -123.9996831, + 44.973677 + ], + [ + -123.9997312, + 44.9736487 + ], + [ + -123.9998767, + 44.9736267 + ], + [ + -123.9999081, + 44.9736219 + ], + [ + -124.0000799, + 44.9735898 + ], + [ + -124.0001038, + 44.9735854 + ], + [ + -124.0001946, + 44.9735917 + ], + [ + -124.0002986, + 44.9735547 + ], + [ + -124.000306, + 44.9735211 + ], + [ + -124.0003099, + 44.9735038 + ], + [ + -124.0003051, + 44.9734593 + ], + [ + -124.0001373, + 44.9734484 + ], + [ + -124.0001726, + 44.9733062 + ], + [ + -124.0001767, + 44.9732897 + ], + [ + -124.0001207, + 44.9731846 + ], + [ + -123.9999892, + 44.9730921 + ], + [ + -124.0001023, + 44.9730183 + ], + [ + -124.0001621, + 44.973018 + ], + [ + -124.0002372, + 44.9729966 + ], + [ + -124.0002805, + 44.9729631 + ], + [ + -124.0003227, + 44.9729106 + ], + [ + -124.0003381, + 44.9728962 + ], + [ + -124.0003834, + 44.9728538 + ], + [ + -124.0004568, + 44.9727978 + ], + [ + -124.0005182, + 44.9727509 + ], + [ + -124.0005312, + 44.9727409 + ], + [ + -124.0005833, + 44.9726471 + ], + [ + -124.0006061, + 44.972601 + ], + [ + -124.0006084, + 44.9725962 + ], + [ + -124.0006641, + 44.9724837 + ], + [ + -124.0007071, + 44.9724026 + ], + [ + -124.0007904, + 44.9722458 + ], + [ + -124.0008711, + 44.972205 + ], + [ + -124.0011165, + 44.9720807 + ], + [ + -124.0012667, + 44.9720047 + ], + [ + -124.0013375, + 44.9719462 + ], + [ + -124.00134, + 44.9719441 + ], + [ + -124.0015452, + 44.9718558 + ], + [ + -124.0015804, + 44.9718404 + ], + [ + -124.0018179, + 44.9717359 + ], + [ + -124.0018304, + 44.9717305 + ], + [ + -124.0018628, + 44.971673 + ], + [ + -124.0020525, + 44.9716253 + ], + [ + -124.0020583, + 44.97163 + ], + [ + -124.002078, + 44.9716391 + ], + [ + -124.0021313, + 44.9716442 + ], + [ + -124.0021837, + 44.9716189 + ], + [ + -124.0022933, + 44.9716206 + ], + [ + -124.0023431, + 44.9716213 + ], + [ + -124.0024194, + 44.9716098 + ], + [ + -124.0024863, + 44.9716013 + ], + [ + -124.0025937, + 44.9715877 + ], + [ + -124.0026793, + 44.9715851 + ], + [ + -124.0028726, + 44.9715791 + ], + [ + -124.0028808, + 44.9715788 + ], + [ + -124.003078, + 44.9715709 + ], + [ + -124.003172, + 44.9715535 + ], + [ + -124.0032395, + 44.9715359 + ], + [ + -124.0032908, + 44.9715225 + ], + [ + -124.0034712, + 44.9715202 + ], + [ + -124.0034887, + 44.97152 + ], + [ + -124.0037149, + 44.9715274 + ], + [ + -124.0038843, + 44.9715329 + ], + [ + -124.0039601, + 44.9715691 + ], + [ + -124.0039765, + 44.9715769 + ], + [ + -124.0042174, + 44.9715727 + ], + [ + -124.0043908, + 44.9716232 + ], + [ + -124.004568, + 44.9717009 + ], + [ + -124.0046752, + 44.9717097 + ], + [ + -124.0046949, + 44.9716855 + ], + [ + -124.0048405, + 44.9716566 + ], + [ + -124.005064, + 44.9716123 + ], + [ + -124.0050547, + 44.9715958 + ], + [ + -124.0052695, + 44.9715432 + ], + [ + -124.0053406, + 44.9715525 + ], + [ + -124.005396, + 44.971591 + ], + [ + -124.005402, + 44.971598 + ], + [ + -124.0056062, + 44.9715665 + ], + [ + -124.0057779, + 44.9715401 + ], + [ + -124.0058084, + 44.9714807 + ], + [ + -124.0058852, + 44.9714149 + ], + [ + -124.0059529, + 44.9714049 + ], + [ + -124.0060047, + 44.9713972 + ], + [ + -124.0062002, + 44.9714272 + ], + [ + -124.0063723, + 44.9714536 + ], + [ + -124.0064705, + 44.9714484 + ], + [ + -124.0064862, + 44.9714476 + ], + [ + -124.0066022, + 44.9714313 + ], + [ + -124.0067223, + 44.9714144 + ], + [ + -124.0067614, + 44.9713895 + ], + [ + -124.0068184, + 44.9713938 + ], + [ + -124.0068408, + 44.9713954 + ], + [ + -124.0069482, + 44.9713604 + ], + [ + -124.0070592, + 44.971304 + ], + [ + -124.0071066, + 44.9712799 + ], + [ + -124.0072221, + 44.9712063 + ], + [ + -124.0073226, + 44.9711421 + ], + [ + -124.0073699, + 44.9711169 + ], + [ + -124.0075075, + 44.9710437 + ], + [ + -124.0075248, + 44.9710347 + ], + [ + -124.0076784, + 44.9709547 + ], + [ + -124.0076861, + 44.9709506 + ], + [ + -124.0078044, + 44.9709011 + ], + [ + -124.0078442, + 44.9708845 + ], + [ + -124.0079271, + 44.9708499 + ], + [ + -124.0079681, + 44.9708328 + ], + [ + -124.0079878, + 44.9708246 + ], + [ + -124.0080054, + 44.9708197 + ], + [ + -124.0080464, + 44.9708085 + ], + [ + -124.0080873, + 44.9707972 + ], + [ + -124.0081028, + 44.970793 + ], + [ + -124.0081209, + 44.9707824 + ], + [ + -124.00815, + 44.9707655 + ], + [ + -124.0081643, + 44.9707572 + ], + [ + -124.0081777, + 44.9707478 + ], + [ + -124.0082127, + 44.9707234 + ], + [ + -124.008243, + 44.9707023 + ], + [ + -124.0082734, + 44.9706812 + ], + [ + -124.0083069, + 44.9706578 + ], + [ + -124.0083405, + 44.9706344 + ], + [ + -124.0083741, + 44.970611 + ], + [ + -124.0084105, + 44.9705857 + ], + [ + -124.008444, + 44.9705623 + ], + [ + -124.0084665, + 44.9705466 + ], + [ + -124.0084504, + 44.9705112 + ], + [ + -124.0084011, + 44.9704028 + ], + [ + -124.0083726, + 44.9703404 + ], + [ + -124.0082655, + 44.9702533 + ], + [ + -124.0082627, + 44.9702081 + ], + [ + -124.0082653, + 44.9702056 + ], + [ + -124.0082942, + 44.9701776 + ], + [ + -124.0083108, + 44.9701614 + ], + [ + -124.0083202, + 44.9701471 + ], + [ + -124.0084157, + 44.9700044 + ], + [ + -124.0084092, + 44.9699232 + ], + [ + -124.0084461, + 44.9698769 + ], + [ + -124.008597, + 44.9696371 + ], + [ + -124.0086467, + 44.9696175 + ], + [ + -124.0088185, + 44.9695127 + ], + [ + -124.0090788, + 44.9693961 + ], + [ + -124.0092131, + 44.9693016 + ], + [ + -124.0091617, + 44.9692941 + ], + [ + -124.0095015, + 44.9692294 + ], + [ + -124.0096224, + 44.9691632 + ], + [ + -124.0090866, + 44.968106 + ], + [ + -124.0090219, + 44.9677489 + ], + [ + -124.0088419, + 44.9676657 + ], + [ + -124.0086282, + 44.9675179 + ], + [ + -124.0083652, + 44.9673988 + ], + [ + -124.0080805, + 44.967344 + ], + [ + -124.0077979, + 44.9672285 + ], + [ + -124.0075916, + 44.9671792 + ], + [ + -124.0075449, + 44.9671607 + ], + [ + -124.0072758, + 44.9670315 + ], + [ + -124.0070066, + 44.966932 + ], + [ + -124.006718, + 44.9668137 + ], + [ + -124.0064844, + 44.9667573 + ], + [ + -124.0060765, + 44.966779 + ], + [ + -124.0058495, + 44.9668314 + ], + [ + -124.0054821, + 44.9668882 + ], + [ + -124.0051822, + 44.9668968 + ], + [ + -124.0050941, + 44.96692 + ], + [ + -124.0050925, + 44.9670001 + ], + [ + -124.0049555, + 44.9670588 + ], + [ + -124.0046508, + 44.9670955 + ], + [ + -124.004577, + 44.9671431 + ], + [ + -124.0045181, + 44.9672267 + ], + [ + -124.0043666, + 44.9672586 + ], + [ + -124.0043325, + 44.9672643 + ], + [ + -124.0043325, + 44.9663106 + ], + [ + -124.0043325, + 44.9662009 + ], + [ + -124.0043325, + 44.9660533 + ], + [ + -124.0043325, + 44.9660363 + ], + [ + -124.0043325, + 44.9659814 + ], + [ + -124.0043325, + 44.9659648 + ], + [ + -124.0043325, + 44.965762 + ], + [ + -124.0043325, + 44.9655837 + ], + [ + -124.0043325, + 44.9652134 + ], + [ + -124.0043325, + 44.9648842 + ], + [ + -124.0043325, + 44.9647197 + ], + [ + -124.0043325, + 44.9646155 + ], + [ + -124.0043308, + 44.9644454 + ], + [ + -124.0043028, + 44.9616326 + ], + [ + -124.0043012, + 44.9614679 + ], + [ + -124.0042963, + 44.9609738 + ], + [ + -124.0042701, + 44.9583444 + ], + [ + -124.004268, + 44.9581286 + ], + [ + -124.004263, + 44.9576223 + ], + [ + -124.0042619, + 44.9575151 + ], + [ + -124.0042606, + 44.957387 + ], + [ + -124.0042601, + 44.9573388 + ], + [ + -124.0042601, + 44.9573322 + ], + [ + -124.004256, + 44.956236 + ], + [ + -124.004247, + 44.9538544 + ], + [ + -124.004709, + 44.9538619 + ], + [ + -124.0050953, + 44.9538665 + ], + [ + -124.005249, + 44.9538684 + ], + [ + -124.0057537, + 44.9538744 + ], + [ + -124.006156, + 44.9538792 + ], + [ + -124.0063161, + 44.9538811 + ], + [ + -124.0067151, + 44.9538905 + ], + [ + -124.0071124, + 44.9538998 + ], + [ + -124.007272, + 44.9539031 + ], + [ + -124.007737, + 44.9539106 + ], + [ + -124.0080872, + 44.9539162 + ], + [ + -124.0083653, + 44.9539207 + ], + [ + -124.0086434, + 44.9539252 + ], + [ + -124.0089215, + 44.9539296 + ], + [ + -124.0091996, + 44.9539341 + ], + [ + -124.0095163, + 44.95394 + ], + [ + -124.00951, + 44.9534584 + ], + [ + -124.0094932, + 44.9521689 + ], + [ + -124.0094695, + 44.9503522 + ], + [ + -124.0098435, + 44.9503599 + ], + [ + -124.0099219, + 44.9503615 + ], + [ + -124.0100002, + 44.9503631 + ], + [ + -124.0107246, + 44.9503779 + ], + [ + -124.0115149, + 44.950394 + ], + [ + -124.0126726, + 44.9504177 + ], + [ + -124.0132778, + 44.95043 + ], + [ + -124.0138551, + 44.9504463 + ], + [ + -124.0138562, + 44.9504438 + ], + [ + -124.0138572, + 44.9504413 + ], + [ + -124.0138583, + 44.9504388 + ], + [ + -124.0138594, + 44.9504364 + ], + [ + -124.0138604, + 44.9504339 + ], + [ + -124.0138615, + 44.9504314 + ], + [ + -124.0138626, + 44.950429 + ], + [ + -124.0138637, + 44.9504265 + ], + [ + -124.0138648, + 44.950424 + ], + [ + -124.0138659, + 44.9504216 + ], + [ + -124.013867, + 44.9504191 + ], + [ + -124.0138681, + 44.9504166 + ], + [ + -124.0138692, + 44.9504142 + ], + [ + -124.0138703, + 44.9504117 + ], + [ + -124.0138714, + 44.9504092 + ], + [ + -124.0138725, + 44.9504068 + ], + [ + -124.0138736, + 44.9504043 + ], + [ + -124.0138747, + 44.9504019 + ], + [ + -124.0138758, + 44.9503994 + ], + [ + -124.013877, + 44.9503969 + ], + [ + -124.0138781, + 44.9503945 + ], + [ + -124.0138792, + 44.950392 + ], + [ + -124.0138803, + 44.9503896 + ], + [ + -124.0138815, + 44.9503871 + ], + [ + -124.0138826, + 44.9503847 + ], + [ + -124.0138838, + 44.9503822 + ], + [ + -124.0138849, + 44.9503798 + ], + [ + -124.0138861, + 44.9503773 + ], + [ + -124.0138872, + 44.9503749 + ], + [ + -124.0138884, + 44.9503724 + ], + [ + -124.0138895, + 44.95037 + ], + [ + -124.0138907, + 44.9503675 + ], + [ + -124.0138919, + 44.9503651 + ], + [ + -124.013893, + 44.9503626 + ], + [ + -124.0138942, + 44.9503602 + ], + [ + -124.0138954, + 44.9503577 + ], + [ + -124.0138966, + 44.9503553 + ], + [ + -124.0138978, + 44.9503528 + ], + [ + -124.0138989, + 44.9503504 + ], + [ + -124.0139001, + 44.9503479 + ], + [ + -124.0139013, + 44.9503455 + ], + [ + -124.0139025, + 44.9503431 + ], + [ + -124.0139037, + 44.9503406 + ], + [ + -124.013905, + 44.9503381 + ], + [ + -124.0139062, + 44.9503355 + ], + [ + -124.0139075, + 44.950333 + ], + [ + -124.0139087, + 44.9503305 + ], + [ + -124.01391, + 44.9503279 + ], + [ + -124.0139113, + 44.9503254 + ], + [ + -124.0139125, + 44.9503229 + ], + [ + -124.0139138, + 44.9503204 + ], + [ + -124.0139151, + 44.9503178 + ], + [ + -124.0139164, + 44.9503153 + ], + [ + -124.0139177, + 44.9503128 + ], + [ + -124.013919, + 44.9503102 + ], + [ + -124.0139202, + 44.9503077 + ], + [ + -124.0139215, + 44.9503052 + ], + [ + -124.0139228, + 44.9503027 + ], + [ + -124.0139241, + 44.9503001 + ], + [ + -124.0139254, + 44.9502976 + ], + [ + -124.0139268, + 44.9502951 + ], + [ + -124.0139281, + 44.9502926 + ], + [ + -124.0139294, + 44.9502901 + ], + [ + -124.0139307, + 44.9502876 + ], + [ + -124.013932, + 44.950285 + ], + [ + -124.0139334, + 44.9502825 + ], + [ + -124.0139347, + 44.95028 + ], + [ + -124.013936, + 44.9502775 + ], + [ + -124.0139374, + 44.950275 + ], + [ + -124.0139387, + 44.9502725 + ], + [ + -124.01394, + 44.95027 + ], + [ + -124.0139414, + 44.9502674 + ], + [ + -124.0139427, + 44.9502649 + ], + [ + -124.0139441, + 44.9502624 + ], + [ + -124.0139455, + 44.9502599 + ], + [ + -124.0139468, + 44.9502574 + ], + [ + -124.0139482, + 44.9502549 + ], + [ + -124.0139496, + 44.9502524 + ], + [ + -124.0139509, + 44.9502499 + ], + [ + -124.0139523, + 44.9502474 + ], + [ + -124.0139537, + 44.9502449 + ], + [ + -124.0139551, + 44.9502424 + ], + [ + -124.0139565, + 44.9502399 + ], + [ + -124.0139578, + 44.9502374 + ], + [ + -124.0139592, + 44.9502349 + ], + [ + -124.0139606, + 44.9502324 + ], + [ + -124.013962, + 44.9502299 + ], + [ + -124.0139634, + 44.9502274 + ], + [ + -124.0139648, + 44.9502249 + ], + [ + -124.0139663, + 44.9502224 + ], + [ + -124.0139677, + 44.9502199 + ], + [ + -124.0139691, + 44.9502174 + ], + [ + -124.0139705, + 44.950215 + ], + [ + -124.0139719, + 44.9502125 + ], + [ + -124.0139734, + 44.95021 + ], + [ + -124.0139748, + 44.9502075 + ], + [ + -124.0139762, + 44.950205 + ], + [ + -124.0139777, + 44.9502025 + ], + [ + -124.0139791, + 44.9502 + ], + [ + -124.0139805, + 44.9501976 + ], + [ + -124.013982, + 44.9501951 + ], + [ + -124.0139834, + 44.9501926 + ], + [ + -124.0139849, + 44.9501901 + ], + [ + -124.0139864, + 44.9501876 + ], + [ + -124.0139878, + 44.9501852 + ], + [ + -124.0139893, + 44.9501827 + ], + [ + -124.0139908, + 44.9501802 + ], + [ + -124.0139922, + 44.9501777 + ], + [ + -124.0139937, + 44.9501753 + ], + [ + -124.0139952, + 44.9501728 + ], + [ + -124.0139967, + 44.9501703 + ], + [ + -124.0139982, + 44.9501678 + ], + [ + -124.0139996, + 44.9501654 + ], + [ + -124.0140011, + 44.9501629 + ], + [ + -124.0140026, + 44.9501604 + ], + [ + -124.0140041, + 44.950158 + ], + [ + -124.0140056, + 44.9501555 + ], + [ + -124.0140071, + 44.950153 + ], + [ + -124.0140087, + 44.9501506 + ], + [ + -124.0140102, + 44.9501481 + ], + [ + -124.0140117, + 44.9501457 + ], + [ + -124.0140132, + 44.9501432 + ], + [ + -124.0140147, + 44.9501407 + ], + [ + -124.0140163, + 44.9501383 + ], + [ + -124.0140178, + 44.9501358 + ], + [ + -124.0140193, + 44.9501334 + ], + [ + -124.0140209, + 44.9501309 + ], + [ + -124.0140224, + 44.9501285 + ], + [ + -124.0140239, + 44.950126 + ], + [ + -124.0140255, + 44.9501236 + ], + [ + -124.014027, + 44.9501211 + ], + [ + -124.0140286, + 44.9501187 + ], + [ + -124.0140302, + 44.9501162 + ], + [ + -124.0140317, + 44.9501138 + ], + [ + -124.0140333, + 44.9501113 + ], + [ + -124.0140348, + 44.9501089 + ], + [ + -124.0140364, + 44.9501064 + ], + [ + -124.014038, + 44.950104 + ], + [ + -124.0140396, + 44.9501015 + ], + [ + -124.0140412, + 44.9500991 + ], + [ + -124.0140427, + 44.9500967 + ], + [ + -124.0140443, + 44.9500942 + ], + [ + -124.0140459, + 44.9500918 + ], + [ + -124.0140475, + 44.9500894 + ], + [ + -124.0140491, + 44.9500869 + ], + [ + -124.0140507, + 44.9500845 + ], + [ + -124.0140523, + 44.9500821 + ], + [ + -124.0140539, + 44.9500796 + ], + [ + -124.0140555, + 44.9500772 + ], + [ + -124.0140572, + 44.9500748 + ], + [ + -124.0140588, + 44.9500723 + ], + [ + -124.0140604, + 44.9500699 + ], + [ + -124.014062, + 44.9500675 + ], + [ + -124.0140636, + 44.9500651 + ], + [ + -124.0140653, + 44.9500626 + ], + [ + -124.0140669, + 44.9500602 + ], + [ + -124.0140686, + 44.9500578 + ], + [ + -124.0140702, + 44.9500554 + ], + [ + -124.0140718, + 44.950053 + ], + [ + -124.0140735, + 44.9500505 + ], + [ + -124.0140751, + 44.9500481 + ], + [ + -124.0140768, + 44.9500457 + ], + [ + -124.0140785, + 44.9500433 + ], + [ + -124.0140801, + 44.9500409 + ], + [ + -124.0140818, + 44.9500385 + ], + [ + -124.0140835, + 44.9500361 + ], + [ + -124.0140851, + 44.9500336 + ], + [ + -124.0140868, + 44.9500312 + ], + [ + -124.0140885, + 44.9500288 + ], + [ + -124.0140902, + 44.9500264 + ], + [ + -124.0140918, + 44.950024 + ], + [ + -124.0140935, + 44.9500216 + ], + [ + -124.0140952, + 44.9500192 + ], + [ + -124.0140969, + 44.9500168 + ], + [ + -124.0140986, + 44.9500144 + ], + [ + -124.0141003, + 44.950012 + ], + [ + -124.014102, + 44.9500096 + ], + [ + -124.0141037, + 44.9500072 + ], + [ + -124.0141054, + 44.9500048 + ], + [ + -124.0141072, + 44.9500024 + ], + [ + -124.0141089, + 44.95 + ], + [ + -124.0141106, + 44.9499976 + ], + [ + -124.0141123, + 44.9499952 + ], + [ + -124.0141141, + 44.9499929 + ], + [ + -124.0141158, + 44.9499905 + ], + [ + -124.0141175, + 44.9499881 + ], + [ + -124.0141193, + 44.9499857 + ], + [ + -124.014121, + 44.9499833 + ], + [ + -124.0141228, + 44.9499809 + ], + [ + -124.0141245, + 44.9499785 + ], + [ + -124.0141263, + 44.9499762 + ], + [ + -124.014128, + 44.9499738 + ], + [ + -124.0141298, + 44.9499714 + ], + [ + -124.0141315, + 44.949969 + ], + [ + -124.0141333, + 44.9499667 + ], + [ + -124.0141351, + 44.9499643 + ], + [ + -124.0141368, + 44.9499619 + ], + [ + -124.0141386, + 44.9499595 + ], + [ + -124.0141404, + 44.9499572 + ], + [ + -124.0141422, + 44.9499548 + ], + [ + -124.014144, + 44.9499524 + ], + [ + -124.0141457, + 44.9499501 + ], + [ + -124.0141475, + 44.9499477 + ], + [ + -124.0141493, + 44.9499453 + ], + [ + -124.0141511, + 44.949943 + ], + [ + -124.0141529, + 44.9499406 + ], + [ + -124.0141547, + 44.9499382 + ], + [ + -124.0141565, + 44.9499359 + ], + [ + -124.0141584, + 44.9499335 + ], + [ + -124.0141602, + 44.9499312 + ], + [ + -124.014162, + 44.9499288 + ], + [ + -124.0141638, + 44.9499265 + ], + [ + -124.0141656, + 44.9499241 + ], + [ + -124.0141675, + 44.9499217 + ], + [ + -124.0141693, + 44.9499194 + ], + [ + -124.0141711, + 44.949917 + ], + [ + -124.014173, + 44.9499147 + ], + [ + -124.0141748, + 44.9499124 + ], + [ + -124.0141766, + 44.94991 + ], + [ + -124.0141785, + 44.9499077 + ], + [ + -124.0141803, + 44.9499053 + ], + [ + -124.0141822, + 44.949903 + ], + [ + -124.014184, + 44.9499006 + ], + [ + -124.0141859, + 44.9498983 + ], + [ + -124.0141878, + 44.949896 + ], + [ + -124.0141896, + 44.9498936 + ], + [ + -124.0141915, + 44.9498913 + ], + [ + -124.0141934, + 44.949889 + ], + [ + -124.0141953, + 44.9498866 + ], + [ + -124.0141971, + 44.9498843 + ], + [ + -124.014199, + 44.949882 + ], + [ + -124.0142009, + 44.9498796 + ], + [ + -124.0142028, + 44.9498773 + ], + [ + -124.0142047, + 44.949875 + ], + [ + -124.0142066, + 44.9498727 + ], + [ + -124.0142085, + 44.9498703 + ], + [ + -124.0142104, + 44.949868 + ], + [ + -124.0142123, + 44.9498657 + ], + [ + -124.0142142, + 44.9498634 + ], + [ + -124.0145586, + 44.9494451 + ], + [ + -124.0145586, + 44.9493193 + ], + [ + -124.0145582, + 44.9483745 + ], + [ + -124.014558, + 44.9478955 + ], + [ + -124.0145579, + 44.9476866 + ], + [ + -124.0156312, + 44.9481429 + ], + [ + -124.0157287, + 44.9480245 + ], + [ + -124.0160575, + 44.9476252 + ], + [ + -124.0153717, + 44.9471997 + ], + [ + -124.0153697, + 44.9471994 + ], + [ + -124.0145576, + 44.9471148 + ], + [ + -124.0145575, + 44.9468707 + ], + [ + -124.0151943, + 44.9468898 + ], + [ + -124.0151938, + 44.9459515 + ], + [ + -124.0151935, + 44.9451002 + ], + [ + -124.0145567, + 44.9450782 + ], + [ + -124.0094897, + 44.9449033 + ], + [ + -124.0094965, + 44.943087 + ], + [ + -124.0099606, + 44.9394628 + ], + [ + -124.0104247, + 44.9358386 + ], + [ + -124.0103609, + 44.9336746 + ], + [ + -124.010355, + 44.9334768 + ], + [ + -124.0103545, + 44.9334572 + ], + [ + -124.0103415, + 44.9330176 + ], + [ + -124.010328, + 44.9327782 + ], + [ + -124.0102572, + 44.9328263 + ], + [ + -124.0100697, + 44.932927 + ], + [ + -124.0095982, + 44.9330595 + ], + [ + -124.0091061, + 44.9331566 + ], + [ + -124.0087515, + 44.9331643 + ], + [ + -124.0083129, + 44.9330795 + ], + [ + -124.0079074, + 44.9329348 + ], + [ + -124.0074834, + 44.9327874 + ], + [ + -124.0071086, + 44.9326909 + ], + [ + -124.0067516, + 44.9326593 + ], + [ + -124.0063474, + 44.9326849 + ], + [ + -124.0059642, + 44.9327524 + ], + [ + -124.0057326, + 44.9328119 + ], + [ + -124.0055809, + 44.9328952 + ], + [ + -124.0053524, + 44.9330038 + ], + [ + -124.0049906, + 44.9331261 + ], + [ + -124.004991, + 44.9330031 + ], + [ + -124.0049933, + 44.932189 + ], + [ + -124.0005502, + 44.9321722 + ], + [ + -124.0003104, + 44.9321687 + ], + [ + -123.9996687, + 44.9321593 + ], + [ + -123.9997231, + 44.9306202 + ], + [ + -123.9997264, + 44.9305259 + ], + [ + -123.999759, + 44.9296047 + ], + [ + -123.999764, + 44.9294623 + ], + [ + -124.005001, + 44.9294831 + ], + [ + -124.0050036, + 44.9285779 + ], + [ + -124.0082431, + 44.9285907 + ], + [ + -124.0082612, + 44.9285906 + ], + [ + -124.0084748, + 44.9285915 + ], + [ + -124.0084825, + 44.9285915 + ], + [ + -124.0087864, + 44.9285928 + ], + [ + -124.0087863, + 44.9291716 + ], + [ + -124.0087863, + 44.9294569 + ], + [ + -124.0087863, + 44.9297833 + ], + [ + -124.0087863, + 44.9308284 + ], + [ + -124.0098612, + 44.9308284 + ], + [ + -124.0098614, + 44.9308281 + ], + [ + -124.010209, + 44.9308338 + ], + [ + -124.0102102, + 44.9285983 + ], + [ + -124.0102114, + 44.9282203 + ], + [ + -124.0102115, + 44.9280771 + ], + [ + -124.0102115, + 44.9280497 + ], + [ + -124.0102115, + 44.9279126 + ], + [ + -124.0102116, + 44.9277754 + ], + [ + -124.0102121, + 44.927 + ], + [ + -124.0102122, + 44.9268236 + ], + [ + -124.0102128, + 44.925773 + ], + [ + -124.0102132, + 44.9249782 + ], + [ + -124.0102152, + 44.921412 + ], + [ + -124.0102153, + 44.9213581 + ], + [ + -124.0102239, + 44.9195746 + ], + [ + -124.0102247, + 44.9193977 + ], + [ + -124.0102255, + 44.9192213 + ], + [ + -124.0102265, + 44.9190015 + ], + [ + -124.0102283, + 44.9186289 + ], + [ + -124.0102301, + 44.9182501 + ], + [ + -124.0102329, + 44.9176797 + ], + [ + -124.0102447, + 44.9152137 + ], + [ + -124.0102447, + 44.915206 + ], + [ + -124.0102505, + 44.9140013 + ], + [ + -124.0102429, + 44.9136212 + ], + [ + -124.0102606, + 44.9136222 + ], + [ + -124.0103918, + 44.9136182 + ], + [ + -124.0104442, + 44.9136155 + ], + [ + -124.0104612, + 44.9136147 + ], + [ + -124.0105234, + 44.9136195 + ], + [ + -124.0105725, + 44.9136233 + ], + [ + -124.0106172, + 44.9136166 + ], + [ + -124.0106709, + 44.9136029 + ], + [ + -124.0107315, + 44.9135891 + ], + [ + -124.0108009, + 44.9135882 + ], + [ + -124.0108799, + 44.9135898 + ], + [ + -124.0109611, + 44.9135967 + ], + [ + -124.011057, + 44.9135977 + ], + [ + -124.011136, + 44.9135993 + ], + [ + -124.0112104, + 44.9135863 + ], + [ + -124.0112892, + 44.9135838 + ], + [ + -124.0113584, + 44.913579 + ], + [ + -124.0114459, + 44.9135656 + ], + [ + -124.0115405, + 44.9135547 + ], + [ + -124.0116118, + 44.9135525 + ], + [ + -124.0117044, + 44.913531 + ], + [ + -124.0118217, + 44.913514 + ], + [ + -124.0119435, + 44.9134876 + ], + [ + -124.0120196, + 44.9134719 + ], + [ + -124.0121348, + 44.913451 + ], + [ + -124.0122308, + 44.9134324 + ], + [ + -124.0122412, + 44.9134304 + ], + [ + -124.0122499, + 44.9134287 + ], + [ + -124.0123539, + 44.9134094 + ], + [ + -124.0124679, + 44.9133992 + ], + [ + -124.0125825, + 44.9133984 + ], + [ + -124.0126024, + 44.9133961 + ], + [ + -124.0127141, + 44.9133836 + ], + [ + -124.0128181, + 44.9133937 + ], + [ + -124.0128812, + 44.9134118 + ], + [ + -124.0129342, + 44.9133888 + ], + [ + -124.0129851, + 44.9133797 + ], + [ + -124.0129881, + 44.9133791 + ], + [ + -124.0130061, + 44.9133825 + ], + [ + -124.0130623, + 44.9133929 + ], + [ + -124.0131193, + 44.9134045 + ], + [ + -124.0131919, + 44.9133929 + ], + [ + -124.0132852, + 44.9133347 + ], + [ + -124.013357, + 44.9133098 + ], + [ + -124.0134605, + 44.9133132 + ], + [ + -124.0134676, + 44.9133141 + ], + [ + -124.0135363, + 44.9133229 + ], + [ + -124.0135832, + 44.9133215 + ], + [ + -124.0136446, + 44.9132808 + ], + [ + -124.013695, + 44.9132753 + ], + [ + -124.0137622, + 44.9132632 + ], + [ + -124.013812, + 44.9132543 + ], + [ + -124.0139559, + 44.9132652 + ], + [ + -124.0139739, + 44.9132666 + ], + [ + -124.0140538, + 44.9132841 + ], + [ + -124.0141495, + 44.9132865 + ], + [ + -124.0142659, + 44.9132841 + ], + [ + -124.0142755, + 44.913284 + ], + [ + -124.0143625, + 44.9132705 + ], + [ + -124.0144714, + 44.9132685 + ], + [ + -124.0145368, + 44.9132702 + ], + [ + -124.0145899, + 44.9132715 + ], + [ + -124.0146947, + 44.9132643 + ], + [ + -124.0147329, + 44.9132674 + ], + [ + -124.0147886, + 44.913272 + ], + [ + -124.0149072, + 44.9132763 + ], + [ + -124.0149259, + 44.9132757 + ], + [ + -124.0149954, + 44.9132736 + ], + [ + -124.0150846, + 44.9132882 + ], + [ + -124.0151189, + 44.9132921 + ], + [ + -124.0151678, + 44.9132977 + ], + [ + -124.0152618, + 44.9133013 + ], + [ + -124.0153118, + 44.9133129 + ], + [ + -124.0153742, + 44.9133272 + ], + [ + -124.0155011, + 44.9133433 + ], + [ + -124.0155048, + 44.913343 + ], + [ + -124.0155854, + 44.913336 + ], + [ + -124.0155964, + 44.9133351 + ], + [ + -124.0156716, + 44.913334 + ], + [ + -124.0156771, + 44.9133339 + ], + [ + -124.0157397, + 44.9133546 + ], + [ + -124.0158215, + 44.9133708 + ], + [ + -124.0158683, + 44.9133738 + ], + [ + -124.0159045, + 44.9133762 + ], + [ + -124.0159836, + 44.9133791 + ], + [ + -124.0160613, + 44.9133736 + ], + [ + -124.0160846, + 44.913372 + ], + [ + -124.0161516, + 44.9133619 + ], + [ + -124.0162357, + 44.9133539 + ], + [ + -124.0162717, + 44.9133582 + ], + [ + -124.0163167, + 44.9133568 + ], + [ + -124.0163478, + 44.9133438 + ], + [ + -124.016371, + 44.9133538 + ], + [ + -124.016392, + 44.9133598 + ], + [ + -124.0164197, + 44.9133509 + ], + [ + -124.0164391, + 44.9133303 + ], + [ + -124.016448, + 44.9133276 + ], + [ + -124.0165085, + 44.9133094 + ], + [ + -124.0165842, + 44.9133178 + ], + [ + -124.016641, + 44.9133274 + ], + [ + -124.0166772, + 44.9133336 + ], + [ + -124.0167684, + 44.9133495 + ], + [ + -124.0168337, + 44.9133555 + ], + [ + -124.016844, + 44.9133565 + ], + [ + -124.0168913, + 44.9133617 + ], + [ + -124.0169222, + 44.9133754 + ], + [ + -124.0169648, + 44.9133968 + ], + [ + -124.0170504, + 44.9134142 + ], + [ + -124.0171279, + 44.9134212 + ], + [ + -124.0172188, + 44.9134246 + ], + [ + -124.0172215, + 44.9134247 + ], + [ + -124.0172962, + 44.9134478 + ], + [ + -124.0173787, + 44.9134746 + ], + [ + -124.0174109, + 44.913488 + ], + [ + -124.0174326, + 44.913497 + ], + [ + -124.0174913, + 44.9135339 + ], + [ + -124.0175698, + 44.9135582 + ], + [ + -124.0176029, + 44.9135652 + ], + [ + -124.0176307, + 44.913571 + ], + [ + -124.0177426, + 44.9135953 + ], + [ + -124.0177953, + 44.9136073 + ], + [ + -124.0178303, + 44.9136153 + ], + [ + -124.0179095, + 44.9136502 + ], + [ + -124.0179872, + 44.9136871 + ], + [ + -124.0179888, + 44.9136879 + ], + [ + -124.0180473, + 44.9137221 + ], + [ + -124.0180928, + 44.9137744 + ], + [ + -124.0181661, + 44.9138357 + ], + [ + -124.0182869, + 44.9139821 + ], + [ + -124.0182885, + 44.9140033 + ], + [ + -124.0182917, + 44.9140467 + ], + [ + -124.0183095, + 44.9141406 + ], + [ + -124.0183252, + 44.9142267 + ], + [ + -124.0183582, + 44.9142781 + ], + [ + -124.0183969, + 44.9143384 + ], + [ + -124.0183991, + 44.9143469 + ], + [ + -124.0184165, + 44.9144156 + ], + [ + -124.0184297, + 44.9144681 + ], + [ + -124.0184485, + 44.9145091 + ], + [ + -124.0184828, + 44.9145839 + ], + [ + -124.0185026, + 44.914684 + ], + [ + -124.0185019, + 44.9146905 + ], + [ + -124.0184938, + 44.9147692 + ], + [ + -124.0185521, + 44.9148281 + ], + [ + -124.0185568, + 44.9148328 + ], + [ + -124.0185939, + 44.9148703 + ], + [ + -124.0187497, + 44.914966 + ], + [ + -124.0188767, + 44.9150155 + ], + [ + -124.0189261, + 44.915105 + ], + [ + -124.0189275, + 44.9151074 + ], + [ + -124.018964, + 44.9151517 + ], + [ + -124.0190237, + 44.9152674 + ], + [ + -124.0190501, + 44.9153307 + ], + [ + -124.0190436, + 44.9153801 + ], + [ + -124.0190399, + 44.9154086 + ], + [ + -124.0190024, + 44.9154712 + ], + [ + -124.0190804, + 44.9155183 + ], + [ + -124.0190913, + 44.9155741 + ], + [ + -124.0191474, + 44.9156311 + ], + [ + -124.0191628, + 44.9156553 + ], + [ + -124.0191974, + 44.9157097 + ], + [ + -124.0192272, + 44.9157676 + ], + [ + -124.0192409, + 44.915793 + ], + [ + -124.0192823, + 44.9158701 + ], + [ + -124.0192894, + 44.9159233 + ], + [ + -124.0192916, + 44.9159305 + ], + [ + -124.0193127, + 44.9159974 + ], + [ + -124.0193349, + 44.9160528 + ], + [ + -124.0193731, + 44.9160623 + ], + [ + -124.0193845, + 44.9160683 + ], + [ + -124.0194507, + 44.9161027 + ], + [ + -124.0194753, + 44.9161981 + ], + [ + -124.01951, + 44.916316 + ], + [ + -124.0195465, + 44.9164404 + ], + [ + -124.0195661, + 44.9164947 + ], + [ + -124.0195827, + 44.9165408 + ], + [ + -124.0196203, + 44.9166011 + ], + [ + -124.019633, + 44.9166186 + ], + [ + -124.0196695, + 44.916669 + ], + [ + -124.0196574, + 44.916756 + ], + [ + -124.0196565, + 44.9167629 + ], + [ + -124.0196195, + 44.9168335 + ], + [ + -124.0196352, + 44.916893 + ], + [ + -124.0196391, + 44.9169077 + ], + [ + -124.0196689, + 44.9169656 + ], + [ + -124.0196531, + 44.9170142 + ], + [ + -124.0196844, + 44.9171075 + ], + [ + -124.0197676, + 44.917285 + ], + [ + -124.019762, + 44.9173053 + ], + [ + -124.0197242, + 44.917442 + ], + [ + -124.0197115, + 44.917488 + ], + [ + -124.0196624, + 44.9176132 + ], + [ + -124.0194985, + 44.917778 + ], + [ + -124.0185314, + 44.9182089 + ], + [ + -124.0185098, + 44.9182206 + ], + [ + -124.0184869, + 44.918233 + ], + [ + -124.0181702, + 44.9184046 + ], + [ + -124.0181329, + 44.9184248 + ], + [ + -124.0180799, + 44.9184992 + ], + [ + -124.0180464, + 44.9185463 + ], + [ + -124.0179661, + 44.9185872 + ], + [ + -124.0179139, + 44.9186139 + ], + [ + -124.0178875, + 44.9186273 + ], + [ + -124.0177775, + 44.9186805 + ], + [ + -124.0177771, + 44.9186806 + ], + [ + -124.017723, + 44.9187305 + ], + [ + -124.0176543, + 44.9187432 + ], + [ + -124.0176214, + 44.9187493 + ], + [ + -124.0174864, + 44.9187853 + ], + [ + -124.0174602, + 44.9187923 + ], + [ + -124.0173504, + 44.918851 + ], + [ + -124.0173134, + 44.9188708 + ], + [ + -124.0172951, + 44.9188806 + ], + [ + -124.0171883, + 44.9189454 + ], + [ + -124.0171629, + 44.9189608 + ], + [ + -124.0169793, + 44.9190759 + ], + [ + -124.0169356, + 44.9190935 + ], + [ + -124.0167127, + 44.9191834 + ], + [ + -124.0166584, + 44.9192135 + ], + [ + -124.0165445, + 44.9192766 + ], + [ + -124.0164135, + 44.9193231 + ], + [ + -124.0163024, + 44.9193625 + ], + [ + -124.0162654, + 44.9193842 + ], + [ + -124.016144, + 44.9194554 + ], + [ + -124.0161184, + 44.9194704 + ], + [ + -124.0159998, + 44.9195003 + ], + [ + -124.0158402, + 44.9195825 + ], + [ + -124.015828, + 44.9195888 + ], + [ + -124.015778, + 44.919621 + ], + [ + -124.0156575, + 44.9196987 + ], + [ + -124.0156159, + 44.9197172 + ], + [ + -124.0155371, + 44.9197523 + ], + [ + -124.0154403, + 44.9198053 + ], + [ + -124.0153145, + 44.9198741 + ], + [ + -124.0151671, + 44.9199355 + ], + [ + -124.0151378, + 44.9199477 + ], + [ + -124.0149567, + 44.9200334 + ], + [ + -124.0148561, + 44.9200938 + ], + [ + -124.0147742, + 44.9201428 + ], + [ + -124.0147527, + 44.9201572 + ], + [ + -124.0147085, + 44.9201869 + ], + [ + -124.0146338, + 44.920229 + ], + [ + -124.0145441, + 44.9202779 + ], + [ + -124.0144449, + 44.9203542 + ], + [ + -124.0143133, + 44.920466 + ], + [ + -124.014135, + 44.9205986 + ], + [ + -124.0140645, + 44.9206611 + ], + [ + -124.0140216, + 44.9207153 + ], + [ + -124.0139708, + 44.920742 + ], + [ + -124.0139433, + 44.9208091 + ], + [ + -124.0139131, + 44.9208507 + ], + [ + -124.0139098, + 44.9208646 + ], + [ + -124.0139069, + 44.9208767 + ], + [ + -124.0138955, + 44.9209254 + ], + [ + -124.0138926, + 44.920987 + ], + [ + -124.0139148, + 44.9210503 + ], + [ + -124.0139677, + 44.9211182 + ], + [ + -124.014024, + 44.9211885 + ], + [ + -124.0140904, + 44.9212531 + ], + [ + -124.0141325, + 44.9213035 + ], + [ + -124.0142, + 44.921344 + ], + [ + -124.014226, + 44.9213598 + ], + [ + -124.0142811, + 44.9213932 + ], + [ + -124.0143358, + 44.9214378 + ], + [ + -124.0143964, + 44.9214932 + ], + [ + -124.0144722, + 44.9215408 + ], + [ + -124.0145956, + 44.9216506 + ], + [ + -124.0145937, + 44.9217078 + ], + [ + -124.014595, + 44.9217603 + ], + [ + -124.0145955, + 44.9217764 + ], + [ + -124.0146385, + 44.9218416 + ], + [ + -124.0146928, + 44.9219213 + ], + [ + -124.0147384, + 44.9219864 + ], + [ + -124.0148151, + 44.9220506 + ], + [ + -124.0149549, + 44.922124 + ], + [ + -124.0150676, + 44.9222267 + ], + [ + -124.0150444, + 44.9223143 + ], + [ + -124.0150291, + 44.9223497 + ], + [ + -124.0149715, + 44.922483 + ], + [ + -124.0149005, + 44.9226922 + ], + [ + -124.0148862, + 44.9227505 + ], + [ + -124.0148762, + 44.9228469 + ], + [ + -124.0148469, + 44.923015 + ], + [ + -124.0148412, + 44.9230844 + ], + [ + -124.0148234, + 44.9232149 + ], + [ + -124.0148046, + 44.9233299 + ], + [ + -124.0148238, + 44.9234169 + ], + [ + -124.0148376, + 44.9234786 + ], + [ + -124.0148172, + 44.9235675 + ], + [ + -124.0148258, + 44.923611 + ], + [ + -124.01481, + 44.9236764 + ], + [ + -124.0147461, + 44.9237363 + ], + [ + -124.0147483, + 44.923773 + ], + [ + -124.0147389, + 44.9238453 + ], + [ + -124.0147102, + 44.9239282 + ], + [ + -124.0146625, + 44.9241209 + ], + [ + -124.0146451, + 44.9241949 + ], + [ + -124.0146539, + 44.9243373 + ], + [ + -124.0146651, + 44.9244556 + ], + [ + -124.0146915, + 44.9246276 + ], + [ + -124.0147096, + 44.9247956 + ], + [ + -124.0146818, + 44.9249125 + ], + [ + -124.0145473, + 44.9250023 + ], + [ + -124.0144571, + 44.9251156 + ], + [ + -124.0144289, + 44.925227 + ], + [ + -124.014289, + 44.9254623 + ], + [ + -124.0142066, + 44.9254988 + ], + [ + -124.0142062, + 44.9255008 + ], + [ + -124.0142059, + 44.9255028 + ], + [ + -124.0142056, + 44.9255048 + ], + [ + -124.0142053, + 44.9255068 + ], + [ + -124.014205, + 44.9255089 + ], + [ + -124.0142047, + 44.9255109 + ], + [ + -124.0142044, + 44.9255129 + ], + [ + -124.0142041, + 44.9255149 + ], + [ + -124.0142039, + 44.9255169 + ], + [ + -124.0142036, + 44.925519 + ], + [ + -124.0142034, + 44.925521 + ], + [ + -124.0141216, + 44.9261218 + ], + [ + -124.0141936, + 44.9261592 + ], + [ + -124.0142366, + 44.9261905 + ], + [ + -124.0142897, + 44.9262294 + ], + [ + -124.0143217, + 44.9262621 + ], + [ + -124.0143724, + 44.9263134 + ], + [ + -124.014415, + 44.9263639 + ], + [ + -124.014454, + 44.9264065 + ], + [ + -124.0144931, + 44.9264503 + ], + [ + -124.0145386, + 44.9264815 + ], + [ + -124.0145872, + 44.9265257 + ], + [ + -124.0146223, + 44.92656 + ], + [ + -124.0146865, + 44.9266043 + ], + [ + -124.0147843, + 44.9266716 + ], + [ + -124.015019, + 44.9268206 + ], + [ + -124.0151458, + 44.9269076 + ], + [ + -124.0152419, + 44.9269646 + ], + [ + -124.0154122, + 44.9270373 + ], + [ + -124.0154814, + 44.9270668 + ], + [ + -124.0156137, + 44.9271078 + ], + [ + -124.0157222, + 44.9271267 + ], + [ + -124.0158225, + 44.9271242 + ], + [ + -124.0159224, + 44.9271143 + ], + [ + -124.0159824, + 44.9270888 + ], + [ + -124.0160339, + 44.9270539 + ], + [ + -124.0160488, + 44.9270526 + ], + [ + -124.0162357, + 44.9270368 + ], + [ + -124.0162412, + 44.9270376 + ], + [ + -124.0163855, + 44.9270599 + ], + [ + -124.0164364, + 44.9270734 + ], + [ + -124.0165537, + 44.9271059 + ], + [ + -124.0166607, + 44.9271152 + ], + [ + -124.0168884, + 44.9271669 + ], + [ + -124.0170969, + 44.927194 + ], + [ + -124.017677, + 44.9273062 + ], + [ + -124.0181876, + 44.9274416 + ], + [ + -124.0184454, + 44.9275973 + ], + [ + -124.0187513, + 44.9275752 + ], + [ + -124.0187475, + 44.9275124 + ], + [ + -124.0187618, + 44.9273608 + ], + [ + -124.0189362, + 44.9273134 + ], + [ + -124.0191724, + 44.9273103 + ], + [ + -124.0194389, + 44.9273189 + ], + [ + -124.0195071, + 44.9272748 + ], + [ + -124.0195884, + 44.9272513 + ], + [ + -124.0196891, + 44.9272565 + ], + [ + -124.0197443, + 44.927385 + ], + [ + -124.0200146, + 44.9274564 + ], + [ + -124.0202208, + 44.9274458 + ], + [ + -124.0204611, + 44.9274131 + ], + [ + -124.0206133, + 44.927401 + ], + [ + -124.0207282, + 44.9273924 + ], + [ + -124.0210691, + 44.9273514 + ], + [ + -124.0212815, + 44.9273143 + ], + [ + -124.0215149, + 44.9273015 + ], + [ + -124.0215778, + 44.9273124 + ], + [ + -124.0217043, + 44.9273345 + ], + [ + -124.0220632, + 44.9273955 + ], + [ + -124.0224295, + 44.9275117 + ], + [ + -124.0227721, + 44.927626 + ], + [ + -124.0230619, + 44.9277164 + ], + [ + -124.0232639, + 44.9277794 + ], + [ + -124.0235981, + 44.9278828 + ], + [ + -124.0242229, + 44.9281064 + ], + [ + -124.0243809, + 44.9281871 + ], + [ + -124.0247333, + 44.9284086 + ], + [ + -124.0249449, + 44.9285491 + ], + [ + -124.0250872, + 44.9286784 + ], + [ + -124.0251722, + 44.9287556 + ], + [ + -124.0252218, + 44.9289436 + ], + [ + -124.0252341, + 44.9289902 + ], + [ + -124.0253078, + 44.9292655 + ], + [ + -124.0253825, + 44.9295407 + ], + [ + -124.0253857, + 44.9295524 + ], + [ + -124.0253917, + 44.929678 + ], + [ + -124.0254016, + 44.9298837 + ], + [ + -124.0254114, + 44.9300896 + ], + [ + -124.025397, + 44.9302265 + ], + [ + -124.0253725, + 44.9304591 + ], + [ + -124.0253673, + 44.9306326 + ], + [ + -124.0253475, + 44.9308804 + ], + [ + -124.0253554, + 44.9310104 + ], + [ + -124.0253317, + 44.9311945 + ], + [ + -124.0253178, + 44.9313459 + ], + [ + -124.0252935, + 44.9315245 + ], + [ + -124.0252412, + 44.9318814 + ], + [ + -124.0252169, + 44.9321847 + ], + [ + -124.0251831, + 44.9322802 + ], + [ + -124.0251038, + 44.9325047 + ], + [ + -124.024916, + 44.9328752 + ], + [ + -124.0248757, + 44.9329618 + ], + [ + -124.0248261, + 44.9330686 + ], + [ + -124.0248023, + 44.9331278 + ], + [ + -124.0247749, + 44.933196 + ], + [ + -124.0247672, + 44.9332152 + ], + [ + -124.0247332, + 44.9333709 + ], + [ + -124.0247116, + 44.9334702 + ], + [ + -124.0247022, + 44.9335936 + ], + [ + -124.02468, + 44.933839 + ], + [ + -124.0246207, + 44.9340339 + ], + [ + -124.0246076, + 44.9341063 + ], + [ + -124.0245852, + 44.9342304 + ], + [ + -124.0245574, + 44.9343856 + ], + [ + -124.0245287, + 44.934582 + ], + [ + -124.0245206, + 44.9346372 + ], + [ + -124.0245122, + 44.9346948 + ], + [ + -124.0245106, + 44.9347133 + ], + [ + -124.0244982, + 44.9348545 + ], + [ + -124.0244835, + 44.9350021 + ], + [ + -124.0245198, + 44.9352005 + ], + [ + -124.0245794, + 44.9353642 + ], + [ + -124.0245888, + 44.9353997 + ], + [ + -124.0246088, + 44.9354752 + ], + [ + -124.0246663, + 44.9356523 + ], + [ + -124.0247472, + 44.9358004 + ], + [ + -124.0248064, + 44.9359864 + ], + [ + -124.0248745, + 44.9362129 + ], + [ + -124.0249756, + 44.9364583 + ], + [ + -124.0249582, + 44.9365296 + ], + [ + -124.0249573, + 44.9365947 + ], + [ + -124.0249561, + 44.9366797 + ], + [ + -124.0249618, + 44.936757 + ], + [ + -124.0249617, + 44.9368004 + ], + [ + -124.0249617, + 44.9368405 + ], + [ + -124.0250087, + 44.9369 + ], + [ + -124.0250548, + 44.937014 + ], + [ + -124.0250433, + 44.9370908 + ], + [ + -124.0250519, + 44.937122 + ], + [ + -124.0250911, + 44.9371932 + ], + [ + -124.0251425, + 44.9372488 + ], + [ + -124.0251673, + 44.9373048 + ], + [ + -124.0251452, + 44.9373643 + ], + [ + -124.0250994, + 44.9375372 + ], + [ + -124.0250719, + 44.9376104 + ], + [ + -124.0250449, + 44.9377025 + ], + [ + -124.0250561, + 44.9379174 + ], + [ + -124.0250134, + 44.9379589 + ], + [ + -124.0249247, + 44.9380204 + ], + [ + -124.024863, + 44.9381005 + ], + [ + -124.0248659, + 44.9381925 + ], + [ + -124.0248662, + 44.9382795 + ], + [ + -124.0249161, + 44.938368 + ], + [ + -124.0249234, + 44.9384297 + ], + [ + -124.0248276, + 44.9386054 + ], + [ + -124.0247787, + 44.9386888 + ], + [ + -124.0247873, + 44.9387201 + ], + [ + -124.0248302, + 44.9387656 + ], + [ + -124.0248739, + 44.9388065 + ], + [ + -124.024859, + 44.9388619 + ], + [ + -124.0248022, + 44.9389094 + ], + [ + -124.0248502, + 44.9389436 + ], + [ + -124.0248588, + 44.9389748 + ], + [ + -124.0249196, + 44.9390782 + ], + [ + -124.0249039, + 44.9391617 + ], + [ + -124.0248825, + 44.9392165 + ], + [ + -124.0248591, + 44.9392618 + ], + [ + -124.0248969, + 44.939387 + ], + [ + -124.0249317, + 44.9395541 + ], + [ + -124.0249796, + 44.9396777 + ], + [ + -124.0249518, + 44.9397532 + ], + [ + -124.0249585, + 44.9398366 + ], + [ + -124.0249534, + 44.9399983 + ], + [ + -124.0249071, + 44.9402207 + ], + [ + -124.0248592, + 44.9404312 + ], + [ + -124.0248097, + 44.9406744 + ], + [ + -124.0248111, + 44.9407119 + ], + [ + -124.0248151, + 44.9408159 + ], + [ + -124.0248131, + 44.9408384 + ], + [ + -124.0247997, + 44.9409865 + ], + [ + -124.0247435, + 44.9411187 + ], + [ + -124.0247212, + 44.9411493 + ], + [ + -124.0246603, + 44.9412325 + ], + [ + -124.0245591, + 44.9412829 + ], + [ + -124.0245582, + 44.9412833 + ], + [ + -124.0244474, + 44.941315 + ], + [ + -124.0244301, + 44.9413419 + ], + [ + -124.0244194, + 44.9413694 + ], + [ + -124.0244165, + 44.9414115 + ], + [ + -124.0244701, + 44.9414743 + ], + [ + -124.0245113, + 44.9415315 + ], + [ + -124.024526, + 44.9415891 + ], + [ + -124.0245288, + 44.9416239 + ], + [ + -124.0245331, + 44.9416764 + ], + [ + -124.0245037, + 44.9417401 + ], + [ + -124.024492, + 44.941759 + ], + [ + -124.0244688, + 44.9417963 + ], + [ + -124.024489, + 44.9418613 + ], + [ + -124.0244608, + 44.9419392 + ], + [ + -124.0244219, + 44.9419998 + ], + [ + -124.0244089, + 44.9420284 + ], + [ + -124.0243825, + 44.9420862 + ], + [ + -124.0243371, + 44.9421464 + ], + [ + -124.024335, + 44.9421606 + ], + [ + -124.0243309, + 44.9421882 + ], + [ + -124.0243272, + 44.942235 + ], + [ + -124.02431, + 44.9422967 + ], + [ + -124.024306, + 44.942311 + ], + [ + -124.0242645, + 44.9424114 + ], + [ + -124.024236, + 44.9424469 + ], + [ + -124.02424, + 44.9424872 + ], + [ + -124.024233, + 44.9425338 + ], + [ + -124.0242363, + 44.9425787 + ], + [ + -124.0242414, + 44.9426332 + ], + [ + -124.0242125, + 44.942703 + ], + [ + -124.0242103, + 44.9427084 + ], + [ + -124.024201, + 44.9427712 + ], + [ + -124.0241752, + 44.9428328 + ], + [ + -124.0241715, + 44.9428378 + ], + [ + -124.0241255, + 44.9428996 + ], + [ + -124.0241123, + 44.9429433 + ], + [ + -124.0241323, + 44.9429728 + ], + [ + -124.0241341, + 44.9429755 + ], + [ + -124.0241825, + 44.9430733 + ], + [ + -124.0241561, + 44.9431125 + ], + [ + -124.0241357, + 44.9431427 + ], + [ + -124.0240732, + 44.9432062 + ], + [ + -124.0240613, + 44.9432431 + ], + [ + -124.0240547, + 44.9432636 + ], + [ + -124.0240797, + 44.9433825 + ], + [ + -124.0240819, + 44.9433927 + ], + [ + -124.0240724, + 44.9434344 + ], + [ + -124.0240812, + 44.9434868 + ], + [ + -124.0240733, + 44.9435197 + ], + [ + -124.0240723, + 44.9435238 + ], + [ + -124.0240128, + 44.9435899 + ], + [ + -124.0240035, + 44.9436525 + ], + [ + -124.0239979, + 44.9436899 + ], + [ + -124.0240609, + 44.9437948 + ], + [ + -124.0241176, + 44.9438892 + ], + [ + -124.0241572, + 44.9439345 + ], + [ + -124.024147, + 44.9439808 + ], + [ + -124.0241249, + 44.9439997 + ], + [ + -124.0241015, + 44.9440197 + ], + [ + -124.024045, + 44.9440649 + ], + [ + -124.0240187, + 44.9441086 + ], + [ + -124.0240137, + 44.9441169 + ], + [ + -124.0240098, + 44.9441234 + ], + [ + -124.0240102, + 44.944187 + ], + [ + -124.0240399, + 44.9442551 + ], + [ + -124.0240697, + 44.9443444 + ], + [ + -124.0240578, + 44.9444023 + ], + [ + -124.0240201, + 44.9444324 + ], + [ + -124.024031, + 44.9444708 + ], + [ + -124.0240023, + 44.9444852 + ], + [ + -124.0239476, + 44.944534 + ], + [ + -124.023922, + 44.9445568 + ], + [ + -124.023897, + 44.9446137 + ], + [ + -124.0239151, + 44.9446534 + ], + [ + -124.0239204, + 44.94467 + ], + [ + -124.023932, + 44.9447128 + ], + [ + -124.0239335, + 44.9447694 + ], + [ + -124.0239191, + 44.9448096 + ], + [ + -124.0239114, + 44.9448311 + ], + [ + -124.0238666, + 44.9448866 + ], + [ + -124.0238609, + 44.9449251 + ], + [ + -124.0238597, + 44.9449331 + ], + [ + -124.0238559, + 44.9449405 + ], + [ + -124.0238411, + 44.9449693 + ], + [ + -124.0238704, + 44.944995 + ], + [ + -124.0238928, + 44.9450226 + ], + [ + -124.0238944, + 44.945068 + ], + [ + -124.0238947, + 44.9450769 + ], + [ + -124.0239018, + 44.9450854 + ], + [ + -124.0239341, + 44.9451239 + ], + [ + -124.0239491, + 44.9451792 + ], + [ + -124.0239605, + 44.945216 + ], + [ + -124.0239659, + 44.9452335 + ], + [ + -124.0239692, + 44.9452442 + ], + [ + -124.0239497, + 44.9452863 + ], + [ + -124.0239145, + 44.9453224 + ], + [ + -124.0238983, + 44.945353 + ], + [ + -124.0238619, + 44.9453749 + ], + [ + -124.0238612, + 44.9454243 + ], + [ + -124.0238925, + 44.9454702 + ], + [ + -124.0239447, + 44.94552 + ], + [ + -124.0239558, + 44.9455679 + ], + [ + -124.0239507, + 44.9456028 + ], + [ + -124.0239577, + 44.9456221 + ], + [ + -124.0239694, + 44.9456547 + ], + [ + -124.0239575, + 44.9456785 + ], + [ + -124.0239199, + 44.9456968 + ], + [ + -124.0239088, + 44.945716 + ], + [ + -124.0238776, + 44.945736 + ], + [ + -124.0238549, + 44.9457884 + ], + [ + -124.0238541, + 44.9458048 + ], + [ + -124.0238398, + 44.9458343 + ], + [ + -124.0238113, + 44.9458475 + ], + [ + -124.0238076, + 44.9458613 + ], + [ + -124.0238152, + 44.9458772 + ], + [ + -124.0238405, + 44.9459073 + ], + [ + -124.0238689, + 44.9459506 + ], + [ + -124.0238993, + 44.946047 + ], + [ + -124.0239002, + 44.9460855 + ], + [ + -124.023922, + 44.9461177 + ], + [ + -124.023927, + 44.9461393 + ], + [ + -124.0239118, + 44.9461805 + ], + [ + -124.0238956, + 44.9462393 + ], + [ + -124.0238834, + 44.9462878 + ], + [ + -124.0238843, + 44.9463042 + ], + [ + -124.0239122, + 44.9463957 + ], + [ + -124.0239396, + 44.9464455 + ], + [ + -124.023941, + 44.9464479 + ], + [ + -124.0239414, + 44.9464546 + ], + [ + -124.0239424, + 44.9464697 + ], + [ + -124.0239459, + 44.9465227 + ], + [ + -124.0238904, + 44.946627 + ], + [ + -124.0238554, + 44.9466798 + ], + [ + -124.0238849, + 44.9467297 + ], + [ + -124.0238925, + 44.9468233 + ], + [ + -124.0238796, + 44.9469357 + ], + [ + -124.0238497, + 44.9470446 + ], + [ + -124.0238815, + 44.9471477 + ], + [ + -124.0238837, + 44.9471548 + ], + [ + -124.0238747, + 44.9472263 + ], + [ + -124.0238539, + 44.9472638 + ], + [ + -124.0238474, + 44.9473025 + ], + [ + -124.0238491, + 44.9474141 + ], + [ + -124.0238627, + 44.9475988 + ], + [ + -124.0238652, + 44.9478446 + ], + [ + -124.0238913, + 44.9480718 + ], + [ + -124.0238659, + 44.9481192 + ], + [ + -124.0238549, + 44.9481678 + ], + [ + -124.0238128, + 44.9482633 + ], + [ + -124.0238593, + 44.9483333 + ], + [ + -124.0238966, + 44.9484231 + ], + [ + -124.0238621, + 44.9484901 + ], + [ + -124.0238381, + 44.9485644 + ], + [ + -124.02386, + 44.9486076 + ], + [ + -124.0238457, + 44.948658 + ], + [ + -124.0238541, + 44.9487123 + ], + [ + -124.0238839, + 44.9487603 + ], + [ + -124.023872, + 44.9488315 + ], + [ + -124.023864, + 44.9488969 + ], + [ + -124.0238868, + 44.9489174 + ], + [ + -124.023911, + 44.9489462 + ], + [ + -124.0239354, + 44.9489049 + ], + [ + -124.0239649, + 44.9489198 + ], + [ + -124.0240093, + 44.9489504 + ], + [ + -124.0240313, + 44.94901 + ], + [ + -124.0240618, + 44.9490539 + ], + [ + -124.0240778, + 44.94908 + ], + [ + -124.0241002, + 44.9491025 + ], + [ + -124.0240944, + 44.9491371 + ], + [ + -124.0241057, + 44.9491567 + ], + [ + -124.0241376, + 44.9491924 + ], + [ + -124.0241473, + 44.9492386 + ], + [ + -124.0241275, + 44.9492699 + ], + [ + -124.0241175, + 44.9493124 + ], + [ + -124.0241382, + 44.9493451 + ], + [ + -124.0241731, + 44.9494139 + ], + [ + -124.0241921, + 44.9494919 + ], + [ + -124.0242224, + 44.9494676 + ], + [ + -124.024222, + 44.9495047 + ], + [ + -124.0242194, + 44.9495096 + ], + [ + -124.0241966, + 44.9495521 + ], + [ + -124.0241783, + 44.9495918 + ], + [ + -124.024165, + 44.9496196 + ], + [ + -124.0241294, + 44.949645 + ], + [ + -124.0241055, + 44.9496621 + ], + [ + -124.0241146, + 44.9496773 + ], + [ + -124.024149, + 44.9496802 + ], + [ + -124.0241478, + 44.9497049 + ], + [ + -124.0241459, + 44.9497336 + ], + [ + -124.0241245, + 44.9497751 + ], + [ + -124.0241117, + 44.9497472 + ], + [ + -124.0240833, + 44.9497779 + ], + [ + -124.024079, + 44.9497823 + ], + [ + -124.0240481, + 44.9498141 + ], + [ + -124.0240234, + 44.9498574 + ], + [ + -124.0240141, + 44.9498959 + ], + [ + -124.0239962, + 44.9499179 + ], + [ + -124.0239812, + 44.9499364 + ], + [ + -124.0239678, + 44.9499642 + ], + [ + -124.023933, + 44.9499634 + ], + [ + -124.0239131, + 44.9499431 + ], + [ + -124.0238843, + 44.9499592 + ], + [ + -124.0238787, + 44.9499753 + ], + [ + -124.023921, + 44.949983 + ], + [ + -124.0239277, + 44.9500124 + ], + [ + -124.0239137, + 44.9500443 + ], + [ + -124.0238833, + 44.950052 + ], + [ + -124.0238459, + 44.9500324 + ], + [ + -124.0238306, + 44.9500538 + ], + [ + -124.0238259, + 44.9500823 + ], + [ + -124.0238495, + 44.9501152 + ], + [ + -124.0238317, + 44.9501344 + ], + [ + -124.0237988, + 44.9501399 + ], + [ + -124.0238094, + 44.9501635 + ], + [ + -124.0237726, + 44.9501748 + ], + [ + -124.0237642, + 44.9501906 + ], + [ + -124.0237449, + 44.9502014 + ], + [ + -124.0237255, + 44.9501956 + ], + [ + -124.0237015, + 44.9501998 + ], + [ + -124.0236885, + 44.9502255 + ], + [ + -124.0237069, + 44.9502557 + ], + [ + -124.023714, + 44.9502949 + ], + [ + -124.0237145, + 44.9502976 + ], + [ + -124.0237065, + 44.9503279 + ], + [ + -124.0236972, + 44.9503663 + ], + [ + -124.0236792, + 44.950404 + ], + [ + -124.0236603, + 44.9504472 + ], + [ + -124.0236557, + 44.9504578 + ], + [ + -124.0237021, + 44.9504761 + ], + [ + -124.0237371, + 44.9505439 + ], + [ + -124.0237024, + 44.9506423 + ], + [ + -124.0236837, + 44.9506953 + ], + [ + -124.0236571, + 44.9507705 + ], + [ + -124.0235553, + 44.9509485 + ], + [ + -124.0235338, + 44.9510091 + ], + [ + -124.0233705, + 44.9514699 + ], + [ + -124.0232519, + 44.9517085 + ], + [ + -124.0232286, + 44.9519115 + ], + [ + -124.0231744, + 44.9520376 + ], + [ + -124.0231357, + 44.9522078 + ], + [ + -124.023097, + 44.95229 + ], + [ + -124.0230583, + 44.9524382 + ], + [ + -124.022919, + 44.9527674 + ], + [ + -124.0228183, + 44.9529594 + ], + [ + -124.0227735, + 44.9532466 + ], + [ + -124.0227593, + 44.9533831 + ], + [ + -124.0226986, + 44.9536071 + ], + [ + -124.0226904, + 44.9537262 + ], + [ + -124.0226692, + 44.9539225 + ], + [ + -124.0226432, + 44.9541336 + ], + [ + -124.0226436, + 44.9541336 + ], + [ + -124.0226241, + 44.9543763 + ], + [ + -124.0226285, + 44.9544283 + ], + [ + -124.0226052, + 44.9544986 + ], + [ + -124.0225819, + 44.9545854 + ], + [ + -124.0225573, + 44.9546545 + ], + [ + -124.0225418, + 44.9547389 + ], + [ + -124.0225547, + 44.9548184 + ], + [ + -124.0225416, + 44.9548699 + ], + [ + -124.0225263, + 44.9549357 + ], + [ + -124.0225348, + 44.9549606 + ], + [ + -124.0225477, + 44.9550834 + ], + [ + -124.0225135, + 44.9551628 + ], + [ + -124.0225081, + 44.9552355 + ], + [ + -124.0225163, + 44.9553074 + ], + [ + -124.0224911, + 44.9553757 + ], + [ + -124.0224417, + 44.9556093 + ], + [ + -124.0224359, + 44.9556765 + ], + [ + -124.0224065, + 44.9558532 + ], + [ + -124.0223643, + 44.9560552 + ], + [ + -124.022328, + 44.9562159 + ], + [ + -124.022314, + 44.956426 + ], + [ + -124.0222987, + 44.9565666 + ], + [ + -124.0222954, + 44.9566721 + ], + [ + -124.0223136, + 44.9567359 + ], + [ + -124.0223076, + 44.9567704 + ], + [ + -124.022316, + 44.9567947 + ], + [ + -124.0223052, + 44.9568326 + ], + [ + -124.0223058, + 44.9568775 + ], + [ + -124.0223049, + 44.9569141 + ], + [ + -124.0222801, + 44.9569473 + ], + [ + -124.022294, + 44.9569792 + ], + [ + -124.0222751, + 44.9569983 + ], + [ + -124.0222438, + 44.9570141 + ], + [ + -124.0222032, + 44.9570151 + ], + [ + -124.02218, + 44.9570226 + ], + [ + -124.022151, + 44.9570837 + ], + [ + -124.0220899, + 44.9571701 + ], + [ + -124.0220494, + 44.9572512 + ], + [ + -124.0220386, + 44.9572891 + ], + [ + -124.0220088, + 44.95738 + ], + [ + -124.0219716, + 44.9574698 + ], + [ + -124.0219446, + 44.9574972 + ], + [ + -124.021908, + 44.9575314 + ], + [ + -124.0218965, + 44.9575651 + ], + [ + -124.0219443, + 44.9575788 + ], + [ + -124.0219534, + 44.9576073 + ], + [ + -124.0219381, + 44.957646 + ], + [ + -124.021933, + 44.9576587 + ], + [ + -124.0218974, + 44.957723 + ], + [ + -124.0219002, + 44.9577533 + ], + [ + -124.0218702, + 44.9577977 + ], + [ + -124.0218672, + 44.9578353 + ], + [ + -124.0218228, + 44.9578833 + ], + [ + -124.0217766, + 44.9579479 + ], + [ + -124.0217675, + 44.9579681 + ], + [ + -124.0217364, + 44.9580372 + ], + [ + -124.0216556, + 44.9581041 + ], + [ + -124.0216161, + 44.9581368 + ], + [ + -124.0215695, + 44.9582403 + ], + [ + -124.0215641, + 44.9582522 + ], + [ + -124.0215579, + 44.9583204 + ], + [ + -124.0215195, + 44.9583495 + ], + [ + -124.0214814, + 44.9583766 + ], + [ + -124.0214225, + 44.9584184 + ], + [ + -124.0213702, + 44.9585812 + ], + [ + -124.0213697, + 44.9585825 + ], + [ + -124.021302, + 44.9585866 + ], + [ + -124.0212765, + 44.9586438 + ], + [ + -124.0213088, + 44.9587634 + ], + [ + -124.021307, + 44.9587862 + ], + [ + -124.0212993, + 44.9588835 + ], + [ + -124.0213058, + 44.9589234 + ], + [ + -124.0213085, + 44.9589404 + ], + [ + -124.0212649, + 44.9590103 + ], + [ + -124.02121, + 44.9592567 + ], + [ + -124.0211768, + 44.9593237 + ], + [ + -124.0211673, + 44.9593429 + ], + [ + -124.0211653, + 44.9594015 + ], + [ + -124.0211242, + 44.9594372 + ], + [ + -124.02098, + 44.9594505 + ], + [ + -124.0208843, + 44.9594717 + ], + [ + -124.0209298, + 44.9595151 + ], + [ + -124.0210369, + 44.9595598 + ], + [ + -124.0210681, + 44.9596017 + ], + [ + -124.0210748, + 44.9596107 + ], + [ + -124.0210364, + 44.9596824 + ], + [ + -124.0210324, + 44.9597544 + ], + [ + -124.0210126, + 44.9598449 + ], + [ + -124.0209201, + 44.9599855 + ], + [ + -124.0209197, + 44.9601174 + ], + [ + -124.0209227, + 44.960303 + ], + [ + -124.0209048, + 44.960403 + ], + [ + -124.0208706, + 44.9608898 + ], + [ + -124.020812, + 44.9611291 + ], + [ + -124.0207359, + 44.9614668 + ], + [ + -124.0206592, + 44.9616709 + ], + [ + -124.0205121, + 44.9618546 + ], + [ + -124.0204289, + 44.962017 + ], + [ + -124.0203429, + 44.9622404 + ], + [ + -124.0202636, + 44.9624762 + ], + [ + -124.0202443, + 44.9627351 + ], + [ + -124.0202146, + 44.9629194 + ], + [ + -124.0200945, + 44.9631605 + ], + [ + -124.0200317, + 44.9633791 + ], + [ + -124.0199467, + 44.9635234 + ], + [ + -124.019924, + 44.9635849 + ], + [ + -124.0198633, + 44.9637493 + ], + [ + -124.0198261, + 44.9638501 + ], + [ + -124.0198045, + 44.9638863 + ], + [ + -124.0197908, + 44.9639092 + ], + [ + -124.0197226, + 44.9640233 + ], + [ + -124.0197173, + 44.9640321 + ], + [ + -124.0197144, + 44.9640369 + ], + [ + -124.0196665, + 44.9641603 + ], + [ + -124.0196587, + 44.9641803 + ], + [ + -124.0196259, + 44.9644104 + ], + [ + -124.0195694, + 44.9645413 + ], + [ + -124.0194888, + 44.9647563 + ], + [ + -124.0194252, + 44.9648729 + ], + [ + -124.0194102, + 44.9649002 + ], + [ + -124.0193691, + 44.9649756 + ], + [ + -124.0193438, + 44.9650097 + ], + [ + -124.0192628, + 44.9651193 + ], + [ + -124.0191614, + 44.9652563 + ], + [ + -124.0190586, + 44.9654479 + ], + [ + -124.0190423, + 44.9654782 + ], + [ + -124.0189775, + 44.9657776 + ], + [ + -124.0189377, + 44.9660749 + ], + [ + -124.0188707, + 44.9662316 + ], + [ + -124.0188754, + 44.9663606 + ], + [ + -124.0188227, + 44.9665013 + ], + [ + -124.018728, + 44.9666615 + ], + [ + -124.0186921, + 44.9669042 + ], + [ + -124.0186888, + 44.9669269 + ], + [ + -124.0186598, + 44.9670151 + ], + [ + -124.0186163, + 44.9671475 + ], + [ + -124.018563, + 44.9673048 + ], + [ + -124.018536, + 44.9674093 + ], + [ + -124.0184504, + 44.9675501 + ], + [ + -124.0183592, + 44.9676479 + ], + [ + -124.0182856, + 44.9677862 + ], + [ + -124.0182351, + 44.9678547 + ], + [ + -124.0181556, + 44.9679456 + ], + [ + -124.0181003, + 44.9680358 + ], + [ + -124.0179801, + 44.9681065 + ], + [ + -124.0178733, + 44.9681486 + ], + [ + -124.0178218, + 44.9681524 + ], + [ + -124.017742, + 44.9681398 + ], + [ + -124.0176567, + 44.9681359 + ], + [ + -124.0175779, + 44.9681405 + ], + [ + -124.0174893, + 44.9681325 + ], + [ + -124.0174118, + 44.9681068 + ], + [ + -124.0173477, + 44.9681023 + ], + [ + -124.0172959, + 44.9680521 + ], + [ + -124.0172593, + 44.9679993 + ], + [ + -124.0172147, + 44.9679661 + ], + [ + -124.0171739, + 44.9679458 + ], + [ + -124.0171018, + 44.9679091 + ], + [ + -124.0170427, + 44.9678872 + ], + [ + -124.0170112, + 44.9678688 + ], + [ + -124.0169862, + 44.9678587 + ], + [ + -124.0169056, + 44.9678332 + ], + [ + -124.0168467, + 44.9678134 + ], + [ + -124.0168262, + 44.9678046 + ], + [ + -124.0168011, + 44.9678269 + ], + [ + -124.0167516, + 44.967871 + ], + [ + -124.0167792, + 44.9678814 + ], + [ + -124.0168916, + 44.9679046 + ], + [ + -124.0169703, + 44.9679385 + ], + [ + -124.0170504, + 44.9679693 + ], + [ + -124.017107, + 44.968006 + ], + [ + -124.0171464, + 44.9680529 + ], + [ + -124.0172292, + 44.9681281 + ], + [ + -124.0172932, + 44.9681946 + ], + [ + -124.0174107, + 44.968241 + ], + [ + -124.0175058, + 44.9683047 + ], + [ + -124.0176016, + 44.9683369 + ], + [ + -124.0177472, + 44.9684157 + ], + [ + -124.0178152, + 44.9684617 + ], + [ + -124.0178539, + 44.968492 + ], + [ + -124.0179357, + 44.9685561 + ], + [ + -124.01802, + 44.9686598 + ], + [ + -124.0180671, + 44.9687448 + ], + [ + -124.0180429, + 44.969054 + ], + [ + -124.018019, + 44.9692307 + ], + [ + -124.0178899, + 44.9695618 + ], + [ + -124.0178193, + 44.9698668 + ], + [ + -124.0177374, + 44.97007 + ], + [ + -124.0177204, + 44.9703592 + ], + [ + -124.0175731, + 44.9707088 + ], + [ + -124.0175221, + 44.9710096 + ], + [ + -124.0174143, + 44.9713577 + ], + [ + -124.0172638, + 44.9719785 + ], + [ + -124.0171899, + 44.9721497 + ], + [ + -124.0171445, + 44.972299 + ], + [ + -124.0171292, + 44.9724373 + ], + [ + -124.0170781, + 44.9725131 + ], + [ + -124.0170759, + 44.9725185 + ], + [ + -124.017053, + 44.9725755 + ], + [ + -124.0170671, + 44.9726289 + ], + [ + -124.0170581, + 44.9726568 + ], + [ + -124.0170337, + 44.9727327 + ], + [ + -124.017021, + 44.9728799 + ], + [ + -124.0170172, + 44.9729791 + ], + [ + -124.0170109, + 44.9730776 + ], + [ + -124.0169677, + 44.9731588 + ], + [ + -124.0169287, + 44.9731923 + ], + [ + -124.0168994, + 44.9732174 + ], + [ + -124.0168008, + 44.9733021 + ], + [ + -124.0167977, + 44.9733171 + ], + [ + -124.0167813, + 44.9733963 + ], + [ + -124.0167645, + 44.9734778 + ], + [ + -124.0167221, + 44.9736786 + ], + [ + -124.0167474, + 44.973914 + ], + [ + -124.0167621, + 44.9740263 + ], + [ + -124.0167745, + 44.9741211 + ], + [ + -124.0167408, + 44.9742788 + ], + [ + -124.0167378, + 44.9743004 + ], + [ + -124.0167187, + 44.9744376 + ], + [ + -124.0167168, + 44.9744514 + ], + [ + -124.0167157, + 44.9744593 + ], + [ + -124.0166455, + 44.9747384 + ], + [ + -124.0166233, + 44.9748633 + ], + [ + -124.0166025, + 44.9749811 + ], + [ + -124.0165938, + 44.9750006 + ], + [ + -124.016533, + 44.9751381 + ], + [ + -124.0165103, + 44.9751893 + ], + [ + -124.016425, + 44.9752757 + ], + [ + -124.0163978, + 44.9753032 + ], + [ + -124.0163569, + 44.9753398 + ], + [ + -124.0163086, + 44.975383 + ], + [ + -124.0163052, + 44.975443 + ], + [ + -124.0163037, + 44.9754699 + ], + [ + -124.0163034, + 44.9754755 + ], + [ + -124.0163686, + 44.9755352 + ], + [ + -124.0164885, + 44.9756008 + ], + [ + -124.0165445, + 44.9756666 + ], + [ + -124.0165587, + 44.9756833 + ], + [ + -124.0165041, + 44.9757435 + ], + [ + -124.0164072, + 44.9758158 + ], + [ + -124.0163501, + 44.9758959 + ], + [ + -124.016424, + 44.9759549 + ], + [ + -124.016454, + 44.9759998 + ], + [ + -124.0164567, + 44.9760037 + ], + [ + -124.0164832, + 44.9760834 + ], + [ + -124.0165084, + 44.9761861 + ], + [ + -124.016494, + 44.9762649 + ], + [ + -124.0164922, + 44.9762747 + ], + [ + -124.0164687, + 44.9763527 + ], + [ + -124.016463, + 44.9763715 + ], + [ + -124.0164367, + 44.9764259 + ], + [ + -124.0164372, + 44.9764796 + ], + [ + -124.0164402, + 44.9764859 + ], + [ + -124.0164865, + 44.976583 + ], + [ + -124.0164713, + 44.9766429 + ], + [ + -124.0164287, + 44.976742 + ], + [ + -124.0163559, + 44.9768324 + ], + [ + -124.0163139, + 44.976941 + ], + [ + -124.0162836, + 44.9770626 + ], + [ + -124.0162299, + 44.9771563 + ], + [ + -124.0162295, + 44.9771578 + ], + [ + -124.0162283, + 44.9771632 + ], + [ + -124.016222, + 44.9771907 + ], + [ + -124.0162022, + 44.9772779 + ], + [ + -124.0160752, + 44.9774652 + ], + [ + -124.0160128, + 44.9775441 + ], + [ + -124.0160183, + 44.977634 + ], + [ + -124.0159979, + 44.9776978 + ], + [ + -124.0159412, + 44.9777858 + ], + [ + -124.0158845, + 44.9778774 + ], + [ + -124.015865, + 44.9779089 + ], + [ + -124.0157759, + 44.9781332 + ], + [ + -124.01577, + 44.9781522 + ], + [ + -124.0157401, + 44.9782484 + ], + [ + -124.015723, + 44.9783034 + ], + [ + -124.0157217, + 44.9783073 + ], + [ + -124.0156798, + 44.9784159 + ], + [ + -124.0156734, + 44.9784271 + ], + [ + -124.0156456, + 44.9784764 + ], + [ + -124.0156118, + 44.9785647 + ], + [ + -124.0155686, + 44.9786742 + ], + [ + -124.0155494, + 44.978702 + ], + [ + -124.0154942, + 44.9787819 + ], + [ + -124.015486, + 44.9788394 + ], + [ + -124.0154734, + 44.9789282 + ], + [ + -124.0154817, + 44.9789629 + ], + [ + -124.015488, + 44.9789891 + ], + [ + -124.0154894, + 44.9789903 + ], + [ + -124.0155279, + 44.9790243 + ], + [ + -124.0155303, + 44.9790625 + ], + [ + -124.0155053, + 44.9790958 + ], + [ + -124.0154924, + 44.9791498 + ], + [ + -124.0155109, + 44.9791876 + ], + [ + -124.0155334, + 44.9792022 + ], + [ + -124.0155331, + 44.9792405 + ], + [ + -124.0155228, + 44.9792926 + ], + [ + -124.0155071, + 44.9793746 + ], + [ + -124.0154667, + 44.9795366 + ], + [ + -124.0154653, + 44.9795422 + ], + [ + -124.0154774, + 44.9796096 + ], + [ + -124.0154938, + 44.9797011 + ], + [ + -124.0154939, + 44.979702 + ], + [ + -124.0155049, + 44.9797628 + ], + [ + -124.0155579, + 44.9799874 + ], + [ + -124.0155477, + 44.9800149 + ], + [ + -124.0155093, + 44.9802618 + ], + [ + -124.0155077, + 44.9802709 + ], + [ + -124.0154919, + 44.9803622 + ], + [ + -124.0154595, + 44.9805484 + ], + [ + -124.0154584, + 44.9805561 + ], + [ + -124.0154169, + 44.9806837 + ], + [ + -124.0153862, + 44.980778 + ], + [ + -124.0153778, + 44.980819 + ], + [ + -124.01535, + 44.9809542 + ], + [ + -124.0153222, + 44.9810894 + ], + [ + -124.0153141, + 44.9811284 + ], + [ + -124.0152938, + 44.9812247 + ], + [ + -124.0152437, + 44.9814614 + ], + [ + -124.0152346, + 44.9814951 + ], + [ + -124.0152106, + 44.9815836 + ], + [ + -124.0151978, + 44.9816304 + ], + [ + -124.0151729, + 44.9817224 + ], + [ + -124.0151448, + 44.9817658 + ], + [ + -124.0151162, + 44.9818098 + ], + [ + -124.015057, + 44.9819013 + ], + [ + -124.0149824, + 44.9820166 + ], + [ + -124.0149564, + 44.9820369 + ], + [ + -124.0147909, + 44.9821666 + ], + [ + -124.0147874, + 44.9821728 + ], + [ + -124.0147686, + 44.9822331 + ], + [ + -124.0147589, + 44.9823081 + ], + [ + -124.0147485, + 44.9823892 + ], + [ + -124.0148231, + 44.9824703 + ], + [ + -124.0148373, + 44.9824857 + ], + [ + -124.0148654, + 44.9826093 + ], + [ + -124.0148468, + 44.9827798 + ], + [ + -124.0148348, + 44.9828027 + ], + [ + -124.0147934, + 44.9828819 + ], + [ + -124.0147845, + 44.9828988 + ], + [ + -124.0147813, + 44.9830223 + ], + [ + -124.0147806, + 44.9830463 + ], + [ + -124.0147801, + 44.9830657 + ], + [ + -124.0147798, + 44.9830778 + ], + [ + -124.0147707, + 44.9831357 + ], + [ + -124.0147632, + 44.9831836 + ], + [ + -124.0147624, + 44.9831888 + ], + [ + -124.0147579, + 44.9832178 + ], + [ + -124.0147536, + 44.9832447 + ], + [ + -124.0147212, + 44.9833895 + ], + [ + -124.0153253, + 44.9833858 + ], + [ + -124.0153245, + 44.983387 + ], + [ + -124.0152805, + 44.9835258 + ], + [ + -124.0153009, + 44.9836236 + ], + [ + -124.0153015, + 44.9836335 + ], + [ + -124.0153093, + 44.9837707 + ], + [ + -124.0153102, + 44.9837874 + ], + [ + -124.0153735, + 44.9838743 + ], + [ + -124.0153918, + 44.9839602 + ], + [ + -124.0153472, + 44.9840059 + ], + [ + -124.0152708, + 44.9840448 + ], + [ + -124.0152394, + 44.9840607 + ], + [ + -124.0151085, + 44.9841311 + ], + [ + -124.0150846, + 44.9841808 + ], + [ + -124.0150642, + 44.9842233 + ], + [ + -124.015074, + 44.9843179 + ], + [ + -124.0150767, + 44.9843437 + ], + [ + -124.0150791, + 44.9844551 + ], + [ + -124.0150805, + 44.9845157 + ], + [ + -124.015019, + 44.9846849 + ], + [ + -124.0149869, + 44.9847288 + ], + [ + -124.0149607, + 44.9848109 + ], + [ + -124.0149722, + 44.9848643 + ], + [ + -124.0149745, + 44.9848659 + ], + [ + -124.0150418, + 44.9849139 + ], + [ + -124.0150359, + 44.9849978 + ], + [ + -124.0150333, + 44.9850034 + ], + [ + -124.0149125, + 44.9852666 + ], + [ + -124.0149136, + 44.985277 + ], + [ + -124.0149281, + 44.9854142 + ], + [ + -124.0149314, + 44.9854458 + ], + [ + -124.0149166, + 44.9855513 + ], + [ + -124.0149113, + 44.9855896 + ], + [ + -124.0148805, + 44.9856882 + ], + [ + -124.0148303, + 44.9858494 + ], + [ + -124.0148124, + 44.9859621 + ], + [ + -124.0147907, + 44.9860991 + ], + [ + -124.0147684, + 44.9862399 + ], + [ + -124.0146819, + 44.9866545 + ], + [ + -124.0146008, + 44.9868921 + ], + [ + -124.0145784, + 44.9869849 + ], + [ + -124.0145618, + 44.9870534 + ], + [ + -124.0145451, + 44.9871229 + ], + [ + -124.0145082, + 44.9872681 + ], + [ + -124.0144854, + 44.9873274 + ], + [ + -124.0144725, + 44.9873609 + ], + [ + -124.0144643, + 44.9873822 + ], + [ + -124.0144204, + 44.9874964 + ], + [ + -124.0143534, + 44.9876013 + ], + [ + -124.0143199, + 44.9876537 + ], + [ + -124.0141271, + 44.9878748 + ], + [ + -124.0141214, + 44.9878813 + ], + [ + -124.0141026, + 44.9880119 + ], + [ + -124.0140973, + 44.988048 + ], + [ + -124.0140803, + 44.988149 + ], + [ + -124.0140746, + 44.9881829 + ], + [ + -124.0141701, + 44.9882492 + ], + [ + -124.014188, + 44.9882865 + ], + [ + -124.0142096, + 44.9883311 + ], + [ + -124.0141997, + 44.9884237 + ], + [ + -124.0141887, + 44.988527 + ], + [ + -124.014188, + 44.9885607 + ], + [ + -124.0141873, + 44.9885914 + ], + [ + -124.014185, + 44.9886978 + ], + [ + -124.0141826, + 44.9888059 + ], + [ + -124.0141882, + 44.9888349 + ], + [ + -124.0141888, + 44.9888376 + ], + [ + -124.0142089, + 44.988942 + ], + [ + -124.0141244, + 44.9890774 + ], + [ + -124.0140681, + 44.9891191 + ], + [ + -124.013995, + 44.9891391 + ], + [ + -124.0137548, + 44.9890546 + ], + [ + -124.0138342, + 44.9891099 + ], + [ + -124.0138586, + 44.9891269 + ], + [ + -124.0138833, + 44.9891442 + ], + [ + -124.0139717, + 44.9892041 + ], + [ + -124.0140793, + 44.9892714 + ], + [ + -124.0141292, + 44.9893164 + ], + [ + -124.0141385, + 44.9893484 + ], + [ + -124.0141473, + 44.9893791 + ], + [ + -124.0141069, + 44.9894484 + ], + [ + -124.014101, + 44.9894835 + ], + [ + -124.0140938, + 44.9895258 + ], + [ + -124.0141273, + 44.9896189 + ], + [ + -124.0141377, + 44.9897275 + ], + [ + -124.0141369, + 44.9897305 + ], + [ + -124.014116, + 44.9898071 + ], + [ + -124.0141083, + 44.989895 + ], + [ + -124.0141025, + 44.9899602 + ], + [ + -124.0140957, + 44.9900321 + ], + [ + -124.0140947, + 44.9900436 + ], + [ + -124.0140854, + 44.9900981 + ], + [ + -124.014025, + 44.9901964 + ], + [ + -124.0140175, + 44.9902087 + ], + [ + -124.0141088, + 44.9903064 + ], + [ + -124.0141357, + 44.9903352 + ], + [ + -124.014122, + 44.9904162 + ], + [ + -124.0141163, + 44.9904499 + ], + [ + -124.0140695, + 44.9905565 + ], + [ + -124.0140154, + 44.9906316 + ], + [ + -124.0139784, + 44.9906827 + ], + [ + -124.0139225, + 44.990771 + ], + [ + -124.0138864, + 44.9908873 + ], + [ + -124.0137139, + 44.9911399 + ], + [ + -124.0135959, + 44.9913158 + ], + [ + -124.013522, + 44.9916018 + ], + [ + -124.0135529, + 44.9918629 + ], + [ + -124.01362, + 44.9919517 + ], + [ + -124.0136811, + 44.9920956 + ], + [ + -124.0136248, + 44.9922275 + ], + [ + -124.0136281, + 44.9923264 + ], + [ + -124.0136215, + 44.9925411 + ], + [ + -124.0135935, + 44.9927319 + ], + [ + -124.0136002, + 44.9928336 + ], + [ + -124.013562, + 44.9929439 + ], + [ + -124.0136003, + 44.9931772 + ], + [ + -124.0136595, + 44.9933228 + ], + [ + -124.0137, + 44.9933908 + ], + [ + -124.0136967, + 44.9935256 + ], + [ + -124.0136008, + 44.9937396 + ], + [ + -124.0134753, + 44.9938736 + ], + [ + -124.0133923, + 44.9938938 + ], + [ + -124.0132671, + 44.9938994 + ], + [ + -124.0131313, + 44.9939922 + ], + [ + -124.013093, + 44.9940954 + ], + [ + -124.0130093, + 44.9941951 + ], + [ + -124.0129545, + 44.994248 + ], + [ + -124.0129344, + 44.9945423 + ], + [ + -124.0129316, + 44.9945835 + ], + [ + -124.0129009, + 44.9950321 + ], + [ + -124.012914, + 44.9950731 + ], + [ + -124.0125345, + 44.9969579 + ], + [ + -124.0123961, + 44.9976455 + ], + [ + -124.0123816, + 44.9977011 + ], + [ + -124.0123506, + 44.9980946 + ], + [ + -124.0121125, + 44.999708 + ], + [ + -124.0120082, + 45.0001406 + ], + [ + -124.0119461, + 45.0003981 + ], + [ + -124.011902, + 45.0005511 + ], + [ + -124.0118995, + 45.0005596 + ], + [ + -124.0118971, + 45.0005681 + ], + [ + -124.0118946, + 45.0005766 + ], + [ + -124.0118922, + 45.0005851 + ], + [ + -124.0118779, + 45.0006345 + ], + [ + -124.0118636, + 45.000684 + ], + [ + -124.0118494, + 45.0007335 + ], + [ + -124.0118351, + 45.0007829 + ], + [ + -124.011831, + 45.0007972 + ], + [ + -124.0118269, + 45.0008115 + ], + [ + -124.0118228, + 45.0008257 + ], + [ + -124.0118186, + 45.00084 + ], + [ + -124.0117976, + 45.000913 + ], + [ + -124.0117765, + 45.000986 + ], + [ + -124.0117743, + 45.0010532 + ], + [ + -124.0117522, + 45.0011299 + ], + [ + -124.0117327, + 45.0011977 + ], + [ + -124.0117179, + 45.0012488 + ], + [ + -124.0116806, + 45.001378 + ], + [ + -124.0116696, + 45.0014163 + ], + [ + -124.0116585, + 45.0014547 + ], + [ + -124.0116536, + 45.0014718 + ], + [ + -124.0116486, + 45.001489 + ], + [ + -124.011647, + 45.0014948 + ], + [ + -124.0116373, + 45.0015284 + ], + [ + -124.0113365, + 45.0015301 + ], + [ + -124.0113389, + 45.0015356 + ], + [ + -124.0113514, + 45.0015642 + ], + [ + -124.0113552, + 45.001625 + ], + [ + -124.0113491, + 45.0016663 + ], + [ + -124.0113252, + 45.0017311 + ], + [ + -124.0112872, + 45.0017779 + ], + [ + -124.0112595, + 45.0018154 + ], + [ + -124.0112404, + 45.001854 + ], + [ + -124.0112246, + 45.0018774 + ], + [ + -124.0112113, + 45.0019052 + ], + [ + -124.0112146, + 45.0019234 + ], + [ + -124.011224, + 45.0019368 + ], + [ + -124.0112359, + 45.0019562 + ], + [ + -124.0112419, + 45.001985 + ], + [ + -124.0112366, + 45.0020034 + ], + [ + -124.0112166, + 45.0020269 + ], + [ + -124.0111938, + 45.0020398 + ], + [ + -124.0111692, + 45.0020588 + ], + [ + -124.0111592, + 45.0020713 + ], + [ + -124.0111584, + 45.0020927 + ], + [ + -124.0111638, + 45.0021108 + ], + [ + -124.011182, + 45.0021285 + ], + [ + -124.0111962, + 45.0021494 + ], + [ + -124.0111997, + 45.0021721 + ], + [ + -124.0111973, + 45.0022027 + ], + [ + -124.0111892, + 45.0022456 + ], + [ + -124.01117, + 45.0022827 + ], + [ + -124.0111444, + 45.0023201 + ], + [ + -124.0111187, + 45.0023559 + ], + [ + -124.0110972, + 45.0023901 + ], + [ + -124.0110863, + 45.002424 + ], + [ + -124.01107, + 45.0024732 + ], + [ + -124.0110635, + 45.0025069 + ], + [ + -124.0110594, + 45.0025451 + ], + [ + -124.0110482, + 45.0025729 + ], + [ + -124.0110367, + 45.0025946 + ], + [ + -124.0110173, + 45.0026287 + ], + [ + -124.011009, + 45.0026686 + ], + [ + -124.0110015, + 45.0027206 + ], + [ + -124.0110059, + 45.0027585 + ], + [ + -124.011014, + 45.0027842 + ], + [ + -124.011031, + 45.0028172 + ], + [ + -124.0110346, + 45.0028414 + ], + [ + -124.0110276, + 45.002866 + ], + [ + -124.0110272, + 45.0028669 + ], + [ + -124.0110106, + 45.0029046 + ], + [ + -124.0109991, + 45.0029278 + ], + [ + -124.0109937, + 45.0029448 + ], + [ + -124.0109756, + 45.0029636 + ], + [ + -124.0109554, + 45.0029856 + ], + [ + -124.0109437, + 45.0030042 + ], + [ + -124.0109383, + 45.0030211 + ], + [ + -124.0109375, + 45.003044 + ], + [ + -124.0109413, + 45.0030698 + ], + [ + -124.0109326, + 45.0031036 + ], + [ + -124.0109129, + 45.0031316 + ], + [ + -124.0108624, + 45.0031834 + ], + [ + -124.0108402, + 45.003207 + ], + [ + -124.010823, + 45.0032425 + ], + [ + -124.0108057, + 45.003275 + ], + [ + -124.0108014, + 45.0033102 + ], + [ + -124.0108018, + 45.0033513 + ], + [ + -124.0108143, + 45.0033799 + ], + [ + -124.0108424, + 45.0034186 + ], + [ + -124.0108593, + 45.0034486 + ], + [ + -124.0108746, + 45.0034877 + ], + [ + -124.0108829, + 45.0035195 + ], + [ + -124.0108831, + 45.0035575 + ], + [ + -124.0108725, + 45.0035944 + ], + [ + -124.0108464, + 45.0036242 + ], + [ + -124.0108142, + 45.0036587 + ], + [ + -124.0107865, + 45.0036976 + ], + [ + -124.010775, + 45.0037208 + ], + [ + -124.010774, + 45.0037391 + ], + [ + -124.0107777, + 45.0037649 + ], + [ + -124.0107749, + 45.0037879 + ], + [ + -124.0107678, + 45.0038124 + ], + [ + -124.0107463, + 45.0038466 + ], + [ + -124.0107354, + 45.0038805 + ], + [ + -124.0107294, + 45.0039218 + ], + [ + -124.0107314, + 45.0039552 + ], + [ + -124.0107419, + 45.0039854 + ], + [ + -124.0107481, + 45.0040172 + ], + [ + -124.0107571, + 45.004058 + ], + [ + -124.0107741, + 45.004091 + ], + [ + -124.0107906, + 45.0041149 + ], + [ + -124.0108016, + 45.0041542 + ], + [ + -124.0108138, + 45.0042132 + ], + [ + -124.010808, + 45.0042591 + ], + [ + -124.010791, + 45.0042962 + ], + [ + -124.0107653, + 45.004332 + ], + [ + -124.0107212, + 45.0043836 + ], + [ + -124.0106977, + 45.0044209 + ], + [ + -124.0106834, + 45.0044671 + ], + [ + -124.0106814, + 45.0045052 + ], + [ + -124.0106963, + 45.0045383 + ], + [ + -124.0107289, + 45.0045799 + ], + [ + -124.0107599, + 45.0046292 + ], + [ + -124.0107747, + 45.0046608 + ], + [ + -124.0107746, + 45.0046943 + ], + [ + -124.0107655, + 45.004722 + ], + [ + -124.0107518, + 45.0047437 + ], + [ + -124.0107353, + 45.0047899 + ], + [ + -124.0107205, + 45.0048285 + ], + [ + -124.0107194, + 45.0048375 + ], + [ + -124.0107162, + 45.0048621 + ], + [ + -124.0107205, + 45.0048986 + ], + [ + -124.0107421, + 45.0049345 + ], + [ + -124.0107658, + 45.0049718 + ], + [ + -124.0107776, + 45.0050082 + ], + [ + -124.0107807, + 45.0050174 + ], + [ + -124.0107882, + 45.005039 + ], + [ + -124.0107897, + 45.0050638 + ], + [ + -124.010788, + 45.0050866 + ], + [ + -124.0107861, + 45.005112 + ], + [ + -124.0107797, + 45.0051511 + ], + [ + -124.0107643, + 45.0051842 + ], + [ + -124.0107588, + 45.0052008 + ], + [ + -124.010755, + 45.0052124 + ], + [ + -124.0107459, + 45.0052422 + ], + [ + -124.0107432, + 45.0052687 + ], + [ + -124.0107493, + 45.005298 + ], + [ + -124.0107621, + 45.0053286 + ], + [ + -124.0107701, + 45.0053502 + ], + [ + -124.0107689, + 45.0053673 + ], + [ + -124.010766, + 45.0053907 + ], + [ + -124.0107567, + 45.0054173 + ], + [ + -124.010739, + 45.0054505 + ], + [ + -124.010733, + 45.0054666 + ], + [ + -124.0107296, + 45.0054756 + ], + [ + -124.01072, + 45.0054977 + ], + [ + -124.0107124, + 45.0055166 + ], + [ + -124.0107132, + 45.0055305 + ], + [ + -124.0107189, + 45.0055521 + ], + [ + -124.0107423, + 45.0056119 + ], + [ + -124.0107469, + 45.00563 + ], + [ + -124.010751, + 45.0056458 + ], + [ + -124.0107548, + 45.0056721 + ], + [ + -124.0107553, + 45.0057171 + ], + [ + -124.0107544, + 45.0057731 + ], + [ + -124.0107495, + 45.0058012 + ], + [ + -124.0107341, + 45.0058358 + ], + [ + -124.0107311, + 45.0058577 + ], + [ + -124.0107308, + 45.0058784 + ], + [ + -124.0107306, + 45.0058856 + ], + [ + -124.0107272, + 45.005937 + ], + [ + -124.0107222, + 45.005962 + ], + [ + -124.0107046, + 45.0059967 + ], + [ + -124.0106862, + 45.0060168 + ], + [ + -124.0106738, + 45.0060303 + ], + [ + -124.0106553, + 45.0060495 + ], + [ + -124.0106453, + 45.0060653 + ], + [ + -124.0106406, + 45.006095 + ], + [ + -124.0106379, + 45.006123 + ], + [ + -124.0106447, + 45.0061551 + ], + [ + -124.0106503, + 45.0061816 + ], + [ + -124.0106561, + 45.0062063 + ], + [ + -124.0106579, + 45.0062342 + ], + [ + -124.0106576, + 45.0062653 + ], + [ + -124.0106493, + 45.0062922 + ], + [ + -124.0106485, + 45.0062951 + ], + [ + -124.010646, + 45.0063262 + ], + [ + -124.0106416, + 45.006362 + ], + [ + -124.0106504, + 45.0063975 + ], + [ + -124.0106433, + 45.0064257 + ], + [ + -124.0106413, + 45.0064296 + ], + [ + -124.0106296, + 45.0064525 + ], + [ + -124.0106246, + 45.0064775 + ], + [ + -124.0106239, + 45.0065008 + ], + [ + -124.0106274, + 45.0065225 + ], + [ + -124.0106374, + 45.0065439 + ], + [ + -124.0106389, + 45.0065669 + ], + [ + -124.0106391, + 45.0065702 + ], + [ + -124.0106318, + 45.0065953 + ], + [ + -124.0106139, + 45.0066238 + ], + [ + -124.010611, + 45.0066488 + ], + [ + -124.0106102, + 45.0066705 + ], + [ + -124.0106117, + 45.0066953 + ], + [ + -124.0106118, + 45.0067326 + ], + [ + -124.0106176, + 45.0067557 + ], + [ + -124.0106321, + 45.0067786 + ], + [ + -124.0106403, + 45.0068047 + ], + [ + -124.0106395, + 45.006828 + ], + [ + -124.0106358, + 45.0068416 + ], + [ + -124.0106288, + 45.0068672 + ], + [ + -124.0105969, + 45.0069179 + ], + [ + -124.0105745, + 45.0069465 + ], + [ + -124.0105528, + 45.006981 + ], + [ + -124.0105466, + 45.0069909 + ], + [ + -124.0105269, + 45.0070256 + ], + [ + -124.0105221, + 45.0070553 + ], + [ + -124.0105242, + 45.0070894 + ], + [ + -124.010533, + 45.0071187 + ], + [ + -124.0105352, + 45.0071263 + ], + [ + -124.0105528, + 45.0071631 + ], + [ + -124.0105427, + 45.0072131 + ], + [ + -124.0105396, + 45.0072353 + ], + [ + -124.0105382, + 45.0072458 + ], + [ + -124.0105376, + 45.0072559 + ], + [ + -124.0105362, + 45.0072847 + ], + [ + -124.0105379, + 45.0073126 + ], + [ + -124.0105305, + 45.0073346 + ], + [ + -124.0105192, + 45.0073644 + ], + [ + -124.0104907, + 45.0073995 + ], + [ + -124.0104642, + 45.0074314 + ], + [ + -124.0104349, + 45.0074593 + ], + [ + -124.0104104, + 45.0074827 + ], + [ + -124.0103898, + 45.0075002 + ], + [ + -124.0103688, + 45.0075182 + ], + [ + -124.0103271, + 45.0075521 + ], + [ + -124.0102905, + 45.0075982 + ], + [ + -124.0102345, + 45.0076481 + ], + [ + -124.0101947, + 45.0076788 + ], + [ + -124.0101751, + 45.0077152 + ], + [ + -124.0101582, + 45.0077607 + ], + [ + -124.0101553, + 45.0078214 + ], + [ + -124.0101471, + 45.0078651 + ], + [ + -124.0101354, + 45.0079245 + ], + [ + -124.0101318, + 45.0079728 + ], + [ + -124.010122, + 45.0080274 + ], + [ + -124.0101141, + 45.0080774 + ], + [ + -124.0100931, + 45.0081277 + ], + [ + -124.0100795, + 45.0081918 + ], + [ + -124.0100654, + 45.0082466 + ], + [ + -124.010055, + 45.008292 + ], + [ + -124.0100608, + 45.0083508 + ], + [ + -124.010061, + 45.0083896 + ], + [ + -124.0100584, + 45.0084107 + ], + [ + -124.0100528, + 45.0084282 + ], + [ + -124.0100371, + 45.0084939 + ], + [ + -124.0100204, + 45.0085426 + ], + [ + -124.0100174, + 45.0085517 + ], + [ + -124.0100038, + 45.0085943 + ], + [ + -124.0099827, + 45.0086431 + ], + [ + -124.0099532, + 45.0086885 + ], + [ + -124.0099507, + 45.0086922 + ], + [ + -124.0099097, + 45.008737 + ], + [ + -124.0098764, + 45.008766 + ], + [ + -124.0098097, + 45.0087851 + ], + [ + -124.0097588, + 45.0087993 + ], + [ + -124.0097473, + 45.0088026 + ], + [ + -124.0097176, + 45.0088175 + ], + [ + -124.0096925, + 45.0088369 + ], + [ + -124.0096878, + 45.0088553 + ], + [ + -124.0097064, + 45.0088803 + ], + [ + -124.0097305, + 45.0089011 + ], + [ + -124.0097437, + 45.0089112 + ], + [ + -124.0097544, + 45.0089192 + ], + [ + -124.0097674, + 45.0089458 + ], + [ + -124.0097689, + 45.0089713 + ], + [ + -124.0097646, + 45.0090253 + ], + [ + -124.0097606, + 45.0090487 + ], + [ + -124.009759, + 45.0090578 + ], + [ + -124.0097515, + 45.009089 + ], + [ + -124.0097555, + 45.0091239 + ], + [ + -124.0097627, + 45.0091492 + ], + [ + -124.0097699, + 45.0091732 + ], + [ + -124.0097787, + 45.0091863 + ], + [ + -124.0097929, + 45.0092076 + ], + [ + -124.0098042, + 45.0092368 + ], + [ + -124.0098102, + 45.009273 + ], + [ + -124.009807, + 45.0093135 + ], + [ + -124.0098039, + 45.0093239 + ], + [ + -124.0097976, + 45.0093461 + ], + [ + -124.0097786, + 45.0093777 + ], + [ + -124.0097591, + 45.0093998 + ], + [ + -124.0097492, + 45.0094243 + ], + [ + -124.0097499, + 45.0094364 + ], + [ + -124.0097507, + 45.0094485 + ], + [ + -124.0097563, + 45.0094612 + ], + [ + -124.0097595, + 45.0094685 + ], + [ + -124.0097659, + 45.0094804 + ], + [ + -124.0097882, + 45.0095026 + ], + [ + -124.0098061, + 45.0095168 + ], + [ + -124.0098251, + 45.0095486 + ], + [ + -124.0098467, + 45.009591 + ], + [ + -124.0098487, + 45.0095991 + ], + [ + -124.0098543, + 45.0096217 + ], + [ + -124.0098483, + 45.0096475 + ], + [ + -124.0098349, + 45.0096775 + ], + [ + -124.009812, + 45.0097065 + ], + [ + -124.0097923, + 45.009726 + ], + [ + -124.0097774, + 45.0097362 + ], + [ + -124.0097695, + 45.0097417 + ], + [ + -124.0097595, + 45.0097485 + ], + [ + -124.0097193, + 45.0097727 + ], + [ + -124.0096665, + 45.0098106 + ], + [ + -124.0096384, + 45.0098465 + ], + [ + -124.0096206, + 45.0098729 + ], + [ + -124.0096105, + 45.0098878 + ], + [ + -124.0096132, + 45.0099308 + ], + [ + -124.009631, + 45.0099747 + ], + [ + -124.0096559, + 45.0100089 + ], + [ + -124.0096567, + 45.0100106 + ], + [ + -124.0096734, + 45.0100474 + ], + [ + -124.0096769, + 45.0100729 + ], + [ + -124.0096663, + 45.0101162 + ], + [ + -124.0096566, + 45.0101481 + ], + [ + -124.0096489, + 45.0101733 + ], + [ + -124.0096294, + 45.0102265 + ], + [ + -124.0096116, + 45.0102769 + ], + [ + -124.0096075, + 45.0102848 + ], + [ + -124.0095811, + 45.0103371 + ], + [ + -124.0095468, + 45.0103974 + ], + [ + -124.0095358, + 45.0104216 + ], + [ + -124.0095301, + 45.0104342 + ], + [ + -124.0095223, + 45.0104614 + ], + [ + -124.0095238, + 45.010487 + ], + [ + -124.0095407, + 45.0105147 + ], + [ + -124.0095495, + 45.0105346 + ], + [ + -124.0095546, + 45.0105588 + ], + [ + -124.0095549, + 45.0105601 + ], + [ + -124.0095582, + 45.0105842 + ], + [ + -124.0095499, + 45.0106033 + ], + [ + -124.0095264, + 45.0106229 + ], + [ + -124.0095162, + 45.010642 + ], + [ + -124.0095085, + 45.0106706 + ], + [ + -124.0095112, + 45.0106956 + ], + [ + -124.0095128, + 45.0107095 + ], + [ + -124.009524, + 45.0107374 + ], + [ + -124.0095472, + 45.0107757 + ], + [ + -124.009566, + 45.0108048 + ], + [ + -124.0095841, + 45.0108331 + ], + [ + -124.009587, + 45.0108378 + ], + [ + -124.0095967, + 45.0108712 + ], + [ + -124.0095893, + 45.0109064 + ], + [ + -124.0095758, + 45.0109337 + ], + [ + -124.0095415, + 45.0109617 + ], + [ + -124.0095276, + 45.0109699 + ], + [ + -124.0094957, + 45.0109887 + ], + [ + -124.0094547, + 45.0110008 + ], + [ + -124.0094025, + 45.0110172 + ], + [ + -124.0093617, + 45.0110333 + ], + [ + -124.0093247, + 45.0110479 + ], + [ + -124.0093069, + 45.0110673 + ], + [ + -124.0093028, + 45.0110943 + ], + [ + -124.0093067, + 45.0111058 + ], + [ + -124.0093121, + 45.0111223 + ], + [ + -124.0093345, + 45.0111472 + ], + [ + -124.0093593, + 45.0111801 + ], + [ + -124.0093741, + 45.0112039 + ], + [ + -124.0093798, + 45.0112347 + ], + [ + -124.0093796, + 45.0112433 + ], + [ + -124.0093788, + 45.0112818 + ], + [ + -124.0093737, + 45.011321 + ], + [ + -124.0093531, + 45.011358 + ], + [ + -124.0093335, + 45.0113788 + ], + [ + -124.0093319, + 45.0113802 + ], + [ + -124.0092956, + 45.0114096 + ], + [ + -124.0092646, + 45.0114308 + ], + [ + -124.0092521, + 45.0114446 + ], + [ + -124.0092402, + 45.0114665 + ], + [ + -124.0092318, + 45.0114843 + ], + [ + -124.0092369, + 45.0115057 + ], + [ + -124.0092402, + 45.0115168 + ], + [ + -124.0092441, + 45.0115297 + ], + [ + -124.0092556, + 45.011563 + ], + [ + -124.0092563, + 45.0116061 + ], + [ + -124.0092568, + 45.0116451 + ], + [ + -124.0092545, + 45.0116539 + ], + [ + -124.0092476, + 45.0116804 + ], + [ + -124.0092315, + 45.0117087 + ], + [ + -124.0092305, + 45.0117106 + ], + [ + -124.0092094, + 45.0117381 + ], + [ + -124.0091977, + 45.0117641 + ], + [ + -124.0091897, + 45.0117886 + ], + [ + -124.0091876, + 45.0118169 + ], + [ + -124.0091875, + 45.0118181 + ], + [ + -124.0091841, + 45.011852 + ], + [ + -124.0091827, + 45.0118925 + ], + [ + -124.0091691, + 45.0119277 + ], + [ + -124.009168, + 45.0119306 + ], + [ + -124.0091579, + 45.0119821 + ], + [ + -124.0091527, + 45.0120213 + ], + [ + -124.0091586, + 45.0120561 + ], + [ + -124.0091599, + 45.0120647 + ], + [ + -124.0091648, + 45.0120963 + ], + [ + -124.0091598, + 45.0121382 + ], + [ + -124.0091431, + 45.0121751 + ], + [ + -124.0091276, + 45.0122016 + ], + [ + -124.009119, + 45.0122162 + ], + [ + -124.0091003, + 45.0122573 + ], + [ + -124.0090949, + 45.0122858 + ], + [ + -124.0090926, + 45.0123173 + ], + [ + -124.0090926, + 45.0123248 + ], + [ + -124.0090927, + 45.0123386 + ], + [ + -124.0090928, + 45.0123437 + ], + [ + -124.0090976, + 45.012376 + ], + [ + -124.0091074, + 45.0124193 + ], + [ + -124.009112, + 45.0124772 + ], + [ + -124.0091129, + 45.0124875 + ], + [ + -124.0091116, + 45.0125403 + ], + [ + -124.0091122, + 45.0125991 + ], + [ + -124.0091101, + 45.0126143 + ], + [ + -124.0091061, + 45.0126428 + ], + [ + -124.0090977, + 45.0126704 + ], + [ + -124.0090804, + 45.0126922 + ], + [ + -124.0090676, + 45.012719 + ], + [ + -124.0090605, + 45.0127445 + ], + [ + -124.0090609, + 45.0127511 + ], + [ + -124.0090619, + 45.0127678 + ], + [ + -124.0090726, + 45.0127796 + ], + [ + -124.0090898, + 45.0128055 + ], + [ + -124.0091076, + 45.0128425 + ], + [ + -124.0091177, + 45.0128686 + ], + [ + -124.0091189, + 45.0128886 + ], + [ + -124.0091201, + 45.0129101 + ], + [ + -124.0091165, + 45.0129456 + ], + [ + -124.0091002, + 45.0129857 + ], + [ + -124.0090859, + 45.0130094 + ], + [ + -124.009077, + 45.0130254 + ], + [ + -124.0090716, + 45.0130351 + ], + [ + -124.0090521, + 45.0130682 + ], + [ + -124.0090423, + 45.0130968 + ], + [ + -124.0090387, + 45.0131334 + ], + [ + -124.009039, + 45.0131622 + ], + [ + -124.009039, + 45.0131638 + ], + [ + -124.0090372, + 45.0132065 + ], + [ + -124.0090296, + 45.0132482 + ], + [ + -124.0090249, + 45.01329 + ], + [ + -124.0090257, + 45.0132992 + ], + [ + -124.0090291, + 45.0133375 + ], + [ + -124.0090331, + 45.013382 + ], + [ + -124.0090372, + 45.0134031 + ], + [ + -124.0090398, + 45.013409 + ], + [ + -124.009047, + 45.0134252 + ], + [ + -124.0090525, + 45.0134365 + ], + [ + -124.00906, + 45.0134521 + ], + [ + -124.0090746, + 45.0134831 + ], + [ + -124.0090775, + 45.0135074 + ], + [ + -124.0090789, + 45.0135317 + ], + [ + -124.0090731, + 45.0135552 + ], + [ + -124.0090616, + 45.0135788 + ], + [ + -124.0090455, + 45.0135965 + ], + [ + -124.0090324, + 45.0136172 + ], + [ + -124.0090248, + 45.0136346 + ], + [ + -124.0090262, + 45.0136579 + ], + [ + -124.0090329, + 45.013676 + ], + [ + -124.0090481, + 45.0136917 + ], + [ + -124.0090679, + 45.0137095 + ], + [ + -124.0090722, + 45.0137133 + ], + [ + -124.0090969, + 45.0137441 + ], + [ + -124.0091094, + 45.013763 + ], + [ + -124.0091134, + 45.0137821 + ], + [ + -124.0091157, + 45.0137983 + ], + [ + -124.0091188, + 45.0138266 + ], + [ + -124.0091123, + 45.0138426 + ], + [ + -124.0091111, + 45.0138455 + ], + [ + -124.0091078, + 45.0138535 + ], + [ + -124.0091063, + 45.0138573 + ], + [ + -124.0090907, + 45.0138852 + ], + [ + -124.0090736, + 45.01391 + ], + [ + -124.0090592, + 45.0139337 + ], + [ + -124.0090375, + 45.0139536 + ], + [ + -124.0090242, + 45.0139702 + ], + [ + -124.0090198, + 45.0139927 + ], + [ + -124.0090264, + 45.0140087 + ], + [ + -124.0090424, + 45.0140386 + ], + [ + -124.0090595, + 45.0140614 + ], + [ + -124.0090733, + 45.0140773 + ], + [ + -124.0091012, + 45.0140917 + ], + [ + -124.0091464, + 45.0141066 + ], + [ + -124.0091795, + 45.0141159 + ], + [ + -124.0091987, + 45.0141213 + ], + [ + -124.0092351, + 45.0141324 + ], + [ + -124.0092542, + 45.014142 + ], + [ + -124.0092718, + 45.0141749 + ], + [ + -124.0092819, + 45.0142263 + ], + [ + -124.0092811, + 45.0142536 + ], + [ + -124.0092805, + 45.014275 + ], + [ + -124.0092706, + 45.0143027 + ], + [ + -124.0092702, + 45.0143453 + ], + [ + -124.0092651, + 45.0143799 + ], + [ + -124.0092589, + 45.0144216 + ], + [ + -124.0092437, + 45.0144591 + ], + [ + -124.0092427, + 45.0144616 + ], + [ + -124.0092303, + 45.0144954 + ], + [ + -124.0092269, + 45.0145097 + ], + [ + -124.0092236, + 45.0145271 + ], + [ + -124.0092282, + 45.0145584 + ], + [ + -124.0092355, + 45.0145855 + ], + [ + -124.0092356, + 45.0146109 + ], + [ + -124.0092346, + 45.0146433 + ], + [ + -124.0092308, + 45.0146648 + ], + [ + -124.0092271, + 45.0146861 + ], + [ + -124.009216, + 45.0147179 + ], + [ + -124.0092149, + 45.0147473 + ], + [ + -124.0092151, + 45.0147566 + ], + [ + -124.0092161, + 45.0147939 + ], + [ + -124.0092134, + 45.0148214 + ], + [ + -124.0092107, + 45.0148488 + ], + [ + -124.0092158, + 45.0148862 + ], + [ + -124.0092165, + 45.0148937 + ], + [ + -124.0092189, + 45.0149165 + ], + [ + -124.0092285, + 45.0149588 + ], + [ + -124.0092321, + 45.0150035 + ], + [ + -124.0092339, + 45.0150266 + ], + [ + -124.0092322, + 45.0150712 + ], + [ + -124.0092307, + 45.0151199 + ], + [ + -124.0092319, + 45.0151407 + ], + [ + -124.0092333, + 45.0151655 + ], + [ + -124.0092379, + 45.0152201 + ], + [ + -124.009242, + 45.0152666 + ], + [ + -124.0092413, + 45.0152779 + ], + [ + -124.0092398, + 45.0153032 + ], + [ + -124.0092369, + 45.0153266 + ], + [ + -124.0092398, + 45.0153518 + ], + [ + -124.0092441, + 45.015377 + ], + [ + -124.0092485, + 45.0154033 + ], + [ + -124.0092492, + 45.0154151 + ], + [ + -124.0092508, + 45.0154437 + ], + [ + -124.0092479, + 45.0154915 + ], + [ + -124.0092469, + 45.0155483 + ], + [ + -124.0092466, + 45.0155522 + ], + [ + -124.0092428, + 45.0156011 + ], + [ + -124.0092287, + 45.0156542 + ], + [ + -124.0092173, + 45.0156892 + ], + [ + -124.0092153, + 45.0156952 + ], + [ + -124.0091919, + 45.0157354 + ], + [ + -124.0091806, + 45.0157611 + ], + [ + -124.0091659, + 45.0157795 + ], + [ + -124.009144, + 45.0157899 + ], + [ + -124.0091203, + 45.015798 + ], + [ + -124.0090962, + 45.0157999 + ], + [ + -124.0090651, + 45.015802 + ], + [ + -124.0090394, + 45.0158052 + ], + [ + -124.0090121, + 45.0158122 + ], + [ + -124.0089937, + 45.0158225 + ], + [ + -124.0089928, + 45.0158251 + ], + [ + -124.0089907, + 45.0158312 + ], + [ + -124.0089946, + 45.0158397 + ], + [ + -124.0090124, + 45.0158478 + ], + [ + -124.0090441, + 45.0158567 + ], + [ + -124.0090831, + 45.0158739 + ], + [ + -124.0091244, + 45.0158997 + ], + [ + -124.0091499, + 45.0159223 + ], + [ + -124.0091755, + 45.0159461 + ], + [ + -124.0091816, + 45.0159519 + ], + [ + -124.0091938, + 45.0159634 + ], + [ + -124.0091957, + 45.0159651 + ], + [ + -124.0092326, + 45.0160046 + ], + [ + -124.0092649, + 45.0160552 + ], + [ + -124.0092764, + 45.0161023 + ], + [ + -124.0092815, + 45.0161657 + ], + [ + -124.0092823, + 45.0162368 + ], + [ + -124.009282, + 45.0162387 + ], + [ + -124.0092764, + 45.0162849 + ], + [ + -124.0092735, + 45.016323 + ], + [ + -124.0092655, + 45.0163637 + ], + [ + -124.0092609, + 45.0163757 + ], + [ + -124.0092475, + 45.0164109 + ], + [ + -124.0092428, + 45.0164479 + ], + [ + -124.0092425, + 45.0164724 + ], + [ + -124.0092457, + 45.0164969 + ], + [ + -124.0092503, + 45.0165128 + ], + [ + -124.0092565, + 45.0165346 + ], + [ + -124.0092622, + 45.0165713 + ], + [ + -124.0092629, + 45.0165835 + ], + [ + -124.0092632, + 45.0166179 + ], + [ + -124.0092613, + 45.0166449 + ], + [ + -124.0092601, + 45.01665 + ], + [ + -124.0092558, + 45.0166684 + ], + [ + -124.0092359, + 45.0167132 + ], + [ + -124.0092176, + 45.0167554 + ], + [ + -124.0092116, + 45.0167869 + ], + [ + -124.009211, + 45.01679 + ], + [ + -124.009199, + 45.016821 + ], + [ + -124.0091925, + 45.0168568 + ], + [ + -124.0091941, + 45.016885 + ], + [ + -124.0091876, + 45.0169208 + ], + [ + -124.0091875, + 45.016924 + ], + [ + -124.009187, + 45.0169405 + ], + [ + -124.0091848, + 45.0169614 + ], + [ + -124.0091782, + 45.0169972 + ], + [ + -124.0091795, + 45.017018 + ], + [ + -124.0091811, + 45.0170462 + ], + [ + -124.0091774, + 45.0170611 + ], + [ + -124.0091755, + 45.0170684 + ], + [ + -124.0091749, + 45.0170881 + ], + [ + -124.0091745, + 45.0171102 + ], + [ + -124.0091703, + 45.0171275 + ], + [ + -124.0091665, + 45.0171509 + ], + [ + -124.0091642, + 45.0171694 + ], + [ + -124.0091651, + 45.0171853 + ], + [ + -124.0091671, + 45.017198 + ], + [ + -124.0091678, + 45.0172024 + ], + [ + -124.0091726, + 45.0172244 + ], + [ + -124.0091781, + 45.0172586 + ], + [ + -124.0091767, + 45.0172942 + ], + [ + -124.0091717, + 45.0173275 + ], + [ + -124.0091655, + 45.0173391 + ], + [ + -124.0091645, + 45.017341 + ], + [ + -124.0091624, + 45.017345 + ], + [ + -124.0091635, + 45.0173646 + ], + [ + -124.009161, + 45.0173794 + ], + [ + -124.0091533, + 45.0173956 + ], + [ + -124.0091394, + 45.0174254 + ], + [ + -124.0091335, + 45.0174428 + ], + [ + -124.0091278, + 45.0174626 + ], + [ + -124.0091269, + 45.0174773 + ], + [ + -124.0091247, + 45.0174965 + ], + [ + -124.0091246, + 45.017497 + ], + [ + -124.0091215, + 45.0175327 + ], + [ + -124.0091226, + 45.0175793 + ], + [ + -124.0091262, + 45.0176124 + ], + [ + -124.0091209, + 45.0176395 + ], + [ + -124.0091156, + 45.0176667 + ], + [ + -124.0091217, + 45.0176825 + ], + [ + -124.0091296, + 45.0176994 + ], + [ + -124.009129, + 45.0177473 + ], + [ + -124.0091295, + 45.017774 + ], + [ + -124.0091299, + 45.0177927 + ], + [ + -124.0091377, + 45.0178366 + ], + [ + -124.0091447, + 45.0178671 + ], + [ + -124.0091446, + 45.0178941 + ], + [ + -124.0091396, + 45.0179274 + ], + [ + -124.0091346, + 45.0179594 + ], + [ + -124.0091299, + 45.0179797 + ], + [ + -124.0091283, + 45.0179866 + ], + [ + -124.0091249, + 45.0180015 + ], + [ + -124.0091196, + 45.0180286 + ], + [ + -124.009103, + 45.0180696 + ], + [ + -124.0090955, + 45.0180895 + ], + [ + -124.0090915, + 45.0181167 + ], + [ + -124.0090893, + 45.0181314 + ], + [ + -124.0090924, + 45.0181546 + ], + [ + -124.0090894, + 45.0181915 + ], + [ + -124.0090988, + 45.018233 + ], + [ + -124.009102, + 45.0182539 + ], + [ + -124.0091043, + 45.0182684 + ], + [ + -124.0091105, + 45.0183149 + ], + [ + -124.0091122, + 45.018343 + ], + [ + -124.0091038, + 45.0183764 + ], + [ + -124.0090998, + 45.018391 + ], + [ + -124.0090981, + 45.0183975 + ], + [ + -124.0090887, + 45.0184149 + ], + [ + -124.0090745, + 45.0184374 + ], + [ + -124.0090707, + 45.0184621 + ], + [ + -124.0090653, + 45.018488 + ], + [ + -124.0090564, + 45.0185128 + ], + [ + -124.0090565, + 45.018528 + ], + [ + -124.0090566, + 45.0185447 + ], + [ + -124.0090593, + 45.0185913 + ], + [ + -124.0090653, + 45.0186341 + ], + [ + -124.0090737, + 45.0186652 + ], + [ + -124.0090741, + 45.0186669 + ], + [ + -124.0090893, + 45.0186886 + ], + [ + -124.0091003, + 45.0187288 + ], + [ + -124.0091002, + 45.018757 + ], + [ + -124.0091004, + 45.0187901 + ], + [ + -124.0090961, + 45.0188024 + ], + [ + -124.009093, + 45.0188112 + ], + [ + -124.0090845, + 45.0188434 + ], + [ + -124.0090853, + 45.0188568 + ], + [ + -124.0090922, + 45.0188861 + ], + [ + -124.0090863, + 45.0189035 + ], + [ + -124.0090804, + 45.0189196 + ], + [ + -124.0090728, + 45.0189382 + ], + [ + -124.0090725, + 45.0189395 + ], + [ + -124.0090687, + 45.0189567 + ], + [ + -124.0090692, + 45.0189936 + ], + [ + -124.0090815, + 45.0190263 + ], + [ + -124.0090902, + 45.0190493 + ], + [ + -124.0090958, + 45.0190639 + ], + [ + -124.0091137, + 45.0191027 + ], + [ + -124.0091261, + 45.0191379 + ], + [ + -124.0091326, + 45.0191593 + ], + [ + -124.009139, + 45.0191805 + ], + [ + -124.0091461, + 45.0192122 + ], + [ + -124.0091497, + 45.0192452 + ], + [ + -124.0091448, + 45.0192797 + ], + [ + -124.009135, + 45.0192964 + ], + [ + -124.0091338, + 45.0192985 + ], + [ + -124.0091207, + 45.0193111 + ], + [ + -124.0091079, + 45.0193275 + ], + [ + -124.009107, + 45.0193422 + ], + [ + -124.0091096, + 45.0193569 + ], + [ + -124.0091208, + 45.01937 + ], + [ + -124.0091389, + 45.0193842 + ], + [ + -124.0091517, + 45.0193961 + ], + [ + -124.0091777, + 45.019426 + ], + [ + -124.0091791, + 45.0194338 + ], + [ + -124.0091829, + 45.0194553 + ], + [ + -124.0091906, + 45.0194993 + ], + [ + -124.0091936, + 45.0195495 + ], + [ + -124.0091949, + 45.019571 + ], + [ + -124.0091952, + 45.0195765 + ], + [ + -124.0091983, + 45.0195997 + ], + [ + -124.0092067, + 45.0196259 + ], + [ + -124.0092089, + 45.0196325 + ], + [ + -124.0092105, + 45.0196607 + ], + [ + -124.0092086, + 45.0196865 + ], + [ + -124.0091995, + 45.0197089 + ], + [ + -124.0091859, + 45.0197412 + ], + [ + -124.0091782, + 45.0197586 + ], + [ + -124.0091795, + 45.0197807 + ], + [ + -124.0091947, + 45.0198023 + ], + [ + -124.0092062, + 45.0198228 + ], + [ + -124.0092223, + 45.0198604 + ], + [ + -124.0092252, + 45.0198812 + ], + [ + -124.0092353, + 45.01993 + ], + [ + -124.0092371, + 45.0199383 + ], + [ + -124.0092512, + 45.0200067 + ], + [ + -124.0092588, + 45.0200519 + ], + [ + -124.0092551, + 45.0200674 + ], + [ + -124.0092518, + 45.0200815 + ], + [ + -124.0092503, + 45.0201004 + ], + [ + -124.0092492, + 45.0201154 + ], + [ + -124.0092484, + 45.0201822 + ], + [ + -124.0092764, + 45.0202303 + ], + [ + -124.0092924, + 45.0202547 + ], + [ + -124.009297, + 45.0202597 + ], + [ + -124.0092976, + 45.0202604 + ], + [ + -124.0093144, + 45.0202786 + ], + [ + -124.0093296, + 45.0203027 + ], + [ + -124.0093416, + 45.0203331 + ], + [ + -124.009342, + 45.0203723 + ], + [ + -124.009339, + 45.0203944 + ], + [ + -124.0093383, + 45.0203994 + ], + [ + -124.0093214, + 45.0204392 + ], + [ + -124.0093115, + 45.0204656 + ], + [ + -124.0093075, + 45.0205371 + ], + [ + -124.0093077, + 45.0205468 + ], + [ + -124.0093166, + 45.0205718 + ], + [ + -124.0093374, + 45.0206044 + ], + [ + -124.0093459, + 45.0206336 + ], + [ + -124.0093516, + 45.0206752 + ], + [ + -124.0093463, + 45.0207048 + ], + [ + -124.0093359, + 45.0207357 + ], + [ + -124.0093281, + 45.0207838 + ], + [ + -124.0093386, + 45.0208179 + ], + [ + -124.0093504, + 45.0208361 + ], + [ + -124.0093651, + 45.0208589 + ], + [ + -124.0093928, + 45.0208913 + ], + [ + -124.009403, + 45.0209192 + ], + [ + -124.0094014, + 45.0209548 + ], + [ + -124.0093991, + 45.0209757 + ], + [ + -124.0094005, + 45.0210011 + ], + [ + -124.0094019, + 45.0210272 + ], + [ + -124.0094146, + 45.0211005 + ], + [ + -124.0094214, + 45.0211603 + ], + [ + -124.0094289, + 45.0212029 + ], + [ + -124.0094319, + 45.0212207 + ], + [ + -124.0094309, + 45.0212424 + ], + [ + -124.00943, + 45.0212482 + ], + [ + -124.0094231, + 45.0212892 + ], + [ + -124.0094167, + 45.0213299 + ], + [ + -124.0094007, + 45.0213856 + ], + [ + -124.0093859, + 45.0214326 + ], + [ + -124.0093579, + 45.0214898 + ], + [ + -124.0093353, + 45.0215518 + ], + [ + -124.0093274, + 45.0215962 + ], + [ + -124.0093283, + 45.021644 + ], + [ + -124.0093425, + 45.0216829 + ], + [ + -124.0093582, + 45.0217168 + ], + [ + -124.0093734, + 45.0217422 + ], + [ + -124.0093729, + 45.0217718 + ], + [ + -124.0093593, + 45.0218178 + ], + [ + -124.0093316, + 45.0218954 + ], + [ + -124.0093251, + 45.0219153 + ], + [ + -124.0093289, + 45.0219666 + ], + [ + -124.0093364, + 45.022031 + ], + [ + -124.0093211, + 45.0220791 + ], + [ + -124.0093075, + 45.022112 + ], + [ + -124.0092959, + 45.0221371 + ], + [ + -124.0092917, + 45.0221887 + ], + [ + -124.0092978, + 45.0222341 + ], + [ + -124.0093048, + 45.0222928 + ], + [ + -124.0093152, + 45.0223609 + ], + [ + -124.009333, + 45.0224193 + ], + [ + -124.0093401, + 45.0224799 + ], + [ + -124.0093406, + 45.0224861 + ], + [ + -124.0093459, + 45.0225577 + ], + [ + -124.0093458, + 45.0225919 + ], + [ + -124.0093376, + 45.0226265 + ], + [ + -124.0093345, + 45.0226932 + ], + [ + -124.0093435, + 45.0227423 + ], + [ + -124.0093543, + 45.0228161 + ], + [ + -124.0093522, + 45.02286 + ], + [ + -124.0093547, + 45.0228941 + ], + [ + -124.0093707, + 45.0229278 + ], + [ + -124.0093997, + 45.0229571 + ], + [ + -124.0094247, + 45.0230057 + ], + [ + -124.0094271, + 45.0230379 + ], + [ + -124.0094464, + 45.023081 + ], + [ + -124.0094489, + 45.0231151 + ], + [ + -124.0094748, + 45.023175 + ], + [ + -124.0094796, + 45.0232395 + ], + [ + -124.0094783, + 45.0232586 + ], + [ + -124.0094955, + 45.0233093 + ], + [ + -124.0095473, + 45.023393 + ], + [ + -124.009578, + 45.0234452 + ], + [ + -124.0096008, + 45.0234995 + ], + [ + -124.0096159, + 45.0235579 + ], + [ + -124.0096256, + 45.0236165 + ], + [ + -124.0096466, + 45.0236823 + ], + [ + -124.0096863, + 45.0237474 + ], + [ + -124.0097246, + 45.0238297 + ], + [ + -124.0097438, + 45.0239089 + ], + [ + -124.0097527, + 45.0239562 + ], + [ + -124.0097589, + 45.0240035 + ], + [ + -124.0098061, + 45.0240969 + ], + [ + -124.0098427, + 45.0241341 + ], + [ + -124.0098264, + 45.0241296 + ], + [ + -124.0094991, + 45.02404 + ], + [ + -124.0090805, + 45.0239254 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_15881_s_16278", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -123.9390428, + 44.6158865 + ], + [ + -123.9393814, + 44.6167227 + ], + [ + -123.9394325, + 44.6168967 + ], + [ + -123.9397214, + 44.618395 + ], + [ + -123.9397435, + 44.618629 + ], + [ + -123.9397776, + 44.6194208 + ], + [ + -123.9397718, + 44.6201508 + ], + [ + -123.9397712, + 44.6202022 + ], + [ + -123.9397624, + 44.6208082 + ], + [ + -123.9397417, + 44.6212733 + ], + [ + -123.9397247, + 44.6215003 + ], + [ + -123.9396737, + 44.6219822 + ], + [ + -123.9396367, + 44.6222512 + ], + [ + -123.9395373, + 44.6228205 + ], + [ + -123.9394534, + 44.6232155 + ], + [ + -123.9394441, + 44.6232584 + ], + [ + -123.9393682, + 44.6236065 + ], + [ + -123.9392779, + 44.623978 + ], + [ + -123.9390601, + 44.6247901 + ], + [ + -123.9390425, + 44.6248546 + ], + [ + -123.9387809, + 44.6257991 + ], + [ + -123.9387435, + 44.626107 + ], + [ + -123.9385119, + 44.6272737 + ], + [ + -123.9383551, + 44.6278408 + ], + [ + -123.9381563, + 44.6284625 + ], + [ + -123.9380034, + 44.6288835 + ], + [ + -123.937958, + 44.6289795 + ], + [ + -123.9379799, + 44.6290499 + ], + [ + -123.9389969, + 44.6301641 + ], + [ + -123.9400786, + 44.6320394 + ], + [ + -123.9406535, + 44.6340256 + ], + [ + -123.9407014, + 44.6360535 + ], + [ + -123.9402206, + 44.6380524 + ], + [ + -123.9392278, + 44.6399527 + ], + [ + -123.9375713, + 44.6423979 + ], + [ + -123.9373998, + 44.6426428 + ], + [ + -123.9367571, + 44.6440973 + ], + [ + -123.9361844, + 44.6454329 + ], + [ + -123.9361318, + 44.6455533 + ], + [ + -123.9354769, + 44.6470196 + ], + [ + -123.9351899, + 44.6477102 + ], + [ + -123.9350024, + 44.6481301 + ], + [ + -123.9347805, + 44.6485941 + ], + [ + -123.9336206, + 44.6504377 + ], + [ + -123.9334246, + 44.6506847 + ], + [ + -123.9325694, + 44.6516423 + ], + [ + -123.9322784, + 44.6519334 + ], + [ + -123.9303153, + 44.6535375 + ], + [ + -123.9279514, + 44.6548373 + ], + [ + -123.9252775, + 44.6557829 + ], + [ + -123.9223964, + 44.656338 + ], + [ + -123.919419, + 44.6564811 + ], + [ + -123.9164597, + 44.6562068 + ], + [ + -123.9136323, + 44.6555256 + ], + [ + -123.9110455, + 44.6544637 + ], + [ + -123.9087988, + 44.653062 + ], + [ + -123.9069784, + 44.6513743 + ], + [ + -123.9056544, + 44.6494655 + ], + [ + -123.9048775, + 44.647409 + ], + [ + -123.9046776, + 44.6452838 + ], + [ + -123.9050623, + 44.6431716 + ], + [ + -123.9060168, + 44.6411536 + ], + [ + -123.9063223, + 44.6407743 + ], + [ + -123.9063408, + 44.6407299 + ], + [ + -123.9064315, + 44.6405198 + ], + [ + -123.907107, + 44.6390089 + ], + [ + -123.9076734, + 44.6376893 + ], + [ + -123.9077121, + 44.6376005 + ], + [ + -123.9085421, + 44.6357241 + ], + [ + -123.9084237, + 44.6352834 + ], + [ + -123.9074236, + 44.6334631 + ], + [ + -123.9073277, + 44.6332261 + ], + [ + -123.9069304, + 44.6319696 + ], + [ + -123.9065438, + 44.6302886 + ], + [ + -123.906378, + 44.6292679 + ], + [ + -123.9063481, + 44.6289549 + ], + [ + -123.9064041, + 44.6270262 + ], + [ + -123.9069369, + 44.6251349 + ], + [ + -123.907052, + 44.6248569 + ], + [ + -123.9087495, + 44.6221679 + ], + [ + -123.9087829, + 44.6221299 + ], + [ + -123.9087952, + 44.6220724 + ], + [ + -123.9089249, + 44.621605 + ], + [ + -123.9081607, + 44.6202825 + ], + [ + -123.9080757, + 44.6200915 + ], + [ + -123.9076173, + 44.6187851 + ], + [ + -123.9075533, + 44.6185391 + ], + [ + -123.907298, + 44.6164986 + ], + [ + -123.9072991, + 44.6163586 + ], + [ + -123.9074811, + 44.6147392 + ], + [ + -123.9079991, + 44.6131572 + ], + [ + -123.9081492, + 44.6128163 + ], + [ + -123.908754, + 44.6116869 + ], + [ + -123.9090463, + 44.610513 + ], + [ + -123.9102257, + 44.6084256 + ], + [ + -123.9119817, + 44.6065565 + ], + [ + -123.9142392, + 44.604986 + ], + [ + -123.916901, + 44.6037815 + ], + [ + -123.9198531, + 44.6029946 + ], + [ + -123.9229687, + 44.6026591 + ], + [ + -123.9234566, + 44.6026431 + ], + [ + -123.923939, + 44.6026327 + ], + [ + -123.924038, + 44.6026317 + ], + [ + -123.9270088, + 44.6028105 + ], + [ + -123.9298739, + 44.6033998 + ], + [ + -123.932523, + 44.604377 + ], + [ + -123.9348545, + 44.6057047 + ], + [ + -123.9367787, + 44.6073317 + ], + [ + -123.9382217, + 44.6091956 + ], + [ + -123.939128, + 44.6112248 + ], + [ + -123.9394628, + 44.6133413 + ], + [ + -123.939213, + 44.6154638 + ], + [ + -123.9390428, + 44.6158865 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_15882_s_15881", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -123.9494656, + 44.621848 + ], + [ + -123.9494788, + 44.6224023 + ], + [ + -123.9492174, + 44.6246004 + ], + [ + -123.9483396, + 44.6267154 + ], + [ + -123.9468817, + 44.6286603 + ], + [ + -123.9449036, + 44.6303547 + ], + [ + -123.9424868, + 44.6317289 + ], + [ + -123.9397311, + 44.6327261 + ], + [ + -123.9367501, + 44.6333052 + ], + [ + -123.9336666, + 44.6334424 + ], + [ + -123.9329385, + 44.6334219 + ], + [ + -123.9300205, + 44.6331358 + ], + [ + -123.9272344, + 44.6324536 + ], + [ + -123.9246846, + 44.6314008 + ], + [ + -123.9224668, + 44.6300169 + ], + [ + -123.920664, + 44.6283538 + ], + [ + -123.9204992, + 44.6281192 + ], + [ + -123.9186619, + 44.6265353 + ], + [ + -123.917254, + 44.6246846 + ], + [ + -123.9164257, + 44.6227954 + ], + [ + -123.9161512, + 44.6226977 + ], + [ + -123.9137932, + 44.6213935 + ], + [ + -123.9118369, + 44.6197859 + ], + [ + -123.9103574, + 44.6179365 + ], + [ + -123.9094116, + 44.6159165 + ], + [ + -123.9090357, + 44.6138035 + ], + [ + -123.9092441, + 44.6116787 + ], + [ + -123.9100289, + 44.6096238 + ], + [ + -123.9113597, + 44.6077177 + ], + [ + -123.9131853, + 44.6060337 + ], + [ + -123.9154357, + 44.6046365 + ], + [ + -123.9180243, + 44.6035796 + ], + [ + -123.9208517, + 44.6029038 + ], + [ + -123.9238092, + 44.602635 + ], + [ + -123.9252001, + 44.6026068 + ], + [ + -123.9262168, + 44.6024317 + ], + [ + -123.9264234, + 44.60241 + ], + [ + -123.9286845, + 44.6022953 + ], + [ + -123.9309444, + 44.6024219 + ], + [ + -123.9311366, + 44.602443 + ], + [ + -123.9316108, + 44.6025193 + ], + [ + -123.9343054, + 44.6028424 + ], + [ + -123.9370277, + 44.6035692 + ], + [ + -123.9395068, + 44.6046526 + ], + [ + -123.9416524, + 44.6060531 + ], + [ + -123.9433859, + 44.6077195 + ], + [ + -123.9446442, + 44.6095911 + ], + [ + -123.9453813, + 44.6115994 + ], + [ + -123.9454815, + 44.612699 + ], + [ + -123.9457373, + 44.6133429 + ], + [ + -123.9469744, + 44.6144202 + ], + [ + -123.9483747, + 44.6162879 + ], + [ + -123.949241, + 44.6183142 + ], + [ + -123.9495404, + 44.6204221 + ], + [ + -123.9495441, + 44.6212081 + ], + [ + -123.9494656, + 44.621848 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_15882_s_15883", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -123.9191875, + 44.618769 + ], + [ + -123.9191905, + 44.6187059 + ], + [ + -123.9195553, + 44.6166741 + ], + [ + -123.9204476, + 44.6147273 + ], + [ + -123.9218355, + 44.6129347 + ], + [ + -123.9236696, + 44.61136 + ], + [ + -123.9258848, + 44.6100591 + ], + [ + -123.9284024, + 44.6090783 + ], + [ + -123.9311329, + 44.6084525 + ], + [ + -123.9339792, + 44.6082038 + ], + [ + -123.9354661, + 44.6081747 + ], + [ + -123.9355712, + 44.6081729 + ], + [ + -123.9370368, + 44.6081515 + ], + [ + -123.9400783, + 44.6083257 + ], + [ + -123.9430099, + 44.60893 + ], + [ + -123.9457138, + 44.6099401 + ], + [ + -123.9480812, + 44.6113153 + ], + [ + -123.9500168, + 44.6130003 + ], + [ + -123.9514427, + 44.6149274 + ], + [ + -123.9523015, + 44.6170189 + ], + [ + -123.9525586, + 44.6191908 + ], + [ + -123.9525546, + 44.6193682 + ], + [ + -123.9522145, + 44.6214842 + ], + [ + -123.9513028, + 44.6235122 + ], + [ + -123.9498546, + 44.6253742 + ], + [ + -123.9483545, + 44.6266374 + ], + [ + -123.9482483, + 44.626875 + ], + [ + -123.946815, + 44.6287303 + ], + [ + -123.9449045, + 44.6303516 + ], + [ + -123.9425896, + 44.6316772 + ], + [ + -123.9399584, + 44.6326568 + ], + [ + -123.9371109, + 44.633253 + ], + [ + -123.9341554, + 44.6334431 + ], + [ + -123.9334061, + 44.6334389 + ], + [ + -123.9303977, + 44.6332072 + ], + [ + -123.927513, + 44.632555 + ], + [ + -123.9248661, + 44.631508 + ], + [ + -123.9225618, + 44.6301077 + ], + [ + -123.9206913, + 44.6284094 + ], + [ + -123.9193283, + 44.6264804 + ], + [ + -123.9185269, + 44.624397 + ], + [ + -123.9183187, + 44.6222414 + ], + [ + -123.9187117, + 44.6200991 + ], + [ + -123.9188653, + 44.6196304 + ], + [ + -123.9190656, + 44.6192101 + ], + [ + -123.9191875, + 44.618769 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_15882_s_16278", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -123.9483498, + 44.6250214 + ], + [ + -123.9481495, + 44.6255724 + ], + [ + -123.9479206, + 44.6261404 + ], + [ + -123.9477936, + 44.6264394 + ], + [ + -123.9477386, + 44.6265624 + ], + [ + -123.946744, + 44.6282701 + ], + [ + -123.946669, + 44.6283731 + ], + [ + -123.9462945, + 44.6288077 + ], + [ + -123.9460999, + 44.6299024 + ], + [ + -123.945998, + 44.6302785 + ], + [ + -123.9454156, + 44.6318141 + ], + [ + -123.9452607, + 44.6321291 + ], + [ + -123.9445865, + 44.6332828 + ], + [ + -123.9443296, + 44.6336599 + ], + [ + -123.943638, + 44.6345633 + ], + [ + -123.943327, + 44.6349273 + ], + [ + -123.9429631, + 44.6353329 + ], + [ + -123.9427031, + 44.6356089 + ], + [ + -123.9425614, + 44.6357567 + ], + [ + -123.9421555, + 44.6361728 + ], + [ + -123.942129, + 44.6361998 + ], + [ + -123.941629, + 44.6367089 + ], + [ + -123.9416041, + 44.6367342 + ], + [ + -123.9410573, + 44.6372876 + ], + [ + -123.9410037, + 44.6373454 + ], + [ + -123.9396265, + 44.6393445 + ], + [ + -123.9395811, + 44.6394121 + ], + [ + -123.939505, + 44.6395295 + ], + [ + -123.9393337, + 44.6397932 + ], + [ + -123.9392278, + 44.6399527 + ], + [ + -123.9375713, + 44.6423979 + ], + [ + -123.9373998, + 44.6426428 + ], + [ + -123.9367571, + 44.6440973 + ], + [ + -123.9361844, + 44.6454329 + ], + [ + -123.9361318, + 44.6455533 + ], + [ + -123.9354769, + 44.6470196 + ], + [ + -123.9351899, + 44.6477102 + ], + [ + -123.9350024, + 44.6481301 + ], + [ + -123.9347805, + 44.6485941 + ], + [ + -123.9336206, + 44.6504377 + ], + [ + -123.9334246, + 44.6506847 + ], + [ + -123.9325694, + 44.6516423 + ], + [ + -123.9322784, + 44.6519334 + ], + [ + -123.9303153, + 44.6535375 + ], + [ + -123.9279514, + 44.6548373 + ], + [ + -123.9252775, + 44.6557829 + ], + [ + -123.9223964, + 44.656338 + ], + [ + -123.919419, + 44.6564811 + ], + [ + -123.9164597, + 44.6562068 + ], + [ + -123.9136323, + 44.6555256 + ], + [ + -123.9110455, + 44.6544637 + ], + [ + -123.9087988, + 44.653062 + ], + [ + -123.9069784, + 44.6513743 + ], + [ + -123.9056544, + 44.6494655 + ], + [ + -123.9048775, + 44.647409 + ], + [ + -123.9046776, + 44.6452838 + ], + [ + -123.9050623, + 44.6431716 + ], + [ + -123.9060168, + 44.6411536 + ], + [ + -123.9063223, + 44.6407743 + ], + [ + -123.9063408, + 44.6407299 + ], + [ + -123.9064315, + 44.6405198 + ], + [ + -123.907107, + 44.6390089 + ], + [ + -123.9076734, + 44.6376893 + ], + [ + -123.9077121, + 44.6376005 + ], + [ + -123.9088197, + 44.6350967 + ], + [ + -123.9102388, + 44.63283 + ], + [ + -123.9102691, + 44.6327936 + ], + [ + -123.9117785, + 44.6305671 + ], + [ + -123.9118914, + 44.6303935 + ], + [ + -123.9120092, + 44.6302119 + ], + [ + -123.9120983, + 44.630077 + ], + [ + -123.9122213, + 44.629894 + ], + [ + -123.9122868, + 44.6297979 + ], + [ + -123.9139232, + 44.6274241 + ], + [ + -123.9141699, + 44.6270817 + ], + [ + -123.9144729, + 44.6266788 + ], + [ + -123.9151946, + 44.6258172 + ], + [ + -123.9158116, + 44.6251523 + ], + [ + -123.9159533, + 44.6250044 + ], + [ + -123.9159626, + 44.6249062 + ], + [ + -123.9161227, + 44.6239023 + ], + [ + -123.9161738, + 44.6236763 + ], + [ + -123.9164905, + 44.6226147 + ], + [ + -123.9165546, + 44.6224427 + ], + [ + -123.9169794, + 44.6214831 + ], + [ + -123.9170484, + 44.6213491 + ], + [ + -123.9174592, + 44.6206318 + ], + [ + -123.9176032, + 44.6204038 + ], + [ + -123.9176509, + 44.620329 + ], + [ + -123.917834, + 44.6200451 + ], + [ + -123.9186973, + 44.6188935 + ], + [ + -123.9188093, + 44.6187635 + ], + [ + -123.9196494, + 44.6178876 + ], + [ + -123.9197269, + 44.6178147 + ], + [ + -123.9198191, + 44.6176201 + ], + [ + -123.9213077, + 44.6157744 + ], + [ + -123.9232717, + 44.6141717 + ], + [ + -123.9256356, + 44.6128733 + ], + [ + -123.9283086, + 44.6119292 + ], + [ + -123.931188, + 44.6113758 + ], + [ + -123.9341632, + 44.6112341 + ], + [ + -123.93712, + 44.6115097 + ], + [ + -123.9399447, + 44.6121919 + ], + [ + -123.9425289, + 44.6132547 + ], + [ + -123.9447734, + 44.6146571 + ], + [ + -123.9465917, + 44.6163453 + ], + [ + -123.9479141, + 44.6182543 + ], + [ + -123.9486897, + 44.620311 + ], + [ + -123.9488887, + 44.6224362 + ], + [ + -123.9485033, + 44.6245484 + ], + [ + -123.9483498, + 44.6250214 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_15883_s_16276", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -123.9525632, + 44.6199328 + ], + [ + -123.9525616, + 44.6213643 + ], + [ + -123.9522669, + 44.6234839 + ], + [ + -123.9513989, + 44.6255216 + ], + [ + -123.9499908, + 44.6273993 + ], + [ + -123.9480967, + 44.6290446 + ], + [ + -123.9457893, + 44.6303945 + ], + [ + -123.9431575, + 44.6313969 + ], + [ + -123.9403023, + 44.6320133 + ], + [ + -123.9373334, + 44.63222 + ], + [ + -123.9343652, + 44.6320092 + ], + [ + -123.9315117, + 44.6313888 + ], + [ + -123.9288825, + 44.6303827 + ], + [ + -123.9265789, + 44.6290297 + ], + [ + -123.9246892, + 44.6273817 + ], + [ + -123.9232862, + 44.6255021 + ], + [ + -123.9224237, + 44.6234631 + ], + [ + -123.9221349, + 44.6213432 + ], + [ + -123.9221374, + 44.619793 + ], + [ + -123.9221414, + 44.6195555 + ], + [ + -123.9221612, + 44.618941 + ], + [ + -123.9225217, + 44.6168266 + ], + [ + -123.9234528, + 44.6148031 + ], + [ + -123.9249185, + 44.6129482 + ], + [ + -123.9268627, + 44.6113332 + ], + [ + -123.9292104, + 44.6100201 + ], + [ + -123.9318716, + 44.6090593 + ], + [ + -123.9347439, + 44.6084878 + ], + [ + -123.9377172, + 44.6083275 + ], + [ + -123.9406771, + 44.6085846 + ], + [ + -123.9435099, + 44.6092491 + ], + [ + -123.946107, + 44.6102956 + ], + [ + -123.9483684, + 44.6116839 + ], + [ + -123.9502073, + 44.6133606 + ], + [ + -123.951553, + 44.6152613 + ], + [ + -123.9523539, + 44.6173131 + ], + [ + -123.9525789, + 44.619437 + ], + [ + -123.9525632, + 44.6199328 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_15884_s_15882", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -123.9395364, + 44.6320706 + ], + [ + -123.9385331, + 44.6323926 + ], + [ + -123.9356261, + 44.6328701 + ], + [ + -123.9326445, + 44.6329334 + ], + [ + -123.9297029, + 44.63258 + ], + [ + -123.9269144, + 44.6318236 + ], + [ + -123.9243863, + 44.6306932 + ], + [ + -123.9222157, + 44.6292322 + ], + [ + -123.9204861, + 44.627497 + ], + [ + -123.9192638, + 44.6255541 + ], + [ + -123.9185959, + 44.6234782 + ], + [ + -123.9185079, + 44.6213491 + ], + [ + -123.9190031, + 44.6192487 + ], + [ + -123.9190384, + 44.6191558 + ], + [ + -123.9190988, + 44.6189829 + ], + [ + -123.9193932, + 44.618373 + ], + [ + -123.9202511, + 44.61633 + ], + [ + -123.9216622, + 44.6144363 + ], + [ + -123.9235665, + 44.6127776 + ], + [ + -123.9258899, + 44.6114184 + ], + [ + -123.9285417, + 44.6104117 + ], + [ + -123.9314186, + 44.6097967 + ], + [ + -123.9344086, + 44.6095974 + ], + [ + -123.9374297, + 44.6096099 + ], + [ + -123.940418, + 44.6098341 + ], + [ + -123.9432864, + 44.6104736 + ], + [ + -123.9459229, + 44.6115034 + ], + [ + -123.9482247, + 44.6128832 + ], + [ + -123.9501019, + 44.6145593 + ], + [ + -123.9514814, + 44.6164663 + ], + [ + -123.9523091, + 44.6185297 + ], + [ + -123.9525527, + 44.6206691 + ], + [ + -123.952531, + 44.6215441 + ], + [ + -123.9521859, + 44.6236597 + ], + [ + -123.9512696, + 44.6256867 + ], + [ + -123.949817, + 44.627547 + ], + [ + -123.947884, + 44.6291691 + ], + [ + -123.9455449, + 44.6304908 + ], + [ + -123.9428896, + 44.6314611 + ], + [ + -123.9400201, + 44.6320428 + ], + [ + -123.9395364, + 44.6320706 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_15885_s_15893", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0372816, + 44.6252941 + ], + [ + -124.0388256, + 44.6249315 + ], + [ + -124.0417862, + 44.6246737 + ], + [ + -124.0447603, + 44.6248332 + ], + [ + -124.0476337, + 44.6254039 + ], + [ + -124.0502961, + 44.6263639 + ], + [ + -124.0526451, + 44.6276764 + ], + [ + -124.0528859, + 44.6278405 + ], + [ + -124.0545956, + 44.6292218 + ], + [ + -124.0548556, + 44.6294718 + ], + [ + -124.0566245, + 44.6316675 + ], + [ + -124.0576335, + 44.6340959 + ], + [ + -124.0577136, + 44.6344259 + ], + [ + -124.0579321, + 44.6365559 + ], + [ + -124.0575629, + 44.6386754 + ], + [ + -124.0566201, + 44.6407023 + ], + [ + -124.05514, + 44.6425583 + ], + [ + -124.0531798, + 44.6441718 + ], + [ + -124.0508154, + 44.6454803 + ], + [ + -124.0481379, + 44.6464332 + ], + [ + -124.045251, + 44.6469938 + ], + [ + -124.0422663, + 44.6471403 + ], + [ + -124.0342948, + 44.6469702 + ], + [ + -124.0338635, + 44.6469567 + ], + [ + -124.0324232, + 44.6468967 + ], + [ + -124.0313211, + 44.6468219 + ], + [ + -124.0304709, + 44.6467419 + ], + [ + -124.0288717, + 44.6465288 + ], + [ + -124.0276015, + 44.6463087 + ], + [ + -124.0262034, + 44.6460153 + ], + [ + -124.0251532, + 44.6457552 + ], + [ + -124.0229115, + 44.6450512 + ], + [ + -124.0211104, + 44.6452416 + ], + [ + -124.0205503, + 44.6452616 + ], + [ + -124.0168448, + 44.6450697 + ], + [ + -124.0161346, + 44.6449697 + ], + [ + -124.0121574, + 44.6439859 + ], + [ + -124.0118985, + 44.6438915 + ], + [ + -124.0108663, + 44.6438188 + ], + [ + -124.0084075, + 44.6437319 + ], + [ + -124.0061329, + 44.643528 + ], + [ + -124.0054428, + 44.643428 + ], + [ + -124.0020326, + 44.6426251 + ], + [ + -124.0014025, + 44.6424151 + ], + [ + -123.9995839, + 44.6415894 + ], + [ + -123.9991493, + 44.6416819 + ], + [ + -123.9973133, + 44.641986 + ], + [ + -123.9963932, + 44.642096 + ], + [ + -123.9944193, + 44.6422384 + ], + [ + -123.9936292, + 44.6422584 + ], + [ + -123.9899108, + 44.6420254 + ], + [ + -123.9887306, + 44.6418454 + ], + [ + -123.9859177, + 44.6412073 + ], + [ + -123.9850676, + 44.6409473 + ], + [ + -123.9825443, + 44.6399645 + ], + [ + -123.9814242, + 44.6394244 + ], + [ + -123.9800815, + 44.6386965 + ], + [ + -123.9776114, + 44.6371963 + ], + [ + -123.9773288, + 44.6370204 + ], + [ + -123.9769604, + 44.6367852 + ], + [ + -123.9763752, + 44.6369438 + ], + [ + -123.9744949, + 44.6373339 + ], + [ + -123.9728514, + 44.6376053 + ], + [ + -123.9717212, + 44.6377453 + ], + [ + -123.9715632, + 44.6377612 + ], + [ + -123.9698311, + 44.6385382 + ], + [ + -123.969171, + 44.6387883 + ], + [ + -123.9668025, + 44.6395094 + ], + [ + -123.9664625, + 44.6395894 + ], + [ + -123.9640655, + 44.6400032 + ], + [ + -123.9631753, + 44.6401032 + ], + [ + -123.9603663, + 44.6402306 + ], + [ + -123.9600505, + 44.6402241 + ], + [ + -123.9583912, + 44.6410684 + ], + [ + -123.9583776, + 44.6410547 + ], + [ + -123.9565318, + 44.6419773 + ], + [ + -123.9536389, + 44.6428596 + ], + [ + -123.9505536, + 44.6432983 + ], + [ + -123.9474079, + 44.6432747 + ], + [ + -123.946867, + 44.6431893 + ], + [ + -123.9463182, + 44.6431657 + ], + [ + -123.9437775, + 44.6429019 + ], + [ + -123.9413352, + 44.642337 + ], + [ + -123.9409352, + 44.642217 + ], + [ + -123.9384061, + 44.6412486 + ], + [ + -123.938185, + 44.6411207 + ], + [ + -123.9377583, + 44.6409773 + ], + [ + -123.9372382, + 44.6407673 + ], + [ + -123.9347265, + 44.6394976 + ], + [ + -123.932624, + 44.637893 + ], + [ + -123.9324641, + 44.6377429 + ], + [ + -123.9309184, + 44.6359595 + ], + [ + -123.9307185, + 44.6356694 + ], + [ + -123.9298695, + 44.6341632 + ], + [ + -123.9293443, + 44.6325835 + ], + [ + -123.9290247, + 44.6311535 + ], + [ + -123.929018, + 44.6310535 + ], + [ + -123.9274354, + 44.6293111 + ], + [ + -123.9263318, + 44.6273323 + ], + [ + -123.9257901, + 44.6252377 + ], + [ + -123.925831, + 44.6231079 + ], + [ + -123.9264528, + 44.6210248 + ], + [ + -123.9276317, + 44.6190683 + ], + [ + -123.9293222, + 44.6173136 + ], + [ + -123.9314595, + 44.6158282 + ], + [ + -123.9339613, + 44.6146691 + ], + [ + -123.9367315, + 44.6138808 + ], + [ + -123.9382655, + 44.6136782 + ], + [ + -123.9400663, + 44.613361 + ], + [ + -123.9416299, + 44.6131467 + ], + [ + -123.9423397, + 44.6130768 + ], + [ + -123.9442153, + 44.6129757 + ], + [ + -123.9452551, + 44.6129657 + ], + [ + -123.947223, + 44.6130379 + ], + [ + -123.947583, + 44.6130679 + ], + [ + -123.9511027, + 44.6136709 + ], + [ + -123.9543235, + 44.6148506 + ], + [ + -123.9545935, + 44.6149806 + ], + [ + -123.9565056, + 44.6160706 + ], + [ + -123.9581484, + 44.6173654 + ], + [ + -123.9582884, + 44.6174954 + ], + [ + -123.9586246, + 44.6178823 + ], + [ + -123.9594509, + 44.6175918 + ], + [ + -123.9622496, + 44.6168417 + ], + [ + -123.9628795, + 44.6167217 + ], + [ + -123.9651572, + 44.6164183 + ], + [ + -123.9666682, + 44.616301 + ], + [ + -123.9686306, + 44.6154685 + ], + [ + -123.9708185, + 44.6147024 + ], + [ + -123.9715284, + 44.6145025 + ], + [ + -123.9735508, + 44.6140463 + ], + [ + -123.9741907, + 44.6139363 + ], + [ + -123.9773892, + 44.6136378 + ], + [ + -123.978569, + 44.6136178 + ], + [ + -123.9805591, + 44.6136772 + ], + [ + -123.980949, + 44.6137072 + ], + [ + -123.9836024, + 44.6140841 + ], + [ + -123.9846523, + 44.6143041 + ], + [ + -123.9877235, + 44.6152184 + ], + [ + -123.9884334, + 44.6154984 + ], + [ + -123.9897319, + 44.616073 + ], + [ + -123.9905419, + 44.6164729 + ], + [ + -123.9915384, + 44.6170094 + ], + [ + -123.9925283, + 44.6175893 + ], + [ + -123.9930185, + 44.6178891 + ], + [ + -123.9955355, + 44.6194957 + ], + [ + -123.9981972, + 44.6189493 + ], + [ + -123.999387, + 44.6188093 + ], + [ + -124.0026782, + 44.6186805 + ], + [ + -124.0031981, + 44.6187005 + ], + [ + -124.0052894, + 44.6188853 + ], + [ + -124.0064392, + 44.6190453 + ], + [ + -124.0089887, + 44.6195682 + ], + [ + -124.0094986, + 44.6197082 + ], + [ + -124.0121285, + 44.6206475 + ], + [ + -124.0127085, + 44.6209075 + ], + [ + -124.0140081, + 44.6215599 + ], + [ + -124.014508, + 44.6218399 + ], + [ + -124.0151723, + 44.6222862 + ], + [ + -124.0177428, + 44.6224673 + ], + [ + -124.020114, + 44.6227711 + ], + [ + -124.0207539, + 44.622891 + ], + [ + -124.0211344, + 44.6229849 + ], + [ + -124.0227244, + 44.6228363 + ], + [ + -124.0236142, + 44.6227963 + ], + [ + -124.0258698, + 44.6228146 + ], + [ + -124.0263597, + 44.6228446 + ], + [ + -124.027487, + 44.622944 + ], + [ + -124.0282669, + 44.623034 + ], + [ + -124.031701, + 44.6237333 + ], + [ + -124.0327408, + 44.6240433 + ], + [ + -124.0350756, + 44.6249157 + ], + [ + -124.0358368, + 44.6252632 + ], + [ + -124.0372816, + 44.6252941 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_15887_s_16060", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0682247, + 44.6340993 + ], + [ + -124.0663309, + 44.6362051 + ], + [ + -124.0638125, + 44.6379456 + ], + [ + -124.0625325, + 44.6386457 + ], + [ + -124.062251, + 44.638796 + ], + [ + -124.0601208, + 44.6399062 + ], + [ + -124.0586435, + 44.6405863 + ], + [ + -124.0571333, + 44.6411964 + ], + [ + -124.0564105, + 44.6414704 + ], + [ + -124.0540702, + 44.6423006 + ], + [ + -124.0532308, + 44.6425316 + ], + [ + -124.0529661, + 44.6427779 + ], + [ + -124.050723, + 44.6441822 + ], + [ + -124.0481391, + 44.6452471 + ], + [ + -124.0453139, + 44.6459316 + ], + [ + -124.0423558, + 44.6462093 + ], + [ + -124.0393786, + 44.6460697 + ], + [ + -124.0364969, + 44.645518 + ], + [ + -124.0338214, + 44.6445756 + ], + [ + -124.0314549, + 44.6432785 + ], + [ + -124.0300049, + 44.6423084 + ], + [ + -124.0279376, + 44.6406048 + ], + [ + -124.0264073, + 44.6386333 + ], + [ + -124.0254798, + 44.6364788 + ], + [ + -124.0253998, + 44.6361888 + ], + [ + -124.0253011, + 44.6357917 + ], + [ + -124.0252611, + 44.6356117 + ], + [ + -124.0250921, + 44.6333746 + ], + [ + -124.0251122, + 44.6330846 + ], + [ + -124.0254179, + 44.6315871 + ], + [ + -124.0253788, + 44.6313821 + ], + [ + -124.0255456, + 44.6292962 + ], + [ + -124.0262683, + 44.6272718 + ], + [ + -124.0275202, + 44.6253835 + ], + [ + -124.029255, + 44.6237012 + ], + [ + -124.0314084, + 44.6222871 + ], + [ + -124.0339009, + 44.6211935 + ], + [ + -124.0366403, + 44.6204607 + ], + [ + -124.0395255, + 44.6201158 + ], + [ + -124.0424496, + 44.6201717 + ], + [ + -124.0447845, + 44.6205433 + ], + [ + -124.0450896, + 44.6203095 + ], + [ + -124.0475094, + 44.6190645 + ], + [ + -124.0502226, + 44.6181805 + ], + [ + -124.053125, + 44.6176916 + ], + [ + -124.0561053, + 44.6176163 + ], + [ + -124.0590488, + 44.6179577 + ], + [ + -124.0618426, + 44.6187027 + ], + [ + -124.0643794, + 44.6198225 + ], + [ + -124.0665616, + 44.6212743 + ], + [ + -124.0683054, + 44.6230021 + ], + [ + -124.0695438, + 44.6249398 + ], + [ + -124.0702292, + 44.6270127 + ], + [ + -124.0703351, + 44.6291413 + ], + [ + -124.0698574, + 44.6312437 + ], + [ + -124.0688145, + 44.6332392 + ], + [ + -124.0682247, + 44.6340993 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_15888_s_15887", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0720065, + 44.624396 + ], + [ + -124.0723664, + 44.6247975 + ], + [ + -124.0734537, + 44.6267808 + ], + [ + -124.0739782, + 44.6288776 + ], + [ + -124.07392, + 44.6310071 + ], + [ + -124.073281, + 44.6330876 + ], + [ + -124.0720858, + 44.635039 + ], + [ + -124.0703802, + 44.6367865 + ], + [ + -124.0682299, + 44.6382628 + ], + [ + -124.0657175, + 44.6394111 + ], + [ + -124.0629394, + 44.6401874 + ], + [ + -124.0600026, + 44.6405617 + ], + [ + -124.0570199, + 44.6405196 + ], + [ + -124.054106, + 44.6400629 + ], + [ + -124.0516177, + 44.6392855 + ], + [ + -124.051607, + 44.6392998 + ], + [ + -124.0513587, + 44.6392053 + ], + [ + -124.0507558, + 44.6389633 + ], + [ + -124.0506131, + 44.638903 + ], + [ + -124.0500825, + 44.6386405 + ], + [ + -124.0485749, + 44.6382454 + ], + [ + -124.0460288, + 44.6371354 + ], + [ + -124.0438351, + 44.6356921 + ], + [ + -124.042078, + 44.6339709 + ], + [ + -124.040825, + 44.632038 + ], + [ + -124.0401243, + 44.6299677 + ], + [ + -124.0400027, + 44.6278395 + ], + [ + -124.0404648, + 44.6257353 + ], + [ + -124.0414928, + 44.6237359 + ], + [ + -124.0426819, + 44.6219781 + ], + [ + -124.0445586, + 44.6198657 + ], + [ + -124.0470618, + 44.6181159 + ], + [ + -124.047214, + 44.6180317 + ], + [ + -124.0499489, + 44.6168249 + ], + [ + -124.0529776, + 44.6160554 + ], + [ + -124.0561651, + 44.6157576 + ], + [ + -124.0593691, + 44.6159448 + ], + [ + -124.0624465, + 44.6166086 + ], + [ + -124.0629976, + 44.6167747 + ], + [ + -124.0631949, + 44.6168353 + ], + [ + -124.0633591, + 44.6168867 + ], + [ + -124.0659917, + 44.6179452 + ], + [ + -124.0682796, + 44.6193543 + ], + [ + -124.0701326, + 44.6210584 + ], + [ + -124.0714777, + 44.6229905 + ], + [ + -124.0720065, + 44.624396 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_15889_s_15888", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.071254, + 44.6373035 + ], + [ + -124.0713394, + 44.6373462 + ], + [ + -124.0712304, + 44.6374572 + ], + [ + -124.0705714, + 44.6380195 + ], + [ + -124.0703578, + 44.6382435 + ], + [ + -124.0702328, + 44.6383436 + ], + [ + -124.0702092, + 44.6383285 + ], + [ + -124.0695639, + 44.6388791 + ], + [ + -124.067583, + 44.6400779 + ], + [ + -124.0668011, + 44.6404744 + ], + [ + -124.0661232, + 44.641253 + ], + [ + -124.0660178, + 44.6413511 + ], + [ + -124.0641374, + 44.6428051 + ], + [ + -124.0619186, + 44.6439914 + ], + [ + -124.0594352, + 44.6448707 + ], + [ + -124.058697, + 44.6450211 + ], + [ + -124.058467, + 44.6451003 + ], + [ + -124.055858, + 44.6456181 + ], + [ + -124.0531617, + 44.6457976 + ], + [ + -124.0508325, + 44.645804 + ], + [ + -124.0477843, + 44.6455924 + ], + [ + -124.0448573, + 44.6449493 + ], + [ + -124.0421699, + 44.6439008 + ], + [ + -124.0398311, + 44.6424893 + ], + [ + -124.0379356, + 44.6407722 + ], + [ + -124.0365601, + 44.6388188 + ], + [ + -124.0357602, + 44.6367084 + ], + [ + -124.0355684, + 44.6345264 + ], + [ + -124.0355744, + 44.6344134 + ], + [ + -124.0358256, + 44.6328186 + ], + [ + -124.0358506, + 44.6327236 + ], + [ + -124.0362179, + 44.6316392 + ], + [ + -124.0362499, + 44.6315622 + ], + [ + -124.0368625, + 44.6303554 + ], + [ + -124.0369005, + 44.6302924 + ], + [ + -124.0380365, + 44.6287595 + ], + [ + -124.0394994, + 44.6273752 + ], + [ + -124.0395504, + 44.6273342 + ], + [ + -124.0396123, + 44.6272848 + ], + [ + -124.0397143, + 44.6272039 + ], + [ + -124.0420605, + 44.6256915 + ], + [ + -124.0425229, + 44.6254506 + ], + [ + -124.0427827, + 44.6253101 + ], + [ + -124.0432883, + 44.6250482 + ], + [ + -124.0436633, + 44.6248622 + ], + [ + -124.0450752, + 44.6242406 + ], + [ + -124.0456211, + 44.6240286 + ], + [ + -124.0460559, + 44.6239025 + ], + [ + -124.0468406, + 44.6230227 + ], + [ + -124.0489029, + 44.6214841 + ], + [ + -124.0513458, + 44.6202624 + ], + [ + -124.0540754, + 44.6194044 + ], + [ + -124.0569868, + 44.6189432 + ], + [ + -124.0599682, + 44.6188964 + ], + [ + -124.0629052, + 44.6192659 + ], + [ + -124.0656848, + 44.6200375 + ], + [ + -124.0665593, + 44.6203538 + ], + [ + -124.0690719, + 44.621496 + ], + [ + -124.0712249, + 44.622966 + ], + [ + -124.0729356, + 44.6247074 + ], + [ + -124.0741385, + 44.6266534 + ], + [ + -124.0747875, + 44.6287296 + ], + [ + -124.0748577, + 44.6308562 + ], + [ + -124.0743461, + 44.6329518 + ], + [ + -124.0732725, + 44.6349361 + ], + [ + -124.0725932, + 44.6358988 + ], + [ + -124.071254, + 44.6373035 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_15889_s_15889", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0387495, + 44.634678 + ], + [ + -124.039004, + 44.6325559 + ], + [ + -124.0398335, + 44.6305099 + ], + [ + -124.0412058, + 44.6286188 + ], + [ + -124.0430684, + 44.6269552 + ], + [ + -124.0453495, + 44.625583 + ], + [ + -124.0479615, + 44.624555 + ], + [ + -124.0508042, + 44.6239105 + ], + [ + -124.0537682, + 44.6236744 + ], + [ + -124.0567398, + 44.6238557 + ], + [ + -124.0596048, + 44.6244475 + ], + [ + -124.0622532, + 44.6254271 + ], + [ + -124.0645832, + 44.6267567 + ], + [ + -124.0665053, + 44.6283854 + ], + [ + -124.0679456, + 44.6302505 + ], + [ + -124.0688488, + 44.6322804 + ], + [ + -124.0691801, + 44.6343972 + ], + [ + -124.0689266, + 44.6365194 + ], + [ + -124.0680981, + 44.6385655 + ], + [ + -124.0667264, + 44.6404569 + ], + [ + -124.0648641, + 44.6421209 + ], + [ + -124.0625828, + 44.6434935 + ], + [ + -124.0599702, + 44.6445219 + ], + [ + -124.0571267, + 44.6451666 + ], + [ + -124.0541616, + 44.6454028 + ], + [ + -124.0511889, + 44.6452214 + ], + [ + -124.0483229, + 44.6446294 + ], + [ + -124.0456739, + 44.6436496 + ], + [ + -124.0433437, + 44.6423196 + ], + [ + -124.0414217, + 44.6406905 + ], + [ + -124.039982, + 44.638825 + ], + [ + -124.0390797, + 44.6367949 + ], + [ + -124.0387495, + 44.634678 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_15889_s_16039", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.048504, + 44.623268 + ], + [ + -124.0496195, + 44.6227953 + ], + [ + -124.0523893, + 44.6220912 + ], + [ + -124.0552968, + 44.6217807 + ], + [ + -124.0582338, + 44.6218753 + ], + [ + -124.0610904, + 44.6223715 + ], + [ + -124.0637602, + 44.6232508 + ], + [ + -124.0661433, + 44.6244803 + ], + [ + -124.068151, + 44.6260142 + ], + [ + -124.0687512, + 44.6265723 + ], + [ + -124.0689915, + 44.626802 + ], + [ + -124.0695462, + 44.627347 + ], + [ + -124.0710492, + 44.6291755 + ], + [ + -124.0720264, + 44.6311776 + ], + [ + -124.0724406, + 44.633277 + ], + [ + -124.0722758, + 44.635394 + ], + [ + -124.0715383, + 44.6374477 + ], + [ + -124.0702562, + 44.6393602 + ], + [ + -124.0684783, + 44.6410583 + ], + [ + -124.067895, + 44.6414336 + ], + [ + -124.0667429, + 44.6424334 + ], + [ + -124.0644344, + 44.6437826 + ], + [ + -124.0618015, + 44.6447844 + ], + [ + -124.0589454, + 44.6454001 + ], + [ + -124.0559759, + 44.6456061 + ], + [ + -124.0559089, + 44.645606 + ], + [ + -124.0558793, + 44.6456121 + ], + [ + -124.0529846, + 44.6457963 + ], + [ + -124.0529084, + 44.6457959 + ], + [ + -124.0525099, + 44.6458016 + ], + [ + -124.0522204, + 44.6458037 + ], + [ + -124.0508205, + 44.6458044 + ], + [ + -124.0477963, + 44.6455894 + ], + [ + -124.0448923, + 44.6449495 + ], + [ + -124.0422244, + 44.6439105 + ], + [ + -124.0398989, + 44.6425136 + ], + [ + -124.0380087, + 44.6408147 + ], + [ + -124.0366291, + 44.6388815 + ], + [ + -124.035815, + 44.6367912 + ], + [ + -124.0355989, + 44.634627 + ], + [ + -124.0356039, + 44.6345033 + ], + [ + -124.0360556, + 44.6321711 + ], + [ + -124.0361053, + 44.6320298 + ], + [ + -124.0372642, + 44.6298013 + ], + [ + -124.0373387, + 44.6296953 + ], + [ + -124.0380754, + 44.6287644 + ], + [ + -124.0381598, + 44.6286691 + ], + [ + -124.0398805, + 44.627074 + ], + [ + -124.0419837, + 44.625733 + ], + [ + -124.0429239, + 44.6252372 + ], + [ + -124.0439206, + 44.6247539 + ], + [ + -124.0445596, + 44.6244698 + ], + [ + -124.0458106, + 44.6239703 + ], + [ + -124.0460648, + 44.6238798 + ], + [ + -124.048504, + 44.623268 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_15889_s_16045", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0758408, + 44.6328256 + ], + [ + -124.0755496, + 44.6334549 + ], + [ + -124.0754386, + 44.6336719 + ], + [ + -124.0752849, + 44.6339598 + ], + [ + -124.075158, + 44.6341878 + ], + [ + -124.0745123, + 44.6351947 + ], + [ + -124.0743203, + 44.6354578 + ], + [ + -124.0738727, + 44.6360285 + ], + [ + -124.0736507, + 44.6362926 + ], + [ + -124.0734936, + 44.6364753 + ], + [ + -124.0733556, + 44.6366323 + ], + [ + -124.0728832, + 44.637138 + ], + [ + -124.0727542, + 44.637268 + ], + [ + -124.0724368, + 44.6375763 + ], + [ + -124.0722648, + 44.6377373 + ], + [ + -124.071337, + 44.6385255 + ], + [ + -124.071166, + 44.6386575 + ], + [ + -124.0711025, + 44.6387062 + ], + [ + -124.0708625, + 44.6388892 + ], + [ + -124.0700309, + 44.6394764 + ], + [ + -124.0697219, + 44.6396785 + ], + [ + -124.0693207, + 44.6399316 + ], + [ + -124.0689857, + 44.6401357 + ], + [ + -124.0684189, + 44.6404644 + ], + [ + -124.0671888, + 44.6411435 + ], + [ + -124.0669745, + 44.6412597 + ], + [ + -124.0657755, + 44.6418978 + ], + [ + -124.0648593, + 44.6422926 + ], + [ + -124.0648057, + 44.6423318 + ], + [ + -124.0624848, + 44.6437215 + ], + [ + -124.0598243, + 44.6447554 + ], + [ + -124.0588521, + 44.6449695 + ], + [ + -124.058534, + 44.6450808 + ], + [ + -124.0559001, + 44.6456127 + ], + [ + -124.0531753, + 44.6457991 + ], + [ + -124.05089, + 44.645808 + ], + [ + -124.0478418, + 44.6455999 + ], + [ + -124.0449137, + 44.6449603 + ], + [ + -124.0422243, + 44.6439151 + ], + [ + -124.0398825, + 44.6425068 + ], + [ + -124.0379831, + 44.6407922 + ], + [ + -124.036603, + 44.6388409 + ], + [ + -124.0357979, + 44.6367318 + ], + [ + -124.0356005, + 44.6345503 + ], + [ + -124.0356066, + 44.6344313 + ], + [ + -124.0360334, + 44.6322403 + ], + [ + -124.0360832, + 44.6320953 + ], + [ + -124.0367423, + 44.6306312 + ], + [ + -124.0368019, + 44.6305252 + ], + [ + -124.0378299, + 44.6290371 + ], + [ + -124.0391631, + 44.6276782 + ], + [ + -124.0392525, + 44.6276005 + ], + [ + -124.041472, + 44.6260311 + ], + [ + -124.0417303, + 44.6258827 + ], + [ + -124.0421329, + 44.6256591 + ], + [ + -124.0427986, + 44.6253021 + ], + [ + -124.0435364, + 44.6249303 + ], + [ + -124.0440091, + 44.6247069 + ], + [ + -124.0452317, + 44.6241859 + ], + [ + -124.0457036, + 44.6240056 + ], + [ + -124.0477497, + 44.6233573 + ], + [ + -124.0483171, + 44.6232451 + ], + [ + -124.0496341, + 44.6218803 + ], + [ + -124.0501699, + 44.6212277 + ], + [ + -124.0521512, + 44.6196358 + ], + [ + -124.0545292, + 44.6183505 + ], + [ + -124.0572125, + 44.6174212 + ], + [ + -124.060098, + 44.6168835 + ], + [ + -124.0630749, + 44.6167582 + ], + [ + -124.0660288, + 44.61705 + ], + [ + -124.0688463, + 44.6177478 + ], + [ + -124.0714192, + 44.6188246 + ], + [ + -124.0736486, + 44.6202393 + ], + [ + -124.0754489, + 44.6219373 + ], + [ + -124.0767508, + 44.6238536 + ], + [ + -124.0775043, + 44.6259144 + ], + [ + -124.0776804, + 44.6280406 + ], + [ + -124.0772722, + 44.6301505 + ], + [ + -124.0762954, + 44.632163 + ], + [ + -124.076284, + 44.6321807 + ], + [ + -124.0760709, + 44.6324974 + ], + [ + -124.0758408, + 44.6328256 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_15889_s_16200", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0680035, + 44.638872 + ], + [ + -124.0678617, + 44.6395617 + ], + [ + -124.0669257, + 44.6414886 + ], + [ + -124.0655018, + 44.6432566 + ], + [ + -124.0636401, + 44.6448035 + ], + [ + -124.0614061, + 44.6460747 + ], + [ + -124.0588787, + 44.6470254 + ], + [ + -124.0588388, + 44.6470342 + ], + [ + -124.0579644, + 44.6473679 + ], + [ + -124.0551093, + 44.6479863 + ], + [ + -124.05214, + 44.6481951 + ], + [ + -124.0491707, + 44.6479863 + ], + [ + -124.0463156, + 44.6473679 + ], + [ + -124.0436844, + 44.6463637 + ], + [ + -124.0413783, + 44.6450123 + ], + [ + -124.039486, + 44.6433656 + ], + [ + -124.03808, + 44.641487 + ], + [ + -124.0372146, + 44.6394487 + ], + [ + -124.0369227, + 44.637329 + ], + [ + -124.0369228, + 44.636989 + ], + [ + -124.0372102, + 44.6348892 + ], + [ + -124.0380605, + 44.6328686 + ], + [ + -124.0394416, + 44.6310035 + ], + [ + -124.0395236, + 44.6309313 + ], + [ + -124.0396951, + 44.6306554 + ], + [ + -124.0414084, + 44.6285653 + ], + [ + -124.0418464, + 44.6281462 + ], + [ + -124.0438562, + 44.6265725 + ], + [ + -124.0462573, + 44.6253089 + ], + [ + -124.0489572, + 44.6244041 + ], + [ + -124.0518524, + 44.6238927 + ], + [ + -124.0548317, + 44.6237945 + ], + [ + -124.0577805, + 44.6241132 + ], + [ + -124.0605857, + 44.6248365 + ], + [ + -124.0631395, + 44.6259367 + ], + [ + -124.0653438, + 44.6273716 + ], + [ + -124.0671138, + 44.6290859 + ], + [ + -124.0683816, + 44.6310138 + ], + [ + -124.0690984, + 44.6330814 + ], + [ + -124.0692365, + 44.635209 + ], + [ + -124.0687906, + 44.637315 + ], + [ + -124.0680035, + 44.638872 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_15889_s_2456760", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0676983, + 44.6320106 + ], + [ + -124.0682181, + 44.6331739 + ], + [ + -124.0685563, + 44.6352624 + ], + [ + -124.0683247, + 44.6373582 + ], + [ + -124.0683151, + 44.6373828 + ], + [ + -124.0683122, + 44.637723 + ], + [ + -124.0683104, + 44.6381042 + ], + [ + -124.0683102, + 44.6381355 + ], + [ + -124.0683085, + 44.6383202 + ], + [ + -124.0683085, + 44.638352 + ], + [ + -124.0683083, + 44.6384109 + ], + [ + -124.0683045, + 44.6389342 + ], + [ + -124.0682997, + 44.6396826 + ], + [ + -124.068296, + 44.6401893 + ], + [ + -124.0682961, + 44.640386 + ], + [ + -124.0682959, + 44.640438 + ], + [ + -124.0682911, + 44.641183 + ], + [ + -124.0682863, + 44.6418964 + ], + [ + -124.0682815, + 44.6426644 + ], + [ + -124.0682814, + 44.6426784 + ], + [ + -124.0682796, + 44.6429015 + ], + [ + -124.0682787, + 44.6431537 + ], + [ + -124.0682786, + 44.6431792 + ], + [ + -124.0682776, + 44.6433222 + ], + [ + -124.0682775, + 44.6433385 + ], + [ + -124.0682758, + 44.643537 + ], + [ + -124.0682749, + 44.6437966 + ], + [ + -124.0682747, + 44.6438359 + ], + [ + -124.0682728, + 44.64406 + ], + [ + -124.068269, + 44.6446543 + ], + [ + -124.0682681, + 44.6448365 + ], + [ + -124.0682642, + 44.6454705 + ], + [ + -124.0682633, + 44.6456164 + ], + [ + -124.0682517, + 44.6474517 + ], + [ + -124.0682463, + 44.6483062 + ], + [ + -124.0682488, + 44.6484308 + ], + [ + -124.0682469, + 44.6486498 + ], + [ + -124.0682467, + 44.6486736 + ], + [ + -124.0682427, + 44.6490016 + ], + [ + -124.0682419, + 44.6490709 + ], + [ + -124.0682423, + 44.6491136 + ], + [ + -124.0682465, + 44.6499656 + ], + [ + -124.0682463, + 44.6500688 + ], + [ + -124.0682453, + 44.6501848 + ], + [ + -124.0679352, + 44.6523032 + ], + [ + -124.0670519, + 44.6543377 + ], + [ + -124.0656295, + 44.6562101 + ], + [ + -124.0637226, + 44.6578484 + ], + [ + -124.0614044, + 44.6591896 + ], + [ + -124.058764, + 44.6601822 + ], + [ + -124.055903, + 44.6607881 + ], + [ + -124.0529313, + 44.6609838 + ], + [ + -124.0499633, + 44.660762 + ], + [ + -124.0471129, + 44.6601311 + ], + [ + -124.0444898, + 44.6591153 + ], + [ + -124.0421949, + 44.6577538 + ], + [ + -124.0403164, + 44.6560989 + ], + [ + -124.0389264, + 44.6542142 + ], + [ + -124.0380783, + 44.6521721 + ], + [ + -124.0378047, + 44.6500511 + ], + [ + -124.0378052, + 44.6499893 + ], + [ + -124.0378007, + 44.6491085 + ], + [ + -124.0378013, + 44.64897 + ], + [ + -124.0378033, + 44.6488112 + ], + [ + -124.0378066, + 44.6485456 + ], + [ + -124.0378059, + 44.6483278 + ], + [ + -124.037806, + 44.6482482 + ], + [ + -124.0378122, + 44.6473498 + ], + [ + -124.0378247, + 44.6455133 + ], + [ + -124.0378257, + 44.6453723 + ], + [ + -124.0378299, + 44.6446598 + ], + [ + -124.0378302, + 44.6446213 + ], + [ + -124.0378311, + 44.6445416 + ], + [ + -124.0378351, + 44.6439499 + ], + [ + -124.0378353, + 44.6439341 + ], + [ + -124.0378371, + 44.6437217 + ], + [ + -124.0378381, + 44.6434604 + ], + [ + -124.0378384, + 44.6434175 + ], + [ + -124.0378404, + 44.6432056 + ], + [ + -124.0378413, + 44.6430835 + ], + [ + -124.0378423, + 44.6428263 + ], + [ + -124.0378425, + 44.6427906 + ], + [ + -124.0378445, + 44.6425588 + ], + [ + -124.0378486, + 44.641894 + ], + [ + -124.0378489, + 44.6418592 + ], + [ + -124.0378498, + 44.6417764 + ], + [ + -124.0378549, + 44.6410778 + ], + [ + -124.0378599, + 44.64036 + ], + [ + -124.03786, + 44.64016 + ], + [ + -124.0378602, + 44.6401013 + ], + [ + -124.0378643, + 44.6395759 + ], + [ + -124.0378695, + 44.6388274 + ], + [ + -124.0378736, + 44.6382327 + ], + [ + -124.0378738, + 44.6382145 + ], + [ + -124.0378757, + 44.6380101 + ], + [ + -124.0378777, + 44.6376298 + ], + [ + -124.0378778, + 44.6376189 + ], + [ + -124.0378819, + 44.6369999 + ], + [ + -124.0378865, + 44.6367826 + ], + [ + -124.0378872, + 44.6367603 + ], + [ + -124.0378914, + 44.6365981 + ], + [ + -124.0378924, + 44.6365598 + ], + [ + -124.0378991, + 44.636342 + ], + [ + -124.0379043, + 44.6360562 + ], + [ + -124.037922, + 44.6358575 + ], + [ + -124.037937, + 44.633833 + ], + [ + -124.0385344, + 44.6317462 + ], + [ + -124.0396904, + 44.6297828 + ], + [ + -124.0413605, + 44.628018 + ], + [ + -124.0434806, + 44.6265199 + ], + [ + -124.045969, + 44.6253458 + ], + [ + -124.0487304, + 44.6245409 + ], + [ + -124.0516584, + 44.6241361 + ], + [ + -124.0546408, + 44.624147 + ], + [ + -124.057563, + 44.6245731 + ], + [ + -124.0603126, + 44.6253981 + ], + [ + -124.0627842, + 44.6265902 + ], + [ + -124.0648827, + 44.6281038 + ], + [ + -124.0665275, + 44.6298806 + ], + [ + -124.0670994, + 44.6308806 + ], + [ + -124.0673231, + 44.6311711 + ], + [ + -124.0675284, + 44.6316305 + ], + [ + -124.0676553, + 44.6318524 + ], + [ + -124.0676983, + 44.6320106 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_15890_s_2438932", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0673642, + 44.6506772 + ], + [ + -124.0673192, + 44.651069 + ], + [ + -124.0674025, + 44.6515695 + ], + [ + -124.0671579, + 44.6537228 + ], + [ + -124.0663212, + 44.655799 + ], + [ + -124.065407, + 44.6570545 + ], + [ + -124.0653956, + 44.6572839 + ], + [ + -124.0649603, + 44.6585835 + ], + [ + -124.0649521, + 44.6586172 + ], + [ + -124.0649439, + 44.6586326 + ], + [ + -124.0646916, + 44.6593857 + ], + [ + -124.0634186, + 44.6613464 + ], + [ + -124.0616269, + 44.6630885 + ], + [ + -124.0593875, + 44.664543 + ], + [ + -124.056789, + 44.6656524 + ], + [ + -124.0567321, + 44.6656715 + ], + [ + -124.0537583, + 44.6664123 + ], + [ + -124.0506346, + 44.6667005 + ], + [ + -124.0474946, + 44.6665237 + ], + [ + -124.0444729, + 44.6658896 + ], + [ + -124.0416987, + 44.6648252 + ], + [ + -124.0392909, + 44.6633761 + ], + [ + -124.0392543, + 44.663349 + ], + [ + -124.0372531, + 44.661505 + ], + [ + -124.0358495, + 44.6593986 + ], + [ + -124.0351083, + 44.6571269 + ], + [ + -124.0350991, + 44.6570728 + ], + [ + -124.0351, + 44.6561544 + ], + [ + -124.0347894, + 44.6554854 + ], + [ + -124.0347765, + 44.6554444 + ], + [ + -124.03441, + 44.6534094 + ], + [ + -124.0345861, + 44.6513615 + ], + [ + -124.0352983, + 44.6493738 + ], + [ + -124.0365213, + 44.647517 + ], + [ + -124.0382113, + 44.6458575 + ], + [ + -124.0390341, + 44.6453069 + ], + [ + -124.0392425, + 44.6450076 + ], + [ + -124.0410667, + 44.6433222 + ], + [ + -124.0433163, + 44.6419232 + ], + [ + -124.0459049, + 44.6408644 + ], + [ + -124.048733, + 44.6401864 + ], + [ + -124.051692, + 44.6399152 + ], + [ + -124.0546682, + 44.6400614 + ], + [ + -124.0575473, + 44.6406191 + ], + [ + -124.0602188, + 44.6415672 + ], + [ + -124.06258, + 44.642869 + ], + [ + -124.0645402, + 44.6444747 + ], + [ + -124.066024, + 44.6463225 + ], + [ + -124.0669745, + 44.6483415 + ], + [ + -124.0673549, + 44.650454 + ], + [ + -124.0673642, + 44.6506772 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_15892_s_15884", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -123.9503246, + 44.6158124 + ], + [ + -123.951517, + 44.6164829 + ], + [ + -123.9534554, + 44.6181015 + ], + [ + -123.9549144, + 44.6199592 + ], + [ + -123.9558382, + 44.6219844 + ], + [ + -123.956191, + 44.6240994 + ], + [ + -123.9559592, + 44.6262229 + ], + [ + -123.9551518, + 44.6282734 + ], + [ + -123.9537996, + 44.6301719 + ], + [ + -123.9519547, + 44.6318455 + ], + [ + -123.9496878, + 44.63323 + ], + [ + -123.9470861, + 44.634272 + ], + [ + -123.9442497, + 44.6349314 + ], + [ + -123.9412875, + 44.6351831 + ], + [ + -123.9409663, + 44.6351877 + ], + [ + -123.937805, + 44.6349971 + ], + [ + -123.9373395, + 44.6349336 + ], + [ + -123.9347925, + 44.6344189 + ], + [ + -123.9343814, + 44.6343075 + ], + [ + -123.9308979, + 44.6329703 + ], + [ + -123.930443, + 44.6327366 + ], + [ + -123.928062, + 44.6311716 + ], + [ + -123.9277275, + 44.6310139 + ], + [ + -123.9256409, + 44.6295511 + ], + [ + -123.9239848, + 44.6278303 + ], + [ + -123.9228203, + 44.625915 + ], + [ + -123.9221904, + 44.623876 + ], + [ + -123.9221182, + 44.6217886 + ], + [ + -123.9221186, + 44.6217869 + ], + [ + -123.9221159, + 44.6217302 + ], + [ + -123.9223044, + 44.6196045 + ], + [ + -123.92307, + 44.6175459 + ], + [ + -123.924383, + 44.6156335 + ], + [ + -123.9261931, + 44.6139408 + ], + [ + -123.9284306, + 44.6125328 + ], + [ + -123.9310096, + 44.6114636 + ], + [ + -123.9338309, + 44.6107743 + ], + [ + -123.9367863, + 44.6104914 + ], + [ + -123.9397622, + 44.6106256 + ], + [ + -123.9426442, + 44.6111719 + ], + [ + -123.9453218, + 44.6121093 + ], + [ + -123.947692, + 44.6134018 + ], + [ + -123.9496638, + 44.6149996 + ], + [ + -123.9503246, + 44.6158124 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_15893_s_16048", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.075939, + 44.6325665 + ], + [ + -124.075948, + 44.6325684 + ], + [ + -124.075845, + 44.6328164 + ], + [ + -124.0755496, + 44.6334549 + ], + [ + -124.0754386, + 44.6336719 + ], + [ + -124.0752849, + 44.6339598 + ], + [ + -124.075158, + 44.6341878 + ], + [ + -124.0745123, + 44.6351947 + ], + [ + -124.0743203, + 44.6354578 + ], + [ + -124.0738727, + 44.6360285 + ], + [ + -124.0736507, + 44.6362926 + ], + [ + -124.0734936, + 44.6364753 + ], + [ + -124.0733556, + 44.6366323 + ], + [ + -124.0728832, + 44.637138 + ], + [ + -124.0727542, + 44.637268 + ], + [ + -124.0724368, + 44.6375763 + ], + [ + -124.0722648, + 44.6377373 + ], + [ + -124.071337, + 44.6385255 + ], + [ + -124.071166, + 44.6386575 + ], + [ + -124.0711025, + 44.6387062 + ], + [ + -124.0708625, + 44.6388892 + ], + [ + -124.0700309, + 44.6394764 + ], + [ + -124.0697219, + 44.6396785 + ], + [ + -124.0693207, + 44.6399316 + ], + [ + -124.0689857, + 44.6401357 + ], + [ + -124.0684189, + 44.6404644 + ], + [ + -124.0671888, + 44.6411435 + ], + [ + -124.0669745, + 44.6412597 + ], + [ + -124.0666014, + 44.6414583 + ], + [ + -124.0658555, + 44.6424708 + ], + [ + -124.0640699, + 44.6440709 + ], + [ + -124.0618956, + 44.6454036 + ], + [ + -124.0594099, + 44.6464217 + ], + [ + -124.0567008, + 44.647089 + ], + [ + -124.0538644, + 44.6473819 + ], + [ + -124.0510015, + 44.6472899 + ], + [ + -124.0503193, + 44.647174 + ], + [ + -124.0495263, + 44.6471769 + ], + [ + -124.0494633, + 44.6471771 + ], + [ + -124.048054, + 44.6471781 + ], + [ + -124.0480086, + 44.6471781 + ], + [ + -124.04666, + 44.6471761 + ], + [ + -124.0453424, + 44.64718 + ], + [ + -124.0449954, + 44.6471782 + ], + [ + -124.0440222, + 44.6471652 + ], + [ + -124.0436498, + 44.6471601 + ], + [ + -124.0435988, + 44.6471593 + ], + [ + -124.0423536, + 44.6471393 + ], + [ + -124.0392725, + 44.6468636 + ], + [ + -124.0363339, + 44.6461471 + ], + [ + -124.0336604, + 44.6450197 + ], + [ + -124.0313631, + 44.6435283 + ], + [ + -124.0295377, + 44.6417351 + ], + [ + -124.0292571, + 44.6412913 + ], + [ + -124.0283126, + 44.6401927 + ], + [ + -124.027278, + 44.638195 + ], + [ + -124.0268092, + 44.6360915 + ], + [ + -124.0269242, + 44.6339631 + ], + [ + -124.0276184, + 44.6318917 + ], + [ + -124.0288652, + 44.6299567 + ], + [ + -124.0306165, + 44.6282326 + ], + [ + -124.0328052, + 44.6267856 + ], + [ + -124.0353469, + 44.6256712 + ], + [ + -124.0381442, + 44.6249323 + ], + [ + -124.0397008, + 44.6247553 + ], + [ + -124.0395863, + 44.6246408 + ], + [ + -124.0393913, + 44.6244348 + ], + [ + -124.039149, + 44.6241706 + ], + [ + -124.0389421, + 44.6239375 + ], + [ + -124.0386247, + 44.6235638 + ], + [ + -124.0384097, + 44.6232988 + ], + [ + -124.0380085, + 44.6227709 + ], + [ + -124.0378215, + 44.6225079 + ], + [ + -124.037763, + 44.6224247 + ], + [ + -124.037486, + 44.6220266 + ], + [ + -124.0370026, + 44.6212583 + ], + [ + -124.0368272, + 44.6209481 + ], + [ + -124.036626, + 44.6205959 + ], + [ + -124.0362979, + 44.6199663 + ], + [ + -124.0361589, + 44.6196723 + ], + [ + -124.0358421, + 44.6189109 + ], + [ + -124.0357301, + 44.6186009 + ], + [ + -124.0355901, + 44.6181782 + ], + [ + -124.0355061, + 44.6179002 + ], + [ + -124.0354282, + 44.6176249 + ], + [ + -124.0352914, + 44.6171069 + ], + [ + -124.0351708, + 44.61658 + ], + [ + -124.0351436, + 44.6164391 + ], + [ + -124.0340298, + 44.6156982 + ], + [ + -124.0339288, + 44.6156182 + ], + [ + -124.0325986, + 44.6144005 + ], + [ + -124.0325196, + 44.6143164 + ], + [ + -124.0314436, + 44.6129746 + ], + [ + -124.0313876, + 44.6128916 + ], + [ + -124.0306443, + 44.6115762 + ], + [ + -124.0306023, + 44.6114852 + ], + [ + -124.0303956, + 44.6109991 + ], + [ + -124.0303566, + 44.610899 + ], + [ + -124.030045, + 44.6097083 + ], + [ + -124.0300433, + 44.6097062 + ], + [ + -124.0293793, + 44.6087634 + ], + [ + -124.0293153, + 44.6086604 + ], + [ + -124.0282997, + 44.6063705 + ], + [ + -124.0282677, + 44.6062555 + ], + [ + -124.028057, + 44.6052568 + ], + [ + -124.0280381, + 44.6051258 + ], + [ + -124.0279648, + 44.6043483 + ], + [ + -124.0279469, + 44.6039403 + ], + [ + -124.0281577, + 44.6017659 + ], + [ + -124.0289717, + 44.5996654 + ], + [ + -124.0303559, + 44.5977232 + ], + [ + -124.0322548, + 44.5960174 + ], + [ + -124.0345919, + 44.5946167 + ], + [ + -124.0372731, + 44.5935774 + ], + [ + -124.0401905, + 44.5929413 + ], + [ + -124.0410691, + 44.5928813 + ], + [ + -124.0423175, + 44.5925365 + ], + [ + -124.0452541, + 44.5921709 + ], + [ + -124.048234, + 44.5922215 + ], + [ + -124.0511429, + 44.5926866 + ], + [ + -124.053869, + 44.5935481 + ], + [ + -124.0563076, + 44.5947731 + ], + [ + -124.058365, + 44.5963144 + ], + [ + -124.0593246, + 44.5973949 + ], + [ + -124.0591123, + 44.5970598 + ], + [ + -124.0594553, + 44.5975421 + ], + [ + -124.0599622, + 44.5981128 + ], + [ + -124.0602843, + 44.5987079 + ], + [ + -124.0606953, + 44.5992859 + ], + [ + -124.0607094, + 44.5993129 + ], + [ + -124.060986, + 44.6000039 + ], + [ + -124.0610376, + 44.6000993 + ], + [ + -124.0610011, + 44.6000416 + ], + [ + -124.061199, + 44.6005361 + ], + [ + -124.0634051, + 44.6019526 + ], + [ + -124.0651855, + 44.6036495 + ], + [ + -124.0664707, + 44.6055611 + ], + [ + -124.0672117, + 44.6076147 + ], + [ + -124.0673802, + 44.609732 + ], + [ + -124.0669697, + 44.6118324 + ], + [ + -124.0660954, + 44.6136308 + ], + [ + -124.0665464, + 44.6140447 + ], + [ + -124.0672283, + 44.6146565 + ], + [ + -124.0692152, + 44.6163322 + ], + [ + -124.0697817, + 44.6168052 + ], + [ + -124.0700538, + 44.617026 + ], + [ + -124.0704556, + 44.6173337 + ], + [ + -124.0705579, + 44.6174128 + ], + [ + -124.0706859, + 44.6175128 + ], + [ + -124.071036, + 44.6178 + ], + [ + -124.0710361, + 44.6178 + ], + [ + -124.0713941, + 44.6180929 + ], + [ + -124.0717, + 44.6183513 + ], + [ + -124.071895, + 44.6185212 + ], + [ + -124.0725703, + 44.619156 + ], + [ + -124.0728944, + 44.619485 + ], + [ + -124.0730262, + 44.6196211 + ], + [ + -124.0731282, + 44.619728 + ], + [ + -124.0733403, + 44.6200014 + ], + [ + -124.0733662, + 44.6199895 + ], + [ + -124.0736043, + 44.6202545 + ], + [ + -124.0741761, + 44.6209459 + ], + [ + -124.0742891, + 44.6210949 + ], + [ + -124.0748306, + 44.6218833 + ], + [ + -124.0749277, + 44.6220402 + ], + [ + -124.0750188, + 44.6221879 + ], + [ + -124.0751064, + 44.622329 + ], + [ + -124.0754431, + 44.6229167 + ], + [ + -124.0755571, + 44.6231337 + ], + [ + -124.075838, + 44.623718 + ], + [ + -124.075975, + 44.624032 + ], + [ + -124.0765163, + 44.6257525 + ], + [ + -124.0765523, + 44.6259355 + ], + [ + -124.076571, + 44.6260333 + ], + [ + -124.0766119, + 44.6262558 + ], + [ + -124.0766438, + 44.6264263 + ], + [ + -124.0767299, + 44.6270036 + ], + [ + -124.0767499, + 44.6271836 + ], + [ + -124.0767953, + 44.627849 + ], + [ + -124.0768044, + 44.628209 + ], + [ + -124.0768014, + 44.6286975 + ], + [ + -124.0767954, + 44.6288555 + ], + [ + -124.0767504, + 44.6294484 + ], + [ + -124.0767364, + 44.6295704 + ], + [ + -124.0766994, + 44.6298491 + ], + [ + -124.0766864, + 44.6299351 + ], + [ + -124.0766546, + 44.6301451 + ], + [ + -124.0764976, + 44.6309188 + ], + [ + -124.0764456, + 44.6311228 + ], + [ + -124.0763043, + 44.6316134 + ], + [ + -124.0762463, + 44.6317934 + ], + [ + -124.075939, + 44.6325665 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_15893_s_16279", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0537133, + 44.6423988 + ], + [ + -124.053403, + 44.6427011 + ], + [ + -124.0512038, + 44.6441404 + ], + [ + -124.0486535, + 44.6452458 + ], + [ + -124.0458501, + 44.6459746 + ], + [ + -124.0429013, + 44.6462989 + ], + [ + -124.0399206, + 44.6462062 + ], + [ + -124.0370225, + 44.6457001 + ], + [ + -124.0343184, + 44.6448 + ], + [ + -124.0319124, + 44.6435405 + ], + [ + -124.0302514, + 44.6424774 + ], + [ + -124.0280467, + 44.6407227 + ], + [ + -124.026424, + 44.6386699 + ], + [ + -124.0256338, + 44.6368225 + ], + [ + -124.0255933, + 44.6368297 + ], + [ + -124.0255423, + 44.6366827 + ], + [ + -124.0254885, + 44.6364828 + ], + [ + -124.0254597, + 44.6364154 + ], + [ + -124.0254147, + 44.6362464 + ], + [ + -124.0254245, + 44.6362451 + ], + [ + -124.0252394, + 44.6355574 + ], + [ + -124.0252154, + 44.6354334 + ], + [ + -124.0250726, + 44.633946 + ], + [ + -124.0250726, + 44.633634 + ], + [ + -124.0254483, + 44.631475 + ], + [ + -124.0255819, + 44.6293819 + ], + [ + -124.0263546, + 44.6272266 + ], + [ + -124.0277258, + 44.6252289 + ], + [ + -124.0296379, + 44.6234725 + ], + [ + -124.0320108, + 44.622031 + ], + [ + -124.0347449, + 44.6209649 + ], + [ + -124.0377257, + 44.6203188 + ], + [ + -124.0408283, + 44.6201198 + ], + [ + -124.0439226, + 44.6203762 + ], + [ + -124.0445165, + 44.6204702 + ], + [ + -124.0447767, + 44.6205339 + ], + [ + -124.0451383, + 44.6202577 + ], + [ + -124.0475609, + 44.6190156 + ], + [ + -124.0502761, + 44.6181348 + ], + [ + -124.0531797, + 44.6176492 + ], + [ + -124.0561601, + 44.6175775 + ], + [ + -124.0591029, + 44.6179223 + ], + [ + -124.061895, + 44.6186705 + ], + [ + -124.0644291, + 44.6197933 + ], + [ + -124.066608, + 44.6212476 + ], + [ + -124.0683479, + 44.6229775 + ], + [ + -124.0695818, + 44.6249166 + ], + [ + -124.0702624, + 44.6269903 + ], + [ + -124.0703635, + 44.629119 + ], + [ + -124.069881, + 44.6312209 + ], + [ + -124.0688335, + 44.6332152 + ], + [ + -124.0682137, + 44.6341152 + ], + [ + -124.0662536, + 44.636272 + ], + [ + -124.0636384, + 44.6380395 + ], + [ + -124.0602282, + 44.6398497 + ], + [ + -124.0586435, + 44.6405863 + ], + [ + -124.0571333, + 44.6411964 + ], + [ + -124.0564105, + 44.6414704 + ], + [ + -124.0540702, + 44.6423006 + ], + [ + -124.0537133, + 44.6423988 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_15894_s_15882", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -123.9473352, + 44.6268676 + ], + [ + -123.9472768, + 44.6269758 + ], + [ + -123.9456823, + 44.6287758 + ], + [ + -123.9436266, + 44.6303191 + ], + [ + -123.9411886, + 44.6315463 + ], + [ + -123.9384621, + 44.6324103 + ], + [ + -123.9355519, + 44.6328777 + ], + [ + -123.9325699, + 44.6329307 + ], + [ + -123.9296307, + 44.6325671 + ], + [ + -123.9268474, + 44.6318011 + ], + [ + -123.924327, + 44.630662 + ], + [ + -123.9221663, + 44.6291936 + ], + [ + -123.9219541, + 44.6289785 + ], + [ + -123.9207737, + 44.628314 + ], + [ + -123.9189035, + 44.6267776 + ], + [ + -123.9174675, + 44.6250189 + ], + [ + -123.9165162, + 44.6230998 + ], + [ + -123.9164634, + 44.6228546 + ], + [ + -123.9156715, + 44.6225547 + ], + [ + -123.9133597, + 44.621209 + ], + [ + -123.9114602, + 44.6195669 + ], + [ + -123.9100457, + 44.6176918 + ], + [ + -123.9091707, + 44.6156555 + ], + [ + -123.9088687, + 44.6135365 + ], + [ + -123.9091513, + 44.6114161 + ], + [ + -123.9100075, + 44.6093758 + ], + [ + -123.9114044, + 44.6074941 + ], + [ + -123.9132883, + 44.6058431 + ], + [ + -123.9155867, + 44.6044864 + ], + [ + -123.9182114, + 44.603476 + ], + [ + -123.9210615, + 44.6028508 + ], + [ + -123.9240275, + 44.6026347 + ], + [ + -123.9241657, + 44.6026344 + ], + [ + -123.9242545, + 44.6026212 + ], + [ + -123.9249586, + 44.6026119 + ], + [ + -123.927011, + 44.6023557 + ], + [ + -123.927199, + 44.6023427 + ], + [ + -123.9295847, + 44.6023127 + ], + [ + -123.9319476, + 44.6025495 + ], + [ + -123.9322176, + 44.6025922 + ], + [ + -123.9338373, + 44.6027473 + ], + [ + -123.9366508, + 44.6034333 + ], + [ + -123.9392237, + 44.6044972 + ], + [ + -123.9414579, + 44.6058984 + ], + [ + -123.943268, + 44.6075832 + ], + [ + -123.9445848, + 44.6094873 + ], + [ + -123.945358, + 44.611538 + ], + [ + -123.9454663, + 44.6126851 + ], + [ + -123.9457436, + 44.6133495 + ], + [ + -123.9470478, + 44.6145025 + ], + [ + -123.9484306, + 44.6163818 + ], + [ + -123.9492754, + 44.6184174 + ], + [ + -123.9495499, + 44.6205314 + ], + [ + -123.9495441, + 44.6212954 + ], + [ + -123.949288, + 44.623223 + ], + [ + -123.9485567, + 44.6250876 + ], + [ + -123.9473736, + 44.6268299 + ], + [ + -123.9473352, + 44.6268676 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_15942_s_16048", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0648827, + 44.6155322 + ], + [ + -124.0636582, + 44.6171826 + ], + [ + -124.0617746, + 44.6188339 + ], + [ + -124.0594761, + 44.620191 + ], + [ + -124.0568509, + 44.6212016 + ], + [ + -124.0540001, + 44.621827 + ], + [ + -124.0510332, + 44.6220431 + ], + [ + -124.0480642, + 44.6218415 + ], + [ + -124.0452074, + 44.6212301 + ], + [ + -124.0425726, + 44.6202324 + ], + [ + -124.0402611, + 44.6188866 + ], + [ + -124.0401146, + 44.61876 + ], + [ + -124.0395893, + 44.618596 + ], + [ + -124.0393663, + 44.618518 + ], + [ + -124.0392434, + 44.6184745 + ], + [ + -124.0390253, + 44.6183965 + ], + [ + -124.0375264, + 44.6177817 + ], + [ + -124.0373204, + 44.6176857 + ], + [ + -124.0366794, + 44.61737 + ], + [ + -124.0365044, + 44.6172789 + ], + [ + -124.0361006, + 44.6170615 + ], + [ + -124.0359696, + 44.6169885 + ], + [ + -124.0340298, + 44.6156982 + ], + [ + -124.0339288, + 44.6156182 + ], + [ + -124.0325986, + 44.6144005 + ], + [ + -124.0325196, + 44.6143164 + ], + [ + -124.0314436, + 44.6129746 + ], + [ + -124.0313876, + 44.6128916 + ], + [ + -124.0306443, + 44.6115762 + ], + [ + -124.0306023, + 44.6114852 + ], + [ + -124.0303956, + 44.6109991 + ], + [ + -124.0303566, + 44.610899 + ], + [ + -124.030045, + 44.6097083 + ], + [ + -124.0300433, + 44.6097062 + ], + [ + -124.0293793, + 44.6087634 + ], + [ + -124.0293153, + 44.6086604 + ], + [ + -124.0282997, + 44.6063705 + ], + [ + -124.0282677, + 44.6062555 + ], + [ + -124.028057, + 44.6052568 + ], + [ + -124.0280381, + 44.6051258 + ], + [ + -124.0279648, + 44.6043483 + ], + [ + -124.0279469, + 44.6039403 + ], + [ + -124.0281577, + 44.6017659 + ], + [ + -124.0289717, + 44.5996654 + ], + [ + -124.0303559, + 44.5977232 + ], + [ + -124.0322548, + 44.5960174 + ], + [ + -124.0345919, + 44.5946167 + ], + [ + -124.0372731, + 44.5935774 + ], + [ + -124.0401905, + 44.5929413 + ], + [ + -124.0422165, + 44.592803 + ], + [ + -124.0444252, + 44.5924446 + ], + [ + -124.047405, + 44.5923871 + ], + [ + -124.0503431, + 44.5927461 + ], + [ + -124.0531269, + 44.5935077 + ], + [ + -124.0556494, + 44.5946427 + ], + [ + -124.0578136, + 44.5961074 + ], + [ + -124.0595364, + 44.5978456 + ], + [ + -124.0596211, + 44.5979198 + ], + [ + -124.0613451, + 44.6006299 + ], + [ + -124.0634051, + 44.6019526 + ], + [ + -124.0651855, + 44.6036495 + ], + [ + -124.0664707, + 44.6055611 + ], + [ + -124.0672117, + 44.6076147 + ], + [ + -124.0673802, + 44.609732 + ], + [ + -124.0669697, + 44.6118324 + ], + [ + -124.0659957, + 44.6138357 + ], + [ + -124.0656689, + 44.614342 + ], + [ + -124.0654233, + 44.614723 + ], + [ + -124.0653, + 44.6149178 + ], + [ + -124.0651709, + 44.6151229 + ], + [ + -124.0651614, + 44.6151379 + ], + [ + -124.0649989, + 44.615395 + ], + [ + -124.0649074, + 44.6155401 + ], + [ + -124.0648827, + 44.6155322 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_15942_s_781974", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0894525, + 44.5230958 + ], + [ + -124.0896839, + 44.5236439 + ], + [ + -124.0897656, + 44.5239289 + ], + [ + -124.0898604, + 44.5242588 + ], + [ + -124.0900682, + 44.5251821 + ], + [ + -124.0901193, + 44.5254941 + ], + [ + -124.0902021, + 44.5261969 + ], + [ + -124.0902282, + 44.5265579 + ], + [ + -124.0902431, + 44.5274093 + ], + [ + -124.0902172, + 44.5281003 + ], + [ + -124.0902092, + 44.5282681 + ], + [ + -124.090023, + 44.5314241 + ], + [ + -124.0900073, + 44.5316393 + ], + [ + -124.0897451, + 44.5346603 + ], + [ + -124.0897263, + 44.53485 + ], + [ + -124.0896355, + 44.535665 + ], + [ + -124.0896248, + 44.5357563 + ], + [ + -124.0894931, + 44.5368245 + ], + [ + -124.0891762, + 44.5396377 + ], + [ + -124.089068, + 44.5409357 + ], + [ + -124.0890065, + 44.5414596 + ], + [ + -124.0885272, + 44.5446225 + ], + [ + -124.0882739, + 44.5464594 + ], + [ + -124.0882501, + 44.5466194 + ], + [ + -124.0879696, + 44.5483854 + ], + [ + -124.0879455, + 44.5485286 + ], + [ + -124.0877036, + 44.54989 + ], + [ + -124.0870701, + 44.554425 + ], + [ + -124.0870406, + 44.5546182 + ], + [ + -124.0867411, + 44.5564333 + ], + [ + -124.086681, + 44.5567557 + ], + [ + -124.0865761, + 44.5572607 + ], + [ + -124.0865633, + 44.5573215 + ], + [ + -124.0864474, + 44.5578585 + ], + [ + -124.0864185, + 44.5579874 + ], + [ + -124.0863246, + 44.5583904 + ], + [ + -124.0862913, + 44.5585279 + ], + [ + -124.0852283, + 44.562754 + ], + [ + -124.0851836, + 44.5629242 + ], + [ + -124.0849212, + 44.5638797 + ], + [ + -124.0844739, + 44.5657686 + ], + [ + -124.084447, + 44.5658787 + ], + [ + -124.0841503, + 44.5670578 + ], + [ + -124.0841328, + 44.567126 + ], + [ + -124.0839907, + 44.5676704 + ], + [ + -124.0835472, + 44.5695316 + ], + [ + -124.0835026, + 44.5697098 + ], + [ + -124.0833727, + 44.5702048 + ], + [ + -124.0833436, + 44.5703128 + ], + [ + -124.0831481, + 44.5710186 + ], + [ + -124.0829914, + 44.5715884 + ], + [ + -124.0829552, + 44.5717162 + ], + [ + -124.0828764, + 44.5719858 + ], + [ + -124.0825871, + 44.5731336 + ], + [ + -124.0825753, + 44.57318 + ], + [ + -124.0823275, + 44.574139 + ], + [ + -124.0820139, + 44.575104 + ], + [ + -124.0817011, + 44.5759 + ], + [ + -124.0816763, + 44.5759625 + ], + [ + -124.0813638, + 44.5767399 + ], + [ + -124.0810984, + 44.5774076 + ], + [ + -124.0810847, + 44.5780074 + ], + [ + -124.0810746, + 44.5782628 + ], + [ + -124.0810488, + 44.5787268 + ], + [ + -124.0810255, + 44.5790341 + ], + [ + -124.0810006, + 44.5792951 + ], + [ + -124.0808945, + 44.5800335 + ], + [ + -124.0808386, + 44.5803245 + ], + [ + -124.0807815, + 44.5805958 + ], + [ + -124.0807016, + 44.5809458 + ], + [ + -124.0806101, + 44.5813079 + ], + [ + -124.0805522, + 44.5815169 + ], + [ + -124.0804505, + 44.5818553 + ], + [ + -124.0803445, + 44.5821823 + ], + [ + -124.0802193, + 44.582541 + ], + [ + -124.0799606, + 44.5832318 + ], + [ + -124.0799467, + 44.5833027 + ], + [ + -124.0799305, + 44.5833997 + ], + [ + -124.0798505, + 44.5840329 + ], + [ + -124.0798487, + 44.5840468 + ], + [ + -124.0795004, + 44.5867649 + ], + [ + -124.0794802, + 44.5869114 + ], + [ + -124.0793836, + 44.5875672 + ], + [ + -124.0794755, + 44.5879759 + ], + [ + -124.0795025, + 44.5881209 + ], + [ + -124.0795896, + 44.5887102 + ], + [ + -124.0796127, + 44.5889212 + ], + [ + -124.0796548, + 44.5895178 + ], + [ + -124.0796599, + 44.5896748 + ], + [ + -124.0796638, + 44.5899522 + ], + [ + -124.0796629, + 44.5902092 + ], + [ + -124.0795813, + 44.5913051 + ], + [ + -124.0795534, + 44.5914972 + ], + [ + -124.0794128, + 44.5922235 + ], + [ + -124.0793589, + 44.5924466 + ], + [ + -124.0791939, + 44.5930322 + ], + [ + -124.0790969, + 44.5933332 + ], + [ + -124.0782524, + 44.5951807 + ], + [ + -124.0780794, + 44.5954688 + ], + [ + -124.0776477, + 44.5961262 + ], + [ + -124.0771937, + 44.5967614 + ], + [ + -124.0770955, + 44.596917 + ], + [ + -124.0769871, + 44.5970849 + ], + [ + -124.0767482, + 44.597447 + ], + [ + -124.0763005, + 44.598125 + ], + [ + -124.0759442, + 44.5986865 + ], + [ + -124.0756524, + 44.5991468 + ], + [ + -124.0755558, + 44.5992962 + ], + [ + -124.0745061, + 44.6008873 + ], + [ + -124.074499, + 44.6008981 + ], + [ + -124.0734317, + 44.6025112 + ], + [ + -124.0730392, + 44.6031229 + ], + [ + -124.0729967, + 44.6031886 + ], + [ + -124.0723565, + 44.6041691 + ], + [ + -124.0720542, + 44.6046393 + ], + [ + -124.0718074, + 44.6050232 + ], + [ + -124.0717683, + 44.6050835 + ], + [ + -124.0716513, + 44.6052625 + ], + [ + -124.0715013, + 44.605492 + ], + [ + -124.0711655, + 44.6060064 + ], + [ + -124.0711408, + 44.6060441 + ], + [ + -124.0706389, + 44.6068051 + ], + [ + -124.0678217, + 44.6110735 + ], + [ + -124.0677922, + 44.6111179 + ], + [ + -124.0675607, + 44.6114647 + ], + [ + -124.0673163, + 44.6118569 + ], + [ + -124.0671853, + 44.6120614 + ], + [ + -124.0668403, + 44.6125855 + ], + [ + -124.0667793, + 44.6126772 + ], + [ + -124.0659421, + 44.6139188 + ], + [ + -124.0656689, + 44.614342 + ], + [ + -124.0654233, + 44.614723 + ], + [ + -124.0653, + 44.6149178 + ], + [ + -124.0651709, + 44.6151229 + ], + [ + -124.0651614, + 44.6151379 + ], + [ + -124.0649989, + 44.615395 + ], + [ + -124.0649074, + 44.6155401 + ], + [ + -124.0648827, + 44.6155322 + ], + [ + -124.0636582, + 44.6171826 + ], + [ + -124.0617746, + 44.6188339 + ], + [ + -124.0594761, + 44.620191 + ], + [ + -124.0568509, + 44.6212016 + ], + [ + -124.0540001, + 44.621827 + ], + [ + -124.0510332, + 44.6220431 + ], + [ + -124.0480642, + 44.6218415 + ], + [ + -124.0452074, + 44.6212301 + ], + [ + -124.0425726, + 44.6202324 + ], + [ + -124.0402611, + 44.6188866 + ], + [ + -124.0383617, + 44.6172446 + ], + [ + -124.0369474, + 44.6153694 + ], + [ + -124.0360725, + 44.6133332 + ], + [ + -124.0357706, + 44.6112142 + ], + [ + -124.0360532, + 44.6090939 + ], + [ + -124.0369095, + 44.6070536 + ], + [ + -124.0369675, + 44.6069526 + ], + [ + -124.0371727, + 44.6066121 + ], + [ + -124.0372667, + 44.6064632 + ], + [ + -124.0374319, + 44.6062019 + ], + [ + -124.0375632, + 44.6059934 + ], + [ + -124.037577, + 44.6059716 + ], + [ + -124.0377291, + 44.6057317 + ], + [ + -124.037773, + 44.605663 + ], + [ + -124.0380421, + 44.605246 + ], + [ + -124.0383724, + 44.6047346 + ], + [ + -124.0384817, + 44.604569 + ], + [ + -124.0393441, + 44.6032909 + ], + [ + -124.0395919, + 44.6029147 + ], + [ + -124.0398539, + 44.6024944 + ], + [ + -124.0400219, + 44.6022344 + ], + [ + -124.0403251, + 44.6017806 + ], + [ + -124.0431262, + 44.5975396 + ], + [ + -124.0436149, + 44.5967991 + ], + [ + -124.0439397, + 44.596302 + ], + [ + -124.0440929, + 44.5960677 + ], + [ + -124.0441902, + 44.5959189 + ], + [ + -124.0444178, + 44.5955652 + ], + [ + -124.0447392, + 44.5950658 + ], + [ + -124.0447762, + 44.5950087 + ], + [ + -124.045414, + 44.5940325 + ], + [ + -124.045823, + 44.5933954 + ], + [ + -124.0458989, + 44.5932791 + ], + [ + -124.0470016, + 44.5916136 + ], + [ + -124.0479992, + 44.5901026 + ], + [ + -124.0482448, + 44.5897156 + ], + [ + -124.0486521, + 44.589074 + ], + [ + -124.0487487, + 44.5889251 + ], + [ + -124.0488878, + 44.5887144 + ], + [ + -124.0488702, + 44.5883396 + ], + [ + -124.0488663, + 44.5881486 + ], + [ + -124.0489163, + 44.5870931 + ], + [ + -124.0489614, + 44.5867031 + ], + [ + -124.0489684, + 44.5866445 + ], + [ + -124.0490846, + 44.5857016 + ], + [ + -124.0491101, + 44.5855136 + ], + [ + -124.0492295, + 44.5847058 + ], + [ + -124.0495689, + 44.5820681 + ], + [ + -124.0496682, + 44.5812851 + ], + [ + -124.0497143, + 44.5809719 + ], + [ + -124.0497754, + 44.5806079 + ], + [ + -124.0498157, + 44.580387 + ], + [ + -124.0498888, + 44.580016 + ], + [ + -124.0499289, + 44.5798248 + ], + [ + -124.049991, + 44.5795458 + ], + [ + -124.0501048, + 44.5790954 + ], + [ + -124.0501819, + 44.5788234 + ], + [ + -124.0502489, + 44.5785992 + ], + [ + -124.0503299, + 44.5783412 + ], + [ + -124.0504788, + 44.577909 + ], + [ + -124.0506926, + 44.5773389 + ], + [ + -124.0507113, + 44.5765417 + ], + [ + -124.050719, + 44.5761259 + ], + [ + -124.0507981, + 44.5751548 + ], + [ + -124.0508582, + 44.5747388 + ], + [ + -124.0510542, + 44.5737922 + ], + [ + -124.0511744, + 44.5733482 + ], + [ + -124.0514266, + 44.5725702 + ], + [ + -124.0516188, + 44.5720632 + ], + [ + -124.0516702, + 44.5719309 + ], + [ + -124.0521274, + 44.5707819 + ], + [ + -124.05214, + 44.5707505 + ], + [ + -124.0524466, + 44.5699888 + ], + [ + -124.0525597, + 44.5697014 + ], + [ + -124.0526757, + 44.5692532 + ], + [ + -124.0529972, + 44.5679805 + ], + [ + -124.0530778, + 44.5676848 + ], + [ + -124.0531812, + 44.5673316 + ], + [ + -124.0533227, + 44.5668176 + ], + [ + -124.0533273, + 44.5668013 + ], + [ + -124.0535105, + 44.5661412 + ], + [ + -124.053603, + 44.5657892 + ], + [ + -124.0540462, + 44.5639335 + ], + [ + -124.0540881, + 44.563766 + ], + [ + -124.0542433, + 44.5631721 + ], + [ + -124.0545181, + 44.5620823 + ], + [ + -124.0549865, + 44.5601085 + ], + [ + -124.0550582, + 44.5598288 + ], + [ + -124.0553361, + 44.5588188 + ], + [ + -124.0563624, + 44.5547468 + ], + [ + -124.0564254, + 44.554477 + ], + [ + -124.056521, + 44.5540349 + ], + [ + -124.0565863, + 44.5537212 + ], + [ + -124.056844, + 44.5521643 + ], + [ + -124.0574867, + 44.5475811 + ], + [ + -124.0575328, + 44.5472914 + ], + [ + -124.0577884, + 44.5458569 + ], + [ + -124.0580457, + 44.5442425 + ], + [ + -124.0582961, + 44.5424336 + ], + [ + -124.0583113, + 44.5423294 + ], + [ + -124.0587603, + 44.5393758 + ], + [ + -124.0588567, + 44.5382273 + ], + [ + -124.0588789, + 44.5380014 + ], + [ + -124.0592147, + 44.5350344 + ], + [ + -124.0592244, + 44.5349527 + ], + [ + -124.059356, + 44.5338893 + ], + [ + -124.0594315, + 44.5332148 + ], + [ + -124.0596776, + 44.5303962 + ], + [ + -124.0596961, + 44.5300862 + ], + [ + -124.0589069, + 44.5295149 + ], + [ + -124.058563, + 44.5292088 + ], + [ + -124.0570017, + 44.5275182 + ], + [ + -124.0567278, + 44.5271512 + ], + [ + -124.0556706, + 44.5253684 + ], + [ + -124.0555327, + 44.5250623 + ], + [ + -124.0548329, + 44.5224437 + ], + [ + -124.0548069, + 44.5221627 + ], + [ + -124.054778, + 44.521197 + ], + [ + -124.054787, + 44.520915 + ], + [ + -124.0548799, + 44.5199397 + ], + [ + -124.0549149, + 44.5197187 + ], + [ + -124.0553286, + 44.5181505 + ], + [ + -124.0553966, + 44.5179675 + ], + [ + -124.055817, + 44.5170154 + ], + [ + -124.055955, + 44.5167464 + ], + [ + -124.0567807, + 44.5154195 + ], + [ + -124.0569437, + 44.5151985 + ], + [ + -124.0582468, + 44.5137304 + ], + [ + -124.0585038, + 44.5134864 + ], + [ + -124.0603019, + 44.5120613 + ], + [ + -124.0606709, + 44.5118164 + ], + [ + -124.062938, + 44.5105734 + ], + [ + -124.0634019, + 44.5103654 + ], + [ + -124.0634432, + 44.5103494 + ], + [ + -124.0644614, + 44.5081867 + ], + [ + -124.0645924, + 44.5078705 + ], + [ + -124.0647557, + 44.5074774 + ], + [ + -124.0649311, + 44.507055 + ], + [ + -124.0649701, + 44.5069007 + ], + [ + -124.0650798, + 44.5064079 + ], + [ + -124.0654595, + 44.5046763 + ], + [ + -124.0655716, + 44.5040637 + ], + [ + -124.0656078, + 44.5038779 + ], + [ + -124.0659452, + 44.5022519 + ], + [ + -124.066513, + 44.499533 + ], + [ + -124.0665275, + 44.4994652 + ], + [ + -124.0666736, + 44.4987942 + ], + [ + -124.0667167, + 44.4986072 + ], + [ + -124.0668729, + 44.4979642 + ], + [ + -124.0669941, + 44.4975201 + ], + [ + -124.0671342, + 44.4970581 + ], + [ + -124.0672038, + 44.4968397 + ], + [ + -124.0673032, + 44.4965416 + ], + [ + -124.0677028, + 44.4953416 + ], + [ + -124.0686732, + 44.4933281 + ], + [ + -124.0701737, + 44.4914887 + ], + [ + -124.0721465, + 44.4898942 + ], + [ + -124.0745159, + 44.4886058 + ], + [ + -124.0771909, + 44.4876729 + ], + [ + -124.0800686, + 44.4871315 + ], + [ + -124.0830386, + 44.4870023 + ], + [ + -124.0859867, + 44.4872903 + ], + [ + -124.0887997, + 44.4879844 + ], + [ + -124.0913696, + 44.4890579 + ], + [ + -124.0935977, + 44.4904697 + ], + [ + -124.0953982, + 44.4921655 + ], + [ + -124.0967021, + 44.4940801 + ], + [ + -124.0974592, + 44.49614 + ], + [ + -124.0976403, + 44.498266 + ], + [ + -124.0972384, + 44.5003764 + ], + [ + -124.0968387, + 44.5015785 + ], + [ + -124.0967738, + 44.5017734 + ], + [ + -124.096734, + 44.5019048 + ], + [ + -124.0966548, + 44.5022315 + ], + [ + -124.0965367, + 44.5027749 + ], + [ + -124.0959805, + 44.5054451 + ], + [ + -124.0956642, + 44.5069733 + ], + [ + -124.0955443, + 44.5076303 + ], + [ + -124.0954893, + 44.5079045 + ], + [ + -124.0950778, + 44.5097855 + ], + [ + -124.0950723, + 44.5098107 + ], + [ + -124.0949354, + 44.5104267 + ], + [ + -124.0948831, + 44.5106475 + ], + [ + -124.0946983, + 44.5113816 + ], + [ + -124.0944073, + 44.5123047 + ], + [ + -124.0941934, + 44.5128678 + ], + [ + -124.0940971, + 44.5131102 + ], + [ + -124.0938675, + 44.5136635 + ], + [ + -124.093708, + 44.5140482 + ], + [ + -124.0934992, + 44.5145526 + ], + [ + -124.0933315, + 44.514932 + ], + [ + -124.0918854, + 44.5180068 + ], + [ + -124.0907986, + 44.5205046 + ], + [ + -124.0905625, + 44.5210831 + ], + [ + -124.0902697, + 44.5217256 + ], + [ + -124.0901597, + 44.5219436 + ], + [ + -124.0897849, + 44.5226159 + ], + [ + -124.0896489, + 44.5228379 + ], + [ + -124.0894525, + 44.5230958 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_15944_s_15958", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0711838, + 44.4367472 + ], + [ + -124.0711779, + 44.4367511 + ], + [ + -124.070164, + 44.4374258 + ], + [ + -124.0699401, + 44.4375718 + ], + [ + -124.0694764, + 44.4378683 + ], + [ + -124.0693746, + 44.4379376 + ], + [ + -124.0682167, + 44.4386505 + ], + [ + -124.0675397, + 44.4390265 + ], + [ + -124.0661779, + 44.439701 + ], + [ + -124.0657318, + 44.439897 + ], + [ + -124.0647535, + 44.440292 + ], + [ + -124.0647274, + 44.4403017 + ], + [ + -124.0647213, + 44.4403041 + ], + [ + -124.0645593, + 44.440368 + ], + [ + -124.0641553, + 44.440525 + ], + [ + -124.0635425, + 44.4407504 + ], + [ + -124.0630475, + 44.4409224 + ], + [ + -124.0615644, + 44.4413697 + ], + [ + -124.0609553, + 44.4415268 + ], + [ + -124.0578726, + 44.4420686 + ], + [ + -124.0574125, + 44.4421136 + ], + [ + -124.054895, + 44.4422083 + ], + [ + -124.0523903, + 44.442003 + ], + [ + -124.0518592, + 44.4419269 + ], + [ + -124.0493792, + 44.4413828 + ], + [ + -124.0492809, + 44.4413793 + ], + [ + -124.0462449, + 44.4410491 + ], + [ + -124.0459088, + 44.4409871 + ], + [ + -124.0437857, + 44.4404728 + ], + [ + -124.0417917, + 44.4397399 + ], + [ + -124.0411146, + 44.4394439 + ], + [ + -124.0380488, + 44.4376744 + ], + [ + -124.0376968, + 44.4374104 + ], + [ + -124.036392, + 44.4362897 + ], + [ + -124.0361691, + 44.4360697 + ], + [ + -124.0345755, + 44.4340872 + ], + [ + -124.0343825, + 44.4337752 + ], + [ + -124.0339758, + 44.4330476 + ], + [ + -124.0336709, + 44.4324396 + ], + [ + -124.0335501, + 44.4321891 + ], + [ + -124.0334421, + 44.4319561 + ], + [ + -124.0327131, + 44.4303775 + ], + [ + -124.0324011, + 44.4296078 + ], + [ + -124.0322982, + 44.4293138 + ], + [ + -124.0320333, + 44.4283884 + ], + [ + -124.032004, + 44.4282575 + ], + [ + -124.0319832, + 44.4281658 + ], + [ + -124.0319127, + 44.427875 + ], + [ + -124.0317825, + 44.4271637 + ], + [ + -124.0316151, + 44.427032 + ], + [ + -124.0315913, + 44.4270133 + ], + [ + -124.0315825, + 44.4270064 + ], + [ + -124.0315649, + 44.4269935 + ], + [ + -124.0313149, + 44.4268518 + ], + [ + -124.0311561, + 44.4267606 + ], + [ + -124.0309724, + 44.4266536 + ], + [ + -124.0305965, + 44.4264354 + ], + [ + -124.0304614, + 44.4263573 + ], + [ + -124.0302918, + 44.4262601 + ], + [ + -124.0300689, + 44.4261329 + ], + [ + -124.0300666, + 44.4261316 + ], + [ + -124.029174, + 44.425764 + ], + [ + -124.0290672, + 44.4257093 + ], + [ + -124.0268133, + 44.4242963 + ], + [ + -124.024991, + 44.4225934 + ], + [ + -124.0236714, + 44.420667 + ], + [ + -124.0229059, + 44.4185923 + ], + [ + -124.0227243, + 44.4164502 + ], + [ + -124.0231337, + 44.4143243 + ], + [ + -124.024118, + 44.4122976 + ], + [ + -124.0256387, + 44.410449 + ], + [ + -124.0257334, + 44.4103562 + ], + [ + -124.0277009, + 44.4087778 + ], + [ + -124.0300579, + 44.4075028 + ], + [ + -124.0327149, + 44.4065795 + ], + [ + -124.0355711, + 44.4060429 + ], + [ + -124.0385183, + 44.4059134 + ], + [ + -124.0414446, + 44.4061959 + ], + [ + -124.044239, + 44.4068796 + ], + [ + -124.0467956, + 44.4079387 + ], + [ + -124.0469985, + 44.4080429 + ], + [ + -124.0475072, + 44.4083158 + ], + [ + -124.0484101, + 44.4088217 + ], + [ + -124.0485024, + 44.4088738 + ], + [ + -124.0486394, + 44.4089518 + ], + [ + -124.04867, + 44.4089693 + ], + [ + -124.0489662, + 44.4091388 + ], + [ + -124.0491914, + 44.4092673 + ], + [ + -124.0492116, + 44.4092789 + ], + [ + -124.0494176, + 44.4093969 + ], + [ + -124.04947, + 44.409427 + ], + [ + -124.049643, + 44.409527 + ], + [ + -124.0496651, + 44.4095398 + ], + [ + -124.050151, + 44.4098217 + ], + [ + -124.0501971, + 44.4098486 + ], + [ + -124.0502123, + 44.4098575 + ], + [ + -124.0505704, + 44.4100604 + ], + [ + -124.050755, + 44.4101666 + ], + [ + -124.051184, + 44.4104176 + ], + [ + -124.0520048, + 44.4109342 + ], + [ + -124.0525028, + 44.4112712 + ], + [ + -124.0528931, + 44.4115449 + ], + [ + -124.0533991, + 44.4119129 + ], + [ + -124.0538289, + 44.4122386 + ], + [ + -124.054036, + 44.4124022 + ], + [ + -124.0544172, + 44.4127019 + ], + [ + -124.0546415, + 44.4128822 + ], + [ + -124.0554686, + 44.4135622 + ], + [ + -124.0554996, + 44.4135878 + ], + [ + -124.0557132, + 44.4137645 + ], + [ + -124.0558343, + 44.4138641 + ], + [ + -124.0559823, + 44.413982 + ], + [ + -124.056144, + 44.4141129 + ], + [ + -124.0564721, + 44.4143828 + ], + [ + -124.0565335, + 44.414432 + ], + [ + -124.0568482, + 44.4146711 + ], + [ + -124.0571334, + 44.414894 + ], + [ + -124.0571806, + 44.4149319 + ], + [ + -124.0572767, + 44.4150057 + ], + [ + -124.0575738, + 44.4152404 + ], + [ + -124.0578208, + 44.4154413 + ], + [ + -124.0590498, + 44.4166503 + ], + [ + -124.0593515, + 44.416578 + ], + [ + -124.0620362, + 44.4161251 + ], + [ + -124.0647909, + 44.4160281 + ], + [ + -124.0653218, + 44.4160441 + ], + [ + -124.0654324, + 44.4160477 + ], + [ + -124.0656678, + 44.4160561 + ], + [ + -124.0686074, + 44.416369 + ], + [ + -124.0714053, + 44.417087 + ], + [ + -124.0739542, + 44.4181823 + ], + [ + -124.0761561, + 44.4196129 + ], + [ + -124.0779263, + 44.4213238 + ], + [ + -124.0791969, + 44.4232494 + ], + [ + -124.0799189, + 44.4253155 + ], + [ + -124.0800646, + 44.427443 + ], + [ + -124.0796283, + 44.4295499 + ], + [ + -124.0786267, + 44.4315554 + ], + [ + -124.0770983, + 44.4333822 + ], + [ + -124.0751017, + 44.4349603 + ], + [ + -124.0727137, + 44.436229 + ], + [ + -124.0711838, + 44.4367472 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_15946_s_22289", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0822808, + 44.4280552 + ], + [ + -124.0822928, + 44.4280567 + ], + [ + -124.0822885, + 44.4280754 + ], + [ + -124.0822824, + 44.4281175 + ], + [ + -124.0822521, + 44.4282257 + ], + [ + -124.0822509, + 44.4282304 + ], + [ + -124.0822507, + 44.4282304 + ], + [ + -124.0817157, + 44.4301369 + ], + [ + -124.0806274, + 44.4320434 + ], + [ + -124.0790563, + 44.4337684 + ], + [ + -124.0770591, + 44.43525 + ], + [ + -124.0747074, + 44.4364348 + ], + [ + -124.0720858, + 44.4372802 + ], + [ + -124.0692886, + 44.437756 + ], + [ + -124.0664163, + 44.4378449 + ], + [ + -124.0656352, + 44.4378159 + ], + [ + -124.0655397, + 44.4378121 + ], + [ + -124.0654495, + 44.4378084 + ], + [ + -124.0652733, + 44.4378015 + ], + [ + -124.0651553, + 44.4377966 + ], + [ + -124.0650726, + 44.4377929 + ], + [ + -124.0649198, + 44.4377863 + ], + [ + -124.0619845, + 44.4374486 + ], + [ + -124.0591976, + 44.4367071 + ], + [ + -124.0566662, + 44.4355903 + ], + [ + -124.0544876, + 44.434141 + ], + [ + -124.0527456, + 44.432415 + ], + [ + -124.0515072, + 44.4304787 + ], + [ + -124.0508198, + 44.4284064 + ], + [ + -124.0507098, + 44.4262779 + ], + [ + -124.0511814, + 44.4241748 + ], + [ + -124.0522164, + 44.4221781 + ], + [ + -124.0537749, + 44.4203645 + ], + [ + -124.0557971, + 44.4188036 + ], + [ + -124.0582053, + 44.4175554 + ], + [ + -124.0583573, + 44.4175054 + ], + [ + -124.0587182, + 44.4172858 + ], + [ + -124.0613155, + 44.4162507 + ], + [ + -124.0641446, + 44.4155985 + ], + [ + -124.0670969, + 44.4153544 + ], + [ + -124.0700588, + 44.4155277 + ], + [ + -124.0729167, + 44.4161118 + ], + [ + -124.0755608, + 44.4170841 + ], + [ + -124.0778895, + 44.4184075 + ], + [ + -124.0798134, + 44.420031 + ], + [ + -124.0812584, + 44.4218923 + ], + [ + -124.0821691, + 44.4239199 + ], + [ + -124.0825103, + 44.4260358 + ], + [ + -124.0822808, + 44.4280552 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_15947_s_15946", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0705935, + 44.4372412 + ], + [ + -124.0693709, + 44.4380816 + ], + [ + -124.0668653, + 44.4392281 + ], + [ + -124.0640957, + 44.4400023 + ], + [ + -124.0611683, + 44.4403744 + ], + [ + -124.0581959, + 44.4403302 + ], + [ + -124.0552927, + 44.4398712 + ], + [ + -124.0525703, + 44.4390152 + ], + [ + -124.0501334, + 44.4377952 + ], + [ + -124.0480756, + 44.4362578 + ], + [ + -124.0479623, + 44.4361546 + ], + [ + -124.0464286, + 44.4344508 + ], + [ + -124.0453634, + 44.4325726 + ], + [ + -124.0448037, + 44.4305852 + ], + [ + -124.0447691, + 44.428558 + ], + [ + -124.0452607, + 44.4265614 + ], + [ + -124.0462612, + 44.424665 + ], + [ + -124.0477359, + 44.4229348 + ], + [ + -124.0496334, + 44.4214311 + ], + [ + -124.0501491, + 44.4210921 + ], + [ + -124.0504702, + 44.4208753 + ], + [ + -124.050567, + 44.4208106 + ], + [ + -124.0514996, + 44.4201919 + ], + [ + -124.0517402, + 44.4200322 + ], + [ + -124.0522953, + 44.4196532 + ], + [ + -124.0526643, + 44.4194094 + ], + [ + -124.0529663, + 44.4192164 + ], + [ + -124.0530248, + 44.4191793 + ], + [ + -124.0532254, + 44.4190524 + ], + [ + -124.0533173, + 44.4189936 + ], + [ + -124.0566469, + 44.4173756 + ], + [ + -124.0569629, + 44.4172626 + ], + [ + -124.0589296, + 44.416679 + ], + [ + -124.0593515, + 44.416578 + ], + [ + -124.0620362, + 44.4161251 + ], + [ + -124.0647909, + 44.4160281 + ], + [ + -124.0653218, + 44.4160441 + ], + [ + -124.0658879, + 44.4160615 + ], + [ + -124.0660654, + 44.4160678 + ], + [ + -124.0663204, + 44.4160778 + ], + [ + -124.0666841, + 44.4160922 + ], + [ + -124.0696209, + 44.4164181 + ], + [ + -124.0724127, + 44.4171483 + ], + [ + -124.0749522, + 44.4182547 + ], + [ + -124.0771418, + 44.419695 + ], + [ + -124.0788974, + 44.4214136 + ], + [ + -124.0801515, + 44.4233447 + ], + [ + -124.0808559, + 44.4254141 + ], + [ + -124.0809834, + 44.4275421 + ], + [ + -124.0805291, + 44.4296471 + ], + [ + -124.0795104, + 44.4316481 + ], + [ + -124.0779664, + 44.4334682 + ], + [ + -124.0759563, + 44.4350375 + ], + [ + -124.0735575, + 44.4362956 + ], + [ + -124.0708622, + 44.4371942 + ], + [ + -124.0705935, + 44.4372412 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_15947_s_2456758", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0712339, + 44.4367815 + ], + [ + -124.0693672, + 44.4380722 + ], + [ + -124.0668663, + 44.4392239 + ], + [ + -124.0640997, + 44.4400038 + ], + [ + -124.0611739, + 44.440382 + ], + [ + -124.0582013, + 44.4403439 + ], + [ + -124.0552963, + 44.439891 + ], + [ + -124.0525704, + 44.4390407 + ], + [ + -124.0501286, + 44.4378256 + ], + [ + -124.0480647, + 44.4362926 + ], + [ + -124.047957, + 44.4361951 + ], + [ + -124.0464076, + 44.4344825 + ], + [ + -124.0453326, + 44.4325925 + ], + [ + -124.0447699, + 44.4305918 + ], + [ + -124.0447392, + 44.428551 + ], + [ + -124.0452417, + 44.4265422 + ], + [ + -124.0462595, + 44.424636 + ], + [ + -124.0477566, + 44.4228999 + ], + [ + -124.0496803, + 44.421395 + ], + [ + -124.0500523, + 44.4211539 + ], + [ + -124.0505337, + 44.4208327 + ], + [ + -124.050567, + 44.4208106 + ], + [ + -124.0514996, + 44.4201919 + ], + [ + -124.0517402, + 44.4200322 + ], + [ + -124.0522953, + 44.4196532 + ], + [ + -124.0526643, + 44.4194094 + ], + [ + -124.0529663, + 44.4192164 + ], + [ + -124.0530248, + 44.4191793 + ], + [ + -124.0532254, + 44.4190524 + ], + [ + -124.0533173, + 44.4189936 + ], + [ + -124.0566469, + 44.4173756 + ], + [ + -124.0569629, + 44.4172626 + ], + [ + -124.0589296, + 44.416679 + ], + [ + -124.0593515, + 44.416578 + ], + [ + -124.0620362, + 44.4161251 + ], + [ + -124.0647909, + 44.4160281 + ], + [ + -124.065316, + 44.4160439 + ], + [ + -124.065682, + 44.4160548 + ], + [ + -124.068625, + 44.4163507 + ], + [ + -124.071431, + 44.4170524 + ], + [ + -124.0739921, + 44.4181329 + ], + [ + -124.07621, + 44.4195507 + ], + [ + -124.0779995, + 44.4212513 + ], + [ + -124.0792918, + 44.4231695 + ], + [ + -124.0800371, + 44.4252314 + ], + [ + -124.0802068, + 44.4273579 + ], + [ + -124.0797942, + 44.4294673 + ], + [ + -124.0788153, + 44.4314785 + ], + [ + -124.0773075, + 44.4333142 + ], + [ + -124.0753288, + 44.4349038 + ], + [ + -124.0729552, + 44.4361862 + ], + [ + -124.0712339, + 44.4367815 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_15950_s_2456756", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.1230281, + 44.3122493 + ], + [ + -124.1231881, + 44.3129865 + ], + [ + -124.1232257, + 44.3133657 + ], + [ + -124.1231885, + 44.3152196 + ], + [ + -124.123135, + 44.3156027 + ], + [ + -124.122573, + 44.3176398 + ], + [ + -124.1214815, + 44.3195628 + ], + [ + -124.1199002, + 44.3213017 + ], + [ + -124.1178869, + 44.3227928 + ], + [ + -124.117437, + 44.3230183 + ], + [ + -124.1170405, + 44.3240554 + ], + [ + -124.1170213, + 44.3241054 + ], + [ + -124.1168324, + 44.3245904 + ], + [ + -124.1168315, + 44.3245902 + ], + [ + -124.1166258, + 44.3251278 + ], + [ + -124.1166226, + 44.3251349 + ], + [ + -124.1165565, + 44.325299 + ], + [ + -124.1161512, + 44.3263089 + ], + [ + -124.1161142, + 44.3264008 + ], + [ + -124.1161032, + 44.3264281 + ], + [ + -124.1160336, + 44.3265994 + ], + [ + -124.1159812, + 44.3267369 + ], + [ + -124.1158146, + 44.3271913 + ], + [ + -124.115707, + 44.3274697 + ], + [ + -124.1156584, + 44.3275892 + ], + [ + -124.1156242, + 44.3276809 + ], + [ + -124.115579, + 44.3277994 + ], + [ + -124.1149614, + 44.3293835 + ], + [ + -124.1149497, + 44.3294133 + ], + [ + -124.1146229, + 44.3302423 + ], + [ + -124.1145852, + 44.3303364 + ], + [ + -124.1142376, + 44.3311887 + ], + [ + -124.1142183, + 44.3312536 + ], + [ + -124.1140519, + 44.3316548 + ], + [ + -124.1139359, + 44.3320262 + ], + [ + -124.1136812, + 44.3327306 + ], + [ + -124.1136202, + 44.3328786 + ], + [ + -124.1136061, + 44.3329127 + ], + [ + -124.1132592, + 44.3337448 + ], + [ + -124.1131027, + 44.3341318 + ], + [ + -124.1131003, + 44.3341377 + ], + [ + -124.1130349, + 44.3343737 + ], + [ + -124.1129535, + 44.3347607 + ], + [ + -124.1128695, + 44.3351191 + ], + [ + -124.1127381, + 44.3356275 + ], + [ + -124.1125761, + 44.3363051 + ], + [ + -124.1117773, + 44.3399456 + ], + [ + -124.1115533, + 44.341014 + ], + [ + -124.1115449, + 44.3410533 + ], + [ + -124.1112364, + 44.3424887 + ], + [ + -124.1110386, + 44.3434099 + ], + [ + -124.1107896, + 44.3446237 + ], + [ + -124.1106784, + 44.3451988 + ], + [ + -124.1106179, + 44.3454838 + ], + [ + -124.1101728, + 44.3474097 + ], + [ + -124.109914, + 44.3486355 + ], + [ + -124.1098628, + 44.3488619 + ], + [ + -124.1097769, + 44.3492179 + ], + [ + -124.1097462, + 44.349341 + ], + [ + -124.10969, + 44.3495587 + ], + [ + -124.1093814, + 44.3510941 + ], + [ + -124.1093533, + 44.3512279 + ], + [ + -124.1092372, + 44.3517588 + ], + [ + -124.1090343, + 44.3527567 + ], + [ + -124.1089937, + 44.3529446 + ], + [ + -124.1089857, + 44.3529796 + ], + [ + -124.1082209, + 44.3550377 + ], + [ + -124.1069112, + 44.3569492 + ], + [ + -124.1051067, + 44.3586406 + ], + [ + -124.1028769, + 44.3600469 + ], + [ + -124.1003073, + 44.3611141 + ], + [ + -124.0974969, + 44.361801 + ], + [ + -124.0945537, + 44.3620813 + ], + [ + -124.0915908, + 44.3619443 + ], + [ + -124.0887221, + 44.3613951 + ], + [ + -124.0860579, + 44.3604549 + ], + [ + -124.0837008, + 44.3591598 + ], + [ + -124.0817412, + 44.3575597 + ], + [ + -124.0802544, + 44.355716 + ], + [ + -124.0792977, + 44.3536996 + ], + [ + -124.0789076, + 44.3515881 + ], + [ + -124.0790852, + 44.3496173 + ], + [ + -124.0790665, + 44.3496153 + ], + [ + -124.0792818, + 44.3485594 + ], + [ + -124.0793064, + 44.3484431 + ], + [ + -124.0794208, + 44.347921 + ], + [ + -124.0797598, + 44.346239 + ], + [ + -124.0798577, + 44.345813 + ], + [ + -124.0799529, + 44.3454445 + ], + [ + -124.0799968, + 44.3452632 + ], + [ + -124.0802481, + 44.3440756 + ], + [ + -124.0802814, + 44.3439252 + ], + [ + -124.080712, + 44.3420664 + ], + [ + -124.0808045, + 44.3415892 + ], + [ + -124.0808224, + 44.3414995 + ], + [ + -124.0810887, + 44.3402045 + ], + [ + -124.081104, + 44.3401319 + ], + [ + -124.0813103, + 44.3391739 + ], + [ + -124.0816156, + 44.3377564 + ], + [ + -124.0818438, + 44.3366711 + ], + [ + -124.0818595, + 44.3365978 + ], + [ + -124.0826845, + 44.3328469 + ], + [ + -124.0827184, + 44.3326992 + ], + [ + -124.0829156, + 44.3318762 + ], + [ + -124.0829513, + 44.331733 + ], + [ + -124.0830441, + 44.3313746 + ], + [ + -124.083048, + 44.3313147 + ], + [ + -124.0831861, + 44.3307187 + ], + [ + -124.0832725, + 44.3303793 + ], + [ + -124.0834787, + 44.3296363 + ], + [ + -124.0835526, + 44.3293855 + ], + [ + -124.0836387, + 44.3291095 + ], + [ + -124.0838764, + 44.3284462 + ], + [ + -124.0840296, + 44.3280683 + ], + [ + -124.0842029, + 44.3276404 + ], + [ + -124.0842382, + 44.3275544 + ], + [ + -124.0845096, + 44.3269043 + ], + [ + -124.0845454, + 44.3267899 + ], + [ + -124.0846939, + 44.3264385 + ], + [ + -124.0847499, + 44.3262505 + ], + [ + -124.085026, + 44.3254677 + ], + [ + -124.0855131, + 44.3242747 + ], + [ + -124.0858158, + 44.3235078 + ], + [ + -124.0864053, + 44.3219979 + ], + [ + -124.0864612, + 44.3218482 + ], + [ + -124.0865524, + 44.3216144 + ], + [ + -124.086592, + 44.3215171 + ], + [ + -124.0867269, + 44.3211499 + ], + [ + -124.0867662, + 44.3210448 + ], + [ + -124.0868713, + 44.3207698 + ], + [ + -124.0869382, + 44.3206 + ], + [ + -124.0870358, + 44.3203599 + ], + [ + -124.0874727, + 44.3192729 + ], + [ + -124.0874774, + 44.3192611 + ], + [ + -124.0875985, + 44.3189611 + ], + [ + -124.0876107, + 44.3189322 + ], + [ + -124.087681, + 44.3187357 + ], + [ + -124.0878604, + 44.3182757 + ], + [ + -124.0883151, + 44.3170877 + ], + [ + -124.088368, + 44.3169531 + ], + [ + -124.088454, + 44.3167391 + ], + [ + -124.0884714, + 44.3166961 + ], + [ + -124.0886619, + 44.3162298 + ], + [ + -124.0888899, + 44.3156388 + ], + [ + -124.0889037, + 44.3156033 + ], + [ + -124.0891684, + 44.3149264 + ], + [ + -124.0896742, + 44.313619 + ], + [ + -124.0896777, + 44.3135851 + ], + [ + -124.0901765, + 44.311502 + ], + [ + -124.0903406, + 44.3111938 + ], + [ + -124.0903305, + 44.3109574 + ], + [ + -124.0908205, + 44.3088566 + ], + [ + -124.0918717, + 44.3068648 + ], + [ + -124.0934438, + 44.3050586 + ], + [ + -124.0954763, + 44.3035072 + ], + [ + -124.0978911, + 44.3022703 + ], + [ + -124.1005955, + 44.3013955 + ], + [ + -124.1034855, + 44.3009163 + ], + [ + -124.1064501, + 44.3008511 + ], + [ + -124.1073662, + 44.3008956 + ], + [ + -124.1102258, + 44.3012343 + ], + [ + -124.112943, + 44.3019583 + ], + [ + -124.1147594, + 44.3027528 + ], + [ + -124.1148198, + 44.3027697 + ], + [ + -124.1152793, + 44.3029802 + ], + [ + -124.1154182, + 44.3030409 + ], + [ + -124.1154329, + 44.3030505 + ], + [ + -124.1173208, + 44.3039154 + ], + [ + -124.1194625, + 44.3053894 + ], + [ + -124.1211626, + 44.3071352 + ], + [ + -124.1223558, + 44.3090855 + ], + [ + -124.1229962, + 44.3111656 + ], + [ + -124.1230281, + 44.3122493 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_15954_s_2456757", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.1014271, + 44.3940125 + ], + [ + -124.1014089, + 44.3942373 + ], + [ + -124.1014003, + 44.3944832 + ], + [ + -124.1013789, + 44.3948491 + ], + [ + -124.1013089, + 44.3957025 + ], + [ + -124.1012445, + 44.3969531 + ], + [ + -124.1012128, + 44.397577 + ], + [ + -124.1012048, + 44.3977337 + ], + [ + -124.1011816, + 44.3981843 + ], + [ + -124.1011777, + 44.3982543 + ], + [ + -124.1011687, + 44.3984023 + ], + [ + -124.1010808, + 44.3998386 + ], + [ + -124.1010489, + 44.400212 + ], + [ + -124.1010049, + 44.4006145 + ], + [ + -124.100913, + 44.4019318 + ], + [ + -124.1008827, + 44.4022636 + ], + [ + -124.1008302, + 44.4027301 + ], + [ + -124.1008293, + 44.4027386 + ], + [ + -124.1008113, + 44.4028948 + ], + [ + -124.1007514, + 44.4033728 + ], + [ + -124.1007195, + 44.4036008 + ], + [ + -124.1005997, + 44.4043738 + ], + [ + -124.1005802, + 44.4044932 + ], + [ + -124.1004454, + 44.4052832 + ], + [ + -124.100416, + 44.4054454 + ], + [ + -124.1000664, + 44.4072665 + ], + [ + -124.0999824, + 44.4077445 + ], + [ + -124.0999488, + 44.4079237 + ], + [ + -124.0997923, + 44.4087088 + ], + [ + -124.099659, + 44.4095065 + ], + [ + -124.0996447, + 44.4095895 + ], + [ + -124.0995299, + 44.4102345 + ], + [ + -124.0994855, + 44.4104643 + ], + [ + -124.099051, + 44.412549 + ], + [ + -124.0990105, + 44.4128302 + ], + [ + -124.0987502, + 44.4140044 + ], + [ + -124.0985054, + 44.4148184 + ], + [ + -124.0979547, + 44.4161993 + ], + [ + -124.0977028, + 44.4167023 + ], + [ + -124.0972438, + 44.4175143 + ], + [ + -124.0971003, + 44.4177414 + ], + [ + -124.0969707, + 44.4179796 + ], + [ + -124.0967263, + 44.4184024 + ], + [ + -124.0966233, + 44.4185704 + ], + [ + -124.0950782, + 44.4205175 + ], + [ + -124.0947254, + 44.4208713 + ], + [ + -124.0943527, + 44.4212461 + ], + [ + -124.0940281, + 44.4215603 + ], + [ + -124.0935992, + 44.4219603 + ], + [ + -124.0934046, + 44.4221416 + ], + [ + -124.0933622, + 44.4221182 + ], + [ + -124.0923424, + 44.4230696 + ], + [ + -124.0901059, + 44.4244735 + ], + [ + -124.0875299, + 44.4255375 + ], + [ + -124.0847136, + 44.4262208 + ], + [ + -124.0836607, + 44.4263194 + ], + [ + -124.0816584, + 44.4267022 + ], + [ + -124.0785191, + 44.4268214 + ], + [ + -124.0783637, + 44.4268157 + ], + [ + -124.0770918, + 44.4269718 + ], + [ + -124.0741204, + 44.4269147 + ], + [ + -124.0712218, + 44.4264433 + ], + [ + -124.0685072, + 44.4255757 + ], + [ + -124.0660811, + 44.4243452 + ], + [ + -124.0640368, + 44.4227991 + ], + [ + -124.0624527, + 44.4209968 + ], + [ + -124.0613897, + 44.4190077 + ], + [ + -124.0608887, + 44.4169082 + ], + [ + -124.0609688, + 44.4147789 + ], + [ + -124.0616269, + 44.4127018 + ], + [ + -124.0628376, + 44.4107566 + ], + [ + -124.0645544, + 44.4090181 + ], + [ + -124.0667113, + 44.407553 + ], + [ + -124.0674542, + 44.4072175 + ], + [ + -124.0676466, + 44.4071181 + ], + [ + -124.0678293, + 44.4070481 + ], + [ + -124.0692253, + 44.4064176 + ], + [ + -124.0696636, + 44.4062973 + ], + [ + -124.0697138, + 44.4059975 + ], + [ + -124.0697587, + 44.4057533 + ], + [ + -124.0699221, + 44.4049358 + ], + [ + -124.0700014, + 44.4044855 + ], + [ + -124.0700242, + 44.4043616 + ], + [ + -124.0703711, + 44.4025596 + ], + [ + -124.0704822, + 44.4019105 + ], + [ + -124.0705745, + 44.4013168 + ], + [ + -124.0706184, + 44.4009635 + ], + [ + -124.070651, + 44.4006762 + ], + [ + -124.0707427, + 44.3993712 + ], + [ + -124.0707703, + 44.399064 + ], + [ + -124.0708109, + 44.3986957 + ], + [ + -124.0708907, + 44.3973967 + ], + [ + -124.0708927, + 44.3973655 + ], + [ + -124.0708953, + 44.3973256 + ], + [ + -124.0709155, + 44.396937 + ], + [ + -124.0709234, + 44.3967833 + ], + [ + -124.0709556, + 44.3961557 + ], + [ + -124.0710272, + 44.3947781 + ], + [ + -124.0710432, + 44.3945409 + ], + [ + -124.0711083, + 44.3937517 + ], + [ + -124.0711169, + 44.3935088 + ], + [ + -124.071138, + 44.3931489 + ], + [ + -124.0711607, + 44.3928716 + ], + [ + -124.0711805, + 44.3924404 + ], + [ + -124.071246, + 44.3917265 + ], + [ + -124.0712891, + 44.3914145 + ], + [ + -124.0715879, + 44.3900906 + ], + [ + -124.071673, + 44.3898206 + ], + [ + -124.0719737, + 44.3890123 + ], + [ + -124.0722498, + 44.3883704 + ], + [ + -124.0733993, + 44.3864063 + ], + [ + -124.0750609, + 44.3846408 + ], + [ + -124.0771709, + 44.3831416 + ], + [ + -124.079648, + 44.3819664 + ], + [ + -124.0823971, + 44.3811602 + ], + [ + -124.0853127, + 44.3807541 + ], + [ + -124.0882827, + 44.3807637 + ], + [ + -124.0911931, + 44.3811885 + ], + [ + -124.093932, + 44.3820124 + ], + [ + -124.0963943, + 44.3832035 + ], + [ + -124.0984854, + 44.3847162 + ], + [ + -124.1001248, + 44.3864923 + ], + [ + -124.1012497, + 44.3884637 + ], + [ + -124.1018166, + 44.3905545 + ], + [ + -124.1018038, + 44.3926845 + ], + [ + -124.1014271, + 44.3940125 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_15958_s_15947", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0606105, + 44.4186654 + ], + [ + -124.0631002, + 44.4188587 + ], + [ + -124.0659357, + 44.4194968 + ], + [ + -124.0685431, + 44.420519 + ], + [ + -124.0708223, + 44.4218861 + ], + [ + -124.0726856, + 44.4235455 + ], + [ + -124.0740615, + 44.4254336 + ], + [ + -124.074897, + 44.4274777 + ], + [ + -124.07516, + 44.4295994 + ], + [ + -124.0751545, + 44.4300048 + ], + [ + -124.075162, + 44.4303315 + ], + [ + -124.0749118, + 44.4324839 + ], + [ + -124.0740722, + 44.4345583 + ], + [ + -124.0726766, + 44.4364727 + ], + [ + -124.0707799, + 44.4381514 + ], + [ + -124.0684571, + 44.4395282 + ], + [ + -124.0658, + 44.4405485 + ], + [ + -124.0629136, + 44.4411721 + ], + [ + -124.0620201, + 44.4412323 + ], + [ + -124.0615644, + 44.4413697 + ], + [ + -124.0609553, + 44.4415268 + ], + [ + -124.0578726, + 44.4420686 + ], + [ + -124.0574125, + 44.4421136 + ], + [ + -124.054895, + 44.4422083 + ], + [ + -124.0523903, + 44.442003 + ], + [ + -124.0518592, + 44.4419269 + ], + [ + -124.0493792, + 44.4413828 + ], + [ + -124.0492809, + 44.4413793 + ], + [ + -124.0462449, + 44.4410491 + ], + [ + -124.0459088, + 44.4409871 + ], + [ + -124.0437857, + 44.4404728 + ], + [ + -124.0417917, + 44.4397399 + ], + [ + -124.0411146, + 44.4394439 + ], + [ + -124.0380488, + 44.4376744 + ], + [ + -124.0376968, + 44.4374104 + ], + [ + -124.036392, + 44.4362897 + ], + [ + -124.0361691, + 44.4360697 + ], + [ + -124.0345755, + 44.4340872 + ], + [ + -124.0343825, + 44.4337752 + ], + [ + -124.0339758, + 44.4330476 + ], + [ + -124.0336709, + 44.4324396 + ], + [ + -124.0335501, + 44.4321891 + ], + [ + -124.0334421, + 44.4319561 + ], + [ + -124.0327131, + 44.4303775 + ], + [ + -124.0324011, + 44.4296078 + ], + [ + -124.0322982, + 44.4293138 + ], + [ + -124.0320333, + 44.4283884 + ], + [ + -124.032004, + 44.4282575 + ], + [ + -124.0319832, + 44.4281658 + ], + [ + -124.0319127, + 44.427875 + ], + [ + -124.0317825, + 44.4271637 + ], + [ + -124.0316151, + 44.427032 + ], + [ + -124.0315913, + 44.4270133 + ], + [ + -124.0315825, + 44.4270064 + ], + [ + -124.0315649, + 44.4269935 + ], + [ + -124.0313149, + 44.4268518 + ], + [ + -124.0311561, + 44.4267606 + ], + [ + -124.0309724, + 44.4266536 + ], + [ + -124.0305965, + 44.4264354 + ], + [ + -124.0304614, + 44.4263573 + ], + [ + -124.0303534, + 44.4262954 + ], + [ + -124.0301985, + 44.4262274 + ], + [ + -124.028093, + 44.4251123 + ], + [ + -124.0279882, + 44.4250461 + ], + [ + -124.0259628, + 44.4234872 + ], + [ + -124.0244008, + 44.421675 + ], + [ + -124.0233622, + 44.4196793 + ], + [ + -124.0228869, + 44.4175767 + ], + [ + -124.022993, + 44.415448 + ], + [ + -124.0236765, + 44.4133751 + ], + [ + -124.024911, + 44.4114376 + ], + [ + -124.0266491, + 44.4097099 + ], + [ + -124.0288238, + 44.4082584 + ], + [ + -124.0313517, + 44.4071389 + ], + [ + -124.0341357, + 44.4063943 + ], + [ + -124.0360829, + 44.406168 + ], + [ + -124.0364467, + 44.4061108 + ], + [ + -124.0365917, + 44.4061088 + ], + [ + -124.0370687, + 44.4060534 + ], + [ + -124.0383098, + 44.406085 + ], + [ + -124.0394182, + 44.4060696 + ], + [ + -124.0398426, + 44.4061241 + ], + [ + -124.0400382, + 44.4061291 + ], + [ + -124.0405281, + 44.406212 + ], + [ + -124.0423438, + 44.4064448 + ], + [ + -124.0451111, + 44.407222 + ], + [ + -124.0476138, + 44.4083712 + ], + [ + -124.0484635, + 44.4088517 + ], + [ + -124.0485024, + 44.4088738 + ], + [ + -124.0486394, + 44.4089518 + ], + [ + -124.04867, + 44.4089693 + ], + [ + -124.0489662, + 44.4091388 + ], + [ + -124.0491914, + 44.4092673 + ], + [ + -124.0492116, + 44.4092789 + ], + [ + -124.0494176, + 44.4093969 + ], + [ + -124.04947, + 44.409427 + ], + [ + -124.049643, + 44.409527 + ], + [ + -124.0496666, + 44.4095407 + ], + [ + -124.0500198, + 44.4097457 + ], + [ + -124.0506187, + 44.4100879 + ], + [ + -124.050755, + 44.4101666 + ], + [ + -124.051184, + 44.4104176 + ], + [ + -124.0520048, + 44.4109342 + ], + [ + -124.0525028, + 44.4112712 + ], + [ + -124.0528931, + 44.4115449 + ], + [ + -124.0533991, + 44.4119129 + ], + [ + -124.0538289, + 44.4122386 + ], + [ + -124.054036, + 44.4124022 + ], + [ + -124.0544172, + 44.4127019 + ], + [ + -124.0546415, + 44.4128822 + ], + [ + -124.0554686, + 44.4135622 + ], + [ + -124.0554996, + 44.4135878 + ], + [ + -124.0557132, + 44.4137645 + ], + [ + -124.0558343, + 44.4138641 + ], + [ + -124.0559823, + 44.413982 + ], + [ + -124.056144, + 44.4141129 + ], + [ + -124.0564721, + 44.4143828 + ], + [ + -124.0565335, + 44.414432 + ], + [ + -124.0568482, + 44.4146711 + ], + [ + -124.0571334, + 44.414894 + ], + [ + -124.0571806, + 44.4149319 + ], + [ + -124.0572767, + 44.4150057 + ], + [ + -124.0575738, + 44.4152404 + ], + [ + -124.0578208, + 44.4154413 + ], + [ + -124.05947, + 44.4170636 + ], + [ + -124.059745, + 44.4173946 + ], + [ + -124.0606105, + 44.4186654 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_15962_s_15944", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0900701, + 44.4396804 + ], + [ + -124.0903058, + 44.4409235 + ], + [ + -124.0901236, + 44.4430495 + ], + [ + -124.0900778, + 44.4432537 + ], + [ + -124.0893347, + 44.445285 + ], + [ + -124.08806, + 44.447176 + ], + [ + -124.0863013, + 44.448856 + ], + [ + -124.0841241, + 44.4502622 + ], + [ + -124.0816099, + 44.4513421 + ], + [ + -124.0788525, + 44.4520554 + ], + [ + -124.075955, + 44.4523753 + ], + [ + -124.075483, + 44.4523943 + ], + [ + -124.0726059, + 44.452314 + ], + [ + -124.0698019, + 44.4518458 + ], + [ + -124.0671719, + 44.4510063 + ], + [ + -124.0648109, + 44.449826 + ], + [ + -124.0628039, + 44.4483474 + ], + [ + -124.0612231, + 44.4466237 + ], + [ + -124.0601256, + 44.4447171 + ], + [ + -124.0595507, + 44.4426962 + ], + [ + -124.0595193, + 44.440634 + ], + [ + -124.0596399, + 44.4396093 + ], + [ + -124.0591992, + 44.4392017 + ], + [ + -124.0564695, + 44.4366748 + ], + [ + -124.0558935, + 44.4361043 + ], + [ + -124.0555496, + 44.4357393 + ], + [ + -124.0550749, + 44.4352023 + ], + [ + -124.054892, + 44.4349813 + ], + [ + -124.0537143, + 44.4342173 + ], + [ + -124.0519422, + 44.4325072 + ], + [ + -124.0506699, + 44.4305821 + ], + [ + -124.0499462, + 44.4285162 + ], + [ + -124.0497988, + 44.4263888 + ], + [ + -124.0502335, + 44.4242817 + ], + [ + -124.0512334, + 44.4222759 + ], + [ + -124.0527601, + 44.4204483 + ], + [ + -124.0547548, + 44.4188693 + ], + [ + -124.0571409, + 44.4175995 + ], + [ + -124.0598267, + 44.4166877 + ], + [ + -124.062709, + 44.4161688 + ], + [ + -124.0656771, + 44.4160629 + ], + [ + -124.0679342, + 44.4161412 + ], + [ + -124.070823, + 44.4164431 + ], + [ + -124.0735775, + 44.4171362 + ], + [ + -124.0760956, + 44.4181948 + ], + [ + -124.0782841, + 44.4195797 + ], + [ + -124.0800618, + 44.4212394 + ], + [ + -124.0813626, + 44.4231126 + ], + [ + -124.082022, + 44.4248268 + ], + [ + -124.083174, + 44.4258929 + ], + [ + -124.0857592, + 44.4282828 + ], + [ + -124.0859265, + 44.4284403 + ], + [ + -124.0860568, + 44.4285654 + ], + [ + -124.0861265, + 44.4286302 + ], + [ + -124.0866223, + 44.4291185 + ], + [ + -124.0868453, + 44.4293514 + ], + [ + -124.0878954, + 44.4306267 + ], + [ + -124.0881354, + 44.4309697 + ], + [ + -124.0887532, + 44.4319764 + ], + [ + -124.0889683, + 44.4323814 + ], + [ + -124.0894122, + 44.4333521 + ], + [ + -124.0895653, + 44.4337491 + ], + [ + -124.0899409, + 44.4350108 + ], + [ + -124.0900451, + 44.4355018 + ], + [ + -124.0902171, + 44.437132 + ], + [ + -124.0902173, + 44.437641 + ], + [ + -124.0902103, + 44.4379733 + ], + [ + -124.0901934, + 44.4383713 + ], + [ + -124.0901673, + 44.4387582 + ], + [ + -124.0901623, + 44.4388122 + ], + [ + -124.090157, + 44.4388674 + ], + [ + -124.0901191, + 44.4392484 + ], + [ + -124.0901055, + 44.4393746 + ], + [ + -124.0900701, + 44.4396804 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_15962_s_15969", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0902634, + 44.4419205 + ], + [ + -124.0902525, + 44.4420662 + ], + [ + -124.0902429, + 44.4421805 + ], + [ + -124.0897294, + 44.4444037 + ], + [ + -124.0894389, + 44.4449375 + ], + [ + -124.0894163, + 44.4451205 + ], + [ + -124.0893058, + 44.4462297 + ], + [ + -124.0893011, + 44.446275 + ], + [ + -124.0890848, + 44.4483249 + ], + [ + -124.0889914, + 44.4493578 + ], + [ + -124.0889494, + 44.4497249 + ], + [ + -124.0887231, + 44.4513631 + ], + [ + -124.0887249, + 44.4513774 + ], + [ + -124.0887388, + 44.4514853 + ], + [ + -124.0894656, + 44.4534288 + ], + [ + -124.0895035, + 44.4535323 + ], + [ + -124.0897282, + 44.4541578 + ], + [ + -124.0899217, + 44.4546423 + ], + [ + -124.0899574, + 44.4547333 + ], + [ + -124.0902486, + 44.4554872 + ], + [ + -124.0903112, + 44.4556547 + ], + [ + -124.0908616, + 44.4571736 + ], + [ + -124.090869, + 44.4571942 + ], + [ + -124.0912097, + 44.458142 + ], + [ + -124.091875, + 44.4599471 + ], + [ + -124.0924331, + 44.4614051 + ], + [ + -124.0929344, + 44.4635046 + ], + [ + -124.0928543, + 44.4656338 + ], + [ + -124.0921955, + 44.4677109 + ], + [ + -124.0909835, + 44.4696561 + ], + [ + -124.0892648, + 44.4713945 + ], + [ + -124.0871053, + 44.4728594 + ], + [ + -124.0845881, + 44.4739944 + ], + [ + -124.08181, + 44.4747559 + ], + [ + -124.0788777, + 44.4751147 + ], + [ + -124.075904, + 44.4750569 + ], + [ + -124.0730032, + 44.4745847 + ], + [ + -124.0702868, + 44.4737163 + ], + [ + -124.0678594, + 44.4724852 + ], + [ + -124.0658142, + 44.4709385 + ], + [ + -124.0642297, + 44.4691358 + ], + [ + -124.0631669, + 44.4671465 + ], + [ + -124.0625905, + 44.4656387 + ], + [ + -124.0625533, + 44.4655393 + ], + [ + -124.0618587, + 44.4636522 + ], + [ + -124.0618354, + 44.463588 + ], + [ + -124.0614873, + 44.4626182 + ], + [ + -124.0609717, + 44.4611934 + ], + [ + -124.0607307, + 44.4605684 + ], + [ + -124.0605, + 44.4599898 + ], + [ + -124.0603939, + 44.4597099 + ], + [ + -124.0601377, + 44.4589957 + ], + [ + -124.0593425, + 44.4568662 + ], + [ + -124.0592022, + 44.4564593 + ], + [ + -124.0590394, + 44.4559443 + ], + [ + -124.0589089, + 44.4554864 + ], + [ + -124.0587801, + 44.4549784 + ], + [ + -124.0585995, + 44.4540317 + ], + [ + -124.0585137, + 44.4533637 + ], + [ + -124.0585114, + 44.4533455 + ], + [ + -124.0584425, + 44.4527995 + ], + [ + -124.0583818, + 44.4519355 + ], + [ + -124.058374, + 44.4513965 + ], + [ + -124.0583853, + 44.450849 + ], + [ + -124.0584194, + 44.450237 + ], + [ + -124.0584816, + 44.4495971 + ], + [ + -124.0587357, + 44.4477644 + ], + [ + -124.0588182, + 44.4468572 + ], + [ + -124.0588297, + 44.4467409 + ], + [ + -124.0590508, + 44.4446556 + ], + [ + -124.0591689, + 44.4434773 + ], + [ + -124.0591894, + 44.4432938 + ], + [ + -124.0595251, + 44.4405858 + ], + [ + -124.0601091, + 44.4384157 + ], + [ + -124.0612938, + 44.4363752 + ], + [ + -124.0630302, + 44.4345486 + ], + [ + -124.0652464, + 44.4330115 + ], + [ + -124.0662883, + 44.4325378 + ], + [ + -124.0672956, + 44.432 + ], + [ + -124.0699801, + 44.4310852 + ], + [ + -124.072862, + 44.4305631 + ], + [ + -124.0758306, + 44.4304539 + ], + [ + -124.078772, + 44.4307616 + ], + [ + -124.0815731, + 44.4314746 + ], + [ + -124.0841264, + 44.4325654 + ], + [ + -124.0863337, + 44.433992 + ], + [ + -124.0881103, + 44.4356998 + ], + [ + -124.0893878, + 44.4376231 + ], + [ + -124.0901172, + 44.439688 + ], + [ + -124.0902702, + 44.4418152 + ], + [ + -124.0902634, + 44.4419205 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_15965_s_16047", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0870704, + 44.5544226 + ], + [ + -124.0870406, + 44.5546182 + ], + [ + -124.0867411, + 44.5564333 + ], + [ + -124.086681, + 44.5567557 + ], + [ + -124.0865761, + 44.5572607 + ], + [ + -124.0865633, + 44.5573215 + ], + [ + -124.0864474, + 44.5578585 + ], + [ + -124.0864185, + 44.5579874 + ], + [ + -124.0863246, + 44.5583904 + ], + [ + -124.0862913, + 44.5585279 + ], + [ + -124.0852283, + 44.562754 + ], + [ + -124.0851836, + 44.5629242 + ], + [ + -124.0849212, + 44.5638797 + ], + [ + -124.0844739, + 44.5657686 + ], + [ + -124.084447, + 44.5658787 + ], + [ + -124.0841503, + 44.5670578 + ], + [ + -124.0841328, + 44.567126 + ], + [ + -124.0839907, + 44.5676704 + ], + [ + -124.0835472, + 44.5695316 + ], + [ + -124.0835026, + 44.5697098 + ], + [ + -124.0833727, + 44.5702048 + ], + [ + -124.0833436, + 44.5703128 + ], + [ + -124.0831481, + 44.5710186 + ], + [ + -124.0829914, + 44.5715884 + ], + [ + -124.0829552, + 44.5717162 + ], + [ + -124.0828764, + 44.5719858 + ], + [ + -124.0825871, + 44.5731336 + ], + [ + -124.0825753, + 44.57318 + ], + [ + -124.0823275, + 44.574139 + ], + [ + -124.0820139, + 44.575104 + ], + [ + -124.0817011, + 44.5759 + ], + [ + -124.0816763, + 44.5759625 + ], + [ + -124.0813638, + 44.5767399 + ], + [ + -124.0810984, + 44.5774076 + ], + [ + -124.0810847, + 44.5780074 + ], + [ + -124.0810746, + 44.5782628 + ], + [ + -124.0810488, + 44.5787268 + ], + [ + -124.0810255, + 44.5790341 + ], + [ + -124.0810006, + 44.5792951 + ], + [ + -124.0808945, + 44.5800335 + ], + [ + -124.0808386, + 44.5803245 + ], + [ + -124.0807815, + 44.5805958 + ], + [ + -124.0807016, + 44.5809458 + ], + [ + -124.0806101, + 44.5813079 + ], + [ + -124.0805522, + 44.5815169 + ], + [ + -124.0804505, + 44.5818553 + ], + [ + -124.0803445, + 44.5821823 + ], + [ + -124.0802193, + 44.582541 + ], + [ + -124.0799606, + 44.5832318 + ], + [ + -124.0799467, + 44.5833027 + ], + [ + -124.0799305, + 44.5833997 + ], + [ + -124.0798505, + 44.5840329 + ], + [ + -124.0798487, + 44.5840468 + ], + [ + -124.0795004, + 44.5867649 + ], + [ + -124.0794802, + 44.5869114 + ], + [ + -124.0793836, + 44.5875672 + ], + [ + -124.0794755, + 44.5879759 + ], + [ + -124.0795025, + 44.5881209 + ], + [ + -124.0795896, + 44.5887102 + ], + [ + -124.0796127, + 44.5889212 + ], + [ + -124.0796548, + 44.5895178 + ], + [ + -124.0796599, + 44.5896748 + ], + [ + -124.0796638, + 44.5899522 + ], + [ + -124.0796629, + 44.5902092 + ], + [ + -124.0795813, + 44.5913051 + ], + [ + -124.0795534, + 44.5914972 + ], + [ + -124.0794128, + 44.5922235 + ], + [ + -124.0793589, + 44.5924466 + ], + [ + -124.0791563, + 44.5931461 + ], + [ + -124.0790863, + 44.5933531 + ], + [ + -124.0790564, + 44.5933479 + ], + [ + -124.0782524, + 44.5951807 + ], + [ + -124.0780794, + 44.5954688 + ], + [ + -124.0776477, + 44.5961262 + ], + [ + -124.0771937, + 44.5967614 + ], + [ + -124.0770955, + 44.596917 + ], + [ + -124.0769871, + 44.5970849 + ], + [ + -124.0767482, + 44.597447 + ], + [ + -124.0763005, + 44.598125 + ], + [ + -124.0759442, + 44.5986865 + ], + [ + -124.0756524, + 44.5991468 + ], + [ + -124.0755558, + 44.5992962 + ], + [ + -124.0745061, + 44.6008873 + ], + [ + -124.074499, + 44.6008981 + ], + [ + -124.0734317, + 44.6025112 + ], + [ + -124.0730392, + 44.6031229 + ], + [ + -124.0729967, + 44.6031886 + ], + [ + -124.0723565, + 44.6041691 + ], + [ + -124.0720542, + 44.6046393 + ], + [ + -124.0718074, + 44.6050232 + ], + [ + -124.0717683, + 44.6050835 + ], + [ + -124.0716513, + 44.6052625 + ], + [ + -124.0715013, + 44.605492 + ], + [ + -124.0711655, + 44.6060064 + ], + [ + -124.0711408, + 44.6060441 + ], + [ + -124.0706389, + 44.6068051 + ], + [ + -124.0699634, + 44.6078288 + ], + [ + -124.0684337, + 44.6096571 + ], + [ + -124.0664341, + 44.6112371 + ], + [ + -124.0640412, + 44.6125079 + ], + [ + -124.0613472, + 44.6134209 + ], + [ + -124.0584555, + 44.6139408 + ], + [ + -124.0554773, + 44.6140476 + ], + [ + -124.0525272, + 44.6137374 + ], + [ + -124.0497186, + 44.6130219 + ], + [ + -124.0471594, + 44.6119287 + ], + [ + -124.0449481, + 44.6104999 + ], + [ + -124.0431697, + 44.6087903 + ], + [ + -124.0418924, + 44.6068657 + ], + [ + -124.0411653, + 44.6048 + ], + [ + -124.0410163, + 44.6026728 + ], + [ + -124.041451, + 44.6005656 + ], + [ + -124.0424528, + 44.5985595 + ], + [ + -124.0431261, + 44.5975399 + ], + [ + -124.0436149, + 44.5967991 + ], + [ + -124.0439397, + 44.596302 + ], + [ + -124.0440929, + 44.5960677 + ], + [ + -124.0441902, + 44.5959189 + ], + [ + -124.0444178, + 44.5955652 + ], + [ + -124.0447392, + 44.5950658 + ], + [ + -124.0447762, + 44.5950087 + ], + [ + -124.045414, + 44.5940325 + ], + [ + -124.045823, + 44.5933954 + ], + [ + -124.0458989, + 44.5932791 + ], + [ + -124.0470016, + 44.5916136 + ], + [ + -124.0479992, + 44.5901026 + ], + [ + -124.0482448, + 44.5897156 + ], + [ + -124.0486521, + 44.589074 + ], + [ + -124.0487487, + 44.5889251 + ], + [ + -124.0488878, + 44.5887144 + ], + [ + -124.0488702, + 44.5883396 + ], + [ + -124.0488663, + 44.5881486 + ], + [ + -124.0489163, + 44.5870931 + ], + [ + -124.0489614, + 44.5867031 + ], + [ + -124.0489684, + 44.5866445 + ], + [ + -124.0490846, + 44.5857016 + ], + [ + -124.0491101, + 44.5855136 + ], + [ + -124.0492295, + 44.5847058 + ], + [ + -124.0495689, + 44.5820681 + ], + [ + -124.0496682, + 44.5812851 + ], + [ + -124.0497143, + 44.5809719 + ], + [ + -124.0497754, + 44.5806079 + ], + [ + -124.0498157, + 44.580387 + ], + [ + -124.0498888, + 44.580016 + ], + [ + -124.0499289, + 44.5798248 + ], + [ + -124.049991, + 44.5795458 + ], + [ + -124.0501048, + 44.5790954 + ], + [ + -124.0501819, + 44.5788234 + ], + [ + -124.0502489, + 44.5785992 + ], + [ + -124.0503299, + 44.5783412 + ], + [ + -124.0504788, + 44.577909 + ], + [ + -124.0506926, + 44.5773389 + ], + [ + -124.0507113, + 44.5765417 + ], + [ + -124.050719, + 44.5761259 + ], + [ + -124.0507981, + 44.5751548 + ], + [ + -124.0508582, + 44.5747388 + ], + [ + -124.0510542, + 44.5737922 + ], + [ + -124.0511744, + 44.5733482 + ], + [ + -124.0514266, + 44.5725702 + ], + [ + -124.0516188, + 44.5720632 + ], + [ + -124.0516702, + 44.5719309 + ], + [ + -124.0521274, + 44.5707819 + ], + [ + -124.05214, + 44.5707505 + ], + [ + -124.0524466, + 44.5699888 + ], + [ + -124.0525597, + 44.5697014 + ], + [ + -124.0526757, + 44.5692532 + ], + [ + -124.0529972, + 44.5679805 + ], + [ + -124.0530778, + 44.5676848 + ], + [ + -124.0531812, + 44.5673316 + ], + [ + -124.0533227, + 44.5668176 + ], + [ + -124.0533273, + 44.5668013 + ], + [ + -124.0535105, + 44.5661412 + ], + [ + -124.053603, + 44.5657892 + ], + [ + -124.0540462, + 44.5639335 + ], + [ + -124.0540881, + 44.563766 + ], + [ + -124.0542433, + 44.5631721 + ], + [ + -124.0545181, + 44.5620823 + ], + [ + -124.0549865, + 44.5601085 + ], + [ + -124.0550582, + 44.5598288 + ], + [ + -124.0553361, + 44.5588188 + ], + [ + -124.0563624, + 44.5547468 + ], + [ + -124.0564254, + 44.554477 + ], + [ + -124.056521, + 44.5540349 + ], + [ + -124.0565863, + 44.5537212 + ], + [ + -124.0568438, + 44.5521655 + ], + [ + -124.057471, + 44.5476823 + ], + [ + -124.0580566, + 44.5455939 + ], + [ + -124.0592005, + 44.5436273 + ], + [ + -124.0608589, + 44.5418581 + ], + [ + -124.0629679, + 44.5403542 + ], + [ + -124.0654465, + 44.5391734 + ], + [ + -124.0681995, + 44.5383611 + ], + [ + -124.0711211, + 44.5379485 + ], + [ + -124.0740991, + 44.5379513 + ], + [ + -124.0770192, + 44.5383696 + ], + [ + -124.0797691, + 44.5391872 + ], + [ + -124.0822432, + 44.5403728 + ], + [ + -124.0843465, + 44.5418807 + ], + [ + -124.0859982, + 44.5436531 + ], + [ + -124.0871347, + 44.5456219 + ], + [ + -124.0877124, + 44.5477114 + ], + [ + -124.0877089, + 44.5498413 + ], + [ + -124.0870704, + 44.5544226 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_15967_s_15889", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.071036, + 44.6178 + ], + [ + -124.0710361, + 44.6178 + ], + [ + -124.0713941, + 44.6180929 + ], + [ + -124.0717, + 44.6183513 + ], + [ + -124.071895, + 44.6185212 + ], + [ + -124.0725703, + 44.619156 + ], + [ + -124.0728944, + 44.619485 + ], + [ + -124.0730262, + 44.6196211 + ], + [ + -124.0731282, + 44.619728 + ], + [ + -124.0734131, + 44.6200381 + ], + [ + -124.0736592, + 44.6203161 + ], + [ + -124.0741761, + 44.6209459 + ], + [ + -124.0742891, + 44.6210949 + ], + [ + -124.0748306, + 44.6218833 + ], + [ + -124.0749277, + 44.6220402 + ], + [ + -124.0750188, + 44.6221879 + ], + [ + -124.0751064, + 44.622329 + ], + [ + -124.0754431, + 44.6229167 + ], + [ + -124.0755571, + 44.6231337 + ], + [ + -124.075838, + 44.623718 + ], + [ + -124.075975, + 44.624032 + ], + [ + -124.0765163, + 44.6257525 + ], + [ + -124.0765523, + 44.6259355 + ], + [ + -124.0766651, + 44.6281914 + ], + [ + -124.0761226, + 44.6304153 + ], + [ + -124.0749483, + 44.6325111 + ], + [ + -124.0745476, + 44.6330545 + ], + [ + -124.0742402, + 44.6335058 + ], + [ + -124.0739801, + 44.633894 + ], + [ + -124.0739291, + 44.6339695 + ], + [ + -124.0731532, + 44.6351051 + ], + [ + -124.0731238, + 44.6351478 + ], + [ + -124.0726083, + 44.6358939 + ], + [ + -124.0706598, + 44.6380356 + ], + [ + -124.0682448, + 44.6396714 + ], + [ + -124.0670089, + 44.640915 + ], + [ + -124.0648823, + 44.6423596 + ], + [ + -124.0644343, + 44.6426099 + ], + [ + -124.0643141, + 44.6426779 + ], + [ + -124.0642343, + 44.6427228 + ], + [ + -124.0639652, + 44.642873 + ], + [ + -124.0638777, + 44.6429242 + ], + [ + -124.0638479, + 44.6428982 + ], + [ + -124.0622737, + 44.6437852 + ], + [ + -124.0596161, + 44.6447531 + ], + [ + -124.056745, + 44.6453323 + ], + [ + -124.0537708, + 44.6455003 + ], + [ + -124.0508078, + 44.6452509 + ], + [ + -124.04797, + 44.6445934 + ], + [ + -124.0453664, + 44.6435534 + ], + [ + -124.0430972, + 44.6421706 + ], + [ + -124.0412496, + 44.6404983 + ], + [ + -124.0398945, + 44.6386008 + ], + [ + -124.039084, + 44.6365509 + ], + [ + -124.0388492, + 44.6344276 + ], + [ + -124.0391991, + 44.6323124 + ], + [ + -124.0401201, + 44.6302865 + ], + [ + -124.0404955, + 44.6298076 + ], + [ + -124.040592, + 44.6295353 + ], + [ + -124.0418794, + 44.6276069 + ], + [ + -124.042316, + 44.6271896 + ], + [ + -124.0417161, + 44.626639 + ], + [ + -124.0404163, + 44.6254485 + ], + [ + -124.04027, + 44.6253123 + ], + [ + -124.040047, + 44.6251013 + ], + [ + -124.0395863, + 44.6246408 + ], + [ + -124.0393913, + 44.6244348 + ], + [ + -124.039149, + 44.6241706 + ], + [ + -124.0389421, + 44.6239375 + ], + [ + -124.0386247, + 44.6235638 + ], + [ + -124.0384097, + 44.6232988 + ], + [ + -124.0380085, + 44.6227709 + ], + [ + -124.0378215, + 44.6225079 + ], + [ + -124.037763, + 44.6224247 + ], + [ + -124.037486, + 44.6220266 + ], + [ + -124.0370026, + 44.6212583 + ], + [ + -124.0368272, + 44.6209481 + ], + [ + -124.036626, + 44.6205959 + ], + [ + -124.0362979, + 44.6199663 + ], + [ + -124.0361589, + 44.6196723 + ], + [ + -124.0358421, + 44.6189109 + ], + [ + -124.0357301, + 44.6186009 + ], + [ + -124.0355901, + 44.6181782 + ], + [ + -124.0355061, + 44.6179002 + ], + [ + -124.0354282, + 44.6176249 + ], + [ + -124.0352914, + 44.6171069 + ], + [ + -124.0351708, + 44.61658 + ], + [ + -124.0351019, + 44.616224 + ], + [ + -124.035084, + 44.6161312 + ], + [ + -124.034944, + 44.6148416 + ], + [ + -124.0349413, + 44.6147336 + ], + [ + -124.0349327, + 44.6144235 + ], + [ + -124.03493, + 44.6141416 + ], + [ + -124.0349321, + 44.6139006 + ], + [ + -124.0349322, + 44.6138881 + ], + [ + -124.0349332, + 44.6137871 + ], + [ + -124.034942, + 44.6134892 + ], + [ + -124.034955, + 44.6132202 + ], + [ + -124.0349953, + 44.6127216 + ], + [ + -124.0350164, + 44.6125356 + ], + [ + -124.03503, + 44.6124223 + ], + [ + -124.0350541, + 44.6122343 + ], + [ + -124.0351578, + 44.6116183 + ], + [ + -124.0351768, + 44.6115273 + ], + [ + -124.0359041, + 44.6094617 + ], + [ + -124.0371815, + 44.6075371 + ], + [ + -124.0389599, + 44.6058275 + ], + [ + -124.0411708, + 44.6043986 + ], + [ + -124.0437294, + 44.6033052 + ], + [ + -124.0465373, + 44.6025893 + ], + [ + -124.0494867, + 44.6022785 + ], + [ + -124.0524643, + 44.6023847 + ], + [ + -124.0553558, + 44.6029038 + ], + [ + -124.05805, + 44.6038158 + ], + [ + -124.0604435, + 44.6050857 + ], + [ + -124.0624443, + 44.6066649 + ], + [ + -124.0639755, + 44.6084924 + ], + [ + -124.0649783, + 44.6104983 + ], + [ + -124.0654141, + 44.6126054 + ], + [ + -124.0653878, + 44.6129823 + ], + [ + -124.065712, + 44.6132791 + ], + [ + -124.0657222, + 44.6132884 + ], + [ + -124.0665464, + 44.6140447 + ], + [ + -124.0672283, + 44.6146565 + ], + [ + -124.0692152, + 44.6163322 + ], + [ + -124.0697817, + 44.6168052 + ], + [ + -124.0700538, + 44.617026 + ], + [ + -124.0704556, + 44.6173337 + ], + [ + -124.0705579, + 44.6174128 + ], + [ + -124.0706859, + 44.6175128 + ], + [ + -124.071036, + 44.6178 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_15969_s_15972", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0947114, + 44.4762259 + ], + [ + -124.0946583, + 44.4772197 + ], + [ + -124.0946553, + 44.4772662 + ], + [ + -124.0947129, + 44.4774188 + ], + [ + -124.0947323, + 44.4774708 + ], + [ + -124.095735, + 44.4801806 + ], + [ + -124.0957503, + 44.4802225 + ], + [ + -124.0959315, + 44.4807203 + ], + [ + -124.0960051, + 44.4809215 + ], + [ + -124.0974504, + 44.4848368 + ], + [ + -124.0976706, + 44.4855226 + ], + [ + -124.0978938, + 44.4863375 + ], + [ + -124.0979742, + 44.486656 + ], + [ + -124.0981294, + 44.487328 + ], + [ + -124.0982128, + 44.4877377 + ], + [ + -124.098329, + 44.4883957 + ], + [ + -124.0984371, + 44.4893316 + ], + [ + -124.0984722, + 44.4899726 + ], + [ + -124.0984814, + 44.490597 + ], + [ + -124.0984299, + 44.492619 + ], + [ + -124.098421, + 44.4928433 + ], + [ + -124.0982886, + 44.4952793 + ], + [ + -124.0982491, + 44.4957463 + ], + [ + -124.0981803, + 44.4963463 + ], + [ + -124.0981157, + 44.4967952 + ], + [ + -124.0979958, + 44.4974862 + ], + [ + -124.097921, + 44.4978634 + ], + [ + -124.0976943, + 44.4988784 + ], + [ + -124.097441, + 44.4997706 + ], + [ + -124.0974017, + 44.4998845 + ], + [ + -124.0970269, + 44.5010134 + ], + [ + -124.0960585, + 44.5030274 + ], + [ + -124.0945596, + 44.5048675 + ], + [ + -124.0925877, + 44.506463 + ], + [ + -124.0902187, + 44.5077524 + ], + [ + -124.0875435, + 44.5086863 + ], + [ + -124.0846651, + 44.5092287 + ], + [ + -124.0816941, + 44.5093588 + ], + [ + -124.0787447, + 44.5090716 + ], + [ + -124.0759304, + 44.508378 + ], + [ + -124.0733594, + 44.5073048 + ], + [ + -124.0711304, + 44.5058933 + ], + [ + -124.0693292, + 44.5041976 + ], + [ + -124.0680249, + 44.5022831 + ], + [ + -124.0672676, + 44.5002232 + ], + [ + -124.0670865, + 44.4980972 + ], + [ + -124.0674883, + 44.4959867 + ], + [ + -124.0678088, + 44.4950226 + ], + [ + -124.0678997, + 44.4946168 + ], + [ + -124.067948, + 44.4943387 + ], + [ + -124.0679644, + 44.4941969 + ], + [ + -124.0680791, + 44.4921068 + ], + [ + -124.068118, + 44.4906088 + ], + [ + -124.0680596, + 44.4903557 + ], + [ + -124.0679747, + 44.490045 + ], + [ + -124.0666521, + 44.4864572 + ], + [ + -124.0666429, + 44.4864321 + ], + [ + -124.0665629, + 44.4862131 + ], + [ + -124.0663839, + 44.4857206 + ], + [ + -124.0653998, + 44.4830574 + ], + [ + -124.0649449, + 44.4818503 + ], + [ + -124.0648329, + 44.4815343 + ], + [ + -124.0647, + 44.4811343 + ], + [ + -124.0643932, + 44.4798965 + ], + [ + -124.0643462, + 44.4796125 + ], + [ + -124.0642474, + 44.4786479 + ], + [ + -124.0642345, + 44.4783259 + ], + [ + -124.0642499, + 44.4774342 + ], + [ + -124.0643342, + 44.4763042 + ], + [ + -124.0643841, + 44.4753793 + ], + [ + -124.0643947, + 44.4751879 + ], + [ + -124.0644237, + 44.4748203 + ], + [ + -124.0645297, + 44.4737881 + ], + [ + -124.0645647, + 44.4730723 + ], + [ + -124.0645736, + 44.4729215 + ], + [ + -124.0646168, + 44.4722905 + ], + [ + -124.0646516, + 44.4719147 + ], + [ + -124.0646609, + 44.4718354 + ], + [ + -124.0646581, + 44.471695 + ], + [ + -124.0646391, + 44.4713498 + ], + [ + -124.0645628, + 44.4709713 + ], + [ + -124.0638711, + 44.4690977 + ], + [ + -124.0638364, + 44.4690019 + ], + [ + -124.0634995, + 44.4680543 + ], + [ + -124.0633031, + 44.4675092 + ], + [ + -124.0631567, + 44.4671226 + ], + [ + -124.0626631, + 44.4650221 + ], + [ + -124.0627512, + 44.4628931 + ], + [ + -124.0634176, + 44.4608172 + ], + [ + -124.0646366, + 44.4588744 + ], + [ + -124.0663614, + 44.4571392 + ], + [ + -124.0685255, + 44.4556782 + ], + [ + -124.0710459, + 44.4545477 + ], + [ + -124.0738256, + 44.4537911 + ], + [ + -124.0767581, + 44.4534373 + ], + [ + -124.0797305, + 44.4535 + ], + [ + -124.0826288, + 44.4539768 + ], + [ + -124.0853415, + 44.4548494 + ], + [ + -124.0877646, + 44.4560842 + ], + [ + -124.0898049, + 44.4576338 + ], + [ + -124.091384, + 44.4594388 + ], + [ + -124.0924412, + 44.4614296 + ], + [ + -124.0926127, + 44.4618816 + ], + [ + -124.0926611, + 44.4620125 + ], + [ + -124.0928872, + 44.4626394 + ], + [ + -124.092899, + 44.4626723 + ], + [ + -124.0932252, + 44.4635883 + ], + [ + -124.094126, + 44.4660253 + ], + [ + -124.0944777, + 44.4672637 + ], + [ + -124.0945943, + 44.4678462 + ], + [ + -124.094695, + 44.4683437 + ], + [ + -124.0947243, + 44.4684963 + ], + [ + -124.0948204, + 44.4690242 + ], + [ + -124.0949357, + 44.4699969 + ], + [ + -124.09499, + 44.4709729 + ], + [ + -124.0950004, + 44.4712493 + ], + [ + -124.0950106, + 44.4717552 + ], + [ + -124.0950102, + 44.4720858 + ], + [ + -124.0950003, + 44.4725258 + ], + [ + -124.0949497, + 44.4732543 + ], + [ + -124.0949167, + 44.4735376 + ], + [ + -124.0948918, + 44.4739051 + ], + [ + -124.0948507, + 44.4747536 + ], + [ + -124.0948193, + 44.4751696 + ], + [ + -124.0947114, + 44.4762259 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_15970_s_15944", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0823439, + 44.4277449 + ], + [ + -124.0823578, + 44.4277462 + ], + [ + -124.0822252, + 44.428449 + ], + [ + -124.0815902, + 44.4304158 + ], + [ + -124.0804582, + 44.4322644 + ], + [ + -124.0788685, + 44.4339311 + ], + [ + -124.0768758, + 44.4353583 + ], + [ + -124.0745489, + 44.4364967 + ], + [ + -124.0719682, + 44.4373069 + ], + [ + -124.0692227, + 44.437761 + ], + [ + -124.0664074, + 44.4378434 + ], + [ + -124.0641343, + 44.4377582 + ], + [ + -124.061195, + 44.4374389 + ], + [ + -124.0583992, + 44.4367148 + ], + [ + -124.0558543, + 44.4356138 + ], + [ + -124.0536582, + 44.4341782 + ], + [ + -124.0518953, + 44.4324631 + ], + [ + -124.0506334, + 44.4305346 + ], + [ + -124.0499208, + 44.4284667 + ], + [ + -124.0497849, + 44.4263389 + ], + [ + -124.050231, + 44.424233 + ], + [ + -124.0512417, + 44.4222299 + ], + [ + -124.0527781, + 44.4204066 + ], + [ + -124.0547813, + 44.4188332 + ], + [ + -124.0571742, + 44.4175699 + ], + [ + -124.0587166, + 44.4170515 + ], + [ + -124.0593726, + 44.4166859 + ], + [ + -124.0620293, + 44.4157313 + ], + [ + -124.0648948, + 44.4151666 + ], + [ + -124.0678588, + 44.4150132 + ], + [ + -124.0708077, + 44.4152772 + ], + [ + -124.0736281, + 44.4159484 + ], + [ + -124.0762117, + 44.4170011 + ], + [ + -124.0784592, + 44.4183947 + ], + [ + -124.0802843, + 44.4200757 + ], + [ + -124.0816169, + 44.4219796 + ], + [ + -124.0824056, + 44.4240332 + ], + [ + -124.0826202, + 44.4261577 + ], + [ + -124.0823439, + 44.4277449 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_15972_s_15965", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0967738, + 44.5017734 + ], + [ + -124.096734, + 44.5019048 + ], + [ + -124.0966548, + 44.5022315 + ], + [ + -124.0965367, + 44.5027749 + ], + [ + -124.0959805, + 44.5054451 + ], + [ + -124.0956642, + 44.5069733 + ], + [ + -124.0955443, + 44.5076303 + ], + [ + -124.0954893, + 44.5079045 + ], + [ + -124.0950778, + 44.5097855 + ], + [ + -124.0950723, + 44.5098107 + ], + [ + -124.0949354, + 44.5104267 + ], + [ + -124.0948831, + 44.5106475 + ], + [ + -124.0946983, + 44.5113816 + ], + [ + -124.0944073, + 44.5123047 + ], + [ + -124.0941934, + 44.5128678 + ], + [ + -124.0940971, + 44.5131102 + ], + [ + -124.0938675, + 44.5136635 + ], + [ + -124.093708, + 44.5140482 + ], + [ + -124.0934992, + 44.5145526 + ], + [ + -124.0933315, + 44.514932 + ], + [ + -124.0918854, + 44.5180068 + ], + [ + -124.0907986, + 44.5205046 + ], + [ + -124.0905625, + 44.5210831 + ], + [ + -124.0902697, + 44.5217256 + ], + [ + -124.0901597, + 44.5219436 + ], + [ + -124.0897849, + 44.5226159 + ], + [ + -124.0896489, + 44.5228379 + ], + [ + -124.0894525, + 44.5230958 + ], + [ + -124.0896839, + 44.5236439 + ], + [ + -124.0897656, + 44.5239289 + ], + [ + -124.0898604, + 44.5242588 + ], + [ + -124.0900682, + 44.5251821 + ], + [ + -124.0901193, + 44.5254941 + ], + [ + -124.0902021, + 44.5261969 + ], + [ + -124.0902282, + 44.5265579 + ], + [ + -124.0902431, + 44.5274093 + ], + [ + -124.0902172, + 44.5281003 + ], + [ + -124.0902092, + 44.5282681 + ], + [ + -124.090023, + 44.5314241 + ], + [ + -124.0900073, + 44.5316393 + ], + [ + -124.0897451, + 44.5346603 + ], + [ + -124.0897263, + 44.53485 + ], + [ + -124.0896355, + 44.535665 + ], + [ + -124.0896248, + 44.5357563 + ], + [ + -124.0894931, + 44.5368245 + ], + [ + -124.0891762, + 44.5396377 + ], + [ + -124.089068, + 44.5409357 + ], + [ + -124.0890065, + 44.5414596 + ], + [ + -124.0885272, + 44.5446225 + ], + [ + -124.0882739, + 44.5464594 + ], + [ + -124.0882501, + 44.5466194 + ], + [ + -124.0879696, + 44.5483854 + ], + [ + -124.087945, + 44.5485314 + ], + [ + -124.0876638, + 44.5501104 + ], + [ + -124.0869998, + 44.5521868 + ], + [ + -124.0857819, + 44.5541306 + ], + [ + -124.084057, + 44.5558671 + ], + [ + -124.0818913, + 44.5573296 + ], + [ + -124.079368, + 44.5584619 + ], + [ + -124.0765843, + 44.5592204 + ], + [ + -124.073647, + 44.559576 + ], + [ + -124.0706691, + 44.5595149 + ], + [ + -124.0677651, + 44.5590396 + ], + [ + -124.0650467, + 44.5581683 + ], + [ + -124.0626183, + 44.5569345 + ], + [ + -124.0605734, + 44.5553856 + ], + [ + -124.0589905, + 44.5535813 + ], + [ + -124.0579304, + 44.5515908 + ], + [ + -124.0574338, + 44.5494906 + ], + [ + -124.0575197, + 44.5473616 + ], + [ + -124.0577886, + 44.5458555 + ], + [ + -124.0580457, + 44.5442425 + ], + [ + -124.0582961, + 44.5424336 + ], + [ + -124.0583113, + 44.5423294 + ], + [ + -124.0587603, + 44.5393758 + ], + [ + -124.0588567, + 44.5382273 + ], + [ + -124.0588789, + 44.5380014 + ], + [ + -124.0592147, + 44.5350344 + ], + [ + -124.0592244, + 44.5349527 + ], + [ + -124.059356, + 44.5338893 + ], + [ + -124.0594315, + 44.5332148 + ], + [ + -124.0596776, + 44.5303962 + ], + [ + -124.0596961, + 44.5300862 + ], + [ + -124.0589069, + 44.5295149 + ], + [ + -124.058563, + 44.5292088 + ], + [ + -124.0570017, + 44.5275182 + ], + [ + -124.0567278, + 44.5271512 + ], + [ + -124.0556706, + 44.5253684 + ], + [ + -124.0555327, + 44.5250623 + ], + [ + -124.0548329, + 44.5224437 + ], + [ + -124.0548069, + 44.5221627 + ], + [ + -124.054778, + 44.521197 + ], + [ + -124.054787, + 44.520915 + ], + [ + -124.0548799, + 44.5199397 + ], + [ + -124.0549149, + 44.5197187 + ], + [ + -124.0553286, + 44.5181505 + ], + [ + -124.0553966, + 44.5179675 + ], + [ + -124.055817, + 44.5170154 + ], + [ + -124.055955, + 44.5167464 + ], + [ + -124.0567807, + 44.5154195 + ], + [ + -124.0569437, + 44.5151985 + ], + [ + -124.0582468, + 44.5137304 + ], + [ + -124.0585038, + 44.5134864 + ], + [ + -124.0603019, + 44.5120613 + ], + [ + -124.0606709, + 44.5118164 + ], + [ + -124.062938, + 44.5105734 + ], + [ + -124.0634019, + 44.5103654 + ], + [ + -124.0634432, + 44.5103494 + ], + [ + -124.0644614, + 44.5081867 + ], + [ + -124.0645924, + 44.5078705 + ], + [ + -124.0647557, + 44.5074774 + ], + [ + -124.0649311, + 44.507055 + ], + [ + -124.0649701, + 44.5069007 + ], + [ + -124.0650798, + 44.5064079 + ], + [ + -124.0654595, + 44.5046763 + ], + [ + -124.0655716, + 44.5040637 + ], + [ + -124.0656078, + 44.5038779 + ], + [ + -124.0659452, + 44.5022519 + ], + [ + -124.066513, + 44.499533 + ], + [ + -124.0665275, + 44.4994652 + ], + [ + -124.0666736, + 44.4987942 + ], + [ + -124.0667167, + 44.4986072 + ], + [ + -124.0668729, + 44.4979642 + ], + [ + -124.0669941, + 44.4975201 + ], + [ + -124.0671342, + 44.4970581 + ], + [ + -124.0672038, + 44.4968397 + ], + [ + -124.067491, + 44.4959787 + ], + [ + -124.0684624, + 44.4939654 + ], + [ + -124.0699639, + 44.4921264 + ], + [ + -124.0719376, + 44.4905324 + ], + [ + -124.0743077, + 44.4892446 + ], + [ + -124.0769832, + 44.4883125 + ], + [ + -124.0798612, + 44.4877719 + ], + [ + -124.0828312, + 44.4876435 + ], + [ + -124.0857792, + 44.4879322 + ], + [ + -124.0885919, + 44.4886271 + ], + [ + -124.0911613, + 44.4897013 + ], + [ + -124.0933886, + 44.4911137 + ], + [ + -124.0951884, + 44.4928099 + ], + [ + -124.0964913, + 44.4947249 + ], + [ + -124.0972473, + 44.496785 + ], + [ + -124.0974273, + 44.498911 + ], + [ + -124.0970243, + 44.5010214 + ], + [ + -124.0967738, + 44.5017734 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16024_s_16025", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0482127, + 44.6849192 + ], + [ + -124.0481127, + 44.684273 + ], + [ + -124.0480776, + 44.6821432 + ], + [ + -124.0486255, + 44.6800495 + ], + [ + -124.0497354, + 44.6780723 + ], + [ + -124.0513645, + 44.6762875 + ], + [ + -124.0534502, + 44.6747637 + ], + [ + -124.0559123, + 44.6735595 + ], + [ + -124.0586563, + 44.6727212 + ], + [ + -124.0615767, + 44.6722808 + ], + [ + -124.0645614, + 44.6722554 + ], + [ + -124.0674957, + 44.6726459 + ], + [ + -124.070267, + 44.6734373 + ], + [ + -124.0727687, + 44.6745992 + ], + [ + -124.0749047, + 44.6760869 + ], + [ + -124.0765931, + 44.6778435 + ], + [ + -124.0777688, + 44.6798012 + ], + [ + -124.0783867, + 44.681885 + ], + [ + -124.0788074, + 44.6845949 + ], + [ + -124.0788986, + 44.6856493 + ], + [ + -124.0789189, + 44.6867593 + ], + [ + -124.0789168, + 44.6871303 + ], + [ + -124.0788772, + 44.6884703 + ], + [ + -124.0788439, + 44.6889944 + ], + [ + -124.0786744, + 44.6907344 + ], + [ + -124.0786235, + 44.6911441 + ], + [ + -124.0785171, + 44.6918487 + ], + [ + -124.0779604, + 44.6938122 + ], + [ + -124.0769077, + 44.6956693 + ], + [ + -124.0753948, + 44.6973571 + ], + [ + -124.0734731, + 44.698818 + ], + [ + -124.0712079, + 44.7000024 + ], + [ + -124.0686763, + 44.70087 + ], + [ + -124.0659643, + 44.7013913 + ], + [ + -124.0631642, + 44.7015486 + ], + [ + -124.0609093, + 44.7015265 + ], + [ + -124.0579516, + 44.70129 + ], + [ + -124.0551149, + 44.7006479 + ], + [ + -124.0525075, + 44.6996246 + ], + [ + -124.0502289, + 44.6982592 + ], + [ + -124.0483661, + 44.6966039 + ], + [ + -124.0469902, + 44.6947218 + ], + [ + -124.0461536, + 44.6926848 + ], + [ + -124.0458883, + 44.6905707 + ], + [ + -124.0458888, + 44.6905277 + ], + [ + -124.0462068, + 44.6884099 + ], + [ + -124.0470979, + 44.6863771 + ], + [ + -124.0482127, + 44.6849192 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16025_s_16026", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0483429, + 44.6850789 + ], + [ + -124.0483242, + 44.6850819 + ], + [ + -124.0474428, + 44.6822944 + ], + [ + -124.0468179, + 44.6808121 + ], + [ + -124.0465969, + 44.6803698 + ], + [ + -124.0463133, + 44.6797429 + ], + [ + -124.0455137, + 44.6777728 + ], + [ + -124.0449685, + 44.6756787 + ], + [ + -124.0450064, + 44.673549 + ], + [ + -124.0456258, + 44.6714654 + ], + [ + -124.0468029, + 44.6695081 + ], + [ + -124.0484924, + 44.6677523 + ], + [ + -124.0506293, + 44.6662653 + ], + [ + -124.0531316, + 44.6651044 + ], + [ + -124.0559031, + 44.6643141 + ], + [ + -124.0588373, + 44.6639248 + ], + [ + -124.0618215, + 44.6639514 + ], + [ + -124.0647411, + 44.664393 + ], + [ + -124.0674841, + 44.6652324 + ], + [ + -124.0699449, + 44.6664376 + ], + [ + -124.0720291, + 44.6679622 + ], + [ + -124.0736566, + 44.6697476 + ], + [ + -124.0747647, + 44.6717253 + ], + [ + -124.0754366, + 44.6733787 + ], + [ + -124.0756315, + 44.6737683 + ], + [ + -124.0758709, + 44.674288 + ], + [ + -124.0767614, + 44.6763979 + ], + [ + -124.0770338, + 44.6771363 + ], + [ + -124.0780346, + 44.6802961 + ], + [ + -124.0782854, + 44.681309 + ], + [ + -124.0783555, + 44.681699 + ], + [ + -124.0784432, + 44.683828 + ], + [ + -124.077947, + 44.6859282 + ], + [ + -124.0768859, + 44.6879191 + ], + [ + -124.0753006, + 44.689724 + ], + [ + -124.0732521, + 44.6912736 + ], + [ + -124.0708191, + 44.6925083 + ], + [ + -124.0680951, + 44.6933806 + ], + [ + -124.0651847, + 44.693857 + ], + [ + -124.0622, + 44.6939191 + ], + [ + -124.0592556, + 44.6935647 + ], + [ + -124.0564648, + 44.6928072 + ], + [ + -124.0539349, + 44.6916759 + ], + [ + -124.0517632, + 44.6902142 + ], + [ + -124.050033, + 44.6884784 + ], + [ + -124.0488109, + 44.6865351 + ], + [ + -124.0483429, + 44.6850789 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16025_s_2455449", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.076956, + 44.67697 + ], + [ + -124.0769892, + 44.6770561 + ], + [ + -124.0770612, + 44.6772497 + ], + [ + -124.0773814, + 44.6781436 + ], + [ + -124.07754, + 44.6786333 + ], + [ + -124.0776351, + 44.6789613 + ], + [ + -124.0776509, + 44.6790166 + ], + [ + -124.0776664, + 44.6790715 + ], + [ + -124.0777518, + 44.6793673 + ], + [ + -124.0777742, + 44.6794465 + ], + [ + -124.0779153, + 44.6799545 + ], + [ + -124.0779829, + 44.6802142 + ], + [ + -124.078109, + 44.6807342 + ], + [ + -124.0781202, + 44.6807811 + ], + [ + -124.0781775, + 44.6810233 + ], + [ + -124.0782357, + 44.6812675 + ], + [ + -124.0784453, + 44.6833921 + ], + [ + -124.0780699, + 44.6855051 + ], + [ + -124.0771238, + 44.6875253 + ], + [ + -124.0756433, + 44.6893749 + ], + [ + -124.0736854, + 44.690983 + ], + [ + -124.0713252, + 44.6922876 + ], + [ + -124.0686535, + 44.6932386 + ], + [ + -124.0657729, + 44.6937995 + ], + [ + -124.0627942, + 44.6939487 + ], + [ + -124.059832, + 44.6936804 + ], + [ + -124.0570001, + 44.693005 + ], + [ + -124.0544074, + 44.6919485 + ], + [ + -124.0521537, + 44.6905514 + ], + [ + -124.0503254, + 44.6888674 + ], + [ + -124.0489929, + 44.6869614 + ], + [ + -124.0482074, + 44.6849065 + ], + [ + -124.0481474, + 44.6846545 + ], + [ + -124.0481437, + 44.684639 + ], + [ + -124.0480903, + 44.6844124 + ], + [ + -124.0480016, + 44.684046 + ], + [ + -124.0479077, + 44.6837072 + ], + [ + -124.0478272, + 44.6834277 + ], + [ + -124.0477822, + 44.6832717 + ], + [ + -124.0475861, + 44.6827235 + ], + [ + -124.0475324, + 44.682584 + ], + [ + -124.0474308, + 44.682306 + ], + [ + -124.0473891, + 44.6821854 + ], + [ + -124.0473724, + 44.6821413 + ], + [ + -124.0470242, + 44.6813348 + ], + [ + -124.0467826, + 44.6808066 + ], + [ + -124.0467373, + 44.680706 + ], + [ + -124.0464174, + 44.6799829 + ], + [ + -124.0463173, + 44.6797472 + ], + [ + -124.0461006, + 44.6792156 + ], + [ + -124.0458961, + 44.6787143 + ], + [ + -124.045827, + 44.6785503 + ], + [ + -124.0458192, + 44.6785316 + ], + [ + -124.0457961, + 44.6784765 + ], + [ + -124.0457817, + 44.6784433 + ], + [ + -124.0457579, + 44.6783878 + ], + [ + -124.0453381, + 44.6774007 + ], + [ + -124.0453016, + 44.6773136 + ], + [ + -124.0450851, + 44.6767888 + ], + [ + -124.044822, + 44.6761816 + ], + [ + -124.044744, + 44.6759959 + ], + [ + -124.04451, + 44.6754196 + ], + [ + -124.044493, + 44.6753783 + ], + [ + -124.0444852, + 44.6753594 + ], + [ + -124.0440144, + 44.6742103 + ], + [ + -124.0439972, + 44.6741679 + ], + [ + -124.0439042, + 44.6739375 + ], + [ + -124.0438165, + 44.6737337 + ], + [ + -124.0437644, + 44.6736099 + ], + [ + -124.0435629, + 44.6731209 + ], + [ + -124.0434269, + 44.6728217 + ], + [ + -124.04333, + 44.6726005 + ], + [ + -124.0432145, + 44.6723266 + ], + [ + -124.0431802, + 44.6722467 + ], + [ + -124.0431516, + 44.6721794 + ], + [ + -124.0431096, + 44.6720794 + ], + [ + -124.0430719, + 44.6719881 + ], + [ + -124.0429741, + 44.6717475 + ], + [ + -124.0428534, + 44.6714796 + ], + [ + -124.0426661, + 44.671031 + ], + [ + -124.0425379, + 44.6706979 + ], + [ + -124.0424729, + 44.670529 + ], + [ + -124.0423488, + 44.6702526 + ], + [ + -124.0422856, + 44.6701084 + ], + [ + -124.0422086, + 44.6699284 + ], + [ + -124.0421844, + 44.6698711 + ], + [ + -124.0418856, + 44.6691581 + ], + [ + -124.0418358, + 44.6690367 + ], + [ + -124.0418032, + 44.6689556 + ], + [ + -124.0415209, + 44.6683269 + ], + [ + -124.0414538, + 44.6681737 + ], + [ + -124.0407362, + 44.6664906 + ], + [ + -124.0406895, + 44.6663789 + ], + [ + -124.0403479, + 44.6655457 + ], + [ + -124.0401735, + 44.665134 + ], + [ + -124.0395795, + 44.6637336 + ], + [ + -124.0394039, + 44.6632852 + ], + [ + -124.0392876, + 44.6629616 + ], + [ + -124.0390094, + 44.6622483 + ], + [ + -124.0386748, + 44.6611871 + ], + [ + -124.038444, + 44.6602351 + ], + [ + -124.0384238, + 44.6601497 + ], + [ + -124.0383319, + 44.6597517 + ], + [ + -124.0382685, + 44.6594511 + ], + [ + -124.0381916, + 44.6590481 + ], + [ + -124.0381281, + 44.6586644 + ], + [ + -124.0379475, + 44.6573763 + ], + [ + -124.0379176, + 44.657137 + ], + [ + -124.0378578, + 44.656588 + ], + [ + -124.0378233, + 44.6561654 + ], + [ + -124.0377944, + 44.6556334 + ], + [ + -124.0377831, + 44.6552438 + ], + [ + -124.0377803, + 44.6545348 + ], + [ + -124.0380758, + 44.6523732 + ], + [ + -124.0389677, + 44.6502967 + ], + [ + -124.0404202, + 44.6483884 + ], + [ + -124.0423754, + 44.6467243 + ], + [ + -124.0447549, + 44.6453711 + ], + [ + -124.0474639, + 44.6443827 + ], + [ + -124.050394, + 44.6437986 + ], + [ + -124.0534283, + 44.6436422 + ], + [ + -124.0538782, + 44.6436512 + ], + [ + -124.0547795, + 44.6436883 + ], + [ + -124.0549235, + 44.6436973 + ], + [ + -124.0578558, + 44.6440901 + ], + [ + -124.0606244, + 44.6448837 + ], + [ + -124.0631231, + 44.6460476 + ], + [ + -124.0652559, + 44.6475371 + ], + [ + -124.0669407, + 44.6492949 + ], + [ + -124.0681128, + 44.6512536 + ], + [ + -124.0687271, + 44.6533379 + ], + [ + -124.06876, + 44.6554677 + ], + [ + -124.0684616, + 44.6566036 + ], + [ + -124.0685439, + 44.6569424 + ], + [ + -124.0686593, + 44.6572378 + ], + [ + -124.0687396, + 44.6574519 + ], + [ + -124.0688135, + 44.6576573 + ], + [ + -124.0693142, + 44.6588364 + ], + [ + -124.0695108, + 44.6592998 + ], + [ + -124.0695498, + 44.6593933 + ], + [ + -124.069888, + 44.6602173 + ], + [ + -124.0705498, + 44.6617677 + ], + [ + -124.0708706, + 44.6624812 + ], + [ + -124.0710086, + 44.6628054 + ], + [ + -124.0710823, + 44.6629886 + ], + [ + -124.071344, + 44.6636124 + ], + [ + -124.0713779, + 44.6636915 + ], + [ + -124.0715666, + 44.6641115 + ], + [ + -124.0717478, + 44.6645454 + ], + [ + -124.0718979, + 44.6649344 + ], + [ + -124.0719414, + 44.6650474 + ], + [ + -124.072029, + 44.6652415 + ], + [ + -124.0721498, + 44.6655224 + ], + [ + -124.0723222, + 44.6659433 + ], + [ + -124.0723382, + 44.6659805 + ], + [ + -124.0723613, + 44.6660347 + ], + [ + -124.0724415, + 44.6662246 + ], + [ + -124.0725624, + 44.6664902 + ], + [ + -124.0725931, + 44.6665578 + ], + [ + -124.0727169, + 44.6668433 + ], + [ + -124.0729524, + 44.6674143 + ], + [ + -124.0730529, + 44.6676475 + ], + [ + -124.0731292, + 44.6678303 + ], + [ + -124.0732505, + 44.6681305 + ], + [ + -124.0737389, + 44.6693208 + ], + [ + -124.0737493, + 44.6693463 + ], + [ + -124.0739531, + 44.6698475 + ], + [ + -124.0741843, + 44.6703791 + ], + [ + -124.074227, + 44.670479 + ], + [ + -124.074248, + 44.670529 + ], + [ + -124.0742687, + 44.6705785 + ], + [ + -124.0744959, + 44.6711288 + ], + [ + -124.0749327, + 44.6721531 + ], + [ + -124.0749532, + 44.6722016 + ], + [ + -124.0749933, + 44.6722972 + ], + [ + -124.0750784, + 44.6724988 + ], + [ + -124.0751175, + 44.6725931 + ], + [ + -124.0753417, + 44.6731421 + ], + [ + -124.0755109, + 44.6735567 + ], + [ + -124.0757567, + 44.6741118 + ], + [ + -124.0760149, + 44.6746755 + ], + [ + -124.0760914, + 44.6748476 + ], + [ + -124.0765557, + 44.6759215 + ], + [ + -124.0767035, + 44.6762859 + ], + [ + -124.0768336, + 44.6766289 + ], + [ + -124.0769087, + 44.6768349 + ], + [ + -124.076956, + 44.67697 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16026_s_15893", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0378178, + 44.646528 + ], + [ + -124.0370021, + 44.6463536 + ], + [ + -124.0344633, + 44.6454119 + ], + [ + -124.0322164, + 44.6441475 + ], + [ + -124.0303407, + 44.6426052 + ], + [ + -124.0295919, + 44.6416859 + ], + [ + -124.0293088, + 44.6414373 + ], + [ + -124.0279146, + 44.6395542 + ], + [ + -124.0270619, + 44.6375131 + ], + [ + -124.0267833, + 44.6353925 + ], + [ + -124.0270895, + 44.6332738 + ], + [ + -124.0279686, + 44.6312385 + ], + [ + -124.0293868, + 44.6293647 + ], + [ + -124.0312896, + 44.6277245 + ], + [ + -124.0336038, + 44.6263808 + ], + [ + -124.0362406, + 44.6253853 + ], + [ + -124.0390985, + 44.6247763 + ], + [ + -124.0420679, + 44.624577 + ], + [ + -124.0450347, + 44.6247952 + ], + [ + -124.0478849, + 44.6254224 + ], + [ + -124.0479566, + 44.6254501 + ], + [ + -124.0479631, + 44.6254501 + ], + [ + -124.0516905, + 44.6254064 + ], + [ + -124.0541175, + 44.6255166 + ], + [ + -124.0546794, + 44.6255746 + ], + [ + -124.0577798, + 44.6261372 + ], + [ + -124.0583857, + 44.6262972 + ], + [ + -124.0611823, + 44.6272784 + ], + [ + -124.0636404, + 44.6286458 + ], + [ + -124.0656569, + 44.6303421 + ], + [ + -124.0671474, + 44.6322962 + ], + [ + -124.0680492, + 44.634426 + ], + [ + -124.0683245, + 44.6366424 + ], + [ + -124.0682791, + 44.6389412 + ], + [ + -124.0682986, + 44.642828 + ], + [ + -124.0682969, + 44.6430364 + ], + [ + -124.0682445, + 44.6454363 + ], + [ + -124.0682795, + 44.6481893 + ], + [ + -124.0682798, + 44.6483581 + ], + [ + -124.0682247, + 44.6544566 + ], + [ + -124.0682391, + 44.6550031 + ], + [ + -124.0683584, + 44.6560271 + ], + [ + -124.0685415, + 44.6567891 + ], + [ + -124.0689393, + 44.6579451 + ], + [ + -124.0697657, + 44.6598177 + ], + [ + -124.0698336, + 44.6599758 + ], + [ + -124.0746962, + 44.6716061 + ], + [ + -124.0752653, + 44.673697 + ], + [ + -124.0752518, + 44.6758268 + ], + [ + -124.0746562, + 44.6779139 + ], + [ + -124.0735013, + 44.679878 + ], + [ + -124.0718315, + 44.6816435 + ], + [ + -124.0697108, + 44.6831427 + ], + [ + -124.0672209, + 44.6843178 + ], + [ + -124.0644573, + 44.6851238 + ], + [ + -124.0615264, + 44.6855296 + ], + [ + -124.0585409, + 44.6855195 + ], + [ + -124.0556155, + 44.6850941 + ], + [ + -124.0528627, + 44.6842696 + ], + [ + -124.0503884, + 44.6830778 + ], + [ + -124.0482876, + 44.6815645 + ], + [ + -124.0466411, + 44.6797878 + ], + [ + -124.0455122, + 44.677816 + ], + [ + -124.0406879, + 44.6662636 + ], + [ + -124.0397502, + 44.6641364 + ], + [ + -124.0394866, + 44.6634637 + ], + [ + -124.0388441, + 44.6615936 + ], + [ + -124.0386242, + 44.6608388 + ], + [ + -124.0382386, + 44.6592308 + ], + [ + -124.0380723, + 44.6582939 + ], + [ + -124.0378588, + 44.6564519 + ], + [ + -124.0378095, + 44.6557569 + ], + [ + -124.0377828, + 44.6547248 + ], + [ + -124.0377806, + 44.6544499 + ], + [ + -124.0378394, + 44.6482983 + ], + [ + -124.0378178, + 44.646528 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16026_s_2483495", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0690529, + 44.6557879 + ], + [ + -124.0691216, + 44.6564753 + ], + [ + -124.0688841, + 44.6578235 + ], + [ + -124.0693142, + 44.6588364 + ], + [ + -124.0695108, + 44.6592998 + ], + [ + -124.0695498, + 44.6593933 + ], + [ + -124.069888, + 44.6602173 + ], + [ + -124.0705498, + 44.6617677 + ], + [ + -124.0708706, + 44.6624812 + ], + [ + -124.0710086, + 44.6628054 + ], + [ + -124.0710823, + 44.6629886 + ], + [ + -124.071344, + 44.6636124 + ], + [ + -124.0713779, + 44.6636915 + ], + [ + -124.0715666, + 44.6641115 + ], + [ + -124.0717478, + 44.6645454 + ], + [ + -124.0718979, + 44.6649344 + ], + [ + -124.0719414, + 44.6650474 + ], + [ + -124.072029, + 44.6652415 + ], + [ + -124.0721498, + 44.6655224 + ], + [ + -124.0723222, + 44.6659433 + ], + [ + -124.0723382, + 44.6659805 + ], + [ + -124.0723613, + 44.6660347 + ], + [ + -124.0724415, + 44.6662246 + ], + [ + -124.0725624, + 44.6664902 + ], + [ + -124.0725931, + 44.6665578 + ], + [ + -124.0727169, + 44.6668433 + ], + [ + -124.0729524, + 44.6674143 + ], + [ + -124.0730529, + 44.6676475 + ], + [ + -124.0731292, + 44.6678303 + ], + [ + -124.0732505, + 44.6681305 + ], + [ + -124.0737389, + 44.6693208 + ], + [ + -124.0737493, + 44.6693463 + ], + [ + -124.0739531, + 44.6698475 + ], + [ + -124.0741843, + 44.6703791 + ], + [ + -124.0742104, + 44.6704398 + ], + [ + -124.0747006, + 44.6715903 + ], + [ + -124.0752847, + 44.6736791 + ], + [ + -124.0752865, + 44.675809 + ], + [ + -124.0747059, + 44.6778982 + ], + [ + -124.0735651, + 44.6798665 + ], + [ + -124.071908, + 44.6816381 + ], + [ + -124.0697982, + 44.683145 + ], + [ + -124.0673167, + 44.6843292 + ], + [ + -124.064559, + 44.6851453 + ], + [ + -124.0616311, + 44.6855618 + ], + [ + -124.0586455, + 44.6855627 + ], + [ + -124.0557171, + 44.685148 + ], + [ + -124.0529584, + 44.6843336 + ], + [ + -124.0504755, + 44.6831508 + ], + [ + -124.0483639, + 44.6816452 + ], + [ + -124.0467047, + 44.6798746 + ], + [ + -124.0455616, + 44.677907 + ], + [ + -124.0450849, + 44.6767867 + ], + [ + -124.0448252, + 44.676189 + ], + [ + -124.044744, + 44.6759959 + ], + [ + -124.04451, + 44.6754196 + ], + [ + -124.044493, + 44.6753783 + ], + [ + -124.0444852, + 44.6753594 + ], + [ + -124.0440144, + 44.6742103 + ], + [ + -124.0439972, + 44.6741679 + ], + [ + -124.0439042, + 44.6739375 + ], + [ + -124.0438165, + 44.6737337 + ], + [ + -124.0437644, + 44.6736099 + ], + [ + -124.0435629, + 44.6731209 + ], + [ + -124.0434269, + 44.6728217 + ], + [ + -124.04333, + 44.6726005 + ], + [ + -124.0432145, + 44.6723266 + ], + [ + -124.0431802, + 44.6722467 + ], + [ + -124.0431516, + 44.6721794 + ], + [ + -124.0431096, + 44.6720794 + ], + [ + -124.0430719, + 44.6719881 + ], + [ + -124.0429741, + 44.6717475 + ], + [ + -124.0428534, + 44.6714796 + ], + [ + -124.0426661, + 44.671031 + ], + [ + -124.0425379, + 44.6706979 + ], + [ + -124.0424729, + 44.670529 + ], + [ + -124.0423488, + 44.6702526 + ], + [ + -124.0422856, + 44.6701084 + ], + [ + -124.0422086, + 44.6699284 + ], + [ + -124.0421844, + 44.6698711 + ], + [ + -124.0418856, + 44.6691581 + ], + [ + -124.0418358, + 44.6690367 + ], + [ + -124.0418032, + 44.6689556 + ], + [ + -124.0415209, + 44.6683269 + ], + [ + -124.0414538, + 44.6681737 + ], + [ + -124.0407362, + 44.6664906 + ], + [ + -124.0406895, + 44.6663789 + ], + [ + -124.0403479, + 44.6655457 + ], + [ + -124.0401735, + 44.665134 + ], + [ + -124.0395795, + 44.6637336 + ], + [ + -124.0394039, + 44.6632852 + ], + [ + -124.0392876, + 44.6629616 + ], + [ + -124.0390094, + 44.6622483 + ], + [ + -124.0386748, + 44.6611871 + ], + [ + -124.038444, + 44.6602351 + ], + [ + -124.0384238, + 44.6601497 + ], + [ + -124.0383319, + 44.6597517 + ], + [ + -124.0382685, + 44.6594511 + ], + [ + -124.0381916, + 44.6590481 + ], + [ + -124.0381281, + 44.6586644 + ], + [ + -124.0379475, + 44.6573763 + ], + [ + -124.0379176, + 44.657137 + ], + [ + -124.0378578, + 44.656588 + ], + [ + -124.0378233, + 44.6561654 + ], + [ + -124.0377944, + 44.6556334 + ], + [ + -124.0377831, + 44.6552438 + ], + [ + -124.0377803, + 44.6545348 + ], + [ + -124.0380847, + 44.6523416 + ], + [ + -124.0390028, + 44.6502375 + ], + [ + -124.0404968, + 44.6483088 + ], + [ + -124.0425052, + 44.646635 + ], + [ + -124.0449453, + 44.6452849 + ], + [ + -124.0477167, + 44.644314 + ], + [ + -124.0507054, + 44.6437623 + ], + [ + -124.0537886, + 44.6436525 + ], + [ + -124.0545465, + 44.6436805 + ], + [ + -124.0573334, + 44.6439696 + ], + [ + -124.0575654, + 44.6440096 + ], + [ + -124.0603999, + 44.6447157 + ], + [ + -124.0629851, + 44.6458053 + ], + [ + -124.0652206, + 44.6472359 + ], + [ + -124.0670194, + 44.6489519 + ], + [ + -124.0683113, + 44.6508865 + ], + [ + -124.0690463, + 44.6529645 + ], + [ + -124.0691954, + 44.6551051 + ], + [ + -124.0690529, + 44.6557879 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16030_s_16033", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0758507, + 44.6386749 + ], + [ + -124.0757093, + 44.6402352 + ], + [ + -124.0749395, + 44.642293 + ], + [ + -124.0736221, + 44.644204 + ], + [ + -124.0718077, + 44.6458948 + ], + [ + -124.069566, + 44.6473003 + ], + [ + -124.0669832, + 44.6483666 + ], + [ + -124.0641585, + 44.6490526 + ], + [ + -124.0612005, + 44.649332 + ], + [ + -124.0582231, + 44.649194 + ], + [ + -124.0553406, + 44.648644 + ], + [ + -124.0526639, + 44.647703 + ], + [ + -124.0502959, + 44.6464072 + ], + [ + -124.0483277, + 44.6448065 + ], + [ + -124.0468347, + 44.6429625 + ], + [ + -124.0458745, + 44.6409459 + ], + [ + -124.0454838, + 44.6388343 + ], + [ + -124.0454788, + 44.6387273 + ], + [ + -124.0454777, + 44.6383703 + ], + [ + -124.0452352, + 44.6365033 + ], + [ + -124.0455444, + 44.6343848 + ], + [ + -124.0464265, + 44.6323502 + ], + [ + -124.0478474, + 44.6304774 + ], + [ + -124.0497526, + 44.6288386 + ], + [ + -124.0520688, + 44.6274967 + ], + [ + -124.054707, + 44.6265031 + ], + [ + -124.0575659, + 44.6258962 + ], + [ + -124.0605356, + 44.6256991 + ], + [ + -124.0607906, + 44.6257001 + ], + [ + -124.0637587, + 44.6259207 + ], + [ + -124.0666096, + 44.6265508 + ], + [ + -124.0692334, + 44.627566 + ], + [ + -124.0715294, + 44.6289275 + ], + [ + -124.0734091, + 44.6305828 + ], + [ + -124.0748004, + 44.6324682 + ], + [ + -124.0756495, + 44.6345113 + ], + [ + -124.0759238, + 44.6366334 + ], + [ + -124.0759203, + 44.637028 + ], + [ + -124.0759222, + 44.6374146 + ], + [ + -124.0759223, + 44.6374333 + ], + [ + -124.0759234, + 44.6378993 + ], + [ + -124.0759172, + 44.6382268 + ], + [ + -124.0758994, + 44.6386759 + ], + [ + -124.0758507, + 44.6386749 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16031_s_16030", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0454681, + 44.6405538 + ], + [ + -124.045468, + 44.6401723 + ], + [ + -124.0454699, + 44.6399973 + ], + [ + -124.0454893, + 44.6391243 + ], + [ + -124.045491, + 44.6389938 + ], + [ + -124.0454834, + 44.6388262 + ], + [ + -124.0456794, + 44.6367009 + ], + [ + -124.0464524, + 44.6346437 + ], + [ + -124.0477724, + 44.6327337 + ], + [ + -124.0495889, + 44.6310442 + ], + [ + -124.0518319, + 44.6296403 + ], + [ + -124.0544153, + 44.6285757 + ], + [ + -124.0572399, + 44.6278914 + ], + [ + -124.060197, + 44.6276137 + ], + [ + -124.0631732, + 44.6277532 + ], + [ + -124.0660541, + 44.6283046 + ], + [ + -124.0687292, + 44.6292468 + ], + [ + -124.0710955, + 44.6305434 + ], + [ + -124.0730622, + 44.6321447 + ], + [ + -124.0745538, + 44.6339892 + ], + [ + -124.0755128, + 44.6360061 + ], + [ + -124.0759024, + 44.6381178 + ], + [ + -124.0759205, + 44.6385118 + ], + [ + -124.075928, + 44.6389647 + ], + [ + -124.0759231, + 44.6393577 + ], + [ + -124.0759219, + 44.6394296 + ], + [ + -124.0759041, + 44.6402512 + ], + [ + -124.0759055, + 44.6419697 + ], + [ + -124.0756095, + 44.6441085 + ], + [ + -124.0747295, + 44.6461638 + ], + [ + -124.0733, + 44.6480553 + ], + [ + -124.0713768, + 44.6497088 + ], + [ + -124.0690352, + 44.6510597 + ], + [ + -124.0663667, + 44.6520551 + ], + [ + -124.0634759, + 44.6526561 + ], + [ + -124.060476, + 44.652839 + ], + [ + -124.0602739, + 44.652837 + ], + [ + -124.0573088, + 44.6525988 + ], + [ + -124.0544657, + 44.6519522 + ], + [ + -124.0518541, + 44.6509221 + ], + [ + -124.0495743, + 44.649548 + ], + [ + -124.047714, + 44.6478827 + ], + [ + -124.0463446, + 44.6459904 + ], + [ + -124.0455187, + 44.6439437 + ], + [ + -124.045268, + 44.6418213 + ], + [ + -124.0454681, + 44.6405538 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16032_s_2438933", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0659313, + 44.6340192 + ], + [ + -124.0678692, + 44.634758 + ], + [ + -124.070176, + 44.6361084 + ], + [ + -124.0720697, + 44.6377541 + ], + [ + -124.0734774, + 44.639632 + ], + [ + -124.0743451, + 44.6416698 + ], + [ + -124.0746392, + 44.6437894 + ], + [ + -124.0743485, + 44.6459091 + ], + [ + -124.073484, + 44.6479477 + ], + [ + -124.072079, + 44.6498267 + ], + [ + -124.0701874, + 44.6514739 + ], + [ + -124.0678818, + 44.6528259 + ], + [ + -124.0652509, + 44.6538309 + ], + [ + -124.0623958, + 44.6544501 + ], + [ + -124.0594263, + 44.6546597 + ], + [ + -124.0588426, + 44.6546599 + ], + [ + -124.0586126, + 44.6546587 + ], + [ + -124.0565752, + 44.6546373 + ], + [ + -124.0556672, + 44.6546398 + ], + [ + -124.0527025, + 44.6544402 + ], + [ + -124.049849, + 44.6538323 + ], + [ + -124.0472161, + 44.6528394 + ], + [ + -124.0449044, + 44.6514996 + ], + [ + -124.0430025, + 44.6498641 + ], + [ + -124.0427563, + 44.64954 + ], + [ + -124.042733, + 44.649526 + ], + [ + -124.0408701, + 44.6478622 + ], + [ + -124.0394977, + 44.645971 + ], + [ + -124.0386687, + 44.6439249 + ], + [ + -124.0384147, + 44.6418027 + ], + [ + -124.0387456, + 44.6396859 + ], + [ + -124.0396484, + 44.6376559 + ], + [ + -124.0410885, + 44.6357906 + ], + [ + -124.0430105, + 44.6341617 + ], + [ + -124.0453405, + 44.6328318 + ], + [ + -124.047989, + 44.631852 + ], + [ + -124.0508543, + 44.6312599 + ], + [ + -124.0538262, + 44.6310782 + ], + [ + -124.0558346, + 44.6310965 + ], + [ + -124.058838, + 44.6313382 + ], + [ + -124.0617153, + 44.6319989 + ], + [ + -124.064353, + 44.6330526 + ], + [ + -124.0659313, + 44.6340192 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16033_s_16034", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.059929, + 44.6474268 + ], + [ + -124.0599046, + 44.6474267 + ], + [ + -124.0597465, + 44.6474258 + ], + [ + -124.0589193, + 44.6474218 + ], + [ + -124.0588853, + 44.6474216 + ], + [ + -124.0587506, + 44.6474208 + ], + [ + -124.0580709, + 44.6474179 + ], + [ + -124.0572279, + 44.6474139 + ], + [ + -124.0562531, + 44.6474099 + ], + [ + -124.0562143, + 44.6474097 + ], + [ + -124.0556397, + 44.6474063 + ], + [ + -124.054692, + 44.6474099 + ], + [ + -124.0517213, + 44.6472124 + ], + [ + -124.0488616, + 44.6466049 + ], + [ + -124.046223, + 44.6456107 + ], + [ + -124.0439069, + 44.6442681 + ], + [ + -124.0420023, + 44.6426286 + ], + [ + -124.0405824, + 44.6407554 + ], + [ + -124.0397018, + 44.6387204 + ], + [ + -124.0393941, + 44.6366018 + ], + [ + -124.0396712, + 44.6344811 + ], + [ + -124.0405224, + 44.6324397 + ], + [ + -124.0419149, + 44.6305561 + ], + [ + -124.0437952, + 44.6289027 + ], + [ + -124.0460909, + 44.6275429 + ], + [ + -124.0487139, + 44.6265291 + ], + [ + -124.0515635, + 44.6259001 + ], + [ + -124.05453, + 44.6256801 + ], + [ + -124.0555808, + 44.6256761 + ], + [ + -124.0557878, + 44.6256763 + ], + [ + -124.0564463, + 44.6256802 + ], + [ + -124.0574087, + 44.6256841 + ], + [ + -124.0582583, + 44.6256881 + ], + [ + -124.058955, + 44.6256911 + ], + [ + -124.0589997, + 44.6256913 + ], + [ + -124.0591397, + 44.6256922 + ], + [ + -124.0599615, + 44.6256962 + ], + [ + -124.0599854, + 44.6256963 + ], + [ + -124.0601432, + 44.6256972 + ], + [ + -124.060553, + 44.6256992 + ], + [ + -124.0635191, + 44.6259219 + ], + [ + -124.0663675, + 44.6265536 + ], + [ + -124.0689886, + 44.62757 + ], + [ + -124.0712818, + 44.6289319 + ], + [ + -124.073159, + 44.6305871 + ], + [ + -124.0745481, + 44.6324719 + ], + [ + -124.0753955, + 44.6345141 + ], + [ + -124.0756687, + 44.6366351 + ], + [ + -124.0753572, + 44.6387533 + ], + [ + -124.0744728, + 44.6407875 + ], + [ + -124.0730495, + 44.6426594 + ], + [ + -124.0711419, + 44.6442971 + ], + [ + -124.0688233, + 44.6456375 + ], + [ + -124.0661829, + 44.6466292 + ], + [ + -124.0633222, + 44.6472341 + ], + [ + -124.060351, + 44.6474288 + ], + [ + -124.059929, + 44.6474268 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16034_s_15889", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0695159, + 44.6344483 + ], + [ + -124.069586, + 44.6346247 + ], + [ + -124.0698246, + 44.6367478 + ], + [ + -124.0694784, + 44.6388634 + ], + [ + -124.0685608, + 44.64089 + ], + [ + -124.067107, + 44.6427499 + ], + [ + -124.0651728, + 44.6443716 + ], + [ + -124.0628325, + 44.6456926 + ], + [ + -124.060176, + 44.6466623 + ], + [ + -124.0573056, + 44.6472433 + ], + [ + -124.0543315, + 44.6474133 + ], + [ + -124.0528814, + 44.6473943 + ], + [ + -124.0502878, + 44.6472008 + ], + [ + -124.0496773, + 44.6470776 + ], + [ + -124.047722, + 44.6469283 + ], + [ + -124.0448952, + 44.6463012 + ], + [ + -124.042292, + 44.6452952 + ], + [ + -124.040011, + 44.6439484 + ], + [ + -124.0381383, + 44.6423119 + ], + [ + -124.0367449, + 44.6404475 + ], + [ + -124.0358834, + 44.6384258 + ], + [ + -124.0355864, + 44.6363233 + ], + [ + -124.0355806, + 44.634986 + ], + [ + -124.035699, + 44.6335986 + ], + [ + -124.0357362, + 44.6333871 + ], + [ + -124.0364971, + 44.6311004 + ], + [ + -124.0365611, + 44.6309717 + ], + [ + -124.0384026, + 44.6284114 + ], + [ + -124.0385043, + 44.6283069 + ], + [ + -124.0399154, + 44.6270633 + ], + [ + -124.0415669, + 44.6259813 + ], + [ + -124.042301, + 44.6255672 + ], + [ + -124.0432931, + 44.6250524 + ], + [ + -124.0437653, + 44.6248275 + ], + [ + -124.0444862, + 44.6245047 + ], + [ + -124.0449834, + 44.6242956 + ], + [ + -124.0460925, + 44.6238723 + ], + [ + -124.04633, + 44.6237905 + ], + [ + -124.0486522, + 44.6231518 + ], + [ + -124.0510891, + 44.622792 + ], + [ + -124.0513339, + 44.6227706 + ], + [ + -124.0540622, + 44.6227078 + ], + [ + -124.0567624, + 44.6229942 + ], + [ + -124.0593474, + 44.6236205 + ], + [ + -124.0596186, + 44.6237063 + ], + [ + -124.0620519, + 44.624675 + ], + [ + -124.0641972, + 44.6259443 + ], + [ + -124.0643629, + 44.6260622 + ], + [ + -124.065565, + 44.6270257 + ], + [ + -124.0660166, + 44.6274341 + ], + [ + -124.0666257, + 44.6280249 + ], + [ + -124.0668976, + 44.6283081 + ], + [ + -124.06827, + 44.6300682 + ], + [ + -124.0691639, + 44.631979 + ], + [ + -124.0695484, + 44.6339747 + ], + [ + -124.0695159, + 44.6344483 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16039_s_16040", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0606432, + 44.6238951 + ], + [ + -124.0636095, + 44.6241168 + ], + [ + -124.0664582, + 44.6247475 + ], + [ + -124.0690799, + 44.6257629 + ], + [ + -124.0713741, + 44.6271239 + ], + [ + -124.0732524, + 44.6287785 + ], + [ + -124.0746427, + 44.6306628 + ], + [ + -124.0754916, + 44.6327047 + ], + [ + -124.0757663, + 44.6348256 + ], + [ + -124.0754563, + 44.636944 + ], + [ + -124.0745734, + 44.6389784 + ], + [ + -124.0731514, + 44.6408509 + ], + [ + -124.071245, + 44.6424892 + ], + [ + -124.0689275, + 44.6438305 + ], + [ + -124.0662879, + 44.6448232 + ], + [ + -124.0634276, + 44.645429 + ], + [ + -124.0604568, + 44.6456249 + ], + [ + -124.0559059, + 44.6456049 + ], + [ + -124.0529386, + 44.645383 + ], + [ + -124.050089, + 44.644752 + ], + [ + -124.0474667, + 44.6437362 + ], + [ + -124.0451725, + 44.6423746 + ], + [ + -124.0432945, + 44.6407196 + ], + [ + -124.041905, + 44.6388349 + ], + [ + -124.0410572, + 44.6367928 + ], + [ + -124.0407837, + 44.6346718 + ], + [ + -124.041095, + 44.6325535 + ], + [ + -124.041979, + 44.6305192 + ], + [ + -124.0434017, + 44.6286472 + ], + [ + -124.0453084, + 44.6270093 + ], + [ + -124.0476258, + 44.6256685 + ], + [ + -124.0502649, + 44.6246763 + ], + [ + -124.0531243, + 44.6240707 + ], + [ + -124.0560941, + 44.6238751 + ], + [ + -124.0606432, + 44.6238951 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16040_s_16042", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0577656, + 44.6240877 + ], + [ + -124.0581005, + 44.6239737 + ], + [ + -124.0609913, + 44.6234498 + ], + [ + -124.0639696, + 44.6233387 + ], + [ + -124.0669211, + 44.6236446 + ], + [ + -124.0697324, + 44.6243557 + ], + [ + -124.0722954, + 44.6254449 + ], + [ + -124.0745118, + 44.6268701 + ], + [ + -124.0762964, + 44.6285767 + ], + [ + -124.0775805, + 44.6304991 + ], + [ + -124.0783148, + 44.6325635 + ], + [ + -124.078471, + 44.6346905 + ], + [ + -124.0784343, + 44.6352635 + ], + [ + -124.0780271, + 44.6373107 + ], + [ + -124.077084, + 44.6392658 + ], + [ + -124.0756391, + 44.6410579 + ], + [ + -124.0737447, + 44.642622 + ], + [ + -124.0714695, + 44.6439016 + ], + [ + -124.0688959, + 44.6448502 + ], + [ + -124.066117, + 44.6454335 + ], + [ + -124.0632337, + 44.6456303 + ], + [ + -124.0628791, + 44.6456303 + ], + [ + -124.0628312, + 44.6456303 + ], + [ + -124.0605017, + 44.645625 + ], + [ + -124.0575335, + 44.6454095 + ], + [ + -124.0546812, + 44.6447846 + ], + [ + -124.0520547, + 44.6437745 + ], + [ + -124.0497547, + 44.6424178 + ], + [ + -124.0478698, + 44.6407669 + ], + [ + -124.0464723, + 44.6388851 + ], + [ + -124.0456159, + 44.6368448 + ], + [ + -124.0453335, + 44.6347245 + ], + [ + -124.0456358, + 44.6326055 + ], + [ + -124.0465113, + 44.6305694 + ], + [ + -124.0479261, + 44.6286943 + ], + [ + -124.0498259, + 44.6270523 + ], + [ + -124.0521377, + 44.6257066 + ], + [ + -124.0547726, + 44.6247087 + ], + [ + -124.0576294, + 44.624097 + ], + [ + -124.0577656, + 44.6240877 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16042_s_16043", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0481237, + 44.6320902 + ], + [ + -124.0484959, + 44.6299769 + ], + [ + -124.0494383, + 44.6279561 + ], + [ + -124.0509146, + 44.6261053 + ], + [ + -124.052868, + 44.6244958 + ], + [ + -124.0552235, + 44.6231894 + ], + [ + -124.0578905, + 44.6222361 + ], + [ + -124.0607666, + 44.6216727 + ], + [ + -124.0637413, + 44.6215208 + ], + [ + -124.0667003, + 44.6217861 + ], + [ + -124.0695301, + 44.6224586 + ], + [ + -124.0721219, + 44.6235124 + ], + [ + -124.0743761, + 44.624907 + ], + [ + -124.0762061, + 44.6265888 + ], + [ + -124.0775417, + 44.6284933 + ], + [ + -124.0783313, + 44.6305472 + ], + [ + -124.0785447, + 44.6326717 + ], + [ + -124.0784772, + 44.6344852 + ], + [ + -124.078106, + 44.6365985 + ], + [ + -124.0771645, + 44.6386196 + ], + [ + -124.0756887, + 44.6404706 + ], + [ + -124.0737354, + 44.6420805 + ], + [ + -124.0713796, + 44.6433874 + ], + [ + -124.0687119, + 44.644341 + ], + [ + -124.0658347, + 44.6449046 + ], + [ + -124.0628589, + 44.6450566 + ], + [ + -124.0598986, + 44.6447911 + ], + [ + -124.0570679, + 44.6441184 + ], + [ + -124.0544754, + 44.6430643 + ], + [ + -124.052221, + 44.6416693 + ], + [ + -124.0503911, + 44.6399871 + ], + [ + -124.0490562, + 44.6380823 + ], + [ + -124.0482675, + 44.6360282 + ], + [ + -124.0480552, + 44.6339036 + ], + [ + -124.0481237, + 44.6320902 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16043_s_16044", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0481668, + 44.6308284 + ], + [ + -124.048168, + 44.6307956 + ], + [ + -124.0482447, + 44.6288403 + ], + [ + -124.0486201, + 44.6267273 + ], + [ + -124.0495654, + 44.6247072 + ], + [ + -124.0510444, + 44.6228576 + ], + [ + -124.053, + 44.6212495 + ], + [ + -124.0553573, + 44.6199448 + ], + [ + -124.0580256, + 44.6189936 + ], + [ + -124.0609023, + 44.6184323 + ], + [ + -124.0638771, + 44.6182826 + ], + [ + -124.0668356, + 44.6185503 + ], + [ + -124.0696642, + 44.6192249 + ], + [ + -124.0722543, + 44.6202806 + ], + [ + -124.0745063, + 44.6216769 + ], + [ + -124.0763338, + 44.6233601 + ], + [ + -124.0776664, + 44.6252656 + ], + [ + -124.078453, + 44.6273201 + ], + [ + -124.0786632, + 44.6294448 + ], + [ + -124.0785881, + 44.6313837 + ], + [ + -124.0785447, + 44.6326418 + ], + [ + -124.0781794, + 44.6347557 + ], + [ + -124.0772434, + 44.6367781 + ], + [ + -124.0757728, + 44.6386312 + ], + [ + -124.073824, + 44.6402438 + ], + [ + -124.0714718, + 44.641554 + ], + [ + -124.0688068, + 44.6425113 + ], + [ + -124.0659313, + 44.6430789 + ], + [ + -124.0629559, + 44.6432351 + ], + [ + -124.0599951, + 44.6429738 + ], + [ + -124.0571626, + 44.642305 + ], + [ + -124.0545673, + 44.6412545 + ], + [ + -124.0523091, + 44.6398627 + ], + [ + -124.0504747, + 44.638183 + ], + [ + -124.0491346, + 44.6362801 + ], + [ + -124.0483403, + 44.6342271 + ], + [ + -124.0481222, + 44.6321028 + ], + [ + -124.0481668, + 44.6308284 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16044_s_16045", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0491891, + 44.6328754 + ], + [ + -124.0480949, + 44.6311714 + ], + [ + -124.0474046, + 44.6290992 + ], + [ + -124.0472937, + 44.6269708 + ], + [ + -124.0477664, + 44.6248678 + ], + [ + -124.0488044, + 44.622871 + ], + [ + -124.0503679, + 44.6210572 + ], + [ + -124.0523966, + 44.6194961 + ], + [ + -124.0548128, + 44.6182476 + ], + [ + -124.0575234, + 44.6173597 + ], + [ + -124.0604244, + 44.6168665 + ], + [ + -124.0634044, + 44.6167869 + ], + [ + -124.0663488, + 44.617124 + ], + [ + -124.0691447, + 44.6178648 + ], + [ + -124.0701641, + 44.6182196 + ], + [ + -124.0726332, + 44.6192975 + ], + [ + -124.0747719, + 44.6206898 + ], + [ + -124.0765029, + 44.6223462 + ], + [ + -124.0777634, + 44.6242066 + ], + [ + -124.078508, + 44.6262039 + ], + [ + -124.0787095, + 44.6282657 + ], + [ + -124.0786678, + 44.6294269 + ], + [ + -124.0782996, + 44.6315405 + ], + [ + -124.077361, + 44.6335623 + ], + [ + -124.075888, + 44.6354144 + ], + [ + -124.0739371, + 44.6370257 + ], + [ + -124.0715833, + 44.6383342 + ], + [ + -124.0689171, + 44.6392897 + ], + [ + -124.066041, + 44.6398553 + ], + [ + -124.0630656, + 44.6400094 + ], + [ + -124.0601053, + 44.6397461 + ], + [ + -124.0572738, + 44.6390754 + ], + [ + -124.0546802, + 44.6380231 + ], + [ + -124.052424, + 44.6366297 + ], + [ + -124.0505919, + 44.6349488 + ], + [ + -124.0492545, + 44.633045 + ], + [ + -124.0491891, + 44.6328754 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16045_s_15942", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0736143, + 44.6202666 + ], + [ + -124.0739567, + 44.6204973 + ], + [ + -124.0756854, + 44.6222329 + ], + [ + -124.0769069, + 44.624176 + ], + [ + -124.0775742, + 44.6262519 + ], + [ + -124.0776615, + 44.6283809 + ], + [ + -124.0771655, + 44.6304812 + ], + [ + -124.0761052, + 44.632472 + ], + [ + -124.0745213, + 44.6342768 + ], + [ + -124.0724746, + 44.6358263 + ], + [ + -124.0700437, + 44.6370608 + ], + [ + -124.0673222, + 44.637933 + ], + [ + -124.0644146, + 44.6384092 + ], + [ + -124.0614327, + 44.6384712 + ], + [ + -124.0584912, + 44.6381166 + ], + [ + -124.0557031, + 44.637359 + ], + [ + -124.0546701, + 44.6369919 + ], + [ + -124.052078, + 44.6358244 + ], + [ + -124.0498662, + 44.6343097 + ], + [ + -124.0481244, + 44.6325093 + ], + [ + -124.0476683, + 44.6317448 + ], + [ + -124.0476505, + 44.6317312 + ], + [ + -124.0473568, + 44.6314996 + ], + [ + -124.0468688, + 44.6311036 + ], + [ + -124.0467273, + 44.6309871 + ], + [ + -124.0460663, + 44.630435 + ], + [ + -124.0460178, + 44.6303942 + ], + [ + -124.0438579, + 44.628572 + ], + [ + -124.0435653, + 44.6283174 + ], + [ + -124.0426883, + 44.6275303 + ], + [ + -124.042586, + 44.6274375 + ], + [ + -124.0417161, + 44.626639 + ], + [ + -124.0404163, + 44.6254485 + ], + [ + -124.04027, + 44.6253123 + ], + [ + -124.040047, + 44.6251013 + ], + [ + -124.0395863, + 44.6246408 + ], + [ + -124.0393913, + 44.6244348 + ], + [ + -124.039149, + 44.6241706 + ], + [ + -124.0389421, + 44.6239375 + ], + [ + -124.0386247, + 44.6235638 + ], + [ + -124.0384097, + 44.6232988 + ], + [ + -124.0380085, + 44.6227709 + ], + [ + -124.0378215, + 44.6225079 + ], + [ + -124.037763, + 44.6224247 + ], + [ + -124.037486, + 44.6220266 + ], + [ + -124.0370026, + 44.6212583 + ], + [ + -124.0368272, + 44.6209481 + ], + [ + -124.036626, + 44.6205959 + ], + [ + -124.0362979, + 44.6199663 + ], + [ + -124.0361589, + 44.6196723 + ], + [ + -124.0358421, + 44.6189109 + ], + [ + -124.0357301, + 44.6186009 + ], + [ + -124.0355901, + 44.6181782 + ], + [ + -124.0355061, + 44.6179002 + ], + [ + -124.0354282, + 44.6176249 + ], + [ + -124.0352914, + 44.6171069 + ], + [ + -124.0351708, + 44.61658 + ], + [ + -124.0351019, + 44.616224 + ], + [ + -124.035084, + 44.6161312 + ], + [ + -124.034944, + 44.6148416 + ], + [ + -124.0349413, + 44.6147336 + ], + [ + -124.0349327, + 44.6144235 + ], + [ + -124.03493, + 44.6141416 + ], + [ + -124.0349321, + 44.6139006 + ], + [ + -124.0349322, + 44.6138881 + ], + [ + -124.0349332, + 44.6137871 + ], + [ + -124.034942, + 44.6134892 + ], + [ + -124.034955, + 44.6132202 + ], + [ + -124.0349953, + 44.6127216 + ], + [ + -124.0350164, + 44.6125356 + ], + [ + -124.03503, + 44.6124223 + ], + [ + -124.0350541, + 44.6122343 + ], + [ + -124.0351627, + 44.6115948 + ], + [ + -124.0351828, + 44.6115004 + ], + [ + -124.0351966, + 44.6114301 + ], + [ + -124.0352321, + 44.6112599 + ], + [ + -124.0352411, + 44.6112189 + ], + [ + -124.0352776, + 44.6110607 + ], + [ + -124.0352906, + 44.6110067 + ], + [ + -124.0353199, + 44.6108889 + ], + [ + -124.035378, + 44.6106629 + ], + [ + -124.0355388, + 44.6101162 + ], + [ + -124.035685, + 44.6096762 + ], + [ + -124.0358904, + 44.609123 + ], + [ + -124.0360124, + 44.608826 + ], + [ + -124.0360291, + 44.6087856 + ], + [ + -124.0360441, + 44.6087496 + ], + [ + -124.0363141, + 44.6081635 + ], + [ + -124.0365242, + 44.6077475 + ], + [ + -124.036788, + 44.607262 + ], + [ + -124.036937, + 44.607006 + ], + [ + -124.0383464, + 44.6051291 + ], + [ + -124.0402412, + 44.6034846 + ], + [ + -124.0425485, + 44.6021357 + ], + [ + -124.0451797, + 44.6011343 + ], + [ + -124.0480338, + 44.6005188 + ], + [ + -124.051001, + 44.6003129 + ], + [ + -124.0539675, + 44.6005244 + ], + [ + -124.0568193, + 44.6011452 + ], + [ + -124.0594468, + 44.6021516 + ], + [ + -124.0617491, + 44.6035048 + ], + [ + -124.0636378, + 44.6051528 + ], + [ + -124.0650403, + 44.6070324 + ], + [ + -124.0659025, + 44.6090714 + ], + [ + -124.0661914, + 44.6111913 + ], + [ + -124.0658958, + 44.6133107 + ], + [ + -124.0658538, + 44.6134092 + ], + [ + -124.0665464, + 44.6140447 + ], + [ + -124.0672283, + 44.6146565 + ], + [ + -124.0692152, + 44.6163322 + ], + [ + -124.0697817, + 44.6168052 + ], + [ + -124.0700538, + 44.617026 + ], + [ + -124.0704556, + 44.6173337 + ], + [ + -124.0705579, + 44.6174128 + ], + [ + -124.0706859, + 44.6175128 + ], + [ + -124.071036, + 44.6178 + ], + [ + -124.0710361, + 44.6178 + ], + [ + -124.0713941, + 44.6180929 + ], + [ + -124.0717, + 44.6183513 + ], + [ + -124.071895, + 44.6185212 + ], + [ + -124.0725703, + 44.619156 + ], + [ + -124.0728944, + 44.619485 + ], + [ + -124.0730262, + 44.6196211 + ], + [ + -124.0731282, + 44.619728 + ], + [ + -124.0733403, + 44.6200014 + ], + [ + -124.0733662, + 44.6199895 + ], + [ + -124.0736043, + 44.6202545 + ], + [ + -124.0736143, + 44.6202666 + ] + ], + [ + [ + -124.0652084, + 44.6149227 + ], + [ + -124.0651462, + 44.6150686 + ], + [ + -124.0651514, + 44.6150699 + ], + [ + -124.0651939, + 44.6149664 + ], + [ + -124.0652084, + 44.6149227 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16047_s_15967", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0678216, + 44.6110737 + ], + [ + -124.0677922, + 44.6111179 + ], + [ + -124.0675607, + 44.6114647 + ], + [ + -124.0673163, + 44.6118569 + ], + [ + -124.0671853, + 44.6120614 + ], + [ + -124.0668403, + 44.6125855 + ], + [ + -124.0667793, + 44.6126772 + ], + [ + -124.0659421, + 44.6139188 + ], + [ + -124.0656689, + 44.614342 + ], + [ + -124.0654233, + 44.614723 + ], + [ + -124.0653, + 44.6149178 + ], + [ + -124.0651709, + 44.6151229 + ], + [ + -124.0651614, + 44.6151379 + ], + [ + -124.0650859, + 44.6152574 + ], + [ + -124.0645112, + 44.6168547 + ], + [ + -124.0632197, + 44.6187745 + ], + [ + -124.0614286, + 44.6204775 + ], + [ + -124.0592066, + 44.6218981 + ], + [ + -124.0566391, + 44.6229818 + ], + [ + -124.0538248, + 44.6236868 + ], + [ + -124.050872, + 44.6239862 + ], + [ + -124.0478942, + 44.6238683 + ], + [ + -124.0450058, + 44.6233377 + ], + [ + -124.0423179, + 44.6224148 + ], + [ + -124.0399339, + 44.6211351 + ], + [ + -124.0379454, + 44.6195477 + ], + [ + -124.0364288, + 44.6177138 + ], + [ + -124.0354423, + 44.6157038 + ], + [ + -124.0350238, + 44.6135949 + ], + [ + -124.0351824, + 44.6115582 + ], + [ + -124.0351716, + 44.6115571 + ], + [ + -124.0351966, + 44.6114301 + ], + [ + -124.0352321, + 44.6112599 + ], + [ + -124.0352411, + 44.6112189 + ], + [ + -124.0352776, + 44.6110607 + ], + [ + -124.0352906, + 44.6110067 + ], + [ + -124.0353199, + 44.6108889 + ], + [ + -124.035378, + 44.6106629 + ], + [ + -124.0355388, + 44.6101162 + ], + [ + -124.035685, + 44.6096762 + ], + [ + -124.0358904, + 44.609123 + ], + [ + -124.0360124, + 44.608826 + ], + [ + -124.0360291, + 44.6087856 + ], + [ + -124.0360441, + 44.6087496 + ], + [ + -124.0363141, + 44.6081635 + ], + [ + -124.0365242, + 44.6077475 + ], + [ + -124.0367802, + 44.6072754 + ], + [ + -124.0369872, + 44.6069185 + ], + [ + -124.0371727, + 44.6066121 + ], + [ + -124.0372667, + 44.6064632 + ], + [ + -124.0374319, + 44.6062019 + ], + [ + -124.0375632, + 44.6059934 + ], + [ + -124.037577, + 44.6059716 + ], + [ + -124.0377291, + 44.6057317 + ], + [ + -124.037773, + 44.605663 + ], + [ + -124.0380421, + 44.605246 + ], + [ + -124.0383724, + 44.6047346 + ], + [ + -124.0384817, + 44.604569 + ], + [ + -124.0393441, + 44.6032909 + ], + [ + -124.0395919, + 44.6029147 + ], + [ + -124.0398539, + 44.6024944 + ], + [ + -124.0400219, + 44.6022344 + ], + [ + -124.0403252, + 44.6017805 + ], + [ + -124.0424532, + 44.5985589 + ], + [ + -124.0439835, + 44.596731 + ], + [ + -124.0459835, + 44.5951515 + ], + [ + -124.0483761, + 44.5938812 + ], + [ + -124.0510696, + 44.5929686 + ], + [ + -124.0539603, + 44.5924491 + ], + [ + -124.0569374, + 44.5923424 + ], + [ + -124.0598864, + 44.5926527 + ], + [ + -124.0626941, + 44.593368 + ], + [ + -124.0652526, + 44.594461 + ], + [ + -124.0674637, + 44.5958895 + ], + [ + -124.0692423, + 44.5975988 + ], + [ + -124.0705201, + 44.5995232 + ], + [ + -124.071248, + 44.6015886 + ], + [ + -124.0713979, + 44.6037159 + ], + [ + -124.070964, + 44.6058231 + ], + [ + -124.069963, + 44.6078294 + ], + [ + -124.0678216, + 44.6110737 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16048_s_16051", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0649951, + 44.6193512 + ], + [ + -124.0649018, + 44.6208676 + ], + [ + -124.0641589, + 44.6229868 + ], + [ + -124.0628374, + 44.6249571 + ], + [ + -124.061665, + 44.6260626 + ], + [ + -124.0611702, + 44.6278726 + ], + [ + -124.061134, + 44.6279604 + ], + [ + -124.0600778, + 44.6298465 + ], + [ + -124.0585483, + 44.6315592 + ], + [ + -124.0565991, + 44.6330386 + ], + [ + -124.0542982, + 44.6342331 + ], + [ + -124.051726, + 44.6351008 + ], + [ + -124.0515664, + 44.6351421 + ], + [ + -124.0485703, + 44.6356794 + ], + [ + -124.045484, + 44.6357734 + ], + [ + -124.0424347, + 44.6354204 + ], + [ + -124.0395482, + 44.6346349 + ], + [ + -124.0369434, + 44.6334492 + ], + [ + -124.0347277, + 44.6319123 + ], + [ + -124.0346496, + 44.6318459 + ], + [ + -124.0327941, + 44.6298585 + ], + [ + -124.0315916, + 44.6276297 + ], + [ + -124.0311002, + 44.6252671 + ], + [ + -124.0313435, + 44.6228849 + ], + [ + -124.0313696, + 44.6227842 + ], + [ + -124.0313715, + 44.6227799 + ], + [ + -124.0313365, + 44.6222308 + ], + [ + -124.0320418, + 44.6196769 + ], + [ + -124.0320865, + 44.6195789 + ], + [ + -124.0325994, + 44.618772 + ], + [ + -124.0323029, + 44.6179234 + ], + [ + -124.0322839, + 44.6178454 + ], + [ + -124.0320606, + 44.616128 + ], + [ + -124.0320586, + 44.616021 + ], + [ + -124.0322423, + 44.6141887 + ], + [ + -124.03228, + 44.6140176 + ], + [ + -124.0314436, + 44.6129746 + ], + [ + -124.0313876, + 44.6128916 + ], + [ + -124.0306443, + 44.6115762 + ], + [ + -124.0306023, + 44.6114852 + ], + [ + -124.0303956, + 44.6109991 + ], + [ + -124.0303566, + 44.610899 + ], + [ + -124.030045, + 44.6097083 + ], + [ + -124.0300433, + 44.6097062 + ], + [ + -124.0293793, + 44.6087634 + ], + [ + -124.0293153, + 44.6086604 + ], + [ + -124.0282997, + 44.6063705 + ], + [ + -124.0282677, + 44.6062555 + ], + [ + -124.028057, + 44.6052568 + ], + [ + -124.0280381, + 44.6051258 + ], + [ + -124.0279648, + 44.6043483 + ], + [ + -124.0279469, + 44.6039403 + ], + [ + -124.0281577, + 44.6017659 + ], + [ + -124.0289717, + 44.5996654 + ], + [ + -124.0303559, + 44.5977232 + ], + [ + -124.0322548, + 44.5960174 + ], + [ + -124.0345919, + 44.5946167 + ], + [ + -124.0372731, + 44.5935774 + ], + [ + -124.0401905, + 44.5929413 + ], + [ + -124.0404309, + 44.5929249 + ], + [ + -124.0410033, + 44.5927277 + ], + [ + -124.0438508, + 44.5921964 + ], + [ + -124.046788, + 44.5920669 + ], + [ + -124.0497052, + 44.5923441 + ], + [ + -124.0497645, + 44.592354 + ], + [ + -124.0523026, + 44.5929491 + ], + [ + -124.0546559, + 44.5938523 + ], + [ + -124.0567518, + 44.5950358 + ], + [ + -124.0585256, + 44.5964631 + ], + [ + -124.058599, + 44.5965339 + ], + [ + -124.0601318, + 44.5983608 + ], + [ + -124.0611363, + 44.6003662 + ], + [ + -124.0614463, + 44.6018586 + ], + [ + -124.0631783, + 44.6034787 + ], + [ + -124.0644691, + 44.6053335 + ], + [ + -124.0652437, + 44.6073296 + ], + [ + -124.065474, + 44.6093945 + ], + [ + -124.0654473, + 44.6105885 + ], + [ + -124.0654407, + 44.6107795 + ], + [ + -124.0654379, + 44.6108379 + ], + [ + -124.0654642, + 44.6112186 + ], + [ + -124.0653452, + 44.6132103 + ], + [ + -124.0647187, + 44.6151529 + ], + [ + -124.0647095, + 44.615168 + ], + [ + -124.064936, + 44.6159318 + ], + [ + -124.0649601, + 44.6160738 + ], + [ + -124.0650562, + 44.6169139 + ], + [ + -124.0650652, + 44.6170649 + ], + [ + -124.0650778, + 44.6176703 + ], + [ + -124.0650728, + 44.6179433 + ], + [ + -124.0650729, + 44.6179503 + ], + [ + -124.0650724, + 44.6181337 + ], + [ + -124.0650547, + 44.6193517 + ], + [ + -124.0649951, + 44.6193512 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16048_s_2438934", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0613255, + 44.6017734 + ], + [ + -124.0614184, + 44.6018325 + ], + [ + -124.0631783, + 44.6034787 + ], + [ + -124.0644691, + 44.6053335 + ], + [ + -124.0652437, + 44.6073296 + ], + [ + -124.065474, + 44.6093945 + ], + [ + -124.0654473, + 44.6105885 + ], + [ + -124.0654407, + 44.6107795 + ], + [ + -124.065438, + 44.6108357 + ], + [ + -124.0654643, + 44.611214 + ], + [ + -124.0653357, + 44.6132613 + ], + [ + -124.0646712, + 44.615255 + ], + [ + -124.0634943, + 44.617124 + ], + [ + -124.0618468, + 44.6188019 + ], + [ + -124.0617959, + 44.6188446 + ], + [ + -124.0596479, + 44.620322 + ], + [ + -124.0571374, + 44.6214718 + ], + [ + -124.0543611, + 44.6222495 + ], + [ + -124.0514255, + 44.6226255 + ], + [ + -124.0484437, + 44.6225851 + ], + [ + -124.0455302, + 44.62213 + ], + [ + -124.0427972, + 44.6212776 + ], + [ + -124.0403495, + 44.6200607 + ], + [ + -124.0382814, + 44.6185262 + ], + [ + -124.0376641, + 44.6178381 + ], + [ + -124.0375264, + 44.6177817 + ], + [ + -124.0373204, + 44.6176857 + ], + [ + -124.0366794, + 44.61737 + ], + [ + -124.0365044, + 44.6172789 + ], + [ + -124.0361006, + 44.6170615 + ], + [ + -124.0359696, + 44.6169885 + ], + [ + -124.0340298, + 44.6156982 + ], + [ + -124.0339288, + 44.6156182 + ], + [ + -124.0325986, + 44.6144005 + ], + [ + -124.0325196, + 44.6143164 + ], + [ + -124.0314436, + 44.6129746 + ], + [ + -124.0313876, + 44.6128916 + ], + [ + -124.0306443, + 44.6115762 + ], + [ + -124.0306023, + 44.6114852 + ], + [ + -124.0303956, + 44.6109991 + ], + [ + -124.0303566, + 44.610899 + ], + [ + -124.030045, + 44.6097083 + ], + [ + -124.0300433, + 44.6097062 + ], + [ + -124.0293793, + 44.6087634 + ], + [ + -124.0293153, + 44.6086604 + ], + [ + -124.0282997, + 44.6063705 + ], + [ + -124.0282677, + 44.6062555 + ], + [ + -124.028057, + 44.6052568 + ], + [ + -124.0280381, + 44.6051258 + ], + [ + -124.0279648, + 44.6043483 + ], + [ + -124.0279469, + 44.6039403 + ], + [ + -124.0281577, + 44.6017659 + ], + [ + -124.0289717, + 44.5996654 + ], + [ + -124.0303559, + 44.5977232 + ], + [ + -124.0322548, + 44.5960174 + ], + [ + -124.0345919, + 44.5946167 + ], + [ + -124.0372731, + 44.5935774 + ], + [ + -124.0401905, + 44.5929413 + ], + [ + -124.041924, + 44.5928229 + ], + [ + -124.0442617, + 44.5924353 + ], + [ + -124.0470883, + 44.5923509 + ], + [ + -124.0498878, + 44.5926421 + ], + [ + -124.0525635, + 44.5932987 + ], + [ + -124.0550227, + 44.5942981 + ], + [ + -124.0571803, + 44.5956056 + ], + [ + -124.0589617, + 44.5971761 + ], + [ + -124.0603052, + 44.5989551 + ], + [ + -124.0603202, + 44.5989804 + ], + [ + -124.0612111, + 44.601013 + ], + [ + -124.0613255, + 44.6017734 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16049_s_16050", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0618887, + 44.6126296 + ], + [ + -124.0626157, + 44.6136329 + ], + [ + -124.0634308, + 44.6155846 + ], + [ + -124.0634808, + 44.6157646 + ], + [ + -124.0637722, + 44.6178843 + ], + [ + -124.063479, + 44.620004 + ], + [ + -124.0626124, + 44.622042 + ], + [ + -124.0612056, + 44.6239201 + ], + [ + -124.0593128, + 44.6255661 + ], + [ + -124.0570065, + 44.6269167 + ], + [ + -124.0543755, + 44.62792 + ], + [ + -124.051521, + 44.6285374 + ], + [ + -124.0485525, + 44.6287451 + ], + [ + -124.0455844, + 44.6285353 + ], + [ + -124.0427306, + 44.6279159 + ], + [ + -124.040101, + 44.6269107 + ], + [ + -124.0377966, + 44.6255585 + ], + [ + -124.035906, + 44.6239112 + ], + [ + -124.0357345, + 44.6236817 + ], + [ + -124.0351013, + 44.623156 + ], + [ + -124.0349613, + 44.623006 + ], + [ + -124.0335675, + 44.6211415 + ], + [ + -124.0333876, + 44.6208314 + ], + [ + -124.0324389, + 44.6184734 + ], + [ + -124.0324118, + 44.6181126 + ], + [ + -124.0322507, + 44.6176988 + ], + [ + -124.0321136, + 44.6151825 + ], + [ + -124.0321537, + 44.6148125 + ], + [ + -124.0326741, + 44.6127152 + ], + [ + -124.0337573, + 44.6107308 + ], + [ + -124.0353615, + 44.6089354 + ], + [ + -124.0374252, + 44.6073981 + ], + [ + -124.0398689, + 44.6061778 + ], + [ + -124.0425989, + 44.6053215 + ], + [ + -124.0455101, + 44.604862 + ], + [ + -124.0484909, + 44.6048171 + ], + [ + -124.0514267, + 44.6051884 + ], + [ + -124.0542048, + 44.6059616 + ], + [ + -124.0567184, + 44.6071071 + ], + [ + -124.058871, + 44.6085809 + ], + [ + -124.0605799, + 44.6103263 + ], + [ + -124.0617793, + 44.6122763 + ], + [ + -124.0618887, + 44.6126296 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16050_s_16051", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0636848, + 44.6190985 + ], + [ + -124.0634928, + 44.6197839 + ], + [ + -124.0634454, + 44.6209776 + ], + [ + -124.0628093, + 44.6230076 + ], + [ + -124.0621645, + 44.6240617 + ], + [ + -124.0618979, + 44.6248912 + ], + [ + -124.0618643, + 44.6248857 + ], + [ + -124.0617623, + 44.6251826 + ], + [ + -124.0617607, + 44.6251918 + ], + [ + -124.0617135, + 44.6255895 + ], + [ + -124.061691, + 44.6256767 + ], + [ + -124.0615259, + 44.6269558 + ], + [ + -124.0605143, + 44.6292095 + ], + [ + -124.0604569, + 44.6293014 + ], + [ + -124.058809, + 44.6313228 + ], + [ + -124.0565934, + 44.6330455 + ], + [ + -124.0539126, + 44.6343896 + ], + [ + -124.0537966, + 44.6344353 + ], + [ + -124.0508452, + 44.6353235 + ], + [ + -124.0476988, + 44.6357508 + ], + [ + -124.0444967, + 44.6356983 + ], + [ + -124.041381, + 44.6351683 + ], + [ + -124.0384898, + 44.6341844 + ], + [ + -124.0383654, + 44.6341299 + ], + [ + -124.0359471, + 44.6328165 + ], + [ + -124.0339425, + 44.6311862 + ], + [ + -124.0324317, + 44.6293039 + ], + [ + -124.0314747, + 44.6272448 + ], + [ + -124.0311097, + 44.625091 + ], + [ + -124.0313088, + 44.6233079 + ], + [ + -124.0312924, + 44.6231946 + ], + [ + -124.0315146, + 44.6212155 + ], + [ + -124.0315399, + 44.6211111 + ], + [ + -124.0323104, + 44.6191029 + ], + [ + -124.0326776, + 44.6185727 + ], + [ + -124.0330317, + 44.6168168 + ], + [ + -124.0332619, + 44.6161669 + ], + [ + -124.0340013, + 44.6145948 + ], + [ + -124.0344224, + 44.6140127 + ], + [ + -124.0350115, + 44.6129402 + ], + [ + -124.0366211, + 44.6111472 + ], + [ + -124.0386894, + 44.609613 + ], + [ + -124.0411369, + 44.6083965 + ], + [ + -124.0438695, + 44.6075443 + ], + [ + -124.0467822, + 44.6070893 + ], + [ + -124.0497632, + 44.6070489 + ], + [ + -124.052698, + 44.6074246 + ], + [ + -124.0554739, + 44.6082021 + ], + [ + -124.0579842, + 44.6093514 + ], + [ + -124.0601325, + 44.6108285 + ], + [ + -124.0618362, + 44.6125765 + ], + [ + -124.0630299, + 44.6145283 + ], + [ + -124.0636676, + 44.616609 + ], + [ + -124.0637247, + 44.6187385 + ], + [ + -124.0636848, + 44.6190985 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16051_s_16052", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0619783, + 44.6247775 + ], + [ + -124.0617201, + 44.6258578 + ], + [ + -124.0608473, + 44.627615 + ], + [ + -124.0608436, + 44.6276198 + ], + [ + -124.0606802, + 44.6279771 + ], + [ + -124.0592192, + 44.629834 + ], + [ + -124.0572789, + 44.6314517 + ], + [ + -124.0549338, + 44.6327679 + ], + [ + -124.0522741, + 44.6337321 + ], + [ + -124.0494019, + 44.6343072 + ], + [ + -124.0464278, + 44.6344711 + ], + [ + -124.0434661, + 44.6342174 + ], + [ + -124.0406306, + 44.633556 + ], + [ + -124.0380304, + 44.6325122 + ], + [ + -124.0357655, + 44.6311262 + ], + [ + -124.0339228, + 44.6294513 + ], + [ + -124.0325733, + 44.6275519 + ], + [ + -124.0317686, + 44.6255009 + ], + [ + -124.0315398, + 44.6233773 + ], + [ + -124.031543, + 44.6232678 + ], + [ + -124.0318236, + 44.6214103 + ], + [ + -124.0318375, + 44.6213596 + ], + [ + -124.0320685, + 44.6206943 + ], + [ + -124.0322689, + 44.6200604 + ], + [ + -124.0322574, + 44.6200586 + ], + [ + -124.0326955, + 44.6186204 + ], + [ + -124.0335559, + 44.6166869 + ], + [ + -124.0349045, + 44.6149014 + ], + [ + -124.0366942, + 44.613326 + ], + [ + -124.0388627, + 44.6120158 + ], + [ + -124.0413343, + 44.6110163 + ], + [ + -124.0440228, + 44.6103623 + ], + [ + -124.0468346, + 44.6100768 + ], + [ + -124.0496718, + 44.6101695 + ], + [ + -124.0498857, + 44.6101909 + ], + [ + -124.0527838, + 44.6106918 + ], + [ + -124.0554895, + 44.6115868 + ], + [ + -124.0578989, + 44.6128417 + ], + [ + -124.0599194, + 44.6144081 + ], + [ + -124.0614733, + 44.616226 + ], + [ + -124.0625009, + 44.6182255 + ], + [ + -124.0629627, + 44.6203298 + ], + [ + -124.0628408, + 44.6224579 + ], + [ + -124.0621399, + 44.6245282 + ], + [ + -124.0619783, + 44.6247775 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16052_s_16053", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0608657, + 44.6275684 + ], + [ + -124.0599291, + 44.6284534 + ], + [ + -124.0576069, + 44.6299083 + ], + [ + -124.0549209, + 44.6309982 + ], + [ + -124.0519819, + 44.6316782 + ], + [ + -124.0489111, + 44.6319201 + ], + [ + -124.0458352, + 44.6317141 + ], + [ + -124.0452487, + 44.6316312 + ], + [ + -124.0448395, + 44.6316044 + ], + [ + -124.0419795, + 44.6309996 + ], + [ + -124.0393398, + 44.6300078 + ], + [ + -124.0370218, + 44.6286674 + ], + [ + -124.0351148, + 44.6270297 + ], + [ + -124.0336918, + 44.6251578 + ], + [ + -124.0328076, + 44.6231236 + ], + [ + -124.0324962, + 44.6210053 + ], + [ + -124.0327694, + 44.6188843 + ], + [ + -124.0336166, + 44.6168422 + ], + [ + -124.0350053, + 44.6149573 + ], + [ + -124.035904, + 44.6141646 + ], + [ + -124.0364907, + 44.6134699 + ], + [ + -124.0372937, + 44.6128693 + ], + [ + -124.0380092, + 44.6121879 + ], + [ + -124.0404627, + 44.6106708 + ], + [ + -124.0413423, + 44.6103277 + ], + [ + -124.0414181, + 44.6102829 + ], + [ + -124.0433004, + 44.6095639 + ], + [ + -124.0433108, + 44.6095599 + ], + [ + -124.0433113, + 44.6095598 + ], + [ + -124.0440933, + 44.6092611 + ], + [ + -124.0469991, + 44.6086387 + ], + [ + -124.0500199, + 44.6084406 + ], + [ + -124.0512086, + 44.6084476 + ], + [ + -124.0541733, + 44.6086739 + ], + [ + -124.0570193, + 44.609309 + ], + [ + -124.0596373, + 44.6103284 + ], + [ + -124.0619267, + 44.6116931 + ], + [ + -124.0637995, + 44.6133505 + ], + [ + -124.0651837, + 44.615237 + ], + [ + -124.0660262, + 44.6172802 + ], + [ + -124.0662944, + 44.6194015 + ], + [ + -124.065978, + 44.6215194 + ], + [ + -124.0650891, + 44.6235526 + ], + [ + -124.0636619, + 44.6254228 + ], + [ + -124.061751, + 44.6270581 + ], + [ + -124.0608657, + 44.6275684 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16053_s_833259", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0731476, + 44.6200518 + ], + [ + -124.0740771, + 44.6214954 + ], + [ + -124.0741072, + 44.6215554 + ], + [ + -124.0748871, + 44.6239249 + ], + [ + -124.0748971, + 44.6239849 + ], + [ + -124.0748978, + 44.6265531 + ], + [ + -124.0748878, + 44.6266131 + ], + [ + -124.0743782, + 44.6283911 + ], + [ + -124.0734612, + 44.6300837 + ], + [ + -124.0721624, + 44.6316437 + ], + [ + -124.0720924, + 44.6317137 + ], + [ + -124.0700374, + 44.6333789 + ], + [ + -124.0675513, + 44.6347111 + ], + [ + -124.0672214, + 44.6348218 + ], + [ + -124.0661644, + 44.6354868 + ], + [ + -124.0635845, + 44.636556 + ], + [ + -124.060762, + 44.6372452 + ], + [ + -124.0578052, + 44.637528 + ], + [ + -124.0548281, + 44.6373934 + ], + [ + -124.051945, + 44.6368466 + ], + [ + -124.0492667, + 44.6359087 + ], + [ + -124.0468963, + 44.6346156 + ], + [ + -124.0449249, + 44.6330172 + ], + [ + -124.0434281, + 44.6311748 + ], + [ + -124.0424636, + 44.6291593 + ], + [ + -124.0422718, + 44.6281355 + ], + [ + -124.0403216, + 44.6269923 + ], + [ + -124.0384298, + 44.6253456 + ], + [ + -124.0370244, + 44.623467 + ], + [ + -124.0361592, + 44.6214286 + ], + [ + -124.0359469, + 44.6198862 + ], + [ + -124.0356342, + 44.6187833 + ], + [ + -124.0356242, + 44.6187233 + ], + [ + -124.035614, + 44.6162218 + ], + [ + -124.0364049, + 44.6137849 + ], + [ + -124.0364449, + 44.6137049 + ], + [ + -124.0378185, + 44.6116617 + ], + [ + -124.0397555, + 44.6098665 + ], + [ + -124.0398355, + 44.6098065 + ], + [ + -124.0430986, + 44.6079515 + ], + [ + -124.0433585, + 44.6078415 + ], + [ + -124.0461883, + 44.6069093 + ], + [ + -124.0492246, + 44.6064086 + ], + [ + -124.05234, + 44.6063604 + ], + [ + -124.0554038, + 44.6067667 + ], + [ + -124.0582874, + 44.6076105 + ], + [ + -124.0608699, + 44.6088563 + ], + [ + -124.0630428, + 44.610452 + ], + [ + -124.0647151, + 44.6123304 + ], + [ + -124.0647906, + 44.6124383 + ], + [ + -124.0656775, + 44.6132438 + ], + [ + -124.065789, + 44.6133463 + ], + [ + -124.0665486, + 44.6140534 + ], + [ + -124.0671961, + 44.6146272 + ], + [ + -124.0692341, + 44.6163441 + ], + [ + -124.0692681, + 44.6163728 + ], + [ + -124.069773, + 44.6168012 + ], + [ + -124.0699975, + 44.6169799 + ], + [ + -124.0704404, + 44.6173181 + ], + [ + -124.0704783, + 44.617347 + ], + [ + -124.0706083, + 44.617447 + ], + [ + -124.0714225, + 44.6181275 + ], + [ + -124.0715325, + 44.6182275 + ], + [ + -124.0723991, + 44.619184 + ], + [ + -124.0729609, + 44.6197619 + ], + [ + -124.0730661, + 44.6199252 + ], + [ + -124.0731565, + 44.6200485 + ], + [ + -124.0731476, + 44.6200518 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16055_s_16057", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0662313, + 44.6220995 + ], + [ + -124.0662611, + 44.6221097 + ], + [ + -124.0686484, + 44.6233862 + ], + [ + -124.0706413, + 44.6249709 + ], + [ + -124.072163, + 44.6268027 + ], + [ + -124.0731552, + 44.6288113 + ], + [ + -124.0735796, + 44.6309196 + ], + [ + -124.0734198, + 44.6330465 + ], + [ + -124.072682, + 44.6351102 + ], + [ + -124.0713945, + 44.6370315 + ], + [ + -124.0696066, + 44.6387365 + ], + [ + -124.0673871, + 44.6401597 + ], + [ + -124.0663427, + 44.6407075 + ], + [ + -124.0651604, + 44.6413362 + ], + [ + -124.0625777, + 44.642444 + ], + [ + -124.0597398, + 44.6431667 + ], + [ + -124.056758, + 44.6434761 + ], + [ + -124.0537493, + 44.6433599 + ], + [ + -124.0508317, + 44.6428228 + ], + [ + -124.0481196, + 44.6418857 + ], + [ + -124.0457193, + 44.6405855 + ], + [ + -124.0437249, + 44.6389732 + ], + [ + -124.0432108, + 44.6384636 + ], + [ + -124.0415931, + 44.636429 + ], + [ + -124.0415026, + 44.6362798 + ], + [ + -124.0407008, + 44.634587 + ], + [ + -124.0406605, + 44.6344714 + ], + [ + -124.0406015, + 44.6342234 + ], + [ + -124.0402818, + 44.6338128 + ], + [ + -124.039369, + 44.631785 + ], + [ + -124.0390278, + 44.6296691 + ], + [ + -124.0392712, + 44.6275462 + ], + [ + -124.0400899, + 44.6254981 + ], + [ + -124.0414522, + 44.6236033 + ], + [ + -124.0433059, + 44.6219348 + ], + [ + -124.0455796, + 44.6205565 + ], + [ + -124.0458526, + 44.6204216 + ], + [ + -124.0482684, + 44.6194467 + ], + [ + -124.0508918, + 44.6188014 + ], + [ + -124.0536357, + 44.6185071 + ], + [ + -124.0564087, + 44.6185736 + ], + [ + -124.0591188, + 44.6189986 + ], + [ + -124.0616758, + 44.6197681 + ], + [ + -124.0626156, + 44.6201262 + ], + [ + -124.0649121, + 44.6212018 + ], + [ + -124.0662313, + 44.6220995 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16057_s_16058", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0613496, + 44.6392548 + ], + [ + -124.058789, + 44.6403477 + ], + [ + -124.0559789, + 44.6410628 + ], + [ + -124.0530273, + 44.6413727 + ], + [ + -124.0500478, + 44.6412654 + ], + [ + -124.0471549, + 44.6407452 + ], + [ + -124.0444598, + 44.6398319 + ], + [ + -124.0420661, + 44.6385607 + ], + [ + -124.0400659, + 44.6369805 + ], + [ + -124.038536, + 44.6351521 + ], + [ + -124.0375351, + 44.6331456 + ], + [ + -124.0371017, + 44.6310383 + ], + [ + -124.0372524, + 44.628911 + ], + [ + -124.0379814, + 44.6268457 + ], + [ + -124.0392605, + 44.6249216 + ], + [ + -124.0410405, + 44.6232126 + ], + [ + -124.0432531, + 44.6217844 + ], + [ + -124.045203, + 44.6207546 + ], + [ + -124.047763, + 44.6196621 + ], + [ + -124.0505722, + 44.6189471 + ], + [ + -124.0535226, + 44.6186373 + ], + [ + -124.056501, + 44.6187445 + ], + [ + -124.0593929, + 44.6192645 + ], + [ + -124.0620873, + 44.6201774 + ], + [ + -124.0644806, + 44.6214482 + ], + [ + -124.066481, + 44.623028 + ], + [ + -124.0680114, + 44.6248561 + ], + [ + -124.0690132, + 44.6268623 + ], + [ + -124.0694477, + 44.6289695 + ], + [ + -124.0692981, + 44.6310967 + ], + [ + -124.0685703, + 44.6331622 + ], + [ + -124.067292, + 44.6350867 + ], + [ + -124.0655123, + 44.6367961 + ], + [ + -124.0632998, + 44.6382247 + ], + [ + -124.0613496, + 44.6392548 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16058_s_16059", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0602245, + 44.6398517 + ], + [ + -124.0586435, + 44.6405863 + ], + [ + -124.0571333, + 44.6411964 + ], + [ + -124.0565657, + 44.6414146 + ], + [ + -124.0544554, + 44.6421847 + ], + [ + -124.0509893, + 44.6430906 + ], + [ + -124.0505092, + 44.6431707 + ], + [ + -124.0481688, + 44.6434257 + ], + [ + -124.0477887, + 44.6434457 + ], + [ + -124.0451544, + 44.6434211 + ], + [ + -124.0425654, + 44.6430724 + ], + [ + -124.0415153, + 44.6428624 + ], + [ + -124.0402213, + 44.6425584 + ], + [ + -124.038191, + 44.6420083 + ], + [ + -124.0373768, + 44.6417682 + ], + [ + -124.0354665, + 44.6411581 + ], + [ + -124.0328758, + 44.6401019 + ], + [ + -124.0306237, + 44.6387051 + ], + [ + -124.0287965, + 44.6370214 + ], + [ + -124.0274647, + 44.6351156 + ], + [ + -124.0266792, + 44.6330608 + ], + [ + -124.0264703, + 44.6309361 + ], + [ + -124.0268458, + 44.6288231 + ], + [ + -124.0277914, + 44.626803 + ], + [ + -124.0292705, + 44.6249535 + ], + [ + -124.0312264, + 44.6233455 + ], + [ + -124.0335839, + 44.6220409 + ], + [ + -124.0362523, + 44.6210898 + ], + [ + -124.0391293, + 44.6205287 + ], + [ + -124.0421041, + 44.6203791 + ], + [ + -124.0450627, + 44.6206468 + ], + [ + -124.0456087, + 44.6207771 + ], + [ + -124.0457851, + 44.6207014 + ], + [ + -124.0485923, + 44.6199825 + ], + [ + -124.051542, + 44.6196684 + ], + [ + -124.0545207, + 44.6197713 + ], + [ + -124.0574141, + 44.6202871 + ], + [ + -124.0601111, + 44.6211962 + ], + [ + -124.0625081, + 44.6224635 + ], + [ + -124.0645129, + 44.6240404 + ], + [ + -124.0660486, + 44.6258662 + ], + [ + -124.067056, + 44.627871 + ], + [ + -124.0674964, + 44.6299776 + ], + [ + -124.0673529, + 44.632105 + ], + [ + -124.0666309, + 44.6341716 + ], + [ + -124.065358, + 44.6360979 + ], + [ + -124.0635832, + 44.6378098 + ], + [ + -124.0613746, + 44.6392416 + ], + [ + -124.0602245, + 44.6398517 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16059_s_16060", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0567008, + 44.6330008 + ], + [ + -124.0570686, + 44.6349951 + ], + [ + -124.0568736, + 44.6371204 + ], + [ + -124.0561016, + 44.6391778 + ], + [ + -124.0547822, + 44.6410881 + ], + [ + -124.0529661, + 44.6427779 + ], + [ + -124.050723, + 44.6441822 + ], + [ + -124.0481391, + 44.6452471 + ], + [ + -124.0453139, + 44.6459316 + ], + [ + -124.0423558, + 44.6462093 + ], + [ + -124.0393786, + 44.6460697 + ], + [ + -124.0364969, + 44.645518 + ], + [ + -124.0338214, + 44.6445756 + ], + [ + -124.0314549, + 44.6432785 + ], + [ + -124.0300049, + 44.6423084 + ], + [ + -124.0279376, + 44.6406048 + ], + [ + -124.0264073, + 44.6386333 + ], + [ + -124.0254798, + 44.6364788 + ], + [ + -124.0253998, + 44.6361888 + ], + [ + -124.0253011, + 44.6357917 + ], + [ + -124.0252611, + 44.6356117 + ], + [ + -124.0250921, + 44.6333746 + ], + [ + -124.0251122, + 44.6330846 + ], + [ + -124.0254313, + 44.6315217 + ], + [ + -124.0253755, + 44.6311834 + ], + [ + -124.0255935, + 44.6291057 + ], + [ + -124.0263627, + 44.627096 + ], + [ + -124.027655, + 44.6252281 + ], + [ + -124.0294226, + 44.6235706 + ], + [ + -124.0316007, + 44.6221845 + ], + [ + -124.034109, + 44.6211207 + ], + [ + -124.0368555, + 44.6204184 + ], + [ + -124.0397391, + 44.6201034 + ], + [ + -124.0426539, + 44.6201871 + ], + [ + -124.0454927, + 44.6206666 + ], + [ + -124.0459935, + 44.6207884 + ], + [ + -124.0465827, + 44.6209414 + ], + [ + -124.0471943, + 44.6211106 + ], + [ + -124.0498565, + 44.6220706 + ], + [ + -124.0522054, + 44.6233831 + ], + [ + -124.0541508, + 44.6249975 + ], + [ + -124.0556178, + 44.626852 + ], + [ + -124.0565501, + 44.6288752 + ], + [ + -124.0569118, + 44.6309894 + ], + [ + -124.0567008, + 44.6330008 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16060_s_15892", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.053444, + 44.6282726 + ], + [ + -124.0552692, + 44.6299046 + ], + [ + -124.0566236, + 44.6317557 + ], + [ + -124.0567213, + 44.6319278 + ], + [ + -124.0573253, + 44.6332185 + ], + [ + -124.0574262, + 44.6334894 + ], + [ + -124.0579155, + 44.6357038 + ], + [ + -124.057758, + 44.6379427 + ], + [ + -124.0569602, + 44.6401109 + ], + [ + -124.0555561, + 44.6421161 + ], + [ + -124.0536053, + 44.6438728 + ], + [ + -124.051191, + 44.6453063 + ], + [ + -124.0484159, + 44.6463554 + ], + [ + -124.0453981, + 44.6469755 + ], + [ + -124.0422663, + 44.6471403 + ], + [ + -124.0342948, + 44.6469702 + ], + [ + -124.0338635, + 44.6469567 + ], + [ + -124.0324232, + 44.6468967 + ], + [ + -124.0313211, + 44.6468219 + ], + [ + -124.0304709, + 44.6467419 + ], + [ + -124.0288717, + 44.6465288 + ], + [ + -124.0276015, + 44.6463087 + ], + [ + -124.0262034, + 44.6460153 + ], + [ + -124.0251532, + 44.6457552 + ], + [ + -124.0229115, + 44.6450512 + ], + [ + -124.0211104, + 44.6452416 + ], + [ + -124.0205503, + 44.6452616 + ], + [ + -124.0168448, + 44.6450697 + ], + [ + -124.0161346, + 44.6449697 + ], + [ + -124.0121574, + 44.6439859 + ], + [ + -124.0118985, + 44.6438915 + ], + [ + -124.0108663, + 44.6438188 + ], + [ + -124.0084075, + 44.6437319 + ], + [ + -124.0061329, + 44.643528 + ], + [ + -124.0054428, + 44.643428 + ], + [ + -124.0020326, + 44.6426251 + ], + [ + -124.0014025, + 44.6424151 + ], + [ + -123.9995839, + 44.6415894 + ], + [ + -123.9991493, + 44.6416819 + ], + [ + -123.9973133, + 44.641986 + ], + [ + -123.9963932, + 44.642096 + ], + [ + -123.9932923, + 44.6422371 + ], + [ + -123.9924912, + 44.642215 + ], + [ + -123.9901206, + 44.6420158 + ], + [ + -123.9890359, + 44.6418623 + ], + [ + -123.9867607, + 44.6414067 + ], + [ + -123.985826, + 44.6411623 + ], + [ + -123.9825443, + 44.6399645 + ], + [ + -123.9814242, + 44.6394244 + ], + [ + -123.9800815, + 44.6386965 + ], + [ + -123.9776114, + 44.6371963 + ], + [ + -123.9773288, + 44.6370204 + ], + [ + -123.9769604, + 44.6367852 + ], + [ + -123.9763752, + 44.6369438 + ], + [ + -123.9744949, + 44.6373339 + ], + [ + -123.9728514, + 44.6376053 + ], + [ + -123.9717212, + 44.6377453 + ], + [ + -123.9715632, + 44.6377612 + ], + [ + -123.9698311, + 44.6385382 + ], + [ + -123.969171, + 44.6387883 + ], + [ + -123.9668025, + 44.6395094 + ], + [ + -123.9664625, + 44.6395894 + ], + [ + -123.9640655, + 44.6400032 + ], + [ + -123.9631753, + 44.6401032 + ], + [ + -123.9603663, + 44.6402306 + ], + [ + -123.9600505, + 44.6402241 + ], + [ + -123.9583912, + 44.6410684 + ], + [ + -123.9555851, + 44.6421974 + ], + [ + -123.9525089, + 44.6428793 + ], + [ + -123.9517287, + 44.6429893 + ], + [ + -123.9492813, + 44.6431894 + ], + [ + -123.9484312, + 44.6432094 + ], + [ + -123.9470183, + 44.6431957 + ], + [ + -123.9463182, + 44.6431657 + ], + [ + -123.9437775, + 44.6429019 + ], + [ + -123.9413352, + 44.642337 + ], + [ + -123.9409352, + 44.642217 + ], + [ + -123.9384061, + 44.6412486 + ], + [ + -123.938185, + 44.6411207 + ], + [ + -123.9377583, + 44.6409773 + ], + [ + -123.9372382, + 44.6407673 + ], + [ + -123.9347265, + 44.6394976 + ], + [ + -123.932624, + 44.637893 + ], + [ + -123.9324641, + 44.6377429 + ], + [ + -123.9309184, + 44.6359595 + ], + [ + -123.9307185, + 44.6356694 + ], + [ + -123.9294794, + 44.6331054 + ], + [ + -123.9292345, + 44.6322733 + ], + [ + -123.9289695, + 44.631005 + ], + [ + -123.9289631, + 44.6309536 + ], + [ + -123.9274936, + 44.6293497 + ], + [ + -123.9263789, + 44.6273741 + ], + [ + -123.9258254, + 44.6252811 + ], + [ + -123.9258543, + 44.6231513 + ], + [ + -123.9264644, + 44.6210663 + ], + [ + -123.9276323, + 44.6191065 + ], + [ + -123.929313, + 44.617347 + ], + [ + -123.9314419, + 44.6158554 + ], + [ + -123.9339372, + 44.6146892 + ], + [ + -123.936703, + 44.6138929 + ], + [ + -123.9381741, + 44.6136943 + ], + [ + -123.9400663, + 44.613361 + ], + [ + -123.9416299, + 44.6131467 + ], + [ + -123.9423397, + 44.6130768 + ], + [ + -123.9445852, + 44.6129753 + ], + [ + -123.945875, + 44.6129853 + ], + [ + -123.9501397, + 44.6134555 + ], + [ + -123.9503696, + 44.6135055 + ], + [ + -123.9531943, + 44.6143496 + ], + [ + -123.9557251, + 44.6155806 + ], + [ + -123.9558751, + 44.6156706 + ], + [ + -123.9581484, + 44.6173654 + ], + [ + -123.9582884, + 44.6174954 + ], + [ + -123.9586139, + 44.6178861 + ], + [ + -123.9594509, + 44.6175918 + ], + [ + -123.9622496, + 44.6168417 + ], + [ + -123.9628795, + 44.6167217 + ], + [ + -123.9651572, + 44.6164183 + ], + [ + -123.9666682, + 44.616301 + ], + [ + -123.9686306, + 44.6154685 + ], + [ + -123.9708185, + 44.6147024 + ], + [ + -123.9715284, + 44.6145025 + ], + [ + -123.9735508, + 44.6140463 + ], + [ + -123.9741907, + 44.6139363 + ], + [ + -123.9773892, + 44.6136378 + ], + [ + -123.978569, + 44.6136178 + ], + [ + -123.9805591, + 44.6136772 + ], + [ + -123.980949, + 44.6137072 + ], + [ + -123.9836024, + 44.6140841 + ], + [ + -123.9846523, + 44.6143041 + ], + [ + -123.9877235, + 44.6152184 + ], + [ + -123.9884334, + 44.6154984 + ], + [ + -123.9897319, + 44.616073 + ], + [ + -123.9905419, + 44.6164729 + ], + [ + -123.9915384, + 44.6170094 + ], + [ + -123.9925283, + 44.6175893 + ], + [ + -123.9930185, + 44.6178891 + ], + [ + -123.9955648, + 44.6195144 + ], + [ + -123.997245, + 44.6191481 + ], + [ + -123.9982935, + 44.6189676 + ], + [ + -124.0026782, + 44.6186805 + ], + [ + -124.0031981, + 44.6187005 + ], + [ + -124.0052894, + 44.6188853 + ], + [ + -124.0064392, + 44.6190453 + ], + [ + -124.0089887, + 44.6195682 + ], + [ + -124.0094986, + 44.6197082 + ], + [ + -124.0121285, + 44.6206475 + ], + [ + -124.0127085, + 44.6209075 + ], + [ + -124.0140081, + 44.6215599 + ], + [ + -124.014508, + 44.6218399 + ], + [ + -124.0151723, + 44.6222862 + ], + [ + -124.0177428, + 44.6224673 + ], + [ + -124.020114, + 44.6227711 + ], + [ + -124.0207539, + 44.622891 + ], + [ + -124.0211344, + 44.6229849 + ], + [ + -124.0227244, + 44.6228363 + ], + [ + -124.0236142, + 44.6227963 + ], + [ + -124.0258698, + 44.6228146 + ], + [ + -124.0263597, + 44.6228446 + ], + [ + -124.027487, + 44.622944 + ], + [ + -124.0282669, + 44.623034 + ], + [ + -124.031701, + 44.6237333 + ], + [ + -124.0327408, + 44.6240433 + ], + [ + -124.0350756, + 44.6249157 + ], + [ + -124.0358368, + 44.6252632 + ], + [ + -124.0361952, + 44.6252709 + ], + [ + -124.0362543, + 44.6252491 + ], + [ + -124.0391213, + 44.6246623 + ], + [ + -124.0420936, + 44.6244862 + ], + [ + -124.0450568, + 44.6247274 + ], + [ + -124.0478973, + 44.6253768 + ], + [ + -124.0505059, + 44.6264094 + ], + [ + -124.0527824, + 44.6277855 + ], + [ + -124.053444, + 44.6282726 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16060_s_16061", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0619296, + 44.6289448 + ], + [ + -124.0623722, + 44.6291966 + ], + [ + -124.0642979, + 44.6308232 + ], + [ + -124.0657422, + 44.6326867 + ], + [ + -124.0666498, + 44.6347157 + ], + [ + -124.0669855, + 44.6368321 + ], + [ + -124.0667366, + 44.6389546 + ], + [ + -124.0659125, + 44.6410016 + ], + [ + -124.0645447, + 44.6428945 + ], + [ + -124.0626859, + 44.6445605 + ], + [ + -124.0604074, + 44.6459355 + ], + [ + -124.0577969, + 44.6469668 + ], + [ + -124.0549546, + 44.6476145 + ], + [ + -124.0519898, + 44.6478539 + ], + [ + -124.0510197, + 44.6478639 + ], + [ + -124.0480195, + 44.6476822 + ], + [ + -124.0455362, + 44.647167 + ], + [ + -124.0425587, + 44.6471445 + ], + [ + -124.0395622, + 44.6469086 + ], + [ + -124.0366896, + 44.6462557 + ], + [ + -124.0340538, + 44.6452113 + ], + [ + -124.0317581, + 44.6438165 + ], + [ + -124.0298927, + 44.6421259 + ], + [ + -124.0296433, + 44.6417744 + ], + [ + -124.0292816, + 44.6414653 + ], + [ + -124.0278525, + 44.6395957 + ], + [ + -124.0269619, + 44.6375629 + ], + [ + -124.0266438, + 44.6354451 + ], + [ + -124.0269104, + 44.6333237 + ], + [ + -124.0277515, + 44.6312802 + ], + [ + -124.0291347, + 44.6293931 + ], + [ + -124.0310068, + 44.6277349 + ], + [ + -124.0332958, + 44.6263694 + ], + [ + -124.0359137, + 44.6253489 + ], + [ + -124.0387601, + 44.6247128 + ], + [ + -124.0417255, + 44.6244853 + ], + [ + -124.044696, + 44.6246753 + ], + [ + -124.0475577, + 44.6252754 + ], + [ + -124.0480363, + 44.6254542 + ], + [ + -124.0506465, + 44.6254355 + ], + [ + -124.0536363, + 44.6256253 + ], + [ + -124.0565157, + 44.6262306 + ], + [ + -124.0591728, + 44.6272278 + ], + [ + -124.0615042, + 44.6285781 + ], + [ + -124.0619296, + 44.6289448 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16061_s_16062", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0529172, + 44.6261155 + ], + [ + -124.0559157, + 44.6263053 + ], + [ + -124.0588033, + 44.6269128 + ], + [ + -124.0614669, + 44.6279144 + ], + [ + -124.0638024, + 44.6292708 + ], + [ + -124.0657182, + 44.630929 + ], + [ + -124.0671395, + 44.6328241 + ], + [ + -124.0680105, + 44.6348819 + ], + [ + -124.0682971, + 44.6370218 + ], + [ + -124.068278, + 44.6406418 + ], + [ + -124.0679744, + 44.6427607 + ], + [ + -124.0670976, + 44.6447966 + ], + [ + -124.0656813, + 44.6466712 + ], + [ + -124.0637797, + 44.6483125 + ], + [ + -124.0614661, + 44.6496574 + ], + [ + -124.0588292, + 44.6506542 + ], + [ + -124.0559706, + 44.6512645 + ], + [ + -124.053, + 44.651465 + ], + [ + -124.0500317, + 44.6512478 + ], + [ + -124.0471799, + 44.6506214 + ], + [ + -124.0445541, + 44.6496098 + ], + [ + -124.0422554, + 44.6482519 + ], + [ + -124.040372, + 44.6465999 + ], + [ + -124.0389764, + 44.6447174 + ], + [ + -124.0381221, + 44.6426767 + ], + [ + -124.0379677, + 44.6415074 + ], + [ + -124.0377731, + 44.641254 + ], + [ + -124.0368772, + 44.6392224 + ], + [ + -124.0365536, + 44.6371051 + ], + [ + -124.0368148, + 44.6349833 + ], + [ + -124.0376507, + 44.6329387 + ], + [ + -124.0390291, + 44.6310498 + ], + [ + -124.0408969, + 44.6293892 + ], + [ + -124.0431824, + 44.6280207 + ], + [ + -124.0457978, + 44.6269968 + ], + [ + -124.0486426, + 44.6263569 + ], + [ + -124.0516075, + 44.6261255 + ], + [ + -124.0529172, + 44.6261155 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16062_s_16063", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0682986, + 44.6431904 + ], + [ + -124.0682973, + 44.6434041 + ], + [ + -124.068248, + 44.6459041 + ], + [ + -124.0679137, + 44.6480206 + ], + [ + -124.0670074, + 44.6500499 + ], + [ + -124.0655639, + 44.651914 + ], + [ + -124.0636385, + 44.6535412 + ], + [ + -124.0613053, + 44.6548689 + ], + [ + -124.0586539, + 44.6558462 + ], + [ + -124.0557863, + 44.6564354 + ], + [ + -124.0528127, + 44.656614 + ], + [ + -124.0498475, + 44.6563749 + ], + [ + -124.0470046, + 44.6557275 + ], + [ + -124.0443934, + 44.6546966 + ], + [ + -124.0421142, + 44.6533218 + ], + [ + -124.0402547, + 44.651656 + ], + [ + -124.0388863, + 44.6497633 + ], + [ + -124.0380616, + 44.6477163 + ], + [ + -124.0378121, + 44.6455939 + ], + [ + -124.0378606, + 44.6432007 + ], + [ + -124.0378421, + 44.6406575 + ], + [ + -124.038119, + 44.6385368 + ], + [ + -124.0389701, + 44.6364954 + ], + [ + -124.0403625, + 44.6346117 + ], + [ + -124.0422428, + 44.6329582 + ], + [ + -124.0445385, + 44.6315983 + ], + [ + -124.0471616, + 44.6305844 + ], + [ + -124.0500113, + 44.6299552 + ], + [ + -124.052978, + 44.6297351 + ], + [ + -124.0559479, + 44.6299324 + ], + [ + -124.0588069, + 44.6305396 + ], + [ + -124.0614451, + 44.6315333 + ], + [ + -124.0637613, + 44.6328755 + ], + [ + -124.0656664, + 44.6345144 + ], + [ + -124.0670871, + 44.6363872 + ], + [ + -124.0679689, + 44.638422 + ], + [ + -124.0682779, + 44.6405404 + ], + [ + -124.0682986, + 44.6431904 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16063_s_15890", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0682796, + 44.6481974 + ], + [ + -124.0682783, + 44.6484599 + ], + [ + -124.0682305, + 44.6506531 + ], + [ + -124.0678998, + 44.6527431 + ], + [ + -124.067011, + 44.6547485 + ], + [ + -124.0655975, + 44.656594 + ], + [ + -124.0637122, + 44.6582105 + ], + [ + -124.0614258, + 44.6595375 + ], + [ + -124.0588238, + 44.6605251 + ], + [ + -124.0584946, + 44.6605964 + ], + [ + -124.0577261, + 44.660878 + ], + [ + -124.0548562, + 44.6614622 + ], + [ + -124.0518817, + 44.6616356 + ], + [ + -124.0489171, + 44.6613913 + ], + [ + -124.0460762, + 44.6607389 + ], + [ + -124.0434683, + 44.6597035 + ], + [ + -124.0411937, + 44.6583247 + ], + [ + -124.0393397, + 44.6566557 + ], + [ + -124.0379777, + 44.6547606 + ], + [ + -124.0371599, + 44.6527122 + ], + [ + -124.0369176, + 44.6505893 + ], + [ + -124.0369246, + 44.6502968 + ], + [ + -124.0372663, + 44.6481837 + ], + [ + -124.0378238, + 44.6469459 + ], + [ + -124.037811, + 44.6458406 + ], + [ + -124.038079, + 44.6437193 + ], + [ + -124.0389214, + 44.641676 + ], + [ + -124.0403059, + 44.6397893 + ], + [ + -124.0421793, + 44.6381317 + ], + [ + -124.0444694, + 44.6367669 + ], + [ + -124.0470885, + 44.6357472 + ], + [ + -124.0499357, + 44.6351119 + ], + [ + -124.0529017, + 44.6348853 + ], + [ + -124.0558727, + 44.6350762 + ], + [ + -124.0587345, + 44.6356771 + ], + [ + -124.0613772, + 44.6366652 + ], + [ + -124.0636993, + 44.6380022 + ], + [ + -124.0656115, + 44.6396371 + ], + [ + -124.0670403, + 44.6415068 + ], + [ + -124.0679309, + 44.6435396 + ], + [ + -124.0682489, + 44.6456574 + ], + [ + -124.0682796, + 44.6481974 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16065_s_2483495", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0690459, + 44.6557927 + ], + [ + -124.0691126, + 44.6563891 + ], + [ + -124.0687652, + 44.6585045 + ], + [ + -124.0678462, + 44.6605309 + ], + [ + -124.0663908, + 44.6623904 + ], + [ + -124.0644551, + 44.6640115 + ], + [ + -124.0621132, + 44.6653319 + ], + [ + -124.0594554, + 44.6663008 + ], + [ + -124.0565836, + 44.666881 + ], + [ + -124.0536084, + 44.6670501 + ], + [ + -124.0533586, + 44.6670468 + ], + [ + -124.0502322, + 44.6667725 + ], + [ + -124.0472519, + 44.6660448 + ], + [ + -124.0445453, + 44.664895 + ], + [ + -124.0422283, + 44.6633722 + ], + [ + -124.0404001, + 44.6615418 + ], + [ + -124.0391389, + 44.659482 + ], + [ + -124.038844, + 44.6584681 + ], + [ + -124.0380548, + 44.6565583 + ], + [ + -124.0378676, + 44.6551358 + ], + [ + -124.0373832, + 44.6535503 + ], + [ + -124.0373283, + 44.6514207 + ], + [ + -124.0378566, + 44.6493244 + ], + [ + -124.0389475, + 44.647342 + ], + [ + -124.0405591, + 44.6455495 + ], + [ + -124.0426295, + 44.6440159 + ], + [ + -124.0450791, + 44.6428001 + ], + [ + -124.0478138, + 44.6419488 + ], + [ + -124.0507286, + 44.6414946 + ], + [ + -124.0537114, + 44.6414551 + ], + [ + -124.0566477, + 44.6418317 + ], + [ + -124.0594247, + 44.64261 + ], + [ + -124.0606622, + 44.6431768 + ], + [ + -124.0613342, + 44.6434272 + ], + [ + -124.0618278, + 44.6437106 + ], + [ + -124.0619359, + 44.6437601 + ], + [ + -124.0620461, + 44.6438359 + ], + [ + -124.0636557, + 44.6447598 + ], + [ + -124.0655692, + 44.6463896 + ], + [ + -124.0670015, + 44.6482543 + ], + [ + -124.0678499, + 44.6501742 + ], + [ + -124.0682042, + 44.6506808 + ], + [ + -124.0689873, + 44.6527046 + ], + [ + -124.0692105, + 44.6547981 + ], + [ + -124.0690459, + 44.6557927 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16066_s_16068", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.076575, + 44.6761547 + ], + [ + -124.0770193, + 44.6771048 + ], + [ + -124.0776037, + 44.6788368 + ], + [ + -124.0780146, + 44.6809464 + ], + [ + -124.0778408, + 44.6830727 + ], + [ + -124.0770889, + 44.6851339 + ], + [ + -124.0757876, + 44.6870509 + ], + [ + -124.0739871, + 44.6887499 + ], + [ + -124.0717563, + 44.6901656 + ], + [ + -124.0691812, + 44.6912436 + ], + [ + -124.0663606, + 44.6919425 + ], + [ + -124.0634031, + 44.6922354 + ], + [ + -124.0604223, + 44.692111 + ], + [ + -124.0575328, + 44.6915741 + ], + [ + -124.0548458, + 44.6906453 + ], + [ + -124.0524645, + 44.6893604 + ], + [ + -124.0504805, + 44.6877687 + ], + [ + -124.04897, + 44.6859315 + ], + [ + -124.047991, + 44.6839193 + ], + [ + -124.0476026, + 44.6827665 + ], + [ + -124.0474674, + 44.6825574 + ], + [ + -124.0466309, + 44.6805193 + ], + [ + -124.0465855, + 44.6803245 + ], + [ + -124.0457004, + 44.6782888 + ], + [ + -124.0455767, + 44.677989 + ], + [ + -124.0450369, + 44.676608 + ], + [ + -124.0433833, + 44.6727029 + ], + [ + -124.0414076, + 44.6716798 + ], + [ + -124.0393022, + 44.6700241 + ], + [ + -124.0377165, + 44.6680959 + ], + [ + -124.0367175, + 44.6659769 + ], + [ + -124.0363474, + 44.6637568 + ], + [ + -124.0366219, + 44.6615296 + ], + [ + -124.0366546, + 44.6614088 + ], + [ + -124.0374109, + 44.659536 + ], + [ + -124.0386238, + 44.6577898 + ], + [ + -124.0402542, + 44.6562263 + ], + [ + -124.0411959, + 44.6555984 + ], + [ + -124.0424844, + 44.6546802 + ], + [ + -124.04501, + 44.6534856 + ], + [ + -124.047817, + 44.6526716 + ], + [ + -124.0486113, + 44.6525646 + ], + [ + -124.0488319, + 44.6524955 + ], + [ + -124.0515425, + 44.6518558 + ], + [ + -124.0543727, + 44.6515886 + ], + [ + -124.0572231, + 44.6517033 + ], + [ + -124.0599933, + 44.6521958 + ], + [ + -124.0625861, + 44.6530489 + ], + [ + -124.0649101, + 44.6542325 + ], + [ + -124.0668838, + 44.655705 + ], + [ + -124.0684376, + 44.6574147 + ], + [ + -124.0695168, + 44.6593013 + ], + [ + -124.0742343, + 44.6704307 + ], + [ + -124.0743255, + 44.6706542 + ], + [ + -124.0748509, + 44.6719966 + ], + [ + -124.0757804, + 44.6741322 + ], + [ + -124.0758487, + 44.6744107 + ], + [ + -124.0758575, + 44.6744089 + ], + [ + -124.076575, + 44.6761547 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16068_s_16069", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.078048, + 44.6804964 + ], + [ + -124.0782397, + 44.6813144 + ], + [ + -124.0786232, + 44.6834503 + ], + [ + -124.0786686, + 44.6837322 + ], + [ + -124.0787658, + 44.6844142 + ], + [ + -124.0788252, + 44.6849761 + ], + [ + -124.0789206, + 44.6863511 + ], + [ + -124.0789312, + 44.68724 + ], + [ + -124.0789054, + 44.687809 + ], + [ + -124.0784792, + 44.6900326 + ], + [ + -124.0774217, + 44.6921462 + ], + [ + -124.0757779, + 44.6940598 + ], + [ + -124.0736445, + 44.6956714 + ], + [ + -124.0728112, + 44.6963248 + ], + [ + -124.0705937, + 44.6975261 + ], + [ + -124.0698276, + 44.6978672 + ], + [ + -124.067299, + 44.698772 + ], + [ + -124.0645794, + 44.6993276 + ], + [ + -124.0643484, + 44.6993586 + ], + [ + -124.0625038, + 44.6994759 + ], + [ + -124.0621866, + 44.6995176 + ], + [ + -124.0617883, + 44.6995443 + ], + [ + -124.0609742, + 44.6997598 + ], + [ + -124.0586904, + 44.7000376 + ], + [ + -124.0575006, + 44.700241 + ], + [ + -124.0545165, + 44.7003239 + ], + [ + -124.0515671, + 44.6999898 + ], + [ + -124.0487658, + 44.6992518 + ], + [ + -124.0462204, + 44.698138 + ], + [ + -124.0440285, + 44.6966915 + ], + [ + -124.0438505, + 44.6965485 + ], + [ + -124.0420971, + 44.6948252 + ], + [ + -124.0408486, + 44.6928912 + ], + [ + -124.0401529, + 44.6908205 + ], + [ + -124.0400368, + 44.6886929 + ], + [ + -124.0405046, + 44.68659 + ], + [ + -124.0415382, + 44.6845925 + ], + [ + -124.043098, + 44.6827771 + ], + [ + -124.045124, + 44.6812137 + ], + [ + -124.0475384, + 44.6799621 + ], + [ + -124.0477182, + 44.6798869 + ], + [ + -124.0477913, + 44.6793164 + ], + [ + -124.0486377, + 44.6772739 + ], + [ + -124.0500262, + 44.6753885 + ], + [ + -124.0519035, + 44.6737325 + ], + [ + -124.0541974, + 44.6723696 + ], + [ + -124.0568197, + 44.6713522 + ], + [ + -124.0596697, + 44.6707193 + ], + [ + -124.062638, + 44.6704953 + ], + [ + -124.0656105, + 44.6706887 + ], + [ + -124.068473, + 44.6712921 + ], + [ + -124.0711156, + 44.6722824 + ], + [ + -124.0734369, + 44.6736215 + ], + [ + -124.0753475, + 44.6752579 + ], + [ + -124.076774, + 44.6771289 + ], + [ + -124.0776617, + 44.6791624 + ], + [ + -124.078048, + 44.6804964 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16068_s_16201", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0780435, + 44.6803247 + ], + [ + -124.0783129, + 44.6814716 + ], + [ + -124.0788037, + 44.6845715 + ], + [ + -124.0788997, + 44.6858523 + ], + [ + -124.0788803, + 44.6883023 + ], + [ + -124.0788439, + 44.6889944 + ], + [ + -124.0786744, + 44.6907344 + ], + [ + -124.0786057, + 44.6912564 + ], + [ + -124.0782063, + 44.6936665 + ], + [ + -124.0781489, + 44.6939752 + ], + [ + -124.0776369, + 44.6964529 + ], + [ + -124.0772103, + 44.6989402 + ], + [ + -124.0771751, + 44.6991317 + ], + [ + -124.0758295, + 44.7059658 + ], + [ + -124.0755117, + 44.7080439 + ], + [ + -124.0754236, + 44.7090077 + ], + [ + -124.0750729, + 44.7107216 + ], + [ + -124.074903, + 44.7112517 + ], + [ + -124.0744768, + 44.7123246 + ], + [ + -124.0738969, + 44.7135422 + ], + [ + -124.0736385, + 44.7141968 + ], + [ + -124.0734965, + 44.7149002 + ], + [ + -124.0734925, + 44.714951 + ], + [ + -124.0735151, + 44.7163315 + ], + [ + -124.073681, + 44.7199789 + ], + [ + -124.0736888, + 44.7203783 + ], + [ + -124.0736793, + 44.7219483 + ], + [ + -124.0736413, + 44.7226688 + ], + [ + -124.073372, + 44.7253788 + ], + [ + -124.0732642, + 44.7261111 + ], + [ + -124.0729845, + 44.7275411 + ], + [ + -124.0722839, + 44.7296116 + ], + [ + -124.0710301, + 44.7315449 + ], + [ + -124.0692712, + 44.7332666 + ], + [ + -124.0670747, + 44.7347106 + ], + [ + -124.0645251, + 44.7358214 + ], + [ + -124.0617204, + 44.7365562 + ], + [ + -124.0587684, + 44.7368868 + ], + [ + -124.0557826, + 44.7368006 + ], + [ + -124.0528779, + 44.7363007 + ], + [ + -124.0501658, + 44.7354064 + ], + [ + -124.0477508, + 44.7341521 + ], + [ + -124.0457256, + 44.7325861 + ], + [ + -124.0441679, + 44.7307685 + ], + [ + -124.0431378, + 44.7287692 + ], + [ + -124.0426746, + 44.726665 + ], + [ + -124.0427962, + 44.7245369 + ], + [ + -124.0430051, + 44.7234718 + ], + [ + -124.0432031, + 44.721489 + ], + [ + -124.0432098, + 44.7204794 + ], + [ + -124.0430498, + 44.716919 + ], + [ + -124.0430429, + 44.7166939 + ], + [ + -124.0430134, + 44.7148339 + ], + [ + -124.0430365, + 44.7141006 + ], + [ + -124.0431067, + 44.7132106 + ], + [ + -124.0432389, + 44.712269 + ], + [ + -124.0436194, + 44.7103891 + ], + [ + -124.0440348, + 44.7089929 + ], + [ + -124.0446752, + 44.707373 + ], + [ + -124.0449146, + 44.7068234 + ], + [ + -124.0451291, + 44.7063734 + ], + [ + -124.0451849, + 44.7059188 + ], + [ + -124.0455656, + 44.7034388 + ], + [ + -124.0456239, + 44.7031061 + ], + [ + -124.0469868, + 44.6962019 + ], + [ + -124.047421, + 44.6936779 + ], + [ + -124.0474713, + 44.6934127 + ], + [ + -124.04798, + 44.6909569 + ], + [ + -124.0483116, + 44.688962 + ], + [ + -124.0484226, + 44.6878292 + ], + [ + -124.0484349, + 44.6863681 + ], + [ + -124.0481377, + 44.684485 + ], + [ + -124.0478656, + 44.6836133 + ], + [ + -124.0475052, + 44.681499 + ], + [ + -124.0477299, + 44.6793751 + ], + [ + -124.048531, + 44.6773233 + ], + [ + -124.0498777, + 44.6754225 + ], + [ + -124.0517182, + 44.6737455 + ], + [ + -124.0539816, + 44.672357 + ], + [ + -124.0565811, + 44.6713102 + ], + [ + -124.0594168, + 44.6706453 + ], + [ + -124.0623797, + 44.6703879 + ], + [ + -124.0653561, + 44.6705478 + ], + [ + -124.0682316, + 44.6711189 + ], + [ + -124.0708958, + 44.6720793 + ], + [ + -124.0732463, + 44.6733921 + ], + [ + -124.0751929, + 44.6750068 + ], + [ + -124.0766607, + 44.6768614 + ], + [ + -124.0775932, + 44.6788848 + ], + [ + -124.0780435, + 44.6803247 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16069_s_16024", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0762694, + 44.6912306 + ], + [ + -124.0761899, + 44.6918308 + ], + [ + -124.0761737, + 44.6918988 + ], + [ + -124.0760706, + 44.6926872 + ], + [ + -124.0752183, + 44.6947285 + ], + [ + -124.0738241, + 44.696612 + ], + [ + -124.0719414, + 44.6982653 + ], + [ + -124.0696426, + 44.6996248 + ], + [ + -124.067016, + 44.7006382 + ], + [ + -124.0641625, + 44.7012666 + ], + [ + -124.061192, + 44.7014858 + ], + [ + -124.0582186, + 44.7012875 + ], + [ + -124.0553566, + 44.7006791 + ], + [ + -124.0541996, + 44.7002431 + ], + [ + -124.052521, + 44.7001255 + ], + [ + -124.0496631, + 44.6995076 + ], + [ + -124.0470292, + 44.6985038 + ], + [ + -124.0467816, + 44.6983858 + ], + [ + -124.0444993, + 44.6970535 + ], + [ + -124.0426198, + 44.6954324 + ], + [ + -124.0412136, + 44.6935833 + ], + [ + -124.0403334, + 44.6915756 + ], + [ + -124.0400121, + 44.6894846 + ], + [ + -124.0402617, + 44.6873886 + ], + [ + -124.0410728, + 44.6853661 + ], + [ + -124.0424148, + 44.6834931 + ], + [ + -124.0442376, + 44.6818396 + ], + [ + -124.0443525, + 44.6817539 + ], + [ + -124.046842, + 44.6802569 + ], + [ + -124.0497205, + 44.6791716 + ], + [ + -124.0528564, + 44.6785476 + ], + [ + -124.0531548, + 44.6785122 + ], + [ + -124.0543732, + 44.6782041 + ], + [ + -124.0546031, + 44.6781641 + ], + [ + -124.05821, + 44.677855 + ], + [ + -124.05852, + 44.677855 + ], + [ + -124.0587573, + 44.6778693 + ], + [ + -124.0603265, + 44.6777221 + ], + [ + -124.062597, + 44.6777521 + ], + [ + -124.0627469, + 44.6777621 + ], + [ + -124.0653316, + 44.6780968 + ], + [ + -124.0677972, + 44.6787433 + ], + [ + -124.0700705, + 44.6796825 + ], + [ + -124.0702705, + 44.6797825 + ], + [ + -124.0724365, + 44.6810966 + ], + [ + -124.0742224, + 44.682675 + ], + [ + -124.075566, + 44.6844628 + ], + [ + -124.0764205, + 44.6863975 + ], + [ + -124.076756, + 44.6884119 + ], + [ + -124.0765608, + 44.6904356 + ], + [ + -124.0762694, + 44.6912306 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16069_s_16069", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0402646, + 44.6896106 + ], + [ + -124.0405193, + 44.6874884 + ], + [ + -124.0413494, + 44.6854425 + ], + [ + -124.042723, + 44.6835514 + ], + [ + -124.0445872, + 44.6818878 + ], + [ + -124.0468704, + 44.6805155 + ], + [ + -124.0494849, + 44.6794874 + ], + [ + -124.0523302, + 44.6788429 + ], + [ + -124.055297, + 44.6786067 + ], + [ + -124.0582714, + 44.678788 + ], + [ + -124.0611392, + 44.6793797 + ], + [ + -124.0637901, + 44.6803592 + ], + [ + -124.0661223, + 44.6816887 + ], + [ + -124.0680463, + 44.6833174 + ], + [ + -124.0694881, + 44.6851824 + ], + [ + -124.0703922, + 44.6872123 + ], + [ + -124.0707239, + 44.6893291 + ], + [ + -124.0704703, + 44.6914513 + ], + [ + -124.0696411, + 44.6934974 + ], + [ + -124.0682682, + 44.6953888 + ], + [ + -124.0664042, + 44.6970528 + ], + [ + -124.0641208, + 44.6984254 + ], + [ + -124.0615058, + 44.6994539 + ], + [ + -124.0586596, + 44.7000986 + ], + [ + -124.0556917, + 44.7003349 + ], + [ + -124.0527162, + 44.7001536 + ], + [ + -124.0498475, + 44.6995617 + ], + [ + -124.0471959, + 44.6985819 + ], + [ + -124.0448634, + 44.6972519 + ], + [ + -124.0429396, + 44.6956229 + ], + [ + -124.0414984, + 44.6937575 + ], + [ + -124.0405952, + 44.6917274 + ], + [ + -124.0402646, + 44.6896106 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16070_s_16071", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.017411, + 44.9880899 + ], + [ + -124.0174167, + 44.988094 + ], + [ + -124.0159917, + 44.9890881 + ], + [ + -124.0133777, + 44.9905514 + ], + [ + -124.0103797, + 44.991579 + ], + [ + -124.0071394, + 44.9921223 + ], + [ + -124.0070493, + 44.9921232 + ], + [ + -124.0060027, + 44.9927248 + ], + [ + -124.0059285, + 44.9927531 + ], + [ + -124.0057896, + 44.9928732 + ], + [ + -124.0034696, + 44.9942245 + ], + [ + -124.0008226, + 44.9952287 + ], + [ + -123.9979502, + 44.9958471 + ], + [ + -123.994963, + 44.9960559 + ], + [ + -123.9948422, + 44.9960559 + ], + [ + -123.9919121, + 44.9958551 + ], + [ + -123.9890904, + 44.99526 + ], + [ + -123.9864814, + 44.9942928 + ], + [ + -123.9841815, + 44.9929892 + ], + [ + -123.9822758, + 44.9913973 + ], + [ + -123.9808347, + 44.9895761 + ], + [ + -123.9799114, + 44.9875928 + ], + [ + -123.97954, + 44.9855208 + ], + [ + -123.9794777, + 44.9840579 + ], + [ + -123.9796831, + 44.9819259 + ], + [ + -123.9804724, + 44.9798638 + ], + [ + -123.9818151, + 44.9779511 + ], + [ + -123.9836592, + 44.976262 + ], + [ + -123.985198, + 44.9753145 + ], + [ + -123.9855844, + 44.9748811 + ], + [ + -123.9878707, + 44.9728858 + ], + [ + -123.9880307, + 44.9727759 + ], + [ + -123.9904923, + 44.9714004 + ], + [ + -123.9932968, + 44.9704095 + ], + [ + -123.9934468, + 44.9703695 + ], + [ + -123.9975456, + 44.9697138 + ], + [ + -123.9993852, + 44.9696038 + ], + [ + -124.0026018, + 44.9697271 + ], + [ + -124.0040008, + 44.969466 + ], + [ + -124.0070396, + 44.9693409 + ], + [ + -124.0100533, + 44.9696451 + ], + [ + -124.0129225, + 44.9703666 + ], + [ + -124.0137616, + 44.9707233 + ], + [ + -124.0142527, + 44.970876 + ], + [ + -124.0150549, + 44.9712732 + ], + [ + -124.0151177, + 44.9712999 + ], + [ + -124.0151333, + 44.9712838 + ], + [ + -124.0153783, + 44.9714038 + ], + [ + -124.0153736, + 44.9714086 + ], + [ + -124.015534, + 44.9714768 + ], + [ + -124.0157554, + 44.97162 + ], + [ + -124.0167136, + 44.9720944 + ], + [ + -124.0187925, + 44.9736302 + ], + [ + -124.0204095, + 44.9754243 + ], + [ + -124.0215023, + 44.9774078 + ], + [ + -124.022029, + 44.9795046 + ], + [ + -124.0219692, + 44.981634 + ], + [ + -124.0213253, + 44.9837142 + ], + [ + -124.0201218, + 44.9856652 + ], + [ + -124.018405, + 44.9874122 + ], + [ + -124.017411, + 44.9880899 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16071_s_16076", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0104947, + 44.9801574 + ], + [ + -124.0105696, + 44.980192 + ], + [ + -124.0127191, + 44.9816782 + ], + [ + -124.0144188, + 44.9834335 + ], + [ + -124.0156034, + 44.9853903 + ], + [ + -124.0162274, + 44.9874736 + ], + [ + -124.0162667, + 44.9896032 + ], + [ + -124.0157198, + 44.9916974 + ], + [ + -124.0146075, + 44.9936756 + ], + [ + -124.0129727, + 44.9954618 + ], + [ + -124.010878, + 44.9969873 + ], + [ + -124.0084041, + 44.9981935 + ], + [ + -124.0056459, + 44.999034 + ], + [ + -124.0040566, + 44.9993921 + ], + [ + -124.003952, + 44.9994153 + ], + [ + -124.0023077, + 44.9997766 + ], + [ + -124.0014594, + 44.9999658 + ], + [ + -123.9986131, + 45.0003948 + ], + [ + -123.9957037, + 45.000434 + ], + [ + -123.9928365, + 45.000082 + ], + [ + -123.9901149, + 44.9993514 + ], + [ + -123.9876374, + 44.9982687 + ], + [ + -123.9854933, + 44.996873 + ], + [ + -123.9837602, + 44.9952147 + ], + [ + -123.9825005, + 44.9933537 + ], + [ + -123.9817598, + 44.9913572 + ], + [ + -123.9816767, + 44.9904808 + ], + [ + -123.9808996, + 44.9894817 + ], + [ + -123.9799896, + 44.9874521 + ], + [ + -123.9796552, + 44.9853356 + ], + [ + -123.979909, + 44.9832134 + ], + [ + -123.9807413, + 44.9811671 + ], + [ + -123.98212, + 44.9792754 + ], + [ + -123.9839922, + 44.9776109 + ], + [ + -123.9862857, + 44.9762375 + ], + [ + -123.9889126, + 44.9752081 + ], + [ + -123.9917718, + 44.9745622 + ], + [ + -123.9947536, + 44.9743245 + ], + [ + -123.9948302, + 44.9743237 + ], + [ + -123.9951903, + 44.9743193 + ], + [ + -123.995374, + 44.9743167 + ], + [ + -123.995446, + 44.9743158 + ], + [ + -123.9963343, + 44.9743059 + ], + [ + -123.9967257, + 44.9743011 + ], + [ + -123.9997521, + 44.9744775 + ], + [ + -124.0026698, + 44.9750744 + ], + [ + -124.0053642, + 44.9760684 + ], + [ + -124.0077293, + 44.9774202 + ], + [ + -124.0096719, + 44.9790768 + ], + [ + -124.0104947, + 44.9801574 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16071_s_16082", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0252256, + 44.982228 + ], + [ + -124.0249344, + 44.9827939 + ], + [ + -124.0249344, + 44.982794 + ], + [ + -124.0249344, + 44.982794 + ], + [ + -124.0248641, + 44.9829305 + ], + [ + -124.0244869, + 44.9834963 + ], + [ + -124.0244845, + 44.9834955 + ], + [ + -124.0235818, + 44.9849031 + ], + [ + -124.0235518, + 44.9849391 + ], + [ + -124.0232538, + 44.9852822 + ], + [ + -124.0231388, + 44.9854092 + ], + [ + -124.0227799, + 44.9857879 + ], + [ + -124.0226629, + 44.9859059 + ], + [ + -124.0226275, + 44.9859415 + ], + [ + -124.0226185, + 44.9859505 + ], + [ + -124.0222706, + 44.9862847 + ], + [ + -124.0222446, + 44.9863087 + ], + [ + -124.0220717, + 44.9864654 + ], + [ + -124.0220446, + 44.9864895 + ], + [ + -124.0219423, + 44.9865815 + ], + [ + -124.0201984, + 44.9879058 + ], + [ + -124.019929, + 44.9880518 + ], + [ + -124.0198897, + 44.9880798 + ], + [ + -124.0196272, + 44.9882671 + ], + [ + -124.0196115, + 44.9882782 + ], + [ + -124.0195656, + 44.9883154 + ], + [ + -124.0195622, + 44.9883133 + ], + [ + -124.019486, + 44.9883676 + ], + [ + -124.0185266, + 44.9892082 + ], + [ + -124.0159574, + 44.9906665 + ], + [ + -124.0130084, + 44.9917016 + ], + [ + -124.0098157, + 44.9922657 + ], + [ + -124.0084765, + 44.992293 + ], + [ + -124.0080614, + 44.9926696 + ], + [ + -124.0057686, + 44.9940662 + ], + [ + -124.0031339, + 44.995116 + ], + [ + -124.0002598, + 44.9957782 + ], + [ + -123.9972584, + 44.9960269 + ], + [ + -123.9968906, + 44.9960314 + ], + [ + -123.9961047, + 44.9960438 + ], + [ + -123.9959431, + 44.996042 + ], + [ + -123.9957881, + 44.9960443 + ], + [ + -123.9957395, + 44.9960449 + ], + [ + -123.9953284, + 44.9960499 + ], + [ + -123.9952755, + 44.9960505 + ], + [ + -123.9951725, + 44.9960515 + ], + [ + -123.9921815, + 44.9958717 + ], + [ + -123.9892975, + 44.9952813 + ], + [ + -123.9866313, + 44.9943029 + ], + [ + -123.9842854, + 44.9929743 + ], + [ + -123.9823501, + 44.9913463 + ], + [ + -123.9808996, + 44.9894817 + ], + [ + -123.9799896, + 44.9874521 + ], + [ + -123.9796552, + 44.9853356 + ], + [ + -123.979909, + 44.9832134 + ], + [ + -123.9807413, + 44.9811671 + ], + [ + -123.98212, + 44.9792754 + ], + [ + -123.9831656, + 44.9783458 + ], + [ + -123.9834885, + 44.9775614 + ], + [ + -123.9848411, + 44.9757039 + ], + [ + -123.9853686, + 44.975124 + ], + [ + -123.9856262, + 44.9748401 + ], + [ + -123.987845, + 44.9729187 + ], + [ + -123.988034, + 44.9727887 + ], + [ + -123.9905147, + 44.9714041 + ], + [ + -123.9933426, + 44.97041 + ], + [ + -123.9935506, + 44.970355 + ], + [ + -123.9974665, + 44.9697188 + ], + [ + -123.9978424, + 44.9696938 + ], + [ + -123.9978919, + 44.9696906 + ], + [ + -123.9990026, + 44.9696193 + ], + [ + -123.9991295, + 44.969611 + ], + [ + -124.0004346, + 44.9695657 + ], + [ + -124.0006606, + 44.9695647 + ], + [ + -124.0008309, + 44.9695778 + ], + [ + -124.002945, + 44.9683293 + ], + [ + -124.0055814, + 44.9673128 + ], + [ + -124.0084465, + 44.9666808 + ], + [ + -124.0114301, + 44.9664577 + ], + [ + -124.0144177, + 44.9666521 + ], + [ + -124.0172946, + 44.9672563 + ], + [ + -124.0199502, + 44.9682474 + ], + [ + -124.0222825, + 44.9695871 + ], + [ + -124.024202, + 44.9712241 + ], + [ + -124.0256347, + 44.9730954 + ], + [ + -124.0265257, + 44.9751291 + ], + [ + -124.0268407, + 44.9772472 + ], + [ + -124.0265674, + 44.9793682 + ], + [ + -124.0257163, + 44.9814105 + ], + [ + -124.0255459, + 44.981712 + ], + [ + -124.0254406, + 44.9818934 + ], + [ + -124.0254183, + 44.9819308 + ], + [ + -124.0253051, + 44.9821271 + ], + [ + -124.0252701, + 44.9821872 + ], + [ + -124.0252431, + 44.9822332 + ], + [ + -124.0252256, + 44.982228 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16071_s_16212", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0209174, + 44.988169 + ], + [ + -124.020932, + 44.988262 + ], + [ + -124.0209717, + 44.9903916 + ], + [ + -124.0204252, + 44.9924858 + ], + [ + -124.0193133, + 44.9944641 + ], + [ + -124.0176787, + 44.9962504 + ], + [ + -124.0155843, + 44.9977761 + ], + [ + -124.0131106, + 44.9989826 + ], + [ + -124.0103525, + 44.9998234 + ], + [ + -124.0074162, + 45.0002662 + ], + [ + -124.0044146, + 45.0002939 + ], + [ + -124.0016303, + 44.9999277 + ], + [ + -124.0014594, + 44.9999658 + ], + [ + -123.9986131, + 45.0003948 + ], + [ + -123.9957037, + 45.000434 + ], + [ + -123.9928365, + 45.000082 + ], + [ + -123.9901149, + 44.9993514 + ], + [ + -123.9876374, + 44.9982687 + ], + [ + -123.9854933, + 44.996873 + ], + [ + -123.9837602, + 44.9952147 + ], + [ + -123.9825005, + 44.9933537 + ], + [ + -123.9817598, + 44.9913572 + ], + [ + -123.9816767, + 44.9904808 + ], + [ + -123.9808996, + 44.9894817 + ], + [ + -123.9799896, + 44.9874521 + ], + [ + -123.9796552, + 44.9853356 + ], + [ + -123.979909, + 44.9832134 + ], + [ + -123.9807413, + 44.9811671 + ], + [ + -123.98212, + 44.9792754 + ], + [ + -123.9839922, + 44.9776109 + ], + [ + -123.9862857, + 44.9762375 + ], + [ + -123.9889126, + 44.9752081 + ], + [ + -123.9917718, + 44.9745622 + ], + [ + -123.9947536, + 44.9743245 + ], + [ + -123.9948302, + 44.9743237 + ], + [ + -123.9951903, + 44.9743193 + ], + [ + -123.995374, + 44.9743167 + ], + [ + -123.995446, + 44.9743158 + ], + [ + -123.9963343, + 44.9743059 + ], + [ + -123.9967257, + 44.9743011 + ], + [ + -123.9997521, + 44.9744775 + ], + [ + -124.0026698, + 44.9750744 + ], + [ + -124.0053642, + 44.9760684 + ], + [ + -124.0067653, + 44.9768692 + ], + [ + -124.0071102, + 44.9768698 + ], + [ + -124.0099562, + 44.9772626 + ], + [ + -124.0126469, + 44.9780292 + ], + [ + -124.0150857, + 44.9791421 + ], + [ + -124.0171853, + 44.9805614 + ], + [ + -124.0188702, + 44.9822362 + ], + [ + -124.02008, + 44.9841064 + ], + [ + -124.0207712, + 44.9861049 + ], + [ + -124.0209191, + 44.9881601 + ], + [ + -124.0209174, + 44.988169 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16072_s_16081", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0209976, + 44.9897713 + ], + [ + -124.0210139, + 44.9899939 + ], + [ + -124.0205817, + 44.9921016 + ], + [ + -124.0195784, + 44.9941089 + ], + [ + -124.0180423, + 44.9959387 + ], + [ + -124.0160326, + 44.9975206 + ], + [ + -124.0136264, + 44.998794 + ], + [ + -124.0109162, + 44.9997098 + ], + [ + -124.0080062, + 45.0002327 + ], + [ + -124.0050083, + 45.0003428 + ], + [ + -124.0020377, + 45.0000357 + ], + [ + -123.9992088, + 44.9993232 + ], + [ + -123.9966302, + 44.9982328 + ], + [ + -123.9944011, + 44.9968064 + ], + [ + -123.9926071, + 44.9950989 + ], + [ + -123.9913172, + 44.9931757 + ], + [ + -123.9905808, + 44.991111 + ], + [ + -123.9903811, + 44.990171 + ], + [ + -123.9902649, + 44.9894708 + ], + [ + -123.990205, + 44.9889708 + ], + [ + -123.9902809, + 44.9866334 + ], + [ + -123.990331, + 44.9863634 + ], + [ + -123.9914965, + 44.9834056 + ], + [ + -123.9919583, + 44.9826606 + ], + [ + -123.9922333, + 44.9809007 + ], + [ + -123.9931396, + 44.9788703 + ], + [ + -123.9945865, + 44.9770045 + ], + [ + -123.9965184, + 44.9753747 + ], + [ + -123.9988609, + 44.9740438 + ], + [ + -124.0015242, + 44.9730628 + ], + [ + -124.0044058, + 44.9724693 + ], + [ + -124.0073952, + 44.9722863 + ], + [ + -124.0103774, + 44.9725206 + ], + [ + -124.013238, + 44.9731634 + ], + [ + -124.015867, + 44.9741898 + ], + [ + -124.0181635, + 44.9755606 + ], + [ + -124.0200393, + 44.977223 + ], + [ + -124.0214221, + 44.9791132 + ], + [ + -124.022259, + 44.9811585 + ], + [ + -124.0225175, + 44.9832804 + ], + [ + -124.022488, + 44.9850404 + ], + [ + -124.0221667, + 44.9871289 + ], + [ + -124.0221167, + 44.9872989 + ], + [ + -124.0216466, + 44.9885313 + ], + [ + -124.0214766, + 44.9888913 + ], + [ + -124.0209976, + 44.9897713 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16072_s_2455436", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0221287, + 44.9873171 + ], + [ + -124.0221325, + 44.9873177 + ], + [ + -124.0221005, + 44.9874277 + ], + [ + -124.0220891, + 44.9874585 + ], + [ + -124.0220798, + 44.987492 + ], + [ + -124.0220728, + 44.987514 + ], + [ + -124.0220688, + 44.9875134 + ], + [ + -124.0217069, + 44.9884918 + ], + [ + -124.0217105, + 44.9884926 + ], + [ + -124.0216495, + 44.9886316 + ], + [ + -124.02122, + 44.989484 + ], + [ + -124.0211881, + 44.98954 + ], + [ + -124.0211415, + 44.9896205 + ], + [ + -124.0211036, + 44.9896855 + ], + [ + -124.0210385, + 44.9897925 + ], + [ + -124.021056, + 44.9900812 + ], + [ + -124.0205975, + 44.992186 + ], + [ + -124.0195691, + 44.9941869 + ], + [ + -124.0180102, + 44.996007 + ], + [ + -124.0159808, + 44.9975763 + ], + [ + -124.0135587, + 44.9988344 + ], + [ + -124.0108372, + 44.9997331 + ], + [ + -124.0079208, + 45.0002377 + ], + [ + -124.0049216, + 45.0003288 + ], + [ + -124.001955, + 45.0000031 + ], + [ + -123.9991351, + 44.9992728 + ], + [ + -123.9965702, + 44.9981663 + ], + [ + -123.994359, + 44.9967259 + ], + [ + -123.9925865, + 44.9950071 + ], + [ + -123.9913207, + 44.9930759 + ], + [ + -123.990757, + 44.9914342 + ], + [ + -123.9907109, + 44.9914402 + ], + [ + -123.990678, + 44.9913142 + ], + [ + -123.9906605, + 44.9912462 + ], + [ + -123.9905646, + 44.9908662 + ], + [ + -123.990491, + 44.9905737 + ], + [ + -123.9903437, + 44.9898464 + ], + [ + -123.9903227, + 44.9897104 + ], + [ + -123.9902916, + 44.9894869 + ], + [ + -123.9902776, + 44.9893749 + ], + [ + -123.9902495, + 44.9891144 + ], + [ + -123.9902366, + 44.9889714 + ], + [ + -123.9902058, + 44.9883845 + ], + [ + -123.9902038, + 44.9882475 + ], + [ + -123.9903173, + 44.9868123 + ], + [ + -123.9903453, + 44.9866503 + ], + [ + -123.990428, + 44.9862381 + ], + [ + -123.990459, + 44.9861021 + ], + [ + -123.990679, + 44.9853208 + ], + [ + -123.9907311, + 44.9851658 + ], + [ + -123.9912608, + 44.9839228 + ], + [ + -123.9913268, + 44.9837958 + ], + [ + -123.9916145, + 44.983283 + ], + [ + -123.9917055, + 44.983132 + ], + [ + -123.9917197, + 44.9831086 + ], + [ + -123.9918678, + 44.9828646 + ], + [ + -123.991878, + 44.9828478 + ], + [ + -123.991956, + 44.9827198 + ], + [ + -123.9919947, + 44.9826569 + ], + [ + -123.9922868, + 44.982186 + ], + [ + -123.9923511, + 44.9820837 + ], + [ + -123.9924091, + 44.9819927 + ], + [ + -123.9924261, + 44.9819661 + ], + [ + -123.9924381, + 44.9819474 + ], + [ + -123.9924828, + 44.9817712 + ], + [ + -123.9935799, + 44.9797888 + ], + [ + -123.9952007, + 44.9779964 + ], + [ + -123.997283, + 44.9764628 + ], + [ + -123.9997467, + 44.975247 + ], + [ + -124.0024971, + 44.9743957 + ], + [ + -124.0054286, + 44.9739415 + ], + [ + -124.0084287, + 44.9739018 + ], + [ + -124.0113819, + 44.9742784 + ], + [ + -124.0141751, + 44.9750565 + ], + [ + -124.0167007, + 44.9762065 + ], + [ + -124.0188619, + 44.977684 + ], + [ + -124.0205755, + 44.9794324 + ], + [ + -124.0217758, + 44.9813844 + ], + [ + -124.0224164, + 44.9834651 + ], + [ + -124.0224728, + 44.9855946 + ], + [ + -124.0224529, + 44.9857726 + ], + [ + -124.0222805, + 44.9867487 + ], + [ + -124.0222345, + 44.9869387 + ], + [ + -124.0221287, + 44.9873171 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16074_s_16077", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.018119, + 45.0014204 + ], + [ + -124.0162258, + 45.0030509 + ], + [ + -124.0153358, + 45.003681 + ], + [ + -124.0126379, + 45.0052022 + ], + [ + -124.0113978, + 45.0057523 + ], + [ + -124.0101349, + 45.0062552 + ], + [ + -124.0090647, + 45.0066353 + ], + [ + -124.0067115, + 45.0073045 + ], + [ + -124.0056114, + 45.0075445 + ], + [ + -124.0041818, + 45.0077674 + ], + [ + -124.0027121, + 45.0083101 + ], + [ + -124.0023332, + 45.0084184 + ], + [ + -123.9994517, + 45.0090164 + ], + [ + -123.996461, + 45.0092042 + ], + [ + -123.9934762, + 45.0089743 + ], + [ + -123.9906119, + 45.0083357 + ], + [ + -123.9879785, + 45.0073129 + ], + [ + -123.985677, + 45.0059453 + ], + [ + -123.9837959, + 45.0042854 + ], + [ + -123.9824076, + 45.002397 + ], + [ + -123.9815653, + 45.0003527 + ], + [ + -123.9813013, + 44.9982312 + ], + [ + -123.981402, + 44.9975739 + ], + [ + -123.9813907, + 44.997468 + ], + [ + -123.9817343, + 44.9953917 + ], + [ + -123.982632, + 44.9934005 + ], + [ + -123.9840505, + 44.9915681 + ], + [ + -123.9859372, + 44.9899625 + ], + [ + -123.9882222, + 44.9886429 + ], + [ + -123.990821, + 44.9876583 + ], + [ + -123.9914309, + 44.9874783 + ], + [ + -123.9938091, + 44.9869333 + ], + [ + -123.994469, + 44.9868233 + ], + [ + -123.9955258, + 44.9866748 + ], + [ + -123.9959481, + 44.9866263 + ], + [ + -123.99748, + 44.9857394 + ], + [ + -124.0001308, + 44.9847408 + ], + [ + -124.0030051, + 44.9841284 + ], + [ + -124.0059925, + 44.9839255 + ], + [ + -124.0089783, + 44.9841401 + ], + [ + -124.0118478, + 44.9847639 + ], + [ + -124.0144907, + 44.985773 + ], + [ + -124.0168056, + 44.9871285 + ], + [ + -124.0187034, + 44.9887784 + ], + [ + -124.0201114, + 44.9906593 + ], + [ + -124.0209752, + 44.992699 + ], + [ + -124.0212616, + 44.9948191 + ], + [ + -124.0209597, + 44.9969381 + ], + [ + -124.0200809, + 44.9989746 + ], + [ + -124.0186589, + 45.0008503 + ], + [ + -124.018119, + 45.0014204 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16075_s_16074", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0215326, + 44.9910433 + ], + [ + -124.0216834, + 44.9920746 + ], + [ + -124.0217195, + 44.9925346 + ], + [ + -124.0217245, + 44.993677 + ], + [ + -124.0216896, + 44.994176 + ], + [ + -124.0214602, + 44.9955861 + ], + [ + -124.0213703, + 44.9959361 + ], + [ + -124.021027, + 44.9969785 + ], + [ + -124.0208781, + 44.9973475 + ], + [ + -124.0201873, + 44.9987091 + ], + [ + -124.0199254, + 44.9991342 + ], + [ + -124.018459, + 45.0009926 + ], + [ + -124.0165097, + 45.0026123 + ], + [ + -124.0141523, + 45.003931 + ], + [ + -124.0114775, + 45.0048981 + ], + [ + -124.0085881, + 45.0054763 + ], + [ + -124.0055952, + 45.0056434 + ], + [ + -124.0026138, + 45.005393 + ], + [ + -123.9997586, + 45.0047347 + ], + [ + -123.9971394, + 45.0036938 + ], + [ + -123.9948569, + 45.0023104 + ], + [ + -123.9929988, + 45.0006376 + ], + [ + -123.9916364, + 44.9987398 + ], + [ + -123.9908222, + 44.9966898 + ], + [ + -123.9905873, + 44.9945665 + ], + [ + -123.9909055, + 44.9926619 + ], + [ + -123.9907331, + 44.9918566 + ], + [ + -123.9905754, + 44.9897298 + ], + [ + -123.9910054, + 44.9876219 + ], + [ + -123.9920066, + 44.9856141 + ], + [ + -123.9935404, + 44.9837835 + ], + [ + -123.9955479, + 44.9822003 + ], + [ + -123.9979519, + 44.9809255 + ], + [ + -124.00066, + 44.980008 + ], + [ + -124.0035683, + 44.979483 + ], + [ + -124.0065649, + 44.9793707 + ], + [ + -124.0095349, + 44.9796754 + ], + [ + -124.0123641, + 44.9803854 + ], + [ + -124.0149438, + 44.9814735 + ], + [ + -124.017175, + 44.9828978 + ], + [ + -124.0189719, + 44.9846036 + ], + [ + -124.0202655, + 44.9865254 + ], + [ + -124.021006, + 44.9885894 + ], + [ + -124.0215326, + 44.9910433 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16076_s_16075", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0208616, + 44.9879642 + ], + [ + -124.0209754, + 44.9884528 + ], + [ + -124.0211724, + 44.990578 + ], + [ + -124.0207813, + 44.9926896 + ], + [ + -124.0198171, + 44.9947066 + ], + [ + -124.0183168, + 44.9965513 + ], + [ + -124.0163381, + 44.9981528 + ], + [ + -124.0139569, + 44.9994496 + ], + [ + -124.0112647, + 45.0003918 + ], + [ + -124.0083651, + 45.0009433 + ], + [ + -124.0053696, + 45.0010827 + ], + [ + -124.0023934, + 45.0008047 + ], + [ + -123.9995508, + 45.0001201 + ], + [ + -123.9973069, + 44.9992009 + ], + [ + -123.9970595, + 44.9991723 + ], + [ + -123.9942479, + 44.9984262 + ], + [ + -123.9916955, + 44.9973052 + ], + [ + -123.9895005, + 44.9958524 + ], + [ + -123.9877473, + 44.9941237 + ], + [ + -123.9865031, + 44.9921854 + ], + [ + -123.9858158, + 44.9901122 + ], + [ + -123.9857117, + 44.9879837 + ], + [ + -123.9861948, + 44.9858816 + ], + [ + -123.9872464, + 44.9838868 + ], + [ + -123.9888261, + 44.982076 + ], + [ + -123.9908731, + 44.9805186 + ], + [ + -123.9933088, + 44.9792745 + ], + [ + -123.9960395, + 44.9783915 + ], + [ + -123.9972883, + 44.9780885 + ], + [ + -123.9979075, + 44.9779487 + ], + [ + -124.0012349, + 44.9772518 + ], + [ + -124.0040506, + 44.976861 + ], + [ + -124.0069195, + 44.9768499 + ], + [ + -124.009741, + 44.9772189 + ], + [ + -124.012416, + 44.9779551 + ], + [ + -124.0148505, + 44.9790326 + ], + [ + -124.0169591, + 44.9804136 + ], + [ + -124.0186676, + 44.9820495 + ], + [ + -124.0199161, + 44.983883 + ], + [ + -124.0206606, + 44.9858496 + ], + [ + -124.020875, + 44.9878802 + ], + [ + -124.0208616, + 44.9879642 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16077_s_16077", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -123.9812827, + 44.9984335 + ], + [ + -123.9815407, + 44.9963116 + ], + [ + -123.9823772, + 44.9942661 + ], + [ + -123.9837599, + 44.9923757 + ], + [ + -123.9856356, + 44.9907131 + ], + [ + -123.9879324, + 44.989342 + ], + [ + -123.9905618, + 44.9883151 + ], + [ + -123.993423, + 44.987672 + ], + [ + -123.996406, + 44.9874372 + ], + [ + -123.9993962, + 44.9876199 + ], + [ + -124.0022787, + 44.9882129 + ], + [ + -124.004943, + 44.9891936 + ], + [ + -124.0072865, + 44.9905242 + ], + [ + -124.0092193, + 44.9921536 + ], + [ + -124.0106671, + 44.9940193 + ], + [ + -124.0115742, + 44.9960495 + ], + [ + -124.0119057, + 44.9981663 + ], + [ + -124.0116488, + 45.0002883 + ], + [ + -124.0108133, + 45.0023339 + ], + [ + -124.0094313, + 45.0042246 + ], + [ + -124.0075557, + 45.0058877 + ], + [ + -124.0052588, + 45.0072592 + ], + [ + -124.0026288, + 45.0082863 + ], + [ + -123.9997667, + 45.0089297 + ], + [ + -123.9967826, + 45.0091646 + ], + [ + -123.9937913, + 45.0089819 + ], + [ + -123.9909078, + 45.0083886 + ], + [ + -123.9882429, + 45.0074077 + ], + [ + -123.9858991, + 45.0060767 + ], + [ + -123.9839665, + 45.0044469 + ], + [ + -123.9825193, + 45.0025809 + ], + [ + -123.9816131, + 45.0005504 + ], + [ + -123.9812827, + 44.9984335 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16077_s_759421", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -123.9968936, + 44.9865274 + ], + [ + -123.9979172, + 44.9860561 + ], + [ + -124.0005612, + 44.9852879 + ], + [ + -124.0033603, + 44.9848816 + ], + [ + -124.006217, + 44.9848514 + ], + [ + -124.0090318, + 44.9851983 + ], + [ + -124.0117069, + 44.9859104 + ], + [ + -124.0141491, + 44.9869627 + ], + [ + -124.0162733, + 44.9883186 + ], + [ + -124.0166578, + 44.9886146 + ], + [ + -124.0183378, + 44.9901679 + ], + [ + -124.0195976, + 44.9919099 + ], + [ + -124.0196857, + 44.9920647 + ], + [ + -124.0204873, + 44.9939485 + ], + [ + -124.0207969, + 44.9959039 + ], + [ + -124.0208014, + 44.996052 + ], + [ + -124.0206095, + 44.9980119 + ], + [ + -124.0204836, + 44.998566 + ], + [ + -124.0197175, + 45.0006252 + ], + [ + -124.0183998, + 45.0025389 + ], + [ + -124.0165812, + 45.0042334 + ], + [ + -124.0143313, + 45.0056436 + ], + [ + -124.0117369, + 45.0067152 + ], + [ + -124.0088974, + 45.0074071 + ], + [ + -124.0059223, + 45.0076927 + ], + [ + -124.0050181, + 45.007653 + ], + [ + -124.0048822, + 45.0076817 + ], + [ + -124.0046939, + 45.0077111 + ], + [ + -124.0044826, + 45.0078136 + ], + [ + -124.0041722, + 45.007936 + ], + [ + -124.0029503, + 45.0083683 + ], + [ + -124.0026975, + 45.008448 + ], + [ + -124.0000572, + 45.009083 + ], + [ + -123.9972983, + 45.009368 + ], + [ + -123.9945123, + 45.0092933 + ], + [ + -123.9917916, + 45.0088616 + ], + [ + -123.9892263, + 45.0080871 + ], + [ + -123.9869016, + 45.0069955 + ], + [ + -123.9867752, + 45.0069236 + ], + [ + -123.9847186, + 45.0055103 + ], + [ + -123.9830688, + 45.0038501 + ], + [ + -123.9818836, + 45.002001 + ], + [ + -123.9812043, + 45.0000277 + ], + [ + -123.9810547, + 44.9979992 + ], + [ + -123.9814399, + 44.9959864 + ], + [ + -123.9822852, + 44.9941897 + ], + [ + -123.9823794, + 44.9939263 + ], + [ + -123.9837921, + 44.9918919 + ], + [ + -123.9857692, + 44.99011 + ], + [ + -123.9882243, + 44.9886581 + ], + [ + -123.9910506, + 44.9875994 + ], + [ + -123.9916702, + 44.9874232 + ], + [ + -123.9935569, + 44.9869851 + ], + [ + -123.9941658, + 44.9868741 + ], + [ + -123.9956925, + 44.9866539 + ], + [ + -123.9968233, + 44.9865329 + ], + [ + -123.9968936, + 44.9865274 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16079_s_16079", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -123.9951555, + 44.996691 + ], + [ + -123.995413, + 44.994569 + ], + [ + -123.996249, + 44.9925235 + ], + [ + -123.9976312, + 44.9906329 + ], + [ + -123.9995065, + 44.98897 + ], + [ + -124.0018028, + 44.9875986 + ], + [ + -124.0044319, + 44.9865715 + ], + [ + -124.0072929, + 44.985928 + ], + [ + -124.0102757, + 44.9856929 + ], + [ + -124.0132658, + 44.9858751 + ], + [ + -124.0161484, + 44.9864678 + ], + [ + -124.0188128, + 44.9874482 + ], + [ + -124.0211566, + 44.9887785 + ], + [ + -124.0230897, + 44.9904077 + ], + [ + -124.0245379, + 44.9922732 + ], + [ + -124.0254455, + 44.9943033 + ], + [ + -124.0257775, + 44.99642 + ], + [ + -124.0255211, + 44.998542 + ], + [ + -124.0246861, + 45.0005878 + ], + [ + -124.0233046, + 45.0024786 + ], + [ + -124.0214295, + 45.0041419 + ], + [ + -124.019133, + 45.0055137 + ], + [ + -124.0165033, + 45.0065412 + ], + [ + -124.0136415, + 45.0071849 + ], + [ + -124.0106576, + 45.0074201 + ], + [ + -124.0076663, + 45.0072378 + ], + [ + -124.0047827, + 45.0066449 + ], + [ + -124.0021177, + 45.0056643 + ], + [ + -123.9997736, + 45.0043336 + ], + [ + -123.9978407, + 45.002704 + ], + [ + -123.9963931, + 45.0008382 + ], + [ + -123.9954864, + 44.9988078 + ], + [ + -123.9951555, + 44.996691 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16079_s_16080", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.025299, + 44.9988841 + ], + [ + -124.0242261, + 45.0013217 + ], + [ + -124.0241144, + 45.0014989 + ], + [ + -124.0228091, + 45.0031614 + ], + [ + -124.0211149, + 45.0046369 + ], + [ + -124.0209406, + 45.004764 + ], + [ + -124.0190423, + 45.0059384 + ], + [ + -124.0174173, + 45.0067874 + ], + [ + -124.0156287, + 45.0075927 + ], + [ + -124.0151709, + 45.0077686 + ], + [ + -124.0111415, + 45.0088299 + ], + [ + -124.0106989, + 45.0088983 + ], + [ + -124.0075449, + 45.0091475 + ], + [ + -124.0071179, + 45.0091496 + ], + [ + -124.0050311, + 45.0090588 + ], + [ + -124.0031912, + 45.0088887 + ], + [ + -124.0002786, + 45.0084107 + ], + [ + -123.9975526, + 45.0075404 + ], + [ + -123.9951169, + 45.0063109 + ], + [ + -123.9930644, + 45.0047691 + ], + [ + -123.9914733, + 45.0029738 + ], + [ + -123.9904041, + 45.0009934 + ], + [ + -123.9898977, + 44.9989034 + ], + [ + -123.9899732, + 44.9967834 + ], + [ + -123.990137, + 44.9958431 + ], + [ + -123.9907955, + 44.9937652 + ], + [ + -123.9920125, + 44.9918183 + ], + [ + -123.9937414, + 44.9900773 + ], + [ + -123.9959156, + 44.988609 + ], + [ + -123.9984515, + 44.9874699 + ], + [ + -124.0012518, + 44.9867038 + ], + [ + -124.0042089, + 44.9863399 + ], + [ + -124.0052404, + 44.9863579 + ], + [ + -124.0071795, + 44.9859236 + ], + [ + -124.0101627, + 44.985691 + ], + [ + -124.0131525, + 44.9858759 + ], + [ + -124.0160341, + 44.986471 + ], + [ + -124.0186968, + 44.9874536 + ], + [ + -124.0210383, + 44.9887859 + ], + [ + -124.0229687, + 44.9904168 + ], + [ + -124.0244137, + 44.9922835 + ], + [ + -124.0253178, + 44.9943144 + ], + [ + -124.0256463, + 44.9964314 + ], + [ + -124.0253863, + 44.9985532 + ], + [ + -124.025299, + 44.9988841 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16080_s_16072", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0206187, + 44.9980672 + ], + [ + -124.0205999, + 44.9981724 + ], + [ + -124.0205146, + 44.9986238 + ], + [ + -124.0198258, + 45.0006967 + ], + [ + -124.0185802, + 45.0026346 + ], + [ + -124.0168256, + 45.0043627 + ], + [ + -124.0146294, + 45.0058148 + ], + [ + -124.0120759, + 45.0069349 + ], + [ + -124.0092634, + 45.0076801 + ], + [ + -124.0062999, + 45.0080216 + ], + [ + -124.0032995, + 45.0079463 + ], + [ + -124.0003774, + 45.0074572 + ], + [ + -123.9976461, + 45.006573 + ], + [ + -123.9952105, + 45.0053277 + ], + [ + -123.9931643, + 45.0037693 + ], + [ + -123.9915861, + 45.0019575 + ], + [ + -123.9905365, + 44.9999621 + ], + [ + -123.9900558, + 44.9978598 + ], + [ + -123.9900673, + 44.9976309 + ], + [ + -123.9898028, + 44.9966511 + ], + [ + -123.9898434, + 44.9944564 + ], + [ + -123.9905049, + 44.9923122 + ], + [ + -123.9908024, + 44.9918368 + ], + [ + -123.9906605, + 44.9912054 + ], + [ + -123.9904809, + 44.9890794 + ], + [ + -123.9908891, + 44.9869694 + ], + [ + -123.9918696, + 44.9849565 + ], + [ + -123.9933845, + 44.9831179 + ], + [ + -123.9953755, + 44.9815244 + ], + [ + -123.9977663, + 44.9802371 + ], + [ + -124.0004649, + 44.9793055 + ], + [ + -124.0033676, + 44.9787654 + ], + [ + -124.0063629, + 44.9786376 + ], + [ + -124.0093359, + 44.9789269 + ], + [ + -124.0121723, + 44.9796222 + ], + [ + -124.0147632, + 44.9806968 + ], + [ + -124.017009, + 44.9821095 + ], + [ + -124.0188234, + 44.9838059 + ], + [ + -124.0201368, + 44.9857209 + ], + [ + -124.0208985, + 44.987781 + ], + [ + -124.0216191, + 44.9909813 + ], + [ + -124.0218064, + 44.9924322 + ], + [ + -124.0218314, + 44.9931628 + ], + [ + -124.0216924, + 44.9949102 + ], + [ + -124.0216171, + 44.9952976 + ], + [ + -124.0213289, + 44.9963752 + ], + [ + -124.0211732, + 44.9968305 + ], + [ + -124.0206187, + 44.9980672 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16080_s_16210", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0032682, + 45.0079106 + ], + [ + -124.0031613, + 45.0079266 + ], + [ + -124.0024311, + 45.0079966 + ], + [ + -124.0012879, + 45.0080657 + ], + [ + -123.9991697, + 45.0086446 + ], + [ + -123.9972837, + 45.0094718 + ], + [ + -123.9967365, + 45.0098568 + ], + [ + -123.9942333, + 45.0110328 + ], + [ + -123.9914546, + 45.0118397 + ], + [ + -123.9885073, + 45.0122465 + ], + [ + -123.9855048, + 45.0122376 + ], + [ + -123.9825625, + 45.0118133 + ], + [ + -123.9797935, + 45.0109899 + ], + [ + -123.9773042, + 45.009799 + ], + [ + -123.9751904, + 45.0082865 + ], + [ + -123.9735333, + 45.0065105 + ], + [ + -123.9723965, + 45.0045392 + ], + [ + -123.9718238, + 45.0024485 + ], + [ + -123.9718369, + 45.0003187 + ], + [ + -123.9724354, + 44.9982317 + ], + [ + -123.9735963, + 44.9962676 + ], + [ + -123.9752747, + 44.9945018 + ], + [ + -123.9755548, + 44.9942619 + ], + [ + -123.9769212, + 44.9932348 + ], + [ + -123.9774212, + 44.9929048 + ], + [ + -123.9791567, + 44.9919162 + ], + [ + -123.9796267, + 44.9916862 + ], + [ + -123.9802701, + 44.991388 + ], + [ + -123.9838498, + 44.9898183 + ], + [ + -123.9849342, + 44.9893849 + ], + [ + -123.9857341, + 44.9890949 + ], + [ + -123.9871969, + 44.9886315 + ], + [ + -123.9918062, + 44.9873717 + ], + [ + -123.9941129, + 44.986885 + ], + [ + -123.9954327, + 44.986685 + ], + [ + -123.9967186, + 44.9865305 + ], + [ + -123.9967828, + 44.9865247 + ], + [ + -123.9969543, + 44.9864321 + ], + [ + -123.9996508, + 44.9854975 + ], + [ + -124.0025524, + 44.9849541 + ], + [ + -124.0055477, + 44.9848227 + ], + [ + -124.0085215, + 44.9851085 + ], + [ + -124.0113597, + 44.9858004 + ], + [ + -124.0139532, + 44.9868718 + ], + [ + -124.0162025, + 44.9882817 + ], + [ + -124.0165825, + 44.9885717 + ], + [ + -124.0180175, + 44.9898465 + ], + [ + -124.0191674, + 44.9912594 + ], + [ + -124.0193075, + 44.9914661 + ], + [ + -124.0203595, + 44.9935271 + ], + [ + -124.0208071, + 44.995696 + ], + [ + -124.0206321, + 44.9978845 + ], + [ + -124.0206256, + 44.9979134 + ], + [ + -124.0205314, + 44.9984656 + ], + [ + -124.0198804, + 45.0005448 + ], + [ + -124.0186702, + 45.0024938 + ], + [ + -124.0169472, + 45.0042379 + ], + [ + -124.0147776, + 45.00571 + ], + [ + -124.0122448, + 45.0068535 + ], + [ + -124.009446, + 45.0076243 + ], + [ + -124.0064891, + 45.007993 + ], + [ + -124.0034875, + 45.0079452 + ], + [ + -124.0032682, + 45.0079106 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16081_s_16082", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0216491, + 44.9866582 + ], + [ + -124.0207397, + 44.988234 + ], + [ + -124.0190822, + 44.9900095 + ], + [ + -124.0169683, + 44.9915215 + ], + [ + -124.0144793, + 44.9927117 + ], + [ + -124.0117107, + 44.9935344 + ], + [ + -124.0087691, + 44.993958 + ], + [ + -124.0057676, + 44.9939662 + ], + [ + -124.0028215, + 44.9935586 + ], + [ + -124.0000441, + 44.992751 + ], + [ + -123.9975423, + 44.9915743 + ], + [ + -123.9954121, + 44.9900739 + ], + [ + -123.9937355, + 44.9883073 + ], + [ + -123.9925769, + 44.9863426 + ], + [ + -123.9919806, + 44.9842553 + ], + [ + -123.9919697, + 44.9821255 + ], + [ + -123.99209, + 44.9812255 + ], + [ + -123.9925016, + 44.9795518 + ], + [ + -123.9926317, + 44.9791918 + ], + [ + -123.9935606, + 44.9773381 + ], + [ + -123.9938207, + 44.9769381 + ], + [ + -123.9951182, + 44.9753224 + ], + [ + -123.9954583, + 44.9749724 + ], + [ + -123.9966102, + 44.9739293 + ], + [ + -123.9970602, + 44.9735693 + ], + [ + -123.9971495, + 44.9735004 + ], + [ + -123.9973032, + 44.973231 + ], + [ + -123.9986971, + 44.9713449 + ], + [ + -124.0005824, + 44.9696881 + ], + [ + -124.0028868, + 44.9683242 + ], + [ + -124.0055216, + 44.9673055 + ], + [ + -124.0083857, + 44.9666713 + ], + [ + -124.0113689, + 44.9664458 + ], + [ + -124.0143569, + 44.9666378 + ], + [ + -124.0172347, + 44.9672398 + ], + [ + -124.0198919, + 44.9682287 + ], + [ + -124.0222263, + 44.9695666 + ], + [ + -124.0241483, + 44.971202 + ], + [ + -124.025584, + 44.9730722 + ], + [ + -124.0264782, + 44.9751052 + ], + [ + -124.0267965, + 44.977223 + ], + [ + -124.0265266, + 44.9793442 + ], + [ + -124.0256788, + 44.9813872 + ], + [ + -124.0247091, + 44.9830874 + ], + [ + -124.0244716, + 44.9834812 + ], + [ + -124.0242617, + 44.9838112 + ], + [ + -124.023226, + 44.9851719 + ], + [ + -124.022966, + 44.9854619 + ], + [ + -124.0216491, + 44.9866582 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16082_s_16084", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0295645, + 44.9731011 + ], + [ + -124.0278846, + 44.9774215 + ], + [ + -124.0272496, + 44.9787252 + ], + [ + -124.0256102, + 44.9815054 + ], + [ + -124.0241858, + 44.9833801 + ], + [ + -124.0222734, + 44.9850214 + ], + [ + -124.0199464, + 44.9863664 + ], + [ + -124.0172942, + 44.9873633 + ], + [ + -124.0144189, + 44.9879738 + ], + [ + -124.011431, + 44.9881744 + ], + [ + -124.0084454, + 44.9879575 + ], + [ + -124.0055768, + 44.9873313 + ], + [ + -124.0029355, + 44.9863199 + ], + [ + -124.0006232, + 44.9849622 + ], + [ + -123.9987286, + 44.9833104 + ], + [ + -123.9973246, + 44.9814281 + ], + [ + -123.9964651, + 44.9793875 + ], + [ + -123.9961831, + 44.9772671 + ], + [ + -123.9964892, + 44.9751484 + ], + [ + -123.9973718, + 44.9731128 + ], + [ + -123.9986362, + 44.9709704 + ], + [ + -124.0006582, + 44.9657768 + ], + [ + -124.000955, + 44.965101 + ], + [ + -124.000976, + 44.9650583 + ], + [ + -124.0006272, + 44.9643821 + ], + [ + -124.0001626, + 44.962326 + ], + [ + -124.000259, + 44.9602447 + ], + [ + -124.000592, + 44.959211 + ], + [ + -124.0006364, + 44.9589178 + ], + [ + -124.0008222, + 44.9584964 + ], + [ + -124.000913, + 44.9582147 + ], + [ + -124.0010272, + 44.9580315 + ], + [ + -124.0015326, + 44.9568853 + ], + [ + -124.00297, + 44.9550159 + ], + [ + -124.0048933, + 44.9533815 + ], + [ + -124.0072286, + 44.952045 + ], + [ + -124.0098861, + 44.9510575 + ], + [ + -124.0127638, + 44.9504571 + ], + [ + -124.0157511, + 44.9502669 + ], + [ + -124.0187333, + 44.950494 + ], + [ + -124.0215959, + 44.9511299 + ], + [ + -124.0242288, + 44.95215 + ], + [ + -124.026531, + 44.9535152 + ], + [ + -124.0284139, + 44.9551731 + ], + [ + -124.0292555, + 44.9563144 + ], + [ + -124.0293223, + 44.9563693 + ], + [ + -124.0305365, + 44.957733 + ], + [ + -124.0307465, + 44.958013 + ], + [ + -124.0315398, + 44.9592515 + ], + [ + -124.0317599, + 44.9596614 + ], + [ + -124.0326505, + 44.9622143 + ], + [ + -124.0329911, + 44.9641942 + ], + [ + -124.0330998, + 44.9652602 + ], + [ + -124.0331099, + 44.9655702 + ], + [ + -124.0327915, + 44.9680396 + ], + [ + -124.0327415, + 44.9682096 + ], + [ + -124.0325953, + 44.9686591 + ], + [ + -124.0324954, + 44.9689391 + ], + [ + -124.0310587, + 44.9715207 + ], + [ + -124.0306388, + 44.9720607 + ], + [ + -124.0295645, + 44.9731011 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16082_s_759422", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0317887, + 44.970251 + ], + [ + -124.0312775, + 44.9711605 + ], + [ + -124.0311186, + 44.9713885 + ], + [ + -124.0296981, + 44.9730381 + ], + [ + -124.0294522, + 44.9732737 + ], + [ + -124.0280174, + 44.9769775 + ], + [ + -124.0276595, + 44.9777786 + ], + [ + -124.0271018, + 44.9788777 + ], + [ + -124.0268548, + 44.9793322 + ], + [ + -124.0256312, + 44.9814413 + ], + [ + -124.0242221, + 44.9833218 + ], + [ + -124.0223231, + 44.984971 + ], + [ + -124.0200071, + 44.9863255 + ], + [ + -124.0173632, + 44.9873333 + ], + [ + -124.0144929, + 44.9879556 + ], + [ + -124.0115067, + 44.9881685 + ], + [ + -124.0085193, + 44.9879638 + ], + [ + -124.0056456, + 44.9873494 + ], + [ + -124.0029962, + 44.9863489 + ], + [ + -124.0006728, + 44.9850007 + ], + [ + -123.9987648, + 44.9833568 + ], + [ + -123.9973455, + 44.9814802 + ], + [ + -123.9964693, + 44.9794432 + ], + [ + -123.99617, + 44.977324 + ], + [ + -123.9964589, + 44.9752041 + ], + [ + -123.9973248, + 44.9731649 + ], + [ + -123.9984185, + 44.9712813 + ], + [ + -123.9986593, + 44.9708071 + ], + [ + -124.0007024, + 44.9655399 + ], + [ + -124.0015382, + 44.9639077 + ], + [ + -124.0018163, + 44.9634757 + ], + [ + -124.0028296, + 44.9621527 + ], + [ + -124.0030747, + 44.9618797 + ], + [ + -124.0039888, + 44.9610406 + ], + [ + -124.0043669, + 44.9604008 + ], + [ + -124.0059933, + 44.9586722 + ], + [ + -124.0080534, + 44.9571952 + ], + [ + -124.0093776, + 44.9565538 + ], + [ + -124.0098011, + 44.9563137 + ], + [ + -124.0100992, + 44.9562043 + ], + [ + -124.010472, + 44.9560237 + ], + [ + -124.011186, + 44.9558051 + ], + [ + -124.0124653, + 44.9553352 + ], + [ + -124.0153472, + 44.9547444 + ], + [ + -124.0183359, + 44.9545642 + ], + [ + -124.0213168, + 44.9548013 + ], + [ + -124.0241753, + 44.9554467 + ], + [ + -124.0268016, + 44.9564757 + ], + [ + -124.0290949, + 44.9578486 + ], + [ + -124.030967, + 44.9595127 + ], + [ + -124.0323459, + 44.9614042 + ], + [ + -124.0331787, + 44.9634503 + ], + [ + -124.0334332, + 44.9655724 + ], + [ + -124.0330997, + 44.9676891 + ], + [ + -124.0321908, + 44.9697188 + ], + [ + -124.0321327, + 44.9698148 + ], + [ + -124.0317887, + 44.970251 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16084_s_16094", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0177916, + 44.9485303 + ], + [ + -124.0190724, + 44.9487779 + ], + [ + -124.0216965, + 44.9496947 + ], + [ + -124.0240271, + 44.9509493 + ], + [ + -124.025979, + 44.9524958 + ], + [ + -124.0274202, + 44.9542056 + ], + [ + -124.0288629, + 44.9556196 + ], + [ + -124.0301613, + 44.9576993 + ], + [ + -124.0308212, + 44.9599254 + ], + [ + -124.0308323, + 44.9600014 + ], + [ + -124.0308455, + 44.9621312 + ], + [ + -124.0302732, + 44.9642219 + ], + [ + -124.0291373, + 44.9661932 + ], + [ + -124.0274815, + 44.9679692 + ], + [ + -124.0253693, + 44.9694818 + ], + [ + -124.0228818, + 44.9706727 + ], + [ + -124.0201148, + 44.9714962 + ], + [ + -124.0171746, + 44.9719206 + ], + [ + -124.0141742, + 44.9719296 + ], + [ + -124.0135554, + 44.9718442 + ], + [ + -124.0113552, + 44.9716308 + ], + [ + -124.0085854, + 44.9709635 + ], + [ + -124.0075346, + 44.9705378 + ], + [ + -124.0074023, + 44.970528 + ], + [ + -124.0044429, + 44.9698617 + ], + [ + -124.0041624, + 44.9697502 + ], + [ + -124.0036087, + 44.9696171 + ], + [ + -124.0011989, + 44.9686673 + ], + [ + -123.9990683, + 44.967426 + ], + [ + -123.997286, + 44.9659335 + ], + [ + -123.9959097, + 44.9642383 + ], + [ + -123.9958687, + 44.9641753 + ], + [ + -123.9949534, + 44.9623603 + ], + [ + -123.9945043, + 44.9604591 + ], + [ + -123.9944974, + 44.9603951 + ], + [ + -123.9944518, + 44.9595985 + ], + [ + -123.9944451, + 44.9583855 + ], + [ + -123.9946838, + 44.956431 + ], + [ + -123.9954136, + 44.9545388 + ], + [ + -123.9966107, + 44.9527706 + ], + [ + -123.9967007, + 44.9526637 + ], + [ + -123.9985648, + 44.9508881 + ], + [ + -124.000897, + 44.9494178 + ], + [ + -124.0036005, + 44.9483139 + ], + [ + -124.0042559, + 44.9481062 + ], + [ + -124.0071013, + 44.9474329 + ], + [ + -124.0100769, + 44.9471667 + ], + [ + -124.0130685, + 44.9473178 + ], + [ + -124.0159611, + 44.9478803 + ], + [ + -124.0177916, + 44.9485303 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16084_s_16185", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0317755, + 44.9509085 + ], + [ + -124.0317491, + 44.9509331 + ], + [ + -124.0314911, + 44.9511732 + ], + [ + -124.0314739, + 44.9511891 + ], + [ + -124.031174, + 44.9514671 + ], + [ + -124.031125, + 44.9515123 + ], + [ + -124.0310878, + 44.9515464 + ], + [ + -124.0307937, + 44.9518188 + ], + [ + -124.030126, + 44.9524391 + ], + [ + -124.0300148, + 44.9525412 + ], + [ + -124.0298217, + 44.9527162 + ], + [ + -124.0297482, + 44.9527973 + ], + [ + -124.0295773, + 44.9529817 + ], + [ + -124.0294305, + 44.9531366 + ], + [ + -124.0293219, + 44.9532737 + ], + [ + -124.0293296, + 44.95346 + ], + [ + -124.0293326, + 44.953638 + ], + [ + -124.0293331, + 44.9536721 + ], + [ + -124.0293352, + 44.9538331 + ], + [ + -124.0293266, + 44.9543074 + ], + [ + -124.0293192, + 44.9544593 + ], + [ + -124.0293058, + 44.9547512 + ], + [ + -124.029275, + 44.9551718 + ], + [ + -124.029254, + 44.9553798 + ], + [ + -124.0292072, + 44.9557536 + ], + [ + -124.0292049, + 44.9557692 + ], + [ + -124.0291591, + 44.9561008 + ], + [ + -124.0291537, + 44.9561395 + ], + [ + -124.0298515, + 44.95709 + ], + [ + -124.0306927, + 44.9591344 + ], + [ + -124.0309559, + 44.961256 + ], + [ + -124.030953, + 44.961459 + ], + [ + -124.0308731, + 44.962461 + ], + [ + -124.0308651, + 44.962516 + ], + [ + -124.030393, + 44.9642956 + ], + [ + -124.0303561, + 44.9643906 + ], + [ + -124.0293433, + 44.9662839 + ], + [ + -124.0278531, + 44.9680108 + ], + [ + -124.0278151, + 44.9680468 + ], + [ + -124.0258899, + 44.9695534 + ], + [ + -124.0257249, + 44.9696604 + ], + [ + -124.0232094, + 44.9709838 + ], + [ + -124.0203672, + 44.9719161 + ], + [ + -124.017317, + 44.9724182 + ], + [ + -124.0141867, + 44.9724692 + ], + [ + -124.0111073, + 44.9720668 + ], + [ + -124.0082078, + 44.9712279 + ], + [ + -124.0056096, + 44.9699877 + ], + [ + -124.0034214, + 44.9683981 + ], + [ + -124.0033464, + 44.9683311 + ], + [ + -124.0029188, + 44.9679303 + ], + [ + -124.0026758, + 44.9676913 + ], + [ + -124.0025862, + 44.9676022 + ], + [ + -124.0023742, + 44.9673892 + ], + [ + -124.0017738, + 44.9667375 + ], + [ + -124.0015969, + 44.9665294 + ], + [ + -124.0013968, + 44.9662872 + ], + [ + -124.0011578, + 44.9659892 + ], + [ + -124.0005393, + 44.9651313 + ], + [ + -124.0005013, + 44.9650723 + ], + [ + -124.0002575, + 44.9646608 + ], + [ + -124.000213, + 44.9645888 + ], + [ + -124.0001464, + 44.9644812 + ], + [ + -123.9998754, + 44.9640144 + ], + [ + -123.9998184, + 44.9639094 + ], + [ + -123.9995789, + 44.9634354 + ], + [ + -123.9995029, + 44.9632734 + ], + [ + -123.9994363, + 44.9631279 + ], + [ + -123.9993643, + 44.9629669 + ], + [ + -123.9993449, + 44.9629233 + ], + [ + -123.999319, + 44.9628643 + ], + [ + -123.9991361, + 44.9624153 + ], + [ + -123.9990761, + 44.9622553 + ], + [ + -123.9990013, + 44.9620476 + ], + [ + -123.9988295, + 44.9615496 + ], + [ + -123.9985507, + 44.9605353 + ], + [ + -123.9984768, + 44.9601763 + ], + [ + -123.998401, + 44.9597492 + ], + [ + -123.9983751, + 44.9595752 + ], + [ + -123.9983218, + 44.9589609 + ], + [ + -123.9983171, + 44.9589611 + ], + [ + -123.9983061, + 44.9588391 + ], + [ + -123.9983016, + 44.9587269 + ], + [ + -123.9982923, + 44.9586194 + ], + [ + -123.9982883, + 44.9584574 + ], + [ + -123.9982907, + 44.9584574 + ], + [ + -123.9982753, + 44.9580785 + ], + [ + -123.9982774, + 44.9578465 + ], + [ + -123.9982835, + 44.9576004 + ], + [ + -123.9982956, + 44.9573044 + ], + [ + -123.9983363, + 44.9567669 + ], + [ + -123.9983767, + 44.9564022 + ], + [ + -123.9983942, + 44.9562346 + ], + [ + -123.9984135, + 44.9560509 + ], + [ + -123.9984429, + 44.9558069 + ], + [ + -123.9984537, + 44.955728 + ], + [ + -123.9984898, + 44.9554471 + ], + [ + -123.9985353, + 44.9551404 + ], + [ + -123.9985574, + 44.9550096 + ], + [ + -123.9985625, + 44.9549722 + ], + [ + -123.9985707, + 44.9549135 + ], + [ + -123.9985979, + 44.9547247 + ], + [ + -123.9986002, + 44.9547079 + ], + [ + -123.9986027, + 44.9546894 + ], + [ + -123.9986468, + 44.9543724 + ], + [ + -123.9986503, + 44.9543475 + ], + [ + -123.9986764, + 44.9541645 + ], + [ + -123.9986779, + 44.9541535 + ], + [ + -123.9987021, + 44.9539855 + ], + [ + -123.9987096, + 44.9539276 + ], + [ + -123.998727, + 44.9538037 + ], + [ + -123.9987229, + 44.9537374 + ], + [ + -123.9987032, + 44.953537 + ], + [ + -123.9986945, + 44.9534544 + ], + [ + -123.998608, + 44.9526587 + ], + [ + -123.9985919, + 44.9524935 + ], + [ + -123.9985738, + 44.9522859 + ], + [ + -123.9985548, + 44.9520813 + ], + [ + -123.9985231, + 44.9512306 + ], + [ + -123.9985251, + 44.9511166 + ], + [ + -123.9985294, + 44.9509628 + ], + [ + -123.9985354, + 44.9508028 + ], + [ + -123.9986348, + 44.9498241 + ], + [ + -123.9986578, + 44.9496851 + ], + [ + -123.9988844, + 44.9487059 + ], + [ + -123.9989234, + 44.9485749 + ], + [ + -123.9989944, + 44.9483484 + ], + [ + -123.9990485, + 44.9481844 + ], + [ + -123.9990673, + 44.948128 + ], + [ + -123.9990963, + 44.948042 + ], + [ + -123.9993185, + 44.9474563 + ], + [ + -123.9993615, + 44.9473543 + ], + [ + -123.9998674, + 44.9463405 + ], + [ + -123.9999925, + 44.9461245 + ], + [ + -124.0004123, + 44.9454631 + ], + [ + -124.0005493, + 44.9452651 + ], + [ + -124.0008715, + 44.9448252 + ], + [ + -124.0011586, + 44.9444543 + ], + [ + -124.0013128, + 44.9442597 + ], + [ + -124.0019809, + 44.9434368 + ], + [ + -124.0020718, + 44.9433263 + ], + [ + -124.0023115, + 44.943039 + ], + [ + -124.0023773, + 44.9429598 + ], + [ + -124.0026505, + 44.9426241 + ], + [ + -124.0030589, + 44.9421083 + ], + [ + -124.0037033, + 44.9413658 + ], + [ + -124.0041066, + 44.9409404 + ], + [ + -124.0044795, + 44.9405293 + ], + [ + -124.0053, + 44.9397105 + ], + [ + -124.005874, + 44.9391903 + ], + [ + -124.0064939, + 44.9386146 + ], + [ + -124.0065083, + 44.9386012 + ], + [ + -124.0068323, + 44.9383013 + ], + [ + -124.0071843, + 44.9379758 + ], + [ + -124.0074155, + 44.9377608 + ], + [ + -124.0074657, + 44.9377137 + ], + [ + -124.0075908, + 44.9375951 + ], + [ + -124.0077671, + 44.9374277 + ], + [ + -124.0077774, + 44.9374179 + ], + [ + -124.0080266, + 44.9371819 + ], + [ + -124.0082798, + 44.9369275 + ], + [ + -124.0095872, + 44.9358458 + ], + [ + -124.0096812, + 44.9357539 + ], + [ + -124.0097633, + 44.9357001 + ], + [ + -124.0101541, + 44.9353767 + ], + [ + -124.0108987, + 44.9349551 + ], + [ + -124.0118838, + 44.9343087 + ], + [ + -124.0144408, + 44.9331964 + ], + [ + -124.0172542, + 44.9324598 + ], + [ + -124.0202157, + 44.9321271 + ], + [ + -124.0232118, + 44.9322112 + ], + [ + -124.0261272, + 44.9327087 + ], + [ + -124.02885, + 44.9336006 + ], + [ + -124.0312756, + 44.9348527 + ], + [ + -124.0333108, + 44.9364168 + ], + [ + -124.0348775, + 44.9382328 + ], + [ + -124.0359153, + 44.940231 + ], + [ + -124.0363844, + 44.9423346 + ], + [ + -124.0362666, + 44.9444628 + ], + [ + -124.0355664, + 44.9465338 + ], + [ + -124.0354165, + 44.9468408 + ], + [ + -124.0341426, + 44.9487969 + ], + [ + -124.0323499, + 44.9505359 + ], + [ + -124.0317755, + 44.9509085 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16086_s_16087", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0337515, + 44.9265252 + ], + [ + -124.0349833, + 44.9285068 + ], + [ + -124.0356372, + 44.9306227 + ], + [ + -124.0356873, + 44.9327887 + ], + [ + -124.0351313, + 44.9349186 + ], + [ + -124.0339914, + 44.9369279 + ], + [ + -124.0323129, + 44.9387365 + ], + [ + -124.0301625, + 44.9402727 + ], + [ + -124.0276255, + 44.9414753 + ], + [ + -124.0273338, + 44.9415854 + ], + [ + -124.0244758, + 44.942414 + ], + [ + -124.0214417, + 44.9428181 + ], + [ + -124.0183552, + 44.9427813 + ], + [ + -124.0153419, + 44.9423051 + ], + [ + -124.0125247, + 44.9414089 + ], + [ + -124.0100183, + 44.9401291 + ], + [ + -124.0079248, + 44.938518 + ], + [ + -124.0076986, + 44.9383042 + ], + [ + -124.0076898, + 44.9382984 + ], + [ + -124.005814, + 44.9371289 + ], + [ + -124.0037652, + 44.9355738 + ], + [ + -124.0021831, + 44.9337645 + ], + [ + -124.0011283, + 44.9317708 + ], + [ + -124.0006414, + 44.9296693 + ], + [ + -124.0007411, + 44.9275406 + ], + [ + -124.0014234, + 44.9254667 + ], + [ + -124.0026621, + 44.9235271 + ], + [ + -124.0044094, + 44.9217965 + ], + [ + -124.0065983, + 44.9203412 + ], + [ + -124.0091447, + 44.9192173 + ], + [ + -124.0119506, + 44.9184679 + ], + [ + -124.0149084, + 44.9181217 + ], + [ + -124.0179044, + 44.9181921 + ], + [ + -124.0208235, + 44.9186763 + ], + [ + -124.0235537, + 44.9195558 + ], + [ + -124.02599, + 44.9207968 + ], + [ + -124.0280235, + 44.9220643 + ], + [ + -124.0283354, + 44.9222642 + ], + [ + -124.0290271, + 44.9227198 + ], + [ + -124.0291754, + 44.9228236 + ], + [ + -124.0296196, + 44.9230234 + ], + [ + -124.0317913, + 44.9244917 + ], + [ + -124.0335182, + 44.9262327 + ], + [ + -124.0337515, + 44.9265252 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16087_s_16088", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.02974, + 44.9244485 + ], + [ + -124.0306058, + 44.9260267 + ], + [ + -124.0311287, + 44.9281238 + ], + [ + -124.0310656, + 44.9302532 + ], + [ + -124.0304189, + 44.9323329 + ], + [ + -124.0292134, + 44.934283 + ], + [ + -124.0274953, + 44.9360286 + ], + [ + -124.0253308, + 44.9375025 + ], + [ + -124.0228028, + 44.9386481 + ], + [ + -124.0200087, + 44.9394213 + ], + [ + -124.0170559, + 44.9397924 + ], + [ + -124.0140578, + 44.9397472 + ], + [ + -124.0111298, + 44.9392874 + ], + [ + -124.0083844, + 44.9384306 + ], + [ + -124.0059272, + 44.9372098 + ], + [ + -124.0045472, + 44.9363697 + ], + [ + -124.0027601, + 44.9350839 + ], + [ + -124.0012979, + 44.9336055 + ], + [ + -124.000878, + 44.9330954 + ], + [ + -123.9993298, + 44.930482 + ], + [ + -123.9991099, + 44.9299119 + ], + [ + -123.9986834, + 44.9283827 + ], + [ + -123.9985835, + 44.9278127 + ], + [ + -123.9984725, + 44.9261662 + ], + [ + -123.9987133, + 44.9245268 + ], + [ + -123.9987198, + 44.9245014 + ], + [ + -123.9981206, + 44.9235773 + ], + [ + -123.9974217, + 44.9215061 + ], + [ + -123.997305, + 44.9193779 + ], + [ + -123.9977749, + 44.9172744 + ], + [ + -123.9988132, + 44.9152764 + ], + [ + -124.0003802, + 44.9134607 + ], + [ + -124.0024154, + 44.9118971 + ], + [ + -124.0048406, + 44.9106457 + ], + [ + -124.0075628, + 44.9097544 + ], + [ + -124.0079648, + 44.9096554 + ], + [ + -124.0113199, + 44.90912 + ], + [ + -124.0118248, + 44.909081 + ], + [ + -124.0148289, + 44.9090599 + ], + [ + -124.0177807, + 44.9094566 + ], + [ + -124.0205665, + 44.9102558 + ], + [ + -124.0230787, + 44.9114265 + ], + [ + -124.0252203, + 44.9129237 + ], + [ + -124.0269087, + 44.9146895 + ], + [ + -124.0280786, + 44.9166559 + ], + [ + -124.0285513, + 44.918286 + ], + [ + -124.0292748, + 44.9196269 + ], + [ + -124.0293649, + 44.9198769 + ], + [ + -124.0298156, + 44.9219269 + ], + [ + -124.0298457, + 44.9222869 + ], + [ + -124.0298471, + 44.923558 + ], + [ + -124.0298072, + 44.924048 + ], + [ + -124.02974, + 44.9244485 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16088_s_16088", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -123.9972547, + 44.9201162 + ], + [ + -123.9975118, + 44.9179942 + ], + [ + -123.9983466, + 44.9159486 + ], + [ + -123.999727, + 44.914058 + ], + [ + -124.0015997, + 44.9123951 + ], + [ + -124.003893, + 44.9110237 + ], + [ + -124.0065186, + 44.9099965 + ], + [ + -124.0093757, + 44.909353 + ], + [ + -124.0123546, + 44.9091178 + ], + [ + -124.0153407, + 44.9093001 + ], + [ + -124.0182195, + 44.9098928 + ], + [ + -124.0208804, + 44.9108731 + ], + [ + -124.0232211, + 44.9122034 + ], + [ + -124.0251517, + 44.9138326 + ], + [ + -124.026598, + 44.9156981 + ], + [ + -124.0275043, + 44.9177282 + ], + [ + -124.0278359, + 44.919845 + ], + [ + -124.0275799, + 44.9219671 + ], + [ + -124.026746, + 44.9240128 + ], + [ + -124.0253664, + 44.9259037 + ], + [ + -124.0234938, + 44.927567 + ], + [ + -124.0212004, + 44.9289388 + ], + [ + -124.0185742, + 44.9299664 + ], + [ + -124.0157162, + 44.9306101 + ], + [ + -124.0127362, + 44.9308454 + ], + [ + -124.009749, + 44.9306631 + ], + [ + -124.0068692, + 44.9300702 + ], + [ + -124.0042077, + 44.9290895 + ], + [ + -124.0018667, + 44.9277588 + ], + [ + -123.9999363, + 44.9261292 + ], + [ + -123.9984906, + 44.9242634 + ], + [ + -123.9975852, + 44.922233 + ], + [ + -123.9972547, + 44.9201162 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16088_s_16089", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0296089, + 44.9248714 + ], + [ + -124.0300788, + 44.9256779 + ], + [ + -124.0306629, + 44.9277669 + ], + [ + -124.0306621, + 44.9298967 + ], + [ + -124.0300764, + 44.9319855 + ], + [ + -124.0289282, + 44.933953 + ], + [ + -124.0272616, + 44.9357235 + ], + [ + -124.0251407, + 44.9372291 + ], + [ + -124.0226468, + 44.9384118 + ], + [ + -124.019876, + 44.9392261 + ], + [ + -124.0169346, + 44.9396407 + ], + [ + -124.0139359, + 44.9396398 + ], + [ + -124.010995, + 44.9392233 + ], + [ + -124.0082252, + 44.9384072 + ], + [ + -124.0057328, + 44.937223 + ], + [ + -124.0048828, + 44.9367269 + ], + [ + -124.0034944, + 44.9358085 + ], + [ + -124.0030324, + 44.9354624 + ], + [ + -124.0007727, + 44.9332784 + ], + [ + -124.0004947, + 44.9329243 + ], + [ + -123.9989771, + 44.9301584 + ], + [ + -123.9988102, + 44.9296624 + ], + [ + -123.9983916, + 44.9272057 + ], + [ + -123.9983867, + 44.9266597 + ], + [ + -123.9984704, + 44.9259686 + ], + [ + -123.998134, + 44.925615 + ], + [ + -123.9969503, + 44.9235748 + ], + [ + -123.9963713, + 44.9214069 + ], + [ + -123.9964208, + 44.9192005 + ], + [ + -123.9970967, + 44.9170467 + ], + [ + -123.9983711, + 44.9150344 + ], + [ + -124.0001914, + 44.9132465 + ], + [ + -124.0024824, + 44.9117568 + ], + [ + -124.0029574, + 44.9115059 + ], + [ + -124.0045, + 44.9107891 + ], + [ + -124.0049879, + 44.9105912 + ], + [ + -124.0077239, + 44.9097215 + ], + [ + -124.010646, + 44.9092477 + ], + [ + -124.0136419, + 44.9091881 + ], + [ + -124.0165968, + 44.9095449 + ], + [ + -124.0193969, + 44.9103044 + ], + [ + -124.0219348, + 44.9114374 + ], + [ + -124.024113, + 44.9129005 + ], + [ + -124.0258478, + 44.9146374 + ], + [ + -124.0265866, + 44.9158101 + ], + [ + -124.0280712, + 44.9174632 + ], + [ + -124.0283032, + 44.9178172 + ], + [ + -124.0295618, + 44.9207816 + ], + [ + -124.0296439, + 44.9211676 + ], + [ + -124.0298034, + 44.9232246 + ], + [ + -124.0297695, + 44.9238266 + ], + [ + -124.0296089, + 44.9248714 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16088_s_16189", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0223384, + 44.9036115 + ], + [ + -124.0219288, + 44.905839 + ], + [ + -124.0218863, + 44.9060534 + ], + [ + -124.0208517, + 44.9109217 + ], + [ + -124.0212908, + 44.9110957 + ], + [ + -124.0235736, + 44.9124759 + ], + [ + -124.0254336, + 44.9141461 + ], + [ + -124.0267994, + 44.916042 + ], + [ + -124.0276185, + 44.9180907 + ], + [ + -124.0278594, + 44.9202137 + ], + [ + -124.0275127, + 44.9223292 + ], + [ + -124.0265917, + 44.9243561 + ], + [ + -124.0251317, + 44.9262163 + ], + [ + -124.0231889, + 44.9278384 + ], + [ + -124.0208378, + 44.92916 + ], + [ + -124.0199177, + 44.9295801 + ], + [ + -124.0173822, + 44.9305126 + ], + [ + -124.0146468, + 44.931094 + ], + [ + -124.0118069, + 44.931304 + ], + [ + -124.0089615, + 44.9311354 + ], + [ + -124.0062099, + 44.930594 + ], + [ + -124.0036479, + 44.9296986 + ], + [ + -124.001365, + 44.9284806 + ], + [ + -124.000575, + 44.9279705 + ], + [ + -123.9991906, + 44.926952 + ], + [ + -123.9988806, + 44.926692 + ], + [ + -123.9987549, + 44.9265851 + ], + [ + -123.997605, + 44.925595 + ], + [ + -123.9973242, + 44.9253459 + ], + [ + -123.9940545, + 44.9223556 + ], + [ + -123.9936641, + 44.9219823 + ], + [ + -123.9931341, + 44.9214523 + ], + [ + -123.991453, + 44.9192834 + ], + [ + -123.9910431, + 44.9185734 + ], + [ + -123.9903106, + 44.9169531 + ], + [ + -123.9901008, + 44.9163231 + ], + [ + -123.9897313, + 44.914621 + ], + [ + -123.9896814, + 44.914141 + ], + [ + -123.9896546, + 44.9128643 + ], + [ + -123.9896948, + 44.9122143 + ], + [ + -123.9899814, + 44.9105446 + ], + [ + -123.9900782, + 44.9102034 + ], + [ + -123.9916317, + 44.9029116 + ], + [ + -123.9925433, + 44.8979691 + ], + [ + -123.9926522, + 44.897469 + ], + [ + -123.9931527, + 44.895479 + ], + [ + -123.9934057, + 44.894658 + ], + [ + -123.9935958, + 44.894138 + ], + [ + -123.9942884, + 44.8926781 + ], + [ + -123.9945885, + 44.8921681 + ], + [ + -123.9960452, + 44.8902563 + ], + [ + -123.9966853, + 44.8895864 + ], + [ + -123.9992381, + 44.8875304 + ], + [ + -124.000038, + 44.8870305 + ], + [ + -124.00182, + 44.8860715 + ], + [ + -124.00258, + 44.8857216 + ], + [ + -124.005227, + 44.8847486 + ], + [ + -124.0058969, + 44.8845587 + ], + [ + -124.0069201, + 44.8842981 + ], + [ + -124.0119723, + 44.8831536 + ], + [ + -124.0129944, + 44.8823836 + ], + [ + -124.0152542, + 44.8809854 + ], + [ + -124.017854, + 44.8799273 + ], + [ + -124.0206942, + 44.8792502 + ], + [ + -124.0236656, + 44.8789799 + ], + [ + -124.0266541, + 44.8791269 + ], + [ + -124.0295448, + 44.8796856 + ], + [ + -124.0322268, + 44.8806344 + ], + [ + -124.034597, + 44.8819369 + ], + [ + -124.0365643, + 44.8835431 + ], + [ + -124.0380532, + 44.8853913 + ], + [ + -124.0390064, + 44.8874104 + ], + [ + -124.0393872, + 44.889523 + ], + [ + -124.039181, + 44.8916478 + ], + [ + -124.0383955, + 44.8937031 + ], + [ + -124.0370609, + 44.8956101 + ], + [ + -124.0352284, + 44.8972952 + ], + [ + -124.0323085, + 44.8994955 + ], + [ + -124.0312294, + 44.9002327 + ], + [ + -124.0305994, + 44.9006228 + ], + [ + -124.0282906, + 44.9018028 + ], + [ + -124.0276906, + 44.9020528 + ], + [ + -124.0258684, + 44.9027002 + ], + [ + -124.0249283, + 44.9029803 + ], + [ + -124.0236628, + 44.9033114 + ], + [ + -124.0223384, + 44.9036115 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16089_s_759418", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0278524, + 44.9220936 + ], + [ + -124.02785, + 44.9220955 + ], + [ + -124.0285526, + 44.9224691 + ], + [ + -124.0296006, + 44.923178 + ], + [ + -124.0309443, + 44.9242129 + ], + [ + -124.0316833, + 44.9248618 + ], + [ + -124.0324523, + 44.9255985 + ], + [ + -124.0347265, + 44.9279812 + ], + [ + -124.0361579, + 44.9298527 + ], + [ + -124.0370478, + 44.9318865 + ], + [ + -124.0373622, + 44.9340046 + ], + [ + -124.0370887, + 44.9361256 + ], + [ + -124.0362379, + 44.9381679 + ], + [ + -124.0348424, + 44.940053 + ], + [ + -124.0329558, + 44.9417085 + ], + [ + -124.0306506, + 44.9430708 + ], + [ + -124.0280154, + 44.9440875 + ], + [ + -124.0251514, + 44.9447194 + ], + [ + -124.0221689, + 44.9449423 + ], + [ + -124.0191825, + 44.9447477 + ], + [ + -124.0163069, + 44.9441429 + ], + [ + -124.0136528, + 44.9431513 + ], + [ + -124.0113223, + 44.9418109 + ], + [ + -124.0094048, + 44.9401734 + ], + [ + -124.0078214, + 44.9385138 + ], + [ + -124.0078048, + 44.9385056 + ], + [ + -124.0054167, + 44.9370334 + ], + [ + -124.0033558, + 44.9354863 + ], + [ + -124.0017595, + 44.9336834 + ], + [ + -124.0006891, + 44.9316939 + ], + [ + -124.0001858, + 44.9295942 + ], + [ + -124.0002688, + 44.9274652 + ], + [ + -124.0009348, + 44.9253886 + ], + [ + -124.0021583, + 44.9234442 + ], + [ + -124.0038921, + 44.9217067 + ], + [ + -124.0060696, + 44.9202428 + ], + [ + -124.0086071, + 44.9191089 + ], + [ + -124.0114071, + 44.9183484 + ], + [ + -124.0143621, + 44.9179905 + ], + [ + -124.0173586, + 44.9180491 + ], + [ + -124.0202815, + 44.9185218 + ], + [ + -124.0230185, + 44.9193905 + ], + [ + -124.0254644, + 44.9206218 + ], + [ + -124.0278524, + 44.9220936 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16089_s_781959", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0364509, + 44.9432868 + ], + [ + -124.0364359, + 44.943397 + ], + [ + -124.0360755, + 44.9449143 + ], + [ + -124.0359686, + 44.9452273 + ], + [ + -124.0354635, + 44.9464085 + ], + [ + -124.0353415, + 44.9466445 + ], + [ + -124.0344362, + 44.9480699 + ], + [ + -124.0341773, + 44.9484099 + ], + [ + -124.0332823, + 44.9494429 + ], + [ + -124.0329543, + 44.9497779 + ], + [ + -124.0326375, + 44.9500896 + ], + [ + -124.0318668, + 44.9508203 + ], + [ + -124.0298421, + 44.9523916 + ], + [ + -124.0274245, + 44.9536522 + ], + [ + -124.0247069, + 44.9545536 + ], + [ + -124.0217937, + 44.9550612 + ], + [ + -124.0187971, + 44.9551553 + ], + [ + -124.0158323, + 44.9548325 + ], + [ + -124.0130131, + 44.9541051 + ], + [ + -124.010448, + 44.9530011 + ], + [ + -124.0082357, + 44.951563 + ], + [ + -124.0064611, + 44.9498459 + ], + [ + -124.0051925, + 44.947916 + ], + [ + -124.0044784, + 44.9458475 + ], + [ + -124.0043464, + 44.9437197 + ], + [ + -124.0048014, + 44.9416145 + ], + [ + -124.0058259, + 44.9396128 + ], + [ + -124.0061584, + 44.9392233 + ], + [ + -124.0063809, + 44.938186 + ], + [ + -124.006503, + 44.937781 + ], + [ + -124.0065538, + 44.9376412 + ], + [ + -124.0056528, + 44.9371013 + ], + [ + -124.0035614, + 44.935575 + ], + [ + -124.0019296, + 44.9337882 + ], + [ + -124.00082, + 44.9318096 + ], + [ + -124.0002752, + 44.9297152 + ], + [ + -124.000316, + 44.9275855 + ], + [ + -124.0009409, + 44.9255025 + ], + [ + -124.0021257, + 44.923546 + ], + [ + -124.003825, + 44.9217914 + ], + [ + -124.0059733, + 44.9203059 + ], + [ + -124.0084881, + 44.9191467 + ], + [ + -124.0112729, + 44.9183583 + ], + [ + -124.0142205, + 44.917971 + ], + [ + -124.0172178, + 44.9179996 + ], + [ + -124.0201498, + 44.9184431 + ], + [ + -124.0229037, + 44.9192844 + ], + [ + -124.0253737, + 44.9204912 + ], + [ + -124.026803, + 44.9213474 + ], + [ + -124.0268302, + 44.9213637 + ], + [ + -124.0276542, + 44.9218596 + ], + [ + -124.0277794, + 44.9219358 + ], + [ + -124.0286344, + 44.9224618 + ], + [ + -124.0295657, + 44.923085 + ], + [ + -124.0300687, + 44.9234509 + ], + [ + -124.0307962, + 44.924019 + ], + [ + -124.0312243, + 44.924378 + ], + [ + -124.0317827, + 44.9248751 + ], + [ + -124.0321337, + 44.9252071 + ], + [ + -124.0324774, + 44.9255455 + ], + [ + -124.0327683, + 44.9258438 + ], + [ + -124.0329461, + 44.9260242 + ], + [ + -124.0330083, + 44.9260878 + ], + [ + -124.0345115, + 44.9276366 + ], + [ + -124.0347025, + 44.9278382 + ], + [ + -124.0349678, + 44.9281251 + ], + [ + -124.035325, + 44.928508 + ], + [ + -124.0354156, + 44.9286063 + ], + [ + -124.0359577, + 44.9292012 + ], + [ + -124.0371331, + 44.9307547 + ], + [ + -124.0373232, + 44.9310637 + ], + [ + -124.0374319, + 44.9312448 + ], + [ + -124.0375009, + 44.9313628 + ], + [ + -124.0381623, + 44.932751 + ], + [ + -124.0383685, + 44.933304 + ], + [ + -124.0386364, + 44.9341613 + ], + [ + -124.0387205, + 44.9344933 + ], + [ + -124.0389589, + 44.9361938 + ], + [ + -124.038967, + 44.9364727 + ], + [ + -124.0388095, + 44.9382668 + ], + [ + -124.0387476, + 44.9385678 + ], + [ + -124.0382461, + 44.9401589 + ], + [ + -124.0381172, + 44.9404599 + ], + [ + -124.0377641, + 44.9411902 + ], + [ + -124.0375042, + 44.9416712 + ], + [ + -124.037116, + 44.942325 + ], + [ + -124.036933, + 44.942607 + ], + [ + -124.0364881, + 44.943238 + ], + [ + -124.0364509, + 44.9432868 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16092_s_759419", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0292523, + 44.9533122 + ], + [ + -124.0292615, + 44.9535226 + ], + [ + -124.0292547, + 44.9544286 + ], + [ + -124.0291798, + 44.9554466 + ], + [ + -124.029042, + 44.9564296 + ], + [ + -124.0284539, + 44.9585181 + ], + [ + -124.0273031, + 44.960485 + ], + [ + -124.0256339, + 44.9622547 + ], + [ + -124.0235104, + 44.9637591 + ], + [ + -124.0210142, + 44.9649405 + ], + [ + -124.0182412, + 44.9657533 + ], + [ + -124.0152981, + 44.9661665 + ], + [ + -124.012298, + 44.966164 + ], + [ + -124.0093562, + 44.9657459 + ], + [ + -124.006586, + 44.9649284 + ], + [ + -124.0040937, + 44.9637429 + ], + [ + -124.0019751, + 44.9622349 + ], + [ + -124.0003118, + 44.9604624 + ], + [ + -123.9991676, + 44.9584936 + ], + [ + -123.9985864, + 44.9564041 + ], + [ + -123.9985905, + 44.9542743 + ], + [ + -123.9986574, + 44.9537991 + ], + [ + -123.9986574, + 44.9537963 + ], + [ + -123.9985247, + 44.9523843 + ], + [ + -123.9984919, + 44.9517945 + ], + [ + -123.9984811, + 44.9511685 + ], + [ + -123.9989136, + 44.9484666 + ], + [ + -123.9991418, + 44.9478006 + ], + [ + -124.0002985, + 44.9455456 + ], + [ + -124.0006465, + 44.9450466 + ], + [ + -124.0011659, + 44.9443645 + ], + [ + -124.0018735, + 44.9435094 + ], + [ + -124.0019067, + 44.9415277 + ], + [ + -124.0025266, + 44.9394439 + ], + [ + -124.003707, + 44.937486 + ], + [ + -124.0054023, + 44.9357292 + ], + [ + -124.0075475, + 44.9342411 + ], + [ + -124.0100601, + 44.9330788 + ], + [ + -124.0128435, + 44.932287 + ], + [ + -124.0157909, + 44.931896 + ], + [ + -124.0166028, + 44.931846 + ], + [ + -124.0192197, + 44.9318445 + ], + [ + -124.0197496, + 44.9318765 + ], + [ + -124.0221585, + 44.9321609 + ], + [ + -124.0226605, + 44.9322498 + ], + [ + -124.026243, + 44.9332384 + ], + [ + -124.0269549, + 44.9335124 + ], + [ + -124.0290094, + 44.9344616 + ], + [ + -124.0308241, + 44.9356316 + ], + [ + -124.0314911, + 44.9361365 + ], + [ + -124.0333496, + 44.9378604 + ], + [ + -124.0346885, + 44.9398124 + ], + [ + -124.0354542, + 44.9419145 + ], + [ + -124.0356161, + 44.9440827 + ], + [ + -124.0351676, + 44.9462305 + ], + [ + -124.0341267, + 44.9482721 + ], + [ + -124.0325348, + 44.9501258 + ], + [ + -124.0297639, + 44.9527263 + ], + [ + -124.0295584, + 44.9529421 + ], + [ + -124.0292523, + 44.9533122 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16094_s_16095", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0281364, + 44.9555467 + ], + [ + -124.0293691, + 44.9567541 + ], + [ + -124.0306221, + 44.9586892 + ], + [ + -124.0313194, + 44.9607607 + ], + [ + -124.0314341, + 44.962889 + ], + [ + -124.0309617, + 44.9649922 + ], + [ + -124.0299204, + 44.9669896 + ], + [ + -124.0283501, + 44.9688044 + ], + [ + -124.0263111, + 44.9703668 + ], + [ + -124.0238818, + 44.9716168 + ], + [ + -124.0211556, + 44.9725063 + ], + [ + -124.0182372, + 44.973001 + ], + [ + -124.0152389, + 44.9730821 + ], + [ + -124.0122759, + 44.9727463 + ], + [ + -124.0094623, + 44.9720066 + ], + [ + -124.0069061, + 44.9708913 + ], + [ + -124.0058236, + 44.9701792 + ], + [ + -124.0047904, + 44.9699597 + ], + [ + -124.0039139, + 44.9696287 + ], + [ + -124.0025535, + 44.9692289 + ], + [ + -124.0025029, + 44.9692092 + ], + [ + -124.0001439, + 44.9680738 + ], + [ + -123.9981225, + 44.9666476 + ], + [ + -123.9965086, + 44.96498 + ], + [ + -123.9964697, + 44.9649304 + ], + [ + -123.9954259, + 44.9632979 + ], + [ + -123.9947746, + 44.9615658 + ], + [ + -123.9945333, + 44.9597812 + ], + [ + -123.9945155, + 44.958811 + ], + [ + -123.9945146, + 44.9587534 + ], + [ + -123.9945113, + 44.9584448 + ], + [ + -123.9946977, + 44.9566673 + ], + [ + -123.995291, + 44.9549354 + ], + [ + -123.9953375, + 44.9548359 + ], + [ + -123.9963757, + 44.9531238 + ], + [ + -123.9978108, + 44.9515629 + ], + [ + -123.9978475, + 44.9515295 + ], + [ + -123.9998441, + 44.9500354 + ], + [ + -124.0022018, + 44.9488356 + ], + [ + -124.0040068, + 44.9482447 + ], + [ + -124.003987, + 44.948212 + ], + [ + -124.0044641, + 44.9480663 + ], + [ + -124.0047471, + 44.9480024 + ], + [ + -124.004836, + 44.9479732 + ], + [ + -124.0049718, + 44.9479395 + ], + [ + -124.0049772, + 44.9479504 + ], + [ + -124.0073222, + 44.9474207 + ], + [ + -124.0103026, + 44.9471834 + ], + [ + -124.013291, + 44.9473635 + ], + [ + -124.0161726, + 44.9479541 + ], + [ + -124.0178834, + 44.9485825 + ], + [ + -124.0190367, + 44.9488025 + ], + [ + -124.021648, + 44.9497041 + ], + [ + -124.0239726, + 44.9509398 + ], + [ + -124.0259266, + 44.952465 + ], + [ + -124.0274398, + 44.9542248 + ], + [ + -124.0281364, + 44.9555467 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16094_s_16185", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0320435, + 44.9506512 + ], + [ + -124.0319831, + 44.9507107 + ], + [ + -124.0317302, + 44.9509523 + ], + [ + -124.0297958, + 44.9527476 + ], + [ + -124.0295935, + 44.9529614 + ], + [ + -124.0292973, + 44.9533169 + ], + [ + -124.0293002, + 44.9533742 + ], + [ + -124.0293104, + 44.9542842 + ], + [ + -124.0292547, + 44.9553017 + ], + [ + -124.0290052, + 44.9573617 + ], + [ + -124.0289174, + 44.9579184 + ], + [ + -124.0286877, + 44.9590984 + ], + [ + -124.0279533, + 44.9612391 + ], + [ + -124.0266257, + 44.9632305 + ], + [ + -124.0247594, + 44.9649908 + ], + [ + -124.022431, + 44.9664476 + ], + [ + -124.0197365, + 44.9675409 + ], + [ + -124.0167866, + 44.9682257 + ], + [ + -124.0148618, + 44.9683806 + ], + [ + -124.0136383, + 44.9686519 + ], + [ + -124.010655, + 44.9688782 + ], + [ + -124.0076668, + 44.9686868 + ], + [ + -124.0047888, + 44.9680853 + ], + [ + -124.0021314, + 44.9670966 + ], + [ + -123.9997969, + 44.9657589 + ], + [ + -123.997875, + 44.9641235 + ], + [ + -123.9964395, + 44.9622533 + ], + [ + -123.9955456, + 44.9602202 + ], + [ + -123.9952276, + 44.9581024 + ], + [ + -123.9954976, + 44.9559812 + ], + [ + -123.9963451, + 44.9539382 + ], + [ + -123.9977377, + 44.9520518 + ], + [ + -123.9985632, + 44.9513257 + ], + [ + -123.9986523, + 44.9497013 + ], + [ + -123.9987224, + 44.9493513 + ], + [ + -123.9991334, + 44.9479596 + ], + [ + -123.9993536, + 44.9473996 + ], + [ + -124.0005871, + 44.945212 + ], + [ + -124.0012473, + 44.9443321 + ], + [ + -124.0015845, + 44.943906 + ], + [ + -124.0034848, + 44.9416262 + ], + [ + -124.0039548, + 44.9410977 + ], + [ + -124.0046649, + 44.9403478 + ], + [ + -124.0052124, + 44.9398061 + ], + [ + -124.0073038, + 44.9378659 + ], + [ + -124.0083168, + 44.9368701 + ], + [ + -124.009912, + 44.9355925 + ], + [ + -124.0103862, + 44.9351914 + ], + [ + -124.0127254, + 44.933859 + ], + [ + -124.0153856, + 44.9328763 + ], + [ + -124.0182645, + 44.932281 + ], + [ + -124.0212515, + 44.9320961 + ], + [ + -124.024232, + 44.9323286 + ], + [ + -124.0270913, + 44.9329695 + ], + [ + -124.0297198, + 44.9339944 + ], + [ + -124.0320164, + 44.9353637 + ], + [ + -124.0338929, + 44.9370249 + ], + [ + -124.0352772, + 44.9389142 + ], + [ + -124.0361159, + 44.9409591 + ], + [ + -124.0363769, + 44.9430808 + ], + [ + -124.0360501, + 44.9451979 + ], + [ + -124.0351479, + 44.9472291 + ], + [ + -124.03495, + 44.9475581 + ], + [ + -124.0334541, + 44.9494798 + ], + [ + -124.0320435, + 44.9506512 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16094_s_759425", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.025677, + 44.958345 + ], + [ + -124.0259013, + 44.9596392 + ], + [ + -124.025675, + 44.9617755 + ], + [ + -124.0248627, + 44.9638387 + ], + [ + -124.0234958, + 44.9657486 + ], + [ + -124.0216275, + 44.967431 + ], + [ + -124.0193303, + 44.9688204 + ], + [ + -124.0166937, + 44.9698627 + ], + [ + -124.0146001, + 44.9705074 + ], + [ + -124.0117982, + 44.971151 + ], + [ + -124.0088744, + 44.9714017 + ], + [ + -124.0059372, + 44.9712502 + ], + [ + -124.0030952, + 44.970702 + ], + [ + -124.0004539, + 44.9697776 + ], + [ + -123.9981109, + 44.9685112 + ], + [ + -123.9970068, + 44.9676305 + ], + [ + -123.9969497, + 44.9676032 + ], + [ + -123.9948348, + 44.9660926 + ], + [ + -123.9931758, + 44.964318 + ], + [ + -123.9920365, + 44.9623477 + ], + [ + -123.9914605, + 44.9602575 + ], + [ + -123.99147, + 44.9581277 + ], + [ + -123.9920644, + 44.9560401 + ], + [ + -123.9921057, + 44.9559445 + ], + [ + -123.9934862, + 44.9536945 + ], + [ + -123.9935575, + 44.9536069 + ], + [ + -123.9952519, + 44.9519199 + ], + [ + -123.9973664, + 44.9504919 + ], + [ + -123.9998242, + 44.949375 + ], + [ + -124.0025358, + 44.9486096 + ], + [ + -124.0026259, + 44.948591 + ], + [ + -124.0030878, + 44.9485226 + ], + [ + -124.003247, + 44.9484622 + ], + [ + -124.0060189, + 44.9476488 + ], + [ + -124.0089608, + 44.9472349 + ], + [ + -124.01196, + 44.9472365 + ], + [ + -124.0149011, + 44.9476535 + ], + [ + -124.0176712, + 44.9484699 + ], + [ + -124.0201639, + 44.9496543 + ], + [ + -124.0222834, + 44.9511613 + ], + [ + -124.0239483, + 44.9529329 + ], + [ + -124.0250945, + 44.954901 + ], + [ + -124.0256781, + 44.9569902 + ], + [ + -124.025677, + 44.958345 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16095_s_16212", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0328977, + 44.9634499 + ], + [ + -124.0329226, + 44.9635801 + ], + [ + -124.0329692, + 44.9638482 + ], + [ + -124.0329866, + 44.9639444 + ], + [ + -124.0330375, + 44.9642639 + ], + [ + -124.0330666, + 44.9644739 + ], + [ + -124.0330715, + 44.9645102 + ], + [ + -124.0330735, + 44.9645252 + ], + [ + -124.033136, + 44.9658513 + ], + [ + -124.0331301, + 44.9660043 + ], + [ + -124.033065, + 44.9667488 + ], + [ + -124.033047, + 44.9668808 + ], + [ + -124.0329362, + 44.9675057 + ], + [ + -124.0329022, + 44.9676607 + ], + [ + -124.0326524, + 44.9685531 + ], + [ + -124.0326394, + 44.9685911 + ], + [ + -124.0325973, + 44.9687113 + ], + [ + -124.0325463, + 44.9688533 + ], + [ + -124.0321393, + 44.9698033 + ], + [ + -124.0321244, + 44.9698333 + ], + [ + -124.0320215, + 44.9700329 + ], + [ + -124.0319365, + 44.970193 + ], + [ + -124.0314502, + 44.9710068 + ], + [ + -124.0313543, + 44.9711508 + ], + [ + -124.0305874, + 44.97216 + ], + [ + -124.0304594, + 44.972309 + ], + [ + -124.0304182, + 44.9723567 + ], + [ + -124.0303452, + 44.9724408 + ], + [ + -124.0295345, + 44.9732562 + ], + [ + -124.0294817, + 44.9733933 + ], + [ + -124.0294773, + 44.9734049 + ], + [ + -124.0294354, + 44.973513 + ], + [ + -124.0294112, + 44.9735829 + ], + [ + -124.0293772, + 44.9736769 + ], + [ + -124.029297, + 44.9738897 + ], + [ + -124.0291951, + 44.9741497 + ], + [ + -124.0291869, + 44.9741706 + ], + [ + -124.0290886, + 44.9744194 + ], + [ + -124.0289374, + 44.9748046 + ], + [ + -124.0289104, + 44.9748759 + ], + [ + -124.0288566, + 44.9750117 + ], + [ + -124.0288218, + 44.9751006 + ], + [ + -124.0286996, + 44.975412 + ], + [ + -124.0286884, + 44.9754414 + ], + [ + -124.0286419, + 44.9755614 + ], + [ + -124.028627, + 44.9756022 + ], + [ + -124.0285341, + 44.9758443 + ], + [ + -124.0284434, + 44.9760797 + ], + [ + -124.0284143, + 44.9761554 + ], + [ + -124.0283967, + 44.9762009 + ], + [ + -124.0282489, + 44.9765789 + ], + [ + -124.0282287, + 44.9766309 + ], + [ + -124.0282228, + 44.9766467 + ], + [ + -124.0281754, + 44.9767703 + ], + [ + -124.0281534, + 44.9768263 + ], + [ + -124.0280353, + 44.9771119 + ], + [ + -124.0277954, + 44.9776639 + ], + [ + -124.0276904, + 44.9778963 + ], + [ + -124.0276594, + 44.9779623 + ], + [ + -124.027522, + 44.9782423 + ], + [ + -124.027482, + 44.9783203 + ], + [ + -124.0274016, + 44.9784735 + ], + [ + -124.0272637, + 44.9787305 + ], + [ + -124.0272153, + 44.9788195 + ], + [ + -124.0270897, + 44.9790475 + ], + [ + -124.0270658, + 44.9790915 + ], + [ + -124.0268254, + 44.9795085 + ], + [ + -124.0265402, + 44.9799754 + ], + [ + -124.0264347, + 44.9801609 + ], + [ + -124.0262513, + 44.9804899 + ], + [ + -124.0261236, + 44.9807117 + ], + [ + -124.0258512, + 44.9811706 + ], + [ + -124.0258305, + 44.9812076 + ], + [ + -124.0258124, + 44.9812398 + ], + [ + -124.0255505, + 44.9817038 + ], + [ + -124.0254871, + 44.9818143 + ], + [ + -124.0254643, + 44.9818535 + ], + [ + -124.0253849, + 44.9820554 + ], + [ + -124.0253399, + 44.9821394 + ], + [ + -124.025312, + 44.9821911 + ], + [ + -124.025213, + 44.9823731 + ], + [ + -124.0247189, + 44.9831825 + ], + [ + -124.0247019, + 44.9832075 + ], + [ + -124.0246411, + 44.9832714 + ], + [ + -124.0245173, + 44.9834803 + ], + [ + -124.0233591, + 44.9850592 + ], + [ + -124.0224888, + 44.9858818 + ], + [ + -124.0225052, + 44.9858904 + ], + [ + -124.0224166, + 44.9859762 + ], + [ + -124.022273, + 44.9867794 + ], + [ + -124.0222528, + 44.9868613 + ], + [ + -124.022252, + 44.9868651 + ], + [ + -124.0221299, + 44.9873286 + ], + [ + -124.0220909, + 44.9874606 + ], + [ + -124.0217176, + 44.9884772 + ], + [ + -124.0216427, + 44.9886473 + ], + [ + -124.02122, + 44.989484 + ], + [ + -124.0211881, + 44.98954 + ], + [ + -124.0211415, + 44.9896205 + ], + [ + -124.0211036, + 44.9896855 + ], + [ + -124.0209825, + 44.9898843 + ], + [ + -124.0209778, + 44.9905802 + ], + [ + -124.0203783, + 44.9926671 + ], + [ + -124.0192165, + 44.9946309 + ], + [ + -124.017537, + 44.9963961 + ], + [ + -124.0154043, + 44.9978949 + ], + [ + -124.0129004, + 44.9990696 + ], + [ + -124.0101215, + 44.9998751 + ], + [ + -124.0071745, + 45.0002804 + ], + [ + -124.0041726, + 45.0002699 + ], + [ + -124.0012313, + 44.9998441 + ], + [ + -123.9984638, + 44.9990192 + ], + [ + -123.9959762, + 44.9978271 + ], + [ + -123.9938644, + 44.9963135 + ], + [ + -123.9922095, + 44.9945366 + ], + [ + -123.991075, + 44.9925648 + ], + [ + -123.9906988, + 44.9911858 + ], + [ + -123.9906476, + 44.9911924 + ], + [ + -123.9905687, + 44.9908824 + ], + [ + -123.9905535, + 44.99082 + ], + [ + -123.990495, + 44.9905895 + ], + [ + -123.9903437, + 44.9898464 + ], + [ + -123.9903227, + 44.9897104 + ], + [ + -123.9902916, + 44.9894869 + ], + [ + -123.9902776, + 44.9893749 + ], + [ + -123.9902495, + 44.9891144 + ], + [ + -123.9902366, + 44.9889714 + ], + [ + -123.9902058, + 44.9883845 + ], + [ + -123.9902038, + 44.9882475 + ], + [ + -123.9903173, + 44.9868123 + ], + [ + -123.9903453, + 44.9866503 + ], + [ + -123.990428, + 44.9862381 + ], + [ + -123.990459, + 44.9861021 + ], + [ + -123.990679, + 44.9853208 + ], + [ + -123.9907311, + 44.9851658 + ], + [ + -123.9912608, + 44.9839228 + ], + [ + -123.9913268, + 44.9837958 + ], + [ + -123.9916145, + 44.983283 + ], + [ + -123.9917055, + 44.983132 + ], + [ + -123.9917197, + 44.9831086 + ], + [ + -123.9918678, + 44.9828646 + ], + [ + -123.991878, + 44.9828478 + ], + [ + -123.9919481, + 44.9827328 + ], + [ + -123.9919517, + 44.982671 + ], + [ + -123.9919684, + 44.9823703 + ], + [ + -123.9919707, + 44.9823301 + ], + [ + -123.9919788, + 44.9821981 + ], + [ + -123.9920246, + 44.9817049 + ], + [ + -123.9920276, + 44.9816809 + ], + [ + -123.9920459, + 44.9815451 + ], + [ + -123.9920739, + 44.9813491 + ], + [ + -123.9922315, + 44.980547 + ], + [ + -123.9922375, + 44.980523 + ], + [ + -123.9923164, + 44.9802308 + ], + [ + -123.9923745, + 44.9800308 + ], + [ + -123.9924503, + 44.979784 + ], + [ + -123.9924984, + 44.979636 + ], + [ + -123.992539, + 44.9795142 + ], + [ + -123.992553, + 44.9794732 + ], + [ + -123.992896, + 44.9786222 + ], + [ + -123.9929641, + 44.9784762 + ], + [ + -123.9930288, + 44.9783403 + ], + [ + -123.9930468, + 44.9783033 + ], + [ + -123.9932566, + 44.9778985 + ], + [ + -123.9933336, + 44.9777585 + ], + [ + -123.9933459, + 44.9777363 + ], + [ + -123.9933769, + 44.9776803 + ], + [ + -123.9940023, + 44.9766974 + ], + [ + -123.9940413, + 44.9766434 + ], + [ + -123.9940904, + 44.976576 + ], + [ + -123.9941624, + 44.976478 + ], + [ + -123.9946511, + 44.9758627 + ], + [ + -123.9947992, + 44.9756897 + ], + [ + -123.9952532, + 44.9751904 + ], + [ + -123.9954172, + 44.9750204 + ], + [ + -123.9962846, + 44.9742063 + ], + [ + -123.9964336, + 44.9740794 + ], + [ + -123.9968688, + 44.9737244 + ], + [ + -123.9970788, + 44.9735605 + ], + [ + -123.9972305, + 44.9734466 + ], + [ + -123.9974173, + 44.9731124 + ], + [ + -123.9975744, + 44.9728422 + ], + [ + -123.9975957, + 44.9728068 + ], + [ + -123.9978488, + 44.9723809 + ], + [ + -123.9979835, + 44.9721395 + ], + [ + -123.9981054, + 44.9719196 + ], + [ + -123.9982385, + 44.9716873 + ], + [ + -123.9983126, + 44.9715624 + ], + [ + -123.9984324, + 44.9713655 + ], + [ + -123.9984463, + 44.9713432 + ], + [ + -123.9986248, + 44.9710512 + ], + [ + -123.9986655, + 44.9709774 + ], + [ + -123.9987102, + 44.9708745 + ], + [ + -123.9987435, + 44.9707891 + ], + [ + -123.9989213, + 44.9703334 + ], + [ + -123.9989984, + 44.9701334 + ], + [ + -123.999094, + 44.9698828 + ], + [ + -123.9991066, + 44.9698499 + ], + [ + -123.9991777, + 44.9696659 + ], + [ + -123.9991954, + 44.9696204 + ], + [ + -123.9993693, + 44.9691775 + ], + [ + -123.9994372, + 44.9690036 + ], + [ + -123.9994442, + 44.9689858 + ], + [ + -123.9996053, + 44.9685759 + ], + [ + -123.9996125, + 44.9685575 + ], + [ + -123.9997105, + 44.9683099 + ], + [ + -123.9997474, + 44.9682158 + ], + [ + -123.999758, + 44.9681854 + ], + [ + -123.9998591, + 44.9679102 + ], + [ + -123.9999579, + 44.967655 + ], + [ + -124.0001255, + 44.9672203 + ], + [ + -124.0002384, + 44.9669258 + ], + [ + -124.0002478, + 44.9669013 + ], + [ + -124.0005695, + 44.9660691 + ], + [ + -124.0006624, + 44.9658114 + ], + [ + -124.0007074, + 44.9656944 + ], + [ + -124.000979, + 44.9650647 + ], + [ + -124.001077, + 44.9648597 + ], + [ + -124.0012211, + 44.9645743 + ], + [ + -124.0011873, + 44.9644996 + ], + [ + -124.0008459, + 44.9623836 + ], + [ + -124.0010925, + 44.9602609 + ], + [ + -124.0019175, + 44.9582133 + ], + [ + -124.0032893, + 44.9563192 + ], + [ + -124.0051551, + 44.9546515 + ], + [ + -124.0074431, + 44.9532743 + ], + [ + -124.0100654, + 44.9522404 + ], + [ + -124.0129213, + 44.9515896 + ], + [ + -124.0159012, + 44.9513469 + ], + [ + -124.0188904, + 44.9515215 + ], + [ + -124.0217743, + 44.9521068 + ], + [ + -124.024442, + 44.9530803 + ], + [ + -124.0266939, + 44.9543498 + ], + [ + -124.026701, + 44.9543445 + ], + [ + -124.026752, + 44.9543785 + ], + [ + -124.0267882, + 44.954403 + ], + [ + -124.0267911, + 44.9544047 + ], + [ + -124.0268257, + 44.9544284 + ], + [ + -124.0269333, + 44.9545013 + ], + [ + -124.0272483, + 44.9547183 + ], + [ + -124.0275451, + 44.9549284 + ], + [ + -124.0277691, + 44.9550914 + ], + [ + -124.0278245, + 44.9551319 + ], + [ + -124.0278585, + 44.9551569 + ], + [ + -124.0288829, + 44.9559912 + ], + [ + -124.029132, + 44.9562162 + ], + [ + -124.0300456, + 44.9571359 + ], + [ + -124.0302036, + 44.9573139 + ], + [ + -124.0314113, + 44.9589758 + ], + [ + -124.0315213, + 44.9591658 + ], + [ + -124.0317887, + 44.9596617 + ], + [ + -124.0318488, + 44.9597817 + ], + [ + -124.0321918, + 44.9605585 + ], + [ + -124.0322398, + 44.9606835 + ], + [ + -124.0324774, + 44.9613953 + ], + [ + -124.0324984, + 44.9614693 + ], + [ + -124.0326293, + 44.9619971 + ], + [ + -124.0326503, + 44.9620961 + ], + [ + -124.0326599, + 44.9621416 + ], + [ + -124.0327009, + 44.9623406 + ], + [ + -124.0327642, + 44.9626857 + ], + [ + -124.0328083, + 44.9629606 + ], + [ + -124.0328151, + 44.9630026 + ], + [ + -124.032898, + 44.9634499 + ], + [ + -124.0328977, + 44.9634499 + ] + ], + [ + [ + -123.9905279, + 44.9905595 + ], + [ + -123.9905045, + 44.9904738 + ], + [ + -123.9905137, + 44.9905607 + ], + [ + -123.9905279, + 44.9905595 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16095_s_2456766", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0328977, + 44.9634499 + ], + [ + -124.0329226, + 44.9635801 + ], + [ + -124.0329692, + 44.9638482 + ], + [ + -124.0329866, + 44.9639444 + ], + [ + -124.0330375, + 44.9642639 + ], + [ + -124.0330666, + 44.9644739 + ], + [ + -124.0330715, + 44.9645102 + ], + [ + -124.0330735, + 44.9645252 + ], + [ + -124.033136, + 44.9658513 + ], + [ + -124.0331301, + 44.9660043 + ], + [ + -124.033065, + 44.9667488 + ], + [ + -124.033047, + 44.9668808 + ], + [ + -124.0329362, + 44.9675057 + ], + [ + -124.0329022, + 44.9676607 + ], + [ + -124.0326524, + 44.9685531 + ], + [ + -124.0326394, + 44.9685911 + ], + [ + -124.0325973, + 44.9687113 + ], + [ + -124.0325463, + 44.9688533 + ], + [ + -124.0321393, + 44.9698033 + ], + [ + -124.0321244, + 44.9698333 + ], + [ + -124.0320215, + 44.9700329 + ], + [ + -124.0319365, + 44.970193 + ], + [ + -124.0314502, + 44.9710068 + ], + [ + -124.0313543, + 44.9711508 + ], + [ + -124.0305874, + 44.97216 + ], + [ + -124.0304594, + 44.972309 + ], + [ + -124.0304182, + 44.9723567 + ], + [ + -124.0303452, + 44.9724408 + ], + [ + -124.0295345, + 44.9732562 + ], + [ + -124.0294817, + 44.9733933 + ], + [ + -124.0294773, + 44.9734049 + ], + [ + -124.0294354, + 44.973513 + ], + [ + -124.0294112, + 44.9735829 + ], + [ + -124.0293772, + 44.9736769 + ], + [ + -124.029297, + 44.9738897 + ], + [ + -124.0291951, + 44.9741497 + ], + [ + -124.0291869, + 44.9741706 + ], + [ + -124.0290886, + 44.9744194 + ], + [ + -124.0289374, + 44.9748046 + ], + [ + -124.0289104, + 44.9748759 + ], + [ + -124.0288566, + 44.9750117 + ], + [ + -124.0288218, + 44.9751006 + ], + [ + -124.0286996, + 44.975412 + ], + [ + -124.0286884, + 44.9754414 + ], + [ + -124.0286419, + 44.9755614 + ], + [ + -124.028627, + 44.9756022 + ], + [ + -124.0285341, + 44.9758443 + ], + [ + -124.0284434, + 44.9760797 + ], + [ + -124.0284143, + 44.9761554 + ], + [ + -124.0283967, + 44.9762009 + ], + [ + -124.0282489, + 44.9765789 + ], + [ + -124.0282287, + 44.9766309 + ], + [ + -124.0282228, + 44.9766467 + ], + [ + -124.0281754, + 44.9767703 + ], + [ + -124.0281534, + 44.9768263 + ], + [ + -124.0280353, + 44.9771119 + ], + [ + -124.0277954, + 44.9776639 + ], + [ + -124.0276904, + 44.9778963 + ], + [ + -124.0276594, + 44.9779623 + ], + [ + -124.027522, + 44.9782423 + ], + [ + -124.027482, + 44.9783203 + ], + [ + -124.0274016, + 44.9784735 + ], + [ + -124.0272637, + 44.9787305 + ], + [ + -124.0272153, + 44.9788195 + ], + [ + -124.0270897, + 44.9790475 + ], + [ + -124.0270658, + 44.9790915 + ], + [ + -124.0268254, + 44.9795085 + ], + [ + -124.0265402, + 44.9799754 + ], + [ + -124.0264347, + 44.9801609 + ], + [ + -124.0262513, + 44.9804899 + ], + [ + -124.0261236, + 44.9807117 + ], + [ + -124.0258512, + 44.9811706 + ], + [ + -124.0258305, + 44.9812076 + ], + [ + -124.0258124, + 44.9812398 + ], + [ + -124.0255505, + 44.9817038 + ], + [ + -124.0254871, + 44.9818143 + ], + [ + -124.0254643, + 44.9818535 + ], + [ + -124.0253849, + 44.9820554 + ], + [ + -124.0253399, + 44.9821394 + ], + [ + -124.025312, + 44.9821911 + ], + [ + -124.025213, + 44.9823731 + ], + [ + -124.0247189, + 44.9831825 + ], + [ + -124.0247019, + 44.9832075 + ], + [ + -124.0246411, + 44.9832714 + ], + [ + -124.0245173, + 44.9834803 + ], + [ + -124.0233591, + 44.9850592 + ], + [ + -124.0224888, + 44.9858818 + ], + [ + -124.0225052, + 44.9858904 + ], + [ + -124.0223523, + 44.9860384 + ], + [ + -124.0223335, + 44.9860286 + ], + [ + -124.021853, + 44.9864828 + ], + [ + -124.021609, + 44.9866778 + ], + [ + -124.021593, + 44.9866677 + ], + [ + -124.0205824, + 44.9875872 + ], + [ + -124.0203538, + 44.9877491 + ], + [ + -124.0201622, + 44.9878859 + ], + [ + -124.020147, + 44.9878967 + ], + [ + -124.0198861, + 44.9880824 + ], + [ + -124.0196935, + 44.9882197 + ], + [ + -124.0191322, + 44.9887557 + ], + [ + -124.0170729, + 44.9901115 + ], + [ + -124.0146991, + 44.9911774 + ], + [ + -124.0120908, + 44.9919175 + ], + [ + -124.0093358, + 44.992307 + ], + [ + -124.0065268, + 44.9923326 + ], + [ + -124.0063488, + 44.9923226 + ], + [ + -124.0057231, + 44.9922783 + ], + [ + -124.0055657, + 44.9922648 + ], + [ + -124.0053466, + 44.9922518 + ], + [ + -124.0052317, + 44.9922456 + ], + [ + -124.0022761, + 44.9918749 + ], + [ + -123.9994791, + 44.9911022 + ], + [ + -123.9969485, + 44.989957 + ], + [ + -123.9947814, + 44.9884835 + ], + [ + -123.9930612, + 44.9867382 + ], + [ + -123.9918539, + 44.9847884 + ], + [ + -123.9912059, + 44.9827088 + ], + [ + -123.9911421, + 44.9805794 + ], + [ + -123.9916647, + 44.9784822 + ], + [ + -123.9927538, + 44.9764976 + ], + [ + -123.9943673, + 44.9747019 + ], + [ + -123.9964432, + 44.9731641 + ], + [ + -123.997777, + 44.9725018 + ], + [ + -123.9978488, + 44.9723809 + ], + [ + -123.9979835, + 44.9721395 + ], + [ + -123.9981054, + 44.9719196 + ], + [ + -123.9982385, + 44.9716873 + ], + [ + -123.9983126, + 44.9715624 + ], + [ + -123.9984324, + 44.9713655 + ], + [ + -123.9984463, + 44.9713432 + ], + [ + -123.9986248, + 44.9710512 + ], + [ + -123.9986655, + 44.9709774 + ], + [ + -123.9987102, + 44.9708745 + ], + [ + -123.9987435, + 44.9707891 + ], + [ + -123.9989213, + 44.9703334 + ], + [ + -123.9989984, + 44.9701334 + ], + [ + -123.999094, + 44.9698828 + ], + [ + -123.9991066, + 44.9698499 + ], + [ + -123.9991777, + 44.9696659 + ], + [ + -123.9991954, + 44.9696204 + ], + [ + -123.9993693, + 44.9691775 + ], + [ + -123.9994372, + 44.9690036 + ], + [ + -123.9994442, + 44.9689858 + ], + [ + -123.9996053, + 44.9685759 + ], + [ + -123.9996125, + 44.9685575 + ], + [ + -123.9997105, + 44.9683099 + ], + [ + -123.9997474, + 44.9682158 + ], + [ + -123.999758, + 44.9681854 + ], + [ + -123.9998591, + 44.9679102 + ], + [ + -123.9999579, + 44.967655 + ], + [ + -124.0001255, + 44.9672203 + ], + [ + -124.0002384, + 44.9669258 + ], + [ + -124.0002478, + 44.9669013 + ], + [ + -124.0005695, + 44.9660691 + ], + [ + -124.0006624, + 44.9658114 + ], + [ + -124.0007074, + 44.9656944 + ], + [ + -124.000979, + 44.9650647 + ], + [ + -124.001077, + 44.9648597 + ], + [ + -124.0012511, + 44.9645149 + ], + [ + -124.0012687, + 44.9644817 + ], + [ + -124.0011237, + 44.9641113 + ], + [ + -124.0008993, + 44.9619874 + ], + [ + -124.0012628, + 44.9598733 + ], + [ + -124.0022002, + 44.9578502 + ], + [ + -124.0036755, + 44.9559957 + ], + [ + -124.0056318, + 44.9543812 + ], + [ + -124.007994, + 44.9530687 + ], + [ + -124.0106713, + 44.9521085 + ], + [ + -124.013561, + 44.9515377 + ], + [ + -124.0165519, + 44.951378 + ], + [ + -124.0195292, + 44.9516356 + ], + [ + -124.0223786, + 44.9523007 + ], + [ + -124.0249906, + 44.9533477 + ], + [ + -124.026909, + 44.9545191 + ], + [ + -124.0269333, + 44.9545013 + ], + [ + -124.0272483, + 44.9547183 + ], + [ + -124.0275451, + 44.9549284 + ], + [ + -124.0277691, + 44.9550914 + ], + [ + -124.0278245, + 44.9551319 + ], + [ + -124.0278585, + 44.9551569 + ], + [ + -124.0288829, + 44.9559912 + ], + [ + -124.029132, + 44.9562162 + ], + [ + -124.0300456, + 44.9571359 + ], + [ + -124.0302036, + 44.9573139 + ], + [ + -124.0314113, + 44.9589758 + ], + [ + -124.0315213, + 44.9591658 + ], + [ + -124.0317887, + 44.9596617 + ], + [ + -124.0318488, + 44.9597817 + ], + [ + -124.0321918, + 44.9605585 + ], + [ + -124.0322398, + 44.9606835 + ], + [ + -124.0324774, + 44.9613953 + ], + [ + -124.0324984, + 44.9614693 + ], + [ + -124.0326293, + 44.9619971 + ], + [ + -124.0326503, + 44.9620961 + ], + [ + -124.0326599, + 44.9621416 + ], + [ + -124.0327009, + 44.9623406 + ], + [ + -124.0327642, + 44.9626857 + ], + [ + -124.0328083, + 44.9629606 + ], + [ + -124.0328151, + 44.9630026 + ], + [ + -124.032898, + 44.9634499 + ], + [ + -124.0328977, + 44.9634499 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16097_s_16070", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0244464, + 44.9835088 + ], + [ + -124.0228895, + 44.9855313 + ], + [ + -124.0224595, + 44.9859714 + ], + [ + -124.0210075, + 44.9872414 + ], + [ + -124.0203533, + 44.9877328 + ], + [ + -124.0199109, + 44.9880517 + ], + [ + -124.0198666, + 44.9880824 + ], + [ + -124.0194546, + 44.988509 + ], + [ + -124.0172849, + 44.9900076 + ], + [ + -124.014742, + 44.9911739 + ], + [ + -124.0119252, + 44.9919622 + ], + [ + -124.0089449, + 44.9923417 + ], + [ + -124.0059176, + 44.9922975 + ], + [ + -124.005242, + 44.9922399 + ], + [ + -124.0023785, + 44.991795 + ], + [ + -123.999687, + 44.990971 + ], + [ + -123.9972663, + 44.9897981 + ], + [ + -123.995205, + 44.9883193 + ], + [ + -123.9935787, + 44.9865888 + ], + [ + -123.9924471, + 44.98467 + ], + [ + -123.9918855, + 44.9827498 + ], + [ + -123.9917469, + 44.9824198 + ], + [ + -123.9914673, + 44.9802992 + ], + [ + -123.9917759, + 44.9781807 + ], + [ + -123.9926609, + 44.9761456 + ], + [ + -123.9940882, + 44.9742722 + ], + [ + -123.9960028, + 44.9726323 + ], + [ + -123.9983313, + 44.9712891 + ], + [ + -123.9987913, + 44.9711165 + ], + [ + -123.9991341, + 44.9706627 + ], + [ + -124.0010406, + 44.9690181 + ], + [ + -124.0033623, + 44.9676691 + ], + [ + -124.00601, + 44.9666674 + ], + [ + -124.008882, + 44.9660517 + ], + [ + -124.011868, + 44.9658455 + ], + [ + -124.0148533, + 44.9660567 + ], + [ + -124.0177233, + 44.9666772 + ], + [ + -124.0203677, + 44.9676833 + ], + [ + -124.0226849, + 44.9690362 + ], + [ + -124.0245859, + 44.9706839 + ], + [ + -124.0259976, + 44.9725633 + ], + [ + -124.0268657, + 44.974602 + ], + [ + -124.0271569, + 44.9767218 + ], + [ + -124.0268598, + 44.9788411 + ], + [ + -124.0259858, + 44.9808786 + ], + [ + -124.0244464, + 44.9835088 + ] + ], + [ + [ + -124.0096058, + 44.9696887 + ], + [ + -124.0097158, + 44.9696968 + ], + [ + -124.0096095, + 44.9696741 + ], + [ + -124.0096058, + 44.9696887 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16183_s_16184", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -123.9941059, + 45.0124163 + ], + [ + -123.9940602, + 45.0138373 + ], + [ + -123.9939903, + 45.0142773 + ], + [ + -123.9934141, + 45.0162451 + ], + [ + -123.9932542, + 45.0166151 + ], + [ + -123.9914384, + 45.0193667 + ], + [ + -123.9912516, + 45.0195698 + ], + [ + -123.9912439, + 45.0196192 + ], + [ + -123.9912734, + 45.0196201 + ], + [ + -123.9912534, + 45.0199401 + ], + [ + -123.991095, + 45.0205734 + ], + [ + -123.9909568, + 45.0214589 + ], + [ + -123.9907846, + 45.0218142 + ], + [ + -123.9905518, + 45.0227449 + ], + [ + -123.9903819, + 45.0231249 + ], + [ + -123.9891623, + 45.0251278 + ], + [ + -123.9889423, + 45.0254078 + ], + [ + -123.987227, + 45.027161 + ], + [ + -123.986987, + 45.027361 + ], + [ + -123.9859114, + 45.0281697 + ], + [ + -123.9856314, + 45.0283597 + ], + [ + -123.9831757, + 45.0297159 + ], + [ + -123.9827256, + 45.0299159 + ], + [ + -123.9795825, + 45.0309814 + ], + [ + -123.9791325, + 45.0310914 + ], + [ + -123.9755507, + 45.0316383 + ], + [ + -123.9749405, + 45.0316783 + ], + [ + -123.97353, + 45.0317245 + ], + [ + -123.97332, + 45.0317245 + ], + [ + -123.9701094, + 45.0314832 + ], + [ + -123.9688592, + 45.0312932 + ], + [ + -123.9681159, + 45.0311664 + ], + [ + -123.9658908, + 45.0307448 + ], + [ + -123.9635437, + 45.0307255 + ], + [ + -123.9531433, + 45.0308432 + ], + [ + -123.9503929, + 45.0306981 + ], + [ + -123.9497127, + 45.030618 + ], + [ + -123.948125, + 45.0303692 + ], + [ + -123.9475149, + 45.0302492 + ], + [ + -123.9468697, + 45.0301114 + ], + [ + -123.9447894, + 45.0296313 + ], + [ + -123.9420382, + 45.0287768 + ], + [ + -123.9395752, + 45.0275581 + ], + [ + -123.9374948, + 45.0260219 + ], + [ + -123.9358771, + 45.0242275 + ], + [ + -123.9347842, + 45.0222437 + ], + [ + -123.9342581, + 45.0201468 + ], + [ + -123.9343189, + 45.0180174 + ], + [ + -123.9349642, + 45.0159374 + ], + [ + -123.9361692, + 45.0139866 + ], + [ + -123.9378874, + 45.0122399 + ], + [ + -123.940053, + 45.0107646 + ], + [ + -123.9425826, + 45.0096173 + ], + [ + -123.945379, + 45.008842 + ], + [ + -123.9483348, + 45.0084686 + ], + [ + -123.9513366, + 45.0085113 + ], + [ + -123.954269, + 45.0089685 + ], + [ + -123.9548066, + 45.0090926 + ], + [ + -123.962612, + 45.0090043 + ], + [ + -123.9626305, + 45.0085334 + ], + [ + -123.9626705, + 45.0082934 + ], + [ + -123.9631467, + 45.0066033 + ], + [ + -123.9633268, + 45.0061533 + ], + [ + -123.9639356, + 45.0049199 + ], + [ + -123.9654662, + 45.0023301 + ], + [ + -123.9660187, + 45.0014962 + ], + [ + -123.9661587, + 45.0013062 + ], + [ + -123.9679333, + 44.9994122 + ], + [ + -123.9681433, + 44.9992322 + ], + [ + -123.9687461, + 44.9987459 + ], + [ + -123.9692461, + 44.9983659 + ], + [ + -123.9716187, + 44.9968992 + ], + [ + -123.9717987, + 44.9968092 + ], + [ + -123.9734922, + 44.9960742 + ], + [ + -123.9736511, + 44.9960149 + ], + [ + -123.9747475, + 44.9949725 + ], + [ + -123.9767699, + 44.9933987 + ], + [ + -123.979186, + 44.992135 + ], + [ + -123.981903, + 44.9912301 + ], + [ + -123.9848166, + 44.9907185 + ], + [ + -123.9878148, + 44.9906201 + ], + [ + -123.9907825, + 44.9909386 + ], + [ + -123.9936057, + 44.9916617 + ], + [ + -123.9961759, + 44.9927617 + ], + [ + -123.9983944, + 44.9941962 + ], + [ + -124.000176, + 44.9959103 + ], + [ + -124.0014521, + 44.9978381 + ], + [ + -124.0021737, + 44.9999055 + ], + [ + -124.002313, + 45.002033 + ], + [ + -124.0018646, + 45.0041389 + ], + [ + -124.0008457, + 45.0061423 + ], + [ + -123.9992953, + 45.0079661 + ], + [ + -123.9970555, + 45.0100964 + ], + [ + -123.9966709, + 45.010447 + ], + [ + -123.9955609, + 45.0114171 + ], + [ + -123.9941059, + 45.0124163 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16184_s_16079", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.007723, + 44.984253 + ], + [ + -124.0077419, + 44.9842524 + ], + [ + -124.0079807, + 44.9842592 + ], + [ + -124.0083585, + 44.9842886 + ], + [ + -124.0086682, + 44.9842845 + ], + [ + -124.0094432, + 44.9842882 + ], + [ + -124.0097185, + 44.9842945 + ], + [ + -124.0126269, + 44.9845603 + ], + [ + -124.0128341, + 44.9845938 + ], + [ + -124.0165051, + 44.9855506 + ], + [ + -124.0167354, + 44.9856357 + ], + [ + -124.0191785, + 44.9867599 + ], + [ + -124.0194686, + 44.9869232 + ], + [ + -124.0223338, + 44.9890422 + ], + [ + -124.0227316, + 44.98943 + ], + [ + -124.0241955, + 44.9911813 + ], + [ + -124.0251732, + 44.9930956 + ], + [ + -124.0252292, + 44.9932488 + ], + [ + -124.0257193, + 44.996082 + ], + [ + -124.0257164, + 44.996296 + ], + [ + -124.0255206, + 44.9979262 + ], + [ + -124.025438, + 44.9982887 + ], + [ + -124.0246705, + 45.0003477 + ], + [ + -124.0233515, + 45.0022609 + ], + [ + -124.0215317, + 45.0039548 + ], + [ + -124.0192809, + 45.0053642 + ], + [ + -124.0166857, + 45.0064349 + ], + [ + -124.0138458, + 45.0071259 + ], + [ + -124.0108705, + 45.0074104 + ], + [ + -124.007874, + 45.0072776 + ], + [ + -124.0072157, + 45.007154 + ], + [ + -124.0062778, + 45.0074102 + ], + [ + -124.0053476, + 45.0076002 + ], + [ + -124.0031613, + 45.0079266 + ], + [ + -124.0024311, + 45.0079966 + ], + [ + -124.0012879, + 45.0080657 + ], + [ + -123.9992496, + 45.0086228 + ], + [ + -123.997274, + 45.0094803 + ], + [ + -123.9966271, + 45.0099309 + ], + [ + -123.9941156, + 45.011098 + ], + [ + -123.9913313, + 45.0118951 + ], + [ + -123.9883812, + 45.0122915 + ], + [ + -123.9853788, + 45.0122719 + ], + [ + -123.9824395, + 45.0118372 + ], + [ + -123.9796763, + 45.011004 + ], + [ + -123.9771955, + 45.0098043 + ], + [ + -123.9750923, + 45.0082843 + ], + [ + -123.9734477, + 45.0065025 + ], + [ + -123.9723248, + 45.0045272 + ], + [ + -123.9717668, + 45.0024345 + ], + [ + -123.9717949, + 45.0003048 + ], + [ + -123.9724081, + 44.9982199 + ], + [ + -123.9735828, + 44.9962599 + ], + [ + -123.9752736, + 44.9945002 + ], + [ + -123.9756036, + 44.9942202 + ], + [ + -123.9769212, + 44.9932348 + ], + [ + -123.9774212, + 44.9929048 + ], + [ + -123.9791567, + 44.9919162 + ], + [ + -123.9796267, + 44.9916862 + ], + [ + -123.9803307, + 44.9913616 + ], + [ + -123.9842703, + 44.9896519 + ], + [ + -123.9856293, + 44.989127 + ], + [ + -123.9860693, + 44.9889771 + ], + [ + -123.9871969, + 44.9886315 + ], + [ + -123.9918062, + 44.9873717 + ], + [ + -123.9941129, + 44.986885 + ], + [ + -123.9954327, + 44.986685 + ], + [ + -123.996172, + 44.9865962 + ], + [ + -123.9976039, + 44.9857969 + ], + [ + -124.0004006, + 44.9848084 + ], + [ + -124.0034218, + 44.9842434 + ], + [ + -124.0065417, + 44.9841253 + ], + [ + -124.007723, + 44.984253 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16185_s_16086", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0364105, + 44.9432372 + ], + [ + -124.0363976, + 44.9433653 + ], + [ + -124.0361793, + 44.9445728 + ], + [ + -124.0360804, + 44.9449508 + ], + [ + -124.0352462, + 44.9469966 + ], + [ + -124.0338658, + 44.9488874 + ], + [ + -124.0319925, + 44.9505507 + ], + [ + -124.029698, + 44.9519224 + ], + [ + -124.0270707, + 44.9529499 + ], + [ + -124.0242116, + 44.9535935 + ], + [ + -124.0212304, + 44.9538287 + ], + [ + -124.018242, + 44.9536463 + ], + [ + -124.0153611, + 44.9530534 + ], + [ + -124.0126986, + 44.9520727 + ], + [ + -124.0103568, + 44.9507419 + ], + [ + -124.0084257, + 44.9491123 + ], + [ + -124.0069795, + 44.9472464 + ], + [ + -124.0060738, + 44.945216 + ], + [ + -124.0057432, + 44.9430992 + ], + [ + -124.0058999, + 44.9418076 + ], + [ + -124.0058808, + 44.9418066 + ], + [ + -124.0059026, + 44.9415924 + ], + [ + -124.0059102, + 44.9414899 + ], + [ + -124.0059272, + 44.9406507 + ], + [ + -124.0061837, + 44.9388201 + ], + [ + -124.0064199, + 44.9379181 + ], + [ + -124.0067644, + 44.9370996 + ], + [ + -124.0059219, + 44.9359339 + ], + [ + -124.0050887, + 44.9337854 + ], + [ + -124.0048902, + 44.9315613 + ], + [ + -124.0049772, + 44.9311295 + ], + [ + -124.0049659, + 44.9308302 + ], + [ + -124.0054716, + 44.9287308 + ], + [ + -124.0065441, + 44.9267419 + ], + [ + -124.008142, + 44.9249398 + ], + [ + -124.0102041, + 44.9233938 + ], + [ + -124.0126509, + 44.9221633 + ], + [ + -124.0153886, + 44.9212954 + ], + [ + -124.0183119, + 44.9208237 + ], + [ + -124.0213086, + 44.9207661 + ], + [ + -124.0242635, + 44.9211248 + ], + [ + -124.0270632, + 44.9218862 + ], + [ + -124.0296001, + 44.923021 + ], + [ + -124.0317768, + 44.9244855 + ], + [ + -124.0335096, + 44.9262235 + ], + [ + -124.0337332, + 44.9265023 + ], + [ + -124.0344643, + 44.9276682 + ], + [ + -124.0358712, + 44.9292024 + ], + [ + -124.0373651, + 44.9312957 + ], + [ + -124.0377142, + 44.9319527 + ], + [ + -124.0384389, + 44.9337912 + ], + [ + -124.038593, + 44.9343761 + ], + [ + -124.0388441, + 44.9367691 + ], + [ + -124.0388122, + 44.9373921 + ], + [ + -124.0381353, + 44.9402173 + ], + [ + -124.0377985, + 44.9409884 + ], + [ + -124.0365657, + 44.9430384 + ], + [ + -124.0364105, + 44.9432372 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16185_s_16087", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0365139, + 44.9431339 + ], + [ + -124.0364877, + 44.943958 + ], + [ + -124.0356416, + 44.9463285 + ], + [ + -124.0353917, + 44.9467986 + ], + [ + -124.0340624, + 44.9487077 + ], + [ + -124.032234, + 44.9503961 + ], + [ + -124.0299768, + 44.9517986 + ], + [ + -124.0273776, + 44.9528614 + ], + [ + -124.0245362, + 44.9535437 + ], + [ + -124.021562, + 44.9538192 + ], + [ + -124.0185691, + 44.9536772 + ], + [ + -124.0156729, + 44.9531234 + ], + [ + -124.0129845, + 44.9521789 + ], + [ + -124.0106074, + 44.9508801 + ], + [ + -124.0086329, + 44.9492769 + ], + [ + -124.0071369, + 44.9474309 + ], + [ + -124.0061768, + 44.9454132 + ], + [ + -124.0057896, + 44.9433012 + ], + [ + -124.0059463, + 44.9416387 + ], + [ + -124.0059417, + 44.9415183 + ], + [ + -124.0059477, + 44.9414653 + ], + [ + -124.0059431, + 44.9410338 + ], + [ + -124.0060141, + 44.9399017 + ], + [ + -124.0060743, + 44.9394617 + ], + [ + -124.0064036, + 44.93804 + ], + [ + -124.0065502, + 44.9375944 + ], + [ + -124.005851, + 44.9371631 + ], + [ + -124.0037908, + 44.9356156 + ], + [ + -124.0021953, + 44.9338123 + ], + [ + -124.0011258, + 44.9318225 + ], + [ + -124.0006234, + 44.9297228 + ], + [ + -124.0007074, + 44.9275938 + ], + [ + -124.0013743, + 44.9255173 + ], + [ + -124.0025987, + 44.9235732 + ], + [ + -124.0043332, + 44.9218361 + ], + [ + -124.0065114, + 44.9203727 + ], + [ + -124.0090494, + 44.9192393 + ], + [ + -124.0118498, + 44.9184795 + ], + [ + -124.014805, + 44.9181223 + ], + [ + -124.0178014, + 44.9181815 + ], + [ + -124.0207241, + 44.9186548 + ], + [ + -124.0234607, + 44.9195242 + ], + [ + -124.0259061, + 44.920756 + ], + [ + -124.0266454, + 44.921212 + ], + [ + -124.0271189, + 44.9214718 + ], + [ + -124.0284786, + 44.9224145 + ], + [ + -124.0285052, + 44.9223942 + ], + [ + -124.0296251, + 44.9231341 + ], + [ + -124.0313116, + 44.9244467 + ], + [ + -124.0319316, + 44.9250166 + ], + [ + -124.0325041, + 44.9255791 + ], + [ + -124.0352045, + 44.9284188 + ], + [ + -124.0353841, + 44.9286121 + ], + [ + -124.0359742, + 44.929262 + ], + [ + -124.0373471, + 44.9311612 + ], + [ + -124.0376973, + 44.9317911 + ], + [ + -124.0385829, + 44.9341053 + ], + [ + -124.0387631, + 44.9349253 + ], + [ + -124.0388372, + 44.9378956 + ], + [ + -124.0387274, + 44.9385456 + ], + [ + -124.0382647, + 44.9401935 + ], + [ + -124.0374497, + 44.9417709 + ], + [ + -124.0368699, + 44.942671 + ], + [ + -124.0365139, + 44.9431339 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16187_s_16211", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0683812, + 44.8388206 + ], + [ + -124.061987, + 44.8477344 + ], + [ + -124.0618281, + 44.8480739 + ], + [ + -124.0613506, + 44.8487631 + ], + [ + -124.0605361, + 44.8501642 + ], + [ + -124.0584166, + 44.8540452 + ], + [ + -124.057064, + 44.8559453 + ], + [ + -124.055216, + 44.8576212 + ], + [ + -124.0529438, + 44.8590085 + ], + [ + -124.0503346, + 44.8600537 + ], + [ + -124.0474888, + 44.8607167 + ], + [ + -124.0445158, + 44.8609721 + ], + [ + -124.0415298, + 44.8608099 + ], + [ + -124.0386458, + 44.8602365 + ], + [ + -124.0359745, + 44.8592739 + ], + [ + -124.0336187, + 44.857959 + ], + [ + -124.031669, + 44.8563425 + ], + [ + -124.0302002, + 44.8544865 + ], + [ + -124.0292687, + 44.8524623 + ], + [ + -124.0289104, + 44.8503478 + ], + [ + -124.0291388, + 44.8482241 + ], + [ + -124.0299453, + 44.846173 + ], + [ + -124.0321261, + 44.8421833 + ], + [ + -124.0322488, + 44.8419657 + ], + [ + -124.0333192, + 44.8401258 + ], + [ + -124.033734, + 44.8394744 + ], + [ + -124.0344008, + 44.8385126 + ], + [ + -124.0345802, + 44.8381384 + ], + [ + -124.0437525, + 44.8253595 + ], + [ + -124.0444941, + 44.8244397 + ], + [ + -124.0447642, + 44.8241397 + ], + [ + -124.0458889, + 44.8230469 + ], + [ + -124.0464389, + 44.8225769 + ], + [ + -124.0484874, + 44.8211985 + ], + [ + -124.0482903, + 44.8205859 + ], + [ + -124.0479115, + 44.8184732 + ], + [ + -124.0481192, + 44.8163484 + ], + [ + -124.0489051, + 44.8142933 + ], + [ + -124.0502392, + 44.8123869 + ], + [ + -124.05207, + 44.8107023 + ], + [ + -124.0543272, + 44.8093043 + ], + [ + -124.0569242, + 44.8082465 + ], + [ + -124.059761, + 44.8075697 + ], + [ + -124.0627287, + 44.8072998 + ], + [ + -124.0657134, + 44.8074472 + ], + [ + -124.0686004, + 44.8080061 + ], + [ + -124.0712788, + 44.8089553 + ], + [ + -124.0736457, + 44.8102581 + ], + [ + -124.0756103, + 44.8118645 + ], + [ + -124.0770969, + 44.8137129 + ], + [ + -124.0780484, + 44.8157322 + ], + [ + -124.0806103, + 44.8236818 + ], + [ + -124.0809131, + 44.8249745 + ], + [ + -124.0810032, + 44.8255845 + ], + [ + -124.0808297, + 44.828707 + ], + [ + -124.0806599, + 44.829357 + ], + [ + -124.0793023, + 44.8322341 + ], + [ + -124.0791123, + 44.8325041 + ], + [ + -124.0777775, + 44.8340599 + ], + [ + -124.0774275, + 44.8343999 + ], + [ + -124.0753108, + 44.8360641 + ], + [ + -124.0749508, + 44.8362941 + ], + [ + -124.0722321, + 44.8376808 + ], + [ + -124.0719821, + 44.8377808 + ], + [ + -124.0687059, + 44.8387544 + ], + [ + -124.0683812, + 44.8388206 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16188_s_16187", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0514155, + 44.8667412 + ], + [ + -124.0490965, + 44.8750484 + ], + [ + -124.0491452, + 44.876153 + ], + [ + -124.0491253, + 44.876363 + ], + [ + -124.0485527, + 44.8786636 + ], + [ + -124.0483728, + 44.8791036 + ], + [ + -124.0481794, + 44.8794885 + ], + [ + -124.0478688, + 44.8809403 + ], + [ + -124.046849, + 44.8829429 + ], + [ + -124.0452991, + 44.8847656 + ], + [ + -124.0432788, + 44.8863383 + ], + [ + -124.0408656, + 44.8876005 + ], + [ + -124.0381523, + 44.8885037 + ], + [ + -124.0352432, + 44.8890132 + ], + [ + -124.0322502, + 44.8891094 + ], + [ + -124.0292883, + 44.8887886 + ], + [ + -124.0264714, + 44.8880631 + ], + [ + -124.0239078, + 44.8869608 + ], + [ + -124.0216961, + 44.8855241 + ], + [ + -124.0199213, + 44.8838082 + ], + [ + -124.0186515, + 44.8818791 + ], + [ + -124.0179356, + 44.879811 + ], + [ + -124.0178009, + 44.8776833 + ], + [ + -124.0178511, + 44.8770133 + ], + [ + -124.01803, + 44.8758364 + ], + [ + -124.0181425, + 44.8753476 + ], + [ + -124.0181404, + 44.8753302 + ], + [ + -124.0184336, + 44.8732815 + ], + [ + -124.0216665, + 44.8617219 + ], + [ + -124.022124, + 44.8604766 + ], + [ + -124.0223941, + 44.8598867 + ], + [ + -124.0227684, + 44.8591585 + ], + [ + -124.0243268, + 44.8564325 + ], + [ + -124.0299483, + 44.8461675 + ], + [ + -124.0313031, + 44.8442682 + ], + [ + -124.0331526, + 44.8425934 + ], + [ + -124.0354257, + 44.8412074 + ], + [ + -124.0380351, + 44.8401636 + ], + [ + -124.0408805, + 44.8395019 + ], + [ + -124.0438527, + 44.8392478 + ], + [ + -124.0468374, + 44.839411 + ], + [ + -124.04972, + 44.8399854 + ], + [ + -124.0523899, + 44.8409487 + ], + [ + -124.0547444, + 44.8422641 + ], + [ + -124.0566931, + 44.843881 + ], + [ + -124.058161, + 44.8457372 + ], + [ + -124.0590918, + 44.8477615 + ], + [ + -124.0594496, + 44.8498761 + ], + [ + -124.0592207, + 44.8519997 + ], + [ + -124.0584136, + 44.8540507 + ], + [ + -124.0527558, + 44.8643914 + ], + [ + -124.052673, + 44.8645396 + ], + [ + -124.0514155, + 44.8667412 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16189_s_16188", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0375872, + 44.895328 + ], + [ + -124.037189, + 44.8956871 + ], + [ + -124.0357191, + 44.8969072 + ], + [ + -124.0335564, + 44.8983814 + ], + [ + -124.0310304, + 44.8995273 + ], + [ + -124.0282384, + 44.9003009 + ], + [ + -124.0252876, + 44.9006724 + ], + [ + -124.0222916, + 44.9006275 + ], + [ + -124.0193655, + 44.900168 + ], + [ + -124.0166217, + 44.8993115 + ], + [ + -124.014166, + 44.898091 + ], + [ + -124.0120925, + 44.8965534 + ], + [ + -124.010481, + 44.8947578 + ], + [ + -124.0093934, + 44.8927732 + ], + [ + -124.0088714, + 44.8906759 + ], + [ + -124.008935, + 44.8885466 + ], + [ + -124.0095818, + 44.8864669 + ], + [ + -124.0107869, + 44.884517 + ], + [ + -124.0125037, + 44.8827716 + ], + [ + -124.0135695, + 44.8818872 + ], + [ + -124.0145871, + 44.880889 + ], + [ + -124.0163049, + 44.8795129 + ], + [ + -124.0171848, + 44.8785166 + ], + [ + -124.0177904, + 44.877829 + ], + [ + -124.017799, + 44.8777085 + ], + [ + -124.0182439, + 44.8756022 + ], + [ + -124.019258, + 44.8735982 + ], + [ + -124.0208024, + 44.8717733 + ], + [ + -124.0228177, + 44.8701976 + ], + [ + -124.0252265, + 44.8689318 + ], + [ + -124.0279361, + 44.8680244 + ], + [ + -124.0308425, + 44.8675103 + ], + [ + -124.0338342, + 44.8674093 + ], + [ + -124.036796, + 44.8677251 + ], + [ + -124.0396144, + 44.8684457 + ], + [ + -124.042181, + 44.8695435 + ], + [ + -124.0443973, + 44.8709761 + ], + [ + -124.046178, + 44.8726887 + ], + [ + -124.0474548, + 44.8746153 + ], + [ + -124.0481785, + 44.8766821 + ], + [ + -124.0483212, + 44.8788095 + ], + [ + -124.0481738, + 44.8808835 + ], + [ + -124.0478664, + 44.8825701 + ], + [ + -124.0476396, + 44.8833372 + ], + [ + -124.0473326, + 44.8841987 + ], + [ + -124.0472016, + 44.8845117 + ], + [ + -124.0462672, + 44.8862092 + ], + [ + -124.0459573, + 44.8866572 + ], + [ + -124.0452971, + 44.8875123 + ], + [ + -124.0448552, + 44.8880284 + ], + [ + -124.0445958, + 44.8883206 + ], + [ + -124.0443231, + 44.8886175 + ], + [ + -124.0440929, + 44.8888987 + ], + [ + -124.0438385, + 44.8891982 + ], + [ + -124.0430867, + 44.8900523 + ], + [ + -124.0430768, + 44.8900635 + ], + [ + -124.0406772, + 44.8927818 + ], + [ + -124.0395762, + 44.8938728 + ], + [ + -124.0393972, + 44.8940288 + ], + [ + -124.0392296, + 44.8941723 + ], + [ + -124.0391286, + 44.8942573 + ], + [ + -124.0375872, + 44.895328 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16190_s_16191", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0711381, + 44.7417964 + ], + [ + -124.0711506, + 44.7421752 + ], + [ + -124.0711544, + 44.7423516 + ], + [ + -124.0711647, + 44.7433516 + ], + [ + -124.071136, + 44.7438815 + ], + [ + -124.0711552, + 44.7443385 + ], + [ + -124.0711457, + 44.7462985 + ], + [ + -124.0710906, + 44.7471847 + ], + [ + -124.0710307, + 44.7476847 + ], + [ + -124.0704218, + 44.7499327 + ], + [ + -124.0703619, + 44.7500727 + ], + [ + -124.0692133, + 44.752039 + ], + [ + -124.0675484, + 44.7538079 + ], + [ + -124.065431, + 44.7553113 + ], + [ + -124.0629426, + 44.7564914 + ], + [ + -124.0601788, + 44.7573029 + ], + [ + -124.0572459, + 44.7577145 + ], + [ + -124.0542566, + 44.7577105 + ], + [ + -124.0513259, + 44.757291 + ], + [ + -124.0485664, + 44.756472 + ], + [ + -124.0460843, + 44.7552852 + ], + [ + -124.043975, + 44.7537761 + ], + [ + -124.0423194, + 44.7520027 + ], + [ + -124.0411813, + 44.7500333 + ], + [ + -124.0406043, + 44.7479434 + ], + [ + -124.0406105, + 44.7458136 + ], + [ + -124.0406573, + 44.7456477 + ], + [ + -124.0406628, + 44.744623 + ], + [ + -124.0406551, + 44.7445359 + ], + [ + -124.0406735, + 44.7433284 + ], + [ + -124.0406664, + 44.7425946 + ], + [ + -124.0406639, + 44.7425184 + ], + [ + -124.0405964, + 44.7421709 + ], + [ + -124.0406811, + 44.7403234 + ], + [ + -124.0409842, + 44.7384992 + ], + [ + -124.041289, + 44.7351565 + ], + [ + -124.0413201, + 44.7348725 + ], + [ + -124.041761, + 44.7314325 + ], + [ + -124.041788, + 44.7312406 + ], + [ + -124.0419383, + 44.7302606 + ], + [ + -124.0420907, + 44.72951 + ], + [ + -124.0423663, + 44.7284221 + ], + [ + -124.0423898, + 44.7282109 + ], + [ + -124.0424585, + 44.7268114 + ], + [ + -124.0425596, + 44.7258857 + ], + [ + -124.0427599, + 44.7247057 + ], + [ + -124.0434078, + 44.7226265 + ], + [ + -124.0446121, + 44.7206773 + ], + [ + -124.0463266, + 44.7189331 + ], + [ + -124.0484853, + 44.7174608 + ], + [ + -124.0510052, + 44.7163171 + ], + [ + -124.0537896, + 44.7155458 + ], + [ + -124.0567315, + 44.7151765 + ], + [ + -124.0597179, + 44.7152235 + ], + [ + -124.062634, + 44.715685 + ], + [ + -124.065368, + 44.7165431 + ], + [ + -124.0678147, + 44.717765 + ], + [ + -124.0698802, + 44.7193038 + ], + [ + -124.071485, + 44.7211002 + ], + [ + -124.0725676, + 44.7230854 + ], + [ + -124.0730862, + 44.7251829 + ], + [ + -124.0730208, + 44.7273123 + ], + [ + -124.0728992, + 44.728031 + ], + [ + -124.0728421, + 44.7292066 + ], + [ + -124.0728039, + 44.7296869 + ], + [ + -124.0726941, + 44.7306769 + ], + [ + -124.0724998, + 44.731748 + ], + [ + -124.0721847, + 44.7329946 + ], + [ + -124.0721072, + 44.7335015 + ], + [ + -124.0716985, + 44.7367036 + ], + [ + -124.0713823, + 44.7401915 + ], + [ + -124.0713089, + 44.7407646 + ], + [ + -124.0711381, + 44.7417964 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16191_s_16025", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0451291, + 44.7063734 + ], + [ + -124.0451849, + 44.7059188 + ], + [ + -124.0455656, + 44.7034388 + ], + [ + -124.0456239, + 44.7031061 + ], + [ + -124.0469868, + 44.6962019 + ], + [ + -124.047421, + 44.6936779 + ], + [ + -124.0474713, + 44.6934127 + ], + [ + -124.04798, + 44.6909569 + ], + [ + -124.0483116, + 44.688962 + ], + [ + -124.0484226, + 44.6878292 + ], + [ + -124.048435, + 44.6863563 + ], + [ + -124.0481127, + 44.684273 + ], + [ + -124.0480776, + 44.6821432 + ], + [ + -124.0486255, + 44.6800495 + ], + [ + -124.0497354, + 44.6780723 + ], + [ + -124.0513645, + 44.6762875 + ], + [ + -124.0534502, + 44.6747637 + ], + [ + -124.0559123, + 44.6735595 + ], + [ + -124.0586563, + 44.6727212 + ], + [ + -124.0615767, + 44.6722808 + ], + [ + -124.0645614, + 44.6722554 + ], + [ + -124.0674957, + 44.6726459 + ], + [ + -124.070267, + 44.6734373 + ], + [ + -124.0727687, + 44.6745992 + ], + [ + -124.0749047, + 44.6760869 + ], + [ + -124.0765931, + 44.6778435 + ], + [ + -124.0777688, + 44.6798012 + ], + [ + -124.0783867, + 44.681885 + ], + [ + -124.0788074, + 44.6845949 + ], + [ + -124.0788997, + 44.6858523 + ], + [ + -124.0788803, + 44.6883023 + ], + [ + -124.0788439, + 44.6889944 + ], + [ + -124.0786744, + 44.6907344 + ], + [ + -124.0786057, + 44.6912564 + ], + [ + -124.0782063, + 44.6936665 + ], + [ + -124.0781489, + 44.6939752 + ], + [ + -124.0776369, + 44.6964529 + ], + [ + -124.0772103, + 44.6989402 + ], + [ + -124.0771751, + 44.6991317 + ], + [ + -124.0758295, + 44.7059658 + ], + [ + -124.0755117, + 44.7080439 + ], + [ + -124.0754236, + 44.7090077 + ], + [ + -124.0750729, + 44.7107216 + ], + [ + -124.074903, + 44.7112517 + ], + [ + -124.0744768, + 44.7123246 + ], + [ + -124.0738969, + 44.7135422 + ], + [ + -124.0736385, + 44.7141968 + ], + [ + -124.0734965, + 44.7149002 + ], + [ + -124.0734925, + 44.714951 + ], + [ + -124.0735151, + 44.7163315 + ], + [ + -124.073681, + 44.7199789 + ], + [ + -124.0736888, + 44.7203783 + ], + [ + -124.0736793, + 44.7219483 + ], + [ + -124.0736413, + 44.7226688 + ], + [ + -124.073372, + 44.7253788 + ], + [ + -124.0732579, + 44.7261426 + ], + [ + -124.0729783, + 44.7275426 + ], + [ + -124.0722692, + 44.7296117 + ], + [ + -124.0710074, + 44.7315423 + ], + [ + -124.0692414, + 44.7332604 + ], + [ + -124.067039, + 44.7346998 + ], + [ + -124.0644848, + 44.7358052 + ], + [ + -124.0616771, + 44.7365342 + ], + [ + -124.0587237, + 44.7368586 + ], + [ + -124.0557383, + 44.7367661 + ], + [ + -124.0528357, + 44.7362601 + ], + [ + -124.0501273, + 44.7353602 + ], + [ + -124.0477175, + 44.7341009 + ], + [ + -124.0456987, + 44.7325306 + ], + [ + -124.0441486, + 44.7307098 + ], + [ + -124.0431266, + 44.7287083 + ], + [ + -124.0426721, + 44.7266032 + ], + [ + -124.0428025, + 44.7244754 + ], + [ + -124.0430066, + 44.7234558 + ], + [ + -124.0432031, + 44.721489 + ], + [ + -124.0432098, + 44.7204794 + ], + [ + -124.0430498, + 44.716919 + ], + [ + -124.0430429, + 44.7166939 + ], + [ + -124.0430134, + 44.7148339 + ], + [ + -124.0430365, + 44.7141006 + ], + [ + -124.0431067, + 44.7132106 + ], + [ + -124.0432389, + 44.712269 + ], + [ + -124.0436194, + 44.7103891 + ], + [ + -124.0440348, + 44.7089929 + ], + [ + -124.0446752, + 44.707373 + ], + [ + -124.0449146, + 44.7068234 + ], + [ + -124.0451291, + 44.7063734 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16192_s_16190", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.08657, + 44.7764457 + ], + [ + -124.0874332, + 44.7780544 + ], + [ + -124.0876033, + 44.7784843 + ], + [ + -124.0881739, + 44.7813021 + ], + [ + -124.0881841, + 44.7819121 + ], + [ + -124.0879495, + 44.7839435 + ], + [ + -124.0878895, + 44.7841835 + ], + [ + -124.0875554, + 44.7852227 + ], + [ + -124.0868958, + 44.7868927 + ], + [ + -124.0868548, + 44.7869947 + ], + [ + -124.0862851, + 44.7883848 + ], + [ + -124.0846427, + 44.7910236 + ], + [ + -124.0841428, + 44.7916037 + ], + [ + -124.0819104, + 44.7936154 + ], + [ + -124.0816004, + 44.7938354 + ], + [ + -124.0805556, + 44.7944837 + ], + [ + -124.0804535, + 44.7961071 + ], + [ + -124.0804406, + 44.7962808 + ], + [ + -124.0803808, + 44.7969808 + ], + [ + -124.0802285, + 44.7979868 + ], + [ + -124.0801087, + 44.7985368 + ], + [ + -124.0798279, + 44.799522 + ], + [ + -124.0795381, + 44.8003421 + ], + [ + -124.0789121, + 44.8017185 + ], + [ + -124.0769329, + 44.8052487 + ], + [ + -124.0767295, + 44.805594 + ], + [ + -124.076419, + 44.8060967 + ], + [ + -124.0765732, + 44.8077969 + ], + [ + -124.0761799, + 44.8099083 + ], + [ + -124.0752154, + 44.8119244 + ], + [ + -124.0737168, + 44.8137679 + ], + [ + -124.0717416, + 44.8153678 + ], + [ + -124.0693658, + 44.8166626 + ], + [ + -124.0666806, + 44.8176026 + ], + [ + -124.0637893, + 44.8181516 + ], + [ + -124.0608031, + 44.8182885 + ], + [ + -124.0578368, + 44.818008 + ], + [ + -124.0550043, + 44.817321 + ], + [ + -124.0524147, + 44.8162538 + ], + [ + -124.0501675, + 44.8148474 + ], + [ + -124.048349, + 44.813156 + ], + [ + -124.0470292, + 44.8112446 + ], + [ + -124.0462586, + 44.8091866 + ], + [ + -124.045909, + 44.8076665 + ], + [ + -124.0457773, + 44.8069419 + ], + [ + -124.0456675, + 44.8061219 + ], + [ + -124.0456534, + 44.8041715 + ], + [ + -124.0457035, + 44.8037515 + ], + [ + -124.0462217, + 44.8017221 + ], + [ + -124.0464118, + 44.8012421 + ], + [ + -124.04678, + 44.8004346 + ], + [ + -124.0476804, + 44.7986947 + ], + [ + -124.0480323, + 44.7980742 + ], + [ + -124.0486867, + 44.7970157 + ], + [ + -124.0499951, + 44.794684 + ], + [ + -124.0503885, + 44.7884809 + ], + [ + -124.0504979, + 44.7875834 + ], + [ + -124.0506281, + 44.7868634 + ], + [ + -124.0515981, + 44.7842091 + ], + [ + -124.0517782, + 44.7838891 + ], + [ + -124.053977, + 44.7811877 + ], + [ + -124.054377, + 44.7808277 + ], + [ + -124.0552879, + 44.7801589 + ], + [ + -124.0552783, + 44.780133 + ], + [ + -124.0552183, + 44.7798429 + ], + [ + -124.0551817, + 44.7796543 + ], + [ + -124.0551218, + 44.7793243 + ], + [ + -124.0550593, + 44.776941 + ], + [ + -124.0551094, + 44.776551 + ], + [ + -124.0552286, + 44.7760074 + ], + [ + -124.0551491, + 44.7759338 + ], + [ + -124.0544991, + 44.7753037 + ], + [ + -124.0537073, + 44.7744554 + ], + [ + -124.0523275, + 44.7728152 + ], + [ + -124.0517022, + 44.7719936 + ], + [ + -124.0495727, + 44.7688833 + ], + [ + -124.0493027, + 44.7684669 + ], + [ + -124.0491128, + 44.7681569 + ], + [ + -124.0485192, + 44.7670183 + ], + [ + -124.0482893, + 44.7664882 + ], + [ + -124.0478419, + 44.7647187 + ], + [ + -124.0475236, + 44.7643804 + ], + [ + -124.0456899, + 44.7616939 + ], + [ + -124.0456469, + 44.7615998 + ], + [ + -124.0447677, + 44.7611106 + ], + [ + -124.0438177, + 44.7605405 + ], + [ + -124.0418753, + 44.759142 + ], + [ + -124.0408454, + 44.7582519 + ], + [ + -124.0400422, + 44.7574924 + ], + [ + -124.0397723, + 44.7572123 + ], + [ + -124.0385899, + 44.7557558 + ], + [ + -124.03822, + 44.7552058 + ], + [ + -124.0376066, + 44.7541557 + ], + [ + -124.0372667, + 44.7534757 + ], + [ + -124.0365759, + 44.7515528 + ], + [ + -124.0363461, + 44.7505327 + ], + [ + -124.0361658, + 44.748374 + ], + [ + -124.036589, + 44.7462326 + ], + [ + -124.0375989, + 44.7441933 + ], + [ + -124.0391555, + 44.7423369 + ], + [ + -124.0411969, + 44.740737 + ], + [ + -124.0436424, + 44.7394569 + ], + [ + -124.0456343, + 44.7387987 + ], + [ + -124.047966, + 44.7375709 + ], + [ + -124.0506696, + 44.7366638 + ], + [ + -124.0535695, + 44.7361499 + ], + [ + -124.0565544, + 44.7360491 + ], + [ + -124.0595095, + 44.7363653 + ], + [ + -124.0623213, + 44.7370862 + ], + [ + -124.0648819, + 44.7381841 + ], + [ + -124.0670929, + 44.739617 + ], + [ + -124.0688692, + 44.7413298 + ], + [ + -124.0701428, + 44.7432566 + ], + [ + -124.0708644, + 44.7453234 + ], + [ + -124.0710064, + 44.7474509 + ], + [ + -124.0708722, + 44.7480889 + ], + [ + -124.0718776, + 44.7489573 + ], + [ + -124.0721876, + 44.7492773 + ], + [ + -124.0738516, + 44.7515133 + ], + [ + -124.0740917, + 44.7519533 + ], + [ + -124.0746425, + 44.7533357 + ], + [ + -124.0755678, + 44.7541364 + ], + [ + -124.0758178, + 44.7544064 + ], + [ + -124.0775854, + 44.7570165 + ], + [ + -124.0776954, + 44.7572565 + ], + [ + -124.0782596, + 44.7589215 + ], + [ + -124.0784496, + 44.760629 + ], + [ + -124.0784497, + 44.761219 + ], + [ + -124.0784161, + 44.7614438 + ], + [ + -124.0788276, + 44.7620444 + ], + [ + -124.0795021, + 44.7628458 + ], + [ + -124.0795267, + 44.7628697 + ], + [ + -124.0823235, + 44.7653408 + ], + [ + -124.0834486, + 44.7664765 + ], + [ + -124.0840087, + 44.7671264 + ], + [ + -124.0851363, + 44.7687131 + ], + [ + -124.0854164, + 44.7692031 + ], + [ + -124.0860442, + 44.7705455 + ], + [ + -124.0863644, + 44.7714154 + ], + [ + -124.0868625, + 44.7742669 + ], + [ + -124.0868527, + 44.7750569 + ], + [ + -124.08657, + 44.7764457 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16192_s_16191", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0865689, + 44.7764508 + ], + [ + -124.0866164, + 44.7765107 + ], + [ + -124.0869665, + 44.7771107 + ], + [ + -124.0879917, + 44.7797954 + ], + [ + -124.0880518, + 44.7801054 + ], + [ + -124.0881932, + 44.7817609 + ], + [ + -124.0881833, + 44.7822109 + ], + [ + -124.0879495, + 44.7839435 + ], + [ + -124.0878895, + 44.7841835 + ], + [ + -124.0875369, + 44.7852691 + ], + [ + -124.0863076, + 44.7883293 + ], + [ + -124.0846427, + 44.7910236 + ], + [ + -124.0841428, + 44.7916037 + ], + [ + -124.0819104, + 44.7936154 + ], + [ + -124.0816004, + 44.7938354 + ], + [ + -124.0805556, + 44.7944837 + ], + [ + -124.0804535, + 44.7961071 + ], + [ + -124.0804406, + 44.7962808 + ], + [ + -124.0803808, + 44.7969808 + ], + [ + -124.0802285, + 44.7979868 + ], + [ + -124.0801087, + 44.7985368 + ], + [ + -124.0798279, + 44.799522 + ], + [ + -124.0795381, + 44.8003421 + ], + [ + -124.0789121, + 44.8017185 + ], + [ + -124.0769329, + 44.8052487 + ], + [ + -124.0767295, + 44.805594 + ], + [ + -124.076419, + 44.8060967 + ], + [ + -124.0765732, + 44.8077969 + ], + [ + -124.0761799, + 44.8099083 + ], + [ + -124.0752154, + 44.8119244 + ], + [ + -124.0737168, + 44.8137679 + ], + [ + -124.0717416, + 44.8153678 + ], + [ + -124.0693658, + 44.8166626 + ], + [ + -124.0666806, + 44.8176026 + ], + [ + -124.0637893, + 44.8181516 + ], + [ + -124.0608031, + 44.8182885 + ], + [ + -124.0578368, + 44.818008 + ], + [ + -124.0550043, + 44.817321 + ], + [ + -124.0524147, + 44.8162538 + ], + [ + -124.0501675, + 44.8148474 + ], + [ + -124.048349, + 44.813156 + ], + [ + -124.0470292, + 44.8112446 + ], + [ + -124.0462586, + 44.8091866 + ], + [ + -124.045909, + 44.8076665 + ], + [ + -124.0457773, + 44.8069419 + ], + [ + -124.0456675, + 44.8061219 + ], + [ + -124.0456534, + 44.8041715 + ], + [ + -124.0457035, + 44.8037515 + ], + [ + -124.0462217, + 44.8017221 + ], + [ + -124.0464118, + 44.8012421 + ], + [ + -124.04678, + 44.8004346 + ], + [ + -124.0476804, + 44.7986947 + ], + [ + -124.0480323, + 44.7980742 + ], + [ + -124.0486867, + 44.7970157 + ], + [ + -124.0499951, + 44.794684 + ], + [ + -124.0503885, + 44.7884809 + ], + [ + -124.0504979, + 44.7875834 + ], + [ + -124.0506281, + 44.7868634 + ], + [ + -124.0515981, + 44.7842091 + ], + [ + -124.0517782, + 44.7838891 + ], + [ + -124.053977, + 44.7811877 + ], + [ + -124.054377, + 44.7808277 + ], + [ + -124.0552879, + 44.7801589 + ], + [ + -124.0552783, + 44.780133 + ], + [ + -124.0552183, + 44.7798429 + ], + [ + -124.0551817, + 44.7796543 + ], + [ + -124.0551218, + 44.7793243 + ], + [ + -124.0550593, + 44.776941 + ], + [ + -124.0551094, + 44.776551 + ], + [ + -124.0552286, + 44.7760074 + ], + [ + -124.0551491, + 44.7759338 + ], + [ + -124.0544991, + 44.7753037 + ], + [ + -124.0537073, + 44.7744554 + ], + [ + -124.0523275, + 44.7728152 + ], + [ + -124.0517022, + 44.7719936 + ], + [ + -124.0495727, + 44.7688833 + ], + [ + -124.0493027, + 44.7684669 + ], + [ + -124.0491128, + 44.7681569 + ], + [ + -124.0485192, + 44.7670183 + ], + [ + -124.0482893, + 44.7664882 + ], + [ + -124.0478419, + 44.7647187 + ], + [ + -124.0475236, + 44.7643804 + ], + [ + -124.0456899, + 44.7616939 + ], + [ + -124.0456469, + 44.7615998 + ], + [ + -124.0447677, + 44.7611106 + ], + [ + -124.0438177, + 44.7605405 + ], + [ + -124.0422529, + 44.759456 + ], + [ + -124.0418529, + 44.7591359 + ], + [ + -124.0410671, + 44.7584533 + ], + [ + -124.0401672, + 44.7576032 + ], + [ + -124.0385899, + 44.7557558 + ], + [ + -124.03822, + 44.7552058 + ], + [ + -124.0376066, + 44.7541557 + ], + [ + -124.0372667, + 44.7534757 + ], + [ + -124.0366491, + 44.7518512 + ], + [ + -124.0364393, + 44.7510611 + ], + [ + -124.0361919, + 44.749576 + ], + [ + -124.0361421, + 44.748856 + ], + [ + -124.0362232, + 44.7470812 + ], + [ + -124.0363634, + 44.7462112 + ], + [ + -124.0366901, + 44.7448997 + ], + [ + -124.0369003, + 44.7442797 + ], + [ + -124.0376076, + 44.7427197 + ], + [ + -124.0380378, + 44.7419697 + ], + [ + -124.0385787, + 44.7411303 + ], + [ + -124.0388588, + 44.7407404 + ], + [ + -124.03983, + 44.7395738 + ], + [ + -124.0402601, + 44.7391238 + ], + [ + -124.0408598, + 44.7385393 + ], + [ + -124.0409915, + 44.7384195 + ], + [ + -124.041289, + 44.7351565 + ], + [ + -124.0413201, + 44.7348725 + ], + [ + -124.041761, + 44.7314325 + ], + [ + -124.041788, + 44.7312406 + ], + [ + -124.0419383, + 44.7302606 + ], + [ + -124.0420907, + 44.72951 + ], + [ + -124.0423663, + 44.7284221 + ], + [ + -124.0423898, + 44.7282109 + ], + [ + -124.0424585, + 44.7268114 + ], + [ + -124.0425596, + 44.7258857 + ], + [ + -124.0427599, + 44.7247057 + ], + [ + -124.0434078, + 44.7226265 + ], + [ + -124.0446121, + 44.7206773 + ], + [ + -124.0463266, + 44.7189331 + ], + [ + -124.0484853, + 44.7174608 + ], + [ + -124.0510052, + 44.7163171 + ], + [ + -124.0537896, + 44.7155458 + ], + [ + -124.0567315, + 44.7151765 + ], + [ + -124.0597179, + 44.7152235 + ], + [ + -124.062634, + 44.715685 + ], + [ + -124.065368, + 44.7165431 + ], + [ + -124.0678147, + 44.717765 + ], + [ + -124.0698802, + 44.7193038 + ], + [ + -124.071485, + 44.7211002 + ], + [ + -124.0725676, + 44.7230854 + ], + [ + -124.0730862, + 44.7251829 + ], + [ + -124.0730208, + 44.7273123 + ], + [ + -124.0728992, + 44.728031 + ], + [ + -124.0728421, + 44.7292066 + ], + [ + -124.0728039, + 44.7296869 + ], + [ + -124.0726941, + 44.7306769 + ], + [ + -124.0724998, + 44.731748 + ], + [ + -124.0721847, + 44.7329946 + ], + [ + -124.0721072, + 44.7335015 + ], + [ + -124.0716985, + 44.7367036 + ], + [ + -124.0713823, + 44.7401915 + ], + [ + -124.0713089, + 44.7407646 + ], + [ + -124.0709595, + 44.7428746 + ], + [ + -124.0702685, + 44.7450661 + ], + [ + -124.0696688, + 44.7463361 + ], + [ + -124.06931, + 44.7469053 + ], + [ + -124.0697804, + 44.7472059 + ], + [ + -124.0702204, + 44.7475259 + ], + [ + -124.0718776, + 44.7489573 + ], + [ + -124.0721876, + 44.7492773 + ], + [ + -124.0738516, + 44.7515133 + ], + [ + -124.0740917, + 44.7519533 + ], + [ + -124.0746425, + 44.7533357 + ], + [ + -124.0755678, + 44.7541364 + ], + [ + -124.0758178, + 44.7544064 + ], + [ + -124.0775854, + 44.7570165 + ], + [ + -124.0776954, + 44.7572565 + ], + [ + -124.0782596, + 44.7589215 + ], + [ + -124.0784496, + 44.760629 + ], + [ + -124.0784497, + 44.761219 + ], + [ + -124.0784161, + 44.7614438 + ], + [ + -124.0788276, + 44.7620444 + ], + [ + -124.0795021, + 44.7628458 + ], + [ + -124.0795267, + 44.7628697 + ], + [ + -124.0823235, + 44.7653408 + ], + [ + -124.0834486, + 44.7664765 + ], + [ + -124.0840087, + 44.7671264 + ], + [ + -124.0851363, + 44.7687131 + ], + [ + -124.0854164, + 44.7692031 + ], + [ + -124.0860442, + 44.7705455 + ], + [ + -124.0863644, + 44.7714154 + ], + [ + -124.0868625, + 44.7742669 + ], + [ + -124.0868527, + 44.7750569 + ], + [ + -124.0865689, + 44.7764508 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16194_s_15889", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0703323, + 44.6392473 + ], + [ + -124.0698062, + 44.64055 + ], + [ + -124.0684554, + 44.642425 + ], + [ + -124.0666228, + 44.6440783 + ], + [ + -124.0643772, + 44.6454478 + ], + [ + -124.0618033, + 44.6464818 + ], + [ + -124.0589981, + 44.6471414 + ], + [ + -124.0560671, + 44.6474017 + ], + [ + -124.0559913, + 44.6474031 + ], + [ + -124.0530153, + 44.6472507 + ], + [ + -124.0501382, + 44.6466867 + ], + [ + -124.0474706, + 44.6457328 + ], + [ + -124.0451151, + 44.6444256 + ], + [ + -124.0431621, + 44.6428154 + ], + [ + -124.0416868, + 44.6409642 + ], + [ + -124.0415443, + 44.6406581 + ], + [ + -124.0404787, + 44.6394452 + ], + [ + -124.039417, + 44.6374547 + ], + [ + -124.0389196, + 44.6353546 + ], + [ + -124.0390056, + 44.6332256 + ], + [ + -124.0396717, + 44.6311494 + ], + [ + -124.0408921, + 44.6292059 + ], + [ + -124.0426199, + 44.6274697 + ], + [ + -124.0447887, + 44.6260076 + ], + [ + -124.0473621, + 44.6245858 + ], + [ + -124.0499359, + 44.623437 + ], + [ + -124.0527778, + 44.6226759 + ], + [ + -124.0557747, + 44.6223328 + ], + [ + -124.0588072, + 44.6224212 + ], + [ + -124.0617549, + 44.6229378 + ], + [ + -124.0645004, + 44.6238619 + ], + [ + -124.0669346, + 44.6251567 + ], + [ + -124.0689605, + 44.6267709 + ], + [ + -124.0695301, + 44.6273277 + ], + [ + -124.0710125, + 44.6291131 + ], + [ + -124.0719926, + 44.6310673 + ], + [ + -124.0724344, + 44.6331188 + ], + [ + -124.0723218, + 44.6351929 + ], + [ + -124.0716588, + 44.6372139 + ], + [ + -124.0704696, + 44.6391079 + ], + [ + -124.0703323, + 44.6392473 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16195_s_16204", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0481663, + 44.8808801 + ], + [ + -124.0479688, + 44.8821412 + ], + [ + -124.0479239, + 44.8823282 + ], + [ + -124.047837, + 44.8826588 + ], + [ + -124.0478195, + 44.88272 + ], + [ + -124.0477952, + 44.8828193 + ], + [ + -124.0476591, + 44.8833089 + ], + [ + -124.0476051, + 44.8834819 + ], + [ + -124.047221, + 44.884484 + ], + [ + -124.0471471, + 44.884646 + ], + [ + -124.0467938, + 44.8853387 + ], + [ + -124.0466719, + 44.8855547 + ], + [ + -124.0459816, + 44.8866101 + ], + [ + -124.0457346, + 44.8869401 + ], + [ + -124.045307, + 44.8874745 + ], + [ + -124.0448573, + 44.8880013 + ], + [ + -124.0444126, + 44.8885241 + ], + [ + -124.044386, + 44.8885552 + ], + [ + -124.0439291, + 44.8890882 + ], + [ + -124.0438279, + 44.8892047 + ], + [ + -124.043081, + 44.8900518 + ], + [ + -124.043066, + 44.8900687 + ], + [ + -124.0416346, + 44.8916854 + ], + [ + -124.0408318, + 44.8926079 + ], + [ + -124.0401351, + 44.89334 + ], + [ + -124.0397772, + 44.893685 + ], + [ + -124.0377103, + 44.895306 + ], + [ + -124.0375023, + 44.8954145 + ], + [ + -124.0373714, + 44.8955158 + ], + [ + -124.0366236, + 44.8961702 + ], + [ + -124.0345156, + 44.8976839 + ], + [ + -124.0320324, + 44.8988761 + ], + [ + -124.0292697, + 44.899701 + ], + [ + -124.0263336, + 44.9001269 + ], + [ + -124.0233369, + 44.9001375 + ], + [ + -124.020395, + 44.8997322 + ], + [ + -124.0176209, + 44.8989268 + ], + [ + -124.0151213, + 44.8977521 + ], + [ + -124.0129922, + 44.8962533 + ], + [ + -124.0113156, + 44.8944881 + ], + [ + -124.0101557, + 44.8925243 + ], + [ + -124.0095572, + 44.8904374 + ], + [ + -124.009543, + 44.8883075 + ], + [ + -124.0101135, + 44.8862167 + ], + [ + -124.0112467, + 44.8842451 + ], + [ + -124.0128992, + 44.8824685 + ], + [ + -124.0136295, + 44.8818296 + ], + [ + -124.0145839, + 44.8808754 + ], + [ + -124.0163633, + 44.879437 + ], + [ + -124.0171931, + 44.8785002 + ], + [ + -124.0177881, + 44.8778258 + ], + [ + -124.0178006, + 44.8776579 + ], + [ + -124.018251, + 44.8755522 + ], + [ + -124.0192705, + 44.8735495 + ], + [ + -124.0208198, + 44.8717267 + ], + [ + -124.0228393, + 44.8701538 + ], + [ + -124.0252514, + 44.8688913 + ], + [ + -124.0279635, + 44.8679875 + ], + [ + -124.0308713, + 44.8674774 + ], + [ + -124.0338631, + 44.8673803 + ], + [ + -124.0368242, + 44.8677002 + ], + [ + -124.0396406, + 44.8684246 + ], + [ + -124.0422043, + 44.8695258 + ], + [ + -124.0444167, + 44.8709614 + ], + [ + -124.0461929, + 44.8726764 + ], + [ + -124.0474645, + 44.8746048 + ], + [ + -124.0481826, + 44.8766725 + ], + [ + -124.0483197, + 44.8788001 + ], + [ + -124.0481663, + 44.8808801 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16196_s_781958", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0725732, + 44.666517 + ], + [ + -124.0725814, + 44.6665359 + ], + [ + -124.0727136, + 44.6668378 + ], + [ + -124.072788, + 44.6670129 + ], + [ + -124.0729261, + 44.6673479 + ], + [ + -124.0729516, + 44.6674105 + ], + [ + -124.073061, + 44.667682 + ], + [ + -124.0737104, + 44.6692797 + ], + [ + -124.0739406, + 44.6698293 + ], + [ + -124.0742185, + 44.6704796 + ], + [ + -124.0748138, + 44.6718725 + ], + [ + -124.0754005, + 44.6739608 + ], + [ + -124.075405, + 44.6760907 + ], + [ + -124.074827, + 44.6781803 + ], + [ + -124.0736887, + 44.6801493 + ], + [ + -124.0720338, + 44.681922 + ], + [ + -124.0699258, + 44.6834303 + ], + [ + -124.0674458, + 44.6846161 + ], + [ + -124.0646891, + 44.6854339 + ], + [ + -124.0617617, + 44.6858523 + ], + [ + -124.0587761, + 44.6858551 + ], + [ + -124.0558472, + 44.6854422 + ], + [ + -124.0530875, + 44.6846296 + ], + [ + -124.0506031, + 44.6834484 + ], + [ + -124.0484896, + 44.6819441 + ], + [ + -124.0468281, + 44.6801745 + ], + [ + -124.0456826, + 44.6782077 + ], + [ + -124.0450879, + 44.6768146 + ], + [ + -124.044798, + 44.6761354 + ], + [ + -124.0447738, + 44.6760782 + ], + [ + -124.0445139, + 44.6754572 + ], + [ + -124.0444787, + 44.6753717 + ], + [ + -124.0438081, + 44.6737196 + ], + [ + -124.0437988, + 44.6736967 + ], + [ + -124.0436975, + 44.673445 + ], + [ + -124.0436086, + 44.673229 + ], + [ + -124.0435098, + 44.6730033 + ], + [ + -124.0435002, + 44.6729812 + ], + [ + -124.0434472, + 44.6728592 + ], + [ + -124.0433544, + 44.6726155 + ], + [ + -124.0433321, + 44.6725702 + ], + [ + -124.0430503, + 44.6719383 + ], + [ + -124.0429416, + 44.6716662 + ], + [ + -124.0428572, + 44.6714801 + ], + [ + -124.0426781, + 44.6710563 + ], + [ + -124.0425511, + 44.670732 + ], + [ + -124.0425009, + 44.6706321 + ], + [ + -124.0423721, + 44.6702713 + ], + [ + -124.0423563, + 44.6702748 + ], + [ + -124.0422745, + 44.6700853 + ], + [ + -124.0422392, + 44.6700075 + ], + [ + -124.0421031, + 44.6696909 + ], + [ + -124.0418023, + 44.6689518 + ], + [ + -124.0415285, + 44.6683339 + ], + [ + -124.041495, + 44.6682573 + ], + [ + -124.0407474, + 44.6665252 + ], + [ + -124.0406785, + 44.6663609 + ], + [ + -124.0403553, + 44.6655679 + ], + [ + -124.04027, + 44.6653704 + ], + [ + -124.0396738, + 44.6632834 + ], + [ + -124.0396596, + 44.6611535 + ], + [ + -124.0402278, + 44.6590626 + ], + [ + -124.0413567, + 44.6570909 + ], + [ + -124.0430026, + 44.6553143 + ], + [ + -124.0451024, + 44.653801 + ], + [ + -124.0475754, + 44.6526091 + ], + [ + -124.0503266, + 44.6517844 + ], + [ + -124.0532502, + 44.6513587 + ], + [ + -124.056234, + 44.6513481 + ], + [ + -124.0591633, + 44.6517532 + ], + [ + -124.0619258, + 44.6525585 + ], + [ + -124.0644151, + 44.6537328 + ], + [ + -124.0665358, + 44.6552312 + ], + [ + -124.0682063, + 44.6569961 + ], + [ + -124.0693624, + 44.6589597 + ], + [ + -124.0694844, + 44.6592417 + ], + [ + -124.0695557, + 44.6594113 + ], + [ + -124.0698803, + 44.6602069 + ], + [ + -124.0705768, + 44.6618185 + ], + [ + -124.070888, + 44.6625203 + ], + [ + -124.0709922, + 44.6627653 + ], + [ + -124.0712793, + 44.6634699 + ], + [ + -124.071342, + 44.6636114 + ], + [ + -124.0714561, + 44.6638754 + ], + [ + -124.0714695, + 44.663923 + ], + [ + -124.0717292, + 44.6645039 + ], + [ + -124.0719208, + 44.6649927 + ], + [ + -124.0719932, + 44.665152 + ], + [ + -124.0721511, + 44.6655219 + ], + [ + -124.0722067, + 44.6656608 + ], + [ + -124.0722122, + 44.665672 + ], + [ + -124.0723089, + 44.665874 + ], + [ + -124.0723779, + 44.666023 + ], + [ + -124.0725732, + 44.666517 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16197_s_16202", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.077647, + 44.8144593 + ], + [ + -124.077795, + 44.8149742 + ], + [ + -124.0781042, + 44.8170927 + ], + [ + -124.0778269, + 44.8192133 + ], + [ + -124.0769736, + 44.8212548 + ], + [ + -124.0755771, + 44.8231385 + ], + [ + -124.0736909, + 44.8247921 + ], + [ + -124.0713875, + 44.8261519 + ], + [ + -124.0687555, + 44.8271658 + ], + [ + -124.0658961, + 44.8277948 + ], + [ + -124.0629192, + 44.8280146 + ], + [ + -124.0599392, + 44.8278168 + ], + [ + -124.0570707, + 44.827209 + ], + [ + -124.0544241, + 44.8262146 + ], + [ + -124.052101, + 44.8248718 + ], + [ + -124.0501908, + 44.8232322 + ], + [ + -124.0487669, + 44.8213589 + ], + [ + -124.0478839, + 44.8193238 + ], + [ + -124.0475741, + 44.8182438 + ], + [ + -124.0473834, + 44.8174171 + ], + [ + -124.0472536, + 44.8166771 + ], + [ + -124.0471466, + 44.8157357 + ], + [ + -124.0471167, + 44.8151657 + ], + [ + -124.04711, + 44.8145155 + ], + [ + -124.0471397, + 44.8135796 + ], + [ + -124.0470842, + 44.8125629 + ], + [ + -124.0470685, + 44.8124745 + ], + [ + -124.0470048, + 44.8122087 + ], + [ + -124.0470117, + 44.8122078 + ], + [ + -124.046761, + 44.8114612 + ], + [ + -124.0466007, + 44.8105703 + ], + [ + -124.0459234, + 44.8077281 + ], + [ + -124.0457152, + 44.8062347 + ], + [ + -124.0456825, + 44.8054533 + ], + [ + -124.0457954, + 44.8037715 + ], + [ + -124.0459276, + 44.8030245 + ], + [ + -124.0465907, + 44.8009476 + ], + [ + -124.04781, + 44.7990027 + ], + [ + -124.0495388, + 44.7972645 + ], + [ + -124.0517105, + 44.7957998 + ], + [ + -124.0542417, + 44.7946649 + ], + [ + -124.0570351, + 44.7939033 + ], + [ + -124.0599835, + 44.7935443 + ], + [ + -124.0629735, + 44.7936018 + ], + [ + -124.0658904, + 44.7940734 + ], + [ + -124.0686222, + 44.7949411 + ], + [ + -124.0710638, + 44.7961715 + ], + [ + -124.0731214, + 44.7977174 + ], + [ + -124.0747161, + 44.7995194 + ], + [ + -124.0757864, + 44.8015082 + ], + [ + -124.0762913, + 44.8036076 + ], + [ + -124.0762381, + 44.8050216 + ], + [ + -124.0767464, + 44.8071499 + ], + [ + -124.0768379, + 44.8075868 + ], + [ + -124.0769319, + 44.8081073 + ], + [ + -124.0770942, + 44.8085494 + ], + [ + -124.0772144, + 44.8090493 + ], + [ + -124.0773124, + 44.8095192 + ], + [ + -124.0774526, + 44.8103092 + ], + [ + -124.0775612, + 44.8112444 + ], + [ + -124.0776617, + 44.8130644 + ], + [ + -124.0776697, + 44.8137325 + ], + [ + -124.077647, + 44.8144593 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16200_s_2456760", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0682463, + 44.6483062 + ], + [ + -124.0682488, + 44.6484308 + ], + [ + -124.0682469, + 44.6486498 + ], + [ + -124.0682467, + 44.6486736 + ], + [ + -124.0682427, + 44.6490016 + ], + [ + -124.0682419, + 44.6490709 + ], + [ + -124.0682423, + 44.6491136 + ], + [ + -124.0682465, + 44.6499656 + ], + [ + -124.0682465, + 44.6500464 + ], + [ + -124.0682431, + 44.6506613 + ], + [ + -124.067939, + 44.6527802 + ], + [ + -124.0670617, + 44.6548159 + ], + [ + -124.0656447, + 44.6566904 + ], + [ + -124.0637425, + 44.6583315 + ], + [ + -124.0614282, + 44.6596762 + ], + [ + -124.0587907, + 44.6606727 + ], + [ + -124.0559314, + 44.6612828 + ], + [ + -124.0529603, + 44.6614829 + ], + [ + -124.0499915, + 44.6612654 + ], + [ + -124.0471393, + 44.6606387 + ], + [ + -124.0445133, + 44.6596269 + ], + [ + -124.0422145, + 44.6582687 + ], + [ + -124.0403311, + 44.6566166 + ], + [ + -124.0389356, + 44.6547339 + ], + [ + -124.0380816, + 44.6526931 + ], + [ + -124.0378018, + 44.6505725 + ], + [ + -124.0378053, + 44.6500005 + ], + [ + -124.0378007, + 44.6491085 + ], + [ + -124.0378013, + 44.64897 + ], + [ + -124.0378033, + 44.6488112 + ], + [ + -124.0378066, + 44.6485456 + ], + [ + -124.0378059, + 44.6483278 + ], + [ + -124.037806, + 44.6482482 + ], + [ + -124.0378122, + 44.6473498 + ], + [ + -124.0378247, + 44.6455133 + ], + [ + -124.0378257, + 44.6453723 + ], + [ + -124.0378299, + 44.6446598 + ], + [ + -124.0378302, + 44.6446213 + ], + [ + -124.0378311, + 44.6445416 + ], + [ + -124.0378351, + 44.6439499 + ], + [ + -124.0378353, + 44.6439341 + ], + [ + -124.0378371, + 44.6437217 + ], + [ + -124.0378381, + 44.6434604 + ], + [ + -124.0378384, + 44.6434175 + ], + [ + -124.0378404, + 44.6432056 + ], + [ + -124.0378413, + 44.6430835 + ], + [ + -124.0378423, + 44.6428263 + ], + [ + -124.0378425, + 44.6427906 + ], + [ + -124.0378445, + 44.6425588 + ], + [ + -124.0378486, + 44.641894 + ], + [ + -124.0378489, + 44.6418592 + ], + [ + -124.0378498, + 44.6417764 + ], + [ + -124.0378543, + 44.6411658 + ], + [ + -124.0373114, + 44.6399498 + ], + [ + -124.0369766, + 44.6378397 + ], + [ + -124.0369694, + 44.637493 + ], + [ + -124.0372175, + 44.6353704 + ], + [ + -124.0380407, + 44.6333232 + ], + [ + -124.0394074, + 44.63143 + ], + [ + -124.041265, + 44.6297635 + ], + [ + -124.043542, + 44.6283878 + ], + [ + -124.0461511, + 44.6273557 + ], + [ + -124.0489919, + 44.6267068 + ], + [ + -124.0519554, + 44.6264661 + ], + [ + -124.0549276, + 44.6266429 + ], + [ + -124.0577946, + 44.6272302 + ], + [ + -124.0587936, + 44.6275977 + ], + [ + -124.0588202, + 44.6276034 + ], + [ + -124.0593288, + 44.6277946 + ], + [ + -124.060446, + 44.6282056 + ], + [ + -124.060494, + 44.6282329 + ], + [ + -124.0614827, + 44.6286047 + ], + [ + -124.0638172, + 44.6299606 + ], + [ + -124.0657325, + 44.6316181 + ], + [ + -124.0671536, + 44.6335123 + ], + [ + -124.0680249, + 44.6355691 + ], + [ + -124.0683123, + 44.6377082 + ], + [ + -124.0683104, + 44.6381042 + ], + [ + -124.0683102, + 44.6381355 + ], + [ + -124.0683085, + 44.6383202 + ], + [ + -124.0683085, + 44.638352 + ], + [ + -124.0683083, + 44.6384109 + ], + [ + -124.0683045, + 44.6389342 + ], + [ + -124.0682997, + 44.6396826 + ], + [ + -124.068296, + 44.6401893 + ], + [ + -124.0682961, + 44.640386 + ], + [ + -124.0682959, + 44.640438 + ], + [ + -124.0682911, + 44.641183 + ], + [ + -124.0682863, + 44.6418964 + ], + [ + -124.0682815, + 44.6426644 + ], + [ + -124.0682814, + 44.6426784 + ], + [ + -124.0682796, + 44.6429015 + ], + [ + -124.0682787, + 44.6431537 + ], + [ + -124.0682786, + 44.6431792 + ], + [ + -124.0682776, + 44.6433222 + ], + [ + -124.0682775, + 44.6433385 + ], + [ + -124.0682758, + 44.643537 + ], + [ + -124.0682749, + 44.6437966 + ], + [ + -124.0682747, + 44.6438359 + ], + [ + -124.0682728, + 44.64406 + ], + [ + -124.068269, + 44.6446543 + ], + [ + -124.0682681, + 44.6448365 + ], + [ + -124.0682642, + 44.6454705 + ], + [ + -124.0682633, + 44.6456164 + ], + [ + -124.0682517, + 44.6474517 + ], + [ + -124.0682463, + 44.6483062 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16201_s_16197", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0865689, + 44.7764508 + ], + [ + -124.0866164, + 44.7765107 + ], + [ + -124.0869665, + 44.7771107 + ], + [ + -124.0879917, + 44.7797954 + ], + [ + -124.0880518, + 44.7801054 + ], + [ + -124.0881932, + 44.7817609 + ], + [ + -124.0881833, + 44.7822109 + ], + [ + -124.0879495, + 44.7839435 + ], + [ + -124.0878895, + 44.7841835 + ], + [ + -124.0875369, + 44.7852691 + ], + [ + -124.0863076, + 44.7883293 + ], + [ + -124.0846427, + 44.7910236 + ], + [ + -124.0841428, + 44.7916037 + ], + [ + -124.0819104, + 44.7936154 + ], + [ + -124.0816004, + 44.7938354 + ], + [ + -124.0805556, + 44.7944837 + ], + [ + -124.0804535, + 44.7961071 + ], + [ + -124.0804406, + 44.7962808 + ], + [ + -124.0803808, + 44.7969808 + ], + [ + -124.0802285, + 44.7979868 + ], + [ + -124.0801087, + 44.7985368 + ], + [ + -124.0798279, + 44.799522 + ], + [ + -124.0795381, + 44.8003421 + ], + [ + -124.0789121, + 44.8017185 + ], + [ + -124.0769871, + 44.8051519 + ], + [ + -124.0763774, + 44.806303 + ], + [ + -124.0762787, + 44.8064844 + ], + [ + -124.0752107, + 44.808396 + ], + [ + -124.0738379, + 44.8102884 + ], + [ + -124.0719726, + 44.8119537 + ], + [ + -124.0696867, + 44.813328 + ], + [ + -124.067068, + 44.8143584 + ], + [ + -124.064217, + 44.8150052 + ], + [ + -124.0612436, + 44.8152437 + ], + [ + -124.0582619, + 44.8150646 + ], + [ + -124.0553867, + 44.8144748 + ], + [ + -124.0527285, + 44.813497 + ], + [ + -124.0503894, + 44.8121688 + ], + [ + -124.0484594, + 44.8105413 + ], + [ + -124.0470126, + 44.808677 + ], + [ + -124.0461046, + 44.8066475 + ], + [ + -124.0457703, + 44.804531 + ], + [ + -124.0460224, + 44.8024087 + ], + [ + -124.0468512, + 44.8003622 + ], + [ + -124.0478694, + 44.7985412 + ], + [ + -124.0484831, + 44.7973837 + ], + [ + -124.0485891, + 44.7971895 + ], + [ + -124.0499951, + 44.794684 + ], + [ + -124.0503885, + 44.7884809 + ], + [ + -124.0504979, + 44.7875834 + ], + [ + -124.0506281, + 44.7868634 + ], + [ + -124.0515981, + 44.7842091 + ], + [ + -124.0517782, + 44.7838891 + ], + [ + -124.053977, + 44.7811877 + ], + [ + -124.054377, + 44.7808277 + ], + [ + -124.0552879, + 44.7801589 + ], + [ + -124.0552783, + 44.780133 + ], + [ + -124.0552183, + 44.7798429 + ], + [ + -124.0551817, + 44.7796543 + ], + [ + -124.0551218, + 44.7793243 + ], + [ + -124.0550593, + 44.776941 + ], + [ + -124.0551094, + 44.776551 + ], + [ + -124.0552286, + 44.7760074 + ], + [ + -124.0551491, + 44.7759338 + ], + [ + -124.0544991, + 44.7753037 + ], + [ + -124.0537073, + 44.7744554 + ], + [ + -124.0523275, + 44.7728152 + ], + [ + -124.0517022, + 44.7719936 + ], + [ + -124.0495727, + 44.7688833 + ], + [ + -124.0493027, + 44.7684669 + ], + [ + -124.0491128, + 44.7681569 + ], + [ + -124.0485192, + 44.7670183 + ], + [ + -124.0482893, + 44.7664882 + ], + [ + -124.0478419, + 44.7647187 + ], + [ + -124.0475236, + 44.7643804 + ], + [ + -124.0456899, + 44.7616939 + ], + [ + -124.0456469, + 44.7615998 + ], + [ + -124.0447677, + 44.7611106 + ], + [ + -124.0438177, + 44.7605405 + ], + [ + -124.0422529, + 44.759456 + ], + [ + -124.0418529, + 44.7591359 + ], + [ + -124.0410671, + 44.7584533 + ], + [ + -124.0401672, + 44.7576032 + ], + [ + -124.0385899, + 44.7557558 + ], + [ + -124.03822, + 44.7552058 + ], + [ + -124.0376066, + 44.7541557 + ], + [ + -124.0372667, + 44.7534757 + ], + [ + -124.0366491, + 44.7518512 + ], + [ + -124.0364393, + 44.7510611 + ], + [ + -124.0361919, + 44.749576 + ], + [ + -124.0361421, + 44.748856 + ], + [ + -124.0362232, + 44.7470812 + ], + [ + -124.0363634, + 44.7462112 + ], + [ + -124.0366901, + 44.7448997 + ], + [ + -124.0369003, + 44.7442797 + ], + [ + -124.0376076, + 44.7427197 + ], + [ + -124.0380378, + 44.7419697 + ], + [ + -124.0385787, + 44.7411303 + ], + [ + -124.0388588, + 44.7407404 + ], + [ + -124.03983, + 44.7395738 + ], + [ + -124.0402601, + 44.7391238 + ], + [ + -124.0408598, + 44.7385393 + ], + [ + -124.0409915, + 44.7384195 + ], + [ + -124.041289, + 44.7351565 + ], + [ + -124.0413201, + 44.7348725 + ], + [ + -124.041761, + 44.7314325 + ], + [ + -124.041788, + 44.7312406 + ], + [ + -124.0418767, + 44.7306619 + ], + [ + -124.0419353, + 44.7294567 + ], + [ + -124.0419707, + 44.7290023 + ], + [ + -124.042095, + 44.7278463 + ], + [ + -124.0421541, + 44.7274112 + ], + [ + -124.0423121, + 44.7264505 + ], + [ + -124.0424701, + 44.7257108 + ], + [ + -124.0429112, + 44.7240362 + ], + [ + -124.0437476, + 44.7219914 + ], + [ + -124.0451273, + 44.7201023 + ], + [ + -124.0469974, + 44.7184414 + ], + [ + -124.0492859, + 44.7170724 + ], + [ + -124.051905, + 44.7160481 + ], + [ + -124.0547539, + 44.7154076 + ], + [ + -124.0577232, + 44.7151757 + ], + [ + -124.060699, + 44.7153612 + ], + [ + -124.0635668, + 44.7159571 + ], + [ + -124.0662166, + 44.7169403 + ], + [ + -124.0685466, + 44.7182732 + ], + [ + -124.0704672, + 44.7199046 + ], + [ + -124.0719047, + 44.7217717 + ], + [ + -124.0728036, + 44.7238029 + ], + [ + -124.0731295, + 44.72592 + ], + [ + -124.0728698, + 44.7280419 + ], + [ + -124.0725263, + 44.7293487 + ], + [ + -124.0724654, + 44.7297206 + ], + [ + -124.0723893, + 44.7304316 + ], + [ + -124.072323, + 44.7318127 + ], + [ + -124.0722423, + 44.7326174 + ], + [ + -124.0721072, + 44.7335015 + ], + [ + -124.0716985, + 44.7367036 + ], + [ + -124.0713823, + 44.7401915 + ], + [ + -124.0713089, + 44.7407646 + ], + [ + -124.0709595, + 44.7428746 + ], + [ + -124.0702685, + 44.7450661 + ], + [ + -124.0696688, + 44.7463361 + ], + [ + -124.06931, + 44.7469053 + ], + [ + -124.0697804, + 44.7472059 + ], + [ + -124.0702204, + 44.7475259 + ], + [ + -124.0718776, + 44.7489573 + ], + [ + -124.0721876, + 44.7492773 + ], + [ + -124.0738516, + 44.7515133 + ], + [ + -124.0740917, + 44.7519533 + ], + [ + -124.0746425, + 44.7533357 + ], + [ + -124.0755678, + 44.7541364 + ], + [ + -124.0758178, + 44.7544064 + ], + [ + -124.0775854, + 44.7570165 + ], + [ + -124.0776954, + 44.7572565 + ], + [ + -124.0782596, + 44.7589215 + ], + [ + -124.0784496, + 44.760629 + ], + [ + -124.0784497, + 44.761219 + ], + [ + -124.0784161, + 44.7614438 + ], + [ + -124.0788276, + 44.7620444 + ], + [ + -124.0795021, + 44.7628458 + ], + [ + -124.0795267, + 44.7628697 + ], + [ + -124.0823235, + 44.7653408 + ], + [ + -124.0834486, + 44.7664765 + ], + [ + -124.0840087, + 44.7671264 + ], + [ + -124.0851363, + 44.7687131 + ], + [ + -124.0854164, + 44.7692031 + ], + [ + -124.0860442, + 44.7705455 + ], + [ + -124.0863644, + 44.7714154 + ], + [ + -124.0868625, + 44.7742669 + ], + [ + -124.0868527, + 44.7750569 + ], + [ + -124.0865689, + 44.7764508 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16202_s_16203", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0806091, + 44.823678 + ], + [ + -124.0809131, + 44.8249745 + ], + [ + -124.0810032, + 44.8255845 + ], + [ + -124.0808297, + 44.828707 + ], + [ + -124.0806599, + 44.829357 + ], + [ + -124.0793023, + 44.8322341 + ], + [ + -124.0791123, + 44.8325041 + ], + [ + -124.0777775, + 44.8340599 + ], + [ + -124.0774275, + 44.8343999 + ], + [ + -124.0753108, + 44.8360641 + ], + [ + -124.0749508, + 44.8362941 + ], + [ + -124.0722321, + 44.8376808 + ], + [ + -124.0719821, + 44.8377808 + ], + [ + -124.0687059, + 44.8387544 + ], + [ + -124.0683812, + 44.8388206 + ], + [ + -124.0617821, + 44.84802 + ], + [ + -124.0612941, + 44.8485797 + ], + [ + -124.0603266, + 44.8502554 + ], + [ + -124.058414, + 44.8537716 + ], + [ + -124.0570649, + 44.8556731 + ], + [ + -124.0552201, + 44.8573507 + ], + [ + -124.0529505, + 44.8587401 + ], + [ + -124.0503433, + 44.8597878 + ], + [ + -124.0474988, + 44.8604535 + ], + [ + -124.0445263, + 44.8607117 + ], + [ + -124.04154, + 44.8605524 + ], + [ + -124.0386549, + 44.8599818 + ], + [ + -124.0359818, + 44.8590217 + ], + [ + -124.0336236, + 44.8577091 + ], + [ + -124.0316708, + 44.8560945 + ], + [ + -124.0301985, + 44.8542398 + ], + [ + -124.0292632, + 44.8522166 + ], + [ + -124.0289009, + 44.8501023 + ], + [ + -124.0291254, + 44.8479785 + ], + [ + -124.0299279, + 44.8459266 + ], + [ + -124.0318987, + 44.8423068 + ], + [ + -124.0320149, + 44.8420997 + ], + [ + -124.0333554, + 44.8397798 + ], + [ + -124.0339227, + 44.8389094 + ], + [ + -124.0344329, + 44.8382094 + ], + [ + -124.0349529, + 44.8376192 + ], + [ + -124.0437525, + 44.8253595 + ], + [ + -124.0444941, + 44.8244397 + ], + [ + -124.0447642, + 44.8241397 + ], + [ + -124.0458889, + 44.8230469 + ], + [ + -124.0464389, + 44.8225769 + ], + [ + -124.0484841, + 44.8212007 + ], + [ + -124.0479618, + 44.8195797 + ], + [ + -124.047582, + 44.8174671 + ], + [ + -124.0477885, + 44.8153423 + ], + [ + -124.0485734, + 44.813287 + ], + [ + -124.0499065, + 44.8113802 + ], + [ + -124.0517364, + 44.8096951 + ], + [ + -124.0539929, + 44.8082965 + ], + [ + -124.0565893, + 44.8072381 + ], + [ + -124.0594257, + 44.8065606 + ], + [ + -124.0623932, + 44.8062899 + ], + [ + -124.0653779, + 44.8064365 + ], + [ + -124.0682652, + 44.8069947 + ], + [ + -124.070944, + 44.8079432 + ], + [ + -124.0733116, + 44.8092454 + ], + [ + -124.0752769, + 44.8108513 + ], + [ + -124.0767644, + 44.8126993 + ], + [ + -124.0777169, + 44.8147184 + ], + [ + -124.0806091, + 44.823678 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16203_s_16195", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0515377, + 44.8662919 + ], + [ + -124.0514476, + 44.8666115 + ], + [ + -124.0514396, + 44.8666289 + ], + [ + -124.051215, + 44.867402 + ], + [ + -124.049096, + 44.8750363 + ], + [ + -124.0491452, + 44.876153 + ], + [ + -124.0491253, + 44.876363 + ], + [ + -124.0485527, + 44.8786636 + ], + [ + -124.0483728, + 44.8791036 + ], + [ + -124.0481705, + 44.8795063 + ], + [ + -124.0478594, + 44.8809364 + ], + [ + -124.0468326, + 44.8829372 + ], + [ + -124.0452764, + 44.8847572 + ], + [ + -124.0432506, + 44.8863263 + ], + [ + -124.040833, + 44.8875842 + ], + [ + -124.0381166, + 44.8884827 + ], + [ + -124.0352057, + 44.888987 + ], + [ + -124.0322124, + 44.8890779 + ], + [ + -124.0292516, + 44.8887519 + ], + [ + -124.0264372, + 44.8880214 + ], + [ + -124.0238775, + 44.8869146 + ], + [ + -124.0216708, + 44.885474 + ], + [ + -124.019902, + 44.883755 + ], + [ + -124.018639, + 44.8818237 + ], + [ + -124.0179302, + 44.8797543 + ], + [ + -124.017803, + 44.8776264 + ], + [ + -124.0178531, + 44.8769864 + ], + [ + -124.01803, + 44.8758364 + ], + [ + -124.0181416, + 44.8753515 + ], + [ + -124.0181403, + 44.8753407 + ], + [ + -124.0184304, + 44.873293 + ], + [ + -124.0212529, + 44.8631434 + ], + [ + -124.0212798, + 44.8630488 + ], + [ + -124.0216902, + 44.8616388 + ], + [ + -124.022124, + 44.8604766 + ], + [ + -124.0223941, + 44.8598867 + ], + [ + -124.0224415, + 44.8598977 + ], + [ + -124.0227226, + 44.8590338 + ], + [ + -124.0299454, + 44.8458947 + ], + [ + -124.0313036, + 44.8439966 + ], + [ + -124.033156, + 44.8423235 + ], + [ + -124.0354316, + 44.8409396 + ], + [ + -124.0380429, + 44.839898 + ], + [ + -124.0408894, + 44.8392389 + ], + [ + -124.043862, + 44.8389875 + ], + [ + -124.0468464, + 44.8391534 + ], + [ + -124.049728, + 44.8397304 + ], + [ + -124.0523962, + 44.8406961 + ], + [ + -124.0547483, + 44.8420136 + ], + [ + -124.0566941, + 44.8436322 + ], + [ + -124.0581587, + 44.8454898 + ], + [ + -124.0590859, + 44.8475149 + ], + [ + -124.05944, + 44.8496298 + ], + [ + -124.0592072, + 44.8517532 + ], + [ + -124.0583965, + 44.8538035 + ], + [ + -124.0515377, + 44.8662919 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16204_s_16205", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0323668, + 44.8994513 + ], + [ + -124.0312294, + 44.9002327 + ], + [ + -124.0305994, + 44.9006228 + ], + [ + -124.0282906, + 44.9018028 + ], + [ + -124.0276906, + 44.9020528 + ], + [ + -124.0258684, + 44.9027002 + ], + [ + -124.0249283, + 44.9029803 + ], + [ + -124.0236628, + 44.9033114 + ], + [ + -124.0223384, + 44.9036115 + ], + [ + -124.0219288, + 44.905839 + ], + [ + -124.0218863, + 44.9060534 + ], + [ + -124.0207598, + 44.911354 + ], + [ + -124.0217353, + 44.9122384 + ], + [ + -124.0233442, + 44.9140354 + ], + [ + -124.0244289, + 44.9160209 + ], + [ + -124.0249477, + 44.9181186 + ], + [ + -124.0248805, + 44.9202479 + ], + [ + -124.0242299, + 44.922327 + ], + [ + -124.0230209, + 44.9242759 + ], + [ + -124.0212998, + 44.9260198 + ], + [ + -124.0191327, + 44.9274916 + ], + [ + -124.016603, + 44.9286348 + ], + [ + -124.0138079, + 44.9294053 + ], + [ + -124.0108549, + 44.9297736 + ], + [ + -124.0078574, + 44.9297255 + ], + [ + -124.0049308, + 44.9292628 + ], + [ + -124.0021875, + 44.9284034 + ], + [ + -123.9997331, + 44.9271802 + ], + [ + -123.9976619, + 44.9256403 + ], + [ + -123.9944421, + 44.92272 + ], + [ + -123.9941112, + 44.9224085 + ], + [ + -123.9932313, + 44.9215484 + ], + [ + -123.991453, + 44.9192834 + ], + [ + -123.9910431, + 44.9185734 + ], + [ + -123.9904814, + 44.9174194 + ], + [ + -123.9903615, + 44.9171194 + ], + [ + -123.9900584, + 44.916216 + ], + [ + -123.9899685, + 44.915886 + ], + [ + -123.9897313, + 44.914621 + ], + [ + -123.9896814, + 44.914141 + ], + [ + -123.9896546, + 44.9128643 + ], + [ + -123.9896948, + 44.9122143 + ], + [ + -123.9899814, + 44.9105446 + ], + [ + -123.9900782, + 44.9102034 + ], + [ + -123.9916317, + 44.9029116 + ], + [ + -123.9925433, + 44.8979691 + ], + [ + -123.9926522, + 44.897469 + ], + [ + -123.9931527, + 44.895479 + ], + [ + -123.9934057, + 44.894658 + ], + [ + -123.9935958, + 44.894138 + ], + [ + -123.9942884, + 44.8926781 + ], + [ + -123.9945885, + 44.8921681 + ], + [ + -123.9960452, + 44.8902563 + ], + [ + -123.9966853, + 44.8895864 + ], + [ + -123.9992381, + 44.8875304 + ], + [ + -124.000038, + 44.8870305 + ], + [ + -124.00182, + 44.8860715 + ], + [ + -124.00258, + 44.8857216 + ], + [ + -124.005227, + 44.8847486 + ], + [ + -124.0058969, + 44.8845587 + ], + [ + -124.0069201, + 44.8842981 + ], + [ + -124.0119418, + 44.8831605 + ], + [ + -124.0135861, + 44.8819079 + ], + [ + -124.0158348, + 44.8805007 + ], + [ + -124.0184263, + 44.8794323 + ], + [ + -124.0212611, + 44.8787439 + ], + [ + -124.0242303, + 44.8784619 + ], + [ + -124.0272198, + 44.878597 + ], + [ + -124.0301149, + 44.8791441 + ], + [ + -124.0328042, + 44.8800823 + ], + [ + -124.0351846, + 44.8813754 + ], + [ + -124.0371645, + 44.8829737 + ], + [ + -124.0386679, + 44.884816 + ], + [ + -124.039637, + 44.8868313 + ], + [ + -124.0400344, + 44.8889423 + ], + [ + -124.0398448, + 44.8910679 + ], + [ + -124.0390755, + 44.8931264 + ], + [ + -124.0377559, + 44.8950385 + ], + [ + -124.0359368, + 44.896731 + ], + [ + -124.0323668, + 44.8994513 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16205_s_16089", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0296807, + 44.9248022 + ], + [ + -124.0300472, + 44.9253892 + ], + [ + -124.0307047, + 44.9274672 + ], + [ + -124.030779, + 44.9295964 + ], + [ + -124.0302671, + 44.9316949 + ], + [ + -124.0291886, + 44.9336822 + ], + [ + -124.027585, + 44.9354818 + ], + [ + -124.0255178, + 44.9370246 + ], + [ + -124.0230664, + 44.9382513 + ], + [ + -124.0203252, + 44.9391146 + ], + [ + -124.0173994, + 44.9395815 + ], + [ + -124.0144015, + 44.9396339 + ], + [ + -124.0114469, + 44.9392698 + ], + [ + -124.0086492, + 44.9385032 + ], + [ + -124.0061158, + 44.9373637 + ], + [ + -124.0049997, + 44.9367449 + ], + [ + -124.0023794, + 44.9348889 + ], + [ + -124.0021695, + 44.9346988 + ], + [ + -124.0011522, + 44.9336588 + ], + [ + -124.0008423, + 44.9332987 + ], + [ + -123.9997259, + 44.931729 + ], + [ + -123.9989807, + 44.930052 + ], + [ + -123.9987908, + 44.9294619 + ], + [ + -123.9984492, + 44.9278545 + ], + [ + -123.9984491, + 44.9263197 + ], + [ + -123.9979464, + 44.9258906 + ], + [ + -123.9962637, + 44.9241278 + ], + [ + -123.9950976, + 44.9221658 + ], + [ + -123.9944927, + 44.9200797 + ], + [ + -123.9944722, + 44.9179499 + ], + [ + -123.9950369, + 44.9158582 + ], + [ + -123.996165, + 44.913885 + ], + [ + -123.9978131, + 44.912106 + ], + [ + -123.9999179, + 44.9105896 + ], + [ + -124.0023984, + 44.9093942 + ], + [ + -124.0051594, + 44.9085655 + ], + [ + -124.0080948, + 44.9081354 + ], + [ + -124.0110918, + 44.9081205 + ], + [ + -124.0140354, + 44.9085212 + ], + [ + -124.0168124, + 44.9093223 + ], + [ + -124.0193163, + 44.910493 + ], + [ + -124.0214508, + 44.9119882 + ], + [ + -124.021877, + 44.9123519 + ], + [ + -124.0235903, + 44.9133423 + ], + [ + -124.0252294, + 44.914442 + ], + [ + -124.0254994, + 44.914652 + ], + [ + -124.0277631, + 44.9169486 + ], + [ + -124.0280132, + 44.9172886 + ], + [ + -124.0292748, + 44.9196269 + ], + [ + -124.0293649, + 44.9198769 + ], + [ + -124.0298156, + 44.9219269 + ], + [ + -124.0298457, + 44.9222869 + ], + [ + -124.0298471, + 44.923558 + ], + [ + -124.0298072, + 44.924048 + ], + [ + -124.0296807, + 44.9248022 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16210_s_16214", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -123.9990044, + 45.0082304 + ], + [ + -123.9990288, + 45.0082443 + ], + [ + -123.9990028, + 45.0082673 + ], + [ + -123.9989141, + 45.0083508 + ], + [ + -123.9988898, + 45.0083736 + ], + [ + -123.9980773, + 45.0091335 + ], + [ + -123.9967965, + 45.0103514 + ], + [ + -123.9966466, + 45.0104915 + ], + [ + -123.9962136, + 45.0108896 + ], + [ + -123.9960636, + 45.0110252 + ], + [ + -123.9959097, + 45.0111622 + ], + [ + -123.9950494, + 45.0118638 + ], + [ + -123.9949104, + 45.0119679 + ], + [ + -123.9944775, + 45.012279 + ], + [ + -123.9943225, + 45.012386 + ], + [ + -123.9942089, + 45.0124596 + ], + [ + -123.9942135, + 45.0129664 + ], + [ + -123.9942066, + 45.0131194 + ], + [ + -123.9940652, + 45.0142824 + ], + [ + -123.9940373, + 45.0144234 + ], + [ + -123.9937953, + 45.0153501 + ], + [ + -123.9937553, + 45.0154731 + ], + [ + -123.9935163, + 45.0161176 + ], + [ + -123.9934504, + 45.0162756 + ], + [ + -123.9933646, + 45.0164741 + ], + [ + -123.9932926, + 45.0166351 + ], + [ + -123.9926037, + 45.0178975 + ], + [ + -123.9924887, + 45.0180745 + ], + [ + -123.99176, + 45.0190602 + ], + [ + -123.991609, + 45.0192412 + ], + [ + -123.9912146, + 45.0196889 + ], + [ + -123.9910167, + 45.0199019 + ], + [ + -123.9905826, + 45.0203446 + ], + [ + -123.9903356, + 45.0205836 + ], + [ + -123.9898193, + 45.0210555 + ], + [ + -123.9896631, + 45.0211905 + ], + [ + -123.9894055, + 45.0218489 + ], + [ + -123.9888801, + 45.0229566 + ], + [ + -123.9887092, + 45.0232616 + ], + [ + -123.9882936, + 45.0239358 + ], + [ + -123.9881216, + 45.0241908 + ], + [ + -123.9868492, + 45.0257362 + ], + [ + -123.9866872, + 45.0259002 + ], + [ + -123.9859388, + 45.0265965 + ], + [ + -123.9857649, + 45.0267455 + ], + [ + -123.9850513, + 45.0273148 + ], + [ + -123.9848603, + 45.0274568 + ], + [ + -123.9833219, + 45.0284549 + ], + [ + -123.9830299, + 45.0286199 + ], + [ + -123.9810716, + 45.0295609 + ], + [ + -123.9807055, + 45.029709 + ], + [ + -123.978951, + 45.0303169 + ], + [ + -123.978636, + 45.0304089 + ], + [ + -123.9764887, + 45.0309082 + ], + [ + -123.9761247, + 45.0309722 + ], + [ + -123.9748284, + 45.0311584 + ], + [ + -123.9744623, + 45.0311994 + ], + [ + -123.9714886, + 45.0313246 + ], + [ + -123.9711926, + 45.0313166 + ], + [ + -123.9702519, + 45.0312706 + ], + [ + -123.9698428, + 45.0312416 + ], + [ + -123.9680089, + 45.0310313 + ], + [ + -123.9677139, + 45.0309843 + ], + [ + -123.9673565, + 45.0309241 + ], + [ + -123.9672354, + 45.0309027 + ], + [ + -123.9671589, + 45.030891 + ], + [ + -123.9663245, + 45.0307824 + ], + [ + -123.9660923, + 45.0307427 + ], + [ + -123.9658013, + 45.0307441 + ], + [ + -123.9640046, + 45.0307597 + ], + [ + -123.9639, + 45.0307603 + ], + [ + -123.9623944, + 45.0307661 + ], + [ + -123.9578666, + 45.030808 + ], + [ + -123.957671, + 45.031001 + ], + [ + -123.9554969, + 45.0324457 + ], + [ + -123.9529694, + 45.0335648 + ], + [ + -123.9501842, + 45.0343157 + ], + [ + -123.9472467, + 45.0346701 + ], + [ + -123.9442679, + 45.0346145 + ], + [ + -123.9413607, + 45.0341512 + ], + [ + -123.9387175, + 45.0335332 + ], + [ + -123.9381047, + 45.0333939 + ], + [ + -123.9365569, + 45.0329753 + ], + [ + -123.9362048, + 45.0328642 + ], + [ + -123.9338025, + 45.0319151 + ], + [ + -123.9334445, + 45.0317421 + ], + [ + -123.9328888, + 45.0314256 + ], + [ + -123.9327035, + 45.0313472 + ], + [ + -123.9325578, + 45.0312848 + ], + [ + -123.9320968, + 45.0310847 + ], + [ + -123.9301217, + 45.030066 + ], + [ + -123.9284001, + 45.0288376 + ], + [ + -123.9281601, + 45.0286365 + ], + [ + -123.9277743, + 45.0282375 + ], + [ + -123.9277364, + 45.0282175 + ], + [ + -123.9262517, + 45.0273238 + ], + [ + -123.9259827, + 45.0271398 + ], + [ + -123.9250522, + 45.0264445 + ], + [ + -123.9247825, + 45.0262242 + ], + [ + -123.9247081, + 45.026204 + ], + [ + -123.9246755, + 45.0261951 + ], + [ + -123.9243314, + 45.0261011 + ], + [ + -123.9223561, + 45.0254432 + ], + [ + -123.9218851, + 45.0252562 + ], + [ + -123.9210886, + 45.0248654 + ], + [ + -123.9210216, + 45.0248544 + ], + [ + -123.9205316, + 45.0247714 + ], + [ + -123.918459, + 45.0243079 + ], + [ + -123.9181129, + 45.0242109 + ], + [ + -123.916586, + 45.0236058 + ], + [ + -123.9165349, + 45.0236034 + ], + [ + -123.9140138, + 45.0233331 + ], + [ + -123.9137528, + 45.0232891 + ], + [ + -123.9096119, + 45.0221181 + ], + [ + -123.9093978, + 45.0220301 + ], + [ + -123.9076169, + 45.0211738 + ], + [ + -123.9073639, + 45.0210328 + ], + [ + -123.9062111, + 45.0201848 + ], + [ + -123.9041152, + 45.0196509 + ], + [ + -123.9015415, + 45.0185536 + ], + [ + -123.8993191, + 45.0171212 + ], + [ + -123.8975336, + 45.0154088 + ], + [ + -123.8962534, + 45.0134823 + ], + [ + -123.8955278, + 45.0114156 + ], + [ + -123.8953845, + 45.0092881 + ], + [ + -123.8958291, + 45.0071818 + ], + [ + -123.8968444, + 45.0051774 + ], + [ + -123.8983912, + 45.003352 + ], + [ + -123.9004102, + 45.0017758 + ], + [ + -123.9028237, + 45.0005093 + ], + [ + -123.9055391, + 44.9996011 + ], + [ + -123.9084519, + 44.9990861 + ], + [ + -123.909151, + 44.9990623 + ], + [ + -123.9093801, + 44.9989924 + ], + [ + -123.9121365, + 44.9983627 + ], + [ + -123.9150107, + 44.9981125 + ], + [ + -123.9178999, + 44.9982505 + ], + [ + -123.9207008, + 44.9987719 + ], + [ + -123.9233134, + 44.999658 + ], + [ + -123.9256442, + 45.0008772 + ], + [ + -123.92761, + 45.0023859 + ], + [ + -123.9281193, + 45.0029664 + ], + [ + -123.9284765, + 45.0030544 + ], + [ + -123.9288855, + 45.0031994 + ], + [ + -123.9309185, + 45.0041691 + ], + [ + -123.931257, + 45.0042294 + ], + [ + -123.9315639, + 45.0042884 + ], + [ + -123.9342845, + 45.0050139 + ], + [ + -123.9345585, + 45.0051089 + ], + [ + -123.9373904, + 45.0063928 + ], + [ + -123.9379328, + 45.0065454 + ], + [ + -123.9387623, + 45.0067545 + ], + [ + -123.9401343, + 45.0071544 + ], + [ + -123.9405223, + 45.0072834 + ], + [ + -123.9419739, + 45.0078354 + ], + [ + -123.9423429, + 45.0079943 + ], + [ + -123.9440266, + 45.0088346 + ], + [ + -123.9441262, + 45.0088918 + ], + [ + -123.9464155, + 45.0085115 + ], + [ + -123.9466415, + 45.0084905 + ], + [ + -123.9482736, + 45.0084014 + ], + [ + -123.9485756, + 45.0083964 + ], + [ + -123.9496564, + 45.0084056 + ], + [ + -123.9499844, + 45.0084166 + ], + [ + -123.9511153, + 45.0084844 + ], + [ + -123.9514042, + 45.0085094 + ], + [ + -123.9527221, + 45.008665 + ], + [ + -123.953055, + 45.008715 + ], + [ + -123.9541323, + 45.0089059 + ], + [ + -123.9544642, + 45.0089739 + ], + [ + -123.954923, + 45.0090734 + ], + [ + -123.9550521, + 45.009103 + ], + [ + -123.9620531, + 45.0090384 + ], + [ + -123.9621703, + 45.0090376 + ], + [ + -123.9625962, + 45.009036 + ], + [ + -123.9625997, + 45.008993 + ], + [ + -123.9626157, + 45.008856 + ], + [ + -123.9628323, + 45.0077274 + ], + [ + -123.9628743, + 45.0075704 + ], + [ + -123.9630549, + 45.0069847 + ], + [ + -123.9630919, + 45.0068787 + ], + [ + -123.9632622, + 45.0064323 + ], + [ + -123.9633052, + 45.0063283 + ], + [ + -123.9639068, + 45.0051361 + ], + [ + -123.9639932, + 45.0049921 + ], + [ + -123.9640905, + 45.0048199 + ], + [ + -123.9641134, + 45.0047797 + ], + [ + -123.9643252, + 45.0044094 + ], + [ + -123.9647594, + 45.0036097 + ], + [ + -123.9650125, + 45.0031721 + ], + [ + -123.9654894, + 45.0023963 + ], + [ + -123.9656112, + 45.0021965 + ], + [ + -123.9660255, + 45.001572 + ], + [ + -123.9661175, + 45.001444 + ], + [ + -123.9667715, + 45.0006242 + ], + [ + -123.9668746, + 45.0005072 + ], + [ + -123.9674175, + 44.9999323 + ], + [ + -123.9675135, + 44.9998373 + ], + [ + -123.9681557, + 44.9992459 + ], + [ + -123.9682757, + 44.9991429 + ], + [ + -123.9686144, + 44.9988621 + ], + [ + -123.9687804, + 44.9987291 + ], + [ + -123.9701136, + 44.9977851 + ], + [ + -123.9703676, + 44.9976261 + ], + [ + -123.9722382, + 44.9966248 + ], + [ + -123.9726562, + 44.9964349 + ], + [ + -123.973641, + 44.996034 + ], + [ + -123.9744768, + 44.9952525 + ], + [ + -123.9746827, + 44.9950589 + ], + [ + -123.974946, + 44.9948184 + ], + [ + -123.9751061, + 44.9946764 + ], + [ + -123.9753684, + 44.99445 + ], + [ + -123.9753934, + 44.994429 + ], + [ + -123.9775459, + 44.9929446 + ], + [ + -123.980065, + 44.9917867 + ], + [ + -123.982854, + 44.9909997 + ], + [ + -123.9858058, + 44.9906138 + ], + [ + -123.9888069, + 44.9906439 + ], + [ + -123.9917421, + 44.9910888 + ], + [ + -123.9944987, + 44.9919314 + ], + [ + -123.9969707, + 44.9931394 + ], + [ + -123.9990632, + 44.9946664 + ], + [ + -124.0006958, + 44.9964536 + ], + [ + -124.0018057, + 44.9984325 + ], + [ + -124.0023502, + 45.000527 + ], + [ + -124.0023084, + 45.0026566 + ], + [ + -124.0016817, + 45.0047395 + ], + [ + -124.0004942, + 45.0066956 + ], + [ + -123.9990044, + 45.0082304 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16211_s_16192", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0776479, + 44.814432 + ], + [ + -124.0777212, + 44.8147272 + ], + [ + -124.0780405, + 44.8157076 + ], + [ + -124.0784272, + 44.8178196 + ], + [ + -124.0782276, + 44.8199447 + ], + [ + -124.0774493, + 44.8220012 + ], + [ + -124.0761222, + 44.8239102 + ], + [ + -124.0742972, + 44.8255982 + ], + [ + -124.0720444, + 44.8270004 + ], + [ + -124.0694504, + 44.8280627 + ], + [ + -124.0666149, + 44.8287445 + ], + [ + -124.063647, + 44.8290194 + ], + [ + -124.0606607, + 44.8288769 + ], + [ + -124.0577709, + 44.8283226 + ], + [ + -124.0550887, + 44.8273776 + ], + [ + -124.0527172, + 44.8260783 + ], + [ + -124.0507476, + 44.8244747 + ], + [ + -124.0492555, + 44.8226285 + ], + [ + -124.0482983, + 44.8206105 + ], + [ + -124.0478886, + 44.8193504 + ], + [ + -124.0477276, + 44.8187881 + ], + [ + -124.0474079, + 44.8174981 + ], + [ + -124.0472019, + 44.8162448 + ], + [ + -124.0471321, + 44.8153948 + ], + [ + -124.04711, + 44.8145155 + ], + [ + -124.0471397, + 44.8135796 + ], + [ + -124.0470842, + 44.8125629 + ], + [ + -124.0470685, + 44.8124745 + ], + [ + -124.0470048, + 44.8122087 + ], + [ + -124.0470117, + 44.8122078 + ], + [ + -124.046761, + 44.8114612 + ], + [ + -124.0466062, + 44.8106008 + ], + [ + -124.0462877, + 44.8093087 + ], + [ + -124.046062, + 44.8071849 + ], + [ + -124.0464226, + 44.8050705 + ], + [ + -124.0473556, + 44.8030469 + ], + [ + -124.0488252, + 44.8011917 + ], + [ + -124.0507748, + 44.7995763 + ], + [ + -124.0531295, + 44.7982626 + ], + [ + -124.0557987, + 44.7973013 + ], + [ + -124.0586801, + 44.796729 + ], + [ + -124.0616628, + 44.796568 + ], + [ + -124.0646324, + 44.7968243 + ], + [ + -124.0674747, + 44.7974881 + ], + [ + -124.0700807, + 44.7985338 + ], + [ + -124.0723501, + 44.7999215 + ], + [ + -124.0741958, + 44.8015976 + ], + [ + -124.0755469, + 44.8034979 + ], + [ + -124.0763513, + 44.8055493 + ], + [ + -124.0767317, + 44.8070893 + ], + [ + -124.0768379, + 44.8075868 + ], + [ + -124.0769319, + 44.8081073 + ], + [ + -124.0770942, + 44.8085494 + ], + [ + -124.0772144, + 44.8090493 + ], + [ + -124.0773124, + 44.8095192 + ], + [ + -124.0774526, + 44.8103092 + ], + [ + -124.0775612, + 44.8112444 + ], + [ + -124.0776617, + 44.8130644 + ], + [ + -124.0776697, + 44.8137325 + ], + [ + -124.0776479, + 44.814432 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16212_s_16079", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0208492, + 44.9878359 + ], + [ + -124.0219243, + 44.9886656 + ], + [ + -124.0221289, + 44.9888464 + ], + [ + -124.0232862, + 44.99002 + ], + [ + -124.0234652, + 44.9902298 + ], + [ + -124.0246363, + 44.9919154 + ], + [ + -124.0253805, + 44.9937191 + ], + [ + -124.0254317, + 44.9938999 + ], + [ + -124.0257208, + 44.9956315 + ], + [ + -124.0256157, + 44.9973736 + ], + [ + -124.0255764, + 44.9975989 + ], + [ + -124.0255434, + 44.9977763 + ], + [ + -124.0254851, + 44.9980706 + ], + [ + -124.0247781, + 45.0001405 + ], + [ + -124.0235155, + 45.0020727 + ], + [ + -124.0217456, + 45.003793 + ], + [ + -124.0195367, + 45.0052353 + ], + [ + -124.0169734, + 45.0063441 + ], + [ + -124.0141544, + 45.0070768 + ], + [ + -124.011188, + 45.0074051 + ], + [ + -124.0081883, + 45.0073166 + ], + [ + -124.0052707, + 45.0068145 + ], + [ + -124.0025473, + 45.0059182 + ], + [ + -124.0014962, + 45.0053737 + ], + [ + -123.9995626, + 45.0049064 + ], + [ + -123.9992037, + 45.0047848 + ], + [ + -123.9966493, + 45.0036913 + ], + [ + -123.9944424, + 45.0022671 + ], + [ + -123.9926667, + 45.0005663 + ], + [ + -123.9913896, + 44.9986535 + ], + [ + -123.9906594, + 44.9966013 + ], + [ + -123.990504, + 44.9944876 + ], + [ + -123.9909022, + 44.9925252 + ], + [ + -123.9906, + 44.9912129 + ], + [ + -123.9904087, + 44.9890874 + ], + [ + -123.9908055, + 44.9869763 + ], + [ + -123.9917749, + 44.9849606 + ], + [ + -123.9932797, + 44.9831179 + ], + [ + -123.995262, + 44.9815189 + ], + [ + -123.9976457, + 44.980225 + ], + [ + -124.0003391, + 44.979286 + ], + [ + -124.0032389, + 44.978738 + ], + [ + -124.0062335, + 44.9786018 + ], + [ + -124.0092081, + 44.9788829 + ], + [ + -124.0120482, + 44.9795704 + ], + [ + -124.014645, + 44.9806379 + ], + [ + -124.0168985, + 44.9820443 + ], + [ + -124.0187222, + 44.9837357 + ], + [ + -124.020046, + 44.9856472 + ], + [ + -124.020819, + 44.9877051 + ], + [ + -124.0208492, + 44.9878359 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16214_s_16215", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -123.8986333, + 45.0167471 + ], + [ + -123.8982961, + 45.0172214 + ], + [ + -123.8965947, + 45.0188066 + ], + [ + -123.8963747, + 45.0189766 + ], + [ + -123.8940317, + 45.0204514 + ], + [ + -123.8913146, + 45.0215571 + ], + [ + -123.8883371, + 45.0222477 + ], + [ + -123.888207, + 45.0222677 + ], + [ + -123.8856429, + 45.0225038 + ], + [ + -123.8830594, + 45.0224307 + ], + [ + -123.88053, + 45.0220504 + ], + [ + -123.8803899, + 45.0220204 + ], + [ + -123.8788139, + 45.0216146 + ], + [ + -123.8777815, + 45.0213025 + ], + [ + -123.876991, + 45.0211517 + ], + [ + -123.8741816, + 45.0203994 + ], + [ + -123.8716331, + 45.0192728 + ], + [ + -123.8694436, + 45.0178152 + ], + [ + -123.8676972, + 45.0160826 + ], + [ + -123.866461, + 45.0141416 + ], + [ + -123.8657825, + 45.0120668 + ], + [ + -123.8656877, + 45.009938 + ], + [ + -123.8661802, + 45.007837 + ], + [ + -123.8672409, + 45.0058446 + ], + [ + -123.8688291, + 45.0040371 + ], + [ + -123.8708837, + 45.0024842 + ], + [ + -123.8733258, + 45.0012455 + ], + [ + -123.8752664, + 45.0006234 + ], + [ + -123.8767774, + 44.9993277 + ], + [ + -123.8771273, + 44.9990877 + ], + [ + -123.8796304, + 44.9976971 + ], + [ + -123.8803165, + 44.9973917 + ], + [ + -123.8811758, + 44.9968991 + ], + [ + -123.8839298, + 44.9956401 + ], + [ + -123.8846598, + 44.9953801 + ], + [ + -123.8881795, + 44.9944886 + ], + [ + -123.8886195, + 44.9944186 + ], + [ + -123.8918868, + 44.9941555 + ], + [ + -123.8987494, + 44.9941288 + ], + [ + -123.9013908, + 44.9938252 + ], + [ + -123.9035362, + 44.9936875 + ], + [ + -123.904246, + 44.9936775 + ], + [ + -123.9072367, + 44.9938439 + ], + [ + -123.9081065, + 44.9939539 + ], + [ + -123.9111403, + 44.9945719 + ], + [ + -123.9119102, + 44.9947918 + ], + [ + -123.9126725, + 44.9950269 + ], + [ + -123.9198516, + 44.9974065 + ], + [ + -123.9211253, + 44.9978816 + ], + [ + -123.9216052, + 44.9980815 + ], + [ + -123.9229227, + 44.9986973 + ], + [ + -123.9233827, + 44.9989373 + ], + [ + -123.9262257, + 45.0008651 + ], + [ + -123.9268858, + 45.001445 + ], + [ + -123.9288667, + 45.0037039 + ], + [ + -123.9293368, + 45.0044238 + ], + [ + -123.9303646, + 45.0065513 + ], + [ + -123.9307529, + 45.0087834 + ], + [ + -123.9304851, + 45.0110243 + ], + [ + -123.9295725, + 45.0131781 + ], + [ + -123.9280543, + 45.0151525 + ], + [ + -123.9259953, + 45.0168628 + ], + [ + -123.9234839, + 45.0182358 + ], + [ + -123.9217132, + 45.0188413 + ], + [ + -123.9217265, + 45.0188605 + ], + [ + -123.9206364, + 45.0192405 + ], + [ + -123.9195336, + 45.0195874 + ], + [ + -123.9188235, + 45.0197875 + ], + [ + -123.9150689, + 45.0204708 + ], + [ + -123.9134886, + 45.0206108 + ], + [ + -123.9127861, + 45.0206498 + ], + [ + -123.9113707, + 45.0208116 + ], + [ + -123.908227, + 45.0207088 + ], + [ + -123.9051793, + 45.0201525 + ], + [ + -123.9023563, + 45.0191662 + ], + [ + -123.8998771, + 45.0177915 + ], + [ + -123.8986333, + 45.0167471 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16215_s_16183", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -123.9503598, + 45.0084732 + ], + [ + -123.9510372, + 45.0084836 + ], + [ + -123.9514771, + 45.0085236 + ], + [ + -123.9544034, + 45.009 + ], + [ + -123.9571425, + 45.0098723 + ], + [ + -123.9595892, + 45.0111067 + ], + [ + -123.9616495, + 45.012656 + ], + [ + -123.9632442, + 45.0144606 + ], + [ + -123.964312, + 45.0164512 + ], + [ + -123.9648118, + 45.0185513 + ], + [ + -123.9647244, + 45.0206802 + ], + [ + -123.9640531, + 45.0227561 + ], + [ + -123.9628235, + 45.0246993 + ], + [ + -123.9610829, + 45.0264349 + ], + [ + -123.9588982, + 45.0278963 + ], + [ + -123.9563533, + 45.0290274 + ], + [ + -123.953546, + 45.0297846 + ], + [ + -123.9507577, + 45.030118 + ], + [ + -123.9490815, + 45.0305095 + ], + [ + -123.9460246, + 45.0309847 + ], + [ + -123.9450344, + 45.0310647 + ], + [ + -123.9418001, + 45.0310823 + ], + [ + -123.94137, + 45.0310523 + ], + [ + -123.9385899, + 45.0306719 + ], + [ + -123.9379598, + 45.0305419 + ], + [ + -123.93552, + 45.0298735 + ], + [ + -123.9352599, + 45.0297835 + ], + [ + -123.9326216, + 45.0286218 + ], + [ + -123.9320915, + 45.0283317 + ], + [ + -123.9293167, + 45.0263627 + ], + [ + -123.9290667, + 45.0261327 + ], + [ + -123.9274232, + 45.0242509 + ], + [ + -123.9273662, + 45.0241677 + ], + [ + -123.9254565, + 45.0235643 + ], + [ + -123.9251641, + 45.0234693 + ], + [ + -123.9202235, + 45.0218191 + ], + [ + -123.9193605, + 45.0215067 + ], + [ + -123.9187204, + 45.0212567 + ], + [ + -123.9178801, + 45.0209032 + ], + [ + -123.9151799, + 45.019683 + ], + [ + -123.9139203, + 45.0190483 + ], + [ + -123.9115802, + 45.0177381 + ], + [ + -123.9105404, + 45.0171002 + ], + [ + -123.9091404, + 45.0161601 + ], + [ + -123.9087995, + 45.0158769 + ], + [ + -123.907841, + 45.015597 + ], + [ + -123.9063291, + 45.0150854 + ], + [ + -123.905219, + 45.0146553 + ], + [ + -123.9040547, + 45.0141554 + ], + [ + -123.9025407, + 45.0134382 + ], + [ + -123.901986, + 45.0134396 + ], + [ + -123.9014626, + 45.0134284 + ], + [ + -123.8989165, + 45.0134696 + ], + [ + -123.898049, + 45.0136474 + ], + [ + -123.8971762, + 45.014075 + ], + [ + -123.8942735, + 45.0161268 + ], + [ + -123.8915738, + 45.0181158 + ], + [ + -123.8892891, + 45.0194979 + ], + [ + -123.886668, + 45.0205373 + ], + [ + -123.8838113, + 45.021194 + ], + [ + -123.8808287, + 45.0214427 + ], + [ + -123.8778351, + 45.0212739 + ], + [ + -123.8749455, + 45.0206941 + ], + [ + -123.872271, + 45.0197255 + ], + [ + -123.8699144, + 45.0184054 + ], + [ + -123.8679663, + 45.0167846 + ], + [ + -123.8665016, + 45.0149253 + ], + [ + -123.8655765, + 45.0128991 + ], + [ + -123.8652265, + 45.0107838 + ], + [ + -123.8654649, + 45.0086606 + ], + [ + -123.8662827, + 45.0066113 + ], + [ + -123.8676482, + 45.0047145 + ], + [ + -123.8695091, + 45.0030431 + ], + [ + -123.8723191, + 45.0009734 + ], + [ + -123.8725421, + 45.0008125 + ], + [ + -123.8765321, + 44.9979929 + ], + [ + -123.8786387, + 44.9967496 + ], + [ + -123.8816185, + 44.9952898 + ], + [ + -123.8832898, + 44.994578 + ], + [ + -123.8844896, + 44.994138 + ], + [ + -123.8856871, + 44.9937444 + ], + [ + -123.8869869, + 44.9933645 + ], + [ + -123.8885713, + 44.9929719 + ], + [ + -123.8910109, + 44.992472 + ], + [ + -123.8919234, + 44.9923064 + ], + [ + -123.8929332, + 44.9921464 + ], + [ + -123.8944611, + 44.9919614 + ], + [ + -123.8960008, + 44.9918314 + ], + [ + -123.8974614, + 44.9917582 + ], + [ + -123.9011707, + 44.9916982 + ], + [ + -123.901984, + 44.9917003 + ], + [ + -123.9023931, + 44.9917091 + ], + [ + -123.9041121, + 44.9916631 + ], + [ + -123.9052934, + 44.9916638 + ], + [ + -123.9067231, + 44.9917038 + ], + [ + -123.9092498, + 44.9919247 + ], + [ + -123.9100597, + 44.9920447 + ], + [ + -123.9123685, + 44.9925237 + ], + [ + -123.9135183, + 44.9928336 + ], + [ + -123.9153954, + 44.9934453 + ], + [ + -123.9166652, + 44.9939352 + ], + [ + -123.9186715, + 44.9948602 + ], + [ + -123.9199618, + 44.9955626 + ], + [ + -123.9203788, + 44.9957601 + ], + [ + -123.9205819, + 44.9958194 + ], + [ + -123.922282, + 44.996214 + ], + [ + -123.9231031, + 44.9964232 + ], + [ + -123.923463, + 44.9965231 + ], + [ + -123.926048, + 44.9974499 + ], + [ + -123.926428, + 44.9976198 + ], + [ + -123.9288802, + 44.9989824 + ], + [ + -123.9308931, + 45.0006689 + ], + [ + -123.9313146, + 45.0011052 + ], + [ + -123.9322898, + 45.0016511 + ], + [ + -123.9338231, + 45.0023439 + ], + [ + -123.9380682, + 45.0037617 + ], + [ + -123.9413709, + 45.0048052 + ], + [ + -123.9420906, + 45.0050486 + ], + [ + -123.9437115, + 45.0056342 + ], + [ + -123.9456064, + 45.0062485 + ], + [ + -123.946835, + 45.0066953 + ], + [ + -123.9476249, + 45.0070152 + ], + [ + -123.9498543, + 45.0081148 + ], + [ + -123.9503598, + 45.0084732 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16215_s_16215", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -123.8656962, + 45.0106748 + ], + [ + -123.8659585, + 45.0085531 + ], + [ + -123.8667993, + 45.0065085 + ], + [ + -123.8681861, + 45.0046195 + ], + [ + -123.8700656, + 45.0029587 + ], + [ + -123.8723656, + 45.0015899 + ], + [ + -123.8749978, + 45.0005657 + ], + [ + -123.8778609, + 44.9999254 + ], + [ + -123.880845, + 44.9996937 + ], + [ + -123.8838355, + 44.9998793 + ], + [ + -123.8867175, + 45.0004753 + ], + [ + -123.8893804, + 45.0014587 + ], + [ + -123.8917218, + 45.0027916 + ], + [ + -123.8936518, + 45.0044231 + ], + [ + -123.8950962, + 45.0062902 + ], + [ + -123.8959994, + 45.0083214 + ], + [ + -123.8963267, + 45.0104385 + ], + [ + -123.8960655, + 45.0125603 + ], + [ + -123.8952257, + 45.0146051 + ], + [ + -123.8938396, + 45.0164945 + ], + [ + -123.8919603, + 45.0181556 + ], + [ + -123.8896601, + 45.0195248 + ], + [ + -123.8870273, + 45.0205494 + ], + [ + -123.8841633, + 45.0211899 + ], + [ + -123.8811781, + 45.0214217 + ], + [ + -123.8781865, + 45.021236 + ], + [ + -123.8753035, + 45.0206398 + ], + [ + -123.87264, + 45.0196562 + ], + [ + -123.8702983, + 45.0183228 + ], + [ + -123.8683685, + 45.016691 + ], + [ + -123.8669247, + 45.0148235 + ], + [ + -123.8660224, + 45.0127921 + ], + [ + -123.8656962, + 45.0106748 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16275_s_15889", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.067171, + 44.6402763 + ], + [ + -124.0655552, + 44.6418033 + ], + [ + -124.0634064, + 44.6431858 + ], + [ + -124.0631139, + 44.6433407 + ], + [ + -124.060555, + 44.6444359 + ], + [ + -124.057746, + 44.6451536 + ], + [ + -124.0547948, + 44.6454662 + ], + [ + -124.0518149, + 44.6453616 + ], + [ + -124.0489208, + 44.644844 + ], + [ + -124.0462239, + 44.6439332 + ], + [ + -124.0438278, + 44.6426642 + ], + [ + -124.0418246, + 44.6410859 + ], + [ + -124.0402913, + 44.6392588 + ], + [ + -124.0392868, + 44.6372532 + ], + [ + -124.0392018, + 44.6368437 + ], + [ + -124.038857, + 44.636053 + ], + [ + -124.0385376, + 44.6339812 + ], + [ + -124.038778, + 44.631904 + ], + [ + -124.0395695, + 44.6298978 + ], + [ + -124.0408828, + 44.6280364 + ], + [ + -124.0426697, + 44.6263883 + ], + [ + -124.0448642, + 44.6250141 + ], + [ + -124.0454433, + 44.6247164 + ], + [ + -124.0469502, + 44.623035 + ], + [ + -124.0490169, + 44.6214995 + ], + [ + -124.0514634, + 44.6202813 + ], + [ + -124.0541954, + 44.6194274 + ], + [ + -124.0571082, + 44.6189705 + ], + [ + -124.0600897, + 44.6189282 + ], + [ + -124.0630256, + 44.619302 + ], + [ + -124.065803, + 44.6200777 + ], + [ + -124.0665941, + 44.6203653 + ], + [ + -124.0690919, + 44.6215049 + ], + [ + -124.0712331, + 44.6229686 + ], + [ + -124.0729362, + 44.6247011 + ], + [ + -124.0741368, + 44.6266365 + ], + [ + -124.0747891, + 44.6287014 + ], + [ + -124.0748684, + 44.6308175 + ], + [ + -124.0743716, + 44.6329044 + ], + [ + -124.0733174, + 44.6348829 + ], + [ + -124.0726882, + 44.6357872 + ], + [ + -124.0724607, + 44.6361012 + ], + [ + -124.0723403, + 44.6362609 + ], + [ + -124.0704241, + 44.6382409 + ], + [ + -124.0679443, + 44.6398711 + ], + [ + -124.067171, + 44.6402763 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16275_s_16055", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0660592, + 44.6201728 + ], + [ + -124.066615, + 44.6203757 + ], + [ + -124.069092, + 44.6215079 + ], + [ + -124.0712179, + 44.6229593 + ], + [ + -124.072913, + 44.6246757 + ], + [ + -124.0741142, + 44.626593 + ], + [ + -124.0747764, + 44.6286394 + ], + [ + -124.0748748, + 44.6307386 + ], + [ + -124.0744058, + 44.6328122 + ], + [ + -124.0733867, + 44.6347825 + ], + [ + -124.0727769, + 44.6356825 + ], + [ + -124.0717426, + 44.6369749 + ], + [ + -124.0716026, + 44.6371249 + ], + [ + -124.0699964, + 44.638565 + ], + [ + -124.0680725, + 44.6397907 + ], + [ + -124.0675125, + 44.6400908 + ], + [ + -124.0649623, + 44.641196 + ], + [ + -124.062159, + 44.6419247 + ], + [ + -124.0592104, + 44.6422489 + ], + [ + -124.0562299, + 44.6421561 + ], + [ + -124.0533321, + 44.6416498 + ], + [ + -124.0506283, + 44.6407496 + ], + [ + -124.0482226, + 44.6394901 + ], + [ + -124.0462073, + 44.6379196 + ], + [ + -124.0446601, + 44.6360986 + ], + [ + -124.0436402, + 44.634097 + ], + [ + -124.0431868, + 44.6319919 + ], + [ + -124.0433173, + 44.629864 + ], + [ + -124.0439504, + 44.6280175 + ], + [ + -124.0443087, + 44.6266812 + ], + [ + -124.0454304, + 44.6247076 + ], + [ + -124.0470695, + 44.6229282 + ], + [ + -124.0491632, + 44.6214114 + ], + [ + -124.0516308, + 44.6202153 + ], + [ + -124.0543777, + 44.619386 + ], + [ + -124.0572983, + 44.6189553 + ], + [ + -124.0602803, + 44.6189397 + ], + [ + -124.0632094, + 44.6193399 + ], + [ + -124.065973, + 44.6201404 + ], + [ + -124.0660592, + 44.6201728 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16276_s_15885", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -123.9503665, + 44.6158501 + ], + [ + -123.9517524, + 44.6166694 + ], + [ + -123.9536348, + 44.6183215 + ], + [ + -123.9550298, + 44.6202041 + ], + [ + -123.9558838, + 44.6222448 + ], + [ + -123.956164, + 44.6243654 + ], + [ + -123.9558595, + 44.6264842 + ], + [ + -123.9549821, + 44.6285199 + ], + [ + -123.9535652, + 44.6303942 + ], + [ + -123.9516634, + 44.6320351 + ], + [ + -123.9493498, + 44.6333795 + ], + [ + -123.9467132, + 44.6343757 + ], + [ + -123.943855, + 44.6349854 + ], + [ + -123.9408851, + 44.6351852 + ], + [ + -123.9404767, + 44.6351839 + ], + [ + -123.9362363, + 44.63474 + ], + [ + -123.9355315, + 44.6345915 + ], + [ + -123.9330469, + 44.6338937 + ], + [ + -123.9307714, + 44.6328964 + ], + [ + -123.9303744, + 44.6326861 + ], + [ + -123.9288036, + 44.6317293 + ], + [ + -123.9282736, + 44.6313592 + ], + [ + -123.9280412, + 44.631147 + ], + [ + -123.9275355, + 44.6308979 + ], + [ + -123.9255622, + 44.6294813 + ], + [ + -123.9239856, + 44.6278306 + ], + [ + -123.922859, + 44.6260016 + ], + [ + -123.9222205, + 44.6240562 + ], + [ + -123.9221201, + 44.6224999 + ], + [ + -123.9221153, + 44.6224999 + ], + [ + -123.9221147, + 44.6224162 + ], + [ + -123.9220917, + 44.6220602 + ], + [ + -123.9221111, + 44.6219603 + ], + [ + -123.9221068, + 44.6214113 + ], + [ + -123.9223827, + 44.6192905 + ], + [ + -123.9232325, + 44.6172488 + ], + [ + -123.9246236, + 44.6153648 + ], + [ + -123.9265024, + 44.6137107 + ], + [ + -123.9287968, + 44.6123503 + ], + [ + -123.9314186, + 44.6113356 + ], + [ + -123.934267, + 44.6107057 + ], + [ + -123.9372328, + 44.6104849 + ], + [ + -123.9402018, + 44.6106814 + ], + [ + -123.9430602, + 44.6112879 + ], + [ + -123.9456981, + 44.612281 + ], + [ + -123.9480142, + 44.6136226 + ], + [ + -123.9499194, + 44.6152611 + ], + [ + -123.9503665, + 44.6158501 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16278_s_15894", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -123.9390848, + 44.6158946 + ], + [ + -123.9396849, + 44.6181195 + ], + [ + -123.939755, + 44.6187494 + ], + [ + -123.9397906, + 44.6200489 + ], + [ + -123.9397109, + 44.6214589 + ], + [ + -123.9394885, + 44.6229226 + ], + [ + -123.9387999, + 44.6256891 + ], + [ + -123.9385254, + 44.6271839 + ], + [ + -123.9381799, + 44.6284638 + ], + [ + -123.93799, + 44.6289938 + ], + [ + -123.9379874, + 44.6289992 + ], + [ + -123.9385615, + 44.6295487 + ], + [ + -123.9398374, + 44.6314511 + ], + [ + -123.9405746, + 44.6334937 + ], + [ + -123.9407452, + 44.6355995 + ], + [ + -123.9403426, + 44.6376892 + ], + [ + -123.9393822, + 44.639684 + ], + [ + -123.9378726, + 44.6420442 + ], + [ + -123.9372966, + 44.6428466 + ], + [ + -123.9368783, + 44.6438874 + ], + [ + -123.9367131, + 44.6442717 + ], + [ + -123.9357304, + 44.6464143 + ], + [ + -123.93508, + 44.6480051 + ], + [ + -123.9343918, + 44.6493511 + ], + [ + -123.9342618, + 44.6495612 + ], + [ + -123.9329101, + 44.6512965 + ], + [ + -123.9324702, + 44.6517565 + ], + [ + -123.9305544, + 44.6533895 + ], + [ + -123.9282289, + 44.6547242 + ], + [ + -123.9255833, + 44.6557095 + ], + [ + -123.9227191, + 44.6563073 + ], + [ + -123.9197465, + 44.6564947 + ], + [ + -123.9167799, + 44.6562646 + ], + [ + -123.9139332, + 44.6556256 + ], + [ + -123.9113159, + 44.6546025 + ], + [ + -123.9090286, + 44.6532346 + ], + [ + -123.9071593, + 44.6515743 + ], + [ + -123.9057798, + 44.6496857 + ], + [ + -123.904943, + 44.6476412 + ], + [ + -123.904681, + 44.6455194 + ], + [ + -123.9050039, + 44.643402 + ], + [ + -123.9058992, + 44.6413702 + ], + [ + -123.9062947, + 44.6408547 + ], + [ + -123.9065819, + 44.6401531 + ], + [ + -123.9067281, + 44.6398164 + ], + [ + -123.9077009, + 44.6376975 + ], + [ + -123.9083836, + 44.6360008 + ], + [ + -123.9085014, + 44.6357609 + ], + [ + -123.9084052, + 44.6352746 + ], + [ + -123.9082903, + 44.6351074 + ], + [ + -123.9073692, + 44.6334271 + ], + [ + -123.9068504, + 44.6316611 + ], + [ + -123.9067283, + 44.6309593 + ], + [ + -123.906585, + 44.6304431 + ], + [ + -123.9062952, + 44.6282463 + ], + [ + -123.9066329, + 44.626053 + ], + [ + -123.906723, + 44.625753 + ], + [ + -123.9078633, + 44.6233587 + ], + [ + -123.9080834, + 44.6230287 + ], + [ + -123.9087535, + 44.6222554 + ], + [ + -123.9087817, + 44.6221254 + ], + [ + -123.9089151, + 44.6215906 + ], + [ + -123.9087811, + 44.6213845 + ], + [ + -123.9079831, + 44.6198699 + ], + [ + -123.9075089, + 44.6182876 + ], + [ + -123.9074589, + 44.6180275 + ], + [ + -123.9073244, + 44.616231 + ], + [ + -123.9076068, + 44.6144432 + ], + [ + -123.9077369, + 44.6139732 + ], + [ + -123.9085189, + 44.6122823 + ], + [ + -123.908525, + 44.6121133 + ], + [ + -123.9092442, + 44.6099388 + ], + [ + -123.9105707, + 44.6079154 + ], + [ + -123.9124484, + 44.6061286 + ], + [ + -123.9147979, + 44.6046539 + ], + [ + -123.9175199, + 44.6035536 + ], + [ + -123.9204992, + 44.6028743 + ], + [ + -123.9236101, + 44.6026446 + ], + [ + -123.924278, + 44.6026446 + ], + [ + -123.927245, + 44.6028534 + ], + [ + -123.9300981, + 44.6034716 + ], + [ + -123.9327276, + 44.6044755 + ], + [ + -123.9350326, + 44.6058265 + ], + [ + -123.9369244, + 44.6074728 + ], + [ + -123.9383304, + 44.6093511 + ], + [ + -123.9391965, + 44.6113893 + ], + [ + -123.9394893, + 44.6135089 + ], + [ + -123.9391976, + 44.6156287 + ], + [ + -123.9390848, + 44.6158946 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16278_s_22287", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -123.9707105, + 44.6759685 + ], + [ + -123.9709447, + 44.6765052 + ], + [ + -123.9712694, + 44.6785328 + ], + [ + -123.9712845, + 44.6790808 + ], + [ + -123.9712549, + 44.6800052 + ], + [ + -123.971212, + 44.6804722 + ], + [ + -123.9707088, + 44.6826188 + ], + [ + -123.9704979, + 44.6831708 + ], + [ + -123.9700764, + 44.6841054 + ], + [ + -123.9678463, + 44.6883777 + ], + [ + -123.9669601, + 44.6897678 + ], + [ + -123.9667435, + 44.6900525 + ], + [ + -123.9662943, + 44.6908448 + ], + [ + -123.9662011, + 44.6910054 + ], + [ + -123.9645107, + 44.6938546 + ], + [ + -123.9634665, + 44.6953017 + ], + [ + -123.9626044, + 44.6963039 + ], + [ + -123.9627601, + 44.6966614 + ], + [ + -123.9629923, + 44.6973014 + ], + [ + -123.9632853, + 44.6983005 + ], + [ + -123.9633704, + 44.6986784 + ], + [ + -123.9635619, + 44.7005356 + ], + [ + -123.9635451, + 44.7014996 + ], + [ + -123.9634345, + 44.7026788 + ], + [ + -123.9631949, + 44.7040818 + ], + [ + -123.9630876, + 44.704604 + ], + [ + -123.9628558, + 44.705568 + ], + [ + -123.9615332, + 44.7084945 + ], + [ + -123.9609074, + 44.7094096 + ], + [ + -123.9595601, + 44.7110127 + ], + [ + -123.9578475, + 44.7124274 + ], + [ + -123.9571265, + 44.7129285 + ], + [ + -123.9543233, + 44.7144675 + ], + [ + -123.9533962, + 44.7148636 + ], + [ + -123.952478, + 44.7152258 + ], + [ + -123.9509014, + 44.7157981 + ], + [ + -123.9431609, + 44.7186634 + ], + [ + -123.9427204, + 44.7188201 + ], + [ + -123.9399525, + 44.7197649 + ], + [ + -123.9369127, + 44.7208625 + ], + [ + -123.9365661, + 44.7209894 + ], + [ + -123.9361781, + 44.7211245 + ], + [ + -123.9361666, + 44.7211287 + ], + [ + -123.9355766, + 44.7213513 + ], + [ + -123.935378, + 44.7214963 + ], + [ + -123.9351945, + 44.7216217 + ], + [ + -123.9350742, + 44.7217181 + ], + [ + -123.9334554, + 44.7228369 + ], + [ + -123.9331984, + 44.7229899 + ], + [ + -123.9327413, + 44.7232516 + ], + [ + -123.9322931, + 44.7234982 + ], + [ + -123.9321112, + 44.723926 + ], + [ + -123.9307032, + 44.7258046 + ], + [ + -123.9288082, + 44.7274513 + ], + [ + -123.9264988, + 44.7288027 + ], + [ + -123.9238638, + 44.7298069 + ], + [ + -123.9210046, + 44.7304253 + ], + [ + -123.918031, + 44.7306341 + ], + [ + -123.9150575, + 44.7304253 + ], + [ + -123.9121982, + 44.7298069 + ], + [ + -123.9095632, + 44.7288027 + ], + [ + -123.9072538, + 44.7274513 + ], + [ + -123.9053588, + 44.7258047 + ], + [ + -123.9039508, + 44.7239261 + ], + [ + -123.9030841, + 44.7218877 + ], + [ + -123.9027918, + 44.719768 + ], + [ + -123.9027918, + 44.7197291 + ], + [ + -123.9027915, + 44.7196325 + ], + [ + -123.9027891, + 44.7195798 + ], + [ + -123.9027809, + 44.719223 + ], + [ + -123.9027812, + 44.718285 + ], + [ + -123.9027818, + 44.7181892 + ], + [ + -123.9027941, + 44.7172182 + ], + [ + -123.9029034, + 44.7160133 + ], + [ + -123.9029725, + 44.7156053 + ], + [ + -123.9037754, + 44.7132038 + ], + [ + -123.9039895, + 44.7127829 + ], + [ + -123.9050793, + 44.7111025 + ], + [ + -123.9065534, + 44.7095784 + ], + [ + -123.9069484, + 44.7092364 + ], + [ + -123.9087552, + 44.7079182 + ], + [ + -123.9092102, + 44.7076382 + ], + [ + -123.9112866, + 44.7065639 + ], + [ + -123.9117416, + 44.706368 + ], + [ + -123.9143769, + 44.7054664 + ], + [ + -123.9149342, + 44.7053207 + ], + [ + -123.9160616, + 44.70456 + ], + [ + -123.9169715, + 44.704029 + ], + [ + -123.9194954, + 44.7028339 + ], + [ + -123.9208682, + 44.702316 + ], + [ + -123.9219849, + 44.7018948 + ], + [ + -123.922123, + 44.7018433 + ], + [ + -123.9223539, + 44.7017584 + ], + [ + -123.9225472, + 44.7016885 + ], + [ + -123.9231727, + 44.7014663 + ], + [ + -123.9263381, + 44.7003235 + ], + [ + -123.9266432, + 44.7002163 + ], + [ + -123.9293419, + 44.6992953 + ], + [ + -123.9310148, + 44.6986761 + ], + [ + -123.9308927, + 44.6983414 + ], + [ + -123.9307469, + 44.6977314 + ], + [ + -123.9305407, + 44.6955003 + ], + [ + -123.9305668, + 44.6950003 + ], + [ + -123.9310782, + 44.6925851 + ], + [ + -123.9313954, + 44.6917432 + ], + [ + -123.93292, + 44.6891231 + ], + [ + -123.9342163, + 44.6875242 + ], + [ + -123.9348902, + 44.6867669 + ], + [ + -123.936415, + 44.6852001 + ], + [ + -123.9369055, + 44.6846302 + ], + [ + -123.9381034, + 44.6826129 + ], + [ + -123.9388299, + 44.6813325 + ], + [ + -123.9395631, + 44.6802246 + ], + [ + -123.9396783, + 44.6800733 + ], + [ + -123.9401243, + 44.6792196 + ], + [ + -123.9396971, + 44.6789693 + ], + [ + -123.9377477, + 44.6776003 + ], + [ + -123.9370867, + 44.6770443 + ], + [ + -123.9352998, + 44.6751772 + ], + [ + -123.9348709, + 44.6746102 + ], + [ + -123.9337415, + 44.6727007 + ], + [ + -123.9335266, + 44.6722117 + ], + [ + -123.9330696, + 44.6708843 + ], + [ + -123.9329328, + 44.6703413 + ], + [ + -123.9326977, + 44.6681286 + ], + [ + -123.9328276, + 44.6646496 + ], + [ + -123.9329419, + 44.6635794 + ], + [ + -123.9330531, + 44.6629504 + ], + [ + -123.9333747, + 44.6617128 + ], + [ + -123.9336589, + 44.6608889 + ], + [ + -123.9343561, + 44.6593632 + ], + [ + -123.9346652, + 44.6588253 + ], + [ + -123.9352134, + 44.6579771 + ], + [ + -123.9355564, + 44.6575011 + ], + [ + -123.9359097, + 44.6570389 + ], + [ + -123.9366159, + 44.656166 + ], + [ + -123.9372633, + 44.6554345 + ], + [ + -123.9376936, + 44.6549886 + ], + [ + -123.937732, + 44.6548382 + ], + [ + -123.9373118, + 44.6529853 + ], + [ + -123.9367556, + 44.6532055 + ], + [ + -123.9364396, + 44.6533215 + ], + [ + -123.9355796, + 44.6536133 + ], + [ + -123.9352626, + 44.6537123 + ], + [ + -123.9342992, + 44.6539857 + ], + [ + -123.9339632, + 44.6540717 + ], + [ + -123.9329437, + 44.6543041 + ], + [ + -123.9326097, + 44.6543711 + ], + [ + -123.9317792, + 44.6545198 + ], + [ + -123.9314562, + 44.6545709 + ], + [ + -123.9306048, + 44.6546872 + ], + [ + -123.9302677, + 44.6547262 + ], + [ + -123.9295446, + 44.6547897 + ], + [ + -123.9278275, + 44.6557079 + ], + [ + -123.9250433, + 44.6566445 + ], + [ + -123.9220519, + 44.6571622 + ], + [ + -123.9189757, + 44.6572396 + ], + [ + -123.9159406, + 44.6568737 + ], + [ + -123.9130708, + 44.6560794 + ], + [ + -123.9128397, + 44.6559954 + ], + [ + -123.9118845, + 44.6556166 + ], + [ + -123.9117545, + 44.6555606 + ], + [ + -123.9089351, + 44.6539969 + ], + [ + -123.9067038, + 44.6520073 + ], + [ + -123.9066208, + 44.6519123 + ], + [ + -123.9054808, + 44.6503325 + ], + [ + -123.9047169, + 44.6486411 + ], + [ + -123.9043495, + 44.6468835 + ], + [ + -123.9043385, + 44.6467655 + ], + [ + -123.9044777, + 44.6444145 + ], + [ + -123.9053225, + 44.6421401 + ], + [ + -123.9053705, + 44.6420511 + ], + [ + -123.9066542, + 44.6402123 + ], + [ + -123.9067702, + 44.6400793 + ], + [ + -123.9072825, + 44.63953 + ], + [ + -123.9074835, + 44.6393281 + ], + [ + -123.9094415, + 44.6377211 + ], + [ + -123.9095911, + 44.6376385 + ], + [ + -123.9098806, + 44.6373665 + ], + [ + -123.9100977, + 44.6371915 + ], + [ + -123.9115346, + 44.6361773 + ], + [ + -123.9117936, + 44.6360173 + ], + [ + -123.9132345, + 44.6352294 + ], + [ + -123.9136824, + 44.6350135 + ], + [ + -123.9160334, + 44.6340844 + ], + [ + -123.9165454, + 44.6339224 + ], + [ + -123.9191204, + 44.6332975 + ], + [ + -123.9195933, + 44.6332155 + ], + [ + -123.9213828, + 44.6329851 + ], + [ + -123.9218058, + 44.6329491 + ], + [ + -123.9238582, + 44.6328773 + ], + [ + -123.9249673, + 44.6321817 + ], + [ + -123.9253364, + 44.6319487 + ], + [ + -123.9260569, + 44.6315213 + ], + [ + -123.9264249, + 44.6313163 + ], + [ + -123.9276103, + 44.6307186 + ], + [ + -123.9279863, + 44.6305477 + ], + [ + -123.9290811, + 44.6300944 + ], + [ + -123.92947, + 44.6299484 + ], + [ + -123.9307865, + 44.6295102 + ], + [ + -123.9311594, + 44.6294012 + ], + [ + -123.9319828, + 44.6291803 + ], + [ + -123.9323907, + 44.6290803 + ], + [ + -123.9332488, + 44.6288907 + ], + [ + -123.9332616, + 44.6288773 + ], + [ + -123.9337837, + 44.6283673 + ], + [ + -123.9338424, + 44.6283104 + ], + [ + -123.9345055, + 44.6276714 + ], + [ + -123.9368741, + 44.6258628 + ], + [ + -123.9397545, + 44.6244841 + ], + [ + -123.9429972, + 44.6236069 + ], + [ + -123.9432571, + 44.62356 + ], + [ + -123.9459019, + 44.6232556 + ], + [ + -123.9485803, + 44.6232872 + ], + [ + -123.9487003, + 44.6232962 + ], + [ + -123.9514983, + 44.6236982 + ], + [ + -123.9541419, + 44.6244663 + ], + [ + -123.9542709, + 44.6245143 + ], + [ + -123.9565689, + 44.6255665 + ], + [ + -123.9585667, + 44.626895 + ], + [ + -123.9602, + 44.628457 + ], + [ + -123.960287, + 44.628558 + ], + [ + -123.9617377, + 44.6307626 + ], + [ + -123.9624642, + 44.6331426 + ], + [ + -123.9624299, + 44.6355784 + ], + [ + -123.9623221, + 44.6362044 + ], + [ + -123.9623191, + 44.6362217 + ], + [ + -123.9622512, + 44.6366107 + ], + [ + -123.9622386, + 44.6366806 + ], + [ + -123.9621864, + 44.6369649 + ], + [ + -123.963709, + 44.6392703 + ], + [ + -123.9639087, + 44.6395402 + ], + [ + -123.964523, + 44.6404753 + ], + [ + -123.9649161, + 44.6411563 + ], + [ + -123.9652304, + 44.6417491 + ], + [ + -123.9654965, + 44.6422991 + ], + [ + -123.9660488, + 44.6437652 + ], + [ + -123.966264, + 44.6445522 + ], + [ + -123.9662873, + 44.6446395 + ], + [ + -123.9665876, + 44.6457874 + ], + [ + -123.9667245, + 44.6464105 + ], + [ + -123.966967, + 44.6477707 + ], + [ + -123.9679994, + 44.6523127 + ], + [ + -123.9681003, + 44.6528374 + ], + [ + -123.9681774, + 44.6533264 + ], + [ + -123.968272, + 44.6546671 + ], + [ + -123.9682631, + 44.6552161 + ], + [ + -123.9682204, + 44.6559141 + ], + [ + -123.9681775, + 44.6563171 + ], + [ + -123.968096, + 44.656885 + ], + [ + -123.9680021, + 44.657404 + ], + [ + -123.9678822, + 44.6579552 + ], + [ + -123.9672608, + 44.6603962 + ], + [ + -123.9667398, + 44.6618575 + ], + [ + -123.966426, + 44.6625366 + ], + [ + -123.9654717, + 44.6641504 + ], + [ + -123.9651288, + 44.6646205 + ], + [ + -123.9646077, + 44.6652778 + ], + [ + -123.9645838, + 44.6653057 + ], + [ + -123.9658384, + 44.6662888 + ], + [ + -123.9674224, + 44.6682006 + ], + [ + -123.9676625, + 44.6685726 + ], + [ + -123.9677638, + 44.668733 + ], + [ + -123.9680129, + 44.669136 + ], + [ + -123.9687258, + 44.6705454 + ], + [ + -123.968923, + 44.6710394 + ], + [ + -123.9690912, + 44.671499 + ], + [ + -123.9694062, + 44.6724433 + ], + [ + -123.969766, + 44.6732106 + ], + [ + -123.9701707, + 44.6742393 + ], + [ + -123.970532, + 44.6753683 + ], + [ + -123.970592, + 44.675564 + ], + [ + -123.9707105, + 44.6759685 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_16279_s_16275", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0719979, + 44.6242537 + ], + [ + -124.072096, + 44.624352 + ], + [ + -124.07332, + 44.6262943 + ], + [ + -124.07399, + 44.6283698 + ], + [ + -124.0740802, + 44.6304987 + ], + [ + -124.0735869, + 44.6325993 + ], + [ + -124.0725292, + 44.6345908 + ], + [ + -124.0709475, + 44.6363967 + ], + [ + -124.0689028, + 44.6379476 + ], + [ + -124.0664735, + 44.6391837 + ], + [ + -124.0637529, + 44.6400577 + ], + [ + -124.0608458, + 44.6405359 + ], + [ + -124.0578639, + 44.6405999 + ], + [ + -124.0549218, + 44.6402472 + ], + [ + -124.0521327, + 44.6394915 + ], + [ + -124.0516673, + 44.6393264 + ], + [ + -124.0501925, + 44.6386314 + ], + [ + -124.0485361, + 44.6381947 + ], + [ + -124.045993, + 44.6370812 + ], + [ + -124.0438032, + 44.6356349 + ], + [ + -124.0420507, + 44.6339113 + ], + [ + -124.0408029, + 44.6319767 + ], + [ + -124.0401077, + 44.6299054 + ], + [ + -124.0399918, + 44.6277771 + ], + [ + -124.0404595, + 44.6256735 + ], + [ + -124.0414929, + 44.6236755 + ], + [ + -124.0427232, + 44.6218656 + ], + [ + -124.0443849, + 44.6199543 + ], + [ + -124.0465621, + 44.6183284 + ], + [ + -124.0491614, + 44.6170575 + ], + [ + -124.0520712, + 44.6161961 + ], + [ + -124.0551671, + 44.6157812 + ], + [ + -124.0583161, + 44.6158305 + ], + [ + -124.0613835, + 44.6163419 + ], + [ + -124.0622334, + 44.6165519 + ], + [ + -124.0648874, + 44.6174191 + ], + [ + -124.0672608, + 44.6186324 + ], + [ + -124.0692662, + 44.620147 + ], + [ + -124.0708298, + 44.6219072 + ], + [ + -124.071894, + 44.6238483 + ], + [ + -124.0719979, + 44.6242537 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_22283_s_22283", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -123.8941545, + 44.7206863 + ], + [ + -123.8944146, + 44.7185645 + ], + [ + -123.8952503, + 44.7165196 + ], + [ + -123.8966294, + 44.7146302 + ], + [ + -123.8984989, + 44.7129689 + ], + [ + -123.9007868, + 44.7115996 + ], + [ + -123.9034053, + 44.7105748 + ], + [ + -123.9062538, + 44.7099339 + ], + [ + -123.9092228, + 44.7097015 + ], + [ + -123.9121984, + 44.7098866 + ], + [ + -123.9150663, + 44.7104819 + ], + [ + -123.9177162, + 44.7114648 + ], + [ + -123.9200464, + 44.7127973 + ], + [ + -123.9219674, + 44.7144284 + ], + [ + -123.9234053, + 44.7162954 + ], + [ + -123.9243049, + 44.7183265 + ], + [ + -123.9246314, + 44.7204436 + ], + [ + -123.9243724, + 44.7225656 + ], + [ + -123.9235376, + 44.7246107 + ], + [ + -123.9221592, + 44.7265004 + ], + [ + -123.92029, + 44.728162 + ], + [ + -123.9180019, + 44.7295317 + ], + [ + -123.9153828, + 44.7305569 + ], + [ + -123.9125334, + 44.731198 + ], + [ + -123.9095632, + 44.7314305 + ], + [ + -123.9065866, + 44.7312454 + ], + [ + -123.9037178, + 44.7306498 + ], + [ + -123.9010672, + 44.7296666 + ], + [ + -123.8987367, + 44.7283337 + ], + [ + -123.8968159, + 44.7267022 + ], + [ + -123.8953786, + 44.7248349 + ], + [ + -123.89448, + 44.7228036 + ], + [ + -123.8941545, + 44.7206863 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_22283_s_22285", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -123.9145954, + 44.7103135 + ], + [ + -123.9150467, + 44.7102155 + ], + [ + -123.918019, + 44.7100048 + ], + [ + -123.9209918, + 44.7102116 + ], + [ + -123.9238509, + 44.7108279 + ], + [ + -123.9264866, + 44.7118301 + ], + [ + -123.9287976, + 44.7131796 + ], + [ + -123.930695, + 44.7148246 + ], + [ + -123.932106, + 44.716702 + ], + [ + -123.9329763, + 44.7187395 + ], + [ + -123.9332725, + 44.720859 + ], + [ + -123.9332737, + 44.721632 + ], + [ + -123.9332736, + 44.7216847 + ], + [ + -123.9332721, + 44.7219684 + ], + [ + -123.933277, + 44.7222901 + ], + [ + -123.9330121, + 44.7244283 + ], + [ + -123.9321627, + 44.7264876 + ], + [ + -123.930762, + 44.7283876 + ], + [ + -123.9288645, + 44.7300543 + ], + [ + -123.9265443, + 44.7314225 + ], + [ + -123.9238919, + 44.7324388 + ], + [ + -123.921011, + 44.7330634 + ], + [ + -123.9180139, + 44.7332721 + ], + [ + -123.9162516, + 44.7332701 + ], + [ + -123.9150347, + 44.7332341 + ], + [ + -123.9147257, + 44.733216 + ], + [ + -123.9134566, + 44.7331037 + ], + [ + -123.9132045, + 44.7330737 + ], + [ + -123.9123773, + 44.7329584 + ], + [ + -123.9122772, + 44.7329424 + ], + [ + -123.9122095, + 44.7329315 + ], + [ + -123.911614, + 44.7328341 + ], + [ + -123.9101235, + 44.7326013 + ], + [ + -123.9096624, + 44.7325239 + ], + [ + -123.909569, + 44.7325071 + ], + [ + -123.9095557, + 44.7325052 + ], + [ + -123.9093139, + 44.7324724 + ], + [ + -123.9080821, + 44.7322676 + ], + [ + -123.907809, + 44.7322136 + ], + [ + -123.9061615, + 44.7318142 + ], + [ + -123.9059295, + 44.7317472 + ], + [ + -123.9023731, + 44.7302964 + ], + [ + -123.9021501, + 44.7301744 + ], + [ + -123.9014824, + 44.7297611 + ], + [ + -123.9014275, + 44.7297368 + ], + [ + -123.9010146, + 44.7295469 + ], + [ + -123.9009936, + 44.7295369 + ], + [ + -123.8986838, + 44.7281858 + ], + [ + -123.8967882, + 44.7265394 + ], + [ + -123.8953797, + 44.724661 + ], + [ + -123.8945124, + 44.7226228 + ], + [ + -123.8942196, + 44.7205031 + ], + [ + -123.8945124, + 44.7183834 + ], + [ + -123.8953795, + 44.7163451 + ], + [ + -123.8967876, + 44.7144667 + ], + [ + -123.8986825, + 44.7128201 + ], + [ + -123.9009913, + 44.7114688 + ], + [ + -123.9036255, + 44.7104645 + ], + [ + -123.9064836, + 44.709846 + ], + [ + -123.9094561, + 44.7096368 + ], + [ + -123.9124287, + 44.7098452 + ], + [ + -123.9145954, + 44.7103135 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_22284_s_22286", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -123.9221694, + 44.7242183 + ], + [ + -123.9221735, + 44.7242184 + ], + [ + -123.9221656, + 44.7247554 + ], + [ + -123.9221547, + 44.7254609 + ], + [ + -123.9218335, + 44.7275632 + ], + [ + -123.920947, + 44.7295814 + ], + [ + -123.9195288, + 44.7314388 + ], + [ + -123.9176326, + 44.7330653 + ], + [ + -123.9153302, + 44.734399 + ], + [ + -123.9127089, + 44.7353896 + ], + [ + -123.9098679, + 44.7359993 + ], + [ + -123.906915, + 44.7362052 + ], + [ + -123.90688, + 44.7362052 + ], + [ + -123.9039062, + 44.7359963 + ], + [ + -123.9010466, + 44.7353779 + ], + [ + -123.8984114, + 44.7343737 + ], + [ + -123.8961018, + 44.7330223 + ], + [ + -123.8942065, + 44.7313757 + ], + [ + -123.8927984, + 44.7294971 + ], + [ + -123.8919316, + 44.7274587 + ], + [ + -123.891869, + 44.727005 + ], + [ + -123.8910702, + 44.7260966 + ], + [ + -123.8900076, + 44.7241059 + ], + [ + -123.8895103, + 44.7220056 + ], + [ + -123.8895973, + 44.7198766 + ], + [ + -123.8902652, + 44.7178005 + ], + [ + -123.8914882, + 44.7158573 + ], + [ + -123.8932193, + 44.7141214 + ], + [ + -123.895392, + 44.7126597 + ], + [ + -123.8979227, + 44.7115283 + ], + [ + -123.9007143, + 44.7107706 + ], + [ + -123.9020205, + 44.7106132 + ], + [ + -123.902364, + 44.7105509 + ], + [ + -123.9026399, + 44.7105129 + ], + [ + -123.90266, + 44.7105101 + ], + [ + -123.902799, + 44.7104911 + ], + [ + -123.90331, + 44.7104579 + ], + [ + -123.9036595, + 44.7104158 + ], + [ + -123.9038854, + 44.7104204 + ], + [ + -123.9057798, + 44.7102971 + ], + [ + -123.9087562, + 44.7105223 + ], + [ + -123.9116135, + 44.711158 + ], + [ + -123.9142415, + 44.7121796 + ], + [ + -123.9165388, + 44.7135479 + ], + [ + -123.9170722, + 44.71402 + ], + [ + -123.917112, + 44.7140441 + ], + [ + -123.918714, + 44.7153875 + ], + [ + -123.918836, + 44.7155085 + ], + [ + -123.9207899, + 44.718148 + ], + [ + -123.9208509, + 44.718268 + ], + [ + -123.9215436, + 44.7201317 + ], + [ + -123.9217982, + 44.7211878 + ], + [ + -123.9219187, + 44.721658 + ], + [ + -123.9221532, + 44.7231461 + ], + [ + -123.9221723, + 44.7234631 + ], + [ + -123.9221694, + 44.7242183 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_22285_s_16278", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -123.9646357, + 44.6652912 + ], + [ + -123.965299, + 44.6657627 + ], + [ + -123.965459, + 44.6659027 + ], + [ + -123.9669308, + 44.6674433 + ], + [ + -123.9680118, + 44.6691408 + ], + [ + -123.9687221, + 44.6705707 + ], + [ + -123.9690226, + 44.6712444 + ], + [ + -123.9694228, + 44.6722544 + ], + [ + -123.9695457, + 44.6725843 + ], + [ + -123.9705164, + 44.6753641 + ], + [ + -123.9707654, + 44.6762238 + ], + [ + -123.9708855, + 44.6767438 + ], + [ + -123.9710857, + 44.6783102 + ], + [ + -123.9711059, + 44.6790902 + ], + [ + -123.9710059, + 44.6805501 + ], + [ + -123.9708162, + 44.6817101 + ], + [ + -123.9704452, + 44.6831393 + ], + [ + -123.9702054, + 44.6838094 + ], + [ + -123.9697754, + 44.6848076 + ], + [ + -123.9693456, + 44.6856577 + ], + [ + -123.9689302, + 44.6863939 + ], + [ + -123.9680825, + 44.6877507 + ], + [ + -123.965388, + 44.6924754 + ], + [ + -123.9651053, + 44.6929396 + ], + [ + -123.9641656, + 44.6943898 + ], + [ + -123.9639123, + 44.6947619 + ], + [ + -123.9636623, + 44.6951119 + ], + [ + -123.9627223, + 44.6962511 + ], + [ + -123.9626236, + 44.6963557 + ], + [ + -123.9629381, + 44.6971273 + ], + [ + -123.9634101, + 44.6987238 + ], + [ + -123.9635416, + 44.7003527 + ], + [ + -123.963502, + 44.7019527 + ], + [ + -123.9632239, + 44.7038364 + ], + [ + -123.9626044, + 44.7061064 + ], + [ + -123.9618733, + 44.7079241 + ], + [ + -123.9617334, + 44.7081842 + ], + [ + -123.9603965, + 44.7100865 + ], + [ + -123.9601665, + 44.7103466 + ], + [ + -123.9589929, + 44.7114986 + ], + [ + -123.958503, + 44.7119186 + ], + [ + -123.956382, + 44.7134118 + ], + [ + -123.955932, + 44.7136718 + ], + [ + -123.9537339, + 44.71473 + ], + [ + -123.9513837, + 44.7156602 + ], + [ + -123.9506672, + 44.7159263 + ], + [ + -123.9466734, + 44.7173147 + ], + [ + -123.9436466, + 44.7184486 + ], + [ + -123.9434406, + 44.7185243 + ], + [ + -123.9355428, + 44.7213741 + ], + [ + -123.9345729, + 44.7220744 + ], + [ + -123.9333312, + 44.7228774 + ], + [ + -123.9329244, + 44.7231127 + ], + [ + -123.932077, + 44.7250772 + ], + [ + -123.9306585, + 44.7269518 + ], + [ + -123.9287541, + 44.728593 + ], + [ + -123.9264371, + 44.7299378 + ], + [ + -123.9237965, + 44.7309345 + ], + [ + -123.9209337, + 44.7315447 + ], + [ + -123.917959, + 44.7317451 + ], + [ + -123.9149865, + 44.7315278 + ], + [ + -123.9121308, + 44.7309012 + ], + [ + -123.9095014, + 44.7298895 + ], + [ + -123.9071996, + 44.7285315 + ], + [ + -123.9053137, + 44.7268794 + ], + [ + -123.9039163, + 44.7249968 + ], + [ + -123.903061, + 44.722956 + ], + [ + -123.9027806, + 44.7208355 + ], + [ + -123.9028016, + 44.7172755 + ], + [ + -123.9029872, + 44.7156294 + ], + [ + -123.9031574, + 44.7148595 + ], + [ + -123.9039797, + 44.7126647 + ], + [ + -123.9054239, + 44.7106399 + ], + [ + -123.9074268, + 44.7088734 + ], + [ + -123.9084768, + 44.7081235 + ], + [ + -123.9106917, + 44.7068155 + ], + [ + -123.9132117, + 44.7058275 + ], + [ + -123.9142816, + 44.7054976 + ], + [ + -123.9148875, + 44.7053625 + ], + [ + -123.9152999, + 44.7050648 + ], + [ + -123.9178497, + 44.703584 + ], + [ + -123.9186496, + 44.7032141 + ], + [ + -123.9193986, + 44.7028892 + ], + [ + -123.9200385, + 44.7026292 + ], + [ + -123.9207028, + 44.7023747 + ], + [ + -123.9295783, + 44.6991725 + ], + [ + -123.9309893, + 44.698644 + ], + [ + -123.9308949, + 44.6983923 + ], + [ + -123.930775, + 44.6978923 + ], + [ + -123.9305709, + 44.6955981 + ], + [ + -123.9306211, + 44.6947581 + ], + [ + -123.9309168, + 44.6930418 + ], + [ + -123.9315904, + 44.6913807 + ], + [ + -123.9319506, + 44.6907008 + ], + [ + -123.932573, + 44.6896855 + ], + [ + -123.932853, + 44.6892856 + ], + [ + -123.9335725, + 44.6883713 + ], + [ + -123.9353027, + 44.6864015 + ], + [ + -123.93558, + 44.6860972 + ], + [ + -123.9368522, + 44.684751 + ], + [ + -123.9373078, + 44.6840484 + ], + [ + -123.939965, + 44.6793932 + ], + [ + -123.9400964, + 44.6791734 + ], + [ + -123.9397972, + 44.6790131 + ], + [ + -123.9390872, + 44.6785631 + ], + [ + -123.9372854, + 44.6772057 + ], + [ + -123.9367054, + 44.6766857 + ], + [ + -123.9349069, + 44.6746426 + ], + [ + -123.934447, + 44.6739625 + ], + [ + -123.9333227, + 44.67168 + ], + [ + -123.9331128, + 44.67103 + ], + [ + -123.9327271, + 44.6687985 + ], + [ + -123.9326973, + 44.6676885 + ], + [ + -123.9327036, + 44.6671059 + ], + [ + -123.9328344, + 44.6644059 + ], + [ + -123.9330763, + 44.6628163 + ], + [ + -123.9334266, + 44.6614563 + ], + [ + -123.9344058, + 44.6591422 + ], + [ + -123.9347959, + 44.6584922 + ], + [ + -123.9360077, + 44.6568687 + ], + [ + -123.9377376, + 44.6549602 + ], + [ + -123.937659, + 44.6546338 + ], + [ + -123.9375487, + 44.6540965 + ], + [ + -123.9373976, + 44.6532052 + ], + [ + -123.9373479, + 44.6529735 + ], + [ + -123.9370102, + 44.6531086 + ], + [ + -123.9355265, + 44.6536287 + ], + [ + -123.9349665, + 44.6537987 + ], + [ + -123.9328768, + 44.6543088 + ], + [ + -123.9317566, + 44.6545188 + ], + [ + -123.929569, + 44.6548053 + ], + [ + -123.9279211, + 44.6556911 + ], + [ + -123.9251659, + 44.6566281 + ], + [ + -123.9222042, + 44.6571539 + ], + [ + -123.9191551, + 44.6572473 + ], + [ + -123.9161411, + 44.6569047 + ], + [ + -123.9132836, + 44.6561398 + ], + [ + -123.9129435, + 44.6560197 + ], + [ + -123.9101581, + 44.654751 + ], + [ + -123.9078219, + 44.653083 + ], + [ + -123.907642, + 44.652923 + ], + [ + -123.9059931, + 44.6511149 + ], + [ + -123.9048773, + 44.6491098 + ], + [ + -123.9043385, + 44.6469869 + ], + [ + -123.9043979, + 44.6448299 + ], + [ + -123.9050532, + 44.6427237 + ], + [ + -123.9062783, + 44.6407515 + ], + [ + -123.9066684, + 44.6402616 + ], + [ + -123.9083897, + 44.6385219 + ], + [ + -123.9094242, + 44.6378207 + ], + [ + -123.9098312, + 44.637423 + ], + [ + -123.9101912, + 44.637133 + ], + [ + -123.9132052, + 44.6352679 + ], + [ + -123.9140552, + 44.634868 + ], + [ + -123.9179642, + 44.6335531 + ], + [ + -123.9186941, + 44.6333931 + ], + [ + -123.921805, + 44.6329579 + ], + [ + -123.9222749, + 44.6329279 + ], + [ + -123.9238002, + 44.6329104 + ], + [ + -123.9238618, + 44.6328703 + ], + [ + -123.9257518, + 44.6317005 + ], + [ + -123.9278515, + 44.63061 + ], + [ + -123.9283614, + 44.6303901 + ], + [ + -123.9294415, + 44.6299658 + ], + [ + -123.9300314, + 44.6297559 + ], + [ + -123.9324868, + 44.6290646 + ], + [ + -123.9332964, + 44.6288928 + ], + [ + -123.9339954, + 44.6282084 + ], + [ + -123.9355955, + 44.6267885 + ], + [ + -123.9377218, + 44.6252456 + ], + [ + -123.940234, + 44.6240343 + ], + [ + -123.9430326, + 44.6232027 + ], + [ + -123.9460064, + 44.6227837 + ], + [ + -123.9490375, + 44.622794 + ], + [ + -123.9520057, + 44.6232332 + ], + [ + -123.954793, + 44.6240838 + ], + [ + -123.9572891, + 44.6253121 + ], + [ + -123.9593947, + 44.6268694 + ], + [ + -123.9610263, + 44.6286938 + ], + [ + -123.9621192, + 44.630713 + ], + [ + -123.9626298, + 44.6328468 + ], + [ + -123.9625379, + 44.6350106 + ], + [ + -123.9621804, + 44.6369618 + ], + [ + -123.9622072, + 44.6370021 + ], + [ + -123.9636118, + 44.6391834 + ], + [ + -123.9638429, + 44.639493 + ], + [ + -123.9644257, + 44.6403658 + ], + [ + -123.9649059, + 44.6411758 + ], + [ + -123.9655467, + 44.6424833 + ], + [ + -123.966017, + 44.6436833 + ], + [ + -123.9663711, + 44.6448171 + ], + [ + -123.9666313, + 44.6459271 + ], + [ + -123.9666645, + 44.6460748 + ], + [ + -123.9675255, + 44.6500847 + ], + [ + -123.9675903, + 44.6504216 + ], + [ + -123.9677247, + 44.6512119 + ], + [ + -123.9680104, + 44.6523941 + ], + [ + -123.9681841, + 44.65338 + ], + [ + -123.9682442, + 44.65392 + ], + [ + -123.9682897, + 44.6549728 + ], + [ + -123.9682699, + 44.6557728 + ], + [ + -123.9680511, + 44.6574265 + ], + [ + -123.9673918, + 44.6601566 + ], + [ + -123.9667741, + 44.6618679 + ], + [ + -123.9662643, + 44.662918 + ], + [ + -123.9646644, + 44.6652595 + ], + [ + -123.9646357, + 44.6652912 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_22286_s_22283", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -123.9219311, + 44.7266648 + ], + [ + -123.9217102, + 44.7278366 + ], + [ + -123.9207421, + 44.7298516 + ], + [ + -123.9192411, + 44.7316933 + ], + [ + -123.9172648, + 44.7332909 + ], + [ + -123.9148892, + 44.7345828 + ], + [ + -123.9122055, + 44.7355195 + ], + [ + -123.9093169, + 44.736065 + ], + [ + -123.9063345, + 44.7361982 + ], + [ + -123.9059407, + 44.7361882 + ], + [ + -123.9030513, + 44.7359161 + ], + [ + -123.9002874, + 44.7352569 + ], + [ + -123.8977502, + 44.7342348 + ], + [ + -123.8955323, + 44.7328871 + ], + [ + -123.893715, + 44.7312631 + ], + [ + -123.8923645, + 44.7294223 + ], + [ + -123.8915302, + 44.7274319 + ], + [ + -123.8912427, + 44.7253646 + ], + [ + -123.89124, + 44.7247581 + ], + [ + -123.8912661, + 44.724596 + ], + [ + -123.8908739, + 44.7237903 + ], + [ + -123.8908256, + 44.7236428 + ], + [ + -123.8904531, + 44.7205306 + ], + [ + -123.8904673, + 44.7203587 + ], + [ + -123.8908309, + 44.7185576 + ], + [ + -123.8916109, + 44.7168251 + ], + [ + -123.8917077, + 44.7166593 + ], + [ + -123.893948, + 44.7139841 + ], + [ + -123.8940715, + 44.7138757 + ], + [ + -123.8972737, + 44.711769 + ], + [ + -123.8974842, + 44.7116659 + ], + [ + -123.9007915, + 44.7104407 + ], + [ + -123.9014002, + 44.710279 + ], + [ + -123.9017271, + 44.7101952 + ], + [ + -123.9019323, + 44.7101444 + ], + [ + -123.9038815, + 44.7097636 + ], + [ + -123.9041318, + 44.7097272 + ], + [ + -123.9050524, + 44.7096143 + ], + [ + -123.9052942, + 44.70959 + ], + [ + -123.9089721, + 44.7095408 + ], + [ + -123.9091655, + 44.7095549 + ], + [ + -123.910184, + 44.7096628 + ], + [ + -123.9109778, + 44.7096603 + ], + [ + -123.9142263, + 44.7101646 + ], + [ + -123.9172441, + 44.7111592 + ], + [ + -123.9173241, + 44.7111935 + ], + [ + -123.9197193, + 44.7124662 + ], + [ + -123.9217204, + 44.7140475 + ], + [ + -123.9232505, + 44.7158769 + ], + [ + -123.9242507, + 44.7178839 + ], + [ + -123.9246826, + 44.7199914 + ], + [ + -123.9245296, + 44.7221186 + ], + [ + -123.9237973, + 44.7241835 + ], + [ + -123.922514, + 44.726107 + ], + [ + -123.9219311, + 44.7266648 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_22287_s_22284", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -123.9332695, + 44.7200945 + ], + [ + -123.9332723, + 44.720281 + ], + [ + -123.9332724, + 44.7204786 + ], + [ + -123.9332737, + 44.7216353 + ], + [ + -123.9332736, + 44.7216847 + ], + [ + -123.9332721, + 44.7219684 + ], + [ + -123.933277, + 44.7222901 + ], + [ + -123.9330121, + 44.7244283 + ], + [ + -123.9321627, + 44.7264876 + ], + [ + -123.930762, + 44.7283876 + ], + [ + -123.9288645, + 44.7300543 + ], + [ + -123.9265443, + 44.7314225 + ], + [ + -123.9238919, + 44.7324388 + ], + [ + -123.921011, + 44.7330634 + ], + [ + -123.9180139, + 44.7332721 + ], + [ + -123.9162516, + 44.7332701 + ], + [ + -123.9150347, + 44.7332341 + ], + [ + -123.9147257, + 44.733216 + ], + [ + -123.9134566, + 44.7331037 + ], + [ + -123.9132045, + 44.7330737 + ], + [ + -123.9123184, + 44.7329489 + ], + [ + -123.9116185, + 44.7328348 + ], + [ + -123.9101235, + 44.7326013 + ], + [ + -123.9096624, + 44.7325239 + ], + [ + -123.9095826, + 44.7325096 + ], + [ + -123.9092617, + 44.7324653 + ], + [ + -123.9080821, + 44.7322676 + ], + [ + -123.907809, + 44.7322136 + ], + [ + -123.9068442, + 44.7319797 + ], + [ + -123.9063751, + 44.7320501 + ], + [ + -123.9055959, + 44.7320562 + ], + [ + -123.9051755, + 44.732084 + ], + [ + -123.9048739, + 44.7320618 + ], + [ + -123.9033872, + 44.7320735 + ], + [ + -123.9004504, + 44.7316808 + ], + [ + -123.8976775, + 44.7308872 + ], + [ + -123.8951752, + 44.7297232 + ], + [ + -123.8930397, + 44.7282335 + ], + [ + -123.8929567, + 44.728163 + ], + [ + -123.891151, + 44.7262472 + ], + [ + -123.8899537, + 44.7241026 + ], + [ + -123.8894191, + 44.7218261 + ], + [ + -123.8895709, + 44.7195205 + ], + [ + -123.8895926, + 44.7194205 + ], + [ + -123.89037, + 44.7172919 + ], + [ + -123.8917327, + 44.7153185 + ], + [ + -123.8936248, + 44.7135812 + ], + [ + -123.8959687, + 44.7121512 + ], + [ + -123.8986684, + 44.711087 + ], + [ + -123.8987821, + 44.7110524 + ], + [ + -123.8995305, + 44.7108942 + ], + [ + -123.9008824, + 44.7104152 + ], + [ + -123.9016802, + 44.7102073 + ], + [ + -123.9036175, + 44.7098038 + ], + [ + -123.9038835, + 44.7097618 + ], + [ + -123.9051456, + 44.7096019 + ], + [ + -123.9053436, + 44.7095829 + ], + [ + -123.907998, + 44.7094949 + ], + [ + -123.9082039, + 44.7095009 + ], + [ + -123.9096371, + 44.7096239 + ], + [ + -123.9101314, + 44.7096092 + ], + [ + -123.9120216, + 44.7098006 + ], + [ + -123.9122246, + 44.7097236 + ], + [ + -123.9150844, + 44.7091089 + ], + [ + -123.9180574, + 44.7089039 + ], + [ + -123.9210293, + 44.7091163 + ], + [ + -123.9238861, + 44.709738 + ], + [ + -123.926518, + 44.7107451 + ], + [ + -123.9288239, + 44.712099 + ], + [ + -123.9307152, + 44.7137476 + ], + [ + -123.9321192, + 44.7156276 + ], + [ + -123.9329819, + 44.7176668 + ], + [ + -123.9332702, + 44.7197868 + ], + [ + -123.9332695, + 44.7200945 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_22287_s_22287", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -123.9027457, + 44.7198905 + ], + [ + -123.9030056, + 44.7177686 + ], + [ + -123.9038409, + 44.7157236 + ], + [ + -123.9052197, + 44.7138341 + ], + [ + -123.9070889, + 44.7121727 + ], + [ + -123.9093766, + 44.7108032 + ], + [ + -123.9119949, + 44.7097782 + ], + [ + -123.9148433, + 44.7091371 + ], + [ + -123.9178122, + 44.7089045 + ], + [ + -123.9207878, + 44.7090894 + ], + [ + -123.9236557, + 44.7096845 + ], + [ + -123.9263058, + 44.7106672 + ], + [ + -123.9286361, + 44.7119996 + ], + [ + -123.9305573, + 44.7136305 + ], + [ + -123.9319955, + 44.7154973 + ], + [ + -123.9328953, + 44.7175283 + ], + [ + -123.9332222, + 44.7196455 + ], + [ + -123.9329634, + 44.7217674 + ], + [ + -123.932129, + 44.7238126 + ], + [ + -123.9307509, + 44.7257024 + ], + [ + -123.928882, + 44.7273642 + ], + [ + -123.9265941, + 44.7287341 + ], + [ + -123.9239752, + 44.7297594 + ], + [ + -123.9211259, + 44.7304008 + ], + [ + -123.9181559, + 44.7306335 + ], + [ + -123.9151792, + 44.7304486 + ], + [ + -123.9123103, + 44.7298532 + ], + [ + -123.9096596, + 44.7288702 + ], + [ + -123.907329, + 44.7275375 + ], + [ + -123.905408, + 44.7259061 + ], + [ + -123.9039704, + 44.724039 + ], + [ + -123.9030715, + 44.7220077 + ], + [ + -123.9027457, + 44.7198905 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_22289_s_2456757", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0894051, + 44.4256859 + ], + [ + -124.089019, + 44.4260355 + ], + [ + -124.088384, + 44.4265755 + ], + [ + -124.0873879, + 44.4273441 + ], + [ + -124.0869239, + 44.4276692 + ], + [ + -124.0862835, + 44.4280927 + ], + [ + -124.085858, + 44.4283583 + ], + [ + -124.0845515, + 44.4292073 + ], + [ + -124.0838723, + 44.4296232 + ], + [ + -124.0831542, + 44.4300372 + ], + [ + -124.0826715, + 44.4303043 + ], + [ + -124.0823443, + 44.4304779 + ], + [ + -124.0822982, + 44.4305156 + ], + [ + -124.081738, + 44.4309495 + ], + [ + -124.081378, + 44.4312136 + ], + [ + -124.0800804, + 44.4320603 + ], + [ + -124.0797487, + 44.4324796 + ], + [ + -124.0778064, + 44.434092 + ], + [ + -124.0754623, + 44.435402 + ], + [ + -124.0728064, + 44.436359 + ], + [ + -124.0699409, + 44.4369263 + ], + [ + -124.066976, + 44.4370821 + ], + [ + -124.0640256, + 44.4368205 + ], + [ + -124.0612033, + 44.4361514 + ], + [ + -124.0586174, + 44.4351005 + ], + [ + -124.0563674, + 44.4337084 + ], + [ + -124.0545399, + 44.4320285 + ], + [ + -124.0532049, + 44.4301253 + ], + [ + -124.0524139, + 44.4280721 + ], + [ + -124.052197, + 44.4259478 + ], + [ + -124.0525626, + 44.423834 + ], + [ + -124.0526972, + 44.4234059 + ], + [ + -124.0531899, + 44.4221791 + ], + [ + -124.053341, + 44.4218721 + ], + [ + -124.0539387, + 44.4208324 + ], + [ + -124.0541358, + 44.4205344 + ], + [ + -124.0554464, + 44.4189254 + ], + [ + -124.0558115, + 44.4185544 + ], + [ + -124.056905, + 44.4175696 + ], + [ + -124.057161, + 44.4173646 + ], + [ + -124.0585304, + 44.416399 + ], + [ + -124.0589024, + 44.416168 + ], + [ + -124.0605452, + 44.4152803 + ], + [ + -124.0608325, + 44.415146 + ], + [ + -124.0609584, + 44.4150559 + ], + [ + -124.0609688, + 44.4147789 + ], + [ + -124.0616269, + 44.4127018 + ], + [ + -124.0628376, + 44.4107566 + ], + [ + -124.0645544, + 44.4090181 + ], + [ + -124.0667113, + 44.407553 + ], + [ + -124.0674542, + 44.4072175 + ], + [ + -124.0676466, + 44.4071181 + ], + [ + -124.0678293, + 44.4070481 + ], + [ + -124.0692253, + 44.4064176 + ], + [ + -124.0701107, + 44.4061745 + ], + [ + -124.0712221, + 44.4057489 + ], + [ + -124.071428, + 44.4056939 + ], + [ + -124.0744119, + 44.4051371 + ], + [ + -124.0767485, + 44.4050518 + ], + [ + -124.0792314, + 44.4047386 + ], + [ + -124.081904, + 44.4047431 + ], + [ + -124.082211, + 44.4047631 + ], + [ + -124.0833236, + 44.4048655 + ], + [ + -124.0837685, + 44.4049185 + ], + [ + -124.0865361, + 44.4054446 + ], + [ + -124.0891163, + 44.4063343 + ], + [ + -124.0914171, + 44.407556 + ], + [ + -124.0933565, + 44.409066 + ], + [ + -124.0948653, + 44.4108105 + ], + [ + -124.0958895, + 44.4127272 + ], + [ + -124.0963926, + 44.4147478 + ], + [ + -124.0963566, + 44.4168001 + ], + [ + -124.0957827, + 44.418811 + ], + [ + -124.0946914, + 44.4207087 + ], + [ + -124.0931215, + 44.4224253 + ], + [ + -124.0926425, + 44.4228544 + ], + [ + -124.0925013, + 44.422979 + ], + [ + -124.0922552, + 44.4231929 + ], + [ + -124.0916887, + 44.4236945 + ], + [ + -124.0916108, + 44.4237628 + ], + [ + -124.0907449, + 44.4245169 + ], + [ + -124.0906009, + 44.4246404 + ], + [ + -124.0900926, + 44.4250699 + ], + [ + -124.0897748, + 44.4253603 + ], + [ + -124.0895063, + 44.4255986 + ], + [ + -124.0894051, + 44.4256859 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_29681_s_16032", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0682551, + 44.6448045 + ], + [ + -124.0682469, + 44.6455823 + ], + [ + -124.0682795, + 44.6481911 + ], + [ + -124.0682799, + 44.6482236 + ], + [ + -124.0683077, + 44.6515786 + ], + [ + -124.0680329, + 44.6536994 + ], + [ + -124.0671836, + 44.6557413 + ], + [ + -124.0657925, + 44.6576256 + ], + [ + -124.063913, + 44.65928 + ], + [ + -124.0616172, + 44.6606408 + ], + [ + -124.0589936, + 44.6616558 + ], + [ + -124.0561428, + 44.6622859 + ], + [ + -124.0531745, + 44.6625069 + ], + [ + -124.0502028, + 44.6623103 + ], + [ + -124.0473421, + 44.6617036 + ], + [ + -124.0447022, + 44.6607102 + ], + [ + -124.0423847, + 44.6593683 + ], + [ + -124.0404786, + 44.6577294 + ], + [ + -124.0390573, + 44.6558566 + ], + [ + -124.0381752, + 44.6538219 + ], + [ + -124.0378662, + 44.6517034 + ], + [ + -124.0378402, + 44.6483646 + ], + [ + -124.0378081, + 44.6456828 + ], + [ + -124.037808, + 44.6455045 + ], + [ + -124.0378482, + 44.6418566 + ], + [ + -124.0381647, + 44.6397363 + ], + [ + -124.039055, + 44.6377009 + ], + [ + -124.0404849, + 44.6358289 + ], + [ + -124.0423992, + 44.6341923 + ], + [ + -124.0447241, + 44.6328541 + ], + [ + -124.0473702, + 44.6318659 + ], + [ + -124.0502356, + 44.6312657 + ], + [ + -124.0532099, + 44.6310765 + ], + [ + -124.0537819, + 44.6310804 + ], + [ + -124.0567474, + 44.6313091 + ], + [ + -124.0595936, + 44.6319465 + ], + [ + -124.0622109, + 44.632968 + ], + [ + -124.064499, + 44.6343345 + ], + [ + -124.0663699, + 44.6359934 + ], + [ + -124.0677517, + 44.6378811 + ], + [ + -124.0685912, + 44.6399249 + ], + [ + -124.0688562, + 44.6420464 + ], + [ + -124.0685363, + 44.6441641 + ], + [ + -124.0682551, + 44.6448045 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_29681_s_16194", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0682997, + 44.6425106 + ], + [ + -124.0682996, + 44.6425858 + ], + [ + -124.0682981, + 44.6427347 + ], + [ + -124.0682444, + 44.645429 + ], + [ + -124.0682795, + 44.6481893 + ], + [ + -124.0682788, + 44.6484317 + ], + [ + -124.0682449, + 44.650263 + ], + [ + -124.0684006, + 44.6510493 + ], + [ + -124.0682339, + 44.6531759 + ], + [ + -124.0674891, + 44.6552384 + ], + [ + -124.0661948, + 44.6571575 + ], + [ + -124.0644008, + 44.6588596 + ], + [ + -124.0621759, + 44.6602791 + ], + [ + -124.0596056, + 44.6613614 + ], + [ + -124.0567888, + 44.662065 + ], + [ + -124.0538338, + 44.6623629 + ], + [ + -124.0536399, + 44.6623687 + ], + [ + -124.0505559, + 44.6622374 + ], + [ + -124.0475726, + 44.6616644 + ], + [ + -124.0448129, + 44.6606733 + ], + [ + -124.0423905, + 44.6593049 + ], + [ + -124.0404051, + 44.6576155 + ], + [ + -124.0389387, + 44.6556749 + ], + [ + -124.0380514, + 44.6535629 + ], + [ + -124.0377798, + 44.6513665 + ], + [ + -124.0378389, + 44.6482615 + ], + [ + -124.0378052, + 44.6454957 + ], + [ + -124.0378062, + 44.6452423 + ], + [ + -124.0378624, + 44.6424957 + ], + [ + -124.037867, + 44.6388654 + ], + [ + -124.0378681, + 44.6387428 + ], + [ + -124.0379082, + 44.6363972 + ], + [ + -124.0382417, + 44.6342637 + ], + [ + -124.039156, + 44.6322186 + ], + [ + -124.0406156, + 44.6303419 + ], + [ + -124.0425633, + 44.6287066 + ], + [ + -124.0449232, + 44.6273767 + ], + [ + -124.047603, + 44.626404 + ], + [ + -124.0504983, + 44.6258265 + ], + [ + -124.053496, + 44.6256668 + ], + [ + -124.05432, + 44.6256811 + ], + [ + -124.054977, + 44.6256792 + ], + [ + -124.0550416, + 44.6256791 + ], + [ + -124.0555941, + 44.6256791 + ], + [ + -124.0585623, + 44.6258878 + ], + [ + -124.0614164, + 44.626506 + ], + [ + -124.0640469, + 44.6275098 + ], + [ + -124.0663528, + 44.6288608 + ], + [ + -124.0682453, + 44.6305071 + ], + [ + -124.0696518, + 44.6323854 + ], + [ + -124.0705182, + 44.6344235 + ], + [ + -124.0708112, + 44.6365431 + ], + [ + -124.0705193, + 44.6386628 + ], + [ + -124.0696539, + 44.6407011 + ], + [ + -124.0682997, + 44.6425106 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_29681_s_16196", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0682301, + 44.6529113 + ], + [ + -124.0682303, + 44.6529344 + ], + [ + -124.0682293, + 44.6531474 + ], + [ + -124.0682275, + 44.6535001 + ], + [ + -124.0682275, + 44.653529 + ], + [ + -124.0682274, + 44.6535609 + ], + [ + -124.0682238, + 44.6545015 + ], + [ + -124.068226, + 44.6549833 + ], + [ + -124.0682329, + 44.655109 + ], + [ + -124.0682568, + 44.6553272 + ], + [ + -124.0683942, + 44.6563034 + ], + [ + -124.0684059, + 44.6563643 + ], + [ + -124.0684534, + 44.6565696 + ], + [ + -124.0685439, + 44.6569424 + ], + [ + -124.0686593, + 44.6572378 + ], + [ + -124.0687396, + 44.6574519 + ], + [ + -124.0688089, + 44.6576445 + ], + [ + -124.0694, + 44.6590244 + ], + [ + -124.0699887, + 44.6611125 + ], + [ + -124.0699952, + 44.6632424 + ], + [ + -124.0694194, + 44.6653323 + ], + [ + -124.0682833, + 44.6673019 + ], + [ + -124.0666305, + 44.6690754 + ], + [ + -124.0645245, + 44.6705847 + ], + [ + -124.0620463, + 44.6717718 + ], + [ + -124.059291, + 44.672591 + ], + [ + -124.0563646, + 44.6730108 + ], + [ + -124.0533797, + 44.6730151 + ], + [ + -124.0504509, + 44.6726037 + ], + [ + -124.047691, + 44.6717925 + ], + [ + -124.0452061, + 44.6706126 + ], + [ + -124.0430915, + 44.6691093 + ], + [ + -124.0414287, + 44.6673406 + ], + [ + -124.0402814, + 44.6653743 + ], + [ + -124.0395903, + 44.6637589 + ], + [ + -124.0394039, + 44.6632852 + ], + [ + -124.0392876, + 44.6629616 + ], + [ + -124.0390094, + 44.6622483 + ], + [ + -124.0386748, + 44.6611871 + ], + [ + -124.038444, + 44.6602351 + ], + [ + -124.0384238, + 44.6601497 + ], + [ + -124.0383319, + 44.6597517 + ], + [ + -124.0382685, + 44.6594511 + ], + [ + -124.0381916, + 44.6590481 + ], + [ + -124.0381281, + 44.6586644 + ], + [ + -124.0379475, + 44.6573763 + ], + [ + -124.0379176, + 44.657137 + ], + [ + -124.0378578, + 44.656588 + ], + [ + -124.0378233, + 44.6561654 + ], + [ + -124.0377944, + 44.6556334 + ], + [ + -124.0377831, + 44.6552438 + ], + [ + -124.0377803, + 44.6545348 + ], + [ + -124.0377803, + 44.6544717 + ], + [ + -124.0377845, + 44.6534487 + ], + [ + -124.0377846, + 44.6534368 + ], + [ + -124.0377867, + 44.6530717 + ], + [ + -124.0377873, + 44.6529412 + ], + [ + -124.0377827, + 44.6526418 + ], + [ + -124.0377824, + 44.6526257 + ], + [ + -124.0377795, + 44.6524077 + ], + [ + -124.0377789, + 44.652254 + ], + [ + -124.0377831, + 44.651594 + ], + [ + -124.0377832, + 44.6515813 + ], + [ + -124.0377842, + 44.6514513 + ], + [ + -124.0380915, + 44.6493402 + ], + [ + -124.0389677, + 44.6473119 + ], + [ + -124.0403796, + 44.645444 + ], + [ + -124.0422732, + 44.6438077 + ], + [ + -124.0445761, + 44.6424653 + ], + [ + -124.0472005, + 44.6414681 + ], + [ + -124.0500464, + 44.6408542 + ], + [ + -124.053005, + 44.6406469 + ], + [ + -124.053202, + 44.6406469 + ], + [ + -124.0561709, + 44.6408557 + ], + [ + -124.0590258, + 44.6414738 + ], + [ + -124.061657, + 44.6424777 + ], + [ + -124.0639634, + 44.6438287 + ], + [ + -124.0658565, + 44.645475 + ], + [ + -124.0672633, + 44.6473533 + ], + [ + -124.06813, + 44.6493913 + ], + [ + -124.068423, + 44.651511 + ], + [ + -124.0682301, + 44.6529113 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_29681_s_29681", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0379761, + 44.6515454 + ], + [ + -124.0382307, + 44.6494232 + ], + [ + -124.0390604, + 44.6473773 + ], + [ + -124.0404332, + 44.6454862 + ], + [ + -124.0422962, + 44.6438226 + ], + [ + -124.044578, + 44.6424505 + ], + [ + -124.0471909, + 44.6414224 + ], + [ + -124.0500343, + 44.640778 + ], + [ + -124.0529992, + 44.6405419 + ], + [ + -124.0559717, + 44.6407232 + ], + [ + -124.0588375, + 44.641315 + ], + [ + -124.0614866, + 44.6422946 + ], + [ + -124.0638173, + 44.6436242 + ], + [ + -124.06574, + 44.6452529 + ], + [ + -124.0671807, + 44.647118 + ], + [ + -124.0680841, + 44.6491479 + ], + [ + -124.0684155, + 44.6512647 + ], + [ + -124.0681619, + 44.6533869 + ], + [ + -124.0673332, + 44.655433 + ], + [ + -124.0659611, + 44.6573244 + ], + [ + -124.0640982, + 44.6589884 + ], + [ + -124.0618163, + 44.6603609 + ], + [ + -124.0592029, + 44.6613893 + ], + [ + -124.0563585, + 44.662034 + ], + [ + -124.0533925, + 44.6622702 + ], + [ + -124.050419, + 44.6620888 + ], + [ + -124.0475522, + 44.6614968 + ], + [ + -124.0449024, + 44.6605169 + ], + [ + -124.0425715, + 44.6591869 + ], + [ + -124.040649, + 44.6575579 + ], + [ + -124.0392089, + 44.6556924 + ], + [ + -124.0383063, + 44.6536622 + ], + [ + -124.0379761, + 44.6515454 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_759417_s_16097", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0295173, + 44.9731164 + ], + [ + -124.0281266, + 44.9767284 + ], + [ + -124.0279545, + 44.9771427 + ], + [ + -124.0276516, + 44.9778218 + ], + [ + -124.0272591, + 44.9785981 + ], + [ + -124.0260345, + 44.9807583 + ], + [ + -124.0246469, + 44.9826467 + ], + [ + -124.0227667, + 44.9843067 + ], + [ + -124.0204662, + 44.9856744 + ], + [ + -124.0178338, + 44.9866973 + ], + [ + -124.0149707, + 44.987336 + ], + [ + -124.011987, + 44.987566 + ], + [ + -124.0089974, + 44.9873784 + ], + [ + -124.0061169, + 44.9867804 + ], + [ + -124.0034562, + 44.9857951 + ], + [ + -124.0011177, + 44.9844603 + ], + [ + -123.9991911, + 44.9828273 + ], + [ + -123.9977505, + 44.9809589 + ], + [ + -123.9968512, + 44.978927 + ], + [ + -123.9965278, + 44.9768095 + ], + [ + -123.9967926, + 44.974688 + ], + [ + -123.9976354, + 44.972644 + ], + [ + -123.9986437, + 44.9708669 + ], + [ + -123.9986792, + 44.9707873 + ], + [ + -124.0006962, + 44.965556 + ], + [ + -124.0015382, + 44.9639077 + ], + [ + -124.0018163, + 44.9634757 + ], + [ + -124.0028296, + 44.9621527 + ], + [ + -124.0030747, + 44.9618797 + ], + [ + -124.0047842, + 44.9603118 + ], + [ + -124.0057802, + 44.9595529 + ], + [ + -124.0080305, + 44.9581445 + ], + [ + -124.0106243, + 44.9570748 + ], + [ + -124.0134622, + 44.9563849 + ], + [ + -124.0164351, + 44.9561013 + ], + [ + -124.0194288, + 44.9562348 + ], + [ + -124.0223284, + 44.9567804 + ], + [ + -124.0250223, + 44.9577171 + ], + [ + -124.0274073, + 44.9590089 + ], + [ + -124.0293916, + 44.9606062 + ], + [ + -124.0308989, + 44.9624476 + ], + [ + -124.0318714, + 44.9644624 + ], + [ + -124.0322716, + 44.9665732 + ], + [ + -124.032084, + 44.9686989 + ], + [ + -124.0313158, + 44.9707577 + ], + [ + -124.0299965, + 44.9726706 + ], + [ + -124.0295173, + 44.9731164 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_759418_s_759420", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0355671, + 44.9288629 + ], + [ + -124.0364272, + 44.9298805 + ], + [ + -124.0367143, + 44.9302665 + ], + [ + -124.0378227, + 44.9321776 + ], + [ + -124.0381099, + 44.9328475 + ], + [ + -124.0386684, + 44.9347436 + ], + [ + -124.0387646, + 44.9353246 + ], + [ + -124.0387326, + 44.9380416 + ], + [ + -124.0386078, + 44.9387006 + ], + [ + -124.0378602, + 44.9408922 + ], + [ + -124.0376013, + 44.9414092 + ], + [ + -124.0365657, + 44.9430384 + ], + [ + -124.0359589, + 44.9438155 + ], + [ + -124.0351249, + 44.9447646 + ], + [ + -124.0345399, + 44.9453597 + ], + [ + -124.0325686, + 44.946993 + ], + [ + -124.0301828, + 44.9483184 + ], + [ + -124.0274758, + 44.9492839 + ], + [ + -124.024554, + 44.9498517 + ], + [ + -124.0215318, + 44.9499995 + ], + [ + -124.0185279, + 44.9497215 + ], + [ + -124.0156601, + 44.9490286 + ], + [ + -124.0130408, + 44.947948 + ], + [ + -124.0127421, + 44.9477948 + ], + [ + -124.0122846, + 44.9476074 + ], + [ + -124.010649, + 44.9470694 + ], + [ + -124.0082259, + 44.9458143 + ], + [ + -124.0061943, + 44.9442476 + ], + [ + -124.0046322, + 44.9424295 + ], + [ + -124.0035997, + 44.9404299 + ], + [ + -124.0031363, + 44.9383257 + ], + [ + -124.0032598, + 44.9361977 + ], + [ + -124.0039654, + 44.9341276 + ], + [ + -124.0052259, + 44.9321951 + ], + [ + -124.0069929, + 44.9304744 + ], + [ + -124.0080463, + 44.9297853 + ], + [ + -124.0092986, + 44.9280968 + ], + [ + -124.0111867, + 44.9264423 + ], + [ + -124.0134927, + 44.9250813 + ], + [ + -124.0161281, + 44.924066 + ], + [ + -124.0189916, + 44.9234353 + ], + [ + -124.0219732, + 44.9232136 + ], + [ + -124.0249584, + 44.9234093 + ], + [ + -124.0278325, + 44.924015 + ], + [ + -124.0304852, + 44.9250073 + ], + [ + -124.0328146, + 44.9263481 + ], + [ + -124.034731, + 44.927986 + ], + [ + -124.0355671, + 44.9288629 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_759419_s_16094", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0287633, + 44.9585995 + ], + [ + -124.0281428, + 44.9608229 + ], + [ + -124.026886, + 44.9629065 + ], + [ + -124.0250474, + 44.9647595 + ], + [ + -124.0227072, + 44.9663014 + ], + [ + -124.0199671, + 44.967465 + ], + [ + -124.0169465, + 44.9681995 + ], + [ + -124.0150258, + 44.9683653 + ], + [ + -124.0132021, + 44.9687355 + ], + [ + -124.0102119, + 44.9689101 + ], + [ + -124.0072313, + 44.9686673 + ], + [ + -124.0043746, + 44.9680162 + ], + [ + -124.0017519, + 44.966982 + ], + [ + -123.9994639, + 44.9656044 + ], + [ + -123.9975985, + 44.9639363 + ], + [ + -123.9962275, + 44.9620419 + ], + [ + -123.9954035, + 44.959994 + ], + [ + -123.9951581, + 44.9578713 + ], + [ + -123.9955006, + 44.9557554 + ], + [ + -123.9964179, + 44.9537276 + ], + [ + -123.9978746, + 44.9518658 + ], + [ + -123.9998147, + 44.9502416 + ], + [ + -124.0008831, + 44.9496392 + ], + [ + -124.0019229, + 44.9485179 + ], + [ + -124.0040292, + 44.9470018 + ], + [ + -124.0065115, + 44.9458066 + ], + [ + -124.0092744, + 44.9449781 + ], + [ + -124.0122117, + 44.9445483 + ], + [ + -124.0152107, + 44.9445337 + ], + [ + -124.018156, + 44.9449347 + ], + [ + -124.0209347, + 44.9457361 + ], + [ + -124.0234399, + 44.9469069 + ], + [ + -124.0255755, + 44.9484023 + ], + [ + -124.0272593, + 44.9501649 + ], + [ + -124.0284266, + 44.9521268 + ], + [ + -124.0290325, + 44.9542127 + ], + [ + -124.0290537, + 44.9563424 + ], + [ + -124.0287633, + 44.9585995 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_759420_s_16092", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0331279, + 44.9405268 + ], + [ + -124.0330569, + 44.9410205 + ], + [ + -124.032985, + 44.9412986 + ], + [ + -124.0324095, + 44.9427947 + ], + [ + -124.0323365, + 44.9430432 + ], + [ + -124.0323372, + 44.9437785 + ], + [ + -124.0317541, + 44.9458677 + ], + [ + -124.0306083, + 44.9478359 + ], + [ + -124.0289437, + 44.9496076 + ], + [ + -124.0268242, + 44.9511145 + ], + [ + -124.0243313, + 44.9522989 + ], + [ + -124.0215609, + 44.9531151 + ], + [ + -124.0186194, + 44.9535317 + ], + [ + -124.0156199, + 44.9535328 + ], + [ + -124.0126778, + 44.9531182 + ], + [ + -124.0099062, + 44.952304 + ], + [ + -124.0074117, + 44.9511215 + ], + [ + -124.00529, + 44.949616 + ], + [ + -124.0036229, + 44.9478455 + ], + [ + -124.0035159, + 44.9477035 + ], + [ + -124.0024715, + 44.9459702 + ], + [ + -124.0018648, + 44.9441348 + ], + [ + -124.0017729, + 44.9436837 + ], + [ + -124.0016808, + 44.9411238 + ], + [ + -124.001817, + 44.9406715 + ], + [ + -124.001724, + 44.9395141 + ], + [ + -124.0021754, + 44.9373352 + ], + [ + -124.0032361, + 44.9352657 + ], + [ + -124.0033645, + 44.9351177 + ], + [ + -124.0036644, + 44.9343378 + ], + [ + -124.0037354, + 44.9341988 + ], + [ + -124.0053098, + 44.9319616 + ], + [ + -124.0075626, + 44.9300394 + ], + [ + -124.0078566, + 44.9298404 + ], + [ + -124.0102196, + 44.9285295 + ], + [ + -124.0128971, + 44.9275711 + ], + [ + -124.0157862, + 44.9270022 + ], + [ + -124.0187761, + 44.9268446 + ], + [ + -124.0217518, + 44.9271042 + ], + [ + -124.0245991, + 44.9277712 + ], + [ + -124.0272085, + 44.92882 + ], + [ + -124.02948, + 44.9302102 + ], + [ + -124.0313261, + 44.9318884 + ], + [ + -124.0326759, + 44.9337902 + ], + [ + -124.0334776, + 44.9358425 + ], + [ + -124.0337001, + 44.9379664 + ], + [ + -124.033335, + 44.9400804 + ], + [ + -124.0331279, + 44.9405268 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_759421_s_16079", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0066822, + 44.9860388 + ], + [ + -124.0071379, + 44.985936 + ], + [ + -124.0101204, + 44.9856988 + ], + [ + -124.0131107, + 44.9858791 + ], + [ + -124.0159941, + 44.9864699 + ], + [ + -124.0186598, + 44.9874484 + ], + [ + -124.0210054, + 44.9887772 + ], + [ + -124.0229407, + 44.9904051 + ], + [ + -124.0243913, + 44.9922696 + ], + [ + -124.0253016, + 44.9942991 + ], + [ + -124.0256364, + 44.9964156 + ], + [ + -124.0253828, + 44.9985378 + ], + [ + -124.0252809, + 44.998929 + ], + [ + -124.0245477, + 45.0007941 + ], + [ + -124.0233595, + 45.0025373 + ], + [ + -124.0232278, + 45.0026933 + ], + [ + -124.0214824, + 45.004371 + ], + [ + -124.0193172, + 45.0057812 + ], + [ + -124.0179396, + 45.0065189 + ], + [ + -124.0177256, + 45.0066314 + ], + [ + -124.0173447, + 45.0068281 + ], + [ + -124.0158263, + 45.0075189 + ], + [ + -124.0155626, + 45.0076238 + ], + [ + -124.0140157, + 45.0081608 + ], + [ + -124.0137, + 45.0082551 + ], + [ + -124.010344, + 45.0089509 + ], + [ + -124.0099469, + 45.0089993 + ], + [ + -124.006991, + 45.0091526 + ], + [ + -124.0066817, + 45.0091474 + ], + [ + -124.0051738, + 45.0090688 + ], + [ + -124.0032944, + 45.0089044 + ], + [ + -124.0003846, + 45.0084423 + ], + [ + -123.9976563, + 45.0075889 + ], + [ + -123.9952129, + 45.0063766 + ], + [ + -123.993147, + 45.0048513 + ], + [ + -123.991537, + 45.003071 + ], + [ + -123.9904438, + 45.001103 + ], + [ + -123.9899089, + 44.9990221 + ], + [ + -123.9899525, + 44.9969071 + ], + [ + -123.990156, + 44.9956247 + ], + [ + -123.9907825, + 44.9935418 + ], + [ + -123.9919697, + 44.9915857 + ], + [ + -123.9936717, + 44.9898314 + ], + [ + -123.9958232, + 44.9883465 + ], + [ + -123.9983415, + 44.9871878 + ], + [ + -124.0011299, + 44.9864001 + ], + [ + -124.0040812, + 44.9860134 + ], + [ + -124.0066822, + 44.9860388 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_759422_s_759423", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0312721, + 44.959007 + ], + [ + -124.0313168, + 44.9590474 + ], + [ + -124.0327119, + 44.9610337 + ], + [ + -124.0335093, + 44.9631799 + ], + [ + -124.0336758, + 44.9653963 + ], + [ + -124.0332043, + 44.9675905 + ], + [ + -124.033088, + 44.9679087 + ], + [ + -124.0323666, + 44.969418 + ], + [ + -124.0322193, + 44.969665 + ], + [ + -124.0307842, + 44.9715353 + ], + [ + -124.0288625, + 44.973171 + ], + [ + -124.0265281, + 44.9745091 + ], + [ + -124.0238707, + 44.9754981 + ], + [ + -124.0209924, + 44.9761001 + ], + [ + -124.018004, + 44.9762919 + ], + [ + -124.0150203, + 44.9760661 + ], + [ + -124.012156, + 44.9754314 + ], + [ + -124.0095213, + 44.9744122 + ], + [ + -124.0072174, + 44.9730477 + ], + [ + -124.005333, + 44.9713903 + ], + [ + -124.0048773, + 44.9707731 + ], + [ + -124.0048214, + 44.9707231 + ], + [ + -124.004343, + 44.9700494 + ], + [ + -124.0039403, + 44.9695038 + ], + [ + -124.0039187, + 44.9694518 + ], + [ + -124.0034199, + 44.9687492 + ], + [ + -124.0031844, + 44.9681283 + ], + [ + -124.0018441, + 44.9666536 + ], + [ + -124.0007768, + 44.9648031 + ], + [ + -124.0002053, + 44.962845 + ], + [ + -124.0001489, + 44.9608458 + ], + [ + -124.0006096, + 44.958873 + ], + [ + -124.000856, + 44.9583917 + ], + [ + -124.0014941, + 44.9569191 + ], + [ + -124.0029183, + 44.9550446 + ], + [ + -124.0048302, + 44.9534035 + ], + [ + -124.0071561, + 44.9520587 + ], + [ + -124.0098067, + 44.9510619 + ], + [ + -124.0126801, + 44.9504513 + ], + [ + -124.015666, + 44.9502505 + ], + [ + -124.0186498, + 44.9504671 + ], + [ + -124.0215167, + 44.9510929 + ], + [ + -124.0241568, + 44.9521037 + ], + [ + -124.0264685, + 44.9534608 + ], + [ + -124.028363, + 44.955112 + ], + [ + -124.0296767, + 44.9568721 + ], + [ + -124.029956, + 44.9571232 + ], + [ + -124.0303411, + 44.9575742 + ], + [ + -124.0312721, + 44.959007 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_759423_s_16185", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0292521, + 44.9532983 + ], + [ + -124.0292615, + 44.9535226 + ], + [ + -124.0292547, + 44.9544286 + ], + [ + -124.029188, + 44.9553859 + ], + [ + -124.0291034, + 44.9560265 + ], + [ + -124.0298998, + 44.957165 + ], + [ + -124.03068, + 44.9591778 + ], + [ + -124.0309036, + 44.9612593 + ], + [ + -124.0309016, + 44.9613293 + ], + [ + -124.0305476, + 44.9634443 + ], + [ + -124.0296193, + 44.9654695 + ], + [ + -124.0281521, + 44.9673273 + ], + [ + -124.0262024, + 44.9689461 + ], + [ + -124.0238453, + 44.9702638 + ], + [ + -124.0211712, + 44.9712296 + ], + [ + -124.0182829, + 44.9718065 + ], + [ + -124.0152916, + 44.9719723 + ], + [ + -124.0133707, + 44.97181 + ], + [ + -124.0123129, + 44.9717577 + ], + [ + -124.0094583, + 44.971212 + ], + [ + -124.0068048, + 44.9702869 + ], + [ + -124.0044515, + 44.969017 + ], + [ + -124.0024861, + 44.9674495 + ], + [ + -124.0020531, + 44.9670284 + ], + [ + -124.0002279, + 44.9646985 + ], + [ + -123.9996681, + 44.9637164 + ], + [ + -123.9990616, + 44.9624251 + ], + [ + -123.9988148, + 44.9617641 + ], + [ + -123.9983713, + 44.959999 + ], + [ + -123.9982794, + 44.959307 + ], + [ + -123.998213, + 44.9581606 + ], + [ + -123.9982242, + 44.9574836 + ], + [ + -123.9982906, + 44.956592 + ], + [ + -123.9986571, + 44.9538297 + ], + [ + -123.9986575, + 44.9537847 + ], + [ + -123.9985106, + 44.9521703 + ], + [ + -123.9984965, + 44.9509476 + ], + [ + -123.9985387, + 44.9503256 + ], + [ + -123.9990778, + 44.9479436 + ], + [ + -123.9992649, + 44.9474646 + ], + [ + -124.0001555, + 44.9457561 + ], + [ + -124.0003556, + 44.9454531 + ], + [ + -124.0009706, + 44.9446179 + ], + [ + -124.0031191, + 44.9419852 + ], + [ + -124.0036043, + 44.9414297 + ], + [ + -124.0045674, + 44.9403978 + ], + [ + -124.0051551, + 44.9398113 + ], + [ + -124.0073683, + 44.9377506 + ], + [ + -124.0076362, + 44.9375083 + ], + [ + -124.0090033, + 44.9363075 + ], + [ + -124.0090393, + 44.9363282 + ], + [ + -124.0101641, + 44.9353416 + ], + [ + -124.0124694, + 44.9339797 + ], + [ + -124.0151044, + 44.9329633 + ], + [ + -124.0179678, + 44.9323316 + ], + [ + -124.0209497, + 44.9321087 + ], + [ + -124.0239355, + 44.9323032 + ], + [ + -124.0268106, + 44.9329077 + ], + [ + -124.0294645, + 44.933899 + ], + [ + -124.0317952, + 44.9352389 + ], + [ + -124.0337133, + 44.936876 + ], + [ + -124.0351449, + 44.9387474 + ], + [ + -124.0360351, + 44.9407812 + ], + [ + -124.0363495, + 44.9428993 + ], + [ + -124.0360761, + 44.9450203 + ], + [ + -124.0352252, + 44.9470626 + ], + [ + -124.0338296, + 44.9489477 + ], + [ + -124.0336766, + 44.9491128 + ], + [ + -124.0327975, + 44.9499673 + ], + [ + -124.031567, + 44.9510486 + ], + [ + -124.0297931, + 44.9527009 + ], + [ + -124.0293647, + 44.9531602 + ], + [ + -124.0292521, + 44.9532983 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_759423_s_759423", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0003184, + 44.9612581 + ], + [ + -124.0005756, + 44.9591361 + ], + [ + -124.0014109, + 44.9570905 + ], + [ + -124.0027921, + 44.9551999 + ], + [ + -124.0046661, + 44.9535369 + ], + [ + -124.0069609, + 44.9521654 + ], + [ + -124.0095883, + 44.9511382 + ], + [ + -124.0124474, + 44.9504945 + ], + [ + -124.0154284, + 44.9502593 + ], + [ + -124.0184167, + 44.9504415 + ], + [ + -124.0212976, + 44.951034 + ], + [ + -124.0239604, + 44.9520143 + ], + [ + -124.0263028, + 44.9533445 + ], + [ + -124.0282349, + 44.9549736 + ], + [ + -124.0296824, + 44.9568391 + ], + [ + -124.0305895, + 44.9588691 + ], + [ + -124.0309215, + 44.9609859 + ], + [ + -124.0306654, + 44.9631079 + ], + [ + -124.0298311, + 44.9651537 + ], + [ + -124.0284506, + 44.9670447 + ], + [ + -124.0265768, + 44.968708 + ], + [ + -124.0242818, + 44.9700799 + ], + [ + -124.0216538, + 44.9711075 + ], + [ + -124.0187938, + 44.9717513 + ], + [ + -124.0158117, + 44.9719867 + ], + [ + -124.0128223, + 44.9718045 + ], + [ + -124.0099405, + 44.9712117 + ], + [ + -124.007277, + 44.9702311 + ], + [ + -124.0049343, + 44.9689005 + ], + [ + -124.0030024, + 44.967271 + ], + [ + -124.0015555, + 44.9654052 + ], + [ + -124.0006493, + 44.9633749 + ], + [ + -124.0003184, + 44.9612581 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_759425_s_771261", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0088585, + 44.9485223 + ], + [ + -124.0095716, + 44.9485377 + ], + [ + -124.0102699, + 44.9483758 + ], + [ + -124.0131714, + 44.9481188 + ], + [ + -124.0160888, + 44.9482584 + ], + [ + -124.0189155, + 44.9487895 + ], + [ + -124.0215484, + 44.9496928 + ], + [ + -124.0238913, + 44.9509352 + ], + [ + -124.0258587, + 44.9524713 + ], + [ + -124.0273787, + 44.9542452 + ], + [ + -124.0283958, + 44.956192 + ], + [ + -124.0285262, + 44.956541 + ], + [ + -124.0288094, + 44.9571499 + ], + [ + -124.0294663, + 44.959228 + ], + [ + -124.0295395, + 44.9613572 + ], + [ + -124.0290262, + 44.9634556 + ], + [ + -124.0279461, + 44.9654426 + ], + [ + -124.0263407, + 44.9672418 + ], + [ + -124.0242715, + 44.9687841 + ], + [ + -124.0218182, + 44.9700101 + ], + [ + -124.0190749, + 44.9708727 + ], + [ + -124.0161473, + 44.9713388 + ], + [ + -124.0131477, + 44.9713904 + ], + [ + -124.0115317, + 44.9711909 + ], + [ + -124.0088935, + 44.9714207 + ], + [ + -124.0059555, + 44.9712731 + ], + [ + -124.0031118, + 44.9707286 + ], + [ + -124.0004677, + 44.9698075 + ], + [ + -123.9981213, + 44.9685439 + ], + [ + -123.9977539, + 44.9682519 + ], + [ + -123.9972886, + 44.9680479 + ], + [ + -123.9950922, + 44.9665957 + ], + [ + -123.9933373, + 44.964867 + ], + [ + -123.9920916, + 44.9629285 + ], + [ + -123.9914028, + 44.9608546 + ], + [ + -123.9912974, + 44.9587251 + ], + [ + -123.9917793, + 44.956622 + ], + [ + -123.9928301, + 44.9546262 + ], + [ + -123.992956, + 44.9544439 + ], + [ + -123.9945343, + 44.9526327 + ], + [ + -123.9965797, + 44.951075 + ], + [ + -123.9990138, + 44.9498305 + ], + [ + -124.0017428, + 44.948947 + ], + [ + -124.0046621, + 44.9484586 + ], + [ + -124.0076595, + 44.9483839 + ], + [ + -124.0088585, + 44.9485223 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_771261_s_759417", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.027278, + 44.95479 + ], + [ + -124.0277983, + 44.9551622 + ], + [ + -124.029986, + 44.9571399 + ], + [ + -124.030244, + 44.9574389 + ], + [ + -124.0315094, + 44.9592719 + ], + [ + -124.0316895, + 44.9596099 + ], + [ + -124.0325217, + 44.9618985 + ], + [ + -124.032812, + 44.9633234 + ], + [ + -124.0329264, + 44.9640624 + ], + [ + -124.0330217, + 44.9649594 + ], + [ + -124.0328223, + 44.9677029 + ], + [ + -124.0327454, + 44.9680059 + ], + [ + -124.0321073, + 44.9697113 + ], + [ + -124.0319404, + 44.9700454 + ], + [ + -124.0305131, + 44.9721502 + ], + [ + -124.0301801, + 44.9725302 + ], + [ + -124.0286749, + 44.9739685 + ], + [ + -124.0284679, + 44.9741355 + ], + [ + -124.0262747, + 44.9755891 + ], + [ + -124.0237241, + 44.9767109 + ], + [ + -124.020914, + 44.9774579 + ], + [ + -124.0179526, + 44.9778014 + ], + [ + -124.0149536, + 44.9777282 + ], + [ + -124.0120325, + 44.977241 + ], + [ + -124.0093014, + 44.9763586 + ], + [ + -124.0068655, + 44.9751149 + ], + [ + -124.0048183, + 44.9735578 + ], + [ + -124.0032385, + 44.9717471 + ], + [ + -124.0021869, + 44.9697524 + ], + [ + -124.0017036, + 44.9676504 + ], + [ + -124.0017463, + 44.9667741 + ], + [ + -124.001446, + 44.9664441 + ], + [ + -124.0000726, + 44.9645506 + ], + [ + -123.9992459, + 44.9625032 + ], + [ + -123.9989978, + 44.9603807 + ], + [ + -123.9993377, + 44.9582646 + ], + [ + -124.0002524, + 44.9562362 + ], + [ + -124.0017069, + 44.9543735 + ], + [ + -124.003645, + 44.952748 + ], + [ + -124.0059924, + 44.9514222 + ], + [ + -124.0086589, + 44.950447 + ], + [ + -124.011542, + 44.9498599 + ], + [ + -124.0145309, + 44.9496834 + ], + [ + -124.0175109, + 44.9499243 + ], + [ + -124.0203676, + 44.9505733 + ], + [ + -124.0229911, + 44.9516055 + ], + [ + -124.0252808, + 44.9529813 + ], + [ + -124.0271485, + 44.9546478 + ], + [ + -124.027278, + 44.95479 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_781958_s_16068", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0748897, + 44.6720436 + ], + [ + -124.0749906, + 44.6722821 + ], + [ + -124.0755134, + 44.6735719 + ], + [ + -124.0757329, + 44.6740695 + ], + [ + -124.0759955, + 44.6746357 + ], + [ + -124.0760852, + 44.6748357 + ], + [ + -124.0765514, + 44.6759107 + ], + [ + -124.076714, + 44.6763129 + ], + [ + -124.0768431, + 44.6766569 + ], + [ + -124.0769474, + 44.6769512 + ], + [ + -124.0769748, + 44.6770334 + ], + [ + -124.0770396, + 44.6772224 + ], + [ + -124.0773398, + 44.6780228 + ], + [ + -124.0775622, + 44.6787022 + ], + [ + -124.0777003, + 44.6791952 + ], + [ + -124.0779957, + 44.6813146 + ], + [ + -124.077706, + 44.6834345 + ], + [ + -124.076842, + 44.6854733 + ], + [ + -124.0754371, + 44.6873526 + ], + [ + -124.0735451, + 44.6890003 + ], + [ + -124.0712387, + 44.6903529 + ], + [ + -124.0686066, + 44.6913586 + ], + [ + -124.06575, + 44.6919785 + ], + [ + -124.0627787, + 44.692189 + ], + [ + -124.059807, + 44.6919818 + ], + [ + -124.056949, + 44.691365 + ], + [ + -124.0543148, + 44.6903622 + ], + [ + -124.0520055, + 44.6890121 + ], + [ + -124.0501099, + 44.6873665 + ], + [ + -124.0487009, + 44.6854887 + ], + [ + -124.0478326, + 44.6834509 + ], + [ + -124.0477904, + 44.6833001 + ], + [ + -124.0475739, + 44.6827222 + ], + [ + -124.0474916, + 44.6824925 + ], + [ + -124.0473767, + 44.6821565 + ], + [ + -124.0473682, + 44.6821311 + ], + [ + -124.0470326, + 44.6813567 + ], + [ + -124.046782, + 44.6808154 + ], + [ + -124.0467143, + 44.6806657 + ], + [ + -124.0464085, + 44.6799716 + ], + [ + -124.0463055, + 44.6797281 + ], + [ + -124.0457823, + 44.6784357 + ], + [ + -124.0457207, + 44.6782956 + ], + [ + -124.0451102, + 44.6762107 + ], + [ + -124.0450815, + 44.6740809 + ], + [ + -124.0456358, + 44.671988 + ], + [ + -124.0467515, + 44.6700124 + ], + [ + -124.0483857, + 44.6682302 + ], + [ + -124.0504757, + 44.6667096 + ], + [ + -124.0529412, + 44.6655092 + ], + [ + -124.0556873, + 44.6646751 + ], + [ + -124.0586086, + 44.6642392 + ], + [ + -124.061593, + 44.6642184 + ], + [ + -124.0645257, + 44.6646134 + ], + [ + -124.0672942, + 44.6654091 + ], + [ + -124.069792, + 44.6665748 + ], + [ + -124.0719233, + 44.6680659 + ], + [ + -124.0736061, + 44.669825 + ], + [ + -124.0747757, + 44.6717846 + ], + [ + -124.0748897, + 44.6720436 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_781959_s_16094", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0301254, + 44.9524329 + ], + [ + -124.0300558, + 44.9524972 + ], + [ + -124.0298326, + 44.9527015 + ], + [ + -124.0297314, + 44.9528127 + ], + [ + -124.0296076, + 44.9529465 + ], + [ + -124.0294565, + 44.9531072 + ], + [ + -124.0293354, + 44.9532612 + ], + [ + -124.0293467, + 44.9535223 + ], + [ + -124.0293469, + 44.9541792 + ], + [ + -124.0293241, + 44.9547212 + ], + [ + -124.0293074, + 44.9549989 + ], + [ + -124.0292924, + 44.9551899 + ], + [ + -124.0292263, + 44.9557618 + ], + [ + -124.0290189, + 44.9571152 + ], + [ + -124.0290176, + 44.9571296 + ], + [ + -124.0289729, + 44.9575144 + ], + [ + -124.0288046, + 44.9587046 + ], + [ + -124.0282044, + 44.9608145 + ], + [ + -124.02703, + 44.962799 + ], + [ + -124.0253274, + 44.9645801 + ], + [ + -124.0231636, + 44.9660879 + ], + [ + -124.0206234, + 44.9672633 + ], + [ + -124.0178066, + 44.96806 + ], + [ + -124.0148237, + 44.9684467 + ], + [ + -124.0146541, + 44.9684565 + ], + [ + -124.0136728, + 44.9686769 + ], + [ + -124.0106907, + 44.9689106 + ], + [ + -124.0077016, + 44.9687267 + ], + [ + -124.0048206, + 44.9681323 + ], + [ + -124.0021583, + 44.9671503 + ], + [ + -123.9998171, + 44.9658185 + ], + [ + -123.9978871, + 44.9641879 + ], + [ + -123.9964424, + 44.9623213 + ], + [ + -123.9955384, + 44.9602905 + ], + [ + -123.9952098, + 44.9581735 + ], + [ + -123.9954693, + 44.9560516 + ], + [ + -123.9963067, + 44.9540065 + ], + [ + -123.9976899, + 44.9521166 + ], + [ + -123.9985335, + 44.9513692 + ], + [ + -123.9985331, + 44.9513452 + ], + [ + -123.9985642, + 44.9505008 + ], + [ + -123.9985943, + 44.9501728 + ], + [ + -123.9989857, + 44.9483397 + ], + [ + -123.9991008, + 44.9479997 + ], + [ + -123.9998745, + 44.9463253 + ], + [ + -124.0001186, + 44.9459133 + ], + [ + -124.0008223, + 44.9448816 + ], + [ + -124.0011654, + 44.9444396 + ], + [ + -124.0013541, + 44.9442035 + ], + [ + -124.0026615, + 44.9426145 + ], + [ + -124.0030401, + 44.9421333 + ], + [ + -124.003673, + 44.941399 + ], + [ + -124.0040984, + 44.9409466 + ], + [ + -124.0044953, + 44.9405109 + ], + [ + -124.005255, + 44.9397504 + ], + [ + -124.005846, + 44.9392095 + ], + [ + -124.0074477, + 44.9377208 + ], + [ + -124.0094932, + 44.9361634 + ], + [ + -124.0119269, + 44.9349193 + ], + [ + -124.0146556, + 44.9340363 + ], + [ + -124.0175742, + 44.9335483 + ], + [ + -124.0205708, + 44.9334741 + ], + [ + -124.0235303, + 44.9338164 + ], + [ + -124.0263389, + 44.9345622 + ], + [ + -124.0288888, + 44.9356829 + ], + [ + -124.031082, + 44.9371353 + ], + [ + -124.0328342, + 44.9388636 + ], + [ + -124.0340781, + 44.9408016 + ], + [ + -124.0347659, + 44.9428746 + ], + [ + -124.034871, + 44.9450031 + ], + [ + -124.0343894, + 44.9471053 + ], + [ + -124.0333395, + 44.9491004 + ], + [ + -124.0317616, + 44.9509116 + ], + [ + -124.0301254, + 44.9524329 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_781972_s_15954", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.1084342, + 44.3553513 + ], + [ + -124.1084472, + 44.3553527 + ], + [ + -124.1083244, + 44.3559337 + ], + [ + -124.1082938, + 44.3560724 + ], + [ + -124.1081395, + 44.3567436 + ], + [ + -124.1080306, + 44.3572775 + ], + [ + -124.1079941, + 44.3574474 + ], + [ + -124.107866, + 44.358013 + ], + [ + -124.1076438, + 44.3590939 + ], + [ + -124.1075163, + 44.3597194 + ], + [ + -124.1074725, + 44.3599211 + ], + [ + -124.1073011, + 44.3606637 + ], + [ + -124.1072472, + 44.3609319 + ], + [ + -124.1071119, + 44.3616109 + ], + [ + -124.1070744, + 44.3617889 + ], + [ + -124.1070156, + 44.3620527 + ], + [ + -124.1067081, + 44.3634415 + ], + [ + -124.1067044, + 44.3634581 + ], + [ + -124.1065246, + 44.3642621 + ], + [ + -124.1065125, + 44.3643157 + ], + [ + -124.1062064, + 44.3656417 + ], + [ + -124.1057437, + 44.3678646 + ], + [ + -124.1057161, + 44.367992 + ], + [ + -124.1052604, + 44.3700165 + ], + [ + -124.1048782, + 44.3719328 + ], + [ + -124.1048373, + 44.3721254 + ], + [ + -124.1047395, + 44.3725602 + ], + [ + -124.1042713, + 44.3746411 + ], + [ + -124.103429, + 44.3784701 + ], + [ + -124.1031156, + 44.3799833 + ], + [ + -124.1031738, + 44.3806499 + ], + [ + -124.1033418, + 44.3819141 + ], + [ + -124.10335, + 44.3819784 + ], + [ + -124.1034998, + 44.3831805 + ], + [ + -124.1037245, + 44.3849096 + ], + [ + -124.1037881, + 44.3860841 + ], + [ + -124.1037763, + 44.3866401 + ], + [ + -124.1035447, + 44.3883736 + ], + [ + -124.1033988, + 44.3889626 + ], + [ + -124.1031866, + 44.3896787 + ], + [ + -124.1029977, + 44.3902247 + ], + [ + -124.102973, + 44.3902951 + ], + [ + -124.1027639, + 44.3908826 + ], + [ + -124.1020002, + 44.3930521 + ], + [ + -124.1015934, + 44.3940167 + ], + [ + -124.1010487, + 44.3951208 + ], + [ + -124.1010156, + 44.3951124 + ], + [ + -124.1000427, + 44.3967631 + ], + [ + -124.0983745, + 44.3985256 + ], + [ + -124.0962587, + 44.4000209 + ], + [ + -124.0937766, + 44.4011914 + ], + [ + -124.0910235, + 44.4019923 + ], + [ + -124.0881053, + 44.4023926 + ], + [ + -124.0851343, + 44.4023771 + ], + [ + -124.0822246, + 44.4019462 + ], + [ + -124.0794881, + 44.4011166 + ], + [ + -124.0770301, + 44.3999201 + ], + [ + -124.074945, + 44.3984028 + ], + [ + -124.0733129, + 44.396623 + ], + [ + -124.0721966, + 44.3946491 + ], + [ + -124.0716389, + 44.392557 + ], + [ + -124.0716611, + 44.390427 + ], + [ + -124.0722624, + 44.3883411 + ], + [ + -124.0722955, + 44.3882651 + ], + [ + -124.0724791, + 44.3878694 + ], + [ + -124.0727895, + 44.3872409 + ], + [ + -124.0733766, + 44.3855754 + ], + [ + -124.0733244, + 44.3851724 + ], + [ + -124.0733191, + 44.3851306 + ], + [ + -124.0731714, + 44.3839398 + ], + [ + -124.072985, + 44.3825319 + ], + [ + -124.0729465, + 44.3821799 + ], + [ + -124.0728099, + 44.3806059 + ], + [ + -124.0727935, + 44.3794833 + ], + [ + -124.0728096, + 44.3792026 + ], + [ + -124.0728349, + 44.3787288 + ], + [ + -124.0729862, + 44.3775573 + ], + [ + -124.0730974, + 44.3770173 + ], + [ + -124.0731003, + 44.3770032 + ], + [ + -124.0734697, + 44.3752242 + ], + [ + -124.0734904, + 44.3751277 + ], + [ + -124.0743494, + 44.3712318 + ], + [ + -124.0743578, + 44.371194 + ], + [ + -124.0748313, + 44.3690941 + ], + [ + -124.0749078, + 44.3687548 + ], + [ + -124.0752911, + 44.3668383 + ], + [ + -124.0753322, + 44.366645 + ], + [ + -124.0757964, + 44.3645877 + ], + [ + -124.0762646, + 44.3623435 + ], + [ + -124.0763021, + 44.3621733 + ], + [ + -124.0766222, + 44.3607891 + ], + [ + -124.0767946, + 44.3600203 + ], + [ + -124.0771021, + 44.3586346 + ], + [ + -124.0771446, + 44.3584441 + ], + [ + -124.077264, + 44.3578462 + ], + [ + -124.0772672, + 44.35783 + ], + [ + -124.0773453, + 44.357443 + ], + [ + -124.0773932, + 44.3572219 + ], + [ + -124.0775671, + 44.3564696 + ], + [ + -124.0776756, + 44.3559386 + ], + [ + -124.0776783, + 44.3559256 + ], + [ + -124.0779186, + 44.3547597 + ], + [ + -124.0779526, + 44.3546026 + ], + [ + -124.0780795, + 44.3540435 + ], + [ + -124.0781913, + 44.3534966 + ], + [ + -124.0782339, + 44.3533006 + ], + [ + -124.0783951, + 44.3526009 + ], + [ + -124.0785035, + 44.3520893 + ], + [ + -124.0785446, + 44.3519061 + ], + [ + -124.0785616, + 44.3518341 + ], + [ + -124.0793424, + 44.3497791 + ], + [ + -124.0806669, + 44.3478729 + ], + [ + -124.0824841, + 44.3461887 + ], + [ + -124.0847242, + 44.3447912 + ], + [ + -124.0873011, + 44.3437341 + ], + [ + -124.0901157, + 44.343058 + ], + [ + -124.0930601, + 44.3427889 + ], + [ + -124.096021, + 44.3429371 + ], + [ + -124.0988848, + 44.3434969 + ], + [ + -124.1015414, + 44.3444468 + ], + [ + -124.1038889, + 44.3457504 + ], + [ + -124.1058369, + 44.3473575 + ], + [ + -124.1073108, + 44.3492064 + ], + [ + -124.1082536, + 44.3512261 + ], + [ + -124.1086293, + 44.353339 + ], + [ + -124.1084342, + 44.3553513 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_781974_s_15962", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0947114, + 44.4762259 + ], + [ + -124.0946583, + 44.4772197 + ], + [ + -124.0946553, + 44.4772662 + ], + [ + -124.0947129, + 44.4774188 + ], + [ + -124.0947323, + 44.4774708 + ], + [ + -124.095735, + 44.4801806 + ], + [ + -124.0957503, + 44.4802225 + ], + [ + -124.0959315, + 44.4807203 + ], + [ + -124.0960053, + 44.4809219 + ], + [ + -124.0974687, + 44.4848876 + ], + [ + -124.0976999, + 44.4856141 + ], + [ + -124.0979051, + 44.4863791 + ], + [ + -124.0979742, + 44.486656 + ], + [ + -124.0981294, + 44.487328 + ], + [ + -124.0982128, + 44.4877377 + ], + [ + -124.098329, + 44.4883957 + ], + [ + -124.0984371, + 44.4893316 + ], + [ + -124.0984722, + 44.4899726 + ], + [ + -124.0984814, + 44.490597 + ], + [ + -124.0984299, + 44.492619 + ], + [ + -124.098421, + 44.4928433 + ], + [ + -124.0982886, + 44.4952793 + ], + [ + -124.0982491, + 44.4957463 + ], + [ + -124.0981803, + 44.4963463 + ], + [ + -124.0981157, + 44.4967952 + ], + [ + -124.0979958, + 44.4974862 + ], + [ + -124.097921, + 44.4978634 + ], + [ + -124.0976943, + 44.4988784 + ], + [ + -124.097441, + 44.4997706 + ], + [ + -124.0974018, + 44.4998841 + ], + [ + -124.09724, + 44.5003716 + ], + [ + -124.0962718, + 44.5023857 + ], + [ + -124.0947731, + 44.5042259 + ], + [ + -124.0928014, + 44.5058214 + ], + [ + -124.0904325, + 44.507111 + ], + [ + -124.0877575, + 44.508045 + ], + [ + -124.0848792, + 44.5085876 + ], + [ + -124.0819083, + 44.5087178 + ], + [ + -124.0789589, + 44.5084307 + ], + [ + -124.0761445, + 44.5077373 + ], + [ + -124.0735734, + 44.5066643 + ], + [ + -124.0713443, + 44.5052529 + ], + [ + -124.0695429, + 44.5035573 + ], + [ + -124.0682384, + 44.5016428 + ], + [ + -124.067481, + 44.499583 + ], + [ + -124.0672996, + 44.497457 + ], + [ + -124.0677012, + 44.4953465 + ], + [ + -124.0678088, + 44.4950228 + ], + [ + -124.0678997, + 44.4946168 + ], + [ + -124.067948, + 44.4943387 + ], + [ + -124.0679644, + 44.4941969 + ], + [ + -124.0680791, + 44.4921068 + ], + [ + -124.068118, + 44.4906088 + ], + [ + -124.0680548, + 44.4903348 + ], + [ + -124.067985, + 44.4900741 + ], + [ + -124.0666518, + 44.4864564 + ], + [ + -124.0666429, + 44.4864321 + ], + [ + -124.0665629, + 44.4862131 + ], + [ + -124.0663839, + 44.4857206 + ], + [ + -124.0653998, + 44.4830574 + ], + [ + -124.0649449, + 44.4818503 + ], + [ + -124.0648329, + 44.4815343 + ], + [ + -124.0647, + 44.4811343 + ], + [ + -124.0643932, + 44.4798965 + ], + [ + -124.0643462, + 44.4796125 + ], + [ + -124.0642474, + 44.4786479 + ], + [ + -124.0642345, + 44.4783259 + ], + [ + -124.0642499, + 44.4774342 + ], + [ + -124.0643342, + 44.4763042 + ], + [ + -124.0643841, + 44.4753793 + ], + [ + -124.0643947, + 44.4751879 + ], + [ + -124.0644237, + 44.4748203 + ], + [ + -124.0645297, + 44.4737881 + ], + [ + -124.0645647, + 44.4730723 + ], + [ + -124.0645736, + 44.4729215 + ], + [ + -124.0646168, + 44.4722905 + ], + [ + -124.0646516, + 44.4719147 + ], + [ + -124.0646609, + 44.4718354 + ], + [ + -124.0646581, + 44.471695 + ], + [ + -124.0646391, + 44.4713498 + ], + [ + -124.0645628, + 44.4709713 + ], + [ + -124.0638711, + 44.4690977 + ], + [ + -124.0638364, + 44.4690019 + ], + [ + -124.0634995, + 44.4680543 + ], + [ + -124.0632912, + 44.467476 + ], + [ + -124.0631594, + 44.4671194 + ], + [ + -124.0625958, + 44.4656523 + ], + [ + -124.0625533, + 44.4655393 + ], + [ + -124.0618587, + 44.4636522 + ], + [ + -124.0618354, + 44.463588 + ], + [ + -124.0614873, + 44.4626182 + ], + [ + -124.0609717, + 44.4611934 + ], + [ + -124.0607307, + 44.4605684 + ], + [ + -124.0605, + 44.4599898 + ], + [ + -124.0603939, + 44.4597099 + ], + [ + -124.0601377, + 44.4589957 + ], + [ + -124.0593425, + 44.4568662 + ], + [ + -124.0592022, + 44.4564593 + ], + [ + -124.0590394, + 44.4559443 + ], + [ + -124.0589089, + 44.4554864 + ], + [ + -124.0587801, + 44.4549784 + ], + [ + -124.0585995, + 44.4540317 + ], + [ + -124.0585137, + 44.4533637 + ], + [ + -124.0585114, + 44.4533455 + ], + [ + -124.0584425, + 44.4527995 + ], + [ + -124.0583818, + 44.4519355 + ], + [ + -124.058374, + 44.4513965 + ], + [ + -124.0583853, + 44.450849 + ], + [ + -124.0584194, + 44.450237 + ], + [ + -124.0584816, + 44.4495971 + ], + [ + -124.0587357, + 44.4477644 + ], + [ + -124.0588182, + 44.4468572 + ], + [ + -124.0588297, + 44.4467409 + ], + [ + -124.0590508, + 44.4446556 + ], + [ + -124.0591689, + 44.4434773 + ], + [ + -124.0591894, + 44.4432938 + ], + [ + -124.0595251, + 44.4405858 + ], + [ + -124.0601091, + 44.4384157 + ], + [ + -124.0612938, + 44.4363752 + ], + [ + -124.0630302, + 44.4345486 + ], + [ + -124.0652464, + 44.4330115 + ], + [ + -124.0662625, + 44.4325495 + ], + [ + -124.0665464, + 44.4323777 + ], + [ + -124.0672782, + 44.4320877 + ], + [ + -124.0678507, + 44.4318274 + ], + [ + -124.0681181, + 44.4317549 + ], + [ + -124.0691478, + 44.4313469 + ], + [ + -124.0719797, + 44.4306996 + ], + [ + -124.0749335, + 44.4304605 + ], + [ + -124.0752414, + 44.4304573 + ], + [ + -124.0781203, + 44.4306249 + ], + [ + -124.0809027, + 44.4311804 + ], + [ + -124.0834876, + 44.4321039 + ], + [ + -124.0857814, + 44.4333618 + ], + [ + -124.0877008, + 44.4349085 + ], + [ + -124.0891761, + 44.4366879 + ], + [ + -124.0901539, + 44.4386354 + ], + [ + -124.0905985, + 44.4406804 + ], + [ + -124.0906141, + 44.4408686 + ], + [ + -124.0904995, + 44.4429894 + ], + [ + -124.0898116, + 44.4450538 + ], + [ + -124.0893513, + 44.4457727 + ], + [ + -124.0893058, + 44.4462297 + ], + [ + -124.0893011, + 44.446275 + ], + [ + -124.0890848, + 44.4483249 + ], + [ + -124.0889914, + 44.4493578 + ], + [ + -124.0889494, + 44.4497249 + ], + [ + -124.0887231, + 44.4513631 + ], + [ + -124.0887249, + 44.4513774 + ], + [ + -124.0887388, + 44.4514853 + ], + [ + -124.0894656, + 44.4534288 + ], + [ + -124.0895035, + 44.4535323 + ], + [ + -124.0897282, + 44.4541578 + ], + [ + -124.0899217, + 44.4546423 + ], + [ + -124.0899574, + 44.4547333 + ], + [ + -124.0902486, + 44.4554872 + ], + [ + -124.0903112, + 44.4556547 + ], + [ + -124.0908616, + 44.4571736 + ], + [ + -124.090869, + 44.4571942 + ], + [ + -124.0912097, + 44.458142 + ], + [ + -124.0918725, + 44.4599403 + ], + [ + -124.0924351, + 44.4614028 + ], + [ + -124.0924744, + 44.4615068 + ], + [ + -124.0926375, + 44.4619478 + ], + [ + -124.0926611, + 44.4620125 + ], + [ + -124.0928872, + 44.4626394 + ], + [ + -124.092899, + 44.4626723 + ], + [ + -124.0932252, + 44.4635883 + ], + [ + -124.094126, + 44.4660253 + ], + [ + -124.0944777, + 44.4672637 + ], + [ + -124.0945943, + 44.4678462 + ], + [ + -124.094695, + 44.4683437 + ], + [ + -124.0947243, + 44.4684963 + ], + [ + -124.0948204, + 44.4690242 + ], + [ + -124.0949357, + 44.4699969 + ], + [ + -124.09499, + 44.4709729 + ], + [ + -124.0950004, + 44.4712493 + ], + [ + -124.0950106, + 44.4717552 + ], + [ + -124.0950102, + 44.4720858 + ], + [ + -124.0950003, + 44.4725258 + ], + [ + -124.0949497, + 44.4732543 + ], + [ + -124.0949167, + 44.4735376 + ], + [ + -124.0948918, + 44.4739051 + ], + [ + -124.0948507, + 44.4747536 + ], + [ + -124.0948193, + 44.4751696 + ], + [ + -124.0947114, + 44.4762259 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_833259_s_16275", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0720725, + 44.6243692 + ], + [ + -124.0731988, + 44.6260471 + ], + [ + -124.0739387, + 44.6281105 + ], + [ + -124.0741006, + 44.6302372 + ], + [ + -124.0736784, + 44.6323457 + ], + [ + -124.0726882, + 44.6343549 + ], + [ + -124.071168, + 44.6361874 + ], + [ + -124.0691762, + 44.637773 + ], + [ + -124.0667894, + 44.6390506 + ], + [ + -124.0640992, + 44.6399712 + ], + [ + -124.0612091, + 44.6404993 + ], + [ + -124.0582302, + 44.6406145 + ], + [ + -124.055277, + 44.6403126 + ], + [ + -124.0524632, + 44.6396051 + ], + [ + -124.0523131, + 44.6395551 + ], + [ + -124.0512369, + 44.6391584 + ], + [ + -124.0508669, + 44.6390083 + ], + [ + -124.0488168, + 44.6380111 + ], + [ + -124.0485568, + 44.6378611 + ], + [ + -124.0463307, + 44.6362791 + ], + [ + -124.0462507, + 44.6362091 + ], + [ + -124.044957, + 44.6348877 + ], + [ + -124.0445399, + 44.6342888 + ], + [ + -124.0438964, + 44.633549 + ], + [ + -124.0438833, + 44.6335315 + ], + [ + -124.0436172, + 44.633269 + ], + [ + -124.0423885, + 44.6313787 + ], + [ + -124.0416879, + 44.6293556 + ], + [ + -124.0415411, + 44.6272743 + ], + [ + -124.0419535, + 44.6252112 + ], + [ + -124.0424909, + 44.6241048 + ], + [ + -124.0425026, + 44.6240638 + ], + [ + -124.0425352, + 44.6239732 + ], + [ + -124.0435553, + 44.6219717 + ], + [ + -124.0451024, + 44.6201508 + ], + [ + -124.0471172, + 44.6185804 + ], + [ + -124.049522, + 44.6173209 + ], + [ + -124.0522246, + 44.6164206 + ], + [ + -124.0551211, + 44.6159142 + ], + [ + -124.0581002, + 44.615821 + ], + [ + -124.0610476, + 44.6161446 + ], + [ + -124.06385, + 44.6168727 + ], + [ + -124.0663998, + 44.6179772 + ], + [ + -124.068599, + 44.6194157 + ], + [ + -124.0703632, + 44.621133 + ], + [ + -124.0716244, + 44.6230631 + ], + [ + -124.0720725, + 44.6243692 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_2438932_s_16065", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0670572, + 44.6493516 + ], + [ + -124.067399, + 44.650154 + ], + [ + -124.0676936, + 44.6522735 + ], + [ + -124.0674033, + 44.6543933 + ], + [ + -124.0665391, + 44.656432 + ], + [ + -124.0651342, + 44.6583111 + ], + [ + -124.0648842, + 44.6585288 + ], + [ + -124.0643894, + 44.6597483 + ], + [ + -124.063016, + 44.6616392 + ], + [ + -124.0611519, + 44.6633026 + ], + [ + -124.0588689, + 44.6646744 + ], + [ + -124.0562547, + 44.665702 + ], + [ + -124.0534097, + 44.6663457 + ], + [ + -124.0504434, + 44.666581 + ], + [ + -124.0474697, + 44.6663986 + ], + [ + -124.0446031, + 44.6658057 + ], + [ + -124.0419537, + 44.664825 + ], + [ + -124.0396235, + 44.6634942 + ], + [ + -124.0377019, + 44.6618646 + ], + [ + -124.0362628, + 44.6599986 + ], + [ + -124.0353615, + 44.6579682 + ], + [ + -124.0350694, + 44.6560885 + ], + [ + -124.0347894, + 44.6554854 + ], + [ + -124.0347765, + 44.6554444 + ], + [ + -124.03441, + 44.6534094 + ], + [ + -124.0345861, + 44.6513615 + ], + [ + -124.0352983, + 44.6493738 + ], + [ + -124.0365213, + 44.647517 + ], + [ + -124.0382113, + 44.6458575 + ], + [ + -124.0403081, + 44.6444543 + ], + [ + -124.0407371, + 44.6442173 + ], + [ + -124.0414221, + 44.6438603 + ], + [ + -124.042645, + 44.6432594 + ], + [ + -124.0434946, + 44.6428427 + ], + [ + -124.0435022, + 44.6428506 + ], + [ + -124.0459441, + 44.6418524 + ], + [ + -124.0487591, + 44.6411763 + ], + [ + -124.0517045, + 44.6409033 + ], + [ + -124.054668, + 44.6410439 + ], + [ + -124.0575369, + 44.6415927 + ], + [ + -124.060202, + 44.6425288 + ], + [ + -124.0625617, + 44.6438166 + ], + [ + -124.0645262, + 44.645407 + ], + [ + -124.0646242, + 44.645504 + ], + [ + -124.066035, + 44.6472083 + ], + [ + -124.0664364, + 44.6479902 + ], + [ + -124.0665309, + 44.6481162 + ], + [ + -124.0666763, + 44.6484575 + ], + [ + -124.0669892, + 44.6490671 + ], + [ + -124.0670572, + 44.6493516 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_2438933_s_16031", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0738621, + 44.6470465 + ], + [ + -124.0734843, + 44.6479389 + ], + [ + -124.0720804, + 44.6498184 + ], + [ + -124.0701897, + 44.6514661 + ], + [ + -124.067885, + 44.6528189 + ], + [ + -124.0652547, + 44.6538246 + ], + [ + -124.0623999, + 44.6544447 + ], + [ + -124.0594306, + 44.6546552 + ], + [ + -124.0564607, + 44.6544482 + ], + [ + -124.0536046, + 44.6538315 + ], + [ + -124.0509719, + 44.6528288 + ], + [ + -124.048664, + 44.6514788 + ], + [ + -124.0467696, + 44.6498332 + ], + [ + -124.0453613, + 44.6479555 + ], + [ + -124.0444934, + 44.6459177 + ], + [ + -124.0441991, + 44.6437981 + ], + [ + -124.0441983, + 44.6428949 + ], + [ + -124.0441998, + 44.6427347 + ], + [ + -124.044218, + 44.6418117 + ], + [ + -124.0445507, + 44.6397004 + ], + [ + -124.0454526, + 44.6376756 + ], + [ + -124.046889, + 44.6358149 + ], + [ + -124.048805, + 44.6341893 + ], + [ + -124.0511273, + 44.6328609 + ], + [ + -124.0537672, + 44.6318807 + ], + [ + -124.0566237, + 44.6312859 + ], + [ + -124.0595876, + 44.6310995 + ], + [ + -124.0600066, + 44.6311025 + ], + [ + -124.0600567, + 44.6311029 + ], + [ + -124.0606876, + 44.6311089 + ], + [ + -124.0636519, + 44.6313458 + ], + [ + -124.0664945, + 44.6319911 + ], + [ + -124.0691063, + 44.6330199 + ], + [ + -124.071387, + 44.6343927 + ], + [ + -124.0732488, + 44.6360568 + ], + [ + -124.0746203, + 44.6379483 + ], + [ + -124.0754487, + 44.6399944 + ], + [ + -124.0757021, + 44.6421166 + ], + [ + -124.0753708, + 44.6442334 + ], + [ + -124.0744673, + 44.6462633 + ], + [ + -124.0738621, + 44.6470465 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_2438934_s_16049", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0617682, + 44.6188754 + ], + [ + -124.0612503, + 44.6200042 + ], + [ + -124.0597865, + 44.6218599 + ], + [ + -124.0578438, + 44.6234759 + ], + [ + -124.0554969, + 44.6247903 + ], + [ + -124.0528359, + 44.6257523 + ], + [ + -124.0499633, + 44.626325 + ], + [ + -124.0469893, + 44.6264864 + ], + [ + -124.0440284, + 44.6262303 + ], + [ + -124.0411944, + 44.6255666 + ], + [ + -124.0385962, + 44.6245207 + ], + [ + -124.0363338, + 44.6231328 + ], + [ + -124.0344941, + 44.6214564 + ], + [ + -124.0331478, + 44.6195559 + ], + [ + -124.0323466, + 44.6175042 + ], + [ + -124.0321212, + 44.6153804 + ], + [ + -124.0324802, + 44.6132659 + ], + [ + -124.0327713, + 44.6123312 + ], + [ + -124.0327622, + 44.6123636 + ], + [ + -124.0333289, + 44.6107359 + ], + [ + -124.0342502, + 44.6091775 + ], + [ + -124.0343133, + 44.6090905 + ], + [ + -124.0343447, + 44.6090473 + ], + [ + -124.0346208, + 44.6086704 + ], + [ + -124.035307, + 44.6078276 + ], + [ + -124.035497, + 44.6076167 + ], + [ + -124.0359864, + 44.6071059 + ], + [ + -124.0361594, + 44.6069359 + ], + [ + -124.036171, + 44.6069246 + ], + [ + -124.036221, + 44.6068756 + ], + [ + -124.0366157, + 44.6065057 + ], + [ + -124.0370418, + 44.6061238 + ], + [ + -124.0371222, + 44.6060523 + ], + [ + -124.0371812, + 44.6060003 + ], + [ + -124.0374742, + 44.6057498 + ], + [ + -124.0379574, + 44.6053493 + ], + [ + -124.0382802, + 44.6050642 + ], + [ + -124.0383133, + 44.605035 + ], + [ + -124.0384278, + 44.6049346 + ], + [ + -124.0405281, + 44.6034229 + ], + [ + -124.0430008, + 44.6022329 + ], + [ + -124.0457508, + 44.6014104 + ], + [ + -124.0486726, + 44.6009869 + ], + [ + -124.0516538, + 44.6009786 + ], + [ + -124.05458, + 44.601386 + ], + [ + -124.0573388, + 44.6021934 + ], + [ + -124.0598243, + 44.6033697 + ], + [ + -124.0619408, + 44.6048698 + ], + [ + -124.0636072, + 44.606636 + ], + [ + -124.0647593, + 44.6086005 + ], + [ + -124.0653528, + 44.6106878 + ], + [ + -124.0653648, + 44.6128177 + ], + [ + -124.0647949, + 44.6149084 + ], + [ + -124.0636648, + 44.6168795 + ], + [ + -124.062018, + 44.6186552 + ], + [ + -124.0619201, + 44.6187412 + ], + [ + -124.0617682, + 44.6188754 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_2455436_s_16082", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0223392, + 44.9861269 + ], + [ + -124.021937, + 44.9877051 + ], + [ + -124.020837, + 44.9896867 + ], + [ + -124.0192132, + 44.9914779 + ], + [ + -124.017128, + 44.9930098 + ], + [ + -124.0146616, + 44.9942236 + ], + [ + -124.0119088, + 44.9950726 + ], + [ + -124.0089754, + 44.9955242 + ], + [ + -124.0059742, + 44.9955609 + ], + [ + -124.0030206, + 44.9951815 + ], + [ + -124.0002281, + 44.9944003 + ], + [ + -123.9977042, + 44.9932476 + ], + [ + -123.9955458, + 44.9917676 + ], + [ + -123.9938359, + 44.9900172 + ], + [ + -123.9926401, + 44.9880637 + ], + [ + -123.9920045, + 44.9859822 + ], + [ + -123.9919667, + 44.9844098 + ], + [ + -123.9919124, + 44.9844087 + ], + [ + -123.9919138, + 44.984371 + ], + [ + -123.9919123, + 44.9841285 + ], + [ + -123.9919148, + 44.9838751 + ], + [ + -123.9919159, + 44.9838371 + ], + [ + -123.9919229, + 44.9835759 + ], + [ + -123.9919224, + 44.9834259 + ], + [ + -123.9919354, + 44.98295 + ], + [ + -123.9919519, + 44.9826672 + ], + [ + -123.9919684, + 44.9823703 + ], + [ + -123.9919707, + 44.9823301 + ], + [ + -123.9919788, + 44.9821981 + ], + [ + -123.9920246, + 44.9817049 + ], + [ + -123.9920276, + 44.9816809 + ], + [ + -123.9920459, + 44.9815451 + ], + [ + -123.9920739, + 44.9813491 + ], + [ + -123.9922315, + 44.980547 + ], + [ + -123.9922375, + 44.980523 + ], + [ + -123.9923164, + 44.9802308 + ], + [ + -123.9923745, + 44.9800308 + ], + [ + -123.9924503, + 44.979784 + ], + [ + -123.9924984, + 44.979636 + ], + [ + -123.992539, + 44.9795142 + ], + [ + -123.992553, + 44.9794732 + ], + [ + -123.992896, + 44.9786222 + ], + [ + -123.9929641, + 44.9784762 + ], + [ + -123.9930288, + 44.9783403 + ], + [ + -123.9930468, + 44.9783033 + ], + [ + -123.9932566, + 44.9778985 + ], + [ + -123.9933336, + 44.9777585 + ], + [ + -123.9933459, + 44.9777363 + ], + [ + -123.9933769, + 44.9776803 + ], + [ + -123.9940023, + 44.9766974 + ], + [ + -123.9940413, + 44.9766434 + ], + [ + -123.9940904, + 44.976576 + ], + [ + -123.9941624, + 44.976478 + ], + [ + -123.9946511, + 44.9758627 + ], + [ + -123.9947992, + 44.9756897 + ], + [ + -123.9952532, + 44.9751904 + ], + [ + -123.9954172, + 44.9750204 + ], + [ + -123.9963, + 44.9741932 + ], + [ + -123.996433, + 44.9740802 + ], + [ + -123.996436, + 44.974082 + ], + [ + -123.9968688, + 44.9737244 + ], + [ + -123.9970788, + 44.9735605 + ], + [ + -123.9972268, + 44.9734494 + ], + [ + -123.9973858, + 44.9731761 + ], + [ + -123.9987973, + 44.9712966 + ], + [ + -124.0006981, + 44.9696488 + ], + [ + -124.0030152, + 44.9682957 + ], + [ + -124.0056595, + 44.9672896 + ], + [ + -124.0085295, + 44.9666689 + ], + [ + -124.0115148, + 44.9664575 + ], + [ + -124.0145009, + 44.9666635 + ], + [ + -124.017373, + 44.9672791 + ], + [ + -124.0200208, + 44.9682806 + ], + [ + -124.0223427, + 44.9696295 + ], + [ + -124.0242493, + 44.9712739 + ], + [ + -124.0256675, + 44.9731509 + ], + [ + -124.0265426, + 44.9751881 + ], + [ + -124.026841, + 44.9773073 + ], + [ + -124.0265512, + 44.9794272 + ], + [ + -124.0256842, + 44.9814662 + ], + [ + -124.0251508, + 44.9823839 + ], + [ + -124.0245142, + 44.9834885 + ], + [ + -124.0223931, + 44.9860781 + ], + [ + -124.0223392, + 44.9861269 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_2455436_s_2456766", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.022531, + 44.9841855 + ], + [ + -124.0225316, + 44.9842613 + ], + [ + -124.0225317, + 44.9842736 + ], + [ + -124.0225328, + 44.9844266 + ], + [ + -124.0225284, + 44.9847428 + ], + [ + -124.0225265, + 44.9848008 + ], + [ + -124.0225257, + 44.9848222 + ], + [ + -124.0225197, + 44.9849832 + ], + [ + -124.0224751, + 44.9855743 + ], + [ + -124.0224711, + 44.9856093 + ], + [ + -124.021937, + 44.9877051 + ], + [ + -124.020837, + 44.9896867 + ], + [ + -124.0192132, + 44.9914779 + ], + [ + -124.017128, + 44.9930098 + ], + [ + -124.0146616, + 44.9942236 + ], + [ + -124.0119088, + 44.9950726 + ], + [ + -124.0089754, + 44.9955242 + ], + [ + -124.0059742, + 44.9955609 + ], + [ + -124.0030206, + 44.9951815 + ], + [ + -124.0002281, + 44.9944003 + ], + [ + -123.9977042, + 44.9932476 + ], + [ + -123.9955458, + 44.9917676 + ], + [ + -123.9938359, + 44.9900172 + ], + [ + -123.9926401, + 44.9880637 + ], + [ + -123.9920045, + 44.9859822 + ], + [ + -123.9919807, + 44.9849931 + ], + [ + -123.9918539, + 44.9847884 + ], + [ + -123.9912059, + 44.9827088 + ], + [ + -123.9911421, + 44.9805794 + ], + [ + -123.9916647, + 44.9784822 + ], + [ + -123.9927538, + 44.9764976 + ], + [ + -123.9943673, + 44.9747019 + ], + [ + -123.9964432, + 44.9731641 + ], + [ + -123.9989019, + 44.9719432 + ], + [ + -124.0016487, + 44.9710863 + ], + [ + -124.0045782, + 44.9706261 + ], + [ + -124.0075779, + 44.9705804 + ], + [ + -124.0077428, + 44.9705894 + ], + [ + -124.007843, + 44.9705951 + ], + [ + -124.0080826, + 44.9706093 + ], + [ + -124.0082541, + 44.9706187 + ], + [ + -124.0088837, + 44.9706625 + ], + [ + -124.0090377, + 44.9706755 + ], + [ + -124.0090633, + 44.9706777 + ], + [ + -124.0093903, + 44.9707057 + ], + [ + -124.0093865, + 44.9707278 + ], + [ + -124.0119022, + 44.9710479 + ], + [ + -124.014701, + 44.9718277 + ], + [ + -124.017231, + 44.9729809 + ], + [ + -124.0193948, + 44.9744628 + ], + [ + -124.0211088, + 44.9762163 + ], + [ + -124.0223068, + 44.9781739 + ], + [ + -124.0229426, + 44.9802599 + ], + [ + -124.0229916, + 44.9823938 + ], + [ + -124.022531, + 44.9841855 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_2455449_s_29681", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0384372, + 44.6540176 + ], + [ + -124.0382729, + 44.6536307 + ], + [ + -124.037981, + 44.6515109 + ], + [ + -124.038274, + 44.6493913 + ], + [ + -124.0391407, + 44.6473532 + ], + [ + -124.0405475, + 44.6454749 + ], + [ + -124.0424406, + 44.6438287 + ], + [ + -124.044747, + 44.6424777 + ], + [ + -124.0473782, + 44.6414738 + ], + [ + -124.0502331, + 44.6408556 + ], + [ + -124.0532021, + 44.6406469 + ], + [ + -124.053755, + 44.6406469 + ], + [ + -124.0568224, + 44.6408699 + ], + [ + -124.059764, + 44.6415296 + ], + [ + -124.0624591, + 44.6425991 + ], + [ + -124.064797, + 44.6440344 + ], + [ + -124.065577, + 44.6446213 + ], + [ + -124.0659345, + 44.6448998 + ], + [ + -124.0662505, + 44.6451547 + ], + [ + -124.0664046, + 44.6452811 + ], + [ + -124.0667927, + 44.645604 + ], + [ + -124.0668483, + 44.6456508 + ], + [ + -124.0668483, + 44.6456508 + ], + [ + -124.0670713, + 44.6458378 + ], + [ + -124.0671284, + 44.6458859 + ], + [ + -124.0674254, + 44.6461379 + ], + [ + -124.0679978, + 44.6466545 + ], + [ + -124.0682038, + 44.6468525 + ], + [ + -124.0690598, + 44.6477687 + ], + [ + -124.0692519, + 44.6479986 + ], + [ + -124.0698112, + 44.648731 + ], + [ + -124.0699823, + 44.648977 + ], + [ + -124.0701689, + 44.6492553 + ], + [ + -124.0703059, + 44.6494673 + ], + [ + -124.0712237, + 44.6513049 + ], + [ + -124.0716663, + 44.6532301 + ], + [ + -124.0716195, + 44.6551807 + ], + [ + -124.0715839, + 44.655417 + ], + [ + -124.0715533, + 44.6556263 + ], + [ + -124.0714789, + 44.6560528 + ], + [ + -124.0714379, + 44.6562548 + ], + [ + -124.0713478, + 44.6566993 + ], + [ + -124.0713263, + 44.6568014 + ], + [ + -124.0712644, + 44.6570874 + ], + [ + -124.0710375, + 44.657919 + ], + [ + -124.0709296, + 44.658246 + ], + [ + -124.0699281, + 44.6603171 + ], + [ + -124.0683647, + 44.6622026 + ], + [ + -124.066303, + 44.6638259 + ], + [ + -124.0638268, + 44.6651209 + ], + [ + -124.0610367, + 44.6660351 + ], + [ + -124.0580464, + 44.6665311 + ], + [ + -124.0549773, + 44.6665888 + ], + [ + -124.0519545, + 44.6662058 + ], + [ + -124.0491009, + 44.6653978 + ], + [ + -124.0489389, + 44.6653378 + ], + [ + -124.0488701, + 44.6653122 + ], + [ + -124.0487581, + 44.6652702 + ], + [ + -124.0469583, + 44.6644767 + ], + [ + -124.0468393, + 44.6644157 + ], + [ + -124.0458971, + 44.6638454 + ], + [ + -124.0440913, + 44.663008 + ], + [ + -124.0419541, + 44.6615214 + ], + [ + -124.0402645, + 44.6597657 + ], + [ + -124.0390873, + 44.6578085 + ], + [ + -124.0384678, + 44.6557249 + ], + [ + -124.0384372, + 44.6540176 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_2456756_s_781972", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.11987, + 44.3148411 + ], + [ + -124.1198647, + 44.3151629 + ], + [ + -124.1197919, + 44.3158829 + ], + [ + -124.1197358, + 44.3163168 + ], + [ + -124.1196799, + 44.3166718 + ], + [ + -124.1194408, + 44.3177241 + ], + [ + -124.1193389, + 44.3180661 + ], + [ + -124.119123, + 44.3186975 + ], + [ + -124.1183285, + 44.3207536 + ], + [ + -124.1183175, + 44.3207818 + ], + [ + -124.1180546, + 44.3214551 + ], + [ + -124.1178036, + 44.3221064 + ], + [ + -124.1177419, + 44.322262 + ], + [ + -124.1175288, + 44.3227845 + ], + [ + -124.1174785, + 44.3229098 + ], + [ + -124.1170405, + 44.3240554 + ], + [ + -124.1170213, + 44.3241054 + ], + [ + -124.1168324, + 44.3245904 + ], + [ + -124.1168315, + 44.3245902 + ], + [ + -124.1166258, + 44.3251278 + ], + [ + -124.1166226, + 44.3251349 + ], + [ + -124.1165565, + 44.325299 + ], + [ + -124.1161512, + 44.3263089 + ], + [ + -124.1161142, + 44.3264008 + ], + [ + -124.1161032, + 44.3264281 + ], + [ + -124.1160336, + 44.3265994 + ], + [ + -124.1159812, + 44.3267369 + ], + [ + -124.1158146, + 44.3271913 + ], + [ + -124.115707, + 44.3274697 + ], + [ + -124.1156584, + 44.3275892 + ], + [ + -124.1156242, + 44.3276809 + ], + [ + -124.115579, + 44.3277994 + ], + [ + -124.1149614, + 44.3293835 + ], + [ + -124.1149497, + 44.3294133 + ], + [ + -124.1146229, + 44.3302423 + ], + [ + -124.1145852, + 44.3303364 + ], + [ + -124.1142376, + 44.3311887 + ], + [ + -124.1142183, + 44.3312536 + ], + [ + -124.1140519, + 44.3316548 + ], + [ + -124.1139359, + 44.3320262 + ], + [ + -124.1136812, + 44.3327306 + ], + [ + -124.1136202, + 44.3328786 + ], + [ + -124.1136061, + 44.3329127 + ], + [ + -124.1132592, + 44.3337448 + ], + [ + -124.1131027, + 44.3341318 + ], + [ + -124.1131003, + 44.3341377 + ], + [ + -124.1130134, + 44.3344515 + ], + [ + -124.1129149, + 44.3348774 + ], + [ + -124.1128885, + 44.3348742 + ], + [ + -124.1128695, + 44.3351191 + ], + [ + -124.1127381, + 44.3356275 + ], + [ + -124.1125761, + 44.3363051 + ], + [ + -124.1117773, + 44.3399456 + ], + [ + -124.1115533, + 44.341014 + ], + [ + -124.1115449, + 44.3410533 + ], + [ + -124.1112364, + 44.3424887 + ], + [ + -124.1110386, + 44.3434099 + ], + [ + -124.1107896, + 44.3446237 + ], + [ + -124.1106784, + 44.3451988 + ], + [ + -124.1106179, + 44.3454838 + ], + [ + -124.1101728, + 44.3474097 + ], + [ + -124.109914, + 44.3486355 + ], + [ + -124.1098628, + 44.3488619 + ], + [ + -124.1097769, + 44.3492179 + ], + [ + -124.1097462, + 44.349341 + ], + [ + -124.10969, + 44.3495587 + ], + [ + -124.1093814, + 44.3510941 + ], + [ + -124.1093533, + 44.3512279 + ], + [ + -124.1092372, + 44.3517588 + ], + [ + -124.1090343, + 44.3527567 + ], + [ + -124.1090175, + 44.3528372 + ], + [ + -124.1088467, + 44.3536353 + ], + [ + -124.108749, + 44.3540401 + ], + [ + -124.1087027, + 44.3542129 + ], + [ + -124.1086157, + 44.3546418 + ], + [ + -124.1085527, + 44.3549262 + ], + [ + -124.1084149, + 44.3554992 + ], + [ + -124.1076255, + 44.3575526 + ], + [ + -124.106293, + 44.359456 + ], + [ + -124.1044683, + 44.3611362 + ], + [ + -124.1022217, + 44.3625288 + ], + [ + -124.0996394, + 44.3635802 + ], + [ + -124.0968208, + 44.3642498 + ], + [ + -124.0938742, + 44.3645121 + ], + [ + -124.0909129, + 44.3643568 + ], + [ + -124.0880508, + 44.3637901 + ], + [ + -124.0853978, + 44.3628335 + ], + [ + -124.0830561, + 44.3615241 + ], + [ + -124.0811156, + 44.359912 + ], + [ + -124.0796508, + 44.3580592 + ], + [ + -124.0787181, + 44.356037 + ], + [ + -124.0783532, + 44.3539232 + ], + [ + -124.07857, + 44.3517988 + ], + [ + -124.078674, + 44.3513677 + ], + [ + -124.0787822, + 44.3508352 + ], + [ + -124.0788979, + 44.3503449 + ], + [ + -124.0789557, + 44.3501297 + ], + [ + -124.0790747, + 44.349575 + ], + [ + -124.0792818, + 44.3485594 + ], + [ + -124.0793064, + 44.3484431 + ], + [ + -124.0794208, + 44.347921 + ], + [ + -124.0797598, + 44.346239 + ], + [ + -124.0798577, + 44.345813 + ], + [ + -124.0799529, + 44.3454445 + ], + [ + -124.0799968, + 44.3452632 + ], + [ + -124.0802481, + 44.3440756 + ], + [ + -124.0802814, + 44.3439252 + ], + [ + -124.080712, + 44.3420664 + ], + [ + -124.0808045, + 44.3415892 + ], + [ + -124.0808224, + 44.3414995 + ], + [ + -124.0810887, + 44.3402045 + ], + [ + -124.081104, + 44.3401319 + ], + [ + -124.0813103, + 44.3391739 + ], + [ + -124.0816156, + 44.3377564 + ], + [ + -124.0818438, + 44.3366711 + ], + [ + -124.0818595, + 44.3365978 + ], + [ + -124.0826845, + 44.3328469 + ], + [ + -124.0827184, + 44.3326992 + ], + [ + -124.0829121, + 44.3318907 + ], + [ + -124.0830514, + 44.3312999 + ], + [ + -124.0831861, + 44.3307187 + ], + [ + -124.0832725, + 44.3303793 + ], + [ + -124.0834787, + 44.3296363 + ], + [ + -124.0835526, + 44.3293855 + ], + [ + -124.0836387, + 44.3291095 + ], + [ + -124.0838764, + 44.3284462 + ], + [ + -124.0840296, + 44.3280683 + ], + [ + -124.0842029, + 44.3276404 + ], + [ + -124.0842382, + 44.3275544 + ], + [ + -124.0845096, + 44.3269043 + ], + [ + -124.0845454, + 44.3267899 + ], + [ + -124.0846939, + 44.3264385 + ], + [ + -124.0847499, + 44.3262505 + ], + [ + -124.085026, + 44.3254677 + ], + [ + -124.0855131, + 44.3242747 + ], + [ + -124.0858158, + 44.3235078 + ], + [ + -124.0864053, + 44.3219979 + ], + [ + -124.0864612, + 44.3218482 + ], + [ + -124.0865524, + 44.3216144 + ], + [ + -124.086592, + 44.3215171 + ], + [ + -124.0867269, + 44.3211499 + ], + [ + -124.0867662, + 44.3210448 + ], + [ + -124.0868713, + 44.3207698 + ], + [ + -124.0869354, + 44.3206069 + ], + [ + -124.0870694, + 44.3202766 + ], + [ + -124.0874725, + 44.3192733 + ], + [ + -124.0874774, + 44.3192611 + ], + [ + -124.0875985, + 44.3189611 + ], + [ + -124.0876107, + 44.3189322 + ], + [ + -124.087681, + 44.3187357 + ], + [ + -124.0878604, + 44.3182757 + ], + [ + -124.0883151, + 44.3170877 + ], + [ + -124.088368, + 44.3169531 + ], + [ + -124.088454, + 44.3167391 + ], + [ + -124.0884714, + 44.3166961 + ], + [ + -124.0886619, + 44.3162298 + ], + [ + -124.0888899, + 44.3156388 + ], + [ + -124.0889037, + 44.3156033 + ], + [ + -124.0891684, + 44.3149264 + ], + [ + -124.0894174, + 44.3142828 + ], + [ + -124.0890322, + 44.313165 + ], + [ + -124.0889005, + 44.3110123 + ], + [ + -124.0893629, + 44.3088833 + ], + [ + -124.0904013, + 44.3068617 + ], + [ + -124.0919748, + 44.3050269 + ], + [ + -124.0940214, + 44.3034511 + ], + [ + -124.0964607, + 44.3021963 + ], + [ + -124.0991967, + 44.3013118 + ], + [ + -124.1021219, + 44.3008323 + ], + [ + -124.1051214, + 44.3007767 + ], + [ + -124.1065336, + 44.3008514 + ], + [ + -124.109456, + 44.3012152 + ], + [ + -124.1122235, + 44.3019814 + ], + [ + -124.1147298, + 44.3031206 + ], + [ + -124.1168785, + 44.304589 + ], + [ + -124.1185871, + 44.3063301 + ], + [ + -124.11979, + 44.3082771 + ], + [ + -124.1204408, + 44.3103553 + ], + [ + -124.1205146, + 44.3124846 + ], + [ + -124.1200083, + 44.3145834 + ], + [ + -124.11987, + 44.3148411 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_2456756_s_2456756", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0902915, + 44.3117717 + ], + [ + -124.090543, + 44.3096494 + ], + [ + -124.0913663, + 44.307603 + ], + [ + -124.0927296, + 44.3057113 + ], + [ + -124.0945806, + 44.3040469 + ], + [ + -124.0968482, + 44.3026737 + ], + [ + -124.099445, + 44.3016446 + ], + [ + -124.1022715, + 44.300999 + ], + [ + -124.1052191, + 44.3007617 + ], + [ + -124.1081744, + 44.3009418 + ], + [ + -124.1110241, + 44.3015325 + ], + [ + -124.1136586, + 44.3025111 + ], + [ + -124.1159768, + 44.3038398 + ], + [ + -124.1178896, + 44.3054678 + ], + [ + -124.1193234, + 44.3073325 + ], + [ + -124.1202232, + 44.3093621 + ], + [ + -124.1205542, + 44.3114789 + ], + [ + -124.1203038, + 44.3136013 + ], + [ + -124.1194815, + 44.3156478 + ], + [ + -124.1181188, + 44.3175399 + ], + [ + -124.1162681, + 44.3192047 + ], + [ + -124.1140004, + 44.3205782 + ], + [ + -124.1114029, + 44.3216077 + ], + [ + -124.1085756, + 44.3222535 + ], + [ + -124.105627, + 44.3224909 + ], + [ + -124.1026705, + 44.3223107 + ], + [ + -124.0998199, + 44.3217198 + ], + [ + -124.0971847, + 44.320741 + ], + [ + -124.0948663, + 44.3194118 + ], + [ + -124.0929537, + 44.3177835 + ], + [ + -124.0915204, + 44.3159185 + ], + [ + -124.0906216, + 44.3138886 + ], + [ + -124.0902915, + 44.3117717 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_2456757_s_15950", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.1031156, + 44.3799833 + ], + [ + -124.1031738, + 44.3806499 + ], + [ + -124.1033418, + 44.3819141 + ], + [ + -124.10335, + 44.3819784 + ], + [ + -124.1034998, + 44.3831805 + ], + [ + -124.1037245, + 44.3849096 + ], + [ + -124.1037881, + 44.3860841 + ], + [ + -124.1037763, + 44.3866401 + ], + [ + -124.1035447, + 44.3883736 + ], + [ + -124.1033988, + 44.3889626 + ], + [ + -124.1031866, + 44.3896787 + ], + [ + -124.1029977, + 44.3902247 + ], + [ + -124.102973, + 44.3902951 + ], + [ + -124.1027639, + 44.3908826 + ], + [ + -124.1020002, + 44.3930521 + ], + [ + -124.1015934, + 44.3940167 + ], + [ + -124.1014031, + 44.3944025 + ], + [ + -124.1014003, + 44.3944832 + ], + [ + -124.1013789, + 44.3948491 + ], + [ + -124.1013089, + 44.3957025 + ], + [ + -124.1012445, + 44.3969531 + ], + [ + -124.1012128, + 44.397577 + ], + [ + -124.1012048, + 44.3977337 + ], + [ + -124.1011816, + 44.3981843 + ], + [ + -124.1011777, + 44.3982543 + ], + [ + -124.1011687, + 44.3984023 + ], + [ + -124.1010808, + 44.3998386 + ], + [ + -124.1010489, + 44.400212 + ], + [ + -124.1010049, + 44.4006145 + ], + [ + -124.100913, + 44.4019318 + ], + [ + -124.1008832, + 44.4022594 + ], + [ + -124.1008233, + 44.4027934 + ], + [ + -124.1008113, + 44.4028948 + ], + [ + -124.1007514, + 44.4033728 + ], + [ + -124.1007195, + 44.4036008 + ], + [ + -124.1005997, + 44.4043738 + ], + [ + -124.1005802, + 44.4044932 + ], + [ + -124.1004454, + 44.4052832 + ], + [ + -124.100416, + 44.4054454 + ], + [ + -124.1000664, + 44.4072665 + ], + [ + -124.0999824, + 44.4077445 + ], + [ + -124.0999488, + 44.4079237 + ], + [ + -124.0997923, + 44.4087088 + ], + [ + -124.099659, + 44.4095065 + ], + [ + -124.0996447, + 44.4095895 + ], + [ + -124.0995299, + 44.4102345 + ], + [ + -124.0994855, + 44.4104643 + ], + [ + -124.099051, + 44.412549 + ], + [ + -124.0990105, + 44.4128302 + ], + [ + -124.0987502, + 44.4140044 + ], + [ + -124.0985054, + 44.4148184 + ], + [ + -124.0979547, + 44.4161993 + ], + [ + -124.0977028, + 44.4167023 + ], + [ + -124.0972438, + 44.4175143 + ], + [ + -124.0971003, + 44.4177414 + ], + [ + -124.0969707, + 44.4179796 + ], + [ + -124.0967263, + 44.4184024 + ], + [ + -124.0966233, + 44.4185704 + ], + [ + -124.0950782, + 44.4205175 + ], + [ + -124.0947254, + 44.4208713 + ], + [ + -124.0943527, + 44.4212461 + ], + [ + -124.0940281, + 44.4215603 + ], + [ + -124.0935992, + 44.4219603 + ], + [ + -124.0934046, + 44.4221416 + ], + [ + -124.0933622, + 44.4221182 + ], + [ + -124.0923424, + 44.4230696 + ], + [ + -124.0901059, + 44.4244735 + ], + [ + -124.0875299, + 44.4255375 + ], + [ + -124.0847136, + 44.4262208 + ], + [ + -124.0836607, + 44.4263194 + ], + [ + -124.0816584, + 44.4267022 + ], + [ + -124.0785191, + 44.4268214 + ], + [ + -124.0783637, + 44.4268157 + ], + [ + -124.0770918, + 44.4269718 + ], + [ + -124.0741204, + 44.4269147 + ], + [ + -124.0712218, + 44.4264433 + ], + [ + -124.0685072, + 44.4255757 + ], + [ + -124.0660811, + 44.4243452 + ], + [ + -124.0640368, + 44.4227991 + ], + [ + -124.0624527, + 44.4209968 + ], + [ + -124.0613897, + 44.4190077 + ], + [ + -124.0608887, + 44.4169082 + ], + [ + -124.0609688, + 44.4147789 + ], + [ + -124.0616269, + 44.4127018 + ], + [ + -124.0628376, + 44.4107566 + ], + [ + -124.0645544, + 44.4090181 + ], + [ + -124.0667113, + 44.407553 + ], + [ + -124.0674542, + 44.4072175 + ], + [ + -124.0676466, + 44.4071181 + ], + [ + -124.0678293, + 44.4070481 + ], + [ + -124.0692253, + 44.4064176 + ], + [ + -124.0696636, + 44.4062973 + ], + [ + -124.0697138, + 44.4059975 + ], + [ + -124.0697587, + 44.4057533 + ], + [ + -124.0699221, + 44.4049358 + ], + [ + -124.0700014, + 44.4044855 + ], + [ + -124.0700242, + 44.4043616 + ], + [ + -124.0703711, + 44.4025596 + ], + [ + -124.0704822, + 44.4019105 + ], + [ + -124.0705754, + 44.4013111 + ], + [ + -124.0706125, + 44.4010159 + ], + [ + -124.0706136, + 44.4010064 + ], + [ + -124.070651, + 44.4006762 + ], + [ + -124.0707427, + 44.3993712 + ], + [ + -124.0707703, + 44.399064 + ], + [ + -124.070811, + 44.3986945 + ], + [ + -124.0708859, + 44.3974812 + ], + [ + -124.0708873, + 44.397456 + ], + [ + -124.070916, + 44.3969281 + ], + [ + -124.0709234, + 44.3967833 + ], + [ + -124.0709556, + 44.3961557 + ], + [ + -124.0710272, + 44.3947781 + ], + [ + -124.0710432, + 44.3945409 + ], + [ + -124.0711083, + 44.3937517 + ], + [ + -124.0711169, + 44.3935088 + ], + [ + -124.071138, + 44.3931489 + ], + [ + -124.0711607, + 44.3928716 + ], + [ + -124.0711805, + 44.3924404 + ], + [ + -124.071246, + 44.3917265 + ], + [ + -124.0712891, + 44.3914145 + ], + [ + -124.0715879, + 44.3900906 + ], + [ + -124.071673, + 44.3898206 + ], + [ + -124.071975, + 44.3890092 + ], + [ + -124.0722841, + 44.3882913 + ], + [ + -124.0724791, + 44.3878694 + ], + [ + -124.0727895, + 44.3872409 + ], + [ + -124.0733766, + 44.3855754 + ], + [ + -124.0733244, + 44.3851724 + ], + [ + -124.0733191, + 44.3851306 + ], + [ + -124.0731714, + 44.3839398 + ], + [ + -124.072985, + 44.3825319 + ], + [ + -124.0729465, + 44.3821799 + ], + [ + -124.0728099, + 44.3806059 + ], + [ + -124.0727935, + 44.3794833 + ], + [ + -124.0728096, + 44.3792026 + ], + [ + -124.0728349, + 44.3787288 + ], + [ + -124.0729862, + 44.3775573 + ], + [ + -124.0730974, + 44.3770173 + ], + [ + -124.0731003, + 44.3770032 + ], + [ + -124.0734697, + 44.3752242 + ], + [ + -124.0734904, + 44.3751277 + ], + [ + -124.0743494, + 44.3712318 + ], + [ + -124.0743578, + 44.371194 + ], + [ + -124.0748313, + 44.3690941 + ], + [ + -124.0749078, + 44.3687548 + ], + [ + -124.0752911, + 44.3668383 + ], + [ + -124.0753322, + 44.366645 + ], + [ + -124.0757964, + 44.3645877 + ], + [ + -124.0762646, + 44.3623435 + ], + [ + -124.0763021, + 44.3621733 + ], + [ + -124.0766222, + 44.3607891 + ], + [ + -124.0767946, + 44.3600203 + ], + [ + -124.0771021, + 44.3586346 + ], + [ + -124.0771446, + 44.3584441 + ], + [ + -124.077264, + 44.3578462 + ], + [ + -124.0772672, + 44.35783 + ], + [ + -124.0773453, + 44.357443 + ], + [ + -124.0773932, + 44.3572219 + ], + [ + -124.0775671, + 44.3564696 + ], + [ + -124.0776756, + 44.3559386 + ], + [ + -124.0776783, + 44.3559256 + ], + [ + -124.0779186, + 44.3547597 + ], + [ + -124.0779526, + 44.3546026 + ], + [ + -124.0780795, + 44.3540435 + ], + [ + -124.0781913, + 44.3534966 + ], + [ + -124.0782339, + 44.3533006 + ], + [ + -124.0783951, + 44.3526009 + ], + [ + -124.0785035, + 44.3520893 + ], + [ + -124.0785521, + 44.3518748 + ], + [ + -124.0786736, + 44.3513697 + ], + [ + -124.0787822, + 44.3508352 + ], + [ + -124.0788979, + 44.3503449 + ], + [ + -124.0789551, + 44.3501321 + ], + [ + -124.0790743, + 44.3495747 + ], + [ + -124.07981, + 44.3475112 + ], + [ + -124.0810925, + 44.3455902 + ], + [ + -124.0828725, + 44.3438857 + ], + [ + -124.0850817, + 44.3424631 + ], + [ + -124.087635, + 44.3413771 + ], + [ + -124.0904343, + 44.3406694 + ], + [ + -124.0933723, + 44.3403671 + ], + [ + -124.096336, + 44.3404819 + ], + [ + -124.0992116, + 44.3410093 + ], + [ + -124.1018886, + 44.3419292 + ], + [ + -124.1042642, + 44.3432061 + ], + [ + -124.1062471, + 44.3447911 + ], + [ + -124.1077611, + 44.3466231 + ], + [ + -124.1087481, + 44.348632 + ], + [ + -124.10917, + 44.3507404 + ], + [ + -124.1090105, + 44.3528673 + ], + [ + -124.1088477, + 44.3536303 + ], + [ + -124.108749, + 44.3540401 + ], + [ + -124.1087027, + 44.3542129 + ], + [ + -124.1086157, + 44.3546418 + ], + [ + -124.1085537, + 44.3549222 + ], + [ + -124.1084245, + 44.3554602 + ], + [ + -124.1083244, + 44.3559337 + ], + [ + -124.1082938, + 44.3560724 + ], + [ + -124.1081395, + 44.3567436 + ], + [ + -124.1080306, + 44.3572775 + ], + [ + -124.1079941, + 44.3574474 + ], + [ + -124.107866, + 44.358013 + ], + [ + -124.1076438, + 44.3590939 + ], + [ + -124.1075163, + 44.3597194 + ], + [ + -124.1074725, + 44.3599211 + ], + [ + -124.1073011, + 44.3606637 + ], + [ + -124.1072472, + 44.3609319 + ], + [ + -124.1071119, + 44.3616109 + ], + [ + -124.1070744, + 44.3617889 + ], + [ + -124.1070156, + 44.3620527 + ], + [ + -124.1067081, + 44.3634415 + ], + [ + -124.1067044, + 44.3634581 + ], + [ + -124.1065246, + 44.3642621 + ], + [ + -124.1065125, + 44.3643157 + ], + [ + -124.1062064, + 44.3656417 + ], + [ + -124.1057437, + 44.3678646 + ], + [ + -124.1057161, + 44.367992 + ], + [ + -124.1052604, + 44.3700165 + ], + [ + -124.1048782, + 44.3719328 + ], + [ + -124.1048373, + 44.3721254 + ], + [ + -124.1047395, + 44.3725602 + ], + [ + -124.1042713, + 44.3746411 + ], + [ + -124.103429, + 44.3784701 + ], + [ + -124.1031156, + 44.3799833 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_2456757_s_15970", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0895216, + 44.425585 + ], + [ + -124.0894305, + 44.4256697 + ], + [ + -124.089019, + 44.4260355 + ], + [ + -124.088384, + 44.4265755 + ], + [ + -124.0873879, + 44.4273441 + ], + [ + -124.0869239, + 44.4276692 + ], + [ + -124.0862835, + 44.4280927 + ], + [ + -124.085858, + 44.4283583 + ], + [ + -124.0845515, + 44.4292073 + ], + [ + -124.0838723, + 44.4296232 + ], + [ + -124.0831542, + 44.4300372 + ], + [ + -124.0826715, + 44.4303043 + ], + [ + -124.0823443, + 44.4304779 + ], + [ + -124.0822982, + 44.4305156 + ], + [ + -124.081738, + 44.4309495 + ], + [ + -124.081378, + 44.4312136 + ], + [ + -124.0800703, + 44.4320669 + ], + [ + -124.0797443, + 44.4322559 + ], + [ + -124.0796582, + 44.432299 + ], + [ + -124.0779202, + 44.4337432 + ], + [ + -124.075577, + 44.435054 + ], + [ + -124.0729218, + 44.436012 + ], + [ + -124.0700568, + 44.4365803 + ], + [ + -124.067092, + 44.4367372 + ], + [ + -124.0641414, + 44.4364766 + ], + [ + -124.0613186, + 44.4358085 + ], + [ + -124.058732, + 44.4347586 + ], + [ + -124.0564811, + 44.4333672 + ], + [ + -124.0546524, + 44.431688 + ], + [ + -124.0533161, + 44.4297853 + ], + [ + -124.0525236, + 44.4277324 + ], + [ + -124.0523053, + 44.4256081 + ], + [ + -124.0526695, + 44.4234942 + ], + [ + -124.0526955, + 44.4234112 + ], + [ + -124.0531899, + 44.4221791 + ], + [ + -124.053341, + 44.4218721 + ], + [ + -124.0539387, + 44.4208324 + ], + [ + -124.0541358, + 44.4205344 + ], + [ + -124.0554464, + 44.4189254 + ], + [ + -124.0558115, + 44.4185544 + ], + [ + -124.056905, + 44.4175696 + ], + [ + -124.057161, + 44.4173646 + ], + [ + -124.0585304, + 44.416399 + ], + [ + -124.0589024, + 44.416168 + ], + [ + -124.0605452, + 44.4152803 + ], + [ + -124.0608325, + 44.415146 + ], + [ + -124.0609584, + 44.4150559 + ], + [ + -124.0609688, + 44.4147789 + ], + [ + -124.0616269, + 44.4127018 + ], + [ + -124.0628376, + 44.4107566 + ], + [ + -124.0645544, + 44.4090181 + ], + [ + -124.0667113, + 44.407553 + ], + [ + -124.0674542, + 44.4072175 + ], + [ + -124.0676466, + 44.4071181 + ], + [ + -124.0678293, + 44.4070481 + ], + [ + -124.0692253, + 44.4064176 + ], + [ + -124.0701107, + 44.4061745 + ], + [ + -124.0712221, + 44.4057489 + ], + [ + -124.071428, + 44.4056939 + ], + [ + -124.0744119, + 44.4051371 + ], + [ + -124.0767485, + 44.4050518 + ], + [ + -124.0792314, + 44.4047386 + ], + [ + -124.081904, + 44.4047431 + ], + [ + -124.082211, + 44.4047631 + ], + [ + -124.0833236, + 44.4048655 + ], + [ + -124.0837685, + 44.4049185 + ], + [ + -124.0865361, + 44.4054446 + ], + [ + -124.0891163, + 44.4063343 + ], + [ + -124.0914171, + 44.407556 + ], + [ + -124.0933565, + 44.409066 + ], + [ + -124.0948653, + 44.4108105 + ], + [ + -124.0958895, + 44.4127272 + ], + [ + -124.0963926, + 44.4147478 + ], + [ + -124.0963566, + 44.4168001 + ], + [ + -124.0957827, + 44.418811 + ], + [ + -124.0946914, + 44.4207087 + ], + [ + -124.0931215, + 44.4224253 + ], + [ + -124.0926425, + 44.4228544 + ], + [ + -124.0925013, + 44.422979 + ], + [ + -124.0922552, + 44.4231929 + ], + [ + -124.0916887, + 44.4236945 + ], + [ + -124.0916108, + 44.4237628 + ], + [ + -124.0907449, + 44.4245169 + ], + [ + -124.0906009, + 44.4246404 + ], + [ + -124.0900926, + 44.4250699 + ], + [ + -124.0897748, + 44.4253603 + ], + [ + -124.0895216, + 44.425585 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_2456758_s_15962", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0901729, + 44.4386745 + ], + [ + -124.0902192, + 44.4387697 + ], + [ + -124.0906276, + 44.4409098 + ], + [ + -124.0906382, + 44.4411189 + ], + [ + -124.0904596, + 44.4432217 + ], + [ + -124.0897179, + 44.4452604 + ], + [ + -124.0884409, + 44.4471581 + ], + [ + -124.0866766, + 44.4488436 + ], + [ + -124.0844912, + 44.4502535 + ], + [ + -124.081967, + 44.4513347 + ], + [ + -124.0791989, + 44.4520466 + ], + [ + -124.0762909, + 44.4523625 + ], + [ + -124.075934, + 44.4523761 + ], + [ + -124.075483, + 44.4523943 + ], + [ + -124.0726059, + 44.452314 + ], + [ + -124.0698019, + 44.4518458 + ], + [ + -124.0671719, + 44.4510063 + ], + [ + -124.0648109, + 44.449826 + ], + [ + -124.0628039, + 44.4483474 + ], + [ + -124.0612231, + 44.4466237 + ], + [ + -124.0601256, + 44.4447171 + ], + [ + -124.0595507, + 44.4426962 + ], + [ + -124.0595193, + 44.440634 + ], + [ + -124.0596399, + 44.4396093 + ], + [ + -124.0591992, + 44.4392017 + ], + [ + -124.0564695, + 44.4366748 + ], + [ + -124.0558935, + 44.4361043 + ], + [ + -124.0555496, + 44.4357393 + ], + [ + -124.0550749, + 44.4352023 + ], + [ + -124.054844, + 44.4349233 + ], + [ + -124.0547643, + 44.4348206 + ], + [ + -124.0538474, + 44.4342282 + ], + [ + -124.0520707, + 44.4325205 + ], + [ + -124.0507932, + 44.4305972 + ], + [ + -124.050064, + 44.4285323 + ], + [ + -124.0499109, + 44.4264051 + ], + [ + -124.05034, + 44.4242974 + ], + [ + -124.0513345, + 44.4222902 + ], + [ + -124.0528562, + 44.4204605 + ], + [ + -124.0548466, + 44.4188788 + ], + [ + -124.0572293, + 44.4176057 + ], + [ + -124.0599126, + 44.4166901 + ], + [ + -124.0627936, + 44.4161673 + ], + [ + -124.0657614, + 44.4160573 + ], + [ + -124.0659414, + 44.4160633 + ], + [ + -124.0660654, + 44.4160678 + ], + [ + -124.0663204, + 44.4160778 + ], + [ + -124.0663583, + 44.4160793 + ], + [ + -124.0668653, + 44.4161001 + ], + [ + -124.0671268, + 44.4161107 + ], + [ + -124.0679981, + 44.4161436 + ], + [ + -124.0708781, + 44.4164529 + ], + [ + -124.0736225, + 44.4171512 + ], + [ + -124.07613, + 44.4182127 + ], + [ + -124.0783081, + 44.4195981 + ], + [ + -124.0800766, + 44.4212565 + ], + [ + -124.0813701, + 44.4231265 + ], + [ + -124.0820207, + 44.4248256 + ], + [ + -124.083174, + 44.4258929 + ], + [ + -124.0857592, + 44.4282828 + ], + [ + -124.0859265, + 44.4284403 + ], + [ + -124.0860568, + 44.4285654 + ], + [ + -124.0861265, + 44.4286302 + ], + [ + -124.0866223, + 44.4291185 + ], + [ + -124.0868453, + 44.4293514 + ], + [ + -124.0878954, + 44.4306267 + ], + [ + -124.0881354, + 44.4309697 + ], + [ + -124.0887532, + 44.4319764 + ], + [ + -124.0889683, + 44.4323814 + ], + [ + -124.0894122, + 44.4333521 + ], + [ + -124.0895653, + 44.4337491 + ], + [ + -124.0899409, + 44.4350108 + ], + [ + -124.0900451, + 44.4355018 + ], + [ + -124.0902171, + 44.437132 + ], + [ + -124.0902173, + 44.437641 + ], + [ + -124.0902103, + 44.4379733 + ], + [ + -124.0901934, + 44.4383713 + ], + [ + -124.0901729, + 44.4386745 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_2456760_s_16196", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0682458, + 44.6509219 + ], + [ + -124.0682414, + 44.6511816 + ], + [ + -124.0682266, + 44.6516194 + ], + [ + -124.0682246, + 44.651734 + ], + [ + -124.0682215, + 44.6522711 + ], + [ + -124.0682234, + 44.6524042 + ], + [ + -124.0682293, + 44.6527752 + ], + [ + -124.0682303, + 44.6529344 + ], + [ + -124.0682293, + 44.6531474 + ], + [ + -124.0682275, + 44.6535001 + ], + [ + -124.0682275, + 44.653529 + ], + [ + -124.0682274, + 44.6535609 + ], + [ + -124.0682238, + 44.6545015 + ], + [ + -124.068226, + 44.6549833 + ], + [ + -124.0682329, + 44.655109 + ], + [ + -124.0682568, + 44.6553272 + ], + [ + -124.0683942, + 44.6563034 + ], + [ + -124.0684059, + 44.6563643 + ], + [ + -124.0684534, + 44.6565696 + ], + [ + -124.0685439, + 44.6569424 + ], + [ + -124.0686593, + 44.6572378 + ], + [ + -124.0687396, + 44.6574519 + ], + [ + -124.0688135, + 44.6576573 + ], + [ + -124.0693142, + 44.6588364 + ], + [ + -124.0693289, + 44.6588711 + ], + [ + -124.069413, + 44.6590716 + ], + [ + -124.0699847, + 44.6611621 + ], + [ + -124.0699741, + 44.663292 + ], + [ + -124.0693814, + 44.6653795 + ], + [ + -124.0682294, + 44.6673443 + ], + [ + -124.0665623, + 44.669111 + ], + [ + -124.0644441, + 44.6706116 + ], + [ + -124.0619563, + 44.6717885 + ], + [ + -124.0591944, + 44.6725963 + ], + [ + -124.0562647, + 44.6730041 + ], + [ + -124.0532798, + 44.6729961 + ], + [ + -124.0503545, + 44.6725727 + ], + [ + -124.0476012, + 44.6717501 + ], + [ + -124.0451258, + 44.67056 + ], + [ + -124.0430234, + 44.669048 + ], + [ + -124.0413749, + 44.6672725 + ], + [ + -124.0402436, + 44.6653015 + ], + [ + -124.0401668, + 44.6651184 + ], + [ + -124.0395795, + 44.6637336 + ], + [ + -124.0394039, + 44.6632852 + ], + [ + -124.0392876, + 44.6629616 + ], + [ + -124.0390094, + 44.6622483 + ], + [ + -124.0386748, + 44.6611871 + ], + [ + -124.038444, + 44.6602351 + ], + [ + -124.0384238, + 44.6601497 + ], + [ + -124.0383319, + 44.6597517 + ], + [ + -124.0382685, + 44.6594511 + ], + [ + -124.0381916, + 44.6590481 + ], + [ + -124.0381281, + 44.6586644 + ], + [ + -124.0379475, + 44.6573763 + ], + [ + -124.0379176, + 44.657137 + ], + [ + -124.0378578, + 44.656588 + ], + [ + -124.0378233, + 44.6561654 + ], + [ + -124.0377944, + 44.6556334 + ], + [ + -124.0377831, + 44.6552438 + ], + [ + -124.0377803, + 44.6545348 + ], + [ + -124.0377803, + 44.6544717 + ], + [ + -124.0377845, + 44.6534487 + ], + [ + -124.0377846, + 44.6534368 + ], + [ + -124.0377867, + 44.6530717 + ], + [ + -124.0377873, + 44.6529412 + ], + [ + -124.0377827, + 44.6526418 + ], + [ + -124.0377824, + 44.6526257 + ], + [ + -124.0377795, + 44.6524077 + ], + [ + -124.0377789, + 44.652254 + ], + [ + -124.0377831, + 44.651594 + ], + [ + -124.0377832, + 44.6515813 + ], + [ + -124.0377842, + 44.6514513 + ], + [ + -124.0377881, + 44.6512609 + ], + [ + -124.0377911, + 44.6511679 + ], + [ + -124.0377916, + 44.6511544 + ], + [ + -124.0378042, + 44.6507842 + ], + [ + -124.0378044, + 44.6506181 + ], + [ + -124.0380984, + 44.6484985 + ], + [ + -124.0389661, + 44.6464606 + ], + [ + -124.0403739, + 44.6445827 + ], + [ + -124.0422677, + 44.642937 + ], + [ + -124.0445748, + 44.6415865 + ], + [ + -124.0472065, + 44.6405833 + ], + [ + -124.0500616, + 44.6399659 + ], + [ + -124.0530306, + 44.6397579 + ], + [ + -124.0559994, + 44.6399674 + ], + [ + -124.0588539, + 44.6405863 + ], + [ + -124.0614846, + 44.6415909 + ], + [ + -124.0637903, + 44.6429425 + ], + [ + -124.0656824, + 44.6445892 + ], + [ + -124.0670884, + 44.6464678 + ], + [ + -124.0679539, + 44.6485061 + ], + [ + -124.0682459, + 44.6506258 + ], + [ + -124.0682458, + 44.6509219 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_2456760_s_2455449", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0682455, + 44.6509884 + ], + [ + -124.0682414, + 44.6511816 + ], + [ + -124.0682266, + 44.6516194 + ], + [ + -124.0682263, + 44.6516388 + ], + [ + -124.0687271, + 44.6533379 + ], + [ + -124.06876, + 44.6554677 + ], + [ + -124.0682101, + 44.6575612 + ], + [ + -124.0670985, + 44.6595378 + ], + [ + -124.0654679, + 44.6613217 + ], + [ + -124.0633809, + 44.6628442 + ], + [ + -124.0609178, + 44.6640468 + ], + [ + -124.0581731, + 44.6648833 + ], + [ + -124.0552524, + 44.6653215 + ], + [ + -124.053027, + 44.6653388 + ], + [ + -124.0530256, + 44.6653728 + ], + [ + -124.0525756, + 44.6653638 + ], + [ + -124.0523539, + 44.665344 + ], + [ + -124.052268, + 44.6653446 + ], + [ + -124.052124, + 44.6653356 + ], + [ + -124.0521255, + 44.6653235 + ], + [ + -124.0496616, + 44.6651032 + ], + [ + -124.0468719, + 44.6644482 + ], + [ + -124.0443105, + 44.6634231 + ], + [ + -124.0420727, + 44.662066 + ], + [ + -124.0402416, + 44.6604275 + ], + [ + -124.0388855, + 44.6585685 + ], + [ + -124.0380548, + 44.6565583 + ], + [ + -124.0377803, + 44.6544717 + ], + [ + -124.0377845, + 44.6534487 + ], + [ + -124.0377846, + 44.6534368 + ], + [ + -124.0377867, + 44.6530717 + ], + [ + -124.0377873, + 44.6529412 + ], + [ + -124.0377827, + 44.6526418 + ], + [ + -124.0377824, + 44.6526257 + ], + [ + -124.0377795, + 44.6524077 + ], + [ + -124.0377789, + 44.652254 + ], + [ + -124.0377831, + 44.651594 + ], + [ + -124.0377832, + 44.6515813 + ], + [ + -124.0377842, + 44.6514513 + ], + [ + -124.0377881, + 44.6512609 + ], + [ + -124.0377911, + 44.6511679 + ], + [ + -124.0377916, + 44.6511544 + ], + [ + -124.0378054, + 44.650751 + ], + [ + -124.0378073, + 44.6505429 + ], + [ + -124.0381196, + 44.6484247 + ], + [ + -124.0390047, + 44.6463906 + ], + [ + -124.0404285, + 44.6445189 + ], + [ + -124.0423364, + 44.6428814 + ], + [ + -124.044655, + 44.6415411 + ], + [ + -124.0472953, + 44.6405494 + ], + [ + -124.0501557, + 44.6399445 + ], + [ + -124.0531264, + 44.6397495 + ], + [ + -124.0560933, + 44.6399719 + ], + [ + -124.0589425, + 44.6406033 + ], + [ + -124.0615645, + 44.6416193 + ], + [ + -124.0638585, + 44.642981 + ], + [ + -124.0657366, + 44.644636 + ], + [ + -124.0671263, + 44.6465207 + ], + [ + -124.0679744, + 44.6485627 + ], + [ + -124.0682482, + 44.6506837 + ], + [ + -124.0682455, + 44.6509884 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_2456760_s_2456760", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0376759, + 44.6507593 + ], + [ + -124.0379306, + 44.6486371 + ], + [ + -124.0387602, + 44.6465912 + ], + [ + -124.040133, + 44.6447001 + ], + [ + -124.0419961, + 44.6430366 + ], + [ + -124.0442779, + 44.6416644 + ], + [ + -124.0468907, + 44.6406363 + ], + [ + -124.0497341, + 44.6399919 + ], + [ + -124.052699, + 44.6397558 + ], + [ + -124.0556714, + 44.6399372 + ], + [ + -124.0585371, + 44.640529 + ], + [ + -124.0611862, + 44.6415085 + ], + [ + -124.0635169, + 44.6428382 + ], + [ + -124.0654395, + 44.6444668 + ], + [ + -124.0668802, + 44.646332 + ], + [ + -124.0677836, + 44.6483619 + ], + [ + -124.0681149, + 44.6504787 + ], + [ + -124.0678614, + 44.6526009 + ], + [ + -124.0670326, + 44.654647 + ], + [ + -124.0656605, + 44.6565384 + ], + [ + -124.0637977, + 44.6582024 + ], + [ + -124.0615157, + 44.6595749 + ], + [ + -124.0589024, + 44.6606033 + ], + [ + -124.056058, + 44.661248 + ], + [ + -124.0530921, + 44.6614841 + ], + [ + -124.0501186, + 44.6613027 + ], + [ + -124.0472519, + 44.6607107 + ], + [ + -124.0446021, + 44.6597309 + ], + [ + -124.0422713, + 44.6584009 + ], + [ + -124.0403488, + 44.6567718 + ], + [ + -124.0389087, + 44.6549063 + ], + [ + -124.0380062, + 44.6528761 + ], + [ + -124.0376759, + 44.6507593 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_2456766_s_16071", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0072436, + 44.9705607 + ], + [ + -124.0074355, + 44.9705717 + ], + [ + -124.0074797, + 44.9705743 + ], + [ + -124.0076816, + 44.9705863 + ], + [ + -124.0106326, + 44.9709711 + ], + [ + -124.0134213, + 44.971757 + ], + [ + -124.0159404, + 44.972914 + ], + [ + -124.0180932, + 44.9743976 + ], + [ + -124.0197971, + 44.9761507 + ], + [ + -124.0209864, + 44.9781061 + ], + [ + -124.0216155, + 44.9801886 + ], + [ + -124.02166, + 44.9823182 + ], + [ + -124.0211183, + 44.984413 + ], + [ + -124.0200111, + 44.9863926 + ], + [ + -124.0183809, + 44.9881808 + ], + [ + -124.0162903, + 44.9897089 + ], + [ + -124.0138197, + 44.9909182 + ], + [ + -124.011064, + 44.9917622 + ], + [ + -124.0081291, + 44.9922084 + ], + [ + -124.0068924, + 44.9922213 + ], + [ + -124.005961, + 44.9927323 + ], + [ + -124.0058686, + 44.9928134 + ], + [ + -124.0035626, + 44.9941768 + ], + [ + -124.000926, + 44.9951947 + ], + [ + -123.99806, + 44.9958279 + ], + [ + -123.9950751, + 44.9960522 + ], + [ + -123.994949, + 44.9960529 + ], + [ + -123.9919979, + 44.9958648 + ], + [ + -123.9891533, + 44.9952768 + ], + [ + -123.9865215, + 44.9943111 + ], + [ + -123.9842013, + 44.9930038 + ], + [ + -123.9822794, + 44.9914038 + ], + [ + -123.9808279, + 44.9895711 + ], + [ + -123.9799011, + 44.9875743 + ], + [ + -123.9795335, + 44.9854882 + ], + [ + -123.9794768, + 44.9840248 + ], + [ + -123.9796884, + 44.9819019 + ], + [ + -123.9804789, + 44.9798491 + ], + [ + -123.9818181, + 44.977945 + ], + [ + -123.9836544, + 44.9762627 + ], + [ + -123.9852002, + 44.9753091 + ], + [ + -123.9853686, + 44.975124 + ], + [ + -123.9856262, + 44.9748401 + ], + [ + -123.987845, + 44.9729187 + ], + [ + -123.988034, + 44.9727887 + ], + [ + -123.9905147, + 44.9714041 + ], + [ + -123.9933426, + 44.97041 + ], + [ + -123.9935506, + 44.970355 + ], + [ + -123.9974665, + 44.9697188 + ], + [ + -123.9978424, + 44.9696938 + ], + [ + -123.9978895, + 44.9696907 + ], + [ + -123.9991493, + 44.9696098 + ], + [ + -124.0004346, + 44.9695657 + ], + [ + -124.0006606, + 44.9695647 + ], + [ + -124.004127, + 44.9698312 + ], + [ + -124.004283, + 44.9698562 + ], + [ + -124.0055211, + 44.9700937 + ], + [ + -124.0056951, + 44.9701327 + ], + [ + -124.0072436, + 44.9705607 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_2483495_s_16066", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.069884, + 44.6612268 + ], + [ + -124.0699935, + 44.6616801 + ], + [ + -124.0699965, + 44.6617141 + ], + [ + -124.0699635, + 44.6633887 + ], + [ + -124.0695703, + 44.6650397 + ], + [ + -124.0695573, + 44.6650767 + ], + [ + -124.0679611, + 44.6678845 + ], + [ + -124.0678961, + 44.6679645 + ], + [ + -124.0660314, + 44.6697913 + ], + [ + -124.0650211, + 44.6704402 + ], + [ + -124.0644544, + 44.6708679 + ], + [ + -124.0643353, + 44.6709469 + ], + [ + -124.0638483, + 44.6712566 + ], + [ + -124.0636923, + 44.6713516 + ], + [ + -124.0625092, + 44.6720033 + ], + [ + -124.0623482, + 44.6720833 + ], + [ + -124.0610926, + 44.6726446 + ], + [ + -124.0609226, + 44.6727126 + ], + [ + -124.0597078, + 44.6731489 + ], + [ + -124.0595328, + 44.6732049 + ], + [ + -124.0571225, + 44.6738086 + ], + [ + -124.0569765, + 44.6738356 + ], + [ + -124.0558501, + 44.673923 + ], + [ + -124.0557949, + 44.6739378 + ], + [ + -124.0556779, + 44.6739588 + ], + [ + -124.0527256, + 44.6742734 + ], + [ + -124.0497441, + 44.6741709 + ], + [ + -124.0468479, + 44.6736553 + ], + [ + -124.0441484, + 44.6727463 + ], + [ + -124.0417494, + 44.6714789 + ], + [ + -124.0397431, + 44.6699019 + ], + [ + -124.0382066, + 44.6680759 + ], + [ + -124.037199, + 44.6660711 + ], + [ + -124.0367588, + 44.6639644 + ], + [ + -124.0369029, + 44.661837 + ], + [ + -124.037214, + 44.6609478 + ], + [ + -124.0372581, + 44.6607009 + ], + [ + -124.0374398, + 44.6603023 + ], + [ + -124.0376258, + 44.6597705 + ], + [ + -124.0378074, + 44.6594959 + ], + [ + -124.0381416, + 44.658763 + ], + [ + -124.0381439, + 44.6587599 + ], + [ + -124.0381281, + 44.6586644 + ], + [ + -124.0379475, + 44.6573763 + ], + [ + -124.0379176, + 44.657137 + ], + [ + -124.0378578, + 44.656588 + ], + [ + -124.0378233, + 44.6561654 + ], + [ + -124.0377944, + 44.6556334 + ], + [ + -124.0377831, + 44.6552438 + ], + [ + -124.0377803, + 44.6545348 + ], + [ + -124.0380758, + 44.6523732 + ], + [ + -124.0389677, + 44.6502967 + ], + [ + -124.0404202, + 44.6483884 + ], + [ + -124.0423754, + 44.6467243 + ], + [ + -124.0447549, + 44.6453711 + ], + [ + -124.0474639, + 44.6443827 + ], + [ + -124.050394, + 44.6437986 + ], + [ + -124.0534283, + 44.6436422 + ], + [ + -124.0538782, + 44.6436512 + ], + [ + -124.0547625, + 44.6436873 + ], + [ + -124.0550704, + 44.6437063 + ], + [ + -124.0573334, + 44.6439696 + ], + [ + -124.0575654, + 44.6440096 + ], + [ + -124.0603505, + 44.6446995 + ], + [ + -124.0628973, + 44.6457597 + ], + [ + -124.06511, + 44.6471505 + ], + [ + -124.0669057, + 44.6488197 + ], + [ + -124.0682169, + 44.6507047 + ], + [ + -124.0689946, + 44.6527348 + ], + [ + -124.0692093, + 44.6548339 + ], + [ + -124.06919, + 44.6549472 + ], + [ + -124.0692268, + 44.655254 + ], + [ + -124.0691846, + 44.6574082 + ], + [ + -124.0689863, + 44.6580641 + ], + [ + -124.0693142, + 44.6588364 + ], + [ + -124.069859, + 44.6606861 + ], + [ + -124.069884, + 44.6612268 + ] + ] + ] + } + }, + { + "id": "radius_1207_s_2483495_s_29681", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -124.0387506, + 44.6547672 + ], + [ + -124.0383073, + 44.653771 + ], + [ + -124.0379763, + 44.6516542 + ], + [ + -124.0382301, + 44.649532 + ], + [ + -124.039059, + 44.6474859 + ], + [ + -124.0404311, + 44.6455946 + ], + [ + -124.0422936, + 44.6439307 + ], + [ + -124.0445749, + 44.6425581 + ], + [ + -124.0471873, + 44.6415295 + ], + [ + -124.0500306, + 44.6408845 + ], + [ + -124.0529954, + 44.6406479 + ], + [ + -124.0535517, + 44.6406426 + ], + [ + -124.0566636, + 44.6408423 + ], + [ + -124.0596528, + 44.6414914 + ], + [ + -124.0623935, + 44.6425626 + ], + [ + -124.06477, + 44.6440108 + ], + [ + -124.0654129, + 44.6444922 + ], + [ + -124.065851, + 44.6448347 + ], + [ + -124.0667064, + 44.6455328 + ], + [ + -124.0669274, + 44.6457172 + ], + [ + -124.0676624, + 44.6463447 + ], + [ + -124.069257, + 44.6479941 + ], + [ + -124.0694591, + 44.6482509 + ], + [ + -124.0698322, + 44.6487557 + ], + [ + -124.0701333, + 44.6491905 + ], + [ + -124.071152, + 44.651091 + ], + [ + -124.0716564, + 44.6530938 + ], + [ + -124.0716289, + 44.6551285 + ], + [ + -124.0715559, + 44.6556299 + ], + [ + -124.0714292, + 44.6562984 + ], + [ + -124.0713867, + 44.6564801 + ], + [ + -124.0713235, + 44.6568231 + ], + [ + -124.0711309, + 44.657631 + ], + [ + -124.0710278, + 44.6579825 + ], + [ + -124.0701239, + 44.6600303 + ], + [ + -124.0686734, + 44.6619112 + ], + [ + -124.0667329, + 44.6635517 + ], + [ + -124.0643781, + 44.6648879 + ], + [ + -124.0617011, + 44.6658675 + ], + [ + -124.058897, + 44.6664339 + ], + [ + -124.0580681, + 44.6666607 + ], + [ + -124.0550796, + 44.6670196 + ], + [ + -124.0549125, + 44.6670276 + ], + [ + -124.0519294, + 44.6669613 + ], + [ + -124.0490217, + 44.6664808 + ], + [ + -124.0463013, + 44.6656046 + ], + [ + -124.0438728, + 44.6643665 + ], + [ + -124.0418295, + 44.6628141 + ], + [ + -124.04025, + 44.6610069 + ], + [ + -124.0391949, + 44.6590145 + ], + [ + -124.0387047, + 44.6569136 + ], + [ + -124.0387465, + 44.6559625 + ], + [ + -124.0387226, + 44.6557753 + ], + [ + -124.0387506, + 44.6547672 + ] + ] + ] + } + } + ] +} \ No newline at end of file diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/routes.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/routes.txt new file mode 100644 index 00000000000..52c71914b7d --- /dev/null +++ b/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/routes.txt @@ -0,0 +1,7 @@ +agency_id,route_id,route_short_name,route_long_name,route_desc,route_type,route_url,route_color,route_text_color,route_sort_order,min_headway_minutes,eligibility_restricted,continuous_pickup,continuous_drop_off +89,491,,Newport City Loop,"Runs every day through Newport, with stops from South Beach and OCCC to north of Agate Beach.",3,https://www.nworegontransit.org/routes/newport_city_loop/,145098,ffffff,1,,0,1,1 +89,495,,North County,"Runs every day between Newport and Rose Lodge, with stops in Depoe Bay, Lincoln City, and more.",3,https://www.nworegontransit.org/routes/north_county/,145098,ffffff,2,,0,1,1 +89,497,,South County,Service running Monday - Saturday connecting Newport and Yachats.,3,https://www.nworegontransit.org/routes/south_county/,145098,ffffff,3,,0,1,1 +89,493,,East County,"Service running Monday - Saturday connecting Newport, Toledo, and Siletz.",3,https://www.nworegontransit.org/routes/east_county/,145098,ffffff,4,,0,1,1 +89,13317,,Dial-a-Ride,,3,https://www.nworegontransit.org/dial-a-ride-lct/,,,7,,0,1,1 +89,492,,Lincoln City Loop,"Service along Hwy 101, from Chinook Winds and the DMV down to Cutler City.",3,https://www.nworegontransit.org/routes/lincoln_city_loop/,145098,ffffff,8,,0,1,1 diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/stop_times.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/stop_times.txt new file mode 100644 index 00000000000..643920c1932 --- /dev/null +++ b/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/stop_times.txt @@ -0,0 +1,1023 @@ +trip_id,arrival_time,departure_time,stop_id,stop_sequence,stop_headsign,pickup_type,drop_off_type,shape_dist_traveled,timepoint,start_service_area_id,end_service_area_id,start_service_area_radius,end_service_area_radius,continuous_pickup,continuous_drop_off,pickup_booking_rule_id,drop_off_booking_rule_id,min_arrival_time,max_departure_time,mean_duration_factor,mean_duration_offset,safe_duration_factor,safe_duration_offset +t_1225545_b_26748_tn_0,,,area_272,1,,2,2,0,0,,,,,1,1,booking_route_13317,booking_route_13317,00:00:00,07:30:00,1,00:10:00,1,00:25:00 +t_1225545_b_26748_tn_0,,,area_272,2,,2,2,0,0,,,,,1,1,booking_route_13317,booking_route_13317,07:30:00,07:30:00,1,00:10:00,1,00:25:00 +t_299223_b_26748_tn_0,,,radius_1207_s_16069_s_16024,1,,0,0,0,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299223_b_26748_tn_0,,,radius_1207_s_16024_s_16025,2,,0,0,775.596266212284,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299223_b_26748_tn_0,,,radius_1207_s_16025_s_16026,3,,0,0,1807.22190535612,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299223_b_26748_tn_0,,,radius_1207_s_16026_s_2483495,4,,0,0,2766.28482550726,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299223_b_26748_tn_0,,,radius_1207_s_2483495_s_29681,5,,0,0,5416.75044306174,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299223_b_26748_tn_0,,,radius_1207_s_29681_s_16032,6,,0,0,6436.45201007476,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299223_b_26748_tn_0,,,radius_1207_s_16032_s_2438933,7,,0,0,7576.71452995217,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299223_b_26748_tn_0,,,radius_1207_s_2438933_s_16031,8,,0,0,8240.84195654157,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299223_b_26748_tn_0,,,radius_1207_s_16031_s_16030,9,,0,0,8527.62288862872,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299223_b_26748_tn_0,,,radius_1207_s_16030_s_16033,10,,0,0,8932.84679637186,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299223_b_26748_tn_0,,,radius_1207_s_16033_s_16034,11,,0,0,9165.13404331625,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299223_b_26748_tn_0,,,radius_1207_s_16034_s_15889,12,,0,0,9628.59060260394,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299223_b_26748_tn_0,,,radius_1207_s_15889_s_16039,13,,0,0,10510.9386855591,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299223_b_26748_tn_0,,,radius_1207_s_16039_s_16040,14,,0,0,11686.4154079233,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299223_b_26748_tn_0,,,radius_1207_s_16040_s_16042,15,,0,0,12047.7835753043,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299223_b_26748_tn_0,,,radius_1207_s_16042_s_16043,16,,0,0,12324.4604601439,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299223_b_26748_tn_0,,,radius_1207_s_16043_s_16044,17,,0,0,12526.5458089135,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299223_b_26748_tn_0,,,radius_1207_s_16044_s_16045,18,,0,0,12886.5424727922,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299223_b_26748_tn_0,,,radius_1207_s_16045_s_15942,19,,0,0,13106.2063391676,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299223_b_26748_tn_0,,,radius_1207_s_15942_s_16048,20,,0,0,15282.8820371869,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299223_b_26748_tn_0,,,radius_1207_s_16048_s_2438934,21,,2,3,17060.1720314054,0,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299223_b_26748_tn_0,,,radius_1207_s_2438934_s_16049,22,,0,0,18604.0056042532,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299223_b_26748_tn_0,,,radius_1207_s_16049_s_16050,23,,0,0,19098.7301834617,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299223_b_26748_tn_0,,,radius_1207_s_16050_s_16051,24,,0,0,19388.6880759922,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299223_b_26748_tn_0,,,radius_1207_s_16051_s_16052,25,,0,0,20425.6382579853,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299223_b_26748_tn_0,,,radius_1207_s_16052_s_16053,26,,0,0,20752.5347065814,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299223_b_26748_tn_0,,,radius_1207_s_16053_s_833259,27,,0,0,21230.9536762786,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299223_b_26748_tn_0,,,radius_1207_s_833259_s_16275,28,,0,0,23127.0336395412,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299223_b_26748_tn_0,,,radius_1207_s_16275_s_16055,29,,0,0,23551.6916242021,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299223_b_26748_tn_0,,,radius_1207_s_16055_s_16057,30,,0,0,23808.8722434897,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299223_b_26748_tn_0,,,radius_1207_s_16057_s_16058,31,,0,0,24487.418244042,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299223_b_26748_tn_0,,,radius_1207_s_16058_s_16059,32,,0,0,24680.6102514857,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299223_b_26748_tn_0,,,radius_1207_s_16059_s_16060,33,,0,0,25614.1591340582,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299223_b_26748_tn_0,,,radius_1207_s_16060_s_16061,34,,0,0,26256.131709164,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299223_b_26748_tn_0,,,radius_1207_s_16061_s_16062,35,,0,0,27180.643659028,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299223_b_26748_tn_0,,,radius_1207_s_16062_s_16063,36,,0,0,27686.863698439,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299223_b_26748_tn_0,,,radius_1207_s_16063_s_15890,37,,0,0,28259.1890347633,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299223_b_26748_tn_0,,,radius_1207_s_15890_s_2438932,38,,0,0,28886.6228332024,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299223_b_26748_tn_0,,,radius_1207_s_2438932_s_16065,39,,2,3,29619.901749005,0,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299223_b_26748_tn_0,,,radius_1207_s_16065_s_2483495,40,,0,0,30254.2525223819,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299223_b_26748_tn_0,,,radius_1207_s_2483495_s_16066,41,,2,3,30838.8763853997,0,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299223_b_26748_tn_0,,,radius_1207_s_16066_s_16068,42,,0,0,32312.2465968761,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299223_b_26748_tn_0,,,radius_1207_s_16068_s_16069,43,,0,0,34898.4147967777,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299223_b_26748_tn_0,,,radius_1207_s_16069_s_16069,44,,0,0,36360.0641114,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299224_b_26748_tn_0,,,radius_1207_s_16069_s_16024,1,,0,0,0,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299224_b_26748_tn_0,,,radius_1207_s_16024_s_16025,2,,0,0,775.596266212284,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299224_b_26748_tn_0,,,radius_1207_s_16025_s_16026,3,,0,0,1807.22190535612,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299224_b_26748_tn_0,,,radius_1207_s_16026_s_2483495,4,,0,0,2766.28482550726,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299224_b_26748_tn_0,,,radius_1207_s_2483495_s_29681,5,,0,0,5416.75044306174,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299224_b_26748_tn_0,,,radius_1207_s_29681_s_16032,6,,0,0,6436.45201007476,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299224_b_26748_tn_0,,,radius_1207_s_16032_s_2438933,7,,0,0,7576.71452995217,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299224_b_26748_tn_0,,,radius_1207_s_2438933_s_16031,8,,0,0,8240.84195654157,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299224_b_26748_tn_0,,,radius_1207_s_16031_s_16030,9,,0,0,8527.62288862872,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299224_b_26748_tn_0,,,radius_1207_s_16030_s_16033,10,,0,0,8932.84679637186,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299224_b_26748_tn_0,,,radius_1207_s_16033_s_16034,11,,0,0,9165.13404331625,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299224_b_26748_tn_0,,,radius_1207_s_16034_s_15889,12,,0,0,9628.59060260394,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299224_b_26748_tn_0,,,radius_1207_s_15889_s_16039,13,,0,0,10510.9386855591,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299224_b_26748_tn_0,,,radius_1207_s_16039_s_16040,14,,0,0,11686.4154079233,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299224_b_26748_tn_0,,,radius_1207_s_16040_s_16042,15,,0,0,12047.7835753043,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299224_b_26748_tn_0,,,radius_1207_s_16042_s_16043,16,,0,0,12324.4604601439,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299224_b_26748_tn_0,,,radius_1207_s_16043_s_16044,17,,0,0,12526.5458089135,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299224_b_26748_tn_0,,,radius_1207_s_16044_s_16045,18,,0,0,12886.5424727922,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299224_b_26748_tn_0,,,radius_1207_s_16045_s_15942,19,,0,0,13106.2063391676,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299224_b_26748_tn_0,,,radius_1207_s_15942_s_16048,20,,0,0,15282.8820371869,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299224_b_26748_tn_0,,,radius_1207_s_16048_s_2438934,21,,2,3,17060.1720314054,0,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299224_b_26748_tn_0,,,radius_1207_s_2438934_s_16049,22,,0,0,18604.0056042532,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299224_b_26748_tn_0,,,radius_1207_s_16049_s_16050,23,,0,0,19098.7301834617,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299224_b_26748_tn_0,,,radius_1207_s_16050_s_16051,24,,0,0,19388.6880759922,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299224_b_26748_tn_0,,,radius_1207_s_16051_s_16052,25,,0,0,20425.6382579853,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299224_b_26748_tn_0,,,radius_1207_s_16052_s_16053,26,,0,0,20752.5347065814,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299224_b_26748_tn_0,,,radius_1207_s_16053_s_833259,27,,0,0,21230.9536762786,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299224_b_26748_tn_0,,,radius_1207_s_833259_s_16275,28,,0,0,23127.0336395412,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299224_b_26748_tn_0,,,radius_1207_s_16275_s_16055,29,,0,0,23551.6916242021,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299224_b_26748_tn_0,,,radius_1207_s_16055_s_16057,30,,0,0,23808.8722434897,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299224_b_26748_tn_0,,,radius_1207_s_16057_s_16058,31,,0,0,24487.418244042,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299224_b_26748_tn_0,,,radius_1207_s_16058_s_16059,32,,0,0,24680.6102514857,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299224_b_26748_tn_0,,,radius_1207_s_16059_s_16060,33,,0,0,25614.1591340582,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299224_b_26748_tn_0,,,radius_1207_s_16060_s_16061,34,,0,0,26256.131709164,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299224_b_26748_tn_0,,,radius_1207_s_16061_s_16062,35,,0,0,27180.643659028,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299224_b_26748_tn_0,,,radius_1207_s_16062_s_16063,36,,0,0,27686.863698439,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299224_b_26748_tn_0,,,radius_1207_s_16063_s_15890,37,,0,0,28259.1890347633,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299224_b_26748_tn_0,,,radius_1207_s_15890_s_2438932,38,,0,0,28886.6228332024,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299224_b_26748_tn_0,,,radius_1207_s_2438932_s_16065,39,,2,3,29619.901749005,0,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299224_b_26748_tn_0,,,radius_1207_s_16065_s_2483495,40,,0,0,30254.2525223819,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299224_b_26748_tn_0,,,radius_1207_s_2483495_s_16066,41,,2,3,30838.8763853997,0,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299224_b_26748_tn_0,,,radius_1207_s_16066_s_16068,42,,0,0,32312.2465968761,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299224_b_26748_tn_0,,,radius_1207_s_16068_s_16069,43,,0,0,34898.4147967777,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299224_b_26748_tn_0,,,radius_1207_s_16069_s_16069,44,,0,0,36360.0641114,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299225_b_26748_tn_0,,,radius_1207_s_16077_s_759421,1,,0,0,0,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299225_b_26748_tn_0,,,radius_1207_s_759421_s_16079,2,,0,0,1008.12935981895,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299225_b_26748_tn_0,,,radius_1207_s_16079_s_16080,3,,0,0,1646.05038257577,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299225_b_26748_tn_0,,,radius_1207_s_16080_s_16072,4,,0,0,2246.95996830662,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299225_b_26748_tn_0,,,radius_1207_s_16072_s_16081,5,,0,0,3149.36717442244,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299225_b_26748_tn_0,,,radius_1207_s_16081_s_16082,6,,0,0,3886.97801179446,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299225_b_26748_tn_0,,,radius_1207_s_16082_s_759422,7,,0,0,4637.00781068317,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299225_b_26748_tn_0,,,radius_1207_s_759422_s_759423,8,,3,2,6083.91068321656,0,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299225_b_26748_tn_0,,,radius_1207_s_759423_s_16185,9,,0,0,6685.31689051341,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299225_b_26748_tn_0,,,radius_1207_s_16185_s_16086,10,,0,0,8961.70505916116,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299225_b_26748_tn_0,,,radius_1207_s_16086_s_16087,11,,0,0,10360.6117120665,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299225_b_26748_tn_0,,,radius_1207_s_16087_s_16088,12,,0,0,10902.6642789545,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299225_b_26748_tn_0,,,radius_1207_s_16088_s_16088,13,,0,0,12081.82250474,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299226_b_26748_tn_0,,,radius_1207_s_22284_s_22286,1,,0,0,0,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299226_b_26748_tn_0,,,radius_1207_s_22286_s_22283,2,,0,0,580.898703890139,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299226_b_26748_tn_0,,,radius_1207_s_22283_s_22285,3,,0,0,1485.07965471661,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299226_b_26748_tn_0,,,radius_1207_s_22285_s_16278,4,,0,0,2389.72540975272,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299226_b_26748_tn_0,,,radius_1207_s_16278_s_15894,5,,2,3,17038.9069974779,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299226_b_26748_tn_0,,,radius_1207_s_15894_s_15882,6,,0,0,20982.6560544094,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299226_b_26748_tn_0,,,radius_1207_s_15882_s_15883,7,,0,0,22817.3023837179,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299226_b_26748_tn_0,,,radius_1207_s_15883_s_16276,8,,0,0,23629.5651817964,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299226_b_26748_tn_0,,,radius_1207_s_16276_s_15885,9,,0,0,23872.2297549312,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299226_b_26748_tn_0,,,radius_1207_s_15885_s_15893,10,,0,0,24379.2249071533,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299226_b_26748_tn_0,,,radius_1207_s_15893_s_16279,11,,0,0,34442.5528158479,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299226_b_26748_tn_0,,,radius_1207_s_16279_s_16275,12,,0,0,36375.0147840304,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299226_b_26748_tn_0,,,radius_1207_s_16275_s_15889,13,,0,0,37076.2208086132,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299226_b_26748_tn_0,,,radius_1207_s_15889_s_2456760,14,,0,0,37902.6201584632,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299226_b_26748_tn_0,,,radius_1207_s_2456760_s_2455449,15,,2,3,39685.7670273536,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299226_b_26748_tn_0,,,radius_1207_s_2455449_s_29681,16,,2,3,40220.1382077686,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299226_b_26748_tn_0,,,radius_1207_s_29681_s_29681,17,,2,3,41071.73219809,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299227_b_26748_tn_0,,,radius_1207_s_15889_s_16200,1,,0,1,0,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299227_b_26748_tn_0,,,radius_1207_s_16200_s_2456760,2,,0,0,390.124447144401,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299227_b_26748_tn_0,,,radius_1207_s_2456760_s_2455449,3,,2,3,1942.71023257005,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299227_b_26748_tn_0,,,radius_1207_s_2455449_s_29681,4,,0,0,2422.62267762865,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299227_b_26748_tn_0,,,radius_1207_s_29681_s_16196,5,,0,0,3274.21666796654,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299227_b_26748_tn_0,,,radius_1207_s_16196_s_781958,6,,2,3,4494.33427254792,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299227_b_26748_tn_0,,,radius_1207_s_781958_s_16068,7,,2,3,6021.13767832062,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299227_b_26748_tn_0,,,radius_1207_s_16068_s_16201,8,,2,3,6747.70023050663,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299227_b_26748_tn_0,,,radius_1207_s_16201_s_16197,9,,2,3,11779.7874851007,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299227_b_26748_tn_0,,,radius_1207_s_16197_s_16202,10,,2,3,21615.370013261,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299227_b_26748_tn_0,,,radius_1207_s_16202_s_16203,11,,0,0,23050.8716339068,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299227_b_26748_tn_0,,,radius_1207_s_16203_s_16195,12,,0,0,27401.2515905677,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299227_b_26748_tn_0,,,radius_1207_s_16195_s_16204,13,,0,0,30736.7981805553,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299227_b_26748_tn_0,,,radius_1207_s_16204_s_16205,14,,2,3,32196.0237533648,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299227_b_26748_tn_0,,,radius_1207_s_16205_s_16089,15,,2,3,36386.2354670862,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299227_b_26748_tn_0,,,radius_1207_s_16089_s_781959,16,,0,0,37705.6185146785,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299227_b_26748_tn_0,,,radius_1207_s_781959_s_16094,17,,2,3,39746.7124844555,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299227_b_26748_tn_0,,,radius_1207_s_16094_s_16095,18,,0,0,41627.503762023,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299227_b_26748_tn_0,,,radius_1207_s_16095_s_2456766,19,,0,0,42598.7096685439,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299227_b_26748_tn_0,,,radius_1207_s_2456766_s_16071,20,,0,0,45092.4976364488,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299227_b_26748_tn_0,,,radius_1207_s_16071_s_16212,21,,0,0,46524.7014916334,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299227_b_26748_tn_0,,,radius_1207_s_16212_s_16079,22,,2,3,48100.9316569625,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299227_b_26748_tn_0,,,radius_1207_s_16079_s_16080,23,,0,0,49207.6451476667,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299227_b_26748_tn_0,,,radius_1207_s_16080_s_16210,24,,0,0,49808.5381113633,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299227_b_26748_tn_0,,,radius_1207_s_16210_s_16214,25,,2,3,51569.6459203115,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299227_b_26748_tn_0,,,radius_1207_s_16214_s_16215,26,,0,0,60177.3071557854,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299227_b_26748_tn_0,,,radius_1207_s_16215_s_16215,27,,1,0,63973.65413202,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299228_b_26748_tn_0,,,radius_1207_s_16066_s_16068,1,,0,0,0,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299228_b_26748_tn_0,,,radius_1207_s_16068_s_16069,2,,0,0,2583.74475543002,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299228_b_26748_tn_0,,,radius_1207_s_16069_s_16069,3,,0,0,4045.39406991,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299229_b_26748_tn_0,,,radius_1207_s_16215_s_16183,1,,0,0,0,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299229_b_26748_tn_0,,,radius_1207_s_16183_s_16184,2,,2,3,6520.50975296256,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299229_b_26748_tn_0,,,radius_1207_s_16184_s_16079,3,,2,3,11084.1884902035,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299229_b_26748_tn_0,,,radius_1207_s_16079_s_16080,4,,0,0,13248.1451958165,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299229_b_26748_tn_0,,,radius_1207_s_16080_s_16072,5,,0,0,13848.9661178394,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299229_b_26748_tn_0,,,radius_1207_s_16072_s_2455436,6,,0,0,14751.3733239552,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299229_b_26748_tn_0,,,radius_1207_s_2455436_s_2456766,7,,2,3,15308.1661406291,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299229_b_26748_tn_0,,,radius_1207_s_2456766_s_16071,8,,0,0,15778.6377100029,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299229_b_26748_tn_0,,,radius_1207_s_16071_s_16082,9,,0,0,17210.8415651875,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299229_b_26748_tn_0,,,radius_1207_s_16082_s_16084,10,,0,0,19259.2327970833,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299229_b_26748_tn_0,,,radius_1207_s_16084_s_16094,11,,0,0,21236.5820279569,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299229_b_26748_tn_0,,,radius_1207_s_16094_s_16185,12,,0,0,22119.5215086519,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299229_b_26748_tn_0,,,radius_1207_s_16185_s_16087,13,,2,3,24197.4842031251,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299229_b_26748_tn_0,,,radius_1207_s_16087_s_16088,14,,0,0,26027.3114484316,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299229_b_26748_tn_0,,,radius_1207_s_16088_s_16189,15,,2,3,27204.5843383888,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299229_b_26748_tn_0,,,radius_1207_s_16189_s_16188,16,,2,3,31631.2452421551,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299229_b_26748_tn_0,,,radius_1207_s_16188_s_16187,17,,0,0,33154.5344338769,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299229_b_26748_tn_0,,,radius_1207_s_16187_s_16211,18,,2,3,36465.5949927191,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299229_b_26748_tn_0,,,radius_1207_s_16211_s_16192,19,,0,0,40725.7914104004,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299229_b_26748_tn_0,,,radius_1207_s_16192_s_16190,20,,0,0,41931.6524731666,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299229_b_26748_tn_0,,,radius_1207_s_16190_s_16191,21,,2,3,49989.5176117643,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299229_b_26748_tn_0,,,radius_1207_s_16191_s_16025,22,,2,3,52321.8018521579,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299229_b_26748_tn_0,,,radius_1207_s_16025_s_2455449,23,,0,0,57134.220310128,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299229_b_26748_tn_0,,,radius_1207_s_2455449_s_29681,24,,0,0,60471.8291282356,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299229_b_26748_tn_0,,,radius_1207_s_29681_s_16194,25,,0,0,61323.4231185735,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299229_b_26748_tn_0,,,radius_1207_s_16194_s_15889,26,,0,0,63200.9410346108,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299229_b_26748_tn_0,,,radius_1207_s_15889_s_15889,27,,0,0,63916.4911365,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299230_b_26748_tn_0,,,radius_1207_s_16077_s_759421,1,,0,0,0,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299230_b_26748_tn_0,,,radius_1207_s_759421_s_16079,2,,0,0,1008.12935981895,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299230_b_26748_tn_0,,,radius_1207_s_16079_s_16080,3,,0,0,1646.05038257577,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299230_b_26748_tn_0,,,radius_1207_s_16080_s_16072,4,,0,0,2246.95996830662,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299230_b_26748_tn_0,,,radius_1207_s_16072_s_16081,5,,0,0,3149.36717442244,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299230_b_26748_tn_0,,,radius_1207_s_16081_s_16082,6,,0,0,3886.97801179446,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299230_b_26748_tn_0,,,radius_1207_s_16082_s_759422,7,,0,0,4637.00781068317,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299230_b_26748_tn_0,,,radius_1207_s_759422_s_759423,8,,3,2,6083.91068321656,0,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299230_b_26748_tn_0,,,radius_1207_s_759423_s_16185,9,,0,0,6685.31689051341,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299230_b_26748_tn_0,,,radius_1207_s_16185_s_16086,10,,0,0,8961.70505916116,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299230_b_26748_tn_0,,,radius_1207_s_16086_s_16087,11,,0,0,10360.6117120665,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299230_b_26748_tn_0,,,radius_1207_s_16087_s_16088,12,,0,0,10902.6642789545,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299230_b_26748_tn_0,,,radius_1207_s_16088_s_16088,13,,0,0,12081.82250474,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299231_b_26748_tn_0,,,radius_1207_s_15889_s_16045,1,,0,0,0,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299231_b_26748_tn_0,,,radius_1207_s_16045_s_15942,2,,2,3,1709.19902985184,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299231_b_26748_tn_0,,,radius_1207_s_15942_s_781974,3,,0,0,3887.61490675644,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299231_b_26748_tn_0,,,radius_1207_s_781974_s_15962,4,,0,0,17321.7379087203,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299231_b_26748_tn_0,,,radius_1207_s_15962_s_15944,5,,2,3,23800.6169789249,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299231_b_26748_tn_0,,,radius_1207_s_15944_s_15958,6,,2,3,25852.6322194589,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299231_b_26748_tn_0,,,radius_1207_s_15958_s_15947,7,,2,3,29176.3686491574,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299231_b_26748_tn_0,,,radius_1207_s_15947_s_15946,8,,0,0,32106.8180713215,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299231_b_26748_tn_0,,,radius_1207_s_15946_s_22289,9,,2,3,32708.1019769077,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299231_b_26748_tn_0,,,radius_1207_s_22289_s_2456757,10,,0,0,32903.3688034016,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299231_b_26748_tn_0,,,radius_1207_s_2456757_s_15950,11,,0,0,34982.5332643694,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299231_b_26748_tn_0,,,radius_1207_s_15950_s_2456756,12,,2,3,42709.6374459764,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299231_b_26748_tn_0,,,radius_1207_s_2456756_s_2456756,13,,0,0,47675.32249262,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299232_b_26748_tn_0,,,radius_1207_s_15889_s_15888,1,,0,0,0,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299232_b_26748_tn_0,,,radius_1207_s_15888_s_15887,2,,0,0,1317.07488036808,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299232_b_26748_tn_0,,,radius_1207_s_15887_s_16060,3,,0,0,2009.36822490283,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299232_b_26748_tn_0,,,radius_1207_s_16060_s_15892,4,,0,0,3915.44513711639,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299232_b_26748_tn_0,,,radius_1207_s_15892_s_15884,5,,0,0,13988.7032003241,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299232_b_26748_tn_0,,,radius_1207_s_15884_s_15882,6,,2,3,14497.8576948654,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299232_b_26748_tn_0,,,radius_1207_s_15882_s_16278,7,,0,0,15033.0163136232,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299232_b_26748_tn_0,,,radius_1207_s_16278_s_22287,8,,2,3,17915.1260372278,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299232_b_26748_tn_0,,,radius_1207_s_22287_s_22284,9,,0,0,32340.4796076039,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299232_b_26748_tn_0,,,radius_1207_s_22284_s_22286,10,,2,3,33841.6504949612,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299232_b_26748_tn_0,,,radius_1207_s_22286_s_22283,11,,2,3,34423.1462924291,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299232_b_26748_tn_0,,,radius_1207_s_22283_s_22283,12,,2,3,35327.32724326,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299233_b_26748_tn_0,,,radius_1207_s_16077_s_759421,1,,0,0,0,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299233_b_26748_tn_0,,,radius_1207_s_759421_s_16079,2,,0,0,1008.12935981895,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299233_b_26748_tn_0,,,radius_1207_s_16079_s_16080,3,,0,0,1646.05038257577,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299233_b_26748_tn_0,,,radius_1207_s_16080_s_16072,4,,0,0,2246.95996830662,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299233_b_26748_tn_0,,,radius_1207_s_16072_s_16081,5,,0,0,3149.36717442244,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299233_b_26748_tn_0,,,radius_1207_s_16081_s_16082,6,,0,0,3886.97801179446,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299233_b_26748_tn_0,,,radius_1207_s_16082_s_759422,7,,0,0,4637.00781068317,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299233_b_26748_tn_0,,,radius_1207_s_759422_s_759423,8,,3,2,6083.91068321656,0,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299233_b_26748_tn_0,,,radius_1207_s_759423_s_16185,9,,0,0,6685.31689051341,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299233_b_26748_tn_0,,,radius_1207_s_16185_s_16086,10,,0,0,8961.70505916116,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299233_b_26748_tn_0,,,radius_1207_s_16086_s_16087,11,,0,0,10360.6117120665,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299233_b_26748_tn_0,,,radius_1207_s_16087_s_16088,12,,0,0,10902.6642789545,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299233_b_26748_tn_0,,,radius_1207_s_16088_s_16088,13,,0,0,12081.82250474,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299234_b_26748_tn_0,,,radius_1207_s_22284_s_22286,1,,0,0,0,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299234_b_26748_tn_0,,,radius_1207_s_22286_s_22283,2,,0,0,580.898703890139,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299234_b_26748_tn_0,,,radius_1207_s_22283_s_22285,3,,0,0,1485.07965471661,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299234_b_26748_tn_0,,,radius_1207_s_22285_s_16278,4,,0,0,2389.72540975272,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299234_b_26748_tn_0,,,radius_1207_s_16278_s_15894,5,,2,3,17038.9069974779,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299234_b_26748_tn_0,,,radius_1207_s_15894_s_15882,6,,0,0,20982.6560544094,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299234_b_26748_tn_0,,,radius_1207_s_15882_s_15883,7,,0,0,22817.3023837179,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299234_b_26748_tn_0,,,radius_1207_s_15883_s_16276,8,,0,0,23629.5651817964,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299234_b_26748_tn_0,,,radius_1207_s_16276_s_15885,9,,0,0,23872.2297549312,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299234_b_26748_tn_0,,,radius_1207_s_15885_s_15893,10,,0,0,24379.2249071533,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299234_b_26748_tn_0,,,radius_1207_s_15893_s_16279,11,,0,0,34442.5528158479,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299234_b_26748_tn_0,,,radius_1207_s_16279_s_16275,12,,0,0,36375.0147840304,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299234_b_26748_tn_0,,,radius_1207_s_16275_s_15889,13,,0,0,37076.2208086132,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299234_b_26748_tn_0,,,radius_1207_s_15889_s_2456760,14,,0,0,37902.6201584632,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299234_b_26748_tn_0,,,radius_1207_s_2456760_s_2456760,15,,2,3,39685.76702734,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299235_b_26748_tn_0,,,radius_1207_s_16077_s_759421,1,,0,0,0,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299235_b_26748_tn_0,,,radius_1207_s_759421_s_16079,2,,0,0,1008.12935981895,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299235_b_26748_tn_0,,,radius_1207_s_16079_s_16080,3,,0,0,1646.05038257577,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299235_b_26748_tn_0,,,radius_1207_s_16080_s_16072,4,,0,0,2246.95996830662,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299235_b_26748_tn_0,,,radius_1207_s_16072_s_16081,5,,0,0,3149.36717442244,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299235_b_26748_tn_0,,,radius_1207_s_16081_s_16082,6,,0,0,3886.97801179446,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299235_b_26748_tn_0,,,radius_1207_s_16082_s_759422,7,,0,0,4637.00781068317,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299235_b_26748_tn_0,,,radius_1207_s_759422_s_759423,8,,3,2,6083.91068321656,0,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299235_b_26748_tn_0,,,radius_1207_s_759423_s_16185,9,,0,0,6685.31689051341,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299235_b_26748_tn_0,,,radius_1207_s_16185_s_16086,10,,0,0,8961.70505916116,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299235_b_26748_tn_0,,,radius_1207_s_16086_s_16087,11,,0,0,10360.6117120665,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299235_b_26748_tn_0,,,radius_1207_s_16087_s_16088,12,,0,0,10902.6642789545,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299235_b_26748_tn_0,,,radius_1207_s_16088_s_16088,13,,0,0,12081.82250474,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299236_b_26748_tn_0,,,radius_1207_s_16077_s_759421,1,,0,0,0,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299236_b_26748_tn_0,,,radius_1207_s_759421_s_16079,2,,0,0,1008.12935981895,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299236_b_26748_tn_0,,,radius_1207_s_16079_s_16080,3,,0,0,1646.05038257577,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299236_b_26748_tn_0,,,radius_1207_s_16080_s_16072,4,,0,0,2246.95996830662,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299236_b_26748_tn_0,,,radius_1207_s_16072_s_16081,5,,0,0,3149.36717442244,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299236_b_26748_tn_0,,,radius_1207_s_16081_s_16082,6,,0,0,3886.97801179446,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299236_b_26748_tn_0,,,radius_1207_s_16082_s_759422,7,,0,0,4637.00781068317,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299236_b_26748_tn_0,,,radius_1207_s_759422_s_759423,8,,3,2,6083.91068321656,0,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299236_b_26748_tn_0,,,radius_1207_s_759423_s_16185,9,,0,0,6685.31689051341,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299236_b_26748_tn_0,,,radius_1207_s_16185_s_16086,10,,0,0,8961.70505916116,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299236_b_26748_tn_0,,,radius_1207_s_16086_s_16087,11,,0,0,10360.6117120665,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299236_b_26748_tn_0,,,radius_1207_s_16087_s_16088,12,,0,0,10902.6642789545,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299236_b_26748_tn_0,,,radius_1207_s_16088_s_16088,13,,0,0,12081.82250474,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299237_b_26748_tn_0,,,radius_1207_s_16077_s_759421,1,,0,0,0,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299237_b_26748_tn_0,,,radius_1207_s_759421_s_16079,2,,0,0,1008.12935981895,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299237_b_26748_tn_0,,,radius_1207_s_16079_s_16080,3,,0,0,1646.05038257577,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299237_b_26748_tn_0,,,radius_1207_s_16080_s_16072,4,,0,0,2246.95996830662,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299237_b_26748_tn_0,,,radius_1207_s_16072_s_16081,5,,0,0,3149.36717442244,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299237_b_26748_tn_0,,,radius_1207_s_16081_s_16082,6,,0,0,3886.97801179446,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299237_b_26748_tn_0,,,radius_1207_s_16082_s_759422,7,,0,0,4637.00781068317,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299237_b_26748_tn_0,,,radius_1207_s_759422_s_759423,8,,3,2,6083.91068321656,0,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299237_b_26748_tn_0,,,radius_1207_s_759423_s_16185,9,,0,0,6685.31689051341,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299237_b_26748_tn_0,,,radius_1207_s_16185_s_16086,10,,0,0,8961.70505916116,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299237_b_26748_tn_0,,,radius_1207_s_16086_s_16087,11,,0,0,10360.6117120665,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299237_b_26748_tn_0,,,radius_1207_s_16087_s_16088,12,,0,0,10902.6642789545,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299237_b_26748_tn_0,,,radius_1207_s_16088_s_16088,13,,0,0,12081.82250474,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299238_b_26748_tn_0,,,radius_1207_s_16215_s_16183,1,,0,0,0,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299238_b_26748_tn_0,,,radius_1207_s_16183_s_16184,2,,2,3,6520.50975296256,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299238_b_26748_tn_0,,,radius_1207_s_16184_s_16079,3,,2,3,11084.1884902035,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299238_b_26748_tn_0,,,radius_1207_s_16079_s_16080,4,,0,0,13248.1451958165,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299238_b_26748_tn_0,,,radius_1207_s_16080_s_16072,5,,0,0,13848.9661178394,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299238_b_26748_tn_0,,,radius_1207_s_16072_s_2455436,6,,0,0,14751.3733239552,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299238_b_26748_tn_0,,,radius_1207_s_2455436_s_2456766,7,,2,3,15308.1661406291,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299238_b_26748_tn_0,,,radius_1207_s_2456766_s_16071,8,,0,0,15778.6377100029,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299238_b_26748_tn_0,,,radius_1207_s_16071_s_16082,9,,0,0,17210.8415651875,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299238_b_26748_tn_0,,,radius_1207_s_16082_s_16084,10,,0,0,19259.2327970833,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299238_b_26748_tn_0,,,radius_1207_s_16084_s_16094,11,,0,0,21236.5820279569,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299238_b_26748_tn_0,,,radius_1207_s_16094_s_16185,12,,0,0,22119.5215086519,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299238_b_26748_tn_0,,,radius_1207_s_16185_s_16087,13,,2,3,24197.4842031251,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299238_b_26748_tn_0,,,radius_1207_s_16087_s_16088,14,,0,0,26027.3114484316,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299238_b_26748_tn_0,,,radius_1207_s_16088_s_16189,15,,2,3,27204.5843383888,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299238_b_26748_tn_0,,,radius_1207_s_16189_s_16188,16,,2,3,31631.2452421551,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299238_b_26748_tn_0,,,radius_1207_s_16188_s_16187,17,,0,0,33154.5344338769,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299238_b_26748_tn_0,,,radius_1207_s_16187_s_16211,18,,2,3,36465.5949927191,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299238_b_26748_tn_0,,,radius_1207_s_16211_s_16192,19,,0,0,40725.7914104004,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299238_b_26748_tn_0,,,radius_1207_s_16192_s_16190,20,,0,0,41931.6524731666,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299238_b_26748_tn_0,,,radius_1207_s_16190_s_16191,21,,2,3,49989.5176117643,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299238_b_26748_tn_0,,,radius_1207_s_16191_s_16025,22,,2,3,52321.8018521579,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299238_b_26748_tn_0,,,radius_1207_s_16025_s_2455449,23,,0,0,57134.220310128,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299238_b_26748_tn_0,,,radius_1207_s_2455449_s_29681,24,,0,0,60471.8291282356,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299238_b_26748_tn_0,,,radius_1207_s_29681_s_16194,25,,0,0,61323.4231185735,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299238_b_26748_tn_0,,,radius_1207_s_16194_s_15889,26,,0,0,63200.9410346108,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299238_b_26748_tn_0,,,radius_1207_s_15889_s_15889,27,,0,0,63916.4911365,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299239_b_26748_tn_0,,,radius_1207_s_15889_s_16045,1,,0,0,0,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299239_b_26748_tn_0,,,radius_1207_s_16045_s_15942,2,,2,3,1709.19902985184,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299239_b_26748_tn_0,,,radius_1207_s_15942_s_781974,3,,0,0,3887.61490675644,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299239_b_26748_tn_0,,,radius_1207_s_781974_s_15962,4,,0,0,17321.7379087203,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299239_b_26748_tn_0,,,radius_1207_s_15962_s_15944,5,,2,3,23800.6169789249,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299239_b_26748_tn_0,,,radius_1207_s_15944_s_15958,6,,2,3,25852.6322194589,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299239_b_26748_tn_0,,,radius_1207_s_15958_s_15947,7,,2,3,29176.3686491574,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299239_b_26748_tn_0,,,radius_1207_s_15947_s_15946,8,,0,0,32106.8180713215,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299239_b_26748_tn_0,,,radius_1207_s_15946_s_22289,9,,2,3,32708.1019769077,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299239_b_26748_tn_0,,,radius_1207_s_22289_s_2456757,10,,0,0,32903.3688034016,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299239_b_26748_tn_0,,,radius_1207_s_2456757_s_15950,11,,0,0,34982.5332643694,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299239_b_26748_tn_0,,,radius_1207_s_15950_s_2456756,12,,2,3,42709.6374459764,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299239_b_26748_tn_0,,,radius_1207_s_2456756_s_2456756,13,,0,0,47675.32249262,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299240_b_26748_tn_0,,,radius_1207_s_22284_s_22286,1,,0,0,0,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299240_b_26748_tn_0,,,radius_1207_s_22286_s_22283,2,,0,0,580.898703890139,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299240_b_26748_tn_0,,,radius_1207_s_22283_s_22285,3,,0,0,1485.07965471661,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299240_b_26748_tn_0,,,radius_1207_s_22285_s_16278,4,,0,0,2389.72540975272,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299240_b_26748_tn_0,,,radius_1207_s_16278_s_15894,5,,2,3,17038.9069974779,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299240_b_26748_tn_0,,,radius_1207_s_15894_s_15882,6,,0,0,20982.6560544094,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299240_b_26748_tn_0,,,radius_1207_s_15882_s_15883,7,,0,0,22817.3023837179,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299240_b_26748_tn_0,,,radius_1207_s_15883_s_16276,8,,0,0,23629.5651817964,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299240_b_26748_tn_0,,,radius_1207_s_16276_s_15885,9,,0,0,23872.2297549312,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299240_b_26748_tn_0,,,radius_1207_s_15885_s_15893,10,,0,0,24379.2249071533,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299240_b_26748_tn_0,,,radius_1207_s_15893_s_16279,11,,0,0,34442.5528158479,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299240_b_26748_tn_0,,,radius_1207_s_16279_s_16275,12,,0,0,36375.0147840304,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299240_b_26748_tn_0,,,radius_1207_s_16275_s_15889,13,,0,0,37076.2208086132,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299240_b_26748_tn_0,,,radius_1207_s_15889_s_15889,14,,0,0,37902.62015844,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299241_b_26748_tn_0,,,radius_1207_s_16077_s_759421,1,,0,0,0,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299241_b_26748_tn_0,,,radius_1207_s_759421_s_16079,2,,0,0,1008.12935981895,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299241_b_26748_tn_0,,,radius_1207_s_16079_s_16080,3,,0,0,1646.05038257577,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299241_b_26748_tn_0,,,radius_1207_s_16080_s_16072,4,,0,0,2246.95996830662,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299241_b_26748_tn_0,,,radius_1207_s_16072_s_16081,5,,0,0,3149.36717442244,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299241_b_26748_tn_0,,,radius_1207_s_16081_s_16082,6,,0,0,3886.97801179446,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299241_b_26748_tn_0,,,radius_1207_s_16082_s_759422,7,,0,0,4637.00781068317,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299241_b_26748_tn_0,,,radius_1207_s_759422_s_759423,8,,3,2,6083.91068321656,0,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299241_b_26748_tn_0,,,radius_1207_s_759423_s_16185,9,,0,0,6685.31689051341,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299241_b_26748_tn_0,,,radius_1207_s_16185_s_16086,10,,0,0,8961.70505916116,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299241_b_26748_tn_0,,,radius_1207_s_16086_s_16087,11,,0,0,10360.6117120665,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299241_b_26748_tn_0,,,radius_1207_s_16087_s_16088,12,,0,0,10902.6642789545,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299241_b_26748_tn_0,,,radius_1207_s_16088_s_16088,13,,0,0,12081.82250474,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299242_b_26748_tn_0,,,radius_1207_s_22286_s_22283,1,,0,0,0,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299242_b_26748_tn_0,,,radius_1207_s_22283_s_22285,2,,0,0,903.942886074705,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299242_b_26748_tn_0,,,radius_1207_s_22285_s_16278,3,,0,0,1808.58864111081,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299242_b_26748_tn_0,,,radius_1207_s_16278_s_15894,4,,2,3,16457.770228836,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299242_b_26748_tn_0,,,radius_1207_s_15894_s_15882,5,,0,0,20401.5192857675,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299242_b_26748_tn_0,,,radius_1207_s_15882_s_15883,6,,0,0,22236.165615076,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299242_b_26748_tn_0,,,radius_1207_s_15883_s_16276,7,,0,0,23048.4284131545,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299242_b_26748_tn_0,,,radius_1207_s_16276_s_15885,8,,0,0,23291.0929862893,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299242_b_26748_tn_0,,,radius_1207_s_15885_s_15893,9,,0,0,23798.0881385114,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299242_b_26748_tn_0,,,radius_1207_s_15893_s_16279,10,,2,3,33861.416047206,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299242_b_26748_tn_0,,,radius_1207_s_16279_s_16275,11,,2,3,35793.8780153885,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299242_b_26748_tn_0,,,radius_1207_s_16275_s_15889,12,,2,3,36495.0840399713,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299242_b_26748_tn_0,,,radius_1207_s_15889_s_15889,13,,1,3,37321.48338979,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299243_b_26748_tn_0,,,radius_1207_s_16088_s_16089,1,,0,0,0,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299243_b_26748_tn_0,,,radius_1207_s_16089_s_759418,2,,0,0,1178.83712246948,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299243_b_26748_tn_0,,,radius_1207_s_759418_s_759420,3,,0,0,1969.86279603153,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299243_b_26748_tn_0,,,radius_1207_s_759420_s_16092,4,,0,0,2927.11341583294,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299243_b_26748_tn_0,,,radius_1207_s_16092_s_759419,5,,0,0,3543.01448403495,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299243_b_26748_tn_0,,,radius_1207_s_759419_s_16094,6,,0,0,5295.50711835856,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299243_b_26748_tn_0,,,radius_1207_s_16094_s_759425,7,,0,0,5812.69004042949,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299243_b_26748_tn_0,,,radius_1207_s_759425_s_771261,8,,0,0,6573.62375387002,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299243_b_26748_tn_0,,,radius_1207_s_771261_s_759417,9,,0,0,7491.45929283844,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299243_b_26748_tn_0,,,radius_1207_s_759417_s_16097,10,,0,0,8308.95264594237,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299243_b_26748_tn_0,,,radius_1207_s_16097_s_16070,11,,0,0,9477.65606835453,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299243_b_26748_tn_0,,,radius_1207_s_16070_s_16071,12,,0,0,10328.6932386946,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299243_b_26748_tn_0,,,radius_1207_s_16071_s_16076,13,,0,0,11858.7112708948,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299243_b_26748_tn_0,,,radius_1207_s_16076_s_16075,14,,0,0,12854.788768735,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299243_b_26748_tn_0,,,radius_1207_s_16075_s_16074,15,,0,0,13521.4705782649,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299243_b_26748_tn_0,,,radius_1207_s_16074_s_16077,16,,0,0,14037.794295026,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299243_b_26748_tn_0,,,radius_1207_s_16077_s_16077,17,,0,0,14969.68155963,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299244_b_26748_tn_0,,,radius_1207_s_15889_s_16045,1,,0,0,0,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299244_b_26748_tn_0,,,radius_1207_s_16045_s_15942,2,,2,3,1709.19902985184,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299244_b_26748_tn_0,,,radius_1207_s_15942_s_781974,3,,0,0,3887.61490675644,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299244_b_26748_tn_0,,,radius_1207_s_781974_s_15962,4,,0,0,17321.7379087203,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299244_b_26748_tn_0,,,radius_1207_s_15962_s_15944,5,,2,3,23800.6169789249,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299244_b_26748_tn_0,,,radius_1207_s_15944_s_15958,6,,2,3,25852.6322194589,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299244_b_26748_tn_0,,,radius_1207_s_15958_s_15947,7,,2,3,29176.3686491574,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299244_b_26748_tn_0,,,radius_1207_s_15947_s_15946,8,,0,0,32106.8180713215,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299244_b_26748_tn_0,,,radius_1207_s_15946_s_22289,9,,2,3,32708.1019769077,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299244_b_26748_tn_0,,,radius_1207_s_22289_s_2456757,10,,0,0,32903.3688034016,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299244_b_26748_tn_0,,,radius_1207_s_2456757_s_15950,11,,0,0,34982.5332643694,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299244_b_26748_tn_0,,,radius_1207_s_15950_s_2456756,12,,2,3,42709.6374459764,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299244_b_26748_tn_0,,,radius_1207_s_2456756_s_2456756,13,,0,0,47675.32249262,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299245_b_26748_tn_0,,,radius_1207_s_22284_s_22286,1,,0,0,0,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299245_b_26748_tn_0,,,radius_1207_s_22286_s_22283,2,,0,0,580.898703890139,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299245_b_26748_tn_0,,,radius_1207_s_22283_s_22285,3,,0,0,1485.07965471661,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299245_b_26748_tn_0,,,radius_1207_s_22285_s_16278,4,,0,0,2389.72540975272,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299245_b_26748_tn_0,,,radius_1207_s_16278_s_15894,5,,2,3,17038.9069974779,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299245_b_26748_tn_0,,,radius_1207_s_15894_s_15882,6,,0,0,20982.6560544094,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299245_b_26748_tn_0,,,radius_1207_s_15882_s_15883,7,,0,0,22817.3023837179,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299245_b_26748_tn_0,,,radius_1207_s_15883_s_16276,8,,0,0,23629.5651817964,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299245_b_26748_tn_0,,,radius_1207_s_16276_s_15885,9,,0,0,23872.2297549312,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299245_b_26748_tn_0,,,radius_1207_s_15885_s_15893,10,,0,0,24379.2249071533,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299245_b_26748_tn_0,,,radius_1207_s_15893_s_16279,11,,0,0,34442.5528158479,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299245_b_26748_tn_0,,,radius_1207_s_16279_s_16275,12,,0,0,36375.0147840304,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299245_b_26748_tn_0,,,radius_1207_s_16275_s_15889,13,,0,0,37076.2208086132,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299245_b_26748_tn_0,,,radius_1207_s_15889_s_2456760,14,,0,0,37902.6201584632,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299245_b_26748_tn_0,,,radius_1207_s_2456760_s_2455449,15,,2,3,39685.7670273536,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299245_b_26748_tn_0,,,radius_1207_s_2455449_s_29681,16,,0,0,40220.1382077686,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299245_b_26748_tn_0,,,radius_1207_s_29681_s_29681,17,,0,0,41071.73219809,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299246_b_26748_tn_0,,,radius_1207_s_16215_s_16183,1,,0,0,0,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299246_b_26748_tn_0,,,radius_1207_s_16183_s_16184,2,,2,3,6520.50975296256,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299246_b_26748_tn_0,,,radius_1207_s_16184_s_16079,3,,2,3,11084.1884902035,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299246_b_26748_tn_0,,,radius_1207_s_16079_s_16080,4,,0,0,13248.1451958165,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299246_b_26748_tn_0,,,radius_1207_s_16080_s_16072,5,,0,0,13848.9661178394,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299246_b_26748_tn_0,,,radius_1207_s_16072_s_2455436,6,,2,3,14751.3733239552,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299246_b_26748_tn_0,,,radius_1207_s_2455436_s_16082,7,,2,3,15308.1661406291,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299246_b_26748_tn_0,,,radius_1207_s_16082_s_16084,8,,2,3,16234.3285942847,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299246_b_26748_tn_0,,,radius_1207_s_16084_s_16094,9,,0,0,18211.6778251583,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299246_b_26748_tn_0,,,radius_1207_s_16094_s_16185,10,,0,0,19094.6173058532,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299246_b_26748_tn_0,,,radius_1207_s_16185_s_16087,11,,2,3,21172.5800003265,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299246_b_26748_tn_0,,,radius_1207_s_16087_s_16088,12,,0,0,23002.407245633,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299246_b_26748_tn_0,,,radius_1207_s_16088_s_16189,13,,2,3,24179.6801355902,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299246_b_26748_tn_0,,,radius_1207_s_16189_s_16188,14,,2,3,28606.3410393564,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299246_b_26748_tn_0,,,radius_1207_s_16188_s_16187,15,,2,3,30129.6302310783,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299246_b_26748_tn_0,,,radius_1207_s_16187_s_16211,16,,2,3,33440.6907899205,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299246_b_26748_tn_0,,,radius_1207_s_16211_s_16192,17,,0,0,37700.8872076018,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299246_b_26748_tn_0,,,radius_1207_s_16192_s_16191,18,,2,3,38906.748270368,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299246_b_26748_tn_0,,,radius_1207_s_16191_s_16025,19,,2,3,49088.9678458823,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299246_b_26748_tn_0,,,radius_1207_s_16025_s_2455449,20,,2,3,53901.3863038524,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299246_b_26748_tn_0,,,radius_1207_s_2455449_s_29681,21,,2,3,57238.9951219599,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299246_b_26748_tn_0,,,radius_1207_s_29681_s_16194,22,,2,3,58090.5891122978,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299246_b_26748_tn_0,,,radius_1207_s_16194_s_15889,23,,0,0,59968.1070283351,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299246_b_26748_tn_0,,,radius_1207_s_15889_s_15889,24,,0,0,60683.65713019,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299247_b_26748_tn_0,,,radius_1207_s_15889_s_16200,1,,0,1,0,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299247_b_26748_tn_0,,,radius_1207_s_16200_s_2456760,2,,2,3,390.124447144401,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299247_b_26748_tn_0,,,radius_1207_s_2456760_s_2455449,3,,2,3,1942.71023257005,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299247_b_26748_tn_0,,,radius_1207_s_2455449_s_29681,4,,0,0,2422.62267762865,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299247_b_26748_tn_0,,,radius_1207_s_29681_s_16196,5,,0,0,3274.21666796654,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299247_b_26748_tn_0,,,radius_1207_s_16196_s_781958,6,,2,3,4494.33427254792,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299247_b_26748_tn_0,,,radius_1207_s_781958_s_16068,7,,2,3,6021.13767832062,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299247_b_26748_tn_0,,,radius_1207_s_16068_s_16201,8,,2,3,6747.70023050663,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299247_b_26748_tn_0,,,radius_1207_s_16201_s_16197,9,,2,3,11779.7874851007,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299247_b_26748_tn_0,,,radius_1207_s_16197_s_16202,10,,2,3,21615.370013261,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299247_b_26748_tn_0,,,radius_1207_s_16202_s_16203,11,,0,0,23050.8716339068,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299247_b_26748_tn_0,,,radius_1207_s_16203_s_16195,12,,0,0,27401.2515905677,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299247_b_26748_tn_0,,,radius_1207_s_16195_s_16204,13,,0,0,30736.7981805553,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299247_b_26748_tn_0,,,radius_1207_s_16204_s_16205,14,,2,3,32196.0237533648,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299247_b_26748_tn_0,,,radius_1207_s_16205_s_16089,15,,2,3,36386.2354670862,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299247_b_26748_tn_0,,,radius_1207_s_16089_s_781959,16,,0,0,37705.6185146785,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299247_b_26748_tn_0,,,radius_1207_s_781959_s_16094,17,,2,3,39746.7124844555,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299247_b_26748_tn_0,,,radius_1207_s_16094_s_16095,18,,0,0,41627.503762023,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299247_b_26748_tn_0,,,radius_1207_s_16095_s_2456766,19,,0,0,42598.7096685439,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299247_b_26748_tn_0,,,radius_1207_s_2456766_s_16071,20,,0,0,45092.4976364488,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299247_b_26748_tn_0,,,radius_1207_s_16071_s_16212,21,,0,0,46524.7014916334,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299247_b_26748_tn_0,,,radius_1207_s_16212_s_16079,22,,2,3,48100.9316569625,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299247_b_26748_tn_0,,,radius_1207_s_16079_s_16080,23,,0,0,49207.6451476667,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299247_b_26748_tn_0,,,radius_1207_s_16080_s_16210,24,,0,0,49808.5381113633,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299247_b_26748_tn_0,,,radius_1207_s_16210_s_16214,25,,2,3,51569.6459203115,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299247_b_26748_tn_0,,,radius_1207_s_16214_s_16215,26,,2,3,60177.3071557854,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299247_b_26748_tn_0,,,radius_1207_s_16215_s_16215,27,,1,0,63973.65413202,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299248_b_26748_tn_0,,,radius_1207_s_15889_s_15888,1,,0,0,0,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299248_b_26748_tn_0,,,radius_1207_s_15888_s_15887,2,,0,0,1317.07488036808,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299248_b_26748_tn_0,,,radius_1207_s_15887_s_16060,3,,0,0,2009.36822490283,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299248_b_26748_tn_0,,,radius_1207_s_16060_s_15892,4,,0,0,3915.44513711639,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299248_b_26748_tn_0,,,radius_1207_s_15892_s_15884,5,,0,0,13988.7032003241,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299248_b_26748_tn_0,,,radius_1207_s_15884_s_15882,6,,0,0,14497.8576948654,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299248_b_26748_tn_0,,,radius_1207_s_15882_s_15881,7,,0,0,15033.0163136232,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299248_b_26748_tn_0,,,radius_1207_s_15881_s_16278,8,,0,0,17044.3564195229,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299248_b_26748_tn_0,,,radius_1207_s_16278_s_22287,9,,2,3,20972.2366658974,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299248_b_26748_tn_0,,,radius_1207_s_22287_s_22287,10,,0,0,35397.5902362,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299249_b_26748_tn_0,,,radius_1207_s_15889_s_15888,1,,0,0,0,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299249_b_26748_tn_0,,,radius_1207_s_15888_s_15887,2,,0,0,1317.07488036808,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299249_b_26748_tn_0,,,radius_1207_s_15887_s_16060,3,,0,0,2009.36822490283,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299249_b_26748_tn_0,,,radius_1207_s_16060_s_15892,4,,0,0,3915.44513711639,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299249_b_26748_tn_0,,,radius_1207_s_15892_s_15884,5,,0,0,13988.7032003241,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299249_b_26748_tn_0,,,radius_1207_s_15884_s_15882,6,,0,0,14497.8576948654,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299249_b_26748_tn_0,,,radius_1207_s_15882_s_15881,7,,0,0,15033.0163136232,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299249_b_26748_tn_0,,,radius_1207_s_15881_s_16278,8,,0,0,17044.3564195229,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299249_b_26748_tn_0,,,radius_1207_s_16278_s_22287,9,,2,3,20972.2366658974,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299249_b_26748_tn_0,,,radius_1207_s_22287_s_22287,10,,0,0,35397.5902362,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299250_b_26748_tn_0,,,radius_1207_s_15889_s_16200,1,,0,1,0,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299250_b_26748_tn_0,,,radius_1207_s_16200_s_2456760,2,,2,3,390.124447144401,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299250_b_26748_tn_0,,,radius_1207_s_2456760_s_16196,3,,2,3,1942.71023257005,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299250_b_26748_tn_0,,,radius_1207_s_16196_s_781958,4,,2,3,3244.96255176137,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299250_b_26748_tn_0,,,radius_1207_s_781958_s_16068,5,,2,3,4770.06007054754,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299250_b_26748_tn_0,,,radius_1207_s_16068_s_16201,6,,2,3,5496.62262273355,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299250_b_26748_tn_0,,,radius_1207_s_16201_s_16197,7,,2,3,10528.7098773277,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299250_b_26748_tn_0,,,radius_1207_s_16197_s_16202,8,,2,3,20364.2924054879,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299250_b_26748_tn_0,,,radius_1207_s_16202_s_16203,9,,0,0,21799.7940261338,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299250_b_26748_tn_0,,,radius_1207_s_16203_s_16195,10,,0,0,26150.1739827946,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299250_b_26748_tn_0,,,radius_1207_s_16195_s_16204,11,,2,3,29485.7205727822,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299250_b_26748_tn_0,,,radius_1207_s_16204_s_16205,12,,2,3,30944.9461455917,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299250_b_26748_tn_0,,,radius_1207_s_16205_s_16089,13,,2,3,35135.1578593131,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299250_b_26748_tn_0,,,radius_1207_s_16089_s_781959,14,,0,0,36454.5409069054,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299250_b_26748_tn_0,,,radius_1207_s_781959_s_16094,15,,2,3,38495.6348766825,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299250_b_26748_tn_0,,,radius_1207_s_16094_s_16095,16,,2,3,40376.42615425,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299250_b_26748_tn_0,,,radius_1207_s_16095_s_16212,17,,2,3,41347.6320607708,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299250_b_26748_tn_0,,,radius_1207_s_16212_s_16079,18,,2,3,44659.2176954334,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299250_b_26748_tn_0,,,radius_1207_s_16079_s_16080,19,,2,3,45767.8807060955,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299250_b_26748_tn_0,,,radius_1207_s_16080_s_16210,20,,0,0,46368.7736697921,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299250_b_26748_tn_0,,,radius_1207_s_16210_s_16214,21,,2,3,48129.8814787402,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299250_b_26748_tn_0,,,radius_1207_s_16214_s_16215,22,,0,0,56737.5427142141,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299250_b_26748_tn_0,,,radius_1207_s_16215_s_16215,23,,1,0,60533.88969042,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299251_b_26748_tn_0,,,radius_1207_s_2456756_s_781972,1,,0,0,0,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299251_b_26748_tn_0,,,radius_1207_s_781972_s_15954,2,,2,3,4892.98593754999,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299251_b_26748_tn_0,,,radius_1207_s_15954_s_2456757,3,,0,0,9163.8842134249,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299251_b_26748_tn_0,,,radius_1207_s_2456757_s_15970,4,,2,3,12346.7152514911,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299251_b_26748_tn_0,,,radius_1207_s_15970_s_15944,5,,2,3,14386.1710952224,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299251_b_26748_tn_0,,,radius_1207_s_15944_s_15958,6,,2,3,14693.4670718337,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299251_b_26748_tn_0,,,radius_1207_s_15958_s_15947,7,,2,3,18015.6961187487,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299251_b_26748_tn_0,,,radius_1207_s_15947_s_2456758,8,,0,0,20946.1455409128,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299251_b_26748_tn_0,,,radius_1207_s_2456758_s_15962,9,,2,3,21488.8546393623,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299251_b_26748_tn_0,,,radius_1207_s_15962_s_15969,10,,2,3,23588.9757480457,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299251_b_26748_tn_0,,,radius_1207_s_15969_s_15972,11,,2,3,26224.689856775,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299251_b_26748_tn_0,,,radius_1207_s_15972_s_15965,12,,0,0,30092.112122092,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299251_b_26748_tn_0,,,radius_1207_s_15965_s_16047,13,,2,3,36213.8474001787,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299251_b_26748_tn_0,,,radius_1207_s_16047_s_15967,14,,2,3,42473.6591655056,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299251_b_26748_tn_0,,,radius_1207_s_15967_s_15889,15,,0,0,43679.0271092872,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299251_b_26748_tn_0,,,radius_1207_s_15889_s_15889,16,,0,0,46637.37079181,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299254_b_26748_tn_0,,,radius_1207_s_15889_s_16045,1,,0,0,0,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299254_b_26748_tn_0,,,radius_1207_s_16045_s_15942,2,,2,3,1709.19902985184,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299254_b_26748_tn_0,,,radius_1207_s_15942_s_781974,3,,0,0,3887.61490675644,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299254_b_26748_tn_0,,,radius_1207_s_781974_s_15962,4,,0,0,17321.7379087203,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299254_b_26748_tn_0,,,radius_1207_s_15962_s_15944,5,,2,3,23800.6169789249,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299254_b_26748_tn_0,,,radius_1207_s_15944_s_15958,6,,2,3,25852.6322194589,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299254_b_26748_tn_0,,,radius_1207_s_15958_s_15947,7,,2,3,29176.3686491574,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299254_b_26748_tn_0,,,radius_1207_s_15947_s_15946,8,,0,0,32106.8180713215,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299254_b_26748_tn_0,,,radius_1207_s_15946_s_22289,9,,2,3,32708.1019769077,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299254_b_26748_tn_0,,,radius_1207_s_22289_s_2456757,10,,0,0,32903.3688034016,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299254_b_26748_tn_0,,,radius_1207_s_2456757_s_15950,11,,0,0,34982.5332643694,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299254_b_26748_tn_0,,,radius_1207_s_15950_s_2456756,12,,2,3,42709.6374459764,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299254_b_26748_tn_0,,,radius_1207_s_2456756_s_2456756,13,,0,0,47675.32249262,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299255_b_26748_tn_0,,,radius_1207_s_16088_s_16089,1,,0,0,0,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299255_b_26748_tn_0,,,radius_1207_s_16089_s_759418,2,,0,0,1178.83712246948,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299255_b_26748_tn_0,,,radius_1207_s_759418_s_759420,3,,0,0,1969.86279603153,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299255_b_26748_tn_0,,,radius_1207_s_759420_s_16092,4,,0,0,2927.11341583294,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299255_b_26748_tn_0,,,radius_1207_s_16092_s_759419,5,,0,0,3543.01448403495,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299255_b_26748_tn_0,,,radius_1207_s_759419_s_16094,6,,0,0,5295.50711835856,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299255_b_26748_tn_0,,,radius_1207_s_16094_s_759425,7,,0,0,5812.69004042949,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299255_b_26748_tn_0,,,radius_1207_s_759425_s_771261,8,,0,0,6573.62375387002,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299255_b_26748_tn_0,,,radius_1207_s_771261_s_759417,9,,0,0,7491.45929283844,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299255_b_26748_tn_0,,,radius_1207_s_759417_s_16097,10,,0,0,8308.95264594237,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299255_b_26748_tn_0,,,radius_1207_s_16097_s_16070,11,,0,0,9477.65606835453,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299255_b_26748_tn_0,,,radius_1207_s_16070_s_16071,12,,0,0,10328.6932386946,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299255_b_26748_tn_0,,,radius_1207_s_16071_s_16076,13,,0,0,11858.7112708948,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299255_b_26748_tn_0,,,radius_1207_s_16076_s_16075,14,,0,0,12854.788768735,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299255_b_26748_tn_0,,,radius_1207_s_16075_s_16074,15,,0,0,13521.4705782649,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299255_b_26748_tn_0,,,radius_1207_s_16074_s_16077,16,,0,0,14037.794295026,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299255_b_26748_tn_0,,,radius_1207_s_16077_s_16077,17,,0,0,14969.68155963,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299256_b_26748_tn_0,,,radius_1207_s_2456756_s_781972,1,,0,0,0,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299256_b_26748_tn_0,,,radius_1207_s_781972_s_15954,2,,2,3,4892.98593754999,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299256_b_26748_tn_0,,,radius_1207_s_15954_s_2456757,3,,0,0,9163.8842134249,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299256_b_26748_tn_0,,,radius_1207_s_2456757_s_15970,4,,2,3,12346.7152514911,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299256_b_26748_tn_0,,,radius_1207_s_15970_s_15944,5,,2,3,14386.1710952224,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299256_b_26748_tn_0,,,radius_1207_s_15944_s_15958,6,,2,3,14693.4670718337,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299256_b_26748_tn_0,,,radius_1207_s_15958_s_15947,7,,2,3,18015.6961187487,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299256_b_26748_tn_0,,,radius_1207_s_15947_s_2456758,8,,0,0,20946.1455409128,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299256_b_26748_tn_0,,,radius_1207_s_2456758_s_15962,9,,2,3,21488.8546393623,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299256_b_26748_tn_0,,,radius_1207_s_15962_s_15969,10,,2,3,23588.9757480457,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299256_b_26748_tn_0,,,radius_1207_s_15969_s_15972,11,,2,3,26224.689856775,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299256_b_26748_tn_0,,,radius_1207_s_15972_s_15965,12,,0,0,30092.112122092,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299256_b_26748_tn_0,,,radius_1207_s_15965_s_16047,13,,2,3,36213.8474001787,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299256_b_26748_tn_0,,,radius_1207_s_16047_s_15967,14,,2,3,42473.6591655056,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299256_b_26748_tn_0,,,radius_1207_s_15967_s_15889,15,,0,0,43679.0271092872,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299256_b_26748_tn_0,,,radius_1207_s_15889_s_15889,16,,0,0,46637.37079181,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299257_b_26748_tn_0,,,radius_1207_s_2456756_s_781972,1,,0,0,0,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299257_b_26748_tn_0,,,radius_1207_s_781972_s_15954,2,,2,3,4892.98593754999,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299257_b_26748_tn_0,,,radius_1207_s_15954_s_2456757,3,,0,0,9163.8842134249,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299257_b_26748_tn_0,,,radius_1207_s_2456757_s_15970,4,,2,3,12346.7152514911,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299257_b_26748_tn_0,,,radius_1207_s_15970_s_15944,5,,2,3,14386.1710952224,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299257_b_26748_tn_0,,,radius_1207_s_15944_s_15958,6,,2,3,14693.4670718337,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299257_b_26748_tn_0,,,radius_1207_s_15958_s_15947,7,,2,3,18015.6961187487,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299257_b_26748_tn_0,,,radius_1207_s_15947_s_2456758,8,,0,0,20946.1455409128,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299257_b_26748_tn_0,,,radius_1207_s_2456758_s_15962,9,,2,3,21488.8546393623,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299257_b_26748_tn_0,,,radius_1207_s_15962_s_15969,10,,2,3,23588.9757480457,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299257_b_26748_tn_0,,,radius_1207_s_15969_s_15972,11,,2,3,26224.689856775,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299257_b_26748_tn_0,,,radius_1207_s_15972_s_15965,12,,0,0,30092.112122092,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299257_b_26748_tn_0,,,radius_1207_s_15965_s_16047,13,,2,3,36213.8474001787,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299257_b_26748_tn_0,,,radius_1207_s_16047_s_15967,14,,2,3,42473.6591655056,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299257_b_26748_tn_0,,,radius_1207_s_15967_s_15889,15,,0,0,43679.0271092872,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299257_b_26748_tn_0,,,radius_1207_s_15889_s_15889,16,,0,0,46637.37079181,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299258_b_26748_tn_0,,,radius_1207_s_2456756_s_781972,1,,0,0,0,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299258_b_26748_tn_0,,,radius_1207_s_781972_s_15954,2,,2,3,4892.98593754999,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299258_b_26748_tn_0,,,radius_1207_s_15954_s_2456757,3,,0,0,9163.8842134249,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299258_b_26748_tn_0,,,radius_1207_s_2456757_s_15970,4,,2,3,12346.7152514911,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299258_b_26748_tn_0,,,radius_1207_s_15970_s_15944,5,,2,3,14386.1710952224,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299258_b_26748_tn_0,,,radius_1207_s_15944_s_15958,6,,2,3,14693.4670718337,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299258_b_26748_tn_0,,,radius_1207_s_15958_s_15947,7,,2,3,18015.6961187487,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299258_b_26748_tn_0,,,radius_1207_s_15947_s_2456758,8,,0,0,20946.1455409128,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299258_b_26748_tn_0,,,radius_1207_s_2456758_s_15962,9,,2,3,21488.8546393623,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299258_b_26748_tn_0,,,radius_1207_s_15962_s_15969,10,,2,3,23588.9757480457,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299258_b_26748_tn_0,,,radius_1207_s_15969_s_15972,11,,2,3,26224.689856775,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299258_b_26748_tn_0,,,radius_1207_s_15972_s_15965,12,,0,0,30092.112122092,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299258_b_26748_tn_0,,,radius_1207_s_15965_s_16047,13,,2,3,36213.8474001787,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299258_b_26748_tn_0,,,radius_1207_s_16047_s_15967,14,,2,3,42473.6591655056,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299258_b_26748_tn_0,,,radius_1207_s_15967_s_15889,15,,0,0,43679.0271092872,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299258_b_26748_tn_0,,,radius_1207_s_15889_s_15889,16,,0,0,46637.37079181,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 +t_299259_b_26748_tn_0,,,radius_1207_s_16094_s_759425,1,,0,0,0,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299259_b_26748_tn_0,,,radius_1207_s_759425_s_771261,2,,0,0,760.214931322142,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299259_b_26748_tn_0,,,radius_1207_s_771261_s_759417,3,,0,0,1678.05047029056,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299259_b_26748_tn_0,,,radius_1207_s_759417_s_16097,4,,0,0,2495.5438233945,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299259_b_26748_tn_0,,,radius_1207_s_16097_s_16070,5,,0,0,3664.24724580665,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299259_b_26748_tn_0,,,radius_1207_s_16070_s_16071,6,,0,0,4515.28441614668,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299259_b_26748_tn_0,,,radius_1207_s_16071_s_16076,7,,0,0,6045.30244834694,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299259_b_26748_tn_0,,,radius_1207_s_16076_s_16075,8,,0,0,7041.3799461871,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299259_b_26748_tn_0,,,radius_1207_s_16075_s_16074,9,,0,0,7708.06175571705,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299259_b_26748_tn_0,,,radius_1207_s_16074_s_16077,10,,0,0,8224.38547247812,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299259_b_26748_tn_0,,,radius_1207_s_16077_s_16077,11,,0,0,9156.27273709,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299260_b_26748_tn_0,,,radius_1207_s_15889_s_16200,1,,0,1,0,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299260_b_26748_tn_0,,,radius_1207_s_16200_s_2456760,2,,2,3,390.124447144401,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299260_b_26748_tn_0,,,radius_1207_s_2456760_s_2455449,3,,2,3,1942.71023257005,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299260_b_26748_tn_0,,,radius_1207_s_2455449_s_29681,4,,0,0,2422.62267762865,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299260_b_26748_tn_0,,,radius_1207_s_29681_s_16196,5,,0,0,3274.21666796654,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299260_b_26748_tn_0,,,radius_1207_s_16196_s_781958,6,,2,3,4494.33427254792,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299260_b_26748_tn_0,,,radius_1207_s_781958_s_16068,7,,2,3,6021.13767832062,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299260_b_26748_tn_0,,,radius_1207_s_16068_s_16201,8,,2,3,6747.70023050663,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299260_b_26748_tn_0,,,radius_1207_s_16201_s_16197,9,,2,3,11779.7874851007,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299260_b_26748_tn_0,,,radius_1207_s_16197_s_16202,10,,2,3,21615.370013261,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299260_b_26748_tn_0,,,radius_1207_s_16202_s_16203,11,,0,0,23050.8716339068,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299260_b_26748_tn_0,,,radius_1207_s_16203_s_16195,12,,2,3,27401.2515905677,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299260_b_26748_tn_0,,,radius_1207_s_16195_s_16204,13,,2,3,30736.7981805553,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299260_b_26748_tn_0,,,radius_1207_s_16204_s_16205,14,,2,3,32196.0237533648,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299260_b_26748_tn_0,,,radius_1207_s_16205_s_16089,15,,2,3,36386.2354670862,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299260_b_26748_tn_0,,,radius_1207_s_16089_s_781959,16,,2,3,37705.6185146785,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299260_b_26748_tn_0,,,radius_1207_s_781959_s_16094,17,,2,3,39746.7124844555,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299260_b_26748_tn_0,,,radius_1207_s_16094_s_16095,18,,0,0,41627.503762023,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299260_b_26748_tn_0,,,radius_1207_s_16095_s_16212,19,,2,3,42598.7096685439,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299260_b_26748_tn_0,,,radius_1207_s_16212_s_16079,20,,2,3,45910.2953032065,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299260_b_26748_tn_0,,,radius_1207_s_16079_s_16079,21,,0,0,47018.95831388,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299261_b_26748_tn_0,,,radius_1207_s_15889_s_16200,1,,0,1,0,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299261_b_26748_tn_0,,,radius_1207_s_16200_s_2456760,2,,0,0,390.124447144401,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299261_b_26748_tn_0,,,radius_1207_s_2456760_s_2455449,3,,2,3,1942.71023257005,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299261_b_26748_tn_0,,,radius_1207_s_2455449_s_29681,4,,0,0,2422.62267762865,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299261_b_26748_tn_0,,,radius_1207_s_29681_s_16196,5,,0,0,3274.21666796654,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299261_b_26748_tn_0,,,radius_1207_s_16196_s_781958,6,,2,3,4494.33427254792,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299261_b_26748_tn_0,,,radius_1207_s_781958_s_16068,7,,2,3,6021.13767832062,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299261_b_26748_tn_0,,,radius_1207_s_16068_s_16201,8,,2,3,6747.70023050663,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299261_b_26748_tn_0,,,radius_1207_s_16201_s_16197,9,,2,3,11779.7874851007,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299261_b_26748_tn_0,,,radius_1207_s_16197_s_16202,10,,2,3,21615.370013261,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299261_b_26748_tn_0,,,radius_1207_s_16202_s_16203,11,,0,0,23050.8716339068,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299261_b_26748_tn_0,,,radius_1207_s_16203_s_16195,12,,0,0,27401.2515905677,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299261_b_26748_tn_0,,,radius_1207_s_16195_s_16204,13,,0,0,30736.7981805553,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299261_b_26748_tn_0,,,radius_1207_s_16204_s_16205,14,,2,3,32196.0237533648,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299261_b_26748_tn_0,,,radius_1207_s_16205_s_16089,15,,2,3,36386.2354670862,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299261_b_26748_tn_0,,,radius_1207_s_16089_s_781959,16,,0,0,37705.6185146785,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299261_b_26748_tn_0,,,radius_1207_s_781959_s_16094,17,,2,3,39746.7124844555,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299261_b_26748_tn_0,,,radius_1207_s_16094_s_16095,18,,0,0,41627.503762023,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299261_b_26748_tn_0,,,radius_1207_s_16095_s_2456766,19,,0,0,42598.7096685439,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299261_b_26748_tn_0,,,radius_1207_s_2456766_s_16071,20,,0,0,45092.4976364488,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299261_b_26748_tn_0,,,radius_1207_s_16071_s_16212,21,,0,0,46524.7014916334,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299261_b_26748_tn_0,,,radius_1207_s_16212_s_16079,22,,2,3,48100.9316569625,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299261_b_26748_tn_0,,,radius_1207_s_16079_s_16080,23,,0,0,49207.6451476667,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299261_b_26748_tn_0,,,radius_1207_s_16080_s_16210,24,,0,0,49808.5381113633,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299261_b_26748_tn_0,,,radius_1207_s_16210_s_16214,25,,2,3,51569.6459203115,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299261_b_26748_tn_0,,,radius_1207_s_16214_s_16215,26,,0,0,60177.3071557854,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299261_b_26748_tn_0,,,radius_1207_s_16215_s_16215,27,,1,0,63973.65413202,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299262_b_26748_tn_0,,,radius_1207_s_16077_s_759421,1,,0,0,0,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299262_b_26748_tn_0,,,radius_1207_s_759421_s_16079,2,,0,0,1008.12935981895,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299262_b_26748_tn_0,,,radius_1207_s_16079_s_16080,3,,0,0,1646.05038257577,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299262_b_26748_tn_0,,,radius_1207_s_16080_s_16072,4,,0,0,2246.95996830662,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299262_b_26748_tn_0,,,radius_1207_s_16072_s_16081,5,,0,0,3149.36717442244,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299262_b_26748_tn_0,,,radius_1207_s_16081_s_16082,6,,0,0,3886.97801179446,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299262_b_26748_tn_0,,,radius_1207_s_16082_s_759422,7,,0,0,4637.00781068317,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299262_b_26748_tn_0,,,radius_1207_s_759422_s_759423,8,,3,2,6083.91068321656,0,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299262_b_26748_tn_0,,,radius_1207_s_759423_s_759423,9,,0,0,6685.31689049,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299263_b_26748_tn_0,,,radius_1207_s_16079_s_16080,1,,0,0,0,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299263_b_26748_tn_0,,,radius_1207_s_16080_s_16072,2,,0,0,599.788780807444,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299263_b_26748_tn_0,,,radius_1207_s_16072_s_2455436,3,,2,3,1502.19598692326,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299263_b_26748_tn_0,,,radius_1207_s_2455436_s_16082,4,,2,3,2058.98880359718,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299263_b_26748_tn_0,,,radius_1207_s_16082_s_16084,5,,2,3,2985.15125725273,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299263_b_26748_tn_0,,,radius_1207_s_16084_s_16185,6,,0,0,4962.50048812641,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299263_b_26748_tn_0,,,radius_1207_s_16185_s_16087,7,,2,3,7330.56322187532,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299263_b_26748_tn_0,,,radius_1207_s_16087_s_16088,8,,2,3,9163.36884051011,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299263_b_26748_tn_0,,,radius_1207_s_16088_s_16189,9,,2,3,10340.6417304673,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299263_b_26748_tn_0,,,radius_1207_s_16189_s_16188,10,,2,3,14767.3026342335,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299263_b_26748_tn_0,,,radius_1207_s_16188_s_16187,11,,2,3,16290.5918259553,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299263_b_26748_tn_0,,,radius_1207_s_16187_s_16211,12,,2,3,19601.6523847976,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299263_b_26748_tn_0,,,radius_1207_s_16211_s_16192,13,,0,0,23861.8488024789,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299263_b_26748_tn_0,,,radius_1207_s_16192_s_16190,14,,2,3,25067.7098652451,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299263_b_26748_tn_0,,,radius_1207_s_16190_s_16191,15,,2,3,33125.5750038428,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299263_b_26748_tn_0,,,radius_1207_s_16191_s_16025,16,,2,3,35457.8592442364,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299263_b_26748_tn_0,,,radius_1207_s_16025_s_2455449,17,,2,3,40270.2777022065,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299263_b_26748_tn_0,,,radius_1207_s_2455449_s_29681,18,,0,0,43607.8865203141,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299263_b_26748_tn_0,,,radius_1207_s_29681_s_16194,19,,0,0,44459.480510652,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299263_b_26748_tn_0,,,radius_1207_s_16194_s_15889,20,,2,3,46336.9984266893,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299263_b_26748_tn_0,,,radius_1207_s_15889_s_15889,21,,0,0,47052.54852858,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299264_b_26748_tn_0,,,radius_1207_s_16069_s_16024,1,,0,0,0,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299264_b_26748_tn_0,,,radius_1207_s_16024_s_16025,2,,0,0,775.596266212284,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299264_b_26748_tn_0,,,radius_1207_s_16025_s_16026,3,,0,0,1807.22190535612,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299264_b_26748_tn_0,,,radius_1207_s_16026_s_2483495,4,,0,0,2766.28482550726,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299264_b_26748_tn_0,,,radius_1207_s_2483495_s_29681,5,,0,0,5416.75044306174,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299264_b_26748_tn_0,,,radius_1207_s_29681_s_16032,6,,0,0,6436.45201007476,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299264_b_26748_tn_0,,,radius_1207_s_16032_s_2438933,7,,0,0,7576.71452995217,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299264_b_26748_tn_0,,,radius_1207_s_2438933_s_16031,8,,0,0,8240.84195654157,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299264_b_26748_tn_0,,,radius_1207_s_16031_s_16030,9,,0,0,8527.62288862872,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299264_b_26748_tn_0,,,radius_1207_s_16030_s_16033,10,,0,0,8932.84679637186,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299264_b_26748_tn_0,,,radius_1207_s_16033_s_16034,11,,0,0,9165.13404331625,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299264_b_26748_tn_0,,,radius_1207_s_16034_s_15889,12,,0,0,9628.59060260394,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299264_b_26748_tn_0,,,radius_1207_s_15889_s_16039,13,,0,0,10510.9386855591,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299264_b_26748_tn_0,,,radius_1207_s_16039_s_16040,14,,0,0,11686.4154079233,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299264_b_26748_tn_0,,,radius_1207_s_16040_s_16042,15,,0,0,12047.7835753043,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299264_b_26748_tn_0,,,radius_1207_s_16042_s_16043,16,,0,0,12324.4604601439,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299264_b_26748_tn_0,,,radius_1207_s_16043_s_16044,17,,0,0,12526.5458089135,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299264_b_26748_tn_0,,,radius_1207_s_16044_s_16045,18,,0,0,12886.5424727922,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299264_b_26748_tn_0,,,radius_1207_s_16045_s_15942,19,,0,0,13106.2063391676,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299264_b_26748_tn_0,,,radius_1207_s_15942_s_16048,20,,0,0,15282.8820371869,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299264_b_26748_tn_0,,,radius_1207_s_16048_s_2438934,21,,2,3,17060.1720314054,0,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299264_b_26748_tn_0,,,radius_1207_s_2438934_s_16049,22,,0,0,18604.0056042532,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299264_b_26748_tn_0,,,radius_1207_s_16049_s_16050,23,,0,0,19098.7301834617,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299264_b_26748_tn_0,,,radius_1207_s_16050_s_16051,24,,0,0,19388.6880759922,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299264_b_26748_tn_0,,,radius_1207_s_16051_s_16052,25,,0,0,20425.6382579853,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299264_b_26748_tn_0,,,radius_1207_s_16052_s_16053,26,,0,0,20752.5347065814,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299264_b_26748_tn_0,,,radius_1207_s_16053_s_833259,27,,0,0,21230.9536762786,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299264_b_26748_tn_0,,,radius_1207_s_833259_s_16275,28,,0,0,23127.0336395412,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299264_b_26748_tn_0,,,radius_1207_s_16275_s_16055,29,,0,0,23551.6916242021,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299264_b_26748_tn_0,,,radius_1207_s_16055_s_16057,30,,0,0,23808.8722434897,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299264_b_26748_tn_0,,,radius_1207_s_16057_s_16058,31,,0,0,24487.418244042,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299264_b_26748_tn_0,,,radius_1207_s_16058_s_16059,32,,0,0,24680.6102514857,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299264_b_26748_tn_0,,,radius_1207_s_16059_s_16060,33,,0,0,25614.1591340582,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299264_b_26748_tn_0,,,radius_1207_s_16060_s_16061,34,,0,0,26256.131709164,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299264_b_26748_tn_0,,,radius_1207_s_16061_s_16062,35,,0,0,27180.643659028,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299264_b_26748_tn_0,,,radius_1207_s_16062_s_16063,36,,0,0,27686.863698439,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299264_b_26748_tn_0,,,radius_1207_s_16063_s_15890,37,,0,0,28259.1890347633,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299264_b_26748_tn_0,,,radius_1207_s_15890_s_2438932,38,,0,0,28886.6228332024,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299264_b_26748_tn_0,,,radius_1207_s_2438932_s_16065,39,,2,3,29619.901749005,0,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299264_b_26748_tn_0,,,radius_1207_s_16065_s_2483495,40,,0,0,30254.2525223819,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299264_b_26748_tn_0,,,radius_1207_s_2483495_s_16066,41,,2,3,30838.8763853997,0,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299264_b_26748_tn_0,,,radius_1207_s_16066_s_16068,42,,0,0,32312.2465968761,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299264_b_26748_tn_0,,,radius_1207_s_16068_s_16069,43,,0,0,34898.4147967777,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299264_b_26748_tn_0,,,radius_1207_s_16069_s_16069,44,,0,0,36360.0641114,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299265_b_26748_tn_0,,,radius_1207_s_16069_s_16024,1,,0,0,0,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299265_b_26748_tn_0,,,radius_1207_s_16024_s_16025,2,,0,0,775.596266212284,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299265_b_26748_tn_0,,,radius_1207_s_16025_s_16026,3,,0,0,1807.22190535612,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299265_b_26748_tn_0,,,radius_1207_s_16026_s_2483495,4,,0,0,2766.28482550726,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299265_b_26748_tn_0,,,radius_1207_s_2483495_s_29681,5,,0,0,5416.75044306174,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299265_b_26748_tn_0,,,radius_1207_s_29681_s_16032,6,,0,0,6436.45201007476,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299265_b_26748_tn_0,,,radius_1207_s_16032_s_2438933,7,,0,0,7576.71452995217,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299265_b_26748_tn_0,,,radius_1207_s_2438933_s_16031,8,,0,0,8240.84195654157,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299265_b_26748_tn_0,,,radius_1207_s_16031_s_16030,9,,0,0,8527.62288862872,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299265_b_26748_tn_0,,,radius_1207_s_16030_s_16033,10,,0,0,8932.84679637186,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299265_b_26748_tn_0,,,radius_1207_s_16033_s_16034,11,,0,0,9165.13404331625,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299265_b_26748_tn_0,,,radius_1207_s_16034_s_15889,12,,0,0,9628.59060260394,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299265_b_26748_tn_0,,,radius_1207_s_15889_s_15889,13,,0,0,10510.93868561,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299266_b_26748_tn_0,,,radius_1207_s_16088_s_16089,1,,0,0,0,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299266_b_26748_tn_0,,,radius_1207_s_16089_s_759418,2,,0,0,1178.83712246948,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299266_b_26748_tn_0,,,radius_1207_s_759418_s_759420,3,,0,0,1969.86279603153,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299266_b_26748_tn_0,,,radius_1207_s_759420_s_16092,4,,0,0,2927.11341583294,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299266_b_26748_tn_0,,,radius_1207_s_16092_s_759419,5,,0,0,3543.01448403495,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299266_b_26748_tn_0,,,radius_1207_s_759419_s_16094,6,,0,0,5295.50711835856,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299266_b_26748_tn_0,,,radius_1207_s_16094_s_759425,7,,0,0,5812.69004042949,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299266_b_26748_tn_0,,,radius_1207_s_759425_s_771261,8,,0,0,6573.62375387002,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299266_b_26748_tn_0,,,radius_1207_s_771261_s_759417,9,,0,0,7491.45929283844,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299266_b_26748_tn_0,,,radius_1207_s_759417_s_16097,10,,0,0,8308.95264594237,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299266_b_26748_tn_0,,,radius_1207_s_16097_s_16070,11,,0,0,9477.65606835453,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299266_b_26748_tn_0,,,radius_1207_s_16070_s_16071,12,,0,0,10328.6932386946,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299266_b_26748_tn_0,,,radius_1207_s_16071_s_16076,13,,0,0,11858.7112708948,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299266_b_26748_tn_0,,,radius_1207_s_16076_s_16075,14,,0,0,12854.788768735,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299266_b_26748_tn_0,,,radius_1207_s_16075_s_16074,15,,0,0,13521.4705782649,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299266_b_26748_tn_0,,,radius_1207_s_16074_s_16077,16,,0,0,14037.794295026,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299266_b_26748_tn_0,,,radius_1207_s_16077_s_16077,17,,0,0,14969.68155963,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299267_b_26748_tn_0,,,radius_1207_s_15889_s_15888,1,,0,0,0,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299267_b_26748_tn_0,,,radius_1207_s_15888_s_15887,2,,0,0,1317.07488036808,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299267_b_26748_tn_0,,,radius_1207_s_15887_s_16060,3,,0,0,2009.36822490283,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299267_b_26748_tn_0,,,radius_1207_s_16060_s_15892,4,,0,0,3915.44513711639,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299267_b_26748_tn_0,,,radius_1207_s_15892_s_15884,5,,0,0,13988.7032003241,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299267_b_26748_tn_0,,,radius_1207_s_15884_s_15882,6,,0,0,14497.8576948654,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299267_b_26748_tn_0,,,radius_1207_s_15882_s_15881,7,,0,0,15033.0163136232,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299267_b_26748_tn_0,,,radius_1207_s_15881_s_16278,8,,0,0,17044.3564195229,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299267_b_26748_tn_0,,,radius_1207_s_16278_s_22287,9,,2,3,20972.2366658974,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299267_b_26748_tn_0,,,radius_1207_s_22287_s_22284,10,,0,0,35397.5902362735,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299267_b_26748_tn_0,,,radius_1207_s_22284_s_22286,11,,2,3,36898.7611236308,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299267_b_26748_tn_0,,,radius_1207_s_22286_s_22283,12,,2,3,37480.2569210987,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299267_b_26748_tn_0,,,radius_1207_s_22283_s_22283,13,,2,3,38384.43787187,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299268_b_26748_tn_0,,,radius_1207_s_15889_s_15888,1,,0,0,0,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299268_b_26748_tn_0,,,radius_1207_s_15888_s_15887,2,,0,0,1317.07488036808,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299268_b_26748_tn_0,,,radius_1207_s_15887_s_16060,3,,0,0,2009.36822490283,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299268_b_26748_tn_0,,,radius_1207_s_16060_s_15892,4,,0,0,3915.44513711639,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299268_b_26748_tn_0,,,radius_1207_s_15892_s_15884,5,,0,0,13988.7032003241,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299268_b_26748_tn_0,,,radius_1207_s_15884_s_15882,6,,0,0,14497.8576948654,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299268_b_26748_tn_0,,,radius_1207_s_15882_s_15881,7,,0,0,15033.0163136232,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299268_b_26748_tn_0,,,radius_1207_s_15881_s_16278,8,,0,0,17044.3564195229,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299268_b_26748_tn_0,,,radius_1207_s_16278_s_22287,9,,2,3,20972.2366658974,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299268_b_26748_tn_0,,,radius_1207_s_22287_s_22287,10,,0,0,35397.5902362,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299269_b_26748_tn_0,,,radius_1207_s_16088_s_16089,1,,0,0,0,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299269_b_26748_tn_0,,,radius_1207_s_16089_s_759418,2,,0,0,1178.83712246948,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299269_b_26748_tn_0,,,radius_1207_s_759418_s_759420,3,,0,0,1969.86279603153,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299269_b_26748_tn_0,,,radius_1207_s_759420_s_16092,4,,0,0,2927.11341583294,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299269_b_26748_tn_0,,,radius_1207_s_16092_s_759419,5,,0,0,3543.01448403495,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299269_b_26748_tn_0,,,radius_1207_s_759419_s_16094,6,,0,0,5295.50711835856,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299269_b_26748_tn_0,,,radius_1207_s_16094_s_759425,7,,0,0,5812.69004042949,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299269_b_26748_tn_0,,,radius_1207_s_759425_s_771261,8,,0,0,6573.62375387002,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299269_b_26748_tn_0,,,radius_1207_s_771261_s_759417,9,,0,0,7491.45929283844,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299269_b_26748_tn_0,,,radius_1207_s_759417_s_16097,10,,0,0,8308.95264594237,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299269_b_26748_tn_0,,,radius_1207_s_16097_s_16070,11,,0,0,9477.65606835453,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299269_b_26748_tn_0,,,radius_1207_s_16070_s_16071,12,,0,0,10328.6932386946,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299269_b_26748_tn_0,,,radius_1207_s_16071_s_16076,13,,0,0,11858.7112708948,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299269_b_26748_tn_0,,,radius_1207_s_16076_s_16075,14,,0,0,12854.788768735,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299269_b_26748_tn_0,,,radius_1207_s_16075_s_16074,15,,0,0,13521.4705782649,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299269_b_26748_tn_0,,,radius_1207_s_16074_s_16077,16,,0,0,14037.794295026,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299269_b_26748_tn_0,,,radius_1207_s_16077_s_16077,17,,0,0,14969.68155963,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299270_b_26748_tn_0,,,radius_1207_s_16088_s_16089,1,,0,0,0,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299270_b_26748_tn_0,,,radius_1207_s_16089_s_759418,2,,0,0,1178.83712246948,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299270_b_26748_tn_0,,,radius_1207_s_759418_s_759420,3,,0,0,1969.86279603153,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299270_b_26748_tn_0,,,radius_1207_s_759420_s_16092,4,,0,0,2927.11341583294,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299270_b_26748_tn_0,,,radius_1207_s_16092_s_759419,5,,0,0,3543.01448403495,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299270_b_26748_tn_0,,,radius_1207_s_759419_s_16094,6,,0,0,5295.50711835856,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299270_b_26748_tn_0,,,radius_1207_s_16094_s_759425,7,,0,0,5812.69004042949,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299270_b_26748_tn_0,,,radius_1207_s_759425_s_771261,8,,0,0,6573.62375387002,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299270_b_26748_tn_0,,,radius_1207_s_771261_s_759417,9,,0,0,7491.45929283844,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299270_b_26748_tn_0,,,radius_1207_s_759417_s_16097,10,,0,0,8308.95264594237,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299270_b_26748_tn_0,,,radius_1207_s_16097_s_16070,11,,0,0,9477.65606835453,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299270_b_26748_tn_0,,,radius_1207_s_16070_s_16071,12,,0,0,10328.6932386946,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299270_b_26748_tn_0,,,radius_1207_s_16071_s_16076,13,,0,0,11858.7112708948,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299270_b_26748_tn_0,,,radius_1207_s_16076_s_16075,14,,0,0,12854.788768735,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299270_b_26748_tn_0,,,radius_1207_s_16075_s_16074,15,,0,0,13521.4705782649,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299270_b_26748_tn_0,,,radius_1207_s_16074_s_16077,16,,0,0,14037.794295026,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299270_b_26748_tn_0,,,radius_1207_s_16077_s_16077,17,,0,0,14969.68155963,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299271_b_26748_tn_0,,,radius_1207_s_22284_s_22286,1,,0,0,0,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299271_b_26748_tn_0,,,radius_1207_s_22286_s_22283,2,,0,0,580.898703890139,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299271_b_26748_tn_0,,,radius_1207_s_22283_s_22285,3,,0,0,1485.07965471661,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299271_b_26748_tn_0,,,radius_1207_s_22285_s_16278,4,,0,0,2389.72540975272,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299271_b_26748_tn_0,,,radius_1207_s_16278_s_15894,5,,2,3,17038.9069974779,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299271_b_26748_tn_0,,,radius_1207_s_15894_s_15882,6,,0,0,20982.6560544094,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299271_b_26748_tn_0,,,radius_1207_s_15882_s_15883,7,,0,0,22817.3023837179,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299271_b_26748_tn_0,,,radius_1207_s_15883_s_16276,8,,0,0,23629.5651817964,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299271_b_26748_tn_0,,,radius_1207_s_16276_s_15885,9,,0,0,23872.2297549312,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299271_b_26748_tn_0,,,radius_1207_s_15885_s_15893,10,,0,0,24379.2249071533,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299271_b_26748_tn_0,,,radius_1207_s_15893_s_16279,11,,0,0,34442.5528158479,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299271_b_26748_tn_0,,,radius_1207_s_16279_s_16275,12,,0,0,36375.0147840304,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299271_b_26748_tn_0,,,radius_1207_s_16275_s_15889,13,,0,0,37076.2208086132,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299271_b_26748_tn_0,,,radius_1207_s_15889_s_2456760,14,,0,0,37902.6201584632,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299271_b_26748_tn_0,,,radius_1207_s_2456760_s_2456760,15,,2,3,39685.76702734,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299272_b_26748_tn_0,,,radius_1207_s_15889_s_15888,1,,0,0,0,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299272_b_26748_tn_0,,,radius_1207_s_15888_s_15887,2,,0,0,1317.07488036808,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299272_b_26748_tn_0,,,radius_1207_s_15887_s_16060,3,,0,0,2009.36822490283,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299272_b_26748_tn_0,,,radius_1207_s_16060_s_15892,4,,0,0,3915.44513711639,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299272_b_26748_tn_0,,,radius_1207_s_15892_s_15884,5,,0,0,13988.7032003241,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299272_b_26748_tn_0,,,radius_1207_s_15884_s_15882,6,,0,0,14497.8576948654,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299272_b_26748_tn_0,,,radius_1207_s_15882_s_15881,7,,0,0,15033.0163136232,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299272_b_26748_tn_0,,,radius_1207_s_15881_s_16278,8,,0,0,17044.3564195229,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299272_b_26748_tn_0,,,radius_1207_s_16278_s_22287,9,,2,3,20972.2366658974,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299272_b_26748_tn_0,,,radius_1207_s_22287_s_22284,10,,0,0,35397.5902362735,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299272_b_26748_tn_0,,,radius_1207_s_22284_s_22286,11,,2,3,36898.7611236308,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299272_b_26748_tn_0,,,radius_1207_s_22286_s_22283,12,,2,3,37480.2569210987,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299272_b_26748_tn_0,,,radius_1207_s_22283_s_22283,13,,2,3,38384.43787187,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 +t_299273_b_26748_tn_0,,,radius_1207_s_16088_s_16089,1,,0,0,0,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299273_b_26748_tn_0,,,radius_1207_s_16089_s_759418,2,,0,0,1178.83712246948,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299273_b_26748_tn_0,,,radius_1207_s_759418_s_759420,3,,0,0,1969.86279603153,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299273_b_26748_tn_0,,,radius_1207_s_759420_s_16092,4,,0,0,2927.11341583294,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299273_b_26748_tn_0,,,radius_1207_s_16092_s_759419,5,,0,0,3543.01448403495,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299273_b_26748_tn_0,,,radius_1207_s_759419_s_16094,6,,0,0,5295.50711835856,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299273_b_26748_tn_0,,,radius_1207_s_16094_s_759425,7,,0,0,5812.69004042949,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299273_b_26748_tn_0,,,radius_1207_s_759425_s_771261,8,,0,0,6573.62375387002,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299273_b_26748_tn_0,,,radius_1207_s_771261_s_759417,9,,0,0,7491.45929283844,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299273_b_26748_tn_0,,,radius_1207_s_759417_s_16097,10,,0,0,8308.95264594237,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299273_b_26748_tn_0,,,radius_1207_s_16097_s_16070,11,,0,0,9477.65606835453,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299273_b_26748_tn_0,,,radius_1207_s_16070_s_16071,12,,0,0,10328.6932386946,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299273_b_26748_tn_0,,,radius_1207_s_16071_s_16076,13,,0,0,11858.7112708948,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299273_b_26748_tn_0,,,radius_1207_s_16076_s_16075,14,,0,0,12854.788768735,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299273_b_26748_tn_0,,,radius_1207_s_16075_s_16074,15,,0,0,13521.4705782649,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299273_b_26748_tn_0,,,radius_1207_s_16074_s_16077,16,,0,0,14037.794295026,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299273_b_26748_tn_0,,,radius_1207_s_16077_s_16077,17,,0,0,14969.68155963,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299274_b_26748_tn_0,,,radius_1207_s_16088_s_16089,1,,0,0,0,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299274_b_26748_tn_0,,,radius_1207_s_16089_s_759418,2,,0,0,1178.83712246948,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299274_b_26748_tn_0,,,radius_1207_s_759418_s_759420,3,,0,0,1969.86279603153,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299274_b_26748_tn_0,,,radius_1207_s_759420_s_16092,4,,0,0,2927.11341583294,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299274_b_26748_tn_0,,,radius_1207_s_16092_s_759419,5,,0,0,3543.01448403495,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299274_b_26748_tn_0,,,radius_1207_s_759419_s_16094,6,,0,0,5295.50711835856,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299274_b_26748_tn_0,,,radius_1207_s_16094_s_759425,7,,0,0,5812.69004042949,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299274_b_26748_tn_0,,,radius_1207_s_759425_s_771261,8,,0,0,6573.62375387002,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299274_b_26748_tn_0,,,radius_1207_s_771261_s_759417,9,,0,0,7491.45929283844,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299274_b_26748_tn_0,,,radius_1207_s_759417_s_16097,10,,0,0,8308.95264594237,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299274_b_26748_tn_0,,,radius_1207_s_16097_s_16070,11,,0,0,9477.65606835453,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299274_b_26748_tn_0,,,radius_1207_s_16070_s_16071,12,,0,0,10328.6932386946,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299274_b_26748_tn_0,,,radius_1207_s_16071_s_16076,13,,0,0,11858.7112708948,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299274_b_26748_tn_0,,,radius_1207_s_16076_s_16075,14,,0,0,12854.788768735,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299274_b_26748_tn_0,,,radius_1207_s_16075_s_16074,15,,0,0,13521.4705782649,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299274_b_26748_tn_0,,,radius_1207_s_16074_s_16077,16,,0,0,14037.794295026,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299274_b_26748_tn_0,,,radius_1207_s_16077_s_16077,17,,0,0,14969.68155963,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 +t_299275_b_26748_tn_0,,,radius_1207_s_16069_s_16024,1,,0,0,0,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299275_b_26748_tn_0,,,radius_1207_s_16024_s_16025,2,,0,0,775.596266212284,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299275_b_26748_tn_0,,,radius_1207_s_16025_s_16026,3,,0,0,1807.22190535612,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299275_b_26748_tn_0,,,radius_1207_s_16026_s_2483495,4,,0,0,2766.28482550726,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299275_b_26748_tn_0,,,radius_1207_s_2483495_s_29681,5,,0,0,5416.75044306174,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299275_b_26748_tn_0,,,radius_1207_s_29681_s_16032,6,,0,0,6436.45201007476,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299275_b_26748_tn_0,,,radius_1207_s_16032_s_2438933,7,,0,0,7576.71452995217,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299275_b_26748_tn_0,,,radius_1207_s_2438933_s_16031,8,,0,0,8240.84195654157,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299275_b_26748_tn_0,,,radius_1207_s_16031_s_16030,9,,0,0,8527.62288862872,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299275_b_26748_tn_0,,,radius_1207_s_16030_s_16033,10,,0,0,8932.84679637186,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299275_b_26748_tn_0,,,radius_1207_s_16033_s_16034,11,,0,0,9165.13404331625,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299275_b_26748_tn_0,,,radius_1207_s_16034_s_15889,12,,0,0,9628.59060260394,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299275_b_26748_tn_0,,,radius_1207_s_15889_s_16039,13,,0,0,10510.9386855591,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299275_b_26748_tn_0,,,radius_1207_s_16039_s_16040,14,,0,0,11686.4154079233,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299275_b_26748_tn_0,,,radius_1207_s_16040_s_16042,15,,0,0,12047.7835753043,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299275_b_26748_tn_0,,,radius_1207_s_16042_s_16043,16,,0,0,12324.4604601439,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299275_b_26748_tn_0,,,radius_1207_s_16043_s_16044,17,,0,0,12526.5458089135,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299275_b_26748_tn_0,,,radius_1207_s_16044_s_16045,18,,0,0,12886.5424727922,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299275_b_26748_tn_0,,,radius_1207_s_16045_s_15942,19,,0,0,13106.2063391676,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299275_b_26748_tn_0,,,radius_1207_s_15942_s_16048,20,,0,0,15282.8820371869,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299275_b_26748_tn_0,,,radius_1207_s_16048_s_2438934,21,,2,3,17060.1720314054,0,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299275_b_26748_tn_0,,,radius_1207_s_2438934_s_16049,22,,0,0,18604.0056042532,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299275_b_26748_tn_0,,,radius_1207_s_16049_s_16050,23,,0,0,19098.7301834617,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299275_b_26748_tn_0,,,radius_1207_s_16050_s_16051,24,,0,0,19388.6880759922,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299275_b_26748_tn_0,,,radius_1207_s_16051_s_16052,25,,0,0,20425.6382579853,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299275_b_26748_tn_0,,,radius_1207_s_16052_s_16053,26,,0,0,20752.5347065814,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299275_b_26748_tn_0,,,radius_1207_s_16053_s_833259,27,,0,0,21230.9536762786,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299275_b_26748_tn_0,,,radius_1207_s_833259_s_16275,28,,0,0,23127.0336395412,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299275_b_26748_tn_0,,,radius_1207_s_16275_s_16055,29,,0,0,23551.6916242021,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299275_b_26748_tn_0,,,radius_1207_s_16055_s_16057,30,,0,0,23808.8722434897,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299275_b_26748_tn_0,,,radius_1207_s_16057_s_16058,31,,0,0,24487.418244042,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299275_b_26748_tn_0,,,radius_1207_s_16058_s_16059,32,,0,0,24680.6102514857,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299275_b_26748_tn_0,,,radius_1207_s_16059_s_16060,33,,0,0,25614.1591340582,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299275_b_26748_tn_0,,,radius_1207_s_16060_s_16061,34,,0,0,26256.131709164,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299275_b_26748_tn_0,,,radius_1207_s_16061_s_16062,35,,0,0,27180.643659028,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299275_b_26748_tn_0,,,radius_1207_s_16062_s_16063,36,,0,0,27686.863698439,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299275_b_26748_tn_0,,,radius_1207_s_16063_s_15890,37,,0,0,28259.1890347633,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299275_b_26748_tn_0,,,radius_1207_s_15890_s_2438932,38,,0,0,28886.6228332024,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299275_b_26748_tn_0,,,radius_1207_s_2438932_s_16065,39,,2,3,29619.901749005,0,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299275_b_26748_tn_0,,,radius_1207_s_16065_s_2483495,40,,0,0,30254.2525223819,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299275_b_26748_tn_0,,,radius_1207_s_2483495_s_16066,41,,2,3,30838.8763853997,0,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299275_b_26748_tn_0,,,radius_1207_s_16066_s_16068,42,,0,0,32312.2465968761,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299275_b_26748_tn_0,,,radius_1207_s_16068_s_16069,43,,0,0,34898.4147967777,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299275_b_26748_tn_0,,,radius_1207_s_16069_s_16069,44,,0,0,36360.0641114,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299276_b_26748_tn_0,,,radius_1207_s_16069_s_16024,1,,0,0,0,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299276_b_26748_tn_0,,,radius_1207_s_16024_s_16025,2,,0,0,775.596266212284,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299276_b_26748_tn_0,,,radius_1207_s_16025_s_16026,3,,0,0,1807.22190535612,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299276_b_26748_tn_0,,,radius_1207_s_16026_s_2483495,4,,0,0,2766.28482550726,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299276_b_26748_tn_0,,,radius_1207_s_2483495_s_29681,5,,0,0,5416.75044306174,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299276_b_26748_tn_0,,,radius_1207_s_29681_s_16032,6,,0,0,6436.45201007476,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299276_b_26748_tn_0,,,radius_1207_s_16032_s_2438933,7,,0,0,7576.71452995217,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299276_b_26748_tn_0,,,radius_1207_s_2438933_s_16031,8,,0,0,8240.84195654157,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299276_b_26748_tn_0,,,radius_1207_s_16031_s_16030,9,,0,0,8527.62288862872,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299276_b_26748_tn_0,,,radius_1207_s_16030_s_16033,10,,0,0,8932.84679637186,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299276_b_26748_tn_0,,,radius_1207_s_16033_s_16034,11,,0,0,9165.13404331625,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299276_b_26748_tn_0,,,radius_1207_s_16034_s_15889,12,,0,0,9628.59060260394,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299276_b_26748_tn_0,,,radius_1207_s_15889_s_16039,13,,0,0,10510.9386855591,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299276_b_26748_tn_0,,,radius_1207_s_16039_s_16040,14,,0,0,11686.4154079233,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299276_b_26748_tn_0,,,radius_1207_s_16040_s_16042,15,,0,0,12047.7835753043,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299276_b_26748_tn_0,,,radius_1207_s_16042_s_16043,16,,0,0,12324.4604601439,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299276_b_26748_tn_0,,,radius_1207_s_16043_s_16044,17,,0,0,12526.5458089135,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299276_b_26748_tn_0,,,radius_1207_s_16044_s_16045,18,,0,0,12886.5424727922,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299276_b_26748_tn_0,,,radius_1207_s_16045_s_15942,19,,0,0,13106.2063391676,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299276_b_26748_tn_0,,,radius_1207_s_15942_s_16048,20,,0,0,15282.8820371869,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299276_b_26748_tn_0,,,radius_1207_s_16048_s_2438934,21,,2,3,17060.1720314054,0,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299276_b_26748_tn_0,,,radius_1207_s_2438934_s_16049,22,,0,0,18604.0056042532,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299276_b_26748_tn_0,,,radius_1207_s_16049_s_16050,23,,0,0,19098.7301834617,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299276_b_26748_tn_0,,,radius_1207_s_16050_s_16051,24,,0,0,19388.6880759922,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299276_b_26748_tn_0,,,radius_1207_s_16051_s_16052,25,,0,0,20425.6382579853,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299276_b_26748_tn_0,,,radius_1207_s_16052_s_16053,26,,0,0,20752.5347065814,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299276_b_26748_tn_0,,,radius_1207_s_16053_s_833259,27,,0,0,21230.9536762786,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299276_b_26748_tn_0,,,radius_1207_s_833259_s_16275,28,,0,0,23127.0336395412,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299276_b_26748_tn_0,,,radius_1207_s_16275_s_16055,29,,0,0,23551.6916242021,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299276_b_26748_tn_0,,,radius_1207_s_16055_s_16057,30,,0,0,23808.8722434897,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299276_b_26748_tn_0,,,radius_1207_s_16057_s_16058,31,,0,0,24487.418244042,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299276_b_26748_tn_0,,,radius_1207_s_16058_s_16059,32,,0,0,24680.6102514857,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299276_b_26748_tn_0,,,radius_1207_s_16059_s_16060,33,,0,0,25614.1591340582,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299276_b_26748_tn_0,,,radius_1207_s_16060_s_16061,34,,0,0,26256.131709164,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299276_b_26748_tn_0,,,radius_1207_s_16061_s_16062,35,,0,0,27180.643659028,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299276_b_26748_tn_0,,,radius_1207_s_16062_s_16063,36,,0,0,27686.863698439,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299276_b_26748_tn_0,,,radius_1207_s_16063_s_15890,37,,0,0,28259.1890347633,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299276_b_26748_tn_0,,,radius_1207_s_15890_s_2438932,38,,0,0,28886.6228332024,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299276_b_26748_tn_0,,,radius_1207_s_2438932_s_16065,39,,2,3,29619.901749005,0,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299276_b_26748_tn_0,,,radius_1207_s_16065_s_2483495,40,,0,0,30254.2525223819,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299276_b_26748_tn_0,,,radius_1207_s_2483495_s_16066,41,,2,3,30838.8763853997,0,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299276_b_26748_tn_0,,,radius_1207_s_16066_s_16068,42,,0,0,32312.2465968761,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299276_b_26748_tn_0,,,radius_1207_s_16068_s_16069,43,,0,0,34898.4147967777,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299276_b_26748_tn_0,,,radius_1207_s_16069_s_16069,44,,0,0,36360.0641114,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299338_b_26748_tn_0,,,radius_1207_s_16215_s_16183,1,,0,0,0,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299338_b_26748_tn_0,,,radius_1207_s_16183_s_16184,2,,2,3,6520.50975296256,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299338_b_26748_tn_0,,,radius_1207_s_16184_s_16079,3,,2,3,11084.1884902035,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299338_b_26748_tn_0,,,radius_1207_s_16079_s_16080,4,,0,0,13248.1451958165,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299338_b_26748_tn_0,,,radius_1207_s_16080_s_16072,5,,0,0,13848.9661178394,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299338_b_26748_tn_0,,,radius_1207_s_16072_s_2455436,6,,0,0,14751.3733239552,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299338_b_26748_tn_0,,,radius_1207_s_2455436_s_2456766,7,,2,3,15308.1661406291,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299338_b_26748_tn_0,,,radius_1207_s_2456766_s_16071,8,,0,0,15778.6377100029,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299338_b_26748_tn_0,,,radius_1207_s_16071_s_16082,9,,0,0,17210.8415651875,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299338_b_26748_tn_0,,,radius_1207_s_16082_s_16084,10,,0,0,19259.2327970833,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299338_b_26748_tn_0,,,radius_1207_s_16084_s_16094,11,,0,0,21236.5820279569,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299338_b_26748_tn_0,,,radius_1207_s_16094_s_16185,12,,0,0,22119.5215086519,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299338_b_26748_tn_0,,,radius_1207_s_16185_s_16087,13,,2,3,24197.4842031251,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299338_b_26748_tn_0,,,radius_1207_s_16087_s_16088,14,,0,0,26027.3114484316,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299338_b_26748_tn_0,,,radius_1207_s_16088_s_16189,15,,2,3,27204.5843383888,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299338_b_26748_tn_0,,,radius_1207_s_16189_s_16188,16,,2,3,31631.2452421551,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299338_b_26748_tn_0,,,radius_1207_s_16188_s_16187,17,,0,0,33154.5344338769,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299338_b_26748_tn_0,,,radius_1207_s_16187_s_16211,18,,2,3,36465.5949927191,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299338_b_26748_tn_0,,,radius_1207_s_16211_s_16192,19,,0,0,40725.7914104004,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299338_b_26748_tn_0,,,radius_1207_s_16192_s_16190,20,,0,0,41931.6524731666,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299338_b_26748_tn_0,,,radius_1207_s_16190_s_16191,21,,2,3,49989.5176117643,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299338_b_26748_tn_0,,,radius_1207_s_16191_s_16025,22,,2,3,52321.8018521579,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299338_b_26748_tn_0,,,radius_1207_s_16025_s_2455449,23,,0,0,57134.220310128,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299338_b_26748_tn_0,,,radius_1207_s_2455449_s_29681,24,,0,0,60471.8291282356,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299338_b_26748_tn_0,,,radius_1207_s_29681_s_16194,25,,0,0,61323.4231185735,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299338_b_26748_tn_0,,,radius_1207_s_16194_s_15889,26,,0,0,63200.9410346108,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299338_b_26748_tn_0,,,radius_1207_s_15889_s_15889,27,,0,0,63916.4911365,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 +t_299339_b_26748_tn_0,,,radius_1207_s_16069_s_16024,1,,0,0,0,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299339_b_26748_tn_0,,,radius_1207_s_16024_s_16025,2,,0,0,775.596266212284,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299339_b_26748_tn_0,,,radius_1207_s_16025_s_16026,3,,0,0,1807.22190535612,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299339_b_26748_tn_0,,,radius_1207_s_16026_s_15893,4,,0,0,2766.28482550726,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299339_b_26748_tn_0,,,radius_1207_s_15893_s_16048,5,,0,0,8039.23778038043,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299339_b_26748_tn_0,,,radius_1207_s_16048_s_16051,6,,2,3,14042.8656821803,0,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299339_b_26748_tn_0,,,radius_1207_s_16051_s_16052,7,,0,0,17599.5544296388,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299339_b_26748_tn_0,,,radius_1207_s_16052_s_16053,8,,0,0,17927.7506832307,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299339_b_26748_tn_0,,,radius_1207_s_16053_s_833259,9,,0,0,18406.1696529279,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299339_b_26748_tn_0,,,radius_1207_s_833259_s_16275,10,,0,0,20302.2496161905,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299339_b_26748_tn_0,,,radius_1207_s_16275_s_16055,11,,0,0,20726.9076008514,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299339_b_26748_tn_0,,,radius_1207_s_16055_s_16057,12,,0,0,20984.0882201391,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299339_b_26748_tn_0,,,radius_1207_s_16057_s_16058,13,,0,0,21662.6342206914,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299339_b_26748_tn_0,,,radius_1207_s_16058_s_16059,14,,0,0,21855.826228135,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299339_b_26748_tn_0,,,radius_1207_s_16059_s_16060,15,,0,0,22789.3751107075,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299339_b_26748_tn_0,,,radius_1207_s_16060_s_16061,16,,0,0,23431.3476858134,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299339_b_26748_tn_0,,,radius_1207_s_16061_s_16062,17,,0,0,24355.8596356773,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299339_b_26748_tn_0,,,radius_1207_s_16062_s_16063,18,,0,0,24862.0796750883,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299339_b_26748_tn_0,,,radius_1207_s_16063_s_15890,19,,0,0,25434.4050114126,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299339_b_26748_tn_0,,,radius_1207_s_15890_s_2438932,20,,0,0,26061.8388098517,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299339_b_26748_tn_0,,,radius_1207_s_2438932_s_16065,21,,2,3,26795.1177256544,0,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299339_b_26748_tn_0,,,radius_1207_s_16065_s_2483495,22,,0,0,27429.4684990313,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299339_b_26748_tn_0,,,radius_1207_s_2483495_s_16066,23,,2,3,28014.092362049,0,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299339_b_26748_tn_0,,,radius_1207_s_16066_s_16068,24,,0,0,29487.4625735254,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299339_b_26748_tn_0,,,radius_1207_s_16068_s_16069,25,,0,0,32073.6307734271,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_299339_b_26748_tn_0,,,radius_1207_s_16069_s_16069,26,,0,0,33535.28008802,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 +t_748719_b_26748_tn_0,,,area_271,1,,2,2,0,1,,,,,1,1,booking_route_13317,booking_route_13317,00:00:00,07:30:00,1,00:10:00,1,00:25:00 +t_748719_b_26748_tn_0,,,area_271,2,,2,2,0,1,,,,,1,1,booking_route_13317,booking_route_13317,07:30:00,07:30:00,1,00:10:00,1,00:25:00 diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/stops.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/stops.txt new file mode 100644 index 00000000000..0525c8ec11d --- /dev/null +++ b/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/stops.txt @@ -0,0 +1,17 @@ +stop_id,stop_code,platform_code,stop_name,stop_desc,stop_lat,stop_lon,zone_id,stop_url,location_type,parent_station,stop_timezone,position,direction,wheelchair_boarding +2456756,517,,3rd Street and Pontiac Street (Yachats Log Church),,44.3116263048855,-124.105422953253,,,0,,America/Los_Angeles,,,0 +2456757,539,,Waldport Clinic,,44.416184,-124.076029,,,0,,America/Los_Angeles,,,0 +2456758,538,,Dollar General,,44.427015,-124.065051,,,0,,America/Los_Angeles,,,0 +2456760,526,,Hwy 101 and NE 17th Street,,44.6506199947377,-124.052895474438,,,0,,America/Los_Angeles,,,0 +2456766,531,,22nd Street at Beach Club,,44.98137,-124.00641,,,0,,America/Los_Angeles,,,0 +2483495,503,,Walmart (Loop Route Only),,44.656229016403,-124.053896609126,,,0,,America/Los_Angeles,,,0 +2483496,525,,Applegate Street and 11th Street,,44.53911,-123.37108,,,0,,America/Los_Angeles,,,0 +2483497,524,,Main Street and 14th Street,,44.54015,-123.36601,,,0,,America/Los_Angeles,,,0 +2483498,523,,26th Street and SW Western Boulevard (Hilton Garden Inn),,44.55767,-123.2788,,,0,,America/Los_Angeles,,,0 +2483499,522,,Corvallis Transit Center,,44.5650440489089,-123.263958606787,,,0,,America/Los_Angeles,,,0 +2483500,521,,"Amtrak Station, Albany",,44.63053,-123.10286,,,0,,America/Los_Angeles,,,0 +2483502,518,,Corvallis Samaritan Hospital,,44.60378,-123.25316,,,0,,America/Los_Angeles,,,0 +2501902,652,,Toledo Park N' Ride,,44.624176,-123.939461,,,0,,America/Los_Angeles,,,0 +2501903,653,,Crystal Creek Loop and Highway 20,,44.628989,-123.768486,,,0,,America/Los_Angeles,,,0 +2501904,655,,South Beach Hatfield MSC,,44.622928,-124.046618,,,0,,America/Los_Angeles,,,0 +2502256,654,,Crystal Creek Loop and Highway 20,,44.6291635407879,-123.768060788296,,,0,,America/Los_Angeles,,,0 diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/trips.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/trips.txt new file mode 100644 index 00000000000..0f7ea2c2559 --- /dev/null +++ b/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/trips.txt @@ -0,0 +1,57 @@ +route_id,service_id,trip_id,trip_short_name,trip_headsign,direction_id,block_id,shape_id,bikes_allowed,wheelchair_accessible,trip_type,drt_max_travel_time,drt_avg_travel_time,drt_advance_book_min,drt_pickup_message,drt_drop_off_message,continuous_pickup_message,continuous_drop_off_message,booking_rule_id +13317,c_15353_b_26748_d_31,t_748719_b_26748_tn_0,,,0,,,,,,,,,,,,, +13317,c_15353_b_26748_d_31,t_1225545_b_26748_tn_0,,,0,,,,,,,,,,,,, +491,c_15353_b_26748_d_127,t_299224_b_26748_tn_0,,Loop,0,1343,p_737,,,,,,,,,,, +491,c_15353_b_26748_d_127,t_299264_b_26748_tn_0,,Loop,0,1343,p_737,,,,,,,,,,, +491,c_15353_b_26748_d_127,t_299265_b_26748_tn_0,,Loop,0,1343,p_736,,,,,,,,,,, +491,c_15353_b_26748_d_127,t_299275_b_26748_tn_0,,Loop,0,1343,p_737,,,,,,,,,,, +491,c_15353_b_26748_d_127,t_299276_b_26748_tn_0,,Loop,0,1343,p_737,,,,,,,,,,, +491,c_15353_b_26748_d_127,t_299223_b_26748_tn_0,,Loop,0,1343,p_737,,,,,,,,,,, +491,c_15353_b_26748_d_127,t_299339_b_26748_tn_0,,Loop,0,1343,p_738,,,,,,,,,,, +491,c_15353_b_26748_d_127,t_299228_b_26748_tn_0,,Loop,0,1343,p_735,,,,,,,,,,, +492,c_15353_b_26748_d_63,t_299273_b_26748_tn_0,,DMV,0,1344,p_742,,,,,,,,,,, +492,c_15353_b_26748_d_63,t_299274_b_26748_tn_0,,DMV,0,1344,p_742,,,,,,,,,,, +492,c_15353_b_26748_d_63,t_299243_b_26748_tn_0,,DMV,0,1344,p_742,,,,,,,,,,, +492,c_15353_b_26748_d_63,t_299255_b_26748_tn_0,,DMV,0,1344,p_742,,,,,,,,,,, +492,c_15353_b_26748_d_63,t_299259_b_26748_tn_0,,DMV,0,1344,p_743,,,,,,,,,,, +492,c_15353_b_26748_d_63,t_299266_b_26748_tn_0,,DMV,0,1344,p_742,,,,,,,,,,, +492,c_15353_b_26748_d_63,t_299269_b_26748_tn_0,,DMV,0,1344,p_742,,,,,,,,,,, +492,c_15353_b_26748_d_63,t_299270_b_26748_tn_0,,DMV,0,1344,p_742,,,,,,,,,,, +492,c_15353_b_26748_d_63,t_299230_b_26748_tn_0,,SW 62nd & Highway 101,1,1344,p_740,,,,,,,,,,, +492,c_15353_b_26748_d_63,t_299225_b_26748_tn_0,,SW 62nd & Highway 101,1,1344,p_740,,,,,,,,,,, +492,c_15353_b_26748_d_63,t_299233_b_26748_tn_0,,SW 62nd & Highway 101,1,1344,p_740,,,,,,,,,,, +492,c_15353_b_26748_d_63,t_299235_b_26748_tn_0,,SW 62nd & Highway 101,1,1344,p_740,,,,,,,,,,, +492,c_15353_b_26748_d_63,t_299236_b_26748_tn_0,,SW 62nd & Highway 101,1,1344,p_740,,,,,,,,,,, +492,c_15353_b_26748_d_63,t_299237_b_26748_tn_0,,SW 62nd & Highway 101,1,1344,p_740,,,,,,,,,,, +492,c_15353_b_26748_d_63,t_299241_b_26748_tn_0,,SW 62nd & Highway 101,1,1344,p_740,,,,,,,,,,, +492,c_15353_b_26748_d_63,t_299262_b_26748_tn_0,,SW 62nd & Highway 101,1,1344,p_739,,,,,,,,,,, +493,c_15353_b_26748_d_63,t_299240_b_26748_tn_0,,Newport,0,21115,p_179218,,,,,,,,,,, +493,c_15353_b_26748_d_63,t_299271_b_26748_tn_0,,Newport,0,21117,p_179439,,,,,,,,,,, +493,c_15353_b_26748_d_63,t_299245_b_26748_tn_0,,Newport,0,21115,p_178796,,,,,,,,,,, +493,c_15353_b_26748_d_63,t_299242_b_26748_tn_0,,Newport,0,21115,p_178798,,,,,,,,,,, +493,c_15353_b_26748_d_63,t_299234_b_26748_tn_0,,Newport,0,21117,p_179439,,,,,,,,,,, +493,c_15353_b_26748_d_63,t_299226_b_26748_tn_0,,Newport,0,21117,p_178796,,,,,,,,,,, +493,c_15353_b_26748_d_63,t_299248_b_26748_tn_0,,Siletz,1,21117,p_179449,,,,,,,,,,, +493,c_15353_b_26748_d_63,t_299232_b_26748_tn_0,,Siletz,1,21115,p_178801,,,,,,,,,,, +493,c_15353_b_26748_d_63,t_299249_b_26748_tn_0,,Siletz,1,21115,p_179449,,,,,,,,,,, +493,c_15353_b_26748_d_63,t_299267_b_26748_tn_0,,Siletz,1,21117,p_179217,,,,,,,,,,, +493,c_15353_b_26748_d_63,t_299268_b_26748_tn_0,,Siletz,1,21115,p_178800,,,,,,,,,,, +493,c_15353_b_26748_d_63,t_299272_b_26748_tn_0,,Siletz,1,21117,p_179217,,,,,,,,,,, +495,c_15353_b_26748_d_127,t_299261_b_26748_tn_0,,Rose Lodge / Lincoln City ,0,21114,p_178791,,,,,,,,,,, +495,c_15353_b_26748_d_127,t_299227_b_26748_tn_0,,Rose Lodge / Lincoln City ,0,21114,p_178791,,,,,,,,,,, +495,c_15353_b_26748_d_127,t_299247_b_26748_tn_0,,Rose Lodge / Lincoln City ,0,21114,p_178791,,,,,,,,,,, +495,c_15353_b_26748_d_127,t_299250_b_26748_tn_0,,Rose Lodge / Lincoln City ,0,21114,p_178790,,,,,,,,,,, +495,c_15353_b_26748_d_127,t_299246_b_26748_tn_0,,Newport,1,21114,p_178795,,,,,,,,,,, +495,c_15353_b_26748_d_127,t_299238_b_26748_tn_0,,Newport,1,21114,p_178793,,,,,,,,,,, +495,c_15353_b_26748_d_127,t_299229_b_26748_tn_0,,Newport,1,21114,p_178793,,,,,,,,,,, +495,c_15353_b_26748_d_127,t_299338_b_26748_tn_0,,Newport,1,21114,p_178793,,,,,,,,,,, +495,c_15353_b_26748_d_63,t_299260_b_26748_tn_0,,Rose Lodge / Lincoln City ,0,21115,p_178792,,,,,,,,,,, +495,c_15353_b_26748_d_63,t_299263_b_26748_tn_0,,Newport,1,21115,p_178794,,,,,,,,,,, +497,c_15353_b_26748_d_63,t_299257_b_26748_tn_0,,Newport,0,21116,p_4523,,,,,,,,,,, +497,c_15353_b_26748_d_63,t_299258_b_26748_tn_0,,Newport,0,21116,p_4523,,,,,,,,,,, +497,c_15353_b_26748_d_63,t_299251_b_26748_tn_0,,Newport,0,21116,p_4523,,,,,,,,,,, +497,c_15353_b_26748_d_63,t_299256_b_26748_tn_0,,Newport,0,21116,p_4523,,,,,,,,,,, +497,c_15353_b_26748_d_63,t_299254_b_26748_tn_0,,Yachats,1,21116,p_724,,,,,,,,,,, +497,c_15353_b_26748_d_63,t_299231_b_26748_tn_0,,Yachats,1,21116,p_724,,,,,,,,,,, +497,c_15353_b_26748_d_63,t_299244_b_26748_tn_0,,Yachats,1,21116,p_724,,,,,,,,,,, +497,c_15353_b_26748_d_63,t_299239_b_26748_tn_0,,Yachats,1,21116,p_724,,,,,,,,,,, diff --git a/src/ext-test/resources/org/opentripplanner/ext/vehicleparking/bikely/bikely.json b/src/ext-test/resources/org/opentripplanner/ext/vehicleparking/bikely/bikely.json new file mode 100644 index 00000000000..a3e1e9e2e57 --- /dev/null +++ b/src/ext-test/resources/org/opentripplanner/ext/vehicleparking/bikely/bikely.json @@ -0,0 +1,324 @@ +{ + "result": [ + { + "name": "Gjettum T-banestasjon", + "latitude": 59.908370304935886, + "longitude": 10.531885281680088, + "street": "Kolsåsstien", + "postCode": "1352", + "municipality": null, + "openFrom": "2020-01-28T06:00:00Z", + "openTo": "2020-01-28T22:00:00Z", + "isAllDay": true, + "isInMaintenance": false, + "maintenanceEndingTime": null, + "maintenanceStartTime": null, + "isPrivate": false, + "isGroupMember": false, + "totalStandardSpots": 10, + "hasStandardParking": true, + "availableStandardSpots": 8, + "totalCargoSpots": 0, + "hasCargoParking": false, + "availableCargoSpots": 0, + "startPriceAmount": 0, + "startPriceDuration": 12, + "mainPriceAmount": 10, + "mainPriceDuration": 1, + "maxDailyAmount": 0, + "isCluster": false, + "zoomDelta": 0, + "subscriptionId": 0, + "subscribedDoorName": null, + "subscribedLockType": 0, + "locationPricing": { + "locationPaymentType": 1, + "startPriceAmount": 0, + "startPriceDuration": 12, + "mainPriceAmount": 10, + "mainPriceDuration": 1 + }, + "id": 7 + }, + { + "name": "Lørenskog sykkelhotell", + "latitude": 59.92782951468654, + "longitude": 10.955770147334647, + "street": "Bibliotekgata", + "postCode": "1470", + "municipality": null, + "openFrom": "2020-01-28T06:00:00Z", + "openTo": "2020-01-28T22:00:00Z", + "isAllDay": true, + "isInMaintenance": false, + "maintenanceEndingTime": null, + "maintenanceStartTime": "2021-09-02T12:10:25.957906Z", + "isPrivate": false, + "isGroupMember": true, + "totalStandardSpots": 1, + "hasStandardParking": true, + "availableStandardSpots": 73, + "totalCargoSpots": 0, + "hasCargoParking": false, + "availableCargoSpots": 0, + "startPriceAmount": 5, + "startPriceDuration": 12, + "mainPriceAmount": 5, + "mainPriceDuration": 12, + "maxDailyAmount": 0, + "isCluster": false, + "zoomDelta": 0, + "subscriptionId": 0, + "subscribedDoorName": null, + "subscribedLockType": 0, + "locationPricing": { + "locationPaymentType": 1, + "startPriceAmount": 5, + "startPriceDuration": 12, + "mainPriceAmount": 5, + "mainPriceDuration": 12 + }, + "id": 9 + }, + { + "name": "Østerås T-Banestasjon", + "latitude": 59.939540539600415, + "longitude": 10.608225677856922, + "street": "104 Eiksveien", + "postCode": "1361", + "municipality": null, + "openFrom": "2020-01-28T06:00:00Z", + "openTo": "2020-01-28T22:00:00Z", + "isAllDay": true, + "isInMaintenance": false, + "maintenanceEndingTime": "2022-11-16T14:48:00Z", + "maintenanceStartTime": "2022-11-16T12:49:00.674743Z", + "isPrivate": false, + "isGroupMember": false, + "totalStandardSpots": 10, + "hasStandardParking": true, + "availableStandardSpots": 7, + "totalCargoSpots": 0, + "hasCargoParking": false, + "availableCargoSpots": 0, + "startPriceAmount": 0, + "startPriceDuration": 12, + "mainPriceAmount": 10, + "mainPriceDuration": 1, + "maxDailyAmount": 0, + "isCluster": false, + "zoomDelta": 0, + "subscriptionId": 0, + "subscribedDoorName": null, + "subscribedLockType": 0, + "locationPricing": { + "locationPaymentType": 1, + "startPriceAmount": 0, + "startPriceDuration": 12, + "mainPriceAmount": 10, + "mainPriceDuration": 1 + }, + "id": 10 + }, + { + "name": "Slottet sykkelparkering", + "latitude": 58.147399578615044, + "longitude": 7.987953559998118, + "street": "Tordenskjolds gate 13", + "postCode": "4612", + "municipality": null, + "openFrom": "2020-01-28T06:00:00Z", + "openTo": "2020-01-28T22:00:00Z", + "isAllDay": true, + "isInMaintenance": false, + "maintenanceEndingTime": null, + "maintenanceStartTime": null, + "isPrivate": false, + "isGroupMember": false, + "totalStandardSpots": 10, + "hasStandardParking": true, + "availableStandardSpots": 2, + "totalCargoSpots": 0, + "hasCargoParking": false, + "availableCargoSpots": 0, + "startPriceAmount": 0, + "startPriceDuration": 0, + "mainPriceAmount": 15, + "mainPriceDuration": 12, + "maxDailyAmount": 0, + "isCluster": false, + "zoomDelta": 0, + "subscriptionId": 0, + "subscribedDoorName": null, + "subscribedLockType": 0, + "locationPricing": { + "locationPaymentType": 1, + "startPriceAmount": 0, + "startPriceDuration": 0, + "mainPriceAmount": 15, + "mainPriceDuration": 12 + }, + "id": 20 + }, + { + "name": "AtB Steinkjer Stasjon", + "latitude": 64.01218345882226, + "longitude": 11.495342431116114, + "street": "Strandvegen", + "postCode": "7713", + "municipality": null, + "openFrom": "2020-01-28T06:00:00Z", + "openTo": "2020-01-28T22:00:00Z", + "isAllDay": true, + "isInMaintenance": false, + "maintenanceEndingTime": null, + "maintenanceStartTime": null, + "isPrivate": false, + "isGroupMember": false, + "totalStandardSpots": 4, + "hasStandardParking": true, + "availableStandardSpots": 4, + "totalCargoSpots": 0, + "hasCargoParking": false, + "availableCargoSpots": 0, + "startPriceAmount": 0, + "startPriceDuration": 4, + "mainPriceAmount": 20, + "mainPriceDuration": 24, + "maxDailyAmount": 0, + "isCluster": false, + "zoomDelta": 0, + "subscriptionId": 0, + "subscribedDoorName": null, + "subscribedLockType": 0, + "locationPricing": { + "locationPaymentType": 1, + "startPriceAmount": 0, + "startPriceDuration": 4, + "mainPriceAmount": 20, + "mainPriceDuration": 24 + }, + "id": 21 + }, + { + "name": "Ørjaveita", + "latitude": 63.43390486150696, + "longitude": 10.396437736776587, + "street": "Ørjaveita", + "postCode": "7010", + "municipality": null, + "openFrom": "2020-01-28T06:00:00Z", + "openTo": "2020-01-28T22:55:00Z", + "isAllDay": true, + "isInMaintenance": false, + "maintenanceEndingTime": null, + "maintenanceStartTime": "2022-09-30T07:23:33.102315Z", + "isPrivate": false, + "isGroupMember": true, + "totalStandardSpots": 10, + "hasStandardParking": true, + "availableStandardSpots": 8, + "totalCargoSpots": 0, + "hasCargoParking": false, + "availableCargoSpots": 0, + "startPriceAmount": 0, + "startPriceDuration": 4, + "mainPriceAmount": 10, + "mainPriceDuration": 1, + "maxDailyAmount": 0, + "isCluster": false, + "zoomDelta": 0, + "subscriptionId": 0, + "subscribedDoorName": null, + "subscribedLockType": 0, + "locationPricing": { + "locationPaymentType": 1, + "startPriceAmount": 0, + "startPriceDuration": 4, + "mainPriceAmount": 10, + "mainPriceDuration": 1 + }, + "id": 24 + }, + { + "name": "Porsgrunn Stasjon", + "latitude": 59.1401227511141, + "longitude": 9.658452655675983, + "street": null, + "postCode": null, + "municipality": null, + "openFrom": "2020-01-28T06:00:00Z", + "openTo": "2020-01-28T22:00:00Z", + "isAllDay": true, + "isInMaintenance": false, + "maintenanceEndingTime": null, + "maintenanceStartTime": null, + "isPrivate": false, + "isGroupMember": false, + "totalStandardSpots": 10, + "hasStandardParking": true, + "availableStandardSpots": 9, + "totalCargoSpots": 0, + "hasCargoParking": false, + "availableCargoSpots": 0, + "startPriceAmount": 0, + "startPriceDuration": 12, + "mainPriceAmount": 10, + "mainPriceDuration": 12, + "maxDailyAmount": 0, + "isCluster": false, + "zoomDelta": 0, + "subscriptionId": 0, + "subscribedDoorName": null, + "subscribedLockType": 0, + "locationPricing": { + "locationPaymentType": 1, + "startPriceAmount": 0, + "startPriceDuration": 12, + "mainPriceAmount": 10, + "mainPriceDuration": 12 + }, + "id": 25 + }, + { + "name": "Faktry", + "latitude": 63.39686931503907, + "longitude": 10.401622501039789, + "street": null, + "postCode": null, + "municipality": null, + "openFrom": "2020-01-28T06:00:00Z", + "openTo": "2020-01-28T22:00:00Z", + "isAllDay": true, + "isInMaintenance": false, + "maintenanceEndingTime": null, + "maintenanceStartTime": null, + "isPrivate": false, + "isGroupMember": true, + "totalStandardSpots": 10, + "hasStandardParking": true, + "availableStandardSpots": 4, + "totalCargoSpots": 0, + "hasCargoParking": false, + "availableCargoSpots": 0, + "startPriceAmount": 0, + "startPriceDuration": 0, + "mainPriceAmount": 0, + "mainPriceDuration": 0, + "maxDailyAmount": 0, + "isCluster": false, + "zoomDelta": 0, + "subscriptionId": 0, + "subscribedDoorName": null, + "subscribedLockType": 0, + "locationPricing": { + "locationPaymentType": 1, + "startPriceAmount": 0, + "startPriceDuration": 0, + "mainPriceAmount": 0, + "mainPriceDuration": 0 + }, + "id": 26 + } + ] +} \ No newline at end of file diff --git a/src/ext-test/resources/vehicleparking/hslpark/facilities.json b/src/ext-test/resources/org/opentripplanner/ext/vehicleparking/hslpark/facilities.json similarity index 100% rename from src/ext-test/resources/vehicleparking/hslpark/facilities.json rename to src/ext-test/resources/org/opentripplanner/ext/vehicleparking/hslpark/facilities.json diff --git a/src/ext-test/resources/vehicleparking/hslpark/hubs.json b/src/ext-test/resources/org/opentripplanner/ext/vehicleparking/hslpark/hubs.json similarity index 100% rename from src/ext-test/resources/vehicleparking/hslpark/hubs.json rename to src/ext-test/resources/org/opentripplanner/ext/vehicleparking/hslpark/hubs.json diff --git a/src/ext-test/resources/vehicleparking/hslpark/utilizations.json b/src/ext-test/resources/org/opentripplanner/ext/vehicleparking/hslpark/utilizations.json similarity index 100% rename from src/ext-test/resources/vehicleparking/hslpark/utilizations.json rename to src/ext-test/resources/org/opentripplanner/ext/vehicleparking/hslpark/utilizations.json diff --git a/src/ext-test/resources/vehicleparking/parkapi/herrenberg.json b/src/ext-test/resources/org/opentripplanner/ext/vehicleparking/parkapi/herrenberg.json similarity index 100% rename from src/ext-test/resources/vehicleparking/parkapi/herrenberg.json rename to src/ext-test/resources/org/opentripplanner/ext/vehicleparking/parkapi/herrenberg.json diff --git a/src/ext-test/resources/vehicleparking/parkapi/parkapi-reutlingen.json b/src/ext-test/resources/org/opentripplanner/ext/vehicleparking/parkapi/parkapi-reutlingen.json similarity index 100% rename from src/ext-test/resources/vehicleparking/parkapi/parkapi-reutlingen.json rename to src/ext-test/resources/org/opentripplanner/ext/vehicleparking/parkapi/parkapi-reutlingen.json diff --git a/src/ext-test/resources/vehicleparking/bikely/bikely.json b/src/ext-test/resources/vehicleparking/bikely/bikely.json deleted file mode 100644 index ce2b4d87aa6..00000000000 --- a/src/ext-test/resources/vehicleparking/bikely/bikely.json +++ /dev/null @@ -1,2809 +0,0 @@ -{ - "result": [ - { - "name": "Husebybadet", - "availableParkingSpots": 4, - "totalParkingSpots":10, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 4, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 1 - }, - "address": { - "street": "Blisterhaugvegen 13", - "postCode": "7078", - "postName": "Saupstad", - "municipality": null, - "longitude": 10.351535699801943, - "latitude": 63.365653571508794 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 164 - }, - { - "name": "Sentrum P-Hus", - "availableParkingSpots": 8, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 0, - "mainPriceAmount": 199.0, - "mainPriceDurationHours": 0 - }, - "address": { - "street": "Teatergata", - "postCode": null, - "postName": null, - "municipality": null, - "longitude": 10.741571022211218, - "latitude": 59.91600756265333 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 115 - }, - { - "name": "Skien Fritidspark", - "availableParkingSpots": 2, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 0, - "mainPriceAmount": 0.0, - "mainPriceDurationHours": 0 - }, - "address": { - "street": "Moflatvegen", - "postCode": null, - "postName": null, - "municipality": "Skien", - "longitude": 9.595596391124074, - "latitude": 59.18662360320687 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 112 - }, - { - "name": "Trondheim Spektrum", - "availableParkingSpots": 12, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 4, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 1 - }, - "address": { - "street": "Trondheim Spektrum", - "postCode": null, - "postName": null, - "municipality": null, - "longitude": 10.378531574243146, - "latitude": 63.42748116576243 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 103 - }, - { - "name": "Amfi Steinkjer", - "availableParkingSpots": 3, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 4, - "mainPriceAmount": 20.0, - "mainPriceDurationHours": 24 - }, - "address": { - "street": "Sjøfartsgata 2", - "postCode": "7714 ", - "postName": "Steinkjer", - "municipality": null, - "longitude": 11.493187779423364, - "latitude": 64.01155740883044 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 102 - }, - { - "name": "Tyholmen ", - "availableParkingSpots": 2, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 10.0, - "startPriceDurationHours": 4, - "mainPriceAmount": 20.0, - "mainPriceDurationHours": 8 - }, - "address": { - "street": null, - "postCode": null, - "postName": null, - "municipality": null, - "longitude": 8.763968789298318, - "latitude": 58.45927282561365 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": "2022-02-16T07:47:14.369256Z", - "maintenanceEndingTime": "2022-02-16T21:00:52.169Z", - "isUnderMaintenance": true - }, - "id": 101 - }, - { - "name": "AMFI Ullevål Øst", - "availableParkingSpots": 3, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 1, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 1 - }, - "address": { - "street": "Kaj Munks vei", - "postCode": null, - "postName": "Oslo", - "municipality": null, - "longitude": 10.736078877999802, - "latitude": 59.94975795585445 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 100 - }, - { - "name": "VikelvfaretPOD", - "availableParkingSpots": 2, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 0, - "mainPriceAmount": 0.0, - "mainPriceDurationHours": 0 - }, - "address": { - "street": "Strandliveien", - "postCode": null, - "postName": null, - "municipality": null, - "longitude": 10.53595748700983, - "latitude": 63.42116945997451 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": "2022-08-11T06:48:54.409897Z", - "maintenanceEndingTime": "2022-08-12T06:48:00Z", - "isUnderMaintenance": false - }, - "id": 99 - }, - { - "name": "Tveita Senter", - "availableParkingSpots": 3, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 10.0, - "startPriceDurationHours": 1, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 1 - }, - "address": { - "street": "Wilhelm Stenersens vei", - "postCode": null, - "postName": null, - "municipality": null, - "longitude": 10.841919396865917, - "latitude": 59.913573733717875 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": "2022-09-27T14:32:43.02938Z", - "maintenanceEndingTime": "2022-09-28T10:00:00Z", - "isUnderMaintenance": false - }, - "id": 98 - }, - { - "name": "Manglerud Senter", - "availableParkingSpots": 4, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 10.0, - "startPriceDurationHours": 1, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 1 - }, - "address": { - "street": "Plogveien", - "postCode": null, - "postName": null, - "municipality": null, - "longitude": 10.812699321967543, - "latitude": 59.89730171094624 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": "2022-06-25T21:03:44.175534Z", - "maintenanceEndingTime": "2022-06-27T05:00:00Z", - "isUnderMaintenance": true - }, - "id": 97 - }, - { - "name": "Lambertseter Senter", - "availableParkingSpots": 4, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 10.0, - "startPriceDurationHours": 1, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 1 - }, - "address": { - "street": "Cecilie Thoresens vei", - "postCode": null, - "postName": "Oslo", - "municipality": null, - "longitude": 10.811687688348668, - "latitude": 59.87397901539979 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 95 - }, - { - "name": "test sub", - "availableParkingSpots": 1, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 0, - "mainPriceAmount": 0.0, - "mainPriceDurationHours": 0 - }, - "address": { - "street": null, - "postCode": null, - "postName": null, - "municipality": null, - "longitude": 0.0, - "latitude": 0.0 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 94 - }, - { - "name": "Lagunen Storsenter", - "availableParkingSpots": 9, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 3, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 1 - }, - "address": { - "street": "Laguneveien 1", - "postCode": "5239", - "postName": "Rådal", - "municipality": null, - "longitude": 5.329471960391827, - "latitude": 60.29717349679797 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 93 - }, - { - "name": "IMEI Test Telenor", - "availableParkingSpots": 1, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 0, - "mainPriceAmount": 0.0, - "mainPriceDurationHours": 0 - }, - "address": { - "street": "Vikelvfaret 4", - "postCode": null, - "postName": null, - "municipality": null, - "longitude": 10.536120271331493, - "latitude": 63.421001992107435 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": "2021-09-08T09:50:48.224668Z", - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 92 - }, - { - "name": "Kolsås Sykkelhotell", - "availableParkingSpots": 14, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 24, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 12 - }, - "address": { - "street": "Brynsveien", - "postCode": null, - "postName": null, - "municipality": null, - "longitude": 10.50149743216143, - "latitude": 59.91468587108326 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": "2022-10-17T03:00:00Z", - "maintenanceEndingTime": "2022-10-20T03:00:00Z", - "isUnderMaintenance": false - }, - "id": 91 - }, - { - "name": "Ranheimsveien", - "availableParkingSpots": 5, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 10.0, - "startPriceDurationHours": 12, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 12 - }, - "address": { - "street": "Ranheimsveien", - "postCode": null, - "postName": null, - "municipality": null, - "longitude": 10.470519111242798, - "latitude": 63.43253182042508 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 89 - }, - { - "name": "Skien LastesykkelHotell", - "availableParkingSpots": 5, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 0, - "mainPriceAmount": 0.0, - "mainPriceDurationHours": 0 - }, - "address": { - "street": "Hesselbergs gate", - "postCode": null, - "postName": null, - "municipality": null, - "longitude": 9.608610388358091, - "latitude": 59.20960955258356 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 85 - }, - { - "name": "Sandefjord Torg", - "availableParkingSpots": 7, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 10.0, - "startPriceDurationHours": 12, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 12 - }, - "address": { - "street": "Torget", - "postCode": null, - "postName": null, - "municipality": null, - "longitude": 10.22593781770841, - "latitude": 59.12977259494621 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 84 - }, - { - "name": "Kirkegata", - "availableParkingSpots": 7, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 15.0, - "startPriceDurationHours": 12, - "mainPriceAmount": 15.0, - "mainPriceDurationHours": 12 - }, - "address": { - "street": "Kirkegata", - "postCode": null, - "postName": null, - "municipality": null, - "longitude": 10.661979503627865, - "latitude": 59.43538193911775 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 83 - }, - { - "name": "AMFI Ullevål Nord", - "availableParkingSpots": 9, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 1, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 1 - }, - "address": { - "street": "Ullevål", - "postCode": null, - "postName": null, - "municipality": null, - "longitude": 10.732811552248286, - "latitude": 59.94971992531088 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": "2022-03-02T11:53:34.699437Z", - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 81 - }, - { - "name": "CC Vest", - "availableParkingSpots": 6, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 3, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 1 - }, - "address": { - "street": "Lilleakerveien 16", - "postCode": "0283", - "postName": "Oslo", - "municipality": null, - "longitude": 10.636677951126892, - "latitude": 59.91742604033082 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": "2022-05-13T22:56:29.291436Z", - "maintenanceEndingTime": "2022-05-20T22:56:00Z", - "isUnderMaintenance": false - }, - "id": 78 - }, - { - "name": "Jekta Storsenter", - "availableParkingSpots": 8, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 10.0, - "startPriceDurationHours": 1, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 1 - }, - "address": { - "street": "Karlsøyvegen 12", - "postCode": "9015", - "postName": "Tromsø", - "municipality": null, - "longitude": 18.923834531786863, - "latitude": 69.67385798911647 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 77 - }, - { - "name": "Bike Fixx", - "availableParkingSpots": 2, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 0, - "mainPriceAmount": 0.0, - "mainPriceDurationHours": 0 - }, - "address": { - "street": "Filipstad", - "postCode": null, - "postName": null, - "municipality": null, - "longitude": 10.719912502614747, - "latitude": 59.91008276557721 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 118 - }, - { - "name": "Tromsø Havneterminal", - "availableParkingSpots": 5, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 1, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 1 - }, - "address": { - "street": "Strandtorget", - "postCode": "9008 ", - "postName": "Tromsø", - "municipality": null, - "longitude": 18.95831396328195, - "latitude": 69.64723042234459 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": "2021-12-01T13:00:46.591088Z", - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 76 - }, - { - "name": "Punkt Fornebu", - "availableParkingSpots": 4, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 12, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 1 - }, - "address": { - "street": "Forneburingen 248", - "postCode": "1364", - "postName": "Fornebu", - "municipality": null, - "longitude": 10.622245451194132, - "latitude": 59.89786621862049 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 119 - }, - { - "name": "Moholt Allmenning Privat", - "availableParkingSpots": 5, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 0, - "mainPriceAmount": 199.0, - "mainPriceDurationHours": 0 - }, - "address": { - "street": "Moholt Allmenning", - "postCode": null, - "postName": null, - "municipality": "Trondheim", - "longitude": 10.433525875945952, - "latitude": 63.41153478175877 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 122 - }, - { - "name": "Rådhuskvartalet", - "availableParkingSpots": 10, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 4, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 1 - }, - "address": { - "street": "Peter Motzfeldts Gate 1a", - "postCode": "5017", - "postName": "Bergen", - "municipality": null, - "longitude": 5.328588666261149, - "latitude": 60.391802464650524 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 152 - }, - { - "name": "Majorstuen test", - "availableParkingSpots": 1, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 0, - "mainPriceAmount": 0.0, - "mainPriceDurationHours": 0 - }, - "address": { - "street": null, - "postCode": null, - "postName": null, - "municipality": null, - "longitude": 0.0, - "latitude": 0.0 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 151 - }, - { - "name": "Vikelvfaret ", - "availableParkingSpots": 2, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 0, - "mainPriceAmount": 0.0, - "mainPriceDurationHours": 0 - }, - "address": { - "street": null, - "postCode": null, - "postName": null, - "municipality": null, - "longitude": 10.536375440686458, - "latitude": 63.421421395112496 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 150 - }, - { - "name": "Gjøvik Skysstasjon", - "availableParkingSpots": 19, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 10, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 6 - }, - "address": { - "street": null, - "postCode": "2821", - "postName": " Gjøvik", - "municipality": null, - "longitude": 10.693611705915028, - "latitude": 60.7978828615738 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 147 - }, - { - "name": "Bikely HOME", - "availableParkingSpots": 1, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 0, - "mainPriceAmount": 0.0, - "mainPriceDurationHours": 0 - }, - "address": { - "street": null, - "postCode": null, - "postName": null, - "municipality": null, - "longitude": 0.0, - "latitude": 0.0 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 146 - }, - { - "name": "E-bike Pool", - "availableParkingSpots": 1, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 0, - "mainPriceAmount": 0.0, - "mainPriceDurationHours": 0 - }, - "address": { - "street": null, - "postCode": null, - "postName": null, - "municipality": null, - "longitude": 10.536298698980348, - "latitude": 63.421120823556926 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 145 - }, - { - "name": "CC Gjøvik Strandgata", - "availableParkingSpots": 4, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 3, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 1 - }, - "address": { - "street": "Jernbanesvingen 6", - "postCode": "2821", - "postName": "Gjøvik", - "municipality": "Innlandet", - "longitude": 10.692266848604755, - "latitude": 60.79934165258753 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 144 - }, - { - "name": "Tranberghallen", - "availableParkingSpots": 10, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 10, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 1 - }, - "address": { - "street": "Bjørnsvebakken 2", - "postCode": "2819", - "postName": "Gjøvik", - "municipality": null, - "longitude": 10.674990942984651, - "latitude": 60.81155519367008 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 143 - }, - { - "name": "CC Gjøvik Nord", - "availableParkingSpots": 4, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 3, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 1 - }, - "address": { - "street": "Jernbanesvingen 6", - "postCode": "2821", - "postName": "Gjøvik", - "municipality": null, - "longitude": 10.692767469501572, - "latitude": 60.80095906879147 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 142 - }, - { - "name": "AtB Melhus Skysstasjon", - "availableParkingSpots": 3, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 4, - "mainPriceAmount": 20.0, - "mainPriceDurationHours": 24 - }, - "address": { - "street": "Jernbanevegen 12, ", - "postCode": "7224 ", - "postName": "Melhus", - "municipality": null, - "longitude": 10.27720350042717, - "latitude": 63.28464073896281 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 140 - }, - { - "name": "Kvadrat Kjøpesenter NORD", - "availableParkingSpots": 2, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 1, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 2 - }, - "address": { - "street": null, - "postCode": null, - "postName": null, - "municipality": null, - "longitude": 5.721216223802292, - "latitude": 58.87746037465877 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": "2022-03-23T14:15:41.744292Z", - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 139 - }, - { - "name": "Prestegaten", - "availableParkingSpots": 9, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 10.0, - "startPriceDurationHours": 12, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 12 - }, - "address": { - "street": "Nedre Langgate 37", - "postCode": "3126", - "postName": "Tønsberg", - "municipality": null, - "longitude": 10.406923125009499, - "latitude": 59.26559407972196 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 48 - }, - { - "name": "Epsilon Cities PLC demo", - "availableParkingSpots": 2, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 0, - "mainPriceAmount": 0.0, - "mainPriceDurationHours": 0 - }, - "address": { - "street": null, - "postCode": null, - "postName": null, - "municipality": null, - "longitude": 5.600301917104393, - "latitude": 51.143920796723506 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 134 - }, - { - "name": "Prinsen Kino", - "availableParkingSpots": 12, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 4, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 1 - }, - "address": { - "street": "Prinsen Kino", - "postCode": null, - "postName": "Trondheim", - "municipality": "Trondheim", - "longitude": 10.392912861698846, - "latitude": 63.42655470553182 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": "2021-12-21T14:26:01.518642Z", - "maintenanceEndingTime": "2021-12-22T09:59:00Z", - "isUnderMaintenance": false - }, - "id": 131 - }, - { - "name": "P-Hus Aker Brygge - Felt C", - "availableParkingSpots": 4, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 1, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 1 - }, - "address": { - "street": "Sjøgata 4", - "postCode": "0250 ", - "postName": "Oslo", - "municipality": null, - "longitude": 10.723890489730298, - "latitude": 59.91039271039033 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 130 - }, - { - "name": "Kvadrat Kjøpesenter SØR-ØST", - "availableParkingSpots": 2, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 1, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 2 - }, - "address": { - "street": null, - "postCode": null, - "postName": "Sandnes", - "municipality": null, - "longitude": 5.721982699172825, - "latitude": 58.87578295212405 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": "2022-03-23T14:15:53.56905Z", - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 129 - }, - { - "name": "Lillestrøm Parkering Storgata", - "availableParkingSpots": 4, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 20.0, - "startPriceDurationHours": 4, - "mainPriceAmount": 20.0, - "mainPriceDurationHours": 12 - }, - "address": { - "street": "Storgata 7", - "postCode": "2000", - "postName": "Lillestrøm", - "municipality": null, - "longitude": 11.047494272702355, - "latitude": 59.9551079846462 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 128 - }, - { - "name": "Kvadrat Kjøpesenter SØR-VEST", - "availableParkingSpots": 2, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 1, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 2 - }, - "address": { - "street": null, - "postCode": null, - "postName": "Sandnes", - "municipality": null, - "longitude": 5.721655395609253, - "latitude": 58.87584612393457 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": "2022-03-23T14:16:08.835289Z", - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 127 - }, - { - "name": "City Lade", - "availableParkingSpots": 4, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 3, - "mainPriceAmount": 20.0, - "mainPriceDurationHours": 1 - }, - "address": { - "street": "Håkon 7.gt", - "postCode": null, - "postName": null, - "municipality": null, - "longitude": 10.446035404436271, - "latitude": 63.44294160482934 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": "2022-01-04T14:25:22.808388Z", - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 126 - }, - { - "name": "Onepark Sentrum P-hus 1B", - "availableParkingSpots": 4, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 20.0, - "startPriceDurationHours": 12, - "mainPriceAmount": 20.0, - "mainPriceDurationHours": 12 - }, - "address": { - "street": "Pilestredet", - "postCode": null, - "postName": null, - "municipality": null, - "longitude": 10.742243366982436, - "latitude": 59.916147524186805 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 124 - }, - { - "name": "Lerkendal Studentby Privat", - "availableParkingSpots": 5, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 0, - "mainPriceAmount": 199.0, - "mainPriceDurationHours": 0 - }, - "address": { - "street": "Lerkendal", - "postCode": null, - "postName": null, - "municipality": "Trondheim", - "longitude": 10.400520415564788, - "latitude": 63.41156976316326 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 123 - }, - { - "name": "Nedre Berg Privat", - "availableParkingSpots": 5, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 0, - "mainPriceAmount": 199.0, - "mainPriceDurationHours": 0 - }, - "address": { - "street": "Nedre Berg", - "postCode": null, - "postName": null, - "municipality": "Trondheim", - "longitude": 10.412552683911223, - "latitude": 63.41457636233408 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 121 - }, - { - "name": "Bruveien parkering", - "availableParkingSpots": 8, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 0, - "mainPriceAmount": 0.0, - "mainPriceDurationHours": 0 - }, - "address": { - "street": "Bruveien", - "postCode": "3400", - "postName": "Lier", - "municipality": null, - "longitude": 10.243007215803273, - "latitude": 59.787372973019906 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 47 - }, - { - "name": "Slottet sykkelparkering", - "availableParkingSpots": 1, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 0, - "mainPriceAmount": 15.00, - "mainPriceDurationHours": 12 - }, - "address": { - "street": "Tordenskjolds gate 13", - "postCode": "4612", - "postName": "Kristiansand", - "municipality": null, - "longitude": 7.987953559998118, - "latitude": 58.147399578615044 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 20 - }, - { - "name": "Ibsenhuset", - "availableParkingSpots": 2, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 0, - "mainPriceAmount": 0.0, - "mainPriceDurationHours": 0 - }, - "address": { - "street": "Hesselbergs gate", - "postCode": null, - "postName": null, - "municipality": null, - "longitude": 9.605486702117382, - "latitude": 59.208581031898134 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 30 - }, - { - "name": "Gjettum T-banestasjon", - "availableParkingSpots": 3, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 12, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 1 - }, - "address": { - "street": "Kolsåsstien", - "postCode": "1352", - "postName": " Kolsås", - "municipality": null, - "longitude": 10.531885281680088, - "latitude": 59.908370304935886 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": "2022-09-21T08:49:44.620258Z", - "maintenanceEndingTime": "2022-09-26T10:00:00Z", - "isUnderMaintenance": false - }, - "id": 7 - }, - { - "name": "Lager 11 / Grip ", - "availableParkingSpots": 8, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 1, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 1 - }, - "address": { - "street": "Sluppenvegen 11", - "postCode": "7037", - "postName": "Trondheim", - "municipality": null, - "longitude": 10.396483571230378, - "latitude": 63.39808834594847 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 64 - }, - { - "name": "Ringerike Rådhus", - "availableParkingSpots": 10, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 0, - "mainPriceAmount": 0.0, - "mainPriceDurationHours": 0 - }, - "address": { - "street": "Benterudgata 1", - "postCode": "3511", - "postName": "Hønefoss", - "municipality": null, - "longitude": 10.255685034595844, - "latitude": 60.16016458363586 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 56 - }, - { - "name": "Leutenhaven ", - "availableParkingSpots": 3, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 4, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 1 - }, - "address": { - "street": "Erling Skakkes gate", - "postCode": "7012 ", - "postName": "Trondheim", - "municipality": null, - "longitude": 10.389317891553075, - "latitude": 63.42922275870133 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 40 - }, - { - "name": "Bergen Bystasjon", - "availableParkingSpots": 4, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 4, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 1 - }, - "address": { - "street": null, - "postCode": null, - "postName": null, - "municipality": null, - "longitude": 5.333323897536757, - "latitude": 60.38902516311156 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 33 - }, - { - "name": "KLP Teknobyen", - "availableParkingSpots": 5, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 2, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 1 - }, - "address": { - "street": "Abels Gate 5", - "postCode": null, - "postName": "Trondheim", - "municipality": null, - "longitude": 10.394627580519499, - "latitude": 63.41531182507022 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 59 - }, - { - "name": "Moholt Allmenning", - "availableParkingSpots": 4, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 15.0, - "startPriceDurationHours": 2, - "mainPriceAmount": 15.0, - "mainPriceDurationHours": 12 - }, - "address": { - "street": null, - "postCode": null, - "postName": null, - "municipality": null, - "longitude": 10.433145179115732, - "latitude": 63.411450813462544 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 70 - }, - { - "name": "Jar T-banestasjon", - "availableParkingSpots": 7, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 12, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 1 - }, - "address": { - "street": null, - "postCode": null, - "postName": null, - "municipality": null, - "longitude": 10.619360985274895, - "latitude": 59.92656137276969 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": "2022-09-21T08:49:18.151307Z", - "maintenanceEndingTime": "2022-09-26T10:00:00Z", - "isUnderMaintenance": false - }, - "id": 54 - }, - { - "name": "Bergen Marken", - "availableParkingSpots": 5, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 4, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 1 - }, - "address": { - "street": null, - "postCode": null, - "postName": null, - "municipality": null, - "longitude": 5.332616662863372, - "latitude": 60.390714704251785 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 34 - }, - { - "name": "Heggedal Idrettsanlegg", - "availableParkingSpots": 8, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 0, - "mainPriceAmount": 0.0, - "mainPriceDurationHours": 0 - }, - "address": { - "street": "Øvre Gjellum vei 4", - "postCode": "1389", - "postName": null, - "municipality": null, - "longitude": 10.449085122930573, - "latitude": 59.79219663780587 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 36 - }, - { - "name": "Majorstuen T-bane", - "availableParkingSpots": 8, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 1, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 1 - }, - "address": { - "street": "Majorstuen", - "postCode": null, - "postName": "Oslo", - "municipality": null, - "longitude": 10.714455875051554, - "latitude": 59.92966366431081 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": "2022-06-25T21:03:12.9946Z", - "maintenanceEndingTime": "2022-06-27T21:03:00Z", - "isUnderMaintenance": false - }, - "id": 75 - }, - { - "name": "Arnestad Idrettsanlegg", - "availableParkingSpots": 9, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 0, - "mainPriceAmount": 0.0, - "mainPriceDurationHours": 0 - }, - "address": { - "street": "Slemmestadveien 468", - "postCode": "1390", - "postName": null, - "municipality": null, - "longitude": 10.486714884883641, - "latitude": 59.802364746495144 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 35 - }, - { - "name": "Risenga Svømmehall", - "availableParkingSpots": 10, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 0, - "mainPriceAmount": 0.0, - "mainPriceDurationHours": 0 - }, - "address": { - "street": "Brages vei 8", - "postCode": "1387", - "postName": null, - "municipality": null, - "longitude": 10.442563632289863, - "latitude": 59.82506989908911 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 37 - }, - { - "name": "Farmannstorvet", - "availableParkingSpots": 8, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 10.0, - "startPriceDurationHours": 12, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 12 - }, - "address": { - "street": "Farmannstorvet", - "postCode": "3126", - "postName": "Tønsberg", - "municipality": null, - "longitude": 10.409131331358115, - "latitude": 59.26949087588371 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 49 - }, - { - "name": "Thon Hotell", - "availableParkingSpots": 2, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 10.0, - "startPriceDurationHours": 12, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 12 - }, - "address": { - "street": "Nedre Langgate 40", - "postCode": "3126", - "postName": "Tønsberg", - "municipality": null, - "longitude": 10.403879519443562, - "latitude": 59.26742751013589 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": "2022-09-08T13:07:32.593017Z", - "maintenanceEndingTime": "2022-09-09T05:30:00Z", - "isUnderMaintenance": false - }, - "id": 158 - }, - { - "name": "Re-torvet", - "availableParkingSpots": 4, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 10.0, - "startPriceDurationHours": 12, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 12 - }, - "address": { - "street": "Kåpeveien 5", - "postCode": "3174", - "postName": "Tønsberg", - "municipality": null, - "longitude": 10.265188655718509, - "latitude": 59.37137931547057 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": "2022-09-08T13:07:11.735986Z", - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 159 - }, - { - "name": "Bikely kontor", - "availableParkingSpots": 2, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 0, - "mainPriceAmount": 0.0, - "mainPriceDurationHours": 0 - }, - "address": { - "street": null, - "postCode": null, - "postName": null, - "municipality": null, - "longitude": 10.536038875579834, - "latitude": 63.42140508377716 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 149 - }, - { - "name": "Jernbanebommene", - "availableParkingSpots": 4, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 10.0, - "startPriceDurationHours": 12, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 12 - }, - "address": { - "street": "Jernbanegaten 2", - "postCode": "3110 ", - "postName": "Tønsberg", - "municipality": null, - "longitude": 10.41125267456441, - "latitude": 59.271186192203146 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": "2022-09-08T13:07:48.684408Z", - "maintenanceEndingTime": "2022-09-09T05:30:00Z", - "isUnderMaintenance": false - }, - "id": 157 - }, - { - "name": "Pirbadet", - "availableParkingSpots": 7, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 4, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 1 - }, - "address": { - "street": " Havnegata 12", - "postCode": "7010", - "postName": "Trondheim", - "municipality": null, - "longitude": 10.400604571667476, - "latitude": 63.440104921574346 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": "2022-08-23T14:10:21.24962Z", - "maintenanceEndingTime": "2022-08-31T12:00:00Z", - "isUnderMaintenance": false - }, - "id": 155 - }, - { - "name": "Oasen Terminal", - "availableParkingSpots": 16, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 4, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 1 - }, - "address": { - "street": "Oasen terminal, 5147 Fyllingsdalen", - "postCode": null, - "postName": null, - "municipality": null, - "longitude": 5.287504678584067, - "latitude": 60.34898300059523 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 156 - }, - { - "name": "Lerkendal Studentby", - "availableParkingSpots": 5, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 15.0, - "startPriceDurationHours": 2, - "mainPriceAmount": 15.0, - "mainPriceDurationHours": 12 - }, - "address": { - "street": null, - "postCode": null, - "postName": null, - "municipality": null, - "longitude": 10.40028702641794, - "latitude": 63.41166855841642 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 68 - }, - { - "name": "NAV Ringerike", - "availableParkingSpots": 7, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 12, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 12 - }, - "address": { - "street": "Hønefoss Bru 2", - "postCode": "3510", - "postName": "Hønefoss", - "municipality": null, - "longitude": 10.25959259066608, - "latitude": 60.1662774431612 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 57 - }, - { - "name": "Sletten Senter", - "availableParkingSpots": 9, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 4, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 1 - }, - "address": { - "street": " Vilhelm Bjerknes vei", - "postCode": null, - "postName": null, - "municipality": null, - "longitude": 5.358242600432832, - "latitude": 60.35640814540556 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 63 - }, - { - "name": "Nedre Berg", - "availableParkingSpots": 3, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 15.0, - "startPriceDurationHours": 2, - "mainPriceAmount": 15.0, - "mainPriceDurationHours": 12 - }, - "address": { - "street": null, - "postCode": null, - "postName": null, - "municipality": null, - "longitude": 10.41249315628851, - "latitude": 63.41457139184208 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 72 - }, - { - "name": "Holmen Ishall", - "availableParkingSpots": 11, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 12, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 1 - }, - "address": { - "street": "Vogellund 26 ", - "postCode": "1394", - "postName": null, - "municipality": null, - "longitude": 10.484556243805073, - "latitude": 59.853488879299015 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 38 - }, - { - "name": "Porsgrunn Stasjon", - "availableParkingSpots": 5, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 0, - "mainPriceAmount": 0.0, - "mainPriceDurationHours": 0 - }, - "address": { - "street": null, - "postCode": null, - "postName": null, - "municipality": null, - "longitude": 9.658452655675983, - "latitude": 59.1401227511141 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 25 - }, - { - "name": "Faktry", - "availableParkingSpots": 4, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 0, - "mainPriceAmount": 0.0, - "mainPriceDurationHours": 0 - }, - "address": { - "street": null, - "postCode": null, - "postName": null, - "municipality": null, - "longitude": 10.401622501039789, - "latitude": 63.39686931503907 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": "2022-04-13T08:12:16.611434Z", - "maintenanceEndingTime": "2022-04-19T07:00:00Z", - "isUnderMaintenance": false - }, - "id": 26 - }, - { - "name": "Skjelsvik Terminal", - "availableParkingSpots": 2, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 0, - "mainPriceAmount": 0.0, - "mainPriceDurationHours": 0 - }, - "address": { - "street": null, - "postCode": null, - "postName": null, - "municipality": null, - "longitude": 9.687602185911448, - "latitude": 59.09468648359441 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 29 - }, - { - "name": "Ørjaveita", - "availableParkingSpots": 9, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 4, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 1 - }, - "address": { - "street": "Ørjaveita", - "postCode": "7010", - "postName": "Trondheim", - "municipality": null, - "longitude": 10.396437736776587, - "latitude": 63.43390486150696 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": "2022-09-30T07:23:33.102315Z", - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 24 - }, - { - "name": "Botilrud", - "availableParkingSpots": 4, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 0, - "mainPriceAmount": 0.0, - "mainPriceDurationHours": 0 - }, - "address": { - "street": "Norderhovsveien", - "postCode": "3512", - "postName": "Hønefoss", - "municipality": null, - "longitude": 10.274488364176818, - "latitude": 60.12984784225455 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 43 - }, - { - "name": "Høvik Skole", - "availableParkingSpots": 6, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 0, - "mainPriceAmount": 0.0, - "mainPriceDurationHours": 0 - }, - "address": { - "street": null, - "postCode": null, - "postName": null, - "municipality": null, - "longitude": 10.239748734466318, - "latitude": 59.75941171762161 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 31 - }, - { - "name": "AtB Steinkjer Stasjon", - "availableParkingSpots": 3, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 4, - "mainPriceAmount": 20.0, - "mainPriceDurationHours": 24 - }, - "address": { - "street": "Strandvegen", - "postCode": "7713", - "postName": " Steinkjer", - "municipality": null, - "longitude": 11.495342431116114, - "latitude": 64.01218345882226 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": "2022-03-29T10:27:56.349993Z", - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 21 - }, - { - "name": "Bragernes Torg", - "availableParkingSpots": 5, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 10, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 1 - }, - "address": { - "street": "Bragernes torg øvre", - "postCode": null, - "postName": "Drammen", - "municipality": null, - "longitude": 10.203655055754055, - "latitude": 59.74317281589255 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": "2021-10-24T06:46:15.535931Z", - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 52 - }, - { - "name": "PirSenteret Elsykkel-pool", - "availableParkingSpots": 5, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 10.0, - "startPriceDurationHours": 0, - "mainPriceAmount": 0.0, - "mainPriceDurationHours": 0 - }, - "address": { - "street": "Havnegata 9", - "postCode": "7010", - "postName": "Trondheim", - "municipality": null, - "longitude": 10.402578587946673, - "latitude": 63.44101099094018 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": "2021-04-29T09:00:00Z", - "isUnderMaintenance": false - }, - "id": 11 - }, - { - "name": "Sirkus Shopping", - "availableParkingSpots": 4, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 2, - "mainPriceAmount": 20.0, - "mainPriceDurationHours": 1 - }, - "address": { - "street": "Sirkus Shopping", - "postCode": "7044", - "postName": "Trondheim", - "municipality": null, - "longitude": 10.454789422056505, - "latitude": 63.43590131147719 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 46 - }, - { - "name": "Stokke Stasjon", - "availableParkingSpots": 6, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 12, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 12 - }, - "address": { - "street": "Tassebekkveien 2, 3160 Stokke", - "postCode": null, - "postName": null, - "municipality": null, - "longitude": 10.300562831301017, - "latitude": 59.22144536511286 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 165 - }, - { - "name": "Lørenskog sykkelhotell", - "availableParkingSpots": 74, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 5.0, - "startPriceDurationHours": 12, - "mainPriceAmount": 5.0, - "mainPriceDurationHours": 12 - }, - "address": { - "street": "Bibliotekgata", - "postCode": "1470", - "postName": "Lørenskog", - "municipality": null, - "longitude": 10.955770147334647, - "latitude": 59.92782951468654 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": "2021-09-02T12:10:25.957906Z", - "maintenanceEndingTime": "2021-09-06T21:55:00Z", - "isUnderMaintenance": false - }, - "id": 9 - }, - { - "name": "Nittedal Stasjon", - "availableParkingSpots": 4, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 12, - "mainPriceAmount": 15.0, - "mainPriceDurationHours": 12 - }, - "address": { - "street": null, - "postCode": null, - "postName": null, - "municipality": null, - "longitude": 10.864211782361556, - "latitude": 60.05816419277446 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": "2022-09-22T07:12:14.17422Z", - "maintenanceEndingTime": "2022-09-23T14:01:00Z", - "isUnderMaintenance": false - }, - "id": 50 - }, - { - "name": "Skien Stasjon", - "availableParkingSpots": 3, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 0, - "mainPriceAmount": 0.0, - "mainPriceDurationHours": 0 - }, - "address": { - "street": null, - "postCode": null, - "postName": null, - "municipality": null, - "longitude": 9.602695726983418, - "latitude": 59.218894232081524 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 27 - }, - { - "name": "Skien SykkelHotell", - "availableParkingSpots": 38, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 0, - "mainPriceAmount": 0.0, - "mainPriceDurationHours": 0 - }, - "address": { - "street": null, - "postCode": null, - "postName": null, - "municipality": null, - "longitude": 9.608779312105321, - "latitude": 59.20951432347752 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 61 - }, - { - "name": "Hønefoss Bussteminal", - "availableParkingSpots": 7, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 12, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 12 - }, - "address": { - "street": "Hønefoss Bussteminal - Stangs gate 9", - "postCode": "3510", - "postName": "Hønefoss", - "municipality": null, - "longitude": 10.2580229269916, - "latitude": 60.1645916747253 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 44 - }, - { - "name": "Østerås T-Banestasjon", - "availableParkingSpots": 3, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 12, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 1 - }, - "address": { - "street": "104 Eiksveien", - "postCode": "1361", - "postName": " Østerås", - "municipality": null, - "longitude": 10.608225677856922, - "latitude": 59.939540539600415 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": "2022-09-21T08:50:03.004692Z", - "maintenanceEndingTime": "2022-09-26T10:00:00Z", - "isUnderMaintenance": false - }, - "id": 10 - }, - { - "name": "Pirsenteret", - "availableParkingSpots": 4, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 10.0, - "startPriceDurationHours": 1, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 1 - }, - "address": { - "street": "Havnegata 9", - "postCode": "7010", - "postName": "Trondheim", - "municipality": null, - "longitude": 10.403231564385752, - "latitude": 63.44068572623346 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 74 - }, - { - "name": "Vefsn VGS", - "availableParkingSpots": 2, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 0, - "mainPriceAmount": 0.0, - "mainPriceDurationHours": 0 - }, - "address": { - "street": "Kirkegata 9", - "postCode": "8656", - "postName": "Mosjøen", - "municipality": null, - "longitude": 13.192551834307421, - "latitude": 65.8375053559191 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 45 - }, - { - "name": "Hvervenkastet", - "availableParkingSpots": 4, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 0, - "mainPriceAmount": 0.0, - "mainPriceDurationHours": 0 - }, - "address": { - "street": "Arnegårdsveien", - "postCode": "3511", - "postName": "Hønefoss", - "municipality": null, - "longitude": 10.251621386917051, - "latitude": 60.148912920668295 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 42 - }, - { - "name": "Universitetsbiblioteket", - "availableParkingSpots": 8, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 4, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 1 - }, - "address": { - "street": "Haakon Sheteligs plass", - "postCode": null, - "postName": null, - "municipality": null, - "longitude": 5.318577002636498, - "latitude": 60.38765367051367 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 62 - }, - { - "name": "KLP EL-pool", - "availableParkingSpots": 1, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 0, - "mainPriceAmount": 0.0, - "mainPriceDurationHours": 0 - }, - "address": { - "street": "Abels Gate 5", - "postCode": null, - "postName": "Trondheim", - "municipality": "Trondheim", - "longitude": 10.394825378437904, - "latitude": 63.41533303540145 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 60 - }, - { - "name": "Lier Bussterminal", - "availableParkingSpots": 7, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 0.0, - "startPriceDurationHours": 0, - "mainPriceAmount": 0.0, - "mainPriceDurationHours": 0 - }, - "address": { - "street": "Lierbyen bussterminal", - "postCode": "3400", - "postName": " Lier", - "municipality": null, - "longitude": 10.242350688317096, - "latitude": 59.787017349097006 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": null, - "maintenanceEndingTime": null, - "isUnderMaintenance": false - }, - "id": 32 - }, - { - "name": "Hamar Stasjon", - "availableParkingSpots": 10, - "totalParkingSpots": 0, - "price": { - "startPriceAmount": 10.0, - "startPriceDurationHours": 12, - "mainPriceAmount": 10.0, - "mainPriceDurationHours": 12 - }, - "address": { - "street": "Stangevegen 34", - "postCode": "2317", - "postName": "Hamar", - "municipality": null, - "longitude": 11.082666445627662, - "latitude": 60.79116600147056 - }, - "workingHours": { - "openFrom": null, - "openTo": null, - "allDay": true, - "maintenanceStartTime": "2022-09-11T17:21:56.166899Z", - "maintenanceEndingTime": "2022-09-12T05:01:00Z", - "isUnderMaintenance": false - }, - "id": 80 - } - ], - "targetUrl": null, - "success": true, - "error": null, - "unAuthorizedRequest": false, - "__abp": true -} \ No newline at end of file diff --git a/src/ext/java/org/opentripplanner/ext/interactivelauncher/InteractiveOtpMain.java b/src/ext/java/org/opentripplanner/ext/interactivelauncher/InteractiveOtpMain.java index 43061ee2b62..a58b8f617c2 100644 --- a/src/ext/java/org/opentripplanner/ext/interactivelauncher/InteractiveOtpMain.java +++ b/src/ext/java/org/opentripplanner/ext/interactivelauncher/InteractiveOtpMain.java @@ -31,6 +31,7 @@ private void run() { } private void startOtp() { + model.save(); startDebugControllerAndSetupRequestInterceptor(); System.out.println("Start OTP: " + model + "\n"); diff --git a/src/ext/java/org/opentripplanner/ext/interactivelauncher/Model.java b/src/ext/java/org/opentripplanner/ext/interactivelauncher/Model.java index 59682082b90..d4e55ac6992 100644 --- a/src/ext/java/org/opentripplanner/ext/interactivelauncher/Model.java +++ b/src/ext/java/org/opentripplanner/ext/interactivelauncher/Model.java @@ -55,7 +55,7 @@ private static Model readFromFile() { } } - private void save() { + void save() { try { var mapper = new ObjectMapper().configure(SerializationFeature.INDENT_OUTPUT, true); mapper.writeValue(MODEL_FILE, this); diff --git a/src/ext/java/org/opentripplanner/ext/restapi/mapping/LegacyBicycleOptimizeType.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/LegacyBicycleOptimizeType.java deleted file mode 100644 index ff50a03534b..00000000000 --- a/src/ext/java/org/opentripplanner/ext/restapi/mapping/LegacyBicycleOptimizeType.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.opentripplanner.ext.restapi.mapping; - -import org.opentripplanner.routing.core.BicycleOptimizeType; - -/** - * Bicycle optimization types that are only meant to be used by the REST API. Related to {@link org.opentripplanner.routing.core.BicycleOptimizeType} - */ -public enum LegacyBicycleOptimizeType { - QUICK, - SAFE, - FLAT, - GREENWAYS, - TRIANGLE; - - public static BicycleOptimizeType map(LegacyBicycleOptimizeType type) { - return switch (type) { - case QUICK -> BicycleOptimizeType.SHORTEST_DURATION; - case FLAT -> BicycleOptimizeType.FLAT_STREETS; - case SAFE -> BicycleOptimizeType.SAFE_STREETS; - case GREENWAYS -> BicycleOptimizeType.SAFEST_STREETS; - case TRIANGLE -> BicycleOptimizeType.TRIANGLE; - }; - } -} diff --git a/src/ext/java/org/opentripplanner/ext/restapi/mapping/LegacyVehicleRoutingOptimizeType.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/LegacyVehicleRoutingOptimizeType.java new file mode 100644 index 00000000000..675e8541048 --- /dev/null +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/LegacyVehicleRoutingOptimizeType.java @@ -0,0 +1,25 @@ +package org.opentripplanner.ext.restapi.mapping; + +import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; + +/** + * Bicycle and scooter optimization types that are only meant to be used by the REST API. Related to + * {@link VehicleRoutingOptimizeType} + */ +public enum LegacyVehicleRoutingOptimizeType { + QUICK, + SAFE, + FLAT, + GREENWAYS, + TRIANGLE; + + public static VehicleRoutingOptimizeType map(LegacyVehicleRoutingOptimizeType type) { + return switch (type) { + case QUICK -> VehicleRoutingOptimizeType.SHORTEST_DURATION; + case FLAT -> VehicleRoutingOptimizeType.FLAT_STREETS; + case SAFE -> VehicleRoutingOptimizeType.SAFE_STREETS; + case GREENWAYS -> VehicleRoutingOptimizeType.SAFEST_STREETS; + case TRIANGLE -> VehicleRoutingOptimizeType.TRIANGLE; + }; + } +} diff --git a/src/ext/java/org/opentripplanner/ext/restapi/resources/RequestToPreferencesMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/resources/RequestToPreferencesMapper.java index bf44da6be00..6248f71e214 100644 --- a/src/ext/java/org/opentripplanner/ext/restapi/resources/RequestToPreferencesMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/resources/RequestToPreferencesMapper.java @@ -2,7 +2,7 @@ import jakarta.validation.constraints.NotNull; import java.util.function.Consumer; -import org.opentripplanner.ext.restapi.mapping.LegacyBicycleOptimizeType; +import org.opentripplanner.ext.restapi.mapping.LegacyVehicleRoutingOptimizeType; import org.opentripplanner.framework.lang.ObjectUtils; import org.opentripplanner.routing.algorithm.filterchain.api.TransitGeneralizedCostFilterParams; import org.opentripplanner.routing.api.request.framework.CostLinearFunction; @@ -32,6 +32,7 @@ void map() { mapCar(); mapWalk(); mapBike(); + mapScooter(); var boardAndAlightSlack = mapTransit(); @@ -69,10 +70,10 @@ private void mapBike() { setIfNotNull(req.bikeBoardCost, bike::withBoardCost); setIfNotNull( req.bikeOptimizeType, - optimizeType -> bike.withOptimizeType(LegacyBicycleOptimizeType.map(optimizeType)) + optimizeType -> bike.withOptimizeType(LegacyVehicleRoutingOptimizeType.map(optimizeType)) ); - if (req.bikeOptimizeType == LegacyBicycleOptimizeType.TRIANGLE) { + if (req.bikeOptimizeType == LegacyVehicleRoutingOptimizeType.TRIANGLE) { bike.withOptimizeTriangle(triangle -> { setIfNotNull(req.triangleTimeFactor, triangle::withTime); setIfNotNull(req.triangleSlopeFactor, triangle::withSlope); @@ -95,6 +96,27 @@ private void mapBike() { }); } + private void mapScooter() { + preferences.withScooter(scooter -> { + setIfNotNull(req.bikeSpeed, scooter::withSpeed); + setIfNotNull(req.bikeReluctance, scooter::withReluctance); + setIfNotNull( + req.bikeOptimizeType, + optimizeType -> scooter.withOptimizeType(LegacyVehicleRoutingOptimizeType.map(optimizeType)) + ); + + if (req.bikeOptimizeType == LegacyVehicleRoutingOptimizeType.TRIANGLE) { + scooter.withOptimizeTriangle(triangle -> { + setIfNotNull(req.triangleTimeFactor, triangle::withTime); + setIfNotNull(req.triangleSlopeFactor, triangle::withSlope); + setIfNotNull(req.triangleSafetyFactor, triangle::withSafety); + }); + } + + scooter.withRental(this::mapRental); + }); + } + private BoardAndAlightSlack mapTransit() { preferences.withTransit(tr -> { setIfNotNull(req.boardSlack, tr::withDefaultBoardSlackSec); diff --git a/src/ext/java/org/opentripplanner/ext/restapi/resources/RoutingResource.java b/src/ext/java/org/opentripplanner/ext/restapi/resources/RoutingResource.java index 1c234e3ff9e..1d985f0e555 100644 --- a/src/ext/java/org/opentripplanner/ext/restapi/resources/RoutingResource.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/resources/RoutingResource.java @@ -20,7 +20,7 @@ import javax.xml.datatype.XMLGregorianCalendar; import org.opentripplanner.api.parameter.QualifiedModeSet; import org.opentripplanner.ext.dataoverlay.api.DataOverlayParameters; -import org.opentripplanner.ext.restapi.mapping.LegacyBicycleOptimizeType; +import org.opentripplanner.ext.restapi.mapping.LegacyVehicleRoutingOptimizeType; import org.opentripplanner.framework.application.OTPFeature; import org.opentripplanner.framework.lang.StringUtils; import org.opentripplanner.framework.time.DurationUtils; @@ -239,17 +239,15 @@ public abstract class RoutingResource { protected Double triangleTimeFactor; /** - * The set of characteristics that the user wants to optimize for. @See OptimizeType. + * The set of characteristics that the user wants to optimize for in bicycle and scooter routing. + * @See OptimizeType. * * @deprecated TODO OTP2 this should be completely removed and done only with individual cost * parameters - * Also: apparently OptimizeType only affects BICYCLE mode traversal of - * street segments. If this is the case it should be very well - * documented and carried over into the Enum name. */ @Deprecated @QueryParam("optimize") - protected LegacyBicycleOptimizeType bikeOptimizeType; + protected LegacyVehicleRoutingOptimizeType bikeOptimizeType; /** * The set of modes that a user is willing to use, with qualifiers stating whether vehicles should diff --git a/src/ext/java/org/opentripplanner/ext/siri/ModifiedTripBuilder.java b/src/ext/java/org/opentripplanner/ext/siri/ModifiedTripBuilder.java index df4509eb2d6..5c21be364a5 100644 --- a/src/ext/java/org/opentripplanner/ext/siri/ModifiedTripBuilder.java +++ b/src/ext/java/org/opentripplanner/ext/siri/ModifiedTripBuilder.java @@ -98,7 +98,7 @@ public ModifiedTripBuilder( public Result build() { RealTimeTripTimes newTimes = existingTripTimes.copyScheduledTimes(); - StopPattern stopPattern = createStopPattern(pattern, calls, entityResolver); + var stopPattern = createStopPattern(pattern, calls, entityResolver); if (cancellation || stopPattern.isAllStopsNonRoutable()) { LOG.debug("Trip is cancelled"); @@ -220,15 +220,12 @@ static StopPattern createStopPattern( EntityResolver entityResolver ) { int numberOfStops = pattern.numberOfStops(); - var builder = pattern.getStopPattern().mutate(); + var builder = pattern.copyPlannedStopPattern(); Set alreadyVisited = new HashSet<>(); // modify updated stop-times for (int i = 0; i < numberOfStops; i++) { - StopLocation stop = pattern.getStop(i); - builder.stops[i] = stop; - builder.dropoffs[i] = pattern.getAlightType(i); - builder.pickups[i] = pattern.getBoardType(i); + StopLocation stop = builder.stops.original(i); for (CallWrapper call : calls) { if (alreadyVisited.contains(call)) { @@ -241,22 +238,25 @@ static StopPattern createStopPattern( continue; } - int stopIndex = i; - builder.stops[stopIndex] = callStop; + // Used in lambda + final int stopIndex = i; + builder.stops.with(stopIndex, callStop); PickDropMapper - .mapPickUpType(call, builder.pickups[stopIndex]) - .ifPresent(value -> builder.pickups[stopIndex] = value); + .mapPickUpType(call, builder.pickups.original(stopIndex)) + .ifPresent(value -> builder.pickups.with(stopIndex, value)); PickDropMapper - .mapDropOffType(call, builder.dropoffs[stopIndex]) - .ifPresent(value -> builder.dropoffs[stopIndex] = value); + .mapDropOffType(call, builder.dropoffs.original(stopIndex)) + .ifPresent(value -> builder.dropoffs.with(stopIndex, value)); alreadyVisited.add(call); break; } } - - return builder.build(); + var newStopPattern = builder.build(); + return (pattern.isModified() && pattern.getStopPattern().equals(newStopPattern)) + ? pattern.getStopPattern() + : newStopPattern; } } diff --git a/src/ext/java/org/opentripplanner/ext/siri/mapper/PickDropMapper.java b/src/ext/java/org/opentripplanner/ext/siri/mapper/PickDropMapper.java index 4feb4dbbd20..d35696ec35e 100644 --- a/src/ext/java/org/opentripplanner/ext/siri/mapper/PickDropMapper.java +++ b/src/ext/java/org/opentripplanner/ext/siri/mapper/PickDropMapper.java @@ -18,12 +18,12 @@ public class PickDropMapper { * The Siri ArrivalBoardingActivity includes less information than the pick drop type, therefore is it only * changed if routability has changed. * - * @param currentValue The current pick drop value on a stopTime + * @param plannedValue The current pick drop value on a stopTime * @param call The incoming call to be mapped * @return Mapped PickDrop type, empty if routability is not changed. */ - public static Optional mapDropOffType(CallWrapper call, PickDrop currentValue) { - if (shouldBeCancelled(currentValue, call.isCancellation(), call.getArrivalStatus())) { + public static Optional mapDropOffType(CallWrapper call, PickDrop plannedValue) { + if (shouldBeCancelled(plannedValue, call.isCancellation(), call.getArrivalStatus())) { return Optional.of(CANCELLED); } @@ -33,7 +33,7 @@ public static Optional mapDropOffType(CallWrapper call, PickDrop curre } return switch (arrivalBoardingActivityEnumeration) { - case ALIGHTING -> currentValue.isNotRoutable() ? Optional.of(SCHEDULED) : Optional.empty(); + case ALIGHTING -> plannedValue.isNotRoutable() ? Optional.of(SCHEDULED) : Optional.empty(); case NO_ALIGHTING -> Optional.of(NONE); case PASS_THRU -> Optional.of(CANCELLED); }; @@ -45,12 +45,12 @@ public static Optional mapDropOffType(CallWrapper call, PickDrop curre * The Siri DepartureBoardingActivity includes less information than the planned data, therefore is it only * changed if routability has changed. * - * @param currentValue The current pick drop value on a stopTime + * @param plannedValue The current pick drop value on a stopTime * @param call The incoming call to be mapped * @return Mapped PickDrop type, empty if routability is not changed. */ - public static Optional mapPickUpType(CallWrapper call, PickDrop currentValue) { - if (shouldBeCancelled(currentValue, call.isCancellation(), call.getDepartureStatus())) { + public static Optional mapPickUpType(CallWrapper call, PickDrop plannedValue) { + if (shouldBeCancelled(plannedValue, call.isCancellation(), call.getDepartureStatus())) { return Optional.of(CANCELLED); } @@ -60,7 +60,7 @@ public static Optional mapPickUpType(CallWrapper call, PickDrop curren } return switch (departureBoardingActivityEnumeration) { - case BOARDING -> currentValue.isNotRoutable() ? Optional.of(SCHEDULED) : Optional.empty(); + case BOARDING -> plannedValue.isNotRoutable() ? Optional.of(SCHEDULED) : Optional.empty(); case NO_BOARDING -> Optional.of(NONE); case PASS_THRU -> Optional.of(CANCELLED); }; @@ -71,17 +71,16 @@ public static Optional mapPickUpType(CallWrapper call, PickDrop curren * * If the existing PickDrop is non-routable, the value is not changed. * - * @param currentValue The current pick drop value on a stopTime + * @param plannedValue The planned pick drop value on a stopTime * @param isCallCancellation The incoming call cancellation-flag * @param callStatus The incoming call arrival/departure status - * @return */ private static boolean shouldBeCancelled( - PickDrop currentValue, + PickDrop plannedValue, Boolean isCallCancellation, CallStatusEnumeration callStatus ) { - if (currentValue.isNotRoutable()) { + if (plannedValue.isNotRoutable()) { return false; } return TRUE.equals(isCallCancellation) || callStatus == CallStatusEnumeration.CANCELLED; diff --git a/src/ext/java/org/opentripplanner/ext/siri/updater/azure/AbstractAzureSiriUpdater.java b/src/ext/java/org/opentripplanner/ext/siri/updater/azure/AbstractAzureSiriUpdater.java index 0d36233f22b..f96941c7370 100644 --- a/src/ext/java/org/opentripplanner/ext/siri/updater/azure/AbstractAzureSiriUpdater.java +++ b/src/ext/java/org/opentripplanner/ext/siri/updater/azure/AbstractAzureSiriUpdater.java @@ -1,5 +1,6 @@ package org.opentripplanner.ext.siri.updater.azure; +import com.azure.identity.DefaultAzureCredentialBuilder; import com.azure.messaging.servicebus.ServiceBusClientBuilder; import com.azure.messaging.servicebus.ServiceBusErrorContext; import com.azure.messaging.servicebus.ServiceBusException; @@ -36,6 +37,8 @@ public abstract class AbstractAzureSiriUpdater implements GraphUpdater { private final Logger LOG = LoggerFactory.getLogger(getClass()); + private final AuthenticationType authenticationType; + private final String fullyQualifiedNamespace; private final String configRef; private final String serviceBusUrl; private final SiriFuzzyTripMatcher fuzzyTripMatcher; @@ -63,6 +66,8 @@ public abstract class AbstractAzureSiriUpdater implements GraphUpdater { public AbstractAzureSiriUpdater(SiriAzureUpdaterParameters config, TransitModel transitModel) { this.configRef = config.configRef(); + this.authenticationType = config.getAuthenticationType(); + this.fullyQualifiedNamespace = config.getFullyQualifiedNamespace(); this.serviceBusUrl = config.getServiceBusUrl(); this.topicName = config.getTopicName(); this.dataInitializationUrl = config.getDataInitializationUrl(); @@ -105,10 +110,17 @@ public void run() { } // Client with permissions to create subscription - serviceBusAdmin = - new ServiceBusAdministrationClientBuilder() - .connectionString(serviceBusUrl) - .buildAsyncClient(); + if (authenticationType == AuthenticationType.FederatedIdentity) { + serviceBusAdmin = + new ServiceBusAdministrationClientBuilder() + .credential(fullyQualifiedNamespace, new DefaultAzureCredentialBuilder().build()) + .buildAsyncClient(); + } else if (authenticationType == AuthenticationType.SharedAccessKey) { + serviceBusAdmin = + new ServiceBusAdministrationClientBuilder() + .connectionString(serviceBusUrl) + .buildAsyncClient(); + } // If Idle more then one day, then delete subscription so we don't have old obsolete subscriptions on Azure Service Bus var options = new CreateSubscriptionOptions(); diff --git a/src/ext/java/org/opentripplanner/ext/siri/updater/azure/AuthenticationType.java b/src/ext/java/org/opentripplanner/ext/siri/updater/azure/AuthenticationType.java new file mode 100644 index 00000000000..65cf8caac93 --- /dev/null +++ b/src/ext/java/org/opentripplanner/ext/siri/updater/azure/AuthenticationType.java @@ -0,0 +1,6 @@ +package org.opentripplanner.ext.siri.updater.azure; + +public enum AuthenticationType { + SharedAccessKey, + FederatedIdentity, +} diff --git a/src/ext/java/org/opentripplanner/ext/siri/updater/azure/SiriAzureUpdaterParameters.java b/src/ext/java/org/opentripplanner/ext/siri/updater/azure/SiriAzureUpdaterParameters.java index 93e9a6bded8..0d207d27efe 100644 --- a/src/ext/java/org/opentripplanner/ext/siri/updater/azure/SiriAzureUpdaterParameters.java +++ b/src/ext/java/org/opentripplanner/ext/siri/updater/azure/SiriAzureUpdaterParameters.java @@ -4,6 +4,8 @@ public abstract class SiriAzureUpdaterParameters { private String configRef; private String type; + private AuthenticationType authenticationType; + private String fullyQualifiedNamespace; private String serviceBusUrl; private String topicName; private String dataInitializationUrl; @@ -28,6 +30,22 @@ public String getType() { return type; } + public AuthenticationType getAuthenticationType() { + return authenticationType; + } + + public void setAuthenticationType(AuthenticationType authenticationType) { + this.authenticationType = authenticationType; + } + + public String getFullyQualifiedNamespace() { + return fullyQualifiedNamespace; + } + + public void setFullyQualifiedNamespace(String fullyQualifiedNamespace) { + this.fullyQualifiedNamespace = fullyQualifiedNamespace; + } + public String getServiceBusUrl() { return serviceBusUrl; } diff --git a/src/ext/java/org/opentripplanner/ext/stopconsolidation/DecorateConsolidatedStopNames.java b/src/ext/java/org/opentripplanner/ext/stopconsolidation/DecorateConsolidatedStopNames.java index a287e6a7d66..1806b3e9e32 100644 --- a/src/ext/java/org/opentripplanner/ext/stopconsolidation/DecorateConsolidatedStopNames.java +++ b/src/ext/java/org/opentripplanner/ext/stopconsolidation/DecorateConsolidatedStopNames.java @@ -41,7 +41,7 @@ private void replaceConsolidatedStops(Itinerary i) { if (leg instanceof ScheduledTransitLeg stl && needsToRenameStops(stl)) { var agency = leg.getAgency(); // to show the name on the stop signage we use the primary stop's name - var from = service.primaryStop(stl.getFrom().stop.getId()); + var from = service.primaryStop(stl.getFrom().stop.getId()).orElse(stl.getFrom().stop); // to show the name that's on the display inside the vehicle we use the agency-specific name var to = service.agencySpecificStop(stl.getTo().stop, agency); return new ConsolidatedStopLeg(stl, from, to); diff --git a/src/ext/java/org/opentripplanner/ext/stopconsolidation/StopConsolidationModule.java b/src/ext/java/org/opentripplanner/ext/stopconsolidation/StopConsolidationModule.java index 91cbe5e1856..100941d88d4 100644 --- a/src/ext/java/org/opentripplanner/ext/stopconsolidation/StopConsolidationModule.java +++ b/src/ext/java/org/opentripplanner/ext/stopconsolidation/StopConsolidationModule.java @@ -67,7 +67,7 @@ private TripPattern modifyStopsInPattern( TripPattern pattern, List replacements ) { - var updatedStopPattern = pattern.getStopPattern().mutate(); + var updatedStopPattern = pattern.copyPlannedStopPattern(); replacements.forEach(r -> updatedStopPattern.replaceStop(r.secondary(), r.primary())); return pattern.copy().withStopPattern(updatedStopPattern.build()).build(); } diff --git a/src/ext/java/org/opentripplanner/ext/stopconsolidation/StopConsolidationService.java b/src/ext/java/org/opentripplanner/ext/stopconsolidation/StopConsolidationService.java index a829a905e27..11ad4be69ff 100644 --- a/src/ext/java/org/opentripplanner/ext/stopconsolidation/StopConsolidationService.java +++ b/src/ext/java/org/opentripplanner/ext/stopconsolidation/StopConsolidationService.java @@ -1,6 +1,7 @@ package org.opentripplanner.ext.stopconsolidation; import java.util.List; +import java.util.Optional; import org.opentripplanner.ext.stopconsolidation.model.StopReplacement; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.organization.Agency; @@ -41,5 +42,5 @@ public interface StopConsolidationService { /** * For a given stop id return the primary stop if it is part of a consolidated stop group. */ - StopLocation primaryStop(FeedScopedId id); + Optional primaryStop(FeedScopedId id); } diff --git a/src/ext/java/org/opentripplanner/ext/stopconsolidation/internal/DefaultStopConsolidationService.java b/src/ext/java/org/opentripplanner/ext/stopconsolidation/internal/DefaultStopConsolidationService.java index 51a57028121..216489512f5 100644 --- a/src/ext/java/org/opentripplanner/ext/stopconsolidation/internal/DefaultStopConsolidationService.java +++ b/src/ext/java/org/opentripplanner/ext/stopconsolidation/internal/DefaultStopConsolidationService.java @@ -94,7 +94,7 @@ private Optional findAgencySpecificStop(StopLocation stop, Agency } @Override - public StopLocation primaryStop(FeedScopedId id) { + public Optional primaryStop(FeedScopedId id) { var primaryId = repo .groups() .stream() @@ -102,6 +102,6 @@ public StopLocation primaryStop(FeedScopedId id) { .map(ConsolidatedStopGroup::primary) .findAny() .orElse(id); - return transitModel.getStopModel().getRegularStop(primaryId); + return Optional.ofNullable(transitModel.getStopModel().getRegularStop(primaryId)); } } diff --git a/src/ext/java/org/opentripplanner/ext/stopconsolidation/model/ConsolidatedStopLeg.java b/src/ext/java/org/opentripplanner/ext/stopconsolidation/model/ConsolidatedStopLeg.java index 39f06bd6347..a784bb5900e 100644 --- a/src/ext/java/org/opentripplanner/ext/stopconsolidation/model/ConsolidatedStopLeg.java +++ b/src/ext/java/org/opentripplanner/ext/stopconsolidation/model/ConsolidatedStopLeg.java @@ -1,5 +1,6 @@ package org.opentripplanner.ext.stopconsolidation.model; +import java.util.Objects; import org.opentripplanner.model.plan.Place; import org.opentripplanner.model.plan.ScheduledTransitLeg; import org.opentripplanner.model.plan.ScheduledTransitLegBuilder; @@ -12,8 +13,8 @@ public class ConsolidatedStopLeg extends ScheduledTransitLeg { public ConsolidatedStopLeg(ScheduledTransitLeg original, StopLocation from, StopLocation to) { super(new ScheduledTransitLegBuilder<>(original)); - this.from = from; - this.to = to; + this.from = Objects.requireNonNull(from); + this.to = Objects.requireNonNull(to); } @Override diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/VectorTilesResource.java b/src/ext/java/org/opentripplanner/ext/vectortiles/VectorTilesResource.java index 772db7394f3..29701ee2307 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/VectorTilesResource.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/VectorTilesResource.java @@ -18,6 +18,7 @@ import java.util.function.Predicate; import org.glassfish.grizzly.http.server.Request; import org.opentripplanner.apis.support.TileJson; +import org.opentripplanner.ext.vectortiles.layers.areastops.AreaStopsLayerBuilder; import org.opentripplanner.ext.vectortiles.layers.stations.StationsLayerBuilder; import org.opentripplanner.ext.vectortiles.layers.stops.StopsLayerBuilder; import org.opentripplanner.ext.vectortiles.layers.vehicleparkings.VehicleParkingGroupsLayerBuilder; @@ -28,6 +29,7 @@ import org.opentripplanner.inspector.vector.LayerBuilder; import org.opentripplanner.inspector.vector.LayerParameters; import org.opentripplanner.inspector.vector.VectorTileResponseFactory; +import org.opentripplanner.model.FeedInfo; import org.opentripplanner.standalone.api.OtpServerRequestContext; @Path("/routers/{ignoreRouterId}/vectorTiles") @@ -67,7 +69,7 @@ public Response tileGet( locale, Arrays.asList(requestedLayers.split(",")), serverContext.vectorTileConfig().layers(), - VectorTilesResource::crateLayerBuilder, + VectorTilesResource::createLayerBuilder, serverContext ); } @@ -81,13 +83,6 @@ public TileJson getTileJson( @PathParam("layers") String requestedLayers ) { var envelope = serverContext.worldEnvelopeService().envelope().orElseThrow(); - var feedInfos = serverContext - .transitService() - .getFeedIds() - .stream() - .map(serverContext.transitService()::getFeedInfo) - .filter(Predicate.not(Objects::isNull)) - .toList(); List rLayers = Arrays.asList(requestedLayers.split(",")); @@ -101,10 +96,27 @@ public TileJson getTileJson( TileJson.urlWithDefaultPath(uri, headers, rLayers, ignoreRouterId, "vectorTiles") ); - return new TileJson(url, envelope, feedInfos); + return serverContext + .vectorTileConfig() + .attribution() + .map(attr -> new TileJson(url, envelope, attr)) + .orElseGet(() -> { + var feedInfos = getFeedInfos(); + return new TileJson(url, envelope, feedInfos); + }); + } + + private List getFeedInfos() { + return serverContext + .transitService() + .getFeedIds() + .stream() + .map(serverContext.transitService()::getFeedInfo) + .filter(Predicate.not(Objects::isNull)) + .toList(); } - private static LayerBuilder crateLayerBuilder( + private static LayerBuilder createLayerBuilder( LayerParameters layerParameters, Locale locale, OtpServerRequestContext context @@ -112,6 +124,7 @@ private static LayerBuilder crateLayerBuilder( return switch (layerParameters.type()) { case Stop -> new StopsLayerBuilder(context.transitService(), layerParameters, locale); case Station -> new StationsLayerBuilder(context.transitService(), layerParameters, locale); + case AreaStop -> new AreaStopsLayerBuilder(context.transitService(), layerParameters, locale); case VehicleRental -> new VehicleRentalPlacesLayerBuilder( context.vehicleRentalService(), layerParameters, @@ -142,6 +155,7 @@ private static LayerBuilder crateLayerBuilder( public enum LayerType { Stop, Station, + AreaStop, VehicleRental, VehicleRentalVehicle, VehicleRentalStation, diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/areastops/AreaStopPropertyMapper.java b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/areastops/AreaStopPropertyMapper.java new file mode 100644 index 00000000000..ea6f9225e11 --- /dev/null +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/areastops/AreaStopPropertyMapper.java @@ -0,0 +1,52 @@ +package org.opentripplanner.ext.vectortiles.layers.areastops; + +import java.util.Collection; +import java.util.List; +import java.util.Locale; +import java.util.Objects; +import java.util.function.Function; +import java.util.stream.Collectors; +import org.opentripplanner.apis.support.mapping.PropertyMapper; +import org.opentripplanner.framework.i18n.I18NStringMapper; +import org.opentripplanner.inspector.vector.KeyValue; +import org.opentripplanner.transit.model.network.Route; +import org.opentripplanner.transit.model.site.AreaStop; +import org.opentripplanner.transit.model.site.StopLocation; +import org.opentripplanner.transit.service.TransitService; + +public class AreaStopPropertyMapper extends PropertyMapper { + + private final Function> getRoutesForStop; + private final I18NStringMapper i18NStringMapper; + + protected AreaStopPropertyMapper( + Function> getRoutesForStop, + Locale locale + ) { + this.getRoutesForStop = getRoutesForStop; + this.i18NStringMapper = new I18NStringMapper(locale); + } + + protected static AreaStopPropertyMapper create(TransitService transitService, Locale locale) { + return new AreaStopPropertyMapper(transitService::getRoutesForStop, locale); + } + + @Override + protected Collection map(AreaStop stop) { + var routeColors = getRoutesForStop + .apply(stop) + .stream() + .map(Route::getColor) + .filter(Objects::nonNull) + .distinct() + // the MVT spec explicitly doesn't cover how to encode arrays + // https://docs.mapbox.com/data/tilesets/guides/vector-tiles-standards/#what-the-spec-doesnt-cover + .collect(Collectors.joining(",")); + return List.of( + new KeyValue("gtfsId", stop.getId().toString()), + new KeyValue("name", i18NStringMapper.mapNonnullToApi(stop.getName())), + new KeyValue("code", stop.getCode()), + new KeyValue("routeColors", routeColors) + ); + } +} diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/areastops/AreaStopsLayerBuilder.java b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/areastops/AreaStopsLayerBuilder.java new file mode 100644 index 00000000000..31952752dbc --- /dev/null +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/areastops/AreaStopsLayerBuilder.java @@ -0,0 +1,53 @@ +package org.opentripplanner.ext.vectortiles.layers.areastops; + +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.function.BiFunction; +import org.locationtech.jts.geom.Envelope; +import org.locationtech.jts.geom.Geometry; +import org.opentripplanner.apis.support.mapping.PropertyMapper; +import org.opentripplanner.ext.vectortiles.VectorTilesResource; +import org.opentripplanner.inspector.vector.LayerBuilder; +import org.opentripplanner.inspector.vector.LayerParameters; +import org.opentripplanner.transit.model.site.AreaStop; +import org.opentripplanner.transit.service.TransitService; + +public class AreaStopsLayerBuilder extends LayerBuilder { + + static Map>> mappers = Map.of( + MapperType.OTPRR, + AreaStopPropertyMapper::create + ); + private final TransitService transitService; + + public AreaStopsLayerBuilder( + TransitService transitService, + LayerParameters layerParameters, + Locale locale + ) { + super( + mappers.get(MapperType.valueOf(layerParameters.mapper())).apply(transitService, locale), + layerParameters.name(), + layerParameters.expansionFactor() + ); + this.transitService = transitService; + } + + protected List getGeometries(Envelope query) { + return transitService + .findAreaStops(query) + .stream() + .filter(g -> g.getGeometry() != null) + .map(stop -> { + Geometry point = stop.getGeometry().copy(); + point.setUserData(stop); + return point; + }) + .toList(); + } + + enum MapperType { + OTPRR, + } +} diff --git a/src/ext/java/org/opentripplanner/ext/vehicleparking/bikely/BikelyUpdater.java b/src/ext/java/org/opentripplanner/ext/vehicleparking/bikely/BikelyUpdater.java index bfa180015e4..5758d5d99e1 100644 --- a/src/ext/java/org/opentripplanner/ext/vehicleparking/bikely/BikelyUpdater.java +++ b/src/ext/java/org/opentripplanner/ext/vehicleparking/bikely/BikelyUpdater.java @@ -3,80 +3,136 @@ import static org.opentripplanner.routing.vehicle_parking.VehicleParkingState.OPERATIONAL; import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; +import java.time.Duration; +import java.util.ArrayList; import java.util.Currency; +import java.util.List; +import java.util.Objects; +import javax.annotation.Nullable; import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.framework.i18n.LocalizedString; import org.opentripplanner.framework.i18n.NonLocalizedString; +import org.opentripplanner.framework.io.OtpHttpClient; +import org.opentripplanner.framework.json.ObjectMappers; import org.opentripplanner.routing.vehicle_parking.VehicleParking; import org.opentripplanner.routing.vehicle_parking.VehicleParkingSpaces; import org.opentripplanner.routing.vehicle_parking.VehicleParkingState; import org.opentripplanner.transit.model.basic.LocalizedMoney; import org.opentripplanner.transit.model.basic.Money; import org.opentripplanner.transit.model.framework.FeedScopedId; -import org.opentripplanner.updater.spi.GenericJsonDataSource; +import org.opentripplanner.updater.spi.DataSource; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Vehicle parking updater class for the Norwegian bike box provider Bikely: * https://www.safebikely.com/ */ -public class BikelyUpdater extends GenericJsonDataSource { +public class BikelyUpdater implements DataSource { + + private static final Logger LOG = LoggerFactory.getLogger(BikelyUpdater.class); private static final String JSON_PARSE_PATH = "result"; private static final Currency NOK = Currency.getInstance("NOK"); - private final String feedId; + private static final ObjectMapper OBJECT_MAPPER = ObjectMappers.ignoringExtraFields(); + private static final ObjectNode POST_PARAMS = OBJECT_MAPPER + .createObjectNode() + .put("groupPins", true) + .put("lonMin", 0) + .put("lonMax", 0) + .put("latMin", 0) + .put("latMax", 0); + private final OtpHttpClient httpClient = new OtpHttpClient(); + private final BikelyUpdaterParameters parameters; + private List lots; public BikelyUpdater(BikelyUpdaterParameters parameters) { - super(parameters.url(), JSON_PARSE_PATH, parameters.httpHeaders()); - this.feedId = parameters.feedId(); + this.parameters = parameters; + } + + @Override + public boolean update() { + this.lots = + httpClient.postJsonAndMap( + parameters.url(), + POST_PARAMS, + Duration.ofSeconds(30), + parameters.httpHeaders().asMap(), + is -> { + try { + var lots = new ArrayList(); + OBJECT_MAPPER + .readTree(is) + .path(JSON_PARSE_PATH) + .forEach(node -> lots.add(parseElement(node))); + + return lots.stream().filter(Objects::nonNull).toList(); + } catch (Exception e) { + LOG.error("Could not get Bikely updates", e); + } + + return List.of(); + } + ); + + return true; } @Override - protected VehicleParking parseElement(JsonNode jsonNode) { - var vehicleParkId = new FeedScopedId(feedId, jsonNode.get("id").asText()); + public List getUpdates() { + return List.copyOf(lots); + } + + @Nullable + private VehicleParking parseElement(JsonNode jsonNode) { + if (jsonNode.path("hasStandardParking").asBoolean()) { + var vehicleParkId = new FeedScopedId(parameters.feedId(), jsonNode.get("id").asText()); - var address = jsonNode.get("address"); - var workingHours = jsonNode.get("workingHours"); + var lat = jsonNode.get("latitude").asDouble(); + var lng = jsonNode.get("longitude").asDouble(); + var coord = new WgsCoordinate(lat, lng); - var lat = address.get("latitude").asDouble(); - var lng = address.get("longitude").asDouble(); - var coord = new WgsCoordinate(lat, lng); + var name = new NonLocalizedString(jsonNode.path("name").asText()); - var name = new NonLocalizedString(jsonNode.path("name").asText()); + var totalSpots = jsonNode.get("totalStandardSpots").asInt(); + var freeSpots = jsonNode.get("availableStandardSpots").asInt(); + var isUnderMaintenance = jsonNode.get("isInMaintenance").asBoolean(); - var totalSpots = jsonNode.get("totalParkingSpots").asInt(); - var freeSpots = jsonNode.get("availableParkingSpots").asInt(); - var isUnderMaintenance = workingHours.get("isUnderMaintenance").asBoolean(); + LocalizedString note = toNote(jsonNode); - LocalizedString note = toNote(jsonNode.get("price")); + VehicleParking.VehicleParkingEntranceCreator entrance = builder -> + builder + .entranceId(new FeedScopedId(parameters.feedId(), vehicleParkId.getId() + "/entrance")) + .name(name) + .coordinate(coord) + .walkAccessible(true) + .carAccessible(false); - VehicleParking.VehicleParkingEntranceCreator entrance = builder -> - builder - .entranceId(new FeedScopedId(feedId, vehicleParkId.getId() + "/entrance")) + return VehicleParking + .builder() + .id(vehicleParkId) .name(name) + .bicyclePlaces(true) + .capacity(VehicleParkingSpaces.builder().bicycleSpaces(totalSpots).build()) + .availability(VehicleParkingSpaces.builder().bicycleSpaces(freeSpots).build()) + .state(toState(isUnderMaintenance)) .coordinate(coord) - .walkAccessible(true) - .carAccessible(false); - - return VehicleParking - .builder() - .id(vehicleParkId) - .name(name) - .bicyclePlaces(true) - .capacity(VehicleParkingSpaces.builder().bicycleSpaces(totalSpots).build()) - .availability(VehicleParkingSpaces.builder().bicycleSpaces(freeSpots).build()) - .state(toState(isUnderMaintenance)) - .coordinate(coord) - .entrance(entrance) - .note(note) - .build(); + .entrance(entrance) + .note(note) + .build(); + } else { + return null; + } } private static LocalizedString toNote(JsonNode price) { var startPriceAmount = price.get("startPriceAmount").floatValue(); var mainPriceAmount = price.get("mainPriceAmount").floatValue(); - var startPriceDurationHours = price.get("startPriceDurationHours").asInt(); - var mainPriceDurationHours = price.get("mainPriceDurationHours").asInt(); + var startPriceDurationHours = price.get("startPriceDuration").asInt(); + var mainPriceDurationHours = price.get("mainPriceDuration").asInt(); if (startPriceAmount == 0 && mainPriceAmount == 0) { return new LocalizedString("price.free"); diff --git a/src/ext/java/org/opentripplanner/ext/vehicleparking/bikely/BikelyUpdaterParameters.java b/src/ext/java/org/opentripplanner/ext/vehicleparking/bikely/BikelyUpdaterParameters.java index e97444439fa..26e40f4ec4a 100644 --- a/src/ext/java/org/opentripplanner/ext/vehicleparking/bikely/BikelyUpdaterParameters.java +++ b/src/ext/java/org/opentripplanner/ext/vehicleparking/bikely/BikelyUpdaterParameters.java @@ -1,5 +1,6 @@ package org.opentripplanner.ext.vehicleparking.bikely; +import java.net.URI; import java.time.Duration; import org.opentripplanner.updater.spi.HttpHeaders; import org.opentripplanner.updater.vehicle_parking.VehicleParkingSourceType; @@ -11,7 +12,7 @@ */ public record BikelyUpdaterParameters( String configRef, - String url, + URI url, String feedId, Duration frequency, HttpHeaders httpHeaders diff --git a/src/main/java/org/opentripplanner/apis/gtfs/mapping/OptimizationTypeMapper.java b/src/main/java/org/opentripplanner/apis/gtfs/mapping/OptimizationTypeMapper.java index 1f53652f7b7..7f4f5200256 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/mapping/OptimizationTypeMapper.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/mapping/OptimizationTypeMapper.java @@ -2,18 +2,18 @@ import javax.annotation.Nonnull; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes; -import org.opentripplanner.routing.core.BicycleOptimizeType; +import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; public final class OptimizationTypeMapper { @Nonnull - public static BicycleOptimizeType map(GraphQLTypes.GraphQLOptimizeType optimizeType) { + public static VehicleRoutingOptimizeType map(GraphQLTypes.GraphQLOptimizeType optimizeType) { return switch (optimizeType) { - case QUICK -> BicycleOptimizeType.SHORTEST_DURATION; - case FLAT -> BicycleOptimizeType.FLAT_STREETS; - case SAFE -> BicycleOptimizeType.SAFE_STREETS; - case GREENWAYS -> BicycleOptimizeType.SAFEST_STREETS; - case TRIANGLE -> BicycleOptimizeType.TRIANGLE; + case QUICK -> VehicleRoutingOptimizeType.SHORTEST_DURATION; + case FLAT -> VehicleRoutingOptimizeType.FLAT_STREETS; + case SAFE -> VehicleRoutingOptimizeType.SAFE_STREETS; + case GREENWAYS -> VehicleRoutingOptimizeType.SAFEST_STREETS; + case TRIANGLE -> VehicleRoutingOptimizeType.TRIANGLE; }; } } diff --git a/src/main/java/org/opentripplanner/apis/gtfs/mapping/RouteRequestMapper.java b/src/main/java/org/opentripplanner/apis/gtfs/mapping/RouteRequestMapper.java index 5bc00cb7a85..4cd6c04b044 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/mapping/RouteRequestMapper.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/mapping/RouteRequestMapper.java @@ -28,7 +28,7 @@ import org.opentripplanner.routing.api.request.preference.VehicleWalkingPreferences; import org.opentripplanner.routing.api.request.request.filter.SelectRequest; import org.opentripplanner.routing.api.request.request.filter.TransitFilterRequest; -import org.opentripplanner.routing.core.BicycleOptimizeType; +import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; import org.opentripplanner.transit.model.basic.MainAndSubMode; import org.opentripplanner.transit.model.basic.TransitMode; @@ -79,7 +79,7 @@ public static RouteRequest toRouteRequest( ) ); } - if (bike.optimizeType() == BicycleOptimizeType.TRIANGLE) { + if (bike.optimizeType() == VehicleRoutingOptimizeType.TRIANGLE) { bike.withOptimizeTriangle(triangle -> { callWith.argument("triangle.timeFactor", triangle::withTime); callWith.argument("triangle.slopeFactor", triangle::withSlope); @@ -98,6 +98,28 @@ public static RouteRequest toRouteRequest( car.withRental(rental -> setRentalPreferences(callWith, request, rental)); }); + preferences.withScooter(scooter -> { + callWith.argument("bikeReluctance", scooter::withReluctance); + callWith.argument("bikeSpeed", scooter::withSpeed); + + if (environment.getArgument("optimize") != null) { + scooter.withOptimizeType( + OptimizationTypeMapper.map( + GraphQLTypes.GraphQLOptimizeType.valueOf(environment.getArgument("optimize")) + ) + ); + } + if (scooter.optimizeType() == VehicleRoutingOptimizeType.TRIANGLE) { + scooter.withOptimizeTriangle(triangle -> { + callWith.argument("triangle.timeFactor", triangle::withTime); + callWith.argument("triangle.slopeFactor", triangle::withSlope); + callWith.argument("triangle.safetyFactor", triangle::withSafety); + }); + } + + scooter.withRental(rental -> setRentalPreferences(callWith, request, rental)); + }); + preferences.withWalk(b -> { callWith.argument("walkReluctance", b::withReluctance); callWith.argument("walkSpeed", b::withSpeed); diff --git a/src/main/java/org/opentripplanner/apis/support/TileJson.java b/src/main/java/org/opentripplanner/apis/support/TileJson.java index 75aabb2b6c6..1f5c090c16d 100644 --- a/src/main/java/org/opentripplanner/apis/support/TileJson.java +++ b/src/main/java/org/opentripplanner/apis/support/TileJson.java @@ -36,15 +36,8 @@ public class TileJson implements Serializable { public final double[] bounds; public final double[] center; - public TileJson(String tileUrl, WorldEnvelope envelope, Collection feedInfos) { - attribution = - feedInfos - .stream() - .map(feedInfo -> - "" + feedInfo.getPublisherName() + "" - ) - .collect(Collectors.joining(", ")); - + public TileJson(String tileUrl, WorldEnvelope envelope, String attribution) { + this.attribution = attribution; tiles = new String[] { tileUrl }; bounds = @@ -59,6 +52,10 @@ public TileJson(String tileUrl, WorldEnvelope envelope, Collection fee center = new double[] { c.longitude(), c.latitude(), 9 }; } + public TileJson(String tileUrl, WorldEnvelope envelope, Collection feedInfos) { + this(tileUrl, envelope, attributionFromFeedInfo(feedInfos)); + } + /** * Creates a vector source layer URL from a hard-coded path plus information from the incoming * HTTP request. @@ -96,4 +93,14 @@ public static String urlFromOverriddenBasePath( String.join(",", layers) ); } + + private static String attributionFromFeedInfo(Collection feedInfos) { + return feedInfos + .stream() + .map(feedInfo -> + "%s".formatted(feedInfo.getPublisherUrl(), feedInfo.getPublisherName()) + ) + .distinct() + .collect(Collectors.joining(", ")); + } } diff --git a/src/main/java/org/opentripplanner/apis/transmodel/mapping/PreferencesMapper.java b/src/main/java/org/opentripplanner/apis/transmodel/mapping/PreferencesMapper.java index 846437952e4..a86193553f2 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/mapping/PreferencesMapper.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/mapping/PreferencesMapper.java @@ -3,6 +3,7 @@ import static org.opentripplanner.apis.transmodel.mapping.preferences.BikePreferencesMapper.mapBikePreferences; import static org.opentripplanner.apis.transmodel.mapping.preferences.CarPreferencesMapper.mapCarPreferences; import static org.opentripplanner.apis.transmodel.mapping.preferences.ItineraryFilterPreferencesMapper.mapItineraryFilterPreferences; +import static org.opentripplanner.apis.transmodel.mapping.preferences.ScooterPreferencesMapper.mapScooterPreferences; import static org.opentripplanner.apis.transmodel.mapping.preferences.StreetPreferencesMapper.mapStreetPreferences; import static org.opentripplanner.apis.transmodel.mapping.preferences.TransferPreferencesMapper.mapTransferPreferences; import static org.opentripplanner.apis.transmodel.mapping.preferences.TransitPreferencesMapper.mapTransitPreferences; @@ -24,6 +25,7 @@ static void mapPreferences( preferences.withWalk(walk -> mapWalkPreferences(walk, callWith)); preferences.withBike(bike -> mapBikePreferences(bike, callWith)); preferences.withCar(car -> mapCarPreferences(car, callWith)); + preferences.withScooter(scooter -> mapScooterPreferences(scooter, callWith)); preferences.withTransfer(transfer -> mapTransferPreferences(transfer, environment, callWith)); preferences.withTransit(transit -> mapTransitPreferences(transit, environment, callWith)); preferences.withItineraryFilter(itineraryFilter -> diff --git a/src/main/java/org/opentripplanner/apis/transmodel/mapping/RequestModesMapper.java b/src/main/java/org/opentripplanner/apis/transmodel/mapping/RequestModesMapper.java index d02e251f4e2..59259905944 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/mapping/RequestModesMapper.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/mapping/RequestModesMapper.java @@ -7,23 +7,30 @@ class RequestModesMapper { + private static final String accessModeKey = "accessMode"; + private static final String egressModeKey = "egressMode"; + private static final String directModeKey = "directMode"; + /** - * Maps a GraphQL Modes input type to a RequestModes. - * - * This only maps access, egress, direct & transfer. - * Transport modes are now part of filters. - * Only in case filters are not present we will use this mapping + * Maps GraphQL Modes input type to RequestModes. + *

+ * This only maps access, egress, direct & transfer modes. Transport modes are set using filters. + * Default modes are WALK for access, egress, direct & transfer. */ - @SuppressWarnings("unchecked") static RequestModes mapRequestModes(Map modesInput) { - StreetMode accessMode = (StreetMode) modesInput.get("accessMode"); - RequestModesBuilder mBuilder = RequestModes - .of() - .withAccessMode(accessMode) - .withEgressMode((StreetMode) modesInput.get("egressMode")) - .withDirectMode((StreetMode) modesInput.get("directMode")); + RequestModesBuilder mBuilder = RequestModes.of(); - mBuilder.withTransferMode(accessMode == StreetMode.BIKE ? StreetMode.BIKE : StreetMode.WALK); + if (modesInput.containsKey(accessModeKey)) { + StreetMode accessMode = (StreetMode) modesInput.get(accessModeKey); + mBuilder.withAccessMode(accessMode); + mBuilder.withTransferMode(accessMode == StreetMode.BIKE ? StreetMode.BIKE : StreetMode.WALK); + } + if (modesInput.containsKey(egressModeKey)) { + mBuilder.withEgressMode((StreetMode) modesInput.get(egressModeKey)); + } + if (modesInput.containsKey(directModeKey)) { + mBuilder.withDirectMode((StreetMode) modesInput.get(directModeKey)); + } return mBuilder.build(); } diff --git a/src/main/java/org/opentripplanner/apis/transmodel/mapping/preferences/BikePreferencesMapper.java b/src/main/java/org/opentripplanner/apis/transmodel/mapping/preferences/BikePreferencesMapper.java index 1179c034e93..76826d31e2d 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/mapping/preferences/BikePreferencesMapper.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/mapping/preferences/BikePreferencesMapper.java @@ -4,7 +4,7 @@ import org.opentripplanner.apis.transmodel.support.DataFetcherDecorator; import org.opentripplanner.routing.api.request.preference.BikePreferences; -import org.opentripplanner.routing.core.BicycleOptimizeType; +import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; public class BikePreferencesMapper { @@ -37,7 +37,7 @@ public static void mapBikePreferences( // bike.withWalkingReluctance(WALK_BIKE_RELATIVE_RELUCTANCE * (double)r ); //}); - if (bike.optimizeType() == BicycleOptimizeType.TRIANGLE) { + if (bike.optimizeType() == VehicleRoutingOptimizeType.TRIANGLE) { bike.withOptimizeTriangle(triangle -> { callWith.argument("triangleFactors.time", triangle::withTime); callWith.argument("triangleFactors.slope", triangle::withSlope); diff --git a/src/main/java/org/opentripplanner/apis/transmodel/mapping/preferences/ScooterPreferencesMapper.java b/src/main/java/org/opentripplanner/apis/transmodel/mapping/preferences/ScooterPreferencesMapper.java new file mode 100644 index 00000000000..d7d5c019f93 --- /dev/null +++ b/src/main/java/org/opentripplanner/apis/transmodel/mapping/preferences/ScooterPreferencesMapper.java @@ -0,0 +1,36 @@ +package org.opentripplanner.apis.transmodel.mapping.preferences; + +import static org.opentripplanner.apis.transmodel.mapping.preferences.RentalPreferencesMapper.mapRentalPreferences; + +import org.opentripplanner.apis.transmodel.support.DataFetcherDecorator; +import org.opentripplanner.routing.api.request.preference.ScooterPreferences; +import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; + +public class ScooterPreferencesMapper { + + public static void mapScooterPreferences( + ScooterPreferences.Builder scooter, + DataFetcherDecorator callWith + ) { + callWith.argument("bikeSpeed", scooter::withSpeed); + callWith.argument("bicycleOptimisationMethod", scooter::withOptimizeType); + + // WALK reluctance is used for backwards compatibility, then overridden + callWith.argument( + "walkReluctance", + r -> { + scooter.withReluctance((double) r); + } + ); + + if (scooter.optimizeType() == VehicleRoutingOptimizeType.TRIANGLE) { + scooter.withOptimizeTriangle(triangle -> { + callWith.argument("triangleFactors.time", triangle::withTime); + callWith.argument("triangleFactors.slope", triangle::withSlope); + callWith.argument("triangleFactors.safety", triangle::withSafety); + }); + } + + scooter.withRental(rental -> mapRentalPreferences(rental, callWith)); + } +} diff --git a/src/main/java/org/opentripplanner/apis/transmodel/model/DefaultRouteRequestType.java b/src/main/java/org/opentripplanner/apis/transmodel/model/DefaultRouteRequestType.java index 80b6418c314..ea1600864db 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/model/DefaultRouteRequestType.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/model/DefaultRouteRequestType.java @@ -44,9 +44,10 @@ private GraphQLObjectType createGraphQLType() { GraphQLFieldDefinition .newFieldDefinition() .name("carSpeed") + .deprecate("This parameter is no longer configurable.") .description("Max car speed along streets, in meters per second") .type(Scalars.GraphQLFloat) - .dataFetcher(env -> preferences.car().speed()) + .dataFetcher(env -> 0) .build() ) .field( diff --git a/src/main/java/org/opentripplanner/apis/transmodel/model/EnumTypes.java b/src/main/java/org/opentripplanner/apis/transmodel/model/EnumTypes.java index e2897d868c9..b85d4ce19b9 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/model/EnumTypes.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/model/EnumTypes.java @@ -17,7 +17,7 @@ import org.opentripplanner.routing.api.request.preference.ItineraryFilterDebugProfile; import org.opentripplanner.routing.api.response.InputField; import org.opentripplanner.routing.api.response.RoutingErrorCode; -import org.opentripplanner.routing.core.BicycleOptimizeType; +import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; import org.opentripplanner.routing.stoptimes.ArrivalDeparture; import org.opentripplanner.street.search.TraverseMode; import org.opentripplanner.transit.model.basic.Accessibility; @@ -64,11 +64,11 @@ public class EnumTypes { public static final GraphQLEnumType BICYCLE_OPTIMISATION_METHOD = GraphQLEnumType .newEnum() .name("BicycleOptimisationMethod") - .value("quick", BicycleOptimizeType.SHORTEST_DURATION) - .value("safe", BicycleOptimizeType.SAFE_STREETS) - .value("flat", BicycleOptimizeType.FLAT_STREETS) - .value("greenways", BicycleOptimizeType.SAFEST_STREETS) - .value("triangle", BicycleOptimizeType.TRIANGLE) + .value("quick", VehicleRoutingOptimizeType.SHORTEST_DURATION) + .value("safe", VehicleRoutingOptimizeType.SAFE_STREETS) + .value("flat", VehicleRoutingOptimizeType.FLAT_STREETS) + .value("greenways", VehicleRoutingOptimizeType.SAFEST_STREETS) + .value("triangle", VehicleRoutingOptimizeType.TRIANGLE) .build(); public static final GraphQLEnumType BIKES_ALLOWED = GraphQLEnumType diff --git a/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripQuery.java b/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripQuery.java index abeeb187342..bf34d9928e4 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripQuery.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripQuery.java @@ -20,7 +20,7 @@ import org.opentripplanner.apis.transmodel.model.framework.PenaltyForStreetModeType; import org.opentripplanner.apis.transmodel.support.GqlUtil; import org.opentripplanner.routing.api.request.preference.RoutingPreferences; -import org.opentripplanner.routing.core.BicycleOptimizeType; +import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; public class TripQuery { @@ -371,7 +371,10 @@ public static GraphQLFieldDefinition create( "When setting the " + EnumTypes.BICYCLE_OPTIMISATION_METHOD.getName() + " to '" + - enumValAsString(EnumTypes.BICYCLE_OPTIMISATION_METHOD, BicycleOptimizeType.TRIANGLE) + + enumValAsString( + EnumTypes.BICYCLE_OPTIMISATION_METHOD, + VehicleRoutingOptimizeType.TRIANGLE + ) + "', use these values to tell the routing engine how important each of the factors is compared to the others. All values should add up to 1." ) .type(TriangleFactorsInputType.INPUT_TYPE) diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java b/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java index f45d7d36413..8350a10d670 100644 --- a/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java +++ b/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java @@ -53,6 +53,7 @@ public class DebugStyleSpec { static StyleSpec build( VectorSourceLayer regularStops, VectorSourceLayer areaStops, + VectorSourceLayer groupStops, VectorSourceLayer edges, VectorSourceLayer vertices ) { @@ -122,6 +123,15 @@ static StyleSpec build( .fillOutlineColor(BLACK) .minZoom(6) .maxZoom(MAX_ZOOM), + StyleBuilder + .ofId("group-stop") + .typeFill() + .vectorSourceLayer(groupStops) + .fillColor(GREEN) + .fillOpacity(0.5f) + .fillOutlineColor(BLACK) + .minZoom(6) + .maxZoom(MAX_ZOOM), StyleBuilder .ofId("regular-stop") .typeCircle() diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/GraphInspectorVectorTileResource.java b/src/main/java/org/opentripplanner/apis/vectortiles/GraphInspectorVectorTileResource.java index dc6ba627e0e..f97830232bd 100644 --- a/src/main/java/org/opentripplanner/apis/vectortiles/GraphInspectorVectorTileResource.java +++ b/src/main/java/org/opentripplanner/apis/vectortiles/GraphInspectorVectorTileResource.java @@ -3,6 +3,7 @@ import static org.opentripplanner.apis.vectortiles.model.LayerType.AreaStop; import static org.opentripplanner.apis.vectortiles.model.LayerType.Edge; import static org.opentripplanner.apis.vectortiles.model.LayerType.GeofencingZones; +import static org.opentripplanner.apis.vectortiles.model.LayerType.GroupStop; import static org.opentripplanner.apis.vectortiles.model.LayerType.RegularStop; import static org.opentripplanner.apis.vectortiles.model.LayerType.Vertex; import static org.opentripplanner.framework.io.HttpUtils.APPLICATION_X_PROTOBUF; @@ -35,6 +36,7 @@ import org.opentripplanner.inspector.vector.VectorTileResponseFactory; import org.opentripplanner.inspector.vector.edge.EdgeLayerBuilder; import org.opentripplanner.inspector.vector.geofencing.GeofencingZonesLayerBuilder; +import org.opentripplanner.inspector.vector.stop.GroupStopLayerBuilder; import org.opentripplanner.inspector.vector.stop.StopLayerBuilder; import org.opentripplanner.inspector.vector.vertex.VertexLayerBuilder; import org.opentripplanner.model.FeedInfo; @@ -49,6 +51,7 @@ public class GraphInspectorVectorTileResource { private static final LayerParams REGULAR_STOPS = new LayerParams("regularStops", RegularStop); private static final LayerParams AREA_STOPS = new LayerParams("areaStops", AreaStop); + private static final LayerParams GROUP_STOPS = new LayerParams("groupStops", GroupStop); private static final LayerParams GEOFENCING_ZONES = new LayerParams( "geofencingZones", GeofencingZones @@ -58,6 +61,7 @@ public class GraphInspectorVectorTileResource { private static final List> DEBUG_LAYERS = List.of( REGULAR_STOPS, AREA_STOPS, + GROUP_STOPS, GEOFENCING_ZONES, EDGES, VERTICES @@ -128,11 +132,11 @@ public TileJson getTileJson( public StyleSpec getTileJson(@Context UriInfo uri, @Context HttpHeaders headers) { var base = HttpUtils.getBaseAddress(uri, headers); - // these two could also be loaded together but are put into separate sources because + // these could also be loaded together but are put into separate sources because // the stops are fast and the edges are relatively slow var stopsSource = new VectorSource( "stops", - tileJsonUrl(base, List.of(REGULAR_STOPS, AREA_STOPS)) + tileJsonUrl(base, List.of(REGULAR_STOPS, AREA_STOPS, GROUP_STOPS)) ); var streetSource = new VectorSource( "street", @@ -142,6 +146,7 @@ public StyleSpec getTileJson(@Context UriInfo uri, @Context HttpHeaders headers) return DebugStyleSpec.build( REGULAR_STOPS.toVectorSourceLayer(stopsSource), AREA_STOPS.toVectorSourceLayer(stopsSource), + GROUP_STOPS.toVectorSourceLayer(stopsSource), EDGES.toVectorSourceLayer(streetSource), VERTICES.toVectorSourceLayer(streetSource) ); @@ -186,6 +191,12 @@ private static LayerBuilder createLayerBuilder( locale, e -> context.transitService().findAreaStops(e) ); + case GroupStop -> new GroupStopLayerBuilder( + layerParameters, + locale, + // There are not many GroupStops, so we can just list them all. + context.transitService().listGroupStops() + ); case GeofencingZones -> new GeofencingZonesLayerBuilder(context.graph(), layerParameters); case Edge -> new EdgeLayerBuilder(context.graph(), layerParameters); case Vertex -> new VertexLayerBuilder(context.graph(), layerParameters); diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/model/LayerType.java b/src/main/java/org/opentripplanner/apis/vectortiles/model/LayerType.java index ece75f29b60..585725d0707 100644 --- a/src/main/java/org/opentripplanner/apis/vectortiles/model/LayerType.java +++ b/src/main/java/org/opentripplanner/apis/vectortiles/model/LayerType.java @@ -3,6 +3,7 @@ public enum LayerType { RegularStop, AreaStop, + GroupStop, GeofencingZones, Edge, Vertex, diff --git a/src/main/java/org/opentripplanner/datastore/OtpDataStore.java b/src/main/java/org/opentripplanner/datastore/OtpDataStore.java index 0bfec084b2c..397d3f64c70 100644 --- a/src/main/java/org/opentripplanner/datastore/OtpDataStore.java +++ b/src/main/java/org/opentripplanner/datastore/OtpDataStore.java @@ -18,6 +18,7 @@ import java.util.Collection; import java.util.Collections; import java.util.List; +import java.util.Optional; import java.util.function.Function; import java.util.stream.Collectors; import javax.annotation.Nonnull; @@ -59,6 +60,7 @@ public class OtpDataStore { /* Named resources available for both reading and writing. */ private DataSource streetGraph; private DataSource graph; + private DataSource stopConsolidation; private CompositeDataSource buildReportDir; private boolean opened = false; @@ -104,6 +106,11 @@ public void open() { graph = findSingleSource(config.graph(), GRAPH_FILENAME, GRAPH); buildReportDir = findCompositeSource(config.reportDirectory(), BUILD_REPORT_DIR, REPORT); + if (config.stopConsolidation() != null) { + stopConsolidation = + findSingleSource(config.stopConsolidation(), config.stopConsolidation().toString(), GTFS); + } + addAll(Arrays.asList(streetGraph, graph, buildReportDir)); // Also read in unknown sources in case the data input source is miss-spelled, @@ -152,6 +159,10 @@ public CompositeDataSource getBuildReportDir() { return buildReportDir; } + public Optional stopConsolidation() { + return Optional.ofNullable(stopConsolidation); + } + /* private methods */ private void add(DataSource source) { if (source != null) { diff --git a/src/main/java/org/opentripplanner/datastore/api/OtpDataStoreConfig.java b/src/main/java/org/opentripplanner/datastore/api/OtpDataStoreConfig.java index 7441b754103..984d66de2e9 100644 --- a/src/main/java/org/opentripplanner/datastore/api/OtpDataStoreConfig.java +++ b/src/main/java/org/opentripplanner/datastore/api/OtpDataStoreConfig.java @@ -4,6 +4,7 @@ import java.util.List; import java.util.regex.Pattern; import javax.annotation.Nonnull; +import javax.annotation.Nullable; import org.opentripplanner.datastore.OtpDataStore; /** @@ -68,6 +69,12 @@ public interface OtpDataStoreConfig { */ URI streetGraph(); + /** + * The URI to the stop consolidation data source. + */ + @Nullable + URI stopConsolidation(); + /** * * A pattern to lookup local GTFS files diff --git a/src/main/java/org/opentripplanner/framework/io/HttpUtils.java b/src/main/java/org/opentripplanner/framework/io/HttpUtils.java index 4981a8ab91b..672c9b9c481 100644 --- a/src/main/java/org/opentripplanner/framework/io/HttpUtils.java +++ b/src/main/java/org/opentripplanner/framework/io/HttpUtils.java @@ -3,6 +3,7 @@ import jakarta.ws.rs.core.HttpHeaders; import jakarta.ws.rs.core.UriInfo; import java.nio.charset.StandardCharsets; +import java.util.Arrays; import org.apache.hc.core5.http.ContentType; public final class HttpUtils { @@ -31,7 +32,7 @@ public static String getBaseAddress(UriInfo uri, HttpHeaders headers) { String host; if (headers.getRequestHeader(HEADER_X_FORWARDED_HOST) != null) { - host = headers.getRequestHeader(HEADER_X_FORWARDED_HOST).getFirst(); + host = extractHost(headers.getRequestHeader(HEADER_X_FORWARDED_HOST).getFirst()); } else if (headers.getRequestHeader(HEADER_HOST) != null) { host = headers.getRequestHeader(HEADER_HOST).getFirst(); } else { @@ -40,4 +41,12 @@ public static String getBaseAddress(UriInfo uri, HttpHeaders headers) { return protocol + "://" + host; } + + /** + * The X-Forwarded-Host header can contain a comma-separated list so we account for that. + * https://stackoverflow.com/questions/66042952/http-proxy-behavior-for-x-forwarded-host-header + */ + private static String extractHost(String xForwardedFor) { + return Arrays.stream(xForwardedFor.split(",")).map(String::strip).findFirst().get(); + } } diff --git a/src/main/java/org/opentripplanner/framework/io/OtpHttpClient.java b/src/main/java/org/opentripplanner/framework/io/OtpHttpClient.java index 0afe431e2c9..72b67441a18 100644 --- a/src/main/java/org/opentripplanner/framework/io/OtpHttpClient.java +++ b/src/main/java/org/opentripplanner/framework/io/OtpHttpClient.java @@ -27,6 +27,7 @@ import org.apache.hc.core5.http.ContentType; import org.apache.hc.core5.http.Header; import org.apache.hc.core5.http.HttpEntity; +import org.apache.hc.core5.http.HttpHeaders; import org.apache.hc.core5.http.HttpResponse; import org.apache.hc.core5.http.io.HttpClientResponseHandler; import org.apache.hc.core5.http.io.SocketConfig; @@ -264,23 +265,24 @@ public T getAndMap( Map headers, ResponseMapper contentMapper ) { - URL downloadUrl; - try { - downloadUrl = uri.toURL(); - } catch (MalformedURLException e) { - throw new OtpHttpClientException(e); - } - String proto = downloadUrl.getProtocol(); - if (proto.equals("http") || proto.equals("https")) { - return executeAndMap(new HttpGet(uri), timeout, headers, contentMapper); - } else { - // Local file probably, try standard java - try (InputStream is = downloadUrl.openStream()) { - return contentMapper.apply(is); - } catch (Exception e) { - throw new OtpHttpClientException(e); - } - } + return sendAndMap(new HttpGet(uri), uri, timeout, headers, contentMapper); + } + + /** + * Send an HTTP POST request with Content-Type: application/json. The body of the request + * is defined by {@code jsonBody}. + */ + public T postJsonAndMap( + URI uri, + JsonNode jsonBody, + Duration timeout, + Map headers, + ResponseMapper contentMapper + ) { + var request = new HttpPost(uri); + request.setEntity(new StringEntity(jsonBody.toString())); + request.setHeader(HttpHeaders.CONTENT_TYPE, ContentType.APPLICATION_JSON); + return sendAndMap(request, uri, timeout, headers, contentMapper); } /** @@ -400,6 +402,32 @@ protected T executeAndMapWithResponseHandler( } } + private T sendAndMap( + HttpUriRequestBase request, + URI uri, + Duration timeout, + Map headers, + ResponseMapper contentMapper + ) { + URL downloadUrl; + try { + downloadUrl = uri.toURL(); + } catch (MalformedURLException e) { + throw new OtpHttpClientException(e); + } + String proto = downloadUrl.getProtocol(); + if (proto.equals("http") || proto.equals("https")) { + return executeAndMap(request, timeout, headers, contentMapper); + } else { + // Local file probably, try standard java + try (InputStream is = downloadUrl.openStream()) { + return contentMapper.apply(is); + } catch (Exception e) { + throw new OtpHttpClientException(e); + } + } + } + /** * Configures the request with a custom timeout. */ diff --git a/src/main/java/org/opentripplanner/framework/lang/MemEfficientArrayBuilder.java b/src/main/java/org/opentripplanner/framework/lang/MemEfficientArrayBuilder.java new file mode 100644 index 00000000000..8b3a6ba6cd0 --- /dev/null +++ b/src/main/java/org/opentripplanner/framework/lang/MemEfficientArrayBuilder.java @@ -0,0 +1,99 @@ +package org.opentripplanner.framework.lang; + +import java.util.Arrays; +import java.util.Objects; +import javax.annotation.Nonnull; + +/** + * This array builder is used to minimize the creation of new objects (arrays). It takes an array as base, + * the original array. A new array is created only if there are differences. + *

+ * A common case is that one original is updated several times. In this case, you can use the + * {@link #build(Object[])} method to also make sure that the existing update is reused (deduplicated). + *

+ * Arrays are mutable, so be careful as this class helps you reuse the original if it has the same + * values. It protects the original while in scope, but you should only use it if you do not + * modify the original or the result on the outside. This builder does not help protect the arrays. + */ +public final class MemEfficientArrayBuilder { + + private final T[] original; + private T[] array = null; + + private MemEfficientArrayBuilder(@Nonnull T[] original) { + this.original = Objects.requireNonNull(original); + } + + /** + * Create a new array with the same size and values as the original. + */ + public static MemEfficientArrayBuilder of(T[] original) { + return new MemEfficientArrayBuilder<>(original); + } + + /** + * The size of the original and new array under construction. + */ + public int size() { + return original.length; + } + + /** + * Set the value at the given index. + */ + public MemEfficientArrayBuilder with(int index, T value) { + if (isNotModified()) { + if (value == original[index]) { + return this; + } + array = Arrays.copyOf(original, original.length); + } else if (value == array[index]) { + return this; + } + array[index] = value; + return this; + } + + /** + * Return the value at the given index from the original array. + */ + public T original(int index) { + return original[index]; + } + + /** + * Return the new value or fallback to the original value at the given index. + */ + public T getOrOriginal(int index) { + return isNotModified() ? original[index] : array[index]; + } + + /** + * There are no changes compared to the original array so far. + */ + public boolean isNotModified() { + return array == null; + } + + /** + * Build a new array. + *

    + *
  1. If no modifications exist the original array is returned
  2. + *
  3. If the new array equals the candidate the candidate is returned
  4. + *
  5. If not, a new array is returned
  6. + *
+ */ + public T[] build(T[] candidate) { + if (isNotModified()) { + return original; + } + return Arrays.equals(candidate, array) ? candidate : array; + } + + /** + * Create a new array or return the original [if not modified] + */ + public T[] build() { + return isNotModified() ? original : array; + } +} diff --git a/src/main/java/org/opentripplanner/graph_builder/GraphBuilder.java b/src/main/java/org/opentripplanner/graph_builder/GraphBuilder.java index 8b2e55ffc2f..c036c113e26 100644 --- a/src/main/java/org/opentripplanner/graph_builder/GraphBuilder.java +++ b/src/main/java/org/opentripplanner/graph_builder/GraphBuilder.java @@ -23,6 +23,7 @@ import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.service.worldenvelope.WorldEnvelopeRepository; import org.opentripplanner.standalone.config.BuildConfig; +import org.opentripplanner.street.model.StreetLimitationParameters; import org.opentripplanner.transit.service.TransitModel; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -65,6 +66,7 @@ public static GraphBuilder create( WorldEnvelopeRepository worldEnvelopeRepository, @Nullable EmissionsDataModel emissionsDataModel, @Nullable StopConsolidationRepository stopConsolidationRepository, + StreetLimitationParameters streetLimitationParameters, boolean loadStreetGraph, boolean saveStreetGraph ) { @@ -82,6 +84,7 @@ public static GraphBuilder create( .transitModel(transitModel) .worldEnvelopeRepository(worldEnvelopeRepository) .stopConsolidationRepository(stopConsolidationRepository) + .streetLimitationParameters(streetLimitationParameters) .dataSources(dataSources) .timeZoneId(transitModel.getTimeZone()); diff --git a/src/main/java/org/opentripplanner/graph_builder/GraphBuilderDataSources.java b/src/main/java/org/opentripplanner/graph_builder/GraphBuilderDataSources.java index eaa61fea139..3ed675c0da8 100644 --- a/src/main/java/org/opentripplanner/graph_builder/GraphBuilderDataSources.java +++ b/src/main/java/org/opentripplanner/graph_builder/GraphBuilderDataSources.java @@ -19,7 +19,6 @@ import org.opentripplanner.datastore.api.DataSource; import org.opentripplanner.datastore.api.FileType; import org.opentripplanner.datastore.api.OtpBaseDirectory; -import org.opentripplanner.datastore.file.FileDataSource; import org.opentripplanner.framework.application.OtpAppException; import org.opentripplanner.graph_builder.module.ned.parameter.DemExtractParameters; import org.opentripplanner.graph_builder.module.ned.parameter.DemExtractParametersBuilder; @@ -186,13 +185,8 @@ public NetexFeedParameters getNetexConfig(DataSource dataSource) { /** * Returns the optional data source for the stop consolidation configuration. */ - public Optional stopConsolidationDataSource() { - return Optional - .ofNullable(buildConfig.stopConsolidationFile) - .map(fileName -> { - var f = baseDirectory.toPath().resolve(fileName).toFile(); - return new FileDataSource(f, FileType.CONFIG); - }); + public Optional stopConsolidation() { + return store.stopConsolidation(); } /** diff --git a/src/main/java/org/opentripplanner/graph_builder/issues/StreetCarSpeedZero.java b/src/main/java/org/opentripplanner/graph_builder/issues/StreetCarSpeedZero.java deleted file mode 100644 index 1107486af97..00000000000 --- a/src/main/java/org/opentripplanner/graph_builder/issues/StreetCarSpeedZero.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.opentripplanner.graph_builder.issues; - -import org.opentripplanner.graph_builder.issue.api.DataImportIssue; -import org.opentripplanner.openstreetmap.model.OSMWithTags; - -public record StreetCarSpeedZero(OSMWithTags entity) implements DataImportIssue { - private static final String FMT = "Way %s has car speed zero"; - private static final String HTMLFMT = "Way '%s' has car speed zero"; - - @Override - public String getMessage() { - return String.format(FMT, entity.getId()); - } - - @Override - public String getHTMLMessage() { - return String.format(HTMLFMT, entity.url(), entity.getId()); - } -} diff --git a/src/main/java/org/opentripplanner/graph_builder/module/configure/GraphBuilderFactory.java b/src/main/java/org/opentripplanner/graph_builder/module/configure/GraphBuilderFactory.java index 9fd99d35ea0..9c778481d4d 100644 --- a/src/main/java/org/opentripplanner/graph_builder/module/configure/GraphBuilderFactory.java +++ b/src/main/java/org/opentripplanner/graph_builder/module/configure/GraphBuilderFactory.java @@ -31,6 +31,7 @@ import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.service.worldenvelope.WorldEnvelopeRepository; import org.opentripplanner.standalone.config.BuildConfig; +import org.opentripplanner.street.model.StreetLimitationParameters; import org.opentripplanner.transit.service.TransitModel; @Singleton @@ -55,6 +56,7 @@ public interface GraphBuilderFactory { EdgeUpdaterModule dataOverlayFactory(); DataImportIssueReporter dataImportIssueReporter(); CalculateWorldEnvelopeModule calculateWorldEnvelopeModule(); + StreetLimitationParameters streetLimitationParameters(); @Nullable StopConsolidationModule stopConsolidationModule(); @@ -81,6 +83,9 @@ Builder stopConsolidationRepository( @Nullable StopConsolidationRepository stopConsolidationRepository ); + @BindsInstance + Builder streetLimitationParameters(StreetLimitationParameters streetLimitationParameters); + @BindsInstance Builder dataSources(GraphBuilderDataSources graphBuilderDataSources); diff --git a/src/main/java/org/opentripplanner/graph_builder/module/configure/GraphBuilderModules.java b/src/main/java/org/opentripplanner/graph_builder/module/configure/GraphBuilderModules.java index 444adb5b727..10d3a997579 100644 --- a/src/main/java/org/opentripplanner/graph_builder/module/configure/GraphBuilderModules.java +++ b/src/main/java/org/opentripplanner/graph_builder/module/configure/GraphBuilderModules.java @@ -43,6 +43,7 @@ import org.opentripplanner.routing.api.request.preference.WalkPreferences; import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.standalone.config.BuildConfig; +import org.opentripplanner.street.model.StreetLimitationParameters; import org.opentripplanner.transit.service.TransitModel; /** @@ -57,7 +58,8 @@ static OsmModule provideOpenStreetMapModule( GraphBuilderDataSources dataSources, BuildConfig config, Graph graph, - DataImportIssueStore issueStore + DataImportIssueStore issueStore, + StreetLimitationParameters streetLimitationParameters ) { List providers = new ArrayList<>(); for (ConfiguredDataSource osmConfiguredDataSource : dataSources.getOsmConfiguredDatasource()) { @@ -66,7 +68,8 @@ static OsmModule provideOpenStreetMapModule( osmConfiguredDataSource.dataSource(), osmConfiguredDataSource.config().osmTagMapper(), osmConfiguredDataSource.config().timeZone(), - config.osmCacheDataInMem + config.osmCacheDataInMem, + issueStore ) ); } @@ -81,6 +84,7 @@ static OsmModule provideOpenStreetMapModule( .withMaxAreaNodes(config.maxAreaNodes) .withBoardingAreaRefTags(config.boardingLocationTags) .withIssueStore(issueStore) + .withStreetLimitationParameters(streetLimitationParameters) .build(); } @@ -293,7 +297,7 @@ static StopConsolidationModule providesStopConsolidationModule( GraphBuilderDataSources dataSources ) { return dataSources - .stopConsolidationDataSource() + .stopConsolidation() .map(ds -> StopConsolidationModule.of(transitModel, repo, ds)) .orElse(null); } diff --git a/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmModule.java b/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmModule.java index 9cc15d191fc..e831d2ada47 100644 --- a/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmModule.java +++ b/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmModule.java @@ -7,6 +7,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; +import javax.annotation.Nonnull; import org.locationtech.jts.geom.Coordinate; import org.locationtech.jts.geom.Geometry; import org.locationtech.jts.geom.LineString; @@ -15,7 +17,6 @@ import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.framework.logging.ProgressTracker; import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; -import org.opentripplanner.graph_builder.issues.StreetCarSpeedZero; import org.opentripplanner.graph_builder.model.GraphBuilderModule; import org.opentripplanner.graph_builder.module.osm.parameters.OsmProcessingParameters; import org.opentripplanner.openstreetmap.OsmProvider; @@ -27,6 +28,7 @@ import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.routing.util.ElevationUtils; import org.opentripplanner.routing.vehicle_parking.VehicleParking; +import org.opentripplanner.street.model.StreetLimitationParameters; import org.opentripplanner.street.model.StreetTraversalPermission; import org.opentripplanner.street.model.edge.StreetEdge; import org.opentripplanner.street.model.edge.StreetEdgeBuilder; @@ -55,11 +57,13 @@ public class OsmModule implements GraphBuilderModule { private final SafetyValueNormalizer normalizer; private final VertexGenerator vertexGenerator; private final OsmDatabase osmdb; + private final StreetLimitationParameters streetLimitationParameters; OsmModule( Collection providers, Graph graph, DataImportIssueStore issueStore, + @Nonnull StreetLimitationParameters streetLimitationParameters, OsmProcessingParameters params ) { this.providers = List.copyOf(providers); @@ -69,6 +73,7 @@ public class OsmModule implements GraphBuilderModule { this.osmdb = new OsmDatabase(issueStore); this.vertexGenerator = new VertexGenerator(osmdb, graph, params.boardingAreaRefTags()); this.normalizer = new SafetyValueNormalizer(graph, issueStore); + this.streetLimitationParameters = Objects.requireNonNull(streetLimitationParameters); } public static OsmModuleBuilder of(Collection providers, Graph graph) { @@ -94,6 +99,7 @@ public void buildGraph() { LOG.info("Building street graph from OSM"); build(); graph.hasStreets = true; + streetLimitationParameters.initMaxCarSpeed(getMaxCarSpeed()); } @Override @@ -541,14 +547,20 @@ private StreetEdge getEdgeForStreet( seb.withBogusName(true); } - // < 0.04: account for - if (carSpeed < 0.04) { - issueStore.add(new StreetCarSpeedZero(way)); - } - StreetEdge street = seb.buildAndConnect(); params.edgeNamer().recordEdge(way, street); return street; } + + private float getMaxCarSpeed() { + float maxSpeed = 0f; + for (OsmProvider provider : providers) { + var carSpeed = provider.getOsmTagMapper().getMaxUsedCarSpeed(provider.getWayPropertySet()); + if (carSpeed > maxSpeed) { + maxSpeed = carSpeed; + } + } + return maxSpeed; + } } diff --git a/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmModuleBuilder.java b/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmModuleBuilder.java index a99752ca2b9..f0a40fa678f 100644 --- a/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmModuleBuilder.java +++ b/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmModuleBuilder.java @@ -8,6 +8,7 @@ import org.opentripplanner.graph_builder.services.osm.EdgeNamer; import org.opentripplanner.openstreetmap.OsmProvider; import org.opentripplanner.routing.graph.Graph; +import org.opentripplanner.street.model.StreetLimitationParameters; /** * Builder for the {@link OsmModule} @@ -24,6 +25,7 @@ public class OsmModuleBuilder { private boolean staticParkAndRide = false; private boolean staticBikeParkAndRide = false; private int maxAreaNodes; + private StreetLimitationParameters streetLimitationParameters = new StreetLimitationParameters(); OsmModuleBuilder(Collection providers, Graph graph) { this.providers = providers; @@ -70,11 +72,17 @@ public OsmModuleBuilder withMaxAreaNodes(int maxAreaNodes) { return this; } + public OsmModuleBuilder withStreetLimitationParameters(StreetLimitationParameters parameters) { + this.streetLimitationParameters = parameters; + return this; + } + public OsmModule build() { return new OsmModule( providers, graph, issueStore, + streetLimitationParameters, new OsmProcessingParameters( boardingAreaRefTags, edgeNamer, diff --git a/src/main/java/org/opentripplanner/graph_builder/module/osm/WalkableAreaBuilder.java b/src/main/java/org/opentripplanner/graph_builder/module/osm/WalkableAreaBuilder.java index af17593d36a..5562f1df1a3 100644 --- a/src/main/java/org/opentripplanner/graph_builder/module/osm/WalkableAreaBuilder.java +++ b/src/main/java/org/opentripplanner/graph_builder/module/osm/WalkableAreaBuilder.java @@ -505,7 +505,7 @@ private Set createSegments( float carSpeed = areaEntity .getOsmProvider() - .getWayPropertySet() + .getOsmTagMapper() .getCarSpeedForWay(areaEntity, false); double length = SphericalDistanceLibrary.distance( diff --git a/src/main/java/org/opentripplanner/gtfs/graphbuilder/GtfsModule.java b/src/main/java/org/opentripplanner/gtfs/graphbuilder/GtfsModule.java index a66b3f659bb..2f7feb5993e 100644 --- a/src/main/java/org/opentripplanner/gtfs/graphbuilder/GtfsModule.java +++ b/src/main/java/org/opentripplanner/gtfs/graphbuilder/GtfsModule.java @@ -120,12 +120,20 @@ public void buildGraph() { boolean hasTransit = false; + Map feedIdsEncountered = new HashMap<>(); + try { for (GtfsBundle gtfsBundle : gtfsBundles) { GtfsMutableRelationalDao gtfsDao = loadBundle(gtfsBundle); + + final String feedId = gtfsBundle.getFeedId().getId(); + verifyUniqueFeedId(gtfsBundle, feedIdsEncountered, feedId); + + feedIdsEncountered.put(feedId, gtfsBundle); + GTFSToOtpTransitServiceMapper mapper = new GTFSToOtpTransitServiceMapper( new OtpTransitServiceBuilder(transitModel.getStopModel(), issueStore), - gtfsBundle.getFeedId().getId(), + feedId, issueStore, gtfsBundle.discardMinTransferTimes(), gtfsDao, @@ -203,6 +211,32 @@ public void buildGraph() { transitModel.updateCalendarServiceData(hasTransit, calendarServiceData, issueStore); } + /** + * Verifies that a feed id is not assigned twice. + *

+ * Duplicates can happen in the following cases: + * - the feed id is configured twice in build-config.json + * - two GTFS feeds have the same feed_info.feed_id + * - a GTFS feed defines a feed_info.feed_id like '3' that collides with an auto-generated one + *

+ * Debugging these cases is very confusing, so we prevent it from happening. + */ + private static void verifyUniqueFeedId( + GtfsBundle gtfsBundle, + Map feedIdsEncountered, + String feedId + ) { + if (feedIdsEncountered.containsKey(feedId)) { + LOG.error( + "Feed id '{}' has been used for {} but it was already assigned to {}.", + feedId, + gtfsBundle, + feedIdsEncountered.get(feedId) + ); + throw new IllegalArgumentException("Duplicate feed id: '%s'".formatted(feedId)); + } + } + @Override public void checkInputs() { for (GtfsBundle bundle : gtfsBundles) { @@ -355,6 +389,9 @@ private GtfsMutableRelationalDao loadBundle(GtfsBundle gtfsBundle) throws IOExce transferRule.getFromLegGroupId().setAgencyId(reader.getDefaultAgencyId()); transferRule.getToLegGroupId().setAgencyId(reader.getDefaultAgencyId()); } + for (var transferRule : store.getAllEntitiesForType(FareLegRule.class)) { + transferRule.getFareProductId().setAgencyId(reader.getDefaultAgencyId()); + } for (Pathway pathway : store.getAllEntitiesForType(Pathway.class)) { pathway.getId().setAgencyId(reader.getDefaultAgencyId()); } diff --git a/src/main/java/org/opentripplanner/gtfs/mapping/GTFSToOtpTransitServiceMapper.java b/src/main/java/org/opentripplanner/gtfs/mapping/GTFSToOtpTransitServiceMapper.java index 0e2805f11b8..4d5fe6bd051 100644 --- a/src/main/java/org/opentripplanner/gtfs/mapping/GTFSToOtpTransitServiceMapper.java +++ b/src/main/java/org/opentripplanner/gtfs/mapping/GTFSToOtpTransitServiceMapper.java @@ -72,6 +72,7 @@ public class GTFSToOtpTransitServiceMapper { private final FareTransferRuleMapper fareTransferRuleMapper; + private final StopAreaMapper stopAreaMapper; private final DirectionMapper directionMapper; private final DataImportIssueStore issueStore; @@ -111,6 +112,9 @@ public GTFSToOtpTransitServiceMapper( boardingAreaMapper = new BoardingAreaMapper(translationHelper, stopLookup); locationMapper = new LocationMapper(builder.stopModel()); locationGroupMapper = new LocationGroupMapper(stopMapper, locationMapper, builder.stopModel()); + // the use of stop areas were reverted in the spec + // this code will go away, please migrate now! + stopAreaMapper = new StopAreaMapper(stopMapper, locationMapper, builder.stopModel()); pathwayMapper = new PathwayMapper(stopMapper, entranceMapper, pathwayNodeMapper, boardingAreaMapper); routeMapper = new RouteMapper(agencyMapper, issueStore, translationHelper); @@ -122,6 +126,7 @@ public GTFSToOtpTransitServiceMapper( stopMapper, locationMapper, locationGroupMapper, + stopAreaMapper, tripMapper, bookingRuleMapper, translationHelper @@ -161,6 +166,7 @@ public void mapStopTripAndRouteDataIntoBuilder() { // Stop areas and Stop groups are only used in FLEX routes builder.stopModel().withAreaStops(locationMapper.map(data.getAllLocations())); builder.stopModel().withGroupStops(locationGroupMapper.map(data.getAllLocationGroups())); + builder.stopModel().withGroupStops(stopAreaMapper.map(data.getAllStopAreas())); } builder.getPathways().addAll(pathwayMapper.map(data.getAllPathways())); diff --git a/src/main/java/org/opentripplanner/gtfs/mapping/StopAreaMapper.java b/src/main/java/org/opentripplanner/gtfs/mapping/StopAreaMapper.java new file mode 100644 index 00000000000..55c836aa458 --- /dev/null +++ b/src/main/java/org/opentripplanner/gtfs/mapping/StopAreaMapper.java @@ -0,0 +1,72 @@ +package org.opentripplanner.gtfs.mapping; + +import static org.opentripplanner.gtfs.mapping.AgencyAndIdMapper.mapAgencyAndId; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import org.onebusaway.gtfs.model.Location; +import org.onebusaway.gtfs.model.Stop; +import org.opentripplanner.framework.collection.MapUtils; +import org.opentripplanner.framework.i18n.NonLocalizedString; +import org.opentripplanner.transit.model.site.GroupStop; +import org.opentripplanner.transit.model.site.GroupStopBuilder; +import org.opentripplanner.transit.service.StopModelBuilder; + +/** + * For a while GTFS Flex location groups were replaced by GTFS Fares v2 stop areas. After a few + * months, this decision was reverted and a new style of location groups were re-added to the Flex + * spec. + * @deprecated Arcadis tooling still produces stop areas and for a while we will support both. Please don't rely + * on this as the class will be removed in the future! + */ +@Deprecated +public class StopAreaMapper { + + private final StopMapper stopMapper; + + private final LocationMapper locationMapper; + + private final Map mappedStopAreas = new HashMap<>(); + private final StopModelBuilder stopModel; + + public StopAreaMapper( + StopMapper stopMapper, + LocationMapper locationMapper, + StopModelBuilder stopModel + ) { + this.stopMapper = stopMapper; + this.locationMapper = locationMapper; + this.stopModel = stopModel; + } + + Collection map(Collection allAreas) { + return MapUtils.mapToList(allAreas, this::map); + } + + /** Map from GTFS to OTP model, {@code null} safe. */ + GroupStop map(org.onebusaway.gtfs.model.StopArea original) { + return original == null ? null : mappedStopAreas.computeIfAbsent(original, this::doMap); + } + + private GroupStop doMap(org.onebusaway.gtfs.model.StopArea element) { + GroupStopBuilder groupStopBuilder = stopModel + .groupStop(mapAgencyAndId(element.getId())) + .withName(new NonLocalizedString(element.getName())); + + for (org.onebusaway.gtfs.model.StopLocation location : element.getLocations()) { + switch (location) { + case Stop stop -> groupStopBuilder.addLocation(stopMapper.map(stop)); + case Location loc -> groupStopBuilder.addLocation(locationMapper.map(loc)); + case org.onebusaway.gtfs.model.StopArea ignored -> throw new RuntimeException( + "Nested GroupStops are not allowed" + ); + case null, default -> throw new RuntimeException( + "Unknown location type: " + location.getClass().getSimpleName() + ); + } + } + + return groupStopBuilder.build(); + } +} diff --git a/src/main/java/org/opentripplanner/gtfs/mapping/StopTimeMapper.java b/src/main/java/org/opentripplanner/gtfs/mapping/StopTimeMapper.java index 47f49a58fc1..fc75236f4e4 100644 --- a/src/main/java/org/opentripplanner/gtfs/mapping/StopTimeMapper.java +++ b/src/main/java/org/opentripplanner/gtfs/mapping/StopTimeMapper.java @@ -7,6 +7,7 @@ import org.onebusaway.gtfs.model.Location; import org.onebusaway.gtfs.model.LocationGroup; import org.onebusaway.gtfs.model.Stop; +import org.onebusaway.gtfs.model.StopArea; import org.opentripplanner.framework.collection.MapUtils; import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.model.StopTime; @@ -21,6 +22,7 @@ class StopTimeMapper { private final LocationMapper locationMapper; private final LocationGroupMapper locationGroupMapper; + private final StopAreaMapper stopAreaMapper; private final TripMapper tripMapper; private final BookingRuleMapper bookingRuleMapper; @@ -33,6 +35,7 @@ class StopTimeMapper { StopMapper stopMapper, LocationMapper locationMapper, LocationGroupMapper locationGroupMapper, + StopAreaMapper stopAreaMapper, TripMapper tripMapper, BookingRuleMapper bookingRuleMapper, TranslationHelper translationHelper @@ -40,6 +43,7 @@ class StopTimeMapper { this.stopMapper = stopMapper; this.locationMapper = locationMapper; this.locationGroupMapper = locationGroupMapper; + this.stopAreaMapper = stopAreaMapper; this.tripMapper = tripMapper; this.bookingRuleMapper = bookingRuleMapper; this.translationHelper = translationHelper; @@ -67,6 +71,8 @@ private StopTime doMap(org.onebusaway.gtfs.model.StopTime rhs) { case Stop stop -> lhs.setStop(stopMapper.map(stop)); case Location location -> lhs.setStop(locationMapper.map(location)); case LocationGroup locGroup -> lhs.setStop(locationGroupMapper.map(locGroup)); + // TODO: only here for backwards compatibility, this will be removed in the future + case StopArea area -> lhs.setStop(stopAreaMapper.map(area)); default -> throw new IllegalArgumentException( "Unknown location type: %s".formatted(stopLocation) ); diff --git a/src/main/java/org/opentripplanner/inspector/vector/stop/GroupStopLayerBuilder.java b/src/main/java/org/opentripplanner/inspector/vector/stop/GroupStopLayerBuilder.java new file mode 100644 index 00000000000..1e66397bc05 --- /dev/null +++ b/src/main/java/org/opentripplanner/inspector/vector/stop/GroupStopLayerBuilder.java @@ -0,0 +1,50 @@ +package org.opentripplanner.inspector.vector.stop; + +import java.util.Collection; +import java.util.List; +import java.util.Locale; +import org.locationtech.jts.geom.Envelope; +import org.locationtech.jts.geom.Geometry; +import org.opentripplanner.inspector.vector.LayerBuilder; +import org.opentripplanner.inspector.vector.LayerParameters; +import org.opentripplanner.transit.model.site.GroupStop; +import org.opentripplanner.transit.model.site.StopLocation; + +/** + * A vector tile layer for {@link GroupStop}s inside the vector tile bounds. The builder does not + * query for the GroupStops to draw, but instead uses the geometries of the GroupStops that are + * passed to the constructor. + */ +public class GroupStopLayerBuilder extends LayerBuilder { + + private final List geometries; + + public GroupStopLayerBuilder( + LayerParameters layerParameters, + Locale locale, + Collection groupStops + ) { + super( + new StopLocationPropertyMapper(locale), + layerParameters.name(), + layerParameters.expansionFactor() + ); + // Because there are very few GroupStops with relevant geometries, we can precompute the + // geometries and store them in a list at the time of construction. + this.geometries = + groupStops + .stream() + .filter(groupStop -> groupStop.getEncompassingAreaGeometry().isPresent()) + .map(stop -> { + Geometry geometry = stop.getEncompassingAreaGeometry().get().copy(); + geometry.setUserData(stop); + return geometry; + }) + .toList(); + } + + @Override + protected List getGeometries(Envelope query) { + return geometries; + } +} diff --git a/src/main/java/org/opentripplanner/netex/mapping/AuthorityToAgencyMapper.java b/src/main/java/org/opentripplanner/netex/mapping/AuthorityToAgencyMapper.java index 5e9727f4462..ec466cc2e27 100644 --- a/src/main/java/org/opentripplanner/netex/mapping/AuthorityToAgencyMapper.java +++ b/src/main/java/org/opentripplanner/netex/mapping/AuthorityToAgencyMapper.java @@ -2,6 +2,7 @@ import static org.opentripplanner.netex.mapping.support.NetexObjectDecorator.withOptional; +import org.opentripplanner.framework.lang.StringUtils; import org.opentripplanner.netex.mapping.support.FeedScopedIdFactory; import org.opentripplanner.transit.model.organization.Agency; import org.opentripplanner.transit.model.organization.AgencyBuilder; @@ -33,9 +34,13 @@ class AuthorityToAgencyMapper { * Map authority and time zone to OTP agency. */ Agency mapAuthorityToAgency(Authority source) { + String name = MultilingualStringMapper.nullableValueOf(source.getName()); + String shortName = MultilingualStringMapper.nullableValueOf(source.getShortName()); + String agencyName = StringUtils.hasValue(name) ? name : shortName; + AgencyBuilder target = Agency .of(idFactory.createId(source.getId())) - .withName(source.getName().getValue()) + .withName(agencyName) .withTimezone(timeZone); withOptional( diff --git a/src/main/java/org/opentripplanner/netex/mapping/MultilingualStringMapper.java b/src/main/java/org/opentripplanner/netex/mapping/MultilingualStringMapper.java index a51b628bcaa..0f0e2336bc7 100644 --- a/src/main/java/org/opentripplanner/netex/mapping/MultilingualStringMapper.java +++ b/src/main/java/org/opentripplanner/netex/mapping/MultilingualStringMapper.java @@ -1,12 +1,22 @@ package org.opentripplanner.netex.mapping; import javax.annotation.Nullable; +import org.opentripplanner.framework.lang.StringUtils; import org.rutebanken.netex.model.MultilingualString; public class MultilingualStringMapper { @Nullable - public static String nullableValueOf(@Nullable MultilingualString string) { - return string == null ? null : string.getValue(); + public static String nullableValueOf(@Nullable MultilingualString multilingualString) { + if (multilingualString == null) { + return null; + } + + String value = multilingualString.getValue(); + if (StringUtils.hasNoValue(value)) { + return null; + } + + return value; } } diff --git a/src/main/java/org/opentripplanner/openstreetmap/OsmProvider.java b/src/main/java/org/opentripplanner/openstreetmap/OsmProvider.java index cfe6713dd74..e35a846cbbd 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/OsmProvider.java +++ b/src/main/java/org/opentripplanner/openstreetmap/OsmProvider.java @@ -12,6 +12,7 @@ import org.opentripplanner.framework.application.OtpFileNames; import org.opentripplanner.framework.logging.ProgressTracker; import org.opentripplanner.framework.tostring.ToStringBuilder; +import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; import org.opentripplanner.graph_builder.module.osm.OsmDatabase; import org.opentripplanner.openstreetmap.tagmapping.OsmTagMapper; import org.opentripplanner.openstreetmap.tagmapping.OsmTagMapperSource; @@ -41,19 +42,26 @@ public class OsmProvider { /** For tests */ public OsmProvider(File file, boolean cacheDataInMem) { - this(new FileDataSource(file, FileType.OSM), OsmTagMapperSource.DEFAULT, null, cacheDataInMem); + this( + new FileDataSource(file, FileType.OSM), + OsmTagMapperSource.DEFAULT, + null, + cacheDataInMem, + DataImportIssueStore.NOOP + ); } public OsmProvider( DataSource dataSource, OsmTagMapperSource tagMapperSource, ZoneId zoneId, - boolean cacheDataInMem + boolean cacheDataInMem, + DataImportIssueStore issueStore ) { this.source = dataSource; this.zoneId = zoneId; this.osmTagMapper = tagMapperSource.getInstance(); - this.wayPropertySet = new WayPropertySet(); + this.wayPropertySet = new WayPropertySet(issueStore); osmTagMapper.populateProperties(wayPropertySet); this.cacheDataInMem = cacheDataInMem; } diff --git a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/AtlantaMapper.java b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/AtlantaMapper.java index b7e60e0f008..f9539188904 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/AtlantaMapper.java +++ b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/AtlantaMapper.java @@ -24,6 +24,9 @@ public void populateProperties(WayPropertySet props) { props.setProperties("highway=trunk_link", withModes(ALL).bicycleSafety(2.5)); props.setProperties("highway=trunk", withModes(ALL).bicycleSafety(2.5)); + // Max speed limit in Georgia is 70 mph ~= 113kmh ~= 31.3m/s + props.maxPossibleCarSpeed = 31.4f; + // Read the rest from the default set new DefaultMapper().populateProperties(props); } diff --git a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/ConstantSpeedMapper.java b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/ConstantSpeedMapper.java index 58cff2e9a3d..b233b3f549e 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/ConstantSpeedMapper.java +++ b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/ConstantSpeedMapper.java @@ -33,6 +33,7 @@ public void populateProperties(WayPropertySet props) { props.setCarSpeed("highway=*", speed); // Read the rest from the default set new FinlandMapper().populateProperties(props); + props.maxPossibleCarSpeed = speed; } @Override @@ -42,4 +43,12 @@ public float getCarSpeedForWay(OSMWithTags way, boolean backward) { */ return speed; } + + @Override + public Float getMaxUsedCarSpeed(WayPropertySet wayPropertySet) { + // This is needed because the way property set uses normal speed limits from Finland mapper + // to set the walk safety limits which resets the maximum used car speed to be something else + // than what is used for the street edge car speeds. + return speed; + } } diff --git a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/DefaultMapper.java b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/DefaultMapper.java index 01cf213b03b..1463313203d 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/DefaultMapper.java +++ b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/DefaultMapper.java @@ -547,7 +547,9 @@ public void populateProperties(WayPropertySet props) { props.setCarSpeed("highway=road", 11.2f); // ~= 25 mph // default ~= 25 mph - props.defaultSpeed = 11.2f; + props.defaultCarSpeed = 11.2f; + // 38 m/s ~= 85 mph ~= 137 kph + props.maxPossibleCarSpeed = 38f; /* special situations */ diff --git a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/FinlandMapper.java b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/FinlandMapper.java index 253bb385aa3..9bafe133f2a 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/FinlandMapper.java +++ b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/FinlandMapper.java @@ -163,9 +163,11 @@ else if (speedLimit <= 16.65f) { props.setProperties("highway=service;tunnel=yes;access=destination", withModes(NONE)); props.setProperties("highway=service;access=destination", withModes(ALL).bicycleSafety(1.1)); - /* - * Automobile speeds in Finland. General speed limit is 80kph unless signs says otherwise. - */ + // Automobile speeds in Finland. + // General speed limit is 80kph unless signs says otherwise. + props.defaultCarSpeed = 22.22f; + // 120kph is the max speed limit in Finland + props.maxPossibleCarSpeed = 33.34f; // = 100kph. Varies between 80 - 120 kph depending on road and season. props.setCarSpeed("highway=motorway", 27.77f); // = 54kph diff --git a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/GermanyMapper.java b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/GermanyMapper.java index c3d4c7fec8a..908d9838f53 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/GermanyMapper.java +++ b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/GermanyMapper.java @@ -26,6 +26,7 @@ public void populateProperties(WayPropertySet props) { // Automobile speeds in Germany. General speed limit is 50kph in settlements, 100kph outside settlements. // For motorways, there (currently still) is no limit. Nevertheless 120kph is assumed to reflect varying // traffic conditions. + props.maxPossibleCarSpeed = 33.34f; props.setCarSpeed("highway=motorway", 33.33f); // = 120kph. Varies between 80 - 120 kph depending on road and season. props.setCarSpeed("highway=motorway_link", 15); // = 54kph props.setCarSpeed("highway=trunk", 27.27f); // 100kph diff --git a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/HamburgMapper.java b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/HamburgMapper.java new file mode 100644 index 00000000000..f893fbb5519 --- /dev/null +++ b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/HamburgMapper.java @@ -0,0 +1,23 @@ +package org.opentripplanner.openstreetmap.tagmapping; + +import org.opentripplanner.openstreetmap.model.OSMWithTags; + +/** + * Modified mapper to allow through traffic for combination access=customers and customers=HVV. + * + * @see GermanyMapper + * @see OsmTagMapper + * @see DefaultMapper + * + * @author Maintained by HBT (geofox-team@hbt.de) + */ +public class HamburgMapper extends GermanyMapper { + + @Override + public boolean isGeneralNoThroughTraffic(OSMWithTags way) { + String access = way.getTag("access"); + boolean isNoThroughTraffic = doesTagValueDisallowThroughTraffic(access); + + return isNoThroughTraffic && !way.isTag("customers", "HVV"); + } +} diff --git a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/HoustonMapper.java b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/HoustonMapper.java index e1e7aaf83df..7fdde133465 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/HoustonMapper.java +++ b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/HoustonMapper.java @@ -26,6 +26,10 @@ public void populateProperties(WayPropertySet props) { new ExactMatchSpecifier("highway=footway;layer=-1;tunnel=yes;indoor=yes"), withModes(NONE) ); + + // Max speed limit in Texas is 38 m/s ~= 85 mph ~= 137 kph + props.maxPossibleCarSpeed = 38f; + // Read the rest from the default set new DefaultMapper().populateProperties(props); } diff --git a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/NorwayMapper.java b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/NorwayMapper.java index d2cd2f3cf96..9de824a145b 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/NorwayMapper.java +++ b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/NorwayMapper.java @@ -608,17 +608,18 @@ else if (speedLimit >= 11.1f) { 13.89f // 50 km/t ); - props.setCarSpeed("highway=residential", 13.89f); // 50 km/t - props.setCarSpeed("highway=service", 13.89f); // 50 km/t + props.setCarSpeed("highway=residential", 13.89f); // 50 km/h + props.setCarSpeed("highway=service", 13.89f); // 50 km/h - props.setCarSpeed("highway=service;service=driveway", 8.33f); // 30 km/t + props.setCarSpeed("highway=service;service=driveway", 8.33f); // 30 km/h props.setCarSpeed("highway=service;service=parking_aisle", 8.33f); props.setCarSpeed("highway=track", 8.33f); - props.setCarSpeed("highway=living_street", 1.94f); // 7 km/t - props.setCarSpeed("highway=pedestrian", 1.94f); // 7 km/t + props.setCarSpeed("highway=living_street", 1.94f); // 7 km/h + props.setCarSpeed("highway=pedestrian", 1.94f); // 7 km/h - props.defaultSpeed = 22.22f; // 80 km/t + props.defaultCarSpeed = 22.22f; // 80 km/h + props.maxPossibleCarSpeed = 30.56f; // 110 km/h new DefaultMapper().populateNotesAndNames(props); diff --git a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/OsmTagMapper.java b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/OsmTagMapper.java index 389e3b90ca8..8bcfbfdf65a 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/OsmTagMapper.java +++ b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/OsmTagMapper.java @@ -26,6 +26,10 @@ default float getCarSpeedForWay(OSMWithTags way, boolean backward) { return way.getOsmProvider().getWayPropertySet().getCarSpeedForWay(way, backward); } + default Float getMaxUsedCarSpeed(WayPropertySet wayPropertySet) { + return wayPropertySet.maxUsedCarSpeed; + } + default boolean isGeneralNoThroughTraffic(OSMWithTags way) { String access = way.getTag("access"); return doesTagValueDisallowThroughTraffic(access); diff --git a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/OsmTagMapperSource.java b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/OsmTagMapperSource.java index 6ed4a701c30..d430ad05f7d 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/OsmTagMapperSource.java +++ b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/OsmTagMapperSource.java @@ -10,6 +10,7 @@ public enum OsmTagMapperSource { UK, FINLAND, GERMANY, + HAMBURG, ATLANTA, HOUSTON, PORTLAND, @@ -22,6 +23,7 @@ public OsmTagMapper getInstance() { case UK -> new UKMapper(); case FINLAND -> new FinlandMapper(); case GERMANY -> new GermanyMapper(); + case HAMBURG -> new HamburgMapper(); case ATLANTA -> new AtlantaMapper(); case HOUSTON -> new HoustonMapper(); case PORTLAND -> new PortlandMapper(); diff --git a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/PortlandMapper.java b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/PortlandMapper.java index 29b17921540..a532d279ba4 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/PortlandMapper.java +++ b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/PortlandMapper.java @@ -40,6 +40,10 @@ public void populateProperties(WayPropertySet props) { props.setMixinProperties(exact("sidewalk=no;maxspeed=40 mph"), ofWalkSafety(3)); props.setMixinProperties(exact("sidewalk=no;maxspeed=35 mph"), ofWalkSafety(2)); props.setMixinProperties(exact("sidewalk=no;maxspeed=30 mph"), ofWalkSafety(1.5)); + + // Max speed limit in Oregon is 70 mph ~= 113kmh ~= 31.3m/s + props.maxPossibleCarSpeed = 31.4f; + // Read the rest from the default set new DefaultMapper().populateProperties(props); } diff --git a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/UKMapper.java b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/UKMapper.java index cd809197559..7639c6594b2 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/UKMapper.java +++ b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/UKMapper.java @@ -61,6 +61,8 @@ public void populateProperties(WayPropertySet props) { * my (marcusyoung) personal experience in obtaining realistic routes. * */ + // Max speed limit is 70 mph ~113kmh ~31.3m/s + props.maxPossibleCarSpeed = 31.4f; props.setCarSpeed("highway=motorway", 30.4f); // ~=68mph props.setCarSpeed("highway=motorway_link", 22.4f); // ~= 50mph props.setCarSpeed("highway=trunk", 22.4f); // ~=50mph diff --git a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/WayPropertySet.java b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/WayPropertySet.java index 376614b1093..9a414a56080 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/WayPropertySet.java +++ b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/WayPropertySet.java @@ -14,6 +14,7 @@ import java.util.regex.Pattern; import org.opentripplanner.framework.functional.FunctionUtils.TriFunction; import org.opentripplanner.framework.i18n.I18NString; +import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; import org.opentripplanner.openstreetmap.model.OSMWithTags; import org.opentripplanner.openstreetmap.wayproperty.specifier.BestMatchSpecifier; import org.opentripplanner.openstreetmap.wayproperty.specifier.OsmSpecifier; @@ -51,13 +52,24 @@ public class WayPropertySet { private final List notes; private final Pattern maxSpeedPattern; /** The automobile speed for street segments that do not match any SpeedPicker. */ - public Float defaultSpeed; + public Float defaultCarSpeed; + /** + * The maximum automobile speed that can be defined through OSM speed limit tagging. Car speed + * defaults for different way types can be higher than this. + */ + public Float maxPossibleCarSpeed; + /** + * The maximum automobile speed that has been used. This can be used in heuristics later on to + * determine the minimum travel time. + */ + public float maxUsedCarSpeed = 0f; /** Resolves walk safety value for each {@link StreetTraversalPermission}. */ private TriFunction defaultWalkSafetyForPermission; /** Resolves bicycle safety value for each {@link StreetTraversalPermission}. */ private TriFunction defaultBicycleSafetyForPermission; /** The WayProperties applied to all ways that do not match any WayPropertyPicker. */ private final WayProperties defaultProperties; + private final DataImportIssueStore issueStore; public List getMixins() { return mixins; @@ -66,8 +78,15 @@ public List getMixins() { private final List mixins = new ArrayList<>(); public WayPropertySet() { + this(DataImportIssueStore.NOOP); + } + + public WayPropertySet(DataImportIssueStore issueStore) { /* sensible defaults */ - defaultSpeed = 11.2f; // 11.2 m/s ~= 25 mph ~= 40 kph, standard speed limit in the US + // 11.2 m/s ~= 25 mph ~= 40 kph, standard speed limit in the US + defaultCarSpeed = 11.2f; + // 38 m/s ~= 85 mph ~= 137 kph, max speed limit in the US + maxPossibleCarSpeed = 38f; defaultProperties = withModes(ALL).build(); wayProperties = new ArrayList<>(); creativeNamers = new ArrayList<>(); @@ -79,6 +98,7 @@ public WayPropertySet() { maxSpeedPattern = Pattern.compile("^([0-9][.0-9]*)\\s*(kmh|km/h|kmph|kph|mph|knots)?$"); defaultWalkSafetyForPermission = DEFAULT_SAFETY_RESOLVER; defaultBicycleSafetyForPermission = DEFAULT_SAFETY_RESOLVER; + this.issueStore = issueStore; } /** @@ -193,37 +213,53 @@ public float getCarSpeedForWay(OSMWithTags way, boolean backward) { Float speed = null; Float currentSpeed; - if (way.hasTag("maxspeed:motorcar")) speed = - getMetersSecondFromSpeed(way.getTag("maxspeed:motorcar")); + if (way.hasTag("maxspeed:motorcar")) { + speed = getMetersSecondFromSpeed(way.getTag("maxspeed:motorcar")); + } - if (speed == null && !backward && way.hasTag("maxspeed:forward")) speed = - getMetersSecondFromSpeed(way.getTag("maxspeed:forward")); + if (speed == null && !backward && way.hasTag("maxspeed:forward")) { + speed = getMetersSecondFromSpeed(way.getTag("maxspeed:forward")); + } - if (speed == null && backward && way.hasTag("maxspeed:backward")) speed = - getMetersSecondFromSpeed(way.getTag("maxspeed:backward")); + if (speed == null && backward && way.hasTag("maxspeed:backward")) { + speed = getMetersSecondFromSpeed(way.getTag("maxspeed:backward")); + } if (speed == null && way.hasTag("maxspeed:lanes")) { for (String lane : way.getTag("maxspeed:lanes").split("\\|")) { currentSpeed = getMetersSecondFromSpeed(lane); // Pick the largest speed from the tag // currentSpeed might be null if it was invalid, for instance 10|fast|20 - if (currentSpeed != null && (speed == null || currentSpeed > speed)) speed = currentSpeed; + if (currentSpeed != null && (speed == null || currentSpeed > speed)) { + speed = currentSpeed; + } } } if (way.hasTag("maxspeed") && speed == null) speed = getMetersSecondFromSpeed(way.getTag("maxspeed")); - // this would be bad, as the segment could never be traversed by an automobile - // The small epsilon is to account for possible rounding errors - if (speed != null && speed < 0.0001) LOG.warn( - "Zero or negative automobile speed detected at {} based on OSM " + - "maxspeed tags; ignoring these tags", - this - ); - - // if there was a defined speed and it's not 0, we're done - if (speed != null && speed > 0.0001) return speed; + if (speed != null) { + // Too low (less than 5 km/h) or too high speed limit indicates an error in the data, + // we use default speed limits for the way type in that case. + // The small epsilon is to account for possible rounding errors. + if (speed < 1.387 || speed > maxPossibleCarSpeed + 0.0001) { + var id = way.getId(); + var link = way.url(); + issueStore.add( + "InvalidCarSpeedLimit", + "OSM object with id '%s' (%s) has an invalid maxspeed value (%f), that speed will be ignored", + id, + link, + speed + ); + } else { + if (speed > maxUsedCarSpeed) { + maxUsedCarSpeed = speed; + } + return speed; + } + } // otherwise, we use the speedPickers @@ -243,9 +279,12 @@ public float getCarSpeedForWay(OSMWithTags way, boolean backward) { } if (bestSpeed != null) { + if (bestSpeed > maxUsedCarSpeed) { + maxUsedCarSpeed = bestSpeed; + } return bestSpeed; } else { - return this.defaultSpeed; + return this.defaultCarSpeed; } } diff --git a/src/main/java/org/opentripplanner/raptor/api/model/AbstractAccessEgressDecorator.java b/src/main/java/org/opentripplanner/raptor/api/model/AbstractAccessEgressDecorator.java new file mode 100644 index 00000000000..ddb266e0884 --- /dev/null +++ b/src/main/java/org/opentripplanner/raptor/api/model/AbstractAccessEgressDecorator.java @@ -0,0 +1,125 @@ +package org.opentripplanner.raptor.api.model; + +import java.util.Objects; +import javax.annotation.Nullable; + +/** + * Using delegation to extend the {@link RaptorAccessEgress} functionality is common, so we provide + * a base delegation implementation here. This implementation delegates all operations to the + * delegate. + */ +public class AbstractAccessEgressDecorator implements RaptorAccessEgress { + + private final RaptorAccessEgress delegate; + + public AbstractAccessEgressDecorator(RaptorAccessEgress delegate) { + this.delegate = delegate; + } + + protected RaptorAccessEgress delegate() { + return delegate; + } + + @Override + public int stop() { + return delegate.stop(); + } + + @Override + public int c1() { + return delegate.c1(); + } + + @Override + public int durationInSeconds() { + return delegate.durationInSeconds(); + } + + @Override + public int timePenalty() { + return delegate.timePenalty(); + } + + @Override + public boolean hasTimePenalty() { + return delegate.hasTimePenalty(); + } + + @Override + public int earliestDepartureTime(int requestedDepartureTime) { + return delegate.earliestDepartureTime(requestedDepartureTime); + } + + @Override + public int latestArrivalTime(int requestedArrivalTime) { + return delegate.latestArrivalTime(requestedArrivalTime); + } + + @Override + public boolean hasOpeningHours() { + return delegate.hasOpeningHours(); + } + + @Nullable + @Override + public String openingHoursToString() { + return delegate.openingHoursToString(); + } + + @Override + public int numberOfRides() { + return delegate.numberOfRides(); + } + + @Override + public boolean hasRides() { + return delegate.hasRides(); + } + + @Override + public boolean stopReachedOnBoard() { + return delegate.stopReachedOnBoard(); + } + + @Override + public boolean stopReachedByWalking() { + return delegate.stopReachedByWalking(); + } + + @Override + public boolean isFree() { + return delegate.isFree(); + } + + @Override + public String defaultToString() { + return delegate.defaultToString(); + } + + @Override + public String asString(boolean includeStop, boolean includeCost, @Nullable String summary) { + return delegate.asString(includeStop, includeCost, summary); + } + + @Override + public String toString() { + return delegate.toString(); + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + AbstractAccessEgressDecorator that = (AbstractAccessEgressDecorator) o; + return Objects.equals(delegate, that.delegate); + } + + @Override + public int hashCode() { + return Objects.hash(delegate); + } +} diff --git a/src/main/java/org/opentripplanner/raptor/api/model/RaptorAccessEgress.java b/src/main/java/org/opentripplanner/raptor/api/model/RaptorAccessEgress.java index 16dff3b2e99..3a7f48cf743 100644 --- a/src/main/java/org/opentripplanner/raptor/api/model/RaptorAccessEgress.java +++ b/src/main/java/org/opentripplanner/raptor/api/model/RaptorAccessEgress.java @@ -1,8 +1,8 @@ package org.opentripplanner.raptor.api.model; -import static org.opentripplanner.raptor.api.model.RaptorConstants.SECONDS_IN_A_DAY; import static org.opentripplanner.raptor.api.model.RaptorConstants.TIME_NOT_SET; +import java.time.temporal.ChronoUnit; import javax.annotation.Nullable; import org.opentripplanner.framework.time.DurationUtils; import org.opentripplanner.framework.time.TimeUtils; @@ -45,6 +45,39 @@ public interface RaptorAccessEgress { */ int durationInSeconds(); + /** + * Raptor can add an optional time-penalty to a access/egress to make it less favourable compared + * with other access/egress/transit options (paths). The penalty is a virtual extra duration of + * time added inside Raptor when comparing time. The penalty does not propagate the c1 or c2 cost + * values. This feature is useful when you want to limit the access/egress and the access/egress + * is FASTER than the preferred option. + *

+ * For example, for Park&Ride, driving all the way to the + * destination is very often the best option when looking at the time criteria. When an + * increasing time-penalty is applied to a car access/egress, then driving become less + * favorable. This also improves performance, since we usually add a very high cost to + * driving - making all park&ride access legs optimal - forcing Raptor to compute a path for + * every option. The short drives are optimal on cost, and the long are optimal on time. In the + * case of park&ride the time-penalty enables Raptor to choose one of the shortest access/egress + * paths over the longer ones. + *

+ * Another example is FLEX, where we in many use-cases want regular transit to win if there is + * an offer. Only in the case where the FLEX is the only solution we want it to be presented. + * To achieve this, we must add an extra duration to the time of the FLEX access/egress - it does + * not help to just add extra cost - which makes both FLEX optimal on time and transit optimal on + * cost. Keeping a large number of optimal access paths has a negative impact on performance as well. + *

+ * + * The unit is seconds and the default value is {@link RaptorConstants#TIME_NOT_SET}. + */ + default int timePenalty() { + return RaptorConstants.TIME_NOT_SET; + } + + default boolean hasTimePenalty() { + return timePenalty() != RaptorConstants.TIME_NOT_SET; + } + /* TIME-DEPENDENT ACCESS/TRANSFER/EGRESS */ // The methods below should be only overridden when an RaptorAccessEgress is only available at // specific times, such as flexible transit, TNC or shared vehicle schemes with limited opening @@ -70,16 +103,16 @@ public interface RaptorAccessEgress { int latestArrivalTime(int requestedArrivalTime); /** - * This method should return {@code true} if, and only if the instance have restricted + * This method should return {@code true} if, and only if the instance has restricted * opening-hours. */ boolean hasOpeningHours(); /** * Return the opening hours in a short human-readable way for the departure at the origin. Do - * not parse this, this should only be used for things like testing, debugging and logging. + * not parse this. This should only be used for things like testing, debugging and logging. *

- * This method return {@code null} if there is no opening hours, see {@link #hasOpeningHours()}. + * This method return {@code null} if there are no opening hours, see {@link #hasOpeningHours()}. */ @Nullable default String openingHoursToString() { @@ -90,7 +123,7 @@ default String openingHoursToString() { // assumes the access/egress is a continuous period without gaps withing 24 hours from the // opening. We ignore the access/egress duration. This is ok for test, debugging and logging. int edt = earliestDepartureTime(0); - int lat = latestArrivalTime(edt + SECONDS_IN_A_DAY); + int lat = latestArrivalTime(edt + (int) ChronoUnit.DAYS.getDuration().toSeconds()); if (edt == TIME_NOT_SET || lat == TIME_NOT_SET) { return "closed"; diff --git a/src/main/java/org/opentripplanner/raptor/api/model/RaptorConstants.java b/src/main/java/org/opentripplanner/raptor/api/model/RaptorConstants.java index f08b39641ed..63ec7420db0 100644 --- a/src/main/java/org/opentripplanner/raptor/api/model/RaptorConstants.java +++ b/src/main/java/org/opentripplanner/raptor/api/model/RaptorConstants.java @@ -1,7 +1,5 @@ package org.opentripplanner.raptor.api.model; -import static java.time.temporal.ChronoUnit.DAYS; - /** * Raptor relies on {@code int} operation to be fast, so in many cases we use a "magic number" to * represent state. In general "magic numbers" should be avoided, at least encapsulated - but in @@ -21,6 +19,16 @@ */ public class RaptorConstants { + /** + * Zero (0) constant used inside Raptor. + */ + public static final int ZERO = 0; + + /** + * One minute is 60 seconds - iteration departure times are usually increased by one minute. + */ + public static final int ONE_MINUTE = 60; + /** * This constant is used to indicate that a value is not set. This applies to parameters of type * {@code generalized-cost}, {@code link min-travel-time} and {@code duration} inside Raptor. @@ -65,11 +73,4 @@ public class RaptorConstants { /** Alias for {@link #UNREACHED_HIGH} */ public static final int N_TRANSFERS_UNREACHED = UNREACHED_HIGH; - - /** - * There is 86400 seconds in a "normal" day(24 * 60 * 60). This is used for testing, logging - * and debugging, but do not base any important logic on this. A day with changes in - * daylight-saving-time does not have this amount of seconds. - */ - public static final int SECONDS_IN_A_DAY = (int) DAYS.getDuration().toSeconds(); } diff --git a/src/main/java/org/opentripplanner/raptor/api/path/RaptorPath.java b/src/main/java/org/opentripplanner/raptor/api/path/RaptorPath.java index ca67599e262..b92d30643ec 100644 --- a/src/main/java/org/opentripplanner/raptor/api/path/RaptorPath.java +++ b/src/main/java/org/opentripplanner/raptor/api/path/RaptorPath.java @@ -25,15 +25,37 @@ public interface RaptorPath extends Comparable - * {@code null} if the legs in the path is unknown. + * {@code null} if the legs in the path are unknown. */ @Nullable EgressPathLeg egressLeg(); @@ -89,7 +111,7 @@ default boolean isC2Set() { List listStops(); /** - * Aggregated wait-time in seconds. This method compute the total wait time for this path. + * Aggregated wait-time in seconds. This method computes the total wait time for this path. */ int waitTime(); @@ -125,11 +147,11 @@ default boolean isC2Set() { */ @Override default int compareTo(RaptorPath other) { - int c = endTime() - other.endTime(); + int c = endTimeInclusivePenalty() - other.endTimeInclusivePenalty(); if (c != 0) { return c; } - c = other.startTime() - startTime(); + c = other.startTimeInclusivePenalty() - startTimeInclusivePenalty(); if (c != 0) { return c; } @@ -151,14 +173,14 @@ static boolean compareArrivalTime( RaptorPath l, RaptorPath r ) { - return l.endTime() < r.endTime(); + return l.endTimeInclusivePenalty() < r.endTimeInclusivePenalty(); } static boolean compareDepartureTime( RaptorPath l, RaptorPath r ) { - return l.startTime() > r.startTime(); + return l.startTimeInclusivePenalty() > r.startTimeInclusivePenalty(); } static boolean compareIterationDepartureTime( @@ -168,8 +190,11 @@ static boolean compareIterationDepartureTime( return l.rangeRaptorIterationDepartureTime() > r.rangeRaptorIterationDepartureTime(); } - static boolean compareDuration(RaptorPath l, RaptorPath r) { - return l.durationInSeconds() < r.durationInSeconds(); + static boolean compareDurationInclusivePenalty( + RaptorPath l, + RaptorPath r + ) { + return l.durationInclusivePenaltyInSeconds() < r.durationInclusivePenaltyInSeconds(); } static boolean compareNumberOfTransfers( diff --git a/src/main/java/org/opentripplanner/raptor/api/request/SearchParams.java b/src/main/java/org/opentripplanner/raptor/api/request/SearchParams.java index 03911e3eb4c..7dabe8e2a1c 100644 --- a/src/main/java/org/opentripplanner/raptor/api/request/SearchParams.java +++ b/src/main/java/org/opentripplanner/raptor/api/request/SearchParams.java @@ -19,7 +19,6 @@ public class SearchParams { private final int earliestDepartureTime; private final int latestArrivalTime; private final int searchWindowInSeconds; - private final int searchWindowAccessSlackInSeconds; private final boolean preferLateArrival; private final int numberOfAdditionalTransfers; private final int maxNumberOfTransfers; @@ -30,13 +29,12 @@ public class SearchParams { private final boolean allowEmptyAccessEgressPaths; /** - * Default values is defined in the default constructor. + * Default values are defined in the default constructor. */ private SearchParams() { earliestDepartureTime = RaptorConstants.TIME_NOT_SET; latestArrivalTime = RaptorConstants.TIME_NOT_SET; searchWindowInSeconds = RaptorConstants.NOT_SET; - searchWindowAccessSlackInSeconds = 0; preferLateArrival = false; numberOfAdditionalTransfers = 5; maxNumberOfTransfers = RaptorConstants.NOT_SET; @@ -51,7 +49,6 @@ private SearchParams() { this.earliestDepartureTime = builder.earliestDepartureTime(); this.latestArrivalTime = builder.latestArrivalTime(); this.searchWindowInSeconds = builder.searchWindowInSeconds(); - this.searchWindowAccessSlackInSeconds = builder.searchWindowAccessSlackInSeconds(); this.preferLateArrival = builder.preferLateArrival(); this.numberOfAdditionalTransfers = builder.numberOfAdditionalTransfers(); this.maxNumberOfTransfers = builder.maxNumberOfTransfers(); @@ -73,13 +70,6 @@ public int earliestDepartureTime() { return earliestDepartureTime; } - /** - * The {@link #earliestDepartureTime()} including search-window-access-slack. - */ - public int routerEarliestDepartureTime() { - return earliestDepartureTime - searchWindowAccessSlackInSeconds; - } - public boolean isEarliestDepartureTimeSet() { return earliestDepartureTime != RaptorConstants.TIME_NOT_SET; } @@ -102,10 +92,10 @@ public boolean isLatestArrivalTimeSet() { /** * The time window used to search. The unit is seconds. *

- * For a *depart by search*, this is added to the 'earliestDepartureTime' to find the + * For a *depart-by-search*, this is added to the 'earliestDepartureTime' to find the * 'latestDepartureTime'. *

- * For a *arrive by search* this is used to calculate the 'earliestArrivalTime'. The algorithm + * For an *arrive-by-search* this is used to calculate the 'earliestArrivalTime'. The algorithm * will find all optimal travels within the given time window. *

* Set the search window to 0 (zero) to run 1 iteration. @@ -116,26 +106,6 @@ public int searchWindowInSeconds() { return searchWindowInSeconds; } - /** - * The {@link #searchWindowInSeconds()} plus search-window-access-slack. - */ - public int routerSearchWindowInSeconds() { - return searchWindowInSeconds == 0 - ? 0 - : searchWindowInSeconds() + searchWindowAccessSlackInSeconds; - } - - /** - * A slack to force Raptor to start the iterations before the earliest-departure-time. - * This will enable paths starting before the earliest-departure-time to be included in the - * result. This is useful if these paths are used to prune other paths(filtering) or if a - * path only can be time-shifted AFTER the search - this enables us to add a time-penalty - * to access. - */ - public int searchWindowAccessSlackInSeconds() { - return searchWindowAccessSlackInSeconds; - } - public boolean isSearchWindowSet() { return searchWindowInSeconds != RaptorConstants.NOT_SET; } diff --git a/src/main/java/org/opentripplanner/raptor/api/request/SearchParamsBuilder.java b/src/main/java/org/opentripplanner/raptor/api/request/SearchParamsBuilder.java index 587b7b09bd5..517780eb69c 100644 --- a/src/main/java/org/opentripplanner/raptor/api/request/SearchParamsBuilder.java +++ b/src/main/java/org/opentripplanner/raptor/api/request/SearchParamsBuilder.java @@ -24,7 +24,6 @@ public class SearchParamsBuilder { private int earliestDepartureTime; private int latestArrivalTime; private int searchWindowInSeconds; - private int searchWindowAccessSlackInSeconds; private boolean preferLateArrival; private int numberOfAdditionalTransfers; private int maxNumberOfTransfers; @@ -37,7 +36,6 @@ public SearchParamsBuilder(RaptorRequestBuilder parent, SearchParams defaults this.earliestDepartureTime = defaults.earliestDepartureTime(); this.latestArrivalTime = defaults.latestArrivalTime(); this.searchWindowInSeconds = defaults.searchWindowInSeconds(); - this.searchWindowAccessSlackInSeconds = defaults.searchWindowAccessSlackInSeconds(); this.preferLateArrival = defaults.preferLateArrival(); this.numberOfAdditionalTransfers = defaults.numberOfAdditionalTransfers(); this.maxNumberOfTransfers = defaults.maxNumberOfTransfers(); @@ -169,14 +167,6 @@ public SearchParamsBuilder allowEmptyAccessEgressPaths(boolean allowEmptyEgre return this; } - public int searchWindowAccessSlackInSeconds() { - return searchWindowAccessSlackInSeconds; - } - - public void searchWindowAccessSlack(Duration searchWindowAccessSlack) { - this.searchWindowAccessSlackInSeconds = (int) searchWindowAccessSlack.toSeconds(); - } - public boolean allowEmptyAccessEgressPaths() { return allowEmptyAccessEgressPaths; } @@ -197,7 +187,6 @@ public String toString() { .addServiceTime("earliestDepartureTime", earliestDepartureTime, RaptorConstants.TIME_NOT_SET) .addServiceTime("latestArrivalTime", latestArrivalTime, RaptorConstants.TIME_NOT_SET) .addDurationSec("searchWindow", searchWindowInSeconds) - .addDurationSec("searchWindowAccessSlack", searchWindowAccessSlackInSeconds, 0) .addBoolIfTrue("departAsLateAsPossible", preferLateArrival) .addNum("numberOfAdditionalTransfers", numberOfAdditionalTransfers) .addCollection("accessPaths", accessPaths, 5) diff --git a/src/main/java/org/opentripplanner/raptor/path/Path.java b/src/main/java/org/opentripplanner/raptor/path/Path.java index a4d7770dd64..ebade8b2690 100644 --- a/src/main/java/org/opentripplanner/raptor/path/Path.java +++ b/src/main/java/org/opentripplanner/raptor/path/Path.java @@ -19,7 +19,15 @@ import org.opentripplanner.raptor.api.path.TransitPathLeg; /** - * The result path of a Raptor search describing the one possible journey. + * The result of a Raptor search is a path describing the one possible journey. The path is the + * main DTO part of the Raptor result, but it is also used internally in Raptor. Hence, it is a bit + * more complex, and it has more responsiblilities than it should. + *

+ * To improve the design, Raptor should not use the path internally. Instead, there should + * be a special destination arrival that could take over the Raptor responsibilities. The + * path would still need to be constructed at the time of arrival and then become a part of the + * destination arrival. The reason for this is that the data necessary to create a path is not + * kept in the Raptor state between rounds. * * @param The TripSchedule type defined by the user of the raptor API. */ @@ -27,7 +35,9 @@ public class Path implements RaptorPath { private final int iterationDepartureTime; private final int startTime; + private final int startTimeInclusivePenalty; private final int endTime; + private final int endTimeInclusivePenalty; private final int numberOfTransfers; private final int c1; private final int c2; @@ -44,7 +54,9 @@ private Path( ) { this.iterationDepartureTime = iterationDepartureTime; this.startTime = startTime; + this.startTimeInclusivePenalty = startTime; this.endTime = endTime; + this.endTimeInclusivePenalty = endTime; this.numberOfTransfers = numberOfTransfers; this.c1 = c1; this.accessLeg = null; @@ -55,11 +67,17 @@ private Path( public Path(int iterationDepartureTime, AccessPathLeg accessLeg, int c1, int c2) { this.iterationDepartureTime = iterationDepartureTime; this.startTime = accessLeg.fromTime(); + var access = accessLeg.access(); + this.startTimeInclusivePenalty = + access.hasTimePenalty() ? startTime - access.timePenalty() : startTime; this.c1 = c1; this.accessLeg = accessLeg; this.egressLeg = findEgressLeg(accessLeg); this.numberOfTransfers = countNumberOfTransfers(accessLeg, egressLeg); this.endTime = egressLeg.toTime(); + var egress = egressLeg.egress(); + this.endTimeInclusivePenalty = + egress.hasTimePenalty() ? endTime + egress.timePenalty() : endTime; this.c2 = c2; } @@ -101,14 +119,19 @@ public final int startTime() { return startTime; } + @Override + public int startTimeInclusivePenalty() { + return startTimeInclusivePenalty; + } + @Override public final int endTime() { return endTime; } @Override - public final int durationInSeconds() { - return endTime - startTime; + public int endTimeInclusivePenalty() { + return endTimeInclusivePenalty; } @Override diff --git a/src/main/java/org/opentripplanner/raptor/path/PathBuilderLeg.java b/src/main/java/org/opentripplanner/raptor/path/PathBuilderLeg.java index 76d49ef4a0a..335d38203b1 100644 --- a/src/main/java/org/opentripplanner/raptor/path/PathBuilderLeg.java +++ b/src/main/java/org/opentripplanner/raptor/path/PathBuilderLeg.java @@ -15,6 +15,8 @@ import org.opentripplanner.raptor.api.path.PathStringBuilder; import org.opentripplanner.raptor.api.path.TransferPathLeg; import org.opentripplanner.raptor.api.path.TransitPathLeg; +import org.opentripplanner.raptor.rangeraptor.transit.AccessWithPenalty; +import org.opentripplanner.raptor.rangeraptor.transit.EgressWithPenalty; import org.opentripplanner.raptor.rangeraptor.transit.ForwardTransitCalculator; import org.opentripplanner.raptor.rangeraptor.transit.TransitCalculator; import org.opentripplanner.raptor.spi.BoardAndAlightTime; @@ -447,7 +449,8 @@ private EgressPathLeg createEgressPathLeg( RaptorSlackProvider slackProvider ) { int cost = egressCost(costCalculator, slackProvider); - return new EgressPathLeg<>(asEgressLeg().streetPath, fromTime, toTime, cost); + var egressPath = asEgressLeg().streetPath; + return new EgressPathLeg<>(egressPath, fromTime, toTime, cost); } /** @@ -694,13 +697,23 @@ private abstract static class MyStreetLeg extends AbstractMyLeg { final RaptorAccessEgress streetPath; MyStreetLeg(RaptorAccessEgress streetPath) { - this.streetPath = streetPath; + this.streetPath = removeTimePenaltyDecorator(streetPath); } @Override public boolean hasRides() { return streetPath.hasRides(); } + + private static RaptorAccessEgress removeTimePenaltyDecorator(RaptorAccessEgress path) { + if (path instanceof AccessWithPenalty awp) { + return awp.removeDecorator(); + } + if (path instanceof EgressWithPenalty awp) { + return awp.removeDecorator(); + } + return path; + } } private static class MyAccessLeg extends MyStreetLeg { diff --git a/src/main/java/org/opentripplanner/raptor/rangeraptor/DefaultRangeRaptorWorker.java b/src/main/java/org/opentripplanner/raptor/rangeraptor/DefaultRangeRaptorWorker.java index f0cd4e9628e..0f2ceb9d6e4 100644 --- a/src/main/java/org/opentripplanner/raptor/rangeraptor/DefaultRangeRaptorWorker.java +++ b/src/main/java/org/opentripplanner/raptor/rangeraptor/DefaultRangeRaptorWorker.java @@ -55,11 +55,11 @@ public final class DefaultRangeRaptorWorker private final RoutingStrategy transitWorker; /** - * The RangeRaptor state - we delegate keeping track of state to the state object, this allows the - * worker implementation to focus on the algorithm, while the state keep track of the result. + * The RangeRaptor state - we delegate keeping track of state to the state object, this allows + * the worker implementation to focus on the algorithm, while the state keep track of the result. *

- * This also allow us to try out different strategies for storing the result in memory. For a long - * time we had a state which stored all data as int arrays in addition to the current + * This also allows us to try out different strategies for storing the result in memory. For a + * long time, we had a state which stored all data as int arrays in addition to the current * object-oriented approach. There were no performance differences(=> GC is not the bottleneck), * so we dropped the integer array implementation. */ @@ -135,12 +135,19 @@ public RaptorWorkerResult route() { // the arrival time given departure at minute t + 1. final IntIterator it = calculator.rangeRaptorMinutes(); while (it.hasNext()) { - OTPRequestTimeoutException.checkForTimeout(); - // Run the raptor search for this particular iteration departure time - iterationDepartureTime = it.next(); - lifeCycle.setupIteration(iterationDepartureTime); + setupIteration(it.next()); runRaptorForMinute(); } + + // Iterate over virtual departure times - this is needed to allow access with a time-penalty + // which falls outside the search-window due to the added time-penalty. + if (!calculator.oneIterationOnly()) { + final IntIterator as = accessPaths.iterateOverPathsWithPenalty(iterationDepartureTime); + while (as.hasNext()) { + setupIteration(as.next()); + runRaptorForMinute(); + } + } }); return state.results(); } @@ -260,12 +267,25 @@ private void findTransfersForRound() { }); } + private int round() { + return roundTracker.round(); + } + private void findAccessOnStreetForRound() { - addAccessPaths(accessPaths.arrivedOnStreetByNumOfRides().get(round())); + addAccessPaths(accessPaths.arrivedOnStreetByNumOfRides(round())); } private void findAccessOnBoardForRound() { - addAccessPaths(accessPaths.arrivedOnBoardByNumOfRides().get(round())); + addAccessPaths(accessPaths.arrivedOnBoardByNumOfRides(round())); + } + + /** + * Run the raptor search for this particular iteration departure time + */ + private void setupIteration(int iterationDepartureTime) { + OTPRequestTimeoutException.checkForTimeout(); + this.iterationDepartureTime = iterationDepartureTime; + lifeCycle.setupIteration(this.iterationDepartureTime); } /** @@ -273,10 +293,6 @@ private void findAccessOnBoardForRound() { * scheduled search at the next-earlier minute. */ private void addAccessPaths(Collection accessPaths) { - if (accessPaths == null) { - return; - } - for (RaptorAccessEgress it : accessPaths) { int departureTime = calculator.departureTime(it, iterationDepartureTime); @@ -286,8 +302,4 @@ private void addAccessPaths(Collection accessPaths) { } } } - - private int round() { - return roundTracker.round(); - } } diff --git a/src/main/java/org/opentripplanner/raptor/rangeraptor/context/SearchContext.java b/src/main/java/org/opentripplanner/raptor/rangeraptor/context/SearchContext.java index 1706c879a2c..518d02ae3ad 100644 --- a/src/main/java/org/opentripplanner/raptor/rangeraptor/context/SearchContext.java +++ b/src/main/java/org/opentripplanner/raptor/rangeraptor/context/SearchContext.java @@ -68,6 +68,9 @@ public class SearchContext { private final AccessPaths accessPaths; private final LifeCycleSubscriptions lifeCycleSubscriptions = new LifeCycleSubscriptions(); + @Nullable + private final IntPredicate acceptC2AtDestination; + /** Lazy initialized */ private RaptorCostCalculator costCalculator = null; @@ -79,14 +82,14 @@ public SearchContext( RaptorRequest request, RaptorTuningParameters tuningParameters, RaptorTransitDataProvider transit, - IntPredicate acceptC2AtDestination + @Nullable IntPredicate acceptC2AtDestination ) { this.request = request; this.tuningParameters = tuningParameters; this.transit = transit; - this.accessPaths = accessPaths(request); + this.accessPaths = accessPaths(tuningParameters.iterationDepartureStepInSeconds(), request); this.egressPaths = egressPaths(request); - this.calculator = createCalculator(request, tuningParameters, acceptC2AtDestination); + this.calculator = createCalculator(request, tuningParameters); this.roundTracker = new RoundTracker( nRounds(), @@ -94,6 +97,7 @@ public SearchContext( lifeCycle() ); this.debugFactory = new DebugHandlerFactory<>(debugRequest(request), lifeCycle()); + this.acceptC2AtDestination = acceptC2AtDestination; } public AccessPaths accessPaths() { @@ -171,6 +175,11 @@ public RaptorTimers performanceTimers() { return request.performanceTimers(); } + @Nullable + public IntPredicate acceptC2AtDestination() { + return acceptC2AtDestination; + } + /** Number of stops in transit graph. */ public int nStops() { return transit.numberOfStops(); @@ -268,14 +277,13 @@ static Collection accessOrEgressPaths( */ private static RaptorTransitCalculator createCalculator( RaptorRequest r, - RaptorTuningParameters t, - IntPredicate acceptC2AtDestination + RaptorTuningParameters t ) { var forward = r.searchDirection().isForward(); SearchParams s = r.searchParams(); if (forward) { - return new ForwardRaptorTransitCalculator<>(s, t, acceptC2AtDestination); + return new ForwardRaptorTransitCalculator<>(s, t); } else { return new ReverseRaptorTransitCalculator<>(s, t); } @@ -306,11 +314,11 @@ private static ToIntFunction createBoardSlackProvider( : p -> slackProvider.alightSlack(p.slackIndex()); } - private static AccessPaths accessPaths(RaptorRequest request) { + private static AccessPaths accessPaths(int iterationStep, RaptorRequest request) { boolean forward = request.searchDirection().isForward(); var params = request.searchParams(); var paths = forward ? params.accessPaths() : params.egressPaths(); - return AccessPaths.create(paths, request.profile()); + return AccessPaths.create(iterationStep, paths, request.profile(), request.searchDirection()); } private static EgressPaths egressPaths(RaptorRequest request) { diff --git a/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/McStopArrivals.java b/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/McStopArrivals.java index 98bb22a46c5..4090890cc82 100644 --- a/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/McStopArrivals.java +++ b/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/McStopArrivals.java @@ -2,13 +2,10 @@ import static org.opentripplanner.raptor.api.model.PathLegType.TRANSIT; -import gnu.trove.map.TIntObjectMap; import java.util.BitSet; import java.util.Collections; -import java.util.List; import java.util.function.Function; import java.util.stream.Stream; -import org.opentripplanner.raptor.api.model.RaptorAccessEgress; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; import org.opentripplanner.raptor.rangeraptor.debug.DebugHandlerFactory; import org.opentripplanner.raptor.rangeraptor.multicriteria.arrivals.ArrivalParetoSetComparatorFactory; @@ -54,7 +51,7 @@ public McStopArrivals( this.debugHandlerFactory = debugHandlerFactory; this.debugStats = new DebugStopArrivalsStatistics(debugHandlerFactory.debugLogger()); - initAccessArrivals(accessPaths.arrivedOnBoardByNumOfRides()); + initAccessArrivals(accessPaths); glueTogetherEgressStopWithDestinationArrivals(egressPaths, paths); } @@ -142,9 +139,10 @@ private StopArrivalParetoSet findOrCreateSet(final int stop) { return arrivals[stop]; } - private void initAccessArrivals(TIntObjectMap> accessOnBoardByRides) { - for (int round : accessOnBoardByRides.keys()) { - for (var access : accessOnBoardByRides.get(round)) { + private void initAccessArrivals(AccessPaths accessPaths) { + int maxNRides = accessPaths.calculateMaxNumberOfRides(); + for (int nRides = 0; nRides <= maxNRides; ++nRides) { + for (var access : accessPaths.arrivedOnBoardByNumOfRides(nRides)) { int stop = access.stop(); arrivals[stop] = StopArrivalParetoSet.createStopArrivalSet( @@ -157,7 +155,7 @@ private void initAccessArrivals(TIntObjectMap> accessOn /** * This method creates a ParetoSet for the given egress stop. When arrivals are added to the stop, - * the "glue" make sure new destination arrivals is added to the destination arrivals. + * the "glue" make sure new destination arrivals are added to the destination arrivals. */ private void glueTogetherEgressStopWithDestinationArrivals( EgressPaths egressPaths, diff --git a/src/main/java/org/opentripplanner/raptor/rangeraptor/path/DestinationArrivalPaths.java b/src/main/java/org/opentripplanner/raptor/rangeraptor/path/DestinationArrivalPaths.java index 6ed88da4c89..f5e67d593ca 100644 --- a/src/main/java/org/opentripplanner/raptor/rangeraptor/path/DestinationArrivalPaths.java +++ b/src/main/java/org/opentripplanner/raptor/rangeraptor/path/DestinationArrivalPaths.java @@ -2,6 +2,8 @@ import java.util.ArrayList; import java.util.Collection; +import java.util.Optional; +import java.util.function.IntPredicate; import javax.annotation.Nullable; import org.opentripplanner.framework.lang.OtpNumberFormat; import org.opentripplanner.framework.logging.Throttle; @@ -48,6 +50,9 @@ public class DestinationArrivalPaths { @Nullable private final RaptorCostCalculator costCalculator; + @Nullable + private final IntPredicate acceptC2AtDestination; + private final SlackProvider slackProvider; private final PathMapper pathMapper; private final DebugHandler> debugPathHandler; @@ -59,6 +64,7 @@ public DestinationArrivalPaths( ParetoComparator> paretoComparator, RaptorTransitCalculator transitCalculator, @Nullable RaptorCostCalculator costCalculator, + @Nullable IntPredicate acceptC2AtDestination, SlackProvider slackProvider, PathMapper pathMapper, DebugHandlerFactory debugHandlerFactory, @@ -71,6 +77,7 @@ public DestinationArrivalPaths( this.costCalculator = costCalculator; this.slackProvider = slackProvider; this.pathMapper = pathMapper; + this.acceptC2AtDestination = acceptC2AtDestination; this.debugPathHandler = debugHandlerFactory.debugPathArrival(); this.stopNameResolver = stopNameResolver; lifeCycle.onPrepareForNextRound(round -> clearReachedCurrentRoundFlag()); @@ -84,18 +91,26 @@ public void add(ArrivalView stopArrival, RaptorAccessEgress egressPath) { return; } - var errors = transitCalculator.rejectDestinationArrival(destArrival); - if (!errors.isEmpty()) { - debugReject(destArrival, String.join(" ", errors)); + var errors = new ArrayList(); + + rejectArrivalIfItExceedsTimeLimit(destArrival).ifPresent(errors::add); + rejectArrivalIfC2CheckFails(destArrival).ifPresent(errors::add); + + if (errors.isEmpty()) { + addDestinationArrivalToPaths(destArrival); } else { - RaptorPath path = pathMapper.mapToPath(destArrival); + debugReject(destArrival, String.join(" ", errors)); + } + } - assertGeneralizedCostIsCalculatedCorrectByMapper(destArrival, path); + private void addDestinationArrivalToPaths(DestinationArrival destArrival) { + RaptorPath path = pathMapper.mapToPath(destArrival); - boolean added = paths.add(path); - if (added) { - reachedCurrentRound = true; - } + assertGeneralizedCostIsCalculatedCorrectByMapper(destArrival, path); + + boolean added = paths.add(path); + if (added) { + reachedCurrentRound = true; } } @@ -240,4 +255,23 @@ private String raptorCostsAsString(DestinationArrival destArrival) { // Remove decimals if zero return String.join(" ", arrivalCosts).replaceAll("\\.00", ""); } + + private Optional rejectArrivalIfItExceedsTimeLimit(ArrivalView destArrival) { + var egress = destArrival.egressPath().egress(); + int arrivalTime = transitCalculator.timeMinusPenalty(destArrival.arrivalTime(), egress); + if (transitCalculator.exceedsTimeLimit(arrivalTime)) { + return Optional.of(transitCalculator.exceedsTimeLimitReason()); + } + return Optional.empty(); + } + + /** + * Test if the c2 value is acceptable, or should be rejected. If ok return nothing, if rejected + * returns the reason for the debug event log. + */ + private Optional rejectArrivalIfC2CheckFails(ArrivalView destArrival) { + return acceptC2AtDestination == null || acceptC2AtDestination.test(destArrival.c2()) + ? Optional.empty() + : Optional.of("C2 value rejected: " + destArrival.c2() + "."); + } } diff --git a/src/main/java/org/opentripplanner/raptor/rangeraptor/path/PathParetoSetComparators.java b/src/main/java/org/opentripplanner/raptor/rangeraptor/path/PathParetoSetComparators.java index 00ea6d11fe5..192f957ae8f 100644 --- a/src/main/java/org/opentripplanner/raptor/rangeraptor/path/PathParetoSetComparators.java +++ b/src/main/java/org/opentripplanner/raptor/rangeraptor/path/PathParetoSetComparators.java @@ -3,7 +3,7 @@ import static org.opentripplanner.raptor.api.path.RaptorPath.compareArrivalTime; import static org.opentripplanner.raptor.api.path.RaptorPath.compareC1; import static org.opentripplanner.raptor.api.path.RaptorPath.compareDepartureTime; -import static org.opentripplanner.raptor.api.path.RaptorPath.compareDuration; +import static org.opentripplanner.raptor.api.path.RaptorPath.compareDurationInclusivePenalty; import static org.opentripplanner.raptor.api.path.RaptorPath.compareIterationDepartureTime; import static org.opentripplanner.raptor.api.path.RaptorPath.compareNumberOfTransfers; @@ -12,7 +12,6 @@ import org.opentripplanner.raptor.api.model.DominanceFunction; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; import org.opentripplanner.raptor.api.model.RelaxFunction; -import org.opentripplanner.raptor.api.model.SearchDirection; import org.opentripplanner.raptor.api.path.RaptorPath; import org.opentripplanner.raptor.rangeraptor.internalapi.ParetoSetCost; import org.opentripplanner.raptor.rangeraptor.internalapi.ParetoSetTime; @@ -37,7 +36,7 @@ *

  • Relax c1, if c2 is optimal
  • * * The {@code travelDuration} is added as a criteria to the pareto comparator in addition to the - * parameters used for each stop arrivals. The {@code travelDuration} is only needed at the + * parameters used for each stop-arrival. The {@code travelDuration} is only needed at the * destination, because Range Raptor works in iterations backwards in time. */ public class PathParetoSetComparators { @@ -123,7 +122,7 @@ > ParetoComparator> comparatorTimetableAndC1() { compareIterationDepartureTime(l, r) || compareArrivalTime(l, r) || compareNumberOfTransfers(l, r) || - compareDuration(l, r) || + compareDurationInclusivePenalty(l, r) || compareC1(l, r); } @@ -136,7 +135,7 @@ > ParetoComparator> comparatorTimetableAndRelaxedC1( compareIterationDepartureTime(l, r) || compareArrivalTime(l, r) || compareNumberOfTransfers(l, r) || - compareDuration(l, r) || + compareDurationInclusivePenalty(l, r) || compareC1(relaxCost, l, r); } @@ -146,7 +145,7 @@ > ParetoComparator> comparatorArrivalTimeAndC1() { return (l, r) -> compareArrivalTime(l, r) || compareNumberOfTransfers(l, r) || - compareDuration(l, r) || + compareDurationInclusivePenalty(l, r) || compareC1(l, r); } @@ -156,7 +155,7 @@ > ParetoComparator> comparatorDepartureTimeAndC1() { return (l, r) -> compareDepartureTime(l, r) || compareNumberOfTransfers(l, r) || - compareDuration(l, r) || + compareDurationInclusivePenalty(l, r) || compareC1(l, r); } @@ -168,7 +167,7 @@ > ParetoComparator> comparatorArrivalTimeAndRelaxedC1( return (l, r) -> compareArrivalTime(l, r) || compareNumberOfTransfers(l, r) || - compareDuration(l, r) || + compareDurationInclusivePenalty(l, r) || compareC1(relaxCost, l, r); } @@ -180,7 +179,7 @@ > ParetoComparator> comparatorDepartureTimeAndRelaxedC1( return (l, r) -> compareDepartureTime(l, r) || compareNumberOfTransfers(l, r) || - compareDuration(l, r) || + compareDurationInclusivePenalty(l, r) || compareC1(relaxCost, l, r); } @@ -193,7 +192,7 @@ > ParetoComparator> comparatorTimetableAndC1AndC2( compareIterationDepartureTime(l, r) || compareArrivalTime(l, r) || compareNumberOfTransfers(l, r) || - compareDuration(l, r) || + compareDurationInclusivePenalty(l, r) || compareC1(l, r) || c2Comp.leftDominateRight(l.c2(), r.c2()); } @@ -208,7 +207,7 @@ > ParetoComparator> comparatorTimetableAndRelaxedC1IfC2IsOptimal( compareIterationDepartureTime(l, r) || compareArrivalTime(l, r) || compareNumberOfTransfers(l, r) || - compareDuration(l, r) || + compareDurationInclusivePenalty(l, r) || compareC1RelaxedIfC2IsOptimal(l, r, relaxCost, c2Comp); } @@ -218,7 +217,7 @@ > ParetoComparator> comparatorWithC1AndC2(@Nonnull DominanceFuncti return (l, r) -> compareArrivalTime(l, r) || compareNumberOfTransfers(l, r) || - compareDuration(l, r) || + compareDurationInclusivePenalty(l, r) || compareC1(l, r) || c2Comp.leftDominateRight(l.c2(), r.c2()); } @@ -231,7 +230,7 @@ > ParetoComparator> comparatorDepartureTimeAndC1AndC2( return (l, r) -> compareDepartureTime(l, r) || compareNumberOfTransfers(l, r) || - compareDuration(l, r) || + compareDurationInclusivePenalty(l, r) || compareC1(l, r) || c2Comp.leftDominateRight(l.c2(), r.c2()); } @@ -245,7 +244,7 @@ > ParetoComparator> comparatorArrivalTimeAndRelaxedC1IfC2IsOptimal return (l, r) -> compareArrivalTime(l, r) || compareNumberOfTransfers(l, r) || - compareDuration(l, r) || + compareDurationInclusivePenalty(l, r) || compareC1RelaxedIfC2IsOptimal(l, r, relaxCost, c2Comp); } @@ -258,7 +257,7 @@ > ParetoComparator> comparatorDepartureTimeAndRelaxedC1IfC2IsOptim return (l, r) -> compareDepartureTime(l, r) || compareNumberOfTransfers(l, r) || - compareDuration(l, r) || + compareDurationInclusivePenalty(l, r) || compareC1RelaxedIfC2IsOptimal(l, r, relaxCost, c2Comp); } diff --git a/src/main/java/org/opentripplanner/raptor/rangeraptor/path/configure/PathConfig.java b/src/main/java/org/opentripplanner/raptor/rangeraptor/path/configure/PathConfig.java index 89b2f447ca4..673c83e6b78 100644 --- a/src/main/java/org/opentripplanner/raptor/rangeraptor/path/configure/PathConfig.java +++ b/src/main/java/org/opentripplanner/raptor/rangeraptor/path/configure/PathConfig.java @@ -26,7 +26,7 @@ /** * This class is responsible for creating a a result collector - the set of paths. *

    - * This class have REQUEST scope, so a new instance should be created for each new request/travel + * This class has REQUEST scope, so a new instance should be created for each new request/travel * search. * * @param The TripSchedule type defined by the user of the raptor API. @@ -57,6 +57,7 @@ public DestinationArrivalPaths createDestArrivalPaths( createPathParetoComparator(costConfig, c2Comp), ctx.calculator(), costConfig.includeC1() ? ctx.costCalculator() : null, + ctx.acceptC2AtDestination(), ctx.slackProvider(), createPathMapper(costConfig.includeC1()), ctx.debugFactory(), diff --git a/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/AccessPaths.java b/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/AccessPaths.java index 5c26a10db23..66b7227584d 100644 --- a/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/AccessPaths.java +++ b/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/AccessPaths.java @@ -8,36 +8,99 @@ import java.util.Arrays; import java.util.Collection; import java.util.List; +import java.util.function.IntUnaryOperator; import org.opentripplanner.raptor.api.model.RaptorAccessEgress; +import org.opentripplanner.raptor.api.model.RaptorConstants; +import org.opentripplanner.raptor.api.model.SearchDirection; import org.opentripplanner.raptor.api.request.RaptorProfile; +import org.opentripplanner.raptor.spi.IntIterator; +import org.opentripplanner.raptor.util.IntIterators; +/** + * This class is responsible for performing Raptor-specific functionality on access-paths. It + * groups paths based on number-of-trips(FLEX mainly) and stop-arrival "mode" (on-board or on-foot). + * This is used to insert the access into the Raptor rounds at the correct moment (round), so + * the number-of-transfers criteria become correct. + *

    + * This class also provides an iterator to iterate over iteration steps in the Raptor algorithm + * to cover extra minutes outside the search-window for access with a time-penalty. + */ public class AccessPaths { + private final int iterationStep; + private final int maxTimePenalty; + private final IntUnaryOperator iterationOp; private final TIntObjectMap> arrivedOnStreetByNumOfRides; private final TIntObjectMap> arrivedOnBoardByNumOfRides; + private int iterationTimePenaltyLimit = RaptorConstants.TIME_NOT_SET; private AccessPaths( + int iterationStep, + IntUnaryOperator iterationOp, TIntObjectMap> arrivedOnStreetByNumOfRides, TIntObjectMap> arrivedOnBoardByNumOfRides ) { + this.iterationStep = iterationStep; + this.iterationOp = iterationOp; this.arrivedOnStreetByNumOfRides = arrivedOnStreetByNumOfRides; this.arrivedOnBoardByNumOfRides = arrivedOnBoardByNumOfRides; + this.maxTimePenalty = + Math.max( + maxTimePenalty(arrivedOnBoardByNumOfRides), + maxTimePenalty(arrivedOnStreetByNumOfRides) + ); + } + + /** + * The multi-criteria state can handle multiple access/egress paths to a single stop, but the + * Standard and BestTime states do not. To get a deterministic behavior, we filter the paths and + * return the paths with the shortest duration for non-multi-criteria search. If two paths have + * the same duration, the first one is picked. Note! If the access/egress paths contains flex as + * well, then we need to look at mode for arriving at tha stop as well. A Flex arrive-on-board can + * be used with a transfer even if the time is worse compared with walking. + *

    + * This method is static and package local to enable unit-testing. + */ + public static AccessPaths create( + int iterationStep, + Collection paths, + RaptorProfile profile, + SearchDirection searchDirection + ) { + if (profile.is(RaptorProfile.MULTI_CRITERIA)) { + paths = removeNonOptimalPathsForMcRaptor(paths); + } else { + paths = removeNonOptimalPathsForStandardRaptor(paths); + } + + paths = decorateWithTimePenaltyLogic(paths); + + return new AccessPaths( + iterationStep, + iterationOp(searchDirection), + groupByRound(paths, RaptorAccessEgress::stopReachedByWalking), + groupByRound(paths, RaptorAccessEgress::stopReachedOnBoard) + ); } /** * Return the transfer arriving at the stop on-street(walking) grouped by Raptor round. The Raptor * round is calculated from the number of rides in the transfer. + *

    + * If no access exists for the given round, an empty list is returned. */ - public TIntObjectMap> arrivedOnStreetByNumOfRides() { - return arrivedOnStreetByNumOfRides; + public List arrivedOnStreetByNumOfRides(int round) { + return filterOnTimePenaltyLimitIfExist(arrivedOnStreetByNumOfRides.get(round)); } /** * Return the transfer arriving at the stop on-board a transit(flex) service grouped by Raptor * round. The Raptor round is calculated from the number of rides in the transfer. + *

    + * If no access exists for the given round, an empty list is returned. */ - public TIntObjectMap> arrivedOnBoardByNumOfRides() { - return arrivedOnBoardByNumOfRides; + public List arrivedOnBoardByNumOfRides(int round) { + return filterOnTimePenaltyLimitIfExist(arrivedOnBoardByNumOfRides.get(round)); } public int calculateMaxNumberOfRides() { @@ -48,25 +111,54 @@ public int calculateMaxNumberOfRides() { } /** - * The multi-criteria state can handle multiple access/egress paths to a single stop, but the - * Standard and BestTime states do not. To get a deterministic behaviour we filter the paths and - * return the paths with the shortest duration for non-multi-criteria search. If two paths have - * the same duration the first one is picked. Note! If the access/egress paths contains flex as - * well, then we need to look at mode for arriving at tha stop as well. A Flex arrive-on-board can - * be used with a transfer even if the time is worse compared with walking. - *

    - * This method is static and package local to enable unit-testing. + * This is used in the main "minutes" iteration to iterate over the extra minutes needed to + * include access with time-penalty. This method returns an iterator for the minutes in front of + * the normal search window starting at the given {@code earliestDepartureTime}. */ - public static AccessPaths create(Collection paths, RaptorProfile profile) { - if (profile.is(RaptorProfile.MULTI_CRITERIA)) { - paths = removeNonOptimalPathsForMcRaptor(paths); - } else { - paths = removeNonOptimalPathsForStandardRaptor(paths); + public IntIterator iterateOverPathsWithPenalty(final int earliestDepartureTime) { + if (!hasTimePenalty()) { + return IntIterators.empty(); } - return new AccessPaths( - groupByRound(paths, RaptorAccessEgress::stopReachedByWalking), - groupByRound(paths, RaptorAccessEgress::stopReachedOnBoard) - ); + // In the first iteration, we want the time-limit to be zero and the raptor-iteration-time + // to be one step before the earliest-departure-time in the search-window. This will include + // all access with a penalty in the first iteration. Then: + this.iterationTimePenaltyLimit = -iterationStep; + final int raptorIterationStartTime = earliestDepartureTime - signedIterationStep(iterationStep); + + return new IntIterator() { + @Override + public boolean hasNext() { + return AccessPaths.this.iterationTimePenaltyLimit + iterationStep < maxTimePenalty; + } + + @Override + public int next() { + AccessPaths.this.iterationTimePenaltyLimit += iterationStep; + return ( + raptorIterationStartTime - signedIterationStep(AccessPaths.this.iterationTimePenaltyLimit) + ); + } + }; + } + + private int maxTimePenalty(TIntObjectMap> col) { + return col + .valueCollection() + .stream() + .flatMapToInt(it -> it.stream().mapToInt(RaptorAccessEgress::timePenalty)) + .max() + .orElse(RaptorConstants.TIME_NOT_SET); + } + + /** + * Decorate access to implement time-penalty. This decoration will do the necessary + * adjustments to apply the penalty in the raptor algorithm. See the decorator class for more + * info. The original access object is returned if it does not have a time-penalty set. + */ + private static List decorateWithTimePenaltyLogic( + Collection paths + ) { + return paths.stream().map(it -> it.hasTimePenalty() ? new AccessWithPenalty(it) : it).toList(); } /** Raptor uses this information to optimize boarding of the first trip */ @@ -77,6 +169,10 @@ public boolean hasTimeDependentAccess() { ); } + private boolean hasTimePenalty() { + return maxTimePenalty != RaptorConstants.TIME_NOT_SET; + } + private static boolean hasTimeDependentAccess(TIntObjectMap> map) { for (List list : map.valueCollection()) { if (list.stream().anyMatch(RaptorAccessEgress::hasOpeningHours)) { @@ -85,4 +181,38 @@ private static boolean hasTimeDependentAccess(TIntObjectMap + * This method returns an empty list if the given input list is {@code null}. + */ + private List filterOnTimePenaltyLimitIfExist(List list) { + if (list == null) { + return List.of(); + } + if (iterationTimePenaltyLimit != RaptorConstants.TIME_NOT_SET) { + return list.stream().filter(e -> e.timePenalty() > iterationTimePenaltyLimit).toList(); + } + return list; + } + + /** + * When searching forward, we step back in time (minus), and when searching in reverse, we + * step forward in time (plus). + */ + private int signedIterationStep(int value) { + return iterationOp.applyAsInt(value); + } + + /** + * We step back/forward in Raptor depending on the search direction. + * @see #signedIterationStep(int) + */ + private static IntUnaryOperator iterationOp(SearchDirection searchDirection) { + return searchDirection.isForward() ? (int step) -> step : (int step) -> -step; + } } diff --git a/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/AccessWithPenalty.java b/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/AccessWithPenalty.java new file mode 100644 index 00000000000..e56b0b6b85e --- /dev/null +++ b/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/AccessWithPenalty.java @@ -0,0 +1,46 @@ +package org.opentripplanner.raptor.rangeraptor.transit; + +import org.opentripplanner.raptor.api.model.AbstractAccessEgressDecorator; +import org.opentripplanner.raptor.api.model.RaptorAccessEgress; +import org.opentripplanner.raptor.api.model.RaptorConstants; + +/** + * This decorator will add the time penalty to the duration of the access and adjust the + * `requestedDepartureTime` when time-shifting the access according to opening-hours. + *

    + * The time-penalty should be invisible outside the Raptor algorithm and should not be part of the + * leg start and end times in the result. Inside Raptor the time-penalty is included in times used + * for comparing arrivals (comparing paths for optimality). In some cases, we need to exclude the + * time-penalty. Checking for limits like 'arrive-by'(in the forward search) and 'depart-after'(in + * the reverse search) requires that the time is without the time-penalty. This class does not + * do these checks. + */ +public class AccessWithPenalty extends AbstractAccessEgressDecorator { + + public AccessWithPenalty(RaptorAccessEgress delegate) { + super(delegate); + } + + @Override + public int durationInSeconds() { + return delegate().durationInSeconds() + delegate().timePenalty(); + } + + @Override + public int earliestDepartureTime(int requestedDepartureTime) { + final int dt = delegate().timePenalty(); + int adjustedTime = delegate().earliestDepartureTime(requestedDepartureTime + dt); + return adjustedTime == RaptorConstants.TIME_NOT_SET + ? RaptorConstants.TIME_NOT_SET + : adjustedTime - dt; + } + + /** + * This class is used internally in Raptor to decorate an access path. This method removes the + * decorator and returns the original access path if decorated. If not, the given path is + * returned. + */ + public RaptorAccessEgress removeDecorator() { + return delegate(); + } +} diff --git a/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/EgressPaths.java b/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/EgressPaths.java index 374fc050782..8f1340552a8 100644 --- a/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/EgressPaths.java +++ b/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/EgressPaths.java @@ -32,6 +32,8 @@ private EgressPaths(TIntObjectMap> pathsByStop) { * This method is static and package local to enable unit-testing. */ public static EgressPaths create(Collection paths, RaptorProfile profile) { + paths = decorateWithTimePenaltyLogic(paths); + if (MULTI_CRITERIA.is(profile)) { paths = removeNonOptimalPathsForMcRaptor(paths); } else { @@ -72,6 +74,17 @@ public int[] egressesWitchStartByARide() { return filterPathsAndGetStops(RaptorAccessEgress::stopReachedOnBoard); } + /** + * Decorate egress to implement time-penalty. This decoration will do the necessary + * adjustments to apply the penalty in the raptor algorithm. See the decorator class for more + * info. The original egress object is returned if it does not have a time-penalty set. + */ + private static List decorateWithTimePenaltyLogic( + Collection paths + ) { + return paths.stream().map(it -> it.hasTimePenalty() ? new EgressWithPenalty(it) : it).toList(); + } + private int[] filterPathsAndGetStops(Predicate filter) { return pathsByStop .valueCollection() diff --git a/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/EgressWithPenalty.java b/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/EgressWithPenalty.java new file mode 100644 index 00000000000..0f973d058d7 --- /dev/null +++ b/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/EgressWithPenalty.java @@ -0,0 +1,41 @@ +package org.opentripplanner.raptor.rangeraptor.transit; + +import org.opentripplanner.raptor.api.model.AbstractAccessEgressDecorator; +import org.opentripplanner.raptor.api.model.RaptorAccessEgress; +import org.opentripplanner.raptor.api.model.RaptorConstants; + +/** + * This decorator will add the time penalty to the duration of the egress and adjust the + * `requestedDepartureTime` when time-shifting the egress according to opening-hours. + *

    + * @see AccessWithPenalty for more info on time-penalty. + */ +public class EgressWithPenalty extends AbstractAccessEgressDecorator { + + public EgressWithPenalty(RaptorAccessEgress delegate) { + super(delegate); + } + + @Override + public int durationInSeconds() { + return delegate().durationInSeconds() + delegate().timePenalty(); + } + + @Override + public int latestArrivalTime(int requestedArrivalTime) { + int dt = delegate().timePenalty(); + int adjustedTime = delegate().latestArrivalTime(requestedArrivalTime - dt); + return adjustedTime == RaptorConstants.TIME_NOT_SET + ? RaptorConstants.TIME_NOT_SET + : adjustedTime + dt; + } + + /** + * This class is used internally in Raptor to decorate an access path. This method removes the + * decorator and returns the original access path if decorated. If not, the given path is + * returned. + */ + public RaptorAccessEgress removeDecorator() { + return delegate(); + } +} diff --git a/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardRaptorTransitCalculator.java b/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardRaptorTransitCalculator.java index 48ccd51e992..5c50aa030f5 100644 --- a/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardRaptorTransitCalculator.java +++ b/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardRaptorTransitCalculator.java @@ -1,11 +1,6 @@ package org.opentripplanner.raptor.rangeraptor.transit; -import java.util.ArrayList; -import java.util.Collection; import java.util.Iterator; -import java.util.Optional; -import java.util.function.IntPredicate; -import javax.annotation.Nullable; import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.raptor.api.model.RaptorConstants; import org.opentripplanner.raptor.api.model.RaptorTransfer; @@ -13,7 +8,6 @@ import org.opentripplanner.raptor.api.model.SearchDirection; import org.opentripplanner.raptor.api.request.RaptorTuningParameters; import org.opentripplanner.raptor.api.request.SearchParams; -import org.opentripplanner.raptor.api.view.ArrivalView; import org.opentripplanner.raptor.spi.IntIterator; import org.opentripplanner.raptor.spi.RaptorConstrainedBoardingSearch; import org.opentripplanner.raptor.spi.RaptorTimeTable; @@ -30,20 +24,12 @@ public final class ForwardRaptorTransitCalculator private final int latestAcceptableArrivalTime; private final int iterationStep; - @Nullable - private final IntPredicate acceptC2AtDestination; - - public ForwardRaptorTransitCalculator( - SearchParams s, - RaptorTuningParameters t, - @Nullable IntPredicate acceptC2AtDestination - ) { + public ForwardRaptorTransitCalculator(SearchParams s, RaptorTuningParameters t) { this( - s.routerEarliestDepartureTime(), - s.routerSearchWindowInSeconds(), + s.earliestDepartureTime(), + s.searchWindowInSeconds(), s.latestArrivalTime(), - t.iterationDepartureStepInSeconds(), - acceptC2AtDestination + t.iterationDepartureStepInSeconds() ); } @@ -51,8 +37,7 @@ public ForwardRaptorTransitCalculator( int earliestDepartureTime, int searchWindowInSeconds, int latestAcceptableArrivalTime, - int iterationStep, - IntPredicate acceptC2AtDestination + int iterationStep ) { this.earliestDepartureTime = earliestDepartureTime; this.searchWindowInSeconds = searchWindowInSeconds; @@ -61,19 +46,6 @@ public ForwardRaptorTransitCalculator( ? unreachedTime() : latestAcceptableArrivalTime; this.iterationStep = iterationStep; - this.acceptC2AtDestination = acceptC2AtDestination; - } - - @Override - public Collection rejectDestinationArrival(ArrivalView destArrival) { - var errors = new ArrayList(); - - if (exceedsTimeLimit(destArrival.arrivalTime())) { - errors.add(exceedsTimeLimitReason()); - } - rejectC2AtDestination(destArrival).ifPresent(errors::add); - - return errors; } @Override @@ -141,14 +113,4 @@ public RaptorTripScheduleSearch createTripSearch(RaptorTimeTable timeTable public RaptorTripScheduleSearch createExactTripSearch(RaptorTimeTable pattern) { return new TripScheduleExactMatchSearch<>(createTripSearch(pattern), this, iterationStep); } - - /** - * Test if the c2 value is acceptable, or should be rejected. If ok return nothing, if rejected - * return the reason for the debug event log. - */ - private Optional rejectC2AtDestination(ArrivalView destArrival) { - return acceptC2AtDestination == null || acceptC2AtDestination.test(destArrival.c2()) - ? Optional.empty() - : Optional.of("C2 value rejected: " + destArrival.c2() + "."); - } } diff --git a/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/RaptorTransitCalculator.java b/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/RaptorTransitCalculator.java index 3e8236d6cd8..af9cff110d0 100644 --- a/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/RaptorTransitCalculator.java +++ b/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/RaptorTransitCalculator.java @@ -3,13 +3,11 @@ import static org.opentripplanner.framework.time.TimeUtils.hm2time; import static org.opentripplanner.raptor.api.model.RaptorConstants.TIME_NOT_SET; -import java.util.Collection; import java.util.Iterator; import org.opentripplanner.raptor.api.model.RaptorAccessEgress; import org.opentripplanner.raptor.api.model.RaptorConstants; import org.opentripplanner.raptor.api.model.RaptorTransfer; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; -import org.opentripplanner.raptor.api.view.ArrivalView; import org.opentripplanner.raptor.spi.IntIterator; import org.opentripplanner.raptor.spi.RaptorConstrainedBoardingSearch; import org.opentripplanner.raptor.spi.RaptorTimeTable; @@ -60,17 +58,10 @@ static RaptorTransitCalculator testDummyCalcul boolean forward ) { return forward - ? new ForwardRaptorTransitCalculator<>(hm2time(8, 0), 2 * 60 * 60, TIME_NOT_SET, 60, null) + ? new ForwardRaptorTransitCalculator<>(hm2time(8, 0), 2 * 60 * 60, TIME_NOT_SET, 60) : new ReverseRaptorTransitCalculator<>(hm2time(8, 0), 2 * 60 * 60, TIME_NOT_SET, 60); } - /** - * Check if the destination arrival is a valid/optimal result. if ok, return an empty list, if - * not return a list of reject reasons. The reject messages are used to produce reject events in - * the debug trace log. - */ - Collection rejectDestinationArrival(ArrivalView destArrival); - /** * Stop the search when the time exceeds the latest-acceptable-arrival-time. In a reverse search * this is the earliest acceptable departure time. @@ -156,4 +147,16 @@ Iterator getTransfers( RaptorTransitDataProvider transitDataProvider, int fromStop ); + + /** + * This method removes the time-penalty from the given time if the provided accessEgress has + * a time-penalty, if not the given time is returned without any change. + *

    + * You may use this method to enforce time constraints like the arriveBy time passed into Raptor. + * This should not be applied to the time Raptor uses for the comparison, like in the ParetoSet. + * The arrival-times used in a pareto-set must include the time-penalty. + */ + default int timeMinusPenalty(int time, RaptorAccessEgress accessEgress) { + return accessEgress.hasTimePenalty() ? minusDuration(time, accessEgress.timePenalty()) : time; + } } diff --git a/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseRaptorTransitCalculator.java b/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseRaptorTransitCalculator.java index 9fc80298191..09ded9fb4b7 100644 --- a/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseRaptorTransitCalculator.java +++ b/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseRaptorTransitCalculator.java @@ -1,7 +1,5 @@ package org.opentripplanner.raptor.rangeraptor.transit; -import java.util.ArrayList; -import java.util.Collection; import java.util.Iterator; import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.raptor.api.model.RaptorConstants; @@ -10,7 +8,6 @@ import org.opentripplanner.raptor.api.model.SearchDirection; import org.opentripplanner.raptor.api.request.RaptorTuningParameters; import org.opentripplanner.raptor.api.request.SearchParams; -import org.opentripplanner.raptor.api.view.ArrivalView; import org.opentripplanner.raptor.spi.IntIterator; import org.opentripplanner.raptor.spi.RaptorConstrainedBoardingSearch; import org.opentripplanner.raptor.spi.RaptorTimeTable; @@ -32,8 +29,8 @@ public ReverseRaptorTransitCalculator(SearchParams s, RaptorTuningParameters t) // goes with destination and 'latestArrivalTime()' match origin. this( s.latestArrivalTime(), - s.routerSearchWindowInSeconds(), - s.routerEarliestDepartureTime(), + s.searchWindowInSeconds(), + s.earliestDepartureTime(), t.iterationDepartureStepInSeconds() ); } @@ -53,17 +50,6 @@ public ReverseRaptorTransitCalculator(SearchParams s, RaptorTuningParameters t) this.iterationStep = iterationStep; } - @Override - public Collection rejectDestinationArrival(ArrivalView destArrival) { - var errors = new ArrayList(); - - if (exceedsTimeLimit(destArrival.arrivalTime())) { - errors.add(exceedsTimeLimitReason()); - } - - return errors; - } - @Override public boolean exceedsTimeLimit(int time) { return isBefore(earliestAcceptableDepartureTime, time); diff --git a/src/main/java/org/opentripplanner/raptor/spi/UnknownPath.java b/src/main/java/org/opentripplanner/raptor/spi/UnknownPath.java index de6a846f480..24eae14f997 100644 --- a/src/main/java/org/opentripplanner/raptor/spi/UnknownPath.java +++ b/src/main/java/org/opentripplanner/raptor/spi/UnknownPath.java @@ -46,11 +46,21 @@ public int startTime() { return departureTime; } + @Override + public int startTimeInclusivePenalty() { + return departureTime; + } + @Override public int endTime() { return arrivalTime; } + @Override + public int endTimeInclusivePenalty() { + return arrivalTime; + } + @Override public int durationInSeconds() { return arrivalTime - departureTime; diff --git a/src/main/java/org/opentripplanner/raptor/util/IntIterators.java b/src/main/java/org/opentripplanner/raptor/util/IntIterators.java index 3ab604669d7..b0df1e56155 100644 --- a/src/main/java/org/opentripplanner/raptor/util/IntIterators.java +++ b/src/main/java/org/opentripplanner/raptor/util/IntIterators.java @@ -1,9 +1,22 @@ package org.opentripplanner.raptor.util; +import org.opentripplanner.raptor.api.model.RaptorConstants; import org.opentripplanner.raptor.spi.IntIterator; public class IntIterators { + private static final IntIterator EMPTY = new IntIterator() { + @Override + public int next() { + return RaptorConstants.NOT_FOUND; + } + + @Override + public boolean hasNext() { + return false; + } + }; + /** This is private to forbid construction. */ private IntIterators() { /* NOOP*/ @@ -117,4 +130,11 @@ public boolean hasNext() { public static IntIterator singleValueIterator(final int value) { return intIncIterator(value, value + 1); } + + /** + * Return an empty iterator. All calls to {@link IntIterator#hasNext()} will return {@code false}. + */ + public static IntIterator empty() { + return EMPTY; + } } diff --git a/src/main/java/org/opentripplanner/routing/algorithm/mapping/RaptorPathToItineraryMapper.java b/src/main/java/org/opentripplanner/routing/algorithm/mapping/RaptorPathToItineraryMapper.java index 6e365b4cd49..2780cc8ba14 100644 --- a/src/main/java/org/opentripplanner/routing/algorithm/mapping/RaptorPathToItineraryMapper.java +++ b/src/main/java/org/opentripplanner/routing/algorithm/mapping/RaptorPathToItineraryMapper.java @@ -181,10 +181,6 @@ private List mapAccessLeg(AccessPathLeg accessPathLeg) { int fromTime = accessPathLeg.fromTime(); - if (accessPath.hasPenalty()) { - fromTime = accessPath.timeShiftDepartureTimeToActualTime(fromTime); - } - return subItinerary.withTimeShiftToStartAt(createZonedDateTime(fromTime)).getLegs(); } diff --git a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/TransitRouter.java b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/TransitRouter.java index c9e7f92263f..b58af3c8b23 100644 --- a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/TransitRouter.java +++ b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/TransitRouter.java @@ -127,7 +127,6 @@ private TransitRouterResult route() { serverContext.raptorConfig().isMultiThreaded(), accessEgresses.getAccesses(), accessEgresses.getEgresses(), - accessEgresses.calculateMaxAccessTimePenalty(), serverContext.meterRegistry() ); @@ -232,6 +231,8 @@ private Collection fetchAccessEgresses(AccessEgressType typ accessRequest.withPreferences(p -> { p.withBike(b -> b.withRental(r -> r.withAllowArrivingInRentedVehicleAtDestination(false))); p.withCar(c -> c.withRental(r -> r.withAllowArrivingInRentedVehicleAtDestination(false))); + p.withScooter(s -> s.withRental(r -> r.withAllowArrivingInRentedVehicleAtDestination(false)) + ); }); } diff --git a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/AccessEgresses.java b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/AccessEgresses.java index 09018dc3349..f2e8fe6c9f1 100644 --- a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/AccessEgresses.java +++ b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/AccessEgresses.java @@ -1,6 +1,5 @@ package org.opentripplanner.routing.algorithm.raptoradapter.router.street; -import java.time.Duration; import java.util.Collection; import org.opentripplanner.routing.algorithm.raptoradapter.transit.DefaultAccessEgress; @@ -24,12 +23,4 @@ public Collection getAccesses() { public Collection getEgresses() { return egresses; } - - public Duration calculateMaxAccessTimePenalty() { - return accesses - .stream() - .map(it -> it.penalty().time()) - .max(Duration::compareTo) - .orElse(Duration.ZERO); - } } diff --git a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/DirectStreetRouter.java b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/DirectStreetRouter.java index 2c6b09c2fb2..11463902dcd 100644 --- a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/DirectStreetRouter.java +++ b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/DirectStreetRouter.java @@ -35,14 +35,16 @@ public static List route(OtpServerRequestContext serverContext, Route request.journey().direct().mode() ) ) { - if (!straightLineDistanceIsWithinLimit(directRequest, temporaryVertices)) { + var maxCarSpeed = serverContext.streetLimitationParametersService().getMaxCarSpeed(); + if (!straightLineDistanceIsWithinLimit(directRequest, temporaryVertices, maxCarSpeed)) { return Collections.emptyList(); } // we could also get a persistent router-scoped GraphPathFinder but there's no setup cost here GraphPathFinder gpFinder = new GraphPathFinder( serverContext.traverseVisitor(), - serverContext.dataOverlayContext(request) + serverContext.dataOverlayContext(request), + maxCarSpeed ); List> paths = gpFinder.graphPathFinderEntryPoint( directRequest, @@ -69,7 +71,8 @@ public static List route(OtpServerRequestContext serverContext, Route private static boolean straightLineDistanceIsWithinLimit( RouteRequest request, - TemporaryVerticesContainer vertexContainer + TemporaryVerticesContainer vertexContainer, + float maxCarSpeed ) { // TODO This currently only calculates the distances between the first fromVertex // and the first toVertex @@ -77,7 +80,7 @@ private static boolean straightLineDistanceIsWithinLimit( vertexContainer.getFromVertices().iterator().next().getCoordinate(), vertexContainer.getToVertices().iterator().next().getCoordinate() ); - return distance < calculateDistanceMaxLimit(request); + return distance < calculateDistanceMaxLimit(request, maxCarSpeed); } /** @@ -85,7 +88,7 @@ private static boolean straightLineDistanceIsWithinLimit( * fastest mode available. This assumes that it is not possible to exceed the speed defined in the * RouteRequest. */ - private static double calculateDistanceMaxLimit(RouteRequest request) { + private static double calculateDistanceMaxLimit(RouteRequest request, float maxCarSpeed) { var preferences = request.preferences(); double distanceLimit; StreetMode mode = request.journey().direct().mode(); @@ -93,9 +96,11 @@ private static double calculateDistanceMaxLimit(RouteRequest request) { double durationLimit = preferences.street().maxDirectDuration().valueOf(mode).toSeconds(); if (mode.includesDriving()) { - distanceLimit = durationLimit * preferences.car().speed(); + distanceLimit = durationLimit * maxCarSpeed; } else if (mode.includesBiking()) { distanceLimit = durationLimit * preferences.bike().speed(); + } else if (mode.includesScooter()) { + distanceLimit = durationLimit * preferences.scooter().speed(); } else if (mode.includesWalking()) { distanceLimit = durationLimit * preferences.walk().speed(); } else { diff --git a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/DefaultAccessEgress.java b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/DefaultAccessEgress.java index e0ca070d76f..35987c0af7d 100644 --- a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/DefaultAccessEgress.java +++ b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/DefaultAccessEgress.java @@ -1,7 +1,6 @@ package org.opentripplanner.routing.algorithm.raptoradapter.transit; import java.util.Objects; -import java.util.function.IntUnaryOperator; import org.opentripplanner.framework.model.TimeAndCost; import org.opentripplanner.raptor.api.model.RaptorAccessEgress; import org.opentripplanner.raptor.api.model.RaptorConstants; @@ -16,6 +15,9 @@ public class DefaultAccessEgress implements RaptorAccessEgress { private final int stop; private final int durationInSeconds; private final int generalizedCost; + private final int timePenalty; + + /** Keep this to be able to map back to itinerary */ private final TimeAndCost penalty; /** @@ -28,6 +30,7 @@ public DefaultAccessEgress(int stop, State lastState) { this.durationInSeconds = (int) lastState.getElapsedTimeSeconds(); this.generalizedCost = RaptorCostConverter.toRaptorCost(lastState.getWeight()); this.lastState = lastState; + this.timePenalty = RaptorConstants.TIME_NOT_SET; this.penalty = TimeAndCost.ZERO; } @@ -36,8 +39,12 @@ protected DefaultAccessEgress(DefaultAccessEgress other, TimeAndCost penalty) { throw new IllegalStateException("Can not add penalty twice..."); } this.stop = other.stop(); - this.durationInSeconds = other.durationInSeconds() + (int) penalty.time().toSeconds(); + this.durationInSeconds = other.durationInSeconds(); + // In the API we have a cost associated with the time-penalty. In Raptor, there is no + // association between the time-penalty and the cost. So, we add the time-penalty cost to + // the generalized cost here. In logic later on, we will remove it. this.generalizedCost = other.c1() + penalty.cost().toCentiSeconds(); + this.timePenalty = penalty.isZero() ? RaptorConstants.TIME_NOT_SET : penalty.timeInSeconds(); this.penalty = penalty; this.lastState = other.getLastState(); } @@ -56,6 +63,11 @@ public int durationInSeconds() { return durationInSeconds; } + @Override + public int timePenalty() { + return timePenalty; + } + @Override public int stop() { return stop; @@ -97,10 +109,6 @@ public int latestArrivalTime(int requestedArrivalTime) { return requestedArrivalTime; } - public int timeShiftDepartureTimeToActualTime(int computedDepartureTimeIncludingPenalty) { - return computedDepartureTimeIncludingPenalty + penalty.timeInSeconds(); - } - @Override public String toString() { return asString(true, true, summary()); @@ -129,48 +137,6 @@ public int hashCode() { return Objects.hash(stop, durationInSeconds, generalizedCost, penalty); } - /** - * Allow a subclass to calculate the departureTime if it has opening hours. This method will - * adjust the times to apply the time penalty correct. - *

    - * The penalty must be removed before calculating the departure with the opening hours. - * Then before returning, the penalty must be added back. If the departure is not possible, - * this "state" must be kept. - */ - protected int calculateEarliestDepartureTimeWithOpeningHours( - int requestedDepartureTime, - IntUnaryOperator calculateFirstPossibleDeparture - ) { - int dt = penalty().timeInSeconds(); - int actual = requestedDepartureTime + dt; - int adjusted = calculateFirstPossibleDeparture.applyAsInt(actual); - return ifNotSet(adjusted, v -> v - dt); - } - - /** - * Allow a subclass to calculate the arrivalTime if it has opening hours. This method will adjust - * the times to apply the time penalty correct. - *

    - * The penalty must be removed before calculating the arrival with the opening hours. - * Then before returning, the penalty must be added back. If the arrival is not possible, - * this "state" must be kept. - */ - protected int calculateLatestArrivalTimeWithOpeningHours( - int requestedArrivalTime, - IntUnaryOperator calculateLatestPossibleArrival - ) { - int dt = penalty().timeInSeconds(); - int actual = requestedArrivalTime - dt; - int adjusted = calculateLatestPossibleArrival.applyAsInt(actual); - return ifNotSet(adjusted, v -> v + dt); - } - - protected int ifNotSet(int value, IntUnaryOperator body) { - return value == RaptorConstants.TIME_NOT_SET - ? RaptorConstants.TIME_NOT_SET - : body.applyAsInt(value); - } - /** * Include summary information in toString. We only include information relevant for using this * in routing (not latestState). diff --git a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/FlexAccessEgressAdapter.java b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/FlexAccessEgressAdapter.java index af602b857ad..0cf95b544f4 100644 --- a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/FlexAccessEgressAdapter.java +++ b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/FlexAccessEgressAdapter.java @@ -27,18 +27,12 @@ private FlexAccessEgressAdapter(FlexAccessEgressAdapter other, TimeAndCost penal @Override public int earliestDepartureTime(int requestedDepartureTime) { - return calculateEarliestDepartureTimeWithOpeningHours( - requestedDepartureTime, - v -> mapToRaptorTime(flexAccessEgress.earliestDepartureTime(v)) - ); + return mapToRaptorTime(flexAccessEgress.earliestDepartureTime(requestedDepartureTime)); } @Override public int latestArrivalTime(int requestedArrivalTime) { - return calculateLatestArrivalTimeWithOpeningHours( - requestedArrivalTime, - v -> mapToRaptorTime(flexAccessEgress.latestArrivalTime(v)) - ); + return mapToRaptorTime(flexAccessEgress.latestArrivalTime(requestedArrivalTime)); } @Override diff --git a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/RaptorRequestMapper.java b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/RaptorRequestMapper.java index 91547b1f62f..879536fdcd0 100644 --- a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/RaptorRequestMapper.java +++ b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/RaptorRequestMapper.java @@ -3,7 +3,6 @@ import static org.opentripplanner.raptor.api.request.Optimization.PARALLEL; import io.micrometer.core.instrument.MeterRegistry; -import java.time.Duration; import java.time.Instant; import java.time.ZonedDateTime; import java.util.Collection; @@ -21,7 +20,6 @@ import org.opentripplanner.raptor.api.request.RaptorRequestBuilder; import org.opentripplanner.raptor.rangeraptor.SystemErrDebugLogger; import org.opentripplanner.routing.algorithm.raptoradapter.router.performance.PerformanceTimersForRaptor; -import org.opentripplanner.routing.algorithm.raptoradapter.transit.TripSchedule; import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter; import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.grouppriority.TransitGroupPriority32n; import org.opentripplanner.routing.api.request.DebugEventType; @@ -34,7 +32,6 @@ public class RaptorRequestMapper { private final RouteRequest request; private final Collection accessPaths; private final Collection egressPaths; - private final Duration searchWindowAccessSlack; private final long transitSearchTimeZeroEpocSecond; private final boolean isMultiThreadedEnbled; private final MeterRegistry meterRegistry; @@ -44,7 +41,6 @@ private RaptorRequestMapper( boolean isMultiThreaded, Collection accessPaths, Collection egressPaths, - Duration searchWindowAccessSlack, long transitSearchTimeZeroEpocSecond, MeterRegistry meterRegistry ) { @@ -52,7 +48,6 @@ private RaptorRequestMapper( this.isMultiThreadedEnbled = isMultiThreaded; this.accessPaths = accessPaths; this.egressPaths = egressPaths; - this.searchWindowAccessSlack = searchWindowAccessSlack; this.transitSearchTimeZeroEpocSecond = transitSearchTimeZeroEpocSecond; this.meterRegistry = meterRegistry; } @@ -63,7 +58,6 @@ public static RaptorRequest mapRequest( boolean isMultiThreaded, Collection accessPaths, Collection egressPaths, - Duration searchWindowAccessSlack, MeterRegistry meterRegistry ) { return new RaptorRequestMapper( @@ -71,7 +65,6 @@ public static RaptorRequest mapRequest( isMultiThreaded, accessPaths, egressPaths, - searchWindowAccessSlack, transitSearchTimeZero.toEpochSecond(), meterRegistry ) @@ -172,10 +165,6 @@ private RaptorRequest doMap() { builder.searchParams().preferLateArrival(true); } - if (searchWindowAccessSlack.toSeconds() > 0) { - builder.searchParams().searchWindowAccessSlack(searchWindowAccessSlack); - } - // Add this last, it depends on generating an alias from the set values if (meterRegistry != null) { builder.performanceTimers( diff --git a/src/main/java/org/opentripplanner/routing/api/request/RequestModes.java b/src/main/java/org/opentripplanner/routing/api/request/RequestModes.java index 5253bb2018d..72b06f62979 100644 --- a/src/main/java/org/opentripplanner/routing/api/request/RequestModes.java +++ b/src/main/java/org/opentripplanner/routing/api/request/RequestModes.java @@ -2,12 +2,9 @@ import static org.opentripplanner.routing.api.request.StreetMode.NOT_SET; -import java.util.Collection; -import java.util.List; import java.util.Objects; import javax.annotation.Nonnull; import org.opentripplanner.framework.tostring.ToStringBuilder; -import org.opentripplanner.transit.model.basic.MainAndSubMode; public class RequestModes { @@ -39,10 +36,11 @@ private RequestModes( StreetMode directMode, StreetMode transferMode ) { - this.accessMode = (accessMode != null && accessMode.access) ? accessMode : NOT_SET; - this.egressMode = (egressMode != null && egressMode.egress) ? egressMode : NOT_SET; + this.accessMode = (accessMode != null && accessMode.accessAllowed()) ? accessMode : NOT_SET; + this.egressMode = (egressMode != null && egressMode.egressAllowed()) ? egressMode : NOT_SET; this.directMode = directMode != null ? directMode : NOT_SET; - this.transferMode = (transferMode != null && transferMode.transfer) ? transferMode : NOT_SET; + this.transferMode = + (transferMode != null && transferMode.transferAllowed()) ? transferMode : NOT_SET; } public RequestModes(RequestModesBuilder builder) { diff --git a/src/main/java/org/opentripplanner/routing/api/request/StreetMode.java b/src/main/java/org/opentripplanner/routing/api/request/StreetMode.java index 0f5d65305b3..47073aa7eeb 100644 --- a/src/main/java/org/opentripplanner/routing/api/request/StreetMode.java +++ b/src/main/java/org/opentripplanner/routing/api/request/StreetMode.java @@ -1,5 +1,7 @@ package org.opentripplanner.routing.api.request; +import java.util.EnumSet; +import java.util.Set; import org.opentripplanner.framework.doc.DocumentedEnum; public enum StreetMode implements DocumentedEnum { @@ -7,126 +9,121 @@ public enum StreetMode implements DocumentedEnum { * No street mode is set. This option is used if we do not want street routing at all in this part * of the search. */ - NOT_SET(true, true, true, false, false, false, false, false, false), + NOT_SET(Feature.ACCESS, Feature.TRANSFER, Feature.EGRESS), /** * Walk only */ - WALK(true, true, true, true, false, false, false, false, false), + WALK(Feature.ACCESS, Feature.TRANSFER, Feature.EGRESS, Feature.WALKING), /** * Bike only */ - BIKE(true, true, true, false, true, false, false, false, false), + BIKE(Feature.ACCESS, Feature.TRANSFER, Feature.EGRESS, Feature.CYCLING), /** * Bike to a bike parking area, then walk the rest of the way. *

    * Direct mode and access mode only. */ - BIKE_TO_PARK(true, false, false, true, true, false, false, true, false), + BIKE_TO_PARK(Feature.ACCESS, Feature.WALKING, Feature.CYCLING, Feature.PARKING), /** * Walk to a bike rental point, bike to a bike rental drop-off point, and walk the rest of the * way. This can include bike rental at fixed locations or free-floating services. */ - BIKE_RENTAL(true, true, true, true, true, false, true, false, false), + BIKE_RENTAL(Feature.ACCESS, Feature.EGRESS, Feature.WALKING, Feature.CYCLING, Feature.RENTING), /** * Walk to a scooter rental point, ride a scooter to a scooter rental drop-off point, and walk the * rest of the way. This can include scooter rental at fixed locations or free-floating services. */ - SCOOTER_RENTAL(true, true, true, true, true, false, true, false, false), + SCOOTER_RENTAL(Feature.ACCESS, Feature.EGRESS, Feature.WALKING, Feature.SCOOTER, Feature.RENTING), /** * Car only *

    * Direct mode only. */ - CAR(true, false, false, false, false, true, false, false, false), + CAR(Feature.ACCESS, Feature.DRIVING), /** * Start in the car, drive to a parking area, and walk the rest of the way. *

    * Direct mode and access mode only. */ - CAR_TO_PARK(true, false, false, true, false, true, false, true, false), + CAR_TO_PARK(Feature.ACCESS, Feature.WALKING, Feature.DRIVING, Feature.PARKING), /** * Walk to a pickup point along the road, drive to a drop-off point along the road, and walk the * rest of the way. This can include various taxi-services or kiss & ride. */ - CAR_PICKUP(true, false, true, true, false, true, false, false, true), + CAR_PICKUP(Feature.ACCESS, Feature.EGRESS, Feature.WALKING, Feature.DRIVING, Feature.PICKUP), /** * Walk to a car rental point, drive to a car rental drop-off point and walk the rest of the way. * This can include car rental at fixed locations or free-floating services. */ - CAR_RENTAL(true, true, true, true, false, true, true, false, false), + CAR_RENTAL(Feature.ACCESS, Feature.EGRESS, Feature.WALKING, Feature.DRIVING, Feature.RENTING), /** * Using a car hailing app like Uber or Lyft to get to a train station or all the way to the destination. */ - CAR_HAILING(true, false, true, false, false, true, false, false, true), + CAR_HAILING(Feature.ACCESS, Feature.EGRESS, Feature.DRIVING, Feature.PICKUP), /** * Encompasses all types of on-demand and flexible transportation. */ - FLEXIBLE(true, false, true, true, false, false, false, false, false); - - final boolean access; - - final boolean transfer; - - final boolean egress; - - final boolean includesWalking; - - final boolean includesBiking; + FLEXIBLE(Feature.ACCESS, Feature.EGRESS, Feature.WALKING); + + private enum Feature { + ACCESS, + EGRESS, + TRANSFER, + WALKING, + CYCLING, + DRIVING, + SCOOTER, + RENTING, + PARKING, + PICKUP, + } - final boolean includesDriving; + private final Set features; - final boolean includesRenting; + StreetMode(Feature first, Feature... rest) { + this.features = EnumSet.of(first, rest); + } - final boolean includesParking; + public boolean accessAllowed() { + return features.contains(Feature.ACCESS); + } - final boolean includesPickup; + public boolean transferAllowed() { + return features.contains(Feature.TRANSFER); + } - StreetMode( - boolean access, - boolean transfer, - boolean egress, - boolean includesWalking, - boolean includesBiking, - boolean includesDriving, - boolean includesRenting, - boolean includesParking, - boolean includesPickup - ) { - this.access = access; - this.transfer = transfer; - this.egress = egress; - this.includesWalking = includesWalking; - this.includesBiking = includesBiking; - this.includesDriving = includesDriving; - this.includesRenting = includesRenting; - this.includesParking = includesParking; - this.includesPickup = includesPickup; + public boolean egressAllowed() { + return features.contains(Feature.EGRESS); } public boolean includesWalking() { - return includesWalking; + return features.contains(Feature.WALKING); } public boolean includesBiking() { - return includesBiking; + return features.contains(Feature.CYCLING); } public boolean includesDriving() { - return includesDriving; + return features.contains(Feature.DRIVING); + } + + public boolean includesScooter() { + return features.contains(Feature.SCOOTER); } public boolean includesRenting() { - return includesRenting; + return features.contains(Feature.RENTING); } public boolean includesParking() { - return includesParking; + return features.contains(Feature.PARKING); } public boolean includesPickup() { - return includesPickup; + return features.contains(Feature.PICKUP); } @Override diff --git a/src/main/java/org/opentripplanner/routing/api/request/preference/AccessEgressPreferences.java b/src/main/java/org/opentripplanner/routing/api/request/preference/AccessEgressPreferences.java index ada495b19ba..9998f0a3b1c 100644 --- a/src/main/java/org/opentripplanner/routing/api/request/preference/AccessEgressPreferences.java +++ b/src/main/java/org/opentripplanner/routing/api/request/preference/AccessEgressPreferences.java @@ -25,12 +25,16 @@ public final class AccessEgressPreferences implements Serializable { TimePenalty.of(ofMinutes(20), 2f), 1.5 ); + private static final TimeAndCostPenalty FLEX_DEFAULT_PENALTY = TimeAndCostPenalty.of( + TimePenalty.of(ofMinutes(10), 1.3f), + 1.3 + ); private static final TimeAndCostPenaltyForEnum DEFAULT_TIME_AND_COST = TimeAndCostPenaltyForEnum .of(StreetMode.class) .with(StreetMode.CAR_TO_PARK, DEFAULT_PENALTY) .with(StreetMode.CAR_HAILING, DEFAULT_PENALTY) .with(StreetMode.CAR_RENTAL, DEFAULT_PENALTY) - .with(StreetMode.FLEXIBLE, DEFAULT_PENALTY) + .with(StreetMode.FLEXIBLE, FLEX_DEFAULT_PENALTY) .build(); public static final AccessEgressPreferences DEFAULT = new AccessEgressPreferences(); diff --git a/src/main/java/org/opentripplanner/routing/api/request/preference/BikePreferences.java b/src/main/java/org/opentripplanner/routing/api/request/preference/BikePreferences.java index 26da1476b38..5767b74eaa8 100644 --- a/src/main/java/org/opentripplanner/routing/api/request/preference/BikePreferences.java +++ b/src/main/java/org/opentripplanner/routing/api/request/preference/BikePreferences.java @@ -2,8 +2,8 @@ import static org.opentripplanner.framework.lang.DoubleUtils.doubleEquals; import static org.opentripplanner.framework.lang.ObjectUtils.ifNotNull; -import static org.opentripplanner.routing.core.BicycleOptimizeType.SAFE_STREETS; -import static org.opentripplanner.routing.core.BicycleOptimizeType.TRIANGLE; +import static org.opentripplanner.routing.core.VehicleRoutingOptimizeType.SAFE_STREETS; +import static org.opentripplanner.routing.core.VehicleRoutingOptimizeType.TRIANGLE; import java.io.Serializable; import java.util.Objects; @@ -11,7 +11,7 @@ import org.opentripplanner.framework.model.Cost; import org.opentripplanner.framework.model.Units; import org.opentripplanner.framework.tostring.ToStringBuilder; -import org.opentripplanner.routing.core.BicycleOptimizeType; +import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; /** * The bike preferences contain all speed, reluctance, cost and factor preferences for biking @@ -29,7 +29,7 @@ public final class BikePreferences implements Serializable { private final Cost boardCost; private final VehicleParkingPreferences parking; private final VehicleRentalPreferences rental; - private final BicycleOptimizeType optimizeType; + private final VehicleRoutingOptimizeType optimizeType; private final TimeSlopeSafetyTriangle optimizeTriangle; private final VehicleWalkingPreferences walking; @@ -96,7 +96,7 @@ public VehicleRentalPreferences rental() { /** * The set of characteristics that the user wants to optimize for -- defaults to SAFE_STREETS. */ - public BicycleOptimizeType optimizeType() { + public VehicleRoutingOptimizeType optimizeType() { return optimizeType; } @@ -164,7 +164,7 @@ public static class Builder { private Cost boardCost; private VehicleParkingPreferences parking; private VehicleRentalPreferences rental; - private BicycleOptimizeType optimizeType; + private VehicleRoutingOptimizeType optimizeType; private TimeSlopeSafetyTriangle optimizeTriangle; private VehicleWalkingPreferences walking; @@ -221,11 +221,11 @@ public Builder withRental(Consumer body) { return this; } - public BicycleOptimizeType optimizeType() { + public VehicleRoutingOptimizeType optimizeType() { return optimizeType; } - public Builder withOptimizeType(BicycleOptimizeType optimizeType) { + public Builder withOptimizeType(VehicleRoutingOptimizeType optimizeType) { this.optimizeType = optimizeType; return this; } diff --git a/src/main/java/org/opentripplanner/routing/api/request/preference/CarPreferences.java b/src/main/java/org/opentripplanner/routing/api/request/preference/CarPreferences.java index b2f226cf307..cc9b7ba62d8 100644 --- a/src/main/java/org/opentripplanner/routing/api/request/preference/CarPreferences.java +++ b/src/main/java/org/opentripplanner/routing/api/request/preference/CarPreferences.java @@ -22,7 +22,6 @@ public final class CarPreferences implements Serializable { public static final CarPreferences DEFAULT = new CarPreferences(); - private final double speed; private final double reluctance; private final VehicleParkingPreferences parking; private final VehicleRentalPreferences rental; @@ -33,7 +32,6 @@ public final class CarPreferences implements Serializable { /** Create a new instance with default values. */ private CarPreferences() { - this.speed = 40.0; this.reluctance = 2.0; this.parking = VehicleParkingPreferences.DEFAULT; this.rental = VehicleRentalPreferences.DEFAULT; @@ -44,7 +42,6 @@ private CarPreferences() { } private CarPreferences(Builder builder) { - this.speed = Units.speed(builder.speed); this.reluctance = Units.reluctance(builder.reluctance); this.parking = builder.parking; this.rental = builder.rental; @@ -62,15 +59,6 @@ public CarPreferences.Builder copyOf() { return new Builder(this); } - /** - * Max car speed along streets, in meters per second. - *

    - * Default: 40 m/s, 144 km/h, above the maximum (finite) driving speed limit worldwide. - */ - public double speed() { - return speed; - } - public double reluctance() { return reluctance; } @@ -117,7 +105,6 @@ public boolean equals(Object o) { if (o == null || getClass() != o.getClass()) return false; CarPreferences that = (CarPreferences) o; return ( - DoubleUtils.doubleEquals(that.speed, speed) && DoubleUtils.doubleEquals(that.reluctance, reluctance) && parking.equals(that.parking) && rental.equals(that.rental) && @@ -131,7 +118,6 @@ public boolean equals(Object o) { @Override public int hashCode() { return Objects.hash( - speed, reluctance, parking, rental, @@ -146,7 +132,6 @@ public int hashCode() { public String toString() { return ToStringBuilder .of(CarPreferences.class) - .addNum("speed", speed, DEFAULT.speed) .addNum("reluctance", reluctance, DEFAULT.reluctance) .addObj("parking", parking, DEFAULT.parking) .addObj("rental", rental, DEFAULT.rental) @@ -161,7 +146,6 @@ public String toString() { public static class Builder { private final CarPreferences original; - private double speed; private double reluctance; private VehicleParkingPreferences parking; private VehicleRentalPreferences rental; @@ -172,7 +156,6 @@ public static class Builder { public Builder(CarPreferences original) { this.original = original; - this.speed = original.speed; this.reluctance = original.reluctance; this.parking = original.parking; this.rental = original.rental; @@ -186,11 +169,6 @@ public CarPreferences original() { return original; } - public Builder withSpeed(double speed) { - this.speed = speed; - return this; - } - public Builder withReluctance(double reluctance) { this.reluctance = reluctance; return this; diff --git a/src/main/java/org/opentripplanner/routing/api/request/preference/RoutingPreferences.java b/src/main/java/org/opentripplanner/routing/api/request/preference/RoutingPreferences.java index d3d22160935..58ca5b180bf 100644 --- a/src/main/java/org/opentripplanner/routing/api/request/preference/RoutingPreferences.java +++ b/src/main/java/org/opentripplanner/routing/api/request/preference/RoutingPreferences.java @@ -7,6 +7,7 @@ import java.util.Objects; import java.util.function.Consumer; import javax.annotation.Nonnull; +import javax.annotation.Nullable; import org.opentripplanner.routing.api.request.StreetMode; import org.opentripplanner.street.search.TraverseMode; @@ -23,6 +24,7 @@ public final class RoutingPreferences implements Serializable { private final WheelchairPreferences wheelchair; private final BikePreferences bike; private final CarPreferences car; + private final ScooterPreferences scooter; private final SystemPreferences system; private final ItineraryFilterPreferences itineraryFilter; @@ -34,6 +36,7 @@ public RoutingPreferences() { this.wheelchair = WheelchairPreferences.DEFAULT; this.bike = BikePreferences.DEFAULT; this.car = CarPreferences.DEFAULT; + this.scooter = ScooterPreferences.DEFAULT; this.system = SystemPreferences.DEFAULT; this.itineraryFilter = ItineraryFilterPreferences.DEFAULT; } @@ -46,6 +49,7 @@ private RoutingPreferences(Builder builder) { this.street = requireNonNull(builder.street()); this.bike = requireNonNull(builder.bike()); this.car = requireNonNull(builder.car()); + this.scooter = requireNonNull(builder.scooter()); this.system = requireNonNull(builder.system()); this.itineraryFilter = requireNonNull(builder.itineraryFilter()); } @@ -90,6 +94,10 @@ public CarPreferences car() { return car; } + public ScooterPreferences scooter() { + return scooter; + } + /** * Get parking preferences for the traverse mode. Note, only car and bike are supported. */ @@ -99,20 +107,28 @@ public VehicleParkingPreferences parking(TraverseMode mode) { /** * Get rental preferences for the traverse mode. Note, only car, scooter and bike are supported. - * - * TODO make scooter preferences independent of bike */ + @Nonnull public VehicleRentalPreferences rental(TraverseMode mode) { - return mode == TraverseMode.CAR ? car.rental() : bike.rental(); + return switch (mode) { + case BICYCLE -> bike.rental(); + case CAR -> car.rental(); + case SCOOTER -> scooter.rental(); + default -> throw new IllegalArgumentException("rental(): Invalid mode " + mode); + }; } /** * Get rental preferences for the traverse mode. Note, only car, scooter and bike are supported. - * - * TODO make scooter preferences independent of bike */ + @Nullable public VehicleRentalPreferences rental(StreetMode mode) { - return mode == StreetMode.CAR_RENTAL ? car.rental() : bike.rental(); + return switch (mode) { + case BIKE_RENTAL -> bike.rental(); + case CAR_RENTAL -> car.rental(); + case SCOOTER_RENTAL -> scooter.rental(); + default -> null; + }; } @Nonnull @@ -126,12 +142,14 @@ public SystemPreferences system() { /** * The road speed for a specific traverse mode. + * + * NOTE, this is only used for tests and doesn't support scooter walking */ public double getSpeed(TraverseMode mode, boolean walkingBike) { return switch (mode) { case WALK -> walkingBike ? bike.walking().speed() : walk.speed(); case BICYCLE -> bike.speed(); - case CAR -> car.speed(); + case SCOOTER -> scooter.speed(); default -> throw new IllegalArgumentException("getSpeed(): Invalid mode " + mode); }; } @@ -149,6 +167,7 @@ public boolean equals(Object o) { Objects.equals(wheelchair, that.wheelchair) && Objects.equals(bike, that.bike) && Objects.equals(car, that.car) && + Objects.equals(scooter, that.scooter) && Objects.equals(system, that.system) && Objects.equals(itineraryFilter, that.itineraryFilter) ); @@ -164,6 +183,7 @@ public int hashCode() { wheelchair, bike, car, + scooter, system, itineraryFilter ); @@ -179,6 +199,7 @@ public static class Builder { private WheelchairPreferences wheelchair = null; private BikePreferences bike = null; private CarPreferences car = null; + private ScooterPreferences scooter = null; private SystemPreferences system = null; private ItineraryFilterPreferences itineraryFilter = null; @@ -259,6 +280,15 @@ public Builder withCar(Consumer body) { return this; } + public ScooterPreferences scooter() { + return scooter == null ? original.scooter : scooter; + } + + public Builder withScooter(Consumer body) { + this.scooter = ifNotNull(this.scooter, original.scooter).copyOf().apply(body).build(); + return this; + } + public SystemPreferences system() { return system == null ? original.system : system; } diff --git a/src/main/java/org/opentripplanner/routing/api/request/preference/ScooterPreferences.java b/src/main/java/org/opentripplanner/routing/api/request/preference/ScooterPreferences.java new file mode 100644 index 00000000000..1d5cf83a54b --- /dev/null +++ b/src/main/java/org/opentripplanner/routing/api/request/preference/ScooterPreferences.java @@ -0,0 +1,203 @@ +package org.opentripplanner.routing.api.request.preference; + +import static org.opentripplanner.framework.lang.DoubleUtils.doubleEquals; +import static org.opentripplanner.framework.lang.ObjectUtils.ifNotNull; +import static org.opentripplanner.routing.core.VehicleRoutingOptimizeType.SAFE_STREETS; +import static org.opentripplanner.routing.core.VehicleRoutingOptimizeType.TRIANGLE; + +import java.io.Serializable; +import java.util.Objects; +import java.util.function.Consumer; +import org.opentripplanner.framework.model.Units; +import org.opentripplanner.framework.tostring.ToStringBuilder; +import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; + +/** + * The scooter preferences contain all speed, reluctance, cost and factor preferences for scooter + * related to street and transit routing. The values are normalized(rounded) so the class can used + * as a cache key. + * + * Only Scooter rental is supported currently. + *

    + * THIS CLASS IS IMMUTABLE AND THREAD-SAFE. + */ +public final class ScooterPreferences implements Serializable { + + public static final ScooterPreferences DEFAULT = new ScooterPreferences(); + + private final double speed; + private final double reluctance; + private final VehicleRentalPreferences rental; + private final VehicleRoutingOptimizeType optimizeType; + private final TimeSlopeSafetyTriangle optimizeTriangle; + + private ScooterPreferences() { + this.speed = 5; + this.reluctance = 2.0; + this.rental = VehicleRentalPreferences.DEFAULT; + this.optimizeType = SAFE_STREETS; + this.optimizeTriangle = TimeSlopeSafetyTriangle.DEFAULT; + } + + private ScooterPreferences(Builder builder) { + this.speed = Units.speed(builder.speed); + this.reluctance = Units.reluctance(builder.reluctance); + this.rental = builder.rental; + this.optimizeType = Objects.requireNonNull(builder.optimizeType); + this.optimizeTriangle = Objects.requireNonNull(builder.optimizeTriangle); + } + + public static ScooterPreferences.Builder of() { + return new Builder(DEFAULT); + } + + public ScooterPreferences.Builder copyOf() { + return new Builder(this); + } + + /** + * Default: 5 m/s, ~11 mph, a random scooter speed + */ + public double speed() { + return speed; + } + + public double reluctance() { + return reluctance; + } + + /** Rental preferences that can be different per request */ + public VehicleRentalPreferences rental() { + return rental; + } + + /** + * The set of characteristics that the user wants to optimize for -- defaults to SAFE_STREETS. + */ + public VehicleRoutingOptimizeType optimizeType() { + return optimizeType; + } + + public TimeSlopeSafetyTriangle optimizeTriangle() { + return optimizeTriangle; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + ScooterPreferences that = (ScooterPreferences) o; + return ( + doubleEquals(that.speed, speed) && + doubleEquals(that.reluctance, reluctance) && + Objects.equals(rental, that.rental) && + optimizeType == that.optimizeType && + optimizeTriangle.equals(that.optimizeTriangle) + ); + } + + @Override + public int hashCode() { + return Objects.hash(speed, reluctance, rental, optimizeType, optimizeTriangle); + } + + @Override + public String toString() { + return ToStringBuilder + .of(ScooterPreferences.class) + .addNum("speed", speed, DEFAULT.speed) + .addNum("reluctance", reluctance, DEFAULT.reluctance) + .addObj("rental", rental, DEFAULT.rental) + .addEnum("optimizeType", optimizeType, DEFAULT.optimizeType) + .addObj("optimizeTriangle", optimizeTriangle, DEFAULT.optimizeTriangle) + .toString(); + } + + @SuppressWarnings("UnusedReturnValue") + public static class Builder { + + private final ScooterPreferences original; + private double speed; + private double reluctance; + private VehicleRentalPreferences rental; + private VehicleRoutingOptimizeType optimizeType; + private TimeSlopeSafetyTriangle optimizeTriangle; + + public Builder(ScooterPreferences original) { + this.original = original; + this.speed = original.speed; + this.reluctance = original.reluctance; + this.rental = original.rental; + this.optimizeType = original.optimizeType; + this.optimizeTriangle = original.optimizeTriangle; + } + + public ScooterPreferences original() { + return original; + } + + public double speed() { + return speed; + } + + public Builder withSpeed(double speed) { + this.speed = speed; + return this; + } + + public double reluctance() { + return reluctance; + } + + public Builder withReluctance(double reluctance) { + this.reluctance = reluctance; + return this; + } + + public Builder withRental(Consumer body) { + this.rental = ifNotNull(this.rental, original.rental).copyOf().apply(body).build(); + return this; + } + + public VehicleRoutingOptimizeType optimizeType() { + return optimizeType; + } + + public Builder withOptimizeType(VehicleRoutingOptimizeType optimizeType) { + this.optimizeType = optimizeType; + return this; + } + + public TimeSlopeSafetyTriangle optimizeTriangle() { + return optimizeTriangle; + } + + /** This also sets the optimization type as TRIANGLE if triangle parameters are defined */ + public Builder withForcedOptimizeTriangle(Consumer body) { + var builder = TimeSlopeSafetyTriangle.of(); + body.accept(builder); + this.optimizeTriangle = builder.buildOrDefault(this.optimizeTriangle); + if (!builder.isEmpty()) { + this.optimizeType = TRIANGLE; + } + return this; + } + + public Builder withOptimizeTriangle(Consumer body) { + var builder = TimeSlopeSafetyTriangle.of(); + body.accept(builder); + this.optimizeTriangle = builder.buildOrDefault(this.optimizeTriangle); + return this; + } + + public Builder apply(Consumer body) { + body.accept(this); + return this; + } + + public ScooterPreferences build() { + var value = new ScooterPreferences(this); + return original.equals(value) ? original : value; + } + } +} diff --git a/src/main/java/org/opentripplanner/routing/api/request/preference/TimeSlopeSafetyTriangle.java b/src/main/java/org/opentripplanner/routing/api/request/preference/TimeSlopeSafetyTriangle.java index 99925a441fd..ae4f1039f32 100644 --- a/src/main/java/org/opentripplanner/routing/api/request/preference/TimeSlopeSafetyTriangle.java +++ b/src/main/java/org/opentripplanner/routing/api/request/preference/TimeSlopeSafetyTriangle.java @@ -4,13 +4,14 @@ import static org.opentripplanner.framework.lang.DoubleUtils.roundTo2Decimals; /** - * Sets the (bicycle) triangle routing parameters -- the relative importance of safety, flatness, - * and speed. These three fields should have values between 0 and 1, and should add up to 1. + * Sets the (bicycle or scooter) triangle routing parameters -- the relative importance of safety, + * flatness, and speed. These three fields should have values between 0 and 1, and should add up to + * 1. *

    * The constructor accepts any three numbers and will normalize them to add up to 1. {@code time} * and {@code slope} are rounded to the closest two decimal number, then - * {@code safety := 1.0 - (time + slope)}. This is done to make the rounding predictable and - * to allways add up to one. This allows this class to be used in an index of a cache. For example: + * {@code safety := 1.0 - (time + slope)}. This is done to make the rounding predictable and to + * allways add up to one. This allows this class to be used in an index of a cache. For example: *

      *   ( 1.0, 1.0, 1.0 ) => ( time: 0.33, slope: 0.33, safety: 0.34 )
      * 
    @@ -25,10 +26,10 @@ public record TimeSlopeSafetyTriangle(double time, double slope, double safety) public static final TimeSlopeSafetyTriangle DEFAULT = new TimeSlopeSafetyTriangle(1, 1, 1); /** - * Sets the bicycle triangle routing parameters -- the relative importance of safety, flatness, - * and speed. These three fields of the RouteRequest should have values between 0 and 1, and - * should add up to 1. This setter function accepts any three numbers and will normalize them to - * add up to 1. + * Sets the bicycle or scooter triangle routing parameters -- the relative importance of safety, + * flatness, and speed. These three fields of the RouteRequest should have values between 0 and 1, + * and should add up to 1. This setter function accepts any three numbers and will normalize them + * to add up to 1. */ public TimeSlopeSafetyTriangle(double time, double slope, double safety) { safety = positiveValueOrZero(safety); diff --git a/src/main/java/org/opentripplanner/routing/core/BicycleOptimizeType.java b/src/main/java/org/opentripplanner/routing/core/VehicleRoutingOptimizeType.java similarity index 52% rename from src/main/java/org/opentripplanner/routing/core/BicycleOptimizeType.java rename to src/main/java/org/opentripplanner/routing/core/VehicleRoutingOptimizeType.java index 1d639e0af8b..cb8436b83b3 100644 --- a/src/main/java/org/opentripplanner/routing/core/BicycleOptimizeType.java +++ b/src/main/java/org/opentripplanner/routing/core/VehicleRoutingOptimizeType.java @@ -5,10 +5,10 @@ import java.util.Set; /** - * When planning a bicycle route what should be optimized for. Optimize types are basically - * combined presets of routing parameters, except for triangle. + * When planning a bicycle or scooter route what should be optimized for. Optimize types are + * basically combined presets of routing parameters, except for triangle. */ -public enum BicycleOptimizeType { +public enum VehicleRoutingOptimizeType { /** This was previously called QUICK */ SHORTEST_DURATION, /** This was previously called SAFE */ @@ -19,14 +19,14 @@ public enum BicycleOptimizeType { SAFEST_STREETS, TRIANGLE; - private static final Set NON_TRIANGLE_VALUES = Collections.unmodifiableSet( + private static final Set NON_TRIANGLE_VALUES = Collections.unmodifiableSet( EnumSet.complementOf(EnumSet.of(TRIANGLE)) ); /** - * Return all values that are not {@link BicycleOptimizeType#TRIANGLE}. + * Return all values that are not {@link VehicleRoutingOptimizeType#TRIANGLE}. */ - public static Set nonTriangleValues() { + public static Set nonTriangleValues() { return NON_TRIANGLE_VALUES; } } diff --git a/src/main/java/org/opentripplanner/routing/graph/SerializedGraphObject.java b/src/main/java/org/opentripplanner/routing/graph/SerializedGraphObject.java index 690c4c7e821..b2404adc5d1 100644 --- a/src/main/java/org/opentripplanner/routing/graph/SerializedGraphObject.java +++ b/src/main/java/org/opentripplanner/routing/graph/SerializedGraphObject.java @@ -30,6 +30,7 @@ import org.opentripplanner.service.worldenvelope.WorldEnvelopeRepository; import org.opentripplanner.standalone.config.BuildConfig; import org.opentripplanner.standalone.config.RouterConfig; +import org.opentripplanner.street.model.StreetLimitationParameters; import org.opentripplanner.street.model.edge.Edge; import org.opentripplanner.street.model.vertex.Vertex; import org.opentripplanner.transit.model.basic.SubMode; @@ -77,6 +78,7 @@ public class SerializedGraphObject implements Serializable { public final StopConsolidationRepository stopConsolidationRepository; private final int routingTripPatternCounter; public final EmissionsDataModel emissionsDataModel; + public final StreetLimitationParameters streetLimitationParameters; public SerializedGraphObject( Graph graph, @@ -86,7 +88,8 @@ public SerializedGraphObject( RouterConfig routerConfig, DataImportIssueSummary issueSummary, EmissionsDataModel emissionsDataModel, - StopConsolidationRepository stopConsolidationRepository + StopConsolidationRepository stopConsolidationRepository, + StreetLimitationParameters streetLimitationParameters ) { this.graph = graph; this.edges = graph.getEdges(); @@ -99,6 +102,7 @@ public SerializedGraphObject( this.allTransitSubModes = SubMode.listAllCachedSubModes(); this.routingTripPatternCounter = RoutingTripPattern.indexCounter(); this.stopConsolidationRepository = stopConsolidationRepository; + this.streetLimitationParameters = streetLimitationParameters; } public static void verifyTheOutputGraphIsWritableIfDataSourceExist(DataSource graphOutput) { diff --git a/src/main/java/org/opentripplanner/routing/impl/GraphPathFinder.java b/src/main/java/org/opentripplanner/routing/impl/GraphPathFinder.java index 0e47901dcef..d8de0332238 100644 --- a/src/main/java/org/opentripplanner/routing/impl/GraphPathFinder.java +++ b/src/main/java/org/opentripplanner/routing/impl/GraphPathFinder.java @@ -15,6 +15,7 @@ import org.opentripplanner.routing.api.request.RouteRequest; import org.opentripplanner.routing.api.request.preference.StreetPreferences; import org.opentripplanner.routing.error.PathNotFoundException; +import org.opentripplanner.street.model.StreetConstants; import org.opentripplanner.street.model.edge.Edge; import org.opentripplanner.street.model.vertex.Vertex; import org.opentripplanner.street.search.StreetSearchBuilder; @@ -56,16 +57,20 @@ public class GraphPathFinder { private final DataOverlayContext dataOverlayContext; + private final float maxCarSpeed; + public GraphPathFinder(@Nullable TraverseVisitor traverseVisitor) { - this(traverseVisitor, null); + this(traverseVisitor, null, StreetConstants.DEFAULT_MAX_CAR_SPEED); } public GraphPathFinder( @Nullable TraverseVisitor traverseVisitor, - @Nullable DataOverlayContext dataOverlayContext + @Nullable DataOverlayContext dataOverlayContext, + float maxCarSpeed ) { this.traverseVisitor = traverseVisitor; this.dataOverlayContext = dataOverlayContext; + this.maxCarSpeed = maxCarSpeed; } /** @@ -81,7 +86,7 @@ public List> getPaths( StreetSearchBuilder aStar = StreetSearchBuilder .of() - .setHeuristic(new EuclideanRemainingWeightHeuristic()) + .setHeuristic(new EuclideanRemainingWeightHeuristic(maxCarSpeed)) .setSkipEdgeStrategy( new DurationSkipEdgeStrategy( preferences.maxDirectDuration().valueOf(request.journey().direct().mode()) diff --git a/src/main/java/org/opentripplanner/service/vehiclerental/street/StreetVehicleRentalLink.java b/src/main/java/org/opentripplanner/service/vehiclerental/street/StreetVehicleRentalLink.java index 4a18aae03c2..385b347d24a 100644 --- a/src/main/java/org/opentripplanner/service/vehiclerental/street/StreetVehicleRentalLink.java +++ b/src/main/java/org/opentripplanner/service/vehiclerental/street/StreetVehicleRentalLink.java @@ -53,7 +53,10 @@ public State[] traverse(State s0) { } var preferences = s0.getPreferences().rental(s0.getRequest().mode()); - if (vehicleRentalPlaceVertex.getStation().networkIsNotAllowed(preferences)) { + // preferences will be null while finding nearest places with WALK mode + if ( + preferences != null && vehicleRentalPlaceVertex.getStation().networkIsNotAllowed(preferences) + ) { return State.empty(); } diff --git a/src/main/java/org/opentripplanner/standalone/OTPMain.java b/src/main/java/org/opentripplanner/standalone/OTPMain.java index eef7415644d..c2adc1d9db2 100644 --- a/src/main/java/org/opentripplanner/standalone/OTPMain.java +++ b/src/main/java/org/opentripplanner/standalone/OTPMain.java @@ -156,7 +156,8 @@ private static void startOTPServer(CommandLineParameters cli) { config.routerConfig(), DataImportIssueSummary.combine(graphBuilder.issueSummary(), app.dataImportIssueSummary()), app.emissionsDataModel(), - app.stopConsolidationRepository() + app.stopConsolidationRepository(), + app.streetLimitationParameters() ) .save(app.graphOutputDataSource()); // Log size info for the deduplicator diff --git a/src/main/java/org/opentripplanner/standalone/api/OtpServerRequestContext.java b/src/main/java/org/opentripplanner/standalone/api/OtpServerRequestContext.java index bbc6733a40c..1adebc6a90e 100644 --- a/src/main/java/org/opentripplanner/standalone/api/OtpServerRequestContext.java +++ b/src/main/java/org/opentripplanner/standalone/api/OtpServerRequestContext.java @@ -26,6 +26,7 @@ import org.opentripplanner.standalone.config.sandbox.FlexConfig; import org.opentripplanner.street.model.edge.Edge; import org.opentripplanner.street.search.state.State; +import org.opentripplanner.street.service.StreetLimitationParametersService; import org.opentripplanner.transit.service.TransitService; /** @@ -98,6 +99,8 @@ public interface OtpServerRequestContext { @Nullable StopConsolidationService stopConsolidationService(); + StreetLimitationParametersService streetLimitationParametersService(); + MeterRegistry meterRegistry(); @Nullable diff --git a/src/main/java/org/opentripplanner/standalone/config/BuildConfig.java b/src/main/java/org/opentripplanner/standalone/config/BuildConfig.java index b6912488173..1019a945c58 100644 --- a/src/main/java/org/opentripplanner/standalone/config/BuildConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/BuildConfig.java @@ -17,6 +17,7 @@ import java.util.Set; import java.util.regex.Pattern; import javax.annotation.Nonnull; +import javax.annotation.Nullable; import org.opentripplanner.datastore.api.OtpDataStoreConfig; import org.opentripplanner.ext.dataoverlay.configuration.DataOverlayConfig; import org.opentripplanner.ext.emissions.EmissionsConfig; @@ -182,7 +183,7 @@ public class BuildConfig implements OtpDataStoreConfig { public final LocalDate transitServiceEnd; public final ZoneId transitModelTimeZone; - public final String stopConsolidationFile; + public final URI stopConsolidation; /** * Set all parameters from the given Jackson JSON tree, applying defaults. Supplying @@ -602,14 +603,14 @@ that we support remote input files (cloud storage or arbitrary URLs) not all dat ) .asUri(null); - stopConsolidationFile = + stopConsolidation = root .of("stopConsolidationFile") .since(V2_5) .summary( "Name of the CSV-formatted file in the build directory which contains the configuration for stop consolidation." ) - .asString(null); + .asUri(null); osmDefaults = OsmConfig.mapOsmDefaults(root, "osmDefaults"); osm = OsmConfig.mapOsmConfig(root, "osm", osmDefaults); @@ -676,6 +677,12 @@ public URI streetGraph() { return streetGraph; } + @Override + @Nullable + public URI stopConsolidation() { + return stopConsolidation; + } + @Override public Pattern gtfsLocalFilePattern() { return gtfsLocalFilePattern; diff --git a/src/main/java/org/opentripplanner/standalone/config/routerconfig/VectorTileConfig.java b/src/main/java/org/opentripplanner/standalone/config/routerconfig/VectorTileConfig.java index 6f7d6967ce8..96cd49b72bb 100644 --- a/src/main/java/org/opentripplanner/standalone/config/routerconfig/VectorTileConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/routerconfig/VectorTileConfig.java @@ -18,18 +18,23 @@ public class VectorTileConfig implements VectorTilesResource.LayersParameters { - public static final VectorTileConfig DEFAULT = new VectorTileConfig(List.of(), null); + public static final VectorTileConfig DEFAULT = new VectorTileConfig(List.of(), null, null); private final List> layers; @Nullable private final String basePath; + @Nullable + private final String attribution; + VectorTileConfig( Collection> layers, - @Nullable String basePath + @Nullable String basePath, + @Nullable String attribution ) { this.layers = List.copyOf(layers); this.basePath = basePath; + this.attribution = attribution; } @Override @@ -41,6 +46,10 @@ public Optional basePath() { return Optional.ofNullable(basePath); } + public Optional attribution() { + return Optional.ofNullable(attribution); + } + public static VectorTileConfig mapVectorTilesParameters(NodeAdapter node, String paramName) { var root = node.of(paramName).summary("Vector tile configuration").asObject(); return new VectorTileConfig( @@ -71,7 +80,23 @@ public static VectorTileConfig mapVectorTilesParameters(NodeAdapter node, String is expected to be handled by a proxy. """ ) - .asString(DEFAULT.basePath) + .asString(DEFAULT.basePath), + root + .of("attribution") + .since(V2_5) + .summary("Custom attribution to be returned in `tilejson.json`") + .description( + """ + By default the, `attribution` property in `tilejson.json` is computed from the names and + URLs of the feed publishers. + If the OTP deployment contains many feeds, this can become very unwieldy. + + This configuration parameter allows you to set the `attribution` to any string you wish + including HTML tags, + for example `Regional Partners`. + """ + ) + .asString(DEFAULT.attribution) ); } diff --git a/src/main/java/org/opentripplanner/standalone/config/routerconfig/updaters/VehicleParkingUpdaterConfig.java b/src/main/java/org/opentripplanner/standalone/config/routerconfig/updaters/VehicleParkingUpdaterConfig.java index 1ac2dbf72e0..e808ad6905c 100644 --- a/src/main/java/org/opentripplanner/standalone/config/routerconfig/updaters/VehicleParkingUpdaterConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/routerconfig/updaters/VehicleParkingUpdaterConfig.java @@ -66,7 +66,7 @@ public static VehicleParkingUpdaterParameters create(String updaterRef, NodeAdap ); case BIKELY -> new BikelyUpdaterParameters( updaterRef, - c.of("url").since(V2_3).summary("URL of the locations endpoint.").asString(null), + c.of("url").since(V2_3).summary("URL of the locations endpoint.").asUri(null), feedId, c .of("frequency") diff --git a/src/main/java/org/opentripplanner/standalone/config/routerconfig/updaters/azure/SiriAzureETUpdaterConfig.java b/src/main/java/org/opentripplanner/standalone/config/routerconfig/updaters/azure/SiriAzureETUpdaterConfig.java index 80615acb9b2..791f9a9dadc 100644 --- a/src/main/java/org/opentripplanner/standalone/config/routerconfig/updaters/azure/SiriAzureETUpdaterConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/routerconfig/updaters/azure/SiriAzureETUpdaterConfig.java @@ -1,6 +1,7 @@ package org.opentripplanner.standalone.config.routerconfig.updaters.azure; import static org.opentripplanner.standalone.config.framework.json.OtpVersion.NA; +import static org.opentripplanner.standalone.config.framework.json.OtpVersion.V2_2; import org.opentripplanner.ext.siri.updater.azure.SiriAzureETUpdaterParameters; import org.opentripplanner.standalone.config.framework.json.NodeAdapter; @@ -14,13 +15,26 @@ public static SiriAzureETUpdaterParameters create(String configRef, NodeAdapter if (c.exist("history")) { NodeAdapter history = c .of("history") - .since(NA) - .summary("TODO") - .description(/*TODO DOC*/"TODO") + .since(V2_2) + .summary("Configuration for fetching historical data on startup") .asObject(); - String fromDateTime = history.of("fromDateTime").since(NA).summary("TODO").asString("-P1D"); - int customMidnight = c.of("customMidnight").since(NA).summary("TODO").asInt(0); + String fromDateTime = history + .of("fromDateTime") + .since(V2_2) + .summary("Datetime boundary for historical data") + .asString("-P1D"); + + int customMidnight = c + .of("customMidnight") + .since(V2_2) + .summary("Time on which time breaks into new day.") + .description( + "It is common that operating day date breaks a little bit later than midnight so " + + "that the switch happens when traffic is at the lowest point. Parameter uses 24-hour format. " + + "If the switch happens on 4 am then set this field to 4." + ) + .asInt(0); parameters.setFromDateTime(asDateOrRelativePeriod(fromDateTime, customMidnight)); } diff --git a/src/main/java/org/opentripplanner/standalone/config/routerconfig/updaters/azure/SiriAzureSXUpdaterConfig.java b/src/main/java/org/opentripplanner/standalone/config/routerconfig/updaters/azure/SiriAzureSXUpdaterConfig.java index 7d63657caf8..cf5dacb5976 100644 --- a/src/main/java/org/opentripplanner/standalone/config/routerconfig/updaters/azure/SiriAzureSXUpdaterConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/routerconfig/updaters/azure/SiriAzureSXUpdaterConfig.java @@ -1,6 +1,7 @@ package org.opentripplanner.standalone.config.routerconfig.updaters.azure; import static org.opentripplanner.standalone.config.framework.json.OtpVersion.NA; +import static org.opentripplanner.standalone.config.framework.json.OtpVersion.V2_2; import org.opentripplanner.ext.siri.updater.azure.SiriAzureSXUpdaterParameters; import org.opentripplanner.standalone.config.framework.json.NodeAdapter; @@ -14,14 +15,32 @@ public static SiriAzureSXUpdaterParameters create(String configRef, NodeAdapter if (c.exist("history")) { NodeAdapter history = c .of("history") - .since(NA) - .summary("TODO") - .description(/*TODO DOC*/"TODO") + .since(V2_2) + .summary("Configuration for fetching historical data on startup.") .asObject(); - String fromDateTime = history.of("fromDateTime").since(NA).summary("TODO").asString("-P1D"); - String toDateTime = history.of("toDateTime").since(NA).summary("TODO").asString("P1D"); - int customMidnight = c.of("customMidnight").since(NA).summary("TODO").asInt(0); + String fromDateTime = history + .of("fromDateTime") + .since(V2_2) + .summary("Datetime boundary for historical data.") + .asString("-P1D"); + + String toDateTime = history + .of("toDateTime") + .since(V2_2) + .summary("Datetime boundary for historical data.") + .asString("P1D"); + + int customMidnight = c + .of("customMidnight") + .since(V2_2) + .summary("Time on which time breaks into new day.") + .description( + "It is common that operating day date breaks a little bit later than midnight so " + + "that the switch happens when traffic is at the lowest point. Parameter uses 24-hour format. " + + "If the switch happens on 4 am then set this field to 4." + ) + .asInt(0); parameters.setFromDateTime(asDateOrRelativePeriod(fromDateTime, customMidnight)); parameters.setToDateTime(asDateOrRelativePeriod(toDateTime, customMidnight)); diff --git a/src/main/java/org/opentripplanner/standalone/config/routerconfig/updaters/azure/SiriAzureUpdaterConfig.java b/src/main/java/org/opentripplanner/standalone/config/routerconfig/updaters/azure/SiriAzureUpdaterConfig.java index 319b2d45001..35da716337e 100644 --- a/src/main/java/org/opentripplanner/standalone/config/routerconfig/updaters/azure/SiriAzureUpdaterConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/routerconfig/updaters/azure/SiriAzureUpdaterConfig.java @@ -1,12 +1,15 @@ package org.opentripplanner.standalone.config.routerconfig.updaters.azure; import static org.opentripplanner.standalone.config.framework.json.OtpVersion.NA; +import static org.opentripplanner.standalone.config.framework.json.OtpVersion.V2_2; +import static org.opentripplanner.standalone.config.framework.json.OtpVersion.V2_5; import java.time.LocalDate; import java.time.Period; import java.time.ZoneId; import java.time.ZonedDateTime; import java.time.format.DateTimeParseException; +import org.opentripplanner.ext.siri.updater.azure.AuthenticationType; import org.opentripplanner.ext.siri.updater.azure.SiriAzureUpdaterParameters; import org.opentripplanner.standalone.config.framework.json.NodeAdapter; @@ -18,24 +21,61 @@ public static void populateConfig( NodeAdapter c ) { parameters.setConfigRef(configRef); - parameters.setServiceBusUrl(c.of("servicebus-url").since(NA).summary("TODO").asString(null)); - parameters.setTopicName(c.of("topic").since(NA).summary("TODO").asString(null)); - parameters.setFeedId(c.of("feedId").since(NA).summary("TODO").asString(null)); + parameters.setServiceBusUrl( + c + .of("servicebus-url") + .since(V2_2) + .summary("Service Bus connection used for authentication.") + .description( + "Has to be present for authenticationMethod SharedAccessKey. This should be Primary/Secondary connection string from service bus." + ) + .asString(null) + ); + parameters.setTopicName( + c.of("topic").since(V2_2).summary("Service Bus topic to connect to.").asString(null) + ); + parameters.setFeedId( + c + .of("feedId") + .since(V2_2) + .summary("The ID of the feed to apply the updates to.") + .asString(null) + ); parameters.setFuzzyTripMatching( - c.of("fuzzyTripMatching").since(NA).summary("TODO").asBoolean(false) + c + .of("fuzzyTripMatching") + .since(V2_2) + .summary("Whether to apply fuzzyTripMatching on the updates") + .asBoolean(false) + ); + parameters.setFullyQualifiedNamespace( + c + .of("fullyQualifiedNamespace") + .since(V2_5) + .summary("Service Bus fully qualified namespace used for authentication.") + .description("Has to be present for authenticationMethod FederatedIdentity.") + .asString(null) + ); + parameters.setAuthenticationType( + c + .of("authenticationType") + .since(V2_5) + .summary("Which authentication type to use") + .asEnum(AuthenticationType.SharedAccessKey) ); if (c.exist("history")) { NodeAdapter history = c .of("history") - .since(NA) - .summary("TODO") - .description(/*TODO DOC*/"TODO") + .since(V2_2) + .summary("Configuration for fetching historical data on startup") .asObject(); parameters.setDataInitializationUrl( - history.of("url").since(NA).summary("TODO").asString(null) + history.of("url").since(NA).summary("Endpoint to fetch from").asString(null) + ); + parameters.setTimeout( + history.of("timeout").since(NA).summary("Timeout in milliseconds").asInt(300000) ); - parameters.setTimeout(history.of("timeout").since(NA).summary("TODO").asInt(300000)); } } diff --git a/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java b/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java index c4b0b0bd8cb..628008da220 100644 --- a/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java @@ -28,6 +28,7 @@ import org.opentripplanner.routing.api.request.preference.BikePreferences; import org.opentripplanner.routing.api.request.preference.CarPreferences; import org.opentripplanner.routing.api.request.preference.RoutingPreferences; +import org.opentripplanner.routing.api.request.preference.ScooterPreferences; import org.opentripplanner.routing.api.request.preference.StreetPreferences; import org.opentripplanner.routing.api.request.preference.SystemPreferences; import org.opentripplanner.routing.api.request.preference.TransitPreferences; @@ -185,6 +186,7 @@ private static void mapPreferences(NodeAdapter c, RoutingPreferences.Builder pre preferences.withBike(it -> mapBikePreferences(c, it)); preferences.withStreet(it -> mapStreetPreferences(c, it)); preferences.withCar(it -> mapCarPreferences(c, it)); + preferences.withScooter(it -> mapScooterPreferences(c, it)); preferences.withSystem(it -> mapSystemPreferences(c, it)); preferences.withTransfer(it -> mapTransferPreferences(c, it)); preferences.withWalk(it -> mapWalkPreferences(c, it)); @@ -595,13 +597,6 @@ private static void mapCarPreferences(NodeAdapter root, CarPreferences.Builder b var dft = builder.original(); NodeAdapter c = root.of("car").since(V2_5).summary("Car preferences.").asObject(); builder - .withSpeed( - c - .of("speed") - .since(V2_0) - .summary("Max car speed along streets, in meters per second") - .asDouble(dft.speed()) - ) .withReluctance( c .of("reluctance") @@ -643,6 +638,41 @@ private static void mapCarPreferences(NodeAdapter root, CarPreferences.Builder b .withRental(it -> mapRental(c, it)); } + private static void mapScooterPreferences(NodeAdapter root, ScooterPreferences.Builder builder) { + var dft = builder.original(); + NodeAdapter c = root.of("scooter").since(V2_5).summary("Scooter preferences.").asObject(); + builder + .withSpeed( + c + .of("speed") + .since(V2_0) + .summary("Max scooter speed along streets, in meters per second") + .asDouble(dft.speed()) + ) + .withReluctance( + c + .of("reluctance") + .since(V2_0) + .summary( + "A multiplier for how bad scooter travel is, compared to being in transit for equal lengths of time." + ) + .asDouble(dft.reluctance()) + ) + .withOptimizeType( + c + .of("optimization") + .since(V2_0) + .summary("The set of characteristics that the user wants to optimize for.") + .description( + "If the triangle optimization is used, it's enough to just define the triangle parameters" + ) + .asEnum(dft.optimizeType()) + ) + // triangle overrides the optimization type if defined + .withForcedOptimizeTriangle(it -> mapOptimizationTriangle(c, it)) + .withRental(it -> mapRental(c, it)); + } + private static void mapSystemPreferences(NodeAdapter c, SystemPreferences.Builder builder) { var dft = builder.original(); builder diff --git a/src/main/java/org/opentripplanner/standalone/configure/ConstructApplication.java b/src/main/java/org/opentripplanner/standalone/configure/ConstructApplication.java index 487e8489128..72a46254b58 100644 --- a/src/main/java/org/opentripplanner/standalone/configure/ConstructApplication.java +++ b/src/main/java/org/opentripplanner/standalone/configure/ConstructApplication.java @@ -31,6 +31,7 @@ import org.opentripplanner.standalone.config.RouterConfig; import org.opentripplanner.standalone.server.GrizzlyServer; import org.opentripplanner.standalone.server.OTPWebApplication; +import org.opentripplanner.street.model.StreetLimitationParameters; import org.opentripplanner.street.model.elevation.ElevationUtils; import org.opentripplanner.transit.service.TransitModel; import org.opentripplanner.updater.configure.UpdaterConfigurator; @@ -74,7 +75,8 @@ public class ConstructApplication { GraphBuilderDataSources graphBuilderDataSources, DataImportIssueSummary issueSummary, EmissionsDataModel emissionsDataModel, - @Nullable StopConsolidationRepository stopConsolidationRepository + @Nullable StopConsolidationRepository stopConsolidationRepository, + StreetLimitationParameters streetLimitationParameters ) { this.cli = cli; this.graphBuilderDataSources = graphBuilderDataSources; @@ -94,6 +96,7 @@ public class ConstructApplication { .emissionsDataModel(emissionsDataModel) .dataImportIssueSummary(issueSummary) .stopConsolidationRepository(stopConsolidationRepository) + .streetLimitationParameters(streetLimitationParameters) .build(); } @@ -126,6 +129,7 @@ public GraphBuilder createGraphBuilder() { factory.worldEnvelopeRepository(), factory.emissionsDataModel(), factory.stopConsolidationRepository(), + factory.streetLimitationParameters(), cli.doLoadStreetGraph(), cli.doSaveStreetGraph() ); @@ -304,4 +308,8 @@ private void createMetricsLogging() { public EmissionsDataModel emissionsDataModel() { return factory.emissionsDataModel(); } + + public StreetLimitationParameters streetLimitationParameters() { + return factory.streetLimitationParameters(); + } } diff --git a/src/main/java/org/opentripplanner/standalone/configure/ConstructApplicationFactory.java b/src/main/java/org/opentripplanner/standalone/configure/ConstructApplicationFactory.java index a4f0ee49652..4e9f50607ac 100644 --- a/src/main/java/org/opentripplanner/standalone/configure/ConstructApplicationFactory.java +++ b/src/main/java/org/opentripplanner/standalone/configure/ConstructApplicationFactory.java @@ -29,6 +29,8 @@ import org.opentripplanner.standalone.config.ConfigModel; import org.opentripplanner.standalone.config.configure.ConfigModule; import org.opentripplanner.standalone.server.MetricsLogging; +import org.opentripplanner.street.model.StreetLimitationParameters; +import org.opentripplanner.street.service.StreetLimitationParametersServiceModule; import org.opentripplanner.transit.configure.TransitModule; import org.opentripplanner.transit.service.TransitModel; import org.opentripplanner.transit.service.TransitService; @@ -52,6 +54,7 @@ EmissionsServiceModule.class, StopConsolidationServiceModule.class, InteractiveLauncherModule.class, + StreetLimitationParametersServiceModule.class, } ) public interface ConstructApplicationFactory { @@ -81,6 +84,8 @@ public interface ConstructApplicationFactory { @Nullable StopConsolidationRepository stopConsolidationRepository(); + StreetLimitationParameters streetLimitationParameters(); + @Component.Builder interface Builder { @BindsInstance @@ -109,6 +114,9 @@ Builder stopConsolidationRepository( @BindsInstance Builder emissionsDataModel(EmissionsDataModel emissionsDataModel); + @BindsInstance + Builder streetLimitationParameters(StreetLimitationParameters streetLimitationParameters); + ConstructApplicationFactory build(); } } diff --git a/src/main/java/org/opentripplanner/standalone/configure/ConstructApplicationModule.java b/src/main/java/org/opentripplanner/standalone/configure/ConstructApplicationModule.java index 5d8efcd3a5b..93158f87cff 100644 --- a/src/main/java/org/opentripplanner/standalone/configure/ConstructApplicationModule.java +++ b/src/main/java/org/opentripplanner/standalone/configure/ConstructApplicationModule.java @@ -19,6 +19,7 @@ import org.opentripplanner.standalone.api.OtpServerRequestContext; import org.opentripplanner.standalone.config.RouterConfig; import org.opentripplanner.standalone.server.DefaultServerRequestContext; +import org.opentripplanner.street.service.StreetLimitationParametersService; import org.opentripplanner.transit.service.TransitService; import org.opentripplanner.visualizer.GraphVisualizer; @@ -36,6 +37,7 @@ OtpServerRequestContext providesServerContext( VehicleRentalService vehicleRentalService, List rideHailingServices, @Nullable StopConsolidationService stopConsolidationService, + StreetLimitationParametersService streetLimitationParametersService, @Nullable TraverseVisitor traverseVisitor, EmissionsService emissionsService, LauncherRequestDecorator launcherRequestDecorator @@ -57,6 +59,7 @@ OtpServerRequestContext providesServerContext( routerConfig.flexConfig(), rideHailingServices, stopConsolidationService, + streetLimitationParametersService, traverseVisitor ); } diff --git a/src/main/java/org/opentripplanner/standalone/configure/LoadApplication.java b/src/main/java/org/opentripplanner/standalone/configure/LoadApplication.java index f22c5ab80ec..19415e489b4 100644 --- a/src/main/java/org/opentripplanner/standalone/configure/LoadApplication.java +++ b/src/main/java/org/opentripplanner/standalone/configure/LoadApplication.java @@ -11,6 +11,7 @@ import org.opentripplanner.service.worldenvelope.WorldEnvelopeRepository; import org.opentripplanner.standalone.config.CommandLineParameters; import org.opentripplanner.standalone.config.ConfigModel; +import org.opentripplanner.street.model.StreetLimitationParameters; import org.opentripplanner.transit.service.TransitModel; /** @@ -57,7 +58,8 @@ public ConstructApplication appConstruction(SerializedGraphObject obj) { obj.worldEnvelopeRepository, obj.issueSummary, obj.emissionsDataModel, - obj.stopConsolidationRepository + obj.stopConsolidationRepository, + obj.streetLimitationParameters ); } @@ -69,7 +71,8 @@ public ConstructApplication appConstruction() { factory.emptyWorldEnvelopeRepository(), DataImportIssueSummary.empty(), factory.emptyEmissionsDataModel(), - factory.emptyStopConsolidationRepository() + factory.emptyStopConsolidationRepository(), + factory.emptyStreetLimitationParameters() ); } @@ -90,7 +93,8 @@ private ConstructApplication createAppConstruction( WorldEnvelopeRepository worldEnvelopeRepository, DataImportIssueSummary issueSummary, @Nullable EmissionsDataModel emissionsDataModel, - @Nullable StopConsolidationRepository stopConsolidationRepository + @Nullable StopConsolidationRepository stopConsolidationRepository, + StreetLimitationParameters streetLimitationParameters ) { return new ConstructApplication( cli, @@ -101,7 +105,8 @@ private ConstructApplication createAppConstruction( graphBuilderDataSources(), issueSummary, emissionsDataModel, - stopConsolidationRepository + stopConsolidationRepository, + streetLimitationParameters ); } } diff --git a/src/main/java/org/opentripplanner/standalone/configure/LoadApplicationFactory.java b/src/main/java/org/opentripplanner/standalone/configure/LoadApplicationFactory.java index ca90c613db5..aacb42c4336 100644 --- a/src/main/java/org/opentripplanner/standalone/configure/LoadApplicationFactory.java +++ b/src/main/java/org/opentripplanner/standalone/configure/LoadApplicationFactory.java @@ -16,6 +16,7 @@ import org.opentripplanner.standalone.config.CommandLineParameters; import org.opentripplanner.standalone.config.ConfigModel; import org.opentripplanner.standalone.config.configure.LoadConfigModule; +import org.opentripplanner.street.model.StreetLimitationParameters; import org.opentripplanner.transit.service.TransitModel; /** @@ -54,6 +55,9 @@ public interface LoadApplicationFactory { @Singleton StopConsolidationRepository emptyStopConsolidationRepository(); + @Singleton + StreetLimitationParameters emptyStreetLimitationParameters(); + @Component.Builder interface Builder { @BindsInstance diff --git a/src/main/java/org/opentripplanner/standalone/server/DefaultServerRequestContext.java b/src/main/java/org/opentripplanner/standalone/server/DefaultServerRequestContext.java index 9a586219ba1..019b7267015 100644 --- a/src/main/java/org/opentripplanner/standalone/server/DefaultServerRequestContext.java +++ b/src/main/java/org/opentripplanner/standalone/server/DefaultServerRequestContext.java @@ -25,6 +25,7 @@ import org.opentripplanner.standalone.config.routerconfig.TransitRoutingConfig; import org.opentripplanner.standalone.config.routerconfig.VectorTileConfig; import org.opentripplanner.standalone.config.sandbox.FlexConfig; +import org.opentripplanner.street.service.StreetLimitationParametersService; import org.opentripplanner.transit.service.TransitService; @HttpRequestScoped @@ -47,6 +48,7 @@ public class DefaultServerRequestContext implements OtpServerRequestContext { private final VehicleRentalService vehicleRentalService; private final EmissionsService emissionsService; private final StopConsolidationService stopConsolidationService; + private final StreetLimitationParametersService streetLimitationParametersService; /** * Make sure all mutable components are copied/cloned before calling this constructor. @@ -66,6 +68,7 @@ private DefaultServerRequestContext( EmissionsService emissionsService, List rideHailingServices, StopConsolidationService stopConsolidationService, + StreetLimitationParametersService streetLimitationParametersService, FlexConfig flexConfig, TraverseVisitor traverseVisitor ) { @@ -85,6 +88,7 @@ private DefaultServerRequestContext( this.rideHailingServices = rideHailingServices; this.emissionsService = emissionsService; this.stopConsolidationService = stopConsolidationService; + this.streetLimitationParametersService = streetLimitationParametersService; } /** @@ -105,6 +109,7 @@ public static DefaultServerRequestContext create( FlexConfig flexConfig, List rideHailingServices, @Nullable StopConsolidationService stopConsolidationService, + StreetLimitationParametersService streetLimitationParametersService, @Nullable TraverseVisitor traverseVisitor ) { return new DefaultServerRequestContext( @@ -122,6 +127,7 @@ public static DefaultServerRequestContext create( emissionsService, rideHailingServices, stopConsolidationService, + streetLimitationParametersService, flexConfig, traverseVisitor ); @@ -199,6 +205,11 @@ public StopConsolidationService stopConsolidationService() { return stopConsolidationService; } + @Override + public StreetLimitationParametersService streetLimitationParametersService() { + return streetLimitationParametersService; + } + @Override public MeterRegistry meterRegistry() { return meterRegistry; diff --git a/src/main/java/org/opentripplanner/street/model/StreetConstants.java b/src/main/java/org/opentripplanner/street/model/StreetConstants.java new file mode 100644 index 00000000000..e3b01d84e7a --- /dev/null +++ b/src/main/java/org/opentripplanner/street/model/StreetConstants.java @@ -0,0 +1,14 @@ +package org.opentripplanner.street.model; + +/** + * This class holds constant values related to streets. If a value is only accessed from one place, + * it's better to store it there instead of here. + */ +public class StreetConstants { + + /** + * Default car speed that is used when max car speed has not been (yet) determined from the OSM + * data. Unit is m/s and value equals to 144 km/h. + */ + public static final float DEFAULT_MAX_CAR_SPEED = 40f; +} diff --git a/src/main/java/org/opentripplanner/street/model/StreetLimitationParameters.java b/src/main/java/org/opentripplanner/street/model/StreetLimitationParameters.java new file mode 100644 index 00000000000..bc346d9264a --- /dev/null +++ b/src/main/java/org/opentripplanner/street/model/StreetLimitationParameters.java @@ -0,0 +1,32 @@ +package org.opentripplanner.street.model; + +import jakarta.inject.Inject; +import java.io.Serializable; + +/** + * Holds limits of the street graph. + *

    + * TODO this can be expanded to include some fields from the {@link org.opentripplanner.routing.graph.Graph}. + */ +public class StreetLimitationParameters implements Serializable { + + private float maxCarSpeed = StreetConstants.DEFAULT_MAX_CAR_SPEED; + + @Inject + public StreetLimitationParameters() {} + + /** + * Initiliaze the maximum speed limit in m/s. + */ + public void initMaxCarSpeed(float maxCarSpeed) { + this.maxCarSpeed = maxCarSpeed; + } + + /** + * If this graph contains car routable streets, this value is the maximum speed limit in m/s. + * Defaults to 40 m/s == 144 km/h. + */ + public float maxCarSpeed() { + return maxCarSpeed; + } +} diff --git a/src/main/java/org/opentripplanner/street/model/edge/StreetEdge.java b/src/main/java/org/opentripplanner/street/model/edge/StreetEdge.java index 1e3594ee04b..ca33396b0a3 100644 --- a/src/main/java/org/opentripplanner/street/model/edge/StreetEdge.java +++ b/src/main/java/org/opentripplanner/street/model/edge/StreetEdge.java @@ -234,8 +234,9 @@ public double calculateSpeed( case WALK -> walkingBike ? preferences.bike().walking().speed() : preferences.walk().speed(); - case BICYCLE, SCOOTER -> preferences.bike().speed(); + case BICYCLE -> preferences.bike().speed(); case CAR -> getCarSpeed(); + case SCOOTER -> preferences.scooter().speed(); case FLEX -> throw new IllegalArgumentException("getSpeed(): Invalid mode " + traverseMode); }; @@ -1098,7 +1099,7 @@ private StateEditor doTraverse(State s0, TraverseMode traverseMode, boolean walk var traversalCosts = switch (traverseMode) { - case BICYCLE, SCOOTER -> bicycleTraversalCost(preferences, speed); + case BICYCLE, SCOOTER -> bicycleOrScooterTraversalCost(preferences, traverseMode, speed); case WALK -> walkingTraversalCosts( preferences, traverseMode, @@ -1213,10 +1214,17 @@ private TraversalCosts otherTraversalCosts( } @Nonnull - private TraversalCosts bicycleTraversalCost(RoutingPreferences pref, double speed) { + private TraversalCosts bicycleOrScooterTraversalCost( + RoutingPreferences pref, + TraverseMode mode, + double speed + ) { double time = getEffectiveBikeDistance() / speed; double weight; - switch (pref.bike().optimizeType()) { + var optimizeType = mode == TraverseMode.BICYCLE + ? pref.bike().optimizeType() + : pref.scooter().optimizeType(); + switch (optimizeType) { case SAFEST_STREETS -> { weight = bicycleSafetyFactor * getDistanceMeters() / speed; if (bicycleSafetyFactor <= SAFEST_STREETS_SAFETY_FACTOR) { @@ -1232,20 +1240,17 @@ private TraversalCosts bicycleTraversalCost(RoutingPreferences pref, double spee double quick = getEffectiveBikeDistance(); double safety = getEffectiveBicycleSafetyDistance(); double slope = getEffectiveBikeDistanceForWorkCost(); - weight = - quick * - pref.bike().optimizeTriangle().time() + - slope * - pref.bike().optimizeTriangle().slope() + - safety * - pref.bike().optimizeTriangle().safety(); + var triangle = mode == TraverseMode.BICYCLE + ? pref.bike().optimizeTriangle() + : pref.scooter().optimizeTriangle(); + weight = quick * triangle.time() + slope * triangle.slope() + safety * triangle.safety(); weight /= speed; } default -> weight = getDistanceMeters() / speed; } var reluctance = StreetEdgeReluctanceCalculator.computeReluctance( pref, - TraverseMode.BICYCLE, + mode, false, isStairs() ); diff --git a/src/main/java/org/opentripplanner/street/model/edge/StreetEdgeReluctanceCalculator.java b/src/main/java/org/opentripplanner/street/model/edge/StreetEdgeReluctanceCalculator.java index ee2f3d833ee..a6fdf4ce6f1 100644 --- a/src/main/java/org/opentripplanner/street/model/edge/StreetEdgeReluctanceCalculator.java +++ b/src/main/java/org/opentripplanner/street/model/edge/StreetEdgeReluctanceCalculator.java @@ -25,6 +25,7 @@ static double computeReluctance( case WALK -> walkingBike ? pref.bike().walking().reluctance() : pref.walk().reluctance(); case BICYCLE -> pref.bike().reluctance(); case CAR -> pref.car().reluctance(); + case SCOOTER -> pref.scooter().reluctance(); default -> throw new IllegalArgumentException( "getReluctance(): Invalid mode " + traverseMode ); diff --git a/src/main/java/org/opentripplanner/street/model/edge/StreetTransitEntityLink.java b/src/main/java/org/opentripplanner/street/model/edge/StreetTransitEntityLink.java index df5b24a5928..dabd70bf28d 100644 --- a/src/main/java/org/opentripplanner/street/model/edge/StreetTransitEntityLink.java +++ b/src/main/java/org/opentripplanner/street/model/edge/StreetTransitEntityLink.java @@ -137,13 +137,13 @@ else if ( @Nonnull private State[] buildState(State s0, StateEditor s1, RoutingPreferences pref) { - var rentalPreferences = s0.getRequest().preferences().rental(s0.getRequest().mode()); - if ( - s0.isRentingVehicleFromStation() && - s0.mayKeepRentedVehicleAtDestination() && - rentalPreferences.allowArrivingInRentedVehicleAtDestination() - ) { - s1.incrementWeight(rentalPreferences.arrivingInRentalVehicleAtDestinationCost().toSeconds()); + if (s0.isRentingVehicleFromStation() && s0.mayKeepRentedVehicleAtDestination()) { + var rentalPreferences = s0.getRequest().preferences().rental(s0.getRequest().mode()); + if (rentalPreferences.allowArrivingInRentedVehicleAtDestination()) { + s1.incrementWeight( + rentalPreferences.arrivingInRentalVehicleAtDestinationCost().toSeconds() + ); + } } s1.setBackMode(null); diff --git a/src/main/java/org/opentripplanner/street/model/edge/TemporaryFreeEdge.java b/src/main/java/org/opentripplanner/street/model/edge/TemporaryFreeEdge.java index d825a8fcbea..e93c6523d89 100644 --- a/src/main/java/org/opentripplanner/street/model/edge/TemporaryFreeEdge.java +++ b/src/main/java/org/opentripplanner/street/model/edge/TemporaryFreeEdge.java @@ -42,13 +42,13 @@ public State[] traverse(State s0) { s1.incrementWeight(1); s1.setBackMode(null); - var rentalPreferences = s0.getPreferences().rental(s0.getRequest().mode()); - if ( - s0.isRentingVehicleFromStation() && - s0.mayKeepRentedVehicleAtDestination() && - rentalPreferences.allowArrivingInRentedVehicleAtDestination() - ) { - s1.incrementWeight(rentalPreferences.arrivingInRentalVehicleAtDestinationCost().toSeconds()); + if (s0.isRentingVehicleFromStation() && s0.mayKeepRentedVehicleAtDestination()) { + var rentalPreferences = s0.getPreferences().rental(s0.getRequest().mode()); + if (rentalPreferences.allowArrivingInRentedVehicleAtDestination()) { + s1.incrementWeight( + rentalPreferences.arrivingInRentalVehicleAtDestinationCost().toSeconds() + ); + } } return s1.makeStateArray(); diff --git a/src/main/java/org/opentripplanner/street/search/state/StateData.java b/src/main/java/org/opentripplanner/street/search/state/StateData.java index cc2bfa5a57a..d1db14d91f4 100644 --- a/src/main/java/org/opentripplanner/street/search/state/StateData.java +++ b/src/main/java/org/opentripplanner/street/search/state/StateData.java @@ -87,7 +87,9 @@ public static List getInitialStateDatas( return getInitialStateDatas( request.mode(), request.arriveBy(), - rentalPreferences.allowArrivingInRentedVehicleAtDestination(), + rentalPreferences != null + ? rentalPreferences.allowArrivingInRentedVehicleAtDestination() + : false, stateDataConstructor ); } @@ -102,7 +104,9 @@ public static StateData getBaseCaseStateData(StreetSearchRequest request) { var stateDatas = getInitialStateDatas( request.mode(), request.arriveBy(), - rentalPreferences.allowArrivingInRentedVehicleAtDestination(), + rentalPreferences != null + ? rentalPreferences.allowArrivingInRentedVehicleAtDestination() + : false, StateData::new ); diff --git a/src/main/java/org/opentripplanner/street/search/strategy/EuclideanRemainingWeightHeuristic.java b/src/main/java/org/opentripplanner/street/search/strategy/EuclideanRemainingWeightHeuristic.java index e43278901d4..1f9b6532d62 100644 --- a/src/main/java/org/opentripplanner/street/search/strategy/EuclideanRemainingWeightHeuristic.java +++ b/src/main/java/org/opentripplanner/street/search/strategy/EuclideanRemainingWeightHeuristic.java @@ -5,6 +5,7 @@ import org.opentripplanner.framework.geometry.SphericalDistanceLibrary; import org.opentripplanner.routing.api.request.StreetMode; import org.opentripplanner.routing.api.request.preference.RoutingPreferences; +import org.opentripplanner.street.model.StreetConstants; import org.opentripplanner.street.model.edge.Edge; import org.opentripplanner.street.model.edge.FreeEdge; import org.opentripplanner.street.model.vertex.Vertex; @@ -16,11 +17,22 @@ */ public class EuclideanRemainingWeightHeuristic implements RemainingWeightHeuristic { + private static final Float DEFAULT_MAX_CAR_SPEED = StreetConstants.DEFAULT_MAX_CAR_SPEED; + private double lat; private double lon; private double maxStreetSpeed; private double walkingSpeed; private boolean arriveBy; + private float maxCarSpeed; + + public EuclideanRemainingWeightHeuristic() { + this(DEFAULT_MAX_CAR_SPEED); + } + + public EuclideanRemainingWeightHeuristic(Float maxCarSpeed) { + this.maxCarSpeed = maxCarSpeed != null ? maxCarSpeed : DEFAULT_MAX_CAR_SPEED; + } // TODO This currently only uses the first toVertex. If there are multiple toVertices, it will // not work correctly. @@ -50,11 +62,14 @@ public void initialize( private double getStreetSpeedUpperBound(RoutingPreferences preferences, StreetMode streetMode) { // Assume carSpeed > bikeSpeed > walkSpeed if (streetMode.includesDriving()) { - return preferences.car().speed(); + return maxCarSpeed; } if (streetMode.includesBiking()) { return preferences.bike().speed(); } + if (streetMode.includesScooter()) { + return preferences.scooter().speed(); + } return preferences.walk().speed(); } diff --git a/src/main/java/org/opentripplanner/street/service/DefaultStreetLimitationParametersService.java b/src/main/java/org/opentripplanner/street/service/DefaultStreetLimitationParametersService.java new file mode 100644 index 00000000000..4cfb52c48b8 --- /dev/null +++ b/src/main/java/org/opentripplanner/street/service/DefaultStreetLimitationParametersService.java @@ -0,0 +1,21 @@ +package org.opentripplanner.street.service; + +import jakarta.inject.Singleton; +import org.opentripplanner.street.model.StreetLimitationParameters; + +@Singleton +public class DefaultStreetLimitationParametersService implements StreetLimitationParametersService { + + private final StreetLimitationParameters streetLimitationParameters; + + public DefaultStreetLimitationParametersService( + StreetLimitationParameters streetLimitationParameters + ) { + this.streetLimitationParameters = streetLimitationParameters; + } + + @Override + public float getMaxCarSpeed() { + return streetLimitationParameters.maxCarSpeed(); + } +} diff --git a/src/main/java/org/opentripplanner/street/service/StreetLimitationParametersService.java b/src/main/java/org/opentripplanner/street/service/StreetLimitationParametersService.java new file mode 100644 index 00000000000..dcbc53cf406 --- /dev/null +++ b/src/main/java/org/opentripplanner/street/service/StreetLimitationParametersService.java @@ -0,0 +1,13 @@ +package org.opentripplanner.street.service; + +/** + * A service for fetching limitation parameters of the street graph. + */ +public interface StreetLimitationParametersService { + /** + * Get the graph wide maximum car speed. + * + * @return Maximum car speed in meters per second. + */ + float getMaxCarSpeed(); +} diff --git a/src/main/java/org/opentripplanner/street/service/StreetLimitationParametersServiceModule.java b/src/main/java/org/opentripplanner/street/service/StreetLimitationParametersServiceModule.java new file mode 100644 index 00000000000..b9cd8aa6abe --- /dev/null +++ b/src/main/java/org/opentripplanner/street/service/StreetLimitationParametersServiceModule.java @@ -0,0 +1,22 @@ +package org.opentripplanner.street.service; + +import dagger.Module; +import dagger.Provides; +import jakarta.inject.Singleton; +import org.opentripplanner.street.model.StreetLimitationParameters; + +/** + * The service is used during application serve phase, not loading, so we need to provide + * a module for the service without the repository, which is injected from the loading phase. + */ +@Module +public class StreetLimitationParametersServiceModule { + + @Provides + @Singleton + public StreetLimitationParametersService provideStreetLimitationParametersService( + StreetLimitationParameters streetLimitationParameters + ) { + return new DefaultStreetLimitationParametersService(streetLimitationParameters) {}; + } +} diff --git a/src/main/java/org/opentripplanner/transit/model/network/StopPattern.java b/src/main/java/org/opentripplanner/transit/model/network/StopPattern.java index fe1bb84cf3f..b5f11d387a9 100644 --- a/src/main/java/org/opentripplanner/transit/model/network/StopPattern.java +++ b/src/main/java/org/opentripplanner/transit/model/network/StopPattern.java @@ -9,6 +9,8 @@ import java.util.Optional; import java.util.function.Predicate; import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import org.opentripplanner.framework.lang.MemEfficientArrayBuilder; import org.opentripplanner.model.PickDrop; import org.opentripplanner.model.StopTime; import org.opentripplanner.transit.model.framework.FeedScopedId; @@ -81,11 +83,19 @@ public StopPattern(Collection stopTimes) { * For creating StopTimes without StopTime, for example for unit testing. */ public static StopPatternBuilder create(int length) { - return new StopPatternBuilder(new StopPattern(length)); + return new StopPatternBuilder(new StopPattern(length), null); } - public StopPatternBuilder mutate() { - return new StopPatternBuilder(this); + /** + * This has package local access since a StopPattern is a part of a TripPattern. To change it + * use the {@link TripPattern#copyPlannedStopPattern()} method. + */ + StopPatternBuilder mutate() { + return new StopPatternBuilder(this, null); + } + + StopPatternBuilder mutate(StopPattern realTime) { + return new StopPatternBuilder(this, realTime); } public int hashCode() { @@ -300,16 +310,20 @@ boolean sameStations(@Nonnull StopPattern other, int index) { public static class StopPatternBuilder { - public final StopLocation[] stops; - public final PickDrop[] pickups; - public final PickDrop[] dropoffs; + public final MemEfficientArrayBuilder stops; + public final MemEfficientArrayBuilder pickups; + public final MemEfficientArrayBuilder dropoffs; private final StopPattern original; - public StopPatternBuilder(StopPattern original) { - stops = Arrays.copyOf(original.stops, original.stops.length); - pickups = Arrays.copyOf(original.pickups, original.pickups.length); - dropoffs = Arrays.copyOf(original.dropoffs, original.dropoffs.length); + @Nullable + private final StopPattern realTime; + + public StopPatternBuilder(StopPattern original, StopPattern realTime) { + stops = MemEfficientArrayBuilder.of(original.stops); + pickups = MemEfficientArrayBuilder.of(original.pickups); + dropoffs = MemEfficientArrayBuilder.of(original.dropoffs); this.original = original; + this.realTime = realTime; } /** @@ -319,8 +333,8 @@ public StopPatternBuilder(StopPattern original) { */ public StopPatternBuilder cancelStops(List cancelledStopIndices) { cancelledStopIndices.forEach(index -> { - pickups[index] = PickDrop.CANCELLED; - dropoffs[index] = PickDrop.CANCELLED; + pickups.with(index, PickDrop.CANCELLED); + dropoffs.with(index, PickDrop.CANCELLED); }); return this; } @@ -331,28 +345,33 @@ public StopPatternBuilder cancelStops(List cancelledStopIndices) { public StopPatternBuilder replaceStop(FeedScopedId old, StopLocation newStop) { Objects.requireNonNull(old); Objects.requireNonNull(newStop); - for (int i = 0; i < stops.length; i++) { - if (stops[i].getId().equals(old)) { - stops[i] = newStop; + for (int i = 0; i < stops.size(); i++) { + if (stops.getOrOriginal(i).getId().equals(old)) { + stops.with(i, newStop); } } return this; } + /** + * We want to deduplicate this as much as we can, since this is done + * millions of times during real-time updates. + */ public StopPattern build() { - boolean sameStops = Arrays.equals(stops, original.stops); - boolean sameDropoffs = Arrays.equals(dropoffs, original.dropoffs); - boolean samePickups = Arrays.equals(pickups, original.pickups); - - if (sameStops && samePickups && sameDropoffs) { + if (stops.isNotModified() && dropoffs.isNotModified() && pickups.isNotModified()) { return original; } - StopLocation[] newStops = sameStops ? original.stops : stops; - PickDrop[] newPickups = samePickups ? original.pickups : pickups; - PickDrop[] newDropoffs = sameDropoffs ? original.dropoffs : dropoffs; + if (realTime != null) { + var newStopPattern = new StopPattern( + stops.build(realTime.stops), + pickups.build(realTime.pickups), + dropoffs.build(realTime.dropoffs) + ); + return realTime.equals(newStopPattern) ? realTime : newStopPattern; + } - return new StopPattern(newStops, newPickups, newDropoffs); + return new StopPattern(stops.build(), pickups.build(), dropoffs.build()); } } } diff --git a/src/main/java/org/opentripplanner/transit/model/network/TripPattern.java b/src/main/java/org/opentripplanner/transit/model/network/TripPattern.java index 7057d9fd56e..7e40aa2d13b 100644 --- a/src/main/java/org/opentripplanner/transit/model/network/TripPattern.java +++ b/src/main/java/org/opentripplanner/transit/model/network/TripPattern.java @@ -159,6 +159,20 @@ public StopPattern getStopPattern() { return stopPattern; } + /** + * Return the "original"/planned stop pattern as a builder. This is used when a realtime-update + * contains a full set of stops/pickup/dropoff for a pattern. This will wipe out any changes + * to the stop-pattern from previous updates. + *

    + * Be aware, if the same update is applied twice, then the first instance will be reused to avoid + * unnecessary objects creation and gc. + */ + public StopPattern.StopPatternBuilder copyPlannedStopPattern() { + return isModified() + ? originalTripPattern.stopPattern.mutate(stopPattern) + : stopPattern.mutate(); + } + public LineString getGeometry() { if (hopGeometries == null || hopGeometries.length == 0) { return null; @@ -346,7 +360,7 @@ public void removeTrips(Predicate removeTrip) { */ public boolean isModifiedFromTripPatternWithEqualStops(TripPattern other) { return ( - originalTripPattern != null && + isModified() && originalTripPattern.equals(other) && getStopPattern().stopsEqual(other.getStopPattern()) ); @@ -394,6 +408,10 @@ public TripPattern getOriginalTripPattern() { return originalTripPattern; } + public boolean isModified() { + return originalTripPattern != null; + } + /** * Returns trip headsign from the scheduled timetables or from the original pattern's scheduled * timetables if this pattern is added by realtime and the stop sequence has not changed apart @@ -481,7 +499,7 @@ public TripPatternBuilder copy() { * is added through a realtime update. The pickup and dropoff values don't have to be the same. */ private boolean containsSameStopsAsOriginalPattern() { - return originalTripPattern != null && getStops().equals(originalTripPattern.getStops()); + return isModified() && getStops().equals(originalTripPattern.getStops()); } /** diff --git a/src/main/java/org/opentripplanner/transit/model/organization/Agency.java b/src/main/java/org/opentripplanner/transit/model/organization/Agency.java index 62de89e639b..d72aa6588f3 100644 --- a/src/main/java/org/opentripplanner/transit/model/organization/Agency.java +++ b/src/main/java/org/opentripplanner/transit/model/organization/Agency.java @@ -29,6 +29,7 @@ public final class Agency extends AbstractTransitEntity i // Required fields this.name = assertHasValue(builder.getName(), "Missing mandatory name on Agency %s", builder.getId()); + this.timezone = ZoneId.of( assertHasValue( diff --git a/src/main/java/org/opentripplanner/transit/service/DefaultTransitService.java b/src/main/java/org/opentripplanner/transit/service/DefaultTransitService.java index 3050fca6a3d..ca88b7d3130 100644 --- a/src/main/java/org/opentripplanner/transit/service/DefaultTransitService.java +++ b/src/main/java/org/opentripplanner/transit/service/DefaultTransitService.java @@ -41,6 +41,7 @@ import org.opentripplanner.transit.model.organization.Agency; import org.opentripplanner.transit.model.organization.Operator; import org.opentripplanner.transit.model.site.AreaStop; +import org.opentripplanner.transit.model.site.GroupStop; import org.opentripplanner.transit.model.site.MultiModalStation; import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.model.site.Station; @@ -226,6 +227,12 @@ public Collection listRegularStops() { return transitModel.getStopModel().listRegularStops(); } + @Override + public Collection listGroupStops() { + OTPRequestTimeoutException.checkForTimeout(); + return transitModel.getStopModel().listGroupStops(); + } + @Override public StopLocation getStopLocation(FeedScopedId id) { return transitModel.getStopModel().getStopLocation(id); diff --git a/src/main/java/org/opentripplanner/transit/service/TransitService.java b/src/main/java/org/opentripplanner/transit/service/TransitService.java index fdb6dda8749..17354ec4a20 100644 --- a/src/main/java/org/opentripplanner/transit/service/TransitService.java +++ b/src/main/java/org/opentripplanner/transit/service/TransitService.java @@ -32,6 +32,7 @@ import org.opentripplanner.transit.model.organization.Agency; import org.opentripplanner.transit.model.organization.Operator; import org.opentripplanner.transit.model.site.AreaStop; +import org.opentripplanner.transit.model.site.GroupStop; import org.opentripplanner.transit.model.site.MultiModalStation; import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.model.site.Station; @@ -95,6 +96,8 @@ public interface TransitService { Collection listRegularStops(); + Collection listGroupStops(); + StopLocation getStopLocation(FeedScopedId parseId); Collection getStopOrChildStops(FeedScopedId id); diff --git a/src/main/java/org/opentripplanner/updater/trip/TimetableSnapshotSource.java b/src/main/java/org/opentripplanner/updater/trip/TimetableSnapshotSource.java index 19db2c7e309..049d4933c51 100644 --- a/src/main/java/org/opentripplanner/updater/trip/TimetableSnapshotSource.java +++ b/src/main/java/org/opentripplanner/updater/trip/TimetableSnapshotSource.java @@ -467,8 +467,7 @@ private Result handleScheduledTrip( // If there are skipped stops, we need to change the pattern from the scheduled one if (skippedStopIndices.size() > 0) { StopPattern newStopPattern = pattern - .getStopPattern() - .mutate() + .copyPlannedStopPattern() .cancelStops(skippedStopIndices) .build(); diff --git a/src/main/java/org/opentripplanner/visualizer/GraphVisualizer.java b/src/main/java/org/opentripplanner/visualizer/GraphVisualizer.java index f15aff9048b..6ab7d86917c 100644 --- a/src/main/java/org/opentripplanner/visualizer/GraphVisualizer.java +++ b/src/main/java/org/opentripplanner/visualizer/GraphVisualizer.java @@ -64,7 +64,7 @@ import org.opentripplanner.astar.spi.TraverseVisitor; import org.opentripplanner.graph_builder.issue.api.DataImportIssue; import org.opentripplanner.routing.api.request.RouteRequest; -import org.opentripplanner.routing.core.BicycleOptimizeType; +import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.routing.impl.GraphPathFinder; import org.opentripplanner.street.model.edge.Edge; @@ -490,6 +490,12 @@ protected void route(String from, String to) { // there should be a ui element for walk distance and optimize type .withOptimizeType(getSelectedOptimizeType()) ); + preferences.withScooter(scooter -> + scooter + .withSpeed(Float.parseFloat(bikeSpeed.getText())) + // there should be a ui element for walk distance and optimize type + .withOptimizeType(getSelectedOptimizeType()) + ); }); System.out.println("--------"); @@ -547,20 +553,20 @@ protected void route(String from, String to) { } } - BicycleOptimizeType getSelectedOptimizeType() { + VehicleRoutingOptimizeType getSelectedOptimizeType() { if (opQuick.isSelected()) { - return BicycleOptimizeType.SHORTEST_DURATION; + return VehicleRoutingOptimizeType.SHORTEST_DURATION; } if (opSafe.isSelected()) { - return BicycleOptimizeType.SAFE_STREETS; + return VehicleRoutingOptimizeType.SAFE_STREETS; } if (opFlat.isSelected()) { - return BicycleOptimizeType.FLAT_STREETS; + return VehicleRoutingOptimizeType.FLAT_STREETS; } if (opGreenways.isSelected()) { - return BicycleOptimizeType.SAFEST_STREETS; + return VehicleRoutingOptimizeType.SAFEST_STREETS; } - return BicycleOptimizeType.SHORTEST_DURATION; + return VehicleRoutingOptimizeType.SHORTEST_DURATION; } private Container makeDiffTab() { diff --git a/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql b/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql index dad106418fe..d263667d672 100644 --- a/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql +++ b/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql @@ -774,7 +774,7 @@ type QueryType { "Input type for executing a travel search for a trip between two locations. Returns trip patterns describing suggested alternatives for the trip." trip( "Time and cost penalty on access/egress modes." - accessEgressPenalty: [PenaltyForStreetMode!] = [{streetMode : car_park, timePenalty : "20m + 2.0 t", costFactor : 1.5}, {streetMode : flexible, timePenalty : "20m + 2.0 t", costFactor : 1.5}], + accessEgressPenalty: [PenaltyForStreetMode!] = [{streetMode : car_park, timePenalty : "20m + 2.0 t", costFactor : 1.5}, {streetMode : flexible, timePenalty : "10m + 1.30 t", costFactor : 1.3}], "The alightSlack is the minimum extra time after exiting a public transport vehicle. This is the default value used, if not overridden by the 'alightSlackList'." alightSlackDefault: Int = 0, "List of alightSlack for a given set of modes. Defaults: []" @@ -997,7 +997,7 @@ type RoutingParameters { "Time to park a car in a park and ride, w/o taking into account driving and walking cost." carDropOffTime: Int "Max car speed along streets, in meters per second" - carSpeed: Float + carSpeed: Float @deprecated(reason : "This parameter is no longer configurable.") compactLegsByReversedSearch: Boolean @deprecated(reason : "NOT IN USE IN OTP2.") debugItineraryFilter: Boolean @deprecated(reason : "Use `itineraryFilter.debug` instead.") "Option to disable the default filtering of GTFS-RT alerts by time." diff --git a/src/test/java/org/opentripplanner/TestServerContext.java b/src/test/java/org/opentripplanner/TestServerContext.java index 5d74dbba240..bf6a8d2bbd3 100644 --- a/src/test/java/org/opentripplanner/TestServerContext.java +++ b/src/test/java/org/opentripplanner/TestServerContext.java @@ -20,6 +20,9 @@ import org.opentripplanner.standalone.api.OtpServerRequestContext; import org.opentripplanner.standalone.config.RouterConfig; import org.opentripplanner.standalone.server.DefaultServerRequestContext; +import org.opentripplanner.street.model.StreetLimitationParameters; +import org.opentripplanner.street.service.DefaultStreetLimitationParametersService; +import org.opentripplanner.street.service.StreetLimitationParametersService; import org.opentripplanner.transit.service.DefaultTransitService; import org.opentripplanner.transit.service.TransitModel; import org.opentripplanner.transit.service.TransitService; @@ -51,6 +54,7 @@ public static OtpServerRequestContext createServerContext( routerConfig.flexConfig(), List.of(), null, + createStreetLimitationParametersService(), null ); creatTransitLayerForRaptor(transitModel, routerConfig.transitTuningConfig()); @@ -80,4 +84,8 @@ public static VehicleRentalService createVehicleRentalService() { public static EmissionsService createEmissionsService() { return new DefaultEmissionsService(new EmissionsDataModel()); } + + public static StreetLimitationParametersService createStreetLimitationParametersService() { + return new DefaultStreetLimitationParametersService(new StreetLimitationParameters()); + } } diff --git a/src/test/java/org/opentripplanner/_support/geometry/Polygons.java b/src/test/java/org/opentripplanner/_support/geometry/Polygons.java index 94d4ea7ff2d..efedd74499c 100644 --- a/src/test/java/org/opentripplanner/_support/geometry/Polygons.java +++ b/src/test/java/org/opentripplanner/_support/geometry/Polygons.java @@ -1,12 +1,14 @@ package org.opentripplanner._support.geometry; +import java.util.Arrays; +import org.geojson.LngLatAlt; import org.locationtech.jts.geom.Coordinate; -import org.locationtech.jts.geom.Geometry; +import org.locationtech.jts.geom.Polygon; import org.opentripplanner.framework.geometry.GeometryUtils; public class Polygons { - public static final Geometry BERLIN = GeometryUtils + public static final Polygon BERLIN = GeometryUtils .getGeometryFactory() .createPolygon( new Coordinate[] { @@ -17,4 +19,16 @@ public class Polygons { new Coordinate(52.616841, 13.224692810), } ); + + public static org.geojson.Polygon toGeoJson(Polygon polygon) { + var ret = new org.geojson.Polygon(); + + var coordinates = Arrays + .stream(polygon.getCoordinates()) + .map(c -> new LngLatAlt(c.y, c.x)) + .toList(); + ret.add(coordinates); + + return ret; + } } diff --git a/src/test/java/org/opentripplanner/apis/gtfs/mapping/RouteRequestMapperTest.java b/src/test/java/org/opentripplanner/apis/gtfs/mapping/RouteRequestMapperTest.java index 85736291ada..22a8583d705 100644 --- a/src/test/java/org/opentripplanner/apis/gtfs/mapping/RouteRequestMapperTest.java +++ b/src/test/java/org/opentripplanner/apis/gtfs/mapping/RouteRequestMapperTest.java @@ -5,8 +5,8 @@ import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.params.provider.Arguments.of; -import static org.opentripplanner.routing.core.BicycleOptimizeType.SAFE_STREETS; -import static org.opentripplanner.routing.core.BicycleOptimizeType.TRIANGLE; +import static org.opentripplanner.routing.core.VehicleRoutingOptimizeType.SAFE_STREETS; +import static org.opentripplanner.routing.core.VehicleRoutingOptimizeType.TRIANGLE; import graphql.ExecutionInput; import graphql.execution.ExecutionId; @@ -20,6 +20,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import org.opentripplanner._support.time.ZoneIds; import org.opentripplanner.apis.gtfs.GraphQLRequestContext; import org.opentripplanner.apis.gtfs.TestRoutingService; @@ -34,7 +35,6 @@ import org.opentripplanner.service.realtimevehicles.internal.DefaultRealtimeVehicleService; import org.opentripplanner.service.vehiclerental.internal.DefaultVehicleRentalService; import org.opentripplanner.street.search.TraverseMode; -import org.opentripplanner.test.support.VariableSource; import org.opentripplanner.transit.service.DefaultTransitService; import org.opentripplanner.transit.service.TransitModel; @@ -91,25 +91,30 @@ void parkingFilters() { testParkingFilters(routeRequest.preferences().parking(TraverseMode.BICYCLE)); } - static Stream banningCases = Stream.of( - of(Map.of(), "[TransitFilterRequest{}]"), - of( - Map.of("routes", "trimet:555"), - "[TransitFilterRequest{not: [SelectRequest{transportModes: [], routes: [trimet:555]}]}]" - ), - of(Map.of("agencies", ""), "[TransitFilterRequest{not: [SelectRequest{transportModes: []}]}]"), - of( - Map.of("agencies", "trimet:666"), - "[TransitFilterRequest{not: [SelectRequest{transportModes: [], agencies: [trimet:666]}]}]" - ), - of( - Map.of("agencies", "trimet:666", "routes", "trimet:444"), - "[TransitFilterRequest{not: [SelectRequest{transportModes: [], routes: [trimet:444]}, SelectRequest{transportModes: [], agencies: [trimet:666]}]}]" - ) - ); + static Stream banningCases() { + return Stream.of( + of(Map.of(), "[TransitFilterRequest{}]"), + of( + Map.of("routes", "trimet:555"), + "[TransitFilterRequest{not: [SelectRequest{transportModes: [], routes: [trimet:555]}]}]" + ), + of( + Map.of("agencies", ""), + "[TransitFilterRequest{not: [SelectRequest{transportModes: []}]}]" + ), + of( + Map.of("agencies", "trimet:666"), + "[TransitFilterRequest{not: [SelectRequest{transportModes: [], agencies: [trimet:666]}]}]" + ), + of( + Map.of("agencies", "trimet:666", "routes", "trimet:444"), + "[TransitFilterRequest{not: [SelectRequest{transportModes: [], routes: [trimet:444]}, SelectRequest{transportModes: [], agencies: [trimet:666]}]}]" + ) + ); + } @ParameterizedTest - @VariableSource("banningCases") + @MethodSource("banningCases") void banning(Map banned, String expectedFilters) { Map arguments = Map.of("banned", banned); @@ -119,21 +124,23 @@ void banning(Map banned, String expectedFilters) { assertEquals(expectedFilters, routeRequest.journey().transit().filters().toString()); } - static Stream transportModesCases = Stream.of( - of(List.of(), "[ExcludeAllTransitFilter{}]"), - of(List.of(mode("BICYCLE")), "[ExcludeAllTransitFilter{}]"), - of( - List.of(mode("BUS")), - "[TransitFilterRequest{select: [SelectRequest{transportModes: [BUS, COACH]}]}]" - ), - of( - List.of(mode("BUS"), mode("MONORAIL")), - "[TransitFilterRequest{select: [SelectRequest{transportModes: [BUS, COACH, MONORAIL]}]}]" - ) - ); + static Stream transportModesCases() { + return Stream.of( + of(List.of(), "[ExcludeAllTransitFilter{}]"), + of(List.of(mode("BICYCLE")), "[ExcludeAllTransitFilter{}]"), + of( + List.of(mode("BUS")), + "[TransitFilterRequest{select: [SelectRequest{transportModes: [BUS, COACH]}]}]" + ), + of( + List.of(mode("BUS"), mode("MONORAIL")), + "[TransitFilterRequest{select: [SelectRequest{transportModes: [BUS, COACH, MONORAIL]}]}]" + ) + ); + } @ParameterizedTest - @VariableSource("transportModesCases") + @MethodSource("transportModesCases") void modes(List> modes, String expectedFilters) { Map arguments = Map.of("transportModes", modes); @@ -172,13 +179,15 @@ void bikeTriangle() { ); } - static Stream noTriangleCases = Arrays - .stream(GraphQLTypes.GraphQLOptimizeType.values()) - .filter(value -> value != GraphQLTypes.GraphQLOptimizeType.TRIANGLE) - .map(Arguments::of); + static Stream noTriangleCases() { + return Arrays + .stream(GraphQLTypes.GraphQLOptimizeType.values()) + .filter(value -> value != GraphQLTypes.GraphQLOptimizeType.TRIANGLE) + .map(Arguments::of); + } @ParameterizedTest - @VariableSource("noTriangleCases") + @MethodSource("noTriangleCases") void noTriangle(GraphQLTypes.GraphQLOptimizeType bot) { Map arguments = Map.of( "optimize", diff --git a/src/test/java/org/opentripplanner/apis/support/TileJsonTest.java b/src/test/java/org/opentripplanner/apis/support/TileJsonTest.java index ac3b7bca522..73c8cd1369e 100644 --- a/src/test/java/org/opentripplanner/apis/support/TileJsonTest.java +++ b/src/test/java/org/opentripplanner/apis/support/TileJsonTest.java @@ -2,16 +2,33 @@ import static org.junit.jupiter.api.Assertions.assertEquals; +import java.time.LocalDate; import java.util.List; import org.glassfish.jersey.server.internal.routing.UriRoutingContext; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; +import org.opentripplanner.model.FeedInfo; +import org.opentripplanner.service.worldenvelope.model.WorldEnvelope; import org.opentripplanner.test.support.HttpForTest; class TileJsonTest { private static final List LAYERS = List.of("stops", "rentalVehicles"); + private static final WorldEnvelope ENVELOPE = WorldEnvelope + .of() + .expandToIncludeStreetEntities(1, 1) + .expandToIncludeStreetEntities(2, 2) + .build(); + private static final FeedInfo FEED_INFO = new FeedInfo( + "1", + "Trimet", + "https://trimet.org", + "en", + LocalDate.MIN, + LocalDate.MIN, + "1" + ); @ParameterizedTest @ValueSource( @@ -40,4 +57,23 @@ void defaultPath() { TileJson.urlWithDefaultPath(uriInfo, req, LAYERS, "default", "vectorTiles") ); } + + @Test + void attributionFromFeedInfo() { + var tileJson = new TileJson("http://example.com", ENVELOPE, List.of(FEED_INFO)); + assertEquals("Trimet", tileJson.attribution); + } + + @Test + void duplicateAttribution() { + var tileJson = new TileJson("http://example.com", ENVELOPE, List.of(FEED_INFO, FEED_INFO)); + assertEquals("Trimet", tileJson.attribution); + } + + @Test + void attributionFromOverride() { + var override = "OVERRIDE"; + var tileJson = new TileJson("http://example.com", ENVELOPE, override); + assertEquals(override, tileJson.attribution); + } } diff --git a/src/test/java/org/opentripplanner/apis/transmodel/mapping/RequestModesMapperTest.java b/src/test/java/org/opentripplanner/apis/transmodel/mapping/RequestModesMapperTest.java new file mode 100644 index 00000000000..160014213d3 --- /dev/null +++ b/src/test/java/org/opentripplanner/apis/transmodel/mapping/RequestModesMapperTest.java @@ -0,0 +1,57 @@ +package org.opentripplanner.apis.transmodel.mapping; + +import static org.junit.jupiter.api.Assertions.*; + +import java.util.Map; +import org.junit.jupiter.api.Test; +import org.opentripplanner.routing.api.request.RequestModes; +import org.opentripplanner.routing.api.request.StreetMode; + +class RequestModesMapperTest { + + @Test + void testMapRequestModesEmptyMapReturnsDefaults() { + Map inputModes = Map.of(); + + RequestModes mappedModes = RequestModesMapper.mapRequestModes(inputModes); + + assertEquals(RequestModes.of().build(), mappedModes); + } + + @Test + void testMapRequestModesAccessSetReturnsDefaultsForOthers() { + Map inputModes = Map.of("accessMode", StreetMode.BIKE); + + RequestModes wantModes = RequestModes + .of() + .withAccessMode(StreetMode.BIKE) + .withTransferMode(StreetMode.BIKE) + .build(); + + RequestModes mappedModes = RequestModesMapper.mapRequestModes(inputModes); + + assertEquals(wantModes, mappedModes); + } + + @Test + void testMapRequestModesEgressSetReturnsDefaultsForOthers() { + Map inputModes = Map.of("egressMode", StreetMode.CAR); + + RequestModes wantModes = RequestModes.of().withEgressMode(StreetMode.CAR).build(); + + RequestModes mappedModes = RequestModesMapper.mapRequestModes(inputModes); + + assertEquals(wantModes, mappedModes); + } + + @Test + void testMapRequestModesDirectSetReturnsDefaultsForOthers() { + Map inputModes = Map.of("directMode", StreetMode.CAR); + + RequestModes wantModes = RequestModes.of().withDirectMode(StreetMode.CAR).build(); + + RequestModes mappedModes = RequestModesMapper.mapRequestModes(inputModes); + + assertEquals(wantModes, mappedModes); + } +} diff --git a/src/test/java/org/opentripplanner/apis/transmodel/mapping/TripRequestMapperTest.java b/src/test/java/org/opentripplanner/apis/transmodel/mapping/TripRequestMapperTest.java index 127fe66f0ea..e35f198d16e 100644 --- a/src/test/java/org/opentripplanner/apis/transmodel/mapping/TripRequestMapperTest.java +++ b/src/test/java/org/opentripplanner/apis/transmodel/mapping/TripRequestMapperTest.java @@ -23,6 +23,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import org.opentripplanner._support.time.ZoneIds; import org.opentripplanner.apis.transmodel.TransmodelRequestContext; import org.opentripplanner.ext.emissions.DefaultEmissionsService; @@ -40,7 +41,7 @@ import org.opentripplanner.routing.api.request.StreetMode; import org.opentripplanner.routing.api.request.preference.StreetPreferences; import org.opentripplanner.routing.api.request.preference.TimeSlopeSafetyTriangle; -import org.opentripplanner.routing.core.BicycleOptimizeType; +import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.service.realtimevehicles.internal.DefaultRealtimeVehicleService; import org.opentripplanner.service.vehiclerental.internal.DefaultVehicleRentalService; @@ -48,7 +49,8 @@ import org.opentripplanner.service.worldenvelope.internal.DefaultWorldEnvelopeService; import org.opentripplanner.standalone.config.RouterConfig; import org.opentripplanner.standalone.server.DefaultServerRequestContext; -import org.opentripplanner.test.support.VariableSource; +import org.opentripplanner.street.model.StreetLimitationParameters; +import org.opentripplanner.street.service.DefaultStreetLimitationParametersService; import org.opentripplanner.transit.model._data.TransitModelForTest; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.model.network.Route; @@ -132,6 +134,7 @@ public class TripRequestMapperTest implements PlanTestConstants { RouterConfig.DEFAULT.flexConfig(), List.of(), null, + new DefaultStreetLimitationParametersService(new StreetLimitationParameters()), null ), null, @@ -255,14 +258,14 @@ public void testMaxDirectDurationForFlexWithTooLongDuration() { public void testBikeTriangleFactors() { Map arguments = Map.of( "bicycleOptimisationMethod", - BicycleOptimizeType.TRIANGLE, + VehicleRoutingOptimizeType.TRIANGLE, "triangleFactors", Map.of("safety", 0.1, "slope", 0.1, "time", 0.8) ); var req1 = TripRequestMapper.createRequest(executionContext(arguments)); - assertEquals(BicycleOptimizeType.TRIANGLE, req1.preferences().bike().optimizeType()); + assertEquals(VehicleRoutingOptimizeType.TRIANGLE, req1.preferences().bike().optimizeType()); assertEquals( new TimeSlopeSafetyTriangle(0.8, 0.1, 0.1), req1.preferences().bike().optimizeTriangle() @@ -272,18 +275,17 @@ public void testBikeTriangleFactors() { @Test void testDefaultTriangleFactors() { var req2 = TripRequestMapper.createRequest(executionContext(Map.of())); - assertEquals(BicycleOptimizeType.SAFE_STREETS, req2.preferences().bike().optimizeType()); + assertEquals(VehicleRoutingOptimizeType.SAFE_STREETS, req2.preferences().bike().optimizeType()); assertEquals(TimeSlopeSafetyTriangle.DEFAULT, req2.preferences().bike().optimizeTriangle()); } - static Stream noTriangleCases = BicycleOptimizeType - .nonTriangleValues() - .stream() - .map(Arguments::of); + static Stream noTriangleCases() { + return VehicleRoutingOptimizeType.nonTriangleValues().stream().map(Arguments::of); + } @ParameterizedTest - @VariableSource("noTriangleCases") - public void testBikeTriangleFactorsHasNoEffect(BicycleOptimizeType bot) { + @MethodSource("noTriangleCases") + public void testBikeTriangleFactorsHasNoEffect(VehicleRoutingOptimizeType bot) { Map arguments = Map.of( "bicycleOptimisationMethod", bot, diff --git a/src/test/java/org/opentripplanner/apis/transmodel/mapping/preferences/BikePreferencesMapperTest.java b/src/test/java/org/opentripplanner/apis/transmodel/mapping/preferences/BikePreferencesMapperTest.java index a72fd25cbfa..786ddc5c198 100644 --- a/src/test/java/org/opentripplanner/apis/transmodel/mapping/preferences/BikePreferencesMapperTest.java +++ b/src/test/java/org/opentripplanner/apis/transmodel/mapping/preferences/BikePreferencesMapperTest.java @@ -9,7 +9,7 @@ import org.junit.jupiter.params.provider.MethodSource; import org.opentripplanner.apis.transmodel._support.TestDataFetcherDecorator; import org.opentripplanner.routing.api.request.preference.BikePreferences; -import org.opentripplanner.routing.core.BicycleOptimizeType; +import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; class BikePreferencesMapperTest { @@ -23,7 +23,7 @@ static List mapBikePreferencesTestCases() { Arguments.of("bikeSpeed", 10.0, "BikePreferences{speed: 10.0}"), Arguments.of( "bicycleOptimisationMethod", - BicycleOptimizeType.TRIANGLE, + VehicleRoutingOptimizeType.TRIANGLE, "BikePreferences{optimizeType: TRIANGLE}" ), // No effect unless BicycleOptimize is TRIANGLE @@ -64,7 +64,7 @@ static List mapBikePreferencesOptimizeTriangleTestCases() { @ParameterizedTest @MethodSource("mapBikePreferencesOptimizeTriangleTestCases") void testMapBikePreferencesOptimizeTriangle(String field, Object value, String expected) { - var preferences = BikePreferences.of().withOptimizeType(BicycleOptimizeType.TRIANGLE); + var preferences = BikePreferences.of().withOptimizeType(VehicleRoutingOptimizeType.TRIANGLE); mapBikePreferences(preferences, TestDataFetcherDecorator.of(field, value)); assertEquals( "BikePreferences{optimizeType: TRIANGLE, optimizeTriangle: " + expected + "}", diff --git a/src/test/java/org/opentripplanner/apis/transmodel/mapping/preferences/ScooterPreferencesMapperTest.java b/src/test/java/org/opentripplanner/apis/transmodel/mapping/preferences/ScooterPreferencesMapperTest.java new file mode 100644 index 00000000000..2b5c7563ac2 --- /dev/null +++ b/src/test/java/org/opentripplanner/apis/transmodel/mapping/preferences/ScooterPreferencesMapperTest.java @@ -0,0 +1,70 @@ +package org.opentripplanner.apis.transmodel.mapping.preferences; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.opentripplanner.apis.transmodel.mapping.preferences.ScooterPreferencesMapper.mapScooterPreferences; + +import java.util.List; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import org.opentripplanner.apis.transmodel._support.TestDataFetcherDecorator; +import org.opentripplanner.routing.api.request.preference.ScooterPreferences; +import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; + +class ScooterPreferencesMapperTest { + + static List mapScooterPreferencesTestCases() { + return List.of( + Arguments.of("walkReluctance", 10.0, "ScooterPreferences{reluctance: 10.0}"), + Arguments.of("bikeSpeed", 10.0, "ScooterPreferences{speed: 10.0}"), + Arguments.of( + "bicycleOptimisationMethod", + VehicleRoutingOptimizeType.TRIANGLE, + "ScooterPreferences{optimizeType: TRIANGLE}" + ), + // No effect unless BicycleOptimize is TRIANGLE + Arguments.of("triangleFactors.time", 0.17, "ScooterPreferences{}"), + Arguments.of("triangleFactors.slope", 0.12, "ScooterPreferences{}"), + Arguments.of("triangleFactors.safety", 0.13, "ScooterPreferences{}") + ); + } + + @ParameterizedTest + @MethodSource("mapScooterPreferencesTestCases") + void testMapScooterPreferences(String field, Object value, String expected) { + var preferences = ScooterPreferences.of(); + mapScooterPreferences(preferences, TestDataFetcherDecorator.of(field, value)); + assertEquals(expected, preferences.build().toString()); + } + + static List mapScooterPreferencesOptimizeTriangleTestCases() { + return List.of( + Arguments.of( + "triangleFactors.time", + 0.17, + "TimeSlopeSafetyTriangle[time=1.0, slope=0.0, safety=0.0]" + ), + Arguments.of( + "triangleFactors.slope", + 0.12, + "TimeSlopeSafetyTriangle[time=0.0, slope=1.0, safety=0.0]" + ), + Arguments.of( + "triangleFactors.safety", + 0.13, + "TimeSlopeSafetyTriangle[time=0.0, slope=0.0, safety=1.0]" + ) + ); + } + + @ParameterizedTest + @MethodSource("mapScooterPreferencesOptimizeTriangleTestCases") + void testMapScooterPreferencesOptimizeTriangle(String field, Object value, String expected) { + var preferences = ScooterPreferences.of().withOptimizeType(VehicleRoutingOptimizeType.TRIANGLE); + mapScooterPreferences(preferences, TestDataFetcherDecorator.of(field, value)); + assertEquals( + "ScooterPreferences{optimizeType: TRIANGLE, optimizeTriangle: " + expected + "}", + preferences.build().toString() + ); + } +} diff --git a/src/test/java/org/opentripplanner/apis/transmodel/model/scalars/DateTimeScalarFactoryTest.java b/src/test/java/org/opentripplanner/apis/transmodel/model/scalars/DateTimeScalarFactoryTest.java index 43b44cbd5a6..c46c232751f 100644 --- a/src/test/java/org/opentripplanner/apis/transmodel/model/scalars/DateTimeScalarFactoryTest.java +++ b/src/test/java/org/opentripplanner/apis/transmodel/model/scalars/DateTimeScalarFactoryTest.java @@ -13,7 +13,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; -import org.opentripplanner.test.support.VariableSource; +import org.junit.jupiter.params.provider.MethodSource; class DateTimeScalarFactoryTest { @@ -32,17 +32,19 @@ void serialize() { assertEquals(DATE_TIME, result); } - static Stream testCases = Stream.of( - Arguments.of(DATE_TIME), - Arguments.of("2023-01-27T12:59:00.000+01:00"), - Arguments.of("2023-01-27T12:59:00+0100"), - Arguments.of("2023-01-27T12:59:00+01"), - Arguments.of("2023-01-27T12:59:00"), - Arguments.of("2023-01-27T11:59:00Z") - ); + static Stream testCases() { + return Stream.of( + Arguments.of(DATE_TIME), + Arguments.of("2023-01-27T12:59:00.000+01:00"), + Arguments.of("2023-01-27T12:59:00+0100"), + Arguments.of("2023-01-27T12:59:00+01"), + Arguments.of("2023-01-27T12:59:00"), + Arguments.of("2023-01-27T11:59:00Z") + ); + } @ParameterizedTest - @VariableSource("testCases") + @MethodSource("testCases") void parse(String input) { var result = subject.getCoercing().parseValue(input); assertEquals(EPOCH_MILLIS, result); diff --git a/src/test/java/org/opentripplanner/apis/vectortiles/DebugStyleSpecTest.java b/src/test/java/org/opentripplanner/apis/vectortiles/DebugStyleSpecTest.java index f2c3ebf49de..d971cefe2e2 100644 --- a/src/test/java/org/opentripplanner/apis/vectortiles/DebugStyleSpecTest.java +++ b/src/test/java/org/opentripplanner/apis/vectortiles/DebugStyleSpecTest.java @@ -17,9 +17,10 @@ void spec() { var vectorSource = new VectorSource("vectorSource", "https://example.com"); var regularStops = new VectorSourceLayer(vectorSource, "stops"); var areaStops = new VectorSourceLayer(vectorSource, "stops"); + var groupStops = new VectorSourceLayer(vectorSource, "stops"); var edges = new VectorSourceLayer(vectorSource, "edges"); var vertices = new VectorSourceLayer(vectorSource, "vertices"); - var spec = DebugStyleSpec.build(regularStops, areaStops, edges, vertices); + var spec = DebugStyleSpec.build(regularStops, areaStops, groupStops, edges, vertices); var json = ObjectMappers.ignoringExtraFields().valueToTree(spec); var expectation = RESOURCES.fileToString("style.json"); diff --git a/src/test/java/org/opentripplanner/framework/io/HttpUtilsTest.java b/src/test/java/org/opentripplanner/framework/io/HttpUtilsTest.java new file mode 100644 index 00000000000..ac8ae52848c --- /dev/null +++ b/src/test/java/org/opentripplanner/framework/io/HttpUtilsTest.java @@ -0,0 +1,38 @@ +package org.opentripplanner.framework.io; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.List; +import java.util.Map; +import org.glassfish.jersey.server.internal.routing.UriRoutingContext; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; +import org.opentripplanner.test.support.HttpForTest; + +class HttpUtilsTest { + + private static final String HOSTNAME = "example.com"; + + static List testCases() { + return List.of( + HOSTNAME, + "example.com,", + " example.com ,", + "example.com,example.com", + "example.com, example.com", + "example.com, example.net", + "example.com, example.net, example.com", + " example.com, example.net, example.com" + ); + } + + @ParameterizedTest + @MethodSource("testCases") + void extractHost(String headerValue) { + var req = HttpForTest.containerRequest(); + req.headers(Map.of("X-Forwarded-Host", List.of(headerValue))); + var uriInfo = new UriRoutingContext(req); + var baseAddress = HttpUtils.getBaseAddress(uriInfo, req); + assertEquals("https://" + HOSTNAME, baseAddress); + } +} diff --git a/src/test/java/org/opentripplanner/framework/lang/MemEfficientArrayBuilderTest.java b/src/test/java/org/opentripplanner/framework/lang/MemEfficientArrayBuilderTest.java new file mode 100644 index 00000000000..16468868fe7 --- /dev/null +++ b/src/test/java/org/opentripplanner/framework/lang/MemEfficientArrayBuilderTest.java @@ -0,0 +1,91 @@ +package org.opentripplanner.framework.lang; + +import static java.time.DayOfWeek.MONDAY; +import static java.time.DayOfWeek.SATURDAY; +import static java.time.DayOfWeek.SUNDAY; +import static java.time.DayOfWeek.TUESDAY; +import static java.time.DayOfWeek.WEDNESDAY; +import static org.junit.jupiter.api.Assertions.assertArrayEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertSame; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.time.DayOfWeek; +import org.junit.jupiter.api.Test; + +class MemEfficientArrayBuilderTest { + + private final DayOfWeek[] WEEKEND = { SATURDAY, SUNDAY }; + + @Test + void size() { + assertEquals(WEEKEND.length, MemEfficientArrayBuilder.of(WEEKEND).size()); + } + + @Test + void with() { + var smallWeekend = MemEfficientArrayBuilder + .of(WEEKEND) + .with(0, DayOfWeek.THURSDAY) + .with(1, DayOfWeek.FRIDAY) + .build(); + assertArrayEquals(new DayOfWeek[] { DayOfWeek.THURSDAY, DayOfWeek.FRIDAY }, smallWeekend); + } + + @Test + void withOutChange() { + var array = MemEfficientArrayBuilder.of(WEEKEND).build(); + assertSame(WEEKEND, array); + + array = MemEfficientArrayBuilder.of(WEEKEND).with(0, SATURDAY).build(); + assertSame(WEEKEND, array); + + array = MemEfficientArrayBuilder.of(WEEKEND).with(1, SUNDAY).with(0, SATURDAY).build(); + assertSame(WEEKEND, array); + } + + @Test + void getOrOriginal() { + var array = MemEfficientArrayBuilder.of(WEEKEND).with(1, MONDAY); + assertEquals(SATURDAY, array.getOrOriginal(0)); + assertEquals(MONDAY, array.getOrOriginal(1)); + } + + @Test + void original() { + // Verify that modifications do not change original + var array = MemEfficientArrayBuilder.of(WEEKEND).with(1, MONDAY); + assertEquals(SATURDAY, array.original(0)); + assertEquals(SUNDAY, array.original(1)); + } + + @Test + void isNotModified() { + var array = MemEfficientArrayBuilder.of(WEEKEND); + assertTrue(array.isNotModified()); + + array.with(0, SATURDAY).with(1, SUNDAY); + assertTrue(array.isNotModified()); + + array.with(0, MONDAY); + assertFalse(array.isNotModified()); + } + + @Test + void testBuildWithCandidate() { + DayOfWeek[] candidate = { TUESDAY, WEDNESDAY }; + var array = MemEfficientArrayBuilder.of(WEEKEND); + + // Without changes, we expect the original to be retuned + assertSame(WEEKEND, array.build(candidate)); + + // Second value set, but not first + array = MemEfficientArrayBuilder.of(WEEKEND).with(1, WEDNESDAY); + assertArrayEquals(new DayOfWeek[] { SATURDAY, WEDNESDAY }, array.build(candidate)); + + // Same as candidate build + array = MemEfficientArrayBuilder.of(WEEKEND).with(1, WEDNESDAY).with(0, TUESDAY); + assertArrayEquals(candidate, array.build(candidate)); + } +} diff --git a/src/test/java/org/opentripplanner/framework/lang/StringUtilsTest.java b/src/test/java/org/opentripplanner/framework/lang/StringUtilsTest.java index 8998d82a5f2..9a4c30e1329 100644 --- a/src/test/java/org/opentripplanner/framework/lang/StringUtilsTest.java +++ b/src/test/java/org/opentripplanner/framework/lang/StringUtilsTest.java @@ -10,20 +10,22 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; -import org.opentripplanner.test.support.VariableSource; +import org.junit.jupiter.params.provider.MethodSource; class StringUtilsTest { - static final Stream hasValueTestCases = Stream.of( - Arguments.of("Text", TRUE), - Arguments.of("T", TRUE), - Arguments.of(null, FALSE), - Arguments.of("", FALSE), - Arguments.of("\t\n", FALSE) - ); + static Stream hasValueTestCases() { + return Stream.of( + Arguments.of("Text", TRUE), + Arguments.of("T", TRUE), + Arguments.of(null, FALSE), + Arguments.of("", FALSE), + Arguments.of("\t\n", FALSE) + ); + } @ParameterizedTest - @VariableSource("hasValueTestCases") + @MethodSource("hasValueTestCases") void hasValue(String input, Boolean hasValue) { assertEquals(hasValue, StringUtils.hasValue(input)); assertEquals(!hasValue, StringUtils.hasNoValue(input)); diff --git a/src/test/java/org/opentripplanner/generate/doc/SiriAzureConfigDocTest.java b/src/test/java/org/opentripplanner/generate/doc/SiriAzureConfigDocTest.java new file mode 100644 index 00000000000..374ac2b4bbb --- /dev/null +++ b/src/test/java/org/opentripplanner/generate/doc/SiriAzureConfigDocTest.java @@ -0,0 +1,98 @@ +package org.opentripplanner.generate.doc; + +import static org.opentripplanner.framework.application.OtpFileNames.ROUTER_CONFIG_FILENAME; +import static org.opentripplanner.framework.io.FileUtils.assertFileEquals; +import static org.opentripplanner.framework.io.FileUtils.readFile; +import static org.opentripplanner.framework.io.FileUtils.writeFile; +import static org.opentripplanner.framework.text.MarkdownFormatter.HEADER_4; +import static org.opentripplanner.generate.doc.framework.DocsTestConstants.DOCS_ROOT; +import static org.opentripplanner.generate.doc.framework.DocsTestConstants.TEMPLATE_ROOT; +import static org.opentripplanner.generate.doc.framework.TemplateUtil.replaceSection; +import static org.opentripplanner.standalone.config.framework.json.JsonSupport.jsonNodeFromResource; + +import com.fasterxml.jackson.databind.ObjectMapper; +import java.io.File; +import java.util.Set; +import org.junit.jupiter.api.Test; +import org.opentripplanner.generate.doc.framework.DocBuilder; +import org.opentripplanner.generate.doc.framework.GeneratesDocumentation; +import org.opentripplanner.generate.doc.framework.ParameterDetailsList; +import org.opentripplanner.generate.doc.framework.ParameterSummaryTable; +import org.opentripplanner.generate.doc.framework.SkipNodes; +import org.opentripplanner.standalone.config.RouterConfig; +import org.opentripplanner.standalone.config.framework.json.NodeAdapter; + +@GeneratesDocumentation +public class SiriAzureConfigDocTest { + + private static final File TEMPLATE = new File(TEMPLATE_ROOT, "sandbox/siri/SiriAzureUpdater.md"); + private static final File OUT_FILE = new File(DOCS_ROOT, "sandbox/siri/SiriAzureUpdater.md"); + + private static final String ROUTER_CONFIG_PATH = "standalone/config/" + ROUTER_CONFIG_FILENAME; + private static final Set INCLUDE_UPDATERS = Set.of( + "siri-azure-et-updater", + "siri-azure-sx-updater" + ); + private static final SkipNodes SKIP_NODES = SkipNodes.of().build(); + public static final ObjectMapper mapper = new ObjectMapper(); + + /** + * NOTE! This test updates the {@code docs/sandbox/SiriUpdater.md} document based on the latest + * version of the code. + */ + @Test + public void updateSiriDoc() { + NodeAdapter node = readUpdaterConfig(); + + // Read and close input file (same as output file) + String template = readFile(TEMPLATE); + String original = readFile(OUT_FILE); + + for (String childName : node.listChildrenByName()) { + var child = node.child(childName); + var type = child.typeQualifier(); + + if (INCLUDE_UPDATERS.contains(type)) { + template = replaceSection(template, type, updaterDoc(child)); + } + } + + writeFile(OUT_FILE, template); + assertFileEquals(original, OUT_FILE); + } + + private NodeAdapter readUpdaterConfig() { + var json = jsonNodeFromResource(ROUTER_CONFIG_PATH); + var conf = new RouterConfig(json, ROUTER_CONFIG_PATH, false); + return conf.asNodeAdapter().child("updaters"); + } + + private String updaterDoc(NodeAdapter node) { + DocBuilder buf = new DocBuilder(); + addParameterSummaryTable(buf, node); + addDetailsSection(buf, node); + addExample(buf, node); + return buf.toString(); + } + + private void addParameterSummaryTable(DocBuilder buf, NodeAdapter node) { + buf.addSection(new ParameterSummaryTable(SKIP_NODES).createTable(node).toMarkdownTable()); + } + + private void addDetailsSection(DocBuilder buf, NodeAdapter node) { + String details = getParameterDetailsTable(node); + + if (!details.isBlank()) { + buf.header(5, "Parameter details", null).addSection(details); + } + } + + private String getParameterDetailsTable(NodeAdapter node) { + return ParameterDetailsList.listParametersWithDetails(node, SKIP_NODES, HEADER_4); + } + + private void addExample(DocBuilder buf, NodeAdapter node) { + buf.addSection("##### Example configuration"); + buf.addUpdaterExample(ROUTER_CONFIG_FILENAME, node.rawNode()); + } +} diff --git a/src/test/java/org/opentripplanner/generate/doc/SiriConfigDocTest.java b/src/test/java/org/opentripplanner/generate/doc/SiriConfigDocTest.java index 1ceb0ab092c..2474f37c402 100644 --- a/src/test/java/org/opentripplanner/generate/doc/SiriConfigDocTest.java +++ b/src/test/java/org/opentripplanner/generate/doc/SiriConfigDocTest.java @@ -25,8 +25,8 @@ @GeneratesDocumentation public class SiriConfigDocTest { - private static final File TEMPLATE = new File(TEMPLATE_ROOT, "SiriUpdater.md"); - private static final File OUT_FILE = new File(DOCS_ROOT, "sandbox/SiriUpdater.md"); + private static final File TEMPLATE = new File(TEMPLATE_ROOT, "sandbox/siri/SiriUpdater.md"); + private static final File OUT_FILE = new File(DOCS_ROOT, "sandbox/siri/SiriUpdater.md"); private static final String ROUTER_CONFIG_PATH = "standalone/config/" + ROUTER_CONFIG_FILENAME; private static final Set INCLUDE_UPDATERS = Set.of("siri-et-updater", "siri-sx-updater"); diff --git a/src/test/java/org/opentripplanner/generate/doc/UpdaterConfigDocTest.java b/src/test/java/org/opentripplanner/generate/doc/UpdaterConfigDocTest.java index fa5abca7814..4bdfe782615 100644 --- a/src/test/java/org/opentripplanner/generate/doc/UpdaterConfigDocTest.java +++ b/src/test/java/org/opentripplanner/generate/doc/UpdaterConfigDocTest.java @@ -31,6 +31,7 @@ public class UpdaterConfigDocTest { private static final String ROUTER_CONFIG_PATH = "standalone/config/" + ROUTER_CONFIG_FILENAME; private static final Set SKIP_UPDATERS = Set.of( "siri-azure-sx-updater", + "siri-azure-et-updater", "vehicle-parking", "siri-et-updater", "siri-sx-updater" diff --git a/src/test/java/org/opentripplanner/graph_builder/module/GtfsFeedIdTest.java b/src/test/java/org/opentripplanner/graph_builder/module/GtfsFeedIdTest.java index 71a1d382983..133ec71070a 100644 --- a/src/test/java/org/opentripplanner/graph_builder/module/GtfsFeedIdTest.java +++ b/src/test/java/org/opentripplanner/graph_builder/module/GtfsFeedIdTest.java @@ -9,16 +9,18 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; -import org.opentripplanner.test.support.VariableSource; +import org.junit.jupiter.params.provider.MethodSource; class GtfsFeedIdTest { private static final String NUMBERS_ONLY_REGEX = "^\\d+$"; - static Stream emptyCases = Stream.of(null, "", " ", "\n", " ").map(Arguments::of); + static Stream emptyCases() { + return Stream.of(null, "", " ", "\n", " ").map(Arguments::of); + } @ParameterizedTest - @VariableSource("emptyCases") + @MethodSource("emptyCases") void autogenerateNumber(String id) { String feedId = feedId(id); assertTrue(feedId.matches(NUMBERS_ONLY_REGEX), "'%s' is not an integer.".formatted(feedId)); diff --git a/src/test/java/org/opentripplanner/graph_builder/module/GtfsModuleTest.java b/src/test/java/org/opentripplanner/graph_builder/module/GtfsModuleTest.java index c628a14ad43..8123661990e 100644 --- a/src/test/java/org/opentripplanner/graph_builder/module/GtfsModuleTest.java +++ b/src/test/java/org/opentripplanner/graph_builder/module/GtfsModuleTest.java @@ -2,6 +2,7 @@ import static graphql.Assert.assertNotNull; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; import java.util.List; import java.util.stream.Collectors; @@ -23,7 +24,7 @@ class GtfsModuleTest { @Test - public void addShapesForFrequencyTrips() { + void addShapesForFrequencyTrips() { var model = buildTestModel(); var bundle = new GtfsBundle(ConstantsForTests.SIMPLE_GTFS); @@ -44,7 +45,7 @@ public void addShapesForFrequencyTrips() { assertEquals(1, frequencyTripPattern.size()); - var tripPattern = frequencyTripPattern.get(0); + var tripPattern = frequencyTripPattern.getFirst(); assertNotNull(tripPattern.getGeometry()); assertNotNull(tripPattern.getHopGeometry(0)); @@ -53,6 +54,20 @@ public void addShapesForFrequencyTrips() { assertNotNull(pattern.getHopGeometry(0)); } + @Test + void duplicateFeedId() { + var bundles = List.of(bundle("A"), bundle("A")); + var model = buildTestModel(); + + var module = new GtfsModule( + bundles, + model.transitModel, + model.graph, + ServiceDateInterval.unbounded() + ); + assertThrows(IllegalArgumentException.class, module::buildGraph); + } + private static TestModels buildTestModel() { var deduplicator = new Deduplicator(); var stopModel = new StopModel(); @@ -63,15 +78,15 @@ private static TestModels buildTestModel() { record TestModels(Graph graph, TransitModel transitModel) {} + static GtfsBundle bundle(String feedId) { + var b = new GtfsBundle(ResourceLoader.of(GtfsModuleTest.class).file("/gtfs/interlining")); + b.setFeedId(new GtfsFeedId.Builder().id(feedId).build()); + return b; + } + @Nested class Interlining { - static GtfsBundle bundle(String feedId) { - var b = new GtfsBundle(ResourceLoader.of(GtfsModuleTest.class).file("/gtfs/interlining")); - b.setFeedId(new GtfsFeedId.Builder().id(feedId).build()); - return b; - } - static List interliningCases() { return List.of( Arguments.of(List.of(bundle("A")), 2), @@ -86,7 +101,7 @@ static List interliningCases() { */ @ParameterizedTest(name = "Bundles {0} should generate {1} stay-seated transfers") @MethodSource("interliningCases") - public void interline(List bundles, int expectedTransfers) { + void interline(List bundles, int expectedTransfers) { var model = buildTestModel(); var feedIds = bundles.stream().map(GtfsBundle::getFeedId).collect(Collectors.toSet()); diff --git a/src/test/java/org/opentripplanner/graph_builder/module/OsmBoardingLocationsModuleTest.java b/src/test/java/org/opentripplanner/graph_builder/module/OsmBoardingLocationsModuleTest.java index 41c77f5df6e..1d8d819b5cb 100644 --- a/src/test/java/org/opentripplanner/graph_builder/module/OsmBoardingLocationsModuleTest.java +++ b/src/test/java/org/opentripplanner/graph_builder/module/OsmBoardingLocationsModuleTest.java @@ -9,6 +9,7 @@ import java.util.stream.Stream; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import org.opentripplanner.framework.i18n.NonLocalizedString; import org.opentripplanner.graph_builder.module.osm.OsmModule; import org.opentripplanner.openstreetmap.OsmProvider; @@ -23,7 +24,6 @@ import org.opentripplanner.street.model.vertex.VertexFactory; import org.opentripplanner.street.model.vertex.VertexLabel; import org.opentripplanner.test.support.ResourceLoader; -import org.opentripplanner.test.support.VariableSource; import org.opentripplanner.transit.model._data.TransitModelForTest; import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.framework.Deduplicator; @@ -49,21 +49,23 @@ class OsmBoardingLocationsModuleTest { RegularStop busStop = testModel.stop("de:08115:4512:5:C", 48.59434, 8.86452).build(); RegularStop floatingBusStop = testModel.stop("floating-bus-stop", 48.59417, 8.86464).build(); - static Stream testCases = Stream.of( - Arguments.of( - false, - Stream - .of(302563833L, 3223067049L, 302563836L, 3223067680L, 302563834L, 768590748L, 302563839L) - .map(VertexLabel::osm) - .collect(Collectors.toSet()) - ), - Arguments.of(true, Set.of(VertexLabel.osm(3223067049L), VertexLabel.osm(768590748))) - ); + static Stream testCases() { + return Stream.of( + Arguments.of( + false, + Stream + .of(302563833L, 3223067049L, 302563836L, 3223067680L, 302563834L, 768590748L, 302563839L) + .map(VertexLabel::osm) + .collect(Collectors.toSet()) + ), + Arguments.of(true, Set.of(VertexLabel.osm(3223067049L), VertexLabel.osm(768590748))) + ); + } @ParameterizedTest( name = "add boarding locations and link them to platform edges when skipVisibility={0}" ) - @VariableSource("testCases") + @MethodSource("testCases") void addAndLinkBoardingLocations(boolean areaVisibility, Set linkedVertices) { var deduplicator = new Deduplicator(); var graph = new Graph(deduplicator); diff --git a/src/test/java/org/opentripplanner/graph_builder/module/osm/TriangleInequalityTest.java b/src/test/java/org/opentripplanner/graph_builder/module/osm/TriangleInequalityTest.java index 4cdada95e4b..b6c498de44c 100644 --- a/src/test/java/org/opentripplanner/graph_builder/module/osm/TriangleInequalityTest.java +++ b/src/test/java/org/opentripplanner/graph_builder/module/osm/TriangleInequalityTest.java @@ -180,8 +180,9 @@ private void checkTriangleInequality(RequestModes modes, List fil preferences .withWalk(walk -> walk.withStairsReluctance(1.0).withSpeed(1.0).withReluctance(1.0)) .withStreet(street -> street.withTurnReluctance(1.0)) - .withCar(car -> car.withSpeed(1.0).withReluctance(1.0)) + .withCar(car -> car.withReluctance(1.0)) .withBike(bike -> bike.withSpeed(1.0).withReluctance(1.0)) + .withScooter(scooter -> scooter.withSpeed(1.0).withReluctance(1.0)) ); if (modes != null) { diff --git a/src/test/java/org/opentripplanner/gtfs/interlining/InterlineProcessorTest.java b/src/test/java/org/opentripplanner/gtfs/interlining/InterlineProcessorTest.java index 1e931589204..67ca61f0403 100644 --- a/src/test/java/org/opentripplanner/gtfs/interlining/InterlineProcessorTest.java +++ b/src/test/java/org/opentripplanner/gtfs/interlining/InterlineProcessorTest.java @@ -10,12 +10,12 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; import org.opentripplanner.gtfs.mapping.StaySeatedNotAllowed; import org.opentripplanner.model.calendar.CalendarServiceData; import org.opentripplanner.model.plan.PlanTestConstants; import org.opentripplanner.model.transfer.DefaultTransferService; -import org.opentripplanner.test.support.VariableSource; import org.opentripplanner.transit.model._data.TransitModelForTest; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.model.framework.FeedScopedId; @@ -35,63 +35,65 @@ class InterlineProcessorTest implements PlanTestConstants { tripPattern("trip-5", "block-2", "service-4") ); - static Stream interlineTestCases = Stream.of( - Arguments.of( - List.of( - new FeedScopedId("1", "service-1"), - new FeedScopedId("1", "service-2"), - new FeedScopedId("1", "service-3"), - new FeedScopedId("1", "service-4") + static Stream interlineTestCases() { + return Stream.of( + Arguments.of( + List.of( + new FeedScopedId("1", "service-1"), + new FeedScopedId("1", "service-2"), + new FeedScopedId("1", "service-3"), + new FeedScopedId("1", "service-4") + ), + List.of( + List.of(LocalDate.of(2023, Month.JANUARY, 1), LocalDate.of(2023, Month.JANUARY, 5)), + List.of(LocalDate.of(2023, Month.JANUARY, 1)), + List.of(LocalDate.of(2023, Month.JANUARY, 1)), + List.of(LocalDate.of(2023, Month.JANUARY, 1)) + ), + "[ConstrainedTransfer{from: TripTP{F:trip-2, stopPos 2}, to: TripTP{F:trip-3, stopPos 0}, " + + "constraint: {staySeated}}, ConstrainedTransfer{from: TripTP{F:trip-1, stopPos 2}, " + + "to: TripTP{F:trip-2, stopPos 0}, constraint: {staySeated}}, " + + "ConstrainedTransfer{from: TripTP{F:trip-3, stopPos 2}, to: TripTP{F:trip-4, stopPos 0}, constraint: {staySeated}}]" ), - List.of( - List.of(LocalDate.of(2023, Month.JANUARY, 1), LocalDate.of(2023, Month.JANUARY, 5)), - List.of(LocalDate.of(2023, Month.JANUARY, 1)), - List.of(LocalDate.of(2023, Month.JANUARY, 1)), - List.of(LocalDate.of(2023, Month.JANUARY, 1)) + Arguments.of( + List.of( + new FeedScopedId("1", "service-1"), + new FeedScopedId("1", "service-2"), + new FeedScopedId("1", "service-3"), + new FeedScopedId("1", "service-4") + ), + List.of( + List.of(LocalDate.of(2023, Month.JANUARY, 1), LocalDate.of(2023, Month.JANUARY, 5)), + List.of(LocalDate.of(2023, Month.JANUARY, 1)), + List.of(LocalDate.of(2023, Month.JANUARY, 5)), + List.of(LocalDate.of(2023, Month.JANUARY, 1)) + ), + "[ConstrainedTransfer{from: TripTP{F:trip-2, stopPos 2}, to: TripTP{F:trip-3, stopPos 0}, " + + "constraint: {staySeated}}, ConstrainedTransfer{from: TripTP{F:trip-1, stopPos 2}, " + + "to: TripTP{F:trip-2, stopPos 0}, constraint: {staySeated}}, " + + "ConstrainedTransfer{from: TripTP{F:trip-2, stopPos 2}, to: TripTP{F:trip-4, stopPos 0}, constraint: {staySeated}}]" ), - "[ConstrainedTransfer{from: TripTP{F:trip-2, stopPos 2}, to: TripTP{F:trip-3, stopPos 0}, " + - "constraint: {staySeated}}, ConstrainedTransfer{from: TripTP{F:trip-1, stopPos 2}, " + - "to: TripTP{F:trip-2, stopPos 0}, constraint: {staySeated}}, " + - "ConstrainedTransfer{from: TripTP{F:trip-3, stopPos 2}, to: TripTP{F:trip-4, stopPos 0}, constraint: {staySeated}}]" - ), - Arguments.of( - List.of( - new FeedScopedId("1", "service-1"), - new FeedScopedId("1", "service-2"), - new FeedScopedId("1", "service-3"), - new FeedScopedId("1", "service-4") - ), - List.of( - List.of(LocalDate.of(2023, Month.JANUARY, 1), LocalDate.of(2023, Month.JANUARY, 5)), - List.of(LocalDate.of(2023, Month.JANUARY, 1)), - List.of(LocalDate.of(2023, Month.JANUARY, 5)), - List.of(LocalDate.of(2023, Month.JANUARY, 1)) - ), - "[ConstrainedTransfer{from: TripTP{F:trip-2, stopPos 2}, to: TripTP{F:trip-3, stopPos 0}, " + - "constraint: {staySeated}}, ConstrainedTransfer{from: TripTP{F:trip-1, stopPos 2}, " + - "to: TripTP{F:trip-2, stopPos 0}, constraint: {staySeated}}, " + - "ConstrainedTransfer{from: TripTP{F:trip-2, stopPos 2}, to: TripTP{F:trip-4, stopPos 0}, constraint: {staySeated}}]" - ), - // No common days between services - Arguments.of( - List.of( - new FeedScopedId("1", "service-1"), - new FeedScopedId("1", "service-2"), - new FeedScopedId("1", "service-3"), - new FeedScopedId("1", "service-4") - ), - List.of( - List.of(LocalDate.of(2023, Month.JANUARY, 1), LocalDate.of(2023, Month.JANUARY, 5)), - List.of(LocalDate.of(2023, Month.JANUARY, 2)), - List.of(LocalDate.of(2023, Month.JANUARY, 3)), - List.of(LocalDate.of(2023, Month.JANUARY, 1)) - ), - "[ConstrainedTransfer{from: TripTP{F:trip-1, stopPos 2}, to: TripTP{F:trip-2, stopPos 0}, constraint: {staySeated}}]" - ) - ); + // No common days between services + Arguments.of( + List.of( + new FeedScopedId("1", "service-1"), + new FeedScopedId("1", "service-2"), + new FeedScopedId("1", "service-3"), + new FeedScopedId("1", "service-4") + ), + List.of( + List.of(LocalDate.of(2023, Month.JANUARY, 1), LocalDate.of(2023, Month.JANUARY, 5)), + List.of(LocalDate.of(2023, Month.JANUARY, 2)), + List.of(LocalDate.of(2023, Month.JANUARY, 3)), + List.of(LocalDate.of(2023, Month.JANUARY, 1)) + ), + "[ConstrainedTransfer{from: TripTP{F:trip-1, stopPos 2}, to: TripTP{F:trip-2, stopPos 0}, constraint: {staySeated}}]" + ) + ); + } @ParameterizedTest(name = "{0} services with {1} dates should generate transfers: {2}") - @VariableSource("interlineTestCases") + @MethodSource("interlineTestCases") void testInterline( List serviceIds, List> serviceDates, diff --git a/src/test/java/org/opentripplanner/gtfs/mapping/FareLegRuleMapperTest.java b/src/test/java/org/opentripplanner/gtfs/mapping/FareLegRuleMapperTest.java index 4a2a8533add..dbe833a7aaa 100644 --- a/src/test/java/org/opentripplanner/gtfs/mapping/FareLegRuleMapperTest.java +++ b/src/test/java/org/opentripplanner/gtfs/mapping/FareLegRuleMapperTest.java @@ -57,7 +57,7 @@ Stream mapDistance() { tc.toString(), () -> { var obaRule = new FareLegRule(); - obaRule.setFareProductId(productId); + obaRule.setFareProductId(fp.getFareProductId()); obaRule.setDistanceType(tc.distanceType); obaRule.setMinDistance(tc.minDistance); obaRule.setMaxDistance(tc.maxDistance); diff --git a/src/test/java/org/opentripplanner/gtfs/mapping/LocationGroupMapperTest.java b/src/test/java/org/opentripplanner/gtfs/mapping/LocationGroupMapperTest.java new file mode 100644 index 00000000000..f8fe52c4731 --- /dev/null +++ b/src/test/java/org/opentripplanner/gtfs/mapping/LocationGroupMapperTest.java @@ -0,0 +1,51 @@ +package org.opentripplanner.gtfs.mapping; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.Set; +import java.util.stream.Collectors; +import javax.annotation.Nonnull; +import org.junit.jupiter.api.Test; +import org.onebusaway.gtfs.model.AgencyAndId; +import org.onebusaway.gtfs.model.LocationGroup; +import org.onebusaway.gtfs.model.Stop; +import org.opentripplanner.transit.model.framework.FeedScopedId; +import org.opentripplanner.transit.model.site.StopLocation; +import org.opentripplanner.transit.service.StopModel; + +class LocationGroupMapperTest { + + private static final String NAME = "A GROUP"; + + @Test + void map() { + var builder = StopModel.of(); + var mapper = new LocationGroupMapper( + new StopMapper(new TranslationHelper(), id -> null, builder), + new LocationMapper(builder), + builder + ); + + var lg = new LocationGroup(); + lg.setId(id("group-1")); + lg.setName(NAME); + + var stop = new Stop(); + stop.setId(id("stop-1")); + stop.setLat(1); + stop.setLon(1); + + lg.addLocation(stop); + var groupStop = mapper.map(lg); + assertEquals(NAME, groupStop.getName().toString()); + assertEquals( + Set.of(new FeedScopedId("1", "stop-1")), + groupStop.getChildLocations().stream().map(StopLocation::getId).collect(Collectors.toSet()) + ); + } + + @Nonnull + private static AgencyAndId id(String id) { + return new AgencyAndId("1", id); + } +} diff --git a/src/test/java/org/opentripplanner/gtfs/mapping/LocationMapperTest.java b/src/test/java/org/opentripplanner/gtfs/mapping/LocationMapperTest.java index e7a291fa976..4461c5a31f1 100644 --- a/src/test/java/org/opentripplanner/gtfs/mapping/LocationMapperTest.java +++ b/src/test/java/org/opentripplanner/gtfs/mapping/LocationMapperTest.java @@ -8,20 +8,19 @@ import org.geojson.Polygon; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import org.onebusaway.gtfs.model.AgencyAndId; import org.onebusaway.gtfs.model.Location; -import org.opentripplanner.test.support.VariableSource; import org.opentripplanner.transit.service.StopModel; class LocationMapperTest { - static Stream testCases = Stream.of( - Arguments.of(null, true), - Arguments.of("a name", false) - ); + static Stream testCases() { + return Stream.of(Arguments.of(null, true), Arguments.of("a name", false)); + } @ParameterizedTest(name = "a name of <{0}> should set bogusName={1}") - @VariableSource("testCases") + @MethodSource("testCases") void testMapping(String name, boolean isBogusName) { var gtfsLocation = new Location(); gtfsLocation.setId(new AgencyAndId("1", "zone-3")); diff --git a/src/test/java/org/opentripplanner/gtfs/mapping/StopAndStationMapperTest.java b/src/test/java/org/opentripplanner/gtfs/mapping/StopAndStationMapperTest.java index 623cef1622c..d15ad9d75cf 100644 --- a/src/test/java/org/opentripplanner/gtfs/mapping/StopAndStationMapperTest.java +++ b/src/test/java/org/opentripplanner/gtfs/mapping/StopAndStationMapperTest.java @@ -72,14 +72,14 @@ public class StopAndStationMapperTest { } @Test - public void testMapCollection() { + void testMapCollection() { assertNull(subject.map((Collection) null)); assertTrue(subject.map(Collections.emptyList()).isEmpty()); assertEquals(1, subject.map(Collections.singleton(STOP)).size()); } @Test - public void testMap() { + void testMap() { RegularStop result = subject.map(STOP); assertEquals("A:1", result.getId().toString()); @@ -94,7 +94,7 @@ public void testMap() { } @Test - public void testMapWithNulls() { + void testMapWithNulls() { Stop input = new Stop(); input.setId(AGENCY_AND_ID); input.setName(NAME); @@ -114,7 +114,7 @@ public void testMapWithNulls() { } @Test - public void verifyMissingCoordinateThrowsException() { + void verifyMissingCoordinateThrowsException() { Stop input = new Stop(); input.setId(AGENCY_AND_ID); input.setName(NAME); @@ -128,7 +128,7 @@ public void verifyMissingCoordinateThrowsException() { /** Mapping the same object twice, should return the the same instance. */ @Test - public void testMapCache() { + void testMapCache() { RegularStop result1 = subject.map(STOP); RegularStop result2 = subject.map(STOP); diff --git a/src/test/java/org/opentripplanner/gtfs/mapping/StopAreaMapperTest.java b/src/test/java/org/opentripplanner/gtfs/mapping/StopAreaMapperTest.java new file mode 100644 index 00000000000..f8597954475 --- /dev/null +++ b/src/test/java/org/opentripplanner/gtfs/mapping/StopAreaMapperTest.java @@ -0,0 +1,74 @@ +package org.opentripplanner.gtfs.mapping; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.Set; +import java.util.stream.Collectors; +import javax.annotation.Nonnull; +import org.junit.jupiter.api.Test; +import org.onebusaway.gtfs.model.AgencyAndId; +import org.onebusaway.gtfs.model.Area; +import org.onebusaway.gtfs.model.Location; +import org.onebusaway.gtfs.model.Stop; +import org.onebusaway.gtfs.model.StopArea; +import org.opentripplanner._support.geometry.Polygons; +import org.opentripplanner.transit.service.StopModel; + +class StopAreaMapperTest { + + private static final String NAME = "Floxjam"; + private static final AgencyAndId AREA_ID = agencyAndId("flox"); + + @Test + void map() { + var stopModel = StopModel.of(); + var stopMapper = new StopMapper(new TranslationHelper(), ignored -> null, stopModel); + var locationMapper = new LocationMapper(stopModel); + var mapper = new StopAreaMapper(stopMapper, locationMapper, stopModel); + + var area = new Area(); + area.setId(AREA_ID); + area.setName(NAME); + + var stop1 = stop("stop1"); + var stop2 = stop("stop2"); + var location = location("location"); + + var stopArea = new StopArea(); + stopArea.setArea(area); + stopArea.addLocation(stop1); + stopArea.addLocation(stop2); + stopArea.addLocation(location); + var areaStop = mapper.map(stopArea); + + assertEquals(NAME, areaStop.getName().toString()); + var stopIds = areaStop + .getChildLocations() + .stream() + .map(l -> l.getId().toString()) + .collect(Collectors.toSet()); + assertEquals(Set.of("1:location", "1:stop1", "1:stop2"), stopIds); + } + + private static Stop stop(String id) { + var stop = new Stop(); + stop.setId(agencyAndId(id)); + stop.setLat(1); + stop.setLon(2); + stop.setName("A stop"); + return stop; + } + + private static Location location(String id) { + var stop = new Location(); + stop.setId(agencyAndId(id)); + stop.setName("A stop"); + stop.setGeometry(Polygons.toGeoJson(Polygons.BERLIN)); + return stop; + } + + @Nonnull + private static AgencyAndId agencyAndId(String id) { + return new AgencyAndId("1", id); + } +} diff --git a/src/test/java/org/opentripplanner/gtfs/mapping/StopTimeMapperTest.java b/src/test/java/org/opentripplanner/gtfs/mapping/StopTimeMapperTest.java index 94c203c76ae..826db744d43 100644 --- a/src/test/java/org/opentripplanner/gtfs/mapping/StopTimeMapperTest.java +++ b/src/test/java/org/opentripplanner/gtfs/mapping/StopTimeMapperTest.java @@ -82,11 +82,17 @@ public class StopTimeMapperTest { locationMapper, stopModelBuilder ); + private final StopAreaMapper stopAreaMapper = new StopAreaMapper( + stopMapper, + locationMapper, + stopModelBuilder + ); private final TranslationHelper translationHelper = new TranslationHelper(); private final StopTimeMapper subject = new StopTimeMapper( stopMapper, locationMapper, locationGroupMapper, + stopAreaMapper, new TripMapper( new RouteMapper(new AgencyMapper(FEED_ID), ISSUE_STORE, translationHelper), new DirectionMapper(ISSUE_STORE), diff --git a/src/test/java/org/opentripplanner/gtfs/mapping/TransferMapperTest.java b/src/test/java/org/opentripplanner/gtfs/mapping/TransferMapperTest.java index 0788643a472..458610d9660 100644 --- a/src/test/java/org/opentripplanner/gtfs/mapping/TransferMapperTest.java +++ b/src/test/java/org/opentripplanner/gtfs/mapping/TransferMapperTest.java @@ -53,7 +53,11 @@ public class TransferMapperTest { LOCATION_MAPPER, STOP_MODEL_BUILDER ); - + private static final StopAreaMapper STOP_AREA_MAPPER = new StopAreaMapper( + STOP_MAPPER, + LOCATION_MAPPER, + STOP_MODEL_BUILDER + ); private static StopTimeMapper STOP_TIME_MAPPER; private static final Integer ID = 45; @@ -92,6 +96,7 @@ void prepare() { STOP_MAPPER, LOCATION_MAPPER, LOCATION_GROUP_MAPPER, + STOP_AREA_MAPPER, new TripMapper( new RouteMapper(new AgencyMapper(FEED_ID), ISSUE_STORE, TRANSLATION_HELPER), new DirectionMapper(ISSUE_STORE), diff --git a/src/test/java/org/opentripplanner/gtfs/mapping/TransitModeMapperTest.java b/src/test/java/org/opentripplanner/gtfs/mapping/TransitModeMapperTest.java index 39973a769c0..b2e5b1a8a4d 100644 --- a/src/test/java/org/opentripplanner/gtfs/mapping/TransitModeMapperTest.java +++ b/src/test/java/org/opentripplanner/gtfs/mapping/TransitModeMapperTest.java @@ -7,23 +7,25 @@ import java.util.stream.Stream; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; -import org.opentripplanner.test.support.VariableSource; +import org.junit.jupiter.params.provider.MethodSource; import org.opentripplanner.transit.model.basic.TransitMode; class TransitModeMapperTest { - static Stream testCases = Stream.of( - Arguments.of(1500, TAXI), - Arguments.of(1510, TAXI), - Arguments.of(1551, CARPOOL), - Arguments.of(1555, CARPOOL), - Arguments.of(1560, CARPOOL), - Arguments.of(1561, TAXI), - Arguments.of(1580, TAXI) - ); + static Stream testCases() { + return Stream.of( + Arguments.of(1500, TAXI), + Arguments.of(1510, TAXI), + Arguments.of(1551, CARPOOL), + Arguments.of(1555, CARPOOL), + Arguments.of(1560, CARPOOL), + Arguments.of(1561, TAXI), + Arguments.of(1580, TAXI) + ); + } @ParameterizedTest(name = "{0} should map to {1}") - @VariableSource("testCases") + @MethodSource("testCases") void map(int mode, TransitMode expectedMode) { assertEquals(expectedMode, TransitModeMapper.mapMode(mode)); } diff --git a/src/test/java/org/opentripplanner/model/TripPatternTest.java b/src/test/java/org/opentripplanner/model/TripPatternTest.java index 0ea509be36b..bad159eb3cd 100644 --- a/src/test/java/org/opentripplanner/model/TripPatternTest.java +++ b/src/test/java/org/opentripplanner/model/TripPatternTest.java @@ -95,11 +95,11 @@ public TripPattern setupTripPattern( List geometry ) { var builder = StopPattern.create(2); - builder.stops[0] = origin; - builder.stops[1] = destination; + builder.stops.with(0, origin); + builder.stops.with(1, destination); for (int i = 0; i < 2; i++) { - builder.pickups[i] = PickDrop.SCHEDULED; - builder.dropoffs[i] = PickDrop.SCHEDULED; + builder.pickups.with(i, PickDrop.SCHEDULED); + builder.dropoffs.with(i, PickDrop.SCHEDULED); } var stopPattern = builder.build(); diff --git a/src/test/java/org/opentripplanner/model/plan/PlaceTest.java b/src/test/java/org/opentripplanner/model/plan/PlaceTest.java index 573e4597e39..95d7cf629a2 100644 --- a/src/test/java/org/opentripplanner/model/plan/PlaceTest.java +++ b/src/test/java/org/opentripplanner/model/plan/PlaceTest.java @@ -9,13 +9,13 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import org.locationtech.jts.geom.Coordinate; import org.locationtech.jts.geom.Geometry; import org.opentripplanner.framework.geometry.GeometryUtils; import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.framework.i18n.NonLocalizedString; import org.opentripplanner.street.model.vertex.SimpleVertex; -import org.opentripplanner.test.support.VariableSource; import org.opentripplanner.transit.model._data.TransitModelForTest; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.site.RegularStop; @@ -65,17 +65,19 @@ public void sameLocationBasedOnStopId() { assertFalse(otherPlace.sameLocation(aPlace), "other place(symmetric)"); } - static Stream flexStopCases = Stream.of( - Arguments.of(null, "an intersection name"), - Arguments.of(new NonLocalizedString("1:stop_id"), "an intersection name (part of 1:stop_id)"), - Arguments.of( - new NonLocalizedString("Flex Zone 123"), - "an intersection name (part of Flex Zone 123)" - ) - ); + static Stream flexStopCases() { + return Stream.of( + Arguments.of(null, "an intersection name"), + Arguments.of(new NonLocalizedString("1:stop_id"), "an intersection name (part of 1:stop_id)"), + Arguments.of( + new NonLocalizedString("Flex Zone 123"), + "an intersection name (part of Flex Zone 123)" + ) + ); + } @ParameterizedTest(name = "Flex stop name of {0} should lead to a place name of {1}") - @VariableSource("flexStopCases") + @MethodSource("flexStopCases") public void flexStop(I18NString stopName, String expectedPlaceName) { var stop = StopModel .of() diff --git a/src/test/java/org/opentripplanner/model/plan/RelativeDirectionTest.java b/src/test/java/org/opentripplanner/model/plan/RelativeDirectionTest.java index c60861d28f8..c3cb4e0a78c 100644 --- a/src/test/java/org/opentripplanner/model/plan/RelativeDirectionTest.java +++ b/src/test/java/org/opentripplanner/model/plan/RelativeDirectionTest.java @@ -15,37 +15,39 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; -import org.opentripplanner.test.support.VariableSource; +import org.junit.jupiter.params.provider.MethodSource; class RelativeDirectionTest { @SuppressWarnings("unused") - static Stream testCasesNormal = Stream.of( - // Turn Right - tc(0, CONTINUE), - tc(17, CONTINUE), - tc(18, SLIGHTLY_RIGHT), - tc(40, SLIGHTLY_RIGHT), - tc(41, RIGHT), - tc(114, RIGHT), - tc(115, HARD_RIGHT), - tc(179, HARD_RIGHT), - tc(180, HARD_LEFT), - // Turn Left - tc(0, CONTINUE), - tc(-17, CONTINUE), - tc(-18, SLIGHTLY_LEFT), - tc(-40, SLIGHTLY_LEFT), - tc(-41, LEFT), - tc(-114, LEFT), - tc(-115, HARD_LEFT), - tc(-179, HARD_LEFT), - tc(-180, HARD_LEFT), - tc(-181, HARD_RIGHT) - ); + static Stream testCasesNormal() { + return Stream.of( + // Turn Right + tc(0, CONTINUE), + tc(17, CONTINUE), + tc(18, SLIGHTLY_RIGHT), + tc(40, SLIGHTLY_RIGHT), + tc(41, RIGHT), + tc(114, RIGHT), + tc(115, HARD_RIGHT), + tc(179, HARD_RIGHT), + tc(180, HARD_LEFT), + // Turn Left + tc(0, CONTINUE), + tc(-17, CONTINUE), + tc(-18, SLIGHTLY_LEFT), + tc(-40, SLIGHTLY_LEFT), + tc(-41, LEFT), + tc(-114, LEFT), + tc(-115, HARD_LEFT), + tc(-179, HARD_LEFT), + tc(-180, HARD_LEFT), + tc(-181, HARD_RIGHT) + ); + } @ParameterizedTest(name = "Turning {0} degrees should give a relative direction of {1}") - @VariableSource("testCasesNormal") + @MethodSource("testCasesNormal") void testCalculateForNormalIntersections(int thisAngleDegrees, RelativeDirection expected) { assertEquals(expected, RelativeDirection.calculate(angle(thisAngleDegrees), false)); } diff --git a/src/test/java/org/opentripplanner/netex/mapping/AuthorityToAgencyMapperTest.java b/src/test/java/org/opentripplanner/netex/mapping/AuthorityToAgencyMapperTest.java index 8ab84a4084a..5fa0846bec0 100644 --- a/src/test/java/org/opentripplanner/netex/mapping/AuthorityToAgencyMapperTest.java +++ b/src/test/java/org/opentripplanner/netex/mapping/AuthorityToAgencyMapperTest.java @@ -14,6 +14,7 @@ public class AuthorityToAgencyMapperTest { private static final String ID = "ID"; private static final String NAME = "Olsen"; + private static final String SHORT_NAME = "Short"; private static final String URL = "http://olsen.no/help"; private static final String PHONE = "+47 88882222"; private static final String TIME_ZONE = "CET"; @@ -24,7 +25,7 @@ public class AuthorityToAgencyMapperTest { @Test public void mapAgency() { // Given - Authority authority = authority(ID, NAME, URL, PHONE); + Authority authority = authority(ID, NAME, SHORT_NAME, URL, PHONE); // When mapped Agency a = mapper.mapAuthorityToAgency(authority); @@ -40,7 +41,7 @@ public void mapAgency() { @Test public void mapAgencyWithoutOptionalElements() { // Given - Authority authority = authority(ID, NAME, null, null); + Authority authority = authority(ID, NAME, null, null, null); // When mapped Agency a = mapper.mapAuthorityToAgency(authority); @@ -50,6 +51,18 @@ public void mapAgencyWithoutOptionalElements() { assertNull(a.getPhone()); } + @Test + public void mapAgencyWithShortName() { + // Given + Authority authority = authority(ID, null, SHORT_NAME, null, null); + + // When mapped + Agency a = mapper.mapAuthorityToAgency(authority); + + // Then expect + assertEquals(SHORT_NAME, a.getName()); + } + @Test public void getDefaultAgency() { // When mapped @@ -64,9 +77,16 @@ public void getDefaultAgency() { } @SuppressWarnings("SameParameterValue") - private static Authority authority(String id, String name, String url, String phone) { + private static Authority authority( + String id, + String name, + String shortName, + String url, + String phone + ) { return new Authority() .withId(id) + .withShortName(new MultilingualString().withValue(shortName)) .withName(new MultilingualString().withValue(name)) .withContactDetails(new ContactStructure().withUrl(url).withPhone(phone)); } diff --git a/src/test/java/org/opentripplanner/netex/mapping/ServiceLinkMapperTest.java b/src/test/java/org/opentripplanner/netex/mapping/ServiceLinkMapperTest.java index afd0604a1e5..aa19a436112 100644 --- a/src/test/java/org/opentripplanner/netex/mapping/ServiceLinkMapperTest.java +++ b/src/test/java/org/opentripplanner/netex/mapping/ServiceLinkMapperTest.java @@ -124,7 +124,7 @@ void setUpTestData() { new NetexMainAndSubMode(TransitMode.BUS, "UNKNOWN"), Accessibility.NO_INFORMATION ); - stopPatternBuilder.stops[i] = stop; + stopPatternBuilder.stops.with(i, stop); stopsById.add(stop); } diff --git a/src/test/java/org/opentripplanner/openstreetmap/OSMOpeningHoursParserTest.java b/src/test/java/org/opentripplanner/openstreetmap/OSMOpeningHoursParserTest.java index f1068bb8220..34f141e8504 100644 --- a/src/test/java/org/opentripplanner/openstreetmap/OSMOpeningHoursParserTest.java +++ b/src/test/java/org/opentripplanner/openstreetmap/OSMOpeningHoursParserTest.java @@ -12,9 +12,9 @@ import java.util.stream.Stream; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import org.opentripplanner._support.time.ZoneIds; import org.opentripplanner.model.calendar.openinghours.OpeningHoursCalendarService; -import org.opentripplanner.test.support.VariableSource; import org.opentripplanner.transit.model.framework.Deduplicator; public class OSMOpeningHoursParserTest { @@ -30,150 +30,152 @@ public class OSMOpeningHoursParserTest { ZoneIds.PARIS ); - static Stream osmOpeningHoursTestCases = Stream.of( - Arguments.of( - "Mo-Fr 14:00-19:00", - List.of("2022-10-25T14:30:00Z"), - List.of("2022-10-25T08:30:00Z", "2022-10-29T14:30:00Z") - ), - Arguments.of( - "Tu 10:00-15:00", - List.of("2022-10-25T10:30:00Z"), - List.of("2022-10-26T00:30:00Z", "2022-10-27T10:30:00Z") - ), - Arguments.of( - "Mo-Fr 08:00-17:00;Sa-Su 10:00-13:00", - List.of("2022-10-25T07:30:00Z", "2022-10-29T10:30:00Z"), - List.of("2022-10-25T03:30:00Z", "2022-10-29T15:30:00Z") - ), - // TODO implement support for public holidays, currently only the first two rules are handled - Arguments.of( - "Mo-Fr 08:00-17:00;Sa-Su 10:00-13:00; PH off", - List.of("2022-10-25T07:30:00Z", "2022-10-29T10:30:00Z"), - List.of("2022-10-25T03:30:00Z", "2022-10-29T15:30:00Z") - ), - // TODO implement support for public holidays, currently only the first two rules are handled - Arguments.of( - "Mo,We,Th,Fr,Su 00:00-24:00; Tu,Sa 00:00-02:00, 14:30-24:00; PH 00:00-24:00", - List.of("2022-10-24T15:30:00Z", "2022-10-24T23:30:00Z", "2022-10-25T15:30:00Z"), - List.of("2022-10-25T05:30:00Z") - ), - // The second rule overrides the first rule for Wednesdays, i.e. on Wednesdays it should only be - // open from 10:00 to 13:00 - Arguments.of( - "Mo-Fr 16:00-02:00; We 10:00-13:00", - List.of("2022-10-25T23:30:00Z", "2022-10-26T10:30:00Z", "2022-10-27T23:30:00Z"), - List.of("2022-10-25T10:30:00Z", "2022-10-26T23:30:00Z") - ), - // The second rule overrides the first rule for Tuesdays, i.e. it should be closed on Tuesdays - Arguments.of( - "Mo - Sa 10:00-18:00; Tu off", - List.of("2022-10-24T15:30:00Z"), - List.of("2022-10-24T05:30:00Z", "2022-10-25T10:30:00Z") - ), - // Even though the following rules are not additive, they should be handled as such because they - // have the off modifier (https://github.com/opening-hours/opening_hours.js/issues/53). - // Therefore, it should be open according to the first rule outside of the defined off periods, - // so for example, on Tuesdays it should be open from 07:30 to 12:00 and from 16:00 to 22:00. - // These different off cases are needed because they overlap slightly differently with the first - // rule and have slightly different handling in code. - Arguments.of( - "Mo-Sa 07:30-22:00; Mo 05:00-23:00 off; Tu 12:00-16:00 off; We 06:00-16:00 off; Th 07:30-16:00 off, Fr 16:00-22:00 off, Sa 16:00-23:00 off", - List.of( - "2022-10-25T07:30:00Z", - "2022-10-25T17:30:00Z", - "2022-10-26T17:30:00Z", - "2022-10-27T17:30:00Z", - "2022-10-28T07:30:00Z", - "2022-10-29T07:30:00Z" - ), - List.of( - "2022-10-24T07:30:00Z", - "2022-10-25T12:30:00Z", - "2022-10-26T07:30:00Z", - "2022-10-27T07:30:00Z", - "2022-10-28T16:30:00Z", - "2022-10-29T16:30:00Z", - "2022-10-30T07:30:00Z" + static Stream osmOpeningHoursTestCases() { + return Stream.of( + Arguments.of( + "Mo-Fr 14:00-19:00", + List.of("2022-10-25T14:30:00Z"), + List.of("2022-10-25T08:30:00Z", "2022-10-29T14:30:00Z") + ), + Arguments.of( + "Tu 10:00-15:00", + List.of("2022-10-25T10:30:00Z"), + List.of("2022-10-26T00:30:00Z", "2022-10-27T10:30:00Z") + ), + Arguments.of( + "Mo-Fr 08:00-17:00;Sa-Su 10:00-13:00", + List.of("2022-10-25T07:30:00Z", "2022-10-29T10:30:00Z"), + List.of("2022-10-25T03:30:00Z", "2022-10-29T15:30:00Z") + ), + // TODO implement support for public holidays, currently only the first two rules are handled + Arguments.of( + "Mo-Fr 08:00-17:00;Sa-Su 10:00-13:00; PH off", + List.of("2022-10-25T07:30:00Z", "2022-10-29T10:30:00Z"), + List.of("2022-10-25T03:30:00Z", "2022-10-29T15:30:00Z") + ), + // TODO implement support for public holidays, currently only the first two rules are handled + Arguments.of( + "Mo,We,Th,Fr,Su 00:00-24:00; Tu,Sa 00:00-02:00, 14:30-24:00; PH 00:00-24:00", + List.of("2022-10-24T15:30:00Z", "2022-10-24T23:30:00Z", "2022-10-25T15:30:00Z"), + List.of("2022-10-25T05:30:00Z") + ), + // The second rule overrides the first rule for Wednesdays, i.e. on Wednesdays it should only be + // open from 10:00 to 13:00 + Arguments.of( + "Mo-Fr 16:00-02:00; We 10:00-13:00", + List.of("2022-10-25T23:30:00Z", "2022-10-26T10:30:00Z", "2022-10-27T23:30:00Z"), + List.of("2022-10-25T10:30:00Z", "2022-10-26T23:30:00Z") + ), + // The second rule overrides the first rule for Tuesdays, i.e. it should be closed on Tuesdays + Arguments.of( + "Mo - Sa 10:00-18:00; Tu off", + List.of("2022-10-24T15:30:00Z"), + List.of("2022-10-24T05:30:00Z", "2022-10-25T10:30:00Z") + ), + // Even though the following rules are not additive, they should be handled as such because they + // have the off modifier (https://github.com/opening-hours/opening_hours.js/issues/53). + // Therefore, it should be open according to the first rule outside of the defined off periods, + // so for example, on Tuesdays it should be open from 07:30 to 12:00 and from 16:00 to 22:00. + // These different off cases are needed because they overlap slightly differently with the first + // rule and have slightly different handling in code. + Arguments.of( + "Mo-Sa 07:30-22:00; Mo 05:00-23:00 off; Tu 12:00-16:00 off; We 06:00-16:00 off; Th 07:30-16:00 off, Fr 16:00-22:00 off, Sa 16:00-23:00 off", + List.of( + "2022-10-25T07:30:00Z", + "2022-10-25T17:30:00Z", + "2022-10-26T17:30:00Z", + "2022-10-27T17:30:00Z", + "2022-10-28T07:30:00Z", + "2022-10-29T07:30:00Z" + ), + List.of( + "2022-10-24T07:30:00Z", + "2022-10-25T12:30:00Z", + "2022-10-26T07:30:00Z", + "2022-10-27T07:30:00Z", + "2022-10-28T16:30:00Z", + "2022-10-29T16:30:00Z", + "2022-10-30T07:30:00Z" + ) + ), + // This tests that it's correctly closed outside with an off rule that extends over midnight + Arguments.of( + "Mo-Fr 12:30-04:00; We 18:00-02:00 off", + List.of( + "2022-10-25T19:30:00Z", + "2022-10-25T23:30:00Z", + "2022-10-26T13:30:00Z", + "2022-10-27T01:30:00Z", + "2022-10-27T23:30:00Z" + ), + List.of("2022-10-26T19:30:00Z", "2022-10-26T23:30:00Z", "2022-10-27T05:30:00Z") + ), + Arguments.of( + "open; Tu 13:00-16:00 off", + List.of("2022-10-24T12:30:00Z", "2022-10-25T07:30:00Z", "2022-10-24T18:30:00Z"), + List.of("2022-10-25T13:30:00Z") + ), + Arguments.of( + "Su-Tu 11:00-02:00, We-Th 11:00-03:00, Fr 11:00-06:00, Sa 11:00-07:00", + List.of("2022-10-25T14:30:00Z", "2022-10-25T23:30:00Z", "2022-10-29T03:30:00Z"), + List.of("2022-10-25T02:30:00Z", "2022-10-27T03:30:00Z") + ), + Arguments.of( + "Sep-Oct: Mo-Sa 10:00-02:00", + List.of("2022-09-30T23:30:00Z", "2022-10-29T10:30:00Z", "2022-10-31T23:30:00Z"), + List.of("2022-10-30T10:30:00Z", "2022-11-26T10:30:00Z") + ), + Arguments.of( + "Oct: Mo 10:00-02:00", + List.of("2022-10-24T10:30:00Z", "2022-10-31T23:30:00Z"), + List.of("2022-09-30T23:30:00Z", "2022-10-30T10:30:00Z", "2022-11-07T10:30:00Z") + ), + // TODO implement support for dates with and without year, this is now completely unparsed + // which means that it's never open + Arguments.of("Oct 23-Jan 3: 10:00-23:00", List.of(), List.of("2022-10-20T12:30:00Z")), + // TODO implement support for nth weekday in a month and offsets + Arguments.of( + "Mar Su[-1]-Oct Su[1] -2 days: 22:00-23:00", + List.of(), + List.of("2022-11-20T12:30:00Z") + ), + Arguments.of("24/7", List.of("2022-10-25T07:30:00Z"), List.of()), + Arguments.of("24/7 closed", List.of(), List.of("2022-10-25T07:30:00Z")), + // TODO implement support for school holidays and special dates, only the first rule is now + // handled + Arguments.of( + "Mo-Su,SH 15:00-03:00; easter -2 days off", + List.of("2022-10-25T15:30:00Z"), + List.of("2022-10-25T05:30:00Z") + ), + // TODO implement support for comment modifiers, this is now interpreted to be always closed + Arguments.of("\"by appointment\"", List.of(), List.of("2022-10-25T07:30:00Z")), + // TODO implement support for fallbacks if feasible, now the last rule is ignored and the first + // rule is respected + Arguments.of( + "Mo-Sa 08:00-13:00,16:00-18:00 || \"by appointment\"", + List.of("2022-10-25T07:30:00Z", "2022-10-25T15:30:00Z"), + List.of("2022-10-25T13:30:00Z", "2022-10-30T07:30:00Z") + ), + // TODO implement support for weeks, these rules are now ignored and it's always closed + Arguments.of( + "week 1-53/2 Fr 09:00-12:00; week 2-52/2 We 09:00-12:00", + List.of(), + List.of("2022-10-28T07:30:00Z") + ), + // TODO implement support for events, this is now interpreted to be always closed + Arguments.of("sunrise-sunset", List.of(), List.of("2022-10-25T07:30:00Z")), + // This is interpreted to be open on sundays from 10:00 until 23:59 + Arguments.of( + "Su 10:00+", + List.of("2022-10-30T10:30:00Z"), + List.of("2022-10-25T10:30:00Z", "2022-10-30T06:30:00Z") ) - ), - // This tests that it's correctly closed outside with an off rule that extends over midnight - Arguments.of( - "Mo-Fr 12:30-04:00; We 18:00-02:00 off", - List.of( - "2022-10-25T19:30:00Z", - "2022-10-25T23:30:00Z", - "2022-10-26T13:30:00Z", - "2022-10-27T01:30:00Z", - "2022-10-27T23:30:00Z" - ), - List.of("2022-10-26T19:30:00Z", "2022-10-26T23:30:00Z", "2022-10-27T05:30:00Z") - ), - Arguments.of( - "open; Tu 13:00-16:00 off", - List.of("2022-10-24T12:30:00Z", "2022-10-25T07:30:00Z", "2022-10-24T18:30:00Z"), - List.of("2022-10-25T13:30:00Z") - ), - Arguments.of( - "Su-Tu 11:00-02:00, We-Th 11:00-03:00, Fr 11:00-06:00, Sa 11:00-07:00", - List.of("2022-10-25T14:30:00Z", "2022-10-25T23:30:00Z", "2022-10-29T03:30:00Z"), - List.of("2022-10-25T02:30:00Z", "2022-10-27T03:30:00Z") - ), - Arguments.of( - "Sep-Oct: Mo-Sa 10:00-02:00", - List.of("2022-09-30T23:30:00Z", "2022-10-29T10:30:00Z", "2022-10-31T23:30:00Z"), - List.of("2022-10-30T10:30:00Z", "2022-11-26T10:30:00Z") - ), - Arguments.of( - "Oct: Mo 10:00-02:00", - List.of("2022-10-24T10:30:00Z", "2022-10-31T23:30:00Z"), - List.of("2022-09-30T23:30:00Z", "2022-10-30T10:30:00Z", "2022-11-07T10:30:00Z") - ), - // TODO implement support for dates with and without year, this is now completely unparsed - // which means that it's never open - Arguments.of("Oct 23-Jan 3: 10:00-23:00", List.of(), List.of("2022-10-20T12:30:00Z")), - // TODO implement support for nth weekday in a month and offsets - Arguments.of( - "Mar Su[-1]-Oct Su[1] -2 days: 22:00-23:00", - List.of(), - List.of("2022-11-20T12:30:00Z") - ), - Arguments.of("24/7", List.of("2022-10-25T07:30:00Z"), List.of()), - Arguments.of("24/7 closed", List.of(), List.of("2022-10-25T07:30:00Z")), - // TODO implement support for school holidays and special dates, only the first rule is now - // handled - Arguments.of( - "Mo-Su,SH 15:00-03:00; easter -2 days off", - List.of("2022-10-25T15:30:00Z"), - List.of("2022-10-25T05:30:00Z") - ), - // TODO implement support for comment modifiers, this is now interpreted to be always closed - Arguments.of("\"by appointment\"", List.of(), List.of("2022-10-25T07:30:00Z")), - // TODO implement support for fallbacks if feasible, now the last rule is ignored and the first - // rule is respected - Arguments.of( - "Mo-Sa 08:00-13:00,16:00-18:00 || \"by appointment\"", - List.of("2022-10-25T07:30:00Z", "2022-10-25T15:30:00Z"), - List.of("2022-10-25T13:30:00Z", "2022-10-30T07:30:00Z") - ), - // TODO implement support for weeks, these rules are now ignored and it's always closed - Arguments.of( - "week 1-53/2 Fr 09:00-12:00; week 2-52/2 We 09:00-12:00", - List.of(), - List.of("2022-10-28T07:30:00Z") - ), - // TODO implement support for events, this is now interpreted to be always closed - Arguments.of("sunrise-sunset", List.of(), List.of("2022-10-25T07:30:00Z")), - // This is interpreted to be open on sundays from 10:00 until 23:59 - Arguments.of( - "Su 10:00+", - List.of("2022-10-30T10:30:00Z"), - List.of("2022-10-25T10:30:00Z", "2022-10-30T06:30:00Z") - ) - ); + ); + } @ParameterizedTest(name = "{0} should be open on {1} but not on {2}") - @VariableSource("osmOpeningHoursTestCases") + @MethodSource("osmOpeningHoursTestCases") void testOSMOpeningHoursParsing( String openingHours, List openTimes, diff --git a/src/test/java/org/opentripplanner/openstreetmap/tagmapping/DefaultMapperTest.java b/src/test/java/org/opentripplanner/openstreetmap/tagmapping/DefaultMapperTest.java index cbaccb87f84..9a16f6a8e2e 100644 --- a/src/test/java/org/opentripplanner/openstreetmap/tagmapping/DefaultMapperTest.java +++ b/src/test/java/org/opentripplanner/openstreetmap/tagmapping/DefaultMapperTest.java @@ -17,6 +17,7 @@ public class DefaultMapperTest { private WayPropertySet wps; + private OsmTagMapper mapper; float epsilon = 0.01f; @BeforeEach @@ -25,6 +26,7 @@ public void setup() { DefaultMapper source = new DefaultMapper(); source.populateProperties(wps); this.wps = wps; + this.mapper = source; } /** @@ -69,7 +71,7 @@ public void testCarSpeeds() { wps.addSpeedPicker(getSpeedPicker("highway=motorway", kmhAsMs(100))); wps.addSpeedPicker(getSpeedPicker("highway=*", kmhAsMs(35))); wps.addSpeedPicker(getSpeedPicker("surface=gravel", kmhAsMs(10))); - wps.defaultSpeed = kmhAsMs(25); + wps.defaultCarSpeed = kmhAsMs(25); way = new OSMWithTags(); @@ -108,6 +110,8 @@ public void testCarSpeeds() { assertSpeed(4.305559158325195, "15.5 km/h"); assertSpeed(22.347200393676758, "50 mph"); assertSpeed(22.347200393676758, "50.0 mph"); + + assertEquals(wps.maxUsedCarSpeed, mapper.getMaxUsedCarSpeed(wps)); } @Test diff --git a/src/test/java/org/opentripplanner/openstreetmap/tagmapping/HamburgMapperTest.java b/src/test/java/org/opentripplanner/openstreetmap/tagmapping/HamburgMapperTest.java new file mode 100644 index 00000000000..1af3eefee18 --- /dev/null +++ b/src/test/java/org/opentripplanner/openstreetmap/tagmapping/HamburgMapperTest.java @@ -0,0 +1,51 @@ +package org.opentripplanner.openstreetmap.tagmapping; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; +import org.opentripplanner.openstreetmap.model.OSMWithTags; + +/** + * @author Maintained by HBT (geofox-team@hbt.de) + */ +public class HamburgMapperTest { + + private HamburgMapper mapper; + + @BeforeEach + void createMapper() { + mapper = new HamburgMapper(); + } + + @Test + public void shouldAllowThroughTraffic_WhenAccessCustomers_AndCustomersHVV() { + OSMWithTags way = new OSMWithTags(); + way.addTag("access", "customers"); + way.addTag("customers", "HVV"); + + boolean generalNoThroughTraffic = mapper.isGeneralNoThroughTraffic(way); + + assertFalse( + generalNoThroughTraffic, + "access=customers and customers=hvv should allow through-traffic" + ); + } + + @ParameterizedTest + @ValueSource(strings = { "no", "destination", "private", "customers", "delivery" }) + public void shouldDisallowThroughTraffic_WhenNoCustomersHVV(String access) { + OSMWithTags way = new OSMWithTags(); + way.addTag("access", access); + + boolean generalNoThroughTraffic = mapper.isGeneralNoThroughTraffic(way); + + assertTrue( + generalNoThroughTraffic, + "access={no, destination, private, customers, delivery} should be blocked in general" + ); + } +} diff --git a/src/test/java/org/opentripplanner/openstreetmap/tagmapping/PortlandMapperTest.java b/src/test/java/org/opentripplanner/openstreetmap/tagmapping/PortlandMapperTest.java index 06369baddc8..26f45fd8c32 100644 --- a/src/test/java/org/opentripplanner/openstreetmap/tagmapping/PortlandMapperTest.java +++ b/src/test/java/org/opentripplanner/openstreetmap/tagmapping/PortlandMapperTest.java @@ -18,30 +18,33 @@ import java.util.stream.Stream; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import org.opentripplanner.openstreetmap.model.OSMWithTags; import org.opentripplanner.openstreetmap.wayproperty.WayPropertySet; -import org.opentripplanner.test.support.VariableSource; public class PortlandMapperTest { static double delta = 0.1; static WayPropertySet wps = new WayPropertySet(); - static Stream cases = Stream.of( - Arguments.of(southeastLaBonitaWay(), 0.8), - Arguments.of(southwestMayoStreet(), 0.9), - Arguments.of(sidewalkBoth(), 0.96), - Arguments.of(pedestrianTunnel(), 1.0), - Arguments.of(highwayTertiaryWithSidewalk(), 1.056), - Arguments.of(cobblestones(), 1.2), - Arguments.of(noSidewalk(), 1.2), - Arguments.of(carTunnel(), 1.2), - Arguments.of(footwaySidewalk(), 1.32), - Arguments.of(highwayTertiary(), 1.32), - Arguments.of(highwayTrunk(), 1.44), - Arguments.of(fiveLanes(), 1.584), - Arguments.of(noSidewalkHighSpeed(), 7.19) - ); + + static Stream cases() { + return Stream.of( + Arguments.of(southeastLaBonitaWay(), 0.8), + Arguments.of(southwestMayoStreet(), 0.9), + Arguments.of(sidewalkBoth(), 0.96), + Arguments.of(pedestrianTunnel(), 1.0), + Arguments.of(highwayTertiaryWithSidewalk(), 1.056), + Arguments.of(cobblestones(), 1.2), + Arguments.of(noSidewalk(), 1.2), + Arguments.of(carTunnel(), 1.2), + Arguments.of(footwaySidewalk(), 1.32), + Arguments.of(highwayTertiary(), 1.32), + Arguments.of(highwayTrunk(), 1.44), + Arguments.of(fiveLanes(), 1.584), + Arguments.of(noSidewalkHighSpeed(), 7.19) + ); + } static { var source = new PortlandMapper(); @@ -49,7 +52,7 @@ public class PortlandMapperTest { } @ParameterizedTest(name = "way {0} should have walk safety factor {1}") - @VariableSource("cases") + @MethodSource("cases") void walkSafety(OSMWithTags way, double expected) { var score = wps.getDataForWay(way); diff --git a/src/test/java/org/opentripplanner/openstreetmap/wayproperty/WayPropertySetTest.java b/src/test/java/org/opentripplanner/openstreetmap/wayproperty/WayPropertySetTest.java index c5ae8b86f7d..e8f5b6e51d3 100644 --- a/src/test/java/org/opentripplanner/openstreetmap/wayproperty/WayPropertySetTest.java +++ b/src/test/java/org/opentripplanner/openstreetmap/wayproperty/WayPropertySetTest.java @@ -31,6 +31,44 @@ public void carTunnel() { assertEquals(CAR, wps.getDataForWay(tunnel).getPermission()); } + @Test + public void carMaxSpeed() { + var delta = 0.001f; + var motorWaySpeed = 35f; + WayPropertySet wps = wps(); + wps.setCarSpeed("highway=motorway", motorWaySpeed); + + // Test that there are default values + assertEquals(38f, wps.maxPossibleCarSpeed, delta); + assertEquals(0f, wps.maxUsedCarSpeed, delta); + + // Speed limit that is within limits should be used as the max used car speed + OSMWithTags streetWithSpeedLimit = new OSMWithTags(); + streetWithSpeedLimit.addTag("highway", "motorway"); + streetWithSpeedLimit.addTag("maxspeed", "120"); + var waySpeed = wps.getCarSpeedForWay(streetWithSpeedLimit, false); + assertEquals(33.33336, waySpeed, delta); + assertEquals(33.33336, wps.maxUsedCarSpeed, delta); + + // Speed limit that is higher than maxPossibleCarSpeed should be ignored and regular motorway + // speed limit should be used instead + OSMWithTags streetWithTooHighSpeedLimit = new OSMWithTags(); + streetWithTooHighSpeedLimit.addTag("highway", "motorway"); + streetWithTooHighSpeedLimit.addTag("maxspeed", "200"); + waySpeed = wps.getCarSpeedForWay(streetWithTooHighSpeedLimit, false); + assertEquals(motorWaySpeed, waySpeed, delta); + assertEquals(motorWaySpeed, wps.maxUsedCarSpeed, delta); + + // Speed limit that is too low should be ignored and regular motorway speed limit should + // be used instead + OSMWithTags streetWithTooLowSpeedLimit = new OSMWithTags(); + streetWithTooLowSpeedLimit.addTag("highway", "motorway"); + streetWithTooLowSpeedLimit.addTag("maxspeed", "0"); + waySpeed = wps.getCarSpeedForWay(streetWithTooLowSpeedLimit, false); + assertEquals(motorWaySpeed, waySpeed, delta); + assertEquals(motorWaySpeed, wps.maxUsedCarSpeed, delta); + } + @Test void pedestrianTunnelSpecificity() { var tunnel = WayTestData.pedestrianTunnel(); diff --git a/src/test/java/org/opentripplanner/openstreetmap/wayproperty/specifier/BestMatchSpecifierTest.java b/src/test/java/org/opentripplanner/openstreetmap/wayproperty/specifier/BestMatchSpecifierTest.java index 19575c9312f..517e4b57bfd 100644 --- a/src/test/java/org/opentripplanner/openstreetmap/wayproperty/specifier/BestMatchSpecifierTest.java +++ b/src/test/java/org/opentripplanner/openstreetmap/wayproperty/specifier/BestMatchSpecifierTest.java @@ -8,8 +8,8 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import org.opentripplanner.openstreetmap.model.OSMWithTags; -import org.opentripplanner.test.support.VariableSource; class BestMatchSpecifierTest extends SpecifierTest { @@ -48,17 +48,19 @@ void leftRightMatch() { assertEquals(100, result.forward()); } - static Stream leftRightTestCases = Stream.of( - Arguments.of(cyclewayLeft(), bikeLane, 210, 100), - Arguments.of(cyclewayLaneTrack(), cyclewayTrack, 100, 210), - Arguments.of(cyclewayLaneTrack(), highwayFootwayCyclewayLane, 210, 100), - Arguments.of(cyclewayLaneTrack(), cyclewayLane, 110, 0) - ); + static Stream leftRightTestCases() { + return Stream.of( + Arguments.of(cyclewayLeft(), bikeLane, 210, 100), + Arguments.of(cyclewayLaneTrack(), cyclewayTrack, 100, 210), + Arguments.of(cyclewayLaneTrack(), highwayFootwayCyclewayLane, 210, 100), + Arguments.of(cyclewayLaneTrack(), cyclewayLane, 110, 0) + ); + } @ParameterizedTest( name = "way {0} with specifier {1} should have a backward score {2} and forward score {3}" ) - @VariableSource("leftRightTestCases") + @MethodSource("leftRightTestCases") void leftRight(OSMWithTags way, OsmSpecifier spec, int expectedBackward, int expectedForward) { var result = spec.matchScores(way); assertEquals(expectedBackward, result.backward()); diff --git a/src/test/java/org/opentripplanner/openstreetmap/wayproperty/specifier/ConditionTest.java b/src/test/java/org/opentripplanner/openstreetmap/wayproperty/specifier/ConditionTest.java index a1d126003a5..def272652f6 100644 --- a/src/test/java/org/opentripplanner/openstreetmap/wayproperty/specifier/ConditionTest.java +++ b/src/test/java/org/opentripplanner/openstreetmap/wayproperty/specifier/ConditionTest.java @@ -25,6 +25,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import org.opentripplanner.openstreetmap.model.OSMWithTags; import org.opentripplanner.openstreetmap.wayproperty.specifier.Condition.Absent; import org.opentripplanner.openstreetmap.wayproperty.specifier.Condition.Equals; @@ -34,7 +35,6 @@ import org.opentripplanner.openstreetmap.wayproperty.specifier.Condition.LessThan; import org.opentripplanner.openstreetmap.wayproperty.specifier.Condition.MatchResult; import org.opentripplanner.openstreetmap.wayproperty.specifier.Condition.Present; -import org.opentripplanner.test.support.VariableSource; class ConditionTest { @@ -56,18 +56,20 @@ class ConditionTest { ); static Condition noSidewalk = new Condition.EqualsAnyInOrAbsent("sidewalk"); - static Stream equalsCases = Stream.of( - Arguments.of(cyclewayLeft(), cyclewayLane, EXACT, NONE), - Arguments.of(cyclewayLaneTrack(), cyclewayLane, EXACT, NONE), - Arguments.of(cyclewayBoth(), cyclewayLane, EXACT, EXACT), - Arguments.of(cyclewayLaneTrack(), cyclewayTrack, NONE, EXACT), - Arguments.of(tramsForward(), embeddedTrams, NONE, EXACT) - ); + static Stream equalsCases() { + return Stream.of( + Arguments.of(cyclewayLeft(), cyclewayLane, EXACT, NONE), + Arguments.of(cyclewayLaneTrack(), cyclewayLane, EXACT, NONE), + Arguments.of(cyclewayBoth(), cyclewayLane, EXACT, EXACT), + Arguments.of(cyclewayLaneTrack(), cyclewayTrack, NONE, EXACT), + Arguments.of(tramsForward(), embeddedTrams, NONE, EXACT) + ); + } @ParameterizedTest( name = "way {0} with op {1} should have a backward result {2}, forward result {3}" ) - @VariableSource("equalsCases") + @MethodSource("equalsCases") void leftRight( OSMWithTags way, Condition op, @@ -78,32 +80,34 @@ void leftRight( assertEquals(forwardExpectation, op.matchForward(way)); } - static Stream otherCases = Stream.of( - Arguments.of(cycleway(), cyclewayPresent, WILDCARD), - Arguments.of(carTunnel(), cyclewayPresent, NONE), - Arguments.of(carTunnel(), cyclewayAbsent, EXACT), - Arguments.of(cobblestones(), cyclewayAbsent, EXACT), - Arguments.of(cycleway(), cyclewayAbsent, NONE), - Arguments.of(cycleway(), moreThanFourLanes, NONE), - Arguments.of(carTunnel(), moreThanFourLanes, NONE), - Arguments.of(pedestrianTunnel(), moreThanFourLanes, NONE), - Arguments.of(fiveLanes(), moreThanFourLanes, EXACT), - Arguments.of(fiveLanes(), lessThanFourLanes, NONE), - Arguments.of(threeLanes(), lessThanFourLanes, EXACT), - Arguments.of(carTunnel(), lessThanFourLanes, NONE), - Arguments.of(cycleway(), lessThanFourLanes, NONE), - Arguments.of(fiveLanes(), betweenFiveAndThreeLanes, EXACT), - Arguments.of(threeLanes(), betweenFiveAndThreeLanes, EXACT), - Arguments.of(veryBadSmoothness(), smoothnessBadAndWorseThanBad, EXACT), - Arguments.of(cobblestones(), smoothnessBadAndWorseThanBad, NONE), - Arguments.of(excellentSmoothness(), smoothnessBadAndWorseThanBad, NONE), - Arguments.of(noSidewalk(), noSidewalk, EXACT), - Arguments.of(highwayTertiary(), noSidewalk, EXACT), - Arguments.of(sidewalkBoth(), noSidewalk, NONE) - ); + static Stream otherCases() { + return Stream.of( + Arguments.of(cycleway(), cyclewayPresent, WILDCARD), + Arguments.of(carTunnel(), cyclewayPresent, NONE), + Arguments.of(carTunnel(), cyclewayAbsent, EXACT), + Arguments.of(cobblestones(), cyclewayAbsent, EXACT), + Arguments.of(cycleway(), cyclewayAbsent, NONE), + Arguments.of(cycleway(), moreThanFourLanes, NONE), + Arguments.of(carTunnel(), moreThanFourLanes, NONE), + Arguments.of(pedestrianTunnel(), moreThanFourLanes, NONE), + Arguments.of(fiveLanes(), moreThanFourLanes, EXACT), + Arguments.of(fiveLanes(), lessThanFourLanes, NONE), + Arguments.of(threeLanes(), lessThanFourLanes, EXACT), + Arguments.of(carTunnel(), lessThanFourLanes, NONE), + Arguments.of(cycleway(), lessThanFourLanes, NONE), + Arguments.of(fiveLanes(), betweenFiveAndThreeLanes, EXACT), + Arguments.of(threeLanes(), betweenFiveAndThreeLanes, EXACT), + Arguments.of(veryBadSmoothness(), smoothnessBadAndWorseThanBad, EXACT), + Arguments.of(cobblestones(), smoothnessBadAndWorseThanBad, NONE), + Arguments.of(excellentSmoothness(), smoothnessBadAndWorseThanBad, NONE), + Arguments.of(noSidewalk(), noSidewalk, EXACT), + Arguments.of(highwayTertiary(), noSidewalk, EXACT), + Arguments.of(sidewalkBoth(), noSidewalk, NONE) + ); + } @ParameterizedTest(name = "way {0} with op {1} should have a result {2}") - @VariableSource("otherCases") + @MethodSource("otherCases") void otherTests(OSMWithTags way, Condition op, MatchResult expectation) { assertEquals(expectation, op.match(way)); } diff --git a/src/test/java/org/opentripplanner/raptor/_data/RaptorTestConstants.java b/src/test/java/org/opentripplanner/raptor/_data/RaptorTestConstants.java index d293f7326e6..0bca83be8bf 100644 --- a/src/test/java/org/opentripplanner/raptor/_data/RaptorTestConstants.java +++ b/src/test/java/org/opentripplanner/raptor/_data/RaptorTestConstants.java @@ -27,12 +27,15 @@ public interface RaptorTestConstants { int D20m = durationInSeconds("20m"); int D24h = durationInSeconds("24h"); + /** + * There are 86400 seconds in a "normal" day(24 * 60 * 60). + */ + int SECONDS_IN_A_DAY = (int) D24h; + // Time constants, all values are in seconds int T00_00 = hm2time(0, 0); - int T00_01 = hm2time(0, 1); int T00_02 = hm2time(0, 2); int T00_10 = hm2time(0, 10); - int T00_12 = hm2time(0, 12); int T00_30 = hm2time(0, 30); int T00_40 = hm2time(0, 40); int T01_00 = hm2time(1, 0); @@ -42,7 +45,7 @@ public interface RaptorTestConstants { int TX_2 = 2; // Stop indexes - Note! There is no stop defined for index 0(zero)! You must - // account for that in the test if you uses a stop index. + // account for that in the test if you use the stop index. int STOP_A = 1; int STOP_B = 2; int STOP_C = 3; diff --git a/src/test/java/org/opentripplanner/raptor/_data/api/TestRaptorPath.java b/src/test/java/org/opentripplanner/raptor/_data/api/TestRaptorPath.java index a0ec4523726..dab47a6d18b 100644 --- a/src/test/java/org/opentripplanner/raptor/_data/api/TestRaptorPath.java +++ b/src/test/java/org/opentripplanner/raptor/_data/api/TestRaptorPath.java @@ -3,6 +3,7 @@ import java.util.List; import java.util.stream.Stream; import javax.annotation.Nullable; +import org.opentripplanner.raptor.api.model.RaptorConstants; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; import org.opentripplanner.raptor.api.path.AccessPathLeg; import org.opentripplanner.raptor.api.path.EgressPathLeg; @@ -18,9 +19,9 @@ */ public record TestRaptorPath( int rangeRaptorIterationDepartureTime, - int startTime, - int endTime, - int durationInSeconds, + int startTimeInclusivePenalty, + int endTimeInclusivePenalty, + int durationInclusivePenaltyInSeconds, int numberOfTransfers, int c1, int c2 @@ -29,6 +30,18 @@ public record TestRaptorPath( private static final String NOT_IMPLEMENTED_MESSAGE = "Use the real Path implementation if you need legs..."; + @Override + public int startTime() { + // This should not be used in the pareto comparison. + return RaptorConstants.TIME_NOT_SET; + } + + @Override + public int endTime() { + // This should not be used in the pareto comparison. + return RaptorConstants.TIME_NOT_SET; + } + @Override public int numberOfTransfersExAccessEgress() { throw new UnsupportedOperationException(NOT_IMPLEMENTED_MESSAGE); diff --git a/src/test/java/org/opentripplanner/raptor/_data/transit/TestAccessEgress.java b/src/test/java/org/opentripplanner/raptor/_data/transit/TestAccessEgress.java index ed0702f39d5..8047ec0d4cb 100644 --- a/src/test/java/org/opentripplanner/raptor/_data/transit/TestAccessEgress.java +++ b/src/test/java/org/opentripplanner/raptor/_data/transit/TestAccessEgress.java @@ -3,13 +3,12 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.opentripplanner.raptor.api.model.RaptorConstants.SECONDS_IN_A_DAY; +import static org.opentripplanner.raptor._data.RaptorTestConstants.SECONDS_IN_A_DAY; import static org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter.toRaptorCost; import java.util.ArrayList; import java.util.Collection; import java.util.List; -import org.opentripplanner.framework.model.TimeAndCost; import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.raptor.api.model.RaptorAccessEgress; import org.opentripplanner.raptor.api.model.RaptorConstants; @@ -26,26 +25,26 @@ public class TestAccessEgress implements RaptorAccessEgress { private final int stop; private final int durationInSeconds; - private final int cost; + private final int c1; private final int numberOfRides; private final boolean stopReachedOnBoard; private final boolean free; private final Integer opening; private final Integer closing; private final boolean closed; - private final TimeAndCost penalty; + private final int timePenalty; private TestAccessEgress(Builder builder) { this.stop = builder.stop; this.durationInSeconds = builder.durationInSeconds; - this.cost = builder.cost; this.numberOfRides = builder.numberOfRides; this.stopReachedOnBoard = builder.stopReachedOnBoard; this.free = builder.free; this.opening = builder.opening; this.closing = builder.closing; this.closed = builder.closed; - this.penalty = builder.penalty; + this.timePenalty = builder.timePenalty; + this.c1 = builder.c1; if (free) { assertEquals(0, durationInSeconds); @@ -64,7 +63,7 @@ public static TestAccessEgress free(int stop) { } /** - * @deprecated A stop can not be both free and have a cost - This is not a valid + * @deprecated A stop cannot be both free and have a cost - This is not a valid * access/egress. */ @Deprecated @@ -122,14 +121,6 @@ public static TestAccessEgress flexAndWalk(int stop, int durationInSeconds, int return flexAndWalk(stop, durationInSeconds, nRides, walkCost(durationInSeconds)); } - public static TestAccessEgress car(int stop, int durationInSeconds, TimeAndCost penalty) { - return new Builder(stop, durationInSeconds) - .withFree() - .withCost(durationInSeconds) - .withPenalty(penalty) - .build(); - } - /** Create a flex access arriving at given stop by walking. */ public static TestAccessEgress flexAndWalk( int stop, @@ -162,7 +153,7 @@ public static int walkCost(int durationInSeconds, double reluctance) { *

    * Opening and closing is specified as seconds since the start of "RAPTOR time" to limit the * time periods that the access is traversable, which is repeatead every 24 hours. This allows - * the access to only be traversable between for example 08:00 and 16:00 every day. + * access to only be traversable between given times like 08:00 and 16:00 every day. */ public TestAccessEgress openingHours(int opening, int closing) { return copyOf().withOpeningHours(opening, closing).build(); @@ -177,6 +168,10 @@ public TestAccessEgress openingHoursClosed() { return copyOf().withClosed().build(); } + public TestAccessEgress withTimePenalty(int timePenalty) { + return this.copyOf().withTimePenalty(timePenalty).build(); + } + public Builder copyOf() { return new Builder(this); } @@ -188,7 +183,7 @@ public int stop() { @Override public int c1() { - return cost; + return c1; } @Override @@ -196,6 +191,11 @@ public int durationInSeconds() { return durationInSeconds; } + @Override + public int timePenalty() { + return timePenalty; + } + @Override public int earliestDepartureTime(int requestedDepartureTime) { if (!hasOpeningHours()) { @@ -276,19 +276,20 @@ protected static class Builder { int stop; int durationInSeconds; - int cost; + int c1; int numberOfRides = DEFAULT_NUMBER_OF_RIDES; boolean stopReachedOnBoard = STOP_REACHED_ON_FOOT; Integer opening = null; Integer closing = null; private boolean free = false; private boolean closed = false; - private TimeAndCost penalty; + private int timePenalty; Builder(int stop, int durationInSeconds) { this.stop = stop; this.durationInSeconds = durationInSeconds; - this.cost = walkCost(durationInSeconds); + this.c1 = walkCost(durationInSeconds); + this.timePenalty = RaptorConstants.TIME_NOT_SET; } Builder(TestAccessEgress original) { @@ -296,12 +297,12 @@ protected static class Builder { this.stop = original.stop; this.durationInSeconds = original.durationInSeconds; this.stopReachedOnBoard = original.stopReachedOnBoard; - this.cost = original.cost; + this.c1 = original.c1; this.numberOfRides = original.numberOfRides; this.opening = original.opening; this.closing = original.closing; this.closed = original.closed; - this.penalty = original.penalty; + this.timePenalty = original.timePenalty; } Builder withFree() { @@ -311,7 +312,7 @@ Builder withFree() { } Builder withCost(int cost) { - this.cost = cost; + this.c1 = cost; return this; } @@ -325,8 +326,8 @@ Builder stopReachedOnBoard() { return this; } - Builder withPenalty(TimeAndCost penalty) { - this.penalty = penalty; + Builder withTimePenalty(int timePenalty) { + this.timePenalty = timePenalty; return this; } diff --git a/src/test/java/org/opentripplanner/raptor/api/path/RaptorPathTest.java b/src/test/java/org/opentripplanner/raptor/api/path/RaptorPathTest.java index edd45078086..5684a28c1c1 100644 --- a/src/test/java/org/opentripplanner/raptor/api/path/RaptorPathTest.java +++ b/src/test/java/org/opentripplanner/raptor/api/path/RaptorPathTest.java @@ -1,6 +1,5 @@ package org.opentripplanner.raptor.api.path; -import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -112,10 +111,10 @@ void compareArrivalTime() { @Test void compareDuration() { - assertFalse(RaptorPath.compareDuration(subject, subject)); - assertFalse(RaptorPath.compareDuration(subject, same)); - assertFalse(RaptorPath.compareDuration(subject, smallDuration)); - assertTrue(RaptorPath.compareDuration(smallDuration, subject)); + assertFalse(RaptorPath.compareDurationInclusivePenalty(subject, subject)); + assertFalse(RaptorPath.compareDurationInclusivePenalty(subject, same)); + assertFalse(RaptorPath.compareDurationInclusivePenalty(subject, smallDuration)); + assertTrue(RaptorPath.compareDurationInclusivePenalty(smallDuration, subject)); } @Test diff --git a/src/test/java/org/opentripplanner/raptor/moduletests/J01_SearchWindowAccessSlack.java b/src/test/java/org/opentripplanner/raptor/moduletests/J01_SearchWindowAccessSlack.java deleted file mode 100644 index 8caa3a862ca..00000000000 --- a/src/test/java/org/opentripplanner/raptor/moduletests/J01_SearchWindowAccessSlack.java +++ /dev/null @@ -1,103 +0,0 @@ -package org.opentripplanner.raptor.moduletests; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.opentripplanner.raptor._data.transit.TestRoute.route; -import static org.opentripplanner.raptor._data.transit.TestTripPattern.pattern; -import static org.opentripplanner.raptor._data.transit.TestTripSchedule.schedule; -import static org.opentripplanner.raptor.moduletests.support.RaptorModuleTestConfig.TC_MIN_DURATION; -import static org.opentripplanner.raptor.moduletests.support.RaptorModuleTestConfig.TC_MIN_DURATION_REV; -import static org.opentripplanner.raptor.moduletests.support.RaptorModuleTestConfig.multiCriteria; -import static org.opentripplanner.raptor.moduletests.support.RaptorModuleTestConfig.standard; - -import java.time.Duration; -import java.util.List; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.MethodSource; -import org.opentripplanner.framework.time.DurationUtils; -import org.opentripplanner.raptor.RaptorService; -import org.opentripplanner.raptor._data.RaptorTestConstants; -import org.opentripplanner.raptor._data.api.PathUtils; -import org.opentripplanner.raptor._data.transit.TestAccessEgress; -import org.opentripplanner.raptor._data.transit.TestTransitData; -import org.opentripplanner.raptor._data.transit.TestTripSchedule; -import org.opentripplanner.raptor.api.request.RaptorRequestBuilder; -import org.opentripplanner.raptor.configure.RaptorConfig; -import org.opentripplanner.raptor.moduletests.support.ModuleTestDebugLogging; -import org.opentripplanner.raptor.moduletests.support.RaptorModuleTestCase; - -/** - * FEATURE UNDER TEST - *

    - * Raptor should return a path starting before the search-window, if a search-window-access-slack - * is used. - */ -public class J01_SearchWindowAccessSlack implements RaptorTestConstants { - - private final TestTransitData data = new TestTransitData(); - private final RaptorRequestBuilder requestBuilder = new RaptorRequestBuilder<>(); - private final RaptorService raptorService = new RaptorService<>( - RaptorConfig.defaultConfigForTest() - ); - - /** - * Schedule: - * Stop: A B - * R1: 00:10 - 00:20 - * - * Access (toStop & duration): - * A 1m - * - * Egress (fromStop & duration): - * B 30s - */ - @BeforeEach - void setup() { - data.withRoute(route(pattern("R1", STOP_A, STOP_B)).withTimetable(schedule("00:10 00:20"))); - requestBuilder - .searchParams() - .addAccessPaths(TestAccessEgress.walk(STOP_A, D1m)) - .addEgressPaths(TestAccessEgress.walk(STOP_B, D30s)) - .latestArrivalTime(T00_30) - .timetable(true); - - ModuleTestDebugLogging.setupDebugLogging(data, requestBuilder); - } - - static List testCases() { - var path = "Walk 1m ~ A ~ BUS R1 0:10 0:20 ~ B ~ Walk 30s [0:09 0:20:30 11m30s Tₓ0 C₁1_380]"; - return RaptorModuleTestCase - .of() - .add(TC_MIN_DURATION, "[0:09 0:20:30 11m30s Tₓ0]") - .add(TC_MIN_DURATION_REV, "[0:18:30 0:30 11m30s Tₓ0]") - .add(standard(), PathUtils.withoutCost(path)) - .add(multiCriteria(), path) - .build(); - } - - @ParameterizedTest - @MethodSource("testCases") - void testRaptor1mSlack(RaptorModuleTestCase testCase) { - requestBuilder - .searchParams() - .earliestDepartureTime(T00_12) - .searchWindowAccessSlack(Duration.ofMinutes(3)); - - assertEquals(testCase.expected(), testCase.run(raptorService, data, requestBuilder)); - } - - @ParameterizedTest - @MethodSource("testCases") - void testRaptorNotEnoughSlack(RaptorModuleTestCase testCase) { - requestBuilder - .searchParams() - .earliestDepartureTime(T00_12) - .searchWindowAccessSlack(DurationUtils.duration("2m59s")); - - if (testCase.config() != TC_MIN_DURATION_REV) { - assertEquals("", testCase.run(raptorService, data, requestBuilder)); - } else { - assertEquals(testCase.expected(), testCase.run(raptorService, data, requestBuilder)); - } - } -} diff --git a/src/test/java/org/opentripplanner/raptor/moduletests/L01_TimePenaltyAccessTest.java b/src/test/java/org/opentripplanner/raptor/moduletests/L01_TimePenaltyAccessTest.java new file mode 100644 index 00000000000..778dd36a227 --- /dev/null +++ b/src/test/java/org/opentripplanner/raptor/moduletests/L01_TimePenaltyAccessTest.java @@ -0,0 +1,153 @@ +package org.opentripplanner.raptor.moduletests; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.opentripplanner.framework.time.TimeUtils.time; +import static org.opentripplanner.raptor._data.api.PathUtils.withoutCost; +import static org.opentripplanner.raptor._data.transit.TestAccessEgress.walk; +import static org.opentripplanner.raptor._data.transit.TestRoute.route; +import static org.opentripplanner.raptor._data.transit.TestTripSchedule.schedule; +import static org.opentripplanner.raptor.moduletests.support.RaptorModuleTestConfig.TC_STANDARD; +import static org.opentripplanner.raptor.moduletests.support.RaptorModuleTestConfig.TC_STANDARD_ONE; +import static org.opentripplanner.raptor.moduletests.support.RaptorModuleTestConfig.TC_STANDARD_REV; +import static org.opentripplanner.raptor.moduletests.support.RaptorModuleTestConfig.TC_STANDARD_REV_ONE; +import static org.opentripplanner.raptor.moduletests.support.RaptorModuleTestConfig.multiCriteria; + +import java.time.Duration; +import java.util.List; +import java.util.regex.Pattern; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; +import org.opentripplanner.raptor.RaptorService; +import org.opentripplanner.raptor._data.RaptorTestConstants; +import org.opentripplanner.raptor._data.transit.TestTransitData; +import org.opentripplanner.raptor._data.transit.TestTripSchedule; +import org.opentripplanner.raptor.api.request.RaptorRequestBuilder; +import org.opentripplanner.raptor.configure.RaptorConfig; +import org.opentripplanner.raptor.moduletests.support.ExpectedList; +import org.opentripplanner.raptor.moduletests.support.ModuleTestDebugLogging; +import org.opentripplanner.raptor.moduletests.support.RaptorModuleTestCase; + +/* + * FEATURE UNDER TEST + * + * Raptor should take into account time-penalty for access. This test focuses on checking the + * logic for the time-penalty. The penalty should be included in the access when comparing for + * optimality, but should be excluded when checking for time constraints (arrive-by/depart-after). + * All paths in this test have the same penalty; Hence, we do not compare paths with/without a + * penalty. + */ +public class L01_TimePenaltyAccessTest implements RaptorTestConstants { + + private static final Duration D8m = Duration.ofMinutes(8); + + // There are 5 possible trips + + private final TestTransitData data = new TestTransitData(); + private final RaptorRequestBuilder requestBuilder = new RaptorRequestBuilder<>(); + private final RaptorService raptorService = new RaptorService<>( + RaptorConfig.defaultConfigForTest() + ); + + @BeforeEach + public void setup() { + data.withRoute(route("R1", STOP_A, STOP_B).withTimetable(schedule("0:10 0:40").repeat(10, 60))); + requestBuilder + .searchParams() + .addAccessPaths(walk(STOP_A, D2m).withTimePenalty(D1m)) + .addEgressPaths(walk(STOP_B, D1m)); + + requestBuilder.searchParams().timetable(true); + + ModuleTestDebugLogging.setupDebugLogging(data, requestBuilder); + } + + private static List tripsAtTheEndOfTheSearchWindowTestCase() { + int edt = time("0:01"); + int lat = time("0:42"); + + var expected = new ExpectedList( + "Walk 2m 0:08 0:10 C₁240 ~ A 0s ~ BUS R1 0:10 .. [0:08 0:41 33m Tₓ0 C₁2_760]", + "Walk 2m 0:09 0:11 C₁240 ~ A 0s ~ BUS R1 0:11 .. [0:09 0:42 33m Tₓ0 C₁2_760]" + ); + + return RaptorModuleTestCase + .of() + .withRequest(r -> + r.searchParams().earliestDepartureTime(edt).latestArrivalTime(lat).searchWindow(D8m) + ) + .addMinDuration("34m", TX_0, edt, lat) + .add(TC_STANDARD, withoutCost(expected.all())) + .add(TC_STANDARD_ONE, withoutCost(expected.first())) + .add(TC_STANDARD_REV, withoutCost(expected.all())) + .add(TC_STANDARD_REV_ONE, withoutCost(expected.last())) + .add(multiCriteria(), expected.all()) + .build(); + } + + @ParameterizedTest + @MethodSource("tripsAtTheEndOfTheSearchWindowTestCase") + void tripsAtTheEndOfTheSearchWindowTest(RaptorModuleTestCase testCase) { + assertEquals( + testCase.expected(), + focusOnAccess(testCase.runDetailedResult(raptorService, data, requestBuilder)) + ); + } + + private static List tripsAtTheBeginningOfTheSearchWindowTestCases() { + int edt = time("0:16"); + // The last path arrive at the destination at 0:50, LAT=0:55 will iterate over the last 5 + // paths. + int lat = time("0:55"); + + // The latest buss is at 0:19, so with EDT=0:16 can only reach the last two buses, + // Running this test without the time-penalty confirm this result. + var expected = new ExpectedList( + "Walk 2m 0:16 0:18 C₁240 ~ A 0s ~ BUS R1 0:18 .. [0:16 0:49 33m Tₓ0 C₁2_760]", + "Walk 2m 0:17 0:19 C₁240 ~ A 0s ~ BUS R1 0:19 .. [0:17 0:50 33m Tₓ0 C₁2_760]" + ); + + return RaptorModuleTestCase + .of() + .withRequest(r -> + r.searchParams().earliestDepartureTime(edt).latestArrivalTime(lat).searchWindow(D8m) + ) + .addMinDuration("34m", TX_0, edt, lat) + .add(TC_STANDARD, withoutCost(expected.all())) + // We do not have special support for time-penalty for single iteration Raptor, so the + // first path is missed due to the penalty. + .add(TC_STANDARD_ONE, withoutCost(expected.last())) + // Note! this test that the time-penalty is removed from the "arrive-by" limit in the + // destination + .add(TC_STANDARD_REV, withoutCost(expected.all())) + .add(TC_STANDARD_REV_ONE, withoutCost(expected.last())) + .add(multiCriteria(), expected.all()) + .build(); + } + + @ParameterizedTest + @MethodSource("tripsAtTheBeginningOfTheSearchWindowTestCases") + void tripsAtTheBeginningOfTheSearchWindowTest(RaptorModuleTestCase testCase) { + assertEquals( + testCase.expected(), + focusOnAccess(testCase.runDetailedResult(raptorService, data, requestBuilder)) + ); + } + + public static String focusOnAccess(String path) { + // We are only interested in the access and the first boarding. We include the + // pareto vector as well. + var p = Pattern.compile("(.+BUS R1 \\d+:\\d+).+(\\[.+)"); + + String[] lines = path.split("\n"); + return Stream + .of(lines) + .map(s -> { + var m = p.matcher(s); + return m.find() ? m.group(1) + " .. " + m.group(2) : s; + }) + .collect(Collectors.joining("\n")); + } +} diff --git a/src/test/java/org/opentripplanner/raptor/moduletests/L01_TimePenaltyEgressTest.java b/src/test/java/org/opentripplanner/raptor/moduletests/L01_TimePenaltyEgressTest.java new file mode 100644 index 00000000000..1e6897475f4 --- /dev/null +++ b/src/test/java/org/opentripplanner/raptor/moduletests/L01_TimePenaltyEgressTest.java @@ -0,0 +1,158 @@ +package org.opentripplanner.raptor.moduletests; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.opentripplanner.framework.time.TimeUtils.time; +import static org.opentripplanner.raptor._data.api.PathUtils.withoutCost; +import static org.opentripplanner.raptor._data.transit.TestAccessEgress.walk; +import static org.opentripplanner.raptor._data.transit.TestRoute.route; +import static org.opentripplanner.raptor._data.transit.TestTripSchedule.schedule; +import static org.opentripplanner.raptor.moduletests.support.RaptorModuleTestConfig.TC_STANDARD; +import static org.opentripplanner.raptor.moduletests.support.RaptorModuleTestConfig.TC_STANDARD_ONE; +import static org.opentripplanner.raptor.moduletests.support.RaptorModuleTestConfig.TC_STANDARD_REV; +import static org.opentripplanner.raptor.moduletests.support.RaptorModuleTestConfig.TC_STANDARD_REV_ONE; +import static org.opentripplanner.raptor.moduletests.support.RaptorModuleTestConfig.multiCriteria; + +import java.time.Duration; +import java.util.List; +import java.util.regex.Pattern; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; +import org.opentripplanner.raptor.RaptorService; +import org.opentripplanner.raptor._data.RaptorTestConstants; +import org.opentripplanner.raptor._data.api.PathUtils; +import org.opentripplanner.raptor._data.transit.TestTransitData; +import org.opentripplanner.raptor._data.transit.TestTripSchedule; +import org.opentripplanner.raptor.api.request.RaptorRequestBuilder; +import org.opentripplanner.raptor.configure.RaptorConfig; +import org.opentripplanner.raptor.moduletests.support.ExpectedList; +import org.opentripplanner.raptor.moduletests.support.ModuleTestDebugLogging; +import org.opentripplanner.raptor.moduletests.support.RaptorModuleTestCase; + +/* + * FEATURE UNDER TEST + * + * Raptor should take into account time-penalty for egress. This test focuses on checking the + * logic for the time-penalty. The penalty should be included in the egress when comparing for + * optimality, but should be excluded when checking for time constraints (arrive-by/depart-after). + * All paths in this test have the same penalty; Hence, we do not compare paths with/without a + * penalty. + *

    + * Tip! Remove time-penalty from egress and the test should in most cases have the same result. + */ +public class L01_TimePenaltyEgressTest implements RaptorTestConstants { + + private static final Duration D8m = Duration.ofMinutes(8); + + // There are 5 possible trips + + private final TestTransitData data = new TestTransitData(); + private final RaptorRequestBuilder requestBuilder = new RaptorRequestBuilder<>(); + private final RaptorService raptorService = new RaptorService<>( + RaptorConfig.defaultConfigForTest() + ); + + @BeforeEach + public void setup() { + data.withRoute(route("R1", STOP_A, STOP_B).withTimetable(schedule("0:10 0:40").repeat(10, 60))); + requestBuilder + .searchParams() + .addAccessPaths(walk(STOP_A, D1m)) + .addEgressPaths(walk(STOP_B, D2m).withTimePenalty(D1m)); + + requestBuilder.searchParams().timetable(true); + + ModuleTestDebugLogging.setupDebugLogging(data, requestBuilder); + } + + private static List firstTwoPathsArriveBeforeLAT() { + // EDT is set to allow 5 paths - not a limiting factor. + int edt = time("0:05"); + // We limit the search to the two first paths by setting the LAT to 0:43. + int lat = time("0:43"); + + var expected = new ExpectedList( + "BUS R1 0:10 0:40 30m ~ B 0s ~ Walk 2m 0:40 0:42 [0:09 0:42 33m Tₓ0]", + "BUS R1 0:11 0:41 30m ~ B 0s ~ Walk 2m 0:41 0:43 [0:10 0:43 33m Tₓ0]" + ); + + return RaptorModuleTestCase + .of() + .withRequest(r -> + r.searchParams().earliestDepartureTime(edt).latestArrivalTime(lat).searchWindow(D8m) + ) + .addMinDuration("34m", TX_0, edt, lat) + .add(TC_STANDARD, withoutCost(expected.all())) + .add(TC_STANDARD_ONE, withoutCost(expected.first())) + .add(TC_STANDARD_REV, withoutCost(expected.all())) + // The egress time-penalty will cause the first path to be missed (singe iteration) + .add(TC_STANDARD_REV_ONE, withoutCost(expected.first())) + .add(multiCriteria(), expected.all()) + .build(); + } + + @ParameterizedTest + @MethodSource("firstTwoPathsArriveBeforeLAT") + void firstTwoPathsArriveBeforeLAT(RaptorModuleTestCase testCase) { + assertEquals( + testCase.expected(), + focusOnEgress(testCase.runDetailedResult(raptorService, data, requestBuilder)) + ); + } + + private static List lastTwoPathsDepartsAfterEDT() { + // The latest buss is at 0:19, so with EDT=0:17 can only reach the last two buses. + int edt = time("0:17"); + int lat = time("0:51"); + + var expected = new ExpectedList( + "BUS R1 0:18 0:48 30m ~ B 0s ~ Walk 2m 0:48 0:50 [0:17 0:50 33m Tₓ0]", + "BUS R1 0:19 0:49 30m ~ B 0s ~ Walk 2m 0:49 0:51 [0:18 0:51 33m Tₓ0]" + ); + + return RaptorModuleTestCase + .of() + .withRequest(r -> + r.searchParams().earliestDepartureTime(edt).latestArrivalTime(lat).searchWindow(D8m) + ) + .addMinDuration("34m", TX_0, edt, lat) + // Note! this test that the time-penalty is removed from the "arrive-by" limit in the + // destination + .add(TC_STANDARD, withoutCost(expected.all())) + .add(TC_STANDARD_ONE, withoutCost(expected.first())) + .add(TC_STANDARD_REV, withoutCost(expected.all())) + // We do not have special support for time-penalty for single iteration Raptor, so the + // "last" path is missed due to the penalty for a reverse search. + .add(TC_STANDARD_REV_ONE, withoutCost(expected.first())) + .add(multiCriteria(), expected.all()) + .build(); + } + + @ParameterizedTest + @MethodSource("lastTwoPathsDepartsAfterEDT") + void lastTwoPathsDepartsAfterEDT(RaptorModuleTestCase testCase) { + assertEquals( + testCase.expected(), + focusOnEgress(testCase.runDetailedResult(raptorService, data, requestBuilder)) + ); + } + + public static String focusOnEgress(String path) { + // We are only interested in the access and the first boarding. We include the + // pareto vector as well. + var p = Pattern.compile("(BUS R1 .+)(\\[.+)"); + + // BUS R1 0:18 0:48 30m ~ B 0s ~ Walk 1m 0:48 0:49 .. [0:16 0:49 33m Tₓ0] + String[] lines = path.split("\n"); + return Stream + .of(lines) + .map(s -> { + int pos = s.indexOf("BUS"); + return pos > 0 ? s.substring(pos) : s; + }) + .map(PathUtils::withoutCost) + .collect(Collectors.joining("\n")); + } +} diff --git a/src/test/java/org/opentripplanner/raptor/moduletests/support/ExpectedList.java b/src/test/java/org/opentripplanner/raptor/moduletests/support/ExpectedList.java index ce4a68b1025..bca2c31ef0e 100644 --- a/src/test/java/org/opentripplanner/raptor/moduletests/support/ExpectedList.java +++ b/src/test/java/org/opentripplanner/raptor/moduletests/support/ExpectedList.java @@ -22,14 +22,6 @@ public String[] first(int n) { return range(0, n); } - public String get(int index) { - return items[index]; - } - - public String[] get(int... indexes) { - return Arrays.stream(indexes).mapToObj(i -> items[i]).toList().toArray(new String[0]); - } - public String last() { return items[items.length - 1]; } @@ -38,6 +30,14 @@ public String[] last(int n) { return range(items.length - n, items.length); } + public String get(int index) { + return items[index]; + } + + public String[] get(int... indexes) { + return Arrays.stream(indexes).mapToObj(i -> items[i]).toList().toArray(new String[0]); + } + public String[] range(int startInclusive, int endExclusive) { return Arrays.stream(items, startInclusive, endExclusive).toList().toArray(new String[0]); } diff --git a/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/AccessPathsTest.java b/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/AccessPathsTest.java new file mode 100644 index 00000000000..8611a046a5b --- /dev/null +++ b/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/AccessPathsTest.java @@ -0,0 +1,308 @@ +package org.opentripplanner.raptor.rangeraptor.transit; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.opentripplanner.raptor._data.transit.TestAccessEgress.flex; +import static org.opentripplanner.raptor._data.transit.TestAccessEgress.flexAndWalk; +import static org.opentripplanner.raptor._data.transit.TestAccessEgress.walk; +import static org.opentripplanner.raptor.api.model.SearchDirection.FORWARD; +import static org.opentripplanner.raptor.api.model.SearchDirection.REVERSE; +import static org.opentripplanner.raptor.api.request.RaptorProfile.MULTI_CRITERIA; +import static org.opentripplanner.raptor.api.request.RaptorProfile.STANDARD; + +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.Objects; +import org.junit.jupiter.api.Test; +import org.opentripplanner.raptor._data.RaptorTestConstants; +import org.opentripplanner.raptor._data.transit.TestAccessEgress; +import org.opentripplanner.raptor.api.model.RaptorAccessEgress; +import org.opentripplanner.raptor.api.request.RaptorProfile; + +class AccessPathsTest implements RaptorTestConstants { + + // Walking paths + public static final TestAccessEgress WALK_FAST = walk(STOP_A, 29, 900); + public static final TestAccessEgress WALK_MEDIUM = walk(STOP_A, 30, 800); + public static final TestAccessEgress WALK_COST = walk(STOP_A, 31, 700); + public static final TestAccessEgress WALK_BAD = walk(STOP_A, 30, 900); + public static final TestAccessEgress WALK_B = walk(STOP_B, 60, 2000); + + // Flex with on board arrival + public static final TestAccessEgress FLEX_FAST = flex(STOP_A, 25, 3, 900); + public static final TestAccessEgress FLEX_COST = flex(STOP_A, 31, 3, 500); + public static final TestAccessEgress FLEX_TX2 = flex(STOP_A, 26, 2, 900); + public static final TestAccessEgress FLEX_BAD = flex(STOP_A, 26, 3, 900); + public static final TestAccessEgress FLEX_B = flex(STOP_B, 50, 3, 2000); + + // Flex with walking + public static final TestAccessEgress FLEX_WALK_FAST = flexAndWalk(STOP_A, 25, 2, 900); + public static final TestAccessEgress FLEX_WALK_COST = flexAndWalk(STOP_A, 31, 2, 400); + public static final TestAccessEgress FLEX_WALK_TX1 = flexAndWalk(STOP_A, 28, 1, 900); + public static final TestAccessEgress FLEX_WALK_BAD = flexAndWalk(STOP_A, 26, 2, 900); + public static final TestAccessEgress FLEX_WALK_B = flexAndWalk(STOP_B, 50, 2, 2000); + + @Test + void arrivedOnStreetByNumOfRides() { + var accessPaths = create(STANDARD); + expect(accessPaths.arrivedOnStreetByNumOfRides(0), WALK_FAST, WALK_B); + expect(accessPaths.arrivedOnStreetByNumOfRides(1), FLEX_WALK_TX1); + expect(accessPaths.arrivedOnStreetByNumOfRides(2), FLEX_WALK_FAST, FLEX_WALK_B); + expect(accessPaths.arrivedOnStreetByNumOfRides(3)); + + accessPaths = create(MULTI_CRITERIA); + expect(accessPaths.arrivedOnStreetByNumOfRides(0), WALK_FAST, WALK_MEDIUM, WALK_COST, WALK_B); + expect(accessPaths.arrivedOnStreetByNumOfRides(1), FLEX_WALK_TX1); + expect(accessPaths.arrivedOnStreetByNumOfRides(2), FLEX_WALK_FAST, FLEX_WALK_COST, FLEX_WALK_B); + expect(accessPaths.arrivedOnStreetByNumOfRides(3)); + } + + @Test + void arrivedOnBoardByNumOfRides() { + var accessPaths = create(STANDARD); + expect(accessPaths.arrivedOnBoardByNumOfRides(0)); + expect(accessPaths.arrivedOnBoardByNumOfRides(1)); + expect(accessPaths.arrivedOnBoardByNumOfRides(2), FLEX_TX2); + expect(accessPaths.arrivedOnBoardByNumOfRides(3), FLEX_FAST, FLEX_B); + expect(accessPaths.arrivedOnBoardByNumOfRides(4)); + + accessPaths = create(MULTI_CRITERIA); + expect(accessPaths.arrivedOnBoardByNumOfRides(0)); + expect(accessPaths.arrivedOnBoardByNumOfRides(1)); + expect(accessPaths.arrivedOnBoardByNumOfRides(2), FLEX_TX2); + expect(accessPaths.arrivedOnBoardByNumOfRides(3), FLEX_FAST, FLEX_COST, FLEX_B); + expect(accessPaths.arrivedOnBoardByNumOfRides(4)); + } + + @Test + void calculateMaxNumberOfRides() { + assertEquals(3, create(STANDARD).calculateMaxNumberOfRides()); + assertEquals(3, create(MULTI_CRITERIA).calculateMaxNumberOfRides()); + } + + @Test + void iterateOverPathsWithTimePenalty() { + // Expected at departure 540 + var flexFastWithPenalty = FLEX_FAST.withTimePenalty(60); + + // Expected at departure 540 and 480 + var flexTxWithPenalty = FLEX_TX2.withTimePenalty(61); + var flexCostWithPenalty = FLEX_COST.withTimePenalty(120); + + // Expected at departure 540, 480 and 420 + var walkFastWithPenalty = WALK_FAST.withTimePenalty(121); + var walkCostWithPenalty = WALK_COST.withTimePenalty(180); + + // Without time-penalty, the iterator should be empty + var accessPaths = AccessPaths.create( + 60, + List.of( + flexFastWithPenalty, + flexTxWithPenalty, + flexCostWithPenalty, + walkFastWithPenalty, + walkCostWithPenalty, + // Should be filtered away + WALK_B, + FLEX_B, + FLEX_WALK_B + ), + MULTI_CRITERIA, + FORWARD + ); + + // Make sure standard iterator works + expect( + accessPaths.arrivedOnStreetByNumOfRides(0), + WALK_B, + walkFastWithPenalty, + walkCostWithPenalty + ); + expect(accessPaths.arrivedOnBoardByNumOfRides(1)); + expect(accessPaths.arrivedOnStreetByNumOfRides(1)); + expect(accessPaths.arrivedOnBoardByNumOfRides(2), flexTxWithPenalty); + expect(accessPaths.arrivedOnStreetByNumOfRides(2), FLEX_WALK_B); + expect( + accessPaths.arrivedOnBoardByNumOfRides(3), + FLEX_B, + flexFastWithPenalty, + flexCostWithPenalty + ); + expect(accessPaths.arrivedOnStreetByNumOfRides(3)); + + var iterator = accessPaths.iterateOverPathsWithPenalty(600); + + // First iteration + assertTrue(iterator.hasNext()); + assertEquals(540, iterator.next()); + expect(accessPaths.arrivedOnStreetByNumOfRides(0), walkFastWithPenalty, walkCostWithPenalty); + expect(accessPaths.arrivedOnBoardByNumOfRides(1)); + expect(accessPaths.arrivedOnStreetByNumOfRides(1)); + expect(accessPaths.arrivedOnBoardByNumOfRides(2), flexTxWithPenalty); + expect(accessPaths.arrivedOnStreetByNumOfRides(2)); + //expect(accessPaths.arrivedOnBoardByNumOfRides(3), flexFastWithPenalty, flexCostWithPenalty); + expect(accessPaths.arrivedOnStreetByNumOfRides(3)); + expect(accessPaths.arrivedOnBoardByNumOfRides(4)); + expect(accessPaths.arrivedOnStreetByNumOfRides(4)); + + // Second iteration + assertTrue(iterator.hasNext()); + assertEquals(480, iterator.next()); + expect(accessPaths.arrivedOnStreetByNumOfRides(0), walkFastWithPenalty, walkCostWithPenalty); + expect(accessPaths.arrivedOnBoardByNumOfRides(2), flexTxWithPenalty); + expect(accessPaths.arrivedOnBoardByNumOfRides(3), flexCostWithPenalty); + + // Third iteration + assertTrue(iterator.hasNext()); + assertEquals(420, iterator.next()); + expect(accessPaths.arrivedOnStreetByNumOfRides(0), walkFastWithPenalty, walkCostWithPenalty); + expect(accessPaths.arrivedOnBoardByNumOfRides(2)); + expect(accessPaths.arrivedOnBoardByNumOfRides(3)); + + assertFalse(iterator.hasNext()); + } + + @Test + void iterateOverPathsWithTimePenaltyInReversDirection() { + // Expected at departure 540 + var flexFastWithPenalty = FLEX_FAST.withTimePenalty(60); + + // Expected at departure 540 and 480 + var flexTxWithPenalty = FLEX_TX2.withTimePenalty(61); + + // Expected at departure 540, 480 and 420 + var walkFastWithPenalty = WALK_FAST.withTimePenalty(121); + + // Without time-penalty, the iterator should be empty + var accessPaths = AccessPaths.create( + 60, + List.of(flexFastWithPenalty, flexTxWithPenalty, walkFastWithPenalty, WALK_B, FLEX_B), + STANDARD, + REVERSE + ); + + // Make sure standard iterator works + expect(accessPaths.arrivedOnStreetByNumOfRides(0), WALK_B, walkFastWithPenalty); + expect(accessPaths.arrivedOnBoardByNumOfRides(3), FLEX_B, flexFastWithPenalty); + + var iterator = accessPaths.iterateOverPathsWithPenalty(600); + + // First iteration + assertTrue(iterator.hasNext()); + assertEquals(660, iterator.next()); + expect(accessPaths.arrivedOnStreetByNumOfRides(0), walkFastWithPenalty); + expect(accessPaths.arrivedOnBoardByNumOfRides(1)); + expect(accessPaths.arrivedOnStreetByNumOfRides(1)); + expect(accessPaths.arrivedOnBoardByNumOfRides(2), flexTxWithPenalty); + expect(accessPaths.arrivedOnStreetByNumOfRides(2)); + expect(accessPaths.arrivedOnBoardByNumOfRides(3), flexFastWithPenalty); + expect(accessPaths.arrivedOnStreetByNumOfRides(3)); + expect(accessPaths.arrivedOnBoardByNumOfRides(4)); + expect(accessPaths.arrivedOnStreetByNumOfRides(4)); + + // Second iteration + assertTrue(iterator.hasNext()); + assertEquals(720, iterator.next()); + expect(accessPaths.arrivedOnStreetByNumOfRides(0), walkFastWithPenalty); + expect(accessPaths.arrivedOnBoardByNumOfRides(2), flexTxWithPenalty); + expect(accessPaths.arrivedOnBoardByNumOfRides(3)); + + // Third iteration + assertTrue(iterator.hasNext()); + assertEquals(780, iterator.next()); + expect(accessPaths.arrivedOnStreetByNumOfRides(0), walkFastWithPenalty); + expect(accessPaths.arrivedOnBoardByNumOfRides(2)); + expect(accessPaths.arrivedOnBoardByNumOfRides(3)); + + assertFalse(iterator.hasNext()); + } + + @Test + void testRegularIteratorsAndIteratorWithPenaltyWorksTogether() { + var walkFastWithPenalty = WALK_FAST.withTimePenalty(60); + + // Without time-penalty, the iterator should be empty + var accessPaths = AccessPaths.create( + 60, + List.of(walkFastWithPenalty, WALK_COST), + MULTI_CRITERIA, + FORWARD + ); + + // Both accesses are expected before with enter the "time-penalty" iteration + expect(accessPaths.arrivedOnStreetByNumOfRides(0), WALK_COST, walkFastWithPenalty); + expect(accessPaths.arrivedOnBoardByNumOfRides(0)); + + var iterator = accessPaths.iterateOverPathsWithPenalty(600); + + // First iteration - only access with time-penalty is expected + assertTrue(iterator.hasNext()); + assertEquals(540, iterator.next()); + expect(accessPaths.arrivedOnStreetByNumOfRides(0), walkFastWithPenalty); + expect(accessPaths.arrivedOnBoardByNumOfRides(0)); + + // Second iteration - Done + assertFalse(iterator.hasNext()); + } + + @Test + void hasTimeDependentAccess() { + var accessPaths = AccessPaths.create( + 60, + List.of(WALK_FAST, walk(STOP_A, 20).openingHours(1200, 2400)), + STANDARD, + FORWARD + ); + assertTrue(accessPaths.hasTimeDependentAccess(), "Time dependent access is better."); + + accessPaths = + AccessPaths.create( + 60, + List.of(WALK_FAST, walk(STOP_A, 50).openingHours(1200, 2400)), + STANDARD, + REVERSE + ); + assertFalse(accessPaths.hasTimeDependentAccess(), "Time dependent access is worse."); + } + + @Test + void hasNoTimeDependentAccess() { + var accessPaths = create(STANDARD); + assertFalse(accessPaths.hasTimeDependentAccess()); + + var it = accessPaths.iterateOverPathsWithPenalty(600); + assertFalse(it.hasNext()); + } + + private static void expect( + Collection result, + RaptorAccessEgress... expected + ) { + var r = result.stream().map(Objects::toString).sorted().toList(); + var e = Arrays.stream(expected).map(Objects::toString).sorted().toList(); + assertEquals(e, r); + } + + private static AccessPaths create(RaptorProfile profile) { + Collection accessPaths = List.of( + WALK_FAST, + WALK_MEDIUM, + WALK_COST, + WALK_BAD, + WALK_B, + FLEX_WALK_FAST, + FLEX_WALK_COST, + FLEX_WALK_TX1, + FLEX_WALK_BAD, + FLEX_WALK_B, + FLEX_FAST, + FLEX_COST, + FLEX_TX2, + FLEX_BAD, + FLEX_B + ); + return AccessPaths.create(60, accessPaths, profile, FORWARD); + } +} diff --git a/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/AccessWithPenaltyTest.java b/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/AccessWithPenaltyTest.java new file mode 100644 index 00000000000..bead5d607c6 --- /dev/null +++ b/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/AccessWithPenaltyTest.java @@ -0,0 +1,75 @@ +package org.opentripplanner.raptor.rangeraptor.transit; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertSame; +import static org.opentripplanner.raptor._data.RaptorTestConstants.SECONDS_IN_A_DAY; +import static org.opentripplanner.raptor._data.transit.TestAccessEgress.walk; +import static org.opentripplanner.raptor.api.model.RaptorConstants.TIME_NOT_SET; + +import org.junit.jupiter.api.Test; + +class AccessWithPenaltyTest { + + private static final int STOP = 17; + private static final int DURATION = 400; + private static final int PENALTY = 100; + private static final int OPEN = 600; + private static final int CLOSE = 1800; + private static final int ANY_TIME = 500; + private static final int EXPECTED_OPENING = OPEN - PENALTY; + private static final int EXPECTED_CLOSING = CLOSE - PENALTY; + private static final int ONE_DAY = SECONDS_IN_A_DAY; + + @Test + void durationInSeconds() { + var subject = new AccessWithPenalty(walk(STOP, DURATION).withTimePenalty(PENALTY)); + assertEquals(DURATION + PENALTY, subject.durationInSeconds()); + } + + @Test + void earliestDepartureTimeIsBeforeOpeningHours() { + var subject = new AccessWithPenalty( + walk(STOP, DURATION).openingHours(OPEN, CLOSE).withTimePenalty(PENALTY) + ); + + assertEquals(EXPECTED_OPENING, subject.earliestDepartureTime(EXPECTED_OPENING - 200)); + assertEquals(EXPECTED_OPENING, subject.earliestDepartureTime(EXPECTED_OPENING - 1)); + } + + @Test + void earliestDepartureTimeIsInsideOpeningHours() { + var subject = new AccessWithPenalty( + walk(STOP, DURATION).openingHours(OPEN, CLOSE).withTimePenalty(PENALTY) + ); + + assertEquals(EXPECTED_OPENING, subject.earliestDepartureTime(EXPECTED_OPENING)); + assertEquals(EXPECTED_CLOSING, subject.earliestDepartureTime(EXPECTED_CLOSING)); + } + + @Test + void earliestDepartureTimeIsAfterClosing() { + var subject = new AccessWithPenalty( + walk(STOP, DURATION).openingHours(OPEN, CLOSE).withTimePenalty(PENALTY) + ); + + // If time is after closing, then wait until it opens next day. This is TestAccessEgress + // implementation specific. + assertEquals(EXPECTED_OPENING + ONE_DAY, subject.earliestDepartureTime(EXPECTED_CLOSING + 1)); + } + + @Test + void earliestDepartureTimeWhenServiceIsClosed() { + // Test closed + var subject = new AccessWithPenalty( + walk(STOP, DURATION).openingHoursClosed().withTimePenalty(PENALTY) + ); + assertEquals(TIME_NOT_SET, subject.earliestDepartureTime(ANY_TIME)); + } + + @Test + void removeDecoratorIfItExist() { + var original = walk(STOP, DURATION).withTimePenalty(PENALTY); + var subject = new AccessWithPenalty(original); + assertSame(original, subject.removeDecorator()); + } +} diff --git a/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/EgressWithPenaltyTest.java b/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/EgressWithPenaltyTest.java new file mode 100644 index 00000000000..7277876dec6 --- /dev/null +++ b/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/EgressWithPenaltyTest.java @@ -0,0 +1,78 @@ +package org.opentripplanner.raptor.rangeraptor.transit; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertSame; +import static org.opentripplanner.raptor._data.RaptorTestConstants.SECONDS_IN_A_DAY; +import static org.opentripplanner.raptor._data.transit.TestAccessEgress.walk; +import static org.opentripplanner.raptor.api.model.RaptorConstants.TIME_NOT_SET; + +import org.junit.jupiter.api.Test; + +class EgressWithPenaltyTest { + + private static final int STOP = 17; + private static final int DURATION = 400; + private static final int PENALTY = 100; + private static final int OPEN = 600; + private static final int CLOSE = 1800; + private static final int ANY_TIME = 500; + + // We are interested in the opening hours at the arrival, not in the beginning of the egress leg. + // Hence, we must add egress duration as well here. + private static final int EXPECTED_OPENING = OPEN + PENALTY + DURATION; + private static final int EXPECTED_CLOSING = CLOSE + PENALTY + DURATION; + private static final int ONE_DAY = SECONDS_IN_A_DAY; + + @Test + void durationInSeconds() { + var subject = new EgressWithPenalty(walk(STOP, DURATION).withTimePenalty(PENALTY)); + assertEquals(DURATION + PENALTY, subject.durationInSeconds()); + } + + @Test + void latestArrivalTimeIsBeforeOpeningHours() { + var subject = new EgressWithPenalty( + walk(STOP, DURATION).openingHours(OPEN, CLOSE).withTimePenalty(PENALTY) + ); + + // If time is before opening, then time-shift to the closing of the previous day. This is + // TestAccessEgress implementation specific. + assertEquals(EXPECTED_CLOSING - ONE_DAY, subject.latestArrivalTime(EXPECTED_OPENING - 1)); + } + + @Test + void latestArrivalTimeIsInsideOpeningHours() { + var subject = new EgressWithPenalty( + walk(STOP, DURATION).openingHours(OPEN, CLOSE).withTimePenalty(PENALTY) + ); + + assertEquals(EXPECTED_OPENING, subject.latestArrivalTime(EXPECTED_OPENING)); + assertEquals(EXPECTED_CLOSING, subject.latestArrivalTime(EXPECTED_CLOSING)); + } + + @Test + void latestArrivalTimeIsAfterClosing() { + var subject = new EgressWithPenalty( + walk(STOP, DURATION).openingHours(OPEN, CLOSE).withTimePenalty(PENALTY) + ); + + assertEquals(EXPECTED_CLOSING, subject.latestArrivalTime(EXPECTED_CLOSING + 1)); + assertEquals(EXPECTED_CLOSING, subject.latestArrivalTime(EXPECTED_CLOSING + 100)); + } + + @Test + void latestArrivalTimeWhenServiceIsClosed() { + // Test closed + var subject = new EgressWithPenalty( + walk(STOP, DURATION).openingHoursClosed().withTimePenalty(PENALTY) + ); + assertEquals(TIME_NOT_SET, subject.latestArrivalTime(ANY_TIME)); + } + + @Test + void removeDecoratorIfItExist() { + var original = walk(STOP, DURATION).withTimePenalty(PENALTY); + var subject = new EgressWithPenalty(original); + assertSame(original, subject.removeDecorator()); + } +} diff --git a/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardRaptorTransitCalculatorTest.java b/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardRaptorTransitCalculatorTest.java index 0a992cc412d..ad7a269b856 100644 --- a/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardRaptorTransitCalculatorTest.java +++ b/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardRaptorTransitCalculatorTest.java @@ -8,77 +8,41 @@ import static org.opentripplanner.raptor._data.RaptorTestConstants.STOP_A; import static org.opentripplanner.raptor._data.RaptorTestConstants.STOP_B; -import javax.annotation.Nullable; import org.junit.jupiter.api.Test; -import org.opentripplanner.framework.lang.IntBox; +import org.opentripplanner.raptor._data.transit.TestAccessEgress; import org.opentripplanner.raptor._data.transit.TestTransfer; import org.opentripplanner.raptor._data.transit.TestTransitData; import org.opentripplanner.raptor._data.transit.TestTripSchedule; -import org.opentripplanner.raptor.api.model.PathLegType; import org.opentripplanner.raptor.api.model.RaptorConstants; -import org.opentripplanner.raptor.api.view.ArrivalView; import org.opentripplanner.raptor.spi.IntIterator; public class ForwardRaptorTransitCalculatorTest { + private static final int BIG_TIME = hm2time(100, 0); private int earliestDepartureTime = hm2time(8, 0); private int searchWindowSizeInSeconds = 2 * 60 * 60; private int latestAcceptableArrivalTime = hm2time(16, 0); private int iterationStep = 60; - private int desiredC2 = 0; @Test public void exceedsTimeLimit() { latestAcceptableArrivalTime = 1200; var subject = create(); - assertTrue(subject.rejectDestinationArrival(new TestArrivalView(desiredC2, 0)).isEmpty()); - assertTrue( - subject - .rejectDestinationArrival(new TestArrivalView(desiredC2, latestAcceptableArrivalTime)) - .isEmpty() - ); - assertFalse( - subject - .rejectDestinationArrival(new TestArrivalView(desiredC2, latestAcceptableArrivalTime + 1)) - .isEmpty() - ); + assertFalse(subject.exceedsTimeLimit(latestAcceptableArrivalTime)); + assertTrue(subject.exceedsTimeLimit(latestAcceptableArrivalTime + 1)); latestAcceptableArrivalTime = hm2time(16, 0); - subject = create(); - var errors = subject.rejectDestinationArrival( - new TestArrivalView(desiredC2, latestAcceptableArrivalTime + 1) - ); - assertEquals(1, errors.size()); + assertEquals( "The arrival time exceeds the time limit, arrive to late: 16:00:00.", - errors.stream().findFirst().get() + create().exceedsTimeLimitReason() ); latestAcceptableArrivalTime = RaptorConstants.TIME_NOT_SET; subject = create(); - assertTrue(subject.rejectDestinationArrival(new TestArrivalView(desiredC2, 0)).isEmpty()); - assertTrue( - subject.rejectDestinationArrival(new TestArrivalView(desiredC2, 2_000_000_000)).isEmpty() - ); - } - - @Test - public void rejectC2AtDestination() { - desiredC2 = 1; - var subject = create(); - - var errors = subject.rejectDestinationArrival( - new TestArrivalView(desiredC2, latestAcceptableArrivalTime) - ); - assertTrue(errors.isEmpty()); - - errors = - subject.rejectDestinationArrival( - new TestArrivalView(desiredC2 + 1, latestAcceptableArrivalTime) - ); - assertEquals(1, errors.size()); - assertEquals("C2 value rejected: 2.", errors.stream().findFirst().get()); + assertFalse(subject.exceedsTimeLimit(-BIG_TIME)); + assertFalse(subject.exceedsTimeLimit(BIG_TIME)); } @Test @@ -122,13 +86,28 @@ public void getTransfers() { assertFalse(subject.getTransfers(transitData, STOP_B).hasNext()); } + @Test + void timeMinusPenalty() { + var subject = create(); + var walk200s = TestAccessEgress.walk(15, 200); + int time = 1000; + int penalty = 300; + int expectedTimeWithoutPenalty = time - penalty; + + assertEquals(time, subject.timeMinusPenalty(time, walk200s)); + assertEquals( + expectedTimeWithoutPenalty, + subject.timeMinusPenalty(time, walk200s.withTimePenalty(penalty)) + ); + } + private RaptorTransitCalculator create() { return new ForwardRaptorTransitCalculator<>( earliestDepartureTime, searchWindowSizeInSeconds, latestAcceptableArrivalTime, - iterationStep, - c2 -> c2 == desiredC2 + iterationStep + //c2 -> c2 == desiredC2 ); } @@ -139,47 +118,4 @@ private void assertIntIterator(IntIterator it, int... values) { } assertFalse(it.hasNext()); } - - public record TestArrivalView(int c2, int arrivalTime) implements ArrivalView { - @Override - public int stop() { - return c2; - } - - @Override - public int round() { - return 0; - } - - @Override - public int arrivalTime() { - return arrivalTime; - } - - @Override - public int c1() { - return 0; - } - - @Override - public int c2() { - return c2; - } - - @Nullable - @Override - public ArrivalView previous() { - return null; - } - - @Override - public PathLegType arrivedBy() { - return null; - } - - @Override - public boolean arrivedOnBoard() { - return false; - } - } } diff --git a/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseRaptorTransitCalculatorTest.java b/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseRaptorTransitCalculatorTest.java index 898a11fafa7..3afecaf3e81 100644 --- a/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseRaptorTransitCalculatorTest.java +++ b/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseRaptorTransitCalculatorTest.java @@ -12,10 +12,13 @@ import org.opentripplanner.raptor._data.transit.TestTransfer; import org.opentripplanner.raptor._data.transit.TestTransitData; import org.opentripplanner.raptor._data.transit.TestTripSchedule; +import org.opentripplanner.raptor.api.model.RaptorConstants; import org.opentripplanner.raptor.spi.IntIterator; public class ReverseRaptorTransitCalculatorTest { + private static final int BIG_TIME = hm2time(100, 0); + private int latestArrivalTime = hm2time(8, 0); private int searchWindowSizeInSeconds = 2 * 60 * 60; private int earliestAcceptableDepartureTime = hm2time(16, 0); @@ -37,10 +40,10 @@ public void exceedsTimeLimit() { create().exceedsTimeLimitReason() ); - earliestAcceptableDepartureTime = -1; + earliestAcceptableDepartureTime = RaptorConstants.TIME_NOT_SET; subject = create(); - assertFalse(subject.exceedsTimeLimit(0)); - assertFalse(subject.exceedsTimeLimit(2_000_000_000)); + assertFalse(subject.exceedsTimeLimit(-BIG_TIME)); + assertFalse(subject.exceedsTimeLimit(BIG_TIME)); } @Test diff --git a/src/test/java/org/opentripplanner/raptor/util/IntIteratorsTest.java b/src/test/java/org/opentripplanner/raptor/util/IntIteratorsTest.java index ea9785dea26..598287164c2 100644 --- a/src/test/java/org/opentripplanner/raptor/util/IntIteratorsTest.java +++ b/src/test/java/org/opentripplanner/raptor/util/IntIteratorsTest.java @@ -84,6 +84,11 @@ public void testSingleValueIterator() { assertEquals("[3]", toString(singleValueIterator(3))); } + @Test + public void testEmptyIterator() { + assertEquals("[]", toString(IntIterators.empty())); + } + private static String toString(IntIterator it) { StringBuilder buf = new StringBuilder(); boolean empty = true; diff --git a/src/test/java/org/opentripplanner/routing/algorithm/TurnCostTest.java b/src/test/java/org/opentripplanner/routing/algorithm/TurnCostTest.java index 53e340dcc63..e93c8b5b615 100644 --- a/src/test/java/org/opentripplanner/routing/algorithm/TurnCostTest.java +++ b/src/test/java/org/opentripplanner/routing/algorithm/TurnCostTest.java @@ -92,8 +92,9 @@ public void before() { proto = new RouteRequest(); proto.withPreferences(preferences -> preferences - .withCar(it -> it.withSpeed(1.0).withReluctance(1.0)) + .withCar(it -> it.withReluctance(1.0)) .withBike(bike -> bike.withSpeed(1.0).withReluctance(1.0)) + .withScooter(scooter -> scooter.withSpeed(1.0).withReluctance(1.0)) .withWalk(walk -> walk.withSpeed(1.0).withStairsReluctance(1.0).withReluctance(1.0)) .withStreet(it -> it.withTurnReluctance(1.0)) ); diff --git a/src/test/java/org/opentripplanner/routing/algorithm/mapping/ElevationSnapshotTest.java b/src/test/java/org/opentripplanner/routing/algorithm/mapping/ElevationSnapshotTest.java index 9027b0a0dd5..677edfcbabf 100644 --- a/src/test/java/org/opentripplanner/routing/algorithm/mapping/ElevationSnapshotTest.java +++ b/src/test/java/org/opentripplanner/routing/algorithm/mapping/ElevationSnapshotTest.java @@ -19,7 +19,7 @@ import org.opentripplanner.routing.api.request.RouteRequest; import org.opentripplanner.routing.api.request.StreetMode; import org.opentripplanner.routing.api.request.request.filter.AllowAllTransitFilter; -import org.opentripplanner.routing.core.BicycleOptimizeType; +import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; import org.opentripplanner.routing.error.RoutingValidationException; @ExtendWith(SnapshotExtension.class) @@ -98,7 +98,7 @@ public void directBike() { request.withPreferences(pref -> pref.withBike(bike -> bike - .withOptimizeType(BicycleOptimizeType.TRIANGLE) + .withOptimizeType(VehicleRoutingOptimizeType.TRIANGLE) .withOptimizeTriangle(b -> b.withTime(0.3).withSlope(0.4).withSafety(0.3)) ) ); diff --git a/src/test/java/org/opentripplanner/routing/algorithm/mapping/RaptorPathToItineraryMapperTest.java b/src/test/java/org/opentripplanner/routing/algorithm/mapping/RaptorPathToItineraryMapperTest.java index 2b8f792a455..8c0710d7db6 100644 --- a/src/test/java/org/opentripplanner/routing/algorithm/mapping/RaptorPathToItineraryMapperTest.java +++ b/src/test/java/org/opentripplanner/routing/algorithm/mapping/RaptorPathToItineraryMapperTest.java @@ -118,11 +118,15 @@ void penalty() { RaptorPathToItineraryMapper mapper = getRaptorPathToItineraryMapper(); var penalty = new TimeAndCost(Duration.ofMinutes(10), Cost.costOfMinutes(10)); - RaptorPath path = createTestTripSchedulePath(getTestTripSchedule()) - .egress(TestAccessEgress.car(2, RaptorCostConverter.toRaptorCost(1000), penalty)); + // TODO - The TestAccessEgress is an internal Raptor test dummy class and is not allowed + // to be used outside raptor and optimized transfers. Also, the Itinerary mapper + // expect the generic type DefaultTripSchedule and not TestTripSchedule - it is pure + // luck that it works.. + // RaptorPath path = createTestTripSchedulePath(getTestTripSchedule()) + // .egress(TestAccessEgress.car(2, RaptorCostConverter.toRaptorCost(1000), penalty)); // Act - var itinerary = mapper.createItinerary(path); + var itinerary = mapper.createItinerary(null); // Assert assertNotNull(itinerary); diff --git a/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/AccessEgressPenaltyDecoratorTest.java b/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/AccessEgressPenaltyDecoratorTest.java index e063ddfbb14..7d68c5bfeeb 100644 --- a/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/AccessEgressPenaltyDecoratorTest.java +++ b/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/AccessEgressPenaltyDecoratorTest.java @@ -42,12 +42,9 @@ class AccessEgressPenaltyDecoratorTest { @BeforeAll static void verifyTestSetup() { + assertEquals("Walk 2m15s C₁238_035 w/penalty(13m23s $1606) ~ 1", EXP_WALK_W_PENALTY.toString()); assertEquals( - "Walk 15m38s C₁238_035 w/penalty(13m23s $1606) ~ 1", - EXP_WALK_W_PENALTY.toString() - ); - assertEquals( - "Walk 11m53s C₁237_887 w/penalty(11m8s $1336) ~ 1", + "Walk 45s C₁237_887 w/penalty(11m8s $1336) ~ 1", EXP_CAR_RENTAL_W_PENALTY.toString() ); } diff --git a/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/AccessEgressesTest.java b/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/AccessEgressesTest.java index dfd0a1231c8..1779155a69b 100644 --- a/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/AccessEgressesTest.java +++ b/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/AccessEgressesTest.java @@ -50,9 +50,4 @@ void getAccesses() { void getEgresses() { assertEquals(EGRESSES, subject.getEgresses()); } - - @Test - void calculateMaxAccessTimePenalty() { - assertEquals(D7m, subject.calculateMaxAccessTimePenalty()); - } } diff --git a/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/DefaultAccessEgressTest.java b/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/DefaultAccessEgressTest.java index a9e088a2ad3..92ed7aa4825 100644 --- a/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/DefaultAccessEgressTest.java +++ b/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/DefaultAccessEgressTest.java @@ -34,7 +34,14 @@ void durationInSeconds() { // TODO - The value is ? int expected = 118215; assertEquals(expected, subject.durationInSeconds()); - assertEquals(expected + TIME_PENALTY.toSeconds(), subjectWithPenalty.durationInSeconds()); + assertEquals(expected, subjectWithPenalty.durationInSeconds()); + } + + @Test + void timePenalty() { + int expected = (int) TIME_PENALTY.toSeconds(); + assertEquals(RaptorConstants.TIME_NOT_SET, subject.timePenalty()); + assertEquals(expected, subjectWithPenalty.timePenalty()); } @Test @@ -118,106 +125,9 @@ void latestArrivalTime() { assertEquals(89, subject.latestArrivalTime(89)); } - @Test - void timeShiftDepartureTimeToActualTime() { - assertEquals(89, subject.timeShiftDepartureTimeToActualTime(89)); - assertEquals( - 89 + PENALTY.timeInSeconds(), - subjectWithPenalty.timeShiftDepartureTimeToActualTime(89) - ); - } - @Test void testToString() { assertEquals("Walk 1d8h50m15s C₁236_429 ~ 5", subject.toString()); - assertEquals("Walk 1d8h50m16s C₁236_440 w/penalty(1s $11) ~ 5", subjectWithPenalty.toString()); - } - - @Test - void calculateEarliestDepartureTimeWithOpeningHours_NoPenalty() { - final int requestedTime = 100; - final int opensAtTime = 120; - assertEquals( - opensAtTime, - subject.calculateEarliestDepartureTimeWithOpeningHours( - requestedTime, - v -> { - assertEquals(requestedTime, v); - return opensAtTime; - } - ) - ); - } - - @Test - void calculateEarliestDepartureTimeWithOpeningHours_OpensAt() { - final int requestedTime = 100; - final int opensAtTime = 120; - - assertEquals( - opensAtTime - PENALTY.timeInSeconds(), - subjectWithPenalty.calculateEarliestDepartureTimeWithOpeningHours( - requestedTime, - v -> { - assertEquals(requestedTime + PENALTY.timeInSeconds(), v); - return opensAtTime; - } - ) - ); - } - - @Test - void calculateEarliestDepartureTimeWithOpeningHours_Closed() { - assertEquals( - RaptorConstants.TIME_NOT_SET, - subjectWithPenalty.calculateEarliestDepartureTimeWithOpeningHours( - 879789, - v -> RaptorConstants.TIME_NOT_SET - ) - ); - } - - @Test - void calculateLatestArrivalTimeWithOpeningHours_NoPenalty() { - final int requestedTime = 100; - final int closesAtTime = 80; - assertEquals( - closesAtTime, - subject.calculateLatestArrivalTimeWithOpeningHours( - requestedTime, - v -> { - assertEquals(requestedTime, v); - return closesAtTime; - } - ) - ); - } - - @Test - void calculateLatestArrivalTimeWithOpeningHours_ClosesAt() { - final int requestedTime = 100; - final int closesAtTime = 80; - - assertEquals( - closesAtTime + PENALTY.timeInSeconds(), - subjectWithPenalty.calculateLatestArrivalTimeWithOpeningHours( - requestedTime, - v -> { - assertEquals(requestedTime - PENALTY.timeInSeconds(), v); - return closesAtTime; - } - ) - ); - } - - @Test - void calculateLatestArrivalTimeWithOpeningHours_Closed() { - assertEquals( - RaptorConstants.TIME_NOT_SET, - subjectWithPenalty.calculateLatestArrivalTimeWithOpeningHours( - 879789, - v -> RaptorConstants.TIME_NOT_SET - ) - ); + assertEquals("Walk 1d8h50m15s C₁236_440 w/penalty(1s $11) ~ 5", subjectWithPenalty.toString()); } } diff --git a/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/TripPatternForDateTest.java b/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/TripPatternForDateTest.java index ecd75f5d273..dd9a2fffa66 100644 --- a/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/TripPatternForDateTest.java +++ b/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/TripPatternForDateTest.java @@ -8,9 +8,9 @@ import java.util.stream.Stream; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import org.opentripplanner.model.Frequency; import org.opentripplanner.model.StopTime; -import org.opentripplanner.test.support.VariableSource; import org.opentripplanner.transit.model._data.TransitModelForTest; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.model.network.Route; @@ -33,12 +33,14 @@ class TripPatternForDateTest { new Deduplicator() ); - static Stream testCases = Stream - .of(List.of(new FrequencyEntry(new Frequency(), tripTimes)), List.of()) - .map(Arguments::of); + static Stream testCases() { + return Stream + .of(List.of(new FrequencyEntry(new Frequency(), tripTimes)), List.of()) + .map(Arguments::of); + } @ParameterizedTest(name = "trip with frequencies {0} should be correctly filtered") - @VariableSource("testCases") + @MethodSource("testCases") void shouldExcludeAndIncludeBasedOnFrequency(List freqs) { var stopTime = new StopTime(); stopTime.setStop(STOP); diff --git a/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/WheelchairCostCalculatorTest.java b/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/WheelchairCostCalculatorTest.java index 0c2384ebabb..b7d3f255a9d 100644 --- a/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/WheelchairCostCalculatorTest.java +++ b/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/WheelchairCostCalculatorTest.java @@ -5,11 +5,11 @@ import java.util.stream.Stream; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import org.opentripplanner.raptor._data.transit.TestTripSchedule; import org.opentripplanner.raptor.api.model.RaptorTransferConstraint; import org.opentripplanner.raptor.spi.RaptorCostCalculator; import org.opentripplanner.routing.api.request.preference.AccessibilityPreferences; -import org.opentripplanner.test.support.VariableSource; import org.opentripplanner.transit.model.basic.Accessibility; public class WheelchairCostCalculatorTest { @@ -34,14 +34,16 @@ public class WheelchairCostCalculatorTest { ); private final TestTripSchedule.Builder scheduleBuilder = TestTripSchedule.schedule("12:00 12:01"); - static Stream testCases = Stream.of( - Arguments.of(Accessibility.POSSIBLE, 0), - Arguments.of(Accessibility.NO_INFORMATION, UNKNOWN_ACCESSIBILITY_COST), - Arguments.of(Accessibility.NOT_POSSIBLE, INACCESSIBLE_TRIP_COST) - ); + static Stream testCases() { + return Stream.of( + Arguments.of(Accessibility.POSSIBLE, 0), + Arguments.of(Accessibility.NO_INFORMATION, UNKNOWN_ACCESSIBILITY_COST), + Arguments.of(Accessibility.NOT_POSSIBLE, INACCESSIBLE_TRIP_COST) + ); + } @ParameterizedTest(name = "accessibility of {0} should add an extra cost of {1}") - @VariableSource("testCases") + @MethodSource("testCases") public void calculateExtraBoardingCost(Accessibility wcb, int expectedExtraCost) { var schedule = scheduleBuilder.wheelchairBoarding(wcb).build(); diff --git a/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/RaptorRequestMapperTest.java b/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/RaptorRequestMapperTest.java index 89348be5c89..47542782884 100644 --- a/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/RaptorRequestMapperTest.java +++ b/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/RaptorRequestMapperTest.java @@ -90,7 +90,6 @@ private static RaptorRequest map(RouteRequest request) { false, ACCESS, EGRESS, - D0s, null ); } diff --git a/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RouteRequestTransitDataProviderFilterTest.java b/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RouteRequestTransitDataProviderFilterTest.java index 4823ea84300..be6266ccdbe 100644 --- a/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RouteRequestTransitDataProviderFilterTest.java +++ b/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RouteRequestTransitDataProviderFilterTest.java @@ -13,6 +13,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import org.junit.jupiter.params.provider.ValueSource; import org.opentripplanner.apis.transmodel.model.TransmodelTransportSubmode; import org.opentripplanner.framework.geometry.WgsCoordinate; @@ -25,7 +26,6 @@ import org.opentripplanner.routing.api.request.request.filter.SelectRequest; import org.opentripplanner.routing.api.request.request.filter.TransitFilter; import org.opentripplanner.routing.api.request.request.filter.TransitFilterRequest; -import org.opentripplanner.test.support.VariableSource; import org.opentripplanner.transit.model._data.TransitModelForTest; import org.opentripplanner.transit.model.basic.Accessibility; import org.opentripplanner.transit.model.basic.MainAndSubMode; @@ -70,14 +70,16 @@ class RouteRequestTransitDataProviderFilterTest { .withElevator(RELAXED_ACCESSIBILITY_PREFERENCE) .build(); - static Stream wheelchairCases = Stream.of( - Arguments.of(Accessibility.POSSIBLE, DEFAULT_ACCESSIBILITY), - Arguments.of(Accessibility.POSSIBLE, RELAXED_ACCESSIBILITY), - Arguments.of(Accessibility.NOT_POSSIBLE, DEFAULT_ACCESSIBILITY), - Arguments.of(Accessibility.NOT_POSSIBLE, RELAXED_ACCESSIBILITY), - Arguments.of(Accessibility.NO_INFORMATION, DEFAULT_ACCESSIBILITY), - Arguments.of(Accessibility.NO_INFORMATION, RELAXED_ACCESSIBILITY) - ); + static Stream wheelchairCases() { + return Stream.of( + Arguments.of(Accessibility.POSSIBLE, DEFAULT_ACCESSIBILITY), + Arguments.of(Accessibility.POSSIBLE, RELAXED_ACCESSIBILITY), + Arguments.of(Accessibility.NOT_POSSIBLE, DEFAULT_ACCESSIBILITY), + Arguments.of(Accessibility.NOT_POSSIBLE, RELAXED_ACCESSIBILITY), + Arguments.of(Accessibility.NO_INFORMATION, DEFAULT_ACCESSIBILITY), + Arguments.of(Accessibility.NO_INFORMATION, RELAXED_ACCESSIBILITY) + ); + } /** * Test filter for wheelchair access. @@ -85,7 +87,7 @@ class RouteRequestTransitDataProviderFilterTest { * @param wheelchair Accessibility for stops */ @ParameterizedTest - @VariableSource("wheelchairCases") + @MethodSource("wheelchairCases") void testWheelchairAccess(Accessibility wheelchair, WheelchairPreferences accessibility) { var firstStop = stopForTest("TEST:START", wheelchair, 0.0, 0.0); var lastStop = stopForTest("TEST:END", wheelchair, 0.0, 0.0); diff --git a/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/TransferGeneratorTest.java b/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/TransferGeneratorTest.java index 230097ebfc3..4283e5cca62 100644 --- a/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/TransferGeneratorTest.java +++ b/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/TransferGeneratorTest.java @@ -15,6 +15,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.model.transfer.TransferConstraint; import org.opentripplanner.raptor._data.RaptorTestConstants; @@ -28,7 +29,6 @@ import org.opentripplanner.raptor.api.path.TransitPathLeg; import org.opentripplanner.raptor.spi.DefaultSlackProvider; import org.opentripplanner.raptor.spi.RaptorSlackProvider; -import org.opentripplanner.test.support.VariableSource; public class TransferGeneratorTest implements RaptorTestConstants { @@ -497,24 +497,26 @@ void findTransferWithLongMinTimeTransfer() { // TODO: here we check that minimum transfer time and slack are NOT added up, but perhaps that is // asserting the wrong behaviour - static Stream minTransferTimeSlackCases = Stream.of( - // transfer takes 1 min plus 0 slack, passenger will make it - Arguments.of(ofMinutes(1), ofMinutes(0), true), - // slack is 30 minutes, passenger won't make the connection - Arguments.of(ofMinutes(1), ofMinutes(30), false), - // tight since 8 minutes slack + 1 min transfer time but still less than the 10 minutes required - Arguments.of(ofMinutes(1), ofMinutes(8), true), - // transfer slack is ignored since minimumTransferTime is short - Arguments.of(ofMinutes(1), ofMinutes(9), true), - Arguments.of(ofMinutes(11), ofMinutes(0), false), - Arguments.of(ofMinutes(9), ofMinutes(1), true), - Arguments.of(ofMinutes(0), ofMinutes(11), false) - ); + static Stream minTransferTimeSlackCases() { + return Stream.of( + // transfer takes 1 min plus 0 slack, passenger will make it + Arguments.of(ofMinutes(1), ofMinutes(0), true), + // slack is 30 minutes, passenger won't make the connection + Arguments.of(ofMinutes(1), ofMinutes(30), false), + // tight since 8 minutes slack + 1 min transfer time but still less than the 10 minutes required + Arguments.of(ofMinutes(1), ofMinutes(8), true), + // transfer slack is ignored since minimumTransferTime is short + Arguments.of(ofMinutes(1), ofMinutes(9), true), + Arguments.of(ofMinutes(11), ofMinutes(0), false), + Arguments.of(ofMinutes(9), ofMinutes(1), true), + Arguments.of(ofMinutes(0), ofMinutes(11), false) + ); + } @ParameterizedTest( name = "minimum transfer time of {0}, transfer slack of {1} should expectTransfer={2} on 10 min transfer window" ) - @VariableSource("minTransferTimeSlackCases") + @MethodSource("minTransferTimeSlackCases") void includeTransferSlackInMinimumTransferTime( Duration minTransferTime, Duration transferSlack, diff --git a/src/test/java/org/opentripplanner/routing/api/request/WheelchairPreferencesTest.java b/src/test/java/org/opentripplanner/routing/api/request/WheelchairPreferencesTest.java index 157235c4483..9dd533704c7 100644 --- a/src/test/java/org/opentripplanner/routing/api/request/WheelchairPreferencesTest.java +++ b/src/test/java/org/opentripplanner/routing/api/request/WheelchairPreferencesTest.java @@ -7,20 +7,22 @@ import java.util.stream.Stream; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import org.opentripplanner.routing.api.request.preference.WheelchairPreferences; -import org.opentripplanner.test.support.VariableSource; class WheelchairPreferencesTest { - static Stream roundingTestCases = Stream.of( - Arguments.of(0.33333333333, 0.33, 0.333), - Arguments.of(0.77777777777, 0.78, 0.778) - ); + static Stream roundingTestCases() { + return Stream.of( + Arguments.of(0.33333333333, 0.33, 0.333), + Arguments.of(0.77777777777, 0.78, 0.778) + ); + } @ParameterizedTest( name = "Normalize value of {0} to rounded value {1} (maxSlope) and {2} (reluctance fields)" ) - @VariableSource("roundingTestCases") + @MethodSource("roundingTestCases") void testConstructorNormalization(double raw, double rounded2, double rounded3) { var roundedRequest = WheelchairPreferences .of() @@ -39,41 +41,43 @@ void testConstructorNormalization(double raw, double rounded2, double rounded3) assertEquals(roundedRequest.slopeExceededReluctance(), rounded2); } - static Stream toStringTestCases = Stream.of( - Arguments.of(DEFAULT, "WheelchairPreferences{}"), - Arguments.of( - WheelchairPreferences.of().withElevatorOnlyAccessible().build(), - "WheelchairPreferences{elevator: OnlyConsiderAccessible}" - ), - Arguments.of( - WheelchairPreferences.of().withTrip(DEFAULT_COSTS).build(), - "WheelchairPreferences{trip: AccessibilityPreferences{}}" - ), - Arguments.of( - WheelchairPreferences.of().withTrip(it -> it.withInaccessibleCost(100)).build(), - "WheelchairPreferences{trip: AccessibilityPreferences{inaccessibleCost: $100}}" - ), - Arguments.of( - WheelchairPreferences.of().withTripCost(99, 100).build(), - "WheelchairPreferences{trip: AccessibilityPreferences{unknownCost: $99, inaccessibleCost: $100}}" - ), - Arguments.of( - WheelchairPreferences - .of() - .withTripCost(10, 100) - .withStopCost(20, 200) - .withElevatorCost(30, 300) - .withInaccessibleStreetReluctance(1.0) - .withMaxSlope(0.123) - .withSlopeExceededReluctance(3) - .withStairsReluctance(4) - .build(), - "WheelchairPreferences{trip: AccessibilityPreferences{unknownCost: $10, inaccessibleCost: $100}, stop: AccessibilityPreferences{unknownCost: $20, inaccessibleCost: $200}, elevator: AccessibilityPreferences{unknownCost: $30, inaccessibleCost: $300}, inaccessibleStreetReluctance: 1.0, maxSlope: 0.123, slopeExceededReluctance: 3.0, stairsReluctance: 4.0}" - ) - ); + static Stream toStringTestCases() { + return Stream.of( + Arguments.of(DEFAULT, "WheelchairPreferences{}"), + Arguments.of( + WheelchairPreferences.of().withElevatorOnlyAccessible().build(), + "WheelchairPreferences{elevator: OnlyConsiderAccessible}" + ), + Arguments.of( + WheelchairPreferences.of().withTrip(DEFAULT_COSTS).build(), + "WheelchairPreferences{trip: AccessibilityPreferences{}}" + ), + Arguments.of( + WheelchairPreferences.of().withTrip(it -> it.withInaccessibleCost(100)).build(), + "WheelchairPreferences{trip: AccessibilityPreferences{inaccessibleCost: $100}}" + ), + Arguments.of( + WheelchairPreferences.of().withTripCost(99, 100).build(), + "WheelchairPreferences{trip: AccessibilityPreferences{unknownCost: $99, inaccessibleCost: $100}}" + ), + Arguments.of( + WheelchairPreferences + .of() + .withTripCost(10, 100) + .withStopCost(20, 200) + .withElevatorCost(30, 300) + .withInaccessibleStreetReluctance(1.0) + .withMaxSlope(0.123) + .withSlopeExceededReluctance(3) + .withStairsReluctance(4) + .build(), + "WheelchairPreferences{trip: AccessibilityPreferences{unknownCost: $10, inaccessibleCost: $100}, stop: AccessibilityPreferences{unknownCost: $20, inaccessibleCost: $200}, elevator: AccessibilityPreferences{unknownCost: $30, inaccessibleCost: $300}, inaccessibleStreetReluctance: 1.0, maxSlope: 0.123, slopeExceededReluctance: 3.0, stairsReluctance: 4.0}" + ) + ); + } @ParameterizedTest(name = "Verify toString() value is {1}") - @VariableSource("toStringTestCases") + @MethodSource("toStringTestCases") void testToString(WheelchairPreferences subject, String expected) { assertEquals(expected, subject.toString()); } diff --git a/src/test/java/org/opentripplanner/routing/api/request/framework/LinearFunctionSerializationTest.java b/src/test/java/org/opentripplanner/routing/api/request/framework/LinearFunctionSerializationTest.java index 9701fb412cc..e1785db61b1 100644 --- a/src/test/java/org/opentripplanner/routing/api/request/framework/LinearFunctionSerializationTest.java +++ b/src/test/java/org/opentripplanner/routing/api/request/framework/LinearFunctionSerializationTest.java @@ -11,9 +11,9 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import org.opentripplanner.framework.time.DurationUtils; import org.opentripplanner.test.support.TestTableParser; -import org.opentripplanner.test.support.VariableSource; class LinearFunctionSerializationTest { @@ -21,25 +21,27 @@ class LinearFunctionSerializationTest { private static final Duration D1h = Duration.ofSeconds(3600); @SuppressWarnings("unused") - static Stream parseTestCases = TestTableParser.of( - """ - # INPUT || EXPECTED - # || CONSTANT | COEFFICIENT - 0+0t || 0s | 0.0 - 1+0.0111 t || 1s | 0.01 - 120 + 0.111 t || 2m | 0.11 - 120 + 0.111 t || 2m | 0.11 - 12.0 + 0 t || 12s | 0.0 - 2h3m + 1.111 t || 2h3m | 1.11 - 2h3m + 2.111 t || 2h3m | 2.1 - 3h + 5.111 t || 3h | 5.1 - 7m + 10.1 x || 7m | 10.0 - PT7s + 10.1 x || 7s | 10.0 - """ - ); + static Stream parseTestCases() { + return TestTableParser.of( + """ + # INPUT || EXPECTED + # || CONSTANT | COEFFICIENT + 0+0t || 0s | 0.0 + 1+0.0111 t || 1s | 0.01 + 120 + 0.111 t || 2m | 0.11 + 120 + 0.111 t || 2m | 0.11 + 12.0 + 0 t || 12s | 0.0 + 2h3m + 1.111 t || 2h3m | 1.11 + 2h3m + 2.111 t || 2h3m | 2.1 + 3h + 5.111 t || 3h | 5.1 + 7m + 10.1 x || 7m | 10.0 + PT7s + 10.1 x || 7s | 10.0 + """ + ); + } @ParameterizedTest - @VariableSource("parseTestCases") + @MethodSource("parseTestCases") void parseTest(String input, String expectedConstant, double expectedCoefficient) { Optional result = LinearFunctionSerialization.parse( input, diff --git a/src/test/java/org/opentripplanner/routing/api/request/preference/BikePreferencesTest.java b/src/test/java/org/opentripplanner/routing/api/request/preference/BikePreferencesTest.java index 8a6ac3f4f45..3bbaf0105e5 100644 --- a/src/test/java/org/opentripplanner/routing/api/request/preference/BikePreferencesTest.java +++ b/src/test/java/org/opentripplanner/routing/api/request/preference/BikePreferencesTest.java @@ -5,7 +5,7 @@ import static org.opentripplanner.routing.api.request.preference.ImmutablePreferencesAsserts.assertEqualsAndHashCode; import org.junit.jupiter.api.Test; -import org.opentripplanner.routing.core.BicycleOptimizeType; +import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; class BikePreferencesTest { @@ -16,7 +16,8 @@ class BikePreferencesTest { .of() .withSlope(1) .build(); - public static final BicycleOptimizeType OPTIMIZE_TYPE = BicycleOptimizeType.TRIANGLE; + public static final VehicleRoutingOptimizeType OPTIMIZE_TYPE = + VehicleRoutingOptimizeType.TRIANGLE; public static final int RENTAL_PICKUP_TIME = 30; public static final int PARK_COST = 30; @@ -106,20 +107,20 @@ void testForcedTriangleOptimization() { .of() .withForcedOptimizeTriangle(it -> it.withSlope(1).build()) .build(); - assertEquals(BicycleOptimizeType.TRIANGLE, trianglePreferences.optimizeType()); + assertEquals(VehicleRoutingOptimizeType.TRIANGLE, trianglePreferences.optimizeType()); var conflictingPreferences = BikePreferences .of() - .withOptimizeType(BicycleOptimizeType.SAFE_STREETS) + .withOptimizeType(VehicleRoutingOptimizeType.SAFE_STREETS) .withForcedOptimizeTriangle(it -> it.withSlope(1).build()) .build(); - assertEquals(BicycleOptimizeType.TRIANGLE, conflictingPreferences.optimizeType()); + assertEquals(VehicleRoutingOptimizeType.TRIANGLE, conflictingPreferences.optimizeType()); var emptyTrianglePreferences = BikePreferences .of() - .withOptimizeType(BicycleOptimizeType.SAFE_STREETS) + .withOptimizeType(VehicleRoutingOptimizeType.SAFE_STREETS) .withForcedOptimizeTriangle(it -> it.build()) .build(); - assertEquals(BicycleOptimizeType.SAFE_STREETS, emptyTrianglePreferences.optimizeType()); + assertEquals(VehicleRoutingOptimizeType.SAFE_STREETS, emptyTrianglePreferences.optimizeType()); } } diff --git a/src/test/java/org/opentripplanner/routing/api/request/preference/CarPreferencesTest.java b/src/test/java/org/opentripplanner/routing/api/request/preference/CarPreferencesTest.java index 4359ed9b33d..6b03873b80d 100644 --- a/src/test/java/org/opentripplanner/routing/api/request/preference/CarPreferencesTest.java +++ b/src/test/java/org/opentripplanner/routing/api/request/preference/CarPreferencesTest.java @@ -10,8 +10,6 @@ class CarPreferencesTest { - private static final double SPEED = 20.111; - private static final double EXPECTED_SPEED = 20.0; private static final double RELUCTANCE = 5.111; private static final double EXPECTED_RELUCTANCE = 5.1; private static final int PICKUP_TIME = 600; @@ -23,7 +21,6 @@ class CarPreferencesTest { private final CarPreferences subject = CarPreferences .of() - .withSpeed(SPEED) .withReluctance(RELUCTANCE) .withPickupTime(Duration.ofSeconds(PICKUP_TIME)) .withPickupCost(PICKUP_COST) @@ -33,11 +30,6 @@ class CarPreferencesTest { .withParking(parking -> parking.withCost(PARK_COST).build()) .build(); - @Test - void speed() { - assertEquals(EXPECTED_SPEED, subject.speed()); - } - @Test void reluctance() { assertEquals(EXPECTED_RELUCTANCE, subject.reluctance()); @@ -82,8 +74,8 @@ void testCopyOfEqualsAndHashCode() { assertSame(subject, subject.copyOf().build()); // Create a copy, make a change and set it back again to force creating a new object - var other = subject.copyOf().withSpeed(0.0).build(); - var same = other.copyOf().withSpeed(SPEED).build(); + var other = subject.copyOf().withReluctance(0.0).build(); + var same = other.copyOf().withReluctance(RELUCTANCE).build(); assertEqualsAndHashCode(subject, other, same); } @@ -92,7 +84,6 @@ void testToString() { assertEquals("CarPreferences{}", CarPreferences.DEFAULT.toString()); assertEquals( "CarPreferences{" + - "speed: 20.0, " + "reluctance: 5.1, " + "parking: VehicleParkingPreferences{cost: $30}, " + "rental: VehicleRentalPreferences{pickupTime: 30s}, " + diff --git a/src/test/java/org/opentripplanner/routing/api/request/preference/ScooterPreferencesTest.java b/src/test/java/org/opentripplanner/routing/api/request/preference/ScooterPreferencesTest.java new file mode 100644 index 00000000000..01a12ef5cbb --- /dev/null +++ b/src/test/java/org/opentripplanner/routing/api/request/preference/ScooterPreferencesTest.java @@ -0,0 +1,109 @@ +package org.opentripplanner.routing.api.request.preference; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertSame; +import static org.opentripplanner.routing.api.request.preference.ImmutablePreferencesAsserts.assertEqualsAndHashCode; + +import org.junit.jupiter.api.Test; +import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; + +class ScooterPreferencesTest { + + public static final double SPEED = 2.0; + public static final double RELUCTANCE = 1.2; + public static final TimeSlopeSafetyTriangle TRIANGLE = TimeSlopeSafetyTriangle + .of() + .withSlope(1) + .build(); + public static final VehicleRoutingOptimizeType OPTIMIZE_TYPE = + VehicleRoutingOptimizeType.TRIANGLE; + public static final int RENTAL_PICKUP_TIME = 30; + + private final ScooterPreferences subject = ScooterPreferences + .of() + .withSpeed(SPEED) + .withReluctance(RELUCTANCE) + .withOptimizeType(OPTIMIZE_TYPE) + .withRental(rental -> rental.withPickupTime(RENTAL_PICKUP_TIME).build()) + .withOptimizeTriangle(it -> it.withSlope(1).build()) + .build(); + + @Test + void speed() { + assertEquals(SPEED, subject.speed()); + } + + @Test + void reluctance() { + assertEquals(RELUCTANCE, subject.reluctance()); + } + + @Test + void optimizeType() { + assertEquals(OPTIMIZE_TYPE, subject.optimizeType()); + } + + @Test + void optimizeTriangle() { + assertEquals(TRIANGLE, subject.optimizeTriangle()); + } + + @Test + void rental() { + var vehicleRental = VehicleRentalPreferences.of().withPickupTime(RENTAL_PICKUP_TIME).build(); + assertEquals(vehicleRental, subject.rental()); + } + + @Test + void testOfAndCopyOf() { + // Return same object if no value is set + assertSame(ScooterPreferences.DEFAULT, ScooterPreferences.of().build()); + assertSame(subject, subject.copyOf().build()); + } + + @Test + void testCopyOfEqualsAndHashCode() { + // Create a copy, make a change and set it back again to force creating a new object + var other = subject.copyOf().withSpeed(0.7).build(); + var same = other.copyOf().withSpeed(SPEED).build(); + assertEqualsAndHashCode(subject, other, same); + } + + @Test + void testToString() { + assertEquals("ScooterPreferences{}", ScooterPreferences.DEFAULT.toString()); + assertEquals( + "ScooterPreferences{" + + "speed: 2.0, " + + "reluctance: 1.2, " + + "rental: VehicleRentalPreferences{pickupTime: 30s}, " + + "optimizeType: TRIANGLE, " + + "optimizeTriangle: TimeSlopeSafetyTriangle[time=0.0, slope=1.0, safety=0.0]" + + "}", + subject.toString() + ); + } + + @Test + void testForcedTriangleOptimization() { + var trianglePreferences = ScooterPreferences + .of() + .withForcedOptimizeTriangle(it -> it.withSlope(1).build()) + .build(); + assertEquals(VehicleRoutingOptimizeType.TRIANGLE, trianglePreferences.optimizeType()); + + var conflictingPreferences = ScooterPreferences + .of() + .withOptimizeType(VehicleRoutingOptimizeType.SAFE_STREETS) + .withForcedOptimizeTriangle(it -> it.withSlope(1).build()) + .build(); + assertEquals(VehicleRoutingOptimizeType.TRIANGLE, conflictingPreferences.optimizeType()); + + var emptyTrianglePreferences = ScooterPreferences + .of() + .withOptimizeType(VehicleRoutingOptimizeType.SAFE_STREETS) + .withForcedOptimizeTriangle(it -> it.build()) + .build(); + assertEquals(VehicleRoutingOptimizeType.SAFE_STREETS, emptyTrianglePreferences.optimizeType()); + } +} diff --git a/src/test/java/org/opentripplanner/routing/api/request/preference/StreetPreferencesTest.java b/src/test/java/org/opentripplanner/routing/api/request/preference/StreetPreferencesTest.java index 0289c24e837..a318474eab7 100644 --- a/src/test/java/org/opentripplanner/routing/api/request/preference/StreetPreferencesTest.java +++ b/src/test/java/org/opentripplanner/routing/api/request/preference/StreetPreferencesTest.java @@ -112,7 +112,7 @@ void testToString() { "accessEgress: AccessEgressPreferences{penalty: TimeAndCostPenaltyForEnum{CAR_TO_PARK: " + CAR_PENALTY + ", CAR_RENTAL: (timePenalty: 20m + 2.0 t, costFactor: 1.50), CAR_HAILING: (timePenalty: 20m + 2.0 t, costFactor: 1.50), " + - "FLEXIBLE: (timePenalty: 20m + 2.0 t, costFactor: 1.50)}, " + + "FLEXIBLE: (timePenalty: 10m + 1.30 t, costFactor: 1.30)}, " + "maxDuration: DurationForStreetMode{default:5m}" + "}, " + "maxDirectDuration: DurationForStreetMode{default:10m}" + diff --git a/src/test/java/org/opentripplanner/routing/api/request/preference/TimeSlopeSafetyTriangleTest.java b/src/test/java/org/opentripplanner/routing/api/request/preference/TimeSlopeSafetyTriangleTest.java index 7b2fe416290..2ba7f2569e4 100644 --- a/src/test/java/org/opentripplanner/routing/api/request/preference/TimeSlopeSafetyTriangleTest.java +++ b/src/test/java/org/opentripplanner/routing/api/request/preference/TimeSlopeSafetyTriangleTest.java @@ -7,26 +7,28 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; -import org.opentripplanner.test.support.VariableSource; +import org.junit.jupiter.params.provider.MethodSource; public class TimeSlopeSafetyTriangleTest { float DELTA = 0.001f; @SuppressWarnings("unused") - static Stream testCases = Stream.of( - // Input: time | slope | safety || Expected: time | slope | safety - Arguments.of(0.5, 0.3, 0.2, 0.5, 0.3, 0.2, "Exact"), - Arguments.of(1d, 1d, 1d, 0.33, 0.33, 0.34, "Greater than 1"), - Arguments.of(30d, 10d, 20d, 0.5, 0.17, 0.33, "Greater than 1 - big"), - Arguments.of(1d, 0d, 0d, 1d, 0d, 0d, "Two zeros"), - Arguments.of(0d, 0d, 0d, 0.33, 0.33, 0.34, "All zeros"), - Arguments.of(0.1, -1d, -1d, 1d, 0d, 0d, "Less than zero"), - Arguments.of(0d, 0.07, 0.93, 0d, 0.07, 0.93, "None precise round-off: " + (1.0 - 0.07)) - ); + static Stream testCases() { + return Stream.of( + // Input: time | slope | safety || Expected: time | slope | safety + Arguments.of(0.5, 0.3, 0.2, 0.5, 0.3, 0.2, "Exact"), + Arguments.of(1d, 1d, 1d, 0.33, 0.33, 0.34, "Greater than 1"), + Arguments.of(30d, 10d, 20d, 0.5, 0.17, 0.33, "Greater than 1 - big"), + Arguments.of(1d, 0d, 0d, 1d, 0d, 0d, "Two zeros"), + Arguments.of(0d, 0d, 0d, 0.33, 0.33, 0.34, "All zeros"), + Arguments.of(0.1, -1d, -1d, 1d, 0d, 0d, "Less than zero"), + Arguments.of(0d, 0.07, 0.93, 0d, 0.07, 0.93, "None precise round-off: " + (1.0 - 0.07)) + ); + } @ParameterizedTest(name = "Time/slope/safety: | {0} {1} {2} || {3} {4} {5} | {6}") - @VariableSource("testCases") + @MethodSource("testCases") public void test( double inTime, double inSlope, diff --git a/src/test/java/org/opentripplanner/routing/core/MoneyTest.java b/src/test/java/org/opentripplanner/routing/core/MoneyTest.java index 2323b396d5c..5f197708f1d 100644 --- a/src/test/java/org/opentripplanner/routing/core/MoneyTest.java +++ b/src/test/java/org/opentripplanner/routing/core/MoneyTest.java @@ -14,7 +14,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; -import org.opentripplanner.test.support.VariableSource; +import org.junit.jupiter.params.provider.MethodSource; import org.opentripplanner.transit.model.basic.Money; class MoneyTest { @@ -27,36 +27,40 @@ class MoneyTest { private static final Money twoDollars = Money.usDollars(2); static Money threeEuroTwelve = Money.euros(3.12f); - static Stream testCases = Stream.of( - of(oneDollar, Locale.US, "$1.00"), - of(oneDollar, Locale.GERMANY, "1,00 $"), - of(Money.euros(1), Locale.GERMANY, "1,00 €"), - of(oneDollar, NORWEGIAN_BOKMAL, "USD 1,00"), - //of(oneDollar, NORWEGIAN_NYNORSK, "1.00 USD"), - of(hundredNOK, NORWEGIAN_BOKMAL, "kr 100,00") - //of(hundredNOK, NORWEGIAN_NYNORSK, "100.00 kr") - ); + static Stream testCases() { + return Stream.of( + of(oneDollar, Locale.US, "$1.00"), + of(oneDollar, Locale.GERMANY, "1,00 $"), + of(Money.euros(1), Locale.GERMANY, "1,00 €"), + of(oneDollar, NORWEGIAN_BOKMAL, "USD 1,00"), + //of(oneDollar, NORWEGIAN_NYNORSK, "1.00 USD"), + of(hundredNOK, NORWEGIAN_BOKMAL, "kr 100,00") + //of(hundredNOK, NORWEGIAN_NYNORSK, "100.00 kr") + ); + } @ParameterizedTest(name = "{0} with locale {1} should localise to \"{2}\"") - @VariableSource("testCases") + @MethodSource("testCases") void localize(Money money, Locale locale, String expected) { var localized = money.localize(locale); assertEquals(expected, localized); } - static Stream amountCases = Stream.of( - of(oneDollar, 1.0f), - of(threeEuroTwelve, 3.12f), - of(Money.euros(3.1f), 3.1f), - of(Money.euros(999.99f), 999.99f), - of(hundredNOK, 100.0f), - // Yen doesn't have fractional digits - of(yen(1000), 1000f), - of(yen(9999), 9999f) - ); + static Stream amountCases() { + return Stream.of( + of(oneDollar, 1.0f), + of(threeEuroTwelve, 3.12f), + of(Money.euros(3.1f), 3.1f), + of(Money.euros(999.99f), 999.99f), + of(hundredNOK, 100.0f), + // Yen doesn't have fractional digits + of(yen(1000), 1000f), + of(yen(9999), 9999f) + ); + } @ParameterizedTest - @VariableSource("amountCases") + @MethodSource("amountCases") void fractionalAmount(Money money, float expected) { var fractionalAmount = money.fractionalAmount(); assertEquals(expected, fractionalAmount.floatValue()); diff --git a/src/test/java/org/opentripplanner/routing/core/RoutingPreferencesTest.java b/src/test/java/org/opentripplanner/routing/core/RoutingPreferencesTest.java index c67d539e902..c3cff43b1a9 100644 --- a/src/test/java/org/opentripplanner/routing/core/RoutingPreferencesTest.java +++ b/src/test/java/org/opentripplanner/routing/core/RoutingPreferencesTest.java @@ -48,6 +48,16 @@ public void copyOfWithBikeChanges() { assertSame(pref.walk(), copy.walk()); } + @Test + public void copyOfWithScooterChanges() { + var pref = new RoutingPreferences(); + var copy = pref.copyOf().withScooter(b -> b.withReluctance(2.5)).build(); + + assertNotSame(pref, copy); + assertNotSame(pref.scooter(), copy.scooter()); + assertSame(pref.walk(), copy.walk()); + } + @Test public void copyOfWithWalkChanges() { var pref = new RoutingPreferences(); diff --git a/src/test/java/org/opentripplanner/routing/graph/GraphSerializationTest.java b/src/test/java/org/opentripplanner/routing/graph/GraphSerializationTest.java index 818efb67d41..f1f9ff8bfe6 100644 --- a/src/test/java/org/opentripplanner/routing/graph/GraphSerializationTest.java +++ b/src/test/java/org/opentripplanner/routing/graph/GraphSerializationTest.java @@ -27,6 +27,7 @@ import org.opentripplanner.service.worldenvelope.internal.DefaultWorldEnvelopeRepository; import org.opentripplanner.standalone.config.BuildConfig; import org.opentripplanner.standalone.config.RouterConfig; +import org.opentripplanner.street.model.StreetLimitationParameters; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.service.TransitModel; @@ -180,6 +181,8 @@ private void testRoundTrip( ) throws Exception { // Now round-trip the graph through serialization. File tempFile = TempFile.createTempFile("graph", "pdx"); + var streetLimitationParameters = new StreetLimitationParameters(); + streetLimitationParameters.initMaxCarSpeed(40); SerializedGraphObject serializedObj = new SerializedGraphObject( originalGraph, originalTransitModel, @@ -188,7 +191,8 @@ private void testRoundTrip( RouterConfig.DEFAULT, DataImportIssueSummary.empty(), emissionsDataModel, - null + null, + streetLimitationParameters ); serializedObj.save(new FileDataSource(tempFile, FileType.GRAPH)); SerializedGraphObject deserializedGraph = SerializedGraphObject.load(tempFile); diff --git a/src/test/java/org/opentripplanner/standalone/config/routerequest/WheelchairConfigTest.java b/src/test/java/org/opentripplanner/standalone/config/routerequest/WheelchairConfigTest.java index 98b18f45d05..64216e5d83f 100644 --- a/src/test/java/org/opentripplanner/standalone/config/routerequest/WheelchairConfigTest.java +++ b/src/test/java/org/opentripplanner/standalone/config/routerequest/WheelchairConfigTest.java @@ -11,59 +11,61 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import org.opentripplanner.routing.api.request.preference.AccessibilityPreferences; -import org.opentripplanner.test.support.VariableSource; class WheelchairConfigTest { - static Stream mapAccessibilityPreferencesTestCases = Stream.of( - Arguments.of( - "default ofOnlyAccessible()", - "{}", - ofOnlyAccessible(), - DEFAULT_COSTS, - ofOnlyAccessible() - ), - Arguments.of("default cost", "{}", ofCost(100, 200), ofCost(100, 200), ofCost(100, 200)), - Arguments.of( - "onlyConsiderAccessible with default costs", - "{\"onlyConsiderAccessible\": true}", - DEFAULT_COSTS, - DEFAULT_COSTS, - ofOnlyAccessible() - ), - Arguments.of( - "Default costs with default ofOnlyAccessible()", - "{\"onlyConsiderAccessible\": false}", - ofOnlyAccessible(), - DEFAULT_COSTS, - DEFAULT_COSTS - ), - Arguments.of( - "Only unknownCost set with default ofOnlyAccessible()", - "{\"unknownCost\": 100}", - ofOnlyAccessible(), - DEFAULT_COSTS, - ofCost(100, DEFAULT_COSTS.inaccessibleCost()) - ), - Arguments.of( - "Only inaccessibleCost set with default ofOnlyAccessible()", - "{\"inaccessibleCost\": 100}", - ofOnlyAccessible(), - DEFAULT_COSTS, - ofCost(DEFAULT_COSTS.unknownCost(), 100) - ), - Arguments.of( - "All values set", - "{\"unknownCost\": 200, \"inaccessibleCost\": 100, \"onlyConsiderAccessible\": false}", - ofOnlyAccessible(), - DEFAULT_COSTS, - ofCost(200, 100) - ) - ); + static Stream mapAccessibilityPreferencesTestCases() { + return Stream.of( + Arguments.of( + "default ofOnlyAccessible()", + "{}", + ofOnlyAccessible(), + DEFAULT_COSTS, + ofOnlyAccessible() + ), + Arguments.of("default cost", "{}", ofCost(100, 200), ofCost(100, 200), ofCost(100, 200)), + Arguments.of( + "onlyConsiderAccessible with default costs", + "{\"onlyConsiderAccessible\": true}", + DEFAULT_COSTS, + DEFAULT_COSTS, + ofOnlyAccessible() + ), + Arguments.of( + "Default costs with default ofOnlyAccessible()", + "{\"onlyConsiderAccessible\": false}", + ofOnlyAccessible(), + DEFAULT_COSTS, + DEFAULT_COSTS + ), + Arguments.of( + "Only unknownCost set with default ofOnlyAccessible()", + "{\"unknownCost\": 100}", + ofOnlyAccessible(), + DEFAULT_COSTS, + ofCost(100, DEFAULT_COSTS.inaccessibleCost()) + ), + Arguments.of( + "Only inaccessibleCost set with default ofOnlyAccessible()", + "{\"inaccessibleCost\": 100}", + ofOnlyAccessible(), + DEFAULT_COSTS, + ofCost(DEFAULT_COSTS.unknownCost(), 100) + ), + Arguments.of( + "All values set", + "{\"unknownCost\": 200, \"inaccessibleCost\": 100, \"onlyConsiderAccessible\": false}", + ofOnlyAccessible(), + DEFAULT_COSTS, + ofCost(200, 100) + ) + ); + } @ParameterizedTest(name = "{0}") - @VariableSource("mapAccessibilityPreferencesTestCases") + @MethodSource("mapAccessibilityPreferencesTestCases") void testMapAccessibilityPreferences( String name, String json, diff --git a/src/test/java/org/opentripplanner/standalone/server/EtagRequestFilterTest.java b/src/test/java/org/opentripplanner/standalone/server/EtagRequestFilterTest.java index 5adf8264d8e..ae19643db72 100644 --- a/src/test/java/org/opentripplanner/standalone/server/EtagRequestFilterTest.java +++ b/src/test/java/org/opentripplanner/standalone/server/EtagRequestFilterTest.java @@ -16,27 +16,29 @@ import org.jets3t.service.utils.Mimetypes; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import org.opentripplanner.test.support.HttpForTest; -import org.opentripplanner.test.support.VariableSource; class EtagRequestFilterTest { static final String vectorTilesResponse = "some vector tiles"; static final String vectorTilesEtag = "\"20c17790\""; - static Stream etagCases = Stream.of( - Arguments.of("GET", 200, APPLICATION_X_PROTOBUF, bytes(vectorTilesResponse), vectorTilesEtag), - Arguments.of("GET", 404, APPLICATION_X_PROTOBUF, bytes("hello123"), null), - Arguments.of("GET", 200, "application/json", bytes("{}"), null), - Arguments.of("POST", 200, APPLICATION_X_PROTOBUF, bytes("hello123"), null), - Arguments.of("GET", 200, APPLICATION_X_PROTOBUF, bytes(""), null), - Arguments.of("POST", 200, Mimetypes.MIMETYPE_HTML, bytes(""), null) - ); + static Stream etagCases() { + return Stream.of( + Arguments.of("GET", 200, APPLICATION_X_PROTOBUF, bytes(vectorTilesResponse), vectorTilesEtag), + Arguments.of("GET", 404, APPLICATION_X_PROTOBUF, bytes("hello123"), null), + Arguments.of("GET", 200, "application/json", bytes("{}"), null), + Arguments.of("POST", 200, APPLICATION_X_PROTOBUF, bytes("hello123"), null), + Arguments.of("GET", 200, APPLICATION_X_PROTOBUF, bytes(""), null), + Arguments.of("POST", 200, Mimetypes.MIMETYPE_HTML, bytes(""), null) + ); + } @ParameterizedTest( name = "{0} request with response status={1} type={2}, entity={3} produces ETag header {4}" ) - @VariableSource("etagCases") + @MethodSource("etagCases") void writeEtag( String method, int status, @@ -56,13 +58,15 @@ void writeEtag( assertEquals(expectedEtag, response.getHeaderString(EtagRequestFilter.HEADER_ETAG)); } - static Stream ifNoneMatchCases = Stream.of( - Arguments.of("XXX", 200, bytes(vectorTilesResponse)), - Arguments.of(vectorTilesEtag, 304, null) - ); + static Stream ifNoneMatchCases() { + return Stream.of( + Arguments.of("XXX", 200, bytes(vectorTilesResponse)), + Arguments.of(vectorTilesEtag, 304, null) + ); + } @ParameterizedTest(name = "If-None-Match header of {0} should lead to a status code of {2}") - @VariableSource("ifNoneMatchCases") + @MethodSource("ifNoneMatchCases") void ifNoneMatch(String ifNoneMatch, int expectedStatus, byte[] expectedEntity) throws IOException { var request = HttpForTest.containerRequest("GET"); diff --git a/src/test/java/org/opentripplanner/standalone/server/RequestTraceFilterTest.java b/src/test/java/org/opentripplanner/standalone/server/RequestTraceFilterTest.java index 126ca887cc3..8198444f6be 100644 --- a/src/test/java/org/opentripplanner/standalone/server/RequestTraceFilterTest.java +++ b/src/test/java/org/opentripplanner/standalone/server/RequestTraceFilterTest.java @@ -7,7 +7,7 @@ import java.util.stream.Stream; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; -import org.opentripplanner.test.support.VariableSource; +import org.junit.jupiter.params.provider.MethodSource; class RequestTraceFilterTest { @@ -19,22 +19,24 @@ class RequestTraceFilterTest { private static final String A_TOO_LONG_STRING = A_VERY_LONG_STRING + "1"; @SuppressWarnings("unused") - private static final Stream headerCheckTestCases = Stream.of( - Arguments.of(true, "ok"), - Arguments.of(true, "special characters: -_,;.:!#$%&/(){}[]=?+"), - Arguments.of(true, "quote: \"quoted\" 'single' `back` ´forward´"), - Arguments.of(true, "international characters: æøå öâò≈∰🧐"), - Arguments.of(true, A_VERY_LONG_STRING), - Arguments.of(false, A_TOO_LONG_STRING), - Arguments.of(false, "Vertical space new-line: -\n-"), - Arguments.of(false, "Vertical space return: -\r-"), - Arguments.of(false, "Vertical space form-feed: -\f-"), - Arguments.of(false, "Control character 0x01: -\u0001-"), - Arguments.of(false, "Control character 0x19: -\u0019-") - ); + private static final Stream headerCheckTestCases() { + return Stream.of( + Arguments.of(true, "ok"), + Arguments.of(true, "special characters: -_,;.:!#$%&/(){}[]=?+"), + Arguments.of(true, "quote: \"quoted\" 'single' `back` ´forward´"), + Arguments.of(true, "international characters: æøå öâò≈∰🧐"), + Arguments.of(true, A_VERY_LONG_STRING), + Arguments.of(false, A_TOO_LONG_STRING), + Arguments.of(false, "Vertical space new-line: -\n-"), + Arguments.of(false, "Vertical space return: -\r-"), + Arguments.of(false, "Vertical space form-feed: -\f-"), + Arguments.of(false, "Control character 0x01: -\u0001-"), + Arguments.of(false, "Control character 0x19: -\u0019-") + ); + } @ParameterizedTest - @VariableSource("headerCheckTestCases") + @MethodSource("headerCheckTestCases") void headerCheck(boolean expectedMatch, String input) { assertEquals( expectedMatch, diff --git a/src/test/java/org/opentripplanner/street/integration/BicycleRoutingTest.java b/src/test/java/org/opentripplanner/street/integration/BicycleRoutingTest.java index d5b7733f3e8..db937ff2a6e 100644 --- a/src/test/java/org/opentripplanner/street/integration/BicycleRoutingTest.java +++ b/src/test/java/org/opentripplanner/street/integration/BicycleRoutingTest.java @@ -16,7 +16,7 @@ import org.opentripplanner.routing.algorithm.mapping.GraphPathToItineraryMapper; import org.opentripplanner.routing.api.request.RouteRequest; import org.opentripplanner.routing.api.request.StreetMode; -import org.opentripplanner.routing.core.BicycleOptimizeType; +import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.routing.impl.GraphPathFinder; import org.opentripplanner.street.search.TemporaryVerticesContainer; @@ -76,7 +76,7 @@ private static String computePolyline(Graph graph, GenericLocation from, Generic request.setFrom(from); request.setTo(to); request.withPreferences(p -> - p.withBike(it -> it.withOptimizeType(BicycleOptimizeType.SHORTEST_DURATION)) + p.withBike(it -> it.withOptimizeType(VehicleRoutingOptimizeType.SHORTEST_DURATION)) ); request.journey().direct().setMode(StreetMode.BIKE); diff --git a/src/test/java/org/opentripplanner/street/model/TurnRestrictionTest.java b/src/test/java/org/opentripplanner/street/model/TurnRestrictionTest.java index d40930f8bdc..f5d660e5d88 100644 --- a/src/test/java/org/opentripplanner/street/model/TurnRestrictionTest.java +++ b/src/test/java/org/opentripplanner/street/model/TurnRestrictionTest.java @@ -94,9 +94,7 @@ public void testHasExplicitTurnRestrictions() { public void testForwardDefault() { var request = new RouteRequest(); - request.withPreferences(preferences -> - preferences.withCar(it -> it.withSpeed(1.0)).withWalk(w -> w.withSpeed(1.0)) - ); + request.withPreferences(preferences -> preferences.withWalk(w -> w.withSpeed(1.0))); ShortestPathTree tree = StreetSearchBuilder .of() @@ -156,7 +154,6 @@ public void testForwardAsPedestrian() { @Test public void testForwardAsCar() { var request = new RouteRequest(); - request.withPreferences(p -> p.withCar(it -> it.withSpeed(1.0))); ShortestPathTree tree = StreetSearchBuilder .of() diff --git a/src/test/java/org/opentripplanner/street/model/_data/StreetModelForTest.java b/src/test/java/org/opentripplanner/street/model/_data/StreetModelForTest.java index 1f3dbf8c4c9..d50c8a74dfc 100644 --- a/src/test/java/org/opentripplanner/street/model/_data/StreetModelForTest.java +++ b/src/test/java/org/opentripplanner/street/model/_data/StreetModelForTest.java @@ -9,6 +9,9 @@ import org.opentripplanner.framework.geometry.SphericalDistanceLibrary; import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.framework.i18n.I18NString; +import org.opentripplanner.service.vehiclerental.model.TestFreeFloatingRentalVehicleBuilder; +import org.opentripplanner.service.vehiclerental.street.VehicleRentalPlaceVertex; +import org.opentripplanner.street.model.RentalFormFactor; import org.opentripplanner.street.model.StreetTraversalPermission; import org.opentripplanner.street.model.edge.StreetEdge; import org.opentripplanner.street.model.edge.StreetEdgeBuilder; @@ -93,4 +96,19 @@ public static StreetEdge streetEdge( ) { return streetEdge(from, to, 1, permissions); } + + public static VehicleRentalPlaceVertex rentalVertex(RentalFormFactor formFactor) { + var rentalVehicleBuilder = TestFreeFloatingRentalVehicleBuilder + .of() + .withLatitude(-122.575133) + .withLongitude(45.456773); + if (formFactor == RentalFormFactor.SCOOTER) { + rentalVehicleBuilder.withVehicleScooter(); + } else if (formFactor == RentalFormFactor.BICYCLE) { + rentalVehicleBuilder.withVehicleBicycle(); + } else if (formFactor == RentalFormFactor.CAR) { + rentalVehicleBuilder.withVehicleCar(); + } + return new VehicleRentalPlaceVertex(rentalVehicleBuilder.build()); + } } diff --git a/src/test/java/org/opentripplanner/street/model/edge/ElevatorHopEdgeTest.java b/src/test/java/org/opentripplanner/street/model/edge/ElevatorHopEdgeTest.java index 5d7c9d1213f..8efa6940d20 100644 --- a/src/test/java/org/opentripplanner/street/model/edge/ElevatorHopEdgeTest.java +++ b/src/test/java/org/opentripplanner/street/model/edge/ElevatorHopEdgeTest.java @@ -8,13 +8,13 @@ import java.util.stream.Stream; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import org.opentripplanner.routing.api.request.preference.AccessibilityPreferences; import org.opentripplanner.routing.api.request.preference.WheelchairPreferences; import org.opentripplanner.street.model.StreetTraversalPermission; import org.opentripplanner.street.model.vertex.Vertex; import org.opentripplanner.street.search.request.StreetSearchRequest; import org.opentripplanner.street.search.state.State; -import org.opentripplanner.test.support.VariableSource; import org.opentripplanner.transit.model.basic.Accessibility; class ElevatorHopEdgeTest { @@ -22,12 +22,12 @@ class ElevatorHopEdgeTest { Vertex from = intersectionVertex(0, 0); Vertex to = intersectionVertex(1, 1); - static Stream noTraverse = Stream - .of(Accessibility.NO_INFORMATION, Accessibility.NOT_POSSIBLE) - .map(Arguments::of); + static Stream noTraverse() { + return Stream.of(Accessibility.NO_INFORMATION, Accessibility.NOT_POSSIBLE).map(Arguments::of); + } @ParameterizedTest(name = "{0} should be allowed to traverse when requesting onlyAccessible") - @VariableSource("noTraverse") + @MethodSource("noTraverse") void shouldNotTraverse(Accessibility wheelchair) { var req = StreetSearchRequest.of(); AccessibilityPreferences feature = AccessibilityPreferences.ofOnlyAccessible(); @@ -52,17 +52,19 @@ void shouldNotTraverse(Accessibility wheelchair) { assertTrue(State.isEmpty(result)); } - static Stream all = Stream.of( - // no extra cost - Arguments.of(Accessibility.POSSIBLE, 20), - // low extra cost - Arguments.of(Accessibility.NO_INFORMATION, 40), - // high extra cost - Arguments.of(Accessibility.NOT_POSSIBLE, 3620) - ); + static Stream all() { + return Stream.of( + // no extra cost + Arguments.of(Accessibility.POSSIBLE, 20), + // low extra cost + Arguments.of(Accessibility.NO_INFORMATION, 40), + // high extra cost + Arguments.of(Accessibility.NOT_POSSIBLE, 3620) + ); + } @ParameterizedTest(name = "{0} should allowed to traverse with a cost of {1}") - @VariableSource("all") + @MethodSource("all") void allowByDefault(Accessibility wheelchair, double expectedCost) { var req = StreetSearchRequest.of().build(); var result = traverse(wheelchair, req)[0]; diff --git a/src/test/java/org/opentripplanner/street/model/edge/EscalatorEdgeTest.java b/src/test/java/org/opentripplanner/street/model/edge/EscalatorEdgeTest.java index 1c7fdba7ae7..60859290646 100644 --- a/src/test/java/org/opentripplanner/street/model/edge/EscalatorEdgeTest.java +++ b/src/test/java/org/opentripplanner/street/model/edge/EscalatorEdgeTest.java @@ -7,22 +7,24 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import org.opentripplanner.routing.api.request.StreetMode; import org.opentripplanner.street.model.vertex.SimpleVertex; import org.opentripplanner.street.model.vertex.Vertex; import org.opentripplanner.street.search.request.StreetSearchRequest; import org.opentripplanner.street.search.state.State; -import org.opentripplanner.test.support.VariableSource; class EscalatorEdgeTest { Vertex from = new SimpleVertex("A", 10, 10); Vertex to = new SimpleVertex("B", 10.001, 10.001); - static Stream args = Stream.of(Arguments.of(1.5, 150), Arguments.of(3.0, 300)); + static Stream args() { + return Stream.of(Arguments.of(1.5, 150), Arguments.of(3.0, 300)); + } @ParameterizedTest(name = "escalatorReluctance of {0} should lead to traversal costs of {1}") - @VariableSource("args") + @MethodSource("args") void testWalking(double escalatorReluctance, double expectedWeight) { var edge = EscalatorEdge.createEscalatorEdge(from, to, 45); var req = StreetSearchRequest diff --git a/src/test/java/org/opentripplanner/street/model/edge/PathwayEdgeTest.java b/src/test/java/org/opentripplanner/street/model/edge/PathwayEdgeTest.java index 9d4b1ff4fe2..6929f665938 100644 --- a/src/test/java/org/opentripplanner/street/model/edge/PathwayEdgeTest.java +++ b/src/test/java/org/opentripplanner/street/model/edge/PathwayEdgeTest.java @@ -12,6 +12,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.framework.i18n.NonLocalizedString; import org.opentripplanner.routing.api.request.StreetMode; @@ -19,7 +20,6 @@ import org.opentripplanner.street.model.vertex.Vertex; import org.opentripplanner.street.search.request.StreetSearchRequest; import org.opentripplanner.street.search.state.State; -import org.opentripplanner.test.support.VariableSource; import org.opentripplanner.transit.model.site.PathwayMode; class PathwayEdgeTest { @@ -141,20 +141,22 @@ void wheelchair() { assertEquals(300.0, state.getWeight()); } - static Stream slopeCases = Stream.of( - // no extra cost - Arguments.of(0.07, 120), - // no extra cost - Arguments.of(0.08, 120), - // 1 % above max - Arguments.of(0.09, 239), - // 1.1 % above the max slope, tiny extra cost - Arguments.of(0.091, 251), - // 1.15 % above the max slope, will incur larger cost - Arguments.of(0.0915, 257), - // 3 % above max slope, will incur very large cost - Arguments.of(0.11, 480) - ); + static Stream slopeCases() { + return Stream.of( + // no extra cost + Arguments.of(0.07, 120), + // no extra cost + Arguments.of(0.08, 120), + // 1 % above max + Arguments.of(0.09, 239), + // 1.1 % above the max slope, tiny extra cost + Arguments.of(0.091, 251), + // 1.15 % above the max slope, will incur larger cost + Arguments.of(0.0915, 257), + // 3 % above max slope, will incur very large cost + Arguments.of(0.11, 480) + ); + } /** * This makes sure that when you exceed the max slope in a wheelchair there isn't a hard cut-off @@ -164,7 +166,7 @@ void wheelchair() { * dramatically to the point where it's only used as a last resort. */ @ParameterizedTest(name = "slope of {0} should lead to traversal costs of {1}") - @VariableSource("slopeCases") + @MethodSource("slopeCases") void shouldScaleCostWithMaxSlope(double slope, long expectedCost) { var edge = PathwayEdge.createPathwayEdge( from, diff --git a/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeCostTest.java b/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeCostTest.java index 2ecfa51822a..acd02653941 100644 --- a/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeCostTest.java +++ b/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeCostTest.java @@ -8,23 +8,25 @@ import java.util.stream.Stream; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import org.opentripplanner.routing.api.request.StreetMode; import org.opentripplanner.street.model.StreetTraversalPermission; import org.opentripplanner.street.search.request.StreetSearchRequest; import org.opentripplanner.street.search.state.State; -import org.opentripplanner.test.support.VariableSource; class StreetEdgeCostTest { - static Stream walkReluctanceCases = Stream.of( - Arguments.of(0.5, 37), - Arguments.of(1, 75), - Arguments.of(2, 150), - Arguments.of(3, 225) - ); + static Stream walkReluctanceCases() { + return Stream.of( + Arguments.of(0.5, 37), + Arguments.of(1, 75), + Arguments.of(2, 150), + Arguments.of(3, 225) + ); + } @ParameterizedTest(name = "walkRelucance of {0} should lead to traversal costs of {1}") - @VariableSource("walkReluctanceCases") + @MethodSource("walkReluctanceCases") public void walkReluctance(double walkReluctance, long expectedCost) { double length = 100; var edge = new StreetEdgeBuilder<>() @@ -45,15 +47,17 @@ public void walkReluctance(double walkReluctance, long expectedCost) { assertEquals(76, result.getElapsedTimeSeconds()); } - static Stream bikeReluctanceCases = Stream.of( - Arguments.of(0.5, 10), - Arguments.of(1, 20), - Arguments.of(2, 40), - Arguments.of(3, 60) - ); + static Stream bikeReluctanceCases() { + return Stream.of( + Arguments.of(0.5, 10), + Arguments.of(1, 20), + Arguments.of(2, 40), + Arguments.of(3, 60) + ); + } @ParameterizedTest(name = "bikeReluctance of {0} should lead to traversal costs of {1}") - @VariableSource("bikeReluctanceCases") + @MethodSource("bikeReluctanceCases") public void bikeReluctance(double bikeReluctance, long expectedCost) { double length = 100; var edge = new StreetEdgeBuilder<>() @@ -75,15 +79,17 @@ public void bikeReluctance(double bikeReluctance, long expectedCost) { assertEquals(20, result.getElapsedTimeSeconds()); } - static Stream carReluctanceCases = Stream.of( - Arguments.of(0.5, 4), - Arguments.of(1, 8), - Arguments.of(2, 17), - Arguments.of(3, 26) - ); + static Stream carReluctanceCases() { + return Stream.of( + Arguments.of(0.5, 4), + Arguments.of(1, 8), + Arguments.of(2, 17), + Arguments.of(3, 26) + ); + } @ParameterizedTest(name = "carReluctance of {0} should lead to traversal costs of {1}") - @VariableSource("carReluctanceCases") + @MethodSource("carReluctanceCases") public void carReluctance(double carReluctance, long expectedCost) { double length = 100; var edge = new StreetEdgeBuilder<>() @@ -105,14 +111,12 @@ public void carReluctance(double carReluctance, long expectedCost) { assertEquals(9, result.getElapsedTimeSeconds()); } - static Stream stairsCases = Stream.of( - Arguments.of(1, 22), - Arguments.of(1.5, 33), - Arguments.of(3, 67) - ); + static Stream stairsCases() { + return Stream.of(Arguments.of(1, 22), Arguments.of(1.5, 33), Arguments.of(3, 67)); + } @ParameterizedTest(name = "stairs reluctance of {0} should lead to traversal costs of {1}") - @VariableSource("stairsCases") + @MethodSource("stairsCases") public void stairsReluctance(double stairsReluctance, long expectedCost) { double length = 10; var stairsEdge = new StreetEdgeBuilder<>() @@ -138,14 +142,12 @@ public void stairsReluctance(double stairsReluctance, long expectedCost) { assertEquals(15, (long) notStairsResult.weight); } - static Stream bikeStairsCases = Stream.of( - Arguments.of(1, 45), - Arguments.of(1.5, 67), - Arguments.of(3, 135) - ); + static Stream bikeStairsCases() { + return Stream.of(Arguments.of(1, 45), Arguments.of(1.5, 67), Arguments.of(3, 135)); + } @ParameterizedTest(name = "bike stairs reluctance of {0} should lead to traversal costs of {1}") - @VariableSource("bikeStairsCases") + @MethodSource("bikeStairsCases") public void bikeStairsReluctance(double stairsReluctance, long expectedCost) { double length = 10; var stairsEdge = new StreetEdgeBuilder<>() @@ -173,14 +175,12 @@ public void bikeStairsReluctance(double stairsReluctance, long expectedCost) { assertEquals(37, (long) notStairsResult.weight); } - static Stream walkSafetyCases = Stream.of( - Arguments.of(0, 15), - Arguments.of(0.5, 22), - Arguments.of(1, 30) - ); + static Stream walkSafetyCases() { + return Stream.of(Arguments.of(0, 15), Arguments.of(0.5, 22), Arguments.of(1, 30)); + } @ParameterizedTest(name = "walk safety factor of {0} should lead to traversal costs of {1}") - @VariableSource("walkSafetyCases") + @MethodSource("walkSafetyCases") public void walkSafetyFactor(double walkSafetyFactor, long expectedCost) { double length = 10; var safeEdge = new StreetEdgeBuilder<>() diff --git a/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeRentalTraversalTest.java b/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeRentalTraversalTest.java index 20682b6048b..44de661f327 100644 --- a/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeRentalTraversalTest.java +++ b/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeRentalTraversalTest.java @@ -17,6 +17,7 @@ import javax.annotation.Nonnull; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import org.opentripplanner.routing.api.request.StreetMode; import org.opentripplanner.street.model.RentalFormFactor; import org.opentripplanner.street.model.StreetTraversalPermission; @@ -24,7 +25,6 @@ import org.opentripplanner.street.search.request.StreetSearchRequest; import org.opentripplanner.street.search.state.State; import org.opentripplanner.street.search.state.StateEditor; -import org.opentripplanner.test.support.VariableSource; public class StreetEdgeRentalTraversalTest { @@ -42,18 +42,20 @@ private static Stream baseCases(StreetTraversalPermission p) { ); } - static Stream allowedToTraverse = Stream - .of( - StreetTraversalPermission.ALL, - StreetTraversalPermission.PEDESTRIAN_AND_BICYCLE, - StreetTraversalPermission.BICYCLE - ) - .flatMap(StreetEdgeRentalTraversalTest::baseCases); + static Stream allowedToTraverse() { + return Stream + .of( + StreetTraversalPermission.ALL, + StreetTraversalPermission.PEDESTRIAN_AND_BICYCLE, + StreetTraversalPermission.BICYCLE + ) + .flatMap(StreetEdgeRentalTraversalTest::baseCases); + } @ParameterizedTest( name = "Form factor {0}, street mode {1} should be able to traverse edge with permission {2}" ) - @VariableSource("allowedToTraverse") + @MethodSource("allowedToTraverse") void scooterBicycleTraversal( RentalFormFactor formFactor, StreetMode streetMode, @@ -74,14 +76,16 @@ void scooterBicycleTraversal( assertEquals(formFactor.traverseMode, afterTraversal.currentMode()); } - static Stream noTraversal = Stream - .of(StreetTraversalPermission.CAR, StreetTraversalPermission.NONE) - .flatMap(StreetEdgeRentalTraversalTest::baseCases); + static Stream noTraversal() { + return Stream + .of(StreetTraversalPermission.CAR, StreetTraversalPermission.NONE) + .flatMap(StreetEdgeRentalTraversalTest::baseCases); + } @ParameterizedTest( name = "Form factor {0}, street mode {1} should not be able to traverse edge with permission {2}" ) - @VariableSource("noTraversal") + @MethodSource("noTraversal") void noTraversal( RentalFormFactor formFactor, StreetMode streetMode, diff --git a/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeScooterTraversalTest.java b/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeScooterTraversalTest.java new file mode 100644 index 00000000000..734b1efa2b9 --- /dev/null +++ b/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeScooterTraversalTest.java @@ -0,0 +1,255 @@ +package org.opentripplanner.street.model.edge; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import org.junit.jupiter.api.Test; +import org.locationtech.jts.geom.Coordinate; +import org.locationtech.jts.geom.GeometryFactory; +import org.locationtech.jts.geom.LineString; +import org.locationtech.jts.geom.impl.PackedCoordinateSequence; +import org.opentripplanner.routing.api.request.StreetMode; +import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; +import org.opentripplanner.routing.util.ElevationUtils; +import org.opentripplanner.routing.util.SlopeCosts; +import org.opentripplanner.service.vehiclerental.street.StreetVehicleRentalLink; +import org.opentripplanner.service.vehiclerental.street.VehicleRentalEdge; +import org.opentripplanner.service.vehiclerental.street.VehicleRentalPlaceVertex; +import org.opentripplanner.street.model.RentalFormFactor; +import org.opentripplanner.street.model.StreetTraversalPermission; +import org.opentripplanner.street.model._data.StreetModelForTest; +import org.opentripplanner.street.model.vertex.StreetVertex; +import org.opentripplanner.street.search.TraverseMode; +import org.opentripplanner.street.search.request.StreetSearchRequest; +import org.opentripplanner.street.search.state.State; + +public class StreetEdgeScooterTraversalTest { + + private static final double DELTA = 0.00001; + private static final double SPEED = 6.0; + + @Test + public void testTraverseFloatingScooter() { + // This test does not depend on the setup method - and can probably be simplified + Coordinate c1 = new Coordinate(-122.575033, 45.456773); + Coordinate c2 = new Coordinate(-122.576668, 45.451426); + + var formFactor = RentalFormFactor.SCOOTER; + var rentalVertex = StreetModelForTest.rentalVertex(formFactor); + var vehicleRentalEdge = VehicleRentalEdge.createVehicleRentalEdge(rentalVertex, formFactor); + + StreetVertex v1 = StreetModelForTest.intersectionVertex("v1", c1.x, c1.y); + StreetVertex v2 = StreetModelForTest.intersectionVertex("v2", c2.x, c2.y); + + var link = StreetVehicleRentalLink.createStreetVehicleRentalLink(rentalVertex, v1); + + GeometryFactory factory = new GeometryFactory(); + LineString geometry = factory.createLineString(new Coordinate[] { c1, c2 }); + + double length = 650.0; + + StreetEdge testStreet = new StreetEdgeBuilder<>() + .withFromVertex(v1) + .withToVertex(v2) + .withGeometry(geometry) + .withName("Test Lane") + .withMeterLength(length) + .withPermission(StreetTraversalPermission.ALL) + .buildAndConnect(); + + var request = StreetSearchRequest.of().withMode(StreetMode.SCOOTER_RENTAL); + + request.withPreferences(pref -> pref.withScooter(scooter -> scooter.withSpeed(5))); + + State slowResult = traverseStreetFromRental( + testStreet, + vehicleRentalEdge, + link, + rentalVertex, + request.build() + ); + request.withPreferences(pref -> pref.withScooter(scooter -> scooter.withSpeed(10))); + + State fastResult = traverseStreetFromRental( + testStreet, + vehicleRentalEdge, + link, + rentalVertex, + request.build() + ); + + // Cost and time should be less when scooter speed is higher. + assertTrue(slowResult.getWeight() > fastResult.getWeight() + DELTA); + assertTrue(slowResult.getElapsedTimeSeconds() > fastResult.getElapsedTimeSeconds()); + + request.withPreferences(pref -> pref.withScooter(scooter -> scooter.withReluctance(1))); + State lowReluctanceResult = traverseStreetFromRental( + testStreet, + vehicleRentalEdge, + link, + rentalVertex, + request.build() + ); + + request.withPreferences(pref -> pref.withScooter(scooter -> scooter.withReluctance(5))); + + State highReluctanceResult = traverseStreetFromRental( + testStreet, + vehicleRentalEdge, + link, + rentalVertex, + request.build() + ); + // Cost should be more when reluctance is higher but the time should be the same. + assertTrue(highReluctanceResult.getWeight() > lowReluctanceResult.getWeight() + DELTA); + + assertEquals( + highReluctanceResult.getElapsedTimeSeconds(), + lowReluctanceResult.getElapsedTimeSeconds() + ); + } + + @Test + public void testWalkingBeforeScooter() { + StreetEdge e1 = StreetModelForTest + .streetEdgeBuilder( + StreetModelForTest.V1, + StreetModelForTest.V2, + 100.0, + StreetTraversalPermission.ALL + ) + .withCarSpeed(10.0f) + .buildAndConnect(); + + var request = StreetSearchRequest + .of() + .withPreferences(pref -> pref.withWalk(walk -> walk.withReluctance(1))) + .withMode(StreetMode.SCOOTER_RENTAL); + + State s0 = new State(StreetModelForTest.V1, request.build()); + State result = e1.traverse(s0)[0]; + + request.withPreferences(pref -> + pref.withScooter(scooter -> scooter.withReluctance(5).withSpeed(8.5)) + ); + + s0 = new State(StreetModelForTest.V1, request.build()); + var scooterReluctanceResult = e1.traverse(s0)[0]; + + // Scooter preferences shouldn't affect walking when SCOOTER_RENTAL is used as mode + assertEquals(TraverseMode.WALK, result.currentMode()); + assertEquals(result.getWeight(), scooterReluctanceResult.getWeight(), DELTA); + assertEquals(result.getElapsedTimeSeconds(), scooterReluctanceResult.getElapsedTimeSeconds()); + } + + @Test + public void testScooterOptimizeTriangle() { + // This test does not depend on the setup method - and can probably be simplified + Coordinate c1 = new Coordinate(-122.575033, 45.456773); + Coordinate c2 = new Coordinate(-122.576668, 45.451426); + + var formFactor = RentalFormFactor.SCOOTER; + + var rentalVertex = StreetModelForTest.rentalVertex(formFactor); + var vehicleRentalEdge = VehicleRentalEdge.createVehicleRentalEdge(rentalVertex, formFactor); + + StreetVertex v1 = StreetModelForTest.intersectionVertex("v1", c1.x, c1.y); + StreetVertex v2 = StreetModelForTest.intersectionVertex("v2", c2.x, c2.y); + + var link = StreetVehicleRentalLink.createStreetVehicleRentalLink(rentalVertex, v1); + + GeometryFactory factory = new GeometryFactory(); + LineString geometry = factory.createLineString(new Coordinate[] { c1, c2 }); + + double length = 650.0; + + StreetEdge testStreet = new StreetEdgeBuilder<>() + .withFromVertex(v1) + .withToVertex(v2) + .withGeometry(geometry) + .withName("Test Lane") + .withMeterLength(length) + .withPermission(StreetTraversalPermission.ALL) + // a safe street + .withBicycleSafetyFactor(0.74f) + .buildAndConnect(); + + Coordinate[] profile = new Coordinate[] { + new Coordinate(0, 0), // slope = 0.1 + new Coordinate(length / 2, length / 20.0), + new Coordinate(length, 0), // slope = -0.1 + }; + PackedCoordinateSequence elev = new PackedCoordinateSequence.Double(profile); + StreetElevationExtensionBuilder + .of(testStreet) + .withElevationProfile(elev) + .withComputed(false) + .build() + .ifPresent(testStreet::setElevationExtension); + + SlopeCosts costs = ElevationUtils.getSlopeCosts(elev, true); + double trueLength = costs.lengthMultiplier * length; + double slopeWorkLength = testStreet.getEffectiveBikeDistanceForWorkCost(); + double slopeSpeedLength = testStreet.getEffectiveBikeDistance(); + + var request = StreetSearchRequest.of().withMode(StreetMode.SCOOTER_RENTAL); + + request.withPreferences(pref -> + pref + .withScooter(scooter -> + scooter + .withSpeed(SPEED) + .withOptimizeType(VehicleRoutingOptimizeType.TRIANGLE) + .withOptimizeTriangle(it -> it.withTime(1)) + .withReluctance(1) + ) + .withWalk(walk -> walk.withReluctance(1)) + .withCar(car -> car.withReluctance(1)) + ); + + var rentedState = vehicleRentalEdge.traverse(new State(rentalVertex, request.build())); + var startState = link.traverse(rentedState[0])[0]; + + State result = testStreet.traverse(startState)[0]; + double expectedTimeWeight = slopeSpeedLength / SPEED; + assertEquals(TraverseMode.SCOOTER, result.currentMode()); + assertEquals(expectedTimeWeight, result.getWeight() - startState.getWeight(), DELTA); + + request.withPreferences(p -> + p.withScooter(scooter -> scooter.withOptimizeTriangle(it -> it.withSlope(1))) + ); + rentedState = vehicleRentalEdge.traverse(new State(rentalVertex, request.build())); + startState = link.traverse(rentedState[0])[0]; + + result = testStreet.traverse(startState)[0]; + double slopeWeight = result.getWeight(); + double expectedSlopeWeight = slopeWorkLength / SPEED; + assertEquals(expectedSlopeWeight, slopeWeight - startState.getWeight(), DELTA); + assertTrue(length * 1.5 / SPEED < slopeWeight); + assertTrue(length * 1.5 * 10 / SPEED > slopeWeight); + + request.withPreferences(p -> + p.withScooter(scooter -> scooter.withOptimizeTriangle(it -> it.withSafety(1))) + ); + rentedState = vehicleRentalEdge.traverse(new State(rentalVertex, request.build())); + startState = link.traverse(rentedState[0])[0]; + + result = testStreet.traverse(startState)[0]; + double slopeSafety = costs.slopeSafetyCost; + double safetyWeight = result.getWeight(); + double expectedSafetyWeight = (trueLength * 0.74 + slopeSafety) / SPEED; + assertEquals(expectedSafetyWeight, safetyWeight - startState.getWeight(), DELTA); + } + + private State traverseStreetFromRental( + StreetEdge streetEdge, + VehicleRentalEdge rentalEdge, + StreetVehicleRentalLink link, + VehicleRentalPlaceVertex rentalVertex, + StreetSearchRequest request + ) { + var rentedState = rentalEdge.traverse(new State(rentalVertex, request)); + var startState = link.traverse(rentedState[0])[0]; + return streetEdge.traverse(startState)[0]; + } +} diff --git a/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeTest.java b/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeTest.java index ed5768d4a1a..318f133f15e 100644 --- a/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeTest.java +++ b/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeTest.java @@ -18,7 +18,7 @@ import org.locationtech.jts.geom.LineString; import org.locationtech.jts.geom.impl.PackedCoordinateSequence; import org.opentripplanner.routing.api.request.StreetMode; -import org.opentripplanner.routing.core.BicycleOptimizeType; +import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; import org.opentripplanner.routing.util.ElevationUtils; import org.opentripplanner.routing.util.SlopeCosts; import org.opentripplanner.street.model.StreetTraversalPermission; @@ -58,7 +58,7 @@ public void before() { .withBike(it -> it.withSpeed(5.0f).withReluctance(1.0).withWalking(w -> w.withSpeed(0.8)) ) - .withCar(c -> c.withSpeed(15.0f).withReluctance(1.0)) + .withCar(c -> c.withReluctance(1.0)) ) .build(); } @@ -357,7 +357,7 @@ public void testBikeOptimizeTriangle() { .withBike(bike -> bike .withSpeed(SPEED) - .withOptimizeType(BicycleOptimizeType.TRIANGLE) + .withOptimizeType(VehicleRoutingOptimizeType.TRIANGLE) .withOptimizeTriangle(it -> it.withTime(1)) .withReluctance(1) ) diff --git a/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeWheelchairCostTest.java b/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeWheelchairCostTest.java index ed4b92da779..7c2767a6935 100644 --- a/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeWheelchairCostTest.java +++ b/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeWheelchairCostTest.java @@ -7,6 +7,7 @@ import java.util.stream.Stream; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import org.locationtech.jts.geom.Coordinate; import org.locationtech.jts.geom.impl.PackedCoordinateSequence; import org.opentripplanner.routing.api.request.preference.WheelchairPreferences; @@ -14,7 +15,6 @@ import org.opentripplanner.street.model.vertex.StreetVertex; import org.opentripplanner.street.search.request.StreetSearchRequest; import org.opentripplanner.street.search.state.State; -import org.opentripplanner.test.support.VariableSource; class StreetEdgeWheelchairCostTest { @@ -26,26 +26,28 @@ public StreetEdgeWheelchairCostTest() { V2 = intersectionVertex("V2", 2.0, 0.0); } - static Stream slopeCases = Stream.of( - // no extra cost - Arguments.of(0.07, 1, 5081), - // no extra cost - Arguments.of(0.08, 1, 5945), - // no extra cost - Arguments.of(0.09, 1, 6908), - // 0.1 % above the max slope, tiny extra cost - Arguments.of(0.091, 1, 7708), - // 3 % above max slope, will incur very large cost - Arguments.of(0.091, 3, 9110), - // 0.1 % above the max slope, but high reluctance will large cost - Arguments.of(0.0915, 1, 8116), - // 2 % above max slope, but lowered reluctance - Arguments.of(0.11, 0.5, 17649), - // 2 % above max slope, will incur very large cost - Arguments.of(0.11, 1, 26474), - // 3 % above max slope, will incur very large cost - Arguments.of(0.12, 1, 37978) - ); + static Stream slopeCases() { + return Stream.of( + // no extra cost + Arguments.of(0.07, 1, 5081), + // no extra cost + Arguments.of(0.08, 1, 5945), + // no extra cost + Arguments.of(0.09, 1, 6908), + // 0.1 % above the max slope, tiny extra cost + Arguments.of(0.091, 1, 7708), + // 3 % above max slope, will incur very large cost + Arguments.of(0.091, 3, 9110), + // 0.1 % above the max slope, but high reluctance will large cost + Arguments.of(0.0915, 1, 8116), + // 2 % above max slope, but lowered reluctance + Arguments.of(0.11, 0.5, 17649), + // 2 % above max slope, will incur very large cost + Arguments.of(0.11, 1, 26474), + // 3 % above max slope, will incur very large cost + Arguments.of(0.12, 1, 37978) + ); + } /** * This makes sure that when you exceed the max slope in a wheelchair there isn't a hard cut-off @@ -57,7 +59,7 @@ public StreetEdgeWheelchairCostTest() { @ParameterizedTest( name = "slope of {0} with maxSlopeExceededReluctance of {1} should lead to traversal costs of {2}" ) - @VariableSource("slopeCases") + @MethodSource("slopeCases") public void shouldScaleCostWithMaxSlope(double slope, double reluctance, long expectedCost) { double length = 1000; var edge = new StreetEdgeBuilder<>() @@ -104,16 +106,14 @@ public void shouldScaleCostWithMaxSlope(double slope, double reluctance, long ex assertEquals(expectedCost, (long) result.weight); } - static Stream wheelchairStairsCases = Stream.of( - Arguments.of(1, 22), - Arguments.of(10, 225), - Arguments.of(100, 2255) - ); + static Stream wheelchairStairsCases() { + return Stream.of(Arguments.of(1, 22), Arguments.of(10, 225), Arguments.of(100, 2255)); + } @ParameterizedTest( name = "wheelchair stairs reluctance of {0} should lead to traversal costs of {1}" ) - @VariableSource("wheelchairStairsCases") + @MethodSource("wheelchairStairsCases") public void wheelchairStairsReluctance(double stairsReluctance, long expectedCost) { double length = 10; var stairEdge = new StreetEdgeBuilder<>() @@ -153,16 +153,14 @@ public void wheelchairStairsReluctance(double stairsReluctance, long expectedCos assertEquals(7, (long) notStairsResult.weight); } - static Stream inaccessibleStreetCases = Stream.of( - Arguments.of(1f, 15), - Arguments.of(10f, 150), - Arguments.of(100f, 1503) - ); + static Stream inaccessibleStreetCases() { + return Stream.of(Arguments.of(1f, 15), Arguments.of(10f, 150), Arguments.of(100f, 1503)); + } @ParameterizedTest( name = "an inaccessible street with the reluctance of {0} should lead to traversal costs of {1}" ) - @VariableSource("inaccessibleStreetCases") + @MethodSource("inaccessibleStreetCases") public void inaccessibleStreet(float inaccessibleStreetReluctance, long expectedCost) { double length = 10; var edge = new StreetEdgeBuilder<>() @@ -201,17 +199,19 @@ public void inaccessibleStreet(float inaccessibleStreetReluctance, long expected assertEquals(15, (long) accessibleResult.weight); } - static Stream walkReluctanceCases = Stream.of( - Arguments.of(0.5, 3), - Arguments.of(1, 7), - Arguments.of(10, 75), - Arguments.of(100, 751) - ); + static Stream walkReluctanceCases() { + return Stream.of( + Arguments.of(0.5, 3), + Arguments.of(1, 7), + Arguments.of(10, 75), + Arguments.of(100, 751) + ); + } @ParameterizedTest( name = "walkReluctance of {0} should affect wheelchair users and lead to traversal costs of {1}" ) - @VariableSource("walkReluctanceCases") + @MethodSource("walkReluctanceCases") public void walkReluctance(double walkReluctance, long expectedCost) { double length = 10; var edge = new StreetEdgeBuilder<>() diff --git a/src/test/java/org/opentripplanner/street/model/edge/StreetVehicleParkingLinkTest.java b/src/test/java/org/opentripplanner/street/model/edge/StreetVehicleParkingLinkTest.java index a2a052d3b5c..99de720a5a2 100644 --- a/src/test/java/org/opentripplanner/street/model/edge/StreetVehicleParkingLinkTest.java +++ b/src/test/java/org/opentripplanner/street/model/edge/StreetVehicleParkingLinkTest.java @@ -11,6 +11,7 @@ import java.util.stream.Stream; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.framework.i18n.NonLocalizedString; import org.opentripplanner.routing.api.request.StreetMode; @@ -20,22 +21,23 @@ import org.opentripplanner.street.model.vertex.Vertex; import org.opentripplanner.street.search.request.StreetSearchRequest; import org.opentripplanner.street.search.state.State; -import org.opentripplanner.test.support.VariableSource; class StreetVehicleParkingLinkTest { - static Stream testCases = Stream.of( - of(Set.of(), Set.of(), Set.of(), true), - of(Set.of("a-tag"), Set.of(), Set.of(), true), - of(Set.of("a"), Set.of("a"), Set.of(), false), - of(Set.of("a"), Set.of("a"), Set.of("a"), false), - of(Set.of("a", "b"), Set.of("b"), Set.of("a"), false), - of(Set.of("a", "b"), Set.of(), Set.of("a"), true), - of(Set.of("a", "b"), Set.of(), Set.of("c"), false) - ); + static Stream testCases() { + return Stream.of( + of(Set.of(), Set.of(), Set.of(), true), + of(Set.of("a-tag"), Set.of(), Set.of(), true), + of(Set.of("a"), Set.of("a"), Set.of(), false), + of(Set.of("a"), Set.of("a"), Set.of("a"), false), + of(Set.of("a", "b"), Set.of("b"), Set.of("a"), false), + of(Set.of("a", "b"), Set.of(), Set.of("a"), true), + of(Set.of("a", "b"), Set.of(), Set.of("c"), false) + ); + } @ParameterizedTest(name = "Parking[tags={0}], Request[not={1}, select={2}] should traverse={3}") - @VariableSource("testCases") + @MethodSource("testCases") void foo(Set parkingTags, Set not, Set select, boolean shouldTraverse) { var streetVertex = intersectionVertex(1, 1); var parking = VehicleParking diff --git a/src/test/java/org/opentripplanner/street/model/edge/VehicleRentalEdgeTest.java b/src/test/java/org/opentripplanner/street/model/edge/VehicleRentalEdgeTest.java index 84f5efcc1c5..a3fbfcb018e 100644 --- a/src/test/java/org/opentripplanner/street/model/edge/VehicleRentalEdgeTest.java +++ b/src/test/java/org/opentripplanner/street/model/edge/VehicleRentalEdgeTest.java @@ -18,6 +18,7 @@ import org.opentripplanner.service.vehiclerental.street.VehicleRentalEdge; import org.opentripplanner.service.vehiclerental.street.VehicleRentalPlaceVertex; import org.opentripplanner.street.model.RentalFormFactor; +import org.opentripplanner.street.model._data.StreetModelForTest; import org.opentripplanner.street.search.request.StreetSearchRequest; import org.opentripplanner.street.search.state.State; import org.opentripplanner.street.search.state.VehicleRentalState; @@ -30,7 +31,7 @@ class VehicleRentalEdgeTest { VehicleRentalPlaceVertex vertex; @Test - void testRentingWithAvailableVehicles() { + void testRentingWithAvailableBikes() { initEdgeAndRequest(StreetMode.BIKE_RENTAL, 3, 3); var s1 = rent(); @@ -49,7 +50,7 @@ void testRentingWithNoAvailableVehicles() { @Test void testRentingWithNoAvailableVehiclesAndNoRealtimeUsage() { - initEdgeAndRequest(StreetMode.BIKE_RENTAL, 0, 3, false, true, false); + initEdgeAndRequest(StreetMode.BIKE_RENTAL, 0, 3, false, true, false, false); var s1 = rent(); @@ -76,7 +77,7 @@ void testReturningWithNoAvailableSpaces() { @Test void testReturningWithNoAvailableSpacesAndOverloading() { - initEdgeAndRequest(StreetMode.BIKE_RENTAL, 3, 0, true, true, true); + initEdgeAndRequest(StreetMode.BIKE_RENTAL, 3, 0, true, true, true, false); var s1 = rentAndDropOff(); @@ -85,7 +86,7 @@ void testReturningWithNoAvailableSpacesAndOverloading() { @Test void testReturningWithNoAvailableSpacesAndNoRealtimeUsage() { - initEdgeAndRequest(StreetMode.BIKE_RENTAL, 3, 0, false, true, false); + initEdgeAndRequest(StreetMode.BIKE_RENTAL, 3, 0, false, true, false, false); var s1 = rentAndDropOff(); @@ -94,7 +95,7 @@ void testReturningWithNoAvailableSpacesAndNoRealtimeUsage() { @Test void testRentingFromClosedStation() { - initEdgeAndRequest(StreetMode.BIKE_RENTAL, 3, 0, true, false, true); + initEdgeAndRequest(StreetMode.BIKE_RENTAL, 3, 0, true, false, true, false); var s1 = rent(); @@ -103,13 +104,13 @@ void testRentingFromClosedStation() { @Test void testReturningToClosedStation() { - initEdgeAndRequest(StreetMode.BIKE_RENTAL, 3, 3, true, true, true); + initEdgeAndRequest(StreetMode.BIKE_RENTAL, 3, 3, true, true, true, false); var s1 = rent(); assertFalse(State.isEmpty(s1)); - initEdgeAndRequest(StreetMode.BIKE_RENTAL, 3, 3, true, false, true); + initEdgeAndRequest(StreetMode.BIKE_RENTAL, 3, 3, true, false, true, false); var s2 = dropOff(s1[0]); @@ -118,15 +119,78 @@ void testReturningToClosedStation() { @Test void testReturningAndReturningToClosedStationWithNoRealtimeUsage() { - initEdgeAndRequest(StreetMode.BIKE_RENTAL, 3, 3, false, true, false); + initEdgeAndRequest(StreetMode.BIKE_RENTAL, 3, 3, false, true, false, false); var s1 = rentAndDropOff(); assertFalse(State.isEmpty(s1)); } + @Test + void testRentingWithFreeFloatingBicycle() { + initFreeFloatingEdgeAndRequest(StreetMode.BIKE_RENTAL, RentalFormFactor.BICYCLE, false); + + var s1 = rent(); + + assertFalse(State.isEmpty(s1)); + } + + @Test + void testRentingWithFreeFloatingScooter() { + initFreeFloatingEdgeAndRequest(StreetMode.SCOOTER_RENTAL, RentalFormFactor.SCOOTER, false); + + var s1 = rent(); + + assertFalse(State.isEmpty(s1)); + } + + @Test + void testRentingWithFreeFloatingCar() { + initFreeFloatingEdgeAndRequest(StreetMode.CAR_RENTAL, RentalFormFactor.CAR, false); + + var s1 = rent(); + + assertFalse(State.isEmpty(s1)); + } + + @Test + void testBannedBicycleNetworkStation() { + initEdgeAndRequest(StreetMode.BIKE_RENTAL, 3, 3, false, true, true, true); + + var s1 = rent(); + + assertTrue(State.isEmpty(s1)); + } + + @Test + void testBannedBicycleNetworkFreeFloating() { + initFreeFloatingEdgeAndRequest(StreetMode.BIKE_RENTAL, RentalFormFactor.BICYCLE, true); + + var s1 = rent(); + + assertTrue(State.isEmpty(s1)); + } + + @Test + void testBannedScooterNetworkFreeFloating() { + initFreeFloatingEdgeAndRequest(StreetMode.SCOOTER_RENTAL, RentalFormFactor.SCOOTER, true); + + var s1 = rent(); + + assertTrue(State.isEmpty(s1)); + } + + @Test + void testBannedCarNetworkFreeFloating() { + initFreeFloatingEdgeAndRequest(StreetMode.CAR_RENTAL, RentalFormFactor.CAR, true); + + var s1 = rent(); + + assertTrue(State.isEmpty(s1)); + } + private void initEdgeAndRequest(StreetMode mode, int vehicles, int spaces) { - initEdgeAndRequest(mode, vehicles, spaces, false, true, true); + initEdgeAndRequest(mode, vehicles, spaces, false, true, true, false); } @Nested @@ -204,7 +268,8 @@ private void initEdgeAndRequest( int spaces, boolean overloadingAllowed, boolean stationOn, - boolean useRealtime + boolean useRealtime, + boolean banNetwork ) { var station = TestVehicleRentalStationBuilder .of() @@ -218,17 +283,49 @@ private void initEdgeAndRequest( vehicleRentalEdge = VehicleRentalEdge.createVehicleRentalEdge(vertex, RentalFormFactor.BICYCLE); + Set bannedNetworks = banNetwork ? Set.of(station.getNetwork()) : Set.of(); + this.request = StreetSearchRequest .of() .withMode(mode) .withPreferences(preferences -> preferences - .withCar(car -> - car.withRental(rental -> rental.withUseAvailabilityInformation(useRealtime)) - ) .withBike(bike -> - bike.withRental(rental -> rental.withUseAvailabilityInformation(useRealtime)) + bike.withRental(rental -> + rental + .withUseAvailabilityInformation(useRealtime) + .withBannedNetworks(bannedNetworks) + ) + ) + .build() + ) + .build(); + } + + private void initFreeFloatingEdgeAndRequest( + StreetMode mode, + RentalFormFactor formFactor, + boolean banNetwork + ) { + this.vertex = StreetModelForTest.rentalVertex(formFactor); + + vehicleRentalEdge = VehicleRentalEdge.createVehicleRentalEdge(vertex, formFactor); + + Set bannedNetworks = banNetwork + ? Set.of(this.vertex.getStation().getNetwork()) + : Set.of(); + + this.request = + StreetSearchRequest + .of() + .withMode(mode) + .withPreferences(preferences -> + preferences + .withCar(car -> car.withRental(rental -> rental.withBannedNetworks(bannedNetworks))) + .withBike(bike -> bike.withRental(rental -> rental.withBannedNetworks(bannedNetworks))) + .withScooter(scooter -> + scooter.withRental(rental -> rental.withBannedNetworks(bannedNetworks)) ) .build() ) diff --git a/src/test/java/org/opentripplanner/street/search/state/StateDataTest.java b/src/test/java/org/opentripplanner/street/search/state/StateDataTest.java index 1138fd6cf02..83cec24cd77 100644 --- a/src/test/java/org/opentripplanner/street/search/state/StateDataTest.java +++ b/src/test/java/org/opentripplanner/street/search/state/StateDataTest.java @@ -6,18 +6,20 @@ import java.util.stream.Stream; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import org.opentripplanner.routing.api.request.StreetMode; import org.opentripplanner.street.search.request.StreetSearchRequest; -import org.opentripplanner.test.support.VariableSource; class StateDataTest { - static Stream cases = Arrays - .stream(StreetMode.values()) - .flatMap(mode -> Stream.of(Arguments.of(true, mode), Arguments.of(false, mode))); + static Stream cases() { + return Arrays + .stream(StreetMode.values()) + .flatMap(mode -> Stream.of(Arguments.of(true, mode), Arguments.of(false, mode))); + } @ParameterizedTest(name = "arriveBy={0}, streetMode={1}") - @VariableSource("cases") + @MethodSource("cases") void baseCases(boolean arriveBy, StreetMode streetMode) { var req = StreetSearchRequest.of().withArriveBy(arriveBy).withMode(streetMode).build(); var data = StateData.getBaseCaseStateData(req); diff --git a/src/test/java/org/opentripplanner/street/search/state/StateTest.java b/src/test/java/org/opentripplanner/street/search/state/StateTest.java index 34d3af11b68..9722f1dd785 100644 --- a/src/test/java/org/opentripplanner/street/search/state/StateTest.java +++ b/src/test/java/org/opentripplanner/street/search/state/StateTest.java @@ -31,11 +31,11 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import org.opentripplanner.routing.api.request.StreetMode; import org.opentripplanner.street.model.vertex.Vertex; import org.opentripplanner.street.search.TraverseMode; import org.opentripplanner.street.search.request.StreetSearchRequest; -import org.opentripplanner.test.support.VariableSource; class StateTest { @@ -48,30 +48,32 @@ class StateTest { NULL_RENTAL_STATES.add(null); } - static Stream testCases = Stream.of( - of(SCOOTER_RENTAL, false, Set.of(BEFORE_RENTING), Set.of(WALK)), - //FIXME: it's strange that the arriveBy rental searches all start on a bicycle - of(SCOOTER_RENTAL, true, Set.of(HAVE_RENTED, RENTING_FLOATING), Set.of(WALK, BICYCLE)), - of(BIKE_RENTAL, false, Set.of(BEFORE_RENTING), Set.of(WALK)), - of(BIKE_RENTAL, true, Set.of(HAVE_RENTED, RENTING_FLOATING), Set.of(WALK, BICYCLE)), - of(CAR_RENTAL, false, Set.of(BEFORE_RENTING), Set.of(WALK)), - of(CAR_RENTAL, true, Set.of(HAVE_RENTED, RENTING_FLOATING), Set.of(WALK, BICYCLE)), - of(StreetMode.CAR, false, NULL_RENTAL_STATES, Set.of(CAR)), - of(BIKE, false, NULL_RENTAL_STATES, Set.of(BICYCLE)), - of(StreetMode.WALK, false, NULL_RENTAL_STATES, Set.of(TraverseMode.WALK)), - of(BIKE_TO_PARK, false, NULL_RENTAL_STATES, Set.of(BICYCLE)), - of(CAR_TO_PARK, false, NULL_RENTAL_STATES, Set.of(CAR)), - of(FLEXIBLE, false, NULL_RENTAL_STATES, Set.of(WALK)), - of(CAR_PICKUP, false, NULL_RENTAL_STATES, Set.of(CAR, WALK)), - of(CAR_PICKUP, true, NULL_RENTAL_STATES, Set.of(CAR, WALK)), - of(CAR_HAILING, false, NULL_RENTAL_STATES, Set.of(CAR, WALK)), - of(CAR_HAILING, true, NULL_RENTAL_STATES, Set.of(CAR, WALK)) - ); + static Stream testCases() { + return Stream.of( + of(SCOOTER_RENTAL, false, Set.of(BEFORE_RENTING), Set.of(WALK)), + //FIXME: it's strange that the arriveBy rental searches all start on a bicycle + of(SCOOTER_RENTAL, true, Set.of(HAVE_RENTED, RENTING_FLOATING), Set.of(WALK, BICYCLE)), + of(BIKE_RENTAL, false, Set.of(BEFORE_RENTING), Set.of(WALK)), + of(BIKE_RENTAL, true, Set.of(HAVE_RENTED, RENTING_FLOATING), Set.of(WALK, BICYCLE)), + of(CAR_RENTAL, false, Set.of(BEFORE_RENTING), Set.of(WALK)), + of(CAR_RENTAL, true, Set.of(HAVE_RENTED, RENTING_FLOATING), Set.of(WALK, BICYCLE)), + of(StreetMode.CAR, false, NULL_RENTAL_STATES, Set.of(CAR)), + of(BIKE, false, NULL_RENTAL_STATES, Set.of(BICYCLE)), + of(StreetMode.WALK, false, NULL_RENTAL_STATES, Set.of(TraverseMode.WALK)), + of(BIKE_TO_PARK, false, NULL_RENTAL_STATES, Set.of(BICYCLE)), + of(CAR_TO_PARK, false, NULL_RENTAL_STATES, Set.of(CAR)), + of(FLEXIBLE, false, NULL_RENTAL_STATES, Set.of(WALK)), + of(CAR_PICKUP, false, NULL_RENTAL_STATES, Set.of(CAR, WALK)), + of(CAR_PICKUP, true, NULL_RENTAL_STATES, Set.of(CAR, WALK)), + of(CAR_HAILING, false, NULL_RENTAL_STATES, Set.of(CAR, WALK)), + of(CAR_HAILING, true, NULL_RENTAL_STATES, Set.of(CAR, WALK)) + ); + } @ParameterizedTest( name = "street mode {0}, arriveBy={1} should lead to initial states with rentalStates={2}, currentModes={3}" ) - @VariableSource("testCases") + @MethodSource("testCases") void initialStates( StreetMode streetMode, boolean arriveBy, diff --git a/src/test/java/org/opentripplanner/street/service/DefaultStreetLimitationParametersServiceTest.java b/src/test/java/org/opentripplanner/street/service/DefaultStreetLimitationParametersServiceTest.java new file mode 100644 index 00000000000..dd467d6a567 --- /dev/null +++ b/src/test/java/org/opentripplanner/street/service/DefaultStreetLimitationParametersServiceTest.java @@ -0,0 +1,26 @@ +package org.opentripplanner.street.service; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; +import org.opentripplanner.street.model.StreetConstants; +import org.opentripplanner.street.model.StreetLimitationParameters; + +public class DefaultStreetLimitationParametersServiceTest { + + @Test + public void getMaxCarSpeed() { + var maxSpeed = 25f; + var model = new StreetLimitationParameters(); + model.initMaxCarSpeed(maxSpeed); + var service = new DefaultStreetLimitationParametersService(model); + assertEquals(maxSpeed, service.getMaxCarSpeed()); + } + + @Test + public void getDefaultMaxCarSpeed() { + var model = new StreetLimitationParameters(); + var service = new DefaultStreetLimitationParametersService(model); + assertEquals(StreetConstants.DEFAULT_MAX_CAR_SPEED, service.getMaxCarSpeed()); + } +} diff --git a/src/test/java/org/opentripplanner/test/support/VariableArgumentsProvider.java b/src/test/java/org/opentripplanner/test/support/VariableArgumentsProvider.java deleted file mode 100644 index 1ae9fb2af84..00000000000 --- a/src/test/java/org/opentripplanner/test/support/VariableArgumentsProvider.java +++ /dev/null @@ -1,55 +0,0 @@ -package org.opentripplanner.test.support; - -import java.lang.reflect.Field; -import java.util.stream.Stream; -import org.junit.jupiter.api.extension.ExtensionContext; -import org.junit.jupiter.params.provider.Arguments; -import org.junit.jupiter.params.provider.ArgumentsProvider; -import org.junit.jupiter.params.support.AnnotationConsumer; - -/** - * This annotation processor allows you to provide a variable as the input for a JUnit {@link - * org.junit.jupiter.params.ParameterizedTest}. - * - * Check the usages of {@link VariableSource} to see examples for how to use. - */ -class VariableArgumentsProvider implements ArgumentsProvider, AnnotationConsumer { - - private String variableName; - - @Override - public Stream provideArguments(ExtensionContext context) { - return context - .getTestClass() - .map(this::getField) - .map(this::getValue) - .orElseThrow(() -> new IllegalArgumentException("Failed to load test arguments")); - } - - @Override - public void accept(VariableSource variableSource) { - variableName = variableSource.value(); - } - - private Field getField(Class clazz) { - try { - return clazz.getDeclaredField(variableName); - } catch (Exception e) { - return null; - } - } - - @SuppressWarnings("unchecked") - private Stream getValue(Field field) { - Object value = null; - var accessible = field.isAccessible(); - try { - field.setAccessible(true); - value = field.get(null); - } catch (Exception ignored) {} - - field.setAccessible(accessible); - - return value == null ? null : (Stream) value; - } -} diff --git a/src/test/java/org/opentripplanner/test/support/VariableSource.java b/src/test/java/org/opentripplanner/test/support/VariableSource.java deleted file mode 100644 index 254110cf6d2..00000000000 --- a/src/test/java/org/opentripplanner/test/support/VariableSource.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.opentripplanner.test.support; - -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -import org.junit.jupiter.params.provider.ArgumentsSource; - -@Documented -@Target(ElementType.METHOD) -@Retention(RetentionPolicy.RUNTIME) -@ArgumentsSource(VariableArgumentsProvider.class) -public @interface VariableSource { - /** - * The name of the static variable - */ - String value(); -} diff --git a/src/test/java/org/opentripplanner/transit/model/_data/TransitModelForTest.java b/src/test/java/org/opentripplanner/transit/model/_data/TransitModelForTest.java index f177415d2fc..e01809d2b9f 100644 --- a/src/test/java/org/opentripplanner/transit/model/_data/TransitModelForTest.java +++ b/src/test/java/org/opentripplanner/transit/model/_data/TransitModelForTest.java @@ -221,9 +221,9 @@ public List stopTimesEvery5Minutes(int count, Trip trip, int startTime public StopPattern stopPattern(int numberOfStops) { var builder = StopPattern.create(numberOfStops); for (int i = 0; i < numberOfStops; i++) { - builder.stops[i] = stop("Stop_" + i).build(); - builder.pickups[i] = PickDrop.SCHEDULED; - builder.dropoffs[i] = PickDrop.SCHEDULED; + builder.stops.with(i, stop("Stop_" + i).build()); + builder.pickups.with(i, PickDrop.SCHEDULED); + builder.dropoffs.with(i, PickDrop.SCHEDULED); } return builder.build(); } @@ -231,9 +231,9 @@ public StopPattern stopPattern(int numberOfStops) { public static StopPattern stopPattern(RegularStop... stops) { var builder = StopPattern.create(stops.length); for (int i = 0; i < stops.length; i++) { - builder.stops[i] = stops[i]; - builder.pickups[i] = PickDrop.SCHEDULED; - builder.dropoffs[i] = PickDrop.SCHEDULED; + builder.stops.with(i, stops[i]); + builder.pickups.with(i, PickDrop.SCHEDULED); + builder.dropoffs.with(i, PickDrop.SCHEDULED); } return builder.build(); } diff --git a/src/test/java/org/opentripplanner/transit/speed_test/SpeedTest.java b/src/test/java/org/opentripplanner/transit/speed_test/SpeedTest.java index 7a11c35bace..e045f49c01d 100644 --- a/src/test/java/org/opentripplanner/transit/speed_test/SpeedTest.java +++ b/src/test/java/org/opentripplanner/transit/speed_test/SpeedTest.java @@ -120,6 +120,7 @@ public SpeedTest( config.flexConfig, List.of(), null, + TestServerContext.createStreetLimitationParametersService(), null ); // Creating transitLayerForRaptor should be integrated into the TransitModel, but for now diff --git a/src/test/java/org/opentripplanner/updater/trip/TimetableSnapshotSourceTest.java b/src/test/java/org/opentripplanner/updater/trip/TimetableSnapshotSourceTest.java index d25de6ff021..8c28290de66 100644 --- a/src/test/java/org/opentripplanner/updater/trip/TimetableSnapshotSourceTest.java +++ b/src/test/java/org/opentripplanner/updater/trip/TimetableSnapshotSourceTest.java @@ -33,6 +33,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import org.opentripplanner.ConstantsForTests; import org.opentripplanner.TestOtpModel; import org.opentripplanner.framework.i18n.NonLocalizedString; @@ -40,7 +41,6 @@ import org.opentripplanner.model.PickDrop; import org.opentripplanner.model.Timetable; import org.opentripplanner.model.TimetableSnapshot; -import org.opentripplanner.test.support.VariableSource; import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.network.TripPattern; @@ -1090,16 +1090,18 @@ SameAssert not() { } } - static Stream purgeExpiredDataTestCases = Stream.of( - // purgeExpiredData maxSnapshotFrequency || snapshots PatternSnapshotA PatternSnapshotB - Arguments.of(Boolean.TRUE, -1, NotSame, NotSame), - Arguments.of(Boolean.FALSE, -1, NotSame, Same), - Arguments.of(Boolean.TRUE, 1000, NotSame, NotSame), - Arguments.of(Boolean.FALSE, 1000, Same, Same) - ); + static Stream purgeExpiredDataTestCases() { + return Stream.of( + // purgeExpiredData maxSnapshotFrequency || snapshots PatternSnapshotA PatternSnapshotB + Arguments.of(Boolean.TRUE, -1, NotSame, NotSame), + Arguments.of(Boolean.FALSE, -1, NotSame, Same), + Arguments.of(Boolean.TRUE, 1000, NotSame, NotSame), + Arguments.of(Boolean.FALSE, 1000, Same, Same) + ); + } @ParameterizedTest(name = "purgeExpired: {0}, maxFrequency: {1} || {2} {3}") - @VariableSource("purgeExpiredDataTestCases") + @MethodSource("purgeExpiredDataTestCases") public void testPurgeExpiredData( boolean purgeExpiredData, int maxSnapshotFrequency, diff --git a/src/test/java/org/opentripplanner/updater/vehicle_position/RealtimeVehicleMatcherTest.java b/src/test/java/org/opentripplanner/updater/vehicle_position/RealtimeVehicleMatcherTest.java index 29d03844260..ea5d86cd0e1 100644 --- a/src/test/java/org/opentripplanner/updater/vehicle_position/RealtimeVehicleMatcherTest.java +++ b/src/test/java/org/opentripplanner/updater/vehicle_position/RealtimeVehicleMatcherTest.java @@ -23,12 +23,12 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import org.opentripplanner._support.time.ZoneIds; import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.model.StopTime; import org.opentripplanner.service.realtimevehicles.internal.DefaultRealtimeVehicleService; import org.opentripplanner.standalone.config.routerconfig.updaters.VehiclePositionsUpdaterConfig; -import org.opentripplanner.test.support.VariableSource; import org.opentripplanner.transit.model._data.TransitModelForTest; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.model.framework.FeedScopedId; @@ -326,14 +326,16 @@ public void clearOldTrips() { assertEquals(0, service.getRealtimeVehicles(pattern2).size()); } - static Stream inferenceTestCases = Stream.of( - Arguments.of("2022-04-05T15:26:04+02:00", "2022-04-05"), - Arguments.of("2022-04-06T00:26:04+02:00", "2022-04-05"), - Arguments.of("2022-04-06T10:26:04+02:00", "2022-04-06") - ); + static Stream inferenceTestCases() { + return Stream.of( + Arguments.of("2022-04-05T15:26:04+02:00", "2022-04-05"), + Arguments.of("2022-04-06T00:26:04+02:00", "2022-04-05"), + Arguments.of("2022-04-06T10:26:04+02:00", "2022-04-06") + ); + } @ParameterizedTest(name = "{0} should resolve to {1}") - @VariableSource("inferenceTestCases") + @MethodSource("inferenceTestCases") void inferServiceDayOfTripAt6(String time, String expectedDate) { var trip = TransitModelForTest.trip(tripId).build(); diff --git a/src/test/resources/org/opentripplanner/apis/vectortiles/style.json b/src/test/resources/org/opentripplanner/apis/vectortiles/style.json index e62c3968924..7e611171409 100644 --- a/src/test/resources/org/opentripplanner/apis/vectortiles/style.json +++ b/src/test/resources/org/opentripplanner/apis/vectortiles/style.json @@ -154,6 +154,19 @@ "fill-outline-color" : "#140d0e" } }, + { + "id" : "group-stop", + "type" : "fill", + "source" : "vectorSource", + "source-layer" : "stops", + "minzoom" : 6, + "maxzoom" : 23, + "paint" : { + "fill-color" : "#22DD9E", + "fill-opacity" : 0.5, + "fill-outline-color" : "#140d0e" + } + }, { "id" : "regular-stop", "type" : "circle", diff --git a/src/test/resources/standalone/config/router-config.json b/src/test/resources/standalone/config/router-config.json index 9293cfad8f4..3a07cddfeb8 100644 --- a/src/test/resources/standalone/config/router-config.json +++ b/src/test/resources/standalone/config/router-config.json @@ -43,7 +43,6 @@ } }, "car": { - "speed": 40, "reluctance": 10, "decelerationSpeed": 2.9, "accelerationSpeed": 2.9, @@ -57,6 +56,20 @@ "cost": 600 } }, + "scooter": { + "speed": 5, + "reluctance": 5.0, + "rental": { + "pickupCost": 120, + "dropOffTime": "30s", + "dropOffCost": 30 + }, + "triangle": { + "safety": 0.4, + "flatness": 0.3, + "time": 0.3 + } + }, "walk": { "speed": 1.3, "reluctance": 4.0, @@ -199,6 +212,14 @@ "minZoom": 14, "cacheMaxSeconds": 600 }, + { + "name": "areaStops", + "type": "AreaStop", + "mapper": "OTPRR", + "maxZoom": 20, + "minZoom": 14, + "cacheMaxSeconds": 600 + }, { "name": "stations", "type": "Station", @@ -378,6 +399,21 @@ "toDateTime": "P1D", "timeout": 300000 } + }, + // SIRI ET updater for Azure Service Bus + { + "type": "siri-azure-et-updater", + "topic": "some_topic", + "authenticationType": "SharedAccessKey", + "fullyQualifiedNamespace": "fully_qualified_namespace", + "servicebus-url": "service_bus_url", + "feedId": "feed_id", + "customMidnight": 4, + "history": { + "url": "endpoint_url", + "fromDateTime": "-P1D", + "timeout": 300000 + } } ], "rideHailingServices": [