From 54b0433d212496f005d164d19244cceff276e616 Mon Sep 17 00:00:00 2001 From: kjerandp Date: Tue, 3 Jun 2025 10:42:57 +0200 Subject: [PATCH 1/6] feat: added initial support for rendering text/glyphs in fragment shader --- documents/generators.md | 3 +- package-lock.json | 71 +- package.json | 3 +- public/data/picks.json | 2 +- public/data/strat-columns.json | 2 +- public/glyphs/OpenSans-Regular.json | 1562 +++++++++++++++++ public/glyphs/OpenSans-Regular.png | Bin 0 -> 133531 bytes public/glyphs/OpenSans-Regular.ttf | Bin 0 -> 130832 bytes public/glyphs/chars.txt | 1 + scripts/generate-data.js | 2 +- scripts/generate-story-args.js | 17 + scripts/transformations/transformPicks.js | 39 +- .../transformations/transformStratColumns.js | 1 + src/components/Distance/Distance.stories.tsx | 3 +- src/components/Glyphs/GlyphGenTest.tsx | 3 + src/components/Html/DepthSelector.tsx | 6 +- .../Html/WellMap/WellMap.stories.tsx | 14 +- .../Html/WellMap/addons/WellMapFormations.tsx | 80 +- src/components/SDFTest/SDFTest.stories.tsx | 95 + src/components/SDFTest/SDFTest.tsx | 121 ++ src/components/SDFTest/shaders/fragment.glsl | 166 ++ src/components/SDFTest/shaders/vertex.glsl | 22 + src/components/Surfaces/Surface.tsx | 6 +- .../Screen/shaders/fragment.glsl | 2 +- .../Wellbores/Perimeter/shaders/fragment.glsl | 2 +- src/components/Wellbores/Picks/Picks.tsx | 13 +- .../TubeTrajectory/TubeTrajectory.tsx | 2 +- .../WellboreFormationColumn.stories.tsx | 155 ++ .../WellboreFormationColumn.tsx | 145 ++ .../WellboreFormationColumn/index.ts | 2 + .../shaders/fragment.glsl | 78 + .../shaders/vertex.glsl | 44 + .../wellbore-formation-column-defs.ts | 5 + .../WellboreRibbon/WellboreRibbon.tsx | 107 ++ .../WellboreRibbon/WellboreRibbonContext.tsx | 22 + .../WellboreRibbon/shaders/formations.glsl | 122 ++ .../shaders/measured-depth.glsl | 81 + .../WellboreRibbon/shaders/vertex.glsl | 40 + .../stripes/FormationsStripe.tsx | 152 ++ .../stripes/MeasuredDepthStripe.tsx | 79 + .../Wellbores/Wells/Wells.stories.tsx | 16 +- src/contexts/GlyphsContext.ts | 23 + src/contexts/GlyphsContextProvider.tsx | 86 + src/generators/index.ts | 3 +- src/generators/picks-generator.ts | 61 +- .../wellbore-formation-column-generator.ts | 110 ++ src/main.ts | 5 +- src/sdk/data/helpers/picks-helpers.ts | 371 ++++ src/sdk/data/types/Formation.ts | 10 + src/sdk/data/types/Pick.ts | 11 +- src/sdk/data/types/StratColumn.ts | 3 +- src/sdk/data/types/WellboreHeader.ts | 2 +- src/sdk/data/types/index.ts | 2 + src/sdk/geometries/curve/curve-3d.ts | 20 +- src/sdk/geometries/curve/tube-geometry.ts | 15 +- src/sdk/geometries/packing.ts | 2 +- src/sdk/index.ts | 1 + src/sdk/managers/CameraManager.ts | 12 + src/sdk/materials/ribbon-material.ts | 103 ++ src/sdk/materials/shaderLib/glyphs.glsl | 79 + src/sdk/materials/shaderLib/remap.glsl | 5 + .../materials/shaderLib/render-number.glsl | 74 + src/sdk/materials/shaderLib/render-text.glsl | 67 + src/sdk/materials/shaderLib/rotation.glsl | 19 + .../materials/shaderLib/sdf-functions.glsl | 18 + .../materials/shaders/ribbon/fragment.glsl | 79 + src/sdk/materials/shaders/ribbon/vertex.glsl | 90 + src/sdk/materials/tube-material.ts | 4 +- src/sdk/utils/glsl.ts | 3 + src/sdk/utils/glyphs.ts | 169 ++ src/sdk/utils/strings.ts | 4 + src/sdk/utils/trajectory.ts | 26 +- .../decorators/canvas-3d-decorator.tsx | 19 +- src/storybook/decorators/perf.css | 4 + .../decorators/performance-decorator.tsx | 15 +- .../workers/remote-generator-registry.ts | 4 + src/storybook/dependencies/api.ts | 2 +- .../examples/Wellbore.example.stories.tsx | 2 +- .../examples/Wells.example.stories.tsx | 18 +- src/storybook/story-args.json | 2 +- tests/mocks/mock-data/picks-mocks.ts | 254 +++ tests/mocks/mock-data/stratcolumn-mocks.ts | 145 ++ tests/mocks/mock-data/wellbore-mocks.ts | 51 + tests/mocks/test-store.ts | 31 + tests/picks-helper.test.ts | 93 + tsconfig.json | 2 +- tsconfig.node.json | 2 +- vite.config.ts | 4 +- 88 files changed, 5195 insertions(+), 216 deletions(-) create mode 100644 public/glyphs/OpenSans-Regular.json create mode 100644 public/glyphs/OpenSans-Regular.png create mode 100644 public/glyphs/OpenSans-Regular.ttf create mode 100644 public/glyphs/chars.txt create mode 100644 src/components/Glyphs/GlyphGenTest.tsx create mode 100644 src/components/SDFTest/SDFTest.stories.tsx create mode 100644 src/components/SDFTest/SDFTest.tsx create mode 100644 src/components/SDFTest/shaders/fragment.glsl create mode 100644 src/components/SDFTest/shaders/vertex.glsl create mode 100644 src/components/Wellbores/WellboreFormationColumn/WellboreFormationColumn.stories.tsx create mode 100644 src/components/Wellbores/WellboreFormationColumn/WellboreFormationColumn.tsx create mode 100644 src/components/Wellbores/WellboreFormationColumn/index.ts create mode 100644 src/components/Wellbores/WellboreFormationColumn/shaders/fragment.glsl create mode 100644 src/components/Wellbores/WellboreFormationColumn/shaders/vertex.glsl create mode 100644 src/components/Wellbores/WellboreFormationColumn/wellbore-formation-column-defs.ts create mode 100644 src/components/Wellbores/WellboreRibbon/WellboreRibbon.tsx create mode 100644 src/components/Wellbores/WellboreRibbon/WellboreRibbonContext.tsx create mode 100644 src/components/Wellbores/WellboreRibbon/shaders/formations.glsl create mode 100644 src/components/Wellbores/WellboreRibbon/shaders/measured-depth.glsl create mode 100644 src/components/Wellbores/WellboreRibbon/shaders/vertex.glsl create mode 100644 src/components/Wellbores/WellboreRibbon/stripes/FormationsStripe.tsx create mode 100644 src/components/Wellbores/WellboreRibbon/stripes/MeasuredDepthStripe.tsx create mode 100644 src/contexts/GlyphsContext.ts create mode 100644 src/contexts/GlyphsContextProvider.tsx create mode 100644 src/generators/wellbore-formation-column-generator.ts create mode 100644 src/sdk/data/helpers/picks-helpers.ts create mode 100644 src/sdk/data/types/Formation.ts create mode 100644 src/sdk/materials/ribbon-material.ts create mode 100644 src/sdk/materials/shaderLib/glyphs.glsl create mode 100644 src/sdk/materials/shaderLib/render-number.glsl create mode 100644 src/sdk/materials/shaderLib/render-text.glsl create mode 100644 src/sdk/materials/shaderLib/rotation.glsl create mode 100644 src/sdk/materials/shaderLib/sdf-functions.glsl create mode 100644 src/sdk/materials/shaders/ribbon/fragment.glsl create mode 100644 src/sdk/materials/shaders/ribbon/vertex.glsl create mode 100644 src/sdk/utils/glsl.ts create mode 100644 src/sdk/utils/glyphs.ts create mode 100644 src/storybook/decorators/perf.css create mode 100644 tests/mocks/mock-data/picks-mocks.ts create mode 100644 tests/mocks/mock-data/stratcolumn-mocks.ts create mode 100644 tests/mocks/mock-data/wellbore-mocks.ts create mode 100644 tests/mocks/test-store.ts create mode 100644 tests/picks-helper.test.ts diff --git a/documents/generators.md b/documents/generators.md index 6ee6b32..d5559b6 100644 --- a/documents/generators.md +++ b/documents/generators.md @@ -17,10 +17,11 @@ The generator functions can be imported from `videx-3d/generators` (default impl | **Casings** | casings | generateCasings | - position-logs
- casings | | **CompletionAnnotations** | completionToolAnnotations | generateCompletionToolAnnotations | - position-logs
- completion-tools | | **CompletionTools** | completionTools | generateCompletionTools | - position-logs
- completion-tools | +| **WellboreFormationColumn** | wellboreFormationColumn | generateWellboreFormationColumnGeometries | - position-logs
- picks
- strat column | | **DepthMarkers** | depthMarkers | generateDepthMarkers | - position-logs | | **Perforations** | perforationSymbols | generatePerforations | - position-logs
- perforations | | **Perimeter** | perimeterGeometry | generatePerimeterGeometry | - position-logs | -| **Picks** | pickSymbols | generatePicks | - position-logs
- picks | +| **Picks** | pickSymbols | generatePicks | - position-logs
- picks
- strat column | | **Shoes** | shoeSymbols | generateShoes | - position-logs
- casings | | **Surface** | surfaceGeometry | generateSurfaceGeometry | - surface-meta
- surface-values | | **Surface** | surfaceTextures | generateSurfaceTextureData | - surface-meta
- surface-values | diff --git a/package-lock.json b/package-lock.json index 50390dd..a11b0ea 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "videx-3d", - "version": "0.1.2-beta", + "version": "0.2.0-beta", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "videx-3d", - "version": "0.1.2-beta", + "version": "0.2.0-beta", "license": "MIT", "dependencies": { "curve-interpolator": "^3.3.1", @@ -19,6 +19,7 @@ "d3-scale": "^4.0.2", "d3-selection": "^3.0.0", "lodash.filter": "^4.6.0", + "meshline": "^3.3.1", "nanoid": "^5.1.2", "p-limit": "^6.2.0", "p-queue": "^8.1.0", @@ -294,27 +295,27 @@ } }, "node_modules/@babel/helpers": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.9.tgz", - "integrity": "sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz", + "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.26.9", - "@babel/types": "^7.26.9" + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.9.tgz", - "integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", + "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.26.9" + "@babel/types": "^7.27.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -356,9 +357,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.9.tgz", - "integrity": "sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz", + "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==", "dev": true, "license": "MIT", "dependencies": { @@ -369,15 +370,15 @@ } }, "node_modules/@babel/template": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz", - "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", + "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.26.2", - "@babel/parser": "^7.26.9", - "@babel/types": "^7.26.9" + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0" }, "engines": { "node": ">=6.9.0" @@ -413,9 +414,9 @@ } }, "node_modules/@babel/types": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.9.tgz", - "integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", + "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", "dev": true, "license": "MIT", "dependencies": { @@ -5596,9 +5597,9 @@ } }, "node_modules/fdir": { - "version": "6.4.3", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz", - "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==", + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz", + "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==", "dev": true, "license": "MIT", "peerDependencies": { @@ -6724,7 +6725,6 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/meshline/-/meshline-3.3.1.tgz", "integrity": "sha512-/TQj+JdZkeSUOl5Mk2J7eLcYTLiQm2IDzmlSvYm7ov15anEcDJ92GHqqazxTSreeNgfnYu24kiEvvv0WlbCdFQ==", - "dev": true, "license": "MIT", "peerDependencies": { "three": ">=0.137" @@ -8300,13 +8300,13 @@ "license": "MIT" }, "node_modules/tinyglobby": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz", - "integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==", + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz", + "integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==", "dev": true, "license": "MIT", "dependencies": { - "fdir": "^6.4.3", + "fdir": "^6.4.4", "picomatch": "^4.0.2" }, "engines": { @@ -8789,15 +8789,18 @@ } }, "node_modules/vite": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.0.tgz", - "integrity": "sha512-7dPxoo+WsT/64rDcwoOjk76XHj+TqNTIvHKcuMQ1k4/SeHDaQt5GFAeLYzrimZrMpn/O6DtdI03WUjdxuPM0oQ==", + "version": "6.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", + "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", "dev": true, "license": "MIT", "dependencies": { "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", "postcss": "^8.5.3", - "rollup": "^4.30.1" + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" }, "bin": { "vite": "bin/vite.js" diff --git a/package.json b/package.json index 5fa2651..f24fde7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "videx-3d", - "version": "0.1.3-beta", + "version": "0.2.0-beta", "private": false, "type": "module", "license": "MIT", @@ -54,6 +54,7 @@ "d3-scale": "^4.0.2", "d3-selection": "^3.0.0", "lodash.filter": "^4.6.0", + "meshline": "^3.3.1", "nanoid": "^5.1.2", "p-limit": "^6.2.0", "p-queue": "^8.1.0", diff --git a/public/data/picks.json b/public/data/picks.json index bee9b44..0a14358 100644 --- a/public/data/picks.json +++ b/public/data/picks.json @@ -1 +1 @@ -{"ad215042-021a-2b7e-e053-c818a488c79a":[{"name":"NORDLAND GP. Top","color":"#ffe500","level":1,"mdMsl":81,"tvdMsl":null},{"name":"Utsira Fm. Top","color":"#fff200","level":2,"mdMsl":822.8,"tvdMsl":814.71},{"name":"Utsira Fm. Base","color":"#fff200","level":2,"mdMsl":1082.5,"tvdMsl":1032.12},{"name":"HORDALAND GP. Top","color":"#009024","level":1,"mdMsl":1082.5,"tvdMsl":1032.12},{"name":"NORDLAND GP. Base","color":"#ffe500","level":1,"mdMsl":1082.5,"tvdMsl":1032.12},{"name":"Skade Fm. Top","color":"#00a636","level":2,"mdMsl":1288,"tvdMsl":1154.78},{"name":"Skade Fm. Base","color":"#00a636","level":2,"mdMsl":1425,"tvdMsl":1228.7},{"name":"Grid Fm. Top","color":"#00bc48","level":2,"mdMsl":2983,"tvdMsl":2038.71},{"name":"Grid Fm. Base","color":"#00bc48","level":2,"mdMsl":3215,"tvdMsl":2167.81},{"name":"ROGALAND GP. Top","color":"#b22222","level":1,"mdMsl":3284.91,"tvdMsl":2209.99},{"name":"Balder Fm. Top","color":"#bc4830","level":2,"mdMsl":3284.91,"tvdMsl":2209.99},{"name":"HORDALAND GP. Base","color":"#009024","level":1,"mdMsl":3284.91,"tvdMsl":2209.99},{"name":"Balder Fm. Base","color":"#bc4830","level":2,"mdMsl":3378.07,"tvdMsl":2266.46},{"name":"Sele Fm. Top","color":"#bd845c","level":2,"mdMsl":3378.07,"tvdMsl":2266.46},{"name":"Sele Fm. Base","color":"#bd845c","level":2,"mdMsl":3456.05,"tvdMsl":2314.86},{"name":"Lista Fm. Top","color":"#c49f74","level":2,"mdMsl":3456.05,"tvdMsl":2314.86},{"name":"Ty Fm. Top","color":"#d2b48c","level":2,"mdMsl":3589,"tvdMsl":2398.11},{"name":"Lista Fm. Base","color":"#c49f74","level":2,"mdMsl":3597.5,"tvdMsl":2403.24},{"name":"Ekofisk Fm. Top","color":"#0000c3","level":2,"mdMsl":3802,"tvdMsl":2525.68},{"name":"SHETLAND GP. Top","color":"#000080","level":1,"mdMsl":3802,"tvdMsl":2525.68},{"name":"ROGALAND GP. Base","color":"#b22222","level":1,"mdMsl":3802,"tvdMsl":2525.68},{"name":"Ty Fm. Base","color":"#d2b48c","level":2,"mdMsl":3802,"tvdMsl":2525.68},{"name":"Ekofisk Fm. Base","color":"#0000c3","level":2,"mdMsl":3825,"tvdMsl":2540.53},{"name":"Tor Fm. Top","color":"#006dff","level":2,"mdMsl":3825,"tvdMsl":2540.53},{"name":"Tor Fm. Base","color":"#006dff","level":2,"mdMsl":4027.14,"tvdMsl":2671.41},{"name":"Hod Fm. Top","color":"#00b6ff","level":2,"mdMsl":4027.14,"tvdMsl":2671.41},{"name":"Blodoeks Fm. Top","color":"#00daff","level":2,"mdMsl":4176.18,"tvdMsl":2775.1},{"name":"Hod Fm. Base","color":"#00b6ff","level":2,"mdMsl":4176.18,"tvdMsl":2775.1},{"name":"Blodoeks Fm. Base","color":"#00daff","level":2,"mdMsl":4207.44,"tvdMsl":2798.12},{"name":"Hidra Fm. Top","color":"#00ea4c","level":2,"mdMsl":4207.44,"tvdMsl":2798.12},{"name":"Hidra Fm. Base","color":"#00ea4c","level":2,"mdMsl":4210.53,"tvdMsl":2800.42},{"name":"SHETLAND GP. Base","color":"#000080","level":1,"mdMsl":4210.53,"tvdMsl":2800.42},{"name":"Roedby Fm. Top","color":"#c14dcd","level":2,"mdMsl":4210.53,"tvdMsl":2800.42},{"name":"CROMER KNOLL GP. Top","color":"#b233cf","level":1,"mdMsl":4210.53,"tvdMsl":2800.42},{"name":"Aasgard Fm. Top","color":"#e081c9","level":2,"mdMsl":4239.55,"tvdMsl":2822.15},{"name":"Roedby Fm. Base","color":"#c14dcd","level":2,"mdMsl":4239.55,"tvdMsl":2822.15},{"name":"Aasgard Fm. Base","color":"#e081c9","level":2,"mdMsl":4279,"tvdMsl":2852.14},{"name":"CROMER KNOLL GP. Base","color":"#b233cf","level":1,"mdMsl":4279,"tvdMsl":2852.14},{"name":"VIKING GP. Top","color":"#ff0000","level":1,"mdMsl":4279,"tvdMsl":2852.14},{"name":"Draupne Fm. Top","color":"#ff4f20","level":2,"mdMsl":4279,"tvdMsl":2852.14},{"name":"Draupne Fm. Base","color":"#ff4f20","level":2,"mdMsl":4284.5,"tvdMsl":2856.35},{"name":"Heather Fm. Top","color":"#ff5f30","level":2,"mdMsl":4284.5,"tvdMsl":2856.35},{"name":"Heather Fm. Sand VOLVE Top","color":"#ffe500","level":3,"mdMsl":4289.8,"tvdMsl":2860.4},{"name":"Hugin Fm. Top","color":"#ffcb00","level":2,"mdMsl":4291.25,"tvdMsl":2861.52},{"name":"VIKING GP. Base","color":"#ff0000","level":1,"mdMsl":4291.25,"tvdMsl":2861.52},{"name":"Heather Fm. Base","color":"#ff5f30","level":2,"mdMsl":4291.25,"tvdMsl":2861.52},{"name":"VESTLAND GP. Top","color":"#d167cb","level":1,"mdMsl":4291.25,"tvdMsl":2861.52},{"name":"Heather Fm. Sand VOLVE Base","color":"#ffe500","level":3,"mdMsl":4291.25,"tvdMsl":2861.52},{"name":"VESTLAND GP. Base","color":"#d167cb","level":1,"mdMsl":4315,"tvdMsl":2879.76},{"name":"HEGRE GP. Top","color":"#006400","level":1,"mdMsl":4315,"tvdMsl":2879.76},{"name":"Hugin Fm. Base","color":"#ffcb00","level":2,"mdMsl":4315,"tvdMsl":2879.76},{"name":"Skagerrak Fm. Top","color":"#007a12","level":2,"mdMsl":4315.01,"tvdMsl":2879.77},{"name":"Skagerrak Fm. Base","color":"#007a12","level":2,"mdMsl":4554,"tvdMsl":3061.5},{"name":"Smith Bank Fm. Top","color":"#00ea4c","level":2,"mdMsl":4554,"tvdMsl":3061.5},{"name":"HEGRE GP. Base","color":"#006400","level":1,"mdMsl":4616,"tvdMsl":3108.08},{"name":"Smith Bank Fm. Base","color":"#00ea4c","level":2,"mdMsl":4616,"tvdMsl":3108.08}],"ad215042-f9cd-2b7e-e053-c818a488c79a":[{"name":"NORDLAND GP. Top","color":"#ffe500","level":1,"mdMsl":81,"tvdMsl":null},{"name":"Utsira Fm. Top","color":"#fff200","level":2,"mdMsl":822.8,"tvdMsl":814.71},{"name":"NORDLAND GP. Base","color":"#ffe500","level":1,"mdMsl":1082.5,"tvdMsl":1032.12},{"name":"HORDALAND GP. Top","color":"#009024","level":1,"mdMsl":1082.5,"tvdMsl":1032.12},{"name":"Utsira Fm. Base","color":"#fff200","level":2,"mdMsl":1082.5,"tvdMsl":1032.12},{"name":"Skade Fm. Top","color":"#00a636","level":2,"mdMsl":1288,"tvdMsl":1154.78},{"name":"Skade Fm. Base","color":"#00a636","level":2,"mdMsl":1425,"tvdMsl":1228.7},{"name":"Grid Fm. Top","color":"#00bc48","level":2,"mdMsl":2749.97,"tvdMsl":2066.96},{"name":"Grid Fm. Base","color":"#00bc48","level":2,"mdMsl":2810.63,"tvdMsl":2120.59},{"name":"ROGALAND GP. Top","color":"#b22222","level":1,"mdMsl":2946.5,"tvdMsl":2234.28},{"name":"HORDALAND GP. Base","color":"#009024","level":1,"mdMsl":2946.5,"tvdMsl":2234.28},{"name":"Balder Fm. Top","color":"#bc4830","level":2,"mdMsl":2946.5,"tvdMsl":2234.28},{"name":"Balder Fm. Base","color":"#bc4830","level":2,"mdMsl":3012.66,"tvdMsl":2288.99},{"name":"Sele Fm. Top","color":"#bd845c","level":2,"mdMsl":3012.66,"tvdMsl":2288.99},{"name":"Sele Fm. Base","color":"#bd845c","level":2,"mdMsl":3092.74,"tvdMsl":2356.42},{"name":"Lista Fm. Top","color":"#c49f74","level":2,"mdMsl":3092.74,"tvdMsl":2356.42},{"name":"Lista Fm. Base","color":"#c49f74","level":2,"mdMsl":3187.83,"tvdMsl":2437.56},{"name":"Ty Fm. Top","color":"#d2b48c","level":2,"mdMsl":3187.83,"tvdMsl":2437.56},{"name":"Ekofisk Fm. Top","color":"#0000c3","level":2,"mdMsl":3350.81,"tvdMsl":2577.42},{"name":"SHETLAND GP. Top","color":"#000080","level":1,"mdMsl":3350.81,"tvdMsl":2577.42},{"name":"Ty Fm. Base","color":"#d2b48c","level":2,"mdMsl":3350.81,"tvdMsl":2577.42},{"name":"ROGALAND GP. Base","color":"#b22222","level":1,"mdMsl":3350.81,"tvdMsl":2577.42},{"name":"Tor Fm. Top","color":"#006dff","level":2,"mdMsl":3378,"tvdMsl":2600.96},{"name":"Ekofisk Fm. Base","color":"#0000c3","level":2,"mdMsl":3378,"tvdMsl":2600.96},{"name":"Hod Fm. Top","color":"#00b6ff","level":2,"mdMsl":3532,"tvdMsl":2728.02},{"name":"Tor Fm. Base","color":"#006dff","level":2,"mdMsl":3532,"tvdMsl":2728.02},{"name":"Blodoeks Fm. Top","color":"#00daff","level":2,"mdMsl":3641.28,"tvdMsl":2819.53},{"name":"Hod Fm. Base","color":"#00b6ff","level":2,"mdMsl":3641.28,"tvdMsl":2819.53},{"name":"Blodoeks Fm. Base","color":"#00daff","level":2,"mdMsl":3710,"tvdMsl":2879.29},{"name":"Hidra Fm. Top","color":"#00ea4c","level":2,"mdMsl":3710,"tvdMsl":2879.29},{"name":"Roedby Fm. Top","color":"#c14dcd","level":2,"mdMsl":3715,"tvdMsl":2883.71},{"name":"Hidra Fm. Base","color":"#00ea4c","level":2,"mdMsl":3715,"tvdMsl":2883.71},{"name":"SHETLAND GP. Base","color":"#000080","level":1,"mdMsl":3715,"tvdMsl":2883.71},{"name":"CROMER KNOLL GP. Top","color":"#b233cf","level":1,"mdMsl":3715,"tvdMsl":2883.71},{"name":"Roedby Fm. Base","color":"#c14dcd","level":2,"mdMsl":3734.5,"tvdMsl":2900.98},{"name":"Aasgard Fm. Top","color":"#e081c9","level":2,"mdMsl":3734.5,"tvdMsl":2900.98},{"name":"Aasgard Fm. Base","color":"#e081c9","level":2,"mdMsl":3743,"tvdMsl":2908.52},{"name":"Draupne Fm. Top","color":"#ff4f20","level":2,"mdMsl":3743,"tvdMsl":2908.52},{"name":"CROMER KNOLL GP. Base","color":"#b233cf","level":1,"mdMsl":3744.06,"tvdMsl":2909.46},{"name":"VIKING GP. Top","color":"#ff0000","level":1,"mdMsl":3744.06,"tvdMsl":2909.46},{"name":"Draupne Fm. Base","color":"#ff4f20","level":2,"mdMsl":3921,"tvdMsl":3067.72},{"name":"Heather Fm. Top","color":"#ff5f30","level":2,"mdMsl":3921,"tvdMsl":3067.72},{"name":"Heather Fm. Sand VOLVE Top","color":"#ffe500","level":3,"mdMsl":3969,"tvdMsl":3111},{"name":"VESTLAND GP. Top","color":"#d167cb","level":1,"mdMsl":4010.8,"tvdMsl":3148.83},{"name":"Heather Fm. Base","color":"#ff5f30","level":2,"mdMsl":4010.8,"tvdMsl":3148.83},{"name":"Hugin Fm. Top","color":"#ffcb00","level":2,"mdMsl":4010.8,"tvdMsl":3148.83},{"name":"Heather Fm. Sand VOLVE Base","color":"#ffe500","level":3,"mdMsl":4010.8,"tvdMsl":3148.83},{"name":"VIKING GP. Base","color":"#ff0000","level":1,"mdMsl":4010.8,"tvdMsl":3148.83},{"name":"Sleipner Fm. Top","color":"#ffff00","level":2,"mdMsl":4153.59,"tvdMsl":3274.59},{"name":"Hugin Fm. Base","color":"#ffcb00","level":2,"mdMsl":4153.59,"tvdMsl":3274.59},{"name":"Smith Bank Fm. Top","color":"#00ea4c","level":2,"mdMsl":4189,"tvdMsl":3304.88},{"name":"Sleipner Fm. Base","color":"#ffff00","level":2,"mdMsl":4189,"tvdMsl":3304.88},{"name":"VESTLAND GP. Base","color":"#d167cb","level":1,"mdMsl":4189,"tvdMsl":3304.88},{"name":"HEGRE GP. Top","color":"#006400","level":1,"mdMsl":4189,"tvdMsl":3304.88},{"name":"Smith Bank Fm. Base","color":"#00ea4c","level":2,"mdMsl":4225,"tvdMsl":3335.59},{"name":"HEGRE GP. Base","color":"#006400","level":1,"mdMsl":4225,"tvdMsl":3335.59}],"ad215042-0217-2b7e-e053-c818a488c79a":[{"name":"NORDLAND GP. Top","color":"#ffe500","level":1,"mdMsl":81,"tvdMsl":null},{"name":"Utsira Fm. Top","color":"#fff200","level":2,"mdMsl":822.8,"tvdMsl":814.71},{"name":"Utsira Fm. Base","color":"#fff200","level":2,"mdMsl":1082.5,"tvdMsl":1032.12},{"name":"HORDALAND GP. Top","color":"#009024","level":1,"mdMsl":1082.5,"tvdMsl":1032.12},{"name":"NORDLAND GP. Base","color":"#ffe500","level":1,"mdMsl":1082.5,"tvdMsl":1032.12},{"name":"Skade Fm. Top","color":"#00a636","level":2,"mdMsl":1288,"tvdMsl":1154.78},{"name":"Skade Fm. Base","color":"#00a636","level":2,"mdMsl":1425,"tvdMsl":1228.7},{"name":"Grid Fm. Top","color":"#00bc48","level":2,"mdMsl":2751.39,"tvdMsl":2058.49},{"name":"Grid Fm. Base","color":"#00bc48","level":2,"mdMsl":2776.55,"tvdMsl":2081.22},{"name":"HORDALAND GP. Base","color":"#009024","level":1,"mdMsl":2940.2,"tvdMsl":2232.21},{"name":"ROGALAND GP. Top","color":"#b22222","level":1,"mdMsl":2940.2,"tvdMsl":2232.21},{"name":"Balder Fm. Top","color":"#bc4830","level":2,"mdMsl":2940.2,"tvdMsl":2232.21},{"name":"Balder Fm. Base","color":"#bc4830","level":2,"mdMsl":2997.29,"tvdMsl":2285.09},{"name":"Sele Fm. Top","color":"#bd845c","level":2,"mdMsl":2997.29,"tvdMsl":2285.09},{"name":"Lista Fm. Top","color":"#c49f74","level":2,"mdMsl":3079.53,"tvdMsl":2360.19},{"name":"Sele Fm. Base","color":"#bd845c","level":2,"mdMsl":3079.53,"tvdMsl":2360.19},{"name":"Lista Fm. Base","color":"#c49f74","level":2,"mdMsl":3155.89,"tvdMsl":2430.05},{"name":"Ty Fm. Top","color":"#d2b48c","level":2,"mdMsl":3155.89,"tvdMsl":2430.05},{"name":"Ekofisk Fm. Top","color":"#0000c3","level":2,"mdMsl":3288.42,"tvdMsl":2550.81},{"name":"ROGALAND GP. Base","color":"#b22222","level":1,"mdMsl":3288.42,"tvdMsl":2550.81},{"name":"SHETLAND GP. Top","color":"#000080","level":1,"mdMsl":3288.42,"tvdMsl":2550.81},{"name":"Ty Fm. Base","color":"#d2b48c","level":2,"mdMsl":3288.42,"tvdMsl":2550.81},{"name":"Tor Fm. Top","color":"#006dff","level":2,"mdMsl":3302.5,"tvdMsl":2563.6},{"name":"Ekofisk Fm. Base","color":"#0000c3","level":2,"mdMsl":3302.5,"tvdMsl":2563.6},{"name":"Hod Fm. Top","color":"#00b6ff","level":2,"mdMsl":3451.16,"tvdMsl":2698.55},{"name":"Tor Fm. Base","color":"#006dff","level":2,"mdMsl":3451.16,"tvdMsl":2698.55},{"name":"Hod Fm. Base","color":"#00b6ff","level":2,"mdMsl":3558.37,"tvdMsl":2796.67},{"name":"Blodoeks Fm. Top","color":"#00daff","level":2,"mdMsl":3558.37,"tvdMsl":2796.67},{"name":"Blodoeks Fm. Base","color":"#00daff","level":2,"mdMsl":3585.41,"tvdMsl":2821.72},{"name":"Hidra Fm. Top","color":"#00ea4c","level":2,"mdMsl":3585.41,"tvdMsl":2821.72},{"name":"Hidra Fm. Base","color":"#00ea4c","level":2,"mdMsl":3597.94,"tvdMsl":2833.39},{"name":"Roedby Fm. Top","color":"#c14dcd","level":2,"mdMsl":3597.94,"tvdMsl":2833.39},{"name":"CROMER KNOLL GP. Top","color":"#b233cf","level":1,"mdMsl":3597.94,"tvdMsl":2833.39},{"name":"SHETLAND GP. Base","color":"#000080","level":1,"mdMsl":3597.94,"tvdMsl":2833.39},{"name":"Roedby Fm. Base","color":"#c14dcd","level":2,"mdMsl":3625.3,"tvdMsl":2858.77},{"name":"Aasgard Fm. Top","color":"#e081c9","level":2,"mdMsl":3625.3,"tvdMsl":2858.77},{"name":"CROMER KNOLL GP. Base","color":"#b233cf","level":1,"mdMsl":3641.5,"tvdMsl":2873.67},{"name":"VIKING GP. Top","color":"#ff0000","level":1,"mdMsl":3641.5,"tvdMsl":2873.67},{"name":"Aasgard Fm. Base","color":"#e081c9","level":2,"mdMsl":3641.5,"tvdMsl":2873.67},{"name":"Draupne Fm. Top","color":"#ff4f20","level":2,"mdMsl":3641.5,"tvdMsl":2873.67},{"name":"Heather Fm. Top","color":"#ff5f30","level":2,"mdMsl":3742,"tvdMsl":2964.33},{"name":"Draupne Fm. Base","color":"#ff4f20","level":2,"mdMsl":3742,"tvdMsl":2964.33},{"name":"Heather Fm. Sand VOLVE Top","color":"#ffe500","level":3,"mdMsl":3772,"tvdMsl":2991.03},{"name":"VESTLAND GP. Top","color":"#d167cb","level":1,"mdMsl":3796.5,"tvdMsl":3012.9},{"name":"Heather Fm. Sand VOLVE Base","color":"#ffe500","level":3,"mdMsl":3796.5,"tvdMsl":3012.9},{"name":"Heather Fm. Base","color":"#ff5f30","level":2,"mdMsl":3796.5,"tvdMsl":3012.9},{"name":"Hugin Fm. Top","color":"#ffcb00","level":2,"mdMsl":3796.5,"tvdMsl":3012.9},{"name":"VIKING GP. Base","color":"#ff0000","level":1,"mdMsl":3796.5,"tvdMsl":3012.9},{"name":"Hugin Fm. Base","color":"#ffcb00","level":2,"mdMsl":3894.59,"tvdMsl":3101.31},{"name":"Sleipner Fm. Top","color":"#ffff00","level":2,"mdMsl":3894.59,"tvdMsl":3101.31},{"name":"VESTLAND GP. Base","color":"#d167cb","level":1,"mdMsl":3941.3,"tvdMsl":3143.39},{"name":"Sleipner Fm. Base","color":"#ffff00","level":2,"mdMsl":3941.3,"tvdMsl":3143.39},{"name":"HEGRE GP. Top","color":"#006400","level":1,"mdMsl":3941.3,"tvdMsl":3143.39},{"name":"Skagerrak Fm. Top","color":"#007a12","level":2,"mdMsl":3941.31,"tvdMsl":3143.4},{"name":"Skagerrak Fm. Base","color":"#007a12","level":2,"mdMsl":4072,"tvdMsl":3262.15},{"name":"Smith Bank Fm. Top","color":"#00ea4c","level":2,"mdMsl":4072,"tvdMsl":3262.15},{"name":"Smith Bank Fm. Base","color":"#00ea4c","level":2,"mdMsl":4106,"tvdMsl":3293.72},{"name":"HEGRE GP. Base","color":"#006400","level":1,"mdMsl":4106,"tvdMsl":3293.72}],"ad215042-0218-2b7e-e053-c818a488c79a":[{"name":"NORDLAND GP. Top","color":"#ffe500","level":1,"mdMsl":84,"tvdMsl":84},{"name":"Utsira Fm. Top","color":"#fff200","level":2,"mdMsl":826,"tvdMsl":817.64},{"name":"NORDLAND GP. Base","color":"#ffe500","level":1,"mdMsl":1087,"tvdMsl":1035.37},{"name":"Utsira Fm. Base","color":"#fff200","level":2,"mdMsl":1087,"tvdMsl":1035.37},{"name":"HORDALAND GP. Top","color":"#009024","level":1,"mdMsl":1087,"tvdMsl":1035.37},{"name":"Skade Fm. Top","color":"#00a636","level":2,"mdMsl":1294,"tvdMsl":1157.87},{"name":"Skade Fm. Base","color":"#00a636","level":2,"mdMsl":1431,"tvdMsl":1231.86},{"name":"Grid Fm. Top","color":"#00bc48","level":2,"mdMsl":2756.5,"tvdMsl":2072.9},{"name":"Grid Fm. Base","color":"#00bc48","level":2,"mdMsl":2807,"tvdMsl":2117.43},{"name":"HORDALAND GP. Base","color":"#009024","level":1,"mdMsl":2946.5,"tvdMsl":2234.83},{"name":"Balder Fm. Top","color":"#bc4830","level":2,"mdMsl":2946.5,"tvdMsl":2234.83},{"name":"ROGALAND GP. Top","color":"#b22222","level":1,"mdMsl":2946.5,"tvdMsl":2234.83},{"name":"Balder Fm. Base","color":"#bc4830","level":2,"mdMsl":3015,"tvdMsl":2292.02},{"name":"Sele Fm. Top","color":"#bd845c","level":2,"mdMsl":3015,"tvdMsl":2292.02},{"name":"Sele Fm. Base","color":"#bd845c","level":2,"mdMsl":3098,"tvdMsl":2361.6},{"name":"Lista Fm. Top","color":"#c49f74","level":2,"mdMsl":3098,"tvdMsl":2361.6},{"name":"Lista Fm. Base","color":"#c49f74","level":2,"mdMsl":3184,"tvdMsl":2433.72},{"name":"Ty Fm. Top","color":"#d2b48c","level":2,"mdMsl":3184,"tvdMsl":2433.72},{"name":"Ty Fm. Base","color":"#d2b48c","level":2,"mdMsl":3247,"tvdMsl":2486.53},{"name":"ROGALAND GP. Base","color":"#b22222","level":1,"mdMsl":3247,"tvdMsl":2486.53}],"ad215042-0398-2b7e-e053-c818a488c79a":[{"name":"NORDLAND GP. Top","color":"#ffe500","level":1,"mdMsl":91.1,"tvdMsl":91.1},{"name":"Utsira Fm. Top","color":"#fff200","level":2,"mdMsl":831.6,"tvdMsl":827.68},{"name":"Utsira Fm. Base","color":"#fff200","level":2,"mdMsl":1014.4,"tvdMsl":1007.86},{"name":"HORDALAND GP. Top","color":"#009024","level":1,"mdMsl":1014.4,"tvdMsl":1007.86},{"name":"NORDLAND GP. Base","color":"#ffe500","level":1,"mdMsl":1014.4,"tvdMsl":1007.86},{"name":"Skade Fm. Top","color":"#00a636","level":2,"mdMsl":1199.1,"tvdMsl":1188.92},{"name":"Skade Fm. Base","color":"#00a636","level":2,"mdMsl":1262.6,"tvdMsl":1251.09},{"name":"Grid Fm. Top","color":"#00bc48","level":2,"mdMsl":2119.4,"tvdMsl":2031.59},{"name":"Grid Fm. Base","color":"#00bc48","level":2,"mdMsl":2250.7,"tvdMsl":2145.44},{"name":"HORDALAND GP. Base","color":"#009024","level":1,"mdMsl":2339.5,"tvdMsl":2222.33},{"name":"ROGALAND GP. Top","color":"#b22222","level":1,"mdMsl":2339.5,"tvdMsl":2222.33},{"name":"Balder Fm. Top","color":"#bc4830","level":2,"mdMsl":2339.5,"tvdMsl":2222.33},{"name":"Sele Fm. Top","color":"#bd845c","level":2,"mdMsl":2404.4,"tvdMsl":2278.45},{"name":"Balder Fm. Base","color":"#bc4830","level":2,"mdMsl":2404.4,"tvdMsl":2278.45},{"name":"Sele Fm. Base","color":"#bd845c","level":2,"mdMsl":2472.1,"tvdMsl":2336.95},{"name":"Lista Fm. Top","color":"#c49f74","level":2,"mdMsl":2472.1,"tvdMsl":2336.95},{"name":"Lista Fm. Base","color":"#c49f74","level":2,"mdMsl":2565.7,"tvdMsl":2418.32},{"name":"Ty Fm. Top","color":"#d2b48c","level":2,"mdMsl":2565.7,"tvdMsl":2418.32},{"name":"Ty Fm. Base","color":"#d2b48c","level":2,"mdMsl":2714,"tvdMsl":2550.49},{"name":"SHETLAND GP. Top","color":"#000080","level":1,"mdMsl":2714,"tvdMsl":2550.49},{"name":"Ekofisk Fm. Top","color":"#0000c3","level":2,"mdMsl":2714,"tvdMsl":2550.49},{"name":"ROGALAND GP. Base","color":"#b22222","level":1,"mdMsl":2714,"tvdMsl":2550.49},{"name":"Ekofisk Fm. Base","color":"#0000c3","level":2,"mdMsl":2732.7,"tvdMsl":2567.24},{"name":"Tor Fm. Top","color":"#006dff","level":2,"mdMsl":2732.7,"tvdMsl":2567.24},{"name":"Tor Fm. Base","color":"#006dff","level":2,"mdMsl":2923.9,"tvdMsl":2734.5},{"name":"Hod Fm. Top","color":"#00b6ff","level":2,"mdMsl":2923.9,"tvdMsl":2734.5},{"name":"Hod Fm. Base","color":"#00b6ff","level":2,"mdMsl":3009.8,"tvdMsl":2803.29},{"name":"Blodoeks Fm. Top","color":"#00daff","level":2,"mdMsl":3009.8,"tvdMsl":2803.29},{"name":"Blodoeks Fm. Base","color":"#00daff","level":2,"mdMsl":3068.7,"tvdMsl":2847.56},{"name":"Hidra Fm. Top","color":"#00ea4c","level":2,"mdMsl":3068.7,"tvdMsl":2847.56},{"name":"Hidra Fm. Base","color":"#00ea4c","level":2,"mdMsl":3091.7,"tvdMsl":2863.8},{"name":"Roedby Fm. Top","color":"#c14dcd","level":2,"mdMsl":3091.7,"tvdMsl":2863.8},{"name":"SHETLAND GP. Base","color":"#000080","level":1,"mdMsl":3091.7,"tvdMsl":2863.8},{"name":"CROMER KNOLL GP. Top","color":"#b233cf","level":1,"mdMsl":3091.7,"tvdMsl":2863.8},{"name":"Roedby Fm. Base","color":"#c14dcd","level":2,"mdMsl":3160.7,"tvdMsl":2910.58},{"name":"Aasgard Fm. Top","color":"#e081c9","level":2,"mdMsl":3160.7,"tvdMsl":2910.58},{"name":"CROMER KNOLL GP. Base","color":"#b233cf","level":1,"mdMsl":3216.1,"tvdMsl":2951.78},{"name":"Aasgard Fm. Base","color":"#e081c9","level":2,"mdMsl":3216.1,"tvdMsl":2951.78},{"name":"VIKING GP. Top","color":"#ff0000","level":1,"mdMsl":3216.1,"tvdMsl":2951.78},{"name":"Draupne Fm. Top","color":"#ff4f20","level":2,"mdMsl":3216.1,"tvdMsl":2951.78},{"name":"Draupne Fm. Base","color":"#ff4f20","level":2,"mdMsl":3264.8,"tvdMsl":2990.71},{"name":"Heather Fm. Top","color":"#ff5f30","level":2,"mdMsl":3264.8,"tvdMsl":2990.71},{"name":"Heather Fm. Sand VOLVE Top","color":"#ffe500","level":3,"mdMsl":3265.1,"tvdMsl":2990.96},{"name":"Skagerrak Fm. Top","color":"#007a12","level":2,"mdMsl":3310.1,"tvdMsl":3028.98},{"name":"HEGRE GP. Top","color":"#006400","level":1,"mdMsl":3310.1,"tvdMsl":3028.98},{"name":"VIKING GP. Base","color":"#ff0000","level":1,"mdMsl":3310.1,"tvdMsl":3028.98},{"name":"Heather Fm. Base","color":"#ff5f30","level":2,"mdMsl":3310.1,"tvdMsl":3028.98},{"name":"Smith Bank Fm. Top","color":"#00ea4c","level":2,"mdMsl":3446,"tvdMsl":3153.06},{"name":"Skagerrak Fm. Base","color":"#007a12","level":2,"mdMsl":3446,"tvdMsl":3153.06},{"name":"Smith Bank Fm. Base","color":"#00ea4c","level":2,"mdMsl":3577.1,"tvdMsl":3275.5},{"name":"HEGRE GP. Base","color":"#006400","level":1,"mdMsl":3577.1,"tvdMsl":3275.5}],"ad215042-03f0-2b7e-e053-c818a488c79a":[{"name":"NORDLAND GP. Top","color":"#ffe500","level":1,"mdMsl":91.1,"tvdMsl":91.1},{"name":"Utsira Fm. Top","color":"#fff200","level":2,"mdMsl":846.37,"tvdMsl":839.37},{"name":"HORDALAND GP. Top","color":"#009024","level":1,"mdMsl":1033.92,"tvdMsl":1020.06},{"name":"NORDLAND GP. Base","color":"#ffe500","level":1,"mdMsl":1033.92,"tvdMsl":1020.06},{"name":"Utsira Fm. Base","color":"#fff200","level":2,"mdMsl":1033.92,"tvdMsl":1020.06},{"name":"Skade Fm. Top","color":"#00a636","level":2,"mdMsl":1143.75,"tvdMsl":1125.04},{"name":"Skade Fm. Base","color":"#00a636","level":2,"mdMsl":1268.47,"tvdMsl":1244.03},{"name":"Grid Fm. Top","color":"#00bc48","level":2,"mdMsl":2149.87,"tvdMsl":2043.59},{"name":"Grid Fm. Base","color":"#00bc48","level":2,"mdMsl":2274.63,"tvdMsl":2157.3},{"name":"HORDALAND GP. Base","color":"#009024","level":1,"mdMsl":2331.08,"tvdMsl":2208.36},{"name":"ROGALAND GP. Top","color":"#b22222","level":1,"mdMsl":2331.08,"tvdMsl":2208.36},{"name":"Balder Fm. Top","color":"#bc4830","level":2,"mdMsl":2331.08,"tvdMsl":2208.36},{"name":"Balder Fm. Base","color":"#bc4830","level":2,"mdMsl":2402.41,"tvdMsl":2271.94},{"name":"Sele Fm. Top","color":"#bd845c","level":2,"mdMsl":2402.41,"tvdMsl":2271.94},{"name":"Sele Fm. Base","color":"#bd845c","level":2,"mdMsl":2475.43,"tvdMsl":2335.59},{"name":"Lista Fm. Top","color":"#c49f74","level":2,"mdMsl":2475.43,"tvdMsl":2335.59},{"name":"Ty Fm. Top","color":"#d2b48c","level":2,"mdMsl":2553.65,"tvdMsl":2399.86},{"name":"Lista Fm. Base","color":"#c49f74","level":2,"mdMsl":2553.65,"tvdMsl":2399.86},{"name":"Ty Fm. Base","color":"#d2b48c","level":2,"mdMsl":2763.3,"tvdMsl":2549.5},{"name":"SHETLAND GP. Top","color":"#000080","level":1,"mdMsl":2763.3,"tvdMsl":2549.5},{"name":"ROGALAND GP. Base","color":"#b22222","level":1,"mdMsl":2763.3,"tvdMsl":2549.5},{"name":"Ekofisk Fm. Top","color":"#0000c3","level":2,"mdMsl":2763.3,"tvdMsl":2549.5},{"name":"Ekofisk Fm. Base","color":"#0000c3","level":2,"mdMsl":2795.67,"tvdMsl":2569.79},{"name":"Tor Fm. Top","color":"#006dff","level":2,"mdMsl":2795.67,"tvdMsl":2569.79},{"name":"Hod Fm. Top","color":"#00b6ff","level":2,"mdMsl":2987.53,"tvdMsl":2690.9},{"name":"Tor Fm. Base","color":"#006dff","level":2,"mdMsl":2987.53,"tvdMsl":2690.9},{"name":"Hod Fm. Base","color":"#00b6ff","level":2,"mdMsl":3098.12,"tvdMsl":2748.86},{"name":"Blodoeks Fm. Top","color":"#00daff","level":2,"mdMsl":3098.12,"tvdMsl":2748.86},{"name":"Blodoeks Fm. Base","color":"#00daff","level":2,"mdMsl":3579.6,"tvdMsl":2863.73},{"name":"Hidra Fm. Top","color":"#00ea4c","level":2,"mdMsl":3579.6,"tvdMsl":2863.73},{"name":"CROMER KNOLL GP. Top","color":"#b233cf","level":1,"mdMsl":3650.1,"tvdMsl":2893.62},{"name":"Roedby Fm. Top","color":"#c14dcd","level":2,"mdMsl":3650.1,"tvdMsl":2893.62},{"name":"SHETLAND GP. Base","color":"#000080","level":1,"mdMsl":3650.1,"tvdMsl":2893.62},{"name":"Hidra Fm. Base","color":"#00ea4c","level":2,"mdMsl":3650.1,"tvdMsl":2893.62},{"name":"CROMER KNOLL GP. Base","color":"#b233cf","level":1,"mdMsl":3725.9,"tvdMsl":2935.37},{"name":"Roedby Fm. Base","color":"#c14dcd","level":2,"mdMsl":3725.9,"tvdMsl":2935.37},{"name":"Aasgard Fm. Base","color":"#e081c9","level":2,"mdMsl":3725.9,"tvdMsl":2935.37},{"name":"VIKING GP. Top","color":"#ff0000","level":1,"mdMsl":3725.9,"tvdMsl":2935.37},{"name":"Aasgard Fm. Top","color":"#e081c9","level":2,"mdMsl":3725.9,"tvdMsl":2935.37},{"name":"Draupne Fm. Top","color":"#ff4f20","level":2,"mdMsl":3725.9,"tvdMsl":2935.37},{"name":"Hugin Fm. Top","color":"#ffcb00","level":2,"mdMsl":3744.53,"tvdMsl":2946.58},{"name":"VESTLAND GP. Top","color":"#d167cb","level":1,"mdMsl":3744.53,"tvdMsl":2946.58},{"name":"VIKING GP. Base","color":"#ff0000","level":1,"mdMsl":3744.53,"tvdMsl":2946.58},{"name":"Draupne Fm. Base","color":"#ff4f20","level":2,"mdMsl":3744.53,"tvdMsl":2946.58},{"name":"Hugin Fm. Base","color":"#ffcb00","level":2,"mdMsl":3842.11,"tvdMsl":3010.78},{"name":"Sleipner Fm. Top","color":"#ffff00","level":2,"mdMsl":3842.11,"tvdMsl":3010.78},{"name":"Sleipner Fm. Base","color":"#ffff00","level":2,"mdMsl":4040.1,"tvdMsl":3157.39},{"name":"VESTLAND GP. Base","color":"#d167cb","level":1,"mdMsl":4040.1,"tvdMsl":3157.39}],"ad215042-03ec-2b7e-e053-c818a488c79a":[{"name":"NORDLAND GP. Top","color":"#ffe500","level":1,"mdMsl":91.1,"tvdMsl":91.1},{"name":"Utsira Fm. Top","color":"#fff200","level":2,"mdMsl":832.6,"tvdMsl":827.92},{"name":"Utsira Fm. Base","color":"#fff200","level":2,"mdMsl":1020.53,"tvdMsl":1009.88},{"name":"NORDLAND GP. Base","color":"#ffe500","level":1,"mdMsl":1020.53,"tvdMsl":1009.88},{"name":"HORDALAND GP. Top","color":"#009024","level":1,"mdMsl":1020.53,"tvdMsl":1009.88},{"name":"Skade Fm. Top","color":"#00a636","level":2,"mdMsl":1166.58,"tvdMsl":1149.06},{"name":"Skade Fm. Base","color":"#00a636","level":2,"mdMsl":1278.1,"tvdMsl":1254.91},{"name":"Grid Fm. Top","color":"#00bc48","level":2,"mdMsl":2099.75,"tvdMsl":2022.31},{"name":"Grid Fm. Base","color":"#00bc48","level":2,"mdMsl":2168.11,"tvdMsl":2089.73},{"name":"ROGALAND GP. Top","color":"#b22222","level":1,"mdMsl":2291.29,"tvdMsl":2211.1},{"name":"HORDALAND GP. Base","color":"#009024","level":1,"mdMsl":2291.29,"tvdMsl":2211.1},{"name":"Balder Fm. Top","color":"#bc4830","level":2,"mdMsl":2291.29,"tvdMsl":2211.1},{"name":"Sele Fm. Top","color":"#bd845c","level":2,"mdMsl":2348.05,"tvdMsl":2266.4},{"name":"Balder Fm. Base","color":"#bc4830","level":2,"mdMsl":2348.05,"tvdMsl":2266.4},{"name":"Sele Fm. Base","color":"#bd845c","level":2,"mdMsl":2428.33,"tvdMsl":2343.26},{"name":"Lista Fm. Top","color":"#c49f74","level":2,"mdMsl":2428.33,"tvdMsl":2343.26},{"name":"Ty Fm. Top","color":"#d2b48c","level":2,"mdMsl":2484.6,"tvdMsl":2396.32},{"name":"Lista Fm. Base","color":"#c49f74","level":2,"mdMsl":2484.6,"tvdMsl":2396.32},{"name":"ROGALAND GP. Base","color":"#b22222","level":1,"mdMsl":2635.43,"tvdMsl":2531.39},{"name":"Ty Fm. Base","color":"#d2b48c","level":2,"mdMsl":2635.43,"tvdMsl":2531.39},{"name":"SHETLAND GP. Top","color":"#000080","level":1,"mdMsl":2635.43,"tvdMsl":2531.39},{"name":"Ekofisk Fm. Top","color":"#0000c3","level":2,"mdMsl":2635.43,"tvdMsl":2531.39},{"name":"Ekofisk Fm. Base","color":"#0000c3","level":2,"mdMsl":2648.06,"tvdMsl":2542.03},{"name":"Tor Fm. Top","color":"#006dff","level":2,"mdMsl":2648.06,"tvdMsl":2542.03},{"name":"Hod Fm. Top","color":"#00b6ff","level":2,"mdMsl":2831.71,"tvdMsl":2677.07},{"name":"Tor Fm. Base","color":"#006dff","level":2,"mdMsl":2831.71,"tvdMsl":2677.07},{"name":"Hod Fm. Base","color":"#00b6ff","level":2,"mdMsl":2928.9,"tvdMsl":2735.64},{"name":"Blodoeks Fm. Top","color":"#00daff","level":2,"mdMsl":2928.9,"tvdMsl":2735.64},{"name":"Blodoeks Fm. Base","color":"#00daff","level":2,"mdMsl":2978.96,"tvdMsl":2764.57},{"name":"Hidra Fm. Top","color":"#00ea4c","level":2,"mdMsl":2978.96,"tvdMsl":2764.57},{"name":"SHETLAND GP. Base","color":"#000080","level":1,"mdMsl":2994.73,"tvdMsl":2773.67},{"name":"CROMER KNOLL GP. Top","color":"#b233cf","level":1,"mdMsl":2994.73,"tvdMsl":2773.67},{"name":"Roedby Fm. Top","color":"#c14dcd","level":2,"mdMsl":2994.73,"tvdMsl":2773.67},{"name":"Hidra Fm. Base","color":"#00ea4c","level":2,"mdMsl":2994.73,"tvdMsl":2773.67},{"name":"Draupne Fm. Top","color":"#ff4f20","level":2,"mdMsl":3047.1,"tvdMsl":2804.26},{"name":"Aasgard Fm. Top","color":"#e081c9","level":2,"mdMsl":3047.1,"tvdMsl":2804.26},{"name":"VIKING GP. Top","color":"#ff0000","level":1,"mdMsl":3047.1,"tvdMsl":2804.26},{"name":"Aasgard Fm. Base","color":"#e081c9","level":2,"mdMsl":3047.1,"tvdMsl":2804.26},{"name":"CROMER KNOLL GP. Base","color":"#b233cf","level":1,"mdMsl":3047.1,"tvdMsl":2804.26},{"name":"Draupne Fm. Base","color":"#ff4f20","level":2,"mdMsl":3047.1,"tvdMsl":2804.26},{"name":"Roedby Fm. Base","color":"#c14dcd","level":2,"mdMsl":3047.1,"tvdMsl":2804.26},{"name":"Heather Fm. Top","color":"#ff5f30","level":2,"mdMsl":3047.1,"tvdMsl":2804.26},{"name":"Heather Fm. Sand VOLVE Top","color":"#ffe500","level":3,"mdMsl":3062.1,"tvdMsl":2813.09},{"name":"Heather Fm. Base","color":"#ff5f30","level":2,"mdMsl":3071.1,"tvdMsl":2818.39},{"name":"Hugin Fm. Top","color":"#ffcb00","level":2,"mdMsl":3071.1,"tvdMsl":2818.39},{"name":"VESTLAND GP. Top","color":"#d167cb","level":1,"mdMsl":3071.1,"tvdMsl":2818.39},{"name":"VIKING GP. Base","color":"#ff0000","level":1,"mdMsl":3071.1,"tvdMsl":2818.39},{"name":"Heather Fm. Sand VOLVE Base","color":"#ffe500","level":3,"mdMsl":3071.1,"tvdMsl":2818.39},{"name":"Sleipner Fm. Top","color":"#ffff00","level":2,"mdMsl":3225.44,"tvdMsl":2909.63},{"name":"Hugin Fm. Base","color":"#ffcb00","level":2,"mdMsl":3225.44,"tvdMsl":2909.63},{"name":"HEGRE GP. Top","color":"#006400","level":1,"mdMsl":3282.66,"tvdMsl":2943.68},{"name":"Sleipner Fm. Base","color":"#ffff00","level":2,"mdMsl":3282.66,"tvdMsl":2943.68},{"name":"VESTLAND GP. Base","color":"#d167cb","level":1,"mdMsl":3282.66,"tvdMsl":2943.68},{"name":"Skagerrak Fm. Top","color":"#007a12","level":2,"mdMsl":3282.66,"tvdMsl":2943.68},{"name":"Skagerrak Fm. Base","color":"#007a12","level":2,"mdMsl":3465.1,"tvdMsl":3053.46}],"ad215042-03ee-2b7e-e053-c818a488c79a":[{"name":"NORDLAND GP. Top","color":"#ffe500","level":1,"mdMsl":91.1,"tvdMsl":91.1},{"name":"Utsira Fm. Top","color":"#fff200","level":2,"mdMsl":827.2,"tvdMsl":826.76},{"name":"HORDALAND GP. Top","color":"#009024","level":1,"mdMsl":1023.85,"tvdMsl":1023.41},{"name":"NORDLAND GP. Base","color":"#ffe500","level":1,"mdMsl":1023.87,"tvdMsl":1023.43},{"name":"Utsira Fm. Base","color":"#fff200","level":2,"mdMsl":1023.87,"tvdMsl":1023.43},{"name":"Skade Fm. Top","color":"#00a636","level":2,"mdMsl":1152.13,"tvdMsl":1151.69},{"name":"Skade Fm. Base","color":"#00a636","level":2,"mdMsl":1260.91,"tvdMsl":1260.47},{"name":"Grid Fm. Top","color":"#00bc48","level":2,"mdMsl":2081.9,"tvdMsl":2081.44},{"name":"Grid Fm. Base","color":"#00bc48","level":2,"mdMsl":2164.84,"tvdMsl":2164.04},{"name":"Balder Fm. Top","color":"#bc4830","level":2,"mdMsl":2213.28,"tvdMsl":2212},{"name":"ROGALAND GP. Top","color":"#b22222","level":1,"mdMsl":2213.28,"tvdMsl":2212},{"name":"HORDALAND GP. Base","color":"#009024","level":1,"mdMsl":2213.28,"tvdMsl":2212},{"name":"Sele Fm. Top","color":"#bd845c","level":2,"mdMsl":2276.44,"tvdMsl":2274.41},{"name":"Balder Fm. Base","color":"#bc4830","level":2,"mdMsl":2276.44,"tvdMsl":2274.41},{"name":"Sele Fm. Base","color":"#bd845c","level":2,"mdMsl":2340.69,"tvdMsl":2337.26},{"name":"Lista Fm. Top","color":"#c49f74","level":2,"mdMsl":2340.69,"tvdMsl":2337.26},{"name":"Lista Fm. Base","color":"#c49f74","level":2,"mdMsl":2417.88,"tvdMsl":2411.46},{"name":"Ty Fm. Top","color":"#d2b48c","level":2,"mdMsl":2417.88,"tvdMsl":2411.46},{"name":"SHETLAND GP. Top","color":"#000080","level":1,"mdMsl":2553.1,"tvdMsl":2534.35},{"name":"Ekofisk Fm. Top","color":"#0000c3","level":2,"mdMsl":2553.1,"tvdMsl":2534.35},{"name":"ROGALAND GP. Base","color":"#b22222","level":1,"mdMsl":2553.1,"tvdMsl":2534.35},{"name":"Ty Fm. Base","color":"#d2b48c","level":2,"mdMsl":2553.1,"tvdMsl":2534.35},{"name":"Ekofisk Fm. Base","color":"#0000c3","level":2,"mdMsl":2573.7,"tvdMsl":2551.75},{"name":"Tor Fm. Top","color":"#006dff","level":2,"mdMsl":2573.7,"tvdMsl":2551.75},{"name":"Hod Fm. Top","color":"#00b6ff","level":2,"mdMsl":2717.8,"tvdMsl":2665.09},{"name":"Tor Fm. Base","color":"#006dff","level":2,"mdMsl":2717.8,"tvdMsl":2665.09},{"name":"Blodoeks Fm. Top","color":"#00daff","level":2,"mdMsl":2813.56,"tvdMsl":2734.73},{"name":"Hod Fm. Base","color":"#00b6ff","level":2,"mdMsl":2813.56,"tvdMsl":2734.73},{"name":"Blodoeks Fm. Base","color":"#00daff","level":2,"mdMsl":2847.62,"tvdMsl":2755.92},{"name":"Hidra Fm. Top","color":"#00ea4c","level":2,"mdMsl":2847.62,"tvdMsl":2755.92},{"name":"Hidra Fm. Base","color":"#00ea4c","level":2,"mdMsl":2859.1,"tvdMsl":2762.82},{"name":"SHETLAND GP. Base","color":"#000080","level":1,"mdMsl":2905.1,"tvdMsl":2787.02},{"name":"Roedby Fm. Top","color":"#c14dcd","level":2,"mdMsl":2905.1,"tvdMsl":2787.02},{"name":"CROMER KNOLL GP. Top","color":"#b233cf","level":1,"mdMsl":2905.1,"tvdMsl":2787.02},{"name":"Draupne Fm. Top","color":"#ff4f20","level":2,"mdMsl":2923.1,"tvdMsl":2795.4},{"name":"Aasgard Fm. Base","color":"#e081c9","level":2,"mdMsl":2923.5,"tvdMsl":2795.59},{"name":"CROMER KNOLL GP. Base","color":"#b233cf","level":1,"mdMsl":2923.5,"tvdMsl":2795.59},{"name":"Roedby Fm. Base","color":"#c14dcd","level":2,"mdMsl":2923.5,"tvdMsl":2795.59},{"name":"Aasgard Fm. Top","color":"#e081c9","level":2,"mdMsl":2923.5,"tvdMsl":2795.59},{"name":"VIKING GP. Top","color":"#ff0000","level":1,"mdMsl":2923.5,"tvdMsl":2795.59},{"name":"Heather Fm. Top","color":"#ff5f30","level":2,"mdMsl":2925.1,"tvdMsl":2796.34},{"name":"Draupne Fm. Base","color":"#ff4f20","level":2,"mdMsl":2925.1,"tvdMsl":2796.34},{"name":"Heather Fm. Sand VOLVE Top","color":"#ffe500","level":3,"mdMsl":2936.1,"tvdMsl":2801.46},{"name":"Hugin Fm. Top","color":"#ffcb00","level":2,"mdMsl":2945.7,"tvdMsl":2805.46},{"name":"Heather Fm. Base","color":"#ff5f30","level":2,"mdMsl":2945.7,"tvdMsl":2805.46},{"name":"VESTLAND GP. Top","color":"#d167cb","level":1,"mdMsl":2945.7,"tvdMsl":2805.46},{"name":"VIKING GP. Base","color":"#ff0000","level":1,"mdMsl":2945.7,"tvdMsl":2805.46},{"name":"Heather Fm. Sand VOLVE Base","color":"#ffe500","level":3,"mdMsl":2945.7,"tvdMsl":2805.46},{"name":"Sleipner Fm. Top","color":"#ffff00","level":2,"mdMsl":3153.4,"tvdMsl":2870.69},{"name":"Hugin Fm. Base","color":"#ffcb00","level":2,"mdMsl":3153.4,"tvdMsl":2870.69},{"name":"VESTLAND GP. Base","color":"#d167cb","level":1,"mdMsl":3215.1,"tvdMsl":2881.15},{"name":"Sleipner Fm. Base","color":"#ffff00","level":2,"mdMsl":3215.1,"tvdMsl":2881.15},{"name":"VESTLAND GP. Base","color":"#d167cb","level":1,"mdMsl":3215.1,"tvdMsl":2881.15},{"name":"Sleipner Fm. Base","color":"#ffff00","level":2,"mdMsl":3215.1,"tvdMsl":2881.15},{"name":"VESTLAND GP. Base","color":"#d167cb","level":1,"mdMsl":3231.88,"tvdMsl":2884.24},{"name":"VESTLAND GP. Top","color":"#d167cb","level":1,"mdMsl":3231.88,"tvdMsl":2884.24},{"name":"Sleipner Fm. Top","color":"#ffff00","level":2,"mdMsl":3231.88,"tvdMsl":2884.24},{"name":"Hugin Fm. Base","color":"#ffcb00","level":2,"mdMsl":3231.88,"tvdMsl":2884.24},{"name":"Hugin Fm. Top","color":"#ffcb00","level":2,"mdMsl":3320.1,"tvdMsl":2906.65},{"name":"VESTLAND GP. Top","color":"#d167cb","level":1,"mdMsl":3320.1,"tvdMsl":2906.65},{"name":"Hugin Fm. Top","color":"#ffcb00","level":2,"mdMsl":3320.1,"tvdMsl":2906.65},{"name":"VESTLAND GP. Top","color":"#d167cb","level":1,"mdMsl":3320.1,"tvdMsl":2906.65},{"name":"VESTLAND GP. Top","color":"#d167cb","level":1,"mdMsl":3425.1,"tvdMsl":2944.79},{"name":"Hugin Fm. Base","color":"#ffcb00","level":2,"mdMsl":3425.1,"tvdMsl":2944.79},{"name":"VESTLAND GP. Base","color":"#d167cb","level":1,"mdMsl":3425.1,"tvdMsl":2944.79},{"name":"Hugin Fm. Top","color":"#ffcb00","level":2,"mdMsl":3425.1,"tvdMsl":2944.79},{"name":"Sleipner Fm. Top","color":"#ffff00","level":2,"mdMsl":3625.3,"tvdMsl":3058.96},{"name":"Hugin Fm. Base","color":"#ffcb00","level":2,"mdMsl":3625.3,"tvdMsl":3058.96},{"name":"Sleipner Fm. Base","color":"#ffff00","level":2,"mdMsl":3694.7,"tvdMsl":3103.49},{"name":"VESTLAND GP. Base","color":"#d167cb","level":1,"mdMsl":3694.7,"tvdMsl":3103.49}],"ad215042-03f1-2b7e-e053-c818a488c79a":[{"name":"NORDLAND GP. Top","color":"#ffe500","level":1,"mdMsl":91.1,"tvdMsl":91.1},{"name":"Utsira Fm. Top","color":"#fff200","level":2,"mdMsl":846.37,"tvdMsl":839.37},{"name":"Utsira Fm. Base","color":"#fff200","level":2,"mdMsl":1033.92,"tvdMsl":1020.06},{"name":"HORDALAND GP. Top","color":"#009024","level":1,"mdMsl":1033.92,"tvdMsl":1020.06},{"name":"NORDLAND GP. Base","color":"#ffe500","level":1,"mdMsl":1033.92,"tvdMsl":1020.06},{"name":"Skade Fm. Top","color":"#00a636","level":2,"mdMsl":1143.75,"tvdMsl":1125.04},{"name":"Skade Fm. Base","color":"#00a636","level":2,"mdMsl":1268.47,"tvdMsl":1244.03},{"name":"Grid Fm. Top","color":"#00bc48","level":2,"mdMsl":2149.87,"tvdMsl":2043.59},{"name":"Grid Fm. Base","color":"#00bc48","level":2,"mdMsl":2274.63,"tvdMsl":2157.3},{"name":"Balder Fm. Top","color":"#bc4830","level":2,"mdMsl":2331.08,"tvdMsl":2208.36},{"name":"HORDALAND GP. Base","color":"#009024","level":1,"mdMsl":2331.08,"tvdMsl":2208.36},{"name":"ROGALAND GP. Top","color":"#b22222","level":1,"mdMsl":2331.08,"tvdMsl":2208.36},{"name":"Balder Fm. Base","color":"#bc4830","level":2,"mdMsl":2402.41,"tvdMsl":2271.94},{"name":"Sele Fm. Top","color":"#bd845c","level":2,"mdMsl":2402.41,"tvdMsl":2271.94},{"name":"Lista Fm. Top","color":"#c49f74","level":2,"mdMsl":2475.43,"tvdMsl":2335.59},{"name":"Sele Fm. Base","color":"#bd845c","level":2,"mdMsl":2475.43,"tvdMsl":2335.59},{"name":"Lista Fm. Base","color":"#c49f74","level":2,"mdMsl":2551.13,"tvdMsl":2399.54},{"name":"Ty Fm. Top","color":"#d2b48c","level":2,"mdMsl":2551.13,"tvdMsl":2399.54},{"name":"SHETLAND GP. Top","color":"#000080","level":1,"mdMsl":2712.6,"tvdMsl":2545.76},{"name":"Ty Fm. Base","color":"#d2b48c","level":2,"mdMsl":2712.6,"tvdMsl":2545.76},{"name":"Ekofisk Fm. Top","color":"#0000c3","level":2,"mdMsl":2712.6,"tvdMsl":2545.76},{"name":"ROGALAND GP. Base","color":"#b22222","level":1,"mdMsl":2712.6,"tvdMsl":2545.76},{"name":"Ekofisk Fm. Base","color":"#0000c3","level":2,"mdMsl":2726.25,"tvdMsl":2558.93},{"name":"Tor Fm. Top","color":"#006dff","level":2,"mdMsl":2726.25,"tvdMsl":2558.93},{"name":"Hod Fm. Top","color":"#00b6ff","level":2,"mdMsl":2856.74,"tvdMsl":2686.09},{"name":"Tor Fm. Base","color":"#006dff","level":2,"mdMsl":2856.74,"tvdMsl":2686.09},{"name":"Hod Fm. Base","color":"#00b6ff","level":2,"mdMsl":2919.63,"tvdMsl":2747.36},{"name":"Blodoeks Fm. Top","color":"#00daff","level":2,"mdMsl":2919.63,"tvdMsl":2747.36},{"name":"Hidra Fm. Top","color":"#00ea4c","level":2,"mdMsl":2985.84,"tvdMsl":2810.86},{"name":"Blodoeks Fm. Base","color":"#00daff","level":2,"mdMsl":2985.84,"tvdMsl":2810.86},{"name":"Hidra Fm. Base","color":"#00ea4c","level":2,"mdMsl":3003.91,"tvdMsl":2827.9},{"name":"CROMER KNOLL GP. Top","color":"#b233cf","level":1,"mdMsl":3003.91,"tvdMsl":2827.9},{"name":"SHETLAND GP. Base","color":"#000080","level":1,"mdMsl":3003.91,"tvdMsl":2827.9},{"name":"Roedby Fm. Top","color":"#c14dcd","level":2,"mdMsl":3003.91,"tvdMsl":2827.9},{"name":"VIKING GP. Top","color":"#ff0000","level":1,"mdMsl":3045.48,"tvdMsl":2866.92},{"name":"CROMER KNOLL GP. Base","color":"#b233cf","level":1,"mdMsl":3045.48,"tvdMsl":2866.92},{"name":"Aasgard Fm. Top","color":"#e081c9","level":2,"mdMsl":3045.5,"tvdMsl":2866.94},{"name":"Aasgard Fm. Base","color":"#e081c9","level":2,"mdMsl":3045.5,"tvdMsl":2866.94},{"name":"Draupne Fm. Top","color":"#ff4f20","level":2,"mdMsl":3045.5,"tvdMsl":2866.94},{"name":"Roedby Fm. Base","color":"#c14dcd","level":2,"mdMsl":3045.5,"tvdMsl":2866.94},{"name":"Heather Fm. Top","color":"#ff5f30","level":2,"mdMsl":3060.1,"tvdMsl":2880.58},{"name":"Draupne Fm. Base","color":"#ff4f20","level":2,"mdMsl":3060.1,"tvdMsl":2880.58},{"name":"VIKING GP. Base","color":"#ff0000","level":1,"mdMsl":3070.34,"tvdMsl":2890.1},{"name":"Hugin Fm. Top","color":"#ffcb00","level":2,"mdMsl":3070.34,"tvdMsl":2890.1},{"name":"VESTLAND GP. Top","color":"#d167cb","level":1,"mdMsl":3070.34,"tvdMsl":2890.1},{"name":"Heather Fm. Base","color":"#ff5f30","level":2,"mdMsl":3070.34,"tvdMsl":2890.1},{"name":"Sleipner Fm. Top","color":"#ffff00","level":2,"mdMsl":3106.77,"tvdMsl":2923.85},{"name":"Hugin Fm. Base","color":"#ffcb00","level":2,"mdMsl":3106.77,"tvdMsl":2923.85},{"name":"Sleipner Fm. Base","color":"#ffff00","level":2,"mdMsl":3177.1,"tvdMsl":2989.3},{"name":"VESTLAND GP. Base","color":"#d167cb","level":1,"mdMsl":3177.1,"tvdMsl":2989.3}],"ad215042-03f9-2b7e-e053-c818a488c79a":[{"name":"NORDLAND GP. Top","color":"#ffe500","level":1,"mdMsl":91.1,"tvdMsl":91.1},{"name":"Utsira Fm. Top","color":"#fff200","level":2,"mdMsl":831.1,"tvdMsl":827.76},{"name":"NORDLAND GP. Base","color":"#ffe500","level":1,"mdMsl":1014.6,"tvdMsl":1009.23},{"name":"Utsira Fm. Base","color":"#fff200","level":2,"mdMsl":1014.6,"tvdMsl":1009.23},{"name":"HORDALAND GP. Top","color":"#009024","level":1,"mdMsl":1014.6,"tvdMsl":1009.23},{"name":"HORDALAND GP. Base","color":"#009024","level":1,"mdMsl":1028.1,"tvdMsl":1022.58}],"ad215043-6e11-2b7e-e053-c818a488c79a":[{"name":"NORDLAND GP. Top","color":"#ffe500","level":1,"mdMsl":91.1,"tvdMsl":91.1},{"name":"Utsira Fm. Top","color":"#fff200","level":2,"mdMsl":846.37,"tvdMsl":839.37},{"name":"NORDLAND GP. Base","color":"#ffe500","level":1,"mdMsl":1033.92,"tvdMsl":1020.06},{"name":"HORDALAND GP. Top","color":"#009024","level":1,"mdMsl":1033.92,"tvdMsl":1020.06},{"name":"Utsira Fm. Base","color":"#fff200","level":2,"mdMsl":1033.92,"tvdMsl":1020.06},{"name":"Skade Fm. Top","color":"#00a636","level":2,"mdMsl":1143.75,"tvdMsl":1125.04},{"name":"Skade Fm. Base","color":"#00a636","level":2,"mdMsl":1268.47,"tvdMsl":1244.03},{"name":"Grid Fm. Top","color":"#00bc48","level":2,"mdMsl":2149.87,"tvdMsl":2043.59},{"name":"Grid Fm. Base","color":"#00bc48","level":2,"mdMsl":2274.63,"tvdMsl":2157.3},{"name":"HORDALAND GP. Base","color":"#009024","level":1,"mdMsl":2331.08,"tvdMsl":2208.36},{"name":"Balder Fm. Top","color":"#bc4830","level":2,"mdMsl":2331.08,"tvdMsl":2208.36},{"name":"ROGALAND GP. Top","color":"#b22222","level":1,"mdMsl":2331.08,"tvdMsl":2208.36},{"name":"Balder Fm. Base","color":"#bc4830","level":2,"mdMsl":2402.41,"tvdMsl":2271.94},{"name":"Sele Fm. Top","color":"#bd845c","level":2,"mdMsl":2402.41,"tvdMsl":2271.94},{"name":"Sele Fm. Base","color":"#bd845c","level":2,"mdMsl":2475.43,"tvdMsl":2335.59},{"name":"Lista Fm. Top","color":"#c49f74","level":2,"mdMsl":2475.43,"tvdMsl":2335.59},{"name":"Ty Fm. Top","color":"#d2b48c","level":2,"mdMsl":2553.65,"tvdMsl":2399.86},{"name":"Lista Fm. Base","color":"#c49f74","level":2,"mdMsl":2553.65,"tvdMsl":2399.86},{"name":"ROGALAND GP. Base","color":"#b22222","level":1,"mdMsl":2763.3,"tvdMsl":2549.5},{"name":"SHETLAND GP. Top","color":"#000080","level":1,"mdMsl":2763.3,"tvdMsl":2549.5},{"name":"Ty Fm. Base","color":"#d2b48c","level":2,"mdMsl":2763.3,"tvdMsl":2549.5},{"name":"Ekofisk Fm. Top","color":"#0000c3","level":2,"mdMsl":2763.3,"tvdMsl":2549.5},{"name":"Tor Fm. Top","color":"#006dff","level":2,"mdMsl":2795.7,"tvdMsl":2569.81},{"name":"Ekofisk Fm. Base","color":"#0000c3","level":2,"mdMsl":2795.7,"tvdMsl":2569.81},{"name":"Hod Fm. Top","color":"#00b6ff","level":2,"mdMsl":2987.53,"tvdMsl":2690.9},{"name":"Tor Fm. Base","color":"#006dff","level":2,"mdMsl":2987.53,"tvdMsl":2690.9},{"name":"Hod Fm. Base","color":"#00b6ff","level":2,"mdMsl":3098.83,"tvdMsl":2749.21},{"name":"Blodoeks Fm. Top","color":"#00daff","level":2,"mdMsl":3098.83,"tvdMsl":2749.21},{"name":"Blodoeks Fm. Base","color":"#00daff","level":2,"mdMsl":3245,"tvdMsl":2830.28},{"name":"Hidra Fm. Top","color":"#00ea4c","level":2,"mdMsl":3245,"tvdMsl":2830.28},{"name":"Hidra Fm. Base","color":"#00ea4c","level":2,"mdMsl":3275.1,"tvdMsl":2848.94},{"name":"Roedby Fm. Top","color":"#c14dcd","level":2,"mdMsl":3275.1,"tvdMsl":2848.94},{"name":"SHETLAND GP. Base","color":"#000080","level":1,"mdMsl":3275.1,"tvdMsl":2848.94},{"name":"CROMER KNOLL GP. Top","color":"#b233cf","level":1,"mdMsl":3275.1,"tvdMsl":2848.94},{"name":"VIKING GP. Top","color":"#ff0000","level":1,"mdMsl":3309.5,"tvdMsl":2870.8},{"name":"Draupne Fm. Top","color":"#ff4f20","level":2,"mdMsl":3309.5,"tvdMsl":2870.8},{"name":"Roedby Fm. Base","color":"#c14dcd","level":2,"mdMsl":3309.5,"tvdMsl":2870.8},{"name":"CROMER KNOLL GP. Base","color":"#b233cf","level":1,"mdMsl":3309.5,"tvdMsl":2870.8},{"name":"Draupne Fm. Base","color":"#ff4f20","level":2,"mdMsl":3315.8,"tvdMsl":2874.9},{"name":"VIKING GP. Base","color":"#ff0000","level":1,"mdMsl":3315.8,"tvdMsl":2874.9},{"name":"VESTLAND GP. Top","color":"#d167cb","level":1,"mdMsl":3315.8,"tvdMsl":2874.9},{"name":"Hugin Fm. Top","color":"#ffcb00","level":2,"mdMsl":3315.8,"tvdMsl":2874.9},{"name":"Hugin Fm. Base","color":"#ffcb00","level":2,"mdMsl":3323.69,"tvdMsl":2880.04},{"name":"Sleipner Fm. Top","color":"#ffff00","level":2,"mdMsl":3323.69,"tvdMsl":2880.04},{"name":"Sleipner Fm. Base","color":"#ffff00","level":2,"mdMsl":3442.1,"tvdMsl":2961.6},{"name":"VESTLAND GP. Base","color":"#d167cb","level":1,"mdMsl":3442.1,"tvdMsl":2961.6}],"ad215042-eccc-2b7e-e053-c818a488c79a":[{"name":"NORDLAND GP. Top","color":"#ffe500","level":1,"mdMsl":91.1,"tvdMsl":91.1},{"name":"Utsira Fm. Top","color":"#fff200","level":2,"mdMsl":830.1,"tvdMsl":825.8},{"name":"HORDALAND GP. Top","color":"#009024","level":1,"mdMsl":1016.3,"tvdMsl":1009.33},{"name":"NORDLAND GP. Base","color":"#ffe500","level":1,"mdMsl":1016.3,"tvdMsl":1009.33},{"name":"Utsira Fm. Base","color":"#fff200","level":2,"mdMsl":1016.3,"tvdMsl":1009.33},{"name":"HORDALAND GP. Base","color":"#009024","level":1,"mdMsl":1028.1,"tvdMsl":1020.96}],"ad215042-039a-2b7e-e053-c818a488c79a":[{"name":"NORDLAND GP. Top","color":"#ffe500","level":1,"mdMsl":91.1,"tvdMsl":91.1},{"name":"Utsira Fm. Top","color":"#fff200","level":2,"mdMsl":831.6,"tvdMsl":827.68},{"name":"NORDLAND GP. Base","color":"#ffe500","level":1,"mdMsl":1014.4,"tvdMsl":1007.86},{"name":"HORDALAND GP. Top","color":"#009024","level":1,"mdMsl":1014.4,"tvdMsl":1007.86},{"name":"Utsira Fm. Base","color":"#fff200","level":2,"mdMsl":1014.4,"tvdMsl":1007.86},{"name":"Skade Fm. Top","color":"#00a636","level":2,"mdMsl":1199.1,"tvdMsl":1188.92},{"name":"Skade Fm. Base","color":"#00a636","level":2,"mdMsl":1262.6,"tvdMsl":1251.09},{"name":"Grid Fm. Top","color":"#00bc48","level":2,"mdMsl":2057.1,"tvdMsl":2002.91},{"name":"Grid Fm. Base","color":"#00bc48","level":2,"mdMsl":2107.7,"tvdMsl":2050.72},{"name":"Balder Fm. Top","color":"#bc4830","level":2,"mdMsl":2264.4,"tvdMsl":2204.19},{"name":"HORDALAND GP. Base","color":"#009024","level":1,"mdMsl":2264.4,"tvdMsl":2204.19},{"name":"ROGALAND GP. Top","color":"#b22222","level":1,"mdMsl":2264.4,"tvdMsl":2204.19},{"name":"Balder Fm. Base","color":"#bc4830","level":2,"mdMsl":2329.3,"tvdMsl":2268.91},{"name":"Sele Fm. Top","color":"#bd845c","level":2,"mdMsl":2329.3,"tvdMsl":2268.91},{"name":"Sele Fm. Base","color":"#bd845c","level":2,"mdMsl":2399,"tvdMsl":2338.11},{"name":"Lista Fm. Top","color":"#c49f74","level":2,"mdMsl":2399,"tvdMsl":2338.11},{"name":"Lista Fm. Base","color":"#c49f74","level":2,"mdMsl":2486.5,"tvdMsl":2423.35},{"name":"Ty Fm. Top","color":"#d2b48c","level":2,"mdMsl":2486.5,"tvdMsl":2423.35},{"name":"Ty Fm. Base","color":"#d2b48c","level":2,"mdMsl":2613.2,"tvdMsl":2540.8},{"name":"SHETLAND GP. Top","color":"#000080","level":1,"mdMsl":2613.2,"tvdMsl":2540.8},{"name":"ROGALAND GP. Base","color":"#b22222","level":1,"mdMsl":2613.2,"tvdMsl":2540.8},{"name":"Ekofisk Fm. Top","color":"#0000c3","level":2,"mdMsl":2613.2,"tvdMsl":2540.8},{"name":"Tor Fm. Top","color":"#006dff","level":2,"mdMsl":2630.2,"tvdMsl":2555.68},{"name":"Ekofisk Fm. Base","color":"#0000c3","level":2,"mdMsl":2630.2,"tvdMsl":2555.68},{"name":"Hod Fm. Top","color":"#00b6ff","level":2,"mdMsl":2822,"tvdMsl":2708.88},{"name":"Tor Fm. Base","color":"#006dff","level":2,"mdMsl":2822,"tvdMsl":2708.88},{"name":"Blodoeks Fm. Top","color":"#00daff","level":2,"mdMsl":2924.3,"tvdMsl":2775.38},{"name":"Hod Fm. Base","color":"#00b6ff","level":2,"mdMsl":2924.3,"tvdMsl":2775.38},{"name":"Hidra Fm. Top","color":"#00ea4c","level":2,"mdMsl":3012.5,"tvdMsl":2823.62},{"name":"Blodoeks Fm. Base","color":"#00daff","level":2,"mdMsl":3012.5,"tvdMsl":2823.62},{"name":"Hidra Fm. Base","color":"#00ea4c","level":2,"mdMsl":3034.4,"tvdMsl":2834.09},{"name":"SHETLAND GP. Base","color":"#000080","level":1,"mdMsl":3034.4,"tvdMsl":2834.09},{"name":"Roedby Fm. Top","color":"#c14dcd","level":2,"mdMsl":3034.4,"tvdMsl":2834.09},{"name":"CROMER KNOLL GP. Top","color":"#b233cf","level":1,"mdMsl":3034.4,"tvdMsl":2834.09},{"name":"Aasgard Fm. Top","color":"#e081c9","level":2,"mdMsl":3087.5,"tvdMsl":2857.12},{"name":"Roedby Fm. Base","color":"#c14dcd","level":2,"mdMsl":3087.5,"tvdMsl":2857.12},{"name":"CROMER KNOLL GP. Base","color":"#b233cf","level":1,"mdMsl":3150.1,"tvdMsl":2878.06},{"name":"Draupne Fm. Top","color":"#ff4f20","level":2,"mdMsl":3150.1,"tvdMsl":2878.06},{"name":"Aasgard Fm. Base","color":"#e081c9","level":2,"mdMsl":3150.1,"tvdMsl":2878.06},{"name":"VIKING GP. Top","color":"#ff0000","level":1,"mdMsl":3150.1,"tvdMsl":2878.06},{"name":"Draupne Fm. Base","color":"#ff4f20","level":2,"mdMsl":3168.2,"tvdMsl":2883.16},{"name":"Heather Fm. Top","color":"#ff5f30","level":2,"mdMsl":3168.2,"tvdMsl":2883.16},{"name":"VIKING GP. Base","color":"#ff0000","level":1,"mdMsl":3174.6,"tvdMsl":2884.52},{"name":"VESTLAND GP. Top","color":"#d167cb","level":1,"mdMsl":3174.6,"tvdMsl":2884.52},{"name":"Hugin Fm. Top","color":"#ffcb00","level":2,"mdMsl":3174.6,"tvdMsl":2884.52},{"name":"Heather Fm. Base","color":"#ff5f30","level":2,"mdMsl":3174.6,"tvdMsl":2884.52},{"name":"Hugin Fm. Base","color":"#ffcb00","level":2,"mdMsl":3449.1,"tvdMsl":2927.64},{"name":"Hugin Fm. Top","color":"#ffcb00","level":2,"mdMsl":3449.1,"tvdMsl":2927.64},{"name":"Hugin Fm. Base","color":"#ffcb00","level":2,"mdMsl":3798.8,"tvdMsl":3040.23},{"name":"Hugin Fm. Top","color":"#ffcb00","level":2,"mdMsl":3798.8,"tvdMsl":3040.23},{"name":"Heather Fm. Top","color":"#ff5f30","level":2,"mdMsl":3949,"tvdMsl":3093.45},{"name":"Hugin Fm. Base","color":"#ffcb00","level":2,"mdMsl":3949,"tvdMsl":3093.45},{"name":"VIKING GP. Top","color":"#ff0000","level":1,"mdMsl":3949,"tvdMsl":3093.45},{"name":"Heather Fm. Base","color":"#ff5f30","level":2,"mdMsl":4039.1,"tvdMsl":3125.57},{"name":"VIKING GP. Base","color":"#ff0000","level":1,"mdMsl":4039.1,"tvdMsl":3125.57}],"ad215042-03f2-2b7e-e053-c818a488c79a":[{"name":"NORDLAND GP. Top","color":"#ffe500","level":1,"mdMsl":91.1,"tvdMsl":91.1},{"name":"Utsira Fm. Top","color":"#fff200","level":2,"mdMsl":846.37,"tvdMsl":839.37},{"name":"NORDLAND GP. Base","color":"#ffe500","level":1,"mdMsl":1033.92,"tvdMsl":1020.06},{"name":"Utsira Fm. Base","color":"#fff200","level":2,"mdMsl":1033.92,"tvdMsl":1020.06},{"name":"HORDALAND GP. Top","color":"#009024","level":1,"mdMsl":1033.92,"tvdMsl":1020.06},{"name":"Skade Fm. Top","color":"#00a636","level":2,"mdMsl":1143.75,"tvdMsl":1125.04},{"name":"Skade Fm. Base","color":"#00a636","level":2,"mdMsl":1268.47,"tvdMsl":1244.03},{"name":"Grid Fm. Top","color":"#00bc48","level":2,"mdMsl":2178.7,"tvdMsl":2076.61},{"name":"Grid Fm. Base","color":"#00bc48","level":2,"mdMsl":2260.4,"tvdMsl":2147.51},{"name":"Balder Fm. Top","color":"#bc4830","level":2,"mdMsl":2337.8,"tvdMsl":2214.61},{"name":"ROGALAND GP. Top","color":"#b22222","level":1,"mdMsl":2337.8,"tvdMsl":2214.61},{"name":"HORDALAND GP. Base","color":"#009024","level":1,"mdMsl":2337.8,"tvdMsl":2214.61},{"name":"Sele Fm. Top","color":"#bd845c","level":2,"mdMsl":2400.9,"tvdMsl":2269.29},{"name":"Balder Fm. Base","color":"#bc4830","level":2,"mdMsl":2400.9,"tvdMsl":2269.29},{"name":"Lista Fm. Top","color":"#c49f74","level":2,"mdMsl":2473.2,"tvdMsl":2331.92},{"name":"Sele Fm. Base","color":"#bd845c","level":2,"mdMsl":2473.2,"tvdMsl":2331.92},{"name":"Ty Fm. Top","color":"#d2b48c","level":2,"mdMsl":2571.8,"tvdMsl":2417.18},{"name":"Lista Fm. Base","color":"#c49f74","level":2,"mdMsl":2571.8,"tvdMsl":2417.18},{"name":"ROGALAND GP. Base","color":"#b22222","level":1,"mdMsl":2733.2,"tvdMsl":2544.13},{"name":"SHETLAND GP. Top","color":"#000080","level":1,"mdMsl":2733.2,"tvdMsl":2544.13},{"name":"Ty Fm. Base","color":"#d2b48c","level":2,"mdMsl":2733.2,"tvdMsl":2544.13},{"name":"Ekofisk Fm. Top","color":"#0000c3","level":2,"mdMsl":2733.2,"tvdMsl":2544.13},{"name":"Ekofisk Fm. Base","color":"#0000c3","level":2,"mdMsl":2765.9,"tvdMsl":2566.16},{"name":"Tor Fm. Top","color":"#006dff","level":2,"mdMsl":2765.9,"tvdMsl":2566.16},{"name":"Tor Fm. Base","color":"#006dff","level":2,"mdMsl":3023.6,"tvdMsl":2696.89},{"name":"Hod Fm. Top","color":"#00b6ff","level":2,"mdMsl":3023.6,"tvdMsl":2696.89},{"name":"Blodoeks Fm. Top","color":"#00daff","level":2,"mdMsl":3207.2,"tvdMsl":2777.32},{"name":"Hod Fm. Base","color":"#00b6ff","level":2,"mdMsl":3207.2,"tvdMsl":2777.32},{"name":"Blodoeks Fm. Base","color":"#00daff","level":2,"mdMsl":3278,"tvdMsl":2805.06},{"name":"Hidra Fm. Top","color":"#00ea4c","level":2,"mdMsl":3278,"tvdMsl":2805.06},{"name":"SHETLAND GP. Base","color":"#000080","level":1,"mdMsl":3295.1,"tvdMsl":2811.71},{"name":"Roedby Fm. Top","color":"#c14dcd","level":2,"mdMsl":3295.1,"tvdMsl":2811.71},{"name":"CROMER KNOLL GP. Top","color":"#b233cf","level":1,"mdMsl":3295.1,"tvdMsl":2811.71},{"name":"Hidra Fm. Base","color":"#00ea4c","level":2,"mdMsl":3295.1,"tvdMsl":2811.71},{"name":"Aasgard Fm. Top","color":"#e081c9","level":2,"mdMsl":3317.5,"tvdMsl":2820.12},{"name":"Roedby Fm. Base","color":"#c14dcd","level":2,"mdMsl":3317.5,"tvdMsl":2820.12},{"name":"Aasgard Fm. Base","color":"#e081c9","level":2,"mdMsl":3394.1,"tvdMsl":2847.29},{"name":"VIKING GP. Top","color":"#ff0000","level":1,"mdMsl":3394.1,"tvdMsl":2847.29},{"name":"Draupne Fm. Top","color":"#ff4f20","level":2,"mdMsl":3394.1,"tvdMsl":2847.29},{"name":"CROMER KNOLL GP. Base","color":"#b233cf","level":1,"mdMsl":3394.1,"tvdMsl":2847.29},{"name":"Heather Fm. Top","color":"#ff5f30","level":2,"mdMsl":3419.8,"tvdMsl":2855.83},{"name":"Draupne Fm. Base","color":"#ff4f20","level":2,"mdMsl":3419.8,"tvdMsl":2855.83},{"name":"VESTLAND GP. Top","color":"#d167cb","level":1,"mdMsl":3428.3,"tvdMsl":2858.43},{"name":"Hugin Fm. Top","color":"#ffcb00","level":2,"mdMsl":3428.3,"tvdMsl":2858.43},{"name":"VIKING GP. Base","color":"#ff0000","level":1,"mdMsl":3428.3,"tvdMsl":2858.43},{"name":"Heather Fm. Base","color":"#ff5f30","level":2,"mdMsl":3428.3,"tvdMsl":2858.43},{"name":"Hugin Fm. Base","color":"#ffcb00","level":2,"mdMsl":4201.1,"tvdMsl":3076.02},{"name":"Hugin Fm. Base","color":"#ffcb00","level":2,"mdMsl":4201.1,"tvdMsl":3076.02},{"name":"Hugin Fm. Top","color":"#ffcb00","level":2,"mdMsl":4508.7,"tvdMsl":3138.66},{"name":"Heather Fm. Base","color":"#ff5f30","level":2,"mdMsl":4508.7,"tvdMsl":3138.66},{"name":"Heather Fm. Top","color":"#ff5f30","level":2,"mdMsl":4517.1,"tvdMsl":3140.01},{"name":"Heather Fm. Top","color":"#ff5f30","level":2,"mdMsl":4517.1,"tvdMsl":3140.01},{"name":"Heather Fm. Base","color":"#ff5f30","level":2,"mdMsl":4526.4,"tvdMsl":3141.46},{"name":"Hugin Fm. Top","color":"#ffcb00","level":2,"mdMsl":4526.4,"tvdMsl":3141.46},{"name":"Hugin Fm. Base","color":"#ffcb00","level":2,"mdMsl":4535.1,"tvdMsl":3142.81},{"name":"Hugin Fm. Base","color":"#ffcb00","level":2,"mdMsl":4535.1,"tvdMsl":3142.81},{"name":"Hugin Fm. Top","color":"#ffcb00","level":2,"mdMsl":4542.4,"tvdMsl":3143.95},{"name":"Heather Fm. Base","color":"#ff5f30","level":2,"mdMsl":4542.4,"tvdMsl":3143.95},{"name":"Heather Fm. Top","color":"#ff5f30","level":2,"mdMsl":4630.1,"tvdMsl":3157.41}],"ad215042-03ea-2b7e-e053-c818a488c79a":[{"name":"NORDLAND GP. Top","color":"#ffe500","level":1,"mdMsl":91.1,"tvdMsl":91.1},{"name":"Utsira Fm. Top","color":"#fff200","level":2,"mdMsl":829.94,"tvdMsl":827.18},{"name":"HORDALAND GP. Top","color":"#009024","level":1,"mdMsl":1015.8,"tvdMsl":1009.76},{"name":"Utsira Fm. Base","color":"#fff200","level":2,"mdMsl":1015.8,"tvdMsl":1009.76},{"name":"NORDLAND GP. Base","color":"#ffe500","level":1,"mdMsl":1015.8,"tvdMsl":1009.76},{"name":"Skade Fm. Top","color":"#00a636","level":2,"mdMsl":1185.1,"tvdMsl":1170},{"name":"Skade Fm. Base","color":"#00a636","level":2,"mdMsl":1275.4,"tvdMsl":1253.8},{"name":"Grid Fm. Top","color":"#00bc48","level":2,"mdMsl":2166.1,"tvdMsl":2065.09},{"name":"Grid Fm. Base","color":"#00bc48","level":2,"mdMsl":2228.1,"tvdMsl":2126.06},{"name":"HORDALAND GP. Base","color":"#009024","level":1,"mdMsl":2318.1,"tvdMsl":2212.47},{"name":"Balder Fm. Top","color":"#bc4830","level":2,"mdMsl":2318.1,"tvdMsl":2212.47},{"name":"Balder Fm. Base","color":"#bc4830","level":2,"mdMsl":2380.1,"tvdMsl":2269.83},{"name":"ROGALAND GP. Top","color":"#b22222","level":1,"mdMsl":2380.1,"tvdMsl":2269.83},{"name":"Sele Fm. Top","color":"#bd845c","level":2,"mdMsl":2380.1,"tvdMsl":2269.83},{"name":"Sele Fm. Base","color":"#bd845c","level":2,"mdMsl":2456.1,"tvdMsl":2336.63},{"name":"Lista Fm. Top","color":"#c49f74","level":2,"mdMsl":2456.1,"tvdMsl":2336.63},{"name":"Lista Fm. Base","color":"#c49f74","level":2,"mdMsl":2568.29,"tvdMsl":2426.93},{"name":"Ty Fm. Top","color":"#d2b48c","level":2,"mdMsl":2568.29,"tvdMsl":2426.93},{"name":"SHETLAND GP. Top","color":"#000080","level":1,"mdMsl":2732.65,"tvdMsl":2535.11},{"name":"Ekofisk Fm. Top","color":"#0000c3","level":2,"mdMsl":2732.65,"tvdMsl":2535.11},{"name":"Ty Fm. Base","color":"#d2b48c","level":2,"mdMsl":2732.65,"tvdMsl":2535.11},{"name":"ROGALAND GP. Base","color":"#b22222","level":1,"mdMsl":2732.65,"tvdMsl":2535.11},{"name":"Ekofisk Fm. Base","color":"#0000c3","level":2,"mdMsl":2768.04,"tvdMsl":2553.12},{"name":"Tor Fm. Top","color":"#006dff","level":2,"mdMsl":2768.04,"tvdMsl":2553.12},{"name":"Tor Fm. Base","color":"#006dff","level":2,"mdMsl":3035.93,"tvdMsl":2678.46},{"name":"Hod Fm. Top","color":"#00b6ff","level":2,"mdMsl":3035.93,"tvdMsl":2678.46},{"name":"Hod Fm. Base","color":"#00b6ff","level":2,"mdMsl":3164.1,"tvdMsl":2738.1},{"name":"Blodoeks Fm. Top","color":"#00daff","level":2,"mdMsl":3164.1,"tvdMsl":2738.1},{"name":"Hidra Fm. Top","color":"#00ea4c","level":2,"mdMsl":3213.38,"tvdMsl":2760.35},{"name":"Blodoeks Fm. Base","color":"#00daff","level":2,"mdMsl":3213.38,"tvdMsl":2760.35},{"name":"CROMER KNOLL GP. Top","color":"#b233cf","level":1,"mdMsl":3244.2,"tvdMsl":2772.81},{"name":"Roedby Fm. Top","color":"#c14dcd","level":2,"mdMsl":3244.2,"tvdMsl":2772.81},{"name":"Hidra Fm. Base","color":"#00ea4c","level":2,"mdMsl":3244.2,"tvdMsl":2772.81},{"name":"SHETLAND GP. Base","color":"#000080","level":1,"mdMsl":3244.2,"tvdMsl":2772.81},{"name":"Draupne Fm. Base","color":"#ff4f20","level":2,"mdMsl":3296.08,"tvdMsl":2791.52},{"name":"Heather Fm. Top","color":"#ff5f30","level":2,"mdMsl":3296.08,"tvdMsl":2791.52},{"name":"Draupne Fm. Top","color":"#ff4f20","level":2,"mdMsl":3296.08,"tvdMsl":2791.52},{"name":"Roedby Fm. Base","color":"#c14dcd","level":2,"mdMsl":3296.08,"tvdMsl":2791.52},{"name":"VIKING GP. Top","color":"#ff0000","level":1,"mdMsl":3296.08,"tvdMsl":2791.52},{"name":"CROMER KNOLL GP. Base","color":"#b233cf","level":1,"mdMsl":3296.08,"tvdMsl":2791.52},{"name":"Heather Fm. Sand VOLVE Top","color":"#ffe500","level":3,"mdMsl":3340.5,"tvdMsl":2806.17},{"name":"Heather Fm. Sand VOLVE Base","color":"#ffe500","level":3,"mdMsl":3359.9,"tvdMsl":2812.36},{"name":"Heather Fm. Sand VOLVE Top","color":"#ffe500","level":3,"mdMsl":3383.5,"tvdMsl":2819.85},{"name":"Hugin Fm. Top","color":"#ffcb00","level":2,"mdMsl":3412.57,"tvdMsl":2829.09},{"name":"Hugin Fm. 12 VOLVE Top","color":"#f0aa23","level":3,"mdMsl":3412.57,"tvdMsl":2829.09},{"name":"Heather Fm. Sand VOLVE Base","color":"#ffe500","level":3,"mdMsl":3412.57,"tvdMsl":2829.09},{"name":"Heather Fm. Base","color":"#ff5f30","level":2,"mdMsl":3412.57,"tvdMsl":2829.09},{"name":"Hugin Fm. 11 VOLVE Top","color":"#ffa500","level":3,"mdMsl":3449.1,"tvdMsl":2840.15},{"name":"Hugin Fm. 12 VOLVE Base","color":"#f0aa23","level":3,"mdMsl":3449.1,"tvdMsl":2840.15},{"name":"Hugin Fm. Base","color":"#ffcb00","level":2,"mdMsl":3484.1,"tvdMsl":2849.5},{"name":"Hugin Fm. 11 VOLVE Base","color":"#ffa500","level":3,"mdMsl":3484.1,"tvdMsl":2849.5},{"name":"Hugin Fm. 11 VOLVE Base","color":"#ffa500","level":3,"mdMsl":3484.1,"tvdMsl":2849.5},{"name":"Hugin Fm. Base","color":"#ffcb00","level":2,"mdMsl":3484.1,"tvdMsl":2849.5},{"name":"Hugin Fm. 11 VOLVE Top","color":"#ffa500","level":3,"mdMsl":3608.1,"tvdMsl":2868.01},{"name":"Hugin Fm. 12 VOLVE Base","color":"#f0aa23","level":3,"mdMsl":3608.1,"tvdMsl":2868.01},{"name":"Hugin Fm. 12 VOLVE Top","color":"#f0aa23","level":3,"mdMsl":3754.6,"tvdMsl":2870.6},{"name":"Hugin Fm. Top","color":"#ffcb00","level":2,"mdMsl":3754.6,"tvdMsl":2870.6},{"name":"Heather Fm. Base","color":"#ff5f30","level":2,"mdMsl":3754.6,"tvdMsl":2870.6},{"name":"Heather Fm. Top","color":"#ff5f30","level":2,"mdMsl":3814.1,"tvdMsl":2873.04},{"name":"Heather Fm. Top","color":"#ff5f30","level":2,"mdMsl":3814.1,"tvdMsl":2873.04},{"name":"Hugin Fm. Top","color":"#ffcb00","level":2,"mdMsl":3839.1,"tvdMsl":2875.2},{"name":"Hugin Fm. 12 VOLVE Top","color":"#f0aa23","level":3,"mdMsl":3839.1,"tvdMsl":2875.2},{"name":"Heather Fm. Base","color":"#ff5f30","level":2,"mdMsl":3839.1,"tvdMsl":2875.2},{"name":"Hugin Fm. 12 VOLVE Base","color":"#f0aa23","level":3,"mdMsl":3845.1,"tvdMsl":2875.9},{"name":"Hugin Fm. Base","color":"#ffcb00","level":2,"mdMsl":3845.1,"tvdMsl":2875.9},{"name":"Hugin Fm. 12 VOLVE Base","color":"#f0aa23","level":3,"mdMsl":3845.1,"tvdMsl":2875.9},{"name":"Hugin Fm. Base","color":"#ffcb00","level":2,"mdMsl":3845.1,"tvdMsl":2875.9},{"name":"Hugin Fm. 12 VOLVE Top","color":"#f0aa23","level":3,"mdMsl":3879.1,"tvdMsl":2880.21},{"name":"Heather Fm. Base","color":"#ff5f30","level":2,"mdMsl":3879.1,"tvdMsl":2880.21},{"name":"Hugin Fm. Top","color":"#ffcb00","level":2,"mdMsl":3879.1,"tvdMsl":2880.21},{"name":"Heather Fm. Top","color":"#ff5f30","level":2,"mdMsl":3895.1,"tvdMsl":2882.62},{"name":"Heather Fm. Top","color":"#ff5f30","level":2,"mdMsl":3895.1,"tvdMsl":2882.62},{"name":"Hugin Fm. Top","color":"#ffcb00","level":2,"mdMsl":3897.1,"tvdMsl":2882.93},{"name":"Heather Fm. Base","color":"#ff5f30","level":2,"mdMsl":3897.1,"tvdMsl":2882.93},{"name":"Hugin Fm. 12 VOLVE Top","color":"#f0aa23","level":3,"mdMsl":3897.1,"tvdMsl":2882.93},{"name":"Hugin Fm. 11 VOLVE Top","color":"#ffa500","level":3,"mdMsl":3972.3,"tvdMsl":2897.82},{"name":"Hugin Fm. 12 VOLVE Base","color":"#f0aa23","level":3,"mdMsl":3972.3,"tvdMsl":2897.82},{"name":"Hugin Fm. 10 VOLVE Top","color":"#ffaaa2","level":3,"mdMsl":4008.1,"tvdMsl":2906.49},{"name":"Hugin Fm. 11 VOLVE Base","color":"#ffa500","level":3,"mdMsl":4008.1,"tvdMsl":2906.49},{"name":"Hugin Fm. 9 VOLVE Top","color":"#ff9579","level":3,"mdMsl":4037.1,"tvdMsl":2913.59},{"name":"Hugin Fm. 10 VOLVE Base","color":"#ffaaa2","level":3,"mdMsl":4037.1,"tvdMsl":2913.59},{"name":"Hugin Fm. 9 VOLVE Base","color":"#ff9579","level":3,"mdMsl":4053.1,"tvdMsl":2917.31},{"name":"Hugin Fm. 9 VOLVE Base","color":"#ff9579","level":3,"mdMsl":4053.1,"tvdMsl":2917.31},{"name":"Hugin Fm. Base","color":"#ffcb00","level":2,"mdMsl":4053.1,"tvdMsl":2917.31},{"name":"Hugin Fm. Base","color":"#ffcb00","level":2,"mdMsl":4053.1,"tvdMsl":2917.31},{"name":"Hugin Fm. 9 VOLVE Top","color":"#ff9579","level":3,"mdMsl":4132.7,"tvdMsl":2933.64},{"name":"Hugin Fm. 10 VOLVE Base","color":"#ffaaa2","level":3,"mdMsl":4132.7,"tvdMsl":2933.64},{"name":"Hugin Fm. 11 VOLVE Base","color":"#ffa500","level":3,"mdMsl":4183.1,"tvdMsl":2942.48},{"name":"Hugin Fm. 10 VOLVE Top","color":"#ffaaa2","level":3,"mdMsl":4183.1,"tvdMsl":2942.48},{"name":"Hugin Fm. 12 VOLVE Base","color":"#f0aa23","level":3,"mdMsl":4282.1,"tvdMsl":2961.78},{"name":"Hugin Fm. 11 VOLVE Top","color":"#ffa500","level":3,"mdMsl":4282.1,"tvdMsl":2961.78},{"name":"Hugin Fm. 12 VOLVE Top","color":"#f0aa23","level":3,"mdMsl":4319.1,"tvdMsl":2970.87},{"name":"Hugin Fm. Top","color":"#ffcb00","level":2,"mdMsl":4319.1,"tvdMsl":2970.87},{"name":"Heather Fm. Base","color":"#ff5f30","level":2,"mdMsl":4319.1,"tvdMsl":2970.87},{"name":"Heather Fm. Top","color":"#ff5f30","level":2,"mdMsl":4345.1,"tvdMsl":2978.5},{"name":"Heather Fm. Top","color":"#ff5f30","level":2,"mdMsl":4345.1,"tvdMsl":2978.5},{"name":"Hugin Fm. Top","color":"#ffcb00","level":2,"mdMsl":4428.6,"tvdMsl":3010.74},{"name":"Hugin Fm. 12 VOLVE Top","color":"#f0aa23","level":3,"mdMsl":4428.6,"tvdMsl":3010.74},{"name":"Heather Fm. Base","color":"#ff5f30","level":2,"mdMsl":4428.6,"tvdMsl":3010.74},{"name":"Hugin Fm. 11 VOLVE Top","color":"#ffa500","level":3,"mdMsl":4455.1,"tvdMsl":3023.86},{"name":"Hugin Fm. 12 VOLVE Base","color":"#f0aa23","level":3,"mdMsl":4455.1,"tvdMsl":3023.86},{"name":"Hugin Fm. 11 VOLVE Base","color":"#ffa500","level":3,"mdMsl":4500.1,"tvdMsl":3048.45},{"name":"Hugin Fm. 10 VOLVE Top","color":"#ffaaa2","level":3,"mdMsl":4500.1,"tvdMsl":3048.45},{"name":"Hugin Fm. 9 VOLVE Top","color":"#ff9579","level":3,"mdMsl":4518.1,"tvdMsl":3058.98},{"name":"Hugin Fm. 10 VOLVE Base","color":"#ffaaa2","level":3,"mdMsl":4518.1,"tvdMsl":3058.98},{"name":"Hugin Fm. 8 VOLVE Top","color":"#ffc0cb","level":3,"mdMsl":4546.1,"tvdMsl":3076.6},{"name":"Hugin Fm. 9 VOLVE Base","color":"#ff9579","level":3,"mdMsl":4546.1,"tvdMsl":3076.6},{"name":"Hugin Fm. 8 VOLVE Base","color":"#ffc0cb","level":3,"mdMsl":4592.1,"tvdMsl":3107.59},{"name":"Hugin Fm. 7 VOLVE Top","color":"#ffb5c5","level":3,"mdMsl":4592.1,"tvdMsl":3107.59},{"name":"Hugin Fm. 7 VOLVE Base","color":"#ffb5c5","level":3,"mdMsl":4626.6,"tvdMsl":3132.96},{"name":"Hugin Fm. 6 VOLVE Top","color":"#e9d0a8","level":3,"mdMsl":4626.6,"tvdMsl":3132.96},{"name":"Hugin Fm. 5 VOLVE Top","color":"#d2b48c","level":3,"mdMsl":4643.1,"tvdMsl":3145.49},{"name":"Hugin Fm. 6 VOLVE Base","color":"#e9d0a8","level":3,"mdMsl":4643.1,"tvdMsl":3145.49},{"name":"Hugin Fm. 5 VOLVE Base","color":"#d2b48c","level":3,"mdMsl":4646.1,"tvdMsl":3147.83},{"name":"Hugin Fm. 4 VOLVE Top","color":"#c49f74","level":3,"mdMsl":4646.1,"tvdMsl":3147.83},{"name":"Hugin Fm. 3 VOLVE Top","color":"#bd845c","level":3,"mdMsl":4655.1,"tvdMsl":3154.86},{"name":"Hugin Fm. 4 VOLVE Base","color":"#c49f74","level":3,"mdMsl":4655.1,"tvdMsl":3154.86},{"name":"Hugin Fm. 3 VOLVE Base","color":"#bd845c","level":3,"mdMsl":4660.1,"tvdMsl":3158.76},{"name":"Hugin Fm. 2 VOLVE Top","color":"#bb663e","level":3,"mdMsl":4660.1,"tvdMsl":3158.76},{"name":"Hugin Fm. 1 VOLVE Top","color":"#bc4830","level":3,"mdMsl":4670.1,"tvdMsl":3166.56},{"name":"Hugin Fm. 2 VOLVE Base","color":"#bb663e","level":3,"mdMsl":4670.1,"tvdMsl":3166.56},{"name":"Hugin Fm. Base","color":"#ffcb00","level":2,"mdMsl":4677.1,"tvdMsl":3172.06},{"name":"Hugin Fm. 1 VOLVE Base","color":"#bc4830","level":3,"mdMsl":4677.1,"tvdMsl":3172.06},{"name":"Sleipner Fm. Top","color":"#ffff00","level":2,"mdMsl":4677.1,"tvdMsl":3172.06},{"name":"VESTLAND GP. Base","color":"#d167cb","level":1,"mdMsl":4715.1,"tvdMsl":3202.4},{"name":"Sleipner Fm. Base","color":"#ffff00","level":2,"mdMsl":4715.1,"tvdMsl":3202.4}],"ad215042-03f7-2b7e-e053-c818a488c79a":[{"name":"NORDLAND GP. Top","color":"#ffe500","level":1,"mdMsl":91.1,"tvdMsl":91.1},{"name":"Utsira Fm. Top","color":"#fff200","level":2,"mdMsl":843.73,"tvdMsl":823.41},{"name":"NORDLAND GP. Base","color":"#ffe500","level":1,"mdMsl":1042.92,"tvdMsl":1009.78},{"name":"Utsira Fm. Base","color":"#fff200","level":2,"mdMsl":1042.92,"tvdMsl":1009.78},{"name":"HORDALAND GP. Top","color":"#009024","level":1,"mdMsl":1042.92,"tvdMsl":1009.78},{"name":"Skade Fm. Top","color":"#00a636","level":2,"mdMsl":1218.82,"tvdMsl":1170.13},{"name":"Skade Fm. Base","color":"#00a636","level":2,"mdMsl":1321.88,"tvdMsl":1260.61},{"name":"Grid Fm. Top","color":"#00bc48","level":2,"mdMsl":2247.28,"tvdMsl":2028.38},{"name":"Grid Fm. Base","color":"#00bc48","level":2,"mdMsl":2327.23,"tvdMsl":2095.2},{"name":"Balder Fm. Top","color":"#bc4830","level":2,"mdMsl":2467.26,"tvdMsl":2212.54},{"name":"ROGALAND GP. Top","color":"#b22222","level":1,"mdMsl":2467.26,"tvdMsl":2212.54},{"name":"HORDALAND GP. Base","color":"#009024","level":1,"mdMsl":2467.26,"tvdMsl":2212.54},{"name":"Balder Fm. Base","color":"#bc4830","level":2,"mdMsl":2548.66,"tvdMsl":2281.82},{"name":"Sele Fm. Top","color":"#bd845c","level":2,"mdMsl":2548.66,"tvdMsl":2281.82},{"name":"Lista Fm. Top","color":"#c49f74","level":2,"mdMsl":2622.35,"tvdMsl":2344.79},{"name":"Sele Fm. Base","color":"#bd845c","level":2,"mdMsl":2622.35,"tvdMsl":2344.79},{"name":"Lista Fm. Base","color":"#c49f74","level":2,"mdMsl":2732.44,"tvdMsl":2439.09},{"name":"Ty Fm. Top","color":"#d2b48c","level":2,"mdMsl":2732.44,"tvdMsl":2439.09},{"name":"Ekofisk Fm. Top","color":"#0000c3","level":2,"mdMsl":2844.11,"tvdMsl":2534.93},{"name":"Ty Fm. Base","color":"#d2b48c","level":2,"mdMsl":2844.11,"tvdMsl":2534.93},{"name":"ROGALAND GP. Base","color":"#b22222","level":1,"mdMsl":2844.11,"tvdMsl":2534.93},{"name":"SHETLAND GP. Top","color":"#000080","level":1,"mdMsl":2844.11,"tvdMsl":2534.93},{"name":"Ekofisk Fm. Base","color":"#0000c3","level":2,"mdMsl":2875.02,"tvdMsl":2561.19},{"name":"Tor Fm. Top","color":"#006dff","level":2,"mdMsl":2875.02,"tvdMsl":2561.19},{"name":"Hod Fm. Top","color":"#00b6ff","level":2,"mdMsl":3028.66,"tvdMsl":2685.63},{"name":"Tor Fm. Base","color":"#006dff","level":2,"mdMsl":3028.66,"tvdMsl":2685.63},{"name":"Hod Fm. Base","color":"#00b6ff","level":2,"mdMsl":3127.02,"tvdMsl":2764.83},{"name":"Blodoeks Fm. Top","color":"#00daff","level":2,"mdMsl":3127.02,"tvdMsl":2764.83},{"name":"Blodoeks Fm. Base","color":"#00daff","level":2,"mdMsl":3179.98,"tvdMsl":2809},{"name":"Hidra Fm. Top","color":"#00ea4c","level":2,"mdMsl":3179.98,"tvdMsl":2809},{"name":"Hidra Fm. Base","color":"#00ea4c","level":2,"mdMsl":3191.22,"tvdMsl":2818.61},{"name":"Roedby Fm. Top","color":"#c14dcd","level":2,"mdMsl":3191.22,"tvdMsl":2818.61},{"name":"CROMER KNOLL GP. Top","color":"#b233cf","level":1,"mdMsl":3191.22,"tvdMsl":2818.61},{"name":"SHETLAND GP. Base","color":"#000080","level":1,"mdMsl":3191.22,"tvdMsl":2818.61},{"name":"Roedby Fm. Base","color":"#c14dcd","level":2,"mdMsl":3216.09,"tvdMsl":2840.2},{"name":"Aasgard Fm. Top","color":"#e081c9","level":2,"mdMsl":3216.09,"tvdMsl":2840.2},{"name":"Aasgard Fm. Base","color":"#e081c9","level":2,"mdMsl":3251.3,"tvdMsl":2870.84},{"name":"Draupne Fm. Top","color":"#ff4f20","level":2,"mdMsl":3251.3,"tvdMsl":2870.84},{"name":"VIKING GP. Top","color":"#ff0000","level":1,"mdMsl":3251.3,"tvdMsl":2870.84},{"name":"CROMER KNOLL GP. Base","color":"#b233cf","level":1,"mdMsl":3251.3,"tvdMsl":2870.84},{"name":"Heather Fm. Top","color":"#ff5f30","level":2,"mdMsl":3345.15,"tvdMsl":2947.94},{"name":"Draupne Fm. Base","color":"#ff4f20","level":2,"mdMsl":3345.15,"tvdMsl":2947.94},{"name":"Heather Fm. Sand VOLVE Top","color":"#ffe500","level":3,"mdMsl":3374.1,"tvdMsl":2969.25},{"name":"VIKING GP. Base","color":"#ff0000","level":1,"mdMsl":3418.21,"tvdMsl":3000.19},{"name":"Heather Fm. Sand VOLVE Base","color":"#ffe500","level":3,"mdMsl":3418.21,"tvdMsl":3000.19},{"name":"Hugin Fm. Top","color":"#ffcb00","level":2,"mdMsl":3418.21,"tvdMsl":3000.19},{"name":"VESTLAND GP. Top","color":"#d167cb","level":1,"mdMsl":3418.21,"tvdMsl":3000.19},{"name":"Heather Fm. Base","color":"#ff5f30","level":2,"mdMsl":3418.21,"tvdMsl":3000.19},{"name":"Sleipner Fm. Top","color":"#ffff00","level":2,"mdMsl":3658.03,"tvdMsl":3144.02},{"name":"Hugin Fm. Base","color":"#ffcb00","level":2,"mdMsl":3658.03,"tvdMsl":3144.02},{"name":"Sleipner Fm. Base","color":"#ffff00","level":2,"mdMsl":3737.1,"tvdMsl":3191.53},{"name":"VESTLAND GP. Base","color":"#d167cb","level":1,"mdMsl":3737.1,"tvdMsl":3191.53}],"ad215042-03f6-2b7e-e053-c818a488c79a":[{"name":"NORDLAND GP. Top","color":"#ffe500","level":1,"mdMsl":91.1,"tvdMsl":91.1},{"name":"Utsira Fm. Top","color":"#fff200","level":2,"mdMsl":832.1,"tvdMsl":823.09},{"name":"NORDLAND GP. Base","color":"#ffe500","level":1,"mdMsl":1020.1,"tvdMsl":1005.31},{"name":"Utsira Fm. Base","color":"#fff200","level":2,"mdMsl":1020.1,"tvdMsl":1005.31},{"name":"HORDALAND GP. Top","color":"#009024","level":1,"mdMsl":1020.1,"tvdMsl":1005.31},{"name":"Skade Fm. Top","color":"#00a636","level":2,"mdMsl":1151.1,"tvdMsl":1131.75},{"name":"Skade Fm. Base","color":"#00a636","level":2,"mdMsl":1278.1,"tvdMsl":1253.33},{"name":"Grid Fm. Top","color":"#00bc48","level":2,"mdMsl":2140.1,"tvdMsl":2040.73},{"name":"Grid Fm. Base","color":"#00bc48","level":2,"mdMsl":2273.1,"tvdMsl":2159.76},{"name":"HORDALAND GP. Base","color":"#009024","level":1,"mdMsl":2325.1,"tvdMsl":2206.28},{"name":"ROGALAND GP. Top","color":"#b22222","level":1,"mdMsl":2325.1,"tvdMsl":2206.28},{"name":"Balder Fm. Top","color":"#bc4830","level":2,"mdMsl":2325.1,"tvdMsl":2206.28},{"name":"Sele Fm. Top","color":"#bd845c","level":2,"mdMsl":2394.1,"tvdMsl":2267.98},{"name":"Balder Fm. Base","color":"#bc4830","level":2,"mdMsl":2394.1,"tvdMsl":2267.98},{"name":"Sele Fm. Base","color":"#bd845c","level":2,"mdMsl":2466.1,"tvdMsl":2332.11},{"name":"Lista Fm. Top","color":"#c49f74","level":2,"mdMsl":2466.1,"tvdMsl":2332.11},{"name":"Lista Fm. Base","color":"#c49f74","level":2,"mdMsl":2562.1,"tvdMsl":2417.45},{"name":"Ty Fm. Top","color":"#d2b48c","level":2,"mdMsl":2562.1,"tvdMsl":2417.45},{"name":"Ty Fm. Base","color":"#d2b48c","level":2,"mdMsl":2687.1,"tvdMsl":2527.75},{"name":"Ekofisk Fm. Top","color":"#0000c3","level":2,"mdMsl":2687.1,"tvdMsl":2527.75},{"name":"SHETLAND GP. Top","color":"#000080","level":1,"mdMsl":2687.1,"tvdMsl":2527.75},{"name":"ROGALAND GP. Base","color":"#b22222","level":1,"mdMsl":2687.1,"tvdMsl":2527.75},{"name":"Tor Fm. Top","color":"#006dff","level":2,"mdMsl":2710.1,"tvdMsl":2547.59},{"name":"Ekofisk Fm. Base","color":"#0000c3","level":2,"mdMsl":2710.1,"tvdMsl":2547.59},{"name":"Tor Fm. Base","color":"#006dff","level":2,"mdMsl":2884.1,"tvdMsl":2695.15},{"name":"Hod Fm. Top","color":"#00b6ff","level":2,"mdMsl":2884.1,"tvdMsl":2695.15},{"name":"Hod Fm. Base","color":"#00b6ff","level":2,"mdMsl":2950.1,"tvdMsl":2749.51},{"name":"Blodoeks Fm. Top","color":"#00daff","level":2,"mdMsl":2950.1,"tvdMsl":2749.51},{"name":"Hidra Fm. Top","color":"#00ea4c","level":2,"mdMsl":2986.1,"tvdMsl":2778.66},{"name":"Blodoeks Fm. Base","color":"#00daff","level":2,"mdMsl":2986.1,"tvdMsl":2778.66},{"name":"SHETLAND GP. Base","color":"#000080","level":1,"mdMsl":2999.1,"tvdMsl":2789.02},{"name":"Hidra Fm. Base","color":"#00ea4c","level":2,"mdMsl":2999.1,"tvdMsl":2789.02},{"name":"CROMER KNOLL GP. Top","color":"#b233cf","level":1,"mdMsl":2999.1,"tvdMsl":2789.02},{"name":"Roedby Fm. Top","color":"#c14dcd","level":2,"mdMsl":2999.1,"tvdMsl":2789.02},{"name":"Aasgard Fm. Top","color":"#e081c9","level":2,"mdMsl":3010.1,"tvdMsl":2797.78},{"name":"Roedby Fm. Base","color":"#c14dcd","level":2,"mdMsl":3010.1,"tvdMsl":2797.78},{"name":"Aasgard Fm. Base","color":"#e081c9","level":2,"mdMsl":3046.1,"tvdMsl":2825.99},{"name":"CROMER KNOLL GP. Base","color":"#b233cf","level":1,"mdMsl":3046.1,"tvdMsl":2825.99},{"name":"VIKING GP. Top","color":"#ff0000","level":1,"mdMsl":3046.1,"tvdMsl":2825.99},{"name":"Draupne Fm. Top","color":"#ff4f20","level":2,"mdMsl":3046.1,"tvdMsl":2825.99},{"name":"Draupne Fm. Base","color":"#ff4f20","level":2,"mdMsl":3095.1,"tvdMsl":2862.91},{"name":"Heather Fm. Top","color":"#ff5f30","level":2,"mdMsl":3095.1,"tvdMsl":2862.91},{"name":"Heather Fm. Sand VOLVE Top","color":"#ffe500","level":3,"mdMsl":3167.1,"tvdMsl":2913.2},{"name":"Heather Fm. Base","color":"#ff5f30","level":2,"mdMsl":3194.41,"tvdMsl":2931.04},{"name":"Heather Fm. Sand VOLVE Base","color":"#ffe500","level":3,"mdMsl":3194.41,"tvdMsl":2931.04},{"name":"VIKING GP. Base","color":"#ff0000","level":1,"mdMsl":3194.41,"tvdMsl":2931.04},{"name":"Hugin Fm. Top","color":"#ffcb00","level":2,"mdMsl":3194.41,"tvdMsl":2931.04},{"name":"VESTLAND GP. Top","color":"#d167cb","level":1,"mdMsl":3194.41,"tvdMsl":2931.04},{"name":"Sleipner Fm. Top","color":"#ffff00","level":2,"mdMsl":3368.63,"tvdMsl":3033.32},{"name":"Hugin Fm. Base","color":"#ffcb00","level":2,"mdMsl":3368.63,"tvdMsl":3033.32},{"name":"Skagerrak Fm. Top","color":"#007a12","level":2,"mdMsl":3431.39,"tvdMsl":3069.45},{"name":"HEGRE GP. Top","color":"#006400","level":1,"mdMsl":3431.39,"tvdMsl":3069.45},{"name":"Sleipner Fm. Base","color":"#ffff00","level":2,"mdMsl":3431.39,"tvdMsl":3069.45},{"name":"VESTLAND GP. Base","color":"#d167cb","level":1,"mdMsl":3431.39,"tvdMsl":3069.45},{"name":"Skagerrak Fm. Base","color":"#007a12","level":2,"mdMsl":3455.1,"tvdMsl":3083.16},{"name":"HEGRE GP. Base","color":"#006400","level":1,"mdMsl":3455.1,"tvdMsl":3083.16}],"ad215042-03eb-2b7e-e053-c818a488c79a":[{"name":"NORDLAND GP. Top","color":"#ffe500","level":1,"mdMsl":91.1,"tvdMsl":91.1},{"name":"Utsira Fm. Top","color":"#fff200","level":2,"mdMsl":829.9,"tvdMsl":827.14},{"name":"NORDLAND GP. Base","color":"#ffe500","level":1,"mdMsl":1015.8,"tvdMsl":1009.76},{"name":"Utsira Fm. Base","color":"#fff200","level":2,"mdMsl":1015.8,"tvdMsl":1009.76},{"name":"HORDALAND GP. Top","color":"#009024","level":1,"mdMsl":1015.8,"tvdMsl":1009.76},{"name":"Skade Fm. Top","color":"#00a636","level":2,"mdMsl":1215.1,"tvdMsl":1197.62},{"name":"Skade Fm. Base","color":"#00a636","level":2,"mdMsl":1275.4,"tvdMsl":1253.8},{"name":"Grid Fm. Top","color":"#00bc48","level":2,"mdMsl":2166.1,"tvdMsl":2065.09},{"name":"Grid Fm. Base","color":"#00bc48","level":2,"mdMsl":2228.1,"tvdMsl":2126.06},{"name":"HORDALAND GP. Base","color":"#009024","level":1,"mdMsl":2318.1,"tvdMsl":2212.47},{"name":"Balder Fm. Top","color":"#bc4830","level":2,"mdMsl":2318.1,"tvdMsl":2212.47},{"name":"ROGALAND GP. Top","color":"#b22222","level":1,"mdMsl":2380.1,"tvdMsl":2269.83},{"name":"Sele Fm. Top","color":"#bd845c","level":2,"mdMsl":2380.1,"tvdMsl":2269.83},{"name":"Balder Fm. Base","color":"#bc4830","level":2,"mdMsl":2380.1,"tvdMsl":2269.83},{"name":"Sele Fm. Base","color":"#bd845c","level":2,"mdMsl":2456.1,"tvdMsl":2336.63},{"name":"Lista Fm. Top","color":"#c49f74","level":2,"mdMsl":2456.1,"tvdMsl":2336.63},{"name":"Ty Fm. Top","color":"#d2b48c","level":2,"mdMsl":2569.4,"tvdMsl":2427.32},{"name":"Lista Fm. Base","color":"#c49f74","level":2,"mdMsl":2569.4,"tvdMsl":2427.32},{"name":"Ekofisk Fm. Top","color":"#0000c3","level":2,"mdMsl":2768,"tvdMsl":2550.64},{"name":"Ty Fm. Base","color":"#d2b48c","level":2,"mdMsl":2768,"tvdMsl":2550.64},{"name":"ROGALAND GP. Base","color":"#b22222","level":1,"mdMsl":2768,"tvdMsl":2550.64},{"name":"SHETLAND GP. Top","color":"#000080","level":1,"mdMsl":2768,"tvdMsl":2550.64},{"name":"Tor Fm. Top","color":"#006dff","level":2,"mdMsl":2797.3,"tvdMsl":2564.7},{"name":"Ekofisk Fm. Base","color":"#0000c3","level":2,"mdMsl":2797.3,"tvdMsl":2564.7},{"name":"Tor Fm. Base","color":"#006dff","level":2,"mdMsl":3272.9,"tvdMsl":2676.41},{"name":"Hod Fm. Top","color":"#00b6ff","level":2,"mdMsl":3272.9,"tvdMsl":2676.41},{"name":"Blodoeks Fm. Top","color":"#00daff","level":2,"mdMsl":3646.1,"tvdMsl":2733.99},{"name":"Hod Fm. Base","color":"#00b6ff","level":2,"mdMsl":3646.1,"tvdMsl":2733.99},{"name":"Blodoeks Fm. Base","color":"#00daff","level":2,"mdMsl":3919.43,"tvdMsl":2837.66},{"name":"Hidra Fm. Top","color":"#00ea4c","level":2,"mdMsl":3919.43,"tvdMsl":2837.66},{"name":"Hidra Fm. Base","color":"#00ea4c","level":2,"mdMsl":3932.1,"tvdMsl":2845.43},{"name":"SHETLAND GP. Base","color":"#000080","level":1,"mdMsl":3932.1,"tvdMsl":2845.43},{"name":"Roedby Fm. Top","color":"#c14dcd","level":2,"mdMsl":3932.1,"tvdMsl":2845.43},{"name":"CROMER KNOLL GP. Top","color":"#b233cf","level":1,"mdMsl":3932.1,"tvdMsl":2845.43},{"name":"Roedby Fm. Base","color":"#c14dcd","level":2,"mdMsl":4064.3,"tvdMsl":2937.76},{"name":"Aasgard Fm. Top","color":"#e081c9","level":2,"mdMsl":4064.3,"tvdMsl":2937.76},{"name":"CROMER KNOLL GP. Base","color":"#b233cf","level":1,"mdMsl":4091.5,"tvdMsl":2959.01},{"name":"Aasgard Fm. Base","color":"#e081c9","level":2,"mdMsl":4091.5,"tvdMsl":2959.01},{"name":"Draupne Fm. Top","color":"#ff4f20","level":2,"mdMsl":4091.5,"tvdMsl":2959.01},{"name":"VIKING GP. Top","color":"#ff0000","level":1,"mdMsl":4091.5,"tvdMsl":2959.01},{"name":"Heather Fm. Top","color":"#ff5f30","level":2,"mdMsl":4279.8,"tvdMsl":3125.18},{"name":"Draupne Fm. Base","color":"#ff4f20","level":2,"mdMsl":4279.8,"tvdMsl":3125.18},{"name":"Heather Fm. Sand VOLVE Top","color":"#ffe500","level":3,"mdMsl":4322.2,"tvdMsl":3166.07},{"name":"VIKING GP. Base","color":"#ff0000","level":1,"mdMsl":4338.1,"tvdMsl":3181.5},{"name":"Heather Fm. Sand VOLVE Base","color":"#ffe500","level":3,"mdMsl":4338.1,"tvdMsl":3181.5},{"name":"VESTLAND GP. Top","color":"#d167cb","level":1,"mdMsl":4338.1,"tvdMsl":3181.5},{"name":"Heather Fm. Base","color":"#ff5f30","level":2,"mdMsl":4338.1,"tvdMsl":3181.5},{"name":"Hugin Fm. Top","color":"#ffcb00","level":2,"mdMsl":4338.1,"tvdMsl":3181.5},{"name":"Hugin Fm. 12 VOLVE Top","color":"#f0aa23","level":3,"mdMsl":4338.1,"tvdMsl":3181.5},{"name":"Hugin Fm. 11 VOLVE Top","color":"#ffa500","level":3,"mdMsl":4344.1,"tvdMsl":3187.33},{"name":"Hugin Fm. 12 VOLVE Base","color":"#f0aa23","level":3,"mdMsl":4344.1,"tvdMsl":3187.33},{"name":"Hugin Fm. 11 VOLVE Base","color":"#ffa500","level":3,"mdMsl":4352.1,"tvdMsl":3195.1},{"name":"Hugin Fm. 10 VOLVE Top","color":"#ffaaa2","level":3,"mdMsl":4352.1,"tvdMsl":3195.1},{"name":"Hugin Fm. 10 VOLVE Base","color":"#ffaaa2","level":3,"mdMsl":4360.1,"tvdMsl":3202.87},{"name":"Hugin Fm. 9 VOLVE Top","color":"#ff9579","level":3,"mdMsl":4360.1,"tvdMsl":3202.87},{"name":"Hugin Fm. 9 VOLVE Base","color":"#ff9579","level":3,"mdMsl":4367.1,"tvdMsl":3209.66},{"name":"Hugin Fm. 8 VOLVE Top","color":"#ffc0cb","level":3,"mdMsl":4367.1,"tvdMsl":3209.66},{"name":"Hugin Fm. 8 VOLVE Base","color":"#ffc0cb","level":3,"mdMsl":4389.1,"tvdMsl":3231.01},{"name":"Hugin Fm. 7 VOLVE Top","color":"#ffb5c5","level":3,"mdMsl":4389.1,"tvdMsl":3231.01},{"name":"Hugin Fm. 6 VOLVE Top","color":"#e9d0a8","level":3,"mdMsl":4400.1,"tvdMsl":3241.7},{"name":"Hugin Fm. 7 VOLVE Base","color":"#ffb5c5","level":3,"mdMsl":4400.1,"tvdMsl":3241.7},{"name":"Hugin Fm. 5 VOLVE Top","color":"#d2b48c","level":3,"mdMsl":4408.6,"tvdMsl":3249.95},{"name":"Hugin Fm. 6 VOLVE Base","color":"#e9d0a8","level":3,"mdMsl":4408.6,"tvdMsl":3249.95},{"name":"Hugin Fm. 4 VOLVE Top","color":"#c49f74","level":3,"mdMsl":4411.1,"tvdMsl":3252.38},{"name":"Hugin Fm. 5 VOLVE Base","color":"#d2b48c","level":3,"mdMsl":4411.1,"tvdMsl":3252.38},{"name":"Hugin Fm. 4 VOLVE Base","color":"#c49f74","level":3,"mdMsl":4416.1,"tvdMsl":3257.23},{"name":"Hugin Fm. 3 VOLVE Top","color":"#bd845c","level":3,"mdMsl":4416.1,"tvdMsl":3257.23},{"name":"Hugin Fm. 3 VOLVE Base","color":"#bd845c","level":3,"mdMsl":4421.5,"tvdMsl":3262.47},{"name":"Hugin Fm. 2 VOLVE Top","color":"#bb663e","level":3,"mdMsl":4421.5,"tvdMsl":3262.47},{"name":"Hugin Fm. 1 VOLVE Top","color":"#bc4830","level":3,"mdMsl":4430.1,"tvdMsl":3270.82},{"name":"Hugin Fm. 2 VOLVE Base","color":"#bb663e","level":3,"mdMsl":4430.1,"tvdMsl":3270.82},{"name":"Hugin Fm. Base","color":"#ffcb00","level":2,"mdMsl":4442.5,"tvdMsl":3282.84},{"name":"Hugin Fm. 1 VOLVE Base","color":"#bc4830","level":3,"mdMsl":4442.5,"tvdMsl":3282.84},{"name":"Sleipner Fm. Top","color":"#ffff00","level":2,"mdMsl":4442.5,"tvdMsl":3282.84},{"name":"Sleipner Fm. Base","color":"#ffff00","level":2,"mdMsl":4506.9,"tvdMsl":3345.21},{"name":"VESTLAND GP. Base","color":"#d167cb","level":1,"mdMsl":4506.9,"tvdMsl":3345.21}],"ad215042-03e6-2b7e-e053-c818a488c79a":[{"name":"NORDLAND GP. Top","color":"#ffe500","level":1,"mdMsl":91.1,"tvdMsl":91.1},{"name":"Utsira Fm. Top","color":"#fff200","level":2,"mdMsl":849.92,"tvdMsl":835.1},{"name":"NORDLAND GP. Base","color":"#ffe500","level":1,"mdMsl":1034.5,"tvdMsl":1009.04},{"name":"HORDALAND GP. Top","color":"#009024","level":1,"mdMsl":1034.5,"tvdMsl":1009.04},{"name":"Utsira Fm. Base","color":"#fff200","level":2,"mdMsl":1034.5,"tvdMsl":1009.04},{"name":"Skade Fm. Top","color":"#00a636","level":2,"mdMsl":1179.68,"tvdMsl":1140.46},{"name":"Skade Fm. Base","color":"#00a636","level":2,"mdMsl":1294.71,"tvdMsl":1240.54},{"name":"Grid Fm. Top","color":"#00bc48","level":2,"mdMsl":2282.16,"tvdMsl":2039.69},{"name":"Grid Fm. Base","color":"#00bc48","level":2,"mdMsl":2391.66,"tvdMsl":2116.99},{"name":"HORDALAND GP. Base","color":"#009024","level":1,"mdMsl":2536.15,"tvdMsl":2219.52},{"name":"Balder Fm. Top","color":"#bc4830","level":2,"mdMsl":2536.15,"tvdMsl":2219.52},{"name":"ROGALAND GP. Top","color":"#b22222","level":1,"mdMsl":2536.15,"tvdMsl":2219.52},{"name":"Balder Fm. Base","color":"#bc4830","level":2,"mdMsl":2616.39,"tvdMsl":2276.46},{"name":"Sele Fm. Top","color":"#bd845c","level":2,"mdMsl":2616.39,"tvdMsl":2276.46},{"name":"Lista Fm. Top","color":"#c49f74","level":2,"mdMsl":2702.85,"tvdMsl":2336.81},{"name":"Sele Fm. Base","color":"#bd845c","level":2,"mdMsl":2702.85,"tvdMsl":2336.81},{"name":"Lista Fm. Base","color":"#c49f74","level":2,"mdMsl":2832.65,"tvdMsl":2422.95},{"name":"Ty Fm. Top","color":"#d2b48c","level":2,"mdMsl":2843.71,"tvdMsl":2429.7},{"name":"Ekofisk Fm. Top","color":"#0000c3","level":2,"mdMsl":3210.76,"tvdMsl":2573.96},{"name":"Ty Fm. Base","color":"#d2b48c","level":2,"mdMsl":3210.76,"tvdMsl":2573.96},{"name":"SHETLAND GP. Top","color":"#000080","level":1,"mdMsl":3210.76,"tvdMsl":2573.96},{"name":"ROGALAND GP. Base","color":"#b22222","level":1,"mdMsl":3210.76,"tvdMsl":2573.96},{"name":"Tor Fm. Top","color":"#006dff","level":2,"mdMsl":3437.51,"tvdMsl":2598.05},{"name":"Ekofisk Fm. Base","color":"#0000c3","level":2,"mdMsl":3437.51,"tvdMsl":2598.05},{"name":"Hod Fm. Top","color":"#00b6ff","level":2,"mdMsl":4755.1,"tvdMsl":2698.87},{"name":"Tor Fm. Base","color":"#006dff","level":2,"mdMsl":4755.1,"tvdMsl":2698.87},{"name":"Hod Fm. Base","color":"#00b6ff","level":2,"mdMsl":4892.1,"tvdMsl":2743.54},{"name":"Blodoeks Fm. Top","color":"#00daff","level":2,"mdMsl":4892.1,"tvdMsl":2743.54},{"name":"Blodoeks Fm. Base","color":"#00daff","level":2,"mdMsl":4949.72,"tvdMsl":2773.05},{"name":"Hidra Fm. Top","color":"#00ea4c","level":2,"mdMsl":4949.72,"tvdMsl":2773.05},{"name":"Roedby Fm. Top","color":"#c14dcd","level":2,"mdMsl":4966.2,"tvdMsl":2782.21},{"name":"SHETLAND GP. Base","color":"#000080","level":1,"mdMsl":4966.2,"tvdMsl":2782.21},{"name":"CROMER KNOLL GP. Top","color":"#b233cf","level":1,"mdMsl":4966.2,"tvdMsl":2782.21},{"name":"Hidra Fm. Base","color":"#00ea4c","level":2,"mdMsl":4966.2,"tvdMsl":2782.21},{"name":"Roedby Fm. Base","color":"#c14dcd","level":2,"mdMsl":4972.49,"tvdMsl":2785.86},{"name":"Aasgard Fm. Top","color":"#e081c9","level":2,"mdMsl":4975.92,"tvdMsl":2787.85},{"name":"Draupne Fm. Top","color":"#ff4f20","level":2,"mdMsl":5001.1,"tvdMsl":2802.45},{"name":"CROMER KNOLL GP. Base","color":"#b233cf","level":1,"mdMsl":5001.1,"tvdMsl":2802.45},{"name":"Aasgard Fm. Base","color":"#e081c9","level":2,"mdMsl":5001.1,"tvdMsl":2802.45},{"name":"VIKING GP. Top","color":"#ff0000","level":1,"mdMsl":5001.5,"tvdMsl":2802.68},{"name":"Draupne Fm. Base","color":"#ff4f20","level":2,"mdMsl":5111.04,"tvdMsl":2866.26},{"name":"Heather Fm. Top","color":"#ff5f30","level":2,"mdMsl":5111.04,"tvdMsl":2866.26},{"name":"VESTLAND GP. Top","color":"#d167cb","level":1,"mdMsl":5149.32,"tvdMsl":2888.44},{"name":"Hugin Fm. Top","color":"#ffcb00","level":2,"mdMsl":5149.32,"tvdMsl":2888.44},{"name":"VIKING GP. Base","color":"#ff0000","level":1,"mdMsl":5149.32,"tvdMsl":2888.44},{"name":"Heather Fm. Base","color":"#ff5f30","level":2,"mdMsl":5149.32,"tvdMsl":2888.44},{"name":"Hugin Fm. Base","color":"#ffcb00","level":2,"mdMsl":5205.91,"tvdMsl":2921.33},{"name":"Sleipner Fm. Top","color":"#ffff00","level":2,"mdMsl":5205.91,"tvdMsl":2921.33},{"name":"VESTLAND GP. Base","color":"#d167cb","level":1,"mdMsl":5215.41,"tvdMsl":2926.87},{"name":"Sleipner Fm. Base","color":"#ffff00","level":2,"mdMsl":5215.41,"tvdMsl":2926.87},{"name":"HEGRE GP. Top","color":"#006400","level":1,"mdMsl":5215.41,"tvdMsl":2926.87},{"name":"Smith Bank Fm. Top","color":"#00ea4c","level":2,"mdMsl":5215.41,"tvdMsl":2926.87},{"name":"HEGRE GP. Base","color":"#006400","level":1,"mdMsl":5276.1,"tvdMsl":2962.11},{"name":"Smith Bank Fm. Base","color":"#00ea4c","level":2,"mdMsl":5276.1,"tvdMsl":2962.11}],"ad215042-0399-2b7e-e053-c818a488c79a":[{"name":"NORDLAND GP. Top","color":"#ffe500","level":1,"mdMsl":91.1,"tvdMsl":91.1},{"name":"Utsira Fm. Top","color":"#fff200","level":2,"mdMsl":831.6,"tvdMsl":827.68},{"name":"HORDALAND GP. Top","color":"#009024","level":1,"mdMsl":1014.4,"tvdMsl":1007.86},{"name":"Utsira Fm. Base","color":"#fff200","level":2,"mdMsl":1014.4,"tvdMsl":1007.86},{"name":"NORDLAND GP. Base","color":"#ffe500","level":1,"mdMsl":1014.4,"tvdMsl":1007.86},{"name":"Skade Fm. Top","color":"#00a636","level":2,"mdMsl":1199.1,"tvdMsl":1188.92},{"name":"Skade Fm. Base","color":"#00a636","level":2,"mdMsl":1262.6,"tvdMsl":1251.09},{"name":"Grid Fm. Top","color":"#00bc48","level":2,"mdMsl":2119.4,"tvdMsl":2031.59},{"name":"Grid Fm. Base","color":"#00bc48","level":2,"mdMsl":2250.7,"tvdMsl":2145.44},{"name":"ROGALAND GP. Top","color":"#b22222","level":1,"mdMsl":2339.5,"tvdMsl":2222.33},{"name":"HORDALAND GP. Base","color":"#009024","level":1,"mdMsl":2339.5,"tvdMsl":2222.33},{"name":"Balder Fm. Top","color":"#bc4830","level":2,"mdMsl":2339.5,"tvdMsl":2222.33},{"name":"Sele Fm. Top","color":"#bd845c","level":2,"mdMsl":2404.4,"tvdMsl":2278.45},{"name":"Balder Fm. Base","color":"#bc4830","level":2,"mdMsl":2404.4,"tvdMsl":2278.45},{"name":"Lista Fm. Top","color":"#c49f74","level":2,"mdMsl":2472.1,"tvdMsl":2336.95},{"name":"Sele Fm. Base","color":"#bd845c","level":2,"mdMsl":2472.1,"tvdMsl":2336.95},{"name":"Lista Fm. Base","color":"#c49f74","level":2,"mdMsl":2566.6,"tvdMsl":2418.68},{"name":"Ty Fm. Top","color":"#d2b48c","level":2,"mdMsl":2566.6,"tvdMsl":2418.68},{"name":"SHETLAND GP. Top","color":"#000080","level":1,"mdMsl":2715.7,"tvdMsl":2550.82},{"name":"Ty Fm. Base","color":"#d2b48c","level":2,"mdMsl":2715.7,"tvdMsl":2550.82},{"name":"Ekofisk Fm. Top","color":"#0000c3","level":2,"mdMsl":2715.7,"tvdMsl":2550.82},{"name":"ROGALAND GP. Base","color":"#b22222","level":1,"mdMsl":2715.7,"tvdMsl":2550.82},{"name":"Ekofisk Fm. Base","color":"#0000c3","level":2,"mdMsl":2735.1,"tvdMsl":2568.04},{"name":"Tor Fm. Top","color":"#006dff","level":2,"mdMsl":2735.1,"tvdMsl":2568.04},{"name":"Hod Fm. Top","color":"#00b6ff","level":2,"mdMsl":2932.1,"tvdMsl":2733.45},{"name":"Tor Fm. Base","color":"#006dff","level":2,"mdMsl":2932.1,"tvdMsl":2733.45},{"name":"Blodoeks Fm. Top","color":"#00daff","level":2,"mdMsl":3049,"tvdMsl":2816.28},{"name":"Hod Fm. Base","color":"#00b6ff","level":2,"mdMsl":3049,"tvdMsl":2816.28},{"name":"Hidra Fm. Top","color":"#00ea4c","level":2,"mdMsl":3097.9,"tvdMsl":2845.72},{"name":"Blodoeks Fm. Base","color":"#00daff","level":2,"mdMsl":3097.9,"tvdMsl":2845.72},{"name":"Roedby Fm. Top","color":"#c14dcd","level":2,"mdMsl":3138.3,"tvdMsl":2867.22},{"name":"Hidra Fm. Base","color":"#00ea4c","level":2,"mdMsl":3138.3,"tvdMsl":2867.22},{"name":"Aasgard Fm. Top","color":"#e081c9","level":2,"mdMsl":3224,"tvdMsl":2908.23},{"name":"Roedby Fm. Base","color":"#c14dcd","level":2,"mdMsl":3224,"tvdMsl":2908.23},{"name":"Draupne Fm. Top","color":"#ff4f20","level":2,"mdMsl":3303.1,"tvdMsl":2953.81},{"name":"Aasgard Fm. Base","color":"#e081c9","level":2,"mdMsl":3303.1,"tvdMsl":2953.81},{"name":"VIKING GP. Top","color":"#ff0000","level":1,"mdMsl":3303.1,"tvdMsl":2953.81},{"name":"Heather Fm. Sand VOLVE Top","color":"#ffe500","level":3,"mdMsl":3374.5,"tvdMsl":3003.21},{"name":"Heather Fm. Top","color":"#ff5f30","level":2,"mdMsl":3374.5,"tvdMsl":3003.21},{"name":"Draupne Fm. Base","color":"#ff4f20","level":2,"mdMsl":3374.5,"tvdMsl":3003.21},{"name":"Hugin Fm. Top","color":"#ffcb00","level":2,"mdMsl":3380.1,"tvdMsl":3007.25},{"name":"VESTLAND GP. Top","color":"#d167cb","level":1,"mdMsl":3380.1,"tvdMsl":3007.25},{"name":"Heather Fm. Base","color":"#ff5f30","level":2,"mdMsl":3380.1,"tvdMsl":3007.25},{"name":"VIKING GP. Base","color":"#ff0000","level":1,"mdMsl":3380.1,"tvdMsl":3007.25},{"name":"Hugin Fm. 9 VOLVE Top","color":"#ff9579","level":3,"mdMsl":3399.8,"tvdMsl":3021.43},{"name":"Sleipner Fm. Top","color":"#ffff00","level":2,"mdMsl":3445.3,"tvdMsl":3054.23},{"name":"Hugin Fm. Base","color":"#ffcb00","level":2,"mdMsl":3445.3,"tvdMsl":3054.23},{"name":"Sleipner Fm. Base","color":"#ffff00","level":2,"mdMsl":3488.8,"tvdMsl":3085.46},{"name":"Skagerrak Fm. Top","color":"#007a12","level":2,"mdMsl":3488.8,"tvdMsl":3085.46},{"name":"HEGRE GP. Top","color":"#006400","level":1,"mdMsl":3488.8,"tvdMsl":3085.46},{"name":"VESTLAND GP. Base","color":"#d167cb","level":1,"mdMsl":3488.8,"tvdMsl":3085.46},{"name":"Smith Bank Fm. Top","color":"#00ea4c","level":2,"mdMsl":3553.1,"tvdMsl":3131.63},{"name":"Skagerrak Fm. Base","color":"#007a12","level":2,"mdMsl":3553.1,"tvdMsl":3131.63},{"name":"HEGRE GP. Base","color":"#006400","level":1,"mdMsl":3627.1,"tvdMsl":3184.81},{"name":"Smith Bank Fm. Base","color":"#00ea4c","level":2,"mdMsl":3627.1,"tvdMsl":3184.81}],"ad215042-f3be-2b7e-e053-c818a488c79a":[{"name":"NORDLAND GP. Top","color":"#ffe500","level":1,"mdMsl":91.1,"tvdMsl":91.1},{"name":"NORDLAND GP. Base","color":"#ffe500","level":1,"mdMsl":292.1,"tvdMsl":292.09}],"ad215042-ef86-2b7e-e053-c818a488c79a":[{"name":"NORDLAND GP. Top","color":"#ffe500","level":1,"mdMsl":91.1,"tvdMsl":91.1},{"name":"Utsira Fm. Top","color":"#fff200","level":2,"mdMsl":831.6,"tvdMsl":827.68},{"name":"NORDLAND GP. Base","color":"#ffe500","level":1,"mdMsl":1014.4,"tvdMsl":1007.86},{"name":"HORDALAND GP. Top","color":"#009024","level":1,"mdMsl":1014.4,"tvdMsl":1007.86},{"name":"Utsira Fm. Base","color":"#fff200","level":2,"mdMsl":1014.4,"tvdMsl":1007.86},{"name":"Skade Fm. Top","color":"#00a636","level":2,"mdMsl":1199.1,"tvdMsl":1188.92},{"name":"Skade Fm. Base","color":"#00a636","level":2,"mdMsl":1262.6,"tvdMsl":1251.09},{"name":"Grid Fm. Top","color":"#00bc48","level":2,"mdMsl":2119.4,"tvdMsl":2031.59},{"name":"Grid Fm. Base","color":"#00bc48","level":2,"mdMsl":2250.7,"tvdMsl":2145.44},{"name":"ROGALAND GP. Top","color":"#b22222","level":1,"mdMsl":2339.5,"tvdMsl":2222.33},{"name":"Balder Fm. Top","color":"#bc4830","level":2,"mdMsl":2339.5,"tvdMsl":2222.33},{"name":"HORDALAND GP. Base","color":"#009024","level":1,"mdMsl":2339.5,"tvdMsl":2222.33},{"name":"Sele Fm. Top","color":"#bd845c","level":2,"mdMsl":2404.4,"tvdMsl":2278.45},{"name":"Balder Fm. Base","color":"#bc4830","level":2,"mdMsl":2404.4,"tvdMsl":2278.45},{"name":"Sele Fm. Base","color":"#bd845c","level":2,"mdMsl":2472.1,"tvdMsl":2336.95},{"name":"Lista Fm. Top","color":"#c49f74","level":2,"mdMsl":2472.1,"tvdMsl":2336.95},{"name":"Ty Fm. Top","color":"#d2b48c","level":2,"mdMsl":2564.8,"tvdMsl":2417.24},{"name":"Lista Fm. Base","color":"#c49f74","level":2,"mdMsl":2564.8,"tvdMsl":2417.24},{"name":"Ekofisk Fm. Top","color":"#0000c3","level":2,"mdMsl":2716.1,"tvdMsl":2552.43},{"name":"SHETLAND GP. Top","color":"#000080","level":1,"mdMsl":2716.1,"tvdMsl":2552.43},{"name":"Ty Fm. Base","color":"#d2b48c","level":2,"mdMsl":2716.1,"tvdMsl":2552.43},{"name":"ROGALAND GP. Base","color":"#b22222","level":1,"mdMsl":2716.1,"tvdMsl":2552.43},{"name":"Tor Fm. Top","color":"#006dff","level":2,"mdMsl":2734.1,"tvdMsl":2568.62},{"name":"Ekofisk Fm. Base","color":"#0000c3","level":2,"mdMsl":2734.1,"tvdMsl":2568.62},{"name":"Tor Fm. Base","color":"#006dff","level":2,"mdMsl":2897.6,"tvdMsl":2715.87},{"name":"Hod Fm. Top","color":"#00b6ff","level":2,"mdMsl":2897.6,"tvdMsl":2715.87},{"name":"Hod Fm. Base","color":"#00b6ff","level":2,"mdMsl":3004.1,"tvdMsl":2811.99},{"name":"Blodoeks Fm. Top","color":"#00daff","level":2,"mdMsl":3004.1,"tvdMsl":2811.99},{"name":"Blodoeks Fm. Base","color":"#00daff","level":2,"mdMsl":3049.5,"tvdMsl":2853.6},{"name":"Hidra Fm. Top","color":"#00ea4c","level":2,"mdMsl":3049.5,"tvdMsl":2853.6},{"name":"CROMER KNOLL GP. Top","color":"#b233cf","level":1,"mdMsl":3057.3,"tvdMsl":2860.79},{"name":"Roedby Fm. Top","color":"#c14dcd","level":2,"mdMsl":3057.3,"tvdMsl":2860.79},{"name":"SHETLAND GP. Base","color":"#000080","level":1,"mdMsl":3057.3,"tvdMsl":2860.79},{"name":"Hidra Fm. Base","color":"#00ea4c","level":2,"mdMsl":3057.3,"tvdMsl":2860.79},{"name":"Roedby Fm. Base","color":"#c14dcd","level":2,"mdMsl":3086.6,"tvdMsl":2887.95},{"name":"Aasgard Fm. Top","color":"#e081c9","level":2,"mdMsl":3086.6,"tvdMsl":2887.95},{"name":"VIKING GP. Top","color":"#ff0000","level":1,"mdMsl":3113.5,"tvdMsl":2913.18},{"name":"Aasgard Fm. Base","color":"#e081c9","level":2,"mdMsl":3113.5,"tvdMsl":2913.18},{"name":"CROMER KNOLL GP. Base","color":"#b233cf","level":1,"mdMsl":3113.5,"tvdMsl":2913.18},{"name":"Draupne Fm. Top","color":"#ff4f20","level":2,"mdMsl":3113.5,"tvdMsl":2913.18},{"name":"Draupne Fm. Base","color":"#ff4f20","level":2,"mdMsl":3174.5,"tvdMsl":2971.46},{"name":"Heather Fm. Top","color":"#ff5f30","level":2,"mdMsl":3174.5,"tvdMsl":2971.46},{"name":"Heather Fm. Sand VOLVE Top","color":"#ffe500","level":3,"mdMsl":3182.45,"tvdMsl":2979.15},{"name":"VIKING GP. Base","color":"#ff0000","level":1,"mdMsl":3190.5,"tvdMsl":2986.94},{"name":"VESTLAND GP. Top","color":"#d167cb","level":1,"mdMsl":3190.5,"tvdMsl":2986.94},{"name":"Hugin Fm. Top","color":"#ffcb00","level":2,"mdMsl":3190.5,"tvdMsl":2986.94},{"name":"Heather Fm. Base","color":"#ff5f30","level":2,"mdMsl":3190.5,"tvdMsl":2986.94},{"name":"Sleipner Fm. Top","color":"#ffff00","level":2,"mdMsl":3249.3,"tvdMsl":3044.75},{"name":"Hugin Fm. Base","color":"#ffcb00","level":2,"mdMsl":3249.3,"tvdMsl":3044.75},{"name":"VESTLAND GP. Base","color":"#d167cb","level":1,"mdMsl":3410.1,"tvdMsl":3204.99},{"name":"Sleipner Fm. Base","color":"#ffff00","level":2,"mdMsl":3410.1,"tvdMsl":3204.99}],"ad215042-03e9-2b7e-e053-c818a488c79a":[{"name":"NORDLAND GP. Top","color":"#ffe500","level":1,"mdMsl":91.1,"tvdMsl":91.1},{"name":"Utsira Fm. Top","color":"#fff200","level":2,"mdMsl":829.94,"tvdMsl":827.18},{"name":"HORDALAND GP. Top","color":"#009024","level":1,"mdMsl":1015.8,"tvdMsl":1009.76},{"name":"Utsira Fm. Base","color":"#fff200","level":2,"mdMsl":1015.8,"tvdMsl":1009.76},{"name":"NORDLAND GP. Base","color":"#ffe500","level":1,"mdMsl":1015.8,"tvdMsl":1009.76},{"name":"Skade Fm. Top","color":"#00a636","level":2,"mdMsl":1185.1,"tvdMsl":1170},{"name":"Skade Fm. Base","color":"#00a636","level":2,"mdMsl":1275.4,"tvdMsl":1253.8},{"name":"Grid Fm. Top","color":"#00bc48","level":2,"mdMsl":2166.1,"tvdMsl":2065.09},{"name":"Grid Fm. Base","color":"#00bc48","level":2,"mdMsl":2228.1,"tvdMsl":2126.06},{"name":"HORDALAND GP. Base","color":"#009024","level":1,"mdMsl":2318.1,"tvdMsl":2212.47},{"name":"Balder Fm. Top","color":"#bc4830","level":2,"mdMsl":2318.1,"tvdMsl":2212.47},{"name":"ROGALAND GP. Top","color":"#b22222","level":1,"mdMsl":2380.1,"tvdMsl":2269.83},{"name":"Sele Fm. Top","color":"#bd845c","level":2,"mdMsl":2380.1,"tvdMsl":2269.83},{"name":"Balder Fm. Base","color":"#bc4830","level":2,"mdMsl":2380.1,"tvdMsl":2269.83},{"name":"Sele Fm. Base","color":"#bd845c","level":2,"mdMsl":2456.1,"tvdMsl":2336.63},{"name":"Lista Fm. Top","color":"#c49f74","level":2,"mdMsl":2456.1,"tvdMsl":2336.63},{"name":"Ty Fm. Top","color":"#d2b48c","level":2,"mdMsl":2569.1,"tvdMsl":2428.47},{"name":"Lista Fm. Base","color":"#c49f74","level":2,"mdMsl":2569.1,"tvdMsl":2428.47},{"name":"Ty Fm. Base","color":"#d2b48c","level":2,"mdMsl":2739.6,"tvdMsl":2554.28},{"name":"SHETLAND GP. Top","color":"#000080","level":1,"mdMsl":2739.6,"tvdMsl":2554.28},{"name":"Ekofisk Fm. Top","color":"#0000c3","level":2,"mdMsl":2739.6,"tvdMsl":2554.28},{"name":"Tor Fm. Top","color":"#006dff","level":2,"mdMsl":2764.67,"tvdMsl":2569.78},{"name":"Ekofisk Fm. Base","color":"#0000c3","level":2,"mdMsl":2764.67,"tvdMsl":2569.78},{"name":"Hod Fm. Top","color":"#00b6ff","level":2,"mdMsl":3063.1,"tvdMsl":2688.11},{"name":"Tor Fm. Base","color":"#006dff","level":2,"mdMsl":3063.1,"tvdMsl":2688.11},{"name":"Blodoeks Fm. Top","color":"#00daff","level":2,"mdMsl":3295.1,"tvdMsl":2774.56},{"name":"Hod Fm. Base","color":"#00b6ff","level":2,"mdMsl":3295.1,"tvdMsl":2774.56},{"name":"Hidra Fm. Top","color":"#00ea4c","level":2,"mdMsl":3343.1,"tvdMsl":2803.32},{"name":"Blodoeks Fm. Base","color":"#00daff","level":2,"mdMsl":3343.1,"tvdMsl":2803.32},{"name":"CROMER KNOLL GP. Top","color":"#b233cf","level":1,"mdMsl":3373.1,"tvdMsl":2822.61},{"name":"SHETLAND GP. Base","color":"#000080","level":1,"mdMsl":3373.1,"tvdMsl":2822.61},{"name":"Hidra Fm. Base","color":"#00ea4c","level":2,"mdMsl":3373.1,"tvdMsl":2822.61},{"name":"Roedby Fm. Top","color":"#c14dcd","level":2,"mdMsl":3373.1,"tvdMsl":2822.61},{"name":"Roedby Fm. Base","color":"#c14dcd","level":2,"mdMsl":3419.5,"tvdMsl":2853.87},{"name":"Aasgard Fm. Top","color":"#e081c9","level":2,"mdMsl":3419.5,"tvdMsl":2853.87},{"name":"Aasgard Fm. Base","color":"#e081c9","level":2,"mdMsl":3470.9,"tvdMsl":2890.9},{"name":"Draupne Fm. Top","color":"#ff4f20","level":2,"mdMsl":3470.9,"tvdMsl":2890.9},{"name":"CROMER KNOLL GP. Base","color":"#b233cf","level":1,"mdMsl":3470.9,"tvdMsl":2890.9},{"name":"VIKING GP. Top","color":"#ff0000","level":1,"mdMsl":3470.9,"tvdMsl":2890.9},{"name":"Draupne Fm. Base","color":"#ff4f20","level":2,"mdMsl":3520,"tvdMsl":2928.2},{"name":"Heather Fm. Top","color":"#ff5f30","level":2,"mdMsl":3520,"tvdMsl":2928.2},{"name":"Heather Fm. Sand VOLVE Top","color":"#ffe500","level":3,"mdMsl":3530.3,"tvdMsl":2936.09},{"name":"VESTLAND GP. Top","color":"#d167cb","level":1,"mdMsl":3539.7,"tvdMsl":2943.29},{"name":"Hugin Fm. 12 VOLVE Top","color":"#f0aa23","level":3,"mdMsl":3539.7,"tvdMsl":2943.29},{"name":"Heather Fm. Base","color":"#ff5f30","level":2,"mdMsl":3539.7,"tvdMsl":2943.29},{"name":"Heather Fm. Sand VOLVE Base","color":"#ffe500","level":3,"mdMsl":3539.7,"tvdMsl":2943.29},{"name":"Hugin Fm. Top","color":"#ffcb00","level":2,"mdMsl":3539.7,"tvdMsl":2943.29},{"name":"VIKING GP. Base","color":"#ff0000","level":1,"mdMsl":3539.7,"tvdMsl":2943.29},{"name":"Hugin Fm. 11 VOLVE Top","color":"#ffa500","level":3,"mdMsl":3544.1,"tvdMsl":2946.66},{"name":"Hugin Fm. 12 VOLVE Base","color":"#f0aa23","level":3,"mdMsl":3544.1,"tvdMsl":2946.66},{"name":"Hugin Fm. 10 VOLVE Top","color":"#ffaaa2","level":3,"mdMsl":3550.6,"tvdMsl":2951.64},{"name":"Hugin Fm. 11 VOLVE Base","color":"#ffa500","level":3,"mdMsl":3550.6,"tvdMsl":2951.64},{"name":"Hugin Fm. 9 VOLVE Top","color":"#ff9579","level":3,"mdMsl":3557.6,"tvdMsl":2957},{"name":"Hugin Fm. 10 VOLVE Base","color":"#ffaaa2","level":3,"mdMsl":3557.6,"tvdMsl":2957},{"name":"Hugin Fm. 8 VOLVE Top","color":"#ffc0cb","level":3,"mdMsl":3572.6,"tvdMsl":2968.49},{"name":"Hugin Fm. 9 VOLVE Base","color":"#ff9579","level":3,"mdMsl":3572.6,"tvdMsl":2968.49},{"name":"Hugin Fm. 8 VOLVE Base","color":"#ffc0cb","level":3,"mdMsl":3592.1,"tvdMsl":2983.43},{"name":"Hugin Fm. 7 VOLVE Top","color":"#ffb5c5","level":3,"mdMsl":3592.1,"tvdMsl":2983.43},{"name":"Hugin Fm. 6 VOLVE Top","color":"#e9d0a8","level":3,"mdMsl":3598.1,"tvdMsl":2988.03},{"name":"Hugin Fm. 7 VOLVE Base","color":"#ffb5c5","level":3,"mdMsl":3598.1,"tvdMsl":2988.03},{"name":"Hugin Fm. 6 VOLVE Base","color":"#e9d0a8","level":3,"mdMsl":3608.1,"tvdMsl":2995.69},{"name":"Hugin Fm. 5 VOLVE Top","color":"#d2b48c","level":3,"mdMsl":3608.1,"tvdMsl":2995.69},{"name":"Hugin Fm. 4 VOLVE Top","color":"#c49f74","level":3,"mdMsl":3610.1,"tvdMsl":2997.22},{"name":"Hugin Fm. 5 VOLVE Base","color":"#d2b48c","level":3,"mdMsl":3610.1,"tvdMsl":2997.22},{"name":"Hugin Fm. 3 VOLVE Top","color":"#bd845c","level":3,"mdMsl":3612.4,"tvdMsl":2998.99},{"name":"Hugin Fm. 4 VOLVE Base","color":"#c49f74","level":3,"mdMsl":3612.4,"tvdMsl":2998.99},{"name":"Hugin Fm. 2 VOLVE Top","color":"#bb663e","level":3,"mdMsl":3619.4,"tvdMsl":3004.35},{"name":"Hugin Fm. 3 VOLVE Base","color":"#bd845c","level":3,"mdMsl":3619.4,"tvdMsl":3004.35},{"name":"Hugin Fm. 1 VOLVE Top","color":"#bc4830","level":3,"mdMsl":3629.1,"tvdMsl":3011.79},{"name":"Hugin Fm. 2 VOLVE Base","color":"#bb663e","level":3,"mdMsl":3629.1,"tvdMsl":3011.79},{"name":"Hugin Fm. Base","color":"#ffcb00","level":2,"mdMsl":3647.1,"tvdMsl":3025.59},{"name":"Sleipner Fm. Top","color":"#ffff00","level":2,"mdMsl":3647.1,"tvdMsl":3025.59},{"name":"Hugin Fm. 1 VOLVE Base","color":"#bc4830","level":3,"mdMsl":3647.1,"tvdMsl":3025.59},{"name":"VESTLAND GP. Base","color":"#d167cb","level":1,"mdMsl":3707.1,"tvdMsl":3071.59},{"name":"Sleipner Fm. Base","color":"#ffff00","level":2,"mdMsl":3707.1,"tvdMsl":3071.59}],"ad215042-03ef-2b7e-e053-c818a488c79a":[{"name":"NORDLAND GP. Top","color":"#ffe500","level":1,"mdMsl":91.1,"tvdMsl":91.1},{"name":"Utsira Fm. Top","color":"#fff200","level":2,"mdMsl":846.37,"tvdMsl":839.37},{"name":"Utsira Fm. Base","color":"#fff200","level":2,"mdMsl":1033.92,"tvdMsl":1020.06},{"name":"NORDLAND GP. Base","color":"#ffe500","level":1,"mdMsl":1033.92,"tvdMsl":1020.06},{"name":"HORDALAND GP. Top","color":"#009024","level":1,"mdMsl":1033.92,"tvdMsl":1020.06},{"name":"Skade Fm. Top","color":"#00a636","level":2,"mdMsl":1143.75,"tvdMsl":1125.04},{"name":"Skade Fm. Base","color":"#00a636","level":2,"mdMsl":1268.47,"tvdMsl":1244.03},{"name":"Grid Fm. Top","color":"#00bc48","level":2,"mdMsl":2190.57,"tvdMsl":2054.52},{"name":"Grid Fm. Base","color":"#00bc48","level":2,"mdMsl":2312.58,"tvdMsl":2156.25},{"name":"Balder Fm. Top","color":"#bc4830","level":2,"mdMsl":2378.26,"tvdMsl":2211.21},{"name":"ROGALAND GP. Top","color":"#b22222","level":1,"mdMsl":2378.26,"tvdMsl":2211.21},{"name":"HORDALAND GP. Base","color":"#009024","level":1,"mdMsl":2378.26,"tvdMsl":2211.21},{"name":"Sele Fm. Top","color":"#bd845c","level":2,"mdMsl":2448.67,"tvdMsl":2270.18},{"name":"Balder Fm. Base","color":"#bc4830","level":2,"mdMsl":2448.67,"tvdMsl":2270.18},{"name":"Sele Fm. Base","color":"#bd845c","level":2,"mdMsl":2534.61,"tvdMsl":2341.37},{"name":"Lista Fm. Top","color":"#c49f74","level":2,"mdMsl":2534.61,"tvdMsl":2341.37},{"name":"Lista Fm. Base","color":"#c49f74","level":2,"mdMsl":2617.51,"tvdMsl":2404.78},{"name":"Ty Fm. Top","color":"#d2b48c","level":2,"mdMsl":2617.51,"tvdMsl":2404.78},{"name":"Ty Fm. Base","color":"#d2b48c","level":2,"mdMsl":2934.98,"tvdMsl":2570.72},{"name":"Ekofisk Fm. Top","color":"#0000c3","level":2,"mdMsl":2934.98,"tvdMsl":2570.72},{"name":"ROGALAND GP. Base","color":"#b22222","level":1,"mdMsl":2934.98,"tvdMsl":2570.72},{"name":"SHETLAND GP. Top","color":"#000080","level":1,"mdMsl":2934.98,"tvdMsl":2570.72},{"name":"Ekofisk Fm. Base","color":"#0000c3","level":2,"mdMsl":2954.54,"tvdMsl":2578.44},{"name":"Tor Fm. Top","color":"#006dff","level":2,"mdMsl":2954.54,"tvdMsl":2578.44},{"name":"Hod Fm. Top","color":"#00b6ff","level":2,"mdMsl":3393.9,"tvdMsl":2754.15},{"name":"Tor Fm. Base","color":"#006dff","level":2,"mdMsl":3393.9,"tvdMsl":2754.15},{"name":"Hod Fm. Base","color":"#00b6ff","level":2,"mdMsl":3559.88,"tvdMsl":2822.61},{"name":"Blodoeks Fm. Top","color":"#00daff","level":2,"mdMsl":3559.88,"tvdMsl":2822.61},{"name":"Hidra Fm. Top","color":"#00ea4c","level":2,"mdMsl":3697.1,"tvdMsl":2890.43},{"name":"Blodoeks Fm. Base","color":"#00daff","level":2,"mdMsl":3697.1,"tvdMsl":2890.43},{"name":"Roedby Fm. Top","color":"#c14dcd","level":2,"mdMsl":3716.1,"tvdMsl":2901.56},{"name":"Hidra Fm. Base","color":"#00ea4c","level":2,"mdMsl":3716.1,"tvdMsl":2901.56},{"name":"SHETLAND GP. Base","color":"#000080","level":1,"mdMsl":3716.1,"tvdMsl":2901.56},{"name":"CROMER KNOLL GP. Top","color":"#b233cf","level":1,"mdMsl":3716.1,"tvdMsl":2901.56},{"name":"VIKING GP. Top","color":"#ff0000","level":1,"mdMsl":3774.85,"tvdMsl":2937.16},{"name":"CROMER KNOLL GP. Base","color":"#b233cf","level":1,"mdMsl":3774.85,"tvdMsl":2937.16},{"name":"Aasgard Fm. Base","color":"#e081c9","level":2,"mdMsl":3775.1,"tvdMsl":2937.32},{"name":"Draupne Fm. Top","color":"#ff4f20","level":2,"mdMsl":3775.1,"tvdMsl":2937.32},{"name":"Aasgard Fm. Top","color":"#e081c9","level":2,"mdMsl":3775.1,"tvdMsl":2937.32},{"name":"Roedby Fm. Base","color":"#c14dcd","level":2,"mdMsl":3775.1,"tvdMsl":2937.32},{"name":"Heather Fm. Top","color":"#ff5f30","level":2,"mdMsl":3823.1,"tvdMsl":2967.54},{"name":"Draupne Fm. Base","color":"#ff4f20","level":2,"mdMsl":3823.1,"tvdMsl":2967.54},{"name":"Heather Fm. Sand VOLVE Top","color":"#ffe500","level":3,"mdMsl":3883.1,"tvdMsl":3007.48},{"name":"VIKING GP. Base","color":"#ff0000","level":1,"mdMsl":3899.96,"tvdMsl":3019.1},{"name":"VESTLAND GP. Top","color":"#d167cb","level":1,"mdMsl":3899.96,"tvdMsl":3019.1},{"name":"Hugin Fm. Top","color":"#ffcb00","level":2,"mdMsl":3899.96,"tvdMsl":3019.1},{"name":"Heather Fm. Sand VOLVE Base","color":"#ffe500","level":3,"mdMsl":3899.96,"tvdMsl":3019.1},{"name":"Heather Fm. Base","color":"#ff5f30","level":2,"mdMsl":3899.96,"tvdMsl":3019.1},{"name":"Hugin Fm. Base","color":"#ffcb00","level":2,"mdMsl":4007.82,"tvdMsl":3095.5},{"name":"Sleipner Fm. Top","color":"#ffff00","level":2,"mdMsl":4007.82,"tvdMsl":3095.5},{"name":"Sleipner Fm. Base","color":"#ffff00","level":2,"mdMsl":4035.1,"tvdMsl":3115.02},{"name":"VESTLAND GP. Base","color":"#d167cb","level":1,"mdMsl":4035.1,"tvdMsl":3115.02}]} \ No newline at end of file +{"ad215042-021a-2b7e-e053-c818a488c79a":[{"id":"ad215072-3acf-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Seabed","mdMsl":81,"tvdMsl":null,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215077-d725-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Tertiary Top","mdMsl":81,"tvdMsl":null,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215072-eeed-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Top","mdMsl":81,"tvdMsl":null,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507f-1636-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Pliocene Top","mdMsl":81,"tvdMsl":null,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215078-30a0-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Top","mdMsl":822.8,"tvdMsl":814.71,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507c-3a78-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Pliocene Base","mdMsl":822.8,"tvdMsl":814.71,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215073-49e9-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Base","mdMsl":1082.5,"tvdMsl":1032.12,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507b-f570-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Top","mdMsl":1082.5,"tvdMsl":1032.12,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215080-547b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Base","mdMsl":1082.5,"tvdMsl":1032.12,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507a-3390-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Skade Fm. Top","mdMsl":1288,"tvdMsl":1154.78,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215077-aaf3-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Skade Fm. Base","mdMsl":1425,"tvdMsl":1228.7,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507c-cb6c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Grid Fm. Top","mdMsl":2983,"tvdMsl":2038.71,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215081-dc0b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Grid Fm. Base","mdMsl":3215,"tvdMsl":2167.81,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507c-926a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"ROGALAND GP. Top","mdMsl":3284.91,"tvdMsl":2209.99,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507f-9b87-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Balder Fm. Top","mdMsl":3284.91,"tvdMsl":2209.99,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215080-546b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Base","mdMsl":3284.91,"tvdMsl":2209.99,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-3984-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Balder Fm. Base","mdMsl":3378.07,"tvdMsl":2266.46,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215075-46fc-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Sele Fm. Top","mdMsl":3378.07,"tvdMsl":2266.46,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215078-3944-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Sele Fm. Base","mdMsl":3456.05,"tvdMsl":2314.86,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507f-28c0-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Lista Fm. Top","mdMsl":3456.05,"tvdMsl":2314.86,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507b-5a35-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Ty Fm. Top","mdMsl":3589,"tvdMsl":2398.11,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215073-654c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Lista Fm. Base","mdMsl":3597.5,"tvdMsl":2403.24,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507c-c931-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Heimdal Fm. Top","mdMsl":3597.5,"tvdMsl":2403.24,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215072-a8c6-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Heimdal Fm. Base","mdMsl":3675.7,"tvdMsl":2447.98,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215079-775e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Vaale Fm. Top","mdMsl":3675.7,"tvdMsl":2447.98,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215074-5369-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Cretaceous Top","mdMsl":3802,"tvdMsl":2525.68,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215078-4d2f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Ekofisk Fm. Top","mdMsl":3802,"tvdMsl":2525.68,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215079-b6df-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"SHETLAND GP. Top","mdMsl":3802,"tvdMsl":2525.68,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507c-cf02-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"ROGALAND GP. Base","mdMsl":3802,"tvdMsl":2525.68,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507f-94d0-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Ty Fm. Base","mdMsl":3802,"tvdMsl":2525.68,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215082-3f59-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Vaale Fm. Base","mdMsl":3802,"tvdMsl":2525.68,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215082-458e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Tertiary Base","mdMsl":3802,"tvdMsl":2525.68,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507b-a227-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Ekofisk Fm. Base","mdMsl":3825,"tvdMsl":2540.53,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215080-1193-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Tor Fm. Top","mdMsl":3825,"tvdMsl":2540.53,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215078-53ca-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Tor Fm. Base","mdMsl":4027.14,"tvdMsl":2671.41,"properties":{"confidence":"F","qualifier":null}},{"id":"ad215078-7865-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Hod Fm. Top","mdMsl":4027.14,"tvdMsl":2671.41,"properties":{"confidence":"F","qualifier":null}},{"id":"ad215076-3649-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Blodoeks Fm. Top","mdMsl":4176.18,"tvdMsl":2775.1,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215079-9919-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Hod Fm. Base","mdMsl":4176.18,"tvdMsl":2775.1,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215075-84da-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Blodoeks Fm. Base","mdMsl":4207.44,"tvdMsl":2798.12,"properties":{"confidence":"F","qualifier":null}},{"id":"ad215078-b308-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Hidra Fm. Top","mdMsl":4207.44,"tvdMsl":2798.12,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507b-5ac1-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Hidra Fm. Base","mdMsl":4210.53,"tvdMsl":2800.42,"properties":{"confidence":"F","qualifier":null}},{"id":"ad21507a-3116-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"SHETLAND GP. Base","mdMsl":4210.53,"tvdMsl":2800.42,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507c-34e9-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Roedby Fm. Top","mdMsl":4210.53,"tvdMsl":2800.42,"properties":{"confidence":"F","qualifier":null}},{"id":"ad21507d-dccf-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"CROMER KNOLL GP. Top","mdMsl":4210.53,"tvdMsl":2800.42,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215079-7925-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Aasgard Fm. Top","mdMsl":4239.55,"tvdMsl":2822.15,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215080-14b1-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Roedby Fm. Base","mdMsl":4239.55,"tvdMsl":2822.15,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215077-1990-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Jurassic Top","mdMsl":4279,"tvdMsl":2852.14,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215076-210e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Aasgard Fm. Base","mdMsl":4279,"tvdMsl":2852.14,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507c-2993-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"CROMER KNOLL GP. Base","mdMsl":4279,"tvdMsl":2852.14,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507e-147d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"VIKING GP. Top","mdMsl":4279,"tvdMsl":2852.14,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215080-5228-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Draupne Fm. Top","mdMsl":4279,"tvdMsl":2852.14,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215077-cf56-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Draupne Fm. Base","mdMsl":4284.5,"tvdMsl":2856.35,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215079-85e4-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Top","mdMsl":4284.5,"tvdMsl":2856.35,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215079-7ca2-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Sand VOLVE Top","mdMsl":4289.8,"tvdMsl":2860.4,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215076-a555-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Top","mdMsl":4291.25,"tvdMsl":2861.52,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-adb6-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"VIKING GP. Base","mdMsl":4291.25,"tvdMsl":2861.52,"properties":{"confidence":"E","qualifier":null}},{"id":"ad215075-d836-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Base","mdMsl":4291.25,"tvdMsl":2861.52,"properties":{"confidence":"E","qualifier":null}},{"id":"ad215079-8b38-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"VESTLAND GP. Top","mdMsl":4291.25,"tvdMsl":2861.52,"properties":{"confidence":"E","qualifier":null}},{"id":"ad215079-950d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Sand VOLVE Base","mdMsl":4291.25,"tvdMsl":2861.52,"properties":{"confidence":"E","qualifier":null}},{"id":"ad215076-f791-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"VESTLAND GP. Base","mdMsl":4315,"tvdMsl":2879.76,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215077-22ed-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"HEGRE GP. Top","mdMsl":4315,"tvdMsl":2879.76,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215077-47f4-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Base","mdMsl":4315,"tvdMsl":2879.76,"properties":{"confidence":"E","qualifier":null}},{"id":"ad21507a-1ec4-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Jurassic Base","mdMsl":4315,"tvdMsl":2879.76,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507c-2aff-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Triassic Top","mdMsl":4315,"tvdMsl":2879.76,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215076-274e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. 11 SLOE_HUG Top","mdMsl":4315.01,"tvdMsl":2879.77,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215079-73d2-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. Top","mdMsl":4315.01,"tvdMsl":2879.77,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215074-9f76-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. 10 SLOE_HUG Top","mdMsl":4331.18,"tvdMsl":2892.22,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507e-c9a0-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. 11 SLOE_HUG Base","mdMsl":4331.18,"tvdMsl":2892.22,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215077-a7b9-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. 10 SLOE_HUG Base","mdMsl":4348.39,"tvdMsl":2905.47,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215074-e906-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. 9 SLOE_HUG Top","mdMsl":4348.39,"tvdMsl":2905.47,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507b-f31e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. 9 SLOE_HUG Base","mdMsl":4370.11,"tvdMsl":2922.15,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215080-27c3-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. 8 SLOE_HUG Top","mdMsl":4370.11,"tvdMsl":2922.15,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215073-eebb-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. 8 SLOE_HUG Base","mdMsl":4386.09,"tvdMsl":2934.4,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215080-b210-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. 7 SLOE_HUG Top","mdMsl":4386.09,"tvdMsl":2934.4,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215073-5ce7-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. 6 SLOE_HUG Top","mdMsl":4411.33,"tvdMsl":2953.68,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507f-04f6-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. 7 SLOE_HUG Base","mdMsl":4411.33,"tvdMsl":2953.68,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215078-3230-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. 6 SLOE_HUG Base","mdMsl":4433.04,"tvdMsl":2970.21,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215082-3f4d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. 5 SLOE_HUG Top","mdMsl":4433.04,"tvdMsl":2970.21,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507c-8035-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. 5 SLOE_HUG Base","mdMsl":4454.13,"tvdMsl":2986.21,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507e-cc6b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. 4 SLOE_HUG Top","mdMsl":4454.13,"tvdMsl":2986.21,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507d-d5a5-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. 4 SLOE_HUG Base","mdMsl":4476.6,"tvdMsl":3003.23,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215080-2202-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. 3 SLOE_HUG Top","mdMsl":4476.6,"tvdMsl":3003.23,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215076-a6fa-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. 3 SLOE_HUG Base","mdMsl":4497.59,"tvdMsl":3019.09,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507b-62a0-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. Base","mdMsl":4554,"tvdMsl":3061.5,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507b-9f98-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Smith Bank Fm. Top","mdMsl":4554,"tvdMsl":3061.5,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215076-1743-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Total Depth","mdMsl":4616,"tvdMsl":3108.08,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507a-e342-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"HEGRE GP. Base","mdMsl":4616,"tvdMsl":3108.08,"properties":{"confidence":null,"qualifier":"NR"}},{"id":"ad21507e-0f80-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Triassic Base","mdMsl":4616,"tvdMsl":3108.08,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507f-2f08-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-021a-2b7e-e053-c818a488c79a","pickIdentifier":"Smith Bank Fm. Base","mdMsl":4616,"tvdMsl":3108.08,"properties":{"confidence":null,"qualifier":"NR"}}],"ad215042-f9cd-2b7e-e053-c818a488c79a":[{"id":"ad215074-cecd-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Top","mdMsl":81,"tvdMsl":null,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215074-f137-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Seabed","mdMsl":81,"tvdMsl":null,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad21507e-ab56-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Top","mdMsl":822.8,"tvdMsl":814.71,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215077-d6ab-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Base","mdMsl":1082.5,"tvdMsl":1032.12,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215078-b831-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Top","mdMsl":1082.5,"tvdMsl":1032.12,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215078-d39d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Base","mdMsl":1082.5,"tvdMsl":1032.12,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215075-6b55-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Skade Fm. Top","mdMsl":1288,"tvdMsl":1154.78,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215081-f471-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Skade Fm. Base","mdMsl":1425,"tvdMsl":1228.7,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad21507a-e0e2-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Grid Fm. Top","mdMsl":2749.97,"tvdMsl":2066.96,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215079-af7d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Grid Fm. Base","mdMsl":2810.63,"tvdMsl":2120.59,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215074-1a7f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"ROGALAND GP. Top","mdMsl":2946.5,"tvdMsl":2234.28,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215074-9177-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Tertiary Top","mdMsl":2946.5,"tvdMsl":2234.28,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507c-940d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Base","mdMsl":2946.5,"tvdMsl":2234.28,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507c-94f3-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Balder Fm. Top","mdMsl":2946.5,"tvdMsl":2234.28,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215080-231d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Balder Fm. Base","mdMsl":3012.66,"tvdMsl":2288.99,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215080-2df0-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Sele Fm. Top","mdMsl":3012.66,"tvdMsl":2288.99,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215076-328d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Sele Fm. Base","mdMsl":3092.74,"tvdMsl":2356.42,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215081-f321-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Lista Fm. Top","mdMsl":3092.74,"tvdMsl":2356.42,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215075-8636-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Lista Fm. Base","mdMsl":3187.83,"tvdMsl":2437.56,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507e-0d3c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Vaale Fm. Top","mdMsl":3187.83,"tvdMsl":2437.56,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215081-f1c9-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Ty Fm. Top","mdMsl":3187.83,"tvdMsl":2437.56,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215072-9d59-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Vaale Fm. Base","mdMsl":3350.81,"tvdMsl":2577.42,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215073-eedd-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Cretaceous Top","mdMsl":3350.81,"tvdMsl":2577.42,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507a-3782-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Ekofisk Fm. Top","mdMsl":3350.81,"tvdMsl":2577.42,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215080-1cd2-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Tertiary Base","mdMsl":3350.81,"tvdMsl":2577.42,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215081-dbed-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"SHETLAND GP. Top","mdMsl":3350.81,"tvdMsl":2577.42,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215081-de4e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Ty Fm. Base","mdMsl":3350.81,"tvdMsl":2577.42,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215081-f46f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"ROGALAND GP. Base","mdMsl":3350.81,"tvdMsl":2577.42,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215072-9ac8-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Tor Fm. Top","mdMsl":3378,"tvdMsl":2600.96,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215081-f1d2-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Ekofisk Fm. Base","mdMsl":3378,"tvdMsl":2600.96,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215078-a7bc-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Hod Fm. Top","mdMsl":3532,"tvdMsl":2728.02,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215080-5617-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Tor Fm. Base","mdMsl":3532,"tvdMsl":2728.02,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507d-7069-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Blodoeks Fm. Top","mdMsl":3641.28,"tvdMsl":2819.53,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215080-b174-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Hod Fm. Base","mdMsl":3641.28,"tvdMsl":2819.53,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507d-2bc8-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Blodoeks Fm. Base","mdMsl":3710,"tvdMsl":2879.29,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215082-1a8d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Hidra Fm. Top","mdMsl":3710,"tvdMsl":2879.29,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215073-f4e9-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Roedby Fm. Top","mdMsl":3715,"tvdMsl":2883.71,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215081-f1d0-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Hidra Fm. Base","mdMsl":3715,"tvdMsl":2883.71,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215081-f473-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"SHETLAND GP. Base","mdMsl":3715,"tvdMsl":2883.71,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215081-f475-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"CROMER KNOLL GP. Top","mdMsl":3715,"tvdMsl":2883.71,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215078-4eb6-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Roedby Fm. Base","mdMsl":3734.5,"tvdMsl":2900.98,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215078-b2a9-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Aasgard Fm. Top","mdMsl":3734.5,"tvdMsl":2900.98,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-1568-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Aasgard Fm. Base","mdMsl":3743,"tvdMsl":2908.52,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215079-90ca-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Cretaceous Base","mdMsl":3743,"tvdMsl":2908.52,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215075-88ae-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Draupne Fm. Top","mdMsl":3743,"tvdMsl":2908.52,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507c-312e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Jurassic Top","mdMsl":3743,"tvdMsl":2908.52,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215074-9d41-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"CROMER KNOLL GP. Base","mdMsl":3744.06,"tvdMsl":2909.46,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215079-9b75-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"VIKING GP. Top","mdMsl":3744.06,"tvdMsl":2909.46,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215078-cb7e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Draupne Fm. Base","mdMsl":3921,"tvdMsl":3067.72,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215081-f322-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Top","mdMsl":3921,"tvdMsl":3067.72,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215078-b4a1-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Sand VOLVE Top","mdMsl":3969,"tvdMsl":3111,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215072-9e73-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"VESTLAND GP. Top","mdMsl":4010.8,"tvdMsl":3148.83,"properties":{"confidence":"E","qualifier":null}},{"id":"ad215074-0c80-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Base","mdMsl":4010.8,"tvdMsl":3148.83,"properties":{"confidence":"E","qualifier":null}},{"id":"ad215079-68ce-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Top","mdMsl":4010.8,"tvdMsl":3148.83,"properties":{"confidence":"E","qualifier":null}},{"id":"ad215079-7cba-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Sand VOLVE Base","mdMsl":4010.8,"tvdMsl":3148.83,"properties":{"confidence":"E","qualifier":null}},{"id":"ad215081-dd9d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"VIKING GP. Base","mdMsl":4010.8,"tvdMsl":3148.83,"properties":{"confidence":"E","qualifier":null}},{"id":"ad215074-977a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Sleipner Fm. Top","mdMsl":4153.59,"tvdMsl":3274.59,"properties":{"confidence":"E","qualifier":null}},{"id":"ad215081-f474-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Base","mdMsl":4153.59,"tvdMsl":3274.59,"properties":{"confidence":"E","qualifier":null}},{"id":"ad215077-22f0-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Smith Bank Fm. Top","mdMsl":4189,"tvdMsl":3304.88,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215074-5c26-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Sleipner Fm. Base","mdMsl":4189,"tvdMsl":3304.88,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215074-9406-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"VESTLAND GP. Base","mdMsl":4189,"tvdMsl":3304.88,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215081-f1cb-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Jurassic Base","mdMsl":4189,"tvdMsl":3304.88,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215081-f472-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"HEGRE GP. Top","mdMsl":4189,"tvdMsl":3304.88,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215072-b84b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Total Depth","mdMsl":4225,"tvdMsl":3335.59,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215079-b2e3-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"Smith Bank Fm. Base","mdMsl":4225,"tvdMsl":3335.59,"properties":{"confidence":null,"qualifier":"NR"}},{"id":"ad21507f-10c4-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f9cd-2b7e-e053-c818a488c79a","pickIdentifier":"HEGRE GP. Base","mdMsl":4225,"tvdMsl":3335.59,"properties":{"confidence":null,"qualifier":"NR"}}],"ad215042-0217-2b7e-e053-c818a488c79a":[{"id":"ad215074-e4ce-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Seabed","mdMsl":81,"tvdMsl":null,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215079-838b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Tertiary Top","mdMsl":81,"tvdMsl":null,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215075-42ec-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Top","mdMsl":81,"tvdMsl":null,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad21507e-0cc7-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Top","mdMsl":822.8,"tvdMsl":814.71,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215076-f8e0-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Base","mdMsl":1082.5,"tvdMsl":1032.12,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215078-52de-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Top","mdMsl":1082.5,"tvdMsl":1032.12,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215079-9bdc-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Base","mdMsl":1082.5,"tvdMsl":1032.12,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215079-851f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Skade Fm. Top","mdMsl":1288,"tvdMsl":1154.78,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad21507c-97fc-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Skade Fm. Base","mdMsl":1425,"tvdMsl":1228.7,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad21507f-273b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Grid Fm. Top","mdMsl":2751.39,"tvdMsl":2058.49,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215072-cddd-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Grid Fm. Base","mdMsl":2776.55,"tvdMsl":2081.22,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215074-14f5-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Base","mdMsl":2940.2,"tvdMsl":2232.21,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215079-83bc-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"ROGALAND GP. Top","mdMsl":2940.2,"tvdMsl":2232.21,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507a-228f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Balder Fm. Top","mdMsl":2940.2,"tvdMsl":2232.21,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215072-9e4f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Balder Fm. Base","mdMsl":2997.29,"tvdMsl":2285.09,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507c-76e5-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Sele Fm. Top","mdMsl":2997.29,"tvdMsl":2285.09,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215072-cfcc-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Lista Fm. Top","mdMsl":3079.53,"tvdMsl":2360.19,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507f-9e33-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Sele Fm. Base","mdMsl":3079.53,"tvdMsl":2360.19,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-a95a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Lista Fm. Base","mdMsl":3155.89,"tvdMsl":2430.05,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507f-06e1-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Vaale Fm. Top","mdMsl":3155.89,"tvdMsl":2430.05,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507f-a314-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Ty Fm. Top","mdMsl":3155.89,"tvdMsl":2430.05,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215074-e9e5-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Ekofisk Fm. Top","mdMsl":3288.42,"tvdMsl":2550.81,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215073-bcf8-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Vaale Fm. Base","mdMsl":3288.42,"tvdMsl":2550.81,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215075-d3c7-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"ROGALAND GP. Base","mdMsl":3288.42,"tvdMsl":2550.81,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215076-2dd2-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"SHETLAND GP. Top","mdMsl":3288.42,"tvdMsl":2550.81,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215079-78a7-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Tertiary Base","mdMsl":3288.42,"tvdMsl":2550.81,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215079-9104-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Ty Fm. Base","mdMsl":3288.42,"tvdMsl":2550.81,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507c-353d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Cretaceous Top","mdMsl":3288.42,"tvdMsl":2550.81,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507a-3715-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Tor Fm. Top","mdMsl":3302.5,"tvdMsl":2563.6,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507d-bb0f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Ekofisk Fm. Base","mdMsl":3302.5,"tvdMsl":2563.6,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507b-537f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Hod Fm. Top","mdMsl":3451.16,"tvdMsl":2698.55,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215080-287d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Tor Fm. Base","mdMsl":3451.16,"tvdMsl":2698.55,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215072-95fe-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Hod Fm. Base","mdMsl":3558.37,"tvdMsl":2796.67,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215077-ad95-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Blodoeks Fm. Top","mdMsl":3558.37,"tvdMsl":2796.67,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-2d4d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Blodoeks Fm. Base","mdMsl":3585.41,"tvdMsl":2821.72,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215078-b4dc-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Hidra Fm. Top","mdMsl":3585.41,"tvdMsl":2821.72,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215073-63a1-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Hidra Fm. Base","mdMsl":3597.94,"tvdMsl":2833.39,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507a-21be-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Roedby Fm. Top","mdMsl":3597.94,"tvdMsl":2833.39,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507d-5116-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"CROMER KNOLL GP. Top","mdMsl":3597.94,"tvdMsl":2833.39,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215082-14af-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"SHETLAND GP. Base","mdMsl":3597.94,"tvdMsl":2833.39,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215079-991a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Roedby Fm. Base","mdMsl":3625.3,"tvdMsl":2858.77,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507a-edcd-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Aasgard Fm. Top","mdMsl":3625.3,"tvdMsl":2858.77,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215077-1e85-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Jurassic Top","mdMsl":3641.5,"tvdMsl":2873.67,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215073-431d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Cretaceous Base","mdMsl":3641.5,"tvdMsl":2873.67,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215074-99f4-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"CROMER KNOLL GP. Base","mdMsl":3641.5,"tvdMsl":2873.67,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215075-6cbc-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"VIKING GP. Top","mdMsl":3641.5,"tvdMsl":2873.67,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215075-84c6-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Aasgard Fm. Base","mdMsl":3641.5,"tvdMsl":2873.67,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507e-c4dc-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Draupne Fm. Top","mdMsl":3641.5,"tvdMsl":2873.67,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215079-7ffa-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Top","mdMsl":3742,"tvdMsl":2964.33,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215075-59a9-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Draupne Fm. Base","mdMsl":3742,"tvdMsl":2964.33,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215079-85b9-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Sand VOLVE Top","mdMsl":3772,"tvdMsl":2991.03,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215075-6ad1-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"VESTLAND GP. Top","mdMsl":3796.5,"tvdMsl":3012.9,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215078-b7dc-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Sand VOLVE Base","mdMsl":3796.5,"tvdMsl":3012.9,"properties":{"confidence":"E","qualifier":null}},{"id":"ad21507b-cd2c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Base","mdMsl":3796.5,"tvdMsl":3012.9,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507c-9a4d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Top","mdMsl":3796.5,"tvdMsl":3012.9,"properties":{"confidence":"E","qualifier":null}},{"id":"ad21507d-769f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"VIKING GP. Base","mdMsl":3796.5,"tvdMsl":3012.9,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215079-782f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Base","mdMsl":3894.59,"tvdMsl":3101.31,"properties":{"confidence":"E","qualifier":null}},{"id":"ad21507a-42ff-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Sleipner Fm. Top","mdMsl":3894.59,"tvdMsl":3101.31,"properties":{"confidence":"E","qualifier":null}},{"id":"ad21507b-5ebc-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"VESTLAND GP. Base","mdMsl":3941.3,"tvdMsl":3143.39,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507a-37fe-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Sleipner Fm. Base","mdMsl":3941.3,"tvdMsl":3143.39,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215080-17da-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"HEGRE GP. Top","mdMsl":3941.3,"tvdMsl":3143.39,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215081-dbae-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Jurassic Base","mdMsl":3941.3,"tvdMsl":3143.39,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215074-0ab9-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. Top","mdMsl":3941.31,"tvdMsl":3143.4,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507a-dca9-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. 11 SLOE_HUG Top","mdMsl":3941.31,"tvdMsl":3143.4,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215076-13c1-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. 11 SLOE_HUG Base","mdMsl":3959.73,"tvdMsl":3159.97,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507d-dc81-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. 10 SLOE_HUG Top","mdMsl":3959.73,"tvdMsl":3159.97,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215072-cb01-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. 9 SLOE_HUG Top","mdMsl":3968.61,"tvdMsl":3167.95,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507f-6fb5-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. 10 SLOE_HUG Base","mdMsl":3968.61,"tvdMsl":3167.95,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215072-ee98-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. 8 SLOE_HUG Top","mdMsl":3978.62,"tvdMsl":3176.96,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507d-6f6e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. 9 SLOE_HUG Base","mdMsl":3978.62,"tvdMsl":3176.96,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215073-6d99-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. 8 SLOE_HUG Base","mdMsl":3985.3,"tvdMsl":3182.98,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507c-2f28-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. 7 SLOE_HUG Top","mdMsl":3985.3,"tvdMsl":3182.98,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215073-6bbc-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. 7 SLOE_HUG Base","mdMsl":4001.96,"tvdMsl":3198.01,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215072-e3f8-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. 6 SLOE_HUG Top","mdMsl":4001.96,"tvdMsl":3198.01,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215072-ac4a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. 6 SLOE_HUG Base","mdMsl":4019.06,"tvdMsl":3213.63,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215078-d00b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. 5 SLOE_HUG Top","mdMsl":4019.06,"tvdMsl":3213.63,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215077-4370-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. 4 SLOE_HUG Top","mdMsl":4038.77,"tvdMsl":3231.63,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507d-5973-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. 5 SLOE_HUG Base","mdMsl":4038.77,"tvdMsl":3231.63,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215079-6ebd-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. 4 SLOE_HUG Base","mdMsl":4057.51,"tvdMsl":3248.74,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507a-3542-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. 3 SLOE_HUG Top","mdMsl":4057.52,"tvdMsl":3248.75,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215076-aba8-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. 3 SLOE_HUG Base","mdMsl":4071.99,"tvdMsl":3262.14,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215076-1b70-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. Base","mdMsl":4072,"tvdMsl":3262.15,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215078-7c1f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Smith Bank Fm. Top","mdMsl":4072,"tvdMsl":3262.15,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507c-781e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Smith Bank Fm. Base","mdMsl":4106,"tvdMsl":3293.72,"properties":{"confidence":null,"qualifier":"NR"}},{"id":"ad21507e-c59d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"Total Depth","mdMsl":4106,"tvdMsl":3293.72,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215080-2305-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0217-2b7e-e053-c818a488c79a","pickIdentifier":"HEGRE GP. Base","mdMsl":4106,"tvdMsl":3293.72,"properties":{"confidence":null,"qualifier":"NR"}}],"ad215042-0218-2b7e-e053-c818a488c79a":[{"id":"ad215077-4266-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0218-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Top","mdMsl":84,"tvdMsl":84,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507d-2d3f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0218-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Top","mdMsl":826,"tvdMsl":817.64,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507a-4bf1-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0218-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Base","mdMsl":1087,"tvdMsl":1035.37,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507c-3624-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0218-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Base","mdMsl":1087,"tvdMsl":1035.37,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215080-b691-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0218-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Top","mdMsl":1087,"tvdMsl":1035.37,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507d-bc09-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0218-2b7e-e053-c818a488c79a","pickIdentifier":"Skade Fm. Top","mdMsl":1294,"tvdMsl":1157.87,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215078-78d0-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0218-2b7e-e053-c818a488c79a","pickIdentifier":"Skade Fm. Base","mdMsl":1431,"tvdMsl":1231.86,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507f-2927-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0218-2b7e-e053-c818a488c79a","pickIdentifier":"Grid Fm. Top","mdMsl":2756.5,"tvdMsl":2072.9,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215076-fafc-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0218-2b7e-e053-c818a488c79a","pickIdentifier":"Grid Fm. Base","mdMsl":2807,"tvdMsl":2117.43,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215072-9f4e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0218-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Base","mdMsl":2946.5,"tvdMsl":2234.83,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215074-549d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0218-2b7e-e053-c818a488c79a","pickIdentifier":"Balder Fm. Top","mdMsl":2946.5,"tvdMsl":2234.83,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215075-5867-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0218-2b7e-e053-c818a488c79a","pickIdentifier":"ROGALAND GP. Top","mdMsl":2946.5,"tvdMsl":2234.83,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215072-e44f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0218-2b7e-e053-c818a488c79a","pickIdentifier":"Balder Fm. Base","mdMsl":3015,"tvdMsl":2292.02,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507d-72ae-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0218-2b7e-e053-c818a488c79a","pickIdentifier":"Sele Fm. Top","mdMsl":3015,"tvdMsl":2292.02,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507a-1ae7-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0218-2b7e-e053-c818a488c79a","pickIdentifier":"Sele Fm. Base","mdMsl":3098,"tvdMsl":2361.6,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507c-3463-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0218-2b7e-e053-c818a488c79a","pickIdentifier":"Lista Fm. Top","mdMsl":3098,"tvdMsl":2361.6,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215077-a303-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0218-2b7e-e053-c818a488c79a","pickIdentifier":"Lista Fm. Base","mdMsl":3184,"tvdMsl":2433.72,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215076-a4e7-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0218-2b7e-e053-c818a488c79a","pickIdentifier":"Ty Fm. Top","mdMsl":3184,"tvdMsl":2433.72,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215079-909a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0218-2b7e-e053-c818a488c79a","pickIdentifier":"Ty Fm. Base","mdMsl":3247,"tvdMsl":2486.53,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215079-984d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0218-2b7e-e053-c818a488c79a","pickIdentifier":"ROGALAND GP. Base","mdMsl":3247,"tvdMsl":2486.53,"properties":{"confidence":null,"qualifier":null}}],"ad215042-0398-2b7e-e053-c818a488c79a":[{"id":"ad215072-a367-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Top","mdMsl":91.1,"tvdMsl":91.1,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215072-cf76-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"Seabed","mdMsl":91.1,"tvdMsl":91.1,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215081-e209-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Top","mdMsl":831.6,"tvdMsl":827.68,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215072-9d12-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Base","mdMsl":1014.4,"tvdMsl":1007.86,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215074-a96b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Top","mdMsl":1014.4,"tvdMsl":1007.86,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215073-efbe-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Base","mdMsl":1014.4,"tvdMsl":1007.86,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507d-b2b8-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"Skade Fm. Top","mdMsl":1199.1,"tvdMsl":1188.92,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215073-ed01-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"Skade Fm. Base","mdMsl":1262.6,"tvdMsl":1251.09,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507c-2a03-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"Grid Fm. Top","mdMsl":2119.4,"tvdMsl":2031.59,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507c-9672-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"Grid Fm. Base","mdMsl":2250.7,"tvdMsl":2145.44,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507b-5e10-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Base","mdMsl":2339.5,"tvdMsl":2222.33,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215080-22d9-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"ROGALAND GP. Top","mdMsl":2339.5,"tvdMsl":2222.33,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215080-b36f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"Balder Fm. Top","mdMsl":2339.5,"tvdMsl":2222.33,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215072-a62d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"Sele Fm. Top","mdMsl":2404.4,"tvdMsl":2278.45,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215072-c7e3-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"Balder Fm. Base","mdMsl":2404.4,"tvdMsl":2278.45,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215072-3df4-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"Sele Fm. Base","mdMsl":2472.1,"tvdMsl":2336.95,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507d-b2b5-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"Lista Fm. Top","mdMsl":2472.1,"tvdMsl":2336.95,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215074-a5ef-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"Lista Fm. Base","mdMsl":2565.7,"tvdMsl":2418.32,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507d-5797-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"Ty Fm. Top","mdMsl":2565.7,"tvdMsl":2418.32,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215075-4d4b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"Ty Fm. Base","mdMsl":2714,"tvdMsl":2550.49,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507b-51bc-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"SHETLAND GP. Top","mdMsl":2714,"tvdMsl":2550.49,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215078-a583-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"Ekofisk Fm. Top","mdMsl":2714,"tvdMsl":2550.49,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507d-2f4d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"ROGALAND GP. Base","mdMsl":2714,"tvdMsl":2550.49,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-3ee2-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"Ekofisk Fm. Base","mdMsl":2732.7,"tvdMsl":2567.24,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507e-ceac-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"Tor Fm. Top","mdMsl":2732.7,"tvdMsl":2567.24,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215072-9c8a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"Tor Fm. Base","mdMsl":2923.9,"tvdMsl":2734.5,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-2451-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"Hod Fm. Top","mdMsl":2923.9,"tvdMsl":2734.5,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-c197-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"Hod Fm. Base","mdMsl":3009.8,"tvdMsl":2803.29,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215073-5f14-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"Blodoeks Fm. Top","mdMsl":3009.8,"tvdMsl":2803.29,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215077-4cec-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"Blodoeks Fm. Base","mdMsl":3068.7,"tvdMsl":2847.56,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507b-f498-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"Hidra Fm. Top","mdMsl":3068.7,"tvdMsl":2847.56,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-5cbd-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"Hidra Fm. Base","mdMsl":3091.7,"tvdMsl":2863.8,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215079-8cd3-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"Roedby Fm. Top","mdMsl":3091.7,"tvdMsl":2863.8,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215075-2dc8-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"SHETLAND GP. Base","mdMsl":3091.7,"tvdMsl":2863.8,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507d-baaa-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"CROMER KNOLL GP. Top","mdMsl":3091.7,"tvdMsl":2863.8,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507d-26a7-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"Roedby Fm. Base","mdMsl":3160.7,"tvdMsl":2910.58,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507d-b2b6-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"Aasgard Fm. Top","mdMsl":3160.7,"tvdMsl":2910.58,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-fdaf-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"CROMER KNOLL GP. Base","mdMsl":3216.1,"tvdMsl":2951.78,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-9c91-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"Aasgard Fm. Base","mdMsl":3216.1,"tvdMsl":2951.78,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215079-7f16-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"VIKING GP. Top","mdMsl":3216.1,"tvdMsl":2951.78,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215082-47dd-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"Draupne Fm. Top","mdMsl":3216.1,"tvdMsl":2951.78,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507b-5f0c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"Draupne Fm. Base","mdMsl":3264.8,"tvdMsl":2990.71,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507d-1426-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Top","mdMsl":3264.8,"tvdMsl":2990.71,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215079-9865-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Sand VOLVE Top","mdMsl":3265.1,"tvdMsl":2990.96,"properties":{"confidence":"F","qualifier":null}},{"id":"ad215077-a615-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. Top","mdMsl":3310.1,"tvdMsl":3028.98,"properties":{"confidence":"P","qualifier":"FP"}},{"id":"ad215075-6ec7-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"HEGRE GP. Top","mdMsl":3310.1,"tvdMsl":3028.98,"properties":{"confidence":"P","qualifier":"FP"}},{"id":"ad21507c-976d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"VIKING GP. Base","mdMsl":3310.1,"tvdMsl":3028.98,"properties":{"confidence":"P","qualifier":"FP"}},{"id":"ad21507d-b2b7-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Base","mdMsl":3310.1,"tvdMsl":3028.98,"properties":{"confidence":"P","qualifier":"FP"}},{"id":"ad215074-a9da-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"Smith Bank Fm. Top","mdMsl":3446,"tvdMsl":3153.06,"properties":{"confidence":"F","qualifier":null}},{"id":"ad21507a-4b95-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. Base","mdMsl":3446,"tvdMsl":3153.06,"properties":{"confidence":"F","qualifier":null}},{"id":"ad215078-a5d3-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"Total Depth","mdMsl":3577.1,"tvdMsl":3275.5,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507b-c743-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"Smith Bank Fm. Base","mdMsl":3577.1,"tvdMsl":3275.5,"properties":{"confidence":null,"qualifier":"NR"}},{"id":"ad21507e-d44a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0398-2b7e-e053-c818a488c79a","pickIdentifier":"HEGRE GP. Base","mdMsl":3577.1,"tvdMsl":3275.5,"properties":{"confidence":null,"qualifier":"NR"}}],"ad215042-03f0-2b7e-e053-c818a488c79a":[{"id":"ad215077-8226-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Top","mdMsl":91.1,"tvdMsl":91.1,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad21507d-bdf3-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"Seabed","mdMsl":91.1,"tvdMsl":91.1,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad21507d-b1c7-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Top","mdMsl":846.37,"tvdMsl":839.37,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215073-686b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Top","mdMsl":1033.92,"tvdMsl":1020.06,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215076-1ecf-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Base","mdMsl":1033.92,"tvdMsl":1020.06,"properties":{"confidence":"P","qualifier":"NL"}},{"id":"ad215080-19d7-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Base","mdMsl":1033.92,"tvdMsl":1020.06,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215074-ef64-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"Skade Fm. Top","mdMsl":1143.75,"tvdMsl":1125.04,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215082-1d35-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"Skade Fm. Base","mdMsl":1268.47,"tvdMsl":1244.03,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215080-5913-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"Kick-Off Point","mdMsl":1313.1,"tvdMsl":1285.09,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215073-6ada-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"Grid Fm. Top","mdMsl":2149.87,"tvdMsl":2043.59,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215079-b0b4-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"Grid Fm. Base","mdMsl":2274.63,"tvdMsl":2157.3,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215078-b327-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Base","mdMsl":2331.08,"tvdMsl":2208.36,"properties":{"confidence":"P","qualifier":null}},{"id":"ad215080-5785-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"ROGALAND GP. Top","mdMsl":2331.08,"tvdMsl":2208.36,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215082-41ec-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"Balder Fm. Top","mdMsl":2331.08,"tvdMsl":2208.36,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215077-428c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"Balder Fm. Base","mdMsl":2402.41,"tvdMsl":2271.94,"properties":{"confidence":"P","qualifier":null}},{"id":"ad215082-4386-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"Sele Fm. Top","mdMsl":2402.41,"tvdMsl":2271.94,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507b-f0e2-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"Sele Fm. Base","mdMsl":2475.43,"tvdMsl":2335.59,"properties":{"confidence":"P","qualifier":null}},{"id":"ad21507c-9738-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"Lista Fm. Top","mdMsl":2475.43,"tvdMsl":2335.59,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215072-9ab9-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"Ty Fm. Top","mdMsl":2553.65,"tvdMsl":2399.86,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215082-1a7e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"Lista Fm. Base","mdMsl":2553.65,"tvdMsl":2399.86,"properties":{"confidence":"P","qualifier":null}},{"id":"ad215074-a9fb-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"Ty Fm. Base","mdMsl":2763.3,"tvdMsl":2549.5,"properties":{"confidence":"P","qualifier":null}},{"id":"ad215075-276f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"SHETLAND GP. Top","mdMsl":2763.3,"tvdMsl":2549.5,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507b-5454-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"ROGALAND GP. Base","mdMsl":2763.3,"tvdMsl":2549.5,"properties":{"confidence":"P","qualifier":null}},{"id":"ad21507e-a409-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"Ekofisk Fm. Top","mdMsl":2763.3,"tvdMsl":2549.5,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215078-36eb-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"Ekofisk Fm. Base","mdMsl":2795.67,"tvdMsl":2569.79,"properties":{"confidence":"P","qualifier":null}},{"id":"ad21507e-0ba9-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"Tor Fm. Top","mdMsl":2795.67,"tvdMsl":2569.79,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215079-8030-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"Hod Fm. Top","mdMsl":2987.53,"tvdMsl":2690.9,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507e-c32d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"Tor Fm. Base","mdMsl":2987.53,"tvdMsl":2690.9,"properties":{"confidence":"P","qualifier":null}},{"id":"ad215074-9713-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"Hod Fm. Base","mdMsl":3098.12,"tvdMsl":2748.86,"properties":{"confidence":"P","qualifier":null}},{"id":"ad215075-7f38-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"Blodoeks Fm. Top","mdMsl":3098.12,"tvdMsl":2748.86,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215075-aa6a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"Blodoeks Fm. Base","mdMsl":3579.6,"tvdMsl":2863.73,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507c-d1d1-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"Hidra Fm. Top","mdMsl":3579.6,"tvdMsl":2863.73,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-aafe-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"CROMER KNOLL GP. Top","mdMsl":3650.1,"tvdMsl":2893.62,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215078-b2a4-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"Roedby Fm. Top","mdMsl":3650.1,"tvdMsl":2893.62,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507b-c90d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"SHETLAND GP. Base","mdMsl":3650.1,"tvdMsl":2893.62,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507f-9ca6-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"Hidra Fm. Base","mdMsl":3650.1,"tvdMsl":2893.62,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215077-8112-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"CROMER KNOLL GP. Base","mdMsl":3725.9,"tvdMsl":2935.37,"properties":{"confidence":"P","qualifier":null}},{"id":"ad215077-b0b0-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"Roedby Fm. Base","mdMsl":3725.9,"tvdMsl":2935.37,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507a-4a80-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"Aasgard Fm. Base","mdMsl":3725.9,"tvdMsl":2935.37,"properties":{"confidence":"P","qualifier":null}},{"id":"ad21507d-db39-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"VIKING GP. Top","mdMsl":3725.9,"tvdMsl":2935.37,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507f-0afd-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"Aasgard Fm. Top","mdMsl":3725.9,"tvdMsl":2935.37,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507f-7061-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"Draupne Fm. Top","mdMsl":3725.9,"tvdMsl":2935.37,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-f76f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Top","mdMsl":3744.53,"tvdMsl":2946.58,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215079-8b54-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"VESTLAND GP. Top","mdMsl":3744.53,"tvdMsl":2946.58,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215080-22bb-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"VIKING GP. Base","mdMsl":3744.53,"tvdMsl":2946.58,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215080-b4c1-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"Draupne Fm. Base","mdMsl":3744.53,"tvdMsl":2946.58,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215072-ee31-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Base","mdMsl":3842.11,"tvdMsl":3010.78,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507c-cfe4-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"Sleipner Fm. Top","mdMsl":3842.11,"tvdMsl":3010.78,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-26b0-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"Total Depth","mdMsl":4040.1,"tvdMsl":3157.39,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215079-873c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"Sleipner Fm. Base","mdMsl":4040.1,"tvdMsl":3157.39,"properties":{"confidence":"G","qualifier":"NR"}},{"id":"ad21507b-f6fe-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f0-2b7e-e053-c818a488c79a","pickIdentifier":"VESTLAND GP. Base","mdMsl":4040.1,"tvdMsl":3157.39,"properties":{"confidence":"G","qualifier":"NR"}}],"ad215042-03ec-2b7e-e053-c818a488c79a":[{"id":"ad215077-a02b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"Seabed","mdMsl":91.1,"tvdMsl":91.1,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215074-1c09-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Top","mdMsl":91.1,"tvdMsl":91.1,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215077-78a2-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Top","mdMsl":832.6,"tvdMsl":827.92,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-ebcc-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Base","mdMsl":1020.53,"tvdMsl":1009.88,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507d-6ddc-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Base","mdMsl":1020.53,"tvdMsl":1009.88,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215080-173e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Top","mdMsl":1020.53,"tvdMsl":1009.88,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215082-1659-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"Skade Fm. Top","mdMsl":1166.58,"tvdMsl":1149.06,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507e-c198-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"Skade Fm. Base","mdMsl":1278.1,"tvdMsl":1254.91,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215073-b6b3-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"Grid Fm. Top","mdMsl":2099.75,"tvdMsl":2022.31,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215079-93d4-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"Grid Fm. Base","mdMsl":2168.11,"tvdMsl":2089.73,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-e83f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"ROGALAND GP. Top","mdMsl":2291.29,"tvdMsl":2211.1,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507b-637e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Base","mdMsl":2291.29,"tvdMsl":2211.1,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507c-ca14-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"Balder Fm. Top","mdMsl":2291.29,"tvdMsl":2211.1,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507e-c8d8-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"Sele Fm. Top","mdMsl":2348.05,"tvdMsl":2266.4,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215082-445f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"Balder Fm. Base","mdMsl":2348.05,"tvdMsl":2266.4,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215072-d381-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"Sele Fm. Base","mdMsl":2428.33,"tvdMsl":2343.26,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215076-29d6-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"Lista Fm. Top","mdMsl":2428.33,"tvdMsl":2343.26,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215072-d1ee-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"Ty Fm. Top","mdMsl":2484.6,"tvdMsl":2396.32,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215079-66bb-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"Lista Fm. Base","mdMsl":2484.6,"tvdMsl":2396.32,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215079-6e56-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"ROGALAND GP. Base","mdMsl":2635.43,"tvdMsl":2531.39,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507d-5b6a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"Ty Fm. Base","mdMsl":2635.43,"tvdMsl":2531.39,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507e-bf01-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"SHETLAND GP. Top","mdMsl":2635.43,"tvdMsl":2531.39,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507f-2dd1-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"Ekofisk Fm. Top","mdMsl":2635.43,"tvdMsl":2531.39,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-5462-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"Ekofisk Fm. Base","mdMsl":2648.06,"tvdMsl":2542.03,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507c-9bb3-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"Tor Fm. Top","mdMsl":2648.06,"tvdMsl":2542.03,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-0af4-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"Hod Fm. Top","mdMsl":2831.71,"tvdMsl":2677.07,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215075-4355-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"Tor Fm. Base","mdMsl":2831.71,"tvdMsl":2677.07,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215073-46e9-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"Hod Fm. Base","mdMsl":2928.9,"tvdMsl":2735.64,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215076-4047-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"Blodoeks Fm. Top","mdMsl":2928.9,"tvdMsl":2735.64,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215073-4271-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"Blodoeks Fm. Base","mdMsl":2978.96,"tvdMsl":2764.57,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215072-eb18-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"Hidra Fm. Top","mdMsl":2978.96,"tvdMsl":2764.57,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215077-81e5-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"SHETLAND GP. Base","mdMsl":2994.73,"tvdMsl":2773.67,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215079-7cc2-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"CROMER KNOLL GP. Top","mdMsl":2994.73,"tvdMsl":2773.67,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215075-4ab1-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"Roedby Fm. Top","mdMsl":2994.73,"tvdMsl":2773.67,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507a-3c3d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"Hidra Fm. Base","mdMsl":2994.73,"tvdMsl":2773.67,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215072-9e27-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"Draupne Fm. Top","mdMsl":3047.1,"tvdMsl":2804.26,"properties":{"confidence":null,"qualifier":"ER"}},{"id":"ad215079-961a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"Aasgard Fm. Top","mdMsl":3047.1,"tvdMsl":2804.26,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507b-6073-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"VIKING GP. Top","mdMsl":3047.1,"tvdMsl":2804.26,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215078-7b37-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"Aasgard Fm. Base","mdMsl":3047.1,"tvdMsl":2804.26,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507c-ccbd-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"CROMER KNOLL GP. Base","mdMsl":3047.1,"tvdMsl":2804.26,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215078-d2ff-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"Draupne Fm. Base","mdMsl":3047.1,"tvdMsl":2804.26,"properties":{"confidence":null,"qualifier":"ER"}},{"id":"ad21507d-7d0a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"Roedby Fm. Base","mdMsl":3047.1,"tvdMsl":2804.26,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215080-1cdd-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Top","mdMsl":3047.1,"tvdMsl":2804.26,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-e491-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Sand VOLVE Top","mdMsl":3062.1,"tvdMsl":2813.09,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215072-96c8-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Base","mdMsl":3071.1,"tvdMsl":2818.39,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215074-a80c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Top","mdMsl":3071.1,"tvdMsl":2818.39,"properties":{"confidence":"F","qualifier":null}},{"id":"ad215074-f89c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"VESTLAND GP. Top","mdMsl":3071.1,"tvdMsl":2818.39,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215072-d24b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"VIKING GP. Base","mdMsl":3071.1,"tvdMsl":2818.39,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507d-5a6f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Sand VOLVE Base","mdMsl":3071.1,"tvdMsl":2818.39,"properties":{"confidence":"E","qualifier":null}},{"id":"ad215076-376e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"Sleipner Fm. Top","mdMsl":3225.44,"tvdMsl":2909.63,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507c-3a9b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Base","mdMsl":3225.44,"tvdMsl":2909.63,"properties":{"confidence":"P","qualifier":null}},{"id":"ad215073-632c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"HEGRE GP. Top","mdMsl":3282.66,"tvdMsl":2943.68,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507a-21ae-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"Sleipner Fm. Base","mdMsl":3282.66,"tvdMsl":2943.68,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507c-93ea-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"VESTLAND GP. Base","mdMsl":3282.66,"tvdMsl":2943.68,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507d-29f8-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. Top","mdMsl":3282.66,"tvdMsl":2943.68,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-f05f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"Total Depth","mdMsl":3465.1,"tvdMsl":3053.46,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215079-67af-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ec-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. Base","mdMsl":3465.1,"tvdMsl":3053.46,"properties":{"confidence":null,"qualifier":"NR"}}],"ad215042-03ee-2b7e-e053-c818a488c79a":[{"id":"ad215077-d871-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Top","mdMsl":91.1,"tvdMsl":91.1,"properties":{"confidence":"E","qualifier":null}},{"id":"ad21507b-528d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Seabed","mdMsl":91.1,"tvdMsl":91.1,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507d-7782-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Top","mdMsl":827.2,"tvdMsl":826.76,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215072-b92c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Top","mdMsl":1023.85,"tvdMsl":1023.41,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-a89b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Base","mdMsl":1023.87,"tvdMsl":1023.43,"properties":{"confidence":"P","qualifier":null}},{"id":"ad21507d-72bd-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Base","mdMsl":1023.87,"tvdMsl":1023.43,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-d5ae-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Skade Fm. Top","mdMsl":1152.13,"tvdMsl":1151.69,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215073-be79-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Skade Fm. Base","mdMsl":1260.91,"tvdMsl":1260.47,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215078-3b67-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Grid Fm. Top","mdMsl":2081.9,"tvdMsl":2081.44,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215072-b663-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Grid Fm. Base","mdMsl":2164.84,"tvdMsl":2164.04,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215073-657a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Balder Fm. Top","mdMsl":2213.28,"tvdMsl":2212,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-987d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"ROGALAND GP. Top","mdMsl":2213.28,"tvdMsl":2212,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-1492-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Base","mdMsl":2213.28,"tvdMsl":2212,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215075-300f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Sele Fm. Top","mdMsl":2276.44,"tvdMsl":2274.41,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507a-4b52-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Balder Fm. Base","mdMsl":2276.44,"tvdMsl":2274.41,"properties":{"confidence":"P","qualifier":null}},{"id":"ad215072-af7a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Sele Fm. Base","mdMsl":2340.69,"tvdMsl":2337.26,"properties":{"confidence":"P","qualifier":null}},{"id":"ad215078-bcfa-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Lista Fm. Top","mdMsl":2340.69,"tvdMsl":2337.26,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-a975-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Lista Fm. Base","mdMsl":2417.88,"tvdMsl":2411.46,"properties":{"confidence":"P","qualifier":null}},{"id":"ad215074-935e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Ty Fm. Top","mdMsl":2417.88,"tvdMsl":2411.46,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215072-9a2e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"SHETLAND GP. Top","mdMsl":2553.1,"tvdMsl":2534.35,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215072-9e0d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Ekofisk Fm. Top","mdMsl":2553.1,"tvdMsl":2534.35,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507e-d0ef-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"ROGALAND GP. Base","mdMsl":2553.1,"tvdMsl":2534.35,"properties":{"confidence":"P","qualifier":null}},{"id":"ad215080-2a4e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Ty Fm. Base","mdMsl":2553.1,"tvdMsl":2534.35,"properties":{"confidence":"P","qualifier":null}},{"id":"ad215074-fa1c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Ekofisk Fm. Base","mdMsl":2573.7,"tvdMsl":2551.75,"properties":{"confidence":"P","qualifier":null}},{"id":"ad215078-50f0-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Tor Fm. Top","mdMsl":2573.7,"tvdMsl":2551.75,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-130d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Hod Fm. Top","mdMsl":2717.8,"tvdMsl":2665.09,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507c-7f07-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Tor Fm. Base","mdMsl":2717.8,"tvdMsl":2665.09,"properties":{"confidence":"P","qualifier":null}},{"id":"ad215077-468b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Blodoeks Fm. Top","mdMsl":2813.56,"tvdMsl":2734.73,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215080-290c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Hod Fm. Base","mdMsl":2813.56,"tvdMsl":2734.73,"properties":{"confidence":"P","qualifier":null}},{"id":"ad215078-4e8a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Blodoeks Fm. Base","mdMsl":2847.62,"tvdMsl":2755.92,"properties":{"confidence":"P","qualifier":null}},{"id":"ad215080-5526-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Hidra Fm. Top","mdMsl":2847.62,"tvdMsl":2755.92,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507f-14a9-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Hidra Fm. Base","mdMsl":2859.1,"tvdMsl":2762.82,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215082-43ac-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Svarte Fm. Top","mdMsl":2859.1,"tvdMsl":2762.82,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-ac1f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"SHETLAND GP. Base","mdMsl":2905.1,"tvdMsl":2787.02,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215079-9ad5-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Roedby Fm. Top","mdMsl":2905.1,"tvdMsl":2787.02,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215075-451a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"CROMER KNOLL GP. Top","mdMsl":2905.1,"tvdMsl":2787.02,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507e-ab4d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Svarte Fm. Base","mdMsl":2905.1,"tvdMsl":2787.02,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215073-4664-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Draupne Fm. Top","mdMsl":2923.1,"tvdMsl":2795.4,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215077-ac96-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Aasgard Fm. Base","mdMsl":2923.5,"tvdMsl":2795.59,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-19db-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"CROMER KNOLL GP. Base","mdMsl":2923.5,"tvdMsl":2795.59,"properties":{"confidence":"P","qualifier":null}},{"id":"ad215078-7561-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Roedby Fm. Base","mdMsl":2923.5,"tvdMsl":2795.59,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507c-98ef-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Aasgard Fm. Top","mdMsl":2923.5,"tvdMsl":2795.59,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507d-db85-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"VIKING GP. Top","mdMsl":2923.5,"tvdMsl":2795.59,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215072-aa0a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Top","mdMsl":2925.1,"tvdMsl":2796.34,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215073-f5ae-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Draupne Fm. Base","mdMsl":2925.1,"tvdMsl":2796.34,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507e-a9ad-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Sand VOLVE Top","mdMsl":2936.1,"tvdMsl":2801.46,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215074-f77b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Top","mdMsl":2945.7,"tvdMsl":2805.46,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215073-6f96-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Base","mdMsl":2945.7,"tvdMsl":2805.46,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215079-9bc8-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"VESTLAND GP. Top","mdMsl":2945.7,"tvdMsl":2805.46,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215078-ae52-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"VIKING GP. Base","mdMsl":2945.7,"tvdMsl":2805.46,"properties":{"confidence":"P","qualifier":null}},{"id":"ad215080-285f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Sand VOLVE Base","mdMsl":2945.7,"tvdMsl":2805.46,"properties":{"confidence":"E","qualifier":null}},{"id":"ad215075-6398-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Sleipner Fm. Top","mdMsl":3153.4,"tvdMsl":2870.69,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507e-c9fa-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Base","mdMsl":3153.4,"tvdMsl":2870.69,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215072-348a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"VESTLAND GP. Base","mdMsl":3215.1,"tvdMsl":2881.15,"properties":{"confidence":"P","qualifier":"NR"}},{"id":"ad21507c-d00c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Sleipner Fm. Base","mdMsl":3215.1,"tvdMsl":2881.15,"properties":{"confidence":"P","qualifier":"NR"}},{"id":"ad215080-29ad-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"VESTLAND GP. Base","mdMsl":3215.1,"tvdMsl":2881.15,"properties":{"confidence":"P","qualifier":"NR"}},{"id":"ad215080-51c6-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Sleipner Fm. Base","mdMsl":3215.1,"tvdMsl":2881.15,"properties":{"confidence":"P","qualifier":"NR"}},{"id":"ad215077-b1fd-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"VESTLAND GP. Base","mdMsl":3231.88,"tvdMsl":2884.24,"properties":{"confidence":"G","qualifier":"FP"}},{"id":"ad215078-2f9c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"VESTLAND GP. Top","mdMsl":3231.88,"tvdMsl":2884.24,"properties":{"confidence":"G","qualifier":"FP"}},{"id":"ad215075-a861-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Sleipner Fm. Top","mdMsl":3231.88,"tvdMsl":2884.24,"properties":{"confidence":"G","qualifier":"FP"}},{"id":"ad215080-134d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Base","mdMsl":3231.88,"tvdMsl":2884.24,"properties":{"confidence":"G","qualifier":"FP"}},{"id":"ad215076-f922-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Top","mdMsl":3320.1,"tvdMsl":2906.65,"properties":{"confidence":"P","qualifier":"NR"}},{"id":"ad215078-ac60-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"VESTLAND GP. Top","mdMsl":3320.1,"tvdMsl":2906.65,"properties":{"confidence":"P","qualifier":"NR"}},{"id":"ad21507c-3740-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Top","mdMsl":3320.1,"tvdMsl":2906.65,"properties":{"confidence":"P","qualifier":"NR"}},{"id":"ad215080-b608-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"VESTLAND GP. Top","mdMsl":3320.1,"tvdMsl":2906.65,"properties":{"confidence":"P","qualifier":"NR"}},{"id":"ad215075-b06b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"VESTLAND GP. Top","mdMsl":3425.1,"tvdMsl":2944.79,"properties":{"confidence":"G","qualifier":"FP"}},{"id":"ad215079-b021-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Base","mdMsl":3425.1,"tvdMsl":2944.79,"properties":{"confidence":"G","qualifier":"FP"}},{"id":"ad21507b-5dfe-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"VESTLAND GP. Base","mdMsl":3425.1,"tvdMsl":2944.79,"properties":{"confidence":"G","qualifier":"FP"}},{"id":"ad21507b-6629-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Top","mdMsl":3425.1,"tvdMsl":2944.79,"properties":{"confidence":"G","qualifier":"FP"}},{"id":"ad215079-b1ce-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Sleipner Fm. Top","mdMsl":3625.3,"tvdMsl":3058.96,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215078-b40a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Base","mdMsl":3625.3,"tvdMsl":3058.96,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-ec3d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Sleipner Fm. Base","mdMsl":3694.7,"tvdMsl":3103.49,"properties":{"confidence":"G","qualifier":"NR"}},{"id":"ad215076-2fc6-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"VESTLAND GP. Base","mdMsl":3694.7,"tvdMsl":3103.49,"properties":{"confidence":"G","qualifier":"NR"}},{"id":"ad21507e-0a23-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ee-2b7e-e053-c818a488c79a","pickIdentifier":"Total Depth","mdMsl":3694.7,"tvdMsl":3103.49,"properties":{"confidence":"G","qualifier":null}}],"ad215042-03f1-2b7e-e053-c818a488c79a":[{"id":"ad215074-d66c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Top","mdMsl":91.1,"tvdMsl":91.1,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215075-2b02-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"Seabed","mdMsl":91.1,"tvdMsl":91.1,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215075-282f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Top","mdMsl":846.37,"tvdMsl":839.37,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215076-5671-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Base","mdMsl":1033.92,"tvdMsl":1020.06,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad21507b-a868-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Top","mdMsl":1033.92,"tvdMsl":1020.06,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad21507b-ed5e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Base","mdMsl":1033.92,"tvdMsl":1020.06,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215075-d5e5-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"Skade Fm. Top","mdMsl":1143.75,"tvdMsl":1125.04,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215074-5695-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"Skade Fm. Base","mdMsl":1268.47,"tvdMsl":1244.03,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad21507e-1070-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"Grid Fm. Top","mdMsl":2149.87,"tvdMsl":2043.59,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215079-8cc7-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"Grid Fm. Base","mdMsl":2274.63,"tvdMsl":2157.3,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215074-a441-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"Balder Fm. Top","mdMsl":2331.08,"tvdMsl":2208.36,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215075-53ad-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Base","mdMsl":2331.08,"tvdMsl":2208.36,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad21507c-904c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"ROGALAND GP. Top","mdMsl":2331.08,"tvdMsl":2208.36,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215072-a0ee-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"Balder Fm. Base","mdMsl":2402.41,"tvdMsl":2271.94,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad21507e-0ba3-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"Sele Fm. Top","mdMsl":2402.41,"tvdMsl":2271.94,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad21507e-0c64-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"Lista Fm. Top","mdMsl":2475.43,"tvdMsl":2335.59,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215080-2925-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"Sele Fm. Base","mdMsl":2475.43,"tvdMsl":2335.59,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215074-8dad-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"Kick-Off Point","mdMsl":2520.1,"tvdMsl":2373.37,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215072-ad92-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"Lista Fm. Base","mdMsl":2551.13,"tvdMsl":2399.54,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507d-d950-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"Ty Fm. Top","mdMsl":2551.13,"tvdMsl":2399.54,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215078-acd9-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"SHETLAND GP. Top","mdMsl":2712.6,"tvdMsl":2545.76,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507c-3484-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"Ty Fm. Base","mdMsl":2712.6,"tvdMsl":2545.76,"properties":{"confidence":"P","qualifier":null}},{"id":"ad21507e-ceda-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"Ekofisk Fm. Top","mdMsl":2712.6,"tvdMsl":2545.76,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215080-2440-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"ROGALAND GP. Base","mdMsl":2712.6,"tvdMsl":2545.76,"properties":{"confidence":"P","qualifier":null}},{"id":"ad215076-5676-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"Ekofisk Fm. Base","mdMsl":2726.25,"tvdMsl":2558.93,"properties":{"confidence":"P","qualifier":null}},{"id":"ad21507f-1051-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"Tor Fm. Top","mdMsl":2726.25,"tvdMsl":2558.93,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-5675-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"Hod Fm. Top","mdMsl":2856.74,"tvdMsl":2686.09,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507c-cef6-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"Tor Fm. Base","mdMsl":2856.74,"tvdMsl":2686.09,"properties":{"confidence":"P","qualifier":null}},{"id":"ad21507b-63b3-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"Hod Fm. Base","mdMsl":2919.63,"tvdMsl":2747.36,"properties":{"confidence":"P","qualifier":null}},{"id":"ad21507a-1ab6-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"Blodoeks Fm. Top","mdMsl":2919.63,"tvdMsl":2747.36,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507d-d8a0-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"Hidra Fm. Top","mdMsl":2985.84,"tvdMsl":2810.86,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215082-4967-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"Blodoeks Fm. Base","mdMsl":2985.84,"tvdMsl":2810.86,"properties":{"confidence":"P","qualifier":null}},{"id":"ad21507a-ef3b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"Hidra Fm. Base","mdMsl":3003.91,"tvdMsl":2827.9,"properties":{"confidence":"P","qualifier":null}},{"id":"ad21507b-a6b1-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"CROMER KNOLL GP. Top","mdMsl":3003.91,"tvdMsl":2827.9,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507a-39a2-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"SHETLAND GP. Base","mdMsl":3003.91,"tvdMsl":2827.9,"properties":{"confidence":"P","qualifier":null}},{"id":"ad21507f-6ab1-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"Roedby Fm. Top","mdMsl":3003.91,"tvdMsl":2827.9,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507b-c5be-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"VIKING GP. Top","mdMsl":3045.48,"tvdMsl":2866.92,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507d-53ac-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"CROMER KNOLL GP. Base","mdMsl":3045.48,"tvdMsl":2866.92,"properties":{"confidence":"P","qualifier":null}},{"id":"ad215072-3995-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"Aasgard Fm. Top","mdMsl":3045.5,"tvdMsl":2866.94,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215073-ee9f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"Aasgard Fm. Base","mdMsl":3045.5,"tvdMsl":2866.94,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-1ead-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"Draupne Fm. Top","mdMsl":3045.5,"tvdMsl":2866.94,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215076-5673-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"Roedby Fm. Base","mdMsl":3045.5,"tvdMsl":2866.94,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-5672-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Top","mdMsl":3060.1,"tvdMsl":2880.58,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215076-5677-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"Draupne Fm. Base","mdMsl":3060.1,"tvdMsl":2880.58,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215074-a240-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"VIKING GP. Base","mdMsl":3070.34,"tvdMsl":2890.1,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215079-7fa9-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Top","mdMsl":3070.34,"tvdMsl":2890.1,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507b-cfba-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"VESTLAND GP. Top","mdMsl":3070.34,"tvdMsl":2890.1,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507e-12b6-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Base","mdMsl":3070.34,"tvdMsl":2890.1,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-f6a7-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"Sleipner Fm. Top","mdMsl":3106.77,"tvdMsl":2923.85,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507c-325d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Base","mdMsl":3106.77,"tvdMsl":2923.85,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507b-609d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"Sleipner Fm. Base","mdMsl":3177.1,"tvdMsl":2989.3,"properties":{"confidence":"G","qualifier":"NR"}},{"id":"ad21507d-2c1f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"Total Depth","mdMsl":3177.1,"tvdMsl":2989.3,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215082-483f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f1-2b7e-e053-c818a488c79a","pickIdentifier":"VESTLAND GP. Base","mdMsl":3177.1,"tvdMsl":2989.3,"properties":{"confidence":"G","qualifier":"NR"}}],"ad215042-03f9-2b7e-e053-c818a488c79a":[{"id":"ad215074-e8f7-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f9-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Top","mdMsl":91.1,"tvdMsl":91.1,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507a-3fb4-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f9-2b7e-e053-c818a488c79a","pickIdentifier":"Seabed","mdMsl":91.1,"tvdMsl":91.1,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215077-b33f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f9-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Top","mdMsl":831.1,"tvdMsl":827.76,"properties":{"confidence":"P","qualifier":null}},{"id":"ad215078-7320-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f9-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Base","mdMsl":1014.6,"tvdMsl":1009.23,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507b-a9ed-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f9-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Base","mdMsl":1014.6,"tvdMsl":1009.23,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215081-df5e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f9-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Top","mdMsl":1014.6,"tvdMsl":1009.23,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215077-8ea8-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f9-2b7e-e053-c818a488c79a","pickIdentifier":"Total Depth","mdMsl":1028.1,"tvdMsl":1022.58,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215077-d2b5-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f9-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Base","mdMsl":1028.1,"tvdMsl":1022.58,"properties":{"confidence":null,"qualifier":"NR"}}],"ad215043-6e11-2b7e-e053-c818a488c79a":[{"id":"ad215074-ee38-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Top","mdMsl":91.1,"tvdMsl":91.1,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215079-63b2-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"Seabed","mdMsl":91.1,"tvdMsl":91.1,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215080-b37e-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Top","mdMsl":846.37,"tvdMsl":839.37,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215076-5920-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Base","mdMsl":1033.92,"tvdMsl":1020.06,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215076-5927-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Top","mdMsl":1033.92,"tvdMsl":1020.06,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215082-43ec-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Base","mdMsl":1033.92,"tvdMsl":1020.06,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215076-ac2a-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"Skade Fm. Top","mdMsl":1143.75,"tvdMsl":1125.04,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad21507f-6e47-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"Skade Fm. Base","mdMsl":1268.47,"tvdMsl":1244.03,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215076-5923-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"Grid Fm. Top","mdMsl":2149.87,"tvdMsl":2043.59,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215073-f69d-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"Grid Fm. Base","mdMsl":2274.63,"tvdMsl":2157.3,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215076-1cca-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Base","mdMsl":2331.08,"tvdMsl":2208.36,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad21507c-7d3b-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"Balder Fm. Top","mdMsl":2331.08,"tvdMsl":2208.36,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad21507f-2d60-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"ROGALAND GP. Top","mdMsl":2331.08,"tvdMsl":2208.36,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215074-08ba-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"Balder Fm. Base","mdMsl":2402.41,"tvdMsl":2271.94,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215074-0b8a-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"Sele Fm. Top","mdMsl":2402.41,"tvdMsl":2271.94,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215076-5922-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"Sele Fm. Base","mdMsl":2475.43,"tvdMsl":2335.59,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad21507c-3b30-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"Lista Fm. Top","mdMsl":2475.43,"tvdMsl":2335.59,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215072-9f98-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"Ty Fm. Top","mdMsl":2553.65,"tvdMsl":2399.86,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215076-5929-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"Lista Fm. Base","mdMsl":2553.65,"tvdMsl":2399.86,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215072-3760-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"ROGALAND GP. Base","mdMsl":2763.3,"tvdMsl":2549.5,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215077-1d3f-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"SHETLAND GP. Top","mdMsl":2763.3,"tvdMsl":2549.5,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215079-6d63-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"Ty Fm. Base","mdMsl":2763.3,"tvdMsl":2549.5,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215075-44b1-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"Ekofisk Fm. Top","mdMsl":2763.3,"tvdMsl":2549.5,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad21507b-a627-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"Tor Fm. Top","mdMsl":2795.7,"tvdMsl":2569.81,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad21507c-7951-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"Ekofisk Fm. Base","mdMsl":2795.7,"tvdMsl":2569.81,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215075-6c0f-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"Hod Fm. Top","mdMsl":2987.53,"tvdMsl":2690.9,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad21507c-99bb-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"Tor Fm. Base","mdMsl":2987.53,"tvdMsl":2690.9,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215075-6fc8-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"Hod Fm. Base","mdMsl":3098.83,"tvdMsl":2749.21,"properties":{"confidence":"P","qualifier":"NL"}},{"id":"ad21507d-52cd-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"Blodoeks Fm. Top","mdMsl":3098.83,"tvdMsl":2749.21,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215076-592a-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"Kick-Off Point","mdMsl":3130.1,"tvdMsl":2764.93,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507a-e73f-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"Blodoeks Fm. Base","mdMsl":3245,"tvdMsl":2830.28,"properties":{"confidence":"P","qualifier":null}},{"id":"ad21507c-7be2-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"Hidra Fm. Top","mdMsl":3245,"tvdMsl":2830.28,"properties":{"confidence":"P","qualifier":null}},{"id":"ad215072-3bbc-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"Hidra Fm. Base","mdMsl":3275.1,"tvdMsl":2848.94,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-1444-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"Roedby Fm. Top","mdMsl":3275.1,"tvdMsl":2848.94,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507c-78f3-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"SHETLAND GP. Base","mdMsl":3275.1,"tvdMsl":2848.94,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507d-5b90-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"CROMER KNOLL GP. Top","mdMsl":3275.1,"tvdMsl":2848.94,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215077-b22d-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"VIKING GP. Top","mdMsl":3309.5,"tvdMsl":2870.8,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-5921-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"Draupne Fm. Top","mdMsl":3309.5,"tvdMsl":2870.8,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215079-b78c-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"Roedby Fm. Base","mdMsl":3309.5,"tvdMsl":2870.8,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507f-09fc-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"CROMER KNOLL GP. Base","mdMsl":3309.5,"tvdMsl":2870.8,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-42b1-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"Draupne Fm. Base","mdMsl":3315.8,"tvdMsl":2874.9,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-591f-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"VIKING GP. Base","mdMsl":3315.8,"tvdMsl":2874.9,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215075-5aca-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"VESTLAND GP. Top","mdMsl":3315.8,"tvdMsl":2874.9,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507f-7094-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Top","mdMsl":3315.8,"tvdMsl":2874.9,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215079-7a13-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Base","mdMsl":3323.69,"tvdMsl":2880.04,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507d-74ab-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"Sleipner Fm. Top","mdMsl":3323.69,"tvdMsl":2880.04,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-076d-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"Total Depth","mdMsl":3442.1,"tvdMsl":2961.6,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215073-73f5-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"Sleipner Fm. Base","mdMsl":3442.1,"tvdMsl":2961.6,"properties":{"confidence":null,"qualifier":"NR"}},{"id":"ad215078-30c4-2e4b-e053-c918a4881b5c","wellboreId":"ad215043-6e11-2b7e-e053-c818a488c79a","pickIdentifier":"VESTLAND GP. Base","mdMsl":3442.1,"tvdMsl":2961.6,"properties":{"confidence":null,"qualifier":"NR"}}],"ad215042-eccc-2b7e-e053-c818a488c79a":[{"id":"ad215074-ef1e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-eccc-2b7e-e053-c818a488c79a","pickIdentifier":"Seabed","mdMsl":91.1,"tvdMsl":91.1,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215073-f49f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-eccc-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Top","mdMsl":91.1,"tvdMsl":91.1,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215077-1a7a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-eccc-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Top","mdMsl":830.1,"tvdMsl":825.8,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215075-5db4-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-eccc-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Top","mdMsl":1016.3,"tvdMsl":1009.33,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507b-cd84-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-eccc-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Base","mdMsl":1016.3,"tvdMsl":1009.33,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215082-491b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-eccc-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Base","mdMsl":1016.3,"tvdMsl":1009.33,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-4350-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-eccc-2b7e-e053-c818a488c79a","pickIdentifier":"Total Depth","mdMsl":1028.1,"tvdMsl":1020.96,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215079-9cd3-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-eccc-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Base","mdMsl":1028.1,"tvdMsl":1020.96,"properties":{"confidence":null,"qualifier":"NR"}}],"ad215042-039a-2b7e-e053-c818a488c79a":[{"id":"ad215074-fb0f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"Seabed","mdMsl":91.1,"tvdMsl":91.1,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad21507f-6c8b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Top","mdMsl":91.1,"tvdMsl":91.1,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad21507d-c052-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Top","mdMsl":831.6,"tvdMsl":827.68,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215072-ac91-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Base","mdMsl":1014.4,"tvdMsl":1007.86,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215077-44db-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Top","mdMsl":1014.4,"tvdMsl":1007.86,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad21507d-5aa5-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Base","mdMsl":1014.4,"tvdMsl":1007.86,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215079-6f1c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"Skade Fm. Top","mdMsl":1199.1,"tvdMsl":1188.92,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215077-1ce3-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"Skade Fm. Base","mdMsl":1262.6,"tvdMsl":1251.09,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad21507f-9653-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"Kick-Off Point","mdMsl":1309.1,"tvdMsl":1296.87,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215075-3317-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"Grid Fm. Top","mdMsl":2057.1,"tvdMsl":2002.91,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-ab4a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"Grid Fm. Base","mdMsl":2107.7,"tvdMsl":2050.72,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-2ed6-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"Balder Fm. Top","mdMsl":2264.4,"tvdMsl":2204.19,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507a-355a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Base","mdMsl":2264.4,"tvdMsl":2204.19,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507d-7220-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"ROGALAND GP. Top","mdMsl":2264.4,"tvdMsl":2204.19,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215078-d17d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"Balder Fm. Base","mdMsl":2329.3,"tvdMsl":2268.91,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215080-1817-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"Sele Fm. Top","mdMsl":2329.3,"tvdMsl":2268.91,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215072-9929-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"Sele Fm. Base","mdMsl":2399,"tvdMsl":2338.11,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-a371-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"Lista Fm. Top","mdMsl":2399,"tvdMsl":2338.11,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-1ca7-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"Lista Fm. Base","mdMsl":2486.5,"tvdMsl":2423.35,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507e-0ddd-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"Ty Fm. Top","mdMsl":2486.5,"tvdMsl":2423.35,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-a5dd-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"Ty Fm. Base","mdMsl":2613.2,"tvdMsl":2540.8,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-a732-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"SHETLAND GP. Top","mdMsl":2613.2,"tvdMsl":2540.8,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215075-42e0-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"ROGALAND GP. Base","mdMsl":2613.2,"tvdMsl":2540.8,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215075-64c3-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"Ekofisk Fm. Top","mdMsl":2613.2,"tvdMsl":2540.8,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507b-a2eb-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"Tor Fm. Top","mdMsl":2630.2,"tvdMsl":2555.68,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507d-d917-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"Ekofisk Fm. Base","mdMsl":2630.2,"tvdMsl":2555.68,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-d368-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"Hod Fm. Top","mdMsl":2822,"tvdMsl":2708.88,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507e-c882-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"Tor Fm. Base","mdMsl":2822,"tvdMsl":2708.88,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507f-6977-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"Blodoeks Fm. Top","mdMsl":2924.3,"tvdMsl":2775.38,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215082-1562-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"Hod Fm. Base","mdMsl":2924.3,"tvdMsl":2775.38,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215073-4ac8-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"Hidra Fm. Top","mdMsl":3012.5,"tvdMsl":2823.62,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-29f1-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"Blodoeks Fm. Base","mdMsl":3012.5,"tvdMsl":2823.62,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215077-7741-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"Hidra Fm. Base","mdMsl":3034.4,"tvdMsl":2834.09,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507f-016c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"SHETLAND GP. Base","mdMsl":3034.4,"tvdMsl":2834.09,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215080-1b83-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"Roedby Fm. Top","mdMsl":3034.4,"tvdMsl":2834.09,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215080-b970-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"CROMER KNOLL GP. Top","mdMsl":3034.4,"tvdMsl":2834.09,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507b-a833-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"Aasgard Fm. Top","mdMsl":3087.5,"tvdMsl":2857.12,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215081-dbd7-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"Roedby Fm. Base","mdMsl":3087.5,"tvdMsl":2857.12,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215072-b15d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"CROMER KNOLL GP. Base","mdMsl":3150.1,"tvdMsl":2878.06,"properties":{"confidence":"E","qualifier":null}},{"id":"ad215074-1431-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"Draupne Fm. Top","mdMsl":3150.1,"tvdMsl":2878.06,"properties":{"confidence":"E","qualifier":null}},{"id":"ad215073-5e64-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"Aasgard Fm. Base","mdMsl":3150.1,"tvdMsl":2878.06,"properties":{"confidence":"E","qualifier":null}},{"id":"ad215072-e66d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"VIKING GP. Top","mdMsl":3150.1,"tvdMsl":2878.06,"properties":{"confidence":"E","qualifier":null}},{"id":"ad215078-4b53-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"Draupne Fm. Base","mdMsl":3168.2,"tvdMsl":2883.16,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215075-881e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Top","mdMsl":3168.2,"tvdMsl":2883.16,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215072-abe1-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"VIKING GP. Base","mdMsl":3174.6,"tvdMsl":2884.52,"properties":{"confidence":"G","qualifier":"FP"}},{"id":"ad215075-59b5-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"VESTLAND GP. Top","mdMsl":3174.6,"tvdMsl":2884.52,"properties":{"confidence":"G","qualifier":"FP"}},{"id":"ad215078-755d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Top","mdMsl":3174.6,"tvdMsl":2884.52,"properties":{"confidence":"G","qualifier":"FP"}},{"id":"ad21507a-1db4-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Base","mdMsl":3174.6,"tvdMsl":2884.52,"properties":{"confidence":"G","qualifier":"FP"}},{"id":"ad215075-2cf6-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Base","mdMsl":3449.1,"tvdMsl":2927.64,"properties":{"confidence":"F","qualifier":"FP"}},{"id":"ad21507e-0b8b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Top","mdMsl":3449.1,"tvdMsl":2927.64,"properties":{"confidence":null,"qualifier":"FP"}},{"id":"ad21507a-d52c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Base","mdMsl":3798.8,"tvdMsl":3040.23,"properties":{"confidence":"F","qualifier":"FP"}},{"id":"ad21507f-6fbd-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Top","mdMsl":3798.8,"tvdMsl":3040.23,"properties":{"confidence":"F","qualifier":"FP"}},{"id":"ad215079-4102-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Top","mdMsl":3949,"tvdMsl":3093.45,"properties":{"confidence":"G","qualifier":"FP"}},{"id":"ad215079-7270-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Base","mdMsl":3949,"tvdMsl":3093.45,"properties":{"confidence":"G","qualifier":"FP"}},{"id":"ad21507b-5232-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"VIKING GP. Top","mdMsl":3949,"tvdMsl":3093.45,"properties":{"confidence":"G","qualifier":"FP"}},{"id":"ad215075-5e8b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"Total Depth","mdMsl":4039.1,"tvdMsl":3125.57,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215078-b4fe-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Base","mdMsl":4039.1,"tvdMsl":3125.57,"properties":{"confidence":null,"qualifier":"NR"}},{"id":"ad215082-472c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-039a-2b7e-e053-c818a488c79a","pickIdentifier":"VIKING GP. Base","mdMsl":4039.1,"tvdMsl":3125.57,"properties":{"confidence":null,"qualifier":"NR"}}],"ad215042-03f2-2b7e-e053-c818a488c79a":[{"id":"ad215077-4b41-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Seabed","mdMsl":91.1,"tvdMsl":91.1,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad21507c-2caf-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Top","mdMsl":91.1,"tvdMsl":91.1,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215072-ed32-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Top","mdMsl":846.37,"tvdMsl":839.37,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad21507a-eec1-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Base","mdMsl":1033.92,"tvdMsl":1020.06,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad21507c-9ba7-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Base","mdMsl":1033.92,"tvdMsl":1020.06,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad21507f-157f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Top","mdMsl":1033.92,"tvdMsl":1020.06,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215074-ac29-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Skade Fm. Top","mdMsl":1143.75,"tvdMsl":1125.04,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215078-b521-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Skade Fm. Base","mdMsl":1268.47,"tvdMsl":1244.03,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215077-d885-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Kick-Off Point","mdMsl":1325.1,"tvdMsl":1296.15,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507d-6eea-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Grid Fm. Top","mdMsl":2178.7,"tvdMsl":2076.61,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-216d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Grid Fm. Base","mdMsl":2260.4,"tvdMsl":2147.51,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215077-1c3e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Balder Fm. Top","mdMsl":2337.8,"tvdMsl":2214.61,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507b-d02c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"ROGALAND GP. Top","mdMsl":2337.8,"tvdMsl":2214.61,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507d-bc49-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Base","mdMsl":2337.8,"tvdMsl":2214.61,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215072-9830-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Sele Fm. Top","mdMsl":2400.9,"tvdMsl":2269.29,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215077-a0db-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Balder Fm. Base","mdMsl":2400.9,"tvdMsl":2269.29,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507b-6694-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Lista Fm. Top","mdMsl":2473.2,"tvdMsl":2331.92,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507f-0d80-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Sele Fm. Base","mdMsl":2473.2,"tvdMsl":2331.92,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215079-710b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Ty Fm. Top","mdMsl":2571.8,"tvdMsl":2417.18,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507b-f090-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Lista Fm. Base","mdMsl":2571.8,"tvdMsl":2417.18,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215074-ae0d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"ROGALAND GP. Base","mdMsl":2733.2,"tvdMsl":2544.13,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507c-2fb7-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"SHETLAND GP. Top","mdMsl":2733.2,"tvdMsl":2544.13,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507f-0e1a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Ty Fm. Base","mdMsl":2733.2,"tvdMsl":2544.13,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507f-a039-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Ekofisk Fm. Top","mdMsl":2733.2,"tvdMsl":2544.13,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-4886-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Ekofisk Fm. Base","mdMsl":2765.9,"tvdMsl":2566.16,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-1504-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Tor Fm. Top","mdMsl":2765.9,"tvdMsl":2566.16,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215079-7e70-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Tor Fm. Base","mdMsl":3023.6,"tvdMsl":2696.89,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507b-a198-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Hod Fm. Top","mdMsl":3023.6,"tvdMsl":2696.89,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-bf06-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Blodoeks Fm. Top","mdMsl":3207.2,"tvdMsl":2777.32,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215082-3f6f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Hod Fm. Base","mdMsl":3207.2,"tvdMsl":2777.32,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215079-8b9d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Blodoeks Fm. Base","mdMsl":3278,"tvdMsl":2805.06,"properties":{"confidence":"F","qualifier":null}},{"id":"ad21507d-d2b1-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Hidra Fm. Top","mdMsl":3278,"tvdMsl":2805.06,"properties":{"confidence":"F","qualifier":null}},{"id":"ad215076-3732-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"SHETLAND GP. Base","mdMsl":3295.1,"tvdMsl":2811.71,"properties":{"confidence":"F","qualifier":null}},{"id":"ad21507e-a60f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Roedby Fm. Top","mdMsl":3295.1,"tvdMsl":2811.71,"properties":{"confidence":"F","qualifier":null}},{"id":"ad21507f-048d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"CROMER KNOLL GP. Top","mdMsl":3295.1,"tvdMsl":2811.71,"properties":{"confidence":"F","qualifier":null}},{"id":"ad21507f-68b9-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Hidra Fm. Base","mdMsl":3295.1,"tvdMsl":2811.71,"properties":{"confidence":"F","qualifier":null}},{"id":"ad21507a-208c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Aasgard Fm. Top","mdMsl":3317.5,"tvdMsl":2820.12,"properties":{"confidence":"F","qualifier":null}},{"id":"ad21507d-d806-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Roedby Fm. Base","mdMsl":3317.5,"tvdMsl":2820.12,"properties":{"confidence":"F","qualifier":null}},{"id":"ad215074-c277-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Aasgard Fm. Base","mdMsl":3394.1,"tvdMsl":2847.29,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215073-f274-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"VIKING GP. Top","mdMsl":3394.1,"tvdMsl":2847.29,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215073-4624-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Draupne Fm. Top","mdMsl":3394.1,"tvdMsl":2847.29,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215072-c91a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"CROMER KNOLL GP. Base","mdMsl":3394.1,"tvdMsl":2847.29,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-a44d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Top","mdMsl":3419.8,"tvdMsl":2855.83,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507b-c6a4-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Draupne Fm. Base","mdMsl":3419.8,"tvdMsl":2855.83,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-d62d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"VESTLAND GP. Top","mdMsl":3428.3,"tvdMsl":2858.43,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507c-cabd-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Top","mdMsl":3428.3,"tvdMsl":2858.43,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507e-a97f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"VIKING GP. Base","mdMsl":3428.3,"tvdMsl":2858.43,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215080-584c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Base","mdMsl":3428.3,"tvdMsl":2858.43,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-a87a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Base","mdMsl":4201.1,"tvdMsl":3076.02,"properties":{"confidence":"F","qualifier":"FP"}},{"id":"ad215077-1cf0-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Base","mdMsl":4201.1,"tvdMsl":3076.02,"properties":{"confidence":"F","qualifier":"FP"}},{"id":"ad215077-1a22-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Top","mdMsl":4508.7,"tvdMsl":3138.66,"properties":{"confidence":"F","qualifier":"FP"}},{"id":"ad21507a-6a5f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Base","mdMsl":4508.7,"tvdMsl":3138.66,"properties":{"confidence":"F","qualifier":"FP"}},{"id":"ad215074-a604-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Top","mdMsl":4517.1,"tvdMsl":3140.01,"properties":{"confidence":"P","qualifier":"NR"}},{"id":"ad215074-11c8-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Top","mdMsl":4517.1,"tvdMsl":3140.01,"properties":{"confidence":"P","qualifier":"NR"}},{"id":"ad215077-9f41-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Base","mdMsl":4526.4,"tvdMsl":3141.46,"properties":{"confidence":"F","qualifier":"FP"}},{"id":"ad215072-ea43-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Top","mdMsl":4526.4,"tvdMsl":3141.46,"properties":{"confidence":"F","qualifier":"FP"}},{"id":"ad215074-8ffd-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Base","mdMsl":4535.1,"tvdMsl":3142.81,"properties":{"confidence":"F","qualifier":"NR"}},{"id":"ad215076-386a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Base","mdMsl":4535.1,"tvdMsl":3142.81,"properties":{"confidence":"F","qualifier":"NR"}},{"id":"ad215072-97f0-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Top","mdMsl":4542.4,"tvdMsl":3143.95,"properties":{"confidence":"F","qualifier":"FP"}},{"id":"ad215076-26b4-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Base","mdMsl":4542.4,"tvdMsl":3143.95,"properties":{"confidence":"G","qualifier":"FP"}},{"id":"ad215074-e64d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Total Depth","mdMsl":4630.1,"tvdMsl":3157.41,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215075-a89c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f2-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Top","mdMsl":4630.1,"tvdMsl":3157.41,"properties":{"confidence":null,"qualifier":"NR"}}],"ad215042-03ea-2b7e-e053-c818a488c79a":[{"id":"ad215074-1d64-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Top","mdMsl":91.1,"tvdMsl":91.1,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad21507c-7897-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Seabed","mdMsl":91.1,"tvdMsl":91.1,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215074-9da6-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Top","mdMsl":829.94,"tvdMsl":827.18,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215074-1d69-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Top","mdMsl":1015.8,"tvdMsl":1009.76,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215074-54e2-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Base","mdMsl":1015.8,"tvdMsl":1009.76,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad21507e-108d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Base","mdMsl":1015.8,"tvdMsl":1009.76,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215079-7a4f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Skade Fm. Top","mdMsl":1185.1,"tvdMsl":1170,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215074-1d5c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Skade Fm. Base","mdMsl":1275.4,"tvdMsl":1253.8,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215074-1d5e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Grid Fm. Top","mdMsl":2166.1,"tvdMsl":2065.09,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215075-2c2d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Grid Fm. Base","mdMsl":2228.1,"tvdMsl":2126.06,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad21507a-1a22-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Base","mdMsl":2318.1,"tvdMsl":2212.47,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215080-1cac-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Balder Fm. Top","mdMsl":2318.1,"tvdMsl":2212.47,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215075-67f3-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Balder Fm. Base","mdMsl":2380.1,"tvdMsl":2269.83,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad21507a-4757-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"ROGALAND GP. Top","mdMsl":2380.1,"tvdMsl":2269.83,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad21507f-0eb7-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Sele Fm. Top","mdMsl":2380.1,"tvdMsl":2269.83,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215074-1ebf-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Sele Fm. Base","mdMsl":2456.1,"tvdMsl":2336.63,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad21507f-a02f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Lista Fm. Top","mdMsl":2456.1,"tvdMsl":2336.63,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215075-512c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Kick-Off Point","mdMsl":2531.1,"tvdMsl":2398.05,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-9f6f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Lista Fm. Base","mdMsl":2568.29,"tvdMsl":2426.93,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215075-66d7-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Ty Fm. Top","mdMsl":2568.29,"tvdMsl":2426.93,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215077-7906-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"SHETLAND GP. Top","mdMsl":2732.65,"tvdMsl":2535.11,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-17e5-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Ekofisk Fm. Top","mdMsl":2732.65,"tvdMsl":2535.11,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507d-b63c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Ty Fm. Base","mdMsl":2732.65,"tvdMsl":2535.11,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507f-0b40-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"ROGALAND GP. Base","mdMsl":2732.65,"tvdMsl":2535.11,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-1790-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Ekofisk Fm. Base","mdMsl":2768.04,"tvdMsl":2553.12,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507b-c75f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Tor Fm. Top","mdMsl":2768.04,"tvdMsl":2553.12,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215078-aaed-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Tor Fm. Base","mdMsl":3035.93,"tvdMsl":2678.46,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507b-c656-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hod Fm. Top","mdMsl":3035.93,"tvdMsl":2678.46,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215079-8849-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hod Fm. Base","mdMsl":3164.1,"tvdMsl":2738.1,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215075-5972-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Blodoeks Fm. Top","mdMsl":3164.1,"tvdMsl":2738.1,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215072-eaa5-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hidra Fm. Top","mdMsl":3213.38,"tvdMsl":2760.35,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215079-ae96-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Blodoeks Fm. Base","mdMsl":3213.38,"tvdMsl":2760.35,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215077-d84e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"CROMER KNOLL GP. Top","mdMsl":3244.2,"tvdMsl":2772.81,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215079-898f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Roedby Fm. Top","mdMsl":3244.2,"tvdMsl":2772.81,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215075-458e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hidra Fm. Base","mdMsl":3244.2,"tvdMsl":2772.81,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507c-9bb8-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"SHETLAND GP. Base","mdMsl":3244.2,"tvdMsl":2772.81,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-cce6-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Draupne Fm. Base","mdMsl":3296.08,"tvdMsl":2791.52,"properties":{"confidence":"G","qualifier":"FO"}},{"id":"ad215075-d131-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Top","mdMsl":3296.08,"tvdMsl":2791.52,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215079-7f0a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Draupne Fm. Top","mdMsl":3296.08,"tvdMsl":2791.52,"properties":{"confidence":"G","qualifier":"FO"}},{"id":"ad215079-925c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Roedby Fm. Base","mdMsl":3296.08,"tvdMsl":2791.52,"properties":{"confidence":"G","qualifier":"FO"}},{"id":"ad215075-62d2-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"VIKING GP. Top","mdMsl":3296.08,"tvdMsl":2791.52,"properties":{"confidence":"G","qualifier":"FO"}},{"id":"ad21507c-2bf5-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"CROMER KNOLL GP. Base","mdMsl":3296.08,"tvdMsl":2791.52,"properties":{"confidence":"G","qualifier":"FO"}},{"id":"ad215074-1d5d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Sand VOLVE Top","mdMsl":3340.5,"tvdMsl":2806.17,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507a-d63d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Sand VOLVE Base","mdMsl":3359.9,"tvdMsl":2812.36,"properties":{"confidence":"G","qualifier":"FP"}},{"id":"ad21507d-0fb3-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Sand VOLVE Top","mdMsl":3383.5,"tvdMsl":2819.85,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215074-a6a3-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Top","mdMsl":3412.57,"tvdMsl":2829.09,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-1d66-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 12 VOLVE Top","mdMsl":3412.57,"tvdMsl":2829.09,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-aa7e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Sand VOLVE Base","mdMsl":3412.57,"tvdMsl":2829.09,"properties":{"confidence":"E","qualifier":null}},{"id":"ad21507b-5450-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Base","mdMsl":3412.57,"tvdMsl":2829.09,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-17c8-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 11 VOLVE Top","mdMsl":3449.1,"tvdMsl":2840.15,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-1ebb-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 12 VOLVE Base","mdMsl":3449.1,"tvdMsl":2840.15,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215072-a906-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Base","mdMsl":3484.1,"tvdMsl":2849.5,"properties":{"confidence":null,"qualifier":"NR"}},{"id":"ad215074-1d63-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 11 VOLVE Base","mdMsl":3484.1,"tvdMsl":2849.5,"properties":{"confidence":null,"qualifier":"NR"}},{"id":"ad21507a-dd94-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 11 VOLVE Base","mdMsl":3484.1,"tvdMsl":2849.5,"properties":{"confidence":null,"qualifier":"NR"}},{"id":"ad215080-59f1-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Base","mdMsl":3484.1,"tvdMsl":2849.5,"properties":{"confidence":null,"qualifier":"NR"}},{"id":"ad215074-1d5a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 11 VOLVE Top","mdMsl":3608.1,"tvdMsl":2868.01,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215081-e0de-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 12 VOLVE Base","mdMsl":3608.1,"tvdMsl":2868.01,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215078-b63b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 12 VOLVE Top","mdMsl":3754.6,"tvdMsl":2870.6,"properties":{"confidence":"G","qualifier":"FP"}},{"id":"ad21507d-56d6-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Top","mdMsl":3754.6,"tvdMsl":2870.6,"properties":{"confidence":"E","qualifier":"FP"}},{"id":"ad21507d-7211-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Base","mdMsl":3754.6,"tvdMsl":2870.6,"properties":{"confidence":"G","qualifier":"FP"}},{"id":"ad215074-aa8e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Top","mdMsl":3814.1,"tvdMsl":2873.04,"properties":{"confidence":null,"qualifier":"NR"}},{"id":"ad21507f-178d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Top","mdMsl":3814.1,"tvdMsl":2873.04,"properties":{"confidence":null,"qualifier":"NR"}},{"id":"ad215074-1d61-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Top","mdMsl":3839.1,"tvdMsl":2875.2,"properties":{"confidence":"E","qualifier":null}},{"id":"ad215076-aa3b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 12 VOLVE Top","mdMsl":3839.1,"tvdMsl":2875.2,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215075-520e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Base","mdMsl":3839.1,"tvdMsl":2875.2,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215077-acd7-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 12 VOLVE Base","mdMsl":3845.1,"tvdMsl":2875.9,"properties":{"confidence":null,"qualifier":"NR"}},{"id":"ad215077-4803-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Base","mdMsl":3845.1,"tvdMsl":2875.9,"properties":{"confidence":null,"qualifier":"NR"}},{"id":"ad215074-1d5f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 12 VOLVE Base","mdMsl":3845.1,"tvdMsl":2875.9,"properties":{"confidence":null,"qualifier":"NR"}},{"id":"ad215073-5c1e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Base","mdMsl":3845.1,"tvdMsl":2875.9,"properties":{"confidence":null,"qualifier":"NR"}},{"id":"ad215074-1eba-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 12 VOLVE Top","mdMsl":3879.1,"tvdMsl":2880.21,"properties":{"confidence":"G","qualifier":"FP"}},{"id":"ad215075-432e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Base","mdMsl":3879.1,"tvdMsl":2880.21,"properties":{"confidence":"G","qualifier":"FP"}},{"id":"ad21507f-6966-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Top","mdMsl":3879.1,"tvdMsl":2880.21,"properties":{"confidence":"E","qualifier":"FP"}},{"id":"ad215074-1d68-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Top","mdMsl":3895.1,"tvdMsl":2882.62,"properties":{"confidence":null,"qualifier":"NR"}},{"id":"ad21507c-33ae-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Top","mdMsl":3895.1,"tvdMsl":2882.62,"properties":{"confidence":null,"qualifier":"NR"}},{"id":"ad215072-ed7c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Top","mdMsl":3897.1,"tvdMsl":2882.93,"properties":{"confidence":"E","qualifier":"FP"}},{"id":"ad215079-b6eb-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Base","mdMsl":3897.1,"tvdMsl":2882.93,"properties":{"confidence":"G","qualifier":"FP"}},{"id":"ad21507b-675f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 12 VOLVE Top","mdMsl":3897.1,"tvdMsl":2882.93,"properties":{"confidence":"G","qualifier":"FP"}},{"id":"ad215074-1d60-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 11 VOLVE Top","mdMsl":3972.3,"tvdMsl":2897.82,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215073-4875-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 12 VOLVE Base","mdMsl":3972.3,"tvdMsl":2897.82,"properties":{"confidence":"G","qualifier":"FP"}},{"id":"ad215072-a6de-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 10 VOLVE Top","mdMsl":4008.1,"tvdMsl":2906.49,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507a-4a10-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 11 VOLVE Base","mdMsl":4008.1,"tvdMsl":2906.49,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-1ebd-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 9 VOLVE Top","mdMsl":4037.1,"tvdMsl":2913.59,"properties":{"confidence":"F","qualifier":"FP"}},{"id":"ad21507b-5cb4-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 10 VOLVE Base","mdMsl":4037.1,"tvdMsl":2913.59,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-f79f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 9 VOLVE Base","mdMsl":4053.1,"tvdMsl":2917.31,"properties":{"confidence":null,"qualifier":"NR"}},{"id":"ad215074-1d59-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 9 VOLVE Base","mdMsl":4053.1,"tvdMsl":2917.31,"properties":{"confidence":null,"qualifier":"NR"}},{"id":"ad215079-8971-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Base","mdMsl":4053.1,"tvdMsl":2917.31,"properties":{"confidence":null,"qualifier":"NR"}},{"id":"ad215075-67b3-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Base","mdMsl":4053.1,"tvdMsl":2917.31,"properties":{"confidence":null,"qualifier":"NR"}},{"id":"ad215075-5f5b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 9 VOLVE Top","mdMsl":4132.7,"tvdMsl":2933.64,"properties":{"confidence":"G","qualifier":"FP"}},{"id":"ad21507b-a95e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 10 VOLVE Base","mdMsl":4132.7,"tvdMsl":2933.64,"properties":{"confidence":"G","qualifier":"FP"}},{"id":"ad215075-5cbc-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 11 VOLVE Base","mdMsl":4183.1,"tvdMsl":2942.48,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507d-5956-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 10 VOLVE Top","mdMsl":4183.1,"tvdMsl":2942.48,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507d-dce1-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 12 VOLVE Base","mdMsl":4282.1,"tvdMsl":2961.78,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507f-14f6-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 11 VOLVE Top","mdMsl":4282.1,"tvdMsl":2961.78,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-1ec0-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 12 VOLVE Top","mdMsl":4319.1,"tvdMsl":2970.87,"properties":{"confidence":"G","qualifier":"FP"}},{"id":"ad215073-6d36-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Top","mdMsl":4319.1,"tvdMsl":2970.87,"properties":{"confidence":"E","qualifier":"FP"}},{"id":"ad21507f-7366-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Base","mdMsl":4319.1,"tvdMsl":2970.87,"properties":{"confidence":"G","qualifier":"FP"}},{"id":"ad215072-aa5a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Top","mdMsl":4345.1,"tvdMsl":2978.5,"properties":{"confidence":"G","qualifier":"NR"}},{"id":"ad215075-a728-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Top","mdMsl":4345.1,"tvdMsl":2978.5,"properties":{"confidence":null,"qualifier":"NR"}},{"id":"ad215074-a5d8-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Top","mdMsl":4428.6,"tvdMsl":3010.74,"properties":{"confidence":"E","qualifier":null}},{"id":"ad21507c-cb6d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 12 VOLVE Top","mdMsl":4428.6,"tvdMsl":3010.74,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507f-97b3-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Base","mdMsl":4428.6,"tvdMsl":3010.74,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-1d67-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 11 VOLVE Top","mdMsl":4455.1,"tvdMsl":3023.86,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215075-574c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 12 VOLVE Base","mdMsl":4455.1,"tvdMsl":3023.86,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-30e9-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 11 VOLVE Base","mdMsl":4500.1,"tvdMsl":3048.45,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507d-dda8-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 10 VOLVE Top","mdMsl":4500.1,"tvdMsl":3048.45,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-1ec1-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 9 VOLVE Top","mdMsl":4518.1,"tvdMsl":3058.98,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507e-c8aa-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 10 VOLVE Base","mdMsl":4518.1,"tvdMsl":3058.98,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-1d5b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 8 VOLVE Top","mdMsl":4546.1,"tvdMsl":3076.6,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215078-b65c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 9 VOLVE Base","mdMsl":4546.1,"tvdMsl":3076.6,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507a-3593-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 8 VOLVE Base","mdMsl":4592.1,"tvdMsl":3107.59,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507f-0c91-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 7 VOLVE Top","mdMsl":4592.1,"tvdMsl":3107.59,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215077-219c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 7 VOLVE Base","mdMsl":4626.6,"tvdMsl":3132.96,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507b-53e9-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 6 VOLVE Top","mdMsl":4626.6,"tvdMsl":3132.96,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215074-1d65-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 5 VOLVE Top","mdMsl":4643.1,"tvdMsl":3145.49,"properties":{"confidence":"F","qualifier":null}},{"id":"ad215078-4a07-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 6 VOLVE Base","mdMsl":4643.1,"tvdMsl":3145.49,"properties":{"confidence":"F","qualifier":null}},{"id":"ad21507d-2e82-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 5 VOLVE Base","mdMsl":4646.1,"tvdMsl":3147.83,"properties":{"confidence":"F","qualifier":null}},{"id":"ad21507d-ddc8-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 4 VOLVE Top","mdMsl":4646.1,"tvdMsl":3147.83,"properties":{"confidence":"F","qualifier":null}},{"id":"ad215077-4759-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 3 VOLVE Top","mdMsl":4655.1,"tvdMsl":3154.86,"properties":{"confidence":"F","qualifier":null}},{"id":"ad21507a-4f8c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 4 VOLVE Base","mdMsl":4655.1,"tvdMsl":3154.86,"properties":{"confidence":"F","qualifier":null}},{"id":"ad215075-7fb7-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 3 VOLVE Base","mdMsl":4660.1,"tvdMsl":3158.76,"properties":{"confidence":"F","qualifier":null}},{"id":"ad21507e-1523-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 2 VOLVE Top","mdMsl":4660.1,"tvdMsl":3158.76,"properties":{"confidence":"F","qualifier":null}},{"id":"ad215075-4649-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 1 VOLVE Top","mdMsl":4670.1,"tvdMsl":3166.56,"properties":{"confidence":"F","qualifier":null}},{"id":"ad21507a-d6a3-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 2 VOLVE Base","mdMsl":4670.1,"tvdMsl":3166.56,"properties":{"confidence":"F","qualifier":null}},{"id":"ad215074-8b24-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Base","mdMsl":4677.1,"tvdMsl":3172.06,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215072-e651-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 1 VOLVE Base","mdMsl":4677.1,"tvdMsl":3172.06,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507a-69f5-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Sleipner Fm. Top","mdMsl":4677.1,"tvdMsl":3172.06,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215072-a6e8-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Total Depth","mdMsl":4715.1,"tvdMsl":3202.4,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215074-918f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"VESTLAND GP. Base","mdMsl":4715.1,"tvdMsl":3202.4,"properties":{"confidence":null,"qualifier":"NR"}},{"id":"ad215078-3732-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ea-2b7e-e053-c818a488c79a","pickIdentifier":"Sleipner Fm. Base","mdMsl":4715.1,"tvdMsl":3202.4,"properties":{"confidence":null,"qualifier":"NR"}}],"ad215042-03f7-2b7e-e053-c818a488c79a":[{"id":"ad215073-62de-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Top","mdMsl":91.1,"tvdMsl":91.1,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507c-32bf-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"Seabed","mdMsl":91.1,"tvdMsl":91.1,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215073-f69f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Top","mdMsl":843.73,"tvdMsl":823.41,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215077-2192-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Base","mdMsl":1042.92,"tvdMsl":1009.78,"properties":{"confidence":"P","qualifier":null}},{"id":"ad21507a-de4f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Base","mdMsl":1042.92,"tvdMsl":1009.78,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507d-7b31-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Top","mdMsl":1042.92,"tvdMsl":1009.78,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-c1f0-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"Skade Fm. Top","mdMsl":1218.82,"tvdMsl":1170.13,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-1440-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"Skade Fm. Base","mdMsl":1321.88,"tvdMsl":1260.61,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215080-2413-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"Grid Fm. Top","mdMsl":2247.28,"tvdMsl":2028.38,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215075-aaf9-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"Grid Fm. Base","mdMsl":2327.23,"tvdMsl":2095.2,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-f6db-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"Balder Fm. Top","mdMsl":2467.26,"tvdMsl":2212.54,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-47e4-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"ROGALAND GP. Top","mdMsl":2467.26,"tvdMsl":2212.54,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-47e7-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Base","mdMsl":2467.26,"tvdMsl":2212.54,"properties":{"confidence":"P","qualifier":null}},{"id":"ad215077-af2b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"Balder Fm. Base","mdMsl":2548.66,"tvdMsl":2281.82,"properties":{"confidence":"P","qualifier":null}},{"id":"ad215080-32e5-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"Sele Fm. Top","mdMsl":2548.66,"tvdMsl":2281.82,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-d4a3-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"Lista Fm. Top","mdMsl":2622.35,"tvdMsl":2344.79,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-4960-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"Sele Fm. Base","mdMsl":2622.35,"tvdMsl":2344.79,"properties":{"confidence":"P","qualifier":null}},{"id":"ad21507d-28ed-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"Lista Fm. Base","mdMsl":2732.44,"tvdMsl":2439.09,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507e-0b97-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"Ty Fm. Top","mdMsl":2732.44,"tvdMsl":2439.09,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-e448-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"Ekofisk Fm. Top","mdMsl":2844.11,"tvdMsl":2534.93,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215072-edce-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"Ty Fm. Base","mdMsl":2844.11,"tvdMsl":2534.93,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-443f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"ROGALAND GP. Base","mdMsl":2844.11,"tvdMsl":2534.93,"properties":{"confidence":"P","qualifier":null}},{"id":"ad21507f-3016-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"SHETLAND GP. Top","mdMsl":2844.11,"tvdMsl":2534.93,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-c369-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"Ekofisk Fm. Base","mdMsl":2875.02,"tvdMsl":2561.19,"properties":{"confidence":"P","qualifier":null}},{"id":"ad215074-f9c0-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"Tor Fm. Top","mdMsl":2875.02,"tvdMsl":2561.19,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215072-3a23-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"Hod Fm. Top","mdMsl":3028.66,"tvdMsl":2685.63,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507b-65d3-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"Tor Fm. Base","mdMsl":3028.66,"tvdMsl":2685.63,"properties":{"confidence":"P","qualifier":null}},{"id":"ad215074-47dc-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"Hod Fm. Base","mdMsl":3127.02,"tvdMsl":2764.83,"properties":{"confidence":"P","qualifier":null}},{"id":"ad215074-47dd-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"Blodoeks Fm. Top","mdMsl":3127.02,"tvdMsl":2764.83,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-13ce-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"Blodoeks Fm. Base","mdMsl":3179.98,"tvdMsl":2809,"properties":{"confidence":"P","qualifier":null}},{"id":"ad21507c-3173-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"Hidra Fm. Top","mdMsl":3179.98,"tvdMsl":2809,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215077-a09c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"Hidra Fm. Base","mdMsl":3191.22,"tvdMsl":2818.61,"properties":{"confidence":"P","qualifier":null}},{"id":"ad215074-47e5-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"Roedby Fm. Top","mdMsl":3191.22,"tvdMsl":2818.61,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215078-ac1f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"CROMER KNOLL GP. Top","mdMsl":3191.22,"tvdMsl":2818.61,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215080-16e4-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"SHETLAND GP. Base","mdMsl":3191.22,"tvdMsl":2818.61,"properties":{"confidence":"P","qualifier":null}},{"id":"ad215075-804b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"Roedby Fm. Base","mdMsl":3216.09,"tvdMsl":2840.2,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507c-31e1-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"Aasgard Fm. Top","mdMsl":3216.09,"tvdMsl":2840.2,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-9c39-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"Aasgard Fm. Base","mdMsl":3251.3,"tvdMsl":2870.84,"properties":{"confidence":"P","qualifier":null}},{"id":"ad215078-4a08-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"Draupne Fm. Top","mdMsl":3251.3,"tvdMsl":2870.84,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215079-67fa-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"VIKING GP. Top","mdMsl":3251.3,"tvdMsl":2870.84,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507d-7252-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"CROMER KNOLL GP. Base","mdMsl":3251.3,"tvdMsl":2870.84,"properties":{"confidence":"P","qualifier":null}},{"id":"ad215073-b7d4-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Top","mdMsl":3345.15,"tvdMsl":2947.94,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215078-4c47-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"Draupne Fm. Base","mdMsl":3345.15,"tvdMsl":2947.94,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507e-d10a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Sand VOLVE Top","mdMsl":3374.1,"tvdMsl":2969.25,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215072-9eaa-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"VIKING GP. Base","mdMsl":3418.21,"tvdMsl":3000.19,"properties":{"confidence":"P","qualifier":null}},{"id":"ad215074-47e6-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Sand VOLVE Base","mdMsl":3418.21,"tvdMsl":3000.19,"properties":{"confidence":"E","qualifier":null}},{"id":"ad215075-aaa4-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Top","mdMsl":3418.21,"tvdMsl":3000.19,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507a-4652-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"VESTLAND GP. Top","mdMsl":3418.21,"tvdMsl":3000.19,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507e-0aaa-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Base","mdMsl":3418.21,"tvdMsl":3000.19,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-55a2-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"Sleipner Fm. Top","mdMsl":3658.03,"tvdMsl":3144.02,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507d-53f6-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Base","mdMsl":3658.03,"tvdMsl":3144.02,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-47e3-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"Sleipner Fm. Base","mdMsl":3737.1,"tvdMsl":3191.53,"properties":{"confidence":"G","qualifier":"NR"}},{"id":"ad215076-2049-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"VESTLAND GP. Base","mdMsl":3737.1,"tvdMsl":3191.53,"properties":{"confidence":"G","qualifier":"NR"}},{"id":"ad215080-bc01-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f7-2b7e-e053-c818a488c79a","pickIdentifier":"Total Depth","mdMsl":3737.1,"tvdMsl":3191.53,"properties":{"confidence":"G","qualifier":null}}],"ad215042-03f6-2b7e-e053-c818a488c79a":[{"id":"ad215074-4b0a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Top","mdMsl":91.1,"tvdMsl":91.1,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215075-637c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"Seabed","mdMsl":91.1,"tvdMsl":91.1,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507d-bc00-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Top","mdMsl":832.1,"tvdMsl":823.09,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215072-b62a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Base","mdMsl":1020.1,"tvdMsl":1005.31,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215077-d244-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Base","mdMsl":1020.1,"tvdMsl":1005.31,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215074-4b04-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Top","mdMsl":1020.1,"tvdMsl":1005.31,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507e-c58d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"Skade Fm. Top","mdMsl":1151.1,"tvdMsl":1131.75,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215074-9cc2-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"Skade Fm. Base","mdMsl":1278.1,"tvdMsl":1253.33,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215076-1c90-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"Grid Fm. Top","mdMsl":2140.1,"tvdMsl":2040.73,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215072-a50f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"Grid Fm. Base","mdMsl":2273.1,"tvdMsl":2159.76,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215074-a955-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Base","mdMsl":2325.1,"tvdMsl":2206.28,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215074-8ba8-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"ROGALAND GP. Top","mdMsl":2325.1,"tvdMsl":2206.28,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215076-184b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"Balder Fm. Top","mdMsl":2325.1,"tvdMsl":2206.28,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215073-f03e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"Sele Fm. Top","mdMsl":2394.1,"tvdMsl":2267.98,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215073-5e83-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"Balder Fm. Base","mdMsl":2394.1,"tvdMsl":2267.98,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215078-3609-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"Sele Fm. Base","mdMsl":2466.1,"tvdMsl":2332.11,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507a-4e6a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"Lista Fm. Top","mdMsl":2466.1,"tvdMsl":2332.11,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215074-0e52-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"Lista Fm. Base","mdMsl":2562.1,"tvdMsl":2417.45,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507d-756d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"Ty Fm. Top","mdMsl":2562.1,"tvdMsl":2417.45,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215072-e6d7-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"Ty Fm. Base","mdMsl":2687.1,"tvdMsl":2527.75,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215075-d01b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"Ekofisk Fm. Top","mdMsl":2687.1,"tvdMsl":2527.75,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507a-3fc7-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"SHETLAND GP. Top","mdMsl":2687.1,"tvdMsl":2527.75,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507f-6e88-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"ROGALAND GP. Base","mdMsl":2687.1,"tvdMsl":2527.75,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507a-491c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"Tor Fm. Top","mdMsl":2710.1,"tvdMsl":2547.59,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507c-cd83-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"Ekofisk Fm. Base","mdMsl":2710.1,"tvdMsl":2547.59,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507f-0871-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"Tor Fm. Base","mdMsl":2884.1,"tvdMsl":2695.15,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215080-b3bc-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"Hod Fm. Top","mdMsl":2884.1,"tvdMsl":2695.15,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215074-4b08-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"Hod Fm. Base","mdMsl":2950.1,"tvdMsl":2749.51,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215074-90ed-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"Blodoeks Fm. Top","mdMsl":2950.1,"tvdMsl":2749.51,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215077-43f7-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"Hidra Fm. Top","mdMsl":2986.1,"tvdMsl":2778.66,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215072-ec91-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"Blodoeks Fm. Base","mdMsl":2986.1,"tvdMsl":2778.66,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215077-4911-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"SHETLAND GP. Base","mdMsl":2999.1,"tvdMsl":2789.02,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215074-4b0b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"Hidra Fm. Base","mdMsl":2999.1,"tvdMsl":2789.02,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507a-e413-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"CROMER KNOLL GP. Top","mdMsl":2999.1,"tvdMsl":2789.02,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507c-ce80-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"Roedby Fm. Top","mdMsl":2999.1,"tvdMsl":2789.02,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215073-65d7-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"Aasgard Fm. Top","mdMsl":3010.1,"tvdMsl":2797.78,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507f-13fc-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"Roedby Fm. Base","mdMsl":3010.1,"tvdMsl":2797.78,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215074-ce92-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"Aasgard Fm. Base","mdMsl":3046.1,"tvdMsl":2825.99,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215074-4b09-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"CROMER KNOLL GP. Base","mdMsl":3046.1,"tvdMsl":2825.99,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215074-8b75-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"VIKING GP. Top","mdMsl":3046.1,"tvdMsl":2825.99,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215079-8e43-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"Draupne Fm. Top","mdMsl":3046.1,"tvdMsl":2825.99,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215077-ced1-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"Draupne Fm. Base","mdMsl":3095.1,"tvdMsl":2862.91,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507c-2676-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Top","mdMsl":3095.1,"tvdMsl":2862.91,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-acee-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Sand VOLVE Top","mdMsl":3167.1,"tvdMsl":2913.2,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215073-eca8-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Base","mdMsl":3194.41,"tvdMsl":2931.04,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215073-5dbe-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Sand VOLVE Base","mdMsl":3194.41,"tvdMsl":2931.04,"properties":{"confidence":"E","qualifier":null}},{"id":"ad21507b-5600-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"VIKING GP. Base","mdMsl":3194.41,"tvdMsl":2931.04,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507e-c827-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Top","mdMsl":3194.41,"tvdMsl":2931.04,"properties":{"confidence":null,"qualifier":null}},{"id":"ceb4785d-44b2-4ad9-a927-97397e2b915f","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"VESTLAND GP. Top","mdMsl":3194.41,"tvdMsl":2931.04,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215077-1ebb-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"Sleipner Fm. Top","mdMsl":3368.63,"tvdMsl":3033.32,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215075-6194-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Base","mdMsl":3368.63,"tvdMsl":3033.32,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215073-6501-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. Top","mdMsl":3431.39,"tvdMsl":3069.45,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-4b03-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"HEGRE GP. Top","mdMsl":3431.39,"tvdMsl":3069.45,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215075-2937-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"Sleipner Fm. Base","mdMsl":3431.39,"tvdMsl":3069.45,"properties":{"confidence":null,"qualifier":null}},{"id":"c8a10ef3-6abb-491b-b797-7ec86bdb3f19","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"VESTLAND GP. Base","mdMsl":3431.39,"tvdMsl":3069.45,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215076-4331-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. Base","mdMsl":3455.1,"tvdMsl":3083.16,"properties":{"confidence":null,"qualifier":"NR"}},{"id":"ad21507b-f1c2-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"HEGRE GP. Base","mdMsl":3455.1,"tvdMsl":3083.16,"properties":{"confidence":null,"qualifier":"NR"}},{"id":"ad215080-b5a1-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03f6-2b7e-e053-c818a488c79a","pickIdentifier":"Total Depth","mdMsl":3455.1,"tvdMsl":3083.16,"properties":{"confidence":null,"qualifier":null}}],"ad215042-03eb-2b7e-e053-c818a488c79a":[{"id":"ad215076-a3aa-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Top","mdMsl":91.1,"tvdMsl":91.1,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215082-1a48-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Seabed","mdMsl":91.1,"tvdMsl":91.1,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215080-168c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Kick-Off Point","mdMsl":202.1,"tvdMsl":202.1,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-57da-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Top","mdMsl":829.9,"tvdMsl":827.14,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215077-b516-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Base","mdMsl":1015.8,"tvdMsl":1009.76,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215077-4b08-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Base","mdMsl":1015.8,"tvdMsl":1009.76,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215079-4486-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Top","mdMsl":1015.8,"tvdMsl":1009.76,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507c-ce3e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Skade Fm. Top","mdMsl":1215.1,"tvdMsl":1197.62,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507c-76a7-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Skade Fm. Base","mdMsl":1275.4,"tvdMsl":1253.8,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215075-803e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Grid Fm. Top","mdMsl":2166.1,"tvdMsl":2065.09,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215082-15e9-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Grid Fm. Base","mdMsl":2228.1,"tvdMsl":2126.06,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-9c7c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Base","mdMsl":2318.1,"tvdMsl":2212.47,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215075-5452-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Balder Fm. Top","mdMsl":2318.1,"tvdMsl":2212.47,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215077-4aeb-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"ROGALAND GP. Top","mdMsl":2380.1,"tvdMsl":2269.83,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507c-99e9-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Sele Fm. Top","mdMsl":2380.1,"tvdMsl":2269.83,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215080-bbc1-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Balder Fm. Base","mdMsl":2380.1,"tvdMsl":2269.83,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507a-48f1-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Sele Fm. Base","mdMsl":2456.1,"tvdMsl":2336.63,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507e-c8c4-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Lista Fm. Top","mdMsl":2456.1,"tvdMsl":2336.63,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215072-b235-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Ty Fm. Top","mdMsl":2569.4,"tvdMsl":2427.32,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215077-b3ab-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Lista Fm. Base","mdMsl":2569.4,"tvdMsl":2427.32,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215075-5c2c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Ekofisk Fm. Top","mdMsl":2768,"tvdMsl":2550.64,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507a-425a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Ty Fm. Base","mdMsl":2768,"tvdMsl":2550.64,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507c-7adb-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"ROGALAND GP. Base","mdMsl":2768,"tvdMsl":2550.64,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215078-d2dc-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"SHETLAND GP. Top","mdMsl":2768,"tvdMsl":2550.64,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215074-1597-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Tor Fm. Top","mdMsl":2797.3,"tvdMsl":2564.7,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215075-6fdd-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Ekofisk Fm. Base","mdMsl":2797.3,"tvdMsl":2564.7,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215078-2f92-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Tor Fm. Base","mdMsl":3272.9,"tvdMsl":2676.41,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215082-4344-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Hod Fm. Top","mdMsl":3272.9,"tvdMsl":2676.41,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215073-ee18-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Blodoeks Fm. Top","mdMsl":3646.1,"tvdMsl":2733.99,"properties":{"confidence":"F","qualifier":null}},{"id":"ad21507d-b9ba-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Hod Fm. Base","mdMsl":3646.1,"tvdMsl":2733.99,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507b-9ecb-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Blodoeks Fm. Base","mdMsl":3919.43,"tvdMsl":2837.66,"properties":{"confidence":"F","qualifier":null}},{"id":"ad21507f-089a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Hidra Fm. Top","mdMsl":3919.43,"tvdMsl":2837.66,"properties":{"confidence":"F","qualifier":null}},{"id":"ad215073-4599-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Hidra Fm. Base","mdMsl":3932.1,"tvdMsl":2845.43,"properties":{"confidence":"F","qualifier":null}},{"id":"ad215075-856b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"SHETLAND GP. Base","mdMsl":3932.1,"tvdMsl":2845.43,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215078-ac75-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Roedby Fm. Top","mdMsl":3932.1,"tvdMsl":2845.43,"properties":{"confidence":"F","qualifier":null}},{"id":"ad215078-d200-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"CROMER KNOLL GP. Top","mdMsl":3932.1,"tvdMsl":2845.43,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215077-b3ad-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Roedby Fm. Base","mdMsl":4064.3,"tvdMsl":2937.76,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507b-53a7-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Aasgard Fm. Top","mdMsl":4064.3,"tvdMsl":2937.76,"properties":{"confidence":"F","qualifier":null}},{"id":"ad215077-a1a0-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"CROMER KNOLL GP. Base","mdMsl":4091.5,"tvdMsl":2959.01,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215074-efd6-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Aasgard Fm. Base","mdMsl":4091.5,"tvdMsl":2959.01,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215075-665d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Draupne Fm. Top","mdMsl":4091.5,"tvdMsl":2959.01,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507f-094e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"VIKING GP. Top","mdMsl":4091.5,"tvdMsl":2959.01,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215077-2309-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Top","mdMsl":4279.8,"tvdMsl":3125.18,"properties":{"confidence":"F","qualifier":null}},{"id":"ad21507b-610b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Draupne Fm. Base","mdMsl":4279.8,"tvdMsl":3125.18,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507c-992f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Sand VOLVE Top","mdMsl":4322.2,"tvdMsl":3166.07,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215077-b517-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"VIKING GP. Base","mdMsl":4338.1,"tvdMsl":3181.5,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215078-31f4-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Sand VOLVE Base","mdMsl":4338.1,"tvdMsl":3181.5,"properties":{"confidence":"E","qualifier":null}},{"id":"ad215078-52bd-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"VESTLAND GP. Top","mdMsl":4338.1,"tvdMsl":3181.5,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215075-6dc5-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Base","mdMsl":4338.1,"tvdMsl":3181.5,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507c-9b1a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Top","mdMsl":4338.1,"tvdMsl":3181.5,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507d-2e03-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 12 VOLVE Top","mdMsl":4338.1,"tvdMsl":3181.5,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-19ae-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 11 VOLVE Top","mdMsl":4344.1,"tvdMsl":3187.33,"properties":{"confidence":"F","qualifier":null}},{"id":"ad215075-4709-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 12 VOLVE Base","mdMsl":4344.1,"tvdMsl":3187.33,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215077-b3b6-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 11 VOLVE Base","mdMsl":4352.1,"tvdMsl":3195.1,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507d-4f9f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 10 VOLVE Top","mdMsl":4352.1,"tvdMsl":3195.1,"properties":{"confidence":"F","qualifier":null}},{"id":"ad215073-4188-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 10 VOLVE Base","mdMsl":4360.1,"tvdMsl":3202.87,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507b-5f7c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 9 VOLVE Top","mdMsl":4360.1,"tvdMsl":3202.87,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-1c7c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 9 VOLVE Base","mdMsl":4367.1,"tvdMsl":3209.66,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215075-5f43-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 8 VOLVE Top","mdMsl":4367.1,"tvdMsl":3209.66,"properties":{"confidence":"F","qualifier":null}},{"id":"ad215078-7b49-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 8 VOLVE Base","mdMsl":4389.1,"tvdMsl":3231.01,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507d-2d31-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 7 VOLVE Top","mdMsl":4389.1,"tvdMsl":3231.01,"properties":{"confidence":"F","qualifier":null}},{"id":"ad215072-346e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 6 VOLVE Top","mdMsl":4400.1,"tvdMsl":3241.7,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215075-d040-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 7 VOLVE Base","mdMsl":4400.1,"tvdMsl":3241.7,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-0af0-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 5 VOLVE Top","mdMsl":4408.6,"tvdMsl":3249.95,"properties":{"confidence":"F","qualifier":null}},{"id":"ad21507d-d5b7-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 6 VOLVE Base","mdMsl":4408.6,"tvdMsl":3249.95,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507b-d1b5-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 4 VOLVE Top","mdMsl":4411.1,"tvdMsl":3252.38,"properties":{"confidence":"F","qualifier":null}},{"id":"ad21507d-280a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 5 VOLVE Base","mdMsl":4411.1,"tvdMsl":3252.38,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215077-b515-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 4 VOLVE Base","mdMsl":4416.1,"tvdMsl":3257.23,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215078-d079-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 3 VOLVE Top","mdMsl":4416.1,"tvdMsl":3257.23,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215072-9637-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 3 VOLVE Base","mdMsl":4421.5,"tvdMsl":3262.47,"properties":{"confidence":"F","qualifier":null}},{"id":"ad21507b-f2dc-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 2 VOLVE Top","mdMsl":4421.5,"tvdMsl":3262.47,"properties":{"confidence":"F","qualifier":null}},{"id":"ad21507a-de3b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 1 VOLVE Top","mdMsl":4430.1,"tvdMsl":3270.82,"properties":{"confidence":"F","qualifier":null}},{"id":"ad21507f-740e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 2 VOLVE Base","mdMsl":4430.1,"tvdMsl":3270.82,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-f865-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Base","mdMsl":4442.5,"tvdMsl":3282.84,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215075-806b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 1 VOLVE Base","mdMsl":4442.5,"tvdMsl":3282.84,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215080-1744-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Sleipner Fm. Top","mdMsl":4442.5,"tvdMsl":3282.84,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-0c03-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Total Depth","mdMsl":4506.9,"tvdMsl":3345.21,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507b-a1e5-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"Sleipner Fm. Base","mdMsl":4506.9,"tvdMsl":3345.21,"properties":{"confidence":"G","qualifier":"NR"}},{"id":"ad21507c-7cb3-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03eb-2b7e-e053-c818a488c79a","pickIdentifier":"VESTLAND GP. Base","mdMsl":4506.9,"tvdMsl":3345.21,"properties":{"confidence":null,"qualifier":"NR"}}],"ad215042-03e6-2b7e-e053-c818a488c79a":[{"id":"ad215079-6f58-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Top","mdMsl":91.1,"tvdMsl":91.1,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215075-838a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"Seabed","mdMsl":91.1,"tvdMsl":91.1,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507e-cd58-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Top","mdMsl":849.92,"tvdMsl":835.1,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-3126-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Base","mdMsl":1034.5,"tvdMsl":1009.04,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215078-68fd-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Top","mdMsl":1034.5,"tvdMsl":1009.04,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507f-951c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Base","mdMsl":1034.5,"tvdMsl":1009.04,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507d-5b54-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"Skade Fm. Top","mdMsl":1179.68,"tvdMsl":1140.46,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-f993-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"Skade Fm. Base","mdMsl":1294.71,"tvdMsl":1240.54,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507a-e536-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"Grid Fm. Top","mdMsl":2282.16,"tvdMsl":2039.69,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215072-e569-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"Grid Fm. Base","mdMsl":2391.66,"tvdMsl":2116.99,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-cdf2-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Base","mdMsl":2536.15,"tvdMsl":2219.52,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215075-ae18-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"Balder Fm. Top","mdMsl":2536.15,"tvdMsl":2219.52,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507a-3111-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"ROGALAND GP. Top","mdMsl":2536.15,"tvdMsl":2219.52,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507c-2728-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"Balder Fm. Base","mdMsl":2616.39,"tvdMsl":2276.46,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215080-1cb5-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"Sele Fm. Top","mdMsl":2616.39,"tvdMsl":2276.46,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-9729-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"Lista Fm. Top","mdMsl":2702.85,"tvdMsl":2336.81,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215075-cfcf-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"Sele Fm. Base","mdMsl":2702.85,"tvdMsl":2336.81,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215077-cd0b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"Lista Fm. Base","mdMsl":2832.65,"tvdMsl":2422.95,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215075-542b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"Heimdal Fm. Top","mdMsl":2832.65,"tvdMsl":2422.95,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-145d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"Ty Fm. Top","mdMsl":2843.71,"tvdMsl":2429.7,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215079-6527-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"Heimdal Fm. Base","mdMsl":2843.71,"tvdMsl":2429.7,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215072-cf2e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"Ekofisk Fm. Top","mdMsl":3210.76,"tvdMsl":2573.96,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507a-d71d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"Ty Fm. Base","mdMsl":3210.76,"tvdMsl":2573.96,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507a-ee65-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"SHETLAND GP. Top","mdMsl":3210.76,"tvdMsl":2573.96,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507a-1f8a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"ROGALAND GP. Base","mdMsl":3210.76,"tvdMsl":2573.96,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215077-a5e6-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"Tor Fm. Top","mdMsl":3437.51,"tvdMsl":2598.05,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215079-94db-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"Ekofisk Fm. Base","mdMsl":3437.51,"tvdMsl":2598.05,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215077-d37a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"Hod Fm. Top","mdMsl":4755.1,"tvdMsl":2698.87,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-ee83-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"Tor Fm. Base","mdMsl":4755.1,"tvdMsl":2698.87,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-e8ff-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"Hod Fm. Base","mdMsl":4892.1,"tvdMsl":2743.54,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215078-b7ac-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"Blodoeks Fm. Top","mdMsl":4892.1,"tvdMsl":2743.54,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-a32b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"Blodoeks Fm. Base","mdMsl":4949.72,"tvdMsl":2773.05,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507d-d286-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"Hidra Fm. Top","mdMsl":4949.72,"tvdMsl":2773.05,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215073-4a5e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"Roedby Fm. Top","mdMsl":4966.2,"tvdMsl":2782.21,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215075-29ca-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"SHETLAND GP. Base","mdMsl":4966.2,"tvdMsl":2782.21,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215078-cb67-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"CROMER KNOLL GP. Top","mdMsl":4966.2,"tvdMsl":2782.21,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215080-b794-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"Hidra Fm. Base","mdMsl":4966.2,"tvdMsl":2782.21,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215073-6d8c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"Roedby Fm. Base","mdMsl":4972.49,"tvdMsl":2785.86,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507d-b8a6-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"Sola Fm. Top","mdMsl":4972.49,"tvdMsl":2785.86,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215077-af7b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"Sola Fm. Base","mdMsl":4975.92,"tvdMsl":2787.85,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215080-55f5-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"Aasgard Fm. Top","mdMsl":4975.92,"tvdMsl":2787.85,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-e558-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"Draupne Fm. Top","mdMsl":5001.1,"tvdMsl":2802.45,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215078-7a0c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"CROMER KNOLL GP. Base","mdMsl":5001.1,"tvdMsl":2802.45,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507a-21f3-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"Aasgard Fm. Base","mdMsl":5001.1,"tvdMsl":2802.45,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-4106-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"VIKING GP. Top","mdMsl":5001.5,"tvdMsl":2802.68,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215079-9c4b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"Draupne Fm. Base","mdMsl":5111.04,"tvdMsl":2866.26,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507a-4ba9-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Top","mdMsl":5111.04,"tvdMsl":2866.26,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-e6f2-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"VESTLAND GP. Top","mdMsl":5149.32,"tvdMsl":2888.44,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215073-f3bf-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Top","mdMsl":5149.32,"tvdMsl":2888.44,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215075-4a40-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"VIKING GP. Base","mdMsl":5149.32,"tvdMsl":2888.44,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507f-0fb0-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Base","mdMsl":5149.32,"tvdMsl":2888.44,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507b-f569-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Base","mdMsl":5205.91,"tvdMsl":2921.33,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507d-7b5c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"Sleipner Fm. Top","mdMsl":5205.91,"tvdMsl":2921.33,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215072-a35e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"VESTLAND GP. Base","mdMsl":5215.41,"tvdMsl":2926.87,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507a-d0fd-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"Sleipner Fm. Base","mdMsl":5215.41,"tvdMsl":2926.87,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507a-50dd-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"HEGRE GP. Top","mdMsl":5215.41,"tvdMsl":2926.87,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507c-2fc2-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"Smith Bank Fm. Top","mdMsl":5215.41,"tvdMsl":2926.87,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-2bdc-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"HEGRE GP. Base","mdMsl":5276.1,"tvdMsl":2962.11,"properties":{"confidence":null,"qualifier":"NR"}},{"id":"ad21507b-5dfc-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"Smith Bank Fm. Base","mdMsl":5276.1,"tvdMsl":2962.11,"properties":{"confidence":null,"qualifier":"NR"}},{"id":"ad21507b-f88e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e6-2b7e-e053-c818a488c79a","pickIdentifier":"Total Depth","mdMsl":5276.1,"tvdMsl":2962.11,"properties":{"confidence":null,"qualifier":null}}],"ad215042-0399-2b7e-e053-c818a488c79a":[{"id":"ad215079-8095-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Top","mdMsl":91.1,"tvdMsl":91.1,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215082-1ad4-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Seabed","mdMsl":91.1,"tvdMsl":91.1,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215079-72ec-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Top","mdMsl":831.6,"tvdMsl":827.68,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215073-f2dd-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Top","mdMsl":1014.4,"tvdMsl":1007.86,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215076-39b7-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Base","mdMsl":1014.4,"tvdMsl":1007.86,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad21507a-ebe1-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Base","mdMsl":1014.4,"tvdMsl":1007.86,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215074-f6df-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Skade Fm. Top","mdMsl":1199.1,"tvdMsl":1188.92,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215075-4615-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Skade Fm. Base","mdMsl":1262.6,"tvdMsl":1251.09,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215074-10a3-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Grid Fm. Top","mdMsl":2119.4,"tvdMsl":2031.59,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215080-30f3-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Grid Fm. Base","mdMsl":2250.7,"tvdMsl":2145.44,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215074-174e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"ROGALAND GP. Top","mdMsl":2339.5,"tvdMsl":2222.33,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215076-ada5-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Base","mdMsl":2339.5,"tvdMsl":2222.33,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215076-3e65-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Balder Fm. Top","mdMsl":2339.5,"tvdMsl":2222.33,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215078-a7a5-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Sele Fm. Top","mdMsl":2404.4,"tvdMsl":2278.45,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215080-b54c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Balder Fm. Base","mdMsl":2404.4,"tvdMsl":2278.45,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215074-d466-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Lista Fm. Top","mdMsl":2472.1,"tvdMsl":2336.95,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215078-a762-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Sele Fm. Base","mdMsl":2472.1,"tvdMsl":2336.95,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215074-d26f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Kick-Off Point","mdMsl":2565.1,"tvdMsl":2417.38,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215076-1b91-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Lista Fm. Base","mdMsl":2566.6,"tvdMsl":2418.68,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507a-1d66-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Ty Fm. Top","mdMsl":2566.6,"tvdMsl":2418.68,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-2625-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"SHETLAND GP. Top","mdMsl":2715.7,"tvdMsl":2550.82,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507d-55ea-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Ty Fm. Base","mdMsl":2715.7,"tvdMsl":2550.82,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507f-98ac-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Ekofisk Fm. Top","mdMsl":2715.7,"tvdMsl":2550.82,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215080-56a3-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"ROGALAND GP. Base","mdMsl":2715.7,"tvdMsl":2550.82,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215076-1631-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Ekofisk Fm. Base","mdMsl":2735.1,"tvdMsl":2568.04,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215075-6fa1-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Tor Fm. Top","mdMsl":2735.1,"tvdMsl":2568.04,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215077-1e01-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Hod Fm. Top","mdMsl":2932.1,"tvdMsl":2733.45,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507b-f328-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Tor Fm. Base","mdMsl":2932.1,"tvdMsl":2733.45,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215077-a4bd-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Blodoeks Fm. Top","mdMsl":3049,"tvdMsl":2816.28,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507e-d53c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Hod Fm. Base","mdMsl":3049,"tvdMsl":2816.28,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-3014-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Hidra Fm. Top","mdMsl":3097.9,"tvdMsl":2845.72,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507b-cd6c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Blodoeks Fm. Base","mdMsl":3097.9,"tvdMsl":2845.72,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215075-b030-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Roedby Fm. Top","mdMsl":3138.3,"tvdMsl":2867.22,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215075-8763-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Hidra Fm. Base","mdMsl":3138.3,"tvdMsl":2867.22,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-989c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Aasgard Fm. Top","mdMsl":3224,"tvdMsl":2908.23,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-9a68-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Roedby Fm. Base","mdMsl":3224,"tvdMsl":2908.23,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215072-a903-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Draupne Fm. Top","mdMsl":3303.1,"tvdMsl":2953.81,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-a0da-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Aasgard Fm. Base","mdMsl":3303.1,"tvdMsl":2953.81,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215080-2493-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"VIKING GP. Top","mdMsl":3303.1,"tvdMsl":2953.81,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215077-86c1-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Sand VOLVE Top","mdMsl":3374.5,"tvdMsl":3003.21,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-cbec-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Top","mdMsl":3374.5,"tvdMsl":3003.21,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507d-79b2-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Draupne Fm. Base","mdMsl":3374.5,"tvdMsl":3003.21,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215077-242a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Top","mdMsl":3380.1,"tvdMsl":3007.25,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215073-4208-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"VESTLAND GP. Top","mdMsl":3380.1,"tvdMsl":3007.25,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215075-aa17-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Base","mdMsl":3380.1,"tvdMsl":3007.25,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215079-7858-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"VIKING GP. Base","mdMsl":3380.1,"tvdMsl":3007.25,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215072-d345-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 9 VOLVE Top","mdMsl":3399.8,"tvdMsl":3021.43,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215075-679d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Sleipner Fm. Top","mdMsl":3445.3,"tvdMsl":3054.23,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507c-804b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Base","mdMsl":3445.3,"tvdMsl":3054.23,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215078-345b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Sleipner Fm. Base","mdMsl":3488.8,"tvdMsl":3085.46,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215075-4601-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. Top","mdMsl":3488.8,"tvdMsl":3085.46,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215075-4d0a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"HEGRE GP. Top","mdMsl":3488.8,"tvdMsl":3085.46,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507a-dca7-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"VESTLAND GP. Base","mdMsl":3488.8,"tvdMsl":3085.46,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215078-332a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Smith Bank Fm. Top","mdMsl":3553.1,"tvdMsl":3131.63,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507f-684f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Skagerrak Fm. Base","mdMsl":3553.1,"tvdMsl":3131.63,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215075-aa65-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"HEGRE GP. Base","mdMsl":3627.1,"tvdMsl":3184.81,"properties":{"confidence":null,"qualifier":"NR"}},{"id":"ad21507d-26e6-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Smith Bank Fm. Base","mdMsl":3627.1,"tvdMsl":3184.81,"properties":{"confidence":null,"qualifier":"NR"}},{"id":"ad21507d-76d1-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-0399-2b7e-e053-c818a488c79a","pickIdentifier":"Total Depth","mdMsl":3627.1,"tvdMsl":3184.81,"properties":{"confidence":null,"qualifier":null}}],"ad215042-f3be-2b7e-e053-c818a488c79a":[{"id":"ad215079-9130-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f3be-2b7e-e053-c818a488c79a","pickIdentifier":"Seabed","mdMsl":91.1,"tvdMsl":91.1,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507d-77eb-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f3be-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Top","mdMsl":91.1,"tvdMsl":91.1,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215078-3ace-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f3be-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Base","mdMsl":292.1,"tvdMsl":292.09,"properties":{"confidence":null,"qualifier":"NR"}},{"id":"ad21507f-6851-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-f3be-2b7e-e053-c818a488c79a","pickIdentifier":"Total Depth","mdMsl":292.1,"tvdMsl":292.09,"properties":{"confidence":null,"qualifier":null}}],"ad215042-ef86-2b7e-e053-c818a488c79a":[{"id":"ad21507b-512a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Top","mdMsl":91.1,"tvdMsl":91.1,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad21507f-7409-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"Seabed","mdMsl":91.1,"tvdMsl":91.1,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215076-282a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Top","mdMsl":831.6,"tvdMsl":827.68,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215074-e7f7-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Base","mdMsl":1014.4,"tvdMsl":1007.86,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215074-14bd-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Top","mdMsl":1014.4,"tvdMsl":1007.86,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215075-4350-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Base","mdMsl":1014.4,"tvdMsl":1007.86,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215078-bbd6-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"Skade Fm. Top","mdMsl":1199.1,"tvdMsl":1188.92,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad21507c-98be-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"Skade Fm. Base","mdMsl":1262.6,"tvdMsl":1251.09,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215080-325e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"Grid Fm. Top","mdMsl":2119.4,"tvdMsl":2031.59,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad21507c-2bc3-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"Grid Fm. Base","mdMsl":2250.7,"tvdMsl":2145.44,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215074-f049-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"ROGALAND GP. Top","mdMsl":2339.5,"tvdMsl":2222.33,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215079-88c4-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"Balder Fm. Top","mdMsl":2339.5,"tvdMsl":2222.33,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215079-951f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Base","mdMsl":2339.5,"tvdMsl":2222.33,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215078-374d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"Sele Fm. Top","mdMsl":2404.4,"tvdMsl":2278.45,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad21507a-4387-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"Balder Fm. Base","mdMsl":2404.4,"tvdMsl":2278.45,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215074-9dc3-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"Sele Fm. Base","mdMsl":2472.1,"tvdMsl":2336.95,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad21507f-7007-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"Lista Fm. Top","mdMsl":2472.1,"tvdMsl":2336.95,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215077-4d62-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"Kick-Off Point","mdMsl":2562.1,"tvdMsl":2414.9,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215074-e46f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"Ty Fm. Top","mdMsl":2564.8,"tvdMsl":2417.24,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507f-0d79-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"Lista Fm. Base","mdMsl":2564.8,"tvdMsl":2417.24,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215077-af16-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"Ekofisk Fm. Top","mdMsl":2716.1,"tvdMsl":2552.43,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215077-194e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"SHETLAND GP. Top","mdMsl":2716.1,"tvdMsl":2552.43,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215078-6961-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"Ty Fm. Base","mdMsl":2716.1,"tvdMsl":2552.43,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215082-4a9a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"ROGALAND GP. Base","mdMsl":2716.1,"tvdMsl":2552.43,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215072-9bc6-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"Tor Fm. Top","mdMsl":2734.1,"tvdMsl":2568.62,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215075-d4eb-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"Ekofisk Fm. Base","mdMsl":2734.1,"tvdMsl":2568.62,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215072-a110-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"Tor Fm. Base","mdMsl":2897.6,"tvdMsl":2715.87,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507a-4512-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"Hod Fm. Top","mdMsl":2897.6,"tvdMsl":2715.87,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-1e5d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"Hod Fm. Base","mdMsl":3004.1,"tvdMsl":2811.99,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-22b0-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"Blodoeks Fm. Top","mdMsl":3004.1,"tvdMsl":2811.99,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215077-b2ad-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"Blodoeks Fm. Base","mdMsl":3049.5,"tvdMsl":2853.6,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-2630-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"Hidra Fm. Top","mdMsl":3049.5,"tvdMsl":2853.6,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215072-ac1f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"CROMER KNOLL GP. Top","mdMsl":3057.3,"tvdMsl":2860.79,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-5433-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"Roedby Fm. Top","mdMsl":3057.3,"tvdMsl":2860.79,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215079-7790-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"SHETLAND GP. Base","mdMsl":3057.3,"tvdMsl":2860.79,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507a-e99d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"Hidra Fm. Base","mdMsl":3057.3,"tvdMsl":2860.79,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215075-b051-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"Roedby Fm. Base","mdMsl":3086.6,"tvdMsl":2887.95,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215075-89a0-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"Aasgard Fm. Top","mdMsl":3086.6,"tvdMsl":2887.95,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215079-76a6-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"VIKING GP. Top","mdMsl":3113.5,"tvdMsl":2913.18,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507a-ef1f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"Aasgard Fm. Base","mdMsl":3113.5,"tvdMsl":2913.18,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215078-b758-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"CROMER KNOLL GP. Base","mdMsl":3113.5,"tvdMsl":2913.18,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507d-d5ae-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"Draupne Fm. Top","mdMsl":3113.5,"tvdMsl":2913.18,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215078-738c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"Draupne Fm. Base","mdMsl":3174.5,"tvdMsl":2971.46,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507c-80a4-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Top","mdMsl":3174.5,"tvdMsl":2971.46,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507f-2aa0-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Sand VOLVE Top","mdMsl":3182.45,"tvdMsl":2979.15,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-f96e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"VIKING GP. Base","mdMsl":3190.5,"tvdMsl":2986.94,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215073-45d8-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"VESTLAND GP. Top","mdMsl":3190.5,"tvdMsl":2986.94,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507b-527e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Top","mdMsl":3190.5,"tvdMsl":2986.94,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507d-dbb8-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Base","mdMsl":3190.5,"tvdMsl":2986.94,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215072-c861-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"Sleipner Fm. Top","mdMsl":3249.3,"tvdMsl":3044.75,"properties":{"confidence":"G","qualifier":"FP"}},{"id":"ad21507f-9457-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Base","mdMsl":3249.3,"tvdMsl":3044.75,"properties":{"confidence":"G","qualifier":"FP"}},{"id":"ad215074-1124-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"Total Depth","mdMsl":3410.1,"tvdMsl":3204.99,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215075-273f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"VESTLAND GP. Base","mdMsl":3410.1,"tvdMsl":3204.99,"properties":{"confidence":null,"qualifier":"NR"}},{"id":"ad215075-572e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-ef86-2b7e-e053-c818a488c79a","pickIdentifier":"Sleipner Fm. Base","mdMsl":3410.1,"tvdMsl":3204.99,"properties":{"confidence":null,"qualifier":"NR"}}],"ad215042-03e9-2b7e-e053-c818a488c79a":[{"id":"ad21507b-cb1b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Top","mdMsl":91.1,"tvdMsl":91.1,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215081-f1fb-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Seabed","mdMsl":91.1,"tvdMsl":91.1,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad215074-9b00-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Top","mdMsl":829.94,"tvdMsl":827.18,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215077-a803-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Top","mdMsl":1015.8,"tvdMsl":1009.76,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215073-5e63-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Base","mdMsl":1015.8,"tvdMsl":1009.76,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215081-f200-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Base","mdMsl":1015.8,"tvdMsl":1009.76,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215078-a581-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Skade Fm. Top","mdMsl":1185.1,"tvdMsl":1170,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad21507b-622b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Skade Fm. Base","mdMsl":1275.4,"tvdMsl":1253.8,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215074-9a82-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Grid Fm. Top","mdMsl":2166.1,"tvdMsl":2065.09,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad21507c-cb53-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Grid Fm. Base","mdMsl":2228.1,"tvdMsl":2126.06,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215072-d004-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Base","mdMsl":2318.1,"tvdMsl":2212.47,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215080-1b0a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Balder Fm. Top","mdMsl":2318.1,"tvdMsl":2212.47,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215075-488b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"ROGALAND GP. Top","mdMsl":2380.1,"tvdMsl":2269.83,"properties":{"confidence":null,"qualifier":"NL"}},{"id":"ad21507e-148b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Sele Fm. Top","mdMsl":2380.1,"tvdMsl":2269.83,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215081-f203-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Balder Fm. Base","mdMsl":2380.1,"tvdMsl":2269.83,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215074-8e76-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Sele Fm. Base","mdMsl":2456.1,"tvdMsl":2336.63,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad21507d-4fad-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Lista Fm. Top","mdMsl":2456.1,"tvdMsl":2336.63,"properties":{"confidence":"G","qualifier":"NL"}},{"id":"ad215081-f1f6-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Kick-Off Point","mdMsl":2531.1,"tvdMsl":2398.11,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215077-d636-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Ty Fm. Top","mdMsl":2569.1,"tvdMsl":2428.47,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507a-20e8-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Lista Fm. Base","mdMsl":2569.1,"tvdMsl":2428.47,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215075-6adc-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Ty Fm. Base","mdMsl":2739.6,"tvdMsl":2554.28,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215081-f1f1-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"SHETLAND GP. Top","mdMsl":2739.6,"tvdMsl":2554.28,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215081-f1fe-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Ekofisk Fm. Top","mdMsl":2739.6,"tvdMsl":2554.28,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-a373-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Tor Fm. Top","mdMsl":2764.67,"tvdMsl":2569.78,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507a-415c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Ekofisk Fm. Base","mdMsl":2764.67,"tvdMsl":2569.78,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215074-9474-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Hod Fm. Top","mdMsl":3063.1,"tvdMsl":2688.11,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507d-7400-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Tor Fm. Base","mdMsl":3063.1,"tvdMsl":2688.11,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215080-24d0-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Blodoeks Fm. Top","mdMsl":3295.1,"tvdMsl":2774.56,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215081-f1fd-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Hod Fm. Base","mdMsl":3295.1,"tvdMsl":2774.56,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215074-0f0d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Hidra Fm. Top","mdMsl":3343.1,"tvdMsl":2803.32,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215081-f1fc-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Blodoeks Fm. Base","mdMsl":3343.1,"tvdMsl":2803.32,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215076-243c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"CROMER KNOLL GP. Top","mdMsl":3373.1,"tvdMsl":2822.61,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507a-d715-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"SHETLAND GP. Base","mdMsl":3373.1,"tvdMsl":2822.61,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507b-a4d2-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Hidra Fm. Base","mdMsl":3373.1,"tvdMsl":2822.61,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507f-0675-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Roedby Fm. Top","mdMsl":3373.1,"tvdMsl":2822.61,"properties":{"confidence":"F","qualifier":null}},{"id":"ad21507a-d887-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Roedby Fm. Base","mdMsl":3419.5,"tvdMsl":2853.87,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215081-f1f2-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Aasgard Fm. Top","mdMsl":3419.5,"tvdMsl":2853.87,"properties":{"confidence":"F","qualifier":null}},{"id":"ad215073-5a80-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Aasgard Fm. Base","mdMsl":3470.9,"tvdMsl":2890.9,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215075-528c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Draupne Fm. Top","mdMsl":3470.9,"tvdMsl":2890.9,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507a-db62-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"CROMER KNOLL GP. Base","mdMsl":3470.9,"tvdMsl":2890.9,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215081-f1f8-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"VIKING GP. Top","mdMsl":3470.9,"tvdMsl":2890.9,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507a-45a9-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Draupne Fm. Base","mdMsl":3520,"tvdMsl":2928.2,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507d-b73d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Top","mdMsl":3520,"tvdMsl":2928.2,"properties":{"confidence":"F","qualifier":null}},{"id":"ad21507f-2bb5-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Sand VOLVE Top","mdMsl":3530.3,"tvdMsl":2936.09,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215072-35c2-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"VESTLAND GP. Top","mdMsl":3539.7,"tvdMsl":2943.29,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215077-9fab-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 12 VOLVE Top","mdMsl":3539.7,"tvdMsl":2943.29,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-0b6a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Base","mdMsl":3539.7,"tvdMsl":2943.29,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215076-2608-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Sand VOLVE Base","mdMsl":3539.7,"tvdMsl":2943.29,"properties":{"confidence":"E","qualifier":null}},{"id":"ad21507b-f276-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Top","mdMsl":3539.7,"tvdMsl":2943.29,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215081-f1ff-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"VIKING GP. Base","mdMsl":3539.7,"tvdMsl":2943.29,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215072-b6d7-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 11 VOLVE Top","mdMsl":3544.1,"tvdMsl":2946.66,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215079-b9aa-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 12 VOLVE Base","mdMsl":3544.1,"tvdMsl":2946.66,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507e-d392-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 10 VOLVE Top","mdMsl":3550.6,"tvdMsl":2951.64,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215081-f201-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 11 VOLVE Base","mdMsl":3550.6,"tvdMsl":2951.64,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215074-9ee0-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 9 VOLVE Top","mdMsl":3557.6,"tvdMsl":2957,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215079-6497-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 10 VOLVE Base","mdMsl":3557.6,"tvdMsl":2957,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507a-d99c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 8 VOLVE Top","mdMsl":3572.6,"tvdMsl":2968.49,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215081-f202-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 9 VOLVE Base","mdMsl":3572.6,"tvdMsl":2968.49,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215074-1515-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 8 VOLVE Base","mdMsl":3592.1,"tvdMsl":2983.43,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215074-5569-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 7 VOLVE Top","mdMsl":3592.1,"tvdMsl":2983.43,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507b-d074-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 6 VOLVE Top","mdMsl":3598.1,"tvdMsl":2988.03,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507c-7e2a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 7 VOLVE Base","mdMsl":3598.1,"tvdMsl":2988.03,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215081-f1f7-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 6 VOLVE Base","mdMsl":3608.1,"tvdMsl":2995.69,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215081-f331-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 5 VOLVE Top","mdMsl":3608.1,"tvdMsl":2995.69,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-a4b5-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 4 VOLVE Top","mdMsl":3610.1,"tvdMsl":2997.22,"properties":{"confidence":"F","qualifier":null}},{"id":"ad215079-3da5-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 5 VOLVE Base","mdMsl":3610.1,"tvdMsl":2997.22,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215073-4119-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 3 VOLVE Top","mdMsl":3612.4,"tvdMsl":2998.99,"properties":{"confidence":"F","qualifier":null}},{"id":"ad21507d-2646-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 4 VOLVE Base","mdMsl":3612.4,"tvdMsl":2998.99,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215073-5f7e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 2 VOLVE Top","mdMsl":3619.4,"tvdMsl":3004.35,"properties":{"confidence":"F","qualifier":null}},{"id":"ad215078-af0b-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 3 VOLVE Base","mdMsl":3619.4,"tvdMsl":3004.35,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215075-86fa-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 1 VOLVE Top","mdMsl":3629.1,"tvdMsl":3011.79,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507f-976a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 2 VOLVE Base","mdMsl":3629.1,"tvdMsl":3011.79,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507d-7685-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Base","mdMsl":3647.1,"tvdMsl":3025.59,"properties":{"confidence":"F","qualifier":null}},{"id":"ad21507d-bb8e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Sleipner Fm. Top","mdMsl":3647.1,"tvdMsl":3025.59,"properties":{"confidence":"F","qualifier":null}},{"id":"ad215081-f1f5-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. 1 VOLVE Base","mdMsl":3647.1,"tvdMsl":3025.59,"properties":{"confidence":"F","qualifier":null}},{"id":"ad215074-1093-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Total Depth","mdMsl":3707.1,"tvdMsl":3071.59,"properties":{"confidence":null,"qualifier":null}},{"id":"ad21507b-c8a5-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"VESTLAND GP. Base","mdMsl":3707.1,"tvdMsl":3071.59,"properties":{"confidence":null,"qualifier":"NR"}},{"id":"ad21507b-f4f1-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03e9-2b7e-e053-c818a488c79a","pickIdentifier":"Sleipner Fm. Base","mdMsl":3707.1,"tvdMsl":3071.59,"properties":{"confidence":null,"qualifier":"NR"}}],"ad215042-03ef-2b7e-e053-c818a488c79a":[{"id":"ad215080-142c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Top","mdMsl":91.1,"tvdMsl":91.1,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215081-e0d0-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"Seabed","mdMsl":91.1,"tvdMsl":91.1,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507e-c356-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Top","mdMsl":846.37,"tvdMsl":839.37,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-c242-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"Utsira Fm. Base","mdMsl":1033.92,"tvdMsl":1020.06,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215079-8b2e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"NORDLAND GP. Base","mdMsl":1033.92,"tvdMsl":1020.06,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507c-2b1a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Top","mdMsl":1033.92,"tvdMsl":1020.06,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215080-5aef-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"Skade Fm. Top","mdMsl":1143.75,"tvdMsl":1125.04,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215080-2fee-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"Skade Fm. Base","mdMsl":1268.47,"tvdMsl":1244.03,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215075-5bfb-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"Grid Fm. Top","mdMsl":2190.57,"tvdMsl":2054.52,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215079-7ce5-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"Grid Fm. Base","mdMsl":2312.58,"tvdMsl":2156.25,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215072-b258-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"Balder Fm. Top","mdMsl":2378.26,"tvdMsl":2211.21,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507f-2e88-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"ROGALAND GP. Top","mdMsl":2378.26,"tvdMsl":2211.21,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215082-49ec-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"HORDALAND GP. Base","mdMsl":2378.26,"tvdMsl":2211.21,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-517c-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"Sele Fm. Top","mdMsl":2448.67,"tvdMsl":2270.18,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507d-de2e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"Balder Fm. Base","mdMsl":2448.67,"tvdMsl":2270.18,"properties":{"confidence":"P","qualifier":null}},{"id":"ad215078-351f-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"Sele Fm. Base","mdMsl":2534.61,"tvdMsl":2341.37,"properties":{"confidence":"P","qualifier":null}},{"id":"ad21507d-53b6-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"Lista Fm. Top","mdMsl":2534.61,"tvdMsl":2341.37,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507b-a564-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"Lista Fm. Base","mdMsl":2617.51,"tvdMsl":2404.78,"properties":{"confidence":"P","qualifier":null}},{"id":"ad21507c-2899-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"Ty Fm. Top","mdMsl":2617.51,"tvdMsl":2404.78,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215073-bd41-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"Ty Fm. Base","mdMsl":2934.98,"tvdMsl":2570.72,"properties":{"confidence":"P","qualifier":null}},{"id":"ad215079-7d51-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"Ekofisk Fm. Top","mdMsl":2934.98,"tvdMsl":2570.72,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215078-a65d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"ROGALAND GP. Base","mdMsl":2934.98,"tvdMsl":2570.72,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507c-9a5e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"SHETLAND GP. Top","mdMsl":2934.98,"tvdMsl":2570.72,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-0ead-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"Ekofisk Fm. Base","mdMsl":2954.54,"tvdMsl":2578.44,"properties":{"confidence":"P","qualifier":null}},{"id":"ad215075-4820-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"Tor Fm. Top","mdMsl":2954.54,"tvdMsl":2578.44,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215073-695d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"Hod Fm. Top","mdMsl":3393.9,"tvdMsl":2754.15,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507c-31e4-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"Tor Fm. Base","mdMsl":3393.9,"tvdMsl":2754.15,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-abaa-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"Hod Fm. Base","mdMsl":3559.88,"tvdMsl":2822.61,"properties":{"confidence":"P","qualifier":null}},{"id":"ad215073-4052-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"Blodoeks Fm. Top","mdMsl":3559.88,"tvdMsl":2822.61,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507a-e38a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"Hidra Fm. Top","mdMsl":3697.1,"tvdMsl":2890.43,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507e-bfe6-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"Blodoeks Fm. Base","mdMsl":3697.1,"tvdMsl":2890.43,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215072-a902-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"Roedby Fm. Top","mdMsl":3716.1,"tvdMsl":2901.56,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215076-f643-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"Hidra Fm. Base","mdMsl":3716.1,"tvdMsl":2901.56,"properties":{"confidence":"P","qualifier":null}},{"id":"ad21507c-35e4-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"SHETLAND GP. Base","mdMsl":3716.1,"tvdMsl":2901.56,"properties":{"confidence":"P","qualifier":null}},{"id":"ad21507d-6c04-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"CROMER KNOLL GP. Top","mdMsl":3716.1,"tvdMsl":2901.56,"properties":{"confidence":"P","qualifier":null}},{"id":"ad215072-af64-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"VIKING GP. Top","mdMsl":3774.85,"tvdMsl":2937.16,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215077-a15d-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"CROMER KNOLL GP. Base","mdMsl":3774.85,"tvdMsl":2937.16,"properties":{"confidence":"P","qualifier":null}},{"id":"ad215074-15b4-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"Aasgard Fm. Base","mdMsl":3775.1,"tvdMsl":2937.32,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215079-6506-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"Draupne Fm. Top","mdMsl":3775.1,"tvdMsl":2937.32,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215078-755e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"Aasgard Fm. Top","mdMsl":3775.1,"tvdMsl":2937.32,"properties":{"confidence":"G","qualifier":null}},{"id":"c54d4edf-824d-4787-b763-575d61fab900","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"Roedby Fm. Base","mdMsl":3775.1,"tvdMsl":2937.32,"properties":{"confidence":"P","qualifier":null}},{"id":"ad215073-6fba-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Top","mdMsl":3823.1,"tvdMsl":2967.54,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215078-4c9e-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"Draupne Fm. Base","mdMsl":3823.1,"tvdMsl":2967.54,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215072-b9c5-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Sand VOLVE Top","mdMsl":3883.1,"tvdMsl":3007.48,"properties":{"confidence":null,"qualifier":null}},{"id":"ad215077-65f4-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"VIKING GP. Base","mdMsl":3899.96,"tvdMsl":3019.1,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507e-0df5-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"VESTLAND GP. Top","mdMsl":3899.96,"tvdMsl":3019.1,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507f-0fc4-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Top","mdMsl":3899.96,"tvdMsl":3019.1,"properties":{"confidence":"G","qualifier":null}},{"id":"ad21507f-7147-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Sand VOLVE Base","mdMsl":3899.96,"tvdMsl":3019.1,"properties":{"confidence":"E","qualifier":null}},{"id":"ad21507f-a579-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"Heather Fm. Base","mdMsl":3899.96,"tvdMsl":3019.1,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215077-b1b1-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"Hugin Fm. Base","mdMsl":4007.82,"tvdMsl":3095.5,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215073-f0cb-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"Sleipner Fm. Top","mdMsl":4007.82,"tvdMsl":3095.5,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215072-a4fa-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"Total Depth","mdMsl":4035.1,"tvdMsl":3115.02,"properties":{"confidence":"G","qualifier":null}},{"id":"ad215074-f79a-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"Sleipner Fm. Base","mdMsl":4035.1,"tvdMsl":3115.02,"properties":{"confidence":"G","qualifier":"NR"}},{"id":"ad215072-cdd0-2e4b-e053-c918a4881b5c","wellboreId":"ad215042-03ef-2b7e-e053-c818a488c79a","pickIdentifier":"VESTLAND GP. Base","mdMsl":4035.1,"tvdMsl":3115.02,"properties":{"confidence":"G","qualifier":"NR"}}]} \ No newline at end of file diff --git a/public/data/strat-columns.json b/public/data/strat-columns.json index 0b0be46..14256a6 100644 --- a/public/data/strat-columns.json +++ b/public/data/strat-columns.json @@ -1 +1 @@ -{"ad215071-c509-2e4b-e053-c918a4881b5c":{"id":"ad215071-c509-2e4b-e053-c918a4881b5c","name":"LITHO_VOLVE","type":"lithostratigraphy","units":[{"id":"ad215071-fb13-2e4b-e053-c918a4881b5c","name":"NORDLAND GP.","top":"NORDLAND GP. Top","topAge":0.001,"base":"NORDLAND GP. Base","baseAge":16,"color":"#ffe500","level":1,"parent":null},{"id":"ad215072-0001-2e4b-e053-c918a4881b5c","name":"Utsira Fm.","top":"Utsira Fm. Top","topAge":8,"base":"Utsira Fm. Base","baseAge":16,"color":"#fff200","level":2,"parent":"NORDLAND GP."},{"id":"ad215071-f6ca-2e4b-e053-c918a4881b5c","name":"HORDALAND GP.","top":"HORDALAND GP. Top","topAge":23,"base":"HORDALAND GP. Base","baseAge":52,"color":"#009024","level":1,"parent":null},{"id":"ad215071-f6cc-2e4b-e053-c918a4881b5c","name":"Skade Fm.","top":"Skade Fm. Top","topAge":23,"base":"Skade Fm. Base","baseAge":33,"color":"#00a636","level":2,"parent":"HORDALAND GP."},{"id":"ad215071-f6d5-2e4b-e053-c918a4881b5c","name":"Grid Fm.","top":"Grid Fm. Top","topAge":35,"base":"Grid Fm. Base","baseAge":38,"color":"#00bc48","level":2,"parent":"HORDALAND GP."},{"id":"ad215071-f6dc-2e4b-e053-c918a4881b5c","name":"Frigg Fm.","top":"Frigg Fm. Top","topAge":51,"base":"Frigg Fm. Base","baseAge":52,"color":"#00ff00","level":2,"parent":"HORDALAND GP."},{"id":"ad215071-f6df-2e4b-e053-c918a4881b5c","name":"ROGALAND GP.","top":"ROGALAND GP. Top","topAge":52,"base":"ROGALAND GP. Base","baseAge":64,"color":"#b22222","level":1,"parent":null},{"id":"ad215071-f6e1-2e4b-e053-c918a4881b5c","name":"Balder Fm.","top":"Balder Fm. Top","topAge":52,"base":"Balder Fm. Base","baseAge":57,"color":"#bc4830","level":2,"parent":"ROGALAND GP."},{"id":"ad215071-f6e9-2e4b-e053-c918a4881b5c","name":"Sele Fm.","top":"Sele Fm. Top","topAge":57,"base":"Sele Fm. Base","baseAge":60,"color":"#bd845c","level":2,"parent":"ROGALAND GP."},{"id":"ad215071-f6ee-2e4b-e053-c918a4881b5c","name":"Lista Fm.","top":"Lista Fm. Top","topAge":60,"base":"Lista Fm. Base","baseAge":63,"color":"#c49f74","level":2,"parent":"ROGALAND GP."},{"id":"ad215071-f6f2-2e4b-e053-c918a4881b5c","name":"Ty Fm.","top":"Ty Fm. Top","topAge":63.5,"base":"Ty Fm. Base","baseAge":64,"color":"#d2b48c","level":2,"parent":"ROGALAND GP."},{"id":"ad215071-f6fb-2e4b-e053-c918a4881b5c","name":"SHETLAND GP.","top":"SHETLAND GP. Top","topAge":64,"base":"SHETLAND GP. Base","baseAge":95,"color":"#000080","level":1,"parent":null},{"id":"ad215071-f6fd-2e4b-e053-c918a4881b5c","name":"Ekofisk Fm.","top":"Ekofisk Fm. Top","topAge":64,"base":"Ekofisk Fm. Base","baseAge":66,"color":"#0000c3","level":2,"parent":"SHETLAND GP."},{"id":"ad215071-f6ff-2e4b-e053-c918a4881b5c","name":"Tor Fm.","top":"Tor Fm. Top","topAge":66,"base":"Tor Fm. Base","baseAge":75,"color":"#006dff","level":2,"parent":"SHETLAND GP."},{"id":"ad215071-f735-2e4b-e053-c918a4881b5c","name":"Hod Fm.","top":"Hod Fm. Top","topAge":75,"base":"Hod Fm. Base","baseAge":88,"color":"#00b6ff","level":2,"parent":"SHETLAND GP."},{"id":"ad215071-f70f-2e4b-e053-c918a4881b5c","name":"Blodoeks Fm.","top":"Blodoeks Fm. Top","topAge":88,"base":"Blodoeks Fm. Base","baseAge":90,"color":"#00daff","level":2,"parent":"SHETLAND GP."},{"id":"ad215071-f720-2e4b-e053-c918a4881b5c","name":"Hidra Fm.","top":"Hidra Fm. Top","topAge":90,"base":"Hidra Fm. Base","baseAge":95,"color":"#00ea4c","level":2,"parent":"SHETLAND GP."},{"id":"ad215071-f736-2e4b-e053-c918a4881b5c","name":"CROMER KNOLL GP.","top":"CROMER KNOLL GP. Top","topAge":95,"base":"CROMER KNOLL GP. Base","baseAge":139,"color":"#b233cf","level":1,"parent":null},{"id":"ad215071-f737-2e4b-e053-c918a4881b5c","name":"Roedby Fm.","top":"Roedby Fm. Top","topAge":95,"base":"Roedby Fm. Base","baseAge":110,"color":"#c14dcd","level":2,"parent":"CROMER KNOLL GP."},{"id":"ad215071-f73b-2e4b-e053-c918a4881b5c","name":"Aasgard Fm.","top":"Aasgard Fm. Top","topAge":115,"base":"Aasgard Fm. Base","baseAge":139,"color":"#e081c9","level":2,"parent":"CROMER KNOLL GP."},{"id":"ad215071-f3cb-2e4b-e053-c918a4881b5c","name":"Draupne Fm.","top":"Draupne Fm. Top","topAge":139,"base":"Draupne Fm. Base","baseAge":153,"color":"#ff4f20","level":2,"parent":"VIKING GP."},{"id":"ad215071-f3ce-2e4b-e053-c918a4881b5c","name":"VIKING GP.","top":"VIKING GP. Top","topAge":139,"base":"VIKING GP. Base","baseAge":171,"color":"#ff0000","level":1,"parent":null},{"id":"ad215071-f3cf-2e4b-e053-c918a4881b5c","name":"Heather Fm.","top":"Heather Fm. Top","topAge":153,"base":"Heather Fm. Base","baseAge":171,"color":"#ff5f30","level":2,"parent":"VIKING GP."},{"id":"ad215071-f3d8-2e4b-e053-c918a4881b5c","name":"Heather Fm. Sand VOLVE","top":"Heather Fm. Sand VOLVE Top","topAge":170,"base":"Heather Fm. Sand VOLVE Base","baseAge":171,"color":"#ffe500","level":3,"parent":"Heather Fm."},{"id":"7d713e2e-ace5-4b28-a062-54b594982089","name":"VESTLAND GP.","top":"VESTLAND GP. Top","topAge":171,"base":"VESTLAND GP. Base","baseAge":188,"color":"#d167cb","level":1,"parent":null},{"id":"ad215071-f3e6-2e4b-e053-c918a4881b5c","name":"Hugin Fm. 18 VOLVE","top":"Hugin Fm. 18 VOLVE Top","topAge":171,"base":"Hugin Fm. 18 VOLVE Base","baseAge":171.5,"color":"#ffff00","level":3,"parent":"Hugin Fm."},{"id":"b2567566-45a2-458c-bacc-62d1904412bd","name":"Hugin Fm.","top":"Hugin Fm. Top","topAge":171,"base":"Hugin Fm. Base","baseAge":180,"color":"#ffcb00","level":2,"parent":"VESTLAND GP."},{"id":"ad215071-f3e9-2e4b-e053-c918a4881b5c","name":"Hugin Fm. 17 VOLVE","top":"Hugin Fm. 17 VOLVE Top","topAge":171.5,"base":"Hugin Fm. 17 VOLVE Base","baseAge":172,"color":"#fff200","level":3,"parent":"Hugin Fm."},{"id":"ad215071-f3f3-2e4b-e053-c918a4881b5c","name":"Hugin Fm. 16 VOLVE","top":"Hugin Fm. 16 VOLVE Top","topAge":172,"base":"Hugin Fm. 16 VOLVE Base","baseAge":172.5,"color":"#ffe500","level":3,"parent":"Hugin Fm."},{"id":"ad215071-f3f5-2e4b-e053-c918a4881b5c","name":"Hugin Fm. 15 VOLVE","top":"Hugin Fm. 15 VOLVE Top","topAge":172.5,"base":"Hugin Fm. 15 VOLVE Base","baseAge":173,"color":"#ffd700","level":3,"parent":"Hugin Fm."},{"id":"ad215071-f3fa-2e4b-e053-c918a4881b5c","name":"Hugin Fm. 14 VOLVE","top":"Hugin Fm. 14 VOLVE Top","topAge":173,"base":"Hugin Fm. 14 VOLVE Base","baseAge":173.5,"color":"#ffcb00","level":3,"parent":"Hugin Fm."},{"id":"ad215071-f3fb-2e4b-e053-c918a4881b5c","name":"Hugin Fm. 13 VOLVE","top":"Hugin Fm. 13 VOLVE Top","topAge":173.5,"base":"Hugin Fm. 13 VOLVE Base","baseAge":174,"color":"#efba00","level":3,"parent":"Hugin Fm."},{"id":"ad215071-f3ff-2e4b-e053-c918a4881b5c","name":"Hugin Fm. 12 VOLVE","top":"Hugin Fm. 12 VOLVE Top","topAge":174,"base":"Hugin Fm. 12 VOLVE Base","baseAge":174.5,"color":"#f0aa23","level":3,"parent":"Hugin Fm."},{"id":"ad215071-f408-2e4b-e053-c918a4881b5c","name":"Hugin Fm. 11 VOLVE","top":"Hugin Fm. 11 VOLVE Top","topAge":174.5,"base":"Hugin Fm. 11 VOLVE Base","baseAge":175,"color":"#ffa500","level":3,"parent":"Hugin Fm."},{"id":"ad215071-f40e-2e4b-e053-c918a4881b5c","name":"Hugin Fm. 10 VOLVE","top":"Hugin Fm. 10 VOLVE Top","topAge":175,"base":"Hugin Fm. 10 VOLVE Base","baseAge":175.5,"color":"#ffaaa2","level":3,"parent":"Hugin Fm."},{"id":"ad215071-f485-2e4b-e053-c918a4881b5c","name":"Hugin Fm. 9 VOLVE","top":"Hugin Fm. 9 VOLVE Top","topAge":175.5,"base":"Hugin Fm. 9 VOLVE Base","baseAge":176,"color":"#ff9579","level":3,"parent":"Hugin Fm."},{"id":"ad215071-f488-2e4b-e053-c918a4881b5c","name":"Hugin Fm. 8 VOLVE","top":"Hugin Fm. 8 VOLVE Top","topAge":176,"base":"Hugin Fm. 8 VOLVE Base","baseAge":176.5,"color":"#ffc0cb","level":3,"parent":"Hugin Fm."},{"id":"ad215071-f489-2e4b-e053-c918a4881b5c","name":"Hugin Fm. 7 VOLVE","top":"Hugin Fm. 7 VOLVE Top","topAge":176.5,"base":"Hugin Fm. 7 VOLVE Base","baseAge":177,"color":"#ffb5c5","level":3,"parent":"Hugin Fm."},{"id":"ad215071-f490-2e4b-e053-c918a4881b5c","name":"Hugin Fm. 6 VOLVE","top":"Hugin Fm. 6 VOLVE Top","topAge":177,"base":"Hugin Fm. 6 VOLVE Base","baseAge":177.5,"color":"#e9d0a8","level":3,"parent":"Hugin Fm."},{"id":"ad215071-f495-2e4b-e053-c918a4881b5c","name":"Hugin Fm. 5 VOLVE","top":"Hugin Fm. 5 VOLVE Top","topAge":177.5,"base":"Hugin Fm. 5 VOLVE Base","baseAge":178,"color":"#d2b48c","level":3,"parent":"Hugin Fm."},{"id":"ad215071-f49a-2e4b-e053-c918a4881b5c","name":"Hugin Fm. 4 VOLVE","top":"Hugin Fm. 4 VOLVE Top","topAge":178,"base":"Hugin Fm. 4 VOLVE Base","baseAge":178.5,"color":"#c49f74","level":3,"parent":"Hugin Fm."},{"id":"ad215071-f49b-2e4b-e053-c918a4881b5c","name":"Hugin Fm. 3 VOLVE","top":"Hugin Fm. 3 VOLVE Top","topAge":178.5,"base":"Hugin Fm. 3 VOLVE Base","baseAge":179,"color":"#bd845c","level":3,"parent":"Hugin Fm."},{"id":"ad215071-f4a4-2e4b-e053-c918a4881b5c","name":"Hugin Fm. 2 VOLVE","top":"Hugin Fm. 2 VOLVE Top","topAge":179,"base":"Hugin Fm. 2 VOLVE Base","baseAge":179.5,"color":"#bb663e","level":3,"parent":"Hugin Fm."},{"id":"ad215071-f4a6-2e4b-e053-c918a4881b5c","name":"Hugin Fm. 1 VOLVE","top":"Hugin Fm. 1 VOLVE Top","topAge":179.5,"base":"Hugin Fm. 1 VOLVE Base","baseAge":180,"color":"#bc4830","level":3,"parent":"Hugin Fm."},{"id":"0fd59157-5a7d-4b5e-ba40-f76d0b2659aa","name":"Sleipner Fm.","top":"Sleipner Fm. Top","topAge":180,"base":"Sleipner Fm. Base","baseAge":188,"color":"#ffff00","level":2,"parent":"VESTLAND GP."},{"id":"ad215071-f4b0-2e4b-e053-c918a4881b5c","name":"HEGRE GP.","top":"HEGRE GP. Top","topAge":208,"base":"HEGRE GP. Base","baseAge":245,"color":"#006400","level":1,"parent":null},{"id":"ad215071-f4b1-2e4b-e053-c918a4881b5c","name":"Skagerrak Fm.","top":"Skagerrak Fm. Top","topAge":208,"base":"Skagerrak Fm. Base","baseAge":220,"color":"#007a12","level":2,"parent":"HEGRE GP."},{"id":"ad215071-f4b8-2e4b-e053-c918a4881b5c","name":"Smith Bank Fm.","top":"Smith Bank Fm. Top","topAge":220,"base":"Smith Bank Fm. Base","baseAge":226,"color":"#00ea4c","level":2,"parent":"HEGRE GP."}]}} \ No newline at end of file +{"ad215071-c509-2e4b-e053-c918a4881b5c":{"id":"ad215071-c509-2e4b-e053-c918a4881b5c","name":"LITHO_VOLVE","type":"lithostratigraphy","units":[{"id":"ad215071-fb13-2e4b-e053-c918a4881b5c","name":"NORDLAND GP.","unitType":"group","top":"NORDLAND GP. Top","topAge":0.001,"base":"NORDLAND GP. Base","baseAge":16,"color":"#ffe500","level":1,"parent":null},{"id":"ad215072-0001-2e4b-e053-c918a4881b5c","name":"Utsira Fm.","unitType":"formation","top":"Utsira Fm. Top","topAge":8,"base":"Utsira Fm. Base","baseAge":16,"color":"#fff200","level":2,"parent":"NORDLAND GP."},{"id":"ad215071-f6ca-2e4b-e053-c918a4881b5c","name":"HORDALAND GP.","unitType":"group","top":"HORDALAND GP. Top","topAge":23,"base":"HORDALAND GP. Base","baseAge":52,"color":"#009024","level":1,"parent":null},{"id":"ad215071-f6cc-2e4b-e053-c918a4881b5c","name":"Skade Fm.","unitType":"formation","top":"Skade Fm. Top","topAge":23,"base":"Skade Fm. Base","baseAge":33,"color":"#00a636","level":2,"parent":"HORDALAND GP."},{"id":"ad215071-f6d5-2e4b-e053-c918a4881b5c","name":"Grid Fm.","unitType":"formation","top":"Grid Fm. Top","topAge":35,"base":"Grid Fm. Base","baseAge":38,"color":"#00bc48","level":2,"parent":"HORDALAND GP."},{"id":"ad215071-f6dc-2e4b-e053-c918a4881b5c","name":"Frigg Fm.","unitType":"formation","top":"Frigg Fm. Top","topAge":51,"base":"Frigg Fm. Base","baseAge":52,"color":"#00ff00","level":2,"parent":"HORDALAND GP."},{"id":"ad215071-f6df-2e4b-e053-c918a4881b5c","name":"ROGALAND GP.","unitType":"group","top":"ROGALAND GP. Top","topAge":52,"base":"ROGALAND GP. Base","baseAge":64,"color":"#b22222","level":1,"parent":null},{"id":"ad215071-f6e1-2e4b-e053-c918a4881b5c","name":"Balder Fm.","unitType":"formation","top":"Balder Fm. Top","topAge":52,"base":"Balder Fm. Base","baseAge":57,"color":"#bc4830","level":2,"parent":"ROGALAND GP."},{"id":"ad215071-f6e9-2e4b-e053-c918a4881b5c","name":"Sele Fm.","unitType":"formation","top":"Sele Fm. Top","topAge":57,"base":"Sele Fm. Base","baseAge":60,"color":"#bd845c","level":2,"parent":"ROGALAND GP."},{"id":"ad215071-f6ee-2e4b-e053-c918a4881b5c","name":"Lista Fm.","unitType":"formation","top":"Lista Fm. Top","topAge":60,"base":"Lista Fm. Base","baseAge":63,"color":"#c49f74","level":2,"parent":"ROGALAND GP."},{"id":"ad215071-f6f2-2e4b-e053-c918a4881b5c","name":"Ty Fm.","unitType":"formation","top":"Ty Fm. Top","topAge":63.5,"base":"Ty Fm. Base","baseAge":64,"color":"#d2b48c","level":2,"parent":"ROGALAND GP."},{"id":"ad215071-f6fb-2e4b-e053-c918a4881b5c","name":"SHETLAND GP.","unitType":"group","top":"SHETLAND GP. Top","topAge":64,"base":"SHETLAND GP. Base","baseAge":95,"color":"#000080","level":1,"parent":null},{"id":"ad215071-f6fd-2e4b-e053-c918a4881b5c","name":"Ekofisk Fm.","unitType":"formation","top":"Ekofisk Fm. Top","topAge":64,"base":"Ekofisk Fm. Base","baseAge":66,"color":"#0000c3","level":2,"parent":"SHETLAND GP."},{"id":"ad215071-f6ff-2e4b-e053-c918a4881b5c","name":"Tor Fm.","unitType":"formation","top":"Tor Fm. Top","topAge":66,"base":"Tor Fm. Base","baseAge":75,"color":"#006dff","level":2,"parent":"SHETLAND GP."},{"id":"ad215071-f735-2e4b-e053-c918a4881b5c","name":"Hod Fm.","unitType":"formation","top":"Hod Fm. Top","topAge":75,"base":"Hod Fm. Base","baseAge":88,"color":"#00b6ff","level":2,"parent":"SHETLAND GP."},{"id":"ad215071-f70f-2e4b-e053-c918a4881b5c","name":"Blodoeks Fm.","unitType":"formation","top":"Blodoeks Fm. Top","topAge":88,"base":"Blodoeks Fm. Base","baseAge":90,"color":"#00daff","level":2,"parent":"SHETLAND GP."},{"id":"ad215071-f720-2e4b-e053-c918a4881b5c","name":"Hidra Fm.","unitType":"formation","top":"Hidra Fm. Top","topAge":90,"base":"Hidra Fm. Base","baseAge":95,"color":"#00ea4c","level":2,"parent":"SHETLAND GP."},{"id":"ad215071-f736-2e4b-e053-c918a4881b5c","name":"CROMER KNOLL GP.","unitType":"group","top":"CROMER KNOLL GP. Top","topAge":95,"base":"CROMER KNOLL GP. Base","baseAge":139,"color":"#b233cf","level":1,"parent":null},{"id":"ad215071-f737-2e4b-e053-c918a4881b5c","name":"Roedby Fm.","unitType":"formation","top":"Roedby Fm. Top","topAge":95,"base":"Roedby Fm. Base","baseAge":110,"color":"#c14dcd","level":2,"parent":"CROMER KNOLL GP."},{"id":"ad215071-f73b-2e4b-e053-c918a4881b5c","name":"Aasgard Fm.","unitType":"formation","top":"Aasgard Fm. Top","topAge":115,"base":"Aasgard Fm. Base","baseAge":139,"color":"#e081c9","level":2,"parent":"CROMER KNOLL GP."},{"id":"ad215071-f3cb-2e4b-e053-c918a4881b5c","name":"Draupne Fm.","unitType":"formation","top":"Draupne Fm. Top","topAge":139,"base":"Draupne Fm. Base","baseAge":153,"color":"#ff4f20","level":2,"parent":"VIKING GP."},{"id":"ad215071-f3ce-2e4b-e053-c918a4881b5c","name":"VIKING GP.","unitType":"group","top":"VIKING GP. Top","topAge":139,"base":"VIKING GP. Base","baseAge":171,"color":"#ff0000","level":1,"parent":null},{"id":"ad215071-f3cf-2e4b-e053-c918a4881b5c","name":"Heather Fm.","unitType":"formation","top":"Heather Fm. Top","topAge":153,"base":"Heather Fm. Base","baseAge":171,"color":"#ff5f30","level":2,"parent":"VIKING GP."},{"id":"ad215071-f3d8-2e4b-e053-c918a4881b5c","name":"Heather Fm. Sand VOLVE","unitType":"subzone","top":"Heather Fm. Sand VOLVE Top","topAge":170,"base":"Heather Fm. Sand VOLVE Base","baseAge":171,"color":"#ffe500","level":3,"parent":"Heather Fm."},{"id":"7d713e2e-ace5-4b28-a062-54b594982089","name":"VESTLAND GP.","unitType":"group","top":"VESTLAND GP. Top","topAge":171,"base":"VESTLAND GP. Base","baseAge":188,"color":"#d167cb","level":1,"parent":null},{"id":"ad215071-f3e6-2e4b-e053-c918a4881b5c","name":"Hugin Fm. 18 VOLVE","unitType":"subzone","top":"Hugin Fm. 18 VOLVE Top","topAge":171,"base":"Hugin Fm. 18 VOLVE Base","baseAge":171.5,"color":"#ffff00","level":3,"parent":"Hugin Fm."},{"id":"b2567566-45a2-458c-bacc-62d1904412bd","name":"Hugin Fm.","unitType":"formation","top":"Hugin Fm. Top","topAge":171,"base":"Hugin Fm. Base","baseAge":180,"color":"#ffcb00","level":2,"parent":"VESTLAND GP."},{"id":"ad215071-f3e9-2e4b-e053-c918a4881b5c","name":"Hugin Fm. 17 VOLVE","unitType":"subzone","top":"Hugin Fm. 17 VOLVE Top","topAge":171.5,"base":"Hugin Fm. 17 VOLVE Base","baseAge":172,"color":"#fff200","level":3,"parent":"Hugin Fm."},{"id":"ad215071-f3f3-2e4b-e053-c918a4881b5c","name":"Hugin Fm. 16 VOLVE","unitType":"subzone","top":"Hugin Fm. 16 VOLVE Top","topAge":172,"base":"Hugin Fm. 16 VOLVE Base","baseAge":172.5,"color":"#ffe500","level":3,"parent":"Hugin Fm."},{"id":"ad215071-f3f5-2e4b-e053-c918a4881b5c","name":"Hugin Fm. 15 VOLVE","unitType":"subzone","top":"Hugin Fm. 15 VOLVE Top","topAge":172.5,"base":"Hugin Fm. 15 VOLVE Base","baseAge":173,"color":"#ffd700","level":3,"parent":"Hugin Fm."},{"id":"ad215071-f3fa-2e4b-e053-c918a4881b5c","name":"Hugin Fm. 14 VOLVE","unitType":"subzone","top":"Hugin Fm. 14 VOLVE Top","topAge":173,"base":"Hugin Fm. 14 VOLVE Base","baseAge":173.5,"color":"#ffcb00","level":3,"parent":"Hugin Fm."},{"id":"ad215071-f3fb-2e4b-e053-c918a4881b5c","name":"Hugin Fm. 13 VOLVE","unitType":"subzone","top":"Hugin Fm. 13 VOLVE Top","topAge":173.5,"base":"Hugin Fm. 13 VOLVE Base","baseAge":174,"color":"#efba00","level":3,"parent":"Hugin Fm."},{"id":"ad215071-f3ff-2e4b-e053-c918a4881b5c","name":"Hugin Fm. 12 VOLVE","unitType":"subzone","top":"Hugin Fm. 12 VOLVE Top","topAge":174,"base":"Hugin Fm. 12 VOLVE Base","baseAge":174.5,"color":"#f0aa23","level":3,"parent":"Hugin Fm."},{"id":"ad215071-f408-2e4b-e053-c918a4881b5c","name":"Hugin Fm. 11 VOLVE","unitType":"subzone","top":"Hugin Fm. 11 VOLVE Top","topAge":174.5,"base":"Hugin Fm. 11 VOLVE Base","baseAge":175,"color":"#ffa500","level":3,"parent":"Hugin Fm."},{"id":"ad215071-f40e-2e4b-e053-c918a4881b5c","name":"Hugin Fm. 10 VOLVE","unitType":"subzone","top":"Hugin Fm. 10 VOLVE Top","topAge":175,"base":"Hugin Fm. 10 VOLVE Base","baseAge":175.5,"color":"#ffaaa2","level":3,"parent":"Hugin Fm."},{"id":"ad215071-f485-2e4b-e053-c918a4881b5c","name":"Hugin Fm. 9 VOLVE","unitType":"subzone","top":"Hugin Fm. 9 VOLVE Top","topAge":175.5,"base":"Hugin Fm. 9 VOLVE Base","baseAge":176,"color":"#ff9579","level":3,"parent":"Hugin Fm."},{"id":"ad215071-f488-2e4b-e053-c918a4881b5c","name":"Hugin Fm. 8 VOLVE","unitType":"subzone","top":"Hugin Fm. 8 VOLVE Top","topAge":176,"base":"Hugin Fm. 8 VOLVE Base","baseAge":176.5,"color":"#ffc0cb","level":3,"parent":"Hugin Fm."},{"id":"ad215071-f489-2e4b-e053-c918a4881b5c","name":"Hugin Fm. 7 VOLVE","unitType":"subzone","top":"Hugin Fm. 7 VOLVE Top","topAge":176.5,"base":"Hugin Fm. 7 VOLVE Base","baseAge":177,"color":"#ffb5c5","level":3,"parent":"Hugin Fm."},{"id":"ad215071-f490-2e4b-e053-c918a4881b5c","name":"Hugin Fm. 6 VOLVE","unitType":"subzone","top":"Hugin Fm. 6 VOLVE Top","topAge":177,"base":"Hugin Fm. 6 VOLVE Base","baseAge":177.5,"color":"#e9d0a8","level":3,"parent":"Hugin Fm."},{"id":"ad215071-f495-2e4b-e053-c918a4881b5c","name":"Hugin Fm. 5 VOLVE","unitType":"subzone","top":"Hugin Fm. 5 VOLVE Top","topAge":177.5,"base":"Hugin Fm. 5 VOLVE Base","baseAge":178,"color":"#d2b48c","level":3,"parent":"Hugin Fm."},{"id":"ad215071-f49a-2e4b-e053-c918a4881b5c","name":"Hugin Fm. 4 VOLVE","unitType":"subzone","top":"Hugin Fm. 4 VOLVE Top","topAge":178,"base":"Hugin Fm. 4 VOLVE Base","baseAge":178.5,"color":"#c49f74","level":3,"parent":"Hugin Fm."},{"id":"ad215071-f49b-2e4b-e053-c918a4881b5c","name":"Hugin Fm. 3 VOLVE","unitType":"subzone","top":"Hugin Fm. 3 VOLVE Top","topAge":178.5,"base":"Hugin Fm. 3 VOLVE Base","baseAge":179,"color":"#bd845c","level":3,"parent":"Hugin Fm."},{"id":"ad215071-f4a4-2e4b-e053-c918a4881b5c","name":"Hugin Fm. 2 VOLVE","unitType":"subzone","top":"Hugin Fm. 2 VOLVE Top","topAge":179,"base":"Hugin Fm. 2 VOLVE Base","baseAge":179.5,"color":"#bb663e","level":3,"parent":"Hugin Fm."},{"id":"ad215071-f4a6-2e4b-e053-c918a4881b5c","name":"Hugin Fm. 1 VOLVE","unitType":"subzone","top":"Hugin Fm. 1 VOLVE Top","topAge":179.5,"base":"Hugin Fm. 1 VOLVE Base","baseAge":180,"color":"#bc4830","level":3,"parent":"Hugin Fm."},{"id":"0fd59157-5a7d-4b5e-ba40-f76d0b2659aa","name":"Sleipner Fm.","unitType":"formation","top":"Sleipner Fm. Top","topAge":180,"base":"Sleipner Fm. Base","baseAge":188,"color":"#ffff00","level":2,"parent":"VESTLAND GP."},{"id":"ad215071-f4b0-2e4b-e053-c918a4881b5c","name":"HEGRE GP.","unitType":"group","top":"HEGRE GP. Top","topAge":208,"base":"HEGRE GP. Base","baseAge":245,"color":"#006400","level":1,"parent":null},{"id":"ad215071-f4b1-2e4b-e053-c918a4881b5c","name":"Skagerrak Fm.","unitType":"formation","top":"Skagerrak Fm. Top","topAge":208,"base":"Skagerrak Fm. Base","baseAge":220,"color":"#007a12","level":2,"parent":"HEGRE GP."},{"id":"ad215071-f4b8-2e4b-e053-c918a4881b5c","name":"Smith Bank Fm.","unitType":"formation","top":"Smith Bank Fm. Top","topAge":220,"base":"Smith Bank Fm. Base","baseAge":226,"color":"#00ea4c","level":2,"parent":"HEGRE GP."}]}} \ No newline at end of file diff --git a/public/glyphs/OpenSans-Regular.json b/public/glyphs/OpenSans-Regular.json new file mode 100644 index 0000000..ab00b3f --- /dev/null +++ b/public/glyphs/OpenSans-Regular.json @@ -0,0 +1,1562 @@ +{ + "pages": [ + "OpenSans-Regular.png" + ], + "chars": [ + { + "id": 124, + "index": 95, + "char": "|", + "width": 9, + "height": 53, + "xoffset": 8, + "yoffset": 17, + "xadvance": 26, + "chnl": 15, + "x": 0, + "y": 0, + "page": 0 + }, + { + "id": 106, + "index": 77, + "char": "j", + "width": 17, + "height": 52, + "xoffset": -6, + "yoffset": 18, + "xadvance": 12, + "chnl": 15, + "x": 10, + "y": 0, + "page": 0 + }, + { + "id": 74, + "index": 45, + "char": "J", + "width": 18, + "height": 48, + "xoffset": -7, + "yoffset": 19, + "xadvance": 13, + "chnl": 15, + "x": 28, + "y": 0, + "page": 0 + }, + { + "id": 81, + "index": 52, + "char": "Q", + "width": 37, + "height": 48, + "xoffset": 0, + "yoffset": 19, + "xadvance": 37, + "chnl": 15, + "x": 47, + "y": 0, + "page": 0 + }, + { + "id": 87, + "index": 58, + "char": "W", + "width": 48, + "height": 40, + "xoffset": -2, + "yoffset": 19, + "xadvance": 43, + "chnl": 15, + "x": 0, + "y": 54, + "page": 0 + }, + { + "id": 40, + "index": 11, + "char": "(", + "width": 17, + "height": 47, + "xoffset": -1, + "yoffset": 19, + "xadvance": 14, + "chnl": 15, + "x": 85, + "y": 0, + "page": 0 + }, + { + "id": 41, + "index": 12, + "char": ")", + "width": 17, + "height": 47, + "xoffset": -2, + "yoffset": 19, + "xadvance": 14, + "chnl": 15, + "x": 85, + "y": 48, + "page": 0 + }, + { + "id": 91, + "index": 62, + "char": "[", + "width": 16, + "height": 47, + "xoffset": 1, + "yoffset": 19, + "xadvance": 15, + "chnl": 15, + "x": 0, + "y": 95, + "page": 0 + }, + { + "id": 93, + "index": 64, + "char": "]", + "width": 16, + "height": 47, + "xoffset": -2, + "yoffset": 19, + "xadvance": 15, + "chnl": 15, + "x": 17, + "y": 95, + "page": 0 + }, + { + "id": 123, + "index": 94, + "char": "{", + "width": 21, + "height": 47, + "xoffset": -2, + "yoffset": 19, + "xadvance": 18, + "chnl": 15, + "x": 34, + "y": 95, + "page": 0 + }, + { + "id": 125, + "index": 96, + "char": "}", + "width": 21, + "height": 47, + "xoffset": -1, + "yoffset": 19, + "xadvance": 18, + "chnl": 15, + "x": 56, + "y": 49, + "page": 0 + }, + { + "id": 197, + "index": 135, + "char": "Å", + "width": 36, + "height": 47, + "xoffset": -3, + "yoffset": 12, + "xadvance": 30, + "chnl": 15, + "x": 103, + "y": 0, + "page": 0 + }, + { + "id": 229, + "index": 167, + "char": "å", + "width": 26, + "height": 45, + "xoffset": -1, + "yoffset": 15, + "xadvance": 26, + "chnl": 15, + "x": 56, + "y": 97, + "page": 0 + }, + { + "id": 36, + "index": 7, + "char": "$", + "width": 27, + "height": 44, + "xoffset": 0, + "yoffset": 17, + "xadvance": 27, + "chnl": 15, + "x": 83, + "y": 96, + "page": 0 + }, + { + "id": 64, + "index": 35, + "char": "@", + "width": 43, + "height": 44, + "xoffset": 0, + "yoffset": 19, + "xadvance": 42, + "chnl": 15, + "x": 140, + "y": 0, + "page": 0 + }, + { + "id": 198, + "index": 136, + "char": "Æ", + "width": 44, + "height": 40, + "xoffset": -3, + "yoffset": 19, + "xadvance": 41, + "chnl": 15, + "x": 103, + "y": 48, + "page": 0 + }, + { + "id": 103, + "index": 74, + "char": "g", + "width": 30, + "height": 43, + "xoffset": -2, + "yoffset": 27, + "xadvance": 26, + "chnl": 15, + "x": 148, + "y": 45, + "page": 0 + }, + { + "id": 112, + "index": 83, + "char": "p", + "width": 28, + "height": 43, + "xoffset": 1, + "yoffset": 27, + "xadvance": 29, + "chnl": 15, + "x": 111, + "y": 89, + "page": 0 + }, + { + "id": 113, + "index": 84, + "char": "q", + "width": 28, + "height": 43, + "xoffset": 0, + "yoffset": 27, + "xadvance": 29, + "chnl": 15, + "x": 140, + "y": 89, + "page": 0 + }, + { + "id": 98, + "index": 69, + "char": "b", + "width": 28, + "height": 42, + "xoffset": 1, + "yoffset": 17, + "xadvance": 29, + "chnl": 15, + "x": 0, + "y": 143, + "page": 0 + }, + { + "id": 100, + "index": 71, + "char": "d", + "width": 28, + "height": 42, + "xoffset": 0, + "yoffset": 17, + "xadvance": 29, + "chnl": 15, + "x": 29, + "y": 143, + "page": 0 + }, + { + "id": 102, + "index": 73, + "char": "f", + "width": 23, + "height": 42, + "xoffset": -2, + "yoffset": 17, + "xadvance": 16, + "chnl": 15, + "x": 58, + "y": 143, + "page": 0 + }, + { + "id": 104, + "index": 75, + "char": "h", + "width": 27, + "height": 42, + "xoffset": 1, + "yoffset": 17, + "xadvance": 29, + "chnl": 15, + "x": 82, + "y": 143, + "page": 0 + }, + { + "id": 107, + "index": 78, + "char": "k", + "width": 26, + "height": 42, + "xoffset": 1, + "yoffset": 17, + "xadvance": 25, + "chnl": 15, + "x": 110, + "y": 141, + "page": 0 + }, + { + "id": 108, + "index": 79, + "char": "l", + "width": 10, + "height": 42, + "xoffset": 1, + "yoffset": 17, + "xadvance": 12, + "chnl": 15, + "x": 169, + "y": 89, + "page": 0 + }, + { + "id": 109, + "index": 80, + "char": "m", + "width": 42, + "height": 32, + "xoffset": 1, + "yoffset": 27, + "xadvance": 44, + "chnl": 15, + "x": 137, + "y": 133, + "page": 0 + }, + { + "id": 121, + "index": 92, + "char": "y", + "width": 30, + "height": 42, + "xoffset": -3, + "yoffset": 28, + "xadvance": 24, + "chnl": 15, + "x": 184, + "y": 0, + "page": 0 + }, + { + "id": 230, + "index": 168, + "char": "æ", + "width": 42, + "height": 32, + "xoffset": -1, + "yoffset": 27, + "xadvance": 41, + "chnl": 15, + "x": 0, + "y": 186, + "page": 0 + }, + { + "id": 216, + "index": 154, + "char": "Ø", + "width": 37, + "height": 42, + "xoffset": 0, + "yoffset": 18, + "xadvance": 37, + "chnl": 15, + "x": 137, + "y": 166, + "page": 0 + }, + { + "id": 38, + "index": 9, + "char": "&", + "width": 37, + "height": 41, + "xoffset": 0, + "yoffset": 19, + "xadvance": 34, + "chnl": 15, + "x": 175, + "y": 166, + "page": 0 + }, + { + "id": 48, + "index": 19, + "char": "0", + "width": 28, + "height": 41, + "xoffset": -1, + "yoffset": 19, + "xadvance": 27, + "chnl": 15, + "x": 179, + "y": 45, + "page": 0 + }, + { + "id": 57, + "index": 28, + "char": "9", + "width": 28, + "height": 41, + "xoffset": -1, + "yoffset": 19, + "xadvance": 27, + "chnl": 15, + "x": 180, + "y": 87, + "page": 0 + }, + { + "id": 63, + "index": 34, + "char": "?", + "width": 24, + "height": 41, + "xoffset": -2, + "yoffset": 19, + "xadvance": 20, + "chnl": 15, + "x": 215, + "y": 0, + "page": 0 + }, + { + "id": 79, + "index": 50, + "char": "O", + "width": 37, + "height": 41, + "xoffset": 0, + "yoffset": 19, + "xadvance": 37, + "chnl": 15, + "x": 0, + "y": 219, + "page": 0 + }, + { + "id": 105, + "index": 76, + "char": "i", + "width": 11, + "height": 41, + "xoffset": 1, + "yoffset": 18, + "xadvance": 12, + "chnl": 15, + "x": 38, + "y": 219, + "page": 0 + }, + { + "id": 119, + "index": 90, + "char": "w", + "width": 41, + "height": 31, + "xoffset": -2, + "yoffset": 28, + "xadvance": 36, + "chnl": 15, + "x": 43, + "y": 186, + "page": 0 + }, + { + "id": 33, + "index": 4, + "char": "!", + "width": 11, + "height": 40, + "xoffset": 0, + "yoffset": 19, + "xadvance": 12, + "chnl": 15, + "x": 50, + "y": 218, + "page": 0 + }, + { + "id": 92, + "index": 63, + "char": "\\", + "width": 22, + "height": 40, + "xoffset": -3, + "yoffset": 19, + "xadvance": 17, + "chnl": 15, + "x": 215, + "y": 42, + "page": 0 + }, + { + "id": 35, + "index": 6, + "char": "#", + "width": 34, + "height": 40, + "xoffset": -2, + "yoffset": 19, + "xadvance": 30, + "chnl": 15, + "x": 62, + "y": 218, + "page": 0 + }, + { + "id": 37, + "index": 8, + "char": "%", + "width": 40, + "height": 40, + "xoffset": -1, + "yoffset": 19, + "xadvance": 39, + "chnl": 15, + "x": 97, + "y": 209, + "page": 0 + }, + { + "id": 47, + "index": 18, + "char": "/", + "width": 22, + "height": 40, + "xoffset": -3, + "yoffset": 19, + "xadvance": 17, + "chnl": 15, + "x": 213, + "y": 83, + "page": 0 + }, + { + "id": 49, + "index": 20, + "char": "1", + "width": 18, + "height": 40, + "xoffset": 1, + "yoffset": 19, + "xadvance": 27, + "chnl": 15, + "x": 209, + "y": 124, + "page": 0 + }, + { + "id": 50, + "index": 21, + "char": "2", + "width": 28, + "height": 40, + "xoffset": -1, + "yoffset": 19, + "xadvance": 27, + "chnl": 15, + "x": 138, + "y": 209, + "page": 0 + }, + { + "id": 51, + "index": 22, + "char": "3", + "width": 28, + "height": 40, + "xoffset": -1, + "yoffset": 19, + "xadvance": 27, + "chnl": 15, + "x": 167, + "y": 209, + "page": 0 + }, + { + "id": 52, + "index": 23, + "char": "4", + "width": 31, + "height": 40, + "xoffset": -2, + "yoffset": 19, + "xadvance": 27, + "chnl": 15, + "x": 196, + "y": 208, + "page": 0 + }, + { + "id": 53, + "index": 24, + "char": "5", + "width": 27, + "height": 40, + "xoffset": 0, + "yoffset": 19, + "xadvance": 27, + "chnl": 15, + "x": 240, + "y": 0, + "page": 0 + }, + { + "id": 54, + "index": 25, + "char": "6", + "width": 28, + "height": 40, + "xoffset": 0, + "yoffset": 19, + "xadvance": 27, + "chnl": 15, + "x": 238, + "y": 42, + "page": 0 + }, + { + "id": 55, + "index": 26, + "char": "7", + "width": 28, + "height": 40, + "xoffset": -1, + "yoffset": 19, + "xadvance": 27, + "chnl": 15, + "x": 213, + "y": 165, + "page": 0 + }, + { + "id": 56, + "index": 27, + "char": "8", + "width": 28, + "height": 40, + "xoffset": -1, + "yoffset": 19, + "xadvance": 27, + "chnl": 15, + "x": 228, + "y": 124, + "page": 0 + }, + { + "id": 65, + "index": 36, + "char": "A", + "width": 36, + "height": 40, + "xoffset": -3, + "yoffset": 19, + "xadvance": 30, + "chnl": 15, + "x": 228, + "y": 206, + "page": 0 + }, + { + "id": 66, + "index": 37, + "char": "B", + "width": 29, + "height": 40, + "xoffset": 2, + "yoffset": 19, + "xadvance": 30, + "chnl": 15, + "x": 236, + "y": 83, + "page": 0 + }, + { + "id": 67, + "index": 38, + "char": "C", + "width": 31, + "height": 40, + "xoffset": 0, + "yoffset": 19, + "xadvance": 30, + "chnl": 15, + "x": 0, + "y": 261, + "page": 0 + }, + { + "id": 68, + "index": 39, + "char": "D", + "width": 33, + "height": 40, + "xoffset": 2, + "yoffset": 19, + "xadvance": 34, + "chnl": 15, + "x": 32, + "y": 261, + "page": 0 + }, + { + "id": 69, + "index": 40, + "char": "E", + "width": 25, + "height": 40, + "xoffset": 2, + "yoffset": 19, + "xadvance": 26, + "chnl": 15, + "x": 242, + "y": 165, + "page": 0 + }, + { + "id": 70, + "index": 41, + "char": "F", + "width": 25, + "height": 40, + "xoffset": 2, + "yoffset": 19, + "xadvance": 24, + "chnl": 15, + "x": 66, + "y": 259, + "page": 0 + }, + { + "id": 71, + "index": 42, + "char": "G", + "width": 34, + "height": 40, + "xoffset": 0, + "yoffset": 19, + "xadvance": 34, + "chnl": 15, + "x": 92, + "y": 259, + "page": 0 + }, + { + "id": 72, + "index": 43, + "char": "H", + "width": 31, + "height": 40, + "xoffset": 2, + "yoffset": 19, + "xadvance": 35, + "chnl": 15, + "x": 228, + "y": 247, + "page": 0 + }, + { + "id": 73, + "index": 44, + "char": "I", + "width": 10, + "height": 40, + "xoffset": 2, + "yoffset": 19, + "xadvance": 13, + "chnl": 15, + "x": 257, + "y": 124, + "page": 0 + }, + { + "id": 75, + "index": 46, + "char": "K", + "width": 30, + "height": 40, + "xoffset": 2, + "yoffset": 19, + "xadvance": 29, + "chnl": 15, + "x": 196, + "y": 249, + "page": 0 + }, + { + "id": 76, + "index": 47, + "char": "L", + "width": 25, + "height": 40, + "xoffset": 2, + "yoffset": 19, + "xadvance": 25, + "chnl": 15, + "x": 127, + "y": 250, + "page": 0 + }, + { + "id": 77, + "index": 48, + "char": "M", + "width": 39, + "height": 40, + "xoffset": 2, + "yoffset": 19, + "xadvance": 42, + "chnl": 15, + "x": 153, + "y": 250, + "page": 0 + }, + { + "id": 78, + "index": 49, + "char": "N", + "width": 32, + "height": 40, + "xoffset": 2, + "yoffset": 19, + "xadvance": 35, + "chnl": 15, + "x": 266, + "y": 83, + "page": 0 + }, + { + "id": 80, + "index": 51, + "char": "P", + "width": 27, + "height": 40, + "xoffset": 2, + "yoffset": 19, + "xadvance": 28, + "chnl": 15, + "x": 267, + "y": 41, + "page": 0 + }, + { + "id": 82, + "index": 53, + "char": "R", + "width": 30, + "height": 40, + "xoffset": 2, + "yoffset": 19, + "xadvance": 29, + "chnl": 15, + "x": 268, + "y": 0, + "page": 0 + }, + { + "id": 83, + "index": 54, + "char": "S", + "width": 27, + "height": 40, + "xoffset": -1, + "yoffset": 19, + "xadvance": 26, + "chnl": 15, + "x": 268, + "y": 124, + "page": 0 + }, + { + "id": 84, + "index": 55, + "char": "T", + "width": 31, + "height": 40, + "xoffset": -3, + "yoffset": 19, + "xadvance": 26, + "chnl": 15, + "x": 268, + "y": 165, + "page": 0 + }, + { + "id": 85, + "index": 56, + "char": "U", + "width": 32, + "height": 40, + "xoffset": 1, + "yoffset": 19, + "xadvance": 34, + "chnl": 15, + "x": 265, + "y": 206, + "page": 0 + }, + { + "id": 86, + "index": 57, + "char": "V", + "width": 34, + "height": 40, + "xoffset": -3, + "yoffset": 19, + "xadvance": 28, + "chnl": 15, + "x": 260, + "y": 247, + "page": 0 + }, + { + "id": 88, + "index": 59, + "char": "X", + "width": 33, + "height": 40, + "xoffset": -3, + "yoffset": 19, + "xadvance": 27, + "chnl": 15, + "x": 296, + "y": 124, + "page": 0 + }, + { + "id": 89, + "index": 60, + "char": "Y", + "width": 32, + "height": 40, + "xoffset": -3, + "yoffset": 19, + "xadvance": 26, + "chnl": 15, + "x": 295, + "y": 41, + "page": 0 + }, + { + "id": 90, + "index": 61, + "char": "Z", + "width": 29, + "height": 40, + "xoffset": -1, + "yoffset": 19, + "xadvance": 27, + "chnl": 15, + "x": 299, + "y": 0, + "page": 0 + }, + { + "id": 59, + "index": 30, + "char": ";", + "width": 13, + "height": 38, + "xoffset": -2, + "yoffset": 27, + "xadvance": 12, + "chnl": 15, + "x": 299, + "y": 82, + "page": 0 + }, + { + "id": 116, + "index": 87, + "char": "t", + "width": 21, + "height": 37, + "xoffset": -2, + "yoffset": 22, + "xadvance": 17, + "chnl": 15, + "x": 313, + "y": 82, + "page": 0 + }, + { + "id": 248, + "index": 186, + "char": "ø", + "width": 29, + "height": 34, + "xoffset": 0, + "yoffset": 26, + "xadvance": 28, + "chnl": 15, + "x": 300, + "y": 165, + "page": 0 + }, + { + "id": 58, + "index": 29, + "char": ":", + "width": 11, + "height": 32, + "xoffset": 0, + "yoffset": 27, + "xadvance": 12, + "chnl": 15, + "x": 180, + "y": 129, + "page": 0 + }, + { + "id": 97, + "index": 68, + "char": "a", + "width": 26, + "height": 32, + "xoffset": -1, + "yoffset": 27, + "xadvance": 26, + "chnl": 15, + "x": 300, + "y": 200, + "page": 0 + }, + { + "id": 99, + "index": 70, + "char": "c", + "width": 24, + "height": 32, + "xoffset": 0, + "yoffset": 27, + "xadvance": 23, + "chnl": 15, + "x": 298, + "y": 233, + "page": 0 + }, + { + "id": 101, + "index": 72, + "char": "e", + "width": 27, + "height": 32, + "xoffset": 0, + "yoffset": 27, + "xadvance": 26, + "chnl": 15, + "x": 295, + "y": 266, + "page": 0 + }, + { + "id": 110, + "index": 81, + "char": "n", + "width": 27, + "height": 32, + "xoffset": 1, + "yoffset": 27, + "xadvance": 29, + "chnl": 15, + "x": 0, + "y": 302, + "page": 0 + }, + { + "id": 111, + "index": 82, + "char": "o", + "width": 29, + "height": 32, + "xoffset": 0, + "yoffset": 27, + "xadvance": 28, + "chnl": 15, + "x": 28, + "y": 302, + "page": 0 + }, + { + "id": 114, + "index": 85, + "char": "r", + "width": 20, + "height": 32, + "xoffset": 1, + "yoffset": 27, + "xadvance": 19, + "chnl": 15, + "x": 58, + "y": 302, + "page": 0 + }, + { + "id": 115, + "index": 86, + "char": "s", + "width": 24, + "height": 32, + "xoffset": -1, + "yoffset": 27, + "xadvance": 22, + "chnl": 15, + "x": 79, + "y": 300, + "page": 0 + }, + { + "id": 117, + "index": 88, + "char": "u", + "width": 27, + "height": 32, + "xoffset": 1, + "yoffset": 28, + "xadvance": 29, + "chnl": 15, + "x": 104, + "y": 300, + "page": 0 + }, + { + "id": 118, + "index": 89, + "char": "v", + "width": 29, + "height": 31, + "xoffset": -3, + "yoffset": 28, + "xadvance": 23, + "chnl": 15, + "x": 132, + "y": 299, + "page": 0 + }, + { + "id": 120, + "index": 91, + "char": "x", + "width": 29, + "height": 31, + "xoffset": -2, + "yoffset": 28, + "xadvance": 25, + "chnl": 15, + "x": 162, + "y": 299, + "page": 0 + }, + { + "id": 122, + "index": 93, + "char": "z", + "width": 24, + "height": 31, + "xoffset": -1, + "yoffset": 28, + "xadvance": 22, + "chnl": 15, + "x": 192, + "y": 299, + "page": 0 + }, + { + "id": 43, + "index": 14, + "char": "+", + "width": 28, + "height": 29, + "xoffset": -1, + "yoffset": 25, + "xadvance": 27, + "chnl": 15, + "x": 217, + "y": 299, + "page": 0 + }, + { + "id": 60, + "index": 31, + "char": "<", + "width": 28, + "height": 29, + "xoffset": -1, + "yoffset": 25, + "xadvance": 27, + "chnl": 15, + "x": 246, + "y": 299, + "page": 0 + }, + { + "id": 62, + "index": 33, + "char": ">", + "width": 28, + "height": 29, + "xoffset": -1, + "yoffset": 25, + "xadvance": 27, + "chnl": 15, + "x": 275, + "y": 299, + "page": 0 + }, + { + "id": 94, + "index": 65, + "char": "^", + "width": 29, + "height": 27, + "xoffset": -1, + "yoffset": 19, + "xadvance": 27, + "chnl": 15, + "x": 304, + "y": 299, + "page": 0 + }, + { + "id": 42, + "index": 13, + "char": "*", + "width": 28, + "height": 27, + "xoffset": -1, + "yoffset": 17, + "xadvance": 26, + "chnl": 15, + "x": 335, + "y": 0, + "page": 0 + }, + { + "id": 61, + "index": 32, + "char": "=", + "width": 28, + "height": 18, + "xoffset": 0, + "yoffset": 30, + "xadvance": 27, + "chnl": 15, + "x": 335, + "y": 28, + "page": 0 + }, + { + "id": 126, + "index": 97, + "char": "~", + "width": 28, + "height": 12, + "xoffset": -1, + "yoffset": 33, + "xadvance": 27, + "chnl": 15, + "x": 335, + "y": 47, + "page": 0 + }, + { + "id": 95, + "index": 66, + "char": "_", + "width": 27, + "height": 9, + "xoffset": -3, + "yoffset": 57, + "xadvance": 21, + "chnl": 15, + "x": 227, + "y": 288, + "page": 0 + }, + { + "id": 34, + "index": 5, + "char": "\"", + "width": 19, + "height": 18, + "xoffset": 0, + "yoffset": 19, + "xadvance": 19, + "chnl": 15, + "x": 328, + "y": 60, + "page": 0 + }, + { + "id": 39, + "index": 10, + "char": "'", + "width": 10, + "height": 18, + "xoffset": 0, + "yoffset": 19, + "xadvance": 10, + "chnl": 15, + "x": 85, + "y": 186, + "page": 0 + }, + { + "id": 44, + "index": 15, + "char": ",", + "width": 13, + "height": 18, + "xoffset": -1, + "yoffset": 48, + "xadvance": 12, + "chnl": 15, + "x": 348, + "y": 60, + "page": 0 + }, + { + "id": 45, + "index": 16, + "char": "-", + "width": 17, + "height": 9, + "xoffset": -1, + "yoffset": 39, + "xadvance": 15, + "chnl": 15, + "x": 255, + "y": 288, + "page": 0 + }, + { + "id": 96, + "index": 67, + "char": "`", + "width": 15, + "height": 14, + "xoffset": -1, + "yoffset": 17, + "xadvance": 13, + "chnl": 15, + "x": 192, + "y": 129, + "page": 0 + }, + { + "id": 46, + "index": 17, + "char": ".", + "width": 11, + "height": 12, + "xoffset": 0, + "yoffset": 48, + "xadvance": 12, + "chnl": 15, + "x": 85, + "y": 205, + "page": 0 + }, + { + "id": 32, + "index": 3, + "char": " ", + "width": 0, + "height": 0, + "xoffset": -3, + "yoffset": 53, + "xadvance": 12, + "chnl": 15, + "x": 10, + "y": 53, + "page": 0 + } + ], + "info": { + "face": "OpenSans-Regular", + "size": 47, + "bold": 0, + "italic": 0, + "charset": [ + " ", + "!", + "\\", + "\"", + "#", + "$", + "%", + "&", + "'", + "(", + ")", + "*", + "+", + ",", + "-", + ".", + "/", + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + ":", + ";", + "<", + "=", + ">", + "?", + "@", + "A", + "B", + "C", + "D", + "E", + "F", + "G", + "H", + "I", + "J", + "K", + "L", + "M", + "N", + "O", + "P", + "Q", + "R", + "S", + "T", + "U", + "V", + "W", + "X", + "Y", + "Z", + "[", + "]", + "^", + "_", + "`", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "{", + "|", + "}", + "~", + "Æ", + "æ", + "Ø", + "ø", + "Å", + "å" + ], + "unicode": 1, + "stretchH": 100, + "smooth": 1, + "aa": 1, + "padding": [ + 3, + 3, + 3, + 3 + ], + "spacing": [ + 0, + 0 + ], + "outline": 0 + }, + "common": { + "lineHeight": 64, + "base": 53, + "scaleW": 363, + "scaleH": 334, + "pages": 1, + "packed": 0, + "alphaChnl": 0, + "redChnl": 0, + "greenChnl": 0, + "blueChnl": 0 + }, + "distanceField": { + "fieldType": "msdf", + "distanceRange": 6 + }, + "kernings": [] +} \ No newline at end of file diff --git a/public/glyphs/OpenSans-Regular.png b/public/glyphs/OpenSans-Regular.png new file mode 100644 index 0000000000000000000000000000000000000000..8309cece4342bfdd9c15302b0b734310bd0c7d04 GIT binary patch literal 133531 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 literal 0 HcmV?d00001 diff --git a/public/glyphs/chars.txt b/public/glyphs/chars.txt new file mode 100644 index 0000000..a42efd0 --- /dev/null +++ b/public/glyphs/chars.txt @@ -0,0 +1 @@ + !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÆæØøÅå \ No newline at end of file diff --git a/scripts/generate-data.js b/scripts/generate-data.js index a7973fb..11ff62e 100644 --- a/scripts/generate-data.js +++ b/scripts/generate-data.js @@ -31,7 +31,7 @@ * * !!!IMPORTANT: surface irapbin files must be put in the /public/data/surfaces folder, named by surface id! * - * node scripts/generate-data --input import/_troll && node scripts/generate-story-args + * node scripts/generate-data --input import/_volve && node scripts/generate-story-args */ import minimist from 'minimist' diff --git a/scripts/generate-story-args.js b/scripts/generate-story-args.js index d0d7f2c..3157c3d 100644 --- a/scripts/generate-story-args.js +++ b/scripts/generate-story-args.js @@ -19,6 +19,10 @@ export function createStoryArgs() { fs.readFileSync('public/data/surface-meta.json') ) + const stratColumns = JSON.parse( + fs.readFileSync('public/data/strat-columns.json') + ) + const wellboreOptions = Object.values(wellboreHeadersData) .filter(d => d.drilled) .sort((a, b) => a.name.localeCompare(b.name)) @@ -38,13 +42,26 @@ export function createStoryArgs() { [surface.id]: surface.name }), {}) + const stratUnitTypes = new Set() + const stratUnits = new Set() + + Object.values(stratColumns).forEach(stratColumn => { + stratColumn.units.forEach(unit => { + stratUnitTypes.add(unit.unitType) + stratUnits.add(unit.name) + }) + }) + const output = { utmZone: config.utmZone || '31N', origin: config.origin, defaultWellbore: config.wellbore, defaultWell: config.well, + defaultStratColumn: config.stratColumn, wellboreOptions, surfaceOptions, + stratUnitOptions: Array.from(stratUnits), + stratUnitTypeOptions: Array.from(stratUnitTypes), } fs.writeFile('src/storybook/story-args.json', JSON.stringify(output), (err) => { diff --git a/scripts/transformations/transformPicks.js b/scripts/transformations/transformPicks.js index 92b483b..9bdfd64 100644 --- a/scripts/transformations/transformPicks.js +++ b/scripts/transformations/transformPicks.js @@ -1,25 +1,24 @@ -import { verify } from '../utils.js' -function mapPicksData(picksData, stratColumn) { +function mapPicksData(picksData) { const grouped = picksData.reduce((map, p) => { let picks = map[p.wellbore_uuid] if (!picks) { picks = [] map[p.wellbore_uuid] = picks } - - const unit = stratColumn.units.find( - (u) => u.top === p.pick_identifier || u.base === p.pick_identifier - ) - if (unit) { - picks.push({ - name: p.pick_identifier, - color: unit.color, - level: unit.level, - mdMsl: p.md_msl, - tvdMsl: p.tvd_msl, - }) - } + + picks.push({ + id: p.uuid, + wellboreId: p.wellbore_uuid, + pickIdentifier: p.pick_identifier, + mdMsl: p.md_msl, + tvdMsl: p.tvd_msl, + properties: { + confidence: p.confidence, + qualifier: p.qualifier, + } + }) + return map }, {}) @@ -33,13 +32,5 @@ export function transformPicks(input, output) { if (!picksData) return - verify(input, 'config') - verify(output, 'strat-columns') - - const config = input['config'] - const stratColumn = output['strat-columns'][config.stratColumn] - - if (stratColumn) { - output['picks'] = mapPicksData(picksData, stratColumn) - } + output['picks'] = mapPicksData(picksData) } diff --git a/scripts/transformations/transformStratColumns.js b/scripts/transformations/transformStratColumns.js index 61d6a7d..563d87a 100644 --- a/scripts/transformations/transformStratColumns.js +++ b/scripts/transformations/transformStratColumns.js @@ -16,6 +16,7 @@ function mapStratColumnsData(stratColumnData) { stratCol.units.push({ id: s.uuid, name: s.identifier, + unitType: s.strat_unit_type || 'unknown', top: s.top, topAge: s.top_age, base: s.base, diff --git a/src/components/Distance/Distance.stories.tsx b/src/components/Distance/Distance.stories.tsx index aa9b419..029ddde 100644 --- a/src/components/Distance/Distance.stories.tsx +++ b/src/components/Distance/Distance.stories.tsx @@ -36,6 +36,7 @@ export default meta type Story = StoryObj const wellboreId = storyArgs.defaultWellbore +const stratColumnId = storyArgs.defaultStratColumn export const Default: Story = { args: { @@ -53,7 +54,7 @@ export const Default: Story = { - + diff --git a/src/components/Glyphs/GlyphGenTest.tsx b/src/components/Glyphs/GlyphGenTest.tsx new file mode 100644 index 0000000..210c4de --- /dev/null +++ b/src/components/Glyphs/GlyphGenTest.tsx @@ -0,0 +1,3 @@ +export const GlyphGenTest = () => { + return null +} \ No newline at end of file diff --git a/src/components/Html/DepthSelector.tsx b/src/components/Html/DepthSelector.tsx index 9c5fa8e..71cf43d 100644 --- a/src/components/Html/DepthSelector.tsx +++ b/src/components/Html/DepthSelector.tsx @@ -1,10 +1,10 @@ import { ChangeEvent, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react' import { DataContext } from '../../contexts/DataContext' +import { CameraFocusAtPointEvent, CameraSetPositionEvent } from '../../events/camera-events' +import { WellboreSelectedEvent, wellboreSelectedEventType } from '../../events/wellbore-events' import { PositionLog } from '../../sdk/data/types/PositionLog' -import { Vec3 } from '../../sdk/types/common' import { WellboreManager } from '../../sdk/managers/WellboreManager' -import { WellboreSelectedEvent, wellboreSelectedEventType } from '../../events/wellbore-events' -import { CameraFocusAtPointEvent, CameraSetPositionEvent } from '../../events/camera-events' +import { Vec3 } from '../../sdk/types/common' import { getTrajectory, Trajectory } from '../../sdk/utils/trajectory' export const DepthSelector = () => { diff --git a/src/components/Html/WellMap/WellMap.stories.tsx b/src/components/Html/WellMap/WellMap.stories.tsx index 030c6ce..ec2d1c7 100644 --- a/src/components/Html/WellMap/WellMap.stories.tsx +++ b/src/components/Html/WellMap/WellMap.stories.tsx @@ -1,6 +1,6 @@ import type { Decorator, Meta, StoryObj } from '@storybook/react' import { scaleOrdinal } from 'd3-scale' -import { ComponentProps, CSSProperties, useMemo, useState } from 'react' +import { ComponentProps, CSSProperties, useState } from 'react' import { DataProviderDecorator } from '../../../storybook/decorators/data-provider-decorator' import storyArgs from '../../../storybook/story-args.json' import { WellMapCasingShoes } from './addons/WellMapCasingShoes' @@ -89,15 +89,12 @@ export const WithCasingAndCompletionIntervals: Story = { } } -export const WithAllAddons: Story = { +export const WithFormationsAndTvdDepths: Story = { decorators: [darkThemeDecorator], render: (args: ComponentProps) => { - const formations = useMemo(() => ['NORDLAND GP.', 'HORDALAND GP.', 'ROGALAND GP.', 'SHETLAND GP.', 'CROMER KNOLL GP.', 'VIKING GP.'], []) return ( colorScale(w.id)}> - - - + ) @@ -135,7 +132,10 @@ export const LightThemed: Story = { decorators: [lightThemeDecorator], render: (args: ComponentProps) => { return ( - colorScale(w.id)} /> + colorScale(w.id)}> + + + ) } } diff --git a/src/components/Html/WellMap/addons/WellMapFormations.tsx b/src/components/Html/WellMap/addons/WellMapFormations.tsx index 2861280..fce699d 100644 --- a/src/components/Html/WellMap/addons/WellMapFormations.tsx +++ b/src/components/Html/WellMap/addons/WellMapFormations.tsx @@ -1,8 +1,8 @@ -import { useEffect, useMemo, useState } from 'react' -import { useData } from '../../../../hooks/useData' import { scaleLinear } from 'd3-scale' import { nanoid } from 'nanoid' -import { Pick } from '../../../../sdk/data/types/Pick' +import { useEffect, useMemo, useState } from 'react' +import { useData } from '../../../../hooks/useData' +import { createFormationIntervals, FormationColumnInterval, getUnitPicks, mergeFormationIntervals } from '../../../../sdk/data/helpers/picks-helpers' import { useWellMapState } from '../well-map-context' type Interval = { @@ -20,7 +20,7 @@ type Interval = { * @expand */ export type WellMapFormationsProps = { - formations: string[] + stratColumnId: string } /** @@ -29,15 +29,14 @@ export type WellMapFormationsProps = { * * @see {@link WellMap} */ -export const WellMapFormations = ({ formations }: WellMapFormationsProps) => { +export const WellMapFormations = ({ stratColumnId }: WellMapFormationsProps) => { const store = useData() - const [picksData, setPicksData] = useState | null>(null) + const [picksData, setPicksData] = useState | null>(null) const wellMapState = useWellMapState() const wellboreIds = wellMapState(state => state.wellboreIds) - const wellboresById = wellMapState(state => state.wellboresById) const domain = wellMapState(state => state.domain) const range = wellMapState(state => state.measures.range) const ratio = wellMapState(state => state.measures.ratio) @@ -49,19 +48,26 @@ export const WellMapFormations = ({ formations }: WellMapFormationsProps) => { useEffect(() => { if (store) { - const pickDataPromises = wellboreIds.map(id => store.get('picks', id)) + const pickDataPromises = wellboreIds.map(id => getUnitPicks(id, stratColumnId, store, true)) Promise.all(pickDataPromises).then(response => { if (response) { - const data = response.reduce((acc, d, i) => ({ - ...acc, - [wellboreIds[i]]: d !== null ? d.sort((a, b) => a.mdMsl - b.mdMsl) : [], - }), {}) + const data = response.reduce((acc, d, i) => { + let intervals: FormationColumnInterval[] = [] + if (d?.matched) { + const formations = createFormationIntervals(d.matched, d.wellbore.depthMdMsl) + intervals = mergeFormationIntervals(formations) + } + return { + ...acc, + [wellboreIds[i]]: intervals, + } + }, {}) setPicksData(data) } }) } - }, [wellboreIds, store]) + }, [wellboreIds, stratColumnId, store]) const intervals = useMemo(() => { const output: Interval[] = [] @@ -69,42 +75,26 @@ export const WellMapFormations = ({ formations }: WellMapFormationsProps) => { if (picksData) { wellboreIds.forEach((id) => { if (picksData[id]) { - const wellbore = wellboresById[id] - - const fromMsl = wellbore.kickoffDepthMsl !== null ? wellbore.kickoffDepthMsl : wellbore.depthReferenceElevation const slot = slotsById[id] const position = getSlotPosition(slot) - formations.forEach(formation => { - //console.log(picksData[id].filter(d => d.name.endsWith('Top') && d.level === 1).map(d => d.name.replace(' Top', ''))) - const tops = picksData[id].filter(d => d.mdMsl <= wellbore.depthMdMsl && d.name === `${formation} Top`) - tops.forEach(top => { - let base = picksData[id].find(d => d.mdMsl > top.mdMsl && d.name === `${formation} Base`) - if (!base) { - base = picksData[id].find(d => d.level <= top.level && d.mdMsl > top.mdMsl) - } - const baseDepth = Math.min(wellbore.depthMdMsl, base ? base.mdMsl : wellbore.depthMdMsl) - if (baseDepth > fromMsl) { - const topDepth = Math.max(fromMsl, top.mdMsl) - const interval: Interval = { - id: nanoid(), - formation, - color: top.color, - level: top.level, - x: position, - y1: depthScale(topDepth), - y2: depthScale(baseDepth), - } - - output.push(interval) - } - }) + picksData[id].forEach(fi => { + const interval: Interval = { + id: nanoid(), + formation: fi.unit.name, + color: fi.unit.color, + level: fi.unit.level, + x: position, + y1: depthScale(fi.mdMslTop), + y2: depthScale(fi.mdMslBottom), + } + + output.push(interval) }) } }) } - output.sort((a, b) => a.x - b.x || a.y1 - b.y1 || a.level - b.level) return output - }, [picksData, formations, depthScale, getSlotPosition, slotsById, wellboreIds, wellboresById]) + }, [picksData, depthScale, getSlotPosition, slotsById, wellboreIds]) const filterColor = useMemo(() => { const v = styles.darkMode ? 0 : 240 @@ -115,7 +105,7 @@ export const WellMapFormations = ({ formations }: WellMapFormationsProps) => { return {intervals.map(interval => { - const width = (ratio * (35 - interval.level * 4)) + const width = (ratio * 30) return ( { stroke={interval.color} strokeWidth={0.5} strokeOpacity={0.75} - style={{ filter: `drop-shadow( 1px 1px 2px ${filterColor})`}} + style={{ filter: `drop-shadow( 1px 1px 2px ${filterColor})` }} /> { stroke={interval.color} strokeWidth={1.5} strokeOpacity={1} - style={{ filter: `drop-shadow( 1px 1px 2px ${filterColor})`}} + style={{ filter: `drop-shadow( 1px 1px 2px ${filterColor})` }} /> ) diff --git a/src/components/SDFTest/SDFTest.stories.tsx b/src/components/SDFTest/SDFTest.stories.tsx new file mode 100644 index 0000000..9233a8a --- /dev/null +++ b/src/components/SDFTest/SDFTest.stories.tsx @@ -0,0 +1,95 @@ +import type { Meta, StoryObj } from '@storybook/react' +import { Canvas3dDecorator } from '../../storybook/decorators/canvas-3d-decorator' +import { PerformanceDecorator } from '../../storybook/decorators/performance-decorator' +import { SDFTest } from './SDFTest' + +const meta = { + title: 'Components/Misc/SDFTest', + component: SDFTest, + decorators: [ + PerformanceDecorator, + Canvas3dDecorator, + ], + parameters: { + autoClear: true, + scale: 1000, + cameraPosition: [0, 0, 2000], + cameraTarget: [0, 0, 0], + //pixelRatio: 1 + }, + tags: ['autodocs'] +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = { + args: { + text: 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz\n0123456789\nHello glyphs!', + inBias: 0, + outBias: 0, + fontSize: 32, + rotation: 0, + spacing: 0, + verticalAlign: 0, + horizontalAlign: 0 + }, + argTypes: { + inBias: { + control: { + type: 'range', + min: -0.5, + max: 0.5, + step: 0.01, + } + }, + outBias: { + control: { + type: 'range', + min: -0.5, + max: 0.5, + step: 0.01, + } + }, + fontSize: { + control: { + type: 'range', + min: 1, + max: 200, + step: 1, + }, + }, + rotation: { + control: { + type: 'range', + min: -3.14, + max: 3.14, + step: 0.01, + }, + }, + spacing: { + control: { + type: 'range', + min: 0, + max: 100, + step: 1, + } + }, + verticalAlign: { + control: { + type: 'range', + min: -1, + max: 1, + step: 0.01, + } + }, + horizontalAlign: { + control: { + type: 'range', + min: 0, + max: 1, + step: 0.5, + } + }, + } +} diff --git a/src/components/SDFTest/SDFTest.tsx b/src/components/SDFTest/SDFTest.tsx new file mode 100644 index 0000000..279a665 --- /dev/null +++ b/src/components/SDFTest/SDFTest.tsx @@ -0,0 +1,121 @@ +import { useTexture } from '@react-three/drei' +import { extend, useFrame } from '@react-three/fiber' +import { MeshLineGeometry, MeshLineMaterial } from 'meshline' +import { useEffect, useMemo, useState } from 'react' +import { DataTexture, DoubleSide, LinearFilter, Texture, Uniform, Vector2 } from 'three' +import { createConfig, GlyphConfig, MsdfFontJson } from '../../sdk/utils/glyphs' +import { get } from '../../storybook/dependencies/api' +import fragmentShader from './shaders/fragment.glsl' +import vertexShader from './shaders/vertex.glsl' + +extend({ MeshLineGeometry, MeshLineMaterial }) + +const WIDTH = 800 +const HEIGHT = 600 + +type Props = { + text: string + inBias?: number + outBias?: number + fontSize?: number + rotation?: number + spacing?: number + verticalAlign?: number + horizontalAlign?: number +} + +const fileName = 'OpenSans-Regular' + +export const SDFTest = ({ text, inBias = 0, outBias = 0, fontSize = 32, rotation = 0, spacing = 0, verticalAlign = 0.0, horizontalAlign = 0.0 }: Props) => { + + const glyphAtlas = useTexture(`glyphs/${fileName}.png`, (tex: Texture) => { + tex.generateMipmaps = false + tex.magFilter = LinearFilter + tex.minFilter = LinearFilter + tex.flipY = true + }) + + const [glyphConfig, setGlyphConfig] = useState() + + useEffect(() => { + get(`glyphs/${fileName}.json`).then((json: MsdfFontJson) => { + setGlyphConfig(createConfig(json)) + }).catch(() => setGlyphConfig(null)) + }, []) + + const uniforms = useMemo(() => { + return { + time: new Uniform(0), + size: new Uniform(new Vector2(WIDTH, HEIGHT)), + textPointersOffset: new Uniform(0), + textPointersCount: new Uniform(0), + glyphAtlas: new Uniform(null), + textTexture: new Uniform(null), + in_bias: new Uniform(0), + out_bias: new Uniform(0), + fontSize: new Uniform(32), + rotation: new Uniform(0), + spacing: new Uniform(0), + verticalAlign: new Uniform(0.0), + horizontalAlign: new Uniform(0.0), + digits: new Uniform([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) + } + }, []) + + useEffect(() => { + if (glyphConfig) { + if (uniforms.textTexture.value) { + uniforms.textTexture.value.dispose() + } + const { texture, textPointersOffset, textPointersCount } = glyphConfig.encodeTextTexture(text.split('\n')) + uniforms.textTexture.value = texture + uniforms.textPointersOffset.value = textPointersOffset + uniforms.textPointersCount.value = textPointersCount + uniforms.digits.value = [...glyphConfig.encodeText('0123456789.-').indices] + } + + return () => { + if (glyphConfig) { + glyphConfig.dispose() + } + } + }, [uniforms, glyphConfig, text]) + + useEffect(() => { + uniforms.glyphAtlas.value = glyphAtlas + uniforms.in_bias.value = inBias + uniforms.out_bias.value = outBias + uniforms.fontSize.value = fontSize + uniforms.rotation.value = rotation + uniforms.spacing.value = spacing + uniforms.verticalAlign.value = verticalAlign + uniforms.horizontalAlign.value = horizontalAlign + }, [uniforms, glyphAtlas, glyphConfig, inBias, outBias, fontSize, rotation, spacing, verticalAlign, horizontalAlign]) + + useFrame(({ clock }) => { + uniforms.time.value = clock.elapsedTime + }) + + if (!glyphConfig) return null + + return ( + + + + {/* + {/* */} + + + + + ) +} \ No newline at end of file diff --git a/src/components/SDFTest/shaders/fragment.glsl b/src/components/SDFTest/shaders/fragment.glsl new file mode 100644 index 0000000..d09f7a4 --- /dev/null +++ b/src/components/SDFTest/shaders/fragment.glsl @@ -0,0 +1,166 @@ +#include +#include + + +uniform float time; + +uniform float fontSize; +uniform float rotation; +uniform float spacing; +uniform float verticalAlign; +uniform float horizontalAlign; + +#include ../../../sdk/materials/shaderLib/glyphs.glsl +#include ../../../sdk/materials/shaderLib/render-text.glsl +#include ../../../sdk/materials/shaderLib/render-number.glsl +#include ../../../sdk/materials/shaderLib/rotation.glsl + +// SDF functions +float sdfLine(vec2 p, vec2 a, vec2 b) { + vec2 pa = p - a; + vec2 ba = b - a; + float h = clamp(dot(pa, ba) / dot(ba, ba), 0.0, 1.0); + + return length(pa - ba * h); +} + +float sdfBox(vec2 p, vec2 b) { + vec2 d = abs(p) - b; + return length(max(d, 0.0)) + min(max(d.x, d.y), 0.0); +} + +float sdfCircle(vec2 p, float r) { + return length(p) - r; +} + +// Debug +void textGuides(out vec3 outColor, vec2 position) { + float helper; + + // helper = sdfBox(position - vec2(0.0, 8.5), vec2(1000.0, glyphFontSize / 2.0)); + // outColor = mix(outColor, vec3(1.0, 1.0, 0.0), step(helper, 0.0)); + + helper = sdfLine(position + vec2(0.0, glyphLineHeight / 2.0), vec2(0.0), vec2(size.x, 0.0)); + outColor = mix(outColor, vec3(1.0, 0.0, 0.0), smoothstep(1.0, -1.0, helper)); + + helper = sdfLine(position - vec2(0.0, glyphLineHeight / 2.0), vec2(0.0), vec2(size.x, 0.0)); + outColor = mix(outColor, vec3(1.0, 0.0, 0.0), smoothstep(1.0, -1.0, helper)); + + helper = sdfLine(position + vec2(0.0, glyphLineHeight / 2.0 - glyphBaseLine), vec2(0.0), vec2(size.x, 0.0)); + outColor = mix(outColor, vec3(0.0, 0.0, 1.0), smoothstep(1.0, -1.0, helper)); + + helper = sdfLine(position, vec2(0.0), vec2(size.x, 0.0)); + outColor = mix(outColor, vec3(0.0, 1.0, 0.0), smoothstep(1.0, -1.0, helper)); + + + +} + +// Examples +void example1(out vec3 color, vec2 pixelCoords) { + // the scale we need for a specific font size + float scale = glyphFontSize / fontSize; + + // set up rotation + mat2 rotationMatrix = rotation2d(rotation); + + // spacing we want between text segments + float lineSpacing = (glyphLineHeight + 10.0); + + // where we want to position the text + vec2 textPosition = vec2(size.x / 2.0, glyphLineHeight); + + // transform the coordinates + pixelCoords = (pixelCoords - textPosition) * scale * rotationMatrix; + + // calculate an index for the y positions we want so we know which + // text pointer to reference + uint i = uint(round(pixelCoords.y / lineSpacing)); + i = clamp(i, 0u, textPointersCount - 1u); + + // get text pointer from textTexture at index i + uvec3 textPointer = readTextPointerFromTexture(i); + + // advance to line according to the calculated line index (i) + pixelCoords.y -= float(i) * lineSpacing; + + // debug + // textGuides(color, pixelCoords); + + // render text + renderText(color, pixelCoords, textPointer, verticalAlign, horizontalAlign, vec3(0.09, 0.74, 0.51), spacing, scale); +} + +void example2(out vec3 color, vec2 pixelCoords) { + uint i = 0u; + + uvec3 textPointer = readTextPointerFromTexture(i); + + // scale text to a specific with + float width = size.x / 2.0; + float scale = float(textPointer.z) / width; + + // set up rotation + mat2 rotationMatrix = rotation2d(rotation); + + // where we want to position the text + vec2 textPosition = vec2(size.x / 2.0, size.y / 2.0); + + // transform the coordinates + pixelCoords = (pixelCoords - textPosition) * scale * rotationMatrix; + + // debug + // textGuides(color, pixelCoords); + + vec3 textColor = vec3(0.74, 0.09, 0.58); + + // render text + renderText(color, pixelCoords, textPointer, verticalAlign, horizontalAlign, textColor, spacing, scale); +} + +void exmaple3(out vec3 color, vec2 pixelCoords) { + float scale = glyphFontSize / fontSize; + + float number = time;//-495.549221; + vec3 textColor = vec3(0.0, 0.5, 0.0); + + // set up rotation + mat2 rotationMatrix = rotation2d(rotation); + + pixelCoords = pixelCoords * scale * rotationMatrix; + + renderNumber(color, pixelCoords, number, 3u, verticalAlign, horizontalAlign, textColor, spacing, scale); + pixelCoords.y -= 80.0; + renderNumber(color, pixelCoords, -number * 100.0, 3u, verticalAlign, horizontalAlign, textColor, spacing, scale); +} + +void main() { + #include + + // initial color + vec3 color = vec3(1.0); + + vec2 uv = vUv.xy; + if(!gl_FrontFacing) { + uv.x = 1.0 - uv.x; + } + + // transform uv coordinates to unit coordinates according to size + // with origo at the top left + vec2 pixelCoords = vec2(uv.x, 1.0 - uv.y) * size; + + if(pixelCoords.x >= size.x / 2.0) { + color = vec3(0.9); + } + + example1(color, pixelCoords); + example2(color, pixelCoords); + + pixelCoords -= vec2(size.x / 2.0, size.y - 100.0); + exmaple3(color, pixelCoords); + + gl_FragColor = vec4(color, 1.0); + + #include + +} \ No newline at end of file diff --git a/src/components/SDFTest/shaders/vertex.glsl b/src/components/SDFTest/shaders/vertex.glsl new file mode 100644 index 0000000..1b981e5 --- /dev/null +++ b/src/components/SDFTest/shaders/vertex.glsl @@ -0,0 +1,22 @@ +#include +#include + +varying vec2 vUv; + +void main() { + + vec4 mvPosition = vec4(position, 1.0); + + #ifdef USE_INSTANCING + + mvPosition = instanceMatrix * mvPosition; + + #endif + + mvPosition = modelViewMatrix * mvPosition; + gl_Position = projectionMatrix * mvPosition; + + vUv = uv; + + #include +} \ No newline at end of file diff --git a/src/components/Surfaces/Surface.tsx b/src/components/Surfaces/Surface.tsx index de40b24..6c82209 100644 --- a/src/components/Surfaces/Surface.tsx +++ b/src/components/Surfaces/Surface.tsx @@ -223,11 +223,11 @@ export const Surface = ({ setDepthTexture(prev => { if (prev) prev.dispose() - return elevationTextures || prev + return elevationTextures }) setNormals(prev => { if (prev) prev.dispose() - return normalTexture || prev + return normalTexture }) } }), priority) @@ -243,7 +243,7 @@ export const Surface = ({ } setGeometry(prev => { if (prev) prev.dispose() - return bufferGeometry || prev + return bufferGeometry }) }), priority) diff --git a/src/components/Wellbores/CompletionTools/Screen/shaders/fragment.glsl b/src/components/Wellbores/CompletionTools/Screen/shaders/fragment.glsl index 7607ac6..fdfe5bf 100644 --- a/src/components/Wellbores/CompletionTools/Screen/shaders/fragment.glsl +++ b/src/components/Wellbores/CompletionTools/Screen/shaders/fragment.glsl @@ -36,7 +36,7 @@ varying float vCurveLength; void main() { - float strength = mod(vCurveLength + vUv.y * 2.0, 2.0); + float strength = mod(vCurveLength + vUv.x * 2.0, 2.0); strength = step(1.5, strength); vec4 diffuseColor = vec4( uColor1 * strength + uColor2 * (1.0 - strength), opacity ); diff --git a/src/components/Wellbores/Perimeter/shaders/fragment.glsl b/src/components/Wellbores/Perimeter/shaders/fragment.glsl index 5b1ccaa..c7838c3 100644 --- a/src/components/Wellbores/Perimeter/shaders/fragment.glsl +++ b/src/components/Wellbores/Perimeter/shaders/fragment.glsl @@ -22,7 +22,7 @@ void main() { float modulatedLength = mod(vLength - uFrom, uDensity); float coord1 = modulatedLength / 10.0; - float coord2 = vUv.y * 20.0; + float coord2 = vUv.x * 20.0; float line1 = abs(fract(coord1 - 0.5) - 0.5) / fwidth(coord1); float line2 = abs(fract(coord2 - 0.5) - 0.5) / fwidth(coord2); diff --git a/src/components/Wellbores/Picks/Picks.tsx b/src/components/Wellbores/Picks/Picks.tsx index 37dc8d7..341e230 100644 --- a/src/components/Wellbores/Picks/Picks.tsx +++ b/src/components/Wellbores/Picks/Picks.tsx @@ -25,6 +25,7 @@ export type PicksProps = CommonComponentProps & { radialSegments?: number baseRadius?: number priority?: number + stratColumnId: string, showAnnotations?: boolean } @@ -33,7 +34,7 @@ export type PicksProps = CommonComponentProps & { * * @example * - * + * * * * @see {@link Wellbore} @@ -42,6 +43,10 @@ export type PicksProps = CommonComponentProps & { * @group Components */ export const Picks = forwardRef(({ + radialSegments = 8, + baseRadius = 10, + stratColumnId, + showAnnotations = true, name, userData, position, @@ -50,10 +55,7 @@ export const Picks = forwardRef(({ layers = createLayers(LAYERS.NOT_EMITTER), castShadow, receiveShadow, - radialSegments = 8, - baseRadius = 10, priority = 0, - showAnnotations = true }: PicksProps, fref: ForwardedRef) => { const ref = useRef(null) @@ -85,13 +87,14 @@ export const Picks = forwardRef(({ if (generator && id) { queue(() => generator( id, + stratColumnId, fromMsl, baseRadius, ).then(response => { setData(response) }), priority) } - }, [generator, id, fromMsl, baseRadius, priority]) + }, [generator, id, fromMsl, baseRadius, stratColumnId, priority]) diff --git a/src/components/Wellbores/TubeTrajectory/TubeTrajectory.tsx b/src/components/Wellbores/TubeTrajectory/TubeTrajectory.tsx index 6450609..a50559e 100644 --- a/src/components/Wellbores/TubeTrajectory/TubeTrajectory.tsx +++ b/src/components/Wellbores/TubeTrajectory/TubeTrajectory.tsx @@ -88,7 +88,7 @@ export const TubeTrajectory = ({ } setGeometry(prev => { if (prev) prev.dispose() - return bufferGeometry || prev + return bufferGeometry }) }), priority) diff --git a/src/components/Wellbores/WellboreFormationColumn/WellboreFormationColumn.stories.tsx b/src/components/Wellbores/WellboreFormationColumn/WellboreFormationColumn.stories.tsx new file mode 100644 index 0000000..13bf20b --- /dev/null +++ b/src/components/Wellbores/WellboreFormationColumn/WellboreFormationColumn.stories.tsx @@ -0,0 +1,155 @@ +import type { Meta, StoryObj } from '@storybook/react' +import { useEffect } from 'react' +import { GlyphsProvider } from '../../../contexts/GlyphsContextProvider' +import { WellboreFormationColumn, WellboreSelectedEvent } from '../../../main' +import { Canvas3dDecorator } from '../../../storybook/decorators/canvas-3d-decorator' +import { DataProviderDecorator } from '../../../storybook/decorators/data-provider-decorator' +import { DepthSelectorDecorator } from '../../../storybook/decorators/depth-selector-decorator' +import { GeneratorsProviderDecorator } from '../../../storybook/decorators/generators-provider-decorator' +import { PerformanceDecorator } from '../../../storybook/decorators/performance-decorator' +import storyArgs from '../../../storybook/story-args.json' +import { CameraTargetMarker } from '../../CameraTargetMarker/CameraTargetMarker' +import { BasicTrajectory } from '../BasicTrajectory' +import { Casings } from '../Casings' +import { CompletionTools } from '../CompletionTools' +import { Wellbore } from '../Wellbore/Wellbore' +import { FormationsStripe } from '../WellboreRibbon/stripes/FormationsStripe' +import { MeasuredDepthStripe } from '../WellboreRibbon/stripes/MeasuredDepthStripe' +import { WellboreRibbon } from '../WellboreRibbon/WellboreRibbon' + + +type DemoProps = { + showRibbon: boolean + merged: boolean + scaleFactor: number + stepSize: number +} + +const DemoComponent = ({ showRibbon, merged, scaleFactor, stepSize }: DemoProps) => { + useEffect(() => { + dispatchEvent(new WellboreSelectedEvent({ id: wellboreId })) + }, []) + + return ( + <> + + + + {showRibbon && ( + + + {!merged && ( + <> + + + + + )} + {merged && ( + <> + + + )} + + )} + + + + + + + { (!showRibbon) && } + + + + + + + ) +} + +const meta = { + title: 'Components/Wellbores/WellboreFormationColumn', + component: DemoComponent, +} satisfies Meta + +type StoryArgs = React.ComponentProps + +export default meta +type Story = StoryObj + +const wellboreId = storyArgs.defaultWellbore +const stratColumnId = storyArgs.defaultStratColumn + + +export const Default: Story = { + args: { + showRibbon: false, + merged: true, + scaleFactor: 5, + stepSize: 10, + // stratColumnId, + // startRadius: 0.5, + // formationWidth: 2, + // inverted: true, + // opacity: 1, + // unitTypes: [...storyArgs.stratUnitTypeOptions], + // units: undefined, + }, + argTypes: { + scaleFactor: { + control: { + type: 'range', + min: 1, + max: 10, + step: 1 + } + }, + stepSize: { + control: { + type: 'range', + min: 5, + max: 100, + step: 1 + } + }, + // formationWidth: { + // control: { + // type: 'range', + // min: 0, + // max: 20, + // step: 1, + // }, + // }, + // opacity: { + // control: { + // type: 'range', + // min: 0, + // max: 1, + // step: 0.1, + // }, + // }, + // unitTypes: { + // options: storyArgs.stratUnitTypeOptions, + // control: 'check', + // }, + // units: { + // options: ['', ...storyArgs.stratUnitOptions], + // control: 'select', + // mapping: { + // '': undefined + // } + // } + }, + decorators: [ + PerformanceDecorator, + Canvas3dDecorator, + GeneratorsProviderDecorator, + DepthSelectorDecorator, + DataProviderDecorator, + ], + parameters: { + autoClear: true, + scale: 100 + } +} diff --git a/src/components/Wellbores/WellboreFormationColumn/WellboreFormationColumn.tsx b/src/components/Wellbores/WellboreFormationColumn/WellboreFormationColumn.tsx new file mode 100644 index 0000000..b26f9eb --- /dev/null +++ b/src/components/Wellbores/WellboreFormationColumn/WellboreFormationColumn.tsx @@ -0,0 +1,145 @@ +import { useEffect, useMemo, useState } from 'react' +import { BackSide, BufferGeometry, FrontSide, ShaderLib, Uniform, UniformsUtils } from 'three' +import { CommonComponentProps, createLayers, LAYERS, useGenerator, useWellboreContext } from '../../../main' +import { queue, unpackBufferGeometry } from '../../../sdk' +import fragmentShader from './shaders/fragment.glsl' +import vertexShader from './shaders/vertex.glsl' +import { wellboreFormationColumn, WellboreFormationColumnResponse } from './wellbore-formation-column-defs' + +/** + * WellboreFormationColumn props + * @expand + */ +export type WellboreFormationColumnProps = CommonComponentProps & { + stratColumnId: string + units?: string[] + unitTypes?: string[] + inverted?: boolean + opacity?: number + radialSegments?: number + startRadius?: number + formationWidth?: number + priority?: number +} + +/** + * Renders colored tube geometeries for visualizing formations. Using picks data and strat column + * units to generate formation intervals. + * + * @example + * + * + * + * + * @see [Storybook](/videx-3d/?path=/docs/components-wellbores-wellboreformationcolumn--docs) + * @see {@link Picks} + * @see {@link Wellbore} + * + * @group Components + */ +export const WellboreFormationColumn = ({ + name, + userData, + position, + opacity = 1, + castShadow, + receiveShadow, + renderOrder, + layers = createLayers(LAYERS.NOT_EMITTER, LAYERS.OCCLUDER), + visible, + stratColumnId, + units, + unitTypes, + inverted = true, + radialSegments = 16, + startRadius = 0.5, + formationWidth = 1, + priority = 0, +}: WellboreFormationColumnProps) => { + const { id, fromMsl, segmentsPerMeter, simplificationThreshold } = useWellboreContext() + const generator = useGenerator(wellboreFormationColumn) + + const [geometry, setGeometry] = useState(null) + + const uniforms = useMemo(() => UniformsUtils.merge([ + UniformsUtils.clone(ShaderLib['basic'].uniforms), + { + opacity: new Uniform(1), + } + ]), []) + + useEffect(() => { + uniforms.opacity.value = opacity + }, [opacity, uniforms]) + + useEffect(() => { + if (generator) { + + queue(() => generator( + id, + stratColumnId, + segmentsPerMeter, + fromMsl, + units, + unitTypes, + startRadius, + formationWidth, + !inverted, + radialSegments, + simplificationThreshold, + ).then((response: any) => { + let bufferGeometry: BufferGeometry | null = null + if (response) { + bufferGeometry = unpackBufferGeometry(response) + } + setGeometry(prev => { + if (prev) prev.dispose() + return bufferGeometry + }) + }), priority) + + } + }, [ + generator, + id, + stratColumnId, + fromMsl, + units, + unitTypes, + segmentsPerMeter, + simplificationThreshold, + startRadius, + formationWidth, + radialSegments, + priority, + inverted + ]) + + if (!geometry) return null + + return ( + + {/* */} + + + ) +} \ No newline at end of file diff --git a/src/components/Wellbores/WellboreFormationColumn/index.ts b/src/components/Wellbores/WellboreFormationColumn/index.ts new file mode 100644 index 0000000..2308590 --- /dev/null +++ b/src/components/Wellbores/WellboreFormationColumn/index.ts @@ -0,0 +1,2 @@ +export * from './wellbore-formation-column-defs' +export * from './WellboreFormationColumn' diff --git a/src/components/Wellbores/WellboreFormationColumn/shaders/fragment.glsl b/src/components/Wellbores/WellboreFormationColumn/shaders/fragment.glsl new file mode 100644 index 0000000..73e58fa --- /dev/null +++ b/src/components/Wellbores/WellboreFormationColumn/shaders/fragment.glsl @@ -0,0 +1,78 @@ +#define WELLBORE_RIBBON_MATERIAL + + +uniform vec3 diffuse; +uniform float opacity; +varying float vLength; + +#ifndef FLAT_SHADED + + varying vec3 vNormal; + +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +void main() { + #include + #include + + float aaf = fwidth(vLength); + + float seperator = smoothstep(0.0, 2.0 * aaf, vLength) + 0.5; + + vec4 diffuseColor = vec4( mix(vec3(0.0), diffuse, seperator), opacity ); + + #include + #include + #include + #include + #include + #include + + ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); + + // accumulation (baked indirect lighting only) + #ifdef USE_LIGHTMAP + + vec4 lightMapTexel = texture2D( lightMap, vLightMapUv ); + reflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI; + + #else + + reflectedLight.indirectDiffuse += vec3( 1.0 ); + + #endif + + // modulation + #include + + reflectedLight.indirectDiffuse *= diffuseColor.rgb; + + vec3 outgoingLight = reflectedLight.indirectDiffuse; + + #include + + #include + #include + #include + #include + #include + #include + +} \ No newline at end of file diff --git a/src/components/Wellbores/WellboreFormationColumn/shaders/vertex.glsl b/src/components/Wellbores/WellboreFormationColumn/shaders/vertex.glsl new file mode 100644 index 0000000..aa89168 --- /dev/null +++ b/src/components/Wellbores/WellboreFormationColumn/shaders/vertex.glsl @@ -0,0 +1,44 @@ +#define WELLBORE_RIBBON_MATERIAL + +attribute float curveRelativeLength; + +varying float vLength; + + +#include +#include +#include +#include +#include +#include +//#include +#include +#include +#include +#include + +void main() { + + #include + #include + #include + #include + #include + + //#include + //#include + //#include + + #include + #include + #include + #include + #include + #include + + #include + #include + #include + + vLength = curveRelativeLength; +} \ No newline at end of file diff --git a/src/components/Wellbores/WellboreFormationColumn/wellbore-formation-column-defs.ts b/src/components/Wellbores/WellboreFormationColumn/wellbore-formation-column-defs.ts new file mode 100644 index 0000000..42844d4 --- /dev/null +++ b/src/components/Wellbores/WellboreFormationColumn/wellbore-formation-column-defs.ts @@ -0,0 +1,5 @@ +import { PackedBufferGeometry } from '../../../sdk' + +export const wellboreFormationColumn = 'wellboreFormationColumn' + +export type WellboreFormationColumnResponse = PackedBufferGeometry \ No newline at end of file diff --git a/src/components/Wellbores/WellboreRibbon/WellboreRibbon.tsx b/src/components/Wellbores/WellboreRibbon/WellboreRibbon.tsx new file mode 100644 index 0000000..aee6fb4 --- /dev/null +++ b/src/components/Wellbores/WellboreRibbon/WellboreRibbon.tsx @@ -0,0 +1,107 @@ +import { PropsWithChildren, useEffect, useMemo, useState } from 'react' +import { BufferAttribute, InstancedBufferGeometry, InstancedInterleavedBuffer, InterleavedBufferAttribute } from 'three' +import { CameraFocusAtPointEvent, cameraFocusAtPointEventType, CameraSetPositionEvent, cameraSetPositionEventType, useData, useWellboreContext } from '../../../main' +import { calculateFrenetFrames, getCurveSegments, getTrajectory, PositionLog, Trajectory, Vec3 } from '../../../sdk' +import { WellboreRibbonContext, WellboreRibbonContextProps } from './WellboreRibbonContext' + + + +function createStripeGeometry(trajectory: Trajectory, segmentsPerMeter: number, fromMsl?: number) { + const positions = new Float32Array([ + 0, -0.5, + 1, -0.5, + 1, 0.5, + 0, 0.5, + ]) + const from = fromMsl !== undefined ? trajectory.getPositionAtDepth(fromMsl, true)! : 0 + const segments = getCurveSegments(trajectory.curve, segmentsPerMeter, from, 1) + const frenetFrames = calculateFrenetFrames(trajectory.curve, segments) + + const attributesBuffer = new Float32Array(frenetFrames.length * 7) + + for (let i = 0; i < frenetFrames.length; i++) { + const frame = frenetFrames[i] + const j = i * 7 + attributesBuffer[j] = frame.position[0] + attributesBuffer[j + 1] = frame.position[1] + attributesBuffer[j + 2] = frame.position[2] + attributesBuffer[j + 3] = frame.curvePosition + attributesBuffer[j + 4] = frame.tangent[0] + attributesBuffer[j + 5] = frame.tangent[1] + attributesBuffer[j + 6] = frame.tangent[2] + } + + const buffer = new InstancedInterleavedBuffer(attributesBuffer, 7, 1) + const geometry = new InstancedBufferGeometry() + geometry.instanceCount = frenetFrames.length - 1 + geometry.setIndex(new BufferAttribute(new Uint8Array([0, 1, 2, 0, 2, 3]), 1)) + geometry.setAttribute('position2', new BufferAttribute(positions, 2)) + geometry.setAttribute('point0', new InterleavedBufferAttribute(buffer, 4, 0)) + geometry.setAttribute('point1', new InterleavedBufferAttribute(buffer, 4, 7)) + geometry.setAttribute('tangent0', new InterleavedBufferAttribute(buffer, 3, 4)) + geometry.setAttribute('tangent1', new InterleavedBufferAttribute(buffer, 3, 11)) + + + return geometry +} + +export const WellboreRibbon = ({ children }: PropsWithChildren) => { + const store = useData() + const { id, fromMsl, segmentsPerMeter } = useWellboreContext() + const [trajectory, setTrajectory] = useState(null) + const [direction, setDirection] = useState([0, -1, 0]) + const stripeGeometry = useMemo(() => { + if (trajectory) { + return createStripeGeometry(trajectory, segmentsPerMeter, fromMsl) + } + return null + }, [trajectory, segmentsPerMeter, fromMsl]) + + const context = useMemo(() => { + if (trajectory && stripeGeometry) { + return { + trajectory, + direction, + geometry: stripeGeometry + } + } + return null + }, [trajectory, direction, stripeGeometry]) + + useEffect(() => { + function onCameraPositionSet(event: CameraSetPositionEvent) { + if (trajectory) { + const n = trajectory.curve.nearest(event.detail) + setDirection(trajectory.curve.getTangentAt(n.position)) + } + } + function onCameraFocusAtPoint(event: CameraFocusAtPointEvent) { + if (trajectory) { + const n = trajectory.curve.nearest(event.detail.point) + setDirection(trajectory.curve.getTangentAt(n.position)) + } + } + addEventListener(cameraSetPositionEventType, onCameraPositionSet) + addEventListener(cameraFocusAtPointEventType, onCameraFocusAtPoint) + return () => { + removeEventListener(cameraSetPositionEventType, onCameraPositionSet) + removeEventListener(cameraFocusAtPointEventType, onCameraFocusAtPoint) + } + }, [trajectory]) + + useEffect(() => { + if (store) { + store.get('position-logs', id).then(response => { + const trajectory = getTrajectory(id, response) + setTrajectory(trajectory) + }).catch(err => console.error(err)) + } + }, [store, id]) + //console.log(direction) + if (!trajectory) return null + return ( + + {children} + + ) +} \ No newline at end of file diff --git a/src/components/Wellbores/WellboreRibbon/WellboreRibbonContext.tsx b/src/components/Wellbores/WellboreRibbon/WellboreRibbonContext.tsx new file mode 100644 index 0000000..ade7d4a --- /dev/null +++ b/src/components/Wellbores/WellboreRibbon/WellboreRibbonContext.tsx @@ -0,0 +1,22 @@ + +import { createContext } from 'react' +import { InstancedBufferGeometry } from 'three' +import { Trajectory, Vec3 } from '../../../sdk' + + + +/** + * GlyphsContext props + * @expand + */ +export type WellboreRibbonContextProps = { + trajectory: Trajectory + geometry: InstancedBufferGeometry + direction: Vec3 +} + +/** + * Glyphs context + * @group Contexts + */ +export const WellboreRibbonContext = createContext(null) \ No newline at end of file diff --git a/src/components/Wellbores/WellboreRibbon/shaders/formations.glsl b/src/components/Wellbores/WellboreRibbon/shaders/formations.glsl new file mode 100644 index 0000000..c365a81 --- /dev/null +++ b/src/components/Wellbores/WellboreRibbon/shaders/formations.glsl @@ -0,0 +1,122 @@ +#include +#include + +#include ../../../../sdk/materials/shaderLib/glyphs.glsl +#include ../../../../sdk/materials/shaderLib/render-text.glsl +#include ../../../../sdk/materials/shaderLib/sdf-functions.glsl +#include ../../../../sdk/materials/shaderLib/rotation.glsl + +struct Unit { + uint index; + vec3 color; +}; + +uniform vec3 intervals[INTERVALS_LENGTH]; +uniform Unit units[UNITS_LENGTH]; +uniform float startDepth; + +const vec3 BLACK = vec3(0.0); +const vec3 WHITE = vec3(1.0); +const vec3 GRAY = vec3(0.5); +const vec3 LIGHTGRAY = vec3(0.75); +const float padding = 0.9; + +float lines(float v, float lineWidth) { + float uvDeriv = fwidth(v * 2.0); + + float drawWidth = clamp(lineWidth, uvDeriv, 0.5); + float lineAA = uvDeriv * 1.5; + float fraction = 1.0 - abs(fract(v) * 2.0 - 1.0); + float line = smoothstep(drawWidth + lineAA, drawWidth - lineAA, abs(fraction * 2.0)); + + line *= saturate(lineWidth / drawWidth); + + return line; +} + +vec3 currentInterval(vec2 position) { + int index = 0; + int nIntervals = int(INTERVALS_LENGTH); + vec3 interval = intervals[index]; + + while (position.y > interval.y && index < nIntervals - 1) { + index++; + interval = intervals[index]; + } + return interval; +} + +void main() { + #include + vec3 color = LIGHTGRAY; + float colorMultiplier = 1.0; + + vec2 uv = vUv.xy; + + if (!gl_FrontFacing) { + colorMultiplier = 0.5; + uv.x = 1.0 - uv.x; + } + + float alpha = 0.95; + vec2 pixelCoords = vec2(uv.x, 1.0 - uv.y) * size; + pixelCoords.y += startDepth; + + vec3 interval = currentInterval(pixelCoords); + + float intervalLength = interval.y - interval.x; + Unit unit = units[int(interval.z)]; + + if (pixelCoords.y < interval.x || pixelCoords.y > interval.y) { + discard; + //alpha = 0.0; + } + uvec3 textPointer = readTextPointerFromTexture(unit.index); + + float rotation = 0.0; + float span = size.x * padding; + float vscale = glyphLineHeight / (intervalLength * padding); + + if (intervalLength > size.x) { + span = intervalLength * padding; + vscale = glyphLineHeight / (size.x * padding); + rotation = (-PI / 2.0); + } + float hscale = float(textPointer.z) / span; + float scale = max(hscale, vscale); + + scale = max(scale, glyphLineHeight / (size.x * 0.5)); + + + vec2 pos = pixelCoords.xy; + pos.x -= size.x / 2.0; + pos.y -= ((interval.x + intervalLength / 2.0)); + + + float frame = sdfBox(pos, vec2(size.x / 2.0, intervalLength / 2.0)); + float frameAA = min(fwidth(pixelCoords.y), fwidth(pixelCoords.x)); + color = mix( color, BLACK, smoothstep(1.5 * frameAA,0.0,frame) ); + color = mix( color, unit.color, smoothstep(0.0,-frameAA * 1.5,frame) ); + + pos *= scale; + pos *= rotation2d(rotation); + + float luminance = (0.299 * unit.color.r + 0.587 * unit.color.g + 0.114 * unit.color.b); + vec3 textColor = luminance < 0.25 ? LIGHTGRAY : BLACK; + //textColor = mix(textColor, unit.color, 0.25); + renderText( + color, + pos, + textPointer, + 0.17, + 0.5, + textColor, + 0.0, + scale + ); + + gl_FragColor = vec4(color * colorMultiplier, alpha); + + // #include + #include +} \ No newline at end of file diff --git a/src/components/Wellbores/WellboreRibbon/shaders/measured-depth.glsl b/src/components/Wellbores/WellboreRibbon/shaders/measured-depth.glsl new file mode 100644 index 0000000..621a7e9 --- /dev/null +++ b/src/components/Wellbores/WellboreRibbon/shaders/measured-depth.glsl @@ -0,0 +1,81 @@ +#include +#include + +vec3 BLACK = vec3(0.0); +vec3 WHITE = vec3(1.0); +vec3 GRAY = vec3(0.5); +vec3 LIGHTGRAY = vec3(0.75); + +uniform float fontSize; +uniform float stepSize; +uniform float startDepth; + +#include ../../../../sdk/materials/shaderLib/glyphs.glsl +#include ../../../../sdk/materials/shaderLib/render-number.glsl + +float lines(float v, float lineWidth) { + float uvDeriv = fwidth(v * 2.0); + + float drawWidth = clamp(lineWidth, uvDeriv, 0.5); + float lineAA = uvDeriv * 1.5; + float fraction = 1.0 - abs(fract(v) * 2.0 - 1.0); + float line = smoothstep(drawWidth + lineAA, drawWidth - lineAA, abs(fraction * 2.0)); + + line *= saturate(lineWidth / drawWidth); + + return line; +} + +void main() { + #include + + vec3 color = WHITE; + + vec2 uv = vUv.xy; + + if(!gl_FrontFacing) { + color = LIGHTGRAY; + uv.x = 1.0 - uv.x; + } + + vec2 pixelCoords = vec2(uv.x, 1.0 - uv.y) * size; + pixelCoords.y += startDepth; + float scale = glyphFontSize / fontSize; + + float ticks = ceil((size.y + 1.0 + startDepth) / stepSize); + + float spacing = stepSize * scale; + + float y = pixelCoords.y; + y *= scale; + + float iy = round(y / spacing); + iy = clamp(iy, 0.0, ticks - 1.0); + + float number = iy * stepSize; + + float x = pixelCoords.x - size.x * 0.65; + + x *= scale; + + vec2 p = vec2(x, y - spacing * iy); + + renderNumber(color, p, number, 0u, 0.17, 1.0, BLACK, 0.0, scale); + + // tick marks + float minY = ((1.0 - vUv.y) * size.y + startDepth) / (stepSize / 10.0); + float minLines = lines(minY, fontSize * 0.05 / (stepSize / 10.0)); + minLines = minLines * step(size.x * 0.75, pixelCoords.x); + color = mix(color, GRAY, minLines); + + float majY = ((1.0 - vUv.y) * size.y + startDepth) / stepSize; + float majLines = lines(majY, fontSize * 0.1 / stepSize); + majLines = majLines * step(size.x * 0.7, pixelCoords.x); + color = mix(color, BLACK, majLines); + + gl_FragColor = vec4(color, 0.95); + + //#include + #include + +} diff --git a/src/components/Wellbores/WellboreRibbon/shaders/vertex.glsl b/src/components/Wellbores/WellboreRibbon/shaders/vertex.glsl new file mode 100644 index 0000000..6667512 --- /dev/null +++ b/src/components/Wellbores/WellboreRibbon/shaders/vertex.glsl @@ -0,0 +1,40 @@ +#include +#include +#include ../../../../sdk/materials/shaderLib/rotation.glsl + +uniform vec3 direction; +uniform float width; +uniform float offset; + +attribute vec2 position2; +attribute vec4 point0; +attribute vec4 point1; +attribute vec3 tangent0; +attribute vec3 tangent1; + +varying vec2 vUv; +varying vec3 vNormal; +varying vec3 vTangent; + +flat varying int instanceID; + +void main() { + vec4 curveDirection = modelViewMatrix * vec4(direction, 0.0); + vec4 p0 = modelViewMatrix * vec4(point0.xyz, 1.0); + vec4 p1 = modelViewMatrix * vec4(point1.xyz, 1.0); + + vec3 tangent = (modelViewMatrix * vec4(mix(tangent0, tangent1, position2.x), 0.0)).xyz; + vec3 binormal = normalize(cross(normalize(curveDirection.xyz), vec3(0.0, 0.0, -1.0))); + vec3 normal = normalize(cross(tangent, binormal)); + vec3 point = mix(p0.xyz, p1.xyz, position2.x) + binormal * position2.y * width + binormal * offset; + + gl_Position = projectionMatrix * vec4(point, 1.0); + + vUv = vec2(position2.y + 0.5, 1.0 - mix(point0.w, point1.w, position2.x)); + vNormal = normal; + vTangent = tangent; + + instanceID = gl_InstanceID; + + #include +} \ No newline at end of file diff --git a/src/components/Wellbores/WellboreRibbon/stripes/FormationsStripe.tsx b/src/components/Wellbores/WellboreRibbon/stripes/FormationsStripe.tsx new file mode 100644 index 0000000..978d22b --- /dev/null +++ b/src/components/Wellbores/WellboreRibbon/stripes/FormationsStripe.tsx @@ -0,0 +1,152 @@ +import { useContext, useEffect, useMemo, useState } from 'react' +import { Color, DataTexture, DoubleSide, Texture, Uniform, Vector2, Vector3 } from 'three' +import { GlyphsContext } from '../../../../contexts/GlyphsContext' +import { useData } from '../../../../hooks/useData' +import { createFormationIntervals, getUnitPicks, mergeFormationIntervals } from '../../../../sdk' +import { EncodedTextTexture } from '../../../../sdk/utils/glyphs' +import { WellboreContext } from '../../Wellbore/WellboreContext' +import { WellboreRibbonContext } from '../WellboreRibbonContext' +import fragmentShader from '../shaders/formations.glsl' +import vertexShader from '../shaders/vertex.glsl' + +export type FormationsStripeProps = { + width: number + offset: number + stratColumnId: string + level?: number +} + +type Unit = { + index: number + color: Color +} + +type FormationData = { + text: EncodedTextTexture + intervals: Vector3[] + units: Unit[] +} + +export const FormationsStripe = ({ width, offset, stratColumnId, level }: FormationsStripeProps) => { + const store = useData() + const ribbonContext = useContext(WellboreRibbonContext) + const glyphContext = useContext(GlyphsContext) + + const { id } = useContext(WellboreContext) + + const [formationData, setFormationData] = useState(null) + + const uniforms = useMemo(() => { + return { + size: new Uniform(new Vector2()), + direction: new Uniform(new Vector3(0, -1, 0)), + startDepth: new Uniform(0), + width: new Uniform(20), + offset: new Uniform(0), + glyphAtlas: new Uniform(null), + textTexture: new Uniform(null), + textPointersCount: new Uniform(0), + textPointersOffset: new Uniform(0), + intervals: new Uniform([new Vector3()]), + units: new Uniform([{ index: 0, color: new Color() }]) + } + }, []) + + + useEffect(() => { + if (store && glyphContext) { + getUnitPicks(id, stratColumnId, store, true).then(picksData => { + if (picksData) { + const surfaceIntervals = createFormationIntervals(picksData.matched, picksData.wellbore.depthMdMsl) + let filteredIntervals = surfaceIntervals + if (level !== undefined) { + filteredIntervals = surfaceIntervals.filter(d => d.unit.level === level) + } + const mergedIntervals = mergeFormationIntervals(filteredIntervals) + const unitsMap = new Map() + const units: Unit[] = [] + const labels: string[] = [] + + const intervals: Vector3[] = [] + mergedIntervals.forEach(s => { + const label = s.unit.name + let index = unitsMap.get(label) + if (index === undefined) { + + index = units.length + const unit = { + index, + color: new Color(s.unit.color) + } + unitsMap.set(label, index) + units.push(unit) + labels.push(label) + } + intervals.push(new Vector3(s.mdMslTop, s.mdMslBottom, index)) + }) + + const textTexture = glyphContext.encodeTextTexture(labels) + setFormationData(prev => { + if (prev) { + prev.text.texture.dispose() + } + return { + intervals, + text: textTexture, + units + } + }) + } + }).catch(console.error) + } + }, [store, stratColumnId, id, glyphContext, level]) + + useEffect(() => { + uniforms.offset.value = offset + uniforms.width.value = width + if (ribbonContext) { + uniforms.size.value.set(width, ribbonContext.trajectory.measuredLength) + uniforms.direction.value.set(...ribbonContext.direction) + uniforms.startDepth.value = ribbonContext.trajectory.measuredTop + } + if (formationData) { + uniforms.intervals.value = formationData.intervals + uniforms.units.value = formationData.units + uniforms.textTexture.value = formationData.text.texture + uniforms.textPointersCount.value = formationData.text.textPointersCount + uniforms.textPointersOffset.value = formationData.text.textPointersOffset + } + }, [uniforms, width, offset, formationData, ribbonContext]) + + + + useEffect(() => { + if (glyphContext) { + uniforms.glyphAtlas.value = glyphContext.glyphAtlas + } + }, [uniforms, glyphContext]) + + useEffect(() => { + + }, [ribbonContext, uniforms, width]) + + if (!ribbonContext || !glyphContext || !formationData) return null + + return ( + + + + ) +} \ No newline at end of file diff --git a/src/components/Wellbores/WellboreRibbon/stripes/MeasuredDepthStripe.tsx b/src/components/Wellbores/WellboreRibbon/stripes/MeasuredDepthStripe.tsx new file mode 100644 index 0000000..a9df40f --- /dev/null +++ b/src/components/Wellbores/WellboreRibbon/stripes/MeasuredDepthStripe.tsx @@ -0,0 +1,79 @@ +import { useContext, useEffect, useMemo } from 'react' +import { DoubleSide, Texture, Uniform, Vector2, Vector3 } from 'three' +import { GlyphsContext } from '../../../../contexts/GlyphsContext' +import { WellboreRibbonContext } from '../WellboreRibbonContext' +import fragmentShader from '../shaders/measured-depth.glsl' +import vertexShader from '../shaders/vertex.glsl' + + +export type MeasuredDepthStripeProps = { + width: number + offset: number + stepSize?: number +} + +export const MeasuredDepthStripe = ({ width, offset, stepSize = 50 }: MeasuredDepthStripeProps) => { + + const ribbonContext = useContext(WellboreRibbonContext) + const glyphContext = useContext(GlyphsContext) + + const uniforms = useMemo(() => { + return { + direction: new Uniform(new Vector3(0, -1, 0)), + width: new Uniform(20), + offset: new Uniform(0), + fontSize: new Uniform(3), + size: new Uniform(new Vector2()), + startDepth: new Uniform(0), + stepSize: new Uniform(50), + glyphAtlas: new Uniform(null), + digits: new Uniform([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) + } + }, []) + + useEffect(() => { + if (glyphContext) { + uniforms.glyphAtlas.value = glyphContext.glyphAtlas + uniforms.digits.value = [...glyphContext.encodeText('0123456789.-').indices] + } + }, [uniforms, glyphContext]) + + useEffect(() => { + uniforms.width.value = width + uniforms.offset.value = offset + uniforms.stepSize.value = stepSize + }, [uniforms, width, offset, stepSize]) + + + useEffect(() => { + if (ribbonContext) { + uniforms.size.value.set(width, ribbonContext.trajectory.measuredLength) + uniforms.startDepth.value = ribbonContext.trajectory.measuredTop + } + }, [uniforms, ribbonContext, width]) + + useEffect(() => { + if (ribbonContext) { + uniforms.direction.value.set(...ribbonContext.direction) + } + }, [ribbonContext, uniforms]) + + if (!ribbonContext || !glyphContext) return null + + return ( + + + + ) + +} \ No newline at end of file diff --git a/src/components/Wellbores/Wells/Wells.stories.tsx b/src/components/Wellbores/Wells/Wells.stories.tsx index 6757034..7cb5226 100644 --- a/src/components/Wellbores/Wells/Wells.stories.tsx +++ b/src/components/Wellbores/Wells/Wells.stories.tsx @@ -1,6 +1,7 @@ import type { Meta, StoryObj } from '@storybook/react' import { scaleOrdinal } from 'd3-scale' import { useEffect, useMemo, useRef, useState } from 'react' +import { GlyphsProvider } from '../../../contexts/GlyphsContextProvider' import { WellboreSelectedEvent, wellboreSelectedEventType } from '../../../events/wellbore-events' import { CRS } from '../../../sdk/projection/crs' import { Vec2 } from '../../../sdk/types/common' @@ -25,6 +26,9 @@ import { TubeTrajectory } from '../TubeTrajectory/TubeTrajectory' import { Wellbore } from '../Wellbore/Wellbore' import { WellboreBounds } from '../WellboreBounds/WellboreBounds' import { WellboreLabel } from '../WellboreLabel/WellboreLabel' +import { FormationsStripe } from '../WellboreRibbon/stripes/FormationsStripe' +import { MeasuredDepthStripe } from '../WellboreRibbon/stripes/MeasuredDepthStripe' +import { WellboreRibbon } from '../WellboreRibbon/WellboreRibbon' import { Wells } from './Wells' const colorScale = scaleOrdinal(["tomato", "#4e79a7", "#f28e2c", "#76b7b2", "#59a14f", "#edc949", "#af7aa1", "#ff9da7", "#9c755f", "#bab0ab", "darkgreen", "purple", "#24ca85"]) @@ -32,6 +36,7 @@ const colorScale = scaleOrdinal(["tomato", "#4e79a7", "#f28e2c", "#76b7b2", "#59 const utmZone = storyArgs.utmZone const origin = storyArgs.origin as Vec2 const well = storyArgs.defaultWell +const stratColumnId = storyArgs.defaultStratColumn const Wrapper = () => { const [selected, setSelected] = useState() @@ -71,7 +76,7 @@ const Wrapper = () => { }, [highlighter]) return ( - <> + @@ -125,6 +130,13 @@ const Wrapper = () => { + { isSelected && ( + + + + + + )} ) @@ -132,7 +144,7 @@ const Wrapper = () => { /> - + ) } diff --git a/src/contexts/GlyphsContext.ts b/src/contexts/GlyphsContext.ts new file mode 100644 index 0000000..ad61de9 --- /dev/null +++ b/src/contexts/GlyphsContext.ts @@ -0,0 +1,23 @@ + +import { createContext } from 'react' +import { Texture, UniformsGroup } from 'three' +import { EncodedTextSegment, EncodedTextTexture } from '../sdk/utils/glyphs' + +/** + * GlyphsContext props + * @expand + */ +export type GlyphsContextProps = { + glyphAtlas: Texture + glyphsCount: number + glyphData: UniformsGroup + encodeText: (text: string) => EncodedTextSegment + encodeTextTexture: (textSegments: string[] | string) => EncodedTextTexture + dispose: () => void +} + +/** + * Glyphs context + * @group Contexts + */ +export const GlyphsContext = createContext(null) \ No newline at end of file diff --git a/src/contexts/GlyphsContextProvider.tsx b/src/contexts/GlyphsContextProvider.tsx new file mode 100644 index 0000000..fa5ee9b --- /dev/null +++ b/src/contexts/GlyphsContextProvider.tsx @@ -0,0 +1,86 @@ + +import { useTexture } from '@react-three/drei' +import { PropsWithChildren, useEffect, useMemo, useState } from 'react' +import { LinearFilter, Texture } from 'three' +import { createConfig, GlyphConfig } from '../sdk/utils/glyphs' +import { GlyphsContext, GlyphsContextProps } from './GlyphsContext' + +/** + * GlyphsProvider props + * @expand + */ +export type GlyphsProviderProps = { + fontAtlasUrl: string + fontConfigUrl: string +} + +async function get(url: string) { + const response = await fetch( + url, + { + method: 'GET', + credentials: 'omit', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + }, + }, + ); + + const { status } = response; + + if ([404, 202, 204].includes(status)) { + return null; + } + + if (response.ok) { + const data = await response.json(); + return data; + } + + throw new Error(response.toString()); +} + +export const GlyphsProvider = ({ fontAtlasUrl, fontConfigUrl, children }: PropsWithChildren) => { + const glyphAtlas = useTexture(fontAtlasUrl, (tex: Texture) => { + tex.generateMipmaps = false + tex.magFilter = LinearFilter + tex.minFilter = LinearFilter + tex.flipY = true + }) + + const [config, setConfig] = useState(null) + + useEffect(() => { + get(`${fontConfigUrl}`).then(response => { + setConfig(createConfig(response)) + }).catch(err => console.error(err)) + }, [fontConfigUrl]) + + const context = useMemo(() => { + if (!config) return null + return { + glyphAtlas, + encodeText: (text: string ) => config.encodeText(text), + encodeTextTexture: (textSegments: string[] | string) => config.encodeTextTexture(textSegments), + glyphData: config.glyphData, + glyphsCount: config.glyphsCount, + dispose: config.dispose + } + }, [config, glyphAtlas]) + + useEffect(() => { + return () => { + if (context) { + context.glyphAtlas.dispose() + context.dispose() + } + } + }, [context]) + + return ( + + { children } + + ) +} \ No newline at end of file diff --git a/src/generators/index.ts b/src/generators/index.ts index 7cffe5a..9f60472 100644 --- a/src/generators/index.ts +++ b/src/generators/index.ts @@ -15,4 +15,5 @@ export * from './shoes-generator' export * from './surface-generator' export * from './tube-trajectory-generator' export * from './wellbore-bounds-generator' -export * from './wellbore-label-generator' \ No newline at end of file +export * from './wellbore-formation-column-generator' +export * from './wellbore-label-generator' diff --git a/src/generators/picks-generator.ts b/src/generators/picks-generator.ts index 611b72d..12d36cb 100644 --- a/src/generators/picks-generator.ts +++ b/src/generators/picks-generator.ts @@ -1,17 +1,19 @@ import { transfer } from 'comlink' +import { clamp } from 'curve-interpolator' import { Color, Matrix4, Vector3 } from 'three' import { - clamp, getTrajectory, limit, PI2, - Pick, PositionLog, ReadonlyStore, SymbolData, SymbolsType, - Vec3, + titleCase, + Vec3 } from '../sdk' +import { createFormationIntervals, getFormationMarkers, getUnitPicks } from '../sdk/data/helpers/picks-helpers' + const positionVector = new Vector3() const targetVector = new Vector3() @@ -23,32 +25,31 @@ const color = new Color() export async function generatePicks( this: ReadonlyStore, - id: string, + wellboreId: string, + stratColumnId: string, fromMsl?: number, baseRadius: number = 10 ): Promise { - const data = await limit(() => this.get('picks', id)) - - if (!data) return null + + const picksData = await getUnitPicks(wellboreId, stratColumnId, this, true, fromMsl) - const poslogMsl = await limit(() => - this.get('position-logs', id) - ) + if (!picksData) return null - const trajectory = getTrajectory(id, poslogMsl) + const surfaceIntervals = createFormationIntervals(picksData.matched, picksData.wellbore.depthMdMsl) + const formationMarkers = getFormationMarkers(surfaceIntervals) - if (!trajectory) return null + if (!formationMarkers.length) return null - const filteredPicks = data.filter( - (d) => - d.name.endsWith('Top') && - (fromMsl === undefined || d.mdMsl >= fromMsl) && - d.mdMsl <= trajectory.measuredBottom + const poslogMsl = await limit(() => + this.get('position-logs', wellboreId) ) + + + const trajectory = getTrajectory(wellboreId, poslogMsl) - if (!filteredPicks.length) return null + if (!trajectory) return null - const mappedPicks = filteredPicks.map((d) => { + const mappedPicks = formationMarkers.map((d) => { const pos = clamp( (d.mdMsl - trajectory.measuredTop) / trajectory.measuredLength, 0, @@ -60,23 +61,12 @@ export async function generatePicks( direction: trajectory.curve.getTangentAt(pos) as Vec3, } }) - mappedPicks.sort((a, b) => a.mdMsl - b.mdMsl || b.level - a.level) - - const cleanedPicks: typeof mappedPicks = [] - - let currentDepth = -Infinity - mappedPicks.forEach((p) => { - if (p.mdMsl > currentDepth) { - cleanedPicks.push(p) - currentDepth = p.mdMsl - } - }) - const transformations = new Float32Array(cleanedPicks.length * 16 * 3) - const colors = new Float32Array(cleanedPicks.length * 3 * 3) + const transformations = new Float32Array(mappedPicks.length * 16 * 3) + const colors = new Float32Array(mappedPicks.length * 3 * 3) const symbolData: SymbolData[] = [] - cleanedPicks.forEach((pick, i) => { + mappedPicks.forEach((pick, i) => { positionVector.set(...pick.position) transformationMatrix.identity() const radius = baseRadius @@ -99,8 +89,8 @@ export async function generatePicks( color.toArray(colors, i * 3) symbolData[i] = { - id: `${id}_${i}`, - name: pick.name, + id: `${wellboreId}_${i}`, + name: `${pick.name} ${titleCase(pick.type)}`, depth: pick.mdMsl, tvd: pick.tvdMsl, level: pick.level, @@ -116,4 +106,5 @@ export async function generatePicks( }, [transformations.buffer] ) + } diff --git a/src/generators/wellbore-formation-column-generator.ts b/src/generators/wellbore-formation-column-generator.ts new file mode 100644 index 0000000..3ae26b7 --- /dev/null +++ b/src/generators/wellbore-formation-column-generator.ts @@ -0,0 +1,110 @@ +import { transfer } from 'comlink' +import { BufferAttribute, BufferGeometry, Color } from 'three' +import { mergeGeometries } from 'three/examples/jsm/utils/BufferGeometryUtils.js' +import { + createTubeGeometry, + getTrajectory, + limit, + packBufferGeometry, + PackedBufferGeometry, + PositionLog, + ReadonlyStore, + TubeGeometryOptions, +} from '../sdk' +import { + createFormationIntervals, + getUnitPicks, + mergeFormationIntervals, +} from '../sdk/data/helpers/picks-helpers' + +export async function generateWellboreFormationColumnGeometries( + this: ReadonlyStore, + wellboreId: string, + stratColumnId: string, + segmentsPerMeter: number, + fromMsl?: number, + units?: string[], + unitTypes?: string[], + startRadius: number = 0.5, + formationWidth: number = 2, + caps: boolean = true, + radialSegments: number = 16, + simplificationThreshold: number = 0 +): Promise { + const picksData = await getUnitPicks(wellboreId, stratColumnId, this, true) + + if (!picksData) return null + + const surfaceIntervals = createFormationIntervals(picksData.matched, picksData.wellbore.depthMdMsl) + .filter(d => + (unitTypes === undefined || unitTypes.includes(d.unit.unitType)) && + (units === undefined || units.includes(d.unit.name)) + ) + + if (!surfaceIntervals.length) return null + + const mergedIntervals = mergeFormationIntervals(surfaceIntervals) + + const poslogMsl = await limit(() => + this.get('position-logs', wellboreId) + ) + + const trajectory = getTrajectory(wellboreId, poslogMsl) + + if (!trajectory) return null + + const options: TubeGeometryOptions = { + startCap: caps, + endCap: caps, + segmentsPerMeter, + simplificationThreshold, + radialSegments, + computeRelativeLengths: true, + } + + //const maxLevel = max(mergedIntervals, (d) => d.unit.level)! + + const geometries: BufferGeometry[] = [] + + mergedIntervals.forEach((interval) => { + if (fromMsl === undefined || interval.mdMslBottom > fromMsl) { + let top = interval.mdMslTop + if (fromMsl !== undefined && fromMsl > top) { + top = fromMsl + } + const from = trajectory.getPositionAtDepth(top, true) + const to = trajectory.getPositionAtDepth(interval.mdMslBottom, true) + if (from !== null && to !== null) { + const radius = formationWidth + startRadius + const color = new Color(interval.unit.color) + + const geometery = createTubeGeometry(trajectory.curve, { + ...options, + radius, + from, + to, + }) + + if (geometery.attributes.position.count) { + const colors = new Float32Array( + geometery.attributes.position.count * 3 + ) + + for (let i = 0; i < geometery.attributes.position.count; i++) { + color.toArray(colors, i * 3) + } + + geometery.attributes.color = new BufferAttribute(colors, 3) + geometries.push(geometery) + } + } + } + }) + + if (!geometries.length) return null + + const geometry = mergeGeometries(geometries, false) + const [packed, buffers] = packBufferGeometry(geometry) + + return transfer(packed, buffers) +} diff --git a/src/main.ts b/src/main.ts index 52683ae..213f7c9 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,16 +1,16 @@ /** * @module main */ -export * from './components/common' - export * from './components/Annotations' export * from './components/CameraTargetMarker/CameraTargetMarker' +export * from './components/common' export * from './components/Distance' export * from './components/Grids' export * from './components/Handlers/EventEmitter' export * from './components/Handlers/Highlighter' export * from './components/Html' export * from './components/ObservableGroup/ObservableGroup' +export * from './components/SDFTest/SDFTest' export * from './components/Surfaces' export * from './components/Symbol' export * from './components/UtmArea' @@ -25,6 +25,7 @@ export * from './components/Wellbores/Shoes' export * from './components/Wellbores/TubeTrajectory' export * from './components/Wellbores/Wellbore' export * from './components/Wellbores/WellboreBounds' +export * from './components/Wellbores/WellboreFormationColumn' export * from './components/Wellbores/WellboreLabel' export * from './components/Wellbores/Wells' diff --git a/src/sdk/data/helpers/picks-helpers.ts b/src/sdk/data/helpers/picks-helpers.ts new file mode 100644 index 0000000..9f0faad --- /dev/null +++ b/src/sdk/data/helpers/picks-helpers.ts @@ -0,0 +1,371 @@ +import { limit } from '../../utils/limiter' +import { ReadonlyStore } from '../Store' +import { StratColumn, StratColumnUnit, WellboreHeader } from '../types' +import { Pick } from '../types/Pick' + +export type UnitPick = { + pick: Pick + unit: StratColumnUnit +} + +export type FormationInterval = { + entry: Pick + exit: Pick + unit: StratColumnUnit +} + +export type FormationColumnInterval = { + mdMslTop: number + mdMslBottom: number + unit: StratColumnUnit +} + +export type FormationMarker = { + name: string + color: string + mdMsl: number + tvdMsl?: number + type: 'top' | 'base' + level: number +} + +/** + * Match picks bottom-up (wellbore -> parent chain) with stratigraphy units. + * As we traverse to a parent wellbore, ignore any picks that are deeper than + * the current pick depth or the child's kickoff depth. + * + * If a wellbore has picks above its kickoff depth, we prioritize these picks + * above corresponding picks from the parent wellbore + * + */ +export async function getUnitPicks( + wellboreId: string, + stratColumnId: string, + store: ReadonlyStore, + traverse = true, + fromMsl?: number +) { + const [wellbore, stratColumn] = await limit(() => + Promise.all([ + store.get('wellbore-headers', wellboreId), + store.get('strat-columns', stratColumnId), + ]) + ) + + if (!wellbore || !stratColumn) return null + + const headers = new Map() + + // we need a map of all trajectories in the well to be able to traverse up the wellbore parent chain + if (wellbore.parent && traverse) { + const wellHeaders = await limit(() => + store.query('wellbore-headers', { well: wellbore.well }) + ) + wellHeaders.forEach((h) => { + headers.set(h.name, h) + }) + } + + // create a map of strat units to use for matching picks with strat column units + const unitsMap = stratColumn.units.reduce>( + (map, unit) => { + map.set(unit.top, unit) + map.set(unit.base, unit) + return map + }, + new Map() + ) + + const matched: UnitPick[] = [] + const unmatched: Pick[] = [] + + // to keep track of which picks we've already added + const added = new Set() + + fromMsl = fromMsl === undefined ? -Infinity : fromMsl + + // keep track of depth as we progress from bottom-up of the wellbore + let md = Infinity + let bottom = Infinity + + // fallback + let picksFromPrev: Pick[] = [] + + // add all picks in range (top, bottom) from a wellbore header + const addPicks = async (header: WellboreHeader) => { + let top = fromMsl !== undefined ? fromMsl : -Infinity + if (header.kickoffDepthMsl !== null && header.kickoffDepthMsl > top) { + top = header.kickoffDepthMsl + } + let wellborePicks: Pick[] | null = null + + // we prioritize picks from previous wellbores if they exist above the bottom of the current range + if (picksFromPrev && picksFromPrev.length > 0 && picksFromPrev[0].mdMsl < bottom) { + wellborePicks = picksFromPrev + } else { + wellborePicks = await limit(() => store.get('picks', header.id)) + if (wellborePicks) { + wellborePicks = wellborePicks.filter(d => d.mdMsl <= bottom && d.mdMsl >= top).sort((a, b) => b.mdMsl - a.mdMsl); + picksFromPrev = wellborePicks + } else { + return + } + } + + for (let i = 0; i < wellborePicks.length; i++) { + const pick = wellborePicks[i] + + if (pick.mdMsl <= md && !added.has(pick.id)) { + const unit = unitsMap.get(pick.pickIdentifier) + if (unit) { + matched.push({ + pick, + unit, + }) + } else { + unmatched.push(pick) + } + added.add(pick.id) + md = pick.mdMsl + } + } + + bottom = top + if (traverse && header.parent && md > fromMsl) { + const parent = headers.get(header.parent) + if (parent) await addPicks(parent) + } + } + + await addPicks(wellbore) + + return { matched, unmatched, wellbore } +} + +/** + * Create groups of entry and exit picks for each stratigraphy unit level: + * + * - Sort the matched picks by ascending level and ascending depth + * - Traverse the matched picks, keeping a reference of the current level and unit to find the correct entry and exit pick + * - Remove picks from list as formations are identified + */ +export function createFormationIntervals( + unitPicks: UnitPick[], + maxDepth: number = Infinity, +): FormationInterval[] { + const intervals: FormationInterval[] = [] + + if (!Array.isArray(unitPicks) || unitPicks.length < 2) return intervals + + let list = unitPicks.map((up) => ({ + ...up, + deleted: false, + })) // make a copy + + list.sort( + (a, b) => + a.unit.level - b.unit.level || + a.pick.mdMsl - b.pick.mdMsl || + a.unit.topAge - b.unit.topAge + ) + + const findNext = () => { + let interval = null + const entry = list.shift() + if (entry) { + for (let i = 0; i < list.length; i++) { + const candidate = list[i] + + // if we react a new strat unit level, it means we won't find a matching exit pick due + // to how we ordered the unit picks + if (entry.unit.level < candidate.unit.level) { + break + } + + if (candidate.unit.name === entry.unit.name) { + if (candidate.pick.pickIdentifier !== entry.pick.pickIdentifier) { + list[i].deleted = true // mark item as deleted + interval = { + entry: entry.pick, + exit: candidate.pick, + unit: entry.unit, + } + + break + } else { + list[i].deleted = true // remove candidate from list as it is a duplicate of the parent wellbore entry pick + } + } + } + + list = list.filter((d) => !d.deleted) + } + + return interval + } + + while (list.length) { + const interval = findNext() + + // Only add interval if it has a range + if (interval && interval.entry.mdMsl !== interval.exit.mdMsl) { + /* + // if the interval is of the same unit as the previous, and there's no gap between them, + // modify previous interval instead of adding a new + const prevInterval = intervals[intervals.length - 1] + if (prevInterval && prevInterval.unit.identifier === interval.unit.identifier && prevInterval.exit.md === interval.entry.md) { + prevInterval.exit = { ...prevInterval.exit } // avoid mutating original data + prevInterval.exit.md = interval.exit.md + prevInterval.exit.mdMsl = interval.exit.mdMsl + prevInterval.exit.tvdMsl = interval.exit.tvdMsl + } else { + intervals.push(interval) + } + */ + if (interval.entry.mdMsl < maxDepth) { + if (interval.exit.mdMsl > maxDepth) { + interval.exit.mdMsl = maxDepth + } + intervals.push(interval) + } + } + } + return intervals +} + +/** + * Merge into a single column, where higher levels takes precedence over lower levels: + * + * - Sort the intervals by ascending entry depth and ascending stratigraphy unit level + * - Start with a stack containing the first item from the sorted list and keep track of the entry depth + * - iterate to find the next item that has an entry depth lower than current depth + * - define a range limit from the current depth and the entry of the item with a lower entry depth + * - pop the stack and draw sections while adjusting the current depth and keep doing this until the current depth reaches the range limit + * - any items on the stack with an exit md greater than the limit gets pushed back on the stack + * - the current item is pushed to the stack and the iteration continues + */ +export function mergeFormationIntervals( + formationIntervals: FormationInterval[] +) { + if (!formationIntervals.length) return [] + + const merged: FormationColumnInterval[] = [] + + const items = [...formationIntervals].sort( + (a, b) => a.entry.mdMsl - b.entry.mdMsl || a.unit.level - b.unit.level + ) + + const first = items[0] + const stack = [first] + + let depth = first.entry.mdMsl + + for (let i = 1; i < items.length; i++) { + const a = items[i] + if (a.entry.mdMsl > depth) { + const lim = a.entry.mdMsl + + while (stack.length && depth < lim) { + const b = stack.pop()! + + if (b.exit.mdMsl > depth) { + const bottom = a.unit.level >= b.unit.level ? Math.min(b.exit.mdMsl, lim) : b.exit.mdMsl + + merged.push({ + mdMslTop: depth, + mdMslBottom: bottom, + unit: b.unit, + }) + + depth = bottom + + if (b.exit.mdMsl > depth) { + stack.push(b) + } + } + } + + depth = Math.max(lim, depth) + } + + stack.push(a) + } + + // process the remaining items on the stack + while (stack.length) { + const b = stack.pop()! + + if (b.exit.mdMsl > depth) { + const bottom = b.exit.mdMsl + + merged.push({ + mdMslTop: depth, + mdMslBottom: bottom, + unit: b.unit, + }) + + depth = bottom + } + } + + return merged +} + +/** + * Identify surface entry picks, where the highest level picks has precedence: + * - Sort intervals by ascending entry depth and descending stratigraphy unit level + * - Pick only the first pick of a depth, ignoring any following picks with the same depth as the previous pick + */ +export function getFormationMarkers( + intervals: FormationInterval[] +): FormationMarker[] { + const markers: FormationMarker[] = [] + + const items = [...intervals].sort( + (a, b) => a.entry.mdMsl - b.entry.mdMsl || b.unit.level - a.unit.level + ) + let prev = null + let depth = -Infinity + for (let i = 0; i < items.length; i++) { + const item = items[i] + if (item.entry.mdMsl > depth) { + depth = item.entry.mdMsl + + // check if we should include the exit where there is a gap between the formations + if (prev && prev.exit.mdMsl < depth) { + markers.push({ + color: prev.unit.color, + name: prev.unit.name, + type: 'base', + mdMsl: prev.exit.mdMsl, + tvdMsl: prev.exit.tvdMsl, + level: prev.unit.level, + }) + } + + markers.push({ + color: item.unit.color, + name: item.unit.name, + type: 'top', + mdMsl: depth, + tvdMsl: item.entry.tvdMsl, + level: item.unit.level, + }) + + prev = item + } + } + + // add a marker of the last base + if (prev) { + markers.push({ + color: prev.unit.color, + name: prev.unit.name, + type: 'base', + mdMsl: prev.exit.mdMsl, + tvdMsl: prev.exit.tvdMsl, + level: prev.unit.level, + }) + } + return markers +} diff --git a/src/sdk/data/types/Formation.ts b/src/sdk/data/types/Formation.ts new file mode 100644 index 0000000..8ee5242 --- /dev/null +++ b/src/sdk/data/types/Formation.ts @@ -0,0 +1,10 @@ +export type Formation = { + name: string + mdMslEntry: number, + mdMslExit: number, + tvdMslEntry?: number, + tvdMslExit?: number, + level: number, + color: string, + properties?: Record +} \ No newline at end of file diff --git a/src/sdk/data/types/Pick.ts b/src/sdk/data/types/Pick.ts index 97b48de..471dcb5 100644 --- a/src/sdk/data/types/Pick.ts +++ b/src/sdk/data/types/Pick.ts @@ -1,7 +1,8 @@ export type Pick = { - name: string, - color: string, - mdMsl: number, - tvdMsl: number, - level: number, + id: string + wellboreId: string + pickIdentifier: string + mdMsl: number + tvdMsl?: number + properties?: Record } \ No newline at end of file diff --git a/src/sdk/data/types/StratColumn.ts b/src/sdk/data/types/StratColumn.ts index 8f6c89f..79e8a38 100644 --- a/src/sdk/data/types/StratColumn.ts +++ b/src/sdk/data/types/StratColumn.ts @@ -1,13 +1,14 @@ export type StratColumnUnit = { id: string, name: string, + unitType: string, level: number, top: string, base: string, topAge: number, baseAge: number, color: string, - parent: string, + parent: string | null, } diff --git a/src/sdk/data/types/WellboreHeader.ts b/src/sdk/data/types/WellboreHeader.ts index c367b41..7d182e3 100644 --- a/src/sdk/data/types/WellboreHeader.ts +++ b/src/sdk/data/types/WellboreHeader.ts @@ -11,5 +11,5 @@ export type WellboreHeader = { depthMdMsl: number, waterDepth: number | null status: string, - properties: Record + properties?: Record } \ No newline at end of file diff --git a/src/sdk/data/types/index.ts b/src/sdk/data/types/index.ts index 5006a3f..01128ec 100644 --- a/src/sdk/data/types/index.ts +++ b/src/sdk/data/types/index.ts @@ -1,6 +1,7 @@ export * from './Casing' export * from './CompletionTool' export * from './DepthReferencePoint' +export * from './Formation' export * from './PerforationInterval' export * from './Pick' export * from './PositionLog' @@ -8,3 +9,4 @@ export * from './StratColumn' export * from './SurfaceMeta' export * from './Symbol' export * from './WellboreHeader' + diff --git a/src/sdk/geometries/curve/curve-3d.ts b/src/sdk/geometries/curve/curve-3d.ts index 7393e14..67024b3 100644 --- a/src/sdk/geometries/curve/curve-3d.ts +++ b/src/sdk/geometries/curve/curve-3d.ts @@ -132,4 +132,22 @@ export function calculateFrenetFrames(curve: Curve3D, curvePositions: number[]) } return frames -} \ No newline at end of file +} + +export function getCurveSegments(curve: Curve3D, segmentsPerMeter: number, from: number = 0, to: number = 1, useTopAsReference = true): number[] { + const segments: number[] = [Math.max(from, 0)] + const curveLength = curve.length + const deltaPos = useTopAsReference ? 1 : to - from + const segmentLength = deltaPos * curveLength + const nSegments = Math.floor(segmentsPerMeter * segmentLength) + const stepSize = deltaPos / nSegments + for (let i = 0; i <= nSegments; i++) { + const position = i * stepSize + if (position > from && position < to) { + segments.push(position) + } + } + segments.push(Math.min(to, 1)) + + return segments +} diff --git a/src/sdk/geometries/curve/tube-geometry.ts b/src/sdk/geometries/curve/tube-geometry.ts index d390869..e5b5485 100644 --- a/src/sdk/geometries/curve/tube-geometry.ts +++ b/src/sdk/geometries/curve/tube-geometry.ts @@ -36,6 +36,7 @@ export type TubeGeometryOptions = AttributeOptions & { radiusModifier?: RadiusModifier, simplificationThreshold?: number, computeLengths?: boolean, + computeRelativeLengths?: boolean, computeCurveNormals?: boolean, computeCurveTangents?: boolean, computeCurveBinormals?: boolean, @@ -416,8 +417,8 @@ function generateTube(segments: TubeSegment[], radialSegments: number, closed: b for (let i = 0; i < segments.length; i++) { for (let j = 0; j <= radialSegments; j++) { uvs.push( - segments[i].curvePosition, j / radialSegments, + i / (segments.length - 1), ) } } @@ -561,8 +562,9 @@ export function createTubeGeometry(curve: Curve3D, options: TubeGeometryOptions } // add optional attributes - if (options.computeLengths || options.computeCurveNormals || options.computeCurveTangents || options.computeCurveBinormals) { + if (options.computeLengths || options.computeCurveNormals || options.computeCurveTangents || options.computeCurveBinormals || options.computeRelativeLengths) { const lengths: number[] | null = options.computeLengths ? [] : null + const relativeLengths: number[] | null = options.computeRelativeLengths ? [] : null const curveNormals: number[] | null = options.computeCurveNormals ? [] : null const curveTangents: number[] | null = options.computeCurveTangents ? [] : null const curveBinormals: number[] | null = options.computeCurveBinormals ? [] : null @@ -571,6 +573,7 @@ export function createTubeGeometry(curve: Curve3D, options: TubeGeometryOptions for (let i = 0; i < segments.length; i++) { for (let j = 0; j <= radialSegments; j++) { if (lengths) lengths.push(segments[i].curvePosition * curveLength) + if (relativeLengths) relativeLengths.push((segments[i].curvePosition - from) * curveLength) if (curveNormals) curveNormals.push(...segments[i].normal) if (curveTangents) curveTangents.push(...segments[i].tangent) if (curveBinormals) curveBinormals.push(...segments[i].binormal) @@ -580,6 +583,7 @@ export function createTubeGeometry(curve: Curve3D, options: TubeGeometryOptions for (let i = 0; i < innerSegments.length; i++) { for (let j = 0; j <= radialSegments; j++) { if (lengths) lengths.push(innerSegments[i].curvePosition * curveLength) + if (relativeLengths) relativeLengths.push((segments[i].curvePosition - from) * curveLength) if (curveNormals) curveNormals.push(...innerSegments[i].normal) if (curveTangents) curveTangents.push(...innerSegments[i].tangent) if (curveBinormals) curveBinormals.push(...innerSegments[i].binormal) @@ -588,7 +592,8 @@ export function createTubeGeometry(curve: Curve3D, options: TubeGeometryOptions } if (startCap) { for (let i = 0; i < startCap.vertexCount; i++) { - if (lengths) lengths.push(0) + if (lengths) lengths.push(from * curveLength) + if (relativeLengths) relativeLengths.push(0) if (curveNormals) curveNormals.push(...segments[0].normal) if (curveTangents) curveTangents.push(...segments[0].tangent) if (curveBinormals) curveBinormals.push(...segments[0].binormal) @@ -596,7 +601,8 @@ export function createTubeGeometry(curve: Curve3D, options: TubeGeometryOptions } if (endCap) { for (let i = 0; i < endCap.vertexCount; i++) { - if (lengths) lengths.push(curveLength) + if (lengths) lengths.push(to * curveLength) + if (relativeLengths) relativeLengths.push(curveLength) if (curveNormals) curveNormals.push(...segments[segments.length - 1].normal) if (curveTangents) curveTangents.push(...segments[segments.length - 1].tangent) if (curveBinormals) curveBinormals.push(...segments[segments.length - 1].binormal) @@ -604,6 +610,7 @@ export function createTubeGeometry(curve: Curve3D, options: TubeGeometryOptions } if (lengths) geometry.setAttribute('curveLength', new BufferAttribute(Float32Array.from(lengths), 1)) + if (relativeLengths) geometry.setAttribute('curveRelativeLength', new BufferAttribute(Float32Array.from(relativeLengths), 1)) if (curveNormals) geometry.setAttribute('curveNormal', new BufferAttribute(Float32Array.from(curveNormals), 3)) if (curveTangents) geometry.setAttribute('curveTangent', new BufferAttribute(Float32Array.from(curveTangents), 3)) if (curveBinormals) geometry.setAttribute('curveBinormal', new BufferAttribute(Float32Array.from(curveBinormals), 3)) diff --git a/src/sdk/geometries/packing.ts b/src/sdk/geometries/packing.ts index ca579ef..8513610 100644 --- a/src/sdk/geometries/packing.ts +++ b/src/sdk/geometries/packing.ts @@ -1,5 +1,5 @@ import { BufferAttribute, BufferGeometry, TypedArray } from 'three' - +// TODO: Add support for InterleavedBufferAttribute and InstancedBufferGeometry export type BufferAttributeDrawRange = { start: number, count: number, diff --git a/src/sdk/index.ts b/src/sdk/index.ts index db32aff..5d8cbcc 100644 --- a/src/sdk/index.ts +++ b/src/sdk/index.ts @@ -2,6 +2,7 @@ * @module sdk */ export * from './data/GeneratorRegistry' +export * from './data/helpers/picks-helpers' export * from './data/helpers/well-helpers' export * from './data/Store' export * from './data/types' diff --git a/src/sdk/managers/CameraManager.ts b/src/sdk/managers/CameraManager.ts index f805043..333a26e 100644 --- a/src/sdk/managers/CameraManager.ts +++ b/src/sdk/managers/CameraManager.ts @@ -72,6 +72,18 @@ export class CameraManager { } } + async setTarget(target: Vec3) { + const controls = this.controls + if (controls) { + cameraTarget.set(...target) + controls.getPosition(cameraPosition) + direction.subVectors(cameraTarget, cameraPosition) + direction.normalize() + return controls.setLookAt(cameraPosition.x, cameraPosition.y, cameraPosition.z, cameraTarget.x, cameraTarget.y, cameraTarget.z, true) + } + return null + } + setControls(controls: CameraControls) { this.controls = controls if (this.removeEventlisteners) { diff --git a/src/sdk/materials/ribbon-material.ts b/src/sdk/materials/ribbon-material.ts new file mode 100644 index 0000000..bd6735f --- /dev/null +++ b/src/sdk/materials/ribbon-material.ts @@ -0,0 +1,103 @@ +import { + Color, + MeshLambertMaterialParameters, + ShaderLib, + ShaderMaterial, + Texture, + Uniform, + UniformsUtils, +} from 'three' +import fragmentShader from './shaders/ribbon/fragment.glsl' +import vertexShader from './shaders/ribbon/vertex.glsl' + +export type RibonMaterialParams = MeshLambertMaterialParameters & { + angle?: number + width?: number + offset?: number + ignoreLight?: boolean +} + +export class RibbonMaterial extends ShaderMaterial { + isRibbonMaterial = true + constructor(parameters?: RibonMaterialParams) { + super({ + vertexShader, + fragmentShader, + uniforms: UniformsUtils.merge([ + UniformsUtils.clone(ShaderLib['lambert'].uniforms), + { + angle: new Uniform(parameters?.angle || 0), + width: new Uniform(parameters?.width || 1), + offset: new Uniform(parameters?.offset || 0), + }, + ]), + defines: { + USE_UV: true, + NO_LIGHT: !!parameters?.ignoreLight, + }, + clipping: true, + fog: true, + lights: true, + }) + if (parameters) this.setValues(parameters) + } + + get color(): Color { + return this.uniforms.diffuse.value + } + + set color(color: Color) { + this.uniforms.diffuse.value.set(color) + } + + get angle(): number { + return this.uniforms.angle.value + } + + set angle(a: number) { + this.uniforms.angle.value = a + } + + get offset(): number { + return this.uniforms.offset.value + } + + set offset(o: number) { + this.uniforms.offset.value = o + } + + get width(): number { + return this.uniforms.width.value + } + + set width(w: number) { + this.uniforms.width.value = w + } + + get map(): Texture | null { + return this.uniforms.map.value + } + + set map(m: Texture | null) { + this.uniforms.map.value = m + } + + get ignoreLight() { + return this.defines.NO_LIGHT + } + + set ignoreLight(f: boolean) { + this.defines.NO_LIGHT = f; + this.needsUpdate = true + } + + // @ignore + onBeforeCompile() { + if (this.map) { + if (this.map.matrixAutoUpdate === true) { + this.map.updateMatrix() + } + this.uniforms.mapTransform.value.copy(this.map.matrix) + } + } +} diff --git a/src/sdk/materials/shaderLib/glyphs.glsl b/src/sdk/materials/shaderLib/glyphs.glsl new file mode 100644 index 0000000..142a1aa --- /dev/null +++ b/src/sdk/materials/shaderLib/glyphs.glsl @@ -0,0 +1,79 @@ +uniform vec2 size; +uniform sampler2D glyphAtlas; + +uniform float in_bias; +uniform float out_bias; + +uniform GlyphData { + vec4 glyphPosition[GLYPHS_LENGTH]; + vec3 glyphOffset[GLYPHS_LENGTH]; + vec2 glyphTextureSize; + float glyphFontSize; + float glyphPixelRange; + float glyphLineHeight; + float glyphBaseLine; +}; + +varying vec2 vUv; + +struct GlyphParams { + vec2 position; + uint index; +}; + +uint _numDigits(float number) { + float log10 = 0.4342944819032518 * log(number); + return uint(max(trunc(log10), 0.0) + 1.0); +} + +uint _getDigit(float number, uint position) { + return uint(trunc(mod(number / pow(10.0, float(position - 1u)), 10.0))); + //return uint(floor(fract(number / pow(10.0, float(position))) * 10.0)); +} + +float _median(float r, float g, float b) { + return max(min(r, g), min(max(r, g), b)); +} + +vec2 _calcGlyphUv(vec2 texPos) { + vec2 glyphUv = vec2(texPos.x / glyphTextureSize.x, (glyphTextureSize.y - texPos.y) / glyphTextureSize.y); + + return clamp(glyphUv, 0.0, 1.0); +} + +float _calculateGlyphVerticalOffset(float vAlign) { + float pxRangeOffset = floor(glyphPixelRange / 2.0); + float lineHightOffset = glyphLineHeight / 2.0; + float vAlignOffset = (glyphFontSize / 2.0) * vAlign; + //float vAlignOffset = vAlign != 0.0 ? mix(mix(BOTTOM, 0.0, vAlign + 1.0), mix(0.0, TOP, vAlign), step(0.0, vAlign)) : 0.0; + return lineHightOffset + pxRangeOffset + vAlignOffset; +} + +float _screenPixelRange(float scale) { + vec2 scaledSize = size * scale; + vec2 screenPxRange = glyphPixelRange / fwidth(vUv * scaledSize); + return max(min(screenPxRange.x, screenPxRange.y), 1.0); +} + +float _sdfGlyph(vec2 p, uint glyphId) { + vec2 offset = vec2(p.x - glyphOffset[glyphId].x, p.y - glyphOffset[glyphId].y); + vec2 uv = glyphPosition[glyphId].xy + offset; + float sigDist = -0.5; + + if(offset.x >= 0.0 && offset.y >= 0.0 && offset.x <= glyphPosition[glyphId].z && offset.y <= glyphPosition[glyphId].w) { + vec2 TexCoord = _calcGlyphUv(uv); + vec3 mdf = texture2D(glyphAtlas, TexCoord).rgb; + sigDist = _median(mdf.r, mdf.g, mdf.b); + } + return sigDist; +} + +void renderGlyph(out vec3 outColor, vec2 position, uint glyphId, vec3 glyphColor, float pxRange) { + float dist = _sdfGlyph(position, glyphId); + float e = pxRange * (dist - 0.5 + in_bias) + 0.5 + out_bias; + + float contour = clamp(e, 0.0, 1.0); + + outColor = mix(outColor, glyphColor, contour); +} + diff --git a/src/sdk/materials/shaderLib/remap.glsl b/src/sdk/materials/shaderLib/remap.glsl index 483acc8..9f438b9 100644 --- a/src/sdk/materials/shaderLib/remap.glsl +++ b/src/sdk/materials/shaderLib/remap.glsl @@ -5,4 +5,9 @@ float inverseLerp(float v, float minValue, float maxValue) { float remap(float v, float inMin, float inMax, float outMin, float outMax) { float t = inverseLerp(v, inMin, inMax); return mix(outMin, outMax, t); +} + +float inverseSmoothstep(float y) +{ + return 0.5 - sin(asin(1.0- 2.0 * y) / 3.0); } \ No newline at end of file diff --git a/src/sdk/materials/shaderLib/render-number.glsl b/src/sdk/materials/shaderLib/render-number.glsl new file mode 100644 index 0000000..68b814b --- /dev/null +++ b/src/sdk/materials/shaderLib/render-number.glsl @@ -0,0 +1,74 @@ +uniform uint digits[12]; + +float renderNumber( + out vec3 outColor, + vec2 position, + float number, + uint decimals, + float verticalAlign, + float horizontalAlign, + vec3 textColor, + float spacing, + float scale +) { + + float width = 0.0; + float totalWidth = 0.0; + float offset = 0.0; + + // store glyphId and width during calculation of total width so we don't need to re-calculate these values + uvec2 temp[30]; + + uint glyphId; + uint nDigits; + + vec2 pos = position.xy; + uint c = 0u; + + if (number < 0.0) { + glyphId = digits[11]; + width = glyphOffset[glyphId].z + spacing; + offset = width; + temp[c++] = uvec2(glyphId, width); + number = -number; + } + + float intPart; + float fractPart = modf(number, intPart); + fractPart *= pow(10.0, float(decimals)); + nDigits = _numDigits(intPart); + + for(uint n = 0u; n < nDigits; n++) { + glyphId = digits[_getDigit(intPart, nDigits - n)]; + width = glyphOffset[glyphId].z + spacing; + temp[c++] = uvec2(glyphId, width); + totalWidth += width; + } + + if(decimals > 0u) { + glyphId = digits[10]; + width = glyphOffset[glyphId].z + spacing; + temp[c++] = uvec2(glyphId, width); + totalWidth += width; + + nDigits = _numDigits(fractPart); + for(uint n = 0u; n < decimals; n++) { + glyphId = digits[_getDigit(fractPart, nDigits - n)]; + width = glyphOffset[glyphId].z + spacing; + temp[c++] = uvec2(glyphId, width); + totalWidth += width; + } + } + + if(c > 0u) { + pos.x += (totalWidth - spacing) * horizontalAlign + offset; + pos.y += _calculateGlyphVerticalOffset(verticalAlign); + + uint n = 0u; + + while (n < c && pos.x > float(temp[n].y)) pos.x -= float(temp[n++].y); + if (n < c) renderGlyph(outColor, pos, temp[n].x, textColor, _screenPixelRange(scale)); + } + + return totalWidth; +} \ No newline at end of file diff --git a/src/sdk/materials/shaderLib/render-text.glsl b/src/sdk/materials/shaderLib/render-text.glsl new file mode 100644 index 0000000..d76ac91 --- /dev/null +++ b/src/sdk/materials/shaderLib/render-text.glsl @@ -0,0 +1,67 @@ +uniform usampler2D textTexture; +uniform uint textPointersCount; +uniform uint textPointersOffset; + +uint _readGlyphIdFromTexture(uint index) { + uint value = texelFetch(textTexture, ivec2(index, 0), 0).r; + return value; +} + +GlyphParams _findGlyph(vec2 pixelCoords, uvec3 textPointer, float spacing) { + + uint id = _readGlyphIdFromTexture(textPointer.x); + float width = glyphOffset[id].z + spacing; + vec2 position = pixelCoords.xy; + + uint i = textPointer.x; + + while(position.x >= width && i++ < textPointer.y - 1u) { + position.x -= width; + uint j = _readGlyphIdFromTexture(i); + + id = j; + width = glyphOffset[id].z + spacing; + }; + + return GlyphParams(position, id); +} + +uvec3 readTextPointerFromTexture(uint index) { + uvec3 pointer = uvec3(0u); + uint pos = (index * 3u) + textPointersOffset; + pointer.x = texelFetch(textTexture, ivec2(pos, 0), 0).r; + pointer.y = texelFetch(textTexture, ivec2(pos + 1u, 0), 0).r; + pointer.z = texelFetch(textTexture, ivec2(pos + 2u, 0), 0).r; + + return pointer; +} + +void renderText( + out vec3 outColor, + vec2 position, + uvec3 textPointer, + float verticalAlign, + float horizontalAlign, + vec3 textColor, + float spacing, + float scale +) { + + // do nothing if the text widht is 0 + if(textPointer.z == 0u) + return; + + float spacingWidth = spacing * float(textPointer.y - textPointer.x - 1u); + position.x += (float(textPointer.z) + spacingWidth) * horizontalAlign; + + //if (position.y > glyphLineHeight / 2.0 || position.y < -glyphLineHeight / 2.0) return; + + vec2 pos = position; + pos.y += _calculateGlyphVerticalOffset(verticalAlign); + + if(pos.x < 0.0) + return; + + GlyphParams params = _findGlyph(pos, textPointer, spacing); + renderGlyph(outColor, params.position, params.index, textColor, _screenPixelRange(scale)); +} \ No newline at end of file diff --git a/src/sdk/materials/shaderLib/rotation.glsl b/src/sdk/materials/shaderLib/rotation.glsl new file mode 100644 index 0000000..d9431b1 --- /dev/null +++ b/src/sdk/materials/shaderLib/rotation.glsl @@ -0,0 +1,19 @@ +mat2 rotation2d(float angle) { + float s = sin(angle); + float c = cos(angle); + return mat2(c, -s, s, c); +} + +mat4 rotation3d(vec3 axis, float angle) { + axis = normalize(axis); + float s = sin(angle); + float c = cos(angle); + float oc = 1.0 - c; + + return mat4( + oc * axis.x * axis.x + c, oc * axis.x * axis.y - axis.z * s, oc * axis.z * axis.x + axis.y * s, 0.0, + oc * axis.x * axis.y + axis.z * s, oc * axis.y * axis.y + c, oc * axis.y * axis.z - axis.x * s, 0.0, + oc * axis.z * axis.x - axis.y * s, oc * axis.y * axis.z + axis.x * s, oc * axis.z * axis.z + c, 0.0, + 0.0, 0.0, 0.0, 1.0 + ); +} \ No newline at end of file diff --git a/src/sdk/materials/shaderLib/sdf-functions.glsl b/src/sdk/materials/shaderLib/sdf-functions.glsl new file mode 100644 index 0000000..295f66f --- /dev/null +++ b/src/sdk/materials/shaderLib/sdf-functions.glsl @@ -0,0 +1,18 @@ +// SDF functions + +float sdfLine(vec2 p, vec2 a, vec2 b) { + vec2 pa = p - a; + vec2 ba = b - a; + float h = clamp(dot(pa, ba) / dot(ba, ba), 0.0, 1.0); + + return length(pa - ba * h); +} + +float sdfBox(vec2 p, vec2 b) { + vec2 d = abs(p) - b; + return length(max(d, 0.0)) + min(max(d.x, d.y), 0.0); +} + +float sdfCircle(vec2 p, float r) { + return length(p) - r; +} \ No newline at end of file diff --git a/src/sdk/materials/shaders/ribbon/fragment.glsl b/src/sdk/materials/shaders/ribbon/fragment.glsl new file mode 100644 index 0000000..ab47d3c --- /dev/null +++ b/src/sdk/materials/shaders/ribbon/fragment.glsl @@ -0,0 +1,79 @@ +#define RIBBON_MATERIAL + +uniform vec3 diffuse; +uniform vec3 emissive; +uniform float opacity; + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +void main() { + + vec4 diffuseColor = vec4( diffuse, opacity ); + //diffuseColor.rgb = vec3(vUv, 1.0); + #include + + ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); + vec3 totalEmissiveRadiance = emissive; + + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + + #ifdef NO_LIGHT + + vec3 outgoingLight = diffuseColor.rgb; + + #else + + // accumulation + #include + #include + #include + #include + + // modulation + #include + vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance; + + + #endif + + #include + #include + #include + #include + #include + #include + #include +} \ No newline at end of file diff --git a/src/sdk/materials/shaders/ribbon/vertex.glsl b/src/sdk/materials/shaders/ribbon/vertex.glsl new file mode 100644 index 0000000..bfba52f --- /dev/null +++ b/src/sdk/materials/shaders/ribbon/vertex.glsl @@ -0,0 +1,90 @@ +#define RIBBON_MATERIAL + +uniform float angle; +uniform float width; +uniform float offset; + +attribute vec3 tangent; +attribute vec3 binormal; + +varying vec3 vViewPosition; + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +mat4 rotation3d(vec3 axis, float angle) { + axis = normalize(axis); + float s = sin(angle); + float c = cos(angle); + float oc = 1.0 - c; + + return mat4( + oc * axis.x * axis.x + c, oc * axis.x * axis.y - axis.z * s, oc * axis.z * axis.x + axis.y * s, 0.0, + oc * axis.x * axis.y + axis.z * s, oc * axis.y * axis.y + c, oc * axis.y * axis.z - axis.x * s, 0.0, + oc * axis.z * axis.x - axis.y * s, oc * axis.y * axis.z + axis.x * s, oc * axis.z * axis.z + c, 0.0, + 0.0, 0.0, 0.0, 1.0 + ); +} + +void main() { + + #include + #include + #include + #include + #include + + mat4 rotation = rotation3d(tangent, angle); + + vec3 direction = (rotation * vec4(binormal, 0.0)).xyz; + + vec4 worldPosition = (modelMatrix * vec4(position, 1.0)); + + float dist = width; + + dist = dist + (uv.x > 0.5 ? -offset : offset); + + worldPosition.xyz = worldPosition.xyz + dist * direction; + + #include + #include + #include + + vec3 objectNormal =(rotation * vec4(normal, 1.0)).xyz; + + #include + #include + + #include + + #include + #include + #include + + vec4 mvPosition = viewMatrix * worldPosition; + gl_Position = projectionMatrix * mvPosition; + + #include + #include + + vViewPosition = - mvPosition.xyz; + + #include + #include + #include + #include + + vUv = uv; + +} diff --git a/src/sdk/materials/tube-material.ts b/src/sdk/materials/tube-material.ts index 068cf44..48c7969 100644 --- a/src/sdk/materials/tube-material.ts +++ b/src/sdk/materials/tube-material.ts @@ -1,6 +1,6 @@ import { Color, MeshBasicMaterialParameters, ShaderLib, ShaderMaterial, UniformsUtils } from 'three' -import vertexShader from './shaders/trajectory/vertex.glsl' import fragmentShader from './shaders/trajectory/fragment.glsl' +import vertexShader from './shaders/trajectory/vertex.glsl' export class TubeMaterial extends ShaderMaterial { @@ -25,5 +25,5 @@ export class TubeMaterial extends ShaderMaterial { set color(color: Color) { this.uniforms.diffuse.value.set(color) - } + } } \ No newline at end of file diff --git a/src/sdk/utils/glsl.ts b/src/sdk/utils/glsl.ts new file mode 100644 index 0000000..e97a946 --- /dev/null +++ b/src/sdk/utils/glsl.ts @@ -0,0 +1,3 @@ +export function arrayToMacro(type: string, array: number[]) { + return `${type}[${array.length}](${array.join(',')})` +} \ No newline at end of file diff --git a/src/sdk/utils/glyphs.ts b/src/sdk/utils/glyphs.ts new file mode 100644 index 0000000..32d7e0c --- /dev/null +++ b/src/sdk/utils/glyphs.ts @@ -0,0 +1,169 @@ +import { + DataTexture, + RedIntegerFormat, + Uniform, + UniformsGroup, + UnsignedShortType, + Vector2, + Vector3, + Vector4 +} from 'three' +import { Vec3 } from '../types/common' + +export type Glyph = { + position: [number, number] + dimension: [number, number] + offset: [number, number] + spacing: number +} + +export type EncodedTextSegment = { + indices: number[] + width: number +} + +export type EncodedTextTexture = { + texture: DataTexture + textPointersOffset: number + textPointersCount: number +} + +export type GlyphConfig = { + glyphsCount: number + glyphData: UniformsGroup + encodeText: (text: string) => EncodedTextSegment + encodeTextTexture: (textSegments: string[] | string) => EncodedTextTexture + dispose: () => void +} + +export interface MsdfFontJson { + info: { + size: number + } + common: { + scaleW: number + scaleH: number + lineHeight: number + base: number + } + chars: { + id: number + index: number + char: string + width: number + height: number + xoffset: number + yoffset: number + xadvance: number + x: number + y: number + }[] + distanceField: { + distanceRange: number + } +} + +export function createConfig(json: MsdfFontJson): GlyphConfig { + const charMap = new Map( + json.chars.map((c, i) => [c.id, { index: i, spacing: c.xadvance }]) + ) + const missingChar = 32 + + const encodeText = (text: string): EncodedTextSegment => { + const indices: number[] = [] + let width = 0 + + for (let i = 0; i < text.length; i++) { + let asciiCode = text.charCodeAt(i) + if (!charMap.has(asciiCode)) { + asciiCode = missingChar + } + const character = charMap.get(asciiCode) + if (character) { + indices.push(character.index) + width += character.spacing + } + } + return { + indices, + width, + } + } + + const createTextTexture = (textSegments: string[] | string) => { + + textSegments = Array.isArray(textSegments) ? textSegments : [textSegments] + const pointers: Vec3[] = [] + + const buffer: number[] = [] + for (let s = 0; s < textSegments.length; s++) { + const text = textSegments[s] + const encoded = encodeText(text) + const segmentStart = buffer.length + buffer.push(...encoded.indices) + pointers.push([ + segmentStart, + buffer.length, + encoded.width, + ]) + } + + if (!buffer.length) { + buffer.push(0) + } + + const textPointersOffset = buffer.length + + pointers.forEach(p => buffer.push(...p)) + + const texture = new DataTexture( + new Uint16Array(buffer), + buffer.length, + 1, + RedIntegerFormat, + UnsignedShortType + ) + //console.log(createUniformBuffer(new Uint8Array(buffer))) + texture.needsUpdate = true + + return { texture, textPointersOffset, textPointersCount: pointers.length } + } + + const glyphData = new UniformsGroup() + glyphData.setName('GlyphData') + + const positions: Uniform[] = [] + const offsets: Uniform[] = [] + + json.chars.forEach((char) => { + positions.push( + new Uniform(new Vector4(char.x, char.y, char.width, char.height)) + ) + offsets.push( + new Uniform(new Vector3(char.xoffset, char.yoffset, char.xadvance)) + ) + }) + glyphData.add(positions) + glyphData.add(offsets) + glyphData.add( + new Uniform(new Vector2(json.common.scaleW, json.common.scaleH)) + ) + glyphData.add(new Uniform(json.info.size)) + glyphData.add(new Uniform(json.distanceField.distanceRange)) + glyphData.add(new Uniform(json.common.lineHeight)) + glyphData.add(new Uniform(json.common.base)) + + const dispose = () => { + glyphData.dispose() + } + + const config: GlyphConfig = { + glyphsCount: json.chars.length, + glyphData, + encodeText, + encodeTextTexture: createTextTexture, + dispose, + } + + return config +} diff --git a/src/sdk/utils/strings.ts b/src/sdk/utils/strings.ts index 9ff1b3e..cf1a43f 100644 --- a/src/sdk/utils/strings.ts +++ b/src/sdk/utils/strings.ts @@ -9,4 +9,8 @@ export function calculateHashValue(str?: string) { hash |= 0; // Convert to 32bit integer } return hash; +} + +export function titleCase(str: string) { + return str.replace(/(^|\s)\S/g, t => t.toUpperCase()) } \ No newline at end of file diff --git a/src/sdk/utils/trajectory.ts b/src/sdk/utils/trajectory.ts index 5eca45f..60ad91f 100644 --- a/src/sdk/utils/trajectory.ts +++ b/src/sdk/utils/trajectory.ts @@ -32,6 +32,7 @@ export interface Trajectory { curve: Curve3D // get the point along the trajectory according to a MD msl value. Returns null if out of range. getPointAtDepth: (md: number, clamped?: boolean) => Vec3 | null + getPositionAtDepth: (md: number, clamped?: boolean) => number | null } /** @@ -61,20 +62,31 @@ export function getTrajectory(id: string, poslogMsl: PositionLog | null) : Traje const bottom = poslogMsl[poslogMsl.length - 1] const length = bottom - top + const getPositionAtDepth = (md: number, clamped = false) => { + let pos = (md - top) / length + if (clamped) { + pos = clamp(pos, 0, 1) + } + if (pos < 0 || pos > 1) return null + + return pos + } + const trajectory: Trajectory = { id, curve, get measuredLength() { return length }, get measuredTop() { return top }, get measuredBottom() { return bottom }, + getPositionAtDepth, getPointAtDepth: (md, clamped = false) => { - let pos = (md - top) / length - if (clamped) { - pos = clamp(pos, 0, 1) - } - if (pos < 0 || pos > 1) return null - - return curve.getPointAt(pos) + // let pos = (md - top) / length + // if (clamped) { + // pos = clamp(pos, 0, 1) + // } + // if (pos < 0 || pos > 1) return null + const pos = getPositionAtDepth(md, clamped) + return pos !== null ? curve.getPointAt(pos) : null } } diff --git a/src/storybook/decorators/canvas-3d-decorator.tsx b/src/storybook/decorators/canvas-3d-decorator.tsx index 3225eb6..bace431 100644 --- a/src/storybook/decorators/canvas-3d-decorator.tsx +++ b/src/storybook/decorators/canvas-3d-decorator.tsx @@ -1,19 +1,20 @@ import { CameraControls, Environment } from '@react-three/drei' import { Canvas } from '@react-three/fiber' -import { useEffect } from 'react' +import { useCallback, useEffect } from 'react' import { cameraManager } from '../../sdk/managers/CameraManager' import { PI2 } from '../../sdk/utils/trigonometry' export const Canvas3dDecorator = (Story: any, { parameters }: any) => { const scale = parameters.scale || 100 + const initControls = useCallback((controls: CameraControls) => { + cameraManager.setControls(controls) + if (parameters.cameraTarget) cameraManager.setTarget(parameters.cameraTarget) + }, [parameters.cameraTarget]) + useEffect(() => { if (cameraManager.controls && parameters.cameraTarget) { - cameraManager.controls.setTarget( - parameters.cameraTarget[0], - parameters.cameraTarget[1], - parameters.cameraTarget[2], - ) + cameraManager.setTarget(parameters.cameraTarget) } }, [parameters.cameraTarget]) @@ -25,7 +26,7 @@ export const Canvas3dDecorator = (Story: any, { parameters }: any) => { position: parameters.cameraPosition || [-1 * scale, 1 * scale, -1 * scale], fov: 30, }} - gl={{ logarithmicDepthBuffer: true, autoClear: !!parameters.autoClear, stencil: false }} + gl={{ logarithmicDepthBuffer: true, autoClear: !!parameters.autoClear, stencil: false, pixelRatio: parameters.pixelRatio || devicePixelRatio }} style={{ backgroundColor: parameters.background || '#000', position: 'absolute', @@ -45,12 +46,12 @@ export const Canvas3dDecorator = (Story: any, { parameters }: any) => { {/* */} - + ) } \ No newline at end of file diff --git a/src/storybook/decorators/perf.css b/src/storybook/decorators/perf.css new file mode 100644 index 0000000..778ceb8 --- /dev/null +++ b/src/storybook/decorators/perf.css @@ -0,0 +1,4 @@ +.perf-stats { + position: static !important; + float: right; +} \ No newline at end of file diff --git a/src/storybook/decorators/performance-decorator.tsx b/src/storybook/decorators/performance-decorator.tsx index 48e85ac..36d9193 100644 --- a/src/storybook/decorators/performance-decorator.tsx +++ b/src/storybook/decorators/performance-decorator.tsx @@ -1,8 +1,9 @@ -// import { Perf } from 'r3f-perf' +import { Stats } from '@react-three/drei' +import './perf.css' -// export const PerformanceDecorator = (Story: any) => ( -// <> -// -// -// -// ) \ No newline at end of file +export const PerformanceDecorator = (Story: any) => ( + <> + + + +) \ No newline at end of file diff --git a/src/storybook/decorators/workers/remote-generator-registry.ts b/src/storybook/decorators/workers/remote-generator-registry.ts index e49611e..eb7587f 100644 --- a/src/storybook/decorators/workers/remote-generator-registry.ts +++ b/src/storybook/decorators/workers/remote-generator-registry.ts @@ -14,7 +14,9 @@ import { positionMarkers } from '../../../components/Wellbores/PositionMarkers/p import { shoeSymbols } from '../../../components/Wellbores/Shoes/shoes-defs' import { tubeTrajectory } from '../../../components/Wellbores/TubeTrajectory/tube-geometry-defs' import { wellboreBounds } from '../../../components/Wellbores/WellboreBounds/wellbore-bounds-defs' +import { wellboreFormationColumn } from '../../../components/Wellbores/WellboreFormationColumn/wellbore-formation-column-defs' import { wellboreLabel } from '../../../components/Wellbores/WellboreLabel/wellbore-label-defs' + import { calculateWellboreBounds, generateBasicTrajectory, @@ -31,6 +33,7 @@ import { generateSurfaceGeometry, generateSurfaceTexturesData, generateTubeTrajectory, + generateWellboreFormationColumnGeometries, generateWellboreLabel, } from '../../../generators' @@ -54,5 +57,6 @@ registry.add(surfaceGeometry, generateSurfaceGeometry) registry.add(surfaceTextures, generateSurfaceTexturesData) registry.add(perforationSymbols, generatePerforations) registry.add(positionMarkers, generatePositionMarkers) +registry.add(wellboreFormationColumn, generateWellboreFormationColumnGeometries) expose(registry) diff --git a/src/storybook/dependencies/api.ts b/src/storybook/dependencies/api.ts index 3d1b65a..b6c54e2 100644 --- a/src/storybook/dependencies/api.ts +++ b/src/storybook/dependencies/api.ts @@ -1,5 +1,5 @@ export async function get(url: string): Promise { - + //console.log(self) // use correct path when not running locally if (!self.location.origin.startsWith('http://')) { url = '/videx-3d' + url diff --git a/src/storybook/examples/Wellbore.example.stories.tsx b/src/storybook/examples/Wellbore.example.stories.tsx index bd656c7..d7fc5d3 100644 --- a/src/storybook/examples/Wellbore.example.stories.tsx +++ b/src/storybook/examples/Wellbore.example.stories.tsx @@ -108,7 +108,7 @@ export const Default: Story = { useEffect(() => { dispatchEvent(new WellboreSelectedEvent({ id: args.id })) }, [args.id]) - console.log(args.id) + return ( <> diff --git a/src/storybook/examples/Wells.example.stories.tsx b/src/storybook/examples/Wells.example.stories.tsx index 5379f40..48511c3 100644 --- a/src/storybook/examples/Wells.example.stories.tsx +++ b/src/storybook/examples/Wells.example.stories.tsx @@ -25,6 +25,7 @@ import { Shoes } from '../../components/Wellbores/Shoes/Shoes' import { TubeTrajectory } from '../../components/Wellbores/TubeTrajectory/TubeTrajectory' import { Wellbore } from '../../components/Wellbores/Wellbore/Wellbore' import { WellboreBounds } from '../../components/Wellbores/WellboreBounds/WellboreBounds' +import { WellboreFormationColumn } from '../../components/Wellbores/WellboreFormationColumn/WellboreFormationColumn' import { WellboreLabel } from '../../components/Wellbores/WellboreLabel/WellboreLabel' import { Wells } from '../../components/Wellbores/Wells/Wells' import { WellboreSelectedEvent, wellboreSelectedEventType } from '../../events/wellbore-events' @@ -50,6 +51,7 @@ const colorScale = scaleOrdinal(["tomato", "#4e79a7", "#f28e2c", "#76b7b2", "#59 const utmZone = storyArgs.utmZone const origin = storyArgs.origin as Vec2 +const stratColumnId = storyArgs.defaultStratColumn const v = new Vector3() @@ -71,6 +73,7 @@ type ExampleProps = { contoursColor: string, depthMarkerInterval: number, showPicks: boolean, + showFormationColumns: boolean, showShoes: boolean, showDepthMarkers: boolean, showCasingAndCompletion: boolean, @@ -303,6 +306,11 @@ const Example = (args: ExampleProps) => { {args.showShoes && ()} + {args.showFormationColumns && ( + + + + )} {args.showCasingAndCompletion && ( @@ -313,7 +321,14 @@ const Example = (args: ExampleProps) => { {args.showPerforations && } {(args.showDepthMarkers && isActiveWell) && } - {args.showPicks && } + {args.showPicks && ( + + )} {/* {isSelected && } */} @@ -462,6 +477,7 @@ export const Default: Story = { contoursColor: '#000000', depthMarkerInterval: 250, showPicks: false, + showFormationColumns: false, showShoes: true, showDepthMarkers: false, showCasingAndCompletion: false, diff --git a/src/storybook/story-args.json b/src/storybook/story-args.json index 83637de..debb8d3 100644 --- a/src/storybook/story-args.json +++ b/src/storybook/story-args.json @@ -1 +1 @@ -{"utmZone":"31N","origin":[434500,6478000],"defaultWellbore":"ad215042-03ee-2b7e-e053-c818a488c79a","defaultWell":"NO 15/9-F-1","wellboreOptions":{"ad215042-0217-2b7e-e053-c818a488c79a":"NO 15/9-19 A","ad215042-0218-2b7e-e053-c818a488c79a":"NO 15/9-19 B","ad215042-f9cd-2b7e-e053-c818a488c79a":"NO 15/9-19 BT2","ad215042-0219-2b7e-e053-c818a488c79a":"NO 15/9-19 S","ad215042-021a-2b7e-e053-c818a488c79a":"NO 15/9-19 SR","ad215042-0398-2b7e-e053-c818a488c79a":"NO 15/9-F-1","ad215042-0399-2b7e-e053-c818a488c79a":"NO 15/9-F-1 A","ad215042-ef86-2b7e-e053-c818a488c79a":"NO 15/9-F-1 B","ad215042-039a-2b7e-e053-c818a488c79a":"NO 15/9-F-1 C","ad215042-03e6-2b7e-e053-c818a488c79a":"NO 15/9-F-10","ad215042-f3be-2b7e-e053-c818a488c79a":"NO 15/9-F-11","ad215042-03e9-2b7e-e053-c818a488c79a":"NO 15/9-F-11 A","ad215042-03ea-2b7e-e053-c818a488c79a":"NO 15/9-F-11 B","ad215042-03eb-2b7e-e053-c818a488c79a":"NO 15/9-F-11 T2","ad215042-03ec-2b7e-e053-c818a488c79a":"NO 15/9-F-12","ad215042-03ee-2b7e-e053-c818a488c79a":"NO 15/9-F-14","ad215042-03ef-2b7e-e053-c818a488c79a":"NO 15/9-F-15","ad215042-03f0-2b7e-e053-c818a488c79a":"NO 15/9-F-15 A","ad215043-6e11-2b7e-e053-c818a488c79a":"NO 15/9-F-15 B","ad215042-03f1-2b7e-e053-c818a488c79a":"NO 15/9-F-15 C","ad215042-03f2-2b7e-e053-c818a488c79a":"NO 15/9-F-15 D","ad215042-03f6-2b7e-e053-c818a488c79a":"NO 15/9-F-4","ad215042-03f7-2b7e-e053-c818a488c79a":"NO 15/9-F-5","ad215042-03f9-2b7e-e053-c818a488c79a":"NO 15/9-F-7","ad215042-eccc-2b7e-e053-c818a488c79a":"NO 15/9-F-9","ad215042-03fb-2b7e-e053-c818a488c79a":"NO 15/9-F-9 A"},"surfaceOptions":{"e765e8eedfe5c5a0062d94ff4f3da081":"Utsira Fm. Top","826a8f3352a650d4ca1ee72a6febbe9f":"Utsira Fm. Base","53c2e2d9c19bfbf6e7e5085da630ff3a":"Skade Fm. Top","3827c1c85fd0afaf4488872d5386cc82":"Skade Fm. Base","5a34832b7c3833e25f1256319ed2c3db":"Grid Fm. Top","780334378c4e143f3a8d1eda2f22ecdc":"Grid Fm. Base","f0703083e8c9dad1ca5c98e6cc2d67ea":"Balder Fm. Base","0f620e8dea5bf8ed942e26e14547ad42":"Sele Fm. Top","6991507756bd9ac9d5e32a01408edf1e":"Lista Fm. Top","6a54504d63ca383601cd46b68308f068":"Ty Fm. Top","91912be4f979b3dcbca7d6a723ad4065":"Ekofisk Fm. Top","65c2727d98cfc8755747873334f4a221":"Tor Fm. Top","749e1efc6cfba24c53b1de84fe1df59f":"Hod Fm. Top","62f7c20fafe3b8e5c26763543a29d8ff":"Draupne Fm. Top","80c1a8354a9afede98f0a42c5c98c436":"Hidra Fm. Top","c7c94e75f3a9a32d2d581a3ea9009ab9":"Roedby Fm. Top","1f7c7090ce5eaa5b2aa31e8093c7c3f7":"Hugin Fm. VOLVE Top","28b343f232656f963c8ec7055ed55823":"Hugin Fm. VOLVE Base","36bd48dee556a40f2017b9fd5a51a817":"Aasgard Fm. Top"}} \ No newline at end of file +{"utmZone":"31N","origin":[434500,6478000],"defaultWellbore":"ad215042-03ee-2b7e-e053-c818a488c79a","defaultWell":"NO 15/9-F-1","defaultStratColumn":"ad215071-c509-2e4b-e053-c918a4881b5c","wellboreOptions":{"ad215042-0217-2b7e-e053-c818a488c79a":"NO 15/9-19 A","ad215042-0218-2b7e-e053-c818a488c79a":"NO 15/9-19 B","ad215042-f9cd-2b7e-e053-c818a488c79a":"NO 15/9-19 BT2","ad215042-0219-2b7e-e053-c818a488c79a":"NO 15/9-19 S","ad215042-021a-2b7e-e053-c818a488c79a":"NO 15/9-19 SR","ad215042-0398-2b7e-e053-c818a488c79a":"NO 15/9-F-1","ad215042-0399-2b7e-e053-c818a488c79a":"NO 15/9-F-1 A","ad215042-ef86-2b7e-e053-c818a488c79a":"NO 15/9-F-1 B","ad215042-039a-2b7e-e053-c818a488c79a":"NO 15/9-F-1 C","ad215042-03e6-2b7e-e053-c818a488c79a":"NO 15/9-F-10","ad215042-f3be-2b7e-e053-c818a488c79a":"NO 15/9-F-11","ad215042-03e9-2b7e-e053-c818a488c79a":"NO 15/9-F-11 A","ad215042-03ea-2b7e-e053-c818a488c79a":"NO 15/9-F-11 B","ad215042-03eb-2b7e-e053-c818a488c79a":"NO 15/9-F-11 T2","ad215042-03ec-2b7e-e053-c818a488c79a":"NO 15/9-F-12","ad215042-03ee-2b7e-e053-c818a488c79a":"NO 15/9-F-14","ad215042-03ef-2b7e-e053-c818a488c79a":"NO 15/9-F-15","ad215042-03f0-2b7e-e053-c818a488c79a":"NO 15/9-F-15 A","ad215043-6e11-2b7e-e053-c818a488c79a":"NO 15/9-F-15 B","ad215042-03f1-2b7e-e053-c818a488c79a":"NO 15/9-F-15 C","ad215042-03f2-2b7e-e053-c818a488c79a":"NO 15/9-F-15 D","ad215042-03f6-2b7e-e053-c818a488c79a":"NO 15/9-F-4","ad215042-03f7-2b7e-e053-c818a488c79a":"NO 15/9-F-5","ad215042-03f9-2b7e-e053-c818a488c79a":"NO 15/9-F-7","ad215042-eccc-2b7e-e053-c818a488c79a":"NO 15/9-F-9","ad215042-03fb-2b7e-e053-c818a488c79a":"NO 15/9-F-9 A"},"surfaceOptions":{"e765e8eedfe5c5a0062d94ff4f3da081":"Utsira Fm. Top","826a8f3352a650d4ca1ee72a6febbe9f":"Utsira Fm. Base","53c2e2d9c19bfbf6e7e5085da630ff3a":"Skade Fm. Top","3827c1c85fd0afaf4488872d5386cc82":"Skade Fm. Base","5a34832b7c3833e25f1256319ed2c3db":"Grid Fm. Top","780334378c4e143f3a8d1eda2f22ecdc":"Grid Fm. Base","f0703083e8c9dad1ca5c98e6cc2d67ea":"Balder Fm. Base","0f620e8dea5bf8ed942e26e14547ad42":"Sele Fm. Top","6991507756bd9ac9d5e32a01408edf1e":"Lista Fm. Top","6a54504d63ca383601cd46b68308f068":"Ty Fm. Top","91912be4f979b3dcbca7d6a723ad4065":"Ekofisk Fm. Top","65c2727d98cfc8755747873334f4a221":"Tor Fm. Top","749e1efc6cfba24c53b1de84fe1df59f":"Hod Fm. Top","62f7c20fafe3b8e5c26763543a29d8ff":"Draupne Fm. Top","80c1a8354a9afede98f0a42c5c98c436":"Hidra Fm. Top","c7c94e75f3a9a32d2d581a3ea9009ab9":"Roedby Fm. Top","1f7c7090ce5eaa5b2aa31e8093c7c3f7":"Hugin Fm. VOLVE Top","28b343f232656f963c8ec7055ed55823":"Hugin Fm. VOLVE Base","36bd48dee556a40f2017b9fd5a51a817":"Aasgard Fm. Top"},"stratUnitOptions":["NORDLAND GP.","Utsira Fm.","HORDALAND GP.","Skade Fm.","Grid Fm.","Frigg Fm.","ROGALAND GP.","Balder Fm.","Sele Fm.","Lista Fm.","Ty Fm.","SHETLAND GP.","Ekofisk Fm.","Tor Fm.","Hod Fm.","Blodoeks Fm.","Hidra Fm.","CROMER KNOLL GP.","Roedby Fm.","Aasgard Fm.","Draupne Fm.","VIKING GP.","Heather Fm.","Heather Fm. Sand VOLVE","VESTLAND GP.","Hugin Fm. 18 VOLVE","Hugin Fm.","Hugin Fm. 17 VOLVE","Hugin Fm. 16 VOLVE","Hugin Fm. 15 VOLVE","Hugin Fm. 14 VOLVE","Hugin Fm. 13 VOLVE","Hugin Fm. 12 VOLVE","Hugin Fm. 11 VOLVE","Hugin Fm. 10 VOLVE","Hugin Fm. 9 VOLVE","Hugin Fm. 8 VOLVE","Hugin Fm. 7 VOLVE","Hugin Fm. 6 VOLVE","Hugin Fm. 5 VOLVE","Hugin Fm. 4 VOLVE","Hugin Fm. 3 VOLVE","Hugin Fm. 2 VOLVE","Hugin Fm. 1 VOLVE","Sleipner Fm.","HEGRE GP.","Skagerrak Fm.","Smith Bank Fm."],"stratUnitTypeOptions":["group","formation","subzone"]} \ No newline at end of file diff --git a/tests/mocks/mock-data/picks-mocks.ts b/tests/mocks/mock-data/picks-mocks.ts new file mode 100644 index 0000000..e4ad218 --- /dev/null +++ b/tests/mocks/mock-data/picks-mocks.ts @@ -0,0 +1,254 @@ +import { Pick } from '../../../src/sdk' + +const aPicks: Pick[] = [ + { + id: 'a1', + wellboreId: 'a', + pickIdentifier: 'A Top', + mdMsl: 100, + tvdMsl: 100, + }, + { + id: 'a2', + wellboreId: 'a', + pickIdentifier: 'A Base', + mdMsl: 500, + tvdMsl: 497, + }, + { + id: 'a3', + wellboreId: 'a', + pickIdentifier: 'B Top', + mdMsl: 500, + tvdMsl: 497, + }, + { + id: 'a4', + wellboreId: 'a', + pickIdentifier: 'B Base', + mdMsl: 950, + tvdMsl: 900, + }, + { + id: 'a5', + wellboreId: 'a', + pickIdentifier: 'C Top', + mdMsl: 950, + tvdMsl: 900, + }, + { + id: 'a6', + wellboreId: 'a', + pickIdentifier: 'C Base', + mdMsl: 1000, + tvdMsl: 950, + }, + { + id: 'a7', + wellboreId: 'a', + pickIdentifier: 'D Top', + mdMsl: 100, + tvdMsl: 100, + }, + { + id: 'a8', + wellboreId: 'a', + pickIdentifier: 'D Base', + mdMsl: 400, + tvdMsl: 397, + }, + { + id: 'a9', + wellboreId: 'a', + pickIdentifier: 'E Top', + mdMsl: 400, + tvdMsl: 397, + }, + { + id: 'a10', + wellboreId: 'a', + pickIdentifier: 'E Base', + mdMsl: 500, + tvdMsl: 497, + }, + { + id: 'a11', + wellboreId: 'a', + pickIdentifier: 'Seabed', + mdMsl: 100, + tvdMsl: 100, + }, +] + +const bPicks: Pick[] = [ + { + id: 'b1', + wellboreId: 'b', + pickIdentifier: 'B Top', + mdMsl: 900, + tvdMsl: 897, + }, + { + id: 'b2', + wellboreId: 'b', + pickIdentifier: 'B Base', + mdMsl: 2550, + tvdMsl: 950, + }, + { + id: 'b3', + wellboreId: 'b', + pickIdentifier: 'C Top', + mdMsl: 2550, + tvdMsl: 950, + }, + { + id: 'b4', + wellboreId: 'b', + pickIdentifier: 'C Base', + mdMsl: 3000, + tvdMsl: 970, + }, + { + id: 'b5', + wellboreId: 'b', + pickIdentifier: 'F Top', + mdMsl: 900, + tvdMsl: 897, + }, + { + id: 'b6', + wellboreId: 'b', + pickIdentifier: 'F Base', + mdMsl: 2000, + tvdMsl: 910, + }, + { + id: 'b7', + wellboreId: 'b', + pickIdentifier: 'G Top', + mdMsl: 2000, + tvdMsl: 910, + }, + { + id: 'b8', + wellboreId: 'b', + pickIdentifier: 'G Base', + mdMsl: 2550, + tvdMsl: 950, + }, + { + id: 'b9', + wellboreId: 'b', + pickIdentifier: 'H Top', + mdMsl: 2550, + tvdMsl: 950, + }, + { + id: 'b10', + wellboreId: 'b', + pickIdentifier: 'H Base', + mdMsl: 2900, + tvdMsl: 968, + }, + { + id: 'b11', + wellboreId: 'b', + pickIdentifier: 'I Top', + mdMsl: 2900, + tvdMsl: 968, + }, + { + id: 'b12', + wellboreId: 'b', + pickIdentifier: 'I Base', + mdMsl: 3000, + tvdMsl: 970, + }, +] + +const cPicks: Pick[] = [ + { + id: 'c1', + wellboreId: 'c', + pickIdentifier: 'C Top', + mdMsl: 2800, + tvdMsl: 968, + }, + { + id: 'c2', + wellboreId: 'c', + pickIdentifier: 'C Base', + mdMsl: 3600, + tvdMsl: 980, + }, + { + id: 'c3', + wellboreId: 'c', + pickIdentifier: 'H Top', + mdMsl: 2800, + tvdMsl: 968, + }, + { + id: 'c4', + wellboreId: 'c', + pickIdentifier: 'H Base', + mdMsl: 2900, + tvdMsl: 970, + }, + { + id: 'c5', + wellboreId: 'c', + pickIdentifier: 'I Top', + mdMsl: 2900, + tvdMsl: 970, + }, + { + id: 'c6', + wellboreId: 'c', + pickIdentifier: 'I Base', + mdMsl: 3000, + tvdMsl: 971, + }, + { + id: 'c7', + wellboreId: 'c', + pickIdentifier: 'J Top', + mdMsl: 3000, + tvdMsl: 971, + }, + { + id: 'c8', + wellboreId: 'c', + pickIdentifier: 'J Base', + mdMsl: 3600, + tvdMsl: 980, + }, + { + id: 'c9', + wellboreId: 'c', + pickIdentifier: 'K Top', + mdMsl: 3200, + tvdMsl: 975, + }, + { + id: 'c10', + wellboreId: 'c', + pickIdentifier: 'K Base', + mdMsl: 3500, + tvdMsl: 978, + }, + { + id: 'c11', + wellboreId: 'c', + pickIdentifier: 'Termination', + mdMsl: 3800, + tvdMsl: 990, + }, +] + +export default { + 'a': aPicks, + 'b': bPicks, + 'c': cPicks, +} \ No newline at end of file diff --git a/tests/mocks/mock-data/stratcolumn-mocks.ts b/tests/mocks/mock-data/stratcolumn-mocks.ts new file mode 100644 index 0000000..24c927d --- /dev/null +++ b/tests/mocks/mock-data/stratcolumn-mocks.ts @@ -0,0 +1,145 @@ +import { StratColumn } from '../../../src/sdk' + +const stratColumn: StratColumn = { + id: 'a', + name: "Test strat column", + type: 'Test', + units: [ + { + id: "u1", + name: "A", + base: "A Base", + top: "A Top", + topAge: 0, + baseAge: 10, + color: "#ff0000", + level: 1, + parent: null, + unitType: 'Test' + }, + { + id: "u2", + name: "B", + base: "B Base", + top: "B Top", + topAge: 10, + baseAge: 20, + color: "#00ff00", + level: 1, + parent: null, + unitType: 'Test' + }, + { + id: "u3", + name: "C", + base: "C Base", + top: "C Top", + topAge: 20, + baseAge: 30, + color: "#0000ff", + level: 1, + parent: null, + unitType: 'Test' + }, + { + id: "u4", + name: "D", + base: "D Base", + top: "D Top", + topAge: 0, + baseAge: 5, + color: "#ffff00", + level: 2, + parent: 'A', + unitType: 'Test' + }, + { + id: "u5", + name: "E", + base: "E Base", + top: "E Top", + topAge: 5, + baseAge: 10, + color: "#ff00ff", + level: 2, + parent: 'A', + unitType: 'Test' + }, + { + id: "u6", + name: "F", + base: "F Base", + top: "F Top", + topAge: 10, + baseAge: 15, + color: "#00ff50", + level: 2, + parent: 'B', + unitType: 'Test' + }, + { + id: "u7", + name: "G", + base: "G Base", + top: "G Top", + topAge: 15, + baseAge: 20, + color: "#00ffff", + level: 2, + parent: 'B', + unitType: 'Test' + }, + { + id: "u8", + name: "H", + base: "H Base", + top: "H Top", + topAge: 20, + baseAge: 22, + color: "#ccff50", + level: 2, + parent: 'C', + unitType: 'Test' + }, + { + id: "u9", + name: "I", + base: "I Base", + top: "I Top", + topAge: 22, + baseAge: 27, + color: "#ccffff", + level: 2, + parent: 'C', + unitType: 'Test' + }, + { + id: "u10", + name: "J", + base: "J Base", + top: "J Top", + topAge: 27, + baseAge: 30, + color: "#ccff55", + level: 2, + parent: 'C', + unitType: 'Test' + }, + { + id: "u11", + name: "K", + base: "K Base", + top: "K Top", + topAge: 28, + baseAge: 30, + color: "#cc9955", + level: 3, + parent: 'J', + unitType: 'Test' + } + ] +} + +export default { + 'a': stratColumn +} \ No newline at end of file diff --git a/tests/mocks/mock-data/wellbore-mocks.ts b/tests/mocks/mock-data/wellbore-mocks.ts new file mode 100644 index 0000000..4845672 --- /dev/null +++ b/tests/mocks/mock-data/wellbore-mocks.ts @@ -0,0 +1,51 @@ +import { WellboreHeader } from '../../../src/sdk' + +const wellboreHeaderMocks: WellboreHeader[] = [ + { + id: 'a', + well: 'NO 80/5 2', + depthMdMsl: 1000, + depthReferenceElevation: 0, + drilled: new Date(1980, 0, 10, 12, 0, 0, 0), + easting: 1, + northing: 5, + kickoffDepthMsl: 100, + name: 'NO 80/5 2', + parent: null, + status: 'plugged and abandoned', + waterDepth: 100, + }, + { + id: 'b', + well: 'NO 80/5 2', + depthMdMsl: 3000, + depthReferenceElevation: 0, + drilled: new Date(1980, 2, 10, 12, 0, 0, 0), + easting: 1, + northing: 5, + kickoffDepthMsl: 900, + name: 'NO 80/5 2 T2', + parent: 'NO 80/5 2', + status: 'plugged and abandoned', + waterDepth: 100, + }, + { + id: 'c', + well: 'NO 80/5 2', + depthMdMsl: 3800, + depthReferenceElevation: 0, + drilled: new Date(1980, 4, 10, 12, 0, 0, 0), + easting: 1, + northing: 5, + kickoffDepthMsl: 2800, + name: 'NO 80/5 2 T3', + parent: 'NO 80/5 2 T2', + status: 'operating', + waterDepth: 100, + } +] + +export default wellboreHeaderMocks.reduce>((acc, d) => { + acc[d.id] = d + return acc +}, {}) \ No newline at end of file diff --git a/tests/mocks/test-store.ts b/tests/mocks/test-store.ts new file mode 100644 index 0000000..0a4dd1e --- /dev/null +++ b/tests/mocks/test-store.ts @@ -0,0 +1,31 @@ +import _filter from 'lodash.filter' +import { KeyType, ReadonlyStore } from '../../src/sdk' +import picks from './mock-data/picks-mocks' +import stratColumns from './mock-data/stratcolumn-mocks' +import wellboreHeaders from './mock-data/wellbore-mocks' + +export class TestStore implements ReadonlyStore { + data: Record = { + 'wellbore-headers': wellboreHeaders, + 'strat-columns': stratColumns, + 'picks': picks, + } + + async get(dataType: string, key: KeyType) { + if (!this.data[dataType] || !this.data[dataType][key]) return null + return this.data[dataType][key] as T + } + + async all(dataType: string) { + if (!this.data[dataType]) return null + return Object.values(this.data[dataType]) as T[] + } + + async query(dataType: string, query: Partial) { + if (query) { + const data = await this.all(dataType) + return (data ? _filter(data, query) : []) as T[] + } + return await this.all(dataType) || [] + } +} \ No newline at end of file diff --git a/tests/picks-helper.test.ts b/tests/picks-helper.test.ts new file mode 100644 index 0000000..7fa14ff --- /dev/null +++ b/tests/picks-helper.test.ts @@ -0,0 +1,93 @@ +import { createFormationIntervals, getFormationMarkers, getUnitPicks, mergeFormationIntervals } from '../src/sdk/data/helpers/picks-helpers' +import { TestStore } from './mocks/test-store' + + +describe("picks-helper", () => { + const store = new TestStore() + + test('getUnitPicks', async () => { + let picks = await getUnitPicks('a', 'a', store, false, 100) + expect(picks?.unmatched.length).toBe(1) + expect(picks?.unmatched[0].pickIdentifier).toBe("Seabed") + expect(picks?.matched.length).toBe(10) + + picks = await getUnitPicks('b', 'a', store, false, 900) + expect(picks?.unmatched.length).toBe(0) + expect(picks?.matched.length).toBe(12) + + picks = await getUnitPicks('b', 'a', store, false, 100) + expect(picks?.unmatched.length).toBe(0) + expect(picks?.matched.length).toBe(12) + + picks = await getUnitPicks('b', 'a', store, true, 100) + expect(picks?.unmatched.length).toBe(1) + expect(picks?.matched.length).toBe(19) + + picks = await getUnitPicks('c', 'a', store, false, 100) + expect(picks?.unmatched.length).toBe(1) + expect(picks?.unmatched[0].pickIdentifier).toBe("Termination") + expect(picks?.matched.length).toBe(10) + + picks = await getUnitPicks('c', 'a', store, true, 100) + expect(picks?.unmatched.length).toBe(2) + expect(picks?.matched.length).toBe(25) + + picks = await getUnitPicks('c', 'a', store, true, 1000) + expect(picks?.unmatched.length).toBe(1) + expect(picks?.matched.length).toBe(16) + }) + + test('createFormationIntervals', async () => { + const unitPicks = await getUnitPicks('c', 'a', store, true, 0) + expect(unitPicks).not.toBeNull() + const intervals = createFormationIntervals(unitPicks!.matched) + expect(intervals.length).toBe(11) + }) + + test('mergeFormationIntervals', async () => { + const unitPicks = await getUnitPicks('c', 'a', store, true, 0) + expect(unitPicks).not.toBeNull() + const intervals = createFormationIntervals(unitPicks!.matched) + const merged = mergeFormationIntervals(intervals) + expect(merged.length).toBe(10) + expect(merged[0].unit.name).toBe('D') + expect(merged[0].mdMslTop).toBe(100) + expect(merged[0].mdMslBottom).toBe(400) + expect(merged[1].unit.name).toBe('E') + expect(merged[1].mdMslTop).toBe(400) + expect(merged[1].mdMslBottom).toBe(500) + expect(merged[2].unit.name).toBe('B') + expect(merged[2].mdMslTop).toBe(500) + expect(merged[2].mdMslBottom).toBe(900) + expect(merged[3].unit.name).toBe('F') + expect(merged[3].mdMslTop).toBe(900) + expect(merged[3].mdMslBottom).toBe(2000) + expect(merged[4].unit.name).toBe('G') + expect(merged[4].mdMslTop).toBe(2000) + expect(merged[4].mdMslBottom).toBe(2550) + expect(merged[5].unit.name).toBe('H') + expect(merged[5].mdMslTop).toBe(2550) + expect(merged[5].mdMslBottom).toBe(2900) + expect(merged[6].unit.name).toBe('I') + expect(merged[6].mdMslTop).toBe(2900) + expect(merged[6].mdMslBottom).toBe(3000) + expect(merged[7].unit.name).toBe('J') + expect(merged[7].mdMslTop).toBe(3000) + expect(merged[7].mdMslBottom).toBe(3200) + expect(merged[8].unit.name).toBe('K') + expect(merged[8].mdMslTop).toBe(3200) + expect(merged[8].mdMslBottom).toBe(3500) + expect(merged[9].unit.name).toBe('J') + expect(merged[9].mdMslTop).toBe(3500) + expect(merged[9].mdMslBottom).toBe(3600) + }) + + test('getFormationMarkers', async () => { + const unitPicks = await getUnitPicks('c', 'a', store, true, 0) + expect(unitPicks).not.toBeNull() + const intervals = createFormationIntervals(unitPicks!.matched) + const markers = getFormationMarkers(intervals) + + expect(markers.length).toBe(10) + }) +}) \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index b5afa57..c972b19 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -21,6 +21,6 @@ "noUnusedParameters": true, "noFallthroughCasesInSwitch": true }, - "include": ["src"], + "include": ["src", "tests"], "exclude": ["vite.config.ts", "vite.config.static.ts"], } diff --git a/tsconfig.node.json b/tsconfig.node.json index db0becc..54bb9c2 100644 --- a/tsconfig.node.json +++ b/tsconfig.node.json @@ -18,7 +18,7 @@ "noUnusedLocals": true, "noUnusedParameters": true, "noFallthroughCasesInSwitch": true, - "noUncheckedSideEffectImports": true + "noUncheckedSideEffectImports": true, }, "include": ["vite.config.ts"] } diff --git a/vite.config.ts b/vite.config.ts index 274ea6b..bc1d0f8 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -25,7 +25,7 @@ export default defineConfig({ }), dts({ outDir: ['dist/types'], - exclude: ['**/*.stories.tsx', 'src/storybook'], + exclude: ['**/*.stories.tsx', 'src/storybook', 'tests'], }), viteStaticCopy({ targets: [ @@ -57,5 +57,5 @@ export default defineConfig({ }, treeshake: 'recommended' }, - } + }, }) From d0cd59c6076e123f2cdd006d5aca8f278b8f55e4 Mon Sep 17 00:00:00 2001 From: kjerandp Date: Tue, 3 Jun 2025 11:29:01 +0200 Subject: [PATCH 2/6] Clean-up and fixes --- src/components/SDFTest/SDFTest.tsx | 1 + .../WellboreRibbon/WellboreRibbon.tsx | 20 ++++ .../WellboreRibbon/WellboreRibbonContext.tsx | 4 +- .../Wellbores/WellboreRibbon/index.ts | 5 + .../stripes/FormationsStripe.tsx | 22 ++++ .../stripes/MeasuredDepthStripe.tsx | 23 +++- .../Wellbores/Wells/Wells.stories.tsx | 16 +-- src/contexts/GlyphsContextProvider.tsx | 19 ++++ src/main.ts | 3 + src/sdk/index.ts | 1 + src/sdk/materials/ribbon-material.ts | 103 ------------------ .../materials/shaders/ribbon/fragment.glsl | 79 -------------- src/sdk/materials/shaders/ribbon/vertex.glsl | 90 --------------- tests/picks-helper.test.ts | 2 +- 14 files changed, 98 insertions(+), 290 deletions(-) create mode 100644 src/components/Wellbores/WellboreRibbon/index.ts delete mode 100644 src/sdk/materials/ribbon-material.ts delete mode 100644 src/sdk/materials/shaders/ribbon/fragment.glsl delete mode 100644 src/sdk/materials/shaders/ribbon/vertex.glsl diff --git a/src/components/SDFTest/SDFTest.tsx b/src/components/SDFTest/SDFTest.tsx index 279a665..919438e 100644 --- a/src/components/SDFTest/SDFTest.tsx +++ b/src/components/SDFTest/SDFTest.tsx @@ -26,6 +26,7 @@ type Props = { const fileName = 'OpenSans-Regular' + export const SDFTest = ({ text, inBias = 0, outBias = 0, fontSize = 32, rotation = 0, spacing = 0, verticalAlign = 0.0, horizontalAlign = 0.0 }: Props) => { const glyphAtlas = useTexture(`glyphs/${fileName}.png`, (tex: Texture) => { diff --git a/src/components/Wellbores/WellboreRibbon/WellboreRibbon.tsx b/src/components/Wellbores/WellboreRibbon/WellboreRibbon.tsx index aee6fb4..3913d89 100644 --- a/src/components/Wellbores/WellboreRibbon/WellboreRibbon.tsx +++ b/src/components/Wellbores/WellboreRibbon/WellboreRibbon.tsx @@ -45,6 +45,26 @@ function createStripeGeometry(trajectory: Trajectory, segmentsPerMeter: number, return geometry } +/** + * The WellboreRibbon component serves as a controller for ribbon stripe components. It provides a context for + * child components, including geometry needed to create stripe components. + * + * @example + * + * + * + * + * + * @remarks + * This is an experimental component and may be changed/removed + * + * @see [Storybook](/videx-3d/?path=/docs/components-wellbores-wellboreformationcolumn--docs) + * @see {@link WellboreRibbonContext} + * @see {@link FormationsStripe} + * @see {@link MeasuredDepthStripe} + * + * @group Components + */ export const WellboreRibbon = ({ children }: PropsWithChildren) => { const store = useData() const { id, fromMsl, segmentsPerMeter } = useWellboreContext() diff --git a/src/components/Wellbores/WellboreRibbon/WellboreRibbonContext.tsx b/src/components/Wellbores/WellboreRibbon/WellboreRibbonContext.tsx index ade7d4a..3c145e3 100644 --- a/src/components/Wellbores/WellboreRibbon/WellboreRibbonContext.tsx +++ b/src/components/Wellbores/WellboreRibbon/WellboreRibbonContext.tsx @@ -6,7 +6,7 @@ import { Trajectory, Vec3 } from '../../../sdk' /** - * GlyphsContext props + * WellboreRibbonContext props * @expand */ export type WellboreRibbonContextProps = { @@ -16,7 +16,7 @@ export type WellboreRibbonContextProps = { } /** - * Glyphs context + * WellboreRibbon context * @group Contexts */ export const WellboreRibbonContext = createContext(null) \ No newline at end of file diff --git a/src/components/Wellbores/WellboreRibbon/index.ts b/src/components/Wellbores/WellboreRibbon/index.ts new file mode 100644 index 0000000..dd2634f --- /dev/null +++ b/src/components/Wellbores/WellboreRibbon/index.ts @@ -0,0 +1,5 @@ +export * from './WellboreRibbon' +export * from './WellboreRibbonContext' + +export * from './stripes/FormationsStripe' +export * from './stripes/MeasuredDepthStripe' diff --git a/src/components/Wellbores/WellboreRibbon/stripes/FormationsStripe.tsx b/src/components/Wellbores/WellboreRibbon/stripes/FormationsStripe.tsx index 978d22b..1fcef79 100644 --- a/src/components/Wellbores/WellboreRibbon/stripes/FormationsStripe.tsx +++ b/src/components/Wellbores/WellboreRibbon/stripes/FormationsStripe.tsx @@ -9,6 +9,10 @@ import { WellboreRibbonContext } from '../WellboreRibbonContext' import fragmentShader from '../shaders/formations.glsl' import vertexShader from '../shaders/vertex.glsl' +/** + * FormationsStripe props + * @expand + */ export type FormationsStripeProps = { width: number offset: number @@ -27,6 +31,24 @@ type FormationData = { units: Unit[] } +/** + * This is a stripe component used with the WellboreRibbon component for visualizing + * formations along a wellbore trajectory. + * + * @example + * + * + * + * + * @remarks + * This is an experimental component and may be changed/removed + * + * @see [Storybook](/videx-3d/?path=/docs/components-wellbores-wellboreformationcolumn--docs) + * @see {@link WellboreRibbon} + * @see {@link WellboreRibbonContext} + * + * @group Components + */ export const FormationsStripe = ({ width, offset, stratColumnId, level }: FormationsStripeProps) => { const store = useData() const ribbonContext = useContext(WellboreRibbonContext) diff --git a/src/components/Wellbores/WellboreRibbon/stripes/MeasuredDepthStripe.tsx b/src/components/Wellbores/WellboreRibbon/stripes/MeasuredDepthStripe.tsx index a9df40f..2089ab6 100644 --- a/src/components/Wellbores/WellboreRibbon/stripes/MeasuredDepthStripe.tsx +++ b/src/components/Wellbores/WellboreRibbon/stripes/MeasuredDepthStripe.tsx @@ -5,13 +5,34 @@ import { WellboreRibbonContext } from '../WellboreRibbonContext' import fragmentShader from '../shaders/measured-depth.glsl' import vertexShader from '../shaders/vertex.glsl' - +/** + * MeasuredDepthStripe props + * @expand + */ export type MeasuredDepthStripeProps = { width: number offset: number stepSize?: number } +/** + * This is a stripe component used with the WellboreRibbon component for adding a measured + * depth scale along a wellbore trajectory. + * + * @example + * + * + * + * + * @remarks + * This is an experimental component and may be changed/removed + * + * @see [Storybook](/videx-3d/?path=/docs/components-wellbores-wellboreformationcolumn--docs) + * @see {@link WellboreRibbon} + * @see {@link WellboreRibbonContext} + * + * @group Components + */ export const MeasuredDepthStripe = ({ width, offset, stepSize = 50 }: MeasuredDepthStripeProps) => { const ribbonContext = useContext(WellboreRibbonContext) diff --git a/src/components/Wellbores/Wells/Wells.stories.tsx b/src/components/Wellbores/Wells/Wells.stories.tsx index 7cb5226..6757034 100644 --- a/src/components/Wellbores/Wells/Wells.stories.tsx +++ b/src/components/Wellbores/Wells/Wells.stories.tsx @@ -1,7 +1,6 @@ import type { Meta, StoryObj } from '@storybook/react' import { scaleOrdinal } from 'd3-scale' import { useEffect, useMemo, useRef, useState } from 'react' -import { GlyphsProvider } from '../../../contexts/GlyphsContextProvider' import { WellboreSelectedEvent, wellboreSelectedEventType } from '../../../events/wellbore-events' import { CRS } from '../../../sdk/projection/crs' import { Vec2 } from '../../../sdk/types/common' @@ -26,9 +25,6 @@ import { TubeTrajectory } from '../TubeTrajectory/TubeTrajectory' import { Wellbore } from '../Wellbore/Wellbore' import { WellboreBounds } from '../WellboreBounds/WellboreBounds' import { WellboreLabel } from '../WellboreLabel/WellboreLabel' -import { FormationsStripe } from '../WellboreRibbon/stripes/FormationsStripe' -import { MeasuredDepthStripe } from '../WellboreRibbon/stripes/MeasuredDepthStripe' -import { WellboreRibbon } from '../WellboreRibbon/WellboreRibbon' import { Wells } from './Wells' const colorScale = scaleOrdinal(["tomato", "#4e79a7", "#f28e2c", "#76b7b2", "#59a14f", "#edc949", "#af7aa1", "#ff9da7", "#9c755f", "#bab0ab", "darkgreen", "purple", "#24ca85"]) @@ -36,7 +32,6 @@ const colorScale = scaleOrdinal(["tomato", "#4e79a7", "#f28e2c", "#76b7b2", "#59 const utmZone = storyArgs.utmZone const origin = storyArgs.origin as Vec2 const well = storyArgs.defaultWell -const stratColumnId = storyArgs.defaultStratColumn const Wrapper = () => { const [selected, setSelected] = useState() @@ -76,7 +71,7 @@ const Wrapper = () => { }, [highlighter]) return ( - + <> @@ -130,13 +125,6 @@ const Wrapper = () => { - { isSelected && ( - - - - - - )} ) @@ -144,7 +132,7 @@ const Wrapper = () => { /> - + ) } diff --git a/src/contexts/GlyphsContextProvider.tsx b/src/contexts/GlyphsContextProvider.tsx index fa5ee9b..c335cfd 100644 --- a/src/contexts/GlyphsContextProvider.tsx +++ b/src/contexts/GlyphsContextProvider.tsx @@ -41,6 +41,25 @@ async function get(url: string) { throw new Error(response.toString()); } +/** + * Provides sub components with a GlyphContext, which contains data and utilities needed to + * add text support to fragment shaders. This includes a reference to a glyph atlas texture + * and a supporting uniforms group, which will contain glyph config and metrics. + * + * It currently relies on a pre-generated font atlas and json config file using [msdf-bmfont-xml](https://github.com/soimy/msdf-bmfont-xml) + * + * @example + * + * { ... } + * + * + * @remarks + * This component should be considered experimental. + * + * @see {@link GlyphContext} + * + * @group Components + */ export const GlyphsProvider = ({ fontAtlasUrl, fontConfigUrl, children }: PropsWithChildren) => { const glyphAtlas = useTexture(fontAtlasUrl, (tex: Texture) => { tex.generateMipmaps = false diff --git a/src/main.ts b/src/main.ts index 213f7c9..b08faae 100644 --- a/src/main.ts +++ b/src/main.ts @@ -27,12 +27,15 @@ export * from './components/Wellbores/Wellbore' export * from './components/Wellbores/WellboreBounds' export * from './components/Wellbores/WellboreFormationColumn' export * from './components/Wellbores/WellboreLabel' +export * from './components/Wellbores/WellboreRibbon' export * from './components/Wellbores/Wells' export * from './contexts/DataContext' export * from './contexts/DataContextProvider' export * from './contexts/GeneratorsContext' export * from './contexts/GeneratorsContextProvider' +export * from './contexts/GlyphsContext' +export * from './contexts/GlyphsContextProvider' export * from './events/camera-events' export * from './events/depth-events' diff --git a/src/sdk/index.ts b/src/sdk/index.ts index 5d8cbcc..c740a40 100644 --- a/src/sdk/index.ts +++ b/src/sdk/index.ts @@ -26,6 +26,7 @@ export * from './utils/conversions' export * from './utils/depth-buffer' export * from './utils/depth-reader' export * from './utils/elevation-map' +export * from './utils/glyphs' export * from './utils/irapbin-parser' export * from './utils/limiter' export * from './utils/num-array' diff --git a/src/sdk/materials/ribbon-material.ts b/src/sdk/materials/ribbon-material.ts deleted file mode 100644 index bd6735f..0000000 --- a/src/sdk/materials/ribbon-material.ts +++ /dev/null @@ -1,103 +0,0 @@ -import { - Color, - MeshLambertMaterialParameters, - ShaderLib, - ShaderMaterial, - Texture, - Uniform, - UniformsUtils, -} from 'three' -import fragmentShader from './shaders/ribbon/fragment.glsl' -import vertexShader from './shaders/ribbon/vertex.glsl' - -export type RibonMaterialParams = MeshLambertMaterialParameters & { - angle?: number - width?: number - offset?: number - ignoreLight?: boolean -} - -export class RibbonMaterial extends ShaderMaterial { - isRibbonMaterial = true - constructor(parameters?: RibonMaterialParams) { - super({ - vertexShader, - fragmentShader, - uniforms: UniformsUtils.merge([ - UniformsUtils.clone(ShaderLib['lambert'].uniforms), - { - angle: new Uniform(parameters?.angle || 0), - width: new Uniform(parameters?.width || 1), - offset: new Uniform(parameters?.offset || 0), - }, - ]), - defines: { - USE_UV: true, - NO_LIGHT: !!parameters?.ignoreLight, - }, - clipping: true, - fog: true, - lights: true, - }) - if (parameters) this.setValues(parameters) - } - - get color(): Color { - return this.uniforms.diffuse.value - } - - set color(color: Color) { - this.uniforms.diffuse.value.set(color) - } - - get angle(): number { - return this.uniforms.angle.value - } - - set angle(a: number) { - this.uniforms.angle.value = a - } - - get offset(): number { - return this.uniforms.offset.value - } - - set offset(o: number) { - this.uniforms.offset.value = o - } - - get width(): number { - return this.uniforms.width.value - } - - set width(w: number) { - this.uniforms.width.value = w - } - - get map(): Texture | null { - return this.uniforms.map.value - } - - set map(m: Texture | null) { - this.uniforms.map.value = m - } - - get ignoreLight() { - return this.defines.NO_LIGHT - } - - set ignoreLight(f: boolean) { - this.defines.NO_LIGHT = f; - this.needsUpdate = true - } - - // @ignore - onBeforeCompile() { - if (this.map) { - if (this.map.matrixAutoUpdate === true) { - this.map.updateMatrix() - } - this.uniforms.mapTransform.value.copy(this.map.matrix) - } - } -} diff --git a/src/sdk/materials/shaders/ribbon/fragment.glsl b/src/sdk/materials/shaders/ribbon/fragment.glsl deleted file mode 100644 index ab47d3c..0000000 --- a/src/sdk/materials/shaders/ribbon/fragment.glsl +++ /dev/null @@ -1,79 +0,0 @@ -#define RIBBON_MATERIAL - -uniform vec3 diffuse; -uniform vec3 emissive; -uniform float opacity; - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -void main() { - - vec4 diffuseColor = vec4( diffuse, opacity ); - //diffuseColor.rgb = vec3(vUv, 1.0); - #include - - ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); - vec3 totalEmissiveRadiance = emissive; - - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - - #ifdef NO_LIGHT - - vec3 outgoingLight = diffuseColor.rgb; - - #else - - // accumulation - #include - #include - #include - #include - - // modulation - #include - vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance; - - - #endif - - #include - #include - #include - #include - #include - #include - #include -} \ No newline at end of file diff --git a/src/sdk/materials/shaders/ribbon/vertex.glsl b/src/sdk/materials/shaders/ribbon/vertex.glsl deleted file mode 100644 index bfba52f..0000000 --- a/src/sdk/materials/shaders/ribbon/vertex.glsl +++ /dev/null @@ -1,90 +0,0 @@ -#define RIBBON_MATERIAL - -uniform float angle; -uniform float width; -uniform float offset; - -attribute vec3 tangent; -attribute vec3 binormal; - -varying vec3 vViewPosition; - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -mat4 rotation3d(vec3 axis, float angle) { - axis = normalize(axis); - float s = sin(angle); - float c = cos(angle); - float oc = 1.0 - c; - - return mat4( - oc * axis.x * axis.x + c, oc * axis.x * axis.y - axis.z * s, oc * axis.z * axis.x + axis.y * s, 0.0, - oc * axis.x * axis.y + axis.z * s, oc * axis.y * axis.y + c, oc * axis.y * axis.z - axis.x * s, 0.0, - oc * axis.z * axis.x - axis.y * s, oc * axis.y * axis.z + axis.x * s, oc * axis.z * axis.z + c, 0.0, - 0.0, 0.0, 0.0, 1.0 - ); -} - -void main() { - - #include - #include - #include - #include - #include - - mat4 rotation = rotation3d(tangent, angle); - - vec3 direction = (rotation * vec4(binormal, 0.0)).xyz; - - vec4 worldPosition = (modelMatrix * vec4(position, 1.0)); - - float dist = width; - - dist = dist + (uv.x > 0.5 ? -offset : offset); - - worldPosition.xyz = worldPosition.xyz + dist * direction; - - #include - #include - #include - - vec3 objectNormal =(rotation * vec4(normal, 1.0)).xyz; - - #include - #include - - #include - - #include - #include - #include - - vec4 mvPosition = viewMatrix * worldPosition; - gl_Position = projectionMatrix * mvPosition; - - #include - #include - - vViewPosition = - mvPosition.xyz; - - #include - #include - #include - #include - - vUv = uv; - -} diff --git a/tests/picks-helper.test.ts b/tests/picks-helper.test.ts index 7fa14ff..34ed548 100644 --- a/tests/picks-helper.test.ts +++ b/tests/picks-helper.test.ts @@ -34,7 +34,7 @@ describe("picks-helper", () => { picks = await getUnitPicks('c', 'a', store, true, 1000) expect(picks?.unmatched.length).toBe(1) - expect(picks?.matched.length).toBe(16) + expect(picks?.matched.length).toBe(17) }) test('createFormationIntervals', async () => { From 4b8994ad5c8ab39c6db797d5f7fecd9cb412ea59 Mon Sep 17 00:00:00 2001 From: kjerandp Date: Tue, 3 Jun 2025 12:28:57 +0200 Subject: [PATCH 3/6] more cleanup --- package-lock.json | 2 +- package.json | 1 - src/components/Glyphs/GlyphGenTest.tsx | 3 --- src/sdk/utils/glsl.ts | 3 --- 4 files changed, 1 insertion(+), 8 deletions(-) delete mode 100644 src/components/Glyphs/GlyphGenTest.tsx delete mode 100644 src/sdk/utils/glsl.ts diff --git a/package-lock.json b/package-lock.json index a11b0ea..9dc087e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,6 @@ "d3-scale": "^4.0.2", "d3-selection": "^3.0.0", "lodash.filter": "^4.6.0", - "meshline": "^3.3.1", "nanoid": "^5.1.2", "p-limit": "^6.2.0", "p-queue": "^8.1.0", @@ -6725,6 +6724,7 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/meshline/-/meshline-3.3.1.tgz", "integrity": "sha512-/TQj+JdZkeSUOl5Mk2J7eLcYTLiQm2IDzmlSvYm7ov15anEcDJ92GHqqazxTSreeNgfnYu24kiEvvv0WlbCdFQ==", + "dev": true, "license": "MIT", "peerDependencies": { "three": ">=0.137" diff --git a/package.json b/package.json index f24fde7..b750561 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,6 @@ "d3-scale": "^4.0.2", "d3-selection": "^3.0.0", "lodash.filter": "^4.6.0", - "meshline": "^3.3.1", "nanoid": "^5.1.2", "p-limit": "^6.2.0", "p-queue": "^8.1.0", diff --git a/src/components/Glyphs/GlyphGenTest.tsx b/src/components/Glyphs/GlyphGenTest.tsx deleted file mode 100644 index 210c4de..0000000 --- a/src/components/Glyphs/GlyphGenTest.tsx +++ /dev/null @@ -1,3 +0,0 @@ -export const GlyphGenTest = () => { - return null -} \ No newline at end of file diff --git a/src/sdk/utils/glsl.ts b/src/sdk/utils/glsl.ts deleted file mode 100644 index e97a946..0000000 --- a/src/sdk/utils/glsl.ts +++ /dev/null @@ -1,3 +0,0 @@ -export function arrayToMacro(type: string, array: number[]) { - return `${type}[${array.length}](${array.join(',')})` -} \ No newline at end of file From 190c05bbd5e7f5d5b22e3bd5dfc57ab2fc54f92a Mon Sep 17 00:00:00 2001 From: kjerandp Date: Thu, 5 Jun 2025 08:54:13 +0200 Subject: [PATCH 4/6] feat: improved curve sampling for optimized and consistant wellbore geometries --- src/components/Wellbores/Casings/Casings.tsx | 30 +- .../CompletionTools/CompletionTools.tsx | 32 +- .../WellboreFormationColumn.stories.tsx | 24 +- .../WellboreRibbon/WellboreRibbon.tsx | 19 +- src/generators/basic-trajectory-generator.ts | 63 +- src/sdk/geometries/curve/curve-3d.ts | 66 +- src/sdk/geometries/curve/tube-geometry.ts | 566 +++++++++++------- src/sdk/utils/numbers.ts | 1 - .../examples/Wellbore.example.stories.tsx | 3 +- .../examples/Wells.example.stories.tsx | 16 +- 10 files changed, 514 insertions(+), 306 deletions(-) diff --git a/src/components/Wellbores/Casings/Casings.tsx b/src/components/Wellbores/Casings/Casings.tsx index 6b044b5..3ce43dc 100644 --- a/src/components/Wellbores/Casings/Casings.tsx +++ b/src/components/Wellbores/Casings/Casings.tsx @@ -1,12 +1,12 @@ import { ForwardedRef, forwardRef, ReactElement, useEffect, useMemo, useState } from 'react' -import { useGenerator } from '../../../hooks/useGenerator' import { BufferGeometry, Group, Material, MeshStandardMaterial, Object3D } from 'three' +import { useGenerator } from '../../../hooks/useGenerator' import { useWellboreContext } from '../../../hooks/useWellboreContext' -import { queue } from '../../../sdk/utils/limiter' -import { casings, CasingsGeneratorResponse } from './casings-defs' import { createLayers, LAYERS } from '../../../layers/layers' import { unpackBufferGeometry } from '../../../sdk/geometries/packing' +import { queue } from '../../../sdk/utils/limiter' import { CommonComponentProps, CustomMaterialProps } from '../../common' +import { casings, CasingsGeneratorResponse } from './casings-defs' /** * Casing props @@ -17,8 +17,8 @@ export type CasingProps = CommonComponentProps & CustomMaterialProps & { radialSegments?: number, sizeMultiplier?: number, shoeFactor?: number, - segmentsPerMeter?: number, - simplificationThreshold?: number, + overrideSegmentsPerMeter?: number, + overrideSimplificationThreshold?: number, opacity?: number, priority?: number, } @@ -54,18 +54,30 @@ export const Casings = forwardRef(({ radialSegments = 16, sizeMultiplier = 1, shoeFactor = 1, - segmentsPerMeter = 0.1, - simplificationThreshold = 0, + overrideSegmentsPerMeter, + overrideSimplificationThreshold, opacity = 1, fallback, priority = 0 }: CasingProps, ref: ForwardedRef) => { - const { id, fromMsl } = useWellboreContext() + const { + id, + fromMsl, + segmentsPerMeter: defaultSegmentsPerMeter, + simplificationThreshold: defaultSimplificationThreshold, + } = useWellboreContext() const generator = useGenerator(casings) const [geometry, setGeometry] = useState(null) const [useFallback, setUseFallback] = useState(false) + const { segmentsPerMeter, simplificationThreshold } = useMemo(() => { + return { + segmentsPerMeter: overrideSegmentsPerMeter !== undefined ? overrideSegmentsPerMeter : defaultSegmentsPerMeter || 0.1, + simplificationThreshold: overrideSimplificationThreshold !== undefined ? overrideSimplificationThreshold : defaultSimplificationThreshold || 0 + } + }, [defaultSegmentsPerMeter, defaultSimplificationThreshold, overrideSegmentsPerMeter, overrideSimplificationThreshold]) + const material = useMemo(() => { if (customMaterial) { return customMaterial @@ -75,7 +87,7 @@ export const Casings = forwardRef(({ new MeshStandardMaterial({ color: 'black', metalness: 0, - roughness: 1 + roughness: 1, }), new MeshStandardMaterial({ color: '#555', diff --git a/src/components/Wellbores/CompletionTools/CompletionTools.tsx b/src/components/Wellbores/CompletionTools/CompletionTools.tsx index ff095ee..f51b11f 100644 --- a/src/components/Wellbores/CompletionTools/CompletionTools.tsx +++ b/src/components/Wellbores/CompletionTools/CompletionTools.tsx @@ -1,13 +1,13 @@ import { ReactElement, useEffect, useMemo, useState } from 'react' -import { useGenerator } from '../../../hooks/useGenerator' import { BufferGeometry, Material, MeshLambertMaterial, MeshStandardMaterial, Object3D } from 'three' -import { ScreenMaterial } from './Screen/screen-material' +import { useGenerator } from '../../../hooks/useGenerator' import { useWellboreContext } from '../../../hooks/useWellboreContext' -import { queue } from '../../../sdk/utils/limiter' -import { completionTools, CompletionToolsGeneratorResponse } from './completion-tools-defs' import { createLayers, LAYERS } from '../../../layers/layers' import { unpackBufferGeometry } from '../../../sdk/geometries/packing' +import { queue } from '../../../sdk/utils/limiter' import { CommonComponentProps, CustomMaterialProps } from '../../common' +import { completionTools, CompletionToolsGeneratorResponse } from './completion-tools-defs' +import { ScreenMaterial } from './Screen/screen-material' /** * CompletionTools props @@ -16,8 +16,8 @@ import { CommonComponentProps, CustomMaterialProps } from '../../common' export type CompletionToolsProps = CommonComponentProps & CustomMaterialProps & { radialSegments?: number, sizeMultiplier?: number, - segmentsPerMeter?: number, - simplificationThreshold?: number, + overrideSegmentsPerMeter?: number, + overrideSimplificationThreshold?: number, fallback?: (() => ReactElement), priority?: number, } @@ -51,16 +51,29 @@ export const CompletionTools = ({ customDistanceMaterial, radialSegments = 16, sizeMultiplier = 1, - segmentsPerMeter = 0.1, - simplificationThreshold = 0, + overrideSegmentsPerMeter, + overrideSimplificationThreshold, priority = 0, fallback, }: CompletionToolsProps) => { - const { id, fromMsl } = useWellboreContext() + const { + id, + fromMsl, + segmentsPerMeter: defaultSegmentsPerMeter, + simplificationThreshold: defaultSimplificationThreshold, + } = useWellboreContext() + const generator = useGenerator(completionTools) const [geometry, setGeometry] = useState(null) const [useFallback, setUseFallback] = useState(false) + const { segmentsPerMeter, simplificationThreshold } = useMemo(() => { + return { + segmentsPerMeter: overrideSegmentsPerMeter !== undefined ? overrideSegmentsPerMeter : defaultSegmentsPerMeter || 0.1, + simplificationThreshold: overrideSimplificationThreshold !== undefined ? overrideSimplificationThreshold : defaultSimplificationThreshold || 0 + } + }, [defaultSegmentsPerMeter, defaultSimplificationThreshold, overrideSegmentsPerMeter, overrideSimplificationThreshold]) + const material = useMemo(() => { if (customMaterial) { return customMaterial @@ -132,6 +145,7 @@ export const CompletionTools = ({ color: '#ccc', }) ] + return m }, [customMaterial]) diff --git a/src/components/Wellbores/WellboreFormationColumn/WellboreFormationColumn.stories.tsx b/src/components/Wellbores/WellboreFormationColumn/WellboreFormationColumn.stories.tsx index 13bf20b..9aa6a65 100644 --- a/src/components/Wellbores/WellboreFormationColumn/WellboreFormationColumn.stories.tsx +++ b/src/components/Wellbores/WellboreFormationColumn/WellboreFormationColumn.stories.tsx @@ -23,9 +23,11 @@ type DemoProps = { merged: boolean scaleFactor: number stepSize: number + segmentsPerMeter: number + simplificationThreshold: number } -const DemoComponent = ({ showRibbon, merged, scaleFactor, stepSize }: DemoProps) => { +const DemoComponent = ({ showRibbon, merged, scaleFactor, stepSize, segmentsPerMeter, simplificationThreshold }: DemoProps) => { useEffect(() => { dispatchEvent(new WellboreSelectedEvent({ id: wellboreId })) }, []) @@ -34,7 +36,7 @@ const DemoComponent = ({ showRibbon, merged, scaleFactor, stepSize }: DemoProps) <> - + {showRibbon && ( @@ -88,6 +90,8 @@ export const Default: Story = { merged: true, scaleFactor: 5, stepSize: 10, + segmentsPerMeter: 0.1, + simplificationThreshold: 0, // stratColumnId, // startRadius: 0.5, // formationWidth: 2, @@ -113,6 +117,22 @@ export const Default: Story = { step: 1 } }, + segmentsPerMeter: { + control: { + type: 'range', + min: 0.1, + max: 1, + step: 0.1 + } + }, + simplificationThreshold: { + control: { + type: 'range', + min: 0, + max: 0.00005, + step: 0.000001 + } + }, // formationWidth: { // control: { // type: 'range', diff --git a/src/components/Wellbores/WellboreRibbon/WellboreRibbon.tsx b/src/components/Wellbores/WellboreRibbon/WellboreRibbon.tsx index 3913d89..9b1b593 100644 --- a/src/components/Wellbores/WellboreRibbon/WellboreRibbon.tsx +++ b/src/components/Wellbores/WellboreRibbon/WellboreRibbon.tsx @@ -1,12 +1,12 @@ import { PropsWithChildren, useEffect, useMemo, useState } from 'react' import { BufferAttribute, InstancedBufferGeometry, InstancedInterleavedBuffer, InterleavedBufferAttribute } from 'three' import { CameraFocusAtPointEvent, cameraFocusAtPointEventType, CameraSetPositionEvent, cameraSetPositionEventType, useData, useWellboreContext } from '../../../main' -import { calculateFrenetFrames, getCurveSegments, getTrajectory, PositionLog, Trajectory, Vec3 } from '../../../sdk' +import { calculateFrenetFrames, getCurvePositions, getTrajectory, PositionLog, Trajectory, Vec3 } from '../../../sdk' import { WellboreRibbonContext, WellboreRibbonContextProps } from './WellboreRibbonContext' -function createStripeGeometry(trajectory: Trajectory, segmentsPerMeter: number, fromMsl?: number) { +function createStripeGeometry(trajectory: Trajectory, segmentsPerMeter: number, simplificationThreshold: number, fromMsl?: number) { const positions = new Float32Array([ 0, -0.5, 1, -0.5, @@ -14,7 +14,14 @@ function createStripeGeometry(trajectory: Trajectory, segmentsPerMeter: number, 0, 0.5, ]) const from = fromMsl !== undefined ? trajectory.getPositionAtDepth(fromMsl, true)! : 0 - const segments = getCurveSegments(trajectory.curve, segmentsPerMeter, from, 1) + + const segments = getCurvePositions( + trajectory.curve, + from, + 1, + segmentsPerMeter, + simplificationThreshold + ) const frenetFrames = calculateFrenetFrames(trajectory.curve, segments) const attributesBuffer = new Float32Array(frenetFrames.length * 7) @@ -67,15 +74,15 @@ function createStripeGeometry(trajectory: Trajectory, segmentsPerMeter: number, */ export const WellboreRibbon = ({ children }: PropsWithChildren) => { const store = useData() - const { id, fromMsl, segmentsPerMeter } = useWellboreContext() + const { id, fromMsl, segmentsPerMeter, simplificationThreshold } = useWellboreContext() const [trajectory, setTrajectory] = useState(null) const [direction, setDirection] = useState([0, -1, 0]) const stripeGeometry = useMemo(() => { if (trajectory) { - return createStripeGeometry(trajectory, segmentsPerMeter, fromMsl) + return createStripeGeometry(trajectory, segmentsPerMeter, simplificationThreshold, fromMsl) } return null - }, [trajectory, segmentsPerMeter, fromMsl]) + }, [trajectory, segmentsPerMeter, simplificationThreshold, fromMsl]) const context = useMemo(() => { if (trajectory && stripeGeometry) { diff --git a/src/generators/basic-trajectory-generator.ts b/src/generators/basic-trajectory-generator.ts index a6526f9..6e6dabd 100644 --- a/src/generators/basic-trajectory-generator.ts +++ b/src/generators/basic-trajectory-generator.ts @@ -2,8 +2,7 @@ import { transfer } from 'comlink' import { BufferAttributeLike, clamp, - Curve3D, - dotVec3, + getCurvePositions, getTrajectory, limit, packBufferGeometryLike, @@ -11,58 +10,6 @@ import { ReadonlyStore, } from '../sdk' -function calculateSegments( - curve: Curve3D, - startPos: number, - endPos: number, - segmentsPerMeter: number, - simplificationThreshold: number -) { - const segments: number[] = [] - const curveLength = curve.length - - const deltaPos = endPos - startPos - const segmentLength = deltaPos * curveLength - - const nSegments = Math.ceil(segmentsPerMeter * segmentLength) - const stepSize = deltaPos / nSegments - - const MIN_SEGMENT_LENGTH = 1 / (curveLength * 0.01) - - if (simplificationThreshold) { - simplificationThreshold *= 0.1 - } - - // add first segment of step - segments.push(startPos) - let guideTangent = simplificationThreshold - ? curve.getTangentAt(startPos) - : null - let lastPosition = startPos - // interpolate in-between segments - for (let j = 1; j < nSegments; j++) { - const curvePosition = startPos + j * stepSize - const currentSegmentLength = curvePosition - lastPosition - const candidateTangent = simplificationThreshold - ? curve.getTangentAt(curvePosition) - : null - if ( - currentSegmentLength >= MIN_SEGMENT_LENGTH || - !simplificationThreshold || - Math.abs(dotVec3(guideTangent!, candidateTangent!)) < - 1 - simplificationThreshold - ) { - segments.push(curvePosition) - guideTangent = candidateTangent - lastPosition = curvePosition - } - } - - segments.push(endPos) - - return segments -} - export async function generateBasicTrajectory( this: ReadonlyStore, id: string, @@ -88,17 +35,17 @@ export async function generateBasicTrajectory( ) : 0 - const segments = calculateSegments( + const curvePositions = getCurvePositions( trajectory.curve, from, 1, segmentsPerMeter, simplificationThreshold ) - const positions = new Float32Array(segments.length * 3) - const lengths = includeLengths ? new Float32Array(segments.length) : null + const positions = new Float32Array(curvePositions.length * 3) + const lengths = includeLengths ? new Float32Array(curvePositions.length) : null - segments.forEach((u, i) => { + curvePositions.forEach((u, i) => { const pos = trajectory.curve.getPointAt(u) positions[i * 3] = pos[0] positions[i * 3 + 1] = pos[1] diff --git a/src/sdk/geometries/curve/curve-3d.ts b/src/sdk/geometries/curve/curve-3d.ts index 67024b3..869bf58 100644 --- a/src/sdk/geometries/curve/curve-3d.ts +++ b/src/sdk/geometries/curve/curve-3d.ts @@ -134,20 +134,62 @@ export function calculateFrenetFrames(curve: Curve3D, curvePositions: number[]) return frames } -export function getCurveSegments(curve: Curve3D, segmentsPerMeter: number, from: number = 0, to: number = 1, useTopAsReference = true): number[] { - const segments: number[] = [Math.max(from, 0)] +/** + * Get a set of positions along a curve according to a number of segments per meter, + * optionally simplified/optimized by specifying a simplification threshold. + * + * To get a sub section, use the from and/or to parameters. + * + * @remark segments per meter is always calculated from the start of the curve to ensure alingment when optimizing the number of vertices + */ +export function getCurvePositions( + curve: Curve3D, + from = 0, + to = 1, + segmentsPerMeter = 0.1, + simplificationThreshold = 0 +) { + const segments: number[] = [] const curveLength = curve.length - const deltaPos = useTopAsReference ? 1 : to - from - const segmentLength = deltaPos * curveLength - const nSegments = Math.floor(segmentsPerMeter * segmentLength) - const stepSize = deltaPos / nSegments - for (let i = 0; i <= nSegments; i++) { - const position = i * stepSize - if (position > from && position < to) { - segments.push(position) + const nSegments = Math.ceil(segmentsPerMeter * curveLength) + const stepSize = 1 / nSegments + + const MIN_SEGMENT_LENGTH = 1 / (curveLength * 0.01) + + if (simplificationThreshold) { + simplificationThreshold *= 0.1 + } + + // add first position + segments.push(from); + let guideTangent = simplificationThreshold + ? curve.getTangentAt(from) + : null + + const startAt = Math.floor(from * nSegments) + let lastPosition = from + + for (let j = startAt; j <= nSegments; j++) { + const curvePosition = j * stepSize + const currentSegmentLength = curvePosition - lastPosition + const candidateTangent = simplificationThreshold + ? curve.getTangentAt(curvePosition) + : null + if (curvePosition > from && curvePosition < to && + (currentSegmentLength >= MIN_SEGMENT_LENGTH || + !simplificationThreshold || + Math.abs(dotVec3(guideTangent!, candidateTangent!)) < + 1 - simplificationThreshold + ) + ) { + segments.push(curvePosition) + guideTangent = candidateTangent + lastPosition = curvePosition } } - segments.push(Math.min(to, 1)) + + // add final position + segments.push(to) return segments -} +} \ No newline at end of file diff --git a/src/sdk/geometries/curve/tube-geometry.ts b/src/sdk/geometries/curve/tube-geometry.ts index e5b5485..920d8de 100644 --- a/src/sdk/geometries/curve/tube-geometry.ts +++ b/src/sdk/geometries/curve/tube-geometry.ts @@ -3,77 +3,76 @@ import { lerp } from 'three/src/math/MathUtils.js' import { Tuplet, Vec3 } from '../../types/common' import { clamp } from '../../utils/numbers' import { PI } from '../../utils/trigonometry' -import { copyVec3, crossVec3, dotVec3, normalizeVec3, rotateVec3 } from '../../utils/vector-operations' -import { calculateFrenetFrames, Curve3D, FrenetFrame } from './curve-3d' +import { + copyVec3, + crossVec3, + normalizeVec3, + rotateVec3 +} from '../../utils/vector-operations' +import { + calculateFrenetFrames, + Curve3D, + FrenetFrame, + getCurvePositions, +} from './curve-3d' export type RadiusModifier = { - type: 'linear' | 'stepped', + type: 'linear' | 'stepped' steps: Tuplet[] } export type AttributeOptions = { - computeNormals?: boolean, - computeUvs?: boolean, + computeNormals?: boolean + computeUvs?: boolean } type Geometry = { - vertexCount: number, - indexCount: number, - vertices: number[], - indices: number[], - normals: number[] | null, - uvs: number[] | null, + vertexCount: number + indexCount: number + vertices: number[] + indices: number[] + normals: number[] | null + uvs: number[] | null } export type TubeGeometryOptions = AttributeOptions & { - radialSegments?: number, - from?: number, - to?: number, - startCap?: boolean, - endCap?: boolean, - radius?: number, - segmentsPerMeter?: number, - radiusModifier?: RadiusModifier, - simplificationThreshold?: number, - computeLengths?: boolean, - computeRelativeLengths?: boolean, - computeCurveNormals?: boolean, - computeCurveTangents?: boolean, - computeCurveBinormals?: boolean, - innerRadius?: number, - thickness?: number, - addGroups?: boolean, + radialSegments?: number + from?: number + to?: number + startCap?: boolean + endCap?: boolean + radius?: number + segmentsPerMeter?: number + radiusModifier?: RadiusModifier + simplificationThreshold?: number + computeLengths?: boolean + computeRelativeLengths?: boolean + computeCurveNormals?: boolean + computeCurveTangents?: boolean + computeCurveBinormals?: boolean + innerRadius?: number + thickness?: number + addGroups?: boolean } type TubeSegment = FrenetFrame & { - radius: number, - theta: number, -} - -function getStepsAtPosition(position: number, steps: Tuplet[]) { - let toIndex = steps.findIndex(step => step[0] > position) - if (toIndex === -1) { - toIndex = steps.length - 1 - } - - let fromIndex = toIndex - 1 - if (fromIndex < 0) { - fromIndex = 0 - } - const fromStep = steps[fromIndex] - const toStep = steps[toIndex] - - return [fromStep, toStep] + radius: number + theta: number } -function interpolateRadius(position: number, fromStep: Tuplet, toStep: Tuplet) { +function interpolateRadius( + position: number, + fromStep: Tuplet, + toStep: Tuplet +) { if (fromStep[0] === toStep[0]) return toStep[1] const delta = toStep[0] - fromStep[0] const t = clamp((position - fromStep[0]) / delta, 0, 1) - + return lerp(fromStep[1], toStep[1], t) } + function calculateTubeSegments( curve: Curve3D, modifierType: string, @@ -82,19 +81,19 @@ function calculateTubeSegments( radius: number, radiSteps: Tuplet[], segmentsPerMeter: number, - simplificationThreshold: number, -) : TubeSegment[] { - + simplificationThreshold: number +): TubeSegment[] { // determine radius steps - const steps: Tuplet[] = [] - + const steps: Tuplet[] = [] + if (modifierType === 'none' || radiSteps.length === 0) { steps.push([from, radius], [to, radius]) } else { - let left: Tuplet = [0, radius], right: Tuplet = [1, radius] + let left: Tuplet = [0, radius], + right: Tuplet = [1, radius] // find first step within range - const rightOfFromIndex = radiSteps.findIndex(s => s[0] > from) + const rightOfFromIndex = radiSteps.findIndex((s) => s[0] > from) if (rightOfFromIndex === -1) { left = radiSteps[radiSteps.length - 1] @@ -105,8 +104,9 @@ function calculateTubeSegments( right = radiSteps[rightOfFromIndex] } - const startRadius = modifierType === 'linear' ? interpolateRadius(from, left, right) : left[1] - + const startRadius = + modifierType === 'linear' ? interpolateRadius(from, left, right) : left[1] + steps.push([from, startRadius]) for (let i = rightOfFromIndex; i >= 0 && i < radiSteps.length; i++) { @@ -119,195 +119,239 @@ function calculateTubeSegments( } else { steps.push([to, steps[steps.length - 1][1]]) } - break; + break } } if (steps[steps.length - 1][0] < to) { if (modifierType === 'linear') { - steps.push([to, interpolateRadius(to, steps[steps.length - 1], [1, radius])]) + steps.push([ + to, + interpolateRadius(to, steps[steps.length - 1], [1, radius]), + ]) } else { steps.push([to, steps[steps.length - 1][1]]) } } } - - //console.log(steps) - - const curveLength = curve.length - const segments: number[][] = [] + const positions: number[][] = [] + const curvePositions = getCurvePositions( + curve, + from, + to, + segmentsPerMeter, + simplificationThreshold + ) + let j = 0 + let p = curvePositions[j] for (let i = 0; i < steps.length - 1; i++) { const n = i + 1 const [startPos, startRadius] = steps[i] const [endPos, endRadius] = steps[n] - const deltaPos = endPos - startPos - const segmentLength = deltaPos * curveLength + const deltaPos = endPos - startPos + const segmentLength = deltaPos * curve.length const deltaRadius = endRadius - startRadius const angle = Math.atan2(deltaRadius, segmentLength) - - const nSegments = Math.floor(segmentsPerMeter * segmentLength) - const stepSize = deltaPos / nSegments // add first segment of step - segments.push([startPos, startRadius, modifierType === 'linear' ? angle : 0]) - let guideTangent = simplificationThreshold ? curve.getTangentAt(startPos) : null - - // interpolate in-between segments - for (let j = 1; j < nSegments; j++) { - const curvePosition = startPos + j * stepSize; - const candidateTangent = simplificationThreshold ? curve.getTangentAt(curvePosition) : null - if (!simplificationThreshold || Math.abs(dotVec3(guideTangent!, candidateTangent!)) < (1 - simplificationThreshold)) { - const [fromStep, toStep] = getStepsAtPosition(curvePosition, steps) - const calculatedRadius = modifierType === 'linear' ? interpolateRadius(curvePosition, fromStep, toStep) : fromStep[1] - segments.push([curvePosition, calculatedRadius, modifierType === 'linear' ? angle : 0]) - guideTangent = candidateTangent - } + positions.push([ + startPos, + startRadius, + modifierType === 'linear' ? angle : 0, + ]) + + // skip to the next position after to the start position of the segment + while (p <= startPos && j < curvePositions.length - 1) { + p = curvePositions[++j] + } + + // fill in positions between the start and end of step + while (p < endPos && j < curvePositions.length) { + const calculatedRadius = + modifierType === 'linear' + ? interpolateRadius(p, steps[i], steps[n]) + : startRadius + positions.push([ + p, + calculatedRadius, + modifierType === 'linear' ? angle : 0, + ]) + p = curvePositions[j++] } // add end segments if radius is modulated, as we need extra vertices along the transitions for different normals if (n < steps.length) { if (modifierType === 'linear') { - segments.push([endPos, endRadius, modifierType === 'linear' ? angle : 0]) - } - else if (modifierType === 'stepped') { + positions.push([ + endPos, + endRadius, + modifierType === 'linear' ? angle : 0, + ]) + } else if (modifierType === 'stepped') { const steppedAngle = angle < 0 ? -PI / 2 : PI / 2 - segments.push([endPos, startRadius, 0], [endPos, startRadius, steppedAngle], [endPos, endRadius, steppedAngle]) + positions.push( + [endPos, startRadius, 0], + [endPos, startRadius, steppedAngle], + [endPos, endRadius, steppedAngle] + ) } } - // if radius is not modulated, we need to add the final segment if (n === steps.length - 1 && modifierType === 'none') { - segments.push([endPos, endRadius, angle]) + positions.push([endPos, endRadius, angle]) } } - - const frenetFrames = calculateFrenetFrames(curve, segments.map(s => s[0])) - return segments.map((s, i) => ({ + const frenetFrames = calculateFrenetFrames( + curve, + positions.map((s) => s[0]) + ) + + return positions.map((s, i) => ({ radius: s[1], theta: s[2], - ...frenetFrames[i] + ...frenetFrames[i], })) } -function generateCap(segment: TubeSegment, radialSegments: number, clockwise = true, options: AttributeOptions, indexOffset = 0): Geometry { - let vertexCount = 0, indexCount = 0 +function generateCap( + segment: TubeSegment, + radialSegments: number, + clockwise = true, + options: AttributeOptions, + indexOffset = 0 +): Geometry { + let vertexCount = 0, + indexCount = 0 //if (!segment) debugger const vertices: number[] = [] const indices: number[] = [] const normals: number[] | null = options.computeNormals ? [] : null const uvs: number[] | null = options.computeUvs ? [] : null - - const capNormal = clockwise ? [-segment.tangent[0], -segment.tangent[1], -segment.tangent[2]] : segment.tangent + + const capNormal = clockwise + ? [-segment.tangent[0], -segment.tangent[1], -segment.tangent[2]] + : segment.tangent vertices.push(...segment.position) - vertexCount ++ + vertexCount++ if (normals) normals.push(...capNormal) if (uvs) uvs.push(0.5, 0.5) for (let j = 0; j <= radialSegments; j++) { - const v = j / radialSegments * PI * 2 + const v = (j / radialSegments) * PI * 2 - const sin = Math.sin(v); - const cos = - Math.cos(v); + const sin = Math.sin(v) + const cos = -Math.cos(v) const vector = normalizeVec3([ cos * segment.normal[0] + sin * segment.binormal[0], cos * segment.normal[1] + sin * segment.binormal[1], cos * segment.normal[2] + sin * segment.binormal[2], - ]); - + ]) // vertex vertices.push( segment.position[0] + segment.radius * vector[0], segment.position[1] + segment.radius * vector[1], - segment.position[2] + segment.radius * vector[2], - ); - vertexCount ++ + segment.position[2] + segment.radius * vector[2] + ) + vertexCount++ // normal - if (normals) normals.push(...capNormal); + if (normals) normals.push(...capNormal) // uvs if (uvs) { - const uv = [(cos + 1) / 2, (sin + 1) / 2]; + const uv = [(cos + 1) / 2, (sin + 1) / 2] if (clockwise) { - uv[0] = 1 - uv[0]; + uv[0] = 1 - uv[0] } - uvs.push(...uv); + uvs.push(...uv) } } // indices for (let i = 1; i <= radialSegments; i++) { - const v3 = 0; // index of center vertex - let v1, v2; + const v3 = 0 // index of center vertex + let v1, v2 if (clockwise) { - v1 = i + v3; - v2 = i + v3 + 1; + v1 = i + v3 + v2 = i + v3 + 1 } else { - v1 = i + v3 + 1; - v2 = i + v3; + v1 = i + v3 + 1 + v2 = i + v3 } - indices.push(v1 + indexOffset, v2 + indexOffset, v3 + indexOffset); - indexCount += 3; + indices.push(v1 + indexOffset, v2 + indexOffset, v3 + indexOffset) + indexCount += 3 } return { vertices, indices, normals, uvs, vertexCount, indexCount } - } -function generateRingCap(outerSegment: TubeSegment, innerSegment: TubeSegment, radialSegments: number, clockwise = true, options: AttributeOptions, indexOffset = 0): Geometry { - let vertexCount = 0, indexCount = 0 +function generateRingCap( + outerSegment: TubeSegment, + innerSegment: TubeSegment, + radialSegments: number, + clockwise = true, + options: AttributeOptions, + indexOffset = 0 +): Geometry { + let vertexCount = 0, + indexCount = 0 const vertices: number[] = [] const indices: number[] = [] const normals: number[] | null = options.computeNormals ? [] : null const uvs: number[] | null = options.computeUvs ? [] : null - - const capNormal = clockwise ? [-outerSegment.tangent[0], -outerSegment.tangent[1], -outerSegment.tangent[2]] : outerSegment.tangent + + const capNormal = clockwise + ? [ + -outerSegment.tangent[0], + -outerSegment.tangent[1], + -outerSegment.tangent[2], + ] + : outerSegment.tangent const innerRadiusRatio = innerSegment.radius / outerSegment.radius for (let j = 0; j <= radialSegments; j++) { - const v = j / radialSegments * PI * 2 + const v = (j / radialSegments) * PI * 2 const sin = Math.sin(v) - const cos = - Math.cos(v) + const cos = -Math.cos(v) const vector = normalizeVec3([ cos * outerSegment.normal[0] + sin * outerSegment.binormal[0], cos * outerSegment.normal[1] + sin * outerSegment.binormal[1], cos * outerSegment.normal[2] + sin * outerSegment.binormal[2], - ]); - + ]) // outer ring vertex vertices.push( outerSegment.position[0] + outerSegment.radius * vector[0], outerSegment.position[1] + outerSegment.radius * vector[1], - outerSegment.position[2] + outerSegment.radius * vector[2], - ); - vertexCount ++ + outerSegment.position[2] + outerSegment.radius * vector[2] + ) + vertexCount++ // inner ring vertex vertices.push( innerSegment.position[0] + innerSegment.radius * vector[0], innerSegment.position[1] + innerSegment.radius * vector[1], - innerSegment.position[2] + innerSegment.radius * vector[2], - ); - vertexCount ++ + innerSegment.position[2] + innerSegment.radius * vector[2] + ) + vertexCount++ // normal if (normals) normals.push(...capNormal, ...capNormal) @@ -315,14 +359,16 @@ function generateRingCap(outerSegment: TubeSegment, innerSegment: TubeSegment, r // uvs if (uvs) { const uv1 = [(cos + 1) / 2, (sin + 1) / 2] - const uv2 = [(cos * innerRadiusRatio + 1) / 2, (sin * innerRadiusRatio + 1) / 2] - + const uv2 = [ + (cos * innerRadiusRatio + 1) / 2, + (sin * innerRadiusRatio + 1) / 2, + ] + if (clockwise) { uv1[0] = 1 - uv1[0] uv2[0] = 1 - uv2[0] } - uvs.push(...uv1, ...uv2); - + uvs.push(...uv1, ...uv2) } } @@ -340,7 +386,7 @@ function generateRingCap(outerSegment: TubeSegment, innerSegment: TubeSegment, r b + indexOffset, b + indexOffset, d + indexOffset, - c + indexOffset, + c + indexOffset ) } else { indices.push( @@ -349,58 +395,64 @@ function generateRingCap(outerSegment: TubeSegment, innerSegment: TubeSegment, r b + indexOffset, b + indexOffset, c + indexOffset, - d + indexOffset, + d + indexOffset ) } indexCount += 6 } return { vertices, indices, normals, uvs, vertexCount, indexCount } - } -function generateTube(segments: TubeSegment[], radialSegments: number, closed: boolean, options: AttributeOptions, indexOffset = 0) : Geometry { - let vertexCount = 0, indexCount = 0 +function generateTube( + segments: TubeSegment[], + radialSegments: number, + closed: boolean, + options: AttributeOptions, + indexOffset = 0 +): Geometry { + let vertexCount = 0, + indexCount = 0 const vertices: number[] = [] const indices: number[] = [] const normals: number[] | null = options.computeNormals ? [] : null const uvs: number[] | null = options.computeUvs ? [] : null - + const generateTubeSegment = (segment: TubeSegment) => { for (let j = 0; j <= radialSegments; j++) { - const v = j / radialSegments * PI * 2 - - const sin = Math.sin(v); - const cos = - Math.cos(v); + const v = (j / radialSegments) * PI * 2 + + const sin = Math.sin(v) + const cos = -Math.cos(v) // normal const vector = normalizeVec3([ cos * segment.normal[0] + sin * segment.binormal[0], cos * segment.normal[1] + sin * segment.binormal[1], cos * segment.normal[2] + sin * segment.binormal[2], - ]); + ]) - // vertex + // vertex const position: Vec3 = [ segment.position[0] + segment.radius * vector[0], segment.position[1] + segment.radius * vector[1], segment.position[2] + segment.radius * vector[2]!, - ]; - + ] + if (normals) { let surfaceNormal = copyVec3(vector) // adjust normal if radius is modulated if (segment.theta) { const rotationAxis = normalizeVec3(crossVec3(segment.tangent, vector)) - surfaceNormal = rotateVec3(vector, rotationAxis, segment.theta) - } + surfaceNormal = rotateVec3(vector, rotationAxis, segment.theta) + } normals.push(...surfaceNormal) } - // vertex - vertices.push(...position); - vertexCount ++ + // vertex + vertices.push(...position) + vertexCount++ } } @@ -409,17 +461,13 @@ function generateTube(segments: TubeSegment[], radialSegments: number, closed: b generateTubeSegment(segments[i]) } - if (closed) - generateTubeSegment(segments[0]) + if (closed) generateTubeSegment(segments[0]) // 2. Generate uvs if (uvs) { for (let i = 0; i < segments.length; i++) { for (let j = 0; j <= radialSegments; j++) { - uvs.push( - j / radialSegments, - i / (segments.length - 1), - ) + uvs.push(j / radialSegments, i / (segments.length - 1)) } } } @@ -427,14 +475,14 @@ function generateTube(segments: TubeSegment[], radialSegments: number, closed: b // 3. Generate indices for (let j = 1; j < segments.length; j++) { for (let i = 1; i <= radialSegments; i++) { - const a = (radialSegments + 1) * (j - 1) + (i - 1); - const b = (radialSegments + 1) * j + (i - 1); - const c = (radialSegments + 1) * j + i; - const d = (radialSegments + 1) * (j - 1) + i; + const a = (radialSegments + 1) * (j - 1) + (i - 1) + const b = (radialSegments + 1) * j + (i - 1) + const c = (radialSegments + 1) * j + i + const d = (radialSegments + 1) * (j - 1) + i // faces - indices.push(a + indexOffset, b + indexOffset, d + indexOffset); - indices.push(b + indexOffset, c + indexOffset, d + indexOffset); + indices.push(a + indexOffset, b + indexOffset, d + indexOffset) + indices.push(b + indexOffset, c + indexOffset, d + indexOffset) indexCount += 6 } } @@ -445,14 +493,18 @@ function generateTube(segments: TubeSegment[], radialSegments: number, closed: b /** * Generates a fully customized tube geometry extruded from a curve. */ -export function createTubeGeometry(curve: Curve3D, options: TubeGeometryOptions = {}) { +export function createTubeGeometry( + curve: Curve3D, + options: TubeGeometryOptions = {} +) { const from = clamp(options.from || 0, 0, 1) const to = clamp(options.to || 1) - if (to < from) throw Error('Value of "from" must be less than the value of "to"!') + if (to < from) + throw Error('Value of "from" must be less than the value of "to"!') const geometry = new BufferGeometry() - + const radius = options.radius || 1 const radiSteps = options.radiusModifier?.steps || [] const radialSegments = options.radialSegments || 8 @@ -465,17 +517,35 @@ export function createTubeGeometry(curve: Curve3D, options: TubeGeometryOptions const segmentsPerMeter = options.segmentsPerMeter || 0.1 const modifierType = options.radiusModifier?.type || 'none' - const simplificationThreshold = clamp(options.simplificationThreshold || 0, 0, 1) - - const segments = calculateTubeSegments(curve, modifierType, from, to, radius, radiSteps, segmentsPerMeter, simplificationThreshold) + const simplificationThreshold = clamp( + options.simplificationThreshold || 0, + 0, + 1 + ) + + const segments = calculateTubeSegments( + curve, + modifierType, + from, + to, + radius, + radiSteps, + segmentsPerMeter, + simplificationThreshold + ) //console.log(segments) - const outerTube: Geometry = generateTube(segments, radialSegments, closed, options) + const outerTube: Geometry = generateTube( + segments, + radialSegments, + closed, + options + ) let innerTube: Geometry | null = null let startCap: Geometry | null = null let endCap: Geometry | null = null - + let indexOffset = outerTube.vertexCount let indexStart = 0 @@ -486,26 +556,49 @@ export function createTubeGeometry(curve: Curve3D, options: TubeGeometryOptions let innerSegments: TubeSegment[] | null = null if (options.innerRadius || options.thickness) { - innerSegments = segments.map(s => ({ + innerSegments = segments.map((s) => ({ ...s, - radius: options.innerRadius || (s.radius - options.thickness!), + radius: options.innerRadius || s.radius - options.thickness!, theta: s.theta - PI, })) - innerTube = generateTube(innerSegments, radialSegments, closed, options, indexOffset) + innerTube = generateTube( + innerSegments, + radialSegments, + closed, + options, + indexOffset + ) indexOffset += innerTube.vertexCount if (options.addGroups) { - geometry.addGroup(indexStart, innerTube.indexCount, geometry.groups.length) + geometry.addGroup( + indexStart, + innerTube.indexCount, + geometry.groups.length + ) indexStart += innerTube.indexCount } } if (includeStartCap && (!closed || from > 0 || to < 1)) { if (innerSegments) { - startCap = generateRingCap(segments[0], innerSegments[0], radialSegments, true, options, indexOffset) + startCap = generateRingCap( + segments[0], + innerSegments[0], + radialSegments, + true, + options, + indexOffset + ) } else { - startCap = generateCap(segments[0], radialSegments, true, options, indexOffset) + startCap = generateCap( + segments[0], + radialSegments, + true, + options, + indexOffset + ) } indexOffset += startCap.vertexCount if (options.addGroups) { @@ -516,9 +609,22 @@ export function createTubeGeometry(curve: Curve3D, options: TubeGeometryOptions if (includeEndCap && (!closed || from > 0 || to < 1)) { if (innerSegments) { - endCap = generateRingCap(segments[segments.length - 1], innerSegments[innerSegments.length - 1], radialSegments, false, options, indexOffset) + endCap = generateRingCap( + segments[segments.length - 1], + innerSegments[innerSegments.length - 1], + radialSegments, + false, + options, + indexOffset + ) } else { - endCap = generateCap(segments[segments.length - 1], radialSegments, false, options, indexOffset) + endCap = generateCap( + segments[segments.length - 1], + radialSegments, + false, + options, + indexOffset + ) } indexOffset += endCap.vertexCount if (options.addGroups) { @@ -529,7 +635,7 @@ export function createTubeGeometry(curve: Curve3D, options: TubeGeometryOptions let vertices = outerTube.vertices let indices = outerTube.indices - + if (innerTube) { vertices = vertices.concat(innerTube.vertices) indices = indices.concat(innerTube.indices.reverse()) @@ -544,8 +650,11 @@ export function createTubeGeometry(curve: Curve3D, options: TubeGeometryOptions vertices = vertices.concat(endCap.vertices) indices = indices.concat(endCap.indices) } - - geometry.setAttribute('position', new BufferAttribute(Float32Array.from(vertices), 3)) + + geometry.setAttribute( + 'position', + new BufferAttribute(Float32Array.from(vertices), 3) + ) if (options.computeNormals) { let normals = outerTube.normals! @@ -558,22 +667,40 @@ export function createTubeGeometry(curve: Curve3D, options: TubeGeometryOptions if (endCap) { normals = normals.concat(endCap.normals!) } - geometry.setAttribute('normal', new BufferAttribute(Float32Array.from(normals), 3)) + geometry.setAttribute( + 'normal', + new BufferAttribute(Float32Array.from(normals), 3) + ) } // add optional attributes - if (options.computeLengths || options.computeCurveNormals || options.computeCurveTangents || options.computeCurveBinormals || options.computeRelativeLengths) { + if ( + options.computeLengths || + options.computeCurveNormals || + options.computeCurveTangents || + options.computeCurveBinormals || + options.computeRelativeLengths + ) { const lengths: number[] | null = options.computeLengths ? [] : null - const relativeLengths: number[] | null = options.computeRelativeLengths ? [] : null - const curveNormals: number[] | null = options.computeCurveNormals ? [] : null - const curveTangents: number[] | null = options.computeCurveTangents ? [] : null - const curveBinormals: number[] | null = options.computeCurveBinormals ? [] : null - - const curveLength = curve.length; + const relativeLengths: number[] | null = options.computeRelativeLengths + ? [] + : null + const curveNormals: number[] | null = options.computeCurveNormals + ? [] + : null + const curveTangents: number[] | null = options.computeCurveTangents + ? [] + : null + const curveBinormals: number[] | null = options.computeCurveBinormals + ? [] + : null + + const curveLength = curve.length for (let i = 0; i < segments.length; i++) { for (let j = 0; j <= radialSegments; j++) { if (lengths) lengths.push(segments[i].curvePosition * curveLength) - if (relativeLengths) relativeLengths.push((segments[i].curvePosition - from) * curveLength) + if (relativeLengths) + relativeLengths.push((segments[i].curvePosition - from) * curveLength) if (curveNormals) curveNormals.push(...segments[i].normal) if (curveTangents) curveTangents.push(...segments[i].tangent) if (curveBinormals) curveBinormals.push(...segments[i].binormal) @@ -582,8 +709,12 @@ export function createTubeGeometry(curve: Curve3D, options: TubeGeometryOptions if (innerTube && innerSegments) { for (let i = 0; i < innerSegments.length; i++) { for (let j = 0; j <= radialSegments; j++) { - if (lengths) lengths.push(innerSegments[i].curvePosition * curveLength) - if (relativeLengths) relativeLengths.push((segments[i].curvePosition - from) * curveLength) + if (lengths) + lengths.push(innerSegments[i].curvePosition * curveLength) + if (relativeLengths) + relativeLengths.push( + (segments[i].curvePosition - from) * curveLength + ) if (curveNormals) curveNormals.push(...innerSegments[i].normal) if (curveTangents) curveTangents.push(...innerSegments[i].tangent) if (curveBinormals) curveBinormals.push(...innerSegments[i].binormal) @@ -603,17 +734,40 @@ export function createTubeGeometry(curve: Curve3D, options: TubeGeometryOptions for (let i = 0; i < endCap.vertexCount; i++) { if (lengths) lengths.push(to * curveLength) if (relativeLengths) relativeLengths.push(curveLength) - if (curveNormals) curveNormals.push(...segments[segments.length - 1].normal) - if (curveTangents) curveTangents.push(...segments[segments.length - 1].tangent) - if (curveBinormals) curveBinormals.push(...segments[segments.length - 1].binormal) + if (curveNormals) + curveNormals.push(...segments[segments.length - 1].normal) + if (curveTangents) + curveTangents.push(...segments[segments.length - 1].tangent) + if (curveBinormals) + curveBinormals.push(...segments[segments.length - 1].binormal) } } - - if (lengths) geometry.setAttribute('curveLength', new BufferAttribute(Float32Array.from(lengths), 1)) - if (relativeLengths) geometry.setAttribute('curveRelativeLength', new BufferAttribute(Float32Array.from(relativeLengths), 1)) - if (curveNormals) geometry.setAttribute('curveNormal', new BufferAttribute(Float32Array.from(curveNormals), 3)) - if (curveTangents) geometry.setAttribute('curveTangent', new BufferAttribute(Float32Array.from(curveTangents), 3)) - if (curveBinormals) geometry.setAttribute('curveBinormal', new BufferAttribute(Float32Array.from(curveBinormals), 3)) + + if (lengths) + geometry.setAttribute( + 'curveLength', + new BufferAttribute(Float32Array.from(lengths), 1) + ) + if (relativeLengths) + geometry.setAttribute( + 'curveRelativeLength', + new BufferAttribute(Float32Array.from(relativeLengths), 1) + ) + if (curveNormals) + geometry.setAttribute( + 'curveNormal', + new BufferAttribute(Float32Array.from(curveNormals), 3) + ) + if (curveTangents) + geometry.setAttribute( + 'curveTangent', + new BufferAttribute(Float32Array.from(curveTangents), 3) + ) + if (curveBinormals) + geometry.setAttribute( + 'curveBinormal', + new BufferAttribute(Float32Array.from(curveBinormals), 3) + ) } if (options.computeUvs) { diff --git a/src/sdk/utils/numbers.ts b/src/sdk/utils/numbers.ts index cebe2b9..7bfcc15 100644 --- a/src/sdk/utils/numbers.ts +++ b/src/sdk/utils/numbers.ts @@ -26,7 +26,6 @@ export function remap( export const toRGB = (v: number) => { if (v < 0) return [0, 0, 0] - if (v > 1677.215) return [255, 255, 255] const m = Math.round(v * 1000) const r = Math.floor(m / 65536) diff --git a/src/storybook/examples/Wellbore.example.stories.tsx b/src/storybook/examples/Wellbore.example.stories.tsx index d7fc5d3..bebc5ab 100644 --- a/src/storybook/examples/Wellbore.example.stories.tsx +++ b/src/storybook/examples/Wellbore.example.stories.tsx @@ -55,6 +55,7 @@ export const Default: Story = { id: wellboreId, sizeMultiplier: 10, segmentsPerMeter: 0.1, + simplificationThreshold: 0, showTrajectory: true, showCompletion: true, showCompletionAnnotations: true, @@ -79,7 +80,7 @@ export const Default: Story = { sizeMultiplier: { control: { type: 'range', min: 1, max: 10, step: 1 } }, casingOpacity: { control: { type: 'range', min: 0.1, max: 1, step: 0.1 } }, segmentsPerMeter: { - control: { type: 'range', min: 0.1, max: 20, step: 0.1 } + control: { type: 'range', min: 0.1, max: 2, step: 0.1 } }, simplificationThreshold: { control: { type: 'range', min: 0, max: 0.0001, step: 0.000001 } diff --git a/src/storybook/examples/Wells.example.stories.tsx b/src/storybook/examples/Wells.example.stories.tsx index 48511c3..b2114af 100644 --- a/src/storybook/examples/Wells.example.stories.tsx +++ b/src/storybook/examples/Wells.example.stories.tsx @@ -37,6 +37,7 @@ import { DataProviderDecorator } from '../decorators/data-provider-decorator' import { EventEmitterDecorator } from '../decorators/event-emitter-decorator' import { GeneratorsProviderDecorator } from '../decorators/generators-provider-decorator' import { OutputPanelDecorator } from '../decorators/output-panel-decorator' +import { PerformanceDecorator } from '../decorators/performance-decorator' import { WellMapDecorator } from '../decorators/well-map-decorator' import { useSurfaceMetaDict } from '../hooks/useSurfaceMeta' import { useWellboreHeaders } from '../hooks/useWellboreHeaders' @@ -82,7 +83,8 @@ type ExampleProps = { casingOpacity: number, sizeMultiplier: number, gridCellSize: number, - + segmentsPerMeter: number, + simplificationThreshold: number, } const Example = (args: ExampleProps) => { @@ -261,6 +263,8 @@ const Example = (args: ExampleProps) => { return ( { @@ -436,6 +440,12 @@ const meta = { type: 'select' } }, + segmentsPerMeter: { + control: { type: 'range', min: 0.1, max: 2, step: 0.1 } + }, + simplificationThreshold: { + control: { type: 'range', min: 0, max: 0.0001, step: 0.000001 } + }, }, parameters: { scale: 1000, @@ -444,7 +454,7 @@ const meta = { colorScale, }, decorators: [ - //PerformanceDecorator, + PerformanceDecorator, EventEmitterDecorator, AnnotationsDecorator, Canvas3dDecorator, @@ -486,6 +496,8 @@ export const Default: Story = { sizeMultiplier: 3, casingOpacity: 1, gridCellSize: 500, + segmentsPerMeter: 0.1, + simplificationThreshold: 0, }, } From 2db5a91b0bbe32392e1813ab81683a3c905c9b5e Mon Sep 17 00:00:00 2001 From: kjerandp Date: Thu, 5 Jun 2025 10:41:52 +0200 Subject: [PATCH 5/6] fix SDFTest urls --- src/components/SDFTest/SDFTest.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/SDFTest/SDFTest.tsx b/src/components/SDFTest/SDFTest.tsx index 919438e..cb333be 100644 --- a/src/components/SDFTest/SDFTest.tsx +++ b/src/components/SDFTest/SDFTest.tsx @@ -29,7 +29,7 @@ const fileName = 'OpenSans-Regular' export const SDFTest = ({ text, inBias = 0, outBias = 0, fontSize = 32, rotation = 0, spacing = 0, verticalAlign = 0.0, horizontalAlign = 0.0 }: Props) => { - const glyphAtlas = useTexture(`glyphs/${fileName}.png`, (tex: Texture) => { + const glyphAtlas = useTexture(`./glyphs/${fileName}.png`, (tex: Texture) => { tex.generateMipmaps = false tex.magFilter = LinearFilter tex.minFilter = LinearFilter @@ -39,7 +39,7 @@ export const SDFTest = ({ text, inBias = 0, outBias = 0, fontSize = 32, rotation const [glyphConfig, setGlyphConfig] = useState() useEffect(() => { - get(`glyphs/${fileName}.json`).then((json: MsdfFontJson) => { + get(`./glyphs/${fileName}.json`).then((json: MsdfFontJson) => { setGlyphConfig(createConfig(json)) }).catch(() => setGlyphConfig(null)) }, []) From 0d116e81e09559801a6e854fb37ae9cf63fe806b Mon Sep 17 00:00:00 2001 From: kjerandp Date: Thu, 5 Jun 2025 10:56:07 +0200 Subject: [PATCH 6/6] fixed test --- src/sdk/utils/numbers.ts | 2 +- tests/numbers.test.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sdk/utils/numbers.ts b/src/sdk/utils/numbers.ts index 7bfcc15..bd7c5e4 100644 --- a/src/sdk/utils/numbers.ts +++ b/src/sdk/utils/numbers.ts @@ -26,7 +26,7 @@ export function remap( export const toRGB = (v: number) => { if (v < 0) return [0, 0, 0] - + if (v > 16777.215) throw Error('Value out of range!') const m = Math.round(v * 1000) const r = Math.floor(m / 65536) const g = Math.floor(m / 256) - r * 256 diff --git a/tests/numbers.test.ts b/tests/numbers.test.ts index 258256a..686d1ca 100644 --- a/tests/numbers.test.ts +++ b/tests/numbers.test.ts @@ -38,7 +38,7 @@ describe('numbers', () => { expect(toRGB(1000.21)).toEqual([15, 67, 18]) expect(toRGB(16777.215)).toEqual([255, 255, 255]) expect(toRGB(-1)).toEqual([0, 0, 0]) - expect(toRGB(16777.216)).toEqual([255, 255, 255]) + expect(() => toRGB(16777.216)).toThrowError('Value out of range!') }) }) \ No newline at end of file