diff --git a/.vscode/settings.json b/.vscode/settings.json index 58df4818..d56f5c16 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -12,4 +12,7 @@ "rust-analyzer.files.exclude": [ "packages/ducrs/src/duc_generated.rs" ], + "python.analysis.extraPaths": [ + "./packages/ducpy/src" + ], } diff --git a/package.json b/package.json index bfa124ff..74f96f29 100644 --- a/package.json +++ b/package.json @@ -67,6 +67,8 @@ "ducsvg:test": "turbo run test --filter=ducsvg", "ducpdf:build": "turbo build --filter=ducpdf", "ducpdf:test": "turbo run test --filter=ducpdf", + "ducdxf:test": "turbo run test --filter=ducdxf --force", + "ducdxf:build": "turbo build --filter=ducdxf", "semantic-release": "turbo run semantic-release", "sst:deploy": "bun sst:shell 'bun run sst:clean && sst unlock && sst refresh && sst deploy'", "sst:clean": "bun del-cli \".sst\" \"**/sst-env.d.ts\" \"**/sst.pyi\"", diff --git a/packages/ducdxf/.gitignore b/packages/ducdxf/.gitignore index a66c47ad..7a720003 100644 --- a/packages/ducdxf/.gitignore +++ b/packages/ducdxf/.gitignore @@ -1 +1,171 @@ +# Test files +dist/ +inputs/ + +# Auto-generated version file +**/_version.py + + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/latest/usage/project/#working-with-version-control +.pdm.toml +.pdm-python +.pdm-build/ + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ *.egg-info \ No newline at end of file diff --git a/packages/ducdxf/pyproject.toml b/packages/ducdxf/pyproject.toml index 4824a6ea..7ee7771d 100644 --- a/packages/ducdxf/pyproject.toml +++ b/packages/ducdxf/pyproject.toml @@ -6,7 +6,7 @@ readme = "README.md" requires-python = ">=3.10" dependencies = [ "ezdxf>=1.4.1", - "ducpy @ file://../ducpy" + "ducpy" ] license = { text = "MIT" } @@ -21,6 +21,9 @@ classifiers = [ "License :: OSI Approved :: MIT License", ] +[tool.uv.sources] +ducpy = { path = "../ducpy" } + [project.urls] "Homepage" = "https://duc.ducflair.com" "Source" = "https://github.com/ducflair/duc/tree/main/packages/ducdxf" diff --git a/packages/ducdxf/src/ducxf/common.py b/packages/ducdxf/src/ducxf/common.py index 16161bab..8d2ce63b 100644 --- a/packages/ducdxf/src/ducxf/common.py +++ b/packages/ducdxf/src/ducxf/common.py @@ -5,6 +5,7 @@ import math from enum import Enum from typing import Dict, List, Tuple, Any, Optional, Union +import re # Type definitions Point2D = Tuple[float, float] @@ -112,6 +113,293 @@ def get_duc_type(dxf_type: str) -> str: """Get the Duc element type for a given DXF entity type""" return ElementTypeMapping.DXF_TO_DUC.get(dxf_type, "draw") # Default to freehand drawing +# Linetype conversion utilities +class TextStyleConverter: + """Utilities for converting between DXF text styles and DUC text styles.""" + + # DXF generation flags bit masks + FLAG_BACKWARDS = 4 # Bit 2: Text is backwards (mirrored) + FLAG_UPSIDE_DOWN = 16 # Bit 4: Text is upside down + FLAG_VERTICAL = 32 # Bit 5: Vertical text + + @staticmethod + def parse_font_name(font_file: str) -> str: + """ + Parse font file name to extract font family. + + DXF stores font as file name (e.g., 'arial.ttf', 'romans.shx') + Convert to font family name for DUC. + + Args: + font_file: Font file name from DXF + + Returns: + Font family name suitable for DUC + """ + if not font_file: + return "Arial" # Default fallback + + # Remove file extension + font_name = font_file.lower() + for ext in ['.ttf', '.shx', '.otf', '.fon']: + if font_name.endswith(ext): + font_name = font_name[:-len(ext)] + break + + # Map common DXF/SHX font names to standard font families + font_mapping = { + 'monotxt': 'Courier New', + 'txt': 'Arial', + 'romans': 'Times New Roman', + 'romand': 'Times New Roman', + 'romanc': 'Times New Roman', + 'romant': 'Times New Roman', + 'italic': 'Times New Roman', + 'italict': 'Times New Roman', + 'scriptc': 'Brush Script MT', + 'scripts': 'Script MT', + 'arial': 'Arial', + 'times': 'Times New Roman', + 'courier': 'Courier New', + 'verdana': 'Verdana', + 'tahoma': 'Tahoma', + 'gothic': 'Century Gothic', + 'simplex': 'Arial', + 'complex': 'Arial', + } + + # Check for mapped font + for key, value in font_mapping.items(): + if key in font_name: + return value + + # Return capitalized font name if no mapping found + return font_name.capitalize() if font_name else "Arial" + + @staticmethod + def parse_generation_flags(flags: int) -> dict: + """ + Parse DXF text generation flags. + + Args: + flags: Integer bitfield from DXF + + Returns: + dict with: + - is_backwards: bool + - is_upside_down: bool + - is_vertical: bool + """ + return { + 'is_backwards': bool(flags & TextStyleConverter.FLAG_BACKWARDS), + 'is_upside_down': bool(flags & TextStyleConverter.FLAG_UPSIDE_DOWN), + 'is_vertical': bool(flags & TextStyleConverter.FLAG_VERTICAL) + } + + @staticmethod + def degrees_to_radians(degrees: float) -> float: + """ + Convert degrees to radians. + + Args: + degrees: Angle in degrees + + Returns: + Angle in radians + """ + import math + return math.radians(degrees) + + +class LinetypeConverter: + """Utilities for converting between DXF linetypes and DUC stroke styles.""" + + @staticmethod + def parse_dxf_pattern(pattern: List[Union[float, str]]) -> Dict[str, Any]: + """ + Parse DXF linetype pattern into DUC-compatible components. + + Args: + pattern: DXF pattern list where: + - First element may be total length (optional) + - Positive values = line segments + - Negative values = gaps + - Zero = dot + - String elements = complex pattern with text/shapes + + Returns: + dict with: + - dash_pattern: List of floats for simple dash patterns + - is_complex: Boolean indicating if pattern has text/shapes + - complex_elements: List of parsed complex elements (if any) + """ + result = { + "dash_pattern": [], + "is_complex": False, + "complex_elements": [], + "description": "" + } + + if not pattern: + return result + + # Convert pattern elements + dash_pattern = [] + for elem in pattern: + if isinstance(elem, str): + # Complex linetype with text or shapes + result["is_complex"] = True + parsed = LinetypeConverter._parse_complex_element(elem) + if parsed: + result["complex_elements"].append(parsed) + elif isinstance(elem, (int, float)): + # Simple numeric pattern element + # Convert to absolute value for dash pattern + # In DUC, dash pattern is [line, gap, line, gap, ...] + dash_pattern.append(abs(float(elem))) + + result["dash_pattern"] = dash_pattern + return result + + @staticmethod + def _parse_complex_element(element_str: str) -> Optional[Dict[str, Any]]: + """ + Parse complex linetype element (text or shape). + + Format examples: + - Text: ["GAS",STANDARD,S=.1,U=0.0,X=-0.1,Y=-.05] + - Shape: [132,ltypeshp.shx,x=-.1,s=.1] + + Args: + element_str: Complex element string from DXF + + Returns: + Parsed element dict or None if parsing fails + """ + # Remove brackets and split + clean_str = element_str.strip('[]') + if not clean_str: + return None + + parts = [p.strip() for p in clean_str.split(',')] + if not parts: + return None + + # Check if it's a text element (starts with quoted text) + if parts[0].startswith('"') or parts[0].startswith("'"): + return LinetypeConverter._parse_text_element(parts) + else: + return LinetypeConverter._parse_shape_element(parts) + + @staticmethod + def _parse_text_element(parts: List[str]) -> Dict[str, Any]: + """Parse text element from complex linetype.""" + result = { + "type": "text", + "text": parts[0].strip('"\"'), + "style": parts[1] if len(parts) > 1 else "STANDARD", + "scale": 0.1, + "rotation": 0.0, + "x_offset": 0.0, + "y_offset": 0.0 + } + + # Parse parameters like S=.1, U=0.0, X=-0.1, Y=-.05 + for part in parts[2:]: + if '=' in part: + key, value = part.split('=', 1) + key = key.strip().upper() + try: + val = float(value.strip()) + if key == 'S': + result['scale'] = val + elif key == 'U': + result['rotation'] = val + elif key == 'X': + result['x_offset'] = val + elif key == 'Y': + result['y_offset'] = val + except ValueError: + pass + + return result + + @staticmethod + def _parse_shape_element(parts: List[str]) -> Dict[str, Any]: + """Parse shape element from complex linetype.""" + result = { + "type": "shape", + "shape_index": 0, + "shape_file": "", + "scale": 0.1, + "x_offset": 0.0, + "y_offset": 0.0 + } + + # First part is shape index + try: + result["shape_index"] = int(parts[0]) + except ValueError: + pass + + # Second part is shape file + if len(parts) > 1: + result["shape_file"] = parts[1].strip() + + # Parse parameters like x=-.1, s=.1 + for part in parts[2:]: + if '=' in part: + key, value = part.split('=', 1) + key = key.strip().lower() + try: + val = float(value.strip()) + if key == 's': + result['scale'] = val + elif key == 'x': + result['x_offset'] = val + elif key == 'y': + result['y_offset'] = val + except ValueError: + pass + + return result + + @staticmethod + def convert_dxf_pattern_to_duc_dash(pattern: List[Union[float, str]]) -> List[float]: + """ + Convert DXF pattern to DUC dash pattern (simplified, ignoring complex elements). + + Args: + pattern: DXF pattern list + + Returns: + List of floats representing dash pattern [line, gap, line, gap, ...] + """ + parsed = LinetypeConverter.parse_dxf_pattern(pattern) + return parsed["dash_pattern"] + + @staticmethod + def pattern_to_description(name: str, pattern: List[Union[float, str]]) -> str: + """ + Generate a description for a linetype pattern. + + Args: + name: Linetype name + pattern: DXF pattern + + Returns: + Human-readable description + """ + parsed = LinetypeConverter.parse_dxf_pattern(pattern) + + if parsed["is_complex"]: + return f"{name} (complex pattern with {len(parsed['complex_elements'])} elements)" + elif parsed["dash_pattern"]: + return f"{name} (dash pattern)" + else: + return f"{name} (continuous)" + + # Stroke style mapping def map_stroke_style(duc_style: dict) -> Dict[str, Any]: """Map Duc stroke style to DXF linetype and other properties""" diff --git a/packages/ducdxf/src/ducxf/duc_to_dxf.py b/packages/ducdxf/src/ducxf/duc_to_dxf.py index be18fa3b..e69de29b 100644 --- a/packages/ducdxf/src/ducxf/duc_to_dxf.py +++ b/packages/ducdxf/src/ducxf/duc_to_dxf.py @@ -1,356 +0,0 @@ -""" -Module for converting DUC format to DXF format. -""" - -import os -import math -import base64 -from typing import Dict, List, Tuple, Any, Optional, Union -import tempfile -from pathlib import Path - -# Import ducpy for working with DUC files -try: - import ducpy -except ImportError: - raise ImportError("ducpy module is required. Install it using 'pip install ducpy'") - -# Import ezdxf for working with DXF files -try: - import ezdxf - from ezdxf.math import Vec2, Vec3 -except ImportError: - raise ImportError("ezdxf module is required. Install it with 'pip install ezdxf'") - -# Import common utilities -from .common import ( - DXF_SUPPORTED_VERSIONS, - DEFAULT_DXF_VERSION, - DEFAULT_LAYER, - ColorMapping, - ElementTypeMapping, - map_stroke_style, - Point2D, -) - -# Import shape detection utilities -from .utils.shape_detection import detect_shape - -def convert_duc_to_dxf( - duc_path: Union[str, Path], - dxf_path: Optional[Union[str, Path]] = None, - dxf_version: str = DEFAULT_DXF_VERSION, -) -> str: - """ - Convert a DUC file to DXF format. - - Args: - duc_path: Path to the DUC file - dxf_path: Optional path for the output DXF file. If not provided, - replaces the .duc extension with .dxf - dxf_version: DXF version to use (default: R2018) - - Returns: - Path to the created DXF file - """ - # Validate inputs - duc_path = Path(duc_path) - if not duc_path.exists(): - raise FileNotFoundError(f"DUC file not found: {duc_path}") - - if dxf_version not in DXF_SUPPORTED_VERSIONS: - raise ValueError(f"Unsupported DXF version: {dxf_version}. Supported versions: {', '.join(DXF_SUPPORTED_VERSIONS)}") - - # Determine output path if not provided - if dxf_path is None: - dxf_path = duc_path.with_suffix(".dxf") - else: - dxf_path = Path(dxf_path) - - # Parse the DUC file - duc_data = ducpy.parse.parse_duc(duc_path) - - # Create a new DXF document - doc = ezdxf.new(dxf_version) - msp = doc.modelspace() - - # Process all elements in the DUC file - if hasattr(duc_data, "elements") and duc_data.elements: - for element in duc_data.elements: - _add_element_to_dxf(element, msp, doc) - - # Save the DXF file - doc.saveas(dxf_path) - - return str(dxf_path) - -def _add_element_to_dxf(element: Any, msp: Any, doc: Any) -> None: - """ - Add a DUC element to the DXF modelspace. - - Args: - element: The DUC element to convert - msp: The DXF modelspace - doc: The DXF document - """ - # Skip elements without type or points - if not hasattr(element, "type") or not hasattr(element, "points") or not element.points: - return - - # Get element type - element_type = element.type.lower() if hasattr(element, "type") else "unknown" - - # Map to DXF entity type - dxf_type = ElementTypeMapping.get_dxf_type(element_type) - - # Get style properties - style_props = {} - if hasattr(element, "style"): - style_props = map_stroke_style(element.style) - - # Process based on element type - if element_type == "rectangle": - _add_rectangle(element, msp, style_props) - elif element_type == "ellipse": - _add_ellipse(element, msp, style_props) - elif element_type == "line": - _add_line(element, msp, style_props) - elif element_type == "text": - _add_text(element, msp, style_props) - elif element_type == "draw" or element_type == "polyline": - _add_polyline(element, msp, style_props) - elif element_type == "image": - _add_image(element, msp, doc, style_props) - # Add more element types as needed - else: - # Default to polyline for unknown types - _add_polyline(element, msp, style_props) - -def _add_rectangle(element: Any, msp: Any, style_props: Dict[str, Any]) -> None: - """Add a rectangle element to the DXF modelspace""" - # Extract points - points = _get_element_points(element) - if len(points) < 2: - return # Need at least 2 points for a rectangle - - # For a rectangle, we need to create a closed polyline with 4 vertices - # We assume the first and last points define opposite corners - x1, y1 = points[0] - x2, y2 = points[-1] - - # Create rectangle vertices - vertices = [ - (x1, y1), - (x2, y1), - (x2, y2), - (x1, y2), - (x1, y1) # Close the polyline - ] - - # Create polyline - polyline = msp.add_lwpolyline(vertices, dxfattribs=style_props) - polyline.close(True) # Ensure it's closed - -def _add_ellipse(element: Any, msp: Any, style_props: Dict[str, Any]) -> None: - """Add an ellipse element to the DXF modelspace""" - # Extract points - points = _get_element_points(element) - if len(points) < 2: - return # Need at least 2 points for an ellipse - - # For an ellipse, we need center and major/minor axis lengths - # We assume the first point is the center and calculate radii from bounds - - # Find bounding box - x_coords = [p[0] for p in points] - y_coords = [p[1] for p in points] - min_x, max_x = min(x_coords), max(x_coords) - min_y, max_y = min(y_coords), max(y_coords) - - # Calculate center and radius - center_x = (min_x + max_x) / 2 - center_y = (min_y + max_y) / 2 - radius_x = (max_x - min_x) / 2 - radius_y = (max_y - min_y) / 2 - - # If radii are very close, create a circle - if abs(radius_x - radius_y) < 0.001: - msp.add_circle((center_x, center_y, 0), radius_x, dxfattribs=style_props) - else: - # Create ellipse - DXF uses a different representation with major axis and ratio - major_axis = Vec3(radius_x, 0, 0) - ratio = radius_y / radius_x - msp.add_ellipse( - center=(center_x, center_y, 0), - major_axis=major_axis, - ratio=ratio, - dxfattribs=style_props - ) - -def _add_line(element: Any, msp: Any, style_props: Dict[str, Any]) -> None: - """Add a line element to the DXF modelspace""" - # Extract points - points = _get_element_points(element) - if len(points) < 2: - return # Need at least 2 points for a line - - # Create a simple line between first and last points - start_point = points[0] - end_point = points[-1] - - msp.add_line( - start=(start_point[0], start_point[1], 0), - end=(end_point[0], end_point[1], 0), - dxfattribs=style_props - ) - -def _add_text(element: Any, msp: Any, style_props: Dict[str, Any]) -> None: - """Add a text element to the DXF modelspace""" - # Extract text content - text_content = "" - if hasattr(element, "text"): - text_content = element.text - elif hasattr(element, "content") and hasattr(element.content, "text"): - text_content = element.content.text - - if not text_content: - return # No text to add - - # Extract position (use first point as insertion point) - points = _get_element_points(element) - if not points: - return # No position information - - insertion_point = (points[0][0], points[0][1], 0) - - # Extract text properties - text_height = 2.5 # Default height - if hasattr(element, "style") and "fontSize" in element.style: - text_height = element.style["fontSize"] / 10 # Scale appropriately - - # Text alignment - halign = "LEFT" # Default - valign = "BASELINE" # Default - if hasattr(element, "style") and "textAlign" in element.style: - align = element.style["textAlign"].upper() - if align == "CENTER": - halign = "CENTER" - elif align == "RIGHT": - halign = "RIGHT" - - # Combine style props with text-specific attributes - text_props = { - **style_props, - "height": text_height, - "style": "Standard", # Default text style - } - - # Add text entity - msp.add_text( - text=text_content, - dxfattribs=text_props, - insert=insertion_point, - halign=halign, - valign=valign - ) - -def _add_polyline(element: Any, msp: Any, style_props: Dict[str, Any]) -> None: - """Add a polyline element to the DXF modelspace""" - # Extract points - points = _get_element_points(element) - if len(points) < 2: - return # Need at least 2 points for a polyline - - # Determine if the polyline should be closed - closed = False - if hasattr(element, "closed") and element.closed: - closed = True - - # Add the polyline - polyline = msp.add_lwpolyline(points, dxfattribs=style_props) - if closed: - polyline.close(True) - -def _add_image(element: Any, msp: Any, doc: Any, style_props: Dict[str, Any]) -> None: - """Add an image element to the DXF modelspace""" - # Check if we have image data - image_data = None - if hasattr(element, "image") and hasattr(element.image, "data"): - image_data = element.image.data - elif hasattr(element, "content") and hasattr(element.content, "data"): - image_data = element.content.data - - if not image_data: - return # No image data - - # Extract position and size information - points = _get_element_points(element) - if len(points) < 2: - return # Need at least 2 points for image bounds - - # Find bounding box - x_coords = [p[0] for p in points] - y_coords = [p[1] for p in points] - min_x, max_x = min(x_coords), max(x_coords) - min_y, max_y = min(y_coords), max(y_coords) - - # Image size - width = max_x - min_x - height = max_y - min_y - - # Save image data to temporary file - with tempfile.NamedTemporaryFile(suffix=".png", delete=False) as temp_file: - # Decode base64 data if needed - if isinstance(image_data, str) and image_data.startswith("data:image"): - # Extract the base64 part - img_format, img_data = image_data.split(",", 1) - binary_data = base64.b64decode(img_data) - temp_file.write(binary_data) - elif isinstance(image_data, bytes): - temp_file.write(image_data) - else: - return # Unsupported image data format - - temp_file_path = temp_file.name - - try: - # Add image definition - img_def = doc.add_image_def(filename=temp_file_path, size_in_pixels=(width, height)) - - # Add image to modelspace - msp.add_image( - image_def=img_def, - insert=(min_x, min_y, 0), # Lower-left corner - size_in_units=(width, height), - rotation=0 - ) - finally: - # Clean up temporary file - try: - os.unlink(temp_file_path) - except: - pass - -def _get_element_points(element: Any) -> List[Point2D]: - """ - Extract points from a DUC element. - - Args: - element: The DUC element - - Returns: - List of points as (x, y) tuples - """ - points = [] - - # Check for points attribute - if hasattr(element, "points") and element.points: - for point in element.points: - if hasattr(point, "x") and hasattr(point, "y"): - points.append((point.x, point.y)) - elif isinstance(point, (list, tuple)) and len(point) >= 2: - points.append((point[0], point[1])) - - return points - -# Additional helper functions can be added as needed \ No newline at end of file diff --git a/packages/ducdxf/src/ducxf/dxf_to_duc.py b/packages/ducdxf/src/ducxf/dxf_to_duc.py index a9f854ca..a4b4d016 100644 --- a/packages/ducdxf/src/ducxf/dxf_to_duc.py +++ b/packages/ducdxf/src/ducxf/dxf_to_duc.py @@ -1,590 +1,717 @@ """ -Module for converting DXF format to DUC format. -""" +This script provides a comprehensive conversion from DXF to DUC file format. + +It aims for a high-fidelity conversion by processing the DXF structure in a +specific order: Header, Tables (Layers, Styles), Blocks, and finally Entities. +This ensures that all definitions and styles are available before the entities +that use them are processed. +The script uses 'ezdxf' for robust DXF parsing and 'ducpy' for building the +DUC file structure, referencing the patterns seen in the +'test_a_duc_with_everything.py' example for DUC object creation. +""" +import argparse import os import math -import base64 -import uuid -from typing import Dict, List, Tuple, Any, Optional, Union, Set -from pathlib import Path -import tempfile - -# Import ducpy for working with DUC files -try: - import ducpy - from ducpy.utils import ElementTypes -except ImportError: - raise ImportError("ducpy module is required. Install it using 'pip install ducpy'") - -# Import ezdxf for working with DXF files -try: - import ezdxf - from ezdxf.layouts import Modelspace - from ezdxf.entities import DXFEntity -except ImportError: - raise ImportError("ezdxf module is required. Install it with 'pip install ezdxf'") - -# Import common utilities -from .common import ( - DEFAULT_LAYER, - ColorMapping, - ElementTypeMapping, - Point2D, -) - -# Import shape detection utilities -from .utils.shape_detection import detect_shape - -def convert_dxf_to_duc( - dxf_path: Union[str, Path], - duc_path: Optional[Union[str, Path]] = None, -) -> str: +import ezdxf +from ezdxf.entities import Attrib, Insert +from ezdxf.enums import MTextLineAlignment +from ezdxf.math import OCS +import ducpy as duc +import ezdxf.enums + +from ducpy.Duc.STROKE_PLACEMENT import STROKE_PLACEMENT +from ducpy.Duc.TEXT_ALIGN import TEXT_ALIGN +from ducpy.Duc.VERTICAL_ALIGN import VERTICAL_ALIGN +from ducpy.Duc.STROKE_PREFERENCE import STROKE_PREFERENCE +from ducpy.Duc.DIMENSION_UNITS_FORMAT import DIMENSION_UNITS_FORMAT +from ducpy.Duc.ANGULAR_UNITS_FORMAT import ANGULAR_UNITS_FORMAT +from ducpy.Duc.DECIMAL_SEPARATOR import DECIMAL_SEPARATOR +from ducpy.Duc.STROKE_CAP import STROKE_CAP +from ducpy.Duc.STROKE_JOIN import STROKE_JOIN +from ducpy.Duc.STROKE_SIDE_PREFERENCE import STROKE_SIDE_PREFERENCE +from ducpy.Duc.UNIT_SYSTEM import UNIT_SYSTEM +from .common import LinetypeConverter, TextStyleConverter + +# A comprehensive mapping of AutoCAD Color Index (ACI) to HEX values. +ACI_TO_HEX = { + 0: "#000000", 1: "#FF0000", 2: "#FFFF00", 3: "#00FF00", 4: "#00FFFF", + 5: "#0000FF", 6: "#FF00FF", 7: "#FFFFFF", 8: "#4D4D4D", 9: "#999999", + # ... A more extensive list can be added for full coverage. +} + +DXF_INSERT_UNITS = ezdxf.enums.InsertUnits +INSUNITS_TO_DUC_UNITS = { + DXF_INSERT_UNITS.Unitless: "mm", DXF_INSERT_UNITS.Inches: "in", DXF_INSERT_UNITS.Feet: "ft", + DXF_INSERT_UNITS.Miles: "mi", DXF_INSERT_UNITS.Millimeters: "mm", DXF_INSERT_UNITS.Centimeters: "cm", DXF_INSERT_UNITS.Meters: "m", DXF_INSERT_UNITS.Kilometers: "km",DXF_INSERT_UNITS.Microinches: "µin", + DXF_INSERT_UNITS.Mils: "mil", DXF_INSERT_UNITS.Yards: "yd", DXF_INSERT_UNITS.Angstroms: "Å", + DXF_INSERT_UNITS.Nanometers: "nm",DXF_INSERT_UNITS.Microns: "µm", DXF_INSERT_UNITS.Decimeters: "dm", + DXF_INSERT_UNITS.Decameters: "dam", DXF_INSERT_UNITS.Hectometers: "hm", DXF_INSERT_UNITS.Gigameters: "Gm", DXF_INSERT_UNITS.AstronomicalUnits: "au", DXF_INSERT_UNITS.Lightyears: "ly", DXF_INSERT_UNITS.Parsecs: "pc", DXF_INSERT_UNITS.USSurveyFeet: "ft-us", DXF_INSERT_UNITS.USSurveyInch: "in-us", DXF_INSERT_UNITS.USSurveyYard: "yd-us", DXF_INSERT_UNITS.USSurveyMile: "mi-us", +} + +DXF_LENGTH_UNITS = ezdxf.enums.LengthUnits +LUNITS_TO_DUC = { + DXF_LENGTH_UNITS.Scientific: DIMENSION_UNITS_FORMAT.SCIENTIFIC, + DXF_LENGTH_UNITS.Decimal: DIMENSION_UNITS_FORMAT.DECIMAL, + DXF_LENGTH_UNITS.Engineering: DIMENSION_UNITS_FORMAT.ENGINEERING, + DXF_LENGTH_UNITS.Architectural: DIMENSION_UNITS_FORMAT.ARCHITECTURAL, + DXF_LENGTH_UNITS.Fractional: DIMENSION_UNITS_FORMAT.FRACTIONAL, +} + +DXF_ANGULAR_UNITS = ezdxf.enums.AngularUnits +AUNITS_TO_DUC = { + DXF_ANGULAR_UNITS.DecimalDegrees: ANGULAR_UNITS_FORMAT.DECIMAL_DEGREES, + DXF_ANGULAR_UNITS.DegreesMinutesSeconds: ANGULAR_UNITS_FORMAT.DEGREES_MINUTES_SECONDS, + DXF_ANGULAR_UNITS.Grad: ANGULAR_UNITS_FORMAT.GRADS, + DXF_ANGULAR_UNITS.Radians: ANGULAR_UNITS_FORMAT.RADIANS, +} + +def get_hex_from_aci(aci): + """Converts an ACI color index to a HEX string with a fallback.""" + return ACI_TO_HEX.get(aci, "#FFFFFF") # Default to white + +def convert_header(header, doc): """ - Convert a DXF file to DUC format. - - Args: - dxf_path: Path to the DXF file - duc_path: Optional path for the output DUC file. If not provided, - replaces the .dxf extension with .duc + Convert DXF header variables to DUC global and local states. Returns: - Path to the created DUC file - """ - # Validate inputs - dxf_path = Path(dxf_path) - if not dxf_path.exists(): - raise FileNotFoundError(f"DXF file not found: {dxf_path}") - - # Determine output path if not provided - if duc_path is None: - duc_path = dxf_path.with_suffix(".duc") - else: - duc_path = Path(duc_path) - - # Load the DXF file + tuple: (duc_global_state, duc_local_state, conversion_context) + conversion_context contains: + - current_layer: name of the current layer + - current_dimstyle: name of the current dimension style + - current_mleaderstyle: name of the current multileader style + - celtscale: current entity linetype scale + - standard_units: StandardUnits for use in Standards creation + - current_textstyle_name: name of the current text style + - font_family: extracted font family from text style + - font_size: extracted font size from text style + """ + + # Extract units and view information from the header + units = header.get("$INSUNITS", 0) # Default to unitless + linear_units_dxf = header.get("$LUNITS", 1) # Default to scientific + angular_units_dxf = header.get("$AUNITS", 0) # Default to decimal degrees + measurement = header.get("$MEASUREMENT", 0) # 0=English/Imperial, 1=Metric + + # Get the Standard dimension style for precision and suppression settings + dimstyle = None try: - dxf_doc = ezdxf.readfile(dxf_path) - except Exception as e: - raise ValueError(f"Failed to read DXF file: {e}") - - # Create a DUC document structure - duc_doc = _create_empty_duc_document() - - # Get modelspace - msp = dxf_doc.modelspace() - - # Process all entities in modelspace - for entity in msp: - # Skip non-graphical entities - if not hasattr(entity, "dxftype"): - continue + dimstyle = doc.dimstyles.get('Standard') + except: + # Standard dimstyle might not exist, will use defaults + pass + + if dimstyle: + # Precision is stored in dimension style DIMTDEC (linear unit decimal places) + precision = dimstyle.dxf.get('dimtdec', 2) # Default to 2 decimal places - # Convert entity to DUC element - duc_element = _convert_entity_to_duc_element(entity) - if duc_element: - duc_doc["elements"].append(duc_element) - - # Create binary files collection (for images) - binary_files = _process_images(dxf_doc, msp) - if binary_files: - duc_doc["binaryFiles"] = binary_files - - # Create app state - duc_doc["appState"] = _create_app_state() - - # Serialize DUC document - ducpy.serialize.serialize_duc(duc_doc, duc_path) - - return str(duc_path) + # DIMTZIN is a bitfield controlling suppressions + # Bit 0: suppress trailing zeros + # Bit 1: suppress trailing inches + # Bit 2: suppress leading zeros + # Bit 3: suppress feet designation + # Bit 4: suppress inches designation + dimtzin = dimstyle.dxf.get('dimtzin', 0) + suppress_trailing_zeros = bool(dimtzin & (1 << 0)) + suppress_leading_zeros = bool(dimtzin & (1 << 2)) + suppress_zero_feet = bool(dimtzin & (1 << 3)) + suppress_zero_inches = bool(dimtzin & (1 << 4)) + + # Decimal separator from DIMDSEP (integer code: 46 = '.', 44 = ',') + dimdsep_code = dimstyle.dxf.get('dimdsep', 46) + decimal_sep = DECIMAL_SEPARATOR.COMMA if dimdsep_code == 44 else DECIMAL_SEPARATOR.DOT + else: + # Fallback defaults + precision = 2 + suppress_trailing_zeros = False + suppress_leading_zeros = False + suppress_zero_feet = False + suppress_zero_inches = False + decimal_sep = DECIMAL_SEPARATOR.DOT + + # Determine unit system from $MEASUREMENT or $INSUNITS + unit_system = UNIT_SYSTEM.METRIC if measurement == 1 else UNIT_SYSTEM.IMPERIAL -def _create_empty_duc_document() -> Dict[str, Any]: - """ - Create an empty DUC document structure. - - Returns: - Dict with the basic DUC document structure - """ - return { - "version": 1, - "elements": [], - "appState": {}, - "binaryFiles": {} - } + # ============================================================================ + # UNIT SYSTEMS - Create linear and angular unit systems + # ============================================================================ + + linear_units = duc.create_linear_unit_system( + precision=precision, + suppress_leading_zeros=suppress_leading_zeros, + suppress_trailing_zeros=suppress_trailing_zeros, + system=unit_system, + suppress_zero_feet=suppress_zero_feet, + suppress_zero_inches=suppress_zero_inches, + format=LUNITS_TO_DUC[linear_units_dxf], + decimal_separator=decimal_sep, + ) + + # Angular precision (DIMALTTD in dimension style for angular decimal places) + angular_precision = dimstyle.dxf.get('dimalttd', 2) if dimstyle else 2 + + angular_units = duc.create_angular_unit_system( + precision=angular_precision, + suppress_leading_zeros=suppress_leading_zeros, + suppress_trailing_zeros=suppress_trailing_zeros, + system=unit_system, + format=AUNITS_TO_DUC[angular_units_dxf], + ) -def _create_app_state() -> Dict[str, Any]: - """ - Create a basic app state for the DUC document. - - Returns: - Dict with app state information - """ - return { - "viewportX": 0, - "viewportY": 0, - "viewportZoom": 1, - "selectedElementIds": [], - "currentItemType": "select" + primary_units = duc.create_primary_units(linear=linear_units, angular=angular_units) + standard_units = duc.create_standard_units(primary_units=primary_units, alternate_units=None) + + # ============================================================================ + # GLOBAL STATE - Drawing-wide settings + # ============================================================================ + + # $LTSCALE: Global linetype scale + ltscale = header.get("$LTSCALE", 1.0) + + # $CANNOSCALE: Current annotation scale (handle annotative scaling) + # This is stored as a string like "1:1" or "1:2" + cannoscale = header.get("$CANNOSCALE", None) + use_annotative = cannoscale is not None + + duc_global_state = (duc.StateBuilder().build_global_state() + .with_main_scope(INSUNITS_TO_DUC_UNITS[units]) + .with_dash_spacing_scale(ltscale) + .with_use_annotative_scaling(use_annotative) + .build()) + + # ============================================================================ + # LOCAL STATE - Session/user settings + # ============================================================================ + + # $FILLMODE: Fill mode (1=on, 0=off) - maps to outline_mode_enabled (inverse) + fillmode = header.get("$FILLMODE", 1) + outline_mode = not bool(fillmode) # Inverse: fillmode=1 means fills are shown, outline_mode=False + + # $TEXTSTYLE: Current text style + current_textstyle_name = header.get("$TEXTSTYLE", "Standard") + # Get the actual text style from the document + font_family = "Arial" # Default fallback + font_size = 2.5 # Default fallback + if current_textstyle_name in doc.styles: + textstyle = doc.styles.get(current_textstyle_name) + # DXF text styles store font information + if hasattr(textstyle.dxf, 'font'): + font_family = textstyle.dxf.font + if hasattr(textstyle.dxf, 'height') and textstyle.dxf.height > 0: + font_size = textstyle.dxf.height + + # $CLAYER: Current layer name + current_layer = header.get("$CLAYER", "0") + + # $DIMSTYLE: Current dimension style + current_dimstyle = header.get("$DIMSTYLE", "Standard") + + # $MLEADERSTYLE: Current multileader style (DXF R2007+) + current_mleaderstyle = header.get("$MLEADERSTYLE", "Standard") + + # $CELTSCALE: Current entity linetype scale + # This affects individual entities, not stored in global/local state + # but will be used when converting entities + celtscale = header.get("$CELTSCALE", 1.0) + + duc_local_state = (duc.StateBuilder().build_local_state() + .with_scope(INSUNITS_TO_DUC_UNITS[units]) + .with_outline_mode_enabled(outline_mode) + .build()) + + # Store conversion context for use when converting entities and styles + conversion_context = { + 'current_layer': current_layer, + 'current_dimstyle': current_dimstyle, + 'current_mleaderstyle': current_mleaderstyle, + 'celtscale': celtscale, + 'standard_units': standard_units, + 'current_textstyle_name': current_textstyle_name, + 'font_family': font_family, + 'font_size': font_size, } + + return duc_global_state, duc_local_state, conversion_context + -def _convert_entity_to_duc_element(entity: DXFEntity) -> Optional[Dict[str, Any]]: +def linetype_to_dash_pattern(linetype_name): """ - Convert a DXF entity to a DUC element. + Convert DXF linetype name to DUC stroke dash pattern. Args: - entity: The DXF entity to convert - + linetype_name: Name of the DXF linetype + Returns: - Dict representing the DUC element, or None if conversion is not possible - """ - dxf_type = entity.dxftype() - - # Map DXF type to DUC type - duc_type = ElementTypeMapping.get_duc_type(dxf_type) - - # Get entity properties - common_props = _get_common_entity_props(entity) - - # Create base element structure - element = { - "id": str(uuid.uuid4()), - "type": duc_type, - "x": 0, - "y": 0, - "width": 0, - "height": 0, - "points": [], - "style": _convert_entity_style(entity), - "isLocked": False, - "isDeleted": False, - "groupIds": [], - **common_props + list: Dash pattern as [dash, gap, dash, gap, ...] or empty list for solid + """ + linetype_name = linetype_name.upper() + + # Common AutoCAD linetypes + LINETYPE_PATTERNS = { + 'CONTINUOUS': [], + 'BYLAYER': [], + 'BYBLOCK': [], + 'DASHED': [5.0, 2.5], + 'DASHDOT': [5.0, 2.5, 0.5, 2.5], + 'DASHDOTX2': [10.0, 5.0, 1.0, 5.0], + 'DASHED2': [10.0, 5.0], + 'DASHEDX2': [10.0, 5.0], + 'DOT': [0.5, 2.5], + 'DOTX2': [1.0, 5.0], + 'HIDDEN': [2.5, 1.25], + 'HIDDENX2': [5.0, 2.5], + 'PHANTOM': [12.5, 2.5, 2.5, 2.5, 2.5, 2.5], + 'PHANTOMX2': [25.0, 5.0, 5.0, 5.0, 5.0, 5.0], + 'CENTER': [12.5, 2.5, 2.5, 2.5], + 'CENTERX2': [25.0, 5.0, 5.0, 5.0], + 'DIVIDE': [12.5, 2.5, 2.5, 2.5, 2.5, 2.5], + 'DIVIDEX2': [25.0, 5.0, 5.0, 5.0, 5.0, 5.0], + 'BORDER': [12.5, 2.5, 12.5, 2.5, 2.5, 2.5], + 'BORDERX2': [25.0, 5.0, 25.0, 5.0, 5.0, 5.0], } - # Handle specific entity types - if dxf_type == "LINE": - _convert_line(entity, element) - elif dxf_type == "LWPOLYLINE": - _convert_lwpolyline(entity, element) - elif dxf_type == "POLYLINE": - _convert_polyline(entity, element) - elif dxf_type == "CIRCLE": - _convert_circle(entity, element) - elif dxf_type == "ELLIPSE": - _convert_ellipse(entity, element) - elif dxf_type == "TEXT" or dxf_type == "MTEXT": - _convert_text(entity, element) - elif dxf_type == "IMAGE": - _convert_image(entity, element) - elif dxf_type == "HATCH": - _convert_hatch(entity, element) - else: - # Unsupported entity type - return None - - # Calculate bounding box - if element["points"]: - x_coords = [p["x"] for p in element["points"]] - y_coords = [p["y"] for p in element["points"]] - - element["x"] = min(x_coords) - element["y"] = min(y_coords) - element["width"] = max(x_coords) - element["x"] - element["height"] = max(y_coords) - element["y"] - - return element + return LINETYPE_PATTERNS.get(linetype_name, []) # Default to solid/continuous + -def _get_common_entity_props(entity: DXFEntity) -> Dict[str, Any]: +def lineweight_to_width(lineweight): """ - Extract common properties from a DXF entity. + Convert DXF lineweight to DUC stroke width in mm. Args: - entity: The DXF entity - + lineweight: DXF lineweight value (in 1/100 mm, or special values) + -1 = BYLAYER, -2 = BYBLOCK, -3 = DEFAULT + Returns: - Dict with common properties + float: Stroke width in mm, or None for special values """ - props = {} - - # Layer information - if hasattr(entity, "dxf") and hasattr(entity.dxf, "layer"): - layer = entity.dxf.layer - if layer and layer != "0": - props["layer"] = layer + if lineweight < 0: + # Special values: -1 (BYLAYER), -2 (BYBLOCK), -3 (DEFAULT) + return None - return props + # Convert from 1/100 mm to mm + return lineweight / 100.0 -def _convert_entity_style(entity: DXFEntity) -> Dict[str, Any]: + +def convert_layers(doc): """ - Convert DXF entity style properties to DUC style. + Convert DXF layer table to DUC layers. Args: - entity: The DXF entity - + doc: ezdxf document with layer table + Returns: - Dict with DUC style properties + list: List of DucLayer objects """ - style = { - "stroke": { - "width": 1, - "style": "solid", - "color": [0, 0, 0, 1] # Default black - }, - "fill": None - } + duc_layers = [] - # Color - if hasattr(entity, "dxf") and hasattr(entity.dxf, "color"): - aci_color = entity.dxf.color - rgba = ColorMapping.aci_to_duc_rgba(aci_color) - style["stroke"]["color"] = list(rgba) - - # Line weight - if hasattr(entity, "dxf") and hasattr(entity.dxf, "lineweight"): - # Convert from DXF lineweight to DUC stroke width - # DXF: lineweight is in 100th of mm, -1 means default - lineweight = entity.dxf.lineweight - if lineweight > 0: - style["stroke"]["width"] = lineweight / 100 # Scale appropriately - - # Line type - if hasattr(entity, "dxf") and hasattr(entity.dxf, "linetype"): - linetype = entity.dxf.linetype - if linetype == "DASHED": - style["stroke"]["style"] = "dashed" - elif linetype == "DOTTED": - style["stroke"]["style"] = "dotted" - # Add more mappings as needed - - return style - -def _convert_line(entity: DXFEntity, element: Dict[str, Any]) -> None: - """ - Convert DXF LINE entity to DUC line element. - - Args: - entity: The DXF LINE entity - element: The DUC element dict to update - """ - # Get start and end points - start_point = (entity.dxf.start.x, entity.dxf.start.y) - end_point = (entity.dxf.end.x, entity.dxf.end.y) + for layer in doc.layers: + # Get layer properties + layer_name = layer.dxf.name + + # State flags + is_on = layer.is_on() + is_frozen = layer.is_frozen() + is_locked = layer.is_locked() + is_plot = not layer.dxf.get('plot', 1) == 0 # 0 = no plot, 1 = plot (default) + is_visible = is_on and not is_frozen + + # Color: Try RGB first, fall back to ACI + color_hex = "#FFFFFF" # Default white + if layer.rgb: + r, g, b = layer.rgb + color_hex = f"#{r:02X}{g:02X}{b:02X}" + else: + aci_color = layer.get_color() + color_hex = get_hex_from_aci(aci_color) + + # Transparency: 0.0 = opaque, 1.0 = fully transparent + transparency = layer.transparency if hasattr(layer, 'transparency') else 0.0 + opacity = 1.0 - transparency + + # Linetype and dash pattern + linetype = layer.dxf.linetype if hasattr(layer.dxf, 'linetype') else 'CONTINUOUS' + dash_pattern = linetype_to_dash_pattern(linetype) + + # Lineweight + lineweight = layer.dxf.get('lineweight', -1) + stroke_width = lineweight_to_width(lineweight) + if stroke_width is None: + stroke_width = 0.25 # Default to 0.25mm + + # Build DucLayer using ducpy builders + duc_layer = ( + duc.StateBuilder() + .with_id(layer_name) # Use layer name as ID + .build_layer() + .with_label(layer_name) + .with_is_visible(is_visible) + .with_is_plot(is_plot) + .with_locked(is_locked) + .with_opacity(opacity) + .with_stroke_color(color_hex) + .with_background_color("#FFFFFF") # Default background + .build() + ) + + # Note: dash_pattern and stroke_width would need to be applied + # during element creation, as layer overrides in DUC only store + # basic stroke/background, not all stroke properties + + duc_layers.append(duc_layer) - # Add points to the element - element["points"] = [ - {"x": start_point[0], "y": start_point[1]}, - {"x": end_point[0], "y": end_point[1]} - ] + return duc_layers -def _convert_lwpolyline(entity: DXFEntity, element: Dict[str, Any]) -> None: - """ - Convert DXF LWPOLYLINE entity to DUC element. - - Args: - entity: The DXF LWPOLYLINE entity - element: The DUC element dict to update - """ - # Get all vertices - points = [] - for vertex in entity.vertices(): - # LWPOLYLINE vertices are (x, y, bulge) tuples - x, y = vertex[0], vertex[1] - points.append({"x": x, "y": y}) - - # Add points to the element - element["points"] = points - - # Set closed property - if hasattr(entity, "closed") and entity.closed: - element["closed"] = True - - # Try to detect common shapes - element["type"] = detect_shape(points) -def _convert_polyline(entity: DXFEntity, element: Dict[str, Any]) -> None: +def convert_linetypes(doc): """ - Convert DXF POLYLINE entity to DUC element. + Convert DXF linetype table to DUC common styles with stroke patterns. Args: - entity: The DXF POLYLINE entity - element: The DUC element dict to update + doc: ezdxf document with linetype table + + Returns: + list: List of IdentifiedCommonStyle objects for use in StandardStyles """ - # Get all vertices - points = [] - for vertex in entity.vertices(): - # Extract x, y coordinates from vertex - if hasattr(vertex, "dxf"): - x, y = vertex.dxf.location.x, vertex.dxf.location.y - points.append({"x": x, "y": y}) + linetype_styles = [] - # Add points to the element - element["points"] = points - - # Set closed property - if hasattr(entity, "is_closed") and entity.is_closed: - element["closed"] = True + for linetype in doc.linetypes: + linetype_name = linetype.dxf.name + + # Skip special linetypes that shouldn't be converted to styles + if linetype_name.upper() in ['BYLAYER', 'BYBLOCK', 'CONTINUOUS']: + continue + + # Get linetype properties + description = linetype.dxf.get('description', '') + + # Get pattern data + # In ezdxf, the pattern is accessed via pattern_tags + pattern = [] + if hasattr(linetype, 'pattern_tags'): + # Extract pattern from tags + for tag in linetype.pattern_tags.tags: + if tag[0] == 49: # Dash/dot/gap length + pattern.append(tag[1]) + elif tag[0] == 74: # Complex linetype flag + # This indicates a complex linetype with text/shapes + pass + + # If no pattern found, try to get it from the simple pattern attribute + if not pattern and hasattr(linetype.dxf, 'pattern'): + pattern = list(linetype.dxf.pattern) if linetype.dxf.pattern else [] + + # Parse the pattern using our converter + parsed = LinetypeConverter.parse_dxf_pattern(pattern) + dash_pattern = parsed["dash_pattern"] + is_complex = parsed["is_complex"] + + # Determine stroke preference based on pattern + if not dash_pattern or len(dash_pattern) == 0: + stroke_preference = STROKE_PREFERENCE.SOLID + else: + stroke_preference = getattr(STROKE_PREFERENCE, "DASHED", STROKE_PREFERENCE.SOLID) + + # Create stroke style with dash pattern + stroke_style = duc.StrokeStyle( + dash=dash_pattern, + dash_line_override="", # Could be used for complex linetypes in future + preference=stroke_preference, + cap=STROKE_CAP.BUTT, # DXF typically uses butt caps + join=STROKE_JOIN.MITER, + dash_cap=STROKE_CAP.BUTT, + miter_limit=4.0 + ) + + # Create stroke sides (all sides by default) + stroke_sides = duc.StrokeSides( + values=[], + preference=STROKE_SIDE_PREFERENCE.ALL + ) + + # Create solid black stroke content + stroke_content = duc.create_solid_content("#000000", opacity=1.0, visible=True) + + # Create element stroke + element_stroke = duc.ElementStroke( + content=stroke_content, + width=1.0, # Default width, can be overridden per element + style=stroke_style, + stroke_sides=stroke_sides, + placement=STROKE_PLACEMENT.CENTER + ) + + # Create transparent background + background_content = duc.create_solid_content("#FFFFFF", opacity=0.0, visible=False) + element_background = duc.ElementBackground(content=background_content) + + # Create common style + common_style = duc.DucCommonStyle( + background=element_background, + stroke=element_stroke + ) + + # Create identifier for the style + style_id = duc.create_identifier( + id=f"linetype_{linetype_name.lower()}", + name=linetype_name, + description=description or LinetypeConverter.pattern_to_description(linetype_name, pattern) + ) + + # Create identified common style + identified_style = duc.IdentifiedCommonStyle( + id=style_id, + style=common_style + ) + + linetype_styles.append(identified_style) + + # Log conversion info + if is_complex: + print(f" ⚠ Linetype '{linetype_name}': Complex pattern simplified (text/shapes not fully supported)") + else: + print(f" ✓ Linetype '{linetype_name}': Converted with {len(dash_pattern)} pattern elements") - # Try to detect common shapes - element["type"] = detect_shape(points) + return linetype_styles + -def _convert_circle(entity: DXFEntity, element: Dict[str, Any]) -> None: +def convert_text_styles(doc): """ - Convert DXF CIRCLE entity to DUC ellipse element. + Convert DXF text style table to DUC text styles. Args: - entity: The DXF CIRCLE entity - element: The DUC element dict to update - """ - # Set type to ellipse (circle is a special case) - element["type"] = "ellipse" - - # Get center and radius - center_x = entity.dxf.center.x - center_y = entity.dxf.center.y - radius = entity.dxf.radius - - # Create points for a circle - # We use 4 points at cardinal directions plus the center - element["points"] = [ - {"x": center_x, "y": center_y}, # Center - {"x": center_x + radius, "y": center_y}, # Right - {"x": center_x, "y": center_y + radius}, # Top - {"x": center_x - radius, "y": center_y}, # Left - {"x": center_x, "y": center_y - radius} # Bottom - ] - -def _convert_ellipse(entity: DXFEntity, element: Dict[str, Any]) -> None: + doc: ezdxf document with text styles table + + Returns: + list: List of IdentifiedTextStyle objects for use in StandardStyles """ - Convert DXF ELLIPSE entity to DUC ellipse element. + text_styles = [] - Args: - entity: The DXF ELLIPSE entity - element: The DUC element dict to update - """ - # Set type to ellipse - element["type"] = "ellipse" - - # Get ellipse parameters - center_x = entity.dxf.center.x - center_y = entity.dxf.center.y - - # Major and minor axis - major_x = entity.dxf.major_axis.x - major_y = entity.dxf.major_axis.y - minor_length = entity.dxf.ratio * math.sqrt(major_x**2 + major_y**2) - - # Calculate the angle of the major axis - major_angle = math.atan2(major_y, major_x) - - # Minor axis direction - minor_x = -math.sin(major_angle) * minor_length - minor_y = math.cos(major_angle) * minor_length - - # Create points for the ellipse - # Center, major axis, minor axis - element["points"] = [ - {"x": center_x, "y": center_y}, # Center - {"x": center_x + major_x, "y": center_y + major_y}, # Major axis - {"x": center_x + minor_x, "y": center_y + minor_y} # Minor axis - ] - -def _convert_text(entity: DXFEntity, element: Dict[str, Any]) -> None: - """ - Convert DXF TEXT or MTEXT entity to DUC text element. + for text_style in doc.styles: + style_name = text_style.dxf.name + + # Skip special built-in styles if they have default values + # But we still want to convert Standard style if it has custom properties + + # Get text style properties from DXF + font_file = text_style.dxf.get('font', '') + big_font = text_style.dxf.get('bigfont', '') + fixed_height = text_style.dxf.get('height', 0.0) + width_factor = text_style.dxf.get('width', 1.0) + oblique_angle_deg = text_style.dxf.get('oblique', 0.0) + generation_flags = text_style.dxf.get('flags', 0) + + # Parse font name to get font family + font_family = TextStyleConverter.parse_font_name(font_file) + big_font_family = TextStyleConverter.parse_font_name(big_font) if big_font else font_family + + # Parse generation flags + flags = TextStyleConverter.parse_generation_flags(generation_flags) + is_backwards = flags['is_backwards'] + is_upside_down = flags['is_upside_down'] + is_vertical = flags['is_vertical'] + + # Convert oblique angle from degrees to radians + oblique_angle_rad = TextStyleConverter.degrees_to_radians(oblique_angle_deg) + + # Determine font size + # In DXF, height=0 means variable height (defined per text entity) + # For style definition, use a default size if height is 0 + font_size = fixed_height if fixed_height > 0 else 12.0 + + # Create DUC text style using builder + duc_text_style = duc.create_text_style( + font_family=font_family, + font_size=font_size, + is_ltr=True, # DXF doesn't have explicit LTR/RTL at style level + text_align=TEXT_ALIGN.LEFT, # Default alignment + vertical_align=VERTICAL_ALIGN.BOTTOM, # Default vertical alignment + line_height=1.2, # Standard line height + oblique_angle=oblique_angle_rad, + width_factor=width_factor, + is_upside_down=is_upside_down, + is_backwards=is_backwards, + paper_text_height=None # Not used in DXF STYLE table + ) + + # Update big_font_family if different + if big_font_family != font_family: + duc_text_style.big_font_family = big_font_family + + # Create identifier for the style + description_parts = [] + if font_file: + description_parts.append(f"Font: {font_file}") + if big_font: + description_parts.append(f"Big Font: {big_font}") + if fixed_height > 0: + description_parts.append(f"Height: {fixed_height}") + if width_factor != 1.0: + description_parts.append(f"Width: {width_factor}") + if oblique_angle_deg != 0: + description_parts.append(f"Oblique: {oblique_angle_deg}°") + if is_backwards or is_upside_down or is_vertical: + flags_desc = [] + if is_backwards: + flags_desc.append("backwards") + if is_upside_down: + flags_desc.append("upside-down") + if is_vertical: + flags_desc.append("vertical") + description_parts.append(f"Flags: {', '.join(flags_desc)}") + + description = "; ".join(description_parts) if description_parts else f"Text style {style_name}" + + style_id = duc.create_identifier( + id=f"textstyle_{style_name.lower().replace(' ', '_')}", + name=style_name, + description=description + ) + + # Create identified text style + identified_style = duc.IdentifiedTextStyle( + id=style_id, + style=duc_text_style + ) + + text_styles.append(identified_style) + + # Log conversion info + flags_info = "" + if is_backwards or is_upside_down or is_vertical: + flag_list = [] + if is_backwards: + flag_list.append("backwards") + if is_upside_down: + flag_list.append("upside-down") + if is_vertical: + flag_list.append("vertical") + flags_info = f" [{', '.join(flag_list)}]" + + height_info = f", height={fixed_height}" if fixed_height > 0 else "" + print(f" ✓ Text style '{style_name}': {font_family}{height_info}{flags_info}") - Args: - entity: The DXF TEXT or MTEXT entity - element: The DUC element dict to update - """ - # Set type to text - element["type"] = "text" - - # Get text content - text_content = "" - if entity.dxftype() == "TEXT": - text_content = entity.dxf.text - else: # MTEXT - text_content = entity.text - - # Add text content - element["text"] = text_content - - # Get insertion point - if entity.dxftype() == "TEXT": - insert_x = entity.dxf.insert.x - insert_y = entity.dxf.insert.y - else: # MTEXT - insert_x = entity.dxf.insert.x - insert_y = entity.dxf.insert.y - - # Add insertion point - element["points"] = [{"x": insert_x, "y": insert_y}] - - # Get text height - if hasattr(entity, "dxf") and hasattr(entity.dxf, "height"): - height = entity.dxf.height - element["style"]["fontSize"] = height * 10 # Scale appropriately - - # Get text alignment - if entity.dxftype() == "TEXT" and hasattr(entity, "dxf"): - if hasattr(entity.dxf, "halign"): - halign = entity.dxf.halign - if halign == 1: # CENTER - element["style"]["textAlign"] = "center" - elif halign == 2: # RIGHT - element["style"]["textAlign"] = "right" - else: # Default to LEFT - element["style"]["textAlign"] = "left" - -def _convert_image(entity: DXFEntity, element: Dict[str, Any]) -> None: + return text_styles + + +def convert_dxf_to_duc(dxf_path, duc_path): """ - Convert DXF IMAGE entity to DUC image element. + Main conversion orchestration function. Args: - entity: The DXF IMAGE entity - element: The DUC element dict to update - """ - # Set type to image - element["type"] = "image" - - # Get insertion point and size - insert_x = entity.dxf.insert.x - insert_y = entity.dxf.insert.y + dxf_path: Path to the input DXF file. + duc_path: Path for the output DUC file. + """ + print(f"Loading DXF file: {dxf_path}") + try: + doc = ezdxf.readfile(dxf_path) + except (IOError, ezdxf.DXFStructureError) as e: + print(f"Error loading DXF file: {e}") + return + + # Initialize lists to ensure they exist for the placeholder logic and file writing, + # even if the main conversion sections are commented out during testing. + elements = [] + duc_layers = [] + duc_blocks = [] + linetype_styles = [] + text_styles = [] + + # 1. Convert Header + header = doc.header + duc_global_state, duc_local_state, conversion_context = convert_header(header, doc) + + # 2. Convert Tables (Layers, Styles, Linetypes) + print("\nConverting layers...") + duc_layers = convert_layers(doc) - # Get image size - if hasattr(entity, "dxf") and hasattr(entity.dxf, "image_size"): - width = entity.dxf.image_size.x - height = entity.dxf.image_size.y - else: - # Default size if not available - width = 100 - height = 100 - - # Create points for image corners - element["points"] = [ - {"x": insert_x, "y": insert_y}, # Bottom-left - {"x": insert_x + width, "y": insert_y}, # Bottom-right - {"x": insert_x + width, "y": insert_y + height}, # Top-right - {"x": insert_x, "y": insert_y + height} # Top-left - ] - - # Image path - store the reference to be processed later - if hasattr(entity, "image_def") and hasattr(entity.image_def, "filename"): - element["image_path"] = entity.image_def.filename - -def _convert_hatch(entity: DXFEntity, element: Dict[str, Any]) -> None: - """ - Convert DXF HATCH entity to DUC element. + print("\nConverting linetypes...") + linetype_styles = convert_linetypes(doc) + print(f"Converted {len(linetype_styles)} linetypes to stroke styles") - Args: - entity: The DXF HATCH entity - element: The DUC element dict to update - """ - # Set type based on shape detection - element["type"] = "draw" # Default + print("\nConverting text styles...") + text_styles = convert_text_styles(doc) + print(f"Converted {len(text_styles)} text styles") - # Get boundary paths - paths = [] - for path in entity.paths: - points = [] - for vertex in path.vertices: - points.append({"x": vertex[0], "y": vertex[1]}) - - if points: - paths.append(points) + # 3. Convert Blocks - if paths: - # Use the first path as the element's points - element["points"] = paths[0] - - # Set closed property - element["closed"] = True + # 4. Convert Entities + + # --- Placeholder data for testing header conversion --- + # If no layers were converted (e.g., when testing header only), create a default one. + if not duc_layers: + print("Creating a default layer for testing purposes.") + default_layer = duc.StateBuilder().build_layer().with_id("0").with_label("Default").build() + duc_layers.append(default_layer) + + # If no elements were converted, create a single placeholder point to make the file valid. + if not elements: + print("Creating a placeholder element for testing purposes.") + placeholder_element = (duc.ElementBuilder() + .with_layer_id(duc_layers[0].id) # Place it on the first available layer + .build_linear_element() + .with_points([(0, 0)]) + .build()) + elements.append(placeholder_element) + + # 5. Serialize to DUC file + print(f"\nWriting DUC file to: {duc_path}") + + # Create standard with linetype and text styles + standards = [] + if linetype_styles or text_styles: + standard_styles = duc.create_standard_styles( + common_styles=linetype_styles, + text_styles=text_styles, + dimension_styles=[], + leader_styles=[], + feature_control_frame_styles=[], + table_styles=[], + doc_styles=[], + viewport_styles=[], + hatch_styles=[], + xray_styles=[] + ) - # Try to detect common shapes - element["type"] = detect_shape(paths[0]) - - # Add fill style - if hasattr(entity, "dxf"): - fill_color = None - if hasattr(entity.dxf, "color"): - aci_color = entity.dxf.color - rgba = ColorMapping.aci_to_duc_rgba(aci_color) - fill_color = list(rgba) + # Create a standard that contains these styles + standard = (duc.StateBuilder() + .build_standard() + .with_id("dxf_styles") + .with_name("DXF Styles") + .with_description("Linetype and text styles converted from DXF") + .with_units(conversion_context['standard_units']) + .with_styles(standard_styles) + .build()) - if fill_color: - element["style"]["fill"] = fill_color + standards.append(standard) + + duc.write_duc_file( + file_path=duc_path, + name=os.path.splitext(os.path.basename(dxf_path))[0], + elements=elements, + blocks=duc_blocks, + layers=duc_layers, + duc_global_state=duc_global_state, + duc_local_state=duc_local_state, + standards=standards + ) + print("✅ Conversion complete.") -def _process_images(dxf_doc: Any, msp: Modelspace) -> Dict[str, Any]: - """ - Process images in the DXF document and create binary files data. - - Args: - dxf_doc: The DXF document - msp: The modelspace - - Returns: - Dict with binary files data - """ - binary_files = {} - - # Process all image entities - for entity in msp.query("IMAGE"): - if hasattr(entity, "image_def") and hasattr(entity.image_def, "filename"): - image_path = entity.image_def.filename - - # Check if the image file exists - if not os.path.exists(image_path): - continue - - try: - # Read image file - with open(image_path, "rb") as f: - image_data = f.read() - - # Create unique ID for the image - image_id = str(uuid.uuid4()) - - # Add to binary files - binary_files[image_id] = { - "id": image_id, - "mimeType": _get_mime_type(image_path), - "data": base64.b64encode(image_data).decode("utf-8") - } - - # Update image entities with the binary file reference - for img_entity in msp.query("IMAGE"): - if hasattr(img_entity, "image_def") and img_entity.image_def.filename == image_path: - for element in binary_files.get("elements", []): - if element.get("type") == "image" and element.get("image_path") == image_path: - element["image"] = {"fileId": image_id} - # Remove temporary reference - if "image_path" in element: - del element["image_path"] - except Exception as e: - print(f"Error processing image {image_path}: {e}") - - return binary_files - -def _get_mime_type(file_path: str) -> str: - """ - Get MIME type based on file extension. +def main(): + """Main function to parse arguments and run the conversion.""" + parser = argparse.ArgumentParser(description="Convert a DXF file to a DUC file.") + parser.add_argument("dxf_file", help="Path to the input .dxf file.") + parser.add_argument("-o", "--output", help="Path for the output .duc file (optional).") - Args: - file_path: Path to the file - - Returns: - MIME type string - """ - extension = os.path.splitext(file_path)[1].lower() - - mime_types = { - ".png": "image/png", - ".jpg": "image/jpeg", - ".jpeg": "image/jpeg", - ".gif": "image/gif", - ".bmp": "image/bmp", - ".tif": "image/tiff", - ".tiff": "image/tiff" - } + args = parser.parse_args() - return mime_types.get(extension, "application/octet-stream") \ No newline at end of file + dxf_path = args.dxf_file + duc_path = args.output + + if not duc_path: + duc_path = os.path.splitext(dxf_path)[0] + ".duc" + + convert_dxf_to_duc(dxf_path, duc_path) + +if __name__ == "__main__": + main() + diff --git a/packages/ducdxf/src/tests/.gitignore b/packages/ducdxf/src/tests/.gitignore new file mode 100644 index 00000000..b1284a1b --- /dev/null +++ b/packages/ducdxf/src/tests/.gitignore @@ -0,0 +1,2 @@ +inputs +outputs diff --git a/packages/ducdxf/tests/__init__.py b/packages/ducdxf/src/tests/__init__.py similarity index 100% rename from packages/ducdxf/tests/__init__.py rename to packages/ducdxf/src/tests/__init__.py diff --git a/packages/ducdxf/src/tests/assets/xclip.dxf b/packages/ducdxf/src/tests/assets/xclip.dxf new file mode 100644 index 00000000..097ea13a --- /dev/null +++ b/packages/ducdxf/src/tests/assets/xclip.dxf @@ -0,0 +1,16154 @@ + 0 +SECTION + 2 +HEADER + 9 +$ACADVER + 1 +AC1027 + 9 +$ACADMAINTVER + 70 + 105 + 9 +$DWGCODEPAGE + 3 +ANSI_1252 + 9 +$LASTSAVEDBY + 1 +mozman + 9 +$REQUIREDVERSIONS +160 + 0 + 9 +$INSBASE + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$EXTMIN + 10 +6.969749978424 + 20 +-2.896936162253 + 30 +0.0 + 9 +$EXTMAX + 10 +43.924763770251 + 20 +30.343955696037 + 30 +0.0 + 9 +$LIMMIN + 10 +0.0 + 20 +0.0 + 9 +$LIMMAX + 10 +420.0 + 20 +297.0 + 9 +$ORTHOMODE + 70 + 0 + 9 +$REGENMODE + 70 + 1 + 9 +$FILLMODE + 70 + 1 + 9 +$QTEXTMODE + 70 + 0 + 9 +$MIRRTEXT + 70 + 1 + 9 +$LTSCALE + 40 +2.5 + 9 +$ATTMODE + 70 + 1 + 9 +$TEXTSIZE + 40 +2.5 + 9 +$TRACEWID + 40 +1.0 + 9 +$TEXTSTYLE + 7 +Standard + 9 +$CLAYER + 8 +0 + 9 +$CELTYPE + 6 +ByLayer + 9 +$CECOLOR + 62 + 256 + 9 +$CELTSCALE + 40 +1.0 + 9 +$DISPSILH + 70 + 0 + 9 +$DIMSCALE + 40 +1.0 + 9 +$DIMASZ + 40 +2.5 + 9 +$DIMEXO + 40 +0.625 + 9 +$DIMDLI + 40 +3.75 + 9 +$DIMRND + 40 +0.0 + 9 +$DIMDLE + 40 +0.0 + 9 +$DIMEXE + 40 +1.25 + 9 +$DIMTP + 40 +0.0 + 9 +$DIMTM + 40 +0.0 + 9 +$DIMTXT + 40 +2.5 + 9 +$DIMCEN + 40 +2.5 + 9 +$DIMTSZ + 40 +0.0 + 9 +$DIMTOL + 70 + 0 + 9 +$DIMLIM + 70 + 0 + 9 +$DIMTIH + 70 + 0 + 9 +$DIMTOH + 70 + 0 + 9 +$DIMSE1 + 70 + 0 + 9 +$DIMSE2 + 70 + 0 + 9 +$DIMTAD + 70 + 1 + 9 +$DIMZIN + 70 + 8 + 9 +$DIMBLK + 1 + + 9 +$DIMASO + 70 + 1 + 9 +$DIMSHO + 70 + 1 + 9 +$DIMPOST + 1 + + 9 +$DIMAPOST + 1 + + 9 +$DIMALT + 70 + 0 + 9 +$DIMALTD + 70 + 3 + 9 +$DIMALTF + 40 +0.03937007874 + 9 +$DIMLFAC + 40 +1.0 + 9 +$DIMTOFL + 70 + 1 + 9 +$DIMTVP + 40 +0.0 + 9 +$DIMTIX + 70 + 0 + 9 +$DIMSOXD + 70 + 0 + 9 +$DIMSAH + 70 + 0 + 9 +$DIMBLK1 + 1 + + 9 +$DIMBLK2 + 1 + + 9 +$DIMSTYLE + 2 +ISO-25 + 9 +$DIMCLRD + 70 + 0 + 9 +$DIMCLRE + 70 + 0 + 9 +$DIMCLRT + 70 + 0 + 9 +$DIMTFAC + 40 +1.0 + 9 +$DIMGAP + 40 +0.625 + 9 +$DIMJUST + 70 + 0 + 9 +$DIMSD1 + 70 + 0 + 9 +$DIMSD2 + 70 + 0 + 9 +$DIMTOLJ + 70 + 0 + 9 +$DIMTZIN + 70 + 8 + 9 +$DIMALTZ + 70 + 0 + 9 +$DIMALTTZ + 70 + 0 + 9 +$DIMUPT + 70 + 0 + 9 +$DIMDEC + 70 + 2 + 9 +$DIMTDEC + 70 + 2 + 9 +$DIMALTU + 70 + 2 + 9 +$DIMALTTD + 70 + 3 + 9 +$DIMTXSTY + 7 +Standard + 9 +$DIMAUNIT + 70 + 0 + 9 +$DIMADEC + 70 + 0 + 9 +$DIMALTRND + 40 +0.0 + 9 +$DIMAZIN + 70 + 0 + 9 +$DIMDSEP + 70 + 44 + 9 +$DIMATFIT + 70 + 3 + 9 +$DIMFRAC + 70 + 0 + 9 +$DIMLDRBLK + 1 + + 9 +$DIMLUNIT + 70 + 2 + 9 +$DIMLWD + 70 + -2 + 9 +$DIMLWE + 70 + -2 + 9 +$DIMTMOVE + 70 + 0 + 9 +$DIMFXL + 40 +1.0 + 9 +$DIMFXLON + 70 + 0 + 9 +$DIMJOGANG + 40 +0.785398163397 + 9 +$DIMTFILL + 70 + 0 + 9 +$DIMTFILLCLR + 70 + 0 + 9 +$DIMARCSYM + 70 + 0 + 9 +$DIMLTYPE + 6 + + 9 +$DIMLTEX1 + 6 + + 9 +$DIMLTEX2 + 6 + + 9 +$DIMTXTDIRECTION + 70 + 0 + 9 +$LUNITS + 70 + 2 + 9 +$LUPREC + 70 + 4 + 9 +$SKETCHINC + 40 +1.0 + 9 +$FILLETRAD + 40 +10.0 + 9 +$AUNITS + 70 + 0 + 9 +$AUPREC + 70 + 2 + 9 +$MENU + 1 +. + 9 +$ELEVATION + 40 +0.0 + 9 +$PELEVATION + 40 +0.0 + 9 +$THICKNESS + 40 +0.0 + 9 +$LIMCHECK + 70 + 0 + 9 +$CHAMFERA + 40 +0.0 + 9 +$CHAMFERB + 40 +0.0 + 9 +$CHAMFERC + 40 +0.0 + 9 +$CHAMFERD + 40 +0.0 + 9 +$SKPOLY + 70 + 0 + 9 +$TDCREATE + 40 +2460306.341357246 + 9 +$TDUCREATE + 40 +2460306.299690579 + 9 +$TDUPDATE + 40 +2460324.428429988 + 9 +$TDUUPDATE + 40 +2460324.386763322 + 9 +$TDINDWG + 40 +0.0 + 9 +$TDUSRTIMER + 40 +0.0 + 9 +$USRTIMER + 70 + 1 + 9 +$ANGBASE + 50 +0.0 + 9 +$ANGDIR + 70 + 0 + 9 +$PDMODE + 70 + 0 + 9 +$PDSIZE + 40 +0.0 + 9 +$PLINEWID + 40 +0.0 + 9 +$SPLFRAME + 70 + 0 + 9 +$SPLINETYPE + 70 + 6 + 9 +$SPLINESEGS + 70 + 8 + 9 +$HANDSEED + 5 +850 + 9 +$SURFTAB1 + 70 + 6 + 9 +$SURFTAB2 + 70 + 6 + 9 +$SURFTYPE + 70 + 6 + 9 +$SURFU + 70 + 6 + 9 +$SURFV + 70 + 6 + 9 +$UCSBASE + 2 + + 9 +$UCSNAME + 2 + + 9 +$UCSORG + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSXDIR + 10 +1.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSYDIR + 10 +0.0 + 20 +1.0 + 30 +0.0 + 9 +$UCSORTHOREF + 2 + + 9 +$UCSORTHOVIEW + 70 + 0 + 9 +$UCSORGTOP + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSORGBOTTOM + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSORGLEFT + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSORGRIGHT + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSORGFRONT + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSORGBACK + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSBASE + 2 + + 9 +$PUCSNAME + 2 + + 9 +$PUCSORG + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSXDIR + 10 +1.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSYDIR + 10 +0.0 + 20 +1.0 + 30 +0.0 + 9 +$PUCSORTHOREF + 2 + + 9 +$PUCSORTHOVIEW + 70 + 0 + 9 +$PUCSORGTOP + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSORGBOTTOM + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSORGLEFT + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSORGRIGHT + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSORGFRONT + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSORGBACK + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$USERI1 + 70 + 0 + 9 +$USERI2 + 70 + 0 + 9 +$USERI3 + 70 + 0 + 9 +$USERI4 + 70 + 0 + 9 +$USERI5 + 70 + 0 + 9 +$USERR1 + 40 +0.0 + 9 +$USERR2 + 40 +0.0 + 9 +$USERR3 + 40 +0.0 + 9 +$USERR4 + 40 +0.0 + 9 +$USERR5 + 40 +0.0 + 9 +$WORLDVIEW + 70 + 1 + 9 +$SHADEDGE + 70 + 3 + 9 +$SHADEDIF + 70 + 70 + 9 +$TILEMODE + 70 + 1 + 9 +$MAXACTVP + 70 + 64 + 9 +$PINSBASE + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PLIMCHECK + 70 + 0 + 9 +$PEXTMIN + 10 +19.64109623431 + 20 +19.5 + 30 +0.0 + 9 +$PEXTMAX + 10 +195.339924686192 + 20 +185.907188284519 + 30 +0.0 + 9 +$PLIMMIN + 10 +0.0 + 20 +0.0 + 9 +$PLIMMAX + 10 +420.0 + 20 +297.0 + 9 +$UNITMODE + 70 + 0 + 9 +$VISRETAIN + 70 + 1 + 9 +$PLINEGEN + 70 + 0 + 9 +$PSLTSCALE + 70 + 1 + 9 +$TREEDEPTH + 70 + 3020 + 9 +$CMLSTYLE + 2 +Standard + 9 +$CMLJUST + 70 + 0 + 9 +$CMLSCALE + 40 +20.0 + 9 +$PROXYGRAPHICS + 70 + 1 + 9 +$MEASUREMENT + 70 + 1 + 9 +$CELWEIGHT +370 + -1 + 9 +$ENDCAPS +280 + 0 + 9 +$JOINSTYLE +280 + 0 + 9 +$LWDISPLAY +290 + 0 + 9 +$INSUNITS + 70 + 7 + 9 +$HYPERLINKBASE + 1 + + 9 +$STYLESHEET + 1 + + 9 +$XEDIT +290 + 1 + 9 +$CEPSNTYPE +380 + 0 + 9 +$PSTYLEMODE +290 + 1 + 9 +$FINGERPRINTGUID + 2 +{899d4e49-62e5-4dcb-986d-ce1541564793} + 9 +$VERSIONGUID + 2 +{FAEB1C32-E019-11D5-929B-00C0DF256EC4} + 9 +$EXTNAMES +290 + 1 + 9 +$PSVPSCALE + 40 +0.0 + 9 +$OLESTARTUP +290 + 0 + 9 +$SORTENTS +280 + 127 + 9 +$INDEXCTL +280 + 0 + 9 +$HIDETEXT +280 + 1 + 9 +$XCLIPFRAME +280 + 2 + 9 +$HALOGAP +280 + 0 + 9 +$OBSCOLOR + 70 + 257 + 9 +$OBSLTYPE +280 + 0 + 9 +$INTERSECTIONDISPLAY +280 + 0 + 9 +$INTERSECTIONCOLOR + 70 + 257 + 9 +$DIMASSOC +280 + 2 + 9 +$PROJECTNAME + 1 + + 9 +$CAMERADISPLAY +290 + 0 + 9 +$LENSLENGTH + 40 +50.0 + 9 +$CAMERAHEIGHT + 40 +0.0 + 9 +$STEPSPERSEC + 40 +24.0 + 9 +$STEPSIZE + 40 +100.0 + 9 +$3DDWFPREC + 40 +2.0 + 9 +$PSOLWIDTH + 40 +0.005 + 9 +$PSOLHEIGHT + 40 +0.08 + 9 +$LOFTANG1 + 40 +1.570796326795 + 9 +$LOFTANG2 + 40 +1.570796326795 + 9 +$LOFTMAG1 + 40 +0.0 + 9 +$LOFTMAG2 + 40 +0.0 + 9 +$LOFTPARAM + 70 + 7 + 9 +$LOFTNORMALS +280 + 1 + 9 +$LATITUDE + 40 +37.795 + 9 +$LONGITUDE + 40 +-122.394 + 9 +$NORTHDIRECTION + 40 +0.0 + 9 +$TIMEZONE + 70 + -8000 + 9 +$LIGHTGLYPHDISPLAY +280 + 1 + 9 +$TILEMODELIGHTSYNCH +280 + 1 + 9 +$CMATERIAL +347 +45 + 9 +$SOLIDHIST +280 + 0 + 9 +$SHOWHIST +280 + 1 + 9 +$DWFFRAME +280 + 2 + 9 +$DGNFRAME +280 + 2 + 9 +$REALWORLDSCALE +290 + 1 + 9 +$INTERFERECOLOR + 62 + 256 + 9 +$CSHADOW +280 + 0 + 9 +$SHADOWPLANELOCATION + 40 +0.0 + 0 +ENDSEC + 0 +SECTION + 2 +CLASSES + 0 +CLASS + 1 +ACDBDICTIONARYWDFLT + 2 +AcDbDictionaryWithDefault + 3 +ObjectDBX Classes + 90 + 0 + 91 + 3 +280 + 0 +281 + 0 + 0 +CLASS + 1 +SUN + 2 +AcDbSun + 3 +SCENEOE + 90 + 1153 + 91 + 3 +280 + 0 +281 + 0 + 0 +CLASS + 1 +VISUALSTYLE + 2 +AcDbVisualStyle + 3 +ObjectDBX Classes + 90 + 4095 + 91 + 3 +280 + 0 +281 + 0 + 0 +CLASS + 1 +MATERIAL + 2 +AcDbMaterial + 3 +ObjectDBX Classes + 90 + 1153 + 91 + 3 +280 + 0 +281 + 0 + 0 +CLASS + 1 +SCALE + 2 +AcDbScale + 3 +ObjectDBX Classes + 90 + 1153 + 91 + 3 +280 + 0 +281 + 0 + 0 +CLASS + 1 +TABLESTYLE + 2 +AcDbTableStyle + 3 +ObjectDBX Classes + 90 + 4095 + 91 + 3 +280 + 0 +281 + 0 + 0 +CLASS + 1 +MLEADERSTYLE + 2 +AcDbMLeaderStyle + 3 +ACDB_MLEADERSTYLE_CLASS + 90 + 4095 + 91 + 3 +280 + 0 +281 + 0 + 0 +CLASS + 1 +DICTIONARYVAR + 2 +AcDbDictionaryVar + 3 +ObjectDBX Classes + 90 + 0 + 91 + 3 +280 + 0 +281 + 0 + 0 +CLASS + 1 +CELLSTYLEMAP + 2 +AcDbCellStyleMap + 3 +ObjectDBX Classes + 90 + 1152 + 91 + 3 +280 + 0 +281 + 0 + 0 +CLASS + 1 +MENTALRAYRENDERSETTINGS + 2 +AcDbMentalRayRenderSettings + 3 +SCENEOE + 90 + 1024 + 91 + 3 +280 + 0 +281 + 0 + 0 +CLASS + 1 +ACDBDETAILVIEWSTYLE + 2 +AcDbDetailViewStyle + 3 +ObjectDBX Classes + 90 + 1025 + 91 + 3 +280 + 0 +281 + 0 + 0 +CLASS + 1 +ACDBSECTIONVIEWSTYLE + 2 +AcDbSectionViewStyle + 3 +ObjectDBX Classes + 90 + 1025 + 91 + 3 +280 + 0 +281 + 0 + 0 +CLASS + 1 +RASTERVARIABLES + 2 +AcDbRasterVariables + 3 +ISM + 90 + 0 + 91 + 3 +280 + 0 +281 + 0 + 0 +CLASS + 1 + + 2 +DbBEditSession + 3 + + 90 + 0 + 91 + 3 +280 + 0 +281 + 0 + 0 +CLASS + 1 +BdmDbPersIdManager + 2 +BdmDbPersIdManager + 3 +BricsCAD|Description: model data + 90 + 1025 + 91 + 3 +280 + 0 +281 + 0 + 0 +CLASS + 1 +SPATIAL_FILTER + 2 +AcDbSpatialFilter + 3 +ObjectDBX Classes + 90 + 0 + 91 + 3 +280 + 0 +281 + 0 + 0 +ENDSEC + 0 +SECTION + 2 +TABLES + 0 +TABLE + 2 +VPORT + 5 +8 +330 +0 +100 +AcDbSymbolTable + 70 + 1 + 0 +VPORT + 5 +22 +330 +8 +100 +AcDbSymbolTableRecord +100 +AcDbViewportTableRecord + 2 +*Active + 70 + 0 + 10 +0.0 + 20 +0.0 + 11 +1.0 + 21 +1.0 + 12 +28.958897045706 + 22 +15.239881927497 + 13 +0.0 + 23 +0.0 + 14 +10.0 + 24 +10.0 + 15 +10.0 + 25 +10.0 + 16 +0.0 + 26 +0.0 + 36 +1.0 + 17 +0.0 + 27 +0.0 + 37 +8.575175756676 + 40 +42.677003468964 + 41 +1.802469135802 + 42 +50.0 + 43 +0.0 + 44 +0.0 + 50 +0.0 + 51 +0.0 + 71 + 0 + 72 + 100 + 73 + 1 + 74 + 3 + 75 + 0 + 76 + 0 + 77 + 0 + 78 + 0 +281 + 0 + 65 + 1 +110 +0.0 +120 +0.0 +130 +0.0 +111 +1.0 +121 +0.0 +131 +0.0 +112 +0.0 +122 +1.0 +132 +0.0 + 79 + 0 +146 +0.0 +348 +29 + 60 + 3 + 61 + 5 +292 + 0 +282 + 1 +141 +0.0 +142 +0.0 + 63 + 250 +361 +23 + 0 +ENDTAB + 0 +TABLE + 2 +LTYPE + 5 +5 +330 +0 +100 +AcDbSymbolTable + 70 + 1 + 0 +LTYPE + 5 +14 +330 +5 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ByBlock + 70 + 0 + 3 + + 72 + 65 + 73 + 0 + 40 +0.0 + 0 +LTYPE + 5 +15 +330 +5 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ByLayer + 70 + 0 + 3 + + 72 + 65 + 73 + 0 + 40 +0.0 + 0 +LTYPE + 5 +16 +330 +5 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +Continuous + 70 + 0 + 3 +Solid line + 72 + 65 + 73 + 0 + 40 +0.0 + 0 +ENDTAB + 0 +TABLE + 2 +LAYER + 5 +2 +330 +0 +100 +AcDbSymbolTable + 70 + 2 + 0 +LAYER + 5 +10 +330 +2 +100 +AcDbSymbolTableRecord +100 +AcDbLayerTableRecord + 2 +0 + 70 + 0 + 62 + 7 + 6 +Continuous +370 + -3 +390 +F +347 +47 +348 +0 + 0 +LAYER + 5 +9B +330 +2 +100 +AcDbSymbolTableRecord +100 +AcDbLayerTableRecord + 2 +Defpoints + 70 + 0 + 62 + 7 + 6 +Continuous +290 + 0 +370 + -3 +390 +F +347 +47 +348 +0 + 0 +ENDTAB + 0 +TABLE + 2 +STYLE + 5 +3 +330 +0 +100 +AcDbSymbolTable + 70 + 2 + 0 +STYLE + 5 +11 +330 +3 +100 +AcDbSymbolTableRecord +100 +AcDbTextStyleTableRecord + 2 +Standard + 70 + 0 + 40 +0.0 + 41 +1.0 + 50 +0.0 + 71 + 0 + 42 +2.5 + 3 +arial.ttf + 4 + +1001 +ACAD +1000 +Arial +1071 + 0 + 0 +STYLE + 5 +9A +330 +3 +100 +AcDbSymbolTableRecord +100 +AcDbTextStyleTableRecord + 2 +DYN_DIM + 70 + 0 + 40 +0.0 + 41 +1.0 + 50 +0.0 + 71 + 0 + 42 +2.5 + 3 +arial.ttf + 4 + +1001 +ACAD +1000 +Arial +1071 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +VIEW + 5 +6 +330 +0 +100 +AcDbSymbolTable + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +UCS + 5 +7 +330 +0 +100 +AcDbSymbolTable + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +APPID + 5 +9 +330 +0 +100 +AcDbSymbolTable + 70 + 3 + 0 +APPID + 5 +12 +330 +9 +100 +AcDbSymbolTableRecord +100 +AcDbRegAppTableRecord + 2 +ACAD + 70 + 0 + 0 +APPID + 5 +A7 +330 +9 +100 +AcDbSymbolTableRecord +100 +AcDbRegAppTableRecord + 2 +AcadAnnotative + 70 + 0 + 0 +APPID + 5 +B7 +330 +9 +100 +AcDbSymbolTableRecord +100 +AcDbRegAppTableRecord + 2 +BDM_DB + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +DIMSTYLE + 5 +A +330 +0 +100 +AcDbSymbolTable + 70 + 1 +100 +AcDbDimStyleTable + 0 +DIMSTYLE +105 +42 +330 +A +100 +AcDbSymbolTableRecord +100 +AcDbDimStyleTableRecord + 2 +ISO-25 + 70 + 0 + 41 +2.5 + 42 +0.625 + 43 +3.75 + 44 +1.25 + 50 +44.999999999974 + 73 + 0 + 74 + 0 + 77 + 1 + 78 + 8 +140 +2.5 +141 +2.5 +143 +0.03937007874 +147 +0.625 +171 + 3 +172 + 1 +178 + 0 +271 + 2 +272 + 2 +274 + 3 +278 + 44 +283 + 0 +284 + 8 +340 +11 + 0 +ENDTAB + 0 +TABLE + 2 +BLOCK_RECORD + 5 +1 +330 +0 +100 +AcDbSymbolTable + 70 + 3 + 0 +BLOCK_RECORD + 5 +1F +330 +1 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*Model_Space +340 +3D + 70 + 0 +280 + 1 +281 + 0 + 0 +BLOCK_RECORD + 5 +1B +330 +1 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*Paper_Space +340 +1E + 70 + 0 +280 + 1 +281 + 0 + 0 +BLOCK_RECORD + 5 +3E +330 +1 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*Paper_Space0 +340 +41 + 70 + 0 +280 + 1 +281 + 0 + 0 +BLOCK_RECORD + 5 +A0 +330 +1 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +BaseBlock +340 +0 +102 +{BLKREFS +331 +B9 +331 +CF +331 +E3 +331 +F0 +331 +7D0 +331 +7F7 +331 +809 +331 +819 +331 +822 +102 +} + 70 + 6 +280 + 1 +281 + 0 +1001 +AcadAnnotative +1000 +AnnotativeData +1002 +{ +1070 + 1 +1070 + 0 +1002 +} +1001 +BDM_DB +1004 +010000001300506172616D6574726963426C6F636B475549440226007B66333838316434342D376466302D346437622D383235392D3133386533346131373031627D + 0 +BLOCK_RECORD + 5 +FC +330 +1 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +_None +340 +0 + 70 + 0 +280 + 1 +281 + 0 + 0 +ENDTAB + 0 +ENDSEC + 0 +SECTION + 2 +BLOCKS + 0 +BLOCK + 5 +20 +330 +1F +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +*Model_Space + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*Model_Space + 1 + + 0 +ENDBLK + 5 +21 +330 +1F +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +1C +330 +1B +100 +AcDbEntity + 67 + 1 + 8 +0 +100 +AcDbBlockBegin + 2 +*Paper_Space + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*Paper_Space + 1 + + 0 +ENDBLK + 5 +1D +330 +1B +100 +AcDbEntity + 67 + 1 + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +3F +330 +3E +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +*Paper_Space0 + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*Paper_Space0 + 1 + + 0 +VIEWPORT + 5 +7DD +330 +3E +100 +AcDbEntity + 8 +0 +100 +AcDbViewport + 10 +128.5 + 20 +97.5 + 30 +0.0 + 40 +314.226 + 41 +222.18 + 68 + 1 + 69 + 1 + 12 +128.5 + 22 +97.5 + 13 +0.0 + 23 +0.0 + 14 +10.0 + 24 +10.0 + 15 +10.0 + 25 +10.0 + 16 +0.0 + 26 +0.0 + 36 +1.0 + 17 +0.0 + 27 +0.0 + 37 +0.0 + 42 +50.0 + 43 +0.0 + 44 +0.0 + 45 +222.18 + 50 +0.0 + 51 +0.0 + 72 + 100 + 90 + 557152 + 1 + +281 + 0 + 71 + 1 + 74 + 0 +110 +0.0 +120 +0.0 +130 +0.0 +111 +1.0 +121 +0.0 +131 +0.0 +112 +0.0 +122 +1.0 +132 +0.0 + 79 + 0 +146 +0.0 +170 + 0 + 61 + 5 +348 +29 +292 + 0 +282 + 1 +141 +0.0 +142 +0.0 + 63 + 250 +421 + 3355443 +361 +7DE + 0 +VIEWPORT + 5 +7DF +330 +3E +100 +AcDbEntity + 8 +0 +100 +AcDbViewport + 10 +128.5 + 20 +97.5 + 30 +0.0 + 40 +205.6 + 41 +156.0 + 68 + 2 + 69 + 2 + 12 +24.681568858348 + 22 +13.210258693728 + 13 +0.0 + 23 +0.0 + 14 +10.0 + 24 +10.0 + 15 +10.0 + 25 +10.0 + 16 +0.0 + 26 +0.0 + 36 +1.0 + 17 +0.0 + 27 +0.0 + 37 +0.0 + 42 +50.0 + 43 +0.0 + 44 +0.0 + 45 +41.882556316344 + 50 +0.0 + 51 +0.0 + 72 + 100 + 90 + 819296 + 1 + +281 + 0 + 71 + 1 + 74 + 0 +110 +0.0 +120 +0.0 +130 +0.0 +111 +1.0 +121 +0.0 +131 +0.0 +112 +0.0 +122 +1.0 +132 +0.0 + 79 + 0 +146 +0.0 +170 + 0 + 61 + 5 +348 +29 +292 + 0 +282 + 1 +141 +0.0 +142 +0.0 + 63 + 250 +361 +7E0 + 0 +ENDBLK + 5 +40 +330 +3E +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +A5 +330 +A0 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +BaseBlock + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +BaseBlock + 1 + + 0 +LWPOLYLINE + 5 +A1 +330 +A0 +100 +AcDbEntity + 8 +0 +100 +AcDbPolyline + 90 + 4 + 70 + 1 + 43 +0.0 + 10 +0.0 + 20 +0.0 + 10 +7.0 + 20 +0.0 + 10 +7.0 + 20 +7.0 + 10 +0.0 + 20 +7.0 + 0 +LINE + 5 +A2 +330 +A0 +100 +AcDbEntity + 8 +0 + 62 + 1 +100 +AcDbLine + 10 +0.0 + 20 +3.5 + 30 +0.0 + 11 +7.0 + 21 +3.5 + 31 +0.0 + 0 +LINE + 5 +A3 +330 +A0 +100 +AcDbEntity + 8 +0 + 62 + 3 +100 +AcDbLine + 10 +3.5 + 20 +0.0 + 30 +0.0 + 11 +3.5 + 21 +7.0 + 31 +0.0 + 0 +CIRCLE + 5 +A4 +330 +A0 +100 +AcDbEntity + 8 +0 + 62 + 5 +100 +AcDbCircle + 10 +3.5 + 20 +3.5 + 30 +0.0 + 40 +3.5 + 0 +ENDBLK + 5 +A6 +330 +A0 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +FD +330 +FC +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +_None + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +_None + 1 + + 0 +ENDBLK + 5 +FE +330 +FC +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +ENDSEC + 0 +SECTION + 2 +ENTITIES + 0 +INSERT + 5 +B9 +102 +{ACAD_XDICTIONARY +360 +BF +102 +} +330 +1F +100 +AcDbEntity + 8 +0 +100 +AcDbBlockReference + 2 +BaseBlock + 10 +5.0 + 20 +5.0 + 30 +0.0 + 0 +INSERT + 5 +CF +102 +{ACAD_XDICTIONARY +360 +D0 +102 +} +330 +1F +100 +AcDbEntity + 8 +0 +100 +AcDbBlockReference + 2 +BaseBlock + 10 +13.701472944978 + 20 +8.296120375944 + 30 +0.0 + 0 +INSERT + 5 +E3 +102 +{ACAD_XDICTIONARY +360 +E4 +102 +} +330 +1F +100 +AcDbEntity + 8 +0 +100 +AcDbBlockReference + 2 +BaseBlock + 10 +19.97598156396 + 20 +20.0 + 30 +0.0 + 0 +MTEXT + 5 +EE +330 +1F +100 +AcDbEntity + 8 +0 +100 +AcDbMText + 10 +7.024749978424 + 20 +14.990853928592 + 30 +0.0 + 40 +0.5 + 41 +6.42706842349 + 46 +0.0 + 71 + 1 + 72 + 1 + 1 +Rectangle + 73 + 1 + 44 +1.0 + 0 +MTEXT + 5 +EF +330 +1F +100 +AcDbEntity + 8 +0 +100 +AcDbMText + 10 +15.343307969032 + 20 +14.9027366777 + 30 +0.0 + 40 +0.5 + 41 +6.42706842349 + 46 +0.0 + 71 + 1 + 72 + 1 + 1 +Rectangle + 73 + 1 + 44 +1.0 + 0 +INSERT + 5 +F0 +102 +{ACAD_XDICTIONARY +360 +F1 +102 +} +330 +1F +100 +AcDbEntity + 8 +0 +100 +AcDbBlockReference + 2 +BaseBlock + 10 +17.269750963371 + 20 +0.041009747639 + 30 +0.0 + 50 +45.0 + 0 +MTEXT + 5 +F4 +102 +{ACAD_XDICTIONARY +360 +F5 +102 +} +330 +1F +100 +AcDbEntity + 8 +0 +100 +AcDbMText + 10 +12.464356755077 + 20 +4.040091577013 + 30 +0.0 + 40 +0.5 + 41 +8.683339185577 + 46 +0.0 + 71 + 1 + 72 + 1 + 1 +Rectangle Copy & Rotate + 11 +0.7071067811865476 + 21 +0.7071067811865476 + 31 +0.0 + 73 + 1 + 44 +1.0 +1001 +AcadAnnotative +1000 +AnnotativeData +1002 +{ +1070 + 1 +1070 + 0 +1002 +} + 0 +MTEXT + 5 +F8 +102 +{ACAD_XDICTIONARY +360 +F9 +102 +} +330 +1F +100 +AcDbEntity + 8 +0 +100 +AcDbMText + 10 +22.000731542384 + 20 +30.211910241492 + 30 +0.0 + 40 +0.5 + 41 +6.42706842349 + 46 +0.0 + 71 + 1 + 72 + 1 + 1 +Polygon + 73 + 1 + 44 +1.0 +1001 +AcadAnnotative +1000 +AnnotativeData +1002 +{ +1070 + 1 +1070 + 0 +1002 +} + 0 +INSERT + 5 +7D0 +102 +{ACAD_XDICTIONARY +360 +7D1 +102 +} +330 +1F +100 +AcDbEntity + 8 +0 +100 +AcDbBlockReference + 2 +BaseBlock + 10 +34.213579220794 + 20 +18.648199568587 + 30 +0.0 + 50 +33.582775659428 + 0 +MTEXT + 5 +7D4 +102 +{ACAD_XDICTIONARY +360 +7D5 +102 +} +330 +1F +100 +AcDbEntity + 8 +0 +100 +AcDbMText + 10 +33.808741455256 + 20 +28.221184073843 + 30 +0.0 + 40 +0.5 + 41 +7.506791285601 + 46 +0.0 + 71 + 1 + 72 + 1 + 1 +Polygon Copy & Rotate + 11 +0.7817249944708197 + 21 +-0.6236233101958241 + 31 +0.0 + 73 + 1 + 44 +1.0 +1001 +AcadAnnotative +1000 +AnnotativeData +1002 +{ +1070 + 1 +1070 + 0 +1002 +} + 0 +INSERT + 5 +7F7 +102 +{ACAD_XDICTIONARY +360 +7F8 +102 +} +330 +1F +100 +AcDbEntity + 8 +0 +100 +AcDbBlockReference + 2 +BaseBlock + 10 +7.219861123372 + 20 +19.552210324471 + 30 +0.0 + 0 +MTEXT + 5 +7FB +102 +{ACAD_XDICTIONARY +360 +7FC +102 +} +330 +1F +100 +AcDbEntity + 8 +0 +100 +AcDbMText + 10 +7.260566471391 + 20 +27.882168895161 + 30 +0.0 + 40 +0.5 + 41 +6.9165912516 + 46 +0.0 + 71 + 1 + 72 + 1 + 1 +Original (not cropped) + 73 + 1 + 44 +1.0 +1001 +AcadAnnotative +1000 +AnnotativeData +1002 +{ +1070 + 1 +1070 + 0 +1002 +} + 0 +INSERT + 5 +809 +102 +{ACAD_XDICTIONARY +360 +80A +102 +} +330 +1F +100 +AcDbEntity + 8 +0 +100 +AcDbBlockReference + 2 +BaseBlock + 10 +25.744047593269 + 20 +6.497335817091 + 30 +0.0 + 0 +MTEXT + 5 +80D +102 +{ACAD_XDICTIONARY +360 +80E +102 +} +330 +1F +100 +AcDbEntity + 8 +0 +100 +AcDbMText + 10 +25.784752941288 + 20 +14.827294387781 + 30 +0.0 + 40 +0.5 + 41 +6.9165912516 + 46 +0.0 + 71 + 1 + 72 + 1 + 1 +Inverted Clipping Path + 73 + 1 + 44 +1.0 +1001 +AcadAnnotative +1000 +AnnotativeData +1002 +{ +1070 + 1 +1070 + 0 +1002 +} + 0 +INSERT + 5 +819 +102 +{ACAD_XDICTIONARY +360 +81A +102 +} +330 +1F +100 +AcDbEntity + 8 +0 +100 +AcDbBlockReference + 2 +BaseBlock + 10 +35.502931650755 + 20 +6.561753025165 + 30 +0.0 + 0 +MTEXT + 5 +81D +102 +{ACAD_XDICTIONARY +360 +81E +102 +} +330 +1F +100 +AcDbEntity + 8 +0 +100 +AcDbMText + 10 +35.543636998774 + 20 +14.891711595855 + 30 +0.0 + 40 +0.5 + 41 +7.454220421025 + 46 +0.0 + 71 + 1 + 72 + 1 + 1 +Concave Clipping Path + 73 + 1 + 44 +1.0 +1001 +AcadAnnotative +1000 +AnnotativeData +1002 +{ +1070 + 1 +1070 + 0 +1002 +} + 0 +INSERT + 5 +822 +102 +{ACAD_XDICTIONARY +360 +823 +102 +} +330 +1F +100 +AcDbEntity + 8 +0 +100 +AcDbBlockReference + 2 +BaseBlock + 10 +35.502931650755 + 20 +-2.896936162253 + 30 +0.0 + 0 +MTEXT + 5 +826 +102 +{ACAD_XDICTIONARY +360 +827 +102 +} +330 +1F +100 +AcDbEntity + 8 +0 +100 +AcDbMText + 10 +34.175763770251 + 20 +5.433022408437 + 30 +0.0 + 40 +0.5 + 41 +10.228386935259 + 46 +0.0 + 71 + 1 + 72 + 1 + 1 +Inverted Concave Clipping Path + 73 + 1 + 44 +1.0 +1001 +AcadAnnotative +1000 +AnnotativeData +1002 +{ +1070 + 1 +1070 + 0 +1002 +} + 0 +VIEWPORT + 5 +7E1 +330 +1B +100 +AcDbEntity + 67 + 1 + 8 +0 +100 +AcDbViewport + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +570.045087866109 + 41 +311.052 + 68 + 1 + 69 + 1 + 12 +173.492603840394 + 22 +80.730460592605 + 13 +0.0 + 23 +0.0 + 14 +10.0 + 24 +10.0 + 15 +10.0 + 25 +10.0 + 16 +0.0 + 26 +0.0 + 36 +1.0 + 17 +0.0 + 27 +0.0 + 37 +0.0 + 42 +50.0 + 43 +0.0 + 44 +0.0 + 45 +311.052 + 50 +0.0 + 51 +0.0 + 72 + 100 + 90 + 557152 + 1 + +281 + 0 + 71 + 1 + 74 + 0 +110 +0.0 +120 +0.0 +130 +0.0 +111 +1.0 +121 +0.0 +131 +0.0 +112 +0.0 +122 +1.0 +132 +0.0 + 79 + 0 +146 +0.0 +170 + 0 + 61 + 5 +348 +29 +292 + 0 +282 + 1 +141 +0.0 +142 +0.0 + 63 + 250 +421 + 3355443 +361 +7E2 + 0 +VIEWPORT + 5 +7E3 +330 +1B +100 +AcDbEntity + 67 + 1 + 8 +0 +100 +AcDbViewport + 10 +46.701313807531 + 20 +57.52389539749 + 30 +0.0 + 40 +42.002627615063 + 41 +76.047790794979 + 68 + 2 + 69 + 2 + 12 +10.938206828114 + 22 +7.03366554493 + 13 +0.0 + 23 +0.0 + 14 +10.0 + 24 +10.0 + 15 +10.0 + 25 +10.0 + 16 +0.0 + 26 +0.0 + 36 +1.0 + 17 +0.0 + 27 +0.0 + 37 +0.0 + 42 +50.0 + 43 +0.0 + 44 +0.0 + 45 +20.417153081437 + 50 +0.0 + 51 +0.0 + 72 + 100 + 90 + 819296 + 1 + +281 + 0 + 71 + 1 + 74 + 0 +110 +0.0 +120 +0.0 +130 +0.0 +111 +1.0 +121 +0.0 +131 +0.0 +112 +0.0 +122 +1.0 +132 +0.0 + 79 + 0 +146 +0.0 +170 + 0 + 61 + 5 +348 +29 +292 + 0 +282 + 1 +141 +0.0 +142 +0.0 + 63 + 250 +361 +7E4 + 0 +VIEWPORT + 5 +7E5 +330 +1B +100 +AcDbEntity + 67 + 1 + 8 +0 +100 +AcDbViewport + 10 +59.707866108787 + 20 +167.314719665272 + 30 +0.0 + 40 +80.133539748954 + 41 +37.184937238494 + 68 + 4 + 69 + 3 + 12 +23.797319973276 + 22 +8.913215187032 + 13 +0.0 + 23 +0.0 + 14 +10.0 + 24 +10.0 + 15 +10.0 + 25 +10.0 + 16 +0.0 + 26 +0.0 + 36 +1.0 + 17 +0.0 + 27 +0.0 + 37 +0.0 + 42 +50.0 + 43 +0.0 + 44 +0.0 + 45 +7.130953424958 + 50 +0.0 + 51 +0.0 + 72 + 100 + 90 + 819296 + 1 + +281 + 0 + 71 + 1 + 74 + 0 +110 +0.0 +120 +0.0 +130 +0.0 +111 +1.0 +121 +0.0 +131 +0.0 +112 +0.0 +122 +1.0 +132 +0.0 + 79 + 0 +146 +0.0 +170 + 0 + 61 + 5 +348 +29 +292 + 0 +282 + 1 +141 +0.0 +142 +0.0 + 63 + 250 +361 +7E6 + 0 +VIEWPORT + 5 +7E7 +330 +1B +100 +AcDbEntity + 67 + 1 + 8 +0 +100 +AcDbViewport + 10 +155.273154811715 + 20 +163.578067116386 + 30 +0.0 + 40 +80.133539748954 + 41 +44.658242336265 + 68 + 5 + 69 + 4 + 12 +25.166177792731 + 22 +5.814815923888 + 13 +0.0 + 23 +0.0 + 14 +10.0 + 24 +10.0 + 15 +10.0 + 25 +10.0 + 16 +0.0 + 26 +0.0 + 36 +1.0 + 17 +0.0 + 27 +0.0 + 37 +0.0 + 42 +50.0 + 43 +0.0 + 44 +0.0 + 45 +23.499914392882 + 50 +0.0 + 51 +0.0 + 72 + 100 + 90 + 819296 + 1 + +281 + 0 + 71 + 1 + 74 + 0 +110 +0.0 +120 +0.0 +130 +0.0 +111 +1.0 +121 +0.0 +131 +0.0 +112 +0.0 +122 +1.0 +132 +0.0 + 79 + 0 +146 +0.0 +170 + 0 + 61 + 5 +348 +29 +292 + 0 +282 + 1 +141 +0.0 +142 +0.0 + 63 + 250 +361 +7E8 + 0 +VIEWPORT + 5 +7E9 +330 +1B +100 +AcDbEntity + 67 + 1 + 8 +0 +100 +AcDbViewport + 10 +155.273154811715 + 20 +108.376594142259 + 30 +0.0 + 40 +80.133539748954 + 41 +37.184937238494 + 68 + 6 + 69 + 5 + 12 +14.390100039824 + 22 +26.398150969768 + 13 +0.0 + 23 +0.0 + 14 +10.0 + 24 +10.0 + 15 +10.0 + 25 +10.0 + 16 +0.0 + 26 +0.0 + 36 +1.0 + 17 +0.0 + 27 +0.0 + 37 +0.0 + 42 +50.0 + 43 +0.0 + 44 +0.0 + 45 +9.983334794942 + 50 +0.0 + 51 +0.0 + 72 + 100 + 90 + 819296 + 1 + +281 + 0 + 71 + 1 + 74 + 0 +110 +0.0 +120 +0.0 +130 +0.0 +111 +1.0 +121 +0.0 +131 +0.0 +112 +0.0 +122 +1.0 +132 +0.0 + 79 + 0 +146 +0.0 +170 + 0 + 61 + 5 +348 +29 +292 + 0 +282 + 1 +141 +0.0 +142 +0.0 + 63 + 250 +361 +7EA + 0 +VIEWPORT + 5 +7EB +330 +1B +100 +AcDbEntity + 67 + 1 + 8 +0 +100 +AcDbViewport + 10 +125.339280334728 + 20 +56.457377191163 + 30 +0.0 + 40 +80.133539748954 + 41 +18.684927626041 + 68 + 7 + 69 + 6 + 12 +25.166177792731 + 22 +12.648612332552 + 13 +0.0 + 23 +0.0 + 14 +10.0 + 24 +10.0 + 15 +10.0 + 25 +10.0 + 16 +0.0 + 26 +0.0 + 36 +1.0 + 17 +0.0 + 27 +0.0 + 37 +0.0 + 42 +50.0 + 43 +0.0 + 44 +0.0 + 45 +9.832321575554 + 50 +0.0 + 51 +0.0 + 72 + 100 + 90 + 819296 + 1 + +281 + 0 + 71 + 1 + 74 + 0 +110 +0.0 +120 +0.0 +130 +0.0 +111 +1.0 +121 +0.0 +131 +0.0 +112 +0.0 +122 +1.0 +132 +0.0 + 79 + 0 +146 +0.0 +170 + 0 + 61 + 5 +348 +29 +292 + 0 +282 + 1 +141 +0.0 +142 +0.0 + 63 + 250 +361 +7EC + 0 +VIEWPORT + 5 +833 +330 +1B +100 +AcDbEntity + 67 + 1 + 8 +0 +100 +AcDbViewport + 10 +59.707866108787 + 20 +119.941109623431 + 30 +0.0 + 40 +80.133539748954 + 41 +37.184937238494 + 68 + 3 + 69 + 7 + 12 +33.981580107148 + 22 +6.032730175542 + 13 +0.0 + 23 +0.0 + 14 +10.0 + 24 +10.0 + 15 +10.0 + 25 +10.0 + 16 +0.0 + 26 +0.0 + 36 +1.0 + 17 +0.0 + 27 +0.0 + 37 +0.0 + 42 +50.0 + 43 +0.0 + 44 +0.0 + 45 +9.983334794941 + 50 +0.0 + 51 +0.0 + 72 + 100 + 90 + 819296 + 1 + +281 + 0 + 71 + 1 + 74 + 0 +110 +0.0 +120 +0.0 +130 +0.0 +111 +1.0 +121 +0.0 +131 +0.0 +112 +0.0 +122 +1.0 +132 +0.0 + 79 + 0 +146 +0.0 +170 + 0 + 61 + 5 +348 +29 +292 + 0 +282 + 1 +141 +0.0 +142 +0.0 + 63 + 250 +361 +834 + 0 +ENDSEC + 0 +SECTION + 2 +OBJECTS + 0 +DICTIONARY + 5 +C +330 +0 +100 +AcDbDictionary +281 + 1 + 3 +ACAD_DETAILVIEWSTYLE +350 +77 + 3 +ACAD_GROUP +350 +D + 3 +ACAD_IMAGE_DICT +350 +7C + 3 +ACAD_IMAGE_VARS +350 +97 + 3 +ACAD_LAYOUT +350 +1A + 3 +ACAD_MATERIAL +350 +44 + 3 +ACAD_MLEADERSTYLE +350 +6C + 3 +ACAD_MLINESTYLE +350 +17 + 3 +ACAD_PLOTSETTINGS +350 +19 + 3 +ACAD_PLOTSTYLENAME +350 +E + 3 +ACAD_RENDER_ACTIVE_SETTINGS +350 +7B + 3 +ACAD_SCALELIST +350 +48 + 3 +ACAD_SECTIONVIEWSTYLE +350 +78 + 3 +ACAD_TABLESTYLE +350 +6A + 3 +ACAD_VISUALSTYLE +350 +24 + 3 +ACDB_RECOMPOSE_DATA +350 +84F + 3 +AcDbVariableDictionary +350 +6F + 3 +BCAD_Civil +350 +90 + 0 +SUN + 5 +23 +330 +22 +100 +AcDbSun + 90 + 1 +290 + 0 + 63 + 7 +421 + 16777215 + 40 +1.0 +291 + 1 + 91 + 2455826 + 92 + 54000000 +292 + 0 + 70 + 2 + 71 + 256 +280 + 1 + 0 +SUN + 5 +7DE +330 +7DD +100 +AcDbSun + 90 + 1 +290 + 0 + 63 + 7 +421 + 16777215 + 40 +1.0 +291 + 1 + 91 + 2455826 + 92 + 54000000 +292 + 0 + 70 + 2 + 71 + 256 +280 + 1 + 0 +SUN + 5 +7E0 +330 +7DF +100 +AcDbSun + 90 + 1 +290 + 0 + 63 + 7 +421 + 16777215 + 40 +1.0 +291 + 1 + 91 + 2455826 + 92 + 54000000 +292 + 0 + 70 + 2 + 71 + 256 +280 + 1 + 0 +DICTIONARY + 5 +BF +330 +B9 +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +ACAD_FILTER +360 +C0 + 0 +DICTIONARY + 5 +D0 +330 +CF +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +ACAD_FILTER +360 +D1 + 0 +DICTIONARY + 5 +E4 +330 +E3 +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +ACAD_FILTER +360 +E5 + 0 +DICTIONARY + 5 +F1 +330 +F0 +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +ACAD_FILTER +360 +F2 + 0 +DICTIONARY + 5 +F5 +330 +F4 +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +AcDbContextDataManager +360 +F6 + 0 +DICTIONARY + 5 +F9 +330 +F8 +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +AcDbContextDataManager +360 +FA + 0 +DICTIONARY + 5 +7D1 +330 +7D0 +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +ACAD_FILTER +360 +7D2 + 0 +DICTIONARY + 5 +7D5 +330 +7D4 +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +AcDbContextDataManager +360 +7D6 + 0 +DICTIONARY + 5 +7F8 +330 +7F7 +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +ACAD_FILTER +360 +7F9 + 0 +DICTIONARY + 5 +7FC +330 +7FB +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +AcDbContextDataManager +360 +7FD + 0 +DICTIONARY + 5 +80A +330 +809 +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +ACAD_FILTER +360 +80B + 0 +DICTIONARY + 5 +80E +330 +80D +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +AcDbContextDataManager +360 +80F + 0 +DICTIONARY + 5 +81A +330 +819 +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +ACAD_FILTER +360 +81B + 0 +DICTIONARY + 5 +81E +330 +81D +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +AcDbContextDataManager +360 +81F + 0 +DICTIONARY + 5 +823 +330 +822 +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +ACAD_FILTER +360 +824 + 0 +DICTIONARY + 5 +827 +330 +826 +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +AcDbContextDataManager +360 +828 + 0 +SUN + 5 +7E2 +330 +7E1 +100 +AcDbSun + 90 + 1 +290 + 0 + 63 + 7 +421 + 16777215 + 40 +1.0 +291 + 1 + 91 + 2455826 + 92 + 54000000 +292 + 0 + 70 + 2 + 71 + 256 +280 + 1 + 0 +SUN + 5 +7E4 +330 +7E3 +100 +AcDbSun + 90 + 1 +290 + 0 + 63 + 7 +421 + 16777215 + 40 +1.0 +291 + 1 + 91 + 2455826 + 92 + 54000000 +292 + 0 + 70 + 2 + 71 + 256 +280 + 1 + 0 +SUN + 5 +7E6 +330 +7E5 +100 +AcDbSun + 90 + 1 +290 + 0 + 63 + 7 +421 + 16777215 + 40 +1.0 +291 + 1 + 91 + 2455826 + 92 + 54000000 +292 + 0 + 70 + 2 + 71 + 256 +280 + 1 + 0 +SUN + 5 +7E8 +330 +7E7 +100 +AcDbSun + 90 + 1 +290 + 0 + 63 + 7 +421 + 16777215 + 40 +1.0 +291 + 1 + 91 + 2455826 + 92 + 54000000 +292 + 0 + 70 + 2 + 71 + 256 +280 + 1 + 0 +SUN + 5 +7EA +330 +7E9 +100 +AcDbSun + 90 + 1 +290 + 0 + 63 + 7 +421 + 16777215 + 40 +1.0 +291 + 1 + 91 + 2455826 + 92 + 54000000 +292 + 0 + 70 + 2 + 71 + 256 +280 + 1 + 0 +SUN + 5 +7EC +330 +7EB +100 +AcDbSun + 90 + 1 +290 + 0 + 63 + 7 +421 + 16777215 + 40 +1.0 +291 + 1 + 91 + 2455826 + 92 + 54000000 +292 + 0 + 70 + 2 + 71 + 256 +280 + 1 + 0 +SUN + 5 +834 +330 +833 +100 +AcDbSun + 90 + 1 +290 + 0 + 63 + 7 +421 + 16777215 + 40 +1.0 +291 + 1 + 91 + 2455826 + 92 + 54000000 +292 + 0 + 70 + 2 + 71 + 256 +280 + 1 + 0 +DICTIONARY + 5 +77 +102 +{ACAD_REACTORS +330 +C +102 +} +330 +C +100 +AcDbDictionary +281 + 1 + 3 +Metric50 +350 +7D + 0 +DICTIONARY + 5 +D +102 +{ACAD_REACTORS +330 +C +102 +} +330 +C +100 +AcDbDictionary +281 + 1 + 0 +DICTIONARY + 5 +7C +102 +{ACAD_REACTORS +330 +C +102 +} +330 +C +100 +AcDbDictionary +281 + 1 + 0 +RASTERVARIABLES + 5 +97 +102 +{ACAD_REACTORS +330 +C +102 +} +330 +C +100 +AcDbRasterVariables + 90 + 0 + 70 + 1 + 71 + 1 + 72 + 3 + 0 +DICTIONARY + 5 +1A +102 +{ACAD_REACTORS +330 +C +102 +} +330 +C +100 +AcDbDictionary +281 + 1 + 3 +Layout1 +350 +1E + 3 +Layout2 +350 +41 + 3 +Model +350 +3D + 0 +DICTIONARY + 5 +44 +102 +{ACAD_REACTORS +330 +C +102 +} +330 +C +100 +AcDbDictionary +281 + 1 + 3 +ByBlock +350 +46 + 3 +ByLayer +350 +45 + 3 +Global +350 +47 + 0 +DICTIONARY + 5 +6C +102 +{ACAD_REACTORS +330 +C +102 +} +330 +C +100 +AcDbDictionary +281 + 1 + 3 +Standard +350 +6D + 0 +DICTIONARY + 5 +17 +102 +{ACAD_REACTORS +330 +C +102 +} +330 +C +100 +AcDbDictionary +281 + 1 + 3 +Standard +350 +18 + 0 +DICTIONARY + 5 +19 +102 +{ACAD_REACTORS +330 +C +102 +} +330 +C +100 +AcDbDictionary +281 + 1 + 0 +ACDBDICTIONARYWDFLT + 5 +E +102 +{ACAD_REACTORS +330 +C +102 +} +330 +C +100 +AcDbDictionary +281 + 1 + 3 +Normal +350 +F +100 +AcDbDictionaryWithDefault +340 +F + 0 +MENTALRAYRENDERSETTINGS + 5 +7B +102 +{ACAD_REACTORS +330 +C +102 +} +330 +C +100 +AcDbRenderSettings + 90 + 2 + 1 +Medium +290 + 1 +290 + 1 +290 + 1 +290 + 1 + 1 + + 1 + + 90 + 3 +100 +AcDbMentalRayRenderSettings + 90 + 2 + 90 + 0 + 90 + 1 + 70 + 2 + 40 +3.0 + 40 +3.0 + 40 +0.050000000745 + 40 +0.050000000745 + 40 +0.050000000745 + 40 +0.050000000745 + 70 + 0 +290 + 0 +290 + 1 + 90 + 5 + 90 + 5 + 90 + 5 +290 + 0 + 90 + 500 +290 + 0 + 40 +1.0 + 90 + 10000 + 90 + 5 + 90 + 5 + 90 + 5 +290 + 0 + 90 + 200 +290 + 0 +290 + 0 +290 + 0 + 40 +0.1 + 40 +1.0 + 40 +1500.0 + 70 + 0 + 70 + 0 + 40 +10.0 + 70 + 0 + 70 + 0 +290 + 0 + 1 + + 90 + 128 + 70 + 0 + 90 + 1048 +290 + 0 + 40 +1.0 + 0 +DICTIONARY + 5 +48 +102 +{ACAD_REACTORS +330 +C +102 +} +330 +C +100 +AcDbDictionary +281 + 1 + 3 +A0 +350 +49 + 3 +A1 +350 +4A + 3 +A2 +350 +4B + 3 +A3 +350 +4C + 3 +A4 +350 +4D + 3 +A5 +350 +4E + 3 +A6 +350 +4F + 3 +A7 +350 +50 + 3 +A8 +350 +85 + 3 +A9 +350 +51 + 3 +B0 +350 +52 + 3 +B1 +350 +53 + 3 +B2 +350 +54 + 3 +B3 +350 +86 + 3 +B4 +350 +89 + 3 +B5 +350 +55 + 3 +B6 +350 +56 + 3 +B7 +350 +57 + 3 +B8 +350 +58 + 3 +B9 +350 +59 + 0 +DICTIONARY + 5 +78 +102 +{ACAD_REACTORS +330 +C +102 +} +330 +C +100 +AcDbDictionary +281 + 1 + 3 +Metric50 +350 +7E + 0 +DICTIONARY + 5 +6A +102 +{ACAD_REACTORS +330 +C +102 +} +330 +C +100 +AcDbDictionary +281 + 1 + 3 +Standard +350 +6B + 0 +DICTIONARY + 5 +24 +102 +{ACAD_REACTORS +330 +C +102 +} +330 +C +100 +AcDbDictionary +281 + 1 + 3 +2dWireframe +350 +29 + 3 +Basic +350 +2C + 3 +Brighten +350 +30 + 3 +ColorChange +350 +34 + 3 +Conceptual +350 +2E + 3 +Dim +350 +2F + 3 +EdgeColorOff +350 +37 + 3 +Facepattern +350 +33 + 3 +Flat +350 +25 + 3 +FlatWithEdges +350 +26 + 3 +Gouraud +350 +27 + 3 +GouraudWithEdges +350 +28 + 3 +Hidden +350 +2B + 3 +JitterOff +350 +35 + 3 +Linepattern +350 +32 + 3 +Modeling +350 +6E + 3 +OverhangOff +350 +36 + 3 +Realistic +350 +2D + 3 +Shaded +350 +3C + 3 +Shaded with edges +350 +3B + 3 +Shades of Gray +350 +38 + 3 +Sketchy +350 +39 + 3 +Thicken +350 +31 + 3 +Wireframe +350 +2A + 3 +X-Ray +350 +3A + 0 +XRECORD + 5 +84F +102 +{ACAD_REACTORS +330 +C +102 +} +330 +C +100 +AcDbXrecord +280 + 1 + 90 + 1 +330 +6B + 0 +DICTIONARY + 5 +6F +102 +{ACAD_REACTORS +330 +C +102 +} +330 +C +100 +AcDbDictionary +281 + 1 + 3 +CANNOSCALE +350 +70 + 3 +CENTEREXE +350 +79 + 3 +CENTERLTYPEFILE +350 +7A + 3 +CMLEADERSTYLE +350 +75 + 3 +CTABLESTYLE +350 +74 + 3 +CVIEWDETAILSTYLE +350 +83 + 3 +CVIEWSECTIONSTYLE +350 +84 + 3 +LIGHTINGUNITS +350 +76 + 0 +DICTIONARY + 5 +90 +102 +{ACAD_REACTORS +330 +C +102 +} +330 +C +100 +AcDbDictionary +281 + 1 + 3 +ArcTessellation +350 +91 + 3 +ArcTessellationGrading +350 +92 + 3 +ArcTessellationTemplateElement +350 +93 + 3 +LengthSamplingInterval +350 +94 + 0 +DICTIONARY + 5 +C0 +102 +{ACAD_REACTORS +330 +BF +102 +} +330 +BF +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +SPATIAL +360 +EC + 0 +DICTIONARY + 5 +D1 +102 +{ACAD_REACTORS +330 +D0 +102 +} +330 +D0 +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +SPATIAL +360 +EB + 0 +DICTIONARY + 5 +E5 +102 +{ACAD_REACTORS +330 +E4 +102 +} +330 +E4 +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +SPATIAL +360 +ED + 0 +DICTIONARY + 5 +F2 +102 +{ACAD_REACTORS +330 +F1 +102 +} +330 +F1 +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +SPATIAL +360 +F3 + 0 +DICTIONARY + 5 +F6 +102 +{ACAD_REACTORS +330 +F5 +102 +} +330 +F5 +100 +AcDbDictionary +281 + 1 + 3 +ACDB_ANNOTATIONSCALES +350 +F7 + 0 +DICTIONARY + 5 +FA +102 +{ACAD_REACTORS +330 +F9 +102 +} +330 +F9 +100 +AcDbDictionary +281 + 1 + 3 +ACDB_ANNOTATIONSCALES +350 +FB + 0 +DICTIONARY + 5 +7D2 +102 +{ACAD_REACTORS +330 +7D1 +102 +} +330 +7D1 +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +SPATIAL +360 +7D3 + 0 +DICTIONARY + 5 +7D6 +102 +{ACAD_REACTORS +330 +7D5 +102 +} +330 +7D5 +100 +AcDbDictionary +281 + 1 + 3 +ACDB_ANNOTATIONSCALES +350 +7D7 + 0 +DICTIONARY + 5 +7F9 +102 +{ACAD_REACTORS +330 +7F8 +102 +} +330 +7F8 +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +SPATIAL +360 +7FA + 0 +DICTIONARY + 5 +7FD +102 +{ACAD_REACTORS +330 +7FC +102 +} +330 +7FC +100 +AcDbDictionary +281 + 1 + 3 +ACDB_ANNOTATIONSCALES +350 +7FE + 0 +DICTIONARY + 5 +80B +102 +{ACAD_REACTORS +330 +80A +102 +} +330 +80A +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +SPATIAL +360 +811 + 0 +DICTIONARY + 5 +80F +102 +{ACAD_REACTORS +330 +80E +102 +} +330 +80E +100 +AcDbDictionary +281 + 1 + 3 +ACDB_ANNOTATIONSCALES +350 +810 + 0 +DICTIONARY + 5 +81B +102 +{ACAD_REACTORS +330 +81A +102 +} +330 +81A +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +SPATIAL +360 +821 + 0 +DICTIONARY + 5 +81F +102 +{ACAD_REACTORS +330 +81E +102 +} +330 +81E +100 +AcDbDictionary +281 + 1 + 3 +ACDB_ANNOTATIONSCALES +350 +820 + 0 +DICTIONARY + 5 +824 +102 +{ACAD_REACTORS +330 +823 +102 +} +330 +823 +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +SPATIAL +360 +825 + 0 +DICTIONARY + 5 +828 +102 +{ACAD_REACTORS +330 +827 +102 +} +330 +827 +100 +AcDbDictionary +281 + 1 + 3 +ACDB_ANNOTATIONSCALES +350 +829 + 0 +ACDBDETAILVIEWSTYLE + 5 +7D +102 +{ACAD_REACTORS +330 +77 +102 +} +102 +{ACAD_XDICTIONARY +360 +7F +102 +} +330 +77 +100 +AcDbModelDocViewStyle + 70 + 0 + 3 +Imperial24 +290 + 0 +100 +AcDbDetailViewStyle + 70 + 0 + 71 + 0 + 90 + 3 + 71 + 1 +340 +11 + 62 + 256 + 40 +5.0 +340 +0 + 62 + 256 + 40 +5.0 +300 + + 40 +0.36 +280 + 1 + 71 + 2 +340 +16 + 90 + 25 + 62 + 256 + 71 + 3 +340 +11 + 62 + 256 + 40 +5.0 + 90 + 0 + 40 +15.0 + 90 + 1 +300 +%<\AcVar ViewDetailId>% (%<\AcVar ViewScale \f "%sn">%) + 71 + 4 +340 +16 + 90 + 25 + 62 + 256 +340 +16 + 90 + 25 + 62 + 256 +280 + 0 + 0 +LAYOUT + 5 +1E +102 +{ACAD_REACTORS +330 +1A +102 +} +330 +1A +100 +AcDbPlotSettings + 1 + + 2 +none_device + 4 +ISO_A4_(210.00_x_297.00_MM) + 6 + + 40 +7.5 + 41 +20.0 + 42 +7.5 + 43 +20.0 + 44 +210.0 + 45 +297.0 + 46 +0.0 + 47 +0.0 + 48 +0.0 + 49 +0.0 +140 +0.0 +141 +0.0 +142 +1.0 +143 +1.0 + 70 + 688 + 72 + 1 + 73 + 1 + 74 + 5 + 7 + + 75 + 16 + 76 + 0 + 77 + 2 + 78 + 300 +147 +1.0 +148 +0.0 +149 +0.0 +100 +AcDbLayout + 1 +Layout1 + 70 + 1 + 71 + 1 + 10 +0.0 + 20 +0.0 + 11 +420.0 + 21 +297.0 + 12 +0.0 + 22 +0.0 + 32 +0.0 + 14 +19.64109623431 + 24 +19.5 + 34 +0.0 + 15 +195.339924686192 + 25 +185.907188284519 + 35 +0.0 +146 +0.0 + 13 +0.0 + 23 +0.0 + 33 +0.0 + 16 +1.0 + 26 +0.0 + 36 +0.0 + 17 +0.0 + 27 +1.0 + 37 +0.0 + 76 + 0 +330 +1B +331 +7E1 + 0 +LAYOUT + 5 +41 +102 +{ACAD_REACTORS +330 +1A +102 +} +330 +1A +100 +AcDbPlotSettings + 1 + + 2 +none_device + 4 +ISO_A4_(210.00_x_297.00_MM) + 6 + + 40 +7.5 + 41 +20.0 + 42 +7.5 + 43 +20.0 + 44 +210.0 + 45 +297.0 + 46 +0.0 + 47 +0.0 + 48 +0.0 + 49 +0.0 +140 +0.0 +141 +0.0 +142 +1.0 +143 +1.0 + 70 + 688 + 72 + 1 + 73 + 1 + 74 + 5 + 7 + + 75 + 16 + 76 + 0 + 77 + 2 + 78 + 300 +147 +1.0 +148 +0.0 +149 +0.0 +100 +AcDbLayout + 1 +Layout2 + 70 + 1 + 71 + 2 + 10 +-20.0 + 20 +-7.5 + 11 +277.0 + 21 +202.5 + 12 +0.0 + 22 +0.0 + 32 +0.0 + 14 +25.7 + 24 +19.5 + 34 +0.0 + 15 +231.3 + 25 +175.5 + 35 +0.0 +146 +0.0 + 13 +0.0 + 23 +0.0 + 33 +0.0 + 16 +1.0 + 26 +0.0 + 36 +0.0 + 17 +0.0 + 27 +1.0 + 37 +0.0 + 76 + 0 +330 +3E +331 +7DD + 0 +LAYOUT + 5 +3D +102 +{ACAD_REACTORS +330 +1A +102 +} +330 +1A +100 +AcDbPlotSettings + 1 + + 2 +none_device + 4 +ISO_A4_(210.00_x_297.00_MM) + 6 + + 40 +7.5 + 41 +20.0 + 42 +7.5 + 43 +20.0 + 44 +210.0 + 45 +297.0 + 46 +0.0 + 47 +0.0 + 48 +0.0 + 49 +0.0 +140 +0.0 +141 +0.0 +142 +1.0 +143 +3.004989604802 + 70 + 1712 + 72 + 1 + 73 + 0 + 74 + 0 + 7 + + 75 + 0 + 76 + 0 + 77 + 2 + 78 + 300 +147 +0.332779853349 +148 +-51.200429419625 +149 +0.0 +100 +AcDbLayout + 1 +Model + 70 + 1 + 71 + 0 + 10 +0.0 + 20 +0.0 + 11 +420.0 + 21 +297.0 + 12 +0.0 + 22 +0.0 + 32 +0.0 + 14 +6.969749978424 + 24 +-2.896936162253 + 34 +0.0 + 15 +43.924763770251 + 25 +30.343955696037 + 35 +0.0 +146 +0.0 + 13 +0.0 + 23 +0.0 + 33 +0.0 + 16 +1.0 + 26 +0.0 + 36 +0.0 + 17 +0.0 + 27 +1.0 + 37 +0.0 + 76 + 0 +330 +1F +331 +22 + 0 +MATERIAL + 5 +46 +102 +{ACAD_REACTORS +330 +44 +102 +} +330 +44 +100 +AcDbMaterial + 1 +ByBlock + 71 + 1 + 91 +-1023410177 + 72 + 1 + 94 + 127 + 0 +MATERIAL + 5 +45 +102 +{ACAD_REACTORS +330 +44 +102 +} +330 +44 +100 +AcDbMaterial + 1 +ByLayer + 71 + 1 + 91 +-1023410177 + 72 + 1 + 94 + 127 + 0 +MATERIAL + 5 +47 +102 +{ACAD_REACTORS +330 +44 +102 +} +330 +44 +100 +AcDbMaterial + 1 +Global + 72 + 1 + 94 + 127 + 0 +MLEADERSTYLE + 5 +6D +102 +{ACAD_REACTORS +330 +6C +102 +} +330 +6C +100 +AcDbMLeaderStyle +179 + 2 +170 + 2 +171 + 1 +172 + 0 + 90 + 2 + 40 +0.0 + 41 +0.0 +173 + 1 + 91 +-1056964608 +340 +14 + 92 + -2 +290 + 1 + 42 +2.0 +291 + 1 + 43 +8.0 + 3 +Standard +341 +0 + 44 +4.0 +300 + +342 +11 +174 + 1 +178 + 1 +175 + 1 +176 + 0 + 93 +-1056964608 + 45 +4.0 +292 + 0 +297 + 0 + 46 +4.0 +343 +0 + 94 +-1056964608 + 47 +1.0 + 49 +1.0 +140 +1.0 +293 + 1 +141 +0.0 +294 + 1 +177 + 0 +142 +1.0 +295 + 0 +296 + 0 +143 +3.75 +271 + 0 +272 + 9 +273 + 9 +298 + 0 + 0 +MLINESTYLE + 5 +18 +102 +{ACAD_REACTORS +330 +17 +102 +} +330 +17 +100 +AcDbMlineStyle + 2 +Standard + 70 + 0 + 3 + + 62 + 256 + 51 +90.0 + 52 +90.0 + 71 + 2 + 49 +0.5 + 62 + 256 + 6 +BYLAYER + 49 +-0.5 + 62 + 256 + 6 +BYLAYER + 0 +ACDBPLACEHOLDER + 5 +F +102 +{ACAD_REACTORS +330 +E +102 +} +330 +E + 0 +SCALE + 5 +49 +102 +{ACAD_REACTORS +330 +48 +102 +} +330 +48 +100 +AcDbScale + 70 + 0 +300 +1:1 +140 +1.0 +141 +1.0 +290 + 1 + 0 +SCALE + 5 +4A +102 +{ACAD_REACTORS +330 +48 +102 +} +330 +48 +100 +AcDbScale + 70 + 0 +300 +1:2 +140 +1.0 +141 +2.0 +290 + 0 + 0 +SCALE + 5 +4B +102 +{ACAD_REACTORS +330 +48 +102 +} +330 +48 +100 +AcDbScale + 70 + 0 +300 +1:4 +140 +1.0 +141 +4.0 +290 + 0 + 0 +SCALE + 5 +4C +102 +{ACAD_REACTORS +330 +48 +102 +} +330 +48 +100 +AcDbScale + 70 + 0 +300 +1:5 +140 +1.0 +141 +5.0 +290 + 0 + 0 +SCALE + 5 +4D +102 +{ACAD_REACTORS +330 +48 +102 +} +330 +48 +100 +AcDbScale + 70 + 0 +300 +1:8 +140 +1.0 +141 +8.0 +290 + 0 + 0 +SCALE + 5 +4E +102 +{ACAD_REACTORS +330 +48 +102 +} +330 +48 +100 +AcDbScale + 70 + 0 +300 +1:10 +140 +1.0 +141 +10.0 +290 + 0 + 0 +SCALE + 5 +4F +102 +{ACAD_REACTORS +330 +48 +102 +} +330 +48 +100 +AcDbScale + 70 + 0 +300 +1:16 +140 +1.0 +141 +16.0 +290 + 0 + 0 +SCALE + 5 +50 +102 +{ACAD_REACTORS +330 +48 +102 +} +330 +48 +100 +AcDbScale + 70 + 0 +300 +1:20 +140 +1.0 +141 +20.0 +290 + 0 + 0 +SCALE + 5 +85 +102 +{ACAD_REACTORS +330 +48 +102 +} +330 +48 +100 +AcDbScale + 70 + 0 +300 +1:25 +140 +1.0 +141 +25.0 +290 + 0 + 0 +SCALE + 5 +51 +102 +{ACAD_REACTORS +330 +48 +102 +} +330 +48 +100 +AcDbScale + 70 + 0 +300 +1:30 +140 +1.0 +141 +30.0 +290 + 0 + 0 +SCALE + 5 +52 +102 +{ACAD_REACTORS +330 +48 +102 +} +330 +48 +100 +AcDbScale + 70 + 0 +300 +1:40 +140 +1.0 +141 +40.0 +290 + 0 + 0 +SCALE + 5 +53 +102 +{ACAD_REACTORS +330 +48 +102 +} +330 +48 +100 +AcDbScale + 70 + 0 +300 +1:50 +140 +1.0 +141 +50.0 +290 + 0 + 0 +SCALE + 5 +54 +102 +{ACAD_REACTORS +330 +48 +102 +} +330 +48 +100 +AcDbScale + 70 + 0 +300 +1:100 +140 +1.0 +141 +100.0 +290 + 0 + 0 +SCALE + 5 +86 +102 +{ACAD_REACTORS +330 +48 +102 +} +330 +48 +100 +AcDbScale + 70 + 0 +300 +1:500 +140 +1.0 +141 +500.0 +290 + 0 + 0 +SCALE + 5 +89 +102 +{ACAD_REACTORS +330 +48 +102 +} +330 +48 +100 +AcDbScale + 70 + 0 +300 +1:1000 +140 +1.0 +141 +1000.0 +290 + 0 + 0 +SCALE + 5 +55 +102 +{ACAD_REACTORS +330 +48 +102 +} +330 +48 +100 +AcDbScale + 70 + 0 +300 +2:1 +140 +2.0 +141 +1.0 +290 + 0 + 0 +SCALE + 5 +56 +102 +{ACAD_REACTORS +330 +48 +102 +} +330 +48 +100 +AcDbScale + 70 + 0 +300 +4:1 +140 +4.0 +141 +1.0 +290 + 0 + 0 +SCALE + 5 +57 +102 +{ACAD_REACTORS +330 +48 +102 +} +330 +48 +100 +AcDbScale + 70 + 0 +300 +8:1 +140 +8.0 +141 +1.0 +290 + 0 + 0 +SCALE + 5 +58 +102 +{ACAD_REACTORS +330 +48 +102 +} +330 +48 +100 +AcDbScale + 70 + 0 +300 +10:1 +140 +10.0 +141 +1.0 +290 + 0 + 0 +SCALE + 5 +59 +102 +{ACAD_REACTORS +330 +48 +102 +} +330 +48 +100 +AcDbScale + 70 + 0 +300 +100:1 +140 +100.0 +141 +1.0 +290 + 0 + 0 +ACDBSECTIONVIEWSTYLE + 5 +7E +102 +{ACAD_REACTORS +330 +78 +102 +} +102 +{ACAD_XDICTIONARY +360 +81 +102 +} +330 +78 +100 +AcDbModelDocViewStyle + 70 + 0 + 3 +Imperial24 +290 + 0 +100 +AcDbSectionViewStyle + 70 + 0 + 71 + 0 + 90 + 110 + 71 + 1 +340 +11 + 62 + 256 + 40 +5.0 +340 +0 +340 +0 + 62 + 256 + 40 +5.0 +300 +I, O, Q, S, X, Z + 40 +10.0 + 90 + 0 + 40 +2.5 + 90 + 0 + 71 + 2 +340 +16 + 90 + 25 + 62 + 256 +340 +16 + 90 + 50 + 62 + 256 + 40 +5.0 + 40 +2.5 + 40 +5.0 + 71 + 3 +340 +11 + 62 + 256 + 40 +5.0 + 90 + 0 + 40 +15.0 + 90 + 1 +300 +%<\AcVar ViewSectionStartId>%-%<\AcVar ViewSectionEndId>% (%<\AcVar ViewScale \f "%sn">%) + 71 + 4 + 62 + 256 + 62 + 257 +300 +ANSI31 + 40 +1.0 + 90 + 0 +290 + 0 +290 + 0 + 90 + 6 + 40 +0.0 + 40 +1.570796 + 40 +0.261799 + 40 +1.308997 + 40 +-0.261799 + 40 +1.832596 + 0 +TABLESTYLE + 5 +6B +102 +{ACAD_REACTORS +330 +6A +102 +} +102 +{ACAD_XDICTIONARY +360 +84D +102 +} +330 +6A +100 +AcDbTableStyle + 3 +Standard + 70 + 0 + 71 + 0 + 40 +1.5 + 41 +1.5 +280 + 0 +281 + 0 + 7 +Standard +140 +4.5 +170 + 2 + 62 + 0 + 63 + 257 +283 + 0 + 90 + 4 + 91 + 0 + 1 + +274 + -2 +284 + 1 + 64 + 0 +275 + -2 +285 + 1 + 65 + 0 +276 + -2 +286 + 1 + 66 + 0 +277 + -2 +287 + 1 + 67 + 0 +278 + -2 +288 + 1 + 68 + 0 +279 + -2 +289 + 1 + 69 + 0 + 7 +Standard +140 +6.0 +170 + 5 + 62 + 0 + 63 + 257 +283 + 0 + 90 + 4 + 91 + 0 + 1 + +274 + -2 +284 + 1 + 64 + 0 +275 + -2 +285 + 1 + 65 + 0 +276 + -2 +286 + 1 + 66 + 0 +277 + -2 +287 + 1 + 67 + 0 +278 + -2 +288 + 1 + 68 + 0 +279 + -2 +289 + 1 + 69 + 0 + 7 +Standard +140 +4.5 +170 + 5 + 62 + 0 + 63 + 257 +283 + 0 + 90 + 4 + 91 + 0 + 1 + +274 + -2 +284 + 1 + 64 + 0 +275 + -2 +285 + 1 + 65 + 0 +276 + -2 +286 + 1 + 66 + 0 +277 + -2 +287 + 1 + 67 + 0 +278 + -2 +288 + 1 + 68 + 0 +279 + -2 +289 + 1 + 69 + 0 + 0 +VISUALSTYLE + 5 +29 +102 +{ACAD_REACTORS +330 +24 +102 +} +330 +24 +100 +AcDbVisualStyle + 2 +2dWireframe + 70 + 4 +177 + 3 +291 + 0 + 70 + 58 + 90 + 0 +176 + 1 + 90 + 2 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 + 40 +0.6 +176 + 1 + 40 +30.0 +176 + 1 + 62 + 7 +420 + 16777215 +176 + 1 + 90 + 1 +176 + 1 + 90 + 4 +176 + 1 + 62 + 7 +176 + 1 + 62 + 257 +176 + 1 + 90 + 1 +176 + 1 + 90 + 1 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 257 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 6 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 90 + 5 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 1 +176 + 1 + 40 +0.0 +176 + 1 + 90 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +VISUALSTYLE + 5 +2C +102 +{ACAD_REACTORS +330 +24 +102 +} +330 +24 +100 +AcDbVisualStyle + 2 +Basic + 70 + 7 +177 + 3 +291 + 1 + 70 + 58 + 90 + 1 +176 + 1 + 90 + 0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 0 +176 + 1 + 40 +0.6 +176 + 1 + 40 +30.0 +176 + 1 + 62 + 7 +420 + 16777215 +176 + 1 + 90 + 0 +176 + 1 + 90 + 4 +176 + 1 + 62 + 7 +176 + 1 + 62 + 257 +176 + 1 + 90 + 1 +176 + 1 + 90 + 1 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 8 +176 + 1 + 62 + 7 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 6 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 90 + 5 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 1 +176 + 1 + 40 +0.0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +VISUALSTYLE + 5 +30 +102 +{ACAD_REACTORS +330 +24 +102 +} +330 +24 +100 +AcDbVisualStyle + 2 +Brighten + 70 + 12 +177 + 3 +291 + 1 + 70 + 58 + 90 + 2 +176 + 1 + 90 + 2 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 + 40 +0.6 +176 + 1 + 40 +30.0 +176 + 1 + 62 + 7 +420 + 16777215 +176 + 1 + 90 + 1 +176 + 1 + 90 + 4 +176 + 1 + 62 + 7 +176 + 1 + 62 + 257 +176 + 1 + 90 + 1 +176 + 1 + 90 + 1 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 8 +176 + 1 + 62 + 7 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 6 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 90 + 5 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 1 +176 + 1 + 40 +50.0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +VISUALSTYLE + 5 +34 +102 +{ACAD_REACTORS +330 +24 +102 +} +330 +24 +100 +AcDbVisualStyle + 2 +ColorChange + 70 + 16 +177 + 3 +291 + 1 + 70 + 58 + 90 + 2 +176 + 1 + 90 + 2 +176 + 1 + 90 + 3 +176 + 1 + 90 + 0 +176 + 1 + 40 +0.6 +176 + 1 + 40 +30.0 +176 + 1 + 62 + 8 +420 + 8421504 +176 + 1 + 90 + 1 +176 + 1 + 90 + 4 +176 + 1 + 62 + 7 +176 + 1 + 62 + 257 +176 + 1 + 90 + 1 +176 + 1 + 90 + 1 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 8 +176 + 1 + 62 + 8 +420 + 8421504 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 6 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 90 + 5 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 1 +176 + 1 + 40 +0.0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +VISUALSTYLE + 5 +2E +102 +{ACAD_REACTORS +330 +24 +102 +} +330 +24 +100 +AcDbVisualStyle + 2 +Conceptual + 70 + 9 +177 + 3 +291 + 0 + 70 + 58 + 90 + 3 +176 + 1 + 90 + 2 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 + 40 +0.6 +176 + 1 + 40 +30.0 +176 + 1 + 62 + 7 +420 + 16777215 +176 + 1 + 90 + 2 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 62 + 257 +176 + 1 + 90 + 1 +176 + 1 + 90 + 1 +176 + 1 + 40 +179.0 +176 + 1 + 90 + 8 +176 + 1 + 62 + 7 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 6 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 90 + 3 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 1 +176 + 1 + 40 +0.0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +VISUALSTYLE + 5 +2F +102 +{ACAD_REACTORS +330 +24 +102 +} +330 +24 +100 +AcDbVisualStyle + 2 +Dim + 70 + 11 +177 + 3 +291 + 1 + 70 + 58 + 90 + 2 +176 + 1 + 90 + 2 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 + 40 +0.6 +176 + 1 + 40 +30.0 +176 + 1 + 62 + 7 +420 + 16777215 +176 + 1 + 90 + 1 +176 + 1 + 90 + 4 +176 + 1 + 62 + 7 +176 + 1 + 62 + 257 +176 + 1 + 90 + 1 +176 + 1 + 90 + 1 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 8 +176 + 1 + 62 + 7 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 6 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 90 + 5 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 1 +176 + 1 + 40 +-50.0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +VISUALSTYLE + 5 +37 +102 +{ACAD_REACTORS +330 +24 +102 +} +330 +24 +100 +AcDbVisualStyle + 2 +EdgeColorOff + 70 + 22 +177 + 3 +291 + 1 + 70 + 58 + 90 + 2 +176 + 0 + 90 + 2 +176 + 0 + 90 + 0 +176 + 0 + 90 + 0 +176 + 0 + 40 +0.6 +176 + 0 + 40 +30.0 +176 + 0 + 62 + 7 +420 + 16777215 +176 + 0 + 90 + 1 +176 + 0 + 90 + 4 +176 + 0 + 62 + 7 +176 + 0 + 62 + 257 +176 + 0 + 90 + 1 +176 + 0 + 90 + 1 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 8 +176 + 2 + 62 + 7 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 1 +176 + 0 + 90 + 6 +176 + 0 + 90 + 2 +176 + 0 + 62 + 7 +176 + 0 + 90 + 5 +176 + 0 + 90 + 0 +176 + 0 + 90 + 0 +176 + 0 +290 + 0 +176 + 0 + 90 + 1 +176 + 0 + 40 +0.0 +176 + 0 + 90 + 0 +176 + 0 +290 + 0 +176 + 0 +290 + 1 +176 + 0 +290 + 1 +176 + 0 +290 + 0 +176 + 0 +290 + 0 +176 + 0 +290 + 0 +176 + 0 +290 + 0 +176 + 0 +290 + 0 +176 + 0 +290 + 0 +176 + 0 + 90 + 50 +176 + 0 + 40 +0.0 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 0 +176 + 0 + 62 + 18 +420 + 0 +176 + 0 + 90 + 50 +176 + 0 + 90 + 3 +176 + 0 + 62 + 5 +420 + 255 +176 + 0 +290 + 0 +176 + 0 + 90 + 50 +176 + 0 + 90 + 50 +176 + 0 + 90 + 50 +176 + 0 +290 + 0 +176 + 0 + 90 + 50 +176 + 0 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 0 + 1 +strokes_ogs.tif +176 + 0 +290 + 0 +176 + 0 + 40 +1.0 +176 + 0 + 40 +1.0 +176 + 0 + 0 +VISUALSTYLE + 5 +33 +102 +{ACAD_REACTORS +330 +24 +102 +} +330 +24 +100 +AcDbVisualStyle + 2 +Facepattern + 70 + 15 +177 + 3 +291 + 1 + 70 + 58 + 90 + 2 +176 + 1 + 90 + 2 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 + 40 +0.6 +176 + 1 + 40 +30.0 +176 + 1 + 62 + 7 +420 + 16777215 +176 + 1 + 90 + 1 +176 + 1 + 90 + 4 +176 + 1 + 62 + 7 +176 + 1 + 62 + 257 +176 + 1 + 90 + 1 +176 + 1 + 90 + 1 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 8 +176 + 1 + 62 + 7 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 6 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 90 + 5 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 1 +176 + 1 + 40 +0.0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +VISUALSTYLE + 5 +25 +102 +{ACAD_REACTORS +330 +24 +102 +} +330 +24 +100 +AcDbVisualStyle + 2 +Flat + 70 + 0 +177 + 3 +291 + 1 + 70 + 58 + 90 + 2 +176 + 1 + 90 + 1 +176 + 1 + 90 + 1 +176 + 1 + 90 + 2 +176 + 1 + 40 +0.6 +176 + 1 + 40 +30.0 +176 + 1 + 62 + 7 +420 + 16777215 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 7 +176 + 1 + 62 + 257 +176 + 1 + 90 + 1 +176 + 1 + 90 + 1 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 8 +176 + 1 + 62 + 7 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 6 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 90 + 5 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 13 +176 + 1 + 40 +0.0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +VISUALSTYLE + 5 +26 +102 +{ACAD_REACTORS +330 +24 +102 +} +330 +24 +100 +AcDbVisualStyle + 2 +FlatWithEdges + 70 + 1 +177 + 3 +291 + 1 + 70 + 58 + 90 + 2 +176 + 1 + 90 + 1 +176 + 1 + 90 + 1 +176 + 1 + 90 + 2 +176 + 1 + 40 +0.6 +176 + 1 + 40 +30.0 +176 + 1 + 62 + 7 +420 + 16777215 +176 + 1 + 90 + 1 +176 + 1 + 90 + 0 +176 + 1 + 62 + 7 +176 + 1 + 62 + 257 +176 + 1 + 90 + 1 +176 + 1 + 90 + 1 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 257 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 6 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 90 + 5 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 13 +176 + 1 + 40 +0.0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +VISUALSTYLE + 5 +27 +102 +{ACAD_REACTORS +330 +24 +102 +} +330 +24 +100 +AcDbVisualStyle + 2 +Gouraud + 70 + 2 +177 + 3 +291 + 1 + 70 + 58 + 90 + 2 +176 + 1 + 90 + 2 +176 + 1 + 90 + 1 +176 + 1 + 90 + 2 +176 + 1 + 40 +0.6 +176 + 1 + 40 +30.0 +176 + 1 + 62 + 7 +420 + 16777215 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 7 +176 + 1 + 62 + 257 +176 + 1 + 90 + 1 +176 + 1 + 90 + 1 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 7 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 6 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 90 + 5 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 13 +176 + 1 + 40 +0.0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +VISUALSTYLE + 5 +28 +102 +{ACAD_REACTORS +330 +24 +102 +} +330 +24 +100 +AcDbVisualStyle + 2 +GouraudWithEdges + 70 + 3 +177 + 3 +291 + 1 + 70 + 58 + 90 + 2 +176 + 1 + 90 + 2 +176 + 1 + 90 + 1 +176 + 1 + 90 + 2 +176 + 1 + 40 +0.6 +176 + 1 + 40 +30.0 +176 + 1 + 62 + 7 +420 + 16777215 +176 + 1 + 90 + 1 +176 + 1 + 90 + 0 +176 + 1 + 62 + 7 +176 + 1 + 62 + 257 +176 + 1 + 90 + 1 +176 + 1 + 90 + 1 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 257 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 6 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 90 + 5 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 13 +176 + 1 + 40 +0.0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +VISUALSTYLE + 5 +2B +102 +{ACAD_REACTORS +330 +24 +102 +} +330 +24 +100 +AcDbVisualStyle + 2 +Hidden + 70 + 6 +177 + 3 +291 + 0 + 70 + 58 + 90 + 1 +176 + 1 + 90 + 2 +176 + 1 + 90 + 2 +176 + 1 + 90 + 0 +176 + 1 + 40 +0.6 +176 + 1 + 40 +30.0 +176 + 1 + 62 + 7 +420 + 16777215 +176 + 1 + 90 + 2 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 62 + 257 +176 + 1 + 90 + 2 +176 + 1 + 90 + 1 +176 + 1 + 40 +40.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 257 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 6 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 90 + 3 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 1 +176 + 1 + 40 +0.0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +VISUALSTYLE + 5 +35 +102 +{ACAD_REACTORS +330 +24 +102 +} +330 +24 +100 +AcDbVisualStyle + 2 +JitterOff + 70 + 20 +177 + 3 +291 + 1 + 70 + 58 + 90 + 2 +176 + 0 + 90 + 2 +176 + 0 + 90 + 0 +176 + 0 + 90 + 0 +176 + 0 + 40 +0.6 +176 + 0 + 40 +30.0 +176 + 0 + 62 + 7 +420 + 16777215 +176 + 0 + 90 + 1 +176 + 0 + 90 + 4 +176 + 0 + 62 + 7 +176 + 0 + 62 + 257 +176 + 0 + 90 + 1 +176 + 0 + 90 + 1 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 10 +176 + 2 + 62 + 7 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 1 +176 + 0 + 90 + 6 +176 + 0 + 90 + 2 +176 + 0 + 62 + 7 +176 + 0 + 90 + 5 +176 + 0 + 90 + 0 +176 + 0 + 90 + 0 +176 + 0 +290 + 0 +176 + 0 + 90 + 1 +176 + 0 + 40 +0.0 +176 + 0 + 90 + 0 +176 + 0 +290 + 0 +176 + 0 +290 + 1 +176 + 0 +290 + 1 +176 + 0 +290 + 0 +176 + 0 +290 + 0 +176 + 0 +290 + 0 +176 + 0 +290 + 0 +176 + 0 +290 + 0 +176 + 0 +290 + 0 +176 + 0 + 90 + 50 +176 + 0 + 40 +0.0 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 0 +176 + 0 + 62 + 18 +420 + 0 +176 + 0 + 90 + 50 +176 + 0 + 90 + 3 +176 + 0 + 62 + 5 +420 + 255 +176 + 0 +290 + 0 +176 + 0 + 90 + 50 +176 + 0 + 90 + 50 +176 + 0 + 90 + 50 +176 + 0 +290 + 0 +176 + 0 + 90 + 50 +176 + 0 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 0 + 1 +strokes_ogs.tif +176 + 0 +290 + 0 +176 + 0 + 40 +1.0 +176 + 0 + 40 +1.0 +176 + 0 + 0 +VISUALSTYLE + 5 +32 +102 +{ACAD_REACTORS +330 +24 +102 +} +330 +24 +100 +AcDbVisualStyle + 2 +Linepattern + 70 + 14 +177 + 3 +291 + 1 + 70 + 58 + 90 + 2 +176 + 1 + 90 + 2 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 + 40 +0.6 +176 + 1 + 40 +30.0 +176 + 1 + 62 + 7 +420 + 16777215 +176 + 1 + 90 + 1 +176 + 1 + 90 + 4 +176 + 1 + 62 + 7 +176 + 1 + 62 + 257 +176 + 1 + 90 + 7 +176 + 1 + 90 + 7 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 8 +176 + 1 + 62 + 7 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 6 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 90 + 5 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 1 +176 + 1 + 40 +0.0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +VISUALSTYLE + 5 +6E +102 +{ACAD_REACTORS +330 +24 +102 +} +330 +24 +100 +AcDbVisualStyle + 2 +Modeling + 70 + 10 +177 + 3 +291 + 0 + 70 + 58 + 90 + 2 +176 + 1 + 90 + 3 +176 + 1 + 90 + 0 +176 + 1 + 90 + 2 +176 + 1 + 40 +0.6 +176 + 1 + 40 +30.0 +176 + 1 + 62 + 7 +420 + 16777215 +176 + 1 + 90 + 2 +176 + 1 + 90 + 0 +176 + 1 + 62 + 7 +176 + 1 + 62 + 257 +176 + 1 + 90 + 1 +176 + 1 + 90 + 1 +176 + 1 + 40 +180.0 +176 + 1 + 90 + 8 +176 + 1 + 62 + 8 +420 + 7895160 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 6 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 90 + 5 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 13 +176 + 1 + 40 +0.0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +VISUALSTYLE + 5 +36 +102 +{ACAD_REACTORS +330 +24 +102 +} +330 +24 +100 +AcDbVisualStyle + 2 +OverhangOff + 70 + 21 +177 + 3 +291 + 1 + 70 + 58 + 90 + 2 +176 + 0 + 90 + 2 +176 + 0 + 90 + 0 +176 + 0 + 90 + 0 +176 + 0 + 40 +0.6 +176 + 0 + 40 +30.0 +176 + 0 + 62 + 7 +420 + 16777215 +176 + 0 + 90 + 1 +176 + 0 + 90 + 4 +176 + 0 + 62 + 7 +176 + 0 + 62 + 257 +176 + 0 + 90 + 1 +176 + 0 + 90 + 1 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 9 +176 + 2 + 62 + 7 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 1 +176 + 0 + 90 + 6 +176 + 0 + 90 + 2 +176 + 0 + 62 + 7 +176 + 0 + 90 + 5 +176 + 0 + 90 + 0 +176 + 0 + 90 + 0 +176 + 0 +290 + 0 +176 + 0 + 90 + 1 +176 + 0 + 40 +0.0 +176 + 0 + 90 + 0 +176 + 0 +290 + 0 +176 + 0 +290 + 1 +176 + 0 +290 + 1 +176 + 0 +290 + 0 +176 + 0 +290 + 0 +176 + 0 +290 + 0 +176 + 0 +290 + 0 +176 + 0 +290 + 0 +176 + 0 +290 + 0 +176 + 0 + 90 + 50 +176 + 0 + 40 +0.0 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 0 +176 + 0 + 62 + 18 +420 + 0 +176 + 0 + 90 + 50 +176 + 0 + 90 + 3 +176 + 0 + 62 + 5 +420 + 255 +176 + 0 +290 + 0 +176 + 0 + 90 + 50 +176 + 0 + 90 + 50 +176 + 0 + 90 + 50 +176 + 0 +290 + 0 +176 + 0 + 90 + 50 +176 + 0 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 0 + 1 +strokes_ogs.tif +176 + 0 +290 + 0 +176 + 0 + 40 +1.0 +176 + 0 + 40 +1.0 +176 + 0 + 0 +VISUALSTYLE + 5 +2D +102 +{ACAD_REACTORS +330 +24 +102 +} +330 +24 +100 +AcDbVisualStyle + 2 +Realistic + 70 + 8 +177 + 3 +291 + 0 + 70 + 58 + 90 + 2 +176 + 1 + 90 + 3 +176 + 1 + 90 + 0 +176 + 1 + 90 + 2 +176 + 1 + 40 +0.6 +176 + 1 + 40 +30.0 +176 + 1 + 62 + 7 +420 + 16777215 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 7 +176 + 1 + 62 + 257 +176 + 1 + 90 + 1 +176 + 1 + 90 + 1 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 8 +176 + 1 + 62 + 257 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 6 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 90 + 3 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 13 +176 + 1 + 40 +0.0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +VISUALSTYLE + 5 +3C +102 +{ACAD_REACTORS +330 +24 +102 +} +330 +24 +100 +AcDbVisualStyle + 2 +Shaded + 70 + 27 +177 + 3 +291 + 0 + 70 + 58 + 90 + 2 +176 + 1 + 90 + 2 +176 + 1 + 90 + 1 +176 + 1 + 90 + 2 +176 + 1 + 40 +0.6 +176 + 1 + 40 +30.0 +176 + 1 + 62 + 7 +420 + 16777215 +176 + 1 + 90 + 0 +176 + 1 + 90 + 4 +176 + 1 + 62 + 7 +176 + 1 + 62 + 257 +176 + 1 + 90 + 1 +176 + 1 + 90 + 1 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 8 +176 + 1 + 62 + 257 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 6 +176 + 1 + 90 + 2 +176 + 1 + 62 + 8 +420 + 7895160 +176 + 1 + 90 + 3 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 5 +176 + 1 + 40 +0.0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +VISUALSTYLE + 5 +3B +102 +{ACAD_REACTORS +330 +24 +102 +} +330 +24 +100 +AcDbVisualStyle + 2 +Shaded with edges + 70 + 26 +177 + 3 +291 + 0 + 70 + 58 + 90 + 2 +176 + 1 + 90 + 2 +176 + 1 + 90 + 1 +176 + 1 + 90 + 2 +176 + 1 + 40 +0.6 +176 + 1 + 40 +30.0 +176 + 1 + 62 + 7 +420 + 16777215 +176 + 1 + 90 + 1 +176 + 1 + 90 + 10 +176 + 1 + 62 + 7 +176 + 1 + 62 + 257 +176 + 1 + 90 + 2 +176 + 1 + 90 + 1 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 8 +176 + 1 + 62 + 257 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 6 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 90 + 3 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 5 +176 + 1 + 40 +0.0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +VISUALSTYLE + 5 +38 +102 +{ACAD_REACTORS +330 +24 +102 +} +330 +24 +100 +AcDbVisualStyle + 2 +Shades of Gray + 70 + 23 +177 + 3 +291 + 0 + 70 + 58 + 90 + 2 +176 + 1 + 90 + 2 +176 + 1 + 90 + 3 +176 + 1 + 90 + 0 +176 + 1 + 40 +0.6 +176 + 1 + 40 +30.0 +176 + 1 + 62 + 7 +420 + 16777215 +176 + 1 + 90 + 2 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 62 + 7 +176 + 1 + 90 + 1 +176 + 1 + 90 + 1 +176 + 1 + 40 +40.0 +176 + 1 + 90 + 8 +176 + 1 + 62 + 7 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 6 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 90 + 3 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 1 +176 + 1 + 40 +0.0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +VISUALSTYLE + 5 +39 +102 +{ACAD_REACTORS +330 +24 +102 +} +330 +24 +100 +AcDbVisualStyle + 2 +Sketchy + 70 + 24 +177 + 3 +291 + 0 + 70 + 58 + 90 + 1 +176 + 1 + 90 + 2 +176 + 1 + 90 + 2 +176 + 1 + 90 + 0 +176 + 1 + 40 +0.6 +176 + 1 + 40 +30.0 +176 + 1 + 62 + 7 +420 + 16777215 +176 + 1 + 90 + 2 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 62 + 7 +176 + 1 + 90 + 1 +176 + 1 + 90 + 1 +176 + 1 + 40 +40.0 +176 + 1 + 90 + 11 +176 + 1 + 62 + 7 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 6 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 90 + 6 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 1 +176 + 1 + 40 +0.0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +VISUALSTYLE + 5 +31 +102 +{ACAD_REACTORS +330 +24 +102 +} +330 +24 +100 +AcDbVisualStyle + 2 +Thicken + 70 + 13 +177 + 3 +291 + 1 + 70 + 58 + 90 + 2 +176 + 1 + 90 + 2 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 + 40 +0.6 +176 + 1 + 40 +30.0 +176 + 1 + 62 + 7 +420 + 16777215 +176 + 1 + 90 + 1 +176 + 1 + 90 + 4 +176 + 1 + 62 + 7 +176 + 1 + 62 + 257 +176 + 1 + 90 + 1 +176 + 1 + 90 + 1 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 12 +176 + 1 + 62 + 7 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 6 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 90 + 5 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 1 +176 + 1 + 40 +0.0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +VISUALSTYLE + 5 +2A +102 +{ACAD_REACTORS +330 +24 +102 +} +330 +24 +100 +AcDbVisualStyle + 2 +Wireframe + 70 + 5 +177 + 3 +291 + 0 + 70 + 58 + 90 + 0 +176 + 1 + 90 + 2 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 + 40 +0.6 +176 + 1 + 40 +30.0 +176 + 1 + 62 + 7 +420 + 16777215 +176 + 1 + 90 + 1 +176 + 1 + 90 + 4 +176 + 1 + 62 + 7 +176 + 1 + 62 + 257 +176 + 1 + 90 + 1 +176 + 1 + 90 + 1 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 257 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 6 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 90 + 3 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 1 +176 + 1 + 40 +0.0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +VISUALSTYLE + 5 +3A +102 +{ACAD_REACTORS +330 +24 +102 +} +330 +24 +100 +AcDbVisualStyle + 2 +X-Ray + 70 + 25 +177 + 3 +291 + 0 + 70 + 58 + 90 + 2 +176 + 1 + 90 + 2 +176 + 1 + 90 + 1 +176 + 1 + 90 + 1 +176 + 1 + 40 +0.5 +176 + 1 + 40 +30.0 +176 + 1 + 62 + 7 +420 + 16777215 +176 + 1 + 90 + 1 +176 + 1 + 90 + 0 +176 + 1 + 62 + 7 +176 + 1 + 62 + 257 +176 + 1 + 90 + 1 +176 + 1 + 90 + 1 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 8 +176 + 1 + 62 + 7 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 6 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 90 + 3 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 13 +176 + 1 + 40 +0.0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +DICTIONARYVAR + 5 +70 +102 +{ACAD_REACTORS +330 +6F +102 +} +330 +6F +100 +DictionaryVariables +280 + 0 + 1 +1:1 + 0 +DICTIONARYVAR + 5 +79 +102 +{ACAD_REACTORS +330 +6F +102 +} +330 +6F +100 +DictionaryVariables +280 + 0 + 1 +3.500000 + 0 +DICTIONARYVAR + 5 +7A +102 +{ACAD_REACTORS +330 +6F +102 +} +330 +6F +100 +DictionaryVariables +280 + 0 + 1 +iso.lin + 0 +DICTIONARYVAR + 5 +75 +102 +{ACAD_REACTORS +330 +6F +102 +} +330 +6F +100 +DictionaryVariables +280 + 0 + 1 +Standard + 0 +DICTIONARYVAR + 5 +74 +102 +{ACAD_REACTORS +330 +6F +102 +} +330 +6F +100 +DictionaryVariables +280 + 0 + 1 +Standard + 0 +DICTIONARYVAR + 5 +83 +102 +{ACAD_REACTORS +330 +6F +102 +} +330 +6F +100 +DictionaryVariables +280 + 0 + 1 +Metric50 + 0 +DICTIONARYVAR + 5 +84 +102 +{ACAD_REACTORS +330 +6F +102 +} +330 +6F +100 +DictionaryVariables +280 + 0 + 1 +Metric50 + 0 +DICTIONARYVAR + 5 +76 +102 +{ACAD_REACTORS +330 +6F +102 +} +330 +6F +100 +DictionaryVariables +280 + 0 + 1 +2 + 0 +DICTIONARYVAR + 5 +91 +102 +{ACAD_REACTORS +330 +90 +102 +} +330 +90 +100 +DictionaryVariables +280 + 0 + 1 +0.010000 + 0 +DICTIONARYVAR + 5 +92 +102 +{ACAD_REACTORS +330 +90 +102 +} +330 +90 +100 +DictionaryVariables +280 + 0 + 1 +0.010000 + 0 +DICTIONARYVAR + 5 +93 +102 +{ACAD_REACTORS +330 +90 +102 +} +330 +90 +100 +DictionaryVariables +280 + 0 + 1 +0.010000 + 0 +DICTIONARYVAR + 5 +94 +102 +{ACAD_REACTORS +330 +90 +102 +} +330 +90 +100 +DictionaryVariables +280 + 0 + 1 +1.000000 + 0 +SPATIAL_FILTER + 5 +EC +102 +{ACAD_REACTORS +330 +C0 +102 +} +330 +C0 +100 +AcDbFilter +100 +AcDbSpatialFilter + 70 + 2 + 10 +7.075500508359 + 20 +2.922750879892 + 10 +10.129190531333 + 20 +13.412525767971 +210 +0.0 +220 +0.0 +230 +1.0 + 11 +0.0 + 21 +0.0 + 31 +0.0 + 71 + 1 + 72 + 0 + 73 + 0 + 40 +1.0 + 40 +0.0 + 40 +0.0 + 40 +-5.0 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 40 +-5.0 + 40 +0.0 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 0 +SPATIAL_FILTER + 5 +EB +102 +{ACAD_REACTORS +330 +D1 +102 +} +330 +D1 +100 +AcDbFilter +100 +AcDbSpatialFilter + 70 + 2 + 10 +18.544187849168 + 20 +7.045665322252 + 10 +28.068237430091 + 20 +9.959491680052 +210 +0.0 +220 +0.0 +230 +1.0 + 11 +0.0 + 21 +0.0 + 31 +0.0 + 71 + 1 + 72 + 0 + 73 + 0 + 40 +1.0 + 40 +0.0 + 40 +0.0 + 40 +-20.0 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 40 +-5.0 + 40 +0.0 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 0 +SPATIAL_FILTER + 5 +ED +102 +{ACAD_REACTORS +330 +E5 +102 +} +330 +E5 +100 +AcDbFilter +100 +AcDbSpatialFilter + 70 + 3 + 10 +5.129530713566 + 20 +18.746925957723 + 10 +8.486258677751 + 20 +28.747178017692 + 10 +11.749744198487 + 20 +18.746925957723 +210 +0.0 +220 +0.0 +230 +1.0 + 11 +0.0 + 21 +0.0 + 31 +0.0 + 71 + 1 + 72 + 0 + 73 + 0 + 40 +1.0 + 40 +0.0 + 40 +0.0 + 40 +-5.0 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 40 +-20.0 + 40 +0.0 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 0 +SPATIAL_FILTER + 5 +F3 +102 +{ACAD_REACTORS +330 +F2 +102 +} +330 +F2 +100 +AcDbFilter +100 +AcDbSpatialFilter + 70 + 2 + 10 +18.544187849168 + 20 +7.045665322252 + 10 +28.068237430091 + 20 +9.959491680052 +210 +0.0 +220 +0.0 +230 +1.0 + 11 +0.0 + 21 +0.0 + 31 +0.0 + 71 + 1 + 72 + 0 + 73 + 0 + 40 +1.0 + 40 +0.0 + 40 +0.0 + 40 +-20.0 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 40 +-5.0 + 40 +0.0 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 0 +DICTIONARY + 5 +F7 +102 +{ACAD_REACTORS +330 +F6 +102 +} +330 +F6 +100 +AcDbDictionary +281 + 1 + 0 +DICTIONARY + 5 +FB +102 +{ACAD_REACTORS +330 +FA +102 +} +330 +FA +100 +AcDbDictionary +281 + 1 + 0 +SPATIAL_FILTER + 5 +7D3 +102 +{ACAD_REACTORS +330 +7D2 +102 +} +330 +7D2 +100 +AcDbFilter +100 +AcDbSpatialFilter + 70 + 3 + 10 +5.129530713566 + 20 +18.746925957723 + 10 +8.486258677751 + 20 +28.747178017692 + 10 +11.749744198487 + 20 +18.746925957723 +210 +0.0 +220 +0.0 +230 +1.0 + 11 +0.0 + 21 +0.0 + 31 +0.0 + 71 + 1 + 72 + 0 + 73 + 0 + 40 +1.0 + 40 +0.0 + 40 +0.0 + 40 +-5.0 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 40 +-20.0 + 40 +0.0 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 0 +DICTIONARY + 5 +7D7 +102 +{ACAD_REACTORS +330 +7D6 +102 +} +330 +7D6 +100 +AcDbDictionary +281 + 1 + 0 +SPATIAL_FILTER + 5 +7FA +102 +{ACAD_REACTORS +330 +7F9 +102 +} +330 +7F9 +100 +AcDbFilter +100 +AcDbSpatialFilter + 70 + 2 + 10 +7.075500508359 + 20 +2.922750879892 + 10 +10.129190531333 + 20 +13.412525767971 +210 +0.0 +220 +0.0 +230 +1.0 + 11 +0.0 + 21 +0.0 + 31 +0.0 + 71 + 0 + 72 + 0 + 73 + 0 + 40 +1.0 + 40 +0.0 + 40 +0.0 + 40 +-5.0 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 40 +-5.0 + 40 +0.0 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 0 +DICTIONARY + 5 +7FE +102 +{ACAD_REACTORS +330 +7FD +102 +} +330 +7FD +100 +AcDbDictionary +281 + 1 + 0 +SPATIAL_FILTER + 5 +811 +102 +{ACAD_REACTORS +330 +80B +102 +} +102 +{ACAD_XDICTIONARY +360 +847 +102 +} +330 +80B +100 +AcDbFilter +100 +AcDbSpatialFilter + 70 + 11 + 10 +27.565761894549 + 20 +11.385903923664 + 10 +31.012402214919 + 20 +11.385903923664 + 10 +33.094047593269 + 20 +11.385903923664 + 10 +33.094047593269 + 20 +13.847335817091 + 10 +25.394047593269 + 20 +13.847335817091 + 10 +25.394047593269 + 20 +6.147335817091 + 10 +33.094047593269 + 20 +6.147335817091 + 10 +33.094047593269 + 20 +11.385863923664 + 10 +31.012402214919 + 20 +11.385863923664 + 10 +31.012402214919 + 20 +8.838387165129 + 10 +27.565761894549 + 20 +8.838387165129 +210 +0.0 +220 +0.0 +230 +1.0 + 11 +0.0 + 21 +0.0 + 31 +0.0 + 71 + 1 + 72 + 0 + 73 + 0 + 40 +1.0 + 40 +0.0 + 40 +0.0 + 40 +-25.744047593269 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 40 +-6.497335817091 + 40 +0.0 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 0 +DICTIONARY + 5 +810 +102 +{ACAD_REACTORS +330 +80F +102 +} +330 +80F +100 +AcDbDictionary +281 + 1 + 0 +SPATIAL_FILTER + 5 +821 +102 +{ACAD_REACTORS +330 +81B +102 +} +330 +81B +100 +AcDbFilter +100 +AcDbSpatialFilter + 70 + 8 + 10 +34.938399335129 + 20 +13.236809066789 + 10 +42.313863019801 + 20 +13.236809066789 + 10 +42.313863019801 + 20 +6.820808571821 + 10 +34.940098359245 + 20 +6.820808571821 + 10 +34.940098359245 + 20 +8.711822412189 + 10 +40.922362269341 + 20 +8.711822412189 + 10 +40.922362269341 + 20 +11.875405314944 + 10 +34.940098359245 + 20 +11.875405314944 +210 +0.0 +220 +0.0 +230 +1.0 + 11 +0.0 + 21 +0.0 + 31 +0.0 + 71 + 1 + 72 + 0 + 73 + 0 + 40 +1.0 + 40 +0.0 + 40 +0.0 + 40 +-35.502931650755 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 40 +-6.561753025165 + 40 +0.0 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 0 +DICTIONARY + 5 +820 +102 +{ACAD_REACTORS +330 +81F +102 +} +330 +81F +100 +AcDbDictionary +281 + 1 + 0 +SPATIAL_FILTER + 5 +825 +102 +{ACAD_REACTORS +330 +824 +102 +} +102 +{ACAD_XDICTIONARY +360 +849 +102 +} +330 +824 +100 +AcDbFilter +100 +AcDbSpatialFilter + 70 + 8 + 10 +34.938399335129 + 20 +13.236809066789 + 10 +34.560172719348 + 20 +13.236809066789 + 10 +34.560172719348 + 20 +13.911753025165 + 10 +42.881158266536 + 20 +13.911753025165 + 10 +42.881158266536 + 20 +6.211753025165 + 10 +34.560172719348 + 20 +6.211753025165 + 10 +34.560172719348 + 20 +13.236769066789 + 10 +34.938399385049 + 20 +13.236769066789 +210 +0.0 +220 +0.0 +230 +1.0 + 11 +0.0 + 21 +0.0 + 31 +0.0 + 71 + 1 + 72 + 0 + 73 + 0 + 40 +1.0 + 40 +0.0 + 40 +0.0 + 40 +-35.502931650755 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 40 +-6.561753025165 + 40 +0.0 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +0.0 + 40 +1.0 + 40 +0.0 + 0 +DICTIONARY + 5 +829 +102 +{ACAD_REACTORS +330 +828 +102 +} +330 +828 +100 +AcDbDictionary +281 + 1 + 0 +DICTIONARY + 5 +7F +330 +7D +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +ACAD_XREC_ROUNDTRIP +360 +84B + 0 +DICTIONARY + 5 +81 +330 +7E +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +ACAD_XREC_ROUNDTRIP +360 +84C + 0 +DICTIONARY + 5 +84D +330 +6B +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +ACAD_ROUNDTRIP_2008_TABLESTYLE_CELLSTYLEMAP +360 +84E + 0 +DICTIONARY + 5 +847 +330 +811 +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +ACAD_XREC_ROUNDTRIP +360 +848 + 0 +DICTIONARY + 5 +849 +330 +825 +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +ACAD_XREC_ROUNDTRIP +360 +84A + 0 +XRECORD + 5 +84B +102 +{ACAD_REACTORS +330 +7F +102 +} +330 +7F +100 +AcDbXrecord +280 + 1 +102 +DISPLAYNAME + 1 +Imperial24 +102 +FLAGS + 90 + 0 + 0 +XRECORD + 5 +84C +102 +{ACAD_REACTORS +330 +81 +102 +} +330 +81 +100 +AcDbXrecord +280 + 1 +102 +DISPLAYNAME + 1 +Imperial24 +102 +FLAGS + 90 + 0 + 0 +CELLSTYLEMAP + 5 +84E +102 +{ACAD_REACTORS +330 +84D +102 +} +330 +84D +100 +AcDbCellStyleMap + 90 + 3 +300 +CELLSTYLE + 1 +TABLEFORMAT_BEGIN + 90 + 5 +170 + 1 + 91 + 0 + 92 + 32768 + 62 + 257 + 93 + 1 +300 +CONTENTFORMAT + 1 +CONTENTFORMAT_BEGIN + 90 + 0 + 91 + 0 + 92 + 4 + 93 + 0 +300 + + 40 +0.0 +140 +1.0 + 94 + 5 + 62 + 0 +340 +11 +144 +6.0 +309 +CONTENTFORMAT_END +171 + 1 +301 +MARGIN + 1 +CELLMARGIN_BEGIN + 40 +1.5 + 40 +1.5 + 40 +1.5 + 40 +1.5 + 40 +1.5 + 40 +1.5 +309 +CELLMARGIN_END + 94 + 6 + 95 + 1 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +14 + 93 + 0 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 2 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +14 + 93 + 0 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 4 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +14 + 93 + 0 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 8 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +14 + 93 + 0 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 16 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +14 + 93 + 0 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 32 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +14 + 93 + 0 + 40 +0.045 +309 +GRIDFORMAT_END +309 +TABLEFORMAT_END + 1 +CELLSTYLE_BEGIN + 90 + 1 + 91 + 1 +300 +_TITLE +309 +CELLSTYLE_END +300 +CELLSTYLE + 1 +TABLEFORMAT_BEGIN + 90 + 5 +170 + 1 + 91 + 0 + 92 + 0 + 62 + 257 + 93 + 1 +300 +CONTENTFORMAT + 1 +CONTENTFORMAT_BEGIN + 90 + 0 + 91 + 0 + 92 + 4 + 93 + 0 +300 + + 40 +0.0 +140 +1.0 + 94 + 5 + 62 + 0 +340 +11 +144 +4.5 +309 +CONTENTFORMAT_END +171 + 1 +301 +MARGIN + 1 +CELLMARGIN_BEGIN + 40 +1.5 + 40 +1.5 + 40 +1.5 + 40 +1.5 + 40 +1.5 + 40 +1.5 +309 +CELLMARGIN_END + 94 + 6 + 95 + 1 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +14 + 93 + 0 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 2 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +14 + 93 + 0 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 4 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +14 + 93 + 0 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 8 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +14 + 93 + 0 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 16 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +14 + 93 + 0 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 32 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +14 + 93 + 0 + 40 +0.045 +309 +GRIDFORMAT_END +309 +TABLEFORMAT_END + 1 +CELLSTYLE_BEGIN + 90 + 2 + 91 + 1 +300 +_HEADER +309 +CELLSTYLE_END +300 +CELLSTYLE + 1 +TABLEFORMAT_BEGIN + 90 + 5 +170 + 1 + 91 + 0 + 92 + 0 + 62 + 257 + 93 + 1 +300 +CONTENTFORMAT + 1 +CONTENTFORMAT_BEGIN + 90 + 0 + 91 + 0 + 92 + 4 + 93 + 0 +300 + + 40 +0.0 +140 +1.0 + 94 + 2 + 62 + 0 +340 +11 +144 +4.5 +309 +CONTENTFORMAT_END +171 + 1 +301 +MARGIN + 1 +CELLMARGIN_BEGIN + 40 +1.5 + 40 +1.5 + 40 +1.5 + 40 +1.5 + 40 +1.5 + 40 +1.5 +309 +CELLMARGIN_END + 94 + 6 + 95 + 1 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +14 + 93 + 0 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 2 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +14 + 93 + 0 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 4 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +14 + 93 + 0 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 8 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +14 + 93 + 0 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 16 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +14 + 93 + 0 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 32 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +14 + 93 + 0 + 40 +0.045 +309 +GRIDFORMAT_END +309 +TABLEFORMAT_END + 1 +CELLSTYLE_BEGIN + 90 + 3 + 91 + 2 +300 +_DATA +309 +CELLSTYLE_END + 0 +XRECORD + 5 +848 +102 +{ACAD_REACTORS +330 +847 +102 +} +330 +847 +100 +AcDbXrecord +280 + 1 +102 +ACAD_INVERTEDCLIP_ROUNDTRIP + 10 +27.565761894549 + 20 +8.838387165129 + 30 +0.0 + 10 +31.012402214919 + 20 +11.385903923664 + 30 +0.0 +102 +ACAD_INVERTEDCLIP_ROUNDTRIP_COMPARE + 10 +27.565761894549 + 20 +11.385903923664 + 30 +0.0 + 10 +31.012402214919 + 20 +11.385903923664 + 30 +0.0 + 10 +33.094047593269 + 20 +11.385903923664 + 30 +0.0 + 10 +33.094047593269 + 20 +13.847335817091 + 30 +0.0 + 10 +25.394047593269 + 20 +13.847335817091 + 30 +0.0 + 10 +25.394047593269 + 20 +6.147335817091 + 30 +0.0 + 10 +33.094047593269 + 20 +6.147335817091 + 30 +0.0 + 10 +33.094047593269 + 20 +11.385863923664 + 30 +0.0 + 10 +31.012402214919 + 20 +11.385863923664 + 30 +0.0 + 10 +31.012402214919 + 20 +8.838387165129 + 30 +0.0 + 10 +27.565761894549 + 20 +8.838387165129 + 30 +0.0 + 0 +XRECORD + 5 +84A +102 +{ACAD_REACTORS +330 +849 +102 +} +330 +849 +100 +AcDbXrecord +280 + 1 +102 +ACAD_INVERTEDCLIP_ROUNDTRIP + 10 +34.938399335129 + 20 +13.236809066789 + 30 +0.0 + 10 +42.313863019801 + 20 +13.236809066789 + 30 +0.0 + 10 +42.313863019801 + 20 +6.820808571821 + 30 +0.0 + 10 +34.940098359245 + 20 +6.820808571821 + 30 +0.0 + 10 +34.940098359245 + 20 +8.711822412189 + 30 +0.0 + 10 +40.922362269341 + 20 +8.711822412189 + 30 +0.0 + 10 +40.922362269341 + 20 +11.875405314944 + 30 +0.0 + 10 +34.940098359245 + 20 +11.875405314944 + 30 +0.0 +102 +ACAD_INVERTEDCLIP_ROUNDTRIP_COMPARE + 10 +34.938399335129 + 20 +13.236809066789 + 30 +0.0 + 10 +34.560172719348 + 20 +13.236809066789 + 30 +0.0 + 10 +34.560172719348 + 20 +13.911753025165 + 30 +0.0 + 10 +42.881158266536 + 20 +13.911753025165 + 30 +0.0 + 10 +42.881158266536 + 20 +6.211753025165 + 30 +0.0 + 10 +34.560172719348 + 20 +6.211753025165 + 30 +0.0 + 10 +34.560172719348 + 20 +13.236769066789 + 30 +0.0 + 10 +34.938399385049 + 20 +13.236769066789 + 30 +0.0 + 0 +ENDSEC + 0 +EOF diff --git a/packages/ducdxf/tests/conftest.py b/packages/ducdxf/src/tests/conftest.py similarity index 100% rename from packages/ducdxf/tests/conftest.py rename to packages/ducdxf/src/tests/conftest.py diff --git a/packages/ducdxf/src/tests/src/temp/test_linetypes.duc b/packages/ducdxf/src/tests/src/temp/test_linetypes.duc new file mode 100644 index 00000000..e1496389 Binary files /dev/null and b/packages/ducdxf/src/tests/src/temp/test_linetypes.duc differ diff --git a/packages/ducdxf/src/tests/src/temp/test_linetypes.dxf b/packages/ducdxf/src/tests/src/temp/test_linetypes.dxf new file mode 100644 index 00000000..44b2ccc6 --- /dev/null +++ b/packages/ducdxf/src/tests/src/temp/test_linetypes.dxf @@ -0,0 +1,3212 @@ + 0 +SECTION + 2 +HEADER + 9 +$ACADVER + 1 +AC1032 + 9 +$ACADMAINTVER + 90 +4 + 9 +$DWGCODEPAGE + 3 +ANSI_1252 + 9 +$LASTSAVEDBY + 1 +ezdxf + 9 +$REQUIREDVERSIONS +160 +0 + 9 +$INSBASE + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$EXTMIN + 10 +1e+20 + 20 +1e+20 + 30 +1e+20 + 9 +$EXTMAX + 10 +-1e+20 + 20 +-1e+20 + 30 +-1e+20 + 9 +$LIMMIN + 10 +0.0 + 20 +0.0 + 9 +$LIMMAX + 10 +420.0 + 20 +297.0 + 9 +$ORTHOMODE + 70 +0 + 9 +$REGENMODE + 70 +1 + 9 +$FILLMODE + 70 +1 + 9 +$QTEXTMODE + 70 +0 + 9 +$MIRRTEXT + 70 +1 + 9 +$LTSCALE + 40 +1.0 + 9 +$ATTMODE + 70 +1 + 9 +$TEXTSIZE + 40 +2.5 + 9 +$TRACEWID + 40 +1.0 + 9 +$TEXTSTYLE + 7 +Standard + 9 +$CLAYER + 8 +0 + 9 +$CELTYPE + 6 +ByLayer + 9 +$CECOLOR + 62 +256 + 9 +$CELTSCALE + 40 +1.0 + 9 +$DISPSILH + 70 +0 + 9 +$DIMSCALE + 40 +1.0 + 9 +$DIMASZ + 40 +2.5 + 9 +$DIMEXO + 40 +0.625 + 9 +$DIMDLI + 40 +3.75 + 9 +$DIMRND + 40 +0.0 + 9 +$DIMDLE + 40 +0.0 + 9 +$DIMEXE + 40 +1.25 + 9 +$DIMTP + 40 +0.0 + 9 +$DIMTM + 40 +0.0 + 9 +$DIMTXT + 40 +2.5 + 9 +$DIMCEN + 40 +2.5 + 9 +$DIMTSZ + 40 +0.0 + 9 +$DIMTOL + 70 +0 + 9 +$DIMLIM + 70 +0 + 9 +$DIMTIH + 70 +0 + 9 +$DIMTOH + 70 +0 + 9 +$DIMSE1 + 70 +0 + 9 +$DIMSE2 + 70 +0 + 9 +$DIMTAD + 70 +1 + 9 +$DIMZIN + 70 +8 + 9 +$DIMBLK + 1 + + 9 +$DIMASO + 70 +1 + 9 +$DIMSHO + 70 +1 + 9 +$DIMPOST + 1 + + 9 +$DIMAPOST + 1 + + 9 +$DIMALT + 70 +0 + 9 +$DIMALTD + 70 +3 + 9 +$DIMALTF + 40 +0.03937007874 + 9 +$DIMLFAC + 40 +1.0 + 9 +$DIMTOFL + 70 +1 + 9 +$DIMTVP + 40 +0.0 + 9 +$DIMTIX + 70 +0 + 9 +$DIMSOXD + 70 +0 + 9 +$DIMSAH + 70 +0 + 9 +$DIMBLK1 + 1 + + 9 +$DIMBLK2 + 1 + + 9 +$DIMSTYLE + 2 +ISO-25 + 9 +$DIMCLRD + 70 +0 + 9 +$DIMCLRE + 70 +0 + 9 +$DIMCLRT + 70 +0 + 9 +$DIMTFAC + 40 +1.0 + 9 +$DIMGAP + 40 +0.625 + 9 +$DIMJUST + 70 +0 + 9 +$DIMSD1 + 70 +0 + 9 +$DIMSD2 + 70 +0 + 9 +$DIMTOLJ + 70 +0 + 9 +$DIMTZIN + 70 +8 + 9 +$DIMALTZ + 70 +0 + 9 +$DIMALTTZ + 70 +0 + 9 +$DIMUPT + 70 +0 + 9 +$DIMDEC + 70 +2 + 9 +$DIMTDEC + 70 +2 + 9 +$DIMALTU + 70 +2 + 9 +$DIMALTTD + 70 +3 + 9 +$DIMTXSTY + 7 +Standard + 9 +$DIMAUNIT + 70 +0 + 9 +$DIMADEC + 70 +0 + 9 +$DIMALTRND + 40 +0.0 + 9 +$DIMAZIN + 70 +0 + 9 +$DIMDSEP + 70 +44 + 9 +$DIMATFIT + 70 +3 + 9 +$DIMFRAC + 70 +0 + 9 +$DIMLDRBLK + 1 + + 9 +$DIMLUNIT + 70 +2 + 9 +$DIMLWD + 70 +-2 + 9 +$DIMLWE + 70 +-2 + 9 +$DIMTMOVE + 70 +0 + 9 +$DIMFXL + 40 +1.0 + 9 +$DIMFXLON + 70 +0 + 9 +$DIMJOGANG + 40 +0.785398163397 + 9 +$DIMTFILL + 70 +0 + 9 +$DIMTFILLCLR + 70 +0 + 9 +$DIMARCSYM + 70 +0 + 9 +$DIMLTYPE + 6 + + 9 +$DIMLTEX1 + 6 + + 9 +$DIMLTEX2 + 6 + + 9 +$DIMTXTDIRECTION + 70 +0 + 9 +$LUNITS + 70 +2 + 9 +$LUPREC + 70 +4 + 9 +$SKETCHINC + 40 +1.0 + 9 +$FILLETRAD + 40 +10.0 + 9 +$AUNITS + 70 +0 + 9 +$AUPREC + 70 +2 + 9 +$MENU + 1 +. + 9 +$ELEVATION + 40 +0.0 + 9 +$PELEVATION + 40 +0.0 + 9 +$THICKNESS + 40 +0.0 + 9 +$LIMCHECK + 70 +0 + 9 +$CHAMFERA + 40 +0.0 + 9 +$CHAMFERB + 40 +0.0 + 9 +$CHAMFERC + 40 +0.0 + 9 +$CHAMFERD + 40 +0.0 + 9 +$SKPOLY + 70 +0 + 9 +$TDCREATE + 40 +2461081.8865625 + 9 +$TDUCREATE + 40 +2458532.153996898 + 9 +$TDUPDATE + 40 +2461081.8865625 + 9 +$TDUUPDATE + 40 +2458532.1544311 + 9 +$TDINDWG + 40 +0.0 + 9 +$TDUSRTIMER + 40 +0.0 + 9 +$USRTIMER + 70 +1 + 9 +$ANGBASE + 50 +0.0 + 9 +$ANGDIR + 70 +0 + 9 +$PDMODE + 70 +0 + 9 +$PDSIZE + 40 +0.0 + 9 +$PLINEWID + 40 +0.0 + 9 +$SPLFRAME + 70 +0 + 9 +$SPLINETYPE + 70 +6 + 9 +$SPLINESEGS + 70 +8 + 9 +$HANDSEED + 5 +38 + 9 +$SURFTAB1 + 70 +6 + 9 +$SURFTAB2 + 70 +6 + 9 +$SURFTYPE + 70 +6 + 9 +$SURFU + 70 +6 + 9 +$SURFV + 70 +6 + 9 +$UCSBASE + 2 + + 9 +$UCSNAME + 2 + + 9 +$UCSORG + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSXDIR + 10 +1.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSYDIR + 10 +0.0 + 20 +1.0 + 30 +0.0 + 9 +$UCSORTHOREF + 2 + + 9 +$UCSORTHOVIEW + 70 +0 + 9 +$UCSORGTOP + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSORGBOTTOM + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSORGLEFT + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSORGRIGHT + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSORGFRONT + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSORGBACK + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSBASE + 2 + + 9 +$PUCSNAME + 2 + + 9 +$PUCSORG + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSXDIR + 10 +1.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSYDIR + 10 +0.0 + 20 +1.0 + 30 +0.0 + 9 +$PUCSORTHOREF + 2 + + 9 +$PUCSORTHOVIEW + 70 +0 + 9 +$PUCSORGTOP + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSORGBOTTOM + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSORGLEFT + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSORGRIGHT + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSORGFRONT + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSORGBACK + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$USERI1 + 70 +0 + 9 +$USERI2 + 70 +0 + 9 +$USERI3 + 70 +0 + 9 +$USERI4 + 70 +0 + 9 +$USERI5 + 70 +0 + 9 +$USERR1 + 40 +0.0 + 9 +$USERR2 + 40 +0.0 + 9 +$USERR3 + 40 +0.0 + 9 +$USERR4 + 40 +0.0 + 9 +$USERR5 + 40 +0.0 + 9 +$WORLDVIEW + 70 +1 + 9 +$SHADEDGE + 70 +3 + 9 +$SHADEDIF + 70 +70 + 9 +$TILEMODE + 70 +1 + 9 +$MAXACTVP + 70 +64 + 9 +$PINSBASE + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PLIMCHECK + 70 +0 + 9 +$PEXTMIN + 10 +1e+20 + 20 +1e+20 + 30 +1e+20 + 9 +$PEXTMAX + 10 +-1e+20 + 20 +-1e+20 + 30 +-1e+20 + 9 +$PLIMMIN + 10 +0.0 + 20 +0.0 + 9 +$PLIMMAX + 10 +420.0 + 20 +297.0 + 9 +$UNITMODE + 70 +0 + 9 +$VISRETAIN + 70 +1 + 9 +$PLINEGEN + 70 +0 + 9 +$PSLTSCALE + 70 +1 + 9 +$TREEDEPTH + 70 +3020 + 9 +$CMLSTYLE + 2 +Standard + 9 +$CMLJUST + 70 +0 + 9 +$CMLSCALE + 40 +20.0 + 9 +$PROXYGRAPHICS + 70 +1 + 9 +$MEASUREMENT + 70 +1 + 9 +$CELWEIGHT +370 +-1 + 9 +$ENDCAPS +280 +0 + 9 +$JOINSTYLE +280 +0 + 9 +$LWDISPLAY +290 +0 + 9 +$INSUNITS + 70 +6 + 9 +$HYPERLINKBASE + 1 + + 9 +$STYLESHEET + 1 + + 9 +$XEDIT +290 +1 + 9 +$CEPSNTYPE +380 +0 + 9 +$PSTYLEMODE +290 +1 + 9 +$FINGERPRINTGUID + 2 +{E57B8980-39E0-4BA6-8355-87A035804872} + 9 +$VERSIONGUID + 2 +{0498F136-74C9-455D-957B-9F5876B452A2} + 9 +$EXTNAMES +290 +1 + 9 +$PSVPSCALE + 40 +0.0 + 9 +$OLESTARTUP +290 +0 + 9 +$SORTENTS +280 +127 + 9 +$INDEXCTL +280 +0 + 9 +$HIDETEXT +280 +1 + 9 +$XCLIPFRAME +280 +1 + 9 +$HALOGAP +280 +0 + 9 +$OBSCOLOR + 70 +257 + 9 +$OBSLTYPE +280 +0 + 9 +$INTERSECTIONDISPLAY +280 +0 + 9 +$INTERSECTIONCOLOR + 70 +257 + 9 +$DIMASSOC +280 +2 + 9 +$PROJECTNAME + 1 + + 9 +$CAMERADISPLAY +290 +0 + 9 +$LENSLENGTH + 40 +50.0 + 9 +$CAMERAHEIGHT + 40 +0.0 + 9 +$STEPSPERSEC + 40 +24.0 + 9 +$STEPSIZE + 40 +100.0 + 9 +$3DDWFPREC + 40 +2.0 + 9 +$PSOLWIDTH + 40 +0.005 + 9 +$PSOLHEIGHT + 40 +0.08 + 9 +$LOFTANG1 + 40 +1.570796326795 + 9 +$LOFTANG2 + 40 +1.570796326795 + 9 +$LOFTMAG1 + 40 +0.0 + 9 +$LOFTMAG2 + 40 +0.0 + 9 +$LOFTPARAM + 70 +7 + 9 +$LOFTNORMALS +280 +1 + 9 +$LATITUDE + 40 +37.795 + 9 +$LONGITUDE + 40 +-122.394 + 9 +$NORTHDIRECTION + 40 +0.0 + 9 +$TIMEZONE + 70 +-8000 + 9 +$LIGHTGLYPHDISPLAY +280 +1 + 9 +$TILEMODELIGHTSYNCH +280 +1 + 9 +$CMATERIAL +347 +20 + 9 +$SOLIDHIST +280 +0 + 9 +$SHOWHIST +280 +1 + 9 +$DWFFRAME +280 +2 + 9 +$DGNFRAME +280 +2 + 9 +$REALWORLDSCALE +290 +1 + 9 +$INTERFERECOLOR + 62 +256 + 9 +$CSHADOW +280 +0 + 9 +$SHADOWPLANELOCATION + 40 +0.0 + 0 +ENDSEC + 0 +SECTION + 2 +CLASSES + 0 +CLASS + 1 +ACDBDICTIONARYWDFLT + 2 +AcDbDictionaryWithDefault + 3 +ObjectDBX Classes + 90 +0 + 91 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +SUN + 2 +AcDbSun + 3 +SCENEOE + 90 +1153 + 91 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +VISUALSTYLE + 2 +AcDbVisualStyle + 3 +ObjectDBX Classes + 90 +4095 + 91 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +MATERIAL + 2 +AcDbMaterial + 3 +ObjectDBX Classes + 90 +1153 + 91 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +SCALE + 2 +AcDbScale + 3 +ObjectDBX Classes + 90 +1153 + 91 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +TABLESTYLE + 2 +AcDbTableStyle + 3 +ObjectDBX Classes + 90 +4095 + 91 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +MLEADERSTYLE + 2 +AcDbMLeaderStyle + 3 +ACDB_MLEADERSTYLE_CLASS + 90 +4095 + 91 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +DICTIONARYVAR + 2 +AcDbDictionaryVar + 3 +ObjectDBX Classes + 90 +0 + 91 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +CELLSTYLEMAP + 2 +AcDbCellStyleMap + 3 +ObjectDBX Classes + 90 +1152 + 91 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +MENTALRAYRENDERSETTINGS + 2 +AcDbMentalRayRenderSettings + 3 +SCENEOE + 90 +1024 + 91 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +ACDBDETAILVIEWSTYLE + 2 +AcDbDetailViewStyle + 3 +ObjectDBX Classes + 90 +1025 + 91 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +ACDBSECTIONVIEWSTYLE + 2 +AcDbSectionViewStyle + 3 +ObjectDBX Classes + 90 +1025 + 91 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +RASTERVARIABLES + 2 +AcDbRasterVariables + 3 +ISM + 90 +0 + 91 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +ACDBPLACEHOLDER + 2 +AcDbPlaceHolder + 3 +ObjectDBX Classes + 90 +0 + 91 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +LAYOUT + 2 +AcDbLayout + 3 +ObjectDBX Classes + 90 +0 + 91 +0 +280 +0 +281 +0 + 0 +ENDSEC + 0 +SECTION + 2 +TABLES + 0 +TABLE + 2 +VPORT + 5 +8 +330 +0 +100 +AcDbSymbolTable + 70 +1 + 0 +VPORT + 5 +23 +330 +8 +100 +AcDbSymbolTableRecord +100 +AcDbViewportTableRecord + 2 +*Active + 70 +0 + 10 +0.0 + 20 +0.0 + 11 +1.0 + 21 +1.0 + 12 +0.0 + 22 +0.0 + 13 +0.0 + 23 +0.0 + 14 +0.5 + 24 +0.5 + 15 +0.5 + 25 +0.5 + 16 +0.0 + 26 +0.0 + 36 +1.0 + 17 +0.0 + 27 +0.0 + 37 +0.0 + 40 +1000.0 + 41 +1.34 + 42 +50.0 + 43 +0.0 + 44 +0.0 + 50 +0.0 + 51 +0.0 + 71 +0 + 72 +1000 + 73 +1 + 74 +3 + 75 +0 + 76 +0 + 77 +0 + 78 +0 +281 +0 + 65 +0 +146 +0.0 + 0 +ENDTAB + 0 +TABLE + 2 +LTYPE + 5 +2 +330 +0 +100 +AcDbSymbolTable + 70 +6 + 0 +LTYPE + 5 +24 +330 +2 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ByBlock + 70 +0 + 3 + + 72 +65 + 73 +0 + 40 +0.0 + 0 +LTYPE + 5 +25 +330 +2 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ByLayer + 70 +0 + 3 + + 72 +65 + 73 +0 + 40 +0.0 + 0 +LTYPE + 5 +26 +330 +2 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +Continuous + 70 +0 + 3 + + 72 +65 + 73 +0 + 40 +0.0 + 0 +LTYPE + 5 +2F +330 +2 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +CUSTOM_DASHED + 70 +0 + 3 +Custom Dashed ---- ---- ---- ---- + 72 +65 + 73 +1 + 40 +0.5 + 49 +-0.25 + 74 +0 + 0 +LTYPE + 5 +30 +330 +2 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +CUSTOM_DASHDOT + 70 +0 + 3 +Custom DashDot ---- . ---- . + 72 +65 + 73 +3 + 40 +0.5 + 49 +-0.1 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-0.1 + 74 +0 + 0 +LTYPE + 5 +31 +330 +2 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +CUSTOM_COMPLEX + 70 +0 + 3 +Complex with spacing ---- ---- ---- + 72 +65 + 73 +1 + 40 +1.0 + 49 +-0.5 + 74 +0 + 0 +ENDTAB + 0 +TABLE + 2 +LAYER + 5 +1 +330 +0 +100 +AcDbSymbolTable + 70 +2 + 0 +LAYER + 5 +27 +330 +1 +100 +AcDbSymbolTableRecord +100 +AcDbLayerTableRecord + 2 +0 + 70 +0 + 62 +7 + 6 +Continuous +370 +-3 +390 +13 +347 +21 + 0 +LAYER + 5 +28 +330 +1 +100 +AcDbSymbolTableRecord +100 +AcDbLayerTableRecord + 2 +Defpoints + 70 +0 + 62 +7 + 6 +Continuous +290 +0 +370 +-3 +390 +13 +347 +21 + 0 +ENDTAB + 0 +TABLE + 2 +STYLE + 5 +5 +330 +0 +100 +AcDbSymbolTable + 70 +1 + 0 +STYLE + 5 +29 +330 +5 +100 +AcDbSymbolTableRecord +100 +AcDbTextStyleTableRecord + 2 +Standard + 70 +0 + 40 +0.0 + 41 +1.0 + 50 +0.0 + 71 +0 + 42 +2.5 + 3 +txt + 4 + + 0 +ENDTAB + 0 +TABLE + 2 +VIEW + 5 +7 +330 +0 +100 +AcDbSymbolTable + 70 +0 + 0 +ENDTAB + 0 +TABLE + 2 +UCS + 5 +6 +330 +0 +100 +AcDbSymbolTable + 70 +0 + 0 +ENDTAB + 0 +TABLE + 2 +APPID + 5 +3 +330 +0 +100 +AcDbSymbolTable + 70 +3 + 0 +APPID + 5 +2A +330 +3 +100 +AcDbSymbolTableRecord +100 +AcDbRegAppTableRecord + 2 +ACAD + 70 +0 + 0 +APPID + 5 +35 +330 +3 +100 +AcDbSymbolTableRecord +100 +AcDbRegAppTableRecord + 2 +HATCHBACKGROUNDCOLOR + 70 +0 + 0 +APPID + 5 +36 +330 +3 +100 +AcDbSymbolTableRecord +100 +AcDbRegAppTableRecord + 2 +EZDXF + 70 +0 + 0 +ENDTAB + 0 +TABLE + 2 +DIMSTYLE + 5 +4 +330 +0 +100 +AcDbSymbolTable + 70 +1 +100 +AcDbDimStyleTable + 0 +DIMSTYLE +105 +2B +330 +4 +100 +AcDbSymbolTableRecord +100 +AcDbDimStyleTableRecord + 2 +Standard + 70 +0 + 40 +1.0 + 41 +2.5 + 42 +0.625 + 43 +3.75 + 44 +1.25 + 45 +0.0 + 46 +0.0 + 47 +0.0 + 48 +0.0 + 49 +2.5 +140 +2.5 +141 +2.5 +142 +0.0 +143 +0.03937007874 +144 +1.0 +145 +0.0 +146 +1.0 +147 +0.625 +148 +0.0 + 69 +0 + 70 +0 + 71 +0 + 72 +0 + 73 +0 + 74 +0 + 75 +0 + 76 +0 + 77 +1 + 78 +8 + 79 +3 +170 +0 +171 +3 +172 +1 +173 +0 +174 +0 +175 +0 +176 +0 +177 +0 +178 +0 +179 +2 +271 +2 +272 +2 +273 +2 +274 +3 +275 +0 +276 +0 +277 +2 +278 +44 +279 +0 +280 +0 +281 +0 +282 +0 +283 +0 +284 +8 +285 +0 +286 +0 +288 +0 +289 +3 +290 +0 +371 +-2 +372 +-2 + 0 +ENDTAB + 0 +TABLE + 2 +BLOCK_RECORD + 5 +9 +330 +0 +100 +AcDbSymbolTable + 70 +2 + 0 +BLOCK_RECORD + 5 +17 +330 +9 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*Model_Space +340 +1A + 70 +0 +280 +1 +281 +0 + 0 +BLOCK_RECORD + 5 +1B +330 +9 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*Paper_Space +340 +1E + 70 +0 +280 +1 +281 +0 + 0 +ENDTAB + 0 +ENDSEC + 0 +SECTION + 2 +BLOCKS + 0 +BLOCK + 5 +18 +330 +17 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +*Model_Space + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*Model_Space + 1 + + 0 +ENDBLK + 5 +19 +330 +17 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +1C +330 +1B +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +*Paper_Space + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*Paper_Space + 1 + + 0 +ENDBLK + 5 +1D +330 +1B +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +ENDSEC + 0 +SECTION + 2 +ENTITIES + 0 +LINE + 5 +32 +330 +17 +100 +AcDbEntity + 8 +0 + 6 +CUSTOM_DASHED +100 +AcDbLine + 10 +0.0 + 20 +0.0 + 30 +0.0 + 11 +10.0 + 21 +0.0 + 31 +0.0 + 0 +LINE + 5 +33 +330 +17 +100 +AcDbEntity + 8 +0 + 6 +CUSTOM_DASHDOT +100 +AcDbLine + 10 +0.0 + 20 +2.0 + 30 +0.0 + 11 +10.0 + 21 +2.0 + 31 +0.0 + 0 +LINE + 5 +34 +330 +17 +100 +AcDbEntity + 8 +0 + 6 +CUSTOM_COMPLEX +100 +AcDbLine + 10 +0.0 + 20 +4.0 + 30 +0.0 + 11 +10.0 + 21 +4.0 + 31 +0.0 + 0 +ENDSEC + 0 +SECTION + 2 +OBJECTS + 0 +DICTIONARY + 5 +A +330 +0 +100 +AcDbDictionary +281 +1 + 3 +ACAD_COLOR +350 +B + 3 +ACAD_GROUP +350 +C + 3 +ACAD_LAYOUT +350 +D + 3 +ACAD_MATERIAL +350 +E + 3 +ACAD_MLEADERSTYLE +350 +F + 3 +ACAD_MLINESTYLE +350 +10 + 3 +ACAD_PLOTSETTINGS +350 +11 + 3 +ACAD_PLOTSTYLENAME +350 +12 + 3 +ACAD_SCALELIST +350 +14 + 3 +ACAD_TABLESTYLE +350 +15 + 3 +ACAD_VISUALSTYLE +350 +16 + 3 +EZDXF_META +350 +2D + 0 +DICTIONARY + 5 +B +330 +A +100 +AcDbDictionary +281 +1 + 0 +DICTIONARY + 5 +C +330 +A +100 +AcDbDictionary +281 +1 + 0 +DICTIONARY + 5 +D +330 +A +100 +AcDbDictionary +281 +1 + 3 +Model +350 +1A + 3 +Layout1 +350 +1E + 0 +DICTIONARY + 5 +E +330 +A +100 +AcDbDictionary +281 +1 + 3 +ByBlock +350 +1F + 3 +ByLayer +350 +20 + 3 +Global +350 +21 + 0 +DICTIONARY + 5 +F +330 +A +100 +AcDbDictionary +281 +1 + 3 +Standard +350 +2C + 0 +DICTIONARY + 5 +10 +330 +A +100 +AcDbDictionary +281 +1 + 3 +Standard +350 +22 + 0 +DICTIONARY + 5 +11 +330 +A +100 +AcDbDictionary +281 +1 + 0 +ACDBDICTIONARYWDFLT + 5 +12 +330 +A +100 +AcDbDictionary +281 +1 + 3 +Normal +350 +13 +100 +AcDbDictionaryWithDefault +340 +13 + 0 +ACDBPLACEHOLDER + 5 +13 +330 +12 + 0 +DICTIONARY + 5 +14 +330 +A +100 +AcDbDictionary +281 +1 + 0 +DICTIONARY + 5 +15 +330 +A +100 +AcDbDictionary +281 +1 + 0 +DICTIONARY + 5 +16 +330 +A +100 +AcDbDictionary +281 +1 + 0 +LAYOUT + 5 +1A +330 +D +100 +AcDbPlotSettings + 1 + + 4 +A3 + 6 + + 40 +7.5 + 41 +20.0 + 42 +7.5 + 43 +20.0 + 44 +420.0 + 45 +297.0 + 46 +0.0 + 47 +0.0 + 48 +0.0 + 49 +0.0 +140 +0.0 +141 +0.0 +142 +1.0 +143 +1.0 + 70 +1024 + 72 +1 + 73 +0 + 74 +5 + 7 + + 75 +16 + 76 +0 + 77 +2 + 78 +300 +147 +1.0 +148 +0.0 +149 +0.0 +100 +AcDbLayout + 1 +Model + 70 +1 + 71 +0 + 10 +0.0 + 20 +0.0 + 11 +420.0 + 21 +297.0 + 12 +0.0 + 22 +0.0 + 32 +0.0 + 14 +1e+20 + 24 +1e+20 + 34 +1e+20 + 15 +-1e+20 + 25 +-1e+20 + 35 +-1e+20 +146 +0.0 + 13 +0.0 + 23 +0.0 + 33 +0.0 + 16 +1.0 + 26 +0.0 + 36 +0.0 + 17 +0.0 + 27 +1.0 + 37 +0.0 + 76 +1 +330 +17 + 0 +LAYOUT + 5 +1E +330 +D +100 +AcDbPlotSettings + 1 + + 4 +A3 + 6 + + 40 +7.5 + 41 +20.0 + 42 +7.5 + 43 +20.0 + 44 +420.0 + 45 +297.0 + 46 +0.0 + 47 +0.0 + 48 +0.0 + 49 +0.0 +140 +0.0 +141 +0.0 +142 +1.0 +143 +1.0 + 70 +0 + 72 +1 + 73 +0 + 74 +5 + 7 + + 75 +16 + 76 +0 + 77 +2 + 78 +300 +147 +1.0 +148 +0.0 +149 +0.0 +100 +AcDbLayout + 1 +Layout1 + 70 +1 + 71 +1 + 10 +0.0 + 20 +0.0 + 11 +420.0 + 21 +297.0 + 12 +0.0 + 22 +0.0 + 32 +0.0 + 14 +1e+20 + 24 +1e+20 + 34 +1e+20 + 15 +-1e+20 + 25 +-1e+20 + 35 +-1e+20 +146 +0.0 + 13 +0.0 + 23 +0.0 + 33 +0.0 + 16 +1.0 + 26 +0.0 + 36 +0.0 + 17 +0.0 + 27 +1.0 + 37 +0.0 + 76 +1 +330 +1B + 0 +MATERIAL + 5 +1F +102 +{ACAD_REACTORS +330 +E +102 +} +330 +E +100 +AcDbMaterial + 1 +ByBlock + 2 + + 70 +0 + 40 +1.0 + 71 +1 + 41 +1.0 + 91 +-1023410177 + 42 +1.0 + 72 +1 + 3 + + 73 +1 + 74 +1 + 75 +1 + 44 +0.5 + 73 +0 + 45 +1.0 + 46 +1.0 + 77 +1 + 4 + + 78 +1 + 79 +1 +170 +1 + 48 +1.0 +171 +1 + 6 + +172 +1 +173 +1 +174 +1 +140 +1.0 +141 +1.0 +175 +1 + 7 + +176 +1 +177 +1 +178 +1 +143 +1.0 +179 +1 + 8 + +270 +1 +271 +1 +272 +1 +145 +1.0 +146 +1.0 +273 +1 + 9 + +274 +1 +275 +1 +276 +1 + 42 +1.0 + 72 +1 + 3 + + 73 +1 + 74 +1 + 75 +1 + 94 +63 + 0 +MATERIAL + 5 +20 +102 +{ACAD_REACTORS +330 +E +102 +} +330 +E +100 +AcDbMaterial + 1 +ByLayer + 2 + + 70 +0 + 40 +1.0 + 71 +1 + 41 +1.0 + 91 +-1023410177 + 42 +1.0 + 72 +1 + 3 + + 73 +1 + 74 +1 + 75 +1 + 44 +0.5 + 73 +0 + 45 +1.0 + 46 +1.0 + 77 +1 + 4 + + 78 +1 + 79 +1 +170 +1 + 48 +1.0 +171 +1 + 6 + +172 +1 +173 +1 +174 +1 +140 +1.0 +141 +1.0 +175 +1 + 7 + +176 +1 +177 +1 +178 +1 +143 +1.0 +179 +1 + 8 + +270 +1 +271 +1 +272 +1 +145 +1.0 +146 +1.0 +273 +1 + 9 + +274 +1 +275 +1 +276 +1 + 42 +1.0 + 72 +1 + 3 + + 73 +1 + 74 +1 + 75 +1 + 94 +63 + 0 +MATERIAL + 5 +21 +102 +{ACAD_REACTORS +330 +E +102 +} +330 +E +100 +AcDbMaterial + 1 +Global + 2 + + 70 +0 + 40 +1.0 + 71 +1 + 41 +1.0 + 91 +-1023410177 + 42 +1.0 + 72 +1 + 3 + + 73 +1 + 74 +1 + 75 +1 + 44 +0.5 + 73 +0 + 45 +1.0 + 46 +1.0 + 77 +1 + 4 + + 78 +1 + 79 +1 +170 +1 + 48 +1.0 +171 +1 + 6 + +172 +1 +173 +1 +174 +1 +140 +1.0 +141 +1.0 +175 +1 + 7 + +176 +1 +177 +1 +178 +1 +143 +1.0 +179 +1 + 8 + +270 +1 +271 +1 +272 +1 +145 +1.0 +146 +1.0 +273 +1 + 9 + +274 +1 +275 +1 +276 +1 + 42 +1.0 + 72 +1 + 3 + + 73 +1 + 74 +1 + 75 +1 + 94 +63 + 0 +MLINESTYLE + 5 +22 +102 +{ACAD_REACTORS +330 +10 +102 +} +330 +10 +100 +AcDbMlineStyle + 2 +Standard + 70 +0 + 3 + + 62 +256 + 51 +90.0 + 52 +90.0 + 71 +2 + 49 +0.5 + 62 +256 + 6 +BYLAYER + 49 +-0.5 + 62 +256 + 6 +BYLAYER + 0 +MLEADERSTYLE + 5 +2C +102 +{ACAD_REACTORS +330 +F +102 +} +330 +F +100 +AcDbMLeaderStyle +179 +2 +170 +2 +171 +1 +172 +0 + 90 +2 + 40 +0.0 + 41 +0.0 +173 +1 + 91 +-1056964608 + 92 +-2 +290 +1 + 42 +2.0 +291 +1 + 43 +8.0 + 3 +Standard + 44 +4.0 +300 + +342 +29 +174 +1 +175 +1 +176 +0 +178 +1 + 93 +-1056964608 + 45 +4.0 +292 +0 +297 +0 + 46 +4.0 + 94 +-1056964608 + 47 +1.0 + 49 +1.0 +140 +1.0 +294 +1 +141 +0.0 +177 +0 +142 +1.0 +295 +0 +296 +0 +143 +3.75 +271 +0 +272 +9 +273 +9 + 0 +DICTIONARY + 5 +2D +330 +A +100 +AcDbDictionary +280 +1 +281 +1 + 3 +CREATED_BY_EZDXF +350 +2E + 3 +WRITTEN_BY_EZDXF +350 +37 + 0 +DICTIONARYVAR + 5 +2E +330 +2D +100 +DictionaryVariables +280 +0 + 1 +1.4.2 @ 2026-02-09T21:16:39.099203+00:00 + 0 +DICTIONARYVAR + 5 +37 +330 +2D +100 +DictionaryVariables +280 +0 + 1 +1.4.2 @ 2026-02-09T21:16:39.100156+00:00 + 0 +ENDSEC + 0 +EOF diff --git a/packages/ducdxf/src/tests/src/temp/test_text_styles.duc b/packages/ducdxf/src/tests/src/temp/test_text_styles.duc new file mode 100644 index 00000000..9c5546b3 Binary files /dev/null and b/packages/ducdxf/src/tests/src/temp/test_text_styles.duc differ diff --git a/packages/ducdxf/src/tests/src/temp/test_text_styles.dxf b/packages/ducdxf/src/tests/src/temp/test_text_styles.dxf new file mode 100644 index 00000000..f7588ffc --- /dev/null +++ b/packages/ducdxf/src/tests/src/temp/test_text_styles.dxf @@ -0,0 +1,3376 @@ + 0 +SECTION + 2 +HEADER + 9 +$ACADVER + 1 +AC1032 + 9 +$ACADMAINTVER + 90 +4 + 9 +$DWGCODEPAGE + 3 +ANSI_1252 + 9 +$LASTSAVEDBY + 1 +ezdxf + 9 +$REQUIREDVERSIONS +160 +0 + 9 +$INSBASE + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$EXTMIN + 10 +1e+20 + 20 +1e+20 + 30 +1e+20 + 9 +$EXTMAX + 10 +-1e+20 + 20 +-1e+20 + 30 +-1e+20 + 9 +$LIMMIN + 10 +0.0 + 20 +0.0 + 9 +$LIMMAX + 10 +420.0 + 20 +297.0 + 9 +$ORTHOMODE + 70 +0 + 9 +$REGENMODE + 70 +1 + 9 +$FILLMODE + 70 +1 + 9 +$QTEXTMODE + 70 +0 + 9 +$MIRRTEXT + 70 +1 + 9 +$LTSCALE + 40 +1.0 + 9 +$ATTMODE + 70 +1 + 9 +$TEXTSIZE + 40 +2.5 + 9 +$TRACEWID + 40 +1.0 + 9 +$TEXTSTYLE + 7 +Standard + 9 +$CLAYER + 8 +0 + 9 +$CELTYPE + 6 +ByLayer + 9 +$CECOLOR + 62 +256 + 9 +$CELTSCALE + 40 +1.0 + 9 +$DISPSILH + 70 +0 + 9 +$DIMSCALE + 40 +1.0 + 9 +$DIMASZ + 40 +2.5 + 9 +$DIMEXO + 40 +0.625 + 9 +$DIMDLI + 40 +3.75 + 9 +$DIMRND + 40 +0.0 + 9 +$DIMDLE + 40 +0.0 + 9 +$DIMEXE + 40 +1.25 + 9 +$DIMTP + 40 +0.0 + 9 +$DIMTM + 40 +0.0 + 9 +$DIMTXT + 40 +2.5 + 9 +$DIMCEN + 40 +2.5 + 9 +$DIMTSZ + 40 +0.0 + 9 +$DIMTOL + 70 +0 + 9 +$DIMLIM + 70 +0 + 9 +$DIMTIH + 70 +0 + 9 +$DIMTOH + 70 +0 + 9 +$DIMSE1 + 70 +0 + 9 +$DIMSE2 + 70 +0 + 9 +$DIMTAD + 70 +1 + 9 +$DIMZIN + 70 +8 + 9 +$DIMBLK + 1 + + 9 +$DIMASO + 70 +1 + 9 +$DIMSHO + 70 +1 + 9 +$DIMPOST + 1 + + 9 +$DIMAPOST + 1 + + 9 +$DIMALT + 70 +0 + 9 +$DIMALTD + 70 +3 + 9 +$DIMALTF + 40 +0.03937007874 + 9 +$DIMLFAC + 40 +1.0 + 9 +$DIMTOFL + 70 +1 + 9 +$DIMTVP + 40 +0.0 + 9 +$DIMTIX + 70 +0 + 9 +$DIMSOXD + 70 +0 + 9 +$DIMSAH + 70 +0 + 9 +$DIMBLK1 + 1 + + 9 +$DIMBLK2 + 1 + + 9 +$DIMSTYLE + 2 +ISO-25 + 9 +$DIMCLRD + 70 +0 + 9 +$DIMCLRE + 70 +0 + 9 +$DIMCLRT + 70 +0 + 9 +$DIMTFAC + 40 +1.0 + 9 +$DIMGAP + 40 +0.625 + 9 +$DIMJUST + 70 +0 + 9 +$DIMSD1 + 70 +0 + 9 +$DIMSD2 + 70 +0 + 9 +$DIMTOLJ + 70 +0 + 9 +$DIMTZIN + 70 +8 + 9 +$DIMALTZ + 70 +0 + 9 +$DIMALTTZ + 70 +0 + 9 +$DIMUPT + 70 +0 + 9 +$DIMDEC + 70 +2 + 9 +$DIMTDEC + 70 +2 + 9 +$DIMALTU + 70 +2 + 9 +$DIMALTTD + 70 +3 + 9 +$DIMTXSTY + 7 +Standard + 9 +$DIMAUNIT + 70 +0 + 9 +$DIMADEC + 70 +0 + 9 +$DIMALTRND + 40 +0.0 + 9 +$DIMAZIN + 70 +0 + 9 +$DIMDSEP + 70 +44 + 9 +$DIMATFIT + 70 +3 + 9 +$DIMFRAC + 70 +0 + 9 +$DIMLDRBLK + 1 + + 9 +$DIMLUNIT + 70 +2 + 9 +$DIMLWD + 70 +-2 + 9 +$DIMLWE + 70 +-2 + 9 +$DIMTMOVE + 70 +0 + 9 +$DIMFXL + 40 +1.0 + 9 +$DIMFXLON + 70 +0 + 9 +$DIMJOGANG + 40 +0.785398163397 + 9 +$DIMTFILL + 70 +0 + 9 +$DIMTFILLCLR + 70 +0 + 9 +$DIMARCSYM + 70 +0 + 9 +$DIMLTYPE + 6 + + 9 +$DIMLTEX1 + 6 + + 9 +$DIMLTEX2 + 6 + + 9 +$DIMTXTDIRECTION + 70 +0 + 9 +$LUNITS + 70 +2 + 9 +$LUPREC + 70 +4 + 9 +$SKETCHINC + 40 +1.0 + 9 +$FILLETRAD + 40 +10.0 + 9 +$AUNITS + 70 +0 + 9 +$AUPREC + 70 +2 + 9 +$MENU + 1 +. + 9 +$ELEVATION + 40 +0.0 + 9 +$PELEVATION + 40 +0.0 + 9 +$THICKNESS + 40 +0.0 + 9 +$LIMCHECK + 70 +0 + 9 +$CHAMFERA + 40 +0.0 + 9 +$CHAMFERB + 40 +0.0 + 9 +$CHAMFERC + 40 +0.0 + 9 +$CHAMFERD + 40 +0.0 + 9 +$SKPOLY + 70 +0 + 9 +$TDCREATE + 40 +2461081.8865625 + 9 +$TDUCREATE + 40 +2458532.153996898 + 9 +$TDUPDATE + 40 +2461081.8865625 + 9 +$TDUUPDATE + 40 +2458532.1544311 + 9 +$TDINDWG + 40 +0.0 + 9 +$TDUSRTIMER + 40 +0.0 + 9 +$USRTIMER + 70 +1 + 9 +$ANGBASE + 50 +0.0 + 9 +$ANGDIR + 70 +0 + 9 +$PDMODE + 70 +0 + 9 +$PDSIZE + 40 +0.0 + 9 +$PLINEWID + 40 +0.0 + 9 +$SPLFRAME + 70 +0 + 9 +$SPLINETYPE + 70 +6 + 9 +$SPLINESEGS + 70 +8 + 9 +$HANDSEED + 5 +3D + 9 +$SURFTAB1 + 70 +6 + 9 +$SURFTAB2 + 70 +6 + 9 +$SURFTYPE + 70 +6 + 9 +$SURFU + 70 +6 + 9 +$SURFV + 70 +6 + 9 +$UCSBASE + 2 + + 9 +$UCSNAME + 2 + + 9 +$UCSORG + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSXDIR + 10 +1.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSYDIR + 10 +0.0 + 20 +1.0 + 30 +0.0 + 9 +$UCSORTHOREF + 2 + + 9 +$UCSORTHOVIEW + 70 +0 + 9 +$UCSORGTOP + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSORGBOTTOM + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSORGLEFT + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSORGRIGHT + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSORGFRONT + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSORGBACK + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSBASE + 2 + + 9 +$PUCSNAME + 2 + + 9 +$PUCSORG + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSXDIR + 10 +1.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSYDIR + 10 +0.0 + 20 +1.0 + 30 +0.0 + 9 +$PUCSORTHOREF + 2 + + 9 +$PUCSORTHOVIEW + 70 +0 + 9 +$PUCSORGTOP + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSORGBOTTOM + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSORGLEFT + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSORGRIGHT + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSORGFRONT + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSORGBACK + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$USERI1 + 70 +0 + 9 +$USERI2 + 70 +0 + 9 +$USERI3 + 70 +0 + 9 +$USERI4 + 70 +0 + 9 +$USERI5 + 70 +0 + 9 +$USERR1 + 40 +0.0 + 9 +$USERR2 + 40 +0.0 + 9 +$USERR3 + 40 +0.0 + 9 +$USERR4 + 40 +0.0 + 9 +$USERR5 + 40 +0.0 + 9 +$WORLDVIEW + 70 +1 + 9 +$SHADEDGE + 70 +3 + 9 +$SHADEDIF + 70 +70 + 9 +$TILEMODE + 70 +1 + 9 +$MAXACTVP + 70 +64 + 9 +$PINSBASE + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PLIMCHECK + 70 +0 + 9 +$PEXTMIN + 10 +1e+20 + 20 +1e+20 + 30 +1e+20 + 9 +$PEXTMAX + 10 +-1e+20 + 20 +-1e+20 + 30 +-1e+20 + 9 +$PLIMMIN + 10 +0.0 + 20 +0.0 + 9 +$PLIMMAX + 10 +420.0 + 20 +297.0 + 9 +$UNITMODE + 70 +0 + 9 +$VISRETAIN + 70 +1 + 9 +$PLINEGEN + 70 +0 + 9 +$PSLTSCALE + 70 +1 + 9 +$TREEDEPTH + 70 +3020 + 9 +$CMLSTYLE + 2 +Standard + 9 +$CMLJUST + 70 +0 + 9 +$CMLSCALE + 40 +20.0 + 9 +$PROXYGRAPHICS + 70 +1 + 9 +$MEASUREMENT + 70 +1 + 9 +$CELWEIGHT +370 +-1 + 9 +$ENDCAPS +280 +0 + 9 +$JOINSTYLE +280 +0 + 9 +$LWDISPLAY +290 +0 + 9 +$INSUNITS + 70 +6 + 9 +$HYPERLINKBASE + 1 + + 9 +$STYLESHEET + 1 + + 9 +$XEDIT +290 +1 + 9 +$CEPSNTYPE +380 +0 + 9 +$PSTYLEMODE +290 +1 + 9 +$FINGERPRINTGUID + 2 +{0D47D2DB-F4EC-4DAC-9A22-85AFC01BF34E} + 9 +$VERSIONGUID + 2 +{4AA73297-C0B2-47E4-B759-C0E1279C4FF3} + 9 +$EXTNAMES +290 +1 + 9 +$PSVPSCALE + 40 +0.0 + 9 +$OLESTARTUP +290 +0 + 9 +$SORTENTS +280 +127 + 9 +$INDEXCTL +280 +0 + 9 +$HIDETEXT +280 +1 + 9 +$XCLIPFRAME +280 +1 + 9 +$HALOGAP +280 +0 + 9 +$OBSCOLOR + 70 +257 + 9 +$OBSLTYPE +280 +0 + 9 +$INTERSECTIONDISPLAY +280 +0 + 9 +$INTERSECTIONCOLOR + 70 +257 + 9 +$DIMASSOC +280 +2 + 9 +$PROJECTNAME + 1 + + 9 +$CAMERADISPLAY +290 +0 + 9 +$LENSLENGTH + 40 +50.0 + 9 +$CAMERAHEIGHT + 40 +0.0 + 9 +$STEPSPERSEC + 40 +24.0 + 9 +$STEPSIZE + 40 +100.0 + 9 +$3DDWFPREC + 40 +2.0 + 9 +$PSOLWIDTH + 40 +0.005 + 9 +$PSOLHEIGHT + 40 +0.08 + 9 +$LOFTANG1 + 40 +1.570796326795 + 9 +$LOFTANG2 + 40 +1.570796326795 + 9 +$LOFTMAG1 + 40 +0.0 + 9 +$LOFTMAG2 + 40 +0.0 + 9 +$LOFTPARAM + 70 +7 + 9 +$LOFTNORMALS +280 +1 + 9 +$LATITUDE + 40 +37.795 + 9 +$LONGITUDE + 40 +-122.394 + 9 +$NORTHDIRECTION + 40 +0.0 + 9 +$TIMEZONE + 70 +-8000 + 9 +$LIGHTGLYPHDISPLAY +280 +1 + 9 +$TILEMODELIGHTSYNCH +280 +1 + 9 +$CMATERIAL +347 +20 + 9 +$SOLIDHIST +280 +0 + 9 +$SHOWHIST +280 +1 + 9 +$DWFFRAME +280 +2 + 9 +$DGNFRAME +280 +2 + 9 +$REALWORLDSCALE +290 +1 + 9 +$INTERFERECOLOR + 62 +256 + 9 +$CSHADOW +280 +0 + 9 +$SHADOWPLANELOCATION + 40 +0.0 + 0 +ENDSEC + 0 +SECTION + 2 +CLASSES + 0 +CLASS + 1 +ACDBDICTIONARYWDFLT + 2 +AcDbDictionaryWithDefault + 3 +ObjectDBX Classes + 90 +0 + 91 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +SUN + 2 +AcDbSun + 3 +SCENEOE + 90 +1153 + 91 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +VISUALSTYLE + 2 +AcDbVisualStyle + 3 +ObjectDBX Classes + 90 +4095 + 91 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +MATERIAL + 2 +AcDbMaterial + 3 +ObjectDBX Classes + 90 +1153 + 91 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +SCALE + 2 +AcDbScale + 3 +ObjectDBX Classes + 90 +1153 + 91 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +TABLESTYLE + 2 +AcDbTableStyle + 3 +ObjectDBX Classes + 90 +4095 + 91 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +MLEADERSTYLE + 2 +AcDbMLeaderStyle + 3 +ACDB_MLEADERSTYLE_CLASS + 90 +4095 + 91 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +DICTIONARYVAR + 2 +AcDbDictionaryVar + 3 +ObjectDBX Classes + 90 +0 + 91 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +CELLSTYLEMAP + 2 +AcDbCellStyleMap + 3 +ObjectDBX Classes + 90 +1152 + 91 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +MENTALRAYRENDERSETTINGS + 2 +AcDbMentalRayRenderSettings + 3 +SCENEOE + 90 +1024 + 91 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +ACDBDETAILVIEWSTYLE + 2 +AcDbDetailViewStyle + 3 +ObjectDBX Classes + 90 +1025 + 91 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +ACDBSECTIONVIEWSTYLE + 2 +AcDbSectionViewStyle + 3 +ObjectDBX Classes + 90 +1025 + 91 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +RASTERVARIABLES + 2 +AcDbRasterVariables + 3 +ISM + 90 +0 + 91 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +ACDBPLACEHOLDER + 2 +AcDbPlaceHolder + 3 +ObjectDBX Classes + 90 +0 + 91 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +LAYOUT + 2 +AcDbLayout + 3 +ObjectDBX Classes + 90 +0 + 91 +0 +280 +0 +281 +0 + 0 +ENDSEC + 0 +SECTION + 2 +TABLES + 0 +TABLE + 2 +VPORT + 5 +8 +330 +0 +100 +AcDbSymbolTable + 70 +1 + 0 +VPORT + 5 +23 +330 +8 +100 +AcDbSymbolTableRecord +100 +AcDbViewportTableRecord + 2 +*Active + 70 +0 + 10 +0.0 + 20 +0.0 + 11 +1.0 + 21 +1.0 + 12 +0.0 + 22 +0.0 + 13 +0.0 + 23 +0.0 + 14 +0.5 + 24 +0.5 + 15 +0.5 + 25 +0.5 + 16 +0.0 + 26 +0.0 + 36 +1.0 + 17 +0.0 + 27 +0.0 + 37 +0.0 + 40 +1000.0 + 41 +1.34 + 42 +50.0 + 43 +0.0 + 44 +0.0 + 50 +0.0 + 51 +0.0 + 71 +0 + 72 +1000 + 73 +1 + 74 +3 + 75 +0 + 76 +0 + 77 +0 + 78 +0 +281 +0 + 65 +0 +146 +0.0 + 0 +ENDTAB + 0 +TABLE + 2 +LTYPE + 5 +2 +330 +0 +100 +AcDbSymbolTable + 70 +3 + 0 +LTYPE + 5 +24 +330 +2 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ByBlock + 70 +0 + 3 + + 72 +65 + 73 +0 + 40 +0.0 + 0 +LTYPE + 5 +25 +330 +2 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ByLayer + 70 +0 + 3 + + 72 +65 + 73 +0 + 40 +0.0 + 0 +LTYPE + 5 +26 +330 +2 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +Continuous + 70 +0 + 3 + + 72 +65 + 73 +0 + 40 +0.0 + 0 +ENDTAB + 0 +TABLE + 2 +LAYER + 5 +1 +330 +0 +100 +AcDbSymbolTable + 70 +2 + 0 +LAYER + 5 +27 +330 +1 +100 +AcDbSymbolTableRecord +100 +AcDbLayerTableRecord + 2 +0 + 70 +0 + 62 +7 + 6 +Continuous +370 +-3 +390 +13 +347 +21 + 0 +LAYER + 5 +28 +330 +1 +100 +AcDbSymbolTableRecord +100 +AcDbLayerTableRecord + 2 +Defpoints + 70 +0 + 62 +7 + 6 +Continuous +290 +0 +370 +-3 +390 +13 +347 +21 + 0 +ENDTAB + 0 +TABLE + 2 +STYLE + 5 +5 +330 +0 +100 +AcDbSymbolTable + 70 +7 + 0 +STYLE + 5 +29 +330 +5 +100 +AcDbSymbolTableRecord +100 +AcDbTextStyleTableRecord + 2 +Standard + 70 +0 + 40 +0.0 + 41 +1.0 + 50 +0.0 + 71 +0 + 42 +2.5 + 3 +txt + 4 + + 0 +STYLE + 5 +2F +330 +5 +100 +AcDbSymbolTableRecord +100 +AcDbTextStyleTableRecord + 2 +TITLE + 70 +0 + 40 +24.0 + 41 +1.0 + 50 +0.0 + 71 +0 + 42 +2.5 + 3 +arial.ttf + 4 + + 0 +STYLE + 5 +30 +330 +5 +100 +AcDbSymbolTableRecord +100 +AcDbTextStyleTableRecord + 2 +ITALIC_TEXT + 70 +0 + 40 +12.0 + 41 +1.0 + 50 +15.0 + 71 +0 + 42 +2.5 + 3 +times.ttf + 4 + + 0 +STYLE + 5 +31 +330 +5 +100 +AcDbSymbolTableRecord +100 +AcDbTextStyleTableRecord + 2 +CONDENSED + 70 +0 + 40 +0.0 + 41 +0.7 + 50 +0.0 + 71 +0 + 42 +2.5 + 3 +arial.ttf + 4 + + 0 +STYLE + 5 +32 +330 +5 +100 +AcDbSymbolTableRecord +100 +AcDbTextStyleTableRecord + 2 +BACKWARDS + 70 +4 + 40 +10.0 + 41 +1.0 + 50 +0.0 + 71 +0 + 42 +2.5 + 3 +arial.ttf + 4 + + 0 +STYLE + 5 +33 +330 +5 +100 +AcDbSymbolTableRecord +100 +AcDbTextStyleTableRecord + 2 +UPSIDEDOWN + 70 +16 + 40 +10.0 + 41 +1.0 + 50 +0.0 + 71 +0 + 42 +2.5 + 3 +arial.ttf + 4 + + 0 +STYLE + 5 +34 +330 +5 +100 +AcDbSymbolTableRecord +100 +AcDbTextStyleTableRecord + 2 +ROMANS + 70 +0 + 40 +0.0 + 41 +1.0 + 50 +0.0 + 71 +0 + 42 +2.5 + 3 +romans.shx + 4 + + 0 +ENDTAB + 0 +TABLE + 2 +VIEW + 5 +7 +330 +0 +100 +AcDbSymbolTable + 70 +0 + 0 +ENDTAB + 0 +TABLE + 2 +UCS + 5 +6 +330 +0 +100 +AcDbSymbolTable + 70 +0 + 0 +ENDTAB + 0 +TABLE + 2 +APPID + 5 +3 +330 +0 +100 +AcDbSymbolTable + 70 +3 + 0 +APPID + 5 +2A +330 +3 +100 +AcDbSymbolTableRecord +100 +AcDbRegAppTableRecord + 2 +ACAD + 70 +0 + 0 +APPID + 5 +3A +330 +3 +100 +AcDbSymbolTableRecord +100 +AcDbRegAppTableRecord + 2 +HATCHBACKGROUNDCOLOR + 70 +0 + 0 +APPID + 5 +3B +330 +3 +100 +AcDbSymbolTableRecord +100 +AcDbRegAppTableRecord + 2 +EZDXF + 70 +0 + 0 +ENDTAB + 0 +TABLE + 2 +DIMSTYLE + 5 +4 +330 +0 +100 +AcDbSymbolTable + 70 +1 +100 +AcDbDimStyleTable + 0 +DIMSTYLE +105 +2B +330 +4 +100 +AcDbSymbolTableRecord +100 +AcDbDimStyleTableRecord + 2 +Standard + 70 +0 + 40 +1.0 + 41 +2.5 + 42 +0.625 + 43 +3.75 + 44 +1.25 + 45 +0.0 + 46 +0.0 + 47 +0.0 + 48 +0.0 + 49 +2.5 +140 +2.5 +141 +2.5 +142 +0.0 +143 +0.03937007874 +144 +1.0 +145 +0.0 +146 +1.0 +147 +0.625 +148 +0.0 + 69 +0 + 70 +0 + 71 +0 + 72 +0 + 73 +0 + 74 +0 + 75 +0 + 76 +0 + 77 +1 + 78 +8 + 79 +3 +170 +0 +171 +3 +172 +1 +173 +0 +174 +0 +175 +0 +176 +0 +177 +0 +178 +0 +179 +2 +271 +2 +272 +2 +273 +2 +274 +3 +275 +0 +276 +0 +277 +2 +278 +44 +279 +0 +280 +0 +281 +0 +282 +0 +283 +0 +284 +8 +285 +0 +286 +0 +288 +0 +289 +3 +290 +0 +371 +-2 +372 +-2 + 0 +ENDTAB + 0 +TABLE + 2 +BLOCK_RECORD + 5 +9 +330 +0 +100 +AcDbSymbolTable + 70 +2 + 0 +BLOCK_RECORD + 5 +17 +330 +9 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*Model_Space +340 +1A + 70 +0 +280 +1 +281 +0 + 0 +BLOCK_RECORD + 5 +1B +330 +9 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*Paper_Space +340 +1E + 70 +0 +280 +1 +281 +0 + 0 +ENDTAB + 0 +ENDSEC + 0 +SECTION + 2 +BLOCKS + 0 +BLOCK + 5 +18 +330 +17 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +*Model_Space + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*Model_Space + 1 + + 0 +ENDBLK + 5 +19 +330 +17 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +1C +330 +1B +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +*Paper_Space + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*Paper_Space + 1 + + 0 +ENDBLK + 5 +1D +330 +1B +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +ENDSEC + 0 +SECTION + 2 +ENTITIES + 0 +TEXT + 5 +35 +330 +17 +100 +AcDbEntity + 8 +0 +100 +AcDbText + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +2.5 + 1 +Sample text in TITLE + 7 +TITLE + 11 +0.0 + 21 +0.0 + 31 +0.0 +100 +AcDbText + 0 +TEXT + 5 +36 +330 +17 +100 +AcDbEntity + 8 +0 +100 +AcDbText + 10 +0.0 + 20 +15.0 + 30 +0.0 + 40 +2.5 + 1 +Sample text in ITALIC_TEXT + 7 +ITALIC_TEXT + 11 +0.0 + 21 +15.0 + 31 +0.0 +100 +AcDbText + 0 +TEXT + 5 +37 +330 +17 +100 +AcDbEntity + 8 +0 +100 +AcDbText + 10 +0.0 + 20 +30.0 + 30 +0.0 + 40 +10.0 + 1 +Sample text in CONDENSED + 7 +CONDENSED + 11 +0.0 + 21 +30.0 + 31 +0.0 +100 +AcDbText + 0 +TEXT + 5 +38 +330 +17 +100 +AcDbEntity + 8 +0 +100 +AcDbText + 10 +0.0 + 20 +45.0 + 30 +0.0 + 40 +2.5 + 1 +Sample text in BACKWARDS + 7 +BACKWARDS + 11 +0.0 + 21 +45.0 + 31 +0.0 +100 +AcDbText + 0 +TEXT + 5 +39 +330 +17 +100 +AcDbEntity + 8 +0 +100 +AcDbText + 10 +0.0 + 20 +60.0 + 30 +0.0 + 40 +10.0 + 1 +Sample text in ROMANS + 7 +ROMANS + 11 +0.0 + 21 +60.0 + 31 +0.0 +100 +AcDbText + 0 +ENDSEC + 0 +SECTION + 2 +OBJECTS + 0 +DICTIONARY + 5 +A +330 +0 +100 +AcDbDictionary +281 +1 + 3 +ACAD_COLOR +350 +B + 3 +ACAD_GROUP +350 +C + 3 +ACAD_LAYOUT +350 +D + 3 +ACAD_MATERIAL +350 +E + 3 +ACAD_MLEADERSTYLE +350 +F + 3 +ACAD_MLINESTYLE +350 +10 + 3 +ACAD_PLOTSETTINGS +350 +11 + 3 +ACAD_PLOTSTYLENAME +350 +12 + 3 +ACAD_SCALELIST +350 +14 + 3 +ACAD_TABLESTYLE +350 +15 + 3 +ACAD_VISUALSTYLE +350 +16 + 3 +EZDXF_META +350 +2D + 0 +DICTIONARY + 5 +B +330 +A +100 +AcDbDictionary +281 +1 + 0 +DICTIONARY + 5 +C +330 +A +100 +AcDbDictionary +281 +1 + 0 +DICTIONARY + 5 +D +330 +A +100 +AcDbDictionary +281 +1 + 3 +Model +350 +1A + 3 +Layout1 +350 +1E + 0 +DICTIONARY + 5 +E +330 +A +100 +AcDbDictionary +281 +1 + 3 +ByBlock +350 +1F + 3 +ByLayer +350 +20 + 3 +Global +350 +21 + 0 +DICTIONARY + 5 +F +330 +A +100 +AcDbDictionary +281 +1 + 3 +Standard +350 +2C + 0 +DICTIONARY + 5 +10 +330 +A +100 +AcDbDictionary +281 +1 + 3 +Standard +350 +22 + 0 +DICTIONARY + 5 +11 +330 +A +100 +AcDbDictionary +281 +1 + 0 +ACDBDICTIONARYWDFLT + 5 +12 +330 +A +100 +AcDbDictionary +281 +1 + 3 +Normal +350 +13 +100 +AcDbDictionaryWithDefault +340 +13 + 0 +ACDBPLACEHOLDER + 5 +13 +330 +12 + 0 +DICTIONARY + 5 +14 +330 +A +100 +AcDbDictionary +281 +1 + 0 +DICTIONARY + 5 +15 +330 +A +100 +AcDbDictionary +281 +1 + 0 +DICTIONARY + 5 +16 +330 +A +100 +AcDbDictionary +281 +1 + 0 +LAYOUT + 5 +1A +330 +D +100 +AcDbPlotSettings + 1 + + 4 +A3 + 6 + + 40 +7.5 + 41 +20.0 + 42 +7.5 + 43 +20.0 + 44 +420.0 + 45 +297.0 + 46 +0.0 + 47 +0.0 + 48 +0.0 + 49 +0.0 +140 +0.0 +141 +0.0 +142 +1.0 +143 +1.0 + 70 +1024 + 72 +1 + 73 +0 + 74 +5 + 7 + + 75 +16 + 76 +0 + 77 +2 + 78 +300 +147 +1.0 +148 +0.0 +149 +0.0 +100 +AcDbLayout + 1 +Model + 70 +1 + 71 +0 + 10 +0.0 + 20 +0.0 + 11 +420.0 + 21 +297.0 + 12 +0.0 + 22 +0.0 + 32 +0.0 + 14 +1e+20 + 24 +1e+20 + 34 +1e+20 + 15 +-1e+20 + 25 +-1e+20 + 35 +-1e+20 +146 +0.0 + 13 +0.0 + 23 +0.0 + 33 +0.0 + 16 +1.0 + 26 +0.0 + 36 +0.0 + 17 +0.0 + 27 +1.0 + 37 +0.0 + 76 +1 +330 +17 + 0 +LAYOUT + 5 +1E +330 +D +100 +AcDbPlotSettings + 1 + + 4 +A3 + 6 + + 40 +7.5 + 41 +20.0 + 42 +7.5 + 43 +20.0 + 44 +420.0 + 45 +297.0 + 46 +0.0 + 47 +0.0 + 48 +0.0 + 49 +0.0 +140 +0.0 +141 +0.0 +142 +1.0 +143 +1.0 + 70 +0 + 72 +1 + 73 +0 + 74 +5 + 7 + + 75 +16 + 76 +0 + 77 +2 + 78 +300 +147 +1.0 +148 +0.0 +149 +0.0 +100 +AcDbLayout + 1 +Layout1 + 70 +1 + 71 +1 + 10 +0.0 + 20 +0.0 + 11 +420.0 + 21 +297.0 + 12 +0.0 + 22 +0.0 + 32 +0.0 + 14 +1e+20 + 24 +1e+20 + 34 +1e+20 + 15 +-1e+20 + 25 +-1e+20 + 35 +-1e+20 +146 +0.0 + 13 +0.0 + 23 +0.0 + 33 +0.0 + 16 +1.0 + 26 +0.0 + 36 +0.0 + 17 +0.0 + 27 +1.0 + 37 +0.0 + 76 +1 +330 +1B + 0 +MATERIAL + 5 +1F +102 +{ACAD_REACTORS +330 +E +102 +} +330 +E +100 +AcDbMaterial + 1 +ByBlock + 2 + + 70 +0 + 40 +1.0 + 71 +1 + 41 +1.0 + 91 +-1023410177 + 42 +1.0 + 72 +1 + 3 + + 73 +1 + 74 +1 + 75 +1 + 44 +0.5 + 73 +0 + 45 +1.0 + 46 +1.0 + 77 +1 + 4 + + 78 +1 + 79 +1 +170 +1 + 48 +1.0 +171 +1 + 6 + +172 +1 +173 +1 +174 +1 +140 +1.0 +141 +1.0 +175 +1 + 7 + +176 +1 +177 +1 +178 +1 +143 +1.0 +179 +1 + 8 + +270 +1 +271 +1 +272 +1 +145 +1.0 +146 +1.0 +273 +1 + 9 + +274 +1 +275 +1 +276 +1 + 42 +1.0 + 72 +1 + 3 + + 73 +1 + 74 +1 + 75 +1 + 94 +63 + 0 +MATERIAL + 5 +20 +102 +{ACAD_REACTORS +330 +E +102 +} +330 +E +100 +AcDbMaterial + 1 +ByLayer + 2 + + 70 +0 + 40 +1.0 + 71 +1 + 41 +1.0 + 91 +-1023410177 + 42 +1.0 + 72 +1 + 3 + + 73 +1 + 74 +1 + 75 +1 + 44 +0.5 + 73 +0 + 45 +1.0 + 46 +1.0 + 77 +1 + 4 + + 78 +1 + 79 +1 +170 +1 + 48 +1.0 +171 +1 + 6 + +172 +1 +173 +1 +174 +1 +140 +1.0 +141 +1.0 +175 +1 + 7 + +176 +1 +177 +1 +178 +1 +143 +1.0 +179 +1 + 8 + +270 +1 +271 +1 +272 +1 +145 +1.0 +146 +1.0 +273 +1 + 9 + +274 +1 +275 +1 +276 +1 + 42 +1.0 + 72 +1 + 3 + + 73 +1 + 74 +1 + 75 +1 + 94 +63 + 0 +MATERIAL + 5 +21 +102 +{ACAD_REACTORS +330 +E +102 +} +330 +E +100 +AcDbMaterial + 1 +Global + 2 + + 70 +0 + 40 +1.0 + 71 +1 + 41 +1.0 + 91 +-1023410177 + 42 +1.0 + 72 +1 + 3 + + 73 +1 + 74 +1 + 75 +1 + 44 +0.5 + 73 +0 + 45 +1.0 + 46 +1.0 + 77 +1 + 4 + + 78 +1 + 79 +1 +170 +1 + 48 +1.0 +171 +1 + 6 + +172 +1 +173 +1 +174 +1 +140 +1.0 +141 +1.0 +175 +1 + 7 + +176 +1 +177 +1 +178 +1 +143 +1.0 +179 +1 + 8 + +270 +1 +271 +1 +272 +1 +145 +1.0 +146 +1.0 +273 +1 + 9 + +274 +1 +275 +1 +276 +1 + 42 +1.0 + 72 +1 + 3 + + 73 +1 + 74 +1 + 75 +1 + 94 +63 + 0 +MLINESTYLE + 5 +22 +102 +{ACAD_REACTORS +330 +10 +102 +} +330 +10 +100 +AcDbMlineStyle + 2 +Standard + 70 +0 + 3 + + 62 +256 + 51 +90.0 + 52 +90.0 + 71 +2 + 49 +0.5 + 62 +256 + 6 +BYLAYER + 49 +-0.5 + 62 +256 + 6 +BYLAYER + 0 +MLEADERSTYLE + 5 +2C +102 +{ACAD_REACTORS +330 +F +102 +} +330 +F +100 +AcDbMLeaderStyle +179 +2 +170 +2 +171 +1 +172 +0 + 90 +2 + 40 +0.0 + 41 +0.0 +173 +1 + 91 +-1056964608 + 92 +-2 +290 +1 + 42 +2.0 +291 +1 + 43 +8.0 + 3 +Standard + 44 +4.0 +300 + +342 +29 +174 +1 +175 +1 +176 +0 +178 +1 + 93 +-1056964608 + 45 +4.0 +292 +0 +297 +0 + 46 +4.0 + 94 +-1056964608 + 47 +1.0 + 49 +1.0 +140 +1.0 +294 +1 +141 +0.0 +177 +0 +142 +1.0 +295 +0 +296 +0 +143 +3.75 +271 +0 +272 +9 +273 +9 + 0 +DICTIONARY + 5 +2D +330 +A +100 +AcDbDictionary +280 +1 +281 +1 + 3 +CREATED_BY_EZDXF +350 +2E + 3 +WRITTEN_BY_EZDXF +350 +3C + 0 +DICTIONARYVAR + 5 +2E +330 +2D +100 +DictionaryVariables +280 +0 + 1 +1.4.2 @ 2026-02-09T21:16:39.120029+00:00 + 0 +DICTIONARYVAR + 5 +3C +330 +2D +100 +DictionaryVariables +280 +0 + 1 +1.4.2 @ 2026-02-09T21:16:39.121163+00:00 + 0 +ENDSEC + 0 +EOF diff --git a/packages/ducdxf/src/tests/src/test_conversion.py b/packages/ducdxf/src/tests/src/test_conversion.py new file mode 100644 index 00000000..70c7bf61 --- /dev/null +++ b/packages/ducdxf/src/tests/src/test_conversion.py @@ -0,0 +1,76 @@ +import pytest +import ezdxf +import os +import sys + +# Add the project's 'src' directory to the Python path to allow for package imports. +# This ensures that 'ducxf' can be found when running tests. +src_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', 'src')) +if src_path not in sys.path: + sys.path.insert(0, src_path) + +from ducxf.dxf_to_duc import convert_dxf_to_duc +import ducpy as duc + +@pytest.fixture +def assets_dir(): + """Returns the absolute path to the test assets directory.""" + return os.path.join(os.path.dirname(__file__), '..', 'assets') + +@pytest.fixture +def output_dir(): + """ + Creates and returns the absolute path to the test output directory. + The directory is created if it does not exist. + """ + # As requested, output will be stored in a directory named 'outputs' + # relative to the 'tests' folder. + output_path = os.path.join(os.path.dirname(__file__), '..', 'outputs') + os.makedirs(output_path, exist_ok=True) + return output_path + +def test_xclip_dxf_to_duc_conversion(assets_dir, output_dir): + """ + Tests the end-to-end conversion of the 'xclip.dxf' file to a .duc file. + + This test verifies: + 1. The conversion script runs without raising errors. + 2. A valid .duc output file is created at the specified location. + 3. The created .duc file is not empty. + 4. The parsed .duc file contains the expected high-level structures + (elements, layers, and blocks) from the source DXF. + """ + # 1. Define input and output paths for the test case + dxf_input_path = os.path.join(assets_dir, 'xclip.dxf') + duc_output_path = os.path.join(output_dir, 'xclip.duc') + + # Pre-condition check: Ensure the source DXF file exists before running. + assert os.path.exists(dxf_input_path), f"Input DXF file not found at: {dxf_input_path}" + + # 2. Execute the main conversion function from the script + convert_dxf_to_duc(dxf_input_path, duc_output_path) + + # 3. Assertions to verify the outcome of the conversion + + # a) Check that the output file was successfully created. + assert os.path.exists(duc_output_path), \ + f"Output DUC file was not created at: {duc_output_path}" + + # b) Check that the created file has content. + assert os.path.getsize(duc_output_path) > 0, \ + "The output DUC file is empty, indicating a possible write error." + + # c) Parse the generated .duc file to validate its integrity and content. + parsed_duc = duc.read_duc_file(duc_output_path) + assert parsed_duc is not None, \ + "Failed to parse the generated DUC file. It may be corrupt." + + # d) Validate that key structures from the DXF were converted. + assert parsed_duc.duc_global_state is not None, \ + "Parsed state missing global state" + + # Log results to the console for clarity when running tests + print(f"\n✅ Conversion test passed for '{os.path.basename(dxf_input_path)}'.") + print(f" - Output file created at: {duc_output_path}") + + diff --git a/packages/ducdxf/src/tests/src/test_example.py b/packages/ducdxf/src/tests/src/test_example.py new file mode 100644 index 00000000..b1b8ce65 --- /dev/null +++ b/packages/ducdxf/src/tests/src/test_example.py @@ -0,0 +1,61 @@ +""" +Test moving elements randomly in a DUC file. +""" + +import pytest + + +def test_ducpy_import(): + """Test that ducpy can be imported successfully.""" + try: + import ducpy + assert ducpy is not None + # Test basic ducpy functionality if available + assert hasattr(ducpy, '__version__') or hasattr(ducpy, '__name__') + except ImportError as e: + pytest.fail(f"Failed to import ducpy: {e}") + + +def test_ezdxf_import(): + """Test that ezdxf can be imported successfully.""" + try: + import ezdxf + assert ezdxf is not None + # Test basic ezdxf functionality + assert hasattr(ezdxf, '__version__') + # Try creating a simple DXF document + doc = ezdxf.new('R2010') + assert doc is not None + assert doc.dxfversion == 'AC1024' # R2010 version code + except ImportError as e: + pytest.fail(f"Failed to import ezdxf: {e}") + + +def test_basic_functionality(): + """Simple test to verify the testing setup is working.""" + assert True + + +def test_math_operations(): + """Test basic math operations to ensure pytest is functioning.""" + assert 2 + 2 == 4 + assert 10 - 5 == 5 + assert 3 * 4 == 12 + assert 8 / 2 == 4 + + +def test_string_operations(): + """Test string operations.""" + test_string = "ducdxf" + assert len(test_string) == 6 + assert test_string.upper() == "DUCDXF" + assert "dxf" in test_string + + +def test_list_operations(): + """Test list operations.""" + test_list = [1, 2, 3, 4, 5] + assert len(test_list) == 5 + assert test_list[0] == 1 + assert test_list[-1] == 5 + assert 3 in test_list diff --git a/packages/ducdxf/src/tests/src/test_header.py b/packages/ducdxf/src/tests/src/test_header.py new file mode 100644 index 00000000..59dba594 --- /dev/null +++ b/packages/ducdxf/src/tests/src/test_header.py @@ -0,0 +1,443 @@ +""" +Test header conversion from DXF to DUC format. + +This module tests the convert_header function to ensure all DXF header variables +are properly converted to DUC global state, local state, and conversion context. +""" + +import pytest +import ezdxf +import sys +import os + +# Add the project's 'src' directory to the Python path +src_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', 'src')) +if src_path not in sys.path: + sys.path.insert(0, src_path) + +from ducxf.dxf_to_duc import convert_header +import ducpy as duc +from ducpy.Duc.UNIT_SYSTEM import UNIT_SYSTEM +from ducpy.Duc.DIMENSION_UNITS_FORMAT import DIMENSION_UNITS_FORMAT +from ducpy.Duc.ANGULAR_UNITS_FORMAT import ANGULAR_UNITS_FORMAT +from ducpy.Duc.DECIMAL_SEPARATOR import DECIMAL_SEPARATOR + + +@pytest.fixture +def basic_dxf_doc(): + """Create a basic DXF document for testing.""" + doc = ezdxf.new('R2010') + return doc + + +@pytest.fixture +def configured_dxf_doc(): + """Create a DXF document with custom header settings.""" + doc = ezdxf.new('R2010') + header = doc.header + + # Set various header variables + header['$INSUNITS'] = 4 # millimeters + header['$LTSCALE'] = 2.5 + header['$MEASUREMENT'] = 1 # Metric + header['$FILLMODE'] = 0 # Fill mode off + header['$TEXTSTYLE'] = 'Standard' + header['$CLAYER'] = 'MyLayer' + header['$DIMSTYLE'] = 'ISO-25' + # Note: $MLEADERSTYLE is not supported in R2010 header, handled elsewhere + # Note: $CANNOSCALE is not supported in R2010 header, it was introduced in later versions + header['$CELTSCALE'] = 1.5 + header['$LUNITS'] = 2 # Decimal + header['$AUNITS'] = 0 # Decimal degrees + + return doc + + +class TestHeaderConversionBasics: + """Test basic header conversion functionality.""" + + def test_convert_header_returns_tuple(self, basic_dxf_doc): + """Test that convert_header returns a tuple with 3 elements.""" + result = convert_header(basic_dxf_doc.header, basic_dxf_doc) + assert isinstance(result, tuple) + assert len(result) == 3 + + global_state, local_state, context = result + assert global_state is not None + assert local_state is not None + assert isinstance(context, dict) + + def test_default_units(self, basic_dxf_doc): + """Test default unit conversion when no units are specified.""" + global_state, local_state, context = convert_header( + basic_dxf_doc.header, basic_dxf_doc + ) + + # Default INSUNITS in R2010 seems to be meters + assert global_state.main_scope in ["mm", "m"] # Allow both defaults + assert local_state.scope in ["mm", "m"] + + def test_default_linetype_scale(self, basic_dxf_doc): + """Test default linetype scale.""" + global_state, local_state, context = convert_header( + basic_dxf_doc.header, basic_dxf_doc + ) + + # Default LTSCALE is 1.0 + assert global_state.dash_spacing_scale == 1.0 + + +class TestGlobalStateConversion: + """Test conversion of header variables to DUC global state.""" + + def test_ltscale_conversion(self, configured_dxf_doc): + """Test $LTSCALE conversion to dash_spacing_scale.""" + global_state, _, _ = convert_header( + configured_dxf_doc.header, configured_dxf_doc + ) + + assert global_state.dash_spacing_scale == 2.5 + + def test_insunits_conversion(self, configured_dxf_doc): + """Test $INSUNITS conversion to main_scope.""" + global_state, _, _ = convert_header( + configured_dxf_doc.header, configured_dxf_doc + ) + + # INSUNITS = 4 is millimeters + assert global_state.main_scope == "mm" + + @pytest.mark.skip(reason="$CANNOSCALE is not settable via ezdxf header API") + def test_cannoscale_conversion(self): + """Test $CANNOSCALE conversion to use_annotative_scaling. + + Note: $CANNOSCALE was introduced in DXF R2013, but ezdxf doesn't allow + setting it directly via the header dictionary. The conversion code + handles this by using header.get() with a default of None. + """ + doc = ezdxf.new('R2013') # R2013+ supports $CANNOSCALE + doc.header['$CANNOSCALE'] = '1:2' + + global_state, _, _ = convert_header(doc.header, doc) + + # When CANNOSCALE is set, use_annotative_scaling should be True + assert global_state.use_annotative_scaling is True + + def test_no_annotative_scaling_when_cannoscale_absent(self, basic_dxf_doc): + """Test that use_annotative_scaling is False when $CANNOSCALE is not set.""" + global_state, _, _ = convert_header( + basic_dxf_doc.header, basic_dxf_doc + ) + + assert global_state.use_annotative_scaling is False + + +class TestLocalStateConversion: + """Test conversion of header variables to DUC local state.""" + + def test_fillmode_to_outline_mode(self, configured_dxf_doc): + """Test $FILLMODE conversion to outline_mode_enabled (inverse logic).""" + _, local_state, _ = convert_header( + configured_dxf_doc.header, configured_dxf_doc + ) + + # FILLMODE = 0 (fills off) should set outline_mode_enabled = True + assert local_state.outline_mode_enabled is True + + def test_fillmode_on(self, basic_dxf_doc): + """Test that FILLMODE = 1 results in outline_mode_enabled = False.""" + basic_dxf_doc.header['$FILLMODE'] = 1 + _, local_state, _ = convert_header( + basic_dxf_doc.header, basic_dxf_doc + ) + + # FILLMODE = 1 (fills on) should set outline_mode_enabled = False + assert local_state.outline_mode_enabled is False + + def test_textstyle_conversion(self, configured_dxf_doc): + """Test $TEXTSTYLE conversion to font properties in context.""" + _, local_state, context = convert_header( + configured_dxf_doc.header, configured_dxf_doc + ) + + # Font info should be in conversion context + assert 'font_family' in context + assert 'font_size' in context + assert context['font_family'] is not None + assert context['font_size'] > 0 + + def test_scope_matches_insunits(self, configured_dxf_doc): + """Test that local_state.scope matches the units.""" + _, local_state, _ = convert_header( + configured_dxf_doc.header, configured_dxf_doc + ) + + assert local_state.scope == "mm" + + +class TestConversionContext: + """Test conversion context dictionary contents.""" + + def test_current_layer(self, configured_dxf_doc): + """Test $CLAYER conversion to conversion context.""" + _, _, context = convert_header( + configured_dxf_doc.header, configured_dxf_doc + ) + + assert 'current_layer' in context + assert context['current_layer'] == 'MyLayer' + + def test_current_dimstyle(self, configured_dxf_doc): + """Test $DIMSTYLE conversion to conversion context.""" + _, _, context = convert_header( + configured_dxf_doc.header, configured_dxf_doc + ) + + assert 'current_dimstyle' in context + assert context['current_dimstyle'] == 'ISO-25' + + def test_current_mleaderstyle(self, basic_dxf_doc): + """Test $MLEADERSTYLE conversion to conversion context.""" + _, _, context = convert_header( + basic_dxf_doc.header, basic_dxf_doc + ) + + # MLEADERSTYLE defaults to 'Standard' when not set + assert 'current_mleaderstyle' in context + assert context['current_mleaderstyle'] == 'Standard' + + def test_celtscale(self, configured_dxf_doc): + """Test $CELTSCALE conversion to conversion context.""" + _, _, context = convert_header( + configured_dxf_doc.header, configured_dxf_doc + ) + + assert 'celtscale' in context + assert context['celtscale'] == 1.5 + + def test_standard_units_in_context(self, configured_dxf_doc): + """Test that standard_units is included in conversion context.""" + _, _, context = convert_header( + configured_dxf_doc.header, configured_dxf_doc + ) + + assert 'standard_units' in context + assert context['standard_units'] is not None + + # Verify standard_units has primary_units + standard_units = context['standard_units'] + assert hasattr(standard_units, 'primary_units') + assert standard_units.primary_units is not None + + def test_default_context_values(self, basic_dxf_doc): + """Test default values in conversion context.""" + _, _, context = convert_header( + basic_dxf_doc.header, basic_dxf_doc + ) + + # Defaults - R2010 uses ISO-25 as default dimstyle + assert context['current_layer'] == '0' + assert context['current_dimstyle'] in ['Standard', 'ISO-25'] # Depends on DXF version + assert context['current_mleaderstyle'] == 'Standard' + assert context['celtscale'] == 1.0 + + +class TestUnitSystemConversion: + """Test unit system conversions.""" + + def test_metric_system(self): + """Test metric system detection.""" + doc = ezdxf.new('R2010') + doc.header['$MEASUREMENT'] = 1 # Metric + doc.header['$INSUNITS'] = 4 # millimeters + + _, _, context = convert_header(doc.header, doc) + + standard_units = context['standard_units'] + assert standard_units.primary_units.linear.system == UNIT_SYSTEM.METRIC + + def test_imperial_system(self): + """Test imperial system detection.""" + doc = ezdxf.new('R2010') + doc.header['$MEASUREMENT'] = 0 # Imperial + doc.header['$INSUNITS'] = 1 # inches + + _, _, context = convert_header(doc.header, doc) + + standard_units = context['standard_units'] + assert standard_units.primary_units.linear.system == UNIT_SYSTEM.IMPERIAL + + def test_linear_units_format(self): + """Test linear units format conversion.""" + doc = ezdxf.new('R2010') + doc.header['$LUNITS'] = 2 # Decimal + + _, _, context = convert_header(doc.header, doc) + + standard_units = context['standard_units'] + assert standard_units.primary_units.linear.format == DIMENSION_UNITS_FORMAT.DECIMAL + + def test_angular_units_format(self): + """Test angular units format conversion.""" + doc = ezdxf.new('R2010') + doc.header['$AUNITS'] = 0 # Decimal degrees + + _, _, context = convert_header(doc.header, doc) + + standard_units = context['standard_units'] + assert standard_units.primary_units.angular.format == ANGULAR_UNITS_FORMAT.DECIMAL_DEGREES + + +class TestDimensionStylePrecision: + """Test dimension style precision and suppression settings.""" + + def test_precision_from_dimstyle(self): + """Test that precision is extracted from dimension style.""" + doc = ezdxf.new('R2010') + dimstyle = doc.dimstyles.get('Standard') + dimstyle.dxf.dimtdec = 4 # 4 decimal places + + _, _, context = convert_header(doc.header, doc) + + standard_units = context['standard_units'] + assert standard_units.primary_units.linear.precision == 4 + + def test_decimal_separator_conversion(self): + """Test decimal separator conversion.""" + doc = ezdxf.new('R2010') + dimstyle = doc.dimstyles.get('Standard') + dimstyle.dxf.dimdsep = 44 # Comma separator + + _, _, context = convert_header(doc.header, doc) + + standard_units = context['standard_units'] + assert standard_units.primary_units.linear.decimal_separator == DECIMAL_SEPARATOR.COMMA + + def test_suppress_trailing_zeros(self): + """Test trailing zeros suppression.""" + doc = ezdxf.new('R2010') + dimstyle = doc.dimstyles.get('Standard') + dimstyle.dxf.dimtzin = 1 # Bit 0: suppress trailing zeros + + _, _, context = convert_header(doc.header, doc) + + standard_units = context['standard_units'] + assert standard_units.primary_units.linear.suppress_trailing_zeros is True + + def test_suppress_leading_zeros(self): + """Test leading zeros suppression.""" + doc = ezdxf.new('R2010') + dimstyle = doc.dimstyles.get('Standard') + dimstyle.dxf.dimtzin = 4 # Bit 2: suppress leading zeros + + _, _, context = convert_header(doc.header, doc) + + standard_units = context['standard_units'] + assert standard_units.primary_units.linear.suppress_leading_zeros is True + + +class TestEdgeCases: + """Test edge cases and error handling.""" + + def test_missing_dimstyle(self): + """Test handling when Standard dimstyle doesn't exist.""" + doc = ezdxf.new('R2010') + # Remove Standard dimstyle + if 'Standard' in doc.dimstyles: + doc.dimstyles.remove('Standard') + + # Should not crash, should use defaults + global_state, local_state, context = convert_header(doc.header, doc) + + assert global_state is not None + assert local_state is not None + assert context is not None + + def test_various_insert_units(self): + """Test conversion of various INSUNITS values.""" + test_cases = [ + (1, "in"), # Inches + (2, "ft"), # Feet + (4, "mm"), # Millimeters + (5, "cm"), # Centimeters + (6, "m"), # Meters + ] + + for insunit_value, expected_scope in test_cases: + doc = ezdxf.new('R2010') + doc.header['$INSUNITS'] = insunit_value + + global_state, local_state, _ = convert_header(doc.header, doc) + + assert global_state.main_scope == expected_scope, \ + f"INSUNITS {insunit_value} should map to {expected_scope}" + assert local_state.scope == expected_scope + + def test_custom_text_style_with_font(self): + """Test conversion with custom text style that has font properties.""" + doc = ezdxf.new('R2010') + + # Create custom text style + if 'CustomStyle' not in doc.styles: + text_style = doc.styles.new('CustomStyle') + text_style.dxf.font = 'Courier New' + text_style.dxf.height = 5.0 + + doc.header['$TEXTSTYLE'] = 'CustomStyle' + + _, _, context = convert_header(doc.header, doc) + + # Font properties are in conversion context + assert context['font_family'] == 'Courier New' + assert context['font_size'] == 5.0 + + +class TestIntegration: + """Integration tests for complete header conversion.""" + + def test_full_header_conversion(self): + """Test complete header conversion with all settings.""" + doc = ezdxf.new('R2010') + header = doc.header + + # Configure all header variables + header['$INSUNITS'] = 6 # Meters + header['$LTSCALE'] = 3.0 + header['$MEASUREMENT'] = 1 # Metric + header['$FILLMODE'] = 1 # Fill on + header['$TEXTSTYLE'] = 'Standard' + header['$CLAYER'] = 'Dimensions' + header['$DIMSTYLE'] = 'ISO-25' # Use valid dimstyle for R2010 + # Note: $MLEADERSTYLE not supported in R2010 header + # Note: $CANNOSCALE not supported in R2010 header + header['$CELTSCALE'] = 2.0 + header['$LUNITS'] = 3 # Engineering + header['$AUNITS'] = 1 # Degrees/Minutes/Seconds + + # Configure dimstyle + dimstyle = doc.dimstyles.get('Standard') + dimstyle.dxf.dimtdec = 3 + dimstyle.dxf.dimtzin = 5 # Bits 0 and 2 + dimstyle.dxf.dimdsep = 46 # Dot separator + + # Convert + global_state, local_state, context = convert_header(header, doc) + + # Verify all conversions + assert global_state.main_scope == "m" + assert global_state.dash_spacing_scale == 3.0 + # Note: use_annotative_scaling is False in R2010 because $CANNOSCALE is not supported + assert global_state.use_annotative_scaling is False + + assert local_state.scope == "m" + assert local_state.outline_mode_enabled is False + + assert context['current_layer'] == 'Dimensions' + assert context['current_dimstyle'] == 'ISO-25' + assert context['current_mleaderstyle'] == 'Standard' # Default value + assert context['celtscale'] == 2.0 + + assert context['standard_units'] is not None + assert context['standard_units'].primary_units.linear.precision == 3 + assert context['standard_units'].primary_units.linear.format == DIMENSION_UNITS_FORMAT.ENGINEERING + assert context['standard_units'].primary_units.angular.format == ANGULAR_UNITS_FORMAT.DEGREES_MINUTES_SECONDS diff --git a/packages/ducdxf/src/tests/src/test_layers.py b/packages/ducdxf/src/tests/src/test_layers.py new file mode 100644 index 00000000..ad9a51c2 --- /dev/null +++ b/packages/ducdxf/src/tests/src/test_layers.py @@ -0,0 +1,369 @@ +""" +Test suite for DXF to DUC layer conversion. + +Tests cover: +- Default layer (layer 0) +- Custom layers with various properties +- Layer colors (ACI and RGB) +- Layer state flags (on/off, frozen/thawed, locked/unlocked) +- Plot flags +- Transparency +- Linetypes and lineweights +""" +import pytest +import ezdxf +import tempfile +import os +from ducxf.dxf_to_duc import ( + convert_layers, + linetype_to_dash_pattern, + lineweight_to_width, + get_hex_from_aci +) + + +class TestLineTypeConversion: + """Test linetype name to dash pattern conversion.""" + + def test_continuous_linetype(self): + """Continuous linetype should return empty dash pattern.""" + assert linetype_to_dash_pattern('CONTINUOUS') == [] + assert linetype_to_dash_pattern('continuous') == [] + assert linetype_to_dash_pattern('BYLAYER') == [] + assert linetype_to_dash_pattern('BYBLOCK') == [] + + def test_dashed_linetype(self): + """Dashed linetype should return dash pattern.""" + pattern = linetype_to_dash_pattern('DASHED') + assert len(pattern) == 2 + assert pattern[0] > 0 # dash length + assert pattern[1] > 0 # gap length + + def test_dashdot_linetype(self): + """Dash-dot linetype should return 4-element pattern.""" + pattern = linetype_to_dash_pattern('DASHDOT') + assert len(pattern) == 4 + + def test_dot_linetype(self): + """Dot linetype should return short dash pattern.""" + pattern = linetype_to_dash_pattern('DOT') + assert len(pattern) == 2 + assert pattern[0] < 1.0 # very short dash + + def test_center_linetype(self): + """Center linetype should return pattern for long-short-long.""" + pattern = linetype_to_dash_pattern('CENTER') + assert len(pattern) == 4 + + def test_unknown_linetype(self): + """Unknown linetype should default to continuous (empty).""" + assert linetype_to_dash_pattern('UNKNOWNTYPE') == [] + + def test_case_insensitive(self): + """Linetype matching should be case insensitive.""" + assert linetype_to_dash_pattern('dashed') == linetype_to_dash_pattern('DASHED') + assert linetype_to_dash_pattern('DoT') == linetype_to_dash_pattern('DOT') + + +class TestLineweightConversion: + """Test DXF lineweight to DUC stroke width conversion.""" + + def test_positive_lineweight(self): + """Positive lineweights should convert from 1/100mm to mm.""" + assert lineweight_to_width(25) == 0.25 # 0.25mm + assert lineweight_to_width(50) == 0.50 # 0.50mm + assert lineweight_to_width(100) == 1.0 # 1.0mm + assert lineweight_to_width(13) == 0.13 # 0.13mm + + def test_bylayer_lineweight(self): + """BYLAYER lineweight (-1) should return None.""" + assert lineweight_to_width(-1) is None + + def test_byblock_lineweight(self): + """BYBLOCK lineweight (-2) should return None.""" + assert lineweight_to_width(-2) is None + + def test_default_lineweight(self): + """DEFAULT lineweight (-3) should return None.""" + assert lineweight_to_width(-3) is None + + +class TestLayerConversion: + """Test DXF layer table to DUC layers conversion.""" + + def test_default_layer(self): + """Layer 0 should always exist with default properties.""" + doc = ezdxf.new('R2010') + layers = convert_layers(doc) + + # Find layer 0 + layer_0 = next((l for l in layers if l.id == '0'), None) + assert layer_0 is not None + assert layer_0.stack_base.label == '0' + assert layer_0.stack_base.is_visible is True + assert layer_0.stack_base.locked is False + + def test_custom_layer_basic(self): + """Custom layer should be converted with basic properties.""" + doc = ezdxf.new('R2010') + doc.layers.add('MyLayer', color=1) # Red + + layers = convert_layers(doc) + my_layer = next((l for l in layers if l.id == 'MyLayer'), None) + + assert my_layer is not None + assert my_layer.stack_base.label == 'MyLayer' + assert my_layer.stack_base.is_visible is True + + def test_layer_color_aci(self): + """Layer color should be converted from ACI to hex.""" + doc = ezdxf.new('R2010') + doc.layers.add('RedLayer', color=1) # ACI 1 = Red + doc.layers.add('YellowLayer', color=2) # ACI 2 = Yellow + doc.layers.add('GreenLayer', color=3) # ACI 3 = Green + + layers = convert_layers(doc) + + red_layer = next((l for l in layers if l.id == 'RedLayer'), None) + assert red_layer.overrides.stroke.content.src == get_hex_from_aci(1) + + yellow_layer = next((l for l in layers if l.id == 'YellowLayer'), None) + assert yellow_layer.overrides.stroke.content.src == get_hex_from_aci(2) + + green_layer = next((l for l in layers if l.id == 'GreenLayer'), None) + assert green_layer.overrides.stroke.content.src == get_hex_from_aci(3) + + def test_layer_color_rgb(self): + """Layer with RGB color should be converted to hex.""" + doc = ezdxf.new('R2010') + layer = doc.layers.add('RGBLayer') + layer.rgb = (255, 128, 64) # Custom RGB color + + layers = convert_layers(doc) + rgb_layer = next((l for l in layers if l.id == 'RGBLayer'), None) + + assert rgb_layer.overrides.stroke.content.src == "#FF8040" + + def test_layer_off(self): + """Layer that is off should not be visible.""" + doc = ezdxf.new('R2010') + layer = doc.layers.add('OffLayer') + layer.off() + + layers = convert_layers(doc) + off_layer = next((l for l in layers if l.id == 'OffLayer'), None) + + assert off_layer.stack_base.is_visible is False + + def test_layer_frozen(self): + """Frozen layer should not be visible.""" + doc = ezdxf.new('R2010') + layer = doc.layers.add('FrozenLayer') + layer.freeze() + + layers = convert_layers(doc) + frozen_layer = next((l for l in layers if l.id == 'FrozenLayer'), None) + + assert frozen_layer.stack_base.is_visible is False + + def test_layer_locked(self): + """Locked layer should have locked flag set.""" + doc = ezdxf.new('R2010') + layer = doc.layers.add('LockedLayer') + layer.lock() + + layers = convert_layers(doc) + locked_layer = next((l for l in layers if l.id == 'LockedLayer'), None) + + assert locked_layer.stack_base.locked is True + + def test_layer_unlocked(self): + """Unlocked layer should have locked flag false.""" + doc = ezdxf.new('R2010') + layer = doc.layers.add('UnlockedLayer') + layer.unlock() + + layers = convert_layers(doc) + unlocked_layer = next((l for l in layers if l.id == 'UnlockedLayer'), None) + + assert unlocked_layer.stack_base.locked is False + + def test_layer_plot_flag_on(self): + """Layer with plot flag should have is_plot True.""" + doc = ezdxf.new('R2010') + layer = doc.layers.add('PlotLayer') + layer.dxf.plot = 1 # Plot enabled + + layers = convert_layers(doc) + plot_layer = next((l for l in layers if l.id == 'PlotLayer'), None) + + assert plot_layer.stack_base.is_plot is True + + def test_layer_plot_flag_off(self): + """Layer with no-plot flag should have is_plot False.""" + doc = ezdxf.new('R2010') + layer = doc.layers.add('NoPlotLayer') + layer.dxf.plot = 0 # Plot disabled + + layers = convert_layers(doc) + no_plot_layer = next((l for l in layers if l.id == 'NoPlotLayer'), None) + + assert no_plot_layer.stack_base.is_plot is False + + def test_layer_transparency(self): + """Layer transparency should be converted to opacity.""" + doc = ezdxf.new('R2010') + layer = doc.layers.add('TransparentLayer') + layer.transparency = 0.5 # 50% transparent + + layers = convert_layers(doc) + transparent_layer = next((l for l in layers if l.id == 'TransparentLayer'), None) + + # Opacity should be 1.0 - transparency (use approx due to ezdxf integer storage) + assert transparent_layer.stack_base.styles.opacity == pytest.approx(0.5, abs=0.01) + + def test_layer_opaque(self): + """Layer with no transparency should have full opacity.""" + doc = ezdxf.new('R2010') + layer = doc.layers.add('OpaqueLayer') + layer.transparency = 0.0 # Fully opaque + + layers = convert_layers(doc) + opaque_layer = next((l for l in layers if l.id == 'OpaqueLayer'), None) + + assert opaque_layer.stack_base.styles.opacity == 1.0 + + def test_multiple_layers(self): + """Multiple layers should all be converted.""" + doc = ezdxf.new('R2010') + doc.layers.add('Layer1', color=1) + doc.layers.add('Layer2', color=2) + doc.layers.add('Layer3', color=3) + + layers = convert_layers(doc) + + # Should have layer 0 (default) + 3 custom layers + assert len(layers) >= 4 + + layer_ids = [l.id for l in layers] + assert '0' in layer_ids + assert 'Layer1' in layer_ids + assert 'Layer2' in layer_ids + assert 'Layer3' in layer_ids + + def test_layer_linetype(self): + """Layer linetype should be stored (for future element use).""" + doc = ezdxf.new('R2010', setup=True) # setup=True loads standard linetypes + layer = doc.layers.add('DashedLayer') + layer.dxf.linetype = 'DASHED' + + # Note: linetype is converted via helper function + dash_pattern = linetype_to_dash_pattern('DASHED') + assert len(dash_pattern) > 0 + + def test_layer_lineweight(self): + """Layer lineweight should be converted to stroke width.""" + doc = ezdxf.new('R2010') + layer = doc.layers.add('ThickLayer') + layer.dxf.lineweight = 50 # 0.50mm + + width = lineweight_to_width(50) + assert width == 0.50 + + def test_layer_combined_properties(self): + """Layer with multiple properties should convert all correctly.""" + doc = ezdxf.new('R2010') + layer = doc.layers.add('ComplexLayer', color=5) # Blue + layer.lock() + layer.transparency = 0.3 + layer.dxf.plot = 1 + layer.dxf.lineweight = 25 # 0.25mm + + layers = convert_layers(doc) + complex_layer = next((l for l in layers if l.id == 'ComplexLayer'), None) + + assert complex_layer is not None + assert complex_layer.stack_base.locked is True + assert complex_layer.stack_base.is_plot is True + assert complex_layer.stack_base.styles.opacity == pytest.approx(0.7, abs=0.01) # 1.0 - 0.3 + assert complex_layer.overrides.stroke.content.src == get_hex_from_aci(5) + + +class TestLayerEdgeCases: + """Test edge cases and error handling.""" + + def test_empty_layer_table(self): + """Document with only default layer should work.""" + doc = ezdxf.new('R2010') + layers = convert_layers(doc) + + # Should at least have layer 0 + assert len(layers) >= 1 + + def test_layer_missing_optional_properties(self): + """Layer without optional properties should use defaults.""" + doc = ezdxf.new('R2010') + layer = doc.layers.add('MinimalLayer') + + # Don't set any optional properties + layers = convert_layers(doc) + minimal_layer = next((l for l in layers if l.id == 'MinimalLayer'), None) + + assert minimal_layer is not None + # Should have reasonable defaults + assert minimal_layer.stack_base.is_visible is True + assert minimal_layer.stack_base.locked is False + + def test_layer_special_characters_name(self): + """Layer with special characters in name should be handled.""" + doc = ezdxf.new('R2010') + special_name = 'Layer-With_Special.Chars' + doc.layers.add(special_name) + + layers = convert_layers(doc) + special_layer = next((l for l in layers if l.id == special_name), None) + + assert special_layer is not None + assert special_layer.stack_base.label == special_name + + +class TestEndToEndLayerConversion: + """Integration tests for layer conversion in full DXF to DUC workflow.""" + + def test_layer_conversion_in_duc_file(self): + """Layers should be properly included in final DUC file.""" + from ducxf.dxf_to_duc import convert_dxf_to_duc + + # Create a test DXF file + doc = ezdxf.new('R2010') + doc.layers.add('TestLayer1', color=1) + doc.layers.add('TestLayer2', color=2) + + # Add some entities on these layers + msp = doc.modelspace() + msp.add_line((0, 0), (10, 10), dxfattribs={'layer': 'TestLayer1'}) + msp.add_circle((5, 5), radius=3, dxfattribs={'layer': 'TestLayer2'}) + + with tempfile.NamedTemporaryFile(mode='w', suffix='.dxf', delete=False) as dxf_file: + dxf_path = dxf_file.name + + with tempfile.NamedTemporaryFile(mode='w', suffix='.duc', delete=False) as duc_file: + duc_path = duc_file.name + + try: + doc.saveas(dxf_path) + convert_dxf_to_duc(dxf_path, duc_path) + + # Verify the DUC file was created + assert os.path.exists(duc_path) + assert os.path.getsize(duc_path) > 0 + finally: + # Cleanup + if os.path.exists(dxf_path): + os.unlink(dxf_path) + if os.path.exists(duc_path): + os.unlink(duc_path) + + +if __name__ == '__main__': + pytest.main([__file__, '-v']) diff --git a/packages/ducdxf/src/tests/src/test_layers_simple.py b/packages/ducdxf/src/tests/src/test_layers_simple.py new file mode 100644 index 00000000..2e61795d --- /dev/null +++ b/packages/ducdxf/src/tests/src/test_layers_simple.py @@ -0,0 +1,111 @@ +#!/usr/bin/env python3 +""" +Simple test to verify layer conversion works without full test infrastructure. +""" +import sys +import os + +# Add src to path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', '..')) + +import ezdxf +from ducxf.dxf_to_duc import ( + convert_layers, + linetype_to_dash_pattern, + lineweight_to_width, + get_hex_from_aci +) + +def test_linetype_conversion(): + """Test linetype to dash pattern conversion.""" + print("Testing linetype conversion...") + + # Continuous + assert linetype_to_dash_pattern('CONTINUOUS') == [] + print(" ✓ CONTINUOUS → []") + + # Dashed + pattern = linetype_to_dash_pattern('DASHED') + assert len(pattern) == 2 + print(f" ✓ DASHED → {pattern}") + + # Case insensitive + assert linetype_to_dash_pattern('dashed') == linetype_to_dash_pattern('DASHED') + print(" ✓ Case insensitive") + + print("✅ Linetype conversion tests passed!\n") + + +def test_lineweight_conversion(): + """Test lineweight conversion.""" + print("Testing lineweight conversion...") + + assert lineweight_to_width(25) == 0.25 + print(" ✓ 25 → 0.25mm") + + assert lineweight_to_width(100) == 1.0 + print(" ✓ 100 → 1.0mm") + + assert lineweight_to_width(-1) is None + print(" ✓ -1 (BYLAYER) → None") + + print("✅ Lineweight conversion tests passed!\n") + + +def test_layer_conversion(): + """Test full layer conversion.""" + print("Testing layer conversion...") + + # Create a test DXF document + doc = ezdxf.new('R2010') + + # Add some test layers + doc.layers.add('TestLayer1', color=1) # Red + doc.layers.add('TestLayer2', color=2) # Yellow + + layer = doc.layers.add('ComplexLayer', color=3) # Green + layer.lock() + layer.dxf.plot = 1 + layer.transparency = 0.5 + + # Convert layers + duc_layers = convert_layers(doc) + + print(f" Converted {len(duc_layers)} layers") + + # Check layer 0 exists + layer_0 = next((l for l in duc_layers if l.id == '0'), None) + assert layer_0 is not None + print(" ✓ Layer 0 exists") + + # Check TestLayer1 + test_layer_1 = next((l for l in duc_layers if l.id == 'TestLayer1'), None) + assert test_layer_1 is not None + assert test_layer_1.stack_base.label == 'TestLayer1' + print(" ✓ TestLayer1 converted") + + # Check ComplexLayer + complex_layer = next((l for l in duc_layers if l.id == 'ComplexLayer'), None) + assert complex_layer is not None + assert complex_layer.stack_base.locked is True + assert complex_layer.stack_base.is_plot is True + # Use approx comparison due to ezdxf integer storage (0-255 internally) + assert abs(complex_layer.stack_base.styles.opacity - 0.5) < 0.01 + print(" ✓ ComplexLayer with properties converted") + + print("✅ Layer conversion tests passed!\n") + + +if __name__ == '__main__': + try: + test_linetype_conversion() + test_lineweight_conversion() + test_layer_conversion() + print("=" * 50) + print("🎉 ALL TESTS PASSED!") + print("=" * 50) + except Exception as e: + print(f"\n❌ TEST FAILED: {e}") + import traceback + traceback.print_exc() + sys.exit(1) diff --git a/packages/ducdxf/src/tests/src/test_linetype_conversion.py b/packages/ducdxf/src/tests/src/test_linetype_conversion.py new file mode 100644 index 00000000..9f3ab992 --- /dev/null +++ b/packages/ducdxf/src/tests/src/test_linetype_conversion.py @@ -0,0 +1,169 @@ +""" +Test script for DXF linetype to DUC conversion. + +This script creates a simple DXF file with various linetypes, +converts it to DUC, and verifies the conversion. +""" + +import os +import sys +import ezdxf +from pathlib import Path + +# Add parent directory to path for imports +sys.path.insert(0, str(Path(__file__).parent.parent / "src")) + +from ducxf.dxf_to_duc import convert_dxf_to_duc +from ducxf.common import LinetypeConverter +import ducpy as duc + + +def create_test_dxf_with_linetypes(output_path: str): + """ + Create a test DXF file with various linetype definitions. + """ + print("Creating test DXF file with linetypes...") + + doc = ezdxf.new("R2018") + msp = doc.modelspace() + + # Add custom linetypes + linetypes_to_add = [ + ("CUSTOM_DASHED", "Custom Dashed ---- ---- ---- ----", [0.5, -0.25]), + ("CUSTOM_DASHDOT", "Custom DashDot ---- . ---- .", [0.5, -0.1, 0.0, -0.1]), + ("CUSTOM_COMPLEX", "Complex with spacing ---- ---- ----", [1.0, -0.5]), + ] + + for name, desc, pattern in linetypes_to_add: + if name not in doc.linetypes: + doc.linetypes.add( + name=name, + pattern=pattern, + description=desc, + ) + print(f" Added linetype: {name}") + + # Create some lines using different linetypes + y_offset = 0 + for name, _, _ in linetypes_to_add: + msp.add_line((0, y_offset), (10, y_offset), dxfattribs={"linetype": name}) + y_offset += 2 + + # Also use some standard linetypes + if "DASHED" in doc.linetypes: + msp.add_line((0, y_offset), (10, y_offset), dxfattribs={"linetype": "DASHED"}) + y_offset += 2 + + doc.saveas(output_path) + print(f"✅ Created test DXF: {output_path}") + return output_path + + +def test_linetype_converter(): + """Test the LinetypeConverter utility functions.""" + print("\n" + "="*60) + print("Testing LinetypeConverter...") + print("="*60) + + # Test simple pattern + simple_pattern = [0.5, -0.25] + parsed = LinetypeConverter.parse_dxf_pattern(simple_pattern) + print(f"\nSimple pattern {simple_pattern}:") + print(f" Dash pattern: {parsed['dash_pattern']}") + print(f" Is complex: {parsed['is_complex']}") + assert parsed['dash_pattern'] == [0.5, 0.25], "Simple pattern conversion failed" + assert not parsed['is_complex'], "Simple pattern incorrectly marked as complex" + print(" ✅ Simple pattern test passed") + + # Test complex pattern (this would be from a real DXF complex linetype) + # Note: In real DXF, complex patterns would be strings, but we'll test our parser + complex_str = '["GAS",STANDARD,S=.1,U=0.0,X=-0.1,Y=-.05]' + parsed_complex = LinetypeConverter._parse_complex_element(complex_str) + print(f"\nComplex element '{complex_str}':") + print(f" Parsed: {parsed_complex}") + assert parsed_complex['type'] == 'text', "Complex element type not recognized" + assert parsed_complex['text'] == 'GAS', "Text not parsed correctly" + print(" ✅ Complex element test passed") + + # Test pattern description + desc = LinetypeConverter.pattern_to_description("TEST", [0.5, -0.25]) + print(f"\nPattern description: '{desc}'") + assert "TEST" in desc, "Linetype name not in description" + print(" ✅ Description test passed") + + +def test_conversion(): + """Test the full DXF to DUC conversion with linetypes.""" + print("\n" + "="*60) + print("Testing DXF to DUC Conversion...") + print("="*60) + + # Create test files in temp directory + test_dir = Path(__file__).parent / "temp" + test_dir.mkdir(exist_ok=True) + + dxf_path = test_dir / "test_linetypes.dxf" + duc_path = test_dir / "test_linetypes.duc" + + # Create test DXF + create_test_dxf_with_linetypes(str(dxf_path)) + + # Convert to DUC + print(f"\n{'='*60}") + print("Starting conversion...") + print("="*60) + convert_dxf_to_duc(str(dxf_path), str(duc_path)) + + # Verify DUC file was created + assert duc_path.exists(), "DUC file was not created" + print(f"\n✅ DUC file created: {duc_path}") + print(f" Size: {duc_path.stat().st_size} bytes") + + # Read back and verify + print("\nReading DUC file back...") + duc_data = duc.read_duc_file(str(duc_path)) + + print(f" Standards: {len(duc_data.standards) if duc_data.standards else 0}") + if duc_data.standards and len(duc_data.standards) > 0: + standard = duc_data.standards[0] + print(f" Standard name: {standard.identifier.name}") + if standard.styles and standard.styles.common_styles: + print(f" Common styles (linetypes): {len(standard.styles.common_styles)}") + for i, style in enumerate(standard.styles.common_styles[:5]): # Show first 5 + print(f" {i+1}. {style.id.name}") + if style.style.stroke and style.style.stroke.style: + dash = style.style.stroke.style.dash + print(f" Dash pattern: {list(dash) if dash else '[]'}") + + print("\n✅ Conversion test completed successfully!") + + +def main(): + """Run all tests.""" + print("="*60) + print("DXF Linetype to DUC Conversion - Test Suite") + print("="*60) + + try: + # Test 1: Converter utilities + test_linetype_converter() + + # Test 2: Full conversion + test_conversion() + + print("\n" + "="*60) + print("🎉 ALL TESTS PASSED!") + print("="*60) + + except AssertionError as e: + print(f"\n❌ Test failed: {e}") + sys.exit(1) + except Exception as e: + print(f"\n❌ Unexpected error: {e}") + import traceback + traceback.print_exc() + sys.exit(1) + + +if __name__ == "__main__": + main() diff --git a/packages/ducdxf/src/tests/src/test_text_style_conversion.py b/packages/ducdxf/src/tests/src/test_text_style_conversion.py new file mode 100644 index 00000000..a85c21f5 --- /dev/null +++ b/packages/ducdxf/src/tests/src/test_text_style_conversion.py @@ -0,0 +1,289 @@ +""" +Test script for DXF text style (STYLE table) to DUC conversion. + +This script creates a simple DXF file with various text styles, +converts it to DUC, and verifies the conversion. +""" + +import os +import sys +import ezdxf +from pathlib import Path +import math + +# Add parent directory to path for imports +sys.path.insert(0, str(Path(__file__).parent.parent / "src")) + +from ducxf.dxf_to_duc import convert_dxf_to_duc +from ducxf.common import TextStyleConverter +import ducpy as duc + + +def create_test_dxf_with_text_styles(output_path: str): + """ + Create a test DXF file with various text style definitions. + """ + print("Creating test DXF file with text styles...") + + doc = ezdxf.new("R2018") + msp = doc.modelspace() + + # Add custom text styles + # Note: ezdxf uses the add_text_style or new method for R2018+ + + # Style 1: Standard style with fixed height + if "TITLE" not in doc.styles: + doc.styles.add( + name="TITLE", + font="arial.ttf", + dxfattribs={ + "height": 24.0, # Fixed height + "width": 1.0, + "oblique": 0.0, + } + ) + print(" Added text style: TITLE") + + # Style 2: Italic style with oblique angle + if "ITALIC_TEXT" not in doc.styles: + doc.styles.add( + name="ITALIC_TEXT", + font="times.ttf", + dxfattribs={ + "height": 12.0, + "width": 1.0, + "oblique": 15.0, # 15 degree slant + } + ) + print(" Added text style: ITALIC_TEXT") + + # Style 3: Condensed text with width factor + if "CONDENSED" not in doc.styles: + doc.styles.add( + name="CONDENSED", + font="arial.ttf", + dxfattribs={ + "height": 0.0, # Variable height + "width": 0.7, # 70% width + "oblique": 0.0, + } + ) + print(" Added text style: CONDENSED") + + # Style 4: Backwards text (mirrored) + if "BACKWARDS" not in doc.styles: + doc.styles.add( + name="BACKWARDS", + font="arial.ttf", + dxfattribs={ + "height": 10.0, + "width": 1.0, + "oblique": 0.0, + "flags": 4, # Bit 2: backwards + } + ) + print(" Added text style: BACKWARDS") + + # Style 5: Upside-down text + if "UPSIDEDOWN" not in doc.styles: + doc.styles.add( + name="UPSIDEDOWN", + font="arial.ttf", + dxfattribs={ + "height": 10.0, + "width": 1.0, + "oblique": 0.0, + "flags": 16, # Bit 4: upside-down + } + ) + print(" Added text style: UPSIDEDOWN") + + # Style 6: SHX font (AutoCAD font) + if "ROMANS" not in doc.styles: + doc.styles.add( + name="ROMANS", + font="romans.shx", + dxfattribs={ + "height": 0.0, # Variable + "width": 1.0, + "oblique": 0.0, + } + ) + print(" Added text style: ROMANS") + + # Create some text entities using different styles + y_offset = 0 + styles_to_use = ["TITLE", "ITALIC_TEXT", "CONDENSED", "BACKWARDS", "ROMANS"] + for style_name in styles_to_use: + if style_name in doc.styles: + dxfattribs = {"style": style_name} + if doc.styles.get(style_name).dxf.height == 0: + dxfattribs["height"] = 10.0 + msp.add_text( + f"Sample text in {style_name}", + dxfattribs=dxfattribs, + ).set_placement((0, y_offset)) + y_offset += 15 + + doc.saveas(output_path) + print(f"✅ Created test DXF: {output_path}") + return output_path + + +def test_text_style_converter(): + """Test the TextStyleConverter utility functions.""" + print("\n" + "="*60) + print("Testing TextStyleConverter...") + print("="*60) + + # Test font name parsing + test_fonts = [ + ("arial.ttf", "Arial"), + ("romans.shx", "Times New Roman"), + ("txt.shx", "Arial"), + ("times.ttf", "Times New Roman"), + ("monotxt.shx", "Courier New"), + ("simplex.shx", "Arial"), + ] + + print("\nFont name mapping tests:") + for dxf_font, expected_family in test_fonts: + result = TextStyleConverter.parse_font_name(dxf_font) + print(f" {dxf_font:20s} → {result:20s} ", end="") + assert result == expected_family, f"Expected {expected_family}, got {result}" + print("✅") + + # Test generation flags parsing + print("\nGeneration flags tests:") + + # Test backwards flag (bit 2 = 4) + flags = TextStyleConverter.parse_generation_flags(4) + assert flags['is_backwards'] == True, "Backwards flag not set" + assert flags['is_upside_down'] == False, "Upside-down should be False" + print(" Backwards flag (4): ✅") + + # Test upside-down flag (bit 4 = 16) + flags = TextStyleConverter.parse_generation_flags(16) + assert flags['is_backwards'] == False, "Backwards should be False" + assert flags['is_upside_down'] == True, "Upside-down flag not set" + print(" Upside-down flag (16): ✅") + + # Test vertical flag (bit 5 = 32) + flags = TextStyleConverter.parse_generation_flags(32) + assert flags['is_vertical'] == True, "Vertical flag not set" + print(" Vertical flag (32): ✅") + + # Test combined flags + flags = TextStyleConverter.parse_generation_flags(20) # 4 + 16 + assert flags['is_backwards'] == True, "Backwards should be True" + assert flags['is_upside_down'] == True, "Upside-down should be True" + print(" Combined flags (20): ✅") + + # Test angle conversion + print("\nAngle conversion tests:") + test_angles = [ + (0, 0), + (90, math.pi / 2), + (180, math.pi), + (15, math.radians(15)), + ] + + for degrees, expected_radians in test_angles: + result = TextStyleConverter.degrees_to_radians(degrees) + print(f" {degrees:3d}° → {result:.4f} rad ", end="") + assert abs(result - expected_radians) < 0.0001, f"Expected {expected_radians}, got {result}" + print("✅") + + print("\n✅ All TextStyleConverter tests passed!") + + +def test_conversion(): + """Test the full DXF to DUC conversion with text styles.""" + print("\n" + "="*60) + print("Testing DXF to DUC Conversion...") + print("="*60) + + # Create test files in temp directory + test_dir = Path(__file__).parent / "temp" + test_dir.mkdir(exist_ok=True) + + dxf_path = test_dir / "test_text_styles.dxf" + duc_path = test_dir / "test_text_styles.duc" + + # Create test DXF + create_test_dxf_with_text_styles(str(dxf_path)) + + # Convert to DUC + print(f"\n{'='*60}") + print("Starting conversion...") + print("="*60) + convert_dxf_to_duc(str(dxf_path), str(duc_path)) + + # Verify DUC file was created + assert duc_path.exists(), "DUC file was not created" + print(f"\n✅ DUC file created: {duc_path}") + print(f" Size: {duc_path.stat().st_size} bytes") + + # Read back and verify + print("\nReading DUC file back...") + duc_data = duc.read_duc_file(str(duc_path)) + + print(f" Standards: {len(duc_data.standards) if duc_data.standards else 0}") + if duc_data.standards and len(duc_data.standards) > 0: + standard = duc_data.standards[0] + print(f" Standard name: {standard.identifier.name}") + if standard.styles: + if standard.styles.text_styles: + print(f" Text styles: {len(standard.styles.text_styles)}") + for i, style in enumerate(standard.styles.text_styles[:10]): # Show first 10 + print(f" {i+1}. {style.id.name}") + if style.style: + s = style.style + print(f" Font: {s.font_family}, Size: {s.font_size}") + if s.width_factor != 1.0: + print(f" Width factor: {s.width_factor}") + if s.oblique_angle != 0: + print(f" Oblique: {math.degrees(s.oblique_angle):.1f}°") + if s.is_backwards or s.is_upside_down: + flags = [] + if s.is_backwards: + flags.append("backwards") + if s.is_upside_down: + flags.append("upside-down") + print(f" Flags: {', '.join(flags)}") + + if standard.styles.common_styles: + print(f" Common styles (linetypes): {len(standard.styles.common_styles)}") + + print("\n✅ Conversion test completed successfully!") + + +def main(): + """Run all tests.""" + print("="*60) + print("DXF Text Style to DUC Conversion - Test Suite") + print("="*60) + + try: + # Test 1: Converter utilities + test_text_style_converter() + + # Test 2: Full conversion + test_conversion() + + print("\n" + "="*60) + print("🎉 ALL TESTS PASSED!") + print("="*60) + + except AssertionError as e: + print(f"\n❌ Test failed: {e}") + sys.exit(1) + except Exception as e: + print(f"\n❌ Unexpected error: {e}") + import traceback + traceback.print_exc() + sys.exit(1) + + +if __name__ == "__main__": + main() diff --git a/packages/ducdxf/tests/.gitignore b/packages/ducdxf/tests/.gitignore deleted file mode 100644 index c8bc68a6..00000000 --- a/packages/ducdxf/tests/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -inputs -output diff --git a/packages/ducdxf/tests/src/test_example.py b/packages/ducdxf/tests/src/test_example.py deleted file mode 100644 index 6caba54c..00000000 --- a/packages/ducdxf/tests/src/test_example.py +++ /dev/null @@ -1,5 +0,0 @@ -""" -Test moving elements randomly in a DUC file. -""" - -import pytest diff --git a/packages/ducdxf/uv.lock b/packages/ducdxf/uv.lock index 2b447c88..d40405d4 100644 --- a/packages/ducdxf/uv.lock +++ b/packages/ducdxf/uv.lock @@ -1,5 +1,5 @@ version = 1 -revision = 1 +revision = 3 requires-python = ">=3.10" resolution-markers = [ "python_full_version >= '3.12'", @@ -7,34 +7,46 @@ resolution-markers = [ "python_full_version < '3.11'", ] +[[package]] +name = "accessible-pygments" +version = "0.0.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bc/c1/bbac6a50d02774f91572938964c582fff4270eee73ab822a4aeea4d8b11b/accessible_pygments-0.0.5.tar.gz", hash = "sha256:40918d3e6a2b619ad424cb91e556bd3bd8865443d9f22f1dcdf79e33c8046872", size = 1377899, upload-time = "2024-05-10T11:23:10.216Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8d/3f/95338030883d8c8b91223b4e21744b04d11b161a3ef117295d8241f50ab4/accessible_pygments-0.0.5-py3-none-any.whl", hash = "sha256:88ae3211e68a1d0b011504b2ffc1691feafce124b845bd072ab6f9f66f34d4b7", size = 1395903, upload-time = "2024-05-10T11:23:08.421Z" }, +] + [[package]] name = "alabaster" version = "1.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a6/f8/d9c74d0daf3f742840fd818d69cfae176fa332022fd44e3469487d5a9420/alabaster-1.0.0.tar.gz", hash = "sha256:c00dca57bca26fa62a6d7d0a9fcce65f3e026e9bfe33e9c538fd3fbb2144fd9e", size = 24210 } +sdist = { url = "https://files.pythonhosted.org/packages/a6/f8/d9c74d0daf3f742840fd818d69cfae176fa332022fd44e3469487d5a9420/alabaster-1.0.0.tar.gz", hash = "sha256:c00dca57bca26fa62a6d7d0a9fcce65f3e026e9bfe33e9c538fd3fbb2144fd9e", size = 24210, upload-time = "2024-07-26T18:15:03.762Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl", hash = "sha256:fc6786402dc3fcb2de3cabd5fe455a2db534b371124f1f21de8731783dec828b", size = 13929 }, + { url = "https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl", hash = "sha256:fc6786402dc3fcb2de3cabd5fe455a2db534b371124f1f21de8731783dec828b", size = 13929, upload-time = "2024-07-26T18:15:02.05Z" }, ] [[package]] name = "astroid" -version = "3.3.9" +version = "3.3.11" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/39/33/536530122a22a7504b159bccaf30a1f76aa19d23028bd8b5009eb9b2efea/astroid-3.3.9.tar.gz", hash = "sha256:622cc8e3048684aa42c820d9d218978021c3c3d174fb03a9f0d615921744f550", size = 398731 } +sdist = { url = "https://files.pythonhosted.org/packages/18/74/dfb75f9ccd592bbedb175d4a32fc643cf569d7c218508bfbd6ea7ef9c091/astroid-3.3.11.tar.gz", hash = "sha256:1e5a5011af2920c7c67a53f65d536d65bfa7116feeaf2354d8b94f29573bb0ce", size = 400439, upload-time = "2025-07-13T18:04:23.177Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/de/80/c749efbd8eef5ea77c7d6f1956e8fbfb51963b7f93ef79647afd4d9886e3/astroid-3.3.9-py3-none-any.whl", hash = "sha256:d05bfd0acba96a7bd43e222828b7d9bc1e138aaeb0649707908d3702a9831248", size = 275339 }, + { url = "https://files.pythonhosted.org/packages/af/0f/3b8fdc946b4d9cc8cc1e8af42c4e409468c84441b933d037e101b3d72d86/astroid-3.3.11-py3-none-any.whl", hash = "sha256:54c760ae8322ece1abd213057c4b5bba7c49818853fc901ef09719a60dbf9dec", size = 275612, upload-time = "2025-07-13T18:04:21.07Z" }, ] [[package]] name = "babel" version = "2.17.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7d/6b/d52e42361e1aa00709585ecc30b3f9684b3ab62530771402248b1b1d6240/babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d", size = 9951852 } +sdist = { url = "https://files.pythonhosted.org/packages/7d/6b/d52e42361e1aa00709585ecc30b3f9684b3ab62530771402248b1b1d6240/babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d", size = 9951852, upload-time = "2025-02-01T15:17:41.026Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2", size = 10182537 }, + { url = "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2", size = 10182537, upload-time = "2025-02-01T15:17:37.39Z" }, ] [[package]] @@ -45,115 +57,104 @@ dependencies = [ { name = "soupsieve" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d8/e4/0c4c39e18fd76d6a628d4dd8da40543d136ce2d1752bd6eeeab0791f4d6b/beautifulsoup4-4.13.4.tar.gz", hash = "sha256:dbb3c4e1ceae6aefebdaf2423247260cd062430a410e38c66f2baa50a8437195", size = 621067 } +sdist = { url = "https://files.pythonhosted.org/packages/d8/e4/0c4c39e18fd76d6a628d4dd8da40543d136ce2d1752bd6eeeab0791f4d6b/beautifulsoup4-4.13.4.tar.gz", hash = "sha256:dbb3c4e1ceae6aefebdaf2423247260cd062430a410e38c66f2baa50a8437195", size = 621067, upload-time = "2025-04-15T17:05:13.836Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/50/cd/30110dc0ffcf3b131156077b90e9f60ed75711223f306da4db08eff8403b/beautifulsoup4-4.13.4-py3-none-any.whl", hash = "sha256:9bbbb14bfde9d79f38b8cd5f8c7c85f4b8f2523190ebed90e950a8dea4cb1c4b", size = 187285 }, + { url = "https://files.pythonhosted.org/packages/50/cd/30110dc0ffcf3b131156077b90e9f60ed75711223f306da4db08eff8403b/beautifulsoup4-4.13.4-py3-none-any.whl", hash = "sha256:9bbbb14bfde9d79f38b8cd5f8c7c85f4b8f2523190ebed90e950a8dea4cb1c4b", size = 187285, upload-time = "2025-04-15T17:05:12.221Z" }, ] [[package]] name = "certifi" -version = "2025.1.31" +version = "2025.8.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1c/ab/c9f1e32b7b1bf505bf26f0ef697775960db7932abeb7b516de930ba2705f/certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651", size = 167577 } +sdist = { url = "https://files.pythonhosted.org/packages/dc/67/960ebe6bf230a96cda2e0abcf73af550ec4f090005363542f0765df162e0/certifi-2025.8.3.tar.gz", hash = "sha256:e564105f78ded564e3ae7c923924435e1daa7463faeab5bb932bc53ffae63407", size = 162386, upload-time = "2025-08-03T03:07:47.08Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe", size = 166393 }, + { url = "https://files.pythonhosted.org/packages/e5/48/1549795ba7742c948d2ad169c1c8cdbae65bc450d6cd753d124b17c8cd32/certifi-2025.8.3-py3-none-any.whl", hash = "sha256:f6c12493cfb1b06ba2ff328595af9350c65d6644968e5d3a2ffd78699af217a5", size = 161216, upload-time = "2025-08-03T03:07:45.777Z" }, ] [[package]] name = "charset-normalizer" -version = "3.4.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/16/b0/572805e227f01586461c80e0fd25d65a2115599cc9dad142fee4b747c357/charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3", size = 123188 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0d/58/5580c1716040bc89206c77d8f74418caf82ce519aae06450393ca73475d1/charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de", size = 198013 }, - { url = "https://files.pythonhosted.org/packages/d0/11/00341177ae71c6f5159a08168bcb98c6e6d196d372c94511f9f6c9afe0c6/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176", size = 141285 }, - { url = "https://files.pythonhosted.org/packages/01/09/11d684ea5819e5a8f5100fb0b38cf8d02b514746607934134d31233e02c8/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037", size = 151449 }, - { url = "https://files.pythonhosted.org/packages/08/06/9f5a12939db324d905dc1f70591ae7d7898d030d7662f0d426e2286f68c9/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f", size = 143892 }, - { url = "https://files.pythonhosted.org/packages/93/62/5e89cdfe04584cb7f4d36003ffa2936681b03ecc0754f8e969c2becb7e24/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a", size = 146123 }, - { url = "https://files.pythonhosted.org/packages/a9/ac/ab729a15c516da2ab70a05f8722ecfccc3f04ed7a18e45c75bbbaa347d61/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a", size = 147943 }, - { url = "https://files.pythonhosted.org/packages/03/d2/3f392f23f042615689456e9a274640c1d2e5dd1d52de36ab8f7955f8f050/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247", size = 142063 }, - { url = "https://files.pythonhosted.org/packages/f2/e3/e20aae5e1039a2cd9b08d9205f52142329f887f8cf70da3650326670bddf/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408", size = 150578 }, - { url = "https://files.pythonhosted.org/packages/8d/af/779ad72a4da0aed925e1139d458adc486e61076d7ecdcc09e610ea8678db/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb", size = 153629 }, - { url = "https://files.pythonhosted.org/packages/c2/b6/7aa450b278e7aa92cf7732140bfd8be21f5f29d5bf334ae987c945276639/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d", size = 150778 }, - { url = "https://files.pythonhosted.org/packages/39/f4/d9f4f712d0951dcbfd42920d3db81b00dd23b6ab520419626f4023334056/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807", size = 146453 }, - { url = "https://files.pythonhosted.org/packages/49/2b/999d0314e4ee0cff3cb83e6bc9aeddd397eeed693edb4facb901eb8fbb69/charset_normalizer-3.4.1-cp310-cp310-win32.whl", hash = "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f", size = 95479 }, - { url = "https://files.pythonhosted.org/packages/2d/ce/3cbed41cff67e455a386fb5e5dd8906cdda2ed92fbc6297921f2e4419309/charset_normalizer-3.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f", size = 102790 }, - { url = "https://files.pythonhosted.org/packages/72/80/41ef5d5a7935d2d3a773e3eaebf0a9350542f2cab4eac59a7a4741fbbbbe/charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125", size = 194995 }, - { url = "https://files.pythonhosted.org/packages/7a/28/0b9fefa7b8b080ec492110af6d88aa3dea91c464b17d53474b6e9ba5d2c5/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1", size = 139471 }, - { url = "https://files.pythonhosted.org/packages/71/64/d24ab1a997efb06402e3fc07317e94da358e2585165930d9d59ad45fcae2/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3", size = 149831 }, - { url = "https://files.pythonhosted.org/packages/37/ed/be39e5258e198655240db5e19e0b11379163ad7070962d6b0c87ed2c4d39/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd", size = 142335 }, - { url = "https://files.pythonhosted.org/packages/88/83/489e9504711fa05d8dde1574996408026bdbdbd938f23be67deebb5eca92/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00", size = 143862 }, - { url = "https://files.pythonhosted.org/packages/c6/c7/32da20821cf387b759ad24627a9aca289d2822de929b8a41b6241767b461/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12", size = 145673 }, - { url = "https://files.pythonhosted.org/packages/68/85/f4288e96039abdd5aeb5c546fa20a37b50da71b5cf01e75e87f16cd43304/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77", size = 140211 }, - { url = "https://files.pythonhosted.org/packages/28/a3/a42e70d03cbdabc18997baf4f0227c73591a08041c149e710045c281f97b/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146", size = 148039 }, - { url = "https://files.pythonhosted.org/packages/85/e4/65699e8ab3014ecbe6f5c71d1a55d810fb716bbfd74f6283d5c2aa87febf/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd", size = 151939 }, - { url = "https://files.pythonhosted.org/packages/b1/82/8e9fe624cc5374193de6860aba3ea8070f584c8565ee77c168ec13274bd2/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6", size = 149075 }, - { url = "https://files.pythonhosted.org/packages/3d/7b/82865ba54c765560c8433f65e8acb9217cb839a9e32b42af4aa8e945870f/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8", size = 144340 }, - { url = "https://files.pythonhosted.org/packages/b5/b6/9674a4b7d4d99a0d2df9b215da766ee682718f88055751e1e5e753c82db0/charset_normalizer-3.4.1-cp311-cp311-win32.whl", hash = "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b", size = 95205 }, - { url = "https://files.pythonhosted.org/packages/1e/ab/45b180e175de4402dcf7547e4fb617283bae54ce35c27930a6f35b6bef15/charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76", size = 102441 }, - { url = "https://files.pythonhosted.org/packages/0a/9a/dd1e1cdceb841925b7798369a09279bd1cf183cef0f9ddf15a3a6502ee45/charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545", size = 196105 }, - { url = "https://files.pythonhosted.org/packages/d3/8c/90bfabf8c4809ecb648f39794cf2a84ff2e7d2a6cf159fe68d9a26160467/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7", size = 140404 }, - { url = "https://files.pythonhosted.org/packages/ad/8f/e410d57c721945ea3b4f1a04b74f70ce8fa800d393d72899f0a40526401f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757", size = 150423 }, - { url = "https://files.pythonhosted.org/packages/f0/b8/e6825e25deb691ff98cf5c9072ee0605dc2acfca98af70c2d1b1bc75190d/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa", size = 143184 }, - { url = "https://files.pythonhosted.org/packages/3e/a2/513f6cbe752421f16d969e32f3583762bfd583848b763913ddab8d9bfd4f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d", size = 145268 }, - { url = "https://files.pythonhosted.org/packages/74/94/8a5277664f27c3c438546f3eb53b33f5b19568eb7424736bdc440a88a31f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616", size = 147601 }, - { url = "https://files.pythonhosted.org/packages/7c/5f/6d352c51ee763623a98e31194823518e09bfa48be2a7e8383cf691bbb3d0/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b", size = 141098 }, - { url = "https://files.pythonhosted.org/packages/78/d4/f5704cb629ba5ab16d1d3d741396aec6dc3ca2b67757c45b0599bb010478/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d", size = 149520 }, - { url = "https://files.pythonhosted.org/packages/c5/96/64120b1d02b81785f222b976c0fb79a35875457fa9bb40827678e54d1bc8/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a", size = 152852 }, - { url = "https://files.pythonhosted.org/packages/84/c9/98e3732278a99f47d487fd3468bc60b882920cef29d1fa6ca460a1fdf4e6/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9", size = 150488 }, - { url = "https://files.pythonhosted.org/packages/13/0e/9c8d4cb99c98c1007cc11eda969ebfe837bbbd0acdb4736d228ccaabcd22/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1", size = 146192 }, - { url = "https://files.pythonhosted.org/packages/b2/21/2b6b5b860781a0b49427309cb8670785aa543fb2178de875b87b9cc97746/charset_normalizer-3.4.1-cp312-cp312-win32.whl", hash = "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35", size = 95550 }, - { url = "https://files.pythonhosted.org/packages/21/5b/1b390b03b1d16c7e382b561c5329f83cc06623916aab983e8ab9239c7d5c/charset_normalizer-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f", size = 102785 }, - { url = "https://files.pythonhosted.org/packages/38/94/ce8e6f63d18049672c76d07d119304e1e2d7c6098f0841b51c666e9f44a0/charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda", size = 195698 }, - { url = "https://files.pythonhosted.org/packages/24/2e/dfdd9770664aae179a96561cc6952ff08f9a8cd09a908f259a9dfa063568/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313", size = 140162 }, - { url = "https://files.pythonhosted.org/packages/24/4e/f646b9093cff8fc86f2d60af2de4dc17c759de9d554f130b140ea4738ca6/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9", size = 150263 }, - { url = "https://files.pythonhosted.org/packages/5e/67/2937f8d548c3ef6e2f9aab0f6e21001056f692d43282b165e7c56023e6dd/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b", size = 142966 }, - { url = "https://files.pythonhosted.org/packages/52/ed/b7f4f07de100bdb95c1756d3a4d17b90c1a3c53715c1a476f8738058e0fa/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11", size = 144992 }, - { url = "https://files.pythonhosted.org/packages/96/2c/d49710a6dbcd3776265f4c923bb73ebe83933dfbaa841c5da850fe0fd20b/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f", size = 147162 }, - { url = "https://files.pythonhosted.org/packages/b4/41/35ff1f9a6bd380303dea55e44c4933b4cc3c4850988927d4082ada230273/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd", size = 140972 }, - { url = "https://files.pythonhosted.org/packages/fb/43/c6a0b685fe6910d08ba971f62cd9c3e862a85770395ba5d9cad4fede33ab/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2", size = 149095 }, - { url = "https://files.pythonhosted.org/packages/4c/ff/a9a504662452e2d2878512115638966e75633519ec11f25fca3d2049a94a/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886", size = 152668 }, - { url = "https://files.pythonhosted.org/packages/6c/71/189996b6d9a4b932564701628af5cee6716733e9165af1d5e1b285c530ed/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601", size = 150073 }, - { url = "https://files.pythonhosted.org/packages/e4/93/946a86ce20790e11312c87c75ba68d5f6ad2208cfb52b2d6a2c32840d922/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd", size = 145732 }, - { url = "https://files.pythonhosted.org/packages/cd/e5/131d2fb1b0dddafc37be4f3a2fa79aa4c037368be9423061dccadfd90091/charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407", size = 95391 }, - { url = "https://files.pythonhosted.org/packages/27/f2/4f9a69cc7712b9b5ad8fdb87039fd89abba997ad5cbe690d1835d40405b0/charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971", size = 102702 }, - { url = "https://files.pythonhosted.org/packages/0e/f6/65ecc6878a89bb1c23a086ea335ad4bf21a588990c3f535a227b9eea9108/charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", size = 49767 }, +version = "3.4.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/83/2d/5fd176ceb9b2fc619e63405525573493ca23441330fcdaee6bef9460e924/charset_normalizer-3.4.3.tar.gz", hash = "sha256:6fce4b8500244f6fcb71465d4a4930d132ba9ab8e71a7859e6a5d59851068d14", size = 122371, upload-time = "2025-08-09T07:57:28.46Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d6/98/f3b8013223728a99b908c9344da3aa04ee6e3fa235f19409033eda92fb78/charset_normalizer-3.4.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fb7f67a1bfa6e40b438170ebdc8158b78dc465a5a67b6dde178a46987b244a72", size = 207695, upload-time = "2025-08-09T07:55:36.452Z" }, + { url = "https://files.pythonhosted.org/packages/21/40/5188be1e3118c82dcb7c2a5ba101b783822cfb413a0268ed3be0468532de/charset_normalizer-3.4.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cc9370a2da1ac13f0153780040f465839e6cccb4a1e44810124b4e22483c93fe", size = 147153, upload-time = "2025-08-09T07:55:38.467Z" }, + { url = "https://files.pythonhosted.org/packages/37/60/5d0d74bc1e1380f0b72c327948d9c2aca14b46a9efd87604e724260f384c/charset_normalizer-3.4.3-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:07a0eae9e2787b586e129fdcbe1af6997f8d0e5abaa0bc98c0e20e124d67e601", size = 160428, upload-time = "2025-08-09T07:55:40.072Z" }, + { url = "https://files.pythonhosted.org/packages/85/9a/d891f63722d9158688de58d050c59dc3da560ea7f04f4c53e769de5140f5/charset_normalizer-3.4.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:74d77e25adda8581ffc1c720f1c81ca082921329452eba58b16233ab1842141c", size = 157627, upload-time = "2025-08-09T07:55:41.706Z" }, + { url = "https://files.pythonhosted.org/packages/65/1a/7425c952944a6521a9cfa7e675343f83fd82085b8af2b1373a2409c683dc/charset_normalizer-3.4.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d0e909868420b7049dafd3a31d45125b31143eec59235311fc4c57ea26a4acd2", size = 152388, upload-time = "2025-08-09T07:55:43.262Z" }, + { url = "https://files.pythonhosted.org/packages/f0/c9/a2c9c2a355a8594ce2446085e2ec97fd44d323c684ff32042e2a6b718e1d/charset_normalizer-3.4.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c6f162aabe9a91a309510d74eeb6507fab5fff92337a15acbe77753d88d9dcf0", size = 150077, upload-time = "2025-08-09T07:55:44.903Z" }, + { url = "https://files.pythonhosted.org/packages/3b/38/20a1f44e4851aa1c9105d6e7110c9d020e093dfa5836d712a5f074a12bf7/charset_normalizer-3.4.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4ca4c094de7771a98d7fbd67d9e5dbf1eb73efa4f744a730437d8a3a5cf994f0", size = 161631, upload-time = "2025-08-09T07:55:46.346Z" }, + { url = "https://files.pythonhosted.org/packages/a4/fa/384d2c0f57edad03d7bec3ebefb462090d8905b4ff5a2d2525f3bb711fac/charset_normalizer-3.4.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:02425242e96bcf29a49711b0ca9f37e451da7c70562bc10e8ed992a5a7a25cc0", size = 159210, upload-time = "2025-08-09T07:55:47.539Z" }, + { url = "https://files.pythonhosted.org/packages/33/9e/eca49d35867ca2db336b6ca27617deed4653b97ebf45dfc21311ce473c37/charset_normalizer-3.4.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:78deba4d8f9590fe4dae384aeff04082510a709957e968753ff3c48399f6f92a", size = 153739, upload-time = "2025-08-09T07:55:48.744Z" }, + { url = "https://files.pythonhosted.org/packages/2a/91/26c3036e62dfe8de8061182d33be5025e2424002125c9500faff74a6735e/charset_normalizer-3.4.3-cp310-cp310-win32.whl", hash = "sha256:d79c198e27580c8e958906f803e63cddb77653731be08851c7df0b1a14a8fc0f", size = 99825, upload-time = "2025-08-09T07:55:50.305Z" }, + { url = "https://files.pythonhosted.org/packages/e2/c6/f05db471f81af1fa01839d44ae2a8bfeec8d2a8b4590f16c4e7393afd323/charset_normalizer-3.4.3-cp310-cp310-win_amd64.whl", hash = "sha256:c6e490913a46fa054e03699c70019ab869e990270597018cef1d8562132c2669", size = 107452, upload-time = "2025-08-09T07:55:51.461Z" }, + { url = "https://files.pythonhosted.org/packages/7f/b5/991245018615474a60965a7c9cd2b4efbaabd16d582a5547c47ee1c7730b/charset_normalizer-3.4.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b256ee2e749283ef3ddcff51a675ff43798d92d746d1a6e4631bf8c707d22d0b", size = 204483, upload-time = "2025-08-09T07:55:53.12Z" }, + { url = "https://files.pythonhosted.org/packages/c7/2a/ae245c41c06299ec18262825c1569c5d3298fc920e4ddf56ab011b417efd/charset_normalizer-3.4.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:13faeacfe61784e2559e690fc53fa4c5ae97c6fcedb8eb6fb8d0a15b475d2c64", size = 145520, upload-time = "2025-08-09T07:55:54.712Z" }, + { url = "https://files.pythonhosted.org/packages/3a/a4/b3b6c76e7a635748c4421d2b92c7b8f90a432f98bda5082049af37ffc8e3/charset_normalizer-3.4.3-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:00237675befef519d9af72169d8604a067d92755e84fe76492fef5441db05b91", size = 158876, upload-time = "2025-08-09T07:55:56.024Z" }, + { url = "https://files.pythonhosted.org/packages/e2/e6/63bb0e10f90a8243c5def74b5b105b3bbbfb3e7bb753915fe333fb0c11ea/charset_normalizer-3.4.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:585f3b2a80fbd26b048a0be90c5aae8f06605d3c92615911c3a2b03a8a3b796f", size = 156083, upload-time = "2025-08-09T07:55:57.582Z" }, + { url = "https://files.pythonhosted.org/packages/87/df/b7737ff046c974b183ea9aa111b74185ac8c3a326c6262d413bd5a1b8c69/charset_normalizer-3.4.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0e78314bdc32fa80696f72fa16dc61168fda4d6a0c014e0380f9d02f0e5d8a07", size = 150295, upload-time = "2025-08-09T07:55:59.147Z" }, + { url = "https://files.pythonhosted.org/packages/61/f1/190d9977e0084d3f1dc169acd060d479bbbc71b90bf3e7bf7b9927dec3eb/charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:96b2b3d1a83ad55310de8c7b4a2d04d9277d5591f40761274856635acc5fcb30", size = 148379, upload-time = "2025-08-09T07:56:00.364Z" }, + { url = "https://files.pythonhosted.org/packages/4c/92/27dbe365d34c68cfe0ca76f1edd70e8705d82b378cb54ebbaeabc2e3029d/charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:939578d9d8fd4299220161fdd76e86c6a251987476f5243e8864a7844476ba14", size = 160018, upload-time = "2025-08-09T07:56:01.678Z" }, + { url = "https://files.pythonhosted.org/packages/99/04/baae2a1ea1893a01635d475b9261c889a18fd48393634b6270827869fa34/charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:fd10de089bcdcd1be95a2f73dbe6254798ec1bda9f450d5828c96f93e2536b9c", size = 157430, upload-time = "2025-08-09T07:56:02.87Z" }, + { url = "https://files.pythonhosted.org/packages/2f/36/77da9c6a328c54d17b960c89eccacfab8271fdaaa228305330915b88afa9/charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1e8ac75d72fa3775e0b7cb7e4629cec13b7514d928d15ef8ea06bca03ef01cae", size = 151600, upload-time = "2025-08-09T07:56:04.089Z" }, + { url = "https://files.pythonhosted.org/packages/64/d4/9eb4ff2c167edbbf08cdd28e19078bf195762e9bd63371689cab5ecd3d0d/charset_normalizer-3.4.3-cp311-cp311-win32.whl", hash = "sha256:6cf8fd4c04756b6b60146d98cd8a77d0cdae0e1ca20329da2ac85eed779b6849", size = 99616, upload-time = "2025-08-09T07:56:05.658Z" }, + { url = "https://files.pythonhosted.org/packages/f4/9c/996a4a028222e7761a96634d1820de8a744ff4327a00ada9c8942033089b/charset_normalizer-3.4.3-cp311-cp311-win_amd64.whl", hash = "sha256:31a9a6f775f9bcd865d88ee350f0ffb0e25936a7f930ca98995c05abf1faf21c", size = 107108, upload-time = "2025-08-09T07:56:07.176Z" }, + { url = "https://files.pythonhosted.org/packages/e9/5e/14c94999e418d9b87682734589404a25854d5f5d0408df68bc15b6ff54bb/charset_normalizer-3.4.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e28e334d3ff134e88989d90ba04b47d84382a828c061d0d1027b1b12a62b39b1", size = 205655, upload-time = "2025-08-09T07:56:08.475Z" }, + { url = "https://files.pythonhosted.org/packages/7d/a8/c6ec5d389672521f644505a257f50544c074cf5fc292d5390331cd6fc9c3/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0cacf8f7297b0c4fcb74227692ca46b4a5852f8f4f24b3c766dd94a1075c4884", size = 146223, upload-time = "2025-08-09T07:56:09.708Z" }, + { url = "https://files.pythonhosted.org/packages/fc/eb/a2ffb08547f4e1e5415fb69eb7db25932c52a52bed371429648db4d84fb1/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c6fd51128a41297f5409deab284fecbe5305ebd7e5a1f959bee1c054622b7018", size = 159366, upload-time = "2025-08-09T07:56:11.326Z" }, + { url = "https://files.pythonhosted.org/packages/82/10/0fd19f20c624b278dddaf83b8464dcddc2456cb4b02bb902a6da126b87a1/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3cfb2aad70f2c6debfbcb717f23b7eb55febc0bb23dcffc0f076009da10c6392", size = 157104, upload-time = "2025-08-09T07:56:13.014Z" }, + { url = "https://files.pythonhosted.org/packages/16/ab/0233c3231af734f5dfcf0844aa9582d5a1466c985bbed6cedab85af9bfe3/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1606f4a55c0fd363d754049cdf400175ee96c992b1f8018b993941f221221c5f", size = 151830, upload-time = "2025-08-09T07:56:14.428Z" }, + { url = "https://files.pythonhosted.org/packages/ae/02/e29e22b4e02839a0e4a06557b1999d0a47db3567e82989b5bb21f3fbbd9f/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:027b776c26d38b7f15b26a5da1044f376455fb3766df8fc38563b4efbc515154", size = 148854, upload-time = "2025-08-09T07:56:16.051Z" }, + { url = "https://files.pythonhosted.org/packages/05/6b/e2539a0a4be302b481e8cafb5af8792da8093b486885a1ae4d15d452bcec/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:42e5088973e56e31e4fa58eb6bd709e42fc03799c11c42929592889a2e54c491", size = 160670, upload-time = "2025-08-09T07:56:17.314Z" }, + { url = "https://files.pythonhosted.org/packages/31/e7/883ee5676a2ef217a40ce0bffcc3d0dfbf9e64cbcfbdf822c52981c3304b/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:cc34f233c9e71701040d772aa7490318673aa7164a0efe3172b2981218c26d93", size = 158501, upload-time = "2025-08-09T07:56:18.641Z" }, + { url = "https://files.pythonhosted.org/packages/c1/35/6525b21aa0db614cf8b5792d232021dca3df7f90a1944db934efa5d20bb1/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:320e8e66157cc4e247d9ddca8e21f427efc7a04bbd0ac8a9faf56583fa543f9f", size = 153173, upload-time = "2025-08-09T07:56:20.289Z" }, + { url = "https://files.pythonhosted.org/packages/50/ee/f4704bad8201de513fdc8aac1cabc87e38c5818c93857140e06e772b5892/charset_normalizer-3.4.3-cp312-cp312-win32.whl", hash = "sha256:fb6fecfd65564f208cbf0fba07f107fb661bcd1a7c389edbced3f7a493f70e37", size = 99822, upload-time = "2025-08-09T07:56:21.551Z" }, + { url = "https://files.pythonhosted.org/packages/39/f5/3b3836ca6064d0992c58c7561c6b6eee1b3892e9665d650c803bd5614522/charset_normalizer-3.4.3-cp312-cp312-win_amd64.whl", hash = "sha256:86df271bf921c2ee3818f0522e9a5b8092ca2ad8b065ece5d7d9d0e9f4849bcc", size = 107543, upload-time = "2025-08-09T07:56:23.115Z" }, + { url = "https://files.pythonhosted.org/packages/65/ca/2135ac97709b400c7654b4b764daf5c5567c2da45a30cdd20f9eefe2d658/charset_normalizer-3.4.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:14c2a87c65b351109f6abfc424cab3927b3bdece6f706e4d12faaf3d52ee5efe", size = 205326, upload-time = "2025-08-09T07:56:24.721Z" }, + { url = "https://files.pythonhosted.org/packages/71/11/98a04c3c97dd34e49c7d247083af03645ca3730809a5509443f3c37f7c99/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:41d1fc408ff5fdfb910200ec0e74abc40387bccb3252f3f27c0676731df2b2c8", size = 146008, upload-time = "2025-08-09T07:56:26.004Z" }, + { url = "https://files.pythonhosted.org/packages/60/f5/4659a4cb3c4ec146bec80c32d8bb16033752574c20b1252ee842a95d1a1e/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1bb60174149316da1c35fa5233681f7c0f9f514509b8e399ab70fea5f17e45c9", size = 159196, upload-time = "2025-08-09T07:56:27.25Z" }, + { url = "https://files.pythonhosted.org/packages/86/9e/f552f7a00611f168b9a5865a1414179b2c6de8235a4fa40189f6f79a1753/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:30d006f98569de3459c2fc1f2acde170b7b2bd265dc1943e87e1a4efe1b67c31", size = 156819, upload-time = "2025-08-09T07:56:28.515Z" }, + { url = "https://files.pythonhosted.org/packages/7e/95/42aa2156235cbc8fa61208aded06ef46111c4d3f0de233107b3f38631803/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:416175faf02e4b0810f1f38bcb54682878a4af94059a1cd63b8747244420801f", size = 151350, upload-time = "2025-08-09T07:56:29.716Z" }, + { url = "https://files.pythonhosted.org/packages/c2/a9/3865b02c56f300a6f94fc631ef54f0a8a29da74fb45a773dfd3dcd380af7/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6aab0f181c486f973bc7262a97f5aca3ee7e1437011ef0c2ec04b5a11d16c927", size = 148644, upload-time = "2025-08-09T07:56:30.984Z" }, + { url = "https://files.pythonhosted.org/packages/77/d9/cbcf1a2a5c7d7856f11e7ac2d782aec12bdfea60d104e60e0aa1c97849dc/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:fdabf8315679312cfa71302f9bd509ded4f2f263fb5b765cf1433b39106c3cc9", size = 160468, upload-time = "2025-08-09T07:56:32.252Z" }, + { url = "https://files.pythonhosted.org/packages/f6/42/6f45efee8697b89fda4d50580f292b8f7f9306cb2971d4b53f8914e4d890/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:bd28b817ea8c70215401f657edef3a8aa83c29d447fb0b622c35403780ba11d5", size = 158187, upload-time = "2025-08-09T07:56:33.481Z" }, + { url = "https://files.pythonhosted.org/packages/70/99/f1c3bdcfaa9c45b3ce96f70b14f070411366fa19549c1d4832c935d8e2c3/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:18343b2d246dc6761a249ba1fb13f9ee9a2bcd95decc767319506056ea4ad4dc", size = 152699, upload-time = "2025-08-09T07:56:34.739Z" }, + { url = "https://files.pythonhosted.org/packages/a3/ad/b0081f2f99a4b194bcbb1934ef3b12aa4d9702ced80a37026b7607c72e58/charset_normalizer-3.4.3-cp313-cp313-win32.whl", hash = "sha256:6fb70de56f1859a3f71261cbe41005f56a7842cc348d3aeb26237560bfa5e0ce", size = 99580, upload-time = "2025-08-09T07:56:35.981Z" }, + { url = "https://files.pythonhosted.org/packages/9a/8f/ae790790c7b64f925e5c953b924aaa42a243fb778fed9e41f147b2a5715a/charset_normalizer-3.4.3-cp313-cp313-win_amd64.whl", hash = "sha256:cf1ebb7d78e1ad8ec2a8c4732c7be2e736f6e5123a4146c5b89c9d1f585f8cef", size = 107366, upload-time = "2025-08-09T07:56:37.339Z" }, + { url = "https://files.pythonhosted.org/packages/8e/91/b5a06ad970ddc7a0e513112d40113e834638f4ca1120eb727a249fb2715e/charset_normalizer-3.4.3-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:3cd35b7e8aedeb9e34c41385fda4f73ba609e561faedfae0a9e75e44ac558a15", size = 204342, upload-time = "2025-08-09T07:56:38.687Z" }, + { url = "https://files.pythonhosted.org/packages/ce/ec/1edc30a377f0a02689342f214455c3f6c2fbedd896a1d2f856c002fc3062/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b89bc04de1d83006373429975f8ef9e7932534b8cc9ca582e4db7d20d91816db", size = 145995, upload-time = "2025-08-09T07:56:40.048Z" }, + { url = "https://files.pythonhosted.org/packages/17/e5/5e67ab85e6d22b04641acb5399c8684f4d37caf7558a53859f0283a650e9/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2001a39612b241dae17b4687898843f254f8748b796a2e16f1051a17078d991d", size = 158640, upload-time = "2025-08-09T07:56:41.311Z" }, + { url = "https://files.pythonhosted.org/packages/f1/e5/38421987f6c697ee3722981289d554957c4be652f963d71c5e46a262e135/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8dcfc373f888e4fb39a7bc57e93e3b845e7f462dacc008d9749568b1c4ece096", size = 156636, upload-time = "2025-08-09T07:56:43.195Z" }, + { url = "https://files.pythonhosted.org/packages/a0/e4/5a075de8daa3ec0745a9a3b54467e0c2967daaaf2cec04c845f73493e9a1/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:18b97b8404387b96cdbd30ad660f6407799126d26a39ca65729162fd810a99aa", size = 150939, upload-time = "2025-08-09T07:56:44.819Z" }, + { url = "https://files.pythonhosted.org/packages/02/f7/3611b32318b30974131db62b4043f335861d4d9b49adc6d57c1149cc49d4/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ccf600859c183d70eb47e05a44cd80a4ce77394d1ac0f79dbd2dd90a69a3a049", size = 148580, upload-time = "2025-08-09T07:56:46.684Z" }, + { url = "https://files.pythonhosted.org/packages/7e/61/19b36f4bd67f2793ab6a99b979b4e4f3d8fc754cbdffb805335df4337126/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:53cd68b185d98dde4ad8990e56a58dea83a4162161b1ea9272e5c9182ce415e0", size = 159870, upload-time = "2025-08-09T07:56:47.941Z" }, + { url = "https://files.pythonhosted.org/packages/06/57/84722eefdd338c04cf3030ada66889298eaedf3e7a30a624201e0cbe424a/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:30a96e1e1f865f78b030d65241c1ee850cdf422d869e9028e2fc1d5e4db73b92", size = 157797, upload-time = "2025-08-09T07:56:49.756Z" }, + { url = "https://files.pythonhosted.org/packages/72/2a/aff5dd112b2f14bcc3462c312dce5445806bfc8ab3a7328555da95330e4b/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d716a916938e03231e86e43782ca7878fb602a125a91e7acb8b5112e2e96ac16", size = 152224, upload-time = "2025-08-09T07:56:51.369Z" }, + { url = "https://files.pythonhosted.org/packages/b7/8c/9839225320046ed279c6e839d51f028342eb77c91c89b8ef2549f951f3ec/charset_normalizer-3.4.3-cp314-cp314-win32.whl", hash = "sha256:c6dbd0ccdda3a2ba7c2ecd9d77b37f3b5831687d8dc1b6ca5f56a4880cc7b7ce", size = 100086, upload-time = "2025-08-09T07:56:52.722Z" }, + { url = "https://files.pythonhosted.org/packages/ee/7a/36fbcf646e41f710ce0a563c1c9a343c6edf9be80786edeb15b6f62e17db/charset_normalizer-3.4.3-cp314-cp314-win_amd64.whl", hash = "sha256:73dc19b562516fc9bcf6e5d6e596df0b4eb98d87e4f79f3ae71840e6ed21361c", size = 107400, upload-time = "2025-08-09T07:56:55.172Z" }, + { url = "https://files.pythonhosted.org/packages/8a/1f/f041989e93b001bc4e44bb1669ccdcf54d3f00e628229a85b08d330615c5/charset_normalizer-3.4.3-py3-none-any.whl", hash = "sha256:ce571ab16d890d23b5c278547ba694193a45011ff86a9162a71307ed9f86759a", size = 53175, upload-time = "2025-08-09T07:57:26.864Z" }, ] [[package]] name = "colorama" version = "0.4.6" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, ] [[package]] name = "docutils" version = "0.21.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ae/ed/aefcc8cd0ba62a0560c3c18c33925362d46c6075480bfa4df87b28e169a9/docutils-0.21.2.tar.gz", hash = "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f", size = 2204444 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl", hash = "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2", size = 587408 }, -] - -[[package]] -name = "ducpy" -version = "1.16.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "flatbuffers" }, - { name = "nanoid" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ba/d7/f9a98407a1bf3d53a78856763fe66b55c218c4cd1144eb5582b1e7223d95/ducpy-1.16.0.tar.gz", hash = "sha256:34b46a41a42bb4d4b89d545711412c4170ad7f11ca1d57064219c332c61d8c73", size = 103864 } +sdist = { url = "https://files.pythonhosted.org/packages/ae/ed/aefcc8cd0ba62a0560c3c18c33925362d46c6075480bfa4df87b28e169a9/docutils-0.21.2.tar.gz", hash = "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f", size = 2204444, upload-time = "2024-04-23T18:57:18.24Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/64/d9/5fe86041fe79960c70b4851a2cffac0f8e37de67e4432150fa8ed2c76e9c/ducpy-1.16.0-py3-none-any.whl", hash = "sha256:82fcf53519beb9d157d101ae125f85a34d5c556c4e3e0460826be23ff5314e95", size = 57714 }, + { url = "https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl", hash = "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2", size = 587408, upload-time = "2024-04-23T18:57:14.835Z" }, ] [[package]] -name = "ducxf" -version = "0.1.0" +name = "ducdxf" source = { editable = "." } dependencies = [ { name = "ducpy" }, @@ -163,7 +164,8 @@ dependencies = [ [package.dev-dependencies] dev = [ { name = "furo" }, - { name = "numpy" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "pytest" }, { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, @@ -172,7 +174,7 @@ dev = [ [package.metadata] requires-dist = [ - { name = "ducpy", specifier = ">=1.16.0" }, + { name = "ducpy", directory = "../ducpy" }, { name = "ezdxf", specifier = ">=1.4.1" }, ] @@ -185,153 +187,198 @@ dev = [ { name = "sphinx-autoapi", specifier = ">=3.6.0" }, ] +[[package]] +name = "ducpy" +source = { directory = "../ducpy" } +dependencies = [ + { name = "flatbuffers" }, + { name = "nanoid" }, +] + +[package.metadata] +requires-dist = [ + { name = "flatbuffers", specifier = ">=25.2.10" }, + { name = "nanoid", specifier = ">=2.0.0" }, +] + +[package.metadata.requires-dev] +dev = [ + { name = "furo", specifier = ">=2024.8.6" }, + { name = "numpy", specifier = ">=1.20.0" }, + { name = "pytest", specifier = ">=8.3.5" }, + { name = "rich", specifier = ">=13.0.0" }, + { name = "sphinx", specifier = ">=8.1.3" }, + { name = "sphinx-autoapi", specifier = ">=3.6.0" }, +] + [[package]] name = "exceptiongroup" -version = "1.2.2" +version = "1.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/09/35/2495c4ac46b980e4ca1f6ad6db102322ef3ad2410b79fdde159a4b0f3b92/exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc", size = 28883 } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0b/9f/a65090624ecf468cdca03533906e7c69ed7588582240cfe7cc9e770b50eb/exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88", size = 29749, upload-time = "2025-05-10T17:42:51.123Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/02/cc/b7e31358aac6ed1ef2bb790a9746ac2c69bcb3c8588b41616914eb106eaf/exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b", size = 16453 }, + { url = "https://files.pythonhosted.org/packages/36/f4/c6e662dade71f56cd2f3735141b265c3c79293c109549c1e6933b0651ffc/exceptiongroup-1.3.0-py3-none-any.whl", hash = "sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10", size = 16674, upload-time = "2025-05-10T17:42:49.33Z" }, ] [[package]] name = "ezdxf" -version = "1.4.1" +version = "1.4.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "fonttools" }, - { name = "numpy" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "pyparsing" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/62/5b/ee69e29e248eaf0973757a33fb6d94ca56f374bb38e2fea28caf697af34c/ezdxf-1.4.1.tar.gz", hash = "sha256:4806e4328214f7413a952b7e5066588a83e3c0d600dda8c5f86eed38cfcd706b", size = 1814151 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/72/8d/d1acffade8cb1e05411aaad64b2b29c6004640f7b2f6b623011c3913fb50/ezdxf-1.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5167f620ec6f261f0216c11cbab4625ef0bf46167d6e1fdce5799dc7ea06c5dc", size = 3437361 }, - { url = "https://files.pythonhosted.org/packages/d9/4f/9d058e79e445518ea4617174739d08ffe614a3faecdf6dc118b4dc6af925/ezdxf-1.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fbcce92871ecc50eda683fc4845af4c8b98f0c69842b816c0477d2cc08a8f396", size = 2900970 }, - { url = "https://files.pythonhosted.org/packages/4f/25/68df5704f9b89f4a6a741c6bbc937c978feb0fcd0c7b53a4546b776af8e6/ezdxf-1.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:20cc506f7adff134aeb063aa8f2a37c7e8041f216baaab191af03212ba2ffd29", size = 2868464 }, - { url = "https://files.pythonhosted.org/packages/52/05/3d3d6da076ea657c23c6bc077aacf3139a5835c7443adf74ad490b661571/ezdxf-1.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d5b3219d7e5f6d921080f4abf5abc99798a2ff4ff84e1a944009de744c373ad", size = 5332111 }, - { url = "https://files.pythonhosted.org/packages/32/a2/09155c83e1ff2be2078c5d94aa4aad3151333abb60bebc6cc41cc4eb8d0f/ezdxf-1.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed9f7398c9253edf60599f815ab711b302cb747937e0713265d5bd41389f58b9", size = 4351034 }, - { url = "https://files.pythonhosted.org/packages/6e/f4/65224fdf9472d9f4ead6e1aa59f57c2ee55342cd84150c31a1cd2f186827/ezdxf-1.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:04f3ba53d756d9b6d551a11fb118c6183c060dd186bdf1e1045b0916a8283010", size = 5303475 }, - { url = "https://files.pythonhosted.org/packages/4d/66/93906c2312a42480381fe1362778180d7413d4cfc0a874ca66fd4f891de1/ezdxf-1.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:60b909553f241226480e1909280af8c29342ff8d6384bfff0cc48919712d7019", size = 4384220 }, - { url = "https://files.pythonhosted.org/packages/d1/87/77a278626b9013b1089a1d21cf4f5dbbb837d9899ef30952b66165bcd151/ezdxf-1.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:660fe5bb6ef0f0d2927029620e29eae1ec47cb843d73a2291817dae7716d6009", size = 2860360 }, - { url = "https://files.pythonhosted.org/packages/20/0a/1112f74fefe964fd6d235df942ddaf13905d63d63fb281a5de0ad3442479/ezdxf-1.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:62485e3488b9093e70a373f981184c4024975b87546c2567d6b0035c4f4df0e3", size = 3439766 }, - { url = "https://files.pythonhosted.org/packages/c4/11/64ec6ab10b49fbcde510f11a7331d8b33792a9c21c6d4aa851edcde28743/ezdxf-1.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e59c556c480ba2c9886f95ec3eac2006dc905b42871b402773f7220636936079", size = 2903011 }, - { url = "https://files.pythonhosted.org/packages/ea/55/e33cfe9957793932ec0fcc78ff1ad5ccd091c5e7be8a98cbc90c680aff69/ezdxf-1.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7d36dd147c765937d0ab0fffdf6e1ef8008c2e9667bc92d08f938f0945176b5e", size = 2869108 }, - { url = "https://files.pythonhosted.org/packages/8a/73/b641ef3804f63f19a336293852e92244da8d5ccbeaa1b19cac0cf0eedc22/ezdxf-1.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b63357ad8b65574938d10ce571c1373cc6c8771c6aad40155f0c55607102237", size = 5577899 }, - { url = "https://files.pythonhosted.org/packages/85/e0/f9ecc2d2ba45dec3ddb0f72024d573bda5ba778f52e1fc610e713e213582/ezdxf-1.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2abaecb2228b5b1a798149bcaefa45a5911ece631aa2717ff6dea1ab5713a6a", size = 5599281 }, - { url = "https://files.pythonhosted.org/packages/fc/e7/9ce8dd678e11c18a613d2a4f600fb494e938def0de1d2da6c35b99b6469a/ezdxf-1.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6dd079a89299bd6be8ee63561121d3b02b7bad2b7f591469497455b3fddfd321", size = 5542637 }, - { url = "https://files.pythonhosted.org/packages/a3/3e/6d0b221444317e58ff0b2f9a5dbe99a3fbc7c6ec1cd4a19c2f3e266b4fa0/ezdxf-1.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5ed11a1b1f2c953dcfc500b4fee6570f3fcdb8fed1589bce5fcb81d58e1f32b0", size = 5624638 }, - { url = "https://files.pythonhosted.org/packages/6f/2b/620cb7302da504f958d9fc46d1d37821536d82c7242a7eebbf80c0ef3a08/ezdxf-1.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0a8aba1eb1d2f81158e744c492cf2338fba6491cb6a7b409b232b6456e7919", size = 2860910 }, - { url = "https://files.pythonhosted.org/packages/4f/e4/7d4c96b55c53d9d15434d88f688c9d4aa05d6d3619d25d9af740b449d93f/ezdxf-1.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:c592ee1970d11ebef66c800860f6a0f8fd560a0fde5c3c51556d06c8d422cc71", size = 3442809 }, - { url = "https://files.pythonhosted.org/packages/57/c9/aa67e3685f48d742ae5200bab90499b73399acf562ac7623c89685493efe/ezdxf-1.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:dae904a0238e3ea74ae53c7036b6bebaf36c82b143a0e4e23c743ecf5a33d9fd", size = 2906016 }, - { url = "https://files.pythonhosted.org/packages/d1/16/326245712527a5de0f4ad4397fb24e98f083e85a7fc1da99ddaa0a2034bc/ezdxf-1.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:44c695a6bf2eabcb88814bf108670067e496c569b10cabdb3c110c6aab7d5bea", size = 2869401 }, - { url = "https://files.pythonhosted.org/packages/a1/de/066c5e5467208e08d8491c54cd7089224fa1a8846d15a4ffc2d8bae1649c/ezdxf-1.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf7d0393eb1b680e088a8c56557a7019a77e7d3d0bca1bab7c036cad531a8d09", size = 5578425 }, - { url = "https://files.pythonhosted.org/packages/c3/e6/f85f31bef03f33c472e028cd166377d58aad669e92d17c5c899e71e1243b/ezdxf-1.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a821fdd5b24d0d820d2ee2644b1927ea777c7209573407c3e55bb6fdb3d04c05", size = 5631702 }, - { url = "https://files.pythonhosted.org/packages/2b/56/be7dd4428be1c87f0e65c520b5ff05425a83fa9dcf6e4fae3f5dc1f718ba/ezdxf-1.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8a98a50e111163cf5799b09cdbc7bf302c323636afb454179dc4be4aa3edee3d", size = 5541467 }, - { url = "https://files.pythonhosted.org/packages/12/9f/4dddddc59850b9dc69125ea806f8e6293792c7ffc3678f81d8a2443c10d3/ezdxf-1.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1754cc1f11538ccc4c8b912947b6170b7a34532137d99c176457d207bc9d18b3", size = 5647888 }, - { url = "https://files.pythonhosted.org/packages/95/dd/f27ffb3d2756075600fe97c4e5654c7ef0403cce4dc3c8190e5dd030465e/ezdxf-1.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:eecb3775ce8963dde38f0e223c7af86197d9762cd2f73f38a735688c871510b4", size = 2860811 }, - { url = "https://files.pythonhosted.org/packages/cf/d3/b1e3e52bded89cc595e815083e5ba03851177eccaf0b3c67bffc5c6d400a/ezdxf-1.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:69d66bbd976d5ebfd949d12cc44a778ec6db8ae2d223458b192d930d04a87265", size = 3425621 }, - { url = "https://files.pythonhosted.org/packages/c0/dc/29a1f367ddb36aa90e8e3f39335c2d571f868debb8ec9f18a64170f0cfa3/ezdxf-1.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8c385633d2b2d841fe1f181954f594a8f35909c0ef56dda267ef11c3df77573a", size = 2897488 }, - { url = "https://files.pythonhosted.org/packages/9a/8b/f1fb9a27f60c2412961139c93077874887cf89491c4ccfec115b9e57e1cf/ezdxf-1.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e4ebf64dd97a54c5ade7d27f550612ad7dcf4d8b498e26b594d9e9c054e989ef", size = 2860643 }, - { url = "https://files.pythonhosted.org/packages/7f/91/c064622350f7289d6246c12c9f32d9fb3e4449daedda01ebdb60ddb790d3/ezdxf-1.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d258dbf8fa10d8b30c8c80e76dc56e3533ca1c80098657317946a4bb2f0c59e1", size = 5529887 }, - { url = "https://files.pythonhosted.org/packages/5f/a7/d2f791b66055923e7453eb3e86ef32cd9bd5a7efc2e776f49dd74bd25e7d/ezdxf-1.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6589905ae064c03de3c373c70fd2140d7337843147ad910c7bf2d0b9975396fa", size = 5587417 }, - { url = "https://files.pythonhosted.org/packages/45/46/777438e818cc89653c95434eb23e9b006f0ca7680123f66d82731f58962c/ezdxf-1.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9fb788d9f8b6a872463e52efcf8ee582019d6bef4b1a5e12acd24eeb6dcab768", size = 5497588 }, - { url = "https://files.pythonhosted.org/packages/95/ca/9684d675b56605a4e8a6ad8005da090c29d73a2ba028b9e804dfbb5638b1/ezdxf-1.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d9330a42634165b24fcbb9f613421018837236449ba2dc159cedacee65943d03", size = 5603676 }, - { url = "https://files.pythonhosted.org/packages/07/14/34f753e03a349e8b75a2314bc01c06cd7c1967f87e095f7f1bd51020798f/ezdxf-1.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:84a278d1bc65de09047d7104c55b0c468494a44f774bc2f0e6f15b27e73704a9", size = 2856549 }, - { url = "https://files.pythonhosted.org/packages/f1/ee/88f7804684ec90dae3571d0cdb51b465c8a52b60281849ee8e6572ea6203/ezdxf-1.4.1-py3-none-any.whl", hash = "sha256:fc3cf018ea0236c33cb3964743b04df54e35e0ff269518860a1f07a5b18b9cd0", size = 1328887 }, +sdist = { url = "https://files.pythonhosted.org/packages/64/11/eb27e779a550033972ece48de313be6cff8f537963dfce04778b25543788/ezdxf-1.4.2.tar.gz", hash = "sha256:1fb8edf5bc10dbd83f61f56f2058af4296cd8d817307dae2cbd7be9d665bf726", size = 1815082, upload-time = "2025-05-18T11:00:53.684Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ff/ce/c8a83bd29ec051f9a76111bb7e9d7c573546f1da140d88166a7bcf03fab2/ezdxf-1.4.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:94e62d4da459d86e6d1630c09109b7b6fd9672f7ff8fab4eb9d3c91f75e0a18e", size = 3446100, upload-time = "2025-05-18T11:05:52.343Z" }, + { url = "https://files.pythonhosted.org/packages/59/1c/8545390324719558a6867873525f8b2078864ad396748520f057c0ca6348/ezdxf-1.4.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:63aae1eb68aa30e1bbee38886e5b8bf602c9a4a0b672f0b2b31c5cdb29d6c533", size = 2939118, upload-time = "2025-05-18T11:05:54.022Z" }, + { url = "https://files.pythonhosted.org/packages/15/61/7c5a09a4e39a675ae43b806ec9a6875ecba65ae8b6197f1595bbe53cdcee/ezdxf-1.4.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e9be4845d36c949fb6a2a134802c5e506ed28dc31af254b41316c3040793c820", size = 2903207, upload-time = "2025-05-18T11:05:55.602Z" }, + { url = "https://files.pythonhosted.org/packages/9d/07/969a017aea0201df78446c9e82bab6ae432ecd1d760cec35412942aec22a/ezdxf-1.4.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eeebf15e4e279c665f957e3ab54f6ac58016f5af802e1175b7cd526d132b8afc", size = 5613041, upload-time = "2025-05-18T11:10:07.91Z" }, + { url = "https://files.pythonhosted.org/packages/d8/3a/82e0230a0caade322f1a0aaf3034bc6bc00b3eb3eb938dbdce6cff50c8b5/ezdxf-1.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c24962de1f15b3cf2ea1af1d23a59e78eaa31031781459372e4cede0ff34d8e", size = 4519115, upload-time = "2025-05-18T11:08:13.876Z" }, + { url = "https://files.pythonhosted.org/packages/da/d6/f5cbfc5b644afcf8b575de5f5162bcd08e3973055da617efc38ba3b4b555/ezdxf-1.4.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0842c65ab1832adfbc21c93eb450c2598e1c2257c3a65d3f2a0fbb1cf98ac6d8", size = 5585656, upload-time = "2025-05-18T11:10:09.743Z" }, + { url = "https://files.pythonhosted.org/packages/25/e4/0a5ae733d6a10c04bc66482618e27ce4b80b369f13fc59914d43b481051b/ezdxf-1.4.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e59bfd11c1011e694a32ed1480cb7ce58143e7d5bd5b3514c5458c825498efaf", size = 4570796, upload-time = "2025-05-18T11:08:15.397Z" }, + { url = "https://files.pythonhosted.org/packages/f4/2d/10f779546871668cf5d95f359bd192d4e6e5938f68aa28c3e5815f254727/ezdxf-1.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:1245cb055aa2a09001578a6379b57e89259c0e59326bae71ab1a95c625b49aaa", size = 2900750, upload-time = "2025-05-18T11:04:47.511Z" }, + { url = "https://files.pythonhosted.org/packages/4a/2f/8390b86b399bbf71b01f4eb4149147def873b21358121fb776f003d473fc/ezdxf-1.4.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e7cc99c43afb5d9e5f29356a1bb04bc736624c75f46e2abbc80129c1287c8482", size = 3461060, upload-time = "2025-05-18T11:05:57.284Z" }, + { url = "https://files.pythonhosted.org/packages/2e/5a/96b5cb9663fa6bef8535a247a6a709dca4b52a08025ae2385eb64639191a/ezdxf-1.4.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:022de8cfaa5bf906e080968036c441b401938ae42402146a553bb756379aefa8", size = 2946074, upload-time = "2025-05-18T11:05:58.981Z" }, + { url = "https://files.pythonhosted.org/packages/be/ae/f152bca23cad4dc2f8fc1030d73e4bc25ef964724a2ffcdb2154edee66bc/ezdxf-1.4.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:99f7826b7a26e5d1e8bea84e9699b6d8770195db3bd3103ef20fffc95aa6848e", size = 2910796, upload-time = "2025-05-18T11:06:00.641Z" }, + { url = "https://files.pythonhosted.org/packages/c9/93/c7b8dd52aa295dede2727972a4875eeca3a0479127f4bd0a2faa41cfc1ad/ezdxf-1.4.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:311c03113f7e5f70d28eaff076b2c76d7cebec3576d5b032d91c327871069f21", size = 5805112, upload-time = "2025-05-18T11:10:11.63Z" }, + { url = "https://files.pythonhosted.org/packages/1f/6c/2f0fd0e51f26aafeeb01e3aad18d2a76120e956b5db36d3f3375c8f1a7c0/ezdxf-1.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87f7532332abb004eff1d62e674a6d5c1ae2a91c0a92288ef817b1ed55fcaa97", size = 5778252, upload-time = "2025-05-18T11:08:17.447Z" }, + { url = "https://files.pythonhosted.org/packages/60/bd/2a5de55d49d84cf44cf53f7270e0f8e5ee5c8d74c1588711b638722fcc90/ezdxf-1.4.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1b0e461cb4ed897766e961b4ffe12fe699a23920d938a24419f69d7c9e9f58b4", size = 5766075, upload-time = "2025-05-18T11:10:14.109Z" }, + { url = "https://files.pythonhosted.org/packages/5f/11/451c556372c145af6e4546eeb758686a41396bbc1ebca8b11889f319a9ee/ezdxf-1.4.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6c94f388c52e9e22604fab2f81a320c8a2fd0af7a997cdeda7f378c64e8e4f7e", size = 5817207, upload-time = "2025-05-18T11:08:19.551Z" }, + { url = "https://files.pythonhosted.org/packages/6d/f5/548141810510363760038914468b0fe2f445c8600e13d78ae4d28c9b470d/ezdxf-1.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:39444da78154973c373194c2c2a27f8d035b4a4b3a55a280419f3ae252041e95", size = 2902206, upload-time = "2025-05-18T11:04:49.07Z" }, + { url = "https://files.pythonhosted.org/packages/05/a8/c806662222c74cd9c062f54daacfee86b0f307601a1cce98505181e72688/ezdxf-1.4.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:b76192a8e71eb6504a7be141a3d66b07643412e8545697b1c061f8ae6dcf9426", size = 3456936, upload-time = "2025-05-18T11:06:02.44Z" }, + { url = "https://files.pythonhosted.org/packages/0f/7d/1b9bf06384b178a0716d6ce8c2f0c6b462aef3be62a132e3d144d3eb067d/ezdxf-1.4.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:115960f84eb31e8ce4e99826b260587b15f916b072a96f133d5da967ce1f3139", size = 2948641, upload-time = "2025-05-18T11:06:04.126Z" }, + { url = "https://files.pythonhosted.org/packages/bd/62/791e10882fd3d848e45cf27dfcd3ec7f167fe2c13084314be933960436e6/ezdxf-1.4.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:960033f83f7ab395886eba203c6f3fcb82360b68eab30cb405894c39b8e3fff4", size = 2903918, upload-time = "2025-05-18T11:06:05.393Z" }, + { url = "https://files.pythonhosted.org/packages/05/fd/8d6a1e48de9d199fd739307514617799820aecb53c1b49b92b5092a0ec90/ezdxf-1.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a19ccd52b71e584f72b409767b4447d77a08c726323066c7d60a28fb6db2062", size = 5784469, upload-time = "2025-05-18T11:10:16.068Z" }, + { url = "https://files.pythonhosted.org/packages/15/6f/c7f7281e9a74536b27c093a3b15b404315be616e5dceff0b9271840242b0/ezdxf-1.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8186acc6c44a78d2d21dd6ac9e21fddea037d6b3040f17201f2a7d9349bde244", size = 5785379, upload-time = "2025-05-18T11:08:21.75Z" }, + { url = "https://files.pythonhosted.org/packages/01/b4/b7c4da14b6e4f8fb2cb37a6e3939ef7ca7e470ab0ad948dc272919ed69de/ezdxf-1.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:18e49cd3affa5ac4f3bfb0592de6570c45440d26325a2c659ddf4933c198f29a", size = 5753300, upload-time = "2025-05-18T11:10:17.71Z" }, + { url = "https://files.pythonhosted.org/packages/2a/d4/f76540c3426ae2dfaf9acc4ad7662f80926edaf04ce66654b31c52af8c1a/ezdxf-1.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f47dca5d0db84e49eeaa6dad1f9c260a59c16a8d737a648aa8fd50258b44a91a", size = 5844044, upload-time = "2025-05-18T11:08:23.866Z" }, + { url = "https://files.pythonhosted.org/packages/bd/8c/b5893eb19c13ebf21919cafb4e5db31cf2a4de146fbe49dc8759aced3eef/ezdxf-1.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:ba1aac159807aafd95d865f449d44f00ed041e51dadc50c2aabe9d5569303391", size = 2904814, upload-time = "2025-05-18T11:04:50.624Z" }, + { url = "https://files.pythonhosted.org/packages/c7/a7/63254789eb03af716c35a600004caae5fb60fabcffa9527085182da1a20e/ezdxf-1.4.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f2f09b19b8b9d5b820d4bac7e1857f5bb945193d6bc3d28fe7236d4ccfe5abf3", size = 3442120, upload-time = "2025-05-18T11:06:06.674Z" }, + { url = "https://files.pythonhosted.org/packages/cb/d7/3b4cedd325c16d3824fa746f38d5620afc19690e23cefd116ff6f07ddced/ezdxf-1.4.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7c8938151c4bce83daa7079260907991482d86a525adbd90f2ed47e3dc649dce", size = 2941162, upload-time = "2025-05-18T11:06:08.42Z" }, + { url = "https://files.pythonhosted.org/packages/41/60/c1e3bd6d1eabdf444c87cd7595bb2df41d375cd54229e007b4bf2c63659d/ezdxf-1.4.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:086d906c50b93ae5919cc006f6ff8fdf304833fc6abf8cb6e006fa4a7b81eaf7", size = 2896779, upload-time = "2025-05-18T11:06:09.685Z" }, + { url = "https://files.pythonhosted.org/packages/b8/ee/de2566febc73a0b21d87e7ddab17ea8f3e485fbe6640434ea496ffa806a0/ezdxf-1.4.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d6e79acbe0de94e88b9354c7f83453497ca99a148451ffea3dd78b939b70491", size = 5748043, upload-time = "2025-05-18T11:10:19.822Z" }, + { url = "https://files.pythonhosted.org/packages/30/a4/54f0cccc21a524fad8d566524d8ddc948bd53ceb20fade829556b410b699/ezdxf-1.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ddd7a5d6969dac89eab04df9eac26e77c5928e09e1c5a0d3334c1cbb74e2672e", size = 5747179, upload-time = "2025-05-18T11:08:25.903Z" }, + { url = "https://files.pythonhosted.org/packages/e0/21/f92ec71a4360c600c29ff4b1df2ecf5b829c89022e1a6b988598f699c946/ezdxf-1.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:65804566f482bf9fd4f488fdc485345c9c30e0fa487af61e6c6f40c7dc8c7664", size = 5714340, upload-time = "2025-05-18T11:10:21.503Z" }, + { url = "https://files.pythonhosted.org/packages/14/6c/7a123abd48525ffd012a845d2ae54a392b9b40fa32a3ac4802d398bb9f81/ezdxf-1.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:49eda3b953966d1823ae2eef6fbfa99af9b1e4d4f7ddc6ed715df260b46b748d", size = 5818591, upload-time = "2025-05-18T11:08:27.556Z" }, + { url = "https://files.pythonhosted.org/packages/ed/c6/25d2426d992bceb01e9dab107f8301dfdc451288d8c49a3e96972557b7c6/ezdxf-1.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:9ff11c19a7701e3b05b6ae0f4af4aa7f216fbdb43f10a197b71738b78f9ce1dd", size = 2902029, upload-time = "2025-05-18T11:04:52.246Z" }, + { url = "https://files.pythonhosted.org/packages/00/78/2f63f966087a9ae6eda6fe9a4f5c804799596b1c6a3d32458e883cb403a8/ezdxf-1.4.2-py3-none-any.whl", hash = "sha256:86c9dd9102f7c2ce9e3fb5a31ca7785f563290b8a00372742687f658aff575a0", size = 1329296, upload-time = "2025-05-18T11:01:35.171Z" }, ] [[package]] name = "flatbuffers" version = "25.2.10" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e4/30/eb5dce7994fc71a2f685d98ec33cc660c0a5887db5610137e60d8cbc4489/flatbuffers-25.2.10.tar.gz", hash = "sha256:97e451377a41262f8d9bd4295cc836133415cc03d8cb966410a4af92eb00d26e", size = 22170 } +sdist = { url = "https://files.pythonhosted.org/packages/e4/30/eb5dce7994fc71a2f685d98ec33cc660c0a5887db5610137e60d8cbc4489/flatbuffers-25.2.10.tar.gz", hash = "sha256:97e451377a41262f8d9bd4295cc836133415cc03d8cb966410a4af92eb00d26e", size = 22170, upload-time = "2025-02-11T04:26:46.257Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b8/25/155f9f080d5e4bc0082edfda032ea2bc2b8fab3f4d25d46c1e9dd22a1a89/flatbuffers-25.2.10-py2.py3-none-any.whl", hash = "sha256:ebba5f4d5ea615af3f7fd70fc310636fbb2bbd1f566ac0a23d98dd412de50051", size = 30953 }, + { url = "https://files.pythonhosted.org/packages/b8/25/155f9f080d5e4bc0082edfda032ea2bc2b8fab3f4d25d46c1e9dd22a1a89/flatbuffers-25.2.10-py2.py3-none-any.whl", hash = "sha256:ebba5f4d5ea615af3f7fd70fc310636fbb2bbd1f566ac0a23d98dd412de50051", size = 30953, upload-time = "2025-02-11T04:26:44.484Z" }, ] [[package]] name = "fonttools" -version = "4.57.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/03/2d/a9a0b6e3a0cf6bd502e64fc16d894269011930cabfc89aee20d1635b1441/fonttools-4.57.0.tar.gz", hash = "sha256:727ece10e065be2f9dd239d15dd5d60a66e17eac11aea47d447f9f03fdbc42de", size = 3492448 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/db/17/3ddfd1881878b3f856065130bb603f5922e81ae8a4eb53bce0ea78f765a8/fonttools-4.57.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:babe8d1eb059a53e560e7bf29f8e8f4accc8b6cfb9b5fd10e485bde77e71ef41", size = 2756260 }, - { url = "https://files.pythonhosted.org/packages/26/2b/6957890c52c030b0bf9e0add53e5badab4682c6ff024fac9a332bb2ae063/fonttools-4.57.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:81aa97669cd726349eb7bd43ca540cf418b279ee3caba5e2e295fb4e8f841c02", size = 2284691 }, - { url = "https://files.pythonhosted.org/packages/cc/8e/c043b4081774e5eb06a834cedfdb7d432b4935bc8c4acf27207bdc34dfc4/fonttools-4.57.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0e9618630edd1910ad4f07f60d77c184b2f572c8ee43305ea3265675cbbfe7e", size = 4566077 }, - { url = "https://files.pythonhosted.org/packages/59/bc/e16ae5d9eee6c70830ce11d1e0b23d6018ddfeb28025fda092cae7889c8b/fonttools-4.57.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:34687a5d21f1d688d7d8d416cb4c5b9c87fca8a1797ec0d74b9fdebfa55c09ab", size = 4608729 }, - { url = "https://files.pythonhosted.org/packages/25/13/e557bf10bb38e4e4c436d3a9627aadf691bc7392ae460910447fda5fad2b/fonttools-4.57.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:69ab81b66ebaa8d430ba56c7a5f9abe0183afefd3a2d6e483060343398b13fb1", size = 4759646 }, - { url = "https://files.pythonhosted.org/packages/bc/c9/5e2952214d4a8e31026bf80beb18187199b7001e60e99a6ce19773249124/fonttools-4.57.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d639397de852f2ccfb3134b152c741406752640a266d9c1365b0f23d7b88077f", size = 4941652 }, - { url = "https://files.pythonhosted.org/packages/df/04/e80242b3d9ec91a1f785d949edc277a13ecfdcfae744de4b170df9ed77d8/fonttools-4.57.0-cp310-cp310-win32.whl", hash = "sha256:cc066cb98b912f525ae901a24cd381a656f024f76203bc85f78fcc9e66ae5aec", size = 2159432 }, - { url = "https://files.pythonhosted.org/packages/33/ba/e858cdca275daf16e03c0362aa43734ea71104c3b356b2100b98543dba1b/fonttools-4.57.0-cp310-cp310-win_amd64.whl", hash = "sha256:7a64edd3ff6a7f711a15bd70b4458611fb240176ec11ad8845ccbab4fe6745db", size = 2203869 }, - { url = "https://files.pythonhosted.org/packages/81/1f/e67c99aa3c6d3d2f93d956627e62a57ae0d35dc42f26611ea2a91053f6d6/fonttools-4.57.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3871349303bdec958360eedb619169a779956503ffb4543bb3e6211e09b647c4", size = 2757392 }, - { url = "https://files.pythonhosted.org/packages/aa/f1/f75770d0ddc67db504850898d96d75adde238c35313409bfcd8db4e4a5fe/fonttools-4.57.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c59375e85126b15a90fcba3443eaac58f3073ba091f02410eaa286da9ad80ed8", size = 2285609 }, - { url = "https://files.pythonhosted.org/packages/f5/d3/bc34e4953cb204bae0c50b527307dce559b810e624a733351a654cfc318e/fonttools-4.57.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:967b65232e104f4b0f6370a62eb33089e00024f2ce143aecbf9755649421c683", size = 4873292 }, - { url = "https://files.pythonhosted.org/packages/41/b8/d5933559303a4ab18c799105f4c91ee0318cc95db4a2a09e300116625e7a/fonttools-4.57.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39acf68abdfc74e19de7485f8f7396fa4d2418efea239b7061d6ed6a2510c746", size = 4902503 }, - { url = "https://files.pythonhosted.org/packages/32/13/acb36bfaa316f481153ce78de1fa3926a8bad42162caa3b049e1afe2408b/fonttools-4.57.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9d077f909f2343daf4495ba22bb0e23b62886e8ec7c109ee8234bdbd678cf344", size = 5077351 }, - { url = "https://files.pythonhosted.org/packages/b5/23/6d383a2ca83b7516d73975d8cca9d81a01acdcaa5e4db8579e4f3de78518/fonttools-4.57.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:46370ac47a1e91895d40e9ad48effbe8e9d9db1a4b80888095bc00e7beaa042f", size = 5275067 }, - { url = "https://files.pythonhosted.org/packages/bc/ca/31b8919c6da0198d5d522f1d26c980201378c087bdd733a359a1e7485769/fonttools-4.57.0-cp311-cp311-win32.whl", hash = "sha256:ca2aed95855506b7ae94e8f1f6217b7673c929e4f4f1217bcaa236253055cb36", size = 2158263 }, - { url = "https://files.pythonhosted.org/packages/13/4c/de2612ea2216eb45cfc8eb91a8501615dd87716feaf5f8fb65cbca576289/fonttools-4.57.0-cp311-cp311-win_amd64.whl", hash = "sha256:17168a4670bbe3775f3f3f72d23ee786bd965395381dfbb70111e25e81505b9d", size = 2204968 }, - { url = "https://files.pythonhosted.org/packages/cb/98/d4bc42d43392982eecaaca117d79845734d675219680cd43070bb001bc1f/fonttools-4.57.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:889e45e976c74abc7256d3064aa7c1295aa283c6bb19810b9f8b604dfe5c7f31", size = 2751824 }, - { url = "https://files.pythonhosted.org/packages/1a/62/7168030eeca3742fecf45f31e63b5ef48969fa230a672216b805f1d61548/fonttools-4.57.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0425c2e052a5f1516c94e5855dbda706ae5a768631e9fcc34e57d074d1b65b92", size = 2283072 }, - { url = "https://files.pythonhosted.org/packages/5d/82/121a26d9646f0986ddb35fbbaf58ef791c25b59ecb63ffea2aab0099044f/fonttools-4.57.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44c26a311be2ac130f40a96769264809d3b0cb297518669db437d1cc82974888", size = 4788020 }, - { url = "https://files.pythonhosted.org/packages/5b/26/e0f2fb662e022d565bbe280a3cfe6dafdaabf58889ff86fdef2d31ff1dde/fonttools-4.57.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84c41ba992df5b8d680b89fd84c6a1f2aca2b9f1ae8a67400c8930cd4ea115f6", size = 4859096 }, - { url = "https://files.pythonhosted.org/packages/9e/44/9075e323347b1891cdece4b3f10a3b84a8f4c42a7684077429d9ce842056/fonttools-4.57.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ea1e9e43ca56b0c12440a7c689b1350066595bebcaa83baad05b8b2675129d98", size = 4964356 }, - { url = "https://files.pythonhosted.org/packages/48/28/caa8df32743462fb966be6de6a79d7f30393859636d7732e82efa09fbbb4/fonttools-4.57.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:84fd56c78d431606332a0627c16e2a63d243d0d8b05521257d77c6529abe14d8", size = 5226546 }, - { url = "https://files.pythonhosted.org/packages/f6/46/95ab0f0d2e33c5b1a4fc1c0efe5e286ba9359602c0a9907adb1faca44175/fonttools-4.57.0-cp312-cp312-win32.whl", hash = "sha256:f4376819c1c778d59e0a31db5dc6ede854e9edf28bbfa5b756604727f7f800ac", size = 2146776 }, - { url = "https://files.pythonhosted.org/packages/06/5d/1be5424bb305880e1113631f49a55ea7c7da3a5fe02608ca7c16a03a21da/fonttools-4.57.0-cp312-cp312-win_amd64.whl", hash = "sha256:57e30241524879ea10cdf79c737037221f77cc126a8cdc8ff2c94d4a522504b9", size = 2193956 }, - { url = "https://files.pythonhosted.org/packages/e9/2f/11439f3af51e4bb75ac9598c29f8601aa501902dcedf034bdc41f47dd799/fonttools-4.57.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:408ce299696012d503b714778d89aa476f032414ae57e57b42e4b92363e0b8ef", size = 2739175 }, - { url = "https://files.pythonhosted.org/packages/25/52/677b55a4c0972dc3820c8dba20a29c358197a78229daa2ea219fdb19e5d5/fonttools-4.57.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:bbceffc80aa02d9e8b99f2a7491ed8c4a783b2fc4020119dc405ca14fb5c758c", size = 2276583 }, - { url = "https://files.pythonhosted.org/packages/64/79/184555f8fa77b827b9460a4acdbbc0b5952bb6915332b84c615c3a236826/fonttools-4.57.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f022601f3ee9e1f6658ed6d184ce27fa5216cee5b82d279e0f0bde5deebece72", size = 4766437 }, - { url = "https://files.pythonhosted.org/packages/f8/ad/c25116352f456c0d1287545a7aa24e98987b6d99c5b0456c4bd14321f20f/fonttools-4.57.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4dea5893b58d4637ffa925536462ba626f8a1b9ffbe2f5c272cdf2c6ebadb817", size = 4838431 }, - { url = "https://files.pythonhosted.org/packages/53/ae/398b2a833897297797a44f519c9af911c2136eb7aa27d3f1352c6d1129fa/fonttools-4.57.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:dff02c5c8423a657c550b48231d0a48d7e2b2e131088e55983cfe74ccc2c7cc9", size = 4951011 }, - { url = "https://files.pythonhosted.org/packages/b7/5d/7cb31c4bc9ffb9a2bbe8b08f8f53bad94aeb158efad75da645b40b62cb73/fonttools-4.57.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:767604f244dc17c68d3e2dbf98e038d11a18abc078f2d0f84b6c24571d9c0b13", size = 5205679 }, - { url = "https://files.pythonhosted.org/packages/4c/e4/6934513ec2c4d3d69ca1bc3bd34d5c69dafcbf68c15388dd3bb062daf345/fonttools-4.57.0-cp313-cp313-win32.whl", hash = "sha256:8e2e12d0d862f43d51e5afb8b9751c77e6bec7d2dc00aad80641364e9df5b199", size = 2144833 }, - { url = "https://files.pythonhosted.org/packages/c4/0d/2177b7fdd23d017bcfb702fd41e47d4573766b9114da2fddbac20dcc4957/fonttools-4.57.0-cp313-cp313-win_amd64.whl", hash = "sha256:f1d6bc9c23356908db712d282acb3eebd4ae5ec6d8b696aa40342b1d84f8e9e3", size = 2190799 }, - { url = "https://files.pythonhosted.org/packages/90/27/45f8957c3132917f91aaa56b700bcfc2396be1253f685bd5c68529b6f610/fonttools-4.57.0-py3-none-any.whl", hash = "sha256:3122c604a675513c68bd24c6a8f9091f1c2376d18e8f5fe5a101746c81b3e98f", size = 1093605 }, +version = "4.59.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/11/7f/29c9c3fe4246f6ad96fee52b88d0dc3a863c7563b0afc959e36d78b965dc/fonttools-4.59.1.tar.gz", hash = "sha256:74995b402ad09822a4c8002438e54940d9f1ecda898d2bb057729d7da983e4cb", size = 3534394, upload-time = "2025-08-14T16:28:14.266Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f6/da/d66e5678802b2b662fd62908bf88b78d00bfb62de51660f270cf0dfce333/fonttools-4.59.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e90a89e52deb56b928e761bb5b5f65f13f669bfd96ed5962975debea09776a23", size = 2758395, upload-time = "2025-08-14T16:26:10.239Z" }, + { url = "https://files.pythonhosted.org/packages/96/74/d70a42bcc9ffa40a63e81417535b2849a702bd88f38bc2ed994ae86a2e74/fonttools-4.59.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5d29ab70658d2ec19422b25e6ace00a0b0ae4181ee31e03335eaef53907d2d83", size = 2331647, upload-time = "2025-08-14T16:26:13.399Z" }, + { url = "https://files.pythonhosted.org/packages/ea/f6/4a13657c9ca134ac62d9a68e4b3412b95b059537eab459cc1df653f45862/fonttools-4.59.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:94f9721a564978a10d5c12927f99170d18e9a32e5a727c61eae56f956a4d118b", size = 4846293, upload-time = "2025-08-14T16:26:15.586Z" }, + { url = "https://files.pythonhosted.org/packages/69/e3/9f0c8c30eaea5b2d891bd95b000381b3b2dcaa89b5a064cce25157aba973/fonttools-4.59.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8c8758a7d97848fc8b514b3d9b4cb95243714b2f838dde5e1e3c007375de6214", size = 4776105, upload-time = "2025-08-14T16:26:17.624Z" }, + { url = "https://files.pythonhosted.org/packages/e2/73/1e6a06e2eecdc7b054b035507694b4f480e83b94dcb0d19f8a010d95350a/fonttools-4.59.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2aeb829ad9d41a2ef17cab8bb5d186049ba38a840f10352e654aa9062ec32dc1", size = 4825142, upload-time = "2025-08-14T16:26:19.936Z" }, + { url = "https://files.pythonhosted.org/packages/72/7d/a512521ec44c37bda27d08193e79e48a510a073554c30400ccc600494830/fonttools-4.59.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ac216a2980a2d2b3b88c68a24f8a9bfb203e2490e991b3238502ad8f1e7bfed0", size = 4935220, upload-time = "2025-08-14T16:26:22.22Z" }, + { url = "https://files.pythonhosted.org/packages/62/f1/71f9a9c4e5df44d861975538a5c56b58f1662cd32ebbea5a02eb86028fc1/fonttools-4.59.1-cp310-cp310-win32.whl", hash = "sha256:d31dc137ed8ec71dbc446949eba9035926e6e967b90378805dcf667ff57cabb1", size = 2216883, upload-time = "2025-08-14T16:26:24.037Z" }, + { url = "https://files.pythonhosted.org/packages/f9/6d/92b2e3e0350bb3ef88024ae19513c12cee61896220e3df421c47a439af28/fonttools-4.59.1-cp310-cp310-win_amd64.whl", hash = "sha256:5265bc52ed447187d39891b5f21d7217722735d0de9fe81326566570d12851a9", size = 2261310, upload-time = "2025-08-14T16:26:26.184Z" }, + { url = "https://files.pythonhosted.org/packages/34/62/9667599561f623d4a523cc9eb4f66f3b94b6155464110fa9aebbf90bbec7/fonttools-4.59.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4909cce2e35706f3d18c54d3dcce0414ba5e0fb436a454dffec459c61653b513", size = 2778815, upload-time = "2025-08-14T16:26:28.484Z" }, + { url = "https://files.pythonhosted.org/packages/8f/78/cc25bcb2ce86033a9df243418d175e58f1956a35047c685ef553acae67d6/fonttools-4.59.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:efbec204fa9f877641747f2d9612b2b656071390d7a7ef07a9dbf0ecf9c7195c", size = 2341631, upload-time = "2025-08-14T16:26:30.396Z" }, + { url = "https://files.pythonhosted.org/packages/a4/cc/fcbb606dd6871f457ac32f281c20bcd6cc77d9fce77b5a4e2b2afab1f500/fonttools-4.59.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:39dfd42cc2dc647b2c5469bc7a5b234d9a49e72565b96dd14ae6f11c2c59ef15", size = 5022222, upload-time = "2025-08-14T16:26:32.447Z" }, + { url = "https://files.pythonhosted.org/packages/61/96/c0b1cf2b74d08eb616a80dbf5564351fe4686147291a25f7dce8ace51eb3/fonttools-4.59.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b11bc177a0d428b37890825d7d025040d591aa833f85f8d8878ed183354f47df", size = 4966512, upload-time = "2025-08-14T16:26:34.621Z" }, + { url = "https://files.pythonhosted.org/packages/a4/26/51ce2e3e0835ffc2562b1b11d1fb9dafd0aca89c9041b64a9e903790a761/fonttools-4.59.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5b9b4c35b3be45e5bc774d3fc9608bbf4f9a8d371103b858c80edbeed31dd5aa", size = 5001645, upload-time = "2025-08-14T16:26:36.876Z" }, + { url = "https://files.pythonhosted.org/packages/36/11/ef0b23f4266349b6d5ccbd1a07b7adc998d5bce925792aa5d1ec33f593e3/fonttools-4.59.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:01158376b8a418a0bae9625c476cebfcfcb5e6761e9d243b219cd58341e7afbb", size = 5113777, upload-time = "2025-08-14T16:26:39.002Z" }, + { url = "https://files.pythonhosted.org/packages/d0/da/b398fe61ef433da0a0472cdb5d4399124f7581ffe1a31b6242c91477d802/fonttools-4.59.1-cp311-cp311-win32.whl", hash = "sha256:cf7c5089d37787387123f1cb8f1793a47c5e1e3d1e4e7bfbc1cc96e0f925eabe", size = 2215076, upload-time = "2025-08-14T16:26:41.196Z" }, + { url = "https://files.pythonhosted.org/packages/94/bd/e2624d06ab94e41c7c77727b2941f1baed7edb647e63503953e6888020c9/fonttools-4.59.1-cp311-cp311-win_amd64.whl", hash = "sha256:c866eef7a0ba320486ade6c32bfc12813d1a5db8567e6904fb56d3d40acc5116", size = 2262779, upload-time = "2025-08-14T16:26:43.483Z" }, + { url = "https://files.pythonhosted.org/packages/ac/fe/6e069cc4cb8881d164a9bd956e9df555bc62d3eb36f6282e43440200009c/fonttools-4.59.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:43ab814bbba5f02a93a152ee61a04182bb5809bd2bc3609f7822e12c53ae2c91", size = 2769172, upload-time = "2025-08-14T16:26:45.729Z" }, + { url = "https://files.pythonhosted.org/packages/b9/98/ec4e03f748fefa0dd72d9d95235aff6fef16601267f4a2340f0e16b9330f/fonttools-4.59.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4f04c3ffbfa0baafcbc550657cf83657034eb63304d27b05cff1653b448ccff6", size = 2337281, upload-time = "2025-08-14T16:26:47.921Z" }, + { url = "https://files.pythonhosted.org/packages/8b/b1/890360a7e3d04a30ba50b267aca2783f4c1364363797e892e78a4f036076/fonttools-4.59.1-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:d601b153e51a5a6221f0d4ec077b6bfc6ac35bfe6c19aeaa233d8990b2b71726", size = 4909215, upload-time = "2025-08-14T16:26:49.682Z" }, + { url = "https://files.pythonhosted.org/packages/8a/ec/2490599550d6c9c97a44c1e36ef4de52d6acf742359eaa385735e30c05c4/fonttools-4.59.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c735e385e30278c54f43a0d056736942023c9043f84ee1021eff9fd616d17693", size = 4951958, upload-time = "2025-08-14T16:26:51.616Z" }, + { url = "https://files.pythonhosted.org/packages/d1/40/bd053f6f7634234a9b9805ff8ae4f32df4f2168bee23cafd1271ba9915a9/fonttools-4.59.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1017413cdc8555dce7ee23720da490282ab7ec1cf022af90a241f33f9a49afc4", size = 4894738, upload-time = "2025-08-14T16:26:53.836Z" }, + { url = "https://files.pythonhosted.org/packages/ac/a1/3cd12a010d288325a7cfcf298a84825f0f9c29b01dee1baba64edfe89257/fonttools-4.59.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5c6d8d773470a5107052874341ed3c487c16ecd179976d81afed89dea5cd7406", size = 5045983, upload-time = "2025-08-14T16:26:56.153Z" }, + { url = "https://files.pythonhosted.org/packages/a2/af/8a2c3f6619cc43cf87951405337cc8460d08a4e717bb05eaa94b335d11dc/fonttools-4.59.1-cp312-cp312-win32.whl", hash = "sha256:2a2d0d33307f6ad3a2086a95dd607c202ea8852fa9fb52af9b48811154d1428a", size = 2203407, upload-time = "2025-08-14T16:26:58.165Z" }, + { url = "https://files.pythonhosted.org/packages/8e/f2/a19b874ddbd3ebcf11d7e25188ef9ac3f68b9219c62263acb34aca8cde05/fonttools-4.59.1-cp312-cp312-win_amd64.whl", hash = "sha256:0b9e4fa7eaf046ed6ac470f6033d52c052481ff7a6e0a92373d14f556f298dc0", size = 2251561, upload-time = "2025-08-14T16:27:00.646Z" }, + { url = "https://files.pythonhosted.org/packages/19/5e/94a4d7f36c36e82f6a81e0064d148542e0ad3e6cf51fc5461ca128f3658d/fonttools-4.59.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:89d9957b54246c6251345297dddf77a84d2c19df96af30d2de24093bbdf0528b", size = 2760192, upload-time = "2025-08-14T16:27:03.024Z" }, + { url = "https://files.pythonhosted.org/packages/ee/a5/f50712fc33ef9d06953c660cefaf8c8fe4b8bc74fa21f44ee5e4f9739439/fonttools-4.59.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8156b11c0d5405810d216f53907bd0f8b982aa5f1e7e3127ab3be1a4062154ff", size = 2332694, upload-time = "2025-08-14T16:27:04.883Z" }, + { url = "https://files.pythonhosted.org/packages/e9/a2/5a9fc21c354bf8613215ce233ab0d933bd17d5ff4c29693636551adbc7b3/fonttools-4.59.1-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8387876a8011caec52d327d5e5bca705d9399ec4b17afb8b431ec50d47c17d23", size = 4889254, upload-time = "2025-08-14T16:27:07.02Z" }, + { url = "https://files.pythonhosted.org/packages/2d/e5/54a6dc811eba018d022ca2e8bd6f2969291f9586ccf9a22a05fc55f91250/fonttools-4.59.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fb13823a74b3a9204a8ed76d3d6d5ec12e64cc5bc44914eb9ff1cdac04facd43", size = 4949109, upload-time = "2025-08-14T16:27:09.3Z" }, + { url = "https://files.pythonhosted.org/packages/db/15/b05c72a248a95bea0fd05fbd95acdf0742945942143fcf961343b7a3663a/fonttools-4.59.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e1ca10da138c300f768bb68e40e5b20b6ecfbd95f91aac4cc15010b6b9d65455", size = 4888428, upload-time = "2025-08-14T16:27:11.514Z" }, + { url = "https://files.pythonhosted.org/packages/63/71/c7d6840f858d695adc0c4371ec45e3fb1c8e060b276ba944e2800495aca4/fonttools-4.59.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2beb5bfc4887a3130f8625349605a3a45fe345655ce6031d1bac11017454b943", size = 5032668, upload-time = "2025-08-14T16:27:13.872Z" }, + { url = "https://files.pythonhosted.org/packages/90/54/57be4aca6f1312e2bc4d811200dd822325794e05bdb26eeff0976edca651/fonttools-4.59.1-cp313-cp313-win32.whl", hash = "sha256:419f16d750d78e6d704bfe97b48bba2f73b15c9418f817d0cb8a9ca87a5b94bf", size = 2201832, upload-time = "2025-08-14T16:27:16.126Z" }, + { url = "https://files.pythonhosted.org/packages/fc/1f/1899a6175a5f900ed8730a0d64f53ca1b596ed7609bfda033cf659114258/fonttools-4.59.1-cp313-cp313-win_amd64.whl", hash = "sha256:c536f8a852e8d3fa71dde1ec03892aee50be59f7154b533f0bf3c1174cfd5126", size = 2250673, upload-time = "2025-08-14T16:27:18.033Z" }, + { url = "https://files.pythonhosted.org/packages/15/07/f6ba82c22f118d9985c37fea65d8d715ca71300d78b6c6e90874dc59f11d/fonttools-4.59.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:d5c3bfdc9663f3d4b565f9cb3b8c1efb3e178186435b45105bde7328cfddd7fe", size = 2758606, upload-time = "2025-08-14T16:27:20.064Z" }, + { url = "https://files.pythonhosted.org/packages/3a/81/84aa3d0ce27b0112c28b67b637ff7a47cf401cf5fbfee6476e4bc9777580/fonttools-4.59.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ea03f1da0d722fe3c2278a05957e6550175571a4894fbf9d178ceef4a3783d2b", size = 2330187, upload-time = "2025-08-14T16:27:22.42Z" }, + { url = "https://files.pythonhosted.org/packages/17/41/b3ba43f78afb321e2e50232c87304c8d0f5ab39b64389b8286cc39cdb824/fonttools-4.59.1-cp314-cp314-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:57a3708ca6bfccb790f585fa6d8f29432ec329618a09ff94c16bcb3c55994643", size = 4832020, upload-time = "2025-08-14T16:27:24.214Z" }, + { url = "https://files.pythonhosted.org/packages/67/b1/3af871c7fb325a68938e7ce544ca48bfd2c6bb7b357f3c8252933b29100a/fonttools-4.59.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:729367c91eb1ee84e61a733acc485065a00590618ca31c438e7dd4d600c01486", size = 4930687, upload-time = "2025-08-14T16:27:26.484Z" }, + { url = "https://files.pythonhosted.org/packages/c5/4f/299fc44646b30d9ef03ffaa78b109c7bd32121f0d8f10009ee73ac4514bc/fonttools-4.59.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8f8ef66ac6db450193ed150e10b3b45dde7aded10c5d279968bc63368027f62b", size = 4875794, upload-time = "2025-08-14T16:27:28.887Z" }, + { url = "https://files.pythonhosted.org/packages/90/cf/a0a3d763ab58f5f81ceff104ddb662fd9da94248694862b9c6cbd509fdd5/fonttools-4.59.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:075f745d539a998cd92cb84c339a82e53e49114ec62aaea8307c80d3ad3aef3a", size = 4985780, upload-time = "2025-08-14T16:27:30.858Z" }, + { url = "https://files.pythonhosted.org/packages/72/c5/ba76511aaae143d89c29cd32ce30bafb61c477e8759a1590b8483f8065f8/fonttools-4.59.1-cp314-cp314-win32.whl", hash = "sha256:c2b0597522d4c5bb18aa5cf258746a2d4a90f25878cbe865e4d35526abd1b9fc", size = 2205610, upload-time = "2025-08-14T16:27:32.578Z" }, + { url = "https://files.pythonhosted.org/packages/a9/65/b250e69d6caf35bc65cddbf608be0662d741c248f2e7503ab01081fc267e/fonttools-4.59.1-cp314-cp314-win_amd64.whl", hash = "sha256:e9ad4ce044e3236f0814c906ccce8647046cc557539661e35211faadf76f283b", size = 2255376, upload-time = "2025-08-14T16:27:34.653Z" }, + { url = "https://files.pythonhosted.org/packages/11/f3/0bc63a23ac0f8175e23d82f85d6ee693fbd849de7ad739f0a3622182ad29/fonttools-4.59.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:652159e8214eb4856e8387ebcd6b6bd336ee258cbeb639c8be52005b122b9609", size = 2826546, upload-time = "2025-08-14T16:27:36.783Z" }, + { url = "https://files.pythonhosted.org/packages/e9/46/a3968205590e068fdf60e926be329a207782576cb584d3b7dcd2d2844957/fonttools-4.59.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:43d177cd0e847ea026fedd9f099dc917da136ed8792d142298a252836390c478", size = 2359771, upload-time = "2025-08-14T16:27:39.678Z" }, + { url = "https://files.pythonhosted.org/packages/b8/ff/d14b4c283879e8cb57862d9624a34fe6522b6fcdd46ccbfc58900958794a/fonttools-4.59.1-cp314-cp314t-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e54437651e1440ee53a95e6ceb6ee440b67a3d348c76f45f4f48de1a5ecab019", size = 4831575, upload-time = "2025-08-14T16:27:41.885Z" }, + { url = "https://files.pythonhosted.org/packages/9c/04/a277d9a584a49d98ca12d3b2c6663bdf333ae97aaa83bd0cdabf7c5a6c84/fonttools-4.59.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6065fdec8ff44c32a483fd44abe5bcdb40dd5e2571a5034b555348f2b3a52cea", size = 5069962, upload-time = "2025-08-14T16:27:44.284Z" }, + { url = "https://files.pythonhosted.org/packages/16/6f/3d2ae69d96c4cdee6dfe7598ca5519a1514487700ca3d7c49c5a1ad65308/fonttools-4.59.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:42052b56d176f8b315fbc09259439c013c0cb2109df72447148aeda677599612", size = 4942926, upload-time = "2025-08-14T16:27:46.523Z" }, + { url = "https://files.pythonhosted.org/packages/0c/d3/c17379e0048d03ce26b38e4ab0e9a98280395b00529e093fe2d663ac0658/fonttools-4.59.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:bcd52eaa5c4c593ae9f447c1d13e7e4a00ca21d755645efa660b6999425b3c88", size = 4958678, upload-time = "2025-08-14T16:27:48.555Z" }, + { url = "https://files.pythonhosted.org/packages/8c/3f/c5543a1540abdfb4d375e3ebeb84de365ab9b153ec14cb7db05f537dd1e7/fonttools-4.59.1-cp314-cp314t-win32.whl", hash = "sha256:02e4fdf27c550dded10fe038a5981c29f81cb9bc649ff2eaa48e80dab8998f97", size = 2266706, upload-time = "2025-08-14T16:27:50.556Z" }, + { url = "https://files.pythonhosted.org/packages/3e/99/85bff6e674226bc8402f983e365f07e76d990e7220ba72bcc738fef52391/fonttools-4.59.1-cp314-cp314t-win_amd64.whl", hash = "sha256:412a5fd6345872a7c249dac5bcce380393f40c1c316ac07f447bc17d51900922", size = 2329994, upload-time = "2025-08-14T16:27:52.36Z" }, + { url = "https://files.pythonhosted.org/packages/0f/64/9d606e66d498917cd7a2ff24f558010d42d6fd4576d9dd57f0bd98333f5a/fonttools-4.59.1-py3-none-any.whl", hash = "sha256:647db657073672a8330608970a984d51573557f328030566521bc03415535042", size = 1130094, upload-time = "2025-08-14T16:28:12.048Z" }, ] [[package]] name = "furo" -version = "2024.8.6" +version = "2025.7.19" source = { registry = "https://pypi.org/simple" } dependencies = [ + { name = "accessible-pygments" }, { name = "beautifulsoup4" }, { name = "pygments" }, { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "sphinx-basic-ng" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a0/e2/d351d69a9a9e4badb4a5be062c2d0e87bd9e6c23b5e57337fef14bef34c8/furo-2024.8.6.tar.gz", hash = "sha256:b63e4cee8abfc3136d3bc03a3d45a76a850bada4d6374d24c1716b0e01394a01", size = 1661506 } +sdist = { url = "https://files.pythonhosted.org/packages/d0/69/312cd100fa45ddaea5a588334d2defa331ff427bcb61f5fe2ae61bdc3762/furo-2025.7.19.tar.gz", hash = "sha256:4164b2cafcf4023a59bb3c594e935e2516f6b9d35e9a5ea83d8f6b43808fe91f", size = 1662054, upload-time = "2025-07-19T10:52:09.754Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/27/48/e791a7ed487dbb9729ef32bb5d1af16693d8925f4366befef54119b2e576/furo-2024.8.6-py3-none-any.whl", hash = "sha256:6cd97c58b47813d3619e63e9081169880fbe331f0ca883c871ff1f3f11814f5c", size = 341333 }, + { url = "https://files.pythonhosted.org/packages/3a/34/2b07b72bee02a63241d654f5d8af87a2de977c59638eec41ca356ab915cd/furo-2025.7.19-py3-none-any.whl", hash = "sha256:bdea869822dfd2b494ea84c0973937e35d1575af088b6721a29c7f7878adc9e3", size = 342175, upload-time = "2025-07-19T10:52:02.399Z" }, ] [[package]] name = "idna" version = "3.10" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490 } +sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490, upload-time = "2024-09-15T18:07:39.745Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 }, + { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442, upload-time = "2024-09-15T18:07:37.964Z" }, ] [[package]] name = "imagesize" version = "1.4.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a7/84/62473fb57d61e31fef6e36d64a179c8781605429fd927b5dd608c997be31/imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a", size = 1280026 } +sdist = { url = "https://files.pythonhosted.org/packages/a7/84/62473fb57d61e31fef6e36d64a179c8781605429fd927b5dd608c997be31/imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a", size = 1280026, upload-time = "2022-07-01T12:21:05.687Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b", size = 8769 }, + { url = "https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b", size = 8769, upload-time = "2022-07-01T12:21:02.467Z" }, ] [[package]] name = "iniconfig" version = "2.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793 } +sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793, upload-time = "2025-03-19T20:09:59.721Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050 }, + { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050, upload-time = "2025-03-19T20:10:01.071Z" }, ] [[package]] @@ -341,179 +388,267 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "markupsafe" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115 } +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899 }, + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" }, ] [[package]] name = "markupsafe" version = "3.0.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/04/90/d08277ce111dd22f77149fd1a5d4653eeb3b3eaacbdfcbae5afb2600eebd/MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8", size = 14357 }, - { url = "https://files.pythonhosted.org/packages/04/e1/6e2194baeae0bca1fae6629dc0cbbb968d4d941469cbab11a3872edff374/MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158", size = 12393 }, - { url = "https://files.pythonhosted.org/packages/1d/69/35fa85a8ece0a437493dc61ce0bb6d459dcba482c34197e3efc829aa357f/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579", size = 21732 }, - { url = "https://files.pythonhosted.org/packages/22/35/137da042dfb4720b638d2937c38a9c2df83fe32d20e8c8f3185dbfef05f7/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d", size = 20866 }, - { url = "https://files.pythonhosted.org/packages/29/28/6d029a903727a1b62edb51863232152fd335d602def598dade38996887f0/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb", size = 20964 }, - { url = "https://files.pythonhosted.org/packages/cc/cd/07438f95f83e8bc028279909d9c9bd39e24149b0d60053a97b2bc4f8aa51/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b", size = 21977 }, - { url = "https://files.pythonhosted.org/packages/29/01/84b57395b4cc062f9c4c55ce0df7d3108ca32397299d9df00fedd9117d3d/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c", size = 21366 }, - { url = "https://files.pythonhosted.org/packages/bd/6e/61ebf08d8940553afff20d1fb1ba7294b6f8d279df9fd0c0db911b4bbcfd/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171", size = 21091 }, - { url = "https://files.pythonhosted.org/packages/11/23/ffbf53694e8c94ebd1e7e491de185124277964344733c45481f32ede2499/MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50", size = 15065 }, - { url = "https://files.pythonhosted.org/packages/44/06/e7175d06dd6e9172d4a69a72592cb3f7a996a9c396eee29082826449bbc3/MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a", size = 15514 }, - { url = "https://files.pythonhosted.org/packages/6b/28/bbf83e3f76936960b850435576dd5e67034e200469571be53f69174a2dfd/MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d", size = 14353 }, - { url = "https://files.pythonhosted.org/packages/6c/30/316d194b093cde57d448a4c3209f22e3046c5bb2fb0820b118292b334be7/MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93", size = 12392 }, - { url = "https://files.pythonhosted.org/packages/f2/96/9cdafba8445d3a53cae530aaf83c38ec64c4d5427d975c974084af5bc5d2/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832", size = 23984 }, - { url = "https://files.pythonhosted.org/packages/f1/a4/aefb044a2cd8d7334c8a47d3fb2c9f328ac48cb349468cc31c20b539305f/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84", size = 23120 }, - { url = "https://files.pythonhosted.org/packages/8d/21/5e4851379f88f3fad1de30361db501300d4f07bcad047d3cb0449fc51f8c/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca", size = 23032 }, - { url = "https://files.pythonhosted.org/packages/00/7b/e92c64e079b2d0d7ddf69899c98842f3f9a60a1ae72657c89ce2655c999d/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798", size = 24057 }, - { url = "https://files.pythonhosted.org/packages/f9/ac/46f960ca323037caa0a10662ef97d0a4728e890334fc156b9f9e52bcc4ca/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e", size = 23359 }, - { url = "https://files.pythonhosted.org/packages/69/84/83439e16197337b8b14b6a5b9c2105fff81d42c2a7c5b58ac7b62ee2c3b1/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4", size = 23306 }, - { url = "https://files.pythonhosted.org/packages/9a/34/a15aa69f01e2181ed8d2b685c0d2f6655d5cca2c4db0ddea775e631918cd/MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d", size = 15094 }, - { url = "https://files.pythonhosted.org/packages/da/b8/3a3bd761922d416f3dc5d00bfbed11f66b1ab89a0c2b6e887240a30b0f6b/MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b", size = 15521 }, - { url = "https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", size = 14274 }, - { url = "https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", size = 12348 }, - { url = "https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", size = 24149 }, - { url = "https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", size = 23118 }, - { url = "https://files.pythonhosted.org/packages/d5/da/f2eeb64c723f5e3777bc081da884b414671982008c47dcc1873d81f625b6/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", size = 22993 }, - { url = "https://files.pythonhosted.org/packages/da/0e/1f32af846df486dce7c227fe0f2398dc7e2e51d4a370508281f3c1c5cddc/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", size = 24178 }, - { url = "https://files.pythonhosted.org/packages/c4/f6/bb3ca0532de8086cbff5f06d137064c8410d10779c4c127e0e47d17c0b71/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", size = 23319 }, - { url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352 }, - { url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097 }, - { url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601 }, - { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274 }, - { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352 }, - { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122 }, - { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085 }, - { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978 }, - { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208 }, - { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357 }, - { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344 }, - { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101 }, - { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603 }, - { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510 }, - { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486 }, - { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480 }, - { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914 }, - { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796 }, - { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473 }, - { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114 }, - { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098 }, - { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208 }, - { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739 }, +sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537, upload-time = "2024-10-18T15:21:54.129Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/90/d08277ce111dd22f77149fd1a5d4653eeb3b3eaacbdfcbae5afb2600eebd/MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8", size = 14357, upload-time = "2024-10-18T15:20:51.44Z" }, + { url = "https://files.pythonhosted.org/packages/04/e1/6e2194baeae0bca1fae6629dc0cbbb968d4d941469cbab11a3872edff374/MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158", size = 12393, upload-time = "2024-10-18T15:20:52.426Z" }, + { url = "https://files.pythonhosted.org/packages/1d/69/35fa85a8ece0a437493dc61ce0bb6d459dcba482c34197e3efc829aa357f/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579", size = 21732, upload-time = "2024-10-18T15:20:53.578Z" }, + { url = "https://files.pythonhosted.org/packages/22/35/137da042dfb4720b638d2937c38a9c2df83fe32d20e8c8f3185dbfef05f7/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d", size = 20866, upload-time = "2024-10-18T15:20:55.06Z" }, + { url = "https://files.pythonhosted.org/packages/29/28/6d029a903727a1b62edb51863232152fd335d602def598dade38996887f0/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb", size = 20964, upload-time = "2024-10-18T15:20:55.906Z" }, + { url = "https://files.pythonhosted.org/packages/cc/cd/07438f95f83e8bc028279909d9c9bd39e24149b0d60053a97b2bc4f8aa51/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b", size = 21977, upload-time = "2024-10-18T15:20:57.189Z" }, + { url = "https://files.pythonhosted.org/packages/29/01/84b57395b4cc062f9c4c55ce0df7d3108ca32397299d9df00fedd9117d3d/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c", size = 21366, upload-time = "2024-10-18T15:20:58.235Z" }, + { url = "https://files.pythonhosted.org/packages/bd/6e/61ebf08d8940553afff20d1fb1ba7294b6f8d279df9fd0c0db911b4bbcfd/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171", size = 21091, upload-time = "2024-10-18T15:20:59.235Z" }, + { url = "https://files.pythonhosted.org/packages/11/23/ffbf53694e8c94ebd1e7e491de185124277964344733c45481f32ede2499/MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50", size = 15065, upload-time = "2024-10-18T15:21:00.307Z" }, + { url = "https://files.pythonhosted.org/packages/44/06/e7175d06dd6e9172d4a69a72592cb3f7a996a9c396eee29082826449bbc3/MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a", size = 15514, upload-time = "2024-10-18T15:21:01.122Z" }, + { url = "https://files.pythonhosted.org/packages/6b/28/bbf83e3f76936960b850435576dd5e67034e200469571be53f69174a2dfd/MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d", size = 14353, upload-time = "2024-10-18T15:21:02.187Z" }, + { url = "https://files.pythonhosted.org/packages/6c/30/316d194b093cde57d448a4c3209f22e3046c5bb2fb0820b118292b334be7/MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93", size = 12392, upload-time = "2024-10-18T15:21:02.941Z" }, + { url = "https://files.pythonhosted.org/packages/f2/96/9cdafba8445d3a53cae530aaf83c38ec64c4d5427d975c974084af5bc5d2/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832", size = 23984, upload-time = "2024-10-18T15:21:03.953Z" }, + { url = "https://files.pythonhosted.org/packages/f1/a4/aefb044a2cd8d7334c8a47d3fb2c9f328ac48cb349468cc31c20b539305f/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84", size = 23120, upload-time = "2024-10-18T15:21:06.495Z" }, + { url = "https://files.pythonhosted.org/packages/8d/21/5e4851379f88f3fad1de30361db501300d4f07bcad047d3cb0449fc51f8c/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca", size = 23032, upload-time = "2024-10-18T15:21:07.295Z" }, + { url = "https://files.pythonhosted.org/packages/00/7b/e92c64e079b2d0d7ddf69899c98842f3f9a60a1ae72657c89ce2655c999d/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798", size = 24057, upload-time = "2024-10-18T15:21:08.073Z" }, + { url = "https://files.pythonhosted.org/packages/f9/ac/46f960ca323037caa0a10662ef97d0a4728e890334fc156b9f9e52bcc4ca/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e", size = 23359, upload-time = "2024-10-18T15:21:09.318Z" }, + { url = "https://files.pythonhosted.org/packages/69/84/83439e16197337b8b14b6a5b9c2105fff81d42c2a7c5b58ac7b62ee2c3b1/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4", size = 23306, upload-time = "2024-10-18T15:21:10.185Z" }, + { url = "https://files.pythonhosted.org/packages/9a/34/a15aa69f01e2181ed8d2b685c0d2f6655d5cca2c4db0ddea775e631918cd/MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d", size = 15094, upload-time = "2024-10-18T15:21:11.005Z" }, + { url = "https://files.pythonhosted.org/packages/da/b8/3a3bd761922d416f3dc5d00bfbed11f66b1ab89a0c2b6e887240a30b0f6b/MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b", size = 15521, upload-time = "2024-10-18T15:21:12.911Z" }, + { url = "https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", size = 14274, upload-time = "2024-10-18T15:21:13.777Z" }, + { url = "https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", size = 12348, upload-time = "2024-10-18T15:21:14.822Z" }, + { url = "https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", size = 24149, upload-time = "2024-10-18T15:21:15.642Z" }, + { url = "https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", size = 23118, upload-time = "2024-10-18T15:21:17.133Z" }, + { url = "https://files.pythonhosted.org/packages/d5/da/f2eeb64c723f5e3777bc081da884b414671982008c47dcc1873d81f625b6/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", size = 22993, upload-time = "2024-10-18T15:21:18.064Z" }, + { url = "https://files.pythonhosted.org/packages/da/0e/1f32af846df486dce7c227fe0f2398dc7e2e51d4a370508281f3c1c5cddc/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", size = 24178, upload-time = "2024-10-18T15:21:18.859Z" }, + { url = "https://files.pythonhosted.org/packages/c4/f6/bb3ca0532de8086cbff5f06d137064c8410d10779c4c127e0e47d17c0b71/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", size = 23319, upload-time = "2024-10-18T15:21:19.671Z" }, + { url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352, upload-time = "2024-10-18T15:21:20.971Z" }, + { url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097, upload-time = "2024-10-18T15:21:22.646Z" }, + { url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601, upload-time = "2024-10-18T15:21:23.499Z" }, + { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274, upload-time = "2024-10-18T15:21:24.577Z" }, + { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352, upload-time = "2024-10-18T15:21:25.382Z" }, + { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122, upload-time = "2024-10-18T15:21:26.199Z" }, + { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085, upload-time = "2024-10-18T15:21:27.029Z" }, + { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978, upload-time = "2024-10-18T15:21:27.846Z" }, + { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208, upload-time = "2024-10-18T15:21:28.744Z" }, + { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357, upload-time = "2024-10-18T15:21:29.545Z" }, + { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344, upload-time = "2024-10-18T15:21:30.366Z" }, + { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101, upload-time = "2024-10-18T15:21:31.207Z" }, + { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603, upload-time = "2024-10-18T15:21:32.032Z" }, + { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510, upload-time = "2024-10-18T15:21:33.625Z" }, + { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486, upload-time = "2024-10-18T15:21:34.611Z" }, + { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480, upload-time = "2024-10-18T15:21:35.398Z" }, + { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914, upload-time = "2024-10-18T15:21:36.231Z" }, + { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796, upload-time = "2024-10-18T15:21:37.073Z" }, + { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473, upload-time = "2024-10-18T15:21:37.932Z" }, + { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114, upload-time = "2024-10-18T15:21:39.799Z" }, + { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098, upload-time = "2024-10-18T15:21:40.813Z" }, + { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208, upload-time = "2024-10-18T15:21:41.814Z" }, + { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739, upload-time = "2024-10-18T15:21:42.784Z" }, ] [[package]] name = "nanoid" version = "2.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b7/9d/0250bf5935d88e214df469d35eccc0f6ff7e9db046fc8a9aeb4b2a192775/nanoid-2.0.0.tar.gz", hash = "sha256:5a80cad5e9c6e9ae3a41fa2fb34ae189f7cb420b2a5d8f82bd9d23466e4efa68", size = 3290 } +sdist = { url = "https://files.pythonhosted.org/packages/b7/9d/0250bf5935d88e214df469d35eccc0f6ff7e9db046fc8a9aeb4b2a192775/nanoid-2.0.0.tar.gz", hash = "sha256:5a80cad5e9c6e9ae3a41fa2fb34ae189f7cb420b2a5d8f82bd9d23466e4efa68", size = 3290, upload-time = "2018-11-20T14:45:51.578Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2e/0d/8630f13998638dc01e187fadd2e5c6d42d127d08aeb4943d231664d6e539/nanoid-2.0.0-py3-none-any.whl", hash = "sha256:90aefa650e328cffb0893bbd4c236cfd44c48bc1f2d0b525ecc53c3187b653bb", size = 5844 }, + { url = "https://files.pythonhosted.org/packages/2e/0d/8630f13998638dc01e187fadd2e5c6d42d127d08aeb4943d231664d6e539/nanoid-2.0.0-py3-none-any.whl", hash = "sha256:90aefa650e328cffb0893bbd4c236cfd44c48bc1f2d0b525ecc53c3187b653bb", size = 5844, upload-time = "2018-11-20T14:45:50.165Z" }, ] [[package]] name = "numpy" -version = "2.2.5" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/dc/b2/ce4b867d8cd9c0ee84938ae1e6a6f7926ebf928c9090d036fc3c6a04f946/numpy-2.2.5.tar.gz", hash = "sha256:a9c0d994680cd991b1cb772e8b297340085466a6fe964bc9d4e80f5e2f43c291", size = 20273920 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ef/4e/3d9e6d16237c2aa5485695f0626cbba82f6481efca2e9132368dea3b885e/numpy-2.2.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1f4a922da1729f4c40932b2af4fe84909c7a6e167e6e99f71838ce3a29f3fe26", size = 21252117 }, - { url = "https://files.pythonhosted.org/packages/38/e4/db91349d4079cd15c02ff3b4b8882a529991d6aca077db198a2f2a670406/numpy-2.2.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b6f91524d31b34f4a5fee24f5bc16dcd1491b668798b6d85585d836c1e633a6a", size = 14424615 }, - { url = "https://files.pythonhosted.org/packages/f8/59/6e5b011f553c37b008bd115c7ba7106a18f372588fbb1b430b7a5d2c41ce/numpy-2.2.5-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:19f4718c9012e3baea91a7dba661dcab2451cda2550678dc30d53acb91a7290f", size = 5428691 }, - { url = "https://files.pythonhosted.org/packages/a2/58/d5d70ebdac82b3a6ddf409b3749ca5786636e50fd64d60edb46442af6838/numpy-2.2.5-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:eb7fd5b184e5d277afa9ec0ad5e4eb562ecff541e7f60e69ee69c8d59e9aeaba", size = 6965010 }, - { url = "https://files.pythonhosted.org/packages/dc/a8/c290394be346d4e7b48a40baf292626fd96ec56a6398ace4c25d9079bc6a/numpy-2.2.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6413d48a9be53e183eb06495d8e3b006ef8f87c324af68241bbe7a39e8ff54c3", size = 14369885 }, - { url = "https://files.pythonhosted.org/packages/c2/70/fed13c70aabe7049368553e81d7ca40f305f305800a007a956d7cd2e5476/numpy-2.2.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7451f92eddf8503c9b8aa4fe6aa7e87fd51a29c2cfc5f7dbd72efde6c65acf57", size = 16418372 }, - { url = "https://files.pythonhosted.org/packages/04/ab/c3c14f25ddaecd6fc58a34858f6a93a21eea6c266ba162fa99f3d0de12ac/numpy-2.2.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0bcb1d057b7571334139129b7f941588f69ce7c4ed15a9d6162b2ea54ded700c", size = 15883173 }, - { url = "https://files.pythonhosted.org/packages/50/18/f53710a19042911c7aca824afe97c203728a34b8cf123e2d94621a12edc3/numpy-2.2.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:36ab5b23915887543441efd0417e6a3baa08634308894316f446027611b53bf1", size = 18206881 }, - { url = "https://files.pythonhosted.org/packages/6b/ec/5b407bab82f10c65af5a5fe754728df03f960fd44d27c036b61f7b3ef255/numpy-2.2.5-cp310-cp310-win32.whl", hash = "sha256:422cc684f17bc963da5f59a31530b3936f57c95a29743056ef7a7903a5dbdf88", size = 6609852 }, - { url = "https://files.pythonhosted.org/packages/b6/f5/467ca8675c7e6c567f571d8db942cc10a87588bd9e20a909d8af4171edda/numpy-2.2.5-cp310-cp310-win_amd64.whl", hash = "sha256:e4f0b035d9d0ed519c813ee23e0a733db81ec37d2e9503afbb6e54ccfdee0fa7", size = 12944922 }, - { url = "https://files.pythonhosted.org/packages/f5/fb/e4e4c254ba40e8f0c78218f9e86304628c75b6900509b601c8433bdb5da7/numpy-2.2.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c42365005c7a6c42436a54d28c43fe0e01ca11eb2ac3cefe796c25a5f98e5e9b", size = 21256475 }, - { url = "https://files.pythonhosted.org/packages/81/32/dd1f7084f5c10b2caad778258fdaeedd7fbd8afcd2510672811e6138dfac/numpy-2.2.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:498815b96f67dc347e03b719ef49c772589fb74b8ee9ea2c37feae915ad6ebda", size = 14461474 }, - { url = "https://files.pythonhosted.org/packages/0e/65/937cdf238ef6ac54ff749c0f66d9ee2b03646034c205cea9b6c51f2f3ad1/numpy-2.2.5-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:6411f744f7f20081b1b4e7112e0f4c9c5b08f94b9f086e6f0adf3645f85d3a4d", size = 5426875 }, - { url = "https://files.pythonhosted.org/packages/25/17/814515fdd545b07306eaee552b65c765035ea302d17de1b9cb50852d2452/numpy-2.2.5-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:9de6832228f617c9ef45d948ec1cd8949c482238d68b2477e6f642c33a7b0a54", size = 6969176 }, - { url = "https://files.pythonhosted.org/packages/e5/32/a66db7a5c8b5301ec329ab36d0ecca23f5e18907f43dbd593c8ec326d57c/numpy-2.2.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:369e0d4647c17c9363244f3468f2227d557a74b6781cb62ce57cf3ef5cc7c610", size = 14374850 }, - { url = "https://files.pythonhosted.org/packages/ad/c9/1bf6ada582eebcbe8978f5feb26584cd2b39f94ededeea034ca8f84af8c8/numpy-2.2.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:262d23f383170f99cd9191a7c85b9a50970fe9069b2f8ab5d786eca8a675d60b", size = 16430306 }, - { url = "https://files.pythonhosted.org/packages/6a/f0/3f741863f29e128f4fcfdb99253cc971406b402b4584663710ee07f5f7eb/numpy-2.2.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:aa70fdbdc3b169d69e8c59e65c07a1c9351ceb438e627f0fdcd471015cd956be", size = 15884767 }, - { url = "https://files.pythonhosted.org/packages/98/d9/4ccd8fd6410f7bf2d312cbc98892e0e43c2fcdd1deae293aeb0a93b18071/numpy-2.2.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37e32e985f03c06206582a7323ef926b4e78bdaa6915095ef08070471865b906", size = 18219515 }, - { url = "https://files.pythonhosted.org/packages/b1/56/783237243d4395c6dd741cf16eeb1a9035ee3d4310900e6b17e875d1b201/numpy-2.2.5-cp311-cp311-win32.whl", hash = "sha256:f5045039100ed58fa817a6227a356240ea1b9a1bc141018864c306c1a16d4175", size = 6607842 }, - { url = "https://files.pythonhosted.org/packages/98/89/0c93baaf0094bdaaaa0536fe61a27b1dce8a505fa262a865ec142208cfe9/numpy-2.2.5-cp311-cp311-win_amd64.whl", hash = "sha256:b13f04968b46ad705f7c8a80122a42ae8f620536ea38cf4bdd374302926424dd", size = 12949071 }, - { url = "https://files.pythonhosted.org/packages/e2/f7/1fd4ff108cd9d7ef929b8882692e23665dc9c23feecafbb9c6b80f4ec583/numpy-2.2.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ee461a4eaab4f165b68780a6a1af95fb23a29932be7569b9fab666c407969051", size = 20948633 }, - { url = "https://files.pythonhosted.org/packages/12/03/d443c278348371b20d830af155ff2079acad6a9e60279fac2b41dbbb73d8/numpy-2.2.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ec31367fd6a255dc8de4772bd1658c3e926d8e860a0b6e922b615e532d320ddc", size = 14176123 }, - { url = "https://files.pythonhosted.org/packages/2b/0b/5ca264641d0e7b14393313304da48b225d15d471250376f3fbdb1a2be603/numpy-2.2.5-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:47834cde750d3c9f4e52c6ca28a7361859fcaf52695c7dc3cc1a720b8922683e", size = 5163817 }, - { url = "https://files.pythonhosted.org/packages/04/b3/d522672b9e3d28e26e1613de7675b441bbd1eaca75db95680635dd158c67/numpy-2.2.5-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:2c1a1c6ccce4022383583a6ded7bbcda22fc635eb4eb1e0a053336425ed36dfa", size = 6698066 }, - { url = "https://files.pythonhosted.org/packages/a0/93/0f7a75c1ff02d4b76df35079676b3b2719fcdfb39abdf44c8b33f43ef37d/numpy-2.2.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d75f338f5f79ee23548b03d801d28a505198297534f62416391857ea0479571", size = 14087277 }, - { url = "https://files.pythonhosted.org/packages/b0/d9/7c338b923c53d431bc837b5b787052fef9ae68a56fe91e325aac0d48226e/numpy-2.2.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a801fef99668f309b88640e28d261991bfad9617c27beda4a3aec4f217ea073", size = 16135742 }, - { url = "https://files.pythonhosted.org/packages/2d/10/4dec9184a5d74ba9867c6f7d1e9f2e0fb5fe96ff2bf50bb6f342d64f2003/numpy-2.2.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:abe38cd8381245a7f49967a6010e77dbf3680bd3627c0fe4362dd693b404c7f8", size = 15581825 }, - { url = "https://files.pythonhosted.org/packages/80/1f/2b6fcd636e848053f5b57712a7d1880b1565eec35a637fdfd0a30d5e738d/numpy-2.2.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5a0ac90e46fdb5649ab6369d1ab6104bfe5854ab19b645bf5cda0127a13034ae", size = 17899600 }, - { url = "https://files.pythonhosted.org/packages/ec/87/36801f4dc2623d76a0a3835975524a84bd2b18fe0f8835d45c8eae2f9ff2/numpy-2.2.5-cp312-cp312-win32.whl", hash = "sha256:0cd48122a6b7eab8f06404805b1bd5856200e3ed6f8a1b9a194f9d9054631beb", size = 6312626 }, - { url = "https://files.pythonhosted.org/packages/8b/09/4ffb4d6cfe7ca6707336187951992bd8a8b9142cf345d87ab858d2d7636a/numpy-2.2.5-cp312-cp312-win_amd64.whl", hash = "sha256:ced69262a8278547e63409b2653b372bf4baff0870c57efa76c5703fd6543282", size = 12645715 }, - { url = "https://files.pythonhosted.org/packages/e2/a0/0aa7f0f4509a2e07bd7a509042967c2fab635690d4f48c6c7b3afd4f448c/numpy-2.2.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:059b51b658f4414fff78c6d7b1b4e18283ab5fa56d270ff212d5ba0c561846f4", size = 20935102 }, - { url = "https://files.pythonhosted.org/packages/7e/e4/a6a9f4537542912ec513185396fce52cdd45bdcf3e9d921ab02a93ca5aa9/numpy-2.2.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:47f9ed103af0bc63182609044b0490747e03bd20a67e391192dde119bf43d52f", size = 14191709 }, - { url = "https://files.pythonhosted.org/packages/be/65/72f3186b6050bbfe9c43cb81f9df59ae63603491d36179cf7a7c8d216758/numpy-2.2.5-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:261a1ef047751bb02f29dfe337230b5882b54521ca121fc7f62668133cb119c9", size = 5149173 }, - { url = "https://files.pythonhosted.org/packages/e5/e9/83e7a9432378dde5802651307ae5e9ea07bb72b416728202218cd4da2801/numpy-2.2.5-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:4520caa3807c1ceb005d125a75e715567806fed67e315cea619d5ec6e75a4191", size = 6684502 }, - { url = "https://files.pythonhosted.org/packages/ea/27/b80da6c762394c8ee516b74c1f686fcd16c8f23b14de57ba0cad7349d1d2/numpy-2.2.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d14b17b9be5f9c9301f43d2e2a4886a33b53f4e6fdf9ca2f4cc60aeeee76372", size = 14084417 }, - { url = "https://files.pythonhosted.org/packages/aa/fc/ebfd32c3e124e6a1043e19c0ab0769818aa69050ce5589b63d05ff185526/numpy-2.2.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ba321813a00e508d5421104464510cc962a6f791aa2fca1c97b1e65027da80d", size = 16133807 }, - { url = "https://files.pythonhosted.org/packages/bf/9b/4cc171a0acbe4666f7775cfd21d4eb6bb1d36d3a0431f48a73e9212d2278/numpy-2.2.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4cbdef3ddf777423060c6f81b5694bad2dc9675f110c4b2a60dc0181543fac7", size = 15575611 }, - { url = "https://files.pythonhosted.org/packages/a3/45/40f4135341850df48f8edcf949cf47b523c404b712774f8855a64c96ef29/numpy-2.2.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:54088a5a147ab71a8e7fdfd8c3601972751ded0739c6b696ad9cb0343e21ab73", size = 17895747 }, - { url = "https://files.pythonhosted.org/packages/f8/4c/b32a17a46f0ffbde8cc82df6d3daeaf4f552e346df143e1b188a701a8f09/numpy-2.2.5-cp313-cp313-win32.whl", hash = "sha256:c8b82a55ef86a2d8e81b63da85e55f5537d2157165be1cb2ce7cfa57b6aef38b", size = 6309594 }, - { url = "https://files.pythonhosted.org/packages/13/ae/72e6276feb9ef06787365b05915bfdb057d01fceb4a43cb80978e518d79b/numpy-2.2.5-cp313-cp313-win_amd64.whl", hash = "sha256:d8882a829fd779f0f43998e931c466802a77ca1ee0fe25a3abe50278616b1471", size = 12638356 }, - { url = "https://files.pythonhosted.org/packages/79/56/be8b85a9f2adb688e7ded6324e20149a03541d2b3297c3ffc1a73f46dedb/numpy-2.2.5-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:e8b025c351b9f0e8b5436cf28a07fa4ac0204d67b38f01433ac7f9b870fa38c6", size = 20963778 }, - { url = "https://files.pythonhosted.org/packages/ff/77/19c5e62d55bff507a18c3cdff82e94fe174957bad25860a991cac719d3ab/numpy-2.2.5-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8dfa94b6a4374e7851bbb6f35e6ded2120b752b063e6acdd3157e4d2bb922eba", size = 14207279 }, - { url = "https://files.pythonhosted.org/packages/75/22/aa11f22dc11ff4ffe4e849d9b63bbe8d4ac6d5fae85ddaa67dfe43be3e76/numpy-2.2.5-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:97c8425d4e26437e65e1d189d22dff4a079b747ff9c2788057bfb8114ce1e133", size = 5199247 }, - { url = "https://files.pythonhosted.org/packages/4f/6c/12d5e760fc62c08eded0394f62039f5a9857f758312bf01632a81d841459/numpy-2.2.5-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:352d330048c055ea6db701130abc48a21bec690a8d38f8284e00fab256dc1376", size = 6711087 }, - { url = "https://files.pythonhosted.org/packages/ef/94/ece8280cf4218b2bee5cec9567629e61e51b4be501e5c6840ceb593db945/numpy-2.2.5-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b4c0773b6ada798f51f0f8e30c054d32304ccc6e9c5d93d46cb26f3d385ab19", size = 14059964 }, - { url = "https://files.pythonhosted.org/packages/39/41/c5377dac0514aaeec69115830a39d905b1882819c8e65d97fc60e177e19e/numpy-2.2.5-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:55f09e00d4dccd76b179c0f18a44f041e5332fd0e022886ba1c0bbf3ea4a18d0", size = 16121214 }, - { url = "https://files.pythonhosted.org/packages/db/54/3b9f89a943257bc8e187145c6bc0eb8e3d615655f7b14e9b490b053e8149/numpy-2.2.5-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:02f226baeefa68f7d579e213d0f3493496397d8f1cff5e2b222af274c86a552a", size = 15575788 }, - { url = "https://files.pythonhosted.org/packages/b1/c4/2e407e85df35b29f79945751b8f8e671057a13a376497d7fb2151ba0d290/numpy-2.2.5-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c26843fd58f65da9491165072da2cccc372530681de481ef670dcc8e27cfb066", size = 17893672 }, - { url = "https://files.pythonhosted.org/packages/29/7e/d0b44e129d038dba453f00d0e29ebd6eaf2f06055d72b95b9947998aca14/numpy-2.2.5-cp313-cp313t-win32.whl", hash = "sha256:1a161c2c79ab30fe4501d5a2bbfe8b162490757cf90b7f05be8b80bc02f7bb8e", size = 6377102 }, - { url = "https://files.pythonhosted.org/packages/63/be/b85e4aa4bf42c6502851b971f1c326d583fcc68227385f92089cf50a7b45/numpy-2.2.5-cp313-cp313t-win_amd64.whl", hash = "sha256:d403c84991b5ad291d3809bace5e85f4bbf44a04bdc9a88ed2bb1807b3360bb8", size = 12750096 }, - { url = "https://files.pythonhosted.org/packages/35/e4/5ef5ef1d4308f96961198b2323bfc7c7afb0ccc0d623b01c79bc87ab496d/numpy-2.2.5-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b4ea7e1cff6784e58fe281ce7e7f05036b3e1c89c6f922a6bfbc0a7e8768adbe", size = 21083404 }, - { url = "https://files.pythonhosted.org/packages/a3/5f/bde9238e8e977652a16a4b114ed8aa8bb093d718c706eeecb5f7bfa59572/numpy-2.2.5-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:d7543263084a85fbc09c704b515395398d31d6395518446237eac219eab9e55e", size = 6828578 }, - { url = "https://files.pythonhosted.org/packages/ef/7f/813f51ed86e559ab2afb6a6f33aa6baf8a560097e25e4882a938986c76c2/numpy-2.2.5-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0255732338c4fdd00996c0421884ea8a3651eea555c3a56b84892b66f696eb70", size = 16234796 }, - { url = "https://files.pythonhosted.org/packages/68/67/1175790323026d3337cc285cc9c50eca637d70472b5e622529df74bb8f37/numpy-2.2.5-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d2e3bdadaba0e040d1e7ab39db73e0afe2c74ae277f5614dad53eadbecbbb169", size = 12859001 }, +version = "2.2.6" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11'", +] +sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440, upload-time = "2025-05-17T22:38:04.611Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/3e/ed6db5be21ce87955c0cbd3009f2803f59fa08df21b5df06862e2d8e2bdd/numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb", size = 21165245, upload-time = "2025-05-17T21:27:58.555Z" }, + { url = "https://files.pythonhosted.org/packages/22/c2/4b9221495b2a132cc9d2eb862e21d42a009f5a60e45fc44b00118c174bff/numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90", size = 14360048, upload-time = "2025-05-17T21:28:21.406Z" }, + { url = "https://files.pythonhosted.org/packages/fd/77/dc2fcfc66943c6410e2bf598062f5959372735ffda175b39906d54f02349/numpy-2.2.6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:37e990a01ae6ec7fe7fa1c26c55ecb672dd98b19c3d0e1d1f326fa13cb38d163", size = 5340542, upload-time = "2025-05-17T21:28:30.931Z" }, + { url = "https://files.pythonhosted.org/packages/7a/4f/1cb5fdc353a5f5cc7feb692db9b8ec2c3d6405453f982435efc52561df58/numpy-2.2.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:5a6429d4be8ca66d889b7cf70f536a397dc45ba6faeb5f8c5427935d9592e9cf", size = 6878301, upload-time = "2025-05-17T21:28:41.613Z" }, + { url = "https://files.pythonhosted.org/packages/eb/17/96a3acd228cec142fcb8723bd3cc39c2a474f7dcf0a5d16731980bcafa95/numpy-2.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efd28d4e9cd7d7a8d39074a4d44c63eda73401580c5c76acda2ce969e0a38e83", size = 14297320, upload-time = "2025-05-17T21:29:02.78Z" }, + { url = "https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915", size = 16801050, upload-time = "2025-05-17T21:29:27.675Z" }, + { url = "https://files.pythonhosted.org/packages/07/b6/89d837eddef52b3d0cec5c6ba0456c1bf1b9ef6a6672fc2b7873c3ec4e2e/numpy-2.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74d4531beb257d2c3f4b261bfb0fc09e0f9ebb8842d82a7b4209415896adc680", size = 15807034, upload-time = "2025-05-17T21:29:51.102Z" }, + { url = "https://files.pythonhosted.org/packages/01/c8/dc6ae86e3c61cfec1f178e5c9f7858584049b6093f843bca541f94120920/numpy-2.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8fc377d995680230e83241d8a96def29f204b5782f371c532579b4f20607a289", size = 18614185, upload-time = "2025-05-17T21:30:18.703Z" }, + { url = "https://files.pythonhosted.org/packages/5b/c5/0064b1b7e7c89137b471ccec1fd2282fceaae0ab3a9550f2568782d80357/numpy-2.2.6-cp310-cp310-win32.whl", hash = "sha256:b093dd74e50a8cba3e873868d9e93a85b78e0daf2e98c6797566ad8044e8363d", size = 6527149, upload-time = "2025-05-17T21:30:29.788Z" }, + { url = "https://files.pythonhosted.org/packages/a3/dd/4b822569d6b96c39d1215dbae0582fd99954dcbcf0c1a13c61783feaca3f/numpy-2.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3", size = 12904620, upload-time = "2025-05-17T21:30:48.994Z" }, + { url = "https://files.pythonhosted.org/packages/da/a8/4f83e2aa666a9fbf56d6118faaaf5f1974d456b1823fda0a176eff722839/numpy-2.2.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f9f1adb22318e121c5c69a09142811a201ef17ab257a1e66ca3025065b7f53ae", size = 21176963, upload-time = "2025-05-17T21:31:19.36Z" }, + { url = "https://files.pythonhosted.org/packages/b3/2b/64e1affc7972decb74c9e29e5649fac940514910960ba25cd9af4488b66c/numpy-2.2.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c820a93b0255bc360f53eca31a0e676fd1101f673dda8da93454a12e23fc5f7a", size = 14406743, upload-time = "2025-05-17T21:31:41.087Z" }, + { url = "https://files.pythonhosted.org/packages/4a/9f/0121e375000b5e50ffdd8b25bf78d8e1a5aa4cca3f185d41265198c7b834/numpy-2.2.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3d70692235e759f260c3d837193090014aebdf026dfd167834bcba43e30c2a42", size = 5352616, upload-time = "2025-05-17T21:31:50.072Z" }, + { url = "https://files.pythonhosted.org/packages/31/0d/b48c405c91693635fbe2dcd7bc84a33a602add5f63286e024d3b6741411c/numpy-2.2.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:481b49095335f8eed42e39e8041327c05b0f6f4780488f61286ed3c01368d491", size = 6889579, upload-time = "2025-05-17T21:32:01.712Z" }, + { url = "https://files.pythonhosted.org/packages/52/b8/7f0554d49b565d0171eab6e99001846882000883998e7b7d9f0d98b1f934/numpy-2.2.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b64d8d4d17135e00c8e346e0a738deb17e754230d7e0810ac5012750bbd85a5a", size = 14312005, upload-time = "2025-05-17T21:32:23.332Z" }, + { url = "https://files.pythonhosted.org/packages/b3/dd/2238b898e51bd6d389b7389ffb20d7f4c10066d80351187ec8e303a5a475/numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba10f8411898fc418a521833e014a77d3ca01c15b0c6cdcce6a0d2897e6dbbdf", size = 16821570, upload-time = "2025-05-17T21:32:47.991Z" }, + { url = "https://files.pythonhosted.org/packages/83/6c/44d0325722cf644f191042bf47eedad61c1e6df2432ed65cbe28509d404e/numpy-2.2.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bd48227a919f1bafbdda0583705e547892342c26fb127219d60a5c36882609d1", size = 15818548, upload-time = "2025-05-17T21:33:11.728Z" }, + { url = "https://files.pythonhosted.org/packages/ae/9d/81e8216030ce66be25279098789b665d49ff19eef08bfa8cb96d4957f422/numpy-2.2.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9551a499bf125c1d4f9e250377c1ee2eddd02e01eac6644c080162c0c51778ab", size = 18620521, upload-time = "2025-05-17T21:33:39.139Z" }, + { url = "https://files.pythonhosted.org/packages/6a/fd/e19617b9530b031db51b0926eed5345ce8ddc669bb3bc0044b23e275ebe8/numpy-2.2.6-cp311-cp311-win32.whl", hash = "sha256:0678000bb9ac1475cd454c6b8c799206af8107e310843532b04d49649c717a47", size = 6525866, upload-time = "2025-05-17T21:33:50.273Z" }, + { url = "https://files.pythonhosted.org/packages/31/0a/f354fb7176b81747d870f7991dc763e157a934c717b67b58456bc63da3df/numpy-2.2.6-cp311-cp311-win_amd64.whl", hash = "sha256:e8213002e427c69c45a52bbd94163084025f533a55a59d6f9c5b820774ef3303", size = 12907455, upload-time = "2025-05-17T21:34:09.135Z" }, + { url = "https://files.pythonhosted.org/packages/82/5d/c00588b6cf18e1da539b45d3598d3557084990dcc4331960c15ee776ee41/numpy-2.2.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:41c5a21f4a04fa86436124d388f6ed60a9343a6f767fced1a8a71c3fbca038ff", size = 20875348, upload-time = "2025-05-17T21:34:39.648Z" }, + { url = "https://files.pythonhosted.org/packages/66/ee/560deadcdde6c2f90200450d5938f63a34b37e27ebff162810f716f6a230/numpy-2.2.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:de749064336d37e340f640b05f24e9e3dd678c57318c7289d222a8a2f543e90c", size = 14119362, upload-time = "2025-05-17T21:35:01.241Z" }, + { url = "https://files.pythonhosted.org/packages/3c/65/4baa99f1c53b30adf0acd9a5519078871ddde8d2339dc5a7fde80d9d87da/numpy-2.2.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:894b3a42502226a1cac872f840030665f33326fc3dac8e57c607905773cdcde3", size = 5084103, upload-time = "2025-05-17T21:35:10.622Z" }, + { url = "https://files.pythonhosted.org/packages/cc/89/e5a34c071a0570cc40c9a54eb472d113eea6d002e9ae12bb3a8407fb912e/numpy-2.2.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:71594f7c51a18e728451bb50cc60a3ce4e6538822731b2933209a1f3614e9282", size = 6625382, upload-time = "2025-05-17T21:35:21.414Z" }, + { url = "https://files.pythonhosted.org/packages/f8/35/8c80729f1ff76b3921d5c9487c7ac3de9b2a103b1cd05e905b3090513510/numpy-2.2.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2618db89be1b4e05f7a1a847a9c1c0abd63e63a1607d892dd54668dd92faf87", size = 14018462, upload-time = "2025-05-17T21:35:42.174Z" }, + { url = "https://files.pythonhosted.org/packages/8c/3d/1e1db36cfd41f895d266b103df00ca5b3cbe965184df824dec5c08c6b803/numpy-2.2.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd83c01228a688733f1ded5201c678f0c53ecc1006ffbc404db9f7a899ac6249", size = 16527618, upload-time = "2025-05-17T21:36:06.711Z" }, + { url = "https://files.pythonhosted.org/packages/61/c6/03ed30992602c85aa3cd95b9070a514f8b3c33e31124694438d88809ae36/numpy-2.2.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:37c0ca431f82cd5fa716eca9506aefcabc247fb27ba69c5062a6d3ade8cf8f49", size = 15505511, upload-time = "2025-05-17T21:36:29.965Z" }, + { url = "https://files.pythonhosted.org/packages/b7/25/5761d832a81df431e260719ec45de696414266613c9ee268394dd5ad8236/numpy-2.2.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fe27749d33bb772c80dcd84ae7e8df2adc920ae8297400dabec45f0dedb3f6de", size = 18313783, upload-time = "2025-05-17T21:36:56.883Z" }, + { url = "https://files.pythonhosted.org/packages/57/0a/72d5a3527c5ebffcd47bde9162c39fae1f90138c961e5296491ce778e682/numpy-2.2.6-cp312-cp312-win32.whl", hash = "sha256:4eeaae00d789f66c7a25ac5f34b71a7035bb474e679f410e5e1a94deb24cf2d4", size = 6246506, upload-time = "2025-05-17T21:37:07.368Z" }, + { url = "https://files.pythonhosted.org/packages/36/fa/8c9210162ca1b88529ab76b41ba02d433fd54fecaf6feb70ef9f124683f1/numpy-2.2.6-cp312-cp312-win_amd64.whl", hash = "sha256:c1f9540be57940698ed329904db803cf7a402f3fc200bfe599334c9bd84a40b2", size = 12614190, upload-time = "2025-05-17T21:37:26.213Z" }, + { url = "https://files.pythonhosted.org/packages/f9/5c/6657823f4f594f72b5471f1db1ab12e26e890bb2e41897522d134d2a3e81/numpy-2.2.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0811bb762109d9708cca4d0b13c4f67146e3c3b7cf8d34018c722adb2d957c84", size = 20867828, upload-time = "2025-05-17T21:37:56.699Z" }, + { url = "https://files.pythonhosted.org/packages/dc/9e/14520dc3dadf3c803473bd07e9b2bd1b69bc583cb2497b47000fed2fa92f/numpy-2.2.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:287cc3162b6f01463ccd86be154f284d0893d2b3ed7292439ea97eafa8170e0b", size = 14143006, upload-time = "2025-05-17T21:38:18.291Z" }, + { url = "https://files.pythonhosted.org/packages/4f/06/7e96c57d90bebdce9918412087fc22ca9851cceaf5567a45c1f404480e9e/numpy-2.2.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f1372f041402e37e5e633e586f62aa53de2eac8d98cbfb822806ce4bbefcb74d", size = 5076765, upload-time = "2025-05-17T21:38:27.319Z" }, + { url = "https://files.pythonhosted.org/packages/73/ed/63d920c23b4289fdac96ddbdd6132e9427790977d5457cd132f18e76eae0/numpy-2.2.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:55a4d33fa519660d69614a9fad433be87e5252f4b03850642f88993f7b2ca566", size = 6617736, upload-time = "2025-05-17T21:38:38.141Z" }, + { url = "https://files.pythonhosted.org/packages/85/c5/e19c8f99d83fd377ec8c7e0cf627a8049746da54afc24ef0a0cb73d5dfb5/numpy-2.2.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f92729c95468a2f4f15e9bb94c432a9229d0d50de67304399627a943201baa2f", size = 14010719, upload-time = "2025-05-17T21:38:58.433Z" }, + { url = "https://files.pythonhosted.org/packages/19/49/4df9123aafa7b539317bf6d342cb6d227e49f7a35b99c287a6109b13dd93/numpy-2.2.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bc23a79bfabc5d056d106f9befb8d50c31ced2fbc70eedb8155aec74a45798f", size = 16526072, upload-time = "2025-05-17T21:39:22.638Z" }, + { url = "https://files.pythonhosted.org/packages/b2/6c/04b5f47f4f32f7c2b0e7260442a8cbcf8168b0e1a41ff1495da42f42a14f/numpy-2.2.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e3143e4451880bed956e706a3220b4e5cf6172ef05fcc397f6f36a550b1dd868", size = 15503213, upload-time = "2025-05-17T21:39:45.865Z" }, + { url = "https://files.pythonhosted.org/packages/17/0a/5cd92e352c1307640d5b6fec1b2ffb06cd0dabe7d7b8227f97933d378422/numpy-2.2.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b4f13750ce79751586ae2eb824ba7e1e8dba64784086c98cdbbcc6a42112ce0d", size = 18316632, upload-time = "2025-05-17T21:40:13.331Z" }, + { url = "https://files.pythonhosted.org/packages/f0/3b/5cba2b1d88760ef86596ad0f3d484b1cbff7c115ae2429678465057c5155/numpy-2.2.6-cp313-cp313-win32.whl", hash = "sha256:5beb72339d9d4fa36522fc63802f469b13cdbe4fdab4a288f0c441b74272ebfd", size = 6244532, upload-time = "2025-05-17T21:43:46.099Z" }, + { url = "https://files.pythonhosted.org/packages/cb/3b/d58c12eafcb298d4e6d0d40216866ab15f59e55d148a5658bb3132311fcf/numpy-2.2.6-cp313-cp313-win_amd64.whl", hash = "sha256:b0544343a702fa80c95ad5d3d608ea3599dd54d4632df855e4c8d24eb6ecfa1c", size = 12610885, upload-time = "2025-05-17T21:44:05.145Z" }, + { url = "https://files.pythonhosted.org/packages/6b/9e/4bf918b818e516322db999ac25d00c75788ddfd2d2ade4fa66f1f38097e1/numpy-2.2.6-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0bca768cd85ae743b2affdc762d617eddf3bcf8724435498a1e80132d04879e6", size = 20963467, upload-time = "2025-05-17T21:40:44Z" }, + { url = "https://files.pythonhosted.org/packages/61/66/d2de6b291507517ff2e438e13ff7b1e2cdbdb7cb40b3ed475377aece69f9/numpy-2.2.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fc0c5673685c508a142ca65209b4e79ed6740a4ed6b2267dbba90f34b0b3cfda", size = 14225144, upload-time = "2025-05-17T21:41:05.695Z" }, + { url = "https://files.pythonhosted.org/packages/e4/25/480387655407ead912e28ba3a820bc69af9adf13bcbe40b299d454ec011f/numpy-2.2.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:5bd4fc3ac8926b3819797a7c0e2631eb889b4118a9898c84f585a54d475b7e40", size = 5200217, upload-time = "2025-05-17T21:41:15.903Z" }, + { url = "https://files.pythonhosted.org/packages/aa/4a/6e313b5108f53dcbf3aca0c0f3e9c92f4c10ce57a0a721851f9785872895/numpy-2.2.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:fee4236c876c4e8369388054d02d0e9bb84821feb1a64dd59e137e6511a551f8", size = 6712014, upload-time = "2025-05-17T21:41:27.321Z" }, + { url = "https://files.pythonhosted.org/packages/b7/30/172c2d5c4be71fdf476e9de553443cf8e25feddbe185e0bd88b096915bcc/numpy-2.2.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1dda9c7e08dc141e0247a5b8f49cf05984955246a327d4c48bda16821947b2f", size = 14077935, upload-time = "2025-05-17T21:41:49.738Z" }, + { url = "https://files.pythonhosted.org/packages/12/fb/9e743f8d4e4d3c710902cf87af3512082ae3d43b945d5d16563f26ec251d/numpy-2.2.6-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f447e6acb680fd307f40d3da4852208af94afdfab89cf850986c3ca00562f4fa", size = 16600122, upload-time = "2025-05-17T21:42:14.046Z" }, + { url = "https://files.pythonhosted.org/packages/12/75/ee20da0e58d3a66f204f38916757e01e33a9737d0b22373b3eb5a27358f9/numpy-2.2.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:389d771b1623ec92636b0786bc4ae56abafad4a4c513d36a55dce14bd9ce8571", size = 15586143, upload-time = "2025-05-17T21:42:37.464Z" }, + { url = "https://files.pythonhosted.org/packages/76/95/bef5b37f29fc5e739947e9ce5179ad402875633308504a52d188302319c8/numpy-2.2.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8e9ace4a37db23421249ed236fdcdd457d671e25146786dfc96835cd951aa7c1", size = 18385260, upload-time = "2025-05-17T21:43:05.189Z" }, + { url = "https://files.pythonhosted.org/packages/09/04/f2f83279d287407cf36a7a8053a5abe7be3622a4363337338f2585e4afda/numpy-2.2.6-cp313-cp313t-win32.whl", hash = "sha256:038613e9fb8c72b0a41f025a7e4c3f0b7a1b5d768ece4796b674c8f3fe13efff", size = 6377225, upload-time = "2025-05-17T21:43:16.254Z" }, + { url = "https://files.pythonhosted.org/packages/67/0e/35082d13c09c02c011cf21570543d202ad929d961c02a147493cb0c2bdf5/numpy-2.2.6-cp313-cp313t-win_amd64.whl", hash = "sha256:6031dd6dfecc0cf9f668681a37648373bddd6421fff6c66ec1624eed0180ee06", size = 12771374, upload-time = "2025-05-17T21:43:35.479Z" }, + { url = "https://files.pythonhosted.org/packages/9e/3b/d94a75f4dbf1ef5d321523ecac21ef23a3cd2ac8b78ae2aac40873590229/numpy-2.2.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0b605b275d7bd0c640cad4e5d30fa701a8d59302e127e5f79138ad62762c3e3d", size = 21040391, upload-time = "2025-05-17T21:44:35.948Z" }, + { url = "https://files.pythonhosted.org/packages/17/f4/09b2fa1b58f0fb4f7c7963a1649c64c4d315752240377ed74d9cd878f7b5/numpy-2.2.6-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:7befc596a7dc9da8a337f79802ee8adb30a552a94f792b9c9d18c840055907db", size = 6786754, upload-time = "2025-05-17T21:44:47.446Z" }, + { url = "https://files.pythonhosted.org/packages/af/30/feba75f143bdc868a1cc3f44ccfa6c4b9ec522b36458e738cd00f67b573f/numpy-2.2.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce47521a4754c8f4593837384bd3424880629f718d87c5d44f8ed763edd63543", size = 16643476, upload-time = "2025-05-17T21:45:11.871Z" }, + { url = "https://files.pythonhosted.org/packages/37/48/ac2a9584402fb6c0cd5b5d1a91dcf176b15760130dd386bbafdbfe3640bf/numpy-2.2.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d042d24c90c41b54fd506da306759e06e568864df8ec17ccc17e9e884634fd00", size = 12812666, upload-time = "2025-05-17T21:45:31.426Z" }, +] + +[[package]] +name = "numpy" +version = "2.3.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12'", + "python_full_version == '3.11.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/37/7d/3fec4199c5ffb892bed55cff901e4f39a58c81df9c44c280499e92cad264/numpy-2.3.2.tar.gz", hash = "sha256:e0486a11ec30cdecb53f184d496d1c6a20786c81e55e41640270130056f8ee48", size = 20489306, upload-time = "2025-07-24T21:32:07.553Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/96/26/1320083986108998bd487e2931eed2aeedf914b6e8905431487543ec911d/numpy-2.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:852ae5bed3478b92f093e30f785c98e0cb62fa0a939ed057c31716e18a7a22b9", size = 21259016, upload-time = "2025-07-24T20:24:35.214Z" }, + { url = "https://files.pythonhosted.org/packages/c4/2b/792b341463fa93fc7e55abbdbe87dac316c5b8cb5e94fb7a59fb6fa0cda5/numpy-2.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7a0e27186e781a69959d0230dd9909b5e26024f8da10683bd6344baea1885168", size = 14451158, upload-time = "2025-07-24T20:24:58.397Z" }, + { url = "https://files.pythonhosted.org/packages/b7/13/e792d7209261afb0c9f4759ffef6135b35c77c6349a151f488f531d13595/numpy-2.3.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:f0a1a8476ad77a228e41619af2fa9505cf69df928e9aaa165746584ea17fed2b", size = 5379817, upload-time = "2025-07-24T20:25:07.746Z" }, + { url = "https://files.pythonhosted.org/packages/49/ce/055274fcba4107c022b2113a213c7287346563f48d62e8d2a5176ad93217/numpy-2.3.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:cbc95b3813920145032412f7e33d12080f11dc776262df1712e1638207dde9e8", size = 6913606, upload-time = "2025-07-24T20:25:18.84Z" }, + { url = "https://files.pythonhosted.org/packages/17/f2/e4d72e6bc5ff01e2ab613dc198d560714971900c03674b41947e38606502/numpy-2.3.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f75018be4980a7324edc5930fe39aa391d5734531b1926968605416ff58c332d", size = 14589652, upload-time = "2025-07-24T20:25:40.356Z" }, + { url = "https://files.pythonhosted.org/packages/c8/b0/fbeee3000a51ebf7222016e2939b5c5ecf8000a19555d04a18f1e02521b8/numpy-2.3.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:20b8200721840f5621b7bd03f8dcd78de33ec522fc40dc2641aa09537df010c3", size = 16938816, upload-time = "2025-07-24T20:26:05.721Z" }, + { url = "https://files.pythonhosted.org/packages/a9/ec/2f6c45c3484cc159621ea8fc000ac5a86f1575f090cac78ac27193ce82cd/numpy-2.3.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1f91e5c028504660d606340a084db4b216567ded1056ea2b4be4f9d10b67197f", size = 16370512, upload-time = "2025-07-24T20:26:30.545Z" }, + { url = "https://files.pythonhosted.org/packages/b5/01/dd67cf511850bd7aefd6347aaae0956ed415abea741ae107834aae7d6d4e/numpy-2.3.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:fb1752a3bb9a3ad2d6b090b88a9a0ae1cd6f004ef95f75825e2f382c183b2097", size = 18884947, upload-time = "2025-07-24T20:26:58.24Z" }, + { url = "https://files.pythonhosted.org/packages/a7/17/2cf60fd3e6a61d006778735edf67a222787a8c1a7842aed43ef96d777446/numpy-2.3.2-cp311-cp311-win32.whl", hash = "sha256:4ae6863868aaee2f57503c7a5052b3a2807cf7a3914475e637a0ecd366ced220", size = 6599494, upload-time = "2025-07-24T20:27:09.786Z" }, + { url = "https://files.pythonhosted.org/packages/d5/03/0eade211c504bda872a594f045f98ddcc6caef2b7c63610946845e304d3f/numpy-2.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:240259d6564f1c65424bcd10f435145a7644a65a6811cfc3201c4a429ba79170", size = 13087889, upload-time = "2025-07-24T20:27:29.558Z" }, + { url = "https://files.pythonhosted.org/packages/13/32/2c7979d39dafb2a25087e12310fc7f3b9d3c7d960df4f4bc97955ae0ce1d/numpy-2.3.2-cp311-cp311-win_arm64.whl", hash = "sha256:4209f874d45f921bde2cff1ffcd8a3695f545ad2ffbef6d3d3c6768162efab89", size = 10459560, upload-time = "2025-07-24T20:27:46.803Z" }, + { url = "https://files.pythonhosted.org/packages/00/6d/745dd1c1c5c284d17725e5c802ca4d45cfc6803519d777f087b71c9f4069/numpy-2.3.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bc3186bea41fae9d8e90c2b4fb5f0a1f5a690682da79b92574d63f56b529080b", size = 20956420, upload-time = "2025-07-24T20:28:18.002Z" }, + { url = "https://files.pythonhosted.org/packages/bc/96/e7b533ea5740641dd62b07a790af5d9d8fec36000b8e2d0472bd7574105f/numpy-2.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2f4f0215edb189048a3c03bd5b19345bdfa7b45a7a6f72ae5945d2a28272727f", size = 14184660, upload-time = "2025-07-24T20:28:39.522Z" }, + { url = "https://files.pythonhosted.org/packages/2b/53/102c6122db45a62aa20d1b18c9986f67e6b97e0d6fbc1ae13e3e4c84430c/numpy-2.3.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:8b1224a734cd509f70816455c3cffe13a4f599b1bf7130f913ba0e2c0b2006c0", size = 5113382, upload-time = "2025-07-24T20:28:48.544Z" }, + { url = "https://files.pythonhosted.org/packages/2b/21/376257efcbf63e624250717e82b4fae93d60178f09eb03ed766dbb48ec9c/numpy-2.3.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:3dcf02866b977a38ba3ec10215220609ab9667378a9e2150615673f3ffd6c73b", size = 6647258, upload-time = "2025-07-24T20:28:59.104Z" }, + { url = "https://files.pythonhosted.org/packages/91/ba/f4ebf257f08affa464fe6036e13f2bf9d4642a40228781dc1235da81be9f/numpy-2.3.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:572d5512df5470f50ada8d1972c5f1082d9a0b7aa5944db8084077570cf98370", size = 14281409, upload-time = "2025-07-24T20:40:30.298Z" }, + { url = "https://files.pythonhosted.org/packages/59/ef/f96536f1df42c668cbacb727a8c6da7afc9c05ece6d558927fb1722693e1/numpy-2.3.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8145dd6d10df13c559d1e4314df29695613575183fa2e2d11fac4c208c8a1f73", size = 16641317, upload-time = "2025-07-24T20:40:56.625Z" }, + { url = "https://files.pythonhosted.org/packages/f6/a7/af813a7b4f9a42f498dde8a4c6fcbff8100eed00182cc91dbaf095645f38/numpy-2.3.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:103ea7063fa624af04a791c39f97070bf93b96d7af7eb23530cd087dc8dbe9dc", size = 16056262, upload-time = "2025-07-24T20:41:20.797Z" }, + { url = "https://files.pythonhosted.org/packages/8b/5d/41c4ef8404caaa7f05ed1cfb06afe16a25895260eacbd29b4d84dff2920b/numpy-2.3.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fc927d7f289d14f5e037be917539620603294454130b6de200091e23d27dc9be", size = 18579342, upload-time = "2025-07-24T20:41:50.753Z" }, + { url = "https://files.pythonhosted.org/packages/a1/4f/9950e44c5a11636f4a3af6e825ec23003475cc9a466edb7a759ed3ea63bd/numpy-2.3.2-cp312-cp312-win32.whl", hash = "sha256:d95f59afe7f808c103be692175008bab926b59309ade3e6d25009e9a171f7036", size = 6320610, upload-time = "2025-07-24T20:42:01.551Z" }, + { url = "https://files.pythonhosted.org/packages/7c/2f/244643a5ce54a94f0a9a2ab578189c061e4a87c002e037b0829dd77293b6/numpy-2.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:9e196ade2400c0c737d93465327d1ae7c06c7cb8a1756121ebf54b06ca183c7f", size = 12786292, upload-time = "2025-07-24T20:42:20.738Z" }, + { url = "https://files.pythonhosted.org/packages/54/cd/7b5f49d5d78db7badab22d8323c1b6ae458fbf86c4fdfa194ab3cd4eb39b/numpy-2.3.2-cp312-cp312-win_arm64.whl", hash = "sha256:ee807923782faaf60d0d7331f5e86da7d5e3079e28b291973c545476c2b00d07", size = 10194071, upload-time = "2025-07-24T20:42:36.657Z" }, + { url = "https://files.pythonhosted.org/packages/1c/c0/c6bb172c916b00700ed3bf71cb56175fd1f7dbecebf8353545d0b5519f6c/numpy-2.3.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c8d9727f5316a256425892b043736d63e89ed15bbfe6556c5ff4d9d4448ff3b3", size = 20949074, upload-time = "2025-07-24T20:43:07.813Z" }, + { url = "https://files.pythonhosted.org/packages/20/4e/c116466d22acaf4573e58421c956c6076dc526e24a6be0903219775d862e/numpy-2.3.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:efc81393f25f14d11c9d161e46e6ee348637c0a1e8a54bf9dedc472a3fae993b", size = 14177311, upload-time = "2025-07-24T20:43:29.335Z" }, + { url = "https://files.pythonhosted.org/packages/78/45/d4698c182895af189c463fc91d70805d455a227261d950e4e0f1310c2550/numpy-2.3.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:dd937f088a2df683cbb79dda9a772b62a3e5a8a7e76690612c2737f38c6ef1b6", size = 5106022, upload-time = "2025-07-24T20:43:37.999Z" }, + { url = "https://files.pythonhosted.org/packages/9f/76/3e6880fef4420179309dba72a8c11f6166c431cf6dee54c577af8906f914/numpy-2.3.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:11e58218c0c46c80509186e460d79fbdc9ca1eb8d8aee39d8f2dc768eb781089", size = 6640135, upload-time = "2025-07-24T20:43:49.28Z" }, + { url = "https://files.pythonhosted.org/packages/34/fa/87ff7f25b3c4ce9085a62554460b7db686fef1e0207e8977795c7b7d7ba1/numpy-2.3.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5ad4ebcb683a1f99f4f392cc522ee20a18b2bb12a2c1c42c3d48d5a1adc9d3d2", size = 14278147, upload-time = "2025-07-24T20:44:10.328Z" }, + { url = "https://files.pythonhosted.org/packages/1d/0f/571b2c7a3833ae419fe69ff7b479a78d313581785203cc70a8db90121b9a/numpy-2.3.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:938065908d1d869c7d75d8ec45f735a034771c6ea07088867f713d1cd3bbbe4f", size = 16635989, upload-time = "2025-07-24T20:44:34.88Z" }, + { url = "https://files.pythonhosted.org/packages/24/5a/84ae8dca9c9a4c592fe11340b36a86ffa9fd3e40513198daf8a97839345c/numpy-2.3.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:66459dccc65d8ec98cc7df61307b64bf9e08101f9598755d42d8ae65d9a7a6ee", size = 16053052, upload-time = "2025-07-24T20:44:58.872Z" }, + { url = "https://files.pythonhosted.org/packages/57/7c/e5725d99a9133b9813fcf148d3f858df98511686e853169dbaf63aec6097/numpy-2.3.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a7af9ed2aa9ec5950daf05bb11abc4076a108bd3c7db9aa7251d5f107079b6a6", size = 18577955, upload-time = "2025-07-24T20:45:26.714Z" }, + { url = "https://files.pythonhosted.org/packages/ae/11/7c546fcf42145f29b71e4d6f429e96d8d68e5a7ba1830b2e68d7418f0bbd/numpy-2.3.2-cp313-cp313-win32.whl", hash = "sha256:906a30249315f9c8e17b085cc5f87d3f369b35fedd0051d4a84686967bdbbd0b", size = 6311843, upload-time = "2025-07-24T20:49:24.444Z" }, + { url = "https://files.pythonhosted.org/packages/aa/6f/a428fd1cb7ed39b4280d057720fed5121b0d7754fd2a9768640160f5517b/numpy-2.3.2-cp313-cp313-win_amd64.whl", hash = "sha256:c63d95dc9d67b676e9108fe0d2182987ccb0f11933c1e8959f42fa0da8d4fa56", size = 12782876, upload-time = "2025-07-24T20:49:43.227Z" }, + { url = "https://files.pythonhosted.org/packages/65/85/4ea455c9040a12595fb6c43f2c217257c7b52dd0ba332c6a6c1d28b289fe/numpy-2.3.2-cp313-cp313-win_arm64.whl", hash = "sha256:b05a89f2fb84d21235f93de47129dd4f11c16f64c87c33f5e284e6a3a54e43f2", size = 10192786, upload-time = "2025-07-24T20:49:59.443Z" }, + { url = "https://files.pythonhosted.org/packages/80/23/8278f40282d10c3f258ec3ff1b103d4994bcad78b0cba9208317f6bb73da/numpy-2.3.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4e6ecfeddfa83b02318f4d84acf15fbdbf9ded18e46989a15a8b6995dfbf85ab", size = 21047395, upload-time = "2025-07-24T20:45:58.821Z" }, + { url = "https://files.pythonhosted.org/packages/1f/2d/624f2ce4a5df52628b4ccd16a4f9437b37c35f4f8a50d00e962aae6efd7a/numpy-2.3.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:508b0eada3eded10a3b55725b40806a4b855961040180028f52580c4729916a2", size = 14300374, upload-time = "2025-07-24T20:46:20.207Z" }, + { url = "https://files.pythonhosted.org/packages/f6/62/ff1e512cdbb829b80a6bd08318a58698867bca0ca2499d101b4af063ee97/numpy-2.3.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:754d6755d9a7588bdc6ac47dc4ee97867271b17cee39cb87aef079574366db0a", size = 5228864, upload-time = "2025-07-24T20:46:30.58Z" }, + { url = "https://files.pythonhosted.org/packages/7d/8e/74bc18078fff03192d4032cfa99d5a5ca937807136d6f5790ce07ca53515/numpy-2.3.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:a9f66e7d2b2d7712410d3bc5684149040ef5f19856f20277cd17ea83e5006286", size = 6737533, upload-time = "2025-07-24T20:46:46.111Z" }, + { url = "https://files.pythonhosted.org/packages/19/ea/0731efe2c9073ccca5698ef6a8c3667c4cf4eea53fcdcd0b50140aba03bc/numpy-2.3.2-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:de6ea4e5a65d5a90c7d286ddff2b87f3f4ad61faa3db8dabe936b34c2275b6f8", size = 14352007, upload-time = "2025-07-24T20:47:07.1Z" }, + { url = "https://files.pythonhosted.org/packages/cf/90/36be0865f16dfed20f4bc7f75235b963d5939707d4b591f086777412ff7b/numpy-2.3.2-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a3ef07ec8cbc8fc9e369c8dcd52019510c12da4de81367d8b20bc692aa07573a", size = 16701914, upload-time = "2025-07-24T20:47:32.459Z" }, + { url = "https://files.pythonhosted.org/packages/94/30/06cd055e24cb6c38e5989a9e747042b4e723535758e6153f11afea88c01b/numpy-2.3.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:27c9f90e7481275c7800dc9c24b7cc40ace3fdb970ae4d21eaff983a32f70c91", size = 16132708, upload-time = "2025-07-24T20:47:58.129Z" }, + { url = "https://files.pythonhosted.org/packages/9a/14/ecede608ea73e58267fd7cb78f42341b3b37ba576e778a1a06baffbe585c/numpy-2.3.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:07b62978075b67eee4065b166d000d457c82a1efe726cce608b9db9dd66a73a5", size = 18651678, upload-time = "2025-07-24T20:48:25.402Z" }, + { url = "https://files.pythonhosted.org/packages/40/f3/2fe6066b8d07c3685509bc24d56386534c008b462a488b7f503ba82b8923/numpy-2.3.2-cp313-cp313t-win32.whl", hash = "sha256:c771cfac34a4f2c0de8e8c97312d07d64fd8f8ed45bc9f5726a7e947270152b5", size = 6441832, upload-time = "2025-07-24T20:48:37.181Z" }, + { url = "https://files.pythonhosted.org/packages/0b/ba/0937d66d05204d8f28630c9c60bc3eda68824abde4cf756c4d6aad03b0c6/numpy-2.3.2-cp313-cp313t-win_amd64.whl", hash = "sha256:72dbebb2dcc8305c431b2836bcc66af967df91be793d63a24e3d9b741374c450", size = 12927049, upload-time = "2025-07-24T20:48:56.24Z" }, + { url = "https://files.pythonhosted.org/packages/e9/ed/13542dd59c104d5e654dfa2ac282c199ba64846a74c2c4bcdbc3a0f75df1/numpy-2.3.2-cp313-cp313t-win_arm64.whl", hash = "sha256:72c6df2267e926a6d5286b0a6d556ebe49eae261062059317837fda12ddf0c1a", size = 10262935, upload-time = "2025-07-24T20:49:13.136Z" }, + { url = "https://files.pythonhosted.org/packages/c9/7c/7659048aaf498f7611b783e000c7268fcc4dcf0ce21cd10aad7b2e8f9591/numpy-2.3.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:448a66d052d0cf14ce9865d159bfc403282c9bc7bb2a31b03cc18b651eca8b1a", size = 20950906, upload-time = "2025-07-24T20:50:30.346Z" }, + { url = "https://files.pythonhosted.org/packages/80/db/984bea9d4ddf7112a04cfdfb22b1050af5757864cfffe8e09e44b7f11a10/numpy-2.3.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:546aaf78e81b4081b2eba1d105c3b34064783027a06b3ab20b6eba21fb64132b", size = 14185607, upload-time = "2025-07-24T20:50:51.923Z" }, + { url = "https://files.pythonhosted.org/packages/e4/76/b3d6f414f4eca568f469ac112a3b510938d892bc5a6c190cb883af080b77/numpy-2.3.2-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:87c930d52f45df092f7578889711a0768094debf73cfcde105e2d66954358125", size = 5114110, upload-time = "2025-07-24T20:51:01.041Z" }, + { url = "https://files.pythonhosted.org/packages/9e/d2/6f5e6826abd6bca52392ed88fe44a4b52aacb60567ac3bc86c67834c3a56/numpy-2.3.2-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:8dc082ea901a62edb8f59713c6a7e28a85daddcb67454c839de57656478f5b19", size = 6642050, upload-time = "2025-07-24T20:51:11.64Z" }, + { url = "https://files.pythonhosted.org/packages/c4/43/f12b2ade99199e39c73ad182f103f9d9791f48d885c600c8e05927865baf/numpy-2.3.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:af58de8745f7fa9ca1c0c7c943616c6fe28e75d0c81f5c295810e3c83b5be92f", size = 14296292, upload-time = "2025-07-24T20:51:33.488Z" }, + { url = "https://files.pythonhosted.org/packages/5d/f9/77c07d94bf110a916b17210fac38680ed8734c236bfed9982fd8524a7b47/numpy-2.3.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed5527c4cf10f16c6d0b6bee1f89958bccb0ad2522c8cadc2efd318bcd545f5", size = 16638913, upload-time = "2025-07-24T20:51:58.517Z" }, + { url = "https://files.pythonhosted.org/packages/9b/d1/9d9f2c8ea399cc05cfff8a7437453bd4e7d894373a93cdc46361bbb49a7d/numpy-2.3.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:095737ed986e00393ec18ec0b21b47c22889ae4b0cd2d5e88342e08b01141f58", size = 16071180, upload-time = "2025-07-24T20:52:22.827Z" }, + { url = "https://files.pythonhosted.org/packages/4c/41/82e2c68aff2a0c9bf315e47d61951099fed65d8cb2c8d9dc388cb87e947e/numpy-2.3.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b5e40e80299607f597e1a8a247ff8d71d79c5b52baa11cc1cce30aa92d2da6e0", size = 18576809, upload-time = "2025-07-24T20:52:51.015Z" }, + { url = "https://files.pythonhosted.org/packages/14/14/4b4fd3efb0837ed252d0f583c5c35a75121038a8c4e065f2c259be06d2d8/numpy-2.3.2-cp314-cp314-win32.whl", hash = "sha256:7d6e390423cc1f76e1b8108c9b6889d20a7a1f59d9a60cac4a050fa734d6c1e2", size = 6366410, upload-time = "2025-07-24T20:56:44.949Z" }, + { url = "https://files.pythonhosted.org/packages/11/9e/b4c24a6b8467b61aced5c8dc7dcfce23621baa2e17f661edb2444a418040/numpy-2.3.2-cp314-cp314-win_amd64.whl", hash = "sha256:b9d0878b21e3918d76d2209c924ebb272340da1fb51abc00f986c258cd5e957b", size = 12918821, upload-time = "2025-07-24T20:57:06.479Z" }, + { url = "https://files.pythonhosted.org/packages/0e/0f/0dc44007c70b1007c1cef86b06986a3812dd7106d8f946c09cfa75782556/numpy-2.3.2-cp314-cp314-win_arm64.whl", hash = "sha256:2738534837c6a1d0c39340a190177d7d66fdf432894f469728da901f8f6dc910", size = 10477303, upload-time = "2025-07-24T20:57:22.879Z" }, + { url = "https://files.pythonhosted.org/packages/8b/3e/075752b79140b78ddfc9c0a1634d234cfdbc6f9bbbfa6b7504e445ad7d19/numpy-2.3.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:4d002ecf7c9b53240be3bb69d80f86ddbd34078bae04d87be81c1f58466f264e", size = 21047524, upload-time = "2025-07-24T20:53:22.086Z" }, + { url = "https://files.pythonhosted.org/packages/fe/6d/60e8247564a72426570d0e0ea1151b95ce5bd2f1597bb878a18d32aec855/numpy-2.3.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:293b2192c6bcce487dbc6326de5853787f870aeb6c43f8f9c6496db5b1781e45", size = 14300519, upload-time = "2025-07-24T20:53:44.053Z" }, + { url = "https://files.pythonhosted.org/packages/4d/73/d8326c442cd428d47a067070c3ac6cc3b651a6e53613a1668342a12d4479/numpy-2.3.2-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:0a4f2021a6da53a0d580d6ef5db29947025ae8b35b3250141805ea9a32bbe86b", size = 5228972, upload-time = "2025-07-24T20:53:53.81Z" }, + { url = "https://files.pythonhosted.org/packages/34/2e/e71b2d6dad075271e7079db776196829019b90ce3ece5c69639e4f6fdc44/numpy-2.3.2-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:9c144440db4bf3bb6372d2c3e49834cc0ff7bb4c24975ab33e01199e645416f2", size = 6737439, upload-time = "2025-07-24T20:54:04.742Z" }, + { url = "https://files.pythonhosted.org/packages/15/b0/d004bcd56c2c5e0500ffc65385eb6d569ffd3363cb5e593ae742749b2daa/numpy-2.3.2-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f92d6c2a8535dc4fe4419562294ff957f83a16ebdec66df0805e473ffaad8bd0", size = 14352479, upload-time = "2025-07-24T20:54:25.819Z" }, + { url = "https://files.pythonhosted.org/packages/11/e3/285142fcff8721e0c99b51686426165059874c150ea9ab898e12a492e291/numpy-2.3.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cefc2219baa48e468e3db7e706305fcd0c095534a192a08f31e98d83a7d45fb0", size = 16702805, upload-time = "2025-07-24T20:54:50.814Z" }, + { url = "https://files.pythonhosted.org/packages/33/c3/33b56b0e47e604af2c7cd065edca892d180f5899599b76830652875249a3/numpy-2.3.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:76c3e9501ceb50b2ff3824c3589d5d1ab4ac857b0ee3f8f49629d0de55ecf7c2", size = 16133830, upload-time = "2025-07-24T20:55:17.306Z" }, + { url = "https://files.pythonhosted.org/packages/6e/ae/7b1476a1f4d6a48bc669b8deb09939c56dd2a439db1ab03017844374fb67/numpy-2.3.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:122bf5ed9a0221b3419672493878ba4967121514b1d7d4656a7580cd11dddcbf", size = 18652665, upload-time = "2025-07-24T20:55:46.665Z" }, + { url = "https://files.pythonhosted.org/packages/14/ba/5b5c9978c4bb161034148ade2de9db44ec316fab89ce8c400db0e0c81f86/numpy-2.3.2-cp314-cp314t-win32.whl", hash = "sha256:6f1ae3dcb840edccc45af496f312528c15b1f79ac318169d094e85e4bb35fdf1", size = 6514777, upload-time = "2025-07-24T20:55:57.66Z" }, + { url = "https://files.pythonhosted.org/packages/eb/46/3dbaf0ae7c17cdc46b9f662c56da2054887b8d9e737c1476f335c83d33db/numpy-2.3.2-cp314-cp314t-win_amd64.whl", hash = "sha256:087ffc25890d89a43536f75c5fe8770922008758e8eeeef61733957041ed2f9b", size = 13111856, upload-time = "2025-07-24T20:56:17.318Z" }, + { url = "https://files.pythonhosted.org/packages/c1/9e/1652778bce745a67b5fe05adde60ed362d38eb17d919a540e813d30f6874/numpy-2.3.2-cp314-cp314t-win_arm64.whl", hash = "sha256:092aeb3449833ea9c0bf0089d70c29ae480685dd2377ec9cdbbb620257f84631", size = 10544226, upload-time = "2025-07-24T20:56:34.509Z" }, + { url = "https://files.pythonhosted.org/packages/cf/ea/50ebc91d28b275b23b7128ef25c3d08152bc4068f42742867e07a870a42a/numpy-2.3.2-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:14a91ebac98813a49bc6aa1a0dfc09513dcec1d97eaf31ca21a87221a1cdcb15", size = 21130338, upload-time = "2025-07-24T20:57:54.37Z" }, + { url = "https://files.pythonhosted.org/packages/9f/57/cdd5eac00dd5f137277355c318a955c0d8fb8aa486020c22afd305f8b88f/numpy-2.3.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:71669b5daae692189540cffc4c439468d35a3f84f0c88b078ecd94337f6cb0ec", size = 14375776, upload-time = "2025-07-24T20:58:16.303Z" }, + { url = "https://files.pythonhosted.org/packages/83/85/27280c7f34fcd305c2209c0cdca4d70775e4859a9eaa92f850087f8dea50/numpy-2.3.2-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:69779198d9caee6e547adb933941ed7520f896fd9656834c300bdf4dd8642712", size = 5304882, upload-time = "2025-07-24T20:58:26.199Z" }, + { url = "https://files.pythonhosted.org/packages/48/b4/6500b24d278e15dd796f43824e69939d00981d37d9779e32499e823aa0aa/numpy-2.3.2-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:2c3271cc4097beb5a60f010bcc1cc204b300bb3eafb4399376418a83a1c6373c", size = 6818405, upload-time = "2025-07-24T20:58:37.341Z" }, + { url = "https://files.pythonhosted.org/packages/9b/c9/142c1e03f199d202da8e980c2496213509291b6024fd2735ad28ae7065c7/numpy-2.3.2-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8446acd11fe3dc1830568c941d44449fd5cb83068e5c70bd5a470d323d448296", size = 14419651, upload-time = "2025-07-24T20:58:59.048Z" }, + { url = "https://files.pythonhosted.org/packages/8b/95/8023e87cbea31a750a6c00ff9427d65ebc5fef104a136bfa69f76266d614/numpy-2.3.2-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:aa098a5ab53fa407fded5870865c6275a5cd4101cfdef8d6fafc48286a96e981", size = 16760166, upload-time = "2025-07-24T21:28:56.38Z" }, + { url = "https://files.pythonhosted.org/packages/78/e3/6690b3f85a05506733c7e90b577e4762517404ea78bab2ca3a5cb1aeb78d/numpy-2.3.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:6936aff90dda378c09bea075af0d9c675fe3a977a9d2402f95a87f440f59f619", size = 12977811, upload-time = "2025-07-24T21:29:18.234Z" }, ] [[package]] name = "packaging" version = "25.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727 } +sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727, upload-time = "2025-04-19T11:48:59.673Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469 }, + { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469, upload-time = "2025-04-19T11:48:57.875Z" }, ] [[package]] name = "pluggy" -version = "1.5.0" +version = "1.6.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/96/2d/02d4312c973c6050a18b314a5ad0b3210edb65a906f868e31c111dede4a6/pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1", size = 67955 } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/88/5f/e351af9a41f866ac3f1fac4ca0613908d9a41741cfcf2228f4ad853b697d/pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669", size = 20556 }, + { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, ] [[package]] name = "pygments" -version = "2.19.1" +version = "2.19.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7c/2d/c3338d48ea6cc0feb8446d8e6937e1408088a72a39937982cc6111d17f84/pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f", size = 4968581 } +sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631, upload-time = "2025-06-21T13:39:12.283Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8a/0b/9fcc47d19c48b59121088dd6da2488a49d5f72dacf8262e2790a1d2c7d15/pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c", size = 1225293 }, + { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload-time = "2025-06-21T13:39:07.939Z" }, ] [[package]] name = "pyparsing" version = "3.2.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/bb/22/f1129e69d94ffff626bdb5c835506b3a5b4f3d070f17ea295e12c2c6f60f/pyparsing-3.2.3.tar.gz", hash = "sha256:b9c13f1ab8b3b542f72e28f634bad4de758ab3ce4546e4301970ad6fa77c38be", size = 1088608 } +sdist = { url = "https://files.pythonhosted.org/packages/bb/22/f1129e69d94ffff626bdb5c835506b3a5b4f3d070f17ea295e12c2c6f60f/pyparsing-3.2.3.tar.gz", hash = "sha256:b9c13f1ab8b3b542f72e28f634bad4de758ab3ce4546e4301970ad6fa77c38be", size = 1088608, upload-time = "2025-03-25T05:01:28.114Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/05/e7/df2285f3d08fee213f2d041540fa4fc9ca6c2d44cf36d3a035bf2a8d2bcc/pyparsing-3.2.3-py3-none-any.whl", hash = "sha256:a749938e02d6fd0b59b356ca504a24982314bb090c383e3cf201c95ef7e2bfcf", size = 111120 }, + { url = "https://files.pythonhosted.org/packages/05/e7/df2285f3d08fee213f2d041540fa4fc9ca6c2d44cf36d3a035bf2a8d2bcc/pyparsing-3.2.3-py3-none-any.whl", hash = "sha256:a749938e02d6fd0b59b356ca504a24982314bb090c383e3cf201c95ef7e2bfcf", size = 111120, upload-time = "2025-03-25T05:01:24.908Z" }, ] [[package]] name = "pytest" -version = "8.3.5" +version = "8.4.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, @@ -521,60 +656,61 @@ dependencies = [ { name = "iniconfig" }, { name = "packaging" }, { name = "pluggy" }, + { name = "pygments" }, { name = "tomli", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ae/3c/c9d525a414d506893f0cd8a8d0de7706446213181570cdbd766691164e40/pytest-8.3.5.tar.gz", hash = "sha256:f4efe70cc14e511565ac476b57c279e12a855b11f48f212af1080ef2263d3845", size = 1450891 } +sdist = { url = "https://files.pythonhosted.org/packages/08/ba/45911d754e8eba3d5a841a5ce61a65a685ff1798421ac054f85aa8747dfb/pytest-8.4.1.tar.gz", hash = "sha256:7c67fd69174877359ed9371ec3af8a3d2b04741818c51e5e99cc1742251fa93c", size = 1517714, upload-time = "2025-06-18T05:48:06.109Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/30/3d/64ad57c803f1fa1e963a7946b6e0fea4a70df53c1a7fed304586539c2bac/pytest-8.3.5-py3-none-any.whl", hash = "sha256:c69214aa47deac29fad6c2a4f590b9c4a9fdb16a403176fe154b79c0b4d4d820", size = 343634 }, + { url = "https://files.pythonhosted.org/packages/29/16/c8a903f4c4dffe7a12843191437d7cd8e32751d5de349d45d3fe69544e87/pytest-8.4.1-py3-none-any.whl", hash = "sha256:539c70ba6fcead8e78eebbf1115e8b589e7565830d7d006a8723f19ac8a0afb7", size = 365474, upload-time = "2025-06-18T05:48:03.955Z" }, ] [[package]] name = "pyyaml" version = "6.0.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9b/95/a3fac87cb7158e231b5a6012e438c647e1a87f09f8e0d123acec8ab8bf71/PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086", size = 184199 }, - { url = "https://files.pythonhosted.org/packages/c7/7a/68bd47624dab8fd4afbfd3c48e3b79efe09098ae941de5b58abcbadff5cb/PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf", size = 171758 }, - { url = "https://files.pythonhosted.org/packages/49/ee/14c54df452143b9ee9f0f29074d7ca5516a36edb0b4cc40c3f280131656f/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237", size = 718463 }, - { url = "https://files.pythonhosted.org/packages/4d/61/de363a97476e766574650d742205be468921a7b532aa2499fcd886b62530/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b", size = 719280 }, - { url = "https://files.pythonhosted.org/packages/6b/4e/1523cb902fd98355e2e9ea5e5eb237cbc5f3ad5f3075fa65087aa0ecb669/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed", size = 751239 }, - { url = "https://files.pythonhosted.org/packages/b7/33/5504b3a9a4464893c32f118a9cc045190a91637b119a9c881da1cf6b7a72/PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180", size = 695802 }, - { url = "https://files.pythonhosted.org/packages/5c/20/8347dcabd41ef3a3cdc4f7b7a2aff3d06598c8779faa189cdbf878b626a4/PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68", size = 720527 }, - { url = "https://files.pythonhosted.org/packages/be/aa/5afe99233fb360d0ff37377145a949ae258aaab831bde4792b32650a4378/PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99", size = 144052 }, - { url = "https://files.pythonhosted.org/packages/b5/84/0fa4b06f6d6c958d207620fc60005e241ecedceee58931bb20138e1e5776/PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e", size = 161774 }, - { url = "https://files.pythonhosted.org/packages/f8/aa/7af4e81f7acba21a4c6be026da38fd2b872ca46226673c89a758ebdc4fd2/PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774", size = 184612 }, - { url = "https://files.pythonhosted.org/packages/8b/62/b9faa998fd185f65c1371643678e4d58254add437edb764a08c5a98fb986/PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee", size = 172040 }, - { url = "https://files.pythonhosted.org/packages/ad/0c/c804f5f922a9a6563bab712d8dcc70251e8af811fce4524d57c2c0fd49a4/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c", size = 736829 }, - { url = "https://files.pythonhosted.org/packages/51/16/6af8d6a6b210c8e54f1406a6b9481febf9c64a3109c541567e35a49aa2e7/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317", size = 764167 }, - { url = "https://files.pythonhosted.org/packages/75/e4/2c27590dfc9992f73aabbeb9241ae20220bd9452df27483b6e56d3975cc5/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85", size = 762952 }, - { url = "https://files.pythonhosted.org/packages/9b/97/ecc1abf4a823f5ac61941a9c00fe501b02ac3ab0e373c3857f7d4b83e2b6/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4", size = 735301 }, - { url = "https://files.pythonhosted.org/packages/45/73/0f49dacd6e82c9430e46f4a027baa4ca205e8b0a9dce1397f44edc23559d/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e", size = 756638 }, - { url = "https://files.pythonhosted.org/packages/22/5f/956f0f9fc65223a58fbc14459bf34b4cc48dec52e00535c79b8db361aabd/PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5", size = 143850 }, - { url = "https://files.pythonhosted.org/packages/ed/23/8da0bbe2ab9dcdd11f4f4557ccaf95c10b9811b13ecced089d43ce59c3c8/PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44", size = 161980 }, - { url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873 }, - { url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302 }, - { url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154 }, - { url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223 }, - { url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542 }, - { url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164 }, - { url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611 }, - { url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591 }, - { url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338 }, - { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309 }, - { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679 }, - { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428 }, - { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361 }, - { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523 }, - { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660 }, - { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597 }, - { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527 }, - { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446 }, +sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631, upload-time = "2024-08-06T20:33:50.674Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9b/95/a3fac87cb7158e231b5a6012e438c647e1a87f09f8e0d123acec8ab8bf71/PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086", size = 184199, upload-time = "2024-08-06T20:31:40.178Z" }, + { url = "https://files.pythonhosted.org/packages/c7/7a/68bd47624dab8fd4afbfd3c48e3b79efe09098ae941de5b58abcbadff5cb/PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf", size = 171758, upload-time = "2024-08-06T20:31:42.173Z" }, + { url = "https://files.pythonhosted.org/packages/49/ee/14c54df452143b9ee9f0f29074d7ca5516a36edb0b4cc40c3f280131656f/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237", size = 718463, upload-time = "2024-08-06T20:31:44.263Z" }, + { url = "https://files.pythonhosted.org/packages/4d/61/de363a97476e766574650d742205be468921a7b532aa2499fcd886b62530/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b", size = 719280, upload-time = "2024-08-06T20:31:50.199Z" }, + { url = "https://files.pythonhosted.org/packages/6b/4e/1523cb902fd98355e2e9ea5e5eb237cbc5f3ad5f3075fa65087aa0ecb669/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed", size = 751239, upload-time = "2024-08-06T20:31:52.292Z" }, + { url = "https://files.pythonhosted.org/packages/b7/33/5504b3a9a4464893c32f118a9cc045190a91637b119a9c881da1cf6b7a72/PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180", size = 695802, upload-time = "2024-08-06T20:31:53.836Z" }, + { url = "https://files.pythonhosted.org/packages/5c/20/8347dcabd41ef3a3cdc4f7b7a2aff3d06598c8779faa189cdbf878b626a4/PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68", size = 720527, upload-time = "2024-08-06T20:31:55.565Z" }, + { url = "https://files.pythonhosted.org/packages/be/aa/5afe99233fb360d0ff37377145a949ae258aaab831bde4792b32650a4378/PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99", size = 144052, upload-time = "2024-08-06T20:31:56.914Z" }, + { url = "https://files.pythonhosted.org/packages/b5/84/0fa4b06f6d6c958d207620fc60005e241ecedceee58931bb20138e1e5776/PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e", size = 161774, upload-time = "2024-08-06T20:31:58.304Z" }, + { url = "https://files.pythonhosted.org/packages/f8/aa/7af4e81f7acba21a4c6be026da38fd2b872ca46226673c89a758ebdc4fd2/PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774", size = 184612, upload-time = "2024-08-06T20:32:03.408Z" }, + { url = "https://files.pythonhosted.org/packages/8b/62/b9faa998fd185f65c1371643678e4d58254add437edb764a08c5a98fb986/PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee", size = 172040, upload-time = "2024-08-06T20:32:04.926Z" }, + { url = "https://files.pythonhosted.org/packages/ad/0c/c804f5f922a9a6563bab712d8dcc70251e8af811fce4524d57c2c0fd49a4/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c", size = 736829, upload-time = "2024-08-06T20:32:06.459Z" }, + { url = "https://files.pythonhosted.org/packages/51/16/6af8d6a6b210c8e54f1406a6b9481febf9c64a3109c541567e35a49aa2e7/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317", size = 764167, upload-time = "2024-08-06T20:32:08.338Z" }, + { url = "https://files.pythonhosted.org/packages/75/e4/2c27590dfc9992f73aabbeb9241ae20220bd9452df27483b6e56d3975cc5/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85", size = 762952, upload-time = "2024-08-06T20:32:14.124Z" }, + { url = "https://files.pythonhosted.org/packages/9b/97/ecc1abf4a823f5ac61941a9c00fe501b02ac3ab0e373c3857f7d4b83e2b6/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4", size = 735301, upload-time = "2024-08-06T20:32:16.17Z" }, + { url = "https://files.pythonhosted.org/packages/45/73/0f49dacd6e82c9430e46f4a027baa4ca205e8b0a9dce1397f44edc23559d/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e", size = 756638, upload-time = "2024-08-06T20:32:18.555Z" }, + { url = "https://files.pythonhosted.org/packages/22/5f/956f0f9fc65223a58fbc14459bf34b4cc48dec52e00535c79b8db361aabd/PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5", size = 143850, upload-time = "2024-08-06T20:32:19.889Z" }, + { url = "https://files.pythonhosted.org/packages/ed/23/8da0bbe2ab9dcdd11f4f4557ccaf95c10b9811b13ecced089d43ce59c3c8/PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44", size = 161980, upload-time = "2024-08-06T20:32:21.273Z" }, + { url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873, upload-time = "2024-08-06T20:32:25.131Z" }, + { url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302, upload-time = "2024-08-06T20:32:26.511Z" }, + { url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154, upload-time = "2024-08-06T20:32:28.363Z" }, + { url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223, upload-time = "2024-08-06T20:32:30.058Z" }, + { url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542, upload-time = "2024-08-06T20:32:31.881Z" }, + { url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164, upload-time = "2024-08-06T20:32:37.083Z" }, + { url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611, upload-time = "2024-08-06T20:32:38.898Z" }, + { url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591, upload-time = "2024-08-06T20:32:40.241Z" }, + { url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338, upload-time = "2024-08-06T20:32:41.93Z" }, + { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309, upload-time = "2024-08-06T20:32:43.4Z" }, + { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679, upload-time = "2024-08-06T20:32:44.801Z" }, + { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428, upload-time = "2024-08-06T20:32:46.432Z" }, + { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361, upload-time = "2024-08-06T20:32:51.188Z" }, + { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523, upload-time = "2024-08-06T20:32:53.019Z" }, + { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660, upload-time = "2024-08-06T20:32:54.708Z" }, + { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597, upload-time = "2024-08-06T20:32:56.985Z" }, + { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527, upload-time = "2024-08-06T20:33:03.001Z" }, + { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446, upload-time = "2024-08-06T20:33:04.33Z" }, ] [[package]] name = "requests" -version = "2.32.3" +version = "2.32.5" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "certifi" }, @@ -582,36 +718,36 @@ dependencies = [ { name = "idna" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/63/70/2bf7780ad2d390a8d301ad0b550f1581eadbd9a20f896afe06353c2a2913/requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", size = 131218 } +sdist = { url = "https://files.pythonhosted.org/packages/c9/74/b3ff8e6c8446842c3f5c837e9c3dfcfe2018ea6ecef224c710c85ef728f4/requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf", size = 134517, upload-time = "2025-08-18T20:46:02.573Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", size = 64928 }, + { url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", size = 64738, upload-time = "2025-08-18T20:46:00.542Z" }, ] [[package]] name = "roman-numerals-py" version = "3.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/30/76/48fd56d17c5bdbdf65609abbc67288728a98ed4c02919428d4f52d23b24b/roman_numerals_py-3.1.0.tar.gz", hash = "sha256:be4bf804f083a4ce001b5eb7e3c0862479d10f94c936f6c4e5f250aa5ff5bd2d", size = 9017 } +sdist = { url = "https://files.pythonhosted.org/packages/30/76/48fd56d17c5bdbdf65609abbc67288728a98ed4c02919428d4f52d23b24b/roman_numerals_py-3.1.0.tar.gz", hash = "sha256:be4bf804f083a4ce001b5eb7e3c0862479d10f94c936f6c4e5f250aa5ff5bd2d", size = 9017, upload-time = "2025-02-22T07:34:54.333Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/53/97/d2cbbaa10c9b826af0e10fdf836e1bf344d9f0abb873ebc34d1f49642d3f/roman_numerals_py-3.1.0-py3-none-any.whl", hash = "sha256:9da2ad2fb670bcf24e81070ceb3be72f6c11c440d73bd579fbeca1e9f330954c", size = 7742 }, + { url = "https://files.pythonhosted.org/packages/53/97/d2cbbaa10c9b826af0e10fdf836e1bf344d9f0abb873ebc34d1f49642d3f/roman_numerals_py-3.1.0-py3-none-any.whl", hash = "sha256:9da2ad2fb670bcf24e81070ceb3be72f6c11c440d73bd579fbeca1e9f330954c", size = 7742, upload-time = "2025-02-22T07:34:52.422Z" }, ] [[package]] name = "snowballstemmer" -version = "2.2.0" +version = "3.0.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/44/7b/af302bebf22c749c56c9c3e8ae13190b5b5db37a33d9068652e8f73b7089/snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1", size = 86699 } +sdist = { url = "https://files.pythonhosted.org/packages/75/a7/9810d872919697c9d01295633f5d574fb416d47e535f258272ca1f01f447/snowballstemmer-3.0.1.tar.gz", hash = "sha256:6d5eeeec8e9f84d4d56b847692bacf79bc2c8e90c7f80ca4444ff8b6f2e52895", size = 105575, upload-time = "2025-05-09T16:34:51.843Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ed/dc/c02e01294f7265e63a7315fe086dd1df7dacb9f840a804da846b96d01b96/snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a", size = 93002 }, + { url = "https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl", hash = "sha256:6cd7b3897da8d6c9ffb968a6781fa6532dce9c3618a4b127d920dab764a19064", size = 103274, upload-time = "2025-05-09T16:34:50.371Z" }, ] [[package]] name = "soupsieve" version = "2.7" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3f/f4/4a80cd6ef364b2e8b65b15816a843c0980f7a5a2b4dc701fc574952aa19f/soupsieve-2.7.tar.gz", hash = "sha256:ad282f9b6926286d2ead4750552c8a6142bc4c783fd66b0293547c8fe6ae126a", size = 103418 } +sdist = { url = "https://files.pythonhosted.org/packages/3f/f4/4a80cd6ef364b2e8b65b15816a843c0980f7a5a2b4dc701fc574952aa19f/soupsieve-2.7.tar.gz", hash = "sha256:ad282f9b6926286d2ead4750552c8a6142bc4c783fd66b0293547c8fe6ae126a", size = 103418, upload-time = "2025-04-20T18:50:08.518Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/9c/0e6afc12c269578be5c0c1c9f4b49a8d32770a080260c333ac04cc1c832d/soupsieve-2.7-py3-none-any.whl", hash = "sha256:6e60cc5c1ffaf1cebcc12e8188320b72071e922c2e897f737cadce79ad5d30c4", size = 36677 }, + { url = "https://files.pythonhosted.org/packages/e7/9c/0e6afc12c269578be5c0c1c9f4b49a8d32770a080260c333ac04cc1c832d/soupsieve-2.7-py3-none-any.whl", hash = "sha256:6e60cc5c1ffaf1cebcc12e8188320b72071e922c2e897f737cadce79ad5d30c4", size = 36677, upload-time = "2025-04-20T18:50:07.196Z" }, ] [[package]] @@ -640,9 +776,9 @@ dependencies = [ { name = "sphinxcontrib-serializinghtml", marker = "python_full_version < '3.11'" }, { name = "tomli", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/be0b61178fe2cdcb67e2a92fc9ebb488e3c51c4f74a36a7824c0adf23425/sphinx-8.1.3.tar.gz", hash = "sha256:43c1911eecb0d3e161ad78611bc905d1ad0e523e4ddc202a58a821773dc4c927", size = 8184611 } +sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/be0b61178fe2cdcb67e2a92fc9ebb488e3c51c4f74a36a7824c0adf23425/sphinx-8.1.3.tar.gz", hash = "sha256:43c1911eecb0d3e161ad78611bc905d1ad0e523e4ddc202a58a821773dc4c927", size = 8184611, upload-time = "2024-10-13T20:27:13.93Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/26/60/1ddff83a56d33aaf6f10ec8ce84b4c007d9368b21008876fceda7e7381ef/sphinx-8.1.3-py3-none-any.whl", hash = "sha256:09719015511837b76bf6e03e42eb7595ac8c2e41eeb9c29c5b755c6b677992a2", size = 3487125 }, + { url = "https://files.pythonhosted.org/packages/26/60/1ddff83a56d33aaf6f10ec8ce84b4c007d9368b21008876fceda7e7381ef/sphinx-8.1.3-py3-none-any.whl", hash = "sha256:09719015511837b76bf6e03e42eb7595ac8c2e41eeb9c29c5b755c6b677992a2", size = 3487125, upload-time = "2024-10-13T20:27:10.448Z" }, ] [[package]] @@ -672,9 +808,9 @@ dependencies = [ { name = "sphinxcontrib-qthelp", marker = "python_full_version >= '3.11'" }, { name = "sphinxcontrib-serializinghtml", marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/38/ad/4360e50ed56cb483667b8e6dadf2d3fda62359593faabbe749a27c4eaca6/sphinx-8.2.3.tar.gz", hash = "sha256:398ad29dee7f63a75888314e9424d40f52ce5a6a87ae88e7071e80af296ec348", size = 8321876 } +sdist = { url = "https://files.pythonhosted.org/packages/38/ad/4360e50ed56cb483667b8e6dadf2d3fda62359593faabbe749a27c4eaca6/sphinx-8.2.3.tar.gz", hash = "sha256:398ad29dee7f63a75888314e9424d40f52ce5a6a87ae88e7071e80af296ec348", size = 8321876, upload-time = "2025-03-02T22:31:59.658Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/31/53/136e9eca6e0b9dc0e1962e2c908fbea2e5ac000c2a2fbd9a35797958c48b/sphinx-8.2.3-py3-none-any.whl", hash = "sha256:4405915165f13521d875a8c29c8970800a0141c14cc5416a38feca4ea5d9b9c3", size = 3589741 }, + { url = "https://files.pythonhosted.org/packages/31/53/136e9eca6e0b9dc0e1962e2c908fbea2e5ac000c2a2fbd9a35797958c48b/sphinx-8.2.3-py3-none-any.whl", hash = "sha256:4405915165f13521d875a8c29c8970800a0141c14cc5416a38feca4ea5d9b9c3", size = 3589741, upload-time = "2025-03-02T22:31:56.836Z" }, ] [[package]] @@ -688,9 +824,9 @@ dependencies = [ { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7f/a8/22b379a2a75ccb881217d3d4ae56d7d35f2d1bb4c8c0c51d0253676746a1/sphinx_autoapi-3.6.0.tar.gz", hash = "sha256:c685f274e41d0842ae7e199460c322c4bd7fec816ccc2da8d806094b4f64af06", size = 55417 } +sdist = { url = "https://files.pythonhosted.org/packages/7f/a8/22b379a2a75ccb881217d3d4ae56d7d35f2d1bb4c8c0c51d0253676746a1/sphinx_autoapi-3.6.0.tar.gz", hash = "sha256:c685f274e41d0842ae7e199460c322c4bd7fec816ccc2da8d806094b4f64af06", size = 55417, upload-time = "2025-02-18T01:50:55.241Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/58/17/0eda9dc80fcaf257222b506844207e71b5d59567c41bbdcca2a72da119b9/sphinx_autoapi-3.6.0-py3-none-any.whl", hash = "sha256:f3b66714493cab140b0e896d33ce7137654a16ac1edb6563edcbd47bf975f711", size = 35281 }, + { url = "https://files.pythonhosted.org/packages/58/17/0eda9dc80fcaf257222b506844207e71b5d59567c41bbdcca2a72da119b9/sphinx_autoapi-3.6.0-py3-none-any.whl", hash = "sha256:f3b66714493cab140b0e896d33ce7137654a16ac1edb6563edcbd47bf975f711", size = 35281, upload-time = "2025-02-18T01:50:52.789Z" }, ] [[package]] @@ -701,118 +837,118 @@ dependencies = [ { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/98/0b/a866924ded68efec7a1759587a4e478aec7559d8165fac8b2ad1c0e774d6/sphinx_basic_ng-1.0.0b2.tar.gz", hash = "sha256:9ec55a47c90c8c002b5960c57492ec3021f5193cb26cebc2dc4ea226848651c9", size = 20736 } +sdist = { url = "https://files.pythonhosted.org/packages/98/0b/a866924ded68efec7a1759587a4e478aec7559d8165fac8b2ad1c0e774d6/sphinx_basic_ng-1.0.0b2.tar.gz", hash = "sha256:9ec55a47c90c8c002b5960c57492ec3021f5193cb26cebc2dc4ea226848651c9", size = 20736, upload-time = "2023-07-08T18:40:54.166Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3c/dd/018ce05c532a22007ac58d4f45232514cd9d6dd0ee1dc374e309db830983/sphinx_basic_ng-1.0.0b2-py3-none-any.whl", hash = "sha256:eb09aedbabfb650607e9b4b68c9d240b90b1e1be221d6ad71d61c52e29f7932b", size = 22496 }, + { url = "https://files.pythonhosted.org/packages/3c/dd/018ce05c532a22007ac58d4f45232514cd9d6dd0ee1dc374e309db830983/sphinx_basic_ng-1.0.0b2-py3-none-any.whl", hash = "sha256:eb09aedbabfb650607e9b4b68c9d240b90b1e1be221d6ad71d61c52e29f7932b", size = 22496, upload-time = "2023-07-08T18:40:52.659Z" }, ] [[package]] name = "sphinxcontrib-applehelp" version = "2.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ba/6e/b837e84a1a704953c62ef8776d45c3e8d759876b4a84fe14eba2859106fe/sphinxcontrib_applehelp-2.0.0.tar.gz", hash = "sha256:2f29ef331735ce958efa4734873f084941970894c6090408b079c61b2e1c06d1", size = 20053 } +sdist = { url = "https://files.pythonhosted.org/packages/ba/6e/b837e84a1a704953c62ef8776d45c3e8d759876b4a84fe14eba2859106fe/sphinxcontrib_applehelp-2.0.0.tar.gz", hash = "sha256:2f29ef331735ce958efa4734873f084941970894c6090408b079c61b2e1c06d1", size = 20053, upload-time = "2024-07-29T01:09:00.465Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl", hash = "sha256:4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5", size = 119300 }, + { url = "https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl", hash = "sha256:4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5", size = 119300, upload-time = "2024-07-29T01:08:58.99Z" }, ] [[package]] name = "sphinxcontrib-devhelp" version = "2.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f6/d2/5beee64d3e4e747f316bae86b55943f51e82bb86ecd325883ef65741e7da/sphinxcontrib_devhelp-2.0.0.tar.gz", hash = "sha256:411f5d96d445d1d73bb5d52133377b4248ec79db5c793ce7dbe59e074b4dd1ad", size = 12967 } +sdist = { url = "https://files.pythonhosted.org/packages/f6/d2/5beee64d3e4e747f316bae86b55943f51e82bb86ecd325883ef65741e7da/sphinxcontrib_devhelp-2.0.0.tar.gz", hash = "sha256:411f5d96d445d1d73bb5d52133377b4248ec79db5c793ce7dbe59e074b4dd1ad", size = 12967, upload-time = "2024-07-29T01:09:23.417Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl", hash = "sha256:aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2", size = 82530 }, + { url = "https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl", hash = "sha256:aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2", size = 82530, upload-time = "2024-07-29T01:09:21.945Z" }, ] [[package]] name = "sphinxcontrib-htmlhelp" version = "2.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/43/93/983afd9aa001e5201eab16b5a444ed5b9b0a7a010541e0ddfbbfd0b2470c/sphinxcontrib_htmlhelp-2.1.0.tar.gz", hash = "sha256:c9e2916ace8aad64cc13a0d233ee22317f2b9025b9cf3295249fa985cc7082e9", size = 22617 } +sdist = { url = "https://files.pythonhosted.org/packages/43/93/983afd9aa001e5201eab16b5a444ed5b9b0a7a010541e0ddfbbfd0b2470c/sphinxcontrib_htmlhelp-2.1.0.tar.gz", hash = "sha256:c9e2916ace8aad64cc13a0d233ee22317f2b9025b9cf3295249fa985cc7082e9", size = 22617, upload-time = "2024-07-29T01:09:37.889Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl", hash = "sha256:166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8", size = 98705 }, + { url = "https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl", hash = "sha256:166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8", size = 98705, upload-time = "2024-07-29T01:09:36.407Z" }, ] [[package]] name = "sphinxcontrib-jsmath" version = "1.0.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b2/e8/9ed3830aeed71f17c026a07a5097edcf44b692850ef215b161b8ad875729/sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8", size = 5787 } +sdist = { url = "https://files.pythonhosted.org/packages/b2/e8/9ed3830aeed71f17c026a07a5097edcf44b692850ef215b161b8ad875729/sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8", size = 5787, upload-time = "2019-01-21T16:10:16.347Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178", size = 5071 }, + { url = "https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178", size = 5071, upload-time = "2019-01-21T16:10:14.333Z" }, ] [[package]] name = "sphinxcontrib-qthelp" version = "2.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/68/bc/9104308fc285eb3e0b31b67688235db556cd5b0ef31d96f30e45f2e51cae/sphinxcontrib_qthelp-2.0.0.tar.gz", hash = "sha256:4fe7d0ac8fc171045be623aba3e2a8f613f8682731f9153bb2e40ece16b9bbab", size = 17165 } +sdist = { url = "https://files.pythonhosted.org/packages/68/bc/9104308fc285eb3e0b31b67688235db556cd5b0ef31d96f30e45f2e51cae/sphinxcontrib_qthelp-2.0.0.tar.gz", hash = "sha256:4fe7d0ac8fc171045be623aba3e2a8f613f8682731f9153bb2e40ece16b9bbab", size = 17165, upload-time = "2024-07-29T01:09:56.435Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl", hash = "sha256:b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb", size = 88743 }, + { url = "https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl", hash = "sha256:b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb", size = 88743, upload-time = "2024-07-29T01:09:54.885Z" }, ] [[package]] name = "sphinxcontrib-serializinghtml" version = "2.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3b/44/6716b257b0aa6bfd51a1b31665d1c205fb12cb5ad56de752dfa15657de2f/sphinxcontrib_serializinghtml-2.0.0.tar.gz", hash = "sha256:e9d912827f872c029017a53f0ef2180b327c3f7fd23c87229f7a8e8b70031d4d", size = 16080 } +sdist = { url = "https://files.pythonhosted.org/packages/3b/44/6716b257b0aa6bfd51a1b31665d1c205fb12cb5ad56de752dfa15657de2f/sphinxcontrib_serializinghtml-2.0.0.tar.gz", hash = "sha256:e9d912827f872c029017a53f0ef2180b327c3f7fd23c87229f7a8e8b70031d4d", size = 16080, upload-time = "2024-07-29T01:10:09.332Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl", hash = "sha256:6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331", size = 92072 }, + { url = "https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl", hash = "sha256:6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331", size = 92072, upload-time = "2024-07-29T01:10:08.203Z" }, ] [[package]] name = "tomli" version = "2.2.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/18/87/302344fed471e44a87289cf4967697d07e532f2421fdaf868a303cbae4ff/tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff", size = 17175 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/43/ca/75707e6efa2b37c77dadb324ae7d9571cb424e61ea73fad7c56c2d14527f/tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249", size = 131077 }, - { url = "https://files.pythonhosted.org/packages/c7/16/51ae563a8615d472fdbffc43a3f3d46588c264ac4f024f63f01283becfbb/tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6", size = 123429 }, - { url = "https://files.pythonhosted.org/packages/f1/dd/4f6cd1e7b160041db83c694abc78e100473c15d54620083dbd5aae7b990e/tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a", size = 226067 }, - { url = "https://files.pythonhosted.org/packages/a9/6b/c54ede5dc70d648cc6361eaf429304b02f2871a345bbdd51e993d6cdf550/tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee", size = 236030 }, - { url = "https://files.pythonhosted.org/packages/1f/47/999514fa49cfaf7a92c805a86c3c43f4215621855d151b61c602abb38091/tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e", size = 240898 }, - { url = "https://files.pythonhosted.org/packages/73/41/0a01279a7ae09ee1573b423318e7934674ce06eb33f50936655071d81a24/tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4", size = 229894 }, - { url = "https://files.pythonhosted.org/packages/55/18/5d8bc5b0a0362311ce4d18830a5d28943667599a60d20118074ea1b01bb7/tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106", size = 245319 }, - { url = "https://files.pythonhosted.org/packages/92/a3/7ade0576d17f3cdf5ff44d61390d4b3febb8a9fc2b480c75c47ea048c646/tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8", size = 238273 }, - { url = "https://files.pythonhosted.org/packages/72/6f/fa64ef058ac1446a1e51110c375339b3ec6be245af9d14c87c4a6412dd32/tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff", size = 98310 }, - { url = "https://files.pythonhosted.org/packages/6a/1c/4a2dcde4a51b81be3530565e92eda625d94dafb46dbeb15069df4caffc34/tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b", size = 108309 }, - { url = "https://files.pythonhosted.org/packages/52/e1/f8af4c2fcde17500422858155aeb0d7e93477a0d59a98e56cbfe75070fd0/tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea", size = 132762 }, - { url = "https://files.pythonhosted.org/packages/03/b8/152c68bb84fc00396b83e7bbddd5ec0bd3dd409db4195e2a9b3e398ad2e3/tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8", size = 123453 }, - { url = "https://files.pythonhosted.org/packages/c8/d6/fc9267af9166f79ac528ff7e8c55c8181ded34eb4b0e93daa767b8841573/tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192", size = 233486 }, - { url = "https://files.pythonhosted.org/packages/5c/51/51c3f2884d7bab89af25f678447ea7d297b53b5a3b5730a7cb2ef6069f07/tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222", size = 242349 }, - { url = "https://files.pythonhosted.org/packages/ab/df/bfa89627d13a5cc22402e441e8a931ef2108403db390ff3345c05253935e/tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77", size = 252159 }, - { url = "https://files.pythonhosted.org/packages/9e/6e/fa2b916dced65763a5168c6ccb91066f7639bdc88b48adda990db10c8c0b/tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6", size = 237243 }, - { url = "https://files.pythonhosted.org/packages/b4/04/885d3b1f650e1153cbb93a6a9782c58a972b94ea4483ae4ac5cedd5e4a09/tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd", size = 259645 }, - { url = "https://files.pythonhosted.org/packages/9c/de/6b432d66e986e501586da298e28ebeefd3edc2c780f3ad73d22566034239/tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e", size = 244584 }, - { url = "https://files.pythonhosted.org/packages/1c/9a/47c0449b98e6e7d1be6cbac02f93dd79003234ddc4aaab6ba07a9a7482e2/tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98", size = 98875 }, - { url = "https://files.pythonhosted.org/packages/ef/60/9b9638f081c6f1261e2688bd487625cd1e660d0a85bd469e91d8db969734/tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4", size = 109418 }, - { url = "https://files.pythonhosted.org/packages/04/90/2ee5f2e0362cb8a0b6499dc44f4d7d48f8fff06d28ba46e6f1eaa61a1388/tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7", size = 132708 }, - { url = "https://files.pythonhosted.org/packages/c0/ec/46b4108816de6b385141f082ba99e315501ccd0a2ea23db4a100dd3990ea/tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c", size = 123582 }, - { url = "https://files.pythonhosted.org/packages/a0/bd/b470466d0137b37b68d24556c38a0cc819e8febe392d5b199dcd7f578365/tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13", size = 232543 }, - { url = "https://files.pythonhosted.org/packages/d9/e5/82e80ff3b751373f7cead2815bcbe2d51c895b3c990686741a8e56ec42ab/tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281", size = 241691 }, - { url = "https://files.pythonhosted.org/packages/05/7e/2a110bc2713557d6a1bfb06af23dd01e7dde52b6ee7dadc589868f9abfac/tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272", size = 251170 }, - { url = "https://files.pythonhosted.org/packages/64/7b/22d713946efe00e0adbcdfd6d1aa119ae03fd0b60ebed51ebb3fa9f5a2e5/tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140", size = 236530 }, - { url = "https://files.pythonhosted.org/packages/38/31/3a76f67da4b0cf37b742ca76beaf819dca0ebef26d78fc794a576e08accf/tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2", size = 258666 }, - { url = "https://files.pythonhosted.org/packages/07/10/5af1293da642aded87e8a988753945d0cf7e00a9452d3911dd3bb354c9e2/tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744", size = 243954 }, - { url = "https://files.pythonhosted.org/packages/5b/b9/1ed31d167be802da0fc95020d04cd27b7d7065cc6fbefdd2f9186f60d7bd/tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec", size = 98724 }, - { url = "https://files.pythonhosted.org/packages/c7/32/b0963458706accd9afcfeb867c0f9175a741bf7b19cd424230714d722198/tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69", size = 109383 }, - { url = "https://files.pythonhosted.org/packages/6e/c2/61d3e0f47e2b74ef40a68b9e6ad5984f6241a942f7cd3bbfbdbd03861ea9/tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc", size = 14257 }, +sdist = { url = "https://files.pythonhosted.org/packages/18/87/302344fed471e44a87289cf4967697d07e532f2421fdaf868a303cbae4ff/tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff", size = 17175, upload-time = "2024-11-27T22:38:36.873Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/ca/75707e6efa2b37c77dadb324ae7d9571cb424e61ea73fad7c56c2d14527f/tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249", size = 131077, upload-time = "2024-11-27T22:37:54.956Z" }, + { url = "https://files.pythonhosted.org/packages/c7/16/51ae563a8615d472fdbffc43a3f3d46588c264ac4f024f63f01283becfbb/tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6", size = 123429, upload-time = "2024-11-27T22:37:56.698Z" }, + { url = "https://files.pythonhosted.org/packages/f1/dd/4f6cd1e7b160041db83c694abc78e100473c15d54620083dbd5aae7b990e/tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a", size = 226067, upload-time = "2024-11-27T22:37:57.63Z" }, + { url = "https://files.pythonhosted.org/packages/a9/6b/c54ede5dc70d648cc6361eaf429304b02f2871a345bbdd51e993d6cdf550/tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee", size = 236030, upload-time = "2024-11-27T22:37:59.344Z" }, + { url = "https://files.pythonhosted.org/packages/1f/47/999514fa49cfaf7a92c805a86c3c43f4215621855d151b61c602abb38091/tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e", size = 240898, upload-time = "2024-11-27T22:38:00.429Z" }, + { url = "https://files.pythonhosted.org/packages/73/41/0a01279a7ae09ee1573b423318e7934674ce06eb33f50936655071d81a24/tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4", size = 229894, upload-time = "2024-11-27T22:38:02.094Z" }, + { url = "https://files.pythonhosted.org/packages/55/18/5d8bc5b0a0362311ce4d18830a5d28943667599a60d20118074ea1b01bb7/tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106", size = 245319, upload-time = "2024-11-27T22:38:03.206Z" }, + { url = "https://files.pythonhosted.org/packages/92/a3/7ade0576d17f3cdf5ff44d61390d4b3febb8a9fc2b480c75c47ea048c646/tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8", size = 238273, upload-time = "2024-11-27T22:38:04.217Z" }, + { url = "https://files.pythonhosted.org/packages/72/6f/fa64ef058ac1446a1e51110c375339b3ec6be245af9d14c87c4a6412dd32/tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff", size = 98310, upload-time = "2024-11-27T22:38:05.908Z" }, + { url = "https://files.pythonhosted.org/packages/6a/1c/4a2dcde4a51b81be3530565e92eda625d94dafb46dbeb15069df4caffc34/tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b", size = 108309, upload-time = "2024-11-27T22:38:06.812Z" }, + { url = "https://files.pythonhosted.org/packages/52/e1/f8af4c2fcde17500422858155aeb0d7e93477a0d59a98e56cbfe75070fd0/tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea", size = 132762, upload-time = "2024-11-27T22:38:07.731Z" }, + { url = "https://files.pythonhosted.org/packages/03/b8/152c68bb84fc00396b83e7bbddd5ec0bd3dd409db4195e2a9b3e398ad2e3/tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8", size = 123453, upload-time = "2024-11-27T22:38:09.384Z" }, + { url = "https://files.pythonhosted.org/packages/c8/d6/fc9267af9166f79ac528ff7e8c55c8181ded34eb4b0e93daa767b8841573/tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192", size = 233486, upload-time = "2024-11-27T22:38:10.329Z" }, + { url = "https://files.pythonhosted.org/packages/5c/51/51c3f2884d7bab89af25f678447ea7d297b53b5a3b5730a7cb2ef6069f07/tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222", size = 242349, upload-time = "2024-11-27T22:38:11.443Z" }, + { url = "https://files.pythonhosted.org/packages/ab/df/bfa89627d13a5cc22402e441e8a931ef2108403db390ff3345c05253935e/tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77", size = 252159, upload-time = "2024-11-27T22:38:13.099Z" }, + { url = "https://files.pythonhosted.org/packages/9e/6e/fa2b916dced65763a5168c6ccb91066f7639bdc88b48adda990db10c8c0b/tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6", size = 237243, upload-time = "2024-11-27T22:38:14.766Z" }, + { url = "https://files.pythonhosted.org/packages/b4/04/885d3b1f650e1153cbb93a6a9782c58a972b94ea4483ae4ac5cedd5e4a09/tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd", size = 259645, upload-time = "2024-11-27T22:38:15.843Z" }, + { url = "https://files.pythonhosted.org/packages/9c/de/6b432d66e986e501586da298e28ebeefd3edc2c780f3ad73d22566034239/tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e", size = 244584, upload-time = "2024-11-27T22:38:17.645Z" }, + { url = "https://files.pythonhosted.org/packages/1c/9a/47c0449b98e6e7d1be6cbac02f93dd79003234ddc4aaab6ba07a9a7482e2/tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98", size = 98875, upload-time = "2024-11-27T22:38:19.159Z" }, + { url = "https://files.pythonhosted.org/packages/ef/60/9b9638f081c6f1261e2688bd487625cd1e660d0a85bd469e91d8db969734/tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4", size = 109418, upload-time = "2024-11-27T22:38:20.064Z" }, + { url = "https://files.pythonhosted.org/packages/04/90/2ee5f2e0362cb8a0b6499dc44f4d7d48f8fff06d28ba46e6f1eaa61a1388/tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7", size = 132708, upload-time = "2024-11-27T22:38:21.659Z" }, + { url = "https://files.pythonhosted.org/packages/c0/ec/46b4108816de6b385141f082ba99e315501ccd0a2ea23db4a100dd3990ea/tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c", size = 123582, upload-time = "2024-11-27T22:38:22.693Z" }, + { url = "https://files.pythonhosted.org/packages/a0/bd/b470466d0137b37b68d24556c38a0cc819e8febe392d5b199dcd7f578365/tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13", size = 232543, upload-time = "2024-11-27T22:38:24.367Z" }, + { url = "https://files.pythonhosted.org/packages/d9/e5/82e80ff3b751373f7cead2815bcbe2d51c895b3c990686741a8e56ec42ab/tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281", size = 241691, upload-time = "2024-11-27T22:38:26.081Z" }, + { url = "https://files.pythonhosted.org/packages/05/7e/2a110bc2713557d6a1bfb06af23dd01e7dde52b6ee7dadc589868f9abfac/tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272", size = 251170, upload-time = "2024-11-27T22:38:27.921Z" }, + { url = "https://files.pythonhosted.org/packages/64/7b/22d713946efe00e0adbcdfd6d1aa119ae03fd0b60ebed51ebb3fa9f5a2e5/tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140", size = 236530, upload-time = "2024-11-27T22:38:29.591Z" }, + { url = "https://files.pythonhosted.org/packages/38/31/3a76f67da4b0cf37b742ca76beaf819dca0ebef26d78fc794a576e08accf/tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2", size = 258666, upload-time = "2024-11-27T22:38:30.639Z" }, + { url = "https://files.pythonhosted.org/packages/07/10/5af1293da642aded87e8a988753945d0cf7e00a9452d3911dd3bb354c9e2/tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744", size = 243954, upload-time = "2024-11-27T22:38:31.702Z" }, + { url = "https://files.pythonhosted.org/packages/5b/b9/1ed31d167be802da0fc95020d04cd27b7d7065cc6fbefdd2f9186f60d7bd/tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec", size = 98724, upload-time = "2024-11-27T22:38:32.837Z" }, + { url = "https://files.pythonhosted.org/packages/c7/32/b0963458706accd9afcfeb867c0f9175a741bf7b19cd424230714d722198/tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69", size = 109383, upload-time = "2024-11-27T22:38:34.455Z" }, + { url = "https://files.pythonhosted.org/packages/6e/c2/61d3e0f47e2b74ef40a68b9e6ad5984f6241a942f7cd3bbfbdbd03861ea9/tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc", size = 14257, upload-time = "2024-11-27T22:38:35.385Z" }, ] [[package]] name = "typing-extensions" -version = "4.13.2" +version = "4.14.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f6/37/23083fcd6e35492953e8d2aaaa68b860eb422b34627b13f2ce3eb6106061/typing_extensions-4.13.2.tar.gz", hash = "sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef", size = 106967 } +sdist = { url = "https://files.pythonhosted.org/packages/98/5a/da40306b885cc8c09109dc2e1abd358d5684b1425678151cdaed4731c822/typing_extensions-4.14.1.tar.gz", hash = "sha256:38b39f4aeeab64884ce9f74c94263ef78f3c22467c8724005483154c26648d36", size = 107673, upload-time = "2025-07-04T13:28:34.16Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8b/54/b1ae86c0973cc6f0210b53d508ca3641fb6d0c56823f288d108bc7ab3cc8/typing_extensions-4.13.2-py3-none-any.whl", hash = "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c", size = 45806 }, + { url = "https://files.pythonhosted.org/packages/b5/00/d631e67a838026495268c2f6884f3711a15a9a2a96cd244fdaea53b823fb/typing_extensions-4.14.1-py3-none-any.whl", hash = "sha256:d1e1e3b58374dc93031d6eda2420a48ea44a36c2b4766a4fdeb3710755731d76", size = 43906, upload-time = "2025-07-04T13:28:32.743Z" }, ] [[package]] name = "urllib3" -version = "2.4.0" +version = "2.5.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8a/78/16493d9c386d8e60e442a35feac5e00f0913c0f4b7c217c11e8ec2ff53e0/urllib3-2.4.0.tar.gz", hash = "sha256:414bc6535b787febd7567804cc015fee39daab8ad86268f1310a9250697de466", size = 390672 } +sdist = { url = "https://files.pythonhosted.org/packages/15/22/9ee70a2574a4f4599c47dd506532914ce044817c7752a79b6a51286319bc/urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", size = 393185, upload-time = "2025-06-18T14:07:41.644Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6b/11/cc635220681e93a0183390e26485430ca2c7b5f9d33b15c74c2861cb8091/urllib3-2.4.0-py3-none-any.whl", hash = "sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813", size = 128680 }, + { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795, upload-time = "2025-06-18T14:07:40.39Z" }, ] diff --git a/packages/ducjs/src/flatbuffers/duc/snap-settings.ts b/packages/ducjs/src/flatbuffers/duc/snap-settings.ts index d2941825..a44414a1 100644 --- a/packages/ducjs/src/flatbuffers/duc/snap-settings.ts +++ b/packages/ducjs/src/flatbuffers/duc/snap-settings.ts @@ -69,7 +69,7 @@ isObjectSnapOn():boolean { activeObjectSnapModes(index: number):OBJECT_SNAP_MODE|null { const offset = this.bb!.__offset(this.bb_pos, 18); - return offset ? this.bb!.readUint8(this.bb!.__vector(this.bb_pos + offset) + index) : 0; + return offset ? this.bb!.readUint8(this.bb!.__vector(this.bb_pos + offset) + index) : null; } activeObjectSnapModesLength():number { @@ -84,7 +84,7 @@ activeObjectSnapModesArray():Uint8Array|null { snapPriority(index: number):OBJECT_SNAP_MODE|null { const offset = this.bb!.__offset(this.bb_pos, 20); - return offset ? this.bb!.readUint8(this.bb!.__vector(this.bb_pos + offset) + index) : 0; + return offset ? this.bb!.readUint8(this.bb!.__vector(this.bb_pos + offset) + index) : null; } snapPriorityLength():number { diff --git a/packages/ducjs/src/flatbuffers/duc/tolerance-clause.ts b/packages/ducjs/src/flatbuffers/duc/tolerance-clause.ts index a5c50705..5dae60a0 100644 --- a/packages/ducjs/src/flatbuffers/duc/tolerance-clause.ts +++ b/packages/ducjs/src/flatbuffers/duc/tolerance-clause.ts @@ -41,7 +41,7 @@ zoneType():TOLERANCE_ZONE_TYPE|null { featureModifiers(index: number):FEATURE_MODIFIER|null { const offset = this.bb!.__offset(this.bb_pos, 8); - return offset ? this.bb!.readUint8(this.bb!.__vector(this.bb_pos + offset) + index) : 0; + return offset ? this.bb!.readUint8(this.bb!.__vector(this.bb_pos + offset) + index) : null; } featureModifiersLength():number { diff --git a/packages/ducjs/src/technical/scopes.ts b/packages/ducjs/src/technical/scopes.ts index 151080e3..2a91f8a7 100644 --- a/packages/ducjs/src/technical/scopes.ts +++ b/packages/ducjs/src/technical/scopes.ts @@ -42,17 +42,26 @@ export const metricMeasures = [ export type MetricMeasure = typeof metricMeasures[number]; export const imperialMeasures = [ - 'th', // Thou/mil + 'µin', // Microinches + 'th', // Thou + 'mil', // Mils 'ln', // Line + 'in-us', // US Survey Inch 'in', // Inches 'h', // Hand + 'ft-us', // US Survey Feet 'ft', // Feet + 'yd-us', // US Survey Yard 'yd', // Yards 'rd', // Rods 'ch', // Chains 'fur', // Furlongs + 'mi-us', // US Survey Mile 'mi', // Miles 'lea', // Leagues + 'au', // Astronomical Unit + 'ly', // Light Year + 'pc', // Parsec ] as const; export type ImperialMeasure = typeof imperialMeasures[number]; @@ -99,17 +108,26 @@ export const metricUnits: UnitDefinition[] = [ // Define imperial units - exponents are now relative to meter as the base unit // These values are log10 of their meter equivalents export const imperialUnits: UnitDefinition[] = [ - { prefix: 'th', unit: 'thou', full: 'thou', exponent: -4.595 }, // log10(0.0000254) ≈ -4.595 - { prefix: 'ln', unit: 'line', full: 'line', exponent: -2.674 }, // log10(0.00211667) ≈ -2.674 - { prefix: 'in', unit: 'inch', full: 'inch', exponent: -1.595 }, // log10(0.0254) ≈ -1.595 - { prefix: 'h', unit: 'hand', full: 'hand', exponent: -0.993 }, // log10(0.1016) ≈ -0.993 - { prefix: 'ft', unit: 'foot', full: 'foot', exponent: -0.516 }, // log10(0.3048) ≈ -0.516 - { prefix: 'yd', unit: 'yard', full: 'yard', exponent: -0.039 }, // log10(0.9144) ≈ -0.039 - { prefix: 'rd', unit: 'rod', full: 'rod', exponent: 0.701 }, // log10(5.0292) ≈ 0.701 - { prefix: 'ch', unit: 'chain', full: 'chain', exponent: 1.304 }, // log10(20.1168) ≈ 1.304 - { prefix: 'fur', unit: 'furlong', full: 'furlong', exponent: 2.304 }, // log10(201.168) ≈ 2.304 - { prefix: 'mi', unit: 'mile', full: 'mile', exponent: 3.207 }, // log10(1609.344) ≈ 3.207 - { prefix: 'lea', unit: 'league', full: 'league', exponent: 3.684 } // log10(4828.032) ≈ 3.684 + { prefix: 'µin', unit: 'microinch', full: 'microinch', exponent: -7.595 }, // log10(2.54e-8) + { prefix: 'th', unit: 'thou', full: 'thou', exponent: -4.595 }, // log10(0.0000254) + { prefix: 'mil', unit: 'mil', full: 'mil', exponent: -4.595 }, // log10(0.0000254) + { prefix: 'ln', unit: 'line', full: 'line', exponent: -2.674 }, // log10(0.00211667) + { prefix: 'in-us', unit: 'us-inch', full: 'US Survey Inch', exponent: -1.5951 }, // log10(0.0254000508) + { prefix: 'in', unit: 'inch', full: 'inch', exponent: -1.595 }, // log10(0.0254) + { prefix: 'h', unit: 'hand', full: 'hand', exponent: -0.993 }, // log10(0.1016) + { prefix: 'ft-us', unit: 'us-foot', full: 'US Survey Foot', exponent: -0.5159 }, // log10(0.3048006096) + { prefix: 'ft', unit: 'foot', full: 'foot', exponent: -0.516 }, // log10(0.3048) + { prefix: 'yd-us', unit: 'us-yard', full: 'US Survey Yard', exponent: -0.0388 }, // log10(0.9144018288) + { prefix: 'yd', unit: 'yard', full: 'yard', exponent: -0.039 }, // log10(0.9144) + { prefix: 'rd', unit: 'rod', full: 'rod', exponent: 0.701 }, // log10(5.0292) + { prefix: 'ch', unit: 'chain', full: 'chain', exponent: 1.304 }, // log10(20.1168) + { prefix: 'fur', unit: 'furlong', full: 'furlong', exponent: 2.304 }, // log10(201.168) + { prefix: 'mi-us', unit: 'us-mile', full: 'US Survey Mile', exponent: 3.2066 }, // log10(1609.3472) + { prefix: 'mi', unit: 'mile', full: 'mile', exponent: 3.207 }, // log10(1609.344) + { prefix: 'lea', unit: 'league', full: 'league', exponent: 3.684 }, // log10(4828.032) + { prefix: 'au', unit: 'au', full: 'Astronomical Unit', exponent: 11.175 }, // log10(1.496e11) + { prefix: 'ly', unit: 'ly', full: 'Light Year', exponent: 15.976 }, // log10(9.461e15) + { prefix: 'pc', unit: 'pc', full: 'Parsec', exponent: 16.489 }, // log10(3.086e16) ]; // Scale factors for unit conversions - using meter as the base unit @@ -142,17 +160,26 @@ export const ScaleFactors: { [key in CombinedMeasure]: number } = { Rm: 1e27, Qm: 1e30, // Imperial scales - th: 0.0000254, // 0.001 inch - ln: 0.00211667, // 1/12 inch + 'µin': 2.54e-8, // Microinch + th: 0.0000254, // Thou (0.001 inch) + mil: 0.0000254, // Mil (same as Thou) + ln: 0.00211667, // 1/12 inch + 'in-us': 0.0254000508, // US Survey Inch in: 0.0254, - h: 0.1016, // 4 inches + h: 0.1016, // 4 inches + 'ft-us': 0.3048006096, // US Survey Foot ft: 0.3048, + 'yd-us': 0.9144018288, // US Survey Yard yd: 0.9144, rd: 5.0292, ch: 20.1168, fur: 201.168, + 'mi-us': 1609.34721869, // US Survey Mile mi: 1609.344, - lea: 4828.032, // 3 miles + lea: 4828.032, // 3 miles + au: 149597870700, // Astronomical Unit + ly: 9460730472580800, // Light Year + pc: 30856775814913670, // Parsec }; /** diff --git a/packages/ducrs/src/flatbuffers/duc_generated.rs b/packages/ducrs/src/flatbuffers/duc_generated.rs index 82e4fe75..18fd110f 100644 --- a/packages/ducrs/src/flatbuffers/duc_generated.rs +++ b/packages/ducrs/src/flatbuffers/duc_generated.rs @@ -69,7 +69,7 @@ impl<'a> flatbuffers::Follow<'a> for VERTICAL_ALIGN { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -78,7 +78,7 @@ impl flatbuffers::Push for VERTICAL_ALIGN { type Output = VERTICAL_ALIGN; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -158,7 +158,7 @@ impl<'a> flatbuffers::Follow<'a> for TEXT_ALIGN { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -167,7 +167,7 @@ impl flatbuffers::Push for TEXT_ALIGN { type Output = TEXT_ALIGN; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -247,7 +247,7 @@ impl<'a> flatbuffers::Follow<'a> for LINE_SPACING_TYPE { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -256,7 +256,7 @@ impl flatbuffers::Push for LINE_SPACING_TYPE { type Output = LINE_SPACING_TYPE; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -336,7 +336,7 @@ impl<'a> flatbuffers::Follow<'a> for STACKED_TEXT_ALIGN { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -345,7 +345,7 @@ impl flatbuffers::Push for STACKED_TEXT_ALIGN { type Output = STACKED_TEXT_ALIGN; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -421,7 +421,7 @@ impl<'a> flatbuffers::Follow<'a> for TEXT_FIELD_SOURCE_TYPE { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -430,7 +430,7 @@ impl flatbuffers::Push for TEXT_FIELD_SOURCE_TYPE { type Output = TEXT_FIELD_SOURCE_TYPE; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -542,7 +542,7 @@ impl<'a> flatbuffers::Follow<'a> for TEXT_FIELD_SOURCE_PROPERTY { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -551,7 +551,7 @@ impl flatbuffers::Push for TEXT_FIELD_SOURCE_PROPERTY { type Output = TEXT_FIELD_SOURCE_PROPERTY; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -631,7 +631,7 @@ impl<'a> flatbuffers::Follow<'a> for STROKE_PLACEMENT { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -640,7 +640,7 @@ impl flatbuffers::Push for STROKE_PLACEMENT { type Output = STROKE_PLACEMENT; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -720,7 +720,7 @@ impl<'a> flatbuffers::Follow<'a> for STROKE_WIDTH { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -729,7 +729,7 @@ impl flatbuffers::Push for STROKE_WIDTH { type Output = STROKE_WIDTH; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -821,7 +821,7 @@ impl<'a> flatbuffers::Follow<'a> for ELEMENT_CONTENT_PREFERENCE { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -830,7 +830,7 @@ impl flatbuffers::Push for ELEMENT_CONTENT_PREFERENCE { type Output = ELEMENT_CONTENT_PREFERENCE; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -914,7 +914,7 @@ impl<'a> flatbuffers::Follow<'a> for STROKE_PREFERENCE { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -923,7 +923,7 @@ impl flatbuffers::Push for STROKE_PREFERENCE { type Output = STROKE_PREFERENCE; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -1015,7 +1015,7 @@ impl<'a> flatbuffers::Follow<'a> for STROKE_SIDE_PREFERENCE { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -1024,7 +1024,7 @@ impl flatbuffers::Push for STROKE_SIDE_PREFERENCE { type Output = STROKE_SIDE_PREFERENCE; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -1104,7 +1104,7 @@ impl<'a> flatbuffers::Follow<'a> for STROKE_CAP { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -1113,7 +1113,7 @@ impl flatbuffers::Push for STROKE_CAP { type Output = STROKE_CAP; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -1193,7 +1193,7 @@ impl<'a> flatbuffers::Follow<'a> for STROKE_JOIN { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -1202,7 +1202,7 @@ impl flatbuffers::Push for STROKE_JOIN { type Output = STROKE_JOIN; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -1330,7 +1330,7 @@ impl<'a> flatbuffers::Follow<'a> for LINE_HEAD { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -1339,7 +1339,7 @@ impl flatbuffers::Push for LINE_HEAD { type Output = LINE_HEAD; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -1419,7 +1419,7 @@ impl<'a> flatbuffers::Follow<'a> for BEZIER_MIRRORING { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -1428,7 +1428,7 @@ impl flatbuffers::Push for BEZIER_MIRRORING { type Output = BEZIER_MIRRORING; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -1504,7 +1504,7 @@ impl<'a> flatbuffers::Follow<'a> for HANDLE_TYPE { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -1513,7 +1513,7 @@ impl flatbuffers::Push for HANDLE_TYPE { type Output = HANDLE_TYPE; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -1605,7 +1605,7 @@ impl<'a> flatbuffers::Follow<'a> for YOUTUBE_STATES { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -1614,7 +1614,7 @@ impl flatbuffers::Push for YOUTUBE_STATES { type Output = YOUTUBE_STATES; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -1710,7 +1710,7 @@ impl<'a> flatbuffers::Follow<'a> for BLENDING { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -1719,7 +1719,7 @@ impl flatbuffers::Push for BLENDING { type Output = BLENDING; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -1803,7 +1803,7 @@ impl<'a> flatbuffers::Follow<'a> for GRID_DISPLAY_TYPE { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -1812,7 +1812,7 @@ impl flatbuffers::Push for GRID_DISPLAY_TYPE { type Output = GRID_DISPLAY_TYPE; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -1900,7 +1900,7 @@ impl<'a> flatbuffers::Follow<'a> for GRID_TYPE { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -1909,7 +1909,7 @@ impl flatbuffers::Push for GRID_TYPE { type Output = GRID_TYPE; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -2057,7 +2057,7 @@ impl<'a> flatbuffers::Follow<'a> for OBJECT_SNAP_MODE { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -2066,7 +2066,7 @@ impl flatbuffers::Push for OBJECT_SNAP_MODE { type Output = OBJECT_SNAP_MODE; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -2142,7 +2142,7 @@ impl<'a> flatbuffers::Follow<'a> for SNAP_MODE { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -2151,7 +2151,7 @@ impl flatbuffers::Push for SNAP_MODE { type Output = SNAP_MODE; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -2231,7 +2231,7 @@ impl<'a> flatbuffers::Follow<'a> for SNAP_OVERRIDE_BEHAVIOR { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -2240,7 +2240,7 @@ impl flatbuffers::Push for SNAP_OVERRIDE_BEHAVIOR { type Output = SNAP_OVERRIDE_BEHAVIOR; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -2324,7 +2324,7 @@ impl<'a> flatbuffers::Follow<'a> for SNAP_MARKER_SHAPE { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -2333,7 +2333,7 @@ impl flatbuffers::Push for SNAP_MARKER_SHAPE { type Output = SNAP_MARKER_SHAPE; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -2437,7 +2437,7 @@ impl<'a> flatbuffers::Follow<'a> for TABLE_CELL_ALIGNMENT { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -2446,7 +2446,7 @@ impl flatbuffers::Push for TABLE_CELL_ALIGNMENT { type Output = TABLE_CELL_ALIGNMENT; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -2522,7 +2522,7 @@ impl<'a> flatbuffers::Follow<'a> for TABLE_FLOW_DIRECTION { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -2531,7 +2531,7 @@ impl flatbuffers::Push for TABLE_FLOW_DIRECTION { type Output = TABLE_FLOW_DIRECTION; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -2619,7 +2619,7 @@ impl<'a> flatbuffers::Follow<'a> for TOLERANCE_DISPLAY { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -2628,7 +2628,7 @@ impl flatbuffers::Push for TOLERANCE_DISPLAY { type Output = TOLERANCE_DISPLAY; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -2748,7 +2748,7 @@ impl<'a> flatbuffers::Follow<'a> for DIMENSION_TYPE { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -2757,7 +2757,7 @@ impl flatbuffers::Push for DIMENSION_TYPE { type Output = DIMENSION_TYPE; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -2833,7 +2833,7 @@ impl<'a> flatbuffers::Follow<'a> for MARK_ELLIPSE_CENTER { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -2842,7 +2842,7 @@ impl flatbuffers::Push for MARK_ELLIPSE_CENTER { type Output = MARK_ELLIPSE_CENTER; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -2926,7 +2926,7 @@ impl<'a> flatbuffers::Follow<'a> for TEXT_FLOW_DIRECTION { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -2935,7 +2935,7 @@ impl flatbuffers::Push for TEXT_FLOW_DIRECTION { type Output = TEXT_FLOW_DIRECTION; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -3015,7 +3015,7 @@ impl<'a> flatbuffers::Follow<'a> for COLUMN_TYPE { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -3024,7 +3024,7 @@ impl flatbuffers::Push for COLUMN_TYPE { type Output = COLUMN_TYPE; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -3172,7 +3172,7 @@ impl<'a> flatbuffers::Follow<'a> for GDT_SYMBOL { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -3181,7 +3181,7 @@ impl flatbuffers::Push for GDT_SYMBOL { type Output = GDT_SYMBOL; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -3261,7 +3261,7 @@ impl<'a> flatbuffers::Follow<'a> for MATERIAL_CONDITION { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -3270,7 +3270,7 @@ impl flatbuffers::Push for MATERIAL_CONDITION { type Output = MATERIAL_CONDITION; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -3402,7 +3402,7 @@ impl<'a> flatbuffers::Follow<'a> for FEATURE_MODIFIER { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -3411,7 +3411,7 @@ impl flatbuffers::Push for FEATURE_MODIFIER { type Output = FEATURE_MODIFIER; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -3499,7 +3499,7 @@ impl<'a> flatbuffers::Follow<'a> for TOLERANCE_ZONE_TYPE { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -3508,7 +3508,7 @@ impl flatbuffers::Push for TOLERANCE_ZONE_TYPE { type Output = TOLERANCE_ZONE_TYPE; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -3592,7 +3592,7 @@ impl<'a> flatbuffers::Follow<'a> for DATUM_TARGET_TYPE { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -3601,7 +3601,7 @@ impl flatbuffers::Push for DATUM_TARGET_TYPE { type Output = DATUM_TARGET_TYPE; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -3681,7 +3681,7 @@ impl<'a> flatbuffers::Follow<'a> for TOLERANCE_TYPE { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -3690,7 +3690,7 @@ impl flatbuffers::Push for TOLERANCE_TYPE { type Output = TOLERANCE_TYPE; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -3770,7 +3770,7 @@ impl<'a> flatbuffers::Follow<'a> for DATUM_BRACKET_STYLE { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -3779,7 +3779,7 @@ impl flatbuffers::Push for DATUM_BRACKET_STYLE { type Output = DATUM_BRACKET_STYLE; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -3867,7 +3867,7 @@ impl<'a> flatbuffers::Follow<'a> for DIMENSION_UNITS_FORMAT { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -3876,7 +3876,7 @@ impl flatbuffers::Push for DIMENSION_UNITS_FORMAT { type Output = DIMENSION_UNITS_FORMAT; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -3960,7 +3960,7 @@ impl<'a> flatbuffers::Follow<'a> for DIMENSION_FIT_RULE { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -3969,7 +3969,7 @@ impl flatbuffers::Push for DIMENSION_FIT_RULE { type Output = DIMENSION_FIT_RULE; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -4049,7 +4049,7 @@ impl<'a> flatbuffers::Follow<'a> for DIMENSION_TEXT_PLACEMENT { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -4058,7 +4058,7 @@ impl flatbuffers::Push for DIMENSION_TEXT_PLACEMENT { type Output = DIMENSION_TEXT_PLACEMENT; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -4146,7 +4146,7 @@ impl<'a> flatbuffers::Follow<'a> for ANGULAR_UNITS_FORMAT { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -4155,7 +4155,7 @@ impl flatbuffers::Push for ANGULAR_UNITS_FORMAT { type Output = ANGULAR_UNITS_FORMAT; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -4231,7 +4231,7 @@ impl<'a> flatbuffers::Follow<'a> for UNIT_SYSTEM { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -4240,7 +4240,7 @@ impl flatbuffers::Push for UNIT_SYSTEM { type Output = UNIT_SYSTEM; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -4316,7 +4316,7 @@ impl<'a> flatbuffers::Follow<'a> for DECIMAL_SEPARATOR { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -4325,7 +4325,7 @@ impl flatbuffers::Push for DECIMAL_SEPARATOR { type Output = DECIMAL_SEPARATOR; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -4409,7 +4409,7 @@ impl<'a> flatbuffers::Follow<'a> for VIEWPORT_SHADE_PLOT { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -4418,7 +4418,7 @@ impl flatbuffers::Push for VIEWPORT_SHADE_PLOT { type Output = VIEWPORT_SHADE_PLOT; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -4498,7 +4498,7 @@ impl<'a> flatbuffers::Follow<'a> for HATCH_STYLE { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -4507,7 +4507,7 @@ impl flatbuffers::Push for HATCH_STYLE { type Output = HATCH_STYLE; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -4587,7 +4587,7 @@ impl<'a> flatbuffers::Follow<'a> for IMAGE_STATUS { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -4596,7 +4596,7 @@ impl flatbuffers::Push for IMAGE_STATUS { type Output = IMAGE_STATUS; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -4672,7 +4672,7 @@ impl<'a> flatbuffers::Follow<'a> for BLOCK_ATTACHMENT { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -4681,7 +4681,7 @@ impl flatbuffers::Push for BLOCK_ATTACHMENT { type Output = BLOCK_ATTACHMENT; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -4761,7 +4761,7 @@ impl<'a> flatbuffers::Follow<'a> for AXIS { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -4770,7 +4770,7 @@ impl flatbuffers::Push for AXIS { type Output = AXIS; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -4850,7 +4850,7 @@ impl<'a> flatbuffers::Follow<'a> for PRUNING_LEVEL { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -4859,7 +4859,7 @@ impl flatbuffers::Push for PRUNING_LEVEL { type Output = PRUNING_LEVEL; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -4935,7 +4935,7 @@ impl<'a> flatbuffers::Follow<'a> for PARAMETRIC_SOURCE_TYPE { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -4944,7 +4944,7 @@ impl flatbuffers::Push for PARAMETRIC_SOURCE_TYPE { type Output = PARAMETRIC_SOURCE_TYPE; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -5109,7 +5109,7 @@ impl<'a> flatbuffers::Follow<'a> for LEADER_CONTENT_TYPE { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -5118,7 +5118,7 @@ impl flatbuffers::Push for LEADER_CONTENT_TYPE { type Output = LEADER_CONTENT_TYPE; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -5202,7 +5202,7 @@ impl<'a> flatbuffers::Follow<'a> for BOOLEAN_OPERATION { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -5211,7 +5211,7 @@ impl flatbuffers::Push for BOOLEAN_OPERATION { type Output = BOOLEAN_OPERATION; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -5291,7 +5291,7 @@ impl<'a> flatbuffers::Follow<'a> for DucTextDynamicSourceData { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -5300,7 +5300,7 @@ impl flatbuffers::Push for DucTextDynamicSourceData { type Output = DucTextDynamicSourceData; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -5382,7 +5382,7 @@ impl<'a> flatbuffers::Follow<'a> for LeaderContentData { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -5391,7 +5391,7 @@ impl flatbuffers::Push for LeaderContentData { type Output = LeaderContentData; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -5557,7 +5557,7 @@ impl<'a> flatbuffers::Follow<'a> for Element { type Inner = Self; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - let b = flatbuffers::read_scalar_at::(buf, loc); + let b = unsafe { flatbuffers::read_scalar_at::(buf, loc) }; Self(b) } } @@ -5566,7 +5566,7 @@ impl flatbuffers::Push for Element { type Output = Element; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - flatbuffers::emplace_scalar::(dst, self.0); + unsafe { flatbuffers::emplace_scalar::(dst, self.0); } } } @@ -5620,21 +5620,21 @@ impl<'a> flatbuffers::Follow<'a> for GeometricPoint { type Inner = &'a GeometricPoint; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - <&'a GeometricPoint>::follow(buf, loc) + unsafe { <&'a GeometricPoint>::follow(buf, loc) } } } impl<'a> flatbuffers::Follow<'a> for &'a GeometricPoint { type Inner = &'a GeometricPoint; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - flatbuffers::follow_cast_ref::(buf, loc) + unsafe { flatbuffers::follow_cast_ref::(buf, loc) } } } impl<'b> flatbuffers::Push for GeometricPoint { type Output = GeometricPoint; #[inline] unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { - let src = ::core::slice::from_raw_parts(self as *const GeometricPoint as *const u8, ::size()); + let src = unsafe { ::core::slice::from_raw_parts(self as *const GeometricPoint as *const u8, ::size()) }; dst.copy_from_slice(src); } #[inline] @@ -5736,7 +5736,7 @@ impl<'a> flatbuffers::Follow<'a> for DictionaryEntry<'a> { type Inner = DictionaryEntry<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -5861,7 +5861,7 @@ impl<'a> flatbuffers::Follow<'a> for StringValueEntry<'a> { type Inner = StringValueEntry<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -5986,7 +5986,7 @@ impl<'a> flatbuffers::Follow<'a> for Identifier<'a> { type Inner = Identifier<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -6128,7 +6128,7 @@ impl<'a> flatbuffers::Follow<'a> for DucUcs<'a> { type Inner = DucUcs<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -6242,7 +6242,7 @@ impl<'a> flatbuffers::Follow<'a> for DucView<'a> { type Inner = DucView<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -6424,7 +6424,7 @@ impl<'a> flatbuffers::Follow<'a> for Margins<'a> { type Inner = Margins<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -6572,7 +6572,7 @@ impl<'a> flatbuffers::Follow<'a> for TilingProperties<'a> { type Inner = TilingProperties<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -6737,7 +6737,7 @@ impl<'a> flatbuffers::Follow<'a> for HatchPatternLine<'a> { type Inner = HatchPatternLine<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -6885,7 +6885,7 @@ impl<'a> flatbuffers::Follow<'a> for CustomHatchPattern<'a> { type Inner = CustomHatchPattern<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -7016,7 +7016,7 @@ impl<'a> flatbuffers::Follow<'a> for DucHatchStyle<'a> { type Inner = DucHatchStyle<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -7215,7 +7215,7 @@ impl<'a> flatbuffers::Follow<'a> for DucImageFilter<'a> { type Inner = DucImageFilter<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -7329,7 +7329,7 @@ impl<'a> flatbuffers::Follow<'a> for ElementContentBase<'a> { type Inner = ElementContentBase<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -7528,7 +7528,7 @@ impl<'a> flatbuffers::Follow<'a> for StrokeStyle<'a> { type Inner = StrokeStyle<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -7727,7 +7727,7 @@ impl<'a> flatbuffers::Follow<'a> for StrokeSides<'a> { type Inner = StrokeSides<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -7841,7 +7841,7 @@ impl<'a> flatbuffers::Follow<'a> for ElementStroke<'a> { type Inner = ElementStroke<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -8006,7 +8006,7 @@ impl<'a> flatbuffers::Follow<'a> for ElementBackground<'a> { type Inner = ElementBackground<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -8103,7 +8103,7 @@ impl<'a> flatbuffers::Follow<'a> for _DucElementStylesBase<'a> { type Inner = _DucElementStylesBase<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -8268,7 +8268,7 @@ impl<'a> flatbuffers::Follow<'a> for BoundElement<'a> { type Inner = BoundElement<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -8382,7 +8382,7 @@ impl<'a> flatbuffers::Follow<'a> for _DucElementBase<'a> { type Inner = _DucElementBase<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -8983,7 +8983,7 @@ impl<'a> flatbuffers::Follow<'a> for DucPoint<'a> { type Inner = DucPoint<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -9114,7 +9114,7 @@ impl<'a> flatbuffers::Follow<'a> for DucHead<'a> { type Inner = DucHead<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -9245,7 +9245,7 @@ impl<'a> flatbuffers::Follow<'a> for PointBindingPoint<'a> { type Inner = PointBindingPoint<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -9359,7 +9359,7 @@ impl<'a> flatbuffers::Follow<'a> for DucPointBinding<'a> { type Inner = DucPointBinding<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -9541,7 +9541,7 @@ impl<'a> flatbuffers::Follow<'a> for DucLineReference<'a> { type Inner = DucLineReference<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -9655,7 +9655,7 @@ impl<'a> flatbuffers::Follow<'a> for DucLine<'a> { type Inner = DucLine<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -9769,7 +9769,7 @@ impl<'a> flatbuffers::Follow<'a> for DucPath<'a> { type Inner = DucPath<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -9900,7 +9900,7 @@ impl<'a> flatbuffers::Follow<'a> for _DucLinearElementBase<'a> { type Inner = _DucLinearElementBase<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -10099,7 +10099,7 @@ impl<'a> flatbuffers::Follow<'a> for DucStackLikeStyles<'a> { type Inner = DucStackLikeStyles<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -10213,7 +10213,7 @@ impl<'a> flatbuffers::Follow<'a> for _DucStackBase<'a> { type Inner = _DucStackBase<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -10412,7 +10412,7 @@ impl<'a> flatbuffers::Follow<'a> for _DucStackElementBase<'a> { type Inner = _DucStackElementBase<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -10577,7 +10577,7 @@ impl<'a> flatbuffers::Follow<'a> for LineSpacing<'a> { type Inner = LineSpacing<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -10691,7 +10691,7 @@ impl<'a> flatbuffers::Follow<'a> for DucTextStyle<'a> { type Inner = DucTextStyle<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -10992,7 +10992,7 @@ impl<'a> flatbuffers::Follow<'a> for DucTableCellStyle<'a> { type Inner = DucTableCellStyle<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -11140,7 +11140,7 @@ impl<'a> flatbuffers::Follow<'a> for DucTableStyle<'a> { type Inner = DucTableStyle<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -11288,7 +11288,7 @@ impl<'a> flatbuffers::Follow<'a> for DucLeaderStyle<'a> { type Inner = DucLeaderStyle<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -11453,7 +11453,7 @@ impl<'a> flatbuffers::Follow<'a> for DimensionToleranceStyle<'a> { type Inner = DimensionToleranceStyle<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -11635,7 +11635,7 @@ impl<'a> flatbuffers::Follow<'a> for DimensionFitStyle<'a> { type Inner = DimensionFitStyle<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -11766,7 +11766,7 @@ impl<'a> flatbuffers::Follow<'a> for DimensionLineStyle<'a> { type Inner = DimensionLineStyle<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -11880,7 +11880,7 @@ impl<'a> flatbuffers::Follow<'a> for DimensionExtLineStyle<'a> { type Inner = DimensionExtLineStyle<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -12011,7 +12011,7 @@ impl<'a> flatbuffers::Follow<'a> for DimensionSymbolStyle<'a> { type Inner = DimensionSymbolStyle<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -12142,7 +12142,7 @@ impl<'a> flatbuffers::Follow<'a> for DucDimensionStyle<'a> { type Inner = DucDimensionStyle<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -12324,7 +12324,7 @@ impl<'a> flatbuffers::Follow<'a> for FCFLayoutStyle<'a> { type Inner = FCFLayoutStyle<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -12455,7 +12455,7 @@ impl<'a> flatbuffers::Follow<'a> for FCFSymbolStyle<'a> { type Inner = FCFSymbolStyle<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -12552,7 +12552,7 @@ impl<'a> flatbuffers::Follow<'a> for FCFDatumStyle<'a> { type Inner = FCFDatumStyle<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -12649,7 +12649,7 @@ impl<'a> flatbuffers::Follow<'a> for DucFeatureControlFrameStyle<'a> { type Inner = DucFeatureControlFrameStyle<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -12797,7 +12797,7 @@ impl<'a> flatbuffers::Follow<'a> for ParagraphFormatting<'a> { type Inner = ParagraphFormatting<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -12996,7 +12996,7 @@ impl<'a> flatbuffers::Follow<'a> for StackFormatProperties<'a> { type Inner = StackFormatProperties<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -13127,7 +13127,7 @@ impl<'a> flatbuffers::Follow<'a> for StackFormat<'a> { type Inner = StackFormat<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -13258,7 +13258,7 @@ impl<'a> flatbuffers::Follow<'a> for DucDocStyle<'a> { type Inner = DucDocStyle<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -13389,7 +13389,7 @@ impl<'a> flatbuffers::Follow<'a> for DucViewportStyle<'a> { type Inner = DucViewportStyle<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -13486,7 +13486,7 @@ impl<'a> flatbuffers::Follow<'a> for DucPlotStyle<'a> { type Inner = DucPlotStyle<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -13566,7 +13566,7 @@ impl<'a> flatbuffers::Follow<'a> for DucXRayStyle<'a> { type Inner = DucXRayStyle<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -13663,7 +13663,7 @@ impl<'a> flatbuffers::Follow<'a> for DucRectangleElement<'a> { type Inner = DucRectangleElement<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -13760,7 +13760,7 @@ impl<'a> flatbuffers::Follow<'a> for DucPolygonElement<'a> { type Inner = DucPolygonElement<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -13874,7 +13874,7 @@ impl<'a> flatbuffers::Follow<'a> for DucEllipseElement<'a> { type Inner = DucEllipseElement<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -14039,7 +14039,7 @@ impl<'a> flatbuffers::Follow<'a> for DucEmbeddableElement<'a> { type Inner = DucEmbeddableElement<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -14301,7 +14301,7 @@ impl<'a> flatbuffers::Follow<'a> for DucPdfElement<'a> { type Inner = DucPdfElement<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -14432,7 +14432,7 @@ impl<'a> flatbuffers::Follow<'a> for DucMermaidElement<'a> { type Inner = DucMermaidElement<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -14580,7 +14580,7 @@ impl<'a> flatbuffers::Follow<'a> for DucTableColumn<'a> { type Inner = DucTableColumn<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -14722,7 +14722,7 @@ impl<'a> flatbuffers::Follow<'a> for DucTableRow<'a> { type Inner = DucTableRow<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -14864,7 +14864,7 @@ impl<'a> flatbuffers::Follow<'a> for DucTableCellSpan<'a> { type Inner = DucTableCellSpan<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -14978,7 +14978,7 @@ impl<'a> flatbuffers::Follow<'a> for DucTableCell<'a> { type Inner = DucTableCell<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -15160,7 +15160,7 @@ impl<'a> flatbuffers::Follow<'a> for DucTableColumnEntry<'a> { type Inner = DucTableColumnEntry<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -15285,7 +15285,7 @@ impl<'a> flatbuffers::Follow<'a> for DucTableRowEntry<'a> { type Inner = DucTableRowEntry<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -15410,7 +15410,7 @@ impl<'a> flatbuffers::Follow<'a> for DucTableCellEntry<'a> { type Inner = DucTableCellEntry<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -15535,7 +15535,7 @@ impl<'a> flatbuffers::Follow<'a> for DucTableAutoSize<'a> { type Inner = DucTableAutoSize<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -15649,7 +15649,7 @@ impl<'a> flatbuffers::Follow<'a> for DucTableElement<'a> { type Inner = DucTableElement<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -15882,7 +15882,7 @@ impl<'a> flatbuffers::Follow<'a> for ImageCrop<'a> { type Inner = ImageCrop<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -16064,7 +16064,7 @@ impl<'a> flatbuffers::Follow<'a> for DucImageElement<'a> { type Inner = DucImageElement<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -16246,7 +16246,7 @@ impl<'a> flatbuffers::Follow<'a> for DucTextDynamicElementSource<'a> { type Inner = DucTextDynamicElementSource<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -16360,7 +16360,7 @@ impl<'a> flatbuffers::Follow<'a> for DucTextDynamicDictionarySource<'a> { type Inner = DucTextDynamicDictionarySource<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -16457,7 +16457,7 @@ impl<'a> flatbuffers::Follow<'a> for DucTextDynamicSource<'a> { type Inner = DucTextDynamicSource<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -16642,7 +16642,7 @@ impl<'a> flatbuffers::Follow<'a> for DucTextDynamicPart<'a> { type Inner = DucTextDynamicPart<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -16790,7 +16790,7 @@ impl<'a> flatbuffers::Follow<'a> for DucTextElement<'a> { type Inner = DucTextElement<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -16989,7 +16989,7 @@ impl<'a> flatbuffers::Follow<'a> for DucLinearElement<'a> { type Inner = DucLinearElement<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -17103,7 +17103,7 @@ impl<'a> flatbuffers::Follow<'a> for DucArrowElement<'a> { type Inner = DucArrowElement<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -17217,7 +17217,7 @@ impl<'a> flatbuffers::Follow<'a> for DucFreeDrawEnds<'a> { type Inner = DucFreeDrawEnds<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -17348,7 +17348,7 @@ impl<'a> flatbuffers::Follow<'a> for DucFreeDrawElement<'a> { type Inner = DucFreeDrawElement<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -17649,7 +17649,7 @@ impl<'a> flatbuffers::Follow<'a> for DucBlockAttributeDefinition<'a> { type Inner = DucBlockAttributeDefinition<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -17797,7 +17797,7 @@ impl<'a> flatbuffers::Follow<'a> for DucBlockAttributeDefinitionEntry<'a> { type Inner = DucBlockAttributeDefinitionEntry<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -17922,7 +17922,7 @@ impl<'a> flatbuffers::Follow<'a> for DucBlock<'a> { type Inner = DucBlock<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -18297,7 +18297,7 @@ impl<'a> flatbuffers::Follow<'a> for DucBlockDuplicationArray<'a> { type Inner = DucBlockDuplicationArray<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -18445,7 +18445,7 @@ impl<'a> flatbuffers::Follow<'a> for DucBlockInstanceElement<'a> { type Inner = DucBlockInstanceElement<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -18986,7 +18986,7 @@ impl<'a> flatbuffers::Follow<'a> for DucFrameElement<'a> { type Inner = DucFrameElement<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -19083,7 +19083,7 @@ impl<'a> flatbuffers::Follow<'a> for PlotLayout<'a> { type Inner = PlotLayout<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -19180,7 +19180,7 @@ impl<'a> flatbuffers::Follow<'a> for DucPlotElement<'a> { type Inner = DucPlotElement<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -19311,7 +19311,7 @@ impl<'a> flatbuffers::Follow<'a> for DucViewportElement<'a> { type Inner = DucViewportElement<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -19527,7 +19527,7 @@ impl<'a> flatbuffers::Follow<'a> for DucXRayElement<'a> { type Inner = DucXRayElement<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -19692,7 +19692,7 @@ impl<'a> flatbuffers::Follow<'a> for LeaderTextBlockContent<'a> { type Inner = LeaderTextBlockContent<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -19789,7 +19789,7 @@ impl<'a> flatbuffers::Follow<'a> for LeaderBlockContent<'a> { type Inner = LeaderBlockContent<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -19920,7 +19920,7 @@ impl<'a> flatbuffers::Follow<'a> for LeaderContent<'a> { type Inner = LeaderContent<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -20105,7 +20105,7 @@ impl<'a> flatbuffers::Follow<'a> for DucLeaderElement<'a> { type Inner = DucLeaderElement<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -20253,7 +20253,7 @@ impl<'a> flatbuffers::Follow<'a> for DimensionDefinitionPoints<'a> { type Inner = DimensionDefinitionPoints<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -20418,7 +20418,7 @@ impl<'a> flatbuffers::Follow<'a> for DimensionBindings<'a> { type Inner = DimensionBindings<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -20549,7 +20549,7 @@ impl<'a> flatbuffers::Follow<'a> for DimensionBaselineData<'a> { type Inner = DimensionBaselineData<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -20646,7 +20646,7 @@ impl<'a> flatbuffers::Follow<'a> for DimensionContinueData<'a> { type Inner = DimensionContinueData<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -20743,7 +20743,7 @@ impl<'a> flatbuffers::Follow<'a> for DucDimensionElement<'a> { type Inner = DucDimensionElement<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -21027,7 +21027,7 @@ impl<'a> flatbuffers::Follow<'a> for DatumReference<'a> { type Inner = DatumReference<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -21141,7 +21141,7 @@ impl<'a> flatbuffers::Follow<'a> for ToleranceClause<'a> { type Inner = ToleranceClause<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -21289,7 +21289,7 @@ impl<'a> flatbuffers::Follow<'a> for FeatureControlFrameSegment<'a> { type Inner = FeatureControlFrameSegment<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -21420,7 +21420,7 @@ impl<'a> flatbuffers::Follow<'a> for FCFBetweenModifier<'a> { type Inner = FCFBetweenModifier<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -21534,7 +21534,7 @@ impl<'a> flatbuffers::Follow<'a> for FCFProjectedZoneModifier<'a> { type Inner = FCFProjectedZoneModifier<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -21631,7 +21631,7 @@ impl<'a> flatbuffers::Follow<'a> for FCFFrameModifiers<'a> { type Inner = FCFFrameModifiers<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -21796,7 +21796,7 @@ impl<'a> flatbuffers::Follow<'a> for FCFDatumDefinition<'a> { type Inner = FCFDatumDefinition<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -21910,7 +21910,7 @@ impl<'a> flatbuffers::Follow<'a> for FCFSegmentRow<'a> { type Inner = FCFSegmentRow<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -22007,7 +22007,7 @@ impl<'a> flatbuffers::Follow<'a> for DucFeatureControlFrameElement<'a> { type Inner = DucFeatureControlFrameElement<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -22189,7 +22189,7 @@ impl<'a> flatbuffers::Follow<'a> for TextColumn<'a> { type Inner = TextColumn<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -22303,7 +22303,7 @@ impl<'a> flatbuffers::Follow<'a> for ColumnLayout<'a> { type Inner = ColumnLayout<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -22434,7 +22434,7 @@ impl<'a> flatbuffers::Follow<'a> for DucDocElement<'a> { type Inner = DucDocElement<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -22667,7 +22667,7 @@ impl<'a> flatbuffers::Follow<'a> for ParametricSource<'a> { type Inner = ParametricSource<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -22798,7 +22798,7 @@ impl<'a> flatbuffers::Follow<'a> for DucParametricElement<'a> { type Inner = DucParametricElement<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -23060,7 +23060,7 @@ impl<'a> flatbuffers::Follow<'a> for ElementWrapper<'a> { type Inner = ElementWrapper<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -23711,7 +23711,7 @@ impl<'a> flatbuffers::Follow<'a> for DucGlobalState<'a> { type Inner = DucGlobalState<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -23978,7 +23978,7 @@ impl<'a> flatbuffers::Follow<'a> for DucLocalState<'a> { type Inner = DucLocalState<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -24449,7 +24449,7 @@ impl<'a> flatbuffers::Follow<'a> for DucGroup<'a> { type Inner = DucGroup<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -24574,7 +24574,7 @@ impl<'a> flatbuffers::Follow<'a> for DucRegion<'a> { type Inner = DucRegion<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -24716,7 +24716,7 @@ impl<'a> flatbuffers::Follow<'a> for DucLayerOverrides<'a> { type Inner = DucLayerOverrides<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -24830,7 +24830,7 @@ impl<'a> flatbuffers::Follow<'a> for DucLayer<'a> { type Inner = DucLayer<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -24989,7 +24989,7 @@ impl<'a> flatbuffers::Follow<'a> for _UnitSystemBase<'a> { type Inner = _UnitSystemBase<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -25137,7 +25137,7 @@ impl<'a> flatbuffers::Follow<'a> for LinearUnitSystem<'a> { type Inner = LinearUnitSystem<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -25302,7 +25302,7 @@ impl<'a> flatbuffers::Follow<'a> for AngularUnitSystem<'a> { type Inner = AngularUnitSystem<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -25416,7 +25416,7 @@ impl<'a> flatbuffers::Follow<'a> for AlternateUnits<'a> { type Inner = AlternateUnits<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -25564,7 +25564,7 @@ impl<'a> flatbuffers::Follow<'a> for PrimaryUnits<'a> { type Inner = PrimaryUnits<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -25678,7 +25678,7 @@ impl<'a> flatbuffers::Follow<'a> for StandardUnits<'a> { type Inner = StandardUnits<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -25792,7 +25792,7 @@ impl<'a> flatbuffers::Follow<'a> for UnitPrecision<'a> { type Inner = UnitPrecision<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -25940,7 +25940,7 @@ impl<'a> flatbuffers::Follow<'a> for StandardOverrides<'a> { type Inner = StandardOverrides<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -26309,7 +26309,7 @@ impl<'a> flatbuffers::Follow<'a> for DucCommonStyle<'a> { type Inner = DucCommonStyle<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -26423,7 +26423,7 @@ impl<'a> flatbuffers::Follow<'a> for IdentifiedCommonStyle<'a> { type Inner = IdentifiedCommonStyle<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -26537,7 +26537,7 @@ impl<'a> flatbuffers::Follow<'a> for IdentifiedStackLikeStyle<'a> { type Inner = IdentifiedStackLikeStyle<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -26651,7 +26651,7 @@ impl<'a> flatbuffers::Follow<'a> for IdentifiedTextStyle<'a> { type Inner = IdentifiedTextStyle<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -26765,7 +26765,7 @@ impl<'a> flatbuffers::Follow<'a> for IdentifiedDimensionStyle<'a> { type Inner = IdentifiedDimensionStyle<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -26879,7 +26879,7 @@ impl<'a> flatbuffers::Follow<'a> for IdentifiedLeaderStyle<'a> { type Inner = IdentifiedLeaderStyle<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -26993,7 +26993,7 @@ impl<'a> flatbuffers::Follow<'a> for IdentifiedFCFStyle<'a> { type Inner = IdentifiedFCFStyle<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -27107,7 +27107,7 @@ impl<'a> flatbuffers::Follow<'a> for IdentifiedTableStyle<'a> { type Inner = IdentifiedTableStyle<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -27221,7 +27221,7 @@ impl<'a> flatbuffers::Follow<'a> for IdentifiedDocStyle<'a> { type Inner = IdentifiedDocStyle<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -27335,7 +27335,7 @@ impl<'a> flatbuffers::Follow<'a> for IdentifiedViewportStyle<'a> { type Inner = IdentifiedViewportStyle<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -27449,7 +27449,7 @@ impl<'a> flatbuffers::Follow<'a> for IdentifiedHatchStyle<'a> { type Inner = IdentifiedHatchStyle<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -27563,7 +27563,7 @@ impl<'a> flatbuffers::Follow<'a> for IdentifiedXRayStyle<'a> { type Inner = IdentifiedXRayStyle<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -27677,7 +27677,7 @@ impl<'a> flatbuffers::Follow<'a> for StandardStyles<'a> { type Inner = StandardStyles<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -27944,7 +27944,7 @@ impl<'a> flatbuffers::Follow<'a> for GridStyle<'a> { type Inner = GridStyle<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -28075,7 +28075,7 @@ impl<'a> flatbuffers::Follow<'a> for PolarGridSettings<'a> { type Inner = PolarGridSettings<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -28206,7 +28206,7 @@ impl<'a> flatbuffers::Follow<'a> for IsometricGridSettings<'a> { type Inner = IsometricGridSettings<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -28320,7 +28320,7 @@ impl<'a> flatbuffers::Follow<'a> for GridSettings<'a> { type Inner = GridSettings<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -28723,7 +28723,7 @@ impl<'a> flatbuffers::Follow<'a> for SnapOverride<'a> { type Inner = SnapOverride<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -28837,7 +28837,7 @@ impl<'a> flatbuffers::Follow<'a> for DynamicSnapSettings<'a> { type Inner = DynamicSnapSettings<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -28968,7 +28968,7 @@ impl<'a> flatbuffers::Follow<'a> for PolarTrackingSettings<'a> { type Inner = PolarTrackingSettings<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -29133,7 +29133,7 @@ impl<'a> flatbuffers::Follow<'a> for TrackingLineStyle<'a> { type Inner = TrackingLineStyle<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -29264,7 +29264,7 @@ impl<'a> flatbuffers::Follow<'a> for LayerSnapFilters<'a> { type Inner = LayerSnapFilters<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -29378,7 +29378,7 @@ impl<'a> flatbuffers::Follow<'a> for SnapMarkerStyle<'a> { type Inner = SnapMarkerStyle<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -29492,7 +29492,7 @@ impl<'a> flatbuffers::Follow<'a> for SnapMarkerStyleEntry<'a> { type Inner = SnapMarkerStyleEntry<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -29606,7 +29606,7 @@ impl<'a> flatbuffers::Follow<'a> for SnapMarkerSettings<'a> { type Inner = SnapMarkerSettings<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -29754,7 +29754,7 @@ impl<'a> flatbuffers::Follow<'a> for SnapSettings<'a> { type Inner = SnapSettings<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -30191,7 +30191,7 @@ impl<'a> flatbuffers::Follow<'a> for IdentifiedGridSettings<'a> { type Inner = IdentifiedGridSettings<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -30305,7 +30305,7 @@ impl<'a> flatbuffers::Follow<'a> for IdentifiedSnapSettings<'a> { type Inner = IdentifiedSnapSettings<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -30419,7 +30419,7 @@ impl<'a> flatbuffers::Follow<'a> for IdentifiedUcs<'a> { type Inner = IdentifiedUcs<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -30533,7 +30533,7 @@ impl<'a> flatbuffers::Follow<'a> for IdentifiedView<'a> { type Inner = IdentifiedView<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -30647,7 +30647,7 @@ impl<'a> flatbuffers::Follow<'a> for StandardViewSettings<'a> { type Inner = StandardViewSettings<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -30795,7 +30795,7 @@ impl<'a> flatbuffers::Follow<'a> for DimensionValidationRules<'a> { type Inner = DimensionValidationRules<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -30926,7 +30926,7 @@ impl<'a> flatbuffers::Follow<'a> for LayerValidationRules<'a> { type Inner = LayerValidationRules<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -31023,7 +31023,7 @@ impl<'a> flatbuffers::Follow<'a> for StandardValidation<'a> { type Inner = StandardValidation<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -31137,7 +31137,7 @@ impl<'a> flatbuffers::Follow<'a> for Standard<'a> { type Inner = Standard<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -31353,7 +31353,7 @@ impl<'a> flatbuffers::Follow<'a> for VersionBase<'a> { type Inner = VersionBase<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -31535,7 +31535,7 @@ impl<'a> flatbuffers::Follow<'a> for Checkpoint<'a> { type Inner = Checkpoint<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -31666,7 +31666,7 @@ impl<'a> flatbuffers::Follow<'a> for JSONPatchOperation<'a> { type Inner = JSONPatchOperation<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -31814,7 +31814,7 @@ impl<'a> flatbuffers::Follow<'a> for Delta<'a> { type Inner = Delta<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -31945,7 +31945,7 @@ impl<'a> flatbuffers::Follow<'a> for VersionGraphMetadata<'a> { type Inner = VersionGraphMetadata<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -32059,7 +32059,7 @@ impl<'a> flatbuffers::Follow<'a> for VersionGraph<'a> { type Inner = VersionGraph<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -32224,7 +32224,7 @@ impl<'a> flatbuffers::Follow<'a> for DucExternalFileData<'a> { type Inner = DucExternalFileData<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -32400,7 +32400,7 @@ impl<'a> flatbuffers::Follow<'a> for DucExternalFileEntry<'a> { type Inner = DucExternalFileEntry<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -32525,7 +32525,7 @@ impl<'a> flatbuffers::Follow<'a> for ExportedDataState<'a> { type Inner = ExportedDataState<'a>; #[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { - Self { _tab: flatbuffers::Table::new(buf, loc) } + Self { _tab: unsafe { flatbuffers::Table::new(buf, loc) } } } } @@ -32968,14 +32968,14 @@ pub fn size_prefixed_root_as_exported_data_state_with_opts<'b, 'o>( /// # Safety /// Callers must trust the given bytes do indeed contain a valid `ExportedDataState`. pub unsafe fn root_as_exported_data_state_unchecked(buf: &[u8]) -> ExportedDataState { - flatbuffers::root_unchecked::(buf) + unsafe { flatbuffers::root_unchecked::(buf) } } #[inline] /// Assumes, without verification, that a buffer of bytes contains a size prefixed ExportedDataState and returns it. /// # Safety /// Callers must trust the given bytes do indeed contain a valid size prefixed `ExportedDataState`. pub unsafe fn size_prefixed_root_as_exported_data_state_unchecked(buf: &[u8]) -> ExportedDataState { - flatbuffers::size_prefixed_root_unchecked::(buf) + unsafe { flatbuffers::size_prefixed_root_unchecked::(buf) } } pub const EXPORTED_DATA_STATE_IDENTIFIER: &str = "DUC_"; diff --git a/turbo.json b/turbo.json index ab7051bf..8e9ff92e 100644 --- a/turbo.json +++ b/turbo.json @@ -9,6 +9,10 @@ "cache": false, "inputs": ["$TURBO_DEFAULT$", ".env.*", ".env.local"] }, + "ducdxf#build": { + "cache": false, + "inputs": ["$TURBO_DEFAULT$", ".env.*", ".env.local"] + }, "ducrs#build": { "cache": false, "inputs": ["$TURBO_DEFAULT$", ".env.*", ".env.local"]