From 8c581f7c653e9caed6fec7efee1193f344bfa8de Mon Sep 17 00:00:00 2001 From: Joost Gevaert Date: Wed, 29 Jan 2025 07:59:02 +0100 Subject: [PATCH 01/18] IFC 5 boreholes --- Geotech/WekaHills_GI.ifcx | 775 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 775 insertions(+) create mode 100644 Geotech/WekaHills_GI.ifcx diff --git a/Geotech/WekaHills_GI.ifcx b/Geotech/WekaHills_GI.ifcx new file mode 100644 index 0000000..b13eab0 --- /dev/null +++ b/Geotech/WekaHills_GI.ifcx @@ -0,0 +1,775 @@ +[ + { + "disclaimer": "2024-09-25 publication of the examples. (C) buildingSMART International. Published under CC BY-ND 4.0." + }, + { + "def": "class", + "type": "UsdGeom:Xform", + "name": "Ndd9e46015e7c4b59be0b1b98dfcadb74", + "children": [ + { + "def": "def", + "name": "WekaHills", + "inherits": [ + "" + ] + } + ] + }, + { + "def": "def", + "type": "Xform", + "name": "WekaHillsLeapfrogDemo", + "inherits": [ + "" + ] + }, + { + "def": "over", + "name": "Ndd9e46015e7c4b59be0b1b98dfcadb74", + "attributes": { + "ifc5:class": { + "code": "IfcProject", + "uri": "https://identifier.buildingsmart.org/uri/buildingsmart/ifc/4.3/class/IfcProject" + } + } + }, + { + "def": "class", + "type": "UsdGeom:Xform", + "name": "N337e2116e7e24dd390ddbf2e42555fac", + "children": [ + { + "def": "def", + "name": "WH_009", + "inherits": [ + "" + ] + }, + { + "def": "def", + "name": "WH_012", + "inherits": [ + "" + ] + } + ] + }, + { + "def": "over", + "name": "N337e2116e7e24dd390ddbf2e42555fac", + "attributes": { + "ifc5:class": { + "code": "IfcSite", + "uri": "https://identifier.buildingsmart.org/uri/buildingsmart/ifc/4.3/class/IfcSite" + } + } + }, + { + "def": "class", + "type": "UsdGeom:Xform", + "name": "Nad68cd145a6b43fdb0232e0b11a6c7bc", + "children": [ + { + "def": "def", + "name": "GEOL", + "inherits": [ + "" + ] + } + ] + }, + { + "def": "over", + "name": "Nad68cd145a6b43fdb0232e0b11a6c7bc", + "attributes": { + "ifc5:class": { + "code": "IfcBorehole", + "uri": "https://identifier.buildingsmart.org/uri/buildingsmart/ifc/4.3/class/IfcBorehole" + } + } + }, + { + "def": "class", + "type": "UsdGeom:Xform", + "name": "Nd9114025e8e9454b8aa05d59e9d75cbd", + "children": [ + { + "def": "def", + "name": "Alluvium", + "inherits": [ + "" + ] + }, + { + "def": "def", + "name": "Siltstone", + "inherits": [ + "" + ] + } + ] + }, + { + "def": "class", + "type": "UsdGeom:Xform", + "name": "N7b6562e1261a4f9eacbbe3f56caa1b88", + "children": [ + { + "def": "def", + "type": "UsdGeom:BasisCurves", + "name": "LineString", + "inherits": [ + "" + ] + } + ] + }, + { + "def": "over", + "name": "N7b6562e1261a4f9eacbbe3f56caa1b88", + "attributes": { + "ifc5:class": { + "code": "IfcGeotechnicalStratum", + "uri": "https://identifier.buildingsmart.org/uri/buildingsmart/ifc/4.3/class/IfcGeotechnicalStratum" + } + } + }, + { + "def": "over", + "name": "N7b6562e1261a4f9eacbbe3f56caa1b88", + "attributes": { + "ifc5:properties": { + "description": "Weak thinly bedded brown fine-med grained sandy ALLUVIUM" + } + } + }, + { + "def": "over", + "name": "N7b6562e1261a4f9eacbbe3f56caa1b88", + "attributes": { + "ags4": { + "group": "GEOL", + "LOCA_ID": "WH_009", + "GEOL_TOP": 0, + "GEOL_BASE": 6.085, + "GEOL_DESC": "Weak thinly bedded brown fine-med grained sandy ALLUVIUM", + "GEOL_GEOL": "Alluvium" + } + } + }, + { + "def": "over", + "name": "N7b6562e1261a4f9eacbbe3f56caa1b88", + "attributes": { + "UsdShade:MaterialBindingAPI": { + "material:binding": { + "ref": "" + } + } + } + }, + { + "def": "class", + "type": "UsdGeom:BasisCurves", + "name": "N7b6562e1261a4f9eacbbe3f56caa1b88_LineString" + }, + { + "def": "over", + "name": "N7b6562e1261a4f9eacbbe3f56caa1b88_LineString", + "attributes": { + "UsdGeom:BasisCurves": { + "points": [ + [ + 1167046.628, + 4888785.276, + 502.8813831 + ], + [ + 1167046.628, + 4888785.276, + 496.7963831 + ] + ] + } + } + }, + { + "def": "class", + "type": "UsdGeom:Xform", + "name": "Nc627679f80254e4abab62e6f40bcb332", + "children": [ + { + "def": "def", + "type": "UsdGeom:BasisCurves", + "name": "LineString", + "inherits": [ + "" + ] + } + ] + }, + { + "def": "over", + "name": "Nc627679f80254e4abab62e6f40bcb332", + "attributes": { + "ifc5:class": { + "code": "IfcGeotechnicalStratum", + "uri": "https://identifier.buildingsmart.org/uri/buildingsmart/ifc/4.3/class/IfcGeotechnicalStratum" + } + } + }, + { + "def": "over", + "name": "Nc627679f80254e4abab62e6f40bcb332", + "attributes": { + "ifc5:properties": { + "description": "Med-strong medium bedded brown sandy SILTSTONE with occasional subangular to subrounded pebbles" + } + } + }, + { + "def": "over", + "name": "Nc627679f80254e4abab62e6f40bcb332", + "attributes": { + "ags4": { + "group": "GEOL", + "LOCA_ID": "WH_009", + "GEOL_TOP": 6.085, + "GEOL_BASE": 50, + "GEOL_DESC": "Med-strong medium bedded brown sandy SILTSTONE with occasional subangular to subrounded pebbles", + "GEOL_GEOL": "Siltstone" + } + } + }, + { + "def": "over", + "name": "Nc627679f80254e4abab62e6f40bcb332", + "attributes": { + "UsdShade:MaterialBindingAPI": { + "material:binding": { + "ref": "" + } + } + } + }, + { + "def": "class", + "type": "UsdGeom:BasisCurves", + "name": "Nc627679f80254e4abab62e6f40bcb332_LineString" + }, + { + "def": "over", + "name": "Nc627679f80254e4abab62e6f40bcb332_LineString", + "attributes": { + "UsdGeom:BasisCurves": { + "points": [ + [ + 1167046.628, + 4888785.276, + 496.7963831 + ], + [ + 1167046.628, + 4888785.276, + 452.8813831 + ] + ] + } + } + }, + { + "def": "class", + "type": "UsdGeom:Xform", + "name": "N996ff9e7b86240f898d4d038ab311d1b", + "children": [ + { + "def": "def", + "name": "GEOL", + "inherits": [ + "" + ] + } + ] + }, + { + "def": "over", + "name": "N996ff9e7b86240f898d4d038ab311d1b", + "attributes": { + "ifc5:class": { + "code": "IfcBorehole", + "uri": "https://identifier.buildingsmart.org/uri/buildingsmart/ifc/4.3/class/IfcBorehole" + } + } + }, + { + "def": "class", + "type": "UsdGeom:Xform", + "name": "Nefb42b81d3e147e4bb19723fb504655d", + "children": [ + { + "def": "def", + "name": "Alluvium_Sand", + "inherits": [ + "" + ] + }, + { + "def": "def", + "name": "Alluvium_Clay", + "inherits": [ + "" + ] + }, + { + "def": "def", + "name": "Siltstone", + "inherits": [ + "" + ] + }, + { + "def": "def", + "name": "Basement", + "inherits": [ + "" + ] + } + ] + }, + { + "def": "class", + "type": "UsdGeom:Xform", + "name": "N1548f2435d6444298da2dbb9529e424a", + "children": [ + { + "def": "def", + "type": "UsdGeom:BasisCurves", + "name": "LineString", + "inherits": [ + "" + ] + } + ] + }, + { + "def": "over", + "name": "N1548f2435d6444298da2dbb9529e424a", + "attributes": { + "ifc5:class": { + "code": "IfcGeotechnicalStratum", + "uri": "https://identifier.buildingsmart.org/uri/buildingsmart/ifc/4.3/class/IfcGeotechnicalStratum" + } + } + }, + { + "def": "over", + "name": "N1548f2435d6444298da2dbb9529e424a", + "attributes": { + "ifc5:properties": { + "description": "Very weak thinly bedded brown medium grained sand to gravel ALLUVIUM with fractures" + } + } + }, + { + "def": "over", + "name": "N1548f2435d6444298da2dbb9529e424a", + "attributes": { + "ags4": { + "group": "GEOL", + "LOCA_ID": "WH_012", + "GEOL_TOP": 0, + "GEOL_BASE": 32.841, + "GEOL_DESC": "Very weak thinly bedded brown medium grained sand to gravel ALLUVIUM with fractures", + "GEOL_GEOL": "Alluvium" + } + } + }, + { + "def": "over", + "name": "N1548f2435d6444298da2dbb9529e424a", + "attributes": { + "UsdShade:MaterialBindingAPI": { + "material:binding": { + "ref": "" + } + } + } + }, + { + "def": "class", + "type": "UsdGeom:BasisCurves", + "name": "N1548f2435d6444298da2dbb9529e424a_LineString" + }, + { + "def": "over", + "name": "N1548f2435d6444298da2dbb9529e424a_LineString", + "attributes": { + "UsdGeom:BasisCurves": { + "points": [ + [ + 1165777.32, + 4888011.236, + 563.4533858 + ], + [ + 1165777.32, + 4888011.236, + 530.6123858 + ] + ] + } + } + }, + { + "def": "class", + "type": "UsdGeom:Xform", + "name": "N20d9455fa8974a67825b2e86621b4d59", + "children": [ + { + "def": "def", + "type": "UsdGeom:BasisCurves", + "name": "LineString", + "inherits": [ + "" + ] + } + ] + }, + { + "def": "over", + "name": "N20d9455fa8974a67825b2e86621b4d59", + "attributes": { + "ifc5:class": { + "code": "IfcGeotechnicalStratum", + "uri": "https://identifier.buildingsmart.org/uri/buildingsmart/ifc/4.3/class/IfcGeotechnicalStratum" + } + } + }, + { + "def": "over", + "name": "N20d9455fa8974a67825b2e86621b4d59", + "attributes": { + "ifc5:properties": { + "description": "Very weak thinly bedded clay-fine sand ALLUVIUM with fractures" + } + } + }, + { + "def": "over", + "name": "N20d9455fa8974a67825b2e86621b4d59", + "attributes": { + "ags4": { + "group": "GEOL", + "LOCA_ID": "WH_012", + "GEOL_TOP": 32.841, + "GEOL_BASE": 43.847, + "GEOL_DESC": "Very weak thinly bedded clay-fine sand ALLUVIUM with fractures", + "GEOL_GEOL": "Alluvium" + } + } + }, + { + "def": "over", + "name": "N20d9455fa8974a67825b2e86621b4d59", + "attributes": { + "UsdShade:MaterialBindingAPI": { + "material:binding": { + "ref": "" + } + } + } + }, + { + "def": "class", + "type": "UsdGeom:BasisCurves", + "name": "N20d9455fa8974a67825b2e86621b4d59_LineString" + }, + { + "def": "over", + "name": "N20d9455fa8974a67825b2e86621b4d59_LineString", + "attributes": { + "UsdGeom:BasisCurves": { + "points": [ + [ + 1165777.32, + 4888011.236, + 530.6123858 + ], + [ + 1165777.32, + 4888011.236, + 519.6063858 + ] + ] + } + } + }, + { + "def": "class", + "type": "UsdGeom:Xform", + "name": "N2a637b43021645d2b80395253b761079", + "children": [ + { + "def": "def", + "type": "UsdGeom:BasisCurves", + "name": "LineString", + "inherits": [ + "" + ] + } + ] + }, + { + "def": "over", + "name": "N2a637b43021645d2b80395253b761079", + "attributes": { + "ifc5:class": { + "code": "IfcGeotechnicalStratum", + "uri": "https://identifier.buildingsmart.org/uri/buildingsmart/ifc/4.3/class/IfcGeotechnicalStratum" + } + } + }, + { + "def": "over", + "name": "N2a637b43021645d2b80395253b761079", + "attributes": { + "ifc5:properties": { + "description": "Med-strong medium bedded brown sandy SILTSTONE with occasional subangular to subrounded pebbles" + } + } + }, + { + "def": "over", + "name": "N2a637b43021645d2b80395253b761079", + "attributes": { + "ags4": { + "group": "GEOL", + "LOCA_ID": "WH_012", + "GEOL_TOP": 43.847, + "GEOL_BASE": 173.552, + "GEOL_DESC": "Med-strong medium bedded brown sandy SILTSTONE with occasional subangular to subrounded pebbles", + "GEOL_GEOL": "Siltstone" + } + } + }, + { + "def": "over", + "name": "N2a637b43021645d2b80395253b761079", + "attributes": { + "UsdShade:MaterialBindingAPI": { + "material:binding": { + "ref": "" + } + } + } + }, + { + "def": "class", + "type": "UsdGeom:BasisCurves", + "name": "N2a637b43021645d2b80395253b761079_LineString" + }, + { + "def": "over", + "name": "N2a637b43021645d2b80395253b761079_LineString", + "attributes": { + "UsdGeom:BasisCurves": { + "points": [ + [ + 1165777.32, + 4888011.236, + 519.6063858 + ], + [ + 1165777.32, + 4888011.236, + 389.90138579999996 + ] + ] + } + } + }, + { + "def": "class", + "type": "UsdGeom:Xform", + "name": "N48346d772d2f4fff8e47af6be729f2bd", + "children": [ + { + "def": "def", + "type": "UsdGeom:BasisCurves", + "name": "LineString", + "inherits": [ + "" + ] + } + ] + }, + { + "def": "over", + "name": "N48346d772d2f4fff8e47af6be729f2bd", + "attributes": { + "ifc5:class": { + "code": "IfcGeotechnicalStratum", + "uri": "https://identifier.buildingsmart.org/uri/buildingsmart/ifc/4.3/class/IfcGeotechnicalStratum" + } + } + }, + { + "def": "over", + "name": "N48346d772d2f4fff8e47af6be729f2bd", + "attributes": { + "ifc5:properties": { + "description": "Very strong folliated green schistose undifferentiated volcanic BASEMENT" + } + } + }, + { + "def": "over", + "name": "N48346d772d2f4fff8e47af6be729f2bd", + "attributes": { + "ags4": { + "group": "GEOL", + "LOCA_ID": "WH_012", + "GEOL_TOP": 173.552, + "GEOL_BASE": 300, + "GEOL_DESC": "Very strong folliated green schistose undifferentiated volcanic BASEMENT", + "GEOL_GEOL": "Basement" + } + } + }, + { + "def": "over", + "name": "N48346d772d2f4fff8e47af6be729f2bd", + "attributes": { + "UsdShade:MaterialBindingAPI": { + "material:binding": { + "ref": "" + } + } + } + }, + { + "def": "class", + "type": "UsdGeom:BasisCurves", + "name": "N48346d772d2f4fff8e47af6be729f2bd_LineString" + }, + { + "def": "over", + "name": "N48346d772d2f4fff8e47af6be729f2bd_LineString", + "attributes": { + "UsdGeom:BasisCurves": { + "points": [ + [ + 1165777.32, + 4888011.236, + 389.90138579999996 + ], + [ + 1165777.32, + 4888011.236, + 263.4533858 + ] + ] + } + } + }, + { + "def": "def", + "type": "UsdShade:Material", + "name": "AlluviumShaderMaterial", + "children": [ + { + "def": "def", + "type": "UsdShade:Shader", + "name": "Shader", + "attributes": { + "info:id": "UsdPreviewSurface", + "inputs:diffuseColor": [ + 1, + 0.835, + 0.02 + ], + "inputs:opacity": 1, + "outputs:surface": null + } + } + ] + }, + { + "def": "over", + "name": "AlluviumShaderMaterial", + "attributes": { + "UsdShade:Material": { + "outputs:surface.connect": { + "ref": "" + } + } + } + }, + { + "def": "def", + "type": "UsdShade:Material", + "name": "SiltstoneShaderMaterial", + "children": [ + { + "def": "def", + "type": "UsdShade:Shader", + "name": "Shader", + "attributes": { + "info:id": "UsdPreviewSurface", + "inputs:diffuseColor": [ + 0.3, + 0.6, + 0.45 + ], + "inputs:opacity": 1, + "outputs:surface": null + } + } + ] + }, + { + "def": "over", + "name": "SiltstoneShaderMaterial", + "attributes": { + "UsdShade:Material": { + "outputs:surface.connect": { + "ref": "" + } + } + } + }, + { + "def": "def", + "type": "UsdShade:Material", + "name": "GeologicalBasementShaderMaterial", + "children": [ + { + "def": "def", + "type": "UsdShade:Shader", + "name": "Shader", + "attributes": { + "info:id": "UsdPreviewSurface", + "inputs:diffuseColor": [ + 0.52, + 0.18, + 0.78 + ], + "inputs:opacity": 1, + "outputs:surface": null + } + } + ] + }, + { + "def": "over", + "name": "GeologicalBasementShaderMaterial", + "attributes": { + "UsdShade:Material": { + "outputs:surface.connect": { + "ref": "" + } + } + } + } +] From 527df7b45715a690c4034994960f4a8c4013fb14 Mon Sep 17 00:00:00 2001 From: Joost Gevaert Date: Wed, 29 Jan 2025 08:00:23 +0100 Subject: [PATCH 02/18] Link a CRS to objects in IFC 5 --- Geotech/WekaHills_CRS_EPSG2193.ifcx | 51 +++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 Geotech/WekaHills_CRS_EPSG2193.ifcx diff --git a/Geotech/WekaHills_CRS_EPSG2193.ifcx b/Geotech/WekaHills_CRS_EPSG2193.ifcx new file mode 100644 index 0000000..c36c46c --- /dev/null +++ b/Geotech/WekaHills_CRS_EPSG2193.ifcx @@ -0,0 +1,51 @@ +[ + { + "def": "def", + "name": "urn:ogc:def:crs:EPSG::2193", + "comment": "The name of this object is an OGC Uniform Resource Name.", + "type": "crs", + "attributes": { + "WKT-CRS": { + "ISO": "ISO 19162:2019", + "wkt": "PROJCRS[\"NZGD2000 / New Zealand Transverse Mercator 2000\",BASEGEOGCRS[\"NZGD2000\",DATUM[\"New Zealand Geodetic Datum 2000\",ELLIPSOID[\"GRS 1980\",6378137,298.257222101,LENGTHUNIT[\"metre\",1]]],PRIMEM[\"Greenwich\",0,ANGLEUNIT[\"degree\",0.0174532925199433]],ID[\"EPSG\",4167]],CONVERSION[\"New Zealand Transverse Mercator 2000\",METHOD[\"Transverse Mercator\",ID[\"EPSG\",9807]],PARAMETER[\"Latitude of natural origin\",0,ANGLEUNIT[\"degree\",0.0174532925199433],ID[\"EPSG\",8801]],PARAMETER[\"Longitude of natural origin\",173,ANGLEUNIT[\"degree\",0.0174532925199433],ID[\"EPSG\",8802]],PARAMETER[\"Scale factor at natural origin\",0.9996,SCALEUNIT[\"unity\",1],ID[\"EPSG\",8805]],PARAMETER[\"False easting\",1600000,LENGTHUNIT[\"metre\",1],ID[\"EPSG\",8806]],PARAMETER[\"False northing\",10000000,LENGTHUNIT[\"metre\",1],ID[\"EPSG\",8807]]],CS[Cartesian,2],AXIS[\"northing (N)\",north,ORDER[1],LENGTHUNIT[\"metre\",1]],AXIS[\"easting (E)\",east,ORDER[2],LENGTHUNIT[\"metre\",1]],USAGE[SCOPE[\"Engineering survey, topographic mapping.\"],AREA[\"New Zealand - North Island, South Island, Stewart Island - onshore.\"],BBOX[-47.33,166.37,-34.1,178.63]],ID[\"EPSG\",2193]]", + "name": "NZGD2000 / New Zealand Transverse Mercator 2000", + "authority_id": "EPSG:2193", + "units": "m", + "offset_x": 0, + "offset_y": 0, + "offset_z": 0, + "rotation": 0 + } + } + }, + { + "def": "over", + "name": "Nad68cd145a6b43fdb0232e0b11a6c7bc", + "comment": "Assigns urn:ogc:def:crs:EPSG::2193 to the instance of borehole WH_009", + "attributes": { + "crs": { + "ref": "" + } + } + }, + { + "def": "over", + "name": "N996ff9e7b86240f898d4d038ab311d1b", + "comment": "Assigns urn:ogc:def:crs:EPSG::2193 to the instance of borehole WH_012", + "attributes": { + "crs": { + "ref": "" + } + } + }, + { + "def": "over", + "name": "N25dbbae886194be6b469e4f17f0b605c", + "comment": "Assigns urn:ogc:def:crs:EPSG::2193 to the instance of the GeologyModel", + "attributes": { + "crs": { + "ref": "" + } + } + } +] From b5fecd93dfd3f75ea069790388d71eef2f545c7b Mon Sep 17 00:00:00 2001 From: Joost Gevaert Date: Wed, 29 Jan 2025 08:10:50 +0100 Subject: [PATCH 03/18] Jupyter Notebook for generation of IFC5 GeologyModel UsdGeom and IFC 5 CRS objects. --- Geotech/ifc5_geotech.ipynb | 275 +++++++++++++++++++++++++++++++++++++ 1 file changed, 275 insertions(+) create mode 100644 Geotech/ifc5_geotech.ipynb diff --git a/Geotech/ifc5_geotech.ipynb b/Geotech/ifc5_geotech.ipynb new file mode 100644 index 0000000..9c7fdc9 --- /dev/null +++ b/Geotech/ifc5_geotech.ipynb @@ -0,0 +1,275 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import json\n", + "\n", + "from pyproj import CRS, Transformer\n", + "from specklepy.api.client import SpeckleClient\n", + "from specklepy.core.api import operations\n", + "from specklepy.transports.server import ServerTransport" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Leapfrog Weka Hills Demo Model from Speckle to IFC 5" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "weka_hills_speckle_project_id = \"7a489ac0d4\"\n", + "ifc5_geo_dict = {\"name\": \"Alluvium\", \"ifc5_ref\": \"Ne4ef1ea1101a484183bb8a716924702e\"}\n", + "# ifc5_geo_dict = {\"name\": \"Siltstone\", \"ifc5_ref\": \"N4586ef982fd34faab3de532a7a43544d\"}\n", + "# ifc5_geo_dict = {\"name\": \"Basement\", \"ifc5_ref\": \"N450a532f5e414d609856a8a50b6a94ad\"}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "speckle_client = SpeckleClient(host=\"app.speckle.systems\")\n", + "transport = ServerTransport(\n", + " stream_id=weka_hills_speckle_project_id, client=speckle_client\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "weka_hills_speckle_models = speckle_client.model.get_models(\n", + " project_id=weka_hills_speckle_project_id\n", + ")\n", + "\n", + "geology_models_w_versions = {}\n", + "for model in weka_hills_speckle_models.items:\n", + " if \"geo/geology-model\" in model.name:\n", + " geological_unit = str(model.name).replace(\"geo/geology-model/\", \"\")\n", + " speckle_model = speckle_client.model.get_with_versions(\n", + " model_id=model.id,\n", + " project_id=weka_hills_speckle_project_id,\n", + " )\n", + " geology_models_w_versions[geological_unit] = speckle_model\n", + " print(f\"{geological_unit}: {model.id}\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "model_data = operations.receive(\n", + " geology_models_w_versions[ifc5_geo_dict[\"name\"].lower()]\n", + " .versions.items[0]\n", + " .referencedObject,\n", + " transport,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "speckle_faces = model_data.elements[0].elements[0].elements[0].elements[0].faces\n", + "face_vertex_counts = []\n", + "face_vertex_indices = []\n", + "i = 0\n", + "while i < len(speckle_faces):\n", + " vertex_count = speckle_faces[i]\n", + " face_vertex_counts.append(vertex_count)\n", + " face_vertex_indices.extend(speckle_faces[i + 1 : i + 1 + vertex_count])\n", + " i += 1 + vertex_count\n", + "\n", + "speckle_vertices = model_data.elements[0].elements[0].elements[0].elements[0].vertices\n", + "points = [speckle_vertices[i : i + 3] for i in range(0, len(speckle_vertices), 3)]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ifc5_usdgeom = [\n", + " {\n", + " \"def\": \"over\",\n", + " \"name\": f\"{ifc5_geo_dict['ref']}_Body\",\n", + " \"attributes\": {\n", + " \"UsdGeom:Mesh\": {\n", + " # \"faceVertexCounts\": face_vertex_counts,\n", + " \"faceVertexIndices\": face_vertex_indices,\n", + " \"points\": points,\n", + " }\n", + " },\n", + " }\n", + "]\n", + "\n", + "with open(\n", + " f\"WekaHills_GeologyModel_{ifc5_geo_dict['name']}_UsdGeom.ifcx\", \"w\"\n", + ") as json_file:\n", + " json.dump(ifc5_usdgeom, json_file)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For testing purposes, one can create an `.obj` file from the Speckle geometry as follows:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "with open(f\"{geological_unit}Mesh.obj\", \"w\") as obj_file:\n", + " for point in points:\n", + " obj_file.write(f\"v {point[0]} {point[1]} {point[2]}\\n\")\n", + " for i in range(0, len(face_vertex_indices), 3):\n", + " # OBJ uses 1-based indexing, so add 1 to the indices\n", + " obj_file.write(\n", + " f\"f {face_vertex_indices[i] + 1} {face_vertex_indices[i + 1] + 1} {face_vertex_indices[i + 2] + 1}\\n\"\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# CRS Objects in IFC 5\n", + "\n", + "Coordinate Reference Systems (CRS') can be defined using the Well-Known Text representation of Coordinate Reference Systems (WKT-CRS | [Wikipedia](http://en.wikipedia.org/wiki/Well-known_text_representation_of_coordinate_reference_systems) | [OGC Specification](https://docs.ogc.org/is/18-010r7/18-010r7.html)). This representation of CRS' is also an ISO standard: ISO 19162:2019.\n", + "\n", + "Notes from the Wikipedia WKT-CRS \"Version history\" section:\n", + "\n", + "> Confusingly, the original 2015 \"WKT 2\" standard has a version number 1 for the new, stricter WKT-CRS specification. A newer revision called WKT-CRS 2 was published in 2018, with the ISO version being ISO 19162:2019.\n", + "\n", + "> ESRI vs OGC \n", + "> ... some databases differentiate between \"OGC WKT\" and \"ESRI WKT\" representations. The problem is largely resolved in WKT[-CRS] 2, as it is better-defined.\n", + "\n", + "These differences in how WKT strings are also clear from the export section when looking up a CRS on [epsg.io](https://epsg.io). For example, have a look at the differences between the \"OGC WKT\", \"OGC WKT 2\" and \"ESRI WKT\" results in the export section at the bottom of the [epsg.io/2193](https://epsg.io/2193) page." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "weka_hills_crs = CRS(2193)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ifc5_wkt_crs = [\n", + " {\n", + " \"def\": \"def\",\n", + " \"name\": \"CRS_EPSG:2193\",\n", + " \"type\": \"OGC:CRS\",\n", + " \"attributes\": {\n", + " \"WKT-CRS\": {\n", + " \"ISO\": \"ISO 19162:2019\",\n", + " \"wkt\": weka_hills_crs.to_wkt(),\n", + " \"name\": weka_hills_crs.name,\n", + " \"authority_id\": f\"EPSG:{weka_hills_crs.to_authority()[1]}\",\n", + " \"units\": \"m\",\n", + " \"offset_x\": 0,\n", + " \"offset_y\": 0,\n", + " \"offset_z\": 0,\n", + " \"rotation\": 0,\n", + " }\n", + " },\n", + " },\n", + " {\n", + " \"def\": \"over\",\n", + " \"name\": \"Nad68cd145a6b43fdb0232e0b11a6c7bc\",\n", + " \"comment\": \"Assigns CRS_EPSG:2193 to the instance of borehole WH_009\",\n", + " \"attributes\": {\"crs\": {\"ref\": \"\"}},\n", + " },\n", + " {\n", + " \"def\": \"over\",\n", + " \"name\": \"N996ff9e7b86240f898d4d038ab311d1b\",\n", + " \"comment\": \"Assigns CRS_EPSG:2193 to the instance of borehole WH_012\",\n", + " \"attributes\": {\"crs\": {\"ref\": \"\"}},\n", + " },\n", + " {\n", + " \"def\": \"over\",\n", + " \"name\": \"N25dbbae886194be6b469e4f17f0b605c\",\n", + " \"comment\": \"Assigns CRS_EPSG:2193 to the instance of the GeologyModel\",\n", + " \"attributes\": {\"crs\": {\"ref\": \"\"}},\n", + " },\n", + "]\n", + "\n", + "with open(\"WekaHills_CRS_EPSG2193.ifcx\", \"w\") as json_file:\n", + " json.dump(ifc5_wkt_crs, json_file, indent=2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Longitude is the x-coordinate or east-west coordinate on earth expressed in 0 to 180 degrees east or west of the Greenwich prime meridian or in -180 to 180 degrees relative to the Greenwich prime meridian.\n", + "\n", + "Latitude is the y-coordinate or north-south coordinate on earth expressed in 0 to 90 north or south of the equator or in -90 to 90 degrees relative to the equator.\n", + "\n", + "Historically, coordinates on earth are denoted (Latitude, Longitude), because it was easier to determine the north-south position than the east-west position. This because the north-south position can be determined from the sun, stars and other heavenly bodies, whereas one need to accurately know the time in order to determine the east-west position.\n", + "\n", + "Nowadays, especially on the web, it's common to write coordinates on earth in [Longitude, Latitude], because we commonly write down coordinates [x, y]." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "transformer = Transformer.from_crs(weka_hills_crs, 4326, always_xy=True)\n", + "custom_lon, custom_lat = transformer.transform(1166250.104, 4888836.859)\n", + "custom_crs_wkt = f'PROJCS[\"SpeckleCRS_latlon_{custom_lat}_{custom_lon}\", GEOGCS[\"GCS_WGS_1984\", DATUM[\"D_WGS_1984\", SPHEROID[\"WGS_1984\", 6378137.0, 298.257223563]], PRIMEM[\"Greenwich\", 0.0], UNIT[\"Degree\", 0.0174532925199433]], PROJECTION[\"Transverse_Mercator\"], PARAMETER[\"False_Easting\", 0.0], PARAMETER[\"False_Northing\", 0.0], PARAMETER[\"Central_Meridian\", {custom_lon}], PARAMETER[\"Scale_Factor\", 1.0], PARAMETER[\"Latitude_Of_Origin\", {custom_lat}], UNIT[\"Meter\", 1.0]]'" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.10" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From da8865bde980eaac150fbc1739e016f741f387ac Mon Sep 17 00:00:00 2001 From: Joost Gevaert Date: Wed, 29 Jan 2025 08:35:47 +0100 Subject: [PATCH 04/18] Try to get tunnel alignment and excavation geom from Speckle --- Tunnel/ifc5_tunnel.ipynb | 448 +++++++++++++++++++++++++++++++++ Tunnel/receive_from_speckle.py | 36 +++ 2 files changed, 484 insertions(+) create mode 100644 Tunnel/ifc5_tunnel.ipynb create mode 100644 Tunnel/receive_from_speckle.py diff --git a/Tunnel/ifc5_tunnel.ipynb b/Tunnel/ifc5_tunnel.ipynb new file mode 100644 index 0000000..fa8634c --- /dev/null +++ b/Tunnel/ifc5_tunnel.ipynb @@ -0,0 +1,448 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import json\n", + "\n", + "from pyproj import CRS, Transformer\n", + "from specklepy.api.client import SpeckleClient\n", + "from specklepy.core.api import operations\n", + "from specklepy.transports.server import ServerTransport" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Leapfrog Weka Hills Demo Model from Speckle to IFC 5" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "weka_hills_speckle_project_id = \"7a489ac0d4\"\n", + "ifc5_tunnel_dict = {\n", + " \"alignment\": {\"ifc5_ref\": \"N2152bb32e4a045a1ba475c39b312e069\"},\n", + " \"excavation\": {\"ifc5_ref\": \"N59ec758cbae14f2fb4e1c0240a1f79d8\"},\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\joost\\ReposWindows\\IFC5-development\\.venv\\Lib\\site-packages\\specklepy\\transports\\server\\server.py:73: SpeckleWarning: Unauthenticated Speckle Client provided to Server Transport for https://app.speckle.systems. Receiving from private streams will fail.\n", + " warn(\n" + ] + } + ], + "source": [ + "speckle_client = SpeckleClient(host=\"app.speckle.systems\")\n", + "transport = ServerTransport(\n", + " stream_id=weka_hills_speckle_project_id, client=speckle_client\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "transport" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "excavation: 9069ef2b2b\n", + "lining: 6bd2a019cb\n", + "alignment: 643ad7861d\n" + ] + } + ], + "source": [ + "weka_hills_speckle_models = speckle_client.model.get_models(\n", + " project_id=weka_hills_speckle_project_id\n", + ")\n", + "\n", + "for model in weka_hills_speckle_models.items:\n", + " if \"tunnel\" in model.name:\n", + " tunnel_model = str(model.name).replace(\"tunnel/\", \"\")\n", + " print(f\"{tunnel_model}: {model.id}\")\n", + " if tunnel_model not in ifc5_tunnel_dict.keys():\n", + " continue\n", + "\n", + " speckle_model = speckle_client.model.get_with_versions(\n", + " model_id=model.id,\n", + " project_id=weka_hills_speckle_project_id,\n", + " )\n", + " ifc5_tunnel_dict[tunnel_model][\"speckle_model\"] = speckle_model" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'e185acb83934eb6b4554a86fb4362951'" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ifc5_tunnel_dict[tunnel_model][\"speckle_model\"].versions.items[0].referencedObject" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dict_keys(['alignment', 'excavation'])" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ifc5_tunnel_dict.keys()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "ename": "ValueError", + "evalue": "not enough values to unpack (expected 2, got 1)", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[1;32mIn[8], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m model_data \u001b[38;5;241m=\u001b[39m \u001b[43moperations\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mreceive\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 2\u001b[0m \u001b[43m \u001b[49m\u001b[43mifc5_tunnel_dict\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43malignment\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mspeckle_model\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mversions\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mitems\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mreferencedObject\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 3\u001b[0m \u001b[43m \u001b[49m\u001b[43mtransport\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 4\u001b[0m \u001b[43m)\u001b[49m\n", + "File \u001b[1;32mc:\\Users\\joost\\ReposWindows\\IFC5-development\\.venv\\Lib\\site-packages\\specklepy\\core\\api\\operations.py:86\u001b[0m, in \u001b[0;36mreceive\u001b[1;34m(obj_id, remote_transport, local_transport)\u001b[0m\n\u001b[0;32m 78\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m remote_transport:\n\u001b[0;32m 79\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m SpeckleException(\n\u001b[0;32m 80\u001b[0m message\u001b[38;5;241m=\u001b[39m(\n\u001b[0;32m 81\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCould not find the specified object using the local transport, and you\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 82\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m didn\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mt provide a fallback remote from which to pull it.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 83\u001b[0m )\n\u001b[0;32m 84\u001b[0m )\n\u001b[1;32m---> 86\u001b[0m obj_string \u001b[38;5;241m=\u001b[39m \u001b[43mremote_transport\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcopy_object_and_children\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 87\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mid\u001b[39;49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mobj_id\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtarget_transport\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mlocal_transport\u001b[49m\n\u001b[0;32m 88\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 90\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m serializer\u001b[38;5;241m.\u001b[39mread_json(obj_string\u001b[38;5;241m=\u001b[39mobj_string)\n", + "File \u001b[1;32mc:\\Users\\joost\\ReposWindows\\IFC5-development\\.venv\\Lib\\site-packages\\specklepy\\transports\\server\\server.py:172\u001b[0m, in \u001b[0;36mServerTransport.copy_object_and_children\u001b[1;34m(self, id, target_transport)\u001b[0m\n\u001b[0;32m 170\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m line \u001b[38;5;129;01min\u001b[39;00m lines:\n\u001b[0;32m 171\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m line:\n\u001b[1;32m--> 172\u001b[0m \u001b[38;5;28mhash\u001b[39m, obj \u001b[38;5;241m=\u001b[39m line\u001b[38;5;241m.\u001b[39msplit(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;130;01m\\t\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 173\u001b[0m target_transport\u001b[38;5;241m.\u001b[39msave_object(\u001b[38;5;28mhash\u001b[39m, obj)\n\u001b[0;32m 175\u001b[0m target_transport\u001b[38;5;241m.\u001b[39msave_object(\u001b[38;5;28mid\u001b[39m, root_obj_serialized)\n", + "\u001b[1;31mValueError\u001b[0m: not enough values to unpack (expected 2, got 1)" + ] + } + ], + "source": [ + "model_data = operations.receive(\n", + " ifc5_tunnel_dict[\"alignment\"][\"speckle_model\"].versions.items[0].referencedObject,\n", + " transport,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "ename": "ValueError", + "evalue": "not enough values to unpack (expected 2, got 1)", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[1;32mIn[9], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m excavation_model_data \u001b[38;5;241m=\u001b[39m \u001b[43moperations\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mreceive\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 2\u001b[0m \u001b[43m \u001b[49m\u001b[43mifc5_tunnel_dict\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mexcavation\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mspeckle_model\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mversions\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mitems\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mreferencedObject\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 3\u001b[0m \u001b[43m \u001b[49m\u001b[43mremote_transport\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtransport\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 4\u001b[0m \u001b[43m)\u001b[49m\n", + "File \u001b[1;32mc:\\Users\\joost\\ReposWindows\\IFC5-development\\.venv\\Lib\\site-packages\\specklepy\\core\\api\\operations.py:86\u001b[0m, in \u001b[0;36mreceive\u001b[1;34m(obj_id, remote_transport, local_transport)\u001b[0m\n\u001b[0;32m 78\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m remote_transport:\n\u001b[0;32m 79\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m SpeckleException(\n\u001b[0;32m 80\u001b[0m message\u001b[38;5;241m=\u001b[39m(\n\u001b[0;32m 81\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCould not find the specified object using the local transport, and you\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 82\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m didn\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mt provide a fallback remote from which to pull it.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 83\u001b[0m )\n\u001b[0;32m 84\u001b[0m )\n\u001b[1;32m---> 86\u001b[0m obj_string \u001b[38;5;241m=\u001b[39m \u001b[43mremote_transport\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcopy_object_and_children\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 87\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mid\u001b[39;49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mobj_id\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtarget_transport\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mlocal_transport\u001b[49m\n\u001b[0;32m 88\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 90\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m serializer\u001b[38;5;241m.\u001b[39mread_json(obj_string\u001b[38;5;241m=\u001b[39mobj_string)\n", + "File \u001b[1;32mc:\\Users\\joost\\ReposWindows\\IFC5-development\\.venv\\Lib\\site-packages\\specklepy\\transports\\server\\server.py:172\u001b[0m, in \u001b[0;36mServerTransport.copy_object_and_children\u001b[1;34m(self, id, target_transport)\u001b[0m\n\u001b[0;32m 170\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m line \u001b[38;5;129;01min\u001b[39;00m lines:\n\u001b[0;32m 171\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m line:\n\u001b[1;32m--> 172\u001b[0m \u001b[38;5;28mhash\u001b[39m, obj \u001b[38;5;241m=\u001b[39m line\u001b[38;5;241m.\u001b[39msplit(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;130;01m\\t\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 173\u001b[0m target_transport\u001b[38;5;241m.\u001b[39msave_object(\u001b[38;5;28mhash\u001b[39m, obj)\n\u001b[0;32m 175\u001b[0m target_transport\u001b[38;5;241m.\u001b[39msave_object(\u001b[38;5;28mid\u001b[39m, root_obj_serialized)\n", + "\u001b[1;31mValueError\u001b[0m: not enough values to unpack (expected 2, got 1)" + ] + } + ], + "source": [ + "excavation_model_data = operations.receive(\n", + " ifc5_tunnel_dict[\"excavation\"][\"speckle_model\"].versions.items[0].referencedObject,\n", + " remote_transport=transport,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Version(authorUser=LimitedUser(id='88153cc720', name='Joost Gevaert', bio='', company='Bedrock', avatar='data:image/jpeg;base64,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', verified=True, role='server:user'), createdAt=datetime.datetime(2025, 1, 27, 20, 31, 9, 910000, tzinfo=TzInfo(UTC)), id='542a48d337', message=None, previewUrl='https://app.speckle.systems/preview/7a489ac0d4/commits/542a48d337', referencedObject='78f8b3ca58a87a77d752c6ef1a65a81a', sourceApplication='rhino')" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ifc5_tunnel_dict[\"excavation\"][\"speckle_model\"].versions.items[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'78f8b3ca58a87a77d752c6ef1a65a81a'" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ifc5_tunnel_dict[\"excavation\"][\"speckle_model\"].versions.items[0].referencedObject" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "ename": "ValueError", + "evalue": "not enough values to unpack (expected 2, got 1)", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[1;32mIn[25], line 2\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m key, value \u001b[38;5;129;01min\u001b[39;00m ifc5_tunnel_dict\u001b[38;5;241m.\u001b[39mitems():\n\u001b[1;32m----> 2\u001b[0m model_data \u001b[38;5;241m=\u001b[39m \u001b[43moperations\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mreceive\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 3\u001b[0m \u001b[43m \u001b[49m\u001b[43mifc5_tunnel_dict\u001b[49m\u001b[43m[\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m]\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mspeckle_model\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mversions\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mitems\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mreferencedObject\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 4\u001b[0m \u001b[43m \u001b[49m\u001b[43mtransport\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[1;32mc:\\Users\\joost\\ReposWindows\\IFC5-development\\.venv\\Lib\\site-packages\\specklepy\\core\\api\\operations.py:86\u001b[0m, in \u001b[0;36mreceive\u001b[1;34m(obj_id, remote_transport, local_transport)\u001b[0m\n\u001b[0;32m 78\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m remote_transport:\n\u001b[0;32m 79\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m SpeckleException(\n\u001b[0;32m 80\u001b[0m message\u001b[38;5;241m=\u001b[39m(\n\u001b[0;32m 81\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCould not find the specified object using the local transport, and you\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 82\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m didn\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mt provide a fallback remote from which to pull it.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 83\u001b[0m )\n\u001b[0;32m 84\u001b[0m )\n\u001b[1;32m---> 86\u001b[0m obj_string \u001b[38;5;241m=\u001b[39m \u001b[43mremote_transport\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcopy_object_and_children\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 87\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mid\u001b[39;49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mobj_id\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtarget_transport\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mlocal_transport\u001b[49m\n\u001b[0;32m 88\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 90\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m serializer\u001b[38;5;241m.\u001b[39mread_json(obj_string\u001b[38;5;241m=\u001b[39mobj_string)\n", + "File \u001b[1;32mc:\\Users\\joost\\ReposWindows\\IFC5-development\\.venv\\Lib\\site-packages\\specklepy\\transports\\server\\server.py:172\u001b[0m, in \u001b[0;36mServerTransport.copy_object_and_children\u001b[1;34m(self, id, target_transport)\u001b[0m\n\u001b[0;32m 170\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m line \u001b[38;5;129;01min\u001b[39;00m lines:\n\u001b[0;32m 171\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m line:\n\u001b[1;32m--> 172\u001b[0m \u001b[38;5;28mhash\u001b[39m, obj \u001b[38;5;241m=\u001b[39m line\u001b[38;5;241m.\u001b[39msplit(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;130;01m\\t\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 173\u001b[0m target_transport\u001b[38;5;241m.\u001b[39msave_object(\u001b[38;5;28mhash\u001b[39m, obj)\n\u001b[0;32m 175\u001b[0m target_transport\u001b[38;5;241m.\u001b[39msave_object(\u001b[38;5;28mid\u001b[39m, root_obj_serialized)\n", + "\u001b[1;31mValueError\u001b[0m: not enough values to unpack (expected 2, got 1)" + ] + } + ], + "source": [ + "for key, value in ifc5_tunnel_dict.items():\n", + " model_data = operations.receive(\n", + " ifc5_tunnel_dict[key][\"speckle_model\"].versions.items[0].referencedObject,\n", + " transport,\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "speckle_faces = model_data.elements[0].elements[0].elements[0].elements[0].faces\n", + "face_vertex_counts = []\n", + "face_vertex_indices = []\n", + "i = 0\n", + "while i < len(speckle_faces):\n", + " vertex_count = speckle_faces[i]\n", + " face_vertex_counts.append(vertex_count)\n", + " face_vertex_indices.extend(speckle_faces[i + 1 : i + 1 + vertex_count])\n", + " i += 1 + vertex_count\n", + "\n", + "speckle_vertices = model_data.elements[0].elements[0].elements[0].elements[0].vertices\n", + "points = [speckle_vertices[i : i + 3] for i in range(0, len(speckle_vertices), 3)]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "= =-th open(\n", + " f\"WekaHills_GeologyModel_{ifc5_geo_dict['name']}_UsdGeom.ifcx\", \"w\"\n", + ") as json_file:\n", + " json.dump(ifc5_usdgeom, json_file)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For testing purposes, one can create an `.obj` file from the Speckle geometry as follows:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "with open(f\"{tunnel_model}Mesh.obj\", \"w\") as obj_file:\n", + " for point in points:\n", + " obj_file.write(f\"v {point[0]} {point[1]} {point[2]}\\n\")\n", + " for i in range(0, len(face_vertex_indices), 3):\n", + " # OBJ uses 1-based indexing, so add 1 to the indices\n", + " obj_file.write(\n", + " f\"f {face_vertex_indices[i] + 1} {face_vertex_indices[i + 1] + 1} {face_vertex_indices[i + 2] + 1}\\n\"\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# CRS Objects in IFC 5\n", + "\n", + "Coordinate Reference Systems (CRS') can be defined using the Well-Known Text representation of Coordinate Reference Systems (WKT-CRS | [Wikipedia](http://en.wikipedia.org/wiki/Well-known_text_representation_of_coordinate_reference_systems) | [OGC Specification](https://docs.ogc.org/is/18-010r7/18-010r7.html)). This representation of CRS' is also an ISO standard: ISO 19162:2019.\n", + "\n", + "Notes from the Wikipedia WKT-CRS \"Version history\" section:\n", + "\n", + "> Confusingly, the original 2015 \"WKT 2\" standard has a version number 1 for the new, stricter WKT-CRS specification. A newer revision called WKT-CRS 2 was published in 2018, with the ISO version being ISO 19162:2019.\n", + "\n", + "> ESRI vs OGC \n", + "> ... some databases differentiate between \"OGC WKT\" and \"ESRI WKT\" representations. The problem is largely resolved in WKT[-CRS] 2, as it is better-defined.\n", + "\n", + "These differences in how WKT strings are also clear from the export section when looking up a CRS on [epsg.io](https://epsg.io). For example, have a look at the differences between the \"OGC WKT\", \"OGC WKT 2\" and \"ESRI WKT\" results in the export section at the bottom of the [epsg.io/2193](https://epsg.io/2193) page." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "weka_hills_crs = CRS(2193)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ifc5_wkt_crs = [\n", + " {\n", + " \"def\": \"def\",\n", + " \"name\": \"CRS_EPSG:2193\",\n", + " \"type\": \"OGC:CRS\",\n", + " \"attributes\": {\n", + " \"WKT-CRS\": {\n", + " \"ISO\": \"ISO 19162:2019\",\n", + " \"wkt\": weka_hills_crs.to_wkt(),\n", + " \"name\": weka_hills_crs.name,\n", + " \"authority_id\": f\"EPSG:{weka_hills_crs.to_authority()[1]}\",\n", + " \"units\": \"m\",\n", + " \"offset_x\": 0,\n", + " \"offset_y\": 0,\n", + " \"offset_z\": 0,\n", + " \"rotation\": 0,\n", + " }\n", + " },\n", + " },\n", + " {\n", + " \"def\": \"over\",\n", + " \"name\": \"Nad68cd145a6b43fdb0232e0b11a6c7bc\",\n", + " \"comment\": \"Assigns CRS_EPSG:2193 to the instance of borehole WH_009\",\n", + " \"attributes\": {\"crs\": {\"ref\": \"\"}},\n", + " },\n", + " {\n", + " \"def\": \"over\",\n", + " \"name\": \"N996ff9e7b86240f898d4d038ab311d1b\",\n", + " \"comment\": \"Assigns CRS_EPSG:2193 to the instance of borehole WH_012\",\n", + " \"attributes\": {\"crs\": {\"ref\": \"\"}},\n", + " },\n", + " {\n", + " \"def\": \"over\",\n", + " \"name\": \"N25dbbae886194be6b469e4f17f0b605c\",\n", + " \"comment\": \"Assigns CRS_EPSG:2193 to the instance of the GeologyModel\",\n", + " \"attributes\": {\"crs\": {\"ref\": \"\"}},\n", + " },\n", + "]\n", + "\n", + "with open(\"WekaHills_CRS_EPSG2193.ifcx\", \"w\") as json_file:\n", + " json.dump(ifc5_wkt_crs, json_file, indent=2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Longitude is the x-coordinate or east-west coordinate on earth expressed in 0 to 180 degrees east or west of the Greenwich prime meridian or in -180 to 180 degrees relative to the Greenwich prime meridian.\n", + "\n", + "Latitude is the y-coordinate or north-south coordinate on earth expressed in 0 to 90 north or south of the equator or in -90 to 90 degrees relative to the equator.\n", + "\n", + "Historically, coordinates on earth are denoted (Latitude, Longitude), because it was easier to determine the north-south position than the east-west position. This because the north-south position can be determined from the sun, stars and other heavenly bodies, whereas one need to accurately know the time in order to determine the east-west position.\n", + "\n", + "Nowadays, especially on the web, it's common to write coordinates on earth in [Longitude, Latitude], because we commonly write down coordinates [x, y]." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "transformer = Transformer.from_crs(weka_hills_crs, 4326, always_xy=True)\n", + "custom_lon, custom_lat = transformer.transform(1166250.104, 4888836.859)\n", + "custom_crs_wkt = f'PROJCS[\"SpeckleCRS_latlon_{custom_lat}_{custom_lon}\", GEOGCS[\"GCS_WGS_1984\", DATUM[\"D_WGS_1984\", SPHEROID[\"WGS_1984\", 6378137.0, 298.257223563]], PRIMEM[\"Greenwich\", 0.0], UNIT[\"Degree\", 0.0174532925199433]], PROJECTION[\"Transverse_Mercator\"], PARAMETER[\"False_Easting\", 0.0], PARAMETER[\"False_Northing\", 0.0], PARAMETER[\"Central_Meridian\", {custom_lon}], PARAMETER[\"Scale_Factor\", 1.0], PARAMETER[\"Latitude_Of_Origin\", {custom_lat}], UNIT[\"Meter\", 1.0]]'" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.10" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Tunnel/receive_from_speckle.py b/Tunnel/receive_from_speckle.py new file mode 100644 index 0000000..0814d6c --- /dev/null +++ b/Tunnel/receive_from_speckle.py @@ -0,0 +1,36 @@ +from specklepy.api.client import SpeckleClient +from specklepy.core.api import operations +from specklepy.transports.server import ServerTransport + +weka_hills_speckle_project_id = "7a489ac0d4" + +speckle_client = SpeckleClient(host="app.speckle.systems") +transport = ServerTransport( + stream_id=weka_hills_speckle_project_id, client=speckle_client +) + +weka_hills_speckle_models = speckle_client.model.get_models( + project_id=weka_hills_speckle_project_id +) + +speckle_models_w_versions = {} +for model in weka_hills_speckle_models.items: + speckle_model = speckle_client.model.get_with_versions( + model_id=model.id, + project_id=weka_hills_speckle_project_id, + ) + if "geo/geology-model" in model.name: + geological_unit = str(model.name).replace("geo/geology-model/", "") + speckle_models_w_versions[geological_unit] = speckle_model + print(f"{geological_unit}: {model.id}") + elif "tunnel" in model.name: + tunnel_model = str(model.name).replace("tunnel/", "") + speckle_models_w_versions[tunnel_model] = speckle_model + print(f"{tunnel_model}: {model.id}") + +model_data = operations.receive( + # speckle_models_w_versions["alluvium"].versions.items[0].referencedObject, + # speckle_models_w_versions["alignment"].versions.items[0].referencedObject, + speckle_models_w_versions["excavation"].versions.items[0].referencedObject, + transport, +) From 91171a0de8ea3c7aa2133313b7e6cf4b52451cec Mon Sep 17 00:00:00 2001 From: Joost Gevaert Date: Wed, 29 Jan 2025 20:46:23 +0100 Subject: [PATCH 05/18] Remove ref's to Speckle and set up Python env with uv --- Geotech/ifc5_crs.ipynb | 137 +++ Geotech/ifc5_geotech.ipynb | 275 ------ pyproject.toml | 10 + python-version | 1 + uv.lock | 1688 ++++++++++++++++++++++++++++++++++++ 5 files changed, 1836 insertions(+), 275 deletions(-) create mode 100644 Geotech/ifc5_crs.ipynb delete mode 100644 Geotech/ifc5_geotech.ipynb create mode 100644 pyproject.toml create mode 100644 python-version create mode 100644 uv.lock diff --git a/Geotech/ifc5_crs.ipynb b/Geotech/ifc5_crs.ipynb new file mode 100644 index 0000000..82b6f91 --- /dev/null +++ b/Geotech/ifc5_crs.ipynb @@ -0,0 +1,137 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import json\n", + "\n", + "from pyproj import CRS, Transformer" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# CRS Objects in IFC 5\n", + "\n", + "Coordinate Reference Systems (CRS') can be defined using the Well-Known Text representation of Coordinate Reference Systems (WKT-CRS | [Wikipedia](http://en.wikipedia.org/wiki/Well-known_text_representation_of_coordinate_reference_systems) | [OGC Specification](https://docs.ogc.org/is/18-010r7/18-010r7.html)). This representation of CRS' is also an ISO standard: ISO 19162:2019.\n", + "\n", + "Notes from the Wikipedia WKT-CRS \"Version history\" section:\n", + "\n", + "> Confusingly, the original 2015 \"WKT 2\" standard has a version number 1 for the new, stricter WKT-CRS specification. A newer revision called WKT-CRS 2 was published in 2018, with the ISO version being ISO 19162:2019.\n", + "\n", + "> ESRI vs OGC \n", + "> ... some databases differentiate between \"OGC WKT\" and \"ESRI WKT\" representations. The problem is largely resolved in WKT[-CRS] 2, as it is better-defined.\n", + "\n", + "These differences in how WKT strings are also clear from the export section when looking up a CRS on [epsg.io](https://epsg.io). For example, have a look at the differences between the \"OGC WKT\", \"OGC WKT 2\" and \"ESRI WKT\" results in the export section at the bottom of the [epsg.io/2193](https://epsg.io/2193) page." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "weka_hills_crs = CRS(2193)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "ifc5_wkt_crs = [\n", + " {\n", + " \"def\": \"def\",\n", + " \"name\": \"urn:ogc:def:crs:EPSG::2193\",\n", + " \"comment\": \"The name of this object is an OGC Uniform Resource Name.\",\n", + " \"type\": \"crs\",\n", + " \"attributes\": {\n", + " \"WKT-CRS\": {\n", + " \"ISO\": \"ISO 19162:2019\",\n", + " \"wkt\": weka_hills_crs.to_wkt(),\n", + " \"name\": weka_hills_crs.name,\n", + " \"authority_id\": f\"EPSG:{weka_hills_crs.to_authority()[1]}\",\n", + " \"units\": \"m\",\n", + " \"offset_x\": 0,\n", + " \"offset_y\": 0,\n", + " \"offset_z\": 0,\n", + " \"rotation\": 0,\n", + " }\n", + " },\n", + " },\n", + " {\n", + " \"def\": \"over\",\n", + " \"name\": \"Nad68cd145a6b43fdb0232e0b11a6c7bc\",\n", + " \"comment\": \"Assigns urn:ogc:def:crs:EPSG::2193 to the instance of borehole WH_009\",\n", + " \"attributes\": {\"crs\": {\"ref\": \"\"}},\n", + " },\n", + " {\n", + " \"def\": \"over\",\n", + " \"name\": \"N996ff9e7b86240f898d4d038ab311d1b\",\n", + " \"comment\": \"Assigns urn:ogc:def:crs:EPSG::2193 to the instance of borehole WH_012\",\n", + " \"attributes\": {\"crs\": {\"ref\": \"\"}},\n", + " },\n", + " {\n", + " \"def\": \"over\",\n", + " \"name\": \"N25dbbae886194be6b469e4f17f0b605c\",\n", + " \"comment\": \"Assigns urn:ogc:def:crs:EPSG::2193 to the instance of the GeologyModel\",\n", + " \"attributes\": {\"crs\": {\"ref\": \"\"}},\n", + " },\n", + "]\n", + "\n", + "with open(\"WekaHills_CRS_EPSG2193.ifcx\", \"w\") as json_file:\n", + " json.dump(ifc5_wkt_crs, json_file, indent=2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Longitude is the x-coordinate or east-west coordinate on earth expressed in 0 to 180 degrees east or west of the Greenwich prime meridian or in -180 to 180 degrees relative to the Greenwich prime meridian.\n", + "\n", + "Latitude is the y-coordinate or north-south coordinate on earth expressed in 0 to 90 north or south of the equator or in -90 to 90 degrees relative to the equator.\n", + "\n", + "Historically, coordinates on earth are denoted (Latitude, Longitude), because it was easier to determine the north-south position than the east-west position. This because the north-south position can be determined from the sun, stars and other heavenly bodies, whereas one need to accurately know the time in order to determine the east-west position.\n", + "\n", + "Nowadays, especially on the web, it's common to write coordinates on earth in [Longitude, Latitude], because we commonly write down coordinates [x, y]." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "transformer = Transformer.from_crs(weka_hills_crs, 4326, always_xy=True)\n", + "custom_lon, custom_lat = transformer.transform(1166250.104, 4888836.859)\n", + "custom_crs_wkt = f'PROJCS[\"SpeckleCRS_latlon_{custom_lat}_{custom_lon}\", GEOGCS[\"GCS_WGS_1984\", DATUM[\"D_WGS_1984\", SPHEROID[\"WGS_1984\", 6378137.0, 298.257223563]], PRIMEM[\"Greenwich\", 0.0], UNIT[\"Degree\", 0.0174532925199433]], PROJECTION[\"Transverse_Mercator\"], PARAMETER[\"False_Easting\", 0.0], PARAMETER[\"False_Northing\", 0.0], PARAMETER[\"Central_Meridian\", {custom_lon}], PARAMETER[\"Scale_Factor\", 1.0], PARAMETER[\"Latitude_Of_Origin\", {custom_lat}], UNIT[\"Meter\", 1.0]]'" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.13.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Geotech/ifc5_geotech.ipynb b/Geotech/ifc5_geotech.ipynb deleted file mode 100644 index 9c7fdc9..0000000 --- a/Geotech/ifc5_geotech.ipynb +++ /dev/null @@ -1,275 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import json\n", - "\n", - "from pyproj import CRS, Transformer\n", - "from specklepy.api.client import SpeckleClient\n", - "from specklepy.core.api import operations\n", - "from specklepy.transports.server import ServerTransport" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Leapfrog Weka Hills Demo Model from Speckle to IFC 5" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "weka_hills_speckle_project_id = \"7a489ac0d4\"\n", - "ifc5_geo_dict = {\"name\": \"Alluvium\", \"ifc5_ref\": \"Ne4ef1ea1101a484183bb8a716924702e\"}\n", - "# ifc5_geo_dict = {\"name\": \"Siltstone\", \"ifc5_ref\": \"N4586ef982fd34faab3de532a7a43544d\"}\n", - "# ifc5_geo_dict = {\"name\": \"Basement\", \"ifc5_ref\": \"N450a532f5e414d609856a8a50b6a94ad\"}" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "speckle_client = SpeckleClient(host=\"app.speckle.systems\")\n", - "transport = ServerTransport(\n", - " stream_id=weka_hills_speckle_project_id, client=speckle_client\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "weka_hills_speckle_models = speckle_client.model.get_models(\n", - " project_id=weka_hills_speckle_project_id\n", - ")\n", - "\n", - "geology_models_w_versions = {}\n", - "for model in weka_hills_speckle_models.items:\n", - " if \"geo/geology-model\" in model.name:\n", - " geological_unit = str(model.name).replace(\"geo/geology-model/\", \"\")\n", - " speckle_model = speckle_client.model.get_with_versions(\n", - " model_id=model.id,\n", - " project_id=weka_hills_speckle_project_id,\n", - " )\n", - " geology_models_w_versions[geological_unit] = speckle_model\n", - " print(f\"{geological_unit}: {model.id}\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "model_data = operations.receive(\n", - " geology_models_w_versions[ifc5_geo_dict[\"name\"].lower()]\n", - " .versions.items[0]\n", - " .referencedObject,\n", - " transport,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "speckle_faces = model_data.elements[0].elements[0].elements[0].elements[0].faces\n", - "face_vertex_counts = []\n", - "face_vertex_indices = []\n", - "i = 0\n", - "while i < len(speckle_faces):\n", - " vertex_count = speckle_faces[i]\n", - " face_vertex_counts.append(vertex_count)\n", - " face_vertex_indices.extend(speckle_faces[i + 1 : i + 1 + vertex_count])\n", - " i += 1 + vertex_count\n", - "\n", - "speckle_vertices = model_data.elements[0].elements[0].elements[0].elements[0].vertices\n", - "points = [speckle_vertices[i : i + 3] for i in range(0, len(speckle_vertices), 3)]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ifc5_usdgeom = [\n", - " {\n", - " \"def\": \"over\",\n", - " \"name\": f\"{ifc5_geo_dict['ref']}_Body\",\n", - " \"attributes\": {\n", - " \"UsdGeom:Mesh\": {\n", - " # \"faceVertexCounts\": face_vertex_counts,\n", - " \"faceVertexIndices\": face_vertex_indices,\n", - " \"points\": points,\n", - " }\n", - " },\n", - " }\n", - "]\n", - "\n", - "with open(\n", - " f\"WekaHills_GeologyModel_{ifc5_geo_dict['name']}_UsdGeom.ifcx\", \"w\"\n", - ") as json_file:\n", - " json.dump(ifc5_usdgeom, json_file)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "For testing purposes, one can create an `.obj` file from the Speckle geometry as follows:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "with open(f\"{geological_unit}Mesh.obj\", \"w\") as obj_file:\n", - " for point in points:\n", - " obj_file.write(f\"v {point[0]} {point[1]} {point[2]}\\n\")\n", - " for i in range(0, len(face_vertex_indices), 3):\n", - " # OBJ uses 1-based indexing, so add 1 to the indices\n", - " obj_file.write(\n", - " f\"f {face_vertex_indices[i] + 1} {face_vertex_indices[i + 1] + 1} {face_vertex_indices[i + 2] + 1}\\n\"\n", - " )" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# CRS Objects in IFC 5\n", - "\n", - "Coordinate Reference Systems (CRS') can be defined using the Well-Known Text representation of Coordinate Reference Systems (WKT-CRS | [Wikipedia](http://en.wikipedia.org/wiki/Well-known_text_representation_of_coordinate_reference_systems) | [OGC Specification](https://docs.ogc.org/is/18-010r7/18-010r7.html)). This representation of CRS' is also an ISO standard: ISO 19162:2019.\n", - "\n", - "Notes from the Wikipedia WKT-CRS \"Version history\" section:\n", - "\n", - "> Confusingly, the original 2015 \"WKT 2\" standard has a version number 1 for the new, stricter WKT-CRS specification. A newer revision called WKT-CRS 2 was published in 2018, with the ISO version being ISO 19162:2019.\n", - "\n", - "> ESRI vs OGC \n", - "> ... some databases differentiate between \"OGC WKT\" and \"ESRI WKT\" representations. The problem is largely resolved in WKT[-CRS] 2, as it is better-defined.\n", - "\n", - "These differences in how WKT strings are also clear from the export section when looking up a CRS on [epsg.io](https://epsg.io). For example, have a look at the differences between the \"OGC WKT\", \"OGC WKT 2\" and \"ESRI WKT\" results in the export section at the bottom of the [epsg.io/2193](https://epsg.io/2193) page." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "weka_hills_crs = CRS(2193)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ifc5_wkt_crs = [\n", - " {\n", - " \"def\": \"def\",\n", - " \"name\": \"CRS_EPSG:2193\",\n", - " \"type\": \"OGC:CRS\",\n", - " \"attributes\": {\n", - " \"WKT-CRS\": {\n", - " \"ISO\": \"ISO 19162:2019\",\n", - " \"wkt\": weka_hills_crs.to_wkt(),\n", - " \"name\": weka_hills_crs.name,\n", - " \"authority_id\": f\"EPSG:{weka_hills_crs.to_authority()[1]}\",\n", - " \"units\": \"m\",\n", - " \"offset_x\": 0,\n", - " \"offset_y\": 0,\n", - " \"offset_z\": 0,\n", - " \"rotation\": 0,\n", - " }\n", - " },\n", - " },\n", - " {\n", - " \"def\": \"over\",\n", - " \"name\": \"Nad68cd145a6b43fdb0232e0b11a6c7bc\",\n", - " \"comment\": \"Assigns CRS_EPSG:2193 to the instance of borehole WH_009\",\n", - " \"attributes\": {\"crs\": {\"ref\": \"\"}},\n", - " },\n", - " {\n", - " \"def\": \"over\",\n", - " \"name\": \"N996ff9e7b86240f898d4d038ab311d1b\",\n", - " \"comment\": \"Assigns CRS_EPSG:2193 to the instance of borehole WH_012\",\n", - " \"attributes\": {\"crs\": {\"ref\": \"\"}},\n", - " },\n", - " {\n", - " \"def\": \"over\",\n", - " \"name\": \"N25dbbae886194be6b469e4f17f0b605c\",\n", - " \"comment\": \"Assigns CRS_EPSG:2193 to the instance of the GeologyModel\",\n", - " \"attributes\": {\"crs\": {\"ref\": \"\"}},\n", - " },\n", - "]\n", - "\n", - "with open(\"WekaHills_CRS_EPSG2193.ifcx\", \"w\") as json_file:\n", - " json.dump(ifc5_wkt_crs, json_file, indent=2)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Longitude is the x-coordinate or east-west coordinate on earth expressed in 0 to 180 degrees east or west of the Greenwich prime meridian or in -180 to 180 degrees relative to the Greenwich prime meridian.\n", - "\n", - "Latitude is the y-coordinate or north-south coordinate on earth expressed in 0 to 90 north or south of the equator or in -90 to 90 degrees relative to the equator.\n", - "\n", - "Historically, coordinates on earth are denoted (Latitude, Longitude), because it was easier to determine the north-south position than the east-west position. This because the north-south position can be determined from the sun, stars and other heavenly bodies, whereas one need to accurately know the time in order to determine the east-west position.\n", - "\n", - "Nowadays, especially on the web, it's common to write coordinates on earth in [Longitude, Latitude], because we commonly write down coordinates [x, y]." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "transformer = Transformer.from_crs(weka_hills_crs, 4326, always_xy=True)\n", - "custom_lon, custom_lat = transformer.transform(1166250.104, 4888836.859)\n", - "custom_crs_wkt = f'PROJCS[\"SpeckleCRS_latlon_{custom_lat}_{custom_lon}\", GEOGCS[\"GCS_WGS_1984\", DATUM[\"D_WGS_1984\", SPHEROID[\"WGS_1984\", 6378137.0, 298.257223563]], PRIMEM[\"Greenwich\", 0.0], UNIT[\"Degree\", 0.0174532925199433]], PROJECTION[\"Transverse_Mercator\"], PARAMETER[\"False_Easting\", 0.0], PARAMETER[\"False_Northing\", 0.0], PARAMETER[\"Central_Meridian\", {custom_lon}], PARAMETER[\"Scale_Factor\", 1.0], PARAMETER[\"Latitude_Of_Origin\", {custom_lat}], UNIT[\"Meter\", 1.0]]'" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": ".venv", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.10" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..85675a5 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,10 @@ +[project] +name = "ifc5-development" +version = "0.1.0" +description = "Add your description here" +readme = "README.md" +requires-python = ">=3.11" +dependencies = [ + "geopandas>=1.0.1", + "jupyter>=1.1.1", +] diff --git a/python-version b/python-version new file mode 100644 index 0000000..2c07333 --- /dev/null +++ b/python-version @@ -0,0 +1 @@ +3.11 diff --git a/uv.lock b/uv.lock new file mode 100644 index 0000000..860cd84 --- /dev/null +++ b/uv.lock @@ -0,0 +1,1688 @@ +version = 1 +requires-python = ">=3.11" +resolution-markers = [ + "python_full_version < '3.12'", + "python_full_version >= '3.12'", +] + +[[package]] +name = "anyio" +version = "4.8.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna" }, + { name = "sniffio" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a3/73/199a98fc2dae33535d6b8e8e6ec01f8c1d76c9adb096c6b7d64823038cde/anyio-4.8.0.tar.gz", hash = "sha256:1d9fe889df5212298c0c0723fa20479d1b94883a2df44bd3897aa91083316f7a", size = 181126 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/46/eb/e7f063ad1fec6b3178a3cd82d1a3c4de82cccf283fc42746168188e1cdd5/anyio-4.8.0-py3-none-any.whl", hash = "sha256:b5011f270ab5eb0abf13385f851315585cc37ef330dd88e27ec3d34d651fd47a", size = 96041 }, +] + +[[package]] +name = "appnope" +version = "0.1.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/35/5d/752690df9ef5b76e169e68d6a129fa6d08a7100ca7f754c89495db3c6019/appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee", size = 4170 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c", size = 4321 }, +] + +[[package]] +name = "argon2-cffi" +version = "23.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "argon2-cffi-bindings" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/31/fa/57ec2c6d16ecd2ba0cf15f3c7d1c3c2e7b5fcb83555ff56d7ab10888ec8f/argon2_cffi-23.1.0.tar.gz", hash = "sha256:879c3e79a2729ce768ebb7d36d4609e3a78a4ca2ec3a9f12286ca057e3d0db08", size = 42798 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a4/6a/e8a041599e78b6b3752da48000b14c8d1e8a04ded09c88c714ba047f34f5/argon2_cffi-23.1.0-py3-none-any.whl", hash = "sha256:c670642b78ba29641818ab2e68bd4e6a78ba53b7eff7b4c3815ae16abf91c7ea", size = 15124 }, +] + +[[package]] +name = "argon2-cffi-bindings" +version = "21.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b9/e9/184b8ccce6683b0aa2fbb7ba5683ea4b9c5763f1356347f1312c32e3c66e/argon2-cffi-bindings-21.2.0.tar.gz", hash = "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3", size = 1779911 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d4/13/838ce2620025e9666aa8f686431f67a29052241692a3dd1ae9d3692a89d3/argon2_cffi_bindings-21.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367", size = 29658 }, + { url = "https://files.pythonhosted.org/packages/b3/02/f7f7bb6b6af6031edb11037639c697b912e1dea2db94d436e681aea2f495/argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d", size = 80583 }, + { url = "https://files.pythonhosted.org/packages/ec/f7/378254e6dd7ae6f31fe40c8649eea7d4832a42243acaf0f1fff9083b2bed/argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae", size = 86168 }, + { url = "https://files.pythonhosted.org/packages/74/f6/4a34a37a98311ed73bb80efe422fed95f2ac25a4cacc5ae1d7ae6a144505/argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c", size = 82709 }, + { url = "https://files.pythonhosted.org/packages/74/2b/73d767bfdaab25484f7e7901379d5f8793cccbb86c6e0cbc4c1b96f63896/argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86", size = 83613 }, + { url = "https://files.pythonhosted.org/packages/4f/fd/37f86deef67ff57c76f137a67181949c2d408077e2e3dd70c6c42912c9bf/argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_i686.whl", hash = "sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f", size = 84583 }, + { url = "https://files.pythonhosted.org/packages/6f/52/5a60085a3dae8fded8327a4f564223029f5f54b0cb0455a31131b5363a01/argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e", size = 88475 }, + { url = "https://files.pythonhosted.org/packages/8b/95/143cd64feb24a15fa4b189a3e1e7efbaeeb00f39a51e99b26fc62fbacabd/argon2_cffi_bindings-21.2.0-cp36-abi3-win32.whl", hash = "sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082", size = 27698 }, + { url = "https://files.pythonhosted.org/packages/37/2c/e34e47c7dee97ba6f01a6203e0383e15b60fb85d78ac9a15cd066f6fe28b/argon2_cffi_bindings-21.2.0-cp36-abi3-win_amd64.whl", hash = "sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f", size = 30817 }, + { url = "https://files.pythonhosted.org/packages/5a/e4/bf8034d25edaa495da3c8a3405627d2e35758e44ff6eaa7948092646fdcc/argon2_cffi_bindings-21.2.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93", size = 53104 }, +] + +[[package]] +name = "arrow" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "python-dateutil" }, + { name = "types-python-dateutil" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2e/00/0f6e8fcdb23ea632c866620cc872729ff43ed91d284c866b515c6342b173/arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85", size = 131960 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f8/ed/e97229a566617f2ae958a6b13e7cc0f585470eac730a73e9e82c32a3cdd2/arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80", size = 66419 }, +] + +[[package]] +name = "asttokens" +version = "3.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4a/e7/82da0a03e7ba5141f05cce0d302e6eed121ae055e0456ca228bf693984bc/asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7", size = 61978 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/25/8a/c46dcc25341b5bce5472c718902eb3d38600a903b14fa6aeecef3f21a46f/asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2", size = 26918 }, +] + +[[package]] +name = "async-lru" +version = "2.0.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/80/e2/2b4651eff771f6fd900d233e175ddc5e2be502c7eb62c0c42f975c6d36cd/async-lru-2.0.4.tar.gz", hash = "sha256:b8a59a5df60805ff63220b2a0c5b5393da5521b113cd5465a44eb037d81a5627", size = 10019 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fa/9f/3c3503693386c4b0f245eaf5ca6198e3b28879ca0a40bde6b0e319793453/async_lru-2.0.4-py3-none-any.whl", hash = "sha256:ff02944ce3c288c5be660c42dbcca0742b32c3b279d6dceda655190240b99224", size = 6111 }, +] + +[[package]] +name = "attrs" +version = "25.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/49/7c/fdf464bcc51d23881d110abd74b512a42b3d5d376a55a831b44c603ae17f/attrs-25.1.0.tar.gz", hash = "sha256:1c97078a80c814273a76b2a298a932eb681c87415c11dee0a6921de7f1b02c3e", size = 810562 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fc/30/d4986a882011f9df997a55e6becd864812ccfcd821d64aac8570ee39f719/attrs-25.1.0-py3-none-any.whl", hash = "sha256:c75a69e28a550a7e93789579c22aa26b0f5b83b75dc4e08fe092980051e1090a", size = 63152 }, +] + +[[package]] +name = "babel" +version = "2.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2a/74/f1bc80f23eeba13393b7222b11d95ca3af2c1e28edca18af487137eefed9/babel-2.16.0.tar.gz", hash = "sha256:d1f3554ca26605fe173f3de0c65f750f5a42f924499bf134de6423582298e316", size = 9348104 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ed/20/bc79bc575ba2e2a7f70e8a1155618bb1301eaa5132a8271373a6903f73f8/babel-2.16.0-py3-none-any.whl", hash = "sha256:368b5b98b37c06b7daf6696391c3240c938b37767d4584413e8438c5c435fa8b", size = 9587599 }, +] + +[[package]] +name = "beautifulsoup4" +version = "4.12.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "soupsieve" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b3/ca/824b1195773ce6166d388573fc106ce56d4a805bd7427b624e063596ec58/beautifulsoup4-4.12.3.tar.gz", hash = "sha256:74e3d1928edc070d21748185c46e3fb33490f22f52a3addee9aee0f4f7781051", size = 581181 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b1/fe/e8c672695b37eecc5cbf43e1d0638d88d66ba3a44c4d321c796f4e59167f/beautifulsoup4-4.12.3-py3-none-any.whl", hash = "sha256:b80878c9f40111313e55da8ba20bdba06d8fa3969fc68304167741bbf9e082ed", size = 147925 }, +] + +[[package]] +name = "bleach" +version = "6.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "webencodings" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/76/9a/0e33f5054c54d349ea62c277191c020c2d6ef1d65ab2cb1993f91ec846d1/bleach-6.2.0.tar.gz", hash = "sha256:123e894118b8a599fd80d3ec1a6d4cc7ce4e5882b1317a7e1ba69b56e95f991f", size = 203083 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fc/55/96142937f66150805c25c4d0f31ee4132fd33497753400734f9dfdcbdc66/bleach-6.2.0-py3-none-any.whl", hash = "sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e", size = 163406 }, +] + +[package.optional-dependencies] +css = [ + { name = "tinycss2" }, +] + +[[package]] +name = "certifi" +version = "2024.12.14" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0f/bd/1d41ee578ce09523c81a15426705dd20969f5abf006d1afe8aeff0dd776a/certifi-2024.12.14.tar.gz", hash = "sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db", size = 166010 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a5/32/8f6669fc4798494966bf446c8c4a162e0b5d893dff088afddf76414f70e1/certifi-2024.12.14-py3-none-any.whl", hash = "sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56", size = 164927 }, +] + +[[package]] +name = "cffi" +version = "1.17.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6b/f4/927e3a8899e52a27fa57a48607ff7dc91a9ebe97399b357b85a0c7892e00/cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401", size = 182264 }, + { url = "https://files.pythonhosted.org/packages/6c/f5/6c3a8efe5f503175aaddcbea6ad0d2c96dad6f5abb205750d1b3df44ef29/cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf", size = 178651 }, + { url = "https://files.pythonhosted.org/packages/94/dd/a3f0118e688d1b1a57553da23b16bdade96d2f9bcda4d32e7d2838047ff7/cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4", size = 445259 }, + { url = "https://files.pythonhosted.org/packages/2e/ea/70ce63780f096e16ce8588efe039d3c4f91deb1dc01e9c73a287939c79a6/cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41", size = 469200 }, + { url = "https://files.pythonhosted.org/packages/1c/a0/a4fa9f4f781bda074c3ddd57a572b060fa0df7655d2a4247bbe277200146/cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1", size = 477235 }, + { url = "https://files.pythonhosted.org/packages/62/12/ce8710b5b8affbcdd5c6e367217c242524ad17a02fe5beec3ee339f69f85/cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6", size = 459721 }, + { url = "https://files.pythonhosted.org/packages/ff/6b/d45873c5e0242196f042d555526f92aa9e0c32355a1be1ff8c27f077fd37/cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d", size = 467242 }, + { url = "https://files.pythonhosted.org/packages/1a/52/d9a0e523a572fbccf2955f5abe883cfa8bcc570d7faeee06336fbd50c9fc/cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6", size = 477999 }, + { url = "https://files.pythonhosted.org/packages/44/74/f2a2460684a1a2d00ca799ad880d54652841a780c4c97b87754f660c7603/cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f", size = 454242 }, + { url = "https://files.pythonhosted.org/packages/f8/4a/34599cac7dfcd888ff54e801afe06a19c17787dfd94495ab0c8d35fe99fb/cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b", size = 478604 }, + { url = "https://files.pythonhosted.org/packages/34/33/e1b8a1ba29025adbdcda5fb3a36f94c03d771c1b7b12f726ff7fef2ebe36/cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655", size = 171727 }, + { url = "https://files.pythonhosted.org/packages/3d/97/50228be003bb2802627d28ec0627837ac0bf35c90cf769812056f235b2d1/cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0", size = 181400 }, + { url = "https://files.pythonhosted.org/packages/5a/84/e94227139ee5fb4d600a7a4927f322e1d4aea6fdc50bd3fca8493caba23f/cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", size = 183178 }, + { url = "https://files.pythonhosted.org/packages/da/ee/fb72c2b48656111c4ef27f0f91da355e130a923473bf5ee75c5643d00cca/cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", size = 178840 }, + { url = "https://files.pythonhosted.org/packages/cc/b6/db007700f67d151abadf508cbfd6a1884f57eab90b1bb985c4c8c02b0f28/cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", size = 454803 }, + { url = "https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", size = 478850 }, + { url = "https://files.pythonhosted.org/packages/28/c0/b31116332a547fd2677ae5b78a2ef662dfc8023d67f41b2a83f7c2aa78b1/cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", size = 485729 }, + { url = "https://files.pythonhosted.org/packages/91/2b/9a1ddfa5c7f13cab007a2c9cc295b70fbbda7cb10a286aa6810338e60ea1/cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", size = 471256 }, + { url = "https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", size = 479424 }, + { url = "https://files.pythonhosted.org/packages/0b/ac/2a28bcf513e93a219c8a4e8e125534f4f6db03e3179ba1c45e949b76212c/cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", size = 484568 }, + { url = "https://files.pythonhosted.org/packages/d4/38/ca8a4f639065f14ae0f1d9751e70447a261f1a30fa7547a828ae08142465/cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", size = 488736 }, + { url = "https://files.pythonhosted.org/packages/86/c5/28b2d6f799ec0bdecf44dced2ec5ed43e0eb63097b0f58c293583b406582/cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", size = 172448 }, + { url = "https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", size = 181976 }, + { url = "https://files.pythonhosted.org/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989 }, + { url = "https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802 }, + { url = "https://files.pythonhosted.org/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792 }, + { url = "https://files.pythonhosted.org/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893 }, + { url = "https://files.pythonhosted.org/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810 }, + { url = "https://files.pythonhosted.org/packages/c7/8a/1d0e4a9c26e54746dc08c2c6c037889124d4f59dffd853a659fa545f1b40/cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", size = 471200 }, + { url = "https://files.pythonhosted.org/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447 }, + { url = "https://files.pythonhosted.org/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358 }, + { url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469 }, + { url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475 }, + { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009 }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/16/b0/572805e227f01586461c80e0fd25d65a2115599cc9dad142fee4b747c357/charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3", size = 123188 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/72/80/41ef5d5a7935d2d3a773e3eaebf0a9350542f2cab4eac59a7a4741fbbbbe/charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125", size = 194995 }, + { url = "https://files.pythonhosted.org/packages/7a/28/0b9fefa7b8b080ec492110af6d88aa3dea91c464b17d53474b6e9ba5d2c5/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1", size = 139471 }, + { url = "https://files.pythonhosted.org/packages/71/64/d24ab1a997efb06402e3fc07317e94da358e2585165930d9d59ad45fcae2/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3", size = 149831 }, + { url = "https://files.pythonhosted.org/packages/37/ed/be39e5258e198655240db5e19e0b11379163ad7070962d6b0c87ed2c4d39/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd", size = 142335 }, + { url = "https://files.pythonhosted.org/packages/88/83/489e9504711fa05d8dde1574996408026bdbdbd938f23be67deebb5eca92/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00", size = 143862 }, + { url = "https://files.pythonhosted.org/packages/c6/c7/32da20821cf387b759ad24627a9aca289d2822de929b8a41b6241767b461/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12", size = 145673 }, + { url = "https://files.pythonhosted.org/packages/68/85/f4288e96039abdd5aeb5c546fa20a37b50da71b5cf01e75e87f16cd43304/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77", size = 140211 }, + { url = "https://files.pythonhosted.org/packages/28/a3/a42e70d03cbdabc18997baf4f0227c73591a08041c149e710045c281f97b/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146", size = 148039 }, + { url = "https://files.pythonhosted.org/packages/85/e4/65699e8ab3014ecbe6f5c71d1a55d810fb716bbfd74f6283d5c2aa87febf/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd", size = 151939 }, + { url = "https://files.pythonhosted.org/packages/b1/82/8e9fe624cc5374193de6860aba3ea8070f584c8565ee77c168ec13274bd2/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6", size = 149075 }, + { url = "https://files.pythonhosted.org/packages/3d/7b/82865ba54c765560c8433f65e8acb9217cb839a9e32b42af4aa8e945870f/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8", size = 144340 }, + { url = "https://files.pythonhosted.org/packages/b5/b6/9674a4b7d4d99a0d2df9b215da766ee682718f88055751e1e5e753c82db0/charset_normalizer-3.4.1-cp311-cp311-win32.whl", hash = "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b", size = 95205 }, + { url = "https://files.pythonhosted.org/packages/1e/ab/45b180e175de4402dcf7547e4fb617283bae54ce35c27930a6f35b6bef15/charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76", size = 102441 }, + { url = "https://files.pythonhosted.org/packages/0a/9a/dd1e1cdceb841925b7798369a09279bd1cf183cef0f9ddf15a3a6502ee45/charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545", size = 196105 }, + { url = "https://files.pythonhosted.org/packages/d3/8c/90bfabf8c4809ecb648f39794cf2a84ff2e7d2a6cf159fe68d9a26160467/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7", size = 140404 }, + { url = "https://files.pythonhosted.org/packages/ad/8f/e410d57c721945ea3b4f1a04b74f70ce8fa800d393d72899f0a40526401f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757", size = 150423 }, + { url = "https://files.pythonhosted.org/packages/f0/b8/e6825e25deb691ff98cf5c9072ee0605dc2acfca98af70c2d1b1bc75190d/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa", size = 143184 }, + { url = "https://files.pythonhosted.org/packages/3e/a2/513f6cbe752421f16d969e32f3583762bfd583848b763913ddab8d9bfd4f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d", size = 145268 }, + { url = "https://files.pythonhosted.org/packages/74/94/8a5277664f27c3c438546f3eb53b33f5b19568eb7424736bdc440a88a31f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616", size = 147601 }, + { url = "https://files.pythonhosted.org/packages/7c/5f/6d352c51ee763623a98e31194823518e09bfa48be2a7e8383cf691bbb3d0/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b", size = 141098 }, + { url = "https://files.pythonhosted.org/packages/78/d4/f5704cb629ba5ab16d1d3d741396aec6dc3ca2b67757c45b0599bb010478/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d", size = 149520 }, + { url = "https://files.pythonhosted.org/packages/c5/96/64120b1d02b81785f222b976c0fb79a35875457fa9bb40827678e54d1bc8/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a", size = 152852 }, + { url = "https://files.pythonhosted.org/packages/84/c9/98e3732278a99f47d487fd3468bc60b882920cef29d1fa6ca460a1fdf4e6/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9", size = 150488 }, + { url = "https://files.pythonhosted.org/packages/13/0e/9c8d4cb99c98c1007cc11eda969ebfe837bbbd0acdb4736d228ccaabcd22/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1", size = 146192 }, + { url = "https://files.pythonhosted.org/packages/b2/21/2b6b5b860781a0b49427309cb8670785aa543fb2178de875b87b9cc97746/charset_normalizer-3.4.1-cp312-cp312-win32.whl", hash = "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35", size = 95550 }, + { url = "https://files.pythonhosted.org/packages/21/5b/1b390b03b1d16c7e382b561c5329f83cc06623916aab983e8ab9239c7d5c/charset_normalizer-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f", size = 102785 }, + { url = "https://files.pythonhosted.org/packages/38/94/ce8e6f63d18049672c76d07d119304e1e2d7c6098f0841b51c666e9f44a0/charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda", size = 195698 }, + { url = "https://files.pythonhosted.org/packages/24/2e/dfdd9770664aae179a96561cc6952ff08f9a8cd09a908f259a9dfa063568/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313", size = 140162 }, + { url = "https://files.pythonhosted.org/packages/24/4e/f646b9093cff8fc86f2d60af2de4dc17c759de9d554f130b140ea4738ca6/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9", size = 150263 }, + { url = "https://files.pythonhosted.org/packages/5e/67/2937f8d548c3ef6e2f9aab0f6e21001056f692d43282b165e7c56023e6dd/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b", size = 142966 }, + { url = "https://files.pythonhosted.org/packages/52/ed/b7f4f07de100bdb95c1756d3a4d17b90c1a3c53715c1a476f8738058e0fa/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11", size = 144992 }, + { url = "https://files.pythonhosted.org/packages/96/2c/d49710a6dbcd3776265f4c923bb73ebe83933dfbaa841c5da850fe0fd20b/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f", size = 147162 }, + { url = "https://files.pythonhosted.org/packages/b4/41/35ff1f9a6bd380303dea55e44c4933b4cc3c4850988927d4082ada230273/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd", size = 140972 }, + { url = "https://files.pythonhosted.org/packages/fb/43/c6a0b685fe6910d08ba971f62cd9c3e862a85770395ba5d9cad4fede33ab/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2", size = 149095 }, + { url = "https://files.pythonhosted.org/packages/4c/ff/a9a504662452e2d2878512115638966e75633519ec11f25fca3d2049a94a/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886", size = 152668 }, + { url = "https://files.pythonhosted.org/packages/6c/71/189996b6d9a4b932564701628af5cee6716733e9165af1d5e1b285c530ed/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601", size = 150073 }, + { url = "https://files.pythonhosted.org/packages/e4/93/946a86ce20790e11312c87c75ba68d5f6ad2208cfb52b2d6a2c32840d922/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd", size = 145732 }, + { url = "https://files.pythonhosted.org/packages/cd/e5/131d2fb1b0dddafc37be4f3a2fa79aa4c037368be9423061dccadfd90091/charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407", size = 95391 }, + { url = "https://files.pythonhosted.org/packages/27/f2/4f9a69cc7712b9b5ad8fdb87039fd89abba997ad5cbe690d1835d40405b0/charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971", size = 102702 }, + { url = "https://files.pythonhosted.org/packages/0e/f6/65ecc6878a89bb1c23a086ea335ad4bf21a588990c3f535a227b9eea9108/charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", size = 49767 }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, +] + +[[package]] +name = "comm" +version = "0.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e9/a8/fb783cb0abe2b5fded9f55e5703015cdf1c9c85b3669087c538dd15a6a86/comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e", size = 6210 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e6/75/49e5bfe642f71f272236b5b2d2691cf915a7283cc0ceda56357b61daa538/comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3", size = 7180 }, +] + +[[package]] +name = "debugpy" +version = "1.8.12" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/68/25/c74e337134edf55c4dfc9af579eccb45af2393c40960e2795a94351e8140/debugpy-1.8.12.tar.gz", hash = "sha256:646530b04f45c830ceae8e491ca1c9320a2d2f0efea3141487c82130aba70dce", size = 1641122 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/af/9f/5b8af282253615296264d4ef62d14a8686f0dcdebb31a669374e22fff0a4/debugpy-1.8.12-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:36f4829839ef0afdfdd208bb54f4c3d0eea86106d719811681a8627ae2e53dd5", size = 2174643 }, + { url = "https://files.pythonhosted.org/packages/ef/31/f9274dcd3b0f9f7d1e60373c3fa4696a585c55acb30729d313bb9d3bcbd1/debugpy-1.8.12-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a28ed481d530e3138553be60991d2d61103ce6da254e51547b79549675f539b7", size = 3133457 }, + { url = "https://files.pythonhosted.org/packages/ab/ca/6ee59e9892e424477e0c76e3798046f1fd1288040b927319c7a7b0baa484/debugpy-1.8.12-cp311-cp311-win32.whl", hash = "sha256:4ad9a94d8f5c9b954e0e3b137cc64ef3f579d0df3c3698fe9c3734ee397e4abb", size = 5106220 }, + { url = "https://files.pythonhosted.org/packages/d5/1a/8ab508ab05ede8a4eae3b139bbc06ea3ca6234f9e8c02713a044f253be5e/debugpy-1.8.12-cp311-cp311-win_amd64.whl", hash = "sha256:4703575b78dd697b294f8c65588dc86874ed787b7348c65da70cfc885efdf1e1", size = 5130481 }, + { url = "https://files.pythonhosted.org/packages/ba/e6/0f876ecfe5831ebe4762b19214364753c8bc2b357d28c5d739a1e88325c7/debugpy-1.8.12-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:7e94b643b19e8feb5215fa508aee531387494bf668b2eca27fa769ea11d9f498", size = 2500846 }, + { url = "https://files.pythonhosted.org/packages/19/64/33f41653a701f3cd2cbff8b41ebaad59885b3428b5afd0d93d16012ecf17/debugpy-1.8.12-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:086b32e233e89a2740c1615c2f775c34ae951508b28b308681dbbb87bba97d06", size = 4222181 }, + { url = "https://files.pythonhosted.org/packages/32/a6/02646cfe50bfacc9b71321c47dc19a46e35f4e0aceea227b6d205e900e34/debugpy-1.8.12-cp312-cp312-win32.whl", hash = "sha256:2ae5df899732a6051b49ea2632a9ea67f929604fd2b036613a9f12bc3163b92d", size = 5227017 }, + { url = "https://files.pythonhosted.org/packages/da/a6/10056431b5c47103474312cf4a2ec1001f73e0b63b1216706d5fef2531eb/debugpy-1.8.12-cp312-cp312-win_amd64.whl", hash = "sha256:39dfbb6fa09f12fae32639e3286112fc35ae976114f1f3d37375f3130a820969", size = 5267555 }, + { url = "https://files.pythonhosted.org/packages/cf/4d/7c3896619a8791effd5d8c31f0834471fc8f8fb3047ec4f5fc69dd1393dd/debugpy-1.8.12-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:696d8ae4dff4cbd06bf6b10d671e088b66669f110c7c4e18a44c43cf75ce966f", size = 2485246 }, + { url = "https://files.pythonhosted.org/packages/99/46/bc6dcfd7eb8cc969a5716d858e32485eb40c72c6a8dc88d1e3a4d5e95813/debugpy-1.8.12-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:898fba72b81a654e74412a67c7e0a81e89723cfe2a3ea6fcd3feaa3395138ca9", size = 4218616 }, + { url = "https://files.pythonhosted.org/packages/03/dd/d7fcdf0381a9b8094da1f6a1c9f19fed493a4f8576a2682349b3a8b20ec7/debugpy-1.8.12-cp313-cp313-win32.whl", hash = "sha256:22a11c493c70413a01ed03f01c3c3a2fc4478fc6ee186e340487b2edcd6f4180", size = 5226540 }, + { url = "https://files.pythonhosted.org/packages/25/bd/ecb98f5b5fc7ea0bfbb3c355bc1dd57c198a28780beadd1e19915bf7b4d9/debugpy-1.8.12-cp313-cp313-win_amd64.whl", hash = "sha256:fdb3c6d342825ea10b90e43d7f20f01535a72b3a1997850c0c3cefa5c27a4a2c", size = 5267134 }, + { url = "https://files.pythonhosted.org/packages/38/c4/5120ad36405c3008f451f94b8f92ef1805b1e516f6ff870f331ccb3c4cc0/debugpy-1.8.12-py2.py3-none-any.whl", hash = "sha256:274b6a2040349b5c9864e475284bce5bb062e63dce368a394b8cc865ae3b00c6", size = 5229490 }, +] + +[[package]] +name = "decorator" +version = "5.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/66/0c/8d907af351aa16b42caae42f9d6aa37b900c67308052d10fdce809f8d952/decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330", size = 35016 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d5/50/83c593b07763e1161326b3b8c6686f0f4b0f24d5526546bee538c89837d6/decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186", size = 9073 }, +] + +[[package]] +name = "defusedxml" +version = "0.7.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0f/d5/c66da9b79e5bdb124974bfe172b4daf3c984ebd9c2a06e2b8a4dc7331c72/defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69", size = 75520 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61", size = 25604 }, +] + +[[package]] +name = "executing" +version = "2.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/91/50/a9d80c47ff289c611ff12e63f7c5d13942c65d68125160cefd768c73e6e4/executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755", size = 978693 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/8f/c4d9bafc34ad7ad5d8dc16dd1347ee0e507a52c3adb6bfa8887e1c6a26ba/executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa", size = 26702 }, +] + +[[package]] +name = "fastjsonschema" +version = "2.21.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8b/50/4b769ce1ac4071a1ef6d86b1a3fb56cdc3a37615e8c5519e1af96cdac366/fastjsonschema-2.21.1.tar.gz", hash = "sha256:794d4f0a58f848961ba16af7b9c85a3e88cd360df008c59aac6fc5ae9323b5d4", size = 373939 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/90/2b/0817a2b257fe88725c25589d89aec060581aabf668707a8d03b2e9e0cb2a/fastjsonschema-2.21.1-py3-none-any.whl", hash = "sha256:c9e5b7e908310918cf494a434eeb31384dd84a98b57a30bcb1f535015b554667", size = 23924 }, +] + +[[package]] +name = "fqdn" +version = "1.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/30/3e/a80a8c077fd798951169626cde3e239adeba7dab75deb3555716415bd9b0/fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f", size = 6015 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014", size = 9121 }, +] + +[[package]] +name = "geopandas" +version = "1.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "packaging" }, + { name = "pandas" }, + { name = "pyogrio" }, + { name = "pyproj" }, + { name = "shapely" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/39/08/2cf5d85356e45b10b8d066cf4c3ba1e9e3185423c48104eed87e8afd0455/geopandas-1.0.1.tar.gz", hash = "sha256:b8bf70a5534588205b7a56646e2082fb1de9a03599651b3d80c99ea4c2ca08ab", size = 317736 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c4/64/7d344cfcef5efddf9cf32f59af7f855828e9d74b5f862eddf5bfd9f25323/geopandas-1.0.1-py3-none-any.whl", hash = "sha256:01e147d9420cc374d26f51fc23716ac307f32b49406e4bd8462c07e82ed1d3d6", size = 323587 }, +] + +[[package]] +name = "h11" +version = "0.14.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f5/38/3af3d3633a34a3316095b39c8e8fb4853a28a536e55d347bd8d8e9a14b03/h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d", size = 100418 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761", size = 58259 }, +] + +[[package]] +name = "httpcore" +version = "1.0.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "h11" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6a/41/d7d0a89eb493922c37d343b607bc1b5da7f5be7e383740b4753ad8943e90/httpcore-1.0.7.tar.gz", hash = "sha256:8551cb62a169ec7162ac7be8d4817d561f60e08eaa485234898414bb5a8a0b4c", size = 85196 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/87/f5/72347bc88306acb359581ac4d52f23c0ef445b57157adedb9aee0cd689d2/httpcore-1.0.7-py3-none-any.whl", hash = "sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd", size = 78551 }, +] + +[[package]] +name = "httpx" +version = "0.28.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "certifi" }, + { name = "httpcore" }, + { name = "idna" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517 }, +] + +[[package]] +name = "idna" +version = "3.10" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 }, +] + +[[package]] +name = "ifc5-development" +version = "0.1.0" +source = { virtual = "." } +dependencies = [ + { name = "geopandas" }, + { name = "jupyter" }, +] + +[package.metadata] +requires-dist = [ + { name = "geopandas", specifier = ">=1.0.1" }, + { name = "jupyter", specifier = ">=1.1.1" }, +] + +[[package]] +name = "ipykernel" +version = "6.29.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "appnope", marker = "platform_system == 'Darwin'" }, + { name = "comm" }, + { name = "debugpy" }, + { name = "ipython" }, + { name = "jupyter-client" }, + { name = "jupyter-core" }, + { name = "matplotlib-inline" }, + { name = "nest-asyncio" }, + { name = "packaging" }, + { name = "psutil" }, + { name = "pyzmq" }, + { name = "tornado" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e9/5c/67594cb0c7055dc50814b21731c22a601101ea3b1b50a9a1b090e11f5d0f/ipykernel-6.29.5.tar.gz", hash = "sha256:f093a22c4a40f8828f8e330a9c297cb93dcab13bd9678ded6de8e5cf81c56215", size = 163367 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/5c/368ae6c01c7628438358e6d337c19b05425727fbb221d2a3c4303c372f42/ipykernel-6.29.5-py3-none-any.whl", hash = "sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5", size = 117173 }, +] + +[[package]] +name = "ipython" +version = "8.31.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "decorator" }, + { name = "jedi" }, + { name = "matplotlib-inline" }, + { name = "pexpect", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "prompt-toolkit" }, + { name = "pygments" }, + { name = "stack-data" }, + { name = "traitlets" }, + { name = "typing-extensions", marker = "python_full_version < '3.12'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/01/35/6f90fdddff7a08b7b715fccbd2427b5212c9525cd043d26fdc45bee0708d/ipython-8.31.0.tar.gz", hash = "sha256:b6a2274606bec6166405ff05e54932ed6e5cfecaca1fc05f2cacde7bb074d70b", size = 5501011 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/60/d0feb6b6d9fe4ab89fe8fe5b47cbf6cd936bfd9f1e7ffa9d0015425aeed6/ipython-8.31.0-py3-none-any.whl", hash = "sha256:46ec58f8d3d076a61d128fe517a51eb730e3aaf0c184ea8c17d16e366660c6a6", size = 821583 }, +] + +[[package]] +name = "ipywidgets" +version = "8.1.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "comm" }, + { name = "ipython" }, + { name = "jupyterlab-widgets" }, + { name = "traitlets" }, + { name = "widgetsnbextension" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c7/4c/dab2a281b07596a5fc220d49827fe6c794c66f1493d7a74f1df0640f2cc5/ipywidgets-8.1.5.tar.gz", hash = "sha256:870e43b1a35656a80c18c9503bbf2d16802db1cb487eec6fab27d683381dde17", size = 116723 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/2d/9c0b76f2f9cc0ebede1b9371b6f317243028ed60b90705863d493bae622e/ipywidgets-8.1.5-py3-none-any.whl", hash = "sha256:3290f526f87ae6e77655555baba4f36681c555b8bdbbff430b70e52c34c86245", size = 139767 }, +] + +[[package]] +name = "isoduration" +version = "20.11.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "arrow" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7c/1a/3c8edc664e06e6bd06cce40c6b22da5f1429aa4224d0c590f3be21c91ead/isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9", size = 11649 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042", size = 11321 }, +] + +[[package]] +name = "jedi" +version = "0.19.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "parso" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/72/3a/79a912fbd4d8dd6fbb02bf69afd3bb72cf0c729bb3063c6f4498603db17a/jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0", size = 1231287 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9", size = 1572278 }, +] + +[[package]] +name = "jinja2" +version = "3.1.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/af/92/b3130cbbf5591acf9ade8708c365f3238046ac7cb8ccba6e81abccb0ccff/jinja2-3.1.5.tar.gz", hash = "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb", size = 244674 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/0f/2ba5fbcd631e3e88689309dbe978c5769e883e4b84ebfe7da30b43275c5a/jinja2-3.1.5-py3-none-any.whl", hash = "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb", size = 134596 }, +] + +[[package]] +name = "json5" +version = "0.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/85/3d/bbe62f3d0c05a689c711cff57b2e3ac3d3e526380adb7c781989f075115c/json5-0.10.0.tar.gz", hash = "sha256:e66941c8f0a02026943c52c2eb34ebeb2a6f819a0be05920a6f5243cd30fd559", size = 48202 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/aa/42/797895b952b682c3dafe23b1834507ee7f02f4d6299b65aaa61425763278/json5-0.10.0-py3-none-any.whl", hash = "sha256:19b23410220a7271e8377f81ba8aacba2fdd56947fbb137ee5977cbe1f5e8dfa", size = 34049 }, +] + +[[package]] +name = "jsonpointer" +version = "3.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6a/0a/eebeb1fa92507ea94016a2a790b93c2ae41a7e18778f85471dc54475ed25/jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef", size = 9114 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942", size = 7595 }, +] + +[[package]] +name = "jsonschema" +version = "4.23.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "jsonschema-specifications" }, + { name = "referencing" }, + { name = "rpds-py" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/38/2e/03362ee4034a4c917f697890ccd4aec0800ccf9ded7f511971c75451deec/jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4", size = 325778 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/4a/4f9dbeb84e8850557c02365a0eee0649abe5eb1d84af92a25731c6c0f922/jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566", size = 88462 }, +] + +[package.optional-dependencies] +format-nongpl = [ + { name = "fqdn" }, + { name = "idna" }, + { name = "isoduration" }, + { name = "jsonpointer" }, + { name = "rfc3339-validator" }, + { name = "rfc3986-validator" }, + { name = "uri-template" }, + { name = "webcolors" }, +] + +[[package]] +name = "jsonschema-specifications" +version = "2024.10.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "referencing" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/10/db/58f950c996c793472e336ff3655b13fbcf1e3b359dcf52dcf3ed3b52c352/jsonschema_specifications-2024.10.1.tar.gz", hash = "sha256:0f38b83639958ce1152d02a7f062902c41c8fd20d558b0c34344292d417ae272", size = 15561 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/0f/8910b19ac0670a0f80ce1008e5e751c4a57e14d2c4c13a482aa6079fa9d6/jsonschema_specifications-2024.10.1-py3-none-any.whl", hash = "sha256:a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf", size = 18459 }, +] + +[[package]] +name = "jupyter" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ipykernel" }, + { name = "ipywidgets" }, + { name = "jupyter-console" }, + { name = "jupyterlab" }, + { name = "nbconvert" }, + { name = "notebook" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/58/f3/af28ea964ab8bc1e472dba2e82627d36d470c51f5cd38c37502eeffaa25e/jupyter-1.1.1.tar.gz", hash = "sha256:d55467bceabdea49d7e3624af7e33d59c37fff53ed3a350e1ac957bed731de7a", size = 5714959 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/64/285f20a31679bf547b75602702f7800e74dbabae36ef324f716c02804753/jupyter-1.1.1-py2.py3-none-any.whl", hash = "sha256:7a59533c22af65439b24bbe60373a4e95af8f16ac65a6c00820ad378e3f7cc83", size = 2657 }, +] + +[[package]] +name = "jupyter-client" +version = "8.6.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jupyter-core" }, + { name = "python-dateutil" }, + { name = "pyzmq" }, + { name = "tornado" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/71/22/bf9f12fdaeae18019a468b68952a60fe6dbab5d67cd2a103cac7659b41ca/jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419", size = 342019 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/11/85/b0394e0b6fcccd2c1eeefc230978a6f8cb0c5df1e4cd3e7625735a0d7d1e/jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f", size = 106105 }, +] + +[[package]] +name = "jupyter-console" +version = "6.6.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ipykernel" }, + { name = "ipython" }, + { name = "jupyter-client" }, + { name = "jupyter-core" }, + { name = "prompt-toolkit" }, + { name = "pygments" }, + { name = "pyzmq" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bd/2d/e2fd31e2fc41c14e2bcb6c976ab732597e907523f6b2420305f9fc7fdbdb/jupyter_console-6.6.3.tar.gz", hash = "sha256:566a4bf31c87adbfadf22cdf846e3069b59a71ed5da71d6ba4d8aaad14a53539", size = 34363 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ca/77/71d78d58f15c22db16328a476426f7ac4a60d3a5a7ba3b9627ee2f7903d4/jupyter_console-6.6.3-py3-none-any.whl", hash = "sha256:309d33409fcc92ffdad25f0bcdf9a4a9daa61b6f341177570fdac03de5352485", size = 24510 }, +] + +[[package]] +name = "jupyter-core" +version = "5.7.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "platformdirs" }, + { name = "pywin32", marker = "platform_python_implementation != 'PyPy' and sys_platform == 'win32'" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/00/11/b56381fa6c3f4cc5d2cf54a7dbf98ad9aa0b339ef7a601d6053538b079a7/jupyter_core-5.7.2.tar.gz", hash = "sha256:aa5f8d32bbf6b431ac830496da7392035d6f61b4f54872f15c4bd2a9c3f536d9", size = 87629 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c9/fb/108ecd1fe961941959ad0ee4e12ee7b8b1477247f30b1fdfd83ceaf017f0/jupyter_core-5.7.2-py3-none-any.whl", hash = "sha256:4f7315d2f6b4bcf2e3e7cb6e46772eba760ae459cd1f59d29eb57b0a01bd7409", size = 28965 }, +] + +[[package]] +name = "jupyter-events" +version = "0.11.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jsonschema", extra = ["format-nongpl"] }, + { name = "python-json-logger" }, + { name = "pyyaml" }, + { name = "referencing" }, + { name = "rfc3339-validator" }, + { name = "rfc3986-validator" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f4/65/5791c8a979b5646ca29ea50e42b6708908b789f7ff389d1a03c1b93a1c54/jupyter_events-0.11.0.tar.gz", hash = "sha256:c0bc56a37aac29c1fbc3bcfbddb8c8c49533f9cf11f1c4e6adadba936574ab90", size = 62039 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/8c/9b65cb2cd4ea32d885993d5542244641590530836802a2e8c7449a4c61c9/jupyter_events-0.11.0-py3-none-any.whl", hash = "sha256:36399b41ce1ca45fe8b8271067d6a140ffa54cec4028e95491c93b78a855cacf", size = 19423 }, +] + +[[package]] +name = "jupyter-lsp" +version = "2.2.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jupyter-server" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/85/b4/3200b0b09c12bc3b72d943d923323c398eff382d1dcc7c0dbc8b74630e40/jupyter-lsp-2.2.5.tar.gz", hash = "sha256:793147a05ad446f809fd53ef1cd19a9f5256fd0a2d6b7ce943a982cb4f545001", size = 48741 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/e0/7bd7cff65594fd9936e2f9385701e44574fc7d721331ff676ce440b14100/jupyter_lsp-2.2.5-py3-none-any.whl", hash = "sha256:45fbddbd505f3fbfb0b6cb2f1bc5e15e83ab7c79cd6e89416b248cb3c00c11da", size = 69146 }, +] + +[[package]] +name = "jupyter-server" +version = "2.15.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "argon2-cffi" }, + { name = "jinja2" }, + { name = "jupyter-client" }, + { name = "jupyter-core" }, + { name = "jupyter-events" }, + { name = "jupyter-server-terminals" }, + { name = "nbconvert" }, + { name = "nbformat" }, + { name = "overrides" }, + { name = "packaging" }, + { name = "prometheus-client" }, + { name = "pywinpty", marker = "os_name == 'nt'" }, + { name = "pyzmq" }, + { name = "send2trash" }, + { name = "terminado" }, + { name = "tornado" }, + { name = "traitlets" }, + { name = "websocket-client" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/61/8c/df09d4ab646141f130f9977b32b206ba8615d1969b2eba6a2e84b7f89137/jupyter_server-2.15.0.tar.gz", hash = "sha256:9d446b8697b4f7337a1b7cdcac40778babdd93ba614b6d68ab1c0c918f1c4084", size = 725227 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e2/a2/89eeaf0bb954a123a909859fa507fa86f96eb61b62dc30667b60dbd5fdaf/jupyter_server-2.15.0-py3-none-any.whl", hash = "sha256:872d989becf83517012ee669f09604aa4a28097c0bd90b2f424310156c2cdae3", size = 385826 }, +] + +[[package]] +name = "jupyter-server-terminals" +version = "0.5.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pywinpty", marker = "os_name == 'nt'" }, + { name = "terminado" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fc/d5/562469734f476159e99a55426d697cbf8e7eb5efe89fb0e0b4f83a3d3459/jupyter_server_terminals-0.5.3.tar.gz", hash = "sha256:5ae0295167220e9ace0edcfdb212afd2b01ee8d179fe6f23c899590e9b8a5269", size = 31430 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/2d/2b32cdbe8d2a602f697a649798554e4f072115438e92249624e532e8aca6/jupyter_server_terminals-0.5.3-py3-none-any.whl", hash = "sha256:41ee0d7dc0ebf2809c668e0fc726dfaf258fcd3e769568996ca731b6194ae9aa", size = 13656 }, +] + +[[package]] +name = "jupyterlab" +version = "4.3.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "async-lru" }, + { name = "httpx" }, + { name = "ipykernel" }, + { name = "jinja2" }, + { name = "jupyter-core" }, + { name = "jupyter-lsp" }, + { name = "jupyter-server" }, + { name = "jupyterlab-server" }, + { name = "notebook-shim" }, + { name = "packaging" }, + { name = "setuptools" }, + { name = "tornado" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/19/17/6f3d73c3e54b71bbaf03edcc4a54b0aa6328e0a134755f297ea87d425711/jupyterlab-4.3.5.tar.gz", hash = "sha256:c779bf72ced007d7d29d5bcef128e7fdda96ea69299e19b04a43635a7d641f9d", size = 21800023 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/73/6f/94d4c879b3e2b7b9bca1913ea6fbbef180f8b1ed065b46ade40d651ec54d/jupyterlab-4.3.5-py3-none-any.whl", hash = "sha256:571bbdee20e4c5321ab5195bc41cf92a75a5cff886be5e57ce78dfa37a5e9fdb", size = 11666944 }, +] + +[[package]] +name = "jupyterlab-pygments" +version = "0.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/90/51/9187be60d989df97f5f0aba133fa54e7300f17616e065d1ada7d7646b6d6/jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d", size = 512900 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b1/dd/ead9d8ea85bf202d90cc513b533f9c363121c7792674f78e0d8a854b63b4/jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780", size = 15884 }, +] + +[[package]] +name = "jupyterlab-server" +version = "2.27.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "babel" }, + { name = "jinja2" }, + { name = "json5" }, + { name = "jsonschema" }, + { name = "jupyter-server" }, + { name = "packaging" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0a/c9/a883ce65eb27905ce77ace410d83587c82ea64dc85a48d1f7ed52bcfa68d/jupyterlab_server-2.27.3.tar.gz", hash = "sha256:eb36caca59e74471988f0ae25c77945610b887f777255aa21f8065def9e51ed4", size = 76173 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/09/2032e7d15c544a0e3cd831c51d77a8ca57f7555b2e1b2922142eddb02a84/jupyterlab_server-2.27.3-py3-none-any.whl", hash = "sha256:e697488f66c3db49df675158a77b3b017520d772c6e1548c7d9bcc5df7944ee4", size = 59700 }, +] + +[[package]] +name = "jupyterlab-widgets" +version = "3.0.13" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/59/73/fa26bbb747a9ea4fca6b01453aa22990d52ab62dd61384f1ac0dc9d4e7ba/jupyterlab_widgets-3.0.13.tar.gz", hash = "sha256:a2966d385328c1942b683a8cd96b89b8dd82c8b8f81dda902bb2bc06d46f5bed", size = 203556 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a9/93/858e87edc634d628e5d752ba944c2833133a28fa87bb093e6832ced36a3e/jupyterlab_widgets-3.0.13-py3-none-any.whl", hash = "sha256:e3cda2c233ce144192f1e29914ad522b2f4c40e77214b0cc97377ca3d323db54", size = 214392 }, +] + +[[package]] +name = "markupsafe" +version = "3.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6b/28/bbf83e3f76936960b850435576dd5e67034e200469571be53f69174a2dfd/MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d", size = 14353 }, + { url = "https://files.pythonhosted.org/packages/6c/30/316d194b093cde57d448a4c3209f22e3046c5bb2fb0820b118292b334be7/MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93", size = 12392 }, + { url = "https://files.pythonhosted.org/packages/f2/96/9cdafba8445d3a53cae530aaf83c38ec64c4d5427d975c974084af5bc5d2/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832", size = 23984 }, + { url = "https://files.pythonhosted.org/packages/f1/a4/aefb044a2cd8d7334c8a47d3fb2c9f328ac48cb349468cc31c20b539305f/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84", size = 23120 }, + { url = "https://files.pythonhosted.org/packages/8d/21/5e4851379f88f3fad1de30361db501300d4f07bcad047d3cb0449fc51f8c/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca", size = 23032 }, + { url = "https://files.pythonhosted.org/packages/00/7b/e92c64e079b2d0d7ddf69899c98842f3f9a60a1ae72657c89ce2655c999d/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798", size = 24057 }, + { url = "https://files.pythonhosted.org/packages/f9/ac/46f960ca323037caa0a10662ef97d0a4728e890334fc156b9f9e52bcc4ca/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e", size = 23359 }, + { url = "https://files.pythonhosted.org/packages/69/84/83439e16197337b8b14b6a5b9c2105fff81d42c2a7c5b58ac7b62ee2c3b1/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4", size = 23306 }, + { url = "https://files.pythonhosted.org/packages/9a/34/a15aa69f01e2181ed8d2b685c0d2f6655d5cca2c4db0ddea775e631918cd/MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d", size = 15094 }, + { url = "https://files.pythonhosted.org/packages/da/b8/3a3bd761922d416f3dc5d00bfbed11f66b1ab89a0c2b6e887240a30b0f6b/MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b", size = 15521 }, + { url = "https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", size = 14274 }, + { url = "https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", size = 12348 }, + { url = "https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", size = 24149 }, + { url = "https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", size = 23118 }, + { url = "https://files.pythonhosted.org/packages/d5/da/f2eeb64c723f5e3777bc081da884b414671982008c47dcc1873d81f625b6/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", size = 22993 }, + { url = "https://files.pythonhosted.org/packages/da/0e/1f32af846df486dce7c227fe0f2398dc7e2e51d4a370508281f3c1c5cddc/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", size = 24178 }, + { url = "https://files.pythonhosted.org/packages/c4/f6/bb3ca0532de8086cbff5f06d137064c8410d10779c4c127e0e47d17c0b71/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", size = 23319 }, + { url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352 }, + { url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097 }, + { url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601 }, + { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274 }, + { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352 }, + { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122 }, + { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085 }, + { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978 }, + { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208 }, + { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357 }, + { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344 }, + { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101 }, + { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603 }, + { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510 }, + { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486 }, + { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480 }, + { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914 }, + { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796 }, + { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473 }, + { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114 }, + { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098 }, + { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208 }, + { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739 }, +] + +[[package]] +name = "matplotlib-inline" +version = "0.1.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/99/5b/a36a337438a14116b16480db471ad061c36c3694df7c2084a0da7ba538b7/matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90", size = 8159 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8f/8e/9ad090d3553c280a8060fbf6e24dc1c0c29704ee7d1c372f0c174aa59285/matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca", size = 9899 }, +] + +[[package]] +name = "mistune" +version = "3.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c6/1d/6b2b634e43bacc3239006e61800676aa6c41ac1836b2c57497ed27a7310b/mistune-3.1.1.tar.gz", hash = "sha256:e0740d635f515119f7d1feb6f9b192ee60f0cc649f80a8f944f905706a21654c", size = 94645 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c6/02/c66bdfdadbb021adb642ca4e8a5ed32ada0b4a3e4b39c5d076d19543452f/mistune-3.1.1-py3-none-any.whl", hash = "sha256:02106ac2aa4f66e769debbfa028509a275069dcffce0dfa578edd7b991ee700a", size = 53696 }, +] + +[[package]] +name = "nbclient" +version = "0.10.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jupyter-client" }, + { name = "jupyter-core" }, + { name = "nbformat" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/87/66/7ffd18d58eae90d5721f9f39212327695b749e23ad44b3881744eaf4d9e8/nbclient-0.10.2.tar.gz", hash = "sha256:90b7fc6b810630db87a6d0c2250b1f0ab4cf4d3c27a299b0cde78a4ed3fd9193", size = 62424 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/34/6d/e7fa07f03a4a7b221d94b4d586edb754a9b0dc3c9e2c93353e9fa4e0d117/nbclient-0.10.2-py3-none-any.whl", hash = "sha256:4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d", size = 25434 }, +] + +[[package]] +name = "nbconvert" +version = "7.16.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "beautifulsoup4" }, + { name = "bleach", extra = ["css"] }, + { name = "defusedxml" }, + { name = "jinja2" }, + { name = "jupyter-core" }, + { name = "jupyterlab-pygments" }, + { name = "markupsafe" }, + { name = "mistune" }, + { name = "nbclient" }, + { name = "nbformat" }, + { name = "packaging" }, + { name = "pandocfilters" }, + { name = "pygments" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a3/59/f28e15fc47ffb73af68a8d9b47367a8630d76e97ae85ad18271b9db96fdf/nbconvert-7.16.6.tar.gz", hash = "sha256:576a7e37c6480da7b8465eefa66c17844243816ce1ccc372633c6b71c3c0f582", size = 857715 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cc/9a/cd673b2f773a12c992f41309ef81b99da1690426bd2f96957a7ade0d3ed7/nbconvert-7.16.6-py3-none-any.whl", hash = "sha256:1375a7b67e0c2883678c48e506dc320febb57685e5ee67faa51b18a90f3a712b", size = 258525 }, +] + +[[package]] +name = "nbformat" +version = "5.10.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "fastjsonschema" }, + { name = "jsonschema" }, + { name = "jupyter-core" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6d/fd/91545e604bc3dad7dca9ed03284086039b294c6b3d75c0d2fa45f9e9caf3/nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a", size = 142749 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b", size = 78454 }, +] + +[[package]] +name = "nest-asyncio" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195 }, +] + +[[package]] +name = "notebook" +version = "7.3.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jupyter-server" }, + { name = "jupyterlab" }, + { name = "jupyterlab-server" }, + { name = "notebook-shim" }, + { name = "tornado" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ea/04/ac488379d5afef43402b3fb4be2857db1a09804fecf98b9b714c741b225b/notebook-7.3.2.tar.gz", hash = "sha256:705e83a1785f45b383bf3ee13cb76680b92d24f56fb0c7d2136fe1d850cd3ca8", size = 12781804 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/9b/76e50ee18f183ea5fe1784a9eeaa50f2c71802e4740d6e959592b0993298/notebook-7.3.2-py3-none-any.whl", hash = "sha256:e5f85fc59b69d3618d73cf27544418193ff8e8058d5bf61d315ce4f473556288", size = 13163630 }, +] + +[[package]] +name = "notebook-shim" +version = "0.2.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jupyter-server" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/54/d2/92fa3243712b9a3e8bafaf60aac366da1cada3639ca767ff4b5b3654ec28/notebook_shim-0.2.4.tar.gz", hash = "sha256:b4b2cfa1b65d98307ca24361f5b30fe785b53c3fd07b7a47e89acb5e6ac638cb", size = 13167 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f9/33/bd5b9137445ea4b680023eb0469b2bb969d61303dedb2aac6560ff3d14a1/notebook_shim-0.2.4-py3-none-any.whl", hash = "sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef", size = 13307 }, +] + +[[package]] +name = "numpy" +version = "2.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ec/d0/c12ddfd3a02274be06ffc71f3efc6d0e457b0409c4481596881e748cb264/numpy-2.2.2.tar.gz", hash = "sha256:ed6906f61834d687738d25988ae117683705636936cc605be0bb208b23df4d8f", size = 20233295 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/21/67/32c68756eed84df181c06528ff57e09138f893c4653448c4967311e0f992/numpy-2.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:642199e98af1bd2b6aeb8ecf726972d238c9877b0f6e8221ee5ab945ec8a2189", size = 21220002 }, + { url = "https://files.pythonhosted.org/packages/3b/89/f43bcad18f2b2e5814457b1c7f7b0e671d0db12c8c0e43397ab8cb1831ed/numpy-2.2.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6d9fc9d812c81e6168b6d405bf00b8d6739a7f72ef22a9214c4241e0dc70b323", size = 14391215 }, + { url = "https://files.pythonhosted.org/packages/9c/e6/efb8cd6122bf25e86e3dd89d9dbfec9e6861c50e8810eed77d4be59b51c6/numpy-2.2.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:c7d1fd447e33ee20c1f33f2c8e6634211124a9aabde3c617687d8b739aa69eac", size = 5391918 }, + { url = "https://files.pythonhosted.org/packages/47/e2/fccf89d64d9b47ffb242823d4e851fc9d36fa751908c9aac2807924d9b4e/numpy-2.2.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:451e854cfae0febe723077bd0cf0a4302a5d84ff25f0bfece8f29206c7bed02e", size = 6933133 }, + { url = "https://files.pythonhosted.org/packages/34/22/5ece749c0e5420a9380eef6fbf83d16a50010bd18fef77b9193d80a6760e/numpy-2.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd249bc894af67cbd8bad2c22e7cbcd46cf87ddfca1f1289d1e7e54868cc785c", size = 14338187 }, + { url = "https://files.pythonhosted.org/packages/5b/86/caec78829311f62afa6fa334c8dfcd79cffb4d24bcf96ee02ae4840d462b/numpy-2.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02935e2c3c0c6cbe9c7955a8efa8908dd4221d7755644c59d1bba28b94fd334f", size = 16393429 }, + { url = "https://files.pythonhosted.org/packages/c8/4e/0c25f74c88239a37924577d6ad780f3212a50f4b4b5f54f5e8c918d726bd/numpy-2.2.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a972cec723e0563aa0823ee2ab1df0cb196ed0778f173b381c871a03719d4826", size = 15559103 }, + { url = "https://files.pythonhosted.org/packages/d4/bd/d557f10fa50dc4d5871fb9606af563249b66af2fc6f99041a10e8757c6f1/numpy-2.2.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d6d6a0910c3b4368d89dde073e630882cdb266755565155bc33520283b2d9df8", size = 18182967 }, + { url = "https://files.pythonhosted.org/packages/30/e9/66cc0f66386d78ed89e45a56e2a1d051e177b6e04477c4a41cd590ef4017/numpy-2.2.2-cp311-cp311-win32.whl", hash = "sha256:860fd59990c37c3ef913c3ae390b3929d005243acca1a86facb0773e2d8d9e50", size = 6571499 }, + { url = "https://files.pythonhosted.org/packages/66/a3/4139296b481ae7304a43581046b8f0a20da6a0dfe0ee47a044cade796603/numpy-2.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:da1eeb460ecce8d5b8608826595c777728cdf28ce7b5a5a8c8ac8d949beadcf2", size = 12919805 }, + { url = "https://files.pythonhosted.org/packages/0c/e6/847d15770ab7a01e807bdfcd4ead5bdae57c0092b7dc83878171b6af97bb/numpy-2.2.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ac9bea18d6d58a995fac1b2cb4488e17eceeac413af014b1dd26170b766d8467", size = 20912636 }, + { url = "https://files.pythonhosted.org/packages/d1/af/f83580891577b13bd7e261416120e036d0d8fb508c8a43a73e38928b794b/numpy-2.2.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:23ae9f0c2d889b7b2d88a3791f6c09e2ef827c2446f1c4a3e3e76328ee4afd9a", size = 14098403 }, + { url = "https://files.pythonhosted.org/packages/2b/86/d019fb60a9d0f1d4cf04b014fe88a9135090adfadcc31c1fadbb071d7fa7/numpy-2.2.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:3074634ea4d6df66be04f6728ee1d173cfded75d002c75fac79503a880bf3825", size = 5128938 }, + { url = "https://files.pythonhosted.org/packages/7a/1b/50985edb6f1ec495a1c36452e860476f5b7ecdc3fc59ea89ccad3c4926c5/numpy-2.2.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:8ec0636d3f7d68520afc6ac2dc4b8341ddb725039de042faf0e311599f54eb37", size = 6661937 }, + { url = "https://files.pythonhosted.org/packages/f4/1b/17efd94cad1b9d605c3f8907fb06bcffc4ce4d1d14d46b95316cccccf2b9/numpy-2.2.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ffbb1acd69fdf8e89dd60ef6182ca90a743620957afb7066385a7bbe88dc748", size = 14049518 }, + { url = "https://files.pythonhosted.org/packages/5b/73/65d2f0b698df1731e851e3295eb29a5ab8aa06f763f7e4188647a809578d/numpy-2.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0349b025e15ea9d05c3d63f9657707a4e1d471128a3b1d876c095f328f8ff7f0", size = 16099146 }, + { url = "https://files.pythonhosted.org/packages/d5/69/308f55c0e19d4b5057b5df286c5433822e3c8039ede06d4051d96f1c2c4e/numpy-2.2.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:463247edcee4a5537841d5350bc87fe8e92d7dd0e8c71c995d2c6eecb8208278", size = 15246336 }, + { url = "https://files.pythonhosted.org/packages/f0/d8/d8d333ad0d8518d077a21aeea7b7c826eff766a2b1ce1194dea95ca0bacf/numpy-2.2.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9dd47ff0cb2a656ad69c38da850df3454da88ee9a6fde0ba79acceee0e79daba", size = 17863507 }, + { url = "https://files.pythonhosted.org/packages/82/6e/0b84ad3103ffc16d6673e63b5acbe7901b2af96c2837174c6318c98e27ab/numpy-2.2.2-cp312-cp312-win32.whl", hash = "sha256:4525b88c11906d5ab1b0ec1f290996c0020dd318af8b49acaa46f198b1ffc283", size = 6276491 }, + { url = "https://files.pythonhosted.org/packages/fc/84/7f801a42a67b9772a883223a0a1e12069a14626c81a732bd70aac57aebc1/numpy-2.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:5acea83b801e98541619af398cc0109ff48016955cc0818f478ee9ef1c5c3dcb", size = 12616372 }, + { url = "https://files.pythonhosted.org/packages/e1/fe/df5624001f4f5c3e0b78e9017bfab7fdc18a8d3b3d3161da3d64924dd659/numpy-2.2.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b208cfd4f5fe34e1535c08983a1a6803fdbc7a1e86cf13dd0c61de0b51a0aadc", size = 20899188 }, + { url = "https://files.pythonhosted.org/packages/a9/80/d349c3b5ed66bd3cb0214be60c27e32b90a506946857b866838adbe84040/numpy-2.2.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d0bbe7dd86dca64854f4b6ce2ea5c60b51e36dfd597300057cf473d3615f2369", size = 14113972 }, + { url = "https://files.pythonhosted.org/packages/9d/50/949ec9cbb28c4b751edfa64503f0913cbfa8d795b4a251e7980f13a8a655/numpy-2.2.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:22ea3bb552ade325530e72a0c557cdf2dea8914d3a5e1fecf58fa5dbcc6f43cd", size = 5114294 }, + { url = "https://files.pythonhosted.org/packages/8d/f3/399c15629d5a0c68ef2aa7621d430b2be22034f01dd7f3c65a9c9666c445/numpy-2.2.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:128c41c085cab8a85dc29e66ed88c05613dccf6bc28b3866cd16050a2f5448be", size = 6648426 }, + { url = "https://files.pythonhosted.org/packages/2c/03/c72474c13772e30e1bc2e558cdffd9123c7872b731263d5648b5c49dd459/numpy-2.2.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:250c16b277e3b809ac20d1f590716597481061b514223c7badb7a0f9993c7f84", size = 14045990 }, + { url = "https://files.pythonhosted.org/packages/83/9c/96a9ab62274ffafb023f8ee08c88d3d31ee74ca58869f859db6845494fa6/numpy-2.2.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0c8854b09bc4de7b041148d8550d3bd712b5c21ff6a8ed308085f190235d7ff", size = 16096614 }, + { url = "https://files.pythonhosted.org/packages/d5/34/cd0a735534c29bec7093544b3a509febc9b0df77718a9b41ffb0809c9f46/numpy-2.2.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b6fb9c32a91ec32a689ec6410def76443e3c750e7cfc3fb2206b985ffb2b85f0", size = 15242123 }, + { url = "https://files.pythonhosted.org/packages/5e/6d/541717a554a8f56fa75e91886d9b79ade2e595918690eb5d0d3dbd3accb9/numpy-2.2.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:57b4012e04cc12b78590a334907e01b3a85efb2107df2b8733ff1ed05fce71de", size = 17859160 }, + { url = "https://files.pythonhosted.org/packages/b9/a5/fbf1f2b54adab31510728edd06a05c1b30839f37cf8c9747cb85831aaf1b/numpy-2.2.2-cp313-cp313-win32.whl", hash = "sha256:4dbd80e453bd34bd003b16bd802fac70ad76bd463f81f0c518d1245b1c55e3d9", size = 6273337 }, + { url = "https://files.pythonhosted.org/packages/56/e5/01106b9291ef1d680f82bc47d0c5b5e26dfed15b0754928e8f856c82c881/numpy-2.2.2-cp313-cp313-win_amd64.whl", hash = "sha256:5a8c863ceacae696aff37d1fd636121f1a512117652e5dfb86031c8d84836369", size = 12609010 }, + { url = "https://files.pythonhosted.org/packages/9f/30/f23d9876de0f08dceb707c4dcf7f8dd7588266745029debb12a3cdd40be6/numpy-2.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:b3482cb7b3325faa5f6bc179649406058253d91ceda359c104dac0ad320e1391", size = 20924451 }, + { url = "https://files.pythonhosted.org/packages/6a/ec/6ea85b2da9d5dfa1dbb4cb3c76587fc8ddcae580cb1262303ab21c0926c4/numpy-2.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:9491100aba630910489c1d0158034e1c9a6546f0b1340f716d522dc103788e39", size = 14122390 }, + { url = "https://files.pythonhosted.org/packages/68/05/bfbdf490414a7dbaf65b10c78bc243f312c4553234b6d91c94eb7c4b53c2/numpy-2.2.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:41184c416143defa34cc8eb9d070b0a5ba4f13a0fa96a709e20584638254b317", size = 5156590 }, + { url = "https://files.pythonhosted.org/packages/f7/ec/fe2e91b2642b9d6544518388a441bcd65c904cea38d9ff998e2e8ebf808e/numpy-2.2.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:7dca87ca328f5ea7dafc907c5ec100d187911f94825f8700caac0b3f4c384b49", size = 6671958 }, + { url = "https://files.pythonhosted.org/packages/b1/6f/6531a78e182f194d33ee17e59d67d03d0d5a1ce7f6be7343787828d1bd4a/numpy-2.2.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bc61b307655d1a7f9f4b043628b9f2b721e80839914ede634e3d485913e1fb2", size = 14019950 }, + { url = "https://files.pythonhosted.org/packages/e1/fb/13c58591d0b6294a08cc40fcc6b9552d239d773d520858ae27f39997f2ae/numpy-2.2.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fad446ad0bc886855ddf5909cbf8cb5d0faa637aaa6277fb4b19ade134ab3c7", size = 16079759 }, + { url = "https://files.pythonhosted.org/packages/2c/f2/f2f8edd62abb4b289f65a7f6d1f3650273af00b91b7267a2431be7f1aec6/numpy-2.2.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:149d1113ac15005652e8d0d3f6fd599360e1a708a4f98e43c9c77834a28238cb", size = 15226139 }, + { url = "https://files.pythonhosted.org/packages/aa/29/14a177f1a90b8ad8a592ca32124ac06af5eff32889874e53a308f850290f/numpy-2.2.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:106397dbbb1896f99e044efc90360d098b3335060375c26aa89c0d8a97c5f648", size = 17856316 }, + { url = "https://files.pythonhosted.org/packages/95/03/242ae8d7b97f4e0e4ab8dd51231465fb23ed5e802680d629149722e3faf1/numpy-2.2.2-cp313-cp313t-win32.whl", hash = "sha256:0eec19f8af947a61e968d5429f0bd92fec46d92b0008d0a6685b40d6adf8a4f4", size = 6329134 }, + { url = "https://files.pythonhosted.org/packages/80/94/cd9e9b04012c015cb6320ab3bf43bc615e248dddfeb163728e800a5d96f0/numpy-2.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:97b974d3ba0fb4612b77ed35d7627490e8e3dff56ab41454d9e8b23448940576", size = 12696208 }, +] + +[[package]] +name = "overrides" +version = "7.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/36/86/b585f53236dec60aba864e050778b25045f857e17f6e5ea0ae95fe80edd2/overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a", size = 22812 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/ab/fc8290c6a4c722e5514d80f62b2dc4c4df1a68a41d1364e625c35990fcf3/overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49", size = 17832 }, +] + +[[package]] +name = "packaging" +version = "24.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d0/63/68dbb6eb2de9cb10ee4c9c14a0148804425e13c4fb20d61cce69f53106da/packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f", size = 163950 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451 }, +] + +[[package]] +name = "pandas" +version = "2.2.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "python-dateutil" }, + { name = "pytz" }, + { name = "tzdata" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9c/d6/9f8431bacc2e19dca897724cd097b1bb224a6ad5433784a44b587c7c13af/pandas-2.2.3.tar.gz", hash = "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667", size = 4399213 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a8/44/d9502bf0ed197ba9bf1103c9867d5904ddcaf869e52329787fc54ed70cc8/pandas-2.2.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:66108071e1b935240e74525006034333f98bcdb87ea116de573a6a0dccb6c039", size = 12602222 }, + { url = "https://files.pythonhosted.org/packages/52/11/9eac327a38834f162b8250aab32a6781339c69afe7574368fffe46387edf/pandas-2.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7c2875855b0ff77b2a64a0365e24455d9990730d6431b9e0ee18ad8acee13dbd", size = 11321274 }, + { url = "https://files.pythonhosted.org/packages/45/fb/c4beeb084718598ba19aa9f5abbc8aed8b42f90930da861fcb1acdb54c3a/pandas-2.2.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cd8d0c3be0515c12fed0bdbae072551c8b54b7192c7b1fda0ba56059a0179698", size = 15579836 }, + { url = "https://files.pythonhosted.org/packages/cd/5f/4dba1d39bb9c38d574a9a22548c540177f78ea47b32f99c0ff2ec499fac5/pandas-2.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c124333816c3a9b03fbeef3a9f230ba9a737e9e5bb4060aa2107a86cc0a497fc", size = 13058505 }, + { url = "https://files.pythonhosted.org/packages/b9/57/708135b90391995361636634df1f1130d03ba456e95bcf576fada459115a/pandas-2.2.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:63cc132e40a2e084cf01adf0775b15ac515ba905d7dcca47e9a251819c575ef3", size = 16744420 }, + { url = "https://files.pythonhosted.org/packages/86/4a/03ed6b7ee323cf30404265c284cee9c65c56a212e0a08d9ee06984ba2240/pandas-2.2.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:29401dbfa9ad77319367d36940cd8a0b3a11aba16063e39632d98b0e931ddf32", size = 14440457 }, + { url = "https://files.pythonhosted.org/packages/ed/8c/87ddf1fcb55d11f9f847e3c69bb1c6f8e46e2f40ab1a2d2abadb2401b007/pandas-2.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:3fc6873a41186404dad67245896a6e440baacc92f5b716ccd1bc9ed2995ab2c5", size = 11617166 }, + { url = "https://files.pythonhosted.org/packages/17/a3/fb2734118db0af37ea7433f57f722c0a56687e14b14690edff0cdb4b7e58/pandas-2.2.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b1d432e8d08679a40e2a6d8b2f9770a5c21793a6f9f47fdd52c5ce1948a5a8a9", size = 12529893 }, + { url = "https://files.pythonhosted.org/packages/e1/0c/ad295fd74bfac85358fd579e271cded3ac969de81f62dd0142c426b9da91/pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a5a1595fe639f5988ba6a8e5bc9649af3baf26df3998a0abe56c02609392e0a4", size = 11363475 }, + { url = "https://files.pythonhosted.org/packages/c6/2a/4bba3f03f7d07207481fed47f5b35f556c7441acddc368ec43d6643c5777/pandas-2.2.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5de54125a92bb4d1c051c0659e6fcb75256bf799a732a87184e5ea503965bce3", size = 15188645 }, + { url = "https://files.pythonhosted.org/packages/38/f8/d8fddee9ed0d0c0f4a2132c1dfcf0e3e53265055da8df952a53e7eaf178c/pandas-2.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fffb8ae78d8af97f849404f21411c95062db1496aeb3e56f146f0355c9989319", size = 12739445 }, + { url = "https://files.pythonhosted.org/packages/20/e8/45a05d9c39d2cea61ab175dbe6a2de1d05b679e8de2011da4ee190d7e748/pandas-2.2.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dfcb5ee8d4d50c06a51c2fffa6cff6272098ad6540aed1a76d15fb9318194d8", size = 16359235 }, + { url = "https://files.pythonhosted.org/packages/1d/99/617d07a6a5e429ff90c90da64d428516605a1ec7d7bea494235e1c3882de/pandas-2.2.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:062309c1b9ea12a50e8ce661145c6aab431b1e99530d3cd60640e255778bd43a", size = 14056756 }, + { url = "https://files.pythonhosted.org/packages/29/d4/1244ab8edf173a10fd601f7e13b9566c1b525c4f365d6bee918e68381889/pandas-2.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13", size = 11504248 }, + { url = "https://files.pythonhosted.org/packages/64/22/3b8f4e0ed70644e85cfdcd57454686b9057c6c38d2f74fe4b8bc2527214a/pandas-2.2.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f00d1345d84d8c86a63e476bb4955e46458b304b9575dcf71102b5c705320015", size = 12477643 }, + { url = "https://files.pythonhosted.org/packages/e4/93/b3f5d1838500e22c8d793625da672f3eec046b1a99257666c94446969282/pandas-2.2.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3508d914817e153ad359d7e069d752cdd736a247c322d932eb89e6bc84217f28", size = 11281573 }, + { url = "https://files.pythonhosted.org/packages/f5/94/6c79b07f0e5aab1dcfa35a75f4817f5c4f677931d4234afcd75f0e6a66ca/pandas-2.2.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22a9d949bfc9a502d320aa04e5d02feab689d61da4e7764b62c30b991c42c5f0", size = 15196085 }, + { url = "https://files.pythonhosted.org/packages/e8/31/aa8da88ca0eadbabd0a639788a6da13bb2ff6edbbb9f29aa786450a30a91/pandas-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3a255b2c19987fbbe62a9dfd6cff7ff2aa9ccab3fc75218fd4b7530f01efa24", size = 12711809 }, + { url = "https://files.pythonhosted.org/packages/ee/7c/c6dbdb0cb2a4344cacfb8de1c5808ca885b2e4dcfde8008266608f9372af/pandas-2.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:800250ecdadb6d9c78eae4990da62743b857b470883fa27f652db8bdde7f6659", size = 16356316 }, + { url = "https://files.pythonhosted.org/packages/57/b7/8b757e7d92023b832869fa8881a992696a0bfe2e26f72c9ae9f255988d42/pandas-2.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6374c452ff3ec675a8f46fd9ab25c4ad0ba590b71cf0656f8b6daa5202bca3fb", size = 14022055 }, + { url = "https://files.pythonhosted.org/packages/3b/bc/4b18e2b8c002572c5a441a64826252ce5da2aa738855747247a971988043/pandas-2.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d", size = 11481175 }, + { url = "https://files.pythonhosted.org/packages/76/a3/a5d88146815e972d40d19247b2c162e88213ef51c7c25993942c39dbf41d/pandas-2.2.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3b71f27954685ee685317063bf13c7709a7ba74fc996b84fc6821c59b0f06468", size = 12615650 }, + { url = "https://files.pythonhosted.org/packages/9c/8c/f0fd18f6140ddafc0c24122c8a964e48294acc579d47def376fef12bcb4a/pandas-2.2.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:38cf8125c40dae9d5acc10fa66af8ea6fdf760b2714ee482ca691fc66e6fcb18", size = 11290177 }, + { url = "https://files.pythonhosted.org/packages/ed/f9/e995754eab9c0f14c6777401f7eece0943840b7a9fc932221c19d1abee9f/pandas-2.2.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ba96630bc17c875161df3818780af30e43be9b166ce51c9a18c1feae342906c2", size = 14651526 }, + { url = "https://files.pythonhosted.org/packages/25/b0/98d6ae2e1abac4f35230aa756005e8654649d305df9a28b16b9ae4353bff/pandas-2.2.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4", size = 11871013 }, + { url = "https://files.pythonhosted.org/packages/cc/57/0f72a10f9db6a4628744c8e8f0df4e6e21de01212c7c981d31e50ffc8328/pandas-2.2.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d", size = 15711620 }, + { url = "https://files.pythonhosted.org/packages/ab/5f/b38085618b950b79d2d9164a711c52b10aefc0ae6833b96f626b7021b2ed/pandas-2.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a", size = 13098436 }, +] + +[[package]] +name = "pandocfilters" +version = "1.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/70/6f/3dd4940bbe001c06a65f88e36bad298bc7a0de5036115639926b0c5c0458/pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e", size = 8454 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/af/4fbc8cab944db5d21b7e2a5b8e9211a03a79852b1157e2c102fcc61ac440/pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc", size = 8663 }, +] + +[[package]] +name = "parso" +version = "0.8.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/66/94/68e2e17afaa9169cf6412ab0f28623903be73d1b32e208d9e8e541bb086d/parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d", size = 400609 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c6/ac/dac4a63f978e4dcb3c6d3a78c4d8e0192a113d288502a1216950c41b1027/parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18", size = 103650 }, +] + +[[package]] +name = "pexpect" +version = "4.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ptyprocess" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772 }, +] + +[[package]] +name = "platformdirs" +version = "4.3.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/13/fc/128cc9cb8f03208bdbf93d3aa862e16d376844a14f9a0ce5cf4507372de4/platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907", size = 21302 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb", size = 18439 }, +] + +[[package]] +name = "prometheus-client" +version = "0.21.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/62/14/7d0f567991f3a9af8d1cd4f619040c93b68f09a02b6d0b6ab1b2d1ded5fe/prometheus_client-0.21.1.tar.gz", hash = "sha256:252505a722ac04b0456be05c05f75f45d760c2911ffc45f2a06bcaed9f3ae3fb", size = 78551 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ff/c2/ab7d37426c179ceb9aeb109a85cda8948bb269b7561a0be870cc656eefe4/prometheus_client-0.21.1-py3-none-any.whl", hash = "sha256:594b45c410d6f4f8888940fe80b5cc2521b305a1fafe1c58609ef715a001f301", size = 54682 }, +] + +[[package]] +name = "prompt-toolkit" +version = "3.0.50" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "wcwidth" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a1/e1/bd15cb8ffdcfeeb2bdc215de3c3cffca11408d829e4b8416dcfe71ba8854/prompt_toolkit-3.0.50.tar.gz", hash = "sha256:544748f3860a2623ca5cd6d2795e7a14f3d0e1c3c9728359013f79877fc89bab", size = 429087 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e4/ea/d836f008d33151c7a1f62caf3d8dd782e4d15f6a43897f64480c2b8de2ad/prompt_toolkit-3.0.50-py3-none-any.whl", hash = "sha256:9b6427eb19e479d98acff65196a307c555eb567989e6d88ebbb1b509d9779198", size = 387816 }, +] + +[[package]] +name = "psutil" +version = "6.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1f/5a/07871137bb752428aa4b659f910b399ba6f291156bdea939be3e96cae7cb/psutil-6.1.1.tar.gz", hash = "sha256:cf8496728c18f2d0b45198f06895be52f36611711746b7f30c464b422b50e2f5", size = 508502 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/61/99/ca79d302be46f7bdd8321089762dd4476ee725fce16fc2b2e1dbba8cac17/psutil-6.1.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:fc0ed7fe2231a444fc219b9c42d0376e0a9a1a72f16c5cfa0f68d19f1a0663e8", size = 247511 }, + { url = "https://files.pythonhosted.org/packages/0b/6b/73dbde0dd38f3782905d4587049b9be64d76671042fdcaf60e2430c6796d/psutil-6.1.1-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:0bdd4eab935276290ad3cb718e9809412895ca6b5b334f5a9111ee6d9aff9377", size = 248985 }, + { url = "https://files.pythonhosted.org/packages/17/38/c319d31a1d3f88c5b79c68b3116c129e5133f1822157dd6da34043e32ed6/psutil-6.1.1-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b6e06c20c05fe95a3d7302d74e7097756d4ba1247975ad6905441ae1b5b66003", size = 284488 }, + { url = "https://files.pythonhosted.org/packages/9c/39/0f88a830a1c8a3aba27fededc642da37613c57cbff143412e3536f89784f/psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97f7cb9921fbec4904f522d972f0c0e1f4fabbdd4e0287813b21215074a0f160", size = 287477 }, + { url = "https://files.pythonhosted.org/packages/47/da/99f4345d4ddf2845cb5b5bd0d93d554e84542d116934fde07a0c50bd4e9f/psutil-6.1.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33431e84fee02bc84ea36d9e2c4a6d395d479c9dd9bba2376c1f6ee8f3a4e0b3", size = 289017 }, + { url = "https://files.pythonhosted.org/packages/38/53/bd755c2896f4461fd4f36fa6a6dcb66a88a9e4b9fd4e5b66a77cf9d4a584/psutil-6.1.1-cp37-abi3-win32.whl", hash = "sha256:eaa912e0b11848c4d9279a93d7e2783df352b082f40111e078388701fd479e53", size = 250602 }, + { url = "https://files.pythonhosted.org/packages/7b/d7/7831438e6c3ebbfa6e01a927127a6cb42ad3ab844247f3c5b96bea25d73d/psutil-6.1.1-cp37-abi3-win_amd64.whl", hash = "sha256:f35cfccb065fff93529d2afb4a2e89e363fe63ca1e4a5da22b603a85833c2649", size = 254444 }, +] + +[[package]] +name = "ptyprocess" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993 }, +] + +[[package]] +name = "pure-eval" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842 }, +] + +[[package]] +name = "pycparser" +version = "2.22" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", size = 172736 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552 }, +] + +[[package]] +name = "pygments" +version = "2.19.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7c/2d/c3338d48ea6cc0feb8446d8e6937e1408088a72a39937982cc6111d17f84/pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f", size = 4968581 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/0b/9fcc47d19c48b59121088dd6da2488a49d5f72dacf8262e2790a1d2c7d15/pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c", size = 1225293 }, +] + +[[package]] +name = "pyogrio" +version = "0.10.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "numpy" }, + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a5/8f/5a784595524a79c269f2b1c880f4fdb152867df700c97005dda51997da02/pyogrio-0.10.0.tar.gz", hash = "sha256:ec051cb568324de878828fae96379b71858933413e185148acb6c162851ab23c", size = 281950 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8d/2c/c761e6adeb81bd4029a137b3240e7214a8c9aaf225883356196afd6ef9d8/pyogrio-0.10.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:5b1a51431a27a1cb3e4e19558939c1423106e06e7b67d6285f4fba9c2d0a91b9", size = 15083526 }, + { url = "https://files.pythonhosted.org/packages/c3/e5/983aa9ddf2ff784e973d6b2ec3e874065d6655a5329ca26311b0f3b9f92f/pyogrio-0.10.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:216d69cd77b2b4a0c9d7d449bc239f8b77f3d73f4a05d9c738a0745b236902d8", size = 16457867 }, + { url = "https://files.pythonhosted.org/packages/fa/9a/7103eee7aa3b6ec88e072ef18a05c3aae1ed96fe00009a7a5ce139b50f30/pyogrio-0.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2f0b75f0077ce33256aec6278c2a9c3b79bf0637ddf4f93d3ab2609f0501d96", size = 23926332 }, + { url = "https://files.pythonhosted.org/packages/8b/b2/2ca124343aba24b9a5dcd7c1f43da81e652849cfaf3110d3f507a80af0a1/pyogrio-0.10.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:0a47f702d29808c557d2ebea8542c23903f021eae44e16838adef2ab4281c71b", size = 23138693 }, + { url = "https://files.pythonhosted.org/packages/ae/15/501aa4823c142232169d54255ab343f28c4ea9e7fa489b8433dcc873a942/pyogrio-0.10.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:11e6c71d12da6b445e77d0fc0198db1bd35a77e03a0685e45338cbab9ce02add", size = 24062952 }, + { url = "https://files.pythonhosted.org/packages/94/8d/24f21e6a93ca418231aee3bddade7a0766c89c523832f29e08a8860f83e6/pyogrio-0.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:d0d74e91a9c0ff2f9abe01b556ff663977193b2d6922208406172d0fc833beff", size = 16172573 }, + { url = "https://files.pythonhosted.org/packages/b5/b5/3c5dfd0b50cbce6f3d4e42c0484647feb1809dbe20e225c4c6abd067e69f/pyogrio-0.10.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:2d6558b180e020f71ab7aa7f82d592ed3305c9f698d98f6d0a4637ec7a84c4ce", size = 15079211 }, + { url = "https://files.pythonhosted.org/packages/b8/9a/1ba9c707a094976f343bd0177741eaba0e842fa05ecd8ab97192db4f2ec1/pyogrio-0.10.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:a99102037eead8ba491bc57825c1e395ee31c9956d7bff7b4a9e4fdbff3a13c2", size = 16442782 }, + { url = "https://files.pythonhosted.org/packages/5e/bb/b4250746c2c85fea5004cae93e9e25ad01516e9e94e04de780a2e78139da/pyogrio-0.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a4c373281d7cbf560c5b61f8f3c7442103ad7f1c7ac4ef3a84572ed7a5dd2f6", size = 23899832 }, + { url = "https://files.pythonhosted.org/packages/bd/4c/79e47e40a8e54e79a45133786a0a58209534f580591c933d40c5ed314fe7/pyogrio-0.10.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:19f18411bdf836d24cdc08b9337eb3ec415e4ac4086ba64516b36b73a2e88622", size = 23081469 }, + { url = "https://files.pythonhosted.org/packages/47/78/2b62c8a340bcb0ea56b9ddf2ef5fd3d1f101dc0e98816b9e6da87c5ac3b7/pyogrio-0.10.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:1abbcdd9876f30bebf1df8a0273f6cdeb29d03259290008275c7fddebe139f20", size = 24024758 }, + { url = "https://files.pythonhosted.org/packages/43/97/34605480f06b0ad9611bf58a174eccc6f3673275f3d519cf763391892881/pyogrio-0.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:2a3e09839590d71ff832aa95c4f23fa00a2c63c3de82c1fbd4fb8d265792acfc", size = 16160294 }, + { url = "https://files.pythonhosted.org/packages/14/4a/4c8e4f5b9edbca46e0f8d6c1c0b56c0d4af0900c29f4bea22d37853c07f3/pyogrio-0.10.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:c90478209537a31dcc65664a87a04c094bb0e08efe502908a6682b8cec0259bf", size = 15076879 }, + { url = "https://files.pythonhosted.org/packages/5f/be/7db0644eef9ef3382518399aaf3332827c43018112d2a74f78784fd496ec/pyogrio-0.10.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:fec45e1963b7058e5a1aa98598aed07c0858512c833d6aad2c672c3ec98bbf04", size = 16440405 }, + { url = "https://files.pythonhosted.org/packages/96/77/f199230ba86fe88b1f57e71428c169ed982de68a32d6082cd7c12d0f5d55/pyogrio-0.10.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28cb139f8a5d0365ede602230104b407ae52bb6b55173c8d5a35424d28c4a2c5", size = 23871511 }, + { url = "https://files.pythonhosted.org/packages/25/ac/ca483bec408b59c54f7129b0244cc9de21d8461aefe89ece7bd74ad33807/pyogrio-0.10.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:cea0187fcc2d574e52af8cfab041fa0a7ad71d5ef6b94b49a3f3d2a04534a27e", size = 23048830 }, + { url = "https://files.pythonhosted.org/packages/d7/3e/c35f2d8dad95b24e568c468f09ff60fb61945065465e0ec7868400596566/pyogrio-0.10.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:7c02b207ea8cf09c501ea3e95d29152781a00d3c32267286bc36fa457c332205", size = 23996873 }, + { url = "https://files.pythonhosted.org/packages/27/5d/0deb16d228362a097ee3258d0a887c9c0add4b9678bb4847b08a241e124d/pyogrio-0.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:02e54bcfb305af75f829044b0045f74de31b77c2d6546f7aaf96822066147848", size = 16158260 }, +] + +[[package]] +name = "pyproj" +version = "3.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/47/c2/0572c8e31aebf0270f15f3368adebd10fc473de9f09567a0743a3bc41c8d/pyproj-3.7.0.tar.gz", hash = "sha256:bf658f4aaf815d9d03c8121650b6f0b8067265c36e31bc6660b98ef144d81813", size = 225577 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e2/8f/15ff6ab10a08050e94afcd544962a1a930d0bb7ca102ad39795a847eb340/pyproj-3.7.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:e66d8d42dbdf232e121546c5a1dec097caf0454e4885c09a8e03cdcee0753c03", size = 6272213 }, + { url = "https://files.pythonhosted.org/packages/2d/4d/610fe2a17de71b4fe210af69ce25f2d65379ba0a48299129894d0d0988ee/pyproj-3.7.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:7764b64a0aefe40134a2828b3a40be88f6c8b7832c45d8a9f2bd592ace4b2a3b", size = 4634548 }, + { url = "https://files.pythonhosted.org/packages/d6/27/0327d0b0fcdfc4cf72696a2effca2963e524dcd846a0274ba503f8bf2648/pyproj-3.7.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:53c442c5081dc95346996f5c4323fde2caafc69c6e60b4707aa46e88244f1e04", size = 6333913 }, + { url = "https://files.pythonhosted.org/packages/3c/e5/2cb256148c730b9c3f74bfb3c03904f5070499c6dcaea153073a9642c6c6/pyproj-3.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc5b305d4d5d7697885681d9b660623e328227612823d5c660e0a9566cb48838", size = 9460363 }, + { url = "https://files.pythonhosted.org/packages/ba/a3/4aa1e8e78ad18aa170efd2c94c1931bf2a34c526683b874d06e40fa323f6/pyproj-3.7.0-cp311-cp311-win32.whl", hash = "sha256:de2b47d748dc41cccb6b3b713d4d7dc9aa1046a82141c8665026908726426abc", size = 5820551 }, + { url = "https://files.pythonhosted.org/packages/26/0c/b084e8839a117eaad8cb4fbaa81bbb24c6f183de0ee95c6c4e2770ab6f09/pyproj-3.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:38cba7c4c5679e40242dd959133e95b908d3b912dd66291094fd13510e8517ff", size = 6231788 }, + { url = "https://files.pythonhosted.org/packages/bd/19/be806b711e9ebfb80411c653054157db128fffdd7f8493e3064136c8d880/pyproj-3.7.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:8cbec92bdd6e9933ca08795c12717d1384e9b51cf4b1acf0d753db255a75c51e", size = 6261400 }, + { url = "https://files.pythonhosted.org/packages/99/3b/8497995e8cae0049d013679c6a7ac6c57b816d590c733a388748dafe5af5/pyproj-3.7.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:8c4a8e4d3ba76c3adac3c087544cf92f7f9a19ea34946904a13fca48cc1c0106", size = 4637848 }, + { url = "https://files.pythonhosted.org/packages/ea/f7/2a5b46d6f8da913d58d44942ab06ca4803b5424b73259b15344cf90040f6/pyproj-3.7.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82624fb42aa31f6b1a860fbc0316babd07fd712642bc31022df4e9b4056bf463", size = 6324856 }, + { url = "https://files.pythonhosted.org/packages/36/83/c257771077bcf9da20d0e97abc834f9037c219986cc76d40183903a30464/pyproj-3.7.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:34e1bbb3f89c68d4a6835c40b2da8b27680eec60e8cc7cdb08c09bcc725b2b62", size = 9525831 }, + { url = "https://files.pythonhosted.org/packages/d6/50/a635de79def69fe03cdef3a4bd3bec780c30987bce3a15dd7099afb2506f/pyproj-3.7.0-cp312-cp312-win32.whl", hash = "sha256:952515d5592167ad4436b355485f82acebed2a49b46722159e4584b75a763dd3", size = 5811864 }, + { url = "https://files.pythonhosted.org/packages/a1/8b/96bc8c8f3eca4eb7fa3758fde0b755d1df30a19f494376e3ee8de1ef4e79/pyproj-3.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:0692f806224e8ed82fe4acfa57268ff444fdaf9f330689f24c0d96e59480cce1", size = 6224720 }, + { url = "https://files.pythonhosted.org/packages/bf/da/a17c452bea1ff4cd58d6dc573055b9c8fb6af114b7d2c694782aec770865/pyproj-3.7.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:94e8b903a9e83448fd2379c49dec3e8cd83c9ed36f54354e68b601cef56d5426", size = 6254898 }, + { url = "https://files.pythonhosted.org/packages/c2/31/ab07b389f2caa527c95ab2ea1940d28879bd2a19e67b2529cb3e94648d26/pyproj-3.7.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:64cb5c17d6f6305a8b978a40f95560c87c5b363fcac40632337955664437875a", size = 4628612 }, + { url = "https://files.pythonhosted.org/packages/1d/24/def3ded6529db3e3d8351ad73481730249ab57d8d876d502f86d7958ce06/pyproj-3.7.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c54e9bdda7ab9c4a5af50f9d6e6ee7704e05fafd504896b96ed1208c7aea098", size = 6315895 }, + { url = "https://files.pythonhosted.org/packages/dd/14/07314f78302105d199fb25e73376d723efe9c2ef3906463aae209913a6d3/pyproj-3.7.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24fa4e9e0abba875f9524808410cc520067eaf38fd5549ed0ef7c43ac39923c9", size = 9466144 }, + { url = "https://files.pythonhosted.org/packages/00/f2/2a116920db3496e3ff3c94d7d8d15da41374f35cfe1b9e79682eca500a61/pyproj-3.7.0-cp313-cp313-win32.whl", hash = "sha256:b9e8353fc3c79dc14d1f5ac758a1a6e4eee04102c3c0b138670f121f5ac52eb4", size = 5807180 }, + { url = "https://files.pythonhosted.org/packages/f8/33/3c8c6302717096b54aa14ccbb271045ba04629e21cbf348f2f2dc94f69b4/pyproj-3.7.0-cp313-cp313-win_amd64.whl", hash = "sha256:10a8dc6ec61af97c89ff032647d743f8dc023645773da42ef43f7ae1125b3509", size = 6218036 }, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892 }, +] + +[[package]] +name = "python-json-logger" +version = "3.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e3/c4/358cd13daa1d912ef795010897a483ab2f0b41c9ea1b35235a8b2f7d15a7/python_json_logger-3.2.1.tar.gz", hash = "sha256:8eb0554ea17cb75b05d2848bc14fb02fbdbd9d6972120781b974380bfa162008", size = 16287 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4b/72/2f30cf26664fcfa0bd8ec5ee62ec90c03bd485e4a294d92aabc76c5203a5/python_json_logger-3.2.1-py3-none-any.whl", hash = "sha256:cdc17047eb5374bd311e748b42f99d71223f3b0e186f4206cc5d52aefe85b090", size = 14924 }, +] + +[[package]] +name = "pytz" +version = "2024.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3a/31/3c70bf7603cc2dca0f19bdc53b4537a797747a58875b552c8c413d963a3f/pytz-2024.2.tar.gz", hash = "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a", size = 319692 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/11/c3/005fcca25ce078d2cc29fd559379817424e94885510568bc1bc53d7d5846/pytz-2024.2-py2.py3-none-any.whl", hash = "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725", size = 508002 }, +] + +[[package]] +name = "pywin32" +version = "308" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/e2/02652007469263fe1466e98439831d65d4ca80ea1a2df29abecedf7e47b7/pywin32-308-cp311-cp311-win32.whl", hash = "sha256:5d8c8015b24a7d6855b1550d8e660d8daa09983c80e5daf89a273e5c6fb5095a", size = 5928156 }, + { url = "https://files.pythonhosted.org/packages/48/ef/f4fb45e2196bc7ffe09cad0542d9aff66b0e33f6c0954b43e49c33cad7bd/pywin32-308-cp311-cp311-win_amd64.whl", hash = "sha256:575621b90f0dc2695fec346b2d6302faebd4f0f45c05ea29404cefe35d89442b", size = 6559559 }, + { url = "https://files.pythonhosted.org/packages/79/ef/68bb6aa865c5c9b11a35771329e95917b5559845bd75b65549407f9fc6b4/pywin32-308-cp311-cp311-win_arm64.whl", hash = "sha256:100a5442b7332070983c4cd03f2e906a5648a5104b8a7f50175f7906efd16bb6", size = 7972495 }, + { url = "https://files.pythonhosted.org/packages/00/7c/d00d6bdd96de4344e06c4afbf218bc86b54436a94c01c71a8701f613aa56/pywin32-308-cp312-cp312-win32.whl", hash = "sha256:587f3e19696f4bf96fde9d8a57cec74a57021ad5f204c9e627e15c33ff568897", size = 5939729 }, + { url = "https://files.pythonhosted.org/packages/21/27/0c8811fbc3ca188f93b5354e7c286eb91f80a53afa4e11007ef661afa746/pywin32-308-cp312-cp312-win_amd64.whl", hash = "sha256:00b3e11ef09ede56c6a43c71f2d31857cf7c54b0ab6e78ac659497abd2834f47", size = 6543015 }, + { url = "https://files.pythonhosted.org/packages/9d/0f/d40f8373608caed2255781a3ad9a51d03a594a1248cd632d6a298daca693/pywin32-308-cp312-cp312-win_arm64.whl", hash = "sha256:9b4de86c8d909aed15b7011182c8cab38c8850de36e6afb1f0db22b8959e3091", size = 7976033 }, + { url = "https://files.pythonhosted.org/packages/a9/a4/aa562d8935e3df5e49c161b427a3a2efad2ed4e9cf81c3de636f1fdddfd0/pywin32-308-cp313-cp313-win32.whl", hash = "sha256:1c44539a37a5b7b21d02ab34e6a4d314e0788f1690d65b48e9b0b89f31abbbed", size = 5938579 }, + { url = "https://files.pythonhosted.org/packages/c7/50/b0efb8bb66210da67a53ab95fd7a98826a97ee21f1d22949863e6d588b22/pywin32-308-cp313-cp313-win_amd64.whl", hash = "sha256:fd380990e792eaf6827fcb7e187b2b4b1cede0585e3d0c9e84201ec27b9905e4", size = 6542056 }, + { url = "https://files.pythonhosted.org/packages/26/df/2b63e3e4f2df0224f8aaf6d131f54fe4e8c96400eb9df563e2aae2e1a1f9/pywin32-308-cp313-cp313-win_arm64.whl", hash = "sha256:ef313c46d4c18dfb82a2431e3051ac8f112ccee1a34f29c263c583c568db63cd", size = 7974986 }, +] + +[[package]] +name = "pywinpty" +version = "2.0.14" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f1/82/90f8750423cba4b9b6c842df227609fb60704482d7abf6dd47e2babc055a/pywinpty-2.0.14.tar.gz", hash = "sha256:18bd9529e4a5daf2d9719aa17788ba6013e594ae94c5a0c27e83df3278b0660e", size = 27769 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/be/e2/af1a99c0432e4e58c9ac8e334ee191790ec9793d33559189b9d2069bdc1d/pywinpty-2.0.14-cp311-none-win_amd64.whl", hash = "sha256:cf2a43ac7065b3e0dc8510f8c1f13a75fb8fde805efa3b8cff7599a1ef497bc7", size = 1397223 }, + { url = "https://files.pythonhosted.org/packages/ad/79/759ae767a3b78d340446efd54dd1fe4f7dafa4fc7be96ed757e44bcdba54/pywinpty-2.0.14-cp312-none-win_amd64.whl", hash = "sha256:55dad362ef3e9408ade68fd173e4f9032b3ce08f68cfe7eacb2c263ea1179737", size = 1397207 }, + { url = "https://files.pythonhosted.org/packages/7d/34/b77b3c209bf2eaa6455390c8d5449241637f5957f41636a2204065d52bfa/pywinpty-2.0.14-cp313-none-win_amd64.whl", hash = "sha256:074fb988a56ec79ca90ed03a896d40707131897cefb8f76f926e3834227f2819", size = 1396698 }, +] + +[[package]] +name = "pyyaml" +version = "6.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f8/aa/7af4e81f7acba21a4c6be026da38fd2b872ca46226673c89a758ebdc4fd2/PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774", size = 184612 }, + { url = "https://files.pythonhosted.org/packages/8b/62/b9faa998fd185f65c1371643678e4d58254add437edb764a08c5a98fb986/PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee", size = 172040 }, + { url = "https://files.pythonhosted.org/packages/ad/0c/c804f5f922a9a6563bab712d8dcc70251e8af811fce4524d57c2c0fd49a4/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c", size = 736829 }, + { url = "https://files.pythonhosted.org/packages/51/16/6af8d6a6b210c8e54f1406a6b9481febf9c64a3109c541567e35a49aa2e7/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317", size = 764167 }, + { url = "https://files.pythonhosted.org/packages/75/e4/2c27590dfc9992f73aabbeb9241ae20220bd9452df27483b6e56d3975cc5/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85", size = 762952 }, + { url = "https://files.pythonhosted.org/packages/9b/97/ecc1abf4a823f5ac61941a9c00fe501b02ac3ab0e373c3857f7d4b83e2b6/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4", size = 735301 }, + { url = "https://files.pythonhosted.org/packages/45/73/0f49dacd6e82c9430e46f4a027baa4ca205e8b0a9dce1397f44edc23559d/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e", size = 756638 }, + { url = "https://files.pythonhosted.org/packages/22/5f/956f0f9fc65223a58fbc14459bf34b4cc48dec52e00535c79b8db361aabd/PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5", size = 143850 }, + { url = "https://files.pythonhosted.org/packages/ed/23/8da0bbe2ab9dcdd11f4f4557ccaf95c10b9811b13ecced089d43ce59c3c8/PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44", size = 161980 }, + { url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873 }, + { url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302 }, + { url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154 }, + { url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223 }, + { url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542 }, + { url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164 }, + { url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611 }, + { url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591 }, + { url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338 }, + { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309 }, + { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679 }, + { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428 }, + { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361 }, + { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523 }, + { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660 }, + { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597 }, + { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527 }, + { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446 }, +] + +[[package]] +name = "pyzmq" +version = "26.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "implementation_name == 'pypy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fd/05/bed626b9f7bb2322cdbbf7b4bd8f54b1b617b0d2ab2d3547d6e39428a48e/pyzmq-26.2.0.tar.gz", hash = "sha256:070672c258581c8e4f640b5159297580a9974b026043bd4ab0470be9ed324f1f", size = 271975 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/12/20/de7442172f77f7c96299a0ac70e7d4fb78cd51eca67aa2cf552b66c14196/pyzmq-26.2.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:8f7e66c7113c684c2b3f1c83cdd3376103ee0ce4c49ff80a648643e57fb22218", size = 1340639 }, + { url = "https://files.pythonhosted.org/packages/98/4d/5000468bd64c7910190ed0a6c76a1ca59a68189ec1f007c451dc181a22f4/pyzmq-26.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3a495b30fc91db2db25120df5847d9833af237546fd59170701acd816ccc01c4", size = 1008710 }, + { url = "https://files.pythonhosted.org/packages/e1/bf/c67fd638c2f9fbbab8090a3ee779370b97c82b84cc12d0c498b285d7b2c0/pyzmq-26.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77eb0968da535cba0470a5165468b2cac7772cfb569977cff92e240f57e31bef", size = 673129 }, + { url = "https://files.pythonhosted.org/packages/86/94/99085a3f492aa538161cbf27246e8886ff850e113e0c294a5b8245f13b52/pyzmq-26.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ace4f71f1900a548f48407fc9be59c6ba9d9aaf658c2eea6cf2779e72f9f317", size = 910107 }, + { url = "https://files.pythonhosted.org/packages/31/1d/346809e8a9b999646d03f21096428453465b1bca5cd5c64ecd048d9ecb01/pyzmq-26.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:92a78853d7280bffb93df0a4a6a2498cba10ee793cc8076ef797ef2f74d107cf", size = 867960 }, + { url = "https://files.pythonhosted.org/packages/ab/68/6fb6ae5551846ad5beca295b7bca32bf0a7ce19f135cb30e55fa2314e6b6/pyzmq-26.2.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:689c5d781014956a4a6de61d74ba97b23547e431e9e7d64f27d4922ba96e9d6e", size = 869204 }, + { url = "https://files.pythonhosted.org/packages/0f/f9/18417771dee223ccf0f48e29adf8b4e25ba6d0e8285e33bcbce078070bc3/pyzmq-26.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0aca98bc423eb7d153214b2df397c6421ba6373d3397b26c057af3c904452e37", size = 1203351 }, + { url = "https://files.pythonhosted.org/packages/e0/46/f13e67fe0d4f8a2315782cbad50493de6203ea0d744610faf4d5f5b16e90/pyzmq-26.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:1f3496d76b89d9429a656293744ceca4d2ac2a10ae59b84c1da9b5165f429ad3", size = 1514204 }, + { url = "https://files.pythonhosted.org/packages/50/11/ddcf7343b7b7a226e0fc7b68cbf5a5bb56291fac07f5c3023bb4c319ebb4/pyzmq-26.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5c2b3bfd4b9689919db068ac6c9911f3fcb231c39f7dd30e3138be94896d18e6", size = 1414339 }, + { url = "https://files.pythonhosted.org/packages/01/14/1c18d7d5b7be2708f513f37c61bfadfa62161c10624f8733f1c8451b3509/pyzmq-26.2.0-cp311-cp311-win32.whl", hash = "sha256:eac5174677da084abf378739dbf4ad245661635f1600edd1221f150b165343f4", size = 576928 }, + { url = "https://files.pythonhosted.org/packages/3b/1b/0a540edd75a41df14ec416a9a500b9fec66e554aac920d4c58fbd5756776/pyzmq-26.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:5a509df7d0a83a4b178d0f937ef14286659225ef4e8812e05580776c70e155d5", size = 642317 }, + { url = "https://files.pythonhosted.org/packages/98/77/1cbfec0358078a4c5add529d8a70892db1be900980cdb5dd0898b3d6ab9d/pyzmq-26.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:c0e6091b157d48cbe37bd67233318dbb53e1e6327d6fc3bb284afd585d141003", size = 543834 }, + { url = "https://files.pythonhosted.org/packages/28/2f/78a766c8913ad62b28581777ac4ede50c6d9f249d39c2963e279524a1bbe/pyzmq-26.2.0-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:ded0fc7d90fe93ae0b18059930086c51e640cdd3baebdc783a695c77f123dcd9", size = 1343105 }, + { url = "https://files.pythonhosted.org/packages/b7/9c/4b1e2d3d4065be715e007fe063ec7885978fad285f87eae1436e6c3201f4/pyzmq-26.2.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:17bf5a931c7f6618023cdacc7081f3f266aecb68ca692adac015c383a134ca52", size = 1008365 }, + { url = "https://files.pythonhosted.org/packages/4f/ef/5a23ec689ff36d7625b38d121ef15abfc3631a9aecb417baf7a4245e4124/pyzmq-26.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55cf66647e49d4621a7e20c8d13511ef1fe1efbbccf670811864452487007e08", size = 665923 }, + { url = "https://files.pythonhosted.org/packages/ae/61/d436461a47437d63c6302c90724cf0981883ec57ceb6073873f32172d676/pyzmq-26.2.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4661c88db4a9e0f958c8abc2b97472e23061f0bc737f6f6179d7a27024e1faa5", size = 903400 }, + { url = "https://files.pythonhosted.org/packages/47/42/fc6d35ecefe1739a819afaf6f8e686f7f02a4dd241c78972d316f403474c/pyzmq-26.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea7f69de383cb47522c9c208aec6dd17697db7875a4674c4af3f8cfdac0bdeae", size = 860034 }, + { url = "https://files.pythonhosted.org/packages/07/3b/44ea6266a6761e9eefaa37d98fabefa112328808ac41aa87b4bbb668af30/pyzmq-26.2.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:7f98f6dfa8b8ccaf39163ce872bddacca38f6a67289116c8937a02e30bbe9711", size = 860579 }, + { url = "https://files.pythonhosted.org/packages/38/6f/4df2014ab553a6052b0e551b37da55166991510f9e1002c89cab7ce3b3f2/pyzmq-26.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:e3e0210287329272539eea617830a6a28161fbbd8a3271bf4150ae3e58c5d0e6", size = 1196246 }, + { url = "https://files.pythonhosted.org/packages/38/9d/ee240fc0c9fe9817f0c9127a43238a3e28048795483c403cc10720ddef22/pyzmq-26.2.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6b274e0762c33c7471f1a7471d1a2085b1a35eba5cdc48d2ae319f28b6fc4de3", size = 1507441 }, + { url = "https://files.pythonhosted.org/packages/85/4f/01711edaa58d535eac4a26c294c617c9a01f09857c0ce191fd574d06f359/pyzmq-26.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:29c6a4635eef69d68a00321e12a7d2559fe2dfccfa8efae3ffb8e91cd0b36a8b", size = 1406498 }, + { url = "https://files.pythonhosted.org/packages/07/18/907134c85c7152f679ed744e73e645b365f3ad571f38bdb62e36f347699a/pyzmq-26.2.0-cp312-cp312-win32.whl", hash = "sha256:989d842dc06dc59feea09e58c74ca3e1678c812a4a8a2a419046d711031f69c7", size = 575533 }, + { url = "https://files.pythonhosted.org/packages/ce/2c/a6f4a20202a4d3c582ad93f95ee78d79bbdc26803495aec2912b17dbbb6c/pyzmq-26.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:2a50625acdc7801bc6f74698c5c583a491c61d73c6b7ea4dee3901bb99adb27a", size = 637768 }, + { url = "https://files.pythonhosted.org/packages/5f/0e/eb16ff731632d30554bf5af4dbba3ffcd04518219d82028aea4ae1b02ca5/pyzmq-26.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:4d29ab8592b6ad12ebbf92ac2ed2bedcfd1cec192d8e559e2e099f648570e19b", size = 540675 }, + { url = "https://files.pythonhosted.org/packages/04/a7/0f7e2f6c126fe6e62dbae0bc93b1bd3f1099cf7fea47a5468defebe3f39d/pyzmq-26.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9dd8cd1aeb00775f527ec60022004d030ddc51d783d056e3e23e74e623e33726", size = 1006564 }, + { url = "https://files.pythonhosted.org/packages/31/b6/a187165c852c5d49f826a690857684333a6a4a065af0a6015572d2284f6a/pyzmq-26.2.0-cp313-cp313-macosx_10_15_universal2.whl", hash = "sha256:28c812d9757fe8acecc910c9ac9dafd2ce968c00f9e619db09e9f8f54c3a68a3", size = 1340447 }, + { url = "https://files.pythonhosted.org/packages/68/ba/f4280c58ff71f321602a6e24fd19879b7e79793fb8ab14027027c0fb58ef/pyzmq-26.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d80b1dd99c1942f74ed608ddb38b181b87476c6a966a88a950c7dee118fdf50", size = 665485 }, + { url = "https://files.pythonhosted.org/packages/77/b5/c987a5c53c7d8704216f29fc3d810b32f156bcea488a940e330e1bcbb88d/pyzmq-26.2.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c997098cc65e3208eca09303630e84d42718620e83b733d0fd69543a9cab9cb", size = 903484 }, + { url = "https://files.pythonhosted.org/packages/29/c9/07da157d2db18c72a7eccef8e684cefc155b712a88e3d479d930aa9eceba/pyzmq-26.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ad1bc8d1b7a18497dda9600b12dc193c577beb391beae5cd2349184db40f187", size = 859981 }, + { url = "https://files.pythonhosted.org/packages/43/09/e12501bd0b8394b7d02c41efd35c537a1988da67fc9c745cae9c6c776d31/pyzmq-26.2.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:bea2acdd8ea4275e1278350ced63da0b166421928276c7c8e3f9729d7402a57b", size = 860334 }, + { url = "https://files.pythonhosted.org/packages/eb/ff/f5ec1d455f8f7385cc0a8b2acd8c807d7fade875c14c44b85c1bddabae21/pyzmq-26.2.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:23f4aad749d13698f3f7b64aad34f5fc02d6f20f05999eebc96b89b01262fb18", size = 1196179 }, + { url = "https://files.pythonhosted.org/packages/ec/8a/bb2ac43295b1950fe436a81fc5b298be0b96ac76fb029b514d3ed58f7b27/pyzmq-26.2.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:a4f96f0d88accc3dbe4a9025f785ba830f968e21e3e2c6321ccdfc9aef755115", size = 1507668 }, + { url = "https://files.pythonhosted.org/packages/a9/49/dbc284ebcfd2dca23f6349227ff1616a7ee2c4a35fe0a5d6c3deff2b4fed/pyzmq-26.2.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ced65e5a985398827cc9276b93ef6dfabe0273c23de8c7931339d7e141c2818e", size = 1406539 }, + { url = "https://files.pythonhosted.org/packages/00/68/093cdce3fe31e30a341d8e52a1ad86392e13c57970d722c1f62a1d1a54b6/pyzmq-26.2.0-cp313-cp313-win32.whl", hash = "sha256:31507f7b47cc1ead1f6e86927f8ebb196a0bab043f6345ce070f412a59bf87b5", size = 575567 }, + { url = "https://files.pythonhosted.org/packages/92/ae/6cc4657148143412b5819b05e362ae7dd09fb9fe76e2a539dcff3d0386bc/pyzmq-26.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:70fc7fcf0410d16ebdda9b26cbd8bf8d803d220a7f3522e060a69a9c87bf7bad", size = 637551 }, + { url = "https://files.pythonhosted.org/packages/6c/67/fbff102e201688f97c8092e4c3445d1c1068c2f27bbd45a578df97ed5f94/pyzmq-26.2.0-cp313-cp313-win_arm64.whl", hash = "sha256:c3789bd5768ab5618ebf09cef6ec2b35fed88709b104351748a63045f0ff9797", size = 540378 }, + { url = "https://files.pythonhosted.org/packages/3f/fe/2d998380b6e0122c6c4bdf9b6caf490831e5f5e2d08a203b5adff060c226/pyzmq-26.2.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:034da5fc55d9f8da09015d368f519478a52675e558c989bfcb5cf6d4e16a7d2a", size = 1007378 }, + { url = "https://files.pythonhosted.org/packages/4a/f4/30d6e7157f12b3a0390bde94d6a8567cdb88846ed068a6e17238a4ccf600/pyzmq-26.2.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:c92d73464b886931308ccc45b2744e5968cbaade0b1d6aeb40d8ab537765f5bc", size = 1329532 }, + { url = "https://files.pythonhosted.org/packages/82/86/3fe917870e15ee1c3ad48229a2a64458e36036e64b4afa9659045d82bfa8/pyzmq-26.2.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:794a4562dcb374f7dbbfb3f51d28fb40123b5a2abadee7b4091f93054909add5", size = 653242 }, + { url = "https://files.pythonhosted.org/packages/50/2d/242e7e6ef6c8c19e6cb52d095834508cd581ffb925699fd3c640cdc758f1/pyzmq-26.2.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aee22939bb6075e7afededabad1a56a905da0b3c4e3e0c45e75810ebe3a52672", size = 888404 }, + { url = "https://files.pythonhosted.org/packages/ac/11/7270566e1f31e4ea73c81ec821a4b1688fd551009a3d2bab11ec66cb1e8f/pyzmq-26.2.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ae90ff9dad33a1cfe947d2c40cb9cb5e600d759ac4f0fd22616ce6540f72797", size = 845858 }, + { url = "https://files.pythonhosted.org/packages/91/d5/72b38fbc69867795c8711bdd735312f9fef1e3d9204e2f63ab57085434b9/pyzmq-26.2.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:43a47408ac52647dfabbc66a25b05b6a61700b5165807e3fbd40063fcaf46386", size = 847375 }, + { url = "https://files.pythonhosted.org/packages/dd/9a/10ed3c7f72b4c24e719c59359fbadd1a27556a28b36cdf1cd9e4fb7845d5/pyzmq-26.2.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:25bf2374a2a8433633c65ccb9553350d5e17e60c8eb4de4d92cc6bd60f01d306", size = 1183489 }, + { url = "https://files.pythonhosted.org/packages/72/2d/8660892543fabf1fe41861efa222455811adac9f3c0818d6c3170a1153e3/pyzmq-26.2.0-cp313-cp313t-musllinux_1_1_i686.whl", hash = "sha256:007137c9ac9ad5ea21e6ad97d3489af654381324d5d3ba614c323f60dab8fae6", size = 1492932 }, + { url = "https://files.pythonhosted.org/packages/7b/d6/32fd69744afb53995619bc5effa2a405ae0d343cd3e747d0fbc43fe894ee/pyzmq-26.2.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:470d4a4f6d48fb34e92d768b4e8a5cc3780db0d69107abf1cd7ff734b9766eb0", size = 1392485 }, +] + +[[package]] +name = "referencing" +version = "0.36.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "rpds-py" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2f/db/98b5c277be99dd18bfd91dd04e1b759cad18d1a338188c936e92f921c7e2/referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa", size = 74744 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0", size = 26775 }, +] + +[[package]] +name = "requests" +version = "2.32.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/63/70/2bf7780ad2d390a8d301ad0b550f1581eadbd9a20f896afe06353c2a2913/requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", size = 131218 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", size = 64928 }, +] + +[[package]] +name = "rfc3339-validator" +version = "0.1.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/28/ea/a9387748e2d111c3c2b275ba970b735e04e15cdb1eb30693b6b5708c4dbd/rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b", size = 5513 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa", size = 3490 }, +] + +[[package]] +name = "rfc3986-validator" +version = "0.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/da/88/f270de456dd7d11dcc808abfa291ecdd3f45ff44e3b549ffa01b126464d0/rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055", size = 6760 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/51/17023c0f8f1869d8806b979a2bffa3f861f26a3f1a66b094288323fba52f/rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9", size = 4242 }, +] + +[[package]] +name = "rpds-py" +version = "0.22.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/01/80/cce854d0921ff2f0a9fa831ba3ad3c65cee3a46711addf39a2af52df2cfd/rpds_py-0.22.3.tar.gz", hash = "sha256:e32fee8ab45d3c2db6da19a5323bc3362237c8b653c70194414b892fd06a080d", size = 26771 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/15/ad/8d1ddf78f2805a71253fcd388017e7b4a0615c22c762b6d35301fef20106/rpds_py-0.22.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d20cfb4e099748ea39e6f7b16c91ab057989712d31761d3300d43134e26e165f", size = 359773 }, + { url = "https://files.pythonhosted.org/packages/c8/75/68c15732293a8485d79fe4ebe9045525502a067865fa4278f178851b2d87/rpds_py-0.22.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:68049202f67380ff9aa52f12e92b1c30115f32e6895cd7198fa2a7961621fc5a", size = 349214 }, + { url = "https://files.pythonhosted.org/packages/3c/4c/7ce50f3070083c2e1b2bbd0fb7046f3da55f510d19e283222f8f33d7d5f4/rpds_py-0.22.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb4f868f712b2dd4bcc538b0a0c1f63a2b1d584c925e69a224d759e7070a12d5", size = 380477 }, + { url = "https://files.pythonhosted.org/packages/9a/e9/835196a69cb229d5c31c13b8ae603bd2da9a6695f35fe4270d398e1db44c/rpds_py-0.22.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bc51abd01f08117283c5ebf64844a35144a0843ff7b2983e0648e4d3d9f10dbb", size = 386171 }, + { url = "https://files.pythonhosted.org/packages/f9/8e/33fc4eba6683db71e91e6d594a2cf3a8fbceb5316629f0477f7ece5e3f75/rpds_py-0.22.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0f3cec041684de9a4684b1572fe28c7267410e02450f4561700ca5a3bc6695a2", size = 422676 }, + { url = "https://files.pythonhosted.org/packages/37/47/2e82d58f8046a98bb9497a8319604c92b827b94d558df30877c4b3c6ccb3/rpds_py-0.22.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7ef9d9da710be50ff6809fed8f1963fecdfecc8b86656cadfca3bc24289414b0", size = 446152 }, + { url = "https://files.pythonhosted.org/packages/e1/78/79c128c3e71abbc8e9739ac27af11dc0f91840a86fce67ff83c65d1ba195/rpds_py-0.22.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59f4a79c19232a5774aee369a0c296712ad0e77f24e62cad53160312b1c1eaa1", size = 381300 }, + { url = "https://files.pythonhosted.org/packages/c9/5b/2e193be0e8b228c1207f31fa3ea79de64dadb4f6a4833111af8145a6bc33/rpds_py-0.22.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a60bce91f81ddaac922a40bbb571a12c1070cb20ebd6d49c48e0b101d87300d", size = 409636 }, + { url = "https://files.pythonhosted.org/packages/c2/3f/687c7100b762d62186a1c1100ffdf99825f6fa5ea94556844bbbd2d0f3a9/rpds_py-0.22.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e89391e6d60251560f0a8f4bd32137b077a80d9b7dbe6d5cab1cd80d2746f648", size = 556708 }, + { url = "https://files.pythonhosted.org/packages/8c/a2/c00cbc4b857e8b3d5e7f7fc4c81e23afd8c138b930f4f3ccf9a41a23e9e4/rpds_py-0.22.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e3fb866d9932a3d7d0c82da76d816996d1667c44891bd861a0f97ba27e84fc74", size = 583554 }, + { url = "https://files.pythonhosted.org/packages/d0/08/696c9872cf56effdad9ed617ac072f6774a898d46b8b8964eab39ec562d2/rpds_py-0.22.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1352ae4f7c717ae8cba93421a63373e582d19d55d2ee2cbb184344c82d2ae55a", size = 552105 }, + { url = "https://files.pythonhosted.org/packages/18/1f/4df560be1e994f5adf56cabd6c117e02de7c88ee238bb4ce03ed50da9d56/rpds_py-0.22.3-cp311-cp311-win32.whl", hash = "sha256:b0b4136a252cadfa1adb705bb81524eee47d9f6aab4f2ee4fa1e9d3cd4581f64", size = 220199 }, + { url = "https://files.pythonhosted.org/packages/b8/1b/c29b570bc5db8237553002788dc734d6bd71443a2ceac2a58202ec06ef12/rpds_py-0.22.3-cp311-cp311-win_amd64.whl", hash = "sha256:8bd7c8cfc0b8247c8799080fbff54e0b9619e17cdfeb0478ba7295d43f635d7c", size = 231775 }, + { url = "https://files.pythonhosted.org/packages/75/47/3383ee3bd787a2a5e65a9b9edc37ccf8505c0a00170e3a5e6ea5fbcd97f7/rpds_py-0.22.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:27e98004595899949bd7a7b34e91fa7c44d7a97c40fcaf1d874168bb652ec67e", size = 352334 }, + { url = "https://files.pythonhosted.org/packages/40/14/aa6400fa8158b90a5a250a77f2077c0d0cd8a76fce31d9f2b289f04c6dec/rpds_py-0.22.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1978d0021e943aae58b9b0b196fb4895a25cc53d3956b8e35e0b7682eefb6d56", size = 342111 }, + { url = "https://files.pythonhosted.org/packages/7d/06/395a13bfaa8a28b302fb433fb285a67ce0ea2004959a027aea8f9c52bad4/rpds_py-0.22.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:655ca44a831ecb238d124e0402d98f6212ac527a0ba6c55ca26f616604e60a45", size = 384286 }, + { url = "https://files.pythonhosted.org/packages/43/52/d8eeaffab047e6b7b7ef7f00d5ead074a07973968ffa2d5820fa131d7852/rpds_py-0.22.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:feea821ee2a9273771bae61194004ee2fc33f8ec7db08117ef9147d4bbcbca8e", size = 391739 }, + { url = "https://files.pythonhosted.org/packages/83/31/52dc4bde85c60b63719610ed6f6d61877effdb5113a72007679b786377b8/rpds_py-0.22.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22bebe05a9ffc70ebfa127efbc429bc26ec9e9b4ee4d15a740033efda515cf3d", size = 427306 }, + { url = "https://files.pythonhosted.org/packages/70/d5/1bab8e389c2261dba1764e9e793ed6830a63f830fdbec581a242c7c46bda/rpds_py-0.22.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3af6e48651c4e0d2d166dc1b033b7042ea3f871504b6805ba5f4fe31581d8d38", size = 442717 }, + { url = "https://files.pythonhosted.org/packages/82/a1/a45f3e30835b553379b3a56ea6c4eb622cf11e72008229af840e4596a8ea/rpds_py-0.22.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e67ba3c290821343c192f7eae1d8fd5999ca2dc99994114643e2f2d3e6138b15", size = 385721 }, + { url = "https://files.pythonhosted.org/packages/a6/27/780c942de3120bdd4d0e69583f9c96e179dfff082f6ecbb46b8d6488841f/rpds_py-0.22.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:02fbb9c288ae08bcb34fb41d516d5eeb0455ac35b5512d03181d755d80810059", size = 415824 }, + { url = "https://files.pythonhosted.org/packages/94/0b/aa0542ca88ad20ea719b06520f925bae348ea5c1fdf201b7e7202d20871d/rpds_py-0.22.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f56a6b404f74ab372da986d240e2e002769a7d7102cc73eb238a4f72eec5284e", size = 561227 }, + { url = "https://files.pythonhosted.org/packages/0d/92/3ed77d215f82c8f844d7f98929d56cc321bb0bcfaf8f166559b8ec56e5f1/rpds_py-0.22.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0a0461200769ab3b9ab7e513f6013b7a97fdeee41c29b9db343f3c5a8e2b9e61", size = 587424 }, + { url = "https://files.pythonhosted.org/packages/09/42/cacaeb047a22cab6241f107644f230e2935d4efecf6488859a7dd82fc47d/rpds_py-0.22.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8633e471c6207a039eff6aa116e35f69f3156b3989ea3e2d755f7bc41754a4a7", size = 555953 }, + { url = "https://files.pythonhosted.org/packages/e6/52/c921dc6d5f5d45b212a456c1f5b17df1a471127e8037eb0972379e39dff4/rpds_py-0.22.3-cp312-cp312-win32.whl", hash = "sha256:593eba61ba0c3baae5bc9be2f5232430453fb4432048de28399ca7376de9c627", size = 221339 }, + { url = "https://files.pythonhosted.org/packages/f2/c7/f82b5be1e8456600395366f86104d1bd8d0faed3802ad511ef6d60c30d98/rpds_py-0.22.3-cp312-cp312-win_amd64.whl", hash = "sha256:d115bffdd417c6d806ea9069237a4ae02f513b778e3789a359bc5856e0404cc4", size = 235786 }, + { url = "https://files.pythonhosted.org/packages/d0/bf/36d5cc1f2c609ae6e8bf0fc35949355ca9d8790eceb66e6385680c951e60/rpds_py-0.22.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:ea7433ce7e4bfc3a85654aeb6747babe3f66eaf9a1d0c1e7a4435bbdf27fea84", size = 351657 }, + { url = "https://files.pythonhosted.org/packages/24/2a/f1e0fa124e300c26ea9382e59b2d582cba71cedd340f32d1447f4f29fa4e/rpds_py-0.22.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6dd9412824c4ce1aca56c47b0991e65bebb7ac3f4edccfd3f156150c96a7bf25", size = 341829 }, + { url = "https://files.pythonhosted.org/packages/cf/c2/0da1231dd16953845bed60d1a586fcd6b15ceaeb965f4d35cdc71f70f606/rpds_py-0.22.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20070c65396f7373f5df4005862fa162db5d25d56150bddd0b3e8214e8ef45b4", size = 384220 }, + { url = "https://files.pythonhosted.org/packages/c7/73/a4407f4e3a00a9d4b68c532bf2d873d6b562854a8eaff8faa6133b3588ec/rpds_py-0.22.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0b09865a9abc0ddff4e50b5ef65467cd94176bf1e0004184eb915cbc10fc05c5", size = 391009 }, + { url = "https://files.pythonhosted.org/packages/a9/c3/04b7353477ab360fe2563f5f0b176d2105982f97cd9ae80a9c5a18f1ae0f/rpds_py-0.22.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3453e8d41fe5f17d1f8e9c383a7473cd46a63661628ec58e07777c2fff7196dc", size = 426989 }, + { url = "https://files.pythonhosted.org/packages/8d/e6/e4b85b722bcf11398e17d59c0f6049d19cd606d35363221951e6d625fcb0/rpds_py-0.22.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f5d36399a1b96e1a5fdc91e0522544580dbebeb1f77f27b2b0ab25559e103b8b", size = 441544 }, + { url = "https://files.pythonhosted.org/packages/27/fc/403e65e56f65fff25f2973216974976d3f0a5c3f30e53758589b6dc9b79b/rpds_py-0.22.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:009de23c9c9ee54bf11303a966edf4d9087cd43a6003672e6aa7def643d06518", size = 385179 }, + { url = "https://files.pythonhosted.org/packages/57/9b/2be9ff9700d664d51fd96b33d6595791c496d2778cb0b2a634f048437a55/rpds_py-0.22.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1aef18820ef3e4587ebe8b3bc9ba6e55892a6d7b93bac6d29d9f631a3b4befbd", size = 415103 }, + { url = "https://files.pythonhosted.org/packages/bb/a5/03c2ad8ca10994fcf22dd2150dd1d653bc974fa82d9a590494c84c10c641/rpds_py-0.22.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f60bd8423be1d9d833f230fdbccf8f57af322d96bcad6599e5a771b151398eb2", size = 560916 }, + { url = "https://files.pythonhosted.org/packages/ba/2e/be4fdfc8b5b576e588782b56978c5b702c5a2307024120d8aeec1ab818f0/rpds_py-0.22.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:62d9cfcf4948683a18a9aff0ab7e1474d407b7bab2ca03116109f8464698ab16", size = 587062 }, + { url = "https://files.pythonhosted.org/packages/67/e0/2034c221937709bf9c542603d25ad43a68b4b0a9a0c0b06a742f2756eb66/rpds_py-0.22.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9253fc214112405f0afa7db88739294295f0e08466987f1d70e29930262b4c8f", size = 555734 }, + { url = "https://files.pythonhosted.org/packages/ea/ce/240bae07b5401a22482b58e18cfbabaa392409b2797da60223cca10d7367/rpds_py-0.22.3-cp313-cp313-win32.whl", hash = "sha256:fb0ba113b4983beac1a2eb16faffd76cb41e176bf58c4afe3e14b9c681f702de", size = 220663 }, + { url = "https://files.pythonhosted.org/packages/cb/f0/d330d08f51126330467edae2fa4efa5cec8923c87551a79299380fdea30d/rpds_py-0.22.3-cp313-cp313-win_amd64.whl", hash = "sha256:c58e2339def52ef6b71b8f36d13c3688ea23fa093353f3a4fee2556e62086ec9", size = 235503 }, + { url = "https://files.pythonhosted.org/packages/f7/c4/dbe1cc03df013bf2feb5ad00615038050e7859f381e96fb5b7b4572cd814/rpds_py-0.22.3-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:f82a116a1d03628a8ace4859556fb39fd1424c933341a08ea3ed6de1edb0283b", size = 347698 }, + { url = "https://files.pythonhosted.org/packages/a4/3a/684f66dd6b0f37499cad24cd1c0e523541fd768576fa5ce2d0a8799c3cba/rpds_py-0.22.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3dfcbc95bd7992b16f3f7ba05af8a64ca694331bd24f9157b49dadeeb287493b", size = 337330 }, + { url = "https://files.pythonhosted.org/packages/82/eb/e022c08c2ce2e8f7683baa313476492c0e2c1ca97227fe8a75d9f0181e95/rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59259dc58e57b10e7e18ce02c311804c10c5a793e6568f8af4dead03264584d1", size = 380022 }, + { url = "https://files.pythonhosted.org/packages/e4/21/5a80e653e4c86aeb28eb4fea4add1f72e1787a3299687a9187105c3ee966/rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5725dd9cc02068996d4438d397e255dcb1df776b7ceea3b9cb972bdb11260a83", size = 390754 }, + { url = "https://files.pythonhosted.org/packages/37/a4/d320a04ae90f72d080b3d74597074e62be0a8ecad7d7321312dfe2dc5a6a/rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99b37292234e61325e7a5bb9689e55e48c3f5f603af88b1642666277a81f1fbd", size = 423840 }, + { url = "https://files.pythonhosted.org/packages/87/70/674dc47d93db30a6624279284e5631be4c3a12a0340e8e4f349153546728/rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:27b1d3b3915a99208fee9ab092b8184c420f2905b7d7feb4aeb5e4a9c509b8a1", size = 438970 }, + { url = "https://files.pythonhosted.org/packages/3f/64/9500f4d66601d55cadd21e90784cfd5d5f4560e129d72e4339823129171c/rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f612463ac081803f243ff13cccc648578e2279295048f2a8d5eb430af2bae6e3", size = 383146 }, + { url = "https://files.pythonhosted.org/packages/4d/45/630327addb1d17173adcf4af01336fd0ee030c04798027dfcb50106001e0/rpds_py-0.22.3-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f73d3fef726b3243a811121de45193c0ca75f6407fe66f3f4e183c983573e130", size = 408294 }, + { url = "https://files.pythonhosted.org/packages/5f/ef/8efb3373cee54ea9d9980b772e5690a0c9e9214045a4e7fa35046e399fee/rpds_py-0.22.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:3f21f0495edea7fdbaaa87e633a8689cd285f8f4af5c869f27bc8074638ad69c", size = 556345 }, + { url = "https://files.pythonhosted.org/packages/54/01/151d3b9ef4925fc8f15bfb131086c12ec3c3d6dd4a4f7589c335bf8e85ba/rpds_py-0.22.3-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:1e9663daaf7a63ceccbbb8e3808fe90415b0757e2abddbfc2e06c857bf8c5e2b", size = 582292 }, + { url = "https://files.pythonhosted.org/packages/30/89/35fc7a6cdf3477d441c7aca5e9bbf5a14e0f25152aed7f63f4e0b141045d/rpds_py-0.22.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a76e42402542b1fae59798fab64432b2d015ab9d0c8c47ba7addddbaf7952333", size = 553855 }, + { url = "https://files.pythonhosted.org/packages/8f/e0/830c02b2457c4bd20a8c5bb394d31d81f57fbefce2dbdd2e31feff4f7003/rpds_py-0.22.3-cp313-cp313t-win32.whl", hash = "sha256:69803198097467ee7282750acb507fba35ca22cc3b85f16cf45fb01cb9097730", size = 219100 }, + { url = "https://files.pythonhosted.org/packages/f8/30/7ac943f69855c2db77407ae363484b915d861702dbba1aa82d68d57f42be/rpds_py-0.22.3-cp313-cp313t-win_amd64.whl", hash = "sha256:f5cf2a0c2bdadf3791b5c205d55a37a54025c6e18a71c71f82bb536cf9a454bf", size = 233794 }, +] + +[[package]] +name = "send2trash" +version = "1.8.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fd/3a/aec9b02217bb79b87bbc1a21bc6abc51e3d5dcf65c30487ac96c0908c722/Send2Trash-1.8.3.tar.gz", hash = "sha256:b18e7a3966d99871aefeb00cfbcfdced55ce4871194810fc71f4aa484b953abf", size = 17394 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/40/b0/4562db6223154aa4e22f939003cb92514c79f3d4dccca3444253fd17f902/Send2Trash-1.8.3-py3-none-any.whl", hash = "sha256:0c31227e0bd08961c7665474a3d1ef7193929fedda4233843689baa056be46c9", size = 18072 }, +] + +[[package]] +name = "setuptools" +version = "75.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/92/ec/089608b791d210aec4e7f97488e67ab0d33add3efccb83a056cbafe3a2a6/setuptools-75.8.0.tar.gz", hash = "sha256:c5afc8f407c626b8313a86e10311dd3f661c6cd9c09d4bf8c15c0e11f9f2b0e6", size = 1343222 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/8a/b9dc7678803429e4a3bc9ba462fa3dd9066824d3c607490235c6a796be5a/setuptools-75.8.0-py3-none-any.whl", hash = "sha256:e3982f444617239225d675215d51f6ba05f845d4eec313da4418fdbb56fb27e3", size = 1228782 }, +] + +[[package]] +name = "shapely" +version = "2.0.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4a/89/0d20bac88016be35ff7d3c0c2ae64b477908f1b1dfa540c5d69ac7af07fe/shapely-2.0.6.tar.gz", hash = "sha256:997f6159b1484059ec239cacaa53467fd8b5564dabe186cd84ac2944663b0bf6", size = 282361 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/37/15/269d8e1f7f658a37e61f7028683c546f520e4e7cedba1e32c77ff9d3a3c7/shapely-2.0.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5aeb0f51a9db176da9a30cb2f4329b6fbd1e26d359012bb0ac3d3c7781667a9e", size = 1449578 }, + { url = "https://files.pythonhosted.org/packages/37/63/e182e43081fffa0a2d970c480f2ef91647a6ab94098f61748c23c2a485f2/shapely-2.0.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9a7a78b0d51257a367ee115f4d41ca4d46edbd0dd280f697a8092dd3989867b2", size = 1296792 }, + { url = "https://files.pythonhosted.org/packages/6e/5a/d019f69449329dcd517355444fdb9ddd58bec5e080b8bdba007e8e4c546d/shapely-2.0.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f32c23d2f43d54029f986479f7c1f6e09c6b3a19353a3833c2ffb226fb63a855", size = 2443997 }, + { url = "https://files.pythonhosted.org/packages/25/aa/53f145e5a610a49af9ac49f2f1be1ec8659ebd5c393d66ac94e57c83b00e/shapely-2.0.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3dc9fb0eb56498912025f5eb352b5126f04801ed0e8bdbd867d21bdbfd7cbd0", size = 2528334 }, + { url = "https://files.pythonhosted.org/packages/64/64/0c7b0a22b416d36f6296b92bb4219d82b53d0a7c47e16fd0a4c85f2f117c/shapely-2.0.6-cp311-cp311-win32.whl", hash = "sha256:d93b7e0e71c9f095e09454bf18dad5ea716fb6ced5df3cb044564a00723f339d", size = 1294669 }, + { url = "https://files.pythonhosted.org/packages/b1/5a/6a67d929c467a1973b6bb9f0b00159cc343b02bf9a8d26db1abd2f87aa23/shapely-2.0.6-cp311-cp311-win_amd64.whl", hash = "sha256:c02eb6bf4cfb9fe6568502e85bb2647921ee49171bcd2d4116c7b3109724ef9b", size = 1442032 }, + { url = "https://files.pythonhosted.org/packages/46/77/efd9f9d4b6a762f976f8b082f54c9be16f63050389500fb52e4f6cc07c1a/shapely-2.0.6-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cec9193519940e9d1b86a3b4f5af9eb6910197d24af02f247afbfb47bcb3fab0", size = 1450326 }, + { url = "https://files.pythonhosted.org/packages/68/53/5efa6e7a4036a94fe6276cf7bbb298afded51ca3396b03981ad680c8cc7d/shapely-2.0.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:83b94a44ab04a90e88be69e7ddcc6f332da7c0a0ebb1156e1c4f568bbec983c3", size = 1298480 }, + { url = "https://files.pythonhosted.org/packages/88/a2/1be1db4fc262e536465a52d4f19d85834724fedf2299a1b9836bc82fe8fa/shapely-2.0.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:537c4b2716d22c92036d00b34aac9d3775e3691f80c7aa517c2c290351f42cd8", size = 2439311 }, + { url = "https://files.pythonhosted.org/packages/d5/7d/9a57e187cbf2fbbbdfd4044a4f9ce141c8d221f9963750d3b001f0ec080d/shapely-2.0.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98fea108334be345c283ce74bf064fa00cfdd718048a8af7343c59eb40f59726", size = 2524835 }, + { url = "https://files.pythonhosted.org/packages/6d/0a/f407509ab56825f39bf8cfce1fb410238da96cf096809c3e404e5bc71ea1/shapely-2.0.6-cp312-cp312-win32.whl", hash = "sha256:42fd4cd4834747e4990227e4cbafb02242c0cffe9ce7ef9971f53ac52d80d55f", size = 1295613 }, + { url = "https://files.pythonhosted.org/packages/7b/b3/857afd9dfbfc554f10d683ac412eac6fa260d1f4cd2967ecb655c57e831a/shapely-2.0.6-cp312-cp312-win_amd64.whl", hash = "sha256:665990c84aece05efb68a21b3523a6b2057e84a1afbef426ad287f0796ef8a48", size = 1442539 }, + { url = "https://files.pythonhosted.org/packages/34/e8/d164ef5b0eab86088cde06dee8415519ffd5bb0dd1bd9d021e640e64237c/shapely-2.0.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:42805ef90783ce689a4dde2b6b2f261e2c52609226a0438d882e3ced40bb3013", size = 1445344 }, + { url = "https://files.pythonhosted.org/packages/ce/e2/9fba7ac142f7831757a10852bfa465683724eadbc93d2d46f74a16f9af04/shapely-2.0.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6d2cb146191a47bd0cee8ff5f90b47547b82b6345c0d02dd8b25b88b68af62d7", size = 1296182 }, + { url = "https://files.pythonhosted.org/packages/cf/dc/790d4bda27d196cd56ec66975eaae3351c65614cafd0e16ddde39ec9fb92/shapely-2.0.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3fdef0a1794a8fe70dc1f514440aa34426cc0ae98d9a1027fb299d45741c381", size = 2423426 }, + { url = "https://files.pythonhosted.org/packages/af/b0/f8169f77eac7392d41e231911e0095eb1148b4d40c50ea9e34d999c89a7e/shapely-2.0.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c665a0301c645615a107ff7f52adafa2153beab51daf34587170d85e8ba6805", size = 2513249 }, + { url = "https://files.pythonhosted.org/packages/f6/1d/a8c0e9ab49ff2f8e4dedd71b0122eafb22a18ad7e9d256025e1f10c84704/shapely-2.0.6-cp313-cp313-win32.whl", hash = "sha256:0334bd51828f68cd54b87d80b3e7cee93f249d82ae55a0faf3ea21c9be7b323a", size = 1294848 }, + { url = "https://files.pythonhosted.org/packages/23/38/2bc32dd1e7e67a471d4c60971e66df0bdace88656c47a9a728ace0091075/shapely-2.0.6-cp313-cp313-win_amd64.whl", hash = "sha256:d37d070da9e0e0f0a530a621e17c0b8c3c9d04105655132a87cfff8bd77cc4c2", size = 1441371 }, +] + +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050 }, +] + +[[package]] +name = "sniffio" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235 }, +] + +[[package]] +name = "soupsieve" +version = "2.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/ce/fbaeed4f9fb8b2daa961f90591662df6a86c1abf25c548329a86920aedfb/soupsieve-2.6.tar.gz", hash = "sha256:e2e68417777af359ec65daac1057404a3c8a5455bb8abc36f1a9866ab1a51abb", size = 101569 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/c2/fe97d779f3ef3b15f05c94a2f1e3d21732574ed441687474db9d342a7315/soupsieve-2.6-py3-none-any.whl", hash = "sha256:e72c4ff06e4fb6e4b5a9f0f55fe6e81514581fca1515028625d0f299c602ccc9", size = 36186 }, +] + +[[package]] +name = "stack-data" +version = "0.6.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "asttokens" }, + { name = "executing" }, + { name = "pure-eval" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521 }, +] + +[[package]] +name = "terminado" +version = "0.18.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ptyprocess", marker = "os_name != 'nt'" }, + { name = "pywinpty", marker = "os_name == 'nt'" }, + { name = "tornado" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8a/11/965c6fd8e5cc254f1fe142d547387da17a8ebfd75a3455f637c663fb38a0/terminado-0.18.1.tar.gz", hash = "sha256:de09f2c4b85de4765f7714688fff57d3e75bad1f909b589fde880460c753fd2e", size = 32701 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/9e/2064975477fdc887e47ad42157e214526dcad8f317a948dee17e1659a62f/terminado-0.18.1-py3-none-any.whl", hash = "sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0", size = 14154 }, +] + +[[package]] +name = "tinycss2" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "webencodings" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7a/fd/7a5ee21fd08ff70d3d33a5781c255cbe779659bd03278feb98b19ee550f4/tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7", size = 87085 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289", size = 26610 }, +] + +[[package]] +name = "tornado" +version = "6.4.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/59/45/a0daf161f7d6f36c3ea5fc0c2de619746cc3dd4c76402e9db545bd920f63/tornado-6.4.2.tar.gz", hash = "sha256:92bad5b4746e9879fd7bf1eb21dce4e3fc5128d71601f80005afa39237ad620b", size = 501135 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/26/7e/71f604d8cea1b58f82ba3590290b66da1e72d840aeb37e0d5f7291bd30db/tornado-6.4.2-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e828cce1123e9e44ae2a50a9de3055497ab1d0aeb440c5ac23064d9e44880da1", size = 436299 }, + { url = "https://files.pythonhosted.org/packages/96/44/87543a3b99016d0bf54fdaab30d24bf0af2e848f1d13d34a3a5380aabe16/tornado-6.4.2-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:072ce12ada169c5b00b7d92a99ba089447ccc993ea2143c9ede887e0937aa803", size = 434253 }, + { url = "https://files.pythonhosted.org/packages/cb/fb/fdf679b4ce51bcb7210801ef4f11fdac96e9885daa402861751353beea6e/tornado-6.4.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a017d239bd1bb0919f72af256a970624241f070496635784d9bf0db640d3fec", size = 437602 }, + { url = "https://files.pythonhosted.org/packages/4f/3b/e31aeffffc22b475a64dbeb273026a21b5b566f74dee48742817626c47dc/tornado-6.4.2-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c36e62ce8f63409301537222faffcef7dfc5284f27eec227389f2ad11b09d946", size = 436972 }, + { url = "https://files.pythonhosted.org/packages/22/55/b78a464de78051a30599ceb6983b01d8f732e6f69bf37b4ed07f642ac0fc/tornado-6.4.2-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca9eb02196e789c9cb5c3c7c0f04fb447dc2adffd95265b2c7223a8a615ccbf", size = 437173 }, + { url = "https://files.pythonhosted.org/packages/79/5e/be4fb0d1684eb822c9a62fb18a3e44a06188f78aa466b2ad991d2ee31104/tornado-6.4.2-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:304463bd0772442ff4d0f5149c6f1c2135a1fae045adf070821c6cdc76980634", size = 437892 }, + { url = "https://files.pythonhosted.org/packages/f5/33/4f91fdd94ea36e1d796147003b490fe60a0215ac5737b6f9c65e160d4fe0/tornado-6.4.2-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:c82c46813ba483a385ab2a99caeaedf92585a1f90defb5693351fa7e4ea0bf73", size = 437334 }, + { url = "https://files.pythonhosted.org/packages/2b/ae/c1b22d4524b0e10da2f29a176fb2890386f7bd1f63aacf186444873a88a0/tornado-6.4.2-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:932d195ca9015956fa502c6b56af9eb06106140d844a335590c1ec7f5277d10c", size = 437261 }, + { url = "https://files.pythonhosted.org/packages/b5/25/36dbd49ab6d179bcfc4c6c093a51795a4f3bed380543a8242ac3517a1751/tornado-6.4.2-cp38-abi3-win32.whl", hash = "sha256:2876cef82e6c5978fde1e0d5b1f919d756968d5b4282418f3146b79b58556482", size = 438463 }, + { url = "https://files.pythonhosted.org/packages/61/cc/58b1adeb1bb46228442081e746fcdbc4540905c87e8add7c277540934edb/tornado-6.4.2-cp38-abi3-win_amd64.whl", hash = "sha256:908b71bf3ff37d81073356a5fadcc660eb10c1476ee6e2725588626ce7e5ca38", size = 438907 }, +] + +[[package]] +name = "traitlets" +version = "5.14.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359 }, +] + +[[package]] +name = "types-python-dateutil" +version = "2.9.0.20241206" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a9/60/47d92293d9bc521cd2301e423a358abfac0ad409b3a1606d8fbae1321961/types_python_dateutil-2.9.0.20241206.tar.gz", hash = "sha256:18f493414c26ffba692a72369fea7a154c502646301ebfe3d56a04b3767284cb", size = 13802 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0f/b3/ca41df24db5eb99b00d97f89d7674a90cb6b3134c52fb8121b6d8d30f15c/types_python_dateutil-2.9.0.20241206-py3-none-any.whl", hash = "sha256:e248a4bc70a486d3e3ec84d0dc30eec3a5f979d6e7ee4123ae043eedbb987f53", size = 14384 }, +] + +[[package]] +name = "typing-extensions" +version = "4.12.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/df/db/f35a00659bc03fec321ba8bce9420de607a1d37f8342eee1863174c69557/typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8", size = 85321 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", size = 37438 }, +] + +[[package]] +name = "tzdata" +version = "2025.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/0f/fa4723f22942480be4ca9527bbde8d43f6c3f2fe8412f00e7f5f6746bc8b/tzdata-2025.1.tar.gz", hash = "sha256:24894909e88cdb28bd1636c6887801df64cb485bd593f2fd83ef29075a81d694", size = 194950 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0f/dd/84f10e23edd882c6f968c21c2434fe67bd4a528967067515feca9e611e5e/tzdata-2025.1-py2.py3-none-any.whl", hash = "sha256:7e127113816800496f027041c570f50bcd464a020098a3b6b199517772303639", size = 346762 }, +] + +[[package]] +name = "uri-template" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/31/c7/0336f2bd0bcbada6ccef7aaa25e443c118a704f828a0620c6fa0207c1b64/uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7", size = 21678 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363", size = 11140 }, +] + +[[package]] +name = "urllib3" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/63/e53da845320b757bf29ef6a9062f5c669fe997973f966045cb019c3f4b66/urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d", size = 307268 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c8/19/4ec628951a74043532ca2cf5d97b7b14863931476d117c471e8e2b1eb39f/urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df", size = 128369 }, +] + +[[package]] +name = "wcwidth" +version = "0.2.13" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6c/63/53559446a878410fc5a5974feb13d31d78d752eb18aeba59c7fef1af7598/wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5", size = 101301 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", size = 34166 }, +] + +[[package]] +name = "webcolors" +version = "24.11.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7b/29/061ec845fb58521848f3739e466efd8250b4b7b98c1b6c5bf4d40b419b7e/webcolors-24.11.1.tar.gz", hash = "sha256:ecb3d768f32202af770477b8b65f318fa4f566c22948673a977b00d589dd80f6", size = 45064 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/60/e8/c0e05e4684d13459f93d312077a9a2efbe04d59c393bc2b8802248c908d4/webcolors-24.11.1-py3-none-any.whl", hash = "sha256:515291393b4cdf0eb19c155749a096f779f7d909f7cceea072791cb9095b92e9", size = 14934 }, +] + +[[package]] +name = "webencodings" +version = "0.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0b/02/ae6ceac1baeda530866a85075641cec12989bd8d31af6d5ab4a3e8c92f47/webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923", size = 9721 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", size = 11774 }, +] + +[[package]] +name = "websocket-client" +version = "1.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e6/30/fba0d96b4b5fbf5948ed3f4681f7da2f9f64512e1d303f94b4cc174c24a5/websocket_client-1.8.0.tar.gz", hash = "sha256:3239df9f44da632f96012472805d40a23281a991027ce11d2f45a6f24ac4c3da", size = 54648 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl", hash = "sha256:17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526", size = 58826 }, +] + +[[package]] +name = "widgetsnbextension" +version = "4.0.13" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/56/fc/238c424fd7f4ebb25f8b1da9a934a3ad7c848286732ae04263661eb0fc03/widgetsnbextension-4.0.13.tar.gz", hash = "sha256:ffcb67bc9febd10234a362795f643927f4e0c05d9342c727b65d2384f8feacb6", size = 1164730 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/21/02/88b65cc394961a60c43c70517066b6b679738caf78506a5da7b88ffcb643/widgetsnbextension-4.0.13-py3-none-any.whl", hash = "sha256:74b2692e8500525cc38c2b877236ba51d34541e6385eeed5aec15a70f88a6c71", size = 2335872 }, +] From 4c0d399c907e93a60d01c1d08ba644fe1de57c25 Mon Sep 17 00:00:00 2001 From: Joost Gevaert Date: Wed, 29 Jan 2025 20:58:35 +0100 Subject: [PATCH 06/18] Correct "type": "Xform" to "type": "UsdGeom:Xform" --- Geotech/WekaHills_GI.ifcx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Geotech/WekaHills_GI.ifcx b/Geotech/WekaHills_GI.ifcx index b13eab0..f13ea6d 100644 --- a/Geotech/WekaHills_GI.ifcx +++ b/Geotech/WekaHills_GI.ifcx @@ -18,7 +18,7 @@ }, { "def": "def", - "type": "Xform", + "type": "UsdGeom:Xform", "name": "WekaHillsLeapfrogDemo", "inherits": [ "" From f5040e84579e2d9cb5f857647510f9a35627901e Mon Sep 17 00:00:00 2001 From: Joost Gevaert Date: Tue, 4 Feb 2025 12:06:41 +0100 Subject: [PATCH 07/18] Remove Speckle references --- Tunnel/ifc5_tunnel.ipynb | 448 --------------------------------- Tunnel/receive_from_speckle.py | 36 --- 2 files changed, 484 deletions(-) delete mode 100644 Tunnel/ifc5_tunnel.ipynb delete mode 100644 Tunnel/receive_from_speckle.py diff --git a/Tunnel/ifc5_tunnel.ipynb b/Tunnel/ifc5_tunnel.ipynb deleted file mode 100644 index fa8634c..0000000 --- a/Tunnel/ifc5_tunnel.ipynb +++ /dev/null @@ -1,448 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import json\n", - "\n", - "from pyproj import CRS, Transformer\n", - "from specklepy.api.client import SpeckleClient\n", - "from specklepy.core.api import operations\n", - "from specklepy.transports.server import ServerTransport" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Leapfrog Weka Hills Demo Model from Speckle to IFC 5" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "weka_hills_speckle_project_id = \"7a489ac0d4\"\n", - "ifc5_tunnel_dict = {\n", - " \"alignment\": {\"ifc5_ref\": \"N2152bb32e4a045a1ba475c39b312e069\"},\n", - " \"excavation\": {\"ifc5_ref\": \"N59ec758cbae14f2fb4e1c0240a1f79d8\"},\n", - "}" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "c:\\Users\\joost\\ReposWindows\\IFC5-development\\.venv\\Lib\\site-packages\\specklepy\\transports\\server\\server.py:73: SpeckleWarning: Unauthenticated Speckle Client provided to Server Transport for https://app.speckle.systems. Receiving from private streams will fail.\n", - " warn(\n" - ] - } - ], - "source": [ - "speckle_client = SpeckleClient(host=\"app.speckle.systems\")\n", - "transport = ServerTransport(\n", - " stream_id=weka_hills_speckle_project_id, client=speckle_client\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "transport" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "excavation: 9069ef2b2b\n", - "lining: 6bd2a019cb\n", - "alignment: 643ad7861d\n" - ] - } - ], - "source": [ - "weka_hills_speckle_models = speckle_client.model.get_models(\n", - " project_id=weka_hills_speckle_project_id\n", - ")\n", - "\n", - "for model in weka_hills_speckle_models.items:\n", - " if \"tunnel\" in model.name:\n", - " tunnel_model = str(model.name).replace(\"tunnel/\", \"\")\n", - " print(f\"{tunnel_model}: {model.id}\")\n", - " if tunnel_model not in ifc5_tunnel_dict.keys():\n", - " continue\n", - "\n", - " speckle_model = speckle_client.model.get_with_versions(\n", - " model_id=model.id,\n", - " project_id=weka_hills_speckle_project_id,\n", - " )\n", - " ifc5_tunnel_dict[tunnel_model][\"speckle_model\"] = speckle_model" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'e185acb83934eb6b4554a86fb4362951'" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ifc5_tunnel_dict[tunnel_model][\"speckle_model\"].versions.items[0].referencedObject" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "dict_keys(['alignment', 'excavation'])" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ifc5_tunnel_dict.keys()" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "ename": "ValueError", - "evalue": "not enough values to unpack (expected 2, got 1)", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[1;32mIn[8], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m model_data \u001b[38;5;241m=\u001b[39m \u001b[43moperations\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mreceive\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 2\u001b[0m \u001b[43m \u001b[49m\u001b[43mifc5_tunnel_dict\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43malignment\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mspeckle_model\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mversions\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mitems\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mreferencedObject\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 3\u001b[0m \u001b[43m \u001b[49m\u001b[43mtransport\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 4\u001b[0m \u001b[43m)\u001b[49m\n", - "File \u001b[1;32mc:\\Users\\joost\\ReposWindows\\IFC5-development\\.venv\\Lib\\site-packages\\specklepy\\core\\api\\operations.py:86\u001b[0m, in \u001b[0;36mreceive\u001b[1;34m(obj_id, remote_transport, local_transport)\u001b[0m\n\u001b[0;32m 78\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m remote_transport:\n\u001b[0;32m 79\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m SpeckleException(\n\u001b[0;32m 80\u001b[0m message\u001b[38;5;241m=\u001b[39m(\n\u001b[0;32m 81\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCould not find the specified object using the local transport, and you\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 82\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m didn\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mt provide a fallback remote from which to pull it.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 83\u001b[0m )\n\u001b[0;32m 84\u001b[0m )\n\u001b[1;32m---> 86\u001b[0m obj_string \u001b[38;5;241m=\u001b[39m \u001b[43mremote_transport\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcopy_object_and_children\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 87\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mid\u001b[39;49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mobj_id\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtarget_transport\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mlocal_transport\u001b[49m\n\u001b[0;32m 88\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 90\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m serializer\u001b[38;5;241m.\u001b[39mread_json(obj_string\u001b[38;5;241m=\u001b[39mobj_string)\n", - "File \u001b[1;32mc:\\Users\\joost\\ReposWindows\\IFC5-development\\.venv\\Lib\\site-packages\\specklepy\\transports\\server\\server.py:172\u001b[0m, in \u001b[0;36mServerTransport.copy_object_and_children\u001b[1;34m(self, id, target_transport)\u001b[0m\n\u001b[0;32m 170\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m line \u001b[38;5;129;01min\u001b[39;00m lines:\n\u001b[0;32m 171\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m line:\n\u001b[1;32m--> 172\u001b[0m \u001b[38;5;28mhash\u001b[39m, obj \u001b[38;5;241m=\u001b[39m line\u001b[38;5;241m.\u001b[39msplit(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;130;01m\\t\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 173\u001b[0m target_transport\u001b[38;5;241m.\u001b[39msave_object(\u001b[38;5;28mhash\u001b[39m, obj)\n\u001b[0;32m 175\u001b[0m target_transport\u001b[38;5;241m.\u001b[39msave_object(\u001b[38;5;28mid\u001b[39m, root_obj_serialized)\n", - "\u001b[1;31mValueError\u001b[0m: not enough values to unpack (expected 2, got 1)" - ] - } - ], - "source": [ - "model_data = operations.receive(\n", - " ifc5_tunnel_dict[\"alignment\"][\"speckle_model\"].versions.items[0].referencedObject,\n", - " transport,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "ename": "ValueError", - "evalue": "not enough values to unpack (expected 2, got 1)", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[1;32mIn[9], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m excavation_model_data \u001b[38;5;241m=\u001b[39m \u001b[43moperations\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mreceive\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 2\u001b[0m \u001b[43m \u001b[49m\u001b[43mifc5_tunnel_dict\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mexcavation\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mspeckle_model\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mversions\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mitems\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mreferencedObject\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 3\u001b[0m \u001b[43m \u001b[49m\u001b[43mremote_transport\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtransport\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 4\u001b[0m \u001b[43m)\u001b[49m\n", - "File \u001b[1;32mc:\\Users\\joost\\ReposWindows\\IFC5-development\\.venv\\Lib\\site-packages\\specklepy\\core\\api\\operations.py:86\u001b[0m, in \u001b[0;36mreceive\u001b[1;34m(obj_id, remote_transport, local_transport)\u001b[0m\n\u001b[0;32m 78\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m remote_transport:\n\u001b[0;32m 79\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m SpeckleException(\n\u001b[0;32m 80\u001b[0m message\u001b[38;5;241m=\u001b[39m(\n\u001b[0;32m 81\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCould not find the specified object using the local transport, and you\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 82\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m didn\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mt provide a fallback remote from which to pull it.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 83\u001b[0m )\n\u001b[0;32m 84\u001b[0m )\n\u001b[1;32m---> 86\u001b[0m obj_string \u001b[38;5;241m=\u001b[39m \u001b[43mremote_transport\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcopy_object_and_children\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 87\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mid\u001b[39;49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mobj_id\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtarget_transport\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mlocal_transport\u001b[49m\n\u001b[0;32m 88\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 90\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m serializer\u001b[38;5;241m.\u001b[39mread_json(obj_string\u001b[38;5;241m=\u001b[39mobj_string)\n", - "File \u001b[1;32mc:\\Users\\joost\\ReposWindows\\IFC5-development\\.venv\\Lib\\site-packages\\specklepy\\transports\\server\\server.py:172\u001b[0m, in \u001b[0;36mServerTransport.copy_object_and_children\u001b[1;34m(self, id, target_transport)\u001b[0m\n\u001b[0;32m 170\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m line \u001b[38;5;129;01min\u001b[39;00m lines:\n\u001b[0;32m 171\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m line:\n\u001b[1;32m--> 172\u001b[0m \u001b[38;5;28mhash\u001b[39m, obj \u001b[38;5;241m=\u001b[39m line\u001b[38;5;241m.\u001b[39msplit(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;130;01m\\t\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 173\u001b[0m target_transport\u001b[38;5;241m.\u001b[39msave_object(\u001b[38;5;28mhash\u001b[39m, obj)\n\u001b[0;32m 175\u001b[0m target_transport\u001b[38;5;241m.\u001b[39msave_object(\u001b[38;5;28mid\u001b[39m, root_obj_serialized)\n", - "\u001b[1;31mValueError\u001b[0m: not enough values to unpack (expected 2, got 1)" - ] - } - ], - "source": [ - "excavation_model_data = operations.receive(\n", - " ifc5_tunnel_dict[\"excavation\"][\"speckle_model\"].versions.items[0].referencedObject,\n", - " remote_transport=transport,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Version(authorUser=LimitedUser(id='88153cc720', name='Joost Gevaert', bio='', company='Bedrock', avatar='data:image/jpeg;base64,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', verified=True, role='server:user'), createdAt=datetime.datetime(2025, 1, 27, 20, 31, 9, 910000, tzinfo=TzInfo(UTC)), id='542a48d337', message=None, previewUrl='https://app.speckle.systems/preview/7a489ac0d4/commits/542a48d337', referencedObject='78f8b3ca58a87a77d752c6ef1a65a81a', sourceApplication='rhino')" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ifc5_tunnel_dict[\"excavation\"][\"speckle_model\"].versions.items[0]" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'78f8b3ca58a87a77d752c6ef1a65a81a'" - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ifc5_tunnel_dict[\"excavation\"][\"speckle_model\"].versions.items[0].referencedObject" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": {}, - "outputs": [ - { - "ename": "ValueError", - "evalue": "not enough values to unpack (expected 2, got 1)", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[1;32mIn[25], line 2\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m key, value \u001b[38;5;129;01min\u001b[39;00m ifc5_tunnel_dict\u001b[38;5;241m.\u001b[39mitems():\n\u001b[1;32m----> 2\u001b[0m model_data \u001b[38;5;241m=\u001b[39m \u001b[43moperations\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mreceive\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 3\u001b[0m \u001b[43m \u001b[49m\u001b[43mifc5_tunnel_dict\u001b[49m\u001b[43m[\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m]\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mspeckle_model\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mversions\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mitems\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mreferencedObject\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 4\u001b[0m \u001b[43m \u001b[49m\u001b[43mtransport\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[1;32mc:\\Users\\joost\\ReposWindows\\IFC5-development\\.venv\\Lib\\site-packages\\specklepy\\core\\api\\operations.py:86\u001b[0m, in \u001b[0;36mreceive\u001b[1;34m(obj_id, remote_transport, local_transport)\u001b[0m\n\u001b[0;32m 78\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m remote_transport:\n\u001b[0;32m 79\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m SpeckleException(\n\u001b[0;32m 80\u001b[0m message\u001b[38;5;241m=\u001b[39m(\n\u001b[0;32m 81\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCould not find the specified object using the local transport, and you\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 82\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m didn\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mt provide a fallback remote from which to pull it.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 83\u001b[0m )\n\u001b[0;32m 84\u001b[0m )\n\u001b[1;32m---> 86\u001b[0m obj_string \u001b[38;5;241m=\u001b[39m \u001b[43mremote_transport\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcopy_object_and_children\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 87\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mid\u001b[39;49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mobj_id\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtarget_transport\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mlocal_transport\u001b[49m\n\u001b[0;32m 88\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 90\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m serializer\u001b[38;5;241m.\u001b[39mread_json(obj_string\u001b[38;5;241m=\u001b[39mobj_string)\n", - "File \u001b[1;32mc:\\Users\\joost\\ReposWindows\\IFC5-development\\.venv\\Lib\\site-packages\\specklepy\\transports\\server\\server.py:172\u001b[0m, in \u001b[0;36mServerTransport.copy_object_and_children\u001b[1;34m(self, id, target_transport)\u001b[0m\n\u001b[0;32m 170\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m line \u001b[38;5;129;01min\u001b[39;00m lines:\n\u001b[0;32m 171\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m line:\n\u001b[1;32m--> 172\u001b[0m \u001b[38;5;28mhash\u001b[39m, obj \u001b[38;5;241m=\u001b[39m line\u001b[38;5;241m.\u001b[39msplit(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;130;01m\\t\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 173\u001b[0m target_transport\u001b[38;5;241m.\u001b[39msave_object(\u001b[38;5;28mhash\u001b[39m, obj)\n\u001b[0;32m 175\u001b[0m target_transport\u001b[38;5;241m.\u001b[39msave_object(\u001b[38;5;28mid\u001b[39m, root_obj_serialized)\n", - "\u001b[1;31mValueError\u001b[0m: not enough values to unpack (expected 2, got 1)" - ] - } - ], - "source": [ - "for key, value in ifc5_tunnel_dict.items():\n", - " model_data = operations.receive(\n", - " ifc5_tunnel_dict[key][\"speckle_model\"].versions.items[0].referencedObject,\n", - " transport,\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "speckle_faces = model_data.elements[0].elements[0].elements[0].elements[0].faces\n", - "face_vertex_counts = []\n", - "face_vertex_indices = []\n", - "i = 0\n", - "while i < len(speckle_faces):\n", - " vertex_count = speckle_faces[i]\n", - " face_vertex_counts.append(vertex_count)\n", - " face_vertex_indices.extend(speckle_faces[i + 1 : i + 1 + vertex_count])\n", - " i += 1 + vertex_count\n", - "\n", - "speckle_vertices = model_data.elements[0].elements[0].elements[0].elements[0].vertices\n", - "points = [speckle_vertices[i : i + 3] for i in range(0, len(speckle_vertices), 3)]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "= =-th open(\n", - " f\"WekaHills_GeologyModel_{ifc5_geo_dict['name']}_UsdGeom.ifcx\", \"w\"\n", - ") as json_file:\n", - " json.dump(ifc5_usdgeom, json_file)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "For testing purposes, one can create an `.obj` file from the Speckle geometry as follows:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "with open(f\"{tunnel_model}Mesh.obj\", \"w\") as obj_file:\n", - " for point in points:\n", - " obj_file.write(f\"v {point[0]} {point[1]} {point[2]}\\n\")\n", - " for i in range(0, len(face_vertex_indices), 3):\n", - " # OBJ uses 1-based indexing, so add 1 to the indices\n", - " obj_file.write(\n", - " f\"f {face_vertex_indices[i] + 1} {face_vertex_indices[i + 1] + 1} {face_vertex_indices[i + 2] + 1}\\n\"\n", - " )" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# CRS Objects in IFC 5\n", - "\n", - "Coordinate Reference Systems (CRS') can be defined using the Well-Known Text representation of Coordinate Reference Systems (WKT-CRS | [Wikipedia](http://en.wikipedia.org/wiki/Well-known_text_representation_of_coordinate_reference_systems) | [OGC Specification](https://docs.ogc.org/is/18-010r7/18-010r7.html)). This representation of CRS' is also an ISO standard: ISO 19162:2019.\n", - "\n", - "Notes from the Wikipedia WKT-CRS \"Version history\" section:\n", - "\n", - "> Confusingly, the original 2015 \"WKT 2\" standard has a version number 1 for the new, stricter WKT-CRS specification. A newer revision called WKT-CRS 2 was published in 2018, with the ISO version being ISO 19162:2019.\n", - "\n", - "> ESRI vs OGC \n", - "> ... some databases differentiate between \"OGC WKT\" and \"ESRI WKT\" representations. The problem is largely resolved in WKT[-CRS] 2, as it is better-defined.\n", - "\n", - "These differences in how WKT strings are also clear from the export section when looking up a CRS on [epsg.io](https://epsg.io). For example, have a look at the differences between the \"OGC WKT\", \"OGC WKT 2\" and \"ESRI WKT\" results in the export section at the bottom of the [epsg.io/2193](https://epsg.io/2193) page." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "weka_hills_crs = CRS(2193)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ifc5_wkt_crs = [\n", - " {\n", - " \"def\": \"def\",\n", - " \"name\": \"CRS_EPSG:2193\",\n", - " \"type\": \"OGC:CRS\",\n", - " \"attributes\": {\n", - " \"WKT-CRS\": {\n", - " \"ISO\": \"ISO 19162:2019\",\n", - " \"wkt\": weka_hills_crs.to_wkt(),\n", - " \"name\": weka_hills_crs.name,\n", - " \"authority_id\": f\"EPSG:{weka_hills_crs.to_authority()[1]}\",\n", - " \"units\": \"m\",\n", - " \"offset_x\": 0,\n", - " \"offset_y\": 0,\n", - " \"offset_z\": 0,\n", - " \"rotation\": 0,\n", - " }\n", - " },\n", - " },\n", - " {\n", - " \"def\": \"over\",\n", - " \"name\": \"Nad68cd145a6b43fdb0232e0b11a6c7bc\",\n", - " \"comment\": \"Assigns CRS_EPSG:2193 to the instance of borehole WH_009\",\n", - " \"attributes\": {\"crs\": {\"ref\": \"\"}},\n", - " },\n", - " {\n", - " \"def\": \"over\",\n", - " \"name\": \"N996ff9e7b86240f898d4d038ab311d1b\",\n", - " \"comment\": \"Assigns CRS_EPSG:2193 to the instance of borehole WH_012\",\n", - " \"attributes\": {\"crs\": {\"ref\": \"\"}},\n", - " },\n", - " {\n", - " \"def\": \"over\",\n", - " \"name\": \"N25dbbae886194be6b469e4f17f0b605c\",\n", - " \"comment\": \"Assigns CRS_EPSG:2193 to the instance of the GeologyModel\",\n", - " \"attributes\": {\"crs\": {\"ref\": \"\"}},\n", - " },\n", - "]\n", - "\n", - "with open(\"WekaHills_CRS_EPSG2193.ifcx\", \"w\") as json_file:\n", - " json.dump(ifc5_wkt_crs, json_file, indent=2)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Longitude is the x-coordinate or east-west coordinate on earth expressed in 0 to 180 degrees east or west of the Greenwich prime meridian or in -180 to 180 degrees relative to the Greenwich prime meridian.\n", - "\n", - "Latitude is the y-coordinate or north-south coordinate on earth expressed in 0 to 90 north or south of the equator or in -90 to 90 degrees relative to the equator.\n", - "\n", - "Historically, coordinates on earth are denoted (Latitude, Longitude), because it was easier to determine the north-south position than the east-west position. This because the north-south position can be determined from the sun, stars and other heavenly bodies, whereas one need to accurately know the time in order to determine the east-west position.\n", - "\n", - "Nowadays, especially on the web, it's common to write coordinates on earth in [Longitude, Latitude], because we commonly write down coordinates [x, y]." - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [], - "source": [ - "transformer = Transformer.from_crs(weka_hills_crs, 4326, always_xy=True)\n", - "custom_lon, custom_lat = transformer.transform(1166250.104, 4888836.859)\n", - "custom_crs_wkt = f'PROJCS[\"SpeckleCRS_latlon_{custom_lat}_{custom_lon}\", GEOGCS[\"GCS_WGS_1984\", DATUM[\"D_WGS_1984\", SPHEROID[\"WGS_1984\", 6378137.0, 298.257223563]], PRIMEM[\"Greenwich\", 0.0], UNIT[\"Degree\", 0.0174532925199433]], PROJECTION[\"Transverse_Mercator\"], PARAMETER[\"False_Easting\", 0.0], PARAMETER[\"False_Northing\", 0.0], PARAMETER[\"Central_Meridian\", {custom_lon}], PARAMETER[\"Scale_Factor\", 1.0], PARAMETER[\"Latitude_Of_Origin\", {custom_lat}], UNIT[\"Meter\", 1.0]]'" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": ".venv", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.10" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/Tunnel/receive_from_speckle.py b/Tunnel/receive_from_speckle.py deleted file mode 100644 index 0814d6c..0000000 --- a/Tunnel/receive_from_speckle.py +++ /dev/null @@ -1,36 +0,0 @@ -from specklepy.api.client import SpeckleClient -from specklepy.core.api import operations -from specklepy.transports.server import ServerTransport - -weka_hills_speckle_project_id = "7a489ac0d4" - -speckle_client = SpeckleClient(host="app.speckle.systems") -transport = ServerTransport( - stream_id=weka_hills_speckle_project_id, client=speckle_client -) - -weka_hills_speckle_models = speckle_client.model.get_models( - project_id=weka_hills_speckle_project_id -) - -speckle_models_w_versions = {} -for model in weka_hills_speckle_models.items: - speckle_model = speckle_client.model.get_with_versions( - model_id=model.id, - project_id=weka_hills_speckle_project_id, - ) - if "geo/geology-model" in model.name: - geological_unit = str(model.name).replace("geo/geology-model/", "") - speckle_models_w_versions[geological_unit] = speckle_model - print(f"{geological_unit}: {model.id}") - elif "tunnel" in model.name: - tunnel_model = str(model.name).replace("tunnel/", "") - speckle_models_w_versions[tunnel_model] = speckle_model - print(f"{tunnel_model}: {model.id}") - -model_data = operations.receive( - # speckle_models_w_versions["alluvium"].versions.items[0].referencedObject, - # speckle_models_w_versions["alignment"].versions.items[0].referencedObject, - speckle_models_w_versions["excavation"].versions.items[0].referencedObject, - transport, -) From 27d74c856d6d9397b941c49e2733122f5bfaa0f8 Mon Sep 17 00:00:00 2001 From: Joost Gevaert Date: Tue, 4 Feb 2025 12:06:54 +0100 Subject: [PATCH 08/18] Add Alignments of Weka Hills Tunnels --- Tunnel/WekaHills_Tunnels.ifcx | 774 ++++++++++++++++++++++++++++++++++ 1 file changed, 774 insertions(+) create mode 100644 Tunnel/WekaHills_Tunnels.ifcx diff --git a/Tunnel/WekaHills_Tunnels.ifcx b/Tunnel/WekaHills_Tunnels.ifcx new file mode 100644 index 0000000..0949c7f --- /dev/null +++ b/Tunnel/WekaHills_Tunnels.ifcx @@ -0,0 +1,774 @@ +[ + { + "disclaimer": "2024-09-25 publication of the examples. (C) buildingSMART International. Published under CC BY-ND 4.0." + }, + { + "def": "class", + "type": "UsdGeom:Xform", + "name": "Ndd9e46015e7c4b59be0b1b98dfcadb74", + "children": [ + { + "def": "def", + "name": "WekaHills", + "inherits": [ + "" + ] + } + ] + }, + { + "def": "def", + "type": "Xform", + "name": "WekaHillsLeapfrogDemo", + "inherits": [ + "" + ] + }, + { + "def": "over", + "name": "Ndd9e46015e7c4b59be0b1b98dfcadb74", + "attributes": { + "ifc5:class": { + "code": "IfcProject", + "uri": "https://identifier.buildingsmart.org/uri/buildingsmart/ifc/4.3/class/IfcProject" + } + } + }, + { + "def": "class", + "type": "UsdGeom:Xform", + "name": "N337e2116e7e24dd390ddbf2e42555fac", + "children": [ + { + "def": "def", + "name": "WesternTunnel", + "inherits": [ + "" + ] + }, + { + "def": "def", + "name": "EasternTunnel", + "inherits": [ + "" + ] + } + ] + }, + { + "def": "over", + "name": "N337e2116e7e24dd390ddbf2e42555fac", + "attributes": { + "ifc5:class": { + "code": "IfcSite", + "uri": "https://identifier.buildingsmart.org/uri/buildingsmart/ifc/4.3/class/IfcSite" + } + } + }, + { + "def": "class", + "type": "UsdGeom:Xform", + "name": "N0d69d9ba92254b07817a49f47ca5d6e6", + "children": [ + { + "def": "def", + "name": "Alignment", + "inherits": [ + "" + ] + }, + { + "def": "def", + "name": "Excavation", + "inherits": [ + "" + ] + } + ] + }, + { + "def": "class", + "type": "UsdGeom:Xform", + "name": "N12becaa0fa484644abe9691a29cccbed", + "children": [ + { + "def": "def", + "name": "Alignment", + "inherits": [ + "" + ] + }, + { + "def": "def", + "name": "Excavation", + "inherits": [ + "" + ] + } + ] + }, + { + "def": "over", + "name": "N0d69d9ba92254b07817a49f47ca5d6e6", + "attributes": { + "ifc5:class": { + "code": "IfcTunnel" + } + } + }, + { + "def": "over", + "name": "N12becaa0fa484644abe9691a29cccbed", + "attributes": { + "ifc5:class": { + "code": "IfcTunnel" + } + } + }, + { + "def": "class", + "type": "UsdGeom:Xform", + "name": "N9492d2c9f8f74bb7934a619477860449", + "children": [ + { + "def": "def", + "name": "Axis", + "inherits": [ + "" + ] + } + ] + }, + { + "def": "over", + "name": "N9492d2c9f8f74bb7934a619477860449", + "attributes": { + "ifc5:class": { + "code": "IfcAlignment", + "uri": "https://identifier.buildingsmart.org/uri/buildingsmart/ifc/4.3/class/IfcAlignment" + } + } + }, + { + "def": "class", + "type": "UsdGeom:BasisCurves", + "name": "N9492d2c9f8f74bb7934a619477860449_Axis" + }, + { + "def": "class", + "type": "UsdGeom:Xform", + "name": "N704b493a9820414882d30753e11ac0a3", + "children": [ + { + "def": "def", + "name": "Axis", + "inherits": [ + "" + ] + } + ] + }, + { + "def": "over", + "name": "N704b493a9820414882d30753e11ac0a3", + "attributes": { + "ifc5:class": { + "code": "IfcAlignment", + "uri": "https://identifier.buildingsmart.org/uri/buildingsmart/ifc/4.3/class/IfcAlignment" + } + } + }, + { + "def": "class", + "type": "UsdGeom:BasisCurves", + "name": "N704b493a9820414882d30753e11ac0a3_Axis" + }, + { + "def": "over", + "name": "N704b493a9820414882d30753e11ac0a3_Axis", + "attributes": { + "UsdGeom:BasisCurves": { + "curveVertexCounts": [314], + "points": [ + [1166251.87898509, 4888874.76338244, 555.36464031], + [1166236.07006807, 4888874.96212701, 556.49955035], + [1166220.26186141, 4888875.202582, 557.63938404], + [1166204.45625997, 4888875.52644345, 558.78898006], + [1166188.65515859, 4888875.9754074, 559.95317708], + [1166179.61852958, 4888876.31393461, 560.63111522], + [1166170.58519162, 4888876.72014186, 561.31848268], + [1166161.55462017, 4888877.18176414, 562.00908255], + [1166152.52629072, 4888877.68653643, 562.69671793], + [1166136.15030786, 4888878.74457302, 563.93442404], + [1166119.78236116, 4888879.92478258, 565.17282996], + [1166105.98851281, 4888880.92739432, 566.22611575], + [1166092.20484225, 4888882.05722933, 567.275834], + [1166080.90672966, 4888883.18617409, 568.12322262], + [1166069.62113231, 4888884.44094799, 568.96525109], + [1166060.7030788, 4888885.47275466, 569.63209068], + [1166051.78903108, 4888886.53955629, 570.29860305], + [1166042.87992517, 4888887.64711435, 570.9640482], + [1166033.97669706, 4888888.80119032, 571.62768611], + [1166024.93271599, 4888890.00844982, 572.30051472], + [1166015.89329923, 4888891.25176827, 572.97197482], + [1166006.8630771, 4888892.55875753, 573.6413133], + [1165997.84667992, 4888893.95702944, 574.30777704], + [1165988.35324868, 4888895.54592318, 575.00745501], + [1165978.87559287, 4888897.22969567, 575.70414372], + [1165969.40995064, 4888898.98271011, 576.39816103], + [1165959.95256017, 4888900.77932973, 577.08982478], + [1165946.14218209, 4888903.49944468, 578.09597962], + [1165932.36314669, 4888906.37642298, 579.09473339], + [1165918.7292597, 4888909.42086841, 580.07540822], + [1165905.1189442, 4888912.57143466, 581.05441614], + [1165888.81538063, 4888916.38295131, 582.23757936], + [1165872.52443659, 4888920.24735338, 583.42348222], + [1165856.95035799, 4888923.91451749, 584.56101249], + [1165841.41686346, 4888927.74708016, 585.68894135], + [1165830.80500584, 4888930.55753507, 586.44698417], + [1165820.21679543, 4888933.46013325, 587.19674587], + [1165809.66016359, 4888936.47503488, 587.94250294], + [1165799.14304166, 4888939.62240015, 588.68853186], + [1165789.05504475, 4888942.81958995, 589.40962735], + [1165779.01229057, 4888946.15876765, 590.13009854], + [1165768.99428355, 4888949.57499723, 590.84786846], + [1165758.98052809, 4888953.0033427, 591.56086013], + [1165749.24121612, 4888956.32749415, 592.24846909], + [1165739.51031149, 4888959.67743614, 592.93166245], + [1165729.79558587, 4888963.07404851, 593.61172174], + [1165720.10481093, 4888966.53821107, 594.28992852], + [1165705.70768744, 4888971.82967941, 595.29548817], + [1165691.39514739, 4888977.3446901, 596.29604019], + [1165682.88870971, 4888980.79808697, 596.89474999], + [1165674.41990321, 4888984.34389537, 597.49287851], + [1165665.97299241, 4888987.94310366, 598.08910715], + [1165657.53224183, 4888991.55670023, 598.68211733], + [1165643.32622716, 4888997.65579144, 599.67193889], + [1165629.17882978, 4889003.88985595, 600.6533735], + [1165615.90008536, 4889009.98258924, 601.57377664], + [1165602.68559192, 4889016.21509852, 602.48798787], + [1165588.21764431, 4889023.16410541, 603.48715984], + [1165573.81464423, 4889030.24735408, 604.48006684], + [1165560.4823436, 4889036.96723806, 605.3974775], + [1165547.2278889, 4889043.83979294, 606.30800583], + [1165533.10060393, 4889051.47072077, 607.27702596], + [1165519.01965552, 4889059.18878415, 608.24135961], + [1165508.59530241, 4889064.79847066, 608.95410915], + [1165498.21089532, 4889070.48090988, 609.66318876], + [1165490.02329993, 4889075.1648319, 610.22166796], + [1165481.89918568, 4889079.95886498, 610.77523065], + [1165467.97058154, 4889088.41201712, 611.72357592], + [1165454.13730928, 4889097.02153087, 612.66415599], + [1165440.56505999, 4889105.6933677, 613.58506511], + [1165427.04051964, 4889114.44065338, 614.50145394], + [1165414.2716978, 4889122.62505926, 615.36677345], + [1165401.55670475, 4889130.89248942, 616.2257807], + [1165391.66480214, 4889137.50845896, 616.8878563], + [1165381.87934573, 4889144.28027065, 617.5432952], + [1165368.53309839, 4889154.06311859, 618.45048055], + [1165355.26729407, 4889163.9580587, 619.35025836], + [1165348.07870808, 4889169.18510459, 619.82975031], + [1165340.86704793, 4889174.38118364, 620.30691931], + [1165326.55684237, 4889184.9254289, 621.25522686], + [1165314.37122075, 4889194.40956161, 622.0724828], + [1165302.36332961, 4889204.11897169, 622.88241826], + [1165294.51775646, 4889210.65502798, 623.41417111], + [1165286.73893078, 4889217.27119852, 623.94335793], + [1165278.99556112, 4889223.92978636, 624.46989837], + [1165271.25635606, 4889230.59309459, 624.9937121], + [1165260.79453767, 4889239.55903823, 625.69556471], + [1165250.4309397, 4889248.63754725, 626.38872722], + [1165237.88223887, 4889260.19692225, 627.23052016], + [1165225.42760078, 4889271.85991537, 628.06571402], + [1165214.13035591, 4889282.25192654, 628.82260655], + [1165202.89799183, 4889292.71352996, 629.57274085], + [1165190.67778669, 4889304.44499674, 630.38063611], + [1165178.65385262, 4889316.37696485, 631.17756509], + [1165170.82224325, 4889324.43321108, 631.70427506], + [1165163.07830459, 4889332.57460652, 632.22886253], + [1165155.3998814, 4889340.77867331, 632.75008723], + [1165147.76481841, 4889349.02293359, 633.26670889], + [1165140.80634108, 4889356.62719094, 633.73612149], + [1165133.90087379, 4889364.28011071, 634.20160156], + [1165127.03065332, 4889371.96519191, 634.66330785], + [1165120.17791645, 4889379.66593354, 635.12139909], + [1165111.28527299, 4889389.6574741, 635.70713446], + [1165102.52495534, 4889399.76398447, 636.28648282], + [1165096.26816391, 4889407.31245912, 636.71148124], + [1165090.10490546, 4889414.93828188, 637.13584865], + [1165083.98226092, 4889422.59775729, 637.55766587], + [1165077.84731121, 4889430.24718989, 637.9750137], + [1165069.81250686, 4889440.12634192, 638.50575737], + [1165061.87986517, 4889450.08650829, 639.03156949], + [1165055.99492488, 4889457.90670792, 639.43896591], + [1165050.19645071, 4889465.79244518, 639.84365217], + [1165041.87475786, 4889477.01534097, 640.41241038], + [1165033.65900099, 4889488.31544337, 640.97232031], + [1165028.25163528, 4889496.06626469, 641.34468299], + [1165022.92874897, 4889503.87626339, 641.71303641], + [1165017.61850899, 4889511.69529612, 642.07905165], + [1165012.24908227, 4889519.47321957, 642.44439979], + [1165005.16845408, 4889529.26590896, 642.91088774], + [1164998.20436435, 4889539.13844184, 643.3727704], + [1164989.02917746, 4889553.64418014, 644.01891593], + [1164980.10547008, 4889568.31162625, 644.65592587], + [1164971.39597442, 4889582.42140407, 645.26344823], + [1164962.75725647, 4889596.57481168, 645.86056329], + [1164956.73805832, 4889606.52139038, 646.27156913], + [1164950.73503014, 4889616.47852178, 646.67789034], + [1164944.8138184, 4889626.48335297, 647.08080417], + [1164939.04006952, 4889636.57303106, 647.48158785], + [1164930.69075261, 4889652.0666898, 648.08431663], + [1164922.61838733, 4889667.70931787, 648.67695632], + [1164916.663606, 4889679.53103042, 649.11207705], + [1164910.77635223, 4889691.38722504, 649.539532], + [1164906.6624614, 4889699.55287189, 649.83200439], + [1164902.53060671, 4889707.7099184, 650.122295], + [1164898.44273444, 4889715.88841312, 650.41051654], + [1164894.46079088, 4889724.11840462, 650.69678171], + [1164888.17596171, 4889737.95454382, 651.1688335], + [1164882.04105455, 4889751.85990041, 651.63161038], + [1164878.2284732, 4889760.31758627, 651.90715894], + [1164874.39842739, 4889768.767919, 652.17858325], + [1164870.61573253, 4889777.23884491, 652.44752683], + [1164866.94520405, 4889785.75831032, 652.7156332], + [1164860.59042133, 4889801.50567598, 653.20469432], + [1164854.46084785, 4889817.34408248, 653.6870588], + [1164850.47120269, 4889827.77290769, 653.99917118], + [1164846.53269151, 4889838.22137862, 654.30821853], + [1164842.60654613, 4889848.67465497, 654.61538121], + [1164838.65399838, 4889859.11789642, 654.92183961], + [1164832.73978203, 4889874.62164131, 655.37393611], + [1164826.74909624, 4889890.09578509, 655.82624437], + [1164822.74039917, 4889900.14522034, 656.12555662], + [1164818.67135727, 4889910.17067396, 656.42703264], + [1164814.61288203, 4889920.20027343, 656.72776556], + [1164810.63588497, 4889930.26214624, 657.02484853], + [1164805.78701269, 4889943.24348307, 657.39558632], + [1164800.91150244, 4889956.21446814, 657.76482398], + [1164794.8190168, 4889971.14840894, 658.20449787], + [1164788.65443639, 4889986.05364258, 658.64416568], + [1164785.07929013, 4889994.95410145, 658.90165727], + [1164781.53261908, 4890003.86603909, 659.15738666], + [1164778.00912315, 4890012.78720801, 659.41264353], + [1164774.50350225, 4890021.71536066, 659.66871756], + [1164770.39786092, 4890032.26700447, 659.97262276], + [1164766.32372995, 4890042.8308872, 660.27725579], + [1164762.25625539, 4890053.39737039, 660.58179576], + [1164758.17058326, 4890063.95681559, 660.88542179], + [1164753.97044603, 4890074.68006114, 661.19224201], + [1164749.78349203, 4890085.40841596, 661.49899045], + [1164744.75180539, 4890098.65095754, 661.87992371], + [1164739.6956935, 4890111.88406009, 662.2594286], + [1164733.95076901, 4890126.31440904, 662.66785221], + [1164728.17060132, 4890140.7309598, 663.07436086], + [1164723.66873022, 4890152.13200416, 663.39684776], + [1164719.18547353, 4890163.54038594, 663.71971309], + [1164714.71897693, 4890174.95533757, 664.04286509], + [1164710.26738614, 4890186.37609152, 664.366212], + [1164706.70385404, 4890195.56377054, 664.62642537], + [1164703.15521118, 4890204.75721371, 664.886895], + [1164699.61427087, 4890213.95363822, 665.1473931], + [1164696.0738464, 4890223.15026126, 665.40769186], + [1164692.16747278, 4890233.31341056, 665.69522054], + [1164688.26838162, 4890243.47936651, 665.9827421], + [1164684.36437812, 4890253.64343575, 666.26986868], + [1164680.44326751, 4890263.80092489, 666.55621236], + [1164674.81551967, 4890278.24317389, 666.96185745], + [1164669.16916836, 4890292.678222, 667.36626535], + [1164664.65122309, 4890304.25007342, 667.69025743], + [1164660.13322645, 4890315.82191172, 668.01400124], + [1164655.61519928, 4890327.39374476, 668.33750725], + [1164651.09716243, 4890338.96558038, 668.66078588], + [1164646.02637176, 4890351.95329478, 669.02319107], + [1164640.95542684, 4890364.9409609, 669.38516773], + [1164636.72959751, 4890375.79087473, 669.68765267], + [1164632.50983843, 4890386.64317254, 669.99023817], + [1164628.27759919, 4890397.49058158, 670.29219804], + [1164624.0143294, 4890408.3258291, 670.59280613], + [1164620.05450489, 4890418.20179833, 670.86510658], + [1164616.05007874, 4890428.06012487, 671.13569231], + [1164612.06686393, 4890437.92673102, 671.40665665], + [1164608.17067342, 4890447.82753913, 671.6800929], + [1164603.64829792, 4890460.00246469, 672.02029274], + [1164599.13802298, 4890472.18203463, 672.36090532], + [1164595.56651733, 4890481.35768833, 672.61533612], + [1164591.93100508, 4890490.50842071, 672.8682025], + [1164588.27007117, 4890499.64926219, 673.12022944], + [1164584.62230054, 4890508.7952432, 673.37214195], + [1164579.97687345, 4890520.48548691, 673.69353074], + [1164575.32500988, 4890532.17321949, 674.01416366], + [1164570.6871754, 4890543.86647007, 674.33494351], + [1164566.08383559, 4890555.57326774, 674.65677309], + [1164561.65756184, 4890566.97248431, 674.97125784], + [1164557.26609779, 4890578.38518032, 675.28677849], + [1164552.88586627, 4890589.80223824, 675.60240057], + [1164548.49329007, 4890601.21454055, 675.91718964], + [1164544.89373977, 4890610.53250341, 676.173602], + [1164541.29376647, 4890619.85031335, 676.42976154], + [1164537.69252507, 4890629.16764062, 676.68569213], + [1164534.08917044, 4890638.48415548, 676.94141762], + [1164530.48285749, 4890647.79952815, 677.19696187], + [1164526.87274111, 4890657.1134289, 677.45234873], + [1164523.25797617, 4890666.42552796, 677.70760205], + [1164519.63771758, 4890675.73549559, 677.9627457], + [1164513.35908931, 4890691.82897811, 678.40354707], + [1164507.06264381, 4890707.91552338, 678.84376567], + [1164500.75947326, 4890723.99945517, 679.28359718], + [1164494.46066984, 4890740.08509723, 679.72323724], + [1164488.80319238, 4890754.51576072, 680.11784396], + [1164483.17035403, 4890768.95604757, 680.51120036], + [1164477.66883588, 4890783.31991917, 680.898751], + [1164472.21833529, 4890797.70359515, 681.28470191], + [1164466.73745347, 4890812.07535392, 681.67080922], + [1164461.14479163, 4890826.40347391, 682.05882905], + [1164454.6697282, 4890842.20079622, 682.49383807], + [1164448.17076909, 4890857.98857404, 682.92942255], + [1164443.87367146, 4890868.81039424, 683.22466306], + [1164439.62972108, 4890879.65329883, 683.51920282], + [1164435.42242629, 4890890.51060857, 683.81333483], + [1164431.23529544, 4890901.37564428, 684.10735208], + [1164427.79941608, 4890910.4046551, 684.35116009], + [1164424.40061945, 4890919.4478716, 684.59473839], + [1164420.99164528, 4890928.48714647, 684.8382392], + [1164417.52523329, 4890937.5043324, 685.08181473], + [1164413.66069484, 4890947.28088134, 685.34717029], + [1164409.73671027, 4890957.03390794, 685.6126685], + [1164405.79602394, 4890966.78035999, 685.87792575], + [1164401.8813802, 4890976.53718532, 686.14255844], + [1164397.91320088, 4890986.53061638, 686.41226239], + [1164393.95827658, 4890996.52932664, 686.68128657], + [1164390.01306711, 4891006.53188591, 686.95014389], + [1164386.07403231, 4891016.53686396, 687.21934726], + [1164382.36025853, 4891025.97002251, 687.47357585], + [1164378.64998542, 4891035.40456845, 687.72797311], + [1164374.95352602, 4891044.84449909, 687.98252744], + [1164371.28119341, 4891054.29381173, 688.23722726], + [1164368.02971092, 4891062.75201054, 688.46509758], + [1164364.80537761, 4891071.22066802, 688.69319669], + [1164361.59746121, 4891079.69564318, 688.92142671], + [1164358.39522945, 4891088.17279503, 689.14968976], + [1164355.18795009, 4891096.64798259, 689.37788796], + [1164351.96489084, 4891105.11706487, 689.60592343], + [1164348.71531946, 4891113.57590088, 689.8336983], + [1164345.42850367, 4891122.02034964, 690.06111469], + [1164341.21283374, 4891132.60702224, 690.34631362], + [1164336.92849547, 4891143.16639966, 690.63083234], + [1164332.63596348, 4891153.72255245, 690.91520155], + [1164328.3957124, 4891164.29955118, 691.1999519], + [1164322.90912692, 4891178.27441072, 691.57596009], + [1164317.47681043, 4891192.27054599, 691.95238522], + [1164312.06322694, 4891206.27403951, 692.32876304], + [1164306.63284048, 4891220.27097379, 692.70462933], + [1164300.23281992, 4891236.63178478, 693.14398253], + [1164293.81431067, 4891252.98542257, 693.58306511], + [1164287.41537995, 4891269.34665403, 694.02143609], + [1164281.07409496, 4891285.73024603, 694.45865451], + [1164276.84450494, 4891296.90146414, 694.75421868], + [1164272.67119542, 4891308.09423513, 695.04851059], + [1164268.47722009, 4891319.27896656, 695.34328246], + [1164264.18563264, 4891330.42606597, 695.64028651], + [1164258.57539843, 4891344.2272606, 696.01678184], + [1164252.93745351, 4891358.01750379, 696.39349414], + [1164248.68714341, 4891368.84219679, 696.68343164], + [1164244.49808865, 4891379.69095407, 696.97161201], + [1164240.33126578, 4891390.54845886, 697.2590391], + [1164236.14765136, 4891401.39939438, 697.5467168], + [1164231.52035886, 4891413.32519072, 697.86340026], + [1164226.88018904, 4891425.24597288, 698.18023446], + [1164222.94182078, 4891435.33182053, 698.44919545], + [1164218.97696661, 4891445.40725141, 698.7181059], + [1164214.90978801, 4891455.57076638, 698.9892312], + [1164210.80755533, 4891465.72034916, 699.26000783], + [1164206.71754786, 4891475.87474616, 699.53069907], + [1164202.68704491, 4891486.05270382, 699.80156819], + [1164198.4502207, 4891497.04399973, 700.09333611], + [1164194.27907013, 4891508.06062091, 700.38523172], + [1164190.11826362, 4891519.08126242, 700.67713057], + [1164185.91247161, 4891530.08461932, 700.9689082], + [1164179.58735062, 4891546.35245655, 701.40098672], + [1164173.21428165, 4891562.60163615, 701.83291485], + [1164166.81934372, 4891578.84229754, 702.26477423], + [1164160.42861588, 4891595.0845801, 702.69664651], + [1164155.68684526, 4891607.18777781, 703.01887519], + [1164150.94925938, 4891619.29263966, 703.34147757], + [1164146.19329033, 4891631.39023856, 703.66330043], + [1164141.39637019, 4891643.47164738, 703.98319055], + [1164135.18373569, 4891658.71238056, 704.38225181], + [1164129.00973828, 4891673.96842885, 704.78193317], + [1164124.69328057, 4891685.12142519, 705.07774394], + [1164120.46046197, 4891696.30677037, 705.37602646], + [1164116.23739092, 4891707.49591817, 705.67495489], + [1164111.95017586, 4891718.66032238, 705.97270342], + [1164107.90802777, 4891728.95465322, 706.24657397], + [1164103.82487521, 4891739.23287488, 706.51984307], + [1164099.71441218, 4891749.50029281, 706.7927095], + [1164095.59033271, 4891759.76221242, 707.06537203] + ] + } + } + }, + { + "def": "over", + "name": "N9492d2c9f8f74bb7934a619477860449_Axis", + "attributes": { + "UsdGeom:BasisCurves": { + "curveVertexCounts": [252], + "points": [ + [1164061.31450826, 4891745.48745995, 707.83133308], + [1164066.62164062, 4891731.81990195, 707.49199069], + [1164071.92866386, 4891718.15230177, 707.15261764], + [1164077.23546859, 4891704.48461786, 706.8131833], + [1164082.54194545, 4891690.81680866, 706.47365703], + [1164087.84798507, 4891677.14883262, 706.13400819], + [1164093.15347806, 4891663.48064821, 705.79420614], + [1164098.45831505, 4891649.81221386, 705.45422024], + [1164103.76238668, 4891636.14348804, 705.11401985], + [1164109.06558356, 4891622.47442918, 704.77357434], + [1164114.36779633, 4891608.80499574, 704.43285306], + [1164119.6689156, 4891595.13514617, 704.09182538], + [1164124.96883201, 4891581.46483891, 703.75046066], + [1164130.26743619, 4891567.79403243, 703.40872826], + [1164135.56461875, 4891554.12268517, 703.06659754], + [1164140.86027033, 4891540.45075558, 702.72403786], + [1164146.15428155, 4891526.77820212, 702.38101858], + [1164151.49748436, 4891512.96169336, 702.03360664], + [1164156.83310509, 4891499.14227617, 701.68515823], + [1164162.16427838, 4891485.32115851, 701.33589901], + [1164167.4941389, 4891471.49954835, 700.98605461], + [1164172.82582129, 4891457.67865366, 700.63585067], + [1164178.16246021, 4891443.85968242, 700.28551282], + [1164183.50719031, 4891430.04384258, 699.93526671], + [1164188.86314623, 4891416.23234212, 699.58533798], + [1164194.71240281, 4891401.18513862, 699.20428476], + [1164200.57068354, 4891386.14144509, 698.82328307], + [1164206.43649554, 4891371.10068336, 698.4422638], + [1164212.30834591, 4891356.06227529, 698.0611578], + [1164218.18474177, 4891341.02564271, 697.67989597], + [1164224.06419022, 4891325.99020746, 697.29840918], + [1164229.94519837, 4891310.95539139, 696.9166283], + [1164235.82627332, 4891295.92061634, 696.53448421], + [1164242.98560072, 4891277.62724594, 696.06916991], + [1164250.15108216, 4891259.3362897, 695.60367661], + [1164257.32089008, 4891241.04703386, 695.13793069], + [1164264.4931969, 4891222.75876468, 694.6718585], + [1164271.66617504, 4891204.47076839, 694.2053864], + [1164278.83799694, 4891186.18233124, 693.73844075], + [1164286.00683502, 4891167.89273948, 693.27094792], + [1164293.1708617, 4891149.60127934, 692.80283426], + [1164299.32853267, 4891133.87875225, 692.40013424], + [1164305.48921317, 4891118.15739907, 691.99724884], + [1164311.65018685, 4891102.43616577, 691.59403241], + [1164317.80873734, 4891086.7139983, 691.19033931], + [1164323.9621483, 4891070.98984261, 690.7860239], + [1164330.10770336, 4891055.26264467, 690.38094055], + [1164336.24268616, 4891039.53135042, 689.9749436], + [1164342.36438035, 4891023.79490583, 689.56788742], + [1164347.11940033, 4891011.52331612, 689.24944337], + [1164351.85752811, 4890999.24521514, 688.92978006], + [1164356.5847982, 4890986.9629318, 688.60924745], + [1164361.30724509, 4890974.67879503, 688.2881955], + [1164366.03090326, 4890962.39513374, 687.96697415], + [1164370.76180722, 4890950.11427687, 687.64593338], + [1164375.50599145, 4890937.83855332, 687.32542314], + [1164380.26949045, 4890925.57029203, 687.00579337], + [1164386.1440398, 4890910.51707129, 686.61460466], + [1164392.03825393, 4890895.4715193, 686.22434314], + [1164397.94714573, 4890880.43169326, 685.834672], + [1164403.86572811, 4890865.39565038, 685.44525441], + [1164409.78901398, 4890850.36144784, 685.05575355], + [1164415.71201623, 4890835.32714286, 684.6658326], + [1164421.62974776, 4890820.29079262, 684.27515475], + [1164427.53722148, 4890805.25045434, 683.88338316], + [1164435.36511281, 4890785.34772472, 683.36438633], + [1164443.20169578, 4890765.44836186, 682.84471348], + [1164451.00543881, 4890745.53631769, 682.32216532], + [1164458.73481034, 4890725.59554419, 681.79454255], + [1164465.19144171, 4890708.39136614, 681.33071248], + [1164471.72104828, 4890691.21560519, 680.86734824], + [1164476.69855312, 4890678.93215986, 680.54205185], + [1164481.81167898, 4890666.70324616, 680.22082138], + [1164486.92271107, 4890654.47347993, 679.90062542], + [1164491.8939346, 4890642.18747701, 679.57843253], + [1164496.33230514, 4890630.64697033, 679.27546305], + [1164500.65099779, 4890619.06047004, 678.97156195], + [1164504.94464587, 4890607.46425592, 678.66686899], + [1164509.3078827, 4890595.89460771, 678.3615239], + [1164516.57349994, 4890577.1163756, 677.86305929], + [1164523.91533441, 4890558.36770625, 677.36331806], + [1164531.29011873, 4890539.6318348, 676.86274909], + [1164538.65458555, 4890520.89199636, 676.36180127], + [1164543.01984209, 4890509.76641022, 676.06448276], + [1164547.39045651, 4890498.64292762, 675.76698812], + [1164551.75766354, 4890487.51812825, 675.46890477], + [1164556.11269789, 4890476.38859183, 675.16982017], + [1164561.05999062, 4890463.69027117, 674.82769531], + [1164565.9936527, 4890450.98665725, 674.48492887], + [1164570.9186958, 4890438.27970083, 674.14161047], + [1164575.8401316, 4890425.57135267, 673.79782971], + [1164580.76297178, 4890412.86356354, 673.45367621], + [1164585.69222802, 4890400.1582842, 673.10923958], + [1164590.63291198, 4890387.45746541, 672.76460943], + [1164595.59003534, 4890374.76305795, 672.41987538], + [1164600.11539723, 4890363.24641381, 672.10696913], + [1164604.66491787, 4890351.73922775, 671.79417339], + [1164609.22850306, 4890340.23755768, 671.48128419], + [1164613.79605863, 4890328.73746154, 671.16809756], + [1164618.3574904, 4890317.23499725, 670.85440951], + [1164622.9027042, 4890305.72622275, 670.54001608], + [1164627.42160583, 4890294.20719594, 670.22471327], + [1164631.90410114, 4890282.67397477, 669.90829711], + [1164639.81185125, 4890261.78831573, 669.33154334], + [1164647.72317443, 4890240.90409426, 668.75276401], + [1164651.93465898, 4890230.07340737, 668.45341145], + [1164656.17778733, 4890219.25507309, 668.15483628], + [1164660.44516262, 4890208.44620814, 667.85669188], + [1164664.72938798, 4890197.64392927, 667.55863165], + [1164669.02306655, 4890186.84535321, 667.26030898], + [1164673.31880147, 4890176.0475967, 666.96137726], + [1164677.60919586, 4890165.24777647, 666.66148989], + [1164681.88685286, 4890154.44300927, 666.36030024], + [1164688.46411601, 4890137.84604613, 665.89311114], + [1164694.99812608, 4890121.23219447, 665.42360963], + [1164702.34664019, 4890102.04166121, 664.88490696], + [1164709.70283748, 4890082.85416354, 664.34466158], + [1164715.14998516, 4890069.00892526, 663.95145941], + [1164720.65252106, 4890055.18550701, 663.5572248], + [1164726.16589418, 4890041.36636397, 663.16192464], + [1164731.6455535, 4890027.53395133, 662.76552581], + [1164738.27381468, 4890010.60454235, 662.28025731], + [1164744.86737439, 4889993.66156183, 661.79397332], + [1164751.46111094, 4889976.71870728, 661.30573856], + [1164758.08990265, 4889959.78967623, 660.81461776], + [1164765.72516074, 4889940.58847965, 660.24985316], + [1164773.33086727, 4889921.37577991, 659.68253852], + [1164779.60041622, 4889905.14899011, 659.20804329], + [1164785.80415068, 4889888.89672897, 658.7347004], + [1164791.99737537, 4889872.640424, 658.26002091], + [1164798.23539501, 4889856.40150275, 657.78151582], + [1164805.28690496, 4889838.31920843, 657.24153763], + [1164812.3636883, 4889820.24695521, 656.694288], + [1164816.75155858, 4889808.91243568, 656.34778575], + [1164821.11721082, 4889797.56918185, 655.99887417], + [1164825.51959516, 4889786.24061895, 655.64739502], + [1164830.01766176, 4889774.95017216, 655.29319006], + [1164838.57394947, 4889754.63164463, 654.63851164], + [1164843.58113025, 4889743.31199416, 654.26701198], + [1164848.65437668, 4889732.02162047, 653.88999194], + [1164853.39577332, 4889721.28832478, 653.52306552], + [1164858.26393697, 4889710.61373095, 653.15119486], + [1164865.75260941, 4889695.65040565, 652.62104359], + [1164873.33136613, 4889680.73091603, 652.08335046], + [1164878.99430768, 4889668.80514921, 651.64715332], + [1164884.71730518, 4889656.90950505, 651.20410881], + [1164891.62676339, 4889643.62883423, 650.69945741], + [1164898.73897525, 4889630.45451871, 650.18688875], + [1164908.43202459, 4889612.71135755, 649.47579779], + [1164918.37353283, 4889595.10802259, 648.75430596], + [1164929.5111036, 4889576.38901592, 647.9749204], + [1164940.91229324, 4889557.82831166, 647.18490608], + [1164947.122711, 4889547.90636402, 646.75099021], + [1164953.41720737, 4889538.03771582, 646.30951907], + [1164964.35101452, 4889521.11159809, 645.53837965], + [1164975.42836127, 4889504.2799951, 644.75343385], + [1164983.25167834, 4889492.61248955, 644.19173339], + [1164991.23630947, 4889481.05593846, 643.6258644], + [1164999.86309361, 4889469.14033584, 643.04288166], + [1165008.65410983, 4889457.34456895, 642.4551188], + [1165022.15545568, 4889439.56651723, 641.53949355], + [1165035.77735791, 4889421.88112465, 640.60463536], + [1165045.61799542, 4889409.07721078, 639.9113534], + [1165055.5984429, 4889396.38414155, 639.20794173], + [1165068.68274837, 4889380.45918497, 638.30691341], + [1165082.06155698, 4889364.78163204, 637.39646944], + [1165090.08564353, 4889355.68144516, 636.85524653], + [1165098.20622164, 4889346.66674152, 636.31106431], + [1165106.39444136, 4889337.71298423, 635.76269152], + [1165114.62145275, 4889328.79563641, 635.20889692], + [1165128.4297933, 4889314.0588373, 634.27282012], + [1165142.36336395, 4889299.44081237, 633.3216019], + [1165154.85990255, 4889286.37429141, 632.45689862], + [1165167.52480562, 4889273.47378114, 631.58291731], + [1165180.67354678, 4889260.72907408, 630.6941863], + [1165194.03669068, 4889248.20861758, 629.79693427], + [1165209.64800967, 4889233.97312531, 628.74725739], + [1165225.42780841, 4889219.92472103, 627.68587353], + [1165240.95543345, 4889206.33252468, 626.64111301], + [1165256.62756348, 4889192.90869141, 625.58129883], + [1165272.0018819, 4889180.0349111, 624.527782], + [1165287.54743022, 4889167.37036514, 623.46045153], + [1165305.51358269, 4889153.21050668, 622.23658488], + [1165323.69643728, 4889139.33112275, 621.00137325], + [1165339.95964869, 4889127.33189337, 619.89748935], + [1165356.39548476, 4889115.57062314, 618.78336019], + [1165369.96035811, 4889106.12185073, 617.86531412], + [1165383.65351602, 4889096.86093624, 616.9389011], + [1165393.82657927, 4889090.14158278, 616.25027529], + [1165404.04767499, 4889083.49532526, 615.5583496], + [1165414.31361161, 4889076.91880128, 614.8629661], + [1165424.62119756, 4889070.40864848, 614.16396685], + [1165434.45880664, 4889064.27711643, 613.4966704], + [1165444.33485461, 4889058.20747674, 612.82656251], + [1165454.2533401, 4889052.20816022, 612.152085], + [1165464.21826172, 4889046.28759766, 611.47167969], + [1165476.08971239, 4889039.34710885, 610.65624812], + [1165488.00936206, 4889032.48954746, 609.83388076], + [1165499.98901171, 4889025.73885555, 609.00641851], + [1165512.04046234, 4889019.11897519, 608.17570231], + [1165524.52700851, 4889012.44557469, 607.31772094], + [1165537.08278764, 4889005.90229432, 606.45615175], + [1165549.70198414, 4888999.48239896, 605.59034489], + [1165562.37878241, 4888993.17915347, 604.71965052], + [1165573.99617987, 4888987.53565004, 603.92112906], + [1165585.66684234, 4888982.00239465, 603.11869748], + [1165597.38781458, 4888976.57706238, 602.31172279], + [1165609.15614135, 4888971.25732829, 601.49957203], + [1165622.7447585, 4888965.26216051, 600.55924472], + [1165636.38776505, 4888959.39122912, 599.61315675], + [1165650.08212786, 4888953.64180138, 598.66191896], + [1165663.82481381, 4888948.01114453, 597.70614222], + [1165678.02673031, 4888942.34193876, 596.71800819], + [1165692.27947176, 4888936.80101993, 595.72547291], + [1165706.57651392, 4888931.37583547, 594.72753858], + [1165720.9113325, 4888926.05383282, 593.7232074], + [1165732.11113548, 4888921.95841144, 592.93400142], + [1165743.33590016, 4888917.93115356, 592.13956184], + [1165754.60044724, 4888914.02014506, 591.34166588], + [1165765.91959744, 4888910.2734718, 590.54209076], + [1165779.23555183, 4888906.12756606, 589.60614716], + [1165792.61254736, 4888902.17947706, 588.66839483], + [1165806.02808616, 4888898.36057265, 587.72725039], + [1165819.45967033, 4888894.60222067, 586.78113048], + [1165833.36958088, 4888890.7333647, 585.79663183], + [1165847.29829589, 4888886.93172317, 584.80781587], + [1165861.25930556, 4888883.25565246, 583.81404905], + [1165875.2661001, 4888879.76350896, 582.81469783], + [1165889.37011528, 4888876.47850895, 581.80580487], + [1165903.51574978, 4888873.37516941, 580.79128409], + [1165917.69079382, 4888870.40631207, 579.77267709], + [1165931.8830376, 4888867.52475864, 578.75152548], + [1165943.99735854, 4888865.14526322, 577.87865991], + [1165956.12993761, 4888862.86012028, 577.00304236], + [1165968.27658501, 4888860.65056169, 576.12538082], + [1165980.43311095, 4888858.49781931, 575.24638329], + [1165999.60285123, 4888855.20890837, 573.85967435], + [1166018.81443176, 4888852.18286001, 572.4658364], + [1166038.5519704, 4888849.43312519, 571.02870267], + [1166058.33588478, 4888847.05270461, 569.57885803], + [1166076.71027867, 4888845.31907679, 568.21394319], + [1166095.1049595, 4888843.79577613, 566.84582751], + [1166116.14771983, 4888841.95381125, 565.30059261], + [1166137.20363247, 4888840.28108392, 563.75483972], + [1166149.21181405, 4888839.46266072, 562.86446383], + [1166161.22455296, 4888838.71204842, 561.96959225], + [1166173.24294376, 4888838.06994247, 561.07523815], + [1166185.26808104, 4888837.57703834, 560.1864147], + [1166201.47184538, 4888837.15763165, 558.99909009], + [1166217.68104532, 4888836.9438854, 557.81792486], + [1166233.89284214, 4888836.86724589, 556.64094027], + [1166250.10439711, 4888836.85915944, 555.46615759] + ] + } + } + } +] From fd7468779a39c8a4af37118bd5867a2f289a46b3 Mon Sep 17 00:00:00 2001 From: Joost Gevaert Date: Tue, 4 Feb 2025 12:36:03 +0100 Subject: [PATCH 09/18] Add tunnel excavation mesh for western tunnel --- Tunnel/WekaHills_Tunnels.ifcx | 5454 ++++++++++++++++++++++++++++++++- 1 file changed, 5445 insertions(+), 9 deletions(-) diff --git a/Tunnel/WekaHills_Tunnels.ifcx b/Tunnel/WekaHills_Tunnels.ifcx index 0949c7f..1bd1c91 100644 --- a/Tunnel/WekaHills_Tunnels.ifcx +++ b/Tunnel/WekaHills_Tunnels.ifcx @@ -97,13 +97,6 @@ "inherits": [ "" ] - }, - { - "def": "def", - "name": "Excavation", - "inherits": [ - "" - ] } ] }, @@ -132,6 +125,7 @@ "children": [ { "def": "def", + "type": "UsdGeom:BasisCurves", "name": "Axis", "inherits": [ "" @@ -161,6 +155,7 @@ "children": [ { "def": "def", + "type": "UsdGeom:BasisCurves", "name": "Axis", "inherits": [ "" @@ -188,7 +183,6 @@ "name": "N704b493a9820414882d30753e11ac0a3_Axis", "attributes": { "UsdGeom:BasisCurves": { - "curveVertexCounts": [314], "points": [ [1166251.87898509, 4888874.76338244, 555.36464031], [1166236.07006807, 4888874.96212701, 556.49955035], @@ -513,7 +507,6 @@ "name": "N9492d2c9f8f74bb7934a619477860449_Axis", "attributes": { "UsdGeom:BasisCurves": { - "curveVertexCounts": [252], "points": [ [1164061.31450826, 4891745.48745995, 707.83133308], [1164066.62164062, 4891731.81990195, 707.49199069], @@ -770,5 +763,5448 @@ ] } } + }, + { + "def": "class", + "type": "UsdGeom:Xform", + "name": "N16dc34f05220439a9a2c482a16c2ebf5", + "children": [ + { + "def": "def", + "type": "UsdGeom:Mesh", + "name": "Body", + "inherits": [ + "" + ] + } + ] + }, + { + "def": "class", + "type": "UsdGeom:Mesh", + "name": "N16dc34f05220439a9a2c482a16c2ebf5_Body" + }, + { + "def": "over", + "name": "N16dc34f05220439a9a2c482a16c2ebf5_Body", + "attributes": { + "UsdGeom:Mesh": { + "faceVertexIndices": [ + 35,18,34, + 36,19,18, + 37,20,19, + 38,21,20, + 39,22,21, + 40,23,22, + 41,24,23, + 42,25,24, + 43,26,25, + 44,27,43, + 45,28,44, + 46,29,45, + 47,30,46, + 48,31,47, + 49,32,48, + 50,33,49, + 52,35,51, + 53,36,35, + 54,37,36, + 55,38,37, + 56,39,38, + 57,40,39, + 58,41,40, + 59,42,41, + 60,43,42, + 61,44,60, + 62,45,61, + 63,46,62, + 64,47,63, + 65,48,64, + 66,49,65, + 67,50,66, + 69,52,68, + 70,53,52, + 71,54,53, + 72,55,54, + 73,56,55, + 74,57,56, + 75,58,57, + 76,59,58, + 77,60,59, + 78,61,77, + 79,62,78, + 80,63,79, + 81,64,80, + 82,65,81, + 83,66,82, + 84,67,83, + 86,69,85, + 87,70,69, + 88,71,70, + 89,72,71, + 90,73,72, + 91,74,73, + 92,75,74, + 93,76,75, + 94,77,76, + 95,78,94, + 96,79,95, + 97,80,96, + 98,81,97, + 99,82,98, + 100,83,99, + 101,84,100, + 103,86,102, + 104,87,86, + 105,88,87, + 106,89,88, + 107,90,89, + 108,91,90, + 109,92,91, + 110,93,92, + 111,94,93, + 112,95,111, + 113,96,112, + 114,97,113, + 115,98,114, + 116,99,115, + 117,100,116, + 118,101,117, + 120,103,119, + 121,104,103, + 122,105,104, + 123,106,105, + 124,107,106, + 125,108,107, + 126,109,108, + 127,110,109, + 128,111,110, + 129,112,128, + 130,113,129, + 131,114,130, + 132,115,131, + 133,116,132, + 134,117,133, + 135,118,134, + 137,120,119, + 138,121,120, + 139,122,121, + 140,123,122, + 141,124,123, + 142,125,124, + 143,126,125, + 144,127,126, + 145,128,144, + 146,129,145, + 147,130,146, + 148,131,147, + 149,132,148, + 150,133,149, + 151,134,150, + 152,135,151, + 154,137,136, + 155,138,137, + 156,139,138, + 157,140,139, + 158,141,140, + 159,142,141, + 160,143,142, + 161,144,143, + 162,145,161, + 163,146,162, + 164,147,163, + 165,148,164, + 166,149,165, + 167,150,166, + 168,151,167, + 169,152,168, + 171,154,153, + 172,155,154, + 173,156,155, + 174,157,156, + 175,158,157, + 176,159,158, + 177,160,159, + 178,161,160, + 179,162,178, + 180,163,179, + 181,164,180, + 182,165,181, + 183,166,182, + 184,167,183, + 185,168,184, + 186,169,185, + 188,171,170, + 189,172,171, + 190,173,172, + 191,174,173, + 192,175,174, + 193,176,175, + 194,177,176, + 195,178,177, + 196,179,195, + 197,180,196, + 198,181,197, + 199,182,198, + 200,183,199, + 201,184,200, + 202,185,201, + 203,186,202, + 205,188,187, + 206,189,188, + 207,190,189, + 208,191,190, + 209,192,191, + 210,193,192, + 211,194,193, + 212,195,194, + 213,196,212, + 214,197,213, + 215,198,214, + 216,199,215, + 217,200,216, + 218,201,217, + 219,202,218, + 220,203,219, + 222,205,204, + 223,206,205, + 224,207,206, + 225,208,207, + 226,209,208, + 227,210,209, + 228,211,210, + 229,212,211, + 230,213,229, + 231,214,230, + 232,215,231, + 233,216,232, + 234,217,233, + 235,218,234, + 236,219,235, + 237,220,236, + 239,222,221, + 240,223,222, + 241,224,223, + 242,225,224, + 243,226,225, + 244,227,226, + 245,228,227, + 246,229,228, + 247,230,246, + 248,231,247, + 249,232,248, + 250,233,249, + 251,234,250, + 252,235,251, + 253,236,252, + 254,237,253, + 256,239,238, + 257,240,239, + 258,241,240, + 259,242,241, + 260,243,242, + 261,244,243, + 262,245,244, + 263,246,245, + 264,247,263, + 265,248,264, + 266,249,265, + 267,250,266, + 268,251,267, + 269,252,268, + 270,253,269, + 271,254,270, + 273,256,255, + 274,257,256, + 275,258,257, + 276,259,258, + 277,260,259, + 278,261,260, + 279,262,261, + 280,263,262, + 281,264,280, + 282,265,281, + 283,266,282, + 284,267,283, + 285,268,284, + 286,269,285, + 287,270,286, + 288,271,287, + 290,273,272, + 291,274,273, + 292,275,274, + 293,276,275, + 294,277,276, + 295,278,277, + 296,279,278, + 297,280,279, + 298,281,297, + 299,282,298, + 300,283,299, + 301,284,300, + 302,285,301, + 303,286,302, + 304,287,303, + 305,288,304, + 307,290,289, + 308,291,290, + 309,292,291, + 310,293,292, + 311,294,293, + 312,295,294, + 313,296,295, + 314,297,296, + 315,298,314, + 316,299,315, + 317,300,316, + 318,301,317, + 319,302,318, + 320,303,319, + 321,304,320, + 322,305,321, + 324,307,306, + 325,308,307, + 326,309,308, + 327,310,309, + 328,311,310, + 329,312,311, + 330,313,312, + 331,314,313, + 332,315,331, + 333,316,332, + 334,317,333, + 335,318,334, + 336,319,335, + 337,320,336, + 338,321,337, + 339,322,338, + 341,324,323, + 342,325,324, + 343,326,325, + 344,327,326, + 345,328,327, + 346,329,328, + 347,330,329, + 348,331,330, + 349,332,348, + 350,333,349, + 351,334,350, + 352,335,351, + 353,336,352, + 354,337,353, + 355,338,354, + 356,339,355, + 358,341,340, + 359,342,341, + 360,343,342, + 361,344,343, + 362,345,344, + 363,346,345, + 364,347,346, + 365,348,347, + 366,349,365, + 367,350,366, + 368,351,367, + 369,352,368, + 370,353,369, + 371,354,370, + 372,355,371, + 373,356,372, + 375,358,357, + 376,359,358, + 377,360,359, + 378,361,360, + 379,362,361, + 380,363,362, + 381,364,363, + 382,365,364, + 383,366,382, + 384,367,383, + 385,368,384, + 386,369,385, + 387,370,386, + 388,371,387, + 389,372,388, + 390,373,389, + 392,375,374, + 393,376,375, + 394,377,376, + 395,378,377, + 396,379,378, + 397,380,379, + 398,381,380, + 399,382,381, + 400,383,399, + 401,384,400, + 402,385,401, + 403,386,402, + 404,387,403, + 405,388,404, + 406,389,405, + 407,390,406, + 409,392,391, + 410,393,392, + 411,394,393, + 412,395,394, + 413,396,395, + 414,397,396, + 415,398,397, + 416,399,398, + 417,400,416, + 418,401,417, + 419,402,418, + 420,403,419, + 421,404,420, + 422,405,421, + 423,406,422, + 424,407,423, + 426,409,408, + 427,410,409, + 428,411,410, + 429,412,411, + 430,413,412, + 431,414,413, + 432,415,414, + 1820,416,415, + 434,417,1821, + 435,418,434, + 436,419,435, + 437,420,436, + 438,421,437, + 439,422,438, + 440,423,439, + 1822,424,440, + 443,426,442, + 444,427,443, + 445,428,444, + 446,429,445, + 447,430,446, + 448,431,447, + 449,432,448, + 450,433,449, + 451,434,433, + 452,435,434, + 453,436,435, + 454,437,436, + 455,438,437, + 456,439,438, + 457,440,439, + 458,441,440, + 460,443,459, + 461,444,460, + 462,445,461, + 463,446,462, + 464,447,463, + 465,448,464, + 466,449,465, + 467,450,466, + 468,451,450, + 469,452,451, + 470,453,452, + 471,454,453, + 472,455,454, + 473,456,455, + 474,457,456, + 475,458,457, + 477,460,476, + 478,461,477, + 479,462,478, + 480,463,479, + 481,464,480, + 482,465,481, + 483,466,482, + 484,467,483, + 485,468,467, + 486,469,468, + 487,470,469, + 488,471,470, + 489,472,471, + 490,473,472, + 491,474,473, + 492,475,474, + 494,477,493, + 495,478,494, + 496,479,495, + 497,480,496, + 498,481,497, + 499,482,498, + 500,483,499, + 501,484,500, + 502,485,484, + 503,486,485, + 504,487,486, + 505,488,487, + 506,489,488, + 507,490,489, + 508,491,490, + 509,492,491, + 511,494,510, + 512,495,511, + 513,496,512, + 514,497,513, + 515,498,514, + 516,499,515, + 517,500,516, + 518,501,517, + 519,502,501, + 520,503,502, + 521,504,503, + 522,505,504, + 523,506,505, + 524,507,506, + 525,508,507, + 526,509,508, + 528,511,527, + 529,512,528, + 530,513,529, + 531,514,530, + 532,515,531, + 533,516,532, + 534,517,533, + 535,518,534, + 536,519,518, + 537,520,519, + 538,521,520, + 539,522,521, + 540,523,522, + 541,524,523, + 542,525,524, + 543,526,525, + 545,528,544, + 546,529,545, + 547,530,546, + 548,531,547, + 549,532,548, + 550,533,549, + 551,534,550, + 552,535,551, + 553,536,535, + 554,537,536, + 555,538,537, + 556,539,538, + 557,540,539, + 558,541,540, + 559,542,541, + 560,543,542, + 562,545,561, + 563,546,562, + 564,547,563, + 565,548,564, + 566,549,565, + 567,550,566, + 568,551,567, + 569,552,568, + 570,553,552, + 571,554,553, + 572,555,554, + 573,556,555, + 574,557,556, + 575,558,557, + 576,559,558, + 577,560,559, + 579,562,578, + 580,563,579, + 581,564,580, + 582,565,581, + 583,566,582, + 584,567,583, + 585,568,584, + 586,569,585, + 587,570,569, + 588,571,570, + 589,572,571, + 590,573,572, + 591,574,573, + 592,575,574, + 593,576,575, + 594,577,576, + 596,579,595, + 597,580,596, + 598,581,597, + 599,582,598, + 600,583,599, + 601,584,600, + 602,585,601, + 603,586,602, + 604,587,586, + 605,588,587, + 606,589,588, + 607,590,589, + 608,591,590, + 609,592,591, + 610,593,592, + 611,594,593, + 613,596,612, + 614,597,613, + 615,598,614, + 616,599,615, + 617,600,616, + 618,601,617, + 619,602,618, + 620,603,619, + 621,604,603, + 622,605,604, + 623,606,605, + 624,607,606, + 625,608,607, + 626,609,608, + 627,610,609, + 628,611,610, + 630,613,629, + 631,614,630, + 632,615,631, + 633,616,632, + 634,617,633, + 635,618,634, + 636,619,635, + 637,620,636, + 638,621,620, + 639,622,621, + 640,623,622, + 641,624,623, + 642,625,624, + 643,626,625, + 644,627,626, + 645,628,627, + 647,630,646, + 648,631,647, + 649,632,648, + 650,633,649, + 651,634,650, + 652,635,651, + 653,636,652, + 654,637,653, + 655,638,637, + 656,639,638, + 657,640,639, + 658,641,640, + 659,642,641, + 660,643,642, + 661,644,643, + 662,645,644, + 664,647,663, + 665,648,664, + 666,649,665, + 667,650,666, + 668,651,667, + 669,652,668, + 670,653,669, + 671,654,670, + 672,655,654, + 673,656,655, + 674,657,656, + 675,658,657, + 676,659,658, + 677,660,659, + 678,661,660, + 679,662,661, + 681,664,680, + 682,665,681, + 683,666,682, + 684,667,683, + 685,668,684, + 686,669,685, + 687,670,686, + 688,671,687, + 689,672,671, + 690,673,672, + 691,674,673, + 692,675,674, + 693,676,675, + 694,677,676, + 695,678,677, + 696,679,678, + 698,681,680, + 699,682,681, + 700,683,682, + 701,684,683, + 702,685,684, + 703,686,685, + 704,687,686, + 705,688,687, + 706,689,705, + 707,690,706, + 708,691,707, + 709,692,708, + 710,693,709, + 711,694,710, + 712,695,711, + 713,696,712, + 715,698,697, + 716,699,698, + 717,700,699, + 718,701,700, + 719,702,701, + 720,703,702, + 721,704,703, + 722,705,704, + 723,706,722, + 724,707,723, + 725,708,724, + 726,709,725, + 727,710,726, + 728,711,727, + 729,712,728, + 730,713,729, + 732,715,714, + 733,716,715, + 734,717,716, + 735,718,717, + 736,719,718, + 737,720,719, + 738,721,720, + 739,722,721, + 740,723,739, + 741,724,740, + 742,725,741, + 743,726,742, + 744,727,743, + 745,728,744, + 746,729,745, + 747,730,746, + 749,732,731, + 750,733,732, + 751,734,733, + 752,735,734, + 753,736,735, + 754,737,736, + 755,738,737, + 756,739,738, + 757,740,756, + 758,741,757, + 759,742,758, + 760,743,759, + 761,744,760, + 762,745,761, + 763,746,762, + 764,747,763, + 766,749,748, + 767,750,749, + 768,751,750, + 769,752,751, + 770,753,752, + 771,754,753, + 772,755,754, + 773,756,755, + 774,757,773, + 775,758,774, + 776,759,775, + 777,760,776, + 778,761,777, + 779,762,778, + 780,763,779, + 781,764,780, + 783,766,765, + 784,767,766, + 785,768,767, + 786,769,768, + 787,770,769, + 788,771,770, + 789,772,771, + 790,773,772, + 791,774,790, + 792,775,791, + 793,776,792, + 794,777,793, + 795,778,794, + 796,779,795, + 797,780,796, + 798,781,797, + 800,783,782, + 801,784,783, + 802,785,784, + 803,786,785, + 804,787,786, + 805,788,787, + 806,789,788, + 807,790,789, + 808,791,807, + 809,792,808, + 810,793,809, + 811,794,810, + 812,795,811, + 813,796,812, + 814,797,813, + 815,798,814, + 817,800,799, + 818,801,800, + 819,802,801, + 820,803,802, + 821,804,803, + 822,805,804, + 823,806,805, + 824,807,806, + 825,808,824, + 826,809,825, + 827,810,826, + 828,811,827, + 829,812,828, + 830,813,829, + 831,814,830, + 832,815,831, + 834,817,816, + 835,818,817, + 836,819,818, + 837,820,819, + 838,821,820, + 839,822,821, + 840,823,822, + 841,824,823, + 842,825,841, + 843,826,842, + 844,827,843, + 845,828,844, + 846,829,845, + 847,830,846, + 848,831,847, + 849,832,848, + 851,834,833, + 852,835,834, + 853,836,835, + 854,837,836, + 855,838,837, + 856,839,838, + 857,840,839, + 858,841,840, + 859,842,858, + 860,843,859, + 861,844,860, + 862,845,861, + 863,846,862, + 864,847,863, + 865,848,864, + 866,849,865, + 868,851,850, + 869,852,851, + 870,853,852, + 871,854,853, + 872,855,854, + 873,856,855, + 874,857,856, + 875,858,857, + 876,859,875, + 877,860,876, + 878,861,877, + 879,862,878, + 880,863,879, + 881,864,880, + 882,865,881, + 883,866,882, + 885,868,867, + 886,869,868, + 887,870,869, + 888,871,870, + 889,872,871, + 890,873,872, + 891,874,873, + 892,875,874, + 893,876,892, + 894,877,893, + 895,878,894, + 896,879,895, + 897,880,896, + 898,881,897, + 899,882,898, + 900,883,899, + 902,885,884, + 903,886,885, + 904,887,886, + 905,888,887, + 906,889,888, + 907,890,889, + 908,891,890, + 909,892,891, + 910,893,909, + 911,894,910, + 912,895,911, + 913,896,912, + 914,897,913, + 915,898,914, + 916,899,915, + 917,900,916, + 919,902,901, + 920,903,902, + 921,904,903, + 922,905,904, + 923,906,905, + 924,907,906, + 925,908,907, + 926,909,908, + 927,910,926, + 928,911,927, + 929,912,928, + 930,913,929, + 931,914,930, + 932,915,931, + 933,916,932, + 934,917,933, + 936,919,918, + 937,920,919, + 938,921,920, + 939,922,921, + 940,923,922, + 941,924,923, + 942,925,924, + 943,926,925, + 944,927,943, + 945,928,944, + 946,929,945, + 947,930,946, + 948,931,947, + 949,932,948, + 950,933,949, + 951,934,950, + 1823,936,935, + 954,937,936, + 955,938,937, + 956,939,938, + 957,940,939, + 958,941,940, + 1826,942,941, + 1827,943,942, + 1829,944,1830, + 962,945,1831, + 963,946,962, + 964,947,963, + 965,948,964, + 966,949,965, + 1832,950,966, + 1833,951,1834, + 970,953,1835, + 971,954,970, + 972,955,971, + 973,956,972, + 974,957,973, + 975,958,974, + 976,959,975, + 1836,960,976, + 978,961,960, + 979,962,961, + 980,963,962, + 981,964,963, + 982,965,964, + 983,966,965, + 984,967,966, + 1838,968,967, + 987,970,986, + 988,971,987, + 989,972,988, + 990,973,989, + 991,974,990, + 992,975,991, + 993,976,992, + 994,977,993, + 995,978,977, + 996,979,978, + 997,980,979, + 998,981,980, + 999,982,981, + 1000,983,982, + 1001,984,983, + 1002,985,984, + 1839,987,986, + 1841,988,987, + 1006,989,988, + 1007,990,989, + 1008,991,990, + 1844,992,991, + 1845,993,992, + 1847,994,993, + 1849,995,1850, + 1851,996,1852, + 1014,997,1853, + 1015,998,1014, + 1016,999,1015, + 1854,1000,1016, + 1855,1001,1856, + 1857,1002,1858, + 1021,1004,1020, + 1022,1005,1021, + 1023,1006,1022, + 1024,1007,1023, + 1025,1008,1024, + 1026,1009,1025, + 1027,1010,1026, + 1028,1011,1027, + 1029,1012,1011, + 1030,1013,1012, + 1031,1014,1013, + 1032,1015,1014, + 1033,1016,1015, + 1034,1017,1016, + 1035,1018,1017, + 1036,1019,1018, + 1859,1021,1860, + 1861,1022,1862, + 1040,1023,1863, + 1041,1024,1040, + 1042,1025,1041, + 1864,1026,1042, + 1865,1027,1866, + 1867,1028,1868, + 1869,1029,1028, + 1871,1030,1029, + 1048,1031,1030, + 1049,1032,1031, + 1050,1033,1032, + 1874,1034,1033, + 1875,1035,1034, + 1877,1036,1035, + 1055,1038,1037, + 1056,1039,1038, + 1057,1040,1039, + 1058,1041,1040, + 1059,1042,1041, + 1060,1043,1042, + 1061,1044,1043, + 1062,1045,1044, + 1063,1046,1062, + 1064,1047,1063, + 1065,1048,1064, + 1066,1049,1065, + 1067,1050,1066, + 1068,1051,1067, + 1069,1052,1068, + 1070,1053,1069, + 1879,1055,1054, + 1881,1056,1055, + 1074,1057,1056, + 1075,1058,1057, + 1076,1059,1058, + 1884,1060,1059, + 1885,1061,1060, + 1887,1062,1061, + 1889,1063,1890, + 1891,1064,1892, + 1082,1065,1893, + 1083,1066,1082, + 1084,1067,1083, + 1894,1068,1084, + 1895,1069,1896, + 1897,1070,1898, + 1089,1072,1088, + 1090,1073,1089, + 1091,1074,1090, + 1092,1075,1091, + 1093,1076,1092, + 1094,1077,1093, + 1095,1078,1094, + 1096,1079,1095, + 1097,1080,1079, + 1098,1081,1080, + 1099,1082,1081, + 1100,1083,1082, + 1101,1084,1083, + 1102,1085,1084, + 1103,1086,1085, + 1104,1087,1086, + 1106,1089,1088, + 1107,1090,1089, + 1108,1091,1090, + 1109,1092,1091, + 1110,1093,1092, + 1111,1094,1093, + 1112,1095,1094, + 1900,1096,1095, + 1114,1097,1901, + 1115,1098,1114, + 1116,1099,1115, + 1117,1100,1116, + 1118,1101,1117, + 1119,1102,1118, + 1120,1103,1119, + 1902,1104,1120, + 1123,1106,1122, + 1124,1107,1123, + 1125,1108,1124, + 1126,1109,1125, + 1127,1110,1126, + 1128,1111,1127, + 1129,1112,1128, + 1130,1113,1129, + 1131,1114,1113, + 1132,1115,1114, + 1133,1116,1115, + 1134,1117,1116, + 1135,1118,1117, + 1136,1119,1118, + 1137,1120,1119, + 1138,1121,1120, + 1140,1123,1139, + 1141,1124,1140, + 1142,1125,1141, + 1143,1126,1142, + 1144,1127,1143, + 1145,1128,1144, + 1146,1129,1145, + 1147,1130,1146, + 1148,1131,1130, + 1149,1132,1131, + 1150,1133,1132, + 1151,1134,1133, + 1152,1135,1134, + 1153,1136,1135, + 1154,1137,1136, + 1155,1138,1137, + 1157,1140,1139, + 1158,1141,1140, + 1159,1142,1141, + 1160,1143,1142, + 1161,1144,1143, + 1162,1145,1144, + 1163,1146,1145, + 1164,1147,1146, + 1165,1148,1164, + 1166,1149,1165, + 1167,1150,1166, + 1168,1151,1167, + 1169,1152,1168, + 1170,1153,1169, + 1171,1154,1170, + 1172,1155,1171, + 1174,1157,1156, + 1175,1158,1157, + 1176,1159,1158, + 1177,1160,1159, + 1178,1161,1160, + 1179,1162,1161, + 1180,1163,1162, + 1181,1164,1163, + 1182,1165,1181, + 1183,1166,1182, + 1184,1167,1183, + 1185,1168,1184, + 1186,1169,1185, + 1187,1170,1186, + 1188,1171,1187, + 1189,1172,1188, + 1191,1174,1190, + 1192,1175,1191, + 1193,1176,1192, + 1194,1177,1193, + 1195,1178,1194, + 1196,1179,1195, + 1197,1180,1196, + 1198,1181,1197, + 1199,1182,1181, + 1200,1183,1182, + 1201,1184,1183, + 1202,1185,1184, + 1203,1186,1185, + 1204,1187,1186, + 1205,1188,1187, + 1206,1189,1188, + 1903,1191,1190, + 1209,1192,1191, + 1210,1193,1192, + 1211,1194,1193, + 1212,1195,1194, + 1213,1196,1195, + 1906,1197,1196, + 1907,1198,1197, + 1909,1199,1910, + 1217,1200,1911, + 1218,1201,1217, + 1219,1202,1218, + 1220,1203,1219, + 1221,1204,1220, + 1912,1205,1221, + 1913,1206,1914, + 1915,1208,1916, + 1226,1209,1917, + 1227,1210,1226, + 1228,1211,1227, + 1229,1212,1228, + 1230,1213,1229, + 1918,1214,1230, + 1919,1215,1920, + 1921,1216,1215, + 1234,1217,1216, + 1235,1218,1217, + 1236,1219,1218, + 1237,1220,1219, + 1238,1221,1220, + 1924,1222,1221, + 1925,1223,1222, + 1242,1225,1241, + 1243,1226,1242, + 1244,1227,1243, + 1245,1228,1244, + 1246,1229,1245, + 1247,1230,1246, + 1248,1231,1247, + 1249,1232,1248, + 1250,1233,1232, + 1251,1234,1233, + 1252,1235,1234, + 1253,1236,1235, + 1254,1237,1236, + 1255,1238,1237, + 1256,1239,1238, + 1257,1240,1239, + 1259,1242,1258, + 1260,1243,1259, + 1261,1244,1260, + 1262,1245,1261, + 1263,1246,1262, + 1264,1247,1263, + 1265,1248,1264, + 1266,1249,1265, + 1267,1250,1249, + 1268,1251,1250, + 1269,1252,1251, + 1270,1253,1252, + 1271,1254,1253, + 1272,1255,1254, + 1273,1256,1255, + 1274,1257,1256, + 1276,1259,1258, + 1277,1260,1259, + 1278,1261,1260, + 1279,1262,1261, + 1280,1263,1262, + 1281,1264,1263, + 1282,1265,1264, + 1283,1266,1265, + 1284,1267,1283, + 1285,1268,1284, + 1286,1269,1285, + 1287,1270,1286, + 1288,1271,1287, + 1289,1272,1288, + 1290,1273,1289, + 1291,1274,1290, + 1293,1276,1275, + 1294,1277,1276, + 1295,1278,1277, + 1296,1279,1278, + 1297,1280,1279, + 1298,1281,1280, + 1299,1282,1281, + 1300,1283,1282, + 1301,1284,1300, + 1302,1285,1301, + 1303,1286,1302, + 1304,1287,1303, + 1305,1288,1304, + 1306,1289,1305, + 1307,1290,1306, + 1308,1291,1307, + 1310,1293,1309, + 1311,1294,1310, + 1312,1295,1311, + 1313,1296,1312, + 1314,1297,1313, + 1315,1298,1314, + 1316,1299,1315, + 1317,1300,1316, + 1318,1301,1300, + 1319,1302,1301, + 1320,1303,1302, + 1321,1304,1303, + 1322,1305,1304, + 1323,1306,1305, + 1324,1307,1306, + 1325,1308,1307, + 1327,1310,1326, + 1328,1311,1327, + 1329,1312,1328, + 1330,1313,1329, + 1331,1314,1330, + 1332,1315,1331, + 1333,1316,1332, + 1334,1317,1333, + 1335,1318,1317, + 1336,1319,1318, + 1337,1320,1319, + 1338,1321,1320, + 1339,1322,1321, + 1340,1323,1322, + 1341,1324,1323, + 1342,1325,1324, + 1344,1327,1343, + 1345,1328,1344, + 1346,1329,1345, + 1347,1330,1346, + 1348,1331,1347, + 1349,1332,1348, + 1350,1333,1349, + 1351,1334,1350, + 1352,1335,1334, + 1353,1336,1335, + 1354,1337,1336, + 1355,1338,1337, + 1356,1339,1338, + 1357,1340,1339, + 1358,1341,1340, + 1359,1342,1341, + 1361,1344,1360, + 1362,1345,1361, + 1363,1346,1362, + 1364,1347,1363, + 1365,1348,1364, + 1366,1349,1365, + 1367,1350,1366, + 1368,1351,1367, + 1369,1352,1351, + 1370,1353,1352, + 1371,1354,1353, + 1372,1355,1354, + 1373,1356,1355, + 1374,1357,1356, + 1375,1358,1357, + 1376,1359,1358, + 1378,1361,1377, + 1379,1362,1378, + 1380,1363,1379, + 1381,1364,1380, + 1382,1365,1381, + 1383,1366,1382, + 1384,1367,1383, + 1385,1368,1384, + 1386,1369,1368, + 1387,1370,1369, + 1388,1371,1370, + 1389,1372,1371, + 1390,1373,1372, + 1391,1374,1373, + 1392,1375,1374, + 1393,1376,1375, + 1395,1378,1394, + 1396,1379,1395, + 1397,1380,1396, + 1398,1381,1397, + 1399,1382,1398, + 1400,1383,1399, + 1401,1384,1400, + 1402,1385,1401, + 1403,1386,1385, + 1404,1387,1386, + 1405,1388,1387, + 1406,1389,1388, + 1407,1390,1389, + 1408,1391,1390, + 1409,1392,1391, + 1410,1393,1392, + 1412,1395,1411, + 1413,1396,1412, + 1414,1397,1413, + 1415,1398,1414, + 1416,1399,1415, + 1417,1400,1416, + 1418,1401,1417, + 1419,1402,1418, + 1420,1403,1402, + 1421,1404,1403, + 1422,1405,1404, + 1423,1406,1405, + 1424,1407,1406, + 1425,1408,1407, + 1426,1409,1408, + 1427,1410,1409, + 1429,1412,1428, + 1430,1413,1429, + 1431,1414,1430, + 1432,1415,1431, + 1433,1416,1432, + 1434,1417,1433, + 1435,1418,1434, + 1436,1419,1435, + 1437,1420,1419, + 1438,1421,1420, + 1439,1422,1421, + 1440,1423,1422, + 1441,1424,1423, + 1442,1425,1424, + 1443,1426,1425, + 1444,1427,1426, + 1446,1429,1428, + 1447,1430,1429, + 1448,1431,1430, + 1449,1432,1431, + 1450,1433,1432, + 1451,1434,1433, + 1452,1435,1434, + 1453,1436,1435, + 1454,1437,1453, + 1455,1438,1454, + 1456,1439,1455, + 1457,1440,1456, + 1458,1441,1457, + 1459,1442,1458, + 1460,1443,1459, + 1461,1444,1460, + 1463,1446,1462, + 1464,1447,1463, + 1465,1448,1464, + 1466,1449,1465, + 1467,1450,1466, + 1468,1451,1467, + 1469,1452,1468, + 1470,1453,1469, + 1471,1454,1453, + 1472,1455,1454, + 1473,1456,1455, + 1474,1457,1456, + 1475,1458,1457, + 1476,1459,1458, + 1477,1460,1459, + 1478,1461,1460, + 1480,1463,1462, + 1481,1464,1463, + 1482,1465,1464, + 1483,1466,1465, + 1484,1467,1466, + 1485,1468,1467, + 1486,1469,1468, + 1487,1470,1469, + 1488,1471,1487, + 1489,1472,1488, + 1490,1473,1489, + 1491,1474,1490, + 1492,1475,1491, + 1493,1476,1492, + 1494,1477,1493, + 1495,1478,1494, + 1497,1480,1479, + 1498,1481,1480, + 1499,1482,1481, + 1500,1483,1482, + 1501,1484,1483, + 1502,1485,1484, + 1503,1486,1485, + 1504,1487,1486, + 1505,1488,1504, + 1506,1489,1505, + 1507,1490,1506, + 1508,1491,1507, + 1509,1492,1508, + 1510,1493,1509, + 1511,1494,1510, + 1512,1495,1511, + 1514,1497,1496, + 1515,1498,1497, + 1516,1499,1498, + 1517,1500,1499, + 1518,1501,1500, + 1519,1502,1501, + 1520,1503,1502, + 1521,1504,1503, + 1522,1505,1521, + 1523,1506,1522, + 1524,1507,1523, + 1525,1508,1524, + 1526,1509,1525, + 1527,1510,1526, + 1528,1511,1527, + 1529,1512,1528, + 1531,1514,1513, + 1532,1515,1514, + 1533,1516,1515, + 1534,1517,1516, + 1535,1518,1517, + 1536,1519,1518, + 1537,1520,1519, + 1538,1521,1520, + 1539,1522,1538, + 1540,1523,1539, + 1541,1524,1540, + 1542,1525,1541, + 1543,1526,1542, + 1544,1527,1543, + 1545,1528,1544, + 1546,1529,1545, + 1548,1531,1530, + 1549,1532,1531, + 1550,1533,1532, + 1551,1534,1533, + 1552,1535,1534, + 1553,1536,1535, + 1554,1537,1536, + 1555,1538,1537, + 1556,1539,1555, + 1557,1540,1556, + 1558,1541,1557, + 1559,1542,1558, + 1560,1543,1559, + 1561,1544,1560, + 1562,1545,1561, + 1563,1546,1562, + 1565,1548,1547, + 1566,1549,1548, + 1567,1550,1549, + 1568,1551,1550, + 1569,1552,1551, + 1570,1553,1552, + 1571,1554,1553, + 1572,1555,1554, + 1573,1556,1572, + 1574,1557,1573, + 1575,1558,1574, + 1576,1559,1575, + 1577,1560,1576, + 1578,1561,1577, + 1579,1562,1578, + 1580,1563,1579, + 1582,1565,1581, + 1583,1566,1582, + 1584,1567,1583, + 1585,1568,1584, + 1586,1569,1585, + 1587,1570,1586, + 1588,1571,1587, + 1589,1572,1588, + 1590,1573,1572, + 1591,1574,1573, + 1592,1575,1574, + 1593,1576,1575, + 1594,1577,1576, + 1595,1578,1577, + 1596,1579,1578, + 1597,1580,1579, + 1599,1582,1598, + 1600,1583,1599, + 1601,1584,1600, + 1602,1585,1601, + 1603,1586,1602, + 1604,1587,1603, + 1605,1588,1604, + 1606,1589,1605, + 1607,1590,1589, + 1608,1591,1590, + 1609,1592,1591, + 1610,1593,1592, + 1611,1594,1593, + 1612,1595,1594, + 1613,1596,1595, + 1614,1597,1596, + 1616,1599,1615, + 1617,1600,1616, + 1618,1601,1617, + 1619,1602,1618, + 1620,1603,1619, + 1621,1604,1620, + 1622,1605,1621, + 1623,1606,1622, + 1624,1607,1606, + 1625,1608,1607, + 1626,1609,1608, + 1627,1610,1609, + 1628,1611,1610, + 1629,1612,1611, + 1630,1613,1612, + 1631,1614,1613, + 1633,1616,1615, + 1634,1617,1616, + 1635,1618,1617, + 1636,1619,1618, + 1637,1620,1619, + 1638,1621,1620, + 1639,1622,1621, + 1640,1623,1622, + 1641,1624,1640, + 1642,1625,1641, + 1643,1626,1642, + 1644,1627,1643, + 1645,1628,1644, + 1646,1629,1645, + 1647,1630,1646, + 1648,1631,1647, + 1650,1633,1632, + 1651,1634,1633, + 1652,1635,1634, + 1653,1636,1635, + 1654,1637,1636, + 1655,1638,1637, + 1656,1639,1638, + 1657,1640,1639, + 1658,1641,1657, + 1659,1642,1658, + 1660,1643,1659, + 1661,1644,1660, + 1662,1645,1661, + 1663,1646,1662, + 1664,1647,1663, + 1665,1648,1664, + 1667,1650,1649, + 1668,1651,1650, + 1669,1652,1651, + 1670,1653,1652, + 1671,1654,1653, + 1672,1655,1654, + 1673,1656,1655, + 1674,1657,1656, + 1675,1658,1674, + 1676,1659,1675, + 1677,1660,1676, + 1678,1661,1677, + 1679,1662,1678, + 1680,1663,1679, + 1681,1664,1680, + 1682,1665,1681, + 1684,1667,1666, + 1685,1668,1667, + 1686,1669,1668, + 1687,1670,1669, + 1688,1671,1670, + 1689,1672,1671, + 1690,1673,1672, + 1691,1674,1673, + 1692,1675,1691, + 1693,1676,1692, + 1694,1677,1693, + 1695,1678,1694, + 1696,1679,1695, + 1697,1680,1696, + 1698,1681,1697, + 1699,1682,1698, + 1701,1684,1683, + 1702,1685,1684, + 1703,1686,1685, + 1704,1687,1686, + 1705,1688,1687, + 1706,1689,1688, + 1707,1690,1689, + 1708,1691,1690, + 1709,1692,1708, + 1710,1693,1709, + 1711,1694,1710, + 1712,1695,1711, + 1713,1696,1712, + 1714,1697,1713, + 1715,1698,1714, + 1716,1699,1715, + 1927,1701,1928, + 1929,1702,1701, + 1720,1703,1702, + 1721,1704,1703, + 1722,1705,1704, + 1723,1706,1705, + 1932,1707,1706, + 1933,1708,1707, + 1935,1709,1708, + 1937,1710,1938, + 1728,1711,1939, + 1729,1712,1728, + 1730,1713,1729, + 1731,1714,1730, + 1940,1715,1731, + 1941,1716,1942, + 1943,1718,1717, + 1945,1719,1718, + 1737,1720,1719, + 1738,1721,1720, + 1739,1722,1721, + 1740,1723,1722, + 1948,1724,1723, + 1949,1725,1724, + 1951,1726,1952, + 1953,1727,1954, + 1745,1728,1955, + 1746,1729,1745, + 1747,1730,1746, + 1748,1731,1747, + 1956,1732,1748, + 1957,1733,1958, + 1752,1735,1751, + 1753,1736,1752, + 1754,1737,1753, + 1755,1738,1754, + 1756,1739,1755, + 1757,1740,1756, + 1758,1741,1757, + 1759,1742,1758, + 1760,1743,1742, + 1761,1744,1743, + 1762,1745,1744, + 1763,1746,1745, + 1764,1747,1746, + 1765,1748,1747, + 1766,1749,1748, + 1767,1750,1749, + 1769,1752,1768, + 1770,1753,1769, + 1771,1754,1770, + 1772,1755,1771, + 1773,1756,1772, + 1774,1757,1773, + 1775,1758,1774, + 1776,1759,1758, + 1777,1760,1759, + 1778,1761,1760, + 1779,1762,1761, + 1780,1763,1762, + 1781,1764,1763, + 1782,1765,1764, + 1783,1766,1765, + 1784,1767,1783, + 1786,1769,1785, + 1787,1770,1786, + 1788,1771,1787, + 1789,1772,1788, + 1790,1773,1789, + 1791,1774,1790, + 1792,1775,1774, + 1793,1776,1775, + 1794,1777,1776, + 1795,1778,1777, + 1796,1779,1778, + 1797,1780,1779, + 1798,1781,1780, + 1799,1782,1781, + 1800,1783,1799, + 1801,1784,1800, + 1,0,17, + 3,2,20, + 2,1,19, + 5,4,22, + 7,6,24, + 6,5,23, + 4,3,21, + 8,7,25, + 10,9,26, + 12,11,28, + 11,10,27, + 14,13,30, + 16,15,32, + 15,14,31, + 13,12,29, + 25,26,8, + 1786,1785,1802, + 1788,1787,1804, + 1787,1786,1803, + 1818,1790,1789, + 1792,1791,1808, + 1791,1790,1807, + 1789,1788,1805, + 1790,1818,1807, + 1818,1789,1806, + 1793,1792,1809, + 1795,1794,1811, + 1797,1796,1813, + 1796,1795,1812, + 1799,1798,1815, + 1801,1800,1816, + 1800,1799,1815, + 1798,1797,1814, + 1809,1810,1793, + 1969,1968,1967, + 1966,1969,1967, + 1966,1961,1969, + 1964,1966,1965, + 1966,1964,1963, + 1961,1966,1963, + 1971,1970,1969, + 1969,1973,1972, + 1973,1969,1974, + 1974,1969,1961, + 1962,1961,1963, + 1961,1960,1959, + 1961,1959,1974, + 1972,1971,1969, + 1985,1983,1984, + 1985,1986,1987, + 1987,1983,1985, + 1979,1982,1983, + 1982,1979,1981, + 1981,1979,1980, + 1983,1987,1988, + 1990,1988,1989, + 1977,1988,1990, + 1975,1977,1990, + 1977,1978,1979, + 1988,1977,1979, + 1977,1975,1976, + 1983,1988,1979, + 18,17,34, + 36,18,35, + 37,19,36, + 38,20,37, + 39,21,38, + 40,22,39, + 41,23,40, + 42,24,41, + 43,25,42, + 27,26,43, + 28,27,44, + 29,28,45, + 30,29,46, + 31,30,47, + 32,31,48, + 33,32,49, + 35,34,51, + 53,35,52, + 54,36,53, + 55,37,54, + 56,38,55, + 57,39,56, + 58,40,57, + 59,41,58, + 60,42,59, + 44,43,60, + 45,44,61, + 46,45,62, + 47,46,63, + 48,47,64, + 49,48,65, + 50,49,66, + 52,51,68, + 70,52,69, + 71,53,70, + 72,54,71, + 73,55,72, + 74,56,73, + 75,57,74, + 76,58,75, + 77,59,76, + 61,60,77, + 62,61,78, + 63,62,79, + 64,63,80, + 65,64,81, + 66,65,82, + 67,66,83, + 69,68,85, + 87,69,86, + 88,70,87, + 89,71,88, + 90,72,89, + 91,73,90, + 92,74,91, + 93,75,92, + 94,76,93, + 78,77,94, + 79,78,95, + 80,79,96, + 81,80,97, + 82,81,98, + 83,82,99, + 84,83,100, + 86,85,102, + 104,86,103, + 105,87,104, + 106,88,105, + 107,89,106, + 108,90,107, + 109,91,108, + 110,92,109, + 111,93,110, + 95,94,111, + 96,95,112, + 97,96,113, + 98,97,114, + 99,98,115, + 100,99,116, + 101,100,117, + 103,102,119, + 121,103,120, + 122,104,121, + 123,105,122, + 124,106,123, + 125,107,124, + 126,108,125, + 127,109,126, + 128,110,127, + 112,111,128, + 113,112,129, + 114,113,130, + 115,114,131, + 116,115,132, + 117,116,133, + 118,117,134, + 137,119,136, + 138,120,137, + 139,121,138, + 140,122,139, + 141,123,140, + 142,124,141, + 143,125,142, + 144,126,143, + 128,127,144, + 129,128,145, + 130,129,146, + 131,130,147, + 132,131,148, + 133,132,149, + 134,133,150, + 135,134,151, + 154,136,153, + 155,137,154, + 156,138,155, + 157,139,156, + 158,140,157, + 159,141,158, + 160,142,159, + 161,143,160, + 145,144,161, + 146,145,162, + 147,146,163, + 148,147,164, + 149,148,165, + 150,149,166, + 151,150,167, + 152,151,168, + 171,153,170, + 172,154,171, + 173,155,172, + 174,156,173, + 175,157,174, + 176,158,175, + 177,159,176, + 178,160,177, + 162,161,178, + 163,162,179, + 164,163,180, + 165,164,181, + 166,165,182, + 167,166,183, + 168,167,184, + 169,168,185, + 188,170,187, + 189,171,188, + 190,172,189, + 191,173,190, + 192,174,191, + 193,175,192, + 194,176,193, + 195,177,194, + 179,178,195, + 180,179,196, + 181,180,197, + 182,181,198, + 183,182,199, + 184,183,200, + 185,184,201, + 186,185,202, + 205,187,204, + 206,188,205, + 207,189,206, + 208,190,207, + 209,191,208, + 210,192,209, + 211,193,210, + 212,194,211, + 196,195,212, + 197,196,213, + 198,197,214, + 199,198,215, + 200,199,216, + 201,200,217, + 202,201,218, + 203,202,219, + 222,204,221, + 223,205,222, + 224,206,223, + 225,207,224, + 226,208,225, + 227,209,226, + 228,210,227, + 229,211,228, + 213,212,229, + 214,213,230, + 215,214,231, + 216,215,232, + 217,216,233, + 218,217,234, + 219,218,235, + 220,219,236, + 239,221,238, + 240,222,239, + 241,223,240, + 242,224,241, + 243,225,242, + 244,226,243, + 245,227,244, + 246,228,245, + 230,229,246, + 231,230,247, + 232,231,248, + 233,232,249, + 234,233,250, + 235,234,251, + 236,235,252, + 237,236,253, + 256,238,255, + 257,239,256, + 258,240,257, + 259,241,258, + 260,242,259, + 261,243,260, + 262,244,261, + 263,245,262, + 247,246,263, + 248,247,264, + 249,248,265, + 250,249,266, + 251,250,267, + 252,251,268, + 253,252,269, + 254,253,270, + 273,255,272, + 274,256,273, + 275,257,274, + 276,258,275, + 277,259,276, + 278,260,277, + 279,261,278, + 280,262,279, + 264,263,280, + 265,264,281, + 266,265,282, + 267,266,283, + 268,267,284, + 269,268,285, + 270,269,286, + 271,270,287, + 290,272,289, + 291,273,290, + 292,274,291, + 293,275,292, + 294,276,293, + 295,277,294, + 296,278,295, + 297,279,296, + 281,280,297, + 282,281,298, + 283,282,299, + 284,283,300, + 285,284,301, + 286,285,302, + 287,286,303, + 288,287,304, + 307,289,306, + 308,290,307, + 309,291,308, + 310,292,309, + 311,293,310, + 312,294,311, + 313,295,312, + 314,296,313, + 298,297,314, + 299,298,315, + 300,299,316, + 301,300,317, + 302,301,318, + 303,302,319, + 304,303,320, + 305,304,321, + 324,306,323, + 325,307,324, + 326,308,325, + 327,309,326, + 328,310,327, + 329,311,328, + 330,312,329, + 331,313,330, + 315,314,331, + 316,315,332, + 317,316,333, + 318,317,334, + 319,318,335, + 320,319,336, + 321,320,337, + 322,321,338, + 341,323,340, + 342,324,341, + 343,325,342, + 344,326,343, + 345,327,344, + 346,328,345, + 347,329,346, + 348,330,347, + 332,331,348, + 333,332,349, + 334,333,350, + 335,334,351, + 336,335,352, + 337,336,353, + 338,337,354, + 339,338,355, + 358,340,357, + 359,341,358, + 360,342,359, + 361,343,360, + 362,344,361, + 363,345,362, + 364,346,363, + 365,347,364, + 349,348,365, + 350,349,366, + 351,350,367, + 352,351,368, + 353,352,369, + 354,353,370, + 355,354,371, + 356,355,372, + 375,357,374, + 376,358,375, + 377,359,376, + 378,360,377, + 379,361,378, + 380,362,379, + 381,363,380, + 382,364,381, + 366,365,382, + 367,366,383, + 368,367,384, + 369,368,385, + 370,369,386, + 371,370,387, + 372,371,388, + 373,372,389, + 392,374,391, + 393,375,392, + 394,376,393, + 395,377,394, + 396,378,395, + 397,379,396, + 398,380,397, + 399,381,398, + 383,382,399, + 384,383,400, + 385,384,401, + 386,385,402, + 387,386,403, + 388,387,404, + 389,388,405, + 390,389,406, + 409,391,408, + 410,392,409, + 411,393,410, + 412,394,411, + 413,395,412, + 414,396,413, + 415,397,414, + 416,398,415, + 400,399,416, + 401,400,417, + 402,401,418, + 403,402,419, + 404,403,420, + 405,404,421, + 406,405,422, + 407,406,423, + 426,408,1819, + 427,409,426, + 428,410,427, + 429,411,428, + 430,412,429, + 431,413,430, + 432,414,431, + 1820,415,432, + 417,416,1821, + 418,417,434, + 419,418,435, + 420,419,436, + 421,420,437, + 422,421,438, + 423,422,439, + 424,423,440, + 426,425,442, + 427,426,443, + 428,427,444, + 429,428,445, + 430,429,446, + 431,430,447, + 432,431,448, + 433,432,449, + 451,433,450, + 452,434,451, + 453,435,452, + 454,436,453, + 455,437,454, + 456,438,455, + 457,439,456, + 458,440,457, + 443,442,459, + 444,443,460, + 445,444,461, + 446,445,462, + 447,446,463, + 448,447,464, + 449,448,465, + 450,449,466, + 468,450,467, + 469,451,468, + 470,452,469, + 471,453,470, + 472,454,471, + 473,455,472, + 474,456,473, + 475,457,474, + 460,459,476, + 461,460,477, + 462,461,478, + 463,462,479, + 464,463,480, + 465,464,481, + 466,465,482, + 467,466,483, + 485,467,484, + 486,468,485, + 487,469,486, + 488,470,487, + 489,471,488, + 490,472,489, + 491,473,490, + 492,474,491, + 477,476,493, + 478,477,494, + 479,478,495, + 480,479,496, + 481,480,497, + 482,481,498, + 483,482,499, + 484,483,500, + 502,484,501, + 503,485,502, + 504,486,503, + 505,487,504, + 506,488,505, + 507,489,506, + 508,490,507, + 509,491,508, + 494,493,510, + 495,494,511, + 496,495,512, + 497,496,513, + 498,497,514, + 499,498,515, + 500,499,516, + 501,500,517, + 519,501,518, + 520,502,519, + 521,503,520, + 522,504,521, + 523,505,522, + 524,506,523, + 525,507,524, + 526,508,525, + 511,510,527, + 512,511,528, + 513,512,529, + 514,513,530, + 515,514,531, + 516,515,532, + 517,516,533, + 518,517,534, + 536,518,535, + 537,519,536, + 538,520,537, + 539,521,538, + 540,522,539, + 541,523,540, + 542,524,541, + 543,525,542, + 528,527,544, + 529,528,545, + 530,529,546, + 531,530,547, + 532,531,548, + 533,532,549, + 534,533,550, + 535,534,551, + 553,535,552, + 554,536,553, + 555,537,554, + 556,538,555, + 557,539,556, + 558,540,557, + 559,541,558, + 560,542,559, + 545,544,561, + 546,545,562, + 547,546,563, + 548,547,564, + 549,548,565, + 550,549,566, + 551,550,567, + 552,551,568, + 570,552,569, + 571,553,570, + 572,554,571, + 573,555,572, + 574,556,573, + 575,557,574, + 576,558,575, + 577,559,576, + 562,561,578, + 563,562,579, + 564,563,580, + 565,564,581, + 566,565,582, + 567,566,583, + 568,567,584, + 569,568,585, + 587,569,586, + 588,570,587, + 589,571,588, + 590,572,589, + 591,573,590, + 592,574,591, + 593,575,592, + 594,576,593, + 579,578,595, + 580,579,596, + 581,580,597, + 582,581,598, + 583,582,599, + 584,583,600, + 585,584,601, + 586,585,602, + 604,586,603, + 605,587,604, + 606,588,605, + 607,589,606, + 608,590,607, + 609,591,608, + 610,592,609, + 611,593,610, + 596,595,612, + 597,596,613, + 598,597,614, + 599,598,615, + 600,599,616, + 601,600,617, + 602,601,618, + 603,602,619, + 621,603,620, + 622,604,621, + 623,605,622, + 624,606,623, + 625,607,624, + 626,608,625, + 627,609,626, + 628,610,627, + 613,612,629, + 614,613,630, + 615,614,631, + 616,615,632, + 617,616,633, + 618,617,634, + 619,618,635, + 620,619,636, + 638,620,637, + 639,621,638, + 640,622,639, + 641,623,640, + 642,624,641, + 643,625,642, + 644,626,643, + 645,627,644, + 630,629,646, + 631,630,647, + 632,631,648, + 633,632,649, + 634,633,650, + 635,634,651, + 636,635,652, + 637,636,653, + 655,637,654, + 656,638,655, + 657,639,656, + 658,640,657, + 659,641,658, + 660,642,659, + 661,643,660, + 662,644,661, + 647,646,663, + 648,647,664, + 649,648,665, + 650,649,666, + 651,650,667, + 652,651,668, + 653,652,669, + 654,653,670, + 672,654,671, + 673,655,672, + 674,656,673, + 675,657,674, + 676,658,675, + 677,659,676, + 678,660,677, + 679,661,678, + 664,663,680, + 665,664,681, + 666,665,682, + 667,666,683, + 668,667,684, + 669,668,685, + 670,669,686, + 671,670,687, + 689,671,688, + 690,672,689, + 691,673,690, + 692,674,691, + 693,675,692, + 694,676,693, + 695,677,694, + 696,678,695, + 698,680,697, + 699,681,698, + 700,682,699, + 701,683,700, + 702,684,701, + 703,685,702, + 704,686,703, + 705,687,704, + 689,688,705, + 690,689,706, + 691,690,707, + 692,691,708, + 693,692,709, + 694,693,710, + 695,694,711, + 696,695,712, + 715,697,714, + 716,698,715, + 717,699,716, + 718,700,717, + 719,701,718, + 720,702,719, + 721,703,720, + 722,704,721, + 706,705,722, + 707,706,723, + 708,707,724, + 709,708,725, + 710,709,726, + 711,710,727, + 712,711,728, + 713,712,729, + 732,714,731, + 733,715,732, + 734,716,733, + 735,717,734, + 736,718,735, + 737,719,736, + 738,720,737, + 739,721,738, + 723,722,739, + 724,723,740, + 725,724,741, + 726,725,742, + 727,726,743, + 728,727,744, + 729,728,745, + 730,729,746, + 749,731,748, + 750,732,749, + 751,733,750, + 752,734,751, + 753,735,752, + 754,736,753, + 755,737,754, + 756,738,755, + 740,739,756, + 741,740,757, + 742,741,758, + 743,742,759, + 744,743,760, + 745,744,761, + 746,745,762, + 747,746,763, + 766,748,765, + 767,749,766, + 768,750,767, + 769,751,768, + 770,752,769, + 771,753,770, + 772,754,771, + 773,755,772, + 757,756,773, + 758,757,774, + 759,758,775, + 760,759,776, + 761,760,777, + 762,761,778, + 763,762,779, + 764,763,780, + 783,765,782, + 784,766,783, + 785,767,784, + 786,768,785, + 787,769,786, + 788,770,787, + 789,771,788, + 790,772,789, + 774,773,790, + 775,774,791, + 776,775,792, + 777,776,793, + 778,777,794, + 779,778,795, + 780,779,796, + 781,780,797, + 800,782,799, + 801,783,800, + 802,784,801, + 803,785,802, + 804,786,803, + 805,787,804, + 806,788,805, + 807,789,806, + 791,790,807, + 792,791,808, + 793,792,809, + 794,793,810, + 795,794,811, + 796,795,812, + 797,796,813, + 798,797,814, + 817,799,816, + 818,800,817, + 819,801,818, + 820,802,819, + 821,803,820, + 822,804,821, + 823,805,822, + 824,806,823, + 808,807,824, + 809,808,825, + 810,809,826, + 811,810,827, + 812,811,828, + 813,812,829, + 814,813,830, + 815,814,831, + 834,816,833, + 835,817,834, + 836,818,835, + 837,819,836, + 838,820,837, + 839,821,838, + 840,822,839, + 841,823,840, + 825,824,841, + 826,825,842, + 827,826,843, + 828,827,844, + 829,828,845, + 830,829,846, + 831,830,847, + 832,831,848, + 851,833,850, + 852,834,851, + 853,835,852, + 854,836,853, + 855,837,854, + 856,838,855, + 857,839,856, + 858,840,857, + 842,841,858, + 843,842,859, + 844,843,860, + 845,844,861, + 846,845,862, + 847,846,863, + 848,847,864, + 849,848,865, + 868,850,867, + 869,851,868, + 870,852,869, + 871,853,870, + 872,854,871, + 873,855,872, + 874,856,873, + 875,857,874, + 859,858,875, + 860,859,876, + 861,860,877, + 862,861,878, + 863,862,879, + 864,863,880, + 865,864,881, + 866,865,882, + 885,867,884, + 886,868,885, + 887,869,886, + 888,870,887, + 889,871,888, + 890,872,889, + 891,873,890, + 892,874,891, + 876,875,892, + 877,876,893, + 878,877,894, + 879,878,895, + 880,879,896, + 881,880,897, + 882,881,898, + 883,882,899, + 902,884,901, + 903,885,902, + 904,886,903, + 905,887,904, + 906,888,905, + 907,889,906, + 908,890,907, + 909,891,908, + 893,892,909, + 894,893,910, + 895,894,911, + 896,895,912, + 897,896,913, + 898,897,914, + 899,898,915, + 900,899,916, + 919,901,918, + 920,902,919, + 921,903,920, + 922,904,921, + 923,905,922, + 924,906,923, + 925,907,924, + 926,908,925, + 910,909,926, + 911,910,927, + 912,911,928, + 913,912,929, + 914,913,930, + 915,914,931, + 916,915,932, + 917,916,933, + 936,918,935, + 937,919,936, + 938,920,937, + 939,921,938, + 940,922,939, + 941,923,940, + 942,924,941, + 943,925,942, + 927,926,943, + 928,927,944, + 929,928,945, + 930,929,946, + 931,930,947, + 932,931,948, + 933,932,949, + 934,933,950, + 1823,935,1824, + 954,936,1825, + 955,937,954, + 956,938,955, + 957,939,956, + 958,940,957, + 1826,941,958, + 1827,942,1828, + 944,943,1830, + 945,944,1831, + 946,945,962, + 947,946,963, + 948,947,964, + 949,948,965, + 950,949,966, + 951,950,1834, + 953,952,1835, + 954,953,970, + 955,954,971, + 956,955,972, + 957,956,973, + 958,957,974, + 959,958,975, + 960,959,976, + 978,960,1837, + 979,961,978, + 980,962,979, + 981,963,980, + 982,964,981, + 983,965,982, + 984,966,983, + 1838,967,984, + 970,969,986, + 971,970,987, + 972,971,988, + 973,972,989, + 974,973,990, + 975,974,991, + 976,975,992, + 977,976,993, + 995,977,994, + 996,978,995, + 997,979,996, + 998,980,997, + 999,981,998, + 1000,982,999, + 1001,983,1000, + 1002,984,1001, + 1839,986,1840, + 1841,987,1842, + 1006,988,1843, + 1007,989,1006, + 1008,990,1007, + 1844,991,1008, + 1845,992,1846, + 1847,993,1848, + 995,994,1850, + 996,995,1852, + 997,996,1853, + 998,997,1014, + 999,998,1015, + 1000,999,1016, + 1001,1000,1856, + 1002,1001,1858, + 1004,1003,1020, + 1005,1004,1021, + 1006,1005,1022, + 1007,1006,1023, + 1008,1007,1024, + 1009,1008,1025, + 1010,1009,1026, + 1011,1010,1027, + 1029,1011,1028, + 1030,1012,1029, + 1031,1013,1030, + 1032,1014,1031, + 1033,1015,1032, + 1034,1016,1033, + 1035,1017,1034, + 1036,1018,1035, + 1021,1020,1860, + 1022,1021,1862, + 1023,1022,1863, + 1024,1023,1040, + 1025,1024,1041, + 1026,1025,1042, + 1027,1026,1866, + 1028,1027,1868, + 1869,1028,1870, + 1871,1029,1872, + 1048,1030,1873, + 1049,1031,1048, + 1050,1032,1049, + 1874,1033,1050, + 1875,1034,1876, + 1877,1035,1878, + 1055,1037,1054, + 1056,1038,1055, + 1057,1039,1056, + 1058,1040,1057, + 1059,1041,1058, + 1060,1042,1059, + 1061,1043,1060, + 1062,1044,1061, + 1046,1045,1062, + 1047,1046,1063, + 1048,1047,1064, + 1049,1048,1065, + 1050,1049,1066, + 1051,1050,1067, + 1052,1051,1068, + 1053,1052,1069, + 1879,1054,1880, + 1881,1055,1882, + 1074,1056,1883, + 1075,1057,1074, + 1076,1058,1075, + 1884,1059,1076, + 1885,1060,1886, + 1887,1061,1888, + 1063,1062,1890, + 1064,1063,1892, + 1065,1064,1893, + 1066,1065,1082, + 1067,1066,1083, + 1068,1067,1084, + 1069,1068,1896, + 1070,1069,1898, + 1072,1071,1088, + 1073,1072,1089, + 1074,1073,1090, + 1075,1074,1091, + 1076,1075,1092, + 1077,1076,1093, + 1078,1077,1094, + 1079,1078,1095, + 1097,1079,1096, + 1098,1080,1097, + 1099,1081,1098, + 1100,1082,1099, + 1101,1083,1100, + 1102,1084,1101, + 1103,1085,1102, + 1104,1086,1103, + 1106,1088,1899, + 1107,1089,1106, + 1108,1090,1107, + 1109,1091,1108, + 1110,1092,1109, + 1111,1093,1110, + 1112,1094,1111, + 1900,1095,1112, + 1097,1096,1901, + 1098,1097,1114, + 1099,1098,1115, + 1100,1099,1116, + 1101,1100,1117, + 1102,1101,1118, + 1103,1102,1119, + 1104,1103,1120, + 1106,1105,1122, + 1107,1106,1123, + 1108,1107,1124, + 1109,1108,1125, + 1110,1109,1126, + 1111,1110,1127, + 1112,1111,1128, + 1113,1112,1129, + 1131,1113,1130, + 1132,1114,1131, + 1133,1115,1132, + 1134,1116,1133, + 1135,1117,1134, + 1136,1118,1135, + 1137,1119,1136, + 1138,1120,1137, + 1123,1122,1139, + 1124,1123,1140, + 1125,1124,1141, + 1126,1125,1142, + 1127,1126,1143, + 1128,1127,1144, + 1129,1128,1145, + 1130,1129,1146, + 1148,1130,1147, + 1149,1131,1148, + 1150,1132,1149, + 1151,1133,1150, + 1152,1134,1151, + 1153,1135,1152, + 1154,1136,1153, + 1155,1137,1154, + 1157,1139,1156, + 1158,1140,1157, + 1159,1141,1158, + 1160,1142,1159, + 1161,1143,1160, + 1162,1144,1161, + 1163,1145,1162, + 1164,1146,1163, + 1148,1147,1164, + 1149,1148,1165, + 1150,1149,1166, + 1151,1150,1167, + 1152,1151,1168, + 1153,1152,1169, + 1154,1153,1170, + 1155,1154,1171, + 1174,1156,1173, + 1175,1157,1174, + 1176,1158,1175, + 1177,1159,1176, + 1178,1160,1177, + 1179,1161,1178, + 1180,1162,1179, + 1181,1163,1180, + 1165,1164,1181, + 1166,1165,1182, + 1167,1166,1183, + 1168,1167,1184, + 1169,1168,1185, + 1170,1169,1186, + 1171,1170,1187, + 1172,1171,1188, + 1174,1173,1190, + 1175,1174,1191, + 1176,1175,1192, + 1177,1176,1193, + 1178,1177,1194, + 1179,1178,1195, + 1180,1179,1196, + 1181,1180,1197, + 1199,1181,1198, + 1200,1182,1199, + 1201,1183,1200, + 1202,1184,1201, + 1203,1185,1202, + 1204,1186,1203, + 1205,1187,1204, + 1206,1188,1205, + 1903,1190,1904, + 1209,1191,1905, + 1210,1192,1209, + 1211,1193,1210, + 1212,1194,1211, + 1213,1195,1212, + 1906,1196,1213, + 1907,1197,1908, + 1199,1198,1910, + 1200,1199,1911, + 1201,1200,1217, + 1202,1201,1218, + 1203,1202,1219, + 1204,1203,1220, + 1205,1204,1221, + 1206,1205,1914, + 1208,1207,1916, + 1209,1208,1917, + 1210,1209,1226, + 1211,1210,1227, + 1212,1211,1228, + 1213,1212,1229, + 1214,1213,1230, + 1215,1214,1920, + 1921,1215,1922, + 1234,1216,1923, + 1235,1217,1234, + 1236,1218,1235, + 1237,1219,1236, + 1238,1220,1237, + 1924,1221,1238, + 1925,1222,1926, + 1225,1224,1241, + 1226,1225,1242, + 1227,1226,1243, + 1228,1227,1244, + 1229,1228,1245, + 1230,1229,1246, + 1231,1230,1247, + 1232,1231,1248, + 1250,1232,1249, + 1251,1233,1250, + 1252,1234,1251, + 1253,1235,1252, + 1254,1236,1253, + 1255,1237,1254, + 1256,1238,1255, + 1257,1239,1256, + 1242,1241,1258, + 1243,1242,1259, + 1244,1243,1260, + 1245,1244,1261, + 1246,1245,1262, + 1247,1246,1263, + 1248,1247,1264, + 1249,1248,1265, + 1267,1249,1266, + 1268,1250,1267, + 1269,1251,1268, + 1270,1252,1269, + 1271,1253,1270, + 1272,1254,1271, + 1273,1255,1272, + 1274,1256,1273, + 1276,1258,1275, + 1277,1259,1276, + 1278,1260,1277, + 1279,1261,1278, + 1280,1262,1279, + 1281,1263,1280, + 1282,1264,1281, + 1283,1265,1282, + 1267,1266,1283, + 1268,1267,1284, + 1269,1268,1285, + 1270,1269,1286, + 1271,1270,1287, + 1272,1271,1288, + 1273,1272,1289, + 1274,1273,1290, + 1293,1275,1292, + 1294,1276,1293, + 1295,1277,1294, + 1296,1278,1295, + 1297,1279,1296, + 1298,1280,1297, + 1299,1281,1298, + 1300,1282,1299, + 1284,1283,1300, + 1285,1284,1301, + 1286,1285,1302, + 1287,1286,1303, + 1288,1287,1304, + 1289,1288,1305, + 1290,1289,1306, + 1291,1290,1307, + 1293,1292,1309, + 1294,1293,1310, + 1295,1294,1311, + 1296,1295,1312, + 1297,1296,1313, + 1298,1297,1314, + 1299,1298,1315, + 1300,1299,1316, + 1318,1300,1317, + 1319,1301,1318, + 1320,1302,1319, + 1321,1303,1320, + 1322,1304,1321, + 1323,1305,1322, + 1324,1306,1323, + 1325,1307,1324, + 1310,1309,1326, + 1311,1310,1327, + 1312,1311,1328, + 1313,1312,1329, + 1314,1313,1330, + 1315,1314,1331, + 1316,1315,1332, + 1317,1316,1333, + 1335,1317,1334, + 1336,1318,1335, + 1337,1319,1336, + 1338,1320,1337, + 1339,1321,1338, + 1340,1322,1339, + 1341,1323,1340, + 1342,1324,1341, + 1327,1326,1343, + 1328,1327,1344, + 1329,1328,1345, + 1330,1329,1346, + 1331,1330,1347, + 1332,1331,1348, + 1333,1332,1349, + 1334,1333,1350, + 1352,1334,1351, + 1353,1335,1352, + 1354,1336,1353, + 1355,1337,1354, + 1356,1338,1355, + 1357,1339,1356, + 1358,1340,1357, + 1359,1341,1358, + 1344,1343,1360, + 1345,1344,1361, + 1346,1345,1362, + 1347,1346,1363, + 1348,1347,1364, + 1349,1348,1365, + 1350,1349,1366, + 1351,1350,1367, + 1369,1351,1368, + 1370,1352,1369, + 1371,1353,1370, + 1372,1354,1371, + 1373,1355,1372, + 1374,1356,1373, + 1375,1357,1374, + 1376,1358,1375, + 1361,1360,1377, + 1362,1361,1378, + 1363,1362,1379, + 1364,1363,1380, + 1365,1364,1381, + 1366,1365,1382, + 1367,1366,1383, + 1368,1367,1384, + 1386,1368,1385, + 1387,1369,1386, + 1388,1370,1387, + 1389,1371,1388, + 1390,1372,1389, + 1391,1373,1390, + 1392,1374,1391, + 1393,1375,1392, + 1378,1377,1394, + 1379,1378,1395, + 1380,1379,1396, + 1381,1380,1397, + 1382,1381,1398, + 1383,1382,1399, + 1384,1383,1400, + 1385,1384,1401, + 1403,1385,1402, + 1404,1386,1403, + 1405,1387,1404, + 1406,1388,1405, + 1407,1389,1406, + 1408,1390,1407, + 1409,1391,1408, + 1410,1392,1409, + 1395,1394,1411, + 1396,1395,1412, + 1397,1396,1413, + 1398,1397,1414, + 1399,1398,1415, + 1400,1399,1416, + 1401,1400,1417, + 1402,1401,1418, + 1420,1402,1419, + 1421,1403,1420, + 1422,1404,1421, + 1423,1405,1422, + 1424,1406,1423, + 1425,1407,1424, + 1426,1408,1425, + 1427,1409,1426, + 1412,1411,1428, + 1413,1412,1429, + 1414,1413,1430, + 1415,1414,1431, + 1416,1415,1432, + 1417,1416,1433, + 1418,1417,1434, + 1419,1418,1435, + 1437,1419,1436, + 1438,1420,1437, + 1439,1421,1438, + 1440,1422,1439, + 1441,1423,1440, + 1442,1424,1441, + 1443,1425,1442, + 1444,1426,1443, + 1446,1428,1445, + 1447,1429,1446, + 1448,1430,1447, + 1449,1431,1448, + 1450,1432,1449, + 1451,1433,1450, + 1452,1434,1451, + 1453,1435,1452, + 1437,1436,1453, + 1438,1437,1454, + 1439,1438,1455, + 1440,1439,1456, + 1441,1440,1457, + 1442,1441,1458, + 1443,1442,1459, + 1444,1443,1460, + 1446,1445,1462, + 1447,1446,1463, + 1448,1447,1464, + 1449,1448,1465, + 1450,1449,1466, + 1451,1450,1467, + 1452,1451,1468, + 1453,1452,1469, + 1471,1453,1470, + 1472,1454,1471, + 1473,1455,1472, + 1474,1456,1473, + 1475,1457,1474, + 1476,1458,1475, + 1477,1459,1476, + 1478,1460,1477, + 1480,1462,1479, + 1481,1463,1480, + 1482,1464,1481, + 1483,1465,1482, + 1484,1466,1483, + 1485,1467,1484, + 1486,1468,1485, + 1487,1469,1486, + 1471,1470,1487, + 1472,1471,1488, + 1473,1472,1489, + 1474,1473,1490, + 1475,1474,1491, + 1476,1475,1492, + 1477,1476,1493, + 1478,1477,1494, + 1497,1479,1496, + 1498,1480,1497, + 1499,1481,1498, + 1500,1482,1499, + 1501,1483,1500, + 1502,1484,1501, + 1503,1485,1502, + 1504,1486,1503, + 1488,1487,1504, + 1489,1488,1505, + 1490,1489,1506, + 1491,1490,1507, + 1492,1491,1508, + 1493,1492,1509, + 1494,1493,1510, + 1495,1494,1511, + 1514,1496,1513, + 1515,1497,1514, + 1516,1498,1515, + 1517,1499,1516, + 1518,1500,1517, + 1519,1501,1518, + 1520,1502,1519, + 1521,1503,1520, + 1505,1504,1521, + 1506,1505,1522, + 1507,1506,1523, + 1508,1507,1524, + 1509,1508,1525, + 1510,1509,1526, + 1511,1510,1527, + 1512,1511,1528, + 1531,1513,1530, + 1532,1514,1531, + 1533,1515,1532, + 1534,1516,1533, + 1535,1517,1534, + 1536,1518,1535, + 1537,1519,1536, + 1538,1520,1537, + 1522,1521,1538, + 1523,1522,1539, + 1524,1523,1540, + 1525,1524,1541, + 1526,1525,1542, + 1527,1526,1543, + 1528,1527,1544, + 1529,1528,1545, + 1548,1530,1547, + 1549,1531,1548, + 1550,1532,1549, + 1551,1533,1550, + 1552,1534,1551, + 1553,1535,1552, + 1554,1536,1553, + 1555,1537,1554, + 1539,1538,1555, + 1540,1539,1556, + 1541,1540,1557, + 1542,1541,1558, + 1543,1542,1559, + 1544,1543,1560, + 1545,1544,1561, + 1546,1545,1562, + 1565,1547,1564, + 1566,1548,1565, + 1567,1549,1566, + 1568,1550,1567, + 1569,1551,1568, + 1570,1552,1569, + 1571,1553,1570, + 1572,1554,1571, + 1556,1555,1572, + 1557,1556,1573, + 1558,1557,1574, + 1559,1558,1575, + 1560,1559,1576, + 1561,1560,1577, + 1562,1561,1578, + 1563,1562,1579, + 1565,1564,1581, + 1566,1565,1582, + 1567,1566,1583, + 1568,1567,1584, + 1569,1568,1585, + 1570,1569,1586, + 1571,1570,1587, + 1572,1571,1588, + 1590,1572,1589, + 1591,1573,1590, + 1592,1574,1591, + 1593,1575,1592, + 1594,1576,1593, + 1595,1577,1594, + 1596,1578,1595, + 1597,1579,1596, + 1582,1581,1598, + 1583,1582,1599, + 1584,1583,1600, + 1585,1584,1601, + 1586,1585,1602, + 1587,1586,1603, + 1588,1587,1604, + 1589,1588,1605, + 1607,1589,1606, + 1608,1590,1607, + 1609,1591,1608, + 1610,1592,1609, + 1611,1593,1610, + 1612,1594,1611, + 1613,1595,1612, + 1614,1596,1613, + 1599,1598,1615, + 1600,1599,1616, + 1601,1600,1617, + 1602,1601,1618, + 1603,1602,1619, + 1604,1603,1620, + 1605,1604,1621, + 1606,1605,1622, + 1624,1606,1623, + 1625,1607,1624, + 1626,1608,1625, + 1627,1609,1626, + 1628,1610,1627, + 1629,1611,1628, + 1630,1612,1629, + 1631,1613,1630, + 1633,1615,1632, + 1634,1616,1633, + 1635,1617,1634, + 1636,1618,1635, + 1637,1619,1636, + 1638,1620,1637, + 1639,1621,1638, + 1640,1622,1639, + 1624,1623,1640, + 1625,1624,1641, + 1626,1625,1642, + 1627,1626,1643, + 1628,1627,1644, + 1629,1628,1645, + 1630,1629,1646, + 1631,1630,1647, + 1650,1632,1649, + 1651,1633,1650, + 1652,1634,1651, + 1653,1635,1652, + 1654,1636,1653, + 1655,1637,1654, + 1656,1638,1655, + 1657,1639,1656, + 1641,1640,1657, + 1642,1641,1658, + 1643,1642,1659, + 1644,1643,1660, + 1645,1644,1661, + 1646,1645,1662, + 1647,1646,1663, + 1648,1647,1664, + 1667,1649,1666, + 1668,1650,1667, + 1669,1651,1668, + 1670,1652,1669, + 1671,1653,1670, + 1672,1654,1671, + 1673,1655,1672, + 1674,1656,1673, + 1658,1657,1674, + 1659,1658,1675, + 1660,1659,1676, + 1661,1660,1677, + 1662,1661,1678, + 1663,1662,1679, + 1664,1663,1680, + 1665,1664,1681, + 1684,1666,1683, + 1685,1667,1684, + 1686,1668,1685, + 1687,1669,1686, + 1688,1670,1687, + 1689,1671,1688, + 1690,1672,1689, + 1691,1673,1690, + 1675,1674,1691, + 1676,1675,1692, + 1677,1676,1693, + 1678,1677,1694, + 1679,1678,1695, + 1680,1679,1696, + 1681,1680,1697, + 1682,1681,1698, + 1701,1683,1700, + 1702,1684,1701, + 1703,1685,1702, + 1704,1686,1703, + 1705,1687,1704, + 1706,1688,1705, + 1707,1689,1706, + 1708,1690,1707, + 1692,1691,1708, + 1693,1692,1709, + 1694,1693,1710, + 1695,1694,1711, + 1696,1695,1712, + 1697,1696,1713, + 1698,1697,1714, + 1699,1698,1715, + 1701,1700,1928, + 1929,1701,1930, + 1720,1702,1931, + 1721,1703,1720, + 1722,1704,1721, + 1723,1705,1722, + 1932,1706,1723, + 1933,1707,1934, + 1935,1708,1936, + 1710,1709,1938, + 1711,1710,1939, + 1712,1711,1728, + 1713,1712,1729, + 1714,1713,1730, + 1715,1714,1731, + 1716,1715,1942, + 1943,1717,1944, + 1945,1718,1946, + 1737,1719,1947, + 1738,1720,1737, + 1739,1721,1738, + 1740,1722,1739, + 1948,1723,1740, + 1949,1724,1950, + 1726,1725,1952, + 1727,1726,1954, + 1728,1727,1955, + 1729,1728,1745, + 1730,1729,1746, + 1731,1730,1747, + 1732,1731,1748, + 1733,1732,1958, + 1735,1734,1751, + 1736,1735,1752, + 1737,1736,1753, + 1738,1737,1754, + 1739,1738,1755, + 1740,1739,1756, + 1741,1740,1757, + 1742,1741,1758, + 1760,1742,1759, + 1761,1743,1760, + 1762,1744,1761, + 1763,1745,1762, + 1764,1746,1763, + 1765,1747,1764, + 1766,1748,1765, + 1767,1749,1766, + 1752,1751,1768, + 1753,1752,1769, + 1754,1753,1770, + 1755,1754,1771, + 1756,1755,1772, + 1757,1756,1773, + 1758,1757,1774, + 1776,1758,1775, + 1777,1759,1776, + 1778,1760,1777, + 1779,1761,1778, + 1780,1762,1779, + 1781,1763,1780, + 1782,1764,1781, + 1783,1765,1782, + 1767,1766,1783, + 1769,1768,1785, + 1770,1769,1786, + 1771,1770,1787, + 1772,1771,1788, + 1773,1772,1789, + 1774,1773,1790, + 1792,1774,1791, + 1793,1775,1792, + 1794,1776,1793, + 1795,1777,1794, + 1796,1778,1795, + 1797,1779,1796, + 1798,1780,1797, + 1799,1781,1798, + 1783,1782,1799, + 1784,1783,1800, + 1,17,18, + 2,19,20, + 1,18,19, + 4,21,22, + 6,23,24, + 5,22,23, + 3,20,21, + 7,24,25, + 10,26,27, + 12,28,29, + 11,27,28, + 14,30,31, + 16,32,33, + 15,31,32, + 13,29,30, + 26,9,8, + 1786,1802,1803, + 1788,1804,1805, + 1787,1803,1804, + 1791,1807,1808, + 1789,1805,1806, + 1792,1808,1809, + 1794,1810,1811, + 1796,1812,1813, + 1795,1811,1812, + 1798,1814,1815, + 1801,1816,1817, + 1800,1815,1816, + 1797,1813,1814, + 1810,1794,1793 + ], + "points": [ + [1164056.65356057, 4891743.67760728, 707.83133308], + [1164056.99622843, 4891743.76498209, 709.6713138763], + [1164058.04833225, 4891744.13144129, 711.3659204145], + [1164059.63777507, 4891744.72098758, 712.4790299203], + [1164061.35638553, 4891745.37961263, 712.8299944258], + [1164063.06911544, 4891746.05338197, 712.4790299203], + [1164064.63990768, 4891746.69095947, 711.3659204145], + [1164065.66361769, 4891747.13054176, 709.6713138763], + [1164065.97545595, 4891747.29731262, 707.83133308], + [1164065.63278809, 4891747.20993781, 705.9913522837], + [1164064.58068427, 4891746.84347861, 704.2967457455], + [1164062.99124145, 4891746.25393232, 703.1836362397], + [1164061.27263099, 4891745.59530727, 702.8326717342], + [1164059.55990108, 4891744.92153793, 703.1836362397], + [1164057.98910884, 4891744.28396043, 704.2967457455], + [1164056.96539883, 4891743.84437814, 705.9913522837], + [1164056.65356057, 4891743.67760728, 707.83133308], + [1164112.35854202, 4891600.15721267, 704.2622591437], + [1164112.70166052, 4891600.2434299, 706.1022106901], + [1164113.75382126, 4891600.60974728, 707.7968139795], + [1164115.34286465, 4891601.20032786, 708.9099502475], + [1164117.06075718, 4891601.86080691, 709.2609623512], + [1164118.77253655, 4891602.53702852, 708.910060618], + [1164120.34219159, 4891603.17753779, 707.7970260002], + [1164121.36483533, 4891603.61986701, 706.1024894802], + [1164121.6759047, 4891603.78861684, 704.2625589863], + [1164121.33278619, 4891603.70239962, 702.4226074399], + [1164120.28062546, 4891603.33608223, 700.7280041505], + [1164118.69158207, 4891602.74550165, 699.6148678824], + [1164116.97368954, 4891602.08502261, 699.2638557787], + [1164115.26191017, 4891601.40880099, 699.614757512], + [1164113.69225513, 4891600.76829172, 700.7277921298], + [1164112.66961138, 4891600.32596251, 702.4223286498], + [1164112.35854202, 4891600.15721267, 704.2622591437], + [1164136.20093047, 4891538.63682245, 702.7239189045], + [1164136.54418912, 4891538.72267829, 704.563861371], + [1164137.59647748, 4891539.08866958, 706.2584569247], + [1164139.18560295, 4891539.67904419, 707.3715888759], + [1164140.90351898, 4891540.33946943, 707.7226006545], + [1164142.61526813, 4891541.01577625, 707.3717021662], + [1164144.18483491, 4891541.65652042, 706.2586745544], + [1164145.20734696, 4891542.09919472, 704.5641475365], + [1164145.5182749, 4891542.26831193, 702.7242266795], + [1164145.17501625, 4891542.18245609, 700.884284213], + [1164144.12272789, 4891541.8164648, 699.1896886593], + [1164142.53360243, 4891541.22609019, 698.0765567081], + [1164140.81568639, 4891540.56566495, 697.7255449295], + [1164139.10393724, 4891539.88935813, 698.0764434177], + [1164137.53437047, 4891539.24861396, 699.1894710296], + [1164136.51185841, 4891538.80593966, 700.8839980474], + [1164136.20093047, 4891538.63682245, 702.7239189045], + [1164146.8388127, 4891511.14587444, 702.0334470923], + [1164147.18219893, 4891511.23139951, 703.8733812232], + [1164148.23475325, 4891511.59670668, 705.5679598631], + [1164149.8242345, 4891512.18616903, 706.6810694378], + [1164151.54250812, 4891512.84567935, 707.0320588925], + [1164153.25459135, 4891513.5211331, 706.6811396947], + [1164154.82443936, 4891514.16116121, 705.5680948259], + [1164155.84710388, 4891514.60345008, 703.8735586884], + [1164156.15803616, 4891514.77256083, 702.0336379586], + [1164155.81464993, 4891514.68703577, 700.1937038277], + [1164154.7620956, 4891514.3217286, 698.4991251879], + [1164153.17261435, 4891513.73226625, 697.3860156131], + [1164151.45434073, 4891513.07275593, 697.0350261584], + [1164149.7422575, 4891512.39730218, 697.3859453563], + [1164148.1724095, 4891511.75727407, 698.498990225], + [1164147.14974498, 4891511.3149852, 700.1935263625], + [1164146.8388127, 4891511.14587444, 702.0334470923], + [1164157.50426712, 4891483.50909008, 701.3357967338], + [1164157.847715, 4891483.59445539, 703.1757268486], + [1164158.90036641, 4891483.95951362, 704.8702994826], + [1164160.48996058, 4891484.5486883, 705.9834022984], + [1164162.20833642, 4891485.20793964, 706.3343858085], + [1164163.92050519, 4891485.8831781, 705.9834618071], + [1164165.49041319, 4891486.52305708, 704.8704137984], + [1164166.51309422, 4891486.96530797, 703.1758771646], + [1164166.82400067, 4891487.134488, 701.3359584007], + [1164166.48055279, 4891487.04912269, 699.496028286], + [1164165.42790139, 4891486.68406445, 697.801455652], + [1164163.83830721, 4891486.09488978, 696.6883528362], + [1164162.11993137, 4891485.43563844, 696.3373693261], + [1164160.4077626, 4891484.76039999, 696.6882933275], + [1164158.8378546, 4891484.12052099, 697.8013413362], + [1164157.81517357, 4891483.67827011, 699.49587797], + [1164157.50426712, 4891483.50909008, 701.3357967338], + [1164178.85220823, 4891428.22329013, 699.9350300668], + [1164179.1953947, 4891428.3093346, 701.7749774993], + [1164180.24718085, 4891428.67662277, 703.4696070983], + [1164181.83544496, 4891429.2692192, 704.5827973607], + [1164183.55236915, 4891429.93220156, 704.9338762419], + [1164185.26308013, 4891430.61118392, 704.5830479574], + [1164186.83163863, 4891431.25452549, 703.4700884924], + [1164187.85342481, 4891431.69906846, 701.7756104937], + [1164188.16403771, 4891431.86899513, 699.935710861], + [1164187.82085125, 4891431.78295067, 698.0957634285], + [1164186.76906509, 4891431.4156625, 696.4011338296], + [1164185.18080098, 4891430.82306607, 695.2879435671], + [1164183.46387679, 4891430.1600837, 694.9368646859], + [1164181.75316581, 4891429.48110134, 695.2876929704], + [1164180.18460731, 4891428.83775977, 696.4006524354], + [1164179.16282113, 4891428.39321681, 698.0951304341], + [1164178.85220823, 4891428.22329013, 699.9350300668], + [1164190.06080184, 4891399.35349557, 699.2037220275], + [1164190.40371078, 4891399.44025647, 701.0436876733], + [1164191.45467863, 4891399.80964022, 702.7383704611], + [1164193.04171886, 4891400.40536441, 703.8516400776], + [1164194.757327, 4891401.07170627, 704.2028041727], + [1164196.46673244, 4891401.75401818, 703.8520603263], + [1164198.03410034, 4891402.40039255, 702.7391777552], + [1164199.05511889, 4891402.84688652, 701.0447491999], + [1164199.36550927, 4891403.01737265, 699.2048637138], + [1164199.02260034, 4891402.93061175, 697.364898068], + [1164197.97163249, 4891402.56122801, 695.6702152802], + [1164196.38459225, 4891401.96550381, 694.5569456637], + [1164194.66898411, 4891401.29916195, 694.2057815686], + [1164192.95957867, 4891400.61685004, 694.556525415], + [1164191.39221077, 4891399.97047568, 695.6694079861], + [1164190.37119223, 4891399.52398171, 697.3638365414], + [1164190.06080184, 4891399.35349557, 699.2037220275], + [1164204.72169514, 4891361.74542077, 698.2510356054], + [1164205.06441586, 4891361.83266549, 700.0910135884], + [1164206.11479316, 4891362.20355559, 701.7857348018], + [1164207.7009366, 4891362.80156312, 702.8990626692], + [1164209.41557233, 4891363.47037837, 703.2502898667], + [1164211.12400645, 4891364.15515891, 702.8996090038], + [1164212.69048099, 4891364.8038015, 701.7867843059], + [1164213.71091421, 4891365.25177883, 700.0923936015], + [1164214.02112206, 4891365.4227238, 698.2525198283], + [1164213.67840134, 4891365.33547909, 696.4125418454], + [1164212.62802404, 4891364.96458898, 694.7178206319], + [1164211.0418806, 4891364.36658145, 693.6044927645], + [1164209.32724486, 4891363.6977662, 693.253265567], + [1164207.61881075, 4891363.01298566, 693.6039464299], + [1164206.05233621, 4891362.36434307, 694.7167711278], + [1164205.03190299, 4891361.91636574, 696.4111618322], + [1164204.72169514, 4891361.74542077, 698.2510356054], + [1164217.9464856, 4891327.90565707, 697.3929166787], + [1164218.28910841, 4891327.99315302, 699.2329011085], + [1164219.33915464, 4891328.36488628, 700.9276439987], + [1164220.92478679, 4891328.96419385, 702.0410053024], + [1164222.63886313, 4891329.63443027, 702.3922690594], + [1164224.34673436, 4891330.32063983, 702.0416249644], + [1164225.91268659, 4891330.97060739, 700.9288343641], + [1164226.93277194, 4891331.4194658, 699.2344663429], + [1164227.24286364, 4891331.59070321, 697.3946001096], + [1164226.90024083, 4891331.50320726, 695.5546156798], + [1164225.8501946, 4891331.131474, 693.8598727897], + [1164224.26456245, 4891330.53216644, 692.7465114859], + [1164222.55048611, 4891329.86193001, 692.395247729], + [1164220.84261487, 4891329.17572045, 692.7458918239], + [1164219.27666265, 4891328.52575289, 693.8586824243], + [1164218.25657729, 4891328.07689448, 695.5530504454], + [1164217.9464856, 4891327.90565707, 697.3929166787], + [1164231.17886951, 4891294.07622338, 696.5335815926], + [1164231.52144338, 4891294.163845, 698.3735693036], + [1164232.57126507, 4891294.53614995, 700.0683271505], + [1164234.15653079, 4891295.13638917, 701.1817128363], + [1164235.87019491, 4891295.80767302, 701.5330040094], + [1164237.57764216, 4891296.49495936, 701.1823881018], + [1164239.14319067, 4891297.14595164, 700.0696243297], + [1164240.16299471, 4891297.59552343, 698.3752749894], + [1164240.47297584, 4891297.76704034, 696.535416081], + [1164240.13040196, 4891297.67941871, 694.6954283699], + [1164239.08058028, 4891297.30711377, 693.000670523], + [1164237.49531455, 4891296.70687455, 691.8872848372], + [1164235.78165044, 4891296.0355907, 691.5359936642], + [1164234.07420318, 4891295.34830435, 691.8866095718], + [1164232.50865467, 4891294.69731208, 692.9993733439], + [1164231.48885063, 4891294.24774029, 694.6937226841], + [1164231.17886951, 4891294.07622338, 696.5335815926], + [1164245.50522987, 4891257.48783862, 695.6026808879], + [1164245.84772044, 4891257.57567334, 697.4426740909], + [1164246.89727564, 4891257.94865533, 699.1374493967], + [1164248.48213486, 4891258.54992571, 700.2508616764], + [1164250.19535713, 4891259.22232943, 700.6021817333], + [1164251.90236216, 4891259.91073584, 700.2515947165], + [1164253.46750295, 4891260.56275991, 699.1388575603], + [1164254.48703865, 4891261.01300971, 697.4445257123], + [1164254.79693445, 4891261.18474078, 695.604672332], + [1164254.45444388, 4891261.09690606, 693.7646791291], + [1164253.40488868, 4891260.72392407, 692.0699038233], + [1164251.82002946, 4891260.12265369, 690.9564915435], + [1164250.10680719, 4891259.45024997, 690.6051714866], + [1164248.39980216, 4891258.76184356, 690.9557585035], + [1164246.83466137, 4891258.10981949, 692.0684956597], + [1164245.81512567, 4891257.65956968, 693.7628275077], + [1164245.50522987, 4891257.48783862, 695.6026808879], + [1164259.84860033, 4891220.90713797, 694.6707802804], + [1164260.19101681, 4891220.99516188, 696.5107783836], + [1164261.2403053, 4891221.36882004, 698.2055712414], + [1164262.82474725, 4891221.97114679, 699.3190109546], + [1164264.53750989, 4891222.64471325, 699.6703612147], + [1164266.2440499, 4891223.33429531, 699.3198047419], + [1164267.80875636, 4891223.98741666, 698.2070961], + [1164268.82799939, 4891224.43840493, 696.5127834496], + [1164269.13779291, 4891224.61039283, 694.6729367562], + [1164268.79537643, 4891224.52236891, 692.832938653], + [1164267.74608794, 4891224.14871075, 691.1381457952], + [1164266.16164598, 4891223.54638401, 690.024706082], + [1164264.44888335, 4891222.87281754, 689.6733558218], + [1164262.74234334, 4891222.18323549, 690.0239122946], + [1164261.17763688, 4891221.53011413, 691.1366209365], + [1164260.15839385, 4891221.07912587, 692.830933587], + [1164259.84860033, 4891220.90713797, 694.6707802804], + [1164274.19391815, 4891184.32938229, 693.7373268172], + [1164274.53632193, 4891184.41743933, 695.5773258577], + [1164275.58551697, 4891184.79133682, 697.2721252192], + [1164277.16979779, 4891185.39407548, 698.3855760843], + [1164278.88237444, 4891186.06811702, 698.7369391843], + [1164280.58871945, 4891186.7581969, 698.3863961498], + [1164282.15323618, 4891187.41180236, 697.2737005581], + [1164283.17234219, 4891187.86313985, 695.5793973011], + [1164283.48207573, 4891188.03528019, 693.7395546828], + [1164283.13967194, 4891187.94722315, 691.8995556423], + [1164282.09047691, 4891187.57332566, 690.2047562808], + [1164280.50619609, 4891186.970587, 689.0913054157], + [1164278.79361944, 4891186.29654547, 688.7399423157], + [1164277.08727443, 4891185.60646558, 689.0904853501], + [1164275.5227577, 4891184.95286012, 690.2031809419], + [1164274.50365169, 4891184.50152263, 691.8974841989], + [1164274.19391815, 4891184.32938229, 693.7373268172], + [1164288.52551112, 4891147.75161731, 692.8017983612], + [1164288.86796427, 4891147.83955006, 694.6417943293], + [1164289.9172402, 4891148.21324824, 696.3365890699], + [1164291.50161738, 4891148.81575251, 697.4500347148], + [1164293.214283, 4891149.48957992, 697.8013932078], + [1164294.92070415, 4891150.17947871, 697.4508464348], + [1164296.48527656, 4891150.83295457, 696.3381483771], + [1164297.50440156, 4891151.28425227, 694.6438446923], + [1164297.81411722, 4891151.45644153, 692.8040035545], + [1164297.47166408, 4891151.36850879, 690.9640075864], + [1164296.42238814, 4891150.99481061, 689.2692128458], + [1164294.83801096, 4891150.39230633, 688.1557672009], + [1164293.12534535, 4891149.71847893, 687.8044087079], + [1164291.41892419, 4891149.02858014, 688.1549554809], + [1164289.85435178, 4891148.37510428, 689.2676535386], + [1164288.83522679, 4891147.92380657, 690.9619572234], + [1164288.52551112, 4891147.75161731, 692.8017983612], + [1164302.38690436, 4891112.3702279, 691.8952255936], + [1164302.72931347, 4891112.45827334, 693.7352245685], + [1164303.77838994, 4891112.83247812, 695.4300327871], + [1164305.36244229, 4891113.43580649, 696.5435003473], + [1164307.07474282, 4891114.11055957, 696.894883452], + [1164308.78078874, 4891114.80140933, 696.5443619589], + [1164310.34500417, 4891115.45578947, 695.4316879357], + [1164311.36388076, 4891115.90771587, 693.7374009552], + [1164311.67349925, 4891116.08015039, 691.8975663272], + [1164311.33109014, 4891115.99210495, 690.0575673522], + [1164310.28201367, 4891115.61790017, 688.3627591336], + [1164308.69796132, 4891115.0145718, 687.2492915734], + [1164306.9856608, 4891114.33981872, 686.8979084687], + [1164305.27961487, 4891113.64896896, 687.2484299618], + [1164303.71539944, 4891112.99458881, 688.361103985], + [1164302.69652285, 4891112.54266242, 690.0553909655], + [1164302.38690436, 4891112.3702279, 691.8952255936], + [1164316.24150096, 4891076.9992223, 690.9871110726], + [1164316.58393002, 4891077.08721836, 692.8271088934], + [1164317.63301341, 4891077.461411, 694.5219172629], + [1164319.21705634, 4891078.06477208, 695.635386403], + [1164320.92933497, 4891078.73959059, 695.9867720124], + [1164322.63534945, 4891079.43053028, 695.6362536701], + [1164324.19952518, 4891080.0850208, 694.5235832757], + [1164325.21836259, 4891080.53705332, 692.8292995656], + [1164325.52795097, 4891080.70956686, 690.9894671704], + [1164325.18552191, 4891080.6215708, 689.1494693496], + [1164324.13643852, 4891080.24737816, 687.45466098], + [1164322.55239559, 4891079.64401709, 686.34119184], + [1164320.84011696, 4891078.96919857, 685.9898062305], + [1164319.13410248, 4891078.27825889, 686.3403245728], + [1164317.56992675, 4891077.62376836, 687.4529949672], + [1164316.55108934, 4891077.17173584, 689.1472786774], + [1164316.24150096, 4891076.9992223, 690.9871110726], + [1164338.92428892, 4891018.82462499, 689.4856676222], + [1164339.26718411, 4891018.91143712, 691.3256352189], + [1164340.31742054, 4891019.28272979, 693.0203703589], + [1164341.90310364, 4891019.88197874, 694.1337360288], + [1164343.61709577, 4891020.55250943, 694.4850139784], + [1164345.32476861, 4891021.23930622, 694.1343918119], + [1164346.89040961, 4891021.89014424, 693.0216301126], + [1164347.9101338, 4891022.33997652, 691.3272916932], + [1164348.2198992, 4891022.51206588, 689.487449183], + [1164347.87700401, 4891022.42525376, 687.6474815864], + [1164346.82676757, 4891022.05396109, 685.9527464464], + [1164345.24108448, 4891021.45471215, 684.8393807764], + [1164343.52709235, 4891020.78418145, 684.4881028268], + [1164341.81941951, 4891020.09738466, 684.8387249933], + [1164340.25377851, 4891019.44654664, 685.9514866927], + [1164339.23405432, 4891018.99671436, 687.645825112], + [1164338.92428892, 4891018.82462499, 689.4856676222], + [1164350.17022659, 4890989.70923981, 688.7281356942], + [1164350.51354237, 4890989.79497644, 690.5680755973], + [1164351.56485457, 4890990.16354419, 692.2627411772], + [1164353.15208399, 4890990.75888774, 693.3760074203], + [1164354.86770162, 4890991.42532011, 693.7271811978], + [1164356.57695619, 4890992.10813487, 693.3764579565], + [1164358.14400472, 4890992.75543635, 692.2636066533], + [1164359.16459338, 4890993.20310527, 690.5692136286], + [1164359.47454995, 4890993.37472887, 688.7293596624], + [1164359.13123417, 4890993.28899225, 686.8894197593], + [1164358.07992197, 4890992.9204245, 685.1947541795], + [1164356.49269255, 4890992.32508094, 684.0814879364], + [1164354.77707492, 4890991.65864857, 683.7303141588], + [1164353.06782034, 4890990.97583382, 684.0810374002], + [1164351.50077182, 4890990.32853233, 685.1938887033], + [1164350.48018316, 4890989.88086341, 686.8882817281], + [1164350.17022659, 4890989.70923981, 688.7281356942], + [1164361.37920725, 4890960.56147631, 687.9663377442], + [1164361.72245943, 4890960.64737769, 689.8062820954], + [1164362.7735274, 4890961.0165744, 691.5009646421], + [1164364.36036991, 4890961.61291317, 692.6142577282], + [1164366.07555864, 4890962.28044817, 692.9654612437], + [1164367.7843771, 4890962.96438359, 692.614768225], + [1164369.35101586, 4890963.6127375, 691.501945302], + [1164370.37132546, 4890964.06112246, 689.807571584], + [1164370.68118063, 4890964.23300538, 687.9677246067], + [1164370.33792845, 4890964.147104, 686.1277802555], + [1164369.28686048, 4890963.77790729, 684.4330977089], + [1164367.70001797, 4890963.18156853, 683.3198046227], + [1164365.98482924, 4890962.51403353, 682.9686011072], + [1164364.27601077, 4890961.8300981, 683.319294126], + [1164362.70937202, 4890961.1817442, 684.432117049], + [1164361.68906242, 4890960.73335923, 686.126490767], + [1164361.37920725, 4890960.56147631, 687.9663377442], + [1164372.94705484, 4890930.61502616, 687.1843625666], + [1164373.28983798, 4890930.70212873, 689.0243381754], + [1164374.33958883, 4890931.07467104, 690.7191074838], + [1164375.92448656, 4890931.67593879, 691.8325282737], + [1164377.63759897, 4890932.3487295, 692.1838678856], + [1164379.34437002, 4890933.03784197, 691.8333088657], + [1164380.90915564, 4890933.69087538, 690.7206069943], + [1164381.92828768, 4890934.14222612, 689.0263099107], + [1164382.23782532, 4890934.31489782, 687.1864831948], + [1164381.89504218, 4890934.22779525, 685.346507586], + [1164380.84529132, 4890933.85525294, 683.6517382776], + [1164379.2603936, 4890933.25398519, 682.5383174877], + [1164377.54728118, 4890932.58119448, 682.1869778758], + [1164375.84051014, 4890931.89208201, 682.5375368957], + [1164374.27572451, 4890931.2390486, 683.6502387671], + [1164373.25659248, 4890930.78769786, 685.3445358508], + [1164372.94705484, 4890930.61502616, 687.1843625666], + [1164384.61728765, 4890900.70263682, 686.4069085001], + [1164384.95950676, 4890900.791169, 688.246921076], + [1164386.00769104, 4890901.16764873, 689.9417917858], + [1164387.59028254, 4890901.77469948, 691.0553613388], + [1164389.30093693, 4890902.45364571, 691.4068591945], + [1164391.00528764, 4890903.14881256, 691.0564557332], + [1164392.56788655, 4890903.80730818, 689.943894108], + [1164393.58563395, 4890904.26210797, 688.2496854598], + [1164393.89480511, 4890904.43567901, 686.4098816327], + [1164393.552586, 4890904.34714683, 684.5698690568], + [1164392.50440172, 4890903.9706671, 682.874998347], + [1164390.92181021, 4890903.36361635, 681.761428794], + [1164389.21115583, 4890902.68467012, 681.4099309383], + [1164387.50680512, 4890901.98950327, 681.7603343996], + [1164385.94420621, 4890901.33100765, 682.8728960248], + [1164384.92645881, 4890900.87620786, 684.567104673], + [1164384.61728765, 4890900.70263682, 686.4069085001], + [1164408.11572656, 4890840.96402788, 684.8589461459], + [1164408.45765244, 4890841.05329961, 686.6989780639], + [1164409.50492, 4890841.43207524, 688.3939088238], + [1164411.08612058, 4890842.0426037, 689.5075693389], + [1164412.79526747, 4890842.72531571, 689.8591656917], + [1164414.49811293, 4890843.42423992, 689.5088605081], + [1164416.05932805, 4890844.08618657, 688.3963891487], + [1164417.0761696, 4890844.54324163, 686.7022394908], + [1164417.38505933, 4890844.71750812, 684.862453855], + [1164417.04313345, 4890844.62823639, 683.022421937], + [1164415.99586589, 4890844.24946077, 681.3274911771], + [1164414.41466531, 4890843.6389323, 680.213830662], + [1164412.70551842, 4890842.9562203, 679.8622343092], + [1164411.00267296, 4890842.25729608, 680.2125394929], + [1164409.44145784, 4890841.59534944, 681.3250108522], + [1164408.42461629, 4890841.13829437, 683.0191605101], + [1164408.11572656, 4890840.96402788, 684.8589461459], + [1164422.90119327, 4890803.37705363, 683.8816893507], + [1164423.24320282, 4890803.46611678, 685.7217161769], + [1164424.29057876, 4890803.84463113, 687.4166414503], + [1164425.87188874, 4890804.45490361, 688.5302973895], + [1164427.58112189, 4890805.13742057, 688.8818909823], + [1164429.28402701, 4890805.83621759, 688.5315848459], + [1164430.84526713, 4890806.49812344, 687.419114643], + [1164431.86208857, 4890806.95524484, 685.7249682255], + [1164432.17092246, 4890807.12965846, 683.8851869733], + [1164431.82891291, 4890807.04059531, 682.0451601472], + [1164430.78153697, 4890806.66208096, 680.3502348737], + [1164429.20022699, 4890806.05180848, 679.2365789345], + [1164427.49099383, 4890805.36929152, 678.8849853417], + [1164425.78808872, 4890804.6704945, 679.2352914781], + [1164424.2268486, 4890804.00858864, 680.347761681], + [1164423.21002716, 4890803.55146725, 682.0419080986], + [1164422.90119327, 4890803.37705363, 683.8816893507], + [1164438.56827423, 4890763.56845479, 682.8428679775], + [1164438.91020186, 4890763.65772373, 684.682900329], + [1164439.95728049, 4890764.03698161, 686.3778455617], + [1164441.53812454, 4890764.64841819, 687.4915327495], + [1164443.24684404, 4890765.33221792, 687.843160776], + [1164444.94922912, 4890766.0323131, 687.4928894862], + [1164446.50998315, 4890766.69543188, 686.3804518412], + [1164447.52647656, 4890767.15337111, 684.6863273761], + [1164447.83519518, 4890767.32807122, 682.8465538134], + [1164447.49326755, 4890767.23880227, 681.006521462], + [1164446.44618892, 4890766.8595444, 679.3115762293], + [1164444.86534487, 4890766.24810782, 678.1978890414], + [1164443.15662537, 4890765.56430808, 677.8462610149], + [1164441.45424029, 4890764.8642129, 678.1965323047], + [1164439.89348627, 4890764.20109413, 679.3089699497], + [1164438.87699285, 4890763.74315489, 681.0030944149], + [1164438.56827423, 4890763.56845479, 682.8428679775], + [1164454.08089084, 4890723.73703695, 681.7927525613], + [1164454.42382897, 4890723.8237618, 683.6327186692], + [1164455.47348289, 4890724.19659566, 685.3274980619], + [1164457.05802459, 4890724.79883486, 686.4409484493], + [1164458.77062856, 4890725.47298885, 686.7923285269], + [1164460.4767914, 4890726.16371709, 686.4418167897], + [1164462.04090462, 4890726.81852271, 685.3291661364], + [1164463.05945806, 4890727.27138409, 683.6349120525], + [1164463.36862772, 4890727.44500175, 681.7951115749], + [1164463.02568958, 4890727.3582769, 679.955145467], + [1164461.97603566, 4890726.98544304, 678.2603660743], + [1164460.39149396, 4890726.38320384, 677.1469156869], + [1164458.67889, 4890725.70904985, 676.7955356093], + [1164456.97272715, 4890725.01832161, 677.1460473465], + [1164455.40861393, 4890724.36351599, 678.2586979998], + [1164454.39006049, 4890723.91065461, 679.9529520837], + [1164454.08089084, 4890723.73703695, 681.7927525613], + [1164467.06666723, 4890689.3881259, 680.8668878178], + [1164467.41003933, 4890689.47376346, 682.7068243239], + [1164468.46175411, 4890689.84140799, 684.4014628259], + [1164470.04967573, 4890690.43513028, 685.5146820703], + [1164471.76609132, 4890691.09967617, 685.8658014405], + [1164473.47618181, 4890691.7805012, 685.5150210282], + [1164475.04404292, 4890692.42585399, 684.4021139612], + [1164476.06521744, 4890692.8721012, 682.7076805143], + [1164476.37542933, 4890693.04308449, 680.8678086622], + [1164476.03205723, 4890692.95744692, 679.027872156], + [1164474.98034245, 4890692.58980239, 677.3332336541], + [1164473.39242083, 4890691.9960801, 676.2200144097], + [1164471.67600524, 4890691.33153422, 675.8688950395], + [1164469.96591475, 4890690.65070918, 676.2196754518], + [1164468.39805364, 4890690.00535639, 677.3325825188], + [1164467.37687912, 4890689.55910919, 679.0270159657], + [1164467.06666723, 4890689.3881259, 680.8668878178], + [1164477.17891535, 4890664.82172669, 680.2189699454], + [1164477.52034817, 4890664.9122349, 682.059032413], + [1164478.56686097, 4890665.29290453, 683.7540067282], + [1164480.14719903, 4890665.90559826, 684.8677146606], + [1164481.85557697, 4890666.59024136, 685.2193514524], + [1164483.55779059, 4890667.29075298, 684.8690776671], + [1164485.11857812, 4890667.95377488, 683.7566250522], + [1164486.13532702, 4890668.41106448, 682.0624752975], + [1164486.44444261, 4890668.58476563, 680.2226728146], + [1164486.10300979, 4890668.49425742, 678.382610347], + [1164485.05649699, 4890668.1135878, 676.6876360318], + [1164483.47615893, 4890667.50089406, 675.5739280994], + [1164481.767781, 4890666.81625096, 675.2222913076], + [1164480.06556737, 4890666.11573934, 675.5725650928], + [1164478.50477984, 4890665.45271745, 676.6850177078], + [1164477.48803094, 4890664.99542784, 678.3791674625], + [1164477.17891535, 4890664.82172669, 680.2189699454], + [1164487.2347048, 4890640.3591615, 679.5779906177], + [1164487.57769704, 4890640.44575999, 681.4179504518], + [1164488.62903789, 4890640.81431324, 683.1126067153], + [1164490.21668453, 4890641.40866137, 684.2258330847], + [1164491.93297362, 4890642.07344379, 684.5769485466], + [1164493.64307845, 4890642.75414281, 684.2261546955], + [1164495.21111124, 4890643.39897154, 683.1132245268], + [1164496.23259183, 4890643.84437688, 681.4187628241], + [1164496.5431622, 4890644.01442032, 679.5788643352], + [1164496.20016996, 4890643.92782183, 677.738904501], + [1164495.14882911, 4890643.55926857, 676.0442482376], + [1164493.56118247, 4890642.96492045, 674.9310218681], + [1164491.84489338, 4890642.30013802, 674.5799064062], + [1164490.13478855, 4890641.61943901, 674.9307002573], + [1164488.56675575, 4890640.97461027, 676.043630426], + [1164487.54527517, 4890640.52920494, 677.7380921287], + [1164487.2347048, 4890640.3591615, 679.5779906177], + [1164495.95008982, 4890617.356504, 678.9743801158], + [1164496.29652911, 4890617.43399452, 680.8141002139], + [1164497.3584033, 4890617.77466556, 682.5080225701], + [1164498.96194456, 4890618.32692134, 683.6201409964], + [1164500.69540912, 4890618.94620848, 683.9700589433], + [1164502.42262175, 4890619.58158247, 683.6180720577], + [1164504.00633452, 4890620.18485882, 682.5040481566], + [1164505.03802168, 4890620.60320398, 680.808874181], + [1164505.3516843, 4890620.76503201, 678.9687594462], + [1164505.00524501, 4890620.68754149, 677.1290393482], + [1164503.94337082, 4890620.34687045, 675.4351169919], + [1164502.33982957, 4890619.79461467, 674.3229985656], + [1164500.606365, 4890619.17532752, 673.9730806188], + [1164498.87915237, 4890618.53995354, 674.3250675043], + [1164497.2954396, 4890617.93667718, 675.4390914055], + [1164496.26375244, 4890617.51833202, 677.134265381], + [1164495.95008982, 4890617.356504, 678.9743801158], + [1164504.64683072, 4890594.15125017, 678.3629298303], + [1164504.99210386, 4890594.23189636, 680.2027327351], + [1164506.05005013, 4890594.58318785, 681.8969338393], + [1164507.64753021, 4890595.15182906, 683.0094823434], + [1164509.37436614, 4890595.78903404, 683.3598706016], + [1164511.09491124, 4890596.44242959, 683.0083567598], + [1164512.67243952, 4890597.0624204, 681.8947716027], + [1164513.700011, 4890597.49188691, 680.1998895687], + [1164514.01230362, 4890597.65741448, 678.359871966], + [1164513.66703047, 4890597.57676829, 676.5200690612], + [1164512.60908421, 4890597.2254768, 674.8258679571], + [1164511.01160412, 4890596.65683559, 673.7133194529], + [1164509.2847682, 4890596.01963061, 673.3629311948], + [1164507.56422309, 4890595.36623506, 673.7144450366], + [1164505.98669481, 4890594.74624425, 674.8280301936], + [1164504.95912333, 4890594.31677774, 676.5229122277], + [1164504.64683072, 4890594.15125017, 678.3629298303], + [1164519.24546902, 4890556.58057061, 677.3639484565], + [1164519.58989177, 4890556.66346868, 679.2038107568], + [1164520.64502098, 4890557.02221517, 680.8982085478], + [1164522.23816987, 4890557.60231681, 682.0110594328], + [1164523.96027819, 4890558.25203017, 682.3617777329], + [1164525.67607536, 4890558.91798716, 682.0105953416], + [1164527.24920795, 4890559.54960664, 680.8973170326], + [1164528.27386419, 4890559.98678431, 679.2026384863], + [1164528.5851998, 4890560.1548419, 677.3626876635], + [1164528.24077705, 4890560.07194382, 675.5228253632], + [1164527.18564784, 4890559.71319733, 673.8284275722], + [1164525.59249895, 4890559.1330957, 672.7155766872], + [1164523.87039063, 4890558.48338234, 672.3648583871], + [1164522.15459346, 4890557.81742535, 672.7160407784], + [1164520.58146087, 4890557.18580586, 673.8293190874], + [1164519.55680463, 4890556.74862819, 675.5239976337], + [1164519.24546902, 4890556.58057061, 677.3639484565], + [1164533.98892216, 4890519.09553615, 676.3621971104], + [1164534.33313867, 4890519.17897039, 678.202073512], + [1164535.38751532, 4890519.53966835, 679.8965227276], + [1164536.97948364, 4890520.12282981, 681.0094542753], + [1164538.70028972, 4890520.77591749, 681.3602615458], + [1164540.41476796, 4890521.44529134, 681.0091692607], + [1164541.98666704, 4890522.08010559, 679.8959752171], + [1164543.01049014, 4890522.51944016, 678.2013535799], + [1164543.32153203, 4890522.68825696, 676.3614228136], + [1164542.97731552, 4890522.60482272, 674.521546412], + [1164541.92293887, 4890522.24412476, 672.8270971964], + [1164540.33097055, 4890521.66096329, 671.7141656487], + [1164538.61016447, 4890521.00787562, 671.3633583782], + [1164536.89568623, 4890520.33850177, 671.7144506632], + [1164535.32378714, 4890519.70368752, 672.8276447069], + [1164534.29996404, 4890519.26435295, 674.522266344], + [1164533.98892216, 4890519.09553615, 676.3621971104], + [1164543.96938496, 4890493.67458444, 675.6823852111], + [1164544.31361151, 4890493.75798891, 677.5222607031], + [1164545.36793617, 4890494.11880582, 679.2167127484], + [1164546.95979565, 4890494.70222396, 680.3296506283], + [1164548.68046618, 4890495.35563452, 680.6804659576], + [1164550.39479465, 4890496.02536741, 680.3293827002], + [1164551.96653982, 4890496.66055305, 679.2161980608], + [1164552.99024231, 4890497.1001812, 677.5215839305], + [1164553.30121973, 4890497.26915784, 675.6816573329], + [1164552.95699317, 4890497.18575338, 673.8417818409], + [1164551.90266851, 4890496.82493646, 672.1473297956], + [1164550.31080904, 4890496.24151833, 671.0343919157], + [1164548.59013851, 4890495.58810777, 670.6835765863], + [1164546.87581003, 4890494.91837487, 671.0346598438], + [1164545.30406486, 4890494.28318924, 672.1478444831], + [1164544.28036238, 4890493.84356108, 673.8424586134], + [1164543.96938496, 4890493.67458444, 675.6823852111], + [1164553.91600192, 4890468.25308588, 674.9994113566], + [1164554.26055621, 4890468.33563847, 676.8392636332], + [1164555.31568388, 4890468.69435697, 678.5336582682], + [1164556.90868211, 4890469.27479418, 679.6465144912], + [1164558.63054012, 4890469.92509305, 679.9972445177], + [1164560.34601599, 4890470.59181654, 679.6460787066], + [1164561.9187728, 4890471.22434563, 678.5328211298], + [1164562.94308478, 4890471.6623692, 676.8381628639], + [1164563.25417982, 4890471.83103015, 674.9982274642], + [1164562.90962552, 4890471.74847756, 673.1583751876], + [1164561.85449785, 4890471.38975906, 671.4639805526], + [1164560.26149962, 4890470.80932185, 670.3511243297], + [1164558.53964161, 4890470.15902298, 670.0003943031], + [1164556.82416574, 4890469.49229949, 670.3515601142], + [1164555.25140893, 4890468.8597704, 671.464817691], + [1164554.22709695, 4890468.42174683, 673.1594759569], + [1164553.91600192, 4890468.25308588, 674.9994113566], + [1164565.01660505, 4890439.6720816, 674.228158654], + [1164565.36136359, 4890439.75409927, 676.0679963442], + [1164566.41700034, 4890440.11147771, 677.7623543371], + [1164568.01072447, 4890440.69000109, 678.8751581831], + [1164569.73334194, 4890441.33829576, 679.2258333317], + [1164571.44955377, 4890442.00307548, 678.8746142733], + [1164573.02296193, 4890442.63388237, 677.761309491], + [1164574.04766949, 4890443.07085764, 676.066622456], + [1164574.35884553, 4890443.23930047, 674.2266810184], + [1164574.01408699, 4890443.1572828, 672.3868433281], + [1164572.95845024, 4890442.79990435, 670.6924853352], + [1164571.3647261, 4890442.22138098, 669.5796814892], + [1164569.64210863, 4890441.5730863, 669.2290063406], + [1164567.92589681, 4890440.90830658, 669.580225399], + [1164566.35248865, 4890440.2774997, 670.6935301813], + [1164565.32778109, 4890439.84052442, 672.3882172164], + [1164565.01660505, 4890439.6720816, 674.228158654], + [1164576.09309224, 4890411.07734561, 673.454333444], + [1164576.43782235, 4890411.15943597, 675.294173], + [1164577.49327528, 4890411.51728667, 676.9885434501], + [1164579.08668639, 4890412.09661463, 678.1013685776], + [1164580.80894459, 4890412.74583297, 678.4520681878], + [1164582.52478126, 4890413.41157733, 678.1008746996], + [1164584.09782606, 4890414.04331876, 676.9875947147], + [1164585.12227314, 4890414.48096413, 675.2929254896], + [1164585.43333752, 4890414.64969445, 673.4529917296], + [1164585.08860742, 4890414.56760409, 671.6131521736], + [1164584.03315449, 4890414.20975339, 669.9187817235], + [1164582.43974338, 4890413.63042544, 668.805956596], + [1164580.71748518, 4890412.98120709, 668.4552569858], + [1164579.0016485, 4890412.31546273, 668.806450474], + [1164577.42860371, 4890411.68372131, 669.9197304589], + [1164576.40415662, 4890411.24607594, 671.614399684], + [1164576.09309224, 4890411.07734561, 673.454333444], + [1164585.96715991, 4890385.66062139, 672.7649875267], + [1164586.31165354, 4890385.74332628, 674.6048436824], + [1164587.36630774, 4890386.10325169, 676.2992701865], + [1164588.9584856, 4890386.6857827, 677.4121818578], + [1164590.67939465, 4890387.3385049, 677.7629761418], + [1164592.39387392, 4890388.00777442, 677.4118779047], + [1164593.96565926, 4890388.64278645, 676.2986862952], + [1164594.98926773, 4890389.08260936, 674.6040759124], + [1164595.30005233, 4890389.25206589, 672.7641617796], + [1164594.9555587, 4890389.169361, 670.924305624], + [1164593.9009045, 4890388.8094356, 669.2298791198], + [1164592.30872665, 4890388.22690459, 668.1169674485], + [1164590.58781759, 4890387.57418239, 667.7661731646], + [1164588.87333832, 4890386.90491287, 668.1172714017], + [1164587.30155298, 4890386.26990084, 669.2304630112], + [1164586.27794451, 4890385.83007792, 670.925073394], + [1164585.96715991, 4890385.66062139, 672.7649875267], + [1164595.45556728, 4890361.43475704, 672.106947723], + [1164595.79954467, 4890361.51879333, 673.9468399941], + [1164596.85256401, 4890361.88293511, 675.6413808715], + [1164598.4422538, 4890362.47188295, 676.7544666053], + [1164600.16046185, 4890363.13157116, 677.1054498488], + [1164601.87224054, 4890363.80780563, 676.7545405425], + [1164603.44153912, 4890364.44923112, 675.6415229042], + [1164604.46351472, 4890364.8932653, 673.9470267557], + [1164604.77378524, 4890365.06404767, 672.1071485875], + [1164604.42980785, 4890364.98001138, 670.2672563164], + [1164603.37678851, 4890364.6158696, 668.572715439], + [1164601.78709872, 4890364.02692176, 667.4596297052], + [1164600.06889067, 4890363.36723355, 667.1086464617], + [1164598.35711198, 4890362.69099908, 667.459555768], + [1164596.7878134, 4890362.04957359, 668.5725734063], + [1164595.7658378, 4890361.60553941, 670.2670695548], + [1164595.45556728, 4890361.43475704, 672.106947723], + [1164604.57646913, 4890338.40487427, 671.4806938688], + [1164604.91994873, 4890338.49017983, 673.3206206111], + [1164605.97139162, 4890338.85834092, 675.0152706469], + [1164607.55868225, 4890339.45340558, 676.1285225045], + [1164609.27428581, 4890340.11973405, 676.4796860878], + [1164610.9834604, 4890340.80260772, 676.1289570927], + [1164612.55036109, 4890341.45014667, 675.0161054871], + [1164613.57076217, 4890341.89819503, 673.3217183586], + [1164613.88053699, 4890342.0702411, 671.4818745112], + [1164613.5370574, 4890341.98493554, 669.6419477689], + [1164612.4856145, 4890341.61677444, 667.9472977331], + [1164610.89832387, 4890341.02170979, 666.8340458755], + [1164609.18272031, 4890340.35538131, 666.4828822922], + [1164607.47354572, 4890339.67250765, 666.8336112873], + [1164605.90664503, 4890339.0249687, 667.9464628928], + [1164604.88624395, 4890338.57692034, 669.6408500214], + [1164604.57646913, 4890338.40487427, 671.4806938688], + [1164613.7062992, 4890315.40019466, 670.8537622309], + [1164614.04976538, 4890315.48553376, 672.6936898323], + [1164615.10106801, 4890315.85404737, 674.3883492982], + [1164616.68811048, 4890316.44973586, 675.5016178872], + [1164618.40342436, 4890317.11679267, 675.8528010262], + [1164620.11229271, 4890317.8004364, 675.5020927233], + [1164621.67889271, 4890318.44873151, 674.3892614541], + [1164622.69907355, 4890318.89733383, 672.6948892437], + [1164623.00874811, 4890319.06963217, 670.8550522142], + [1164622.66528193, 4890318.98429306, 669.0151246128], + [1164621.61397931, 4890318.61577946, 667.320465147], + [1164620.02693683, 4890318.02009096, 666.2071965579], + [1164618.31162295, 4890317.35303415, 665.856013419], + [1164616.6027546, 4890316.66939043, 666.2067217219], + [1164615.0361546, 4890316.02109532, 667.319552991], + [1164614.01597376, 4890315.572493, 669.0139252015], + [1164613.7062992, 4890315.40019466, 670.8537622309], + [1164622.76407744, 4890292.3989131, 670.2248397802], + [1164623.10831171, 4890292.48229378, 672.0647137004], + [1164624.16177424, 4890292.84529468, 673.7592220127], + [1164625.75200716, 4890293.43283801, 674.8722672496], + [1164627.47072799, 4890294.09119559, 675.2232118316], + [1164629.18295648, 4890294.76625849, 674.8722682093], + [1164630.75259847, 4890295.40678398, 673.7592238561], + [1164631.7747132, 4890295.85044532, 672.0647161244], + [1164632.08491045, 4890296.02140602, 670.2248423872], + [1164631.74067619, 4890295.93802533, 668.3849684669], + [1164630.68721365, 4890295.57502444, 666.6904601546], + [1164629.09698073, 4890294.98748111, 665.5774149177], + [1164627.3782599, 4890294.32912353, 665.2264703357], + [1164625.66603141, 4890293.65406063, 665.577413958], + [1164624.09638942, 4890293.01353514, 666.6904583112], + [1164623.07427469, 4890292.5698738, 668.3849660429], + [1164622.76407744, 4890292.3989131, 670.2248397802], + [1164635.12702512, 4890260.02007091, 669.332409304], + [1164635.47267803, 4890260.09975651, 671.172181051], + [1164636.53008645, 4890260.45247125, 672.866404845], + [1164638.12613061, 4890261.02486247, 673.9790309316], + [1164639.85104658, 4890261.66706489, 674.329528593], + [1164641.5693764, 4890262.32621554, 673.9781447511], + [1164643.1445321, 4890262.95235934, 672.8647024998], + [1164644.17013977, 4890263.38690742, 671.1699426045], + [1164644.48126386, 4890263.55544655, 669.3300018243], + [1164644.13561095, 4890263.47576095, 667.4902300773], + [1164643.07820252, 4890263.12304621, 665.7960062833], + [1164641.48215836, 4890262.55065499, 664.6833801967], + [1164639.75724239, 4890261.90845258, 664.3328825353], + [1164638.03891257, 4890261.24930192, 664.6842663772], + [1164636.46375687, 4890260.62315812, 665.7977086285], + [1164635.4381492, 4890260.18861004, 667.4924685237], + [1164635.12702512, 4890260.02007091, 669.332409304], + [1164653.81614925, 4890211.58672446, 667.992993255], + [1164654.15967242, 4890211.67193018, 669.8329173209], + [1164655.21071066, 4890212.0411462, 671.5275964171], + [1164656.79719297, 4890212.63830271, 672.6409058162], + [1164658.51180644, 4890213.30718655, 672.992139654], + [1164660.21989892, 4890213.99284808, 672.641487278], + [1164661.78569945, 4890214.64321624, 671.5287134002], + [1164662.80525158, 4890215.0934421, 669.8343860636], + [1164663.11458757, 4890215.2666072, 667.9945729078], + [1164662.7710644, 4890215.18140148, 666.1546488418], + [1164661.72002616, 4890214.81218545, 664.4599697457], + [1164660.13354385, 4890214.21502895, 663.3466603466], + [1164658.41893038, 4890213.54614511, 662.9954265088], + [1164656.7108379, 4890212.86048358, 663.3460788847], + [1164655.14503737, 4890212.21011542, 664.4588527625], + [1164654.12548523, 4890211.75988956, 666.1531800992], + [1164653.81614925, 4890211.58672446, 667.992993255], + [1164663.38885457, 4890187.48281429, 667.32796084], + [1164663.73202264, 4890187.56890078, 669.1679091887], + [1164664.78189771, 4890187.94100693, 670.8626679732], + [1164666.36659611, 4890188.54259764, 671.9760996378], + [1164668.07926498, 4890189.2163161, 672.3274667835], + [1164669.7854066, 4890189.90682864, 671.9769481687], + [1164671.34940335, 4890190.56168298, 670.8642979938], + [1164672.36776207, 4890191.01487811, 669.170052534], + [1164672.67671011, 4890191.18900991, 667.3302660371], + [1164672.33354204, 4890191.10292342, 665.4903176884], + [1164671.28366697, 4890190.73081727, 663.7955589039], + [1164669.69896857, 4890190.12922656, 662.6821272393], + [1164667.9862997, 4890189.4555081, 662.3307600936], + [1164666.28015808, 4890188.76499556, 662.6812787084], + [1164664.71616133, 4890188.11014122, 663.7939288833], + [1164663.69780261, 4890187.65694609, 665.4881743431], + [1164663.38885457, 4890187.48281429, 667.32796084], + [1164672.961203, 4890163.40010894, 666.6605054294], + [1164673.30462598, 4890163.48555546, 668.5004360797], + [1164674.35495825, 4890163.85651524, 670.1951632392], + [1164675.94022829, 4890164.4566736, 671.3085554377], + [1164677.6534451, 4890165.12901979, 671.6598848071], + [1164679.36007513, 4890165.8183098, 671.30933257], + [1164680.9244547, 4890166.4722067, 670.1966561037], + [1164681.94298316, 4890166.92497844, 668.502399076], + [1164682.25187398, 4890167.09925527, 666.6626166586], + [1164681.90845101, 4890167.01380876, 664.8226860083], + [1164680.85811873, 4890166.64284897, 663.1279588488], + [1164679.27284869, 4890166.04269061, 662.0145666503], + [1164677.55963188, 4890165.37034441, 661.6632372809], + [1164675.85300186, 4890164.68105441, 662.013789518], + [1164674.28862229, 4890164.02715751, 663.1264659843], + [1164673.27009383, 4890163.57438577, 664.820723012], + [1164672.961203, 4890163.40010894, 666.6605054294], + [1164683.82069956, 4890135.99868414, 665.8917890477], + [1164684.16450287, 4890136.08317557, 667.7316930557], + [1164685.21545826, 4890136.45257891, 669.4263770586], + [1164686.8014704, 4890137.05088934, 670.5397181987], + [1164688.5153722, 4890137.72153408, 670.8910006917], + [1164690.22258837, 4890138.40937226, 670.5404085858], + [1164691.78739654, 4890139.06221294, 669.4277032864], + [1164692.80607086, 4890139.51463354, 667.7334369382], + [1164693.11482381, 4890139.68926398, 665.8936646171], + [1164692.7710205, 4890139.60477255, 664.0537606091], + [1164691.72006511, 4890139.23536921, 662.3590766062], + [1164690.13405297, 4890138.63705877, 661.2457354661], + [1164688.42015117, 4890137.96641403, 660.8944529731], + [1164686.712935, 4890137.27857586, 661.2450450789], + [1164685.14812683, 4890136.62573518, 662.3577503783], + [1164684.12945251, 4890136.17331458, 664.0520167266], + [1164683.82069956, 4890135.99868414, 665.8917890477], + [1164697.68423437, 4890100.24020212, 664.8851152646], + [1164698.02914949, 4890100.32185464, 666.724939284], + [1164699.08373738, 4890100.68198325, 668.4193619512], + [1164700.67531728, 4890101.26607783, 669.5323025234], + [1164702.39528649, 4890101.92123107, 669.8831485017], + [1164704.10858808, 4890102.59353184, 669.5321185851], + [1164705.67902115, 4890103.23201102, 668.4190086073], + [1164706.70141493, 4890103.67493518, 666.7244746654], + [1164707.01137413, 4890103.84648598, 664.8846155609], + [1164706.666459, 4890103.76483347, 663.0447915415], + [1164705.61187112, 4890103.40470486, 661.3503688743], + [1164704.02029122, 4890102.82061028, 660.2374283021], + [1164702.30032201, 4890102.16545704, 659.8865823238], + [1164700.58702042, 4890101.49315627, 660.2376122404], + [1164699.01658735, 4890100.85467709, 661.3507222182], + [1164697.99419357, 4890100.41175293, 663.0452561601], + [1164697.68423437, 4890100.24020212, 664.8851152646], + [1164710.5126658, 4890067.14509677, 663.9499260028], + [1164710.85602288, 4890067.23069046, 665.7898624489], + [1164711.90525807, 4890067.60438533, 667.4846718062], + [1164713.48854333, 4890068.20951105, 668.5982117472], + [1164715.19942117, 4890068.88772051, 668.9497147503], + [1164716.90356168, 4890069.58325828, 668.5993469641], + [1164718.46547903, 4890070.24334197, 667.486852548], + [1164719.48218354, 4890070.70070529, 665.7927299482], + [1164719.79021925, 4890070.87714504, 663.9530100374], + [1164719.44686217, 4890070.79155135, 662.1130735913], + [1164718.39762698, 4890070.41785649, 660.4182642341], + [1164716.81434171, 4890069.81273077, 659.304724293], + [1164715.10346388, 4890069.13452131, 658.9532212899], + [1164713.39932337, 4890068.43898354, 659.3035890762], + [1164711.83740602, 4890067.77889985, 660.4160834923], + [1164710.8207015, 4890067.32153653, 662.110206092], + [1164710.5126658, 4890067.14509677, 663.9499260028], + [1164724.26437855, 4890032.58956327, 662.9623411876], + [1164724.60790301, 4890032.67474305, 664.802265931], + [1164725.65744096, 4890033.04769813, 666.4970545529], + [1164727.24110635, 4890033.65190053, 667.6105687287], + [1164728.95234969, 4890034.32922612, 667.9620471487], + [1164730.65681703, 4890035.02397713, 667.611657556], + [1164732.21899189, 4890035.68344552, 666.499146181], + [1164733.23581247, 4890036.14053798, 664.8050162529], + [1164733.54381286, 4890036.31707298, 662.9652991964], + [1164733.2002884, 4890036.23189319, 661.1253744531], + [1164732.15075045, 4890035.85893812, 659.4305858311], + [1164730.56708506, 4890035.25473572, 658.3170716554], + [1164728.85584173, 4890034.57741013, 657.9655932354], + [1164727.15137438, 4890033.88265911, 658.315982828], + [1164725.58919953, 4890033.22319072, 659.4284942031], + [1164724.57237894, 4890032.76609827, 661.1226241311], + [1164724.26437855, 4890032.58956327, 662.9623411876], + [1164738.86772364, 4889995.29167112, 661.8927713388], + [1164739.21203973, 4889995.37486512, 663.7326391673], + [1164740.26393129, 4889995.74192057, 665.4272587091], + [1164741.8511242, 4889996.33728246, 666.5405195243], + [1164743.56616511, 4889997.00509165, 666.8917252158], + [1164745.27440341, 4889997.69039381, 666.5410648321], + [1164746.84002132, 4889998.34123589, 665.4283062408], + [1164747.85906694, 4889998.7927548, 663.7340165869], + [1164748.16771934, 4889998.9676581, 661.8942527723], + [1164747.82340325, 4889998.8844641, 660.0543849438], + [1164746.77151169, 4889998.51740865, 658.359765402], + [1164745.18431879, 4889997.92204676, 657.2465045869], + [1164743.46927787, 4889997.25423757, 656.8952988954], + [1164741.76103957, 4889996.56893541, 657.2459592791], + [1164740.19542166, 4889995.91809333, 658.3587178703], + [1164739.17637605, 4889995.46657441, 660.0530075243], + [1164738.86772364, 4889995.29167112, 661.8927713388], + [1164753.45495317, 4889957.91635841, 660.8127619132], + [1164753.79862038, 4889958.00115479, 662.6526781538], + [1164754.84758259, 4889958.37552442, 664.3475160129], + [1164756.43000719, 4889958.98281211, 665.4611321396], + [1164758.13969028, 4889959.66403246, 665.812737039], + [1164759.84242305, 4889960.36312413, 665.4624868429], + [1164761.4028042, 4889961.02709198, 664.3501183863], + [1164762.4182073, 4889961.48775195, 662.6561000645], + [1164762.72543648, 4889961.66624121, 660.8164422249], + [1164762.38176928, 4889961.58144483, 658.9765259844], + [1164761.33280706, 4889961.2070752, 657.2816881252], + [1164759.75038247, 4889960.59978752, 656.1680719985], + [1164758.04069938, 4889959.91856716, 655.8164670991], + [1164756.33796661, 4889959.2194755, 656.1667172953], + [1164754.77758545, 4889958.55550764, 657.2790857519], + [1164753.76218235, 4889958.09484767, 658.9731040736], + [1164753.45495317, 4889957.91635841, 660.8127619132], + [1164768.68452625, 4889919.50793528, 659.6811682698], + [1164769.02846765, 4889919.59205118, 661.5210646458], + [1164770.07812754, 4889919.96469358, 663.2158522133], + [1164771.66155339, 4889920.56950436, 664.3293962775], + [1164773.37228801, 4889921.24812457, 664.6809255647], + [1164775.07604318, 4889921.94468915, 664.3306019108], + [1164776.63733315, 4889922.60641179, 663.2181682246], + [1164777.65329321, 4889923.06569724, 661.5241100137], + [1164777.96064378, 4889923.24388899, 659.6844436044], + [1164777.61670239, 4889923.15977309, 657.8445472284], + [1164776.56704249, 4889922.78713069, 656.1497596609], + [1164774.98361664, 4889922.18231991, 655.0362155967], + [1164773.27288202, 4889921.50369969, 654.6846863095], + [1164771.56912685, 4889920.80713511, 655.0350099634], + [1164770.00783688, 4889920.14541248, 656.1474436496], + [1164768.99187682, 4889919.68612703, 657.8415018605], + [1164768.68452625, 4889919.50793528, 659.6811682698], + [1164781.14577166, 4889887.07991674, 658.7345707013], + [1164781.49098356, 4889887.16083761, 660.5743728679], + [1164782.54502143, 4889887.52246066, 662.2688356215], + [1164784.13523577, 4889888.11018166, 663.3818759698], + [1164785.85341342, 4889888.77006251, 663.73285294], + [1164787.56467067, 4889889.44773754, 663.3819725583], + [1164789.13293648, 4889890.09189405, 662.2690211671], + [1164790.15355972, 4889890.53943497, 660.5746168453], + [1164790.46249047, 4889890.71364428, 658.7348331024], + [1164790.11727857, 4889890.63272342, 656.8950309359], + [1164789.0632407, 4889890.27110036, 655.2005681822], + [1164787.47302636, 4889889.68337937, 654.0875278339], + [1164785.75484871, 4889889.02349851, 653.7365508637], + [1164784.04359145, 4889888.34582348, 654.0874312454], + [1164782.47532565, 4889887.70166697, 655.2003826366], + [1164781.45470241, 4889887.25412606, 656.8947869584], + [1164781.14577166, 4889887.07991674, 658.7345707013], + [1164793.59368074, 4889854.54980302, 657.7800931935], + [1164793.93832113, 4889854.63214683, 659.6199396519], + [1164794.98967693, 4889855.00055602, 661.3146098178], + [1164796.57550011, 4889855.59941344, 662.4279896415], + [1164798.28872983, 4889856.27185687, 662.7793490725], + [1164799.99489177, 4889856.96247978, 662.4288624979], + [1164801.55829899, 4889857.61899476, 661.3162865676], + [1164802.57552856, 4889858.07518227, 659.6221444425], + [1164802.88311515, 4889858.2528346, 657.7824644758], + [1164802.53847476, 4889858.17049079, 655.9426180174], + [1164801.48711896, 4889857.8020816, 654.2479478515], + [1164799.90129578, 4889857.20322417, 653.1345680278], + [1164798.18806606, 4889856.53078075, 652.7832085968], + [1164796.48190412, 4889855.84015784, 653.1336951713], + [1164794.9184969, 4889855.18364285, 654.2462711017], + [1164793.90126733, 4889854.72745534, 655.9404132268], + [1164793.59368074, 4889854.54980302, 657.7800931935], + [1164807.71004171, 4889818.38942697, 656.692421147], + [1164808.05486639, 4889818.47129599, 658.5322543648], + [1164809.10611908, 4889818.83996156, 660.2269355509], + [1164810.69154173, 4889819.43983348, 661.3403509299], + [1164812.40419414, 4889820.1137434, 661.691759946], + [1164814.10966222, 4889820.80613151, 661.3413319426], + [1164815.67229925, 4889821.46460836, 660.228820068], + [1164816.68886293, 4889821.92249453, 658.5347323525], + [1164816.99602275, 4889822.10123807, 656.6950862566], + [1164816.65119807, 4889822.01936905, 654.8552530388], + [1164815.59994537, 4889821.65070348, 653.1605718527], + [1164814.01452273, 4889821.05083156, 652.0471564737], + [1164812.30187031, 4889820.37692164, 651.6957474577], + [1164810.59640223, 4889819.68453353, 652.046175461], + [1164809.03376521, 4889819.02605668, 653.1586873357], + [1164808.01720153, 4889818.56817051, 654.8527750512], + [1164807.71004171, 4889818.38942697, 656.692421147], + [1164816.46732589, 4889795.73052481, 655.9980517365], + [1164816.81294186, 4889795.81039386, 657.8378250372], + [1164817.86602977, 4889796.17444801, 659.5323690749], + [1164819.4540075, 4889796.76791281, 660.6455943894], + [1164821.1692945, 4889797.43522459, 660.9968079884], + [1164822.87728287, 4889798.12130809, 660.6461935319], + [1164824.44211241, 4889798.77430874, 659.5335200226], + [1164825.45995934, 4889799.22900073, 657.8393384405], + [1164825.76731114, 4889799.40728312, 655.9996794223], + [1164825.42169517, 4889799.32741407, 654.1599061215], + [1164824.36860726, 4889798.96335992, 652.4653620838], + [1164822.78062953, 4889798.36989512, 651.3521367693], + [1164821.06534252, 4889797.70258334, 651.0009231703], + [1164819.35735416, 4889797.01649984, 651.3515376268], + [1164817.79252462, 4889796.36349919, 652.4642111361], + [1164816.77467768, 4889795.9088072, 654.1583927183], + [1164816.46732589, 4889795.73052481, 655.9980517365], + [1164825.39067839, 4889773.05455101, 655.2905619972], + [1164825.73516669, 4889773.13719215, 657.1304238361], + [1164826.78358017, 4889773.51284458, 658.8253360946], + [1164828.36405261, 4889774.12496075, 659.9391529542], + [1164830.07096309, 4889774.81310516, 660.2910269492], + [1164831.77038881, 4889775.52049699, 659.9410877063], + [1164833.32712281, 4889776.19365773, 658.8290527367], + [1164834.3393967, 4889776.66224489, 657.1353109203], + [1164834.64464513, 4889776.84579331, 655.2958181229], + [1164834.30015683, 4889776.76315217, 653.4559562839], + [1164833.25174335, 4889776.38749973, 651.7610440255], + [1164831.67127091, 4889775.77538357, 650.6472271658], + [1164829.96436043, 4889775.08723916, 650.2953531708], + [1164828.26493471, 4889774.37984733, 650.6452924138], + [1164826.70820071, 4889773.70668659, 651.7573273833], + [1164825.69592681, 4889773.23809943, 653.4510691998], + [1164825.39067839, 4889773.05455101, 655.2905619972], + [1164833.98316973, 4889752.65005115, 654.633086223], + [1164834.32542757, 4889752.73796311, 656.4731199228], + [1164835.36606602, 4889753.13205502, 658.1686324936], + [1164836.9344534, 4889753.77285378, 659.2833828407], + [1164838.62809692, 4889754.49249814, 659.6362818449], + [1164840.31413687, 4889755.23168193, 659.2873769753], + [1164841.85840899, 4889755.93445139, 658.1763051919], + [1164842.86233416, 4889756.42288798, 656.4832089013], + [1164843.16472921, 4889756.61323811, 654.643937057], + [1164842.82247138, 4889756.52532615, 652.8039033572], + [1164841.78183293, 4889756.13123424, 651.1083907864], + [1164840.21344554, 4889755.49043548, 649.9936404393], + [1164838.51980202, 4889754.77079112, 649.640741435], + [1164836.83376207, 4889754.03160733, 649.9896463047], + [1164835.28948996, 4889753.32883787, 651.1007180881], + [1164834.28556479, 4889752.84040128, 652.7938143787], + [1164833.98316973, 4889752.65005115, 654.633086223], + [1164844.10165063, 4889729.95139222, 653.8814608778], + [1164844.44163654, 4889730.04438874, 655.7216642938], + [1164845.47390798, 4889730.45725923, 657.4178026908], + [1164847.02914598, 4889731.12758618, 658.5335368144], + [1164848.70827154, 4889731.8798412, 658.8875221238], + [1164850.37959665, 4889732.65208528, 658.539718401], + [1164851.91009499, 4889733.38580893, 657.4296774658], + [1164852.90470258, 4889733.89519505, 655.7372786637], + [1164853.20379359, 4889734.09298693, 653.8982543456], + [1164852.86380768, 4889733.99999041, 652.0580509296], + [1164851.83153623, 4889733.58711992, 650.3619125326], + [1164850.27629823, 4889732.91679297, 649.246178409], + [1164848.59717268, 4889732.16453794, 648.8921930996], + [1164846.92584756, 4889731.39229387, 649.2399968224], + [1164845.39534922, 4889730.65857022, 650.3500377576], + [1164844.40074163, 4889730.1491841, 652.0424365597], + [1164844.10165063, 4889729.95139222, 653.8814608778], + [1164853.75204675, 4889708.45714195, 653.139766942], + [1164854.09018439, 4889708.55414159, 654.9801142922], + [1164855.11456228, 4889708.98425547, 656.6768642305], + [1164856.65706346, 4889709.68244453, 657.7935842864], + [1164858.32193878, 4889710.46589363, 658.1486722183], + [1164859.97866929, 4889711.27010254, 657.8019973987], + [1164861.49533861, 4889712.03413289, 656.6930257472], + [1164862.48038986, 4889712.56448404, 655.0013653812], + [1164862.77582718, 4889712.77031996, 653.162622778], + [1164862.43768954, 4889712.67332032, 651.3222754278], + [1164861.41331166, 4889712.24320643, 649.6255254895], + [1164859.87081048, 4889711.54501737, 648.5088054337], + [1164858.20593516, 4889710.76156828, 648.1537175018], + [1164856.54920464, 4889709.95735936, 648.5003923213], + [1164855.03253533, 4889709.19332901, 649.6093639729], + [1164854.04748407, 4889708.66297786, 651.3010243388], + [1164853.75204675, 4889708.45714195, 653.139766942], + [1164861.24575639, 4889693.48374803, 652.6092590896], + [1164861.58374215, 4889693.58105112, 654.4496171914], + [1164862.60714494, 4889694.01311336, 656.1464361603], + [1164864.14798686, 4889694.71461784, 657.2632736817], + [1164865.81095838, 4889695.50187096, 657.6184963906], + [1164867.46570146, 4889696.31005102, 657.2719622692], + [1164868.98044624, 4889697.07792681, 656.1631268623], + [1164869.96411856, 4889697.61103325, 654.4715641163], + [1164870.25896552, 4889697.81804877, 652.6328633067], + [1164869.92097976, 4889697.72074567, 650.7925052048], + [1164868.89757697, 4889697.28868344, 649.0956862359], + [1164867.35673506, 4889696.58717895, 647.9788487145], + [1164865.69376353, 4889695.79992584, 647.6236260056], + [1164864.03902046, 4889694.99174578, 647.9701601271], + [1164862.52427567, 4889694.22386998, 649.078995534], + [1164861.54060335, 4889693.69076355, 650.7705582799], + [1164861.24575639, 4889693.48374803, 652.6092590896], + [1164868.84315871, 4889678.52631427, 652.070242586], + [1164869.18039431, 4889678.62517515, 653.910653778], + [1164870.20019914, 4889679.06459006, 655.6077279757], + [1164871.7351318, 4889679.77814266, 656.7249848221], + [1164873.39143473, 4889680.578977, 657.0806808156], + [1164875.03930262, 4889681.40114714, 656.7346347002], + [1164876.54748295, 4889682.18236777, 655.6262653088], + [1164877.52655982, 4889682.724801, 653.9350288736], + [1164877.81957355, 4889682.93551779, 652.0964583338], + [1164877.48233795, 4889682.8366569, 650.2560471419], + [1164876.46253312, 4889682.397242, 648.5589729442], + [1164874.92760046, 4889681.6836894, 647.4417160978], + [1164873.27129753, 4889680.88285505, 647.0860201043], + [1164871.62342964, 4889680.06068491, 647.4320662197], + [1164870.11524931, 4889679.27946429, 648.5404356111], + [1164869.13617244, 4889678.73703106, 650.2316720463], + [1164868.84315871, 4889678.52631427, 652.070242586], + [1164874.50873577, 4889666.59499905, 651.6338983098], + [1164874.84600973, 4889666.69382713, 653.4743040985], + [1164875.86545728, 4889667.13403866, 655.1713947282], + [1164877.39967637, 4889667.84912308, 656.2886884812], + [1164879.05510532, 4889668.6518072, 656.6444314997], + [1164880.70201806, 4889669.47597978, 656.2984380995], + [1164882.20922734, 4889670.25921643, 655.1901236613], + [1164883.18755495, 4889670.80318346, 653.4989311326], + [1164883.48018144, 4889671.01466784, 651.6603850209], + [1164883.14290748, 4889670.91583977, 649.8199792323], + [1164882.12345993, 4889670.47562823, 648.1228886025], + [1164880.58924083, 4889669.76054381, 647.0055948495], + [1164878.93381188, 4889668.9578597, 646.649851831], + [1164877.28689915, 4889668.13368711, 646.9958452313], + [1164875.77968986, 4889667.35045046, 648.1041596695], + [1164874.80136225, 4889666.80648343, 649.7953521982], + [1164874.50873577, 4889666.59499905, 651.6338983098], + [1164880.24537047, 4889654.6717122, 651.1897813305], + [1164880.58232759, 4889654.77113439, 653.0302127758], + [1164881.59930457, 4889655.21631101, 654.7274983453], + [1164883.12924331, 4889655.94004556, 655.8451291023], + [1164884.77972115, 4889656.75275993, 656.2012615558], + [1164886.42143433, 4889657.58748498, 655.8556768411], + [1164887.9235753, 4889658.38102801, 654.747760461], + [1164888.89823275, 4889658.93248161, 653.0568558213], + [1164889.18923989, 4889659.1472979, 651.2184362894], + [1164888.85228277, 4889659.04787571, 649.3780048441], + [1164887.83530579, 4889658.60269908, 647.6807192746], + [1164886.30536706, 4889657.87896454, 646.5630885176], + [1164884.65488922, 4889657.06625017, 646.2069560641], + [1164883.01317604, 4889656.23152512, 646.5525407789], + [1164881.51103507, 4889655.43798209, 647.6604571589], + [1164880.53637762, 4889654.88652849, 649.3513617986], + [1164880.24537047, 4889654.6717122, 651.1897813305], + [1164894.34366746, 4889628.08708449, 650.1659610657], + [1164894.67691136, 4889628.1935874, 652.0066649995], + [1164895.679351, 4889628.66645596, 653.7050181031], + [1164897.18618015, 4889629.43420315, 654.824346098], + [1164898.81099418, 4889630.29579004, 655.1823634978], + [1164900.4265756, 4889631.18027496, 654.8386981926], + [1164901.90412289, 4889632.02064493, 653.7325883538], + [1164902.86198359, 4889632.60407496, 652.0429176522], + [1164903.14682428, 4889632.83062402, 650.2049512881], + [1164902.81358038, 4889632.72412111, 648.3642473543], + [1164901.81114074, 4889632.25125254, 646.6658942508], + [1164900.30431159, 4889631.48350535, 645.5465662558], + [1164898.67949756, 4889630.62191846, 645.1885488561], + [1164897.06391613, 4889629.73743354, 645.5322141612], + [1164895.58636885, 4889628.89706358, 646.638324], + [1164894.62850815, 4889628.31363355, 648.3279947016], + [1164894.34366746, 4889628.08708449, 650.1659610657], + [1164914.04727493, 4889592.60082027, 648.7293023957], + [1164914.37602849, 4889592.7153707, 650.570334315], + [1164915.36243063, 4889593.21705162, 652.2698599204], + [1164916.84420799, 4889594.02982798, 653.3910197926], + [1164918.44144916, 4889594.94098811, 653.7510536143], + [1164920.02915328, 4889595.87560379, 653.4094271521], + [1164921.48068322, 4889596.76277113, 652.3052203001], + [1164922.42103645, 4889597.37770546, 650.6168303581], + [1164922.69979072, 4889597.6152249, 648.7793095242], + [1164922.37103716, 4889597.50067448, 646.9382776049], + [1164921.38463502, 4889596.99899356, 645.2387519996], + [1164919.90285766, 4889596.1862172, 644.1175921273], + [1164918.3056165, 4889595.27505707, 643.7575583056], + [1164916.71791238, 4889594.34044139, 644.0991847679], + [1164915.26638244, 4889593.45327404, 645.2033916199], + [1164914.32602921, 4889592.83833972, 646.8917815619], + [1164914.04727493, 4889592.60082027, 648.7293023957], + [1164936.67232349, 4889555.22719411, 647.1527518358], + [1164936.99745935, 4889555.34777493, 648.9940388411], + [1164937.97015259, 4889555.87230584, 650.6945314608], + [1164939.43026774, 4889556.72118833, 651.8172194839], + [1164941.00352547, 4889557.67232331, 652.1789452721], + [1164942.56686729, 4889558.64754511, 651.8390375565], + [1164943.99553343, 4889559.5728207, 650.7364437911], + [1164944.92034845, 4889560.21365306, 649.0491501701], + [1164945.19349879, 4889560.46051241, 647.2120248218], + [1164944.86836293, 4889560.3399316, 645.3707378164], + [1164943.89566969, 4889559.81540068, 643.6702451968], + [1164942.43555454, 4889558.9665182, 642.5475571736], + [1164940.86229682, 4889558.01538321, 642.1858313855], + [1164939.298955, 4889557.04016142, 642.5257391011], + [1164937.87028886, 4889556.11488583, 643.6283328665], + [1164936.94547383, 4889555.47405347, 645.3156264875], + [1164936.67232349, 4889555.22719411, 647.1527518358], + [1164949.22685632, 4889535.3467833, 646.2741128584], + [1164949.54965466, 4889535.47104674, 648.1155641374], + [1164950.51155013, 4889536.0126608, 649.8168161846], + [1164951.95402797, 4889536.88946473, 650.9407448162], + [1164953.50743446, 4889537.87203553, 651.303867019], + [1164955.05035139, 4889538.87960907, 650.965396132], + [1164956.45956088, 4889539.83571101, 649.8641711507], + [1164957.37080835, 4889540.49804896, 648.1778320928], + [1164957.63861378, 4889540.75339276, 646.3410828938], + [1164957.31581544, 4889540.62912932, 644.4996316148], + [1164956.35391997, 4889540.08751526, 642.7983795676], + [1164954.91144213, 4889539.21071132, 641.674450936], + [1164953.35803564, 4889538.22814052, 641.3113287332], + [1164951.81511871, 4889537.22056699, 641.6497996202], + [1164950.40590922, 4889536.26446505, 642.7510246015], + [1164949.49466175, 4889535.6021271, 644.4373636594], + [1164949.22685632, 4889535.3467833, 646.2741128584], + [1164971.29026071, 4889501.50471279, 644.7141380635], + [1164971.61048244, 4889501.63287072, 646.5557727897], + [1164972.56159646, 4889502.19088429, 648.2577924191], + [1164973.98673624, 4889503.09408876, 649.3829554232], + [1164975.52077683, 4889504.10616324, 649.7474563641], + [1164977.04388555, 4889505.1439266, 649.4103957037], + [1164978.43435409, 4889506.12860521, 648.3105049628], + [1164979.33268435, 4889506.81065566, 646.6250855268], + [1164979.59559419, 4889507.07349113, 644.7886848576], + [1164979.27537246, 4889506.94533321, 642.9470501313], + [1164978.32425844, 4889506.38731963, 641.2450305019], + [1164976.89911867, 4889505.48411516, 640.1198674979], + [1164975.36507807, 4889504.47204068, 639.755366557], + [1164973.84196935, 4889503.43427732, 640.0924272173], + [1164972.45150081, 4889502.44959871, 641.1923179583], + [1164971.55317055, 4889501.76754826, 642.8777373943], + [1164971.29026071, 4889501.50471279, 644.7141380635], + [1164987.15317113, 4889478.16989814, 643.5836071546], + [1164987.4695854, 4889478.30355254, 645.4255142981], + [1164988.4062061, 4889478.88269095, 647.128572355], + [1164989.80842478, 4889479.81936388, 648.2553780552], + [1164991.31707724, 4889480.86854268, 648.6216987404], + [1164992.81438802, 4889481.94403623, 648.2864873922], + [1164994.18063572, 4889482.96416831, 647.1883331246], + [1164995.06249393, 4889483.67036559, 645.504094883], + [1164995.31944782, 4889483.94197878, 643.6681216454], + [1164995.00303355, 4889483.80832438, 641.8262145019], + [1164994.06641285, 4889483.22918596, 640.123156445], + [1164992.66419417, 4889482.29251304, 638.9963507448], + [1164991.1555417, 4889481.24333424, 638.6300300596], + [1164989.65823092, 4889480.16784069, 638.9652414078], + [1164988.29198322, 4889479.14770861, 640.0633956755], + [1164987.41012502, 4889478.44151133, 641.7476339171], + [1164987.15317113, 4889478.16989814, 643.5836071546], + [1165018.19325073, 4889436.52357133, 641.4888303673], + [1165018.50371641, 4889436.66531236, 643.3311402419], + [1165019.41587926, 4889437.27752934, 645.035855454], + [1165020.77888262, 4889438.26719351, 646.1653185701], + [1165022.24379759, 4889439.37544855, 646.5346033137], + [1165023.6964231, 4889440.51127798, 646.2024204133], + [1165025.02044952, 4889441.58839635, 645.1071277768], + [1165025.87327358, 4889442.33375427, 643.4248575895], + [1165026.11931, 4889442.62005793, 641.5896246529], + [1165025.80884432, 4889442.4783169, 639.7473147783], + [1165024.89668146, 4889441.86609992, 638.0425995663], + [1165023.53367811, 4889440.87643574, 636.9131364502], + [1165022.06876314, 4889439.76818071, 636.5438517066], + [1165020.61613763, 4889438.63235128, 636.876034607], + [1165019.29211121, 4889437.55523291, 637.9713272435], + [1165018.43928715, 4889436.80987499, 639.6535974308], + [1165018.19325073, 4889436.52357133, 641.4888303673], + [1165051.699851, 4889393.25351325, 639.1529845235], + [1165052.0080647, 4889393.39809078, 640.9954552006], + [1165052.90797124, 4889394.0259384, 642.7010390787], + [1165054.25050408, 4889395.04174875, 643.831951701], + [1165055.69213329, 4889396.17976698, 644.2028845816], + [1165057.12060618, 4889397.34648418, 643.8724106149], + [1165058.42141278, 4889398.45331541, 642.7787603054], + [1165059.25779497, 4889399.21973392, 641.0976523359], + [1165059.4970348, 4889399.51476985, 639.2628989365], + [1165059.1888211, 4889399.37019232, 637.4204282594], + [1165058.28891456, 4889398.74234469, 635.7148443814], + [1165056.94638172, 4889397.72653435, 634.5839317591], + [1165055.50475251, 4889396.58851612, 634.2129988784], + [1165054.07627962, 4889395.42179892, 634.5434728452], + [1165052.77547302, 4889394.31496769, 635.6371231547], + [1165051.93909082, 4889393.54854918, 637.3182311242], + [1165051.699851, 4889393.25351325, 639.1529845235], + [1165064.8477001, 4889377.25121786, 638.2475595311], + [1165065.15206948, 4889377.40046222, 640.0902959082], + [1165066.03839446, 4889378.0448288, 641.7968192433], + [1165067.35975861, 4889379.0863962, 642.9291963788], + [1165068.77811547, 4889380.25273684, 643.3017394498], + [1165070.18308057, 4889381.44806764, 642.9728920764], + [1165071.46197173, 4889382.58157939, 641.8807583038], + [1165072.28363551, 4889383.36592279, 640.2006689926], + [1165072.51779664, 4889383.66715208, 638.3662672889], + [1165072.21342726, 4889383.51790772, 636.5235309118], + [1165071.32710229, 4889382.87354114, 634.8170075767], + [1165070.00573814, 4889381.83197374, 633.6846304412], + [1165068.58738128, 4889380.66563309, 633.3120873702], + [1165067.18241618, 4889379.4703023, 633.6409347436], + [1165065.90352501, 4889378.33679054, 634.7330685162], + [1165065.08186123, 4889377.55244715, 636.4131578274], + [1165064.8477001, 4889377.25121786, 638.2475595311], + [1165086.32012248, 4889352.39470172, 636.7911613565], + [1165086.62056792, 4889352.54848597, 638.6341670667], + [1165087.49213106, 4889353.21001863, 640.3417050107], + [1165088.79020108, 4889354.27870003, 641.4756836089], + [1165090.18278567, 4889355.47505386, 641.8499987462], + [1165091.56158578, 4889356.70086695, 641.5229506277], + [1165092.81593731, 4889357.86298051, 640.4325045486], + [1165093.62094311, 4889358.66675501, 638.7535611248], + [1165093.84912148, 4889358.97498352, 636.9195712945], + [1165093.54867605, 4889358.82119927, 635.0765655843], + [1165092.6771129, 4889358.15966662, 633.3690276403], + [1165091.37904289, 4889357.09098521, 632.2350490421], + [1165089.9864583, 4889355.89463138, 631.8607339049], + [1165088.60765819, 4889354.66881829, 632.1877820233], + [1165087.35330665, 4889353.50670473, 633.2782281024], + [1165086.54830085, 4889352.70293023, 634.9571715263], + [1165086.32012248, 4889352.39470172, 636.7911613565], + [1165106.81199734, 4889329.85731155, 635.4167712907], + [1165107.10803872, 4889330.01599337, 637.2600739732], + [1165107.96204917, 4889330.69705018, 638.9687955858], + [1165109.23212705, 4889331.79686901, 640.1046618568], + [1165110.59357571, 4889333.02785803, 640.4810766818], + [1165111.94063223, 4889334.28898284, 640.1561692376], + [1165113.16506439, 4889335.48437949, 639.0677408227], + [1165113.94958346, 4889336.31094472, 637.3901789674], + [1165114.17017204, 4889336.6276176, 635.5567009866], + [1165113.87413066, 4889336.46893578, 633.713398304], + [1165113.02012021, 4889335.78787897, 632.0046766914], + [1165111.75004233, 4889334.68806014, 630.8688104204], + [1165110.38859368, 4889333.45707111, 630.4923955954], + [1165109.04153716, 4889332.19594631, 630.8173030396], + [1165107.81710499, 4889331.00054966, 631.9057314545], + [1165107.03258592, 4889330.17398443, 633.5832933098], + [1165106.81199734, 4889329.85731155, 635.4167712907], + [1165138.77541206, 4889295.96203765, 633.2442602659], + [1165139.06793536, 4889296.12440812, 635.08780446], + [1165139.90439321, 4889296.82401714, 636.7977283415], + [1165141.1454838, 4889297.95450751, 637.9355794949], + [1165142.47413405, 4889299.22021865, 638.3142398384], + [1165143.78730821, 4889300.51722726, 637.9916518678], + [1165144.97931525, 4889301.74697983, 636.9054428892], + [1165145.74104792, 4889302.59770639, 635.2294403895], + [1165145.95243564, 4889302.92415824, 633.39659164], + [1165145.65991234, 4889302.76178777, 631.5530474459], + [1165144.82345449, 4889302.06217875, 629.8431235643], + [1165143.5823639, 4889300.93168839, 628.705272411], + [1165142.25371365, 4889299.66597724, 628.3266120674], + [1165140.94053949, 4889298.36896863, 628.6492000381], + [1165139.74853245, 4889297.13921607, 629.7354090167], + [1165138.98679978, 4889296.2884895, 631.4114115164], + [1165138.77541206, 4889295.96203765, 633.2442602659], + [1165163.99800175, 4889269.92991058, 631.5024504129], + [1165164.28788254, 4889270.09493259, 633.3461793297], + [1165165.11215575, 4889270.80690875, 635.0569530043], + [1165166.33334906, 4889271.95762875, 636.1961913749], + [1165167.63960733, 4889273.2461246, 636.5764126021], + [1165168.92974476, 4889274.56658876, 636.2554302531], + [1165170.09980962, 4889275.81869856, 635.1707503815], + [1165170.84624451, 4889276.68503136, 633.4958136888], + [1165171.0516095, 4889277.0176517, 631.6633842071], + [1165170.7617287, 4889276.8526297, 629.8196552903], + [1165169.93745549, 4889276.14065352, 628.1088816157], + [1165168.71626219, 4889274.98993353, 626.9696432451], + [1165167.41000392, 4889273.70143768, 626.5894220179], + [1165166.11986649, 4889272.38097352, 626.9104043669], + [1165164.94980162, 4889271.12886372, 627.9950842386], + [1165164.20336674, 4889270.26253092, 629.6700209312], + [1165163.99800175, 4889269.92991058, 631.5024504129], + [1165198.40875228, 4889237.44980777, 629.184667071], + [1165198.69348513, 4889237.61976276, 631.0287476894], + [1165199.49753093, 4889238.35120114, 632.7409044043], + [1165200.68654834, 4889239.53290253, 633.882343109], + [1165201.95706266, 4889240.85582807, 634.2650088495], + [1165203.210795, 4889242.21136889, 633.9465163725], + [1165204.34658712, 4889243.49651205, 632.8641806932], + [1165205.06960235, 4889244.38543099, 631.1908460518], + [1165205.26635331, 4889244.72637623, 629.3590060708], + [1165204.98162045, 4889244.55642124, 627.5149254524], + [1165204.17757465, 4889243.82498286, 625.8027687376], + [1165202.98855725, 4889242.64328147, 624.6613300328], + [1165201.71804293, 4889241.32035594, 624.2786642923], + [1165200.46431059, 4889239.96481512, 624.5971567694], + [1165199.32851846, 4889238.67967195, 625.6794924486], + [1165198.60550324, 4889237.79075301, 627.35282709], + [1165198.40875228, 4889237.44980777, 629.184667071], + [1165245.49736405, 4889195.86034582, 626.0148650642], + [1165245.77605745, 4889196.03579199, 627.8593545375], + [1165246.55303518, 4889196.79180633, 629.5733438966], + [1165247.69804095, 4889198.01345854, 630.7177624625], + [1165248.9191291, 4889199.38124507, 631.1037746908], + [1165250.12209388, 4889200.7828606, 630.7887195451], + [1165251.20962007, 4889202.11180395, 629.7096518438], + [1165251.89909044, 4889203.03115915, 628.0385884779], + [1165252.08276954, 4889203.38395862, 626.2076336119], + [1165251.80407614, 4889203.20851245, 624.3631441385], + [1165251.02709841, 4889202.45249812, 622.6491547795], + [1165249.88209264, 4889201.23084591, 621.5047362135], + [1165248.66100449, 4889199.86305938, 621.1187239852], + [1165247.45803971, 4889198.46144384, 621.433779131], + [1165246.37051352, 4889197.13250049, 622.5128468322], + [1165245.68104315, 4889196.21314529, 624.1839101981], + [1165245.49736405, 4889195.86034582, 626.0148650642], + [1165293.39455581, 4889156.39830718, 622.7414615871], + [1165293.66633315, 4889156.57949412, 624.5864274858], + [1165294.41197801, 4889157.3616945, 626.3025743364], + [1165295.50595352, 4889158.62603869, 627.4505064686], + [1165296.66968729, 4889160.04183205, 627.8404675685], + [1165297.81370466, 4889161.49280686, 627.5294708756], + [1165298.84514816, 4889162.86873159, 626.4542642853], + [1165299.49559381, 4889163.82080306, 624.7858875159], + [1165299.66400516, 4889164.18643371, 622.9559835701], + [1165299.39222781, 4889164.00524678, 621.1110176714], + [1165298.64658295, 4889163.22304639, 619.3948708207], + [1165297.55260745, 4889161.95870221, 618.2469386886], + [1165296.38887368, 4889160.54290885, 617.8569775886], + [1165295.24485631, 4889159.09193404, 618.1679742816], + [1165294.2134128, 4889157.71600931, 619.2431808718], + [1165293.56296715, 4889156.76393784, 620.9115576412], + [1165293.39455581, 4889156.39830718, 622.7414615871], + [1165345.24287083, 4889117.39074938, 619.2197241955], + [1165345.50443134, 4889117.57967579, 621.0653899249], + [1165346.20773796, 4889118.39404144, 622.7844373712], + [1165347.23373845, 4889119.71005293, 623.9370266175], + [1165348.32160832, 4889121.1835239, 624.3321853949], + [1165349.38807777, 4889122.69346777, 624.0265018186], + [1165350.34620532, 4889124.12515576, 622.9563184654], + [1165350.94618164, 4889125.1156282, 621.2913996802], + [1165351.09554751, 4889125.49576898, 619.4628007701], + [1165350.83398701, 4889125.30684257, 617.6171350406], + [1165350.13068039, 4889124.49247692, 615.8980875943], + [1165349.10467989, 4889123.17646543, 614.7454983481], + [1165348.01681003, 4889121.70299446, 614.3503395706], + [1165346.95034057, 4889120.19305059, 614.656023147], + [1165345.99221302, 4889118.7613626, 615.7262065001], + [1165345.3922367, 4889117.77089016, 617.3911252853], + [1165345.24287083, 4889117.39074938, 619.2197241955], + [1165385.95769517, 4889089.3347335, 616.4631871983], + [1165386.21202398, 4889089.52865106, 618.3093456472], + [1165386.88464199, 4889090.36424661, 620.0304841838], + [1165387.86117586, 4889091.71449143, 621.1864440822], + [1165388.89372988, 4889093.22625087, 621.5853721022], + [1165389.90356936, 4889094.77539857, 621.2835473345], + [1165390.80806239, 4889096.24422299, 620.2170186989], + [1165391.37100489, 4889097.26034504, 618.5546234673], + [1165391.5062495, 4889097.65027583, 616.7269868394], + [1165391.2519207, 4889097.45635826, 614.8808283905], + [1165390.57930268, 4889096.62076271, 613.1596898539], + [1165389.60276882, 4889095.27051789, 612.0037299555], + [1165388.5702148, 4889093.75875845, 611.6048019354], + [1165387.56037532, 4889092.20961075, 611.9066267032], + [1165386.65588228, 4889090.74078634, 612.9731553388], + [1165386.09293979, 4889089.72466429, 614.6355505704], + [1165385.95769517, 4889089.3347335, 616.4631871983], + [1165416.77226941, 4889069.45456102, 614.3762168889], + [1165417.02287617, 4889069.65089677, 616.2226282512], + [1165417.67918846, 4889070.49709239, 617.944874765], + [1165418.62930411, 4889071.8645129, 619.1026297879], + [1165419.6322414, 4889073.39552841, 619.5035702722], + [1165420.61170122, 4889074.96442896, 619.203809811], + [1165421.48735631, 4889076.45200457, 618.1392407219], + [1165422.03030929, 4889077.48112528, 616.4782037848], + [1165422.15783203, 4889077.87607859, 614.6510918613], + [1165421.90722528, 4889077.67974284, 612.8046804991], + [1165421.25091298, 4889076.83354721, 611.0824339853], + [1165420.30079734, 4889075.46612671, 609.9246789624], + [1165419.29786004, 4889073.93511119, 609.5237384781], + [1165418.31840023, 4889072.36621065, 609.8234989393], + [1165417.44274513, 4889070.87863504, 610.8880680283], + [1165416.89979216, 4889069.84951433, 612.5491049655], + [1165416.77226941, 4889069.45456102, 614.3762168889], + [1165446.69447803, 4889050.93867648, 612.3454642646], + [1165446.94110516, 4889051.13748502, 614.1921466799], + [1165447.57951002, 4889051.99481646, 615.9156129092], + [1165448.50049101, 4889053.38035665, 617.0753523683], + [1165449.47069957, 4889054.93172832, 617.4785220954], + [1165450.41653468, 4889056.52154323, 617.1810519081], + [1165451.26021349, 4889058.02900895, 616.1186608189], + [1165451.78093291, 4889059.07196074, 614.4591382802], + [1165451.89977879, 4889059.47231334, 612.6326173725], + [1165451.65315166, 4889059.2735048, 610.7859349572], + [1165451.0147468, 4889058.41617337, 609.0624687279], + [1165450.09376581, 4889057.03063317, 607.9027292688], + [1165449.12355725, 4889055.4792615, 607.4995595416], + [1165448.17772214, 4889053.88944659, 607.797029729], + [1165447.33404333, 4889052.38198087, 608.8594208181], + [1165446.81332391, 4889051.33902908, 610.5189433569], + [1165446.69447803, 4889050.93867648, 612.3454642646], + [1165473.58089233, 4889035.02864933, 610.5060478978], + [1165473.82444337, 4889035.22927198, 612.3529421837], + [1165474.44542027, 4889036.09692503, 614.0776075856], + [1165475.33715136, 4889037.49979693, 615.2393594145], + [1165476.27401187, 4889039.07093319, 615.6448233342], + [1165477.18519849, 4889040.68128698, 615.3497367046], + [1165477.99550297, 4889042.20854016, 614.2896414134], + [1165478.49251537, 4889043.26555221, 612.6317495404], + [1165478.60146743, 4889043.67177833, 610.8059090128], + [1165478.35791639, 4889043.47115567, 608.9590147269], + [1165477.73693949, 4889042.60350263, 607.2343493251], + [1165476.8452084, 4889041.20063073, 606.0725974961], + [1165475.90834789, 4889039.62949447, 605.6671335764], + [1165474.99716127, 4889038.01914067, 605.9622202061], + [1165474.18685679, 4889036.4918875, 607.0223154973], + [1165473.6898444, 4889035.43487544, 608.6802073702], + [1165473.58089233, 4889035.02864933, 610.5060478978], + [1165503.58596817, 4889018.05726268, 608.4354479497], + [1165503.82546635, 4889018.26016608, 610.2826232967], + [1165504.42918532, 4889019.13757554, 612.0084855375], + [1165505.29308291, 4889020.55619432, 613.1721676295], + [1165506.19881008, 4889022.14495084, 613.5797906599], + [1165507.07811688, 4889023.77335254, 613.2869149138], + [1165507.85822027, 4889025.3177089, 612.228914087], + [1165508.33437033, 4889026.38654225, 610.5724690342], + [1165508.4353559, 4889026.7972911, 608.747180994], + [1165508.19585773, 4889026.59438771, 606.900005647], + [1165507.59213875, 4889025.71697825, 605.1741434062], + [1165506.72824117, 4889024.29835947, 604.0104613142], + [1165505.82251399, 4889022.70960295, 603.6028382838], + [1165504.9432072, 4889021.08120125, 603.8957140299], + [1165504.1631038, 4889019.53684488, 604.9537148567], + [1165503.68695375, 4889018.46801154, 606.6101599094], + [1165503.58596817, 4889018.05726268, 608.4354479497], + [1165541.12537223, 4888998.23858025, 605.8564945141], + [1165541.35706122, 4888998.44560052, 607.7042088041], + [1165541.92898656, 4888999.33982205, 609.4322657395], + [1165542.74199255, 4889000.78536573, 610.5994609819], + [1165543.59100715, 4889002.40413465, 611.0109990725], + [1165544.41241037, 4889004.06318526, 610.7221206643], + [1165545.13784486, 4889005.63648528, 609.6678939379], + [1165545.57645069, 4889006.72520405, 608.0140408522], + [1165545.66338315, 4889007.14340678, 606.1897231079], + [1165545.43169416, 4889006.93638651, 604.342008818], + [1165544.85976882, 4889006.04216498, 602.6139518826], + [1165544.04676283, 4889004.5966213, 601.4467566402], + [1165543.19774823, 4889002.97785238, 601.0352185496], + [1165542.37634502, 4889001.31880177, 601.3240969578], + [1165541.65091052, 4888999.74550175, 602.3783236842], + [1165541.21230469, 4888998.65678298, 604.0321767699], + [1165541.12537223, 4888998.23858025, 605.8564945141], + [1165577.28400437, 4888980.4467294, 603.3724100475], + [1165577.5098773, 4888980.65657264, 605.2205259981], + [1165578.0561838, 4888981.56330446, 606.9503519682], + [1165578.82764684, 4888983.02915383, 608.1204157834], + [1165579.63006913, 4888984.67070708, 608.5351710781], + [1165580.40366422, 4888986.35314497, 608.249593803], + [1165581.08369967, 4888987.94866295, 607.1985018365], + [1165581.49081612, 4888989.05280327, 605.5468230306], + [1165581.56555837, 4888989.47698997, 603.7233469567], + [1165581.33968544, 4888989.26714674, 601.8752310062], + [1165580.79337893, 4888988.36041491, 600.145405036], + [1165580.02191589, 4888986.89456554, 598.9753412209], + [1165579.2194936, 4888985.25301229, 598.5605859262], + [1165578.44589852, 4888983.5705744, 598.8461632012], + [1165577.76586306, 4888981.97505642, 599.8972551678], + [1165577.35874662, 4888980.8709161, 601.5489339736], + [1165577.28400437, 4888980.4467294, 603.3724100475], + [1165613.93814748, 4888963.68581453, 600.8450109139], + [1165614.15876931, 4888963.89802123, 602.6934913632], + [1165614.68043192, 4888964.81593584, 604.4250268908], + [1165615.41154693, 4888966.30011587, 605.59788941], + [1165616.16850517, 4888967.96233588, 606.0157981381], + [1165616.89528191, 4888969.66606549, 605.7334681218], + [1165617.53067409, 4888971.2818962, 604.6854724337], + [1165617.90660754, 4888972.40023683, 603.0359562149], + [1165617.96899861, 4888972.83006338, 601.2133365331], + [1165617.74837678, 4888972.61785668, 599.3648560838], + [1165617.22671417, 4888971.69994208, 597.6333205562], + [1165616.49559916, 4888970.21576205, 596.460458037], + [1165615.73864092, 4888968.55354203, 596.042549309], + [1165615.01186418, 4888966.84981242, 596.3248793252], + [1165614.376472, 4888965.23398171, 597.3728750133], + [1165614.00053856, 4888964.11564108, 599.0223912321], + [1165613.93814748, 4888963.68581453, 600.8450109139], + [1165655.06665188, 4888946.19986431, 597.9908800405], + [1165655.28166125, 4888946.41440774, 599.8397524533], + [1165655.77737348, 4888947.34323168, 601.5730992736], + [1165656.46609464, 4888948.84525927, 602.7489205616], + [1165657.17533427, 4888950.52758243, 603.1701595486], + [1165657.85301091, 4888952.25200814, 602.8912560967], + [1165658.44162776, 4888953.88756706, 601.8465246164], + [1165658.78494041, 4888955.01968013, 600.1992846932], + [1165658.8344764, 4888955.45495215, 598.3775618685], + [1165658.61946702, 4888955.24040872, 596.5286894558], + [1165658.12375479, 4888954.31158477, 594.7953426355], + [1165657.43503364, 4888952.80955719, 593.6195213475], + [1165656.72579401, 4888951.12723403, 593.1982823604], + [1165656.04811736, 4888949.40280832, 593.4771858124], + [1165655.45950052, 4888947.7672494, 594.5219172927], + [1165655.11618786, 4888946.63513632, 596.1691572159], + [1165655.06665188, 4888946.19986431, 597.9908800405], + [1165697.67203489, 4888929.40880339, 595.0241535148], + [1165697.88131431, 4888929.6255473, 596.873427293], + [1165698.3509158, 4888930.56448857, 598.6086024184], + [1165698.99707419, 4888932.08303046, 599.7874038383], + [1165699.65845578, 4888933.78393459, 600.211993628], + [1165700.28692889, 4888935.52747326, 599.936535113], + [1165700.82871563, 4888937.18123365, 598.8950823186], + [1165701.13942094, 4888938.32603262, 597.2501252214], + [1165701.17617302, 4888938.76629403, 595.429297275], + [1165700.9668936, 4888938.54955012, 593.5800234968], + [1165700.49729211, 4888937.61060885, 591.8448483713], + [1165699.85113372, 4888936.09206696, 590.6660469515], + [1165699.18975213, 4888934.39116283, 590.2414571618], + [1165698.56127902, 4888932.64762417, 590.5169156768], + [1165698.01949228, 4888930.99386377, 591.5583684712], + [1165697.70878697, 4888929.8490648, 593.2033255683], + [1165697.67203489, 4888929.40880339, 595.0241535148], + [1165736.07359339, 4888915.23024202, 592.3273950207], + [1165736.2794726, 4888915.44815881, 594.1769116296], + [1165736.7293053, 4888916.39412161, 595.9134916912], + [1165737.34218504, 4888917.9245226, 597.0946568392], + [1165737.96557231, 4888919.638987, 597.5219446003], + [1165738.55452812, 4888921.39664557, 597.249291656], + [1165739.05820596, 4888923.06404005, 596.2105438485], + [1165739.34178886, 4888924.2185628, 594.5675112223], + [1165739.36715629, 4888924.66293114, 592.7474902104], + [1165739.16127707, 4888924.44501436, 590.8979736016], + [1165738.71144437, 4888923.49905156, 589.16139354], + [1165738.09856463, 4888921.96865056, 587.980228392], + [1165737.47517736, 4888920.25418617, 587.5529406309], + [1165736.88622155, 4888918.4965276, 587.8255935752], + [1165736.38254371, 4888916.82913311, 588.8643413827], + [1165736.09896082, 4888915.67461037, 590.5073740089], + [1165736.07359339, 4888915.23024202, 592.3273950207], + [1165764.3782614, 4888905.52174275, 590.3245475321], + [1165764.57912528, 4888905.7413199, 592.1744205247], + [1165765.00767672, 4888906.69440323, 593.9125132512], + [1165765.58625393, 4888908.23630149, 595.0961167287], + [1165766.17128283, 4888909.96363355, 595.5261311858], + [1165766.72096921, 4888911.73447414, 595.2562697511], + [1165767.18745505, 4888913.4143629, 594.2201658343], + [1165767.44535772, 4888914.57752406, 592.5789588211], + [1165767.46093348, 4888915.02520085, 590.7596339877], + [1165767.2600696, 4888914.8056237, 588.9097609952], + [1165766.83151817, 4888913.85254036, 587.1716682687], + [1165766.25294096, 4888912.31064211, 585.9880647913], + [1165765.66791206, 4888910.58331005, 585.5580503342], + [1165765.11822567, 4888908.81246946, 585.8279117688], + [1165764.65173983, 4888907.13258069, 586.8640156856], + [1165764.39383717, 4888905.96941954, 588.5052226988], + [1165764.3782614, 4888905.52174275, 590.3245475321], + [1165791.18688846, 4888897.40466562, 588.4426926792], + [1165791.38192349, 4888897.62599821, 590.2929786206], + [1165791.78697938, 4888898.58624731, 592.0327369287], + [1165792.32801261, 4888900.13962087, 593.2190021568], + [1165792.87123939, 4888901.87974366, 593.6519804127], + [1165793.37827461, 4888903.66364589, 593.3851431014], + [1165793.80452368, 4888905.35586916, 592.3518922589], + [1165794.03483128, 4888906.52750414, 590.7126421002], + [1165794.04012698, 4888906.97835666, 588.8940464757], + [1165793.84509195, 4888906.75702406, 587.0437605344], + [1165793.44003606, 4888905.79677496, 585.3040022262], + [1165792.89900283, 4888904.2434014, 584.1177369982], + [1165792.35577605, 4888902.50327861, 583.6847587423], + [1165791.84874082, 4888900.71937638, 583.9515960536], + [1165791.42249175, 4888899.02715311, 584.9848468961], + [1165791.19218415, 4888897.85551813, 586.6240970547], + [1165791.18688846, 4888897.40466562, 588.4426926792], + [1165825.03779705, 4888887.86606681, 586.0596874427], + [1165825.23149993, 4888888.08779135, 587.910066713], + [1165825.62714459, 4888889.05077218, 589.6504858806], + [1165826.1520131, 4888890.60883184, 590.8378864415], + [1165826.67661435, 4888892.35435104, 591.2721729913], + [1165827.16414494, 4888894.14390202, 591.0067058199], + [1165827.57144118, 4888895.84161169, 589.9747864593], + [1165827.78809289, 4888897.01719678, 588.3364957788], + [1165827.78744766, 4888897.46976414, 586.5183177194], + [1165827.59374478, 4888897.2480396, 584.6679384491], + [1165827.19810012, 4888896.28505877, 582.9275192815], + [1165826.67323161, 4888894.72699911, 581.7401187207], + [1165826.14863036, 4888892.98147991, 581.3058321709], + [1165825.66109977, 4888891.19192893, 581.5712993422], + [1165825.25380353, 4888889.49421926, 582.6032187029], + [1165825.03715182, 4888888.31863417, 584.2415093834], + [1165825.03779705, 4888887.86606681, 586.0596874427], + [1165859.976482, 4888878.44126598, 583.5779882912], + [1165860.16675981, 4888878.66390712, 585.4286120093], + [1165860.54496373, 4888879.63160062, 587.1702750211], + [1165861.04095041, 4888881.19747444, 588.3597351863], + [1165861.53282982, 4888882.95185209, 588.7963550686], + [1165861.98652358, 4888884.7505676, 588.5333006535], + [1165862.36140169, 4888886.45706212, 587.5036927955], + [1165862.555229, 4888887.63883767, 585.8670294511], + [1165862.54531319, 4888888.0939262, 584.0495122299], + [1165862.35503538, 4888887.87128506, 582.1988885118], + [1165861.97683146, 4888886.90359156, 580.4572255], + [1165861.48084479, 4888885.33771774, 579.2677653348], + [1165860.98896538, 4888883.58334008, 578.8311454525], + [1165860.53527162, 4888881.78462458, 579.0941998676], + [1165860.1603935, 4888880.07813006, 580.1238077256], + [1165859.96656619, 4888878.89635451, 581.76047107], + [1165859.976482, 4888878.44126598, 583.5779882912], + [1165888.28266064, 4888871.60471332, 581.555865166], + [1165888.46470514, 4888871.82930468, 583.4070819146], + [1165888.80417661, 4888872.80631798, 585.1515330733], + [1165889.23672668, 4888874.38749059, 586.345559308], + [1165889.65711382, 4888876.15912865, 586.7873248761], + [1165890.03717617, 4888877.97563588, 586.529569941], + [1165890.34183322, 4888879.69911433, 585.5050159217], + [1165890.48659937, 4888880.89277512, 583.8718833079], + [1165890.45723547, 4888881.3525994, 582.0557654044], + [1165890.27519097, 4888881.12800804, 580.2045486558], + [1165889.9357195, 4888880.15099475, 578.4600974971], + [1165889.50316943, 4888878.56982213, 577.2660712625], + [1165889.08278229, 4888876.79818407, 576.8243056943], + [1165888.70271994, 4888874.98167684, 577.0820606294], + [1165888.39806289, 4888873.2581984, 578.1066146487], + [1165888.25329674, 4888872.0645376, 579.7397472625], + [1165888.28266064, 4888871.60471332, 581.555865166], + [1165916.68412401, 4888865.51824111, 579.5168709612], + [1165916.86271494, 4888865.74355147, 581.3683369585], + [1165917.18585184, 4888866.72400273, 583.1139665493], + [1165917.59162792, 4888868.31081936, 584.309924242], + [1165917.98182972, 4888870.08882537, 584.7538673023], + [1165918.33079456, 4888871.91189677, 584.4983556143], + [1165918.60578461, 4888873.64164157, 583.4759416], + [1165918.72981184, 4888874.83968777, 581.8443049119], + [1165918.69221219, 4888875.30125978, 580.0287809872], + [1165918.51362126, 4888875.07594942, 578.1773149899], + [1165918.19048437, 4888874.09549816, 576.4316853992], + [1165917.78470829, 4888872.50868153, 575.2357277065], + [1165917.39450649, 4888870.73067552, 574.7917846462], + [1165917.04554165, 4888868.90760412, 575.0472963341], + [1165916.7705516, 4888867.17785932, 576.0697103484], + [1165916.64652437, 4888865.97981312, 577.7013470366], + [1165916.68412401, 4888865.51824111, 579.5168709612], + [1165949.14092199, 4888859.09477036, 577.1790234945], + [1165949.31599788, 4888859.32074831, 579.0307439423], + [1165949.62247403, 4888860.30439942, 580.7775791337], + [1165950.0009331, 4888861.89647096, 581.9755134256], + [1165950.36033278, 4888863.68040688, 582.4216852015], + [1165950.67756109, 4888865.50959169, 582.1684697931], + [1165950.9222706, 4888867.24517336, 581.1482466614], + [1165951.02512537, 4888868.44730542, 579.5181418007], + [1165950.97911192, 4888868.91050701, 577.7032265393], + [1165950.80403604, 4888868.68452906, 575.8515060915], + [1165950.49755988, 4888867.70087796, 574.1046709001], + [1165950.11910081, 4888866.10880642, 572.9067366083], + [1165949.75970113, 4888864.3248705, 572.4605648323], + [1165949.44247282, 4888862.49568569, 572.7137802408], + [1165949.19776332, 4888860.76010401, 573.7340033725], + [1165949.09490854, 4888859.55797196, 575.3641082331], + [1165949.14092199, 4888859.09477036, 577.1790234945], + [1165979.59268023, 4888853.58136038, 574.9785677454], + [1165979.76424964, 4888853.80794866, 576.8305423306], + [1165980.05461146, 4888854.7944296, 578.5785452244], + [1165980.40676928, 4888856.39112598, 579.778385347], + [1165980.73657729, 4888858.18026867, 580.2267013561], + [1165981.02336752, 4888860.01481181, 579.9756914889], + [1165981.23909138, 4888861.755499, 578.9575686315], + [1165981.32174507, 4888862.96119265, 577.3289274954], + [1165981.26778781, 4888863.42579913, 575.5145877882], + [1165981.0962184, 4888863.19921085, 573.6626132031], + [1165980.80585659, 4888862.21272991, 571.9146103093], + [1165980.45369876, 4888860.61603353, 570.7147701867], + [1165980.12389076, 4888858.82689083, 570.2664541776], + [1165979.83710052, 4888856.9923477, 570.5174640448], + [1165979.62137666, 4888855.25166051, 571.5355869022], + [1165979.53872297, 4888854.04596686, 573.1642280382], + [1165979.59268023, 4888853.58136038, 574.9785677454], + [1166018.06204207, 4888847.24720732, 572.1916066363], + [1166018.23036429, 4888847.47428906, 574.0438187474], + [1166018.50427808, 4888848.46334715, 575.7930232267], + [1166018.82921719, 4888850.06432553, 576.9948514261], + [1166019.12819791, 4888851.85832717, 577.4454188985], + [1166019.38311852, 4888853.69790082, 577.1967364765], + [1166019.56831778, 4888855.44341413, 576.1808426776], + [1166019.62949055, 4888856.65251332, 574.5537699996], + [1166019.56682145, 4888857.1185127, 572.7400661636], + [1166019.39849923, 4888856.89143096, 570.8878540525], + [1166019.12458544, 4888855.90237287, 569.1386495733], + [1166018.79964633, 4888854.3013945, 567.9368213739], + [1166018.50066562, 4888852.50739285, 567.4862539014], + [1166018.24574501, 4888850.66781921, 567.7349363235], + [1166018.06054574, 4888848.9223059, 568.7508301223], + [1166017.99937297, 4888847.7132067, 570.3779028004], + [1166018.06204207, 4888847.24720732, 572.1916066363], + [1166037.88915708, 4888844.4849967, 570.7478877156], + [1166038.05401319, 4888844.71253773, 572.6003550967], + [1166038.31058012, 4888845.70399021, 574.3508352504], + [1166038.60685968, 4888847.30894598, 575.5547706299], + [1166038.87340632, 4888849.10746042, 576.0077225755], + [1166039.09481583, 4888850.95170581, 575.761503628], + [1166039.24793971, 4888852.70170063, 574.7479675674], + [1166039.28656533, 4888853.91396169, 573.1225520154], + [1166039.21478372, 4888854.38125368, 571.3095176244], + [1166039.04992761, 4888854.15371265, 569.4570502433], + [1166038.79336068, 4888853.16226017, 567.7065700897], + [1166038.49708112, 4888851.55730441, 566.5026347102], + [1166038.23053448, 4888849.75878996, 566.0496827645], + [1166038.00912497, 4888847.91454457, 566.295901712], + [1166037.85600109, 4888846.16454975, 567.3094377727], + [1166037.81737547, 4888844.95228869, 568.9348533246], + [1166037.88915708, 4888844.4849967, 570.7478877156], + [1166057.78213698, 4888842.09145775, 569.2899719141], + [1166057.94330426, 4888842.3194133, 571.1427132321], + [1166058.17923958, 4888843.31332048, 572.8947210612], + [1166058.44094559, 4888844.92241709, 574.1012155589], + [1166058.66810282, 4888846.72566372, 574.5570826156], + [1166058.84860886, 4888848.57483454, 574.3138904607], + [1166058.96235723, 4888850.32958308, 573.3032677243], + [1166058.97304071, 4888851.54523188, 571.6799190939], + [1166058.88963258, 4888852.01395147, 569.867744146], + [1166058.72846531, 4888851.78599592, 568.015002828], + [1166058.49252998, 4888850.79208874, 566.2629949989], + [1166058.23082397, 4888849.18299212, 565.0565005012], + [1166058.00366674, 4888847.3797455, 564.6006334444], + [1166057.8231607, 4888845.53057468, 564.8438255994], + [1166057.70941233, 4888843.77582614, 565.8544483357], + [1166057.69872885, 4888842.56017734, 567.4777969661], + [1166057.78213698, 4888842.09145775, 569.2899719141], + [1166115.63886408, 4888837.01442746, 565.0067185548], + [1166115.80608453, 4888837.2417551, 566.8590011421], + [1166116.04032727, 4888838.23582128, 568.6111467718], + [1166116.29205689, 4888839.84592166, 569.8184151998], + [1166116.50405529, 4888841.65070354, 570.2754524383], + [1166116.66586142, 4888843.50177413, 570.0337004371], + [1166116.75840257, 4888845.25868252, 569.0247078669], + [1166116.75029555, 4888846.47625036, 567.402800577], + [1166116.65437592, 4888846.94625307, 565.5915822644], + [1166116.48715547, 4888846.71892542, 563.7392996771], + [1166116.25291274, 4888845.72485924, 561.9871540474], + [1166116.00118312, 4888844.11475886, 560.7798856194], + [1166115.78918471, 4888842.30997698, 560.3228483809], + [1166115.62737858, 4888840.4589064, 560.5646003821], + [1166115.53483743, 4888838.701998, 561.5735929523], + [1166115.54294445, 4888837.48443017, 563.1955002422], + [1166115.63886408, 4888837.01442746, 565.0067185548], + [1166160.86265767, 4888833.74180469, 561.6671996312], + [1166161.02557666, 4888833.9697234, 563.5197898337], + [1166161.2324305, 4888834.96622969, 565.273956633], + [1166161.43759396, 4888836.58024522, 566.4846724431], + [1166161.59618446, 4888838.38939522, 566.945669342], + [1166161.70225257, 4888840.24492979, 566.7080542276], + [1166161.74083742, 4888842.00605733, 565.7030711258], + [1166161.69409069, 4888843.2265281, 564.0840407301], + [1166161.58165362, 4888843.69762441, 562.2740591667], + [1166161.41873463, 4888843.4697057, 560.4214689643], + [1166161.21188079, 4888842.47319941, 558.667302165], + [1166161.00671733, 4888840.85918388, 557.4565863549], + [1166160.84812683, 4888839.05003388, 556.995589456], + [1166160.74205872, 4888837.19449931, 557.2332045705], + [1166160.70347387, 4888835.43337177, 558.2381876723], + [1166160.7502206, 4888834.212901, 559.8572180679], + [1166160.86265767, 4888833.74180469, 561.6671996312], + [1166201.354121, 4888832.185902, 558.6786533948], + [1166201.50309665, 4888832.4148249, 560.5322916631], + [1166201.65884621, 4888833.41388993, 562.2902664623], + [1166201.78377052, 4888835.03157912, 563.50695103], + [1166201.85381314, 4888836.84458829, 563.9745289611], + [1166201.87016684, 4888838.70387588, 563.7435769167], + [1166201.82481281, 4888840.46834051, 562.7448227619], + [1166201.72132931, 4888841.69085759, 561.1299964805], + [1166201.58883321, 4888842.16240169, 559.3214930786], + [1166201.43985756, 4888841.9334788, 557.4678548104], + [1166201.284108, 4888840.93441377, 555.7098800112], + [1166201.15918369, 4888839.31672457, 554.4931954435], + [1166201.08914107, 4888837.50371541, 554.0256175124], + [1166201.07278737, 4888835.64442782, 554.2565695568], + [1166201.1181414, 4888833.87996319, 555.2553237116], + [1166201.2216249, 4888832.6574461, 556.870149993], + [1166201.354121, 4888832.185902, 558.6786533948], + [1166250.07813135, 4888831.87000617, 555.1380420855], + [1166250.21264934, 4888832.09914262, 556.9927621033], + [1166250.3406897, 4888833.09854709, 558.752791214], + [1166250.42985609, 4888834.71663338, 559.9721157055], + [1166250.46483106, 4888836.53000372, 560.44227494], + [1166250.37783511, 4888840.15427531, 559.2168166104], + [1166250.26149255, 4888841.3768553, 557.6029180181], + [1166250.13066288, 4888841.84831271, 555.7942730944], + [1166249.99614489, 4888841.61917626, 553.9395530767], + [1166249.86810453, 4888840.61977179, 552.179523966], + [1166249.77893814, 4888839.0016855, 550.9601994745], + [1166249.74396317, 4888837.18831516, 550.4900402399], + [1166249.75960155, 4888835.32872365, 550.7186443119], + [1166249.83095912, 4888833.56404357, 551.7154985696], + [1166249.94730168, 4888832.34146358, 553.3293971619], + [1166250.07813135, 4888831.87000617, 555.1380420855], + [1166250.46577831, 4888836.85915944, 560.4530808532], + [1164467.06666723, 4890689.3881259, 680.8668878178], + [1164476.37542933, 4890693.04308449, 680.8678086622], + [1164476.37542933, 4890693.04308449, 680.8678086622], + [1164467.06666723, 4890689.3881259, 680.8668878178], + [1164825.73516669, 4889773.13719215, 657.1304238361], + [1164825.39067839, 4889773.05455101, 655.2905619972], + [1164825.73516669, 4889773.13719215, 657.1304238361], + [1164834.3393967, 4889776.66224489, 657.1353109203], + [1164834.64464513, 4889776.84579331, 655.2958181229], + [1164834.3393967, 4889776.66224489, 657.1353109203], + [1164834.30015683, 4889776.76315217, 653.4559562839], + [1164834.64464513, 4889776.84579331, 655.2958181229], + [1164834.30015683, 4889776.76315217, 653.4559562839], + [1164825.69592681, 4889773.23809943, 653.4510691998], + [1164825.39067839, 4889773.05455101, 655.2905619972], + [1164825.69592681, 4889773.23809943, 653.4510691998], + [1164833.98316973, 4889752.65005115, 654.633086223], + [1164843.16472921, 4889756.61323811, 654.643937057], + [1164843.16472921, 4889756.61323811, 654.643937057], + [1164833.98316973, 4889752.65005115, 654.633086223], + [1164854.09018439, 4889708.55414159, 654.9801142922], + [1164853.75204675, 4889708.45714195, 653.139766942], + [1164855.11456228, 4889708.98425547, 656.6768642305], + [1164854.09018439, 4889708.55414159, 654.9801142922], + [1164855.11456228, 4889708.98425547, 656.6768642305], + [1164861.49533861, 4889712.03413289, 656.6930257472], + [1164862.48038986, 4889712.56448404, 655.0013653812], + [1164861.49533861, 4889712.03413289, 656.6930257472], + [1164862.77582718, 4889712.77031996, 653.162622778], + [1164862.48038986, 4889712.56448404, 655.0013653812], + [1164862.43768954, 4889712.67332032, 651.3222754278], + [1164862.77582718, 4889712.77031996, 653.162622778], + [1164861.41331166, 4889712.24320643, 649.6255254895], + [1164862.43768954, 4889712.67332032, 651.3222754278], + [1164861.41331166, 4889712.24320643, 649.6255254895], + [1164855.03253533, 4889709.19332901, 649.6093639729], + [1164854.04748407, 4889708.66297786, 651.3010243388], + [1164855.03253533, 4889709.19332901, 649.6093639729], + [1164853.75204675, 4889708.45714195, 653.139766942], + [1164854.04748407, 4889708.66297786, 651.3010243388], + [1164869.18039431, 4889678.62517515, 653.910653778], + [1164868.84315871, 4889678.52631427, 652.070242586], + [1164870.20019914, 4889679.06459006, 655.6077279757], + [1164869.18039431, 4889678.62517515, 653.910653778], + [1164870.20019914, 4889679.06459006, 655.6077279757], + [1164876.54748295, 4889682.18236777, 655.6262653088], + [1164877.52655982, 4889682.724801, 653.9350288736], + [1164876.54748295, 4889682.18236777, 655.6262653088], + [1164877.81957355, 4889682.93551779, 652.0964583338], + [1164877.52655982, 4889682.724801, 653.9350288736], + [1164877.48233795, 4889682.8366569, 650.2560471419], + [1164877.81957355, 4889682.93551779, 652.0964583338], + [1164876.46253312, 4889682.397242, 648.5589729442], + [1164877.48233795, 4889682.8366569, 650.2560471419], + [1164876.46253312, 4889682.397242, 648.5589729442], + [1164870.11524931, 4889679.27946429, 648.5404356111], + [1164869.13617244, 4889678.73703106, 650.2316720463], + [1164870.11524931, 4889679.27946429, 648.5404356111], + [1164868.84315871, 4889678.52631427, 652.070242586], + [1164869.13617244, 4889678.73703106, 650.2316720463], + [1164880.58232759, 4889654.77113439, 653.0302127758], + [1164880.24537047, 4889654.6717122, 651.1897813305], + [1164881.59930457, 4889655.21631101, 654.7274983453], + [1164880.58232759, 4889654.77113439, 653.0302127758], + [1164881.59930457, 4889655.21631101, 654.7274983453], + [1164887.9235753, 4889658.38102801, 654.747760461], + [1164888.89823275, 4889658.93248161, 653.0568558213], + [1164887.9235753, 4889658.38102801, 654.747760461], + [1164889.18923989, 4889659.1472979, 651.2184362894], + [1164888.89823275, 4889658.93248161, 653.0568558213], + [1164888.85228277, 4889659.04787571, 649.3780048441], + [1164889.18923989, 4889659.1472979, 651.2184362894], + [1164887.83530579, 4889658.60269908, 647.6807192746], + [1164888.85228277, 4889659.04787571, 649.3780048441], + [1164887.83530579, 4889658.60269908, 647.6807192746], + [1164881.51103507, 4889655.43798209, 647.6604571589], + [1164880.53637762, 4889654.88652849, 649.3513617986], + [1164881.51103507, 4889655.43798209, 647.6604571589], + [1164880.24537047, 4889654.6717122, 651.1897813305], + [1164880.53637762, 4889654.88652849, 649.3513617986], + [1164914.04727493, 4889592.60082027, 648.7293023957], + [1164922.69979072, 4889597.6152249, 648.7793095242], + [1164922.69979072, 4889597.6152249, 648.7793095242], + [1164914.04727493, 4889592.60082027, 648.7293023957], + [1165052.0080647, 4889393.39809078, 640.9954552006], + [1165051.699851, 4889393.25351325, 639.1529845235], + [1165052.0080647, 4889393.39809078, 640.9954552006], + [1165059.25779497, 4889399.21973392, 641.0976523359], + [1165059.4970348, 4889399.51476985, 639.2628989365], + [1165059.25779497, 4889399.21973392, 641.0976523359], + [1165059.1888211, 4889399.37019232, 637.4204282594], + [1165059.4970348, 4889399.51476985, 639.2628989365], + [1165059.1888211, 4889399.37019232, 637.4204282594], + [1165051.93909082, 4889393.54854918, 637.3182311242], + [1165051.699851, 4889393.25351325, 639.1529845235], + [1165051.93909082, 4889393.54854918, 637.3182311242], + [1165065.15206948, 4889377.40046222, 640.0902959082], + [1165064.8477001, 4889377.25121786, 638.2475595311], + [1165065.15206948, 4889377.40046222, 640.0902959082], + [1165072.28363551, 4889383.36592279, 640.2006689926], + [1165072.51779664, 4889383.66715208, 638.3662672889], + [1165072.28363551, 4889383.36592279, 640.2006689926], + [1165072.21342726, 4889383.51790772, 636.5235309118], + [1165072.51779664, 4889383.66715208, 638.3662672889], + [1165072.21342726, 4889383.51790772, 636.5235309118], + [1165065.08186123, 4889377.55244715, 636.4131578274], + [1165064.8477001, 4889377.25121786, 638.2475595311], + [1165065.08186123, 4889377.55244715, 636.4131578274], + [1166038.05401319, 4888844.71253773, 572.6003550967], + [1166037.88915708, 4888844.4849967, 570.7478877156], + [1166038.31058012, 4888845.70399021, 574.3508352504], + [1166038.05401319, 4888844.71253773, 572.6003550967], + [1166038.31058012, 4888845.70399021, 574.3508352504], + [1166039.28656533, 4888853.91396169, 573.1225520154], + [1166039.21478372, 4888854.38125368, 571.3095176244], + [1166039.28656533, 4888853.91396169, 573.1225520154], + [1166039.04992761, 4888854.15371265, 569.4570502433], + [1166039.21478372, 4888854.38125368, 571.3095176244], + [1166038.79336068, 4888853.16226017, 567.7065700897], + [1166039.04992761, 4888854.15371265, 569.4570502433], + [1166038.79336068, 4888853.16226017, 567.7065700897], + [1166037.81737547, 4888844.95228869, 568.9348533246], + [1166037.88915708, 4888844.4849967, 570.7478877156], + [1166037.81737547, 4888844.95228869, 568.9348533246], + [1166057.94330426, 4888842.3194133, 571.1427132321], + [1166057.78213698, 4888842.09145775, 569.2899719141], + [1166058.17923958, 4888843.31332048, 572.8947210612], + [1166057.94330426, 4888842.3194133, 571.1427132321], + [1166058.17923958, 4888843.31332048, 572.8947210612], + [1166058.97304071, 4888851.54523188, 571.6799190939], + [1166058.88963258, 4888852.01395147, 569.867744146], + [1166058.97304071, 4888851.54523188, 571.6799190939], + [1166058.72846531, 4888851.78599592, 568.015002828], + [1166058.88963258, 4888852.01395147, 569.867744146], + [1166058.49252998, 4888850.79208874, 566.2629949989], + [1166058.72846531, 4888851.78599592, 568.015002828], + [1166058.49252998, 4888850.79208874, 566.2629949989], + [1166057.69872885, 4888842.56017734, 567.4777969661], + [1166057.78213698, 4888842.09145775, 569.2899719141], + [1166057.69872885, 4888842.56017734, 567.4777969661], + [1164056.65356057, 4891743.67760728, 707.83133308], + [1164056.96539883, 4891743.84437814, 705.9913522837], + [1164057.98910884, 4891744.28396043, 704.2967457455], + [1164059.55990108, 4891744.92153793, 703.1836362397], + [1164061.27263099, 4891745.59530727, 702.8326717342], + [1164062.99124145, 4891746.25393232, 703.1836362397], + [1164064.58068427, 4891746.84347861, 704.2967457455], + [1164065.63278809, 4891747.20993781, 705.9913522837], + [1164065.97545595, 4891747.29731262, 707.83133308], + [1164065.66361769, 4891747.13054176, 709.6713138763], + [1164064.63990768, 4891746.69095947, 711.3659204145], + [1164063.06911544, 4891746.05338197, 712.4790299203], + [1164061.35638553, 4891745.37961263, 712.8299944258], + [1164059.63777507, 4891744.72098758, 712.4790299203], + [1164058.04833225, 4891744.13144129, 711.3659204145], + [1164056.99622843, 4891743.76498209, 709.6713138763], + [1166250.46577831, 4888836.85915944, 560.4530808532], + [1166250.46483106, 4888836.53000372, 560.44227494], + [1166250.42985609, 4888834.71663338, 559.9721157055], + [1166250.3406897, 4888833.09854709, 558.752791214], + [1166250.21264934, 4888832.09914262, 556.9927621033], + [1166250.07813135, 4888831.87000617, 555.1380420855], + [1166249.94730168, 4888832.34146358, 553.3293971619], + [1166249.83095912, 4888833.56404357, 551.7154985696], + [1166249.75960155, 4888835.32872365, 550.7186443119], + [1166249.74396317, 4888837.18831516, 550.4900402399], + [1166249.77893814, 4888839.0016855, 550.9601994745], + [1166249.86810453, 4888840.61977179, 552.179523966], + [1166249.99614489, 4888841.61917626, 553.9395530767], + [1166250.13066288, 4888841.84831271, 555.7942730944], + [1166250.26149255, 4888841.3768553, 557.6029180181], + [1166250.37783511, 4888840.15427531, 559.2168166104] + ] + } + } } ] From 604338b5662984b61ee1dede9f05946114b3606d Mon Sep 17 00:00:00 2001 From: Joost Gevaert Date: Tue, 4 Feb 2025 15:41:52 +0100 Subject: [PATCH 10/18] Put boreholes in a GroundInvestigation object --- Geotech/WekaHills_GI.ifcx | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/Geotech/WekaHills_GI.ifcx b/Geotech/WekaHills_GI.ifcx index f13ea6d..0122607 100644 --- a/Geotech/WekaHills_GI.ifcx +++ b/Geotech/WekaHills_GI.ifcx @@ -38,6 +38,30 @@ "def": "class", "type": "UsdGeom:Xform", "name": "N337e2116e7e24dd390ddbf2e42555fac", + "children": [ + { + "def": "def", + "name": "GroundInvestigation", + "inherits": [ + "" + ] + } + ] + }, + { + "def": "over", + "name": "N337e2116e7e24dd390ddbf2e42555fac", + "attributes": { + "ifc5:class": { + "code": "IfcSite", + "uri": "https://identifier.buildingsmart.org/uri/buildingsmart/ifc/4.3/class/IfcSite" + } + } + }, + { + "def": "class", + "type": "UsdGeom:Xform", + "name": "Ncaa536ea098a46158b24a0574ae17294", "children": [ { "def": "def", @@ -57,11 +81,12 @@ }, { "def": "over", - "name": "N337e2116e7e24dd390ddbf2e42555fac", + "name": "Ncaa536ea098a46158b24a0574ae17294", "attributes": { "ifc5:class": { - "code": "IfcSite", - "uri": "https://identifier.buildingsmart.org/uri/buildingsmart/ifc/4.3/class/IfcSite" + "code": "IfcGroundInvestigation", + "comment": "IfcGroundInvestigation doesn't exist, but IfcGeotechnicalAssembly does exist, and is the parent of IfcBorehole in IFC 4.3. However, a 'Geotechnical Assembly' is not a common concept, whereas 'Ground Investigation' is.", + "uri": "https://identifier.buildingsmart.org/uri/buildingsmart/ifc/4.3/class/IfcGeotechnicalAssembly" } } }, From 8999c598a2341a4408f9e9cb26cdc9653fc0512d Mon Sep 17 00:00:00 2001 From: Joost Gevaert Date: Tue, 4 Feb 2025 15:42:25 +0100 Subject: [PATCH 11/18] Link the CRS to the Site instead of to objects further down in the hierarchy --- Geotech/WekaHills_CRS_EPSG2193.ifcx | 24 ++---------------------- 1 file changed, 2 insertions(+), 22 deletions(-) diff --git a/Geotech/WekaHills_CRS_EPSG2193.ifcx b/Geotech/WekaHills_CRS_EPSG2193.ifcx index c36c46c..de5630b 100644 --- a/Geotech/WekaHills_CRS_EPSG2193.ifcx +++ b/Geotech/WekaHills_CRS_EPSG2193.ifcx @@ -20,28 +20,8 @@ }, { "def": "over", - "name": "Nad68cd145a6b43fdb0232e0b11a6c7bc", - "comment": "Assigns urn:ogc:def:crs:EPSG::2193 to the instance of borehole WH_009", - "attributes": { - "crs": { - "ref": "" - } - } - }, - { - "def": "over", - "name": "N996ff9e7b86240f898d4d038ab311d1b", - "comment": "Assigns urn:ogc:def:crs:EPSG::2193 to the instance of borehole WH_012", - "attributes": { - "crs": { - "ref": "" - } - } - }, - { - "def": "over", - "name": "N25dbbae886194be6b469e4f17f0b605c", - "comment": "Assigns urn:ogc:def:crs:EPSG::2193 to the instance of the GeologyModel", + "name": "N337e2116e7e24dd390ddbf2e42555fac", + "comment": "Assigns urn:ogc:def:crs:EPSG::2193 to the instance of site WekaHills", "attributes": { "crs": { "ref": "" From b84489dcbba7ff1855f2fbe53307f772e528b20f Mon Sep 17 00:00:00 2001 From: Joost Gevaert Date: Wed, 5 Feb 2025 15:28:36 +0100 Subject: [PATCH 12/18] Remove offsets. Offsets are related to a specific EPSG registered CRS. --- Geotech/WekaHills_CRS_EPSG2193.ifcx | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/Geotech/WekaHills_CRS_EPSG2193.ifcx b/Geotech/WekaHills_CRS_EPSG2193.ifcx index de5630b..5eef608 100644 --- a/Geotech/WekaHills_CRS_EPSG2193.ifcx +++ b/Geotech/WekaHills_CRS_EPSG2193.ifcx @@ -10,11 +10,7 @@ "wkt": "PROJCRS[\"NZGD2000 / New Zealand Transverse Mercator 2000\",BASEGEOGCRS[\"NZGD2000\",DATUM[\"New Zealand Geodetic Datum 2000\",ELLIPSOID[\"GRS 1980\",6378137,298.257222101,LENGTHUNIT[\"metre\",1]]],PRIMEM[\"Greenwich\",0,ANGLEUNIT[\"degree\",0.0174532925199433]],ID[\"EPSG\",4167]],CONVERSION[\"New Zealand Transverse Mercator 2000\",METHOD[\"Transverse Mercator\",ID[\"EPSG\",9807]],PARAMETER[\"Latitude of natural origin\",0,ANGLEUNIT[\"degree\",0.0174532925199433],ID[\"EPSG\",8801]],PARAMETER[\"Longitude of natural origin\",173,ANGLEUNIT[\"degree\",0.0174532925199433],ID[\"EPSG\",8802]],PARAMETER[\"Scale factor at natural origin\",0.9996,SCALEUNIT[\"unity\",1],ID[\"EPSG\",8805]],PARAMETER[\"False easting\",1600000,LENGTHUNIT[\"metre\",1],ID[\"EPSG\",8806]],PARAMETER[\"False northing\",10000000,LENGTHUNIT[\"metre\",1],ID[\"EPSG\",8807]]],CS[Cartesian,2],AXIS[\"northing (N)\",north,ORDER[1],LENGTHUNIT[\"metre\",1]],AXIS[\"easting (E)\",east,ORDER[2],LENGTHUNIT[\"metre\",1]],USAGE[SCOPE[\"Engineering survey, topographic mapping.\"],AREA[\"New Zealand - North Island, South Island, Stewart Island - onshore.\"],BBOX[-47.33,166.37,-34.1,178.63]],ID[\"EPSG\",2193]]", "name": "NZGD2000 / New Zealand Transverse Mercator 2000", "authority_id": "EPSG:2193", - "units": "m", - "offset_x": 0, - "offset_y": 0, - "offset_z": 0, - "rotation": 0 + "units": "m" } } }, From e7b48ea10d48438f591e81b8d54476c9ada70619 Mon Sep 17 00:00:00 2001 From: Joost Gevaert Date: Mon, 10 Feb 2025 22:41:43 +0100 Subject: [PATCH 13/18] Figuring out what the 1M$ question is... --- Georeferencing/README.md | 90 +++++++++++++++++++++++++++++ Georeferencing/WekaHills_CRSes.ifcx | 80 +++++++++++++++++++++++++ Geotech/WekaHills_CRS_EPSG2193.ifcx | 27 --------- 3 files changed, 170 insertions(+), 27 deletions(-) create mode 100644 Georeferencing/README.md create mode 100644 Georeferencing/WekaHills_CRSes.ifcx delete mode 100644 Geotech/WekaHills_CRS_EPSG2193.ifcx diff --git a/Georeferencing/README.md b/Georeferencing/README.md new file mode 100644 index 0000000..53f6d60 --- /dev/null +++ b/Georeferencing/README.md @@ -0,0 +1,90 @@ +# Georeferencing + +> + +https://www.fao.org/cwp-on-fishery-statistics/handbook/general-concepts/spatial-reference-systems + +## To Be Figured Out + +Ways to define a geodetic datum for an Engineering CRS: + +* Lon, Lat, Elipsoid Height, Angle to True North +* Easting, Northing, Orthometric Height, Angle to Grid North +* Survey Points + +## Definition of a Coordinate Reference System (CRS) + +Sources: + +* https://www.crs-geo.eu/definition-crs.htm +* https://www.deparentis.com/wp-content/uploads/2020/04/IGOP-373-05.pdf + +A Coordinate Reference System contains two different elements - the datum and the coordinate system. + +The datum defines how the CRS is related to the earth (position of the origin, the scale and the orientation of coordinate axis) e.g. ED50, ETRS89 and the coordinate system describes how the coordinates expressed in the datum e.g. as cartesian coordinates, ellipsoidal coordinates or coordinates of a map projection e.g. UTM. + + + + +## Linear Infrastructure CRS'es + +When designing a linear infrastructure alignment (such as a road, railway, or pipeline) that crosses from one zone to another in a national grid system, specific procedures must be followed to ensure consistency, accuracy, and minimal distortion. The process typically involves the following steps: + +1. Selection of a Suitable Coordinate Reference System (CRS) +Identify the primary CRS used for the project, which is often based on the national grid system (e.g., UTM, Gauss-Krüger, or Lambert). +If the alignment is entirely within one zone, use that zone’s CRS. +If the alignment crosses multiple zones, a strategy for transition must be defined. +2. Defining the Transition Strategy Between Zones +Option 1: Stay in One Zone (Extend the Zone Limits) + +If the alignment does not extend far into the next zone, the design can remain in the first zone, treating coordinates from the second zone as extended. +This avoids transformations but can introduce slight distortions. +Option 2: Split at the Zone Boundary + +The alignment is designed in two separate coordinate systems, each following its respective zone. +At the boundary, a coordinate transformation (datum shift) is applied to ensure consistency. +This approach is useful when the infrastructure spans large distances across zones. +Option 3: Use a Custom Local CRS (Best for Long Alignments) + +A project-specific oblique Mercator or Transverse Mercator projection is created to cover the entire alignment without switching zones. +This is commonly used for railways and highways to avoid repeated coordinate transformations. +1. Coordinate Transformation and Adjustment +When switching zones, perform a coordinate transformation using geodetic software (e.g., PROJ, ArcGIS, or QGIS). +Apply Helmert transformations or grid-based transformations if necessary. +Ensure continuity of coordinates along the alignment, avoiding sudden shifts. +4. Ensuring Engineering Consistency +Perform geodetic checks to ensure: +Distances and bearings remain accurate. +There is no unexpected distortion in alignment. +Convert elevation data to the appropriate vertical reference system. +5. Integration with GIS and CAD Software +Use specialized software like Civil 3D, MicroStation, or OpenRoads to maintain accurate coordinates. +Implement dynamic referencing so that design elements adjust automatically when shifting between zones. +1. Validation and Quality Control +Perform benchmark testing at critical points along the alignment. +Cross-check GIS and survey data against real-world measurements. +Ensure all stakeholders (engineers, surveyors, GIS teams) agree on the approach. +Conclusion +The best approach depends on project length, accuracy requirements, and software capabilities. For shorter crossings, extending a single zone works well. For longer projects, using a custom projection is often the most precise solution. + +### Surveying Best Practice for Linear Infrastructure Projects + +* Survey is initially done in (Longitude, Latitude, Ellipsoidal Height) using GNSS. +* Survey data is transformed to the National Grid CRS (Easting, Northing, Orthometric Height). +* If a Custom Project CRS is used, points are transformed from the National Grid CRS to the Custom CRS. + +## National Grid systems + +* United States – State Plane Coordinate System (SPCS) +* Canada – UTM-based National Topographic System (NTS) +* Russia – Gauss-Krüger Coordinate System +* Germany – Gauß-Krüger Coordinate System +* Sweden – RT90 (Rikets koordinatsystem 1990) +* United Kingdom – Ordnance Survey National Grid (OSGB36) +* France – Lambert Zones (NTF Lambert 1–4) + +## Definitions + +* Coordinate Cystem (CS) +* Spatial Refence System (SRS) / Coordinate Reference System (CRS) = CS + datum +* Datum diff --git a/Georeferencing/WekaHills_CRSes.ifcx b/Georeferencing/WekaHills_CRSes.ifcx new file mode 100644 index 0000000..3d64125 --- /dev/null +++ b/Georeferencing/WekaHills_CRSes.ifcx @@ -0,0 +1,80 @@ +[ + { + "def": "def", + "name": "urn:ogc:def:crs:EPSG::2193", + "comment": "The name of this object is an OGC Uniform Resource Name.", + "type": "CRS:EPSG", + "attributes": { + "WKT-CRS": { + "ISO": "ISO 19162:2019", + "wkt": "PROJCRS[\"NZGD2000 / New Zealand Transverse Mercator 2000\",BASEGEOGCRS[\"NZGD2000\",DATUM[\"New Zealand Geodetic Datum 2000\",ELLIPSOID[\"GRS 1980\",6378137,298.257222101,LENGTHUNIT[\"metre\",1]]],PRIMEM[\"Greenwich\",0,ANGLEUNIT[\"degree\",0.0174532925199433]],ID[\"EPSG\",4167]],CONVERSION[\"New Zealand Transverse Mercator 2000\",METHOD[\"Transverse Mercator\",ID[\"EPSG\",9807]],PARAMETER[\"Latitude of natural origin\",0,ANGLEUNIT[\"degree\",0.0174532925199433],ID[\"EPSG\",8801]],PARAMETER[\"Longitude of natural origin\",173,ANGLEUNIT[\"degree\",0.0174532925199433],ID[\"EPSG\",8802]],PARAMETER[\"Scale factor at natural origin\",0.9996,SCALEUNIT[\"unity\",1],ID[\"EPSG\",8805]],PARAMETER[\"False easting\",1600000,LENGTHUNIT[\"metre\",1],ID[\"EPSG\",8806]],PARAMETER[\"False northing\",10000000,LENGTHUNIT[\"metre\",1],ID[\"EPSG\",8807]]],CS[Cartesian,2],AXIS[\"northing (N)\",north,ORDER[1],LENGTHUNIT[\"metre\",1]],AXIS[\"easting (E)\",east,ORDER[2],LENGTHUNIT[\"metre\",1]],USAGE[SCOPE[\"Engineering survey, topographic mapping.\"],AREA[\"New Zealand - North Island, South Island, Stewart Island - onshore.\"],BBOX[-47.33,166.37,-34.1,178.63]],ID[\"EPSG\",2193]]", + "name": "NZGD2000 / New Zealand Transverse Mercator 2000", + "authority_id": "EPSG:2193", + "units": "m" + } + } + }, + { + "def": "def", + "name": "N3674dee56a3c46509369539813004d0a_CRS", + "comment": "This is a The name of this CRS object is an GUID, because this CRS object is not a registed CRS.", + "type": "CRS:SurveyPoint", + "attributes": { + "WKT-CRS": { + "ISO": "ISO 19162:2019", + "wkt": "PROJCS[\"EngineeringCRS_latlon_-46.01646668657133_167.39635621841134\", GEOGCS[\"GCS_WGS_1984\", DATUM[\"D_WGS_1984\", SPHEROID[\"WGS_1984\", 6378137.0, 298.257223563]], PRIMEM[\"Greenwich\", 0.0], UNIT[\"Degree\", 0.0174532925199433]], PROJECTION[\"Transverse_Mercator\"], PARAMETER[\"False_Easting\", 0.0], PARAMETER[\"False_Northing\", 0.0], PARAMETER[\"Central_Meridian\", 167.39635621841134], PARAMETER[\"Scale_Factor\", 1.0], PARAMETER[\"Latitude_Of_Origin\", -46.01646668657133], UNIT[\"Meter\", 1.0]]", + "units": "m" + }, + "SurveyPoint": { + "CRS:EPSG": 2193, + "Easting": 1166250.104, + "Northing": 4888836.859, + "Elevation": "?", + "Rotation": "?" + } + } + }, + { + "def": "def", + "name": "N07104fd2c3ee44b1af7637c0f1ae249c_CRS", + "comment": "The name of this object is an OGC Uniform Resource Name.", + "type": "CRS:Infrastructure", + "attributes": { + "WKT-CRS": { + "ISO": "ISO 19162:2019", + "wkt": "PROJCS[\"SpeckleCRS_latlon_-46.01646668657133_167.39635621841134\", GEOGCS[\"GCS_WGS_1984\", DATUM[\"D_WGS_1984\", SPHEROID[\"WGS_1984\", 6378137.0, 298.257223563]], PRIMEM[\"Greenwich\", 0.0], UNIT[\"Degree\", 0.0174532925199433]], PROJECTION[\"Transverse_Mercator\"], PARAMETER[\"False_Easting\", 0.0], PARAMETER[\"False_Northing\", 0.0], PARAMETER[\"Central_Meridian\", 167.39635621841134], PARAMETER[\"Scale_Factor\", 1.0], PARAMETER[\"Latitude_Of_Origin\", -46.01646668657133], UNIT[\"Meter\", 1.0]]", + "units": "m" + } + } + }, + { + "def": "over", + "name": "N337e2116e7e24dd390ddbf2e42555fac", + "comment": "Assigns urn:ogc:def:crs:EPSG::2193 to the instance of site WekaHills", + "attributes": { + "crs": { + "ref": "" + } + } + }, + { + "def": "over", + "name": "N0d69d9ba92254b07817a49f47ca5d6e6", + "comment": "Assigns Infrastructure CRS with name N07104fd2c3ee44b1af7637c0f1ae249c to the instance of WesternTunnel", + "attributes": { + "crs": { + "ref": "" + } + } + }, + { + "def": "over", + "name": "N12becaa0fa484644abe9691a29cccbed", + "comment": "Assigns Infrastructure CRS with name N07104fd2c3ee44b1af7637c0f1ae249c to the instance of EasternTunnel", + "attributes": { + "crs": { + "ref": "" + } + } + } +] diff --git a/Geotech/WekaHills_CRS_EPSG2193.ifcx b/Geotech/WekaHills_CRS_EPSG2193.ifcx deleted file mode 100644 index 5eef608..0000000 --- a/Geotech/WekaHills_CRS_EPSG2193.ifcx +++ /dev/null @@ -1,27 +0,0 @@ -[ - { - "def": "def", - "name": "urn:ogc:def:crs:EPSG::2193", - "comment": "The name of this object is an OGC Uniform Resource Name.", - "type": "crs", - "attributes": { - "WKT-CRS": { - "ISO": "ISO 19162:2019", - "wkt": "PROJCRS[\"NZGD2000 / New Zealand Transverse Mercator 2000\",BASEGEOGCRS[\"NZGD2000\",DATUM[\"New Zealand Geodetic Datum 2000\",ELLIPSOID[\"GRS 1980\",6378137,298.257222101,LENGTHUNIT[\"metre\",1]]],PRIMEM[\"Greenwich\",0,ANGLEUNIT[\"degree\",0.0174532925199433]],ID[\"EPSG\",4167]],CONVERSION[\"New Zealand Transverse Mercator 2000\",METHOD[\"Transverse Mercator\",ID[\"EPSG\",9807]],PARAMETER[\"Latitude of natural origin\",0,ANGLEUNIT[\"degree\",0.0174532925199433],ID[\"EPSG\",8801]],PARAMETER[\"Longitude of natural origin\",173,ANGLEUNIT[\"degree\",0.0174532925199433],ID[\"EPSG\",8802]],PARAMETER[\"Scale factor at natural origin\",0.9996,SCALEUNIT[\"unity\",1],ID[\"EPSG\",8805]],PARAMETER[\"False easting\",1600000,LENGTHUNIT[\"metre\",1],ID[\"EPSG\",8806]],PARAMETER[\"False northing\",10000000,LENGTHUNIT[\"metre\",1],ID[\"EPSG\",8807]]],CS[Cartesian,2],AXIS[\"northing (N)\",north,ORDER[1],LENGTHUNIT[\"metre\",1]],AXIS[\"easting (E)\",east,ORDER[2],LENGTHUNIT[\"metre\",1]],USAGE[SCOPE[\"Engineering survey, topographic mapping.\"],AREA[\"New Zealand - North Island, South Island, Stewart Island - onshore.\"],BBOX[-47.33,166.37,-34.1,178.63]],ID[\"EPSG\",2193]]", - "name": "NZGD2000 / New Zealand Transverse Mercator 2000", - "authority_id": "EPSG:2193", - "units": "m" - } - } - }, - { - "def": "over", - "name": "N337e2116e7e24dd390ddbf2e42555fac", - "comment": "Assigns urn:ogc:def:crs:EPSG::2193 to the instance of site WekaHills", - "attributes": { - "crs": { - "ref": "" - } - } - } -] From 6ee63496135be7fc1cde8b53be50190a46a9384b Mon Sep 17 00:00:00 2001 From: Joost Gevaert Date: Tue, 11 Feb 2025 22:30:55 +0100 Subject: [PATCH 14/18] Lots of research and a more elaborated proposal for georeferencing engineering CRS'es --- Georeferencing/HeightsOnEarth.jpg | Bin 0 -> 206624 bytes Georeferencing/README.md | 45 +++++++------ Georeferencing/WekaHills_CRSes.ifcx | 74 ++++++++++++++++----- {Geotech => Georeferencing}/ifc5_crs.ipynb | 15 ++++- 4 files changed, 95 insertions(+), 39 deletions(-) create mode 100644 Georeferencing/HeightsOnEarth.jpg rename {Geotech => Georeferencing}/ifc5_crs.ipynb (88%) diff --git a/Georeferencing/HeightsOnEarth.jpg b/Georeferencing/HeightsOnEarth.jpg new file mode 100644 index 0000000000000000000000000000000000000000..21a6594dddec72efab120fe6344e12c5141fd2db GIT binary patch literal 206624 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¬=Y}U++zNJ_R5p9{YZv<0{J8JTiY~MJ-wGxI%|E`%J9v#XYe{y?si7a$3D4j7 zkE%@D&BpI%yfE4ZP@vnSzO=&jt9nGu6#&7CEAZ~X_`-6S-*{>d?8IlX%l zHN1{vjx13zlP*2~_LZ5_&+e-Kecif&56|#E`}rEHb9C6{=x;k4@~Zr|y_QYybJNf) z8+75u2q|O!d3xiU=bsl04Xh?Y1C`yYU(b&_k@r_EI?eYBTRw5YOooA7HPZExJPsYZsw5^KCI zJEnMz=IX{d$6iKhxK-;0DUPD1=M`_I#0`^|U)$~I9gAsnFAg4i8s_1{b7;Fq2>sG2 zXczF|+F8r_+z-r#%53_ie#Lhp|Q!~MpFpVGe7ux zn;-aOXSq#xCe|@CgF_H~5jSGD5*@q9T~!2PxNuKaH$82Iv+{`rdbM-So-A_W zr6}FB{mfv3m3AIvv1b1iYP#>^Bi@7WHvO-m<#s=ff({Qh7-_5i=31)2_z?qLrD_Bb z%MGabYw3!L+)yFU5;0S{;<%k8qGthvKvy~W*ej!5kG1#0KmTh!zxn&2>sZs4QT1wb zYB01SijJ73;_eL2Az+-jt{nYM!|NT%lw!Ji!R_D7qY>=%*lMynF%BVx900=J3>&7SN6 zmSu5WO0Qb?ZfNWRt`%+v_3nUoCK4CB=4HJE&sElYUe+D!TCFkLIme}))6e*_k-9>q zUr0G?EO95ZKrD*aS&(bkXEY*udct_I>rO9XF6{!Qbj(Wp0%b5MVRL6sl_Z9Jy%41> z5RT?V84Z+G5G9R*dpRA`wcydZP+k%zmX56o2Qt$=!ozW1`Bo27!`m}Ch1cF%mRjaA z2XW8kFr%5ZE!tZ>Te?R@Dl6Awxwzkj?r*IA{H+fEJ-FzeJ{0tfhIgvgcFwiA%1hOS z>8fXxH~P;Ikyh-}X8>R90`}dCd2K`;&or}-`H9Tlb8t(hei!ih+%}xozGMJA zv1nUNH-j>!iN>$%7AWxw^d}8gTNfaF!=5qnf!+>IJF=~9lE359%Kqc@uu<6LxrK_= z+;d!=jhr6M@eW&HLFTxjcKnpN!-KMVXV&oapG7xwbo;U$pEk3~@n7tC3Cj41<`JyH zPlpu7?rj+Hlm*--ysh3C*{I9M_BcU)OQ?gTq*b)DLPnU@R(;YgB!zUGL&7qa=mi?d z+#C#K}Os5_n!BUQ>{6_hUIN0P$BqmD$6^p&mpALG5QPgJ1F zXF+{?{91xvsF|?_PQ+O50tDrC&&)8ib2}Nk01hPPPcfg?+}xJf1r)aL)a+b~XxI=7 zaCZ6I5la7LdPC2*>;Hz9)v{g2Ni&N!yhXk&GcL;QEK!i@vq6(4_RHy~1e?M|s8PDr zBeHQ?;z*5kpylQ6%*-CKgUiR%A0T|KA<&$O51iA;gHI_(CRc4pP0ZQjEPt>E?E)fv zwW)OT4D%wq?LObhUPIc&#${#0WVJ?6?2Ssw-SR4`y8TS~dUXcgjfpNcI6u;#>*2YT zl0U~cq7c0vMgu(pd(pU~7Hz}gQ!$j{QXlo@F5q^}Oxsxb2Ge#eWYkI&hJW1?5Dv51 zJ3O!~uhWm5p6wb+c`-^cbqN~X?nKr`j7<~cR622z8MXQfI>Vag>uD*y8xEI_Hsfcu z_m2_g9GZS4oxQe<^o^)%EnpduWml8WOq9YDIvvqwnzX zKUqKSTsVzbAL@|Z+LAG&I>t6$|F-b->Ku_eZItHoeM9#y02vkjEGcA^OkU7?3Q_!c zAM~B3{}lMyYJK#NCq*e|&U=(t*z}4wOSqG6S8T-Vbs_A`M0#$znTN4(+yeHOyOfn= zmCt|w9bkVt-Y)hkp833kuL)VW-gADGq64`iaOR9%G;yA%!I z3^sG!dkB;5e>lFCW7|yA3@?e=f53|@=#xcEj&WO98k)ur^cY}fen7tJ_^Zptmwie0 zRXUripl6+Qb?^Jd7ePb`1S62`JAYy`F4P8pR^co~D)q>fCPZ>B?*`^LQG(UpW8&S_ zCe%ATU2&{^l0r_r@ti@a8fST>#0|H#Dinx3Mq1+W;u7EDu zhUA}AQN9vCiZQn+l|xSLq&7C=k%GeF;pEjKR_*yl@KW*8h&z5tM zAq+<`V|C|>J^6CvE=I~x?NR!}ljpCK%wXO29iJ8RlP@co$JqDPM|rbXN%Eh7KSo=%q& z;xn1a@brh-tbu3r!uHYStWsy7Qx99tqe#Kg^ENkHhcq@I#|*k`#j?Z@{3$kjo}DPa`>vuC^|j$aLwMZ7E!4CN#(ZDRsE6ypFi{< zQ71xsQO>C22{#)oMw+gS6Cet*jfiUpaLGwM-{0D|!i+sr>P3uQ3cQ-#t2=e8aVB$Y z+~pWsu5Jray9=1DTXo!Xc`)U;TuS_!$0gb-mI4}bE}52eL1;Fqoe+68NholRPt3wa zv z49t#-_Tu_|CHb72)n;*J3o9wttnC-L1M;5qd+ytFVds`dMplM2Z|tpLBJA@Dd$# zsa%?^$_?qtEvLYPoG zsp%rNOyENj8m2GgwmBw+Vw!wBt-TR>xxRMB*J6a@le>VbT|mDN^l)3oeb~s}_;8gY z;A&U?onbF4=(4!rlfd*2PvRKlvQkHBWD#j~mD2B*EpyT{wT z2WgU4WR*s-A?M~`yb-9S)r3}+&LE$IQ{^DenKGz$s-b@`+6HUo1T{IxRw7G~T)=@D&&S`s=$I}a}dW@5y_kU6kXUyeaO ztB@9l5Icoqq<7?$_Al#k1|Iv35Inq~3^M5zZ|jf413?RDiYWy?(dos+Ne9*VX`nk3 zmY!^SR1MRO;2lzf&_J0!Xl=P+zx08HzL^0~GnB(}b46DHU(=moqlwP&SxPTGgS^)> z*(s$FeW?4?wHm!S%Gs?Z-J9|!=d+B6XeX3omk2bH0XBk1fnvvMlyfwUi zIuNWrV3_2b>=N!`M71SV4(3xov&(~(QhZE*SRD71`w9X+#y7rDFCS&|F+ZC*O#zod ztxbqpnhIRqAtqWwONZw>=}d)(h-U6h{a!<6+jd}JZPsn_yf!^CM#>1ENKuR$BXmxk z^J;od!>YzTZp-dcRLA(>K{owWa=4@&{QUeDoVX+-8`6YJVl})3#a*LP&^U(-Q&-pJ z<78~+tj*ohVY-A?>RAIGMSgjYf77sBT##3RBj1pb?F^JKVS0Dx*6r&BBB;h;3ne1H zvvq&$Rbok0fIkvtPczoMLIX7$vI?rk;V>-t(gZ@V?3~;GoHHqE&2Y##F2Hw~n;NG& zCAeiHp2~db$c_i@BPzl9JW&KxFJ}cT*-pHyVN5cSuV6&S%zj_v5=dCDifC|sff>00 z3sAp?XdAC-=_Oe-J1-$4y;V_m?US>kQ+r{_7e?6ETor{wt^tg!`iyJoNaOTOIt;jS zu}tsi?}RF!1S$+PyO`Gkh;0;o@A}TMd~wQwW;LFZE`a$PW0!cvmLwrrgs(CI=o4NcMid&9N(NgOGd}ni9G+ ztFLNj%XH1vnb+4Q2ML|j(3N47ObE}dMyG?0IX-)}LBiiD(BwduJSdFi$`$ z(DVCTEM09#4frD%*S_&JYDQRvYC5!S&g3k*XOlp?aXD)wH zurPqjLt~%}x0$62<(D4|J?d6hriTfEd*}OBI>XQ6?u^zJh(N!HlePkF3y zX5de|qrXS}3wj^F`{|q@_d*b*^RQ^qiZ%{fz%`1`HP7QJKBN?x?$;u##G4VE>%R5e z*3B*9NjBoR1h*f~M`LWZC227u5xB)MMoJg)Zq4V>zB7P5PmDvN0`UyZ$l~O=Hbny( zg(DV(x#qR&9y{h@6SW<0r&?RtI|B4a8;`4KR}=dhvidda&A!sp6Tgxfsf01RSHI)A z!!%YbUz7aK^i2EP%{Pc?#&yk#)~#Y5H&1=whFl{L66R~P0u@H6ku=IRP5+)q+LK(> z`w4W96d+XoLC5XjZUJsgI+6XvY}t_5g?ptTjk_2#73N0VuXQ9#EDzQEMIL&-jo5l3 zL@b%_;BRa!gq-^yyrcEB#yaZ4>m9pm8&L7$`v|OIdS86PF;xdH3xF}HdW!RODg~^x zzs()voLTKaW7Mz+J)RW=w#hA@+i$lK04RtMA4ra{#K*g^T|o7VaUZL-cO$+I^@%ro z)=jg+aqhi6+Ew4LpS-(HNX%5Z>p z#NG>%M(*eRP8z2)fL*!;8j@~*3N?Gw5uH6)`)(b6CA9Z4WQR1o9u{N8hsoeK*okAE z+ggWq0S+&hH}iZX=FD69U+W=$r*U6TDkC~zQ=qk?hi2}BVZ1Y@Y}2~F`7Zu`W;=qL zKWlkOVCYOLw$k1w?B5{pikVM3IgfG2X3E2q4bzL4-H|EkG9rk`&h%ibaW_Glj$E{I zHgLaLsZYOKI^QoHS})-`c1QV^8wM{gO5ltx8*;|W=d2K#o@Dj3Y|p1Gv9!q$-;%`# zjXrHhR^>0dNK4zONs*p{4K&o%m>m}=9pK{Ha#d0%Eh37yQ;OHkYo5$K{fXpB7dm9|m72y@XdaorLXrvzfm57e*I$oY@=ro$_0sf}@a1Q{` zMKjW~cMacXlXu*k+rN>7Oq?0RPH6h;iKtJl)~&x0b$s1WSf6T(eUQ4(k9B^e97ZU5 zbDR=Zu;(kGE3JH!cV{&)q{aqz};V^iF2kH^-fqwObesx->WHK4AdWc0WxFNp<- z4u@7P`BXhDpMIRKTd}gyPrW%y-^8H&wjc{!s^xbb6R!ss6z88e-CJ$4 zxkoxP&tW*Tpl!voxulklJiKa;oa~c`)4%>WL+b7fjQ~ACevw~dR$+nU9 z5pruzmp@-5&q1a0pop?mz@@;}6MaUzfZq@Cd)1MdJ!MtOx?aTZ8LsKXtWRwWxWbi0 z-8j3K*;YuFu6|wI*L9b@MG)ebrI_peXvQ*ms>p8SXtOuc24h=a6$Dk*z3iVUTKyDT z=jH4$Uw`z)qt06y$tG?e4t2Qc&US>3|S5aaNUXWUQJr8p@ zF1&n&w$-^*eL_t$V4~k7is%P70p=!MLYy=?j6M*Te0UdNloGp~(F92bQ@m3wNx1xM zWuWE^L<$GQy{IvhH+jjcgZGxYUJ6>Zb{H#LL6{V?&0pR9@_x+rlrX<~Rlx^Ot&GOX z5zrBHq_!G+xY#-GcabKXeo zl3HaaJ&zsvKxo);-na}&E)6G8nAgWb5HAbmX zkkDN~Y}=GJDbgR`OShFWra~2L(%d~VWunc_Lq_hc!j1eFFi`jIjqL-&3>g!-8yU@& zB6p!!M%^*ZR^Yi%5gS3N)>2E?oTEP;<{J(x=x&T0HVKDMwnv|W!)6GM*o-gp$lkT8 z%PV9C_Gws&qIRe=EBtqX*2;0Vsdj~o!EN@w10ZF~(6AFQ6WQy^KAx9fN31=0v&y#Z z0>s@^-C7V)xeFNE`Aod$i`&`!L^MpfRQ!5DdAfc2mS_7^>1wnfRtK1J2I-u`MW<;< zXp)uBTpv8lqKW+itYx@9f9-e6H)JjRR;O13(!I{s3B5GwS>a9=*y}bk#`pD1K#045 zj5@KknAyxOVEar}c19z3d_a!49kOkEq44!;;P28`6dw!SnSDx0 zF*|NUZo2@LUBG-9Mav68$DpC7FotB}>4^qp*X$D@geUQ; z^p@?hAl+@|vyzQIgK$%0{b~J0ucSwF8CgBP31j)5QY)E!sU)yjIhPxKvcFY(6F~*a zw`0tV`=<6M(Ey!6#{}WcV+UGrc2g-qUxI2zvR-ViyA|I+E)75FTO)Vw z#GZUGtYV92zBFWdHCguR-MbQB;qK#ei?iHSqTYbH_L4fi?+~1cI~#k$%CS%q+Pl(# z+6-rk7E_%*qhAo_;^IXsH=htP^J)-!TJFz860d}D8>a0z}{4s}8=ITUHp3v@X# z+-BtNo)#aUqAAhrVjFvxvM*{jJ(s(bJ;E8}wasM(PD3e$@*>lVs!A<8#^Ny}=fqz& z+c{gd);JX9CbfY7vw-Z;HB2)BIs0WY4|Kgv3hkIxn-3b=?kemzHP+s&yHUcdAq@$ZmaF5ln5lT` z>_bC4C^+&2<+1_du~9>f(})s$u2%1;_-fs!!*3~b8qb+NZ!P>f;rhu(f)>tWSlTF0 z=8u1_T=Pj-Qq!+XUsC9|`X$}}TcMfny#9wu-qgMIb!E2@)y|OSeKr&I7(Nea zbjupPX^`MAf>-P7cO}#-7(kQ=ZzR8uLZI$q<+{$I^?kM+NU!)zz=B^fTx(@(vSgs< zrcpge$v@g=G_j)>zY93)lDUms1GVfQ4|oBPJw?~!ZlF@7tAF6n9v*qPOgVAU+(f&w zC{P17E3o{z9^seoT%KkOM%wo&RTYrP#?r?SrLL)ywJ|K*OR+$z8}nakgoFQ}8ljzW zz%D>IzPbw_ix1$w4$&$=y&G}PP^%Hw;qRu(7BqaVvkUl1sM>Q$$Xwp=_={i;Xw$2__$wQ&e^8PQ^t<41`<6Xa@pz{vre+s;PYnFW04|MZUGwWow{UE0}A70!RSCS@5I^?|PMA}9cV z98t>WOy_Ot;tanEKVGDhduBPu6zM~kQ7wbhjcqTIQ+`zKoBB!1Z>|NL@22_xmdt|k zVz@ZYr;EzUXv>A~)Z&3S3wsM8mj0 zT|;d)ZwBwGLteUAH7m9YI`{{`9&=$+B9muUbsQW2I6+N4Mm-;{q{)vlj|x0{MJ4ZQ~jTqTYlD* zw}bzJeWM~GWUxU&y+;jQLn5yvH2*L$;a4Y{6JA{bD&fV3i8rsxP;MBalx?X1LAOPS zg>;~nFWQTum#Da(mA+m!*P3pXj^XzYT$6)Acv_4!;aj>OCeeE}!WMc2xYI%z7}~wF z*dt%9R!%wk^mLxlrE%p`SGox7k7!4SWrkS0fC7H%RmQ#C&wS`$1U+Js=aVYG(2sjd zo8;|`x9YN}l(R;|j6~!1${qV#N^LP4$+pwD3;nJ` z{jLL0&-=sYN6Q1|tyLWpX4_9iJMuH?R8D`1m5XhPQxe~U7Kz2pp6REo0?cKMsZ$Sn zsiI(84vbLK$(ma97bCr-Dk^7l@w%W3Q?H%zqmu2RFo5t)61eW)*o>zV^U z@q<1akQ=!0jBHYxs1(Yw3XPwb^eD(ylYVnpgIfK4>K}sJ7z0X(BIgo32JcC^EQzVK?@A$<_)Ms3m($s6`A;DURzHmucD+f zr70$<^-QP3joQ_cdA5I$P6JvaJ5wOZ)Ub5&JNq=JAK&CgvZk>A)mY%?p|6 z<*7zDZ)bLziO$jWgUw3v{r#)rZB%0ZT6j}mQDIUS?YvNOFHWi3@WHsyxeDR~k~``byYAgcRBz|gP=co8 zbjwU!yIjOV#?g6`8x`68Dq$VqlfY;}I@P_j4Q&BFl_g2kdsTZf)$9|P;|jFa^lIi! zp}F*2f7fGH%08qwU$2;RL>-=J4bvp$BTD!w<~RnVJFB?y%{^;;fZL$rCu?z=GXuqD zw<9cvmF7v&rOCq4nrSVGJnoSG+|j#FxfM)^_%qi8yK#}XR;2=J=btudVKXcGPbBq5 zw%GUUPh?-*m|7;QK>d18c4lT`A!tX3x*v1Ppz4Ey0ti-9<+9)rEL0n_YLzkLh_%_*u&v8&&q>UxAzD$q>Q`g6M^n)ix;^|<*@kT zW=8zI+z~}7MrB1U=a4le0FhN69i1dX^Axycq(FYak3&*FvOHoHY_!< zv`3~M@O%n39PuFC838tUcENxQfDve$4RA&7j=0Jv%USvGqZr7z(2#(Awdf>0r-zo(200Y%`5$^szk2 zu(c%f4HCw0RQ0Hp3^7(m%R@Y!&8A!nsn5<@;OH9gK+WCD$G#aj3WYn1k2=p#)xmB& z^B!nIuTAb}o+YKkFJA10{{ir1ZEPd9WUBzT)Dija!N$T*JK0sCSlf|~$=jLO1%%~D zpZkr<{IieVqmuoz9Qz-oKQQp|6cU*&m^MLw$_w-gTv2~xQEN0>cLpK}Sp#$l#Vb<$HvJ4Zfv`t{nL*gySNc}k9pZc-MbPiJbCl}V!wqaSdt78VrQS}l#2 z2h*LA->=$J_K7Wma&;ya5K(~-VpfVvo`aA&H+|bbm%8zmsPxVN%N_dZE^2;QtnQnl zXTHtenbtr1^>5YXpM3T&+CwjNNw2@G63b3jWT#L`l;ymh28raxL zMje%36N4sEmD7ZA~R~BYjh}tk71B*LB8olNoXv5BXYS}A% z?6W`%0pNi8KT>v41U(D=NoS+2iSXj;t5-wA_dM1S)u@yYd7|Q1F-a-Ukwl-wr8JAR z0=`||kn4bDYrm<@EC*e_imH92OZQD!T$+3(Bvcv78Ao4idIEd{j-_nK=C-`}M@s+4 z()=qnZ~s^c|ISqZaR%)l+Wes_6e4RJ(gVs+r(ZWr6J4*awbrhVoT$_BcxWid2sji1{Eu%mI}>-Ci2B_dIw%4&HwY@8^T}bK?I6>%!bm zu019L54UZ3C{c*dCt?(2G)G60$aLRYl+sb4x3U4gSgf@Df2r$_LkhDc3)bo^pM@SH z`Dk-6-(5L0*-KNl^?uZ5$=n8d=<1e~%veunokQ#RrM>AsPFzqUL>BPJKm6iq|FcNb zV9yd`I3wEPx-vI29(yI3#E}24IO2y5{PUHFx~mTO#DT)iI?(|BRl`VabfQ~*cFuxu5PPMj*stA zFHqL4``qGZ?ff4G-#*4aWnW!%f9>eKO3aN!huWo87Ve1Y7`l^zic}@TNM1k%r!RK_ z%9ZNHshdb7{jy49PM)U$=-p9Y^!~5~@{=0ZT54@iT-p>R7AI<~&s^0Ok zbeyIzc;v(o0k+J`vql-_Wa2-V^`|ft4mwjZdm^nu+ND1KA8uLxEwAk#ZMkUGGIM_{ z>nlAhIV`)#Go`7kl&*L&4As%R3+M`0*UW#qBdHFndtkd#loZUHq9>Oaif)S?$o*q~ zueWYcHL6zUs9&bQv{xyiO^!SXed3yhd1~9ZNO9{p6p4?^KYogM@ZwRQWNb88`g>`_y-`XFEtdm z_}UX<`oDi0pV+ki-M{|0iop0a04DK9ujv`|{UXce%55gY_9D@5l zsy`}!HE+`&aq3k9n-(`9JQ7Pt?WOzYZY*KQlNR^c%i9B8broh^tKndN#{kjl6ukeF zREdyAIhsLr$e2TC#;8#0&MEFF?o^&aX&pGzX14m1CnqCP%sc20QI*A!6D>kzT;V;D zqE(~ZvOo{`I_u+*#*Qh-IEp&6N{kgXj<1us!R>7iyFd0!8yn3It?pEA#WB7~;HAHStYd zQ~Dix#W?n@t^Jl)io^qkFJZidJN0A(eX`5kB#50MxuOoQm^Ly}e@O+O?${>F+NP0B z90>a9b%FTIMR#75zAeP&Q2^+%;YqQ}%X|E43O++ZbJ9{xYN>xcDgfEIOz7Su#3$M# zhU7@{Ev4%q`!+I3Qj(>~Jlgr~KQ;v4r}`@g_Of;TzHUNQsd%Z%c})_9N2vL}ZS4rP z9>A@Zn!`_^sbPBSlhddk&I`y1q}NqO+u_bSO4q?aYj)9V zHzcI)C>nZo?tzhpeB~^IlHK;nYQNm{-Ez4)OX|YBtA@EPx?Eu6Y_IHYq!!HP*{Ycz zgkLMjepUN)x&)oTnGQuhZyr54C_T(5*SUyehJ()0NGBj&}lSM5ThTYQcf;=#FP z8P9fgva+&ySYu`L;vI)jKk{wnZ%2ix!47AigvBit%+*XEKyBwcr z<^Ra);_O|Fb=?vIe%UcccTqf(y|l^5pO(shB1R>=I2(Tr+Y9r?TLz>bN(I-1G_K!j zukyjAU8T!2pT)hN-!g!EbTqm%R)eNhIxHI-o4d#2$J5(UGHzccY$f`LV;?I#_L1!m}H%~0}&elfY?`hXudYmK!?5of( zfEBRCc7Q%uWy1=}4Lqgm@O&~O9a6&Stz4NYcv7m{6hLN*5UH;w>AoBrxL$nMSB{5| ziHnt^|GA<%H}K#j$*&+V{p8vPe4-+V-%;GcHaqPP#mWsHo~qSeX*A-hvBui-CzG&t9<6RXL075 zSGSap5L60hkS%*OwIqurC5#+gb@4~=$GjQ>(tL14Np5DOYBn$crs&H^K$!AVS-y+* zEM?*m;vugl;~Z|WsBt;J&9bRR9q4L&^p^BjzgFJ+_@8m$W}tQ89SAT2_mU^x<5?}E zn*H!J9oq3CY|?B~N+~|Ii;|r`OH~N2P%Hl4VBK@S)~%oA@GHSRBINbuY;dWcv#zt) zO^pX5KI)tvUsy8R?@aJ#dnKgyttRxoSvNd)h#b!(dI+<9g|yyms?gKSN%aoU+K2{ypwo zd_|ScxC*?6b?0}9zrwXQ(T8&PQO_nCd*XpAsb>sR58c!>wE5o3k2=IkG5u_eZt@ve zx3TtkF1^NBNiTL3_hJlt^?#Sw(%-1{f8Zmrhgk_ZpNFTg7nEofw8Kxcxo|ILch?Uo zY!HF=< zMi6t`7By87WE9l9EpL{J_i!^k1r?*CeYOx)7XjxcLmC`nmS!2YSd>llXPcEv6BL#B zQ!g;g7nIp^y>NG~c@U)x>k=~2%+{&MR#LPaX1HWd^tzv+)7_oh1dr{$3c& zfYc7uRIm(jrg@PYNTRs?RLoIn$5Dnt+V<397gNzo-*Q^g2JPr|dwoAh$*s8Qahng< z8&?kz^3H5MZ|=uJaXQ(>)hsX!4B=r+W>Zg#Ju-{h(>sLuwKdWq?)@FPSz%pbJN`3? zUU)Xeyv@&kEiVww=edfX=}|&D zrdDk%;Rbmx&zY}GcaNr=g_2tRR~(Xo=W2Z%Z+~F_HZy-lOXaeN3k0(-L=@ArmI%#` zvf|aYDdN)(I~_x8buE%@tYI0zb}%HDd|!Pu$q9l{_%DCIVz89W(C>ei*ZbfvazG+- z71XC)+e})s>cifM=CQ}GwlulJ-uR*M`N58YE(t?Y$2M(2;_pNLl_xoEfp~?BI`p+X z>-H~Z_qUOIK5F7Iw~cO11>3{DSqcqD-SSf(dK*8VP5;hi%VYlRY|XiVDchR`MBCFb ztLH;5uHWdHcwS1a;N;P$m0<1A9x1kF8O9r_S>}VwDBeD`*mc-Onp&88x+$;;6w{uo z6F*9KT$oKc$R392GBo8&9XSFIU6sVBv3~9BWL_lP5!fGeal2_9C@}`&T+^mfU5lD9 zx)~pcJnGx#I9CMLNY}F|9`bci^*JfNn}E7%oy}=$iVTh}!QH4FG9zl#8|GATnb_!EHFxWp=98N zXMByheQGz~xVNR@JJr8{@4I)@Tq+WaGg!wA6X>e|KA5@rpQ|5>MF2HKF5>}1Qi5fMBY|+C&Oc?>rK5dVsq!v=r66rw_4Tksc z_el6(lTd6elC7fS>?;)6($u1kxt&wG0ir?tSxdKY-Osv^VF``S25R!JnP=QJ2d;1) z{)wh;hS>4g8p}g2w2t$su;-jcZ=6uLB4gZxj+uwu*m8^(ZPC}6)5JQ_c>MtCvXy}t zd$ecctK6O~!zHylrT#kc$sQSjcPC=yhwD?06AgeCO+II;!~lq)ct-lZtv+Y#^;oG4 zP-HVk@d^{=IFZN6jK7}(P0wC3ip^3K_fUYyWs$Bi4g6%|MjOkUJ!b!a&^S^M^H*}ee)TC1kidYx<1xtYOm zy+uQ==)~{bLvz2*Jo>d!@;?5r z97q`GZ5_&=)4{#;9$hR_q_W2?LV{o6e&)%@FbkNEQft@2?LD?%>+8S1`*(l$xQwui zoKt)f`#U`x^hHzLyq@9Ju<%vet&IIU(Pq7O&+jN~_k6MT{r1FqiYTM=U{l<@SxZa~ zty+vQxeI6sGFubFq)g!tujvTaUnr{G%!??RMpMT$=Ru4gN#|jn=?CZiQw|~kjK3#} ziCwe8-?(P2DV5Ja*ZN?kWxieLX8xASA_<;Aeu>2)~j1)0i6QH(PX3S{IKIzhlg`@Kvva!wsvrakEyp zuQa5TYIXsdJHZ>%TTC(0C`SL;1x!EB(HrcdPXHna_mYQ+C5H2l=(T~$Ka$Wy|FvU` zGGpNA-ZL+LwKD(p00|Kd*k)&yZcN#9FDtrV8rbLO(_qy-0n?E4=s>D%nGh!VKicGe z@j^hL9IAWkkir%WnX=|U+wRG?{Bl@)%?XQ-$(v82lk_jOhPwMSp?P9Ut=|L{}C9iQE7mNn_Zyjbuc zlOk+>NIJ1zq{WiTJ3%8Y}sFFx|8~F1Nzkez90*G1zly&C3t{rzWqMIQ@CHg zF&xrYJ}19@Bzd!dtyT@&?6@~H0#saP4I+fCDQ>J2L?b8!9YLrvK*h&-gC|Bbhsll! zUioI9-101OWh2!Li)0G5B$$#$dU@9N=M+6YmoUn>UoJPdkv*BGVs8Cf02Urk4BY@3 z8k5YRolq;8z!YWYb{|C`zg<{H73GI5yi#tHl+a=teezN=DNJT*%b-}?c$7g=--dx^ zFVvTp{=f+6n#xky@254TA7YNV_Hdm9stzslEbrxzfWx}IJfCd2ow2|^vuJ)Ye_$2X z8Wpa$T6182BQiV6bvF89_Ys{J|IP8g7|NZ+oW-lRxHnjOGBo9U@~#MMRniWbFlkGe zY3o$Gr-bQ5#j8zgSMFzJ5@6($$_OLniu&|!Lbj?FI`w$P`V&~0M6GNilxfWPSmyNc z9pJ#mEF;c3N*P;)*BPf&40D`kddiGs&>+~THAKtJG-Ds?QH}!>O(7dh6!(^DIW6W& z51r@4H8u90BC&J{Dvn*w!8WBW#m>qca0G885-{QTdui!FvCF1@F;us+2hDQ4L^Y`t zLc9!#j3N{&%Z=wLL zk1@@yKFhm3J|n29&(^I zEtLB_C=BZhkN(>(4}7c3>m{oq5--r^3riBthlchaNt>5&q}b+@@|apHwO^53y3Y?X z^hwu)MoTaql+(>iP}#M73Ey(4WbuIs#VF^FNMrEa+pG zfPUC#dFNCDg`5{Mr(nOxvCm+~RxPPLREC%sKcXAClZ!>5lETRdVzc5x`v})})h0t1 zbC!Sa3gL-L9^~o9>_uB+;PI?vgt0H?qD}HWRVoD)@sdg8jC9TAoCpnPICgjy+gg-o z%@mj&4ZIpVVu=V;IJ)8XXFm}n68}xO&B(*<4OhhxQvT~q9?8Ez)vysN{|plhEogor zu_@M%wF1Q<#+o8Mm?>AW9kt$Kq?gKBO|i$O#>S!@_2ugRfT0dAuHX5o;4TMblL*`c zJf0MR&yy6pZ6RO7pJsm%Hr96QIB=*5!?A3ZjiRS~Dcv@f6PCjRax!boEzfwXo-MhD1F zQxoreGE4~Q+R>(@3tx*pXs<~Tbu+3X%tPl4fGPQHb4G@)A0<aLmzfeCi!5G=mps%N_h@ z#(Erc%NmCcuNMzsusXdh60sVg6{qqfkJY-LM203>wYIwEY+n=@`XwVmZ2;fg?h?Cy z1JTzD2Nk6;FQV1@fqiwO8!?Hzw&lK>zUhll;#Yq0x!TjYa^kjp2tGBO%WJ4y;DKB+ z$a(laNP^g1$dMFF|6ZuX^keN@mB6ddez#}SvNwY;Z3J|RFJ3NCx_veqXdUM4k0@Gc z>oIq3V;>C*iCfNPo0NB98#I8%iRMKI<({YWONxPS0N_6R?}_&P&);%j@1plfUAETp zpJ`#HN57*ndQiAnB8EMA(&tLnq}6586AH1T74MLt*V_ws=%%06tY>N!PfY?o|L?30 z9bT_71{P~HWbQywmxX}sP2%U2#kU=LF-ZNT}ykNjWjVgbdEPwkM*L-AY&G=WxxiZWaFa{t?Xw8rt63BDRAziKHh8gk?FG}~)|^Fe zq)E1=O%wWc%g9~6$GAl z1(N*BVZ>1SRm{aEZv(>{pSzE+z}EfvBxj4M@a897J+X&CkDa;jO9fO|09d?qO*i?2 zH3C5)ttoaf=eN1S$^XUPo5!Vf=56D4I!&f+OzPN}#C2*Ctubhgii+E`afymLiH!?J zZQK!&xPiNUnl^3`Mu{r{o4638NR`C}&?bt+7$r(X0l~P73vReC`O!XYXZlQM-sk;& z-p}Xx*whYhauiD34s>Qo3QGpsjS3-85A$Cz9=gQ_*&H3mxXW z(FnV@c@yl;l(c*Gj_acHYyNenX8>s1_nwx<-z3M58QnO^^h|QEy`u+111wv06Y!{D z^Qj?IwWSGNVVa%atPstMZC@E&kXBA8AA?#~amHbT_1=1lNCSYPKxS7%Y6{EIy4zbb zzAd43#{OM*himl1K4~h%ZtV=C*T3Y%@46rBg#hG9hCp%-ESj2(>X(=R5zTd{Fg z&b3Tk^^3UEgQl3e9|RjlEl^^*_?z_-I)1Jm;jli(8Cq3%o{`$KvZ#StC7LgSY>6vr zcsS0=rmQqM^E3i4c*MbEqoTiH7a~zNT0mud5%lT_v$vjmYLcQ8?|`XQze`8 zn`-wHF{TgyI>FKg1f5u@E!0gdHVm)gUK^<-s%j&;@7q!wC6X}-MRw+ z@ymu&GR4vY0iY35Nrz_?k*z=aXkyC?YjHwuY#riRzFoVB^wICQoYeFrSFm;G;gG0A zEB0FPg5%6OBKFz7{;<353ac>o0Bv7DizlDk`n zORpyLHyDOlZiUH;Axup$B!JTDpy+1Z%l_Yp9Z=yKzKo(x&C(|(HV6ORVCDM}$V>LUX3-FKgtrR3;)=dhbDR&D0Q&c-#vD zKviCrb6s^|sUBk1DN^8EUaaX8F3LSA=0d%_mUGd8yN- zc}^bR0EbI}cJ4S(UNKo=obVCuDt35A;f(-irGA0)tjS%4@13xJPTsZg@X*M` zEcehJj^LP{nsd|*Ay`+}3tH?@s3yp-FSm}eLaMA_-eD!74~|_Bsp)IpKPdN zqJ7T0Bi}eZu{mR6pnv6+PoY3JqIE5Pac;dUakI-#juYh@KJLT>wV5~_YbL?5Cs|=| z6D`98L<#PB#&*Zc@h2_N$D|NO)N*RzLBKugBq^nck;2U$0Iz7~J>i zD@RztQ`R5@426KidgL|Z$h^K8^XWlgDXynFioJE!lpYDdJg^O z?5seT?p*G8T<24%ae>JZH=xh{I7HpV4)_?(j^9v6aeTC_yV+C7eD_u;-ozpsCSk%r{37%5lS<6C^%K`xHU0~C7abK1f$Kzx`XBdxTn5Km-M1MyHFV!70$z%5oPuyzLctdqnvep z_q2(VNL2AG8>1KI@fnxsEB{?)T_o=~LuFff~i7x4Z;{#_;W{Z|y^@vO3S6RcI zA=w;F=XbM={2By!08G?r@_Dxl>5?!Rg)q@ET|Rnp6)2}Q$pU!(a|@L6(|!3MAFRAB=d7!c5nJ@RY&TjtD?9{pvJmY9NFwewfVHQ7G^-`g>vrtiR*ZDOKY&~v=WpSqZArg@ z4ZOE8`@%DpGn9^+>2S}V{XQklw*}!@Sd`tK8rtrb7#?!Ik@LVetTVI|)1tT2h!n<3 zzR?S(;Wn=>KznP-*FJ-*TFG;GFGZ8i(3Y_zXrg>z^~fDF{9womP3mo^YOTvt!@uGPv;({XmKG*) zV5y2p46^0*lBdcSD_ps|9>B+~b=x_y6pik$xEwxOy0hbNh@2XpdO7}|`BaWfPJPb(1!m{1+a)z8&2)}T)(^&t==Gj3M3!bTK7m*AK+`-!(}U7W)&~y!4ZHul z^`K-HPeGSa_*GY6HXk$ub#^d54*KQ150ZXb92yRq3EDyHzfsb8qZIJ@c*l`;d&{@k z(PoH~>9NCUHMR@MfBSgDKjQlu#fl{2PiKrsNl$kxnD(Z-Y0kft@BXsOwc=P3Q;eI9 zm7*jrUe0kYpI`0nFA7h7JZLsLjki6oA8>eOxPS@~b#KWODqd@vte%X%29JrPA?U&SwbtQkOA52uJeMq&uNr@} z0MB0V27Y`9H1j2*BAdT<>T|LYcUEhz`|}0BWUPY^G6Ln!+?V2m&4-ftQ7e(uR$5A4 z!Y5x;P4&dkU>adAPr7XaSQEQ=b}Kaf9e{b>Y;#y7I=$j+jz$`(c3*gd`RUUSJ7H|o z1$h#gM~IO|`J96bUP%r1vT|w6^SL-|X5^)iC%Jr?pHzje%a?LD5gKq)`bBRmeXJik znAfY>_St&p9w%v8`S&vth{4M!SZc_9Q&a0;hP9xC!l>LaYJud?sQGGe#G<)cZHmo@ZwxxB&p%orHf z*txGBkcvs4LrK1B6Q8Vsnhx}!M@y>I7KOYC=Z=r0E=j7WRyT@l;lB!%W&=5dsb-Pfr1hp8V0De|~BFw1Ko_gNI_F>x*uiolBt# zA?B@*>zyRq_z|2pC|HGMqDII`fo^m2n%U%v*ceFAWjAobx__|<#J^v<(EKd_F;{E# zi2HKD5iRe+UBF}|J!+o1HJvT(Hu|Q{RHY~8E}btMxGCOMw#!ovZlP{3xOOG0^x8$Q z(Z=%o>@Lh(gg>NZ_ZGL-rY0_+WBbx%_iL~kt5wjKc@DCrXgIPaq1JxB(Pc|XHh6TWC=obbj7jb`TVK-%f7^3~%=QDj(^yS`K=@$I_3_R+MQfJ>z zL}gHbd0xD!4I<+|OUk^AiT;{<=rA_6mAO|BFXZhSX+7z( zfwfcp*8P=Dria4w26e;3+p=r=gTlXiqhx?WaMn{H=1iYJKVG3#89&0~%5X__-cKEm za^c`U>?tHhW5sCvQG4clGM3SOhiF+kH(assP$L)(QA`i-pwN|?iyd*YL~4B3G&NYH zEl@+dI(RU=RC}R>DxE};nPG( zOS7lyoZ+|JiqM-}bmmcdL?~PY>+T`AH^w*|{X=ZW37J-(yEfdeMpzdpFh66$)8s1{ za|}HJ%%&)N-lS#hu7$-1bJSM@uelf>V(;MHvN~5zJS`lcV%C!^8q6iN_SP)xyIQoG z50^Y>OsY$bvalN;LIBL6Y1`HnpS9|SV|hK`c)DQ}*Su}^y=A!5_9!S|x|U>6VV@u! z)&ySzoiRoO9ZAp`a)2^BC2yX2L*#{BEtBtpOGH~fJ$HE0rv1PJPlb;n;lS>?ncRF< zG5}9ER_)D665{Io+=m%*9$6v)W*lK4eX4tX33tJLHK4yfC9AClF3m+*X2tucEi=1< zt`hMSw0>QRd@aRVg#f4vnC?Ke?{EbXIXP7#f{pGlb#dLGu`v;p2Ey9~*rl*nX6kw8 z^%aWkf=|i@DU2G{$N3Q@0icr&$`g3R2T>?|{IK$^$mJ_M(Mh;!lq4=r2v1Ek(0o~k zu$`{cR<3Mg#;!H&7CFWla|I^pRcDj~#b0|q9^IJH@8LZwl z?bV2t8Wt*6#)b8ODo2v0=n+4hMxYi`?j}7ioejEuYs*&PD+N#I`RiYEb9kSVNAlW9g?9drqgeDkVfuS(&PI>2<;3FTFV7e$ zoe&0&Ec*{4Aryu4pULyqxefCnXyYtdHvAhG3hBP1(~5Ai@v| zN~kR~&rebNlh(1HA;5nG75}}*dpqwc?-lR&o*}tFZd0>ybz=zaAq@vXD%>L?o_(W# zwLE^dr+jpas^G%j@r%HE6qinx1ZI^UQ~&bk;MpXm+<>r*0*oR>dFFa07~O$J@|M%e z(5)E7tgIOifFFS+)D}0=f$L7LiJP4B4;l#|l6Hw-?ydRncyo?P%4H4)A09;$a~(Uulvv3#q+*59Gn$c^q6n5>@eS! z@TAn;8&|X3b4z1=%1akclJUpy+n`XlysTO@lbd4I-DAgcMsp`5Q#eOx!v^z0-=(0! zb(O#*vh~rlo1EKO<|8IPm3e9yfPwG4cMHiEWA*NYXj410C`d8gAUP>~z0a8K)D3o) z7jp_3;XwYt02Q8(?Yo#RYNKk9-=Xdv3*aa#2z-G>BmvkFxx^GE*B!r+20zPaL8}cw zdvSnE?DmEtQT;+g`}rEI(0jDp0c@&1`5(<_O#A{0jY*o$w_P%;_ty^zEIz}6`w^-( z-O+i&EBr}`6{DT(a-)nG;kpW}QZV~u$c8cV4B4b*nx$pKsoVw^Hrq#=-dS@1&lL?# z(f=A+T{A>W;I}Oao_{~7xt*wawvPMND)#slc2pp<(L~(1ZfmJC-=4MJQS+>@x6J|x z7ax{jk9lN;!A67m*#f`3;ih_a>tw^m%ee$bhnu@zA)f1rL41Y_7lFKh1b;BsrY^(u z=vwcs&-0cuwrt$tk@?oPea~_R(-CT4UlZ5tOXp*@H-`LHv3ng7 z-32tN^*!kPuxuvJ2_&T0OR}#l1BSkplo}F;CuAeAq#lTz6!=^h)(qF9^g%dswjP1L#XhHEo$lT*8^}I&0(9zK`Gg^K zdb(kxtQq*sck9lS*uOV)flBR*%r8h5oyuNFSZI>uO`=u~XT;6YIr%*fw)~QZNMchL z2sdJ&vXDVJXuECGj8)bd_*Z(YZ<;uY6rWl)&2zN2DF}E*jaiiJ3Qe|s5)>ycIgT@n zeiayD6uAI-qXe6AdglELRrKvdneA{}DtR~K_@ubamPcW2%7OCCGqChmtqYRa7!77^ zIl!uAA($23s8L|KY(Zx-amhfEKpGvdVW6t*>%98YeE06_%*VSr{f9W+pnwO1%gO+G zc^k^z&K(bemoLq|fLOsyY*r!@KmlXbHCPvqSt6(Tfjb3`H^6xUY9a`J3J810M+Why z9xQC(m(Iq=Q$~3KiNk?aGEZ1XAA_+rU!BA~5bP*S7QMv>j3s8X6WP%n&jZ*WRjkJN z4*aI#yb|6Wxr1oJFPV z=*q>@GrW6uGm2gCC4)8v53x@b1?GxEsCa~bk{;0w=1nPStnU)Sn<8pWOo!$#7Ejo+ z{dqcBuUTslL)S@WP_!_`WC7T|b!S4X@jL}0K7VN}ykFV`OUK9Hf&K#_(j>1eYBOnN zE>^x^4YQDj3T!i=eV7}d95txOXH!JURG}}p~PLmVx1?Dt^Kug+>=5WdX4622!zsi5pQ=4l6G3Y4IAjZqi{QBge%5@fqFQe(syh?fvQP=h%9e+;_}Mv#&BE4j1-oNhpLs65U*2IMn$wYoG zI+)9vk&mX5Q&Gkn$FxK(az;f&O0;xQnqf4wR~kVsVH(=#qk`FL4T0|o5HPTlOhLxS zF`2@+0t~Omv}xD5(CjZsm$Sc<<%W$iCS!`X$xu!z=Nx!VSiBIo*0m0(=(0w~O?0{= zHOt~5R1O%G_d>`Us7EUNcQz!r&Nvxqx+$>@5>9n`#_aBONNh_KARP0n#shT*LmO_W zt2?=ZA;nbDxh_RL5n2i}pJ-`Vm{^WEt7mssEsanl&5Ii$>I-w4FT$*oPmv=tv9(i|-x{xuom7Bq zMfC|Vjfm*=%L9Got7)yq8pbe)xu~kY&H<{T^}){|N=2F*cn_OvHhTGn7uKavw`_*x zGPh;u@J0z0$|*(MX}va%2TTkRR1supGWXU(n|s&IP) z!ZVzTmdxeN3G+j4KSP#-fuAV+o@3@~i0`B%n;~(+M(*g6hOxn16jw0=SIf3 zf+Bk2j&w|BT|$y3q$BiAjqTDvX%>Bi4bGhc`WAJu-nnqGBjt@!oos*K9AGhSnPy{K z7rC+I9y}0WK1KDva?K>g$`Cq5tC4(uWPDMzD_243Te#2Mtfr9W!%;VkVz6{)%@82k0m)qkHfDY}9%heKff2nzb ztUL_|N)VZg21==M{NUu*|9s?T8jqPM3iS?p-H;WmjCEF3Objx$9M;gb@JbYy8gK{~ zkCj}H_+=4T5p9I)-oI-Z`ce@T(M{QnJ4PZdc2{5;_|MVUI zwB#-)W9i9L2Y)KNcn4sr!l>Saf)>cxx!_RRPK~bm`oBzqvToaHIjKiHN$SZumr$Fs z*2VcN=AWlU6*ass1{E0tZ_s3%t)+fVVL{ppm5fHb-#vA(pcTii_?mZ|cpwneHjkDLb$`hkASU_~gJ!dzO3M z@axV;#6;-?Yl5EN+5`c1?fj9xtR=3Lq}V75$n6%Ydk18tyWS0w{D-T(E;+N=^NQ7m z5~hwkb5BvmND9yq=aAreUH6q610?eQz4_CL$Mw*L#T z5&7i%G=tkfn{BF=W((;QCuXT!F*h5`5m*7^DO(*UV$wH8GhfLM###~>B|miX@)X4o zj$E4KSgHC_!BJpvSJzyu{*ZWK&DMFYft2)Umr=VD_D0F^o48lfm3it;f?$F7giy>W z#)Sh1R~4CaLr;F=ML4guIY!}b=gzpbb?g*#iU#s&7rpSNSjRzleZCH!l_op`-eAsE z`~8*7jaAj3pxjfL<4fGb#>3{NKO0lEq5pE9_tgP-~ewuU!Qb-F!>IRX6 z^aZ?kKySAQ=U+*_Gv7Ez+n%g^%$oC<3LQCImLsvPD9sKg-NNFAhA*Mz5!} zPUtHvH@o4B&;TYYpsssOF{Vh$B7ls`U_}z{cG102f=nN3>p!|1&_50NMC0=rJLQI-6R$|e>jynGdvV2w?53h?lltsJ~oIHWtvO%Z z$!5)V-Oza~P7d)S@uJM=^-G&;pE0@OtWtM^(r3h6MxUgZ1A>mPjs>_z;FHh zyP8LzUhfr$puDQNO^8C+lHP&Nrz#9?1Iq=UOkMpp&FhOHFBEJ&RHS~R6?$4Xx#m?K z%FVgLcU^_iadlsXEv#3c7c%MsnpU|5f>2)83aozIf~~no7(pPDHynEuVwZKM?WImZ_H?v{$N8 z)as0#B90%k$P@DC9owu^?4lH;lsUdnr^RL)ug=s^0<(P6Fl#6N#S3LVCZDVhTx#H@imZ64pS=HReCj8C?akIMsME;z>X zF3N+$8!6Q;1Q%(1ZTlxEne7hl2>c`*E~un^$MZ57$eZa=fw6;=k&aO1Z)#sRs0~Hw zd*M(aGKzJ?1B>eLlyxwY6wx0FYl(=3$x9O;c&!LGVi{f23>Qoa4+%ZIFa(AafVx~2 zZuB+Z-C4z{w~pr}*$Fsj8vBV6Pmnhhe%EvN0bOavRpTTr8`C4@BeCA*r{R$e9t$el zZV9%DZQj#U-!yEmj%g~m8SU22PD9OMs;WIE*2ypLz0UZsrt+yFLt$#qK!PQ&mXTE6 zO9ya_6tpy4V5-{CxK^t{O!7(I=5{hoCh0byoE}S1tT`^Erg*z99lI5vT>mpR8nD#4 z_i&G=wu!gj&roN_hUH0gX}Nv6AeERbvyJ@aPEkcVN@v5?9wpNS*I;%$+*1QPM%EA4Bx@Lrv)u4++!Divi;gIXJyOJTH{L2NHwa;d71Dv@=h4ZHjtsqe7&ENWMT%fCMLIz7JD1Cj|QH z0yOX64LTj6yKnx?ztxOqK6=;W((sEdoX_&mYq!jgzO=*cH_^S4J}927{9) zKs7S4&{j~%c{mUvgWL!(n#EMZqNNaoO>-F`nefeSPmF8ALq>`XbI*^# zJ#_+c5z9c8+@9&XlGlB#xIVPrzkFyq&uQ$VlXU|tS$}{wEv!OUZw`55M|JshFrCQ> zfuP(VqwSvw*)`@l!~G3db*ah2x7jC_Gxred+&4-#ItOWv6%%!+FrEzW%{U+4Sl{Ez zZYI29t7;h=Rztt3R6MpfO7)qfZH1#`{hxBff9gV&Pqr2vOF&`3ek9*hMv;Z=KNHq<)r| zQ}3`)AMJ!?nQBUJedw!nlz*{=UD#@1ZS0cgomQImB?C&~UHz)8b^)Q0Ry)rr-T1Qt z;T)C%>_wdA2R8Gh=7;CGk%I|Jem_HS|Ni@5Bk+fVjfxi8K2ATZDVn2=uzx`N+&xw= zqd3}EH`zeTIvF{Iad~gH2PFDlSWunzr(?ta^#s4U{nmK>fRxr2T^?}#tlqK4CV5$@ zs0q0~9J<~)3Zc{BYW00^zZ}xTgwj%hiJrveI$~n^7UbY#`op5VTnWQ&7i*Urkr<;j z+-7L<@X3d)%CI$I_;Bf_*XAG3lI@dM1*@CMEq6j7gtl;7<~)qtE6Y57xcDILr<$huZ+@mHIF9BDID?*jrHy!8yk2LA3T zHxABF;}mQ9Q69SDZL_pbAHS4VR^DkfJUx+|Vv@oa+4N&aWaxRe#HZa@0?0aVV5L8f z7)I*5Ggf(;FPf(B$Eq^w!BSf5kt55asYH}F;oWKu_#XOh_*~Z%!5vFq7sNFsf^78~ z3NSvmwJWtEsz2;?mFOnZyCCOhAT1$!MXV*vlDjVbutB~fbZU$1f{mvtyL984T^K0w zcT$7Vl`*Y2C(D@}e4{mR$NfKAERM_%%$X&}N@M$pt-N#d0AIQXzK$Lai1D4Bw+*yt z`|cJ~=L9=rJ@s&1eUcb*5?{XS)d5PYuPx@Y>KG~vdg9^NBZ}7cs}TKmg-pjU6*30@ zk1J%p{MFS@^m+sQ>X!s2O-OLp+D47l7pMJu(_`?%9)y*lN!}VfSD0#*y;tre@_%v1 z19vs+I+0!bB!+NI-T?Lyn9xhmMG;|i1-mzjdxn8U#k|<-0Op;F!#lN^+Fi(;M{L%2_3_aJ;oc6wGp%&L1u_eVYjMk z)x7704OLZ*kYfGvphrtRk7c_T26@|H+pl+mV0LkiL#p)-^41wMywV?keS^Qc+yBiQ zZ@u4Dwt18Nm45NMMRQT$6*NrmC}~wF;NPXa#Q4~Z>hw8y z<6Cc(mKAwj(;KCYqi>Wt><<-%+OKSaMl&~)GT$i0?`k0SfNKU46T9zx);^TWM)sOF zk=QlMgBRuq1=qD!k>fe<5^t>#Cfy0jytxFVC}PqINiSYHz*p^~?c-0xcNn&cZHEJb zh28@!KR%^L<2?G^VI#lLFLxq-tb_XHj{awxoRWES{<2tS%YI6~u4|8ywe6n}%7-9u zdYGfJyh(ut{l)d^=@~NiW1XL-E`BYSbY zre^19cnd=^tE;kVQB+he zTPUsZ<`Z`7&AG&$8!ZS8Sc=C;N!^UXFxs372FHOt&vjPU?FXlSL7p;@iW|2Oi%a@b zv3sR3Bb%WwUM=r=yx*<3Jus3Mt_QkG=V^qHXpPOD+S;Yy6?IoIK~hRCHqA)n;z1DV=HfRm^_e(A$o` z-n3&zC%7RK)+P(ne}8t^jUY^SvKgAKei#l~9l}^e^%v(jR{E9(WN{LRaWY2c(E(`! zGarXU6Rj8j@r?i8qx9DHd$TID()rkNbo6zRT|kH6gX~mT{I*k_QB3ucX^>&L?a{nq z9;qhaWWMg7{-ry%$p%FEIHhttB^rXhBgsmvMhu83G5z;E`WV_ebJmzSv2hYdNa?0= z%ZqY(fCXQ{NveWiX`Uncpo=FX4OjP^Nf2H<9oGeR0w>kFMH4b0U2el(m4i{z(;G=9 z^CtY1t6(Z=LLV3H_%QIPzL6g_5CLUIQ-!F?Zm2r6>J$5yD4l_}z*P(_J$Q7l@`&qn z=L6nEuZswLkL@bde^%PSkEE{JICOPQ_n6pVRg*1X1KNK+V(_c?;D1;mNC&H8(v)2B z?b*yb+o(B`PTwjL6JRtWR<~h^T)yQ=*B!tpu@H+MY-%J{U^Fs)Qs_c4(r6Ied$(ZrL1wU=M(jhe-)H}Z~Pbm6AMDd z_=CQrDe7=#kdZhKa8!}8dL1X|6T&ywtz>S3RJ`PTEf|J#uLkB<2^a zZykn6vSd0hQU?aMd=I8df7GJ>XNUi<-G36WTERdZqiEABZewKYyVlp^F# z!zIz5VNHRGbx8riuh=i5@S_?_(VzZ~lK9^Yn#p8PB|dco%OY1|LOh?wbY(XY=O6JydIAy*o2xOhf zbLw5+0Fmot8Iwzux0jFWn1Q_jaNNlqJqlVA||PDw2Q(!<0lo2wt3pF zt^Q}`R<*eTJwr5|@SI;JP=Ty-OL+`R2108n?<(fgLX#xV%Wa_o)yUigdIEAuuzUsQ@0gd@i7dY2Alt!MU|9#LMu2Ap2AK%P0yx50&4}cPz7L;3_(RoJ2q?)gz$)30 zROylU$;=>?>suSDK9c+2 z`{w_yqjZz9?BfT9Ka8KI_pH_R+M(G{{f_mm08~82|4w5NFx9}xs>y>+XmFC}8~$IY zSN|ajo&UkOVgl3?m_*XEqWGdf2=|(E4sV z_+W8=tUKn`c8e?5$RAm#d z1n9?qzdf_n0D^2zkrX<|Q_hA`jgCYu&Zkjbn||R2+CDbBALQV5BOaKjzxa%T12j#y z`==}j;daqWX>S+2{MY9{ft%u>Sr?0QeaO&kjH6CPwuOgsqt(PFy2cWhV$w60$J2J( zEuyhThRzw5ZFe4vgUUCXvB|l+Dud256Qo(}YWgvgS98PB2Zyf^mmlNBT_SjJyZqpN z99J*RvNGmI5l1T(>|FD$LQJ*SV$$47PoJR6^IflNI!!S(rAI__y{|H*#039^sqC$g z>svSE z=dHianeuGERK4UMy;4~bFFi0>|2 zrz}j6OQ035O&jDtL=lIhOgKfVb`PW)2jU=weR>@eO+S$EXNUY>2(<6n>8BxF@RY|r zGyV}(rR1ajOSD*RZ`<}mo!BR@1cIoUh-Vzin7Z%50%J0KHc#{55B3}B(p6@=FsQNJ zqRL}rD0CfeDka+AZrqQO3|dD_tt0}Gpw^tV*rl!RV*AwBwiWZ9FYn~#! z)tF(bRlE2wglAE8!1=19cDH0$8fX%GWUi<0Q7#uU5VdQnai)}34j#+pV)P`{a8;?> zjU(&UC=Y{;IEW3%^QEBj#`rMolMH=3SBFGHX!d&9NK#2^u%P*3X!d+yqut%;d&`#z z2fSiiH@-v*CMUmFao1KfZvC)a=rmexy+nPZw7C{dVrgNRHa81_PU&X;WHTz~0lXb& zwEt-}Mk;-U%S341DQ6vvKVaU+Ql2-A**1M(bGCXg=75KB0dKEG0brqhFR30P zNV1jHL9~NDK47bxqaisH$452tQ*FHZT0N3h`YDrf!R+YIbA@_zk%`ThCjha(sI30~ z6kPqO2Y9FQ$07g6d5@M(B1Yo!<-ni+b?@-M@xLbKH6T)M)OIA zKGpI^0ea>dvCB;hL)Vc<&?|`1@~!95P+?l*bxgW$3@Nthzbi zCzxG7cWZ?%@99mdIejRmb0rBSpIU!6)sZq&ag9b^aHVD4mU1h+OsB3fY|oU*%SKv4 z5+*lZ(ftm^L`lN6iG(ckZHeAq9K?3a`30NZwuRJTOB=g3c1=uYxrTbWh8ns+hs2L| z&woRLrSQvE`oI0%w?92G&HX|pPVcubr}x7vv}RH$u1o8ipRBFS%=H|e_$)rAhw&-uzHm&oDc%76~lM=aZWjt540M=jokNqh73Y#R9@^9m_@4?rTLgD6?$MXU^7n^xLh&-W&SCysKPjHIaOtaypg2n+DMotcTQGsg9^T zRSyAq_4rP&T{TafSoRkV_=n`+zz#9}xHJ%L-Pn_5fyPC|z6xyA94eFg2u0E7x3m|< zj9$mcUYCZ-lQndfUU0a6F@=JAHj@%%X-`NHVlK3v9rJnRgr#etCN1H6!M*D45uP4x zoPG{(HKq-B)(#YoX2PqP+am3+ygb?d45Md#r=G;rzeuQ?9WHtK=P1k6l-D9#P8%Q8 zGFv^Dvizx5TC$0#vXJ8DYztRaohyG~V59#I!Mui`iQK`ddXfgCLSl}+>QN9^Bl^(D zdq2zl`aKNS)6);-m_03F#RZ}y(Zy8Z0bd_Zj9!a|f0bCaV$;6zIwXq(_g{7-F{(Jm zMK6EXSTk`LIRxEjOjM*IuA5YkrBbdpnaq;l_Rx%{8G98kBI*sWUr(6qj?8+L?_OOq z{od{Ve{G1rxvhrz0R(!mm$j}fPe|w6C+ofK_?rj*uip8VR)_gdIcLNJZ690KJJ$`n z)CtnMyC$~i(*nEaqm)e*k7z83shKZT_j#)H@cZA47lx1M6IF>$^`7d{8J}DvzMR4U z{{m?Tyc&ZilujyV$iziVS)}}`=?7Bwlh`xKFqiB-Zv{7Us|M7!97zfx@bLxO(GO{9 zZVaroIxuz5T-~TFD_nl#d6)s57ryVq9fia<9SWqR$nAs@eGzn}K(g zjm9PAc@p6aH+`VZ^Gl9vHyLS^k@AasSNdGN|PY>8O(*HW@uiE%0<+2q>UhW(Cn zhAA;0a5VI<6X3RxkoCX>i@py@>8o5?7H})z_2cl5IU(=5628N3JDRfmK@g{nw#O=DB8nyL2OTrPuuY z+Hw3aE_$%IGp5~YYMn$^kIznMSMDlj0pPs3h&eV9i!e?9+td<#Rh|1~Uj;x4k*r7N z@GV-smpo*{P~=wHsVZktv?vI!ar3UAUfFv}Tu!23-+?9Xr65(en1?VeNftSeRT&O} z4tqY#C^B|q(uD4W6NFdUdjSmCQbe>~0yChTVOZCB3d7)xaA^c*e%;pqjR=v_L&O$}hCHAa z4Y&Q8J_)avWDKTiq$>Ou-MGC^BiIXr342$2wY`1c{msYwt0(?%Jm**8`0b4ocUukf zPOgpd2laR}b_1H1Yh@{r*Y%rz#FCNW65dFjN5Q4i{P2$gdJ6?{V}OIi8Mqy6N)!F% zKb}sdT=FMzn>+13e)wE^ja@I7a5E*O-9=m-&Kr8y0!{R(9^?@p_1;h*JH+C&N3%tq zer(YG9_*{Lo-Xs8uuQmp@CSlRp}ooNZtlxAo75LCcADx%59Y>Y^~KY@kyYvCYuuOA z1|;sg8f;YKoE^AM(U1b6jO$K@l|q0NxS zX0H3(w&!(h7%lm%a>fL!h;_yJA|piSou^I|hMKgwI#aj3Z!ji*vR+_$i~Ct-SF^(6 zD|w&Y>D;mvgAJWzEBfS#&_&YRnseE^zh|f15TuH5C+%I|C^;CWc&KnR0QG%9LW50O z!IGj!bC;r!c`iCD+c1|s5)Q8D(Fy@7AFMa6`mOD5m0>8F1yf(X^&9c~F`~b-&xqPr zMb0oidL`Bbd!tdp*YKiuZ%&AVJiYQ<{1#)KJr19bN)l2cEqPJ;$}|HaAZr1L>eWB_fs3N%a52HlFivsh2b~uRFxfVV;*uUOFyV`Uhpf6&`&Cd~~;jpZ>WW*e^B^T8wq${E)28x|)|F zEG>;Lm^YNmc>~R8yVB@rtCiWR&`t%<*J1V0&G`Lr#Ftf8G1OZCk?~dbw+;?h&T!MU;r13RRAY>QBXHZC<3V#~)+G2Mjv z$2%LKeD}SYwBnu&77=lOhn-~v>$WkYyK&87s-|;>Kte=q7Q^J41;szp1L0jyirJE= ziyLtlx2)bM9cSgI&CRa+x-6Y~FKTVE{qgEo74Zruz$?CH{w1hLy2r(<(FKR+_Y5;B zFD$}+I<%g?&VLcB#+#p(lEX%B;RT&G2DolMv_eP{CkZ zfX+G_Kg6r$cJ}v4tk&WjHWTL>#tbLbG<~5TvRx;u;=LPHv~Mr|aiXjYA93$rF=l@U z!eK6tTbcVUh}RX`{1N(qkY~B;ammI;=d<&<#fn*_JJ2EZV>jI-+@@1dm}lZ2@P*PR zg7Piz-Ou6YJlxI=M{DXzFU2%^o_ z?<5i&*lm8{vd8`<%FT+Nl~dICPW)wd%TiPMX!^U`H_~Y9uztc1tf+Dn_>5s8KBa%m zHnOy&1eeu!C*yqhSz>f@;J5!=eCDmlgU%gH%8v_X&d&cIdv6}jX4=1vn`dU)>2w>T zbg|9QGA&`$Rs^#YZEa7hf~1%Vf{4^EvCT7`sjYZOts$9GREd;CVhht+GHFB_Awi1T zmxv{?Z+-9f+1Ky$J&yPI9`F16z5S2XNJtZE2gJ-Dk^Px^$w|)+K$dI>=mc^&{CY7gd2UC}?8Qy<*p)_&z3!dqI40wes0=3m83_Uyw<{AyVZ9 z^`yZ1a(_PC5KPf6R$CN^Q55G?VFqcdO3kw(E9m8N*InnjLE8L9yWudGq3z04L47r( zRFcvXp$!GXf&fL%r485cPID4LMvU{DdD*Kxj0ey_SIplJje2iaQ;M% z`C66A{;f5y=REo2`lbqaqh0%M=HQ^(SMMeNmMWVpt9KKIa}ZR-|a+5{Kn%0S)q9|3XB?Qz-dH4tkZkxN292D)E`ib4-A z5H34VYDHMV9k7SD#MdL>KGXcyeK$g9n71Af>#3-(#0}0z*GFw|jiT2}G~_glV5#U2 zXe@rYLD1=13|d4^RM)P8J#z8qNz7rLW$Gjy?-jVJq^h;d6QA$pPo=GiIRR2J_=y%J zT5JTFoey<1k--R*DX5v+307Qm+61+CZ7K~C<$!r=Q*KhBAHBR)ns}nqc!mr@bPW1D z{CS)NQGL)aY@XO@MKT9+a5fAhb3iCAiLH=;VS@8A7fA}AN@dHKr_!M&p~NlM`eE*G zZvFC4@5=v+W&ZhP`Rk*Eiafnt3qy45j8&hCD|s_RtV!&949$Bc_LhD}z1#N>q7!c>V0;}iyt`m`}e;3>nr}x z$MRsu9ZmhZil!gyv{TxA{nl@8{MLzue*Q*IK5dj-{Kt?*Y+n0^*hOrvQ%jCXJc(OP z^q2c|;=kp<6*uyL;h$Fx&7CY90z?o(zi>=E9B3$M%^f+8Tg1#+A;8+-_?)ZJ-3oPT zkQmEi#>n-eD$j=ni<=b>``BJkXZ(Dv4idr(>h3HBH0`vM^?X1IO6j!#v$6Z0aJeh# zI&IT>Ov=@Vv#;(ixpYI2FW0_|E<^A*o})o6wG%&D-Ay%aiht0@{1Ki}E%mZy^vfWg z$JSqpOP5buAL{Q6v1bWZh~|}-?;ZNX7rmE68Yxsg zlGx#w+y=nNBXPg(X!MtnE$UOKT%$0`sUb!}rkzu6sjdsjE7m#3eF_q}>-vO4E4;RG zBrzIHC)R#sG1+R*kwVe2VH}c$f7~DhK$@RMdrBTn7yr6rz(&uy8}EAL?gW-p0QuGE z+x+U``*^G1Ep08N=-do|X4kFp7We#V!>T6dTYF-|A>d|bjn0Q-;1h%Ks2x)4F}zP} zu#Ee2hDQ_!*gTBVHHPKqyj)3upU0CnAabDDM*=hrwOg`po;@7XLyGGXkm`f<$F*ba zNgryeopDpuEUZue{i*{*Eg?b1PH+ev6jq>G$f_nd$1))D7zZMcC_u6zoU8wx$4ob; z!lMA_M3?*IuP*ez9{%Rf+ePl>71M?LtuF}khXz5L-s1+bYqHV?(|wA}YYzdr^v8is zl=0H>acM&4!Y{wM1-D&s6RJkPfRE5|e;(F%(&9e$9aK}2zL)*_Zzn#^O3r_WkbD$B z)^4uqBmyGCB(`<9>W^EIYYLy2lMMV>siFaiF@a1tar7Ub->SdeHnad0-wxSx<(NBN zX)d(w#LYMgyG|3O6`%QsUE|K%U4wfj)^%{=N86?GbT6X6<;@t|FLpwZOgyk@#4Aa8 z;>uqBWSSF)_DBi^H&vdI^pjqSmN#b}a!w=JS7q@K&_!?6@lA;l1A`3eVP%@gE9DOf z_1|xwN#Au*ESRZy7k893H&j`H^4IDY`!=CcFL1+j4*n{sS8TB1Xmy3CL*sb9of#Kiq-j%T4QCBlEo0v;ye+l^cZ?ED1&7a;M4+F}F3^+R< z(?hrOirbuEGvZy`jbiV6jKsE@t(}l*qaVqNWzBFR7?Tya`cS!l?#DUHPkZDAqs=t4 zI)^P+`e0JW%7LYfkfJTuH9zIGxw}!rpFWUR=)mfggK<`_@KGy7iqW2fX};9|vr+Q3 zXwb`oPr^GIwhJ**i!avH4LblC&afRo*`Q3d%-oS3q5V_hW}dc-vvT}{?M&i0p!4y* zx0O?G@%dNuZ#r~v9fdXJy0PHVoBL<`GfNG`en@&V;CmX1%aQhsIMFxge%UD-x6W&xFPcNACDs=BY0M>>#=-l z#WhpVOX4Rvl2qFj0e+@}Q$*A>S6K!u{=kyG!$6kHZ6|y>H8Ept~rLKs~?H4vY6MA4Ftl zu`(Dzl#OZWB7OOm;ikFs7)TuzFpv3d((UZ+o~%0M8%<%q{?Xs{gOIkwkUga#&Q49h z8@c1^x)Ld(@WZ)`El~3{PDSO}Uxeu514+SttX}r=%>~l*T1&sTcSmfy8;wf8J4URp zsL7Y2xicEB_y|j|YQN#5X&Rw30pp0=Bzjhg8~}j2ViAM39+}4^2NqDfhoZV=-7?Cm zGA;&5gQ;2FJO4&bX)islr+O<*>+Zb>b5tG&hri`Np zPsit2_9@iCmfJdfHpDY_cL2BbX~uR>^`8c*3&;`m&dELX!S6q4==!t8?tkpIs}AIF z9;6bG$7CT_*WojI=HWn!gjGry!!4T48P4^C70%Rm618;DaH^1FbqdMwU+SMFzwDbR zM6J;PdQl>SM-XSk#EFbKQ^Q}Imy z<$=GwQ~#fWtF83&R4wDh-g-Xots9V9jEvTX?kD(_#A~P11rqY62=ObaVnGvYe%svn zGNr?{A?a(Ceir(I=0Z0Z)zMHY_>Q_2mArPn&FjG;?4gN{VEh(E{3Q^~IP4{3V9E7- z&aFskNkVsN{gYS=-RBjkjTX|rzO6YAx}B+v2E{k7os?<8d)?~Emn$fQ{98m5hK`t| zD4p@iLD`nTR`jBJFFz@#A=5^skA=RdIjZxG1uRmV^5j{_xlT3uhZSt9-9TPWL!S1~ z-1xgQ{pKTyesA%M)pMi{ENiV{g;@}|!L>l|O@IZYxF^iPp>+ASkOC(O_B3tO;>D}2 zY48()1fFD&S|RMt8PiAx#+g$-DE(n1i^$chuvz4l#gx)0KQKpfZ>PIu*v4jAd}0! zi_ye-*1$HnyI(P``s6}IC@^fTN)sO=RW zyv1-fKF?(z_3??aH%mz;zx;3P_wUKK(kt%vMhu`fW9<+DJMKh^zNeTGSo&y!2|(?3 zXXCpgr`+mEv5q7|Bs8j<3uf!)@v}{+WyVu^uiv$O0PcV~3MR#XUyLD;tF2fiInwg2 z$1gHpNpHMO!;VG-rX6#jG-pr(=eMSeQiLmNOT8!(XzVmxavsRbMFnocB~n6@|HaAK zapH32fRH2Js{SaYU{GbA)1+2@Y(9CF0`vB113y~Z*@;0$3DB>eayMhP0L!(R2R`0k zw`2DpY`@Hdoz|$Bg^Cvy)`YqMQ>7(daDCvgq1|Sq83LW9@-kfuHkvjT6SN3VF37BM zCb-5QJic_)pB-V50lX*_v<5^|ZUl(u!DEYiT5Kp|)F{5y3Ds(Y$u8l!ClwGgxp_Fx z7kh=fQn|cS|8T4S-GM)E=;yNjl#l-qWuI_z^S;+!-0b3?Y6JZle;V;T(_`B=TZpAQ zUjlReMIq+jh{gQ<{O>befZ9N956Jcs>*~C-3oB(_2gdv%x>F z4<+YrUaD@;eo5E11aQ5;xM(J({2E8!>nf?#msz087-iHq9Zoo~6S_y!2@}NiROB~_ z>He9XP8p?YB0CaGB`@=WD{878%h7rT-1IN)^oE!S`AK2l4IemspuKB(*CrNRt5~p2 zTSGiMFA;T^gF;?-#ooj0*gK!)t_SBL&$dd&LH?QkU}DlUb!6Z|i8aNyv+35ZU8IC| zXzy@bZ}Sny1FJmoTrYpLF4GgR?#R?TjRaTS=%WgF#`)8~fA24Vk=+0F{atb1dgj<2 zLF)@2OVgh=2ul?;eJx*P#Ng~{1L!@?c+|dZzZAz~jRLku{ z3(HWV2rV1zu6=I2|Hr~XD55tx#yi>cr^coe>&B9DS4j||hyB%K@7N_}*$g#SHD|-% z_~H3_)3q%!T95yQq_o6kkb7+|E`LreQIt-9J{CXm5SSk>11Zd%FR=)mbw;S_cy3Hf z$R-}tEkz*c{%JGQPK{OovbuR08#F*hhCEu2boNexON{n|MGH1wC&w*sZFk3rrzF5` z_dC_HCYMI9AAj0dl+sPEkaOI3EWAudVxRABr!jLZ)x&F3HL=4Niw9>d}_W3|mQfyE}xMIp;KDI%!gn0Z+LBW9iL5EX6+pdN$HdtL2em?;FH4=z*47(MrKf!MpSF%# zgMxY~NC!wQP*BK{+p|GCt~eSwsVFG*g*(VPt%o{BVCyLQu?&A5PVg(f6|?`Fi>*#U zTTn=mY%*bFgHaCPpa9AM)FbqN`L0jyy&1fT%88-^@~w!BSZLHY2R%FU18Id9qG568 z);r^Vogsczkc>)7Vi!g*JqWGn3(sQts{UJ`6K{FQb()+9YHg|1{3!laucd6O(ZZ~C zKaYN3ucHlvoIKi~E&Z7nYJXj3W@_1Y8VJysX%ak`Tkx?Xu-B@I%i?tfBkS<&RtSWS z71#5D^!epHoP18Rd(9oN77YN%(tMV@3gx`y;K%cI3$1m-?dq@WKr;*9FiVCDK}Vwk zS1!Y{_5%dfVFKP(U9m!+Y#pi6&BuOwuYOEe^Fc6J8#s8P%2fKXo=LWn(SC}ol2@y8jBg41Jg1BCmC@^-wE{o zImD)^rAL+ugQy-B<;1hS2}5RLt6Lx#B_*PXl)q;2C4%5c5o^Vz5YWZ}RC~^NY_lE+ z<(%R~hJwGuzo+--KmGso4upeU4h^+#Ww~o*3G)C?Kh?te)8&0)u-^zYCVz$$2I0@# z@V{;-Pm6$384M@~=!yD52h;N1ofp&DQH6j591`t(cRFB;;<9C1mlS7n~c$1-d=SMxl9S}-Nl%;I4YF4a*A)8`oH)C$Xt8F}_F~bQvBVtcEec}A}_b+dFpH?3fZ@X^8j$B`f z;SU>bO4LdS?GF>3`mY4;`rK(ndlR(|0mffw>G<6J2Sm~l$uBFBqI)A>jL1O0F|_Z9 zO>(O<+G+og1n$Fkq9o|L8`ljC6clLMxmrpoDTC&X68qkWdVh+`hC=0^mX%`*ni71Jt~%T|5lN`_wusCmI;mf zjmCA;>TptH$d9wtlj9&1!!PiPv>d_9wQ^i(L30W4feyFcpAaA{e{e7a?$n-FE9fn!Wcd z*Ra)uHsiNR%A`(p&)|bORk=U-y#IOe|7U~C-3|^;tPJ;jIrj~xt@}Gh+XaL8!n}Fd zuf%g-mgriP#sS)Xco*v*r^~PIpf%!hS6Lh@h+73%>-(VY|9XnIZwy`Fje$P#DAMm> z&G=zhh^0ydl4FMA?hVZAAZ?<`bqs5DNF(Mb)x<+6IuVx9LL**>370HwX(Ev25pQIw zS<6WCr-FKkNehPrrUXtEBz#G`O227B(lDQV&*pdO)g$JXic#|yJGCqS0Gb2!cMrl_ z1Uw9282O62Gv3j=XWO6qbLQP}5?FSXUWHqEFCQr2301Mh=ckAl%%;4Bp=e7ZfP!Ly zTX5@lGemF*GMup_TgF8?4X%1aQCbzQxW>5^(YdB(vr;x80D=N@-A+c0bt(^5Bsw-p zZya?Z0}y#cpDzHB1FaNq`QS6hjtoj||Hw>I_JhB?^B~OI6DM=u=P+#UI+pPRLpLm~ z%qJ?KwcIH#ILl+kFgjNywE3Rt>g?nr9q2Iyc6^@DyOH_K#aG0k8)0?Sa9=;-@k`4) zPl&i7vCescQ@)2gE`zIIL4rpZjaJ=ZH~%?7TTV{Ke#{@+4S~Yfqf)nhe6%nc#@OR3 zK!EI#+zB+FV46&;w{NT;N&$#3nIFl0FDExWMfmPum+nCLWzn%~lhsbFLIdP_h!tNg}S$ka_-ZnYRvNI95C`ds|p4N^dh;h zz_RI@Bc}~Vv;tFUj1seTh)ECg-r~q5(~QH2XD~<(wby4w-oi%%i?a+3C@ZJLWZG(9 zB{cedf8meo`G2&`@K?_eIMUqHs_F!QE8TxUc(ex2CzK8V(V~HYxkGUN&1mA`nRdEf zD#An$!?bDzlbgQkcJ%jw`!dgV$Y?&+m=I63Wx!tRA+fTs1t4sStBhx{MW&b`qngBP zRpr!=24B!^ zsGHziVWsl0uv|crJjF}v+yr8*?lmos`~z>Eo4zjB@$QfRKbG`#K#PtIk$eakz(7FY z@DAS=2;xP`6wb$o64+a7Xes}Kt*9D(pPxo~=SVgn1qG|#=L;7(x^}vb6=cKt;8zuW5M(-CGt#-h4{{Z_Omv1@XrXF>S`2?c-GD<5Pf~Zz`#&J8Q>h8^G$Hp z4JNpY4d_!#wZzV#xb3Fegm}Ug_OlrOf`mYF52=nC%Z-^ugk-wr9n8vDug26W)N02o z<*w9)cEqYVU(Litj1xOYkdw~3@kx446BFmzSIeEFhMd_I#dEKBXNJuf0J@sw$tW|O z+s5;y=csB1n`!n2rzM#l8D=?3V?3McK5v2izTqx#Tdv+1z5FZ5cPA~)CSTk^IihbVv%ETd>kno(R zlzG&w<<9I;ExH}4^E9@d-iQYgL2J zBX6U`!ONF>y1x5~(~%Fy9aHvZQ9I!;hn{gd&g^XWWPGvTjUu)VRZmuj&$ry@rGmre zR~r(Q3m@dqJC>r09{UM`WC^Cm64k(h!I^OI&7$E?sPMU*Dxj5TV2d1#+e_uP4s@_O zfHv{NA8>KV;8l%tayn+H*ADO}F4~`nNn(xsiC@zx8+_eccy5gE+ECgXxhSmF4EzKH z6*!Ya_c0^V7)ustz&v|8s_oxOhyB%i=3ftglNhl?$g^{-qU#%9;kpR;mS(59)RVJZjB+Zf_6%{$GFf+n<0b^LGNp zy`1dxY7SCvj_OS-a&n1@@Tz0m9$SXVfuQ7RK$&^~5410vJ4&JFugug}_ zAJ2n-hyTh3*^m|;Xd<93Zowr6(hg@_h+nv82Mj3a)zj~ES_fukM`286AgE6kp8bMg zv&*Lv`WwN&uSe3m?tV)%^c7`WKdVmmuJaw$j%Sip=m1}R`m@0yRSsF` z;G`R`621@GIrB!2-tFd*SCRRvo-CS>kCD} z{BeBOFfJj8nHMfodS>g8|Q><&MU z`6QL=W)$=NfzST={Q=UXQ~?UiQ;vK6)l$6p39Bky*qo>yIEXtN&eR&tvUJSi>XWQL zp3^Xgw&ZaOF(?bHv1o2v*XaZ~x?gPUVHOsg;jMjkh`$KAHCX$)Gj0%3nvrEvPjgsE zmS(B6)U6th>{^y4wa<26Mh~^tlfcc_O~>K~O-PmeM*^Ry2wKO&yt93f-|1bu##Y0P z0t<-0qyL!zQgzDQ?fdZp3WsJAQA(__E$WG@?GQy7+N{qxZWdF<;-|QGk77OQ+*A=& zu{Lm?0peL9L)T0vySBfqgg2`rB1d(t&n>A=8D?LE!j&v3ipeQb?GR2&X8K%dI_vQ> z@=H{W4(uWBM0a=Odf1xQXF_5@^__-t*}aR-sMo8erStPtuyp>*+klM@U&YyIgy-#; z))Ji_fo~dWigGc|m{RD+V@F*Tn&=?o%~J0cQt+T5s<0PjpsLy;queGNU1a`1$q1XG z_GVdRJpzPLOO#YRo&q-0O4laIUO1)9uVs}r7IRYmxu#PRdz&S?|BLRho{{oSG1rX*UnQhDV-SNw^!3_ar7X;{c-DoA>v{}cBK(Qe!r^^=%`rDaahRH zKDukGFFQYTDSX`ozw<`!QJtg9aO{p1?%OnH$D=YxF{nU;FK>Y|*+~%t;=(Cw-nOG6 z=XsvO8T0VvI2(#D6=H-Rg7?<2h=-YB@xCMKggp=>(k1C)4{EE5V?670&9|i&Gmgrp zP%67QqfJHI>0U>9<<#Eru<4fgZpoyq#QzGxrlH6XmqIcg25?P5aZV~zw`|wKhQF8~ zpH{J9X)ck`7%v55@xn_M#mE3Q#n*q%p=YF(!%+WvrXAYCAKpkP!Fm|+>nLDKop!0Q z?5wbi8+=KUA#9I@QTPe^XPj`{;|@C%8+<(9#k?Wi#-CPfGBD@Rs{yZ~Y5Jn39jesd z$N@^oYs-f$-^jI~AM#M07KT%VpR`H+czFw`e`ogk*h(k8d~?oNh>P|@e_&V#yp&KU z*myMyXJb@A_4dU*b|v4Z44r3e&^tmCP$Akc3LfZ5#u%X0HEvCsf1h7QaS6(RQpWBp zrhHMn_po)T2pboT50E-ccEX$nNu}Am*=N;rH7U&JuUWYUZn~UOPek;UVv|KFDVCiV zH9u|Ee9t-bi`Gx`YZlnRLNkQ=BL=RY2eK0X`8RT!xL4Qe8%$9f_Xw+;?EaS%EW=k~ z3v-N?4%h1PWd)kT5B2mzd00_>n!rCo$T|!GLGVVLQ2%m!JMax&;Oe=xJQEe8xoJiy zA76$^WfCv+Y`@BnIHgnba%f;iwX{sxKMGZx6~whRM>w8}ZWXtqT+Jg{@}|`e9T8O) z+Jf%L?}P<8%RZ?tAT-jao(^J_Reez`Vwl60+{}w_#pv2zY3H}tS{C;*)G`JK#SmSO zr!!<{APFuXF1`RH!CQAK7a5|GJ~Y5B)w9Yy;>mC1mjw*+Sc)0$#Vu?noLxC@e9=58 z!a#zLi0YPd>k4$Lyv!SXc+Cu@VX{`1BH!8K)d%nV6y*NQWc&2jKQZgSwm8>z7+CKK ztr5`&-pC0OkfYV}%s-80Yq}U?yI#(`y?iHXzp{{ zdn8UjP489H>H8jLGbgrL(kAvt4ne|Warr1l#!v*)X!ABnHYb~_>(N~;!e|m`u>qz8 z%GU|GgdH8LW)-O*uEDFmP*snv9^MB}V-9hROJC$TWA98?U8UqfThjiJyeT_p7fAHTeLKDjRJNv`B?Dqh>YyHFGgaBoO9pt1Y-c-B08ER-FIx zqS+ucD2(ZqFP7ifsM55bIDRiuDOF_R2Z-tSMFpqmU3HN55^J^&JcnhfV$>55yHxF`l{NoTu0eILR!~p{X+vCgWhwh0*tm)BHOQx;O^0@ zySoNu~)ylL9wAfa`Gl;27eC$f*lF=(>@Ves!uw@^WFPs4y)t zFO!C3)>xXvwbtPbgwvT;HvxYyiw5z#j9RqY_WfApQ0U3@0a36Z)n(cNeavv&F=2p3 zYSj(jS3Ca9E{BE(Sq1+rL3;6#fII2C5K(s_wnA4r*#a@=v2|Nw>5fh@cdUzE>c zhJ`7ps!`QUdwMF5NR&B;-3c}B3=zQRm-{C7sf)s?Z!bIa07-)&snznplij{Trq`>K zCU}{qpN?V%)t1TUb#5i9giW)NkvB{eJo;a+coSqI_punL%Md3J*rOrMO&GtEnGvvE zhb%Q4IJ#7~Fk~2HCN?EXoGWW{Emb@RpZN^lqY?1i3DLjn*!Nw^(DdBbTTR(+NH~#D zj+3^YPgAt?(`dbU+3J}HDyS{<(Jmpw6a0`c&v{nN&-5`l6P{%zIuH9$rPfMuUmN^d~hzMnmZ)SD8fB+7a{IbV9V} zgbm3P_vN@;IdEuGFeu%KF! z`Sp6<2OZ3_Qn~-AGX0m!|F1>|5*9}Wso^Jx&%c}R#Z0iCaLW5%_rn+SQN0<}kv>@d z$1eN>aYJ!gxTDi~8P)N*4_L;N1os<#Df2n6z72@EtK|5g-!8oExgCk9U!6y)!gf{} z1aXZ3FI}`!%D@XBICA!bpZ~?|K0&7CNzOF=T&>Y?uNUzjICP*iw4yGKCacZ}`B z8@w-Y5?J2!D)p}F+qcl=Buty>%zT5(t)=9|Fb(Nhetk>n$B4mBPIECkx8n0kyOaAv z4^(Lly{^7Z_7=jpgv(cY!l2kf8x8YOkBh#nKtLTq0;nTMh&ECHh-H}M7F*gvC&(^k zV9JyonBt{lXrP!t7d~#Z*qweS3kF3YCBkIji z+1M;A8u$tGtOn}XuH|6iZljedb_+ELjeO-&@{Cp()KjWGj2*JWb1zIc#{s;o0XEJb zXj1;TI6YA`{dCTLlIo)Bzd;BRm~?ObzVPKTjc&!B_cz+yp8>4wdjfz|v-B2N{gASN zA1eX6slV9%B+&Etu_aY6Hng}MfK!~V%5-|_1ENg;-cgbJwuj~}Y#s7O4w2sjsw~-@oKKlLiij*1sWml8XxO&?p*^;dM>Fn*a2hkg+$VL2Yo6{vWQLXdNBzs zB+`*1F)>wks$A8|N~YJf)pBhdyUq4GC2JH%8INF}*2&b%I!T&|(t;DtZFQcp1k}4S zHot^-VmR*j8#&brv!l4+Z#7{`1jTAM;)y(~!`p;1xdg`&(Ci=>t2iz6cPxv;q< zi`evO6NxO!4*%(|oeA3P>|(y!kyGRFihhwixK>Q=N!KKtD|Z<5m*JG+u6q>EFWLC4 z^c$3u^)&b}rHS@b8s3&LAV!9xQU!r@?t|PJmIIz_9~5qDE{KX0tDauHjRUNpZI#E^ zs=64>(g5kpQ}n34VMu*+eC1<4G^)#DA@dvm)*mZ;=V!{Q@CW^no%%4&IGP2sp-ERM zmx$-iH-$k)n$J~2F`)tUvg7G$7Vt47wR@<4d^LWirTzqmL5ALDitoTz z8_j52fyE)p-d{g{c8`%$3&cNwuo=f+!<-2f)Ei86{s2-U@aq{>^GuV%k_Nl=5N|f@ z)%CQd=`UBT>Iy8QoaSDN_Nr{J?DSYIgf6*>Tf$f4Fajj4NC7K6LiI$n?JfbKw|1iW0I zxD+-^MEX74k6+JlN zI6fQ6H8AMm4#(1A6{A=VDY?!wrdo6SvE)|%K}qiF%jO?dOlBaCzpJ3TpG6U zu2L2zTXW^(x|WJI#T{bC8Q2l{Xy!E?bAz^*rg^T%BH{o zJKX}jO*!9E2Q?kzqOCZdF>~q8^dM^(Wk7$)h(DXVm_BuC$>MpSnU*N<)OHr75TkG= z!d_+2u*>4|bZ3w#8?LrUQTyVX#9g4LQ22}0W*4mp3u9KNv^eJ(coH5k-pKJI+d4*6 zU%inVOHe5D{$Un7+>F`%k+A%7TsViWV6o`Aw0QxK^94UUPNxU!Vtp9rPIXb#L77E} z6eiNWHtSrpF8EedGkp371^J?ng+RX)=v>tL_0wALUkUfPSH%VmqlgJ?V*kcpL#O!ELW>@)4`}h5oQa8T7o!(0z`Hc z(^RAXuM$R>&L zVsb=rZmP|$)U#GO%8N#T1!n}9>fufDqHaGUFpf~?BC2TG{-Pls+q0IVZJj(qUW7Gu zZJ-#qO1}d~Qp5^)Ee9?=7VL<+> zP}>tKyiSYi#Lyzm%CF4A(uP~7p(7Lps4&|5nwI9n?BCq_?(IJRXGMuazJKZf__;WH z^rwBzlWpGS7IzcH*2YVMNcbNI5pHm=<$Zna+5K+0b6x+DO2pe){>8tK;^*3%JpEra zM19xitba|j7J$cttX`CnUIK)mSV9TTV+R&4;0dc~I_&Ee&ni1FQF<@J3D_4}P0gDj z%dE6(qx=f7-4D>6tE9eJX_u$f)v~7AzI-v%yvkoZZfQa(O}kDxP=e7!R|8+|k0snJ z*{C?;|E!l&BFZ}np4f?zw$8n0U|^wL?B$Mi>ue9Dj#O`Z2U!Np=Lhrbhi}CH zJoKI9GVI)pU!Vfg8LFB4wbKOQ%hq}FcE}QqlWV+&kZ@uMUb*(75Ke32gVeEI!;ZMyr|U!c%(%S1>1ye^(G&?xVw~A>?08-~ zPKXz}MfsCY)?{N{@~Q329gBr{n9((yCWt+s*Su zj+Rv6%$yISF)oEP&70Ak@O%-UF9mOoHzXI&a^mCX5+JqEPNcGqd>vr+e4OVpp>{Ey zZOjX(y4B1+iz;rZXDVQdXPG(r#iCBp&Yh(z!$nu=TBq|<*zq{*WtlHYEEWsrx35JpjPp}w z^4z3b`E)YeXnwtRaKFBF+&U;$Hu@^ZG0JU zIx_(O`wa!$zg*()9E#1Qf*VxCo)MMv@k3812sjL<6;90kknjJ+SzdD8d9kcGU9OF z>LQ&WUGBmZEGVI-_qv z|N3s!?45v!o!E?zJ9SK^3g)}HxQj2o3(+mOxM(??2P)q}m$f5D_yBJ{RN(KAAo$65 zsd#4I8LLrIyx+_;LNV>JLvHwrc*2j`SRGG9wh{bP*cA7Ycy0t`&L#Ny+l8L&-zof5U62b+3&wki#keDGpM5zy!>s8=tH%OzmTpJ?_NrN3Hif!>86`Z64 z71{igG&53^Z>Fa*A{X@H(bQxy(mjtb3MWFnV^eml8Nz9aIoE)L#bJx02wwD8o99Go#oTUf-n1QCL=U zX3Y?>urz&xaUUbCSW?|!(94>jdtMGJ^xzu^KaIFlH$QlfU+`Lb5!vo|_)MGL)%&4) zNQ~wjDt?9;XVJXvnr`=#f9CS)3V&)n?!l_-(Wwb*fM@48dRHyG*j}{UXn87i`_o5^ zm4JFPK*ut5ufOs0Ydvv-;Z6_g>J8&ORD;vvYXFNdt-c%|x1K8ORQdgm5bZe8qCafh z1RxpV%m`|?T`k!NbN^;Jh<{~@9ZwOE&tew3p~0uxPF_h7%eX{+yMv)CK*6WmCuMGx zG?`g8xsq4}7}%v$9JUWtP&U=1F!zvQTNmzimh??ck+d|)Ay-yC^63uYQ!M(go823-+mxP5zn!*NL5M5& zpupR&w!&kM~>Jutus? z=^r2}eY_efM0jB-Qw(pju8mfQA^x$3mDRo2_~X@!`xBja9g1uV!X*58w@&V7$3I^@ z4zkU2e!{#|e`?~KcBQ5B1#IST9UMA3I_3JVC4<(G+!@XZks5>+sfqZofWmhR|T~q zm9>ew%vzA8*&z)i!|3&p`#Zpv>zh)rNCgJ4uInPZ1+0yct-#d^27C-)f-E7m0~=J1lC)ghUJz7ARu1gso+BZhL=Hf=6ZZn8(ClFV zldoe7G@q>iT;W`7Uxu@lNPcTG)3WhPpPEZzQ5~QcaQiANaNg^@yEt}6h%{EuU?VT@ z)ePszO0!;njI8PZ-4+s3kB9oyXJ80dezc;eY$Om-ce(+Ap&Lax>-#0fymGMF#h!ez z$#R^u;5%`2*Afpg5Ir0GC&6$)PE~R$t`)o3rPn={Kh&hxnrOKA(xP7 zaQo$Qd7ct`e#vZULw6QYbenjcn3*}()gecxCwpAyj6qQUEb}ZT zoO5XJ_#v+-fL>Xu{$XZroCuqyr+evXufcd3pv6+{e%R_SGqC@5*i6;WXia@-~TspG{6a*R^AkhdsOXxU4GMCl&uxD zm3ha(38(PL30H%w`|b7CXpY4Z{F8Oo#?85is2vy{e6DF@-wKENo@ zG!go4#GvPzPIS8^19t*fF?5LcXvnyr7i&!T>VwAb|Fq=(r@M3iH18k(|G;bYmAPY_ z{ znTSFS8o|l?#^^WBk)ditH;Ph)zp8`O?iK7s!8B3B#nJCw%x>J&ka_*l>{y?KQ=V~! zNUz2y^k;r<5R!Y#Eeh3o{EZxX@x}BXYexS35&aBoZJ$)jJkyT=?9<&2fd;g5e=Eaw z`>$l!e9-PKi;Q3wVb76T&!Qs6p#ebS!lndiK-12K|9Z~27^J{6uXj#63~Bkc5X41+ z##_CePi+5oNMcaV!u@oKzMK^@Rn88An$w;oIOX96dPYGF%hR1iMZ?=IzMa{%L0%M^ z7KN>F|bBf^{bvUNppxq{z`tY zFt=4#=~*hz(7?1lvJEV8zLT-sk3Oc_i;QfvC@fme%@|Y&&v~+jrwG#52kKT%;#{iceg7Qv!1U*lx9}c#jSp0PJ zjoePrXw^-ClARE8bmi_%>^}zrUH@klR`RMNZ&%Hl+BNvZfOIkjD zDDK<6b+iB!G(~lATGIcCd)G92jCG5;H-TkX6oyGH8|*#JHeugBVH;W=F@!-e>$man zjr7>(G1`eMi9aDVn=V7QyXy(=#kc{x9Hn}g-7#_RoT=~Pu%bl<;XD=&_-GYdQouC4 zvt=Q(Q&7@mrCoHo`S469?gN`f6ECeslf-75i98kO%;)@{s7_YadSCSVYa#iH#eTGx zEwHAQCCg`3?LiWD1`hwh8eHqroGn)$&vDe;Sg$FxWY_eK_-N##DQJiwBOT76c9_uc z6!N#-?I!mdrU_K2X`K1v{R?Ztblc|WZV5BU?fSK~a>^-*!PM##*-8}u+}kg7HOl$_PmD^ z&pz9}P@e&PBlpS5)YIt#no41n3xMSy4vbup&e`^ijaKcDC-bdsAhoYH(nZX*`@30= zUcoMgEcKt}#;f;MK{)?Q#f4op2?w)x{i?)*yjOEG`}amjNFX(ohYCy}wJdr0z8|em z20RsC3XgHoMJ>9c3Ap~W@#@KxObZ`B#g47ov9aNqI9wg2oPC8T@vWX9mjjCax9l&6S&9blQ(ii;r=zk9Od-b?xmHc9pNT>Q)gN(NcPL$ zZCL-CKLS>)P=JP)D$oob!e{^rf)qx>PSQpkG+)|72PY=ot*aT;)+Whll`vtK$(}$` zjw^lGZhdgjH(weC8|g5lLEVVn@6!)Phnh9|;B$7|CV|$Idu;&cSd`f$uD`UpHj`1b zP_S-1Lo{$6X*Du(r%eoFkwGBN>ALk3((%@&xZ!lVqxLkJbNYh){GB!S}?R=)z z)mb1R5nsMoBy3siHADE?=`tMR``d2=?JW8X#VNqi^Sl~BCArzPHa`4Dj$!WF7esO} z+&`fHjE?|P8`}Qr3q@j5q#s=mW}`_`spE7$m2skXP>k8_kF)%`{uwr&-$cnajs(< zv-sx9-j+>@bSg?_Ystf52AGea`EQ~opQw20!Zxta_hknp7)ZISa0Ex8ZwDzKr_)-f zeu~+p}|}dd(Y`5NL~nZ)%^l3chLKffVqz3@DQP%87{qT4n*KT~D8F zk6q#RcMV3i2tpJ~4SSClUGhgR-<`9`2AQfS?>7qZrA6T1sq{|Wd+}1bv^ElNJ1_Sq zgno0{?&qPF7+y~Z2(YKpHKTnh*;H_4wr|p%Ac0>-buR$upUH(M-Y%B24euY=>}YSm z3L|k41fLF=DcdNdjrLrT$jZu%`(8`67KjJzX6XI{eY3Eue#}b)FC_T$Wg%HRvN4yT$*7NvQ*@6;A{Ue8fdz1K$Vuz?gWPZ^zeGk0+ll?QH`PhW_t=?a> z4Co}ntFFw{r^e&`+`w}0;bO6)5Ltv*`{d@>yz$EI*Gg5a@c^jiabumrjRDH}FYs}l{*E6DE%okx>RvDYqdc)JYzgBd+ z?#7X7FIH#9H~O%ijRkDC8XsEmO&XQ@agx@SaR6?o+=W&bbKgD1d{&-@h5TkoS{}E?G3}IY4J>wm0!p&43T1vb6UQ)vKPuU{EAAo}+8dVcHhgOqcH7fPIr*%KVx5RH$ z>4)C(RTqgXA;kot_PWV$lm$5G%~u5GXX_?@$^s)q2;da<`KJc;9j*yRZ^<3M!+k~= zD~DtyVXGr3f`32{JBkGS^Ap)=%d1KKVi6XCFJ}JL>kn#xV!~M~{?`tUKvF9qG9QZs z#rNo=N%?&C#Sh_KT7ahf-B6m&0pIwb{@|WRiEd(|o`LBFpZJdO{mjrRc-f#&IiN!y zHIza1+o;m1`?GKzi^KwNt#@kM7h~|b--m7kMb=ex!+RMr7BqrmA%b{6J2(n83TFG1 z>g3GwE#6BvmuI%#MrJKF0$JRFs#Tvh%OW0jD5OD3HR|&PPWzA`6c+rA?ps&8(B!%` zhK&q-NYsP+DX`#-1H`)h*CM=ilzRcnN>ag6Oq$d%eGYuBX6FCHDMCN z^nFOM_O=Pia%H%nX)oqHxCNla|It7QDr$9bUmHk^JANdW)ZV_)K$7LgjQ`n*Nlc zuPTfwc8?hA8JTsIAFI*O(`h!)^H?Yxaq~ucdItIy_{qa1fL@FTRvTm1XJ$I=bAOv3 zQy*q&wPbAnbs&N4fCgR=;qIQ#qI4k7gNxvyB5}oOQC14ggWVb{_wN=5n$0u>L2@x) zuXS};hbF~-J=^FOvx&|$roSzP1{qqxF2KNl*n#Vwrw@A|gSYWDlV@wSAr{e#Phz`l zq5}u8i;+w9XnV;Qv)Gf>{#Hu`Vr>A!@(~)3 zI{rMg|Aosr&XeTaOYk3t!=kq#PIl&7joJPp2bOXA#t`~>c&+D!&4&f^mCz?~IhMl{ zFV}a!mca>$d$!WQj_g6==}!4AvQQAFXCBsST$DIlpdxU|Blj-2zgh-dUC};%X>{`OT*2 zuI%S_cpE)xBtbD=sSgs{$FF35O#1l2XsMoOF{*sR6urm@K3xOsv7+7fb)b)RlwJzIZoh**UOiW7MbZ$LZHP)mj8rWyns2x|@upQPA z<8c3Vim{oqSjy9A#QA0?7S3*He;K%$>HMhk{xq(0X0nE?q2cn;&?TCevgzk50lQ%=Cl-2|^*5iV|@pzSeJpbA*v&T1GK{37ByzN|} zAYXqfnCk(vhy|7S*$u2;@RZ;ufuQ*(uKNvDk++dv+>Iv*1%o3qYtb#3?%PevqM)hz zo<0s1f<9tJ0=~#Y6e7;qd`4kM%#lEUGS|DH#*lV}=8Ir?PVz2Q0F3@@n-Qqj#6@ zpDgolt$PUeTAP0|l*IzD4DK*<{}tMq-P`D@yLcJuYQ9dy!<}VyOoXaMWV>HnK~G$z z+H~CguG7w#cPFWWNFKu$ali0rbaYo%>D^>Dv!M(8{8rRk*~YAx-Gb0G#x#mLq-e0ozl7HN&&pwq=To9dl&HL)Lj)yf`HGO32 zp*K|YcD*A@_k}jWF4?QXw)IGq#-UQT96DsGbNrOU=wwgH+?ONk^cJZw43M#o?=x89 zy*adu&4Jus=`kC5l1obZayjatytK8c=kN`&c9Yo|2=C^^Z`nT!wNuc74<8^-tur4b zhsvv6d?L{_HyzzZC@m*!rQKS^6fy@#JK^utEF1Kl1?~JW1v@Jser#c7|Elg~iU>7$ zFMf0{#qpimS5k*olH5lY@uIq;h|)QII=O)~SFyHpUmuHXi-N_EUjUN(m+9XyRBF-5u=MOoKAg{)&LG)0HI>vhAkef2gD5E+0et2UW;@=4v<(=y!?m!2-E!F`;ZNzt$4ny(o4ET7+c zdgZ6YCh`5lFGqSC(vRGXdO4OHxmKNI7ff$0GhbU>?xB&7tqB5C<}M0w#q98b_j;N} zM&I=z;JWgu>X+XTg-QYTX5KgdF!}wrcYbD~fpc^=YF1P1#ywkrR5IF2vbyyd7FE4BdFj0n8l`{c`7}Q}YOXA}Od%X-)c@|isfMkEPs2FquAz8=InG>*pQRUq z*B7c<`oxR@cxdSfA;*ntj8YA}9>wvz8>@u_8h$ecRNu!QwqPb63N zT$ux0;UFKC1O!HhtGyQC}`z}1Q>o=6xWi@n}(YX*; z!YbAQ8DzN4S+?R-2&qZ#%Z2ZSn{RJ>&F34l-#c*SqJ&ZLcFQ%S6QUFi&=*O*vw;0p zMTejHgu;JVl|I94NXw&LsT@W;rFTW-Ep8$oft%;<&5`c0CPNwuk(w#f#kp;O>ibom zNuT7id$Yx(Y(#ln+_}RDL2Zz9{b_g|n+BF3EzJV+ zO(K=W1!#Ih>eEk3rm)A3<_)>OuL31$CHbl@7I8^>Upbix&tINn1f4bLO?wM)3;TE! z6Tgvja}wMi)L#Erd;SuxV|RIYH>DfN{!yIZiO%x326-WaZe3o&6CjM9)2e8o98 ziHdC{6Z%}OD12zeb~`Fv#_|Uq!@iIoYdgi%%-kljDqIgW=X+b8CL#|JUK^QvULh-4 zGE$4J$HK}hGtF`CtCS_5Q!n zboz%TsHKnGo=fwhHdpPOkzslMia@*e8@uOk1NFORGtVu14;1PwZ#*jX==QOD3Hl!| z#9Bqi66~!a^i!Ks%~k=knHUVjT#k_fCe8m!P5IZe?-!2oz<)hBjo)rx6ueXG#oP`W z8*2CW5j>8Mw45Sp6Oy<(ORDsC*nsdg#oMa)lIs)?=cCK`srpUq4OZftskRhW>)h7q zX@@J}2CT&4fsu9Xj&pkx;9Pn$WB5ruiE&guu^-TQi%l9(FgyKF>y>R-_KQuMC}nFo zGd1R|%lvxItFib^)3oC=>#q(UMOM$#Z#FVxqhcD35J%gy;IU}%II8OmCuO}y@1+rG zGp_1Gt6j2oe?Ld0-BNH3h5b;04sekZi2ea|#z;MaN`@f3UO zEXas{#sI1VPPd?!Ti*&nvGA{)>w@Ay z6>Tn>sowdtc(TLAyw35R4h@s9WCwHDN!8Oxp42TFj*A|YRqBf}MadJsg+$~!=Hw%SsfQs0=SE_WvT+){KP;SpnSY>XzfKYl%(Xj!RV&HEi4p+ zS>TPlECD?`DUdj-)W6zlQ9D$)FQq^Vc@8g`6m5T(*+Y;#n5%bGw)>Qy$`6>-qaUXxFO;XQJXU+&eMG%4yLQ%F z|EjBtWe~W#c9*cfE7$u}u4rD~RU9F-Y0gV}G~cN;dW~jK!$b!U@t`6yG`KoweV5R- z@5sMXlseu$Ny8}5!?kAt|$)331d0w>Y`_1Av`vpnbAEtb}bYqh9P; zDzE=}|L#2%p4gxQ>K_O59Eawqj!N=7wT(Ztedx0mGtYhIndYNE1^b~`egE$LLj@?W zC{9~|73pY;<|>OR;n8zC7C_)Q&94_2rv6;^m+f0lgd#* zsqIp~NcUXx`YSvf(5J=mcBMnSE87jsK{sKqxLuGzkr zSH%B;EQmt<9^IH=JWCC-Ej`y-h99$oi6c1{3XiH;*t7M<1=Yj$V6N)s_DUp_$_SFo zmd+1MkQ9h0)C><_(Kc4=e%R};LBO2>Ur9s7J+UiT+;&d}xUz8;ZZcxH!kL+XPv{~` zMD4pSjq;%pN-6HEP$Znv+`%{D3+HMs zmv>ZE!(NL-h%-8tG*nz8)Fyq@ZFe%%+*0#DsOKS**oF_Fl-GQZJ$F(KiUM^i;I->tXt$Wgt6anW*4*~l#( zdaf*xq;MXd4?3`9dq?bAQ~7Smfaxhwkb;@nl0;o8WoGYZ54ewesxxmknN$CF8L6 z?Y3TwrS}u_!;kEbqzKy%BZpis9b4oydSYUcE66;*o!F+Y_ue>90=1}w+Xwuv`N1)$ zCW;1P93bc}#odRPm70%Pr2FsGt|sm^Sv({tXU1lRHPXJVF{?K3dGW4`I> zbLlB}2h-ED49G5g_ult^{0qIyYOeqMwxGh;ajb}*d~8&lK^1PxjQ=VK@Keka*XsFE z)9>$FAEjjUoPIt+5X_{@3g^=9=ey)z$L3}|CI#TiaRRqTZ9!c<%vG9$QjwFI}8yi$sv-cZ% zG7XLTE)JprXk1AUQI?EW`e#}05r}!*NDeA=(zIsOzgREd%kzHe`}*2owl9E|`<=h! z_grk_K*$2@#mp?};=r3~A)ZP#+30*^9X%2g(6Z-+T-aeltbF_)TpU>e98~+~Xx~Cg zC8`d1-Pd#3PXLdP$ZkojV)ubJD^6Y?vqQ9Eq^#ItmY=5M+_9dXt5YoJt@9Hj)F%xa zR$(P!+lL#25$U{%C@$d2T*{x{ye@(o4TOvZcz`}Sl#g70JG*%@^HP7`#JDrmH+#?y z&3;|1ml*RC-;=77+XHKg0U8NM`12vlw{rvyHl!Fq9mJ zI~v;a;=bStVCOiIm0VxNxwuOI;N?`-5}8AX%)9RD`4>kry(05Ujq7074DkkUvcnQz zc~qP=h~QiNkzY2Y)y>10$9AX^cMZhwAy0HdN~Vjp#V@wMk0+?H!K)_vI+4>ghcwi{ zv!|s~eY2HgR`lCk2Q2wfGSe=><)!F|wlNiTHBnX5-7bXoR&)Wr2#SO>b@C(QX5AAr zyYcN&QtpEs_qYew-h;!^6`ybZHVVVM@TdPypWmNMRfwxL05U-(G5=vKMPwLcJ6&r< zyV#IX=)>-(U#Iz%wo|VB*bXsPl{3bffsdD~m$DkfLyk*vx8n+V8hz@KelywrZ@Slq z(a#s3BR&q_td&^70>K3vw|42nQhtwraCsxPpeK8CY)(|G7t0x(->i%zh-?W%7-!b) zRpVNodLMYWCp&ddanAl_W2VgVR5k`xzpJdWC#>|sxgIu*QJ_3~fffTTQ~DCk=zSG~ z^Ib(`w-Jk1uT)wJBlR+lPMeeYT3)^EOb`aHd=>Hd?PuV>{zG^C|LENH55N15JO4~g z`vV0=m`e#9@aIA*;vGL+a9*^@ye(_o#!BhcTnO?U7KiaGbP5OGT5H#H4L7ACD@nQ> z`>xOZILHWYZi7w4wlXS^sG0lZUzB>5*2$@}^=InhTFa|Q64Sov(e$Dd(a_nC~@gfTq*a0Qi2* z#*0SV>HLS}c>t)GyqYA!0%G@Ig?S_5E515-IM%26ymF&gRZAZf?~zWonE@oU9@<9Y zvVPfuK^$-qaq&A=X;z->*oG(-bwLPo{fUo*XA5Q>OD=}C$u5sfWcl;s*G?mEHV)cF zBjTYUlUJqJ6UDf@VYj971UERSc_nQ8(5wmI?)GJVGPCZTdPU$PZ&d=(`EgXf*>V3B zhU1>xyFG$GiVM^r^{`IDbQ6eswyWKTh!=9yRI@ExdSTZ9Po`zskR7Dfd5K%6R#HnB zN?9070*O1{lRqXAZeQ!ISx{BC2fL^O8z%e{=NlMvuafT%ucSZ^8-m)E(z)Tj)V_eu zw6#@hfvVb@BzjQt>)C{qM;%kk8*?GD04TMct&8kUb8;|U*O1Sa6Sc$(fIgh^uiUBI zyUf)UL7&w(j_w4~aa7?_YSg zA6{V>HGDggu(*7v$2SRr@&;S0u7ef63e=GMu?O3yKG8;6}TmPhcFl{={7w z3{CYP%&b{pi$i`6iU>ZjQ!0#z$jDhN`@|`U{wL;^8C1z|uulWcQB^(c2Sr?`^RD}~ z0lsk)MZWVH?0jeiw>;L)RS`t8j@XO%GbhpH_w6-DqW09QGC{-yDh!duhXgQ6z&WNi zFYdg*;5X^XuN-5XxeJndMzVhwQN8rRZuHD-PZB~>FYZ^X`_n%@GQaE{r+7DJ<)zoh zRagPyF@uvd9hcgf&B71C1yRBK?r|L)Uz$Bp2cg;7-()`1br`S=Gyj!}eq@g)Y7guo zJ?FN|_k3Q%ioTvJ$WH)t0|R_FTFgS=!&Qq z#abM|aroix6jBN<>lpvn!nrPAm8)bz9}OY>(AT~?IJs~3q6ucH7&pE4A;__&)|#hyh60$AQobh5qx|d|?^xZ(>P@lE|;s-{{_6s~yf+$}pawd3A-0C8?*gPZD z!c{EZ#=_`yZOM9CryV1QI5H?n8L>2k?iJhZonJOwdyByg4u(gC8;x`kCdYY~8&JWo zn(Dsm1M<0|_R}*Pb>F!C;g>=4zqxUGuP>f->3)pdT=4OiDq`LPZmu@|U#&5#`4$%e za6HFi-n#^|Nay)v47x}ENH?8b)8&fJ}Y)lx#=?k?;9<}MH)=nO9WFb6olSH z?Hx|G&EYH_JT@B=G5nqzleR)NFeImbkH82InS*0V((YqZ69*R(P3@K)lPmQ7G-hV0 zT+#B?1g_rd^6Vg&Wcp{>Jh}NNG2A^B1FBIp8bxWCtE)Gn9-Tc?kPuj+0)c+2n%NMG z_MTm9b5Y0kdNt5Xa^~}s*Aq|)$mPT*kD2Tud}wl!VyDzw=l$Y)xp1~HzwxMEskJet zt|K85PzS*kfbemik0l`Uv8UJ@4w`ocmyep+kDQa(iF@cqjKISCiJzDDfjA zbS2}d`q;$ktv2k#lp340Yqn~-|E6~S@9$DNAXdNwEJ>>qSM%0gU0elyzbhIDJ5NvN zv|gArp+o-fsuGz?v5%CYlY&<~G`5MX?lQ8g`cl$X}kIe zx&k0ER(xsST9!|WnO=29MP`x|fhiJ7+#sCKNTcQ7nKmN~6_OeduD>_f0New)7ho10 z*XI8HZT_$Ce~|G^Lg~2DLxW(#RF|o_97g=>1~kSqH=};jF`TE_=W}YhMkKrKF<%KF zaUs>%&9@@P0msrlXpF84S~lBKpXZvEWYpV7CE(Ok;EvZIjP}bnm2j?88ENO?aM?ls zMB`TNoBP92@t-c&imN1yK%RNF*vS74%%>1C<@SNA-+S}iDs z1wq>+cF!2Bv_~)aiw{soHv$!mWh-j)klMfe*YCoAdc^+#3<{xcpp55a5)QLhw|-#ZD(-I+qLS6 zGjmzwB)8wU0)byj7O`1rmD9P-E_@*E0k>c@2f<9lcJ}lOSFvG)W??lve)p_!b}O!M z_e>GhWIDi8B5z|kOA@&d-saUCp;*t-tC4v`HV@arsSs@UidHgI#P;AzqSh)8y%sFa z8dWAK=5r^7)jpH;L{albO8CkJodRG1NjY|&lsDjeDMPdn+c4LqF}tyc3zwEdutDuN zBI2%Z9Qy6M4>Maea8Q!H^?dtDhfnVDQWeHGQ?Q#K-A4Vam>hIY9xz$O7DbQ@Z`s&Y z?xv=Z5XQ?ZGDP{@+`f_vUrQv~92_i>=bst2(!qOjA(&C8tXZIoX9_n;QO|O8Z>*$z z+%eY2k-PQv?XueIBBl*=VgY%k*@D8|e_an|!g;joNMQ@a7+>qtm(@-gkGp<%3cWbR z)lI5p=FZKoMsD=&JPA#5RK({^Y&b6LGR`C5zND|Lpnq<2bVRF{-WN8|;qPf;8-F_Y zpN_MC^2J6w1x6l`R`U^|J&LKUj-;JZA~I>Ppd`a zTm~>{h9(Cv9ZYYdfH?MXN7`Fj@ygmHHBnop<9wtk6fdg)xC>$j1BFx9{*{uk({a04 zU)4?486*n6R*R(ub(XA`w?!>wMUqY?E{b*fjqpT{jaOY{CU<(nara~vHBV^eaqQWX zojD{k5OJlGd`G&rH_9xF84-}kK2@1*t#`APF}EaC3{m^AafycxYYSdmDGf%gw7A8g z&e?g1XFQ>g_dYw8Nn9yT;eRN+#Ye0B0}Ul3#ZN;GS#<+-gu(rcF`mwn0R+%cR9JV! ztZipS1rCp(gv^7)iQicSW@fMt?*^mecB_2n${B*P)EJO!`yHU+wD#LeHB4BV7f_GJ zcHtFBY>KiBRlO_(mf^H?W~F5ZDLw^JUf*TzB(;y48`G-xt8b*@$IhJB!`hp2d}D83 zYEr5I`ef%L;T+x5C>5QYx2feMw>Q-Bvk5fNXFeDhsi>X3_m|K984Ti|3>CFcX8Qa6 z=6tNVx+}V4gXPgXp(PG4U(^j~98^;qAr>AbwxNJR+e!Dv39etg@{g|{O2(aND7Cgy*U%I>}V-9#d~E}9?9_O`8BT&m zY(dc=Td6@$4zcu{bG{FRM!>&qm3kd`A%#<;-Sk}GhN_>TvGlT_g+x-~Vf?fL|hnmtmyk^xX$efBjEeq;|T9GxCEl#o;Ix*P7ie5w)KC zZPnE2SpZbZUkX{STDUV5_kyu?3%GxAYI?bhZ})%*yh z&!zlW@yaI;#I06Tn)BqvvGVDoBb8(7l;*&c5mV&C-lWsHzhC=F_L4)ZJb<+ylk~c} z*M*|fBe|8|f&oUN*>EHxxAuDnkFKKqBm>BKD#uTmr;w80y2+a8@pEHm2)@P#KZ^B| z|0e$hBD@j5f5OKL2misgECZX1i37 zI_D~E<^D)qasPv%^}tnbd(SwvOz-p9{J^p8_Om2PmRC+w@JT>$q)@q7&s zghL#zcO`Y2jCT5e$GjF~=dA#6T4&?5`n)UR=lh7{gUUkEMNLUsBy^F7dsTm3SspjE zdN52EYfvxxLr3&c3tUi1#?X55d<6Qo6B1ZlHYPKYz0mm;6Yx$iR+DTsoG^;h(PMlG>Zdod-YVXyen_M7`ok9Ik7ooeWg=MFMGJ7iGCd`4ne_K4w)m z-xe3`Il5I__xs1?04T<_3-exZ`+W}CxHQf1W+4bJ!cP6=gTDt-{O3=`|Nb}s6JRE4 z#`^C8BbT<1&p{S|%w38iV3j5U=y;Dqw&QQHtoh5ysc$Z-TECt|XRgUsxP`lOxbB`+ zASc!OzdN)1lMW$@9=Ansf&eQ1`_(`_TNU_FDYthReRC#cY7JPH0EsJg6RLjp^bUF? zjZZ%1ZQqCFs`q@^ODX+n1D{7?9f_cHc){vrE`coeLFJ42*%i-Yht+T$)ybI+xDTfj z(4ZjNIlCdJ4fg%fQ2)sNXS0Gj18 znG%7OHvad3EEksAl7!ZH=5GHLD_QUhA zCT3ck*x=)}u0d*eFm)EoiOlwVSpWU{OxY4Alr_`MqzCaF24oC4tQ2!za&0gTGs>hGHSe$yehqPom`$7ic_0iw4ZCy1^=rSed;dYkQG7U#xMiN4~IX$n;=_{?jt0~#rgf&q5ra-7`ZU@HQGE- z_)ZN2x{z2^yIw5at!mquz}%#@2GJ_-4iu8Y59{~;5~KLjCJkb4ZpSzI;qSWoKWtvy z^#5!TM33YiiQ#(_(}@e~XofoFYSH6Poe85?v78f+SF!xe5D>hg;`L1RY*{ou0F)(x z$j0PpX~oeI4bnWLVO?BmOKVXKnwF7ewp?L5Ls9Zs^C5$extGfgN`2?jlh3Zc8n?YH zwja4NhvJ&gJ5jBr$4-?k70=%xwB^Z?ikXyRSz)0t6d#I!Yd55)4+3d_gJ8q&3H$h$ zH!=z(7R66g=O0Pt9<6sg3{p??+3-%NljeRPx;dxaC2`}QhRii~pH((>>sts1Pc*{pNxmRPYP z--F}@x*m;XgvxRDAFbts9a%9r?WQ36qr-rO{d_uU06^(mNB8&NUt|ytE-0XRU)tMm zYAa6<&_j(e@l)M$_|0(p#Nlas z=hrXFs+H4)R(rM~($q8iFf0YEN9F3M3*%f>mHLv zi*54{cl<%9J*qx5**W7_w_Wfu=xG~+3kJbGPl(_FrxGh+vM^0c}CIzeh%3Dg?rZwvBr>Q|tS$ryQ~noZw~uo3N0;`uM!XNQXJx zXGFtDCA4Z8mNL(@}g%g9s%>E?q`f6>#qr*WWj-T;{J8(B=(Q-vDQmtEGaS? zOU)*EnGF>_jDoHptk+pBz_2@3f?}9oCdC=!0{YqkN%93t4UImt`wG3;?SRe>Q;1gN zgcqH0`l7pv%%UG$=?Hy!h>ct=RU{GGjioVeC#l&>J(i2^v(>QTx4Fl6aOv$2gv3eH zFctH&sB@(eksNP6ARkGT-Hp*dxWY-@`(8qfL~nWajU;nmoi2-#)V@_fiz0O~b^lkC zebB28r^TcRjtg@Qb>iR*rJrumC(jFeR)>@Nk&)8H4a$go<3hqZySiY>I?{&PHdDXn zmBv+I5)bs##A6?N{%Ts@|9V0wo|yrPO7hOt-K1`Pmv?IIFZKip`aX|^2Pw`etZrjv z6hsg!qknPGE`GJUS;Q~Nrk`{dueF3d;E(&`!8`)9Wv6v|w;2@PzAIhZaN37H++QWl;ZE!u>M8Xq_xq-4_c|q|!{5zK zxwoc%@MAR>{)I<8zClKSMd%!_=J#lGFI|xbw}%s~I%~_|CpK-OZxcfu;JR&=o24^J z;%5i2UOYO?vPaX{#UAzCA21HMmZZ%~N)F&>AC zde5f4Cwswi=Tx&Dmh{G|uj=|Q#{ns-$KrWu5pKKq>3+qegN`7zZTV=F5`WZG`0x<9 zj_R(I)Naug`k7EmPbH}VfXJL@^SKt2tM-?6J=#-jD}aQlNDCOkS_sCOeeN_r>pBOy z44ZQ}NenNR>xYvMuj6Rh=nhGI+Ar;~&5zP-X8g8vI||LRUIa(>4hvIy~pZIq_Bo0o3w zrd~_^$|h54=YY#sf;tx=Q1WHaWjbEPhS@(IBTbz^c zmMHIbQ!U-zJ@j5Toj|wFwqBZ2>e2l62d5Fuf`r!i)t1DeY1d_O+Lh#vxa@uE$OWiF zZkyY-f8=iDfFkvz4lICT@XuJLpPwcG!@0$Z2wxAK-1Uc% zC!)6a{8{cvqIdDOegvBIqwoOjpD2>#=u+=~L}#9CBgB|8=Y;Ef4#(MbCl5__+F5lL zX22X5VGmV(;oy+pc55?LwWQCm0ABQ#9f%wVOq=jJn;$Q&SK8Sc>lKG6_s540&UhX` zN}5wXm|pbknGn*DWKB;072-R!Uqzt?*jqcQn7_TMol2iH|M906) zFZ9UYPCx7KnP`sR)jdOk8k_Qe>Oa3{Ze6Tb*-ENFqvFNqq~>7Ccr%}HKyt}SqDBGg}T z-^{KS2*liZ39 zyJP3K0pKoI! zNlEUrw^dF2xHRr{hs8SfS#UOoabmNC=X4Ps3@gO56K;=hW{?DI{&^sp5`$OU66-?P zmo$x&_?8$A^Z7sOyK%KHXlRgQy7AfgcKl|k9{*djyWQQC6R}3krJ8m*B#Q_|Yu5GA z$*0+#yPY}!IaJOr)wgr==u8@c_B@HY&l>Krhi+N%f5;QuzW?b`v1bxMyv-RPLF0co zFU4Il8(Uebg@pC^kzDnL*K3#aBuj1mJZMWB`Zzhg`i)B=m@d;8W6c67N(-Y9~ zp1P2;1AX}HTuwtH&&-vc<*Cy+(G(ZE<-4vLuiIuml$@$}>{E>3u0_E>#TSctu{O(j zI6IL7EvsK-f7%5`-p-;2%Z)F~`*qs49&Iu8*0M??a9T?nQL`C}ioZmPONi-`>;hj$ zV;k=GtM&%?pTslbQvKxGWlzu)uX|L|0&s1KakTb&gDVSUUzzI>J6zTPe#|4D3IqrB zh1;<3@J)7l5sC{KmNKfKkBiPN{pvqN(f@}Z{Lh4I&b3ZDGyqTWm%Npw&QRRHB@f#L zr=|oGBy&aYWEOdn{p5rA@BR-vKyAMuBa6&CuDwv-Y`gvn7HA6rHSrAr&jk0!45=uc zW*?ygQ|}ZfeGH#wdjc4&8JC#}8~S=e(XIw>(Tv%mv{bg5>NzgaoG#j2+_wIR90JnW zloms;2=(TV?y}pzMr#x`R{?;xph<=neAb6~*UACm=543YAz9|mCR@=!Os*fby^lQK z$>;5+#83B4_vnL@k0;#U-`2_Lx=q%#>P$|(Hi`c&eKoX)vZ7ANvYKH%<$4f!hYiNwr%6|W;B4N zb-%?=gBTbd$>jm$VPhb12lUhL@q@aO;MUG~8T zsc6=4lZ+>rfB7H>&}T-?jtn-VAh9-D3_A+NiSek8YwKFe#Rmdv&+p}kK)sbuk00B@ zrVMc4dEkL^8Pqm>D9)`go6h8tt=%QXU$@#bDiTMlrYpp>471W~=U0BA{vt3k+dZ=Etd>@-Nr;;* zI7Yt#jk0)yh=Z^lP}4$V^I3qd(s?Y(`-211K-6kq3e^EesOAVAO;!44cJJuUfxvCDk?=G5x=Hn-PhbaFX{Q)#t-k-~)r)$rbMoRb4RHwI37ySs`mri23e z8WM^HLWiAo65VAaX6e$CoyzbgN*AMrY9nKrd$chBrmyMElDi~BLoJ~k}u zK+dMF_ovhA@>l_}8S%CZE5Go1_pJR5OfTRAhO4{gkkgSgf5D~oVl2Lrtpe^fPw;>v$u@Tp9H#6uY!N+_GLOi!y9y_lcwg z!`Az}V?{tji5rg*<5NUy_C;GIg#C-)=^QjPfFw%Y46uR}zXYoYM8nDs>w_lCnwYd9 z!iSza2miX>8vU(^$BLroCH1&f@bb9;U6bSiL%X>1AjFB{HLk0%MceZ-e2`4){0tx( z#_V6T5JM4F9dN3pJI9Q)RKGLEm=(NRIp>Qz6?yZ@;^X3xDx;%$Pd2c6kSOS#cuR7curxBaiA90PE)7&sJ-4{L%yNo@^@4ty|uB zn{F$e4e?`N|839H+jgr!R$Y$L!=|+NyHyW{k}ac*!{8v*11O{4b0akg+jZT%$)2$j z^WZ9~c*`1&laIE5+bo<+E)aXGITiRFfGJDOAor(RC|_-g+RF2gvrti|ZYpre2OULm zo?9cSh|ayL64pV`5jjf6ZT%rA#pj_FJuG94g}v4~-@i)T8w=PU4j`;dU1$+bF)K_E zRL6FMAZ{*dSx-v^n%x?6V!-1*y#y%Ybl#SIes05fI*e%QxbZE4&RB)-9naw&shS=i zdV~>tZ{M;Y3*+$}S-CUF#e+_L~oYlo$emXGu1!Bx@~Q%N^M%gFTYFzPc8E4lStQb)AYUE%FIJYs-p|I>83)bz>dCdTz9VpN=7}Q?4wO%8iLOu zYup8K7RTNM+J{3w@Xq2v^_))zJSsU!rN4|8rs60Q3hzHm9CQ6uJWRGSg<-3oav9W% zjD^{kWqUQ1dzV9Cs9$x(2`@k7gnjka>DJscP5fa0g`eb& z_I98Idwdbg7)C#IUPz~muw>5%t|jrH8Fc5JW4_?8fSsKnOh;B!*{}p-+y0afsCe7R z98cF#OiBS@nEz0CxGYJGIE}SrI`b0HFvZ+0hOUr1z)n@a(ohenK9ZU?Q~j)+c}LDI ztXY14XcTj(&oNN9<>VW{n$;d&8ojFOaU)wr-geVL#Po{tK)4}3a8pU{I0ekzrDqpL ze7fEy-Etif^XOgO_s#l>f7DPjvn>j;n%w=+&fYiDNQvc57Z}WI*z@v;x9c?Nqk=~@ zpK{=FaTqPDz?3Sfhj&+Zd1X#?{#wH{^M|DRc_&8(*x6@Mn9cPouU>TobwNnyF#@*b zO2NYF`f>3s$_%6<;z1OWUggip0Q>$bLp#TU{U7^SD<|YeUtzY!y8#y6Z+n({pZ;Bo zP!KC6c+@+>`c@46A79m0PRkKrG}EIK7#lMz|BOMi1?t2oqHK)%O(x=tt)~`-7GbZV zh94HkLek^&DQVYlPlrd(4g)Ab8Ww!u&rSDtn!MhsPYtUO9d;#j$4s}tI9KjBKLYol zw@$U9H~?iB(TyVAXaC~5(-i8&n7apWwM=oh&~|hJa0H?y_nRd(HB6r{;keQvU13T?9=UQGXF zNicwkSwmcv8Q68uw6vP)uqHYAdrzt7bF`|}U1bSp%^Q*pO-j8)k*(h1! zpGD$2bsZP{0t6HJg_I@=y)^`d^}5`}cIWh7=f+rAd4{IEX|?c?`sn)kyV#pETze|) z#3k0zX|>PBx=(V*G&^d7RCZBay4Z;OA_=cGEQo%`^?bsw^D-MZxdL!xTW<$6T2=14 zZ!cB@Nvea5OrCC~x3qnrNPrPl!tU?g!Q3i8)M+y-WiaZm-LlSpE474;Z5-VR8OsC;19wgda%(5kqxP46Yg27IN?H%%U$_pPTVD%)Sq zAo6reuij6Z=uQKC0V-ObCKn)@knppK*F>kVyJ(4FtPph)XmYRs9Q8*WYK(h2<}hWwT~ zDcUYOAKc(=+8hgG>q|m@;;^ax)7!qKhO-pCYHkVR$2@JA-_u~^>wi-A`Il?G=MNj! z+S=Os!KtPvXWxyY?^H4#{CprnENTr4OK1oS&kKtc45cCBm6?5_xdaWVMOwyf4Eu!d zrL{JupRwhLrC&i6i_aXHps|x3phu6y7+emYqXkKGp1rdk7#y4&W|-5}RS!ND8Y(?FKpAQ@{{Kqz2X~GZ{RvE!8AGjGR4N~O9^w6@+Ub=HCok9)E)ZLghUo46ewFn)k za@jz?PSv+MWxn8X$wCjF=c2&VLLJl-MuJ+f&hIm`)2Dtk?#h$r1^4{)1e1$cUAtU zuE^O)G`a7WiHV@u9978y>tPuzdS_c$$f`oik-|FTs;z(Jw^R9>d%iXN!jr1(|(4SVPJYc z7Kh?B9HR;+n51O9{8D>Eat$sg2wY{DMm(jg_c*{U_hL?L~z)0RQq8t<@vO0#sm@L~U@QtD9v@rt{U zv>*6lgbD?eQj5Qi1^5@1h;l*_DOc1r%WeBqU=T`NIExJgkB^!raXuob{Mv6lfCE8|F-6xrbZj zVSV4>LVyj9B$+)8Iu0cFj~->woO3=0zOSc*iH$7@*VTbeo!v6ks0p#$oeS)*L~&CK zTkm>BkW!0nOImS0BDZgV&oww}3%D1$JG;bzm$UJnN94+=!~2)e`z2xFN#A9)#ls1W z1;B?rhfd0Sq~8i?%-d(>G*=nJhv7WynE(+un6S(f(V&4bE&Uxv67ZP zm_=XksjB9JM3V)CHAINwR#Fn+&9ry7EV^Q4m~TcdC7;0fhWKPQ6y?<0SG>TKmDom_OG13Xq#qvhf`!08c2Ea1Mf&QXiSq!%!!8vOP&# zUsx}v(50^wb5b@ghfeE;Bg|??en%&+AXSW(NkGc)JEoPDtAJ`o91QX4R9?>JCa^1C z4sfky(%fXTOo?U1`1+w|ZoZATxzEKQ+G4x&^(#V@C@&SH0qbLlSKb%%qwsCVX8|O^ zfy7Oks!nutFo%@fd;-A&TtBJ#niWN6)YIt+Cfx_!mU8=!7_l17iX{lBipFCu=G!wYxyqpr}b)Sbur#< z?W4wX5sYt3T2wcZvPzcC`dz1+4sNQc|5Z-t4Bw9k_b`pdcYnccke#Eg|8>IPNmt8p zIz5_Ao2FJ~>DSLaTlA~YwLVD5Y(Sn^s8RDcKD8}=WMOpZ5iqQJlCSx_4y@fmnXrs_d~J4c>Od z(q{0fL{%+Tv+{4X^8d46{MWtS`*ydTltRPavD? zZZ&)0BYVTC0jvINV&i=|J$1N(D~Fs}!uF8WU-)Jfqz4Ogs}1O$pv4YZBYUdO4TQ)v zroPhMVqS+wvP-vY<` z$ zw0|$v<0aL@i)a+N!*{wgxfllTOD$jgo0)pifRm~7$dw2H@3L(+Ii%w1WJiv!U^r{& z!F#0-voRY6Yf2BCCk>*Gm>Fj6eZfolReHn8iLx}0+2I+u%~d=?*=OCL)!Mg6Kc zD^$s7y;|^CO-g-Ww^f;0^OnD>Xf4q<@JZOUVea*MLewq&sEKYzshZ`Ba35BXv(^z; zYt5zX`$@~;;aSi6Cj15Y6! zA{~@$(kxa6;<@PwLbGFjNU&BcqfmBU#^c}6pA_zeMZ)vXj!eoNAN_WWJMV8xjyFFITz?miVc7v~65MLJbe ztscG0foLp1i{aIWr4>H&u6oGCAEagTNIQ}7*odi>CvOfEfJXdl4J?FwCv zl27jBDj>zI(`z*biDLHMBwDSBJLlJpmXdCEc*~UZe9hnrP>W)<&@I~28dS@Y)v|bv zkCu$K$Vv`#>5Mw-^HLaEhKUd!o8Pif9>$w;{_{Hx4z{ANzvCn518VOI)~CK z;k77b{kc=GoiE@~25%A-X|b}Ao!J%&JzWjR-+sN7AJ0RF8)*;~J#v+1ok?L=mSOdK zHtmt)S5T_9+&YPse1U^8@Hz`qs_MXh-Az7W} zOxp38h|+9xnS`TcO`-sxr#xp9I^O((L=E3O-?n{y|DxeUI^tDt4At_z@ZWy8W|dD& zjc4F1Gk1i>kB7pUv?9O!-g1)q9f||TE7C1@DBtY{utj{Hn(}gc_WQ~z-JN3*YP(;B zb?=l$R7f7mWwa}&KE&rf^B_3p0iZoesbBLk=fuy>vP?KG-{g#MTY;Q&q}6GPZ$Z=c zpgE4*)-h!nn+w|5GExsloRXhKQhjI?WKPe$$wn$S&!jyl06Jrk?)On;$1OrpU{W26 zg$ffnXj}!XcJUiZZ=P&|Ch}{r=pgPiZmVGY^X~CYW4QT6g0JGsBX+@etYzQ zYG{Er+B*N`qPMPe|H>_@q4(P;MB*)!b&4|0dBX~F@XO-e@1&5LGqDqVd`gt#?eNb; zWN0Av%(J!ne8zcgoG47#0S!%EW8`(}Wy>Z?Nh=ctn@6GPu{pKYoICWDw|{}^ZS^H3 zte!U)%&8SJzL8p$N&?o00U7LUlx$S*FDc5t&mm>p`-6R0IiaNRxU&wmuY$*(IU?i< z0>!ujDcGrdlw`G*5G|XJha$qi0Xx1OvCUqbFxmP_)x+)U!wLu`jg@R2g01}*>;W^44qXt54ZxxcSjUWQ3}%-EB6CrYbfp=NRdFR#fE98Nv*(r8uT zW%QKjc*I%|ej>UYnbU{e&prjX2}{Er&UuSQ(`>AMeOMh0Fl+!Jv^#JA7KD5fG~Qev z-Ai(^#9YIWJc(_|>ZGt-Fm&Im$GW^~&pps#j(8q)Frl z_MhBBb!S?7#`8<^2<~PB(7iuOiv6^pekWVvtJ7YQVm=%8Q#ocJgco@Lu^?_qxyIhz z=k2Iwg!hXW7_H_*8OfE}LCy6`oPp9C(*yHMyY_oM@m^KdMvtBK?I!cx%6iwwjx1wO zzuCNvugwZ(F0MRYQSqO+NSvWtT4K*dGsxZ?ZhWF#ZGCiE5fRKiVe|A zjH{4KFX;oB9(rb zy~E4pF;CLk87v`RI+*idtrdc^?Mal|G0V?HDR=NLh>C86X#|S&ghCLf?B8r|D@~UL z%Gj`1lBPHxp&z3##3x;uxe^%+eiqnT{8b*M%E>}on@@6^V0}fJpO_7$8lB(NKSbmv zBlz<)=o4PexYwfR2vu$cOZCx~+5KFitnd-*%ye5%)KH4-DDh#H)m@PrK4&#G%MzW{ zrs{!Vq1b}Xvu}Dvnqz|e$p;gnzy4Frri3vwjOZSE zUfo92tQ#P3BK>~qa-Z3YHa_g0_xUzIdM$6VaM={F2ugo!=b~3hHdUK!pmj9J&3;Bk zrRsjARJ}5_dv<6WPD&#J_>;8tO?sd%?c2X^YO`Q(wlR2<1WS}l*ugoMJQX6$g|h#< zpSgPS`na2H=9ZW)O<|^b;;jy(g7uST)Mgvu+5-r=nu|Tr{Yv=gfBcvid%FR zngi zzS*@CGqabNHN#0%AFBwuP=ev@Keg&YSR!))hL0nI1?iWEbG zUa^hbyqj^LmV?Uj$);1>yzus8R{7&wFN!w{$Vgpg`2noTd!9-u&ezx}D!yPUqN2Rt zzUf&l&D9^|J5@c%s&84JoC{oJZ~6mMqtW>2sGB^ai*J(B^(rX1+zQFF>-)XNsa?kK_3i3j_Hq^fr^4%7@wT+@o*~!92(Dh8WB|>o0 zE7d}h-`JaTs-=pRwwmIUo!kmskB7POzA17i(4nUa^xU*Li*bt(k7$zcrx$Tw9VnuB zBRXeVp@0RGH{1gc(dze86~;*byL9AW9^BGU3}{LJRmKH;MmF`6^lKk2LXNfMW{=(jWQ%=Nd}rl@8dXsN}3k6B&g%{v0K|oFV^Jh z^TKifV4ulJd5#fjK+8zldPrfB0w9iI5tG^3oM&tC&V z^o4@|xlX+&HDpj$t56n1;97Q0zfr7A%zv=YbZShPv=%g8(F#cY8pJch^L;_yUrbaJ zF)*r^K7LjwN*VmQG?A2ZdG1dk@8H^9%<|?4{ZuFY5NczKbzDlrgt=l)W<@}cO#=lM zN@$t)YE!5_ZQ#=wsLq%Tj-?+N3sh}#r!+%!eX|T)w-Yvx?gMAK$BG8a{b)`anX3YG zY|$(OY^zYh`c~x$v`Z}W;mjPiQ3YttV%8(E$v><$cR|?xJKl8R+YlABwG<()G+Tl%|!G5{P$DN%obMt<%>VE^6xC!hLhQq_de-@`S{$h4|n#!F@~bPo&lO z=A>yd(vI0!$NY)J7k`!%%kOtMAN7#7xg)502msSZ;yk05rPVix%oM3eoKQ$xn3W+J zsoM<+e ztPCldo(NYP=g=+1<{bgxB>5o6w2z|`p*()1G3D?NwVMj@WsQ9oG&ThqW%zkgJnx{v z8iy(f-uA7uaAajE3~19H=qXjy>-^P*b4U$<<0_-ybW5uqP~N%fvkb2fcg<6#saB$E z^;0XR)t;oU=x$PGIcnjTUfh{HdllF1M{(PZ`+mL0c#F!KVV+qnI~&Z7?B+~DADxoZ zWO3Lt$%Oc))U?)9YeRVRfQmL)xr4dvT90Szne!x4{n?P&)kYAuX=pvZAA^fH00%Lj z;Q>?6HbiNZfG0brN)cDCH@`x5Rp45Gn7kKmm8rDk0KqXYn{`e~z5swH`9GwP^=ibJ zN188)E7*e-N{6}M2_jYvEz!z|?U+m-=*=;OOj6wgw^>J;_C1@oj>l|cQ+MuBdWKVz zE!P2M@ULHToW+1(=Q4&7j4<+yuU#$T1`b%uN=ibEYJiajUM=DSbu3*-dtRm++$`Fm zeal0VQx8ZX!_7iUX>y>k_3|MMyEVDf_>Fw^$j*J3V32O3r>BA#mK>D*TtWonX0|2V zNT;JRXoTUxWm}Tfku(?~2T+RuPQ+(UeLSF`1t{Ht6K#b!l9O8l>#7j;5?qcEeIMBa z%wsX$>FYbYuLYHrgJDutV@A4RlLFqtvxW5+C%T2>e^?Zh)9&dX&cd-#Plz6`IL@Sc z>rt00h%3Ygorq7TguLE--SK92gizsld5n3n62mh8?)wgo!6{<+g;Zo#TQZC%=2tJ= zxYS^SH&2zJY=$0>XjU7WU{}l3SE>`r+(;I#2L_mj0s&!#Knof8vmgIC(E1;j|No}O zf0`QS+Q@{FHvPN;O}v_-qaLu)s!#B|$UWiOy6|4Z`L<7GbghF zYrKPS#|)Rx4$LitN3Tc8L&{Q62diGIbXRXrG4JG@$}drmVmB8O3*`&be#^0vsY*&s zG^z86(fn}mlCHqBnZoPo;tP0Oohp6uTOlIGD3B0mb(C&=jkjdVa^Z>%%^ULNDS2lVNWL01?alR?MCrb2S*OgzZMx&V zt$~ayGWZF<#t{=AkZ0-r<#-`Dso55_Mf3u9a>)7nlA#lwn03Hr@2zGXzrOfZcC;%B^7 zq*1HoRtdz?&}^ihHdSzMRsP`mt9GaN*!wQKqV?I&L*pVoc~V_UiR9xuju%5)%;i%T^00}h305R+-WeI|8$g;R z9wM2=^v&Kk3zMKbdpDjmuD3m2QDmZfhN^dJoC7f!>j&r;9a-XP@{%Ss9sx+=dkycr zNnK(p$I{mv(qFoK)5gNX0rmQ9z2EkTse>!ME$akZZo>Fhcm7MSi<8+X^28h>;N@?$%Ue7|l6}jBJ^$z=bTo|I-JPl3V4dQe=tfwwv z@TfnpGm{=1P;e^CV9F+In^~^;$x~hf2xgbfv@7?zB1l;FP-sU?wXxBF>?`A91*_7! zH3fBHex`e)t?{;NLGtqIO-{2hwdroFXNr8V>sC3E#4mWLzB)?!qqqUYMmtapJ!9*^ zbqn|Eli>)1g+bO>{Ks=CJo9 z8=){`2SM_mkXI0TM1BQr094}qMC)LHw~q7xiFxUk#TbKJzMv^oZ++N&Zw9EyL}GK z%1EloWo7HM(vAqqSknYpEG7XZtzs7_>_zpKIb1S7 zSa8g3e@AD}x4YHnnEGr{Od4763}>%9T}kQxZY7pKCV6`@$4i%BELE?|79#xB&y}{1 z6S8uvQ@+fqon}(7(EB`~Jn&Em^r{wpxw-$}bo2h>g?Ta=zc{x5$R_-~X3(6xASBzy ztqjtKmP1W9l{Dt?Tbg5$By{As?H*^n!SDYu-2eW9 zi$&ll2!Kf_&eZ*LwhmxCQKzNJ7vJ$mZQZ))Lc)i?ST(G9ZK&%A$okfqn-ln>V%-^b z|-R!+I+5M1wHCU@G!O8%w zZ9K{)T+UD^D0WCA>E(;ayWsOMe zNq-|V{1mE1N}6ujeMXc0)X(Eb(EQ$(BNxE(_kQTd0b^}Ke<-LGdR(Y_H=vcvbZIHfVILXg8 z=w3cMSsS^UQ`x<6&J)}8-}%(jZs}Gg?YBMs36oUMhRS}K;%4Xs#FQ;(!Ygq1oe*Ov z^m8z!=}W`ngl^I~C2RJsYSeih2y;}DRyW@xbZu>GYoK2=IOzCF*Mmd;!hFLxx4;2i zHBXdiNQMKd0TUw!RQTyyayj_7}fkhc0#cB>Ferx}Aa9x7C zlY{KmuZ5391`EYb+|=*3y{RAza_rMpbvZLWg)!kt#2h(yQ*#vUQbs%*pYrpVujqVY zV0HYI$gor$3(3F+meT2nn^K8s2VmJ%fg@dMYnIvkvfd#bgMs9wC)}>B)1akaJW~5c zOTJR|3ENo~@H)f+*udjlb%8^R588j*wHbz&%CXW#mECq zsyrrJ$D>knJmdSLQe-gT*a7I|T1;T#=27$X#6Vy$-b4!#7~lI8Fn$1`rG-%wb4+UB z@>pE-^TYX0{hrj-NB8#zfhzY+(h$bv& zoJA3!Ide9Xan>Kb#*We`2_&25Ji5gc#C^Ye7?=LyT3oK_dC>E(y@iKkGoW7c>!{tFr(<4^{ z0c#p-n7YFB90wV5Mbxd;b-K5{W2pVFBJ82Gq)eZ{QJ_iCAvMkM#NXQuLRm8R-bDaW z%tP7Kn)K#sC!y0s^@WoM&7)@KG`^x*mQnsShn?6=OD0ynG%*xf?_E+F9e>f+0cGt! zHFJE_H7kX*cO!nPJL;0POuI%n$jD07Yl1V&(N|>G0Q11?h)46Szr2|DUh6ljAO;Q9e0S1sa8(rhNm(*g`}8(fJtwHZY!$N-wFFd7J{$i*O z1r&0FgE6$T1KZbEIYG+>Ym`_N`M(N5ZueULGFi!wNDSh&(|v4%nekoc6}lOct*Z{Ovm8#W#VDmBm_3F<*{tQbKP166uI}N%XZ=TN%_nBF2r<485B! zm&;Q4d6^fzi};Dtb5;aXhlgDr*TU=`)_H|{lm7hCvw!|8AI3a*m<(Cs9>bZIHiZ=s z6EJ$z6Y~B<=TEwS{^v3N?Xq!>HK2YS z;^y3~Z>bhHr0Z985W=qs&9&#=nhw_pA1=KeE~j(__O@tMeRXkKTGE~=h>C!`wn&c+ zxH&yp!iK^e;tYL&60+O7}oG@iWr0yw!DStf}L(?EqQ7jCs#MDjtS!N(oxzYe7) zcWS!Vdt z$(pV4_5t@vmujy;y0xvoh&cdnhF#HUMQvqt`yQZ-AH~-=avlV1>I;^4KVGes;6^fb zES}_NtsMlTmP0fE%^Rm{ggD~V>Y`KLi)Xq=A>5;%vr!R3|H8s~H*<4cxg<4Rr?fX6 z2>^*l(`_cL=4D2T#7$Vbsd5|NGK$-h%?#Y?o;-YJ*Ze}@2B-_9t~%gcjBT~(^7KDt zh|j9P>6g-O0|8aHJi(6;Ism+3Lnq&5?W6}0j9fxf$gzV?G0UxeJa*7{!OnOi4YiQ& zzQvm=%+K>a_mA8dSJXp`i#@d6C1(grM@@#wOJzdC^>JA95*VPEr|M>L0g)U za_FVc*-nsoNBm-xxzS=jP_4|@bwOq`)X&SYWHWx3|I$Tnf9H6??VTI;WK1w5?>Q&a z@`^A!uVuAL8hIOBZ=P+WOQej~3n(uvI$i8vr>M)xiM4%foL4V@220A)L@U&Rud1}M-+CMdWW&8 zb0h5!O{IUEnsVe=x4H30F`r@<{JIuu1Hqh2-yIX&nTVq6q{UK8vYI(r^d=~ulY~^_Tm5c8?Pu8`#@;}U0innr7scxBwOGXIUTO6UQH`p z{(NyC3)}6bH2!dTp(|xZgPg@##jUwExA~{uGIF zZc0swy6}O0MvYO6fLALbi;?FC}TW{T?45liO!FYp-X?B3ECm2TLA@Q~`Sj z$q{d&ehHB$NY!iBNkiJBh;sehxriRgnUqrF>WTxB4omLfrK=ka`WZ_KnQ|M0K>CMJYwiKG`N!(e@8lHqYn}s!3S@f*Lqbi_^Odi9>RpvJ9SO z3X~`<>$%GMdAD%>>>v6a8q#CKx094SIA-NOF>N<{2#^18!g;qj`5IloiGH@G_k(6& z;H!n%@-pk`t_<;+WQN7s_4kC1k(3AN-%WM2Fl--g`S;>T$sWjCGpd^%N5SDg00Hpv z^eeE^mGyG525?4|9Hjvko#uc=Cp6;9Xjb<(U?XH90B!78(d)@%~+Xq{~@0^gf#|4Wzkru&}-2I^yQ z$7|=EQF8O&_EkfO3XcGL-)nER_b%N<1XcEKIM*>7>6Y)s z_-%-i20IMPSEs%Ymv{MA?&eK$FKh zS{5lUGI^P!>*AeT{XUMh7V&`47S`vh2%BUh@nlevP3aO{ab*tG`&OC!(vOeGWzZGTw%lJ_p zUaL9W0*O+u@Ce9Wv|rCPqNTdV9cDO*veJeDV8zowc|c`-{`GulOj=TrLe9CCHgavC zPt#mwSyz8*lg>hXs7R?UHYt;Z^j6o!U2`gNZk%R5r@^8R4wNl{#~&Q%>|T(CXnd#1 zP6gF*^^0ek3+#a)SFDPs`)}?TStMm%ebKv4adkqr<=zr9dqVcN;-1$LXVaHvm>{Cp z%T|4$!87$XG&BPhAdGoER^pvx)RsCcSac?K+eIC%m7Ie!L^?9pJ`~+%C}2BWN&aA* zA-L9T9VHtqoKL=iJ(Yf;^fdBSljo(T8!Oe`C7-ZXI)Q0QQ@?yU)N2de;1wO~&R9pD zRyTUlvwrqtC0R`}9*|kUvm+`KxdLUOlheg5Lzc1i%k%aLzwLRY(#?TJs(+beCUN<5 z$c1`nZAtD5Y?u`AaF8|;K?vZ7{2}vC|Ixeff3>&z-_}d`)adc)%uSOHEEh>4*!a zc|}G$4J~8#Nw@PlZdH$>w5u~%WOw4COV`aEV+uvUG{l|I6I zij$uzKG|%qBw|B)UsZVeo7O+(Jx#TWSY^QjM8iS3igq?a?$|9$(`!hu?t_yPWC~%V zAgu2mUS`3vqyN+&&Ub~#$D#(6Sd3F@u!F_}uTA50^h~yl8+cJb^{o&$d*iJ>xTQJK zFm}4m_lbK?L^nM@AoQVyfbAF*rsPtGuh|y-f_QFiFH=lq#wFQJFKZQU-;9u_WJg5pNzPj~x%|PSvSP^r6H~bMl%;6uQ|JM}G!Cv6M`(}~!m00v@<^EQD zWNF@QUbv~mUly49!1k~)(nkzJGpc2b~a_JV4-lpB$%%xr!`8E-L);6I<;8ETh$q~T^vd!L3wXke& zV4GLqr(U(=?A?t2KO{UEUdi7+AsWp^oC9Z$85z@P`v>3%`JpDm87ZybqR zJG3Z9*$H`b(L(*CO_3Gb)#Or}=ln~(E^Vi}`mPd3^?9Thl^65a zpRt9s^{QahDHstpBm8R%hTN9)p|vE#++PRltIMWnl zvBHN)_<(SuA2K3TNjfJMb=W0rM4&9OeQz(#SX?31A#(D&?_Zy6fFa_}b!z%>&dvIw z=9E#S!s7mbe^z){6Sny}Y2QvWq6@JAx&T{pQH<`o|F-95t-%g&+jeVZ#j$y9{ny|2 zShl9_!9f4`Z(mMEsfkCW2H zN+oFPEJ9tH%zZKPl`!pQq?yX`v=4>XA{wOl2c*bx<9t^GcxMho$w$VhCy=2O^hfv- z!!MNHj-seQET2I1?L0=e(m`*xHp5ahT7lS%j{TM^5{EX!s@@#*HK7Hh_!nkc@FrlV zZD=A(;4SZ_t}YL@E_k)xAL}OXJtE3K8OwodGB%@~f#%h?iPg;oCnU){rEX(*bcknT zQ=b}^I)#kcXd7m0O_bo@yUZa82)jygwVy1yrzNyweS@Lf1&+M7yZPn4e8O5#y3Sqj zY*z*!JoNM7v_Qic^c&golxXb>2J5R(Fworgl;*z{MJ4;H#()|!tao<2o`llvX+5jx zeQ-f*YTR`En^OnQv|w3_T?E|&v4Xi#-kd1>r^oCL*qUWu_JcF1t%eM2Epg}v%M<4>h+uT)JYq?c6dY>%qTA~aB zF>4Hkl0vfq5>vlzN4FP z=?-1+I8ija5PI!dSwe(AK%v(El7TH6hn;b|)3m){v2ma5^C6dof<#0*!%8vJ+we?q zDfNhg&K>Dtzb^hdpXe3|T+{bRSRG&_nC1dIIon=_v&7=R<3cJ7O zZjfq{3)ggju8K_Yx4ZTM*`(Kb%t|}>eTK4C7sRGaFb7KaCyyJV@+i1b4)@h_V1Ayu z=vQ~)+rD8?D+fcR?}9kcAaU)MInY)<9HQ^{m){e*wAN&BGdH__OtWKXK67Dm0%FYR zEv*LnzgVo{@_a(PvKWy$@Ll!lq+t?}(Uk_i>i{x3lixGCl*~;b8jayu6(Kp@Il=S_-eMJ9*jRzFt&x?6S6BnIhRu?Vbn(aNho+BTHlqIA9_-uSK6lMKpmT*sd?i#*D&7~Wk>g_V%_NR5r z|6iZbe{jzK=XWtadRE#E&kpoEiQzx2!<;#=?a;AF;KYdSD)6GlYZi(Zpt2w2rWrHo zdfO+7c?nt`iK?kC#5Y#-e%D!*Uq_=uZ0Ha`ZNDVHwKea#Y5sG`R>E8RsDXp=WVX?% zY2Kof->+TwE#~;E>LqmlacIW$K8YzdO@oOk62+#;AcTym5-o`f z&4>X^6^NK7V-PY35KRzFk+Bdm2qc6Mn2rEZ1p);4+s>THoO|y%=Q+(}1*Z48ioI_;#w;ICnb&h^F%`HL5jdk2oYn&X^OphgT*v>g-)MzTvzZGyl% zg`%fOlW%-g0VkwqyIb73CE5aqxPM!3KM+OgwFi~xgWw|szz-x%YV1GfR3xd?aR}D{ zd3Ejq`on1l5h}Jdr(k)uaq}4c`q4;C?Q~6BY)<1jwW`|;~jPG@^>X%q={7kZJA`2puTye(`$UTFpdsO?_f`FEmOx&c*krw^LXh1g+(=yj+ zKJbE^VTB)$G`VoQ*it6UsRSB6iNq79RWBdsYCLA_(P!cyrsZ!&5?mDML*V39{0J7H zhe?LXTc(r04cRE>ppTH0te_<@$u8&+wg%Y>)+>DE!XkXLxmIoQ1G%_WveP?f$u;8m z(jLg-WwHNE!_H;DeuYP_u%!yUL+fUJQ`3iA3~y*5nVE@z={9=QQ1o!_ylY>@LCTi^ zCC3%H0>3AT0p17;bCqW#z_+U?9mNKva8Anamv4|cg_*L5t84j(ty>2=O;Y)Dk#~@> zT1vSK1zge(H#GZ!kIW~@^-V-zdD&yEydkXhj`y^t+7(cq+wFO(`KPfm+xy!*4Hdsk z0y1D~MzxM87rM9q)9)+K_y zRhw$I9Y7bl|F|AMg!#HtU-nre#=kOj@u5i*esRO)XnDY}7f?Ph@KE+|`Y5%SG0|Xx z=Vy_zrCiEMde`iH1Erp%CWO5AphXyE&TbX7o{TjJ+GJ+yjFQax3!D(52RO2UYS)+f zx!AKm{%>9!{~vX;!u7ag7VEG~yN!6Npd%5sa_pSPWj_=-_#}a%%;(0I=+e#ZQc9eA-EcnNsD6M3bH_tNe4x7jwVNfi6*ghz zqA|mW&aJC$|Fe*fk=9zBR#TN(NWoZH;~b3xt{>~nAd>yoJz^s%QOml)5i;>Ms9xOw z3dFzMs>iz0*e{@o`X%bzrFn|3AuXg%r+%n1Lpx>W&U}rHg+g zRqaB)!0*lO@;g;P_3YE$pY36FrwB)bgImYqfYn1K72*-yot`?!ZkEk2$4uz^0E#=i zvn97Uv&E(2)uRPQ!5AsM6z=!)4hw%&3=)P*kv53 za9c)B@gePMaj`nc&wV>ywVTo^3^j9pSm^1TstmpI!~@X8z55KS^;RtA76aZ;y65<>chqrdj|c1cPj#v_;!Z`jw;8D9sY3t_5M__T0~!}KOGonj zyF=~98T8NCZJ@&?$dZI{ z1U7Thv>?WF$n$Zz?b>cJJKchM^G$ae=wbdP=EXF5--eoSE87cS$~ogl5b+`}_7904 zrEVt4qq4K00er+)$g}C}_6QNxHpA^6;+w-AEFdYq^3~~Cwwa&P3Z1*n=Lo&zFy_+j z@uh<4&Fk?eSv4>(Oy`bE3fniNJQlG;7nSgJ`%%=1xH+H5maSmQRUr=6A=7nzzd zlQH9{ZC&1_n2aR7!XpKTW*s*L0EoM{ewA&=roL_(j3-;|@k!#TV~f&r))5RxgBXQK zqjmx9{LC(9rDkAovTFId(Pt?CwSwqCdpOSK?i0j73N1dXBHg63)=Wd!?G}C>;MzO}~MZbS${L>#dlZUSiRa z=BWH^eGFrxgY;rU&~!979{*sk+To6zxl#mQSzZ-I^0@PDjSzP>YlskFT<>a*=bx3Q zbhm1=zWS zWjCnPQnwSplVohIEdKeU@~ywU4UzNodne)4tmaujW;|Zcp$GmKZQknFHVZTIlqA+l zozq~2CPOIee!h9?&g@RX<-pxD`A2HjIn6~o-E_u3}Jb?-#nIx%ef_Wa`I9` z=3csj{Z4BX-dqdwk>R6L({M7yJ{3C%PqYhu!JU8MCUT4)%X2g>L6deN9q%%I2m07h zy{UckP}EF{DAjGMH{Y1FdqCTxMZvS_QteE$<<(oE!Y&28w#C&*mu91aoh?7YJqW0v z2}t#sxaPlOLC!i?KpNzAky=;oF#Y(k6@hU}#d!N{El=Vw;FoY?9R?1xbEVfY@t)2K zJB@(fx0BF;EQxAGE&8>C>SW+#7SfNe0(e23+gbD&tRd z#@-rQ-ab}4;Q&-EymQ|C%vXMK-rTHXGkz$CA<5(wE8G6hn*uhIkaOKnlD809(ATMy z$`>>WX8E{2Kg@O)rfV4=WHUXDKf*9?-?f=)OUCh3YgWy~JMV_@Skl_i_>LJ3G^@Qn zgl~3(yB~3XSDv1P@H=puD!Bk;>j0>2z|J_;)no)8v<5pV$Dt#k9Bw1B-fBlPi=hzl ziUv3&&l2TpD4<){I&peH9e4bX8I<7qsWIyyUT?;Ps9OzBK8QZf-cO43-7&P>oZT1v zX(13AvNf>%lI`BCe#dWTjF88kBegFP?`-VOcCY9eLD@|0wOxYu(mREE1&{s5orxQD z%M6uvXNkq&hfbQD_V5HXdyHBgB}nk3X)~x{FHtfz|LB2lNA@V-s97}ms3ca<5(jj5 zF2(Q@F*Y^5FF0?-wDCjU=0!~G+G`r%e61aK+?m;Rd*^)lovP-_nZX#Ngun7XIk_2HyqpO5Kmg+S@iS5q0jY&GxQD7~$9~+}dt=-{|ynx6$6KN9V$) z9?cL|0{bm-CP)RNhC)xvl&%bg!O#al{#M~9rjl}&vW=v!Zp{Gw{(E2k?K%3tzIt!H zY}m&oyG-tJhEHgNh2Ea_Q|dY1=pwe<*6U{15BWNMCbk#C>E5Vy-FDFnqu|i%k+j=$ zy8!?Hz>cV_buq1f+&|^f8LUre!a&@5O$-m6X=n3_mGy-{{BZ&BQw#{*1nkyH0Mdg> zO3GK0*`JHu|L*^Kw7>QjEf99zWLc)B$6`wQ^PfiU>`ssH*F+>oWJy!ex4hWf=~WUY zsm!uoAnn1icz*(K3C~cqJ6g9dTT<3n_$pdzckq-GkRYiXA;-&D9jO2G7iaA?6P0lW z=@-Hy6~mde4lX_&cs>vKf_ihFG`kmW5wmQ4*%5j)uda}WNQ-K6BUal48!4s=0KbW( zQbs_-vISA~+Rm*)Y~C@{w&cWM0uL<^I-gFGJdeZvjOR(ZvTW$RItt&wE1VP|MU^H# zT&vPXIq?^T>11;*8pyyIQVvXS+@{HGpa)T4+tX#vKX5h9BT}a#?H!@(*HHg)djACSHp=z(l+OjgC+F z7fln~ZRX2-JD+T(^|We4_Cltq=%Ug7R3&2|qw(OiL(n07rJDGH6s1v|FdyqDbk2P6 z6p$V;+8vY|57`_^CRZa&M%YWGJ93}&qT-41+*pc_R8{utib_Wvx^023u|6}h0E?XW zYM3-I)ZdM9%5Y9itb5(BkX~i+gPS8j5x>2f!gP`ajn7k12Ra^vQpR}kC|M5^r~V%| zYe)E}Uem7zd!lk9PGFJ^6{`J%gy<3#9N$mV#G4g5;@bI8XC;Odjd<1Lbkc}#yziH% zYS{zIUTJzO7FnV2F6XAlXDs$VMD48y#}?d=0*5@_E#xQJoRX}ZwYbO#Sp#Uvo8mP3 ze1?0oS`jjG_DRslM>5IFf=wFqi2Jl=hIE}|S!G>`SA64&9^1j7di znK;ut|3J!92B+Gf0`6mxTOg1sibDGXSeS^3t~q*F4TO?r4u}-szPg-~Jkk zXa0sS0P3Pj&LyUNLL?ry|ff_B((q=`#zUiFWUFHHC-^ez(hP)7=_x&7rd&ygAd zJb2q`d)4i&*ms7O-NErqmZO!17W2bvkIr^gcGxpiTEmT1Rijpu=a!gcsEuq`c+8`Q ziXfnF$+Lj>lZ|oF`OD)6eVH-I=tjj~azXbe+b_0}Dr+NAj|!@@U{Y-KXzD7Vz9Kt# zV@x~4P$D*{(%y=d2M}Z==%(~ylBRVSUaNYAQ|^n!T&xZ0zj9i%tzTf;tlP_CX8H@m zdjZZ3yhr6kW-$H2bv1q~?@{xts_AUg7=A^+xJaaGp!~!1)~)WWJO;#@nXXpoD>-TA zs-=Z z4q`Yz$qniDJ+*i8@?6u&$J{hXbOI@TET3JE%slkz)LD1fi;y{A)Eov08E+?>Wsmi^ z5QxFk&CwBS+|hgXiG8jn9`VJv3WRAvddr?$)LL6#aL?ih#lRC|s_5rFcfZfhO%;f> z;M*PH^-)g!=|vkW)6H>pS%)@oQ%GN?I~y!8Y93TS^?Y_ZCZ^#Q#gq|?Vv(F4#Vc%c z561b!%NO$q;DLxTD#1iNeFt@pYsl~?!>b#sje?p~NAvS}5U5KX=VZKX8eg8TiyNKm zm83zKmqWHIGstRUOFG_~&qjQlC3Z6<(8T#w45*ZTVY5YtbLLGs!itILT-p+uf^QK3 zUPy zb(Nla0Tk_1RMRWjc+mE1sIo+g>Yc@(f) ze;4A;NVoLxo}h4QJfpzDYrds#Zbs8FY=KFltbzu6xUs_MbxrfTGgR;#d(XijKaCkj zsPCF_QW?IjS8$29#Zqm%;1~o3c%&ztaw?6RBER^)YBRo^yf6;;+8Bm1y)(0+nWPHa zj(gu5hGI9fZ)6=*5j3v*J#p-Cuo^h{iq`gGWL0G1%8+sLS_7SQ3*Ny+x~Rc8-a9Fi zk7Tn6KfsALXWv^Z%4u@s<+feaUjrg;UPLzM^_Xz;-di!1@%-Q#d-ryb6eB=xJCNB#A-|0w}#}R%)u8HqwOY zF*P0Ofc~mh4&&-W?T?N;hmOMqB-g#g=m5sL3_>GJC&SEDGe+duke<27RQ6qIi%yW| zlu}B&U=V4oJR5|L!7ARcn0zjIF|QJ5j~ji{QR0HWe5*aAQFEZE=)(N;#fOXvfK0$_ zD7Y_mX0}XRF*~`&v2IexG+xLncE;qT=*dzXuXTWZM|(o3soPS;09zS{F0Sy!jJZPg zwd@lZ&2SjeiXm+lKDzhm4q5)j(q%?uAD0a`sND;)3_{sBV!stU&73$?ZX*S{ zk2r9gs|YpZU2B**ifQu9HAduC->B~G2uQsX)EwL@D#}`U3F8IYF)UQO#aam^EM}BZ~h^#Y*uQuD%>Ay7gGXCtzr3lC?5mnlOf!#(n!h>m+pHR&*ua;O}Vtn5f zcdjyzL)Mi$d=yJhrSvR5%HLt!ZG87uV*N?cpfSj!aY5aEv7q?Rt9L9Oo`@H=Y{1uA zCv@iwJGC}w+r}obVo%@--!*VXo@=nfyXmZv5SuvgBBhs8g4Ji(H zo(jM`iaz#+Tlu0JFS-i?Rh{=qeY^BMZXoPkQD&*xQZYIeZ#YxC%i$Qu7xoxE-GZ$B1#XsyD)&4Q`_a~Yz~?1 z$O#;#ch3MZE6CWXJ)5yFAA!i}VmHN1VS68+-fVSa-K5TfFA=G)ImR+`G8GOANc&ooe7q z@eE_uSjVf5uECB%>J(OC0^{}lBso+*++wG+0}jTVUYu-sD+Uy;0*X|oA=|ql&|A}| z|3Ia_A%DCwDag1|L3$msNscW!iDI?y>1Dk0_vEY&@~eDKHyy}`#KqPjAw?}4v*-p# zyv2g@5OjJoHq}zGwy{0c4xk&%_XSe)2>^UlnC}we>Pjs4;j$f@=B)7uPu1D<4=Ks|9zwu?y z$Qqtq&6x(9o!{LSIz)7~rUax&9f5wgQCY@XTfUCk!^b5&(EL1QWUqSq5Cc5{clu=6 z3QQst2g3z!w{&7{&B~(4r-G_BZF3C<^N>t#@O-bnXnArnOU-4bJLNfl&8yp4-f1zr z%yJ!OGcEn7X``AwTB>g*-zx(rGoqlyMMr~VmcYf|HC_t`loXYn+Th@`h#sP)BpU#q zH%Ww8fr)fU>Ss1Vi}wK%+J!Au-zdrjiXLef_fUAE8WGKHjUCwLw753yjwU~L!u3)< zh0a$N?x~`h>!*hM4e$54FQ(W+%{3h>ra0@@>h(C?&Z%`Y@O-Cjw#YO}MbM#RL;%&R zxt(88gyqSrtyjB~N*kBsuCIyU8;;YMvyj%|7IS*IRdAfkdLg{nfB*uD1{1KRNUkiU zw0Jd~1d>yZ+7J!zu_qt1r@?aP%c>{%aV{2|R-kQzXvbZfYU`4dJDar2wq<%Qjb`ul z7RD1z&Qsk*A#N4NyPCs-&kyiJvQGZ?b6$G^)gFjzevtsWNKDAJ`}w7x9$C@(Q zwZUD((IiF*AbH$6Uf~Bn`&n4j6!gK8?yVJ}x|??ETJWH0geH(4J9LfcxU}cu4BR^- zO-mR?enmK%<~HOI6wO>@hNNq?oe07PGc;8vnQFmAkMz2WOts>o-~Il-eO&$lND-iI z+prTF1tcw^!dDPgd%t|Vx+KhDU*Z!92rD7CmbO&5??ypZ+IcH`QLP&`?mjd7q?8#H zXZfOG|5Ah~?@H_N2#44TXAdWHh`|#l_u_Q!NrhRhNU?HJi>?51l$lfPLW6bS!Cl*L zgSN#CZii%vWbkf6O4volPD zSwH_1aj%O7LEPho`R#_o4!k}{NYI(uZ)ucBC5}++C}ldjOD*e@?fOv&NSC4$x;0u+ z76G}7-Dx~3hUm{?+{zipmKJ8-gQJAjTpXQD!j>VTMi<&a<1{{TkW-hu*cnF|={+D)J>6(bfii8pwM3b>BKbtQ9Vh+2N&u zp3+P&&2(H_xlTk}d(g&8A*sN?d&(Y>Zq3amHl#-WI#^xtf+qX$mVa>_Zpf7k^KYj= z0aGe7=oC{x`QrXe_v%HGAUp7cg3J{AC@|?ltkI*y^1|{v8>$EWd;Q%HEgO*qqE~Eh zAT+xQgk~o)w3WCS;cqx&fCwjNd#>PdXoAvI!LHCT%AG?$L;A*&D{w!r8%Q3dfXJV}RLJ)o-89AP8r^^dpSoSH{af-lWxtO^JgIUaj)-aNm} z1L_pvb-4@Ik@X%qmUN#mGAXR|B(0-OrpB$~$6s_N{SbZHyx0t>8*4g{kntn^XS-uY zU=&5s8?QrduQw{0sCVDQRi|biT$=AZ-|NGoWuZtokn*g8hI{o;uiY>?xW@`5{v1a1 z!vZw-$Upw~kL`c^Jpb?hLF0~VttarZEI;&ESfP95#tFJo*>|0C2)WS0FG#1l=Vrp) zP8%_qC1-5S=-*y83{3O4DboM|uqzfkRq^zhX3VBBRAql(-8-07_=Rvn@so`E-JVAK zE%4A-2-g3-LEisv9RE(Ay0uJlT4usG$kHdb&9<}UHO)F4pGZ7=bNb8(zuEN?-`333OUkiFXBwNOzJl7%ev~TUD0jy;D)Ymy=Ze-IL54i_ zy)Tj+cL%c}z;Rk{eYpoYgpNOBP~B@GtYi!0$%JH)pW50&XolF$cQkiFGquP-xMsf%ChPf_%#Qgx>kP|LvU<@UNMF# z!XFAcCz)LBuYvirQEY+vv^0o}MYX0bTr1i9MQFe3&MYjPXSDu6AEMOuBA;)zLxcFS zk5-uKOO+Ah{L{5Rhao8z6K?ofs4&oT)ruCVO04%Q^edKpXk4L_g`6H%{v*!_;Qfs? zQ;bOR$?z5)|2YAJDMk?GeI;tzI=1 z7y=fbd#$IZ$H8d~>z?m+?LoR0EtNF1=;j?#>`2II*KXg0%qCIk{Kd)}&&$#DRE9ABQ=CBf}G+u7iHiNz+ac>4pAZ&TM8JFZU_Eo%FB_@D5vi zQF-J_GhVK4;nDW4P7EJWz|Pnb3JVUuCD3)Z4WbgXC(cDt?h7HdF7j}Mt-sq4P>=Tg zkF`@D4bS&matepdPZvIX+0{mRh&%SN&(nzH**hRNPpXlP+6Et|Qrf(r^P{8Q^KZiX zT2z@rew(6dngXCQ*Ef~S@TDknc;4}!JTtUBi#VLXN=>XVDPYzRn>3X0=FQPtG0ZWh zg+<8P$+!|i|1qlz@MwJi49>G&v}K)i`+@lfi7f%g!aRZU0!U;azJ|2i0v)}YjGrcq z@Hf((JnPKuCz%;00qBl5n~7~Jdq+;5*+=Mf<)O3-ckVoV(+#+j!`!&sM)IjP^A9MI zo6*GxeE_9L?|-H_6?fW*AqSqEkM^4%s_{5yn9%7$>=Ll=_Ur`NgU$9HjsX)+DA|

cncADnC70XX->zZxsxSdg4y>SQln^x~ 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

euVKv&74tSv}@M4%*WA%w^l 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 -https://www.fao.org/cwp-on-fishery-statistics/handbook/general-concepts/spatial-reference-systems +https://www.buildingsmart.org/wp-content/uploads/2020/02/User-Guide-for-Geo-referencing-in-IFC-v2.0.pdf ## To Be Figured Out @@ -16,6 +16,7 @@ Ways to define a geodetic datum for an Engineering CRS: Sources: +* https://www.fao.org/cwp-on-fishery-statistics/handbook/general-concepts/spatial-reference-systems * https://www.crs-geo.eu/definition-crs.htm * https://www.deparentis.com/wp-content/uploads/2020/04/IGOP-373-05.pdf @@ -23,49 +24,51 @@ A Coordinate Reference System contains two different elements - the datum and th The datum defines how the CRS is related to the earth (position of the origin, the scale and the orientation of coordinate axis) e.g. ED50, ETRS89 and the coordinate system describes how the coordinates expressed in the datum e.g. as cartesian coordinates, ellipsoidal coordinates or coordinates of a map projection e.g. UTM. +## Linear Infrastructure CRS'es +When designing a linear infrastructure alignment (such as a road, railway, or pipeline) that crosses from one zone to another in a national grid system, specific procedures must be followed to ensure consistency, accuracy, and minimal distortion. +The best approach depends on project length, accuracy requirements, and software capabilities. For shorter crossings, extending a single zone works well. For longer projects, either the project has to be split at the national grid boundary or a project specific custom projected CRS has to be created. -## Linear Infrastructure CRS'es - -When designing a linear infrastructure alignment (such as a road, railway, or pipeline) that crosses from one zone to another in a national grid system, specific procedures must be followed to ensure consistency, accuracy, and minimal distortion. The process typically involves the following steps: +The process typically involves the following steps: 1. Selection of a Suitable Coordinate Reference System (CRS) Identify the primary CRS used for the project, which is often based on the national grid system (e.g., UTM, Gauss-Krüger, or Lambert). If the alignment is entirely within one zone, use that zone’s CRS. If the alignment crosses multiple zones, a strategy for transition must be defined. -2. Defining the Transition Strategy Between Zones -Option 1: Stay in One Zone (Extend the Zone Limits) -If the alignment does not extend far into the next zone, the design can remain in the first zone, treating coordinates from the second zone as extended. -This avoids transformations but can introduce slight distortions. -Option 2: Split at the Zone Boundary +2. Defining the Transition Strategy Between Zones + Option 1: Stay in One Zone (Extend the Zone Limits) + If the alignment does not extend far into the next zone, the design can remain in the first zone, treating coordinates from the second zone as extended. This avoids transformations but can introduce slight distortions. -The alignment is designed in two separate coordinate systems, each following its respective zone. -At the boundary, a coordinate transformation (datum shift) is applied to ensure consistency. -This approach is useful when the infrastructure spans large distances across zones. -Option 3: Use a Custom Local CRS (Best for Long Alignments) + Option 2: Split at the Zone Boundary + The alignment is designed in two separate coordinate systems, each following its respective zone. + At the boundary, a coordinate transformation (datum shift) is applied to ensure consistency. + This approach is useful when the infrastructure spans large distances across zones. -A project-specific oblique Mercator or Transverse Mercator projection is created to cover the entire alignment without switching zones. -This is commonly used for railways and highways to avoid repeated coordinate transformations. -1. Coordinate Transformation and Adjustment + Option 3: Use a Custom Local CRS (Best for Long Alignments) + A project-specific oblique Mercator or Transverse Mercator projection is created to cover the entire alignment without switching zones. + This is commonly used for railways and highways to avoid repeated coordinate transformations. + +3. Coordinate Transformation and Adjustment When switching zones, perform a coordinate transformation using geodetic software (e.g., PROJ, ArcGIS, or QGIS). Apply Helmert transformations or grid-based transformations if necessary. Ensure continuity of coordinates along the alignment, avoiding sudden shifts. + 4. Ensuring Engineering Consistency Perform geodetic checks to ensure: Distances and bearings remain accurate. There is no unexpected distortion in alignment. Convert elevation data to the appropriate vertical reference system. + 5. Integration with GIS and CAD Software Use specialized software like Civil 3D, MicroStation, or OpenRoads to maintain accurate coordinates. Implement dynamic referencing so that design elements adjust automatically when shifting between zones. -1. Validation and Quality Control + +6. Validation and Quality Control Perform benchmark testing at critical points along the alignment. Cross-check GIS and survey data against real-world measurements. Ensure all stakeholders (engineers, surveyors, GIS teams) agree on the approach. -Conclusion -The best approach depends on project length, accuracy requirements, and software capabilities. For shorter crossings, extending a single zone works well. For longer projects, using a custom projection is often the most precise solution. ### Surveying Best Practice for Linear Infrastructure Projects @@ -73,6 +76,10 @@ The best approach depends on project length, accuracy requirements, and software * Survey data is transformed to the National Grid CRS (Easting, Northing, Orthometric Height). * If a Custom Project CRS is used, points are transformed from the National Grid CRS to the Custom CRS. +## Heights... + +![HeightsOnEarth](./HeightsOnEarth.jpg) + ## National Grid systems * United States – State Plane Coordinate System (SPCS) diff --git a/Georeferencing/WekaHills_CRSes.ifcx b/Georeferencing/WekaHills_CRSes.ifcx index 3d64125..9f647e1 100644 --- a/Georeferencing/WekaHills_CRSes.ifcx +++ b/Georeferencing/WekaHills_CRSes.ifcx @@ -3,47 +3,87 @@ "def": "def", "name": "urn:ogc:def:crs:EPSG::2193", "comment": "The name of this object is an OGC Uniform Resource Name.", - "type": "CRS:EPSG", + "type": "CRS:RegisteredGeodetic", "attributes": { "WKT-CRS": { "ISO": "ISO 19162:2019", "wkt": "PROJCRS[\"NZGD2000 / New Zealand Transverse Mercator 2000\",BASEGEOGCRS[\"NZGD2000\",DATUM[\"New Zealand Geodetic Datum 2000\",ELLIPSOID[\"GRS 1980\",6378137,298.257222101,LENGTHUNIT[\"metre\",1]]],PRIMEM[\"Greenwich\",0,ANGLEUNIT[\"degree\",0.0174532925199433]],ID[\"EPSG\",4167]],CONVERSION[\"New Zealand Transverse Mercator 2000\",METHOD[\"Transverse Mercator\",ID[\"EPSG\",9807]],PARAMETER[\"Latitude of natural origin\",0,ANGLEUNIT[\"degree\",0.0174532925199433],ID[\"EPSG\",8801]],PARAMETER[\"Longitude of natural origin\",173,ANGLEUNIT[\"degree\",0.0174532925199433],ID[\"EPSG\",8802]],PARAMETER[\"Scale factor at natural origin\",0.9996,SCALEUNIT[\"unity\",1],ID[\"EPSG\",8805]],PARAMETER[\"False easting\",1600000,LENGTHUNIT[\"metre\",1],ID[\"EPSG\",8806]],PARAMETER[\"False northing\",10000000,LENGTHUNIT[\"metre\",1],ID[\"EPSG\",8807]]],CS[Cartesian,2],AXIS[\"northing (N)\",north,ORDER[1],LENGTHUNIT[\"metre\",1]],AXIS[\"easting (E)\",east,ORDER[2],LENGTHUNIT[\"metre\",1]],USAGE[SCOPE[\"Engineering survey, topographic mapping.\"],AREA[\"New Zealand - North Island, South Island, Stewart Island - onshore.\"],BBOX[-47.33,166.37,-34.1,178.63]],ID[\"EPSG\",2193]]", "name": "NZGD2000 / New Zealand Transverse Mercator 2000", - "authority_id": "EPSG:2193", + "authorityId": "EPSG:2193", "units": "m" } } }, { "def": "def", - "name": "N3674dee56a3c46509369539813004d0a_CRS", - "comment": "This is a The name of this CRS object is an GUID, because this CRS object is not a registed CRS.", - "type": "CRS:SurveyPoint", + "name": "N07104fd2c3ee44b1af7637c0f1ae249c_CRS", + "comment": "The name of this object is an OGC Uniform Resource Name.", + "type": "CRS:CustomGeodetic", "attributes": { "WKT-CRS": { "ISO": "ISO 19162:2019", - "wkt": "PROJCS[\"EngineeringCRS_latlon_-46.01646668657133_167.39635621841134\", GEOGCS[\"GCS_WGS_1984\", DATUM[\"D_WGS_1984\", SPHEROID[\"WGS_1984\", 6378137.0, 298.257223563]], PRIMEM[\"Greenwich\", 0.0], UNIT[\"Degree\", 0.0174532925199433]], PROJECTION[\"Transverse_Mercator\"], PARAMETER[\"False_Easting\", 0.0], PARAMETER[\"False_Northing\", 0.0], PARAMETER[\"Central_Meridian\", 167.39635621841134], PARAMETER[\"Scale_Factor\", 1.0], PARAMETER[\"Latitude_Of_Origin\", -46.01646668657133], UNIT[\"Meter\", 1.0]]", + "wkt": "PROJCS[\"SpeckleCRS_latlon_-46.01646668657133_167.39635621841134\", GEOGCS[\"GCS_WGS_1984\", DATUM[\"D_WGS_1984\", SPHEROID[\"WGS_1984\", 6378137.0, 298.257223563]], PRIMEM[\"Greenwich\", 0.0], UNIT[\"Degree\", 0.0174532925199433]], PROJECTION[\"Transverse_Mercator\"], PARAMETER[\"False_Easting\", 0.0], PARAMETER[\"False_Northing\", 0.0], PARAMETER[\"Central_Meridian\", 167.39635621841134], PARAMETER[\"Scale_Factor\", 1.0], PARAMETER[\"Latitude_Of_Origin\", -46.01646668657133], UNIT[\"Meter\", 1.0]]", "units": "m" - }, - "SurveyPoint": { - "CRS:EPSG": 2193, - "Easting": 1166250.104, - "Northing": 4888836.859, - "Elevation": "?", - "Rotation": "?" } } }, { "def": "def", - "name": "N07104fd2c3ee44b1af7637c0f1ae249c_CRS", - "comment": "The name of this object is an OGC Uniform Resource Name.", - "type": "CRS:Infrastructure", + "name": "N3674dee56a3c46509369539813004d0a_CRS", + "comment": "This is a The name of this CRS object is an GUID, because this CRS object is not a registed CRS.", + "type": "CRS:GeoreferencedEngineering", "attributes": { "WKT-CRS": { "ISO": "ISO 19162:2019", - "wkt": "PROJCS[\"SpeckleCRS_latlon_-46.01646668657133_167.39635621841134\", GEOGCS[\"GCS_WGS_1984\", DATUM[\"D_WGS_1984\", SPHEROID[\"WGS_1984\", 6378137.0, 298.257223563]], PRIMEM[\"Greenwich\", 0.0], UNIT[\"Degree\", 0.0174532925199433]], PROJECTION[\"Transverse_Mercator\"], PARAMETER[\"False_Easting\", 0.0], PARAMETER[\"False_Northing\", 0.0], PARAMETER[\"Central_Meridian\", 167.39635621841134], PARAMETER[\"Scale_Factor\", 1.0], PARAMETER[\"Latitude_Of_Origin\", -46.01646668657133], UNIT[\"Meter\", 1.0]]", + "wkt": "PROJCS[\"EngineeringCRS_latlon_-46.01646668657133_167.39635621841134\", GEOGCS[\"GCS_WGS_1984\", DATUM[\"D_WGS_1984\", SPHEROID[\"WGS_1984\", 6378137.0, 298.257223563]], PRIMEM[\"Greenwich\", 0.0], UNIT[\"Degree\", 0.0174532925199433]], PROJECTION[\"Transverse_Mercator\"], PARAMETER[\"False_Easting\", 0.0], PARAMETER[\"False_Northing\", 0.0], PARAMETER[\"Central_Meridian\", 167.39635621841134], PARAMETER[\"Scale_Factor\", 1.0], PARAMETER[\"Latitude_Of_Origin\", -46.01646668657133], UNIT[\"Meter\", 1.0]]", "units": "m" + }, + "geodeticDatumOfEngineeringCrs": { + "geographicCrsDatum": { + "crsAuthorityId": "EPSG:4326", + "longitude": 167.39635621841134, + "latitude": -46.01646668657133, + "elipsoidalHeight": "?", + "trueNorth": "?" + }, + "projectedCrsDatum": { + "crsAuthorityId": "EPSG:2193", + "easting": 1166250.104, + "northing": 4888836.859, + "verticalDatumAuthorityId": "EPSG:?", + "orthogonalHeight": "?", + "xAxisAbscissa": "?", + "xAxisOrdinate": "?", + "scale": "?", + "surveyPoints": [ + { + "name": "Survey Point 1", + "projectedCrsCoordinates": { + "easting": 1166250.104, + "northing": 4888836.859, + "orthometricHeight": "?" + }, + "engineeringCrsCoordinates": { + "x": 1, + "y": 2, + "z": 0 + } + }, + { + "name": "Survey Point 2", + "geodeticCoordinates": { + "easting": 1166250.104, + "northing": 4888836.859, + "orthometricHeight": "?" + }, + "engineeringCrsCoordinates": { + "x": 1000, + "y": 200, + "z": 0 + } + } + ] + } } } }, diff --git a/Geotech/ifc5_crs.ipynb b/Georeferencing/ifc5_crs.ipynb similarity index 88% rename from Geotech/ifc5_crs.ipynb rename to Georeferencing/ifc5_crs.ipynb index 82b6f91..113e248 100644 --- a/Geotech/ifc5_crs.ipynb +++ b/Georeferencing/ifc5_crs.ipynb @@ -105,11 +105,20 @@ "cell_type": "code", "execution_count": 4, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "167.39635621841134 -46.01646668657133\n" + ] + } + ], "source": [ "transformer = Transformer.from_crs(weka_hills_crs, 4326, always_xy=True)\n", - "custom_lon, custom_lat = transformer.transform(1166250.104, 4888836.859)\n", - "custom_crs_wkt = f'PROJCS[\"SpeckleCRS_latlon_{custom_lat}_{custom_lon}\", GEOGCS[\"GCS_WGS_1984\", DATUM[\"D_WGS_1984\", SPHEROID[\"WGS_1984\", 6378137.0, 298.257223563]], PRIMEM[\"Greenwich\", 0.0], UNIT[\"Degree\", 0.0174532925199433]], PROJECTION[\"Transverse_Mercator\"], PARAMETER[\"False_Easting\", 0.0], PARAMETER[\"False_Northing\", 0.0], PARAMETER[\"Central_Meridian\", {custom_lon}], PARAMETER[\"Scale_Factor\", 1.0], PARAMETER[\"Latitude_Of_Origin\", {custom_lat}], UNIT[\"Meter\", 1.0]]'" + "lon, lat = transformer.transform(1166250.104, 4888836.859)\n", + "engineering_crs_wkt = f'PROJCS[\"SpeckleCRS_latlon_{lat}_{lon}\", GEOGCS[\"GCS_WGS_1984\", DATUM[\"D_WGS_1984\", SPHEROID[\"WGS_1984\", 6378137.0, 298.257223563]], PRIMEM[\"Greenwich\", 0.0], UNIT[\"Degree\", 0.0174532925199433]], PROJECTION[\"Transverse_Mercator\"], PARAMETER[\"False_Easting\", 0.0], PARAMETER[\"False_Northing\", 0.0], PARAMETER[\"Central_Meridian\", {lon}], PARAMETER[\"Scale_Factor\", 1.0], PARAMETER[\"Latitude_Of_Origin\", {lat}], UNIT[\"Meter\", 1.0]]'\n", + "print(lon, lat)" ] } ], From d1f9e4013a3fa7e96666b3bc51ea5433d0bb3ece Mon Sep 17 00:00:00 2001 From: Joost Gevaert Date: Wed, 12 Feb 2025 07:35:07 +0100 Subject: [PATCH 15/18] Update # To Be Figured Out --- Georeferencing/README.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Georeferencing/README.md b/Georeferencing/README.md index 0c78966..0ac0b81 100644 --- a/Georeferencing/README.md +++ b/Georeferencing/README.md @@ -8,9 +8,12 @@ https://www.buildingsmart.org/wp-content/uploads/2020/02/User-Guide-for-Geo-refe Ways to define a geodetic datum for an Engineering CRS: -* Lon, Lat, Elipsoid Height, Angle to True North -* Easting, Northing, Orthometric Height, Angle to Grid North -* Survey Points +* Lon, Lat, Elipsoidal Height*, Angle to True North. +* Survey Points => Easting, Northing, Orthometric Height^, Angle to Grid North (x-axis abscissa + x-axis ordinate). +* Any others? + +\* Should this really be the Elipsoidal Height or should it be possible to be any type of height? +^ In the bSI User Guide for Geo-referencing the IfcMapConversion parameter for the height is called Orthogonal Height. Why is this not the Orthometric Height? ## Definition of a Coordinate Reference System (CRS) From 30470e8361bdde8d5724336c6553b7a26c0088f3 Mon Sep 17 00:00:00 2001 From: Joost Gevaert Date: Wed, 26 Mar 2025 19:13:01 +0100 Subject: [PATCH 16/18] Put PR discussion on georef into README.md --- Georeferencing/README.md | 193 ++++++++++++++++++---------- Georeferencing/WekaHills_CRSes.ifcx | 13 +- 2 files changed, 131 insertions(+), 75 deletions(-) diff --git a/Georeferencing/README.md b/Georeferencing/README.md index 0ac0b81..3566958 100644 --- a/Georeferencing/README.md +++ b/Georeferencing/README.md @@ -1,100 +1,155 @@ -# Georeferencing +@aothms, @janbrouwer, @rubendecuypere, thanks for the great discussions last week and thanks for picking back up the discussion in this PR. -> +I've given it quite some thought since then, and think there are several use cases we should keep in mind, but first some definitions... -https://www.buildingsmart.org/wp-content/uploads/2020/02/User-Guide-for-Geo-referencing-in-IFC-v2.0.pdf +## Definitions -## To Be Figured Out +### Coordinate System -Ways to define a geodetic datum for an Engineering CRS: +A Coordinate System (CS) [[1]](https://en.wikipedia.org/wiki/Coordinate_system) is a system that uses one or more coordinates, to uniquely determine the position of points or other geometric elements within space. There are basically three Coordinate Systems of interest to Surveyors [[2]](https://www.buildingsmart.org/wp-content/uploads/2020/02/User-Guide-for-Geo-referencing-in-IFC-v2.0.pdf): -* Lon, Lat, Elipsoidal Height*, Angle to True North. -* Survey Points => Easting, Northing, Orthometric Height^, Angle to Grid North (x-axis abscissa + x-axis ordinate). -* Any others? +1. Cartesian: X, Y, Z +2. Ellipsoidal: Longitude, Latitude, Ellipsoid Height +3. Height: a 1D vertical Coordinate System -\* Should this really be the Elipsoidal Height or should it be possible to be any type of height? -^ In the bSI User Guide for Geo-referencing the IfcMapConversion parameter for the height is called Orthogonal Height. Why is this not the Orthometric Height? +In IFC we want to exclusively use (2D or 3D) Cartesian Coordinate Systems for geometry. -## Definition of a Coordinate Reference System (CRS) +Or do we? Some field measurements could be done in geographic coordinates. We could enforce that these geographic coordinates must be converted to coordinates in a projected CRS first? -Sources: +### Datum -* https://www.fao.org/cwp-on-fishery-statistics/handbook/general-concepts/spatial-reference-systems -* https://www.crs-geo.eu/definition-crs.htm -* https://www.deparentis.com/wp-content/uploads/2020/04/IGOP-373-05.pdf +A Datum [\[2,](https://www.buildingsmart.org/wp-content/uploads/2020/02/User-Guide-for-Geo-referencing-in-IFC-v2.0.pdf) [3\]](https://www.crs-geo.eu/definition-crs.htm) together with a Coordinate System makes a Coordinate **REFERENCE** System. The datum defines how a Coordinate System is related to the earth (position of the origin, the scale and the orientation of coordinate axes). A datum may be: -A Coordinate Reference System contains two different elements - the datum and the coordinate system. +1. Geodetic: describes how a 2D Coordinate System is related to the earth. +2. Engineering: describes how an Engineering Coordinates System or Engineering Grid is related +3. Vertical: the surface relative to which height is measured, see the section on heights below. -The datum defines how the CRS is related to the earth (position of the origin, the scale and the orientation of coordinate axis) e.g. ED50, ETRS89 and the coordinate system describes how the coordinates expressed in the datum e.g. as cartesian coordinates, ellipsoidal coordinates or coordinates of a map projection e.g. UTM. +![image](https://github.com/user-attachments/assets/4a1510c2-aba6-444e-92be-659519300b6a) -## Linear Infrastructure CRS'es +### Coordinate Reference System -When designing a linear infrastructure alignment (such as a road, railway, or pipeline) that crosses from one zone to another in a national grid system, specific procedures must be followed to ensure consistency, accuracy, and minimal distortion. +A Coordinate Reference System (CRS) [[3]](https://www.crs-geo.eu/definition-crs.htm) or Spatial Reference System (SRS) [[4]](https://en.wikipedia.org/wiki/Spatial_reference_system) is a framework used to precisely measure locations on Earth as coordinates. -The best approach depends on project length, accuracy requirements, and software capabilities. For shorter crossings, extending a single zone works well. For longer projects, either the project has to be split at the national grid boundary or a project specific custom projected CRS has to be created. +A particular CRS, i.e. SRS specification comprises: -The process typically involves the following steps: +* Earth Ellipsoid (see definition below) +* Geodetic Datum +* Map Projection (except in the case of a geographic CRS) +* Origin Point +* Unit of Measurement -1. Selection of a Suitable Coordinate Reference System (CRS) -Identify the primary CRS used for the project, which is often based on the national grid system (e.g., UTM, Gauss-Krüger, or Lambert). -If the alignment is entirely within one zone, use that zone’s CRS. -If the alignment crosses multiple zones, a strategy for transition must be defined. +Types of CRS'es: -2. Defining the Transition Strategy Between Zones - Option 1: Stay in One Zone (Extend the Zone Limits) - If the alignment does not extend far into the next zone, the design can remain in the first zone, treating coordinates from the second zone as extended. This avoids transformations but can introduce slight distortions. +1. Geodetic CRS'es: CRS'es used to describe locations on the surface of the earth (except for the ECEF CRS, see d.). There are 4 types of geodetic CRS'es relevant to IFC: + a. Geographic CRS'es: (Longitude, Latitude) + b. Projected CRS'es: (Easting, Northing) + c. Custom projected CRS'es defined for linear infrastructure projects: (Easting, Northing) + d. The Earth Centered Earth Fixed (ECEF) or Geocentric CRS: a cartesian CRS that represents locations in the vicinity of the Earth (including its surface, interior, atmosphere, and surrounding outer space) as X, Y, and Z measurements from its center of mass. +2. Vertical CRS'es: 1D Coordinate Systems that measure height relative to a Vertical Datum. Usually either Ellipsoidal Height or Orthometric Height, see section on heights below. +3. Compound CRS'es: Geodetic CRS + Vertical CRS. For example Amersfoort / RD New + NAP height | [EPSG:7415](https://epsg.io/7415) = Amersfoort / RD New | [EPSG:28992](https://epsg.io/28992) + NAP height | [EPSG:5709](https://epsg.io/5709) or see the example in [IfcCoordinateReferenceSystem](https://ifc43-docs.standards.buildingsmart.org/IFC/RELEASE/IFC4x3/HTML/lexical/IfcCoordinateReferenceSystem.htm). +4. Engineering CRS'es: a georeferenced Engineering Coordinate System, which very often will actually be a compound CRS, because most engineering models nowadays have 3D geometry, meaning that the Engineering CS has X, Y and Z coordinates and therefore also has heights. - Option 2: Split at the Zone Boundary - The alignment is designed in two separate coordinate systems, each following its respective zone. - At the boundary, a coordinate transformation (datum shift) is applied to ensure consistency. - This approach is useful when the infrastructure spans large distances across zones. +### Georeferencing - Option 3: Use a Custom Local CRS (Best for Long Alignments) - A project-specific oblique Mercator or Transverse Mercator projection is created to cover the entire alignment without switching zones. - This is commonly used for railways and highways to avoid repeated coordinate transformations. +In our case I'd define Georeferencing as binding an Engineering CS to a Geodetic (+ Vertical) Datum, thereby defining the Engineering Datum, such that the Engineering Coordinate System becomes an Engineering Coordinate Reference System, i.e. Spatial Reference System. -3. Coordinate Transformation and Adjustment -When switching zones, perform a coordinate transformation using geodetic software (e.g., PROJ, ArcGIS, or QGIS). -Apply Helmert transformations or grid-based transformations if necessary. -Ensure continuity of coordinates along the alignment, avoiding sudden shifts. +Once an Engineering Coordinate System is georeferenced, every location in engineering coordinates is linked to a location on earth. -4. Ensuring Engineering Consistency -Perform geodetic checks to ensure: -Distances and bearings remain accurate. -There is no unexpected distortion in alignment. -Convert elevation data to the appropriate vertical reference system. +## The 1M$ Question -5. Integration with GIS and CAD Software -Use specialized software like Civil 3D, MicroStation, or OpenRoads to maintain accurate coordinates. -Implement dynamic referencing so that design elements adjust automatically when shifting between zones. +How do we georeference an Engineering Coordinate System? +That is, how do we define an Engineering Datum such that Engineering CS → Engineering CRS, through which every location in engineering coordinates is linked to a location on earth? -6. Validation and Quality Control -Perform benchmark testing at critical points along the alignment. -Cross-check GIS and survey data against real-world measurements. -Ensure all stakeholders (engineers, surveyors, GIS teams) agree on the approach. +As I understand it, there are at least three ways to georeference an Engineering CS: -### Surveying Best Practice for Linear Infrastructure Projects +1. Georeferencing to the WGS84 | [EPSG:4326](https://epsg.io/4326) Geographic CRS, by defining the following for the Engineering CS origin (This is what you have to do in Rhino, SketchUp and Revit. In these software there is no way to georeference with a Projected CRS.): + a. Longitude + b. Latitude + c. Vertical Datum (for WGS84 | EPSG:4326 the vertical datum is the WGS84 ellipsoid, so vertical datum not relevant in case Ellipsoidal Height is given) + d. "Height" + e. Angle between Y-axis of the Engineering CS and "True" North, i.e. Geographic North +2. Georeferencing to a Projected or Compound (Projected + Vertical) CRS, e.g. Amersfoort / RD New + NAP height | [EPSG:7415](https://epsg.io/7415) by defining the following for the Engineering CS origin ([IfcMapConversion](https://ifc43-docs.standards.buildingsmart.org/IFC/RELEASE/IFC4x3/HTML/lexical/IfcMapConversion.htm)): + a. Geodetic Projected CRS + b. Easting + c. Northing + d. Vertical Datum + e. Orthogonal height relative to the specified Vertical Datum + f. Angle between the Y-axis of the Engineering CS and the Grid North of the used Geodetic Projected CRS = X Axis Abscissa + X Axia Ordinate + g. Scale +3. Georeferencing to a Projected | Compound (Projected + Vertical) CRS using two or more survey points, for which the coordinates in both the Projected | Compound CRS as well as in the Engineering CS are known. Using these survey points, the values from method 2. can be calculated. This is the method described in the "User Guide for Geo-referencing in IFC" [[2]](https://www.buildingsmart.org/wp-content/uploads/2020/02/User-Guide-for-Geo-referencing-in-IFC-v2.0.pdf. +4. Any other methods? -* Survey is initially done in (Longitude, Latitude, Ellipsoidal Height) using GNSS. -* Survey data is transformed to the National Grid CRS (Easting, Northing, Orthometric Height). -* If a Custom Project CRS is used, points are transformed from the National Grid CRS to the Custom CRS. +To answer the 1M$ Question, I think we should keep multiple use cases in mind. From "Simple" to "Complicated": -## Heights... +1. An architect creates a model and georeferences it using method 1. +2. A project with models in an Engineering CS and data in a Projected | Compound CRS, e.g. cadastre, geotech, ground models, etc. +3. A project with multiple Engineering CS'es and other data in a Projected | Compound CRS, e.g. a railway project with: + a. Railway alignment in Projected | Compound CRS + b. Cadastre + Geotech + other data in Projected | Compound CRS + c. Train station (F) in Engineering CS (F) + d. A Bridge somewhere along the railway alignment in Engineering CS (B) + e. Train station (G) in Engineering CS (G) +4. A project with multiple Engineering CS'es and multiple Projected | Compound CRS'es, e.g. a very long railway. For very long linear infrastructure one has to either use different Projected | Compound CRS'es for different parts of the railway (Zone 30 for red part of alignment, Zone 31 for orange part of alignment), or create a project specific Geodetic Projected | Compound CRS (green box). In the latter case one would still have to work with multiple Projected | Compound CRS'es, because for one geotechnical data will be supplied in Projected | Compound CRS coordinates. + +![image](https://github.com/user-attachments/assets/920e2666-adfa-4a2d-a422-0243f77230a3) -![HeightsOnEarth](./HeightsOnEarth.jpg) +5. An asset manager that has a portfolio of assets all around the world, including projects of all types described above. -## National Grid systems +## Transformation Matrices -* United States – State Plane Coordinate System (SPCS) -* Canada – UTM-based National Topographic System (NTS) -* Russia – Gauss-Krüger Coordinate System -* Germany – Gauß-Krüger Coordinate System -* Sweden – RT90 (Rikets koordinatsystem 1990) -* United Kingdom – Ordnance Survey National Grid (OSGB36) -* France – Lambert Zones (NTF Lambert 1–4) +A transformation implies that you transform from one CRS to another CRS. -## Definitions +These transformations can be defined for use cases 2, 3 and possibly for use case 4 as well, in case we are smart about how we require people to structure such projects and assign CRS objects. + +For use case 1 - using method 1 for georeferencing - it is not possible to define a transformation that "dumb" BIM viewer can use, because **TO** what CRS would you like to define the transformation? No projected CRS is defined, so it's also not possible to define a transformation matrix, right? + +For use case 5 I think it's evident that defining transformations would become "crazy", because there would be too many possible transformations and also non-sensible transformations, because one should not want to transform a road in a Projected CRS in Mexico to a road in a Projected CRS in Spain => too much distortion. + +Would it make sense to include transformation matrices to non-projected geodetic CRS'es, e.g. to WGS84 and / or ECEF? +What coordinates are used by web mapping software? +Most work with GeoJSON, right? So, according to GeoJSON's spec, the coordinates of this geometry should then all be in WGS84 (Lon, Lat, Ellipsoidal Height), right? +But then Cesium.js is famous for using the ECEF CRS, so maybe include both a transformation matrix to WGS84 and ECEF? +But then are these software able do something with these transformation matrices, or maybe they're not necessary, because these web mapping software should be able to calculate these transformation matrices themselves based on the WKT-CRS strings? Or would that be slow / unhandy? + +## An Important Part of the Solution: **WKT-CRS** + +Well-known text representation of coordinate reference systems (WKT or WKT-CRS) [[5]](https://en.wikipedia.org/wiki/Well-known_text_representation_of_coordinate_reference_systems) is an ISO standardized text markup language for representing CRS'es. So, ALL CRS'es - including Engineering CRS'es - can be represented with a WKT-CRS string and then software such as [PROJ](https://proj.org/en/stable/) can be used to calculate the transformation between ANY two CRS'es. + +## Definitions continued... + +### Earth Ellipsoid + +An Earth ellipsoid [[6]](https://en.wikipedia.org/wiki/Earth_ellipsoid) or Earth spheroid is a mathematical figure approximating the Earth's form, used as a reference frame for computations in geodesy, geosciences and ofc civil engineering... + +### Geoid + +The geoid [[7]](https://en.wikipedia.org/wiki/Geoid) is the shape that the ocean surface would take under the influence of the gravity of Earth, including gravitational attraction and Earth's rotation, if other influences such as winds and tides were absent. + +ATTENTION: Geoid ≠ Mean Sea Level [[8]](https://en.wikipedia.org/wiki/Sea_level) due to differences in sea water density (mainly due to temperature differences), tides, currents and weather. The permanent deviation between the geoid and mean sea level is called ocean surface topography [[7]](https://en.wikipedia.org/wiki/Geoid). + +### Height on Earth + +Heights as most people think of them, are usually defined by an equipotential gravity field. Or more simply, two heights are the same if water will not flow between them. One height is greater than another if water flows from one to the other. Gravity is what determines how water flows, so the definition of equal heights is defined by gravity [[2]](https://www.buildingsmart.org/wp-content/uploads/2020/02/User-Guide-for-Geo-referencing-in-IFC-v2.0.pdf). Therefore, heights are usually measured relative to the geoid. This height is called the orthometric height. + +The height relative to the Earth Ellipsoid is called the Ellipsoidal Height. + +![HeightsOnEarth](https://github.com/user-attachments/assets/6f6160cb-942f-4463-95d9-15b51974ab61) + +## Conclusion + +Well, that was quite the story... + +Please let me know if anything is unclear, forgot anything, got any definitions wrong, incomplete or whatever and please let me know what you think about this story and my questions. + +Have fun! 🌍🌎🌏 + +## References -* Coordinate Cystem (CS) -* Spatial Refence System (SRS) / Coordinate Reference System (CRS) = CS + datum -* Datum +1. https://en.wikipedia.org/wiki/Coordinate_system +2. https://www.buildingsmart.org/wp-content/uploads/2020/02/User-Guide-for-Geo-referencing-in-IFC-v2.0.pdf +3. https://www.crs-geo.eu/definition-crs.htm +4. https://en.wikipedia.org/wiki/Spatial_reference_system +5. https://en.wikipedia.org/wiki/Well-known_text_representation_of_coordinate_reference_systems +6. https://en.wikipedia.org/wiki/Earth_ellipsoid +7. https://en.wikipedia.org/wiki/Geoid +8. https://en.wikipedia.org/wiki/Sea_level diff --git a/Georeferencing/WekaHills_CRSes.ifcx b/Georeferencing/WekaHills_CRSes.ifcx index 9f647e1..bdfe853 100644 --- a/Georeferencing/WekaHills_CRSes.ifcx +++ b/Georeferencing/WekaHills_CRSes.ifcx @@ -5,12 +5,13 @@ "comment": "The name of this object is an OGC Uniform Resource Name.", "type": "CRS:RegisteredGeodetic", "attributes": { - "WKT-CRS": { - "ISO": "ISO 19162:2019", - "wkt": "PROJCRS[\"NZGD2000 / New Zealand Transverse Mercator 2000\",BASEGEOGCRS[\"NZGD2000\",DATUM[\"New Zealand Geodetic Datum 2000\",ELLIPSOID[\"GRS 1980\",6378137,298.257222101,LENGTHUNIT[\"metre\",1]]],PRIMEM[\"Greenwich\",0,ANGLEUNIT[\"degree\",0.0174532925199433]],ID[\"EPSG\",4167]],CONVERSION[\"New Zealand Transverse Mercator 2000\",METHOD[\"Transverse Mercator\",ID[\"EPSG\",9807]],PARAMETER[\"Latitude of natural origin\",0,ANGLEUNIT[\"degree\",0.0174532925199433],ID[\"EPSG\",8801]],PARAMETER[\"Longitude of natural origin\",173,ANGLEUNIT[\"degree\",0.0174532925199433],ID[\"EPSG\",8802]],PARAMETER[\"Scale factor at natural origin\",0.9996,SCALEUNIT[\"unity\",1],ID[\"EPSG\",8805]],PARAMETER[\"False easting\",1600000,LENGTHUNIT[\"metre\",1],ID[\"EPSG\",8806]],PARAMETER[\"False northing\",10000000,LENGTHUNIT[\"metre\",1],ID[\"EPSG\",8807]]],CS[Cartesian,2],AXIS[\"northing (N)\",north,ORDER[1],LENGTHUNIT[\"metre\",1]],AXIS[\"easting (E)\",east,ORDER[2],LENGTHUNIT[\"metre\",1]],USAGE[SCOPE[\"Engineering survey, topographic mapping.\"],AREA[\"New Zealand - North Island, South Island, Stewart Island - onshore.\"],BBOX[-47.33,166.37,-34.1,178.63]],ID[\"EPSG\",2193]]", - "name": "NZGD2000 / New Zealand Transverse Mercator 2000", - "authorityId": "EPSG:2193", - "units": "m" + "ogc": { + "name": "NZGD2000 + NZVD2016 height", + "authorityId": "EPSG:9528", + "units": "m", + "crs-uri": "https://www.opengis.net/def/crs/EPSG/0/9528", + "wkt-crs": "COMPOUNDCRS[\"NZGD2000 + NZVD2016 height\",GEOGCRS[\"NZGD2000\",DATUM[\"New Zealand Geodetic Datum 2000\",ELLIPSOID[\"GRS 1980\",6378137,298.257222101,LENGTHUNIT[\"metre\",1]]],PRIMEM[\"Greenwich\",0,ANGLEUNIT[\"degree\",0.0174532925199433]],CS[ellipsoidal,2],AXIS[\"geodetic latitude (Lat)\",north,ORDER[1],ANGLEUNIT[\"degree\",0.0174532925199433]],AXIS[\"geodetic longitude (Lon)\",east,ORDER[2],ANGLEUNIT[\"degree\",0.0174532925199433]]],VERTCRS[\"NZVD2016 height\",VDATUM[\"New Zealand Vertical Datum 2016\"],CS[vertical,1],AXIS[\"gravity-related height (H)\",up,LENGTHUNIT[\"metre\",1]]],USAGE[SCOPE[\"Spatial referencing.\"],AREA[\"New Zealand - onshore and offshore. Includes Antipodes Islands, Auckland Islands, Bounty Islands, Chatham Islands, Cambell Island, Kermadec Islands, Raoul Island and Snares Islands.\"],BBOX[-55.95,160.6,-25.88,-171.2]],ID[\"EPSG\",9528]]", + "wkt-crs-iso": "ISO 19162:2019" } } }, From e4b1879915fe74cfc27d724de9b869cdc47b0cc4 Mon Sep 17 00:00:00 2001 From: Joost Gevaert Date: Tue, 1 Apr 2025 12:19:57 +0200 Subject: [PATCH 17/18] Change the tunnel names to more accurately describe their purpose --- Tunnel/WekaHills_Tunnels.ifcx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Tunnel/WekaHills_Tunnels.ifcx b/Tunnel/WekaHills_Tunnels.ifcx index 1bd1c91..8d8cb0b 100644 --- a/Tunnel/WekaHills_Tunnels.ifcx +++ b/Tunnel/WekaHills_Tunnels.ifcx @@ -41,14 +41,14 @@ "children": [ { "def": "def", - "name": "WesternTunnel", + "name": "NorthboundTunnel", "inherits": [ "" ] }, { "def": "def", - "name": "EasternTunnel", + "name": "SouthboundTunnel", "inherits": [ "" ] From 64c6ffe1242a15eee0365938b4bd01898f8bdb80 Mon Sep 17 00:00:00 2001 From: Joost Gevaert Date: Tue, 1 Apr 2025 12:21:10 +0200 Subject: [PATCH 18/18] Remove the geotechnical boreholes example from the georef branch --- Geotech/WekaHills_GI.ifcx | 800 -------------------------------------- 1 file changed, 800 deletions(-) delete mode 100644 Geotech/WekaHills_GI.ifcx diff --git a/Geotech/WekaHills_GI.ifcx b/Geotech/WekaHills_GI.ifcx deleted file mode 100644 index 0122607..0000000 --- a/Geotech/WekaHills_GI.ifcx +++ /dev/null @@ -1,800 +0,0 @@ -[ - { - "disclaimer": "2024-09-25 publication of the examples. (C) buildingSMART International. Published under CC BY-ND 4.0." - }, - { - "def": "class", - "type": "UsdGeom:Xform", - "name": "Ndd9e46015e7c4b59be0b1b98dfcadb74", - "children": [ - { - "def": "def", - "name": "WekaHills", - "inherits": [ - "" - ] - } - ] - }, - { - "def": "def", - "type": "UsdGeom:Xform", - "name": "WekaHillsLeapfrogDemo", - "inherits": [ - "" - ] - }, - { - "def": "over", - "name": "Ndd9e46015e7c4b59be0b1b98dfcadb74", - "attributes": { - "ifc5:class": { - "code": "IfcProject", - "uri": "https://identifier.buildingsmart.org/uri/buildingsmart/ifc/4.3/class/IfcProject" - } - } - }, - { - "def": "class", - "type": "UsdGeom:Xform", - "name": "N337e2116e7e24dd390ddbf2e42555fac", - "children": [ - { - "def": "def", - "name": "GroundInvestigation", - "inherits": [ - "" - ] - } - ] - }, - { - "def": "over", - "name": "N337e2116e7e24dd390ddbf2e42555fac", - "attributes": { - "ifc5:class": { - "code": "IfcSite", - "uri": "https://identifier.buildingsmart.org/uri/buildingsmart/ifc/4.3/class/IfcSite" - } - } - }, - { - "def": "class", - "type": "UsdGeom:Xform", - "name": "Ncaa536ea098a46158b24a0574ae17294", - "children": [ - { - "def": "def", - "name": "WH_009", - "inherits": [ - "" - ] - }, - { - "def": "def", - "name": "WH_012", - "inherits": [ - "" - ] - } - ] - }, - { - "def": "over", - "name": "Ncaa536ea098a46158b24a0574ae17294", - "attributes": { - "ifc5:class": { - "code": "IfcGroundInvestigation", - "comment": "IfcGroundInvestigation doesn't exist, but IfcGeotechnicalAssembly does exist, and is the parent of IfcBorehole in IFC 4.3. However, a 'Geotechnical Assembly' is not a common concept, whereas 'Ground Investigation' is.", - "uri": "https://identifier.buildingsmart.org/uri/buildingsmart/ifc/4.3/class/IfcGeotechnicalAssembly" - } - } - }, - { - "def": "class", - "type": "UsdGeom:Xform", - "name": "Nad68cd145a6b43fdb0232e0b11a6c7bc", - "children": [ - { - "def": "def", - "name": "GEOL", - "inherits": [ - "" - ] - } - ] - }, - { - "def": "over", - "name": "Nad68cd145a6b43fdb0232e0b11a6c7bc", - "attributes": { - "ifc5:class": { - "code": "IfcBorehole", - "uri": "https://identifier.buildingsmart.org/uri/buildingsmart/ifc/4.3/class/IfcBorehole" - } - } - }, - { - "def": "class", - "type": "UsdGeom:Xform", - "name": "Nd9114025e8e9454b8aa05d59e9d75cbd", - "children": [ - { - "def": "def", - "name": "Alluvium", - "inherits": [ - "" - ] - }, - { - "def": "def", - "name": "Siltstone", - "inherits": [ - "" - ] - } - ] - }, - { - "def": "class", - "type": "UsdGeom:Xform", - "name": "N7b6562e1261a4f9eacbbe3f56caa1b88", - "children": [ - { - "def": "def", - "type": "UsdGeom:BasisCurves", - "name": "LineString", - "inherits": [ - "" - ] - } - ] - }, - { - "def": "over", - "name": "N7b6562e1261a4f9eacbbe3f56caa1b88", - "attributes": { - "ifc5:class": { - "code": "IfcGeotechnicalStratum", - "uri": "https://identifier.buildingsmart.org/uri/buildingsmart/ifc/4.3/class/IfcGeotechnicalStratum" - } - } - }, - { - "def": "over", - "name": "N7b6562e1261a4f9eacbbe3f56caa1b88", - "attributes": { - "ifc5:properties": { - "description": "Weak thinly bedded brown fine-med grained sandy ALLUVIUM" - } - } - }, - { - "def": "over", - "name": "N7b6562e1261a4f9eacbbe3f56caa1b88", - "attributes": { - "ags4": { - "group": "GEOL", - "LOCA_ID": "WH_009", - "GEOL_TOP": 0, - "GEOL_BASE": 6.085, - "GEOL_DESC": "Weak thinly bedded brown fine-med grained sandy ALLUVIUM", - "GEOL_GEOL": "Alluvium" - } - } - }, - { - "def": "over", - "name": "N7b6562e1261a4f9eacbbe3f56caa1b88", - "attributes": { - "UsdShade:MaterialBindingAPI": { - "material:binding": { - "ref": "" - } - } - } - }, - { - "def": "class", - "type": "UsdGeom:BasisCurves", - "name": "N7b6562e1261a4f9eacbbe3f56caa1b88_LineString" - }, - { - "def": "over", - "name": "N7b6562e1261a4f9eacbbe3f56caa1b88_LineString", - "attributes": { - "UsdGeom:BasisCurves": { - "points": [ - [ - 1167046.628, - 4888785.276, - 502.8813831 - ], - [ - 1167046.628, - 4888785.276, - 496.7963831 - ] - ] - } - } - }, - { - "def": "class", - "type": "UsdGeom:Xform", - "name": "Nc627679f80254e4abab62e6f40bcb332", - "children": [ - { - "def": "def", - "type": "UsdGeom:BasisCurves", - "name": "LineString", - "inherits": [ - "" - ] - } - ] - }, - { - "def": "over", - "name": "Nc627679f80254e4abab62e6f40bcb332", - "attributes": { - "ifc5:class": { - "code": "IfcGeotechnicalStratum", - "uri": "https://identifier.buildingsmart.org/uri/buildingsmart/ifc/4.3/class/IfcGeotechnicalStratum" - } - } - }, - { - "def": "over", - "name": "Nc627679f80254e4abab62e6f40bcb332", - "attributes": { - "ifc5:properties": { - "description": "Med-strong medium bedded brown sandy SILTSTONE with occasional subangular to subrounded pebbles" - } - } - }, - { - "def": "over", - "name": "Nc627679f80254e4abab62e6f40bcb332", - "attributes": { - "ags4": { - "group": "GEOL", - "LOCA_ID": "WH_009", - "GEOL_TOP": 6.085, - "GEOL_BASE": 50, - "GEOL_DESC": "Med-strong medium bedded brown sandy SILTSTONE with occasional subangular to subrounded pebbles", - "GEOL_GEOL": "Siltstone" - } - } - }, - { - "def": "over", - "name": "Nc627679f80254e4abab62e6f40bcb332", - "attributes": { - "UsdShade:MaterialBindingAPI": { - "material:binding": { - "ref": "" - } - } - } - }, - { - "def": "class", - "type": "UsdGeom:BasisCurves", - "name": "Nc627679f80254e4abab62e6f40bcb332_LineString" - }, - { - "def": "over", - "name": "Nc627679f80254e4abab62e6f40bcb332_LineString", - "attributes": { - "UsdGeom:BasisCurves": { - "points": [ - [ - 1167046.628, - 4888785.276, - 496.7963831 - ], - [ - 1167046.628, - 4888785.276, - 452.8813831 - ] - ] - } - } - }, - { - "def": "class", - "type": "UsdGeom:Xform", - "name": "N996ff9e7b86240f898d4d038ab311d1b", - "children": [ - { - "def": "def", - "name": "GEOL", - "inherits": [ - "" - ] - } - ] - }, - { - "def": "over", - "name": "N996ff9e7b86240f898d4d038ab311d1b", - "attributes": { - "ifc5:class": { - "code": "IfcBorehole", - "uri": "https://identifier.buildingsmart.org/uri/buildingsmart/ifc/4.3/class/IfcBorehole" - } - } - }, - { - "def": "class", - "type": "UsdGeom:Xform", - "name": "Nefb42b81d3e147e4bb19723fb504655d", - "children": [ - { - "def": "def", - "name": "Alluvium_Sand", - "inherits": [ - "" - ] - }, - { - "def": "def", - "name": "Alluvium_Clay", - "inherits": [ - "" - ] - }, - { - "def": "def", - "name": "Siltstone", - "inherits": [ - "" - ] - }, - { - "def": "def", - "name": "Basement", - "inherits": [ - "" - ] - } - ] - }, - { - "def": "class", - "type": "UsdGeom:Xform", - "name": "N1548f2435d6444298da2dbb9529e424a", - "children": [ - { - "def": "def", - "type": "UsdGeom:BasisCurves", - "name": "LineString", - "inherits": [ - "" - ] - } - ] - }, - { - "def": "over", - "name": "N1548f2435d6444298da2dbb9529e424a", - "attributes": { - "ifc5:class": { - "code": "IfcGeotechnicalStratum", - "uri": "https://identifier.buildingsmart.org/uri/buildingsmart/ifc/4.3/class/IfcGeotechnicalStratum" - } - } - }, - { - "def": "over", - "name": "N1548f2435d6444298da2dbb9529e424a", - "attributes": { - "ifc5:properties": { - "description": "Very weak thinly bedded brown medium grained sand to gravel ALLUVIUM with fractures" - } - } - }, - { - "def": "over", - "name": "N1548f2435d6444298da2dbb9529e424a", - "attributes": { - "ags4": { - "group": "GEOL", - "LOCA_ID": "WH_012", - "GEOL_TOP": 0, - "GEOL_BASE": 32.841, - "GEOL_DESC": "Very weak thinly bedded brown medium grained sand to gravel ALLUVIUM with fractures", - "GEOL_GEOL": "Alluvium" - } - } - }, - { - "def": "over", - "name": "N1548f2435d6444298da2dbb9529e424a", - "attributes": { - "UsdShade:MaterialBindingAPI": { - "material:binding": { - "ref": "" - } - } - } - }, - { - "def": "class", - "type": "UsdGeom:BasisCurves", - "name": "N1548f2435d6444298da2dbb9529e424a_LineString" - }, - { - "def": "over", - "name": "N1548f2435d6444298da2dbb9529e424a_LineString", - "attributes": { - "UsdGeom:BasisCurves": { - "points": [ - [ - 1165777.32, - 4888011.236, - 563.4533858 - ], - [ - 1165777.32, - 4888011.236, - 530.6123858 - ] - ] - } - } - }, - { - "def": "class", - "type": "UsdGeom:Xform", - "name": "N20d9455fa8974a67825b2e86621b4d59", - "children": [ - { - "def": "def", - "type": "UsdGeom:BasisCurves", - "name": "LineString", - "inherits": [ - "" - ] - } - ] - }, - { - "def": "over", - "name": "N20d9455fa8974a67825b2e86621b4d59", - "attributes": { - "ifc5:class": { - "code": "IfcGeotechnicalStratum", - "uri": "https://identifier.buildingsmart.org/uri/buildingsmart/ifc/4.3/class/IfcGeotechnicalStratum" - } - } - }, - { - "def": "over", - "name": "N20d9455fa8974a67825b2e86621b4d59", - "attributes": { - "ifc5:properties": { - "description": "Very weak thinly bedded clay-fine sand ALLUVIUM with fractures" - } - } - }, - { - "def": "over", - "name": "N20d9455fa8974a67825b2e86621b4d59", - "attributes": { - "ags4": { - "group": "GEOL", - "LOCA_ID": "WH_012", - "GEOL_TOP": 32.841, - "GEOL_BASE": 43.847, - "GEOL_DESC": "Very weak thinly bedded clay-fine sand ALLUVIUM with fractures", - "GEOL_GEOL": "Alluvium" - } - } - }, - { - "def": "over", - "name": "N20d9455fa8974a67825b2e86621b4d59", - "attributes": { - "UsdShade:MaterialBindingAPI": { - "material:binding": { - "ref": "" - } - } - } - }, - { - "def": "class", - "type": "UsdGeom:BasisCurves", - "name": "N20d9455fa8974a67825b2e86621b4d59_LineString" - }, - { - "def": "over", - "name": "N20d9455fa8974a67825b2e86621b4d59_LineString", - "attributes": { - "UsdGeom:BasisCurves": { - "points": [ - [ - 1165777.32, - 4888011.236, - 530.6123858 - ], - [ - 1165777.32, - 4888011.236, - 519.6063858 - ] - ] - } - } - }, - { - "def": "class", - "type": "UsdGeom:Xform", - "name": "N2a637b43021645d2b80395253b761079", - "children": [ - { - "def": "def", - "type": "UsdGeom:BasisCurves", - "name": "LineString", - "inherits": [ - "" - ] - } - ] - }, - { - "def": "over", - "name": "N2a637b43021645d2b80395253b761079", - "attributes": { - "ifc5:class": { - "code": "IfcGeotechnicalStratum", - "uri": "https://identifier.buildingsmart.org/uri/buildingsmart/ifc/4.3/class/IfcGeotechnicalStratum" - } - } - }, - { - "def": "over", - "name": "N2a637b43021645d2b80395253b761079", - "attributes": { - "ifc5:properties": { - "description": "Med-strong medium bedded brown sandy SILTSTONE with occasional subangular to subrounded pebbles" - } - } - }, - { - "def": "over", - "name": "N2a637b43021645d2b80395253b761079", - "attributes": { - "ags4": { - "group": "GEOL", - "LOCA_ID": "WH_012", - "GEOL_TOP": 43.847, - "GEOL_BASE": 173.552, - "GEOL_DESC": "Med-strong medium bedded brown sandy SILTSTONE with occasional subangular to subrounded pebbles", - "GEOL_GEOL": "Siltstone" - } - } - }, - { - "def": "over", - "name": "N2a637b43021645d2b80395253b761079", - "attributes": { - "UsdShade:MaterialBindingAPI": { - "material:binding": { - "ref": "" - } - } - } - }, - { - "def": "class", - "type": "UsdGeom:BasisCurves", - "name": "N2a637b43021645d2b80395253b761079_LineString" - }, - { - "def": "over", - "name": "N2a637b43021645d2b80395253b761079_LineString", - "attributes": { - "UsdGeom:BasisCurves": { - "points": [ - [ - 1165777.32, - 4888011.236, - 519.6063858 - ], - [ - 1165777.32, - 4888011.236, - 389.90138579999996 - ] - ] - } - } - }, - { - "def": "class", - "type": "UsdGeom:Xform", - "name": "N48346d772d2f4fff8e47af6be729f2bd", - "children": [ - { - "def": "def", - "type": "UsdGeom:BasisCurves", - "name": "LineString", - "inherits": [ - "" - ] - } - ] - }, - { - "def": "over", - "name": "N48346d772d2f4fff8e47af6be729f2bd", - "attributes": { - "ifc5:class": { - "code": "IfcGeotechnicalStratum", - "uri": "https://identifier.buildingsmart.org/uri/buildingsmart/ifc/4.3/class/IfcGeotechnicalStratum" - } - } - }, - { - "def": "over", - "name": "N48346d772d2f4fff8e47af6be729f2bd", - "attributes": { - "ifc5:properties": { - "description": "Very strong folliated green schistose undifferentiated volcanic BASEMENT" - } - } - }, - { - "def": "over", - "name": "N48346d772d2f4fff8e47af6be729f2bd", - "attributes": { - "ags4": { - "group": "GEOL", - "LOCA_ID": "WH_012", - "GEOL_TOP": 173.552, - "GEOL_BASE": 300, - "GEOL_DESC": "Very strong folliated green schistose undifferentiated volcanic BASEMENT", - "GEOL_GEOL": "Basement" - } - } - }, - { - "def": "over", - "name": "N48346d772d2f4fff8e47af6be729f2bd", - "attributes": { - "UsdShade:MaterialBindingAPI": { - "material:binding": { - "ref": "" - } - } - } - }, - { - "def": "class", - "type": "UsdGeom:BasisCurves", - "name": "N48346d772d2f4fff8e47af6be729f2bd_LineString" - }, - { - "def": "over", - "name": "N48346d772d2f4fff8e47af6be729f2bd_LineString", - "attributes": { - "UsdGeom:BasisCurves": { - "points": [ - [ - 1165777.32, - 4888011.236, - 389.90138579999996 - ], - [ - 1165777.32, - 4888011.236, - 263.4533858 - ] - ] - } - } - }, - { - "def": "def", - "type": "UsdShade:Material", - "name": "AlluviumShaderMaterial", - "children": [ - { - "def": "def", - "type": "UsdShade:Shader", - "name": "Shader", - "attributes": { - "info:id": "UsdPreviewSurface", - "inputs:diffuseColor": [ - 1, - 0.835, - 0.02 - ], - "inputs:opacity": 1, - "outputs:surface": null - } - } - ] - }, - { - "def": "over", - "name": "AlluviumShaderMaterial", - "attributes": { - "UsdShade:Material": { - "outputs:surface.connect": { - "ref": "" - } - } - } - }, - { - "def": "def", - "type": "UsdShade:Material", - "name": "SiltstoneShaderMaterial", - "children": [ - { - "def": "def", - "type": "UsdShade:Shader", - "name": "Shader", - "attributes": { - "info:id": "UsdPreviewSurface", - "inputs:diffuseColor": [ - 0.3, - 0.6, - 0.45 - ], - "inputs:opacity": 1, - "outputs:surface": null - } - } - ] - }, - { - "def": "over", - "name": "SiltstoneShaderMaterial", - "attributes": { - "UsdShade:Material": { - "outputs:surface.connect": { - "ref": "" - } - } - } - }, - { - "def": "def", - "type": "UsdShade:Material", - "name": "GeologicalBasementShaderMaterial", - "children": [ - { - "def": "def", - "type": "UsdShade:Shader", - "name": "Shader", - "attributes": { - "info:id": "UsdPreviewSurface", - "inputs:diffuseColor": [ - 0.52, - 0.18, - 0.78 - ], - "inputs:opacity": 1, - "outputs:surface": null - } - } - ] - }, - { - "def": "over", - "name": "GeologicalBasementShaderMaterial", - "attributes": { - "UsdShade:Material": { - "outputs:surface.connect": { - "ref": "" - } - } - } - } -]