diff --git a/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/convert/ConverterRegistry.java b/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/convert/ConverterRegistry.java index 98d6de0b3..e7feac93c 100644 --- a/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/convert/ConverterRegistry.java +++ b/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/convert/ConverterRegistry.java @@ -37,6 +37,8 @@ public class ConverterRegistry { private final StringToColorConverter stringToColorConverter; private final StringToWireTypeConverter stringToWireTypeConverter; private final StringToMaterialConverter stringToMaterialConverter; + private final DoublesToCartesianVector2DConverter doublesToCartesianVector2DConverter; + private final DoublesToCartesianVector3DConverter doublesToCartesianVector3DConverter; public ConverterRegistry(final ConversionProperties conversionProperties) { Objects.requireNonNull(conversionProperties); @@ -47,6 +49,8 @@ public ConverterRegistry(final ConversionProperties conversionProperties) { conversionProperties.getDefaultWireTypeReferenceSystem()); stringToMaterialConverter = new StringToMaterialConverter( conversionProperties.getDefaultMaterialReferenceSystem()); + doublesToCartesianVector2DConverter = new DoublesToCartesianVector2DConverter(); + doublesToCartesianVector3DConverter = new DoublesToCartesianVector3DConverter(); } public Converter> getStringToLocalizedString() { @@ -64,4 +68,12 @@ public StringToWireTypeConverter getStringToWireTypeConverter() { public StringToMaterialConverter getStringToMaterialConverter() { return stringToMaterialConverter; } + + public DoublesToCartesianVector2DConverter getDoublesToCartesianVector2DConverter() { + return doublesToCartesianVector2DConverter; + } + + public DoublesToCartesianVector3DConverter getDoublesToCartesianVector3DConverter() { + return doublesToCartesianVector3DConverter; + } } diff --git a/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/convert/DoublesToCartesianVector2DConverter.java b/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/convert/DoublesToCartesianVector2DConverter.java new file mode 100644 index 000000000..fa423b077 --- /dev/null +++ b/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/convert/DoublesToCartesianVector2DConverter.java @@ -0,0 +1,47 @@ +/*- + * ========================LICENSE_START================================= + * KBL to VEC Converter + * %% + * Copyright (C) 2025 4Soft GmbH + * %% + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * =========================LICENSE_END================================== + */ +package com.foursoft.harness.kbl2vec.convert; + +import com.foursoft.harness.vec.v2x.VecCartesianVector2D; + +import java.util.List; +import java.util.Optional; + +import static com.foursoft.harness.kbl2vec.utils.ListUtils.getElementOrDefault; + +public class DoublesToCartesianVector2DConverter implements Converter, Optional> { + + @Override + public Optional convert(final List source) { + if (source == null || source.isEmpty()) { + return Optional.empty(); + } + final VecCartesianVector2D destination = new VecCartesianVector2D(); + destination.setX(getElementOrDefault(source, 0, 0.0)); + destination.setY(getElementOrDefault(source, 1, 0.0)); + return Optional.of(destination); + } +} diff --git a/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/convert/DoublesToCartesianVector3DConverter.java b/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/convert/DoublesToCartesianVector3DConverter.java new file mode 100644 index 000000000..5aeda4123 --- /dev/null +++ b/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/convert/DoublesToCartesianVector3DConverter.java @@ -0,0 +1,48 @@ +/*- + * ========================LICENSE_START================================= + * KBL to VEC Converter + * %% + * Copyright (C) 2025 4Soft GmbH + * %% + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * =========================LICENSE_END================================== + */ +package com.foursoft.harness.kbl2vec.convert; + +import com.foursoft.harness.vec.v2x.VecCartesianVector3D; + +import java.util.List; +import java.util.Optional; + +import static com.foursoft.harness.kbl2vec.utils.ListUtils.getElementOrDefault; + +public class DoublesToCartesianVector3DConverter implements Converter, Optional> { + + @Override + public Optional convert(final List source) { + if (source == null || source.isEmpty()) { + return Optional.empty(); + } + final VecCartesianVector3D destination = new VecCartesianVector3D(); + destination.setX(getElementOrDefault(source, 0, 0.0)); + destination.setY(getElementOrDefault(source, 1, 0.0)); + destination.setZ(getElementOrDefault(source, 2, 0.0)); + return Optional.of(destination); + } +} diff --git a/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/geometry/GeometryDimensionDetector.java b/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/geometry/GeometryDimensionDetector.java new file mode 100644 index 000000000..1c7abbc3e --- /dev/null +++ b/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/geometry/GeometryDimensionDetector.java @@ -0,0 +1,55 @@ +/*- + * ========================LICENSE_START================================= + * KBL to VEC Converter + * %% + * Copyright (C) 2025 4Soft GmbH + * %% + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * =========================LICENSE_END================================== + */ +package com.foursoft.harness.kbl2vec.transform.geometry; + +import com.foursoft.harness.kbl.v25.KblCartesianPoint; + +import java.util.List; + +public class GeometryDimensionDetector { + public static final int GEO_2D = 2; + public static final int GEO_3D = 3; + + private GeometryDimensionDetector() { + } + + public static boolean hasDimensions(final KblCartesianPoint vector, final int numOfDimensions) { + return hasDimensions(vector.getCoordinates(), numOfDimensions); + } + + public static boolean hasDimensions(final List vectors, final int numOfDimensions) { + if (vectors == null || vectors.isEmpty()) { + return false; + } + final Object first = vectors.get(0); + if (first instanceof Double) { + return vectors.size() == numOfDimensions; + } else if (first instanceof final KblCartesianPoint cartesianPoint) { + return hasDimensions(cartesianPoint, numOfDimensions); + } + return false; + } +} diff --git a/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_2d/BuildingBlockPositioning2DTransformer.java b/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_2d/BuildingBlockPositioning2DTransformer.java new file mode 100644 index 000000000..77c510012 --- /dev/null +++ b/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_2d/BuildingBlockPositioning2DTransformer.java @@ -0,0 +1,48 @@ +/*- + * ========================LICENSE_START================================= + * KBL to VEC Converter + * %% + * Copyright (C) 2025 4Soft GmbH + * %% + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * =========================LICENSE_END================================== + */ +package com.foursoft.harness.kbl2vec.transform.geometry.geo_2d; + +import com.foursoft.harness.kbl.v25.KblHarness; +import com.foursoft.harness.kbl2vec.core.Query; +import com.foursoft.harness.kbl2vec.core.TransformationContext; +import com.foursoft.harness.kbl2vec.core.TransformationResult; +import com.foursoft.harness.kbl2vec.core.Transformer; +import com.foursoft.harness.vec.v2x.VecBuildingBlockPositioning2D; +import com.foursoft.harness.vec.v2x.VecBuildingBlockSpecification2D; + +public class BuildingBlockPositioning2DTransformer implements Transformer { + + @Override + public TransformationResult transform(final TransformationContext context, + final KblHarness source) { + final VecBuildingBlockPositioning2D destination = new VecBuildingBlockPositioning2D(); + + return TransformationResult.from(destination) + .withLinker(Query.of(source), VecBuildingBlockSpecification2D.class, + VecBuildingBlockPositioning2D::setReferenced2DBuildingBlock) + .build(); + } +} diff --git a/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_2d/BuildingBlockSpecification2DTransformer.java b/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_2d/BuildingBlockSpecification2DTransformer.java new file mode 100644 index 000000000..4ecb1507d --- /dev/null +++ b/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_2d/BuildingBlockSpecification2DTransformer.java @@ -0,0 +1,68 @@ +/*- + * ========================LICENSE_START================================= + * KBL to VEC Converter + * %% + * Copyright (C) 2025 4Soft GmbH + * %% + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * =========================LICENSE_END================================== + */ +package com.foursoft.harness.kbl2vec.transform.geometry.geo_2d; + +import com.foursoft.harness.kbl.v25.KblCartesianPoint; +import com.foursoft.harness.kbl.v25.KblHarness; +import com.foursoft.harness.kbl.v25.KblNode; +import com.foursoft.harness.kbl.v25.KblSegment; +import com.foursoft.harness.kbl2vec.core.Query; +import com.foursoft.harness.kbl2vec.core.TransformationContext; +import com.foursoft.harness.kbl2vec.core.TransformationResult; +import com.foursoft.harness.kbl2vec.core.Transformer; +import com.foursoft.harness.kbl2vec.transform.geometry.GeometryDimensionDetector; +import com.foursoft.harness.vec.v2x.VecBuildingBlockSpecification2D; +import com.foursoft.harness.vec.v2x.VecCartesianPoint2D; +import com.foursoft.harness.vec.v2x.VecGeometryNode2D; +import com.foursoft.harness.vec.v2x.VecGeometrySegment2D; + +public class BuildingBlockSpecification2DTransformer + implements Transformer { + + @Override + public TransformationResult transform(final TransformationContext context, + final KblHarness source) { + final VecBuildingBlockSpecification2D destination = new VecBuildingBlockSpecification2D(); + + if (!GeometryDimensionDetector.hasDimensions(source.getParentKBLContainer().getCartesianPoints(), + GeometryDimensionDetector.GEO_2D)) { + return TransformationResult.noResult(); + } + context.getLogger().info("Detected 2D data. Creating 2D building block specification."); + + return TransformationResult.from(destination) + .withDownstream(KblNode.class, VecGeometryNode2D.class, + Query.fromLists(source.getParentKBLContainer().getNodes()), + VecBuildingBlockSpecification2D::getGeometryNodes) + .withDownstream(KblCartesianPoint.class, VecCartesianPoint2D.class, + Query.fromLists(source.getParentKBLContainer().getCartesianPoints()), + VecBuildingBlockSpecification2D::getCartesianPoints) + .withDownstream(KblSegment.class, VecGeometrySegment2D.class, + Query.fromLists(source.getParentKBLContainer().getSegments()), + VecBuildingBlockSpecification2D::getGeometrySegments) + .build(); + } +} diff --git a/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_2d/CartesianPoint2DTransformer.java b/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_2d/CartesianPoint2DTransformer.java new file mode 100644 index 000000000..528975530 --- /dev/null +++ b/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_2d/CartesianPoint2DTransformer.java @@ -0,0 +1,63 @@ +/*- + * ========================LICENSE_START================================= + * KBL to VEC Converter + * %% + * Copyright (C) 2025 4Soft GmbH + * %% + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * =========================LICENSE_END================================== + */ +package com.foursoft.harness.kbl2vec.transform.geometry.geo_2d; + +import com.foursoft.harness.kbl.v25.KblCartesianPoint; +import com.foursoft.harness.kbl2vec.core.TransformationContext; +import com.foursoft.harness.kbl2vec.core.TransformationResult; +import com.foursoft.harness.kbl2vec.core.Transformer; +import com.foursoft.harness.kbl2vec.transform.geometry.GeometryDimensionDetector; +import com.foursoft.harness.vec.v2x.VecCartesianPoint2D; + +import java.util.List; + +import static com.foursoft.harness.kbl2vec.utils.ListUtils.getElementOrDefault; + +public class CartesianPoint2DTransformer implements Transformer { + + @Override + public TransformationResult transform(final TransformationContext context, + final KblCartesianPoint source) { + final VecCartesianPoint2D destination = new VecCartesianPoint2D(); + + final List coordinates = source.getCoordinates(); + if (source.getCoordinates().isEmpty()) { + return TransformationResult.noResult(); + } + + if (!GeometryDimensionDetector.hasDimensions(source, GeometryDimensionDetector.GEO_2D)) { + context.getLogger().warn( + "Unexpected format for KblCartesianPoint (xmlId: {}). Expected 2 coordinates for 2D " + + "transformation, but found {}: {}", + source.getXmlId(), source.getCoordinates().size(), source.getCoordinates()); + } + + destination.setX(getElementOrDefault(coordinates, 0, 0.0)); + destination.setY(getElementOrDefault(coordinates, 1, 0.0)); + + return TransformationResult.of(destination); + } +} diff --git a/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_2d/GeometryNode2DTransformer.java b/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_2d/GeometryNode2DTransformer.java new file mode 100644 index 000000000..c225e5eca --- /dev/null +++ b/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_2d/GeometryNode2DTransformer.java @@ -0,0 +1,55 @@ +/*- + * ========================LICENSE_START================================= + * KBL to VEC Converter + * %% + * Copyright (C) 2025 4Soft GmbH + * %% + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * =========================LICENSE_END================================== + */ +package com.foursoft.harness.kbl2vec.transform.geometry.geo_2d; + +import com.foursoft.harness.kbl.v25.KblAliasIdentification; +import com.foursoft.harness.kbl.v25.KblNode; +import com.foursoft.harness.kbl2vec.core.Query; +import com.foursoft.harness.kbl2vec.core.TransformationContext; +import com.foursoft.harness.kbl2vec.core.TransformationResult; +import com.foursoft.harness.kbl2vec.core.Transformer; +import com.foursoft.harness.vec.v2x.VecAliasIdentification; +import com.foursoft.harness.vec.v2x.VecCartesianPoint2D; +import com.foursoft.harness.vec.v2x.VecGeometryNode2D; +import com.foursoft.harness.vec.v2x.VecTopologyNode; + +public class GeometryNode2DTransformer implements Transformer { + + @Override + public TransformationResult transform(final TransformationContext context, + final KblNode source) { + final VecGeometryNode2D destination = new VecGeometryNode2D(); + destination.setIdentification(source.getId()); + + return TransformationResult.from(destination) + .withDownstream(KblAliasIdentification.class, VecAliasIdentification.class, source::getAliasIds, + VecGeometryNode2D::getAliasIds) + .withLinker(Query.of(source.getCartesianPoint()), VecCartesianPoint2D.class, + VecGeometryNode2D::setCartesianPoint) + .withLinker(Query.of(source), VecTopologyNode.class, VecGeometryNode2D::setReferenceNode) + .build(); + } +} diff --git a/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_2d/GeometrySegment2DTransformer.java b/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_2d/GeometrySegment2DTransformer.java new file mode 100644 index 000000000..220beb2dd --- /dev/null +++ b/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_2d/GeometrySegment2DTransformer.java @@ -0,0 +1,77 @@ +/*- + * ========================LICENSE_START================================= + * KBL to VEC Converter + * %% + * Copyright (C) 2025 4Soft GmbH + * %% + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * =========================LICENSE_END================================== + */ +package com.foursoft.harness.kbl2vec.transform.geometry.geo_2d; + +import com.foursoft.harness.kbl.v25.KblAliasIdentification; +import com.foursoft.harness.kbl.v25.KblSegment; +import com.foursoft.harness.kbl2vec.convert.DoublesToCartesianVector2DConverter; +import com.foursoft.harness.kbl2vec.core.Query; +import com.foursoft.harness.kbl2vec.core.TransformationContext; +import com.foursoft.harness.kbl2vec.core.TransformationResult; +import com.foursoft.harness.kbl2vec.core.Transformer; +import com.foursoft.harness.kbl2vec.transform.geometry.GeometryDimensionDetector; +import com.foursoft.harness.vec.v2x.VecAliasIdentification; +import com.foursoft.harness.vec.v2x.VecGeometryNode2D; +import com.foursoft.harness.vec.v2x.VecGeometrySegment2D; +import com.foursoft.harness.vec.v2x.VecTopologySegment; + +public class GeometrySegment2DTransformer implements Transformer { + + @Override + public TransformationResult transform(final TransformationContext context, + final KblSegment source) { + final VecGeometrySegment2D destination = new VecGeometrySegment2D(); + destination.setIdentification(source.getId()); + + if (!GeometryDimensionDetector.hasDimensions(source.getStartVectors(), GeometryDimensionDetector.GEO_2D)) { + context.getLogger().warn( + "Unexpected format for start vectors of KblSegment (ID: {}). Expected 2 coordinates for 2D " + + "transformation, but found {}: {}", + source.getId(), source.getStartVectors().size(), source.getStartVectors()); + } + + if (!GeometryDimensionDetector.hasDimensions(source.getEndVectors(), GeometryDimensionDetector.GEO_2D)) { + context.getLogger().warn( + "Unexpected format for end vectors of KblSegment (ID: {}). Expected 2 coordinates for 2D " + + "transformation, but found {}: {}", + source.getId(), source.getEndVectors().size(), source.getEndVectors()); + } + + final DoublesToCartesianVector2DConverter converter = + context.getConverterRegistry().getDoublesToCartesianVector2DConverter(); + converter.convert(source.getStartVectors()).ifPresent(destination::setStartVector); + converter.convert(source.getEndVectors()).ifPresent(destination::setEndVector); + + return TransformationResult.from(destination) + .withDownstream(KblAliasIdentification.class, VecAliasIdentification.class, source::getAliasIds, + VecGeometrySegment2D::getAliasIds) + .withLinker(Query.of(source.getStartNode()), VecGeometryNode2D.class, + VecGeometrySegment2D::setStartNode) + .withLinker(Query.of(source.getEndNode()), VecGeometryNode2D.class, VecGeometrySegment2D::setEndNode) + .withLinker(Query.of(source), VecTopologySegment.class, VecGeometrySegment2D::setReferenceSegment) + .build(); + } +} diff --git a/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_2d/HarnessDrawingSpecification2DTransformer.java b/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_2d/HarnessDrawingSpecification2DTransformer.java new file mode 100644 index 000000000..10f57e36d --- /dev/null +++ b/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_2d/HarnessDrawingSpecification2DTransformer.java @@ -0,0 +1,57 @@ +/*- + * ========================LICENSE_START================================= + * KBL to VEC Converter + * %% + * Copyright (C) 2025 4Soft GmbH + * %% + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * =========================LICENSE_END================================== + */ +package com.foursoft.harness.kbl2vec.transform.geometry.geo_2d; + +import com.foursoft.harness.kbl.v25.KblHarness; +import com.foursoft.harness.kbl2vec.core.Query; +import com.foursoft.harness.kbl2vec.core.TransformationContext; +import com.foursoft.harness.kbl2vec.core.TransformationResult; +import com.foursoft.harness.kbl2vec.core.Transformer; +import com.foursoft.harness.kbl2vec.transform.geometry.GeometryDimensionDetector; +import com.foursoft.harness.vec.v2x.VecBuildingBlockPositioning2D; +import com.foursoft.harness.vec.v2x.VecHarnessDrawingSpecification2D; + +public class HarnessDrawingSpecification2DTransformer + implements Transformer { + + @Override + public TransformationResult transform(final TransformationContext context, + final KblHarness source) { + final VecHarnessDrawingSpecification2D destination = new VecHarnessDrawingSpecification2D(); + destination.setIdentification("DRAWING"); + + if (!GeometryDimensionDetector.hasDimensions(source.getParentKBLContainer().getCartesianPoints(), + GeometryDimensionDetector.GEO_2D)) { + return TransformationResult.noResult(); + } + context.getLogger().info("Detected 2D data. Creating 2D drawing specification."); + + return TransformationResult.from(destination) + .withDownstream(KblHarness.class, VecBuildingBlockPositioning2D.class, Query.of(source), + VecHarnessDrawingSpecification2D::getBuildingBlockPositionings) + .build(); + } +} diff --git a/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_3d/BuildingBlockPositioning3DTransformer.java b/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_3d/BuildingBlockPositioning3DTransformer.java new file mode 100644 index 000000000..d6cd64fcb --- /dev/null +++ b/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_3d/BuildingBlockPositioning3DTransformer.java @@ -0,0 +1,48 @@ +/*- + * ========================LICENSE_START================================= + * KBL to VEC Converter + * %% + * Copyright (C) 2025 4Soft GmbH + * %% + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * =========================LICENSE_END================================== + */ +package com.foursoft.harness.kbl2vec.transform.geometry.geo_3d; + +import com.foursoft.harness.kbl.v25.KblHarness; +import com.foursoft.harness.kbl2vec.core.Query; +import com.foursoft.harness.kbl2vec.core.TransformationContext; +import com.foursoft.harness.kbl2vec.core.TransformationResult; +import com.foursoft.harness.kbl2vec.core.Transformer; +import com.foursoft.harness.vec.v2x.VecBuildingBlockPositioning3D; +import com.foursoft.harness.vec.v2x.VecBuildingBlockSpecification3D; + +public class BuildingBlockPositioning3DTransformer implements Transformer { + + @Override + public TransformationResult transform(final TransformationContext context, + final KblHarness source) { + final VecBuildingBlockPositioning3D destination = new VecBuildingBlockPositioning3D(); + + return TransformationResult.from(destination) + .withLinker(Query.of(source), VecBuildingBlockSpecification3D.class, + VecBuildingBlockPositioning3D::setReferenced3DBuildingBlock) + .build(); + } +} diff --git a/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_3d/BuildingBlockSpecification3DTransformer.java b/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_3d/BuildingBlockSpecification3DTransformer.java new file mode 100644 index 000000000..88d0bbbee --- /dev/null +++ b/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_3d/BuildingBlockSpecification3DTransformer.java @@ -0,0 +1,68 @@ +/*- + * ========================LICENSE_START================================= + * KBL to VEC Converter + * %% + * Copyright (C) 2025 4Soft GmbH + * %% + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * =========================LICENSE_END================================== + */ +package com.foursoft.harness.kbl2vec.transform.geometry.geo_3d; + +import com.foursoft.harness.kbl.v25.KblCartesianPoint; +import com.foursoft.harness.kbl.v25.KblHarness; +import com.foursoft.harness.kbl.v25.KblNode; +import com.foursoft.harness.kbl.v25.KblSegment; +import com.foursoft.harness.kbl2vec.core.Query; +import com.foursoft.harness.kbl2vec.core.TransformationContext; +import com.foursoft.harness.kbl2vec.core.TransformationResult; +import com.foursoft.harness.kbl2vec.core.Transformer; +import com.foursoft.harness.kbl2vec.transform.geometry.GeometryDimensionDetector; +import com.foursoft.harness.vec.v2x.VecBuildingBlockSpecification3D; +import com.foursoft.harness.vec.v2x.VecCartesianPoint3D; +import com.foursoft.harness.vec.v2x.VecGeometryNode3D; +import com.foursoft.harness.vec.v2x.VecGeometrySegment3D; + +public class BuildingBlockSpecification3DTransformer + implements Transformer { + + @Override + public TransformationResult transform(final TransformationContext context, + final KblHarness source) { + final VecBuildingBlockSpecification3D destination = new VecBuildingBlockSpecification3D(); + + if (!GeometryDimensionDetector.hasDimensions(source.getParentKBLContainer().getCartesianPoints(), + GeometryDimensionDetector.GEO_3D)) { + return TransformationResult.noResult(); + } + context.getLogger().info("Detected 3D data. Creating 3D building block specification."); + + return TransformationResult.from(destination) + .withDownstream(KblNode.class, VecGeometryNode3D.class, + Query.fromLists(source.getParentKBLContainer().getNodes()), + VecBuildingBlockSpecification3D::getGeometryNodes) + .withDownstream(KblCartesianPoint.class, VecCartesianPoint3D.class, + Query.fromLists(source.getParentKBLContainer().getCartesianPoints()), + VecBuildingBlockSpecification3D::getCartesianPoints) + .withDownstream(KblSegment.class, VecGeometrySegment3D.class, + Query.fromLists(source.getParentKBLContainer().getSegments()), + VecBuildingBlockSpecification3D::getGeometrySegments) + .build(); + } +} diff --git a/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_3d/CartesianPoint3DTransformer.java b/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_3d/CartesianPoint3DTransformer.java new file mode 100644 index 000000000..03b2a8612 --- /dev/null +++ b/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_3d/CartesianPoint3DTransformer.java @@ -0,0 +1,64 @@ +/*- + * ========================LICENSE_START================================= + * KBL to VEC Converter + * %% + * Copyright (C) 2025 4Soft GmbH + * %% + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * =========================LICENSE_END================================== + */ +package com.foursoft.harness.kbl2vec.transform.geometry.geo_3d; + +import com.foursoft.harness.kbl.v25.KblCartesianPoint; +import com.foursoft.harness.kbl2vec.core.TransformationContext; +import com.foursoft.harness.kbl2vec.core.TransformationResult; +import com.foursoft.harness.kbl2vec.core.Transformer; +import com.foursoft.harness.kbl2vec.transform.geometry.GeometryDimensionDetector; +import com.foursoft.harness.vec.v2x.VecCartesianPoint3D; + +import java.util.List; + +import static com.foursoft.harness.kbl2vec.utils.ListUtils.getElementOrDefault; + +public class CartesianPoint3DTransformer implements Transformer { + + @Override + public TransformationResult transform(final TransformationContext context, + final KblCartesianPoint source) { + final VecCartesianPoint3D destination = new VecCartesianPoint3D(); + + final List coordinates = source.getCoordinates(); + if (source.getCoordinates().isEmpty()) { + return TransformationResult.noResult(); + } + + if (!GeometryDimensionDetector.hasDimensions(source, GeometryDimensionDetector.GEO_3D)) { + context.getLogger().warn( + "Unexpected format for KblCartesianPoint (xmlId: {}). Expected 3 coordinates for 3D " + + "transformation, but found {}: {}", + source.getXmlId(), source.getCoordinates().size(), source.getCoordinates()); + } + + destination.setX(getElementOrDefault(coordinates, 0, 0.0)); + destination.setY(getElementOrDefault(coordinates, 1, 0.0)); + destination.setZ(getElementOrDefault(coordinates, 2, 0.0)); + + return TransformationResult.of(destination); + } +} diff --git a/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_3d/GeometryNode3DTransformer.java b/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_3d/GeometryNode3DTransformer.java new file mode 100644 index 000000000..eb2660a0d --- /dev/null +++ b/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_3d/GeometryNode3DTransformer.java @@ -0,0 +1,55 @@ +/*- + * ========================LICENSE_START================================= + * KBL to VEC Converter + * %% + * Copyright (C) 2025 4Soft GmbH + * %% + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * =========================LICENSE_END================================== + */ +package com.foursoft.harness.kbl2vec.transform.geometry.geo_3d; + +import com.foursoft.harness.kbl.v25.KblAliasIdentification; +import com.foursoft.harness.kbl.v25.KblNode; +import com.foursoft.harness.kbl2vec.core.Query; +import com.foursoft.harness.kbl2vec.core.TransformationContext; +import com.foursoft.harness.kbl2vec.core.TransformationResult; +import com.foursoft.harness.kbl2vec.core.Transformer; +import com.foursoft.harness.vec.v2x.VecAliasIdentification; +import com.foursoft.harness.vec.v2x.VecCartesianPoint3D; +import com.foursoft.harness.vec.v2x.VecGeometryNode3D; +import com.foursoft.harness.vec.v2x.VecTopologyNode; + +public class GeometryNode3DTransformer implements Transformer { + + @Override + public TransformationResult transform(final TransformationContext context, + final KblNode source) { + final VecGeometryNode3D destination = new VecGeometryNode3D(); + destination.setIdentification(source.getId()); + + return TransformationResult.from(destination) + .withDownstream(KblAliasIdentification.class, VecAliasIdentification.class, source::getAliasIds, + VecGeometryNode3D::getAliasIds) + .withLinker(Query.of(source.getCartesianPoint()), VecCartesianPoint3D.class, + VecGeometryNode3D::setCartesianPoint) + .withLinker(Query.of(source), VecTopologyNode.class, VecGeometryNode3D::setReferenceNode) + .build(); + } +} diff --git a/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_3d/GeometrySegment3DTransformer.java b/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_3d/GeometrySegment3DTransformer.java new file mode 100644 index 000000000..a54a97d59 --- /dev/null +++ b/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_3d/GeometrySegment3DTransformer.java @@ -0,0 +1,77 @@ +/*- + * ========================LICENSE_START================================= + * KBL to VEC Converter + * %% + * Copyright (C) 2025 4Soft GmbH + * %% + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * =========================LICENSE_END================================== + */ +package com.foursoft.harness.kbl2vec.transform.geometry.geo_3d; + +import com.foursoft.harness.kbl.v25.KblAliasIdentification; +import com.foursoft.harness.kbl.v25.KblSegment; +import com.foursoft.harness.kbl2vec.convert.DoublesToCartesianVector3DConverter; +import com.foursoft.harness.kbl2vec.core.Query; +import com.foursoft.harness.kbl2vec.core.TransformationContext; +import com.foursoft.harness.kbl2vec.core.TransformationResult; +import com.foursoft.harness.kbl2vec.core.Transformer; +import com.foursoft.harness.kbl2vec.transform.geometry.GeometryDimensionDetector; +import com.foursoft.harness.vec.v2x.VecAliasIdentification; +import com.foursoft.harness.vec.v2x.VecGeometryNode3D; +import com.foursoft.harness.vec.v2x.VecGeometrySegment3D; +import com.foursoft.harness.vec.v2x.VecTopologySegment; + +public class GeometrySegment3DTransformer implements Transformer { + + @Override + public TransformationResult transform(final TransformationContext context, + final KblSegment source) { + final VecGeometrySegment3D destination = new VecGeometrySegment3D(); + destination.setIdentification(source.getId()); + + if (!GeometryDimensionDetector.hasDimensions(source.getStartVectors(), GeometryDimensionDetector.GEO_3D)) { + context.getLogger().warn( + "Unexpected format for start vectors of KblSegment (ID: {}). Expected 2 coordinates for 2D " + + "transformation, but found {}: {}", + source.getId(), source.getStartVectors().size(), source.getStartVectors()); + } + + if (!GeometryDimensionDetector.hasDimensions(source.getEndVectors(), GeometryDimensionDetector.GEO_3D)) { + context.getLogger().warn( + "Unexpected format for end vectors of KblSegment (ID: {}). Expected 2 coordinates for 2D " + + "transformation, but found {}: {}", + source.getId(), source.getEndVectors().size(), source.getEndVectors()); + } + + final DoublesToCartesianVector3DConverter converter = + context.getConverterRegistry().getDoublesToCartesianVector3DConverter(); + converter.convert(source.getStartVectors()).ifPresent(destination::setStartVector); + converter.convert(source.getEndVectors()).ifPresent(destination::setEndVector); + + return TransformationResult.from(destination) + .withDownstream(KblAliasIdentification.class, VecAliasIdentification.class, source::getAliasIds, + VecGeometrySegment3D::getAliasIds) + .withLinker(Query.of(source.getStartNode()), VecGeometryNode3D.class, + VecGeometrySegment3D::setStartNode) + .withLinker(Query.of(source.getEndNode()), VecGeometryNode3D.class, VecGeometrySegment3D::setEndNode) + .withLinker(Query.of(source), VecTopologySegment.class, VecGeometrySegment3D::setReferenceSegment) + .build(); + } +} diff --git a/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_3d/HarnessGeometrySpecification3DTransformer.java b/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_3d/HarnessGeometrySpecification3DTransformer.java new file mode 100644 index 000000000..855afdadf --- /dev/null +++ b/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_3d/HarnessGeometrySpecification3DTransformer.java @@ -0,0 +1,58 @@ +/*- + * ========================LICENSE_START================================= + * KBL to VEC Converter + * %% + * Copyright (C) 2025 4Soft GmbH + * %% + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * =========================LICENSE_END================================== + */ +package com.foursoft.harness.kbl2vec.transform.geometry.geo_3d; + +import com.foursoft.harness.kbl.v25.KblHarness; +import com.foursoft.harness.kbl2vec.core.Query; +import com.foursoft.harness.kbl2vec.core.TransformationContext; +import com.foursoft.harness.kbl2vec.core.TransformationResult; +import com.foursoft.harness.kbl2vec.core.Transformer; +import com.foursoft.harness.kbl2vec.transform.geometry.GeometryDimensionDetector; +import com.foursoft.harness.vec.v2x.VecBuildingBlockPositioning3D; +import com.foursoft.harness.vec.v2x.VecHarnessGeometrySpecification3D; + +public class HarnessGeometrySpecification3DTransformer + implements Transformer { + + @Override + public TransformationResult transform(final TransformationContext context, + final KblHarness source) { + final VecHarnessGeometrySpecification3D destination = new VecHarnessGeometrySpecification3D(); + destination.setIdentification("GEOMETRY"); + + if (!GeometryDimensionDetector.hasDimensions(source.getParentKBLContainer().getCartesianPoints(), + GeometryDimensionDetector.GEO_3D)) { + return TransformationResult.noResult(); + } + context.getLogger().info("Detected 3D data. Creating 3D geometry specification."); + + destination.setType("Dmu"); + return TransformationResult.from(destination) + .withDownstream(KblHarness.class, VecBuildingBlockPositioning3D.class, Query.of(source), + VecHarnessGeometrySpecification3D::getBuildingBlockPositionings) + .build(); + } +} diff --git a/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/harness/HarnessDocumentVersionTransformer.java b/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/harness/HarnessDocumentVersionTransformer.java index 2efff87a5..2cc48107c 100644 --- a/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/harness/HarnessDocumentVersionTransformer.java +++ b/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/harness/HarnessDocumentVersionTransformer.java @@ -56,6 +56,14 @@ public TransformationResult transform(final TransformationCo VecDocumentVersion::getSpecifications) .withDownstream(KblHarness.class, VecConfigurationConstraintSpecification.class, Query.of(source), VecDocumentVersion::getSpecifications) + .withDownstream(KblHarness.class, VecHarnessDrawingSpecification2D.class, Query.of(source), + VecDocumentVersion::getSpecifications) + .withDownstream(KblHarness.class, VecHarnessGeometrySpecification3D.class, Query.of(source), + VecDocumentVersion::getSpecifications) + .withDownstream(KblHarness.class, VecBuildingBlockSpecification2D.class, Query.of(source), + VecDocumentVersion::getSpecifications) + .withDownstream(KblHarness.class, VecBuildingBlockSpecification3D.class, Query.of(source), + VecDocumentVersion::getSpecifications) .withDownstream(KblHarness.class, VecRoutingSpecification.class, Query.of(source), VecDocumentVersion::getSpecifications) // Modules diff --git a/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/topology/geometry/SegmentCrossSectionAreaTransformer.java b/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/topology/SegmentCrossSectionAreaTransformer.java similarity index 97% rename from kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/topology/geometry/SegmentCrossSectionAreaTransformer.java rename to kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/topology/SegmentCrossSectionAreaTransformer.java index c396896c2..90241b965 100644 --- a/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/topology/geometry/SegmentCrossSectionAreaTransformer.java +++ b/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/transform/topology/SegmentCrossSectionAreaTransformer.java @@ -23,7 +23,7 @@ * THE SOFTWARE. * =========================LICENSE_END================================== */ -package com.foursoft.harness.kbl2vec.transform.topology.geometry; +package com.foursoft.harness.kbl2vec.transform.topology; import com.foursoft.harness.kbl.v25.KblCrossSectionArea; import com.foursoft.harness.kbl.v25.KblNumericalValue; diff --git a/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/utils/ListUtils.java b/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/utils/ListUtils.java new file mode 100644 index 000000000..06579758b --- /dev/null +++ b/kbl2vec/src/main/java/com/foursoft/harness/kbl2vec/utils/ListUtils.java @@ -0,0 +1,42 @@ +/*- + * ========================LICENSE_START================================= + * KBL to VEC Converter + * %% + * Copyright (C) 2025 4Soft GmbH + * %% + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * =========================LICENSE_END================================== + */ +package com.foursoft.harness.kbl2vec.utils; + +import java.util.List; + +public final class ListUtils { + + private ListUtils() { + throw new AssertionError("Utility class allows no instantiation."); + } + + public static T getElementOrDefault(final List list, final int index, final T defaultValue) { + if (list == null || index >= list.size() || list.get(index) == null) { + return defaultValue; + } + return list.get(index); + } +} diff --git a/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/__snapshots__/KblToVecConverterTest.snap b/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/__snapshots__/KblToVecConverterTest.snap index c192db49e..8bfdbca60 100644 --- a/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/__snapshots__/KblToVecConverterTest.snap +++ b/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/__snapshots__/KblToVecConverterTest.snap @@ -251,11 +251,11 @@ This is not intended for productive use and is not complete! - + De /NULL - + De LTGS Batterie Plus @@ -314,6 +314,96 @@ This is not intended for productive use and is not complete! PartOccurrence_id_331_0 + + GEOMETRY + Dmu + + BuildingBlockSpecification3D_id_328_0 + + + + + 2835.768688 + 432.983286 + 312.981781 + + + 1744.378607 + 298.122794 + 108.42673 + + + -72992.624842 + -87163.253273 + 48243.877044 + + + -6866.761167 + 4821.907432 + -16665.890871 + + + 10405.895905 + -126.757845 + 8512.999427 + + + -4485.749332 + 447.283456 + -6767.988836 + + + 12943.88813 + 589.766603 + 11244.317031 + + + -44361.324327 + -3363.124837 + -40397.248229 + + + 665128.246155 + 80031.75633 + 557404.203109 + + + 2801.286879 + 437.1358 + 313.625164 + + + 1773.833308 + 276.554818 + 104.42673 + + + PNID1 + TopologyNode_Node_1 + CartesianPoint3D_Cartesian_point_10 + + + PNID2 + TopologyNode_Node_2 + CartesianPoint3D_Cartesian_point_11 + + + ROUTING_BAUKST_BATTERIE_PLUS-Multi-branchable1/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_1 + + -0.999473 + 0.013345 + -0.0296 + + + -0.0 + 0.0 + 1.0 + + GeometryNode3D_Node_2 + GeometryNode3D_Node_1 + + RS-000971228 @@ -396,7 +486,7 @@ This is not intended for productive use and is not complete! XA.A.1.Last - + De Batterie @@ -404,7 +494,7 @@ This is not intended for productive use and is not complete! XB.B.1 - + De Anlasser @@ -425,11 +515,11 @@ This is not intended for productive use and is not complete! - + De /NULL - + De KABELSCHUH @@ -439,11 +529,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De KABSCHUHE_BATERIE @@ -453,11 +543,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De KABSCHUHE_BATERIE @@ -467,11 +557,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De KABELSCHUH @@ -481,11 +571,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De Unspezifizierter Draht @@ -495,11 +585,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De LTGS Batterie Plus @@ -509,11 +599,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De Variante @@ -1316,11 +1406,11 @@ This is not intended for productive use and is not complete! - + De /NULL - + De LTGS Generator @@ -1427,6 +1517,298 @@ This is not intended for productive use and is not complete! PartOccurrence_id_331_0 + + GEOMETRY + Dmu + + BuildingBlockSpecification3D_id_328_0 + + + + + 2620.48151 + -108.840669 + 518.295202 + + + 2497.897437 + 155.396631 + 501.749223 + + + 2454.646017 + 153.721817 + 504.804123 + + + 2520.098253 + 85.376448 + 495.960064 + + + -71526.932889 + -4617.126573 + -6470.593117 + + + 7405.061756 + 275.387302 + 888.196766 + + + 1428.158146 + -356.067006 + 425.627974 + + + 3410.498095 + 182.997181 + 556.315993 + + + 1461.409198 + -108.738891 + 448.118965 + + + 4602.962272 + 1186.74392 + 539.616687 + + + -7508.048828 + -13160.198319 + 2366.36007 + + + 2538.51984 + 61.363011 + 502.240083 + + + 2531.437948 + 68.423238 + 502.240083 + + + 2524.356056 + 75.483465 + 502.240083 + + + 2517.274164 + 82.543692 + 502.240083 + + + 2510.192272 + 89.60392 + 502.240083 + + + 2503.11038 + 96.664147 + 502.240083 + + + 2496.028489 + 103.724374 + 502.240083 + + + 2565.031514 + 45.67132 + 399.868952 + + + 2525.9963 + 67.929974 + 558.657463 + + + 2524.957456 + 77.675654 + 475.627021 + + + 2503.420453 + 94.171792 + 523.052293 + + + 2496.399139 + 105.88762 + 478.095874 + + + 2476.217106 + 121.937539 + 516.89776 + + + 2461.537065 + 136.175541 + 520.683508 + + + 4074.844786 + 1699.22745 + -714.187262 + + + 2487.602461 + 216.585288 + 468.436452 + + + 2432.903635 + 115.612728 + 530.818046 + + + 2479.28257 + 107.499728 + 500.077614 + + + 2534.537275 + 106.165283 + 476.433386 + + + 2510.197748 + 28.378562 + 563.087307 + + + 1582.025395 + -950.922242 + 2272.636487 + + + -68230.207284 + -6274.323628 + 71236.161464 + + + 10613.997319 + 2124.930917 + -9342.480199 + + + 75.054772 + -903.8336 + 4328.618278 + + + 3828.367547 + 901.162855 + -2444.283996 + + + 1415.942412 + -780.933975 + 4615.287213 + + + 3690.102554 + 2473.062996 + -10855.114327 + + + 4598.377983 + -15712.912627 + 87745.765845 + + + 2638.52647 + -64.164598 + 509.425137 + + + 2500.0 + 100.0 + 500.0 + + + 2467.121169 + 121.53382 + 506.995792 + + + 2518.899931 + 155.787799 + 502.827753 + + + PNID1 + TopologyNode_Node_1 + CartesianPoint3D_Cartesian_point_40 + + + PNID2 + TopologyNode_Node_2 + CartesianPoint3D_Cartesian_point_41 + + + PNID3 + TopologyNode_Node_3 + CartesianPoint3D_Cartesian_point_42 + + + PNID4 + TopologyNode_Node_4 + CartesianPoint3D_Cartesian_point_43 + + + ROUTING_BAUKST_LTGS_GENERATOR-Multi-branchable142/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_1 + + 0.358231 + 0.931382 + 0.064796 + + + -0.649703 + 0.682776 + -0.334221 + + GeometryNode3D_Node_2 + GeometryNode3D_Node_1 + + + ROUTING_BAUKST_LTGS_GENERATOR-Multi-branchable142/ElecRouteBody.2/Flexible Curve.2 + TopologySegment_Segment_2 + + 0.293821 + -0.954568 + 0.049693 + + + 0.649703 + -0.682776 + 0.334221 + + GeometryNode3D_Node_2 + GeometryNode3D_Node_3 + + + ROUTING_BAUKST_LTGS_GENERATOR-Multi-branchable142/ElecRouteBody.3/Flexible Curve.3 + TopologySegment_Segment_3 + + -0.649703 + 0.682776 + -0.334221 + + + -0.998294 + -0.057522 + -0.010053 + + GeometryNode3D_Node_4 + GeometryNode3D_Node_2 + + RS-000971230 @@ -1544,7 +1926,7 @@ This is not intended for productive use and is not complete! TMM.2A1 - + De Koppelstelle im Motorraum Mitte @@ -1592,7 +1974,7 @@ This is not intended for productive use and is not complete! XA.C.1 - + De Drehstromgenerator @@ -1699,7 +2081,7 @@ This is not intended for productive use and is not complete! XB.C.1 - + De Drehstromgenerator @@ -1800,11 +2182,11 @@ This is not intended for productive use and is not complete! - + De /NULL - + De Dichtung @@ -1814,11 +2196,11 @@ This is not intended for productive use and is not complete! CavityPlug - + De /NULL - + De Dichtung @@ -1828,11 +2210,11 @@ This is not intended for productive use and is not complete! CavityPlug - + De /NULL - + De Dichtung @@ -1842,11 +2224,11 @@ This is not intended for productive use and is not complete! CavityPlug - + De /NULL - + De Dichtung @@ -1856,11 +2238,11 @@ This is not intended for productive use and is not complete! CavitySeal - + De /NULL - + De Dichtung @@ -1870,11 +2252,11 @@ This is not intended for productive use and is not complete! CavitySeal - + De /NULL - + De Dichtung @@ -1884,11 +2266,11 @@ This is not intended for productive use and is not complete! CavitySeal - + De /NULL - + De FLACHKONTAKTGEHAEUSE_4-POLIG_4.8_9.5MM @@ -1898,11 +2280,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De KABELSCHUH_A8_1 @@ -1912,11 +2294,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De FLACHKONTAKTGEH_2POL_KOD_A_VIOLETT @@ -1926,11 +2308,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De LEITUNGSCLIP LOCHBEFESTIGUNG 6,5 @@ -1940,11 +2322,11 @@ This is not intended for productive use and is not complete! Fixing - + De /NULL - + De - @@ -1954,11 +2336,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De FLACHKONTAKT_4.8-1 @@ -1968,11 +2350,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De Hochdruck @@ -1982,11 +2364,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De KABELSCHUH_A8_1 @@ -1996,11 +2378,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De Unspezifizierter Draht @@ -2010,11 +2392,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -2024,11 +2406,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -2038,11 +2420,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De PET Vlies @@ -2052,11 +2434,11 @@ This is not intended for productive use and is not complete! WireProtection - + De /NULL - + De LTGS Generator @@ -2066,11 +2448,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De Variante @@ -18921,11 +19303,11 @@ This is not intended for productive use and is not complete! - + De /NULL - + De MODULARE LTGS. @@ -24056,6 +24438,17143 @@ This is not intended for productive use and is not complete! PartOccurrence_id_331_33 + + GEOMETRY + Dmu + + BuildingBlockSpecification3D_id_328_0 + + + + + -223.575379 + -400.436816 + 504.169662 + + + -223.601331 + -401.232886 + 504.184701 + + + -434.254428 + -87.91155 + 123.804524 + + + -91.351199 + -575.972678 + 518.119195 + + + -341.533559 + -594.267911 + 340.739401 + + + -306.576437 + -410.541147 + 511.605398 + + + -91.350854 + 575.971961 + 518.119475 + + + -341.533904 + 594.267193 + 340.739121 + + + -223.665952 + 401.232886 + 504.249322 + + + -128.579817 + 497.223153 + 548.860057 + + + -223.601331 + 400.232169 + 504.184701 + + + 238.044387 + 367.613852 + 578.066011 + + + 332.422865 + -252.098633 + 611.273101 + + + 357.68491 + -485.632307 + 570.914158 + + + 344.075242 + -545.161853 + 544.801333 + + + 359.547634 + -475.900357 + 571.375223 + + + 370.613342 + -556.281204 + 540.687956 + + + 368.796408 + -545.743505 + 544.630986 + + + 413.517069 + -541.476925 + 593.74559 + + + 405.558439 + -466.964369 + 603.828469 + + + 250.0 + 22.885404 + 528.903938 + + + 246.403033 + 73.100782 + 500.412193 + + + 196.815796 + -399.999941 + 557.071563 + + + 494.725907 + -599.635182 + 556.096902 + + + 591.225657 + -638.700734 + 443.962818 + + + 676.154925 + -367.782964 + 557.137786 + + + 698.427005 + -244.029809 + 518.56229 + + + 758.467965 + -304.540638 + 578.974855 + + + 570.67773 + -262.669831 + 572.61814 + + + 570.67773 + -274.509055 + 549.115216 + + + 570.67773 + -314.321034 + 535.179285 + + + 570.67773 + -349.016606 + 551.091361 + + + 570.67773 + -349.512121 + 639.422778 + + + 570.67773 + -278.630882 + 638.669148 + + + 570.67773 + -308.942387 + 634.628543 + + + 550.677385 + -313.328506 + 588.155678 + + + 580.6775 + -450.596169 + 455.928668 + + + 580.677728 + -228.671753 + 455.943008 + + + 580.67773 + -199.802348 + 441.942966 + + + 621.17773 + -116.826977 + 430.319005 + + + 712.0006 + -295.349101 + 534.899922 + + + 600.32773 + 630.416319 + 439.519001 + + + 448.910947 + -114.740536 + 617.335491 + + + 494.725907 + 600.30537 + 556.096902 + + + 434.91241 + -312.338675 + 615.093615 + + + 450.661625 + -287.31276 + 616.13017 + + + 469.273702 + -282.205336 + 608.969407 + + + 438.270944 + -293.769579 + 619.849735 + + + 534.015225 + -343.9006 + 466.308113 + + + 492.054335 + -341.139078 + 444.830769 + + + 521.815561 + -215.494865 + 621.966916 + + + 464.997953 + -203.935924 + 603.353346 + + + 513.325482 + -110.266508 + 545.66236 + + + 456.22347 + -37.551071 + 556.085299 + + + 462.012221 + -31.031831 + 557.770079 + + + 541.981829 + -85.610987 + 604.107292 + + + 539.591755 + -78.820584 + 608.497197 + + + 517.18049 + -142.589902 + 541.085455 + + + 398.155834 + -375.521213 + 596.960854 + + + 331.358898 + -343.055964 + 667.019513 + + + 348.728508 + -380.797916 + 665.818677 + + + 343.750312 + -360.762709 + 697.832088 + + + 363.86904 + -399.570787 + 675.72462 + + + 405.851005 + -314.912098 + 600.084619 + + + 494.725907 + -600.306804 + 556.096902 + + + 447.910947 + -114.740536 + 617.335491 + + + 449.910947 + -114.740536 + 617.335491 + + + 570.67773 + -365.876789 + 582.740718 + + + 451.910947 + -114.740536 + 617.335491 + + + 503.558888 + 0.0 + 404.048631 + + + 504.611084 + 23.623587 + 404.600005 + + + 494.78184 + 50.0 + 403.182643 + + + 507.056245 + 416.601303 + 548.120979 + + + 504.584962 + 441.563204 + 554.335389 + + + 504.977006 + 10.980733 + 462.89511 + + + -6.919524 + 0.0 + 0.0 + + + 442.663311 + -0.001255 + 252.486281 + + + 580.31682 + -195.079697 + 154.857679 + + + 573.980626 + -195.137442 + 168.44569 + + + 850.718781 + -3.000717 + 2.8E-4 + + + 1158.688361 + 5.0 + -12.0 + + + 529.420147 + -2.070115 + 311.216591 + + + 659.063218 + -146.48438 + 324.062234 + + + 621.196246 + 101.828329 + 318.143262 + + + 1654.1424 + -527.293956 + 998.640846 + + + 813.156312 + -37.520867 + 1074.672164 + + + 1866.037627 + -579.926574 + -34.681525 + + + 1804.539949 + -540.082542 + -48.153062 + + + 1824.229859 + -617.871813 + -36.786536 + + + 350.0 + -400.0 + 300.0 + + + 350.0 + -380.0 + 300.0 + + + 350.0 + -360.0 + 300.0 + + + 248.267649 + -415.635021 + 186.7923 + + + 247.175954 + -412.230914 + 124.749492 + + + 2434.816895 + -549.712118 + 676.811852 + + + 1995.012047 + 177.174121 + -65.027204 + + + 1759.152297 + 287.483103 + 120.015286 + + + 1778.188181 + 540.785028 + 106.681944 + + + 1777.643561 + 557.988553 + 119.815006 + + + 1991.297637 + -381.216987 + -62.568735 + + + 1993.128283 + -382.853807 + -60.318735 + + + 2719.527084 + -412.013471 + 501.9637 + + + 2744.58966 + -401.563586 + 490.901766 + + + 2903.613943 + -599.745285 + 336.776579 + + + 2459.85228 + -400.351399 + 133.340523 + + + 2562.159806 + -216.293499 + 367.664693 + + + 2620.932876 + -108.395732 + 493.924858 + + + 2482.452267 + -399.996337 + 386.325871 + + + 2504.071783 + -318.748814 + 355.505111 + + + 2580.416799 + 154.381101 + 59.891368 + + + 2459.85228 + 399.349965 + 133.340523 + + + 3014.404598 + -32.05173 + 482.932257 + + + 2655.51786 + 380.333357 + 319.100959 + + + 2468.603547 + -422.129778 + 838.778029 + + + 2470.057569 + 440.30443 + 840.479676 + + + 1864.634737 + 550.0 + 378.921197 + + + 2459.85228 + 400.349965 + 133.340523 + + + -12.744026 + -350.0 + 82.356906 + + + -5.679229 + 350.0 + 72.938703 + + + 20.0 + 485.844148 + 58.146376 + + + 0.0 + 489.795122 + 3.137076 + + + 0.0 + -472.307589 + 19.175897 + + + 20.0 + -482.783291 + 48.428779 + + + -38.015986 + -350.0 + 72.789933 + + + 18.210063 + 352.330109 + 85.913064 + + + 2500.0 + -478.981707 + 55.088136 + + + 2529.076315 + -350.0 + 56.322011 + + + 2554.513672 + -410.925952 + 87.191931 + + + 2530.491601 + -348.048926 + 87.824628 + + + 2491.193204 + 344.256067 + 114.157707 + + + 2540.6858 + 376.980477 + 81.026423 + + + 2500.0 + 466.576317 + -2.897002 + + + 2546.727262 + 394.663177 + 33.635756 + + + 1153.858796 + -649.542176 + -51.340305 + + + 1620.087747 + -713.989323 + -15.324526 + + + 1789.142193 + -614.506872 + -32.513218 + + + 528.630537 + -397.305238 + -76.167026 + + + 554.025756 + -396.729218 + -71.787165 + + + 500.106026 + -396.682766 + -71.455675 + + + 2657.550847 + -397.252484 + 459.752758 + + + 2664.478855 + -387.82775 + 438.137129 + + + 2716.004297 + -569.487384 + 260.742252 + + + 216.840848 + 323.562167 + -10.957673 + + + 211.095583 + -355.487147 + 0.0 + + + 93.330689 + 342.971301 + 0.0 + + + 88.150983 + -307.287708 + 0.0 + + + 2663.980117 + -388.397056 + 439.760848 + + + -302.197221 + -396.998147 + 540.174926 + + + -327.960952 + -416.49799 + 527.971247 + + + -290.500222 + -414.508299 + 469.983433 + + + -351.259132 + -445.902749 + 483.121569 + + + -306.800734 + -441.534601 + 420.066383 + + + -402.936459 + -484.953373 + 458.82269 + + + -248.189279 + -443.098871 + 315.901774 + + + 9449.788515 + -6123.052441 + 5287.029634 + + + -778.82846 + -97.450943 + 311.606137 + + + -228.503412 + -483.742763 + 541.012253 + + + -407.070957 + -422.607822 + 380.915 + + + -200.675341 + -601.545225 + 436.744092 + + + -510.733339 + -451.281353 + 183.560537 + + + 716.020464 + -1569.526316 + 1633.468152 + + + 1728.162103 + -1063.792862 + 444.084643 + + + -259.972484 + -410.135273 + 469.676213 + + + -394.032657 + -443.151599 + 442.32507 + + + -262.24139 + -558.79168 + 366.959151 + + + -245.60152 + -641.679821 + 320.14027 + + + -454.366084 + -653.448347 + 311.310146 + + + -9976.374125 + 2143.031456 + 2204.585249 + + + -239.617788 + -566.472087 + 360.213365 + + + -270.991206 + -598.818055 + 346.089263 + + + -291.559277 + -569.620412 + 361.782623 + + + -295.994018 + -606.907022 + 340.841816 + + + -324.902158 + -573.319887 + 360.11106 + + + -316.998979 + -626.074182 + 329.28175 + + + -394.705505 + -530.959201 + 387.841288 + + + -1559.07491 + -17349.740998 + 20200.707475 + + + 97.960953 + 1632.000781 + -1941.378647 + + + -207.097913 + -1396.222636 + 1434.894371 + + + 54.438952 + 48.721156 + -189.022022 + + + -52.822833 + -1466.303482 + 1513.597788 + + + 304.567621 + 2310.113902 + -2725.617109 + + + -7821.35145 + -24671.037062 + 27484.240881 + + + -4414.430431 + 18733.544095 + -21527.690049 + + + -307.560194 + -2892.108002 + 3135.577661 + + + 155.322854 + 146.627579 + -301.86061 + + + -71.811942 + -976.005532 + 964.935165 + + + -81.411334 + -13.062815 + -131.092364 + + + -314.036808 + -1723.762064 + 2017.060071 + + + 3739.36411 + 10238.609231 + -7732.963723 + + + 8055.078064 + 17897.331051 + -10287.130686 + + + -333.26045 + -2267.450519 + 2143.128838 + + + 71.131821 + -47.339341 + -166.584288 + + + -209.775673 + -853.213506 + 913.873844 + + + 22.554898 + 65.713474 + 94.187292 + + + -362.739317 + -1680.165065 + 2068.174321 + + + 13736.984347 + 3583.663011 + -16781.769943 + + + 105.797789 + -461.008449 + 712.113609 + + + 99.622722 + -508.421632 + 563.829841 + + + -30.51667 + -414.551887 + 598.08658 + + + -136.561686 + -515.090669 + 509.380693 + + + -258.482913 + -427.618166 + 533.075797 + + + -351.681137 + -409.219535 + 495.602587 + + + -631.741547 + -575.040894 + 524.623981 + + + 252.070852 + -992.380951 + 212.789684 + + + -115.236126 + -411.187073 + 709.705179 + + + -116.50175 + -499.859588 + 445.762274 + + + -274.172798 + -443.719117 + 594.116896 + + + -295.49374 + -401.438002 + 403.73226 + + + -477.617291 + -463.722968 + 528.363099 + + + -276.732124 + -15.323393 + 384.881986 + + + -227.74863 + -422.877837 + 500.37275 + + + -232.672409 + -419.433327 + 536.405805 + + + -271.042263 + -456.564358 + 502.166289 + + + -302.222051 + -403.808278 + 491.921071 + + + -338.800931 + -456.547916 + 460.132375 + + + -368.49647 + -401.82123 + 452.74666 + + + -422.554022 + -458.963166 + 388.26854 + + + -2424.29429 + 333.030611 + -208.699666 + + + -374.440315 + -245.497058 + 144.325917 + + + -459.06695 + -37.111764 + 108.895061 + + + -388.48051 + -56.802584 + 127.17777 + + + -572.740722 + 8.838368 + 99.976398 + + + -290.241723 + -177.668185 + 168.72993 + + + -2234.174526 + 877.039953 + -233.115036 + + + 19404.753627 + -3100.106117 + -2823.261611 + + + -2387.449146 + -981.199133 + 727.753363 + + + 359.583366 + 459.557388 + -136.849096 + + + -1098.799677 + -423.717924 + 310.773677 + + + 131.139012 + 424.037031 + -138.18509 + + + -3159.771317 + -2061.279744 + 1029.041032 + + + 28097.034993 + 13978.734839 + -3514.965068 + + + 52116.05138 + -34589.723823 + 35464.158709 + + + -3179.74018 + 3828.077478 + -3044.626158 + + + 43.97181 + -1160.070511 + 985.307237 + + + -1045.801918 + 545.964944 + -412.026272 + + + 131.807753 + -1370.476643 + 1170.083475 + + + -1965.858722 + 1762.089091 + -1556.595403 + + + 14774.80961 + -13846.954465 + 16782.064194 + + + -5970.671118 + -11581.255368 + 6121.48534 + + + 162.904126 + 1649.009156 + -609.50975 + + + -887.176823 + -770.85765 + 407.043039 + + + -287.958108 + -81.86835 + 239.572064 + + + -403.175447 + -880.345417 + 757.929573 + + + 578.16339 + 584.323324 + 248.111687 + + + -4524.679707 + -10061.940762 + 4895.049259 + + + 161.051213 + 7415.387662 + -2192.195055 + + + -453.898142 + -466.120697 + 480.718088 + + + -344.73049 + -470.002502 + 435.66318 + + + -295.830731 + -426.98622 + 521.184435 + + + -199.773017 + -336.658764 + 493.097726 + + + -150.181178 + -400.309945 + 591.567437 + + + 1542.852894 + -5966.336182 + -2295.678125 + + + -856.318615 + -1090.805616 + 1416.51866 + + + -401.893845 + -405.393582 + 339.656452 + + + -382.675595 + -483.40354 + 533.157677 + + + -262.059242 + -383.544973 + 430.678145 + + + -213.270877 + -409.684209 + 537.864576 + + + -67.245941 + -265.254915 + 361.217776 + + + -2596.412213 + -4813.539788 + 7993.45435 + + + -5558.709443 + -6497.941227 + -10860.189252 + + + 329.854864 + 320.066788 + 1878.572573 + + + -577.940833 + -729.013121 + -82.133327 + + + -120.029053 + -197.226098 + 910.973246 + + + -592.692863 + -742.621563 + -108.610182 + + + 629.506224 + 673.861893 + 2537.530749 + + + -10640.463359 + -12369.893551 + -21834.942656 + + + -15119.78274 + -43381.827336 + -79600.129413 + + + 5347.021225 + 1940.724455 + 9225.553144 + + + -3188.179392 + -1015.615463 + -2703.202327 + + + 2581.134504 + -143.398438 + 3086.194014 + + + -3177.373541 + -914.627595 + -3095.949328 + + + 15018.843344 + -60.044143 + 12735.676302 + + + -233875.560334 + 6861.441894 + -178167.990419 + + + -352.593816 + 505.750139 + 378.261329 + + + -380.271215 + 512.606056 + 382.818183 + + + -333.385739 + 617.871654 + 342.529797 + + + -276.038374 + 605.872741 + 344.9825 + + + -289.070487 + 529.263074 + 379.18587 + + + -313.258255 + 569.281227 + 370.961021 + + + -257.77737 + 652.47814 + 338.002548 + + + -11810.19838 + 6759.369029 + 5821.566018 + + + -262.641317 + 238.530217 + -233.310403 + + + -123.708456 + 838.174221 + 480.346328 + + + -444.375209 + 347.263598 + 277.804973 + + + -147.583324 + 592.258636 + 676.741063 + + + -1405.362422 + -472.740421 + 29.838657 + + + 27721.930167 + 13958.475025 + 11099.682735 + + + 28384.779458 + 34909.517798 + -20719.220662 + + + -2083.449073 + -1356.540693 + 1511.549077 + + + -6.293 + 899.10854 + 77.398832 + + + -530.894012 + 132.761479 + 736.933683 + + + 259.917597 + 875.144667 + 270.73332 + + + -682.235786 + -332.243806 + 1420.523564 + + + 3548.340963 + 3199.960449 + -6044.093812 + + + -459.632085 + 495.695199 + 655.000179 + + + -275.105243 + 518.078899 + 488.83161 + + + -205.859673 + 412.28203 + 506.419845 + + + -131.288466 + 534.967987 + 574.517722 + + + -29.210065 + 383.50022 + 517.98623 + + + 8.216315 + 587.15553 + 677.704839 + + + 252.755517 + 112.097494 + 266.321956 + + + 2608.155259 + 18998.642265 + 51053.819358 + + + -554.989502 + -654.55865 + -2188.869507 + + + -225.970876 + 634.254184 + 1181.078803 + + + -177.803551 + 238.84118 + -1.946555 + + + 19.625131 + 738.527587 + 1234.754017 + + + 8.576784 + -11.993496 + -908.234802 + + + 957.758038 + 4995.847587 + 12515.36155 + + + -5376.570306 + 11653.915226 + 8749.373082 + + + -239.531733 + -27.871018 + 190.954144 + + + -300.174342 + 457.912627 + 547.185403 + + + -104.949595 + 344.72072 + 464.574585 + + + -69.577316 + 605.73724 + 656.130148 + + + 190.219327 + 341.385034 + 462.772294 + + + -544.482856 + 2405.115975 + 1975.081665 + + + 375.708322 + 757.814128 + 745.745098 + + + -122.356203 + 384.927421 + 561.098954 + + + -76.231693 + 461.396081 + 565.109853 + + + -85.219934 + 472.888182 + 542.557802 + + + -74.040668 + 520.177406 + 534.313153 + + + -181.272876 + 472.879183 + 486.586846 + + + 485.557724 + 1036.232777 + 692.379438 + + + -239.563335 + 253.568842 + 498.159391 + + + -58.47729 + 514.049893 + 552.321031 + + + -93.700281 + 475.979578 + 536.517694 + + + -81.256543 + 506.157723 + 536.22346 + + + -103.835724 + 489.350795 + 525.275509 + + + -82.894916 + 527.784864 + 526.227829 + + + -202.654498 + 377.52569 + 492.36375 + + + -95.219812 + -1034.545448 + 181.226467 + + + -58.911049 + 458.0101 + 578.051388 + + + -69.791183 + 505.84323 + 547.448636 + + + -111.896004 + 505.068918 + 517.513887 + + + -136.324572 + 488.993989 + 473.977426 + + + -131.741934 + 509.564939 + 428.317636 + + + 1048.632866 + 802.393484 + -102.873121 + + + 2772.895845 + 3864.303855 + 674.319965 + + + -331.370608 + 252.423246 + 469.54043 + + + -49.208953 + 570.346354 + 537.523628 + + + -170.687042 + 447.296287 + 455.053697 + + + -45.717848 + 587.103124 + 491.973171 + + + -330.543083 + 300.2827 + 285.284864 + + + 2957.53521 + 3507.443863 + 3177.030153 + + + 3179.498155 + -1218.538739 + 7334.38795 + + + -249.947246 + 530.78539 + 336.916661 + + + -119.130469 + 475.546632 + 489.025113 + + + -119.100658 + 539.726287 + 435.17638 + + + -22.777835 + 517.732208 + 534.841387 + + + -62.346128 + 614.959247 + 415.32118 + + + 501.071482 + -1209.643792 + -216.337551 + + + 284.169613 + 249.945826 + -2199.353517 + + + -140.605908 + 457.890857 + 464.644717 + + + -127.009218 + 554.972594 + 495.62624 + + + -26.282473 + 510.871383 + 473.812284 + + + 16.881388 + 562.99181 + 475.237394 + + + 121.871668 + 507.303049 + 469.322465 + + + -2861.798359 + 4992.765158 + 4166.394681 + + + -145.921366 + 602.371005 + 561.404755 + + + -25.047333 + 527.555514 + 473.429789 + + + -13.587519 + 535.071574 + 476.328247 + + + -1.966519 + 547.837646 + 484.084704 + + + 2.656134 + 561.776959 + 493.849939 + + + -14.833099 + 574.145744 + 505.057752 + + + -411.812561 + 586.14202 + 565.724736 + + + -1146.754828 + -70.267635 + 193.007587 + + + -11.011463 + 519.158952 + 463.410223 + + + 13.077464 + 550.305488 + 484.3582 + + + -5.697923 + 565.258487 + 497.029744 + + + -39.582166 + 569.175154 + 505.442915 + + + -46.601045 + 577.598877 + 517.623277 + + + 5.119462 + 375.196441 + 482.497949 + + + 199.2186 + 954.60978 + 425.453207 + + + -3.046561 + 443.639369 + 510.700208 + + + 6.096376 + 603.281595 + 477.602516 + + + -43.405441 + 547.496549 + 522.80465 + + + -74.77937 + 585.411856 + 501.874216 + + + -87.1256 + 638.334732 + 540.435598 + + + -238.836624 + 332.491714 + 528.147629 + + + -14.86036 + 597.491563 + 503.197817 + + + -60.707118 + 551.213191 + 512.959984 + + + -46.640205 + 580.912844 + 509.806621 + + + -64.522195 + 570.097294 + 513.540452 + + + -60.181799 + 587.462506 + 512.483824 + + + -75.788685 + 579.532073 + 515.727213 + + + -84.631942 + 580.178766 + 517.512573 + + + -3238.206077 + 3260.936365 + -12271.257098 + + + 481.568301 + -34.523127 + 863.369949 + + + 289.267609 + 267.230355 + 514.775884 + + + 409.664681 + 335.756143 + 643.863748 + + + 326.060388 + 559.68921 + 462.347701 + + + 555.025512 + 551.485829 + 687.452571 + + + -3041.671344 + 1295.507891 + 1111.08585 + + + 392.805281 + 290.918342 + 633.159395 + + + 371.508971 + 321.48706 + 572.611359 + + + 360.492365 + 406.84933 + 579.814687 + + + 394.177477 + 479.279878 + 536.522391 + + + 314.281954 + 552.827356 + 590.220133 + + + 360.395231 + 614.442873 + 528.983409 + + + 210.822987 + 832.959818 + 741.806573 + + + 18960.854893 + 22437.151296 + -30134.511904 + + + 1452.875604 + 3098.528432 + 3146.513996 + + + -1711.781678 + -1259.637228 + -313.878324 + + + 1454.891186 + 2071.287248 + 1182.564851 + + + -1643.434399 + -2107.884399 + -289.637346 + + + 9723.347507 + 10953.348524 + 3135.665493 + + + -145544.404384 + -173523.245629 + -28860.337632 + + + 16599.391356 + -5618.109496 + 3097.974061 + + + -2156.850479 + 1204.384142 + 233.572878 + + + 745.242154 + 159.669426 + 678.7447 + + + -729.53539 + 704.816095 + 455.094478 + + + 789.625484 + 162.439742 + 688.94287 + + + -3169.586844 + 1610.03651 + 85.650414 + + + 33836.571814 + -11822.694168 + 5742.206348 + + + 326.289519 + -796.44499 + 820.402957 + + + 365.155853 + -420.545589 + 668.720373 + + + 380.094069 + -423.641089 + 627.881107 + + + 360.810816 + -322.747854 + 665.387067 + + + 378.65995 + -301.854868 + 613.51439 + + + 386.21227 + -179.695656 + 579.616535 + + + 269.967163 + -565.729952 + 927.583323 + + + -2030.662392 + 253.82754 + 3535.751935 + + + 898.294437 + -647.932138 + 348.504073 + + + 116.390776 + -379.344904 + 764.549897 + + + 580.573528 + -202.648853 + 589.084754 + + + 126.667034 + -210.469332 + 415.044365 + + + 759.394575 + 430.678945 + 796.231689 + + + -1344.411767 + -2902.518875 + -1786.21863 + + + 678.646836 + 341.17435 + 2214.924788 + + + 447.30742 + -422.802344 + 800.199698 + + + 382.440664 + -284.769228 + 532.777061 + + + 342.178426 + -76.334556 + 507.830016 + + + 311.345205 + 124.075608 + 494.002688 + + + 303.485855 + 353.489893 + 526.031549 + + + 601.113785 + 427.592886 + 877.874334 + + + 1263.670449 + 3005.097571 + 5878.693297 + + + 470.50952 + -682.925267 + 898.973838 + + + 392.872158 + -310.872591 + 498.063721 + + + 328.985459 + -40.462007 + 516.41675 + + + 292.19856 + 280.847063 + 466.905529 + + + 321.266172 + 630.306142 + 666.910565 + + + 3308.510041 + -549.667755 + 3328.121112 + + + 74.022609 + 2278.49208 + 323.697843 + + + 392.336329 + -449.273049 + 535.89777 + + + 321.07574 + 114.741334 + 501.568031 + + + 293.946429 + 174.162185 + 485.76532 + + + 412.666729 + 443.64909 + 665.065284 + + + 386.586083 + 364.617153 + 640.693387 + + + 302.972401 + 2395.645409 + 695.62908 + + + 3508.412914 + 1351.794568 + 163.398413 + + + -684.43351 + -553.034689 + 577.404806 + + + 598.588086 + 482.679705 + 493.131627 + + + 312.443062 + -362.587943 + 493.089491 + + + -59.644852 + 210.85778 + 583.068246 + + + 1283.01624 + 224.243371 + 434.501602 + + + -2911.620767 + -1249.673931 + 869.684708 + + + 1352.715451 + -355.63571 + 2184.83499 + + + 8.849868 + -583.777089 + 62.00986 + + + 302.519647 + 647.744887 + 647.823013 + + + 526.44834 + -637.376746 + 454.790997 + + + -289.187421 + 880.408464 + 437.775292 + + + 1788.562281 + -1343.865177 + 921.62174 + + + -8810.081334 + 3407.291181 + -2579.843998 + + + -3807.624454 + -8839.961912 + 159.678976 + + + 201.605509 + 607.877244 + 588.844024 + + + 212.718004 + 364.426229 + 577.784784 + + + 337.646942 + 396.8621 + 579.258281 + + + 363.649608 + 189.504313 + 569.839368 + + + 529.827654 + 321.926509 + 575.855453 + + + 110.940096 + -963.82887 + 517.442524 + + + 360.403116 + -1337.02089 + 369.947833 + + + 367.907535 + -629.542036 + 311.510108 + + + 367.52365 + -665.732715 + 622.281831 + + + 370.622972 + -373.544281 + 487.233923 + + + 370.705466 + -365.76714 + 809.177448 + + + 373.492749 + -102.996115 + 639.57817 + + + 376.247491 + 156.707101 + 1300.625342 + + + 273.998868 + -9.707578 + 525.239185 + + + 315.825921 + -84.211847 + 684.285201 + + + 330.352298 + -214.218384 + 604.082531 + + + 352.080443 + -329.583725 + 586.987158 + + + 389.253983 + -413.548586 + 705.247086 + + + 410.623162 + -529.643707 + 685.006983 + + + 428.854282 + -652.118499 + 637.260065 + + + -111.53941 + -1172.66203 + 1141.614683 + + + 357.7216 + -532.248619 + 471.104385 + + + 320.272212 + -583.356829 + 598.270305 + + + 412.80684 + -457.072276 + 520.811719 + + + 414.16675 + -455.21637 + 586.883085 + + + 479.146365 + -366.536902 + 552.802616 + + + -3668.528599 + -6026.983039 + 7150.405807 + + + 5244.877117 + 3113.414475 + -7160.711397 + + + -365.755551 + -17.114986 + 3827.816771 + + + 583.960625 + -909.989302 + -1099.271245 + + + 233.754809 + -108.024952 + 1818.41414 + + + 603.270779 + -1188.958801 + -530.589655 + + + 21.810651 + 1038.803319 + 2000.085794 + + + -1092.644992 + -5499.57659 + 2659.584018 + + + -220.874767 + -2767.6631 + -4352.718054 + + + 458.469125 + -261.311669 + 1172.422199 + + + 341.364704 + -639.965573 + 298.969195 + + + 390.27147 + -417.27078 + 759.23494 + + + 323.067327 + -615.168989 + 286.676228 + + + 474.28932 + -21.853815 + 1568.933193 + + + -1203.751394 + -6054.747255 + -11844.939829 + + + 5454.986563 + 5785.30268 + 2925.469936 + + + -255.830365 + -1293.587709 + 263.352607 + + + 626.772664 + -197.949779 + 675.380341 + + + 166.563759 + -767.131358 + 461.329543 + + + 629.873384 + -191.333788 + 677.864081 + + + -607.921241 + -1724.566881 + 101.268301 + + + 11159.578655 + 12866.176515 + 5588.318189 + + + -111.514393 + -12198.971301 + -3799.000958 + + + 439.998782 + 929.874523 + 1094.045304 + + + 347.443447 + -1100.552678 + 337.742265 + + + 385.367347 + -59.924044 + 725.918058 + + + 333.885973 + -1123.604099 + 329.889047 + + + 446.340573 + 1671.234238 + 1371.799573 + + + -675.330593 + -24581.22465 + -8411.236889 + + + 4682.842468 + -18499.889666 + 6821.846096 + + + -120.67408 + 683.342781 + 16.808486 + + + 552.189842 + -793.824617 + 743.24707 + + + 228.649992 + -367.171083 + 420.628699 + + + 568.929226 + -727.685356 + 713.58359 + + + -291.898738 + -386.175185 + 17.797756 + + + 8338.661204 + 2866.703972 + 5670.459021 + + + 369.625807 + -467.551925 + 573.916405 + + + 369.417216 + -487.216873 + 566.551251 + + + 369.208625 + -506.881822 + 559.186043 + + + 369.000033 + -526.54677 + 551.82083 + + + 368.791442 + -546.211718 + 544.455627 + + + 368.58285 + -565.876667 + 537.090412 + + + 368.374259 + -585.541615 + 529.725123 + + + -122357.330914 + -5653.865343 + 21608.399578 + + + 11819.487065 + -4544.545946 + -771.151606 + + + -3426.54513 + 2996.955616 + 759.370709 + + + 3052.246682 + -2657.215841 + 387.465831 + + + -3728.752249 + 3450.507736 + 700.732969 + + + 11733.947033 + -16247.702344 + 644.469129 + + + -132997.525429 + 232262.959949 + -7323.14894 + + + -227.81529 + 211.39105 + 1222.896228 + + + 149.457968 + -156.140385 + 546.676504 + + + 325.794488 + -327.923603 + 832.879349 + + + 411.118966 + -411.044862 + 462.914322 + + + 620.310215 + -614.834444 + 719.195185 + + + 666.443857 + -659.776839 + 347.118031 + + + 1238.722541 + -1217.278337 + 656.807178 + + + -546.562823 + -4318.580873 + -1677.289207 + + + 722.456425 + 902.014504 + 1309.759809 + + + 652.507796 + -1084.822518 + 529.679787 + + + 187.823938 + -453.13027 + 324.02085 + + + 885.667177 + -203.053467 + 1029.832176 + + + 105.415508 + -1959.571505 + -307.848078 + + + 1318.97732 + 3308.039031 + 2642.624668 + + + 521.130155 + -472.032619 + 320.375279 + + + 529.578884 + -431.627894 + 555.49499 + + + 547.628572 + -345.308088 + 894.652487 + + + 478.894994 + -674.015669 + 290.530018 + + + 494.614894 + -598.837705 + 604.413076 + + + 527.086316 + -443.548214 + 1100.154322 + + + 414.339277 + -982.74328 + 17.472416 + + + 70.101596 + -497.556271 + 1004.587646 + + + 228.345783 + -431.244188 + 633.223974 + + + 362.486306 + -375.032723 + 739.58764 + + + 376.580022 + -369.126764 + 554.739718 + + + 527.396795 + -305.927132 + 642.225479 + + + 517.818563 + -309.940881 + 462.320986 + + + 891.329621 + -153.42141 + 519.73956 + + + 139.216759 + -431.233858 + 812.613827 + + + 327.297507 + -382.781187 + 845.983166 + + + 256.313378 + -401.067767 + 607.973319 + + + 486.614179 + -341.738535 + 685.562923 + + + 403.317344 + -363.197064 + 434.656354 + + + 714.892786 + -282.930187 + 597.377943 + + + 352.942491 + -376.174299 + 54.59588 + + + -142.288389 + -503.754014 + 568.045736 + + + 585.949184 + -316.148326 + 849.157929 + + + 297.606801 + -390.429854 + 546.855097 + + + 583.380191 + -316.809999 + 574.049164 + + + 434.902759 + -355.060084 + 352.014178 + + + 693.967149 + -288.320894 + 363.880045 + + + 674.140266 + -293.428545 + 215.677301 + + + 453.221975 + -563.737505 + 465.351653 + + + 582.103913 + -471.482539 + 356.101533 + + + 519.932592 + -499.786391 + 461.878309 + + + 498.731565 + -394.25775 + 454.635885 + + + 449.083637 + -419.403219 + 549.287047 + + + 445.440042 + -359.108359 + 556.89765 + + + 161.846552 + -249.881073 + 741.029822 + + + 685.082758 + -394.437674 + 244.047729 + + + 451.880741 + -469.989987 + 461.195089 + + + 520.551266 + -401.742418 + 481.485589 + + + 431.918154 + -414.975119 + 520.573126 + + + 482.773213 + -372.238578 + 572.005652 + + + 404.258595 + -353.814688 + 593.864386 + + + 427.240017 + -437.742474 + 657.5544 + + + 660.419607 + -526.976775 + 445.979552 + + + 451.451758 + -468.241278 + 458.572052 + + + 475.80389 + -388.63275 + 495.985621 + + + 440.374956 + -401.382816 + 600.254485 + + + 462.040897 + -273.987165 + 596.808135 + + + 414.563203 + -294.325178 + 705.327063 + + + 566.088162 + -135.860152 + 698.938349 + + + 31986.418015 + 44699.257594 + 277.485337 + + + -1269.324282 + -3734.010895 + 420.799165 + + + 1115.665399 + 158.357046 + 458.917749 + + + 205.776009 + -1160.186292 + 430.689644 + + + 956.717054 + 249.892142 + 462.567796 + + + -520.637845 + -2156.584795 + 362.393789 + + + 7113.549487 + 11480.86034 + 1780.103335 + + + 2414.947146 + -3739.773399 + 196.363141 + + + 392.8633 + -350.891297 + 454.379332 + + + 592.243292 + -681.066344 + 449.68233 + + + 522.409277 + -405.615231 + 425.656498 + + + 509.646407 + -510.098602 + 488.804328 + + + 350.624488 + -66.932372 + 469.249236 + + + 1495.784631 + -2172.268809 + 416.037062 + + + 632.414394 + -455.832738 + 406.592835 + + + 610.560078 + -444.065004 + 473.031642 + + + 563.767072 + -449.824729 + 440.513742 + + + 523.343527 + -451.107857 + 433.269659 + + + 497.013996 + -442.485403 + 481.950618 + + + 456.259486 + -444.00114 + 473.393308 + + + 412.882031 + -447.360341 + 454.427899 + + + 484.692394 + -1114.806625 + -267.222161 + + + 273.217934 + -300.544179 + 640.789802 + + + 419.815426 + -398.131483 + 531.966927 + + + 484.164191 + -286.267918 + 656.708707 + + + 606.908838 + -323.11265 + 615.62209 + + + 644.289203 + -142.572585 + 816.947442 + + + 2744.729587 + -5215.727333 + -4840.258392 + + + 249.999585 + -283.447171 + 335.77947 + + + 303.87126 + -328.152678 + 550.599586 + + + 408.007767 + -329.254251 + 555.891951 + + + 493.560971 + -346.476541 + 638.645682 + + + 592.094261 + -352.438814 + 667.294692 + + + 704.258607 + -346.576366 + 639.125892 + + + 1605.031266 + 343.391127 + -2676.209328 + + + 1814.691657 + -6511.78873 + -3342.546375 + + + 93.783918 + 368.039256 + 1049.682633 + + + 488.958307 + -693.562314 + 371.933786 + + + 429.041097 + -47.253859 + 784.550251 + + + 694.093159 + -620.520273 + 418.565165 + + + 338.546595 + 1135.25348 + 1539.48725 + + + 6727.85715 + -22421.699036 + -13499.750507 + + + 2119.01899 + -9270.64424 + 3583.625934 + + + 53.062272 + 706.744002 + 249.645501 + + + 504.598128 + -844.557832 + 768.018903 + + + 416.669903 + 74.580269 + 460.884908 + + + 713.285105 + -767.272718 + 742.193597 + + + 274.286803 + 1759.567494 + -102.160657 + + + 7480.049932 + -30722.269658 + 10751.786938 + + + 311.963844 + -541.51422 + 673.897457 + + + 344.264744 + -370.366913 + 610.69705 + + + 420.271785 + -369.309265 + 610.306183 + + + 481.160066 + -309.414466 + 588.187405 + + + 552.599108 + -290.579694 + 581.231859 + + + 632.429207 + -304.400103 + 586.335845 + + + 1336.225244 + -2746.486827 + 1488.177328 + + + 2134.557064 + -7965.860761 + 6294.792561 + + + 50.988098 + 554.846345 + -68.061202 + + + 505.39851 + -770.330451 + 921.517291 + + + 416.036687 + 14.012767 + 335.806875 + + + 714.258181 + -705.241865 + 872.912065 + + + 271.027048 + 1451.908468 + -737.945376 + + + 7519.670585 + -26230.94134 + 19934.297892 + + + 191.086428 + -305.551748 + 624.543136 + + + 293.109852 + -326.318939 + 608.171704 + + + 407.433506 + -291.525837 + 635.6105 + + + 493.508031 + -384.334396 + 562.419785 + + + 606.974116 + -353.414949 + 586.80462 + + + 717.834899 + -334.263681 + 601.904859 + + + 788.948539 + -494.650739 + 475.419347 + + + 1638.6922 + -2707.292632 + 6236.689041 + + + 117.448431 + -72.707671 + -32.960444 + + + 479.93863 + -476.321782 + 927.539854 + + + 436.178426 + -224.710889 + 328.768576 + + + 682.826107 + -441.487242 + 844.642174 + + + 376.359721 + 233.831932 + -762.448892 + + + 6310.142223 + -9155.496402 + 21581.814266 + + + 506.822304 + -133.594804 + 1825.978439 + + + 270.238369 + -349.174175 + 532.909288 + + + 420.949796 + -322.730623 + 691.520757 + + + 483.256512 + -351.531643 + 518.767945 + + + 608.398439 + -341.066607 + 581.538629 + + + 638.626497 + -389.91375 + 288.546914 + + + 2830.083552 + 911.80255 + 8096.427983 + + + 525.87635 + -333.444521 + 509.621211 + + + 492.408639 + -341.606722 + 486.134362 + + + 518.958301 + -333.688844 + 472.87843 + + + 495.965455 + -339.04458 + 451.177185 + + + 521.022082 + -331.526721 + 437.666741 + + + 502.853771 + -335.589849 + 416.787914 + + + 520.0506 + -330.177817 + 401.937645 + + + 3252.157124 + 2.543136 + 9691.747526 + + + 562.760025 + -345.322416 + 996.809552 + + + 428.848083 + -351.65936 + 321.111507 + + + 535.886773 + -325.794382 + 401.530718 + + + 682.927177 + -294.583363 + 607.478916 + + + 779.729322 + -270.086451 + 655.776947 + + + 752.110767 + -262.217783 + 313.616791 + + + 482.231162 + -2092.337867 + 648.647081 + + + 508.892169 + -229.540705 + 476.152149 + + + 505.990063 + -432.310149 + 505.725188 + + + 508.481133 + -258.259215 + 420.711668 + + + 507.518545 + -325.51499 + 431.748009 + + + 513.31278 + 79.326048 + 464.980967 + + + 478.163159 + -2376.568423 + 719.61166 + + + 525.2823 + 915.632163 + 503.135922 + + + 504.969715 + -503.601281 + 474.679627 + + + 508.432328 + -261.669286 + 434.10555 + + + 508.257159 + -273.908241 + 421.089652 + + + 509.853453 + -162.376149 + 485.57097 + + + 508.792302 + -236.51829 + 462.46616 + + + 521.322019 + 638.928348 + 538.134638 + + + 486.52824 + -179.38166 + 457.475779 + + + 536.968636 + -226.923277 + 477.284146 + + + 591.045247 + -263.233648 + 501.389525 + + + 627.062867 + -355.323171 + 504.137977 + + + 676.23853 + -406.771193 + 522.447648 + + + 777.608796 + -297.004733 + 602.484208 + + + 1805.742763 + 2675.274718 + 1778.53351 + + + 670.797685 + -1036.840207 + 637.632034 + + + 500.891589 + -349.924621 + 445.545579 + + + 597.966432 + -392.28201 + 507.387339 + + + 622.381519 + -236.165314 + 500.120478 + + + 697.608565 + -218.844253 + 541.182595 + + + 755.208049 + -153.372548 + 565.479035 + + + 3348.946897 + -7015.503608 + 3001.975475 + + + 426.599552 + 110.162412 + 256.454725 + + + 543.85652 + 21.706443 + 759.001742 + + + 468.687096 + -89.63366 + 495.220392 + + + 510.434256 + -187.069565 + 697.058517 + + + 455.262178 + -296.031502 + 512.914012 + + + 495.014542 + -393.704635 + 706.80865 + + + 439.734927 + -502.679361 + 522.230512 + + + 473.348412 + -597.076135 + 636.979065 + + + 480.756772 + -405.169746 + 648.139038 + + + 487.638636 + -226.901711 + 623.806825 + + + 494.48362 + -49.589034 + 580.482317 + + + 501.408489 + 129.792995 + 555.850814 + + + 508.338629 + 309.31156 + 570.970613 + + + 515.181608 + 486.572305 + 615.101229 + + + 467.042919 + -760.413825 + 573.552203 + + + 479.991141 + -425.002657 + 690.414679 + + + 491.760125 + -120.138535 + 590.426799 + + + 504.088198 + 199.20825 + 522.196673 + + + 516.235135 + 513.862896 + 629.873809 + + + 527.925334 + 816.686188 + 695.875243 + + + 542.054857 + 1182.697796 + 559.880548 + + + 383.735067 + -2918.423029 + 1540.633655 + + + 460.947781 + -918.302475 + 80.046555 + + + 478.603325 + -460.952692 + 1072.5067 + + + 502.748314 + 164.499872 + 137.92656 + + + 526.236705 + 772.943887 + 1083.801447 + + + 544.582344 + 1248.169885 + 99.877841 + + + 620.76237 + 3221.539694 + 1596.83717 + + + -7.578191 + 96.942328 + 201.764499 + + + 539.274811 + -253.649325 + 476.76884 + + + 485.044029 + -194.084547 + 431.183585 + + + 527.61405 + -246.967795 + 471.473129 + + + 513.897385 + -213.556797 + 446.393305 + + + 631.523709 + -287.637011 + 504.575005 + + + -203.596001 + 182.58462 + 132.63959 + + + 1188.841512 + 2652.369836 + -1612.733139 + + + 374.905485 + -652.254069 + 767.491253 + + + 547.370041 + -39.472293 + 316.789567 + + + 515.574024 + -401.613735 + 587.876534 + + + 603.349182 + 37.63654 + 258.926207 + + + 558.028294 + -1018.810401 + 1041.086458 + + + 590.54751 + 6261.187659 + -4181.917923 + + + 86.15187 + -422.444415 + 421.328045 + + + 519.67875 + -219.798666 + 453.102089 + + + 491.83111 + -252.538282 + 448.603249 + + + 522.075208 + -193.926095 + 456.448494 + + + 525.266849 + -211.744652 + 454.27452 + + + 629.741458 + -166.595549 + 461.488304 + + + -36.582393 + -367.89861 + 426.596034 + + + 1082.729625 + 274.033644 + 528.335634 + + + 412.517024 + -251.789186 + 448.566154 + + + 543.454096 + -216.836718 + 453.059235 + + + 519.958969 + -176.757071 + 459.495154 + + + 604.182584 + -244.643507 + 449.766912 + + + 524.680971 + -102.936997 + 468.521004 + + + 1101.001064 + -383.824772 + 451.151628 + + + 707.701663 + -547.913292 + 464.269998 + + + 434.802422 + -328.447419 + 482.300853 + + + 536.522474 + -273.48249 + 462.829435 + + + 485.58443 + -172.708831 + 442.308785 + + + 556.07699 + -104.043121 + 424.400378 + + + 613.387297 + -69.597729 + 430.926789 + + + 1354.920908 + 33.41727 + 352.106455 + + + 212.937038 + -1149.527457 + 608.281651 + + + 549.465683 + -85.635968 + 430.013148 + + + 497.852166 + -212.057476 + 446.900714 + + + 549.769364 + -85.14601 + 425.059354 + + + 584.434416 + -132.629173 + 432.398601 + + + 689.384472 + -83.598607 + 426.987581 + + + 496.47011 + -1409.285505 + 635.735573 + + + 470.360386 + -297.907519 + 424.899435 + + + 522.115297 + -330.249263 + 482.905971 + + + 577.673824 + -333.591715 + 512.313957 + + + 639.770663 + -287.085165 + 492.563618 + + + 695.446248 + -289.535149 + 521.091665 + + + 745.992263 + -331.093687 + 588.185653 + + + 806.7626 + -294.700574 + 578.407398 + + + 284.379775 + -288.396895 + 417.082622 + + + 378.507681 + -262.10864 + 510.080148 + + + 612.992997 + -373.927542 + 371.02553 + + + 601.803355 + -244.010222 + 638.139121 + + + 856.291349 + -375.511113 + 466.015489 + + + 749.172931 + -151.202978 + 891.719356 + + + 1295.828281 + -570.187106 + 236.600926 + + + 43201.717553 + -53046.231604 + 60351.542232 + + + -2648.486265 + 4780.307038 + -3960.574813 + + + 1657.80791 + -525.167629 + 1609.289647 + + + -174.204503 + 1397.868751 + -308.014267 + + + 1424.835402 + -542.726504 + 1588.762803 + + + -2225.881534 + 3108.151718 + -1689.741597 + + + 25559.305815 + -21702.30046 + 16078.353574 + + + 1514.416698 + 289.171925 + 1254.936548 + + + 567.531301 + 639.03921 + 310.390692 + + + 521.525146 + 574.324826 + 554.726896 + + + 479.66523 + 513.74498 + 561.436237 + + + 552.992694 + 401.626771 + 661.000135 + + + 477.376561 + 356.844067 + 612.595759 + + + 789.147569 + 124.697606 + 1441.094412 + + + 341.51529 + 1729.932523 + -2719.488946 + + + 558.400241 + 132.486997 + 1085.305909 + + + 501.519804 + 551.434138 + 518.32949 + + + 524.745149 + 380.367573 + 656.493311 + + + 482.678294 + 690.20692 + 395.87507 + + + 541.761838 + 255.030085 + 960.347689 + + + 144.877061 + 3178.245547 + -4990.974332 + + + 1793.565764 + -8964.83646 + 2734.307713 + + + 357.394927 + 1612.948754 + 143.715178 + + + 572.467975 + 28.878835 + 791.67604 + + + 454.812121 + 895.445476 + 356.062446 + + + 556.704212 + 144.98319 + 721.95213 + + + 276.404778 + 2209.463734 + -500.185111 + + + 2701.290611 + -15650.589947 + 25662.975652 + + + 153.585612 + 3114.01248 + 4463.8431 + + + 542.812496 + 247.30424 + 126.165091 + + + 481.977279 + 695.365394 + 615.156432 + + + 504.252076 + 531.307879 + 439.568442 + + + 481.722012 + 697.245136 + 658.479298 + + + 529.047312 + 348.687232 + 266.59021 + + + 267.264243 + 2276.768001 + 2553.628648 + + + 510.775098 + -71.781922 + 499.154607 + + + 521.622936 + -141.633747 + 569.277902 + + + 558.994966 + -272.60715 + 680.150585 + + + 423.759417 + -5.182596 + 525.06426 + + + 456.401971 + -125.255044 + 628.667997 + + + 516.00997 + -307.498345 + 773.738227 + + + 290.545651 + 168.230125 + 479.56956 + + + 512.59852 + -111.218188 + 484.292225 + + + 524.652419 + -150.258769 + 567.053871 + + + 565.645739 + -228.80476 + 699.527084 + + + 417.169136 + -48.478887 + 505.905303 + + + 452.976317 + -119.94435 + 629.467382 + + + 518.499598 + -231.987067 + 804.107498 + + + 271.018702 + 83.623742 + 440.04619 + + + 505.973337 + -146.873608 + 477.026105 + + + 527.907044 + -159.673587 + 573.452939 + + + 565.868762 + -181.827123 + 696.460616 + + + 416.915069 + -94.901367 + 508.880241 + + + 449.924771 + -114.165027 + 623.667401 + + + 522.924561 + -156.765931 + 804.868007 + + + 281.123979 + -15.656986 + 462.980998 + + + 503.993802 + -184.493406 + 490.309207 + + + 529.611626 + -163.720137 + 577.992695 + + + 567.178367 + -142.088127 + 682.31153 + + + 415.605709 + -134.210041 + 522.854974 + + + 448.218504 + -112.936712 + 620.269406 + + + 524.926004 + -88.463936 + 779.158765 + + + 281.408917 + -87.277519 + 491.459885 + + + -11702.999696 + 10979.192939 + 7869.657457 + + + 848.190095 + -871.582687 + 313.568214 + + + 306.854528 + -284.720975 + 676.789715 + + + 573.568535 + -376.068672 + 533.914747 + + + 367.239726 + -86.378489 + 690.415338 + + + 833.786569 + -311.37009 + 415.777286 + + + -2433.919457 + 580.038148 + 2871.018844 + + + 482.971253 + -5271.411274 + -1107.527378 + + + 461.978358 + 269.766329 + 801.638248 + + + 455.293032 + -594.067539 + 508.779386 + + + 445.653654 + -135.472695 + 670.567702 + + + 438.066011 + -595.369693 + 516.581172 + + + 426.652338 + 657.516295 + 951.444493 + + + 445.932809 + -11830.320048 + -3337.712872 + + + -3429.456847 + -17369.998449 + -3380.828167 + + + 943.241353 + 1771.874674 + 1086.029865 + + + 260.790088 + -1181.684559 + 400.51226 + + + 597.589026 + 319.772639 + 753.848189 + + + 238.279872 + -1221.372441 + 397.687721 + + + 1150.306411 + 2794.333373 + 1337.314652 + + + -7387.578977 + -34494.355721 + -7354.721252 + + + -3465.56878 + -16999.3346 + -3236.501769 + + + 928.118712 + 1722.340892 + 1076.293824 + + + 253.57507 + -1169.848566 + 408.023226 + + + 604.758629 + 312.255217 + 747.839058 + + + 253.594573 + -1200.856899 + 397.386473 + + + 1189.186332 + 2773.501002 + 1311.55967 + + + -7535.355802 + -34448.531677 + -7268.262927 + + + 738.745152 + -15197.844842 + -4632.051386 + + + 426.571277 + 1505.51458 + 1242.115735 + + + 467.214287 + -1076.357402 + 337.777596 + + + 436.573871 + 238.175275 + 802.974456 + + + 454.686201 + -1112.153093 + 331.507706 + + + 383.606787 + 2412.80509 + 1573.640062 + + + 979.065566 + -30495.706452 + -9990.113003 + + + -2394.784034 + 555.807843 + -509.36688 + + + 856.125508 + -444.208626 + 582.760383 + + + 354.935454 + -289.654846 + 411.814152 + + + 628.649873 + -373.549335 + 501.724881 + + + 364.045137 + -291.79596 + 410.42063 + + + 1103.544013 + -519.018434 + 657.128902 + + + -6221.473564 + 1735.316559 + -1810.930021 + + + 2033.689874 + 130.825795 + 1652.204525 + + + 323.875688 + -392.5138 + 322.974845 + + + 588.148686 + -311.654737 + 525.831375 + + + 442.917351 + -356.130548 + 410.872183 + + + 583.08722 + -313.255089 + 517.412454 + + + 188.736915 + -433.977455 + 209.11239 + + + 4169.326147 + 784.315301 + 3296.196585 + + + -9871.407491 + -5361.37316 + -3785.980219 + + + 1763.001124 + 384.080227 + 1146.308574 + + + -38.456769 + -500.804388 + 383.253022 + + + 891.454761 + -37.811479 + 778.000676 + + + -54.728312 + -500.634656 + 377.488519 + + + 2449.371523 + 739.189471 + 1439.520592 + + + -21280.536136 + -10966.957301 + -8618.809693 + + + 1985.60942 + -10005.241827 + -209.93258 + + + 308.712189 + 967.513187 + 709.612433 + + + 561.031457 + -734.103427 + 564.263631 + + + 420.530677 + 144.98942 + 635.744633 + + + 550.151483 + -750.535241 + 558.12324 + + + 182.304878 + 1622.151236 + 755.095163 + + + 3615.242891 + -20975.173054 + -1145.899565 + + + -4192.299691 + -18270.638061 + 13694.744697 + + + 1063.295586 + 2151.62382 + -1004.93696 + + + 253.485703 + -1042.640984 + 1264.769512 + + + 677.909106 + 568.758892 + 81.419964 + + + 253.994611 + -1122.966758 + 1271.493931 + + + 1391.554572 + 3265.132794 + -1907.021784 + + + -9378.052087 + -38709.032137 + 28227.543773 + + + 7455.094915 + -43883.965186 + 47725.998739 + + + -352.144757 + 5334.67424 + -5386.195492 + + + 844.805118 + -2323.826032 + 2937.343009 + + + 212.696504 + 1571.363743 + -1218.814656 + + + 836.239156 + -2465.071206 + 3192.35703 + + + -847.937285 + 8075.7593 + -8142.076801 + + + 14975.07891 + -91971.824206 + 99975.35515 + + + 6390.389265 + -48536.594297 + 48585.637363 + + + -221.249726 + 5897.078131 + -5471.632696 + + + 787.982931 + -2534.371151 + 2959.041667 + + + 258.096455 + 1730.484674 + -1230.414086 + + + 780.569865 + -2685.652349 + 3209.039085 + + + -621.583515 + 8774.596284 + -8132.638784 + + + 12344.121421 + -98286.65805 + 98336.08579 + + + -8684.906199 + -22840.118302 + 80.605196 + + + 1600.34741 + 2700.481273 + 666.343846 + + + 25.647195 + -1270.134447 + 575.916311 + + + 857.147119 + 746.616344 + 622.672352 + + + 38.208641 + -1343.431571 + 575.332729 + + + 2249.356558 + 4106.308044 + 700.745994 + + + -18445.245052 + -47440.506945 + -479.755283 + + + -8062.165295 + -25611.850589 + -2238.225459 + + + 1522.040803 + 3042.115208 + 957.050476 + + + 58.182139 + -1404.643698 + 460.978564 + + + 831.332506 + 850.822781 + 712.329695 + + + 72.227807 + -1484.447147 + 451.728176 + + + 2121.459962 + 4594.243839 + 1129.440083 + + + -16940.009361 + -52576.107689 + -5246.294643 + + + -1086.146523 + -6144.00007 + 7064.266857 + + + 659.172063 + 653.154686 + -153.553746 + + + 401.411994 + -448.924311 + 955.891715 + + + 564.266619 + 107.710278 + 316.743553 + + + 431.331763 + -502.114693 + 907.261449 + + + 858.515526 + 1096.914136 + -830.76476 + + + -3602.7621 + -16581.931684 + 17753.686717 + + + -5811.415224 + 1012.413294 + 12430.054122 + + + 1130.170943 + -544.30095 + -805.995023 + + + 57.522691 + -302.060048 + 1241.926865 + + + 616.751221 + -426.126516 + 177.691527 + + + 53.801276 + -298.29759 + 1253.566213 + + + 1557.555388 + -634.381709 + -1611.976766 + + + -12730.268056 + 2574.269479 + 25638.64647 + + + 11143.474893 + -11480.281413 + -4081.885098 + + + -958.233561 + 1011.618965 + 1224.916294 + + + 907.64619 + -922.674014 + 409.369241 + + + -49.17868 + 58.416969 + 831.085264 + + + 924.845693 + -954.737876 + 406.461063 + + + -1634.27639 + 1681.259386 + 1530.50462 + + + 22227.120463 + -22970.741049 + -8926.235744 + + + 407.757442 + -356.061894 + 612.190607 + + + 392.911842 + -362.28293 + 625.677948 + + + 378.066242 + -368.503965 + 639.165233 + + + 363.220642 + -374.725 + 652.652515 + + + 348.375042 + -380.946036 + 666.139806 + + + 333.529442 + -387.167071 + 679.627085 + + + 318.683842 + -393.388106 + 693.11429 + + + -1478.747637 + -2316.533427 + -16354.996698 + + + 643.458587 + -134.911119 + 2770.056679 + + + 285.139417 + -471.862159 + -219.045205 + + + 435.478639 + -292.352666 + 1326.598096 + + + 234.27509 + -469.778141 + -261.800834 + + + 684.55313 + 14.270832 + 3957.829831 + + + -3958.956155 + -4673.599433 + -37234.210337 + + + 1086.031395 + 3137.372911 + -3027.157894 + + + 286.029026 + -792.604122 + 1085.960179 + + + 408.602322 + -186.643858 + 452.161478 + + + 340.334169 + -518.975031 + 800.296841 + + + 404.797465 + -198.718509 + 465.490786 + + + 221.316336 + -1097.50602 + 1406.429994 + + + 2042.495588 + 7859.823565 + -7967.184095 + + + -9223.849461 + -14467.862936 + 12293.122052 + + + 1555.575988 + 1362.631659 + -788.409479 + + + -113.839018 + -1084.793144 + 1234.898263 + + + 751.020606 + 188.712335 + 183.235968 + + + -126.557715 + -1096.104016 + 1245.766219 + + + 2204.24653 + 2329.763983 + -1584.604575 + + + -19962.745132 + -30213.078568 + 25309.502335 + + + 4884.299551 + 4490.07566 + 946.988554 + + + 566.047219 + 8.736379 + 232.114887 + + + 164.51668 + -479.976565 + 215.121033 + + + 263.252256 + -458.728432 + 287.26623 + + + 438.377065 + -359.610672 + 373.023918 + + + 524.795676 + -350.918201 + 442.975711 + + + 251.093591 + -709.325426 + 448.746023 + + + 480.684404 + -784.725986 + 381.311183 + + + 274.95362 + -255.262798 + 345.356771 + + + 339.64843 + -469.712207 + 291.638016 + + + 379.346869 + -389.251706 + 375.078204 + + + 320.638944 + -349.375944 + 278.444646 + + + 433.959093 + -543.764037 + 313.709675 + + + 265.504033 + 1.002462 + 345.924107 + + + -1033.922313 + 1410.915801 + -36.036142 + + + 187.696937 + -295.108481 + 262.035832 + + + 373.126826 + -483.595341 + 325.839721 + + + 364.797777 + -385.25229 + 348.454663 + + + 334.906385 + -295.801082 + 331.613293 + + + 392.302997 + -537.086086 + 161.132261 + + + 903.94832 + -2535.888203 + -839.961465 + + + -6003.042344 + 5585.862227 + -3182.762957 + + + 374.170662 + -446.503314 + 436.458311 + + + 337.910715 + -488.402276 + 275.254628 + + + 385.187705 + -366.843927 + 385.765716 + + + 313.537998 + -294.328366 + 278.655714 + + + 427.925986 + -274.103389 + 393.11947 + + + 989.777162 + -8704.597912 + -6629.053735 + + + 10332.525171 + -467.784059 + 3143.033784 + + + -1454.323905 + 856.103133 + 86.487897 + + + 1190.654753 + -23.003373 + 656.342809 + + + 148.016695 + 668.588117 + 669.623244 + + + 606.259764 + 207.315118 + 216.340496 + + + 1010.117123 + 694.748771 + 1648.797072 + + + -2567.835015 + 55.167787 + -5452.273513 + + + -3984.426359 + 1473.751658 + -4462.75917 + + + 346.231168 + 265.781983 + 409.959479 + + + 612.738709 + 256.654536 + 676.074146 + + + 474.231365 + 432.166858 + 570.401532 + + + 392.604722 + 541.966938 + 463.661788 + + + 887.581933 + 268.896643 + 725.48939 + + + 9434.714858 + -5810.21642 + 5519.050169 + + + 26108.768386 + 28388.99417 + -2206.519446 + + + -376.138562 + -1263.844421 + 1269.901496 + + + 260.823755 + 410.944514 + 157.285123 + + + 424.184574 + -265.681739 + 791.016338 + + + 430.674695 + 333.009523 + 106.300545 + + + 1420.526088 + -861.096932 + 1959.603461 + + + -29628.301752 + 6589.541247 + -32922.249362 + + + 13585.989734 + 933.410744 + 5366.642684 + + + -835.235794 + -34.230379 + -352.956454 + + + 887.421489 + 1.455063 + 989.856515 + + + 115.420885 + 1.5 + 88.319016 + + + 986.841707 + 1.544937 + 892.03936 + + + -1085.923627 + 37.230379 + -1703.378682 + + + 25639.999242 + -930.410744 + 35272.397036 + + + 12974.760289 + 8664.644531 + 6267.830217 + + + -840.601989 + -319.784917 + -378.362588 + + + 900.649136 + 14.161851 + 988.938159 + + + 102.593611 + 13.812578 + 91.545297 + + + 1002.447248 + 13.463298 + 888.630211 + + + -1179.249615 + 347.410084 + -1659.088355 + + + 27310.509545 + -8637.019559 + 33914.341559 + + + 14174.810314 + 16205.929698 + 9391.001883 + + + -1028.181493 + -613.30305 + -627.16792 + + + 976.081846 + 31.383841 + 1073.493409 + + + 42.768895 + 25.0 + 28.001046 + + + 1091.744376 + 18.61616 + 976.185515 + + + -1490.818367 + 663.303051 + -1936.330167 + + + 31748.280853 + -16155.929697 + 36765.89191 + + + 364.590427 + -31.488168 + 595.081927 + + + 406.050793 + -22.806877 + 572.512562 + + + 444.586882 + -12.556958 + 543.744667 + + + 456.352685 + 12.05296 + 458.246404 + + + 487.784176 + 26.113895 + 414.422889 + + + 603.06713 + -4.804402 + 548.293799 + + + 2104.095577 + -779.058203 + 3618.774674 + + + 80.523523 + -534.554453 + 511.389503 + + + 520.21315 + -156.355504 + 890.36393 + + + 484.594282 + -287.367838 + 580.013225 + + + 492.964932 + 10.534847 + 620.931232 + + + 492.477926 + -116.83944 + 335.931864 + + + 539.230688 + 225.785266 + 435.216184 + + + 4.446883 + -117.376742 + -356.089623 + + + 1230.349796 + -497.564136 + 1096.272376 + + + 283.199187 + 28.549913 + 691.752757 + + + 589.837773 + -178.951097 + 541.759014 + + + 412.041264 + 71.791474 + 425.037866 + + + 633.850004 + -84.695811 + 258.854183 + + + 416.803811 + 172.160244 + 121.479945 + + + 1158.956169 + -100.332757 + 202.79622 + + + 269.391495 + 46.580466 + 525.948104 + + + 425.569533 + 13.832231 + 311.744638 + + + 502.528942 + -2.305025 + 399.269165 + + + 536.412496 + -9.409907 + 283.217643 + + + 627.164452 + -28.439256 + 361.112165 + + + 644.345564 + -32.041882 + 244.766638 + + + 890.062669 + -83.565142 + 335.930425 + + + 11641.962052 + -24651.338493 + 5089.54929 + + + 399.541968 + 1296.257528 + 89.66638 + + + 829.942009 + -120.318089 + 362.624636 + + + 487.880381 + 273.960354 + 286.648763 + + + 575.446187 + -338.921316 + 404.743925 + + + 62.648492 + 455.607535 + 251.645599 + + + 2278.064429 + -5145.516527 + 1330.907119 + + + 1423.463884 + -224.400449 + 1329.925408 + + + 667.238979 + -44.057573 + 564.318551 + + + 376.583331 + 25.257356 + 211.168596 + + + 430.560697 + 12.384951 + 163.339421 + + + 611.208069 + -30.695443 + 227.73251 + + + 665.142028 + -43.557497 + 179.865469 + + + 374.935672 + 25.650286 + -172.892335 + + + 494.138227 + 159.334251 + 715.611985 + + + 535.475332 + -101.098982 + 550.395409 + + + 525.840562 + -40.397727 + 410.329408 + + + 510.021567 + 59.265566 + 273.303675 + + + 531.902158 + -78.58717 + 117.68366 + + + 514.870234 + 28.717854 + -18.741422 + + + 517.731328 + 10.692305 + -164.994843 + + + 520.807971 + -8.691245 + 688.109496 + + + 540.420635 + -132.255527 + 291.548056 + + + 511.876667 + 47.578014 + 272.007556 + + + 529.900877 + -65.978639 + 122.593207 + + + 501.251148 + 114.521219 + 76.490526 + + + 521.769388 + -14.748396 + -51.648021 + + + 467.893972 + 324.67907 + -285.545319 + + + -9317.975501 + 11305.88312 + -7447.941728 + + + 203.181774 + -614.207982 + -384.813614 + + + 516.995678 + -40.254442 + 292.690953 + + + 863.386284 + -468.748389 + 276.585344 + + + 130.272928 + 576.044604 + -268.411693 + + + 1383.94175 + -1310.673678 + 887.655509 + + + -4971.936365 + 9973.355787 + 246.442766 + + + 3777.705061 + -5220.76741 + 1729.819057 + + + 302.178366 + 366.518462 + 37.022696 + + + 687.767838 + -253.283556 + 145.80417 + + + 468.118086 + 99.825452 + 39.21236 + + + 585.878628 + -89.563796 + 173.902543 + + + 195.25833 + 538.400682 + -17.729773 + + + 2392.373589 + -2993.644023 + 991.819561 + + + -26258.965749 + 24068.637271 + -21376.007146 + + + -742.846888 + 707.353342 + -831.367433 + + + 1000.657483 + -756.399897 + 581.366695 + + + 630.45601 + -45.864926 + 94.311846 + + + 128.272907 + 584.617028 + -322.662903 + + + 1203.704201 + -1284.353701 + 1444.761405 + + + 17292.148868 + -30363.961879 + 26993.868461 + + + -1445.906044 + -21.749685 + 1316.92982 + + + -173.865329 + 7.415799 + -159.053855 + + + 352.226095 + 19.478078 + 518.608554 + + + 664.956874 + 26.648402 + -308.357965 + + + 1298.484741 + 41.173996 + 306.571124 + + + 1487.394013 + 45.505327 + -531.308483 + + + 3264.199982 + 86.244121 + 261.490295 + + + -8291.062906 + -9134.024092 + 522.89534 + + + 1847.43924 + 1241.442529 + -51.090183 + + + 385.388991 + -480.806147 + 31.684053 + + + 1466.192234 + 448.777308 + -29.50921 + + + 726.440679 + -520.217242 + 12.373358 + + + 3310.426312 + 1976.970235 + -133.924436 + + + -41688.431599 + -45147.935677 + 2413.819313 + + + -137408.867766 + 64551.236357 + 7676.926596 + + + 12278.966369 + -6068.10184 + -366.98954 + + + -2764.080484 + 1677.350709 + 539.04266 + + + 2810.302065 + -1359.970441 + 176.722081 + + + -2224.676388 + 1541.596538 + 527.197574 + + + 6921.23629 + -4198.377112 + -184.928124 + + + -34427.295946 + 29264.227794 + 4243.161022 + + + 38731.843146 + -36670.948204 + -4124.627203 + + + -3253.415815 + 3984.078806 + 835.085781 + + + 1822.210053 + -1464.78535 + 157.863927 + + + -344.108463 + 814.788351 + 440.317649 + + + 1659.418995 + -1106.504329 + 206.45368 + + + -2592.198767 + 3296.999098 + 750.478079 + + + 24598.880429 + -24678.008315 + -2700.953003 + + + -459.689604 + 4968.153651 + -235.273322 + + + 1085.628809 + -580.412193 + 27.436217 + + + 884.542829 + 258.603359 + -12.273976 + + + 1046.67807 + -136.493311 + 6.460132 + + + 965.194 + 287.254267 + -13.58561 + + + 1242.126697 + -855.308166 + 40.483973 + + + -1600.951822 + 6459.190979 + -306.325863 + + + 7060.607718 + -593.006485 + 29.1357 + + + -208.022887 + -214.009869 + 9.698946 + + + 1444.138172 + 231.547618 + -10.786445 + + + 710.464065 + -165.258926 + 7.702043 + + + 1452.680034 + 196.960713 + -9.17187 + + + -405.735743 + -1057.963062 + 49.496104 + + + 10866.49926 + 12164.842456 + -570.556369 + + + -30873.203872 + 5812.132168 + -275.277114 + + + 4173.328275 + 1819.378066 + -85.5818 + + + 106.072691 + -861.50944 + 40.571675 + + + 1606.175086 + 556.731958 + -26.238155 + + + -70.635335 + -802.814006 + 37.789739 + + + 3037.810476 + 2705.607547 + -127.592966 + + + -19110.151336 + -32976.708028 + 1557.418458 + + + 505.093599 + -12.79002 + 390.371782 + + + 511.211653 + -10.093996 + 370.46453 + + + 517.329707 + -7.397972 + 350.557223 + + + 523.447761 + -4.701948 + 330.649911 + + + 529.565815 + -2.005924 + 310.74261 + + + 535.683869 + 0.6901 + 290.835296 + + + 541.801924 + 3.386124 + 270.927909 + + + -628.971826 + -189.143133 + -370.372738 + + + 435.804899 + -504.507063 + 514.286257 + + + 402.268918 + -400.380632 + 555.149648 + + + 614.470685 + -617.587228 + 618.830733 + + + 652.874945 + -534.904319 + 719.366662 + + + 956.239381 + -626.008751 + 970.487034 + + + -323.453017 + -641.490913 + -380.54271 + + + 2332.410194 + -1192.054454 + 1998.148056 + + + 106.440389 + -390.61121 + 252.547679 + + + 606.556099 + -549.664612 + 660.116158 + + + 715.040773 + -640.090923 + 707.690087 + + + 909.698836 + -428.58297 + 1065.827476 + + + 911.103493 + -510.345819 + 1007.630044 + + + 2546.463278 + -764.049567 + 2534.531446 + + + 14481.251367 + -12176.073948 + -12124.03865 + + + -31.823812 + 60.455645 + 1253.994592 + + + 865.153148 + -736.439704 + 666.783045 + + + 778.317671 + -371.801275 + 1059.579235 + + + 1226.12196 + -718.348645 + 898.33972 + + + 946.429297 + 49.979504 + 1530.490837 + + + 3073.159407 + -9848.008301 + -2334.974852 + + + 722.786989 + -715.509347 + 404.941969 + + + 833.58518 + -559.220793 + 633.987548 + + + 888.321482 + -472.488037 + 1029.608207 + + + 1064.871623 + -565.486032 + 1031.827919 + + + 1266.563566 + -556.409292 + 966.074612 + + + 1346.72044 + -366.46701 + 1292.960082 + + + 1427.858704 + -330.612861 + 1602.165016 + + + 713.338884 + -567.873156 + 955.453367 + + + 932.423135 + -510.961561 + 1059.508303 + + + 1075.815822 + -591.937208 + 950.431863 + + + 1234.815251 + -486.00079 + 1095.426774 + + + 1412.824255 + -556.498105 + 1014.100876 + + + 1549.236643 + -572.309814 + 988.624718 + + + 1754.763951 + -393.031746 + 1249.487673 + + + 7901.974577 + 38492.419186 + -4520.160171 + + + 4493.810293 + -6543.678345 + 1192.444281 + + + -813.199486 + 1943.7168 + 1104.082432 + + + 3259.253434 + -2531.588807 + 957.43125 + + + -1123.032806 + 2472.55613 + 1115.169497 + + + 13157.724567 + -11001.846303 + 321.614159 + + + -169487.84145 + 144922.96737 + 12487.134406 + + + -868.997739 + -2448.869138 + 2324.272994 + + + 727.295932 + -641.420982 + 727.619797 + + + 759.16407 + -514.167426 + 802.044103 + + + 858.308391 + -532.986272 + 942.030063 + + + 875.322655 + -503.64232 + 1083.909031 + + + 873.917559 + -356.876639 + 1159.102289 + + + -2779.728148 + 4529.246709 + -316.591962 + + + -7261.826216 + 9257.991019 + -15613.480912 + + + 1157.967903 + -1105.798128 + 1605.718823 + + + 819.540128 + -462.995349 + 782.799437 + + + 878.089237 + -513.713572 + 1191.66802 + + + 742.801066 + -170.258054 + 880.938708 + + + 823.7231 + -380.215297 + 1614.808426 + + + 2958.930692 + 2035.88488 + -4496.787816 + + + -39142.141626 + -3156.90445 + -3165.5651 + + + 5486.015348 + -232.118099 + 2202.828343 + + + -725.958282 + -539.418377 + 518.535076 + + + 1837.980675 + -200.217514 + 1488.579083 + + + -452.74438 + -248.739018 + 502.208109 + + + 3706.707798 + 243.448415 + 2529.822 + + + -17815.998902 + -1439.954049 + -7811.121899 + + + -1784.119231 + 3250.642851 + 934.281275 + + + 711.810694 + -354.552565 + 1055.979994 + + + 929.739994 + -426.461536 + 1062.99555 + + + 714.005822 + -57.413641 + 1074.905317 + + + 691.668749 + 160.851146 + 1079.348337 + + + 1288.654575 + -206.591322 + 1071.733747 + + + 17598.522745 + -14581.899397 + 659.804285 + + + -1690.283909 + -1345.554789 + 129.95218 + + + 836.60984 + -391.180316 + 780.012906 + + + 175.21606 + -563.669714 + 552.959532 + + + 549.071503 + -478.179569 + 563.015463 + + + -4.106607 + -586.46039 + 302.085379 + + + 1257.872505 + -324.734371 + 1128.471469 + + + -8328.025326 + -2424.126157 + -8914.496893 + + + 31139.288323 + 6678.487635 + 11613.038912 + + + -3756.708492 + -1903.591116 + -2915.562277 + + + 2022.316935 + 114.382567 + 2227.147594 + + + -997.768924 + -1079.312784 + -966.000268 + + + 2079.124286 + 392.239629 + 2275.448042 + + + -6156.456508 + -4098.134402 + -7025.482674 + + + 78087.576625 + 63866.895158 + 81956.145921 + + + 5789.34599 + 16386.013972 + -5973.100612 + + + 184.693901 + -1761.606995 + 1565.47116 + + + 174.083499 + -298.017543 + -115.195934 + + + 270.074188 + -614.532835 + 505.594638 + + + 250.733532 + -220.308068 + -19.908765 + + + 509.900425 + -433.284688 + 964.347267 + + + -4608.21108 + -3781.799272 + -9040.401369 + + + 128.36249 + -409.943361 + 169.671638 + + + 267.668527 + -400.547639 + -71.678083 + + + 364.364796 + -400.004714 + -63.497085 + + + 442.140441 + -399.123105 + -69.091972 + + + 574.842723 + -396.248102 + -76.712959 + + + 518.972871 + -393.98618 + -35.82334 + + + 2346.505451 + -178.405356 + -453.042065 + + + 614.044058 + -3662.247094 + -990.039334 + + + 473.304905 + 38.718369 + -8.437367 + + + 497.284226 + -560.884135 + -77.140482 + + + 505.149133 + -274.836185 + -75.482053 + + + 512.757243 + -566.019145 + -43.418837 + + + 538.875741 + 67.389483 + -181.225316 + + + 351.935695 + -4022.28252 + 1311.129669 + + + 426.814964 + -393.189857 + -66.835706 + + + 453.722317 + -397.58208 + -68.68837 + + + 491.927995 + -397.165635 + -68.459768 + + + 528.425515 + -397.382358 + -68.557108 + + + 565.902648 + -397.273891 + -68.462964 + + + 601.886279 + -397.595073 + -68.668704 + + + 645.733754 + -396.363879 + -67.210095 + + + 496.887375 + -401.805572 + -265.857275 + + + 539.609564 + -399.059405 + -69.6695 + + + 545.308702 + -396.510826 + -66.139189 + + + 549.298205 + -397.874282 + -69.259233 + + + 553.497307 + -397.018234 + -72.56719 + + + 558.71006 + -398.959854 + -68.610617 + + + 604.846904 + -347.405402 + 124.328059 + + + 543.649242 + -411.915048 + -68.765819 + + + 547.930071 + -396.51284 + -70.178456 + + + 550.273035 + -397.738037 + -70.056006 + + + 552.816189 + -397.246108 + -70.091753 + + + 555.286678 + -397.377438 + -70.070175 + + + 557.821062 + -396.960684 + -70.099135 + + + 560.146483 + -398.336252 + -69.963111 + + + -10052.65928 + -79750.142179 + 7027.206237 + + + -87.680889 + 2410.224209 + -317.672078 + + + 236.059432 + -545.736541 + -61.790521 + + + 850.669119 + -452.86078 + -60.564227 + + + 1473.626205 + -688.317389 + -45.720976 + + + 1778.259569 + -2891.142932 + 179.444849 + + + 11952.450006 + 70455.582333 + -6934.144254 + + + 1137.990815 + -633.718125 + -41.504495 + + + 1141.698438 + -650.703293 + -45.784699 + + + 1147.896976 + -649.27169 + -45.202541 + + + 1153.840105 + -649.67394 + -45.411501 + + + 1159.875665 + -649.420525 + -45.29037 + + + 1165.82677 + -649.774223 + -45.426678 + + + 1172.041541 + -648.243817 + -44.693919 + + + 7605.238873 + 45699.880559 + 182079.243296 + + + -149.275994 + -4296.663708 + -23997.752596 + + + 1036.624224 + 51.394123 + 8960.772116 + + + 1386.740166 + -684.21186 + -6894.856021 + + + 1737.969398 + -1408.133918 + 9776.59467 + + + 2921.34727 + 2913.447952 + -28028.211378 + + + -4813.945739 + -46881.631259 + 233839.038453 + + + 1601.953546 + -714.801905 + -7.206293 + + + 1608.110085 + -713.854217 + -9.674147 + + + 1614.075816 + -714.061573 + -9.136417 + + + 1620.101736 + -713.904618 + -9.544964 + + + 1626.059525 + -714.160159 + -8.880402 + + + 1632.199902 + -713.310538 + -11.087395 + + + 1636.689281 + -722.45114 + 12.628181 + + + -6016.844158 + 22834.39896 + -5570.17617 + + + 1690.03946 + -1877.545987 + 161.98468 + + + 1452.333639 + -488.488814 + -10.250323 + + + 1773.163693 + -873.724458 + -14.649495 + + + 1789.075598 + -306.30391 + -47.390261 + + + 2230.307872 + -1038.624974 + -156.224469 + + + 750.314967 + 2899.3175 + 4812.296895 + + + 1697.732658 + -689.111871 + -19.625771 + + + 1749.120127 + -670.458314 + -2.592173 + + + 1756.982357 + -618.131963 + -52.323239 + + + 1822.383888 + -611.689385 + -10.348933 + + + 1822.647169 + -553.204221 + -72.440548 + + + 1890.111984 + -548.357987 + -27.301027 + + + 1876.820079 + -479.711315 + -109.367124 + + + 254.891001 + -446.827463 + 266.495806 + + + 260.396711 + -433.666305 + 265.524709 + + + 265.184852 + -420.955124 + 263.255296 + + + 268.458332 + -409.772162 + 258.85145 + + + 268.867413 + -401.83695 + 250.708266 + + + 264.310528 + -399.432657 + 235.816795 + + + 251.727612 + -405.21579 + 208.971346 + + + -5193.075289 + 2079.550157 + -16941.446872 + + + 570.170767 + -1161.123951 + 1958.086795 + + + 191.903255 + -171.439126 + -243.757572 + + + 334.182994 + -538.362518 + 608.944353 + + + 109.381007 + -235.476686 + -416.406532 + + + 546.313012 + -820.154829 + 1587.903429 + + + -521.82256 + 2682.049456 + -12131.058141 + + + 426.704121 + -360.006345 + 336.33384 + + + 277.487595 + -395.7857 + 234.595585 + + + 239.113827 + -401.888634 + 193.297011 + + + 241.406571 + -401.179003 + 153.518024 + + + 253.618405 + -400.909228 + 106.733173 + + + 266.097567 + -401.326031 + 59.550972 + + + 278.556292 + -401.276587 + 14.905645 + + + 526.614011 + -395.943693 + 90.4652 + + + 169.701499 + -409.970438 + 300.246737 + + + 259.476473 + -394.481491 + 129.077572 + + + 272.763294 + -408.709953 + 4.101983 + + + 314.956454 + -387.229599 + -99.992317 + + + 546.9082 + -446.421613 + -346.054618 + + + 3683.304268 + 204.67274 + 6935.28008 + + + 3340.750957 + -230.671227 + 1075.51305 + + + 8716.14948 + 26525.318653 + -10669.66859 + + + 39.137453 + -2767.681409 + 2372.297845 + + + 192.194604 + 6.967395 + -426.596178 + + + 269.878232 + -812.553742 + 739.65929 + + + 248.017236 + 50.607684 + -351.585595 + + + 624.268302 + -971.682689 + 1932.72229 + + + -10016.218448 + -4842.774731 + -22611.102732 + + + 35266.664452 + 12228.522587 + 39409.850103 + + + -1984.83614 + -1627.221744 + -4633.441103 + + + 811.550296 + -6.389729 + 2197.72475 + + + -123.6753 + -668.203059 + -1381.22128 + + + 828.582582 + -54.962317 + 1921.951047 + + + -1015.456596 + -1316.378796 + -6849.200244 + + + 28033.791959 + 6910.451723 + 72376.109145 + + + 48375.198206 + 2392.988137 + 7354.310623 + + + -4587.374424 + -707.496589 + 702.520933 + + + 1732.165904 + -299.005226 + -351.794639 + + + -635.848846 + -472.393163 + 152.080587 + + + 1969.420938 + -297.133516 + -385.923936 + + + -2931.305117 + -677.277667 + 822.258591 + + + 30292.874241 + 2714.140291 + -7117.348575 + + + 4996.281352 + -864.385338 + 1261.762876 + + + -359.455552 + -219.894701 + -154.662648 + + + 495.323122 + -507.857704 + 96.166114 + + + 106.921687 + -289.74583 + 69.828766 + + + 406.21895 + -609.498849 + 151.133064 + + + -104.292506 + 169.50143 + 188.107896 + + + 1955.289103 + -4967.613333 + -64.435511 + + + 1969.714548 + -920.796331 + -468.155424 + + + 1732.830892 + -564.947704 + 37.336049 + + + 1808.539487 + -601.504693 + -80.14374 + + + 1839.527271 + -567.038262 + -7.512745 + + + 1894.258986 + -577.492447 + -84.862327 + + + 1879.698379 + -498.108651 + -3.554099 + + + 2374.802163 + -1022.559953 + -697.745368 + + + -422.801881 + -2759.431919 + -569.817959 + + + 2059.129296 + -334.734894 + -33.366558 + + + 1731.692142 + -677.917575 + -24.161701 + + + 1969.505119 + -483.32401 + -54.833026 + + + 1841.797456 + -655.334596 + -125.622674 + + + 2249.045477 + -25.39068 + 160.153933 + + + -1285.694324 + -3726.794165 + -39.73228 + + + 3098.194897 + 2219.707535 + 1649.365345 + + + 1681.372249 + -882.402487 + -171.379395 + + + 1968.77718 + -461.129022 + -45.616141 + + + 1888.065233 + -586.702652 + -83.593796 + + + 1986.506809 + -400.196451 + 7.188074 + + + 1755.147221 + -691.401296 + -88.222082 + + + 2400.900079 + 1296.97297 + 761.383216 + + + 1916.923861 + -557.335747 + -45.29761 + + + 1926.656324 + -528.934589 + -55.733669 + + + 1930.358455 + -507.597704 + -54.746551 + + + 1919.640314 + -503.15354 + -26.443346 + + + 1931.763546 + -471.9517 + -41.408194 + + + 1920.235188 + -468.456671 + -11.570206 + + + 1932.26014 + -437.369962 + -26.348895 + + + 37721.587651 + -26852.535515 + 13358.66153 + + + 322.750857 + 843.967279 + -864.402002 + + + 2140.510581 + -989.33671 + 120.744724 + + + 1810.497489 + -102.643885 + -137.987001 + + + 2368.413678 + -762.949493 + 299.666108 + + + 2144.316531 + 929.474958 + -314.850677 + + + -3209.854133 + -14187.459184 + 9888.673422 + + + -6872.201056 + -5770.738 + 1331.113765 + + + 2102.738415 + -564.276589 + 500.525385 + + + 1901.179051 + -346.236254 + -361.137397 + + + 2326.171115 + -367.723802 + 382.433001 + + + 1932.291634 + -425.579632 + 157.618096 + + + 3594.952728 + -356.332521 + 1510.757425 + + + -731.990892 + 1336.955463 + -14922.442101 + + + 23524.091272 + 1532.778863 + 3805.576527 + + + 167.388428 + -364.020358 + -1418.756853 + + + 2643.137004 + -408.042047 + 754.402063 + + + 1946.324172 + -383.151506 + 59.182551 + + + 3159.877307 + -357.280109 + 810.364024 + + + 1510.495773 + -329.577871 + -627.882644 + + + 14093.892617 + -407.627135 + 9457.219608 + + + -3225.590457 + -3055.379459 + -6088.697287 + + + 2422.942318 + -265.639141 + 733.756015 + + + 1553.457986 + -709.749001 + -352.274406 + + + 2037.940871 + -482.101322 + 204.499644 + + + 1577.825219 + -723.106931 + -384.832854 + + + 2889.083261 + -85.262878 + 1175.0895 + + + -10390.00917 + -6686.277928 + -14967.848672 + + + 5576.197437 + -10358.755051 + 1601.552348 + + + 1362.126665 + 621.950288 + -243.762964 + + + 2012.899469 + -1077.012249 + 41.864178 + + + 1673.08386 + -194.11745 + -106.415115 + + + 2014.456485 + -1086.663203 + 43.685784 + + + 1101.294463 + 1290.594567 + -355.735856 + + + 9773.901396 + -21316.376814 + 3443.687191 + + + 2281.621626 + 6153.69802 + -997.462634 + + + 1762.53398 + -1410.125664 + 76.874423 + + + 1845.2489 + -239.607029 + -89.750256 + + + 1805.081187 + -852.56199 + -2.981789 + + + 1849.582176 + -236.666378 + -90.806493 + + + 1737.767882 + -1889.473622 + 143.702562 + + + 2830.837851 + 13944.96863 + -2106.349475 + + + -5606.140842 + 12478.538017 + 1942.864242 + + + 961.297584 + -2122.733848 + -135.994303 + + + 42.275773 + 181.901233 + 152.269426 + + + 353.845953 + -762.139061 + 133.945672 + + + 169.949427 + -69.089965 + 217.748854 + + + 346.936121 + -1123.700686 + 217.864598 + + + -859.634891 + 5070.673954 + 791.130911 + + + 9955.934386 + 28023.679806 + 79137.290632 + + + 1501.534553 + -866.443964 + -2882.055877 + + + 3003.055611 + -138.876282 + 600.269518 + + + 2099.294551 + -369.538371 + 520.199067 + + + 2953.178259 + -814.929732 + 519.557224 + + + 378.847179 + 410.579727 + 3817.712579 + + + 32951.397188 + -33491.755372 + -76347.67731 + + + 28567.655153 + -114125.20744 + -23479.553094 + + + -1191.418185 + 14605.326857 + 2723.444419 + + + 3464.0757 + -6065.547483 + -1375.721298 + + + 774.016244 + 5152.284176 + 992.84698 + + + 3308.245891 + -6309.703033 + -1238.523788 + + + -4151.558125 + 25614.666983 + 5329.775695 + + + 87830.241575 + -374159.423019 + -75659.149662 + + + 4858.375348 + 160.034999 + -1226.368276 + + + 1697.854676 + 10.524671 + 68.005452 + + + 2126.04513 + 111.943008 + -125.078452 + + + 1863.104082 + 191.143906 + -24.367286 + + + 2056.567549 + 280.218116 + -119.018157 + + + 1395.539132 + 269.876899 + 129.359967 + + + 3759.056573 + -2678.135358 + -1760.461821 + + + 5529.402001 + -45607.821719 + -637.285335 + + + 104.475503 + 3419.173327 + -289.191576 + + + 3037.634732 + -689.297386 + 71.791437 + + + 961.025612 + 810.884453 + -205.492791 + + + 3059.482905 + -463.353271 + 247.288202 + + + -3542.408446 + 1854.238928 + -1347.227133 + + + 69479.863056 + -7557.959351 + 32960.664379 + + + 33038.969512 + 24143.144361 + 34503.855506 + + + 562.766768 + -2798.538443 + -1930.609276 + + + 1914.14652 + 1364.900716 + 71.491575 + + + 1687.226372 + -656.375164 + 106.114294 + + + 1755.001236 + 1628.361127 + -145.487215 + + + 2239.449993 + -4200.455398 + 2790.524508 + + + -10280.814591 + 62033.513281 + -59842.372253 + + + 2575.193563 + -764.986643 + 198.412247 + + + 1946.843809 + 22.615412 + -102.856066 + + + 2027.436785 + 64.079781 + -126.367873 + + + 1937.001223 + 230.887581 + -7.592757 + + + 1970.80387 + 321.84533 + -50.373711 + + + 1837.653994 + 585.079603 + -145.550173 + + + 2695.474015 + -321.83656 + 634.932052 + + + 2228.993547 + 1964.976957 + 1763.192455 + + + 1764.375293 + -254.532117 + -455.248718 + + + 2119.011539 + 296.779847 + 126.652886 + + + 1769.06739 + 295.280916 + -151.170559 + + + 2224.178062 + 647.844602 + -15.937329 + + + 1333.258949 + 442.063767 + 25.623534 + + + 5834.400691 + 3064.946095 + -1135.027263 + + + 1594.594342 + -1352.958041 + -422.468926 + + + 1981.104948 + 566.003233 + -8.050973 + + + 1941.829103 + 345.549231 + -87.301961 + + + 1972.004578 + 549.560249 + -41.381344 + + + 1965.15903 + 485.449517 + -63.947212 + + + 1828.907607 + 845.495 + 11.621231 + + + 1714.96746 + -1659.601769 + -708.086206 + + + 77.794071 + 2638.670111 + -365.417193 + + + 2105.764779 + 110.013923 + -35.419009 + + + 1931.709169 + 598.684044 + -69.551318 + + + 1984.642785 + 497.960026 + -29.912335 + + + 1803.424938 + 681.730717 + -77.755098 + + + 2011.576635 + 414.248256 + 15.201833 + + + 488.433306 + 2853.979792 + -946.362987 + + + 5248.109067 + -99.833509 + -1077.162844 + + + 1592.006101 + 616.421703 + 64.186828 + + + 2074.631238 + 518.613852 + -88.40013 + + + 1771.25604 + 626.86266 + -18.058306 + + + 1975.890427 + 619.514227 + -127.24473 + + + 1281.772107 + 685.318221 + 226.643619 + + + 5660.897244 + -1619.612746 + -433.811511 + + + 1318.318307 + -175.745666 + 636.440706 + + + 1955.02068 + 597.085338 + -52.421469 + + + 1860.854771 + 621.624154 + -80.159732 + + + 1824.628519 + 619.006352 + -24.619068 + + + 1802.060026 + 612.110024 + -44.360908 + + + 1718.254954 + 607.954327 + 152.089777 + + + 3378.064162 + 569.40807 + -726.50679 + + + 14202.121656 + -4763.776826 + 15273.517112 + + + 1936.405063 + 1286.271984 + -1455.52985 + + + 1672.967365 + 385.192846 + 281.969063 + + + 1920.186369 + 792.621637 + -211.473816 + + + 1619.515399 + 304.573225 + 515.543079 + + + 2580.264227 + 1435.238449 + -494.703939 + + + -14429.971918 + -14037.179067 + 2425.307388 + + + 2004.655076 + 719.849006 + -84.215081 + + + 1779.210746 + 581.764915 + 103.278233 + + + 1819.574728 + 598.056743 + 97.679515 + + + 1794.258215 + 579.41009 + 124.804311 + + + 1796.331857 + 567.365425 + 133.086236 + + + 1742.435379 + 551.263238 + 94.13189 + + + 1931.719259 + 532.945171 + -132.362248 + + + 2102.011405 + -660.696491 + -317.013646 + + + 2041.312471 + 68.735037 + -105.614298 + + + 1926.747282 + 293.232598 + -16.990606 + + + 2027.800209 + -26.868968 + -128.046501 + + + 1931.308141 + 442.655707 + 22.138313 + + + 2164.314737 + -395.893641 + -260.994362 + + + 1839.126855 + 1641.726246 + 367.779113 + + + -2617.144563 + -1622.572301 + 3340.944789 + + + 1738.885771 + -648.207307 + 11.986439 + + + 1863.34334 + -584.343256 + -73.536053 + + + 1825.883194 + -570.449355 + -42.091769 + + + 1751.545109 + -554.935767 + 22.1281 + + + 1825.868061 + -488.869794 + -18.83681 + + + 3633.82834 + 597.406965 + -1083.176437 + + + 3574.699023 + 133.685071 + -865.049682 + + + 1701.74096 + -611.479799 + 12.339267 + + + 1832.501694 + -560.862188 + -33.043956 + + + 1774.384766 + -551.882564 + -3.938652 + + + 1833.010399 + -522.880309 + -18.734686 + + + 1705.874365 + -516.494827 + 32.864829 + + + 3430.044255 + -644.712735 + -442.455375 + + + 3503.573588 + -1702.218351 + -690.413742 + + + 1754.205198 + -571.864731 + 10.803989 + + + 1785.696702 + -553.849117 + -24.961599 + + + 1807.470802 + -517.807244 + 4.340607 + + + 1855.550954 + -506.062267 + -17.404115 + + + 1856.299838 + -459.652037 + 6.486401 + + + 1424.942135 + -546.644504 + -1849.897454 + + + 65.175126 + -271.914398 + -1588.198089 + + + 2051.262906 + -590.39746 + 242.441018 + + + 1708.757476 + -502.059121 + -106.382705 + + + 1935.969228 + -512.671282 + 78.435532 + + + 1701.813179 + -478.672635 + -193.95408 + + + 2307.543909 + -439.175754 + 427.129347 + + + -1420.690267 + -1078.30411 + -4020.915183 + + + 2124.61359 + -619.970273 + 548.813752 + + + 1832.545431 + -540.179591 + 49.203287 + + + 1819.161561 + -505.279689 + -35.164639 + + + 1860.933527 + -479.400056 + -37.730356 + + + 1900.480816 + -448.067961 + -29.324263 + + + 1874.212216 + -381.588897 + -50.146535 + + + 1514.74013 + -136.598045 + -217.33066 + + + -18033.962317 + 4132.9339 + -2998.421573 + + + 2858.972742 + -888.082401 + 138.054881 + + + 1603.819708 + -478.870086 + -65.12538 + + + 2071.09053 + -425.465181 + -16.089496 + + + 1624.952028 + -202.603511 + -98.634553 + + + 2444.081167 + -178.21445 + -3.003694 + + + -2227.028223 + -456.559341 + -549.153058 + + + 1751.557839 + -784.185568 + -29.877955 + + + 1794.221874 + -571.729445 + -50.222261 + + + 1945.952641 + -424.479495 + -20.855399 + + + 1806.170697 + -216.672071 + -82.830503 + + + 1900.284464 + -27.9146 + -82.314697 + + + 2087.479865 + 116.46388 + -43.491035 + + + 1796.786656 + 355.943601 + -152.88085 + + + -2319.415968 + 16797.04072 + 11653.849053 + + + 3896.62755 + -969.045793 + -1564.218283 + + + 792.395851 + -304.761101 + 499.956372 + + + 2814.797361 + 112.937335 + -528.528404 + + + 638.782272 + 50.936467 + 609.531366 + + + 7274.826079 + 1828.117716 + -2352.641654 + + + -81730.283178 + -26817.670612 + 33567.039468 + + + -2989.456927 + 3970.598147 + -2848.64886 + + + 2832.120728 + -982.305702 + 171.503048 + + + 1696.218977 + -87.809889 + -88.272286 + + + 2187.068753 + -653.842063 + -97.296716 + + + 1579.344599 + -166.172445 + 96.988632 + + + 2634.831035 + -1383.766719 + -624.811261 + + + -3426.885047 + 5281.661016 + 5813.56348 + + + -41986.070082 + 4841.450499 + -4412.532026 + + + 7074.735759 + -1721.811152 + 911.264474 + + + 189.539867 + 195.003674 + -460.336682 + + + 3164.556741 + -999.839059 + 278.859936 + + + 52.313972 + 220.167005 + -508.703687 + + + 6538.978502 + -3412.340766 + 1518.807253 + + + -17673.999474 + 39077.675512 + -15234.761148 + + + 63499.276523 + 16096.784994 + 7848.078885 + + + -4532.560132 + -1550.63883 + -1211.32632 + + + 3864.739392 + -288.013424 + 398.871241 + + + 542.505068 + -685.607719 + -344.648298 + + + 3695.791537 + -249.294076 + 399.182095 + + + -2370.05486 + -960.334585 + -1334.673635 + + + 25836.686853 + 3963.630868 + 13729.553202 + + + 7960.393796 + -23095.759557 + 8741.551192 + + + 1321.342413 + 878.524559 + -1142.635276 + + + 2296.440771 + -621.574614 + 347.701466 + + + 1706.552889 + -267.126555 + -377.523347 + + + 2217.413894 + -591.767511 + 432.968771 + + + 638.77488 + -516.380194 + -1639.557473 + + + 18932.026731 + 8076.327361 + 23260.719444 + + + 30841.965824 + -52960.867523 + -23454.053024 + + + -2451.135994 + 3580.226161 + 1255.707172 + + + 3680.747406 + -1451.087399 + -326.847208 + + + 492.160193 + 130.146263 + 62.18205 + + + 3970.177872 + -1190.063443 + -44.980881 + + + -5046.817933 + 351.235703 + -401.657915 + + + 79051.67214 + 6862.204936 + 10477.471058 + + + 963.50409 + 1148.742909 + -1328.302899 + + + 1936.845692 + -670.400939 + 84.803288 + + + 1863.707242 + -469.159432 + -66.060257 + + + 1855.147453 + -544.050967 + -23.170789 + + + 1933.828486 + -504.268637 + -18.748906 + + + 1674.56166 + -547.140638 + -85.881727 + + + 4180.097008 + -347.665674 + 665.754363 + + + -17830.918149 + 33343.869128 + -22242.122883 + + + 4727.043197 + -3501.727955 + 1880.551769 + + + 742.96932 + 378.539335 + -596.803251 + + + 2745.203102 + -1126.167451 + 334.946293 + + + 722.292192 + 334.5647 + -480.969649 + + + 5859.733099 + -2571.563374 + 976.860035 + + + -41797.940166 + 16484.942379 + -3798.038053 + + + 1801.768353 + -240.174049 + 298.361803 + + + 2378.046935 + -348.848269 + 191.332962 + + + 2373.422587 + -347.976213 + 453.959917 + + + 2602.462953 + -391.168488 + 317.089657 + + + 2634.848754 + -397.27578 + 585.433486 + + + 2836.940319 + -435.386069 + 422.11457 + + + 3103.600942 + -485.672746 + 953.065113 + + + 2461.499415 + -26.605863 + 861.106209 + + + 2574.307406 + -428.609948 + 371.450564 + + + 2598.212042 + -382.977845 + 452.129528 + + + 2634.825113 + -401.333832 + 451.281001 + + + 2664.000681 + -382.241336 + 498.145784 + + + 2718.187866 + -489.084525 + 384.555413 + + + 2686.838033 + -165.241331 + 819.703841 + + + 2685.76922 + -682.436502 + 89.787542 + + + 2630.645777 + -361.848474 + 504.093545 + + + 2648.218014 + -407.289572 + 452.040459 + + + 2653.91508 + -392.938138 + 476.169263 + + + 2666.598095 + -413.761572 + 455.481635 + + + 2668.46587 + -380.129328 + 504.176193 + + + 2727.730512 + -635.495338 + 184.656984 + + + 2371.130165 + 76.075347 + 1229.598224 + + + 2590.89922 + -365.934696 + 485.885823 + + + 2643.303672 + -401.11351 + 450.404445 + + + 2680.359812 + -410.522932 + 470.196851 + + + 2713.228268 + -406.771145 + 510.210251 + + + 2751.56717 + -421.170721 + 523.004911 + + + 2790.10652 + -401.78179 + 563.689166 + + + 2477.054743 + -674.821272 + 519.9213 + + + 2561.341248 + -372.754641 + 448.409106 + + + 2593.693516 + -418.015464 + 456.262348 + + + 2639.498352 + -373.307776 + 443.557439 + + + 2675.872936 + -391.668027 + 445.263815 + + + 2718.261481 + -369.807913 + 437.779699 + + + 2318.573628 + -3304.480473 + 1105.875221 + + + 2630.770338 + -373.529397 + 444.161294 + + + 2641.186358 + -379.454227 + 444.796054 + + + 2651.602377 + -385.379058 + 445.430814 + + + 2662.018397 + -391.303888 + 446.065574 + + + 2672.434417 + -397.228718 + 446.700334 + + + 2682.850436 + -403.153548 + 447.335094 + + + 2693.266456 + -409.078378 + 447.969854 + + + 3481.787464 + 4737.3034 + 1223.739987 + + + 2552.287923 + -488.104874 + 418.669514 + + + 2639.624761 + -369.250268 + 445.912534 + + + 2693.298406 + -427.321818 + 445.60128 + + + 2773.36667 + -346.669197 + 466.894905 + + + 2816.117368 + -462.149295 + 457.643024 + + + 3017.35139 + 255.323251 + 578.113002 + + + 6348.19694 + -5889.658802 + 10454.144163 + + + 2363.744836 + -270.34539 + 143.138093 + + + 2410.905774 + -333.786715 + 502.241612 + + + 2553.825993 + -394.12446 + 275.846879 + + + 2627.573393 + -434.220405 + 425.221612 + + + 2888.866444 + -547.24634 + 19.763687 + + + 2107.058803 + 5120.624503 + 2028.461954 + + + 3552.64882 + -440.852116 + 211.947582 + + + 2387.8659 + -282.834938 + 402.880342 + + + 2591.463103 + -441.276847 + 333.793789 + + + 2619.760927 + -411.711564 + 340.123493 + + + 2722.863113 + -367.348621 + 293.692796 + + + 2686.575289 + -424.939265 + 208.950852 + + + 3089.525693 + -735.221644 + 208.102174 + + + 3070.593407 + -339.732559 + 185.830723 + + + 2550.201164 + -428.162225 + 365.625154 + + + 2661.466743 + -402.198884 + 314.810345 + + + 2681.275553 + -382.783443 + 308.068706 + + + 2721.773296 + -411.696892 + 238.220226 + + + 2716.729035 + -392.186001 + 245.455433 + + + 3091.480448 + -366.790731 + 46.935249 + + + -132678.006129 + 13147.068625 + 30962.35866 + + + 11050.157878 + -1156.313086 + -2321.26427 + + + 545.295842 + -193.382659 + 1358.828367 + + + 4135.816198 + -532.555855 + -575.825085 + + + 461.159437 + -232.706284 + 1155.284169 + + + 6756.676695 + -747.485855 + -3641.516601 + + + -28615.876861 + 702.283982 + 53442.989777 + + + 4077.285353 + 1677.191441 + -216.564546 + + + 2586.129916 + -612.893824 + 304.113265 + + + 2786.34018 + -298.471124 + 240.638806 + + + 2628.676893 + -473.896114 + 302.195979 + + + 2713.130488 + -327.328936 + 278.944093 + + + 2449.309068 + -837.540769 + 373.157519 + + + 4992.497493 + 2170.6774 + -520.895177 + + + 2291.45045 + -5916.841294 + 3244.922055 + + + 3064.13268 + 182.483145 + -256.665627 + + + 2558.151875 + -548.875085 + 474.670324 + + + 2705.665932 + -342.985815 + 170.695131 + + + 2628.265677 + -703.746666 + 472.735648 + + + 2805.328977 + -194.005517 + -187.370011 + + + 1043.601931 + -3710.865762 + 6163.425996 + + + 871.409094 + 4260.97078 + 1926.496653 + + + 2831.278222 + -1021.398972 + 149.778314 + + + 2606.738657 + -249.128693 + 345.94955 + + + 2713.543109 + -701.939664 + 255.688753 + + + 2611.093972 + -340.707634 + 430.247826 + + + 2861.771628 + -1384.036374 + -83.780873 + + + 1441.96211 + 7183.054485 + 110.250408 + + + 3510.98093 + -7397.383735 + -5357.31377 + + + 2536.331883 + 328.240255 + 735.743618 + + + 2721.334262 + -783.642463 + 207.272624 + + + 2632.844521 + -451.339676 + 396.328714 + + + 2741.114841 + -703.797149 + 44.929505 + + + 2731.288325 + -39.504633 + 927.832148 + + + 3357.318434 + -5058.839321 + -3222.276117 + + + 2639.802391 + -587.501812 + 271.492252 + + + 2661.453027 + -575.001812 + 271.492252 + + + 2683.103662 + -562.501812 + 271.492252 + + + 2704.754297 + -550.001812 + 271.492252 + + + 2726.404932 + -537.501812 + 271.492252 + + + 2748.055567 + -525.001812 + 271.492252 + + + 2769.706202 + -512.501812 + 271.492252 + + + 2742.28922 + -1788.810037 + 1668.289242 + + + 2648.398665 + -613.608147 + 304.311664 + + + 2677.364937 + -544.666002 + 247.783554 + + + 2749.253024 + -528.079313 + 276.670944 + + + 2803.639856 + -529.688087 + 311.078874 + + + 2870.213303 + -575.524247 + 343.613371 + + + 2465.712673 + -1503.478813 + 245.225377 + + + 1526.367723 + -5036.241013 + -184.020103 + + + 2579.74503 + -479.660035 + 272.863008 + + + 2755.812228 + -477.215004 + 239.308356 + + + 2806.715709 + -571.073229 + 344.34823 + + + 2927.467879 + -627.978388 + 345.386466 + + + 2978.780275 + -659.008528 + 439.118043 + + + 6387.077496 + 6341.384439 + -4763.908619 + + + 2407.402351 + -682.74651 + 434.603026 + + + 2471.076251 + -442.85542 + 313.446379 + + + 2478.966435 + -413.12919 + 431.160796 + + + 2501.244546 + -329.196522 + 340.939738 + + + 2513.628278 + -282.540875 + 456.488127 + + + 2531.919125 + -213.630205 + 357.904131 + + + 2580.014383 + -32.431564 + 560.730252 + + + 2371.583117 + -817.695292 + 568.187902 + + + 2469.717533 + -447.974382 + 297.41119 + + + 2491.190168 + -367.07634 + 486.139533 + + + 2522.170751 + -250.357151 + 311.294111 + + + 2551.016616 + -141.680502 + 491.605279 + + + 2574.733193 + -52.328422 + 307.005422 + + + 2669.506594 + 304.729882 + 595.406195 + + + 2234.641847 + -583.892445 + 167.89037 + + + 2543.24207 + -385.104635 + 381.533437 + + + 2434.250465 + -219.868573 + 335.788152 + + + 2636.257147 + -177.180144 + 464.596935 + + + 2540.204841 + -1.509002 + 428.075769 + + + 2715.025929 + 84.895159 + 545.784167 + + + 2607.750641 + -80.322697 + 459.406972 + + + 2574.385348 + -95.053238 + 437.157165 + + + 2620.542551 + -241.292847 + 446.912763 + + + 2535.381755 + -112.684084 + 411.09746 + + + 2639.401278 + -58.093678 + 481.547045 + + + 2536.444386 + 56.160472 + 433.045114 + + + 2644.151007 + 99.448806 + 504.322445 + + + 2521.975384 + 347.466401 + 460.947583 + + + 1025.45568 + 242.570969 + 1024.105789 + + + 2585.981147 + -481.030672 + 364.865572 + + + 2394.995169 + -292.852036 + 445.547186 + + + 2604.055069 + -312.92436 + 357.229743 + + + 2528.806013 + -184.994627 + 389.018649 + + + 2881.664674 + -279.923941 + 239.953761 + + + -6570.794229 + 4729.478315 + 4233.144969 + + + 1071.59872 + 4981.640608 + -7075.837722 + + + 2602.587045 + -974.599684 + 1196.269524 + + + 2430.519635 + 68.256369 + -47.874384 + + + 2627.845129 + -406.992051 + 772.055706 + + + 2560.73503 + 204.517971 + 114.387417 + + + 2992.325037 + -1233.493944 + 2243.328212 + + + -2687.556131 + 22444.980165 + -29777.063609 + + + 5713.390491 + -427.864519 + -3981.101603 + + + 2450.681899 + -144.477078 + 983.219646 + + + 2642.54359 + -147.497224 + 251.123168 + + + 2543.720061 + 132.960639 + 622.450413 + + + 2621.067004 + 195.628144 + 214.393785 + + + 2426.57525 + 670.236596 + 1191.541711 + + + 4697.075436 + -5886.793162 + -18323.253581 + + + 2792.12825 + -26568.646187 + -26101.650835 + + + 2566.618895 + 1858.124621 + 2120.283582 + + + 2579.820869 + -352.090106 + 138.390991 + + + 2576.401762 + 531.582457 + 599.322827 + + + 2579.059934 + -208.763647 + -7.221098 + + + 2578.1689 + 1347.067159 + 486.328133 + + + 2494.428888 + -8110.890903 + 3806.433896 + + + 2584.394201 + -46.543287 + 353.258332 + + + 2578.406563 + 133.766915 + 368.380825 + + + 2576.994291 + 245.951017 + 350.874819 + + + 2578.936033 + 157.180778 + 257.852981 + + + 2575.246047 + 325.2632 + 264.101571 + + + 2582.345859 + 88.230629 + 109.879215 + + + 2553.057788 + 681.617881 + 313.768948 + + + 2650.633105 + -2897.515964 + -814.178189 + + + 2575.683915 + 311.602685 + 430.715629 + + + 2578.183716 + 164.925089 + 296.72378 + + + 2576.721663 + 291.068698 + 217.345413 + + + 2578.161848 + 220.513741 + 97.463781 + + + 2575.575097 + 418.576206 + 34.459913 + + + 2621.830535 + -4586.924362 + -412.168268 + + + 2495.08622 + -5730.302565 + 1844.855496 + + + 2588.177519 + 769.963357 + 0.323866 + + + 2573.006915 + 99.354605 + 290.478357 + + + 2580.947112 + 371.263542 + 45.749978 + + + 2572.389474 + 42.957464 + 192.626483 + + + 2595.066062 + 749.283998 + -415.588008 + + + 2251.342542 + -8642.40158 + 8108.440854 + + + 2556.314647 + 233.693642 + 591.087422 + + + 2574.927295 + 268.323289 + 240.201283 + + + 2579.719161 + 259.498074 + 79.01949 + + + 2575.918133 + 208.600688 + 91.783311 + + + 2575.605694 + 150.444115 + 124.465496 + + + 2588.170936 + 125.443766 + 7.666269 + + + 2612.776981 + 147.602128 + -309.000639 + + + 2702.372913 + 1900.626226 + -3062.52731 + + + 2578.896931 + -20.863308 + 375.021359 + + + 2572.429882 + 298.283281 + 14.810107 + + + 2581.413883 + 84.767918 + 159.563743 + + + 2574.615259 + 257.960368 + -20.301963 + + + 2604.250663 + -307.479826 + 362.047375 + + + 2055.322362 + 8195.516378 + -4951.170292 + + + 2503.871827 + -319.298256 + 385.197926 + + + 2498.484872 + -339.593581 + 385.481642 + + + 2493.097917 + -359.888907 + 385.765303 + + + 2487.710961 + -380.184233 + 386.048961 + + + 2482.324006 + -400.479559 + 386.332628 + + + 2476.937051 + -420.774885 + 386.616283 + + + 2471.550096 + -441.070211 + 386.899864 + + + -886.136822 + -13044.331743 + 7377.803094 + + + 2906.532561 + 1191.973009 + -473.230709 + + + 2319.707056 + -1010.768203 + 739.901773 + + + 2624.478417 + 133.223995 + 107.711332 + + + 2316.213614 + -1023.900699 + 744.311457 + + + 3136.788042 + 2056.230377 + -955.427855 + + + -4663.148018 + -27221.929118 + 15186.557495 + + + 2905.642614 + -407.632164 + 2051.921508 + + + 3044.326298 + -420.188562 + 845.059877 + + + 2514.186775 + -372.189819 + 890.241579 + + + 2759.949335 + -394.441119 + 397.740662 + + + 2213.272087 + -344.945054 + 367.12656 + + + 2516.107152 + -372.363689 + -73.20493 + + + 1407.246659 + -271.967648 + -552.914539 + + + 2488.642153 + -3035.839249 + 429.834122 + + + 2693.349667 + -425.8982 + 682.047135 + + + 2707.406478 + -578.813843 + 687.530688 + + + 2563.907307 + -211.550598 + 589.038242 + + + 2582.647831 + -182.714249 + 604.646464 + + + 2736.70044 + 501.654737 + 748.794181 + + + 2388.011814 + -2972.449116 + 353.842307 + + + 2501.665878 + 1955.042312 + 617.84365 + + + 2615.900067 + -679.731806 + 612.779525 + + + 2605.106416 + -175.325084 + 622.367755 + + + 2563.247883 + -141.958907 + 591.008712 + + + 2711.340159 + 100.770521 + 714.800632 + + + 2657.750387 + 1.116154 + 669.582645 + + + 2769.662224 + 1914.826891 + 824.771947 + + + 3835.134915 + 4125.076241 + 4770.771722 + + + 2515.960212 + -821.07589 + -40.985345 + + + 2647.268624 + 124.831289 + 999.111213 + + + 2641.189139 + -135.048869 + 345.418182 + + + 2655.655088 + 442.26361 + 1076.953608 + + + 2562.537296 + -580.773911 + -435.694031 + + + 4388.980261 + 8230.641067 + 8353.042685 + + + 7918.389821 + -34985.486594 + 8879.025472 + + + 2156.215733 + 4512.048209 + -698.691193 + + + 2791.352614 + -1725.305949 + 1167.288555 + + + 2543.59313 + 1502.847045 + 259.736396 + + + 2792.313626 + -1528.974403 + 1245.746237 + + + 2372.656167 + 6332.556254 + -1039.580694 + + + -3115.502133 + -57479.45493 + 5695.590476 + + + -46652.807775 + -66851.713743 + -56470.688864 + + + 4969.547515 + 3704.384934 + 3654.196911 + + + 2565.845828 + -701.226336 + 411.460021 + + + 2391.735921 + 957.977786 + 519.370099 + + + 3032.095723 + -393.284991 + 638.740232 + + + -1797.490387 + 2335.47771 + -2405.422134 + + + 107396.66777 + -3383.934825 + 41190.880388 + + + 40771.651942 + 16489.839006 + -25039.890845 + + + -901.198165 + -1369.321858 + 3958.08176 + + + 3442.600695 + 851.392642 + -769.629685 + + + 1856.056747 + 76.930336 + 1169.022238 + + + 3581.377982 + 798.379722 + -761.74285 + + + 423.182946 + -289.674327 + 3170.578799 + + + 20652.030198 + -3099.541343 + -23169.076222 + + + 1892.351185 + 3314.75684 + -2396.009846 + + + 2595.421989 + -105.299545 + 685.668709 + + + 2549.643273 + 586.00344 + 238.385373 + + + 2669.697099 + 307.41438 + 399.786059 + + + 2690.482608 + 427.809758 + 189.556473 + + + 2776.082202 + 382.697827 + 421.882137 + + + 2437.337744 + 2509.774258 + -1622.037714 + + + 2876.058215 + 384.808718 + 494.987998 + + + 2829.377101 + 373.124231 + 322.426589 + + + 2736.237557 + 379.931491 + 282.048874 + + + 2617.594484 + 396.889864 + 314.236637 + + + 2524.325861 + 403.748501 + 274.226953 + + + 2478.979811 + 391.532622 + 97.859262 + + + 2447.881094 + 373.645908 + -119.05432 + + + 2673.786872 + 398.27411 + 406.057243 + + + 2685.0707 + 386.502914 + 294.662192 + + + 2603.803315 + 397.399162 + 299.746031 + + + 2538.931195 + 401.239515 + 268.853326 + + + 2528.266854 + 394.615832 + 183.929826 + + + 2464.742874 + 402.087882 + 171.33229 + + + 2394.088607 + 406.127267 + 141.574295 + + + 2228.194767 + 347.641744 + 535.74603 + + + 2969.313662 + 378.032992 + 96.152686 + + + 2387.210848 + 411.985469 + 400.110155 + + + 2644.679454 + 386.120193 + 79.713531 + + + 2289.95465 + 410.835329 + 233.038397 + + + 2642.743133 + 370.660563 + -178.178181 + + + 2358.02322 + 422.550206 + 8.390947 + + + 2476.765191 + -252.192818 + 382.09404 + + + 2655.191778 + -399.040353 + 536.70087 + + + 2588.131614 + -343.848916 + 623.073058 + + + 2682.692617 + -421.673921 + 652.943972 + + + 2623.935262 + -373.315811 + 753.460025 + + + 2718.038758 + -450.764281 + 765.572161 + + + 2655.064386 + -398.935508 + 1031.410318 + + + 3346.989215 + 488.057181 + -520.565575 + + + 2570.313913 + -481.999352 + 799.325918 + + + 2674.919165 + -355.446892 + 626.812951 + + + 2638.90325 + -430.13634 + 764.052506 + + + 2688.394776 + -374.632856 + 691.604939 + + + 2495.833045 + -591.712436 + 951.034715 + + + 3528.755016 + 783.510527 + -1048.604529 + + + 1188.65631 + -2266.295673 + 910.588896 + + + 2589.711856 + -222.192378 + 384.911611 + + + 2724.193707 + -416.207437 + 790.633343 + + + 2610.453728 + -419.074583 + 736.920814 + + + 2587.4811 + -511.723878 + 777.103604 + + + 2323.76862 + -372.175283 + 829.775196 + + + 4270.381266 + 834.451604 + 1159.162455 + + + -789.505018 + 2926.534623 + 7002.129766 + + + 3281.581043 + -129.238337 + 174.363603 + + + 2474.289664 + -598.031514 + 903.325675 + + + 2643.24433 + -378.34036 + 671.390555 + + + 2278.829429 + -454.760094 + 1019.441279 + + + 2721.105446 + -201.009463 + 529.425201 + + + -847.236894 + -6789.604566 + 5444.651389 + + + 4940.334814 + -463.222498 + -1070.154107 + + + 2280.307845 + -418.999348 + 873.213579 + + + 2538.119244 + -423.285482 + 841.059403 + + + 2451.996862 + -421.853691 + 805.888684 + + + 2465.738443 + -422.082146 + 897.906133 + + + 2558.103576 + -423.617723 + 655.03723 + + + 39.674764 + -381.748653 + 2778.74635 + + + 2510.029187 + -508.11293 + 384.918251 + + + 2559.847085 + -455.464858 + 484.691289 + + + 2607.324743 + -391.497429 + 576.699474 + + + 2664.262359 + -373.28626 + 700.071269 + + + 2714.31535 + -321.775297 + 800.618199 + + + 2737.370384 + -139.679659 + 811.656838 + + + 2275.679112 + 2387.054006 + -784.429504 + + + -3026.263131 + 6638.27314 + -15196.408509 + + + 2707.340693 + -792.37564 + 856.858421 + + + 2633.553072 + -434.136483 + 679.623884 + + + 2749.410625 + -247.291298 + 840.19408 + + + 2701.553091 + 102.676217 + 674.021489 + + + 2877.897494 + 211.688993 + 996.019134 + + + 1186.642417 + 179.016196 + 2230.57929 + + + 4102.380967 + -284.942678 + -2201.230271 + + + 2931.6442 + -341.607002 + 1515.818325 + + + 2565.307719 + -157.268744 + 444.932526 + + + 2884.536647 + 2.21983 + 1010.488204 + + + 2527.160748 + 162.737113 + 544.401435 + + + 3130.445986 + 338.677597 + 1123.83539 + + + 1635.049456 + 417.218616 + 1001.075387 + + + 219.372444 + -1539.960053 + -3985.611847 + + + 3156.632135 + -216.68851 + 713.323359 + + + 2577.526105 + -123.625622 + 917.570794 + + + 2844.11375 + 278.858814 + 673.222598 + + + 2508.140148 + 460.65282 + 774.007478 + + + 3110.639618 + 986.483376 + 301.485594 + + + -16678.38601 + -6013.836565 + 18017.331741 + + + -2991.949971 + -8745.068769 + 7502.524778 + + + 3135.738721 + 763.67434 + 390.488264 + + + 2656.028728 + 114.310043 + 765.020524 + + + 2683.969837 + 590.123335 + 702.719488 + + + 2387.295003 + 307.428596 + 904.090751 + + + 2583.830602 + 1238.201452 + 729.339484 + + + -2577.193919 + -15630.625012 + 2786.645809 + + + 3952.521107 + 2869.470268 + 3422.839607 + + + 2462.56288 + 113.982342 + 307.016763 + + + 2668.553644 + 542.587117 + 943.738214 + + + 2429.066507 + 465.926759 + 694.662533 + + + 2541.384347 + 324.086647 + 1005.079444 + + + 2093.709607 + 876.294633 + 602.998013 + + + 4021.090881 + -2555.101074 + 2909.031851 + + + 3669.768633 + -34798.560809 + 7619.028591 + + + 3947.839361 + 2433.529233 + 471.493105 + + + 1873.04902 + -918.636654 + 526.877328 + + + 3256.588871 + 633.66022 + 798.071034 + + + 2012.253519 + -729.580883 + 578.043896 + + + 5748.282591 + 2602.681188 + 1856.103049 + + + -21541.592217 + -26081.526556 + -30744.4308 + + + 13224.921177 + -2026.56213 + -13570.423329 + + + 1370.097053 + 33.928313 + 1662.186752 + + + 3150.259124 + 62.788267 + 533.084101 + + + 2582.397583 + 71.754521 + 837.746301 + + + 3212.863713 + 47.028683 + 440.055938 + + + 2296.540743 + 154.591948 + 895.460911 + + + 5385.432022 + -4823.960341 + -1951.533471 + + + 10979.919006 + -1452.389691 + -5258.716197 + + + 1620.551565 + -94.888994 + 1462.900556 + + + 3211.105438 + 160.226867 + 484.526463 + + + 2690.58654 + 24.175796 + 732.951379 + + + 3145.125619 + -94.524633 + 358.785753 + + + 2457.536797 + 32.530184 + 778.283445 + + + 9221.513441 + 1657.658924 + -2807.661379 + + + 8135.862986 + 3566.976819 + -566.566549 + + + 2457.550841 + -42.707438 + 736.326472 + + + 2993.135309 + 19.307931 + 604.215842 + + + 2855.102403 + -49.704642 + 501.621391 + + + 3142.694771 + -9.352527 + 431.499259 + + + 2822.092742 + -115.179129 + 377.67353 + + + 8911.015864 + 1705.384436 + 9204.76952 + + + 3794.749327 + 836.95878 + -836.800418 + + + 2555.404371 + 339.128861 + 422.360209 + + + 2739.984128 + 413.616625 + 234.291961 + + + 2625.523037 + 367.91098 + 350.158704 + + + 2721.377121 + 406.737257 + 252.268226 + + + 2418.925174 + 285.472497 + 559.20251 + + + 5595.532942 + 1562.545285 + -2669.861673 + + + -628567.714413 + -76914.990178 + -250645.056575 + + + 49551.738221 + 13829.509847 + 14337.850727 + + + -10030.057274 + -6622.809299 + -1847.829785 + + + 10539.659082 + 5477.168492 + 1534.161547 + + + -8328.171579 + -7302.670834 + 42.633116 + + + 23218.658513 + 29734.983666 + -4881.568671 + + + -98199.398734 + -383921.741245 + 161297.407304 + + + 4857.14974 + 302.999575 + 2004.345105 + + + 2525.351366 + 384.065258 + 292.192568 + + + 2782.293757 + 378.711924 + 442.391651 + + + 2592.507617 + 397.204968 + 171.394207 + + + 2690.041022 + 398.772646 + 189.042699 + + + 2048.852486 + 406.474812 + -117.760673 + + + 4251.15718 + 185.165511 + 3119.246783 + + + -1765.973859 + 209.663342 + 985.628138 + + + 3083.1909 + 381.653875 + 469.428437 + + + 2570.646973 + 399.49108 + 157.530646 + + + 2623.807061 + 396.921213 + 171.498462 + + + 2320.067509 + 400.64405 + 59.887335 + + + 2536.660037 + 392.956315 + 243.932848 + + + -316.168807 + 396.109549 + 2773.818497 + + + 417.803101 + -5758.930991 + 1568.246869 + + + -51.794709 + 158.558323 + -131.214645 + + + 63.854516 + -687.670208 + 113.376329 + + + -21.399005 + -170.17069 + -36.838769 + + + 76.633149 + -576.895338 + 82.127247 + + + -255.158468 + 672.091914 + -284.608426 + + + 8675.408409 + -11256.655176 + 3414.323628 + + + 14156.887591 + -5984.296776 + 2035.217044 + + + -1077.69063 + -94.246695 + -84.937107 + + + 279.451943 + -430.743828 + 43.791505 + + + -141.538427 + -244.977946 + -16.723396 + + + 358.036716 + -390.448743 + 33.978058 + + + -386.496385 + 79.912275 + -105.120153 + + + 2898.388717 + -6506.730754 + 1609.79618 + + + 69.903422 + -304.563386 + 4.500047 + + + 75.887413 + -304.125385 + 4.500047 + + + 81.871405 + -303.687384 + 4.500047 + + + 87.855396 + -303.249383 + 4.500047 + + + 93.839388 + -302.811381 + 4.500047 + + + 99.823379 + -302.37338 + 4.500047 + + + 105.807371 + -301.935379 + 4.500047 + + + -110.546525 + -734.302056 + 4.498972 + + + 4.800223 + -349.91824 + 4.499978 + + + 66.785804 + -289.101466 + 4.500082 + + + 117.233133 + -302.287498 + 4.500036 + + + 165.95759 + -325.446487 + 4.50001 + + + 213.754676 + -352.316734 + 4.500019 + + + 259.640054 + -377.328963 + 4.500038 + + + -6998.799363 + 643.004657 + -7041.035043 + + + 279.351786 + -352.472198 + 349.77601 + + + -1.548596 + -383.796033 + -32.73324 + + + 22.321614 + -414.988159 + 67.590003 + + + -11.178497 + -471.481999 + -32.768826 + + + -160.529516 + -444.789348 + 44.883238 + + + 5593.879215 + -2112.273867 + 2105.62471 + + + 10.394848 + 253.507603 + -178.605274 + + + 204.424756 + -350.529869 + 197.34682 + + + -86.602429 + -368.22349 + -77.138946 + + + 114.169852 + -430.584639 + 125.067536 + + + -102.98426 + -463.416053 + -75.013132 + + + 282.135252 + -618.5351 + 331.150748 + + + -327.852808 + 873.194035 + -744.699201 + + + -1554.090281 + -8230.907047 + 4.477156 + + + -53.318234 + -79.148842 + 4.501177 + + + 20.244529 + -325.878876 + 4.499863 + + + 162.265483 + -270.200443 + 4.500142 + + + 253.856338 + -440.901152 + 4.499775 + + + 415.516717 + -292.163738 + 4.501025 + + + -194.805805 + -1617.043211 + 4.486815 + + + 186.892165 + -337.315891 + 4.500019 + + + 195.612553 + -342.210258 + 4.500019 + + + 204.332941 + -347.104626 + 4.500019 + + + 213.053329 + -351.998993 + 4.500019 + + + 221.773717 + -356.893361 + 4.500019 + + + 230.494105 + -361.787729 + 4.500019 + + + 239.214493 + -366.682096 + 4.500019 + + + 5335.446063 + 17619.626877 + -21442.89354 + + + -414.270813 + -1544.6805 + 828.53936 + + + 229.790709 + 80.068526 + -54.614171 + + + 234.46564 + -683.871376 + -1.112148 + + + 599.943135 + -12.890313 + -88.906181 + + + 413.550793 + -1690.877395 + -646.835932 + + + 3987.413502 + 16224.928065 + 17973.315325 + + + 212.552321 + -672.627423 + 49.397301 + + + 224.530947 + -310.800635 + 4.72288 + + + 162.738282 + -347.97737 + 8.764396 + + + 119.262164 + -286.086207 + 0.710176 + + + 62.906357 + -293.856845 + 1.161392 + + + 18.232471 + -238.443997 + -6.101779 + + + -589.29393 + -3227.306685 + 358.328617 + + + 105.182309 + -293.498498 + 1.500047 + + + 99.20131 + -293.936281 + 1.500047 + + + 93.22031 + -294.374063 + 1.500047 + + + 87.239311 + -294.811845 + 1.500047 + + + 81.258311 + -295.249627 + 1.500047 + + + 75.277311 + -295.687409 + 1.500047 + + + 69.296312 + -296.125192 + 1.500047 + + + 3403.884867 + -6573.183309 + 6186.878232 + + + 58.384057 + 13.41445 + -292.859653 + + + 153.043601 + -348.584896 + 57.073003 + + + 22.680267 + -256.072487 + -39.726841 + + + 17.914794 + -417.248526 + 112.819829 + + + -162.383797 + -223.874544 + -83.115074 + + + 454.298717 + -1640.280351 + 1303.175229 + + + 2021.77543 + -564.573324 + 1845.772437 + + + -45.46696 + -364.503291 + -109.543277 + + + 52.924724 + -286.81979 + 54.086615 + + + -13.403442 + -366.86097 + 13.042791 + + + 17.037938 + -321.551515 + 100.7551 + + + -96.748338 + -518.713184 + -17.927073 + + + 876.955776 + 3620.453331 + 2072.86998 + + + -1377.18123 + 517.320771 + -2464.996896 + + + 10.801681 + -494.478227 + -65.600708 + + + 85.847559 + -232.718707 + 100.909917 + + + -48.473247 + -412.171367 + -36.654678 + + + 37.022049 + -252.652242 + 155.05926 + + + -395.813723 + -774.081704 + -439.222948 + + + 6468.38831 + 6658.831715 + 10163.400114 + + + 117739.88674 + -40586.302839 + 5714.889455 + + + -7874.302944 + 3880.175251 + 275.43416 + + + 2076.079278 + -616.171917 + 584.087575 + + + -1543.787312 + 1243.243695 + 598.517078 + + + 2025.148586 + -662.655743 + 349.786908 + + + -4848.839633 + 2787.529776 + -312.641503 + + + 34950.538504 + -14985.134568 + 21864.336113 + + + -10595.058959 + 8510.419447 + 25596.004207 + + + 895.11342 + -339.814171 + -1851.813667 + + + -275.195049 + 676.854091 + 1222.711747 + + + 184.555827 + 220.873065 + -79.960662 + + + 14.33855 + 484.749303 + 1060.092515 + + + 529.341676 + 114.677106 + -1578.726166 + + + -3447.573022 + 1324.581004 + 14144.816163 + + + -2187.960494 + 5836.779177 + 5229.684357 + + + 144.60581 + -156.080652 + 31.299161 + + + -32.456059 + 546.564104 + 562.432415 + + + 257.403396 + 224.736741 + 319.753985 + + + -50.627295 + 516.417847 + 252.232152 + + + 897.089213 + -108.854506 + 188.738123 + + + -3875.078169 + 3377.948034 + 412.166826 + + + 609.022998 + 1107.880575 + 3905.093407 + + + 527.050279 + 229.48303 + 622.01957 + + + -134.395379 + 409.663319 + 331.479458 + + + 339.89239 + 314.690305 + 232.149666 + + + 256.569049 + 328.705067 + 116.631414 + + + 664.578062 + 320.603646 + -224.194771 + + + -9278.817699 + 1439.897678 + -4069.132854 + + + -4694.72958 + 732.24535 + -7121.621105 + + + 655.282937 + 338.692295 + 1133.559065 + + + 119.739849 + 322.181533 + -104.047714 + + + 419.884305 + 336.323464 + 336.280088 + + + 89.436135 + 321.522088 + -361.690609 + + + 879.248009 + 367.025894 + 990.942192 + + + -9812.363607 + -692.872074 + -8012.567083 + + + -431.725387 + 703.449375 + 11429.771303 + + + 60.299649 + 224.375091 + -1168.147191 + + + 425.472906 + 380.394865 + 544.620659 + + + 176.732477 + 290.56173 + -315.380633 + + + 296.589587 + 374.289775 + 409.708143 + + + -176.986749 + 143.761569 + -1429.233358 + + + 3043.646516 + 4214.430841 + 19174.652207 + + + 247.051099 + 321.734409 + -5.457654 + + + 237.236726 + 323.652244 + -5.457654 + + + 227.422354 + 325.570079 + -5.457654 + + + 217.607981 + 327.487913 + -5.457654 + + + 207.793609 + 329.405748 + -5.457654 + + + 197.979236 + 331.323583 + -5.457654 + + + 188.164863 + 333.241418 + -5.457654 + + + 330.51595 + 347.052672 + -97.058832 + + + 287.968738 + 337.303173 + 3.751227 + + + 236.451701 + 314.813419 + -5.57714 + + + 188.32932 + 336.479122 + -8.701005 + + + 140.792386 + 348.845291 + 4.50161 + + + 90.803962 + 333.855633 + 9.136196 + + + 40.902022 + 337.308354 + -1.691003 + + + 11688.639746 + 4642.680621 + 1758.921823 + + + -562.462134 + 89.86819 + -42.070245 + + + 174.600577 + 435.15627 + 17.06145 + + + -86.673418 + 383.566014 + 46.210749 + + + 148.60206 + 536.271356 + 52.039416 + + + -252.617569 + 413.235364 + 164.631092 + + + 706.9724 + 1295.704476 + -2256.806577 + + + 8684.893377 + 6439.776444 + -14635.320515 + + + -616.157641 + -67.49145 + 711.426154 + + + 250.146414 + 479.527239 + -85.191601 + + + -152.250029 + 354.994947 + 81.70288 + + + 209.919631 + 580.068745 + -54.617508 + + + -694.035129 + 317.617513 + -149.178374 + + + 8501.594536 + 2268.156203 + 7862.0757 + + + 151.148276 + -1552.47989 + -3131.855895 + + + 450.25841 + 873.939017 + 330.810387 + + + 246.971173 + 53.253522 + -90.197562 + + + 170.339249 + 549.584668 + 18.323003 + + + 23.901634 + 93.637226 + 39.209019 + + + -61.445916 + 825.218902 + -182.64427 + + + -156.52472 + -1040.816514 + 1806.537444 + + + 111.54152 + 340.011389 + 5.500047 + + + 105.552367 + 339.650757 + 5.500047 + + + 99.563215 + 339.290125 + 5.500047 + + + 93.574063 + 338.929493 + 5.500047 + + + 87.584911 + 338.568862 + 5.500047 + + + 81.595758 + 338.20823 + 5.500047 + + + 75.606606 + 337.847598 + 5.500047 + + + 6195.437755 + 26884.310683 + 9797.125002 + + + -176.526819 + -1432.828428 + -651.126196 + + + 233.322631 + 792.041899 + 171.835035 + + + -17.935751 + 39.602387 + -103.948994 + + + 76.340415 + 843.283313 + 194.537083 + + + -314.420009 + -537.405904 + -313.095844 + + + 1560.86896 + 8287.095063 + 2945.389283 + + + 438.926347 + 217.589638 + 320.749271 + + + 260.383403 + 370.490572 + -18.441992 + + + 199.290665 + 280.727916 + -18.190215 + + + 128.937953 + 423.057485 + 20.580918 + + + 70.368976 + 175.087747 + -18.773809 + + + -39.655789 + 757.975328 + 15.268107 + + + 343.113512 + -2137.690004 + 719.289037 + + + 112.039529 + 331.566053 + 1.500047 + + + 106.053372 + 331.205602 + 1.500047 + + + 100.067214 + 330.84515 + 1.500047 + + + 94.081056 + 330.484699 + 1.500047 + + + 88.094899 + 330.124247 + 1.500047 + + + 82.108741 + 329.763795 + 1.500047 + + + 76.122583 + 329.403344 + 1.500047 + + + 1715.230008 + 4309.016903 + 4614.679648 + + + 159.899084 + 195.438826 + -163.737525 + + + 137.331816 + 350.253317 + 21.902932 + + + 44.792781 + 310.212607 + -19.069209 + + + -2.35861 + 396.565995 + 86.952557 + + + -113.321304 + 305.219654 + -13.68678 + + + 56.382296 + 995.464077 + 794.64576 + + + -133.818309 + -1562.219028 + -334.381352 + + + -60.37674 + 438.474757 + -61.651134 + + + 95.576475 + 322.97735 + 65.328804 + + + -44.896099 + 370.452751 + 1.479838 + + + 52.580208 + 328.758313 + 94.814382 + + + -327.252795 + 414.043404 + -132.133605 + + + 6644.600658 + -170.399063 + 4697.527349 + + + 1527.507449 + -14.880952 + 1108.948293 + + + 6.751967 + 353.096947 + -4.925782 + + + 26.866945 + 345.934971 + 25.034135 + + + 9.289925 + 354.634159 + 31.847961 + + + 27.609068 + 350.068729 + 62.036226 + + + -5.461385 + 362.56023 + 57.363489 + + + 125.772564 + 120.082662 + 19.212306 + + + 261411.427928 + -184180.767153 + -26260.124981 + + + -17694.39609 + 12738.297856 + 1806.666689 + + + 7254.830516 + -4436.415788 + -610.312082 + + + -1555.806533 + 2160.147387 + 357.412737 + + + 7392.215197 + -3747.6644 + -455.309764 + + + -8825.639958 + 8064.530978 + 1255.079408 + + + 94235.117919 + -64110.725667 + -8993.502002 + + + 3708.005824 + -13350.0689 + -6584.989189 + + + 2970.965041 + 2045.04176 + 791.40993 + + + 1965.942286 + -1385.687478 + -189.267604 + + + 2839.740835 + 150.493276 + 16.071596 + + + 2141.947799 + -949.655999 + 253.860906 + + + 3139.659797 + -58.270535 + -690.254103 + + + 1539.748714 + -783.415853 + 4650.049605 + + + -5796.448701 + 11043.980108 + 13894.844117 + + + 3277.381428 + -662.210117 + -1219.533879 + + + 1935.138156 + -525.600284 + 387.888863 + + + 2840.547761 + -366.736005 + -297.542347 + + + 2138.263458 + -493.047732 + 519.644497 + + + 4447.543236 + 291.276665 + -1285.796941 + + + -31441.373457 + -19390.496774 + 25623.881733 + + + -16135.769607 + 25545.889411 + 11200.497039 + + + 2763.635193 + -1228.019374 + -374.97735 + + + 2370.909382 + -463.433339 + 4.696823 + + + 2464.907633 + -401.754817 + 12.799327 + + + 2554.744445 + -327.557801 + 80.050358 + + + 2171.391586 + 408.832409 + 326.504211 + + + 20950.282046 + -26002.543712 + -9536.051291 + + + -24078.812426 + 29177.868464 + 21711.466508 + + + 3038.911533 + -1424.146387 + -677.42785 + + + 2342.97137 + -436.768399 + -20.781822 + + + 2462.535883 + -400.520804 + 62.560739 + + + 2584.465609 + -346.320175 + 59.136572 + + + 1883.124857 + 600.064914 + 913.903235 + + + 29065.264715 + -29513.004364 + -23838.068202 + + + 13360.838951 + 11113.050975 + -4308.728002 + + + 1699.803555 + -24.852979 + 155.483551 + + + 2033.025814 + -100.57791 + -181.332943 + + + 1928.200359 + 373.236055 + 23.119647 + + + 2044.02127 + 263.061848 + -109.077192 + + + 1929.885256 + 1500.782372 + 306.635802 + + + 12803.333437 + -19948.76805 + -2938.567797 + + + 133498.08288 + -154197.562658 + -7611.986004 + + + -8966.11287 + 11460.938418 + 352.341665 + + + 4915.574471 + -2919.771277 + -180.289524 + + + 109.571112 + 2528.373486 + 76.495386 + + + 5330.866291 + -2389.23338 + -53.655325 + + + -3882.99404 + 7312.50817 + 332.694516 + + + 56696.932638 + -51867.25345 + -1537.124504 + + + 936.861263 + -23.00797 + 428.087505 + + + 2504.399444 + 398.568635 + -144.4199 + + + 2315.555103 + 327.101392 + 23.928053 + + + 2529.045809 + 368.575845 + 22.567387 + + + 2456.747673 + 329.824931 + 141.755356 + + + 2808.277589 + 410.049134 + 82.16873 + + + -6822.427835 + -2311.895131 + 4233.188787 + + + -3054.720044 + 7599.304807 + 9098.176947 + + + 2359.839648 + 220.993684 + -136.269722 + + + 2403.854884 + 328.563377 + -36.183731 + + + 2467.433167 + 358.145802 + 55.338434 + + + 2534.082745 + 420.228148 + 123.074847 + + + 2572.152031 + 464.878796 + 269.210655 + + + 8104.200512 + -5670.185637 + -9875.14028 + + + 470.365116 + 6570.937473 + 485.967466 + + + 2261.009381 + 425.928862 + 16.895675 + + + 2404.163233 + 270.360142 + 4.379935 + + + 2472.356955 + 370.571249 + 30.013601 + + + 2541.366732 + 478.277391 + 44.560537 + + + 2685.099519 + 328.025885 + 24.180504 + + + 4529.423735 + -5323.960373 + -1174.200893 + + + -11162.08415 + 26574.627657 + -8857.810102 + + + 3331.271183 + -1177.18534 + 357.027006 + + + 2038.918148 + 715.728443 + -23.882496 + + + 2741.125057 + 92.754769 + 41.248234 + + + 2167.176135 + 855.55417 + -39.447723 + + + 3777.539144 + -403.58107 + -88.662016 + + + -17176.296869 + 10336.584882 + 5075.610103 + + + -320.413715 + -430.047147 + 476.215074 + + + -309.533559 + -591.267911 + 349.739401 + + + -62.20089 + -572.972678 + 512.979209 + + + -82.998024 + -465.245206 + 553.036741 + + + -434.254428 + -57.91155 + 118.304524 + + + -245.546309 + -398.14035 + 504.236663 + + + -239.15768 + -399.232886 + 488.628352 + + + -309.185278 + -415.315889 + 503.215178 + + + 369.104329 + -516.714296 + 555.503437 + + + -309.533904 + 597.267193 + 349.739121 + + + -82.998024 + 465.243772 + 553.036741 + + + -208.109603 + 399.232886 + 488.692973 + + + -201.601383 + 399.06798 + 504.232592 + + + -62.200544 + 578.971961 + 512.979489 + + + 353.373897 + 299.790016 + 574.848986 + + + 355.038435 + 515.367343 + 562.211322 + + + -122.723219 + 489.11971 + 548.674416 + + + 370.643442 + -371.614483 + 645.908874 + + + 329.875513 + 25.471759 + 506.366169 + + + 250.000627 + -10.181392 + 526.835861 + + + 252.837828 + 50.750329 + 495.132689 + + + 271.044387 + 370.613595 + 578.065963 + + + 343.012312 + -268.249907 + 611.273101 + + + 405.558439 + -466.964369 + 566.328469 + + + 397.017069 + -541.476925 + 620.49559 + + + 362.743491 + -494.217464 + 571.754294 + + + 350.697634 + -538.149076 + 547.440441 + + + 364.201194 + -484.094445 + 568.028387 + + + 366.560422 + -547.717481 + 543.887408 + + + 368.895738 + -536.379244 + 548.138228 + + + 205.609984 + -399.999996 + 556.334178 + + + 513.107471 + -510.399853 + 590.91723 + + + 479.169558 + -598.470993 + 540.540553 + + + 494.725907 + -598.306804 + 534.096902 + + + 450.413961 + -338.186719 + 598.81284 + + + 507.362855 + -336.393243 + 462.010927 + + + 510.156844 + -446.812034 + 457.523173 + + + 573.225657 + -636.950734 + 443.962818 + + + 545.177496 + -449.326178 + 443.328558 + + + 546.07773 + -306.068521 + 634.628543 + + + 546.07773 + -346.638255 + 639.422778 + + + 546.07773 + -275.757015 + 638.669148 + + + 546.07773 + -259.795965 + 572.61814 + + + 519.277385 + -309.328506 + 588.155677 + + + 546.07773 + -271.635188 + 549.115216 + + + 552.17773 + -360.12677 + 581.510746 + + + 546.07773 + -311.447168 + 535.179285 + + + 546.07773 + -346.14274 + 551.091361 + + + 608.729994 + -310.279348 + 502.380525 + + + 508.996528 + -222.248959 + 452.679041 + + + 658.268074 + -360.607964 + 521.118721 + + + 666.135818 + -244.278649 + 526.492267 + + + 491.063928 + -138.17284 + 602.125961 + + + 482.71515 + -241.566358 + 604.456377 + + + 497.95286 + 40.278278 + 572.969666 + + + 510.113561 + 355.289441 + 586.79833 + + + 514.106624 + 458.725878 + 607.589806 + + + 558.177731 + -228.65874 + 457.942965 + + + 558.17773 + -202.952348 + 455.592966 + + + 571.17773 + -116.826977 + 430.319005 + + + 666.685211 + -295.349101 + 513.769009 + + + 721.753326 + -302.583581 + 564.135877 + + + 582.32773 + 632.166319 + 439.519001 + + + 494.725907 + 601.469559 + 534.096902 + + + 455.411374 + -100.599422 + 600.482849 + + + 451.910947 + -107.216092 + 596.662253 + + + 450.910947 + -114.740536 + 595.335491 + + + 449.910947 + -122.264979 + 596.662253 + + + 441.752967 + -317.581078 + 610.021731 + + + 453.361903 + -295.950887 + 611.876788 + + + 465.073375 + -291.216264 + 607.892175 + + + 443.143027 + -301.047187 + 615.022809 + + + 524.391493 + -341.30215 + 465.513234 + + + 498.095919 + -339.255133 + 452.573509 + + + 514.716657 + -221.674528 + 618.587961 + + + 471.444637 + -211.477462 + 604.60453 + + + 509.565919 + -107.286321 + 554.436422 + + + 460.031903 + -39.828622 + 547.123792 + + + 465.673426 + -34.940813 + 549.325232 + + + 532.260772 + -87.939346 + 603.824826 + + + 530.134508 + -82.057421 + 608.208466 + + + 513.254153 + -136.254848 + 547.752611 + + + 393.008622 + -375.171238 + 605.527284 + + + 339.308894 + -346.40093 + 661.959002 + + + 355.797842 + -377.835518 + 659.39616 + + + 353.08695 + -362.576 + 694.743532 + + + 365.643947 + -392.878851 + 668.508824 + + + 401.852572 + -322.110273 + 605.759019 + + + 266.454859 + -415.763314 + 260.560874 + + + 350.0 + -410.0 + 330.0 + + + 355.599725 + -390.399939 + 323.0 + + + 355.599725 + -370.399939 + 323.0 + + + 355.599725 + -350.399939 + 323.0 + + + 485.018512 + 421.838244 + 546.650329 + + + 495.949612 + 442.50054 + 552.923964 + + + 450.0 + 0.0 + 500.0 + + + 481.074228 + 3.0 + 403.217926 + + + 478.211138 + 27.625153 + 404.653363 + + + 477.782119 + 50.000001 + 403.085236 + + + 482.438552 + 13.520733 + 458.310564 + + + 520.388734 + -6.04996 + 340.603567 + + + 580.677385 + -18.691603 + 322.146275 + + + 646.196246 + 106.628329 + 318.893262 + + + 442.663311 + 9.498745 + 221.886281 + + + 520.88151 + -9.154561 + 195.53346 + + + 515.741738 + 23.227182 + 100.958033 + + + 594.372551 + -202.637442 + 177.954601 + + + 600.708745 + -202.579697 + 164.36659 + + + 973.483401 + 33.722331 + -1.612619 + + + 1156.938361 + 27.5 + -12.0 + + + 634.119187 + -141.401531 + 323.312234 + + + 872.218781 + -0.500717 + 2.8E-4 + + + 526.506788 + -3.353936 + 320.696261 + + + 805.320642 + -533.770515 + 879.79294 + + + 1644.1424 + -549.669391 + 1001.207931 + + + 790.656312 + -27.47547 + 1074.972164 + + + 405.882025 + -399.385956 + -67.175467 + + + 1822.652357 + -582.55273 + -41.184675 + + + 248.403662 + -401.126311 + 129.52458 + + + 263.104771 + -401.17581 + 71.359914 + + + 248.407016 + -411.174595 + 114.881935 + + + 1925.648222 + -487.615537 + -33.824032 + + + 2490.404439 + -370.03657 + 385.907132 + + + 1857.24881 + -578.111787 + -30.269808 + + + 1808.72537 + -549.049988 + -46.715304 + + + 1822.963423 + -608.013502 + -37.886465 + + + 250.656869 + -419.119159 + 177.728504 + + + 2507.171056 + -306.868426 + 398.158462 + + + 2434.816916 + -523.028431 + 675.83562 + + + 1979.13756 + 150.742359 + -68.246313 + + + 1778.188181 + 562.785028 + 108.681944 + + + 1759.152349 + 265.483498 + 124.265713 + + + 1793.199594 + 573.544659 + 123.315432 + + + 1989.891245 + 168.647746 + -66.065626 + + + 1977.571934 + -398.410156 + -61.404546 + + + 1971.128283 + -382.853807 + -58.826674 + + + 2616.861763 + -393.883805 + 449.503657 + + + 2696.878116 + -408.973235 + 489.74563 + + + 2732.610824 + -390.788671 + 455.657357 + + + 2699.888324 + -397.233267 + 274.065233 + + + 2481.851885 + -396.100973 + 133.340471 + + + 2871.613943 + -584.745285 + 336.776579 + + + 2536.110334 + -197.839843 + 400.802355 + + + 2588.168439 + -1.711202 + 457.35226 + + + 2565.151173 + -248.293496 + 373.664693 + + + 2605.511646 + -147.35463 + 505.924858 + + + 2578.924738 + 154.381101 + 81.891368 + + + 2485.017484 + -390.331896 + 386.190794 + + + 2501.878609 + -326.976357 + 360.74892 + + + 2635.963837 + -383.215493 + 638.949973 + + + 2636.519429 + -29.35237 + 651.99048 + + + 2676.907477 + 388.414078 + 298.167116 + + + 2475.408629 + 397.349965 + 148.896873 + + + 2653.282759 + -397.469204 + 702.020689 + + + 2469.389924 + -422.142852 + 838.160421 + + + 2470.845579 + 440.30443 + 839.864015 + + + 2991.9046 + -30.051731 + 482.932259 + + + 2662.461966 + 382.907669 + 312.381411 + + + 1904.12755 + 550.0 + 372.571575 + + + 2481.85228 + 398.349965 + 133.340523 + + + 20.0 + -400.0 + 30.0 + + + 141.359508 + -315.088539 + 4.500027 + + + 0.0 + -440.844584 + 18.977703 + + + 19.999988 + -452.376089 + 40.344098 + + + 17.0 + -330.0 + 30.0 + + + -0.790055 + -348.0 + 53.321366 + + + -20.343254 + -350.0 + 36.905751 + + + 164.412776 + 339.745445 + -1.476793 + + + 20.0 + 400.0 + 30.0 + + + 19.999988 + 454.909419 + 52.401595 + + + 0.0 + 458.371042 + 4.714161 + + + 20.0 + 350.0 + 30.0 + + + -5.97323 + 352.0 + 41.540079 + + + 17.355746 + 352.330109 + 45.922188 + + + 2430.0 + -450.0 + 0.0 + + + 2500.0 + -447.765449 + 51.150469 + + + 2554.51366 + -407.033114 + 55.970051 + + + 2498.0 + -348.048926 + 51.400049 + + + 2496.091822 + -343.298924 + 87.701406 + + + 2430.0 + 350.0 + 20.0 + + + 2490.90287 + 348.640678 + 83.002436 + + + 2506.325333 + 381.730479 + 79.377688 + + + 2515.309672 + 396.614252 + 31.933374 + + + 2500.0 + 435.195971 + -0.60923 + + + PNID1 + TopologyNode_Node_1 + CartesianPoint3D_Cartesian_point_2473 + + + PNID2 + TopologyNode_Node_2 + CartesianPoint3D_Cartesian_point_2474 + + + PNID3 + TopologyNode_Node_3 + CartesianPoint3D_Cartesian_point_2475 + + + PNID4 + TopologyNode_Node_4 + CartesianPoint3D_Cartesian_point_2476 + + + PNID5 + TopologyNode_Node_5 + CartesianPoint3D_Cartesian_point_2477 + + + PNID6 + TopologyNode_Node_6 + CartesianPoint3D_Cartesian_point_2478 + + + PNID7 + TopologyNode_Node_7 + CartesianPoint3D_Cartesian_point_2479 + + + PNID8 + TopologyNode_Node_8 + CartesianPoint3D_Cartesian_point_2480 + + + PNID9 + TopologyNode_Node_9 + CartesianPoint3D_Cartesian_point_2481 + + + PNID10 + TopologyNode_Node_10 + CartesianPoint3D_Cartesian_point_2482 + + + PNID11 + TopologyNode_Node_11 + CartesianPoint3D_Cartesian_point_2483 + + + PNID12 + TopologyNode_Node_12 + CartesianPoint3D_Cartesian_point_2484 + + + PNID13 + TopologyNode_Node_13 + CartesianPoint3D_Cartesian_point_2485 + + + PNID14 + TopologyNode_Node_14 + CartesianPoint3D_Cartesian_point_2486 + + + PNID15 + TopologyNode_Node_15 + CartesianPoint3D_Cartesian_point_2487 + + + PNID16 + TopologyNode_Node_16 + CartesianPoint3D_Cartesian_point_2488 + + + PNID17 + TopologyNode_Node_17 + CartesianPoint3D_Cartesian_point_2489 + + + PNID18 + TopologyNode_Node_18 + CartesianPoint3D_Cartesian_point_2490 + + + PNID19 + TopologyNode_Node_19 + CartesianPoint3D_Cartesian_point_2491 + + + PNID20 + TopologyNode_Node_20 + CartesianPoint3D_Cartesian_point_2492 + + + PNID21 + TopologyNode_Node_21 + CartesianPoint3D_Cartesian_point_2493 + + + PNID22 + TopologyNode_Node_22 + CartesianPoint3D_Cartesian_point_2494 + + + PNID23 + TopologyNode_Node_23 + CartesianPoint3D_Cartesian_point_2495 + + + PNID186 + TopologyNode_Node_24 + CartesianPoint3D_Cartesian_point_2496 + + + PNID187 + TopologyNode_Node_25 + CartesianPoint3D_Cartesian_point_2497 + + + PNID26 + TopologyNode_Node_26 + CartesianPoint3D_Cartesian_point_2498 + + + PNID27 + TopologyNode_Node_27 + CartesianPoint3D_Cartesian_point_2499 + + + PNID28 + TopologyNode_Node_28 + CartesianPoint3D_Cartesian_point_2500 + + + PNID29 + TopologyNode_Node_29 + CartesianPoint3D_Cartesian_point_2501 + + + PNID30 + TopologyNode_Node_30 + CartesianPoint3D_Cartesian_point_2502 + + + PNID31 + TopologyNode_Node_31 + CartesianPoint3D_Cartesian_point_2503 + + + PNID32 + TopologyNode_Node_32 + CartesianPoint3D_Cartesian_point_2504 + + + PNID33 + TopologyNode_Node_33 + CartesianPoint3D_Cartesian_point_2505 + + + PNID34 + TopologyNode_Node_34 + CartesianPoint3D_Cartesian_point_2506 + + + PNID35 + TopologyNode_Node_35 + CartesianPoint3D_Cartesian_point_2507 + + + PNID36 + TopologyNode_Node_36 + CartesianPoint3D_Cartesian_point_2508 + + + PNID37 + TopologyNode_Node_37 + CartesianPoint3D_Cartesian_point_2509 + + + PNID38 + TopologyNode_Node_38 + CartesianPoint3D_Cartesian_point_2510 + + + PNID39 + TopologyNode_Node_39 + CartesianPoint3D_Cartesian_point_2511 + + + PNID40 + TopologyNode_Node_40 + CartesianPoint3D_Cartesian_point_2512 + + + PNID41 + TopologyNode_Node_41 + CartesianPoint3D_Cartesian_point_2513 + + + PNID42 + TopologyNode_Node_42 + CartesianPoint3D_Cartesian_point_2514 + + + PNID43 + TopologyNode_Node_43 + CartesianPoint3D_Cartesian_point_2515 + + + PNID44 + TopologyNode_Node_44 + CartesianPoint3D_Cartesian_point_2516 + + + PNID45 + TopologyNode_Node_45 + CartesianPoint3D_Cartesian_point_2517 + + + PNID46 + TopologyNode_Node_46 + CartesianPoint3D_Cartesian_point_2518 + + + PNID47 + TopologyNode_Node_47 + CartesianPoint3D_Cartesian_point_2519 + + + PNID48 + TopologyNode_Node_48 + CartesianPoint3D_Cartesian_point_2520 + + + PNID49 + TopologyNode_Node_49 + CartesianPoint3D_Cartesian_point_2521 + + + PNID50 + TopologyNode_Node_50 + CartesianPoint3D_Cartesian_point_2522 + + + PNID51 + TopologyNode_Node_51 + CartesianPoint3D_Cartesian_point_2523 + + + PNID52 + TopologyNode_Node_52 + CartesianPoint3D_Cartesian_point_2524 + + + PNID53 + TopologyNode_Node_53 + CartesianPoint3D_Cartesian_point_2525 + + + PNID54 + TopologyNode_Node_54 + CartesianPoint3D_Cartesian_point_2526 + + + PNID55 + TopologyNode_Node_55 + CartesianPoint3D_Cartesian_point_2527 + + + PNID56 + TopologyNode_Node_56 + CartesianPoint3D_Cartesian_point_2528 + + + PNID57 + TopologyNode_Node_57 + CartesianPoint3D_Cartesian_point_2529 + + + PNID58 + TopologyNode_Node_58 + CartesianPoint3D_Cartesian_point_2530 + + + PNID59 + TopologyNode_Node_59 + CartesianPoint3D_Cartesian_point_2531 + + + PNID60 + TopologyNode_Node_60 + CartesianPoint3D_Cartesian_point_2532 + + + PNID61 + TopologyNode_Node_61 + CartesianPoint3D_Cartesian_point_2533 + + + PNID62 + TopologyNode_Node_62 + CartesianPoint3D_Cartesian_point_2534 + + + PNID63 + TopologyNode_Node_63 + CartesianPoint3D_Cartesian_point_2535 + + + PNID64 + TopologyNode_Node_64 + CartesianPoint3D_Cartesian_point_2536 + + + PNID65 + TopologyNode_Node_65 + CartesianPoint3D_Cartesian_point_2537 + + + PNID66 + TopologyNode_Node_66 + CartesianPoint3D_Cartesian_point_2538 + + + PNID67 + TopologyNode_Node_67 + CartesianPoint3D_Cartesian_point_2539 + + + PNID68 + TopologyNode_Node_68 + CartesianPoint3D_Cartesian_point_2540 + + + PNID69 + TopologyNode_Node_69 + CartesianPoint3D_Cartesian_point_2541 + + + PNID70 + TopologyNode_Node_70 + CartesianPoint3D_Cartesian_point_2542 + + + PNID71 + TopologyNode_Node_71 + CartesianPoint3D_Cartesian_point_2543 + + + PNID72 + TopologyNode_Node_72 + CartesianPoint3D_Cartesian_point_2544 + + + PNID73 + TopologyNode_Node_73 + CartesianPoint3D_Cartesian_point_2545 + + + PNID74 + TopologyNode_Node_74 + CartesianPoint3D_Cartesian_point_2546 + + + PNID75 + TopologyNode_Node_75 + CartesianPoint3D_Cartesian_point_2547 + + + PNID76 + TopologyNode_Node_76 + CartesianPoint3D_Cartesian_point_2548 + + + PNID77 + TopologyNode_Node_77 + CartesianPoint3D_Cartesian_point_2549 + + + PNID78 + TopologyNode_Node_78 + CartesianPoint3D_Cartesian_point_2550 + + + PNID79 + TopologyNode_Node_79 + CartesianPoint3D_Cartesian_point_2551 + + + PNID80 + TopologyNode_Node_80 + CartesianPoint3D_Cartesian_point_2552 + + + PNID81 + TopologyNode_Node_81 + CartesianPoint3D_Cartesian_point_2553 + + + PNID82 + TopologyNode_Node_82 + CartesianPoint3D_Cartesian_point_2554 + + + PNID83 + TopologyNode_Node_83 + CartesianPoint3D_Cartesian_point_2555 + + + PNID84 + TopologyNode_Node_84 + CartesianPoint3D_Cartesian_point_2556 + + + PNID85 + TopologyNode_Node_85 + CartesianPoint3D_Cartesian_point_2557 + + + PNID86 + TopologyNode_Node_86 + CartesianPoint3D_Cartesian_point_2558 + + + PNID87 + TopologyNode_Node_87 + CartesianPoint3D_Cartesian_point_2559 + + + PNID88 + TopologyNode_Node_88 + CartesianPoint3D_Cartesian_point_2560 + + + PNID89 + TopologyNode_Node_89 + CartesianPoint3D_Cartesian_point_2561 + + + PNID90 + TopologyNode_Node_90 + CartesianPoint3D_Cartesian_point_2562 + + + PNID91 + TopologyNode_Node_91 + CartesianPoint3D_Cartesian_point_2563 + + + PNID92 + TopologyNode_Node_92 + CartesianPoint3D_Cartesian_point_2564 + + + PNID93 + TopologyNode_Node_93 + CartesianPoint3D_Cartesian_point_2565 + + + PNID94 + TopologyNode_Node_94 + CartesianPoint3D_Cartesian_point_2566 + + + PNID95 + TopologyNode_Node_95 + CartesianPoint3D_Cartesian_point_2567 + + + PNID96 + TopologyNode_Node_96 + CartesianPoint3D_Cartesian_point_2568 + + + PNID97 + TopologyNode_Node_97 + CartesianPoint3D_Cartesian_point_2569 + + + PNID98 + TopologyNode_Node_98 + CartesianPoint3D_Cartesian_point_2570 + + + PNID99 + TopologyNode_Node_99 + CartesianPoint3D_Cartesian_point_2571 + + + PNID100 + TopologyNode_Node_100 + CartesianPoint3D_Cartesian_point_2572 + + + PNID101 + TopologyNode_Node_101 + CartesianPoint3D_Cartesian_point_2573 + + + PNID188 + TopologyNode_Node_102 + CartesianPoint3D_Cartesian_point_2574 + + + PNID189 + TopologyNode_Node_103 + CartesianPoint3D_Cartesian_point_2575 + + + PNID104 + TopologyNode_Node_104 + CartesianPoint3D_Cartesian_point_2576 + + + PNID105 + TopologyNode_Node_105 + CartesianPoint3D_Cartesian_point_2577 + + + PNID106 + TopologyNode_Node_106 + CartesianPoint3D_Cartesian_point_2578 + + + PNID107 + TopologyNode_Node_107 + CartesianPoint3D_Cartesian_point_2579 + + + PNID108 + TopologyNode_Node_108 + CartesianPoint3D_Cartesian_point_2580 + + + PNID109 + TopologyNode_Node_109 + CartesianPoint3D_Cartesian_point_2581 + + + PNID110 + TopologyNode_Node_110 + CartesianPoint3D_Cartesian_point_2582 + + + PNID190 + TopologyNode_Node_111 + CartesianPoint3D_Cartesian_point_2583 + + + PNID112 + TopologyNode_Node_112 + CartesianPoint3D_Cartesian_point_2584 + + + PNID113 + TopologyNode_Node_113 + CartesianPoint3D_Cartesian_point_2585 + + + PNID114 + TopologyNode_Node_114 + CartesianPoint3D_Cartesian_point_2586 + + + PNID115 + TopologyNode_Node_115 + CartesianPoint3D_Cartesian_point_2587 + + + PNID116 + TopologyNode_Node_116 + CartesianPoint3D_Cartesian_point_2588 + + + PNID117 + TopologyNode_Node_117 + CartesianPoint3D_Cartesian_point_2589 + + + PNID118 + TopologyNode_Node_118 + CartesianPoint3D_Cartesian_point_2590 + + + PNID119 + TopologyNode_Node_119 + CartesianPoint3D_Cartesian_point_2591 + + + PNID120 + TopologyNode_Node_120 + CartesianPoint3D_Cartesian_point_2592 + + + PNID121 + TopologyNode_Node_121 + CartesianPoint3D_Cartesian_point_2593 + + + PNID122 + TopologyNode_Node_122 + CartesianPoint3D_Cartesian_point_2594 + + + PNID123 + TopologyNode_Node_123 + CartesianPoint3D_Cartesian_point_2595 + + + PNID124 + TopologyNode_Node_124 + CartesianPoint3D_Cartesian_point_2596 + + + PNID125 + TopologyNode_Node_125 + CartesianPoint3D_Cartesian_point_2597 + + + PNID126 + TopologyNode_Node_126 + CartesianPoint3D_Cartesian_point_2598 + + + PNID127 + TopologyNode_Node_127 + CartesianPoint3D_Cartesian_point_2599 + + + PNID128 + TopologyNode_Node_128 + CartesianPoint3D_Cartesian_point_2600 + + + PNID129 + TopologyNode_Node_129 + CartesianPoint3D_Cartesian_point_2601 + + + PNID130 + TopologyNode_Node_130 + CartesianPoint3D_Cartesian_point_2602 + + + PNID131 + TopologyNode_Node_131 + CartesianPoint3D_Cartesian_point_2603 + + + PNID132 + TopologyNode_Node_132 + CartesianPoint3D_Cartesian_point_2604 + + + PNID133 + TopologyNode_Node_133 + CartesianPoint3D_Cartesian_point_2605 + + + PNID134 + TopologyNode_Node_134 + CartesianPoint3D_Cartesian_point_2606 + + + PNID135 + TopologyNode_Node_135 + CartesianPoint3D_Cartesian_point_2607 + + + PNID136 + TopologyNode_Node_136 + CartesianPoint3D_Cartesian_point_2608 + + + PNID137 + TopologyNode_Node_137 + CartesianPoint3D_Cartesian_point_2609 + + + PNID138 + TopologyNode_Node_138 + CartesianPoint3D_Cartesian_point_2610 + + + PNID139 + TopologyNode_Node_139 + CartesianPoint3D_Cartesian_point_2611 + + + PNID140 + TopologyNode_Node_140 + CartesianPoint3D_Cartesian_point_2612 + + + PNID141 + TopologyNode_Node_141 + CartesianPoint3D_Cartesian_point_2613 + + + PNID142 + TopologyNode_Node_142 + CartesianPoint3D_Cartesian_point_2614 + + + PNID143 + TopologyNode_Node_143 + CartesianPoint3D_Cartesian_point_2615 + + + PNID144 + TopologyNode_Node_144 + CartesianPoint3D_Cartesian_point_2616 + + + PNID145 + TopologyNode_Node_145 + CartesianPoint3D_Cartesian_point_2617 + + + PNID146 + TopologyNode_Node_146 + CartesianPoint3D_Cartesian_point_2618 + + + PNID147 + TopologyNode_Node_147 + CartesianPoint3D_Cartesian_point_2619 + + + PNID148 + TopologyNode_Node_148 + CartesianPoint3D_Cartesian_point_2620 + + + PNID149 + TopologyNode_Node_149 + CartesianPoint3D_Cartesian_point_2621 + + + PNID150 + TopologyNode_Node_150 + CartesianPoint3D_Cartesian_point_2622 + + + PNID151 + TopologyNode_Node_151 + CartesianPoint3D_Cartesian_point_2623 + + + PNID152 + TopologyNode_Node_152 + CartesianPoint3D_Cartesian_point_2624 + + + PNID153 + TopologyNode_Node_153 + CartesianPoint3D_Cartesian_point_2625 + + + PNID154 + TopologyNode_Node_154 + CartesianPoint3D_Cartesian_point_2626 + + + PNID155 + TopologyNode_Node_155 + CartesianPoint3D_Cartesian_point_2627 + + + PNID156 + TopologyNode_Node_156 + CartesianPoint3D_Cartesian_point_2628 + + + PNID157 + TopologyNode_Node_157 + CartesianPoint3D_Cartesian_point_2629 + + + PNID158 + TopologyNode_Node_158 + CartesianPoint3D_Cartesian_point_2630 + + + PNID159 + TopologyNode_Node_159 + CartesianPoint3D_Cartesian_point_2631 + + + PNID160 + TopologyNode_Node_160 + CartesianPoint3D_Cartesian_point_2632 + + + PNID161 + TopologyNode_Node_161 + CartesianPoint3D_Cartesian_point_2633 + + + PNID162 + TopologyNode_Node_162 + CartesianPoint3D_Cartesian_point_2634 + + + PNID163 + TopologyNode_Node_163 + CartesianPoint3D_Cartesian_point_2635 + + + PNID164 + TopologyNode_Node_164 + CartesianPoint3D_Cartesian_point_2636 + + + PNID165 + TopologyNode_Node_165 + CartesianPoint3D_Cartesian_point_2637 + + + PNID166 + TopologyNode_Node_166 + CartesianPoint3D_Cartesian_point_2638 + + + PNID167 + TopologyNode_Node_167 + CartesianPoint3D_Cartesian_point_2639 + + + PNID168 + TopologyNode_Node_168 + CartesianPoint3D_Cartesian_point_2640 + + + PNID169 + TopologyNode_Node_169 + CartesianPoint3D_Cartesian_point_2641 + + + PNID170 + TopologyNode_Node_170 + CartesianPoint3D_Cartesian_point_2642 + + + PNID171 + TopologyNode_Node_171 + CartesianPoint3D_Cartesian_point_2643 + + + PNID172 + TopologyNode_Node_172 + CartesianPoint3D_Cartesian_point_2644 + + + PNID173 + TopologyNode_Node_173 + CartesianPoint3D_Cartesian_point_2645 + + + PNID174 + TopologyNode_Node_174 + CartesianPoint3D_Cartesian_point_2646 + + + PNID175 + TopologyNode_Node_175 + CartesianPoint3D_Cartesian_point_2647 + + + PNID176 + TopologyNode_Node_176 + CartesianPoint3D_Cartesian_point_2648 + + + PNID177 + TopologyNode_Node_177 + CartesianPoint3D_Cartesian_point_2649 + + + PNID178 + TopologyNode_Node_178 + CartesianPoint3D_Cartesian_point_2650 + + + PNID179 + TopologyNode_Node_179 + CartesianPoint3D_Cartesian_point_2651 + + + PNID180 + TopologyNode_Node_180 + CartesianPoint3D_Cartesian_point_2652 + + + PNID181 + TopologyNode_Node_181 + CartesianPoint3D_Cartesian_point_2653 + + + PNID182 + TopologyNode_Node_182 + CartesianPoint3D_Cartesian_point_2654 + + + PNID183 + TopologyNode_Node_183 + CartesianPoint3D_Cartesian_point_2655 + + + PNID184 + TopologyNode_Node_184 + CartesianPoint3D_Cartesian_point_2656 + + + 0011_SW_Multi-branchable1/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_1 + + -0.556009 + -0.547 + -0.625815 + + + -1.0 + 0.0 + 0.0 + + GeometryNode3D_Node_2 + GeometryNode3D_Node_1 + + + 001_Scheinwerfer_blinker_li-Multi-branchable2/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_2 + + 0.984808 + 0.0 + -0.173648 + + + 0.94044 + 0.134307 + 0.312306 + + GeometryNode3D_Node_4 + GeometryNode3D_Node_3 + + + 001_Scheinwerfer_li-Multi-branchable4/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_3 + + -0.94044 + -0.134307 + -0.312306 + + + -0.828173 + -0.158072 + -0.537719 + + GeometryNode3D_Node_1 + GeometryNode3D_Node_4 + + + 001_Scheinwerfer_Hupe_li-Multi-branchable5/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_4 + + 0.0 + 1.0 + 0.0 + + + 0.747203 + -0.267055 + 0.60858 + + GeometryNode3D_Node_1 + GeometryNode3D_Node_5 + + + 001_Scheinwerfer_Masse1_li-Multi-branchable6/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_5 + + 0.747203 + -0.267055 + 0.60858 + + + 0.999908 + -0.013528 + -2.11E-4 + + GeometryNode3D_Node_6 + GeometryNode3D_Node_1 + + + 001_Scheinwerfer_Masse2_li-Multi-branchable7/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_6 + + 0.909645 + 0.415015 + -0.017549 + + + 0.707107 + 0.0 + 0.707107 + + GeometryNode3D_Node_7 + GeometryNode3D_Node_1 + + + Part1/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_7 + + 0.344993 + 0.449157 + 0.824159 + + + 0.260884 + 0.477474 + 0.839022 + + GeometryNode3D_Node_8 + GeometryNode3D_Node_1 + + + 001_Scheinwerfer_li-Multi-branchable141/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_8 + + 0.94044 + 0.134307 + 0.312306 + + + -0.283055 + -0.040118 + -0.958264 + + GeometryNode3D_Node_9 + GeometryNode3D_Node_4 + + + 001_Scheinwerfer_rechts-Multi-branchable9/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_9 + + 1.0 + -0.0 + -0.0 + + + 0.96372 + -0.202444 + 0.173957 + + GeometryNode3D_Node_11 + GeometryNode3D_Node_10 + + + 001_Scheinwerfer_rechts-Multi-branchable10/ElecRouteBody.1/Flexible Curve.3 + TopologySegment_Segment_10 + + 0.707107 + 0.0 + -0.707107 + + + 0.707737 + 0.439355 + 0.553241 + + GeometryNode3D_Node_11 + GeometryNode3D_Node_12 + + + 001_Scheinwerfer_rechts-Multi-branchable11/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_11 + + 0.999998 + -0.0 + 0.002177 + + + 0.734006 + 0.546833 + 0.402751 + + GeometryNode3D_Node_11 + GeometryNode3D_Node_13 + + + 001_Scheinwerfer_rechts-Multi-branchable12/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_12 + + 0.072658 + 0.886726 + -0.456551 + + + -0.638555 + 0.759902 + 0.121643 + + GeometryNode3D_Node_14 + GeometryNode3D_Node_11 + + + 001_Scheinwerfer_rechts-Multi-branchable104/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_13 + + 0.268389 + 0.846246 + 0.460255 + + + -0.359945 + 0.926211 + 0.112125 + + GeometryNode3D_Node_16 + GeometryNode3D_Node_15 + + + 001_Scheinwerfer_rechts-Multi-branchable105/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_14 + + 0.96372 + -0.202444 + 0.173957 + + + 0.359945 + -0.926211 + -0.112125 + + GeometryNode3D_Node_16 + GeometryNode3D_Node_11 + + + 001_Scheinwerfer_rechts-Multi-branchable105/ElecRouteBody.2/Flexible Curve.2 + TopologySegment_Segment_15 + + -0.858888 + 0.502949 + -0.096715 + + + -0.58566 + 0.810344 + 0.018564 + + GeometryNode3D_Node_17 + GeometryNode3D_Node_11 + + + Wasserkasten-Multi-branchable15/ElecRouteBody.1/Split.1 + TopologySegment_Segment_16 + + -0.048992 + 0.998674 + -0.015819 + + + -0.122045 + 0.992191 + -0.025743 + + GeometryNode3D_Node_19 + GeometryNode3D_Node_18 + + + Wasserkasten-Multi-branchable15/ElecRouteBody.1/Split.2 + TopologySegment_Segment_17 + + -0.122045 + 0.992191 + -0.025743 + + + 0.268179 + 0.846257 + 0.460359 + + GeometryNode3D_Node_15 + GeometryNode3D_Node_19 + + + Wasserkasten-Multi-branchable15/ElecRouteBody.2/Flexible Curve.2 + TopologySegment_Segment_18 + + 0.122045 + -0.992191 + 0.025743 + + + -0.0 + 0.988391 + 0.151931 + + GeometryNode3D_Node_20 + GeometryNode3D_Node_19 + + + Wasserkasten-Multi-branchable15/ElecRouteBody.3/Flexible Curve.3 + TopologySegment_Segment_19 + + 0.122045 + -0.992191 + 0.025743 + + + -0.269803 + 0.937126 + 0.221363 + + GeometryNode3D_Node_21 + GeometryNode3D_Node_19 + + + Wasserkasten-Multi-branchable16/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_20 + + 1.0 + -0.0 + -0.0 + + + 0.630106 + -0.77571 + -0.035234 + + GeometryNode3D_Node_15 + GeometryNode3D_Node_22 + + + Wasserkasten-Multi-branchable17/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_21 + + 0.009933 + 0.936426 + 0.350724 + + + 0.007717 + 0.727565 + 0.685996 + + GeometryNode3D_Node_18 + GeometryNode3D_Node_9 + + + Wasserkasten-Multi-branchable31/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_22 + + 0.207912 + -0.978148 + 0.0 + + + 0.256636 + -0.840488 + 0.477197 + + GeometryNode3D_Node_18 + GeometryNode3D_Node_23 + + + Wasserkasten-Multi-branchable32/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_23 + + 0.589072 + 0.803922 + -0.081875 + + + 0.0 + 0.0 + 1.0 + + GeometryNode3D_Node_24 + GeometryNode3D_Node_9 + + + Wasserkasten-Multi-branchable33/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_24 + + 0.283055 + 0.040118 + 0.958264 + + + 0.0 + 0.0 + -1.0 + + GeometryNode3D_Node_25 + GeometryNode3D_Node_9 + + + Part3/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_25 + + -0.201855 + 0.772399 + 0.602208 + + + -0.505858 + 0.858516 + -0.084014 + + GeometryNode3D_Node_26 + GeometryNode3D_Node_9 + + + Part4/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_26 + + -0.62521 + -0.730486 + -0.274779 + + + -0.662239 + -0.701278 + -0.263911 + + GeometryNode3D_Node_27 + GeometryNode3D_Node_9 + + + Part5/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_27 + + -0.128711 + 0.925988 + 0.354935 + + + -0.465356 + 0.819409 + 0.334684 + + GeometryNode3D_Node_28 + GeometryNode3D_Node_9 + + + Part6/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_28 + + -0.283055 + -0.040118 + -0.958264 + + + 0.405292 + -0.856372 + -0.319945 + + GeometryNode3D_Node_29 + GeometryNode3D_Node_9 + + + Part8/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_29 + + -0.009933 + -0.936426 + -0.350724 + + + -0.009933 + -0.936426 + -0.350724 + + GeometryNode3D_Node_30 + GeometryNode3D_Node_9 + + + Wasserkasten-Multi-branchable137/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_30 + + 0.122045 + -0.992191 + 0.025743 + + + -0.996503 + -0.0 + 0.083556 + + GeometryNode3D_Node_31 + GeometryNode3D_Node_19 + + + Cockpit-Multi-branchable34/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_31 + + 0.639094 + -0.622591 + -0.451596 + + + 0.714493 + -0.696044 + -0.070867 + + GeometryNode3D_Node_32 + GeometryNode3D_Node_18 + + + Cockpit-Multi-branchable35/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_32 + + -0.707107 + -0.0 + -0.707107 + + + 0.757011 + -0.48278 + 0.440292 + + GeometryNode3D_Node_32 + GeometryNode3D_Node_33 + + + Cockpit-Multi-branchable36/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_33 + + -0.127615 + -0.610301 + -0.781823 + + + 0.0 + -0.0 + 1.0 + + GeometryNode3D_Node_34 + GeometryNode3D_Node_32 + + + Cockpit-Multi-branchable37/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_34 + + 0.706933 + 0.29624 + -0.642252 + + + 0.881155 + 0.369247 + -0.295334 + + GeometryNode3D_Node_35 + GeometryNode3D_Node_18 + + + Cockpit-Multi-branchable38/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_35 + + 0.82573 + 0.212722 + -0.522418 + + + 0.276075 + 0.071122 + -0.958501 + + GeometryNode3D_Node_36 + GeometryNode3D_Node_18 + + + Cockpit-Multi-branchable39/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_36 + + -0.493662 + 0.676238 + 0.546809 + + + -0.058144 + 0.823474 + 0.564366 + + GeometryNode3D_Node_35 + GeometryNode3D_Node_37 + + + Cockpit-Multi-branchable40/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_37 + + -1.0 + -0.0 + 0.0 + + + -0.485325 + 0.833152 + 0.265174 + + GeometryNode3D_Node_37 + GeometryNode3D_Node_38 + + + Cockpit-Multi-branchable41/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_38 + + -1.0 + -1.0E-6 + 2.0E-6 + + + -0.81567 + 0.100897 + 0.569651 + + GeometryNode3D_Node_37 + GeometryNode3D_Node_39 + + + Cockpit-Multi-branchable42/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_39 + + 0.834498 + 0.367873 + 0.410222 + + + 1.0 + 0.0 + 0.0 + + GeometryNode3D_Node_40 + GeometryNode3D_Node_35 + + + Cockpit-Multi-branchable43/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_40 + + 0.856754 + -0.105079 + 0.504906 + + + 1.0 + -0.0 + 0.0 + + GeometryNode3D_Node_41 + GeometryNode3D_Node_35 + + + Cockpit-Multi-branchable44/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_41 + + 0.730056 + 0.576011 + 0.367736 + + + 1.0 + 0.0 + 0.0 + + GeometryNode3D_Node_42 + GeometryNode3D_Node_35 + + + Cockpit-Multi-branchable45/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_42 + + 0.69464 + 0.682274 + -0.227986 + + + 1.0 + 0.0 + -0.0 + + GeometryNode3D_Node_43 + GeometryNode3D_Node_35 + + + Cockpit-Multi-branchable46/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_43 + + 0.850134 + 0.49396 + -0.182417 + + + 1.0 + 0.0 + -0.0 + + GeometryNode3D_Node_44 + GeometryNode3D_Node_35 + + + Cockpit-Multi-branchable47/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_44 + + 0.692983 + 0.577662 + -0.431372 + + + 1.0 + 0.0 + -0.0 + + GeometryNode3D_Node_45 + GeometryNode3D_Node_35 + + + Cockpit-Multi-branchable48/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_45 + + 0.902853 + -0.337602 + -0.266237 + + + 1.0 + -0.0 + 0.0 + + GeometryNode3D_Node_46 + GeometryNode3D_Node_35 + + + Cockpit-Multi-branchable49/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_46 + + 0.751183 + 0.255719 + -0.608549 + + + 1.0 + 0.0 + -0.0 + + GeometryNode3D_Node_47 + GeometryNode3D_Node_35 + + + Cockpit-Multi-branchable50/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_47 + + 0.833913 + -0.090758 + -0.544382 + + + 1.0 + -0.0 + -0.0 + + GeometryNode3D_Node_48 + GeometryNode3D_Node_35 + + + Cockpit-Multi-branchable51/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_48 + + -0.104086 + 0.016306 + -0.994435 + + + 0.67387 + 0.153037 + 0.722827 + + GeometryNode3D_Node_49 + GeometryNode3D_Node_36 + + + Cockpit-Multi-branchable52/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_49 + + 0.01174 + 0.820303 + -0.571809 + + + 0.012604 + 0.880654 + 0.473593 + + GeometryNode3D_Node_50 + GeometryNode3D_Node_36 + + + Cockpit-Multi-branchable53/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_50 + + 0.526799 + -0.838407 + 0.139849 + + + 0.866025 + -0.0 + 0.5 + + GeometryNode3D_Node_51 + GeometryNode3D_Node_49 + + + Cockpit-Multi-branchable55/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_51 + + 0.491253 + 0.854928 + 0.166637 + + + 0.866025 + 0.0 + 0.5 + + GeometryNode3D_Node_52 + GeometryNode3D_Node_49 + + + Cockpit-Multi-branchable57/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_52 + + -0.037884 + -0.981335 + 0.188535 + + + -0.129084 + -0.975043 + -0.180632 + + GeometryNode3D_Node_54 + GeometryNode3D_Node_53 + + + Cockpit-Multi-branchable58/ElecRouteBody.1/Split.1 + TopologySegment_Segment_53 + + 0.037884 + 0.981335 + -0.188535 + + + 0.038349 + 0.993387 + -0.10822 + + GeometryNode3D_Node_55 + GeometryNode3D_Node_53 + + + Cockpit-Multi-branchable58/ElecRouteBody.1/Split.2 + TopologySegment_Segment_54 + + 0.038349 + 0.993387 + -0.10822 + + + 0.037959 + 0.983281 + 0.178093 + + GeometryNode3D_Node_56 + GeometryNode3D_Node_55 + + + Cockpit-Multi-branchable58/ElecRouteBody.1/Split.3 + TopologySegment_Segment_55 + + 0.037959 + 0.983281 + 0.178093 + + + 0.037744 + 0.977727 + 0.206461 + + GeometryNode3D_Node_57 + GeometryNode3D_Node_56 + + + Cockpit-Multi-branchable59.1.1/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_56 + + 0.670122 + -0.587755 + 0.453299 + + + 1.0 + -0.0 + 0.0 + + GeometryNode3D_Node_58 + GeometryNode3D_Node_50 + + + Cockpit-Multi-branchable60/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_57 + + 0.5563 + 0.823313 + 0.112632 + + + 1.0 + 0.0 + -0.0 + + GeometryNode3D_Node_59 + GeometryNode3D_Node_50 + + + Cockpit-Multi-branchable65/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_58 + + 0.086402 + 0.971448 + -0.220959 + + + 0.999998 + -0.001879 + 2.39E-4 + + GeometryNode3D_Node_60 + GeometryNode3D_Node_50 + + + Cockpit-Multi-branchable66/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_59 + + 0.92727 + 0.37193 + 0.04287 + + + 0.906308 + 0.0 + 0.422618 + + GeometryNode3D_Node_61 + GeometryNode3D_Node_49 + + + Cockpit-Multi-branchable67/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_60 + + 0.7558 + 0.157887 + 0.635482 + + + 0.927184 + 0.0 + 0.374607 + + GeometryNode3D_Node_62 + GeometryNode3D_Node_49 + + + Cockpit-Multi-branchable68/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_61 + + -1.0 + 0.0 + 0.0 + + + 0.164132 + -0.835149 + 0.524963 + + GeometryNode3D_Node_57 + GeometryNode3D_Node_63 + + + Cockpit-Multi-branchable69/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_62 + + -0.077671 + 0.572062 + -0.816525 + + + -0.0 + -0.0 + 1.0 + + GeometryNode3D_Node_64 + GeometryNode3D_Node_57 + + + Cockpit-Multi-branchable70/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_63 + + -0.513866 + 0.794076 + -0.32463 + + + -0.0 + -0.642788 + 0.766044 + + GeometryNode3D_Node_65 + GeometryNode3D_Node_53 + + + Cockpit-Multi-branchable71/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_64 + + -0.619104 + 0.629126 + -0.470011 + + + -0.0 + -0.34202 + 0.939693 + + GeometryNode3D_Node_66 + GeometryNode3D_Node_53 + + + Cockpit-Multi-branchable72/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_65 + + -0.724822 + 0.422989 + -0.543795 + + + -0.0 + -0.0 + 1.0 + + GeometryNode3D_Node_67 + GeometryNode3D_Node_53 + + + Cockpit-Multi-branchable73/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_66 + + -0.835794 + 0.173924 + -0.520767 + + + -0.0 + 0.34202 + 0.939693 + + GeometryNode3D_Node_68 + GeometryNode3D_Node_53 + + + Cockpit-Multi-branchable105/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_67 + + 0.881155 + 0.369247 + -0.295334 + + + 0.129084 + 0.975043 + 0.180632 + + GeometryNode3D_Node_54 + GeometryNode3D_Node_35 + + + Part10/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_68 + + -0.328048 + 0.834339 + 0.443016 + + + -0.684056 + 0.52424 + 0.507188 + + GeometryNode3D_Node_69 + GeometryNode3D_Node_35 + + + Part11/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_69 + + 0.075664 + 0.953825 + 0.290676 + + + -0.270028 + 0.863813 + 0.425338 + + GeometryNode3D_Node_70 + GeometryNode3D_Node_35 + + + Part12/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_70 + + 0.289073 + 0.939536 + 0.183601 + + + 0.420033 + 0.901093 + 0.107723 + + GeometryNode3D_Node_71 + GeometryNode3D_Node_35 + + + Part13/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_71 + + -0.16731 + 0.905322 + 0.390384 + + + -0.487208 + 0.727761 + 0.482693 + + GeometryNode3D_Node_72 + GeometryNode3D_Node_35 + + + Part14/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_72 + + 0.941338 + -0.272228 + 0.199438 + + + 0.962373 + -0.259845 + 0.079488 + + GeometryNode3D_Node_73 + GeometryNode3D_Node_36 + + + Part15/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_73 + + -0.68899 + -0.212679 + -0.692864 + + + -0.604158 + -0.188394 + -0.774274 + + GeometryNode3D_Node_74 + GeometryNode3D_Node_36 + + + Part16/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_74 + + 0.797733 + 0.489997 + 0.351461 + + + 0.70989 + 0.617966 + 0.337896 + + GeometryNode3D_Node_75 + GeometryNode3D_Node_54 + + + Part17/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_75 + + -0.339787 + 0.940459 + 0.009071 + + + -0.644668 + 0.754154 + -0.125118 + + GeometryNode3D_Node_76 + GeometryNode3D_Node_54 + + + Part19/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_76 + + 0.30375 + 0.538417 + -0.78603 + + + 0.375956 + -0.298019 + -0.877406 + + GeometryNode3D_Node_77 + GeometryNode3D_Node_53 + + + Part20/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_77 + + -0.25203 + 0.830203 + -0.497236 + + + -0.380843 + 0.227755 + 0.896151 + + GeometryNode3D_Node_78 + GeometryNode3D_Node_53 + + + Part21/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_78 + + -0.203733 + 0.85935 + -0.469052 + + + -0.366121 + 0.390898 + 0.844485 + + GeometryNode3D_Node_79 + GeometryNode3D_Node_53 + + + Part22/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_79 + + 0.619028 + 0.784942 + 0.025902 + + + 0.972106 + 0.232836 + 0.028247 + + GeometryNode3D_Node_80 + GeometryNode3D_Node_53 + + + Part23/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_80 + + 0.554336 + 0.827426 + 0.089875 + + + 0.945725 + 0.323684 + 0.028873 + + GeometryNode3D_Node_81 + GeometryNode3D_Node_53 + + + Part24/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_81 + + 0.368559 + 0.083316 + -0.925863 + + + 0.392634 + -0.633505 + -0.666716 + + GeometryNode3D_Node_82 + GeometryNode3D_Node_53 + + + Part2/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_82 + + 0.48195 + -0.078262 + -0.872697 + + + 0.514721 + -0.034997 + -0.856643 + + GeometryNode3D_Node_83 + GeometryNode3D_Node_18 + + + Part7/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_83 + + -0.720623 + 0.588694 + 0.366254 + + + -0.795 + 0.334497 + 0.506051 + + GeometryNode3D_Node_84 + GeometryNode3D_Node_18 + + + Part25/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_84 + + -0.706933 + -0.29624 + 0.642252 + + + -0.706933 + -0.29624 + 0.642252 + + GeometryNode3D_Node_85 + GeometryNode3D_Node_18 + + + Part26/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_85 + + -0.303534 + 0.168498 + 0.937804 + + + -0.933664 + 0.181329 + 0.308856 + + GeometryNode3D_Node_86 + GeometryNode3D_Node_18 + + + Part27/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_86 + + -0.158113 + -0.676905 + 0.718888 + + + -0.177491 + -0.669194 + 0.72158 + + GeometryNode3D_Node_87 + GeometryNode3D_Node_18 + + + Part28/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_87 + + 0.441107 + 0.69675 + -0.565653 + + + 0.399843 + 0.719817 + -0.56744 + + GeometryNode3D_Node_88 + GeometryNode3D_Node_18 + + + Cockpit-Multi-branchable136/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_88 + + -0.241701 + -0.88577 + 0.396223 + + + 0.809948 + 0.334005 + 0.482104 + + GeometryNode3D_Node_90 + GeometryNode3D_Node_89 + + + Cockpit-Multi-branchable136/ElecRouteBody.2/Flexible Curve.2 + TopologySegment_Segment_89 + + 0.809948 + 0.334005 + 0.482104 + + + 0.0 + 0.0 + -1.0 + + GeometryNode3D_Node_91 + GeometryNode3D_Node_90 + + + Cockpit-Multi-branchable136/ElecRouteBody.3/Flexible Curve.3 + TopologySegment_Segment_90 + + 0.809948 + 0.334005 + 0.482104 + + + 0.0 + 0.0 + -1.0 + + GeometryNode3D_Node_92 + GeometryNode3D_Node_90 + + + Cockpit-Multi-branchable136/ElecRouteBody.4/Flexible Curve.4 + TopologySegment_Segment_91 + + 0.809948 + 0.334005 + 0.482104 + + + 0.0 + -0.0 + -1.0 + + GeometryNode3D_Node_93 + GeometryNode3D_Node_90 + + + Cockpit-Multi-branchable136/ElecRouteBody.5/Flexible Curve.5 + TopologySegment_Segment_92 + + 0.037959 + 0.983281 + 0.178093 + + + 0.990791 + -0.102025 + 0.089018 + + GeometryNode3D_Node_94 + GeometryNode3D_Node_56 + + + Cockpit-Multi-branchable136/ElecRouteBody.6/Flexible Curve.6 + TopologySegment_Segment_93 + + 0.037959 + 0.983281 + 0.178093 + + + 0.98129 + -0.106516 + 0.160389 + + GeometryNode3D_Node_95 + GeometryNode3D_Node_56 + + + Cockpit-Multi-branchable138/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_94 + + 0.122045 + -0.992191 + 0.025743 + + + 0.0 + -0.0 + -1.0 + + GeometryNode3D_Node_96 + GeometryNode3D_Node_19 + + + Cockpit-Multi-branchable138/ElecRouteBody.2/Flexible Curve.2 + TopologySegment_Segment_95 + + 0.0 + -0.0 + -1.0 + + + 0.999318 + -0.0 + 0.03692 + + GeometryNode3D_Node_97 + GeometryNode3D_Node_96 + + + Cockpit-Multi-branchable138/ElecRouteBody.3/Flexible Curve.3 + TopologySegment_Segment_96 + + 0.0 + -0.0 + -1.0 + + + 0.999998 + -0.0 + -0.002022 + + GeometryNode3D_Node_98 + GeometryNode3D_Node_96 + + + Cockpit-Multi-branchable138/ElecRouteBody.4/Flexible Curve.4 + TopologySegment_Segment_97 + + 0.0 + -0.0 + -1.0 + + + 0.999984 + 0.0 + 0.00573 + + GeometryNode3D_Node_99 + GeometryNode3D_Node_96 + + + Cockpit-Multi-branchable138/ElecRouteBody.5/Flexible Curve.5 + TopologySegment_Segment_98 + + 0.334749 + 0.271708 + -0.902285 + + + 0.979933 + 0.0 + 0.199328 + + GeometryNode3D_Node_100 + GeometryNode3D_Node_96 + + + Boden-Multi-branchable21/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_99 + + 0.005447 + 0.74322 + -0.669025 + + + 0.291336 + 0.128382 + -0.947967 + + GeometryNode3D_Node_101 + GeometryNode3D_Node_53 + + + Boden-Multi-branchable22/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_100 + + 0.863584 + -0.181081 + -0.470566 + + + 0.974549 + -0.204349 + -0.092174 + + GeometryNode3D_Node_102 + GeometryNode3D_Node_101 + + + Boden-Multi-branchable23/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_101 + + -1.0 + -6.6E-5 + 0.0 + + + -0.633342 + -0.759895 + 0.146417 + + GeometryNode3D_Node_101 + GeometryNode3D_Node_103 + + + Boden-Multi-branchable25/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_102 + + 0.0 + -0.0 + -1.0 + + + 0.970169 + -0.231364 + 0.072411 + + GeometryNode3D_Node_105 + GeometryNode3D_Node_104 + + + Boden-Multi-branchable26/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_103 + + -0.039825 + 0.250907 + -0.967192 + + + 0.032303 + -0.203519 + -0.978538 + + GeometryNode3D_Node_105 + GeometryNode3D_Node_101 + + + Boden-Multi-branchable27/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_104 + + -0.021084 + 0.132837 + -0.990914 + + + -0.079591 + 0.501442 + -0.861522 + + GeometryNode3D_Node_106 + GeometryNode3D_Node_105 + + + Boden-Multi-branchable28/ElecRouteBody.1/Flexible Curve.3 + TopologySegment_Segment_105 + + 0.906308 + -0.0 + 0.422618 + + + -0.516485 + 0.829841 + 0.211205 + + GeometryNode3D_Node_106 + GeometryNode3D_Node_107 + + + Boden-Multi-branchable29/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_106 + + 0.906308 + 0.0 + 0.422618 + + + 0.079591 + -0.501442 + 0.861522 + + GeometryNode3D_Node_106 + GeometryNode3D_Node_108 + + + Boden-Multi-branchable30/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_107 + + 0.913199 + 0.020938 + -0.406976 + + + 0.999506 + 0.022917 + -0.021512 + + GeometryNode3D_Node_109 + GeometryNode3D_Node_106 + + + Boden-Multi-branchable31/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_108 + + 0.986109 + 0.156433 + -0.055836 + + + 0.0 + -1.0 + -0.0 + + GeometryNode3D_Node_110 + GeometryNode3D_Node_109 + + + Boden-Multi-branchable32/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_109 + + 1.0 + 0.0 + 0.0 + + + -0.170638 + 0.975513 + 0.138767 + + GeometryNode3D_Node_101 + GeometryNode3D_Node_111 + + + Boden-Multi-branchable58/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_110 + + 0.999923 + 0.012427 + -8.2E-5 + + + -1.0 + -0.0 + 0.0 + + GeometryNode3D_Node_112 + GeometryNode3D_Node_109 + + + Part18/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_111 + + 0.291336 + 0.128382 + -0.947967 + + + 0.291336 + 0.128382 + -0.947967 + + GeometryNode3D_Node_113 + GeometryNode3D_Node_101 + + + Dach-Multi-branchable62/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_112 + + 0.757011 + -0.48278 + 0.440292 + + + 0.553094 + 0.281192 + 0.784231 + + GeometryNode3D_Node_114 + GeometryNode3D_Node_32 + + + Dach-Multi-branchable63/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_113 + + 0.553094 + 0.281192 + 0.784231 + + + 0.0 + 0.997564 + -0.069756 + + GeometryNode3D_Node_115 + GeometryNode3D_Node_114 + + + Dach-Multi-branchable64/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_114 + + 0.553094 + 0.281192 + 0.784231 + + + 1.0 + 0.0 + -0.0 + + GeometryNode3D_Node_116 + GeometryNode3D_Node_114 + + + Schweller_Saeule_li-Multi-branchable74/ElecRouteBody.1/Split.1 + TopologySegment_Segment_115 + + -0.283055 + -0.040118 + -0.958264 + + + 0.241701 + 0.88577 + -0.396223 + + GeometryNode3D_Node_89 + GeometryNode3D_Node_9 + + + Schweller_Saeule_li-Multi-branchable74/ElecRouteBody.1/Split.2 + TopologySegment_Segment_116 + + 0.998669 + 0.014176 + -0.049586 + + + 0.5932 + 0.731475 + -0.336241 + + GeometryNode3D_Node_118 + GeometryNode3D_Node_117 + + + Schweller_Saeule_li-Multi-branchable74/ElecRouteBody.1/Split.3 + TopologySegment_Segment_117 + + 0.241701 + 0.88577 + -0.396223 + + + 0.20945 + 0.003484 + -0.977813 + + GeometryNode3D_Node_119 + GeometryNode3D_Node_89 + + + Schweller_Saeule_li-Multi-branchable74/ElecRouteBody.1/Split.4 + TopologySegment_Segment_118 + + 0.261476 + -0.003194 + -0.965205 + + + 0.998669 + 0.014176 + -0.049586 + + GeometryNode3D_Node_117 + GeometryNode3D_Node_120 + + + Schweller_Saeule_li-Multi-branchable74/ElecRouteBody.1/Split.5 + TopologySegment_Segment_119 + + 0.20945 + 0.003484 + -0.977813 + + + 0.261476 + -0.003194 + -0.965205 + + GeometryNode3D_Node_120 + GeometryNode3D_Node_119 + + + Schweller_Saeule_li-Multi-branchable74/ElecRouteBody.2/Flexible Curve.3 + TopologySegment_Segment_120 + + -0.261476 + 0.003194 + 0.965205 + + + -0.123106 + -0.105632 + 0.986756 + + GeometryNode3D_Node_121 + GeometryNode3D_Node_120 + + + Schweller_Saeule_li-Multi-branchable78/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_121 + + 0.959584 + 0.275322 + 0.058273 + + + 0.09954 + 0.971776 + 0.213876 + + GeometryNode3D_Node_122 + GeometryNode3D_Node_118 + + + Schweller_Saeule_li-Multi-branchable81/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_122 + + 0.09954 + 0.971776 + 0.213876 + + + 0.979535 + 0.084691 + 0.182587 + + GeometryNode3D_Node_123 + GeometryNode3D_Node_122 + + + Part9/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_123 + + 0.9322 + 0.136503 + 0.335217 + + + 0.878882 + -0.181479 + -0.441172 + + GeometryNode3D_Node_124 + GeometryNode3D_Node_118 + + + Part29/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_124 + + -0.378108 + 0.913376 + -0.150927 + + + -0.418542 + 0.896745 + -0.143776 + + GeometryNode3D_Node_125 + GeometryNode3D_Node_118 + + + Part30/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_125 + + 0.007885 + -0.991599 + 0.129106 + + + 0.126644 + -0.985831 + 0.109993 + + GeometryNode3D_Node_126 + GeometryNode3D_Node_118 + + + Schweller_Saeule_li-Multi-branchable139/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_126 + + -0.20945 + -0.003484 + 0.977813 + + + -0.238922 + 0.348414 + 0.90638 + + GeometryNode3D_Node_127 + GeometryNode3D_Node_119 + + + Schweller_Saeule_li-Multi-branchable140/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_127 + + -0.25261 + -0.951706 + 0.174482 + + + 0.0 + -0.982567 + 0.185909 + + GeometryNode3D_Node_129 + GeometryNode3D_Node_128 + + + Boden_Heck_Batterie-Multi-branchable75/ElecRouteBody.2/Flexible Curve.2 + TopologySegment_Segment_128 + + -0.369419 + 0.870482 + 0.325254 + + + -0.0 + -1.0 + 0.0 + + GeometryNode3D_Node_131 + GeometryNode3D_Node_130 + + + Boden_Heck_Batterie-Multi-branchable76/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_129 + + -0.446504 + 0.892553 + 0.063117 + + + -0.0 + 1.0 + 0.0 + + GeometryNode3D_Node_132 + GeometryNode3D_Node_130 + + + Boden_Heck_Batterie-Multi-branchable77/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_130 + + -0.221645 + 0.914862 + 0.337492 + + + -0.705557 + -0.708647 + 0.002895 + + GeometryNode3D_Node_133 + GeometryNode3D_Node_130 + + + Part33/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_131 + + 0.369419 + -0.870482 + -0.325254 + + + 0.51208 + 0.852637 + 0.103842 + + GeometryNode3D_Node_134 + GeometryNode3D_Node_130 + + + Boden_Heck_Batterie-Multi-branchable135/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_132 + + 0.5932 + 0.731475 + -0.336241 + + + -0.369419 + 0.870482 + 0.325254 + + GeometryNode3D_Node_130 + GeometryNode3D_Node_118 + + + Masseanbindung_Boden_Heck_li-Multi-branchable111.1/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_133 + + -0.623896 + -0.781508 + 0.0 + + + 0.09954 + 0.971776 + 0.213876 + + GeometryNode3D_Node_122 + GeometryNode3D_Node_135 + + + Masseanbindung_Boden_Heck_li-Multi-branchable111/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_134 + + -1.0 + 0.0 + -0.0 + + + 0.09954 + 0.971776 + 0.213876 + + GeometryNode3D_Node_122 + GeometryNode3D_Node_136 + + + Zentralsteckdose-Multi-branchable82/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_135 + + 0.949608 + -0.179076 + 0.257246 + + + 0.777634 + -0.146646 + 0.611376 + + GeometryNode3D_Node_137 + GeometryNode3D_Node_123 + + + Zentralsteckdose-Multi-branchable83/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_136 + + 0.830617 + -0.007859 + 0.556789 + + + 0.768433 + -0.070499 + 0.636035 + + GeometryNode3D_Node_138 + GeometryNode3D_Node_137 + + + Zentralsteckdose-Multi-branchable84/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_137 + + 0.942343 + 0.309327 + -0.127697 + + + 0.967816 + 0.197281 + 0.156244 + + GeometryNode3D_Node_139 + GeometryNode3D_Node_137 + + + SBBR_li-Multi-branchable85/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_138 + + 0.578197 + -0.07628 + -0.812324 + + + 0.584375 + -0.139357 + -0.799429 + + GeometryNode3D_Node_140 + GeometryNode3D_Node_123 + + + SBBR_li-Multi-branchable86/ElecRouteBody.1/Flexible Curve.2 + TopologySegment_Segment_139 + + 0.584375 + -0.139357 + -0.799429 + + + -1.0 + -0.0 + -0.0 + + GeometryNode3D_Node_141 + GeometryNode3D_Node_140 + + + SBBR_li-Multi-branchable87/ElecRouteBody.1/Flexible Curve.4 + TopologySegment_Segment_140 + + -0.813295 + -0.408845 + 0.414001 + + + 1.0 + 0.0 + -0.0 + + GeometryNode3D_Node_142 + GeometryNode3D_Node_140 + + + Koppelstellen_Motor_Generator_Starteranschlusss-Multi-branchable88/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_141 + + 0.256522 + 0.966444 + -0.013508 + + + 0.23785 + 0.8961 + 0.374742 + + GeometryNode3D_Node_128 + GeometryNode3D_Node_123 + + + Koppelstellen_Motor_Generator_Starteranschlusss-Multi-branchable89/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_142 + + 0.25261 + 0.951706 + -0.174482 + + + 0.250235 + 0.94276 + 0.220422 + + GeometryNode3D_Node_143 + GeometryNode3D_Node_128 + + + Koppelstellen_Motor_Generator_Starteranschlusss-Multi-branchable90/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_143 + + 0.526212 + 0.742131 + 0.415142 + + + -0.141596 + 0.989185 + 0.038252 + + GeometryNode3D_Node_144 + GeometryNode3D_Node_143 + + + Koppelstellen_Motor_Generator_Starteranschlusss-Multi-branchable91/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_144 + + 0.77702 + 0.537112 + -0.328253 + + + -0.0 + 1.0 + 0.0 + + GeometryNode3D_Node_145 + GeometryNode3D_Node_128 + + + Koppelstellen_Motor_Generator_Starteranschlusss-Multi-branchable92/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_145 + + 0.488561 + 0.236989 + 0.839729 + + + 0.368048 + 0.929807 + 0.0 + + GeometryNode3D_Node_146 + GeometryNode3D_Node_143 + + + Koppelstellen_Motor_Generator_Starteranschlusss-Multi-branchable93/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_146 + + -0.141596 + 0.989185 + 0.038252 + + + 0.0 + -0.0 + -1.0 + + GeometryNode3D_Node_147 + GeometryNode3D_Node_144 + + + Part31/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_147 + + -0.256522 + -0.966444 + 0.013508 + + + -0.256522 + -0.966444 + 0.013508 + + GeometryNode3D_Node_148 + GeometryNode3D_Node_123 + + + Part32/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_148 + + 0.224382 + 0.842068 + -0.490483 + + + 0.219317 + 0.822754 + -0.524381 + + GeometryNode3D_Node_149 + GeometryNode3D_Node_123 + + + Heck-Multi-branchable95/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_149 + + -0.318054 + 0.028797 + -0.947635 + + + -0.6587 + 0.059639 + -0.750038 + + GeometryNode3D_Node_123 + GeometryNode3D_Node_150 + + + Heck-Multi-branchable96/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_150 + + -0.314444 + 0.925412 + -0.211512 + + + 0.382161 + 0.863959 + 0.327913 + + GeometryNode3D_Node_151 + GeometryNode3D_Node_150 + + + Heck-Multi-branchable96.1/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_151 + + 0.116639 + 0.972628 + -0.200971 + + + 0.694411 + 0.257431 + -0.671955 + + GeometryNode3D_Node_152 + GeometryNode3D_Node_151 + + + Heck-Multi-branchable97/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_152 + + -0.993311 + 0.112848 + -0.024474 + + + -0.707107 + -0.0 + -0.707107 + + GeometryNode3D_Node_153 + GeometryNode3D_Node_152 + + + Heck-Multi-branchable99/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_153 + + 0.397312 + -0.326993 + 0.857449 + + + 0.109945 + -0.090486 + 0.98981 + + GeometryNode3D_Node_154 + GeometryNode3D_Node_150 + + + Heck-Multi-branchable100/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_154 + + 0.145585 + -0.305002 + 0.941158 + + + -0.786377 + 0.013074 + 0.617608 + + GeometryNode3D_Node_155 + GeometryNode3D_Node_154 + + + Heck-Multi-branchable101/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_155 + + 0.414374 + 0.288925 + 0.863028 + + + -0.788011 + -0.0 + 0.615661 + + GeometryNode3D_Node_156 + GeometryNode3D_Node_150 + + + Heck-Multi-branchable106/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_156 + + 0.382161 + 0.863959 + 0.327913 + + + 1.0 + -0.0 + -0.0 + + GeometryNode3D_Node_157 + GeometryNode3D_Node_151 + + + Part34/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_157 + + -0.687338 + -0.262568 + 0.677218 + + + -0.694411 + -0.257431 + 0.671955 + + GeometryNode3D_Node_158 + GeometryNode3D_Node_152 + + + Heck-Multi-branchable141/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_158 + + 0.382161 + 0.863959 + 0.327913 + + + -0.98732 + 0.0 + 0.158741 + + GeometryNode3D_Node_159 + GeometryNode3D_Node_151 + + + SBBR_links-Multi-branchable98/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_159 + + -0.373819 + 0.072049 + -0.924699 + + + -1.0 + -0.0 + -0.0 + + GeometryNode3D_Node_160 + GeometryNode3D_Node_152 + + + V_TAB_VWK_120__GEO_ELX_001_____MOD_LTGS_KAEFER_T1_Fahrwerk/ElecRouteBody.1/Split.1 + TopologySegment_Segment_160 + + -0.095403 + 0.956283 + -0.276443 + + + 0.918295 + -0.395897 + -0.0 + + GeometryNode3D_Node_162 + GeometryNode3D_Node_161 + + + V_TAB_VWK_120__GEO_ELX_001_____MOD_LTGS_KAEFER_T1_Fahrwerk/ElecRouteBody.2/Flexible Curve.2 + TopologySegment_Segment_161 + + 0.095403 + -0.956283 + 0.276443 + + + 0.0 + -0.998358 + -0.057278 + + GeometryNode3D_Node_163 + GeometryNode3D_Node_161 + + + V_TAB_VWK_120__GEO_ELX_001_____MOD_LTGS_KAEFER_T1_Fahrwerk/ElecRouteBody.3/Flexible Curve.3 + TopologySegment_Segment_162 + + 0.095403 + -0.956283 + 0.276443 + + + -0.0 + -0.980803 + 0.195002 + + GeometryNode3D_Node_164 + GeometryNode3D_Node_161 + + + V_TAB_VWK_120__GEO_ELX_001_____MOD_LTGS_KAEFER_T1_Fahrwerk/ElecRouteBody.1/Split.2 + TopologySegment_Segment_163 + + 0.918295 + -0.395897 + -0.0 + + + 0.998669 + 0.014176 + -0.049586 + + GeometryNode3D_Node_117 + GeometryNode3D_Node_162 + + + V_TAB_VWK_120__GEO_ELX_001_____MOD_LTGS_KAEFER_T1_Fahrwerk/ElecRouteBody.4/Flexible Curve.4 + TopologySegment_Segment_164 + + -0.871228 + 0.486137 + -0.068063 + + + -0.762713 + -0.494843 + 0.416412 + + GeometryNode3D_Node_165 + GeometryNode3D_Node_162 + + + V_TAB_VWK_120__GEO_ELX_001_____MOD_LTGS_KAEFER_T1_Fahrwerk/ElecRouteBody.5/Flexible Curve.5 + TopologySegment_Segment_165 + + -0.762713 + -0.494843 + 0.416412 + + + -0.380699 + -0.0 + 0.924699 + + GeometryNode3D_Node_166 + GeometryNode3D_Node_165 + + + V_TAB_VWK_120__GEO_ELX_001_____MOD_LTGS_KAEFER_T1_Fahrwerk/ElecRouteBody.6/Flexible Curve.6 + TopologySegment_Segment_166 + + -0.762713 + -0.494843 + 0.416412 + + + -0.441818 + -0.0 + 0.897105 + + GeometryNode3D_Node_167 + GeometryNode3D_Node_165 + + + V_TAB_VWK_120__GEO_ELX_001_____MOD_LTGS_KAEFER_T1_Fahrwerk/ElecRouteBody.7/Split.3 + TopologySegment_Segment_167 + + -0.96372 + 0.202444 + -0.173957 + + + -0.97508 + 0.163482 + 0.149973 + + GeometryNode3D_Node_168 + GeometryNode3D_Node_11 + + + V_TAB_VWK_120__GEO_ELX_001_____MOD_LTGS_KAEFER_T1_Fahrwerk/ElecRouteBody.8/Flexible Curve.8 + TopologySegment_Segment_168 + + -0.661434 + 0.697462 + 0.275777 + + + -0.0 + 0.969596 + 0.244712 + + GeometryNode3D_Node_170 + GeometryNode3D_Node_169 + + + V_TAB_VWK_120__GEO_ELX_001_____MOD_LTGS_KAEFER_T1_Fahrwerk/ElecRouteBody.9/Flexible Curve.9 + TopologySegment_Segment_169 + + -0.661434 + 0.697462 + 0.275777 + + + -0.0 + 0.999909 + 0.013463 + + GeometryNode3D_Node_171 + GeometryNode3D_Node_169 + + + V_TAB_VWK_120__GEO_ELX_001_____MOD_LTGS_KAEFER_T1_Fahrwerk/ElecRouteBody.7/Split.4 + TopologySegment_Segment_170 + + -0.97508 + 0.163482 + 0.149973 + + + -0.661434 + 0.697462 + 0.275777 + + GeometryNode3D_Node_169 + GeometryNode3D_Node_168 + + + V_TAB_VWK_120__GEO_ELX_001_____MOD_LTGS_KAEFER_T1_Fahrwerk/ElecRouteBody.10/Flexible Curve.10 + TopologySegment_Segment_171 + + -0.97508 + 0.163482 + 0.149973 + + + -0.840349 + 0.318425 + 0.438655 + + GeometryNode3D_Node_172 + GeometryNode3D_Node_168 + + + V_TAB_VWK_120__GEO_ELX_001_____MOD_LTGS_KAEFER_T1_Fahrwerk/ElecRouteBody.11/Flexible Curve.11 + TopologySegment_Segment_172 + + -0.840349 + 0.318425 + 0.438655 + + + 0.009363 + 0.0 + 0.999956 + + GeometryNode3D_Node_173 + GeometryNode3D_Node_172 + + + V_TAB_VWK_120__GEO_ELX_001_____MOD_LTGS_KAEFER_T1_Fahrwerk/ElecRouteBody.12/Flexible Curve.12 + TopologySegment_Segment_173 + + -0.840349 + 0.318425 + 0.438655 + + + 0.021358 + -0.0 + 0.999772 + + GeometryNode3D_Node_174 + GeometryNode3D_Node_172 + + + V_TAB_VWK_120__GEO_ELX_001_____MOD_LTGS_KAEFER_T1_GESAMTVERLEGUNG-Multi-branchable137/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_174 + + 0.09954 + 0.971776 + 0.213876 + + + 0.998756 + -0.00939 + 0.048963 + + GeometryNode3D_Node_175 + GeometryNode3D_Node_122 + + + V_TAB_VWK_120__GEO_ELX_001_____MOD_LTGS_KAEFER_T1_GESAMTVERLEGUNG-Multi-branchable137/ElecRouteBody.2/Flexible Curve.2 + TopologySegment_Segment_175 + + 0.998756 + -0.00939 + 0.048963 + + + 0.0 + -0.998087 + 0.061831 + + GeometryNode3D_Node_176 + GeometryNode3D_Node_175 + + + V_TAB_VWK_120__GEO_ELX_001_____MOD_LTGS_KAEFER_T1_GESAMTVERLEGUNG-Multi-branchable137/ElecRouteBody.3/Flexible Curve.3 + TopologySegment_Segment_176 + + 0.998756 + -0.00939 + 0.048963 + + + 0.0 + -0.186552 + 0.982445 + + GeometryNode3D_Node_177 + GeometryNode3D_Node_175 + + + V_TAB_VWK_120__GEO_ELX_001_____MOD_LTGS_KAEFER_T1_GESAMTVERLEGUNG-Multi-branchable137/ElecRouteBody.4/Flexible Curve.4 + TopologySegment_Segment_177 + + 0.998756 + -0.00939 + 0.048963 + + + 0.995635 + -0.0 + 0.093334 + + GeometryNode3D_Node_178 + GeometryNode3D_Node_175 + + + V_TAB_VWK_120__GEO_ELX_001_____MOD_LTGS_KAEFER_T1_GESAMTVERLEGUNG-Multi-branchable137/ElecRouteBody.5/Flexible Curve.5 + TopologySegment_Segment_178 + + 0.998756 + -0.00939 + 0.048963 + + + 0.999994 + -0.0 + 0.003582 + + GeometryNode3D_Node_179 + GeometryNode3D_Node_175 + + + V_TAB_VWK_120__GEO_ELX_001_____MOD_LTGS_KAEFER_T1_GESAMTVERLEGUNG-Multi-branchable137/ElecRouteBody.6/Flexible Curve.6 + TopologySegment_Segment_179 + + -0.369419 + 0.870482 + 0.325254 + + + 0.991592 + -0.076809 + 0.104141 + + GeometryNode3D_Node_180 + GeometryNode3D_Node_130 + + + V_TAB_VWK_120__GEO_ELX_001_____MOD_LTGS_KAEFER_T1_GESAMTVERLEGUNG-Multi-branchable137/ElecRouteBody.7/Flexible Curve.7 + TopologySegment_Segment_180 + + 0.806271 + 0.032658 + 0.590644 + + + 0.009174 + -0.202018 + 0.979339 + + GeometryNode3D_Node_181 + GeometryNode3D_Node_180 + + + V_TAB_VWK_120__GEO_ELX_001_____MOD_LTGS_KAEFER_T1_GESAMTVERLEGUNG-Multi-branchable137/ElecRouteBody.8/Flexible Curve.8 + TopologySegment_Segment_181 + + 0.991592 + -0.076809 + 0.104141 + + + 0.998851 + 0.0 + 0.047928 + + GeometryNode3D_Node_182 + GeometryNode3D_Node_180 + + + V_TAB_VWK_120__GEO_ELX_001_____MOD_LTGS_KAEFER_T1_GESAMTVERLEGUNG-Multi-branchable137/ElecRouteBody.9/Flexible Curve.9 + TopologySegment_Segment_182 + + 0.991592 + -0.076809 + 0.104141 + + + 0.999955 + 0.0 + -0.009475 + + GeometryNode3D_Node_183 + GeometryNode3D_Node_180 + + + V_TAB_VWK_120__GEO_ELX_001_____MOD_LTGS_KAEFER_T1_GESAMTVERLEGUNG-Multi-branchable137/ElecRouteBody.10/Flexible Curve.10 + TopologySegment_Segment_183 + + 0.991592 + -0.076809 + 0.104141 + + + 0.0 + 0.999958 + -0.009167 + + GeometryNode3D_Node_184 + GeometryNode3D_Node_180 + + RS-TAB016120 @@ -27673,7 +45192,7 @@ This is not intended for productive use and is not complete! XM.J1.1 - + De Blinkrelais @@ -27681,7 +45200,7 @@ This is not intended for productive use and is not complete! XA.S40.1 - + De Sicherung für Rückfahrleuchten @@ -27689,7 +45208,7 @@ This is not intended for productive use and is not complete! XA.SA.1 - + De Sicherungshalter A @@ -27697,7 +45216,7 @@ This is not intended for productive use and is not complete! XA.S41.1 - + De Sicherung für beheizbare Heckscheibe @@ -27705,7 +45224,7 @@ This is not intended for productive use and is not complete! XA.J9.1 - + De Relais für beheizbare Heckscheibe @@ -27713,7 +45232,7 @@ This is not intended for productive use and is not complete! R_WISG_R9 - + De Massepunkt hinter Schalttafel Mitte @@ -27721,7 +45240,7 @@ This is not intended for productive use and is not complete! SI_SIA_1_F1 - + De Zündanlassschalter @@ -27729,7 +45248,7 @@ This is not intended for productive use and is not complete! SI_SITR_F1 - + De Schlussleuchte links @@ -27737,7 +45256,7 @@ This is not intended for productive use and is not complete! SI_SITR_F2 - + De Scheinwerfer vorn rechts @@ -27745,7 +45264,7 @@ This is not intended for productive use and is not complete! SI_SITR_F3 - + De Scheinwerfer vorn links @@ -27753,7 +45272,7 @@ This is not intended for productive use and is not complete! SI_SITR_F4 - + De Scheinwerfer vorn rechts @@ -27761,7 +45280,7 @@ This is not intended for productive use and is not complete! SI_SITR_F5 - + De Scheinwerfer vorn links @@ -27769,7 +45288,7 @@ This is not intended for productive use and is not complete! SI_SITR_F6 - + De Scheinwerfer vorn rechts @@ -27777,7 +45296,7 @@ This is not intended for productive use and is not complete! SI_SITR_F8 - + De Warnlichtschalter @@ -27785,7 +45304,7 @@ This is not intended for productive use and is not complete! SI_SITR_F9 - + De Lenkstockkombinationsschalter @@ -27793,7 +45312,7 @@ This is not intended for productive use and is not complete! SI_SITR_F10 - + De Schalter für beheizbare Heckscheibe @@ -27801,7 +45320,7 @@ This is not intended for productive use and is not complete! SI_SITR_F11 - + De Schalter für elektrische Einbauten @@ -27809,7 +45328,7 @@ This is not intended for productive use and is not complete! SI_SITR_F12 - + De Kontrollleuchte für Öldruck @@ -27817,7 +45336,7 @@ This is not intended for productive use and is not complete! SI_SITR_F23 - + De Sicherungshalter A @@ -27825,7 +45344,7 @@ This is not intended for productive use and is not complete! SI_SITR_F24 - + De Sicherungshalter A @@ -27833,7 +45352,7 @@ This is not intended for productive use and is not complete! SI_SITR_F25 - + De Sicherungshalter A @@ -27841,7 +45360,7 @@ This is not intended for productive use and is not complete! SI_SITR_F26 - + De Sicherungshalter A @@ -27849,7 +45368,7 @@ This is not intended for productive use and is not complete! SI_SITR_F27 - + De Sicherungshalter A @@ -27857,7 +45376,7 @@ This is not intended for productive use and is not complete! SI_SITR_F28 - + De Sicherungshalter A @@ -27865,7 +45384,7 @@ This is not intended for productive use and is not complete! SI_SITR_F31.1 - + De Sicherungshalter A @@ -27873,7 +45392,7 @@ This is not intended for productive use and is not complete! SI_SITR_F31.2 - + De Sicherungshalter A @@ -27913,7 +45432,7 @@ This is not intended for productive use and is not complete! XA.H1.1 - + De Signalhorn und Doppeltonhorn @@ -27937,7 +45456,7 @@ This is not intended for productive use and is not complete! XA.M5.1 - + De Lampe für Blinklicht vorn links @@ -27961,7 +45480,7 @@ This is not intended for productive use and is not complete! XA.MX1.1 - + De Scheinwerfer vorn links @@ -28009,7 +45528,7 @@ This is not intended for productive use and is not complete! B630 - + De Plusverbindung (Blinkleuchte links) im Hauptleitungsstrang @@ -28029,7 +45548,7 @@ This is not intended for productive use and is not complete! XA.M7.1 - + De Lampe für Blinklicht vorn rechts @@ -28053,7 +45572,7 @@ This is not intended for productive use and is not complete! XA.MX2.1 - + De Scheinwerfer vorn rechts @@ -28117,7 +45636,7 @@ This is not intended for productive use and is not complete! B631 - + De Plusverbindung (Blinkleuchte rechts) im Hauptleitungsstrang @@ -28153,7 +45672,7 @@ This is not intended for productive use and is not complete! XA.G.1 - + De Geber für Kraftstoffvorratsanzeige @@ -28177,7 +45696,7 @@ This is not intended for productive use and is not complete! XA.V.1 - + De Scheibenwischermotor @@ -28213,7 +45732,7 @@ This is not intended for productive use and is not complete! 269 - + De Masseverbindung (Gebermasse) 1 im Schalttafelleitungsstrang @@ -28233,7 +45752,7 @@ This is not intended for productive use and is not complete! B336 - + De Verbindung 2 (54) im Hauptleitungsstrang @@ -28253,7 +45772,7 @@ This is not intended for productive use and is not complete! A50 - + De Plusverbindung (30as) im Schalttafelleitungsstrang @@ -28273,7 +45792,7 @@ This is not intended for productive use and is not complete! B272 - + De Plusverbindung (30) im Hauptleitungsstrang @@ -28293,7 +45812,7 @@ This is not intended for productive use and is not complete! 370 - + De Masseverbindung 5 im Hauptleitungsstrang @@ -28313,7 +45832,7 @@ This is not intended for productive use and is not complete! XA.V5.1 - + De Scheibenwaschpumpe @@ -28385,7 +45904,7 @@ This is not intended for productive use and is not complete! XA.F2.1 - + De Türkontaktschalter Fahrerseite @@ -28409,7 +45928,7 @@ This is not intended for productive use and is not complete! XA.E595.1 - + De Lenkstockkombinationsschalter @@ -28473,7 +45992,7 @@ This is not intended for productive use and is not complete! XA.E.1 - + De Schalter für Scheibenwischer @@ -28521,7 +46040,7 @@ This is not intended for productive use and is not complete! XA.H.1 - + De Signalhornbetätigung @@ -28545,7 +46064,7 @@ This is not intended for productive use and is not complete! XA.K3.1 - + De Kontrollleuchte für Öldruck @@ -28569,7 +46088,7 @@ This is not intended for productive use and is not complete! XA.K1.1 - + De Kontrollleuchte für Fernlicht @@ -28593,7 +46112,7 @@ This is not intended for productive use and is not complete! XA.K5.1 - + De Kontrollleuchte für Blinklicht @@ -28617,7 +46136,7 @@ This is not intended for productive use and is not complete! XA.K2.1 - + De Kontrollleuchte für Generator @@ -28641,7 +46160,7 @@ This is not intended for productive use and is not complete! XA.L10.1 - + De Lampe für Schalttafeleinsatzbeleuchtung @@ -28665,7 +46184,7 @@ This is not intended for productive use and is not complete! XA.L10.2 - + De Lampe für Schalttafeleinsatzbeleuchtung @@ -28689,7 +46208,7 @@ This is not intended for productive use and is not complete! XA.K10.1 - + De Kontrollleuchte für beheizbare Heckscheibe @@ -28713,7 +46232,7 @@ This is not intended for productive use and is not complete! XA.G1.1 - + De Kraftstoffvorratsanzeige @@ -28741,7 +46260,7 @@ This is not intended for productive use and is not complete! XA.E1.1 - + De Lichtschalter @@ -28817,7 +46336,7 @@ This is not intended for productive use and is not complete! XA.E15.1 - + De Schalter für beheizbare Heckscheibe @@ -28841,7 +46360,7 @@ This is not intended for productive use and is not complete! XA.E3.1 - + De Warnlichtschalter @@ -28885,7 +46404,7 @@ This is not intended for productive use and is not complete! XA.E9.1 - + De Schalter für Frischluftgebläse @@ -28925,7 +46444,7 @@ This is not intended for productive use and is not complete! XA.D.1 - + De Zündanlassschalter [Zusatzkommentar D] @@ -28969,7 +46488,7 @@ This is not intended for productive use and is not complete! XA.F3.1 - + De Türkontaktschalter Beifahrerseite @@ -29025,7 +46544,7 @@ This is not intended for productive use and is not complete! B169 - + De Plusverbindung 1 (30) im Leitungsstrang Innenraum [Zusatzkommentar_B169] @@ -29045,7 +46564,7 @@ This is not intended for productive use and is not complete! 368 - + De Masseverbindung 3 im Hauptleitungsstrang @@ -29065,7 +46584,7 @@ This is not intended for productive use and is not complete! A3 - + De Plusverbindung (58) im Schalttafelleitungsstrang @@ -29085,7 +46604,7 @@ This is not intended for productive use and is not complete! B279 - + De Plusverbindung 3 (15a) im Hauptleitungsstrang @@ -29105,7 +46624,7 @@ This is not intended for productive use and is not complete! A6 - + De Plusverbindung (Blinkleuchte links) im Schalttafelleitungsstrang @@ -29125,7 +46644,7 @@ This is not intended for productive use and is not complete! A5 - + De Plusverbindung (Blinkleuchte rechts) im Schalttafelleitungsstrang @@ -29145,7 +46664,7 @@ This is not intended for productive use and is not complete! B278 - + De Plusverbindung 2 (15a) im Hauptleitungsstrang @@ -29165,7 +46684,7 @@ This is not intended for productive use and is not complete! 366 - + De Masseverbindung 1 im Hauptleitungsstrang @@ -29185,7 +46704,7 @@ This is not intended for productive use and is not complete! A95 - + De Verbindung 1 (56a) im Schalttafelleitungsstrang @@ -29205,7 +46724,7 @@ This is not intended for productive use and is not complete! 278 - + De Masseverbindung 4 im Leitungsstrang Innenraum @@ -29225,7 +46744,7 @@ This is not intended for productive use and is not complete! 371 - + De Masseverbindung 6 im Hauptleitungsstrang @@ -29245,7 +46764,7 @@ This is not intended for productive use and is not complete! B583 - + De Plusverbindung (58) im Leitungsstrang Innenraum @@ -29265,7 +46784,7 @@ This is not intended for productive use and is not complete! B642 - + De Plusverbindung (58) im Hauptleitungsstrang @@ -29285,7 +46804,7 @@ This is not intended for productive use and is not complete! B456 - + De Verbindung (56b) im Hauptleitungsstrang @@ -29305,7 +46824,7 @@ This is not intended for productive use and is not complete! B138 - + De Plusverbindung (X) im Leitungsstrang Innenraum @@ -29325,7 +46844,7 @@ This is not intended for productive use and is not complete! B315 - + De Plusverbindung 1 (30a) im Hauptleitungsstrang @@ -29345,7 +46864,7 @@ This is not intended for productive use and is not complete! B643 - + De Verbindung 2 (56a) im Hauptleitungsstrang @@ -29365,7 +46884,7 @@ This is not intended for productive use and is not complete! B277 - + De Plusverbindung 1 (15a) im Hauptleitungsstrang @@ -29385,7 +46904,7 @@ This is not intended for productive use and is not complete! B728 - + De Verbindung (49a) im Hauptleitungsstrang @@ -29405,7 +46924,7 @@ This is not intended for productive use and is not complete! B174 - + De Plusverbindung 3 (X) im Leitungsstrang Innenraum @@ -29473,7 +46992,7 @@ This is not intended for productive use and is not complete! XA.K7.1 - + De Kontrollleuchte für Zweikreisanlage und Handbremsanlage @@ -29529,7 +47048,7 @@ This is not intended for productive use and is not complete! XA.J415.1 - + De Tuner für Navigationssystem, TV @@ -29553,7 +47072,7 @@ This is not intended for productive use and is not complete! XD.J415.1 - + De Tuner für Navigationssystem, TV @@ -29585,7 +47104,7 @@ This is not intended for productive use and is not complete! XE.J415.1 - + De Tuner für Navigationssystem, TV @@ -29609,7 +47128,7 @@ This is not intended for productive use and is not complete! XB.R161.1 - + De DVD-Wechsler @@ -29633,7 +47152,7 @@ This is not intended for productive use and is not complete! XD.R161.1 - + De DVD-Wechsler @@ -29657,7 +47176,7 @@ This is not intended for productive use and is not complete! XA.E279.1 - + De TestkommentarSchalterfürelektrischeEinbautenextralaaaaaaaaaaaannnnnnnnngggg @@ -29685,7 +47204,7 @@ This is not intended for productive use and is not complete! XA.V2.1 - + De Frischluftgebläse @@ -29713,7 +47232,7 @@ This is not intended for productive use and is not complete! XA.F.1 - + De Bremslichtschalter @@ -29745,7 +47264,7 @@ This is not intended for productive use and is not complete! XA.F.2 - + De Bremslichtschalter @@ -29777,7 +47296,7 @@ This is not intended for productive use and is not complete! XA.F4.1 - + De Schalter für Rückfahrleuchten @@ -29801,7 +47320,7 @@ This is not intended for productive use and is not complete! XA.F9.1 - + De Schalter für Handbremskontrolle @@ -29825,7 +47344,7 @@ This is not intended for productive use and is not complete! B444 - + De Verbindung 1 (Diagnose) im Hauptleitungsstrang @@ -29845,7 +47364,7 @@ This is not intended for productive use and is not complete! XA.W1.1.Dach - + De Innenleuchte vorn @@ -29885,7 +47404,7 @@ This is not intended for productive use and is not complete! XA.W1.1.BSaeule - + De Innenleuchte vorn @@ -29925,7 +47444,7 @@ This is not intended for productive use and is not complete! B173 - + De Plusverbindung 2 (X) im Leitungsstrang Innenraum [Zusatzkommentar_B173] @@ -29945,7 +47464,7 @@ This is not intended for productive use and is not complete! B298 - + De Plusverbindung 2 (30) im Hauptleitungsstrang @@ -29965,7 +47484,7 @@ This is not intended for productive use and is not complete! B273 - + De Plusverbindung (15) im Hauptleitungsstrang @@ -29985,7 +47504,7 @@ This is not intended for productive use and is not complete! TCPL.1B1 - + De Koppelstelle an der Schalttafel links @@ -30069,7 +47588,7 @@ This is not intended for productive use and is not complete! TCPL.1C1 - + De Koppelstelle an der Schalttafel links [Zusatzkommentar TCPL.1C1] @@ -30153,7 +47672,7 @@ This is not intended for productive use and is not complete! TCPL.1D1 - + De Koppelstelle an der Schalttafel links @@ -30237,7 +47756,7 @@ This is not intended for productive use and is not complete! B465 - + De Verbindung 1 im Hauptleitungsstrang @@ -30257,7 +47776,7 @@ This is not intended for productive use and is not complete! B466 - + De Verbindung 2 im Hauptleitungsstrang @@ -30277,7 +47796,7 @@ This is not intended for productive use and is not complete! XB.R235.1 - + De Impedanzwandler für Scheibenantenne hinten links @@ -30309,7 +47828,7 @@ This is not intended for productive use and is not complete! 367 - + De Masseverbindung 2 im Hauptleitungsstrang @@ -30409,7 +47928,7 @@ This is not intended for productive use and is not complete! XA.J533.1 - + De Diagnose-Interface für Datenbus @@ -30473,7 +47992,7 @@ This is not intended for productive use and is not complete! XB.J533.1 - + De Diagnose-Interface für Datenbus @@ -30497,7 +48016,7 @@ This is not intended for productive use and is not complete! XA.MX3.1_XA.MX4.1 - + De Schlussleuchte links [Zusatzkommentar MX3] @@ -30553,7 +48072,7 @@ This is not intended for productive use and is not complete! TMR.1A1 - + De Koppelstelle im Motorraum rechts @@ -30593,7 +48112,7 @@ This is not intended for productive use and is not complete! TMM.1A1 - + De Koppelstelle im Motorraum Mitte @@ -30625,7 +48144,7 @@ This is not intended for productive use and is not complete! B335 - + De Verbindung 1 (54) im Hauptleitungsstrang @@ -30645,7 +48164,7 @@ This is not intended for productive use and is not complete! W71 - + De Verbindung (Rückfahrlicht) im Leitungsstrang hinten @@ -30697,7 +48216,7 @@ This is not intended for productive use and is not complete! XA.X.1 - + De Kennzeichenleuchte @@ -30721,7 +48240,7 @@ This is not intended for productive use and is not complete! B726 - + De Plusverbindung 2 (58) im Hauptleitungsstrang @@ -30741,7 +48260,7 @@ This is not intended for productive use and is not complete! XA.Z1.1 - + De beheizbare Heckscheibe @@ -30761,7 +48280,7 @@ This is not intended for productive use and is not complete! XB.Z1.1 - + De beheizbare Heckscheibe @@ -30781,7 +48300,7 @@ This is not intended for productive use and is not complete! XA.F3.2 - + De Türkontaktschalter Beifahrerseite @@ -30817,7 +48336,7 @@ This is not intended for productive use and is not complete! XA.N336.1 - + De TestkommentarVentil für Dämpfungsverstellung vorn linksaaaaaaaaaaaannnnnnnnngggg @@ -30842,7 +48361,7 @@ This is not intended for productive use and is not complete! XA.N337.1 - + De Ventil für Dämpfungsverstellung vorn rechts @@ -30867,7 +48386,7 @@ This is not intended for productive use and is not complete! XA.G35.1 - + De Geber für Bremsbelagverschleiß vorn rechts @@ -30892,7 +48411,7 @@ This is not intended for productive use and is not complete! XA.G45.1 - + De Drehzahlfühler vorn rechts @@ -30917,7 +48436,7 @@ This is not intended for productive use and is not complete! XA.G47.1 - + De Drehzahlfühler vorn links @@ -30942,7 +48461,7 @@ This is not intended for productive use and is not complete! XA.G34.1 - + De Geber für Bremsbelagverschleiß vorn links @@ -30983,7 +48502,7 @@ This is not intended for productive use and is not complete! XA.OLE1.1 - + De Offenes Leitungsende 1 @@ -31003,7 +48522,7 @@ This is not intended for productive use and is not complete! XA.G46.1 - + De Drehzahlfühler hinten links @@ -31028,7 +48547,7 @@ This is not intended for productive use and is not complete! XA.G233.1 - + De Leuchtweitenregelungsgeber 1 @@ -31061,7 +48580,7 @@ This is not intended for productive use and is not complete! XA.N338.1 - + De Ventil für Dämpfungsverstellung hinten links @@ -31086,7 +48605,7 @@ This is not intended for productive use and is not complete! XA.V282.1 - + De Feststellmotor links @@ -31111,7 +48630,7 @@ This is not intended for productive use and is not complete! XA.N339.1 - + De Ventil für Dämpfungsverstellung hinten rechts @@ -31136,7 +48655,7 @@ This is not intended for productive use and is not complete! XA.V283.1 - + De Feststellmotor rechts @@ -31161,7 +48680,7 @@ This is not intended for productive use and is not complete! XA.G44.1 - + De Drehzahlfühler hinten rechts @@ -31186,7 +48705,7 @@ This is not intended for productive use and is not complete! XA.G234.1 - + De Leuchtweitenregelungsgeber 2 @@ -38038,7 +55557,7 @@ This is not intended for productive use and is not complete! XA.43.1 - + De Massepunkt Säule A rechts unten @@ -38046,7 +55565,7 @@ This is not intended for productive use and is not complete! XA.44.1 - + De Massepunkt Säule A links unten @@ -38054,7 +55573,7 @@ This is not intended for productive use and is not complete! XA.45.1 - + De Massepunkt hinter Schalttafel Mitte @@ -38062,7 +55581,7 @@ This is not intended for productive use and is not complete! XA.655.1 - + De Massepunkt am Scheinwerfer links @@ -38070,7 +55589,7 @@ This is not intended for productive use and is not complete! XA.656.1 - + De Massepunkt am Scheinwerfer rechts @@ -38078,7 +55597,7 @@ This is not intended for productive use and is not complete! XA.657.1 - + De Massepunkt 1 Nähe Heckscheibe links @@ -38086,7 +55605,7 @@ This is not intended for productive use and is not complete! XA.729.1 - + De Massepunkt am Radhaus hinten links @@ -38094,7 +55613,7 @@ This is not intended for productive use and is not complete! XA.730.1 - + De Massepunkt 1 am Radhaus hinten rechts @@ -38102,7 +55621,7 @@ This is not intended for productive use and is not complete! XA.A.1.REF - + De Batterie @@ -38110,7 +55629,7 @@ This is not intended for productive use and is not complete! XA.B.1 - + De Anlasser @@ -38118,7 +55637,7 @@ This is not intended for productive use and is not complete! XB.44.1_113011 - + De Massepunkt Säule A links unten @@ -38126,7 +55645,7 @@ This is not intended for productive use and is not complete! XB.44.1_113003 - + De Massepunkt Säule A links unten @@ -38134,7 +55653,7 @@ This is not intended for productive use and is not complete! XB.45.1 - + De Massepunkt hinter Schalttafel Mitte @@ -38142,7 +55661,7 @@ This is not intended for productive use and is not complete! XB.655.1 - + De Massepunkt am Scheinwerfer links @@ -38150,7 +55669,7 @@ This is not intended for productive use and is not complete! XB.656.1 - + De Massepunkt am Scheinwerfer rechts @@ -38158,7 +55677,7 @@ This is not intended for productive use and is not complete! XB.657.1 - + De Massepunkt 1 Nähe Heckscheibe links @@ -38166,7 +55685,7 @@ This is not intended for productive use and is not complete! XB.730.1 - + De Massepunkt 1 am Radhaus hinten rechts @@ -38174,7 +55693,7 @@ This is not intended for productive use and is not complete! XB.A.1.REF - + De Batterie @@ -38182,7 +55701,7 @@ This is not intended for productive use and is not complete! XC.45.1 - + De Massepunkt hinter Schalttafel Mitte @@ -38190,7 +55709,7 @@ This is not intended for productive use and is not complete! XD.45.1 - + De Massepunkt hinter Schalttafel Mitte @@ -38198,7 +55717,7 @@ This is not intended for productive use and is not complete! XW.V5.1 - + De Scheibenwaschpumpe @@ -38206,7 +55725,7 @@ This is not intended for productive use and is not complete! XW.Z20.1 - + De Heizwiderstand für Spritzdüse links @@ -43845,7 +61364,7 @@ This is not intended for productive use and is not complete! ABS_HI_LI_1 - + De ABS Hinterrad links @@ -43858,7 +61377,7 @@ This is not intended for productive use and is not complete! ABS_HI_LI_2 - + De ABS Hinterrad links @@ -43871,7 +61390,7 @@ This is not intended for productive use and is not complete! ABS_HI_LI_3 - + De ABS Hinterrad links @@ -43884,7 +61403,7 @@ This is not intended for productive use and is not complete! ABS_HI_RE_1 - + De ABS Hinterrad rechts @@ -43897,7 +61416,7 @@ This is not intended for productive use and is not complete! ABS_HI_RE_2 - + De ABS Hinterrad rechts @@ -43910,7 +61429,7 @@ This is not intended for productive use and is not complete! ABS_VO_LI_1 - + De ABS Vorderrad links @@ -43923,7 +61442,7 @@ This is not intended for productive use and is not complete! ABS_VO_LI_2 - + De ABS Vorderrad links @@ -43936,7 +61455,7 @@ This is not intended for productive use and is not complete! ABS_VO_RE_1 - + De ABS Vorderrad rechts @@ -43949,7 +61468,7 @@ This is not intended for productive use and is not complete! ABS_VO_RE_2 - + De ABS Vorderrad rechts @@ -43962,7 +61481,7 @@ This is not intended for productive use and is not complete! ABS_VO_LI_3 - + De ABS Vorderrad links @@ -44185,11 +61704,11 @@ This is not intended for productive use and is not complete! - + De /NULL - + De Kombi-Halter A01-11xC17-4.5xE01-14    @@ -44199,11 +61718,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De VERBINDUNGSKABEL ABS-EPB-LWR-NIV @@ -44213,11 +61732,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De VERBINDUNGSKABEL ABS-EPB-LWR @@ -44227,11 +61746,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De VERBINDUNGSKABEL ABS-EPB @@ -44241,11 +61760,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De VERBINDUNGSKABEL ABS-EPB-LWR-NIV @@ -44255,11 +61774,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De VERBINDUNGSKABEL ABS-EPB @@ -44269,11 +61788,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De VERBINDUNGSKABEL ABS-BVA @@ -44283,11 +61802,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De VERBINDUNGSKABEL ABS-NIV @@ -44297,11 +61816,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De VERBINDUNGSKABEL ABS-BVA @@ -44311,11 +61830,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De VERBINDUNGSKABEL ABS-BVA @@ -44325,11 +61844,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De VERBINDUNGSKABEL ABS-NIV single core @@ -44339,11 +61858,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De Dichtung @@ -44353,11 +61872,11 @@ This is not intended for productive use and is not complete! CavityPlug - + De /NULL - + De Dichtung @@ -44367,11 +61886,11 @@ This is not intended for productive use and is not complete! CavityPlug - + De /NULL - + De Dichtung @@ -44381,11 +61900,11 @@ This is not intended for productive use and is not complete! CavityPlug - + De /NULL - + De Dichtung @@ -44395,11 +61914,11 @@ This is not intended for productive use and is not complete! CavityPlug - + De /NULL - + De Dichtung @@ -44409,11 +61928,11 @@ This is not intended for productive use and is not complete! CavityPlug - + De /NULL - + De Dichtung @@ -44423,11 +61942,11 @@ This is not intended for productive use and is not complete! CavitySeal - + De /NULL - + De Dichtung @@ -44437,11 +61956,11 @@ This is not intended for productive use and is not complete! CavitySeal - + De /NULL - + De Dichtung @@ -44451,11 +61970,11 @@ This is not intended for productive use and is not complete! CavitySeal - + De /NULL - + De Dichtung @@ -44465,11 +61984,11 @@ This is not intended for productive use and is not complete! CavitySeal - + De /NULL - + De Dichtung @@ -44479,11 +61998,11 @@ This is not intended for productive use and is not complete! CavitySeal - + De /NULL - + De Dichtung @@ -44493,11 +62012,11 @@ This is not intended for productive use and is not complete! CavitySeal - + De /NULL - + De Dichtung @@ -44507,11 +62026,11 @@ This is not intended for productive use and is not complete! CavitySeal - + De /NULL - + De Dichtung @@ -44521,11 +62040,11 @@ This is not intended for productive use and is not complete! CavitySeal - + De /NULL - + De Dichtung @@ -44535,11 +62054,11 @@ This is not intended for productive use and is not complete! CavitySeal - + De /NULL - + De Dichtung @@ -44549,11 +62068,11 @@ This is not intended for productive use and is not complete! CavitySeal - + De /NULL - + De Arbeitskontaktrelais @@ -44563,11 +62082,11 @@ This is not intended for productive use and is not complete! EEComponent - + De /NULL - + De Sicherung Form_CB15_CatE 20.0A @@ -44577,11 +62096,11 @@ This is not intended for productive use and is not complete! EEComponent - + De /NULL - + De Sicherung Type_C 7.5A @@ -44591,11 +62110,11 @@ This is not intended for productive use and is not complete! EEComponent - + De /NULL - + De Sicherung Type_C 10.0A @@ -44605,11 +62124,11 @@ This is not intended for productive use and is not complete! EEComponent - + De /NULL - + De Sicherung Type_C 20.0A @@ -44619,11 +62138,11 @@ This is not intended for productive use and is not complete! EEComponent - + De /NULL - + De Sicherung Type_C 40.0A @@ -44633,11 +62152,11 @@ This is not intended for productive use and is not complete! EEComponent - + De /NULL - + De Sicherung Type_C 25.0A @@ -44647,11 +62166,11 @@ This is not intended for productive use and is not complete! EEComponent - + De /NULL - + De Sicherung Type_E 40.0A @@ -44661,11 +62180,11 @@ This is not intended for productive use and is not complete! EEComponent - + De /NULL - + De Sicherung Type_E 40.0A @@ -44675,11 +62194,11 @@ This is not intended for productive use and is not complete! EEComponent - + De /NULL - + De Sicherung Type_E 20.0A @@ -44689,11 +62208,11 @@ This is not intended for productive use and is not complete! EEComponent - + De /NULL - + De Sicherung Type_E 30.0A @@ -44703,11 +62222,11 @@ This is not intended for productive use and is not complete! EEComponent - + De /NULL - + De Relaistraeger @@ -44717,11 +62236,11 @@ This is not intended for productive use and is not complete! EEComponent - + De /NULL - + De Sich.-Adapter @@ -44731,11 +62250,11 @@ This is not intended for productive use and is not complete! EEComponent - + De /NULL - + De Relaistraeger E Box Wasserkasten LOR @@ -44745,11 +62264,11 @@ This is not intended for productive use and is not complete! EEComponent - + De /NULL - + De Relaistraeger @@ -44759,11 +62278,11 @@ This is not intended for productive use and is not complete! EEComponent - + De /NULL - + De KABELSCHUH_A6-1.0 @@ -44773,11 +62292,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De KABELSCHUH_A6_25 @@ -44787,11 +62306,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De FLACHKONTAKTGEHAEUSE 2-POLIG 6.3MM @@ -44801,11 +62320,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De ZSB-Gehaeuse @@ -44815,11 +62334,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De RD-FLACHKONTAKTGEHAEUSE_8-POLIG_2,8MM_SCHWARZ @@ -44829,11 +62348,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De /NULL @@ -44843,11 +62362,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De KABELSCHUH A6-1 @@ -44857,11 +62376,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De FLACHKONTAKTGEHAEUSE_2-POLIG_2,8MM @@ -44871,11 +62390,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De - @@ -44885,11 +62404,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De BUCHSENGEH_2POL_SCHWARZ @@ -44899,11 +62418,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De Anschlussstueck schwarz @@ -44913,11 +62432,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De Winkelstueck schwarz @@ -44927,11 +62446,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De FLACHSTECKERGEHAEUSE_2-POLIG_1,5MM @@ -44941,11 +62460,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De FLACHKONTAKTGEHAEUSE_12POL @@ -44955,11 +62474,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De FLACHKONTAKTGEH_8POL @@ -44969,11 +62488,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De FLACHSTECKERGEHAEUSE_2-POLIG_1.5MM @@ -44983,11 +62502,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De FLACHKONTAKTGEH_3-5_2POL @@ -44997,11 +62516,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De RD_GERAETEAUFNAHME_CODI_3POL_1.5MM @@ -45011,11 +62530,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De - @@ -45025,11 +62544,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De FLACHKONTAKTGEHAEUSE_2-POLIG_FARBE_SCHWARZ @@ -45039,11 +62558,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De BUCHSENGEHAEUSE_7POL_SCHWARZ_RSM @@ -45053,11 +62572,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De - @@ -45067,11 +62586,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De ZSB-Gehaeuse @@ -45081,11 +62600,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De STECKERGEHAEUSE_6POL_SCHWARZ @@ -45095,11 +62614,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De KABELSCHUH @@ -45109,11 +62628,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De FLACHKONTAKTGEHAEUSE_2POL @@ -45123,11 +62642,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De HF_KONTAKTGEHAEUSE_NUSSBRAUN_4POL_COD_F @@ -45137,11 +62656,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De HF_KONTAKTGEHAEUSE_LAUBGRUEN_2POL_KOD_E @@ -45151,11 +62670,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De WINKELKONTAKTGEHAEUSE_2POL @@ -45165,11 +62684,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De FLACHKONTAKTGEHAEUSE_2_3-POLIG_0,63MM @@ -45179,11 +62698,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De FLACHKONTAKTGEHAEUSE_3-POLIG_4,8MM @@ -45193,11 +62712,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De FLACHKONTAKTGEHAEUSE_4-POLIG_2,8MM @@ -45207,11 +62726,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De BUCHSENGEHAEUSE_SCHWARZ_2POL @@ -45221,11 +62740,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De FLACHKONTAKTGEHAEUSE_2-POLIG_1,5MM @@ -45235,11 +62754,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De FLACHKONTAKTGEHAEUSE_6POL_1.5MM @@ -45249,11 +62768,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De BUCHSENGEHAEUSE_17POL_BR_KOD2 @@ -45263,11 +62782,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De BUCHSENGEHAEUSE_17POL_RT_KOD3 @@ -45277,11 +62796,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De BUCHSENGEHAEUSE_17POL_GN_KOD2 @@ -45291,11 +62810,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De HF_KONTAKTGEHAEUSE_CREMEWEISS_4POL_COD_B @@ -45305,11 +62824,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De KABELSCHUH @@ -45319,11 +62838,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De KABELSCHUH_A6-2.5 @@ -45333,11 +62852,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De FLACHKONTAKTGEH_SCHWARZ_12POL @@ -45347,11 +62866,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De FLACHKONTAKTGEHAEUSE @@ -45361,11 +62880,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De RD-FLACHKONTAKTGEHAEUSE 6-POLIG 2,8MM SCHWARZ @@ -45375,11 +62894,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De RD-GERAETEAUFNAHME_6POL @@ -45389,11 +62908,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De FLACHSTECKERGEHAEUSE_4-POLI4,8 9,5MM Kod I SCHWARZ @@ -45403,11 +62922,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De - @@ -45417,11 +62936,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De LEITUNGSDUMMY_D10_L40MM @@ -45431,11 +62950,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De RD-FLACHKONTAKTGEHAEUSE 2-POLIG 1,5MM @@ -45445,11 +62964,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De FKGEHAEUSE_SEK_2POL_1.5 @@ -45459,11 +62978,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De FLACHKONTAKTGEHAEUSE_4-POLIG @@ -45473,11 +62992,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De RD-FLACHKONTAKTGEHAEUSE_2POL_4.8MM @@ -45487,11 +63006,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De KABELFUEHRUNG_ADS_LL @@ -45501,11 +63020,11 @@ This is not intended for productive use and is not complete! Fixing - + De /NULL - + De KABELBINDER @@ -45515,11 +63034,11 @@ This is not intended for productive use and is not complete! Fixing - + De /NULL - + De VERSTEIFUNGSSTIFT @@ -45529,11 +63048,11 @@ This is not intended for productive use and is not complete! Fixing - + De /NULL - + De KABELBINDER M. TANNENBAUMFUSS (BIS DURCHM. 20MM) @@ -45543,11 +63062,11 @@ This is not intended for productive use and is not complete! Fixing - + De /NULL - + De Halter @@ -45557,11 +63076,11 @@ This is not intended for productive use and is not complete! Fixing - + De /NULL - + De Halter @@ -45571,11 +63090,11 @@ This is not intended for productive use and is not complete! Fixing - + De /NULL - + De Halter @@ -45585,11 +63104,11 @@ This is not intended for productive use and is not complete! Fixing - + De /NULL - + De HALTERUNGSSCHELLE_D1-16X20 @@ -45599,11 +63118,11 @@ This is not intended for productive use and is not complete! Fixing - + De /NULL - + De LEITUNGSCLIP @@ -45613,11 +63132,11 @@ This is not intended for productive use and is not complete! Fixing - + De /NULL - + De LEITUNGSCLIP LOCHBEFESTIGUNG 6,5 @@ -45627,11 +63146,11 @@ This is not intended for productive use and is not complete! Fixing - + De /NULL - + De - @@ -45641,11 +63160,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De - @@ -45655,11 +63174,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De - @@ -45669,11 +63188,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De - @@ -45683,11 +63202,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De - @@ -45697,11 +63216,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De - @@ -45711,11 +63230,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De - @@ -45725,11 +63244,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De - @@ -45739,11 +63258,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De - @@ -45753,11 +63272,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De KABELSCHUH A6-1 @@ -45767,11 +63286,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De KABELSCHUH_A6-1.0 @@ -45781,11 +63300,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De KABELSCHUH_A6_25 @@ -45795,11 +63314,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De KABELSCHUH_A6-2.5 @@ -45809,11 +63328,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De KABELSCHUH @@ -45823,11 +63342,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De KABELSCHUH @@ -45837,11 +63356,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De - @@ -45851,11 +63370,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De - @@ -45865,11 +63384,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De - @@ -45879,11 +63398,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De FLACHKONTAKT_2.8-1.0 @@ -45893,11 +63412,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De FLACHKONTAKT_28_25 @@ -45907,11 +63426,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De Micro-Power-Timer @@ -45921,11 +63440,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De sekundaer_verriegelt @@ -45935,11 +63454,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De nicht fuer Neukonstruktionen @@ -45949,11 +63468,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De - @@ -45963,11 +63482,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De Dummykontakt Schirmung offen @@ -45977,11 +63496,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De sekundaer_verriegelt_TAB003656A @@ -45991,11 +63510,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De - @@ -46005,11 +63524,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De - @@ -46019,11 +63538,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De Seal_n._TAB003656 @@ -46033,11 +63552,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De - @@ -46047,11 +63566,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De - @@ -46061,11 +63580,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De - @@ -46075,11 +63594,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De LWL Kontakt @@ -46089,11 +63608,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De - @@ -46103,11 +63622,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De - @@ -46117,11 +63636,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De FLACHKONTAKT_4.8-1 @@ -46131,11 +63650,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De - @@ -46145,11 +63664,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De - @@ -46159,11 +63678,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De Dummykontakt @@ -46173,11 +63692,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De HF Aussenleiter Kontakt RTK031 @@ -46187,11 +63706,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De Schirm von HF Kontakt @@ -46201,11 +63720,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De HF-Winkelbuchsenkontakt RTK031 @@ -46215,11 +63734,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De - @@ -46229,11 +63748,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De - @@ -46243,11 +63762,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De Anschlussstueck schwarz @@ -46257,11 +63776,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De Winkelstueck schwarz @@ -46271,11 +63790,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De Unspezifizierter Draht @@ -46285,11 +63804,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46299,11 +63818,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46313,11 +63832,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46327,11 +63846,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46341,11 +63860,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46355,11 +63874,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46369,11 +63888,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46383,11 +63902,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46397,11 +63916,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46411,11 +63930,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46425,11 +63944,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46439,11 +63958,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46453,11 +63972,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46467,11 +63986,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46481,11 +64000,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46495,11 +64014,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46509,11 +64028,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46523,11 +64042,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46537,11 +64056,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46551,11 +64070,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46565,11 +64084,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46579,11 +64098,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46593,11 +64112,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46607,11 +64126,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46621,11 +64140,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46635,11 +64154,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46649,11 +64168,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46663,11 +64182,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46677,11 +64196,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46691,11 +64210,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46705,11 +64224,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46719,11 +64238,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46733,11 +64252,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46747,11 +64266,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46761,11 +64280,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46775,11 +64294,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46789,11 +64308,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46803,11 +64322,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46817,11 +64336,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46831,11 +64350,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46845,11 +64364,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46859,11 +64378,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46873,11 +64392,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46887,11 +64406,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46901,11 +64420,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46915,11 +64434,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46929,11 +64448,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46943,11 +64462,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46957,11 +64476,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46971,11 +64490,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46985,11 +64504,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -46999,11 +64518,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -47013,11 +64532,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -47027,11 +64546,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -47041,11 +64560,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -47055,11 +64574,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -47069,11 +64588,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -47083,11 +64602,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -47097,11 +64616,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -47111,11 +64630,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -47125,11 +64644,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -47139,11 +64658,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -47153,11 +64672,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -47167,11 +64686,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -47181,11 +64700,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -47195,11 +64714,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -47209,11 +64728,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -47223,11 +64742,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -47237,11 +64756,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -47251,11 +64770,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -47265,11 +64784,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -47279,11 +64798,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -47293,11 +64812,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -47307,11 +64826,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -47321,11 +64840,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -47335,11 +64854,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -47349,11 +64868,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -47363,11 +64882,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -47377,11 +64896,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -47391,11 +64910,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -47405,11 +64924,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -47419,11 +64938,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -47433,11 +64952,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -47447,11 +64966,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -47461,11 +64980,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -47475,11 +64994,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -47489,11 +65008,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -47503,11 +65022,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -47517,11 +65036,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Mehradriges Kabel @@ -47531,11 +65050,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Mehradriges Kabel @@ -47545,11 +65064,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Mehradriges Kabel @@ -47559,11 +65078,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Mehradriges Kabel @@ -47573,11 +65092,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Mehradriges Kabel @@ -47587,11 +65106,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Mehradriges Kabel @@ -47601,11 +65120,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Mehradriges Kabel @@ -47615,11 +65134,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Mehradriges Kabel @@ -47629,11 +65148,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Mehradriges Kabel @@ -47643,11 +65162,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De PVC-Folie @@ -47657,11 +65176,11 @@ This is not intended for productive use and is not complete! WireProtection - + De /NULL - + De PP-Wellschlauch Gr. 10.0 D(i)=8.3 D(a)=13.4 @@ -47671,11 +65190,11 @@ This is not intended for productive use and is not complete! WireProtection - + De /NULL - + De PVC-Folie @@ -47685,11 +65204,11 @@ This is not intended for productive use and is not complete! WireProtection - + De /NULL - + De PET-Vlies @@ -47699,11 +65218,11 @@ This is not intended for productive use and is not complete! WireProtection - + De /NULL - + De PP-Wellschlauch Gr. 17.0 D(i)=15.3 D(a)=21.6 @@ -47713,11 +65232,11 @@ This is not intended for productive use and is not complete! WireProtection - + De /NULL - + De PP-Wellschlauch Gr. 13.0 D(i)=12.9 D(a)=15.8 @@ -47727,11 +65246,11 @@ This is not intended for productive use and is not complete! WireProtection - + De /NULL - + De MODULARE LTGS. @@ -47741,11 +65260,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De Modul @@ -47755,11 +65274,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De Modul @@ -47769,11 +65288,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De Modul @@ -47783,11 +65302,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De Modul @@ -47797,11 +65316,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De Modul @@ -47811,11 +65330,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De Modul @@ -47825,11 +65344,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De Modul @@ -47839,11 +65358,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De Modul @@ -47853,11 +65372,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De Modul @@ -47867,11 +65386,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De Modul @@ -47881,11 +65400,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De Modul @@ -47895,11 +65414,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De Modul @@ -47909,11 +65428,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De Modul @@ -47923,11 +65442,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De Modul @@ -47937,11 +65456,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De Modul @@ -47951,11 +65470,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De Modul @@ -47965,11 +65484,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De Modul @@ -47979,11 +65498,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De Modul @@ -47993,11 +65512,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De Modul @@ -48007,11 +65526,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De Modul @@ -48021,11 +65540,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De Modul @@ -48035,11 +65554,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De Modul @@ -48049,11 +65568,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De Modul @@ -48063,11 +65582,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De Modul @@ -48077,11 +65596,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De Modul @@ -48091,11 +65610,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De Modul @@ -48105,11 +65624,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De Modul @@ -48119,11 +65638,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De Modul @@ -48133,11 +65652,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De Modul @@ -48147,11 +65666,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De Modul @@ -48161,11 +65680,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De Modul @@ -48175,11 +65694,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De Modul @@ -48189,11 +65708,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De Modul @@ -48203,11 +65722,11 @@ This is not intended for productive use and is not complete! PartStructure - + De /NULL - + De Modul @@ -49870,11 +67389,11 @@ This is not intended for productive use and is not complete! - + De LTGS - + De Leitungsstrang @@ -50437,6 +67956,1442 @@ This is not intended for productive use and is not complete! PartOccurrence_id_331_0 + + GEOMETRY + Dmu + + BuildingBlockSpecification3D_id_328_0 + + + + + -5.503691 + 0.0 + 20.31862 + + + -22.632465 + 200.333199 + 0.252248 + + + -11.76223 + 103.010602 + 18.891256 + + + 0.0 + 300.0 + 0.0 + + + -10.194799 + 400.0 + 18.418188 + + + -0.998613 + 500.0 + 1.052653 + + + -57.788081 + 575.978007 + 20.921686 + + + 994.212054 + 50.002566 + -96.99925 + + + 1001.386959 + 350.002566 + -99.409406 + + + 1009.518727 + 462.843337 + -96.99925 + + + 1019.82362 + 223.833753 + -96.99925 + + + 1245.336923 + 166.378105 + -30.264113 + + + 1009.779999 + 537.314641 + -97.917767 + + + 300.0 + 6.931422 + 0.0 + + + 300.0 + 310.795415 + 0.0 + + + -451.043813 + 21.490557 + 88.13797 + + + -271.976518 + 103.247059 + 83.416151 + + + -75.193621 + -2.760346 + 26.541813 + + + 112.054815 + -7.714031 + -2.29591 + + + 287.918573 + 107.996077 + 2.373602 + + + 475.367968 + 100.912479 + -27.050855 + + + 670.075322 + 16.903319 + -77.863793 + + + -3151.290828 + -13682.826897 + -3633.057479 + + + -168.598491 + 756.701872 + 190.669395 + + + -112.90053 + -2.351416 + -11.794059 + + + 128.78801 + 204.361791 + 41.582542 + + + 265.703539 + -132.964731 + -49.160123 + + + 549.098212 + 290.309905 + 61.588572 + + + 168.882797 + -2732.247974 + -740.526989 + + + -249.50779 + 50.0 + 106.903605 + + + 67.243935 + 50.0 + -59.939706 + + + 146.872847 + 50.0 + 55.599642 + + + 250.0 + 50.0 + -54.936001 + + + 353.127153 + 50.0 + 55.599642 + + + 432.756065 + 50.0 + -59.939706 + + + 749.50779 + 50.0 + 106.903605 + + + -4204.241903 + -3967.641359 + -640.453074 + + + 316.646665 + 118.541643 + 2.367001 + + + 297.237961 + 61.425222 + -0.392736 + + + 320.21113 + 53.880129 + 2.873797 + + + 269.1826 + -28.410989 + -4.381892 + + + 342.348321 + 7.978151 + 6.021486 + + + 1230.028863 + 424.40947 + 132.239011 + + + -192.168712 + 50.0 + -221.505482 + + + -4.32426 + 50.0 + 122.310985 + + + 203.964818 + 50.0 + -112.15641 + + + 396.093425 + 50.0 + 110.512021 + + + 603.95319 + 50.0 + -111.831601 + + + 795.730336 + 50.0 + 120.786043 + + + 1007.622855 + 50.0 + -215.686911 + + + -2497.742095 + 14053.622289 + -11961.205211 + + + -60.351682 + -497.663521 + 739.883597 + + + -57.291587 + 486.478701 + -119.125935 + + + 148.021922 + 179.878519 + 148.490369 + + + 246.369416 + 555.914879 + -179.732863 + + + 494.170123 + -21.830427 + 324.554152 + + + 52.090874 + 3803.105504 + -3014.058716 + + + -1920.290413 + -7412.566566 + -2915.556125 + + + -210.999621 + 644.981139 + 111.420332 + + + -73.600738 + 384.099973 + 13.167063 + + + 122.218038 + 432.376021 + 31.066888 + + + 275.469345 + 255.385644 + -35.66527 + + + 488.789529 + 396.278885 + 17.034122 + + + 443.648883 + -830.598784 + -444.17658 + + + 3164.685992 + 10948.881967 + 4018.47973 + + + -120.057848 + -210.684018 + -212.578492 + + + 197.909978 + 507.960127 + 59.889254 + + + 215.870573 + 237.474619 + -42.663086 + + + 392.447129 + 489.949005 + 53.060475 + + + 347.398381 + 11.720474 + -128.255532 + + + 1325.535407 + 2906.955255 + 969.444827 + + + 300.0 + 2175.077518 + -107.439614 + + + 300.0 + 255.868972 + -21.590942 + + + 300.0 + 377.978001 + 25.352441 + + + 300.0 + 349.760875 + -28.244329 + + + 300.0 + 263.414468 + 40.424656 + + + 300.0 + 448.625864 + -92.731796 + + + 300.0 + -1578.544312 + 183.755576 + + + -229.520712 + -436.153855 + -297.764522 + + + 14.578359 + 738.23025 + 147.123487 + + + 192.620609 + 153.482483 + -74.479863 + + + 405.724435 + 502.445065 + 57.779224 + + + 594.617509 + 206.661114 + -54.327878 + + + 805.152964 + 487.226452 + 52.007866 + + + 1009.060797 + 591.29434 + 91.473951 + + + -4361.941767 + -17955.838261 + 250.799217 + + + -714.571109 + 586.163122 + -1.640346 + + + -253.971604 + 222.022268 + 0.987504 + + + 271.538443 + 242.97588 + -1.510802 + + + 724.406359 + -167.034133 + 1.825138 + + + 1280.59878 + 35.948654 + -3.052284 + + + 1421.491827 + -2224.913205 + 24.403528 + + + -3962.19769 + -16080.315175 + 3011.333209 + + + -739.63613 + 789.789777 + -8.914308 + + + -255.840078 + 538.490725 + 7.972933 + + + 266.514664 + 528.241489 + -17.826438 + + + 730.178623 + 151.086577 + 21.482828 + + + 1277.550855 + 297.234287 + -31.980371 + + + 1500.749365 + -1583.191386 + 273.108657 + + + -817.922765 + -81374.573093 + -16399.285468 + + + -877.276497 + 5780.447782 + 923.665666 + + + -297.056158 + -681.932926 + -295.565794 + + + 224.634986 + 1422.874071 + 182.105818 + + + 776.984016 + -959.854769 + -229.052786 + + + 1286.406921 + 2940.710791 + 604.365727 + + + 1995.344571 + -22362.615343 + -4347.277709 + + + 17434.396164 + 87944.060541 + 14166.00104 + + + -1084.808639 + -6679.891278 + -1043.945451 + + + 781.748232 + 1907.763115 + 310.18209 + + + 344.928762 + -1166.406844 + -207.253345 + + + 1122.235662 + 1906.455365 + 261.826039 + + + 175.811174 + -3747.807172 + -669.67569 + + + 7420.266352 + 32067.749276 + 5054.127083 + + + 95.780132 + 868.964259 + 10.840487 + + + 181.679074 + 547.462363 + -2.107187 + + + 358.559858 + 362.712559 + -4.681039 + + + 654.975332 + 357.631781 + 6.219013 + + + 744.093917 + 40.969234 + -6.325964 + + + 1047.532103 + 46.444086 + 5.380994 + + + 1152.166079 + -246.89774 + -5.491128 + + + 23622.684727 + 27571.507391 + 324.882781 + + + -1070.350895 + -1713.953735 + -22.71726 + + + 1125.950001 + 762.190749 + 6.67282 + + + 430.670093 + -177.191552 + -4.477021 + + + 1251.887224 + 674.708013 + 5.634441 + + + -69.523979 + -1004.25874 + -14.293515 + + + 8721.757738 + 9261.85779 + 107.555869 + + + -336.810458 + 72.286523 + 14.17935 + + + 187.764465 + 335.937002 + 220.018955 + + + 605.489305 + 274.428474 + 102.273741 + + + 994.521465 + 125.604303 + -102.248871 + + + 1412.164919 + 63.848104 + -220.182449 + + + 1937.582854 + 330.06398 + -12.371088 + + + 2732.079352 + 1415.121699 + 1008.238461 + + + 23482.457227 + -44760.703243 + -11651.277633 + + + -759.234218 + 1594.701551 + -0.905011 + + + 976.939501 + 411.650286 + 315.856608 + + + 771.423548 + -226.633426 + -346.281844 + + + 1162.626047 + 811.164011 + 411.353599 + + + 1518.56769 + -4248.725582 + -2555.870768 + + + -10445.587539 + 76592.200754 + 38306.466426 + + + -1313.546192 + -4907.1704 + 12192.722512 + + + 733.265499 + 832.110451 + -1454.197857 + + + 618.081226 + -80.576785 + 680.843363 + + + 964.339742 + 426.490115 + -552.521506 + + + 982.420744 + -76.170289 + 609.721643 + + + 1628.298053 + 1352.755245 + -2810.779238 + + + -3969.602573 + -16428.998725 + 39346.641212 + + + -2981.868001 + -41661.935868 + 17195.820536 + + + 967.201738 + 5419.987915 + -2095.684037 + + + 538.189042 + -2014.080727 + 919.346014 + + + 1025.786937 + 1965.50872 + -735.802126 + + + 870.196589 + -2063.897981 + 886.129548 + + + 1929.4175 + 9033.555619 + -3681.468881 + + + -7429.398873 + -109594.652668 + 44831.432348 + + + 2598.155122 + -75189.688105 + 27757.150286 + + + 235.231501 + 9633.608391 + -3480.807466 + + + 824.331978 + -3726.046911 + 1443.969406 + + + 800.078623 + 3314.161636 + -1144.936203 + + + 1203.804568 + -3880.022749 + 1508.977137 + + + 804.787305 + 15624.659531 + -5670.848896 + + + 7024.760674 + -185015.21551 + 68233.116498 + + + 10161.676185 + -83380.116052 + 28243.765799 + + + -761.133736 + 10584.830461 + -3543.160639 + + + 1208.128215 + -4168.436762 + 1469.296062 + + + 498.470631 + 3669.493887 + -1165.018702 + + + 1658.225195 + -4257.236998 + 1536.767576 + + + -688.740941 + 17388.036865 + -5771.12381 + + + 25893.107591 + -204921.973387 + 69496.23855 + + + 16.757086 + 12.5 + 17.046341 + + + 200.0 + 50.0 + 0.0 + + + 10.737242 + 115.510602 + 18.737058 + + + 300.0 + 50.0 + 0.0 + + + 300.0 + 16.931422 + 0.0 + + + 500.0 + 50.0 + 0.0 + + + 50.0 + 303.6 + 40.5 + + + 200.0 + 350.0 + 0.0 + + + 23.507914 + 404.000513 + 20.525236 + + + 300.0 + 350.0 + 0.0 + + + 300.0 + 320.795415 + 0.0 + + + 500.0 + 350.0 + 0.0 + + + 3.867294 + 203.333199 + 0.139228 + + + 0.0 + 500.0 + 1.0 + + + -37.665807 + 583.478007 + -14.537359 + + + 700.0 + 200.0 + 0.0 + + + 800.0 + 200.0 + 0.0 + + + 1214.853118 + 129.752438 + -126.418819 + + + 993.225091 + 50.002566 + -96.838299 + + + 989.901317 + 225.991488 + -91.99925 + + + 981.636668 + 369.752566 + -96.258852 + + + 979.572938 + 461.040634 + -91.99925 + + + 980.637761 + 530.113394 + -93.031866 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable1/ElecRouteBody.1/Flexible Curve.1/ElecBundleSegmentExtremity.1 ST_SBBR_1 + TopologyNode_Node_1 + CartesianPoint3D_Cartesian_point_170 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable1/ElecRouteBody.1/Flexible Curve.1/ElecBundleSegmentExtremity.2 ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable1/ElecRouteBody.2/Flexible Curve.2/ElecBundleSegmentExtremity.4 ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable1/ElecRouteBody.3/Flexible Curve.3/ElecBundleSegmentExtremity.5 + TopologyNode_Node_2 + CartesianPoint3D_Cartesian_point_171 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable1/ElecRouteBody.2/Flexible Curve.2/ElecBundleSegmentExtremity.3 ST_SBBR_2 + TopologyNode_Node_3 + CartesianPoint3D_Cartesian_point_172 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable1/ElecRouteBody.3/Flexible Curve.3/ElecBundleSegmentExtremity.6 ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable1/ElecRouteBody.4/Flexible Curve.4/ElecBundleSegmentExtremity.7 ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable1/ElecRouteBody.5/Flexible Curve.5/ElecBundleSegmentExtremity.9 + TopologyNode_Node_4 + CartesianPoint3D_Cartesian_point_173 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable1/ElecRouteBody.4/Flexible Curve.4/ElecBundleSegmentExtremity.8 SI_SP + TopologyNode_Node_5 + CartesianPoint3D_Cartesian_point_174 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable1/ElecRouteBody.5/Flexible Curve.5/ElecBundleSegmentExtremity.10 ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable3/ElecRouteBody.1/Flexible Curve.1/ElecBundleSegmentExtremity.2 ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable5/ElecRouteBody.1/Flexible Curve.1/ElecBundleSegmentExtremity.1 + TopologyNode_Node_6 + CartesianPoint3D_Cartesian_point_175 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable2/ElecRouteBody.1/Flexible Curve.1/ElecBundleSegmentExtremity.1 ST_KLIMA_1 + TopologyNode_Node_7 + CartesianPoint3D_Cartesian_point_176 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable2/ElecRouteBody.1/Flexible Curve.1/ElecBundleSegmentExtremity.2 ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable2/ElecRouteBody.2/Flexible Curve.2/ElecBundleSegmentExtremity.4 ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable2/ElecRouteBody.3/Flexible Curve.3/ElecBundleSegmentExtremity.5 + TopologyNode_Node_8 + CartesianPoint3D_Cartesian_point_177 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable2/ElecRouteBody.2/Flexible Curve.2/ElecBundleSegmentExtremity.3 ST_SCHDACH_1 + TopologyNode_Node_9 + CartesianPoint3D_Cartesian_point_178 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable2/ElecRouteBody.3/Flexible Curve.3/ElecBundleSegmentExtremity.6 ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable2/ElecRouteBody.4/Flexible Curve.4/ElecBundleSegmentExtremity.7 ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable2/ElecRouteBody.5/Flexible Curve.5/ElecBundleSegmentExtremity.9 + TopologyNode_Node_10 + CartesianPoint3D_Cartesian_point_179 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable2/ElecRouteBody.4/Flexible Curve.4/ElecBundleSegmentExtremity.8 SP_SI_X + TopologyNode_Node_11 + CartesianPoint3D_Cartesian_point_180 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable2/ElecRouteBody.5/Flexible Curve.5/ElecBundleSegmentExtremity.10 ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable4/ElecRouteBody.1/Flexible Curve.1/ElecBundleSegmentExtremity.2 ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable4/ElecRouteBody.2/Flexible Curve.2/ElecBundleSegmentExtremity.4 ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable5/ElecRouteBody.2/Flexible Curve.2/ElecBundleSegmentExtremity.3 + TopologyNode_Node_12 + CartesianPoint3D_Cartesian_point_181 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable3/ElecRouteBody.1/Flexible Curve.1/ElecBundleSegmentExtremity.1 ST_PUMPE + TopologyNode_Node_13 + CartesianPoint3D_Cartesian_point_182 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable4/ElecRouteBody.1/Flexible Curve.1/ElecBundleSegmentExtremity.1 ST_BEHECK_1 + TopologyNode_Node_14 + CartesianPoint3D_Cartesian_point_183 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable4/ElecRouteBody.2/Flexible Curve.2/ElecBundleSegmentExtremity.3 ST_BATT + TopologyNode_Node_15 + CartesianPoint3D_Cartesian_point_184 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable5/ElecRouteBody.1/Flexible Curve.1/ElecBundleSegmentExtremity.2 ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable5/ElecRouteBody.2/Flexible Curve.2/ElecBundleSegmentExtremity.4 ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable5/ElecRouteBody.3/Flexible Curve.3/ElecBundleSegmentExtremity.5 + TopologyNode_Node_16 + CartesianPoint3D_Cartesian_point_185 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable5/ElecRouteBody.3/Flexible Curve.3/ElecBundleSegmentExtremity.6 ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable5/ElecRouteBody.4/Flexible Curve.4/ElecBundleSegmentExtremity.7 ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable5/ElecRouteBody.5/Flexible Curve.5/ElecBundleSegmentExtremity.9 ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable5/ElecRouteBody.6/Flexible Curve.6/ElecBundleSegmentExtremity.11 ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable5/ElecRouteBody.7/Flexible Curve.7/ElecBundleSegmentExtremity.13 ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable5/ElecRouteBody.8/Flexible Curve.8/ElecBundleSegmentExtremity.15 ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable5/ElecRouteBody.9/Flexible Curve.9/ElecBundleSegmentExtremity.17 + TopologyNode_Node_17 + CartesianPoint3D_Cartesian_point_186 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable5/ElecRouteBody.4/Flexible Curve.4/ElecBundleSegmentExtremity.8 ST_SIDO_4 + TopologyNode_Node_18 + CartesianPoint3D_Cartesian_point_187 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable5/ElecRouteBody.5/Flexible Curve.5/ElecBundleSegmentExtremity.10 ST_SIDO_1 + TopologyNode_Node_19 + CartesianPoint3D_Cartesian_point_188 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable5/ElecRouteBody.6/Flexible Curve.6/ElecBundleSegmentExtremity.12 ST_SIDO_5 + TopologyNode_Node_20 + CartesianPoint3D_Cartesian_point_189 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable5/ElecRouteBody.7/Flexible Curve.7/ElecBundleSegmentExtremity.14 ST_SIDO_6 + TopologyNode_Node_21 + CartesianPoint3D_Cartesian_point_190 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable5/ElecRouteBody.8/Flexible Curve.8/ElecBundleSegmentExtremity.16 ST_SIDO_2 + TopologyNode_Node_22 + CartesianPoint3D_Cartesian_point_191 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable5/ElecRouteBody.9/Flexible Curve.9/ElecBundleSegmentExtremity.18 ST_SIDO_3 + TopologyNode_Node_23 + CartesianPoint3D_Cartesian_point_192 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable1/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_1 + + 0.989368 + 0.0 + -0.145435 + + + 0.948591 + 0.311267 + -0.057346 + + GeometryNode3D_Node_2 + GeometryNode3D_Node_1 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable1/ElecRouteBody.2/Flexible Curve.2 + TopologySegment_Segment_2 + + 0.999977 + -0.0 + -0.006853 + + + 0.912245 + -0.394261 + -0.111209 + + GeometryNode3D_Node_2 + GeometryNode3D_Node_3 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable1/ElecRouteBody.3/Flexible Curve.3 + TopologySegment_Segment_3 + + 0.990042 + 0.0 + -0.140773 + + + 0.990042 + 0.0 + 0.140773 + + GeometryNode3D_Node_4 + GeometryNode3D_Node_2 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable1/ElecRouteBody.4/Flexible Curve.4 + TopologySegment_Segment_4 + + 0.990042 + 0.0 + 0.140773 + + + 0.0 + -1.0 + 0.0 + + GeometryNode3D_Node_5 + GeometryNode3D_Node_4 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable1/ElecRouteBody.5/Flexible Curve.5 + TopologySegment_Segment_5 + + 0.990042 + 0.0 + 0.140773 + + + 0.990164 + 0.0 + -0.139909 + + GeometryNode3D_Node_6 + GeometryNode3D_Node_4 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable2/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_6 + + 1.0 + -0.0 + -0.0 + + + 0.896632 + 0.33358 + -0.291163 + + GeometryNode3D_Node_8 + GeometryNode3D_Node_7 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable2/ElecRouteBody.2/Flexible Curve.2 + TopologySegment_Segment_7 + + 0.999999 + -0.0 + -0.001275 + + + 0.920888 + -0.364509 + -0.138201 + + GeometryNode3D_Node_8 + GeometryNode3D_Node_9 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable2/ElecRouteBody.3/Flexible Curve.3 + TopologySegment_Segment_8 + + 0.920888 + -0.364509 + -0.138201 + + + 0.997503 + 0.06603 + 0.025035 + + GeometryNode3D_Node_10 + GeometryNode3D_Node_8 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable2/ElecRouteBody.4/Flexible Curve.4 + TopologySegment_Segment_9 + + -0.0 + -0.977245 + -0.212114 + + + -0.0 + -1.0 + -0.0 + + GeometryNode3D_Node_11 + GeometryNode3D_Node_10 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable2/ElecRouteBody.5/Flexible Curve.5 + TopologySegment_Segment_10 + + 0.997503 + 0.06603 + 0.025035 + + + 0.986992 + -0.150331 + -0.056983 + + GeometryNode3D_Node_12 + GeometryNode3D_Node_10 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable3/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_11 + + 0.999991 + -0.0 + -0.004265 + + + 0.926185 + -0.377068 + 9.24E-4 + + GeometryNode3D_Node_6 + GeometryNode3D_Node_13 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable4/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_12 + + 0.998613 + 0.0 + -0.052653 + + + 0.929247 + -0.369214 + 0.013447 + + GeometryNode3D_Node_12 + GeometryNode3D_Node_14 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable4/ElecRouteBody.2/Flexible Curve.2 + TopologySegment_Segment_13 + + 0.993636 + 0.0 + 0.112643 + + + 0.890985 + -0.453905 + 0.01078 + + GeometryNode3D_Node_12 + GeometryNode3D_Node_15 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable5/ElecRouteBody.1/Flexible Curve.1 + TopologySegment_Segment_14 + + 0.990164 + 0.0 + -0.139909 + + + 0.769736 + 0.638259 + 0.011485 + + GeometryNode3D_Node_16 + GeometryNode3D_Node_6 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable5/ElecRouteBody.2/Flexible Curve.2 + TopologySegment_Segment_15 + + 0.890985 + -0.453905 + 0.01078 + + + 0.713479 + -0.700627 + -0.008316 + + GeometryNode3D_Node_16 + GeometryNode3D_Node_12 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable5/ElecRouteBody.3/Flexible Curve.3 + TopologySegment_Segment_16 + + 0.713479 + -0.700627 + -0.008316 + + + 0.997571 + 0.069656 + 8.27E-4 + + GeometryNode3D_Node_17 + GeometryNode3D_Node_16 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable5/ElecRouteBody.4/Flexible Curve.4 + TopologySegment_Segment_17 + + 0.903943 + -0.233188 + -0.358484 + + + 0.991744 + -3.0E-6 + -0.128237 + + GeometryNode3D_Node_18 + GeometryNode3D_Node_17 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable5/ElecRouteBody.5/Flexible Curve.5 + TopologySegment_Segment_18 + + 0.903943 + -0.233188 + -0.358484 + + + 0.986962 + -0.0 + -0.160951 + + GeometryNode3D_Node_19 + GeometryNode3D_Node_17 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable5/ElecRouteBody.6/Flexible Curve.6 + TopologySegment_Segment_19 + + 0.865801 + 0.144253 + -0.479144 + + + 0.99741 + -0.071925 + -0.0 + + GeometryNode3D_Node_20 + GeometryNode3D_Node_17 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable5/ElecRouteBody.7/Flexible Curve.7 + TopologySegment_Segment_20 + + 0.645713 + 0.668964 + -0.36816 + + + 0.987515 + 0.0 + -0.157528 + + GeometryNode3D_Node_21 + GeometryNode3D_Node_17 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable5/ElecRouteBody.8/Flexible Curve.8 + TopologySegment_Segment_21 + + 0.504781 + 0.813781 + -0.288022 + + + 0.998193 + 0.06009 + -0.0 + + GeometryNode3D_Node_22 + GeometryNode3D_Node_17 + + + ROUTING_HUT_TF01_MULTI-FUSE_V01VW-Multi-branchable5/ElecRouteBody.9/Flexible Curve.9 + TopologySegment_Segment_22 + + 0.427164 + 0.869189 + -0.249079 + + + 0.970755 + 0.240042 + 0.003802 + + GeometryNode3D_Node_23 + GeometryNode3D_Node_17 + + RS-LTG0011200 @@ -50582,7 +69537,7 @@ This is not intended for productive use and is not complete! Alias-Ref VOBES - + De Relais- und Sicherungsträger @@ -50595,7 +69550,7 @@ This is not intended for productive use and is not complete! Alias-Ref VOBES - + De Tetrathrow @@ -50609,7 +69564,7 @@ This is not intended for productive use and is not complete! Alias-Ref VOBES - + De Hydraulikpumpe @@ -50623,7 +69578,7 @@ This is not intended for productive use and is not complete! Alias-Ref VOBES - + De Ölablass @@ -50637,7 +69592,7 @@ This is not intended for productive use and is not complete! Alias-Ref VOBES - + De Heckscheibenmotor @@ -50651,7 +69606,7 @@ This is not intended for productive use and is not complete! Alias-Ref VOBES - + De Kompressor @@ -50665,7 +69620,7 @@ This is not intended for productive use and is not complete! Alias-Ref VOBES - + De Beifahrersitz @@ -50679,7 +69634,7 @@ This is not intended for productive use and is not complete! Alias-Ref VOBES - + De Plusverbindung (30) Ltgs. Motorraum @@ -50713,7 +69668,7 @@ This is not intended for productive use and is not complete! Alias-Ref VOBES - + De 2-Faden-Lampe für Scheinwerfer rechts @@ -50779,7 +69734,7 @@ This is not intended for productive use and is not complete! Alias-Ref VOBES - + De Hydraulikpumpe für ABS @@ -50829,7 +69784,7 @@ This is not intended for productive use and is not complete! Alias-Ref VOBES - + De 2-Faden-Lampe für Scheinwerfer links @@ -50891,7 +69846,7 @@ This is not intended for productive use and is not complete! Alias-Ref VOBES - + De Klimakompressor @@ -50949,7 +69904,7 @@ This is not intended for productive use and is not complete! Alias-Ref VOBES - + De Motor für Faltschiebedach @@ -51003,7 +69958,7 @@ This is not intended for productive use and is not complete! Alias-Ref VOBES - + De beheizbare Heckscheibe @@ -51073,7 +70028,7 @@ This is not intended for productive use and is not complete! Alias-Ref VOBES - + De Relais- und Sicherungsträger 1 @@ -51223,7 +70178,7 @@ This is not intended for productive use and is not complete! Alias-Ref VOBES - + De Plusverbindung (30) im Leitungsstrang Motorraum @@ -51261,7 +70216,7 @@ This is not intended for productive use and is not complete! Alias-Ref VOBES - + De Verbindung (15a) im Leitungsstrang hinten @@ -51572,7 +70527,7 @@ This is not intended for productive use and is not complete! Alias-Ref VOBES - + De Relais- und Sicherungsträger 1 @@ -51597,7 +70552,7 @@ This is not intended for productive use and is not complete! Alias-Ref VOBES - + De Relais- und Sicherungsträger 1 @@ -51622,7 +70577,7 @@ This is not intended for productive use and is not complete! Alias-Ref VOBES - + De Relais- und Sicherungsträger 1 @@ -51647,7 +70602,7 @@ This is not intended for productive use and is not complete! Alias-Ref VOBES - + De Relais- und Sicherungsträger 1 @@ -51672,7 +70627,7 @@ This is not intended for productive use and is not complete! Alias-Ref VOBES - + De Batterie @@ -51825,7 +70780,7 @@ This is not intended for productive use and is not complete! Alias-Ref VOBES - + De Test @@ -51863,11 +70818,11 @@ This is not intended for productive use and is not complete! partcolour zinn - + De /NULL - + De Multifuse @@ -51882,11 +70837,11 @@ This is not intended for productive use and is not complete! - + De /NULL - + De Dichtung @@ -51896,11 +70851,11 @@ This is not intended for productive use and is not complete! CavityPlug - + De /NULL - + De Dichtung @@ -51910,11 +70865,11 @@ This is not intended for productive use and is not complete! CavitySeal - + De /NULL - + De Dichtung @@ -51924,11 +70879,11 @@ This is not intended for productive use and is not complete! CavitySeal - + De /NULL - + De Sicherung Type_SF30 150A @@ -51938,11 +70893,11 @@ This is not intended for productive use and is not complete! Fuse - + De /NULL - + De Sicherung Type_SF30 110A @@ -51952,11 +70907,11 @@ This is not intended for productive use and is not complete! Fuse - + De /NULL - + De Sicherung Type_SF30 80A @@ -51966,11 +70921,11 @@ This is not intended for productive use and is not complete! Fuse - + De /NULL - + De Sicherung Type_SF30 40A @@ -51980,11 +70935,11 @@ This is not intended for productive use and is not complete! Fuse - + De /NULL - + De Sicherung Type_SF30 50A @@ -51994,11 +70949,11 @@ This is not intended for productive use and is not complete! Fuse - + De /NULL - + De Sicherung Type_SF30 60A @@ -52008,11 +70963,11 @@ This is not intended for productive use and is not complete! Fuse - + De /NULL - + De Sicherung Type_C 25A @@ -52022,11 +70977,11 @@ This is not intended for productive use and is not complete! Fuse - + De HSB30V - + De Hauptsicherungsbox @@ -52036,11 +70991,11 @@ This is not intended for productive use and is not complete! EEComponent - + De /NULL - + De BUCHSENGEHAEUSE_6-POL @@ -52055,11 +71010,11 @@ This is not intended for productive use and is not complete! - + De /NULL - + De RD-FLACHSTECKERGEHAEUSE 2-POLIG 2,8MM SCHWARZ @@ -52074,11 +71029,11 @@ This is not intended for productive use and is not complete! - + De /NULL - + De Steckgehaeuse_5Pol_Klima @@ -52088,11 +71043,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De FLACHKONTAKTGEH_4POL @@ -52102,11 +71057,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De DUMMY_BUCHSENGEH_1POL @@ -52116,11 +71071,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De BATTERIEKLEMME_PLUS @@ -52130,11 +71085,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De KABELSCHUH @@ -52144,11 +71099,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De KABELSCHUH_M6-10MM2 @@ -52158,11 +71113,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De KABELSCHUH @@ -52172,11 +71127,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De Verbinder @@ -52186,11 +71141,11 @@ This is not intended for productive use and is not complete! ConnectorHousing - + De /NULL - + De box @@ -52200,11 +71155,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De flat @@ -52214,11 +71169,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De cable_shoe @@ -52228,11 +71183,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De cable_shoe @@ -52242,11 +71197,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De cable_shoe @@ -52256,11 +71211,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De cable_shoe @@ -52270,11 +71225,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De cable_shoe @@ -52284,11 +71239,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De box @@ -52298,11 +71253,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De flat @@ -52312,11 +71267,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De cable_shoe @@ -52326,11 +71281,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De cable_shoe @@ -52340,11 +71295,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De cable_shoe @@ -52354,11 +71309,11 @@ This is not intended for productive use and is not complete! Terminal - + De /NULL - + De Unspezifizierter Draht @@ -52368,11 +71323,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -52382,11 +71337,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -52396,11 +71351,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -52410,11 +71365,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -52424,11 +71379,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -52438,11 +71393,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -52452,11 +71407,11 @@ This is not intended for productive use and is not complete! Wire - + De /NULL - + De Unspezifizierter Draht @@ -52466,11 +71421,11 @@ This is not intended for productive use and is not complete! Wire - + De LTGS - + De Leitungsstrang @@ -52485,11 +71440,11 @@ This is not intended for productive use and is not complete! - + De /NULL - + De Modul diff --git a/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/geometry/GeometryDimensionDetectorTest.java b/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/geometry/GeometryDimensionDetectorTest.java new file mode 100644 index 000000000..db2ac33d8 --- /dev/null +++ b/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/geometry/GeometryDimensionDetectorTest.java @@ -0,0 +1,97 @@ +/*- + * ========================LICENSE_START================================= + * KBL to VEC Converter + * %% + * Copyright (C) 2025 4Soft GmbH + * %% + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * =========================LICENSE_END================================== + */ +package com.foursoft.harness.kbl2vec.transform.geometry; + +import com.foursoft.harness.kbl.v25.KblCartesianPoint; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +class GeometryDimensionDetectorTest { + + @Test + void should_returnTrueWhenCartesianPointHasExpectedDimensions() { + // Given + final KblCartesianPoint point = new KblCartesianPoint(); + point.getCoordinates().add(1.0); + point.getCoordinates().add(2.0); + point.getCoordinates().add(3.0); + + // When + final boolean result = GeometryDimensionDetector.hasDimensions(point, 3); + + // Then + assertThat(result).isTrue(); + } + + @Test + void should_returnTrueWhenVectorHasExpectedDimensions() { + // Given + final List vectors = new ArrayList<>(); + vectors.add(1.0); + vectors.add(2.0); + vectors.add(3.0); + + // When + final boolean result = GeometryDimensionDetector.hasDimensions(vectors, 3); + + // Then + assertThat(result).isTrue(); + } + + @Test + void should_returnTrueWhenFirstCartesianPointHasExpectedDimensions() { + // Given + final KblCartesianPoint point = new KblCartesianPoint(); + point.getCoordinates().add(1.0); + point.getCoordinates().add(2.0); + + final List vectors = new ArrayList<>(); + vectors.add(point); + + // When + final boolean result = GeometryDimensionDetector.hasDimensions(vectors, 2); + + // Then + assertThat(result).isTrue(); + } + + @Test + void should_returnFalseWhenDimensionsAreNotEqual() { + // Given + final KblCartesianPoint point = new KblCartesianPoint(); + point.getCoordinates().add(1.0); + + // When + final boolean result = GeometryDimensionDetector.hasDimensions(point, 2); + + // Then + assertThat(result).isFalse(); + } +} diff --git a/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_2d/BuildingBlockPositioning2DTransformerTest.java b/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_2d/BuildingBlockPositioning2DTransformerTest.java new file mode 100644 index 000000000..d050e234d --- /dev/null +++ b/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_2d/BuildingBlockPositioning2DTransformerTest.java @@ -0,0 +1,56 @@ +/*- + * ========================LICENSE_START================================= + * KBL to VEC Converter + * %% + * Copyright (C) 2025 4Soft GmbH + * %% + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * =========================LICENSE_END================================== + */ +package com.foursoft.harness.kbl2vec.transform.geometry.geo_2d; + +import com.foursoft.harness.kbl.v25.KblHarness; +import com.foursoft.harness.kbl2vec.core.TestConversionOrchestrator; +import com.foursoft.harness.vec.v2x.VecBuildingBlockPositioning2D; +import com.foursoft.harness.vec.v2x.VecBuildingBlockSpecification2D; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +class BuildingBlockPositioning2DTransformerTest { + + @Test + void should_transformBuildingBlockPositioning2D() { + // Given + final BuildingBlockPositioning2DTransformer transformer = new BuildingBlockPositioning2DTransformer(); + final TestConversionOrchestrator orchestrator = new TestConversionOrchestrator(); + + final KblHarness source = new KblHarness(); + + final VecBuildingBlockSpecification2D blockSpecification2D = new VecBuildingBlockSpecification2D(); + orchestrator.addMockMapping(source, blockSpecification2D); + + // When + final VecBuildingBlockPositioning2D result = orchestrator.transform(transformer, source); + + // Then + assertThat(result).isNotNull() + .returns(blockSpecification2D, VecBuildingBlockPositioning2D::getReferenced2DBuildingBlock); + } +} diff --git a/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_2d/BuildingBlockSpecification2DTransformerTest.java b/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_2d/BuildingBlockSpecification2DTransformerTest.java new file mode 100644 index 000000000..9b00722ed --- /dev/null +++ b/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_2d/BuildingBlockSpecification2DTransformerTest.java @@ -0,0 +1,80 @@ +/*- + * ========================LICENSE_START================================= + * KBL to VEC Converter + * %% + * Copyright (C) 2025 4Soft GmbH + * %% + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * =========================LICENSE_END================================== + */ +package com.foursoft.harness.kbl2vec.transform.geometry.geo_2d; + +import com.foursoft.harness.kbl.v25.*; +import com.foursoft.harness.kbl2vec.core.TestConversionOrchestrator; +import com.foursoft.harness.vec.v2x.VecBuildingBlockSpecification2D; +import com.foursoft.harness.vec.v2x.VecCartesianPoint2D; +import com.foursoft.harness.vec.v2x.VecGeometryNode2D; +import com.foursoft.harness.vec.v2x.VecGeometrySegment2D; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +class BuildingBlockSpecification2DTransformerTest { + + @Test + void should_transformBuildingBlockSpecification2D() { + // Given + final BuildingBlockSpecification2DTransformer transformer = new BuildingBlockSpecification2DTransformer(); + final TestConversionOrchestrator orchestrator = new TestConversionOrchestrator(); + + final KblHarness source = new KblHarness(); + + final KBLContainer kblContainer = new KBLContainer(); + source.setParentKBLContainer(kblContainer); + + final KblCartesianPoint cartesianPoint = new KblCartesianPoint(); + cartesianPoint.getCoordinates().add(1.0); + cartesianPoint.getCoordinates().add(2.0); + kblContainer.getCartesianPoints().add(cartesianPoint); + + final VecCartesianPoint2D vecCartesianPoint2D = new VecCartesianPoint2D(); + orchestrator.addMockMapping(cartesianPoint, vecCartesianPoint2D); + + final KblNode node = new KblNode(); + kblContainer.getNodes().add(node); + + final VecGeometryNode2D vecGeometryNode2D = new VecGeometryNode2D(); + orchestrator.addMockMapping(node, vecGeometryNode2D); + + final KblSegment segment = new KblSegment(); + kblContainer.getSegments().add(segment); + + final VecGeometrySegment2D vecGeometrySegment2D = new VecGeometrySegment2D(); + orchestrator.addMockMapping(segment, vecGeometrySegment2D); + + // When + final VecBuildingBlockSpecification2D result = orchestrator.transform(transformer, source); + + // Then + assertThat(result).isNotNull() + .satisfies(v -> assertThat(v.getGeometryNodes()).containsExactly(vecGeometryNode2D)) + .satisfies(v -> assertThat(v.getGeometrySegments()).containsExactly(vecGeometrySegment2D)) + .satisfies(v -> assertThat(v.getCartesianPoints()).containsExactly(vecCartesianPoint2D)); + } +} diff --git a/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_2d/CartesianPoint2DTransformerTest.java b/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_2d/CartesianPoint2DTransformerTest.java new file mode 100644 index 000000000..6a4ff9348 --- /dev/null +++ b/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_2d/CartesianPoint2DTransformerTest.java @@ -0,0 +1,55 @@ +/*- + * ========================LICENSE_START================================= + * KBL to VEC Converter + * %% + * Copyright (C) 2025 4Soft GmbH + * %% + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * =========================LICENSE_END================================== + */ +package com.foursoft.harness.kbl2vec.transform.geometry.geo_2d; + +import com.foursoft.harness.kbl.v25.KblCartesianPoint; +import com.foursoft.harness.kbl2vec.core.TestConversionOrchestrator; +import com.foursoft.harness.vec.v2x.VecCartesianPoint2D; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +class CartesianPoint2DTransformerTest { + + @Test + void should_transformCartesianPoint2D() { + // Given + final CartesianPoint2DTransformer transformer = new CartesianPoint2DTransformer(); + final TestConversionOrchestrator orchestrator = new TestConversionOrchestrator(); + + final KblCartesianPoint source = new KblCartesianPoint(); + source.getCoordinates().add(1.0); + source.getCoordinates().add(2.0); + + // When + final VecCartesianPoint2D result = orchestrator.transform(transformer, source); + + // Then + assertThat(result).isNotNull() + .returns(1.0, VecCartesianPoint2D::getX) + .returns(2.0, VecCartesianPoint2D::getY); + } +} diff --git a/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_2d/GeometryNode2DTransformerTest.java b/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_2d/GeometryNode2DTransformerTest.java new file mode 100644 index 000000000..5848fef54 --- /dev/null +++ b/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_2d/GeometryNode2DTransformerTest.java @@ -0,0 +1,76 @@ +/*- + * ========================LICENSE_START================================= + * KBL to VEC Converter + * %% + * Copyright (C) 2025 4Soft GmbH + * %% + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * =========================LICENSE_END================================== + */ +package com.foursoft.harness.kbl2vec.transform.geometry.geo_2d; + +import com.foursoft.harness.kbl.v25.KblAliasIdentification; +import com.foursoft.harness.kbl.v25.KblCartesianPoint; +import com.foursoft.harness.kbl.v25.KblNode; +import com.foursoft.harness.kbl2vec.core.TestConversionOrchestrator; +import com.foursoft.harness.vec.v2x.VecAliasIdentification; +import com.foursoft.harness.vec.v2x.VecCartesianPoint2D; +import com.foursoft.harness.vec.v2x.VecGeometryNode2D; +import com.foursoft.harness.vec.v2x.VecTopologyNode; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +class GeometryNode2DTransformerTest { + + @Test + void should_transformGeometryNode2D() { + // Given + final GeometryNode2DTransformer transformer = new GeometryNode2DTransformer(); + final TestConversionOrchestrator orchestrator = new TestConversionOrchestrator(); + + final KblNode source = new KblNode(); + source.setId("TestId"); + + final KblCartesianPoint cartesianPoint = new KblCartesianPoint(); + source.setCartesianPoint(cartesianPoint); + + final VecCartesianPoint2D vecCartesianPoint2D = new VecCartesianPoint2D(); + orchestrator.addMockMapping(cartesianPoint, vecCartesianPoint2D); + + final VecTopologyNode vecTopologyNode = new VecTopologyNode(); + orchestrator.addMockMapping(source, vecTopologyNode); + + final KblAliasIdentification aliasIdentification = new KblAliasIdentification(); + source.getAliasIds().add(aliasIdentification); + + final VecAliasIdentification vecAliasIdentification = new VecAliasIdentification(); + orchestrator.addMockMapping(aliasIdentification, vecAliasIdentification); + + // When + final VecGeometryNode2D result = orchestrator.transform(transformer, source); + + // Then + assertThat(result).isNotNull() + .returns(vecTopologyNode, VecGeometryNode2D::getReferenceNode) + .returns("TestId", VecGeometryNode2D::getIdentification) + .returns(vecCartesianPoint2D, VecGeometryNode2D::getCartesianPoint) + .satisfies(v -> assertThat(v.getAliasIds()).containsExactly(vecAliasIdentification)); + } +} diff --git a/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_2d/GeometrySegment2DTransformerTest.java b/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_2d/GeometrySegment2DTransformerTest.java new file mode 100644 index 000000000..11a7e956d --- /dev/null +++ b/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_2d/GeometrySegment2DTransformerTest.java @@ -0,0 +1,157 @@ +/*- + * ========================LICENSE_START================================= + * KBL to VEC Converter + * %% + * Copyright (C) 2025 4Soft GmbH + * %% + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * =========================LICENSE_END================================== + */ +package com.foursoft.harness.kbl2vec.transform.geometry.geo_2d; + +import com.foursoft.harness.kbl.v25.KblAliasIdentification; +import com.foursoft.harness.kbl.v25.KblNode; +import com.foursoft.harness.kbl.v25.KblSegment; +import com.foursoft.harness.kbl2vec.core.TestConversionOrchestrator; +import com.foursoft.harness.vec.v2x.VecAliasIdentification; +import com.foursoft.harness.vec.v2x.VecGeometryNode2D; +import com.foursoft.harness.vec.v2x.VecGeometrySegment2D; +import com.foursoft.harness.vec.v2x.VecTopologySegment; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +class GeometrySegment2DTransformerTest { + + @Test + void should_transformGeometry2DTransformer() { + // Given + final GeometrySegment2DTransformer transformer = new GeometrySegment2DTransformer(); + final TestConversionOrchestrator orchestrator = new TestConversionOrchestrator(); + + final KblSegment source = new KblSegment(); + source.setId("TestId"); + + source.getStartVectors().add(1.0); + source.getStartVectors().add(2.0); + source.getEndVectors().add(1.0); + source.getEndVectors().add(2.0); + + final KblNode startNode = new KblNode(); + final KblNode endNode = new KblNode(); + source.setStartNode(startNode); + source.setEndNode(endNode); + + final VecGeometryNode2D vecStartNode = new VecGeometryNode2D(); + final VecGeometryNode2D vecEndNode = new VecGeometryNode2D(); + orchestrator.addMockMapping(startNode, vecStartNode); + orchestrator.addMockMapping(endNode, vecEndNode); + + final VecTopologySegment vecTopologySegment = new VecTopologySegment(); + orchestrator.addMockMapping(source, vecTopologySegment); + + final KblAliasIdentification aliasIdentification = new KblAliasIdentification(); + source.getAliasIds().add(aliasIdentification); + + final VecAliasIdentification vecAliasIdentification = new VecAliasIdentification(); + orchestrator.addMockMapping(aliasIdentification, vecAliasIdentification); + + // When + final VecGeometrySegment2D result = orchestrator.transform(transformer, source); + + // Then + assertThat(result).isNotNull() + .returns("TestId", VecGeometrySegment2D::getIdentification) + .returns(vecEndNode, VecGeometrySegment2D::getEndNode) + .returns(vecStartNode, VecGeometrySegment2D::getStartNode) + .returns(vecTopologySegment, VecGeometrySegment2D::getReferenceSegment) + .satisfies(v -> assertThat(v.getStartVector().getX()).isEqualTo(1.0)) + .satisfies(v -> assertThat(v.getStartVector().getY()).isEqualTo(2.0)) + .satisfies(v -> assertThat(v.getEndVector().getX()).isEqualTo(1.0)) + .satisfies(v -> assertThat(v.getEndVector().getY()).isEqualTo(2.0)) + .satisfies(v -> assertThat(v.getAliasIds()).containsExactly(vecAliasIdentification)); + } + + @Test + void should_fillMissingCoordinatesWithZero() { + // Given + final GeometrySegment2DTransformer transformer = new GeometrySegment2DTransformer(); + final TestConversionOrchestrator orchestrator = new TestConversionOrchestrator(); + + final KblSegment source = new KblSegment(); + + source.getStartVectors().add(1.0); + source.getEndVectors().add(1.0); + + final KblNode startNode = new KblNode(); + final KblNode endNode = new KblNode(); + source.setStartNode(startNode); + source.setEndNode(endNode); + + final VecGeometryNode2D vecStartNode = new VecGeometryNode2D(); + final VecGeometryNode2D vecEndNode = new VecGeometryNode2D(); + orchestrator.addMockMapping(startNode, vecStartNode); + orchestrator.addMockMapping(endNode, vecEndNode); + + final VecTopologySegment vecTopologySegment = new VecTopologySegment(); + orchestrator.addMockMapping(source, vecTopologySegment); + + // When + final VecGeometrySegment2D result = orchestrator.transform(transformer, source); + + // Then + assertThat(result).isNotNull() + .returns(vecEndNode, VecGeometrySegment2D::getEndNode) + .returns(vecStartNode, VecGeometrySegment2D::getStartNode) + .satisfies(v -> assertThat(v.getStartVector().getX()).isEqualTo(1.0)) + .satisfies(v -> assertThat(v.getStartVector().getY()).isEqualTo(0.0)) + .satisfies(v -> assertThat(v.getEndVector().getX()).isEqualTo(1.0)) + .satisfies(v -> assertThat(v.getEndVector().getY()).isEqualTo(0.0)); + } + + @Test + void should_requireAtLeastOneCoordinate() { + // Given + final GeometrySegment2DTransformer transformer = new GeometrySegment2DTransformer(); + final TestConversionOrchestrator orchestrator = new TestConversionOrchestrator(); + + final KblSegment source = new KblSegment(); + + final KblNode startNode = new KblNode(); + final KblNode endNode = new KblNode(); + source.setStartNode(startNode); + source.setEndNode(endNode); + + final VecGeometryNode2D vecStartNode = new VecGeometryNode2D(); + final VecGeometryNode2D vecEndNode = new VecGeometryNode2D(); + orchestrator.addMockMapping(startNode, vecStartNode); + orchestrator.addMockMapping(endNode, vecEndNode); + + final VecTopologySegment vecTopologySegment = new VecTopologySegment(); + orchestrator.addMockMapping(source, vecTopologySegment); + + // When + final VecGeometrySegment2D result = orchestrator.transform(transformer, source); + + // Then + assertThat(result).isNotNull() + .returns(null, VecGeometrySegment2D::getStartVector) + .returns(null, VecGeometrySegment2D::getEndVector); + } +} diff --git a/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_2d/HarnessDrawingSpecification2DTransformerTest.java b/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_2d/HarnessDrawingSpecification2DTransformerTest.java new file mode 100644 index 000000000..70389d3b0 --- /dev/null +++ b/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_2d/HarnessDrawingSpecification2DTransformerTest.java @@ -0,0 +1,66 @@ +/*- + * ========================LICENSE_START================================= + * KBL to VEC Converter + * %% + * Copyright (C) 2025 4Soft GmbH + * %% + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * =========================LICENSE_END================================== + */ +package com.foursoft.harness.kbl2vec.transform.geometry.geo_2d; + +import com.foursoft.harness.kbl.v25.KBLContainer; +import com.foursoft.harness.kbl.v25.KblCartesianPoint; +import com.foursoft.harness.kbl.v25.KblHarness; +import com.foursoft.harness.kbl2vec.core.TestConversionOrchestrator; +import com.foursoft.harness.vec.v2x.VecBuildingBlockPositioning2D; +import com.foursoft.harness.vec.v2x.VecHarnessDrawingSpecification2D; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +class HarnessDrawingSpecification2DTransformerTest { + + @Test + void should_transformHarnessDrawingSpecification2D() { + // Given + final HarnessDrawingSpecification2DTransformer transformer = new HarnessDrawingSpecification2DTransformer(); + final TestConversionOrchestrator orchestrator = new TestConversionOrchestrator(); + + final KblHarness source = new KblHarness(); + + final KblCartesianPoint cartesianPoint = new KblCartesianPoint(); + cartesianPoint.getCoordinates().add(1.0); + cartesianPoint.getCoordinates().add(2.0); + + final KBLContainer kblContainer = new KBLContainer(); + source.setParentKBLContainer(kblContainer); + source.getParentKBLContainer().getCartesianPoints().add(cartesianPoint); + + final VecBuildingBlockPositioning2D vecBuildingBlockPositioning2D = new VecBuildingBlockPositioning2D(); + orchestrator.addMockMapping(source, vecBuildingBlockPositioning2D); + + // When + final VecHarnessDrawingSpecification2D result = orchestrator.transform(transformer, source); + + // Then + assertThat(result).isNotNull() + .satisfies(v -> assertThat(v.getBuildingBlockPositionings()).contains(vecBuildingBlockPositioning2D)); + } +} diff --git a/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_3d/BuildingBlockPositioning3DTransformerTest.java b/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_3d/BuildingBlockPositioning3DTransformerTest.java new file mode 100644 index 000000000..8aeb29938 --- /dev/null +++ b/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_3d/BuildingBlockPositioning3DTransformerTest.java @@ -0,0 +1,56 @@ +/*- + * ========================LICENSE_START================================= + * KBL to VEC Converter + * %% + * Copyright (C) 2025 4Soft GmbH + * %% + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * =========================LICENSE_END================================== + */ +package com.foursoft.harness.kbl2vec.transform.geometry.geo_3d; + +import com.foursoft.harness.kbl.v25.KblHarness; +import com.foursoft.harness.kbl2vec.core.TestConversionOrchestrator; +import com.foursoft.harness.vec.v2x.VecBuildingBlockPositioning3D; +import com.foursoft.harness.vec.v2x.VecBuildingBlockSpecification3D; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +class BuildingBlockPositioning3DTransformerTest { + + @Test + void should_transformBuildingBlockPositioning3D() { + // Given + final BuildingBlockPositioning3DTransformer transformer = new BuildingBlockPositioning3DTransformer(); + final TestConversionOrchestrator orchestrator = new TestConversionOrchestrator(); + + final KblHarness source = new KblHarness(); + + final VecBuildingBlockSpecification3D blockSpecification3D = new VecBuildingBlockSpecification3D(); + orchestrator.addMockMapping(source, blockSpecification3D); + + // When + final VecBuildingBlockPositioning3D result = orchestrator.transform(transformer, source); + + // Then + assertThat(result).isNotNull() + .returns(blockSpecification3D, VecBuildingBlockPositioning3D::getReferenced3DBuildingBlock); + } +} diff --git a/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_3d/BuildingBlockSpecification3DTransformerTest.java b/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_3d/BuildingBlockSpecification3DTransformerTest.java new file mode 100644 index 000000000..41f9f2200 --- /dev/null +++ b/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_3d/BuildingBlockSpecification3DTransformerTest.java @@ -0,0 +1,81 @@ +/*- + * ========================LICENSE_START================================= + * KBL to VEC Converter + * %% + * Copyright (C) 2025 4Soft GmbH + * %% + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * =========================LICENSE_END================================== + */ +package com.foursoft.harness.kbl2vec.transform.geometry.geo_3d; + +import com.foursoft.harness.kbl.v25.*; +import com.foursoft.harness.kbl2vec.core.TestConversionOrchestrator; +import com.foursoft.harness.vec.v2x.VecBuildingBlockSpecification3D; +import com.foursoft.harness.vec.v2x.VecCartesianPoint3D; +import com.foursoft.harness.vec.v2x.VecGeometryNode3D; +import com.foursoft.harness.vec.v2x.VecGeometrySegment3D; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +class BuildingBlockSpecification3DTransformerTest { + + @Test + void should_transformBuildingBlockSpecification3D() { + // Given + final BuildingBlockSpecification3DTransformer transformer = new BuildingBlockSpecification3DTransformer(); + final TestConversionOrchestrator orchestrator = new TestConversionOrchestrator(); + + final KblHarness source = new KblHarness(); + + final KBLContainer kblContainer = new KBLContainer(); + source.setParentKBLContainer(kblContainer); + + final KblCartesianPoint cartesianPoint = new KblCartesianPoint(); + cartesianPoint.getCoordinates().add(1.0); + cartesianPoint.getCoordinates().add(2.0); + cartesianPoint.getCoordinates().add(3.0); + kblContainer.getCartesianPoints().add(cartesianPoint); + + final VecCartesianPoint3D vecCartesianPoint3D = new VecCartesianPoint3D(); + orchestrator.addMockMapping(cartesianPoint, vecCartesianPoint3D); + + final KblNode node = new KblNode(); + kblContainer.getNodes().add(node); + + final VecGeometryNode3D vecGeometryNode3D = new VecGeometryNode3D(); + orchestrator.addMockMapping(node, vecGeometryNode3D); + + final KblSegment segment = new KblSegment(); + kblContainer.getSegments().add(segment); + + final VecGeometrySegment3D vecGeometrySegment3D = new VecGeometrySegment3D(); + orchestrator.addMockMapping(segment, vecGeometrySegment3D); + + // When + final VecBuildingBlockSpecification3D result = orchestrator.transform(transformer, source); + + // Then + assertThat(result).isNotNull() + .satisfies(v -> assertThat(v.getGeometryNodes()).containsExactly(vecGeometryNode3D)) + .satisfies(v -> assertThat(v.getGeometrySegments()).containsExactly(vecGeometrySegment3D)) + .satisfies(v -> assertThat(v.getCartesianPoints()).containsExactly(vecCartesianPoint3D)); + } +} diff --git a/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_3d/CartesianPoint3DTransformerTest.java b/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_3d/CartesianPoint3DTransformerTest.java new file mode 100644 index 000000000..5deac3c79 --- /dev/null +++ b/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_3d/CartesianPoint3DTransformerTest.java @@ -0,0 +1,57 @@ +/*- + * ========================LICENSE_START================================= + * KBL to VEC Converter + * %% + * Copyright (C) 2025 4Soft GmbH + * %% + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * =========================LICENSE_END================================== + */ +package com.foursoft.harness.kbl2vec.transform.geometry.geo_3d; + +import com.foursoft.harness.kbl.v25.KblCartesianPoint; +import com.foursoft.harness.kbl2vec.core.TestConversionOrchestrator; +import com.foursoft.harness.vec.v2x.VecCartesianPoint3D; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +class CartesianPoint3DTransformerTest { + + @Test + void should_transformCartesianPoint3D() { + // Given + final CartesianPoint3DTransformer transformer = new CartesianPoint3DTransformer(); + final TestConversionOrchestrator orchestrator = new TestConversionOrchestrator(); + + final KblCartesianPoint source = new KblCartesianPoint(); + source.getCoordinates().add(1.0); + source.getCoordinates().add(2.0); + source.getCoordinates().add(3.0); + + // When + final VecCartesianPoint3D result = orchestrator.transform(transformer, source); + + // Then + assertThat(result).isNotNull() + .returns(1.0, VecCartesianPoint3D::getX) + .returns(2.0, VecCartesianPoint3D::getY) + .returns(3.0, VecCartesianPoint3D::getZ); + } +} diff --git a/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_3d/GeometryNode3DTransformerTest.java b/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_3d/GeometryNode3DTransformerTest.java new file mode 100644 index 000000000..d26ac7ecc --- /dev/null +++ b/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_3d/GeometryNode3DTransformerTest.java @@ -0,0 +1,76 @@ +/*- + * ========================LICENSE_START================================= + * KBL to VEC Converter + * %% + * Copyright (C) 2025 4Soft GmbH + * %% + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * =========================LICENSE_END================================== + */ +package com.foursoft.harness.kbl2vec.transform.geometry.geo_3d; + +import com.foursoft.harness.kbl.v25.KblAliasIdentification; +import com.foursoft.harness.kbl.v25.KblCartesianPoint; +import com.foursoft.harness.kbl.v25.KblNode; +import com.foursoft.harness.kbl2vec.core.TestConversionOrchestrator; +import com.foursoft.harness.vec.v2x.VecAliasIdentification; +import com.foursoft.harness.vec.v2x.VecCartesianPoint3D; +import com.foursoft.harness.vec.v2x.VecGeometryNode3D; +import com.foursoft.harness.vec.v2x.VecTopologyNode; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +class GeometryNode3DTransformerTest { + + @Test + void should_transformGeometryNode3D() { + // Given + final GeometryNode3DTransformer transformer = new GeometryNode3DTransformer(); + final TestConversionOrchestrator orchestrator = new TestConversionOrchestrator(); + + final KblNode source = new KblNode(); + source.setId("TestId"); + + final KblCartesianPoint cartesianPoint = new KblCartesianPoint(); + source.setCartesianPoint(cartesianPoint); + + final VecCartesianPoint3D vecCartesianPoint3D = new VecCartesianPoint3D(); + orchestrator.addMockMapping(cartesianPoint, vecCartesianPoint3D); + + final VecTopologyNode vecTopologyNode = new VecTopologyNode(); + orchestrator.addMockMapping(source, vecTopologyNode); + + final KblAliasIdentification aliasIdentification = new KblAliasIdentification(); + source.getAliasIds().add(aliasIdentification); + + final VecAliasIdentification vecAliasIdentification = new VecAliasIdentification(); + orchestrator.addMockMapping(aliasIdentification, vecAliasIdentification); + + // When + final VecGeometryNode3D result = orchestrator.transform(transformer, source); + + // Then + assertThat(result).isNotNull() + .returns(vecTopologyNode, VecGeometryNode3D::getReferenceNode) + .returns("TestId", VecGeometryNode3D::getIdentification) + .returns(vecCartesianPoint3D, VecGeometryNode3D::getCartesianPoint) + .satisfies(v -> assertThat(v.getAliasIds()).containsExactly(vecAliasIdentification)); + } +} diff --git a/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_3d/GeometrySegment3DTransformerTest.java b/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_3d/GeometrySegment3DTransformerTest.java new file mode 100644 index 000000000..986cdfba3 --- /dev/null +++ b/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_3d/GeometrySegment3DTransformerTest.java @@ -0,0 +1,164 @@ +/*- + * ========================LICENSE_START================================= + * KBL to VEC Converter + * %% + * Copyright (C) 2025 4Soft GmbH + * %% + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * =========================LICENSE_END================================== + */ +package com.foursoft.harness.kbl2vec.transform.geometry.geo_3d; + +import com.foursoft.harness.kbl.v25.KblAliasIdentification; +import com.foursoft.harness.kbl.v25.KblNode; +import com.foursoft.harness.kbl.v25.KblSegment; +import com.foursoft.harness.kbl2vec.core.TestConversionOrchestrator; +import com.foursoft.harness.vec.v2x.VecAliasIdentification; +import com.foursoft.harness.vec.v2x.VecGeometryNode3D; +import com.foursoft.harness.vec.v2x.VecGeometrySegment3D; +import com.foursoft.harness.vec.v2x.VecTopologySegment; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +class GeometrySegment3DTransformerTest { + + @Test + void should_transformGeometry3DTransformer() { + // Given + final GeometrySegment3DTransformer transformer = new GeometrySegment3DTransformer(); + final TestConversionOrchestrator orchestrator = new TestConversionOrchestrator(); + + final KblSegment source = new KblSegment(); + source.setId("TestId"); + + source.getStartVectors().add(1.0); + source.getStartVectors().add(2.0); + source.getStartVectors().add(3.0); + source.getEndVectors().add(1.0); + source.getEndVectors().add(2.0); + source.getEndVectors().add(3.0); + + final KblNode startNode = new KblNode(); + final KblNode endNode = new KblNode(); + source.setStartNode(startNode); + source.setEndNode(endNode); + + final VecGeometryNode3D vecStartNode = new VecGeometryNode3D(); + final VecGeometryNode3D vecEndNode = new VecGeometryNode3D(); + orchestrator.addMockMapping(startNode, vecStartNode); + orchestrator.addMockMapping(endNode, vecEndNode); + + final VecTopologySegment vecTopologySegment = new VecTopologySegment(); + orchestrator.addMockMapping(source, vecTopologySegment); + + final KblAliasIdentification aliasIdentification = new KblAliasIdentification(); + source.getAliasIds().add(aliasIdentification); + + final VecAliasIdentification vecAliasIdentification = new VecAliasIdentification(); + orchestrator.addMockMapping(aliasIdentification, vecAliasIdentification); + + // When + final VecGeometrySegment3D result = orchestrator.transform(transformer, source); + + // Then + assertThat(result).isNotNull() + .returns("TestId", VecGeometrySegment3D::getIdentification) + .returns(vecEndNode, VecGeometrySegment3D::getEndNode) + .returns(vecStartNode, VecGeometrySegment3D::getStartNode) + .returns(vecTopologySegment, VecGeometrySegment3D::getReferenceSegment) + .satisfies(v -> assertThat(v.getStartVector().getX()).isEqualTo(1.0)) + .satisfies(v -> assertThat(v.getStartVector().getY()).isEqualTo(2.0)) + .satisfies(v -> assertThat(v.getStartVector().getZ()).isEqualTo(3.0)) + .satisfies(v -> assertThat(v.getEndVector().getX()).isEqualTo(1.0)) + .satisfies(v -> assertThat(v.getEndVector().getY()).isEqualTo(2.0)) + .satisfies(v -> assertThat(v.getEndVector().getZ()).isEqualTo(3.0)) + .satisfies(v -> assertThat(v.getAliasIds()).containsExactly(vecAliasIdentification)); + } + + @Test + void should_fillMissingCoordinatesWithZero() { + // Given + final GeometrySegment3DTransformer transformer = new GeometrySegment3DTransformer(); + final TestConversionOrchestrator orchestrator = new TestConversionOrchestrator(); + + final KblSegment source = new KblSegment(); + + source.getStartVectors().add(1.0); + source.getStartVectors().add(2.0); + source.getEndVectors().add(1.0); + + final KblNode startNode = new KblNode(); + final KblNode endNode = new KblNode(); + source.setStartNode(startNode); + source.setEndNode(endNode); + + final VecGeometryNode3D vecStartNode = new VecGeometryNode3D(); + final VecGeometryNode3D vecEndNode = new VecGeometryNode3D(); + orchestrator.addMockMapping(startNode, vecStartNode); + orchestrator.addMockMapping(endNode, vecEndNode); + + final VecTopologySegment vecTopologySegment = new VecTopologySegment(); + orchestrator.addMockMapping(source, vecTopologySegment); + + // When + final VecGeometrySegment3D result = orchestrator.transform(transformer, source); + + // Then + assertThat(result).isNotNull() + .returns(vecEndNode, VecGeometrySegment3D::getEndNode) + .returns(vecStartNode, VecGeometrySegment3D::getStartNode) + .satisfies(v -> assertThat(v.getStartVector().getX()).isEqualTo(1.0)) + .satisfies(v -> assertThat(v.getStartVector().getY()).isEqualTo(2.0)) + .satisfies(v -> assertThat(v.getStartVector().getZ()).isEqualTo(0.0)) + .satisfies(v -> assertThat(v.getEndVector().getX()).isEqualTo(1.0)) + .satisfies(v -> assertThat(v.getEndVector().getY()).isEqualTo(0.0)) + .satisfies(v -> assertThat(v.getEndVector().getZ()).isEqualTo(0.0)); + } + + @Test + void should_requireAtLeastOneCoordinate() { + // Given + final GeometrySegment3DTransformer transformer = new GeometrySegment3DTransformer(); + final TestConversionOrchestrator orchestrator = new TestConversionOrchestrator(); + + final KblSegment source = new KblSegment(); + + final KblNode startNode = new KblNode(); + final KblNode endNode = new KblNode(); + source.setStartNode(startNode); + source.setEndNode(endNode); + + final VecGeometryNode3D vecStartNode = new VecGeometryNode3D(); + final VecGeometryNode3D vecEndNode = new VecGeometryNode3D(); + orchestrator.addMockMapping(startNode, vecStartNode); + orchestrator.addMockMapping(endNode, vecEndNode); + + final VecTopologySegment vecTopologySegment = new VecTopologySegment(); + orchestrator.addMockMapping(source, vecTopologySegment); + + // When + final VecGeometrySegment3D result = orchestrator.transform(transformer, source); + + // Then + assertThat(result).isNotNull() + .returns(null, VecGeometrySegment3D::getStartVector) + .returns(null, VecGeometrySegment3D::getEndVector); + } +} diff --git a/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_3d/HarnessGeometrySpecification3DTransformerTest.java b/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_3d/HarnessGeometrySpecification3DTransformerTest.java new file mode 100644 index 000000000..a00167414 --- /dev/null +++ b/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/geometry/geo_3d/HarnessGeometrySpecification3DTransformerTest.java @@ -0,0 +1,68 @@ +/*- + * ========================LICENSE_START================================= + * KBL to VEC Converter + * %% + * Copyright (C) 2025 4Soft GmbH + * %% + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * =========================LICENSE_END================================== + */ +package com.foursoft.harness.kbl2vec.transform.geometry.geo_3d; + +import com.foursoft.harness.kbl.v25.KBLContainer; +import com.foursoft.harness.kbl.v25.KblCartesianPoint; +import com.foursoft.harness.kbl.v25.KblHarness; +import com.foursoft.harness.kbl2vec.core.TestConversionOrchestrator; +import com.foursoft.harness.vec.v2x.VecBuildingBlockPositioning3D; +import com.foursoft.harness.vec.v2x.VecHarnessGeometrySpecification3D; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +class HarnessGeometrySpecification3DTransformerTest { + + @Test + void should_transformHarnessGeometrySpecification3D() { + // Given + final HarnessGeometrySpecification3DTransformer transformer = new HarnessGeometrySpecification3DTransformer(); + final TestConversionOrchestrator orchestrator = new TestConversionOrchestrator(); + + final KblHarness source = new KblHarness(); + + final KblCartesianPoint cartesianPoint = new KblCartesianPoint(); + cartesianPoint.getCoordinates().add(1.0); + cartesianPoint.getCoordinates().add(2.0); + cartesianPoint.getCoordinates().add(3.0); + + final KBLContainer kblContainer = new KBLContainer(); + source.setParentKBLContainer(kblContainer); + source.getParentKBLContainer().getCartesianPoints().add(cartesianPoint); + + final VecBuildingBlockPositioning3D vecBuildingBlockPositioning3D = new VecBuildingBlockPositioning3D(); + orchestrator.addMockMapping(source, vecBuildingBlockPositioning3D); + + // When + final VecHarnessGeometrySpecification3D result = orchestrator.transform(transformer, source); + + // Then + assertThat(result).isNotNull() + .returns("Dmu", VecHarnessGeometrySpecification3D::getType) + .satisfies(v -> assertThat(v.getBuildingBlockPositionings()).contains(vecBuildingBlockPositioning3D)); + } +} diff --git a/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/topology/geometry/SegmentCrossSectionAreaTransformerTest.java b/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/topology/SegmentCrossSectionAreaTransformerTest.java similarity index 98% rename from kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/topology/geometry/SegmentCrossSectionAreaTransformerTest.java rename to kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/topology/SegmentCrossSectionAreaTransformerTest.java index b0a3dfab1..7fa857d34 100644 --- a/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/topology/geometry/SegmentCrossSectionAreaTransformerTest.java +++ b/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/transform/topology/SegmentCrossSectionAreaTransformerTest.java @@ -23,7 +23,7 @@ * THE SOFTWARE. * =========================LICENSE_END================================== */ -package com.foursoft.harness.kbl2vec.transform.topology.geometry; +package com.foursoft.harness.kbl2vec.transform.topology; import com.foursoft.harness.kbl.v25.KblCrossSectionArea; import com.foursoft.harness.kbl.v25.KblNumericalValue; diff --git a/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/utils/ListUtilsTest.java b/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/utils/ListUtilsTest.java new file mode 100644 index 000000000..8f272169f --- /dev/null +++ b/kbl2vec/src/test/java/com/foursoft/harness/kbl2vec/utils/ListUtilsTest.java @@ -0,0 +1,67 @@ +/*- + * ========================LICENSE_START================================= + * KBL to VEC Converter + * %% + * Copyright (C) 2025 4Soft GmbH + * %% + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * =========================LICENSE_END================================== + */ +package com.foursoft.harness.kbl2vec.utils; + +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; + +import static com.foursoft.harness.kbl2vec.utils.ListUtils.getElementOrDefault; +import static org.assertj.core.api.Assertions.assertThat; + +class ListUtilsTest { + + @Test + void should_returnDefaultValue() { + // Given + final List elements = new ArrayList<>(); + final double defaultValue = 0.0; + final int index = 0; + + // When + final double result = getElementOrDefault(elements, index, defaultValue); + + // Then + assertThat(result).isEqualTo(defaultValue); + } + + @Test + void should_returnElement() { + // Given + final List elements = new ArrayList<>(); + final double defaultValue = 0.0; + final int index = 0; + final double element = 1.0; + elements.add(element); + + // When + final double result = getElementOrDefault(elements, index, defaultValue); + + // Then + assertThat(result).isEqualTo(element); + } +}